From 3526f7eb5dbf33d22fe1fd2645564216f754b746 Mon Sep 17 00:00:00 2001 From: johnman Date: Thu, 28 Nov 2024 11:04:49 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20built-on?= =?UTF-8?q?-openfin/workspace-starter@bcf29b10e16bfca53daac59f42acf313b38f?= =?UTF-8?q?7b20=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/provider.bundle.js | 356 +++++++++--------- 1 file changed, 178 insertions(+), 178 deletions(-) diff --git a/workspace/v20.0.0/customize-home-templates/js/provider.bundle.js b/workspace/v20.0.0/customize-home-templates/js/provider.bundle.js index 36dea5f5d..4f2f259b3 100644 --- a/workspace/v20.0.0/customize-home-templates/js/provider.bundle.js +++ b/workspace/v20.0.0/customize-home-templates/js/provider.bundle.js @@ -7150,9 +7150,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ round: () => (/* binding */ round) /* harmony export */ }); /*! - * @kurkle/color v0.3.2 + * @kurkle/color v0.3.4 * https://github.com/kurkle/color#readme - * (c) 2023 Jukka Kurkela + * (c) 2024 Jukka Kurkela * Released under the MIT License */ function round(v) { @@ -7329,183 +7329,183 @@ function hslString(v) { } const map = { - x: 'dark', - Z: 'light', - Y: 're', - X: 'blu', - W: 'gr', - V: 'medium', - U: 'slate', - A: 'ee', - T: 'ol', - S: 'or', - B: 'ra', - C: 'lateg', - D: 'ights', - R: 'in', - Q: 'turquois', - E: 'hi', - P: 'ro', - O: 'al', - N: 'le', - M: 'de', - L: 'yello', - F: 'en', - K: 'ch', - G: 'arks', - H: 'ea', - I: 'ightg', - J: 'wh' + x: 'dark', + Z: 'light', + Y: 're', + X: 'blu', + W: 'gr', + V: 'medium', + U: 'slate', + A: 'ee', + T: 'ol', + S: 'or', + B: 'ra', + C: 'lateg', + D: 'ights', + R: 'in', + Q: 'turquois', + E: 'hi', + P: 'ro', + O: 'al', + N: 'le', + M: 'de', + L: 'yello', + F: 'en', + K: 'ch', + G: 'arks', + H: 'ea', + I: 'ightg', + J: 'wh' }; const names$1 = { - OiceXe: 'f0f8ff', - antiquewEte: 'faebd7', - aqua: 'ffff', - aquamarRe: '7fffd4', - azuY: 'f0ffff', - beige: 'f5f5dc', - bisque: 'ffe4c4', - black: '0', - blanKedOmond: 'ffebcd', - Xe: 'ff', - XeviTet: '8a2be2', - bPwn: 'a52a2a', - burlywood: 'deb887', - caMtXe: '5f9ea0', - KartYuse: '7fff00', - KocTate: 'd2691e', - cSO: 'ff7f50', - cSnflowerXe: '6495ed', - cSnsilk: 'fff8dc', - crimson: 'dc143c', - cyan: 'ffff', - xXe: '8b', - xcyan: '8b8b', - xgTMnPd: 'b8860b', - xWay: 'a9a9a9', - xgYF: '6400', - xgYy: 'a9a9a9', - xkhaki: 'bdb76b', - xmagFta: '8b008b', - xTivegYF: '556b2f', - xSange: 'ff8c00', - xScEd: '9932cc', - xYd: '8b0000', - xsOmon: 'e9967a', - xsHgYF: '8fbc8f', - xUXe: '483d8b', - xUWay: '2f4f4f', - xUgYy: '2f4f4f', - xQe: 'ced1', - xviTet: '9400d3', - dAppRk: 'ff1493', - dApskyXe: 'bfff', - dimWay: '696969', - dimgYy: '696969', - dodgerXe: '1e90ff', - fiYbrick: 'b22222', - flSOwEte: 'fffaf0', - foYstWAn: '228b22', - fuKsia: 'ff00ff', - gaRsbSo: 'dcdcdc', - ghostwEte: 'f8f8ff', - gTd: 'ffd700', - gTMnPd: 'daa520', - Way: '808080', - gYF: '8000', - gYFLw: 'adff2f', - gYy: '808080', - honeyMw: 'f0fff0', - hotpRk: 'ff69b4', - RdianYd: 'cd5c5c', - Rdigo: '4b0082', - ivSy: 'fffff0', - khaki: 'f0e68c', - lavFMr: 'e6e6fa', - lavFMrXsh: 'fff0f5', - lawngYF: '7cfc00', - NmoncEffon: 'fffacd', - ZXe: 'add8e6', - ZcSO: 'f08080', - Zcyan: 'e0ffff', - ZgTMnPdLw: 'fafad2', - ZWay: 'd3d3d3', - ZgYF: '90ee90', - ZgYy: 'd3d3d3', - ZpRk: 'ffb6c1', - ZsOmon: 'ffa07a', - ZsHgYF: '20b2aa', - ZskyXe: '87cefa', - ZUWay: '778899', - ZUgYy: '778899', - ZstAlXe: 'b0c4de', - ZLw: 'ffffe0', - lime: 'ff00', - limegYF: '32cd32', - lRF: 'faf0e6', - magFta: 'ff00ff', - maPon: '800000', - VaquamarRe: '66cdaa', - VXe: 'cd', - VScEd: 'ba55d3', - VpurpN: '9370db', - VsHgYF: '3cb371', - VUXe: '7b68ee', - VsprRggYF: 'fa9a', - VQe: '48d1cc', - VviTetYd: 'c71585', - midnightXe: '191970', - mRtcYam: 'f5fffa', - mistyPse: 'ffe4e1', - moccasR: 'ffe4b5', - navajowEte: 'ffdead', - navy: '80', - Tdlace: 'fdf5e6', - Tive: '808000', - TivedBb: '6b8e23', - Sange: 'ffa500', - SangeYd: 'ff4500', - ScEd: 'da70d6', - pOegTMnPd: 'eee8aa', - pOegYF: '98fb98', - pOeQe: 'afeeee', - pOeviTetYd: 'db7093', - papayawEp: 'ffefd5', - pHKpuff: 'ffdab9', - peru: 'cd853f', - pRk: 'ffc0cb', - plum: 'dda0dd', - powMrXe: 'b0e0e6', - purpN: '800080', - YbeccapurpN: '663399', - Yd: 'ff0000', - Psybrown: 'bc8f8f', - PyOXe: '4169e1', - saddNbPwn: '8b4513', - sOmon: 'fa8072', - sandybPwn: 'f4a460', - sHgYF: '2e8b57', - sHshell: 'fff5ee', - siFna: 'a0522d', - silver: 'c0c0c0', - skyXe: '87ceeb', - UXe: '6a5acd', - UWay: '708090', - UgYy: '708090', - snow: 'fffafa', - sprRggYF: 'ff7f', - stAlXe: '4682b4', - tan: 'd2b48c', - teO: '8080', - tEstN: 'd8bfd8', - tomato: 'ff6347', - Qe: '40e0d0', - viTet: 'ee82ee', - JHt: 'f5deb3', - wEte: 'ffffff', - wEtesmoke: 'f5f5f5', - Lw: 'ffff00', - LwgYF: '9acd32' + OiceXe: 'f0f8ff', + antiquewEte: 'faebd7', + aqua: 'ffff', + aquamarRe: '7fffd4', + azuY: 'f0ffff', + beige: 'f5f5dc', + bisque: 'ffe4c4', + black: '0', + blanKedOmond: 'ffebcd', + Xe: 'ff', + XeviTet: '8a2be2', + bPwn: 'a52a2a', + burlywood: 'deb887', + caMtXe: '5f9ea0', + KartYuse: '7fff00', + KocTate: 'd2691e', + cSO: 'ff7f50', + cSnflowerXe: '6495ed', + cSnsilk: 'fff8dc', + crimson: 'dc143c', + cyan: 'ffff', + xXe: '8b', + xcyan: '8b8b', + xgTMnPd: 'b8860b', + xWay: 'a9a9a9', + xgYF: '6400', + xgYy: 'a9a9a9', + xkhaki: 'bdb76b', + xmagFta: '8b008b', + xTivegYF: '556b2f', + xSange: 'ff8c00', + xScEd: '9932cc', + xYd: '8b0000', + xsOmon: 'e9967a', + xsHgYF: '8fbc8f', + xUXe: '483d8b', + xUWay: '2f4f4f', + xUgYy: '2f4f4f', + xQe: 'ced1', + xviTet: '9400d3', + dAppRk: 'ff1493', + dApskyXe: 'bfff', + dimWay: '696969', + dimgYy: '696969', + dodgerXe: '1e90ff', + fiYbrick: 'b22222', + flSOwEte: 'fffaf0', + foYstWAn: '228b22', + fuKsia: 'ff00ff', + gaRsbSo: 'dcdcdc', + ghostwEte: 'f8f8ff', + gTd: 'ffd700', + gTMnPd: 'daa520', + Way: '808080', + gYF: '8000', + gYFLw: 'adff2f', + gYy: '808080', + honeyMw: 'f0fff0', + hotpRk: 'ff69b4', + RdianYd: 'cd5c5c', + Rdigo: '4b0082', + ivSy: 'fffff0', + khaki: 'f0e68c', + lavFMr: 'e6e6fa', + lavFMrXsh: 'fff0f5', + lawngYF: '7cfc00', + NmoncEffon: 'fffacd', + ZXe: 'add8e6', + ZcSO: 'f08080', + Zcyan: 'e0ffff', + ZgTMnPdLw: 'fafad2', + ZWay: 'd3d3d3', + ZgYF: '90ee90', + ZgYy: 'd3d3d3', + ZpRk: 'ffb6c1', + ZsOmon: 'ffa07a', + ZsHgYF: '20b2aa', + ZskyXe: '87cefa', + ZUWay: '778899', + ZUgYy: '778899', + ZstAlXe: 'b0c4de', + ZLw: 'ffffe0', + lime: 'ff00', + limegYF: '32cd32', + lRF: 'faf0e6', + magFta: 'ff00ff', + maPon: '800000', + VaquamarRe: '66cdaa', + VXe: 'cd', + VScEd: 'ba55d3', + VpurpN: '9370db', + VsHgYF: '3cb371', + VUXe: '7b68ee', + VsprRggYF: 'fa9a', + VQe: '48d1cc', + VviTetYd: 'c71585', + midnightXe: '191970', + mRtcYam: 'f5fffa', + mistyPse: 'ffe4e1', + moccasR: 'ffe4b5', + navajowEte: 'ffdead', + navy: '80', + Tdlace: 'fdf5e6', + Tive: '808000', + TivedBb: '6b8e23', + Sange: 'ffa500', + SangeYd: 'ff4500', + ScEd: 'da70d6', + pOegTMnPd: 'eee8aa', + pOegYF: '98fb98', + pOeQe: 'afeeee', + pOeviTetYd: 'db7093', + papayawEp: 'ffefd5', + pHKpuff: 'ffdab9', + peru: 'cd853f', + pRk: 'ffc0cb', + plum: 'dda0dd', + powMrXe: 'b0e0e6', + purpN: '800080', + YbeccapurpN: '663399', + Yd: 'ff0000', + Psybrown: 'bc8f8f', + PyOXe: '4169e1', + saddNbPwn: '8b4513', + sOmon: 'fa8072', + sandybPwn: 'f4a460', + sHgYF: '2e8b57', + sHshell: 'fff5ee', + siFna: 'a0522d', + silver: 'c0c0c0', + skyXe: '87ceeb', + UXe: '6a5acd', + UWay: '708090', + UgYy: '708090', + snow: 'fffafa', + sprRggYF: 'ff7f', + stAlXe: '4682b4', + tan: 'd2b48c', + teO: '8080', + tEstN: 'd8bfd8', + tomato: 'ff6347', + Qe: '40e0d0', + viTet: 'ee82ee', + JHt: 'f5deb3', + wEte: 'ffffff', + wEtesmoke: 'f5f5f5', + Lw: 'ffff00', + LwgYF: '9acd32' }; function unpack() { const unpacked = {}; @@ -31076,4 +31076,4 @@ async function initializeWorkspaceComponents() { /******/ })() ; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTs7QUFFQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxTQUFTO0FBQzNDLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxpQkFBaUI7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QUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHlEQUFRO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsV0FBVztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkU7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLFVBQVU7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsU0FBUztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRSx5REFBRTtBQUNuRTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsV0FBVztBQUM5QjtBQUNBO0FBQ0EsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCw2REFBUztBQUM5RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHlEQUEyQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsbUJBQW1CO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGFBQWE7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLFVBQVU7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLFVBQVU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRSt0QjtBQUMvdEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3p0V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3NDOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixRQUFRO0FBQ3JDO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxtQkFBbUIsU0FBUztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLFVBQVU7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsVUFBVTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsVUFBVTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLFVBQVU7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxVQUFVO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0EsZ0JBQWdCLHVDQUF1QztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQSxZQUFZLGtDQUFrQztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxnREFBSztBQUN6RDtBQUNBO0FBQ0Esb0RBQW9ELGdEQUFLO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQztBQUMvQztBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLDRDQUE0QyxVQUFVO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsV0FBVztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0JBQWtCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksMEJBQTBCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLFVBQVU7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksYUFBYTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLGlDQUFpQztBQUNqQyxvQ0FBb0M7QUFDcEM7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRCxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLGdDQUFnQztBQUNoQztBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLGlDQUFpQztBQUNqQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxZQUFZLGtHQUFrRztBQUM5RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSw2REFBNkQ7QUFDekUsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDBDQUEwQztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksNkRBQTZEO0FBQ3pFO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksVUFBVTtBQUN0QixZQUFZLFlBQVk7QUFDeEI7QUFDQTtBQUNBLDZCQUE2QixVQUFVO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsZUFBZTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixVQUFVO0FBQ3pDLCtCQUErQixVQUFVO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixVQUFVO0FBQ3pDLCtCQUErQixVQUFVO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxlQUFlO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLFVBQVU7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EseUNBQXlDLFVBQVU7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtFQUFrRTtBQUNsRTtBQUNBLGNBQWMsK0NBQStDO0FBQzdELGNBQWMsbUNBQW1DO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLG9DQUFvQztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksZUFBZTtBQUMzQjtBQUNBO0FBQ0EsVUFBVSxrQkFBa0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsa0JBQWtCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsYUFBYTtBQUM5QyxnQ0FBZ0MsWUFBWTtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixxQ0FBcUM7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksZ0RBQWdEO0FBQzVELFlBQVksdUJBQXVCO0FBQ25DO0FBQ0EsVUFBVSxzQkFBc0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsVUFBVTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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RyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9Ab3BlbmZpbi93b3Jrc3BhY2UtcGxhdGZvcm0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvQG9wZW5maW4vd29ya3NwYWNlL2luZGV4LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fRGF0YVZpZXcuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19Qcm9taXNlLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheU1hcC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FzY2lpVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYXRpdmUuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUtleXMuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5hcnkuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVmFsdWVzLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXROYXRpdmUuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRSYXdUYWcuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRUYWcuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRWYWx1ZS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc1VuaWNvZGUuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2l0ZXJhdG9yVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbm9kZVV0aWwuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9BcnJheS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3VuaWNvZGVUb0FycmF5LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0xlbmd0aC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTdHJpbmcuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5cy5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b0FycmF5LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1lbW9qaS9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9ub2RlLWVtb2ppL2xpYi9lbW9qaS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4vY2xpZW50L3NyYy9ob21lLnRzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi9jbGllbnQvc3JjL3NvdXJjZXMudHMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uL2NsaWVudC9zcmMvc291cmNlcy9hc3luYy1jb250YWN0cy9hc3luYy1jb250YWN0cy1zb3VyY2UudHMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uL2NsaWVudC9zcmMvc291cmNlcy9lbW9qaS9lbW9qaS1zb3VyY2UudHMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uL2NsaWVudC9zcmMvc291cmNlcy9xdW90ZS9xdW90ZS1zb3VyY2UudHMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uL2NsaWVudC9zcmMvc291cmNlcy9zdWdnZXN0aW9ucy9zdWdnZXN0aW9uLXNvdXJjZS50cyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4vY2xpZW50L3NyYy9zb3VyY2VzL3RlbXBsYXRlLXR5cGVzL3RlbXBsYXRlLXR5cGVzLXNvdXJjZS50cyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4vY2xpZW50L3NyYy9zb3VyY2VzL3RyZWUtaW5saW5lL3RyZWUtaW5saW5lLXNvdXJjZS50cyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4vY2xpZW50L3NyYy9zb3VyY2VzL3RyZWUtcXVlcnkvdHJlZS1xdWVyeS1zb3VyY2UudHMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvQGt1cmtsZS9jb2xvci9kaXN0L2NvbG9yLmVzbS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9kaXN0L2NoYXJ0LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL2Rpc3QvY2h1bmtzL2hlbHBlcnMuc2VnbWVudC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvZGF0ZXRpbWUuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2R1cmF0aW9uLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9lcnJvcnMuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvY29udmVyc2lvbnMuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvZGlmZi5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9kaWdpdHMuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvZW5nbGlzaC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9mb3JtYXRzLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbXBsL2Zvcm1hdHRlci5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9pbnZhbGlkLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbXBsL2xvY2FsZS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9yZWdleFBhcnNlci5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC90b2tlblBhcnNlci5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC91dGlsLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbXBsL3pvbmVVdGlsLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbmZvLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbnRlcnZhbC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvbHV4b24uanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL3NldHRpbmdzLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy96b25lLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy96b25lcy9JQU5BWm9uZS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvem9uZXMvZml4ZWRPZmZzZXRab25lLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy96b25lcy9pbnZhbGlkWm9uZS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvem9uZXMvc3lzdGVtWm9uZS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy93ZWJwYWNrL3J1bnRpbWUvbm9kZSBtb2R1bGUgZGVjb3JhdG9yIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi9jbGllbnQvc3JjL3Byb3ZpZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISBGb3IgbGljZW5zZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIGluZGV4LmpzLkxJQ0VOU0UudHh0ICovXG4oKCk9Pnt2YXIgZT17MzA0OihlLHQsbik9Pnt2YXIgcj17ODU5NDooZSx0LG4pPT57bi5kKHQse1o6KCk9Pm99KTt2YXIgcj0vXigoY2hpbGRyZW58ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUx8a2V5fHJlZnxhdXRvRm9jdXN8ZGVmYXVsdFZhbHVlfGRlZmF1bHRDaGVja2VkfGlubmVySFRNTHxzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmd8c3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nfHZhbHVlTGlua3xhY2NlcHR8YWNjZXB0Q2hhcnNldHxhY2Nlc3NLZXl8YWN0aW9ufGFsbG93fGFsbG93VXNlck1lZGlhfGFsbG93UGF5bWVudFJlcXVlc3R8YWxsb3dGdWxsU2NyZWVufGFsbG93VHJhbnNwYXJlbmN5fGFsdHxhc3luY3xhdXRvQ29tcGxldGV8YXV0b1BsYXl8Y2FwdHVyZXxjZWxsUGFkZGluZ3xjZWxsU3BhY2luZ3xjaGFsbGVuZ2V8Y2hhclNldHxjaGVja2VkfGNpdGV8Y2xhc3NJRHxjbGFzc05hbWV8Y29sc3xjb2xTcGFufGNvbnRlbnR8Y29udGVudEVkaXRhYmxlfGNvbnRleHRNZW51fGNvbnRyb2xzfGNvbnRyb2xzTGlzdHxjb29yZHN8Y3Jvc3NPcmlnaW58ZGF0YXxkYXRlVGltZXxkZWNvZGluZ3xkZWZhdWx0fGRlZmVyfGRpcnxkaXNhYmxlZHxkaXNhYmxlUGljdHVyZUluUGljdHVyZXxkb3dubG9hZHxkcmFnZ2FibGV8ZW5jVHlwZXxmb3JtfGZvcm1BY3Rpb258Zm9ybUVuY1R5cGV8Zm9ybU1ldGhvZHxmb3JtTm9WYWxpZGF0ZXxmb3JtVGFyZ2V0fGZyYW1lQm9yZGVyfGhlYWRlcnN8aGVpZ2h0fGhpZGRlbnxoaWdofGhyZWZ8aHJlZkxhbmd8aHRtbEZvcnxodHRwRXF1aXZ8aWR8aW5wdXRNb2RlfGludGVncml0eXxpc3xrZXlQYXJhbXN8a2V5VHlwZXxraW5kfGxhYmVsfGxhbmd8bGlzdHxsb2FkaW5nfGxvb3B8bG93fG1hcmdpbkhlaWdodHxtYXJnaW5XaWR0aHxtYXh8bWF4TGVuZ3RofG1lZGlhfG1lZGlhR3JvdXB8bWV0aG9kfG1pbnxtaW5MZW5ndGh8bXVsdGlwbGV8bXV0ZWR8bmFtZXxub25jZXxub1ZhbGlkYXRlfG9wZW58b3B0aW11bXxwYXR0ZXJufHBsYWNlaG9sZGVyfHBsYXlzSW5saW5lfHBvc3RlcnxwcmVsb2FkfHByb2ZpbGV8cmFkaW9Hcm91cHxyZWFkT25seXxyZWZlcnJlclBvbGljeXxyZWx8cmVxdWlyZWR8cmV2ZXJzZWR8cm9sZXxyb3dzfHJvd1NwYW58c2FuZGJveHxzY29wZXxzY29wZWR8c2Nyb2xsaW5nfHNlYW1sZXNzfHNlbGVjdGVkfHNoYXBlfHNpemV8c2l6ZXN8c2xvdHxzcGFufHNwZWxsQ2hlY2t8c3JjfHNyY0RvY3xzcmNMYW5nfHNyY1NldHxzdGFydHxzdGVwfHN0eWxlfHN1bW1hcnl8dGFiSW5kZXh8dGFyZ2V0fHRpdGxlfHR5cGV8dXNlTWFwfHZhbHVlfHdpZHRofHdtb2RlfHdyYXB8YWJvdXR8ZGF0YXR5cGV8aW5saXN0fHByZWZpeHxwcm9wZXJ0eXxyZXNvdXJjZXx0eXBlb2Z8dm9jYWJ8YXV0b0NhcGl0YWxpemV8YXV0b0NvcnJlY3R8YXV0b1NhdmV8Y29sb3J8aW5lcnR8aXRlbVByb3B8aXRlbVNjb3BlfGl0ZW1UeXBlfGl0ZW1JRHxpdGVtUmVmfG9ufHJlc3VsdHN8c2VjdXJpdHl8dW5zZWxlY3RhYmxlfGFjY2VudEhlaWdodHxhY2N1bXVsYXRlfGFkZGl0aXZlfGFsaWdubWVudEJhc2VsaW5lfGFsbG93UmVvcmRlcnxhbHBoYWJldGljfGFtcGxpdHVkZXxhcmFiaWNGb3JtfGFzY2VudHxhdHRyaWJ1dGVOYW1lfGF0dHJpYnV0ZVR5cGV8YXV0b1JldmVyc2V8YXppbXV0aHxiYXNlRnJlcXVlbmN5fGJhc2VsaW5lU2hpZnR8YmFzZVByb2ZpbGV8YmJveHxiZWdpbnxiaWFzfGJ5fGNhbGNNb2RlfGNhcEhlaWdodHxjbGlwfGNsaXBQYXRoVW5pdHN8Y2xpcFBhdGh8Y2xpcFJ1bGV8Y29sb3JJbnRlcnBvbGF0aW9ufGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnN8Y29sb3JQcm9maWxlfGNvbG9yUmVuZGVyaW5nfGNvbnRlbnRTY3JpcHRUeXBlfGNvbnRlbnRTdHlsZVR5cGV8Y3Vyc29yfGN4fGN5fGR8ZGVjZWxlcmF0ZXxkZXNjZW50fGRpZmZ1c2VDb25zdGFudHxkaXJlY3Rpb258ZGlzcGxheXxkaXZpc29yfGRvbWluYW50QmFzZWxpbmV8ZHVyfGR4fGR5fGVkZ2VNb2RlfGVsZXZhdGlvbnxlbmFibGVCYWNrZ3JvdW5kfGVuZHxleHBvbmVudHxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkfGZpbGx8ZmlsbE9wYWNpdHl8ZmlsbFJ1bGV8ZmlsdGVyfGZpbHRlclJlc3xmaWx0ZXJVbml0c3xmbG9vZENvbG9yfGZsb29kT3BhY2l0eXxmb2N1c2FibGV8Zm9udEZhbWlseXxmb250U2l6ZXxmb250U2l6ZUFkanVzdHxmb250U3RyZXRjaHxmb250U3R5bGV8Zm9udFZhcmlhbnR8Zm9udFdlaWdodHxmb3JtYXR8ZnJvbXxmcnxmeHxmeXxnMXxnMnxnbHlwaE5hbWV8Z2x5cGhPcmllbnRhdGlvbkhvcml6b250YWx8Z2x5cGhPcmllbnRhdGlvblZlcnRpY2FsfGdseXBoUmVmfGdyYWRpZW50VHJhbnNmb3JtfGdyYWRpZW50VW5pdHN8aGFuZ2luZ3xob3JpekFkdlh8aG9yaXpPcmlnaW5YfGlkZW9ncmFwaGljfGltYWdlUmVuZGVyaW5nfGlufGluMnxpbnRlcmNlcHR8a3xrMXxrMnxrM3xrNHxrZXJuZWxNYXRyaXh8a2VybmVsVW5pdExlbmd0aHxrZXJuaW5nfGtleVBvaW50c3xrZXlTcGxpbmVzfGtleVRpbWVzfGxlbmd0aEFkanVzdHxsZXR0ZXJTcGFjaW5nfGxpZ2h0aW5nQ29sb3J8bGltaXRpbmdDb25lQW5nbGV8bG9jYWx8bWFya2VyRW5kfG1hcmtlck1pZHxtYXJrZXJTdGFydHxtYXJrZXJIZWlnaHR8bWFya2VyVW5pdHN8bWFya2VyV2lkdGh8bWFza3xtYXNrQ29udGVudFVuaXRzfG1hc2tVbml0c3xtYXRoZW1hdGljYWx8bW9kZXxudW1PY3RhdmVzfG9mZnNldHxvcGFjaXR5fG9wZXJhdG9yfG9yZGVyfG9yaWVudHxvcmllbnRhdGlvbnxvcmlnaW58b3ZlcmZsb3d8b3ZlcmxpbmVQb3NpdGlvbnxvdmVybGluZVRoaWNrbmVzc3xwYW5vc2UxfHBhaW50T3JkZXJ8cGF0aExlbmd0aHxwYXR0ZXJuQ29udGVudFVuaXRzfHBhdHRlcm5UcmFuc2Zvcm18cGF0dGVyblVuaXRzfHBvaW50ZXJFdmVudHN8cG9pbnRzfHBvaW50c0F0WHxwb2ludHNBdFl8cG9pbnRzQXRafHByZXNlcnZlQWxwaGF8cHJlc2VydmVBc3BlY3RSYXRpb3xwcmltaXRpdmVVbml0c3xyfHJhZGl1c3xyZWZYfHJlZll8cmVuZGVyaW5nSW50ZW50fHJlcGVhdENvdW50fHJlcGVhdER1cnxyZXF1aXJlZEV4dGVuc2lvbnN8cmVxdWlyZWRGZWF0dXJlc3xyZXN0YXJ0fHJlc3VsdHxyb3RhdGV8cnh8cnl8c2NhbGV8c2VlZHxzaGFwZVJlbmRlcmluZ3xzbG9wZXxzcGFjaW5nfHNwZWN1bGFyQ29uc3RhbnR8c3BlY3VsYXJFeHBvbmVudHxzcGVlZHxzcHJlYWRNZXRob2R8c3RhcnRPZmZzZXR8c3RkRGV2aWF0aW9ufHN0ZW1ofHN0ZW12fHN0aXRjaFRpbGVzfHN0b3BDb2xvcnxzdG9wT3BhY2l0eXxzdHJpa2V0aHJvdWdoUG9zaXRpb258c3RyaWtldGhyb3VnaFRoaWNrbmVzc3xzdHJpbmd8c3Ryb2tlfHN0cm9rZURhc2hhcnJheXxzdHJva2VEYXNob2Zmc2V0fHN0cm9rZUxpbmVjYXB8c3Ryb2tlTGluZWpvaW58c3Ryb2tlTWl0ZXJsaW1pdHxzdHJva2VPcGFjaXR5fHN0cm9rZVdpZHRofHN1cmZhY2VTY2FsZXxzeXN0ZW1MYW5ndWFnZXx0YWJsZVZhbHVlc3x0YXJnZXRYfHRhcmdldFl8dGV4dEFuY2hvcnx0ZXh0RGVjb3JhdGlvbnx0ZXh0UmVuZGVyaW5nfHRleHRMZW5ndGh8dG98dHJhbnNmb3JtfHUxfHUyfHVuZGVybGluZVBvc2l0aW9ufHVuZGVybGluZVRoaWNrbmVzc3x1bmljb2RlfHVuaWNvZGVCaWRpfHVuaWNvZGVSYW5nZXx1bml0c1BlckVtfHZBbHBoYWJldGljfHZIYW5naW5nfHZJZGVvZ3JhcGhpY3x2TWF0aGVtYXRpY2FsfHZhbHVlc3x2ZWN0b3JFZmZlY3R8dmVyc2lvbnx2ZXJ0QWR2WXx2ZXJ0T3JpZ2luWHx2ZXJ0T3JpZ2luWXx2aWV3Qm94fHZpZXdUYXJnZXR8dmlzaWJpbGl0eXx3aWR0aHN8d29yZFNwYWNpbmd8d3JpdGluZ01vZGV8eHx4SGVpZ2h0fHgxfHgyfHhDaGFubmVsU2VsZWN0b3J8eGxpbmtBY3R1YXRlfHhsaW5rQXJjcm9sZXx4bGlua0hyZWZ8eGxpbmtSb2xlfHhsaW5rU2hvd3x4bGlua1RpdGxlfHhsaW5rVHlwZXx4bWxCYXNlfHhtbG5zfHhtbG5zWGxpbmt8eG1sTGFuZ3x4bWxTcGFjZXx5fHkxfHkyfHlDaGFubmVsU2VsZWN0b3J8enx6b29tQW5kUGFufGZvcnxjbGFzc3xhdXRvZm9jdXMpfCgoW0RkXVtBYV1bVHRdW0FhXXxbQWFdW1JyXVtJaV1bQWFdfHgpLS4qKSkkLztjb25zdCBvPShhPXt9LGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1hW2VdJiYoYVtlXT0odD1lLHIudGVzdCh0KXx8MTExPT09dC5jaGFyQ29kZUF0KDApJiYxMTA9PT10LmNoYXJDb2RlQXQoMSkmJnQuY2hhckNvZGVBdCgyKTw5MSkpLGFbZV07dmFyIHR9KTt2YXIgYX0sMTUyMTooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtBY3Rpdml0eUxvZ0ljb246KCk9PmEsQWxpZ25CYXNlbGluZUljb246KCk9PmksQWxpZ25Cb3R0b21JY29uOigpPT5sLEFsaWduQ2VudGVySG9yaXpvbnRhbGx5SWNvbjooKT0+cyxBbGlnbkNlbnRlclZlcnRpY2FsbHlJY29uOigpPT5jLEFsaWduTGVmdEljb246KCk9PnUsQWxpZ25SaWdodEljb246KCk9PmQsQWxpZ25Ub3BJY29uOigpPT5wLEFsbFNpZGVzSWNvbjooKT0+ZixBbmdsZUljb246KCk9PmgsQXJjaGl2ZUljb246KCk9PmcsQXJyb3dCb3R0b21MZWZ0SWNvbjooKT0+dixBcnJvd0JvdHRvbVJpZ2h0SWNvbjooKT0+QyxBcnJvd0Rvd25JY29uOigpPT5tLEFycm93TGVmdEljb246KCk9PncsQXJyb3dSaWdodEljb246KCk9PmIsQXJyb3dUb3BMZWZ0SWNvbjooKT0+eSxBcnJvd1RvcFJpZ2h0SWNvbjooKT0+eCxBcnJvd1VwSWNvbjooKT0+ayxBc3BlY3RSYXRpb0ljb246KCk9PlMsQXZhdGFySWNvbjooKT0+TyxCYWNrcGFja0ljb246KCk9Pk0sQmFkZ2VJY29uOigpPT5MLEJhckNoYXJ0SWNvbjooKT0+XyxCZWxsSWNvbjooKT0+UCxCbGVuZGluZ01vZGVJY29uOigpPT5FLEJvb2ttYXJrSWNvbjooKT0+aixCb3JkZXJBbGxJY29uOigpPT5SLEJvcmRlckJvdHRvbUljb246KCk9PkksQm9yZGVyRGFzaGVkSWNvbjooKT0+VixCb3JkZXJEb3R0ZWRJY29uOigpPT5ILEJvcmRlckxlZnRJY29uOigpPT5BLEJvcmRlck5vbmVJY29uOigpPT5ULEJvcmRlclJpZ2h0SWNvbjooKT0+RCxCb3JkZXJTb2xpZEljb246KCk9PkIsQm9yZGVyU3BsaXRJY29uOigpPT5aLEJvcmRlclN0eWxlSWNvbjooKT0+JCxCb3JkZXJUb3BJY29uOigpPT5OLEJveEljb246KCk9PkYsQm94TW9kZWxJY29uOigpPT5XLEJ1dHRvbkljb246KCk9PlUsQ2FsZW5kYXJJY29uOigpPT56LENhbWVyYUljb246KCk9PkcsQ2FyZFN0YWNrSWNvbjooKT0+SyxDYXJkU3RhY2tNaW51c0ljb246KCk9PnEsQ2FyZFN0YWNrUGx1c0ljb246KCk9PlksQ2FyZXREb3duSWNvbjooKT0+SixDYXJldExlZnRJY29uOigpPT5YLENhcmV0UmlnaHRJY29uOigpPT5RLENhcmV0U29ydEljb246KCk9PmVlLENhcmV0VXBJY29uOigpPT50ZSxDaGF0QnViYmxlSWNvbjooKT0+bmUsQ2hlY2tDaXJjbGVkSWNvbjooKT0+b2UsQ2hlY2tJY29uOigpPT5yZSxDaGVja2JveEljb246KCk9PmFlLENoZXZyb25Eb3duSWNvbjooKT0+aWUsQ2hldnJvbkxlZnRJY29uOigpPT5sZSxDaGV2cm9uUmlnaHRJY29uOigpPT5zZSxDaGV2cm9uVXBJY29uOigpPT5jZSxDaXJjbGVCYWNrc2xhc2hJY29uOigpPT5kZSxDaXJjbGVJY29uOigpPT51ZSxDbGlwYm9hcmRDb3B5SWNvbjooKT0+ZmUsQ2xpcGJvYXJkSWNvbjooKT0+cGUsQ2xvY2tJY29uOigpPT5oZSxDb2RlSWNvbjooKT0+Z2UsQ29kZVNhbmRib3hMb2dvSWNvbjooKT0+dmUsQ29sdW1uU3BhY2luZ0ljb246KCk9PkNlLENvbHVtbnNJY29uOigpPT5tZSxDb21taXRJY29uOigpPT53ZSxDb21wb25lbnQxSWNvbjooKT0+YmUsQ29tcG9uZW50Mkljb246KCk9PnllLENvbXBvbmVudEJvb2xlYW5JY29uOigpPT54ZSxDb21wb25lbnRJbnN0YW5jZUljb246KCk9PmtlLENvbXBvbmVudE5vbmVJY29uOigpPT5TZSxDb21wb25lbnRQbGFjZWhvbGRlckljb246KCk9Pk9lLENvbnRhaW5lckljb246KCk9Pk1lLENvb2tpZUljb246KCk9PkxlLENvcHlJY29uOigpPT5fZSxDb3JuZXJCb3R0b21MZWZ0SWNvbjooKT0+UGUsQ29ybmVyQm90dG9tUmlnaHRJY29uOigpPT5FZSxDb3JuZXJUb3BMZWZ0SWNvbjooKT0+amUsQ29ybmVyVG9wUmlnaHRJY29uOigpPT5SZSxDb3JuZXJzSWNvbjooKT0+SWUsQ291bnRkb3duVGltZXJJY29uOigpPT5WZSxDb3VudGVyQ2xvY2t3aXNlQ2xvY2tJY29uOigpPT5IZSxDcm9wSWNvbjooKT0+QWUsQ3Jvc3MxSWNvbjooKT0+VGUsQ3Jvc3MySWNvbjooKT0+RGUsQ3Jvc3NDaXJjbGVkSWNvbjooKT0+QmUsQ3Jvc3NoYWlyMUljb246KCk9PlplLENyb3NzaGFpcjJJY29uOigpPT4kZSxDcnVtcGxlZFBhcGVySWNvbjooKT0+TmUsQ3ViZUljb246KCk9PkZlLEN1cnNvckFycm93SWNvbjooKT0+V2UsQ3Vyc29yVGV4dEljb246KCk9PlVlLERhc2hJY29uOigpPT56ZSxEYXNoYm9hcmRJY29uOigpPT5HZSxEaW1lbnNpb25zSWNvbjooKT0+S2UsRGlzY0ljb246KCk9PnFlLERpdmlkZXJIb3Jpem9udGFsSWNvbjooKT0+WWUsRGl2aWRlclZlcnRpY2FsSWNvbjooKT0+SmUsRG90RmlsbGVkSWNvbjooKT0+UWUsRG90SWNvbjooKT0+WGUsRG90c0hvcml6b250YWxJY29uOigpPT5ldCxEb3RzVmVydGljYWxJY29uOigpPT50dCxEb3VibGVBcnJvd0Rvd25JY29uOigpPT5udCxEb3VibGVBcnJvd0xlZnRJY29uOigpPT5ydCxEb3VibGVBcnJvd1JpZ2h0SWNvbjooKT0+b3QsRG91YmxlQXJyb3dVcEljb246KCk9PmF0LERvd25sb2FkSWNvbjooKT0+aXQsRHJhZ0hhbmRsZURvdHMxSWNvbjooKT0+bHQsRHJhZ0hhbmRsZURvdHMySWNvbjooKT0+c3QsRHJhZ0hhbmRsZUhvcml6b250YWxJY29uOigpPT5jdCxEcmFnSGFuZGxlVmVydGljYWxJY29uOigpPT51dCxEcmF3aW5nUGluRmlsbGVkSWNvbjooKT0+cHQsRHJhd2luZ1Bpbkljb246KCk9PmR0LERyb3Bkb3duTWVudUljb246KCk9PmZ0LEVudGVyRnVsbFNjcmVlbkljb246KCk9Pmd0LEVudGVySWNvbjooKT0+aHQsRW52ZWxvcGVDbG9zZWRJY29uOigpPT52dCxFbnZlbG9wZU9wZW5JY29uOigpPT5DdCxFeGNsYW1hdGlvblRyaWFuZ2xlSWNvbjooKT0+bXQsRXhpdEZ1bGxTY3JlZW5JY29uOigpPT5idCxFeGl0SWNvbjooKT0+d3QsRXh0ZXJuYWxMaW5rSWNvbjooKT0+eXQsRXllQ2xvc2VkSWNvbjooKT0+eHQsRXllTm9uZUljb246KCk9Pmt0LEV5ZU9wZW5JY29uOigpPT5TdCxGYWNlSWNvbjooKT0+T3QsRmlnbWFMb2dvSWNvbjooKT0+TXQsRmlsZUljb246KCk9Pkx0LEZpbGVNaW51c0ljb246KCk9Pl90LEZpbGVQbHVzSWNvbjooKT0+UHQsRmlsZVRleHRJY29uOigpPT5FdCxGb250Qm9sZEljb246KCk9Pmp0LEZvbnRGYW1pbHlJY29uOigpPT5SdCxGb250SXRhbGljSWNvbjooKT0+SXQsRm9udFJvbWFuSWNvbjooKT0+VnQsRm9udFNpemVJY29uOigpPT5IdCxGb250U3R5bGVJY29uOigpPT5BdCxGcmFtZUljb246KCk9PlR0LEZyYW1lckxvZ29JY29uOigpPT5EdCxHZWFySWNvbjooKT0+QnQsR2l0SHViTG9nb0ljb246KCk9Plp0LEdsb2JlSWNvbjooKT0+JHQsR3JpZEljb246KCk9Pk50LEdyb3VwSWNvbjooKT0+RnQsSGFsZjFJY29uOigpPT5XdCxIYWxmMkljb246KCk9PlV0LEhhbWJ1cmdlck1lbnVJY29uOigpPT56dCxIYW5kSWNvbjooKT0+R3QsSGVhZGluZ0ljb246KCk9Pkt0LEhlaWdodEljb246KCk9PnF0LEhvbWVJY29uOigpPT5ZdCxJY29uSmFyTG9nb0ljb246KCk9Pkp0LElkQ2FyZEljb246KCk9Plh0LEltYWdlSWNvbjooKT0+UXQsSW5mb0NpcmNsZWRJY29uOigpPT5lbixJbnB1dEljb246KCk9PnRuLExhcFRpbWVySWNvbjooKT0+bm4sTGF5ZXJzSWNvbjooKT0+cm4sTGF5b3V0SWNvbjooKT0+b24sTGV0dGVyQ2FzZUNhcGl0YWxpemVJY29uOigpPT5hbixMZXR0ZXJDYXNlTG93ZXJjYXNlSWNvbjooKT0+bG4sTGV0dGVyQ2FzZVRvZ2dsZUljb246KCk9PnNuLExldHRlckNhc2VVcHBlcmNhc2VJY29uOigpPT5jbixMZXR0ZXJTcGFjaW5nSWNvbjooKT0+dW4sTGlnaHRuaW5nQm9sdEljb246KCk9PmRuLExpbmVIZWlnaHRJY29uOigpPT5wbixMaW5rMUljb246KCk9PmZuLExpbmsySWNvbjooKT0+aG4sTGlua0JyZWFrMUljb246KCk9PmduLExpbmtCcmVhazJJY29uOigpPT52bixMaW5rTm9uZTFJY29uOigpPT5DbixMaW5rTm9uZTJJY29uOigpPT5tbixMaXN0QnVsbGV0SWNvbjooKT0+d24sTG9ja0Nsb3NlZEljb246KCk9PmJuLExvY2tPcGVuMUljb246KCk9PnluLExvY2tPcGVuMkljb246KCk9PnhuLExvb3BJY29uOigpPT5rbixNYWdpY1dhbmRJY29uOigpPT5TbixNYWduaWZ5aW5nR2xhc3NJY29uOigpPT5PbixNYXJnaW5JY29uOigpPT5NbixNYXNrT2ZmSWNvbjooKT0+TG4sTWFza09uSWNvbjooKT0+X24sTWludXNDaXJjbGVkSWNvbjooKT0+RW4sTWludXNJY29uOigpPT5QbixNaXhJY29uOigpPT5qbixNaXhlckhvcml6b250YWxJY29uOigpPT5SbixNaXhlclZlcnRpY2FsSWNvbjooKT0+SW4sTW9kdWx6TG9nb0ljb246KCk9PlZuLE1vb25JY29uOigpPT5IbixNb3ZlSWNvbjooKT0+QW4sTm90aW9uTG9nb0ljb246KCk9PlRuLE9wYWNpdHlJY29uOigpPT5EbixPdmVybGluZUljb246KCk9PkJuLFBhZGRpbmdJY29uOigpPT5abixQYXBlclBsYW5lSWNvbjooKT0+JG4sUGF1c2VJY29uOigpPT5ObixQZW5jaWwxSWNvbjooKT0+Rm4sUGVuY2lsMkljb246KCk9PlduLFBlcnNvbkljb246KCk9PlVuLFBpZUNoYXJ0SWNvbjooKT0+em4sUGlsY3Jvd0ljb246KCk9PkduLFBpbkJvdHRvbUljb246KCk9PktuLFBpbkxlZnRJY29uOigpPT5xbixQaW5SaWdodEljb246KCk9PlluLFBpblRvcEljb246KCk9PkpuLFBsYXlJY29uOigpPT5YbixQbHVzQ2lyY2xlZEljb246KCk9PmVyLFBsdXNJY29uOigpPT5RbixRdWVzdGlvbk1hcmtDaXJjbGVkSWNvbjooKT0+bnIsUXVlc3Rpb25NYXJrSWNvbjooKT0+dHIsUXVvdGVJY29uOigpPT5ycixSYWRpb2J1dHRvbkljb246KCk9Pm9yLFJlYWRlckljb246KCk9PmFyLFJlbG9hZEljb246KCk9PmlyLFJlc2V0SWNvbjooKT0+bHIsUmVzdW1lSWNvbjooKT0+c3IsUm9ja2V0SWNvbjooKT0+Y3IsUm90YXRlQ291bnRlckNsb2Nrd2lzZUljb246KCk9PnVyLFJvd1NwYWNpbmdJY29uOigpPT5kcixSb3dzSWNvbjooKT0+cHIsUnVsZXJIb3Jpem9udGFsSWNvbjooKT0+ZnIsUnVsZXJTcXVhcmVJY29uOigpPT5ocixTZWN0aW9uSWNvbjooKT0+Z3IsU2V3aW5nUGluRmlsbGVkSWNvbjooKT0+Q3IsU2V3aW5nUGluSWNvbjooKT0+dnIsU2hhZG93SWNvbjooKT0+bXIsU2hhZG93SW5uZXJJY29uOigpPT53cixTaGFkb3dOb25lSWNvbjooKT0+YnIsU2hhZG93T3V0ZXJJY29uOigpPT55cixTaGFyZTFJY29uOigpPT54cixTaGFyZTJJY29uOigpPT5rcixTaHVmZmxlSWNvbjooKT0+U3IsU2l6ZUljb246KCk9Pk9yLFNrZXRjaExvZ29JY29uOigpPT5NcixTbGFzaEljb246KCk9PkxyLFNsaWRlckljb246KCk9Pl9yLFNwYWNlQmV0d2Vlbkhvcml6b250YWxseUljb246KCk9PlByLFNwYWNlQmV0d2VlblZlcnRpY2FsbHlJY29uOigpPT5FcixTcGFjZUV2ZW5seUhvcml6b250YWxseUljb246KCk9PmpyLFNwYWNlRXZlbmx5VmVydGljYWxseUljb246KCk9PlJyLFNwZWFrZXJMb3VkSWNvbjooKT0+SXIsU3BlYWtlck1vZGVyYXRlSWNvbjooKT0+VnIsU3BlYWtlck9mZkljb246KCk9PkhyLFNwZWFrZXJRdWlldEljb246KCk9PkFyLFNxdWFyZUljb246KCk9PlRyLFN0YWNrSWNvbjooKT0+RHIsU3RhckZpbGxlZEljb246KCk9PlpyLFN0YXJJY29uOigpPT5CcixTdGl0Y2hlc0xvZ29JY29uOigpPT4kcixTdG9wSWNvbjooKT0+TnIsU3RvcHdhdGNoSWNvbjooKT0+RnIsU3RyZXRjaEhvcml6b250YWxseUljb246KCk9PldyLFN0cmV0Y2hWZXJ0aWNhbGx5SWNvbjooKT0+VXIsU3RyaWtldGhyb3VnaEljb246KCk9PnpyLFN1bkljb246KCk9PkdyLFN3aXRjaEljb246KCk9PktyLFN5bWJvbEljb246KCk9PnFyLFRhYmxlSWNvbjooKT0+WXIsVGFyZ2V0SWNvbjooKT0+SnIsVGV4dEFsaWduQ2VudGVySWNvbjooKT0+UXIsVGV4dEFsaWduSnVzdGlmeUljb246KCk9PmVvLFRleHRBbGlnbkxlZnRJY29uOigpPT50byxUZXh0QWxpZ25SaWdodEljb246KCk9Pm5vLFRleHRJY29uOigpPT5YcixUZXh0Tm9uZUljb246KCk9PnJvLFRoaWNrQXJyb3dEb3duSWNvbjooKT0+b28sVGhpY2tBcnJvd0xlZnRJY29uOigpPT5hbyxUaGlja0Fycm93UmlnaHRJY29uOigpPT5pbyxUaGlja0Fycm93VXBJY29uOigpPT5sbyxUaW1lckljb246KCk9PnNvLFRva2Vuc0ljb246KCk9PmNvLFRyYWNrTmV4dEljb246KCk9PnVvLFRyYWNrUHJldmlvdXNJY29uOigpPT5wbyxUcmFuc3BhcmVuY3lHcmlkSWNvbjooKT0+Zm8sVHJhc2hJY29uOigpPT5obyxUcmlhbmdsZURvd25JY29uOigpPT5nbyxUcmlhbmdsZUxlZnRJY29uOigpPT52byxUcmlhbmdsZVJpZ2h0SWNvbjooKT0+Q28sVHJpYW5nbGVVcEljb246KCk9Pm1vLFR3aXR0ZXJMb2dvSWNvbjooKT0+d28sVW5kZXJsaW5lSWNvbjooKT0+Ym8sVXBkYXRlSWNvbjooKT0+eW8sVXBsb2FkSWNvbjooKT0+eG8sVmFsdWVJY29uOigpPT5rbyxWYWx1ZU5vbmVJY29uOigpPT5TbyxWZXJjZWxMb2dvSWNvbjooKT0+T28sVmlkZW9JY29uOigpPT5NbyxWaWV3R3JpZEljb246KCk9PkxvLFZpZXdIb3Jpem9udGFsSWNvbjooKT0+X28sVmlld05vbmVJY29uOigpPT5QbyxWaWV3VmVydGljYWxJY29uOigpPT5FbyxXaWR0aEljb246KCk9PmpvLFpvb21Jbkljb246KCk9PlJvLFpvb21PdXRJY29uOigpPT5Jb30pO3ZhciByPW4oNjY4OSk7ZnVuY3Rpb24gbyhlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb312YXIgYT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMCAxLjVDMCAxLjIyMzg2IDAuMjIzODU4IDEgMC41IDFIMi41QzIuNzc2MTQgMSAzIDEuMjIzODYgMyAxLjVDMyAxLjc3NjE0IDIuNzc2MTQgMiAyLjUgMkgwLjVDMC4yMjM4NTggMiAwIDEuNzc2MTQgMCAxLjVaTTQgMS41QzQgMS4yMjM4NiA0LjIyMzg2IDEgNC41IDFIMTQuNUMxNC43NzYxIDEgMTUgMS4yMjM4NiAxNSAxLjVDMTUgMS43NzYxNCAxNC43NzYxIDIgMTQuNSAySDQuNUM0LjIyMzg2IDIgNCAxLjc3NjE0IDQgMS41Wk00IDQuNUM0IDQuMjIzODYgNC4yMjM4NiA0IDQuNSA0SDExLjVDMTEuNzc2MSA0IDEyIDQuMjIzODYgMTIgNC41QzEyIDQuNzc2MTQgMTEuNzc2MSA1IDExLjUgNUg0LjVDNC4yMjM4NiA1IDQgNC43NzYxNCA0IDQuNVpNMCA3LjVDMCA3LjIyMzg2IDAuMjIzODU4IDcgMC41IDdIMi41QzIuNzc2MTQgNyAzIDcuMjIzODYgMyA3LjVDMyA3Ljc3NjE0IDIuNzc2MTQgOCAyLjUgOEgwLjVDMC4yMjM4NTggOCAwIDcuNzc2MTQgMCA3LjVaTTQgNy41QzQgNy4yMjM4NiA0LjIyMzg2IDcgNC41IDdIMTQuNUMxNC43NzYxIDcgMTUgNy4yMjM4NiAxNSA3LjVDMTUgNy43NzYxNCAxNC43NzYxIDggMTQuNSA4SDQuNUM0LjIyMzg2IDggNCA3Ljc3NjE0IDQgNy41Wk00IDEwLjVDNCAxMC4yMjM5IDQuMjIzODYgMTAgNC41IDEwSDExLjVDMTEuNzc2MSAxMCAxMiAxMC4yMjM5IDEyIDEwLjVDMTIgMTAuNzc2MSAxMS43NzYxIDExIDExLjUgMTFINC41QzQuMjIzODYgMTEgNCAxMC43NzYxIDQgMTAuNVpNMCAxMy41QzAgMTMuMjIzOSAwLjIyMzg1OCAxMyAwLjUgMTNIMi41QzIuNzc2MTQgMTMgMyAxMy4yMjM5IDMgMTMuNUMzIDEzLjc3NjEgMi43NzYxNCAxNCAyLjUgMTRIMC41QzAuMjIzODU4IDE0IDAgMTMuNzc2MSAwIDEzLjVaTTQgMTMuNUM0IDEzLjIyMzkgNC4yMjM4NiAxMyA0LjUgMTNIMTQuNUMxNC43NzYxIDEzIDE1IDEzLjIyMzkgMTUgMTMuNUMxNSAxMy43NzYxIDE0Ljc3NjEgMTQgMTQuNSAxNEg0LjVDNC4yMjM4NiAxNCA0IDEzLjc3NjEgNCAxMy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuNSAxLjc1MDAzQzEwLjcxMDcgMS43NTAwMyAxMC44OTg4IDEuODgyMTcgMTAuOTcwMyAyLjA4MDQyTDEzLjk3MDMgMTAuNEMxNC4wNjQgMTAuNjU5OCAxMy45MjkzIDEwLjk0NjMgMTMuNjY5NiAxMS4wNEMxMy40MDk4IDExLjEzMzYgMTMuMTIzMyAxMC45OTkgMTMuMDI5NiAxMC43MzkyTDEyLjA0NzcgOC4wMTYwNkg4Ljk1MjI3TDcuOTcwMzEgMTAuNzM5MkM3Ljg3NjY0IDEwLjk5OSA3LjU5MDEyIDExLjEzMzYgNy4zMzAzNSAxMS4wNEM3LjA3MDU4IDEwLjk0NjMgNi45MzU5MyAxMC42NTk4IDcuMDI5NiAxMC40TDEwLjAyOTYgMi4wODA0MkMxMC4xMDExIDEuODgyMTcgMTAuMjg5MiAxLjc1MDAzIDEwLjUgMS43NTAwM1pNMTAuNSAzLjcyNDAyTDExLjc0MTEgNy4xNjYwNkg5LjI1ODc3TDEwLjUgMy43MjQwMlpNMi40OTk0OSAyLjA5OTk3QzIuNzIwNCAyLjA5OTk3IDIuODk5NDkgMi4yNzkwNiAyLjg5OTQ5IDIuNDk5OTdMMi44OTk0OSA5LjUzNDI4TDQuMjE2NjQgOC4yMTcxM0M0LjM3Mjg1IDguMDYwOTIgNC42MjYxMiA4LjA2MDkyIDQuNzgyMzMgOC4yMTcxM0M0LjkzODU0IDguMzczMzQgNC45Mzg1NCA4LjYyNjYgNC43ODIzMyA4Ljc4MjgxTDIuNzgyMzMgMTAuNzgyOEMyLjcwNzMyIDEwLjg1NzggMi42MDU1NyAxMC45IDIuNDk5NDkgMTAuOUMyLjM5MzQgMTAuOSAyLjI5MTY2IDEwLjg1NzggMi4yMTY2NCAxMC43ODI4TDAuMjE2NjQ1IDguNzgyODFDMC4wNjA0MzQ5IDguNjI2NiAwLjA2MDQzNDkgOC4zNzMzNCAwLjIxNjY0NSA4LjIxNzEzQzAuMzcyODU0IDguMDYwOTIgMC42MjYxMiA4LjA2MDkyIDAuNzgyMzMgOC4yMTcxM0wyLjA5OTQ5IDkuNTM0MjhMMi4wOTk0OSAyLjQ5OTk3QzIuMDk5NDkgMi4yNzkwNiAyLjI3ODU3IDIuMDk5OTcgMi40OTk0OSAyLjA5OTk3Wk0wLjA5OTk2OTUgMTMuNTAwMUMwLjA5OTk2OTUgMTMuMjc5MSAwLjI3OTA1NiAxMy4xMDAxIDAuNDk5OTY5IDEzLjEwMDFIMTQuNUMxNC43MjA5IDEzLjEwMDEgMTQuOSAxMy4yNzkxIDE0LjkgMTMuNTAwMUMxNC45IDEzLjcyMSAxNC43MjA5IDEzLjkwMDEgMTQuNSAxMy45MDAxSDAuNDk5OTY5QzAuMjc5MDU2IDEzLjkwMDEgMC4wOTk5Njk1IDEzLjcyMSAwLjA5OTk2OTUgMTMuNTAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkgM0M5IDIuNDQ3NzIgOC41NTIyOSAyIDggMkg3QzYuNDQ3NzIgMiA2IDIuNDQ3NzIgNiAzTDYgMTRIMS41QzEuMjIzODYgMTQgMSAxNC4yMjM5IDEgMTQuNUMxIDE0Ljc3NjEgMS4yMjM4NiAxNSAxLjUgMTVMNiAxNUg5SDEzLjVDMTMuNzc2MSAxNSAxNCAxNC43NzYxIDE0IDE0LjVDMTQgMTQuMjIzOSAxMy43NzYxIDE0IDEzLjUgMTRIOVYzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi45OTk4OCAxQzYuNDQ3NTkgMSA1Ljk5OTg4IDEuNDQ3NzIgNS45OTk4OCAyVjdIMS40OTk4OEMxLjIyMzc0IDcgMC45OTk4NzggNy4yMjM4NiAwLjk5OTg3OCA3LjVDMC45OTk4NzggNy43NzYxNCAxLjIyMzc0IDggMS40OTk4OCA4SDUuOTk5ODhWMTNDNS45OTk4OCAxMy41NTIzIDYuNDQ3NTkgMTQgNi45OTk4OCAxNEg3Ljk5OTg4QzguNTUyMTYgMTQgOC45OTk4OCAxMy41NTIzIDguOTk5ODggMTNWOEgxMy40OTk5QzEzLjc3NiA4IDEzLjk5OTkgNy43NzYxNCAxMy45OTk5IDcuNUMxMy45OTk5IDcuMjIzODYgMTMuNzc2IDcgMTMuNDk5OSA3SDguOTk5ODhWMkM4Ljk5OTg4IDEuNDQ3NzIgOC41NTIxNiAxIDcuOTk5ODggMUw2Ljk5OTg4IDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxjPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjk5OTg4IDZDMS40NDc1OSA2IDAuOTk5ODc3IDYuNDQ3NzIgMC45OTk4NzcgN0wwLjk5OTg3NyA4QzAuOTk5ODc3IDguNTUyMjggMS40NDc1OSA5IDEuOTk5ODggOUw2Ljk5OTg4IDlMNi45OTk4OCAxMy41QzYuOTk5ODggMTMuNzc2MSA3LjIyMzc0IDE0IDcuNDk5ODggMTRDNy43NzYwMiAxNCA3Ljk5OTg4IDEzLjc3NjEgNy45OTk4OCAxMy41TDcuOTk5ODggOUwxMi45OTk5IDlDMTMuNTUyMiA5IDEzLjk5OTkgOC41NTIyOCAxMy45OTk5IDhMMTMuOTk5OSA3QzEzLjk5OTkgNi40NDc3MiAxMy41NTIyIDYgMTIuOTk5OSA2TDcuOTk5ODggNkw3Ljk5OTg4IDEuNUM3Ljk5OTg4IDEuMjIzODYgNy43NzYwMiAxIDcuNDk5ODggMUM3LjIyMzczIDEgNi45OTk4OCAxLjIyMzg2IDYuOTk5ODggMS41TDYuOTk5ODggNkwxLjk5OTg4IDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjQ5OTk5NSAwLjk5OTk5NUMwLjIyMzg1NSAwLjk5OTk5NSAtNS41ODQ1OGUtMDcgMS4yMjM4NSAtNS40NjM4OGUtMDcgMS40OTk5OUwtMi4xODU1NGUtMDggMTMuNDk5OUMtOS43ODQ5MmUtMDkgMTMuNzc2IDAuMjIzODU1IDEzLjk5OTkgMC40OTk5OTUgMTMuOTk5OUMwLjc3NjEzNiAxMy45OTk5IDAuOTk5OTkxIDEzLjc3NiAwLjk5OTk5MSAxMy40OTk5TDAuOTk5OTkxIDguOTk5OTNMMTIgOC45OTk5M0MxMi41NTIzIDguOTk5OTMgMTMgOC41NTIyMiAxMyA3Ljk5OTkzTDEzIDYuOTk5OTRDMTMgNi40NDc2NiAxMi41NTIzIDUuOTk5OTUgMTIgNS45OTk5NUwwLjk5OTk5MSA1Ljk5OTk1TDAuOTk5OTkxIDEuNDk5OTlDMC45OTk5OTEgMS4yMjM4NSAwLjc3NjEzNSAwLjk5OTk5NSAwLjQ5OTk5NSAwLjk5OTk5NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTE0LjQ5OTkgMUMxNC4yMjM3IDEgMTMuOTk5OSAxLjIyMzg2IDEzLjk5OTkgMS41TDEzLjk5OTkgNkwyLjk5OTg4IDZDMi40NDc1OSA2IDEuOTk5ODggNi40NDc3MiAxLjk5OTg4IDdMMS45OTk4OCA4QzEuOTk5ODggOC41NTIyOCAyLjQ0NzU5IDkgMi45OTk4OCA5TDEzLjk5OTkgOUwxMy45OTk5IDEzLjVDMTMuOTk5OSAxMy43NzYxIDE0LjIyMzcgMTQgMTQuNDk5OSAxNEMxNC43NzYgMTQgMTQuOTk5OSAxMy43NzYxIDE0Ljk5OTkgMTMuNUwxNC45OTk5IDlMMTQuOTk5OSA2TDE0Ljk5OTkgMS41QzE0Ljk5OTkgMS4yMjM4NiAxNC43NzYgMSAxNC40OTk5IDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxwPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjUgMEMxLjIyMzg2IDAgMSAwLjIyMzg1OCAxIDAuNUMxIDAuNzc2MTQyIDEuMjIzODYgMSAxLjUgMUg2VjEyQzYgMTIuNTUyMyA2LjQ0NzcyIDEzIDcgMTNIOEM4LjU1MjI4IDEzIDkgMTIuNTUyMyA5IDEyVjFIMTMuNUMxMy43NzYxIDEgMTQgMC43NzYxNDIgMTQgMC41QzE0IDAuMjIzODU4IDEzLjc3NjEgMCAxMy41IDBIOUg2SDEuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAwLjc1TDkuNzUgM0g1LjI1TDcuNSAwLjc1Wk03LjUgMTQuMjVMOS43NSAxMkg1LjI1TDcuNSAxNC4yNVpNMyA1LjI1TDAuNzUgNy41TDMgOS43NVY1LjI1Wk0xNC4yNSA3LjVMMTIgNS4yNVY5Ljc1TDE0LjI1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguODkxNCAyLjE5MzdDOS4xMTU4IDIuMzU0NjQgOS4xNjcyNSAyLjY2NzAxIDkuMDA2MzEgMi44OTE0MUwyLjQ3Mzg4IDEySDEzLjVDMTMuNzc2MSAxMiAxNCAxMi4yMjM5IDE0IDEyLjVDMTQgMTIuNzc2MiAxMy43NzYxIDEzIDEzLjUgMTNIMS41QzEuMzEyNTQgMTMgMS4xNDA4MiAxMi44OTUyIDEuMDU1MiAxMi43Mjg0QzAuOTY5NTc4IDEyLjU2MTYgMC45ODQ0MzggMTIuMzYxIDEuMDkzNjkgMTIuMjA4Nkw4LjE5MzY5IDIuMzA4NjJDOC4zNTQ2MiAyLjA4NDIyIDguNjY3IDIuMDMyNzcgOC44OTE0IDIuMTkzN1pNMTEuMSA2LjUwMDAxQzExLjEgNi4yMjM4NyAxMS4zMjM4IDYuMDAwMDEgMTEuNiA2LjAwMDAxQzExLjg3NjEgNi4wMDAwMSAxMi4xIDYuMjIzODcgMTIuMSA2LjUwMDAxQzEyLjEgNi43NzYxNSAxMS44NzYxIDcuMDAwMDEgMTEuNiA3LjAwMDAxQzExLjMyMzggNy4wMDAwMSAxMS4xIDYuNzc2MTUgMTEuMSA2LjUwMDAxWk0xMC40IDQuMDAwMDFDMTAuMTIzOSA0LjAwMDAxIDkuOTAwMDMgNC4yMjM4NyA5LjkwMDAzIDQuNTAwMDFDOS45MDAwMyA0Ljc3NjE1IDEwLjEyMzkgNS4wMDAwMSAxMC40IDUuMDAwMDFDMTAuNjc2MiA1LjAwMDAxIDEwLjkgNC43NzYxNSAxMC45IDQuNTAwMDFDMTAuOSA0LjIyMzg3IDEwLjY3NjIgNC4wMDAwMSAxMC40IDQuMDAwMDFaTTEyLjEgOC41MDAwMUMxMi4xIDguMjIzODcgMTIuMzIzOCA4LjAwMDAxIDEyLjYgOC4wMDAwMUMxMi44NzYxIDguMDAwMDEgMTMuMSA4LjIyMzg3IDEzLjEgOC41MDAwMUMxMy4xIDguNzc2MTUgMTIuODc2MSA5LjAwMDAxIDEyLjYgOS4wMDAwMUMxMi4zMjM4IDkuMDAwMDEgMTIuMSA4Ljc3NjE1IDEyLjEgOC41MDAwMVpNMTMuNCAxMEMxMy4xMjM5IDEwIDEyLjkgMTAuMjIzOSAxMi45IDEwLjVDMTIuOSAxMC43NzYxIDEzLjEyMzkgMTEgMTMuNCAxMUMxMy42NzYyIDExIDEzLjkgMTAuNzc2MSAxMy45IDEwLjVDMTMuOSAxMC4yMjM5IDEzLjY3NjIgMTAgMTMuNCAxMFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMzA5MDIgMUMyLjkzMDI1IDEgMi41ODM5OCAxLjIxNCAyLjQxNDU5IDEuNTUyNzlMMS4wNTI3OSA0LjI3NjM5QzEuMDE4MDcgNC4zNDU4MiAxIDQuNDIyMzggMSA0LjVWMTNDMSAxMy41NTIzIDEuNDQ3NzIgMTQgMiAxNEgxM0MxMy41NTIzIDE0IDE0IDEzLjU1MjMgMTQgMTNWNC41QzE0IDQuNDIyMzggMTMuOTgxOSA0LjM0NTgyIDEzLjk0NzIgNC4yNzYzOUwxMi41ODU0IDEuNTUyODFDMTIuNDE2IDEuMjE0MDMgMTIuMDY5OCAxLjAwMDAzIDExLjY5MSAxLjAwMDAzTDcuNSAxLjAwMDAxTDMuMzA5MDIgMVpNMy4zMDkwMiAyTDcgMi4wMDAwMVY0SDIuMzA5MDJMMy4zMDkwMiAyWk04IDRWMi4wMDAwMkwxMS42OTEgMi4wMDAwM0wxMi42OTEgNEg4Wk03LjUgNUgxM1YxM0gyVjVINy41Wk01LjUgN0M1LjIyMzg2IDcgNSA3LjIyMzg2IDUgNy41QzUgNy43NzYxNCA1LjIyMzg2IDggNS41IDhIOS41QzkuNzc2MTQgOCAxMCA3Ljc3NjE0IDEwIDcuNUMxMCA3LjIyMzg2IDkuNzc2MTQgNyA5LjUgN0g1LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx2PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS4zNTM2IDMuNjQ2NDRDMTEuNTQ4OCAzLjg0MTcgMTEuNTQ4OCA0LjE1ODI4IDExLjM1MzYgNC4zNTM1NEw0LjcwNzExIDExTDkgMTFDOS4yNzYxNCAxMSA5LjUgMTEuMjIzOSA5LjUgMTEuNUM5LjUgMTEuNzc2MSA5LjI3NjE0IDEyIDkgMTJMMy41IDEyQzMuMzY3MzkgMTIgMy4yNDAyMSAxMS45NDczIDMuMTQ2NDUgMTEuODUzNkMzLjA1MjY4IDExLjc1OTggMyAxMS42MzI2IDMgMTEuNUwzIDUuOTk5OTlDMyA1LjcyMzg1IDMuMjIzODYgNS40OTk5OSAzLjUgNS40OTk5OUMzLjc3NjE0IDUuNDk5OTkgNCA1LjcyMzg1IDQgNS45OTk5OVYxMC4yOTI5TDEwLjY0NjQgMy42NDY0M0MxMC44NDE3IDMuNDUxMTcgMTEuMTU4MyAzLjQ1MTE3IDExLjM1MzYgMy42NDY0NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjQ2NDUgMy42NDY0NEMzLjQ1MTE4IDMuODQxNyAzLjQ1MTE4IDQuMTU4MjggMy42NDY0NSA0LjM1MzU0TDEwLjI5MjkgMTFMNiAxMUM1LjcyMzg2IDExIDUuNSAxMS4yMjM5IDUuNSAxMS41QzUuNSAxMS43NzYxIDUuNzIzODYgMTIgNiAxMkwxMS41IDEyQzExLjYzMjYgMTIgMTEuNzU5OCAxMS45NDczIDExLjg1MzYgMTEuODUzNkMxMS45NDczIDExLjc1OTggMTIgMTEuNjMyNiAxMiAxMS41TDEyIDUuOTk5OTlDMTIgNS43MjM4NSAxMS43NzYxIDUuNDk5OTkgMTEuNSA1LjQ5OTk5QzExLjIyMzkgNS40OTk5OSAxMSA1LjcyMzg1IDExIDUuOTk5OTlWMTAuMjkyOUw0LjM1MzU1IDMuNjQ2NDNDNC4xNTgyOSAzLjQ1MTE3IDMuODQxNzEgMy40NTExNyAzLjY0NjQ1IDMuNjQ2NDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxtPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMkM3Ljc3NjE0IDIgOCAyLjIyMzg2IDggMi41TDggMTEuMjkyOUwxMS4xNDY0IDguMTQ2NDVDMTEuMzQxNyA3Ljk1MTE4IDExLjY1ODMgNy45NTExOCAxMS44NTM2IDguMTQ2NDVDMTIuMDQ4OCA4LjM0MTcxIDEyLjA0ODggOC42NTgyOSAxMS44NTM2IDguODUzNTVMNy44NTM1NSAxMi44NTM2QzcuNzU5NzkgMTIuOTQ3MyA3LjYzMjYxIDEzIDcuNSAxM0M3LjM2NzM5IDEzIDcuMjQwMjEgMTIuOTQ3MyA3LjE0NjQ1IDEyLjg1MzZMMy4xNDY0NSA4Ljg1MzU1QzIuOTUxMTggOC42NTgyOSAyLjk1MTE4IDguMzQxNzEgMy4xNDY0NSA4LjE0NjQ1QzMuMzQxNzEgNy45NTExOCAzLjY1ODI5IDcuOTUxMTggMy44NTM1NSA4LjE0NjQ1TDcgMTEuMjkyOUw3IDIuNUM3IDIuMjIzODYgNy4yMjM4NiAyIDcuNSAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi44NTM1NSAzLjE0NjQ1QzcuMDQ4ODIgMy4zNDE3MSA3LjA0ODgyIDMuNjU4MjkgNi44NTM1NSAzLjg1MzU1TDMuNzA3MTEgN0gxMi41QzEyLjc3NjEgNyAxMyA3LjIyMzg2IDEzIDcuNUMxMyA3Ljc3NjE0IDEyLjc3NjEgOCAxMi41IDhIMy43MDcxMUw2Ljg1MzU1IDExLjE0NjRDNy4wNDg4MiAxMS4zNDE3IDcuMDQ4ODIgMTEuNjU4MyA2Ljg1MzU1IDExLjg1MzZDNi42NTgyOSAxMi4wNDg4IDYuMzQxNzEgMTIuMDQ4OCA2LjE0NjQ1IDExLjg1MzZMMi4xNDY0NSA3Ljg1MzU1QzEuOTUxMTggNy42NTgyOSAxLjk1MTE4IDcuMzQxNzEgMi4xNDY0NSA3LjE0NjQ1TDYuMTQ2NDUgMy4xNDY0NUM2LjM0MTcxIDIuOTUxMTggNi42NTgyOSAyLjk1MTE4IDYuODUzNTUgMy4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguMTQ2NDUgMy4xNDY0NUM4LjM0MTcxIDIuOTUxMTggOC42NTgyOSAyLjk1MTE4IDguODUzNTUgMy4xNDY0NUwxMi44NTM2IDcuMTQ2NDVDMTMuMDQ4OCA3LjM0MTcxIDEzLjA0ODggNy42NTgyOSAxMi44NTM2IDcuODUzNTVMOC44NTM1NSAxMS44NTM2QzguNjU4MjkgMTIuMDQ4OCA4LjM0MTcxIDEyLjA0ODggOC4xNDY0NSAxMS44NTM2QzcuOTUxMTggMTEuNjU4MyA3Ljk1MTE4IDExLjM0MTcgOC4xNDY0NSAxMS4xNDY0TDExLjI5MjkgOEgyLjVDMi4yMjM4NiA4IDIgNy43NzYxNCAyIDcuNUMyIDcuMjIzODYgMi4yMjM4NiA3IDIuNSA3SDExLjI5MjlMOC4xNDY0NSAzLjg1MzU1QzcuOTUxMTggMy42NTgyOSA3Ljk1MTE4IDMuMzQxNzEgOC4xNDY0NSAzLjE0NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuMzUzNiAxMS4zNTM2QzExLjU0ODggMTEuMTU4MyAxMS41NDg4IDEwLjg0MTcgMTEuMzUzNiAxMC42NDY1TDQuNzA3MTEgNEw5IDRDOS4yNzYxNCA0IDkuNSAzLjc3NjE0IDkuNSAzLjVDOS41IDMuMjIzODYgOS4yNzYxNCAzIDkgM0wzLjUgM0MzLjM2NzM5IDMgMy4yNDAyMSAzLjA1MjY4IDMuMTQ2NDUgMy4xNDY0NUMzLjA1MjY4IDMuMjQwMjIgMyAzLjM2NzM5IDMgMy41TDMgOS4wMDAwMUMzIDkuMjc2MTUgMy4yMjM4NiA5LjUwMDAxIDMuNSA5LjUwMDAxQzMuNzc2MTQgOS41MDAwMSA0IDkuMjc2MTUgNCA5LjAwMDAxVjQuNzA3MTFMMTAuNjQ2NCAxMS4zNTM2QzEwLjg0MTcgMTEuNTQ4OCAxMS4xNTgzIDExLjU0ODggMTEuMzUzNiAxMS4zNTM2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy42NDY0NSAxMS4zNTM2QzMuNDUxMTggMTEuMTU4MyAzLjQ1MTE4IDEwLjg0MTcgMy42NDY0NSAxMC42NDY1TDEwLjI5MjkgNEw2IDRDNS43MjM4NiA0IDUuNSAzLjc3NjE0IDUuNSAzLjVDNS41IDMuMjIzODYgNS43MjM4NiAzIDYgM0wxMS41IDNDMTEuNjMyNiAzIDExLjc1OTggMy4wNTI2OCAxMS44NTM2IDMuMTQ2NDVDMTEuOTQ3MyAzLjI0MDIyIDEyIDMuMzY3MzkgMTIgMy41TDEyIDkuMDAwMDFDMTIgOS4yNzYxNSAxMS43NzYxIDkuNTAwMDEgMTEuNSA5LjUwMDAxQzExLjIyMzkgOS41MDAwMSAxMSA5LjI3NjE1IDExIDkuMDAwMDFWNC43MDcxMUw0LjM1MzU1IDExLjM1MzZDNC4xNTgyOSAxMS41NDg4IDMuODQxNzEgMTEuNTQ4OCAzLjY0NjQ1IDExLjM1MzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxrPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjE0NjQ1IDIuMTQ2NDVDNy4zNDE3MSAxLjk1MTE4IDcuNjU4MjkgMS45NTExOCA3Ljg1MzU1IDIuMTQ2NDVMMTEuODUzNiA2LjE0NjQ1QzEyLjA0ODggNi4zNDE3MSAxMi4wNDg4IDYuNjU4MjkgMTEuODUzNiA2Ljg1MzU1QzExLjY1ODMgNy4wNDg4MiAxMS4zNDE3IDcuMDQ4ODIgMTEuMTQ2NCA2Ljg1MzU1TDggMy43MDcxMUw4IDEyLjVDOCAxMi43NzYxIDcuNzc2MTQgMTMgNy41IDEzQzcuMjIzODYgMTMgNyAxMi43NzYxIDcgMTIuNUw3IDMuNzA3MTFMMy44NTM1NSA2Ljg1MzU1QzMuNjU4MjkgNy4wNDg4MiAzLjM0MTcxIDcuMDQ4ODIgMy4xNDY0NSA2Ljg1MzU1QzIuOTUxMTggNi42NTgyOSAyLjk1MTE4IDYuMzQxNzEgMy4xNDY0NSA2LjE0NjQ1TDcuMTQ2NDUgMi4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuNSAySDEyLjVDMTIuNzc2MSAyIDEzIDIuMjIzODYgMTMgMi41VjEyLjVDMTMgMTIuNzc2MSAxMi43NzYxIDEzIDEyLjUgMTNIMi41QzIuMjIzODYgMTMgMiAxMi43NzYxIDIgMTIuNVYyLjVDMiAyLjIyMzg2IDIuMjIzODYgMiAyLjUgMlpNMSAyLjVDMSAxLjY3MTU3IDEuNjcxNTcgMSAyLjUgMUgxMi41QzEzLjMyODQgMSAxNCAxLjY3MTU3IDE0IDIuNVYxMi41QzE0IDEzLjMyODQgMTMuMzI4NCAxNCAxMi41IDE0SDIuNUMxLjY3MTU3IDE0IDEgMTMuMzI4NCAxIDEyLjVWMi41Wk03LjUgNEM3Ljc3NjE0IDQgOCAzLjc3NjE0IDggMy41QzggMy4yMjM4NiA3Ljc3NjE0IDMgNy41IDNDNy4yMjM4NiAzIDcgMy4yMjM4NiA3IDMuNUM3IDMuNzc2MTQgNy4yMjM4NiA0IDcuNSA0Wk04IDUuNUM4IDUuNzc2MTQgNy43NzYxNCA2IDcuNSA2QzcuMjIzODYgNiA3IDUuNzc2MTQgNyA1LjVDNyA1LjIyMzg2IDcuMjIzODYgNSA3LjUgNUM3Ljc3NjE0IDUgOCA1LjIyMzg2IDggNS41Wk03LjUgOEM3Ljc3NjE0IDggOCA3Ljc3NjE0IDggNy41QzggNy4yMjM4NiA3Ljc3NjE0IDcgNy41IDdDNy4yMjM4NiA3IDcgNy4yMjM4NiA3IDcuNUM3IDcuNzc2MTQgNy4yMjM4NiA4IDcuNSA4Wk0xMCA3LjVDMTAgNy43NzYxNCA5Ljc3NjE0IDggOS41IDhDOS4yMjM4NiA4IDkgNy43NzYxNCA5IDcuNUM5IDcuMjIzODYgOS4yMjM4NiA3IDkuNSA3QzkuNzc2MTQgNyAxMCA3LjIyMzg2IDEwIDcuNVpNMTEuNSA4QzExLjc3NjEgOCAxMiA3Ljc3NjE0IDEyIDcuNUMxMiA3LjIyMzg2IDExLjc3NjEgNyAxMS41IDdDMTEuMjIzOSA3IDExIDcuMjIzODYgMTEgNy41QzExIDcuNzc2MTQgMTEuMjIzOSA4IDExLjUgOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDE0IDcuNDk5ODhDMC44NzcwMTQgMy44NDIxOSAzLjg0MjE2IDAuODc3MDQ1IDcuNDk5ODUgMC44NzcwNDVDMTEuMTU3NSAwLjg3NzA0NSAxNC4xMjI3IDMuODQyMTkgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMTEuMTU3NSAxMS4xNTc1IDE0LjEyMjcgNy40OTk4NSAxNC4xMjI3QzMuODQyMTYgMTQuMTIyNyAwLjg3NzAxNCAxMS4xNTc1IDAuODc3MDE0IDcuNDk5ODhaTTcuNDk5ODUgMS44MjcwNEM0LjM2NjgzIDEuODI3MDQgMS44MjcwMSA0LjM2Njg2IDEuODI3MDEgNy40OTk4OEMxLjgyNzAxIDguOTcxOTYgMi4zODc3NCAxMC4zMTMxIDMuMzA3MjcgMTEuMzIxM0M0LjE5MDc0IDkuOTQxMTkgNS43MzgxOCA5LjAyNDk5IDcuNTAwMjMgOS4wMjQ5OUM5LjI2MjA2IDkuMDI0OTkgMTAuODA5MyA5Ljk0MDk3IDExLjY5MjkgMTEuMzIwOEMxMi42MTIxIDEwLjMxMjcgMTMuMTcyNyA4Ljk3MTcyIDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDQuMzY2ODYgMTAuNjMyOCAxLjgyNzA0IDcuNDk5ODUgMS44MjcwNFpNMTAuOTgxOCAxMS45Nzg3QzEwLjI4MzkgMTAuNzc5NSA4Ljk4NTcgOS45NzQ5OSA3LjUwMDIzIDkuOTc0OTlDNi4wMTQ1OCA5Ljk3NDk5IDQuNzE2MjQgMTAuNzc5NyA0LjAxODQ1IDExLjk3OTFDNC45Nzk1MiAxMi43MjcyIDYuMTg3NjUgMTMuMTcyNyA3LjQ5OTg1IDEzLjE3MjdDOC44MTIyNyAxMy4xNzI3IDEwLjAyMDYgMTIuNzI3IDEwLjk4MTggMTEuOTc4N1pNNS4xNDk5OSA2LjUwNDg3QzUuMTQ5OTkgNS4yMDcgNi4yMDIxMiA0LjE1NDg3IDcuNDk5OTkgNC4xNTQ4N0M4Ljc5Nzg2IDQuMTU0ODcgOS44NDk5OSA1LjIwNyA5Ljg0OTk5IDYuNTA0ODdDOS44NDk5OSA3LjgwMjc0IDguNzk3ODYgOC44NTQ4NyA3LjQ5OTk5IDguODU0ODdDNi4yMDIxMiA4Ljg1NDg3IDUuMTQ5OTkgNy44MDI3NCA1LjE0OTk5IDYuNTA0ODdaTTcuNDk5OTkgNS4xMDQ4N0M2LjcyNjc5IDUuMTA0ODcgNi4wOTk5OSA1LjczMTY3IDYuMDk5OTkgNi41MDQ4N0M2LjA5OTk5IDcuMjc4MDcgNi43MjY3OSA3LjkwNDg3IDcuNDk5OTkgNy45MDQ4N0M4LjI3MzE5IDcuOTA0ODcgOC44OTk5OSA3LjI3ODA3IDguODk5OTkgNi41MDQ4N0M4Ljg5OTk5IDUuNzMxNjcgOC4yNzMxOSA1LjEwNDg3IDcuNDk5OTkgNS4xMDQ4N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE09ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMUM1IDAuNDQ3NzE1IDUuNDQ3NzIgMCA2IDBIOUM5LjU1MjI4IDAgMTAgMC40NDc3MTUgMTAgMVYySDE0QzE0LjU1MjMgMiAxNSAyLjQ0NzcyIDE1IDNWNkMxNSA2Ljg4ODggMTQuNjEzMSA3LjY4NzM0IDE0IDguMjM2MDhWMTEuNUMxNCAxMi4zMjg0IDEzLjMyODQgMTMgMTIuNSAxM0gyLjVDMS42NzE1NyAxMyAxIDEyLjMyODQgMSAxMS41VjguMjM1OUMwLjM4Njk3IDcuNjg3MjEgMCA2Ljg4ODgzIDAgNlYzQzAgMi40NDc3MiAwLjQ0NzcxNiAyIDEgMkg1VjFaTTkgMVYySDZWMUg5Wk0xIDNINUg1LjVIOS41SDEwSDE0VjZDMTQgNi42NTQgMTMuNjg2NiA3LjIzNDY3IDEzLjE5OTcgNy42MDA0QzEyLjg2NTUgNy44NTE0NCAxMi40NTA4IDggMTIgOEg4VjcuNUM4IDcuMjIzODYgNy43NzYxNCA3IDcuNSA3QzcuMjIzODYgNyA3IDcuMjIzODYgNyA3LjVWOEgzQzIuNTQ5MyA4IDIuMTM0NiA3Ljg1MTMzIDEuODAwMjkgNy42MDAyMkMxLjMxMzM1IDcuMjM0NDYgMSA2LjY1Mzk2IDEgNlYzWk03IDlIM0MyLjY0OTYxIDkgMi4zMTI5MiA4LjkzOTcyIDIgOC44MjkwNVYxMS41QzIgMTEuNzc2MSAyLjIyMzg2IDEyIDIuNSAxMkgxMi41QzEyLjc3NjEgMTIgMTMgMTEuNzc2MSAxMyAxMS41VjguODI5MTVDMTIuNjg3MSA4LjkzOTc4IDEyLjM1MDQgOSAxMiA5SDhWOS41QzggOS43NzYxNCA3Ljc3NjE0IDEwIDcuNSAxMEM3LjIyMzg2IDEwIDcgOS43NzYxNCA3IDkuNVY5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDZIMTEuNUMxMi4zMjg0IDYgMTMgNi42NzE1NyAxMyA3LjVDMTMgOC4zMjg0MyAxMi4zMjg0IDkgMTEuNSA5SDMuNUMyLjY3MTU3IDkgMiA4LjMyODQzIDIgNy41QzIgNi42NzE1NyAyLjY3MTU3IDYgMy41IDZaTTEgNy41QzEgNi4xMTkyOSAyLjExOTI5IDUgMy41IDVIMTEuNUMxMi44ODA3IDUgMTQgNi4xMTkyOSAxNCA3LjVDMTQgOC44ODA3MSAxMi44ODA3IDEwIDExLjUgMTBIMy41QzIuMTE5MjkgMTAgMSA4Ljg4MDcxIDEgNy41Wk00LjUgN0M0LjIyMzg2IDcgNCA3LjIyMzg2IDQgNy41QzQgNy43NzYxNCA0LjIyMzg2IDggNC41IDhIMTAuNUMxMC43NzYxIDggMTEgNy43NzYxNCAxMSA3LjVDMTEgNy4yMjM4NiAxMC43NzYxIDcgMTAuNSA3SDQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTExLjUgMUMxMS43NzYxIDEgMTIgMS4yMjM4NiAxMiAxLjVWMTMuNUMxMiAxMy43NzYxIDExLjc3NjEgMTQgMTEuNSAxNEMxMS4yMjM5IDE0IDExIDEzLjc3NjEgMTEgMTMuNVYxLjVDMTEgMS4yMjM4NiAxMS4yMjM5IDEgMTEuNSAxWk05LjUgM0M5Ljc3NjE0IDMgMTAgMy4yMjM4NiAxMCAzLjVWMTMuNUMxMCAxMy43NzYxIDkuNzc2MTQgMTQgOS41IDE0QzkuMjIzODYgMTQgOSAxMy43NzYxIDkgMTMuNVYzLjVDOSAzLjIyMzg2IDkuMjIzODYgMyA5LjUgM1pNMTMuNSAzQzEzLjc3NjEgMyAxNCAzLjIyMzg2IDE0IDMuNVYxMy41QzE0IDEzLjc3NjEgMTMuNzc2MSAxNCAxMy41IDE0QzEzLjIyMzkgMTQgMTMgMTMuNzc2MSAxMyAxMy41VjMuNUMxMyAzLjIyMzg2IDEzLjIyMzkgMyAxMy41IDNaTTUuNSA0QzUuNzc2MTQgNCA2IDQuMjIzODYgNiA0LjVWMTMuNUM2IDEzLjc3NjEgNS43NzYxNCAxNCA1LjUgMTRDNS4yMjM4NiAxNCA1IDEzLjc3NjEgNSAxMy41VjQuNUM1IDQuMjIzODYgNS4yMjM4NiA0IDUuNSA0Wk0xLjUgNUMxLjc3NjE0IDUgMiA1LjIyMzg2IDIgNS41VjEzLjVDMiAxMy43NzYxIDEuNzc2MTQgMTQgMS41IDE0QzEuMjIzODYgMTQgMSAxMy43NzYxIDEgMTMuNVY1LjVDMSA1LjIyMzg2IDEuMjIzODYgNSAxLjUgNVpNNy41IDVDNy43NzYxNCA1IDggNS4yMjM4NiA4IDUuNVYxMy41QzggMTMuNzc2MSA3Ljc3NjE0IDE0IDcuNSAxNEM3LjIyMzg2IDE0IDcgMTMuNzc2MSA3IDEzLjVWNS41QzcgNS4yMjM4NiA3LjIyMzg2IDUgNy41IDVaTTMuNSA3QzMuNzc2MTQgNyA0IDcuMjIzODYgNCA3LjVWMTMuNUM0IDEzLjc3NjEgMy43NzYxNCAxNCAzLjUgMTRDMy4yMjM4NiAxNCAzIDEzLjc3NjEgMyAxMy41VjcuNUMzIDcuMjIzODYgMy4yMjM4NiA3IDMuNSA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC42MDEyNCAxLjI1MDg2QzguNjAxMjQgMS43NTQ1OSA4LjI2Mjc4IDIuMTc5MjcgNy44MDA4NyAyLjMwOTg5QzEwLjE0NTkgMi40NjQ3IDEyIDQuNDE1ODIgMTIgNi43OTk5OVYxMC4yNUMxMiAxMS4wNTYzIDEyLjAzMjkgMTEuNzA3NCAxMi43MjM2IDEyLjA1MjhDMTIuOTMxIDEyLjE1NjUgMTMuMDM5OSAxMi4zODkyIDEyLjk4NjYgMTIuNjE0OUMxMi45MzMzIDEyLjg0MDYgMTIuNzMxOSAxMyAxMi41IDEzSDguMTYxNDRDOC4zNjkwNCAxMy4xODMyIDguNDk5OTcgMTMuNDUxMyA4LjQ5OTk3IDEzLjc1QzguNDk5OTcgMTQuMzAyMyA4LjA1MjI2IDE0Ljc1IDcuNDk5OTcgMTQuNzVDNi45NDc2OSAxNC43NSA2LjQ5OTk3IDE0LjMwMjMgNi40OTk5NyAxMy43NUM2LjQ5OTk3IDEzLjQ1MTMgNi42MzA5MSAxMy4xODMyIDYuODM4NTEgMTNIMi40OTk5OUMyLjI2ODEgMTMgMi4wNjY2NCAxMi44NDA2IDIuMDEzMzYgMTIuNjE0OUMxLjk2MDA5IDEyLjM4OTIgMi4wNjg5NyAxMi4xNTY1IDIuMjc2MzggMTIuMDUyOEMyLjk2NzA4IDExLjcwNzQgMi45OTk5OSAxMS4wNTYzIDIuOTk5OTkgMTAuMjVWNi43OTk5OUMyLjk5OTk5IDQuNDE1MzcgNC44NTQ4MSAyLjQ2Mzk2IDcuMjAwNDIgMi4zMDk4QzYuNzM4NjcgMi4xNzkwOCA2LjQwMDM2IDEuNzU0NDggNi40MDAzNiAxLjI1MDg2QzYuNDAwMzYgMC42NDMxMDQgNi44OTMwNCAwLjE1MDQyMSA3LjUwMDggMC4xNTA0MjFDOC4xMDg1NSAwLjE1MDQyMSA4LjYwMTI0IDAuNjQzMTA0IDguNjAxMjQgMS4yNTA4NlpNNy40OTk5OSAzLjI5OTk5QzUuNTY2OTkgMy4yOTk5OSAzLjk5OTk5IDQuODY2OTkgMy45OTk5OSA2Ljc5OTk5VjEwLjI1TDQuMDAwMDIgMTAuMzAwOUM0LjAwMDUgMTAuNzQ2MyA0LjAwMTIxIDExLjQwODQgMy42OTkyOSAxMkgxMS4zMDA3QzEwLjk5ODggMTEuNDA4NCAxMC45OTk1IDEwLjc0NjMgMTEgMTAuMzAwOUwxMSAxMC4yNVY2Ljc5OTk5QzExIDQuODY2OTkgOS40MzI5OSAzLjI5OTk5IDcuNDk5OTkgMy4yOTk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgOUMzIDYuNSA0LjUgNC4yNSA3LjUgMS41QzEwLjUgNC4yNSAxMiA2LjUgMTIgOUMxMiAxMS40ODUzIDkuOTg1MjggMTMuNSA3LjUgMTMuNUM1LjAxNDcyIDEzLjUgMyAxMS40ODUzIDMgOVpNMTAuOTUyNCA4LjMwMzA3QzkuNjczNDcgNy44MjEyMSA4LjI4NzkgOC40NjIwOCA2Ljk4OTU2IDkuMDYyNTlDNS45MzI3IDkuNTUxNDIgNC45MzM2NSAxMC4wMTM1IDQuMDk2OTUgOS44MjE1M0M0LjAzMzU3IDkuNTU4MDQgNCA5LjI4Mjk0IDQgOUM0IDcuMTEyMDMgNS4wMjY4NiA1LjI3MTk1IDcuNSAyLjg3MzU3QzkuNjY4MzcgNC45NzYzOSAxMC43MjUgNi42NTAwNCAxMC45NTI0IDguMzAzMDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxqPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDIuNUMzIDIuMjIzODYgMy4yMjM4NiAyIDMuNSAySDExLjVDMTEuNzc2MSAyIDEyIDIuMjIzODYgMTIgMi41VjEzLjVDMTIgMTMuNjgxOCAxMS45MDE0IDEzLjg0OTIgMTEuNzQyNCAxMy45MzczQzExLjU4MzQgMTQuMDI1NCAxMS4zODkxIDE0LjAyMDMgMTEuMjM1IDEzLjkyNEw3LjUgMTEuNTg5NkwzLjc2NSAxMy45MjRDMy42MTA4NyAxNC4wMjAzIDMuNDE2NTkgMTQuMDI1NCAzLjI1NzYyIDEzLjkzNzNDMy4wOTg2NCAxMy44NDkyIDMgMTMuNjgxOCAzIDEzLjVWMi41Wk00IDNWMTIuNTk3OUw2Ljk3IDEwLjc0MTZDNy4yOTQyNyAxMC41MzkgNy43MDU3MyAxMC41MzkgOC4wMyAxMC43NDE2TDExIDEyLjU5NzlWM0g0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC4yNSAxQzAuMjUgMC41ODU3ODYgMC41ODU3ODYgMC4yNSAxIDAuMjVIMTRDMTQuNDE0MiAwLjI1IDE0Ljc1IDAuNTg1Nzg2IDE0Ljc1IDFWMTRDMTQuNzUgMTQuNDE0MiAxNC40MTQyIDE0Ljc1IDE0IDE0Ljc1SDFDMC41ODU3ODYgMTQuNzUgMC4yNSAxNC40MTQyIDAuMjUgMTRWMVpNMS43NSAxLjc1VjEzLjI1SDEzLjI1VjEuNzVIMS43NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiOVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMTFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pKX0sST1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSAxMy4yNUwxNCAxMy4yNVYxNC43NUwxIDE0Ljc1VjEzLjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOVwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjExXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIxMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSkpfSxWPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wIDcuNUMwIDcuMjIzODYgMC4yMjM4NTggNyAwLjUgN0gzQzMuMjc2MTQgNyAzLjUgNy4yMjM4NiAzLjUgNy41QzMuNSA3Ljc3NjE0IDMuMjc2MTQgOCAzIDhIMC41QzAuMjIzODU4IDggMCA3Ljc3NjE0IDAgNy41Wk01Ljc1IDcuNUM1Ljc1IDcuMjIzODYgNS45NzM4NiA3IDYuMjUgN0g4Ljc1QzkuMDI2MTQgNyA5LjI1IDcuMjIzODYgOS4yNSA3LjVDOS4yNSA3Ljc3NjE0IDkuMDI2MTQgOCA4Ljc1IDhINi4yNUM1Ljk3Mzg2IDggNS43NSA3Ljc3NjE0IDUuNzUgNy41Wk0xMiA3QzExLjcyMzkgNyAxMS41IDcuMjIzODYgMTEuNSA3LjVDMTEuNSA3Ljc3NjE0IDExLjcyMzkgOCAxMiA4SDE0LjVDMTQuNzc2MSA4IDE1IDcuNzc2MTQgMTUgNy41QzE1IDcuMjIzODYgMTQuNzc2MSA3IDE0LjUgN0gxMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSA2LjYyNUMxLjAxNjc1IDYuNjI1IDAuNjI1IDcuMDE2NzUgMC42MjUgNy41QzAuNjI1IDcuOTgzMjUgMS4wMTY3NSA4LjM3NSAxLjUgOC4zNzVDMS45ODMyNSA4LjM3NSAyLjM3NSA3Ljk4MzI1IDIuMzc1IDcuNUMyLjM3NSA3LjAxNjc1IDEuOTgzMjUgNi42MjUgMS41IDYuNjI1Wk01LjUgNi42MjVDNS4wMTY3NSA2LjYyNSA0LjYyNSA3LjAxNjc1IDQuNjI1IDcuNUM0LjYyNSA3Ljk4MzI1IDUuMDE2NzUgOC4zNzUgNS41IDguMzc1QzUuOTgzMjUgOC4zNzUgNi4zNzUgNy45ODMyNSA2LjM3NSA3LjVDNi4zNzUgNy4wMTY3NSA1Ljk4MzI1IDYuNjI1IDUuNSA2LjYyNVpNOS41IDYuNjI1QzkuMDE2NzUgNi42MjUgOC42MjUgNy4wMTY3NSA4LjYyNSA3LjVDOC42MjUgNy45ODMyNSA5LjAxNjc1IDguMzc1IDkuNSA4LjM3NUM5Ljk4MzI1IDguMzc1IDEwLjM3NSA3Ljk4MzI1IDEwLjM3NSA3LjVDMTAuMzc1IDcuMDE2NzUgOS45ODMyNSA2LjYyNSA5LjUgNi42MjVaTTEyLjYyNSA3LjVDMTIuNjI1IDcuMDE2NzUgMTMuMDE2OCA2LjYyNSAxMy41IDYuNjI1QzEzLjk4MzIgNi42MjUgMTQuMzc1IDcuMDE2NzUgMTQuMzc1IDcuNUMxNC4zNzUgNy45ODMyNSAxMy45ODMyIDguMzc1IDEzLjUgOC4zNzVDMTMuMDE2OCA4LjM3NSAxMi42MjUgNy45ODMyNSAxMi42MjUgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS43NSAxTDEuNzUgMTRMMC4yNDk5OTkgMTRMMC4yNSAxTDEuNzUgMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDEwIDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEwXCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTAgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxMiA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMlwiLHk6XCIxM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDEyIDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiMTNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCA1KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgNSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCAzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCA5KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgOSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIxMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDggMTEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgMTEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjZcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDYgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNlwiLHk6XCIxM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDYgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjRcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDQgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNFwiLHk6XCIxM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDQgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEwXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxMCAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMlwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTIgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNlwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNiAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI0XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA0IDEpXCIsZmlsbDpufSkpfSxUPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiNS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI1LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCIzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjVcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjNcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIzXCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjNcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOVwiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiOS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI5LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMTEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiMTEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI1LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI5LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiMTEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSl9LEQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjI1IDFMMTMuMjUgMTRMMTQuNzUgMTRMMTQuNzUgMUwxMy4yNSAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNSA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNSAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDMgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDMgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA3IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCAxIDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA3IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgNSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgNSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgOSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgOSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgMTEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCAxIDExKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgOSA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgOSAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDExIDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCAxMSAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDUgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDMgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDkgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDExIDEpXCIsZmlsbDpufSkpfSxCPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjI1IDcuNUMxLjI1IDcuMjIzODYgMS40NzM4NiA3IDEuNzUgN0gxMy4yNUMxMy41MjYxIDcgMTMuNzUgNy4yMjM4NiAxMy43NSA3LjVDMTMuNzUgNy43NzYxNCAxMy41MjYxIDggMTMuMjUgOEgxLjc1QzEuNDczODYgOCAxLjI1IDcuNzc2MTQgMS4yNSA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxaPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiNS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjNcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjkuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgMS40OTk5NEMxIDEuMjIzOCAxLjIyMzg2IDAuOTk5OTM5IDEuNSAwLjk5OTkzOUg2VjEuOTk5OTRIMlY1Ljk5OTk0SDFWMS40OTk5NFpNMTMgMS45OTk5NEg5VjAuOTk5OTM5SDEzLjVDMTMuNzc2MSAwLjk5OTkzOSAxNCAxLjIyMzggMTQgMS40OTk5NFY1Ljk5OTk0SDEzVjEuOTk5OTRaTTEgMTMuNDk5OVY4Ljk5OTk0SDJWMTIuOTk5OUg2VjEzLjk5OTlIMS41QzEuMjIzODYgMTMuOTk5OSAxIDEzLjc3NjEgMSAxMy40OTk5Wk0xMyAxMi45OTk5VjguOTk5OTRIMTRWMTMuNDk5OUMxNCAxMy43NzYxIDEzLjc3NjEgMTMuOTk5OSAxMy41IDEzLjk5OTlIOS41VjEyLjk5OTlIMTNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSwkPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjUgM0MxLjIyMzg2IDMgMSAzLjIyMzg2IDEgMy41QzEgMy43NzYxNCAxLjIyMzg2IDQgMS41IDRIMTMuNUMxMy43NzYxIDQgMTQgMy43NzYxNCAxNCAzLjVDMTQgMy4yMjM4NiAxMy43NzYxIDMgMTMuNSAzSDEuNVpNMSA3LjVDMSA3LjIyMzg2IDEuMjIzODYgNyAxLjUgN0gzLjVDMy43NzYxNCA3IDQgNy4yMjM4NiA0IDcuNUM0IDcuNzc2MTQgMy43NzYxNCA4IDMuNSA4SDEuNUMxLjIyMzg2IDggMSA3Ljc3NjE0IDEgNy41Wk0xIDExLjVDMSAxMS4yMjM5IDEuMjIzODYgMTEgMS41IDExQzEuNzc2MTQgMTEgMiAxMS4yMjM5IDIgMTEuNUMyIDExLjc3NjEgMS43NzYxNCAxMiAxLjUgMTJDMS4yMjM4NiAxMiAxIDExLjc3NjEgMSAxMS41Wk0zIDExLjVDMyAxMS4yMjM5IDMuMjIzODYgMTEgMy41IDExQzMuNzc2MTQgMTEgNCAxMS4yMjM5IDQgMTEuNUM0IDExLjc3NjEgMy43NzYxNCAxMiAzLjUgMTJDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41Wk01LjUgMTFDNS4yMjM4NiAxMSA1IDExLjIyMzkgNSAxMS41QzUgMTEuNzc2MSA1LjIyMzg2IDEyIDUuNSAxMkM1Ljc3NjE0IDEyIDYgMTEuNzc2MSA2IDExLjVDNiAxMS4yMjM5IDUuNzc2MTQgMTEgNS41IDExWk03IDExLjVDNyAxMS4yMjM5IDcuMjIzODYgMTEgNy41IDExQzcuNzc2MTQgMTEgOCAxMS4yMjM5IDggMTEuNUM4IDExLjc3NjEgNy43NzYxNCAxMiA3LjUgMTJDNy4yMjM4NiAxMiA3IDExLjc3NjEgNyAxMS41Wk05LjUgMTFDOS4yMjM4NiAxMSA5IDExLjIyMzkgOSAxMS41QzkgMTEuNzc2MSA5LjIyMzg2IDEyIDkuNSAxMkM5Ljc3NjE0IDEyIDEwIDExLjc3NjEgMTAgMTEuNUMxMCAxMS4yMjM5IDkuNzc2MTQgMTEgOS41IDExWk0xMSAxMS41QzExIDExLjIyMzkgMTEuMjIzOSAxMSAxMS41IDExQzExLjc3NjEgMTEgMTIgMTEuMjIzOSAxMiAxMS41QzEyIDExLjc3NjEgMTEuNzc2MSAxMiAxMS41IDEyQzExLjIyMzkgMTIgMTEgMTEuNzc2MSAxMSAxMS41Wk0xMy41IDExQzEzLjIyMzkgMTEgMTMgMTEuMjIzOSAxMyAxMS41QzEzIDExLjc3NjEgMTMuMjIzOSAxMiAxMy41IDEyQzEzLjc3NjEgMTIgMTQgMTEuNzc2MSAxNCAxMS41QzE0IDExLjIyMzkgMTMuNzc2MSAxMSAxMy41IDExWk02LjUgN0M2LjIyMzg2IDcgNiA3LjIyMzg2IDYgNy41QzYgNy43NzYxNCA2LjIyMzg2IDggNi41IDhIOC41QzguNzc2MTQgOCA5IDcuNzc2MTQgOSA3LjVDOSA3LjIyMzg2IDguNzc2MTQgNyA4LjUgN0g2LjVaTTExIDcuNUMxMSA3LjIyMzg2IDExLjIyMzkgNyAxMS41IDdIMTMuNUMxMy43NzYxIDcgMTQgNy4yMjM4NiAxNCA3LjVDMTQgNy43NzYxNCAxMy43NzYxIDggMTMuNSA4SDExLjVDMTEuMjIzOSA4IDExIDcuNzc2MTQgMTEgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQgMS43NUwxIDEuNzVMMSAwLjI0OTk5OUwxNCAwLjI1TDE0IDEuNzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiMTBcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggMTApXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjJcIix5OlwiMTBcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDIgMTApXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiMTJcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggMTIpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjJcIix5OlwiMTJcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDIgMTIpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgOCA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA4IDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIyXCIseTpcIjhcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDIgOClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiAxNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTAgOClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiMTRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDEwIDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMlwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxMiA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMlwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTIgMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjZcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgNiA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI2XCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA2IDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI0XCIseTpcIjhcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDQgOClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNFwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgNCAxNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCI2XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA4IDYpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjJcIix5OlwiNlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiA2KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCI0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAyIDQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjEwXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxNCAxMClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiMTJcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDEyKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxNCA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTQgMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjZcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDYpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDQpXCIsZmlsbDpufSkpfSxGPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi41IDJIMi41QzIuMjIzODYgMiAyIDIuMjIzODYgMiAyLjVWMTIuNUMyIDEyLjc3NjEgMi4yMjM4NiAxMyAyLjUgMTNIMTIuNUMxMi43NzYxIDEzIDEzIDEyLjc3NjEgMTMgMTIuNVYyLjVDMTMgMi4yMjM4NiAxMi43NzYxIDIgMTIuNSAyWk0yLjUgMUMxLjY3MTU3IDEgMSAxLjY3MTU3IDEgMi41VjEyLjVDMSAxMy4zMjg0IDEuNjcxNTcgMTQgMi41IDE0SDEyLjVDMTMuMzI4NCAxNCAxNCAxMy4zMjg0IDE0IDEyLjVWMi41QzE0IDEuNjcxNTcgMTMuMzI4NCAxIDEyLjUgMUgyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxXPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjk5OTk4IDAuOTk5OTc2QzEuNDQ3NjkgMC45OTk5NzYgMC45OTk5NzYgMS40NDc2OSAwLjk5OTk3NiAxLjk5OTk4VjEzQzAuOTk5OTc2IDEzLjU1MjMgMS40NDc2OSAxNCAxLjk5OTk4IDE0SDEzQzEzLjU1MjMgMTQgMTQgMTMuNTUyMyAxNCAxM1YxLjk5OTk4QzE0IDEuNDQ3NjkgMTMuNTUyMyAwLjk5OTk3NiAxMyAwLjk5OTk3NkgxLjk5OTk4Wk0xLjk5OTk4IDEuOTk5OThMMTMgMS45OTk5OFYxM0gxLjk5OTk4VjEuOTk5OThaTTQuNDk5OTYgMy45OTk5NkM0LjIyMzgyIDMuOTk5OTYgMy45OTk5NiA0LjIyMzgyIDMuOTk5OTYgNC40OTk5NlYxMC41QzMuOTk5OTYgMTAuNzc2MSA0LjIyMzgyIDExIDQuNDk5OTYgMTFIMTAuNUMxMC43NzYxIDExIDExIDEwLjc3NjEgMTEgMTAuNVY0LjQ5OTk2QzExIDQuMjIzODIgMTAuNzc2MSAzLjk5OTk2IDEwLjUgMy45OTk5Nkg0LjQ5OTk2Wk00Ljk5OTk2IDkuOTk5OTZWNC45OTk5Nkg5Ljk5OTk2VjkuOTk5OTZINC45OTk5NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgNUgxM0MxMy41NTIzIDUgMTQgNS40NDc3MiAxNCA2VjlDMTQgOS41NTIyOCAxMy41NTIzIDEwIDEzIDEwSDJDMS40NDc3MiAxMCAxIDkuNTUyMjggMSA5VjZDMSA1LjQ0NzcyIDEuNDQ3NzIgNSAyIDVaTTAgNkMwIDQuODk1NDMgMC44OTU0MzEgNCAyIDRIMTNDMTQuMTA0NiA0IDE1IDQuODk1NDMgMTUgNlY5QzE1IDEwLjEwNDYgMTQuMTA0NiAxMSAxMyAxMUgyQzAuODk1NDMgMTEgMCAxMC4xMDQ2IDAgOVY2Wk00LjUgNi43NUM0LjA4NTc5IDYuNzUgMy43NSA3LjA4NTc5IDMuNzUgNy41QzMuNzUgNy45MTQyMSA0LjA4NTc5IDguMjUgNC41IDguMjVDNC45MTQyMSA4LjI1IDUuMjUgNy45MTQyMSA1LjI1IDcuNUM1LjI1IDcuMDg1NzkgNC45MTQyMSA2Ljc1IDQuNSA2Ljc1Wk02Ljc1IDcuNUM2Ljc1IDcuMDg1NzkgNy4wODU3OSA2Ljc1IDcuNSA2Ljc1QzcuOTE0MjEgNi43NSA4LjI1IDcuMDg1NzkgOC4yNSA3LjVDOC4yNSA3LjkxNDIxIDcuOTE0MjEgOC4yNSA3LjUgOC4yNUM3LjA4NTc5IDguMjUgNi43NSA3LjkxNDIxIDYuNzUgNy41Wk0xMC41IDYuNzVDMTAuMDg1OCA2Ljc1IDkuNzUgNy4wODU3OSA5Ljc1IDcuNUM5Ljc1IDcuOTE0MjEgMTAuMDg1OCA4LjI1IDEwLjUgOC4yNUMxMC45MTQyIDguMjUgMTEuMjUgNy45MTQyMSAxMS4yNSA3LjVDMTEuMjUgNy4wODU3OSAxMC45MTQyIDYuNzUgMTAuNSA2Ljc1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sej1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41IDFDNC43NzYxNCAxIDUgMS4yMjM4NiA1IDEuNVYySDEwVjEuNUMxMCAxLjIyMzg2IDEwLjIyMzkgMSAxMC41IDFDMTAuNzc2MSAxIDExIDEuMjIzODYgMTEgMS41VjJIMTIuNUMxMy4zMjg0IDIgMTQgMi42NzE1NyAxNCAzLjVWMTIuNUMxNCAxMy4zMjg0IDEzLjMyODQgMTQgMTIuNSAxNEgyLjVDMS42NzE1NyAxNCAxIDEzLjMyODQgMSAxMi41VjMuNUMxIDIuNjcxNTcgMS42NzE1NyAyIDIuNSAySDRWMS41QzQgMS4yMjM4NiA0LjIyMzg2IDEgNC41IDFaTTEwIDNWMy41QzEwIDMuNzc2MTQgMTAuMjIzOSA0IDEwLjUgNEMxMC43NzYxIDQgMTEgMy43NzYxNCAxMSAzLjVWM0gxMi41QzEyLjc3NjEgMyAxMyAzLjIyMzg2IDEzIDMuNVY1SDJWMy41QzIgMy4yMjM4NiAyLjIyMzg2IDMgMi41IDNINFYzLjVDNCAzLjc3NjE0IDQuMjIzODYgNCA0LjUgNEM0Ljc3NjE0IDQgNSAzLjc3NjE0IDUgMy41VjNIMTBaTTIgNlYxMi41QzIgMTIuNzc2MSAyLjIyMzg2IDEzIDIuNSAxM0gxMi41QzEyLjc3NjEgMTMgMTMgMTIuNzc2MSAxMyAxMi41VjZIMlpNNyA3LjVDNyA3LjIyMzg2IDcuMjIzODYgNyA3LjUgN0M3Ljc3NjE0IDcgOCA3LjIyMzg2IDggNy41QzggNy43NzYxNCA3Ljc3NjE0IDggNy41IDhDNy4yMjM4NiA4IDcgNy43NzYxNCA3IDcuNVpNOS41IDdDOS4yMjM4NiA3IDkgNy4yMjM4NiA5IDcuNUM5IDcuNzc2MTQgOS4yMjM4NiA4IDkuNSA4QzkuNzc2MTQgOCAxMCA3Ljc3NjE0IDEwIDcuNUMxMCA3LjIyMzg2IDkuNzc2MTQgNyA5LjUgN1pNMTEgNy41QzExIDcuMjIzODYgMTEuMjIzOSA3IDExLjUgN0MxMS43NzYxIDcgMTIgNy4yMjM4NiAxMiA3LjVDMTIgNy43NzYxNCAxMS43NzYxIDggMTEuNSA4QzExLjIyMzkgOCAxMSA3Ljc3NjE0IDExIDcuNVpNMTEuNSA5QzExLjIyMzkgOSAxMSA5LjIyMzg2IDExIDkuNUMxMSA5Ljc3NjE0IDExLjIyMzkgMTAgMTEuNSAxMEMxMS43NzYxIDEwIDEyIDkuNzc2MTQgMTIgOS41QzEyIDkuMjIzODYgMTEuNzc2MSA5IDExLjUgOVpNOSA5LjVDOSA5LjIyMzg2IDkuMjIzODYgOSA5LjUgOUM5Ljc3NjE0IDkgMTAgOS4yMjM4NiAxMCA5LjVDMTAgOS43NzYxNCA5Ljc3NjE0IDEwIDkuNSAxMEM5LjIyMzg2IDEwIDkgOS43NzYxNCA5IDkuNVpNNy41IDlDNy4yMjM4NiA5IDcgOS4yMjM4NiA3IDkuNUM3IDkuNzc2MTQgNy4yMjM4NiAxMCA3LjUgMTBDNy43NzYxNCAxMCA4IDkuNzc2MTQgOCA5LjVDOCA5LjIyMzg2IDcuNzc2MTQgOSA3LjUgOVpNNSA5LjVDNSA5LjIyMzg2IDUuMjIzODYgOSA1LjUgOUM1Ljc3NjE0IDkgNiA5LjIyMzg2IDYgOS41QzYgOS43NzYxNCA1Ljc3NjE0IDEwIDUuNSAxMEM1LjIyMzg2IDEwIDUgOS43NzYxNCA1IDkuNVpNMy41IDlDMy4yMjM4NiA5IDMgOS4yMjM4NiAzIDkuNUMzIDkuNzc2MTQgMy4yMjM4NiAxMCAzLjUgMTBDMy43NzYxNCAxMCA0IDkuNzc2MTQgNCA5LjVDNCA5LjIyMzg2IDMuNzc2MTQgOSAzLjUgOVpNMyAxMS41QzMgMTEuMjIzOSAzLjIyMzg2IDExIDMuNSAxMUMzLjc3NjE0IDExIDQgMTEuMjIzOSA0IDExLjVDNCAxMS43NzYxIDMuNzc2MTQgMTIgMy41IDEyQzMuMjIzODYgMTIgMyAxMS43NzYxIDMgMTEuNVpNNS41IDExQzUuMjIzODYgMTEgNSAxMS4yMjM5IDUgMTEuNUM1IDExLjc3NjEgNS4yMjM4NiAxMiA1LjUgMTJDNS43NzYxNCAxMiA2IDExLjc3NjEgNiAxMS41QzYgMTEuMjIzOSA1Ljc3NjE0IDExIDUuNSAxMVpNNyAxMS41QzcgMTEuMjIzOSA3LjIyMzg2IDExIDcuNSAxMUM3Ljc3NjE0IDExIDggMTEuMjIzOSA4IDExLjVDOCAxMS43NzYxIDcuNzc2MTQgMTIgNy41IDEyQzcuMjIzODYgMTIgNyAxMS43NzYxIDcgMTEuNVpNOS41IDExQzkuMjIzODYgMTEgOSAxMS4yMjM5IDkgMTEuNUM5IDExLjc3NjEgOS4yMjM4NiAxMiA5LjUgMTJDOS43NzYxNCAxMiAxMCAxMS43NzYxIDEwIDExLjVDMTAgMTEuMjIzOSA5Ljc3NjE0IDExIDkuNSAxMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgM0MxLjQ0NzcyIDMgMSAzLjQ0NzcyIDEgNFYxMUMxIDExLjU1MjMgMS40NDc3MiAxMiAyIDEySDEzQzEzLjU1MjMgMTIgMTQgMTEuNTUyMyAxNCAxMVY0QzE0IDMuNDQ3NzIgMTMuNTUyMyAzIDEzIDNIMlpNMCA0QzAgMi44OTU0MyAwLjg5NTQzMSAyIDIgMkgxM0MxNC4xMDQ2IDIgMTUgMi44OTU0MyAxNSA0VjExQzE1IDEyLjEwNDYgMTQuMTA0NiAxMyAxMyAxM0gyQzAuODk1NDMxIDEzIDAgMTIuMTA0NiAwIDExVjRaTTIgNC4yNUMyIDQuMTExOTMgMi4xMTE5MyA0IDIuMjUgNEg0Ljc1QzQuODg4MDcgNCA1IDQuMTExOTMgNSA0LjI1VjUuNzU0NTRDNSA1Ljg5MjYxIDQuODg4MDcgNi4wMDQ1NCA0Ljc1IDYuMDA0NTRIMi4yNUMyLjExMTkzIDYuMDA0NTQgMiA1Ljg5MjYxIDIgNS43NTQ1NFY0LjI1Wk0xMi4xMDEgNy41ODQyMUMxMi4xMDEgOS4wMjA3MyAxMC45MzY1IDEwLjE4NTMgOS40OTk5OCAxMC4xODUzQzguMDYzNDYgMTAuMTg1MyA2Ljg5ODkzIDkuMDIwNzMgNi44OTg5MyA3LjU4NDIxQzYuODk4OTMgNi4xNDc2OSA4LjA2MzQ2IDQuOTgzMTUgOS40OTk5OCA0Ljk4MzE1QzEwLjkzNjUgNC45ODMxNSAxMi4xMDEgNi4xNDc2OSAxMi4xMDEgNy41ODQyMVpNMTMuMTAxIDcuNTg0MjFDMTMuMTAxIDkuNTczMDIgMTEuNDg4OCAxMS4xODUzIDkuNDk5OTggMTEuMTg1M0M3LjUxMTE3IDExLjE4NTMgNS44OTg5MyA5LjU3MzAyIDUuODk4OTMgNy41ODQyMUM1Ljg5ODkzIDUuNTk1NCA3LjUxMTE3IDMuOTgzMTUgOS40OTk5OCAzLjk4MzE1QzExLjQ4ODggMy45ODMxNSAxMy4xMDEgNS41OTU0IDEzLjEwMSA3LjU4NDIxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAzLjVDMiAzLjIyMzg2IDIuMjIzODYgMyAyLjUgM0gxMi41QzEyLjc3NjEgMyAxMyAzLjIyMzg2IDEzIDMuNVY5LjVDMTMgOS43NzYxNCAxMi43NzYxIDEwIDEyLjUgMTBIMi41QzIuMjIzODYgMTAgMiA5Ljc3NjE0IDIgOS41VjMuNVpNMiAxMC45MTQ2QzEuNDE3NCAxMC43MDg3IDEgMTAuMTUzMSAxIDkuNVYzLjVDMSAyLjY3MTU3IDEuNjcxNTcgMiAyLjUgMkgxMi41QzEzLjMyODQgMiAxNCAyLjY3MTU3IDE0IDMuNVY5LjVDMTQgMTAuMTUzMSAxMy41ODI2IDEwLjcwODcgMTMgMTAuOTE0NlYxMS41QzEzIDEyLjMyODQgMTIuMzI4NCAxMyAxMS41IDEzSDMuNUMyLjY3MTU3IDEzIDIgMTIuMzI4NCAyIDExLjVWMTAuOTE0NlpNMTIgMTFWMTEuNUMxMiAxMS43NzYxIDExLjc3NjEgMTIgMTEuNSAxMkgzLjVDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41VjExSDEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi41IDNDMi4yMjM4NiAzIDIgMy4yMjM4NiAyIDMuNVY5LjVDMiA5Ljc3NjE0IDIuMjIzODYgMTAgMi41IDEwSDEyLjVDMTIuNzc2MSAxMCAxMyA5Ljc3NjE0IDEzIDkuNVYzLjVDMTMgMy4yMjM4NiAxMi43NzYxIDMgMTIuNSAzSDIuNVpNMSA5LjVDMSAxMC4xNTMxIDEuNDE3NCAxMC43MDg3IDIgMTAuOTE0NlYxMS41QzIgMTIuMzI4NCAyLjY3MTU3IDEzIDMuNSAxM0gxMS41QzEyLjMyODQgMTMgMTMgMTIuMzI4NCAxMyAxMS41VjEwLjkxNDZDMTMuNTgyNiAxMC43MDg3IDE0IDEwLjE1MzEgMTQgOS41VjMuNUMxNCAyLjY3MTU3IDEzLjMyODQgMiAxMi41IDJIMi41QzEuNjcxNTcgMiAxIDIuNjcxNTcgMSAzLjVWOS41Wk0xMiAxMS41VjExSDNWMTEuNUMzIDExLjc3NjEgMy4yMjM4NiAxMiAzLjUgMTJIMTEuNUMxMS43NzYxIDEyIDEyIDExLjc3NjEgMTIgMTEuNVpNNS41IDZDNS4yMjM4NiA2IDUgNi4yMjM4NiA1IDYuNUM1IDYuNzc2MTQgNS4yMjM4NiA3IDUuNSA3SDkuNUM5Ljc3NjE0IDcgMTAgNi43NzYxNCAxMCA2LjVDMTAgNi4yMjM4NiA5Ljc3NjE0IDYgOS41IDZINS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAzLjVDMiAzLjIyMzg2IDIuMjIzODYgMyAyLjUgM0gxMi41QzEyLjc3NjEgMyAxMyAzLjIyMzg2IDEzIDMuNVY5LjVDMTMgOS43NzYxNCAxMi43NzYxIDEwIDEyLjUgMTBIMi41QzIuMjIzODYgMTAgMiA5Ljc3NjE0IDIgOS41VjMuNVpNMiAxMC45MTQ2QzEuNDE3NCAxMC43MDg3IDEgMTAuMTUzMSAxIDkuNVYzLjVDMSAyLjY3MTU3IDEuNjcxNTcgMiAyLjUgMkgxMi41QzEzLjMyODQgMiAxNCAyLjY3MTU3IDE0IDMuNVY5LjVDMTQgMTAuMTUzMSAxMy41ODI2IDEwLjcwODcgMTMgMTAuOTE0NlYxMS41QzEzIDEyLjMyODQgMTIuMzI4NCAxMyAxMS41IDEzSDMuNUMyLjY3MTU3IDEzIDIgMTIuMzI4NCAyIDExLjVWMTAuOTE0NlpNMTIgMTFWMTEuNUMxMiAxMS43NzYxIDExLjc3NjEgMTIgMTEuNSAxMkgzLjVDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41VjExSDEyWk01IDYuNUM1IDYuMjIzODYgNS4yMjM4NiA2IDUuNSA2SDdWNC41QzcgNC4yMjM4NiA3LjIyMzg2IDQgNy41IDRDNy43NzYxNCA0IDggNC4yMjM4NiA4IDQuNVY2SDkuNUM5Ljc3NjE0IDYgMTAgNi4yMjM4NiAxMCA2LjVDMTAgNi43NzYxNCA5Ljc3NjE0IDcgOS41IDdIOFY4LjVDOCA4Ljc3NjE0IDcuNzc2MTQgOSA3LjUgOUM3LjIyMzg2IDkgNyA4Ljc3NjE0IDcgOC41VjdINS41QzUuMjIzODYgNyA1IDYuNzc2MTQgNSA2LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxKPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjE4MTc5IDYuMTgxODFDNC4zNTc1MyA2LjAwNjA4IDQuNjQyNDUgNi4wMDYwOCA0LjgxODE5IDYuMTgxODFMNy40OTk5OSA4Ljg2MzYyTDEwLjE4MTggNi4xODE4MUMxMC4zNTc1IDYuMDA2MDggMTAuNjQyNCA2LjAwNjA4IDEwLjgxODIgNi4xODE4MUMxMC45OTM5IDYuMzU3NTUgMTAuOTkzOSA2LjY0MjQ3IDEwLjgxODIgNi44MTgyMUw3LjgxODE5IDkuODE4MjFDNy43MzM3OSA5LjkwMjYgNy42MTkzNCA5Ljk1MDAxIDcuNDk5OTkgOS45NTAwMUM3LjM4MDY0IDkuOTUwMDEgNy4yNjYxOCA5LjkwMjYgNy4xODE3OSA5LjgxODIxTDQuMTgxNzkgNi44MTgyMUM0LjAwNjA1IDYuNjQyNDcgNC4wMDYwNSA2LjM1NzU1IDQuMTgxNzkgNi4xODE4MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguODE4MDkgNC4xODE3OUM4Ljk5MzgzIDQuMzU3NTMgOC45OTM4MyA0LjY0MjQ1IDguODE4MDkgNC44MTgxOUw2LjEzNjI5IDcuNDk5OTlMOC44MTgwOSAxMC4xODE4QzguOTkzODMgMTAuMzU3NSA4Ljk5MzgzIDEwLjY0MjQgOC44MTgwOSAxMC44MTgyQzguNjQyMzYgMTAuOTkzOSA4LjM1NzQzIDEwLjk5MzkgOC4xODE3IDEwLjgxODJMNS4xODE3IDcuODE4MTlDNS4wOTczMSA3LjczMzc5IDUuMDQ5OSA3LjYxOTMzIDUuMDQ5OSA3LjQ5OTk5QzUuMDQ5OSA3LjM4MDY0IDUuMDk3MzEgNy4yNjYxOCA1LjE4MTcgNy4xODE3OUw4LjE4MTcgNC4xODE3OUM4LjM1NzQzIDQuMDA2MDUgOC42NDIzNiA0LjAwNjA1IDguODE4MDkgNC4xODE3OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuMTgxOTQgNC4xODE4NUM2LjM1NzY3IDQuMDA2MTEgNi42NDI2IDQuMDA2MTEgNi44MTgzMyA0LjE4MTg1TDkuODE4MzMgNy4xODE4NUM5LjkwMjcyIDcuMjY2MjQgOS45NTAxMyA3LjM4MDcgOS45NTAxMyA3LjUwMDA1QzkuOTUwMTMgNy42MTk0IDkuOTAyNzIgNy43MzM4NiA5LjgxODMzIDcuODE4MjVMNi44MTgzMyAxMC44MTgyQzYuNjQyNiAxMC45OTQgNi4zNTc2NyAxMC45OTQgNi4xODE5NCAxMC44MTgyQzYuMDA2MiAxMC42NDI1IDYuMDA2MiAxMC4zNTc2IDYuMTgxOTQgMTAuMTgxOUw4Ljg2Mzc0IDcuNTAwMDVMNi4xODE5NCA0LjgxODI1QzYuMDA2MiA0LjY0MjUxIDYuMDA2MiA0LjM1NzU5IDYuMTgxOTQgNC4xODE4NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGVlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjkzMTc5IDUuNDMxNzlDNC43NTYwNSA1LjYwNzUzIDQuNzU2MDUgNS44OTI0NSA0LjkzMTc5IDYuMDY4MTlDNS4xMDc1MyA2LjI0MzkyIDUuMzkyNDUgNi4yNDM5MiA1LjU2ODE5IDYuMDY4MTlMNy40OTk5OSA0LjEzNjM4TDkuNDMxNzkgNi4wNjgxOUM5LjYwNzUzIDYuMjQzOTIgOS44OTI0NSA2LjI0MzkyIDEwLjA2ODIgNi4wNjgxOUMxMC4yNDM5IDUuODkyNDUgMTAuMjQzOSA1LjYwNzUzIDEwLjA2ODIgNS40MzE3OUw3LjgxODE5IDMuMTgxNzlDNy43MzM3OSAzLjA5NzQgNy42MTkzMyAzLjA0OTk5IDcuNDk5OTkgMy4wNDk5OUM3LjM4MDY0IDMuMDQ5OTkgNy4yNjYxOCAzLjA5NzQgNy4xODE3OSAzLjE4MTc5TDQuOTMxNzkgNS40MzE3OVpNMTAuMDY4MiA5LjU2ODE5QzEwLjI0MzkgOS4zOTI0NSAxMC4yNDM5IDkuMTA3NTMgMTAuMDY4MiA4LjkzMTc5QzkuODkyNDUgOC43NTYwNiA5LjYwNzUzIDguNzU2MDYgOS40MzE3OSA4LjkzMTc5TDcuNDk5OTkgMTAuODYzNkw1LjU2ODE5IDguOTMxNzlDNS4zOTI0NSA4Ljc1NjA2IDUuMTA3NTMgOC43NTYwNiA0LjkzMTc5IDguOTMxNzlDNC43NTYwNSA5LjEwNzUzIDQuNzU2MDUgOS4zOTI0NSA0LjkzMTc5IDkuNTY4MTlMNy4xODE3OSAxMS44MTgyQzcuMzU3NTMgMTEuOTkzOSA3LjY0MjQ1IDExLjk5MzkgNy44MTgxOSAxMS44MTgyTDEwLjA2ODIgOS41NjgxOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjE4MTc5IDguODE4MTlDNC4wMDYwNSA4LjY0MjQ1IDQuMDA2MDUgOC4zNTc1MyA0LjE4MTc5IDguMTgxNzlMNy4xODE3OSA1LjE4MTc5QzcuMjY2MTggNS4wOTc0IDcuMzgwNjQgNS4wNDk5OSA3LjQ5OTk5IDUuMDQ5OTlDNy42MTkzMyA1LjA0OTk5IDcuNzMzNzkgNS4wOTc0IDcuODE4MTkgNS4xODE3OUwxMC44MTgyIDguMTgxNzlDMTAuOTkzOSA4LjM1NzUzIDEwLjk5MzkgOC42NDI0NSAxMC44MTgyIDguODE4MTlDMTAuNjQyNCA4Ljk5MzkyIDEwLjM1NzUgOC45OTM5MiAxMC4xODE4IDguODE4MTlMNy40OTk5OSA2LjEzNjM4TDQuODE4MTkgOC44MTgxOUM0LjY0MjQ1IDguOTkzOTIgNC4zNTc1MyA4Ljk5MzkyIDQuMTgxNzkgOC44MTgxOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG5lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi41IDNMMi40OTk5OSAzLjAwMDAyQzEuNjcxNTcgMy4wMDAwMiAwLjk5OTk5OSAzLjY3MTU5IDAuOTk5OTk5IDQuNTAwMDJWOS41MDAwMkMwLjk5OTk5OSAxMC4zMjg0IDEuNjcxNTcgMTEgMi41IDExSDcuNTAwMDJDNy42MzI2MyAxMSA3Ljc1OTgxIDExLjA1MjcgNy44NTM1OCAxMS4xNDY1TDkuOTk5OTkgMTMuMjkyOVYxMS41QzkuOTk5OTkgMTEuMjIzOSAxMC4yMjM5IDExIDEwLjUgMTFIMTIuNUMxMy4zMjg0IDExIDE0IDEwLjMyODQgMTQgOS41MDAwMlY0LjVDMTQgMy42NzE1NyAxMy4zMjg0IDMgMTIuNSAzWk0yLjQ5OTk5IDIuMDAwMDJMMTIuNSAyQzEzLjg4MDcgMiAxNSAzLjExOTI4IDE1IDQuNVY5LjUwMDAyQzE1IDEwLjg4MDcgMTMuODgwNyAxMiAxMi41IDEySDExVjE0LjVDMTEgMTQuNzAyMiAxMC44NzgyIDE0Ljg4NDUgMTAuNjkxMyAxNC45NjE5QzEwLjUwNDUgMTUuMDM5MyAxMC4yODk0IDE0Ljk5NjUgMTAuMTQ2NCAxNC44NTM1TDcuMjkyOTIgMTJIMi41QzEuMTE5MjkgMTIgMCAxMC44ODA3IDAgOS41MDAwMlY0LjUwMDAyQzAgMy4xMTkzMSAxLjExOTI4IDIuMDAwMDIgMi40OTk5OSAyLjAwMDAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTExLjQ2NjkgMy43MjY4NEMxMS43NTU4IDMuOTE1NzQgMTEuODM2OSA0LjMwMzA4IDExLjY0OCA0LjU5MTk4TDcuMzk3OTkgMTEuMDkyQzcuMjk3ODMgMTEuMjQ1MiA3LjEzNTU2IDExLjM0NjcgNi45NTQwMiAxMS4zNjk5QzYuNzcyNDcgMTEuMzkzMSA2LjU4OTg5IDExLjMzNTUgNi40NTQ0NiAxMS4yMTI0TDMuNzA0NDYgOC43MTI0MUMzLjQ0OTA1IDguNDgwMjIgMy40MzAyMyA4LjA4NDk0IDMuNjYyNDIgNy44Mjk1M0MzLjg5NDYxIDcuNTc0MTIgNC4yODk4OSA3LjU1NTI5IDQuNTQ1MyA3Ljc4NzQ5TDYuNzUyOTIgOS43OTQ0MUwxMC42MDE4IDMuOTA3OTJDMTAuNzkwNyAzLjYxOTAyIDExLjE3OCAzLjUzNzk1IDExLjQ2NjkgMy43MjY4NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG9lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc3MDQ1QzMuODQyMjIgMC44NzcwNDUgMC44NzcwNzUgMy44NDIxOSAwLjg3NzA3NSA3LjQ5OTg4QzAuODc3MDc1IDExLjE1NzUgMy44NDIyMiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MxMS4xNTc2IDE0LjEyMjcgMTQuMTIyNyAxMS4xNTc1IDE0LjEyMjcgNy40OTk4OEMxNC4xMjI3IDMuODQyMTkgMTEuMTU3NiAwLjg3NzA0NSA3LjQ5OTkxIDAuODc3MDQ1Wk0xLjgyNzA4IDcuNDk5ODhDMS44MjcwOCA0LjM2Njg2IDQuMzY2ODkgMS44MjcwNCA3LjQ5OTkxIDEuODI3MDRDMTAuNjMyOSAxLjgyNzA0IDEzLjE3MjcgNC4zNjY4NiAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyAxMC42MzI5IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDNC4zNjY4OSAxMy4xNzI3IDEuODI3MDggMTAuNjMyOSAxLjgyNzA4IDcuNDk5ODhaTTEwLjE1ODkgNS41Mzc3NEMxMC4zMTc4IDUuMzExOTEgMTAuMjYzNiA1LjAwMDAxIDEwLjAzNzggNC44NDEwOUM5LjgxMTk0IDQuNjgyMTcgOS41MDAwNCA0LjczNjQyIDkuMzQxMTIgNC45NjIyNUw2LjUxOTc3IDguOTcxNTRMNS4zNTY4MSA3Ljc4NzA2QzUuMTYzMzQgNy41OTAwMiA0Ljg0Njc3IDcuNTg3MTEgNC42NDk3MyA3Ljc4MDU4QzQuNDUyNjggNy45NzQwNCA0LjQ0OTc4IDguMjkwNjEgNC42NDMyNSA4LjQ4NzY1TDYuMjI2NTggMTAuMTAwM0M2LjMzMDU0IDEwLjIwNjIgNi40NzYxNyAxMC4yNjA0IDYuNjI0MDcgMTAuMjQ4M0M2Ljc3MTk3IDEwLjIzNjMgNi45MDY4NiAxMC4xNTkxIDYuOTkyMjYgMTAuMDM3N0wxMC4xNTg5IDUuNTM3NzRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMyAzSDEyVjEySDNMMyAzWk0yIDNDMiAyLjQ0NzcxIDIuNDQ3NzIgMiAzIDJIMTJDMTIuNTUyMyAyIDEzIDIuNDQ3NzIgMTMgM1YxMkMxMyAxMi41NTIzIDEyLjU1MjMgMTMgMTIgMTNIM0MyLjQ0NzcxIDEzIDIgMTIuNTUyMyAyIDEyVjNaTTEwLjM0OTggNS41MTEwNUMxMC41MDYgNS4yODMzNyAxMC40NDgxIDQuOTcyMTIgMTAuMjIwNCA0LjgxNTg3QzkuOTkyNzUgNC42NTk2MSA5LjY4MTUgNC43MTc1MSA5LjUyNTI1IDQuOTQ1MTlMNi42NDA0OCA5LjE0ODU3TDUuMTk3MzMgNy40MDg4OUM1LjAyMTAyIDcuMTk2MzUgNC43MDU4IDcuMTY2OTkgNC40OTMyNyA3LjM0MzI5QzQuMjgwNzMgNy41MTk2IDQuMjUxMzcgNy44MzQ4MiA0LjQyNzY3IDguMDQ3MzVMNi4yOTM0IDEwLjI5NjRDNi4zOTM0OCAxMC40MTcxIDYuNTQ0MzcgMTAuNDgzOCA2LjcwMDk3IDEwLjQ3NjdDNi44NTc1NyAxMC40Njk1IDcuMDAxNzcgMTAuMzg5NCA3LjA5MDQ3IDEwLjI2MDFMMTAuMzQ5OCA1LjUxMTA1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMTM1MjMgNi4xNTgwM0MzLjMyNDEgNS45NTY1NyAzLjY0MDUyIDUuOTQ2MzcgMy44NDE5NyA2LjEzNTIzTDcuNSA5LjU2NDY0TDExLjE1OCA2LjEzNTIzQzExLjM1OTUgNS45NDYzNyAxMS42NzU5IDUuOTU2NTcgMTEuODY0OCA2LjE1ODAzQzEyLjA1MzYgNi4zNTk0OSAxMi4wNDM0IDYuNjc1OTEgMTEuODQyIDYuODY0NzdMNy44NDE5NyAxMC42MTQ4QzcuNjQ5NjQgMTAuNzk1MSA3LjM1MDM2IDEwLjc5NTEgNy4xNTgwMyAxMC42MTQ4TDMuMTU4MDMgNi44NjQ3N0MyLjk1NjU3IDYuNjc1OTEgMi45NDYzNyA2LjM1OTQ5IDMuMTM1MjMgNi4xNTgwM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGxlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04Ljg0MTgyIDMuMTM1MTRDOS4wNDMyNyAzLjMyNDAxIDkuMDUzNDggMy42NDA0MiA4Ljg2NDYyIDMuODQxODhMNS40MzUyMSA3LjQ5OTkxTDguODY0NjIgMTEuMTU3OUM5LjA1MzQ4IDExLjM1OTQgOS4wNDMyNyAxMS42NzU4IDguODQxODIgMTEuODY0N0M4LjY0MDM2IDEyLjA1MzUgOC4zMjM5NCAxMi4wNDMzIDguMTM1MDggMTEuODQxOUw0LjM4NTA4IDcuODQxODhDNC4yMDQ3NyA3LjY0OTU1IDQuMjA0NzcgNy4zNTAyNyA0LjM4NTA4IDcuMTU3OTRMOC4xMzUwOCAzLjE1Nzk0QzguMzIzOTQgMi45NTY0OCA4LjY0MDM2IDIuOTQ2MjggOC44NDE4MiAzLjEzNTE0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuMTU4NCAzLjEzNTA4QzYuMzU5ODUgMi45NDYyMSA2LjY3NjI3IDIuOTU2NDIgNi44NjUxNCAzLjE1Nzg4TDEwLjYxNTEgNy4xNTc4OEMxMC43OTU0IDcuMzUwMiAxMC43OTU0IDcuNjQ5NDkgMTAuNjE1MSA3Ljg0MTgyTDYuODY1MTQgMTEuODQxOEM2LjY3NjI3IDEyLjA0MzMgNi4zNTk4NSAxMi4wNTM1IDYuMTU4NCAxMS44NjQ2QzUuOTU2OTQgMTEuNjc1NyA1Ljk0NjczIDExLjM1OTMgNi4xMzU2IDExLjE1NzlMOS41NjUgNy40OTk4NUw2LjEzNTYgMy44NDE4MkM1Ljk0NjczIDMuNjQwMzYgNS45NTY5NCAzLjMyMzk0IDYuMTU4NCAzLjEzNTA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMTM1MjMgOC44NDE5N0MzLjMyNDEgOS4wNDM0MyAzLjY0MDUyIDkuMDUzNjMgMy44NDE5NyA4Ljg2NDc3TDcuNSA1LjQzNTM2TDExLjE1OCA4Ljg2NDc3QzExLjM1OTUgOS4wNTM2MyAxMS42NzU5IDkuMDQzNDMgMTEuODY0OCA4Ljg0MTk3QzEyLjA1MzYgOC42NDA1MSAxMi4wNDM0IDguMzI0MDkgMTEuODQyIDguMTM1MjNMNy44NDE5NyA0LjM4NTIzQzcuNjQ5NjQgNC4yMDQ5MiA3LjM1MDM2IDQuMjA0OTIgNy4xNTgwMyA0LjM4NTIzTDMuMTU4MDMgOC4xMzUyM0MyLjk1NjU3IDguMzI0MDkgMi45NDYzNyA4LjY0MDUxIDMuMTM1MjMgOC44NDE5N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHVlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjg3NzA3NSA3LjQ5OTkxQzAuODc3MDc1IDMuODQyMjIgMy44NDIyMiAwLjg3NzA3NSA3LjQ5OTkxIDAuODc3MDc1QzExLjE1NzYgMC44NzcwNzUgMTQuMTIyNyAzLjg0MjIyIDE0LjEyMjcgNy40OTk5MUMxNC4xMjI3IDExLjE1NzYgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MzLjg0MjIyIDE0LjEyMjcgMC44NzcwNzUgMTEuMTU3NiAwLjg3NzA3NSA3LjQ5OTkxWk03LjQ5OTkxIDEuODI3MDhDNC4zNjY4OSAxLjgyNzA4IDEuODI3MDggNC4zNjY4OSAxLjgyNzA4IDcuNDk5OTFDMS44MjcwOCAxMC42MzI5IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDMTAuNjMyOSAxMy4xNzI3IDEzLjE3MjcgMTAuNjMyOSAxMy4xNzI3IDcuNDk5OTFDMTMuMTcyNyA0LjM2Njg5IDEwLjYzMjkgMS44MjcwOCA3LjQ5OTkxIDEuODI3MDhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxkZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3NzA3NUMzLjg0MjIyIDAuODc3MDc1IDAuODc3MDc1IDMuODQyMjIgMC44NzcwNzUgNy40OTk5MUMwLjg3NzA3NSAxMS4xNTc2IDMuODQyMjIgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMTEuMTU3NiAxNC4xMjI3IDE0LjEyMjcgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTFDMTQuMTIyNyAzLjg0MjIyIDExLjE1NzYgMC44NzcwNzUgNy40OTk5MSAwLjg3NzA3NVpNMy44NTc2OCAzLjE1MDU3QzQuODQzMTEgMi4zMjQ0OCA2LjExMzQyIDEuODI3MDggNy40OTk5MSAxLjgyNzA4QzEwLjYzMjkgMS44MjcwOCAxMy4xNzI3IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxQzEzLjE3MjcgOC44ODYzOCAxMi42NzUzIDEwLjE1NjcgMTEuODQ5MiAxMS4xNDIxTDMuODU3NjggMy4xNTA1N1pNMy4xNTA1NyAzLjg1NzY4QzIuMzI0NDggNC44NDMxMSAxLjgyNzA4IDYuMTEzNDIgMS44MjcwOCA3LjQ5OTkxQzEuODI3MDggMTAuNjMyOSA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzguODg2MzggMTMuMTcyNyAxMC4xNTY3IDEyLjY3NTMgMTEuMTQyMSAxMS44NDkyTDMuMTUwNTcgMy44NTc2OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHBlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01IDJWMUgxMFYySDVaTTQuNzUgMEM0LjMzNTc5IDAgNCAwLjMzNTc4NiA0IDAuNzVWMUgzLjVDMi42NzE1NyAxIDIgMS42NzE1NyAyIDIuNVYxMi41QzIgMTMuMzI4NCAyLjY3MTU3IDE0IDMuNSAxNEgxMS41QzEyLjMyODQgMTQgMTMgMTMuMzI4NCAxMyAxMi41VjIuNUMxMyAxLjY3MTU3IDEyLjMyODQgMSAxMS41IDFIMTFWMC43NUMxMSAwLjMzNTc4NiAxMC42NjQyIDAgMTAuMjUgMEg0Ljc1Wk0xMSAyVjIuMjVDMTEgMi42NjQyMSAxMC42NjQyIDMgMTAuMjUgM0g0Ljc1QzQuMzM1NzkgMyA0IDIuNjY0MjEgNCAyLjI1VjJIMy41QzMuMjIzODYgMiAzIDIuMjIzODYgMyAyLjVWMTIuNUMzIDEyLjc3NjEgMy4yMjM4NiAxMyAzLjUgMTNIMTEuNUMxMS43NzYxIDEzIDEyIDEyLjc3NjEgMTIgMTIuNVYyLjVDMTIgMi4yMjM4NiAxMS43NzYxIDIgMTEuNSAySDExWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMlYxSDEwVjJINVpNNC43NSAwQzQuMzM1NzkgMCA0IDAuMzM1Nzg2IDQgMC43NVYxSDMuNUMyLjY3MTU3IDEgMiAxLjY3MTU3IDIgMi41VjEyLjVDMiAxMy4zMjg0IDIuNjcxNTcgMTQgMy41IDE0SDdWMTNIMy41QzMuMjIzODYgMTMgMyAxMi43NzYxIDMgMTIuNVYyLjVDMyAyLjIyMzg2IDMuMjIzODYgMiAzLjUgMkg0VjIuMjVDNCAyLjY2NDIxIDQuMzM1NzkgMyA0Ljc1IDNIMTAuMjVDMTAuNjY0MiAzIDExIDIuNjY0MjEgMTEgMi4yNVYySDExLjVDMTEuNzc2MSAyIDEyIDIuMjIzODYgMTIgMi41VjdIMTNWMi41QzEzIDEuNjcxNTcgMTIuMzI4NCAxIDExLjUgMUgxMVYwLjc1QzExIDAuMzM1Nzg2IDEwLjY2NDIgMCAxMC4yNSAwSDQuNzVaTTkgOC41QzkgOC43NzYxNCA4Ljc3NjE0IDkgOC41IDlDOC4yMjM4NiA5IDggOC43NzYxNCA4IDguNUM4IDguMjIzODYgOC4yMjM4NiA4IDguNSA4QzguNzc2MTQgOCA5IDguMjIzODYgOSA4LjVaTTEwLjUgOUMxMC43NzYxIDkgMTEgOC43NzYxNCAxMSA4LjVDMTEgOC4yMjM4NiAxMC43NzYxIDggMTAuNSA4QzEwLjIyMzkgOCAxMCA4LjIyMzg2IDEwIDguNUMxMCA4Ljc3NjE0IDEwLjIyMzkgOSAxMC41IDlaTTEzIDguNUMxMyA4Ljc3NjE0IDEyLjc3NjEgOSAxMi41IDlDMTIuMjIzOSA5IDEyIDguNzc2MTQgMTIgOC41QzEyIDguMjIzODYgMTIuMjIzOSA4IDEyLjUgOEMxMi43NzYxIDggMTMgOC4yMjM4NiAxMyA4LjVaTTE0LjUgOUMxNC43NzYxIDkgMTUgOC43NzYxNCAxNSA4LjVDMTUgOC4yMjM4NiAxNC43NzYxIDggMTQuNSA4QzE0LjIyMzkgOCAxNCA4LjIyMzg2IDE0IDguNUMxNCA4Ljc3NjE0IDE0LjIyMzkgOSAxNC41IDlaTTE1IDEwLjVDMTUgMTAuNzc2MSAxNC43NzYxIDExIDE0LjUgMTFDMTQuMjIzOSAxMSAxNCAxMC43NzYxIDE0IDEwLjVDMTQgMTAuMjIzOSAxNC4yMjM5IDEwIDE0LjUgMTBDMTQuNzc2MSAxMCAxNSAxMC4yMjM5IDE1IDEwLjVaTTE0LjUgMTNDMTQuNzc2MSAxMyAxNSAxMi43NzYxIDE1IDEyLjVDMTUgMTIuMjIzOSAxNC43NzYxIDEyIDE0LjUgMTJDMTQuMjIzOSAxMiAxNCAxMi4yMjM5IDE0IDEyLjVDMTQgMTIuNzc2MSAxNC4yMjM5IDEzIDE0LjUgMTNaTTE0LjUgMTVDMTQuNzc2MSAxNSAxNSAxNC43NzYxIDE1IDE0LjVDMTUgMTQuMjIzOSAxNC43NzYxIDE0IDE0LjUgMTRDMTQuMjIzOSAxNCAxNCAxNC4yMjM5IDE0IDE0LjVDMTQgMTQuNzc2MSAxNC4yMjM5IDE1IDE0LjUgMTVaTTguNSAxMUM4Ljc3NjE0IDExIDkgMTAuNzc2MSA5IDEwLjVDOSAxMC4yMjM5IDguNzc2MTQgMTAgOC41IDEwQzguMjIzODYgMTAgOCAxMC4yMjM5IDggMTAuNUM4IDEwLjc3NjEgOC4yMjM4NiAxMSA4LjUgMTFaTTkgMTIuNUM5IDEyLjc3NjEgOC43NzYxNCAxMyA4LjUgMTNDOC4yMjM4NiAxMyA4IDEyLjc3NjEgOCAxMi41QzggMTIuMjIzOSA4LjIyMzg2IDEyIDguNSAxMkM4Ljc3NjE0IDEyIDkgMTIuMjIzOSA5IDEyLjVaTTguNSAxNUM4Ljc3NjE0IDE1IDkgMTQuNzc2MSA5IDE0LjVDOSAxNC4yMjM5IDguNzc2MTQgMTQgOC41IDE0QzguMjIzODYgMTQgOCAxNC4yMjM5IDggMTQuNUM4IDE0Ljc3NjEgOC4yMjM4NiAxNSA4LjUgMTVaTTExIDE0LjVDMTEgMTQuNzc2MSAxMC43NzYxIDE1IDEwLjUgMTVDMTAuMjIzOSAxNSAxMCAxNC43NzYxIDEwIDE0LjVDMTAgMTQuMjIzOSAxMC4yMjM5IDE0IDEwLjUgMTRDMTAuNzc2MSAxNCAxMSAxNC4yMjM5IDExIDE0LjVaTTEyLjUgMTVDMTIuNzc2MSAxNSAxMyAxNC43NzYxIDEzIDE0LjVDMTMgMTQuMjIzOSAxMi43NzYxIDE0IDEyLjUgMTRDMTIuMjIzOSAxNCAxMiAxNC4yMjM5IDEyIDE0LjVDMTIgMTQuNzc2MSAxMi4yMjM5IDE1IDEyLjUgMTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxoZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41MDAwOSAwLjg3NzAxNEMzLjg0MjQxIDAuODc3MDE0IDAuODc3MjU4IDMuODQyMTYgMC44NzcyNTggNy40OTk4NEMwLjg3NzI1OCAxMS4xNTc1IDMuODQyNCAxNC4xMjI3IDcuNTAwMDkgMTQuMTIyN0MxMS4xNTc4IDE0LjEyMjcgMTQuMTIyOSAxMS4xNTc1IDE0LjEyMjkgNy40OTk4NEMxNC4xMjI5IDMuODQyMTYgMTEuMTU3NyAwLjg3NzAxNCA3LjUwMDA5IDAuODc3MDE0Wk0xLjgyNzI2IDcuNDk5ODRDMS44MjcyNiA0LjM2NjgzIDQuMzY3MDggMS44MjcwMSA3LjUwMDA5IDEuODI3MDFDMTAuNjMzMSAxLjgyNzAxIDEzLjE3MjkgNC4zNjY4MyAxMy4xNzI5IDcuNDk5ODRDMTMuMTcyOSAxMC42MzI4IDEwLjYzMzEgMTMuMTcyNyA3LjUwMDA5IDEzLjE3MjdDNC4zNjcwOCAxMy4xNzI3IDEuODI3MjYgMTAuNjMyOCAxLjgyNzI2IDcuNDk5ODRaTTggNC41MDAwMUM4IDQuMjIzODcgNy43NzYxNCA0LjAwMDAxIDcuNSA0LjAwMDAxQzcuMjIzODYgNC4wMDAwMSA3IDQuMjIzODcgNyA0LjUwMDAxVjcuNTAwMDFDNyA3LjYzMjYyIDcuMDUyNjggNy43NTk4IDcuMTQ2NDUgNy44NTM1N0w5LjE0NjQ1IDkuODUzNTdDOS4zNDE3MSAxMC4wNDg4IDkuNjU4MjkgMTAuMDQ4OCA5Ljg1MzU1IDkuODUzNTdDMTAuMDQ4OCA5LjY1ODMxIDEwLjA0ODggOS4zNDE3MiA5Ljg1MzU1IDkuMTQ2NDZMOCA3LjI5MjkxVjQuNTAwMDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxnZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOS45NjQyNCAyLjY4NTcxQzEwLjA2NjggMi40MjkzMSA5Ljk0MjA5IDIuMTM4MzMgOS42ODU3IDIuMDM1NzdDOS40MjkzIDEuOTMzMjIgOS4xMzgzMiAyLjA1NzkyIDkuMDM1NzYgMi4zMTQzMkw1LjAzNTc2IDEyLjMxNDNDNC45MzMyIDEyLjU3MDcgNS4wNTc5MSAxMi44NjE3IDUuMzE0MyAxMi45NjQyQzUuNTcwNyAxMy4wNjY4IDUuODYxNjggMTIuOTQyMSA1Ljk2NDI0IDEyLjY4NTdMOS45NjQyNCAyLjY4NTcxWk0zLjg1MzU1IDUuMTQ2NDZDNC4wNDg4MiA1LjM0MTcyIDQuMDQ4ODIgNS42NTgzIDMuODUzNTUgNS44NTM1NkwyLjIwNzExIDcuNTAwMDFMMy44NTM1NSA5LjE0NjQ2QzQuMDQ4ODIgOS4zNDE3MiA0LjA0ODgyIDkuNjU4MyAzLjg1MzU1IDkuODUzNTZDMy42NTgyOSAxMC4wNDg4IDMuMzQxNzEgMTAuMDQ4OCAzLjE0NjQ1IDkuODUzNTZMMS4xNDY0NSA3Ljg1MzU2QzAuOTUxMTg0IDcuNjU4MyAwLjk1MTE4NCA3LjM0MTcyIDEuMTQ2NDUgNy4xNDY0NkwzLjE0NjQ1IDUuMTQ2NDZDMy4zNDE3MSA0Ljk1MTIgMy42NTgyOSA0Ljk1MTIgMy44NTM1NSA1LjE0NjQ2Wk0xMS4xNDY0IDUuMTQ2NDZDMTEuMzQxNyA0Ljk1MTIgMTEuNjU4MyA0Ljk1MTIgMTEuODUzNiA1LjE0NjQ2TDEzLjg1MzYgNy4xNDY0NkMxNC4wNDg4IDcuMzQxNzIgMTQuMDQ4OCA3LjY1ODMgMTMuODUzNiA3Ljg1MzU2TDExLjg1MzYgOS44NTM1NkMxMS42NTgzIDEwLjA0ODggMTEuMzQxNyAxMC4wNDg4IDExLjE0NjQgOS44NTM1NkMxMC45NTEyIDkuNjU4MyAxMC45NTEyIDkuMzQxNzIgMTEuMTQ2NCA5LjE0NjQ2TDEyLjc5MjkgNy41MDAwMUwxMS4xNDY0IDUuODUzNTZDMTAuOTUxMiA1LjY1ODMgMTAuOTUxMiA1LjM0MTcyIDExLjE0NjQgNS4xNDY0NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHZlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjcxMTQ0IDAuNzk2OTAyQzcuNTc3NDEgMC43MzQzNTcgNy40MjI1NyAwLjczNDM1NyA3LjI4ODU1IDAuNzk2OTAyTDEuMjg4NTUgMy41OTY5QzEuMTEyNTEgMy42NzkwNSAwLjk5OTk5MyAzLjg1NTczIDAuOTk5OTkzIDQuMDQ5OTlWMTAuOTVDMC45OTk5OTMgMTEuMTQ0MyAxLjExMjUxIDExLjMyMDkgMS4yODg1NSAxMS40MDMxTDcuMjg4NTUgMTQuMjAzMUM3LjQyMjU3IDE0LjI2NTYgNy41Nzc0MSAxNC4yNjU2IDcuNzExNDQgMTQuMjAzMUwxMy43MTE0IDExLjQwMzFDMTMuODg3NSAxMS4zMjA5IDE0IDExLjE0NDMgMTQgMTAuOTVWNC4wNDk5OUMxNCAzLjg1NTczIDEzLjg4NzUgMy42NzkwNSAxMy43MTE0IDMuNTk2OUw3LjcxMTQ0IDAuNzk2OTAyWk03LjQ5OTk5IDMuMTU2NzRMNS45ODAzOSAyLjUxMDkxTDcuNDk5OTkgMS44MDE3Nkw5LjAxOTU5IDIuNTEwOTFMNy40OTk5OSAzLjE1Njc0Wk03LjY5NTU2IDQuMTYwMThMMTAuMjM4MiAzLjA3OTU4TDEyLjI3MTkgNC4wMjg2NUw3LjQ5OTk5IDYuMDU2NzFMMi43MjgwOCA0LjAyODY1TDQuNzYxODEgMy4wNzk1OEw3LjMwNDQyIDQuMTYwMThDNy40MjkzOSA0LjIxMzMgNy41NzA1OSA0LjIxMzMgNy42OTU1NiA0LjE2MDE4Wk03Ljk5OTk5IDYuOTMwNzhMMTMgNC44MDU3OFY3LjkyOTY2TDExLjA4MjEgOC44MTE5QzEwLjcyNzMgOC45NzUwOSAxMC41IDkuMzI5ODggMTAuNSA5LjcyMDM5VjExLjc5ODJMNy45OTk5OSAxMi45NjQ5VjYuOTMwNzhaTTExLjUgMTEuMzMxNkwxMyAxMC42MzE2VjkuMDMwMzlMMTEuNSA5LjcyMDM5VjExLjMzMTZaTTYuOTk5OTkgNi45MzA3OFYxMi45NjQ5TDQuNTAyMzEgMTEuNzk5M1Y5LjcyMDM2QzQuNTAyMzEgOS4zMjk4NSA0LjI3NDk5IDguOTc1MDYgMy45MjAyMiA4LjgxMTg3TDEuOTk5OTkgNy45Mjg1NlY0LjgwNTc4TDYuOTk5OTkgNi45MzA3OFpNMS45OTk5OSAxMC42MzE2TDMuNTAyMzEgMTEuMzMyNkwzLjUwMjMxIDkuNzIwMzZMMS45OTk5OSA5LjAyOTI5VjEwLjYzMTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxDZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC4wMDAxMiAxLjVDOC4wMDAxMiAxLjIyMzg2IDcuNzc2MjYgMSA3LjUwMDEyIDFDNy4yMjM5OCAxIDcuMDAwMTIgMS4yMjM4NiA3LjAwMDEyIDEuNVYxMy41QzcuMDAwMTIgMTMuNzc2MSA3LjIyMzk4IDE0IDcuNTAwMTIgMTRDNy43NzYyNiAxNCA4LjAwMDEyIDEzLjc3NjEgOC4wMDAxMiAxMy41VjEuNVpNMy4zMTgxMiA1LjgxOEMzLjQ5Mzg2IDUuNjQyMjcgMy40OTM4NiA1LjM1NzM0IDMuMzE4MTIgNS4xODE2MUMzLjE0MjM5IDUuMDA1ODcgMi44NTc0NiA1LjAwNTg3IDIuNjgxNzMgNS4xODE2MUwwLjY4MTcyOSA3LjE4MTYxQzAuNTA1OTkzIDcuMzU3MzQgMC41MDU5OTMgNy42NDIyNyAwLjY4MTcyOSA3LjgxOEwyLjY4MTczIDkuODE4QzIuODU3NDYgOS45OTM3NCAzLjE0MjM5IDkuOTkzNzQgMy4zMTgxMiA5LjgxOEMzLjQ5Mzg2IDkuNjQyMjcgMy40OTM4NiA5LjM1NzM0IDMuMzE4MTIgOS4xODE2MUwyLjA4NjMyIDcuOTQ5OEg1LjUwMDE3QzUuNzQ4NyA3Ljk0OTggNS45NTAxNyA3Ljc0ODMzIDUuOTUwMTcgNy40OTk4QzUuOTUwMTcgNy4yNTEyOCA1Ljc0ODcgNy4wNDk4IDUuNTAwMTcgNy4wNDk4SDIuMDg2MzJMMy4zMTgxMiA1LjgxOFpNMTIuMzE4MSA1LjE4MTYxQzEyLjE0MjQgNS4wMDU4NyAxMS44NTc1IDUuMDA1ODcgMTEuNjgxNyA1LjE4MTYxQzExLjUwNiA1LjM1NzM0IDExLjUwNiA1LjY0MjI3IDExLjY4MTcgNS44MThMMTIuOTEzNSA3LjA0OThIOS41MDAxN0M5LjI1MTY0IDcuMDQ5OCA5LjA1MDE3IDcuMjUxMjggOS4wNTAxNyA3LjQ5OThDOS4wNTAxNyA3Ljc0ODMzIDkuMjUxNjQgNy45NDk4IDkuNTAwMTcgNy45NDk4SDEyLjkxMzVMMTEuNjgxNyA5LjE4MTYxQzExLjUwNiA5LjM1NzM0IDExLjUwNiA5LjY0MjI3IDExLjY4MTcgOS44MThDMTEuODU3NSA5Ljk5Mzc0IDEyLjE0MjQgOS45OTM3NCAxMi4zMTgxIDkuODE4TDE0LjMxODEgNy44MThDMTQuNDkzOSA3LjY0MjI3IDE0LjQ5MzkgNy4zNTczNCAxNC4zMTgxIDcuMTgxNjFMMTIuMzE4MSA1LjE4MTYxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuMTQ5OTggMTRWMUgwLjg0OTk3NlYxNEgyLjE0OTk4Wk02LjE0OTk4IDE0VjFINC44NDk5OFYxNEg2LjE0OTk4Wk0xMC4xNSAxVjE0SDguODQ5OThWMUgxMC4xNVpNMTQuMTUgMTRWMUgxMi44NVYxNEgxNC4xNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05Ljk0OTY5IDcuNDk5ODlDOS45NDk2OSA4Ljg1Mjg4IDguODUyODggOS45NDk2OSA3LjQ5OTg5IDkuOTQ5NjlDNi4xNDY5MSA5Ljk0OTY5IDUuMDUwMSA4Ljg1Mjg4IDUuMDUwMSA3LjQ5OTg5QzUuMDUwMSA2LjE0NjkxIDYuMTQ2OTEgNS4wNTAxIDcuNDk5ODkgNS4wNTAxQzguODUyODggNS4wNTAxIDkuOTQ5NjkgNi4xNDY5MSA5Ljk0OTY5IDcuNDk5ODlaTTEwLjg2MzIgOEMxMC42MjEzIDkuNjQwNTUgOS4yMDc2NCAxMC44OTk3IDcuNDk5ODkgMTAuODk5N0M1Ljc5MjE0IDEwLjg5OTcgNC4zNzg0NyA5LjY0MDU1IDQuMTM2NjIgOEgwLjVDMC4yMjM4NTggOCAwIDcuNzc2MTQgMCA3LjVDMCA3LjIyMzg2IDAuMjIzODU4IDcgMC41IDdINC4xMzY1OUM0LjM3ODM1IDUuMzU5MzUgNS43OTIwNiA0LjEwMDEgNy40OTk4OSA0LjEwMDFDOS4yMDc3MiA0LjEwMDEgMTAuNjIxNCA1LjM1OTM1IDEwLjg2MzIgN0gxNC41QzE0Ljc3NjEgNyAxNSA3LjIyMzg2IDE1IDcuNUMxNSA3Ljc3NjE0IDE0Ljc3NjEgOCAxNC41IDhIMTAuODYzMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjY3MTI5IDMuMTQ2MzRDNC40NzYwMyAzLjM0MTYxIDQuNDc2MDMgMy42NTgxOSA0LjY3MTI5IDMuODUzNDVMNy4xNDYxNiA2LjMyODMzQzcuMzQxNDIgNi41MjM1OSA3LjY1ODAxIDYuNTIzNTkgNy44NTMyNyA2LjMyODMzTDEwLjMyODEgMy44NTM0NUMxMC41MjM0IDMuNjU4MTkgMTAuNTIzNCAzLjM0MTYxIDEwLjMyODEgMy4xNDYzNEw3Ljg1MzI3IDAuNjcxNDcxQzcuNjU4MDEgMC40NzYyMDkgNy4zNDE0MiAwLjQ3NjIwOSA3LjE0NjE2IDAuNjcxNDcxTDQuNjcxMjkgMy4xNDYzNFpNNy40OTk3MSA1LjI2NzY2TDUuNzMxOTUgMy40OTk5TDcuNDk5NzEgMS43MzIxM0w5LjI2NzQ4IDMuNDk5OUw3LjQ5OTcxIDUuMjY3NjZaTTguNjcxMjkgNy4xNDYzNEM4LjQ3NjAzIDcuMzQxNjEgOC40NzYwMyA3LjY1ODE5IDguNjcxMjkgNy44NTM0NUwxMS4xNDYyIDEwLjMyODNDMTEuMzQxNCAxMC41MjM2IDExLjY1OCAxMC41MjM2IDExLjg1MzMgMTAuMzI4M0wxNC4zMjgxIDcuODUzNDVDMTQuNTIzNCA3LjY1ODE5IDE0LjUyMzQgNy4zNDE2MSAxNC4zMjgxIDcuMTQ2MzRMMTEuODUzMyA0LjY3MTQ3QzExLjY1OCA0LjQ3NjIxIDExLjM0MTQgNC40NzYyMSAxMS4xNDYyIDQuNjcxNDdMOC42NzEyOSA3LjE0NjM0Wk0xMS40OTk3IDkuMjY3NjZMOS43MzE5NSA3LjQ5OTlMMTEuNDk5NyA1LjczMjEzTDEzLjI2NzUgNy40OTk5TDExLjQ5OTcgOS4yNjc2NlpNNC42NzEyOSAxMS44NTM1QzQuNDc2MDMgMTEuNjU4MiA0LjQ3NjAzIDExLjM0MTYgNC42NzEyOSAxMS4xNDYzTDcuMTQ2MTYgOC42NzE0N0M3LjM0MTQyIDguNDc2MjEgNy42NTgwMSA4LjQ3NjIxIDcuODUzMjcgOC42NzE0N0wxMC4zMjgxIDExLjE0NjNDMTAuNTIzNCAxMS4zNDE2IDEwLjUyMzQgMTEuNjU4MiAxMC4zMjgxIDExLjg1MzVMNy44NTMyNyAxNC4zMjgzQzcuNjU4MDEgMTQuNTIzNiA3LjM0MTQyIDE0LjUyMzYgNy4xNDYxNiAxNC4zMjgzTDQuNjcxMjkgMTEuODUzNVpNNS43MzE5NSAxMS40OTk5TDcuNDk5NzEgMTMuMjY3N0w5LjI2NzQ4IDExLjQ5OTlMNy40OTk3MSA5LjczMjEzTDUuNzMxOTUgMTEuNDk5OVpNMC42NzEyODggNy4xNDY0OUMwLjQ3NjAyNiA3LjM0MTc1IDAuNDc2MDI2IDcuNjU4MzQgMC42NzEyODggNy44NTM2TDMuMTQ2MTYgMTAuMzI4NUMzLjM0MTQyIDEwLjUyMzcgMy42NTgwMSAxMC41MjM3IDMuODUzMjcgMTAuMzI4NUw2LjMyODE0IDcuODUzNkM2LjUyMzQgNy42NTgzNCA2LjUyMzQgNy4zNDE3NSA2LjMyODE0IDcuMTQ2NDlMMy44NTMyNyA0LjY3MTYyQzMuNjU4MDEgNC40NzYzNiAzLjM0MTQyIDQuNDc2MzYgMy4xNDYxNiA0LjY3MTYyTDAuNjcxMjg4IDcuMTQ2NDlaTTMuNDk5NzIgOS4yNjc4MUwxLjczMTk1IDcuNTAwMDVMMy40OTk3MiA1LjczMjI4TDUuMjY3NDggNy41MDAwNUwzLjQ5OTcyIDkuMjY3ODFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5ZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy44NzkzNSAxSDMuOUgxMS4xSDExLjEyMDdDMTEuNTIzMSAwLjk5OTk5NCAxMS44NTUzIDAuOTk5OTg5IDEyLjEyNTkgMS4wMjIxQzEyLjQwNyAxLjA0NTA2IDEyLjY2NTMgMS4wOTQzNCAxMi45MDggMS4yMTc5OUMxMy4yODQzIDEuNDA5NzMgMTMuNTkwMyAxLjcxNTcgMTMuNzgyIDIuMDkyMDJDMTMuOTA1NyAyLjMzNDY5IDEzLjk1NDkgMi41OTMwNCAxMy45Nzc5IDIuODc0MDlDMTQgMy4xNDQ2OCAxNCAzLjQ3Njg2IDE0IDMuODc5MzRWMy45VjExLjFWMTEuMTIwN0MxNCAxMS41MjMxIDE0IDExLjg1NTMgMTMuOTc3OSAxMi4xMjU5QzEzLjk1NDkgMTIuNDA3IDEzLjkwNTcgMTIuNjY1MyAxMy43ODIgMTIuOTA4QzEzLjU5MDMgMTMuMjg0MyAxMy4yODQzIDEzLjU5MDMgMTIuOTA4IDEzLjc4MkMxMi42NjUzIDEzLjkwNTcgMTIuNDA3IDEzLjk1NDkgMTIuMTI1OSAxMy45Nzc5QzExLjg1NTMgMTQgMTEuNTIzMSAxNCAxMS4xMjA3IDE0SDExLjFIMy45SDMuODc5MzRDMy40NzY4NiAxNCAzLjE0NDY4IDE0IDIuODc0MDkgMTMuOTc3OUMyLjU5MzA0IDEzLjk1NDkgMi4zMzQ2OSAxMy45MDU3IDIuMDkyMDIgMTMuNzgyQzEuNzE1NyAxMy41OTAzIDEuNDA5NzMgMTMuMjg0MyAxLjIxNzk5IDEyLjkwOEMxLjA5NDM0IDEyLjY2NTMgMS4wNDUwNiAxMi40MDcgMS4wMjIxIDEyLjEyNTlDMC45OTk5ODkgMTEuODU1MyAwLjk5OTk5NCAxMS41MjMxIDEgMTEuMTIwN1YxMS4xMjA3VjExLjFWMy45VjMuODc5MzVWMy44NzkzNEMwLjk5OTk5NCAzLjQ3Njg2IDAuOTk5OTg5IDMuMTQ0NjggMS4wMjIxIDIuODc0MDlDMS4wNDUwNiAyLjU5MzA0IDEuMDk0MzQgMi4zMzQ2OSAxLjIxNzk5IDIuMDkyMDJDMS40MDk3MyAxLjcxNTcgMS43MTU3IDEuNDA5NzMgMi4wOTIwMiAxLjIxNzk5QzIuMzM0NjkgMS4wOTQzNCAyLjU5MzA0IDEuMDQ1MDYgMi44NzQwOSAxLjAyMjFDMy4xNDQ2OSAwLjk5OTk4OSAzLjQ3Njg3IDAuOTk5OTk0IDMuODc5MzUgMVpNMi45NTU1MiAyLjAxODc4QzIuNzM2MzEgMi4wMzY2OSAyLjYyNDIxIDIuMDY5MTUgMi41NDYwMSAyLjEwODk5QzIuMzU3ODUgMi4yMDQ4NyAyLjIwNDg3IDIuMzU3ODUgMi4xMDg5OSAyLjU0NjAxQzIuMDY5MTUgMi42MjQyMSAyLjAzNjY5IDIuNzM2MzEgMi4wMTg3OCAyLjk1NTUyQzIuMDAwMzkgMy4xODA1NiAyIDMuNDcxNzEgMiAzLjlWN0g3VjJIMy45QzMuNDcxNzEgMiAzLjE4MDU2IDIuMDAwMzkgMi45NTU1MiAyLjAxODc4Wk03IDhIMlYxMS4xQzIgMTEuNTI4MyAyLjAwMDM5IDExLjgxOTQgMi4wMTg3OCAxMi4wNDQ1QzIuMDM2NjkgMTIuMjYzNyAyLjA2OTE1IDEyLjM3NTggMi4xMDg5OSAxMi40NTRDMi4yMDQ4NyAxMi42NDIyIDIuMzU3ODUgMTIuNzk1MSAyLjU0NjAxIDEyLjg5MUMyLjYyNDIxIDEyLjkzMDkgMi43MzYzMSAxMi45NjMzIDIuOTU1NTIgMTIuOTgxMkMzLjE4MDU2IDEyLjk5OTYgMy40NzE3MSAxMyAzLjkgMTNIN1Y4Wk04IDhIMTNWMTEuMUMxMyAxMS41MjgzIDEyLjk5OTYgMTEuODE5NCAxMi45ODEyIDEyLjA0NDVDMTIuOTYzMyAxMi4yNjM3IDEyLjkzMDkgMTIuMzc1OCAxMi44OTEgMTIuNDU0QzEyLjc5NTEgMTIuNjQyMiAxMi42NDIyIDEyLjc5NTEgMTIuNDU0IDEyLjg5MUMxMi4zNzU4IDEyLjkzMDkgMTIuMjYzNyAxMi45NjMzIDEyLjA0NDUgMTIuOTgxMkMxMS44MTk0IDEyLjk5OTYgMTEuNTI4MyAxMyAxMS4xIDEzSDhWOFpNMTMgN0g4VjJIMTEuMUMxMS41MjgzIDIgMTEuODE5NCAyLjAwMDM5IDEyLjA0NDUgMi4wMTg3OEMxMi4yNjM3IDIuMDM2NjkgMTIuMzc1OCAyLjA2OTE1IDEyLjQ1NCAyLjEwODk5QzEyLjY0MjIgMi4yMDQ4NyAxMi43OTUxIDIuMzU3ODUgMTIuODkxIDIuNTQ2MDFDMTIuOTMwOSAyLjYyNDIxIDEyLjk2MzMgMi43MzYzMSAxMi45ODEyIDIuOTU1NTJDMTIuOTk5NiAzLjE4MDU2IDEzIDMuNDcxNzEgMTMgMy45VjdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4ZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy44NTM2NyAxLjQ4OTU2QzcuNjU4NDEgMS4yOTQyOSA3LjM0MTgyIDEuMjk0MjkgNy4xNDY1NiAxLjQ4OTU2TDEuNDg5NzEgNy4xNDY0MUMxLjI5NDQ1IDcuMzQxNjcgMS4yOTQ0NSA3LjY1ODI1IDEuNDg5NzEgNy44NTM1Mkw3LjE0NjU2IDEzLjUxMDRDNy4zNDE4MiAxMy43MDU2IDcuNjU4NDEgMTMuNzA1NiA3Ljg1MzY3IDEzLjUxMDRMMTMuNTEwNSA3Ljg1MzUyQzEzLjcwNTggNy42NTgyNSAxMy43MDU4IDcuMzQxNjcgMTMuNTEwNSA3LjE0NjQxTDcuODUzNjcgMS40ODk1NlpNNy41IDIuNTUwMzNMMi41NTAzNyA3LjQ5OTk2TDcuNSAxMi40NDk2VjIuNTUwMzNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxrZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4xNDY1IDEuNDg5NTlDNy4zNDE3NiAxLjI5NDMyIDcuNjU4MzUgMS4yOTQzMiA3Ljg1MzYxIDEuNDg5NTlMMTMuNTEwNSA3LjE0NjQ0QzEzLjcwNTcgNy4zNDE3IDEzLjcwNTcgNy42NTgyOSAxMy41MTA1IDcuODUzNTVMNy44NTM2MSAxMy41MTA0QzcuNjU4MzUgMTMuNzA1NyA3LjM0MTc2IDEzLjcwNTcgNy4xNDY1IDEzLjUxMDRMMS40ODk2NSA3Ljg1MzU1QzEuMjk0MzkgNy42NTgyOSAxLjI5NDM5IDcuMzQxNyAxLjQ4OTY1IDcuMTQ2NDRMNy4xNDY1IDEuNDg5NTlaTTcuNTAwMDUgMi41NTAyNUwyLjU1MDMxIDcuNDk5OTlMNy41MDAwNSAxMi40NDk3TDEyLjQ0OTggNy40OTk5OUw3LjUwMDA1IDIuNTUwMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxTZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy44NTM2MSAxLjQ4OTU5QzcuNjU4MzUgMS4yOTQzMiA3LjM0MTc2IDEuMjk0MzIgNy4xNDY1IDEuNDg5NTlMMS40ODk2NSA3LjE0NjQ0QzEuMjk0MzkgNy4zNDE3IDEuMjk0MzkgNy42NTgyOSAxLjQ4OTY1IDcuODUzNTVMMy45NjQ1IDEwLjMyODRMMS42NDY0NCAxMi42NDY0QzEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEzLjE1ODMgMS42NDY0NCAxMy4zNTM2QzEuODQxNzEgMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMi4zNTM1NSAxMy4zNTM2TDQuNjcxNiAxMS4wMzU1TDcuMTQ2NSAxMy41MTA0QzcuMzQxNzYgMTMuNzA1NyA3LjY1ODM1IDEzLjcwNTcgNy44NTM2MSAxMy41MTA0TDEzLjUxMDUgNy44NTM1NUMxMy43MDU3IDcuNjU4MjkgMTMuNzA1NyA3LjM0MTcgMTMuNTEwNSA3LjE0NjQ0TDExLjAzNTYgNC42NzE1NEwxMy4zNTM1IDIuMzUzNTVDMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMS44NDE3MSAxMy4zNTM1IDEuNjQ2NDVDMTMuMTU4MyAxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMi42NDY0IDEuNjQ2NDVMMTAuMzI4NSAzLjk2NDQzTDcuODUzNjEgMS40ODk1OVpNOS42MjEzNSA0LjY3MTU0TDcuNTAwMDUgMi41NTAyNUwyLjU1MDMxIDcuNDk5OTlMNC42NzE2IDkuNjIxMjlMOS42MjEzNSA0LjY3MTU0Wk01LjM3ODcxIDEwLjMyODRMNy41MDAwNSAxMi40NDk3TDEyLjQ0OTggNy40OTk5OUwxMC4zMjg1IDUuMzc4NjVMNS4zNzg3MSAxMC4zMjg0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sT2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEyLjgwMzQgNy4xNDY0NEMxMi45OTg2IDYuOTUxMTggMTMuMzE1MiA2Ljk1MTE4IDEzLjUxMDUgNy4xNDY0NEMxMy43MDU3IDcuMzQxNyAxMy43MDU3IDcuNjU4MjkgMTMuNTEwNSA3Ljg1MzU1QzEzLjMxNTIgOC4wNDg4MSAxMi45OTg2IDguMDQ4ODEgMTIuODAzNCA3Ljg1MzU1QzEyLjYwODEgNy42NTgyOCAxMi42MDgxIDcuMzQxNyAxMi44MDM0IDcuMTQ2NDRaTTEyLjA5NjIgOC41NjA2NUMxMi4yOTE1IDguNzU1OTIgMTIuMjkxNSA5LjA3MjUgMTIuMDk2MiA5LjI2Nzc2QzExLjkwMSA5LjQ2MzAyIDExLjU4NDQgOS40NjMwMiAxMS4zODkxIDkuMjY3NzZDMTEuMTkzOSA5LjA3MjUgMTEuMTkzOSA4Ljc1NTkyIDExLjM4OTEgOC41NjA2NUMxMS41ODQ0IDguMzY1MzkgMTEuOTAxIDguMzY1MzkgMTIuMDk2MiA4LjU2MDY1Wk0xMC42ODIgOS45NzQ4N0MxMC44NzczIDEwLjE3MDEgMTAuODc3MyAxMC40ODY3IDEwLjY4MiAxMC42ODJDMTAuNDg2OCAxMC44NzcyIDEwLjE3MDIgMTAuODc3MiA5Ljk3NDkzIDEwLjY4MkM5Ljc3OTY3IDEwLjQ4NjcgOS43Nzk2NyAxMC4xNzAxIDkuOTc0OTMgOS45NzQ4N0MxMC4xNzAyIDkuNzc5NiAxMC40ODY4IDkuNzc5NiAxMC42ODIgOS45NzQ4N1pNOS4yNjc4MiAxMS4zODkxQzkuNDYzMDggMTEuNTg0MyA5LjQ2MzA4IDExLjkwMDkgOS4yNjc4MiAxMi4wOTYyQzkuMDcyNTYgMTIuMjkxNSA4Ljc1NTk4IDEyLjI5MTUgOC41NjA3MSAxMi4wOTYyQzguMzY1NDUgMTEuOTAwOSA4LjM2NTQ1IDExLjU4NDMgOC41NjA3MiAxMS4zODkxQzguNzU1OTggMTEuMTkzOCA5LjA3MjU2IDExLjE5MzggOS4yNjc4MiAxMS4zODkxWk03LjE0NjUgMTMuNTEwNEM2Ljk1MTI0IDEzLjMxNTEgNi45NTEyNCAxMi45OTg2IDcuMTQ2NSAxMi44MDMzQzcuMTcwOTEgMTIuNzc4OSA3LjE5NzIxIDEyLjc1NzUgNy4yMjQ5NCAxMi43MzkyQzcuNDE5MDEgMTIuNjExMSA3LjY4Mjc1IDEyLjYzMjQgNy44NTM2MSAxMi44MDMzQzguMDQ4ODcgMTIuOTk4NiA4LjA0ODg3IDEzLjMxNTEgNy44NTM2MSAxMy41MTA0QzcuNjU4MzUgMTMuNzA1NyA3LjM0MTc2IDEzLjcwNTcgNy4xNDY1IDEzLjUxMDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjkwMzg2IDguNTYwNjVDMi43MDg2IDguNzU1OTIgMi43MDg2IDkuMDcyNSAyLjkwMzg2IDkuMjY3NzYgMy4wOTkxMiA5LjQ2MzAyIDMuNDE1NzEgOS40NjMwMiAzLjYxMDk3IDkuMjY3NzYgMy44MDYyMyA5LjA3MjUgMy44MDYyMyA4Ljc1NTkyIDMuNjEwOTcgOC41NjA2NSAzLjQxNTcxIDguMzY1MzkgMy4wOTkxMiA4LjM2NTM5IDIuOTAzODYgOC41NjA2NXpNNC4zMTgwNyA5Ljk3NDg3QzQuMTIyODEgMTAuMTcwMSA0LjEyMjgxIDEwLjQ4NjcgNC4zMTgwNyAxMC42ODIgNC41MTMzNCAxMC44NzcyIDQuODI5OTIgMTAuODc3MiA1LjAyNTE4IDEwLjY4MiA1LjIyMDQ0IDEwLjQ4NjcgNS4yMjA0NCAxMC4xNzAxIDUuMDI1MTggOS45NzQ4NyA0LjgyOTkyIDkuNzc5NiA0LjUxMzM0IDkuNzc5NiA0LjMxODA3IDkuOTc0ODd6TTUuNzMyMjkgMTEuMzg5MUM1LjUzNzAzIDExLjU4NDMgNS41MzcwMyAxMS45MDA5IDUuNzMyMjkgMTIuMDk2MiA1LjkyNzU1IDEyLjI5MTQgNi4yNDQxMyAxMi4yOTE1IDYuNDM5MzkgMTIuMDk2MiA2LjYzNDY2IDExLjkwMDkgNi42MzQ2NiAxMS41ODQzIDYuNDM5MzkgMTEuMzg5MSA2LjI0NDEzIDExLjE5MzggNS45Mjc1NSAxMS4xOTM4IDUuNzMyMjkgMTEuMzg5MXpNMi4xOTY3NSA3Ljg1MzU1QzIuMzY3NjEgNy42ODI2OSAyLjM4ODk3IDcuNDE4OTUgMi4yNjA4MiA3LjIyNDg4IDIuMDkwNDYgNi45NjY4NCAxLjcxMDYzIDYuOTI1NDYgMS40ODk2NSA3LjE0NjQ0IDEuMjk0MzkgNy4zNDE3IDEuMjk0MzkgNy42NTgyOSAxLjQ4OTY1IDcuODUzNTUgMS42ODQ5MSA4LjA0ODgxIDIuMDAxNDkgOC4wNDg4MSAyLjE5Njc1IDcuODUzNTV6TTMuNjEwOTcgNS43MzIyM0MzLjQxNTcxIDUuNTM2OTYgMy4wOTkxMiA1LjUzNjk2IDIuOTAzODYgNS43MzIyMyAyLjcwODYgNS45Mjc0OSAyLjcwODYgNi4yNDQwNyAyLjkwMzg2IDYuNDM5MzMgMy4wOTkxMiA2LjYzNDYgMy40MTU3MSA2LjYzNDYgMy42MTA5NyA2LjQzOTMzIDMuODA2MjMgNi4yNDQwNyAzLjgwNjIzIDUuOTI3NDkgMy42MTA5NyA1LjczMjIzek01LjAyNTE4IDQuMzE4MDFDNC44Mjk5MiA0LjEyMjc1IDQuNTEzMzQgNC4xMjI3NSA0LjMxODA3IDQuMzE4MDEgNC4xMjI4MSA0LjUxMzI4IDQuMTIyODEgNC44Mjk4NiA0LjMxODA3IDUuMDI1MTIgNC41MTMzNCA1LjIyMDM4IDQuODI5OTIgNS4yMjAzOCA1LjAyNTE4IDUuMDI1MTIgNS4yMjA0NCA0LjgyOTg2IDUuMjIwNDQgNC41MTMyOCA1LjAyNTE4IDQuMzE4MDF6TTYuNDM5MzkgMi45MDM4QzYuMjQ0MTMgMi43MDg1NCA1LjkyNzU1IDIuNzA4NTQgNS43MzIyOSAyLjkwMzggNS41MzcwMyAzLjA5OTA2IDUuNTM3MDMgMy40MTU2NCA1LjczMjI5IDMuNjEwOTEgNS45Mjc1NSAzLjgwNjE3IDYuMjQ0MTMgMy44MDYxNyA2LjQzOTM5IDMuNjEwOTEgNi42MzQ2NiAzLjQxNTY0IDYuNjM0NjYgMy4wOTkwNiA2LjQzOTM5IDIuOTAzOHpNNy44NTM2MSAxLjQ4OTU5QzcuNjU4MzUgMS4yOTQzMiA3LjM0MTc2IDEuMjk0MzIgNy4xNDY1IDEuNDg5NTkgNi45NTEyNCAxLjY4NDg1IDYuOTUxMjQgMi4wMDE0MyA3LjE0NjUgMi4xOTY2OSA3LjM0MTc2IDIuMzkxOTYgNy42NTgzNSAyLjM5MTk2IDcuODUzNjEgMi4xOTY2OSA4LjA0ODg3IDIuMDAxNDMgOC4wNDg4NyAxLjY4NDg1IDcuODUzNjEgMS40ODk1OXpNOS4yNjc4MiAyLjkwMzhDOS4wNzI1NiAyLjcwODU0IDguNzU1OTggMi43MDg1NCA4LjU2MDcxIDIuOTAzOCA4LjM2NTQ1IDMuMDk5MDYgOC4zNjU0NSAzLjQxNTY0IDguNTYwNzEgMy42MTA5MSA4Ljc1NTk4IDMuODA2MTcgOS4wNzI1NiAzLjgwNjE3IDkuMjY3ODIgMy42MTA5MSA5LjQ2MzA4IDMuNDE1NjQgOS40NjMwOCAzLjA5OTA2IDkuMjY3ODIgMi45MDM4ek0xMC42ODIgNC4zMTgwMUMxMC40ODY4IDQuMTIyNzUgMTAuMTcwMiA0LjEyMjc1IDkuOTc0OTMgNC4zMTgwMSA5Ljc3OTY3IDQuNTEzMjggOS43Nzk2NyA0LjgyOTg2IDkuOTc0OTMgNS4wMjUxMiAxMC4xNzAyIDUuMjIwMzggMTAuNDg2OCA1LjIyMDM4IDEwLjY4MiA1LjAyNTEyIDEwLjg3NzMgNC44Mjk4NiAxMC44NzczIDQuNTEzMjggMTAuNjgyIDQuMzE4MDF6TTEyLjA5NjIgNS43MzIyM0MxMS45MDEgNS41MzY5NiAxMS41ODQ0IDUuNTM2OTYgMTEuMzg5MSA1LjczMjIzIDExLjE5MzkgNS45Mjc0OSAxMS4xOTM5IDYuMjQ0MDcgMTEuMzg5MSA2LjQzOTMzIDExLjU4NDQgNi42MzQ2IDExLjkwMSA2LjYzNDYgMTIuMDk2MiA2LjQzOTMzIDEyLjI5MTUgNi4yNDQwNyAxMi4yOTE1IDUuOTI3NDkgMTIuMDk2MiA1LjczMjIzelwiLGZpbGw6bn0pKX0sTWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgMS41QzIgMS43NzYxNCAxLjc3NjE0IDIgMS41IDJDMS4yMjM4NiAyIDEgMS43NzYxNCAxIDEuNUMxIDEuMjIzODYgMS4yMjM4NiAxIDEuNSAxQzEuNzc2MTQgMSAyIDEuMjIzODYgMiAxLjVaTTUgMTNIMTBWMkw1IDJMNSAxM1pNNCAxM0M0IDEzLjU1MjMgNC40NDc3MiAxNCA1IDE0SDEwQzEwLjU1MjMgMTQgMTEgMTMuNTUyMyAxMSAxM1YyQzExIDEuNDQ3NzIgMTAuNTUyMyAxIDEwIDFINUM0LjQ0NzcyIDEgNCAxLjQ0NzcxIDQgMlYxM1pNMTMuNSAyQzEzLjc3NjEgMiAxNCAxLjc3NjE0IDE0IDEuNUMxNCAxLjIyMzg2IDEzLjc3NjEgMSAxMy41IDFDMTMuMjIzOSAxIDEzIDEuMjIzODYgMTMgMS41QzEzIDEuNzc2MTQgMTMuMjIzOSAyIDEzLjUgMlpNMiAzLjVDMiAzLjc3NjE0IDEuNzc2MTQgNCAxLjUgNEMxLjIyMzg2IDQgMSAzLjc3NjE0IDEgMy41QzEgMy4yMjM4NiAxLjIyMzg2IDMgMS41IDNDMS43NzYxNCAzIDIgMy4yMjM4NiAyIDMuNVpNMTMuNSA0QzEzLjc3NjEgNCAxNCAzLjc3NjE0IDE0IDMuNUMxNCAzLjIyMzg2IDEzLjc3NjEgMyAxMy41IDNDMTMuMjIzOSAzIDEzIDMuMjIzODYgMTMgMy41QzEzIDMuNzc2MTQgMTMuMjIzOSA0IDEzLjUgNFpNMiA1LjVDMiA1Ljc3NjE0IDEuNzc2MTQgNiAxLjUgNkMxLjIyMzg2IDYgMSA1Ljc3NjE0IDEgNS41QzEgNS4yMjM4NiAxLjIyMzg2IDUgMS41IDVDMS43NzYxNCA1IDIgNS4yMjM4NiAyIDUuNVpNMTMuNSA2QzEzLjc3NjEgNiAxNCA1Ljc3NjE0IDE0IDUuNUMxNCA1LjIyMzg2IDEzLjc3NjEgNSAxMy41IDVDMTMuMjIzOSA1IDEzIDUuMjIzODYgMTMgNS41QzEzIDUuNzc2MTQgMTMuMjIzOSA2IDEzLjUgNlpNMiA3LjVDMiA3Ljc3NjE0IDEuNzc2MTQgOCAxLjUgOEMxLjIyMzg2IDggMSA3Ljc3NjE0IDEgNy41QzEgNy4yMjM4NiAxLjIyMzg2IDcgMS41IDdDMS43NzYxNCA3IDIgNy4yMjM4NiAyIDcuNVpNMTMuNSA4QzEzLjc3NjEgOCAxNCA3Ljc3NjE0IDE0IDcuNUMxNCA3LjIyMzg2IDEzLjc3NjEgNyAxMy41IDdDMTMuMjIzOSA3IDEzIDcuMjIzODYgMTMgNy41QzEzIDcuNzc2MTQgMTMuMjIzOSA4IDEzLjUgOFpNMiA5LjVDMiA5Ljc3NjE0IDEuNzc2MTQgMTAgMS41IDEwQzEuMjIzODYgMTAgMSA5Ljc3NjE0IDEgOS41QzEgOS4yMjM4NiAxLjIyMzg2IDkgMS41IDlDMS43NzYxNCA5IDIgOS4yMjM4NiAyIDkuNVpNMTMuNSAxMEMxMy43NzYxIDEwIDE0IDkuNzc2MTQgMTQgOS41QzE0IDkuMjIzODYgMTMuNzc2MSA5IDEzLjUgOUMxMy4yMjM5IDkgMTMgOS4yMjM4NiAxMyA5LjVDMTMgOS43NzYxNCAxMy4yMjM5IDEwIDEzLjUgMTBaTTIgMTEuNUMyIDExLjc3NjEgMS43NzYxNCAxMiAxLjUgMTJDMS4yMjM4NiAxMiAxIDExLjc3NjEgMSAxMS41QzEgMTEuMjIzOSAxLjIyMzg2IDExIDEuNSAxMUMxLjc3NjE0IDExIDIgMTEuMjIzOSAyIDExLjVaTTEzLjUgMTJDMTMuNzc2MSAxMiAxNCAxMS43NzYxIDE0IDExLjVDMTQgMTEuMjIzOSAxMy43NzYxIDExIDEzLjUgMTFDMTMuMjIzOSAxMSAxMyAxMS4yMjM5IDEzIDExLjVDMTMgMTEuNzc2MSAxMy4yMjM5IDEyIDEzLjUgMTJaTTIgMTMuNUMyIDEzLjc3NjEgMS43NzYxNCAxNCAxLjUgMTRDMS4yMjM4NiAxNCAxIDEzLjc3NjEgMSAxMy41QzEgMTMuMjIzOSAxLjIyMzg2IDEzIDEuNSAxM0MxLjc3NjE0IDEzIDIgMTMuMjIzOSAyIDEzLjVaTTEzLjUgMTRDMTMuNzc2MSAxNCAxNCAxMy43NzYxIDE0IDEzLjVDMTQgMTMuMjIzOSAxMy43NzYxIDEzIDEzLjUgMTNDMTMuMjIzOSAxMyAxMyAxMy4yMjM5IDEzIDEzLjVDMTMgMTMuNzc2MSAxMy4yMjM5IDE0IDEzLjUgMTRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxMZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuMDY5NyAxLjc2NzQ2QzEyLjQ4MDcgMS4yMTk0NyAxMS40NjA1IDAuNDU0MzExIDExLjA0OTUgMS4wMDIzQzEwLjYzODUgMS41NTAyOCAxMS42NTg4IDIuMzE1NDQgMTIuMDY5NyAxLjc2NzQ2Wk04LjM5MjYzIDEuMDc4MTFDNy4xNTU4NSAwLjk1MDYwMiA1Ljc4MjMgMS4xNjM0OCA0LjU4NDMzIDEuNzA5MzdDMy4zODU1MiAyLjI1NTYzIDIuMzI3MzUgMy4xNTMwOSAxLjc4ODQ0IDQuNDE4MzJDMS4zNzU3NCA1LjM4NzI0IDEuMDE3MTUgNi4yODExMyAxLjAwMDg4IDcuNDQzNTRDMC45ODQ3MjQgOC41OTg0NCAxLjMwNTIyIDkuOTY4OTggMi4xMzE3NCAxMS45MjhDMi42MTE0MiAxMy4wNjQ5IDQuMDM5NjMgMTMuNTQ0NiA1LjEzODk1IDEzLjgwNzlDNi40MDgzNiAxNC4xMTE5IDcuODA4NTcgMTQuMTkxNCA4LjY2NDQgMTQuMDc0MkM5LjM2NTE1IDEzLjk3ODIgMTAuMTQ0OCAxMy44Mjg0IDEwLjc5ODcgMTMuMjk3QzExLjg5NzcgMTIuNDAzOSAxMi45MDA5IDExLjM5NTUgMTMuNDk5NCAxMC4zMzkzQzE0LjEwNCA5LjI3MjIxIDE0LjMyNTYgOC4wOTIwNyAxMy43MjE2IDYuOTUzMjRDMTMuNTYyOCA2LjY1MzczIDEzLjMxNiA2LjU3NzM0IDEzLjA0MTIgNi40OTIzQzEyLjkzNzQgNi40NjAxNiAxMi44Mjk1IDYuNDI2NzggMTIuNzIwOSA2LjM3OTY2QzExLjYyMTEgNS45MDIzNCAxMC45NjQ2IDUuMzQ5NjMgMTAuOTEzNSA1LjAyODc2QzEwLjg2NTYgNC43MjgwOCAxMC45MjIxIDQuNTE0NjMgMTAuOTgxMSA0LjI5MTgxQzExLjAxMjkgNC4xNzE5OSAxMS4wNDUzIDQuMDQ5NDcgMTEuMDYyNiAzLjkwOTIyQzExLjA4MzggMy43MzczNyAxMS4wODE0IDMuMzMzMTkgMTAuNjk5NiAzLjEyNzYxQzEwLjQwNDggMi45Njg4OCAxMC4yMTY0IDIuNjU4NDMgMTAuMDQwNyAyLjM2OTA0QzkuOTk3NDIgMi4yOTc3NSA5Ljk1NDkyIDIuMjI3NzMgOS45MTE4IDIuMTYxNThDOS42MjYzNCAxLjcyMzY3IDkuMjA3NjkgMS4xNjIxMyA4LjM5MjYzIDEuMDc4MTFaTTQuOTk4OTkgMi42MTkzNUMzLjk2NDgzIDMuMDkwNTggMy4xMjU1NCAzLjgzMDk3IDIuNzA4NDYgNC44MTAxOEMyLjI5ODA4IDUuNzczNjggMi4wMTQwNiA2LjUwODczIDIuMDAwNzkgNy40NTc1M0MxLjk4NzQxIDguNDEzODUgMi4yNTA0MyA5LjYzNjggMy4wNTMxIDExLjUzOTNDMy4zOTE4MSAxMi4zNDIxIDQuNjIxNjcgMTIuNjU1NyA1LjM3MTg2IDEyLjgzNTRDNi41NDkzIDEzLjExNzQgNy44MjIgMTMuMTgwMiA4LjUyODY4IDEzLjA4MzRDOS4yMTI3MSAxMi45ODk3IDkuNzQ1NjggMTIuODY0MiAxMC4xNjgxIDEyLjUyMDlDMTEuMjI5IDExLjY1ODcgMTIuMTIxIDEwLjc0MzUgMTIuNjI5MyA5Ljg0NjM1QzEyLjkzNDkgOS4zMDcwOSAxMy41MTQxIDcuNzAyOCAxMi42MjkyIDcuMzg3M0MxMC43NTM5IDYuNzE4NzUgMTAuMjYyIDYuMDY2NjkgOS45OTAxMSA1LjQxMjY4QzkuODA5MTUgNC45Nzc0NCA5LjgyODY4IDQuNTIyODIgOS45NTc0MSA0LjA3ODg1TDkuOTU3NDEgNC4wNzg4NEM5Ljk3NjYyIDQuMDEyNiA5Ljk5NTM4IDMuOTQ3OTEgMTAuMDMzNCAzLjg4ODgyQzkuODE4NTcgMy43MzY3NiA5LjY1MTUgMy41NTE5NSA5LjUxNDY0IDMuMzcxNUM5LjQyODc2IDMuMjU4MjggOS4zNDY5IDMuMTIwOTkgOS4yNjE5NyAyLjk3ODU2QzkuMDE4NjYgMi41NzA1MiA4Ljc1MDE4IDIuMTIwMjcgOC4yOTAwOCAyLjA3MjgzQzcuMjI4ODkgMS45NjM0MyA2LjAzMzk4IDIuMTQ3NzIgNC45OTg5OSAyLjYxOTM1Wk0xMy4yMDgxIDMuNzc0NzFDMTMuNDQxIDMuMjI2NzEgMTIuNDU0NyAyLjYzNjA2IDEyLjA4MjIgMy4xMDE2M0MxMS41ODE3IDMuNzI3MzIgMTIuOTAyOSA0LjQ5MjgxIDEzLjIwODEgMy43NzQ3MVpNMTQuMzY3MiAyLjI2MDMxQzE0Ljk2NjggMi4yNzQ5MyAxNS4xNTUxIDEuMTE2MDMgMTQuNTcxOCAwLjk0OTM3MUMxMy44MDc2IDAuNzMxMDI2IDEzLjU5MTggMi4yNDEzOSAxNC4zNjcyIDIuMjYwMzFaTTE0LjI4NTcgNS4wOTA5OEMxNC44NjQ0IDUuMTAwMDQgMTUuMDQ2MiA0LjM4MjIyIDE0LjQ4MzIgNC4yNzg5OUMxMy43NDU1IDQuMTQzNzUgMTMuNTM3MyA1LjA3OTI3IDE0LjI4NTcgNS4wOTA5OFpNNi45MDc1IDQuMjg2NzJDNi40Njg5OCA0LjY2NzU0IDYuMDUyMiA0LjE1MTg1IDUuOTc5ODMgMy43MzY1QzUuODY4NDggMy4wOTc0NCA2LjMzNjk2IDIuNTY4NTYgNi45NDgyMyAyLjkxMTU2QzcuNDMzNDQgMy4xODM4MiA3LjI2Njc4IDMuOTc0NzEgNi45MDc1IDQuMjg2NzJaTTQuOTQ0NTUgNS44ODE4NEM1LjQwODg1IDUuNDE3NTQgNC41OTU2NyA0LjU3MDEzIDQuMTE0MjUgNS4wNTE1NEMzLjgzMzM4IDUuMzMyNDIgNC4wMDkzNiA1LjY1Mzc2IDQuMjM3NDQgNS44ODE4NEM0LjQzMjcxIDYuMDc3MSA0Ljc0OTI5IDYuMDc3MSA0Ljk0NDU1IDUuODgxODRaTTYuOTc3MTYgNi43MTk4NEM3LjMxMTgxIDcuMzg5MTQgOC40ODgwNCA2Ljc5MTU5IDcuOTk0MTMgNi4xNDc4OEM3Ljg2NTE5IDUuOTc5ODMgNy42ODY1NyA1Ljk0OTQgNy42MjE0NSA1Ljk0MjA3QzcuMjEyMTcgNS44OTYwMSA2Ljc2MzQ5IDYuMjkyNSA2Ljk3NzE2IDYuNzE5ODRaTTYuOTg3OTggOC43MjQ2MUM3LjE0MDY2IDkuMTE4OCA3LjUxMTIyIDkuMzE4NyA3LjkxOTE1IDkuMTYzM0M4LjI3NDM0IDkuMDI3OTkgOC4zMzE4NiA4LjM5Njg5IDguMTcxNzUgOC4wNzQyN0M4LjAyMzMxIDcuNzc1MTQgNy42Mzk1NiA3LjY3NzkzIDcuMzM3NDcgNy43OTQxN0M2Ljk4NTEyIDcuOTI5NzYgNi44NTY3MiA4LjM4NzA4IDYuOTg1NzYgOC43MTg4OUw2Ljk4Nzk4IDguNzI0NjFaTTEwLjM4ODUgOC44NDA4MUMxMC43NTc1IDguNjU2NiAxMS40NjE3IDguODI3NzEgMTEuNDYxNyA5LjMxMTk5QzExLjQ2MTcgOS43MTI4NiAxMC45NTg3IDEwLjIxNjUgMTAuNTYzNCAxMC4yODI2QzEwLjE4MTMgMTAuMzQ2NSA5LjcwNTE1IDkuOTc1ODEgOS43NjY0OCA5LjU3NzE4QzkuODE0NDUgOS4yNjUzOSAxMC4xMjE3IDguOTc0MDEgMTAuMzg4NSA4Ljg0MDgxWk03LjU2NzA0IDEwLjg0MzJDNy4zMzQ2MSAxMC43NTAyIDcuMTQzNTMgMTAuODYwMSA3LjExNDM3IDEwLjg3NjlMNy4xMTI3OSAxMC44Nzc4QzYuOTA3ODIgMTAuOTk0OSA2LjcxMzgzIDExLjI0MzkgNi42NzQ3IDExLjQ4NDJDNi41OTAxOCAxMi4wMDM0IDcuMTMxOTkgMTIuMTIzOSA3LjUyNjYxIDEyLjA5ODdDOC4yMDc0IDEyLjA1NTMgOC4wNjU0NyAxMS4wNDI2IDcuNTY3MDQgMTAuODQzMlpNNC44ODA1IDEwLjg5MzJDNS4wNjc0IDEwLjc3MjMgNS4xNTY1OCAxMC41MzYzIDUuMDgyOTMgMTAuMzE1M0M0LjkzMDQ2IDkuNzk2ODcgNC4zMjQ2IDkuNzEyNTIgMy45NjU2MSAxMC4xMjk3QzMuNzkzMzYgMTAuMzI5OSAzLjgwNzQ5IDEwLjYyNzQgMy45OTIxNCAxMC44MTA1TDMuOTk0OTUgMTAuODE0TDMuOTk3OSAxMC44MTc2QzQuMjIwMjUgMTEuMDk0MiA0LjYzNjI0IDExLjE4NTcgNC44ODA1IDEwLjg5MzJaTTMuMDQ2OTUgNy44MTMxOEMzLjMzMTQ3IDguMDk3NyAzLjYwMDc3IDguMTUwNjcgMy45ODQ0MyA4LjA1ODU5QzQuNjA4MjYgNy45MDg4NyA0LjEzODE0IDYuMjQyOTkgMy4wNDcgNi44NzI5NkMyLjcwOTM5IDcuMDY3ODggMi44NjcxNiA3LjYzMzM5IDMuMDQ2OTUgNy44MTMxOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF9lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDkuNTAwMDZDMSAxMC4zMjg1IDEuNjcxNTcgMTEuMDAwMSAyLjUgMTEuMDAwMUg0TDQgMTAuMDAwMUgyLjVDMi4yMjM4NiAxMC4wMDAxIDIgOS43NzYyIDIgOS41MDAwNkwyIDIuNTAwMDZDMiAyLjIyMzkyIDIuMjIzODYgMi4wMDAwNiAyLjUgMi4wMDAwNkw5LjUgMi4wMDAwNkM5Ljc3NjE0IDIuMDAwMDYgMTAgMi4yMjM5MiAxMCAyLjUwMDA2VjQuMDAwMDJINS41QzQuNjcxNTggNC4wMDAwMiA0IDQuNjcxNTkgNCA1LjUwMDAyVjEyLjVDNCAxMy4zMjg0IDQuNjcxNTggMTQgNS41IDE0SDEyLjVDMTMuMzI4NCAxNCAxNCAxMy4zMjg0IDE0IDEyLjVWNS41MDAwMkMxNCA0LjY3MTU5IDEzLjMyODQgNC4wMDAwMiAxMi41IDQuMDAwMDJIMTFWMi41MDAwNkMxMSAxLjY3MTYzIDEwLjMyODQgMS4wMDAwNiA5LjUgMS4wMDAwNkgyLjVDMS42NzE1NyAxLjAwMDA2IDEgMS42NzE2MyAxIDIuNTAwMDZWOS41MDAwNlpNNSA1LjUwMDAyQzUgNS4yMjM4OCA1LjIyMzg2IDUuMDAwMDIgNS41IDUuMDAwMDJIMTIuNUMxMi43NzYxIDUuMDAwMDIgMTMgNS4yMjM4OCAxMyA1LjUwMDAyVjEyLjVDMTMgMTIuNzc2MiAxMi43NzYxIDEzIDEyLjUgMTNINS41QzUuMjIzODYgMTMgNSAxMi43NzYyIDUgMTIuNVY1LjUwMDAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuODc3MzcgMTJIOS45SDExLjVDMTEuNzc2MSAxMiAxMiAxMS43NzYxIDEyIDExLjVDMTIgMTEuMjIzOSAxMS43NzYxIDExIDExLjUgMTFIOS45QzguNzcxNjQgMTEgNy45NTU0NSAxMC45OTk2IDcuMzEzNTIgMTAuOTQ3MkM2LjY3NzQ0IDEwLjg5NTIgNi4yNTY2MiAxMC43OTQ2IDUuOTExMDMgMTAuNjE4NUM1LjI1MjQ3IDEwLjI4MyA0LjcxNzAzIDkuNzQ3NTMgNC4zODE0OCA5LjA4ODk3QzQuMjA1MzkgOC43NDMzOCA0LjEwNDgxIDguMzIyNTYgNC4wNTI4NCA3LjY4NjQ4QzQuMDAwMzkgNy4wNDQ1NSA0IDYuMjI4MzYgNCA1LjFWMy41QzQgMy4yMjM4NiAzLjc3NjE0IDMgMy41IDNDMy4yMjM4NiAzIDMgMy4yMjM4NiAzIDMuNVY1LjFWNS4xMjI2M0MzIDYuMjIzNTkgMyA3LjA4MDUyIDMuMDU2MTYgNy43Njc5MUMzLjExMzE4IDguNDY1ODQgMy4yMzA1OCA5LjAzMjkgMy40OTA0NyA5LjU0Mjk2QzMuOTIxOSAxMC4zODk3IDQuNjEwMzEgMTEuMDc4MSA1LjQ1NzA0IDExLjUwOTVDNS45NjcxIDExLjc2OTQgNi41MzQxNiAxMS44ODY4IDcuMjMyMDkgMTEuOTQzOEM3LjkxOTQ4IDEyIDguNzc2NDEgMTIgOS44NzczNyAxMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEVlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjEyMjYzIDEySDUuMUgzLjVDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41QzMgMTEuMjIzOSAzLjIyMzg2IDExIDMuNSAxMUg1LjFDNi4yMjgzNiAxMSA3LjA0NDU1IDEwLjk5OTYgNy42ODY0OCAxMC45NDcyQzguMzIyNTYgMTAuODk1MiA4Ljc0MzM4IDEwLjc5NDYgOS4wODg5NyAxMC42MTg1QzkuNzQ3NTMgMTAuMjgzIDEwLjI4MyA5Ljc0NzUzIDEwLjYxODUgOS4wODg5N0MxMC43OTQ2IDguNzQzMzggMTAuODk1MiA4LjMyMjU2IDEwLjk0NzIgNy42ODY0OEMxMC45OTk2IDcuMDQ0NTUgMTEgNi4yMjgzNiAxMSA1LjFWMy41QzExIDMuMjIzODYgMTEuMjIzOSAzIDExLjUgM0MxMS43NzYxIDMgMTIgMy4yMjM4NiAxMiAzLjVWNS4xVjUuMTIyNjNDMTIgNi4yMjM1OSAxMiA3LjA4MDUyIDExLjk0MzggNy43Njc5MUMxMS44ODY4IDguNDY1ODQgMTEuNzY5NCA5LjAzMjkgMTEuNTA5NSA5LjU0Mjk2QzExLjA3ODEgMTAuMzg5NyAxMC4zODk3IDExLjA3ODEgOS41NDI5NiAxMS41MDk1QzkuMDMyOSAxMS43Njk0IDguNDY1ODQgMTEuODg2OCA3Ljc2NzkxIDExLjk0MzhDNy4wODA1MiAxMiA2LjIyMzU5IDEyIDUuMTIyNjMgMTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxqZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOS44NzczNyAzSDkuOUgxMS41QzExLjc3NjEgMyAxMiAzLjIyMzg2IDEyIDMuNUMxMiAzLjc3NjE0IDExLjc3NjEgNCAxMS41IDRIOS45QzguNzcxNjQgNCA3Ljk1NTQ1IDQuMDAwMzkgNy4zMTM1MiA0LjA1Mjg0QzYuNjc3NDQgNC4xMDQ4MSA2LjI1NjYyIDQuMjA1MzkgNS45MTEwMyA0LjM4MTQ4QzUuMjUyNDcgNC43MTcwMyA0LjcxNzAzIDUuMjUyNDcgNC4zODE0OCA1LjkxMTAzQzQuMjA1MzkgNi4yNTY2MiA0LjEwNDgxIDYuNjc3NDQgNC4wNTI4NCA3LjMxMzUyQzQuMDAwMzkgNy45NTU0NSA0IDguNzcxNjQgNCA5LjlWMTEuNUM0IDExLjc3NjEgMy43NzYxNCAxMiAzLjUgMTJDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41VjkuOVY5Ljg3NzM3QzMgOC43NzY0MSAzIDcuOTE5NDggMy4wNTYxNiA3LjIzMjA5QzMuMTEzMTggNi41MzQxNiAzLjIzMDU4IDUuOTY3MSAzLjQ5MDQ3IDUuNDU3MDRDMy45MjE5IDQuNjEwMzEgNC42MTAzMSAzLjkyMTkgNS40NTcwNCAzLjQ5MDQ3QzUuOTY3MSAzLjIzMDU4IDYuNTM0MTYgMy4xMTMxOCA3LjIzMjA5IDMuMDU2MTZDNy45MTk0OCAzIDguNzc2NDEgMyA5Ljg3NzM3IDNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxSZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS4xMjI2MyAzSDUuMUgzLjVDMy4yMjM4NiAzIDMgMy4yMjM4NiAzIDMuNUMzIDMuNzc2MTQgMy4yMjM4NiA0IDMuNSA0SDUuMUM2LjIyODM2IDQgNy4wNDQ1NSA0LjAwMDM5IDcuNjg2NDggNC4wNTI4NEM4LjMyMjU2IDQuMTA0ODEgOC43NDMzOCA0LjIwNTM5IDkuMDg4OTcgNC4zODE0OEM5Ljc0NzUzIDQuNzE3MDMgMTAuMjgzIDUuMjUyNDcgMTAuNjE4NSA1LjkxMTAzQzEwLjc5NDYgNi4yNTY2MiAxMC44OTUyIDYuNjc3NDQgMTAuOTQ3MiA3LjMxMzUyQzEwLjk5OTYgNy45NTU0NSAxMSA4Ljc3MTY0IDExIDkuOVYxMS41QzExIDExLjc3NjEgMTEuMjIzOSAxMiAxMS41IDEyQzExLjc3NjEgMTIgMTIgMTEuNzc2MSAxMiAxMS41VjkuOVY5Ljg3NzM3QzEyIDguNzc2NDEgMTIgNy45MTk0OCAxMS45NDM4IDcuMjMyMDlDMTEuODg2OCA2LjUzNDE2IDExLjc2OTQgNS45NjcxIDExLjUwOTUgNS40NTcwNEMxMS4wNzgxIDQuNjEwMzEgMTAuMzg5NyAzLjkyMTkgOS41NDI5NiAzLjQ5MDQ3QzkuMDMyOSAzLjIzMDU4IDguNDY1ODQgMy4xMTMxOCA3Ljc2NzkxIDMuMDU2MTZDNy4wODA1MiAzIDYuMjIzNTkgMyA1LjEyMjYzIDNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxJZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuMSAzQzEwLjUyODMgMyAxMC44MTk0IDMuMDAwMzkgMTEuMDQ0NSAzLjAxODc4QzExLjI2MzcgMy4wMzY2OSAxMS4zNzU4IDMuMDY5MTUgMTEuNDU0IDMuMTA4OTlDMTEuNjQyMiAzLjIwNDg3IDExLjc5NTEgMy4zNTc4NSAxMS44OTEgMy41NDYwMUMxMS45MzA5IDMuNjI0MjEgMTEuOTYzMyAzLjczNjMxIDExLjk4MTIgMy45NTU1MkMxMS45OTk2IDQuMTgwNTYgMTIgNC40NzE3MSAxMiA0LjlWNS41QzEyIDUuNzc2MTQgMTIuMjIzOSA2IDEyLjUgNkMxMi43NzYxIDYgMTMgNS43NzYxNCAxMyA1LjVWNC44NzkzNUMxMyA0LjQ3Njg3IDEzIDQuMTQ0NjkgMTIuOTc3OSAzLjg3NDA5QzEyLjk1NDkgMy41OTMwNCAxMi45MDU3IDMuMzM0NjkgMTIuNzgyIDMuMDkyMDJDMTIuNTkwMyAyLjcxNTcgMTIuMjg0MyAyLjQwOTczIDExLjkwOCAyLjIxNzk5QzExLjY2NTMgMi4wOTQzNCAxMS40MDcgMi4wNDUwNiAxMS4xMjU5IDIuMDIyMUMxMC44NTUzIDEuOTk5OTkgMTAuNTIzMSAxLjk5OTk5IDEwLjEyMDcgMkgxMC4xMjA2SDEwLjFIOS41QzkuMjIzODYgMiA5IDIuMjIzODYgOSAyLjVDOSAyLjc3NjE0IDkuMjIzODYgMyA5LjUgM0gxMC4xWk01LjUgMkg0Ljg3OTM1SDQuODc5MzRDNC40NzY4NiAxLjk5OTk5IDQuMTQ0NjggMS45OTk5OSAzLjg3NDA5IDIuMDIyMUMzLjU5MzA0IDIuMDQ1MDYgMy4zMzQ2OSAyLjA5NDM0IDMuMDkyMDIgMi4yMTc5OUMyLjcxNTcgMi40MDk3MyAyLjQwOTczIDIuNzE1NyAyLjIxNzk5IDMuMDkyMDJDMi4wOTQzNCAzLjMzNDY5IDIuMDQ1MDYgMy41OTMwNCAyLjAyMjEgMy44NzQwOUMxLjk5OTk5IDQuMTQ0NjggMS45OTk5OSA0LjQ3Njg2IDIgNC44NzkzNFY0Ljg3OTM1VjUuNUMyIDUuNzc2MTQgMi4yMjM4NiA2IDIuNSA2QzIuNzc2MTQgNiAzIDUuNzc2MTQgMyA1LjVWNC45QzMgNC40NzE3MSAzLjAwMDM5IDQuMTgwNTYgMy4wMTg3OCAzLjk1NTUyQzMuMDM2NjkgMy43MzYzMSAzLjA2OTE1IDMuNjI0MjEgMy4xMDg5OSAzLjU0NjAxQzMuMjA0ODcgMy4zNTc4NSAzLjM1Nzg1IDMuMjA0ODcgMy41NDYwMSAzLjEwODk5QzMuNjI0MjEgMy4wNjkxNSAzLjczNjMxIDMuMDM2NjkgMy45NTU1MiAzLjAxODc4QzQuMTgwNTYgMy4wMDAzOSA0LjQ3MTcxIDMgNC45IDNINS41QzUuNzc2MTQgMyA2IDIuNzc2MTQgNiAyLjVDNiAyLjIyMzg2IDUuNzc2MTQgMiA1LjUgMlpNMTMgOS41QzEzIDkuMjIzODYgMTIuNzc2MSA5IDEyLjUgOUMxMi4yMjM5IDkgMTIgOS4yMjM4NiAxMiA5LjVWMTAuMUMxMiAxMC41MjgzIDExLjk5OTYgMTAuODE5NCAxMS45ODEyIDExLjA0NDVDMTEuOTYzMyAxMS4yNjM3IDExLjkzMDkgMTEuMzc1OCAxMS44OTEgMTEuNDU0QzExLjc5NTEgMTEuNjQyMiAxMS42NDIyIDExLjc5NTEgMTEuNDU0IDExLjg5MUMxMS4zNzU4IDExLjkzMDkgMTEuMjYzNyAxMS45NjMzIDExLjA0NDUgMTEuOTgxMkMxMC44MTk0IDExLjk5OTYgMTAuNTI4MyAxMiAxMC4xIDEySDkuNUM5LjIyMzg2IDEyIDkgMTIuMjIzOSA5IDEyLjVDOSAxMi43NzYxIDkuMjIzODYgMTMgOS41IDEzSDEwLjEyMDZDMTAuNTIzMSAxMyAxMC44NTUzIDEzIDExLjEyNTkgMTIuOTc3OUMxMS40MDcgMTIuOTU0OSAxMS42NjUzIDEyLjkwNTcgMTEuOTA4IDEyLjc4MkMxMi4yODQzIDEyLjU5MDMgMTIuNTkwMyAxMi4yODQzIDEyLjc4MiAxMS45MDhDMTIuOTA1NyAxMS42NjUzIDEyLjk1NDkgMTEuNDA3IDEyLjk3NzkgMTEuMTI1OUMxMyAxMC44NTUzIDEzIDEwLjUyMzEgMTMgMTAuMTIwNlY5LjVaTTIuNSA5QzIuNzc2MTQgOSAzIDkuMjIzODYgMyA5LjVWMTAuMUMzIDEwLjUyODMgMy4wMDAzOSAxMC44MTk0IDMuMDE4NzggMTEuMDQ0NUMzLjAzNjY5IDExLjI2MzcgMy4wNjkxNSAxMS4zNzU4IDMuMTA4OTkgMTEuNDU0QzMuMjA0ODcgMTEuNjQyMiAzLjM1Nzg1IDExLjc5NTEgMy41NDYwMSAxMS44OTFDMy42MjQyMSAxMS45MzA5IDMuNzM2MzEgMTEuOTYzMyAzLjk1NTUyIDExLjk4MTJDNC4xODA1NiAxMS45OTk2IDQuNDcxNzEgMTIgNC45IDEySDUuNUM1Ljc3NjE0IDEyIDYgMTIuMjIzOSA2IDEyLjVDNiAxMi43NzYxIDUuNzc2MTQgMTMgNS41IDEzSDQuODc5MzVDNC40NzY4NyAxMyA0LjE0NDY5IDEzIDMuODc0MDkgMTIuOTc3OUMzLjU5MzA0IDEyLjk1NDkgMy4zMzQ2OSAxMi45MDU3IDMuMDkyMDIgMTIuNzgyQzIuNzE1NyAxMi41OTAzIDIuNDA5NzMgMTIuMjg0MyAyLjIxNzk5IDExLjkwOEMyLjA5NDM0IDExLjY2NTMgMi4wNDUwNiAxMS40MDcgMi4wMjIxIDExLjEyNTlDMS45OTk5OSAxMC44NTUzIDEuOTk5OTkgMTAuNTIzMSAyIDEwLjEyMDdWMTAuMTIwNlYxMC4xVjkuNUMyIDkuMjIzODYgMi4yMjM4NiA5IDIuNSA5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjE1IDcuNDk5OThDMTMuMTUgNC42NjQ1OCAxMC45NDAyIDEuODQ5OTggNy41MDAwMiAxLjg0OTk4QzQuNzIxNyAxLjg0OTk4IDMuMzQ4NTEgMy45MDYzNiAyLjc2MzM2IDQuOTk5OTdINC41QzQuNzc2MTQgNC45OTk5NyA1IDUuMjIzODMgNSA1LjQ5OTk3QzUgNS43NzYxMSA0Ljc3NjE0IDUuOTk5OTcgNC41IDUuOTk5OTdIMS41QzEuMjIzODYgNS45OTk5NyAxIDUuNzc2MTEgMSA1LjQ5OTk3VjIuNDk5OTdDMSAyLjIyMzgzIDEuMjIzODYgMS45OTk5NyAxLjUgMS45OTk5N0MxLjc3NjE0IDEuOTk5OTcgMiAyLjIyMzgzIDIgMi40OTk5N1Y0LjMxMzE4QzIuNzA0NTMgMy4wNzEyNiA0LjMzNDA2IDAuODQ5OTc2IDcuNTAwMDIgMC44NDk5NzZDMTEuNTYyOCAwLjg0OTk3NiAxNC4xNSA0LjE4NTM3IDE0LjE1IDcuNDk5OThDMTQuMTUgMTAuODE0NiAxMS41NjI4IDE0LjE1IDcuNTAwMDIgMTQuMTVDNS41NTYxOCAxNC4xNSAzLjkzNzc4IDEzLjM4MDggMi43ODU0OCAxMi4yMDg0QzIuMTY4NTIgMTEuNTgwNiAxLjY4NjY4IDEwLjgzOSAxLjM1ODE2IDEwLjA0MDdDMS4yNTMwNiA5Ljc4NTM2IDEuMzc0ODggOS40OTMxNSAxLjYzMDI0IDkuMzg4MDZDMS44ODU2IDkuMjgyOTYgMi4xNzc4MSA5LjQwNDc4IDIuMjgyOSA5LjY2MDE0QzIuNTYzNzQgMTAuMzQyNSAyLjk3NDk1IDEwLjk3NDUgMy40OTg3IDExLjUwNzRDNC40NzA1MiAxMi40OTYzIDUuODM0OTYgMTMuMTUgNy41MDAwMiAxMy4xNUMxMC45NDAyIDEzLjE1IDEzLjE1IDEwLjMzNTQgMTMuMTUgNy40OTk5OFpNNyAxMFY1LjAwMDAxSDhWMTBIN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEhlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy4xNSA3LjQ5OTk4QzEzLjE1IDQuNjY0NTggMTAuOTQwMiAxLjg0OTk4IDcuNTAwMDIgMS44NDk5OEM0LjcyMTY3IDEuODQ5OTggMy4zNDg0OSAzLjkwNjQgMi43NjMzNSA1SDQuNUM0Ljc3NjE0IDUgNSA1LjIyMzg2IDUgNS41QzUgNS43NzYxNCA0Ljc3NjE0IDYgNC41IDZIMS41QzEuMjIzODYgNiAxIDUuNzc2MTQgMSA1LjVWMi41QzEgMi4yMjM4NiAxLjIyMzg2IDIgMS41IDJDMS43NzYxNCAyIDIgMi4yMjM4NiAyIDIuNVY0LjMxMzE4QzIuNzA0NTMgMy4wNzEyNiA0LjMzNDA2IDAuODQ5OTc2IDcuNTAwMDIgMC44NDk5NzZDMTEuNTYyOCAwLjg0OTk3NiAxNC4xNSA0LjE4NTM3IDE0LjE1IDcuNDk5OThDMTQuMTUgMTAuODE0NiAxMS41NjI4IDE0LjE1IDcuNTAwMDIgMTQuMTVDNS41NTYxOCAxNC4xNSAzLjkzNzc4IDEzLjM4MDggMi43ODU0OCAxMi4yMDg0QzIuMTY4NTIgMTEuNTgwNiAxLjY4NjY4IDEwLjgzOSAxLjM1ODE2IDEwLjA0MDdDMS4yNTMwNiA5Ljc4NTM2IDEuMzc0ODggOS40OTMxNSAxLjYzMDI0IDkuMzg4MDZDMS44ODU2IDkuMjgyOTYgMi4xNzc4MSA5LjQwNDc4IDIuMjgyOSA5LjY2MDE0QzIuNTYzNzQgMTAuMzQyNSAyLjk3NDk1IDEwLjk3NDUgMy40OTg3IDExLjUwNzRDNC40NzA1MiAxMi40OTYzIDUuODM0OTYgMTMuMTUgNy41MDAwMiAxMy4xNUMxMC45NDAyIDEzLjE1IDEzLjE1IDEwLjMzNTQgMTMuMTUgNy40OTk5OFpNNy41IDQuMDAwMDFDNy43NzYxNCA0LjAwMDAxIDggNC4yMjM4NyA4IDQuNTAwMDFWNy4yOTI5MUw5Ljg1MzU1IDkuMTQ2NDZDMTAuMDQ4OCA5LjM0MTcyIDEwLjA0ODggOS42NTgzMSA5Ljg1MzU1IDkuODUzNTdDOS42NTgyOSAxMC4wNDg4IDkuMzQxNzEgMTAuMDQ4OCA5LjE0NjQ1IDkuODUzNTdMNy4xNDY0NSA3Ljg1MzU3QzcuMDUyNjggNy43NTk4IDcgNy42MzI2MiA3IDcuNTAwMDFWNC41MDAwMUM3IDQuMjIzODcgNy4yMjM4NiA0LjAwMDAxIDcuNSA0LjAwMDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNSA4LjAwNjg0ZS0wN0MzLjc3NjE0IDcuODg2MTRlLTA3IDQgMC4yMjM4NTkgNCAwLjUwMDAwMUw0IDMuMDAwMDZMMTEuNSAzLjAwMDA2QzExLjc3NjEgMy4wMDAwNiAxMiAzLjIyMzkyIDEyIDMuNTAwMDZMMTIgMTEuMDAwMUwxNC41IDExQzE0Ljc3NjEgMTEgMTUgMTEuMjIzOCAxNSAxMS41QzE1IDExLjc3NjEgMTQuNzc2MiAxMiAxNC41IDEyTDEyIDEyLjAwMDFMMTIgMTQuNUMxMiAxNC43NzYxIDExLjc3NjEgMTUgMTEuNSAxNUMxMS4yMjM5IDE1IDExIDE0Ljc3NjEgMTEgMTQuNUwxMSAxMi4wMDAxTDMuNSAxMi4wMDAxQzMuMjIzODYgMTIuMDAwMSAzIDExLjc3NjIgMyAxMS41MDAxTDMgNC4wMDAwNUwwLjQ5OTk4OSA0QzAuMjIzODQ3IDQgLTYuMTA1NDFlLTA2IDMuNzc2MTMgLTUuMDI1NzZlLTA3IDMuNDk5OTlDNS4xMzAwNmUtMDYgMy4yMjM4NSAwLjIyMzg2NyAzIDAuNTAwMDEgM0wzIDMuMDAwMDVMMyAwLjUwMDAwMUMzIDAuMjIzODU5IDMuMjIzODYgOC4xMjc1NWUtMDcgMy41IDguMDA2ODRlLTA3Wk00IDQuMDAwMDZMNCAxMS4wMDAxTDExIDExLjAwMDFMMTEgNC4wMDAwNkw0IDQuMDAwMDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxUZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuODUzNiAyLjg1MzU1QzEzLjA0ODggMi42NTgyOSAxMy4wNDg4IDIuMzQxNzEgMTIuODUzNiAyLjE0NjQ1QzEyLjY1ODMgMS45NTExOCAxMi4zNDE3IDEuOTUxMTggMTIuMTQ2NCAyLjE0NjQ1TDcuNSA2Ljc5Mjg5TDIuODUzNTUgMi4xNDY0NUMyLjY1ODI5IDEuOTUxMTggMi4zNDE3MSAxLjk1MTE4IDIuMTQ2NDUgMi4xNDY0NUMxLjk1MTE4IDIuMzQxNzEgMS45NTExOCAyLjY1ODI5IDIuMTQ2NDUgMi44NTM1NUw2Ljc5Mjg5IDcuNUwyLjE0NjQ1IDEyLjE0NjRDMS45NTExOCAxMi4zNDE3IDEuOTUxMTggMTIuNjU4MyAyLjE0NjQ1IDEyLjg1MzZDMi4zNDE3MSAxMy4wNDg4IDIuNjU4MjkgMTMuMDQ4OCAyLjg1MzU1IDEyLjg1MzZMNy41IDguMjA3MTFMMTIuMTQ2NCAxMi44NTM2QzEyLjM0MTcgMTMuMDQ4OCAxMi42NTgzIDEzLjA0ODggMTIuODUzNiAxMi44NTM2QzEzLjA0ODggMTIuNjU4MyAxMy4wNDg4IDEyLjM0MTcgMTIuODUzNiAxMi4xNDY0TDguMjA3MTEgNy41TDEyLjg1MzYgMi44NTM1NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LERlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS43ODE2IDQuMDMxNTdDMTIuMDA2MiAzLjgwNzAyIDEyLjAwNjIgMy40NDI5NSAxMS43ODE2IDMuMjE4NEMxMS41NTcxIDIuOTkzODUgMTEuMTkzIDIuOTkzODUgMTAuOTY4NSAzLjIxODRMNy41MDAwNSA2LjY4NjgyTDQuMDMxNjQgMy4yMTg0QzMuODA3MDggMi45OTM4NSAzLjQ0MzAxIDIuOTkzODUgMy4yMTg0NiAzLjIxODRDMi45OTM5MSAzLjQ0Mjk1IDIuOTkzOTEgMy44MDcwMiAzLjIxODQ2IDQuMDMxNTdMNi42ODY4OCA3LjQ5OTk5TDMuMjE4NDYgMTAuOTY4NEMyLjk5MzkxIDExLjE5MyAyLjk5MzkxIDExLjU1NyAzLjIxODQ2IDExLjc4MTZDMy40NDMwMSAxMi4wMDYxIDMuODA3MDggMTIuMDA2MSA0LjAzMTY0IDExLjc4MTZMNy41MDAwNSA4LjMxMzE2TDEwLjk2ODUgMTEuNzgxNkMxMS4xOTMgMTIuMDA2MSAxMS41NTcxIDEyLjAwNjEgMTEuNzgxNiAxMS43ODE2QzEyLjAwNjIgMTEuNTU3IDEyLjAwNjIgMTEuMTkzIDExLjc4MTYgMTAuOTY4NEw4LjMxMzIyIDcuNDk5OTlMMTEuNzgxNiA0LjAzMTU3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNDk5ODhDMC44NzcwNzUgMy44NDIxOSAzLjg0MjIyIDAuODc3MDQ1IDcuNDk5OTEgMC44NzcwNDVDMTEuMTU3NiAwLjg3NzA0NSAxNC4xMjI3IDMuODQyMTkgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMTEuMTU3NSAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzMuODQyMjIgMTQuMTIyNyAwLjg3NzA3NSAxMS4xNTc1IDAuODc3MDc1IDcuNDk5ODhaTTcuNDk5OTEgMS44MjcwNEM0LjM2Njg5IDEuODI3MDQgMS44MjcwOCA0LjM2Njg2IDEuODI3MDggNy40OTk4OEMxLjgyNzA4IDEwLjYzMjkgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0MxMC42MzI5IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDQuMzY2ODYgMTAuNjMyOSAxLjgyNzA0IDcuNDk5OTEgMS44MjcwNFpNOS44NTM1OCA1LjE0NjQ0QzEwLjA0ODggNS4zNDE3IDEwLjA0ODggNS42NTgyOSA5Ljg1MzU4IDUuODUzNTVMOC4yMDcxMyA3LjQ5OTk5TDkuODUzNTggOS4xNDY0NEMxMC4wNDg4IDkuMzQxNyAxMC4wNDg4IDkuNjU4MjkgOS44NTM1OCA5Ljg1MzU1QzkuNjU4MzIgMTAuMDQ4OCA5LjM0MTczIDEwLjA0ODggOS4xNDY0NyA5Ljg1MzU1TDcuNTAwMDIgOC4yMDcxTDUuODUzNTggOS44NTM1NUM1LjY1ODMyIDEwLjA0ODggNS4zNDE3MyAxMC4wNDg4IDUuMTQ2NDcgOS44NTM1NUM0Ljk1MTIxIDkuNjU4MjkgNC45NTEyMSA5LjM0MTcgNS4xNDY0NyA5LjE0NjQ0TDYuNzkyOTIgNy40OTk5OUw1LjE0NjQ3IDUuODUzNTVDNC45NTEyMSA1LjY1ODI5IDQuOTUxMjEgNS4zNDE3IDUuMTQ2NDcgNS4xNDY0NEM1LjM0MTczIDQuOTUxMTggNS42NTgzMiA0Ljk1MTE4IDUuODUzNTggNS4xNDY0NEw3LjUwMDAyIDYuNzkyODlMOS4xNDY0NyA1LjE0NjQ0QzkuMzQxNzMgNC45NTExOCA5LjY1ODMyIDQuOTUxMTggOS44NTM1OCA1LjE0NjQ0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNTAyMDdDMC44NzcwNzUgMy44NDMxOSAzLjg0MzE5IDAuODc3MDc1IDcuNTAyMDggMC44NzcwNzVDMTEuMTYwOSAwLjg3NzA3NSAxNC4xMjcxIDMuODQzMTkgMTQuMTI3MSA3LjUwMjA3QzE0LjEyNzEgMTEuMTYwOSAxMS4xNjA5IDE0LjEyNzEgNy41MDIwOCAxNC4xMjcxQzMuODQzMTkgMTQuMTI3MSAwLjg3NzA3NSAxMS4xNjA5IDAuODc3MDc1IDcuNTAyMDdaTTEuODQ4OTggNy4wMDAwM0MyLjA4ODYgNC4yNjYzOSA0LjI2NjM5IDIuMDg4NiA3LjAwMDAzIDEuODQ4OThWNC41MDAwM0M3LjAwMDAzIDQuNzc2MTcgNy4yMjM4OCA1LjAwMDAzIDcuNTAwMDMgNS4wMDAwM0M3Ljc3NjE3IDUuMDAwMDMgOC4wMDAwMyA0Ljc3NjE3IDguMDAwMDMgNC41MDAwM1YxLjg0ODYyQzEwLjczNTYgMi4wODY0MyAxMi45MTU0IDQuMjY1MDIgMTMuMTU1MiA3LjAwMDAzSDEwLjVDMTAuMjIzOSA3LjAwMDAzIDEwIDcuMjIzODggMTAgNy41MDAwM0MxMCA3Ljc3NjE3IDEwLjIyMzkgOC4wMDAwMyAxMC41IDguMDAwMDNIMTMuMTU1NUMxMi45MTc2IDEwLjczNjkgMTAuNzM2OSAxMi45MTc2IDguMDAwMDMgMTMuMTU1NVYxMC41QzguMDAwMDMgMTAuMjIzOSA3Ljc3NjE3IDEwIDcuNTAwMDMgMTBDNy4yMjM4OCAxMCA3LjAwMDAzIDEwLjIyMzkgNy4wMDAwMyAxMC41VjEzLjE1NTJDNC4yNjUwMiAxMi45MTU0IDIuMDg2NDMgMTAuNzM1NiAxLjg0ODYyIDguMDAwMDNINC41MDAwM0M0Ljc3NjE3IDguMDAwMDMgNS4wMDAwMyA3Ljc3NjE3IDUuMDAwMDMgNy41MDAwM0M1LjAwMDAzIDcuMjIzODggNC43NzYxNyA3LjAwMDAzIDQuNTAwMDMgNy4wMDAwM0gxLjg0ODk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sJGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAwQzcuNzc2MTQgMCA4IDAuMjIzODU4IDggMC41VjEuODA2ODdDMTAuNjkyMiAyLjA5MzUgMTIuODE2NyA0LjI4MDEyIDEzLjAwNjggN0gxNC41QzE0Ljc3NjEgNyAxNSA3LjIyMzg2IDE1IDcuNUMxNSA3Ljc3NjE0IDE0Ljc3NjEgOCAxNC41IDhIMTIuOTg4OEMxMi43MDk0IDEwLjYyNDQgMTAuNjI0NCAxMi43MDk0IDggMTIuOTg4OFYxNC41QzggMTQuNzc2MSA3Ljc3NjE0IDE1IDcuNSAxNUM3LjIyMzg2IDE1IDcgMTQuNzc2MSA3IDE0LjVWMTMuMDA2OEM0LjI4MDEyIDEyLjgxNjcgMi4wOTM1IDEwLjY5MjIgMS44MDY4NyA4SDAuNUMwLjIyMzg1OCA4IDAgNy43NzYxNCAwIDcuNUMwIDcuMjIzODYgMC4yMjM4NTggNyAwLjUgN0gxLjc4ODg2QzEuOTgzNzYgNC4yMTE2NiA0LjIxMTY2IDEuOTgzNzYgNyAxLjc4ODg2VjAuNUM3IDAuMjIzODU4IDcuMjIzODYgMCA3LjUgMFpNOCAxMi4wMzIyVjkuNUM4IDkuMjIzODYgNy43NzYxNCA5IDcuNSA5QzcuMjIzODYgOSA3IDkuMjIzODYgNyA5LjVWMTIuMDU0QzQuODA1MTcgMTEuODY4OSAzLjA0MjIyIDEwLjE2NjggMi43NjM0NCA4SDUuNUM1Ljc3NjE0IDggNiA3Ljc3NjE0IDYgNy41QzYgNy4yMjM4NiA1Ljc3NjE0IDcgNS41IDdIMi43NDE3QzIuOTMyNTIgNC43MzY2MiA0LjczNjYyIDIuOTMyNTIgNyAyLjc0MTdWNS41QzcgNS43NzYxNCA3LjIyMzg2IDYgNy41IDZDNy43NzYxNCA2IDggNS43NzYxNCA4IDUuNVYyLjc2MzQ0QzEwLjE2NjggMy4wNDIyMiAxMS44Njg5IDQuODA1MTcgMTIuMDU0IDdIOS41QzkuMjIzODYgNyA5IDcuMjIzODYgOSA3LjVDOSA3Ljc3NjE0IDkuMjIzODYgOCA5LjUgOEgxMi4wMzIyQzExLjc2MjEgMTAuMDk5MSAxMC4wOTkxIDExLjc2MjEgOCAxMi4wMzIyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNjA5MTMgMC4wNjM0Mjg3QzQuMzkwODIgMC4wMDg4NTA1IDQuMTY1NzUgMC4xMjM5MyA0LjA4MjE4IDAuMzMyODY3TDMuMTUzOCAyLjY1MzhMMC44MzI4NjYgMy41ODIxOEMwLjcwMjg4NCAzLjYzNDE3IDAuNjA0NTA0IDMuNzQzNyAwLjU2NjcwNSAzLjg3ODQ5QzAuNTI4OTA2IDQuMDEzMjkgMC41NTU5OTQgNC4xNTggMC42Mzk5OTIgNC4yNjk5OUwyLjAxMTQ4IDYuMDk4NjRMMS4wNjM0MyA5Ljg5MDg1QzEuMDA5NDQgMTAuMTA2OCAxLjEyMTQ1IDEwLjMyOTggMS4zMjY5MSAxMC40MTU0TDQuMjAxMTUgMTEuNjEzTDUuNjI1NTcgMTMuNzQ5NkM1LjczNDEyIDEzLjkxMjQgNS45MzU0NSAxMy45ODY0IDYuMTIzNjIgMTMuOTMyN0w5LjYyMzYyIDEyLjkzMjdDOS42Mjk4OCAxMi45MzA5IDkuNjM2MTEgMTIuOTI5IDkuNjQyMjkgMTIuOTI2OUwxMi42NDIzIDExLjkyNjlDMTIuNzkyMyAxMS44NzY5IDEyLjkwNSAxMS43NTE5IDEyLjkzOTMgMTEuNTk3NkwxMy45MzkzIDcuMDk3NjFDMTMuOTc3NiA2LjkyNTA2IDEzLjkxMTQgNi43NDYwNSAxMy43NyA2LjYzOTk5TDExLjk1IDUuMjc0OTlWMi45OTk5OUMxMS45NSAyLjgyOTU1IDExLjg1MzcgMi42NzM3MyAxMS43MDEyIDIuNTk3NUw4LjcwMTI0IDEuMDk3NUM4LjY3MTg3IDEuMDgyODIgOC42NDA5OCAxLjA3MTM5IDguNjA5MTMgMS4wNjM0M0w0LjYwOTEzIDAuMDYzNDI4N1pNMTEuNDMyMyA2LjAxMTczTDEyLjc3NDggNy4wMTg1OEwxMC4yMTE5IDkuMTU0MjlDMTAuMTQ3NiA5LjIwNzg2IDEwLjA5OTUgOS4yNzgzIDEwLjA3MzEgOS4zNTc2OUw5LjI1MzgyIDExLjgxNTVMNy43Mzg0OSAxMC44Njg0QzcuNTI3NzQgMTAuNzM2NyA3LjI1MDExIDEwLjgwMDcgNy4xMTgzOSAxMS4wMTE1QzYuOTg2NjcgMTEuMjIyMiA3LjA1MDc0IDExLjQ5OTkgNy4yNjE0OSAxMS42MzE2TDguNDAzNDEgMTIuMzQ1M0w2LjE5MjIxIDEyLjk3NzFMNC44NzQ0MSAxMS4wMDA0QzQuODI1MTMgMTAuOTI2NSA0Ljc1NTA4IDEwLjg2ODggNC42NzMwNyAxMC44MzQ2TDIuMDMwNDYgOS43MzM1MkwyLjg1MTM0IDYuNDQ5OTlINC45OTk5OUM1LjI0ODUyIDYuNDQ5OTkgNS40NDk5OSA2LjI0ODUyIDUuNDQ5OTkgNS45OTk5OUM1LjQ0OTk5IDUuNzUxNDYgNS4yNDg1MiA1LjU0OTk5IDQuOTk5OTkgNS41NDk5OUgyLjcyNDk5TDEuNzEyMyA0LjE5OTc0TDMuNTE0MDcgMy40NzkwM0w2LjM1NzY5IDQuNDI2OUM2LjUzNjU1IDQuNDg2NTIgNi43MzM2MSA0LjQyODMyIDYuODUxMzggNC4yODExMUw4LjYyNDEzIDIuMDY1MThMMTEuMDUgMy4yNzgxMVY1LjE5NTMzTDguODMyODcgNi4wODIxOEM4LjcwOTk2IDYuMTMxMzQgOC42MTQ5NCA2LjIzMjEyIDguNTczMDggNi4zNTc2OUw4LjA3MzA4IDcuODU3NjlDNy45OTQ0OSA4LjA5MzQ2IDguMTIxOTEgOC4zNDgzMSA4LjM1NzY5IDguNDI2OUM4LjU5MzQ2IDguNTA1NDkgOC44NDgzMSA4LjM3ODA3IDguOTI2OSA4LjE0MjI5TDkuMzYwOSA2Ljg0MDI5TDExLjQzMjMgNi4wMTE3M1pNNy43MTA1MiAxLjc2NjQ4TDYuMzQ0NjIgMy40NzM4Nkw0LjA5NTA1IDIuNzI0TDQuNzcxOTIgMS4wMzE4M0w3LjcxMDUyIDEuNzY2NDhaTTEwLjIxMTUgMTEuNzg4NUwxMi4xMTYgMTEuMTUzN0wxMi43NzQ1IDguMTkwMzRMMTAuODg2NCA5Ljc2Mzc0TDEwLjIxMTUgMTEuNzg4NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEZlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjI4ODU2IDAuNzk2OTA4QzcuNDIyNTggMC43MzQzNjQgNy41Nzc0MiAwLjczNDM2NCA3LjcxMTQ0IDAuNzk2OTA4TDEzLjcxMTQgMy41OTY5MUMxMy44ODc1IDMuNjc5MDYgMTQgMy44NTU3NCAxNCA0LjA1VjEwLjk1QzE0IDExLjE0NDMgMTMuODg3NSAxMS4zMjA5IDEzLjcxMTQgMTEuNDAzMUw3LjcxMTQ0IDE0LjIwMzFDNy41Nzc0MiAxNC4yNjU2IDcuNDIyNTggMTQuMjY1NiA3LjI4ODU2IDE0LjIwMzFMMS4yODg1NiAxMS40MDMxQzEuMTEyNTIgMTEuMzIwOSAxIDExLjE0NDMgMSAxMC45NVY0LjA1QzEgMy44NTU3NCAxLjExMjUyIDMuNjc5MDYgMS4yODg1NiAzLjU5NjkxTDcuMjg4NTYgMC43OTY5MDhaTTIgNC44MDU3OEw3IDYuOTMwNzhWMTIuOTY0OUwyIDEwLjYzMTZWNC44MDU3OFpNOCAxMi45NjQ5TDEzIDEwLjYzMTZWNC44MDU3OEw4IDYuOTMwNzhWMTIuOTY0OVpNNy41IDYuMDU2NzJMMTIuMjcxOSA0LjAyODY2TDcuNSAxLjgwMTc2TDIuNzI4MDkgNC4wMjg2Nkw3LjUgNi4wNTY3MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjI5MjI3IDAuMDQ4OTg0QzMuNDcwMzMgLTAuMDMyMzM4IDMuNjc5NDYgLTAuMDAyMjgyMTQgMy44Mjc0IDAuMTI1ODkxTDEyLjg1ODcgNy45NTAyNkMxMy4wMTM0IDguMDg0MzIgMTMuMDcwOCA4LjI5OTE2IDEzLjAwMzUgOC40OTI1MUMxMi45MzYyIDguNjg1ODYgMTIuNzU3OCA4LjgxODY2IDEyLjU1MzMgOC44Mjc2OEw5LjIxODg3IDguOTc0NzRMMTEuMTUwNCAxMy4yMTg3QzExLjI2NDggMTMuNDcgMTEuMTUzOCAxMy43NjY0IDEwLjkwMjYgMTMuODgwOEw4Ljc1MDI0IDE0Ljg2MTNDOC40OTkgMTQuOTc1OCA4LjIwMjU1IDE0Ljg2NDkgOC4wODgwMiAxNC42MTM3TDYuMTUzMzkgMTAuMzcwM0wzLjg2Mjc5IDEyLjc4NTVDMy43MjE5NiAxMi45MzQgMy41MDQ4NyAxMi45ODE3IDMuMzE0NzkgMTIuOTA1OUMzLjEyNDcgMTIuODMwMSAzIDEyLjY0NjEgMyAxMi40NDE0VjAuNTAzNzkyQzMgMC4zMDgwNDggMy4xMTQyMiAwLjEzMDMwNiAzLjI5MjI3IDAuMDQ4OTg0Wk00IDEuNTk4NTJWMTEuMTg3N0w1LjkzNzk5IDkuMTQ0MjVDNi4wNTIzOCA5LjAyMzYzIDYuMjE5MjQgOC45Njc3NiA2LjM4MzE5IDguOTk1MTZDNi41NDcxNSA5LjAyMjU2IDYuNjg2NzcgOS4xMjk2NSA2Ljc1NTczIDkuMjgwOUw4Ljc5MDU2IDEzLjc0NDFMMTAuMDMzMiAxMy4xNzhMOC4wMDE5NSA4LjcxNDk3QzcuOTMzMTMgOC41NjM3NiA3Ljk0MzkxIDguMzg4MjQgOC4wMzA3MiA4LjI0NjU5QzguMTE3NTMgOC4xMDQ5NCA4LjI2OTAzIDguMDE1NjYgOC40MzUgOC4wMDgzNEwxMS4yNTQ5IDcuODgzOTdMNCAxLjU5ODUyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNSAxQzQuMjIzODYgMSA0IDEuMjIzODYgNCAxLjVDNCAxLjc3NjE0IDQuMjIzODYgMiA0LjUgMkM1LjQyMjE1IDIgNi4wMzk5IDIuMjMwNTQgNi40MjA3NSAyLjU2Mzc5QzYuNzkyODYgMi44ODkzOSA3IDMuMzY2MjYgNyA0VjdINS43NUM1LjQ3Mzg2IDcgNS4yNSA3LjIyMzg2IDUuMjUgNy41QzUuMjUgNy43NzYxNCA1LjQ3Mzg2IDggNS43NSA4SDdWMTFDNyAxMS42MzM3IDYuNzkyODYgMTIuMTEwNiA2LjQyMDc1IDEyLjQzNjJDNi4wMzk5IDEyLjc2OTUgNS40MjIxNSAxMyA0LjUgMTNDNC4yMjM4NiAxMyA0IDEzLjIyMzkgNCAxMy41QzQgMTMuNzc2MSA0LjIyMzg2IDE0IDQuNSAxNEM1LjU3Nzg1IDE0IDYuNDYwMSAxMy43MzA1IDcuMDc5MjUgMTMuMTg4OEM3LjI0MTY4IDEzLjA0NjcgNy4zODE2OSAxMi44ODk2IDcuNSAxMi43MTk4QzcuNjE4MzIgMTIuODg5NiA3Ljc1ODMyIDEzLjA0NjcgNy45MjA3NSAxMy4xODg4QzguNTM5OSAxMy43MzA1IDkuNDIyMTUgMTQgMTAuNSAxNEMxMC43NzYxIDE0IDExIDEzLjc3NjEgMTEgMTMuNUMxMSAxMy4yMjM5IDEwLjc3NjEgMTMgMTAuNSAxM0M5LjU3Nzg1IDEzIDguOTYwMSAxMi43Njk1IDguNTc5MjUgMTIuNDM2MkM4LjIwNzE0IDEyLjExMDYgOCAxMS42MzM3IDggMTFWOEg5LjI1QzkuNTI2MTQgOCA5Ljc1IDcuNzc2MTQgOS43NSA3LjVDOS43NSA3LjIyMzg2IDkuNTI2MTQgNyA5LjI1IDdIOFY0QzggMy4zNjYyNiA4LjIwNzE0IDIuODg5MzkgOC41NzkyNSAyLjU2Mzc5QzguOTYwMSAyLjIzMDU0IDkuNTc3ODUgMiAxMC41IDJDMTAuNzc2MSAyIDExIDEuNzc2MTQgMTEgMS41QzExIDEuMjIzODYgMTAuNzc2MSAxIDEwLjUgMUM5LjQyMjE1IDEgOC41Mzk5IDEuMjY5NDYgNy45MjA3NSAxLjgxMTIxQzcuNzU4MzIgMS45NTMzMyA3LjYxODMyIDIuMTEwNDMgNy41IDIuMjgwMjNDNy4zODE2OCAyLjExMDQzIDcuMjQxNjggMS45NTMzMyA3LjA3OTI1IDEuODExMjFDNi40NjAxIDEuMjY5NDYgNS41Nzc4NSAxIDQuNSAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0semU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgNy41QzUgNy4yMjM4NiA1LjIyMzg2IDcgNS41IDdIOS41QzkuNzc2MTQgNyAxMCA3LjIyMzg2IDEwIDcuNUMxMCA3Ljc3NjE0IDkuNzc2MTQgOCA5LjUgOEg1LjVDNS4yMjM4NiA4IDUgNy43NzYxNCA1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjggMUwyLjc0OTY3IDAuOTk5OTdDMi41MjEyMiAwLjk5OTc1MiAyLjMyNDI5IDAuOTk5NTY0IDIuMTQ5ODMgMS4wNDE0NUMxLjYwMTM2IDEuMTczMTIgMS4xNzMxMiAxLjYwMTM2IDEuMDQxNDUgMi4xNDk4M0MwLjk5OTU2NCAyLjMyNDI5IDAuOTk5NzUyIDIuNTIxMjIgMC45OTk5NyAyLjc0OTY3TDEgMi44VjUuMkwwLjk5OTk3IDUuMjUwMzNDMC45OTk3NTIgNS40Nzg3OCAwLjk5OTU2NCA1LjY3NTcyIDEuMDQxNDUgNS44NTAxN0MxLjE3MzEyIDYuMzk4NjQgMS42MDEzNiA2LjgyNjg4IDIuMTQ5ODMgNi45NTg1NkMyLjMyNDI5IDcuMDAwNDQgMi41MjEyMiA3LjAwMDI1IDIuNzQ5NjcgNy4wMDAwM0wyLjggN0g1LjJMNS4yNTAzMyA3LjAwMDAzQzUuNDc4NzggNy4wMDAyNSA1LjY3NTcyIDcuMDAwNDQgNS44NTAxNyA2Ljk1ODU2QzYuMzk4NjQgNi44MjY4OCA2LjgyNjg4IDYuMzk4NjQgNi45NTg1NiA1Ljg1MDE3QzcuMDAwNDQgNS42NzU3MiA3LjAwMDI1IDUuNDc4NzggNy4wMDAwMyA1LjI1MDMzTDcgNS4yVjIuOEw3LjAwMDAzIDIuNzQ5NjdDNy4wMDAyNSAyLjUyMTIyIDcuMDAwNDQgMi4zMjQyOSA2Ljk1ODU2IDIuMTQ5ODNDNi44MjY4OCAxLjYwMTM2IDYuMzk4NjQgMS4xNzMxMiA1Ljg1MDE3IDEuMDQxNDVDNS42NzU3MiAwLjk5OTU2NCA1LjQ3ODc4IDAuOTk5NzUyIDUuMjUwMzMgMC45OTk5N0w1LjIgMUgyLjhaTTIuMzgzMjggMi4wMTM4MkMyLjQyNjMyIDIuMDAzNDggMi40OTIyMiAyIDIuOCAySDUuMkM1LjUwNzc5IDIgNS41NzM2OSAyLjAwMzQ4IDUuNjE2NzIgMi4wMTM4MkM1Ljc5OTU1IDIuMDU3NzEgNS45NDIyOSAyLjIwMDQ1IDUuOTg2MTkgMi4zODMyOEM1Ljk5NjUyIDIuNDI2MzIgNiAyLjQ5MjIyIDYgMi44VjUuMkM2IDUuNTA3NzkgNS45OTY1MiA1LjU3MzY5IDUuOTg2MTkgNS42MTY3MkM1Ljk0MjI5IDUuNzk5NTUgNS43OTk1NSA1Ljk0MjI5IDUuNjE2NzIgNS45ODYxOUM1LjU3MzY5IDUuOTk2NTIgNS41MDc3OSA2IDUuMiA2SDIuOEMyLjQ5MjIyIDYgMi40MjYzMiA1Ljk5NjUyIDIuMzgzMjggNS45ODYxOUMyLjIwMDQ1IDUuOTQyMjkgMi4wNTc3MSA1Ljc5OTU1IDIuMDEzODIgNS42MTY3MkMyLjAwMzQ4IDUuNTczNjkgMiA1LjUwNzc5IDIgNS4yVjIuOEMyIDIuNDkyMjIgMi4wMDM0OCAyLjQyNjMyIDIuMDEzODIgMi4zODMyOEMyLjA1NzcxIDIuMjAwNDUgMi4yMDA0NSAyLjA1NzcxIDIuMzgzMjggMi4wMTM4MlpNOS44IDFMOS43NDk2NyAwLjk5OTk3QzkuNTIxMjIgMC45OTk3NTIgOS4zMjQyOSAwLjk5OTU2NCA5LjE0OTgzIDEuMDQxNDVDOC42MDEzNiAxLjE3MzEyIDguMTczMTIgMS42MDEzNiA4LjA0MTQ1IDIuMTQ5ODNDNy45OTk1NiAyLjMyNDI5IDcuOTk5NzUgMi41MjEyMiA3Ljk5OTk3IDIuNzQ5NjdMOCAyLjhWNS4yTDcuOTk5OTcgNS4yNTAzM0M3Ljk5OTc1IDUuNDc4NzggNy45OTk1NiA1LjY3NTcyIDguMDQxNDUgNS44NTAxN0M4LjE3MzEyIDYuMzk4NjQgOC42MDEzNiA2LjgyNjg4IDkuMTQ5ODMgNi45NTg1NkM5LjMyNDI5IDcuMDAwNDQgOS41MjEyMiA3LjAwMDI1IDkuNzQ5NjcgNy4wMDAwM0w5LjggN0gxMi4yTDEyLjI1MDMgNy4wMDAwM0MxMi40Nzg4IDcuMDAwMjUgMTIuNjc1NyA3LjAwMDQ0IDEyLjg1MDIgNi45NTg1NkMxMy4zOTg2IDYuODI2ODggMTMuODI2OSA2LjM5ODY0IDEzLjk1ODYgNS44NTAxN0MxNC4wMDA0IDUuNjc1NzIgMTQuMDAwMyA1LjQ3ODc4IDE0IDUuMjUwMzNMMTQgNS4yVjIuOEwxNCAyLjc0OTY3QzE0LjAwMDMgMi41MjEyMiAxNC4wMDA0IDIuMzI0MjkgMTMuOTU4NiAyLjE0OTgzQzEzLjgyNjkgMS42MDEzNiAxMy4zOTg2IDEuMTczMTIgMTIuODUwMiAxLjA0MTQ1QzEyLjY3NTcgMC45OTk1NjQgMTIuNDc4OCAwLjk5OTc1MiAxMi4yNTAzIDAuOTk5OTdMMTIuMiAxSDkuOFpNOS4zODMyOCAyLjAxMzgyQzkuNDI2MzIgMi4wMDM0OCA5LjQ5MjIyIDIgOS44IDJIMTIuMkMxMi41MDc4IDIgMTIuNTczNyAyLjAwMzQ4IDEyLjYxNjcgMi4wMTM4MkMxMi43OTk1IDIuMDU3NzEgMTIuOTQyMyAyLjIwMDQ1IDEyLjk4NjIgMi4zODMyOEMxMi45OTY1IDIuNDI2MzIgMTMgMi40OTIyMiAxMyAyLjhWNS4yQzEzIDUuNTA3NzkgMTIuOTk2NSA1LjU3MzY5IDEyLjk4NjIgNS42MTY3MkMxMi45NDIzIDUuNzk5NTUgMTIuNzk5NSA1Ljk0MjI5IDEyLjYxNjcgNS45ODYxOUMxMi41NzM3IDUuOTk2NTIgMTIuNTA3OCA2IDEyLjIgNkg5LjhDOS40OTIyMiA2IDkuNDI2MzIgNS45OTY1MiA5LjM4MzI4IDUuOTg2MTlDOS4yMDA0NSA1Ljk0MjI5IDkuMDU3NzEgNS43OTk1NSA5LjAxMzgyIDUuNjE2NzJDOS4wMDM0OCA1LjU3MzY5IDkgNS41MDc3OSA5IDUuMlYyLjhDOSAyLjQ5MjIyIDkuMDAzNDggMi40MjYzMiA5LjAxMzgyIDIuMzgzMjhDOS4wNTc3MSAyLjIwMDQ1IDkuMjAwNDUgMi4wNTc3MSA5LjM4MzI4IDIuMDEzODJaTTIuNzQ5NjcgNy45OTk5N0wyLjggOEg1LjJMNS4yNTAzMyA3Ljk5OTk3QzUuNDc4NzggNy45OTk3NSA1LjY3NTcyIDcuOTk5NTYgNS44NTAxNyA4LjA0MTQ1QzYuMzk4NjQgOC4xNzMxMiA2LjgyNjg4IDguNjAxMzYgNi45NTg1NiA5LjE0OTgzQzcuMDAwNDQgOS4zMjQyOSA3LjAwMDI1IDkuNTIxMjIgNy4wMDAwMyA5Ljc0OTY3TDcgOS44VjEyLjJMNy4wMDAwMyAxMi4yNTAzQzcuMDAwMjUgMTIuNDc4OCA3LjAwMDQ0IDEyLjY3NTcgNi45NTg1NiAxMi44NTAyQzYuODI2ODggMTMuMzk4NiA2LjM5ODY0IDEzLjgyNjkgNS44NTAxNyAxMy45NTg2QzUuNjc1NzIgMTQuMDAwNCA1LjQ3ODc4IDE0LjAwMDMgNS4yNTAzMyAxNEw1LjIgMTRIMi44TDIuNzQ5NjcgMTRDMi41MjEyMiAxNC4wMDAzIDIuMzI0MjkgMTQuMDAwNCAyLjE0OTgzIDEzLjk1ODZDMS42MDEzNiAxMy44MjY5IDEuMTczMTIgMTMuMzk4NiAxLjA0MTQ1IDEyLjg1MDJDMC45OTk1NjQgMTIuNjc1NyAwLjk5OTc1MiAxMi40Nzg4IDAuOTk5OTcgMTIuMjUwM0wxIDEyLjJWOS44TDAuOTk5OTcgOS43NDk2N0MwLjk5OTc1MiA5LjUyMTIyIDAuOTk5NTY0IDkuMzI0MjkgMS4wNDE0NSA5LjE0OTgzQzEuMTczMTIgOC42MDEzNiAxLjYwMTM2IDguMTczMTIgMi4xNDk4MyA4LjA0MTQ1QzIuMzI0MjkgNy45OTk1NiAyLjUyMTIyIDcuOTk5NzUgMi43NDk2NyA3Ljk5OTk3Wk0yLjggOUMyLjQ5MjIyIDkgMi40MjYzMiA5LjAwMzQ4IDIuMzgzMjggOS4wMTM4MkMyLjIwMDQ1IDkuMDU3NzEgMi4wNTc3MSA5LjIwMDQ1IDIuMDEzODIgOS4zODMyOEMyLjAwMzQ4IDkuNDI2MzIgMiA5LjQ5MjIyIDIgOS44VjEyLjJDMiAxMi41MDc4IDIuMDAzNDggMTIuNTczNyAyLjAxMzgyIDEyLjYxNjdDMi4wNTc3MSAxMi43OTk1IDIuMjAwNDUgMTIuOTQyMyAyLjM4MzI4IDEyLjk4NjJDMi40MjYzMiAxMi45OTY1IDIuNDkyMjIgMTMgMi44IDEzSDUuMkM1LjUwNzc5IDEzIDUuNTczNjkgMTIuOTk2NSA1LjYxNjcyIDEyLjk4NjJDNS43OTk1NSAxMi45NDIzIDUuOTQyMjkgMTIuNzk5NSA1Ljk4NjE5IDEyLjYxNjdDNS45OTY1MiAxMi41NzM3IDYgMTIuNTA3OCA2IDEyLjJWOS44QzYgOS40OTIyMiA1Ljk5NjUyIDkuNDI2MzIgNS45ODYxOSA5LjM4MzI4QzUuOTQyMjkgOS4yMDA0NSA1Ljc5OTU1IDkuMDU3NzEgNS42MTY3MiA5LjAxMzgyQzUuNTczNjkgOS4wMDM0OCA1LjUwNzc5IDkgNS4yIDlIMi44Wk05LjggOEw5Ljc0OTY3IDcuOTk5OTdDOS41MjEyMiA3Ljk5OTc1IDkuMzI0MjkgNy45OTk1NiA5LjE0OTgzIDguMDQxNDVDOC42MDEzNiA4LjE3MzEyIDguMTczMTIgOC42MDEzNiA4LjA0MTQ1IDkuMTQ5ODNDNy45OTk1NiA5LjMyNDI5IDcuOTk5NzUgOS41MjEyMiA3Ljk5OTk3IDkuNzQ5NjdMOCA5LjhWMTIuMkw3Ljk5OTk3IDEyLjI1MDNDNy45OTk3NSAxMi40Nzg4IDcuOTk5NTYgMTIuNjc1NyA4LjA0MTQ1IDEyLjg1MDJDOC4xNzMxMiAxMy4zOTg2IDguNjAxMzYgMTMuODI2OSA5LjE0OTgzIDEzLjk1ODZDOS4zMjQyOSAxNC4wMDA0IDkuNTIxMjIgMTQuMDAwMyA5Ljc0OTY3IDE0TDkuOCAxNEgxMi4yTDEyLjI1MDMgMTRDMTIuNDc4OCAxNC4wMDAzIDEyLjY3NTcgMTQuMDAwNCAxMi44NTAyIDEzLjk1ODZDMTMuMzk4NiAxMy44MjY5IDEzLjgyNjkgMTMuMzk4NiAxMy45NTg2IDEyLjg1MDJDMTQuMDAwNCAxMi42NzU3IDE0LjAwMDMgMTIuNDc4OCAxNCAxMi4yNTAzTDE0IDEyLjJWOS44TDE0IDkuNzQ5NjdDMTQuMDAwMyA5LjUyMTIyIDE0LjAwMDQgOS4zMjQyOSAxMy45NTg2IDkuMTQ5ODNDMTMuODI2OSA4LjYwMTM2IDEzLjM5ODYgOC4xNzMxMiAxMi44NTAyIDguMDQxNDVDMTIuNjc1NyA3Ljk5OTU2IDEyLjQ3ODggNy45OTk3NSAxMi4yNTAzIDcuOTk5OTdMMTIuMiA4SDkuOFpNOS4zODMyOCA5LjAxMzgyQzkuNDI2MzIgOS4wMDM0OCA5LjQ5MjIyIDkgOS44IDlIMTIuMkMxMi41MDc4IDkgMTIuNTczNyA5LjAwMzQ4IDEyLjYxNjcgOS4wMTM4MkMxMi43OTk1IDkuMDU3NzEgMTIuOTQyMyA5LjIwMDQ1IDEyLjk4NjIgOS4zODMyOEMxMi45OTY1IDkuNDI2MzIgMTMgOS40OTIyMiAxMyA5LjhWMTIuMkMxMyAxMi41MDc4IDEyLjk5NjUgMTIuNTczNyAxMi45ODYyIDEyLjYxNjdDMTIuOTQyMyAxMi43OTk1IDEyLjc5OTUgMTIuOTQyMyAxMi42MTY3IDEyLjk4NjJDMTIuNTczNyAxMi45OTY1IDEyLjUwNzggMTMgMTIuMiAxM0g5LjhDOS40OTIyMiAxMyA5LjQyNjMyIDEyLjk5NjUgOS4zODMyOCAxMi45ODYyQzkuMjAwNDUgMTIuOTQyMyA5LjA1NzcxIDEyLjc5OTUgOS4wMTM4MiAxMi42MTY3QzkuMDAzNDggMTIuNTczNyA5IDEyLjUwNzggOSAxMi4yVjkuOEM5IDkuNDkyMjIgOS4wMDM0OCA5LjQyNjMyIDkuMDEzODIgOS4zODMyOEM5LjA1NzcxIDkuMjAwNDUgOS4yMDA0NSA5LjA1NzcxIDkuMzgzMjggOS4wMTM4MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEtlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjAwMDE0IDIuNzM4OTVDMy4wMDAxNCAyLjk0Njk4IDIuNzYwODcgMy4wNjQwMSAyLjU5NjY2IDIuOTM2MjhMMS4wMDM4NiAxLjY5NzQ0QzAuODc1MTc3IDEuNTk3MzUgMC44NzUxNzcgMS40MDI4NiAxLjAwMzg2IDEuMzAyNzdMMi41OTY2NiAwLjA2MzkyOEMyLjc2MDg3IC0wLjA2Mzc5NDQgMy4wMDAxNCAwLjA1MzIyOTMgMy4wMDAxNCAwLjI2MTI2NlYxLjAwMDEySDkuMDAwMDlWMC4yNjEyOTZDOS4wMDAwOSAwLjA1MzI1OTEgOS4yMzkzNiAtMC4wNjM3NjQ2IDkuNDAzNTggMC4wNjM5NTc4TDEwLjk5NjQgMS4zMDI4QzExLjEyNTEgMS40MDI4OSAxMS4xMjUxIDEuNTk3MzggMTAuOTk2NCAxLjY5NzQ3TDkuNDAzNTggMi45MzYzMUM5LjIzOTM2IDMuMDY0MDQgOS4wMDAwOSAyLjk0NzAxIDkuMDAwMDkgMi43Mzg5OFYyLjAwMDEySDMuMDAwMTRWMi43Mzg5NVpNOS41MDAwMiA0Ljk5OTk4SDIuNTAwMDJDMi4yMjM4OCA0Ljk5OTk4IDIuMDAwMDIgNS4yMjM4NCAyLjAwMDAyIDUuNDk5OThWMTIuNUMyLjAwMDAyIDEyLjc3NjEgMi4yMjM4OCAxMyAyLjUwMDAyIDEzSDkuNTAwMDJDOS43NzYxNiAxMyAxMCAxMi43NzYxIDEwIDEyLjVWNS40OTk5OEMxMCA1LjIyMzg0IDkuNzc2MTYgNC45OTk5OCA5LjUwMDAyIDQuOTk5OThaTTIuNTAwMDIgMy45OTk5OEMxLjY3MTU5IDMuOTk5OTggMS4wMDAwMiA0LjY3MTU2IDEuMDAwMDIgNS40OTk5OFYxMi41QzEuMDAwMDIgMTMuMzI4NCAxLjY3MTU5IDE0IDIuNTAwMDIgMTRIOS41MDAwMkMxMC4zMjg0IDE0IDExIDEzLjMyODQgMTEgMTIuNVY1LjQ5OTk4QzExIDQuNjcxNTYgMTAuMzI4NCAzLjk5OTk4IDkuNTAwMDIgMy45OTk5OEgyLjUwMDAyWk0xNC43Mzg5IDYuMDAwMDFIMTRWMTJIMTQuNzM4OUMxNC45NDY5IDEyIDE1LjA2NCAxMi4yMzkzIDE0LjkzNjIgMTIuNDAzNUwxMy42OTc0IDEzLjk5NjNDMTMuNTk3MyAxNC4xMjUgMTMuNDAyOCAxNC4xMjUgMTMuMzAyNyAxMy45OTYzTDEyLjA2MzkgMTIuNDAzNUMxMS45MzYyIDEyLjIzOTMgMTIuMDUzMiAxMiAxMi4yNjEyIDEySDEzVjYuMDAwMDFIMTIuMjYxMkMxMi4wNTMyIDYuMDAwMDEgMTEuOTM2MSA1Ljc2MDc0IDEyLjA2MzkgNS41OTY1M0wxMy4zMDI3IDQuMDAzNzNDMTMuNDAyOCAzLjg3NTA1IDEzLjU5NzMgMy44NzUwNSAxMy42OTc0IDQuMDAzNzRMMTQuOTM2MiA1LjU5NjUzQzE1LjA2MzkgNS43NjA3NCAxNC45NDY5IDYuMDAwMDEgMTQuNzM4OSA2LjAwMDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzcwNzVDMy44NDIyMiAwLjg3NzA3NSAwLjg3NzA3NSAzLjg0MjIyIDAuODc3MDc1IDcuNDk5OTFDMC44NzcwNzUgMTEuMTU3NiAzLjg0MjIyIDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzExLjE1NzYgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzYgMTQuMTIyNyA3LjQ5OTkxQzE0LjEyMjcgMy44NDIyMiAxMS4xNTc2IDAuODc3MDc1IDcuNDk5OTEgMC44NzcwNzVaTTEuODI3MDggNy40OTk5MUMxLjgyNzA4IDQuMzY2ODkgNC4zNjY4OSAxLjgyNzA3IDcuNDk5OTEgMS44MjcwN0MxMC42MzI5IDEuODI3MDcgMTMuMTcyNyA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MUMxMy4xNzI3IDEwLjYzMjkgMTAuNjMyOSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0M0LjM2Njg5IDEzLjE3MjcgMS44MjcwOCAxMC42MzI5IDEuODI3MDggNy40OTk5MVpNOC4zNzI4NyA3LjUwMDA2QzguMzcyODcgNy45ODE5NiA3Ljk4MjIxIDguMzcyNjMgNy41MDAzIDguMzcyNjNDNy4wMTgzOSA4LjM3MjYzIDYuNjI3NzMgNy45ODE5NiA2LjYyNzczIDcuNTAwMDZDNi42Mjc3MyA3LjAxODE1IDcuMDE4MzkgNi42Mjc0OCA3LjUwMDMgNi42Mjc0OEM3Ljk4MjIxIDYuNjI3NDggOC4zNzI4NyA3LjAxODE1IDguMzcyODcgNy41MDAwNlpNOS4zMjI4NyA3LjUwMDA2QzkuMzIyODcgOC41MDY2NCA4LjUwNjg4IDkuMzIyNjMgNy41MDAzIDkuMzIyNjNDNi40OTM3MiA5LjMyMjYzIDUuNjc3NzMgOC41MDY2NCA1LjY3NzczIDcuNTAwMDZDNS42Nzc3MyA2LjQ5MzQ4IDYuNDkzNzIgNS42Nzc0OCA3LjUwMDMgNS42Nzc0OEM4LjUwNjg4IDUuNjc3NDggOS4zMjI4NyA2LjQ5MzQ4IDkuMzIyODcgNy41MDAwNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFllPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDcuNUMyIDcuMjIzODYgMi4yMjM4NiA3IDIuNSA3SDEyLjVDMTIuNzc2MSA3IDEzIDcuMjIzODYgMTMgNy41QzEzIDcuNzc2MTQgMTIuNzc2MSA4IDEyLjUgOEgyLjVDMi4yMjM4NiA4IDIgNy43NzYxNCAyIDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEplPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMkM3Ljc3NjE0IDIgOCAyLjIyMzg2IDggMi41TDggMTIuNUM4IDEyLjc3NjEgNy43NzYxNCAxMyA3LjUgMTNDNy4yMjM4NiAxMyA3IDEyLjc3NjEgNyAxMi41TDcgMi41QzcgMi4yMjM4NiA3LjIyMzg2IDIgNy41IDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxYZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDkuMTI1QzguMzk3NDYgOS4xMjUgOS4xMjUgOC4zOTc0NiA5LjEyNSA3LjVDOS4xMjUgNi42MDI1NCA4LjM5NzQ2IDUuODc1IDcuNSA1Ljg3NUM2LjYwMjU0IDUuODc1IDUuODc1IDYuNjAyNTQgNS44NzUgNy41QzUuODc1IDguMzk3NDYgNi42MDI1NCA5LjEyNSA3LjUgOS4xMjVaTTcuNSAxMC4xMjVDOC45NDk3NSAxMC4xMjUgMTAuMTI1IDguOTQ5NzUgMTAuMTI1IDcuNUMxMC4xMjUgNi4wNTAyNSA4Ljk0OTc1IDQuODc1IDcuNSA0Ljg3NUM2LjA1MDI1IDQuODc1IDQuODc1IDYuMDUwMjUgNC44NzUgNy41QzQuODc1IDguOTQ5NzUgNi4wNTAyNSAxMC4xMjUgNy41IDEwLjEyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFFlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05Ljg3NSA3LjVDOS44NzUgOC44MTE2OCA4LjgxMTY4IDkuODc1IDcuNSA5Ljg3NUM2LjE4ODMyIDkuODc1IDUuMTI1IDguODExNjggNS4xMjUgNy41QzUuMTI1IDYuMTg4MzIgNi4xODgzMiA1LjEyNSA3LjUgNS4xMjVDOC44MTE2OCA1LjEyNSA5Ljg3NSA2LjE4ODMyIDkuODc1IDcuNVpcIixmaWxsOm59KSl9LGV0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjYyNSA3LjVDMy42MjUgOC4xMjEzMiAzLjEyMTMyIDguNjI1IDIuNSA4LjYyNUMxLjg3ODY4IDguNjI1IDEuMzc1IDguMTIxMzIgMS4zNzUgNy41QzEuMzc1IDYuODc4NjggMS44Nzg2OCA2LjM3NSAyLjUgNi4zNzVDMy4xMjEzMiA2LjM3NSAzLjYyNSA2Ljg3ODY4IDMuNjI1IDcuNVpNOC42MjUgNy41QzguNjI1IDguMTIxMzIgOC4xMjEzMiA4LjYyNSA3LjUgOC42MjVDNi44Nzg2OCA4LjYyNSA2LjM3NSA4LjEyMTMyIDYuMzc1IDcuNUM2LjM3NSA2Ljg3ODY4IDYuODc4NjggNi4zNzUgNy41IDYuMzc1QzguMTIxMzIgNi4zNzUgOC42MjUgNi44Nzg2OCA4LjYyNSA3LjVaTTEyLjUgOC42MjVDMTMuMTIxMyA4LjYyNSAxMy42MjUgOC4xMjEzMiAxMy42MjUgNy41QzEzLjYyNSA2Ljg3ODY4IDEzLjEyMTMgNi4zNzUgMTIuNSA2LjM3NUMxMS44Nzg3IDYuMzc1IDExLjM3NSA2Ljg3ODY4IDExLjM3NSA3LjVDMTEuMzc1IDguMTIxMzIgMTEuODc4NyA4LjYyNSAxMi41IDguNjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguNjI1IDIuNUM4LjYyNSAzLjEyMTMyIDguMTIxMzIgMy42MjUgNy41IDMuNjI1QzYuODc4NjggMy42MjUgNi4zNzUgMy4xMjEzMiA2LjM3NSAyLjVDNi4zNzUgMS44Nzg2OCA2Ljg3ODY4IDEuMzc1IDcuNSAxLjM3NUM4LjEyMTMyIDEuMzc1IDguNjI1IDEuODc4NjggOC42MjUgMi41Wk04LjYyNSA3LjVDOC42MjUgOC4xMjEzMiA4LjEyMTMyIDguNjI1IDcuNSA4LjYyNUM2Ljg3ODY4IDguNjI1IDYuMzc1IDguMTIxMzIgNi4zNzUgNy41QzYuMzc1IDYuODc4NjggNi44Nzg2OCA2LjM3NSA3LjUgNi4zNzVDOC4xMjEzMiA2LjM3NSA4LjYyNSA2Ljg3ODY4IDguNjI1IDcuNVpNNy41IDEzLjYyNUM4LjEyMTMyIDEzLjYyNSA4LjYyNSAxMy4xMjEzIDguNjI1IDEyLjVDOC42MjUgMTEuODc4NyA4LjEyMTMyIDExLjM3NSA3LjUgMTEuMzc1QzYuODc4NjggMTEuMzc1IDYuMzc1IDExLjg3ODcgNi4zNzUgMTIuNUM2LjM3NSAxMy4xMjEzIDYuODc4NjggMTMuNjI1IDcuNSAxMy42MjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxudD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy44NTM1NSAyLjE0NjQ1QzMuNjU4MjkgMS45NTExOCAzLjM0MTcxIDEuOTUxMTggMy4xNDY0NSAyLjE0NjQ1QzIuOTUxMTggMi4zNDE3MSAyLjk1MTE4IDIuNjU4MjkgMy4xNDY0NSAyLjg1MzU1TDcuMTQ2NDUgNi44NTM1NUM3LjM0MTcxIDcuMDQ4ODIgNy42NTgyOSA3LjA0ODgyIDcuODUzNTUgNi44NTM1NUwxMS44NTM2IDIuODUzNTVDMTIuMDQ4OCAyLjY1ODI5IDEyLjA0ODggMi4zNDE3MSAxMS44NTM2IDIuMTQ2NDVDMTEuNjU4MyAxLjk1MTE4IDExLjM0MTcgMS45NTExOCAxMS4xNDY0IDIuMTQ2NDVMNy41IDUuNzkyODlMMy44NTM1NSAyLjE0NjQ1Wk0zLjg1MzU1IDguMTQ2NDVDMy42NTgyOSA3Ljk1MTE4IDMuMzQxNzEgNy45NTExOCAzLjE0NjQ1IDguMTQ2NDVDMi45NTExOCA4LjM0MTcxIDIuOTUxMTggOC42NTgyOSAzLjE0NjQ1IDguODUzNTVMNy4xNDY0NSAxMi44NTM2QzcuMzQxNzEgMTMuMDQ4OCA3LjY1ODI5IDEzLjA0ODggNy44NTM1NSAxMi44NTM2TDExLjg1MzYgOC44NTM1NUMxMi4wNDg4IDguNjU4MjkgMTIuMDQ4OCA4LjM0MTcxIDExLjg1MzYgOC4xNDY0NUMxMS42NTgzIDcuOTUxMTggMTEuMzQxNyA3Ljk1MTE4IDExLjE0NjQgOC4xNDY0NUw3LjUgMTEuNzkyOUwzLjg1MzU1IDguMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxydD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi44NTM1NSAzLjg1MzU1QzcuMDQ4ODIgMy42NTgyOSA3LjA0ODgyIDMuMzQxNzEgNi44NTM1NSAzLjE0NjQ1QzYuNjU4MjkgMi45NTExOCA2LjM0MTcxIDIuOTUxMTggNi4xNDY0NSAzLjE0NjQ1TDIuMTQ2NDUgNy4xNDY0NUMxLjk1MTE4IDcuMzQxNzEgMS45NTExOCA3LjY1ODI5IDIuMTQ2NDUgNy44NTM1NUw2LjE0NjQ1IDExLjg1MzZDNi4zNDE3MSAxMi4wNDg4IDYuNjU4MjkgMTIuMDQ4OCA2Ljg1MzU1IDExLjg1MzZDNy4wNDg4MiAxMS42NTgzIDcuMDQ4ODIgMTEuMzQxNyA2Ljg1MzU1IDExLjE0NjRMMy4yMDcxMSA3LjVMNi44NTM1NSAzLjg1MzU1Wk0xMi44NTM2IDMuODUzNTVDMTMuMDQ4OCAzLjY1ODI5IDEzLjA0ODggMy4zNDE3MSAxMi44NTM2IDMuMTQ2NDVDMTIuNjU4MyAyLjk1MTE4IDEyLjM0MTcgMi45NTExOCAxMi4xNDY0IDMuMTQ2NDVMOC4xNDY0NSA3LjE0NjQ1QzcuOTUxMTggNy4zNDE3MSA3Ljk1MTE4IDcuNjU4MjkgOC4xNDY0NSA3Ljg1MzU1TDEyLjE0NjQgMTEuODUzNkMxMi4zNDE3IDEyLjA0ODggMTIuNjU4MyAxMi4wNDg4IDEyLjg1MzYgMTEuODUzNkMxMy4wNDg4IDExLjY1ODMgMTMuMDQ4OCAxMS4zNDE3IDEyLjg1MzYgMTEuMTQ2NEw5LjIwNzExIDcuNUwxMi44NTM2IDMuODUzNTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxvdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi4xNDY0NSAxMS4xNDY0QzEuOTUxMTggMTEuMzQxNyAxLjk1MTE4IDExLjY1ODMgMi4xNDY0NSAxMS44NTM2QzIuMzQxNzEgMTIuMDQ4OCAyLjY1ODI5IDEyLjA0ODggMi44NTM1NSAxMS44NTM2TDYuODUzNTUgNy44NTM1NUM3LjA0ODgyIDcuNjU4MjkgNy4wNDg4MiA3LjM0MTcxIDYuODUzNTUgNy4xNDY0NUwyLjg1MzU1IDMuMTQ2NDVDMi42NTgyOSAyLjk1MTE4IDIuMzQxNzEgMi45NTExOCAyLjE0NjQ1IDMuMTQ2NDVDMS45NTExOCAzLjM0MTcxIDEuOTUxMTggMy42NTgyOSAyLjE0NjQ1IDMuODUzNTVMNS43OTI4OSA3LjVMMi4xNDY0NSAxMS4xNDY0Wk04LjE0NjQ1IDExLjE0NjRDNy45NTExOCAxMS4zNDE3IDcuOTUxMTggMTEuNjU4MyA4LjE0NjQ1IDExLjg1MzZDOC4zNDE3MSAxMi4wNDg4IDguNjU4MjkgMTIuMDQ4OCA4Ljg1MzU1IDExLjg1MzZMMTIuODUzNiA3Ljg1MzU1QzEzLjA0ODggNy42NTgyOSAxMy4wNDg4IDcuMzQxNzEgMTIuODUzNiA3LjE0NjQ1TDguODUzNTUgMy4xNDY0NUM4LjY1ODI5IDIuOTUxMTggOC4zNDE3MSAyLjk1MTE4IDguMTQ2NDUgMy4xNDY0NUM3Ljk1MTE4IDMuMzQxNzEgNy45NTExOCAzLjY1ODI5IDguMTQ2NDUgMy44NTM1NUwxMS43OTI5IDcuNUw4LjE0NjQ1IDExLjE0NjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuMTQ2NCA2Ljg1MzU1QzExLjM0MTcgNy4wNDg4MiAxMS42NTgzIDcuMDQ4ODIgMTEuODUzNiA2Ljg1MzU1QzEyLjA0ODggNi42NTgyOSAxMi4wNDg4IDYuMzQxNzEgMTEuODUzNiA2LjE0NjQ1TDcuODUzNTUgMi4xNDY0NUM3LjY1ODI5IDEuOTUxMTggNy4zNDE3MSAxLjk1MTE4IDcuMTQ2NDUgMi4xNDY0NUwzLjE0NjQ1IDYuMTQ2NDVDMi45NTExOCA2LjM0MTcxIDIuOTUxMTggNi42NTgyOSAzLjE0NjQ1IDYuODUzNTVDMy4zNDE3MSA3LjA0ODgyIDMuNjU4MjkgNy4wNDg4MiAzLjg1MzU1IDYuODUzNTVMNy41IDMuMjA3MTFMMTEuMTQ2NCA2Ljg1MzU1Wk0xMS4xNDY0IDEyLjg1MzZDMTEuMzQxNyAxMy4wNDg4IDExLjY1ODMgMTMuMDQ4OCAxMS44NTM2IDEyLjg1MzZDMTIuMDQ4OCAxMi42NTgzIDEyLjA0ODggMTIuMzQxNyAxMS44NTM2IDEyLjE0NjRMNy44NTM1NSA4LjE0NjQ1QzcuNjU4MjkgNy45NTExOCA3LjM0MTcxIDcuOTUxMTggNy4xNDY0NSA4LjE0NjQ1TDMuMTQ2NDUgMTIuMTQ2NEMyLjk1MTE4IDEyLjM0MTcgMi45NTExOCAxMi42NTgzIDMuMTQ2NDUgMTIuODUzNkMzLjM0MTcxIDEzLjA0ODggMy42NTgyOSAxMy4wNDg4IDMuODUzNTUgMTIuODUzNkw3LjUgOS4yMDcxMUwxMS4xNDY0IDEyLjg1MzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxpdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41MDAwNSAxLjA0OTk5QzcuNzQ4NTggMS4wNDk5OSA3Ljk1MDA1IDEuMjUxNDYgNy45NTAwNSAxLjQ5OTk5VjguNDEzNTlMMTAuMTgxOSA2LjE4MTc5QzEwLjM1NzYgNi4wMDYwNSAxMC42NDI1IDYuMDA2MDUgMTAuODE4MiA2LjE4MTc5QzEwLjk5NCA2LjM1NzUzIDEwLjk5NCA2LjY0MjQ1IDEwLjgxODIgNi44MTgxOUw3LjgxODI1IDkuODE4MTlDNy42NDI1MSA5Ljk5MzkyIDcuMzU3NTkgOS45OTM5MiA3LjE4MTg1IDkuODE4MTlMNC4xODE4NSA2LjgxODE5QzQuMDA2MTEgNi42NDI0NSA0LjAwNjExIDYuMzU3NTMgNC4xODE4NSA2LjE4MTc5QzQuMzU3NTkgNi4wMDYwNSA0LjY0MjUxIDYuMDA2MDUgNC44MTgyNSA2LjE4MTc5TDcuMDUwMDUgOC40MTM1OVYxLjQ5OTk5QzcuMDUwMDUgMS4yNTE0NiA3LjI1MTUyIDEuMDQ5OTkgNy41MDAwNSAxLjA0OTk5Wk0yLjUgMTBDMi43NzYxNCAxMCAzIDEwLjIyMzkgMyAxMC41VjEyQzMgMTIuNTUzOSAzLjQ0NTY1IDEzIDMuOTk2MzUgMTNIMTEuMDAxMkMxMS41NTI5IDEzIDEyIDEyLjU1MjggMTIgMTJWMTAuNUMxMiAxMC4yMjM5IDEyLjIyMzkgMTAgMTIuNSAxMEMxMi43NzYxIDEwIDEzIDEwLjIyMzkgMTMgMTAuNVYxMkMxMyAxMy4xMDQxIDEyLjEwNjIgMTQgMTEuMDAxMiAxNEgzLjk5NjM1QzIuODkwMTkgMTQgMiAxMy4xMDMgMiAxMlYxMC41QzIgMTAuMjIzOSAyLjIyMzg2IDEwIDIuNSAxMFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiMi41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiNC41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiNi40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNC41XCIsY3k6XCI4LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI0LjVcIixjeTpcIjEwLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI0LjVcIixjeTpcIjEyLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjIuNVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjQuNVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjYuNDk5XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjYuNVwiLGN5OlwiOC40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNi41XCIsY3k6XCIxMC40OThcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNi41XCIsY3k6XCIxMi40OThcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiOC40OTlcIixjeTpcIjIuNVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiNC41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjguNDk5XCIsY3k6XCI2LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiOC40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiOC40OTlcIixjeTpcIjEwLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiMTIuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiMi41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiNC41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiNi40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiMTAuNDk5XCIsY3k6XCI4LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCIxMC40OTlcIixjeTpcIjEwLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCIxMC40OTlcIixjeTpcIjEyLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pKX0sc3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNSA0LjYyNUM2LjEyMTMyIDQuNjI1IDYuNjI1IDQuMTIxMzIgNi42MjUgMy41QzYuNjI1IDIuODc4NjggNi4xMjEzMiAyLjM3NSA1LjUgMi4zNzVDNC44Nzg2OCAyLjM3NSA0LjM3NSAyLjg3ODY4IDQuMzc1IDMuNUM0LjM3NSA0LjEyMTMyIDQuODc4NjggNC42MjUgNS41IDQuNjI1Wk05LjUgNC42MjVDMTAuMTIxMyA0LjYyNSAxMC42MjUgNC4xMjEzMiAxMC42MjUgMy41QzEwLjYyNSAyLjg3ODY4IDEwLjEyMTMgMi4zNzUgOS41IDIuMzc1QzguODc4NjggMi4zNzUgOC4zNzUgMi44Nzg2OCA4LjM3NSAzLjVDOC4zNzUgNC4xMjEzMiA4Ljg3ODY4IDQuNjI1IDkuNSA0LjYyNVpNMTAuNjI1IDcuNUMxMC42MjUgOC4xMjEzMiAxMC4xMjEzIDguNjI1IDkuNSA4LjYyNUM4Ljg3ODY4IDguNjI1IDguMzc1IDguMTIxMzIgOC4zNzUgNy41QzguMzc1IDYuODc4NjggOC44Nzg2OCA2LjM3NSA5LjUgNi4zNzVDMTAuMTIxMyA2LjM3NSAxMC42MjUgNi44Nzg2OCAxMC42MjUgNy41Wk01LjUgOC42MjVDNi4xMjEzMiA4LjYyNSA2LjYyNSA4LjEyMTMyIDYuNjI1IDcuNUM2LjYyNSA2Ljg3ODY4IDYuMTIxMzIgNi4zNzUgNS41IDYuMzc1QzQuODc4NjggNi4zNzUgNC4zNzUgNi44Nzg2OCA0LjM3NSA3LjVDNC4zNzUgOC4xMjEzMiA0Ljg3ODY4IDguNjI1IDUuNSA4LjYyNVpNMTAuNjI1IDExLjVDMTAuNjI1IDEyLjEyMTMgMTAuMTIxMyAxMi42MjUgOS41IDEyLjYyNUM4Ljg3ODY4IDEyLjYyNSA4LjM3NSAxMi4xMjEzIDguMzc1IDExLjVDOC4zNzUgMTAuODc4NyA4Ljg3ODY4IDEwLjM3NSA5LjUgMTAuMzc1QzEwLjEyMTMgMTAuMzc1IDEwLjYyNSAxMC44Nzg3IDEwLjYyNSAxMS41Wk01LjUgMTIuNjI1QzYuMTIxMzIgMTIuNjI1IDYuNjI1IDEyLjEyMTMgNi42MjUgMTEuNUM2LjYyNSAxMC44Nzg3IDYuMTIxMzIgMTAuMzc1IDUuNSAxMC4zNzVDNC44Nzg2OCAxMC4zNzUgNC4zNzUgMTAuODc4NyA0LjM3NSAxMS41QzQuMzc1IDEyLjEyMTMgNC44Nzg2OCAxMi42MjUgNS41IDEyLjYyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGN0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjQ5OTk4IDQuMDk5OThDMi4yNzkwNiA0LjA5OTk4IDIuMDk5OTggNC4yNzkwNiAyLjA5OTk4IDQuNDk5OThDMi4wOTk5OCA0LjcyMDg5IDIuMjc5MDYgNC44OTk5OCAyLjQ5OTk4IDQuODk5OThIMTIuNUMxMi43MjA5IDQuODk5OTggMTIuOSA0LjcyMDg5IDEyLjkgNC40OTk5OEMxMi45IDQuMjc5MDYgMTIuNzIwOSA0LjA5OTk4IDEyLjUgNC4wOTk5OEgyLjQ5OTk4Wk0yLjQ5OTk4IDYuMDk5OThDMi4yNzkwNiA2LjA5OTk4IDIuMDk5OTggNi4yNzkwNiAyLjA5OTk4IDYuNDk5OThDMi4wOTk5OCA2LjcyMDg5IDIuMjc5MDYgNi44OTk5OCAyLjQ5OTk4IDYuODk5OThIMTIuNUMxMi43MjA5IDYuODk5OTggMTIuOSA2LjcyMDg5IDEyLjkgNi40OTk5OEMxMi45IDYuMjc5MDYgMTIuNzIwOSA2LjA5OTk4IDEyLjUgNi4wOTk5OEgyLjQ5OTk4Wk0yLjA5OTk4IDguNDk5OThDMi4wOTk5OCA4LjI3OTA2IDIuMjc5MDYgOC4wOTk5OCAyLjQ5OTk4IDguMDk5OThIMTIuNUMxMi43MjA5IDguMDk5OTggMTIuOSA4LjI3OTA2IDEyLjkgOC40OTk5OEMxMi45IDguNzIwODkgMTIuNzIwOSA4Ljg5OTk4IDEyLjUgOC44OTk5OEgyLjQ5OTk4QzIuMjc5MDYgOC44OTk5OCAyLjA5OTk4IDguNzIwODkgMi4wOTk5OCA4LjQ5OTk4Wk0yLjQ5OTk4IDEwLjFDMi4yNzkwNiAxMC4xIDIuMDk5OTggMTAuMjc5MSAyLjA5OTk4IDEwLjVDMi4wOTk5OCAxMC43MjA5IDIuMjc5MDYgMTAuOSAyLjQ5OTk4IDEwLjlIMTIuNUMxMi43MjA5IDEwLjkgMTIuOSAxMC43MjA5IDEyLjkgMTAuNUMxMi45IDEwLjI3OTEgMTIuNzIwOSAxMC4xIDEyLjUgMTAuMUgyLjQ5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMDk5OTggMTIuNUM0LjA5OTk4IDEyLjcyMDkgNC4yNzkwNiAxMi45IDQuNDk5OTggMTIuOUM0LjcyMDg5IDEyLjkgNC44OTk5OCAxMi43MjA5IDQuODk5OTggMTIuNUw0Ljg5OTk4IDIuNTAwMDJDNC44OTk5OCAyLjI3OTExIDQuNzIwODkgMi4xMDAwMyA0LjQ5OTk4IDIuMTAwMDNDNC4yNzkwNiAyLjEwMDAzIDQuMDk5OTggMi4yNzkxMSA0LjA5OTk4IDIuNTAwMDJMNC4wOTk5OCAxMi41Wk02LjA5OTk4IDEyLjVDNi4wOTk5OCAxMi43MjA5IDYuMjc5MDYgMTIuOSA2LjQ5OTk4IDEyLjlDNi43MjA4OSAxMi45IDYuODk5OTggMTIuNzIwOSA2Ljg5OTk4IDEyLjVMNi44OTk5OCAyLjUwMDAyQzYuODk5OTggMi4yNzkxMSA2LjcyMDg5IDIuMTAwMDMgNi40OTk5OCAyLjEwMDAzQzYuMjc5MDYgMi4xMDAwMyA2LjA5OTk4IDIuMjc5MTEgNi4wOTk5OCAyLjUwMDAyTDYuMDk5OTggMTIuNVpNOC40OTk5OCAxMi45QzguMjc5MDYgMTIuOSA4LjA5OTk4IDEyLjcyMDkgOC4wOTk5OCAxMi41TDguMDk5OTggMi41MDAwMkM4LjA5OTk4IDIuMjc5MTEgOC4yNzkwNiAyLjEwMDAyIDguNDk5OTggMi4xMDAwMkM4LjcyMDg5IDIuMTAwMDIgOC44OTk5OCAyLjI3OTExIDguODk5OTggMi41MDAwMkw4Ljg5OTk4IDEyLjVDOC44OTk5OCAxMi43MjA5IDguNzIwODkgMTIuOSA4LjQ5OTk4IDEyLjlaTTEwLjEgMTIuNUMxMC4xIDEyLjcyMDkgMTAuMjc5MSAxMi45IDEwLjUgMTIuOUMxMC43MjA5IDEyLjkgMTAuOSAxMi43MjA5IDEwLjkgMTIuNUwxMC45IDIuNTAwMDJDMTAuOSAyLjI3OTExIDEwLjcyMDkgMi4xMDAwMiAxMC41IDIuMTAwMDJDMTAuMjc5MSAyLjEwMDAyIDEwLjEgMi4yNzkxMSAxMC4xIDIuNTAwMDJMMTAuMSAxMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwLjMyODUgMS4xMzYwN0MxMC4xMzMyIDAuOTQwODA5IDkuODE2NjIgMC45NDA4MDggOS42MjEzNiAxLjEzNjA3QzkuNDI2MDkgMS4zMzEzMyA5LjQyNjA5IDEuNjQ3OTIgOS42MjEzNiAxLjg0MzE4TDEwLjI3NDQgMi40OTYxOUw1LjQyNTYzIDYuMTMyNzRMNC4zMTgwNSA1LjAyNTE2QzQuMTIyNzkgNC44Mjk5IDMuODA2MjEgNC44Mjk5IDMuNjEwOTUgNS4wMjUxNkMzLjQxNTY5IDUuMjIwNDIgMy40MTU2OSA1LjUzNyAzLjYxMDk1IDUuNzMyMjZMNS4wMjUxNiA3LjE0NjQ4TDYuMDg1ODIgOC4yMDcxNEwyLjgxNTQ1IDExLjQ3NzVDMi42MjAxOSAxMS42NzI4IDIuNjIwMTkgMTEuOTg5NCAyLjgxNTQ1IDEyLjE4NDZDMy4wMTA3MiAxMi4zNzk5IDMuMzI3MyAxMi4zNzk5IDMuNTIyNTYgMTIuMTg0Nkw2Ljc5MjkzIDguOTE0MjVMNy44NTM1OSA5Ljk3NDkxTDkuMjY3OCAxMS4zODkxQzkuNDYzMDYgMTEuNTg0NCA5Ljc3OTY1IDExLjU4NDQgOS45NzQ5MSAxMS4zODkxQzEwLjE3MDIgMTEuMTkzOSAxMC4xNzAyIDEwLjg3NzMgOS45NzQ5MSAxMC42ODJMOC44NjczMyA5LjU3NDQzTDEyLjUwMzkgNC43MjU3TDEzLjE1NjkgNS4zNzg3MUMxMy4zNTIyIDUuNTczOTcgMTMuNjY4NyA1LjU3Mzk3IDEzLjg2NCA1LjM3ODcxQzE0LjA1OTMgNS4xODM0NSAxNC4wNTkzIDQuODY2ODcgMTMuODY0IDQuNjcxNkwxMi44MDMzIDMuNjEwOTRMMTEuMzg5MSAyLjE5NjczTDEwLjMyODUgMS4xMzYwN1pNNi4xMzk5MiA2Ljg0NzAyTDEwLjk4ODcgMy4yMTA0N0wxMS43ODk2IDQuMDExNDJMOC4xNTMwNSA4Ljg2MDE1TDYuMTM5OTIgNi44NDcwMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHB0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05LjYyMTI5IDEuMTM2MDdDOS44MTY1NiAwLjk0MDgwOCAxMC4xMzMxIDAuOTQwODA5IDEwLjMyODQgMS4xMzYwN0wxMS4zODkxIDIuMTk2NzNMMTIuODAzMyAzLjYxMDk0TDEzLjg2MzkgNC42NzE2QzE0LjA1OTIgNC44NjY4NyAxNC4wNTkyIDUuMTgzNDUgMTMuODYzOSA1LjM3ODcxQzEzLjY2ODcgNS41NzM5NyAxMy4zNTIxIDUuNTczOTcgMTMuMTU2OCA1LjM3ODcxTDEyLjUwMzggNC43MjU3TDguODY3MjcgOS41NzQ0M0w5Ljk3NDg1IDEwLjY4MkMxMC4xNzAxIDEwLjg3NzMgMTAuMTcwMSAxMS4xOTM5IDkuOTc0ODUgMTEuMzg5MUM5Ljc3OTU5IDExLjU4NDQgOS40NjMgMTEuNTg0NCA5LjI2Nzc0IDExLjM4OTFMNy44NTM1MyA5Ljk3NDkxTDYuNzkyODcgOC45MTQyNUwzLjUyMjUgMTIuMTg0NkMzLjMyNzI0IDEyLjM3OTkgMy4wMTA2NSAxMi4zNzk5IDIuODE1MzkgMTIuMTg0NkMyLjYyMDEzIDExLjk4OTQgMi42MjAxMyAxMS42NzI4IDIuODE1MzkgMTEuNDc3NUw2LjA4NTc2IDguMjA3MTRMNS4wMjUxIDcuMTQ2NDhMMy42MTA4OSA1LjczMjI2QzMuNDE1NjMgNS41MzcgMy40MTU2MiA1LjIyMDQyIDMuNjEwODkgNS4wMjUxNkMzLjgwNjE1IDQuODI5OSA0LjEyMjczIDQuODI5OSA0LjMxNzk5IDUuMDI1MTZMNS40MjU1NyA2LjEzMjc0TDEwLjI3NDMgMi40OTYxOUw5LjYyMTI5IDEuODQzMThDOS40MjYwMyAxLjY0NzkyIDkuNDI2MDMgMS4zMzEzMyA5LjYyMTI5IDEuMTM2MDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05LjYyMTI5IDEuMTM2MDdDOS44MTY1NiAwLjk0MDgwOCAxMC4xMzMxIDAuOTQwODA5IDEwLjMyODQgMS4xMzYwN0wxMS4zODkxIDIuMTk2NzNMMTIuODAzMyAzLjYxMDk0TDEzLjg2MzkgNC42NzE2QzE0LjA1OTIgNC44NjY4NyAxNC4wNTkyIDUuMTgzNDUgMTMuODYzOSA1LjM3ODcxQzEzLjY2ODcgNS41NzM5NyAxMy4zNTIxIDUuNTczOTcgMTMuMTU2OCA1LjM3ODcxTDEyLjUwMzggNC43MjU3TDguODY3MjcgOS41NzQ0M0w5Ljk3NDg1IDEwLjY4MkMxMC4xNzAxIDEwLjg3NzMgMTAuMTcwMSAxMS4xOTM5IDkuOTc0ODUgMTEuMzg5MUM5Ljc3OTU5IDExLjU4NDQgOS40NjMgMTEuNTg0NCA5LjI2Nzc0IDExLjM4OTFMNy44NTM1MyA5Ljk3NDkxTDYuNzkyODcgOC45MTQyNUwzLjUyMjUgMTIuMTg0NkMzLjMyNzI0IDEyLjM3OTkgMy4wMTA2NSAxMi4zNzk5IDIuODE1MzkgMTIuMTg0NkMyLjYyMDEzIDExLjk4OTQgMi42MjAxMyAxMS42NzI4IDIuODE1MzkgMTEuNDc3NUw2LjA4NTc2IDguMjA3MTRMNS4wMjUxIDcuMTQ2NDhMMy42MTA4OSA1LjczMjI2QzMuNDE1NjMgNS41MzcgMy40MTU2MiA1LjIyMDQyIDMuNjEwODkgNS4wMjUxNkMzLjgwNjE1IDQuODI5OSA0LjEyMjczIDQuODI5OSA0LjMxNzk5IDUuMDI1MTZMNS40MjU1NyA2LjEzMjc0TDEwLjI3NDMgMi40OTYxOUw5LjYyMTI5IDEuODQzMThDOS40MjYwMyAxLjY0NzkyIDkuNDI2MDMgMS4zMzEzMyA5LjYyMTI5IDEuMTM2MDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxmdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5OSAzLjA5OTk4QzcuMjc5MDcgMy4wOTk5OCA3LjA5OTk5IDMuMjc5MDYgNy4wOTk5OSAzLjQ5OTk4QzcuMDk5OTkgMy43MjA4OSA3LjI3OTA3IDMuODk5OTggNy40OTk5OSAzLjg5OTk4SDE0LjVDMTQuNzIwOSAzLjg5OTk4IDE0LjkgMy43MjA4OSAxNC45IDMuNDk5OThDMTQuOSAzLjI3OTA2IDE0LjcyMDkgMy4wOTk5OCAxNC41IDMuMDk5OThINy40OTk5OVpNNy40OTk5OCA1LjFDNy4yNzkwNyA1LjEgNy4wOTk5OCA1LjI3OTA4IDcuMDk5OTggNS41QzcuMDk5OTggNS43MjA5MSA3LjI3OTA3IDUuOSA3LjQ5OTk4IDUuOUgxNC41QzE0LjcyMDkgNS45IDE0LjkgNS43MjA5MSAxNC45IDUuNUMxNC45IDUuMjc5MDggMTQuNzIwOSA1LjEgMTQuNSA1LjFINy40OTk5OFpNNy4xIDcuNUM3LjEgNy4yNzkwOCA3LjI3OTA5IDcuMSA3LjUgNy4xSDE0LjVDMTQuNzIwOSA3LjEgMTQuOSA3LjI3OTA4IDE0LjkgNy41QzE0LjkgNy43MjA5MSAxNC43MjA5IDcuOSAxNC41IDcuOUg3LjVDNy4yNzkwOSA3LjkgNy4xIDcuNzIwOTEgNy4xIDcuNVpNNy40OTk5OCA5LjFDNy4yNzkwNyA5LjEgNy4wOTk5OCA5LjI3OTA4IDcuMDk5OTggOS41QzcuMDk5OTggOS43MjA5MSA3LjI3OTA3IDkuOSA3LjQ5OTk4IDkuOUgxNC41QzE0LjcyMDkgOS45IDE0LjkgOS43MjA5MSAxNC45IDkuNUMxNC45IDkuMjc5MDggMTQuNzIwOSA5LjEgMTQuNSA5LjFINy40OTk5OFpNNy4wOTk5OCAxMS41QzcuMDk5OTggMTEuMjc5MSA3LjI3OTA3IDExLjEgNy40OTk5OCAxMS4xSDE0LjVDMTQuNzIwOSAxMS4xIDE0LjkgMTEuMjc5MSAxNC45IDExLjVDMTQuOSAxMS43MjA5IDE0LjcyMDkgMTEuOSAxNC41IDExLjlINy40OTk5OEM3LjI3OTA3IDExLjkgNy4wOTk5OCAxMS43MjA5IDcuMDk5OTggMTEuNVpNMi41IDkuMjUwMDNMNSA2LjAwMDAzSDBMMi41IDkuMjUwMDNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxodD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41IDFDNC4yMjM4NiAxIDQgMS4yMjM4NiA0IDEuNUM0IDEuNzc2MTQgNC4yMjM4NiAyIDQuNSAySDEyVjEzSDQuNUM0LjIyMzg2IDEzIDQgMTMuMjIzOSA0IDEzLjVDNCAxMy43NzYxIDQuMjIzODYgMTQgNC41IDE0SDEyQzEyLjU1MjMgMTQgMTMgMTMuNTUyMyAxMyAxM1YyQzEzIDEuNDQ3NzIgMTIuNTUyMyAxIDEyIDFINC41Wk02LjYwMzU1IDQuODk2NDVDNi40MDgyOSA0LjcwMTE4IDYuMDkxNzEgNC43MDExOCA1Ljg5NjQ1IDQuODk2NDVDNS43MDExOCA1LjA5MTcxIDUuNzAxMTggNS40MDgyOSA1Ljg5NjQ1IDUuNjAzNTVMNy4yOTI4OSA3SDAuNUMwLjIyMzg1OCA3IDAgNy4yMjM4NiAwIDcuNUMwIDcuNzc2MTQgMC4yMjM4NTggOCAwLjUgOEg3LjI5Mjg5TDUuODk2NDUgOS4zOTY0NUM1LjcwMTE4IDkuNTkxNzEgNS43MDExOCA5LjkwODI5IDUuODk2NDUgMTAuMTAzNkM2LjA5MTcxIDEwLjI5ODggNi40MDgyOSAxMC4yOTg4IDYuNjAzNTUgMTAuMTAzNkw4Ljg1MzU1IDcuODUzNTVDOS4wNDg4MiA3LjY1ODI5IDkuMDQ4ODIgNy4zNDE3MSA4Ljg1MzU1IDcuMTQ2NDVMNi42MDM1NSA0Ljg5NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZ3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgMi41QzIgMi4yMjM4NiAyLjIyMzg2IDIgMi41IDJINS41QzUuNzc2MTQgMiA2IDIuMjIzODYgNiAyLjVDNiAyLjc3NjE0IDUuNzc2MTQgMyA1LjUgM0gzVjUuNUMzIDUuNzc2MTQgMi43NzYxNCA2IDIuNSA2QzIuMjIzODYgNiAyIDUuNzc2MTQgMiA1LjVWMi41Wk05IDIuNUM5IDIuMjIzODYgOS4yMjM4NiAyIDkuNSAySDEyLjVDMTIuNzc2MSAyIDEzIDIuMjIzODYgMTMgMi41VjUuNUMxMyA1Ljc3NjE0IDEyLjc3NjEgNiAxMi41IDZDMTIuMjIzOSA2IDEyIDUuNzc2MTQgMTIgNS41VjNIOS41QzkuMjIzODYgMyA5IDIuNzc2MTQgOSAyLjVaTTIuNSA5QzIuNzc2MTQgOSAzIDkuMjIzODYgMyA5LjVWMTJINS41QzUuNzc2MTQgMTIgNiAxMi4yMjM5IDYgMTIuNUM2IDEyLjc3NjEgNS43NzYxNCAxMyA1LjUgMTNIMi41QzIuMjIzODYgMTMgMiAxMi43NzYxIDIgMTIuNVY5LjVDMiA5LjIyMzg2IDIuMjIzODYgOSAyLjUgOVpNMTIuNSA5QzEyLjc3NjEgOSAxMyA5LjIyMzg2IDEzIDkuNVYxMi41QzEzIDEyLjc3NjEgMTIuNzc2MSAxMyAxMi41IDEzSDkuNUM5LjIyMzg2IDEzIDkgMTIuNzc2MSA5IDEyLjVDOSAxMi4yMjM5IDkuMjIzODYgMTIgOS41IDEySDEyVjkuNUMxMiA5LjIyMzg2IDEyLjIyMzkgOSAxMi41IDlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx2dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSAyQzAuNDQ3NzE1IDIgMCAyLjQ0NzcyIDAgM1YxMkMwIDEyLjU1MjMgMC40NDc3MTUgMTMgMSAxM0gxNEMxNC41NTIzIDEzIDE1IDEyLjU1MjMgMTUgMTJWM0MxNSAyLjQ0NzcyIDE0LjU1MjMgMiAxNCAySDFaTTEgM0wxNCAzVjMuOTI0OTRDMTMuOTE3NCAzLjkyNDg2IDEzLjgzMzggMy45NDc1MSAxMy43NTg5IDMuOTk1MDVMNy41IDcuOTY3MDNMMS4yNDExMiAzLjk5NTA1QzEuMTY2MjEgMy45NDc1MSAxLjA4MjYgMy45MjQ4NiAxIDMuOTI0OTRWM1pNMSA0LjkwNzk3VjEySDE0VjQuOTA3OTdMNy43NDExMiA4Ljg3OTk1QzcuNTkzOTQgOC45NzMzNSA3LjQwNjA2IDguOTczMzUgNy4yNTg4OCA4Ljg3OTk1TDEgNC45MDc5N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEN0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03Ljk0NzIxIDAuMTY0NTk0QzcuNjY1NjkgMC4wMjM4Mjk5IDcuMzM0MzEgMC4wMjM4MzAyIDcuMDUyNzkgMC4xNjQ1OTRMMC41NTI3ODYgMy40MTQ1OUMwLjIxNDAwMiAzLjU4Mzk5IDAgMy45MzAyNSAwIDQuMzA5MDJWMTJDMCAxMi41NTIzIDAuNDQ3NzE1IDEzIDEgMTNIMTRDMTQuNTUyMyAxMyAxNSAxMi41NTIzIDE1IDEyVjQuMzA5MDJDMTUgMy45MzAyNSAxNC43ODYgMy41ODM5OSAxNC40NDcyIDMuNDE0NTlMNy45NDcyMSAwLjE2NDU5NFpNMTMuNTY4OSA0LjA5MzQ5TDcuNSAxLjA1OTAyTDEuNDMxMDUgNC4wOTM0OUw3LjUgNy4yOTEzNkwxMy41Njg5IDQuMDkzNDlaTTEgNC44ODM2NlYxMkgxNFY0Ljg4MzY2TDcuNzA5NzcgOC4xOTgxM0M3LjU3ODQ4IDguMjY3MzEgNy40MjE1MiA4LjI2NzMxIDcuMjkwMjMgOC4xOTgxM0wxIDQuODgzNjZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxtdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC40NDQ5IDAuNjA4NzY1QzguMDE4MyAtMC4xMDcwMTUgNi45ODE3IC0wLjEwNzAxNSA2LjU1NTA5IDAuNjA4NzY2TDAuMTYxMTc4IDExLjMzNjhDLTAuMjc1ODI0IDEyLjA3IDAuMjUyNTAzIDEzIDEuMTA2MDggMTNIMTMuODkzOUMxNC43NDc1IDEzIDE1LjI3NTggMTIuMDcgMTQuODM4OCAxMS4zMzY4TDguNDQ0OSAwLjYwODc2NVpNNy40MTQxIDEuMTIwNzNDNy40NTI4OCAxLjA1NTY2IDcuNTQ3MTIgMS4wNTU2NiA3LjU4NTkgMS4xMjA3M0wxMy45Nzk4IDExLjg0ODhDMTQuMDE5NiAxMS45MTU0IDEzLjk3MTUgMTIgMTMuODkzOSAxMkgxLjEwNjA4QzEuMDI4NDkgMTIgMC45ODA0NTQgMTEuOTE1NCAxLjAyMDE4IDExLjg0ODhMNy40MTQxIDEuMTIwNzNaTTYuODI2OSA0LjQ4NjExQzYuODEyMjEgNC4xMDQyMyA3LjExNzgzIDMuNzg2NjMgNy41IDMuNzg2NjNDNy44ODIxNyAzLjc4NjYzIDguMTg3NzggNC4xMDQyMyA4LjE3MzEgNC40ODYxMkw4LjAxOTIxIDguNDg3MDFDOC4wMDg0OCA4Ljc2NiA3Ljc3OTIgOC45ODY2NCA3LjUgOC45ODY2NEM3LjIyMDggOC45ODY2NCA2Ljk5MTUxIDguNzY2IDYuOTgwNzggOC40ODcwMUw2LjgyNjkgNC40ODYxMVpNOC4yNDk4OSAxMC40NzZDOC4yNDk4OSAxMC44OTAyIDcuOTE0MSAxMS4yMjYgNy40OTk4OSAxMS4yMjZDNy4wODU2NyAxMS4yMjYgNi43NDk4OSAxMC44OTAyIDYuNzQ5ODkgMTAuNDc2QzYuNzQ5ODkgMTAuMDYxOCA3LjA4NTY3IDkuNzI1OTkgNy40OTk4OSA5LjcyNTk5QzcuOTE0MSA5LjcyNTk5IDguMjQ5ODkgMTAuMDYxOCA4LjI0OTg5IDEwLjQ3NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHd0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDFDMi40NDc3MSAxIDIgMS40NDc3MiAyIDJWMTNDMiAxMy41NTIzIDIuNDQ3NzIgMTQgMyAxNEgxMC41QzEwLjc3NjEgMTQgMTEgMTMuNzc2MSAxMSAxMy41QzExIDEzLjIyMzkgMTAuNzc2MSAxMyAxMC41IDEzSDNWMkwxMC41IDJDMTAuNzc2MSAyIDExIDEuNzc2MTQgMTEgMS41QzExIDEuMjIzODYgMTAuNzc2MSAxIDEwLjUgMUgzWk0xMi42MDM2IDQuODk2NDVDMTIuNDA4MyA0LjcwMTE4IDEyLjA5MTcgNC43MDExOCAxMS44OTY0IDQuODk2NDVDMTEuNzAxMiA1LjA5MTcxIDExLjcwMTIgNS40MDgyOSAxMS44OTY0IDUuNjAzNTVMMTMuMjkyOSA3SDYuNUM2LjIyMzg2IDcgNiA3LjIyMzg2IDYgNy41QzYgNy43NzYxNCA2LjIyMzg2IDggNi41IDhIMTMuMjkyOUwxMS44OTY0IDkuMzk2NDVDMTEuNzAxMiA5LjU5MTcxIDExLjcwMTIgOS45MDgyOSAxMS44OTY0IDEwLjEwMzZDMTIuMDkxNyAxMC4yOTg4IDEyLjQwODMgMTAuMjk4OCAxMi42MDM2IDEwLjEwMzZMMTQuODUzNiA3Ljg1MzU1QzE1LjA0ODggNy42NTgyOSAxNS4wNDg4IDcuMzQxNzEgMTQuODUzNiA3LjE0NjQ1TDEyLjYwMzYgNC44OTY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjUgMkM1Ljc3NjE0IDIgNiAyLjIyMzg2IDYgMi41VjUuNUM2IDUuNzc2MTQgNS43NzYxNCA2IDUuNSA2SDIuNUMyLjIyMzg2IDYgMiA1Ljc3NjE0IDIgNS41QzIgNS4yMjM4NiAyLjIyMzg2IDUgMi41IDVINVYyLjVDNSAyLjIyMzg2IDUuMjIzODYgMiA1LjUgMlpNOS41IDJDOS43NzYxNCAyIDEwIDIuMjIzODYgMTAgMi41VjVIMTIuNUMxMi43NzYxIDUgMTMgNS4yMjM4NiAxMyA1LjVDMTMgNS43NzYxNCAxMi43NzYxIDYgMTIuNSA2SDkuNUM5LjIyMzg2IDYgOSA1Ljc3NjE0IDkgNS41VjIuNUM5IDIuMjIzODYgOS4yMjM4NiAyIDkuNSAyWk0yIDkuNUMyIDkuMjIzODYgMi4yMjM4NiA5IDIuNSA5SDUuNUM1Ljc3NjE0IDkgNiA5LjIyMzg2IDYgOS41VjEyLjVDNiAxMi43NzYxIDUuNzc2MTQgMTMgNS41IDEzQzUuMjIzODYgMTMgNSAxMi43NzYxIDUgMTIuNVYxMEgyLjVDMi4yMjM4NiAxMCAyIDkuNzc2MTQgMiA5LjVaTTkgOS41QzkgOS4yMjM4NiA5LjIyMzg2IDkgOS41IDlIMTIuNUMxMi43NzYxIDkgMTMgOS4yMjM4NiAxMyA5LjVDMTMgOS43NzYxNCAxMi43NzYxIDEwIDEyLjUgMTBIMTBWMTIuNUMxMCAxMi43NzYxIDkuNzc2MTQgMTMgOS41IDEzQzkuMjIzODYgMTMgOSAxMi43NzYxIDkgMTIuNVY5LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMyAyQzIuNDQ3NzIgMiAyIDIuNDQ3NzIgMiAzVjEyQzIgMTIuNTUyMyAyLjQ0NzcyIDEzIDMgMTNIMTJDMTIuNTUyMyAxMyAxMyAxMi41NTIzIDEzIDEyVjguNUMxMyA4LjIyMzg2IDEyLjc3NjEgOCAxMi41IDhDMTIuMjIzOSA4IDEyIDguMjIzODYgMTIgOC41VjEySDNWM0w2LjUgM0M2Ljc3NjE0IDMgNyAyLjc3NjE0IDcgMi41QzcgMi4yMjM4NiA2Ljc3NjE0IDIgNi41IDJIM1pNMTIuODUzNiAyLjE0NjQ1QzEyLjkwMTUgMi4xOTQzOSAxMi45Mzc3IDIuMjQ5NjQgMTIuOTYyMSAyLjMwODYxQzEyLjk4NjEgMi4zNjY2OSAxMi45OTk2IDIuNDMwMyAxMyAyLjQ5N0wxMyAyLjVWMi41MDA0OVY1LjVDMTMgNS43NzYxNCAxMi43NzYxIDYgMTIuNSA2QzEyLjIyMzkgNiAxMiA1Ljc3NjE0IDEyIDUuNVYzLjcwNzExTDYuODUzNTUgOC44NTM1NUM2LjY1ODI5IDkuMDQ4ODIgNi4zNDE3MSA5LjA0ODgyIDYuMTQ2NDUgOC44NTM1NUM1Ljk1MTE4IDguNjU4MjkgNS45NTExOCA4LjM0MTcxIDYuMTQ2NDUgOC4xNDY0NUwxMS4yOTI5IDNIOS41QzkuMjIzODYgMyA5IDIuNzc2MTQgOSAyLjVDOSAyLjIyMzg2IDkuMjIzODYgMiA5LjUgMkgxMi40OTk5SDEyLjVDMTIuNTY3OCAyIDEyLjYzMjQgMi4wMTM0OSAxMi42OTE0IDIuMDM3OTRDMTIuNzUwNCAyLjA2MjM0IDEyLjgwNTYgMi4wOTg1MSAxMi44NTM2IDIuMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQuNzY0OSA2LjA3NTk1QzE0Ljk5OTEgNi4yMjIzMSAxNS4wNzAzIDYuNTMwNzggMTQuOTIzOSA2Ljc2NDk1QzE0LjQ4NDkgNy40Njc0MiAxMy45NjMyIDguMTA2NDQgMTMuMzcwMiA4LjY2MzA0TDE0LjU3MTIgOS44NjQwNUMxNC43NjY0IDEwLjA1OTMgMTQuNzY2NCAxMC4zNzU5IDE0LjU3MTIgMTAuNTcxMkMxNC4zNzU5IDEwLjc2NjQgMTQuMDU5MyAxMC43NjY0IDEzLjg2NDEgMTAuNTcxMkwxMi42MDExIDkuMzA4MTZDMTEuODA0OSA5LjkwMjgyIDEwLjkwODkgMTAuMzYyMSA5LjkzMzc0IDEwLjY1MUwxMC4zODMgMTIuMzI3NkMxMC40NTQ0IDEyLjU5NDQgMTAuMjk2MSAxMi44Njg1IDEwLjAyOTQgMTIuOTRDOS43NjI2NiAxMy4wMTE1IDkuNDg4NSAxMi44NTMyIDkuNDE3MDMgMTIuNTg2NEw4Ljk1OTE2IDEwLjg3NzVDOC40ODc0MiAxMC45NTggOC4wMDAzNSAxMC45OTk5IDcuNSAxMC45OTk5QzYuOTk5NjQgMTAuOTk5OSA2LjUxMjU3IDEwLjk1OCA2LjA0MDgyIDEwLjg3NzVMNS41ODI5OSAxMi41ODY0QzUuNTExNTMgMTIuODUzMiA1LjIzNzM3IDEzLjAxMTUgNC45NzA2MyAxMi45NEM0LjcwMzkgMTIuODY4NSA0LjU0NTYgMTIuNTk0NCA0LjYxNzA2IDEyLjMyNzdMNS4wNjYyNCAxMC42NTFDNC4wOTExMSAxMC4zNjIxIDMuMTk1MDMgOS45MDI4MSAyLjM5ODkgOS4zMDgxNEwxLjEzNTkgMTAuNTcxMUMwLjk0MDYzOCAxMC43NjY0IDAuNjI0MDU4IDEwLjc2NjQgMC40Mjg3OTcgMTAuNTcxMUMwLjIzMzUzNyAxMC4zNzU5IDAuMjMzNTM3IDEwLjA1OTMgMC40Mjg3OTcgOS44NjQwNEwxLjYyOTgyIDguNjYzMDJDMS4wMzY4MiA4LjEwNjQzIDAuNTE1MTEzIDcuNDY3NDIgMC4wNzYwNjc3IDYuNzY0OTVDLTAuMDcwMjg2NyA2LjUzMDc4IDAuMDAwODk4NTQ0IDYuMjIyMzEgMC4yMzUwNjQgNi4wNzU5NUMwLjQ2OTIzIDUuOTI5NiAwLjc3NzcwMyA2LjAwMDc4IDAuOTI0MDU3IDYuMjM0OTVDMS40MDM1NCA3LjAwMjEyIDEuOTg5IDcuNjgwNTYgMi42NjIzMyA4LjI0MjdDMi42NzMxNSA4LjI1MDk2IDIuNjgzNyA4LjI1OTcxIDIuNjkzOTcgOC4yNjg5N0M0LjAwODk3IDkuMzU1MjcgNS42NTUzNiA5Ljk5OTkgNy41IDkuOTk5OUMxMC4zMDc4IDkuOTk5OSAxMi42NTYzIDguNTA2MjkgMTQuMDc1OSA2LjIzNDk1QzE0LjIyMjMgNi4wMDA3OCAxNC41MzA4IDUuOTI5NiAxNC43NjQ5IDYuMDc1OTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxrdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMzUzNiAyLjM1MzU1QzEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDEuODQxNzEgMTMuMzUzNiAxLjY0NjQ1QzEzLjE1ODMgMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTIuNjQ2NCAxLjY0NjQ1TDEwLjY4MjggMy42MTAxMkM5LjcwNjUyIDMuMjE2NzEgOC42Mzc1OSAzIDcuNSAzQzQuMzA3ODYgMyAxLjY1NjM5IDQuNzA2MzggMC4wNzYwMDAyIDcuMjM1MDFDLTAuMDI1MzMzOCA3LjM5NzE1IC0wLjAyNTMzMzQgNy42MDI4OCAwLjA3NjAwMTQgNy43NjUwMUMwLjkwMjk0NSA5LjA4ODEyIDIuMDIzMTQgMTAuMTg2MSAzLjM2MDYxIDEwLjkzMjNMMS42NDY0NSAxMi42NDY0QzEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEzLjE1ODMgMS42NDY0NSAxMy4zNTM2QzEuODQxNzEgMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMi4zNTM1NSAxMy4zNTM2TDQuMzE3MjMgMTEuMzg5OUM1LjI5MzQ4IDExLjc4MzMgNi4zNjI0MSAxMiA3LjUgMTJDMTAuNjkyMSAxMiAxMy4zNDM2IDEwLjI5MzYgMTQuOTI0IDcuNzY1MDFDMTUuMDI1MyA3LjYwMjg4IDE1LjAyNTMgNy4zOTcxNSAxNC45MjQgNy4yMzUwMUMxNC4wOTcxIDUuOTExOSAxMi45NzY5IDQuODEzOTEgMTEuNjM5NCA0LjA2NzcxTDEzLjM1MzYgMi4zNTM1NVpNOS45MDQyOCA0LjM4ODYxQzkuMTUzMzIgNC4xMzYxIDguMzQ3NTkgNCA3LjUgNEM0LjgwMjg1IDQgMi41Mjk1MiA1LjM3ODE2IDEuMDk2MjIgNy41MDAwMUMxLjg3Mjg0IDguNjQ5NyAyLjg5NjA5IDkuNTgxMDYgNC4wOTk3NCAxMC4xOTMxTDkuOTA0MjggNC4zODg2MVpNNS4wOTU3MiAxMC42MTE0TDEwLjkwMDMgNC44MDY4NUMxMi4xMDM5IDUuNDE4OTQgMTMuMTI3MiA2LjM1MDMxIDEzLjkwMzggNy41MDAwMUMxMi40NzA1IDkuNjIxODMgMTAuMTk3MSAxMSA3LjUgMTFDNi42NTI0MSAxMSA1Ljg0NjY4IDEwLjg2MzkgNS4wOTU3MiAxMC42MTE0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sU3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAxMUM0LjgwMjg1IDExIDIuNTI5NTIgOS42MjE4NCAxLjA5NjIyIDcuNTAwMDFDMi41Mjk1MiA1LjM3ODE2IDQuODAyODUgNCA3LjUgNEMxMC4xOTcxIDQgMTIuNDcwNSA1LjM3ODE2IDEzLjkwMzggNy41MDAwMUMxMi40NzA1IDkuNjIxODMgMTAuMTk3MSAxMSA3LjUgMTFaTTcuNSAzQzQuMzA3ODYgMyAxLjY1NjM5IDQuNzA2MzggMC4wNzYwMDAyIDcuMjM1MDFDLTAuMDI1MzMzOCA3LjM5NzE1IC0wLjAyNTMzMzQgNy42MDI4OCAwLjA3NjAwMTQgNy43NjUwMUMxLjY1NjM5IDEwLjI5MzYgNC4zMDc4NiAxMiA3LjUgMTJDMTAuNjkyMSAxMiAxMy4zNDM2IDEwLjI5MzYgMTQuOTI0IDcuNzY1MDFDMTUuMDI1MyA3LjYwMjg4IDE1LjAyNTMgNy4zOTcxNSAxNC45MjQgNy4yMzUwMUMxMy4zNDM2IDQuNzA2MzggMTAuNjkyMSAzIDcuNSAzWk03LjUgOS41QzguNjA0NTcgOS41IDkuNSA4LjYwNDU3IDkuNSA3LjVDOS41IDYuMzk1NDMgOC42MDQ1NyA1LjUgNy41IDUuNUM2LjM5NTQzIDUuNSA1LjUgNi4zOTU0MyA1LjUgNy41QzUuNSA4LjYwNDU3IDYuMzk1NDMgOS41IDcuNSA5LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxPdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3Njg5MkMzLjg0MjIyIDAuODc2ODkyIDAuODc3MDc1IDMuODQyMDQgMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAxMS4xNTc0IDMuODQyMjIgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMTEuMTU3NiAxNC4xMjI2IDE0LjEyMjcgMTEuMTU3NCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAzLjg0MjA0IDExLjE1NzYgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MlpNMS44MjcwOCA3LjQ5OTcyQzEuODI3MDggNC4zNjY3MSA0LjM2Njg5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5QzEwLjYzMjkgMS44MjY4OSAxMy4xNzI3IDQuMzY2NzEgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgMTAuNjMyNyAxMC42MzI5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzQuMzY2ODkgMTMuMTcyNiAxLjgyNzA4IDEwLjYzMjcgMS44MjcwOCA3LjQ5OTcyWk01LjAzNzQ3IDkuMjEzOTVDNC44Nzk0OSA4Ljk4NzQ2IDQuNTY3ODIgOC45MzE5MyA0LjM0MTMzIDkuMDg5OTFDNC4xMTQ4NCA5LjI0Nzg5IDQuMDU5MzEgOS41NTk1NiA0LjIxNzI5IDkuNzg2MDVDNC45MzkyNiAxMC44MjExIDYuMTQwMzMgMTEuNSA3LjUwMDA0IDExLjVDOC44NTk3NCAxMS41IDEwLjA2MDggMTAuODIxMSAxMC43ODI4IDkuNzg2MDVDMTAuOTQwOCA5LjU1OTU2IDEwLjg4NTIgOS4yNDc4OSAxMC42NTg3IDkuMDg5OTFDMTAuNDMyMyA4LjkzMTkzIDEwLjEyMDYgOC45ODc0NiA5Ljk2MjYgOS4yMTM5NUM5LjQxOTYzIDkuOTkyMzggOC41MTkwNyAxMC41IDcuNTAwMDQgMTAuNUM2LjQ4MSAxMC41IDUuNTgwNDQgOS45OTIzOCA1LjAzNzQ3IDkuMjEzOTVaTTUuMzc1MDMgNi44NDk5OEM1Ljg1ODI4IDYuODQ5OTggNi4yNTAwMyA2LjQ1ODE1IDYuMjUwMDMgNS45NzQ5OEM2LjI1MDAzIDUuNDkxOCA1Ljg1ODI4IDUuMDk5OTggNS4zNzUwMyA1LjA5OTk4QzQuODkxNzkgNS4wOTk5OCA0LjUwMDAzIDUuNDkxOCA0LjUwMDAzIDUuOTc0OThDNC41MDAwMyA2LjQ1ODE1IDQuODkxNzkgNi44NDk5OCA1LjM3NTAzIDYuODQ5OThaTTEwLjUgNS45NzQ5OEMxMC41IDYuNDU4MTUgMTAuMTA4MyA2Ljg0OTk4IDkuNjI1MDMgNi44NDk5OEM5LjE0MTc5IDYuODQ5OTggOC43NTAwMyA2LjQ1ODE1IDguNzUwMDMgNS45NzQ5OEM4Ljc1MDAzIDUuNDkxOCA5LjE0MTc5IDUuMDk5OTggOS42MjUwMyA1LjA5OTk4QzEwLjEwODMgNS4wOTk5OCAxMC41IDUuNDkxOCAxMC41IDUuOTc0OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxNdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4wMDAwNSAyLjA0OTk5SDUuNTI1MDVDNC43MTA0MyAyLjA0OTk5IDQuMDUwMDUgMi43MTAzNyA0LjA1MDA1IDMuNTI0OTlDNC4wNTAwNSA0LjMzOTYxIDQuNzEwNDMgNC45OTk5OSA1LjUyNTA1IDQuOTk5OTlINy4wMDAwNVYyLjA0OTk5Wk03LjAwMDA1IDEuMDQ5OTlIOC4wMDAwNUg5LjQ3NTA1QzEwLjg0MiAxLjA0OTk5IDExLjk1IDIuMTU4MDggMTEuOTUgMy41MjQ5OUMxMS45NSA0LjMzMTYzIDExLjU2NDIgNS4wNDgxNSAxMC45NjY5IDUuNDk5OTlDMTEuNTY0MiA1Ljk1MTg0IDExLjk1IDYuNjY4MzYgMTEuOTUgNy40NzVDMTEuOTUgOC44NDE5IDEwLjg0MiA5Ljk1IDkuNDc1MDUgOS45NUM4LjkyMjM2IDkuOTUgOC40MTE5OCA5Ljc2ODg0IDguMDAwMDUgOS40NjI2NlY5Ljk1TDguMDAwMDUgMTEuNDI1QzguMDAwMDUgMTIuNzkxOSA2Ljg5MTk1IDEzLjkgNS41MjUwNSAxMy45QzQuMTU4MTQgMTMuOSAzLjA1MDA1IDEyLjc5MTkgMy4wNTAwNSAxMS40MjVDMy4wNTAwNSAxMC42MTgzIDMuNDM1OTMgOS45MDE4NCA0LjAzMzE3IDkuNDQ5OTlDMy40MzU5MyA4Ljk5ODE0IDMuMDUwMDUgOC4yODE2MyAzLjA1MDA1IDcuNDc1QzMuMDUwMDUgNi42NjgzNiAzLjQzNTk0IDUuOTUxODQgNC4wMzMxOSA1LjVDMy40MzU5NCA1LjA0ODE1IDMuMDUwMDUgNC4zMzE2MyAzLjA1MDA1IDMuNTI0OTlDMy4wNTAwNSAyLjE1ODA4IDQuMTU4MTQgMS4wNDk5OSA1LjUyNTA1IDEuMDQ5OTlINy4wMDAwNVpNOC4wMDAwNSAyLjA0OTk5VjQuOTk5OTlIOS40NzUwNUMxMC4yODk3IDQuOTk5OTkgMTAuOTUgNC4zMzk2MSAxMC45NSAzLjUyNDk5QzEwLjk1IDIuNzEwMzcgMTAuMjg5NyAyLjA0OTk5IDkuNDc1MDUgMi4wNDk5OUg4LjAwMDA1Wk01LjUyNTA1IDguOTQ5OThINy4wMDAwNUw3LjAwMDA1IDcuNDc4OEw3LjAwMDA1IDcuNDc1TDcuMDAwMDUgNy40NzEyVjZINS41MjUwNUM0LjcxMDQzIDYgNC4wNTAwNSA2LjY2MDM4IDQuMDUwMDUgNy40NzVDNC4wNTAwNSA4LjI4NzY3IDQuNzA3MjcgOC45NDY4NCA1LjUxOTIgOC45NDk5OUw1LjUyNTA1IDguOTQ5OThaTTQuMDUwMDUgMTEuNDI1QzQuMDUwMDUgMTAuNjEyMyA0LjcwNzI3IDkuOTUzMTUgNS41MTkyIDkuOTQ5OTlMNS41MjUwNSA5Ljk1SDcuMDAwMDVMNy4wMDAwNSAxMS40MjVDNy4wMDAwNSAxMi4yMzk2IDYuMzM5NjcgMTIuOSA1LjUyNTA1IDEyLjlDNC43MTA0MyAxMi45IDQuMDUwMDUgMTIuMjM5NiA0LjA1MDA1IDExLjQyNVpNOC4wMDAwNSA3LjQ3MjA2QzguMDAxNjQgNi42NTg3OSA4LjY2MTQxIDYgOS40NzUwNSA2QzEwLjI4OTcgNiAxMC45NSA2LjY2MDM4IDEwLjk1IDcuNDc1QzEwLjk1IDguMjg5NjIgMTAuMjg5NyA4Ljk1IDkuNDc1MDUgOC45NUM4LjY2MTQxIDguOTUgOC4wMDE2NCA4LjI5MTIxIDguMDAwMDUgNy40Nzc5NFY3LjQ3MjA2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNSAyQzMuMjIzODYgMiAzIDIuMjIzODYgMyAyLjVWMTIuNUMzIDEyLjc3NjEgMy4yMjM4NiAxMyAzLjUgMTNIMTEuNUMxMS43NzYxIDEzIDEyIDEyLjc3NjEgMTIgMTIuNVY2SDguNUM4LjIyMzg2IDYgOCA1Ljc3NjE0IDggNS41VjJIMy41Wk05IDIuNzA3MTFMMTEuMjkyOSA1SDlWMi43MDcxMVpNMiAyLjVDMiAxLjY3MTU3IDIuNjcxNTcgMSAzLjUgMUg4LjVDOC42MzI2MSAxIDguNzU5NzkgMS4wNTI2OCA4Ljg1MzU1IDEuMTQ2NDVMMTIuODUzNiA1LjE0NjQ1QzEyLjk0NzMgNS4yNDAyMSAxMyA1LjM2NzM5IDEzIDUuNVYxMi41QzEzIDEzLjMyODQgMTIuMzI4NCAxNCAxMS41IDE0SDMuNUMyLjY3MTU3IDE0IDIgMTMuMzI4NCAyIDEyLjVWMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sX3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgMi41QzMgMi4yMjM4NiAzLjIyMzg2IDIgMy41IDJIOS4yOTI4OUwxMiA0LjcwNzExVjEyLjVDMTIgMTIuNzc2MSAxMS43NzYxIDEzIDExLjUgMTNIMy41QzMuMjIzODYgMTMgMyAxMi43NzYxIDMgMTIuNVYyLjVaTTMuNSAxQzIuNjcxNTcgMSAyIDEuNjcxNTcgMiAyLjVWMTIuNUMyIDEzLjMyODQgMi42NzE1NyAxNCAzLjUgMTRIMTEuNUMxMi4zMjg0IDE0IDEzIDEzLjMyODQgMTMgMTIuNVY0LjYwMzU1QzEzIDQuNDA0NjQgMTIuOTIxIDQuMjEzODggMTIuNzgwMyA0LjA3MzIyTDkuODUzNTUgMS4xNDY0NUM5Ljc1OTc5IDEuMDUyNjggOS42MzI2MSAxIDkuNSAxSDMuNVpNNS4yNSA3QzQuOTczODYgNyA0Ljc1IDcuMjIzODYgNC43NSA3LjVDNC43NSA3Ljc3NjE0IDQuOTczODYgOCA1LjI1IDhIOS43NUMxMC4wMjYxIDggMTAuMjUgNy43NzYxNCAxMC4yNSA3LjVDMTAuMjUgNy4yMjM4NiAxMC4wMjYxIDcgOS43NSA3SDUuMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDJDMy4yMjM4NiAyIDMgMi4yMjM4NiAzIDIuNVYxMi41QzMgMTIuNzc2MSAzLjIyMzg2IDEzIDMuNSAxM0gxMS41QzExLjc3NjEgMTMgMTIgMTIuNzc2MSAxMiAxMi41VjQuNzA3MTFMOS4yOTI4OSAySDMuNVpNMiAyLjVDMiAxLjY3MTU3IDIuNjcxNTcgMSAzLjUgMUg5LjVDOS42MzI2MSAxIDkuNzU5NzkgMS4wNTI2OCA5Ljg1MzU1IDEuMTQ2NDVMMTIuNzgwMyA0LjA3MzIyQzEyLjkyMSA0LjIxMzg4IDEzIDQuNDA0NjQgMTMgNC42MDM1NVYxMi41QzEzIDEzLjMyODQgMTIuMzI4NCAxNCAxMS41IDE0SDMuNUMyLjY3MTU3IDE0IDIgMTMuMzI4NCAyIDEyLjVWMi41Wk00Ljc1IDcuNUM0Ljc1IDcuMjIzODYgNC45NzM4NiA3IDUuMjUgN0g3VjUuMjVDNyA0Ljk3Mzg2IDcuMjIzODYgNC43NSA3LjUgNC43NUM3Ljc3NjE0IDQuNzUgOCA0Ljk3Mzg2IDggNS4yNVY3SDkuNzVDMTAuMDI2MSA3IDEwLjI1IDcuMjIzODYgMTAuMjUgNy41QzEwLjI1IDcuNzc2MTQgMTAuMDI2MSA4IDkuNzUgOEg4VjkuNzVDOCAxMC4wMjYxIDcuNzc2MTQgMTAuMjUgNy41IDEwLjI1QzcuMjIzODYgMTAuMjUgNyAxMC4wMjYxIDcgOS43NVY4SDUuMjVDNC45NzM4NiA4IDQuNzUgNy43NzYxNCA0Ljc1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEV0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDIuNUMzIDIuMjIzODYgMy4yMjM4NiAyIDMuNSAySDkuMDg1NzlDOS4yMTgzOSAyIDkuMzQ1NTcgMi4wNTI2OCA5LjQzOTM0IDIuMTQ2NDVMMTEuODUzNiA0LjU2MDY2QzExLjk0NzMgNC42NTQ0MyAxMiA0Ljc4MTYxIDEyIDQuOTE0MjFWMTIuNUMxMiAxMi43NzYxIDExLjc3NjEgMTMgMTEuNSAxM0gzLjVDMy4yMjM4NiAxMyAzIDEyLjc3NjEgMyAxMi41VjIuNVpNMy41IDFDMi42NzE1NyAxIDIgMS42NzE1NyAyIDIuNVYxMi41QzIgMTMuMzI4NCAyLjY3MTU3IDE0IDMuNSAxNEgxMS41QzEyLjMyODQgMTQgMTMgMTMuMzI4NCAxMyAxMi41VjQuOTE0MjFDMTMgNC41MTYzOSAxMi44NDIgNC4xMzQ4NiAxMi41NjA3IDMuODUzNTVMMTAuMTQ2NCAxLjQzOTM0QzkuODY1MTQgMS4xNTgwNCA5LjQ4MzYxIDEgOS4wODU3OSAxSDMuNVpNNC41IDRDNC4yMjM4NiA0IDQgNC4yMjM4NiA0IDQuNUM0IDQuNzc2MTQgNC4yMjM4NiA1IDQuNSA1SDcuNUM3Ljc3NjE0IDUgOCA0Ljc3NjE0IDggNC41QzggNC4yMjM4NiA3Ljc3NjE0IDQgNy41IDRINC41Wk00LjUgN0M0LjIyMzg2IDcgNCA3LjIyMzg2IDQgNy41QzQgNy43NzYxNCA0LjIyMzg2IDggNC41IDhIMTAuNUMxMC43NzYxIDggMTEgNy43NzYxNCAxMSA3LjVDMTEgNy4yMjM4NiAxMC43NzYxIDcgMTAuNSA3SDQuNVpNNC41IDEwQzQuMjIzODYgMTAgNCAxMC4yMjM5IDQgMTAuNUM0IDEwLjc3NjEgNC4yMjM4NiAxMSA0LjUgMTFIMTAuNUMxMC43NzYxIDExIDExIDEwLjc3NjEgMTEgMTAuNUMxMSAxMC4yMjM5IDEwLjc3NjEgMTAgMTAuNSAxMEg0LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxqdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS4xMDUwNSAxMkM0LjcwODA1IDEyIDQuNDIzNiAxMS45MTIgNC4yNTE3MSAxMS43MzZDNC4wODM5IDExLjU1NTkgNCAxMS4yNzE1IDQgMTAuODgyN1Y0LjExNzMzQzQgMy43MjAzMyA0LjA4NTk1IDMuNDM1ODggNC4yNTc4NCAzLjI2Mzk4QzQuNDMzODMgMy4wODc5OSA0LjcxNjIzIDMgNS4xMDUwNSAzQzYuNDI3NDEgMyA4LjI1NTkxIDMgOS4wMjg1MiAzQzEwLjEzNzMgMyAxMS4wNTM5IDMuOTgxNTMgMTEuMDUzOSA1LjE4NDZDMTEuMDUzOSA2LjA4NTAxIDEwLjYwMzcgNi44MTg1NSA5LjcwMzI3IDcuMjM2MDJDMTAuODY1NyA3LjQ0ODUxIDExLjUxNzYgOC42Mjc4NyAxMS41MTc2IDkuNDgxMjhDMTEuNTE3NiAxMC41MTI1IDEwLjk5MDIgMTIgOS4yNzczNCAxMkM4Ljc3NzQyIDEyIDYuNDI2MjYgMTIgNS4xMDUwNSAxMlpNOC4zNzg5MSA4LjAwMzQxSDUuOFYxMC42MzFIOC4zNzg5MUM4LjkgMTAuNjMxIDkuNjI5NiAxMC4xMjExIDkuNjI5NiA5LjI5ODc3QzkuNjI5NiA4LjQ3NjQzIDguOSA4LjAwMzQxIDguMzc4OTEgOC4wMDM0MVpNNS44IDQuMzY5MDNWNi42OTU3N0g4LjE3OTY5QzguNTM5MDYgNi42OTU3NyA5LjI3NzM0IDYuMzU5MzkgOS4yNzczNCA1LjUwMDAyQzkuMjc3MzQgNC42NDA2NCA4LjQ4MDQ3IDQuMzY5MDMgOC4xNzk2OSA0LjM2OTAzSDUuOFpcIixmaWxsOm59KSl9LFJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjUgNC41QzIuNSAzLjA5ODg2IDMuNTk4ODYgMiA1IDJIMTIuNDk5QzEyLjc3NTIgMiAxMyAyLjIyMzg2IDEzIDIuNUMxMyAyLjc3NjE0IDEyLjc3NjEgMyAxMi41IDNIOC42OTI0NEw4LjQwNTA5IDMuODU0NThDOC4xODg2OSA0LjQ5NzUyIDcuODk0MDEgNS4zNzE5NyA3LjU4MDkxIDYuMjk3OTRDNy41MDI1OSA2LjUyOTU2IDcuNDIzMDggNi43NjQ1MyA3LjM0MzMyIDdIOC41QzguNzc2MTQgNyA5IDcuMjIzODYgOSA3LjVDOSA3Ljc3NjE0IDguNzc2MTQgOCA4LjUgOEg3LjAwNDA3QzYuNTY3MjQgOS4yODU0MyA2LjE2NDM1IDEwLjQ2MTMgNS45NTc5OSAxMS4wMzg2QzUuNjM2MjcgMTEuOTM4NiA1LjIwNzEyIDEyLjQ4NTcgNC42Njc0MSAxMi43Nzc4QzQuMTYzMzUgMTMuMDUwNyAzLjY0MTU0IDEzLjA1MDMgMy4yODM3OCAxMy4wNUwzLjI1IDEzLjA1QzIuOTQ2MjQgMTMuMDUgMi43IDEyLjgwMzcgMi43IDEyLjVDMi43IDEyLjE5NjIgMi45NDYyNCAxMS45NSAzLjI1IDExLjk1QzMuNjQxODIgMTEuOTUgMy45MDM1IDExLjk0MDUgNC4xNDM3NCAxMS44MTA1QzQuMzY0NDMgMTEuNjkxIDQuNjU1MzIgMTEuNDE0OCA0LjkyMjE3IDEwLjY2ODNDNS4xMDY5NSAxMC4xNTE0IDUuNDUzNzUgOS4xNDEzNCA1Ljg0MjIgOEg0LjVDNC4yMjM4NiA4IDQgNy43NzYxNCA0IDcuNUM0IDcuMjIzODYgNC4yMjM4NiA3IDQuNSA3SDYuMTgxODdDNi4zMDEyNyA2LjY0Nzg1IDYuNDIxMzIgNi4yOTMyMyA2LjUzODg3IDUuOTQ1NTlDNi44NTE3NSA1LjAyMDI1IDcuMTQ2MjcgNC4xNDYzMSA3LjM2MjU2IDMuNTAzNjhMNy41MzE5MiAzSDVDNC4xNTExNCAzIDMuNSAzLjY1MTE0IDMuNSA0LjVDMy41IDQuNzc2MTQgMy4yNzYxNCA1IDMgNUMyLjcyMzg2IDUgMi41IDQuNzc2MTQgMi41IDQuNVpcIixmaWxsOm59KSl9LEl0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjY3NDk0IDMuNTAwMTdDNS42NzQ5NCAzLjI1MTY0IDUuODc2NDEgMy4wNTAxNyA2LjEyNDk0IDMuMDUwMTdIMTAuNjI0OUMxMC44NzM1IDMuMDUwMTcgMTEuMDc0OSAzLjI1MTY0IDExLjA3NDkgMy41MDAxN0MxMS4wNzQ5IDMuNzQ4NyAxMC44NzM1IDMuOTUwMTcgMTAuNjI0OSAzLjk1MDE3SDkuMDA1ODdMNy4yMzA5IDExLjA1SDguODc0OTNDOS4xMjM0NSAxMS4wNSA5LjMyNDkzIDExLjI1MTUgOS4zMjQ5MyAxMS41QzkuMzI0OTMgMTEuNzQ4NiA5LjEyMzQ1IDExLjk1IDguODc0OTMgMTEuOTVINC4zNzQ5M0M0LjEyNjQgMTEuOTUgMy45MjQ5MyAxMS43NDg2IDMuOTI0OTMgMTEuNUMzLjkyNDkzIDExLjI1MTUgNC4xMjY0IDExLjA1IDQuMzc0OTMgMTEuMDVINS45OTM5N0w3Ljc2ODk0IDMuOTUwMTdINi4xMjQ5NEM1Ljg3NjQxIDMuOTUwMTcgNS42NzQ5NCAzLjc0ODcgNS42NzQ5NCAzLjUwMDE3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNzk5OTMgMy41MDAxN0M0Ljc5OTkzIDMuMjUxNjQgNS4wMDE0IDMuMDUwMTcgNS4yNDk5MyAzLjA1MDE3SDkuNzQ5OTNDOS45OTg0NSAzLjA1MDE3IDEwLjE5OTkgMy4yNTE2NCAxMC4xOTk5IDMuNTAwMTdDMTAuMTk5OSAzLjc0ODcgOS45OTg0NSAzLjk1MDE3IDkuNzQ5OTMgMy45NTAxN0g4LjA5OTkzVjExLjA1SDkuNzQ5OTRDOS45OTg0NyAxMS4wNSAxMC4xOTk5IDExLjI1MTUgMTAuMTk5OSAxMS41QzEwLjE5OTkgMTEuNzQ4NiA5Ljk5ODQ3IDExLjk1IDkuNzQ5OTQgMTEuOTVINS4yNDk5NEM1LjAwMTQxIDExLjk1IDQuNzk5OTQgMTEuNzQ4NiA0Ljc5OTk0IDExLjVDNC43OTk5NCAxMS4yNTE1IDUuMDAxNDEgMTEuMDUgNS4yNDk5NCAxMS4wNUg2Ljg5OTkzVjMuOTUwMTdINS4yNDk5M0M1LjAwMTQgMy45NTAxNyA0Ljc5OTkzIDMuNzQ4NyA0Ljc5OTkzIDMuNTAwMTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi43ODIzMyAyLjIxNzA3QzIuNzA3MzIgMi4xNDIwNiAyLjYwNTU3IDIuMDk5OTEgMi40OTk0OSAyLjA5OTkxQzIuMzkzNCAyLjA5OTkxIDIuMjkxNjYgMi4xNDIwNiAyLjIxNjY0IDIuMjE3MDdMMC4yMTY2NDUgNC4yMTcwN0MwLjA2MDQzNTEgNC4zNzMyOCAwLjA2MDQzNTEgNC42MjY1NSAwLjIxNjY0NSA0Ljc4Mjc2QzAuMzcyODU1IDQuOTM4OTcgMC42MjYxMjEgNC45Mzg5NyAwLjc4MjMzIDQuNzgyNzZMMi4wOTk0OSAzLjQ2NTZMMi4wOTk0OSAxMS41MzQyTDAuNzgyMzMgMTAuMjE3MUMwLjYyNjEyIDEwLjA2MDkgMC4zNzI4NTQgMTAuMDYwOSAwLjIxNjY0NSAxMC4yMTcxQzAuMDYwNDM0OSAxMC4zNzMzIDAuMDYwNDM0OSAxMC42MjY1IDAuMjE2NjQ1IDEwLjc4MjhMMi4yMTY2NCAxMi43ODI4QzIuMjkxNjYgMTIuODU3OCAyLjM5MzQgMTIuODk5OSAyLjQ5OTQ5IDEyLjg5OTlDMi42MDU1NyAxMi44OTk5IDIuNzA3MzEgMTIuODU3OCAyLjc4MjMzIDEyLjc4MjhMNC43ODIzMyAxMC43ODI4QzQuOTM4NTQgMTAuNjI2NSA0LjkzODU0IDEwLjM3MzMgNC43ODIzMyAxMC4yMTcxQzQuNjI2MTIgMTAuMDYwOSA0LjM3Mjg1IDEwLjA2MDkgNC4yMTY2NCAxMC4yMTcxTDIuODk5NDkgMTEuNTM0MkwyLjg5OTQ5IDMuNDY1Nkw0LjIxNjY0IDQuNzgyNzZDNC4zNzI4NSA0LjkzODk3IDQuNjI2MTIgNC45Mzg5NyA0Ljc4MjMzIDQuNzgyNzZDNC45Mzg1NCA0LjYyNjU1IDQuOTM4NTQgNC4zNzMyOCA0Ljc4MjMzIDQuMjE3MDdMMi43ODIzMyAyLjIxNzA3Wk0xMC41IDIuNzQ5OTdDMTAuNzEwNyAyLjc0OTk3IDEwLjg5ODggMi44ODIxMSAxMC45NzAzIDMuMDgwMzZMMTMuOTcwMyAxMS4zOTk5QzE0LjA2NCAxMS42NTk3IDEzLjkyOTMgMTEuOTQ2MiAxMy42Njk2IDEyLjAzOTlDMTMuNDA5OCAxMi4xMzM2IDEzLjEyMzMgMTEuOTk4OSAxMy4wMjk2IDExLjczOTJMMTIuMDQ3NyA5LjAxNkg4Ljk1MjI4TDcuOTcwMzMgMTEuNzM5MkM3Ljg3NjY2IDExLjk5ODkgNy41OTAxMyAxMi4xMzM2IDcuMzMwMzYgMTIuMDM5OUM3LjA3MDU5IDExLjk0NjIgNi45MzU5NSAxMS42NTk3IDcuMDI5NjIgMTEuMzk5OUwxMC4wMjk2IDMuMDgwMzZDMTAuMTAxMSAyLjg4MjExIDEwLjI4OTIgMi43NDk5NyAxMC41IDIuNzQ5OTdaTTEwLjUgNC43MjM5NkwxMS43NDEyIDguMTY2SDkuMjU4NzlMMTAuNSA0LjcyMzk2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuMDM3OTEgOS45ODA3NUMwLjkzNDc3NyA5LjY1ODMgMS4xMTYwMyA5LjM3NzE5IDEuNDAwMDUgOS4yNDg3MUMxLjY4NDA4IDkuMTIwMjIgMi4wOTQ2MyA5LjEzNDEyIDIuMjcwNzEgOS40NTQyNkMyLjg1MzkzIDEwLjUxNDcgMy42NDU5OSAxMC43MjgyIDQuNDg2NjUgMTAuNzI4MkM1LjUyNzIxIDEwLjcyODIgNi4yOTY1OSAxMC4yNjE1IDYuMjk2NTkgOS40NTQyNkM2LjI5NjU5IDguODA0NyA1LjkxMTkgOC40NjQxNiA0Ljg3MTM0IDguMTQyNTNMNC4xNTg3MiA3LjkyMTgxQzIuNjQ1MTggNy40NDg4MyAxLjg4ODQyIDYuNjkyMDYgMS44ODg0MiA1LjQ1NjAxQzEuODg4NDIgMy43OTc0MyAzLjI3NTgzIDIuNjg3NSA1LjI0MzQyIDIuNjg3NUM2LjkxNzMzIDIuNjg3NSA3Ljk3NDA5IDMuMzM1MzYgOC40MzgzMyA0LjMxMDY1QzguNTcwODcgNC41ODkwOSA4LjU3NjE0IDQuOTEyOTQgOC4yMjc5NCA1LjE5MTE0QzcuODc5NzQgNS40NjkzNCA3LjUyMzUxIDUuMzQ3OTkgNy4yMzMyNyA1LjAzODM5QzYuNDcyMTUgNC4yMjY1MyA1Ljk5NTQ1IDQuMDQ5NjggNS4yNTYwNCA0LjA0OTY4QzQuMTM5OCA0LjA0OTY4IDMuNTQ3IDQuNjM2MTggMy41NDcgNS4yNzk0M0MzLjU0NyA1Ljg2NTkyIDMuOTYzMjIgNi4yMzE2OSA0Ljk0NzAyIDYuNTM0NEw1LjY3ODU2IDYuNzYxNDNDNy4yMjk5NCA3LjIzNDQxIDcuOTc0MDkgNy45NTk2NCA3Ljk3NDA5IDkuMTcwNDdDNy45NzQwOSAxMC43NzIzIDYuNjkzODkgMTIuMDkwMyA0LjQ2MTQzIDEyLjA5MDNDMi44NjYxMiAxMi4wOTAzIDEuNDAwMDUgMTEuMTEzMSAxLjAzNzkxIDkuOTgwNzVaTTExLjg0OTEgOC43Nzk4NUMxMC42NjEgOC4zOTU0MyAxMC4xNjQ5IDcuODYxMTQgMTAuMTY0OSA2Ljk4ODA1QzEwLjE2NDkgNS44NjczNiAxMS4xNjM2IDUuMDQ2MzkgMTIuNjEyOCA1LjA0NjM5QzEzLjg1NDYgNS4wNDYzOSAxNC42NjI5IDUuNjMzNDUgMTQuOTc3OCA2LjYzNDZDMTUuMDQ0MyA2Ljg0NTk5IDE0Ljk1OTMgNi45ODAwNiAxNC43NDc1IDcuMDQ5MUMxNC41Mzk0IDcuMTE2OTcgMTQuMzE3NiA3LjA5OTc0IDE0LjIzOCA2Ljg5NjExQzEzLjkzNTYgNi4xMjI3MyAxMy4zNTIgNS43NjMxMSAxMi41OTk4IDUuNzYzMTFDMTEuNjQ2NyA1Ljc2MzExIDExLjAxMzUgNi4yNTE3OCAxMS4wMTM1IDYuOTE2MzhDMTEuMDEzNSA3LjQ1MDY2IDExLjM0NjQgNy43NTAzOCAxMi4yNDczIDguMDQzNThMMTIuODM0OCA4LjIzMjU0QzE0LjA2MiA4LjYyOTk5IDE0LjU1MTYgOS4xMzgyMSAxNC41NTE2IDEwLjAxNzhDMTQuNTUxNiAxMS4xOTcyIDEzLjQ4MSAxMi4wNDQyIDExLjk5MjcgMTIuMDQ0MkMxMC42NDM5IDEyLjA0NDIgOS42NTY0NCAxMS4yODA5IDkuNDE5NzkgMTAuMzM2MUM5LjM2NTM1IDEwLjExODggOS40MTE5MiAxMC4wMjg3IDkuNzAwMzkgOS45NjE4NEM5Ljk4ODg2IDkuODk0OTkgMTAuMDcxNCA5Ljg5OTE4IDEwLjE3MTUgMTAuMTM2OUMxMC40NTU1IDEwLjgxMTQgMTEuMTUzMSAxMS4zMjc1IDEyLjAzMTggMTEuMzI3NUMxMi45OTE0IDExLjMyNzUgMTMuNjgzNCAxMC43ODAyIDEzLjY4MzQgMTAuMDYzNEMxMy42ODM0IDkuNTM1NjcgMTMuMzk2MSA5LjI4ODA3IDEyLjQzNjYgOC45NzUzMkwxMS44NDkxIDguNzc5ODVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxUdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEgMS41QzExIDEuMjIzODYgMTAuNzc2MSAxIDEwLjUgMUMxMC4yMjM5IDEgMTAgMS4yMjM4NiAxMCAxLjVWNEg1VjEuNUM1IDEuMjIzODYgNC43NzYxNCAxIDQuNSAxQzQuMjIzODYgMSA0IDEuMjIzODYgNCAxLjVWNEgxLjVDMS4yMjM4NiA0IDEgNC4yMjM4NiAxIDQuNUMxIDQuNzc2MTQgMS4yMjM4NiA1IDEuNSA1SDRWMTBIMS41QzEuMjIzODYgMTAgMSAxMC4yMjM5IDEgMTAuNUMxIDEwLjc3NjEgMS4yMjM4NiAxMSAxLjUgMTFINFYxMy41QzQgMTMuNzc2MSA0LjIyMzg2IDE0IDQuNSAxNEM0Ljc3NjE0IDE0IDUgMTMuNzc2MSA1IDEzLjVWMTFIMTBWMTMuNUMxMCAxMy43NzYxIDEwLjIyMzkgMTQgMTAuNSAxNEMxMC43NzYxIDE0IDExIDEzLjc3NjEgMTEgMTMuNVYxMUgxMy41QzEzLjc3NjEgMTEgMTQgMTAuNzc2MSAxNCAxMC41QzE0IDEwLjIyMzkgMTMuNzc2MSAxMCAxMy41IDEwSDExVjVIMTMuNUMxMy43NzYxIDUgMTQgNC43NzYxNCAxNCA0LjVDMTQgNC4yMjM4NiAxMy43NzYxIDQgMTMuNSA0SDExVjEuNVpNMTAgMTBWNUg1VjEwSDEwWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMzgyNSAxLjI5NTY3QzMuNDYyNDEgMS4xMTQzMiAzLjY0MTg4IDAuOTk3Mjg0IDMuODQwMDUgMC45OTcyODRIMTEuNUMxMS43NzYxIDAuOTk3Mjg0IDEyIDEuMjIxMTQgMTIgMS40OTcyOFY1LjVDMTIgNS43NzYxNCAxMS43NzYxIDYgMTEuNSA2SDguNjM1MjFMMTEuNTI4OCA5LjE2MjQ3QzExLjY2MjYgOS4zMDg3IDExLjY5NzQgOS41MjAxNSAxMS42MTc1IDkuNzAxNTRDMTEuNTM3NiA5Ljg4MjkzIDExLjM1ODIgMTAgMTEuMTYgMTBIOFYxMy41QzggMTMuNzAyMiA3Ljg3ODE4IDEzLjg4NDUgNy42OTEzNCAxMy45NjE5QzcuNTA0NSAxNC4wMzkzIDcuMjg5NDUgMTMuOTk2NiA3LjE0NjQ1IDEzLjg1MzZMMy4xNDY0NSA5Ljg1MzU1QzMuMDUyNjggOS43NTk3OSAzIDkuNjMyNjEgMyA5LjVWNS41QzMgNS4yMjM4NiAzLjIyMzg2IDUgMy41IDVINi4zNjUzMUwzLjQ3MTA1IDEuODM0NjhDMy4zMzczMiAxLjY4ODQ0IDMuMzAyNTkgMS40NzcwMSAzLjM4MjUgMS4yOTU2N1pNNy43MjAzMiA1TDQuOTc0NzQgMS45OTcyOEgxMVY1SDcuNzIwMzJaTTcuMjc5NzggNkg0VjlINy41SDEwLjAyNDdMNy4yNzk3OCA2Wk00LjcwNzExIDEwTDcgMTIuMjkyOVYxMEg0LjcwNzExWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMDcwOTUgMC42NTAyMzhDNi42NzM5MSAwLjY1MDIzOCA2LjMyOTc3IDAuOTI1MDk2IDYuMjQxOTggMS4zMTIzMUw2LjAwMzkgMi4zNjI0N0M1LjYyNDkgMi40NzI2OSA1LjI2MzM1IDIuNjIzNjMgNC45MjQzNiAyLjgxMDEzTDQuMDEzMzUgMi4yMzU4NUMzLjY3NzQ4IDIuMDI0MTMgMy4yMzk3OCAyLjA3MzEyIDIuOTU5MDMgMi4zNTM4NkwyLjM1Mjk0IDIuOTU5OTZDMi4wNzIyIDMuMjQwNyAyLjAyMzIgMy42Nzg0IDIuMjM0OTMgNC4wMTQyN0wyLjgwOTQyIDQuOTI1NjFDMi42MjMwNyA1LjI2NDUgMi40NzIyNyA1LjYyNTk0IDIuMzYyMTYgNi4wMDQ4MUwxLjMxMjA5IDYuMjQyODdDMC45MjQ4ODMgNi4zMzA2NSAwLjY1MDAyNCA2LjY3NDggMC42NTAwMjQgNy4wNzE4M1Y3LjkyODk3QzAuNjUwMDI0IDguMzI2MDEgMC45MjQ4ODMgOC42NzAxNSAxLjMxMjA5IDguNzU3OTRMMi4zNjIyOCA4Ljk5NjAzQzIuNDcyNDYgOS4zNzUgMi42MjMzNSA5LjczNjUyIDIuODA5NzkgMTAuMDc1NUwyLjIzNTQgMTAuOTg2N0MyLjAyMzY3IDExLjMyMjUgMi4wNzI2NyAxMS43NjAyIDIuMzUzNDEgMTIuMDQxTDIuOTU5NTEgMTIuNjQ3MUMzLjI0MDI1IDEyLjkyNzggMy42Nzc5NSAxMi45NzY4IDQuMDEzODIgMTIuNzY1MUw0LjkyNTA2IDEyLjE5MDdDNS4yNjM4NCAxMi4zNzcgNS42MjUxNiAxMi41Mjc4IDYuMDAzOSAxMi42Mzc5TDYuMjQxOTggMTMuNjg4MUM2LjMyOTc3IDE0LjA3NTMgNi42NzM5MSAxNC4zNTAyIDcuMDcwOTUgMTQuMzUwMkg3LjkyODA5QzguMzI1MTIgMTQuMzUwMiA4LjY2OTI3IDE0LjA3NTMgOC43NTcwNSAxMy42ODgxTDguOTk1MDUgMTIuNjM4M0M5LjM3NDExIDEyLjUyODIgOS43MzU3MyAxMi4zNzczIDEwLjA3NDggMTIuMTkwOUwxMC45ODYgMTIuNzY1M0MxMS4zMjE4IDEyLjk3NyAxMS43NTk1IDEyLjkyOCAxMi4wNDAzIDEyLjY0NzNMMTIuNjQ2NCAxMi4wNDEyQzEyLjkyNzEgMTEuNzYwNCAxMi45NzYxIDExLjMyMjcgMTIuNzY0NCAxMC45ODY5TDEyLjE5MDIgMTAuMDc2QzEyLjM3NjggOS43MzY4OCAxMi41Mjc4IDkuMzc1MTUgMTIuNjM4IDguOTk1OTZMMTMuNjg3OSA4Ljc1Nzk0QzE0LjA3NTEgOC42NzAxNSAxNC4zNSA4LjMyNjAxIDE0LjM1IDcuOTI4OTdWNy4wNzE4M0MxNC4zNSA2LjY3NDggMTQuMDc1MSA2LjMzMDY1IDEzLjY4NzkgNi4yNDI4N0wxMi42MzgxIDYuMDA0ODhDMTIuNTI4IDUuNjI1NzggMTIuMzc3MSA1LjI2NDE0IDEyLjE5MDYgNC45MjUwN0wxMi43NjQ4IDQuMDE0MDdDMTIuOTc2NiAzLjY3ODIgMTIuOTI3NiAzLjI0MDUgMTIuNjQ2OCAyLjk1OTc1TDEyLjA0MDcgMi4zNTM2NkMxMS43NiAyLjA3MjkyIDExLjMyMjMgMi4wMjM5MiAxMC45ODY0IDIuMjM1NjVMMTAuMDc1NSAyLjgwOTg5QzkuNzM2MjIgMi42MjMyOCA5LjM3NDM3IDIuNDcyMjkgOC45OTUwNSAyLjM2MjA5TDguNzU3MDUgMS4zMTIzMUM4LjY2OTI3IDAuOTI1MDk2IDguMzI1MTIgMC42NTAyMzggNy45MjgwOSAwLjY1MDIzOEg3LjA3MDk1Wk00LjkyMDUzIDMuODEyNTFDNS40NDcyNCAzLjQ0MzM5IDYuMDU2NjUgMy4xODQyNCA2LjcxNTQzIDMuMDY4MzlMNy4wNzA5NSAxLjUwMDI0SDcuOTI4MDlMOC4yODM1NSAzLjA2ODE2QzguOTQyNjcgMy4xODM4NyA5LjU1MjQgMy40NDMwMiAxMC4wNzk0IDMuODEyMjRMMTEuNDM5NyAyLjk1NDdMMTIuMDQ1OCAzLjU2MDc5TDExLjE4ODIgNC45MjExN0MxMS41NTczIDUuNDQ3OTggMTEuODE2NCA2LjA1NzUgMTEuOTMyMSA2LjcxNjM4TDEzLjUgNy4wNzE4M1Y3LjkyODk3TDExLjkzMiA4LjI4NDQ0QzExLjgxNjIgOC45NDM0MiAxMS41NTcgOS41NTMwMSAxMS4xODc4IDEwLjA3OThMMTIuMDQ1MyAxMS40NDAyTDExLjQzOTIgMTIuMDQ2MkwxMC4wNzg3IDExLjE4ODZDOS41NTE5MiAxMS41NTc2IDguOTQyNDEgMTEuODE2NiA4LjI4MzU1IDExLjkzMjNMNy45MjgwOSAxMy41MDAySDcuMDcwOTVMNi43MTU0MyAxMS45MzJDNi4wNTY5IDExLjgxNjIgNS40NDc3MiAxMS41NTcyIDQuOTIxMTYgMTEuMTg4M0wzLjU2MDU1IDEyLjA0NkwyLjk1NDQ1IDExLjQzOTlMMy44MTIxMyAxMC4wNzk0QzMuNDQzMSA5LjU1MjY2IDMuMTg0MDMgOC45NDMyNiAzLjA2ODI1IDguMjg0NUwxLjUwMDAyIDcuOTI4OTdWNy4wNzE4M0wzLjA2ODE4IDYuNzE2MzJDMy4xODM4OCA2LjA1NzY1IDMuNDQyODMgNS40NDgzMyAzLjgxMTcxIDQuOTIxNjVMMi45NTM5OCAzLjU2MUwzLjU2MDA4IDIuOTU0OTFMNC45MjA1MyAzLjgxMjUxWk05LjAyNDk2IDcuNTAwMDhDOS4wMjQ5NiA4LjM0MjI2IDguMzQyMjMgOS4wMjQ5OSA3LjUwMDA1IDkuMDI0OTlDNi42NTc4NiA5LjAyNDk5IDUuOTc1MTMgOC4zNDIyNiA1Ljk3NTEzIDcuNTAwMDhDNS45NzUxMyA2LjY1Nzg5IDYuNjU3ODYgNS45NzUxNiA3LjUwMDA1IDUuOTc1MTZDOC4zNDIyMyA1Ljk3NTE2IDkuMDI0OTYgNi42NTc4OSA5LjAyNDk2IDcuNTAwMDhaTTkuOTI0OTYgNy41MDAwOEM5LjkyNDk2IDguODM5MzIgOC44MzkyOSA5LjkyNDk5IDcuNTAwMDUgOS45MjQ5OUM2LjE2MDggOS45MjQ5OSA1LjA3NTEzIDguODM5MzIgNS4wNzUxMyA3LjUwMDA4QzUuMDc1MTMgNi4xNjA4NCA2LjE2MDggNS4wNzUxNiA3LjUwMDA1IDUuMDc1MTZDOC44MzkyOSA1LjA3NTE2IDkuOTI0OTYgNi4xNjA4NCA5LjkyNDk2IDcuNTAwMDhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxadD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTkzNiAwLjg1MDAwNkMzLjgyNzY3IDAuODUwMDA2IDAuODQ5OTc2IDMuODI3MyAwLjg0OTk3NiA3LjUwMDIzQzAuODQ5OTc2IDEwLjQzNzkgMi43NTUyMyAxMi45MzA2IDUuMzk3NzUgMTMuODEwNEM1LjczMDQ3IDEzLjg3MTIgNS44NTE3MSAxMy42NjU4IDUuODUxNzEgMTMuNDg5NUM1Ljg1MTcxIDEzLjMzMTUgNS44NDYgMTIuOTEzNSA1Ljg0MjczIDEyLjM1ODdDMy45OTMwMSAxMi43NjA0IDMuNjAyNzMgMTEuNDY3MSAzLjYwMjczIDExLjQ2NzFDMy4zMDAyMiAxMC42OTg4IDIuODY0MjMgMTAuNDk0MiAyLjg2NDIzIDEwLjQ5NDJDMi4yNjA0NCAxMC4wODE5IDIuOTA5OTUgMTAuMDkwMSAyLjkwOTk1IDEwLjA5MDFDMy41Nzc0MiAxMC4xMzcgMy45Mjg1IDEwLjc3NTUgMy45Mjg1IDEwLjc3NTVDNC41MjE2NyAxMS43OTE2IDUuNDg1MTIgMTEuNDk4MSA1Ljg2Mzk2IDExLjMyNzlDNS45MjQzOCAxMC44OTg0IDYuMDk2MjUgMTAuNjA1MyA2LjI4NjA4IDEwLjQzOTFDNC44MDk0OCAxMC4yNzA5IDMuMjU2OTUgOS43MDA2MyAzLjI1Njk1IDcuMTUyNDFDMy4yNTY5NSA2LjQyNjE1IDMuNTE2MTggNS44MzI5OCAzLjk0MTU3IDUuMzY4QzMuODcyOTkgNS4xOTk4IDMuNjQ0NzggNC41MjM3NSA0LjAwNjg5IDMuNjA4MDdDNC4wMDY4OSAzLjYwODA3IDQuNTY0OTQgMy40MjkyNiA1LjgzNTM4IDQuMjg5NDFDNi4zNjU2OCA0LjE0MjA0IDYuOTM0NzcgNC4wNjg1NiA3LjUwMDE4IDQuMDY1N0M4LjA2NTE4IDQuMDY4NTYgOC42MzM4NiA0LjE0MjA0IDkuMTY0OTggNC4yODk0MUMxMC40MzQ2IDMuNDI5MjYgMTAuOTkxOCAzLjYwODA3IDEwLjk5MTggMy42MDgwN0MxMS4zNTQ4IDQuNTIzNzUgMTEuMTI2NiA1LjE5OTggMTEuMDU4NCA1LjM2OEMxMS40ODQ2IDUuODMyOTggMTEuNzQxOCA2LjQyNjE1IDExLjc0MTggNy4xNTI0MUMxMS43NDE4IDkuNzA3MTYgMTAuMTg2OCAxMC4yNjkzIDguNzA1NzEgMTAuNDMzOEM4Ljk0NDEyIDEwLjYzOTIgOS4xNTY4MSAxMS4wNDUgOS4xNTY4MSAxMS42NjU1QzkuMTU2ODEgMTIuNTU0MiA5LjE0ODY1IDEzLjI3MTUgOS4xNDg2NSAxMy40ODk1QzkuMTQ4NjUgMTMuNjY3NSA5LjI2ODY3IDEzLjg3NDUgOS42MDU4OCAxMy44MDk1QzEyLjI0NjQgMTIuOTI4MiAxNC4xNSAxMC40Mzc1IDE0LjE1IDcuNTAwMjNDMTQuMTUgMy44MjczIDExLjE3MjMgMC44NTAwMDYgNy40OTkzNiAwLjg1MDAwNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LCR0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTk2IDEuODAwMDJDNC4zNTE5NCAxLjgwMDAyIDEuNzk5OTYgNC4zNTIgMS43OTk5NiA3LjUwMDAyQzEuNzk5OTYgMTAuNjQ4IDQuMzUxOTQgMTMuMiA3LjQ5OTk2IDEzLjJDMTAuNjQ4IDEzLjIgMTMuMiAxMC42NDggMTMuMiA3LjUwMDAyQzEzLjIgNC4zNTIgMTAuNjQ4IDEuODAwMDIgNy40OTk5NiAxLjgwMDAyWk0wLjg5OTk2MyA3LjUwMDAyQzAuODk5OTYzIDMuODU0OTQgMy44NTQ4OCAwLjkwMDAyNCA3LjQ5OTk2IDAuOTAwMDI0QzExLjE0NSAwLjkwMDAyNCAxNC4xIDMuODU0OTQgMTQuMSA3LjUwMDAyQzE0LjEgMTEuMTQ1MSAxMS4xNDUgMTQuMSA3LjQ5OTk2IDE0LjFDMy44NTQ4OCAxNC4xIDAuODk5OTYzIDExLjE0NTEgMC44OTk5NjMgNy41MDAwMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjQ5OTkgNy44OTk5OEgxLjQ5OTk0VjcuMDk5OThIMTMuNDk5OVY3Ljg5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4wOTk5MSAxMy41VjEuNUg3Ljg5OTkxVjEzLjVINy4wOTk5MXpNMTAuMzc1IDcuNDk5OThDMTAuMzc1IDUuMzI3MjQgOS41OTM2NCAzLjE3Nzc4IDguMDYxODMgMS43NTY1Nkw4LjUzNzkzIDEuMjQzNDFDMTAuMjM5NiAyLjgyMjE4IDExLjA3NSA1LjE3MjczIDExLjA3NSA3LjQ5OTk4IDExLjA3NSA5LjgyNzI0IDEwLjIzOTYgMTIuMTc3OCA4LjUzNzkzIDEzLjc1NjZMOC4wNjE4MyAxMy4yNDM0QzkuNTkzNjQgMTEuODIyMiAxMC4zNzUgOS42NzI3MyAxMC4zNzUgNy40OTk5OHpNMy45OTk2OSA3LjVDMy45OTk2OSA1LjE3NjExIDQuODA3ODYgMi44MjY3OCA2LjQ1NzY4IDEuMjQ3MTlMNi45NDE3NyAxLjc1MjgxQzUuNDU4MiAzLjE3MzIzIDQuNjk5NjkgNS4zMjM4OSA0LjY5OTY5IDcuNSA0LjY5OTcgOS42NzYxMSA1LjQ1ODIyIDExLjgyNjggNi45NDE3OSAxMy4yNDcyTDYuNDU3NjkgMTMuNzUyOEM0LjgwNzg4IDEyLjE3MzIgMy45OTk3IDkuODIzOSAzLjk5OTY5IDcuNXpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTYgMy45NTgwMUM5LjY2OTI4IDMuOTU4MDEgMTEuODc1MyA0LjM1OTE1IDEzLjM3MDYgNS4xOTQ0OCAxMy41Mzk0IDUuMjg4NzUgMTMuNTk5OCA1LjUwMTk3IDEzLjUwNTUgNS42NzA3MyAxMy40MTEzIDUuODM5NDggMTMuMTk4IDUuODk5ODcgMTMuMDI5MyA1LjgwNTYgMTEuNjc5NCA1LjA1MTU1IDkuNjA3OTkgNC42NTgwMSA3LjQ5OTk2IDQuNjU4MDEgNS4zOTE5MiA0LjY1ODAxIDMuMzIwNTIgNS4wNTE1NSAxLjk3MDY0IDUuODA1NiAxLjgwMTg4IDUuODk5ODcgMS41ODg2NiA1LjgzOTQ4IDEuNDk0MzkgNS42NzA3MyAxLjQwMDEzIDUuNTAxOTcgMS40NjA1MSA1LjI4ODc1IDEuNjI5MjcgNS4xOTQ0OCAzLjEyNDY2IDQuMzU5MTUgNS4zMzA2MyAzLjk1ODAxIDcuNDk5OTYgMy45NTgwMXpNNy40OTk5NiAxMC44NUM5LjY2OTI4IDEwLjg1IDExLjg3NTMgMTAuNDQ4OCAxMy4zNzA2IDkuNjEzNSAxMy41Mzk0IDkuNTE5MjQgMTMuNTk5OCA5LjMwNjAxIDEzLjUwNTUgOS4xMzcyNiAxMy40MTEzIDguOTY4NSAxMy4xOTggOC45MDgxMiAxMy4wMjkzIDkuMDAyMzggMTEuNjc5NCA5Ljc1NjQzIDkuNjA3OTkgMTAuMTUgNy40OTk5NiAxMC4xNSA1LjM5MTkyIDEwLjE1IDMuMzIwNTIgOS43NTY0MyAxLjk3MDY0IDkuMDAyMzkgMS44MDE4OCA4LjkwODEyIDEuNTg4NjYgOC45Njg1IDEuNDk0MzkgOS4xMzcyNiAxLjQwMDEzIDkuMzA2MDEgMS40NjA1MSA5LjUxOTI0IDEuNjI5MjcgOS42MTM1IDMuMTI0NjYgMTAuNDQ4OCA1LjMzMDYzIDEwLjg1IDcuNDk5OTYgMTAuODV6XCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxOdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuNSAySDhWN0gxM1YyLjVDMTMgMi4yMjM4NiAxMi43NzYxIDIgMTIuNSAyWk0xMyA4SDhWMTNIMTIuNUMxMi43NzYxIDEzIDEzIDEyLjc3NjEgMTMgMTIuNVY4Wk03IDdWMkgyLjVDMi4yMjM4NiAyIDIgMi4yMjM4NiAyIDIuNVY3SDdaTTIgOFYxMi41QzIgMTIuNzc2MSAyLjIyMzg2IDEzIDIuNSAxM0g3VjhIMlpNMi41IDFDMS42NzE1NyAxIDEgMS42NzE1NyAxIDIuNVYxMi41QzEgMTMuMzI4NCAxLjY3MTU3IDE0IDIuNSAxNEgxMi41QzEzLjMyODQgMTQgMTQgMTMuMzI4NCAxNCAxMi41VjIuNUMxNCAxLjY3MTU3IDEzLjMyODQgMSAxMi41IDFIMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNDQ5OTUgMC45NDk5NTFDMS4zMTczNCAwLjk0OTk1MSAxLjE5MDE2IDEuMDAyNjMgMS4wOTY0IDEuMDk2NEMxLjAwMjYzIDEuMTkwMTcgMC45NDk5NTEgMS4zMTczNSAwLjk0OTk1MSAxLjQ0OTk1TDAuOTQ5OTY2IDMuNDQ5OTVDMC45NDk5NjkgMy43MjYxIDEuMTczODMgMy45NDk5NSAxLjQ0OTk3IDMuOTQ5OTVDMS43MjYxMSAzLjk0OTk1IDEuOTQ5OTcgMy43MjYwOSAxLjk0OTk3IDMuNDQ5OTVMMS45NDk5NSAxLjk0OTk1SDMuNDQ5OTdDMy43MjYxMSAxLjk0OTk1IDMuOTQ5OTcgMS43MjYwOSAzLjk0OTk3IDEuNDQ5OTVDMy45NDk5NyAxLjE3MzgxIDMuNzI2MTEgMC45NDk5NTEgMy40NDk5NyAwLjk0OTk1MUgxLjQ0OTk1Wk01Ljk0OTk1IDAuOTQ5OTUxQzUuNjczODEgMC45NDk5NTEgNS40NDk5NSAxLjE3MzgxIDUuNDQ5OTUgMS40NDk5NUM1LjQ0OTk1IDEuNzI2MDkgNS42NzM4MSAxLjk0OTk1IDUuOTQ5OTUgMS45NDk5NUg4Ljk0OTk1QzkuMjI2MDkgMS45NDk5NSA5LjQ0OTk1IDEuNzI2MDkgOS40NDk5NSAxLjQ0OTk1QzkuNDQ5OTUgMS4xNzM4MSA5LjIyNjA5IDAuOTQ5OTUxIDguOTQ5OTUgMC45NDk5NTFINS45NDk5NVpNNS40NDk5NSAxMy40NUM1LjQ0OTk1IDEzLjE3MzggNS42NzM4MSAxMi45NSA1Ljk0OTk1IDEyLjk1SDguOTQ5OTVDOS4yMjYwOSAxMi45NSA5LjQ0OTk1IDEzLjE3MzggOS40NDk5NSAxMy40NUM5LjQ0OTk1IDEzLjcyNjEgOS4yMjYwOSAxMy45NSA4Ljk0OTk1IDEzLjk1SDUuOTQ5OTVDNS42NzM4MSAxMy45NSA1LjQ0OTk1IDEzLjcyNjEgNS40NDk5NSAxMy40NVpNMS45NDk5NSA1Ljk0OTk1QzEuOTQ5OTUgNS42NzM4MSAxLjcyNjA5IDUuNDQ5OTUgMS40NDk5NSA1LjQ0OTk1QzEuMTczODEgNS40NDk5NSAwLjk0OTk1MSA1LjY3MzgxIDAuOTQ5OTUxIDUuOTQ5OTVWOC45NDk5NUMwLjk0OTk1MSA5LjIyNjA5IDEuMTczODEgOS40NDk5NSAxLjQ0OTk1IDkuNDQ5OTVDMS43MjYwOSA5LjQ0OTk1IDEuOTQ5OTUgOS4yMjYwOSAxLjk0OTk1IDguOTQ5OTVWNS45NDk5NVpNMTMuNDUgNS40NDk5NUMxMy43MjYxIDUuNDQ5OTUgMTMuOTUgNS42NzM4MSAxMy45NSA1Ljk0OTk1VjguOTQ5OTVDMTMuOTUgOS4yMjYwOSAxMy43MjYxIDkuNDQ5OTUgMTMuNDUgOS40NDk5NUMxMy4xNzM4IDkuNDQ5OTUgMTIuOTUgOS4yMjYwOSAxMi45NSA4Ljk0OTk1VjUuOTQ5OTVDMTIuOTUgNS42NzM4MSAxMy4xNzM4IDUuNDQ5OTUgMTMuNDUgNS40NDk5NVpNMTEuNDUgMC45NDk5NTFDMTEuMTczOCAwLjk0OTk1MSAxMC45NSAxLjE3MzgxIDEwLjk1IDEuNDQ5OTVDMTAuOTUgMS43MjYwOSAxMS4xNzM4IDEuOTQ5OTUgMTEuNDUgMS45NDk5NUgxMi45NDk5VjMuNDQ5OTVDMTIuOTQ5OSAzLjcyNjA5IDEzLjE3MzggMy45NDk5NSAxMy40NDk5IDMuOTQ5OTVDMTMuNzI2MSAzLjk0OTk1IDEzLjk0OTkgMy43MjYwOSAxMy45NDk5IDMuNDQ5OTVWMS40NDk5NUMxMy45NDk5IDEuMTczODEgMTMuNzI1MiAwLjk0OTk1MSAxMy40NDkgMC45NDk5NTFIMTEuNDVaTTEuNDQ5OTUgMTAuOTVDMS43MjYwOSAxMC45NSAxLjk0OTk1IDExLjE3MzggMS45NDk5NSAxMS40NVYxMi45NUgzLjQ0OTk3QzMuNzI2MTEgMTIuOTUgMy45NDk5NyAxMy4xNzM4IDMuOTQ5OTcgMTMuNDVDMy45NDk5NyAxMy43MjYxIDMuNzI2MTEgMTMuOTUgMy40NDk5NyAxMy45NUgxLjQ0OTk1QzEuMTczODEgMTMuOTUgMC45NDk5NTEgMTMuNzI2MSAwLjk0OTk1MSAxMy40NVYxMS40NUMwLjk0OTk1MSAxMS4xNzM4IDEuMTczODEgMTAuOTUgMS40NDk5NSAxMC45NVpNMTMuOTUgMTEuNDVDMTMuOTUgMTEuMTczOCAxMy43MjYxIDEwLjk1IDEzLjQ1IDEwLjk1QzEzLjE3MzggMTAuOTQ5OSAxMi45NSAxMS4xNzM4IDEyLjk1IDExLjQ0OTlMMTIuOTQ5MSAxMi45NUgxMS40NUMxMS4xNzM4IDEyLjk1IDEwLjk1IDEzLjE3MzggMTAuOTUgMTMuNDVDMTAuOTUgMTMuNzI2MSAxMS4xNzM4IDEzLjk1IDExLjQ1IDEzLjk1SDEzLjQ0OTlDMTMuNzI2MSAxMy45NSAxMy45NDk5IDEzLjcyNjEgMTMuOTQ5OSAxMy40NUwxMy45NSAxMS40NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFd0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk03LjAwMDAzIDEuODQ4NjFDNC4xMDExNCAyLjEwMTcgMS44MjcwNyA0LjUzNTE1IDEuODI3MDcgNy40OTk3MkMxLjgyNzA3IDEwLjQ2NDMgNC4xMDExNCAxMi44OTc3IDcuMDAwMDMgMTMuMTUwOFYxLjg0ODYxWk04LjAwMDAzIDEzLjE1MDhDMTAuODk4OCAxMi44OTc2IDEzLjE3MjcgMTAuNDY0MiAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyA0LjUzNTI0IDEwLjg5ODggMi4xMDE4NSA4LjAwMDAzIDEuODQ4NjRWMTMuMTUwOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFV0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk03LjQ5OTg4IDEuODI2ODlDNC4zNjY4OCAxLjgyNjkgMS44MjcwNyA0LjM2NjcyIDEuODI3MDcgNy40OTk3MkMxLjgyNzA3IDEwLjYzMjcgNC4zNjY4OCAxMy4xNzI1IDcuNDk5ODggMTMuMTcyNlYxLjgyNjg5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0senQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSAzQzEuMjIzODYgMyAxIDMuMjIzODYgMSAzLjVDMSAzLjc3NjE0IDEuMjIzODYgNCAxLjUgNEgxMy41QzEzLjc3NjEgNCAxNCAzLjc3NjE0IDE0IDMuNUMxNCAzLjIyMzg2IDEzLjc3NjEgMyAxMy41IDNIMS41Wk0xIDcuNUMxIDcuMjIzODYgMS4yMjM4NiA3IDEuNSA3SDEzLjVDMTMuNzc2MSA3IDE0IDcuMjIzODYgMTQgNy41QzE0IDcuNzc2MTQgMTMuNzc2MSA4IDEzLjUgOEgxLjVDMS4yMjM4NiA4IDEgNy43NzYxNCAxIDcuNVpNMSAxMS41QzEgMTEuMjIzOSAxLjIyMzg2IDExIDEuNSAxMUgxMy41QzEzLjc3NjEgMTEgMTQgMTEuMjIzOSAxNCAxMS41QzE0IDExLjc3NjEgMTMuNzc2MSAxMiAxMy41IDEySDEuNUMxLjIyMzg2IDEyIDEgMTEuNzc2MSAxIDExLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxHdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi44MTEzIDEuNjQ3MDZDNi42MjE4OCAyLjg3OTE4IDYuNjgyNjggMy44ODUyMyA2Ljc2ODQ4IDUuMzA0OTlDNi43ODQxNSA1LjU2NDI2IDYuODAwNjUgNS44MzczMiA2LjgxNjYxIDYuMTI4MDhDNi44MzExMSA2LjM5MjA4IDYuNjM3NTggNi42MjE3MiA2LjM3NDk1IDYuNjUyMTdDNi4xMTIzMiA2LjY4MjYyIDUuODcxMzggNi41MDMzNCA1LjgyNTA5IDYuMjQzMDRMNS43NDc1NCA1LjgwNjk4QzUuNjQ0MDIgNS4xNjUyOSA1LjQ4MzU1IDQuMjU0ODEgNS4xNzgwNyAzLjQ0NzQxQzQuODYyNDEgMi42MTMxMiA0LjQ0ODYgMi4wNDEyMSAzLjkzNDM2IDEuODYwNDRDMy42NDk5NCAxLjc2MTA0IDMuNDE5MDEgMS44NDI3OSAzLjI1ODY4IDIuMDEwNTJDMy4wODc0NiAyLjE4OTYyIDIuOTk3NiAyLjQ3MDY1IDMuMDYyNyAyLjc1Mzk5QzMuMjE0NiAzLjM0NDI0IDMuNDQ2MjcgMy45MTY3IDMuNjk4MzYgNC41MTgwMkMzLjcyMDgyIDQuNTcxNTggMy43NDM0NiA0LjYyNTQzIDMuNzY2MjEgNC42Nzk1NEMzLjk5NTQgNS4yMjQ1NyA0LjIzNjE5IDUuNzk3MiA0LjQxNjQ0IDYuMzkwODFMNC40MTY5MSA2LjM5MjM4QzQuNTYyIDYuODc1ODYgNC42NTY0NiA3LjI1OTUgNC43MzA4NiA3LjU2MTY1QzQuNzYwMzQgNy42ODEzOCA0Ljc4NjY3IDcuNzg4MzEgNC44MTE3NSA3Ljg4MzU5QzQuODY3NjggOC4wOTYwNiA0Ljc3ODM2IDguMzIwMTQgNC41OTE2MSA4LjQzNTg4QzQuNDA0ODYgOC41NTE2MSA0LjE2NDQ1IDguNTMxODggMy45OTkwNyA4LjM4NzI1QzMuNzM3NDkgOC4xNTg0OCAzLjUxNSA3LjkyNzg0IDMuMzE4MTcgNy43MTgwMkMzLjI3NjI3IDcuNjczMzUgMy4yMzYwMiA3LjYzMDE4IDMuMTk3MDUgNy41ODgzOEMzLjA0Nzc3IDcuNDI4MjYgMi45MTcxMiA3LjI4ODEyIDIuNzgzMzQgNy4xNjAyOUMyLjQ1OTg5IDYuODUxMjIgMi4xODM5OCA2LjY4MDA0IDEuODA1ODUgNi42NDM2OUwxLjgwMzI0IDYuNjQzNDNDMS41NjExNyA2LjYxODg4IDEuNDE0MDIgNi42NjQ0MSAxLjMxNzU2IDYuNzI2MjdDMS4yMTg5OSA2Ljc4OTQ3IDEuMTE5ODggNi45MDQxNCAxLjAzNzg0IDcuMTEyM0MwLjk3NjU3NiA3LjI4NDkyIDEuMDE1MTUgNy42Mjk4NyAxLjE5MjkgNy45NjkxMUwxLjE5NzI4IDcuOTc3NDdDMS40MDA4NiA4LjM4NDUyIDEuNzQ0NzUgOC44MTU4NyAyLjE4MTQxIDkuMjkyOTlDMi4zOTczOSA5LjUyODk4IDIuNjI4NzIgOS43Njg0OSAyLjg2OTM0IDEwLjAxNzRMMi44Nzk2NiAxMC4wMjgxQzMuMTE1NDYgMTAuMjcyMSAzLjM1OTYyIDEwLjUyNDcgMy41OTcxMyAxMC43ODI3QzQuNDI4OCAxMS42ODYzIDUuMjc3MDYgMTIuNzUzOCA1LjQ2MjcgMTRIMTEuNTA4N0MxMS41NjM2IDEyLjQzNTMgMTEuODc1NiAxMS4yNjggMTIuMjg3NSAxMC4xMzQ2QzEyLjQ0NTQgOS43MDA0MSAxMi42MTIxIDkuMjg0MTIgMTIuNzgyNiA4Ljg1ODI5QzEzLjEwOTcgOC4wNDEzOSAxMy40NTA5IDcuMTg5MzcgMTMuNzcwNSA2LjEwODI0QzE0LjA5ODkgNC45OTczNyAxNC4wMDk3IDQuMzcwMzMgMTMuODYxMyA0LjAzOTg0QzEzLjcxNyAzLjcxODU4IDEzLjQ5MTQgMy42MTc4NiAxMy4zODE2IDMuNTk2MDZDMTMuMTM4MSAzLjU0Nzc0IDEzLjAzODQgMy42MDk0NyAxMi45Njk4IDMuNjc5MDFDMTIuODY3IDMuNzgzMTYgMTIuNzY5OCAzLjk4MjczIDEyLjY5MjEgNC4zMDI2OUMxMi42MTY2IDQuNjEzNDUgMTIuNTc1MiA0Ljk2NTE3IDEyLjUzMyA1LjMyNTAxTDEyLjUyOTggNS4zNTI4NUMxMi40OTI0IDUuNjcyNDIgMTIuNDUwNSA2LjAzMDE2IDEyLjM2NjUgNi4zMDA5OEMxMi4zMzgzIDYuNDA2OTkgMTIuMjgxOSA2LjUwNDA3IDEyLjE5NzkgNi41NzUzOUMxMi4xMzgyIDYuNjI2MSAxMi4wMTA0IDYuNzA4MTggMTEuODMwOSA2LjY5MzEyQzExLjU0MjQgNi42Njg5MSAxMS4zNzEyIDYuNDIxNDMgMTEuMzY1IDYuMTQ3ODNDMTEuMzU2IDUuNzU0NTQgMTEuMzg4MyA1LjM1ODY0IDExLjQwNzQgNC45NjYwOEMxMS40NDI4IDQuMjM2NDYgMTEuNDc3IDMuNTMzNyAxMS40MjQ1IDIuODM0MkwxMS40MjQyIDIuODI5MzRDMTEuMzkxNiAyLjMyOTk3IDExLjA0OTMgMi4wMDIyOCAxMC43MDA3IDEuOTIyOEMxMC41MzA1IDEuODg0MDEgMTAuMzY5IDEuOTA2MDEgMTAuMjM0NyAxLjk4MzVDMTAuMTAzIDIuMDU5NDYgOS45NTUzNSAyLjIxMzE4IDkuODU3NCAyLjUxMzk0TDkuODU2MzEgMi41MTcyNkM5LjgxNTI1IDIuNjQwNCA5Ljc3Mjk4IDIuODc3NTMgOS43MzYwNiAzLjIxMjRDOS43MDA0NCAzLjUzNTQyIDkuNjczMzcgMy45MTI3OSA5LjY1MTU2IDQuMjk0MThDOS42MzI5IDQuNjIwMzMgOS42MTc4NSA0Ljk1ODQgOS42MDQzNCA1LjI2MTk0QzkuNTg3MjggNS42NDUyOSA5LjU3MjY3IDUuOTczNTcgOS41NTYzMyA2LjE1MzJDOS41NDk4MyA2LjIyNDU5IDkuNTI5MzkgNi4yOTQ5MyA5LjQ5NTAxIDYuMzU3ODVDOS40NzM1NiA2LjM5NzExIDkuMzYxMTUgNi42MDk0NyA5LjA3MTA2IDYuNjE4NDNDOC43NzkxNyA2LjYyNzQ0IDguNjM5NzUgNi40MDA1NyA4LjYxNjk4IDYuMzU5MTlDOC41NTYzNCA2LjI0ODk5IDguNTUwNjYgNi4xMTgwNyA4LjU0NzU0IDUuOTkyODNDOC41NDQ3NCA1Ljg4MDY0IDguNTQyOTQgNS43MTc5OCA4LjU0MTc0IDUuNTQ3NjdDOC41MzkzNSA1LjIwNTgyIDguNTM5MzUgNC44MTkxOSA4LjUzOTM1IDQuNzA5NTJDOC41MzkzNSAzLjY2NTcgOC41MzgzOCAyLjY1MzcyIDguNDQ3MTQgMS42NDM3MkM4LjM5MTgzIDEuMjQxMjcgOC4wNjI3OCAxLjAwNDU1IDcuNjQzNiAxLjAwMDA1QzcuMjIzOTkgMC45OTU1NTIgNi44NzkxOCAxLjIyNzA0IDYuODExMyAxLjY0NzA2Wk05LjQxMjE5IDEuMzYxN0M5LjIxNDY5IDAuNDQ4NDg0IDguMzk5MTMgMC4wMDgxMDMyNCA3LjY1NDMzIDAuMDAwMTExNTRDNi44NjQ1MiAtMC4wMDgzNjMwOCA1Ljk4NzYxIDAuNDY1ODgxIDUuODIzNjUgMS40OTAzN0w1LjgyMzE4IDEuNDkzMzRDNS43ODIzOSAxLjc1ODQgNS43NTIyOSAyLjAxNDgxIDUuNzMwOSAyLjI2NjUyQzUuMzk0MjMgMS42NzM2NCA0LjkyNjIyIDEuMTQ4OTQgNC4yNjU1IDAuOTE2ODU5QzMuNTg2NjEgMC42NzkzMTIgMi45NDkyIDAuODg3MDg3IDIuNTM1ODIgMS4zMTk1MkMyLjEzNDE1IDEuNzM5NzEgMS45NDQzOCAyLjM2NzQyIDIuMDkwMzEgMi45ODc0NkwyLjA5MjY5IDIuOTk3MTNDMi4yNjQ3OCAzLjY2ODA4IDIuNTIzOTYgNC4zMDMxNiAyLjc3NjEzIDQuOTA0NjVDMi43OTgxNCA0Ljk1NzE3IDIuODIwMSA1LjAwOTQxIDIuODQxOTQgNS4wNjEzOUMzLjAyMTM5IDUuNDg4NDIgMy4xOTM3OCA1Ljg5ODY2IDMuMzM4NzEgNi4zMTI1NkMyLjk2NDA0IDUuOTgxNDIgMi41MTkyNSA1LjcwNzk2IDEuOTAyNzYgNS42NDg0QzEuNDg4NjUgNS42MDY2MyAxLjEwMzkxIDUuNjc1MzYgMC43Nzc4MDUgNS44ODQ0NEMwLjQ1NDIzOSA2LjA5MTkgMC4yNDA2NzEgNi40MDQwNSAwLjEwNDE4NyA2Ljc1NDA2TDAuMTAwODY4IDYuNzYyODFDLTAuMTAxODQgNy4zMTI4NiAwLjA2NjMzMTIgNy45NzE1NyAwLjMwNDg5NSA4LjQyODk3QzAuNTczNzA0IDguOTY0NzQgMC45OTYxMDQgOS40NzkwNCAxLjQ0MzcyIDkuOTY4MTNDMS42NzA0NiAxMC4yMTU5IDEuOTExMzYgMTAuNDY1MiAyLjE1MDMzIDEwLjcxMjRMMi4xNTY4MiAxMC43MTkxQzIuMzk1MjQgMTAuOTY1OCAyLjYzMjE3IDExLjIxMDkgMi44NjEzNCAxMS40NTk5QzMuODA5MzcgMTIuNDkgNC41MDAwMiAxMy40NjMyIDQuNTAwMDIgMTQuNUM0LjUwMDAyIDE0Ljc3NjEgNC43MjM4OCAxNSA1LjAwMDAyIDE1SDEyQzEyLjI3NjIgMTUgMTIuNSAxNC43NzYxIDEyLjUgMTQuNUMxMi41IDEyLjgyMTIgMTIuODAyMSAxMS42NDYyIDEzLjIyNzQgMTAuNDc2MkMxMy4zNjUzIDEwLjA5NjggMTMuNTIxNiA5LjcwNTc5IDEzLjY4NjggOS4yOTI0N0MxNC4wMjM4IDguNDQ5MjIgMTQuMzk4IDcuNTEyOTggMTQuNzI5NSA2LjM5MTc1QzE1LjA5NTYgNS4xNTMyNCAxNS4wNTU5IDQuMjU5MDQgMTQuNzczNSAzLjYzMDE3QzE0LjQ4NyAyLjk5MjA4IDEzLjk3OTggMi42OTUzIDEzLjU3NjMgMi42MTUyQzEzLjEyNzYgMi41MjYxNCAxMi43MzY3IDIuNjA0NzUgMTIuNDI2OCAyLjgzMDgxQzEyLjQyNTMgMi44MDc3MyAxMi40MjM2IDIuNzg0NjggMTIuNDIxOSAyLjc2MTY3QzEyLjM1ODcgMS44MTA1IDExLjY5MDcgMS4xMjI4NSAxMC45MjMgMC45NDc4MjFDMTAuNTM0NiAwLjg1OTI4NyAxMC4xMTExIDAuOTAwMzkzIDkuNzM1MDkgMS4xMTcyNEM5LjYxODUyIDEuMTg0NDYgOS41MTA1NSAxLjI2NjIzIDkuNDEyMTkgMS4zNjE3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sS3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguNzU0MzIgMi4wNTAyQzguNTA1NzkgMi4wNTAyIDguMzA0MzIgMi4yNTE2NyA4LjMwNDMyIDIuNTAwMkM4LjMwNDMyIDIuNzQ4NzMgOC41MDU3OSAyLjk1MDIgOC43NTQzMiAyLjk1MDJIOS45NDk5N1Y3LjA1MDA0SDUuMDQ5OTdWMi45NTAySDYuMjU0MzJDNi41MDI4NSAyLjk1MDIgNi43MDQzMiAyLjc0ODczIDYuNzA0MzIgMi41MDAyQzYuNzA0MzIgMi4yNTE2NyA2LjUwMjg1IDIuMDUwMiA2LjI1NDMyIDIuMDUwMkgyLjc1NDMyQzIuNTA1NzkgMi4wNTAyIDIuMzA0MzIgMi4yNTE2NyAyLjMwNDMyIDIuNTAwMkMyLjMwNDMyIDIuNzQ4NzMgMi41MDU3OSAyLjk1MDIgMi43NTQzMiAyLjk1MDJIMy45NDk5N1YxMi4wNTAySDIuNzU0MzJDMi41MDU3OSAxMi4wNTAyIDIuMzA0MzIgMTIuMjUxNyAyLjMwNDMyIDEyLjUwMDJDMi4zMDQzMiAxMi43NDg3IDIuNTA1NzkgMTIuOTUwMiAyLjc1NDMyIDEyLjk1MDJINi4yNTQzMkM2LjUwMjg1IDEyLjk1MDIgNi43MDQzMiAxMi43NDg3IDYuNzA0MzIgMTIuNTAwMkM2LjcwNDMyIDEyLjI1MTcgNi41MDI4NSAxMi4wNTAyIDYuMjU0MzIgMTIuMDUwMkg1LjA0OTk3VjcuOTUwMDRIOS45NDk5N1YxMi4wNTAySDguNzU0MzJDOC41MDU3OSAxMi4wNTAyIDguMzA0MzIgMTIuMjUxNyA4LjMwNDMyIDEyLjUwMDJDOC4zMDQzMiAxMi43NDg3IDguNTA1NzkgMTIuOTUwMiA4Ljc1NDMyIDEyLjk1MDJIMTIuMjU0M0MxMi41MDI4IDEyLjk1MDIgMTIuNzA0MyAxMi43NDg3IDEyLjcwNDMgMTIuNTAwMkMxMi43MDQzIDEyLjI1MTcgMTIuNTAyOCAxMi4wNTAyIDEyLjI1NDMgMTIuMDUwMkgxMS4wNVYyLjk1MDJIMTIuMjU0M0MxMi41MDI4IDIuOTUwMiAxMi43MDQzIDIuNzQ4NzMgMTIuNzA0MyAyLjUwMDJDMTIuNzA0MyAyLjI1MTY3IDEyLjUwMjggMi4wNTAyIDEyLjI1NDMgMi4wNTAySDguNzU0MzJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxxdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4xODEzIDEuNjgxNzlDNy4zNTcwNCAxLjUwNjA1IDcuNjQxOTYgMS41MDYwNSA3LjgxNzcgMS42ODE3OUwxMC4zMTc3IDQuMTgxNzlDMTAuNDkzNCA0LjM1NzUzIDEwLjQ5MzQgNC42NDI0NSAxMC4zMTc3IDQuODE4MTlDMTAuMTQyIDQuOTkzOTIgOS44NTcwNCA0Ljk5MzkyIDkuNjgxMyA0LjgxODE5TDcuOTQ5NSAzLjA4NjM4TDcuOTQ5NSAxMS45MTM2TDkuNjgxMyAxMC4xODE4QzkuODU3MDQgMTAuMDA2MSAxMC4xNDIgMTAuMDA2MSAxMC4zMTc3IDEwLjE4MThDMTAuNDkzNCAxMC4zNTc1IDEwLjQ5MzQgMTAuNjQyNCAxMC4zMTc3IDEwLjgxODJMNy44MTc3IDEzLjMxODJDNy43MzMzMSAxMy40MDI2IDcuNjE4ODUgMTMuNDUgNy40OTk1IDEzLjQ1QzcuMzgwMTUgMTMuNDUgNy4yNjU2OSAxMy40MDI2IDcuMTgxMyAxMy4zMTgyTDQuNjgxMyAxMC44MTgyQzQuNTA1NTcgMTAuNjQyNCA0LjUwNTU3IDEwLjM1NzUgNC42ODEzIDEwLjE4MThDNC44NTcwNCAxMC4wMDYxIDUuMTQxOTYgMTAuMDA2MSA1LjMxNzcgMTAuMTgxOEw3LjA0OTUgMTEuOTEzNkw3LjA0OTUgMy4wODYzOEw1LjMxNzcgNC44MTgxOUM1LjE0MTk2IDQuOTkzOTIgNC44NTcwNCA0Ljk5MzkyIDQuNjgxMyA0LjgxODE5QzQuNTA1NTcgNC42NDI0NSA0LjUwNTU3IDQuMzU3NTMgNC42ODEzIDQuMTgxNzlMNy4xODEzIDEuNjgxNzlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxZdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4wNzkyNiAwLjIyMjI1M0M3LjMxMjc1IC0wLjAwNzQzNCA3LjY4NzMgLTAuMDA3NDM0IDcuOTIwNzkgMC4yMjIyNTNMMTQuNjcwOCA2Ljg2MjI3QzE0LjkwNyA3LjA5NDY1IDE0LjkxMDEgNy40NzQ1MyAxNC42Nzc4IDcuNzEwNzZDMTQuNDQ1NCA3Ljk0NyAxNC4wNjU1IDcuOTUwMTIgMTMuODI5MyA3LjcxNzczTDEzIDYuOTAyMDFWMTIuNUMxMyAxMi43NzYxIDEyLjc3NjIgMTMgMTIuNSAxM0gyLjUwMDAyQzIuMjIzODggMTMgMi4wMDAwMiAxMi43NzYxIDIuMDAwMDIgMTIuNVY2LjkwMjAxTDEuMTcwNzkgNy43MTc3M0MwLjkzNDU1OCA3Ljk1MDEyIDAuNTU0NjcyIDcuOTQ3IDAuMzIyMjkgNy43MTA3NkMwLjA4OTkwNzkgNy40NzQ1MyAwLjA5MzAyODMgNy4wOTQ2NSAwLjMyOTI2IDYuODYyMjdMNy4wNzkyNiAwLjIyMjI1M1pNNy41MDAwMiAxLjQ5MTYzTDEyIDUuOTE4MzFWMTJIMTBWOC40OTk5OUMxMCA4LjIyMzg1IDkuNzc2MTcgNy45OTk5OSA5LjUwMDAyIDcuOTk5OTlINi41MDAwMkM2LjIyMzg4IDcuOTk5OTkgNi4wMDAwMiA4LjIyMzg1IDYuMDAwMDIgOC40OTk5OVYxMkgzLjAwMDAyVjUuOTE4MzFMNy41MDAwMiAxLjQ5MTYzWk03LjAwMDAyIDEySDkuMDAwMDJWOC45OTk5OUg3LjAwMDAyVjEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAwLjAwMzI5NTlDNi44MDQ3MyAwLjAwMzI5NTkgNi4yNDk1MyAwLjI4MTEwNiA2LjI1IDAuNzQ5OTk1QzYuMjUgMC45OTcyNTggNi40MjQ0NiAxLjEyMDE0IDYuNTc2ODcgMS4yMjc0OUM2LjY5NTA3IDEuMzEwNzQgNi44IDEuMzg0NjUgNi44IDEuNUM2LjggMS43MDcxIDYuMDYyMjQgMS43NDI2NCA1LjE5Nzg5IDEuNzg0MjdDMy45NzU1MyAxLjg0MzE0IDIuNSAxLjkxNDIxIDIuNSAyLjVDMi41IDIuNzc2MTQgMi43MjM4NiAzIDMgM0gxMkMxMi4yNzYxIDMgMTIuNSAyLjc3NjE0IDEyLjUgMi41QzEyLjUgMS45MTQyMSAxMS4wMjQ1IDEuODQzMTQgOS44MDIxMSAxLjc4NDI3QzguOTM3NzYgMS43NDI2NCA4LjIgMS43MDcxIDguMiAxLjVDOC4yIDEuMzg0NjUgOC4zMDQ5MyAxLjMxMDc0IDguNDIzMTMgMS4yMjc0OUM4LjU3NTU0IDEuMTIwMTQgOC43NSAwLjk5NzI1OCA4Ljc1IDAuNzQ5OTk1QzguNzUwNDcgMC4yODExMDYgOC4xOTUyNyAwLjAwMzI5NTkgNy41IDAuMDAzMjk1OVpNMi44OTQ1MSA2LjEyMjY2QzIuMjU4MDYgNi41MjQ3MSAxLjkwNDE3IDcuMzExMTggMi4wMjQ3MyA4LjA1NTZMMi44MzU4OCAxMi40NzcyQzMuMDA5OTMgMTMuMzU2MiAzLjc2MjkgMTQgNC42NjA2MSAxNEgxMC4zMzczQzExLjIzNTQgMTQgMTEuOTg4NCAxMy4zNTYyIDEyLjE2MjUgMTIuNDc3MkwxMi45NzM2IDguMDU2MDdDMTMuMDg5IDcuMzIzNTggMTIuODI4NCA2LjUzMjc2IDEyLjEzMzEgNi4wOTM3M0MxMS43MjgzIDUuODMwMTMgMTEuNjQxMiA1LjMzMjMxIDEyLjEzMzEgNS4xMjc5NkMxMi44Mjg0IDQuODY0MzUgMTIuNjk0OCA0IDEyIDRIMTAuMzAwMUg2LjgwMDA1SDIuOTk5OTZDMi4zMDQ2OSA0IDIuMTk4NzggNC44OTMyOCAyLjg5NDUxIDUuMTU2ODlDMy4zODY0MiA1LjMzMjMxIDMuMjk5MzkgNS44MzAxMyAyLjg5NDUxIDYuMTIyNjZaTTguMjAwMDYgNi4yNUM4LjIwMDA2IDUuODE3NjkgOC4wODU3MiA1LjM3NjE1IDcuOTA2MzUgNUw0LjExMDkzIDVDNC4yMDYyNiA1LjIxMzEyIDQuMjQxOSA1LjQzODg5IDQuMjI5MDQgNS42NTUyMUM0LjE5NTIyIDYuMjI0MTIgMy44NDU4NyA2LjY2ODk5IDMuNDgwMTYgNi45MzMyMkwzLjQ1NDkyIDYuOTUxNDZMMy40Mjg1OCA2Ljk2ODFDMy4xMzQwNyA3LjE1NDE0IDIuOTU4MDEgNy41Mzk4OSAzLjAxMDU4IDcuODg3NDlMMy44MTc5NyAxMi4yODg2QzMuOTA1MTMgMTIuNzE1NCA0LjI2MTQ4IDEzIDQuNjYwNjEgMTNIMTAuMzM3M0MxMC43MzcgMTMgMTEuMDkzMiAxMi43MTUzIDExLjE4MDQgMTIuMjg4NkwxMS45ODc0IDcuODg5OEMxMi4wNDggNy40ODI0NyAxMS44OTU0IDcuMTI2MzEgMTEuNTk5MiA2LjkzOTI3TDExLjU4NzUgNi45MzE4NEwxMS41ODc1IDYuOTMxNzZDMTEuMTk0NyA2LjY3NjAyIDEwLjgzMzEgNi4yMjc4NSAxMC43OTg2IDUuNjQ3OThDMTAuNzg0NiA1LjQxMiAxMC44MjY0IDUuMTkzOTcgMTAuOTExMiA1SDkuMDU1MTdDOS4wMTk4NyA1LjE0NjExIDkuMDAwMDYgNS4zMTIwMSA5LjAwMDA2IDUuNUM5LjAwMDA2IDUuOTc0NSA5LjIxNjc5IDYuMzcxMjcgOS40NDM2NyA2Ljc4NjYyQzkuNjkyODQgNy4yNDI3OCA5Ljk1NDI1IDcuNzIxMzYgOS45NTQyNSA4LjM0OTkzQzkuOTU0MjUgOS4yNjk4IDkuNDk4NjggOS44NDIwNSA4LjYyMTg5IDkuODQyMDVDOC4xMzIwNiA5Ljg0MjA1IDcuNTc4MTggOS40NjA5NyA3LjU3ODE4IDguNzU3ODFDNy41NzgxOCA4LjM1Mjc5IDcuNzE1NTggOC4wMTY0NiA3Ljg2MTIxIDcuNjU5OThDOC4wMjU0IDcuMjU4MDYgOC4yMDAwNiA2LjgzMDUxIDguMjAwMDYgNi4yNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFh0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCAxMS4wMDAxVjQuMDAwMDZMMSA0LjAwMDA2TDEgMTEuMDAwMUgxNFpNMTUgNC4wMDAwNlYxMS4wMDAxQzE1IDExLjU1MjMgMTQuNTUyMyAxMi4wMDAxIDE0IDEyLjAwMDFIMUMwLjQ0NzcxNSAxMi4wMDAxIDAgMTEuNTUyMyAwIDExLjAwMDFWNC4wMDAwNkMwIDMuNDQ3NzggMC40NDc3MTUgMy4wMDAwNiAxIDMuMDAwMDZIMTRDMTQuNTUyMyAzLjAwMDA2IDE1IDMuNDQ3NzggMTUgNC4wMDAwNlpNMiA1LjI1QzIgNS4xMTE5MyAyLjExMTkzIDUgMi4yNSA1SDUuNzVDNS44ODgwNyA1IDYgNS4xMTE5MyA2IDUuMjVWOS43NUM2IDkuODg4MDcgNS44ODgwNyAxMCA1Ljc1IDEwSDIuMjVDMi4xMTE5MyAxMCAyIDkuODg4MDcgMiA5Ljc1VjUuMjVaTTcuNSA3QzcuMjIzODYgNyA3IDcuMjIzODYgNyA3LjVDNyA3Ljc3NjE0IDcuMjIzODYgOCA3LjUgOEgxMC41QzEwLjc3NjEgOCAxMSA3Ljc3NjE0IDExIDcuNUMxMSA3LjIyMzg2IDEwLjc3NjEgNyAxMC41IDdINy41Wk03IDkuNUM3IDkuMjIzODYgNy4yMjM4NiA5IDcuNSA5SDEyLjVDMTIuNzc2MSA5IDEzIDkuMjIzODYgMTMgOS41QzEzIDkuNzc2MTQgMTIuNzc2MSAxMCAxMi41IDEwSDcuNUM3LjIyMzg2IDEwIDcgOS43NzYxNCA3IDkuNVpNNy41IDVDNy4yMjM4NiA1IDcgNS4yMjM4NiA3IDUuNUM3IDUuNzc2MTQgNy4yMjM4NiA2IDcuNSA2SDExLjVDMTEuNzc2MSA2IDEyIDUuNzc2MTQgMTIgNS41QzEyIDUuMjIzODYgMTEuNzc2MSA1IDExLjUgNUg3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxRdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi41IDFIMTIuNUMxMy4zMjg0IDEgMTQgMS42NzE1NyAxNCAyLjVWMTIuNUMxNCAxMy4zMjg0IDEzLjMyODQgMTQgMTIuNSAxNEgyLjVDMS42NzE1NyAxNCAxIDEzLjMyODQgMSAxMi41VjIuNUMxIDEuNjcxNTcgMS42NzE1NyAxIDIuNSAxWk0yLjUgMkMyLjIyMzg2IDIgMiAyLjIyMzg2IDIgMi41VjguMzYzNkwzLjY4MTggNi42ODE4QzMuNzY4MDkgNi41OTU1MSAzLjg4NTcyIDYuNTQ3OTcgNC4wMDc3NCA2LjU1MDA3QzQuMTI5NzUgNi41NTIxNiA0LjI0NTY4IDYuNjAzNzIgNC4zMjg5NSA2LjY5MjkzTDcuODczNTUgMTAuNDkwMUwxMC42ODE4IDcuNjgxOEMxMC44NTc1IDcuNTA2MDcgMTEuMTQyNSA3LjUwNjA3IDExLjMxODIgNy42ODE4TDEzIDkuMzYzNlYyLjVDMTMgMi4yMjM4NiAxMi43NzYxIDIgMTIuNSAySDIuNVpNMiAxMi41VjkuNjM2NEwzLjk4ODg3IDcuNjQ3NTNMNy41MzExIDExLjQ0MjFMOC45NDExMyAxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41Wk0xMi41IDEzSDEwLjE1NUw4LjQ4MzM2IDExLjE1M0wxMSA4LjYzNjRMMTMgMTAuNjM2NFYxMi41QzEzIDEyLjc3NjEgMTIuNzc2MSAxMyAxMi41IDEzWk02LjY0OTIyIDUuNUM2LjY0OTIyIDUuMDMwMTMgNy4wMzAxMyA0LjY0OTIyIDcuNSA0LjY0OTIyQzcuOTY5ODcgNC42NDkyMiA4LjM1MDc4IDUuMDMwMTMgOC4zNTA3OCA1LjVDOC4zNTA3OCA1Ljk2OTg3IDcuOTY5ODcgNi4zNTA3OCA3LjUgNi4zNTA3OEM3LjAzMDEzIDYuMzUwNzggNi42NDkyMiA1Ljk2OTg3IDYuNjQ5MjIgNS41Wk03LjUgMy43NDkyMkM2LjUzMzA3IDMuNzQ5MjIgNS43NDkyMiA0LjUzMzA3IDUuNzQ5MjIgNS41QzUuNzQ5MjIgNi40NjY5MyA2LjUzMzA3IDcuMjUwNzggNy41IDcuMjUwNzhDOC40NjY5MyA3LjI1MDc4IDkuMjUwNzggNi40NjY5MyA5LjI1MDc4IDUuNUM5LjI1MDc4IDQuNTMzMDcgOC40NjY5MyAzLjc0OTIyIDcuNSAzLjc0OTIyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzY4OTJDMy44NDIyMiAwLjg3Njg5MiAwLjg3NzA3NSAzLjg0MjA0IDAuODc3MDc1IDcuNDk5NzJDMC44NzcwNzUgMTEuMTU3NCAzLjg0MjIyIDE0LjEyMjYgNy40OTk5MSAxNC4xMjI2QzExLjE1NzYgMTQuMTIyNiAxNC4xMjI3IDExLjE1NzQgMTQuMTIyNyA3LjQ5OTcyQzE0LjEyMjcgMy44NDIwNCAxMS4xNTc2IDAuODc2ODkyIDcuNDk5OTEgMC44NzY4OTJaTTEuODI3MDcgNy40OTk3MkMxLjgyNzA3IDQuMzY2NzEgNC4zNjY4OSAxLjgyNjg5IDcuNDk5OTEgMS44MjY4OUMxMC42MzI5IDEuODI2ODkgMTMuMTcyNyA0LjM2NjcxIDEzLjE3MjcgNy40OTk3MkMxMy4xNzI3IDEwLjYzMjcgMTAuNjMyOSAxMy4xNzI2IDcuNDk5OTEgMTMuMTcyNkM0LjM2Njg5IDEzLjE3MjYgMS44MjcwNyAxMC42MzI3IDEuODI3MDcgNy40OTk3MlpNOC4yNDk5MiA0LjQ5OTk5QzguMjQ5OTIgNC45MTQyIDcuOTE0MTMgNS4yNDk5OSA3LjQ5OTkyIDUuMjQ5OTlDNy4wODU3MSA1LjI0OTk5IDYuNzQ5OTIgNC45MTQyIDYuNzQ5OTIgNC40OTk5OUM2Ljc0OTkyIDQuMDg1NzcgNy4wODU3MSAzLjc0OTk5IDcuNDk5OTIgMy43NDk5OUM3LjkxNDEzIDMuNzQ5OTkgOC4yNDk5MiA0LjA4NTc3IDguMjQ5OTIgNC40OTk5OVpNNi4wMDAwMyA1Ljk5OTk5SDYuNTAwMDNINy41MDAwM0M3Ljc3NjE4IDUuOTk5OTkgOC4wMDAwMyA2LjIyMzg0IDguMDAwMDMgNi40OTk5OVY5Ljk5OTk5SDguNTAwMDNIOS4wMDAwM1YxMUg4LjUwMDAzSDcuNTAwMDNINi41MDAwM0g2LjAwMDAzVjkuOTk5OTlINi41MDAwM0g3LjAwMDAzVjYuOTk5OTlINi41MDAwM0g2LjAwMDAzVjUuOTk5OTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx0bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi41IDFDNi4yMjM4NiAxIDYgMS4yMjM4NiA2IDEuNUM2IDEuNzc2MTQgNi4yMjM4NiAyIDYuNSAyQzcuMTI2NzEgMiA3LjQ1NzE4IDIuMjAwMjggNy42NTU2MyAyLjQ3ODEyQzcuODc4MSAyLjc4OTU3IDggMy4yODgzNyA4IDRWMTFDOCAxMS43MTE2IDcuODc4MSAxMi4yMTA0IDcuNjU1NjMgMTIuNTIxOUM3LjQ1NzE4IDEyLjc5OTcgNy4xMjY3MSAxMyA2LjUgMTNDNi4yMjM4NiAxMyA2IDEzLjIyMzkgNiAxMy41QzYgMTMuNzc2MSA2LjIyMzg2IDE0IDYuNSAxNEM3LjM3MzI5IDE0IDguMDQyODIgMTMuNzAwMyA4LjQ2OTM3IDEzLjEwMzFDOC40Nzk3NiAxMy4wODg2IDguNDg5OTcgMTMuMDczOSA4LjUgMTMuMDU5MUM4LjUxMDAzIDEzLjA3MzkgOC41MjAyNCAxMy4wODg2IDguNTMwNjMgMTMuMTAzMUM4Ljk1NzE4IDEzLjcwMDMgOS42MjY3MSAxNCAxMC41IDE0QzEwLjc3NjEgMTQgMTEgMTMuNzc2MSAxMSAxMy41QzExIDEzLjIyMzkgMTAuNzc2MSAxMyAxMC41IDEzQzkuODczMjkgMTMgOS41NDI4MiAxMi43OTk3IDkuMzQ0MzcgMTIuNTIxOUM5LjEyMTkgMTIuMjEwNCA5IDExLjcxMTYgOSAxMVY0QzkgMy4yODgzNyA5LjEyMTkgMi43ODk1NyA5LjM0NDM3IDIuNDc4MTJDOS41NDI4MiAyLjIwMDI4IDkuODczMjkgMiAxMC41IDJDMTAuNzc2MSAyIDExIDEuNzc2MTQgMTEgMS41QzExIDEuMjIzODYgMTAuNzc2MSAxIDEwLjUgMUM5LjYyNjcxIDEgOC45NTcxOCAxLjI5OTcyIDguNTMwNjMgMS44OTY4OEM4LjUyMDI0IDEuOTExNDMgOC41MTAwMyAxLjkyNjExIDguNSAxLjk0MDlDOC40ODk5NyAxLjkyNjExIDguNDc5NzYgMS45MTE0MyA4LjQ2OTM3IDEuODk2ODhDOC4wNDI4MiAxLjI5OTcyIDcuMzczMjkgMSA2LjUgMVpNMTQgNUgxMVY0SDE0QzE0LjU1MjMgNCAxNSA0LjQ0NzcyIDE1IDVWMTBDMTUgMTAuNTUyMyAxNC41NTIzIDExIDE0IDExSDExVjEwSDE0VjVaTTYgNFY1SDFMMSAxMEg2VjExSDFDMC40NDc3MTUgMTEgMCAxMC41NTIzIDAgMTBWNUMwIDQuNDQ3NzIgMC40NDc3MTUgNCAxIDRINlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjQ5OTk4IDAuNUM1LjQ5OTk4IDAuMjIzODU4IDUuNzIzODMgMCA1Ljk5OTk4IDBINy40OTk5OEg4Ljk5OTk4QzkuMjc2MTIgMCA5LjQ5OTk4IDAuMjIzODU4IDkuNDk5OTggMC41QzkuNDk5OTggMC43NzYxNDIgOS4yNzYxMiAxIDguOTk5OTggMUg3Ljk5OTk4VjIuMTE5MjJDOS4wOTgzMiAyLjIwNDA5IDEwLjExOSAyLjU2NjIyIDEwLjk5MiAzLjEzNTcyQzExLjAxMTYgMy4xMDg1MSAxMS4wMzM2IDMuMDgyNTIgMTEuMDU4IDMuMDU4MDZMMTIuMDU4IDIuMDU4MDZDMTIuMzAyMSAxLjgxMzk4IDEyLjY5NzggMS44MTM5OCAxMi45NDE5IDIuMDU4MDZDMTMuMTg2IDIuMzAyMTQgMTMuMTg2IDIuNjk3ODYgMTIuOTQxOSAyLjk0MTk0TDExLjk2NyAzLjkxNjgyQzEzLjE1OTUgNS4wNzkyNSAxMy45IDYuNzAzMTQgMTMuOSA4LjQ5OTk4QzEzLjkgMTIuMDM0NiAxMS4wMzQ2IDE0LjkgNy40OTk5OCAxNC45QzMuOTY1MzUgMTQuOSAxLjA5OTk4IDEyLjAzNDYgMS4wOTk5OCA4LjQ5OTk4QzEuMDk5OTggNS4xMzM2MSAzLjY5OTA0IDIuMzc0MyA2Ljk5OTk4IDIuMTE5MjJWMUg1Ljk5OTk4QzUuNzIzODMgMSA1LjQ5OTk4IDAuNzc2MTQyIDUuNDk5OTggMC41Wk0yLjA5OTk4IDguNDk5OThDMi4wOTk5OCA1LjUxNzY0IDQuNTE3NjQgMy4wOTk5OCA3LjQ5OTk4IDMuMDk5OThDMTAuNDgyMyAzLjA5OTk4IDEyLjkgNS41MTc2NCAxMi45IDguNDk5OThDMTIuOSAxMS40ODIzIDEwLjQ4MjMgMTMuOSA3LjQ5OTk4IDEzLjlDNC41MTc2NCAxMy45IDIuMDk5OTggMTEuNDgyMyAyLjA5OTk4IDguNDk5OThaTTcuNDk5OTggOC40OTk5OFY0LjA5OTk4QzUuMDY5OTIgNC4wOTk5OCAzLjA5OTk4IDYuMDY5OTIgMy4wOTk5OCA4LjQ5OTk4QzMuMDk5OTggMTAuOTMgNS4wNjk5MiAxMi45IDcuNDk5OTggMTIuOUM4LjcxNSAxMi45IDkuODE1IDEyLjQwNzUgMTAuNjExMiAxMS42MTEyTDcuNDk5OTggOC40OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHJuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03Ljc1NDMyIDAuODE5NTM3QzcuNTk3NDIgMC43MjY4MjEgNy40MDI1IDAuNzI2ODIxIDcuMjQ1NTkgMC44MTk1MzdMMS43NDU1OSA0LjA2OTU0QzEuNTkzMzYgNC4xNTk0OSAxLjQ5OTk2IDQuMzIzMTcgMS40OTk5NiA0LjVDMS40OTk5NiA0LjY3NjgzIDEuNTkzMzYgNC44NDA1MSAxLjc0NTU5IDQuOTMwNDZMNy4yNDU1OSA4LjE4MDQ2QzcuNDAyNSA4LjI3MzE4IDcuNTk3NDIgOC4yNzMxOCA3Ljc1NDMyIDguMTgwNDZMMTMuMjU0MyA0LjkzMDQ2QzEzLjQwNjYgNC44NDA1MSAxMy41IDQuNjc2ODMgMTMuNSA0LjVDMTMuNSA0LjMyMzE3IDEzLjQwNjYgNC4xNTk0OSAxMy4yNTQzIDQuMDY5NTRMNy43NTQzMiAwLjgxOTUzN1pNNy40OTk5NiA3LjE2OTIzTDIuOTgyOCA0LjVMNy40OTk5NiAxLjgzMDc3TDEyLjAxNzEgNC41TDcuNDk5OTYgNy4xNjkyM1pNMS41Njk1IDcuNDk1NjRDMS43MDk5OCA3LjI1NzkgMi4wMTY1OSA3LjE3OTA2IDIuMjU0MzIgNy4zMTk1NEw3LjQ5OTk2IDEwLjQxOTJMMTIuNzQ1NiA3LjMxOTU0QzEyLjk4MzMgNy4xNzkwNiAxMy4yODk5IDcuMjU3OSAxMy40MzA0IDcuNDk1NjRDMTMuNTcwOSA3LjczMzM3IDEzLjQ5MjEgOC4wMzk5OCAxMy4yNTQzIDguMTgwNDZMNy43NTQzMiAxMS40MzA1QzcuNTk3NDIgMTEuNTIzMiA3LjQwMjUgMTEuNTIzMiA3LjI0NTU5IDExLjQzMDVMMS43NDU1OSA4LjE4MDQ2QzEuNTA3ODYgOC4wMzk5OCAxLjQyOTAxIDcuNzMzMzcgMS41Njk1IDcuNDk1NjRaTTEuNTY5NDkgMTAuNDk1NkMxLjcwOTk4IDEwLjI1NzkgMi4wMTY1OCAxMC4xNzkxIDIuMjU0MzIgMTAuMzE5NUw3LjQ5OTk2IDEzLjQxOTJMMTIuNzQ1NiAxMC4zMTk1QzEyLjk4MzMgMTAuMTc5MSAxMy4yODk5IDEwLjI1NzkgMTMuNDMwNCAxMC40OTU2QzEzLjU3MDkgMTAuNzMzNCAxMy40OTIxIDExLjA0IDEzLjI1NDMgMTEuMTgwNUw3Ljc1NDMyIDE0LjQzMDVDNy41OTc0MiAxNC41MjMyIDcuNDAyNSAxNC41MjMyIDcuMjQ1NTkgMTQuNDMwNUwxLjc0NTU5IDExLjE4MDVDMS41MDc4NSAxMS4wNCAxLjQyOTAxIDEwLjczMzQgMS41Njk0OSAxMC40OTU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sb249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkgMkg2VjEzSDlWMlpNMTAgMlYxM0gxMi41QzEyLjc3NjEgMTMgMTMgMTIuNzc2MSAxMyAxMi41VjIuNUMxMyAyLjIyMzg2IDEyLjc3NjEgMiAxMi41IDJIMTBaTTIuNSAySDVWMTNIMi41QzIuMjIzODYgMTMgMiAxMi43NzYxIDIgMTIuNVYyLjVDMiAyLjIyMzg2IDIuMjIzODYgMiAyLjUgMlpNMi41IDFDMS42NzE1NyAxIDEgMS42NzE1NyAxIDIuNVYxMi41QzEgMTMuMzI4NCAxLjY3MTU3IDE0IDIuNSAxNEgxMi41QzEzLjMyODQgMTQgMTQgMTMuMzI4NCAxNCAxMi41VjIuNUMxNCAxLjY3MTU3IDEzLjMyODQgMSAxMi41IDFIMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sYW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjg5NzkgMi43NUMzLjg5NjY3IDIuNzQ5NzkgNC4wODIzMiAyLjg3NzAxIDQuMTU2NzkgMy4wNzAwM0w3LjM2NjYyIDExLjM5QzcuNDY2MDIgMTEuNjQ3NyA3LjMzNzc0IDExLjkzNzEgNy4wODAxIDEyLjAzNjVDNi44MjI0NyAxMi4xMzU5IDYuNTMzMDQgMTIuMDA3NiA2LjQzMzY1IDExLjc1TDUuMzgyNSA5LjAyNTM3SDIuMDExMzNMMC45NjY5OTIgMTEuNzQ5QzAuODY4MTI4IDEyLjAwNjggMC41Nzg5NjQgMTIuMTM1NyAwLjMyMTEyNiAxMi4wMzY5QzAuMDYzMjg3OCAxMS45MzggLTAuMDY1NTg2NCAxMS42NDg4IDAuMDMzMjc3NCAxMS4zOTFMMy4yMjM0NCAzLjA3MDk5QzMuMjk3NTEgMi44Nzc4MiAzLjQ4MjkgMi43NTAyMSAzLjY4OTc5IDIuNzVaTTMuNjkxNzQgNC42NDI4NEw1LjA1NDU4IDguMTc1MzdIMi4zMzcyNEwzLjY5MTc0IDQuNjQyODRaTTEwLjg5ODkgNS4yMDcwM0M5LjI1ODE4IDUuMjA3MDMgOC4wMDkxNSA2LjY4NTY5IDguMDA5MTUgOC42MDk3MkM4LjAwOTE1IDEwLjYzMzcgOS4zNTgxOCAxMi4wMTI0IDEwLjg5ODkgMTIuMDEyNEMxMS43MjE0IDEyLjAxMjQgMTIuNTc0NCAxMS42NjkyIDEzLjE1NDMgMTEuMDIxOVYxMS41M0MxMy4xNTQzIDExLjc3ODUgMTMuMzU1NyAxMS45OCAxMy42MDQzIDExLjk4QzEzLjg1MjggMTEuOTggMTQuMDU0MyAxMS43Nzg1IDE0LjA1NDMgMTEuNTNWNS43MkMxNC4wNTQzIDUuNDcxNDcgMTMuODUyOCA1LjI3IDEzLjYwNDMgNS4yN0MxMy4zNTU3IDUuMjcgMTMuMTU0MyA1LjQ3MTQ3IDEzLjE1NDMgNS43MlY2LjIyMzE3QzEyLjYwNTQgNS42MDA5NSAxMS43OTI0IDUuMjA3MDMgMTAuODk4OSA1LjIwNzAzWk0xMy4xNTQzIDkuNzk4MjNWNy4zMDE5NUMxMi43NjM5IDYuNTgxMDEgMTEuOTQxNCA2LjA1NzU3IDExLjA4NjggNi4wNTc1N0MxMC4xMDg4IDYuMDU3NTcgOS4wMzUwMyA2Ljk2NTgxIDkuMDM1MDMgOC42MDk1NUM5LjAzNTAzIDEwLjE1MzMgMTAuMDA4OCAxMS4xNjE1IDExLjA4NjggMTEuMTYxNUMxMS45NzAxIDExLjE2MTUgMTIuNzcxOSAxMC40OTUyIDEzLjE1NDMgOS43OTgyM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGxuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjY5ODk5IDUuMjA3MDNDMi4wNTgyMyA1LjIwNzAzIDAuODA5MjA0IDYuNjg1NjkgMC44MDkyMDQgOC42MDk3MkMwLjgwOTIwNCAxMC42MzM3IDIuMTU4MjMgMTIuMDEyNCAzLjY5ODk5IDEyLjAxMjRDNC41MjEyNiAxMi4wMTI0IDUuMzc0MDIgMTEuNjY5MyA1Ljk1MzkgMTEuMDIyM1YxMS41M0M1Ljk1MzkgMTEuNzc4NSA2LjE1NTM3IDExLjk4IDYuNDAzOSAxMS45OEM2LjY1MjQzIDExLjk4IDYuODUzOSAxMS43Nzg1IDYuODUzOSAxMS41M1Y1LjcyMDAxQzYuODUzOSA1LjQ3MTQ5IDYuNjUyNDMgNS4yNzAwMSA2LjQwMzkgNS4yNzAwMUM2LjE1NTM3IDUuMjcwMDEgNS45NTM5IDUuNDcxNDkgNS45NTM5IDUuNzIwMDFWNi4yMjI2OUM1LjQwNTA2IDUuNjAwNzUgNC41OTIxOCA1LjIwNzAzIDMuNjk4OTkgNS4yMDcwM1pNNS45NTM5IDkuNzk5VjcuMzAxMTdDNS41NjMzOSA2LjU4MDY0IDQuNzQxMTggNi4wNTc1NyAzLjg4NjggNi4wNTc1N0MyLjkwODkgNi4wNTc1NyAxLjgzNTA4IDYuOTY1ODEgMS44MzUwOCA4LjYwOTU1QzEuODM1MDggMTAuMTUzMyAyLjgwODg5IDExLjE2MTUgMy44ODY4IDExLjE2MTVDNC43Njk4NCAxMS4xNjE1IDUuNTcxNDEgMTAuNDk1NyA1Ljk1MzkgOS43OTlaTTEwLjc5OSA1LjIwNzAzQzkuMTU4MjMgNS4yMDcwMyA3LjkwOTIgNi42ODU2OSA3LjkwOTIgOC42MDk3MkM3LjkwOTIgMTAuNjMzNyA5LjI1ODIzIDEyLjAxMjQgMTAuNzk5IDEyLjAxMjRDMTEuNjIxNSAxMi4wMTI0IDEyLjQ3NDQgMTEuNjY5MiAxMy4wNTQzIDExLjAyMThWMTEuNTNDMTMuMDU0MyAxMS43Nzg1IDEzLjI1NTggMTEuOTggMTMuNTA0MyAxMS45OEMxMy43NTI5IDExLjk4IDEzLjk1NDMgMTEuNzc4NSAxMy45NTQzIDExLjUzVjUuNzJDMTMuOTU0MyA1LjQ3MTQ3IDEzLjc1MjkgNS4yNyAxMy41MDQzIDUuMjdDMTMuMjU1OCA1LjI3IDEzLjA1NDMgNS40NzE0NyAxMy4wNTQzIDUuNzJWNi4yMjMxOEMxMi41MDU1IDUuNjAwOTUgMTEuNjkyNCA1LjIwNzAzIDEwLjc5OSA1LjIwNzAzWk0xMy4wNTQzIDkuNzk4MjJWNy4zMDE5NkMxMi42NjQgNi41ODEwMiAxMS44NDE1IDYuMDU3NTcgMTAuOTg2OCA2LjA1NzU3QzEwLjAwODkgNi4wNTc1NyA4LjkzNTA4IDYuOTY1ODEgOC45MzUwOCA4LjYwOTU1QzguOTM1MDggMTAuMTUzMyA5LjkwODg5IDExLjE2MTUgMTAuOTg2OCAxMS4xNjE1QzExLjg3MDIgMTEuMTYxNSAxMi42NzIgMTAuNDk1MiAxMy4wNTQzIDkuNzk4MjJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxzbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuMjg5NSAyLjc1QzExLjQ5NjQgMi43NDk3OSAxMS42ODIxIDIuODc3MDEgMTEuNzU2NSAzLjA3MDAzTDE0Ljk2NjQgMTEuMzlDMTUuMDY1NyAxMS42NDc3IDE0LjkzNzUgMTEuOTM3MSAxNC42Nzk4IDEyLjAzNjVDMTQuNDIyMiAxMi4xMzU5IDE0LjEzMjggMTIuMDA3NiAxNC4wMzM0IDExLjc1TDEyLjk4MjIgOS4wMjUzN0g5LjYxMTA2TDguNTY2NzIgMTEuNzQ5QzguNDY3ODYgMTIuMDA2OCA4LjE3ODcgMTIuMTM1NyA3LjkyMDg2IDEyLjAzNjlDNy42NjMwMiAxMS45MzggNy41MzQxNCAxMS42NDg4IDcuNjMzMDEgMTEuMzkxTDEwLjgyMzIgMy4wNzA5OUMxMC44OTcyIDIuODc3ODIgMTEuMDgyNiAyLjc1MDIxIDExLjI4OTUgMi43NVpNMTEuMjkxNSA0LjY0Mjg0TDEyLjY1NDMgOC4xNzUzN0g5LjkzNjk4TDExLjI5MTUgNC42NDI4NFpNMi44OTg5NSA1LjIwNzAzQzEuMjU4MTggNS4yMDcwMyAwLjAwOTE1NTI3IDYuNjg1NjkgMC4wMDkxNTUyNyA4LjYwOTcyQzAuMDA5MTU1MjcgMTAuNjMzNyAxLjM1ODE4IDEyLjAxMjQgMi44OTg5NSAxMi4wMTI0QzMuNzIxNDEgMTIuMDEyNCA0LjU3NDM4IDExLjY2OTIgNS4xNTQyNyAxMS4wMjE5VjExLjUzQzUuMTU0MjcgMTEuNzc4NSA1LjM1NTc0IDExLjk4IDUuNjA0MjcgMTEuOThDNS44NTI4IDExLjk4IDYuMDU0MjcgMTEuNzc4NSA2LjA1NDI3IDExLjUzVjUuNzJDNi4wNTQyNyA1LjQ3MTQ3IDUuODUyOCA1LjI3IDUuNjA0MjcgNS4yN0M1LjM1NTc0IDUuMjcgNS4xNTQyNyA1LjQ3MTQ3IDUuMTU0MjcgNS43MlY2LjIyMzE3QzQuNjA1NDMgNS42MDA5NSAzLjc5MjM2IDUuMjA3MDMgMi44OTg5NSA1LjIwNzAzWk01LjE1NDI3IDkuNzk4MjNWNy4zMDE5NUM0Ljc2MzkzIDYuNTgxMDEgMy45NDE0NCA2LjA1NzU3IDMuMDg2NzUgNi4wNTc1N0MyLjEwODg1IDYuMDU3NTcgMS4wMzUwMyA2Ljk2NTgxIDEuMDM1MDMgOC42MDk1NUMxLjAzNTAzIDEwLjE1MzMgMi4wMDg4NSAxMS4xNjE1IDMuMDg2NzUgMTEuMTYxNUMzLjk3MDExIDExLjE2MTUgNC43NzE5NSAxMC40OTUyIDUuMTU0MjcgOS43OTgyM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGNuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjYyNTUgMi43NUMzLjgzNDc4IDIuNzUgNC4wMjE5MiAyLjg4MDM0IDQuMDk0NDggMy4wNzY2NEw3LjE2OTg1IDExLjM5NjJDNy4yNjU2IDExLjY1NTIgNy4xMzMyNCAxMS45NDI4IDYuODc0MjMgMTIuMDM4NkM2LjYxNTIyIDEyLjEzNDMgNi4zMjc2MyAxMi4wMDIgNi4yMzE4OCAxMS43NDI5TDUuMjIzODcgOS4wMTYwM0gyLjAyNzEyTDEuMDE5MTEgMTEuNzQyOUMwLjkyMzM2MiAxMi4wMDIgMC42MzU3NzQgMTIuMTM0MyAwLjM3Njc2MiAxMi4wMzg2QzAuMTE3NzQ5IDExLjk0MjggLTAuMDE0NjA1MiAxMS42NTUyIDAuMDgxMTQwMSAxMS4zOTYyTDMuMTU2NTEgMy4wNzY2NEMzLjIyOTA4IDIuODgwMzQgMy40MTYyMSAyLjc1IDMuNjI1NSAyLjc1Wk0zLjYyNTUgNC42OTIwN0w0LjkwOTY2IDguMTY2MDNIMi4zNDEzM0wzLjYyNTUgNC42OTIwN1pNMTEuMzcxOSAyLjc1QzExLjU4MTEgMi43NSAxMS43NjgzIDIuODgwMzQgMTEuODQwOCAzLjA3NjY0TDE0LjkxNjIgMTEuMzk2MkMxNS4wMTIgMTEuNjU1MiAxNC44Nzk2IDExLjk0MjggMTQuNjIwNiAxMi4wMzg2QzE0LjM2MTYgMTIuMTM0MyAxNC4wNzQgMTIuMDAyIDEzLjk3ODIgMTEuNzQyOUwxMi45NzAyIDkuMDE2MDNIOS43NzM0OEw4Ljc2NTQ3IDExLjc0MjlDOC42Njk3MiAxMi4wMDIgOC4zODIxMyAxMi4xMzQzIDguMTIzMTIgMTIuMDM4NkM3Ljg2NDExIDExLjk0MjggNy43MzE3NSAxMS42NTUyIDcuODI3NSAxMS4zOTYyTDEwLjkwMjkgMy4wNzY2NEMxMC45NzU0IDIuODgwMzQgMTEuMTYyNiAyLjc1IDExLjM3MTkgMi43NVpNMTEuMzcxOSA0LjY5MjA3TDEyLjY1NiA4LjE2NjAzSDEwLjA4NzdMMTEuMzcxOSA0LjY5MjA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNTUyOTMgMC45OTk5NjlDNC43NTI5NSAwLjk5OTk2OSA0LjkzMzcyIDEuMTE5MTcgNS4wMTI1IDEuMzAzMDFMOC4wMTEwNiA4LjI5OTgyQzguMTE5ODQgOC41NTM2MyA4LjAwMjI2IDguODQ3NTcgNy43NDg0NCA4Ljk1NjM1QzcuNDk0NjMgOS4wNjUxMiA3LjIwMDY5IDguOTQ3NTQgNy4wOTE5MSA4LjY5MzczTDYuMTE2MTMgNi40MTY4NUgyLjk4OTczTDIuMDEzOTUgOC42OTM3M0MxLjkwNTE3IDguOTQ3NTQgMS42MTEyMyA5LjA2NTEyIDEuMzU3NDIgOC45NTYzNUMxLjEwMzYgOC44NDc1NyAwLjk4NjAyMyA4LjU1MzYzIDEuMDk0OCA4LjI5OTgyTDQuMDkzMzYgMS4zMDMwMUM0LjE3MjE0IDEuMTE5MTcgNC4zNTI5MSAwLjk5OTk2OSA0LjU1MjkzIDAuOTk5OTY5Wk00LjU1MjkzIDIuNzY5MjlMNS43NTE4NiA1LjU2Njg1SDMuMzU0TDQuNTUyOTMgMi43NjkyOVpNMTEuMDU2MiA5LjAwMjE0QzExLjI2MTcgOS4wMDIxNCAxMS40NDYzIDguODc2MzMgMTEuNTIxNSA4LjY4NTAyTDE0LjI3MzMgMS42ODI5OUMxNC4zNzQzIDEuNDI1OTggMTQuMjQ3OCAxLjEzNTc1IDEzLjk5MDggMS4wMzQ3NUMxMy43MzM4IDAuOTMzNzQ3IDEzLjQ0MzYgMS4wNjAyMSAxMy4zNDI2IDEuMzE3MjJMMTEuMDU2MiA3LjEzNTE0TDguNzY5NzMgMS4zMTcyMkM4LjY2ODczIDEuMDYwMjEgOC4zNzg1IDAuOTMzNzQ3IDguMTIxNSAxLjAzNDc1QzcuODY0NDkgMS4xMzU3NSA3LjczODAyIDEuNDI1OTggNy44MzkwMiAxLjY4Mjk5TDEwLjU5MDggOC42ODUwMkMxMC42NjYgOC44NzYzMyAxMC44NTA2IDkuMDAyMTQgMTEuMDU2MiA5LjAwMjE0Wk0xNC45NTM3IDEyLjQ5OTlDMTQuOTUzNyAxMi42MDYgMTQuOTExNSAxMi43MDc3IDE0LjgzNjUgMTIuNzgyOEwxMi44MzY1IDE0Ljc4MjhDMTIuNjgwMyAxNC45MzkgMTIuNDI3MSAxNC45MzkgMTIuMjcwOCAxNC43ODI4QzEyLjExNDYgMTQuNjI2NSAxMi4xMTQ2IDE0LjM3MzMgMTIuMjcwOCAxNC4yMTcxTDEzLjU4OCAxMi44OTk5SDEuNTE5MzdMMi44MzY1MyAxNC4yMTcxQzIuOTkyNzQgMTQuMzczMyAyLjk5Mjc0IDE0LjYyNjUgMi44MzY1MyAxNC43ODI4QzIuNjgwMzIgMTQuOTM5IDIuNDI3MDUgMTQuOTM5IDIuMjcwODQgMTQuNzgyOEwwLjI3MDg0MyAxMi43ODI4QzAuMTk1ODI4IDEyLjcwNzcgMC4xNTM2ODcgMTIuNjA2IDAuMTUzNjg3IDEyLjQ5OTlDMC4xNTM2ODcgMTIuMzkzOCAwLjE5NTgyOCAxMi4yOTIxIDAuMjcwODQzIDEyLjIxNzFMMi4yNzA4NCAxMC4yMTcxQzIuNDI3MDUgMTAuMDYwOSAyLjY4MDMyIDEwLjA2MDkgMi44MzY1MyAxMC4yMTcxQzIuOTkyNzQgMTAuMzczMyAyLjk5Mjc0IDEwLjYyNjUgMi44MzY1MyAxMC43ODI4TDEuNTE5MzcgMTIuMDk5OUwxMy41ODggMTIuMDk5OUwxMi4yNzA4IDEwLjc4MjhDMTIuMTE0NiAxMC42MjY1IDEyLjExNDYgMTAuMzczMyAxMi4yNzA4IDEwLjIxNzFDMTIuNDI3MSAxMC4wNjA5IDEyLjY4MDMgMTAuMDYwOSAxMi44MzY1IDEwLjIxNzFMMTQuODM2NSAxMi4yMTcxQzE0LjkxMTUgMTIuMjkyMSAxNC45NTM3IDEyLjM5MzggMTQuOTUzNyAxMi40OTk5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguNjk2NjYgMC4wNDAzNTRDOC45MDg1OSAwLjEzMTAzOCA5LjAzMTA1IDAuMzU0ODU2IDguOTkzMTUgMC41ODIyMzVMOC4wOTAxOSA2LjAwMDAxSDEyLjQ5OTlDMTIuNjg5MyA2LjAwMDAxIDEyLjg2MjUgNi4xMDcwMSAxMi45NDcyIDYuMjc2NEMxMy4wMzE4IDYuNDQ1NzkgMTMuMDEzNiA2LjY0ODUgMTIuODk5OSA2LjhMNi44OTk5NyAxNC44QzYuNzYxNjYgMTQuOTg0NCA2LjUxNTIgMTUuMDUwMyA2LjMwMzI3IDE0Ljk1OTZDNi4wOTEzNCAxNC44NjkgNS45Njg4OCAxNC42NDUxIDYuMDA2NzggMTQuNDE3OEw2LjkwOTc0IDguOTk5OTlIMi40OTk5OUMyLjMxMDYxIDguOTk5OTkgMi4xMzc0NyA4Ljg5Mjk5IDIuMDUyNzggOC43MjM2QzEuOTY4MDggOC41NTQyMSAxLjk4NjM2IDguMzUxNSAyLjA5OTk5IDguMkw4LjA5OTk2IDAuMjAwMDM3QzguMjM4MjcgMC4wMTU2MjU1IDguNDg0NzMgLTAuMDUwMzMwMSA4LjY5NjY2IDAuMDQwMzU0Wk0zLjQ5OTk5IDhINy40OTk5NkM3LjY0Njk0IDggNy43ODY0NyA4LjA2NDY2IDcuODgxNDcgOC4xNzY4MUM3Ljk3NjQ3IDguMjg4OTUgOC4wMTczMiA4LjQzNzIyIDcuOTkzMTYgOC41ODIxOUw3LjMzMDI2IDEyLjU1OTZMMTEuNDk5OSA3SDcuNDk5OTZDNy4zNTI5OSA3IDcuMjEzNDYgNi45MzUzNCA3LjExODQ2IDYuODIzMTlDNy4wMjM0NiA2LjcxMTA1IDYuOTgyNjEgNi41NjI3OCA3LjAwNjc3IDYuNDE3ODFMNy42Njk2NyAyLjQ0MDQyTDMuNDk5OTkgOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHBuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjc4MjMzIDIuMjE3MTNDMy43MDczMiAyLjE0MjEyIDMuNjA1NTcgMi4wOTk5OCAzLjQ5OTQ5IDIuMDk5OThDMy4zOTM0IDIuMDk5OTggMy4yOTE2NiAyLjE0MjEyIDMuMjE2NjQgMi4yMTcxM0wxLjIxNjY0IDQuMjE3MTNDMS4wNjA0NCA0LjM3MzM0IDEuMDYwNDQgNC42MjY2MSAxLjIxNjY0IDQuNzgyODJDMS4zNzI4NSA0LjkzOTAzIDEuNjI2MTIgNC45MzkwMyAxLjc4MjMzIDQuNzgyODJMMy4wOTk0OSAzLjQ2NTY2TDMuMDk5NDkgMTEuNTM0M0wxLjc4MjMzIDEwLjIxNzFDMS42MjYxMiAxMC4wNjA5IDEuMzcyODUgMTAuMDYwOSAxLjIxNjY0IDEwLjIxNzFDMS4wNjA0MyAxMC4zNzMzIDEuMDYwNDMgMTAuNjI2NiAxLjIxNjY0IDEwLjc4MjhMMy4yMTY2NCAxMi43ODI4QzMuMjkxNjYgMTIuODU3OCAzLjM5MzQgMTIuOSAzLjQ5OTQ5IDEyLjlDMy42MDU1NyAxMi45IDMuNzA3MzEgMTIuODU3OCAzLjc4MjMzIDEyLjc4MjhMNS43ODIzMyAxMC43ODI4QzUuOTM4NTQgMTAuNjI2NiA1LjkzODU0IDEwLjM3MzMgNS43ODIzMyAxMC4yMTcxQzUuNjI2MTIgMTAuMDYwOSA1LjM3Mjg1IDEwLjA2MDkgNS4yMTY2NCAxMC4yMTcxTDMuODk5NDkgMTEuNTM0M0wzLjg5OTQ5IDMuNDY1NjZMNS4yMTY2NCA0Ljc4MjgyQzUuMzcyODUgNC45MzkwMyA1LjYyNjEyIDQuOTM5MDMgNS43ODIzMyA0Ljc4MjgyQzUuOTM4NTQgNC42MjY2MSA1LjkzODU0IDQuMzczMzQgNS43ODIzMyA0LjIxNzEzTDMuNzgyMzMgMi4yMTcxM1pNOC40OTk5OCAzLjk5OTk3QzguMjIzODMgMy45OTk5NyA3Ljk5OTk4IDQuMjIzODIgNy45OTk5OCA0LjQ5OTk3QzcuOTk5OTggNC43NzYxMSA4LjIyMzgzIDQuOTk5OTcgOC40OTk5OCA0Ljk5OTk3SDE0LjVDMTQuNzc2MSA0Ljk5OTk3IDE1IDQuNzc2MTEgMTUgNC40OTk5N0MxNSA0LjIyMzgyIDE0Ljc3NjEgMy45OTk5NyAxNC41IDMuOTk5OTdIOC40OTk5OFpNNy45OTk5OCA3LjQ5OTk3QzcuOTk5OTggNy4yMjM4MiA4LjIyMzgzIDYuOTk5OTcgOC40OTk5OCA2Ljk5OTk3SDE0LjVDMTQuNzc2MSA2Ljk5OTk3IDE1IDcuMjIzODIgMTUgNy40OTk5N0MxNSA3Ljc3NjExIDE0Ljc3NjEgNy45OTk5NyAxNC41IDcuOTk5OTdIOC40OTk5OEM4LjIyMzgzIDcuOTk5OTcgNy45OTk5OCA3Ljc3NjExIDcuOTk5OTggNy40OTk5N1pNOC40OTk5OCA5Ljk5OTk3QzguMjIzODMgOS45OTk5NyA3Ljk5OTk4IDEwLjIyMzggNy45OTk5OCAxMC41QzcuOTk5OTggMTAuNzc2MSA4LjIyMzgzIDExIDguNDk5OTggMTFIMTQuNUMxNC43NzYxIDExIDE1IDEwLjc3NjEgMTUgMTAuNUMxNSAxMC4yMjM4IDE0Ljc3NjEgOS45OTk5NyAxNC41IDkuOTk5OTdIOC40OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGZuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjYyNDcxIDQuMDAwMDFMNC41NjQwMiA0LjAwMDAxQzQuMDQxMzQgMy45OTk5MyAzLjcwNjg3IDMuOTk5ODggMy40MTgyIDQuMDU1QzIuMjM3OSA0LjI4MDM5IDEuMjk4NDYgNS4xNzA1MyAxLjA1ODE1IDYuMzMwMzVDMC45OTk1MzggNi42MTMyMSAwLjk5OTYwNCA2LjkzOTk4IDAuOTk5NzAzIDcuNDM2ODlMMC45OTk3MTEgNy41MDAwMUwwLjk5OTcwMyA3LjU2MzEzQzAuOTk5NjA0IDguMDYwMDQgMC45OTk1MzggOC4zODY4MSAxLjA1ODE1IDguNjY5NjdDMS4yOTg0NiA5LjgyOTUgMi4yMzc5IDEwLjcxOTYgMy40MTgyIDEwLjk0NUMzLjcwNjg4IDExLjAwMDEgNC4wNDEzNSAxMS4wMDAxIDQuNTY0MDMgMTFMNC42MjQ3MSAxMUg1LjQ5OTcxQzUuNzc1ODUgMTEgNS45OTk3MSAxMC43NzYyIDUuOTk5NzEgMTAuNUM1Ljk5OTcxIDEwLjIyMzkgNS43NzU4NSAxMCA1LjQ5OTcxIDEwSDQuNjI0NzFDNC4wMjA4NCAxMCAzLjc4OTA3IDkuOTk3NzcgMy42MDU3NyA5Ljk2Mjc3QzIuODAyNjIgOS44MDk0IDIuMTkxNTcgOS4yMTEwOCAyLjAzNzM1IDguNDY2NzhDMi4wMDIzMyA4LjI5Nzc4IDEuOTk5NzEgOC4wODI1MSAxLjk5OTcxIDcuNTAwMDFDMS45OTk3MSA2LjkxNzUyIDIuMDAyMzMgNi43MDIyNSAyLjAzNzM1IDYuNTMzMjRDMi4xOTE1NyA1Ljc4ODk1IDIuODAyNjIgNS4xOTA2MiAzLjYwNTc3IDUuMDM3MjVDMy43ODkwNyA1LjAwMjI1IDQuMDIwODQgNS4wMDAwMSA0LjYyNDcxIDUuMDAwMDFINS40OTk3MUM1Ljc3NTg1IDUuMDAwMDEgNS45OTk3MSA0Ljc3NjE1IDUuOTk5NzEgNC41MDAwMUM1Ljk5OTcxIDQuMjIzODcgNS43NzU4NSA0LjAwMDAxIDUuNDk5NzEgNC4wMDAwMUg0LjYyNDcxWk0xMC4zNzQ3IDUuMDAwMDFDMTAuOTc4NiA1LjAwMDAxIDExLjIxMDQgNS4wMDIyNSAxMS4zOTM3IDUuMDM3MjVDMTIuMTk2OCA1LjE5MDYyIDEyLjgwNzkgNS43ODg5NSAxMi45NjIxIDYuNTMzMjRDMTIuOTk3MSA2LjcwMjI1IDEyLjk5OTcgNi45MTc1MiAxMi45OTk3IDcuNTAwMDFDMTIuOTk5NyA4LjA4MjUxIDEyLjk5NzEgOC4yOTc3OCAxMi45NjIxIDguNDY2NzhDMTIuODA3OSA5LjIxMTA4IDEyLjE5NjggOS44MDk0IDExLjM5MzcgOS45NjI3N0MxMS4yMTA0IDkuOTk3NzcgMTAuOTc4NiAxMCAxMC4zNzQ3IDEwSDkuNDk5NzFDOS4yMjM1NyAxMCA4Ljk5OTcxIDEwLjIyMzkgOC45OTk3MSAxMC41QzguOTk5NzEgMTAuNzc2MiA5LjIyMzU3IDExIDkuNDk5NzEgMTFIMTAuMzc0N0wxMC40MzU0IDExQzEwLjk1ODEgMTEuMDAwMSAxMS4yOTI1IDExLjAwMDEgMTEuNTgxMiAxMC45NDVDMTIuNzYxNSAxMC43MTk2IDEzLjcwMSA5LjgyOTUgMTMuOTQxMyA4LjY2OTY3QzEzLjk5OTkgOC4zODY4MSAxMy45OTk4IDguMDYwMDUgMTMuOTk5NyA3LjU2MzE0TDEzLjk5OTcgNy41MDAwMUwxMy45OTk3IDcuNDM2ODhDMTMuOTk5OCA2LjkzOTk4IDEzLjk5OTkgNi42MTMyMSAxMy45NDEzIDYuMzMwMzVDMTMuNzAxIDUuMTcwNTMgMTIuNzYxNSA0LjI4MDM5IDExLjU4MTIgNC4wNTVDMTEuMjkyNSAzLjk5OTg4IDEwLjk1ODEgMy45OTk5MyAxMC40MzU0IDQuMDAwMDFMMTAuMzc0NyA0LjAwMDAxSDkuNDk5NzFDOS4yMjM1NyA0LjAwMDAxIDguOTk5NzEgNC4yMjM4NyA4Ljk5OTcxIDQuNTAwMDFDOC45OTk3MSA0Ljc3NjE1IDkuMjIzNTcgNS4wMDAwMSA5LjQ5OTcxIDUuMDAwMDFIMTAuMzc0N1pNNS4wMDAzOCA3QzQuNzI0MjQgNyA0LjUwMDM4IDcuMjIzODYgNC41MDAzOCA3LjVDNC41MDAzOCA3Ljc3NjE0IDQuNzI0MjQgOCA1LjAwMDM4IDhIMTAuMDAwNEMxMC4yNzY1IDggMTAuNTAwNCA3Ljc3NjE0IDEwLjUwMDQgNy41QzEwLjUwMDQgNy4yMjM4NiAxMC4yNzY1IDcgMTAuMDAwNCA3SDUuMDAwMzhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxobj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC41MTE5NCAzLjAwNTQxQzkuMTg4MjkgMi41NDU5NCAxMC4wNDM1IDIuNTM2OTQgMTAuNjc4OCAyLjk1NDE5QzEwLjgyMzEgMy4wNDg5MyAxMC45NzcxIDMuMTk5MyAxMS4zODkgMy42MTExOUMxMS44MDA5IDQuMDIzMDcgMTEuOTUxMyA0LjE3NzE0IDEyLjA0NiA0LjMyMTQxQzEyLjQ2MzMgNC45NTY3NSAxMi40NTQzIDUuODExOTIgMTEuOTk0OCA2LjQ4ODI3QzExLjg4OTkgNi42NDI2NCAxMS43Mjc2IDYuODA4MTEgMTEuMzAwNiA3LjIzNTExTDEwLjY4MTkgNy44NTM4M0MxMC40ODY3IDguMDQ5MDkgMTAuNDg2NyA4LjM2NTY3IDEwLjY4MTkgOC41NjA5M0MxMC44NzcyIDguNzU2MiAxMS4xOTM4IDguNzU2MiAxMS4zODkgOC41NjA5M0wxMi4wMDc3IDcuOTQyMjFMMTIuMDUwNyA3Ljg5OTI5QzEyLjQyMDMgNy41Mjk3NiAxMi42NTY4IDcuMjkzMyAxMi44MjIgNy4wNTAyQzEzLjQ5NzIgNi4wNTYyMyAxMy41MzIxIDQuNzYyNTIgMTIuODgxOSAzLjc3MjQ4QzEyLjcyMzMgMy41MzEwMiAxMi40OTIyIDMuMzAwMDEgMTIuMTQwOCAyLjk0ODcxTDEyLjA5NjEgMi45MDQwOEwxMi4wNTE1IDIuODU5NDJDMTEuNzAwMiAyLjUwOCAxMS40NjkyIDIuMjc2ODkgMTEuMjI3NyAyLjExODMyQzEwLjIzNzcgMS40NjgxMyA4Ljk0Mzk4IDEuNTAyOTkgNy45NTAwMSAyLjE3ODIyQzcuNzA2OTEgMi4zNDMzNiA3LjQ3MDQ0IDIuNTc5OTEgNy4xMDA5IDIuOTQ5NTVMNy4wNTggMi45OTI0N0w2LjQzOTI4IDMuNjExMTlDNi4yNDQwMSAzLjgwNjQ1IDYuMjQ0MDEgNC4xMjMwMyA2LjQzOTI4IDQuMzE4MjlDNi42MzQ1NCA0LjUxMzU1IDYuOTUxMTIgNC41MTM1NSA3LjE0NjM4IDQuMzE4MjlMNy43NjUxIDMuNjk5NTdDOC4xOTIxIDMuMjcyNTcgOC4zNTc1NyAzLjExMDI3IDguNTExOTQgMy4wMDU0MVpNNC4zMTc5NiA3LjE0NjcyQzQuNTEzMjIgNi45NTE0NiA0LjUxMzIyIDYuNjM0ODcgNC4zMTc5NiA2LjQzOTYxQzQuMTIyNjkgNi4yNDQzNSAzLjgwNjExIDYuMjQ0MzUgMy42MTA4NSA2LjQzOTYxTDIuOTkyMTMgNy4wNTgzM0wyLjk0OTIyIDcuMTAxMjRDMi41Nzk1NyA3LjQ3MDc3IDIuMzQzMDMgNy43MDcyNCAyLjE3Nzg4IDcuOTUwMzVDMS41MDI2NSA4Ljk0NDMyIDEuNDY3OCAxMC4yMzggMi4xMTc5OSAxMS4yMjgxQzIuMjc2NTYgMTEuNDY5NSAyLjUwNzY2IDExLjcwMDUgMi44NTkxIDEyLjA1MThMMi45MDM3NCAxMi4wOTY1TDIuOTQ4MzcgMTIuMTQxMUMzLjI5OTY3IDEyLjQ5MjUgMy41MzA2OCAxMi43MjM3IDMuNzcyMTQgMTIuODgyMkM0Ljc2MjE5IDEzLjUzMjQgNi4wNTU4OSAxMy40OTc2IDcuMDQ5ODYgMTIuODIyM0M3LjI5Mjk2IDEyLjY1NzIgNy41Mjk0MyAxMi40MjA2IDcuODk4OTYgMTIuMDUxTDcuODk4OTcgMTIuMDUxTDcuOTQxODggMTIuMDA4MUw4LjU2MDYgMTEuMzg5NEM4Ljc1NTg2IDExLjE5NDEgOC43NTU4NiAxMC44Nzc1IDguNTYwNiAxMC42ODIzQzguMzY1MzMgMTAuNDg3IDguMDQ4NzUgMTAuNDg3IDcuODUzNDkgMTAuNjgyM0w3LjIzNDc3IDExLjMwMUM2LjgwNzc3IDExLjcyOCA2LjY0MjMgMTEuODkwMyA2LjQ4Nzk0IDExLjk5NTFDNS44MTE1OCAxMi40NTQ2IDQuOTU2NDIgMTIuNDYzNiA0LjMyMTA3IDEyLjA0NjRDNC4xNzY4MSAxMS45NTE2IDQuMDIyNzQgMTEuODAxMiAzLjYxMDg1IDExLjM4OTRDMy4xOTg5NiAxMC45Nzc1IDMuMDQ4NiAxMC44MjM0IDIuOTUzODUgMTAuNjc5MUMyLjUzNjYxIDEwLjA0MzggMi41NDU2MSA5LjE4ODYzIDMuMDA1MDcgOC41MTIyN0MzLjEwOTkzIDguMzU3OTEgMy4yNzIyNCA4LjE5MjQ0IDMuNjk5MjQgNy43NjU0NEw0LjMxNzk2IDcuMTQ2NzJaTTkuNjIxNzIgNi4wODU1OEM5LjgxNjk4IDUuODkwMzIgOS44MTY5OCA1LjU3MzczIDkuNjIxNzIgNS4zNzg0N0M5LjQyNjQ2IDUuMTgzMjEgOS4xMDk4OCA1LjE4MzIxIDguOTE0NjEgNS4zNzg0N0w1LjM3OTA4IDguOTE0MDFDNS4xODM4MiA5LjEwOTI3IDUuMTgzODIgOS40MjU4NSA1LjM3OTA4IDkuNjIxMTFDNS41NzQzNCA5LjgxNjM3IDUuODkwOTIgOS44MTYzNyA2LjA4NjE5IDkuNjIxMTFMOS42MjE3MiA2LjA4NTU4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZ249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjM1MzYgMi4zNTM1NUMxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAxLjg0MTcxIDEzLjM1MzYgMS42NDY0NUMxMy4xNTgzIDEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEyLjY0NjQgMS42NDY0NUwxLjY0NjQ1IDEyLjY0NjRDMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTMuMTU4MyAxLjY0NjQ1IDEzLjM1MzZDMS44NDE3MSAxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAyLjM1MzU1IDEzLjM1MzZMMTMuMzUzNiAyLjM1MzU1Wk0yLjAzNzM1IDguNDY2NzhDMi4xNzM5OCA5LjEyNjE5IDIuNjY5MTggOS42NzEwMyAzLjMzODg2IDkuODkzMzhMMi41NzgzMyAxMC42NTM5QzEuODA4NDMgMTAuMjUzNCAxLjIzNzg0IDkuNTM2OTMgMS4wNTgxNSA4LjY2OTY3QzAuOTk5NTM4IDguMzg2ODEgMC45OTk2MDQgOC4wNjAwNCAwLjk5OTcwMyA3LjU2MzEzTDAuOTk5NzExIDcuNTAwMDFMMC45OTk3MDMgNy40MzY4OUMwLjk5OTYwNCA2LjkzOTk4IDAuOTk5NTM4IDYuNjEzMjEgMS4wNTgxNSA2LjMzMDM1QzEuMjk4NDYgNS4xNzA1MyAyLjIzNzkgNC4yODAzOSAzLjQxODIgNC4wNTVDMy43MDY4NyAzLjk5OTg4IDQuMDQxMzQgMy45OTk5MyA0LjU2NDAyIDQuMDAwMDFMNC42MjQ3MSA0LjAwMDAxSDUuNDk5NzFDNS43NzU4NSA0LjAwMDAxIDUuOTk5NzEgNC4yMjM4NyA1Ljk5OTcxIDQuNTAwMDFDNS45OTk3MSA0Ljc3NjE1IDUuNzc1ODUgNS4wMDAwMSA1LjQ5OTcxIDUuMDAwMDFINC42MjQ3MUM0LjAyMDg0IDUuMDAwMDEgMy43ODkwNyA1LjAwMjI1IDMuNjA1NzcgNS4wMzcyNUMyLjgwMjYyIDUuMTkwNjIgMi4xOTE1NyA1Ljc4ODk1IDIuMDM3MzUgNi41MzMyNEMyLjAwMjMzIDYuNzAyMjUgMS45OTk3MSA2LjkxNzUyIDEuOTk5NzEgNy41MDAwMUMxLjk5OTcxIDguMDgyNTEgMi4wMDIzMyA4LjI5Nzc4IDIuMDM3MzUgOC40NjY3OFpNMTIuOTYyMSA2LjUzMzI0QzEyLjgyNTUgNS44NzM5NyAxMi4zMzA0IDUuMzI5MjIgMTEuNjYxIDUuMTA2NzlMMTIuNDIxNSA0LjM0NjMxQzEzLjE5MTIgNC43NDY4NiAxMy43NjE2IDUuNDYzMjMgMTMuOTQxMyA2LjMzMDM1QzEzLjk5OTkgNi42MTMyMSAxMy45OTk4IDYuOTM5OTggMTMuOTk5NyA3LjQzNjg4TDEzLjk5OTcgNy41MDAwMUwxMy45OTk3IDcuNTYzMTRDMTMuOTk5OCA4LjA2MDA1IDEzLjk5OTkgOC4zODY4MSAxMy45NDEzIDguNjY5NjdDMTMuNzAxIDkuODI5NSAxMi43NjE1IDEwLjcxOTYgMTEuNTgxMiAxMC45NDVDMTEuMjkyNSAxMS4wMDAxIDEwLjk1ODEgMTEuMDAwMSAxMC40MzU0IDExTDEwLjM3NDcgMTFIOS40OTk3MUM5LjIyMzU3IDExIDguOTk5NzEgMTAuNzc2MiA4Ljk5OTcxIDEwLjVDOC45OTk3MSAxMC4yMjM5IDkuMjIzNTcgMTAgOS40OTk3MSAxMEgxMC4zNzQ3QzEwLjk3ODYgMTAgMTEuMjEwNCA5Ljk5Nzc3IDExLjM5MzcgOS45NjI3N0MxMi4xOTY4IDkuODA5NCAxMi44MDc5IDkuMjExMDggMTIuOTYyMSA4LjQ2Njc4QzEyLjk5NzEgOC4yOTc3OCAxMi45OTk3IDguMDgyNTEgMTIuOTk5NyA3LjUwMDAxQzEyLjk5OTcgNi45MTc1MiAxMi45OTcxIDYuNzAyMjUgMTIuOTYyMSA2LjUzMzI0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNTAwMjEgMEM0Ljc3NjM1IDAgNS4wMDAyIDAuMjIzODUzIDUuMDAwMiAwLjQ5OTk5VjIuNDk5OTVDNS4wMDAyIDIuNzc2MDkgNC43NzYzNSAyLjk5OTk0IDQuNTAwMjEgMi45OTk5NEM0LjIyNDA4IDIuOTk5OTQgNC4wMDAyMiAyLjc3NjA5IDQuMDAwMjIgMi40OTk5NVYwLjQ5OTk5QzQuMDAwMjIgMC4yMjM4NTMgNC4yMjQwOCAwIDQuNTAwMjEgMFpNMC42NDY0NTEgMC42NDY0N0MwLjg0MTcxIDAuNDUxMjEyIDEuMTU4MjkgMC40NTEyMTIgMS4zNTM1NCAwLjY0NjQ3TDIuODUzNTEgMi4xNDY0NEMzLjA0ODc3IDIuMzQxNyAzLjA0ODc3IDIuNjU4MjcgMi44NTM1MSAyLjg1MzUzQzIuNjU4MjYgMy4wNDg3OSAyLjM0MTY4IDMuMDQ4NzkgMi4xNDY0MiAyLjg1MzUzTDAuNjQ2NDUyIDEuMzUzNTZDMC40NTExOTMgMS4xNTgzIDAuNDUxMTkzIDAuODQxNzI4IDAuNjQ2NDUxIDAuNjQ2NDdaTTAuMDAwMzA1MTcgNC40OTk5MUMwLjAwMDMwNTE3IDQuMjIzNzcgMC4yMjQxNTggMy45OTk5MiAwLjUwMDI5NSAzLjk5OTkySDIuNTAwMjVDMi43NzYzOSAzLjk5OTkyIDMuMDAwMjQgNC4yMjM3NyAzLjAwMDI0IDQuNDk5OTFDMy4wMDAyNCA0Ljc3NjA1IDIuNzc2MzkgNC45OTk5IDIuNTAwMjUgNC45OTk5SDAuNTAwMjk1QzAuMjI0MTU4IDQuOTk5OSAwLjAwMDMwNTE3IDQuNzc2MDUgMC4wMDAzMDUxNyA0LjQ5OTkxWk0xMi4wMDAxIDEwLjQ5OThDMTIuMDAwMSAxMC4yMjM2IDEyLjIyMzkgOS45OTk4IDEyLjUwMDEgOS45OTk4SDE0LjVDMTQuNzc2MSA5Ljk5OTggMTUgMTAuMjIzNiAxNSAxMC40OTk4QzE1IDEwLjc3NTkgMTQuNzc2MSAxMC45OTk4IDE0LjUgMTAuOTk5OEgxMi41MDAxQzEyLjIyMzkgMTAuOTk5OCAxMi4wMDAxIDEwLjc3NTkgMTIuMDAwMSAxMC40OTk4Wk0xMC41MDAxIDExLjk5OThDMTAuNzc2MiAxMS45OTk4IDExLjAwMDEgMTIuMjIzNiAxMS4wMDAxIDEyLjQ5OTdWMTQuNDk5N0MxMS4wMDAxIDE0Ljc3NTggMTAuNzc2MiAxNC45OTk3IDEwLjUwMDEgMTQuOTk5N0MxMC4yMjQgMTQuOTk5NyAxMC4wMDAxIDE0Ljc3NTggMTAuMDAwMSAxNC40OTk3VjEyLjQ5OTdDMTAuMDAwMSAxMi4yMjM2IDEwLjIyNCAxMS45OTk4IDEwLjUwMDEgMTEuOTk5OFpNMTIuMTQ2MiAxMi4xNDYyQzEyLjM0MTUgMTEuOTUxIDEyLjY1OCAxMS45NTEgMTIuODUzMyAxMi4xNDYyTDE0LjM1MzMgMTMuNjQ2MkMxNC41NDg1IDEzLjg0MTUgMTQuNTQ4NSAxNC4xNTggMTQuMzUzMyAxNC4zNTMzQzE0LjE1OCAxNC41NDg1IDEzLjg0MTQgMTQuNTQ4NSAxMy42NDYyIDE0LjM1MzNMMTIuMTQ2MiAxMi44NTMzQzExLjk1MSAxMi42NTgxIDExLjk1MSAxMi4zNDE1IDEyLjE0NjIgMTIuMTQ2MlpNNy43NjQ3OCAzLjY5OTM4QzguMTkxNzcgMy4yNzIzOCA4LjM1NzI0IDMuMTEwMDggOC41MTE2IDMuMDA1MjJDOS4xODc5NCAyLjU0NTc3IDEwLjA0MzEgMi41MzY3NyAxMC42Nzg0IDIuOTU0MDFDMTAuODIyNyAzLjA0ODc1IDEwLjk3NjcgMy4xOTkxMSAxMS4zODg2IDMuNjEwOTlDMTEuODAwNSA0LjAyMjg3IDExLjk1MDkgNC4xNzY5NCAxMi4wNDU2IDQuMzIxMkMxMi40NjI4IDQuOTU2NTMgMTIuNDUzOSA1LjgxMTY4IDExLjk5NDQgNi40ODgwMkMxMS44ODk1IDYuNjQyMzggMTEuNzI3MiA2LjgwNzg1IDExLjMwMDIgNy4yMzQ4NEwxMC42ODE1IDcuODUzNTRDMTAuNDg2MyA4LjA0ODggMTAuNDg2MyA4LjM2NTM4IDEwLjY4MTUgOC41NjA2NEMxMC44NzY4IDguNzU1ODkgMTEuMTkzNCA4Ljc1NTg5IDExLjM4ODYgOC41NjA2NEwxMi4wMDczIDcuOTQxOTNMMTIuMDUwMiA3Ljg5OTAzQzEyLjQxOTkgNy41Mjk1IDEyLjY1NjQgNy4yOTMwMyAxMi44MjE2IDcuMDQ5OTNDMTMuNDk2OCA2LjA1NTk4IDEzLjUzMTYgNC43NjIzIDEyLjg4MTUgMy43NzIyOEMxMi43MjI5IDMuNTMwODMgMTIuNDkxOCAzLjI5OTgyIDEyLjE0MDQgMi45NDg1M0wxMi4wOTU3IDIuOTAzOUwxMi4wNTExIDIuODU5MjVDMTEuNjk5OCAyLjUwNzgyIDExLjQ2ODggMi4yNzY3MiAxMS4yMjczIDIuMTE4MTZDMTAuMjM3MyAxLjQ2Nzk4IDguOTQzNjQgMS41MDI4NCA3Ljk0OTY4IDIuMTc4MDVDNy43MDY1OSAyLjM0MzE5IDcuNDcwMTIgMi41Nzk3MyA3LjEwMDYgMi45NDkzNkw3LjEwMDYgMi45NDkzN0w3LjA1NzY5IDIuOTkyMjhMNi40Mzg5OCAzLjYxMDk5QzYuMjQzNzIgMy44MDYyNSA2LjI0MzcyIDQuMTIyODIgNi40Mzg5OCA0LjMxODA4QzYuNjM0MjQgNC41MTMzNCA2Ljk1MDgxIDQuNTEzMzQgNy4xNDYwNyA0LjMxODA4TDcuNzY0NzggMy42OTkzOFpNMi45OTE5MSA3LjA1ODA3TDIuOTQ4OTkgNy4xMDA5N0MyLjU3OTM1IDcuNDcwNSAyLjM0MjgyIDcuNzA2OTcgMi4xNzc2NyA3Ljk1MDA2QzEuNTAyNDYgOC45NDQwMSAxLjQ2NzYgMTAuMjM3NyAyLjExNzc4IDExLjIyNzdDMi4yNzYzNCAxMS40NjkyIDIuNTA3NDQgMTEuNzAwMiAyLjg1ODg2IDEyLjA1MTVMMi44NTg4OCAxMi4wNTE1TDIuOTAzNTIgMTIuMDk2MUwyLjk0ODE1IDEyLjE0MDdMMi45NDgxNSAxMi4xNDA3TDIuOTQ4MTcgMTIuMTQwOEMzLjI5OTQ1IDEyLjQ5MjIgMy41MzA0NSAxMi43MjMzIDMuNzcxOSAxMi44ODE4QzQuNzYxOTMgMTMuNTMyIDYuMDU1NiAxMy40OTcyIDcuMDQ5NTYgMTIuODIxOUM3LjI5MjY1IDEyLjY1NjggNy41MjkxMiAxMi40MjAzIDcuODk4NjUgMTIuMDUwNkw3Ljk0MTU1IDEyLjAwNzdMOC41NjAyNiAxMS4zODlDOC43NTU1MiAxMS4xOTM3IDguNzU1NTIgMTAuODc3MiA4LjU2MDI2IDEwLjY4MTlDOC4zNjUgMTAuNDg2NyA4LjA0ODQyIDEwLjQ4NjcgNy44NTMxNyAxMC42ODE5TDcuMjM0NDYgMTEuMzAwNkM2LjgwNzQ3IDExLjcyNzYgNi42NDIgMTEuODg5OSA2LjQ4NzY0IDExLjk5NDhDNS44MTEzIDEyLjQ1NDIgNC45NTYxNSAxMi40NjMyIDQuMzIwODIgMTIuMDQ2QzQuMTc2NTYgMTEuOTUxMiA0LjAyMjQ5IDExLjgwMDkgMy42MTA2MSAxMS4zODlDMy4xOTg3MyAxMC45NzcxIDMuMDQ4MzcgMTAuODIzMSAyLjk1MzYzIDEwLjY3ODhDMi41MzYzOSAxMC4wNDM1IDIuNTQ1MzkgOS4xODgzMiAzLjAwNDg0IDguNTExOThDMy4xMDk3MSA4LjM1NzYxIDMuMjcyMDEgOC4xOTIxNSAzLjY5OSA3Ljc2NTE2TDQuMzE3NyA3LjE0NjQ1QzQuNTEyOTYgNi45NTExOSA0LjUxMjk2IDYuNjM0NjIgNC4zMTc3IDYuNDM5MzZDNC4xMjI0NSA2LjI0NDEgMy44MDU4NyA2LjI0NDEgMy42MTA2MSA2LjQzOTM2TDIuOTkxOTEgNy4wNTgwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LENuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjU2NDI3IDMuOTk5ODhDNC41ODQyMiAzLjk5OTg5IDQuNjA0NDUgMy45OTk4OSA0LjYyNDk2IDMuOTk5ODlINS40OTk5NkM1Ljc3NjEgMy45OTk4OSA1Ljk5OTk2IDQuMjIzNzUgNS45OTk5NiA0LjQ5OTg5QzUuOTk5OTYgNC43NzYwMyA1Ljc3NjEgNC45OTk4OSA1LjQ5OTk2IDQuOTk5ODlINC42MjQ5NkM0LjAyMTA4IDQuOTk5ODkgMy43ODkzMiA1LjAwMjEzIDMuNjA2MDEgNS4wMzcxM0MyLjgwMjg3IDUuMTkwNSAyLjE5MTgxIDUuNzg4ODMgMi4wMzc1OSA2LjUzMzEyQzIuMDAyNTcgNi43MDIxMiAxLjk5OTk2IDYuOTE3MzkgMS45OTk5NiA3LjQ5OTg5QzEuOTk5OTYgOC4wODIzOSAyLjAwMjU3IDguMjk3NjYgMi4wMzc1OSA4LjQ2NjY2QzIuMTkxODEgOS4yMTA5NSAyLjgwMjg3IDkuODA5MjggMy42MDYwMSA5Ljk2MjY1QzMuNzg5MzIgOS45OTc2NSA0LjAyMTA4IDkuOTk5ODkgNC42MjQ5NiA5Ljk5OTg5SDUuNDk5OTZDNS43NzYxIDkuOTk5ODkgNS45OTk5NiAxMC4yMjM3IDUuOTk5OTYgMTAuNDk5OUM1Ljk5OTk2IDEwLjc3NiA1Ljc3NjEgMTAuOTk5OSA1LjQ5OTk2IDEwLjk5OTlINC42MjQ5NkM0LjYwNDQ1IDEwLjk5OTkgNC41ODQyMiAxMC45OTk5IDQuNTY0MjcgMTAuOTk5OUM0LjA0MTU5IDExIDMuNzA3MTIgMTEgMy40MTg0NSAxMC45NDQ5QzIuMjM4MTQgMTAuNzE5NSAxLjI5ODcxIDkuODI5MzcgMS4wNTgzOSA4LjY2OTU1QzAuOTk5NzgyIDguMzg2NjkgMC45OTk4NDggOC4wNTk5MiAwLjk5OTk0NyA3LjU2MzAxQzAuOTk5OTUxIDcuNTQyMjcgMC45OTk5NTUgNy41MjEyMyAwLjk5OTk1NSA3LjQ5OTg5QzAuOTk5OTU1IDcuNDc4NTUgMC45OTk5NTEgNy40NTc1MSAwLjk5OTk0NyA3LjQzNjc3QzAuOTk5ODQ4IDYuOTM5ODYgMC45OTk3ODIgNi42MTMwOSAxLjA1ODM5IDYuMzMwMjNDMS4yOTg3MSA1LjE3MDQxIDIuMjM4MTQgNC4yODAyNyAzLjQxODQ1IDQuMDU0ODhDMy43MDcxMiAzLjk5OTc2IDQuMDQxNTkgMy45OTk4MSA0LjU2NDI3IDMuOTk5ODhaTTExLjM5MzkgNS4wMzcxM0MxMS4yMTA2IDUuMDAyMTMgMTAuOTc4OCA0Ljk5OTg5IDEwLjM3NSA0Ljk5OTg5SDkuNDk5OTZDOS4yMjM4MSA0Ljk5OTg5IDguOTk5OTYgNC43NzYwMyA4Ljk5OTk2IDQuNDk5ODlDOC45OTk5NiA0LjIyMzc1IDkuMjIzODEgMy45OTk4OSA5LjQ5OTk2IDMuOTk5ODlIMTAuMzc1QzEwLjM5NTUgMy45OTk4OSAxMC40MTU3IDMuOTk5ODkgMTAuNDM1NiAzLjk5OTg4QzEwLjk1ODMgMy45OTk4MSAxMS4yOTI4IDMuOTk5NzYgMTEuNTgxNSA0LjA1NDg4QzEyLjc2MTggNC4yODAyNyAxMy43MDEyIDUuMTcwNDEgMTMuOTQxNSA2LjMzMDIzQzE0LjAwMDEgNi42MTMwOSAxNC4wMDAxIDYuOTM5ODUgMTQgNy40MzY3NkMxNCA3LjQ1NzUgMTQgNy40Nzg1NCAxNCA3LjQ5OTg5QzE0IDcuNTIxMjQgMTQgNy41NDIyOCAxNCA3LjU2MzAyQzE0LjAwMDEgOC4wNTk5MiAxNC4wMDAxIDguMzg2NjkgMTMuOTQxNSA4LjY2OTU1QzEzLjcwMTIgOS44MjkzNyAxMi43NjE4IDEwLjcxOTUgMTEuNTgxNSAxMC45NDQ5QzExLjI5MjggMTEgMTAuOTU4MyAxMSAxMC40MzU2IDEwLjk5OTlDMTAuNDE1NyAxMC45OTk5IDEwLjM5NTUgMTAuOTk5OSAxMC4zNzUgMTAuOTk5OUg5LjQ5OTk2QzkuMjIzODEgMTAuOTk5OSA4Ljk5OTk2IDEwLjc3NiA4Ljk5OTk2IDEwLjQ5OTlDOC45OTk5NiAxMC4yMjM3IDkuMjIzODEgOS45OTk4OSA5LjQ5OTk2IDkuOTk5ODlIMTAuMzc1QzEwLjk3ODggOS45OTk4OSAxMS4yMTA2IDkuOTk3NjUgMTEuMzkzOSA5Ljk2MjY1QzEyLjE5NyA5LjgwOTI4IDEyLjgwODEgOS4yMTA5NSAxMi45NjIzIDguNDY2NjZDMTIuOTk3MyA4LjI5NzY2IDEzIDguMDgyMzkgMTMgNy40OTk4OUMxMyA2LjkxNzM5IDEyLjk5NzMgNi43MDIxMiAxMi45NjIzIDYuNTMzMTJDMTIuODA4MSA1Ljc4ODgzIDEyLjE5NyA1LjE5MDUgMTEuMzkzOSA1LjAzNzEzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwLjY3ODggMi45NTQxOUMxMC4wNDM1IDIuNTM2OTQgOS4xODgyOSAyLjU0NTk0IDguNTExOTQgMy4wMDU0MUM4LjM1NzU3IDMuMTEwMjcgOC4xOTIxIDMuMjcyNTcgNy43NjUxIDMuNjk5NTdMNy4xNDYzOCA0LjMxODI5QzYuOTUxMTIgNC41MTM1NSA2LjYzNDU0IDQuNTEzNTUgNi40MzkyOCA0LjMxODI5QzYuMjQ0MDEgNC4xMjMwMyA2LjI0NDAxIDMuODA2NDUgNi40MzkyOCAzLjYxMTE5TDcuMDU4IDIuOTkyNDdDNy4wNzI1IDIuOTc3OTcgNy4wODY3OSAyLjk2MzY2IDcuMTAwOSAyLjk0OTU1QzcuNDcwNDQgMi41Nzk5MSA3LjcwNjkxIDIuMzQzMzYgNy45NTAwMSAyLjE3ODIyQzguOTQzOTggMS41MDI5OSAxMC4yMzc3IDEuNDY4MTMgMTEuMjI3NyAyLjExODMyQzExLjQ2OTIgMi4yNzY4OSAxMS43MDAyIDIuNTA4IDEyLjA1MTUgMi44NTk0MkMxMi4wNjYyIDIuODc0MSAxMi4wODEgMi44ODg5OCAxMi4wOTYxIDIuOTA0MDhDMTIuMTExMiAyLjkxOTE3IDEyLjEyNjEgMi45MzQwNSAxMi4xNDA4IDIuOTQ4NzFDMTIuNDkyMiAzLjMwMDAxIDEyLjcyMzMgMy41MzEwMiAxMi44ODE5IDMuNzcyNDhDMTMuNTMyMSA0Ljc2MjUyIDEzLjQ5NzIgNi4wNTYyMyAxMi44MjIgNy4wNTAyQzEyLjY1NjggNy4yOTMzIDEyLjQyMDMgNy41Mjk3NiAxMi4wNTA3IDcuODk5MjlDMTIuMDM2NiA3LjkxMzQgMTIuMDIyMiA3LjkyNzcxIDEyLjAwNzcgNy45NDIyMUwxMS4zODkgOC41NjA5M0MxMS4xOTM4IDguNzU2MiAxMC44NzcyIDguNzU2MiAxMC42ODE5IDguNTYwOTNDMTAuNDg2NyA4LjM2NTY3IDEwLjQ4NjcgOC4wNDkwOSAxMC42ODE5IDcuODUzODNMMTEuMzAwNiA3LjIzNTExQzExLjcyNzYgNi44MDgxMSAxMS44ODk5IDYuNjQyNjQgMTEuOTk0OCA2LjQ4ODI3QzEyLjQ1NDMgNS44MTE5MiAxMi40NjMzIDQuOTU2NzUgMTIuMDQ2IDQuMzIxNDFDMTEuOTUxMyA0LjE3NzE0IDExLjgwMDkgNC4wMjMwNyAxMS4zODkgMy42MTExOUMxMC45NzcxIDMuMTk5MyAxMC44MjMxIDMuMDQ4OTMgMTAuNjc4OCAyLjk1NDE5Wk00LjMxNzk2IDYuNDM5NjFDNC41MTMyMiA2LjYzNDg3IDQuNTEzMjIgNi45NTE0NiA0LjMxNzk2IDcuMTQ2NzJMMy42OTkyNCA3Ljc2NTQ0QzMuMjcyMjQgOC4xOTI0NCAzLjEwOTkzIDguMzU3OTEgMy4wMDUwNyA4LjUxMjI3QzIuNTQ1NjEgOS4xODg2MyAyLjUzNjYxIDEwLjA0MzggMi45NTM4NSAxMC42NzkxQzMuMDQ4NiAxMC44MjM0IDMuMTk4OTYgMTAuOTc3NSAzLjYxMDg1IDExLjM4OTRDNC4wMjI3NCAxMS44MDEyIDQuMTc2ODEgMTEuOTUxNiA0LjMyMTA3IDEyLjA0NjRDNC45NTY0MiAxMi40NjM2IDUuODExNTggMTIuNDU0NiA2LjQ4Nzk0IDExLjk5NTFDNi42NDIzIDExLjg5MDMgNi44MDc3NyAxMS43MjggNy4yMzQ3NyAxMS4zMDFMNy44NTM0OSAxMC42ODIzQzguMDQ4NzUgMTAuNDg3IDguMzY1MzMgMTAuNDg3IDguNTYwNiAxMC42ODIzQzguNzU1ODYgMTAuODc3NSA4Ljc1NTg2IDExLjE5NDEgOC41NjA2IDExLjM4OTRMNy45NDE4OCAxMi4wMDgxQzcuOTI3MzggMTIuMDIyNiA3LjkxMzA3IDEyLjAzNjkgNy44OTg5NyAxMi4wNTFDNy41Mjk0MyAxMi40MjA2IDcuMjkyOTYgMTIuNjU3MiA3LjA0OTg2IDEyLjgyMjNDNi4wNTU4OSAxMy40OTc2IDQuNzYyMTkgMTMuNTMyNCAzLjc3MjE0IDEyLjg4MjJDMy41MzA2OCAxMi43MjM3IDMuMjk5NjcgMTIuNDkyNSAyLjk0ODM3IDEyLjE0MTFDMi45MzM3MSAxMi4xMjY0IDIuOTE4ODMgMTIuMTExNiAyLjkwMzc0IDEyLjA5NjVDMi44ODg2NSAxMi4wODE0IDIuODczNzcgMTIuMDY2NSAyLjg1OTEgMTIuMDUxOEMyLjUwNzY2IDExLjcwMDUgMi4yNzY1NiAxMS40Njk1IDIuMTE3OTkgMTEuMjI4MUMxLjQ2NzggMTAuMjM4IDEuNTAyNjUgOC45NDQzMiAyLjE3Nzg4IDcuOTUwMzVDMi4zNDMwMyA3LjcwNzI0IDIuNTc5NTcgNy40NzA3NyAyLjk0OTIyIDcuMTAxMjRDMi45NjMzMyA3LjA4NzEzIDIuOTc3NjMgNy4wNzI4MyAyLjk5MjEzIDcuMDU4MzNMMy42MTA4NSA2LjQzOTYxQzMuODA2MTEgNi4yNDQzNSA0LjEyMjY5IDYuMjQ0MzUgNC4zMTc5NiA2LjQzOTYxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sd249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSA1LjI1QzEuOTE0MjEgNS4yNSAyLjI1IDQuOTE0MjEgMi4yNSA0LjVDMi4yNSA0LjA4NTc5IDEuOTE0MjEgMy43NSAxLjUgMy43NUMxLjA4NTc5IDMuNzUgMC43NSA0LjA4NTc5IDAuNzUgNC41QzAuNzUgNC45MTQyMSAxLjA4NTc5IDUuMjUgMS41IDUuMjVaTTQgNC41QzQgNC4yMjM4NiA0LjIyMzg2IDQgNC41IDRIMTMuNUMxMy43NzYxIDQgMTQgNC4yMjM4NiAxNCA0LjVDMTQgNC43NzYxNCAxMy43NzYxIDUgMTMuNSA1SDQuNUM0LjIyMzg2IDUgNCA0Ljc3NjE0IDQgNC41Wk00LjUgN0M0LjIyMzg2IDcgNCA3LjIyMzg2IDQgNy41QzQgNy43NzYxNCA0LjIyMzg2IDggNC41IDhIMTMuNUMxMy43NzYxIDggMTQgNy43NzYxNCAxNCA3LjVDMTQgNy4yMjM4NiAxMy43NzYxIDcgMTMuNSA3SDQuNVpNNC41IDEwQzQuMjIzODYgMTAgNCAxMC4yMjM5IDQgMTAuNUM0IDEwLjc3NjEgNC4yMjM4NiAxMSA0LjUgMTFIMTMuNUMxMy43NzYxIDExIDE0IDEwLjc3NjEgMTQgMTAuNUMxNCAxMC4yMjM5IDEzLjc3NjEgMTAgMTMuNSAxMEg0LjVaTTIuMjUgNy41QzIuMjUgNy45MTQyMSAxLjkxNDIxIDguMjUgMS41IDguMjVDMS4wODU3OSA4LjI1IDAuNzUgNy45MTQyMSAwLjc1IDcuNUMwLjc1IDcuMDg1NzkgMS4wODU3OSA2Ljc1IDEuNSA2Ljc1QzEuOTE0MjEgNi43NSAyLjI1IDcuMDg1NzkgMi4yNSA3LjVaTTEuNSAxMS4yNUMxLjkxNDIxIDExLjI1IDIuMjUgMTAuOTE0MiAyLjI1IDEwLjVDMi4yNSAxMC4wODU4IDEuOTE0MjEgOS43NSAxLjUgOS43NUMxLjA4NTc5IDkuNzUgMC43NSAxMC4wODU4IDAuNzUgMTAuNUMwLjc1IDEwLjkxNDIgMS4wODU3OSAxMS4yNSAxLjUgMTEuMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxibj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSA0LjYzNjAxQzUgMy43NjAzMSA1LjI0MjE5IDMuMTA1NCA1LjY0MzIzIDIuNjczNTdDNi4wMzkzNCAyLjI0NzA1IDYuNjQ1ODIgMS45NzgzIDcuNTAxNCAxLjk3ODNDOC4zNTc0NSAxLjk3ODMgOC45NjMwNiAyLjI0NjUyIDkuMzU4MjMgMi42NzIwOEM5Ljc1ODM4IDMuMTAyOTkgMTAgMy43NTcwOCAxMCA0LjYzMzI1VjUuOTk5OTlINVY0LjYzNjAxWk00IDUuOTk5OTlWNC42MzYwMUM0IDMuNTgxNDggNC4yOTMzOSAyLjY1NzU0IDQuOTEwNDkgMS45OTMwN0M1LjUzMjUyIDEuMzIzMjkgNi40MjY3NSAwLjk3ODMwMiA3LjUwMTQgMC45NzgzMDJDOC41NzU4MyAwLjk3ODMwMiA5LjQ2OTUyIDEuMzIyMzMgMTAuMDkxIDEuOTkxNjJDMTAuNzA3NiAyLjY1NTU3IDExIDMuNTc4OTYgMTEgNC42MzMyNVY1Ljk5OTk5SDEyQzEyLjU1MjMgNS45OTk5OSAxMyA2LjQ0NzcxIDEzIDYuOTk5OTlWMTNDMTMgMTMuNTUyMyAxMi41NTIzIDE0IDEyIDE0SDNDMi40NDc3MiAxNCAyIDEzLjU1MjMgMiAxM1Y2Ljk5OTk5QzIgNi40NDc3MSAyLjQ0NzcyIDUuOTk5OTkgMyA1Ljk5OTk5SDRaTTMgNi45OTk5OUgxMlYxM0gzVjYuOTk5OTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTg2IDBDNi4zMjU3IDAgNS4zNjEwNyAwLjM4OTQzIDQuNzM3NTMgMS4xOTM2MUM0LjIzNzQ1IDEuODM4NTYgNCAyLjY4MjQyIDQgMy42MzMyNUg1QzUgMi44NDMxMyA1LjE5NjkxIDIuMjMzMTIgNS41Mjc4IDEuODA2MzZDNS45MTYxNSAxLjMwNTUyIDYuNTUxNTIgMSA3LjQ5ODYgMUM4LjM1NjgzIDEgOC45NjMzNiAxLjI2NTAyIDkuMzU4NDYgMS42ODYyM0M5Ljc1NzkzIDIuMTEyMTEgMTAgMi43NjA0NCAxMCAzLjYzNjAxVjZIM0MyLjQ0NzcyIDYgMiA2LjQ0NzcyIDIgN1YxM0MyIDEzLjU1MjMgMi40NDc3MiAxNCAzIDE0SDEyQzEyLjU1MjMgMTQgMTMgMTMuNTUyMyAxMyAxM1Y3QzEzIDYuNDQ3NzEgMTIuNTUyMyA2IDEyIDZIMTFWMy42MzYwMUMxMSAyLjU4MTM1IDEwLjcwNjUgMS42NjE2NyAxMC4wODc4IDEuMDAyMUM5LjQ2NDc3IDAuMzM3ODcxIDguNTcwNjEgMCA3LjQ5ODYgMFpNMyA3SDEyVjEzSDNWN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHhuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05IDMuNjM2MDFDOSAyLjc2MDQ0IDkuMjQyMDcgMi4xMTIxMSA5LjY0MTU0IDEuNjg2MjNDMTAuMDM2NiAxLjI2NTAyIDEwLjY0MzIgMSAxMS41MDE0IDFDMTIuNDQ4NSAxIDEzLjA4MzkgMS4zMDU1MiAxMy40NzIyIDEuODA2MzZDMTMuODAzMSAyLjIzMzEyIDE0IDIuODQzMTMgMTQgMy42MzMyNUgxNUMxNSAyLjY4MjQyIDE0Ljc2MjYgMS44Mzg1NiAxNC4yNjI1IDEuMTkzNjFDMTMuNjM4OSAwLjM4OTQzIDEyLjY3NDMgMCAxMS41MDE0IDBDMTAuNDI5NCAwIDkuNTM1MjMgMC4zMzc4NzEgOC45MTIxOCAxLjAwMjFDOC4yOTM1MSAxLjY2MTY3IDggMi41ODEzNSA4IDMuNjM2MDFWNkgxQzAuNDQ3NzE1IDYgMCA2LjQ0NzcyIDAgN1YxM0MwIDEzLjU1MjMgMC40NDc3MTUgMTQgMSAxNEgxMEMxMC41NTIzIDE0IDExIDEzLjU1MjMgMTEgMTNWN0MxMSA2LjQ0NzcyIDEwLjU1MjMgNiAxMCA2SDlWMy42MzYwMVpNMSA3SDEwVjEzSDFWN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGtuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjM1MzU1IDEuODUzNTVDMy41NDg4MiAxLjY1ODI5IDMuNTQ4ODIgMS4zNDE3MSAzLjM1MzU1IDEuMTQ2NDVDMy4xNTgyOSAwLjk1MTE4NCAyLjg0MTcxIDAuOTUxMTg0IDIuNjQ2NDUgMS4xNDY0NUwwLjY0NjQ0NyAzLjE0NjQ1QzAuNDUxMTg0IDMuMzQxNzEgMC40NTExODQgMy42NTgyOSAwLjY0NjQ0NyAzLjg1MzU1TDIuNjQ2NDUgNS44NTM1NUMyLjg0MTcxIDYuMDQ4ODIgMy4xNTgyOSA2LjA0ODgyIDMuMzUzNTUgNS44NTM1NUMzLjU0ODgyIDUuNjU4MjkgMy41NDg4MiA1LjM0MTcxIDMuMzUzNTUgNS4xNDY0NUwyLjIwNzExIDRIOS41QzExLjQzMyA0IDEzIDUuNTY3IDEzIDcuNUMxMyA3Ljc3NjE0IDEzLjIyMzkgOCAxMy41IDhDMTMuNzc2MSA4IDE0IDcuNzc2MTQgMTQgNy41QzE0IDUuMDE0NzIgMTEuOTg1MyAzIDkuNSAzSDIuMjA3MTFMMy4zNTM1NSAxLjg1MzU1Wk0yIDcuNUMyIDcuMjIzODYgMS43NzYxNCA3IDEuNSA3QzEuMjIzODYgNyAxIDcuMjIzODYgMSA3LjVDMSA5Ljk4NTI4IDMuMDE0NzIgMTIgNS41IDEySDEyLjc5MjlMMTEuNjQ2NCAxMy4xNDY0QzExLjQ1MTIgMTMuMzQxNyAxMS40NTEyIDEzLjY1ODMgMTEuNjQ2NCAxMy44NTM2QzExLjg0MTcgMTQuMDQ4OCAxMi4xNTgzIDE0LjA0ODggMTIuMzUzNiAxMy44NTM2TDE0LjM1MzYgMTEuODUzNkMxNC41NDg4IDExLjY1ODMgMTQuNTQ4OCAxMS4zNDE3IDE0LjM1MzYgMTEuMTQ2NEwxMi4zNTM2IDkuMTQ2NDVDMTIuMTU4MyA4Ljk1MTE4IDExLjg0MTcgOC45NTExOCAxMS42NDY0IDkuMTQ2NDVDMTEuNDUxMiA5LjM0MTcxIDExLjQ1MTIgOS42NTgyOSAxMS42NDY0IDkuODUzNTVMMTIuNzkyOSAxMUg1LjVDMy41NjcgMTEgMiA5LjQzMyAyIDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFNuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy45IDAuNDk5OTc2QzEzLjkgMC4yNzkwNjIgMTMuNzIwOSAwLjA5OTk3NTYgMTMuNSAwLjA5OTk3NTZDMTMuMjc5MSAwLjA5OTk3NTYgMTMuMSAwLjI3OTA2MiAxMy4xIDAuNDk5OTc2VjEuMDk5OThIMTIuNUMxMi4yNzkxIDEuMDk5OTggMTIuMSAxLjI3OTA2IDEyLjEgMS40OTk5OEMxMi4xIDEuNzIwODkgMTIuMjc5MSAxLjg5OTk4IDEyLjUgMS44OTk5OEgxMy4xVjIuNDk5OThDMTMuMSAyLjcyMDg5IDEzLjI3OTEgMi44OTk5OCAxMy41IDIuODk5OThDMTMuNzIwOSAyLjg5OTk4IDEzLjkgMi43MjA4OSAxMy45IDIuNDk5OThWMS44OTk5OEgxNC41QzE0LjcyMDkgMS44OTk5OCAxNC45IDEuNzIwODkgMTQuOSAxLjQ5OTk4QzE0LjkgMS4yNzkwNiAxNC43MjA5IDEuMDk5OTggMTQuNSAxLjA5OTk4SDEzLjlWMC40OTk5NzZaTTExLjg1MzYgMy4xNDY0MkMxMi4wNDg4IDMuMzQxNjggMTIuMDQ4OCAzLjY1ODI2IDExLjg1MzYgMy44NTM1M0wxMC44NTM2IDQuODUzNTNDMTAuNjU4MyA1LjA0ODc5IDEwLjM0MTcgNS4wNDg3OSAxMC4xNDY1IDQuODUzNTNDOS45NTEyIDQuNjU4MjcgOS45NTEyIDQuMzQxNjkgMTAuMTQ2NSA0LjE0NjQyTDExLjE0NjQgMy4xNDY0M0MxMS4zNDE3IDIuOTUxMTYgMTEuNjU4MyAyLjk1MTE2IDExLjg1MzYgMy4xNDY0MlpNOS44NTM1NyA1LjE0NjQyQzEwLjA0ODggNS4zNDE2OCAxMC4wNDg4IDUuNjU4MjcgOS44NTM1NyA1Ljg1MzUzTDIuODUzNTUgMTIuODUzNUMyLjY1ODI5IDEzLjA0ODggMi4zNDE3MSAxMy4wNDg4IDIuMTQ2NDUgMTIuODUzNUMxLjk1MTE4IDEyLjY1ODMgMS45NTExOCAxMi4zNDE3IDIuMTQ2NDUgMTIuMTQ2NEw5LjE0NjQ2IDUuMTQ2NDJDOS4zNDE3MiA0Ljk1MTE2IDkuNjU4MzEgNC45NTExNiA5Ljg1MzU3IDUuMTQ2NDJaTTEzLjUgNS4wOTk5OEMxMy43MjA5IDUuMDk5OTggMTMuOSA1LjI3OTA2IDEzLjkgNS40OTk5OFY2LjA5OTk4SDE0LjVDMTQuNzIwOSA2LjA5OTk4IDE0LjkgNi4yNzkwNiAxNC45IDYuNDk5OThDMTQuOSA2LjcyMDg5IDE0LjcyMDkgNi44OTk5OCAxNC41IDYuODk5OThIMTMuOVY3LjQ5OTk4QzEzLjkgNy43MjA4OSAxMy43MjA5IDcuODk5OTggMTMuNSA3Ljg5OTk4QzEzLjI3OTEgNy44OTk5OCAxMy4xIDcuNzIwODkgMTMuMSA3LjQ5OTk4VjYuODk5OThIMTIuNUMxMi4yNzkxIDYuODk5OTggMTIuMSA2LjcyMDg5IDEyLjEgNi40OTk5OEMxMi4xIDYuMjc5MDYgMTIuMjc5MSA2LjA5OTk4IDEyLjUgNi4wOTk5OEgxMy4xVjUuNDk5OThDMTMuMSA1LjI3OTA2IDEzLjI3OTEgNS4wOTk5OCAxMy41IDUuMDk5OThaTTguOTAwMDIgMC40OTk5NzZDOC45MDAwMiAwLjI3OTA2MiA4LjcyMDkzIDAuMDk5OTc1NiA4LjUwMDAyIDAuMDk5OTc1NkM4LjI3OTEgMC4wOTk5NzU2IDguMTAwMDIgMC4yNzkwNjIgOC4xMDAwMiAwLjQ5OTk3NlYxLjA5OTk4SDcuNTAwMDJDNy4yNzkxIDEuMDk5OTggNy4xMDAwMiAxLjI3OTA2IDcuMTAwMDIgMS40OTk5OEM3LjEwMDAyIDEuNzIwODkgNy4yNzkxIDEuODk5OTggNy41MDAwMiAxLjg5OTk4SDguMTAwMDJWMi40OTk5OEM4LjEwMDAyIDIuNzIwODkgOC4yNzkxIDIuODk5OTggOC41MDAwMiAyLjg5OTk4QzguNzIwOTMgMi44OTk5OCA4LjkwMDAyIDIuNzIwODkgOC45MDAwMiAyLjQ5OTk4VjEuODk5OThIOS41MDAwMkM5LjcyMDkzIDEuODk5OTggOS45MDAwMiAxLjcyMDg5IDkuOTAwMDIgMS40OTk5OEM5LjkwMDAyIDEuMjc5MDYgOS43MjA5MyAxLjA5OTk4IDkuNTAwMDIgMS4wOTk5OEg4LjkwMDAyVjAuNDk5OTc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sT249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwIDYuNUMxMCA4LjQzMyA4LjQzMyAxMCA2LjUgMTBDNC41NjcgMTAgMyA4LjQzMyAzIDYuNUMzIDQuNTY3IDQuNTY3IDMgNi41IDNDOC40MzMgMyAxMCA0LjU2NyAxMCA2LjVaTTkuMzA4ODQgMTAuMDE1OUM4LjUzOTAxIDEwLjYzMTggNy41NjI1MSAxMSA2LjUgMTFDNC4wMTQ3MiAxMSAyIDguOTg1MjggMiA2LjVDMiA0LjAxNDcyIDQuMDE0NzIgMiA2LjUgMkM4Ljk4NTI4IDIgMTEgNC4wMTQ3MiAxMSA2LjVDMTEgNy41NjI1MSAxMC42MzE4IDguNTM5MDEgMTAuMDE1OSA5LjMwODg0TDEyLjg1MzYgMTIuMTQ2NEMxMy4wNDg4IDEyLjM0MTcgMTMuMDQ4OCAxMi42NTgzIDEyLjg1MzYgMTIuODUzNkMxMi42NTgzIDEzLjA0ODggMTIuMzQxNyAxMy4wNDg4IDEyLjE0NjQgMTIuODUzNkw5LjMwODg0IDEwLjAxNTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxNbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS40OTk4OCAyLjAwMDEyQzEuNzc2MDIgMi4wMDAxMiAxLjk5OTg4IDEuNzc2MjYgMS45OTk4OCAxLjUwMDEyQzEuOTk5ODggMS4yMjM5OCAxLjc3NjAyIDEuMDAwMTIgMS40OTk4OCAxLjAwMDEyQzEuMjIzNzQgMS4wMDAxMiAwLjk5OTg3OCAxLjIyMzk4IDAuOTk5ODc4IDEuNTAwMTJDMC45OTk4NzggMS43NzYyNiAxLjIyMzc0IDIuMDAwMTIgMS40OTk4OCAyLjAwMDEyWk00LjQ5OTg4IDIuMDAwMTJDNC43NzYwMiAyLjAwMDEyIDQuOTk5ODggMS43NzYyNiA0Ljk5OTg4IDEuNTAwMTJDNC45OTk4OCAxLjIyMzk4IDQuNzc2MDIgMS4wMDAxMiA0LjQ5OTg4IDEuMDAwMTJDNC4yMjM3NCAxLjAwMDEyIDMuOTk5ODggMS4yMjM5OCAzLjk5OTg4IDEuNTAwMTJDMy45OTk4OCAxLjc3NjI2IDQuMjIzNzQgMi4wMDAxMiA0LjQ5OTg4IDIuMDAwMTJaTTcuOTk5ODggMS41MDAxMkM3Ljk5OTg4IDEuNzc2MjYgNy43NzYwMiAyLjAwMDEyIDcuNDk5ODggMi4wMDAxMkM3LjIyMzc0IDIuMDAwMTIgNi45OTk4OCAxLjc3NjI2IDYuOTk5ODggMS41MDAxMkM2Ljk5OTg4IDEuMjIzOTggNy4yMjM3NCAxLjAwMDEyIDcuNDk5ODggMS4wMDAxMkM3Ljc3NjAyIDEuMDAwMTIgNy45OTk4OCAxLjIyMzk4IDcuOTk5ODggMS41MDAxMlpNMTAuNDk5OSAyLjAwMDEyQzEwLjc3NiAyLjAwMDEyIDEwLjk5OTkgMS43NzYyNiAxMC45OTk5IDEuNTAwMTJDMTAuOTk5OSAxLjIyMzk4IDEwLjc3NiAxLjAwMDEyIDEwLjQ5OTkgMS4wMDAxMkMxMC4yMjM3IDEuMDAwMTIgOS45OTk4OCAxLjIyMzk4IDkuOTk5ODggMS41MDAxMkM5Ljk5OTg4IDEuNzc2MjYgMTAuMjIzNyAyLjAwMDEyIDEwLjQ5OTkgMi4wMDAxMlpNMTMuOTk5OSAxLjUwMDEyQzEzLjk5OTkgMS43NzYyNiAxMy43NzYgMi4wMDAxMiAxMy40OTk5IDIuMDAwMTJDMTMuMjIzNyAyLjAwMDEyIDEyLjk5OTkgMS43NzYyNiAxMi45OTk5IDEuNTAwMTJDMTIuOTk5OSAxLjIyMzk4IDEzLjIyMzcgMS4wMDAxMiAxMy40OTk5IDEuMDAwMTJDMTMuNzc2IDEuMDAwMTIgMTMuOTk5OSAxLjIyMzk4IDEzLjk5OTkgMS41MDAxMlpNMS40OTk4OCAxNC4wMDAxQzEuNzc2MDIgMTQuMDAwMSAxLjk5OTg4IDEzLjc3NjMgMS45OTk4OCAxMy41MDAxQzEuOTk5ODggMTMuMjI0IDEuNzc2MDIgMTMuMDAwMSAxLjQ5OTg4IDEzLjAwMDFDMS4yMjM3NCAxMy4wMDAxIDAuOTk5ODc4IDEzLjIyNCAwLjk5OTg3OCAxMy41MDAxQzAuOTk5ODc4IDEzLjc3NjMgMS4yMjM3NCAxNC4wMDAxIDEuNDk5ODggMTQuMDAwMVpNMS45OTk4OCAxMC41MDAxQzEuOTk5ODggMTAuNzc2MyAxLjc3NjAyIDExLjAwMDEgMS40OTk4OCAxMS4wMDAxQzEuMjIzNzQgMTEuMDAwMSAwLjk5OTg3OCAxMC43NzYzIDAuOTk5ODc4IDEwLjUwMDFDMC45OTk4NzggMTAuMjI0IDEuMjIzNzQgMTAuMDAwMSAxLjQ5OTg4IDEwLjAwMDFDMS43NzYwMiAxMC4wMDAxIDEuOTk5ODggMTAuMjI0IDEuOTk5ODggMTAuNTAwMVpNMS40OTk4OCA4LjAwMDEyQzEuNzc2MDIgOC4wMDAxMiAxLjk5OTg4IDcuNzc2MjYgMS45OTk4OCA3LjUwMDEyQzEuOTk5ODggNy4yMjM5OCAxLjc3NjAyIDcuMDAwMTIgMS40OTk4OCA3LjAwMDEyQzEuMjIzNzQgNy4wMDAxMiAwLjk5OTg3OCA3LjIyMzk4IDAuOTk5ODc4IDcuNTAwMTJDMC45OTk4NzggNy43NzYyNiAxLjIyMzc0IDguMDAwMTIgMS40OTk4OCA4LjAwMDEyWk0xLjk5OTg4IDQuNTAwMTJDMS45OTk4OCA0Ljc3NjI2IDEuNzc2MDIgNS4wMDAxMiAxLjQ5OTg4IDUuMDAwMTJDMS4yMjM3NCA1LjAwMDEyIDAuOTk5ODc4IDQuNzc2MjYgMC45OTk4NzggNC41MDAxMkMwLjk5OTg3OCA0LjIyMzk4IDEuMjIzNzQgNC4wMDAxMiAxLjQ5OTg4IDQuMDAwMTJDMS43NzYwMiA0LjAwMDEyIDEuOTk5ODggNC4yMjM5OCAxLjk5OTg4IDQuNTAwMTJaTTEzLjQ5OTkgMTEuMDAwMUMxMy43NzYgMTEuMDAwMSAxMy45OTk5IDEwLjc3NjMgMTMuOTk5OSAxMC41MDAxQzEzLjk5OTkgMTAuMjI0IDEzLjc3NiAxMC4wMDAxIDEzLjQ5OTkgMTAuMDAwMUMxMy4yMjM3IDEwLjAwMDEgMTIuOTk5OSAxMC4yMjQgMTIuOTk5OSAxMC41MDAxQzEyLjk5OTkgMTAuNzc2MyAxMy4yMjM3IDExLjAwMDEgMTMuNDk5OSAxMS4wMDAxWk0xMy45OTk5IDcuNTAwMTJDMTMuOTk5OSA3Ljc3NjI2IDEzLjc3NiA4LjAwMDEyIDEzLjQ5OTkgOC4wMDAxMkMxMy4yMjM3IDguMDAwMTIgMTIuOTk5OSA3Ljc3NjI2IDEyLjk5OTkgNy41MDAxMkMxMi45OTk5IDcuMjIzOTggMTMuMjIzNyA3LjAwMDEyIDEzLjQ5OTkgNy4wMDAxMkMxMy43NzYgNy4wMDAxMiAxMy45OTk5IDcuMjIzOTggMTMuOTk5OSA3LjUwMDEyWk0xMy40OTk5IDUuMDAwMTJDMTMuNzc2IDUuMDAwMTIgMTMuOTk5OSA0Ljc3NjI2IDEzLjk5OTkgNC41MDAxMkMxMy45OTk5IDQuMjIzOTggMTMuNzc2IDQuMDAwMTIgMTMuNDk5OSA0LjAwMDEyQzEzLjIyMzcgNC4wMDAxMiAxMi45OTk5IDQuMjIzOTggMTIuOTk5OSA0LjUwMDEyQzEyLjk5OTkgNC43NzYyNiAxMy4yMjM3IDUuMDAwMTIgMTMuNDk5OSA1LjAwMDEyWk00Ljk5OTg4IDEzLjUwMDFDNC45OTk4OCAxMy43NzYzIDQuNzc2MDIgMTQuMDAwMSA0LjQ5OTg4IDE0LjAwMDFDNC4yMjM3NCAxNC4wMDAxIDMuOTk5ODggMTMuNzc2MyAzLjk5OTg4IDEzLjUwMDFDMy45OTk4OCAxMy4yMjQgNC4yMjM3NCAxMy4wMDAxIDQuNDk5ODggMTMuMDAwMUM0Ljc3NjAyIDEzLjAwMDEgNC45OTk4OCAxMy4yMjQgNC45OTk4OCAxMy41MDAxWk03LjQ5OTg4IDE0LjAwMDFDNy43NzYwMiAxNC4wMDAxIDcuOTk5ODggMTMuNzc2MyA3Ljk5OTg4IDEzLjUwMDFDNy45OTk4OCAxMy4yMjQgNy43NzYwMiAxMy4wMDAxIDcuNDk5ODggMTMuMDAwMUM3LjIyMzc0IDEzLjAwMDEgNi45OTk4OCAxMy4yMjQgNi45OTk4OCAxMy41MDAxQzYuOTk5ODggMTMuNzc2MyA3LjIyMzc0IDE0LjAwMDEgNy40OTk4OCAxNC4wMDAxWk0xMC45OTk5IDEzLjUwMDFDMTAuOTk5OSAxMy43NzYzIDEwLjc3NiAxNC4wMDAxIDEwLjQ5OTkgMTQuMDAwMUMxMC4yMjM3IDE0LjAwMDEgOS45OTk4OCAxMy43NzYzIDkuOTk5ODggMTMuNTAwMUM5Ljk5OTg4IDEzLjIyNCAxMC4yMjM3IDEzLjAwMDEgMTAuNDk5OSAxMy4wMDAxQzEwLjc3NiAxMy4wMDAxIDEwLjk5OTkgMTMuMjI0IDEwLjk5OTkgMTMuNTAwMVpNMTMuNDk5OSAxNC4wMDAxQzEzLjc3NiAxNC4wMDAxIDEzLjk5OTkgMTMuNzc2MyAxMy45OTk5IDEzLjUwMDFDMTMuOTk5OSAxMy4yMjQgMTMuNzc2IDEzLjAwMDEgMTMuNDk5OSAxMy4wMDAxQzEzLjIyMzcgMTMuMDAwMSAxMi45OTk5IDEzLjIyNCAxMi45OTk5IDEzLjUwMDFDMTIuOTk5OSAxMy43NzYzIDEzLjIyMzcgMTQuMDAwMSAxMy40OTk5IDE0LjAwMDFaTTMuOTk5ODggNS4wMDAxMkMzLjk5OTg4IDQuNDQ3ODQgNC40NDc1OSA0LjAwMDEyIDQuOTk5ODggNC4wMDAxMkg5Ljk5OTg4QzEwLjU1MjIgNC4wMDAxMiAxMC45OTk5IDQuNDQ3ODQgMTAuOTk5OSA1LjAwMDEyVjEwLjAwMDFDMTAuOTk5OSAxMC41NTI0IDEwLjU1MjIgMTEuMDAwMSA5Ljk5OTg4IDExLjAwMDFINC45OTk4OEM0LjQ0NzU5IDExLjAwMDEgMy45OTk4OCAxMC41NTI0IDMuOTk5ODggMTAuMDAwMVY1LjAwMDEyWk00Ljk5OTg4IDUuMDAwMTJIOS45OTk4OFYxMC4wMDAxSDQuOTk5ODhWNS4wMDAxMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LExuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDJIMTRWMTNIMUwxIDJaTTAgMkMwIDEuNDQ3NzIgMC40NDc3MTUgMSAxIDFIMTRDMTQuNTUyMyAxIDE1IDEuNDQ3NzIgMTUgMlYxM0MxNSAxMy41NTIzIDE0LjU1MjMgMTQgMTQgMTRIMUMwLjQ0NzcxNSAxNCAwIDEzLjU1MjMgMCAxM1YyWk00Ljg3NSA3LjVDNC44NzUgNi4wNTAyNSA2LjA1MDI1IDQuODc1IDcuNSA0Ljg3NUM4Ljk0OTc1IDQuODc1IDEwLjEyNSA2LjA1MDI1IDEwLjEyNSA3LjVDMTAuMTI1IDguOTQ5NzUgOC45NDk3NSAxMC4xMjUgNy41IDEwLjEyNUM2LjA1MDI1IDEwLjEyNSA0Ljg3NSA4Ljk0OTc1IDQuODc1IDcuNVpNNy41IDMuODc1QzUuNDk3OTcgMy44NzUgMy44NzUgNS40OTc5NyAzLjg3NSA3LjVDMy44NzUgOS41MDIwMyA1LjQ5Nzk3IDExLjEyNSA3LjUgMTEuMTI1QzkuNTAyMDMgMTEuMTI1IDExLjEyNSA5LjUwMjAzIDExLjEyNSA3LjVDMTEuMTI1IDUuNDk3OTcgOS41MDIwMyAzLjg3NSA3LjUgMy44NzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxfbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSAxQzAuNDQ3NzE1IDEgMCAxLjQ0NzcyIDAgMlYxM0MwIDEzLjU1MjMgMC40NDc3MTUgMTQgMSAxNEgxNEMxNC41NTIzIDE0IDE1IDEzLjU1MjMgMTUgMTNWMkMxNSAxLjQ0NzcyIDE0LjU1MjMgMSAxNCAxSDFaTTcuNSAxMC42MjVDOS4yMjU4OSAxMC42MjUgMTAuNjI1IDkuMjI1ODkgMTAuNjI1IDcuNUMxMC42MjUgNS43NzQxMSA5LjIyNTg5IDQuMzc1IDcuNSA0LjM3NUM1Ljc3NDExIDQuMzc1IDQuMzc1IDUuNzc0MTEgNC4zNzUgNy41QzQuMzc1IDkuMjI1ODkgNS43NzQxMSAxMC42MjUgNy41IDEwLjYyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFBuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjI1IDcuNUMyLjI1IDcuMjIzODYgMi40NzM4NiA3IDIuNzUgN0gxMi4yNUMxMi41MjYxIDcgMTIuNzUgNy4yMjM4NiAxMi43NSA3LjVDMTIuNzUgNy43NzYxNCAxMi41MjYxIDggMTIuMjUgOEgyLjc1QzIuNDczODYgOCAyLjI1IDcuNzc2MTQgMi4yNSA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxFbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3Njg5MkMzLjg0MjIyIDAuODc2ODkyIDAuODc3MDc1IDMuODQyMDQgMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAxMS4xNTc0IDMuODQyMjIgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMTEuMTU3NiAxNC4xMjI2IDE0LjEyMjcgMTEuMTU3NCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAzLjg0MjA0IDExLjE1NzYgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MlpNMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgNC4zNjY3MSA0LjM2Njg5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5QzEwLjYzMjkgMS44MjY4OSAxMy4xNzI3IDQuMzY2NzEgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgMTAuNjMyNyAxMC42MzI5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzQuMzY2ODkgMTMuMTcyNiAxLjgyNzA3IDEwLjYzMjcgMS44MjcwNyA3LjQ5OTcyWk00LjUwMDAzIDdDNC4yMjM4OSA3IDQuMDAwMDMgNy4yMjM4NiA0LjAwMDAzIDcuNUM0LjAwMDAzIDcuNzc2MTQgNC4yMjM4OSA4IDQuNTAwMDMgOEgxMC41QzEwLjc3NjIgOCAxMSA3Ljc3NjE0IDExIDcuNUMxMSA3LjIyMzg2IDEwLjc3NjIgNyAxMC41IDdINC41MDAwM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjE0OTIxIDMuOTk5OTZDMi4xNDkyMSAyLjk3Nzc4IDIuOTc3ODQgMi4xNDkxNSA0LjAwMDAyIDIuMTQ5MTVDNS4wMjIxOSAyLjE0OTE1IDUuODUwODMgMi45Nzc3OCA1Ljg1MDgzIDMuOTk5OTZDNS44NTA4MyA1LjAyMjEzIDUuMDIyMTkgNS44NTA3NyA0LjAwMDAyIDUuODUwNzdDMi45Nzc4NCA1Ljg1MDc3IDIuMTQ5MjEgNS4wMjIxMyAyLjE0OTIxIDMuOTk5OTZaTTQuMDAwMDIgMS4yNDkxNUMyLjQ4MDc5IDEuMjQ5MTUgMS4yNDkyMSAyLjQ4MDczIDEuMjQ5MjEgMy45OTk5NkMxLjI0OTIxIDUuNTE5MTkgMi40ODA3OSA2Ljc1MDc3IDQuMDAwMDIgNi43NTA3N0M1LjUxOTI1IDYuNzUwNzcgNi43NTA4MyA1LjUxOTE5IDYuNzUwODMgMy45OTk5NkM2Ljc1MDgzIDIuNDgwNzMgNS41MTkyNSAxLjI0OTE1IDQuMDAwMDIgMS4yNDkxNVpNNS44MjAzNCAxMS4wMDAxTDIuNDk5OTggMTIuODM2OVY5LjE2MzMxTDUuODIwMzQgMTEuMDAwMVpNMi42Mzg4MyA4LjIxMTU5QzIuMTcyMjggNy45NTM1IDEuNTk5OTggOC4yOTA5MyAxLjU5OTk4IDguODI0MTFWMTMuMTc2MUMxLjU5OTk4IDEzLjcwOTMgMi4xNzIyOCAxNC4wNDY3IDIuNjM4ODMgMTMuNzg4Nkw2LjU3MjM1IDExLjYxMjZDNy4wNTM4OSAxMS4zNDYyIDcuMDUzODkgMTAuNjU0IDYuNTcyMzUgMTAuMzg3NkwyLjYzODgzIDguMjExNTlaTTguMzAwMDEgOS4wMDAwM0M4LjMwMDAxIDguNjEzNDMgOC42MTM0MSA4LjMwMDAzIDkuMDAwMDEgOC4zMDAwM0gxM0MxMy4zODY2IDguMzAwMDMgMTMuNyA4LjYxMzQzIDEzLjcgOS4wMDAwM1YxM0MxMy43IDEzLjM4NjYgMTMuMzg2NiAxMy43IDEzIDEzLjdIOS4wMDAwMUM4LjYxMzQxIDEzLjcgOC4zMDAwMSAxMy4zODY2IDguMzAwMDEgMTNWOS4wMDAwM1pNOS4yMDAwMSA5LjIwMDAzVjEyLjhIMTIuOFY5LjIwMDAzSDkuMjAwMDFaTTEzLjQ0MzIgMi4xOTMxMUMxMy42MTg5IDIuMDE3MzcgMTMuNjE4OSAxLjczMjQ1IDEzLjQ0MzIgMS41NTY3MUMxMy4yNjc1IDEuMzgwOTggMTIuOTgyNiAxLjM4MDk4IDEyLjgwNjggMS41NTY3MUwxMSAzLjM2MzUzTDkuMTkzMjEgMS41NTY3NEM5LjAxNzQ4IDEuMzgxIDguNzMyNTUgMS4zODEgOC41NTY4MiAxLjU1Njc0QzguMzgxMDggMS43MzI0NyA4LjM4MTA4IDIuMDE3NCA4LjU1NjgyIDIuMTkzMTNMMTAuMzYzNiAzLjk5OTkyTDguNTU2ODIgNS44MDY3MUM4LjM4MTA4IDUuOTgyNDUgOC4zODEwOCA2LjI2NzM3IDguNTU2ODIgNi40NDMxMUM4LjczMjU1IDYuNjE4ODUgOS4wMTc0OCA2LjYxODg1IDkuMTkzMjEgNi40NDMxMUwxMSA0LjYzNjMyTDEyLjgwNjggNi40NDMxNEMxMi45ODI2IDYuNjE4ODcgMTMuMjY3NSA2LjYxODg3IDEzLjQ0MzIgNi40NDMxNEMxMy42MTg5IDYuMjY3NCAxMy42MTg5IDUuOTgyNDcgMTMuNDQzMiA1LjgwNjc0TDExLjYzNjQgMy45OTk5MkwxMy40NDMyIDIuMTkzMTFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxSbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS41IDNDNC42NzE1NyAzIDQgMy42NzE1NyA0IDQuNUM0IDUuMzI4NDMgNC42NzE1NyA2IDUuNSA2QzYuMzI4NDMgNiA3IDUuMzI4NDMgNyA0LjVDNyAzLjY3MTU3IDYuMzI4NDMgMyA1LjUgM1pNMyA1QzMuMDE2NzEgNSAzLjAzMzIzIDQuOTk5MTggMy4wNDk1MiA0Ljk5NzU4QzMuMjgwMjIgNi4xMzk5IDQuMjg5NjcgNyA1LjUgN0M2LjcxMDMzIDcgNy43MTk3OCA2LjEzOTkgNy45NTA0OCA0Ljk5NzU4QzcuOTY2NzcgNC45OTkxOCA3Ljk4MzI5IDUgOCA1SDEzLjVDMTMuNzc2MSA1IDE0IDQuNzc2MTQgMTQgNC41QzE0IDQuMjIzODYgMTMuNzc2MSA0IDEzLjUgNEg4QzcuOTgzMjkgNCA3Ljk2Njc3IDQuMDAwODIgNy45NTA0OCA0LjAwMjQyQzcuNzE5NzggMi44NjAwOSA2LjcxMDMzIDIgNS41IDJDNC4yODk2NyAyIDMuMjgwMjIgMi44NjAwOSAzLjA0OTUyIDQuMDAyNDJDMy4wMzMyMyA0LjAwMDgyIDMuMDE2NzEgNCAzIDRIMS41QzEuMjIzODYgNCAxIDQuMjIzODYgMSA0LjVDMSA0Ljc3NjE0IDEuMjIzODYgNSAxLjUgNUgzWk0xMS45NTA1IDEwLjk5NzZDMTEuNzE5OCAxMi4xMzk5IDEwLjcxMDMgMTMgOS41IDEzQzguMjg5NjcgMTMgNy4yODAyMiAxMi4xMzk5IDcuMDQ5NTIgMTAuOTk3NkM3LjAzMzIzIDEwLjk5OTIgNy4wMTY3MSAxMSA3IDExSDEuNUMxLjIyMzg2IDExIDEgMTAuNzc2MSAxIDEwLjVDMSAxMC4yMjM5IDEuMjIzODYgMTAgMS41IDEwSDdDNy4wMTY3MSAxMCA3LjAzMzIzIDEwLjAwMDggNy4wNDk1MiAxMC4wMDI0QzcuMjgwMjIgOC44NjAxIDguMjg5NjcgOCA5LjUgOEMxMC43MTAzIDggMTEuNzE5OCA4Ljg2MDEgMTEuOTUwNSAxMC4wMDI0QzExLjk2NjggMTAuMDAwOCAxMS45ODMzIDEwIDEyIDEwSDEzLjVDMTMuNzc2MSAxMCAxNCAxMC4yMjM5IDE0IDEwLjVDMTQgMTAuNzc2MSAxMy43NzYxIDExIDEzLjUgMTFIMTJDMTEuOTgzMyAxMSAxMS45NjY4IDEwLjk5OTIgMTEuOTUwNSAxMC45OTc2Wk04IDEwLjVDOCA5LjY3MTU3IDguNjcxNTcgOSA5LjUgOUMxMC4zMjg0IDkgMTEgOS42NzE1NyAxMSAxMC41QzExIDExLjMyODQgMTAuMzI4NCAxMiA5LjUgMTJDOC42NzE1NyAxMiA4IDExLjMyODQgOCAxMC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMS41QzUgMS4yMjM4NiA0Ljc3NjE0IDEgNC41IDFDNC4yMjM4NiAxIDQgMS4yMjM4NiA0IDEuNUw0IDdDNCA3LjAxNjcxIDQuMDAwODIgNy4wMzMyMyA0LjAwMjQyIDcuMDQ5NTJDMi44NjAwOSA3LjI4MDIyIDIgOC4yODk2NyAyIDkuNUMyIDEwLjcxMDMgMi44NjAwOSAxMS43MTk4IDQuMDAyNDIgMTEuOTUwNUM0LjAwMDgyIDExLjk2NjggNCAxMS45ODMzIDQgMTJWMTMuNUM0IDEzLjc3NjEgNC4yMjM4NiAxNCA0LjUgMTRDNC43NzYxNCAxNCA1IDEzLjc3NjEgNSAxMy41VjEyQzUgMTEuOTgzMyA0Ljk5OTE4IDExLjk2NjggNC45OTc1OCAxMS45NTA1QzYuMTM5OSAxMS43MTk4IDcgMTAuNzEwMyA3IDkuNUM3IDguMjg5NjcgNi4xMzk5IDcuMjgwMjIgNC45OTc1OCA3LjA0OTUyQzQuOTk5MTggNy4wMzMyMyA1IDcuMDE2NzEgNSA3TDUgMS41Wk0xMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxQzEwLjIyMzkgMSAxMCAxLjIyMzg2IDEwIDEuNVYzQzEwIDMuMDE2NzEgMTAuMDAwOCAzLjAzMzIzIDEwLjAwMjQgMy4wNDk1MkM4Ljg2MDEgMy4yODAyMiA4IDQuMjg5NjcgOCA1LjVDOCA2LjcxMDMzIDguODYwMSA3LjcxOTc4IDEwLjAwMjQgNy45NTA0OEMxMC4wMDA4IDcuOTY2NzcgMTAgNy45ODMyOSAxMCA4VjEzLjVDMTAgMTMuNzc2MSAxMC4yMjM5IDE0IDEwLjUgMTRDMTAuNzc2MSAxNCAxMSAxMy43NzYxIDExIDEzLjVWOEMxMSA3Ljk4MzI5IDEwLjk5OTIgNy45NjY3NyAxMC45OTc2IDcuOTUwNDhDMTIuMTM5OSA3LjcxOTc4IDEzIDYuNzEwMzMgMTMgNS41QzEzIDQuMjg5NjcgMTIuMTM5OSAzLjI4MDIyIDEwLjk5NzYgMy4wNDk1MkMxMC45OTkyIDMuMDMzMjMgMTEgMy4wMTY3MSAxMSAzVjEuNVpNNC41IDhDMy42NzE1NyA4IDMgOC42NzE1NyAzIDkuNUMzIDEwLjMyODQgMy42NzE1NyAxMSA0LjUgMTFDNS4zMjg0MyAxMSA2IDEwLjMyODQgNiA5LjVDNiA4LjY3MTU3IDUuMzI4NDMgOCA0LjUgOFpNOSA1LjVDOSA0LjY3MTU3IDkuNjcxNTcgNCAxMC41IDRDMTEuMzI4NCA0IDEyIDQuNjcxNTcgMTIgNS41QzEyIDYuMzI4NDMgMTEuMzI4NCA3IDEwLjUgN0M5LjY3MTU3IDcgOSA2LjMyODQzIDkgNS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMjU5MjUgMy4xNjY2N0w0LjM3MDM2IDUuMzMzMzNWMUw3LjI1OTI1IDMuMTY2NjdaTTEgOC4yMjIyMkwzLjg4ODg5IDYuMDU1NTVMMSAzLjg4ODg5VjguMjIyMjJaTTEgMTRMMy44ODg4OSAxMS44MzMzTDEgOS42NjY2NlYxNFpNNy43NDA3MiA4LjIyMjIyTDEwLjYyOTYgNi4wNTU1NUw3Ljc0MDcyIDMuODg4ODlWOC4yMjIyMlpNMTQgMy4xNjY2N0wxMS4xMTExIDUuMzMzMzNWMUwxNCAzLjE2NjY3Wk0xMS4xMTExIDExLjExMTFMMTQgOC45NDQ0NEwxMS4xMTExIDYuNzc3NzdWMTEuMTExMVpNMy44ODg4OSAxMS4xMTExTDEgOC45NDQ0NEwzLjg4ODg5IDYuNzc3NzdWMTEuMTExMVpNNC4zNzAzNiA2LjA1NTU1TDcuMjU5MjUgOC4yMjIyMlYzLjg4ODg5TDQuMzcwMzYgNi4wNTU1NVpNMy44ODg4OSA1LjMzMzMzTDEgMy4xNjY2N0wzLjg4ODg5IDFWNS4zMzMzM1pNNy43NDA3MiAzLjE2NjY3TDEwLjYyOTYgNS4zMzMzM1YxTDcuNzQwNzIgMy4xNjY2N1pNMTQgOC4yMjIyMkwxMS4xMTExIDYuMDU1NTVMMTQgMy44ODg4OVY4LjIyMjIyWk0xMS4xMTExIDExLjgzMzNMMTQgMTRWOS42NjY2NkwxMS4xMTExIDExLjgzMzNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi44OTk5OCAwLjQ5OTk3NkMyLjg5OTk4IDAuMjc5MDYyIDIuNzIwODkgMC4wOTk5NzU2IDIuNDk5OTggMC4wOTk5NzU2QzIuMjc5MDYgMC4wOTk5NzU2IDIuMDk5OTggMC4yNzkwNjIgMi4wOTk5OCAwLjQ5OTk3NlYxLjA5OTk4SDEuNDk5OThDMS4yNzkwNiAxLjA5OTk4IDEuMDk5OTggMS4yNzkwNiAxLjA5OTk4IDEuNDk5OThDMS4wOTk5OCAxLjcyMDg5IDEuMjc5MDYgMS44OTk5OCAxLjQ5OTk4IDEuODk5OThIMi4wOTk5OFYyLjQ5OTk4QzIuMDk5OTggMi43MjA4OSAyLjI3OTA2IDIuODk5OTggMi40OTk5OCAyLjg5OTk4QzIuNzIwODkgMi44OTk5OCAyLjg5OTk4IDIuNzIwODkgMi44OTk5OCAyLjQ5OTk4VjEuODk5OThIMy40OTk5OEMzLjcyMDg5IDEuODk5OTggMy44OTk5OCAxLjcyMDg5IDMuODk5OTggMS40OTk5OEMzLjg5OTk4IDEuMjc5MDYgMy43MjA4OSAxLjA5OTk4IDMuNDk5OTggMS4wOTk5OEgyLjg5OTk4VjAuNDk5OTc2Wk01Ljg5OTk4IDMuNDk5OThDNS44OTk5OCAzLjI3OTA2IDUuNzIwODkgMy4wOTk5OCA1LjQ5OTk4IDMuMDk5OThDNS4yNzkwNiAzLjA5OTk4IDUuMDk5OTggMy4yNzkwNiA1LjA5OTk4IDMuNDk5OThWNC4wOTk5OEg0LjQ5OTk4QzQuMjc5MDYgNC4wOTk5OCA0LjA5OTk4IDQuMjc5MDYgNC4wOTk5OCA0LjQ5OTk4QzQuMDk5OTggNC43MjA4OSA0LjI3OTA2IDQuODk5OTggNC40OTk5OCA0Ljg5OTk4SDUuMDk5OThWNS40OTk5OEM1LjA5OTk4IDUuNzIwODkgNS4yNzkwNiA1Ljg5OTk4IDUuNDk5OTggNS44OTk5OEM1LjcyMDg5IDUuODk5OTggNS44OTk5OCA1LjcyMDg5IDUuODk5OTggNS40OTk5OFY0Ljg5OTk4SDYuNDk5OThDNi43MjA4OSA0Ljg5OTk4IDYuODk5OTggNC43MjA4OSA2Ljg5OTk4IDQuNDk5OThDNi44OTk5OCA0LjI3OTA2IDYuNzIwODkgNC4wOTk5OCA2LjQ5OTk4IDQuMDk5OThINS44OTk5OFYzLjQ5OTk4Wk0xLjg5OTk4IDYuNDk5OThDMS44OTk5OCA2LjI3OTA2IDEuNzIwODkgNi4wOTk5OCAxLjQ5OTk4IDYuMDk5OThDMS4yNzkwNiA2LjA5OTk4IDEuMDk5OTggNi4yNzkwNiAxLjA5OTk4IDYuNDk5OThWNy4wOTk5OEgwLjQ5OTk3NkMwLjI3OTA2MiA3LjA5OTk4IDAuMDk5OTc1NiA3LjI3OTA2IDAuMDk5OTc1NiA3LjQ5OTk4QzAuMDk5OTc1NiA3LjcyMDg5IDAuMjc5MDYyIDcuODk5OTggMC40OTk5NzYgNy44OTk5OEgxLjA5OTk4VjguNDk5OThDMS4wOTk5OCA4LjcyMDg5IDEuMjc5MDYgOC44OTk5NyAxLjQ5OTk4IDguODk5OTdDMS43MjA4OSA4Ljg5OTk3IDEuODk5OTggOC43MjA4OSAxLjg5OTk4IDguNDk5OThWNy44OTk5OEgyLjQ5OTk4QzIuNzIwODkgNy44OTk5OCAyLjg5OTk4IDcuNzIwODkgMi44OTk5OCA3LjQ5OTk4QzIuODk5OTggNy4yNzkwNiAyLjcyMDg5IDcuMDk5OTggMi40OTk5OCA3LjA5OTk4SDEuODk5OThWNi40OTk5OFpNOC41NDQwNiAwLjk4MTg0TDguMjQ2MTggMC45NDE1ODZDOC4wMzI3NSAwLjkxNzY3NiA3LjkwNjkyIDEuMTY1NSA4LjAyOTM2IDEuMzQxOTRDOC4xNzAxMyAxLjU0NDc5IDguMjk5ODEgMS43NTU5MiA4LjQxNzU0IDEuOTc0NDVDOC45MTg3OCAyLjkwNDg1IDkuMjAzMjIgMy45NjkzMiA5LjIwMzIyIDUuMTAwMjJDOS4yMDMyMiA4LjM3MjAxIDYuODIyNDcgMTEuMDg3OCAzLjY5ODg3IDExLjYwOTdDMy40NTczNiAxMS42NSAzLjIwOTg4IDExLjY3NzIgMi45NjAwOCAxMS42OTA2QzIuNzQ1NjMgMTEuNzAyIDIuNjI3MjkgMTEuOTUzNSAyLjc3NzIxIDEyLjEwNzJDMi44NDU1MSAxMi4xNzczIDIuOTE1MzUgMTIuMjQ1OCAyLjk4NjY3IDEyLjMxMjhMMy4wNTg4MyAxMi4zNzk1TDMuMzE4ODMgMTIuNjA0NUwzLjUwNjg0IDEyLjc1MzJMMy42Mjc5NiAxMi44NDMzTDMuODE0OTEgMTIuOTc0MkwzLjk5MDc5IDEzLjA4OUM0LjExMTc1IDEzLjE2NTEgNC4yMzUzNiAxMy4yMzc1IDQuMzYxNTcgMTMuMzA1OUw0LjYyNDk2IDEzLjQ0MTJMNC44ODU1MyAxMy41NjA3TDUuMTg4MzcgMTMuNjgyOEw1LjQzMTY5IDEzLjc2ODZDNS41NjU2NCAxMy44MTI4IDUuNzAxNDkgMTMuODUyOSA1LjgzODU3IDEzLjg4ODVDNS45NDI2MiAxMy45MTU1IDYuMDQ3NjcgMTMuOTQwMSA2LjE1NDA1IDEzLjk2MjJDNi4yNzk5MyAxMy45ODgzIDYuNDA3MTMgMTQuMDEwOSA2LjUzNTQ0IDE0LjAyOThMNi44NTI0MSAxNC4wNjg1TDcuMTE5MzQgMTQuMDg5MkM3LjI0NjM3IDE0LjA5NjUgNy4zNzQzNiAxNC4xMDAyIDcuNTAzMjIgMTQuMTAwMkMxMS4xNDgzIDE0LjEwMDIgMTQuMTAzMiAxMS4xNDUzIDE0LjEwMzIgNy41MDAyM0MxNC4xMDMyIDcuMjUwNDQgMTQuMDg5MyA3LjAwMzg5IDE0LjA2MjMgNi43NjEzMUwxNC4wMjU1IDYuNDg0MDdDMTMuOTkxIDYuMjYwODMgMTMuOTQ1MyA2LjA0MTI5IDEzLjg4OTEgNS44MjY0MkMxMy44MjEzIDUuNTY3MDkgMTMuNzM4MiA1LjMxMzk4IDEzLjY0MDkgNS4wNjg4MUwxMy41Mjc5IDQuODAxMzJMMTMuNDUwNyA0LjYzNTQyTDEzLjM3NjYgNC40ODY2NkMxMy4yMTc4IDQuMTc3NzMgMTMuMDM1MyAzLjg4Mjk1IDEyLjgzMTIgMy42MDQyM0wxMi42NzgyIDMuNDAzNTJMMTIuNDc5MyAzLjE2NDMyTDEyLjMxNTcgMi45ODM2MUwxMi4xOTYxIDIuODU5NTFMMTIuMDM1NSAyLjcwMjQ2TDExLjgxMzQgMi41MDE4NEwxMS40OTI1IDIuMjQxOTFMMTEuMjQ4MyAyLjA2NDk4TDEwLjk1NjIgMS44NzQ0NkwxMC42MzQ2IDEuNjg4OTRMMTAuMzA3MyAxLjUyMzc4TDEwLjE5MzggMS40NzE3Nkw5Ljk1NDg4IDEuMzcwNkw5LjY3NzkxIDEuMjY2OUw5LjQyNTY2IDEuMTg0Nkw5LjEwMDc1IDEuMDk0ODlMOC44MzU5OSAxLjAzNDg2TDguNTQ0MDYgMC45ODE4NFpNMTAuNDAzMiA1LjMwMDIzQzEwLjQwMzIgNC4yNzU4OCAxMC4yMDAyIDMuMjk4MjkgOS44MzI0NCAyLjQwNjA0QzExLjc2MjMgMy4yODk5NSAxMy4xMDMyIDUuMjM4NjIgMTMuMTAzMiA3LjUwMDIzQzEzLjEwMzIgMTAuNTkzIDEwLjU5NiAxMy4xMDAyIDcuNTAzMjIgMTMuMTAwMkM2LjYzNjQ2IDEzLjEwMDIgNS44MTU5NyAxMi45MDM2IDUuMDgzNTUgMTIuNTUyMkM2LjU0MTkgMTIuMDk0MSA3LjgxMDgxIDExLjIwODIgOC43NDMyMiAxMC4wNDE2QzguODc5NjMgMTAuMjI4NCA5LjEwMDI4IDEwLjM0OTcgOS4zNDkyOCAxMC4zNDk3QzkuNzYzNDkgMTAuMzQ5NyAxMC4wOTkzIDEwLjAxMzkgMTAuMDk5MyA5LjU5OTcxQzEwLjA5OTMgOS4yNDI1NiA5Ljg0OTY1IDguOTQzNzMgOS41MTUzNSA4Ljg2ODE2QzkuNTc3NDEgOC43NTE2NSA5LjYzNjUzIDguNjMzMzQgOS42OTI2IDguNTEzMzJDOS44ODM1OCA4LjYzMTYzIDEwLjEwODggOC42OTk5MyAxMC4zNSA4LjY5OTkzQzExLjA0MDMgOC42OTk5MyAxMS42IDguMTQwMjggMTEuNiA3LjQ0OTkzQzExLjYgNi43NTk3NiAxMS4wNDA2IDYuMjAwMjQgMTAuMzUwNSA2LjE5OTkzQzEwLjM4NTMgNS45MDQ4NyAxMC40MDMyIDUuNjA0NjQgMTAuNDAzMiA1LjMwMDIzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuODE4MTkgMC45MzE3OUM3LjY0MjQ1IDAuNzU2MDU0IDcuMzU3NTMgMC43NTYwNTQgNy4xODE3OSAwLjkzMTc5TDUuNDMxNzkgMi42ODE3OUM1LjI1NjA1IDIuODU3NTMgNS4yNTYwNSAzLjE0MjQ1IDUuNDMxNzkgMy4zMTgxOUM1LjYwNzUzIDMuNDkzOTIgNS44OTI0NSAzLjQ5MzkyIDYuMDY4MTkgMy4zMTgxOUw2Ljk5OTk5IDIuMzg2MzhWNS40OTk5OUM2Ljk5OTk5IDUuNzc2MTMgNy4yMjM4NSA1Ljk5OTk5IDcuNDk5OTkgNS45OTk5OUM3Ljc3NjEzIDUuOTk5OTkgNy45OTk5OSA1Ljc3NjEzIDcuOTk5OTkgNS40OTk5OVYyLjM4NjM4TDguOTMxNzkgMy4zMTgxOUM5LjEwNzUzIDMuNDkzOTIgOS4zOTI0NSAzLjQ5MzkyIDkuNTY4MTkgMy4zMTgxOUM5Ljc0MzkyIDMuMTQyNDUgOS43NDM5MiAyLjg1NzUzIDkuNTY4MTkgMi42ODE3OUw3LjgxODE5IDAuOTMxNzlaTTcuOTk5OTkgOS40OTk5OUM3Ljk5OTk5IDkuMjIzODUgNy43NzYxMyA4Ljk5OTk5IDcuNDk5OTkgOC45OTk5OUM3LjIyMzg1IDguOTk5OTkgNi45OTk5OSA5LjIyMzg1IDYuOTk5OTkgOS40OTk5OVYxMi42MTM2TDYuMDY4MTkgMTEuNjgxOEM1Ljg5MjQ1IDExLjUwNjEgNS42MDc1MyAxMS41MDYxIDUuNDMxNzkgMTEuNjgxOEM1LjI1NjA1IDExLjg1NzUgNS4yNTYwNSAxMi4xNDI0IDUuNDMxNzkgMTIuMzE4Mkw3LjE4MTc5IDE0LjA2ODJDNy4zNTc1MyAxNC4yNDM5IDcuNjQyNDUgMTQuMjQzOSA3LjgxODE5IDE0LjA2ODJMOS41NjgxOSAxMi4zMTgyQzkuNzQzOTIgMTIuMTQyNCA5Ljc0MzkyIDExLjg1NzUgOS41NjgxOSAxMS42ODE4QzkuMzkyNDUgMTEuNTA2MSA5LjEwNzUzIDExLjUwNjEgOC45MzE3OSAxMS42ODE4TDcuOTk5OTkgMTIuNjEzNlY5LjQ5OTk5Wk04Ljk5OTk5IDcuNDk5OTlDOC45OTk5OSA3LjIyMzg1IDkuMjIzODUgNi45OTk5OSA5LjQ5OTk5IDYuOTk5OTlIMTIuNjEzNkwxMS42ODE4IDYuMDY4MTlDMTEuNTA2MSA1Ljg5MjQ1IDExLjUwNjEgNS42MDc1MyAxMS42ODE4IDUuNDMxNzlDMTEuODU3NSA1LjI1NjA1IDEyLjE0MjQgNS4yNTYwNSAxMi4zMTgyIDUuNDMxNzlMMTQuMDY4MiA3LjE4MTc5QzE0LjI0MzkgNy4zNTc1MyAxNC4yNDM5IDcuNjQyNDUgMTQuMDY4MiA3LjgxODE5TDEyLjMxODIgOS41NjgxOUMxMi4xNDI0IDkuNzQzOTIgMTEuODU3NSA5Ljc0MzkyIDExLjY4MTggOS41NjgxOUMxMS41MDYxIDkuMzkyNDUgMTEuNTA2MSA5LjEwNzUzIDExLjY4MTggOC45MzE3OUwxMi42MTM2IDcuOTk5OTlIOS40OTk5OUM5LjIyMzg1IDcuOTk5OTkgOC45OTk5OSA3Ljc3NjEzIDguOTk5OTkgNy40OTk5OVpNMy4zMTgxOSA2LjA2ODE5TDIuMzg2MzggNi45OTk5OUg1LjQ5OTk5QzUuNzc2MTMgNi45OTk5OSA1Ljk5OTk5IDcuMjIzODUgNS45OTk5OSA3LjQ5OTk5QzUuOTk5OTkgNy43NzYxMyA1Ljc3NjEzIDcuOTk5OTkgNS40OTk5OSA3Ljk5OTk5SDIuMzg2MzhMMy4zMTgxOSA4LjkzMTc5QzMuNDkzOTIgOS4xMDc1MyAzLjQ5MzkyIDkuMzkyNDUgMy4zMTgxOSA5LjU2ODE5QzMuMTQyNDUgOS43NDM5MiAyLjg1NzUzIDkuNzQzOTIgMi42ODE3OSA5LjU2ODE5TDAuOTMxNzkgNy44MTgxOUMwLjc1NjA1NCA3LjY0MjQ1IDAuNzU2MDU0IDcuMzU3NTMgMC45MzE3OSA3LjE4MTc5TDIuNjgxNzkgNS40MzE3OUMyLjg1NzUzIDUuMjU2MDUgMy4xNDI0NSA1LjI1NjA1IDMuMzE4MTkgNS40MzE3OUMzLjQ5MzkyIDUuNjA3NTMgMy40OTM5MiA1Ljg5MjQ1IDMuMzE4MTkgNi4wNjgxOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFRuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjI1NzgxIDMuMTE2ODRDMy42Nzc3MSAzLjQ1Nzk2IDMuODM1MjMgMy40MzE5MyA0LjYyMzY5IDMuMzc5MzNMMTIuMDU3MSAyLjkzMjk5QzEyLjIxNDcgMi45MzI5OSAxMi4wODM2IDIuNzc1NzEgMTIuMDMxMSAyLjc0OTU3TDEwLjc5NjUgMS44NTcxMUMxMC41NiAxLjY3MzQ3IDEwLjI0NDggMS40NjMxNSA5LjY0MDgzIDEuNTE1NzZMMi40NDMwOCAyLjA0MDc0QzIuMTgwNTkgMi4wNjY3NyAyLjEyODE1IDIuMTk4MDEgMi4yMzI3IDIuMzAzMjJMMy4yNTc4MSAzLjExNjg0Wk0zLjcwNDEgNC44NDkxN1YxMi42NzA0QzMuNzA0MSAxMy4wOTA3IDMuOTE0MTUgMTMuMjQ4IDQuMzg2OTMgMTMuMjIyTDEyLjU1NjIgMTIuNzQ5M0MxMy4wMjkyIDEyLjcyMzMgMTMuMDgxOSAxMi40MzQxIDEzLjA4MTkgMTIuMDkyN1Y0LjMyMzk3QzEzLjA4MTkgMy45ODMwNiAxMi45NTA4IDMuNzk5MjEgMTIuNjYxMiAzLjgyNTQ1TDQuMTI0MjIgNC4zMjM5N0MzLjgwOTE4IDQuMzUwNDQgMy43MDQxIDQuNTA4MDMgMy43MDQxIDQuODQ5MTdaTTExLjc2ODggNS4yNjg3MkMxMS44MjEyIDUuNTA1MTggMTEuNzY4OCA1Ljc0MTQyIDExLjUzMTkgNS43Njc5OUwxMS4xMzgzIDUuODQ2NDFWMTEuNjIwNUMxMC43OTY1IDExLjgwNDIgMTAuNDgxNCAxMS45MDkyIDEwLjIxODggMTEuOTA5MkM5Ljc5ODM1IDExLjkwOTIgOS42OTMwNSAxMS43Nzc5IDkuMzc4MTIgMTEuMzg0NEw2LjgwMzQ1IDcuMzQyNDlWMTEuMjUzMkw3LjYxODE2IDExLjQzN0M3LjYxODE2IDExLjQzNyA3LjYxODE2IDExLjkwOTIgNi45NjA4NiAxMS45MDkyTDUuMTQ4NzkgMTIuMDE0M0M1LjA5NjE1IDExLjkwOTIgNS4xNDg3OSAxMS42NDcgNS4zMzI1OSAxMS41OTQ0TDUuODA1NDYgMTEuNDYzNFY2LjI5Mjc2TDUuMTQ4OSA2LjI0MDE1QzUuMDk2MjUgNi4wMDM2OSA1LjIyNzM5IDUuNjYyNzggNS41OTU0IDUuNjM2MzFMNy41MzkzNSA1LjUwNTI4TDEwLjIxODggOS41OTk4VjUuOTc3NjVMOS41MzU2NCA1Ljg5OTI0QzkuNDgzMiA1LjYxMDE4IDkuNjkzMDUgNS40MDAyOCA5Ljk1NTc2IDUuMzc0MjVMMTEuNzY4OCA1LjI2ODcyWk0xLjgzODc0IDEuMzMyMTJMOS4zMjU1NyAwLjc4MDc4N0MxMC4yNDUgMC43MDE5MzIgMTAuNDgxNSAwLjc1NDc1MyAxMS4wNTk0IDEuMTc0NTJMMTMuNDQ5MiAyLjg1NDI0QzEzLjg0MzYgMy4xNDMwOSAxMy45NzUgMy4yMjE3MyAxMy45NzUgMy41MzY2MVYxMi43NDkzQzEzLjk3NSAxMy4zMjY2IDEzLjc2NDcgMTMuNjY4MSAxMy4wMjkzIDEzLjcyMDNMNC4zMzQ5MiAxNC4yNDU0QzMuNzgyOTEgMTQuMjcxNyAzLjUyMDE5IDE0LjE5MyAzLjIzMTExIDEzLjgyNTNMMS40NzExNiAxMS41NDE5QzEuMTU1OCAxMS4xMjE2IDEuMDI0NjYgMTAuODA3MSAxLjAyNDY2IDEwLjQzOTJWMi4yNTA0MUMxLjAyNDY2IDEuNzc4MjUgMS4yMzUwNCAxLjM4NDQxIDEuODM4NzQgMS4zMzIxMlpcIixmaWxsOm59KSl9LERuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMS41QzQuNSA0LjI1IDMgNi41IDMgOUMzIDExLjQ4NTMgNS4wMTQ3MiAxMy41IDcuNSAxMy41QzkuOTg1MjggMTMuNSAxMiAxMS40ODUzIDEyIDlDMTIgNi41IDEwLjUgNC4yNSA3LjUgMS41Wk0xMSA5QzExIDcuMTEyMDMgOS45NzMxNSA1LjI3MTk1IDcuNSAyLjg3MzU3QzUuMDI2ODYgNS4yNzE5NSA0IDcuMTEyMDMgNCA5QzQgMTAuOTMzIDUuNTY3IDEyLjUgNy41IDEyLjVDOS40MzMgMTIuNSAxMSAxMC45MzMgMTEgOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEJuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjQ5OTg1IDEuMTAwMDFDMy4yNzg5NCAxLjEwMDAxIDMuMDk5ODUgMS4yNzkwOSAzLjA5OTg1IDEuNTAwMDFDMy4wOTk4NSAxLjcyMDkyIDMuMjc4OTQgMS45MDAwMSAzLjQ5OTg1IDEuOTAwMDFIMTEuNDk5OUMxMS43MjA4IDEuOTAwMDEgMTEuODk5OSAxLjcyMDkyIDExLjg5OTkgMS41MDAwMUMxMS44OTk5IDEuMjc5MDkgMTEuNzIwOCAxLjEwMDAxIDExLjQ5OTkgMS4xMDAwMUgzLjQ5OTg1Wk00Ljk5OTk1IDQuMjUwMDFDNC45OTk5NSAzLjk3Mzg3IDQuNzc2MDkgMy43NTAwMSA0LjQ5OTk1IDMuNzUwMDFDNC4yMjM4MSAzLjc1MDAxIDMuOTk5OTUgMy45NzM4NyAzLjk5OTk1IDQuMjUwMDFWOS41NTAwMUMzLjk5OTk1IDExLjQ4MyA1LjU2Njk1IDEzLjA1IDcuNDk5OTUgMTMuMDVDOS40MzI5NSAxMy4wNSAxMSAxMS40ODMgMTEgOS41NTAwMVY0LjI1MDAxQzExIDMuOTczODcgMTAuNzc2MSAzLjc1MDAxIDEwLjUgMy43NTAwMUMxMC4yMjM4IDMuNzUwMDEgOS45OTk5NSAzLjk3Mzg3IDkuOTk5OTUgNC4yNTAwMVY5LjU1MDAxQzkuOTk5OTUgMTAuOTMwNyA4Ljg4MDY2IDEyLjA1IDcuNDk5OTUgMTIuMDVDNi4xMTkyNCAxMi4wNSA0Ljk5OTk1IDEwLjkzMDcgNC45OTk5NSA5LjU1MDAxVjQuMjUwMDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxabj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi44NTcxNCAySDEyLjE0MjlDMTIuNjE2MiAyIDEzIDIuMzgzNzYgMTMgMi44NTcxNFYxMi4xNDI5QzEzIDEyLjYxNjIgMTIuNjE2MiAxMyAxMi4xNDI5IDEzSDIuODU3MTRDMi4zODM3NiAxMyAyIDEyLjYxNjIgMiAxMi4xNDI5VjIuODU3MTRDMiAyLjM4Mzc2IDIuMzgzNzYgMiAyLjg1NzE0IDJaTTEgMi44NTcxNEMxIDEuODMxNDcgMS44MzE0NyAxIDIuODU3MTQgMUgxMi4xNDI5QzEzLjE2ODUgMSAxNCAxLjgzMTQ3IDE0IDIuODU3MTRWMTIuMTQyOUMxNCAxMy4xNjg1IDEzLjE2ODUgMTQgMTIuMTQyOSAxNEgyLjg1NzE0QzEuODMxNDcgMTQgMSAxMy4xNjg1IDEgMTIuMTQyOVYyLjg1NzE0Wk03LjQ5OTg4IDUuMDAwMTJDNy43NzYwMiA1LjAwMDEyIDcuOTk5ODggNC43NzYyNiA3Ljk5OTg4IDQuNTAwMTJDNy45OTk4OCA0LjIyMzk4IDcuNzc2MDIgNC4wMDAxMiA3LjQ5OTg4IDQuMDAwMTJDNy4yMjM3NCA0LjAwMDEyIDYuOTk5ODggNC4yMjM5OCA2Ljk5OTg4IDQuNTAwMTJDNi45OTk4OCA0Ljc3NjI2IDcuMjIzNzQgNS4wMDAxMiA3LjQ5OTg4IDUuMDAwMTJaTTQuNDk5ODggMTEuMDAwMUM0Ljc3NjAyIDExLjAwMDEgNC45OTk4OCAxMC43NzYzIDQuOTk5ODggMTAuNTAwMUM0Ljk5OTg4IDEwLjIyNCA0Ljc3NjAyIDEwLjAwMDEgNC40OTk4OCAxMC4wMDAxQzQuMjIzNzQgMTAuMDAwMSAzLjk5OTg4IDEwLjIyNCAzLjk5OTg4IDEwLjUwMDFDMy45OTk4OCAxMC43NzYzIDQuMjIzNzQgMTEuMDAwMSA0LjQ5OTg4IDExLjAwMDFaTTQuOTk5ODggNy41MDAxMkM0Ljk5OTg4IDcuNzc2MjYgNC43NzYwMiA4LjAwMDEyIDQuNDk5ODggOC4wMDAxMkM0LjIyMzc0IDguMDAwMTIgMy45OTk4OCA3Ljc3NjI2IDMuOTk5ODggNy41MDAxMkMzLjk5OTg4IDcuMjIzOTggNC4yMjM3NCA3LjAwMDEyIDQuNDk5ODggNy4wMDAxMkM0Ljc3NjAyIDcuMDAwMTIgNC45OTk4OCA3LjIyMzk4IDQuOTk5ODggNy41MDAxMlpNNC40OTk4OCA1LjAwMDEyQzQuNzc2MDIgNS4wMDAxMiA0Ljk5OTg4IDQuNzc2MjYgNC45OTk4OCA0LjUwMDEyQzQuOTk5ODggNC4yMjM5OCA0Ljc3NjAyIDQuMDAwMTIgNC40OTk4OCA0LjAwMDEyQzQuMjIzNzQgNC4wMDAxMiAzLjk5OTg4IDQuMjIzOTggMy45OTk4OCA0LjUwMDEyQzMuOTk5ODggNC43NzYyNiA0LjIyMzc0IDUuMDAwMTIgNC40OTk4OCA1LjAwMDEyWk0xMC45OTk5IDEwLjUwMDFDMTAuOTk5OSAxMC43NzYzIDEwLjc3NiAxMS4wMDAxIDEwLjQ5OTkgMTEuMDAwMUMxMC4yMjM3IDExLjAwMDEgOS45OTk4OCAxMC43NzYzIDkuOTk5ODggMTAuNTAwMUM5Ljk5OTg4IDEwLjIyNCAxMC4yMjM3IDEwLjAwMDEgMTAuNDk5OSAxMC4wMDAxQzEwLjc3NiAxMC4wMDAxIDEwLjk5OTkgMTAuMjI0IDEwLjk5OTkgMTAuNTAwMVpNMTAuNDk5OSA4LjAwMDEyQzEwLjc3NiA4LjAwMDEyIDEwLjk5OTkgNy43NzYyNiAxMC45OTk5IDcuNTAwMTJDMTAuOTk5OSA3LjIyMzk4IDEwLjc3NiA3LjAwMDEyIDEwLjQ5OTkgNy4wMDAxMkMxMC4yMjM3IDcuMDAwMTIgOS45OTk4OCA3LjIyMzk4IDkuOTk5ODggNy41MDAxMkM5Ljk5OTg4IDcuNzc2MjYgMTAuMjIzNyA4LjAwMDEyIDEwLjQ5OTkgOC4wMDAxMlpNMTAuOTk5OSA0LjUwMDEyQzEwLjk5OTkgNC43NzYyNiAxMC43NzYgNS4wMDAxMiAxMC40OTk5IDUuMDAwMTJDMTAuMjIzNyA1LjAwMDEyIDkuOTk5ODggNC43NzYyNiA5Ljk5OTg4IDQuNTAwMTJDOS45OTk4OCA0LjIyMzk4IDEwLjIyMzcgNC4wMDAxMiAxMC40OTk5IDQuMDAwMTJDMTAuNzc2IDQuMDAwMTIgMTAuOTk5OSA0LjIyMzk4IDEwLjk5OTkgNC41MDAxMlpNNy40OTk4OCAxMS4wMDAxQzcuNzc2MDIgMTEuMDAwMSA3Ljk5OTg4IDEwLjc3NjMgNy45OTk4OCAxMC41MDAxQzcuOTk5ODggMTAuMjI0IDcuNzc2MDIgMTAuMDAwMSA3LjQ5OTg4IDEwLjAwMDFDNy4yMjM3NCAxMC4wMDAxIDYuOTk5ODggMTAuMjI0IDYuOTk5ODggMTAuNTAwMUM2Ljk5OTg4IDEwLjc3NjMgNy4yMjM3NCAxMS4wMDAxIDcuNDk5ODggMTEuMDAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LCRuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjIwMzA3IDEuMDQzMTJDMS4wMDQ4MSAwLjk1NDk5OCAwLjc3MjM0IDEuMDA0OCAwLjYyNzU3NyAxLjE2NjQxQzAuNDgyODEzIDEuMzI4MDIgMC40NTg3OTQgMS41NjQ1NSAwLjU2ODExNiAxLjc1MTk2TDMuOTIxMTUgNy41MDAwMkwwLjU2ODExNiAxMy4yNDgxQzAuNDU4Nzk0IDEzLjQzNTUgMC40ODI4MTMgMTMuNjcyIDAuNjI3NTc3IDEzLjgzMzZDMC43NzIzNCAxMy45OTUyIDEuMDA0ODEgMTQuMDQ1IDEuMjAzMDcgMTMuOTU2OUwxNC43MDMxIDcuOTU2OTJDMTQuODgzNiA3Ljg3NjY3IDE1IDcuNjk3NjEgMTUgNy41MDAwMkMxNSA3LjMwMjQyIDE0Ljg4MzYgNy4xMjMzNiAxNC43MDMxIDcuMDQzMTFMMS4yMDMwNyAxLjA0MzEyWk00Ljg0NTUyIDcuMTAwMDJMMi4yMTIzNCAyLjU4NkwxMy4yNjg5IDcuNTAwMDJMMi4yMTIzNCAxMi40MTRMNC44NDU1MiA3LjkwMDAySDlDOS4yMjA5MSA3LjkwMDAyIDkuNCA3LjcyMDk0IDkuNCA3LjUwMDAyQzkuNCA3LjI3OTExIDkuMjIwOTEgNy4xMDAwMiA5IDcuMTAwMDJINC44NDU1MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02LjA0OTk1IDIuNzQ5OThDNi4wNDk5NSAyLjQ0NjIzIDUuODAzNzEgMi4xOTk5OCA1LjQ5OTk1IDIuMTk5OThDNS4xOTYxOSAyLjE5OTk4IDQuOTQ5OTUgMi40NDYyMyA0Ljk0OTk1IDIuNzQ5OThWMTIuMjVDNC45NDk5NSAxMi41NTM3IDUuMTk2MTkgMTIuOCA1LjQ5OTk1IDEyLjhDNS44MDM3MSAxMi44IDYuMDQ5OTUgMTIuNTUzNyA2LjA0OTk1IDEyLjI1VjIuNzQ5OThaTTEwLjA1IDIuNzQ5OThDMTAuMDUgMi40NDYyMyA5LjgwMzcxIDIuMTk5OTggOS40OTk5NSAyLjE5OTk4QzkuMTk2MTkgMi4xOTk5OCA4Ljk0OTk1IDIuNDQ2MjMgOC45NDk5NSAyLjc0OTk4VjEyLjI1QzguOTQ5OTUgMTIuNTUzNyA5LjE5NjE5IDEyLjggOS40OTk5NSAxMi44QzkuODAzNzEgMTIuOCAxMC4wNSAxMi41NTM3IDEwLjA1IDEyLjI1VjIuNzQ5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxGbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuODUzNiAxLjE0NjQ1QzExLjY1ODMgMC45NTExODQgMTEuMzQxNyAwLjk1MTE4NCAxMS4xNDY1IDEuMTQ2NDVMMy43MTQ1NSA4LjU3ODM2QzMuNjI0NTkgOC42NjgzMiAzLjU1MjYzIDguNzc0NjEgMy41MDI1MSA4Ljg5MTU1TDIuMDQwNDQgMTIuMzAzQzEuOTU5OSAxMi40OTEgMi4wMDE4OSAxMi43MDkgMi4xNDY0NiAxMi44NTM2QzIuMjkxMDMgMTIuOTk4MSAyLjUwOTA1IDEzLjA0MDEgMi42OTY5NyAxMi45NTk2TDYuMTA4NDcgMTEuNDk3NUM2LjIyNTQgMTEuNDQ3NCA2LjMzMTcgMTEuMzc1NCA2LjQyMTY2IDExLjI4NTVMMTMuODUzNiAzLjg1MzU1QzE0LjA0ODggMy42NTgyOSAxNC4wNDg4IDMuMzQxNzEgMTMuODUzNiAzLjE0NjQ1TDExLjg1MzYgMS4xNDY0NVpNNC40MjE2NiA5LjI4NTQ3TDExLjUgMi4yMDcxMUwxMi43OTI5IDMuNUw1LjcxNDU1IDEwLjU3ODRMNC4yMTkyNCAxMS4yMTkyTDMuNzgwODEgMTAuNzgwOEw0LjQyMTY2IDkuMjg1NDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxXbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuMTQ2NCAxLjE0NjQ1QzEyLjM0MTcgMC45NTExODQgMTIuNjU4MyAwLjk1MTE4NCAxMi44NTM1IDEuMTQ2NDVMMTQuODUzNSAzLjE0NjQ1QzE1LjA0ODggMy4zNDE3MSAxNS4wNDg4IDMuNjU4MjkgMTQuODUzNSAzLjg1MzU1TDEwLjkxMDkgNy43OTYxOEMxMC44MzQ5IDcuODcyMTggMTAuNzQ3MSA3LjkzNTQzIDEwLjY1MSA3Ljk4MzVMNi43MjM1OSA5Ljk0NzIxQzYuNTMxMDkgMTAuMDQzNSA2LjI5ODYxIDEwLjAwNTcgNi4xNDY0MyA5Ljg1MzU1QzUuOTk0MjUgOS43MDEzNyA1Ljk1NjUyIDkuNDY4ODkgNi4wNTI3NyA5LjI3NjM5TDguMDE2NDggNS4zNDg5N0M4LjA2NDU1IDUuMjUyODMgOC4xMjc4IDUuMTY1MDcgOC4yMDM4IDUuMDg5MDdMMTIuMTQ2NCAxLjE0NjQ1Wk0xMi41IDIuMjA3MTFMOC45MTA5MSA1Ljc5NjE4TDcuODcyNjYgNy44NzI2N0w4LjEyNzMxIDguMTI3MzJMMTAuMjAzOCA3LjA4OTA3TDEzLjc5MjkgMy41TDEyLjUgMi4yMDcxMVpNOS45OTk5OCAyTDguOTk5OTggM0g0LjlDNC40NzE3MSAzIDQuMTgwNTYgMy4wMDAzOSAzLjk1NTUyIDMuMDE4NzdDMy43MzYzMSAzLjAzNjY4IDMuNjI0MjEgMy4wNjkxNSAzLjU0NjAxIDMuMTA4OTlDMy4zNTc4NSAzLjIwNDg3IDMuMjA0ODcgMy4zNTc4NSAzLjEwODk5IDMuNTQ2MDFDMy4wNjkxNSAzLjYyNDIxIDMuMDM2NjkgMy43MzYzMSAzLjAxODc4IDMuOTU1NTJDMy4wMDAzOSA0LjE4MDU2IDMgNC40NzE3MSAzIDQuOVYxMS4xQzMgMTEuNTI4MyAzLjAwMDM5IDExLjgxOTQgMy4wMTg3OCAxMi4wNDQ1QzMuMDM2NjkgMTIuMjYzNyAzLjA2OTE1IDEyLjM3NTggMy4xMDg5OSAxMi40NTRDMy4yMDQ4NyAxMi42NDIyIDMuMzU3ODUgMTIuNzk1MSAzLjU0NjAxIDEyLjg5MUMzLjYyNDIxIDEyLjkzMDkgMy43MzYzMSAxMi45NjMzIDMuOTU1NTIgMTIuOTgxMkM0LjE4MDU2IDEyLjk5OTYgNC40NzE3MSAxMyA0LjkgMTNIMTEuMUMxMS41MjgzIDEzIDExLjgxOTQgMTIuOTk5NiAxMi4wNDQ1IDEyLjk4MTJDMTIuMjYzNyAxMi45NjMzIDEyLjM3NTggMTIuOTMwOSAxMi40NTQgMTIuODkxQzEyLjY0MjIgMTIuNzk1MSAxMi43OTUxIDEyLjY0MjIgMTIuODkxIDEyLjQ1NEMxMi45MzA5IDEyLjM3NTggMTIuOTYzMyAxMi4yNjM3IDEyLjk4MTIgMTIuMDQ0NUMxMi45OTk2IDExLjgxOTQgMTMgMTEuNTI4MyAxMyAxMS4xVjYuOTk5OThMMTQgNS45OTk5OFYxMS4xVjExLjEyMDdDMTQgMTEuNTIzMSAxNCAxMS44NTUzIDEzLjk3NzkgMTIuMTI1OUMxMy45NTQ5IDEyLjQwNyAxMy45MDU3IDEyLjY2NTMgMTMuNzgyIDEyLjkwOEMxMy41OTAzIDEzLjI4NDMgMTMuMjg0MyAxMy41OTAzIDEyLjkwOCAxMy43ODJDMTIuNjY1MyAxMy45MDU3IDEyLjQwNyAxMy45NTQ5IDEyLjEyNTkgMTMuOTc3OUMxMS44NTUzIDE0IDExLjUyMzEgMTQgMTEuMTIwNyAxNEgxMS4xSDQuOUg0Ljg3OTM0QzQuNDc2ODYgMTQgNC4xNDQ2OCAxNCAzLjg3NDA5IDEzLjk3NzlDMy41OTMwNCAxMy45NTQ5IDMuMzM0NjkgMTMuOTA1NyAzLjA5MjAyIDEzLjc4MkMyLjcxNTcgMTMuNTkwMyAyLjQwOTczIDEzLjI4NDMgMi4yMTc5OSAxMi45MDhDMi4wOTQzNCAxMi42NjUzIDIuMDQ1MDYgMTIuNDA3IDIuMDIyMSAxMi4xMjU5QzEuOTk5OTkgMTEuODU1MyAxLjk5OTk5IDExLjUyMzEgMiAxMS4xMjA3VjExLjEyMDZWMTEuMVY0LjlWNC44NzkzNVY0Ljg3OTMyVjQuODc5MzFDMS45OTk5OSA0LjQ3Njg1IDEuOTk5OTkgNC4xNDQ2OCAyLjAyMjEgMy44NzQwOUMyLjA0NTA2IDMuNTkzMDQgMi4wOTQzNCAzLjMzNDY5IDIuMjE3OTkgMy4wOTIwMkMyLjQwOTczIDIuNzE1NjkgMi43MTU3IDIuNDA5NzMgMy4wOTIwMiAyLjIxNzk5QzMuMzM0NjkgMi4wOTQzNCAzLjU5MzA0IDIuMDQ1MDYgMy44NzQwOSAyLjAyMjFDNC4xNDQ2OCAxLjk5OTk5IDQuNDc2ODUgMS45OTk5OSA0Ljg3OTMyIDJINC44NzkzNUg0LjlIOS45OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFVuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMC44NzVDNS40OTc5NyAwLjg3NSAzLjg3NSAyLjQ5Nzk3IDMuODc1IDQuNUMzLjg3NSA2LjE1Mjg4IDQuOTgxMjQgNy41NDczOCA2LjQ5MzczIDcuOTgzNTFDNS4yOTk3IDguMTI5MDEgNC4yNzU1NyA4LjU1MTM0IDMuNTA0MDcgOS4zMTE2N0MyLjUyMjE2IDEwLjI3OTQgMi4wMjUwMiAxMS43MiAyLjAyNTAyIDEzLjU5OTlDMi4wMjUwMiAxMy44NjIzIDIuMjM3NjkgMTQuMDc0OSAyLjUwMDAyIDE0LjA3NDlDMi43NjIzNiAxNC4wNzQ5IDIuOTc1MDIgMTMuODYyMyAyLjk3NTAyIDEzLjU5OTlDMi45NzUwMiAxMS44Nzk5IDMuNDI3ODYgMTAuNzIwNiA0LjE3MDkxIDkuOTg4M0M0LjkxNTM2IDkuMjU0NjMgNi4wMjY3NCA4Ljg3NDk5IDcuNDk5OTUgOC44NzQ5OUM4Ljk3MzE3IDguODc0OTkgMTAuMDg0NiA5LjI1NDYzIDEwLjgyOTEgOS45ODgzMUMxMS41NzIxIDEwLjcyMDYgMTIuMDI1IDExLjg3OTkgMTIuMDI1IDEzLjU5OTlDMTIuMDI1IDEzLjg2MjMgMTIuMjM3NiAxNC4wNzQ5IDEyLjUgMTQuMDc0OUMxMi43NjIzIDE0LjA3NSAxMi45NzUgMTMuODYyMyAxMi45NzUgMTMuNkMxMi45NzUgMTEuNzIgMTIuNDc3OCAxMC4yNzk0IDExLjQ5NTkgOS4zMTE2NkMxMC43MjQ0IDguNTUxMzUgOS43MDAyNSA4LjEyOTAzIDguNTA2MjUgNy45ODM1MkMxMC4wMTg3IDcuNTQ3NCAxMS4xMjUgNi4xNTI4OSAxMS4xMjUgNC41QzExLjEyNSAyLjQ5Nzk3IDkuNTAyMDMgMC44NzUgNy41IDAuODc1Wk00LjgyNSA0LjVDNC44MjUgMy4wMjI2NCA2LjAyMjY0IDEuODI1IDcuNSAxLjgyNUM4Ljk3NzM2IDEuODI1IDEwLjE3NSAzLjAyMjY0IDEwLjE3NSA0LjVDMTAuMTc1IDUuOTc3MzYgOC45NzczNiA3LjE3NSA3LjUgNy4xNzVDNi4wMjI2NCA3LjE3NSA0LjgyNSA1Ljk3NzM2IDQuODI1IDQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjg1MDAxIDcuNTAwNDNDMS44NTAwMSA0LjM3OTc1IDQuMzc5NjMgMS44NTAwMSA3LjUwMDAxIDEuODUwMDFDMTAuNjIwNCAxLjg1MDAxIDEzLjE1IDQuMzc5NzUgMTMuMTUgNy41MDA0M0MxMy4xNSAxMC42MjExIDEwLjYyMDQgMTMuMTUwOSA3LjUwMDAxIDEzLjE1MDlDNC4zNzk2MyAxMy4xNTA5IDEuODUwMDEgMTAuNjIxMSAxLjg1MDAxIDcuNTAwNDNaTTcuNTAwMDEgMC44NTAwMDZDMy44MjcyOCAwLjg1MDAwNiAwLjg1MDAwNiAzLjgyNzUzIDAuODUwMDA2IDcuNTAwNDNDMC44NTAwMDYgMTEuMTczMyAzLjgyNzI4IDE0LjE1MDkgNy41MDAwMSAxNC4xNTA5QzExLjE3MjcgMTQuMTUwOSAxNC4xNSAxMS4xNzMzIDE0LjE1IDcuNTAwNDNDMTQuMTUgMy44Mjc1MyAxMS4xNzI3IDAuODUwMDA2IDcuNTAwMDEgMC44NTAwMDZaTTcuMDAwMDEgOC4wMDAwMVYzLjEyODExQzcuMTY0MTEgMy4xMDk1NCA3LjMzMDk0IDMuMTAwMDEgNy41MDAwMSAzLjEwMDAxQzkuOTMwMDYgMy4xMDAwMSAxMS45IDUuMDcwMTQgMTEuOSA3LjUwMDQzQzExLjkgNy42NjkzNSAxMS44OTA1IDcuODM2MDQgMTEuODcyIDguMDAwMDFINy4wMDAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEduPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDUuNUMzIDcuOTgzIDQuOTkxNjkgOSA3IDlWMTIuNUM3IDEyLjc3NjEgNy4yMjM4NiAxMyA3LjUgMTNDNy43NzYxNCAxMyA4IDEyLjc3NjEgOCAxMi41VjlWMy4xSDlWMTIuNUM5IDEyLjc3NjEgOS4yMjM4NiAxMyA5LjUgMTNDOS43NzYxNCAxMyAxMCAxMi43NzYxIDEwIDEyLjVWMy4xSDExLjVDMTEuODAzOCAzLjEgMTIuMDUgMi44NTM3NiAxMi4wNSAyLjU1QzEyLjA1IDIuMjQ2MjQgMTEuODAzOCAyIDExLjUgMkg5LjVIOEg3LjVIN0M0Ljk5MTY5IDIgMyAzLjAxNyAzIDUuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEtuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy41IDEzLjk1QzEzLjc0ODUgMTMuOTUgMTMuOTUgMTMuNzQ4NSAxMy45NSAxMy41QzEzLjk1IDEzLjI1MTQgMTMuNzQ4NSAxMy4wNSAxMy41IDEzLjA1TDEuNDk5OTUgMTMuMDVDMS4yNTE0MiAxMy4wNSAxLjA0OTk1IDEzLjI1MTQgMS4wNDk5NSAxMy41QzEuMDQ5OTUgMTMuNzQ4NSAxLjI1MTQyIDEzLjk1IDEuNDk5OTUgMTMuOTVMMTMuNSAxMy45NVpNMTEuMDY4MSA3LjU2ODNDMTEuMjQzOSA3LjM5MjU3IDExLjI0MzkgNy4xMDc2NCAxMS4wNjgxIDYuOTMxOTFDMTAuODkyNCA2Ljc1NjE3IDEwLjYwNzUgNi43NTYxNyAxMC40MzE3IDYuOTMxOTFMNy45NDk5MyA5LjQxMzcxTDcuOTQ5OTMgMS40OTk5OEM3Ljk0OTkzIDEuMjUxNDYgNy43NDg0NiAxLjA0OTk4IDcuNDk5OTMgMS4wNDk5OEM3LjI1MTQgMS4wNDk5OCA3LjA0OTkzIDEuMjUxNDYgNy4wNDk5MyAxLjQ5OTk4TDcuMDQ5OTMgOS40MTM3MUw0LjU2ODEzIDYuOTMxOTFDNC4zOTIzOSA2Ljc1NjE3IDQuMTA3NDYgNi43NTYxNyAzLjkzMTczIDYuOTMxOTFDMy43NTU5OSA3LjEwNzY0IDMuNzU1OTkgNy4zOTI1NyAzLjkzMTczIDcuNTY4M0w3LjE4MTczIDEwLjgxODNDNy4zNTc0NiAxMC45OTQgNy42NDIzOSAxMC45OTQgNy44MTgxMiAxMC44MTgzTDExLjA2ODEgNy41NjgzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuMDUwMDUgMTMuNUMyLjA1MDA1IDEzLjc0ODUgMi4yNTE1MiAxMy45NSAyLjUwMDA1IDEzLjk1QzIuNzQ4NTggMTMuOTUgMi45NTAwNSAxMy43NDg1IDIuOTUwMDUgMTMuNUwyLjk1MDA1IDEuNDk5OTVDMi45NTAwNSAxLjI1MTQyIDIuNzQ4NTggMS4wNDk5NSAyLjUwMDA1IDEuMDQ5OTVDMi4yNTE1MiAxLjA0OTk1IDIuMDUwMDUgMS4yNTE0MiAyLjA1MDA1IDEuNDk5OTVMMi4wNTAwNSAxMy41Wk04LjQzMTcgMTEuMDY4MUM4LjYwNzQzIDExLjI0MzkgOC44OTIzNiAxMS4yNDM5IDkuMDY4MDkgMTEuMDY4MUM5LjI0MzgzIDEwLjg5MjQgOS4yNDM4MyAxMC42MDc1IDkuMDY4MDkgMTAuNDMxN0w2LjU4NjI5IDcuOTQ5OTNMMTQuNSA3Ljk0OTkzQzE0Ljc0ODUgNy45NDk5MyAxNC45NSA3Ljc0ODQ2IDE0Ljk1IDcuNDk5OTNDMTQuOTUgNy4yNTE0IDE0Ljc0ODUgNy4wNDk5MyAxNC41IDcuMDQ5OTNMNi41ODYyOSA3LjA0OTkzTDkuMDY4MDkgNC41NjgxM0M5LjI0MzgzIDQuMzkyMzkgOS4yNDM4MyA0LjEwNzQ2IDkuMDY4MDkgMy45MzE3M0M4Ljg5MjM2IDMuNzU1OTkgOC42MDc0MyAzLjc1NTk5IDguNDMxNyAzLjkzMTczTDUuMTgxNyA3LjE4MTczQzUuMDA1OTYgNy4zNTc0NiA1LjAwNTk2IDcuNjQyMzkgNS4xODE3IDcuODE4MTJMOC40MzE3IDExLjA2ODFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxZbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuOTUgMS41MDAwNUMxMi45NSAxLjI1MTUyIDEyLjc0ODUgMS4wNTAwNSAxMi41IDEuMDUwMDVDMTIuMjUxNCAxLjA1MDA1IDEyLjA1IDEuMjUxNTIgMTIuMDUgMS41MDAwNUwxMi4wNSAxMy41QzEyLjA1IDEzLjc0ODYgMTIuMjUxNCAxMy45NSAxMi41IDEzLjk1QzEyLjc0ODUgMTMuOTUgMTIuOTUgMTMuNzQ4NiAxMi45NSAxMy41TDEyLjk1IDEuNTAwMDVaTTYuNTY4MyAzLjkzMTg4QzYuMzkyNTcgMy43NTYxNCA2LjEwNzY0IDMuNzU2MTQgNS45MzE5MSAzLjkzMTg4QzUuNzU2MTcgNC4xMDc2MSA1Ljc1NjE3IDQuMzkyNTQgNS45MzE5MSA0LjU2ODI3TDguNDEzNzEgNy4wNTAwN0wwLjQ5OTk4NCA3LjA1MDA3QzAuMjUxNDU2IDcuMDUwMDcgMC4wNDk5ODQ3IDcuMjUxNTUgMC4wNDk5ODQ3IDcuNTAwMDdDMC4wNDk5ODQ2IDcuNzQ4NiAwLjI1MTQ1NyA3Ljk1MDA3IDAuNDk5OTg0IDcuOTUwMDdMOC40MTM3MSA3Ljk1MDA3TDUuOTMxOTEgMTAuNDMxOUM1Ljc1NjE3IDEwLjYwNzYgNS43NTYxNyAxMC44OTI1IDUuOTMxOTEgMTEuMDY4M0M2LjEwNzY0IDExLjI0NCA2LjM5MjU3IDExLjI0NCA2LjU2ODMxIDExLjA2ODNMOS44MTgzIDcuODE4MjdDOS45OTQwNCA3LjY0MjU0IDkuOTk0MDQgNy4zNTc2MSA5LjgxODMgNy4xODE4OEw2LjU2ODMgMy45MzE4OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjUwMDA1IDEuMDUwMDVDMS4yNTE1MiAxLjA1MDA1IDEuMDUwMDUgMS4yNTE1MiAxLjA1MDA1IDEuNTAwMDVDMS4wNTAwNSAxLjc0ODU4IDEuMjUxNTIgMS45NTAwNSAxLjUwMDA1IDEuOTUwMDVMMTMuNSAxLjk1MDA1QzEzLjc0ODYgMS45NTAwNSAxMy45NSAxLjc0ODU4IDEzLjk1IDEuNTAwMDVDMTMuOTUgMS4yNTE1MiAxMy43NDg2IDEuMDUwMDUgMTMuNSAxLjA1MDA1SDEuNTAwMDVaTTMuOTMxODggNy40MzE2OUMzLjc1NjE0IDcuNjA3NDMgMy43NTYxNCA3Ljg5MjM2IDMuOTMxODggOC4wNjgwOUM0LjEwNzYxIDguMjQzODMgNC4zOTI1NCA4LjI0MzgzIDQuNTY4MjcgOC4wNjgwOUw3LjA1MDA3IDUuNTg2MjlWMTMuNUM3LjA1MDA3IDEzLjc0ODUgNy4yNTE1NSAxMy45NSA3LjUwMDA3IDEzLjk1QzcuNzQ4NiAxMy45NSA3Ljk1MDA3IDEzLjc0ODUgNy45NTAwNyAxMy41TDcuOTUwMDcgNS41ODYyOUwxMC40MzE5IDguMDY4MDlDMTAuNjA3NiA4LjI0MzgzIDEwLjg5MjUgOC4yNDM4MyAxMS4wNjgzIDguMDY4MDlDMTEuMjQ0IDcuODkyMzUgMTEuMjQ0IDcuNjA3NDMgMTEuMDY4MyA3LjQzMTY5TDcuODE4MjcgNC4xODE2OUM3LjY0MjU0IDQuMDA1OTYgNy4zNTc2MSA0LjAwNTk2IDcuMTgxODggNC4xODE2OUwzLjkzMTg4IDcuNDMxNjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxYbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4yNDE4MiAyLjMyMTgxQzMuMzkxOSAyLjIzMTMyIDMuNTc4NCAyLjIyNjAxIDMuNzMzMzggMi4zMDc4MUwxMi43MzM0IDcuMDU3ODFDMTIuODk3NCA3LjE0NDM2IDEzIDcuMzE0NTcgMTMgNy41QzEzIDcuNjg1NDMgMTIuODk3NCA3Ljg1NTY0IDEyLjczMzQgNy45NDIxOUwzLjczMzM4IDEyLjY5MjJDMy41Nzg0IDEyLjc3NCAzLjM5MTkgMTIuNzY4NyAzLjI0MTgyIDEyLjY3ODJDMy4wOTE3NSAxMi41ODc3IDMgMTIuNDI1MiAzIDEyLjI1VjIuNzVDMyAyLjU3NDc2IDMuMDkxNzUgMi40MTIzIDMuMjQxODIgMi4zMjE4MVpNNCAzLjU3OTI1VjExLjQyMDdMMTEuNDI4OCA3LjVMNCAzLjU3OTI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTggMi43NUM4IDIuNDczODYgNy43NzYxNCAyLjI1IDcuNSAyLjI1QzcuMjIzODYgMi4yNSA3IDIuNDczODYgNyAyLjc1VjdIMi43NUMyLjQ3Mzg2IDcgMi4yNSA3LjIyMzg2IDIuMjUgNy41QzIuMjUgNy43NzYxNCAyLjQ3Mzg2IDggMi43NSA4SDdWMTIuMjVDNyAxMi41MjYxIDcuMjIzODYgMTIuNzUgNy41IDEyLjc1QzcuNzc2MTQgMTIuNzUgOCAxMi41MjYxIDggMTIuMjVWOEgxMi4yNUMxMi41MjYxIDggMTIuNzUgNy43NzYxNCAxMi43NSA3LjVDMTIuNzUgNy4yMjM4NiAxMi41MjYxIDcgMTIuMjUgN0g4VjIuNzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxlcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3Njg5MkMzLjg0MjIyIDAuODc2ODkyIDAuODc3MDc1IDMuODQyMDQgMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAxMS4xNTc0IDMuODQyMjIgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMTEuMTU3NiAxNC4xMjI2IDE0LjEyMjcgMTEuMTU3NCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAzLjg0MjA0IDExLjE1NzYgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MlpNMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgNC4zNjY3MSA0LjM2Njg5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5QzEwLjYzMjkgMS44MjY4OSAxMy4xNzI3IDQuMzY2NzEgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgMTAuNjMyNyAxMC42MzI5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzQuMzY2ODkgMTMuMTcyNiAxLjgyNzA3IDEwLjYzMjcgMS44MjcwNyA3LjQ5OTcyWk03LjUwMDAzIDRDNy43NzYxNyA0IDguMDAwMDMgNC4yMjM4NiA4LjAwMDAzIDQuNVY3SDEwLjVDMTAuNzc2MiA3IDExIDcuMjIzODYgMTEgNy41QzExIDcuNzc2MTQgMTAuNzc2MiA4IDEwLjUgOEg4LjAwMDAzVjEwLjVDOC4wMDAwMyAxMC43NzYxIDcuNzc2MTcgMTEgNy41MDAwMyAxMUM3LjIyMzg5IDExIDcuMDAwMDMgMTAuNzc2MSA3LjAwMDAzIDEwLjVWOEg0LjUwMDAzQzQuMjIzODkgOCA0LjAwMDAzIDcuNzc2MTQgNC4wMDAwMyA3LjVDNC4wMDAwMyA3LjIyMzg2IDQuMjIzODkgNyA0LjUwMDAzIDdINy4wMDAwM1Y0LjVDNy4wMDAwMyA0LjIyMzg2IDcuMjIzODkgNCA3LjUwMDAzIDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx0cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS4wNzUwNSA0LjEwMDAxQzUuMDc1MDUgMi45MTEwMyA2LjI1NzI3IDEuOTI1MDIgNy41MDAwNSAxLjkyNTAyQzguNzQyODMgMS45MjUwMiA5LjkyNTA1IDIuOTExMDMgOS45MjUwNSA0LjEwMDAxQzkuOTI1MDUgNS4xOTg2MSA5LjM2NzgyIDUuNzE0MzYgOC42MTg1NCA2LjM3ODg0TDguNTg3NTcgNi40MDYzQzcuODQ0ODEgNy4wNjQ2NyA2LjkyNTA1IDcuODc5OTUgNi45MjUwNSA5LjVDNi45MjUwNSA5LjgxNzU3IDcuMTgyNDggMTAuMDc1IDcuNTAwMDUgMTAuMDc1QzcuODE3NjEgMTAuMDc1IDguMDc1MDUgOS44MTc1NyA4LjA3NTA1IDkuNUM4LjA3NTA1IDguNDE1MTcgOC42Mjk0NSA3LjkwNjIzIDkuMzgxNTYgNy4yMzkyNUw5LjQwMjM4IDcuMjIwNzlDMTAuMTQ5NiA2LjU1ODI5IDExLjA3NSA1LjczNzc1IDExLjA3NSA0LjEwMDAxQzExLjA3NSAyLjEyNzU3IDkuMjE4NjkgMC43NzUwMjQgNy41MDAwNSAwLjc3NTAyNEM1Ljc4MTQgMC43NzUwMjQgMy45MjUwNSAyLjEyNzU3IDMuOTI1MDUgNC4xMDAwMUMzLjkyNTA1IDQuNDE3NTggNC4xODI0OSA0LjY3NTAxIDQuNTAwMDUgNC42NzUwMUM0LjgxNzYxIDQuNjc1MDEgNS4wNzUwNSA0LjQxNzU4IDUuMDc1MDUgNC4xMDAwMVpNNy41MDAwNSAxMy4zNTc1QzcuOTgzMyAxMy4zNTc1IDguMzc1MDUgMTIuOTY1NyA4LjM3NTA1IDEyLjQ4MjVDOC4zNzUwNSAxMS45OTkyIDcuOTgzMyAxMS42MDc1IDcuNTAwMDUgMTEuNjA3NUM3LjAxNjggMTEuNjA3NSA2LjYyNTA1IDExLjk5OTIgNi42MjUwNSAxMi40ODI1QzYuNjI1MDUgMTIuOTY1NyA3LjAxNjggMTMuMzU3NSA3LjUwMDA1IDEzLjM1NzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxucj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAzLjg0MjA0IDMuODQyMjIgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MkMxMS4xNTc2IDAuODc2ODkyIDE0LjEyMjcgMy44NDIwNCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAxMS4xNTc0IDExLjE1NzYgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMy44NDIyMiAxNC4xMjI2IDAuODc3MDc1IDExLjE1NzQgMC44NzcwNzUgNy40OTk3MlpNNy40OTk5MSAxLjgyNjg5QzQuMzY2ODkgMS44MjY4OSAxLjgyNzA4IDQuMzY2NzEgMS44MjcwOCA3LjQ5OTcyQzEuODI3MDggMTAuNjMyNyA0LjM2Njg5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzEwLjYzMjkgMTMuMTcyNiAxMy4xNzI3IDEwLjYzMjcgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgNC4zNjY3MSAxMC42MzI5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5Wk04LjI0OTkzIDEwLjVDOC4yNDk5MyAxMC45MTQyIDcuOTE0MTQgMTEuMjUgNy40OTk5MyAxMS4yNUM3LjA4NTcxIDExLjI1IDYuNzQ5OTMgMTAuOTE0MiA2Ljc0OTkzIDEwLjVDNi43NDk5MyAxMC4wODU4IDcuMDg1NzEgOS43NSA3LjQ5OTkzIDkuNzVDNy45MTQxNCA5Ljc1IDguMjQ5OTMgMTAuMDg1OCA4LjI0OTkzIDEwLjVaTTYuMDUwMDMgNi4yNUM2LjA1MDAzIDUuNTcyMTEgNi42MzUxMSA0LjkyNSA3LjUwMDAzIDQuOTI1QzguMzY0OTYgNC45MjUgOC45NTAwMyA1LjU3MjExIDguOTUwMDMgNi4yNUM4Ljk1MDAzIDYuNzQxMTggOC42ODAwMiA2Ljk5MjEyIDguMjE0NDcgNy4yNzQ5NEM4LjE2MjUxIDcuMzA2NTEgOC4xMDI1OCA3LjM0MTMxIDguMDM4NDcgNy4zNzg1NEw4LjAzODQxIDcuMzc4NThDNy44NTUyMSA3LjQ4NDk3IDcuNjM3ODggNy42MTExOSA3LjQ3NDQ5IDcuNzM4NDlDNy4yMzIxNCA3LjkyNzMyIDYuOTUwMDMgOC4yMzE5OCA2Ljk1MDAzIDguN0M2Ljk1MDA0IDkuMDAzNzYgNy4xOTYyOCA5LjI1IDcuNTAwMDQgOS4yNUM3LjgwMjQgOS4yNSA4LjA0Nzc4IDkuMDA2MDEgOC4wNTAwMiA4LjcwNDE3TDguMDUwNTYgOC43MDMzQzguMDU5MjQgOC42ODk2IDguMDg0OTMgOC42NTczNSA4LjE1MDU4IDguNjA2MkM4LjI1MjA3IDguNTI3MTIgOC4zNjUwOCA4LjQ2MTYzIDguNTE1NjcgOC4zNzQzNkw4LjUxNTcxIDguMzc0MzNDOC41OTQyMiA4LjMyODgzIDguNjgyOTYgOC4yNzc0MSA4Ljc4NTU5IDguMjE1MDZDOS4zMjAwNCA3Ljg5MDM4IDEwLjA1IDcuMzUzODIgMTAuMDUgNi4yNUMxMC4wNSA0LjkyNzg5IDguOTM1MTEgMy44MjUgNy41MDAwMyAzLjgyNUM2LjA2NDk2IDMuODI1IDQuOTUwMDMgNC45Mjc4OSA0Ljk1MDAzIDYuMjVDNC45NTAwMyA2LjU1Mzc2IDUuMTk2MjggNi44IDUuNTAwMDMgNi44QzUuODAzNzkgNi44IDYuMDUwMDMgNi41NTM3NiA2LjA1MDAzIDYuMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxycj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOS40MjUwMyAzLjQ0MTM2QzEwLjA1NjEgMy4yMzY1NCAxMC43ODM3IDMuMjQwMiAxMS4zNzkyIDMuNTQ2MjNDMTIuNzUzMiA0LjI1MjI0IDEzLjM0NzcgNi4wNzE5MSAxMi43OTQ2IDhDMTIuNTQ2NSA4Ljg2NDkgMTIuMTEwMiA5LjcwNDcyIDExLjE4NjEgMTAuNTUyNEMxMC4yNjIgMTEuNCA4Ljk4MDM0IDExLjkgOC4zODU3MSAxMS45QzguMTcyNjkgMTEuOSA4IDExLjczMjEgOCAxMS41MjVDOCAxMS4zMTc5IDguMTc2NDQgMTEuMTUgOC4zODU3MSAxMS4xNUM5LjA2NDk3IDExLjE1IDkuNjcxODkgMTAuNzgwNCAxMC4zOTA2IDEwLjIzNkMxMC45NDA2IDkuODE5MyAxMS4zNzAxIDkuMjg2MzMgMTEuNjA4IDguODIxOTFDMTIuMDYyOCA3LjkzMzY3IDEyLjA3ODIgNi42ODE3NCAxMS4zNDMzIDYuMzQ5MDFDMTAuOTkwNCA2LjczNDU1IDEwLjUyOTUgNi45NTk0NiA5Ljk3NzI1IDYuOTU5NDZDOC43NzczIDYuOTU5NDYgOC4wNzAxIDUuOTk0MTIgOC4xMDA1MSA1LjEyMDA5QzguMTI5NTcgNC4yODQ3NCA4LjY2MDMyIDMuNjg5NTQgOS40MjUwMyAzLjQ0MTM2Wk0zLjQyNTAzIDMuNDQxMzZDNC4wNTYxNCAzLjIzNjU0IDQuNzgzNjYgMy4yNDAyIDUuMzc5MjMgMy41NDYyM0M2Ljc1MzIgNC4yNTIyNCA3LjM0NzY2IDYuMDcxOTEgNi43OTQ2MiA4QzYuNTQ2NTQgOC44NjQ5IDYuMTEwMTkgOS43MDQ3MiA1LjE4NjEgMTAuNTUyNEM0LjI2MjAxIDExLjQgMi45ODAzNCAxMS45IDIuMzg1NzEgMTEuOUMyLjE3MjY5IDExLjkgMiAxMS43MzIxIDIgMTEuNTI1QzIgMTEuMzE3OSAyLjE3NjQ0IDExLjE1IDIuMzg1NzEgMTEuMTVDMy4wNjQ5NyAxMS4xNSAzLjY3MTg5IDEwLjc4MDQgNC4zOTA1OCAxMC4yMzZDNC45NDA2NSA5LjgxOTMgNS4zNzAxNCA5LjI4NjMzIDUuNjA3OTcgOC44MjE5MUM2LjA2MjgyIDcuOTMzNjcgNi4wNzgyMSA2LjY4MTc0IDUuMzQzMyA2LjM0OTAxQzQuOTkwMzcgNi43MzQ1NSA0LjUyOTQ4IDYuOTU5NDYgMy45NzcyNSA2Ljk1OTQ2QzIuNzc3MyA2Ljk1OTQ2IDIuMDcwMSA1Ljk5NDEyIDIuMTAwNTEgNS4xMjAwOUMyLjEyOTU3IDQuMjg0NzQgMi42NjAzMiAzLjY4OTU0IDMuNDI1MDMgMy40NDEzNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG9yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTg1IDAuODc3MDQ1QzMuODQyMTYgMC44NzcwNDUgMC44NzcwMTQgMy44NDIxOSAwLjg3NzAxNCA3LjQ5OTg4QzAuODc3MDE0IDExLjE1NzUgMy44NDIxNiAxNC4xMjI3IDcuNDk5ODUgMTQuMTIyN0MxMS4xNTc1IDE0LjEyMjcgMTQuMTIyNyAxMS4xNTc1IDE0LjEyMjcgNy40OTk4OEMxNC4xMjI3IDMuODQyMTkgMTEuMTU3NSAwLjg3NzA0NSA3LjQ5OTg1IDAuODc3MDQ1Wk0xLjgyNzAxIDcuNDk5ODhDMS44MjcwMSA0LjM2Njg2IDQuMzY2ODMgMS44MjcwNCA3LjQ5OTg1IDEuODI3MDRDMTAuNjMyOCAxLjgyNzA0IDEzLjE3MjcgNC4zNjY4NiAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyAxMC42MzI5IDEwLjYzMjggMTMuMTcyNyA3LjQ5OTg1IDEzLjE3MjdDNC4zNjY4MyAxMy4xNzI3IDEuODI3MDEgMTAuNjMyOSAxLjgyNzAxIDcuNDk5ODhaTTcuNDk5OTkgOS40OTk5OUM4LjYwNDU2IDkuNDk5OTkgOS40OTk5OSA4LjYwNDU2IDkuNDk5OTkgNy40OTk5OUM5LjQ5OTk5IDYuMzk1NDIgOC42MDQ1NiA1LjQ5OTk5IDcuNDk5OTkgNS40OTk5OUM2LjM5NTQyIDUuNDk5OTkgNS40OTk5OSA2LjM5NTQyIDUuNDk5OTkgNy40OTk5OUM1LjQ5OTk5IDguNjA0NTYgNi4zOTU0MiA5LjQ5OTk5IDcuNDk5OTkgOS40OTk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGFyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjIgMUg0LjE3NzQxSDQuMTc3NEMzLjg2OTM2IDAuOTk5OTg4IDMuNjAzNjggMC45OTk5NzggMy4zODYwOSAxLjAyMDY3QzMuMTU1NzYgMS4wNDI1NyAyLjkyODI1IDEuMDkxMTMgMi43MTYyNSAxLjIyMTA0QzIuNTE0NDIgMS4zNDQ3MiAyLjM0NDczIDEuNTE0NDIgMi4yMjEwNCAxLjcxNjI1QzIuMDkxMTMgMS45MjgyNSAyLjA0MjU3IDIuMTU1NzYgMi4wMjA2NyAyLjM4NjA5QzEuOTk5OTggMi42MDM2NyAxLjk5OTk5IDIuODY5MzUgMiAzLjE3NzM4VjMuMTc3NFYzLjJWMTEuOFYxMS44MjI2VjExLjgyMjZDMS45OTk5OSAxMi4xMzA3IDEuOTk5OTggMTIuMzk2MyAyLjAyMDY3IDEyLjYxMzlDMi4wNDI1NyAxMi44NDQyIDIuMDkxMTMgMTMuMDcxNyAyLjIyMTA0IDEzLjI4MzdDMi4zNDQ3MyAxMy40ODU2IDIuNTE0NDIgMTMuNjU1MyAyLjcxNjI1IDEzLjc3OUMyLjkyODI1IDEzLjkwODkgMy4xNTU3NiAxMy45NTc0IDMuMzg2MDkgMTMuOTc5M0MzLjYwMzY4IDE0IDMuODY5MzcgMTQgNC4xNzc0MSAxNEg0LjJIMTAuOEgxMC44MjI2QzExLjEzMDYgMTQgMTEuMzk2MyAxNCAxMS42MTM5IDEzLjk3OTNDMTEuODQ0MiAxMy45NTc0IDEyLjA3MTcgMTMuOTA4OSAxMi4yODM3IDEzLjc3OUMxMi40ODU2IDEzLjY1NTMgMTIuNjU1MyAxMy40ODU2IDEyLjc3OSAxMy4yODM3QzEyLjkwODkgMTMuMDcxNyAxMi45NTc0IDEyLjg0NDIgMTIuOTc5MyAxMi42MTM5QzEzIDEyLjM5NjMgMTMgMTIuMTMwNiAxMyAxMS44MjI2VjExLjhWMy4yVjMuMTc3NDFDMTMgMi44NjkzNiAxMyAyLjYwMzY4IDEyLjk3OTMgMi4zODYwOUMxMi45NTc0IDIuMTU1NzYgMTIuOTA4OSAxLjkyODI1IDEyLjc3OSAxLjcxNjI1QzEyLjY1NTMgMS41MTQ0MiAxMi40ODU2IDEuMzQ0NzIgMTIuMjgzNyAxLjIyMTA0QzEyLjA3MTcgMS4wOTExMyAxMS44NDQyIDEuMDQyNTcgMTEuNjEzOSAxLjAyMDY3QzExLjM5NjMgMC45OTk5NzggMTEuMTMwNiAwLjk5OTk4OCAxMC44MjI2IDFIMTAuOEg0LjJaTTMuMjM4NzUgMi4wNzM2OEMzLjI2NzIyIDIuMDU2MjMgMy4zMjM2MiAyLjAzMTEyIDMuNDgwNzUgMi4wMTYxOEMzLjY0NTMyIDIuMDAwNTMgMy44NjI5OCAyIDQuMiAySDEwLjhDMTEuMTM3IDIgMTEuMzU0NyAyLjAwMDUzIDExLjUxOTMgMi4wMTYxOEMxMS42NzY0IDIuMDMxMTIgMTEuNzMyOCAyLjA1NjIzIDExLjc2MTMgMi4wNzM2OEMxMS44Mjg1IDIuMTE0OTEgMTEuODg1MSAyLjE3MTQ3IDExLjkyNjMgMi4yMzg3NUMxMS45NDM4IDIuMjY3MjIgMTEuOTY4OSAyLjMyMzYyIDExLjk4MzggMi40ODA3NUMxMS45OTk1IDIuNjQ1MzIgMTIgMi44NjI5OCAxMiAzLjJWMTEuOEMxMiAxMi4xMzcgMTEuOTk5NSAxMi4zNTQ3IDExLjk4MzggMTIuNTE5M0MxMS45Njg5IDEyLjY3NjQgMTEuOTQzOCAxMi43MzI4IDExLjkyNjMgMTIuNzYxM0MxMS44ODUxIDEyLjgyODUgMTEuODI4NSAxMi44ODUxIDExLjc2MTMgMTIuOTI2M0MxMS43MzI4IDEyLjk0MzggMTEuNjc2NCAxMi45Njg5IDExLjUxOTMgMTIuOTgzOEMxMS4zNTQ3IDEyLjk5OTUgMTEuMTM3IDEzIDEwLjggMTNINC4yQzMuODYyOTggMTMgMy42NDUzMiAxMi45OTk1IDMuNDgwNzUgMTIuOTgzOEMzLjMyMzYyIDEyLjk2ODkgMy4yNjcyMiAxMi45NDM4IDMuMjM4NzUgMTIuOTI2M0MzLjE3MTQ3IDEyLjg4NTEgMy4xMTQ5MSAxMi44Mjg1IDMuMDczNjggMTIuNzYxM0MzLjA1NjI0IDEyLjczMjggMy4wMzExMiAxMi42NzY0IDMuMDE2MTggMTIuNTE5M0MzLjAwMDUzIDEyLjM1NDcgMyAxMi4xMzcgMyAxMS44VjMuMkMzIDIuODYyOTggMy4wMDA1MyAyLjY0NTMyIDMuMDE2MTggMi40ODA3NUMzLjAzMTEyIDIuMzIzNjIgMy4wNTYyNCAyLjI2NzIyIDMuMDczNjggMi4yMzg3NUMzLjExNDkxIDIuMTcxNDcgMy4xNzE0NyAyLjExNDkxIDMuMjM4NzUgMi4wNzM2OFpNNSAxMEM0LjcyMzg2IDEwIDQuNSAxMC4yMjM5IDQuNSAxMC41QzQuNSAxMC43NzYxIDQuNzIzODYgMTEgNSAxMUg4QzguMjc2MTQgMTEgOC41IDEwLjc3NjEgOC41IDEwLjVDOC41IDEwLjIyMzkgOC4yNzYxNCAxMCA4IDEwSDVaTTQuNSA3LjVDNC41IDcuMjIzODYgNC43MjM4NiA3IDUgN0gxMEMxMC4yNzYxIDcgMTAuNSA3LjIyMzg2IDEwLjUgNy41QzEwLjUgNy43NzYxNCAxMC4yNzYxIDggMTAgOEg1QzQuNzIzODYgOCA0LjUgNy43NzYxNCA0LjUgNy41Wk01IDRDNC43MjM4NiA0IDQuNSA0LjIyMzg2IDQuNSA0LjVDNC41IDQuNzc2MTQgNC43MjM4NiA1IDUgNUgxMEMxMC4yNzYxIDUgMTAuNSA0Ljc3NjE0IDEwLjUgNC41QzEwLjUgNC4yMjM4NiAxMC4yNzYxIDQgMTAgNEg1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuODQ5OTggNy40OTk5OEMxLjg0OTk4IDQuNjY0NTggNC4wNTk3OSAxLjg0OTk4IDcuNDk5OTggMS44NDk5OEMxMC4yNzgzIDEuODQ5OTggMTEuNjUxNSAzLjkwNjQgMTIuMjM2NyA1SDEwLjVDMTAuMjIzOSA1IDEwIDUuMjIzODYgMTAgNS41QzEwIDUuNzc2MTQgMTAuMjIzOSA2IDEwLjUgNkgxMy41QzEzLjc3NjEgNiAxNCA1Ljc3NjE0IDE0IDUuNVYyLjVDMTQgMi4yMjM4NiAxMy43NzYxIDIgMTMuNSAyQzEzLjIyMzkgMiAxMyAyLjIyMzg2IDEzIDIuNVY0LjMxMzE4QzEyLjI5NTUgMy4wNzEyNiAxMC42NjU5IDAuODQ5OTc2IDcuNDk5OTggMC44NDk5NzZDMy40MzcxNiAwLjg0OTk3NiAwLjg0OTk3NiA0LjE4NTM3IDAuODQ5OTc2IDcuNDk5OThDMC44NDk5NzYgMTAuODE0NiAzLjQzNzE2IDE0LjE1IDcuNDk5OTggMTQuMTVDOS40NDM4MiAxNC4xNSAxMS4wNjIyIDEzLjM4MDggMTIuMjE0NSAxMi4yMDg0QzEyLjgzMTUgMTEuNTgwNiAxMy4zMTMzIDEwLjgzOSAxMy42NDE4IDEwLjA0MDdDMTMuNzQ2OSA5Ljc4NTM2IDEzLjYyNTEgOS40OTMxNSAxMy4zNjk4IDkuMzg4MDZDMTMuMTE0NCA5LjI4Mjk2IDEyLjgyMjIgOS40MDQ3OCAxMi43MTcxIDkuNjYwMTRDMTIuNDM2MyAxMC4zNDI1IDEyLjAyNTEgMTAuOTc0NSAxMS41MDEzIDExLjUwNzRDMTAuNTI5NSAxMi40OTYzIDkuMTY1MDQgMTMuMTUgNy40OTk5OCAxMy4xNUM0LjA1OTc5IDEzLjE1IDEuODQ5OTggMTAuMzM1NCAxLjg0OTk4IDcuNDk5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxscj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC44NTM1NSAyLjE0NjQ1QzUuMDQ4ODIgMi4zNDE3MSA1LjA0ODgyIDIuNjU4MjkgNC44NTM1NSAyLjg1MzU1TDMuNzA3MTEgNEg5QzExLjQ4NTMgNCAxMy41IDYuMDE0NzIgMTMuNSA4LjVDMTMuNSAxMC45ODUzIDExLjQ4NTMgMTMgOSAxM0g1QzQuNzIzODYgMTMgNC41IDEyLjc3NjEgNC41IDEyLjVDNC41IDEyLjIyMzkgNC43MjM4NiAxMiA1IDEySDlDMTAuOTMzIDEyIDEyLjUgMTAuNDMzIDEyLjUgOC41QzEyLjUgNi41NjcgMTAuOTMzIDUgOSA1SDMuNzA3MTFMNC44NTM1NSA2LjE0NjQ1QzUuMDQ4ODIgNi4zNDE3MSA1LjA0ODgyIDYuNjU4MjkgNC44NTM1NSA2Ljg1MzU1QzQuNjU4MjkgNy4wNDg4MiA0LjM0MTcxIDcuMDQ4ODIgNC4xNDY0NSA2Ljg1MzU1TDIuMTQ2NDUgNC44NTM1NUMxLjk1MTE4IDQuNjU4MjkgMS45NTExOCA0LjM0MTcxIDIuMTQ2NDUgNC4xNDY0NUw0LjE0NjQ1IDIuMTQ2NDVDNC4zNDE3MSAxLjk1MTE4IDQuNjU4MjkgMS45NTExOCA0Ljg1MzU1IDIuMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxzcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4wNDk5NSAyLjc0OTk1QzMuMDQ5OTUgMi40NDYxOSAyLjgwMzcxIDIuMTk5OTUgMi40OTk5NSAyLjE5OTk1QzIuMTk2MTkgMi4xOTk5NSAxLjk0OTk1IDIuNDQ2MTkgMS45NDk5NSAyLjc0OTk1VjEyLjI1QzEuOTQ5OTUgMTIuNTUzNyAyLjE5NjE5IDEyLjggMi40OTk5NSAxMi44QzIuODAzNzEgMTIuOCAzLjA0OTk1IDEyLjU1MzcgMy4wNDk5NSAxMi4yNVYyLjc0OTk1Wk01LjczMzMzIDIuMzA3NzZDNS41NzgzNSAyLjIyNTk2IDUuMzkxODUgMi4yMzEyNyA1LjI0MTc3IDIuMzIxNzZDNS4wOTE3IDIuNDEyMjUgNC45OTk5NSAyLjU3NDcxIDQuOTk5OTUgMi43NDk5NVYxMi4yNUM0Ljk5OTk1IDEyLjQyNTIgNS4wOTE3IDEyLjU4NzcgNS4yNDE3NyAxMi42NzgxQzUuMzkxODUgMTIuNzY4NiA1LjU3ODM1IDEyLjc3MzkgNS43MzMzMyAxMi42OTIxTDE0LjczMzMgNy45NDIxNEMxNC44OTczIDcuODU1NTkgMTUgNy42ODUzOSAxNSA3LjQ5OTk1QzE1IDcuMzE0NTIgMTQuODk3MyA3LjE0NDMxIDE0LjczMzMgNy4wNTc3Nkw1LjczMzMzIDIuMzA3NzZaTTUuOTk5OTUgMTEuNDIwN1YzLjU3OTJMMTMuNDI4NyA3LjQ5OTk1TDUuOTk5OTUgMTEuNDIwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGNyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljg1MzU3IDMuODUzNTVMNy42NTM1NSAzLjA1MzUzQzguMjk4MSAyLjQwOTAxIDkuNDI4NTggMS45NjE3MiAxMC41NTIgMS44MDEyNUMxMS4xMDU2IDEuNzIyMTcgMTEuNjI5MSAxLjcxNzI1IDEyLjA1NjQgMS43ODEyNEMxMi40OTg3IDEuODQ3NDggMTIuNzY5OCAxLjk3Njk2IDEyLjg5NjUgMi4xMDM1N0MxMy4wMjMxIDIuMjMwMTggMTMuMTUyNiAyLjUwMTI1IDEzLjIxODggMi45NDM1N0MxMy4yODI4IDMuMzcwODYgMTMuMjc3OSAzLjg5NDM5IDEzLjE5ODggNC40NDgwMUMxMy4wMzgzIDUuNTcxMzkgMTIuNTkxIDYuNzAxODggMTEuOTQ2NCA3LjM0NjQ1TDcuNDk5OTkgMTEuNzkyOUw2LjM1MzU0IDEwLjY0NjVDNi4xNTgyNyAxMC40NTEyIDUuODQxNjkgMTAuNDUxMiA1LjY0NjQzIDEwLjY0NjVDNS40NTExNyAxMC44NDE3IDUuNDUxMTcgMTEuMTU4MyA1LjY0NjQzIDExLjM1MzZMNy4xNDY0NCAxMi44NTM2QzcuMzQxNzEgMTMuMDQ4OCA3LjY1ODI5IDEzLjA0ODggNy44NTM1NSAxMi44NTM2TDguNDAwNzMgMTIuMzA2NEw5LjU3MTI0IDE0LjI1NzJDOS42NTA0NiAxNC4zODkzIDkuNzg2MDggMTQuNDc3NCA5LjkzODkgMTQuNDk2M0MxMC4wOTE3IDE0LjUxNTEgMTAuMjQ0NyAxNC40NjI0IDEwLjM1MzUgMTQuMzUzNkwxMi4zNTM1IDEyLjM1MzZDMTIuNDY0OCAxMi4yNDIzIDEyLjUxNzIgMTIuMDg1MSAxMi40OTUgMTEuOTI5M0wxMi4wMzAzIDguNjc2NzlMMTIuNjUzNiA4LjA1MzU1QzEzLjUwOSA3LjE5ODA4IDE0LjAxMTcgNS44Mjg1NSAxNC4xODg3IDQuNTg5NDNDMTQuMjc4NCAzLjk2MTggMTQuMjg5MSAzLjMzODQ3IDE0LjIwNzggMi43OTU0NkMxNC4xMjg3IDIuMjY3NDggMTMuOTUxOSAxLjc0NDgyIDEzLjYwMzUgMS4zOTY0NUMxMy4yNTUyIDEuMDQ4MDkgMTIuNzMyNSAwLjg3MTMzMiAxMi4yMDQ1IDAuNzkyMjY0QzExLjY2MTUgMC43MTA5NDUgMTEuMDM4MiAwLjcyMTY0NCAxMC40MTA1IDAuODExM0M5LjE3MTQzIDAuOTg4MzA2IDcuODAxODkgMS40OTEgNi45NDY0NCAyLjM0NjQyTDYuMzIzMjIgMi45Njk2OEwzLjA3MDcxIDIuNTA1MDRDMi45MTQ5MiAyLjQ4Mjc4IDIuNzU3NzMgMi41MzUxNyAyLjY0NjQ1IDIuNjQ2NDZMMC42NDY0NTEgNC42NDY0NUMwLjUzNzU3OSA0Ljc1NTMzIDAuNDg0OTM4IDQuOTA4MjkgMC41MDM3NSA1LjA2MTFDMC41MjI1NjMgNS4yMTM5MSAwLjYxMDczIDUuMzQ5NTQgMC43NDI3NTcgNS40Mjg3NkwyLjY5MzY0IDYuNTk5MjhMMi4xNDY0NiA3LjE0NjQ1QzIuMDUyNyA3LjI0MDIyIDIuMDAwMDIgNy4zNjc0IDIuMDAwMDIgNy41MDAwMUMyLjAwMDAyIDcuNjMyNjEgMi4wNTI3IDcuNzU5NzkgMi4xNDY0NiA3Ljg1MzU2TDMuNjQ2NDcgOS4zNTM1NkMzLjg0MTczIDkuNTQ4ODMgNC4xNTgzMSA5LjU0ODgzIDQuMzUzNTcgOS4zNTM1NkM0LjU0ODg0IDkuMTU4MyA0LjU0ODg0IDguODQxNzIgNC4zNTM1NyA4LjY0NjQ2TDMuMjA3MTIgNy41MDAwMUwzLjg1MzU3IDYuODUzNTZMNi44NTM1NyAzLjg1MzU1Wk0xMC4wOTkzIDEzLjE5MzZMOS4xMjk1OSAxMS41Nzc1TDExLjE0NjQgOS41NjA2N0wxMS40Njk3IDExLjgyMzJMMTAuMDk5MyAxMy4xOTM2Wk0zLjQyMjUxIDUuODcwNDFMNS40MzkzNSAzLjg1MzU2TDMuMTc2NzggMy41MzAzNEwxLjgwNjM4IDQuOTAwNzRMMy40MjI1MSA1Ljg3MDQxWk0yLjM1MzU2IDEwLjM1MzVDMi41NDg4MiAxMC4xNTgzIDIuNTQ4ODIgOS44NDE3IDIuMzUzNTYgOS42NDY0NEMyLjE1ODMgOS40NTExOCAxLjg0MTcxIDkuNDUxMTggMS42NDY0NSA5LjY0NjQ0TDAuNjQ2NDUxIDEwLjY0NjRDMC40NTExODggMTAuODQxNyAwLjQ1MTE4OCAxMS4xNTgzIDAuNjQ2NDUxIDExLjM1MzVDMC44NDE3MTMgMTEuNTQ4OCAxLjE1ODMgMTEuNTQ4OCAxLjM1MzU2IDExLjM1MzVMMi4zNTM1NiAxMC4zNTM1Wk0zLjg1MzU4IDExLjg1MzZDNC4wNDg4NCAxMS42NTgzIDQuMDQ4ODUgMTEuMzQxNyAzLjg1MzU5IDExLjE0NjVDMy42NTgzMyAxMC45NTEyIDMuMzQxNzUgMTAuOTUxMiAzLjE0NjQ4IDExLjE0NjVMMS4xNDY0NSAxMy4xNDY0QzAuOTUxMTkgMTMuMzQxNyAwLjk1MTE4NyAxMy42NTgzIDEuMTQ2NDUgMTMuODUzNUMxLjM0MTcxIDE0LjA0ODggMS42NTgyOSAxNC4wNDg4IDEuODUzNTUgMTMuODUzNkwzLjg1MzU4IDExLjg1MzZaTTUuMzUzNTYgMTMuMzUzNUM1LjU0ODgyIDEzLjE1ODMgNS41NDg4MiAxMi44NDE3IDUuMzUzNTYgMTIuNjQ2NEM1LjE1ODMgMTIuNDUxMiA0Ljg0MTcxIDEyLjQ1MTIgNC42NDY0NSAxMi42NDY0TDMuNjQ2NDUgMTMuNjQ2NEMzLjQ1MTE5IDEzLjg0MTcgMy40NTExOSAxNC4xNTgzIDMuNjQ2NDUgMTQuMzUzNUMzLjg0MTcxIDE0LjU0ODggNC4xNTgzIDE0LjU0ODggNC4zNTM1NiAxNC4zNTM1TDUuMzUzNTYgMTMuMzUzNVpNOS40OTk5NyA2Ljc0ODgxQzEwLjE4OTcgNi43NDg4MSAxMC43NDg4IDYuMTg5NyAxMC43NDg4IDUuNUMxMC43NDg4IDQuODEwMyAxMC4xODk3IDQuMjUxMTggOS40OTk5NyA0LjI1MTE4QzguODEwMjYgNC4yNTExOCA4LjI1MTE1IDQuODEwMyA4LjI1MTE1IDUuNUM4LjI1MTE1IDYuMTg5NyA4LjgxMDI2IDYuNzQ4ODEgOS40OTk5NyA2Ljc0ODgxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNTk2NjQgMi45MzYyOEM3Ljc2MDg1IDMuMDY0MDEgOC4wMDAxMiAyLjk0Njk4IDguMDAwMTIgMi43Mzg5NVYxLjk5OTk4QzkuOTgxNDMgMiAxMS4xODQ4IDIuMzYzNyAxMS45MTA1IDMuMDg5NDVDMTIuNjM2MyAzLjgxNTIyIDEzIDUuMDE4NiAxMyA2Ljk5OTk4QzEzIDcuMjc2MTMgMTMuMjIzOSA3LjQ5OTk4IDEzLjUgNy40OTk5OEMxMy43NzYxIDcuNDk5OTggMTQgNy4yNzYxMyAxNCA2Ljk5OTk4QzE0IDQuOTQzOCAxMy42MzI1IDMuMzk3MTkgMTIuNjE3NiAyLjM4MjM0QzExLjYwMjggMS4zNjc1MiAxMC4wNTYyIDAuOTk5OTk5IDguMDAwMTIgMC45OTk5ODRWMC4yNjEyNjZDOC4wMDAxMiAwLjA1MzIyOTMgNy43NjA4NSAtMC4wNjM3OTQ0IDcuNTk2NjQgMC4wNjM5MjhMNi4wMDM4NCAxLjMwMjc3QzUuODc1MTYgMS40MDI4NiA1Ljg3NTE2IDEuNTk3MzUgNi4wMDM4NCAxLjY5NzQ0TDcuNTk2NjQgMi45MzYyOFpNOS41IDVIMi41QzIuMjIzODYgNSAyIDUuMjIzODYgMiA1LjVWMTIuNUMyIDEyLjc3NjEgMi4yMjM4NiAxMyAyLjUgMTNIOS41QzkuNzc2MTQgMTMgMTAgMTIuNzc2MSAxMCAxMi41VjUuNUMxMCA1LjIyMzg2IDkuNzc2MTQgNSA5LjUgNVpNMi41IDRDMS42NzE1NyA0IDEgNC42NzE1NyAxIDUuNVYxMi41QzEgMTMuMzI4NCAxLjY3MTU3IDE0IDIuNSAxNEg5LjVDMTAuMzI4NCAxNCAxMSAxMy4zMjg0IDExIDEyLjVWNS41QzExIDQuNjcxNTcgMTAuMzI4NCA0IDkuNSA0SDIuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGRyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjgxODMyIDAuNjgxNzlDNy42NDI1OCAwLjUwNjA1NCA3LjM1NzY2IDAuNTA2MDU0IDcuMTgxOTIgMC42ODE3OUw1LjE4MTkyIDIuNjgxNzlDNS4wMDYxOSAyLjg1NzUzIDUuMDA2MTkgMy4xNDI0NSA1LjE4MTkyIDMuMzE4MTlDNS4zNTc2NiAzLjQ5MzkyIDUuNjQyNTggMy40OTM5MiA1LjgxODMyIDMuMzE4MTlMNy4wNTAxMiAyLjA4NjM4TDcuMDUwMTIgNS41MDAyM0M3LjA1MDEyIDUuNzQ4NzYgNy4yNTE1OSA1Ljk1MDIzIDcuNTAwMTIgNS45NTAyM0M3Ljc0ODY1IDUuOTUwMjMgNy45NTAxMiA1Ljc0ODc2IDcuOTUwMTIgNS41MDAyM0w3Ljk1MDEyIDIuMDg2MzhMOS4xODE5MiAzLjMxODE5QzkuMzU3NjYgMy40OTM5MiA5LjY0MjU4IDMuNDkzOTIgOS44MTgzMiAzLjMxODE5QzkuOTk0MDYgMy4xNDI0NSA5Ljk5NDA2IDIuODU3NTMgOS44MTgzMiAyLjY4MTc5TDcuODE4MzIgMC42ODE3OVpNNy45NTAxMiAxMi45MTM2VjkuNTAwMjNDNy45NTAxMiA5LjI1MTcgNy43NDg2NSA5LjA1MDIzIDcuNTAwMTIgOS4wNTAyM0M3LjI1MTU5IDkuMDUwMjMgNy4wNTAxMiA5LjI1MTcgNy4wNTAxMiA5LjUwMDIzVjEyLjkxMzZMNS44MTgzMiAxMS42ODE4QzUuNjQyNTggMTEuNTA2MSA1LjM1NzY2IDExLjUwNjEgNS4xODE5MiAxMS42ODE4QzUuMDA2MTkgMTEuODU3NSA1LjAwNjE5IDEyLjE0MjQgNS4xODE5MiAxMi4zMTgyTDcuMTgxOTIgMTQuMzE4MkM3LjI2NjMyIDE0LjQwMjYgNy4zODA3NyAxNC40NSA3LjUwMDEyIDE0LjQ1QzcuNjE5NDcgMTQuNDUgNy43MzM5MyAxNC40MDI2IDcuODE4MzIgMTQuMzE4Mkw5LjgxODMyIDEyLjMxODJDOS45OTQwNiAxMi4xNDI0IDkuOTk0MDYgMTEuODU3NSA5LjgxODMyIDExLjY4MThDOS42NDI1OCAxMS41MDYxIDkuMzU3NjYgMTEuNTA2MSA5LjE4MTkyIDExLjY4MThMNy45NTAxMiAxMi45MTM2Wk0xLjQ5OTk0IDcuMDAwMTdDMS4yMjM4IDcuMDAwMTcgMC45OTk5MzkgNy4yMjQwMyAwLjk5OTkzOSA3LjUwMDE3QzAuOTk5OTM5IDcuNzc2MzEgMS4yMjM4IDguMDAwMTcgMS40OTk5NCA4LjAwMDE3TDEzLjQ5OTkgOC4wMDAxN0MxMy43NzYxIDguMDAwMTcgMTMuOTk5OSA3Ljc3NjMxIDEzLjk5OTkgNy41MDAxN0MxMy45OTk5IDcuMjI0MDMgMTMuNzc2MSA3LjAwMDE3IDEzLjQ5OTkgNy4wMDAxN0wxLjQ5OTk0IDcuMDAwMTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxwcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQgMTIuODVMMSAxMi44NUwxIDE0LjE1TDE0IDE0LjE1TDE0IDEyLjg1Wk0xNCA4Ljg1MDAyTDEgOC44NTAwMkwxIDEwLjE1TDE0IDEwLjE1TDE0IDguODUwMDJaTTEgNC44NTAwM0wxNCA0Ljg1MDAzTDE0IDYuMTUwMDNMMSA2LjE1MDAyTDEgNC44NTAwM1pNMTQgMC44NTAwMjVMMSAwLjg1MDAyNUwxIDIuMTUwMDJMMTQgMi4xNTAwMkwxNCAwLjg1MDAyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGZyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjUgNEMwLjIyMzg1OCA0IDAgNC4yMjM4NiAwIDQuNVYxMC41QzAgMTAuNzc2MSAwLjIyMzg1OCAxMSAwLjUgMTFIMTQuNUMxNC43NzYxIDExIDE1IDEwLjc3NjEgMTUgMTAuNVY0LjVDMTUgNC4yMjM4NiAxNC43NzYxIDQgMTQuNSA0SDAuNVpNMSAxMFY1SDIuMDc1VjcuNUMyLjA3NSA3LjczNDcyIDIuMjY1MjggNy45MjUgMi41IDcuOTI1QzIuNzM0NzIgNy45MjUgMi45MjUgNy43MzQ3MiAyLjkyNSA3LjVWNUg0LjA3NVY2LjVDNC4wNzUgNi43MzQ3MiA0LjI2NTI4IDYuOTI1IDQuNSA2LjkyNUM0LjczNDcyIDYuOTI1IDQuOTI1IDYuNzM0NzIgNC45MjUgNi41VjVINi4wNzVWNi41QzYuMDc1IDYuNzM0NzIgNi4yNjUyOCA2LjkyNSA2LjUgNi45MjVDNi43MzQ3MiA2LjkyNSA2LjkyNSA2LjczNDcyIDYuOTI1IDYuNVY1SDguMDc1VjcuNUM4LjA3NSA3LjczNDcyIDguMjY1MjggNy45MjUgOC41IDcuOTI1QzguNzM0NzIgNy45MjUgOC45MjUgNy43MzQ3MiA4LjkyNSA3LjVWNUgxMC4wNzVWNi41QzEwLjA3NSA2LjczNDcyIDEwLjI2NTMgNi45MjUgMTAuNSA2LjkyNUMxMC43MzQ3IDYuOTI1IDEwLjkyNSA2LjczNDcyIDEwLjkyNSA2LjVWNUgxMi4wNzVWNi41QzEyLjA3NSA2LjczNDcyIDEyLjI2NTMgNi45MjUgMTIuNSA2LjkyNUMxMi43MzQ3IDYuOTI1IDEyLjkyNSA2LjczNDcyIDEyLjkyNSA2LjVWNUgxNFYxMEgxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuNSAwQzAuMjIzODU4IDAgMCAwLjIyMzg1OCAwIDAuNVYxNC41QzAgMTQuNzc2MSAwLjIyMzg1OCAxNSAwLjUgMTVINC41QzQuNzc2MTQgMTUgNSAxNC43NzYxIDUgMTQuNVY1SDE0LjVDMTQuNzc2MSA1IDE1IDQuNzc2MTQgMTUgNC41VjAuNUMxNSAwLjIyMzg1OCAxNC43NzYxIDAgMTQuNSAwSDAuNVpNMSA0LjA3NTA1TDEgMUg0LjA3NTAyQzQuMDc1MDIgMSA0LjA3NTAyIDEgNC4wNzUwMiAxTDQuMDc1MDUgNC4wNzUwN0wxIDQuMDc1MDVaTTAuOTk5OTk3IDQuOTI1MDVMMSAxNEg0VjEyLjkyNUgyLjc1MDAyQzIuNTE1MyAxMi45MjUgMi4zMjUwMiAxMi43MzQ4IDIuMzI1MDIgMTIuNUMyLjMyNTAyIDEyLjI2NTMgMi41MTUzIDEyLjA3NSAyLjc1MDAyIDEyLjA3NUg0VjEwLjkyNUgyLjI1MDAyQzIuMDE1MyAxMC45MjUgMS44MjUwMiAxMC43MzQ3IDEuODI1MDIgMTAuNUMxLjgyNTAyIDEwLjI2NTMgMi4wMTUzIDEwLjA3NSAyLjI1MDAyIDEwLjA3NUg0VjguOTI1MDRMMi43NTAwMiA4LjkyNTAyQzIuNTE1MyA4LjkyNTAyIDIuMzI1MDIgOC43MzQ3NCAyLjMyNTAyIDguNTAwMDJDMi4zMjUwMyA4LjI2NTI5IDIuNTE1MzEgOC4wNzUwMiAyLjc1MDAzIDguMDc1MDJMNCA4LjA3NTA0VjYuOTI1MDJMMi43NDk5OSA2LjkyNUMyLjUxNTI3IDYuOTI1IDIuMzI1IDYuNzM0NzIgMi4zMjUgNi41QzIuMzI1IDYuMjY1MjggMi41MTUyOSA2LjA3NSAyLjc1MDAxIDYuMDc1TDQgNi4wNzUwMlY0LjkyNTA3TDAuOTk5OTk3IDQuOTI1MDVaTTQuOTI1MDUgNEg2LjA3NVYyLjc1MDA2QzYuMDc1IDIuNTE1MzQgNi4yNjUyOCAyLjMyNTA2IDYuNSAyLjMyNTA2QzYuNzM0NzIgMi4zMjUwNiA2LjkyNSAyLjUxNTM0IDYuOTI1IDIuNzUwMDZWNEg4LjA3NTAyVjIuNzUwMDVDOC4wNzUwMiAyLjUxNTMzIDguMjY1MyAyLjMyNTA1IDguNTAwMDIgMi4zMjUwNUM4LjczNDc0IDIuMzI1MDUgOC45MjUwMiAyLjUxNTMzIDguOTI1MDIgMi43NTAwNVY0SDEwLjA3NTFWMi4yNTAwNUMxMC4wNzUxIDIuMDE1MzMgMTAuMjY1MyAxLjgyNTA1IDEwLjUwMDEgMS44MjUwNUMxMC43MzQ4IDEuODI1MDUgMTAuOTI1MSAyLjAxNTMzIDEwLjkyNTEgMi4yNTAwNVY0SDEyLjA3NTFWMi43NTAwNUMxMi4wNzUxIDIuNTE1MzMgMTIuMjY1NCAyLjMyNTA1IDEyLjUwMDEgMi4zMjUwNUMxMi43MzQ4IDIuMzI1MDUgMTIuOTI1MSAyLjUxNTMzIDEyLjkyNTEgMi43NTAwNVY0SDE0VjFINC45MjUwMkw0LjkyNTA1IDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxncj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAxLjVDMiAxLjc3NjE0IDEuNzc2MTQgMiAxLjUgMkMxLjIyMzg2IDIgMSAxLjc3NjE0IDEgMS41QzEgMS4yMjM4NiAxLjIyMzg2IDEgMS41IDFDMS43NzYxNCAxIDIgMS4yMjM4NiAyIDEuNVpNMiA1TDIgMTBIMTNWNUgyWk0yIDRDMS40NDc3MiA0IDEgNC40NDc3MiAxIDVWMTBDMSAxMC41NTIzIDEuNDQ3NzIgMTEgMiAxMUgxM0MxMy41NTIzIDExIDE0IDEwLjU1MjMgMTQgMTBWNUMxNCA0LjQ0NzcyIDEzLjU1MjMgNCAxMyA0SDJaTTEuNSAxNEMxLjc3NjE0IDE0IDIgMTMuNzc2MSAyIDEzLjVDMiAxMy4yMjM5IDEuNzc2MTQgMTMgMS41IDEzQzEuMjIzODYgMTMgMSAxMy4yMjM5IDEgMTMuNUMxIDEzLjc3NjEgMS4yMjM4NiAxNCAxLjUgMTRaTTQgMS41QzQgMS43NzYxNCAzLjc3NjE0IDIgMy41IDJDMy4yMjM4NiAyIDMgMS43NzYxNCAzIDEuNUMzIDEuMjIzODYgMy4yMjM4NiAxIDMuNSAxQzMuNzc2MTQgMSA0IDEuMjIzODYgNCAxLjVaTTMuNSAxNEMzLjc3NjE0IDE0IDQgMTMuNzc2MSA0IDEzLjVDNCAxMy4yMjM5IDMuNzc2MTQgMTMgMy41IDEzQzMuMjIzODYgMTMgMyAxMy4yMjM5IDMgMTMuNUMzIDEzLjc3NjEgMy4yMjM4NiAxNCAzLjUgMTRaTTYgMS41QzYgMS43NzYxNCA1Ljc3NjE0IDIgNS41IDJDNS4yMjM4NiAyIDUgMS43NzYxNCA1IDEuNUM1IDEuMjIzODYgNS4yMjM4NiAxIDUuNSAxQzUuNzc2MTQgMSA2IDEuMjIzODYgNiAxLjVaTTUuNSAxNEM1Ljc3NjE0IDE0IDYgMTMuNzc2MSA2IDEzLjVDNiAxMy4yMjM5IDUuNzc2MTQgMTMgNS41IDEzQzUuMjIzODYgMTMgNSAxMy4yMjM5IDUgMTMuNUM1IDEzLjc3NjEgNS4yMjM4NiAxNCA1LjUgMTRaTTggMS41QzggMS43NzYxNCA3Ljc3NjE0IDIgNy41IDJDNy4yMjM4NiAyIDcgMS43NzYxNCA3IDEuNUM3IDEuMjIzODYgNy4yMjM4NiAxIDcuNSAxQzcuNzc2MTQgMSA4IDEuMjIzODYgOCAxLjVaTTcuNSAxNEM3Ljc3NjE0IDE0IDggMTMuNzc2MSA4IDEzLjVDOCAxMy4yMjM5IDcuNzc2MTQgMTMgNy41IDEzQzcuMjIzODYgMTMgNyAxMy4yMjM5IDcgMTMuNUM3IDEzLjc3NjEgNy4yMjM4NiAxNCA3LjUgMTRaTTEwIDEuNUMxMCAxLjc3NjE0IDkuNzc2MTQgMiA5LjUgMkM5LjIyMzg2IDIgOSAxLjc3NjE0IDkgMS41QzkgMS4yMjM4NiA5LjIyMzg2IDEgOS41IDFDOS43NzYxNCAxIDEwIDEuMjIzODYgMTAgMS41Wk05LjUgMTRDOS43NzYxNCAxNCAxMCAxMy43NzYxIDEwIDEzLjVDMTAgMTMuMjIzOSA5Ljc3NjE0IDEzIDkuNSAxM0M5LjIyMzg2IDEzIDkgMTMuMjIzOSA5IDEzLjVDOSAxMy43NzYxIDkuMjIzODYgMTQgOS41IDE0Wk0xMiAxLjVDMTIgMS43NzYxNCAxMS43NzYxIDIgMTEuNSAyQzExLjIyMzkgMiAxMSAxLjc3NjE0IDExIDEuNUMxMSAxLjIyMzg2IDExLjIyMzkgMSAxMS41IDFDMTEuNzc2MSAxIDEyIDEuMjIzODYgMTIgMS41Wk0xMS41IDE0QzExLjc3NjEgMTQgMTIgMTMuNzc2MSAxMiAxMy41QzEyIDEzLjIyMzkgMTEuNzc2MSAxMyAxMS41IDEzQzExLjIyMzkgMTMgMTEgMTMuMjIzOSAxMSAxMy41QzExIDEzLjc3NjEgMTEuMjIzOSAxNCAxMS41IDE0Wk0xNCAxLjVDMTQgMS43NzYxNCAxMy43NzYxIDIgMTMuNSAyQzEzLjIyMzkgMiAxMyAxLjc3NjE0IDEzIDEuNUMxMyAxLjIyMzg2IDEzLjIyMzkgMSAxMy41IDFDMTMuNzc2MSAxIDE0IDEuMjIzODYgMTQgMS41Wk0xMy41IDE0QzEzLjc3NjEgMTQgMTQgMTMuNzc2MSAxNCAxMy41QzE0IDEzLjIyMzkgMTMuNzc2MSAxMyAxMy41IDEzQzEzLjIyMzkgMTMgMTMgMTMuMjIzOSAxMyAxMy41QzEzIDEzLjc3NjEgMTMuMjIzOSAxNCAxMy41IDE0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYgMy41QzYgMi42NzE1NyA2LjY3MTU3IDIgNy41IDJDOC4zMjg0MyAyIDkgMi42NzE1NyA5IDMuNUM5IDQuMzI4NDMgOC4zMjg0MyA1IDcuNSA1QzYuNjcxNTcgNSA2IDQuMzI4NDMgNiAzLjVaTTggNS45NDk5OUM5LjE0MTEyIDUuNzE4MzYgMTAgNC43MDk0OCAxMCAzLjVDMTAgMi4xMTkyOSA4Ljg4MDcxIDEgNy41IDFDNi4xMTkyOSAxIDUgMi4xMTkyOSA1IDMuNUM1IDQuNzA5NDggNS44NTg4OCA1LjcxODM2IDcgNS45NDk5OVYxMy41QzcgMTMuNzc2MSA3LjIyMzg2IDE0IDcuNSAxNEM3Ljc3NjE0IDE0IDggMTMuNzc2MSA4IDEzLjVWNS45NDk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LENyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMCAzLjVDMTAgNC43MDk0OCA5LjE0MTEyIDUuNzE4MzYgOCA1Ljk0OTk5VjEzLjVDOCAxMy43NzYxIDcuNzc2MTQgMTQgNy41IDE0QzcuMjIzODYgMTQgNyAxMy43NzYxIDcgMTMuNVY1Ljk0OTk5QzUuODU4ODggNS43MTgzNiA1IDQuNzA5NDggNSAzLjVDNSAyLjExOTI5IDYuMTE5MjkgMSA3LjUgMUM4Ljg4MDcxIDEgMTAgMi4xMTkyOSAxMCAzLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxtcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy40OTk4OEMwLjg3NzA3NSAzLjg0MjE5IDMuODQyMjIgMC44NzcwNDUgNy40OTk5MSAwLjg3NzA0NUMxMS4xNTc2IDAuODc3MDQ1IDE0LjEyMjcgMy44NDIxOSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyAxMS4xNTc1IDExLjE1NzYgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMy44NDIyMiAxNC4xMjI3IDAuODc3MDc1IDExLjE1NzUgMC44NzcwNzUgNy40OTk4OFpNNy40OTk5MSAxLjgyNzA0QzQuMzY2ODkgMS44MjcwNCAxLjgyNzA4IDQuMzY2ODYgMS44MjcwOCA3LjQ5OTg4QzEuODI3MDggMTAuNjMyOSA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzEwLjYzMjkgMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNC4zNjY4NiAxMC42MzI5IDEuODI3MDQgNy40OTk5MSAxLjgyNzA0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMDVcIixkOlwiTTYuNzgyOTYgMTMuMzc2QzguNzM5MDQgOS45NTI4NCA4LjczOTA0IDUuMDQ3MTkgNi43ODI5NiAxLjYyNDA1TDcuMjE3MDggMS4zNzU5OEM5LjI2MSA0Ljk1MjgzIDkuMjYxIDEwLjA0NzIgNy4yMTcwOCAxMy42MjRMNi43ODI5NiAxMy4zNzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xXCIsZDpcIk03LjI4MjA0IDEzLjQ3NzVDOS4yMzkyOSA5Ljk5NTIzIDkuMjM5MjkgNS4wMDQ3NSA3LjI4MjA0IDEuNTIyNDhMNy43MTc5MSAxLjI3NzVDOS43NjA2NyA0LjkxMTkgOS43NjA2NyAxMC4wODgxIDcuNzE3OTEgMTMuNzIyNUw3LjI4MjA0IDEzLjQ3NzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xNVwiLGQ6XCJNNy44MjA5OCAxMy41MDY0QzkuNzI1MDIgOS45OTUyMyA5LjcyNjM2IDUuMDE0MTEgNy44MjQ5MiAxLjUwMDg0TDguMjY0NjUgMS4yNjI4NUMxMC4yNDY1IDQuOTI0NjYgMTAuMjQ1MSAxMC4wODUgOC4yNjA1MiAxMy43NDQ4TDcuODIwOTggMTMuNTA2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjJcIixkOlwiTTguNDEyODQgMTMuNDI5QzEwLjE5NTIgOS45Mjg0MiAxMC4xOTU3IDUuMDc1MzcgOC40MTQzNSAxLjU3NDAyTDguODU5OTkgMS4zNDcyOUMxMC43MTM5IDQuOTkxMTMgMTAuNzEzMyAxMC4wMTI4IDguODU4NDEgMTMuNjU1OUw4LjQxMjg0IDEzLjQyOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjI1XCIsZDpcIk05LjAyNDQxIDEzLjI5NTZDMTAuNjU2NyA5LjgzNzkgMTAuNjU4NiA1LjE3NzE1IDkuMDMwMDUgMS43MTY1Nkw5LjQ4MjQ1IDEuNTAzNjZDMTEuMTc0NSA1LjA5OTE5IDExLjE3MjYgOS45MTYyOSA5LjQ3NjU3IDEzLjUwOTFMOS4wMjQ0MSAxMy4yOTU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuM1wiLGQ6XCJNOS42NjgwOSAxMy4wNjU1QzExLjEwOTcgOS42OTU3MiAxMS4xMTA3IDUuMzEyMSA5LjY3MDg4IDEuOTQwOTVMMTAuMTMwNyAxLjc0NDU3QzExLjYyNDEgNS4yNDEyMSAxMS42MjMxIDkuNzY2ODMgMTAuMTI3OCAxMy4yNjIyTDkuNjY4MDkgMTMuMDY1NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjM1XCIsZDpcIk0xMC4zMzEgMTIuNzQ1NkMxMS41NTUxIDkuNTIwNzMgMTEuNTU2NCA1LjQ5MTAzIDEwLjMzNDcgMi4yNjQ0NEwxMC44MDI0IDIuMDg3NEMxMi4wNjcyIDUuNDI4MTUgMTIuMDY1OSA5LjU4Mzk0IDEwLjc5ODUgMTIuOTIzMUwxMC4zMzEgMTIuNzQ1NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjRcIixkOlwiTTExLjAxNTUgMTIuMjk4NkMxMS45OTM4IDkuMjk3NDQgMTEuOTk0OCA1LjcxMjk2IDExLjAxODQgMi43MTA2N0wxMS40OTM5IDIuNTU2MDNDMTIuNTAzIDUuNjU4OSAxMi41MDIgOS4zNTE3OCAxMS40OTA5IDEyLjQ1MzVMMTEuMDE1NSAxMi4yOTg2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNDVcIixkOlwiTTExLjcyMTQgMTEuNjY4QzEyLjQyNTQgOS4wMTMwMyAxMi40MjYyIDUuOTk2OTEgMTEuNzIzNyAzLjM0MTE2TDEyLjIwNzEgMy4yMTMyOUMxMi45MzE4IDUuOTUyOTIgMTIuOTMxIDkuMDU3MjggMTIuMjA0NyAxMS43OTYxTDExLjcyMTQgMTEuNjY4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNVwiLGQ6XCJNMTIuNDQzMiAxMC43NTJDMTIuODUyNCA4LjYzNzYyIDEyLjg1MjMgNi4zNjA4OSAxMi40NDI5IDQuMjQ2NkwxMi45MzM4IDQuMTUxNTVDMTMuMzU1MyA2LjMyODYxIDEzLjM1NTQgOC42Njk4NSAxMi45MzQxIDEwLjg0N0wxMi40NDMyIDEwLjc1MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjg3NzA3NSA3LjQ5OTg4QzAuODc3MDc1IDMuODQyMTkgMy44NDIyMiAwLjg3NzA0NSA3LjQ5OTkxIDAuODc3MDQ1QzExLjE1NzYgMC44NzcwNDUgMTQuMTIyNyAzLjg0MjE5IDE0LjEyMjcgNy40OTk4OEMxNC4xMjI3IDExLjE1NzUgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MzLjg0MjIyIDE0LjEyMjcgMC44NzcwNzUgMTEuMTU3NSAwLjg3NzA3NSA3LjQ5OTg4Wk03LjQ5OTkxIDEuODI3MDRDNC4zNjY4OSAxLjgyNzA0IDEuODI3MDggNC4zNjY4NiAxLjgyNzA4IDcuNDk5ODhDMS44MjcwOCAxMC42MzI5IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDMTAuNjMyOSAxMy4xNzI3IDEzLjE3MjcgMTAuNjMyOSAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyA0LjM2Njg2IDEwLjYzMjkgMS44MjcwNCA3LjQ5OTkxIDEuODI3MDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4wNVwiLGQ6XCJNMTIuMTYxOSAzLjg1MTgyQzguMzU4MTcgNC44ODkxOCA0Ljg4OTM2IDguMzU4IDMuODUxOTkgMTIuMTYxN0wzLjM2OTYgMTIuMDMwMUM0LjQ1MzU2IDguMDU1NjQgOC4wNTU4MSA0LjQ1MzM5IDEyLjAzMDMgMy4zNjk0M0wxMi4xNjE5IDMuODUxODJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xXCIsZDpcIk0xMS44ODA3IDMuNDI3MDdDOC4wMzQ0MSA0LjUwNTQyIDQuNTA1NjEgOC4wMzQyMiAzLjQyNzI2IDExLjg4MDVMMi45NDU4MiAxMS43NDU2QzQuMDcxMjkgNy43MzEyMSA3LjczMTQgNC4wNzExIDExLjc0NTggMi45NDU2M0wxMS44ODA3IDMuNDI3MDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xNVwiLGQ6XCJNMTEuNTIwMSAzLjAyNTU2QzcuNjkwOTIgNC4xNjE5OSA0LjE2Nzc5IDcuNjgzMjMgMy4wMjgwNSAxMS41MTJMMi41NDg4MyAxMS4zNjk0QzMuNzM2NzYgNy4zNzg2OSA3LjM4NjU5IDMuNzMwNzYgMTEuMzc3OCAyLjU0NjIzTDExLjUyMDEgMy4wMjU1NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjJcIixkOlwiTTExLjA0NjggMi42NjE2OUM3LjMxMTE3IDMuODc2NjQgMy44NzkxOCA3LjMwNzkgMi42NjI5OCAxMS4wNDM0TDIuMTg3NTQgMTAuODg4NkMzLjQ1MzI0IDcuMDAxMDkgNy4wMDQ0NSAzLjQ1MDYyIDEwLjg5MjEgMi4xODYyMUwxMS4wNDY4IDIuNjYxNjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yNVwiLGQ6XCJNMTAuNTIwMSAyLjMyMzY1QzYuOTIwOTEgMy42MTQ0NyAzLjYyMzkxIDYuOTA4NzYgMi4zMjg0NSAxMC41MDczTDEuODU4IDEwLjMzOEMzLjIwMzk4IDYuNTk5MDkgNi42MTE1NSAzLjE5NDI0IDEwLjM1MTMgMS44NTMwMUwxMC41MjAxIDIuMzIzNjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zXCIsZDpcIk05LjkwMjIyIDIuMDMxMjJDNi41MDAwMyAzLjM5NDY1IDMuMzk5NjggNi40OTM2NyAyLjAzMzk5IDkuODk1NTFMMS41Njk5OCA5LjcwOTI0QzIuOTg2NTEgNi4xODA3NiA2LjE4NzI4IDIuOTgxMzMgOS43MTYyMiAxLjU2NzFMOS45MDIyMiAyLjAzMTIyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMzVcIixkOlwiTTkuMjA3MjcgMS43ODg3M0M2LjA2MTM2IDMuMjAzNDkgMy4yMTEwMyA2LjA1MjAzIDEuNzkzMzEgOS4xOTczOEwxLjMzNzQ3IDguOTkxOTJDMi44MDUzNiA1LjczNTI4IDUuNzQ0ODUgMi43OTc2IDkuMDAyMiAxLjMzMjcyTDkuMjA3MjcgMS43ODg3M1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjRcIixkOlwiTTguNDA3MTMgMS42MjA4NUM1LjU5MzIzIDMuMDUxMTcgMy4wNTc5NCA1LjU4NTA5IDEuNjI1NDQgOC4zOTg0N0wxLjE3OTg3IDguMTcxNkMyLjY2MDM2IDUuMjYzOTcgNS4yNzIzMiAyLjY1MzQgOC4xODA1NyAxLjE3NTEzTDguNDA3MTMgMS42MjA4NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjQ1XCIsZDpcIk03LjQ2MjA3IDEuNTY3NDdDNS4wODY4OSAyLjk0Njk1IDIuOTUzNjIgNS4wNzkxMiAxLjU3MjQ5IDcuNDUzNzlMMS4xNDAyOCA3LjIwMjQxQzIuNTY1MDMgNC43NTI3MyA0Ljc2MDcgMi41NTgxOCA3LjIxMDk2IDEuMTM1MUw3LjQ2MjA3IDEuNTY3NDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi41XCIsZDpcIk02LjMwNDA3IDEuNzA0ODdDNC41MTk2NCAyLjkxMDYzIDIuOTA5ODMgNC41MjA2MSAxLjcwNDMgNi4zMDUxM0wxLjI4OTk4IDYuMDI1MjRDMi41MzEzIDQuMTg3NzMgNC4xODY3MyAyLjUzMjE0IDYuMDI0MTMgMS4yOTA1OUw2LjMwNDA3IDEuNzA0ODdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxicj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3NzA0NUMzLjg0MjIyIDAuODc3MDQ1IDAuODc3MDc1IDMuODQyMTkgMC44NzcwNzUgNy40OTk4OEMwLjg3NzA3NSA5LjE0ODggMS40Nzk2OSAxMC42NTcgMi40NzY3IDExLjgxNjJMMS42NDY0NyAxMi42NDY0QzEuNDUxMjEgMTIuODQxNyAxLjQ1MTIxIDEzLjE1ODMgMS42NDY0NyAxMy4zNTM1QzEuODQxNzMgMTMuNTQ4OCAyLjE1ODMyIDEzLjU0ODggMi4zNTM1OCAxMy4zNTM1TDMuMTgzODMgMTIuNTIzM0M0LjM0MzAyIDEzLjUyMDIgNS44NTExIDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzExLjE1NzYgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgNS44NTEwNyAxMy41MjAyIDQuMzQyOTggMTIuNTIzMyAzLjE4MzhMMTMuMzUzNiAyLjM1MzU1QzEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDEuODQxNyAxMy4zNTM2IDEuNjQ2NDRDMTMuMTU4MyAxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMi42NDY1IDEuNjQ2NDRMMTEuODE2MiAyLjQ3NjY3QzEwLjY1NyAxLjQ3OTY2IDkuMTQ4ODMgMC44NzcwNDUgNy40OTk5MSAwLjg3NzA0NVpNMTEuMTQyMyAzLjE1MDY1QzEwLjE1NjggMi4zMjQ0OSA4Ljg4NjQ0IDEuODI3MDQgNy40OTk5MSAxLjgyNzA0QzQuMzY2ODkgMS44MjcwNCAxLjgyNzA4IDQuMzY2ODYgMS44MjcwOCA3LjQ5OTg4QzEuODI3MDggOC44ODY0MSAyLjMyNDUyIDEwLjE1NjggMy4xNTA2OSAxMS4xNDIyTDExLjE0MjMgMy4xNTA2NVpNMy44NTc4MSAxMS44NDkzQzQuODQzMjIgMTIuNjc1MyA2LjExMzQ4IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzEwLjYzMjkgMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNi4xMTM0NSAxMi42NzU0IDQuODQzMTkgMTEuODQ5MyAzLjg1Nzc4TDMuODU3ODEgMTEuODQ5M1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjA1XCIsZDpcIk02Ljc4Mjk2IDEzLjM3NkM4LjczOTA0IDkuOTUyODQgOC43MzkwNCA1LjA0NzE5IDYuNzgyOTYgMS42MjQwNUw3LjIxNzA4IDEuMzc1OThDOS4yNjEgNC45NTI4MyA5LjI2MSAxMC4wNDcyIDcuMjE3MDggMTMuNjI0TDYuNzgyOTYgMTMuMzc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMVwiLGQ6XCJNNy4yODIwNCAxMy40Nzc1QzkuMjM5MjkgOS45OTUyMyA5LjIzOTI5IDUuMDA0NzUgNy4yODIwNCAxLjUyMjQ4TDcuNzE3OTEgMS4yNzc1QzkuNzYwNjcgNC45MTE5IDkuNzYwNjcgMTAuMDg4MSA3LjcxNzkxIDEzLjcyMjVMNy4yODIwNCAxMy40Nzc1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMTVcIixkOlwiTTcuODIwOTggMTMuNTA2NEM5LjcyNTAyIDkuOTk1MjMgOS43MjYzNiA1LjAxNDExIDcuODI0OTIgMS41MDA4NEw4LjI2NDY1IDEuMjYyODVDMTAuMjQ2NSA0LjkyNDY2IDEwLjI0NTEgMTAuMDg1IDguMjYwNTIgMTMuNzQ0OEw3LjgyMDk4IDEzLjUwNjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yXCIsZDpcIk04LjQxMjg0IDEzLjQyOUMxMC4xOTUyIDkuOTI4NDIgMTAuMTk1NyA1LjA3NTM3IDguNDE0MzUgMS41NzQwMkw4Ljg1OTk5IDEuMzQ3MjlDMTAuNzEzOSA0Ljk5MTEzIDEwLjcxMzMgMTAuMDEyOCA4Ljg1ODQxIDEzLjY1NTlMOC40MTI4NCAxMy40MjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yNVwiLGQ6XCJNOS4wMjQ0MSAxMy4yOTU2QzEwLjY1NjcgOS44Mzc5IDEwLjY1ODYgNS4xNzcxNSA5LjAzMDA1IDEuNzE2NTZMOS40ODI0NSAxLjUwMzY2QzExLjE3NDUgNS4wOTkxOSAxMS4xNzI2IDkuOTE2MjkgOS40NzY1NyAxMy41MDkxTDkuMDI0NDEgMTMuMjk1NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjNcIixkOlwiTTkuNjY4MDkgMTMuMDY1NUMxMS4xMDk3IDkuNjk1NzIgMTEuMTEwNyA1LjMxMjEgOS42NzA4OCAxLjk0MDk1TDEwLjEzMDcgMS43NDQ1N0MxMS42MjQxIDUuMjQxMjEgMTEuNjIzMSA5Ljc2NjgzIDEwLjEyNzggMTMuMjYyMkw5LjY2ODA5IDEzLjA2NTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zNVwiLGQ6XCJNMTAuMzMxIDEyLjc0NTZDMTEuNTU1MSA5LjUyMDczIDExLjU1NjQgNS40OTEwMyAxMC4zMzQ3IDIuMjY0NDRMMTAuODAyNCAyLjA4NzRDMTIuMDY3MiA1LjQyODE1IDEyLjA2NTkgOS41ODM5NCAxMC43OTg1IDEyLjkyMzFMMTAuMzMxIDEyLjc0NTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi40XCIsZDpcIk0xMS4wMTU1IDEyLjI5ODZDMTEuOTkzOCA5LjI5NzQ0IDExLjk5NDggNS43MTI5NiAxMS4wMTg0IDIuNzEwNjdMMTEuNDkzOSAyLjU1NjAzQzEyLjUwMyA1LjY1ODkgMTIuNTAyIDkuMzUxNzggMTEuNDkwOSAxMi40NTM1TDExLjAxNTUgMTIuMjk4NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjQ1XCIsZDpcIk0xMS43MjE0IDExLjY2OEMxMi40MjU0IDkuMDEzMDMgMTIuNDI2MiA1Ljk5NjkxIDExLjcyMzcgMy4zNDExNkwxMi4yMDcxIDMuMjEzMjlDMTIuOTMxOCA1Ljk1MjkyIDEyLjkzMSA5LjA1NzI4IDEyLjIwNDcgMTEuNzk2MUwxMS43MjE0IDExLjY2OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjVcIixkOlwiTTEyLjQ0MzIgMTAuNzUyQzEyLjg1MjQgOC42Mzc2MiAxMi44NTIzIDYuMzYwODkgMTIuNDQyOSA0LjI0NjZMMTIuOTMzOCA0LjE1MTU1QzEzLjM1NTMgNi4zMjg2MSAxMy4zNTU0IDguNjY5ODUgMTIuOTM0MSAxMC44NDdMMTIuNDQzMiAxMC43NTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMDVcIixkOlwiTTEyLjEzOTggMy44ODYxNkMxMy44NTUzIDQuOTQxNTkgMTUgNi44MzcgMTUgOC45OTk5OUMxNSAxMi4zMTM3IDEyLjMxMzcgMTUgOS4wMDAwMSAxNUM2Ljg0MzUgMTUgNC45NTI5NSAxMy44NjIxIDMuODk1NjkgMTIuMTU1Mkw0LjMyMDc1IDExLjg5MTlDNS4yOTA2OSAxMy40NTc4IDcuMDIzNzUgMTQuNSA5LjAwMDAxIDE0LjVDMTIuMDM3NSAxNC41IDE0LjUgMTIuMDM3NSAxNC41IDguOTk5OTlDMTQuNSA3LjAxNzggMTMuNDUxNiA1LjI4MDI2IDExLjg3NzggNC4zMTIwMkwxMi4xMzk4IDMuODg2MTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yXCIsZDpcIk0xMi44NTEgNS4wNzMyQzEzLjg2ODQgNi4wNzEwNSAxNC41IDcuNDYxOTggMTQuNSA4Ljk5OTk5QzE0LjUgMTIuMDM3NSAxMi4wMzc2IDE0LjUgOS4wMDAwMiAxNC41QzcuNDYyMTQgMTQuNSA2LjA3MTMxIDEzLjg2ODUgNS4wNzM0OCAxMi44NTEyTDUuNDMwNDIgMTIuNTAxMUM2LjMzODA5IDEzLjQyNjQgNy42MDE4NSAxNCA5LjAwMDAyIDE0QzExLjc2MTQgMTQgMTQgMTEuNzYxNCAxNCA4Ljk5OTk5QzE0IDcuNjAxNyAxMy40MjY0IDYuMzM3ODUgMTIuNTAwOSA1LjQzMDE3TDEyLjg1MSA1LjA3MzJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zNVwiLGQ6XCJNMTMuMzAyMSA2LjQ1MDcxQzEzLjc0NTUgNy4xOTczNyAxNCA4LjA2OTM0IDE0IDlDMTQgMTEuNzYxNCAxMS43NjE0IDE0IDkuMDAwMDEgMTRDOC4wNDg2NyAxNCA3LjE1ODY3IDEzLjczNDEgNi40MDExOCAxMy4yNzIzTDYuNjYxNDEgMTIuODQ1NEM3LjM0Mjc0IDEzLjI2MDcgOC4xNDMwNSAxMy41IDkuMDAwMDEgMTMuNUMxMS40ODUzIDEzLjUgMTMuNSAxMS40ODUzIDEzLjUgOUMxMy41IDguMTYxNjQgMTMuMjcxIDcuMzc3NTMgMTIuODcyMiA2LjcwNTk4TDEzLjMwMjEgNi40NTA3MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjVcIixkOlwiTTEzLjM3NDQgNy45NDAyMUMxMy40NTY2IDguMjgwMyAxMy41IDguNjM1MjQgMTMuNSA5QzEzLjUgMTEuNDg1MyAxMS40ODUzIDEzLjUgOS4wMDAwMiAxMy41QzguNjExMDMgMTMuNSA4LjIzMzIxIDEzLjQ1MDYgNy44NzI2NyAxMy4zNTc2TDcuOTk3NTggMTIuODczNEM4LjMxNzY3IDEyLjk1NiA4LjY1MzUyIDEzIDkuMDAwMDIgMTNDMTEuMjA5MSAxMyAxMyAxMS4yMDkxIDEzIDlDMTMgOC42NzUwNyAxMi45NjEzIDguMzU5NTIgMTIuODg4NCA4LjA1NzU2TDEzLjM3NDQgNy45NDAyMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjY1XCIsZDpcIk0xMi45MTU1IDkuODIxMzJDMTIuNTg5OCAxMS4zODEzIDExLjM1NjIgMTIuNjA3MiA5Ljc5MjAzIDEyLjkyMTVMOS42OTM1MyAxMi40MzEzQzExLjA2MTMgMTIuMTU2NSAxMi4xNDEzIDExLjA4MzMgMTIuNDI2MSA5LjcxOTEzTDEyLjkxNTUgOS44MjEzMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuMjc3MSA3LjUwMjUyQzEuMjc3MSA0LjA2NDU1IDQuMDY0MTMgMS4yNzc1MyA3LjUwMjA5IDEuMjc3NTNDMTAuOTQgMS4yNzc1MyAxMy43MjcxIDQuMDY0NTUgMTMuNzI3MSA3LjUwMjUyQzEzLjcyNzEgMTAuOTQwNSAxMC45NCAxMy43Mjc1IDcuNTAyMDkgMTMuNzI3NUM0LjA2NDEyIDEzLjcyNzUgMS4yNzcxIDEwLjk0MDUgMS4yNzcxIDcuNTAyNTJaTTcuNTAyMDkgMi4yMjc1MkM0LjU4ODggMi4yMjc1MiAyLjIyNzEgNC41ODkyMiAyLjIyNzEgNy41MDI1MkMyLjIyNzEgMTAuNDE1OCA0LjU4ODggMTIuNzc3NSA3LjUwMjA5IDEyLjc3NzVDMTAuNDE1NCAxMi43Nzc1IDEyLjc3NzEgMTAuNDE1OCAxMi43NzcxIDcuNTAyNTJDMTIuNzc3MSA0LjU4OTIyIDEwLjQxNTQgMi4yMjc1MiA3LjUwMjA5IDIuMjI3NTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSA3LjUwMDAzQzUgOC4zMjg0NSA0LjMyODQzIDkuMDAwMDMgMy41IDkuMDAwMDNDMi42NzE1NyA5LjAwMDAzIDIgOC4zMjg0NSAyIDcuNTAwMDNDMiA2LjY3MTYgMi42NzE1NyA2LjAwMDAzIDMuNSA2LjAwMDAzQzQuMzI4NDMgNi4wMDAwMyA1IDYuNjcxNiA1IDcuNTAwMDNaTTUuNzEzMTMgOC42NjM4OEM1LjI5NDQ1IDkuNDU4MzggNC40NjA0OCAxMCAzLjUgMTBDMi4xMTkyOSAxMCAxIDguODgwNzQgMSA3LjUwMDAzQzEgNi4xMTkzMSAyLjExOTI5IDUuMDAwMDMgMy41IDUuMDAwMDNDNC40NjA0OCA1LjAwMDAzIDUuMjk0NDUgNS41NDE2NyA1LjcxMzEzIDYuMzM2MTZMOS4xMDQyNCA0LjIxNjcxQzkuMDM2NDMgMy45ODk2OCA5IDMuNzQ5MTEgOSAzLjUwMDAzQzkgMi4xMTkzMiAxMC4xMTkzIDEuMDAwMDMgMTEuNSAxLjAwMDAzQzEyLjg4MDcgMS4wMDAwMyAxNCAyLjExOTMyIDE0IDMuNTAwMDNDMTQgNC44ODA3NCAxMi44ODA3IDYuMDAwMDMgMTEuNSA2LjAwMDAzQzEwLjY5MTUgNi4wMDAwMyA5Ljk3MjY0IDUuNjE2MjQgOS41MTU2NiA1LjAyMDlMNS45ODUzIDcuMjI3MzhDNS45OTUwMiA3LjMxNjkyIDYgNy40MDc4OSA2IDcuNTAwMDNDNiA3LjU5MjE2IDUuOTk1MDIgNy42ODMxMiA1Ljk4NTMgNy43NzI2N0w5LjUxNTY3IDkuOTc5MTVDOS45NzI2NSA5LjM4MzgyIDEwLjY5MTUgOS4wMDAwMyAxMS41IDkuMDAwMDNDMTIuODgwNyA5LjAwMDAzIDE0IDEwLjExOTMgMTQgMTEuNUMxNCAxMi44ODA3IDEyLjg4MDcgMTQgMTEuNSAxNEMxMC4xMTkzIDE0IDkgMTIuODgwNyA5IDExLjVDOSAxMS4yNTA5IDkuMDM2NDMgMTEuMDEwNCA5LjEwNDI1IDEwLjc4MzNMNS43MTMxMyA4LjY2Mzg4Wk0xMS41IDUuMDAwMDNDMTIuMzI4NCA1LjAwMDAzIDEzIDQuMzI4NDYgMTMgMy41MDAwM0MxMyAyLjY3MTYgMTIuMzI4NCAyLjAwMDAzIDExLjUgMi4wMDAwM0MxMC42NzE2IDIuMDAwMDMgMTAgMi42NzE2IDEwIDMuNTAwMDNDMTAgNC4zMjg0NiAxMC42NzE2IDUuMDAwMDMgMTEuNSA1LjAwMDAzWk0xMyAxMS41QzEzIDEyLjMyODUgMTIuMzI4NCAxMyAxMS41IDEzQzEwLjY3MTYgMTMgMTAgMTIuMzI4NSAxMCAxMS41QzEwIDEwLjY3MTYgMTAuNjcxNiAxMCAxMS41IDEwQzEyLjMyODQgMTAgMTMgMTAuNjcxNiAxMyAxMS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sa3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNSA1LjAwMDA2QzMuMjIzODYgNS4wMDAwNiAzIDUuMjIzOTIgMyA1LjUwMDA2TDMgMTEuNTAwMUMzIDExLjc3NjIgMy4yMjM4NiAxMi4wMDAxIDMuNSAxMi4wMDAxTDExLjUgMTIuMDAwMUMxMS43NzYxIDEyLjAwMDEgMTIgMTEuNzc2MiAxMiAxMS41MDAxTDEyIDUuNTAwMDZDMTIgNS4yMjM5MiAxMS43NzYxIDUuMDAwMDYgMTEuNSA1LjAwMDA2TDEwLjI1IDUuMDAwMDZDOS45NzM4NiA1LjAwMDA2IDkuNzUgNC43NzYyIDkuNzUgNC41MDAwNkM5Ljc1IDQuMjIzOTIgOS45NzM4NiA0LjAwMDA2IDEwLjI1IDQuMDAwMDZMMTEuNSA0LjAwMDA2QzEyLjMyODQgNC4wMDAwNiAxMyA0LjY3MTYzIDEzIDUuNTAwMDZMMTMgMTEuNTAwMUMxMyAxMi4zMjg1IDEyLjMyODQgMTMuMDAwMSAxMS41IDEzLjAwMDFMMy41IDEzLjAwMDFDMi42NzE1NyAxMy4wMDAxIDIgMTIuMzI4NSAyIDExLjUwMDFMMiA1LjUwMDA2QzIgNC42NzE2MyAyLjY3MTU3IDQuMDAwMDYgMy41IDQuMDAwMDZMNC43NSA0LjAwMDA2QzUuMDI2MTQgNC4wMDAwNiA1LjI1IDQuMjIzOTIgNS4yNSA0LjUwMDA2QzUuMjUgNC43NzYyIDUuMDI2MTQgNS4wMDAwNiA0Ljc1IDUuMDAwMDZMMy41IDUuMDAwMDZaTTcgMS42MzY0TDUuNTY4MiAzLjA2ODJDNS4zOTI0NiAzLjI0MzkzIDUuMTA3NTQgMy4yNDM5MyA0LjkzMTggMy4wNjgyQzQuNzU2MDcgMi44OTI0NiA0Ljc1NjA3IDIuNjA3NTQgNC45MzE4IDIuNDMxOEw3LjE4MTggMC4xODE4MDJDNy4yNjYxOSAwLjA5NzQxIDcuMzgwNjUgMC4wNDk5OTkgNy41IDAuMDQ5OTk5QzcuNjE5MzUgMC4wNDk5OTkgNy43MzM4MSAwLjA5NzQxIDcuODE4MiAwLjE4MTgwMkwxMC4wNjgyIDIuNDMxOEMxMC4yNDM5IDIuNjA3NTQgMTAuMjQzOSAyLjg5MjQ2IDEwLjA2ODIgMy4wNjgyQzkuODkyNDYgMy4yNDM5MyA5LjYwNzU0IDMuMjQzOTMgOS40MzE4IDMuMDY4Mkw4IDEuNjM2NEw4IDguNUM4IDguNzc2MTQgNy43NzYxNCA5IDcuNSA5QzcuMjIzODYgOSA3IDguNzc2MTQgNyA4LjVMNyAxLjYzNjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxTcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuMzUzNiAxLjE0NjQ1QzEyLjE1ODMgMC45NTExODQgMTEuODQxNyAwLjk1MTE4NCAxMS42NDY0IDEuMTQ2NDVDMTEuNDUxMiAxLjM0MTcxIDExLjQ1MTIgMS42NTgyOSAxMS42NDY0IDEuODUzNTVMMTIuNzkyOSAzSDEyQzEwLjcwMzcgMyA5LjcxMTExIDMuNTg0MjMgOC44NzI0OCA0LjM4OTMxQzguMjAwNjUgNS4wMzQyNyA3LjU5MzQ5IDUuODU2ODQgNi45OTQ2MSA2LjY2ODJDNi44NjI4NyA2Ljg0NjY4IDYuNzMxNTQgNy4wMjQ2MiA2LjYgNy4yQzUuMTA4NzQgOS4xODgzNSAzLjQ5MDM3IDExIDAuNSAxMUMwLjIyMzg1OCAxMSAwIDExLjIyMzkgMCAxMS41QzAgMTEuNzc2MSAwLjIyMzg1OCAxMiAwLjUgMTJDNC4wMDk2MyAxMiA1Ljg5MTI2IDkuODExNjUgNy40IDcuOEM3LjU0MzY3IDcuNjA4NDUgNy42ODMyIDcuNDE5NjIgNy44MTk5NiA3LjIzNDU0TDcuODIwMDUgNy4yMzQ0M0w3LjgyMDA2IDcuMjM0NDFDOC40MTY3NCA2LjQyNjk1IDguOTYwNjkgNS42OTA4NSA5LjU2NTAyIDUuMTEwNjlDMTAuMjg4OSA0LjQxNTc3IDExLjA0NjMgNCAxMiA0SDEyLjc5MjlMMTEuNjQ2NCA1LjE0NjQ1QzExLjQ1MTIgNS4zNDE3MSAxMS40NTEyIDUuNjU4MjkgMTEuNjQ2NCA1Ljg1MzU1QzExLjg0MTcgNi4wNDg4MiAxMi4xNTgzIDYuMDQ4ODIgMTIuMzUzNiA1Ljg1MzU1TDE0LjM1MzYgMy44NTM1NUMxNC41NDg4IDMuNjU4MjkgMTQuNTQ4OCAzLjM0MTcxIDE0LjM1MzYgMy4xNDY0NUwxMi4zNTM2IDEuMTQ2NDVaTTAuNSAzQzMuMzUyNzggMyA1LjEyOTkyIDQuNDQ1ODggNi41MDU0OCA2LjA2NzQ2TDYuMzc2MiA2LjI0MjY2QzYuMjQ4MyA2LjQxNjEgNi4xMjI5MyA2LjU4NjA5IDYgNi43NUM1Ljk2Mzk3IDYuNzk4MDQgNS45Mjc5OCA2Ljg0NTgxIDUuODkyIDYuODkzMzFDNC41NzM0OCA1LjI5MzA2IDMuMDI2MzcgNCAwLjUgNEMwLjIyMzg1OCA0IDAgMy43NzYxNCAwIDMuNUMwIDMuMjIzODYgMC4yMjM4NTggMyAwLjUgM1pNOC44NzI0OCAxMC42MTA3QzguMzcyODQgMTAuMTMxIDcuOTA4OTcgOS41NTMxNCA3LjQ1NzY3IDguOTU0NjhDNy42NDY4OCA4LjcxNjkzIDcuODI3MDQgOC40ODA2MSA4IDguMjVMOC4wODk4NyA4LjEyOTg3QzguNTg0MTIgOC43OTQwMiA5LjA1Mjg4IDkuMzk3NjYgOS41NjUwMiA5Ljg4OTMxQzEwLjI4ODkgMTAuNTg0MiAxMS4wNDYzIDExIDEyIDExSDEyLjc5MjlMMTEuNjQ2NCA5Ljg1MzU1QzExLjQ1MTIgOS42NTgyOSAxMS40NTEyIDkuMzQxNzEgMTEuNjQ2NCA5LjE0NjQ1QzExLjg0MTcgOC45NTExOCAxMi4xNTgzIDguOTUxMTggMTIuMzUzNiA5LjE0NjQ1TDE0LjM1MzYgMTEuMTQ2NEMxNC41NDg4IDExLjM0MTcgMTQuNTQ4OCAxMS42NTgzIDE0LjM1MzYgMTEuODUzNkwxMi4zNTM2IDEzLjg1MzZDMTIuMTU4MyAxNC4wNDg4IDExLjg0MTcgMTQuMDQ4OCAxMS42NDY0IDEzLjg1MzZDMTEuNDUxMiAxMy42NTgzIDExLjQ1MTIgMTMuMzQxNyAxMS42NDY0IDEzLjE0NjRMMTIuNzkyOSAxMkgxMkMxMC43MDM3IDEyIDkuNzExMTEgMTEuNDE1OCA4Ljg3MjQ4IDEwLjYxMDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxPcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuNSAzLjA0OTk5QzExLjc0ODUgMy4wNDk5OSAxMS45NSAzLjI1MTQ2IDExLjk1IDMuNDk5OTlWNy40OTk5OUMxMS45NSA3Ljc0ODUyIDExLjc0ODUgNy45NDk5OSAxMS41IDcuOTQ5OTlDMTEuMjUxNSA3Ljk0OTk5IDExLjA1IDcuNzQ4NTIgMTEuMDUgNy40OTk5OVY0LjU4NjM5TDQuNTg2MzggMTEuMDVINy40OTk5OUM3Ljc0ODUyIDExLjA1IDcuOTQ5OTkgMTEuMjUxNSA3Ljk0OTk5IDExLjVDNy45NDk5OSAxMS43NDg1IDcuNzQ4NTIgMTEuOTUgNy40OTk5OSAxMS45NUwzLjQ5OTk5IDExLjk1QzMuMzgwNjQgMTEuOTUgMy4yNjYxOCAxMS45MDI2IDMuMTgxNzkgMTEuODE4MkMzLjA5NzQgMTEuNzMzOCAzLjA0OTk5IDExLjYxOTMgMy4wNDk5OSAxMS41TDMuMDQ5OTkgNy40OTk5OUMzLjA0OTk5IDcuMjUxNDYgMy4yNTE0NiA3LjA0OTk5IDMuNDk5OTkgNy4wNDk5OUMzLjc0ODUyIDcuMDQ5OTkgMy45NDk5OSA3LjI1MTQ2IDMuOTQ5OTkgNy40OTk5OUwzLjk0OTk5IDEwLjQxMzZMMTAuNDEzNiAzLjk0OTk5TDcuNDk5OTkgMy45NDk5OUM3LjI1MTQ2IDMuOTQ5OTkgNy4wNDk5OSAzLjc0ODUyIDcuMDQ5OTkgMy40OTk5OUM3LjA0OTk5IDMuMjUxNDYgNy4yNTE0NiAzLjA0OTk5IDcuNDk5OTkgMy4wNDk5OUwxMS41IDMuMDQ5OTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxNcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41MzczMSAwLjgyNjg3M0M3LjUxMjUgMC44MjQzOTIgNy40ODc1IDAuODI0MzkyIDcuNDYyNjkgMC44MjY4NzNMMy45NjI2OSAxLjE3Njg3QzMuODU2NzIgMS4xODc0NyAzLjc2MDI1IDEuMjQyNjIgMy42OTczNiAxLjMyODU3TDAuNjk5NzcxIDUuNDI1MjhDMC42NTQwNDYgNS40ODYyNyAwLjYyNjQ3IDUuNTYxNjUgMC42MjUwNTcgNS42NDM0QzAuNjI1MDE5IDUuNjQ1NiAwLjYyNSA1LjY0NzgxIDAuNjI1IDUuNjUwMDFDMC42MjUgNS42NTA1MiAwLjYyNTAwMSA1LjY1MTAzIDAuNjI1MDAzIDUuNjUxNTNDMC42MjUzNjMgNS43NDIzNyAwLjY1ODAyMSA1LjgyNTU5IDAuNzEyMDg3IDUuODkwM0w3LjIxMDQyIDEzLjc4ODNDNy4yODE2NSAxMy44NzQ5IDcuMzg3ODkgMTMuOTI1IDcuNSAxMy45MjVDNy42MTIxMSAxMy45MjUgNy43MTgzNSAxMy44NzQ5IDcuNzg5NTggMTMuNzg4M0wxNC4yODc5IDUuODkwMzFDMTQuMzQyIDUuODI1NiAxNC4zNzQ2IDUuNzQyMzcgMTQuMzc1IDUuNjUxNTNDMTQuMzc1IDUuNjUxMDMgMTQuMzc1IDUuNjUwNTIgMTQuMzc1IDUuNjUwMDFDMTQuMzc1IDUuNjQ4NDkgMTQuMzc1IDUuNjQ2OTcgMTQuMzc1IDUuNjQ1NDVDMTQuMzc0OSA1LjYzOTYzIDE0LjM3NDcgNS42MzM4MiAxNC4zNzQ0IDUuNjI4MDFDMTQuMzcgNS41NTIxOSAxNC4zNDMxIDUuNDgyNDIgMTQuMzAwMiA1LjQyNTI3TDExLjMwMjYgMS4zMjg1N0MxMS4yMzk3IDEuMjQyNjIgMTEuMTQzMyAxLjE4NzQ3IDExLjAzNzMgMS4xNzY4N0w3LjUzNzMxIDAuODI2ODczWk0xMC45MjUgNS4yNzUwMVY1LjI1MjM2TDEwLjkyMjMgNS4yNzUwMUgxMC45MjVaTTEwLjkzNDIgNS4xNzQ5OEgxMy4xODc3TDExLjI0OTUgMi41MjYxTDEwLjkzNDIgNS4xNzQ5OFpNMTAuNTcwNyAxLjg4Mzk1TDguMDQ0MzIgMS42MzEzMUwxMC4xNzQ3IDUuMjEwMzRMMTAuNTcwNyAxLjg4Mzk1Wk02Ljk1NTY4IDEuNjMxMzFMNC40MjkzMSAxLjg4Mzk1TDQuODI1MzEgNS4yMTAzNEw2Ljk1NTY4IDEuNjMxMzFaTTMuNzUwNDYgMi41MjYxTDEuODEyMjYgNS4xNzQ5OEg0LjA2NThMMy43NTA0NiAyLjUyNjFaTTEuNzk0MTYgNi4wMjUwMUw2Ljc1ODYxIDEyLjA1ODdMNC4yMjM3MSA2LjA2NjlDNC4yMTc4NyA2LjA1MzEgNC4yMTMxNCA2LjAzOTEgNC4yMDk0OSA2LjAyNTAxSDEuNzk0MTZaTTUuMTUwNTUgNi4wMjUwMUw3LjQ5OTk5IDEyLjEwODVMOS44NDk0MyA2LjAyNTAxSDkuNzg2ODFINS4yMTMxOUg1LjE1MDU1Wk0xMC43OTA1IDYuMDI1MDFDMTAuNzg2OSA2LjAzOTEgMTAuNzgyMSA2LjA1MzEgMTAuNzc2MyA2LjA2NjlMOC4yNDEzOSAxMi4wNTg3TDEzLjIwNTggNi4wMjUwMUgxMC43OTA1Wk03LjUgMi4xODMxN0w5LjM0MDM4IDUuMjc1MDFINS42NTk2Mkw3LjUgMi4xODMxN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LExyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjEwODc2IDE0TDkuNDY1ODIgMUgxMC44MTc4TDUuNDYwNzQgMTRINC4xMDg3NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF9yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMC4zMDA0IDcuNDk5OTFDMTAuMzAwNCA4LjQ5NDMgOS40OTQyNiA5LjMwMDQxIDguNDk5ODggOS4zMDA0MUM3LjUwNTQ5IDkuMzAwNDEgNi42OTkzOCA4LjQ5NDMgNi42OTkzOCA3LjQ5OTkxQzYuNjk5MzggNi41MDU1MyA3LjUwNTQ5IDUuNjk5NDIgOC40OTk4OCA1LjY5OTQyQzkuNDk0MjYgNS42OTk0MiAxMC4zMDA0IDYuNTA1NTMgMTAuMzAwNCA3LjQ5OTkxWk0xMS4yMDUgOEMxMC45Njk5IDkuMjgwMjkgOS44NDgxNiAxMC4yNTA0IDguNDk5ODggMTAuMjUwNEM3LjE1MTYgMTAuMjUwNCA2LjAyOTkgOS4yODAyOSA1Ljc5NDczIDhIMC41QzAuMjIzODU4IDggMCA3Ljc3NjE0IDAgNy41QzAgNy4yMjM4NiAwLjIyMzg1OCA3IDAuNSA3SDUuNzk0N0M2LjAyOTggNS43MTk2MiA3LjE1MTU0IDQuNzQ5NDIgOC40OTk4OCA0Ljc0OTQyQzkuODQ4MjIgNC43NDk0MiAxMC45Njk5IDUuNzE5NjIgMTEuMjA1MSA3SDE0LjVDMTQuNzc2MSA3IDE1IDcuMjIzODYgMTUgNy41QzE1IDcuNzc2MTQgMTQuNzc2MSA4IDE0LjUgOEgxMS4yMDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQuNDk5OSAwLjk5OTk5NEMxNC4yMjM3IDAuOTk5OTk0IDEzLjk5OTkgMS4yMjM4NSAxMy45OTk5IDEuNDk5OTlMMTMuOTk5OSA1Ljk5OTk1TDkuOTk5OTIgNS45OTk5NUM5LjQ0NzY0IDUuOTk5OTUgOC45OTk5MyA2LjQ0NzY2IDguOTk5OTMgNi45OTk5NEw4Ljk5OTkzIDcuOTk5OTRDOC45OTk5MyA4LjU1MjIyIDkuNDQ3NjQgOC45OTk5MyA5Ljk5OTkyIDguOTk5OTNMMTMuOTk5OSA4Ljk5OTkzTDEzLjk5OTkgMTMuNDk5OUMxMy45OTk5IDEzLjc3NiAxNC4yMjM3IDEzLjk5OTkgMTQuNDk5OSAxMy45OTk5QzE0Ljc3NiAxMy45OTk5IDE0Ljk5OTkgMTMuNzc2IDE0Ljk5OTkgMTMuNDk5OUwxNC45OTk5IDEuNDk5OTlDMTQuOTk5OSAxLjIyMzg1IDE0Ljc3NiAwLjk5OTk5NCAxNC40OTk5IDAuOTk5OTk0Wk00Ljk5OTk2IDUuOTk5OTVMMC45OTk5OTIgNS45OTk5NUwwLjk5OTk5MiAxLjQ5OTk5QzAuOTk5OTkyIDEuMjIzODUgMC43NzYxMzYgMC45OTk5OTQgMC40OTk5OTYgMC45OTk5OTRDMC4yMjM4NTYgMC45OTk5OTQgLTkuNzg1MmUtMDkgMS4yMjM4NSAtMi4xODU1N2UtMDggMS40OTk5OUw0LjA3Mjc5ZS0wNyAxMy40OTk5QzMuOTUyMDhlLTA3IDEzLjc3NiAwLjIyMzg1NSAxMy45OTk5IDAuNDk5OTk2IDEzLjk5OTlDMC43NzYxMzYgMTMuOTk5OSAwLjk5OTk5MiAxMy43NzYgMC45OTk5OTIgMTMuNDk5OUwwLjk5OTk5MiA4Ljk5OTkzTDQuOTk5OTYgOC45OTk5M0M1LjU1MjI0IDguOTk5OTMgNS45OTk5NSA4LjU1MjIyIDUuOTk5OTUgNy45OTk5M0w1Ljk5OTk1IDYuOTk5OTRDNS45OTk5NSA2LjQ0NzY2IDUuNTUyMjQgNS45OTk5NSA0Ljk5OTk2IDUuOTk5OTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxFcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC45OTk4NzggMC41QzAuOTk5ODc4IDAuMjIzODU4IDEuMjIzNzQgMCAxLjQ5OTg4IDBIMTMuNDk5OUMxMy43NzYgMCAxMy45OTk5IDAuMjIzODU4IDEzLjk5OTkgMC41QzEzLjk5OTkgMC43NzYxNDIgMTMuNzc2IDEgMTMuNDk5OSAxTDkgMVY1QzkgNS41NTIyOCA4LjU1MjI4IDYgOCA2SDdDNi40NDc3MiA2IDYgNS41NTIyOCA2IDVWMUgxLjQ5OTg4QzEuMjIzNzQgMSAwLjk5OTg3OCAwLjc3NjE0MiAwLjk5OTg3OCAwLjVaTTcgOUM2LjQ0NzcyIDkgNiA5LjQ0NzcxIDYgMTBWMTRIMS40OTk4OEMxLjIyMzc0IDE0IDAuOTk5ODc4IDE0LjIyMzkgMC45OTk4NzggMTQuNUMwLjk5OTg3OCAxNC43NzYxIDEuMjIzNzQgMTUgMS40OTk4OCAxNUgxMy40OTk5QzEzLjc3NiAxNSAxMy45OTk5IDE0Ljc3NjEgMTMuOTk5OSAxNC41QzEzLjk5OTkgMTQuMjIzOSAxMy43NzYgMTQgMTMuNDk5OSAxNEg5VjEwQzkgOS40NDc3MiA4LjU1MjI4IDkgOCA5SDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxqcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQuNDk5OSAwLjk5OTk5MkMxNC4yMjM3IDAuOTk5OTkyIDEzLjk5OTkgMS4yMjM4NSAxMy45OTk5IDEuNDk5OTlMMTMuOTk5OSAxMy40OTk5QzEzLjk5OTkgMTMuNzc2IDE0LjIyMzcgMTMuOTk5OSAxNC40OTk5IDEzLjk5OTlDMTQuNzc2IDEzLjk5OTkgMTQuOTk5OSAxMy43NzYgMTQuOTk5OSAxMy40OTk5TDE0Ljk5OTkgMS40OTk5OUMxNC45OTk5IDEuMjIzODUgMTQuNzc2IDAuOTk5OTkyIDE0LjQ5OTkgMC45OTk5OTJaTTAuNDk5OTk2IDAuOTk5OTkyQzAuMjIzODU2IDAuOTk5OTkyIC05Ljc4NTA5ZS0wOSAxLjIyMzg1IC0yLjE4NTU2ZS0wOCAxLjQ5OTk5TDQuMDcyNzllLTA3IDEzLjQ5OTlDMy45NTIwOGUtMDcgMTMuNzc2IDAuMjIzODU1IDEzLjk5OTkgMC40OTk5OTYgMTMuOTk5OUMwLjc3NjEzNiAxMy45OTk5IDAuOTk5OTkyIDEzLjc3NiAwLjk5OTk5MiAxMy40OTk5TDAuOTk5OTkyIDEuNDk5OTlDMC45OTk5OTIgMS4yMjM4NSAwLjc3NjEzNiAwLjk5OTk5MiAwLjQ5OTk5NiAwLjk5OTk5MlpNMS45OTk5OCA2Ljk5OTk0QzEuOTk5OTggNi40NDc2NiAyLjQ0NzY5IDUuOTk5OTUgMi45OTk5OCA1Ljk5OTk1TDUuOTk5OTUgNS45OTk5NUM2LjU1MjIzIDUuOTk5OTUgNi45OTk5NCA2LjQ0NzY2IDYuOTk5OTQgNi45OTk5NEw2Ljk5OTk0IDcuOTk5OTNDNi45OTk5NCA4LjU1MjIxIDYuNTUyMjMgOC45OTk5MiA1Ljk5OTk1IDguOTk5OTJMMi45OTk5OCA4Ljk5OTkyQzIuNDQ3NyA4Ljk5OTkyIDEuOTk5OTggOC41NTIyMSAxLjk5OTk4IDcuOTk5OTNMMS45OTk5OCA2Ljk5OTk0Wk04Ljk5OTkzIDUuOTk5OTVDOC40NDc2NSA1Ljk5OTk1IDcuOTk5OTMgNi40NDc2NiA3Ljk5OTkzIDYuOTk5OTRMNy45OTk5MyA3Ljk5OTkzQzcuOTk5OTMgOC41NTIyMSA4LjQ0NzY1IDguOTk5OTIgOC45OTk5MyA4Ljk5OTkyTDExLjk5OTkgOC45OTk5MkMxMi41NTIyIDguOTk5OTIgMTIuOTk5OSA4LjU1MjIxIDEyLjk5OTkgNy45OTk5M0wxMi45OTk5IDYuOTk5OTRDMTIuOTk5OSA2LjQ0NzY2IDEyLjU1MjIgNS45OTk5NSAxMS45OTk5IDUuOTk5OTVMOC45OTk5MyA1Ljk5OTk1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuOTk5ODc4IDAuNUMwLjk5OTg3OCAwLjIyMzg1OCAxLjIyMzc0IDAgMS40OTk4OCAwSDEzLjQ5OTlDMTMuNzc2IDAgMTMuOTk5OSAwLjIyMzg1OCAxMy45OTk5IDAuNUMxMy45OTk5IDAuNzc2MTQyIDEzLjc3NiAxIDEzLjQ5OTkgMUgxLjQ5OTg4QzEuMjIzNzQgMSAwLjk5OTg3OCAwLjc3NjE0MiAwLjk5OTg3OCAwLjVaTTcgMkM2LjQ0NzcyIDIgNiAyLjQ0NzcyIDYgM1Y2QzYgNi41NTIyOCA2LjQ0NzcyIDcgNyA3SDhDOC41NTIyOCA3IDkgNi41NTIyOCA5IDZWM0M5IDIuNDQ3NzIgOC41NTIyOCAyIDggMkg3Wk03IDhDNi40NDc3MiA4IDYgOC40NDc3MSA2IDlWMTJDNiAxMi41NTIzIDYuNDQ3NzIgMTMgNyAxM0g4QzguNTUyMjggMTMgOSAxMi41NTIzIDkgMTJWOUM5IDguNDQ3NzIgOC41NTIyOCA4IDggOEg3Wk0xLjQ5OTg4IDE0QzEuMjIzNzQgMTQgMC45OTk4NzggMTQuMjIzOSAwLjk5OTg3OCAxNC41QzAuOTk5ODc4IDE0Ljc3NjEgMS4yMjM3NCAxNSAxLjQ5OTg4IDE1SDEzLjQ5OTlDMTMuNzc2IDE1IDEzLjk5OTkgMTQuNzc2MSAxMy45OTk5IDE0LjVDMTMuOTk5OSAxNC4yMjM5IDEzLjc3NiAxNCAxMy40OTk5IDE0SDEuNDk5ODhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxJcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40Njk2OCAxLjA1MDg1QzcuNjQxMjIgMS4xMzQ3NSA3Ljc1IDEuMzA5MDQgNy43NSAxLjVWMTMuNUM3Ljc1IDEzLjY5MSA3LjY0MTIyIDEzLjg2NTMgNy40Njk2OCAxMy45NDkyQzcuMjk4MTMgMTQuMDMzMSA3LjA5Mzc3IDE0LjAxMTkgNi45NDMwMyAxMy44OTQ3TDMuMjIxMyAxMUgxLjVDMC42NzE1NzEgMTEgMCAxMC4zMjg0IDAgOS41VjUuNUMwIDQuNjcxNTggMC42NzE1NzMgNCAxLjUgNEgzLjIyMTNMNi45NDMwMyAxLjEwNTMzQzcuMDkzNzcgMC45ODgwODUgNy4yOTgxMyAwLjk2Njk0NSA3LjQ2OTY4IDEuMDUwODVaTTYuNzUgMi41MjIzMkwzLjY5OTgzIDQuODk0NjhDMy42MTIwNiA0Ljk2Mjk0IDMuNTA0MDUgNSAzLjM5Mjg2IDVIMS41QzEuMjIzODYgNSAxIDUuMjIzODYgMSA1LjVWOS41QzEgOS43NzYxNSAxLjIyMzg2IDEwIDEuNSAxMEgzLjM5Mjg2QzMuNTA0MDUgMTAgMy42MTIwNiAxMC4wMzcxIDMuNjk5ODMgMTAuMTA1M0w2Ljc1IDEyLjQ3NzdWMi41MjIzMlpNMTAuMjc4NCAzLjg0ODA0QzEwLjQ2MjMgMy43MjU2NyAxMC43MTA2IDMuNzc1NTcgMTAuODMzIDMuOTU5NDlDMTIuMjU1OCA2LjA5Nzk4IDEyLjI1NTggOC45MDE5OSAxMC44MzMgMTEuMDQwNUMxMC43MTA2IDExLjIyNDQgMTAuNDYyMyAxMS4yNzQzIDEwLjI3ODQgMTEuMTUxOUMxMC4wOTQ0IDExLjAyOTYgMTAuMDQ0NSAxMC43ODEzIDEwLjE2NjkgMTAuNTk3M0MxMS40MTExIDguNzI3MjggMTEuNDExMSA2LjI3MjY5IDEwLjE2NjkgNC40MDI2NEMxMC4wNDQ1IDQuMjE4NzEgMTAuMDk0NCAzLjk3MDQxIDEwLjI3ODQgMy44NDgwNFpNMTIuNjc4NSAxLjQzMDQ0QzEyLjUzNTYgMS4yNjE5IDEyLjI4MzIgMS4yNDEwNCAxMi4xMTQ3IDEuMzgzODZDMTEuOTQ2MiAxLjUyNjY3IDExLjkyNTMgMS43NzkwOCAxMi4wNjgxIDEuOTQ3NjJDMTQuNzc3MyA1LjE0NDg4IDE0Ljc3NzMgOS44NTUxMyAxMi4wNjgxIDEzLjA1MjRDMTEuOTI1MyAxMy4yMjA5IDExLjk0NjIgMTMuNDczMyAxMi4xMTQ3IDEzLjYxNjFDMTIuMjgzMiAxMy43NTkgMTIuNTM1NiAxMy43MzgxIDEyLjY3ODUgMTMuNTY5NkMxNS42NDA2IDEwLjA3MzkgMTUuNjQwNiA0LjkyNjEyIDEyLjY3ODUgMS40MzA0NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFZyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04IDEuNUM4IDEuMzEwNjIgNy44OTMgMS4xMzc0OSA3LjcyMzYxIDEuMDUyNzlDNy41NTQyMSAwLjk2ODA5MyA3LjM1MTUxIDAuOTg2MzcxIDcuMiAxLjFMMy4zMzMzMyA0SDEuNUMwLjY3MTU3MyA0IDAgNC42NzE1OCAwIDUuNVY5LjVDMCAxMC4zMjg0IDAuNjcxNTczIDExIDEuNSAxMUgzLjMzMzMzTDcuMiAxMy45QzcuMzUxNTEgMTQuMDEzNiA3LjU1NDIxIDE0LjAzMTkgNy43MjM2MSAxMy45NDcyQzcuODkzIDEzLjg2MjUgOCAxMy42ODk0IDggMTMuNVYxLjVaTTMuOCA0LjlMNyAyLjVWMTIuNUwzLjggMTAuMUMzLjcxMzQ1IDEwLjAzNTEgMy42MDgxOSAxMCAzLjUgMTBIMS41QzEuMjIzODYgMTAgMSA5Ljc3NjE0IDEgOS41VjUuNUMxIDUuMjIzODYgMS4yMjM4NiA1IDEuNSA1SDMuNUMzLjYwODE5IDUgMy43MTM0NSA0Ljk2NDkxIDMuOCA0LjlaTTEwLjgzMyAzLjk1OTQ5QzEwLjcxMDYgMy43NzU1NyAxMC40NjIzIDMuNzI1NjcgMTAuMjc4NCAzLjg0ODA0QzEwLjA5NDQgMy45NzA0MSAxMC4wNDQ1IDQuMjE4NzEgMTAuMTY2OSA0LjQwMjY0QzExLjQxMTEgNi4yNzI2OCAxMS40MTExIDguNzI3MjggMTAuMTY2OSAxMC41OTczQzEwLjA0NDUgMTAuNzgxMyAxMC4wOTQ0IDExLjAyOTYgMTAuMjc4NCAxMS4xNTE5QzEwLjQ2MjMgMTEuMjc0MyAxMC43MTA2IDExLjIyNDQgMTAuODMzIDExLjA0MDVDMTIuMjU1OCA4LjkwMTk5IDEyLjI1NTggNi4wOTc5OCAxMC44MzMgMy45NTk0OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEhyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjcyMzYxIDEuMDUyNzlDNy44OTMgMS4xMzc0OSA4IDEuMzEwNjIgOCAxLjVWMTMuNUM4IDEzLjY4OTQgNy44OTMgMTMuODYyNSA3LjcyMzYxIDEzLjk0NzJDNy41NTQyMSAxNC4wMzE5IDcuMzUxNTEgMTQuMDEzNiA3LjIgMTMuOUwzLjMzMzMzIDExSDEuNUMwLjY3MTU3MyAxMSAwIDEwLjMyODQgMCA5LjVWNS41QzAgNC42NzE1OCAwLjY3MTU3MyA0IDEuNSA0SDMuMzMzMzNMNy4yIDEuMUM3LjM1MTUxIDAuOTg2MzcxIDcuNTU0MjEgMC45NjgwOTMgNy43MjM2MSAxLjA1Mjc5Wk03IDIuNUwzLjggNC45QzMuNzEzNDUgNC45NjQ5MSAzLjYwODE5IDUgMy41IDVIMS41QzEuMjIzODYgNSAxIDUuMjIzODYgMSA1LjVWOS41QzEgOS43NzYxNCAxLjIyMzg2IDEwIDEuNSAxMEgzLjVDMy42MDgxOSAxMCAzLjcxMzQ1IDEwLjAzNTEgMy44IDEwLjFMNyAxMi41VjIuNVpNMTQuODUzNiA1LjE0NjQ1QzE1LjA0ODggNS4zNDE3MSAxNS4wNDg4IDUuNjU4MjkgMTQuODUzNiA1Ljg1MzU1TDEzLjIwNzEgNy41TDE0Ljg1MzYgOS4xNDY0NUMxNS4wNDg4IDkuMzQxNzEgMTUuMDQ4OCA5LjY1ODI5IDE0Ljg1MzYgOS44NTM1NUMxNC42NTgzIDEwLjA0ODggMTQuMzQxNyAxMC4wNDg4IDE0LjE0NjQgOS44NTM1NUwxMi41IDguMjA3MTFMMTAuODUzNiA5Ljg1MzU1QzEwLjY1ODMgMTAuMDQ4OCAxMC4zNDE3IDEwLjA0ODggMTAuMTQ2NCA5Ljg1MzU1QzkuOTUxMTggOS42NTgyOSA5Ljk1MTE4IDkuMzQxNzEgMTAuMTQ2NCA5LjE0NjQ1TDExLjc5MjkgNy41TDEwLjE0NjQgNS44NTM1NUM5Ljk1MTE4IDUuNjU4MjkgOS45NTExOCA1LjM0MTcxIDEwLjE0NjQgNS4xNDY0NUMxMC4zNDE3IDQuOTUxMTggMTAuNjU4MyA0Ljk1MTE4IDEwLjg1MzYgNS4xNDY0NUwxMi41IDYuNzkyODlMMTQuMTQ2NCA1LjE0NjQ1QzE0LjM0MTcgNC45NTExOCAxNC42NTgzIDQuOTUxMTggMTQuODUzNiA1LjE0NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTggMS41QzggMS4zMTA2MiA3Ljg5MyAxLjEzNzQ5IDcuNzIzNjEgMS4wNTI3OUM3LjU1NDIxIDAuOTY4MDkzIDcuMzUxNTEgMC45ODYzNzEgNy4yIDEuMUwzLjMzMzMzIDRIMS41QzAuNjcxNTczIDQgMCA0LjY3MTU4IDAgNS41VjkuNUMwIDEwLjMyODQgMC42NzE1NzMgMTEgMS41IDExSDMuMzMzMzNMNy4yIDEzLjlDNy4zNTE1MSAxNC4wMTM2IDcuNTU0MjEgMTQuMDMxOSA3LjcyMzYxIDEzLjk0NzJDNy44OTMgMTMuODYyNSA4IDEzLjY4OTQgOCAxMy41VjEuNVpNMy44IDQuOUw3IDIuNVYxMi41TDMuOCAxMC4xQzMuNzEzNDUgMTAuMDM1MSAzLjYwODE5IDEwIDMuNSAxMEgxLjVDMS4yMjM4NiAxMCAxIDkuNzc2MTQgMSA5LjVWNS41QzEgNS4yMjM4NiAxLjIyMzg2IDUgMS41IDVIMy41QzMuNjA4MTkgNSAzLjcxMzQ1IDQuOTY0OTEgMy44IDQuOVpNMTAuMDgzIDUuMDU1NzdDOS45NjA2NiA0Ljg3MTg1IDkuNzEyMzUgNC44MjE5NSA5LjUyODQzIDQuOTQ0MzJDOS4zNDQ1IDUuMDY2NjkgOS4yOTQ2IDUuMzE0OTkgOS40MTY5NyA1LjQ5ODkyQzEwLjIyMDcgNi43MDY5MyAxMC4yMjA3IDguMjkzMDMgOS40MTY5NyA5LjUwMTA0QzkuMjk0NiA5LjY4NDk2IDkuMzQ0NSA5LjkzMzI2IDkuNTI4NDMgMTAuMDU1NkM5LjcxMjM1IDEwLjE3OCA5Ljk2MDY2IDEwLjEyODEgMTAuMDgzIDkuOTQ0MThDMTEuMDY1MyA4LjQ2NzczIDExLjA2NTMgNi41MzIyMiAxMC4wODMgNS4wNTU3N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFRyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDFIMS41SDEzLjVIMTRWMS41VjEzLjVWMTRIMTMuNUgxLjVIMVYxMy41VjEuNVYxWk0yIDJWMTNIMTNWMkgyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNzU0MzIgMS44MTk1NEM3LjU5NzQyIDEuNzI2ODIgNy40MDI1IDEuNzI2ODIgNy4yNDU1OSAxLjgxOTU0TDEuNzQ1NTkgNS4wNjk1NEMxLjU5MzM2IDUuMTU5NDkgMS40OTk5NiA1LjMyMzE3IDEuNDk5OTYgNS41QzEuNDk5OTYgNS42NzY4MyAxLjU5MzM2IDUuODQwNTEgMS43NDU1OSA1LjkzMDQ2TDcuMjQ1NTkgOS4xODA0NkM3LjQwMjUgOS4yNzMxOCA3LjU5NzQyIDkuMjczMTggNy43NTQzMiA5LjE4MDQ2TDEzLjI1NDMgNS45MzA0NkMxMy40MDY2IDUuODQwNTEgMTMuNSA1LjY3NjgzIDEzLjUgNS41QzEzLjUgNS4zMjMxNyAxMy40MDY2IDUuMTU5NDkgMTMuMjU0MyA1LjA2OTU0TDcuNzU0MzIgMS44MTk1NFpNNy40OTk5NiA4LjE2OTIzTDIuOTgyOCA1LjVMNy40OTk5NiAyLjgzMDc3TDEyLjAxNzEgNS41TDcuNDk5OTYgOC4xNjkyM1pNMi4yNTQzMiA4LjMxOTU0QzIuMDE2NTggOC4xNzkwNiAxLjcwOTk4IDguMjU3OSAxLjU2OTQ5IDguNDk1NjRDMS40MjkwMSA4LjczMzM3IDEuNTA3ODUgOS4wMzk5OCAxLjc0NTU5IDkuMTgwNDZMNy4yNDU1OSAxMi40MzA1QzcuNDAyNSAxMi41MjMyIDcuNTk3NDIgMTIuNTIzMiA3Ljc1NDMyIDEyLjQzMDVMMTMuMjU0MyA5LjE4MDQ2QzEzLjQ5MjEgOS4wMzk5OCAxMy41NzA5IDguNzMzMzcgMTMuNDMwNCA4LjQ5NTY0QzEzLjI4OTkgOC4yNTc5IDEyLjk4MzMgOC4xNzkwNiAxMi43NDU2IDguMzE5NTRMNy40OTk5NiAxMS40MTkyTDIuMjU0MzIgOC4zMTk1NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEJyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljk3OTQyIDEuMjUxNzFMNi45NTg1IDEuMzAxOTlMNS41ODY2MiA0LjYwMDM5QzUuNTQzNDIgNC43MDQyNiA1LjQ0NTczIDQuNzc1MjMgNS4zMzM2IDQuNzg0MjJMMS43NzI3IDUuMDY5N0wxLjcxODQxIDUuMDc0MDVMMS4zODY4NyA1LjEwMDYzTDEuMDg2MDggNS4xMjQ3NUMwLjgyMDA4NSA1LjE0NjA3IDAuNzEyMjI4IDUuNDc4MDIgMC45MTQ4ODkgNS42NTE2MkwxLjE0NDA2IDUuODQ3OTNMMS4zOTY2NiA2LjA2NDMxTDEuNDM4MDIgNi4wOTk3NEw0LjE1MTA1IDguNDIzNzRDNC4yMzY0OCA4LjQ5NjkyIDQuMjczOCA4LjYxMTc2IDQuMjQ3NjkgOC43MjExOEwzLjQxODgyIDEyLjE5NkwzLjQwNjE4IDEyLjI0OUwzLjMyOTAxIDEyLjU3MjVMMy4yNTg5OSAxMi44NjZDMy4xOTcwOCAxMy4xMjU2IDMuNDc5NDUgMTMuMzMwOCAzLjcwNzE4IDEzLjE5MTdMMy45NjQ3IDEzLjAzNDRMNC4yNDg1NCAxMi44NjFMNC4yOTUwMiAxMi44MzI2TDcuMzQzNjUgMTAuOTcwNUM3LjQzOTY1IDEwLjkxMTkgNy41NjA0IDEwLjkxMTkgNy42NTY0IDEwLjk3MDVMMTAuNzA1IDEyLjgzMjZMMTAuNzUxNSAxMi44NjFMMTEuMDM1NCAxMy4wMzQ0TDExLjI5MjkgMTMuMTkxN0MxMS41MjA2IDEzLjMzMDggMTEuODAzIDEzLjEyNTYgMTEuNzQxMSAxMi44NjZMMTEuNjcxIDEyLjU3MjVMMTEuNTkzOSAxMi4yNDlMMTEuNTgxMiAxMi4xOTZMMTAuNzUyNCA4LjcyMTE4QzEwLjcyNjMgOC42MTE3NiAxMC43NjM2IDguNDk2OTIgMTAuODQ5IDguNDIzNzRMMTMuNTYyIDYuMDk5NzRMMTMuNjAzNCA2LjA2NDMxTDEzLjg1NiA1Ljg0NzkzTDE0LjA4NTIgNS42NTE2MkMxNC4yODc4IDUuNDc4MDIgMTQuMTggNS4xNDYwNyAxMy45MTQgNS4xMjQ3NUwxMy42MTMyIDUuMTAwNjNMMTMuMjgxNiA1LjA3NDA1TDEzLjIyNzQgNS4wNjk3TDkuNjY2NDUgNC43ODQyMkM5LjU1NDMyIDQuNzc1MjMgOS40NTY2MyA0LjcwNDI2IDkuNDEzNDMgNC42MDAzOUw4LjA0MTU1IDEuMzAxOTlMOC4wMjA2NCAxLjI1MTcxTDcuODkyOTEgMC45NDQ2MDlMNy43NzcwMiAwLjY2NTk5MkM3LjY3NDU0IDAuNDE5NjA0IDcuMzI1NTEgMC40MTk2MDQgNy4yMjMwMyAwLjY2NTk5Mkw3LjEwNzE1IDAuOTQ0NjA5TDYuOTc5NDIgMS4yNTE3MVpNNy41MDAwMyAyLjYwMzk3TDYuNTA5OTQgNC45ODQ0MkM2LjMyMjczIDUuNDM0NTMgNS44OTk0NCA1Ljc0MjA3IDUuNDEzNTEgNS43ODEwM0wyLjg0MzYxIDUuOTg3MDVMNC44MDE2IDcuNjY0MjhDNS4xNzE4MyA3Ljk4MTQyIDUuMzMzNTEgOC40NzkwMyA1LjIyMDQgOC45NTMyMUw0LjYyMjIxIDExLjQ2MUw2LjgyMjQgMTAuMTE3MUM3LjIzODQyIDkuODYzMDIgNy43NjE2NCA5Ljg2MzAyIDguMTc3NjYgMTAuMTE3MUwxMC4zNzc4IDExLjQ2MUw5Ljc3OTY1IDguOTUzMjFDOS42NjY1NCA4LjQ3OTAzIDkuODI4MjIgNy45ODE0MiAxMC4xOTg0IDcuNjY0MjhMMTIuMTU2NCA1Ljk4NzA1TDkuNTg2NTQgNS43ODEwM0M5LjEwMDYxIDUuNzQyMDcgOC42NzczMiA1LjQzNDUzIDguNDkwMTEgNC45ODQ0Mkw3LjUwMDAzIDIuNjAzOTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxacj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4yMjMwMyAwLjY2NTk5MkM3LjMyNTUxIDAuNDE5NjA0IDcuNjc0NTQgMC40MTk2MDQgNy43NzcwMiAwLjY2NTk5Mkw5LjQxMzQzIDQuNjAwMzlDOS40NTY2MyA0LjcwNDI2IDkuNTU0MzIgNC43NzUyMyA5LjY2NjQ1IDQuNzg0MjJMMTMuOTE0IDUuMTI0NzVDMTQuMTggNS4xNDYwNyAxNC4yODc4IDUuNDc4MDIgMTQuMDg1MiA1LjY1MTYyTDEwLjg0OSA4LjQyMzc0QzEwLjc2MzYgOC40OTY5MiAxMC43MjYzIDguNjExNzYgMTAuNzUyNCA4LjcyMTE4TDExLjc0MTEgMTIuODY2QzExLjgwMyAxMy4xMjU2IDExLjUyMDYgMTMuMzMwOCAxMS4yOTI5IDEzLjE5MTdMNy42NTY0IDEwLjk3MDVDNy41NjA0IDEwLjkxMTkgNy40Mzk2NSAxMC45MTE5IDcuMzQzNjUgMTAuOTcwNUwzLjcwNzE4IDEzLjE5MTdDMy40Nzk0NSAxMy4zMzA4IDMuMTk3MDggMTMuMTI1NiAzLjI1ODk5IDEyLjg2Nkw0LjI0NzY5IDguNzIxMThDNC4yNzM4IDguNjExNzYgNC4yMzY0OCA4LjQ5NjkyIDQuMTUxMDUgOC40MjM3NEwwLjkxNDg4OSA1LjY1MTYyQzAuNzEyMjI4IDUuNDc4MDIgMC44MjAwODYgNS4xNDYwNyAxLjA4NjA4IDUuMTI0NzVMNS4zMzM2IDQuNzg0MjJDNS40NDU3MyA0Ljc3NTIzIDUuNTQzNDIgNC43MDQyNiA1LjU4NjYyIDQuNjAwMzlMNy4yMjMwMyAwLjY2NTk5MlpcIixmaWxsOm59KSl9LCRyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjg0OTk4IDcuNDk5OThDMS44NDk5OCA3LjIxMzIxIDEuODcxMzQgNi45MzE0MyAxLjkxMjU2IDYuNjU2MTVMOS41NjM3NCAyLjIzODc1QzkuODYzMTEgMi4zNTYyNyAxMC4xNSAyLjQ5ODYxIDEwLjQyMTkgMi42NjMyMkwzLjc3MDY1IDYuNTAzMzJDMy43MzY2OSA2LjUyMTgzIDMuNzA0ODIgNi41NDQ5IDMuNjc2MDIgNi41NzIzOEMzLjU5MTEgNi42NTMwOCAzLjU0MjQ1IDYuNzYyODYgMy41MzY4MiA2Ljg3NjU4QzMuNTMzNTkgNi45NDE4IDMuNTQ0NTEgNy4wMDgzMSAzLjU3MDg2IDcuMDcxMzdDMy41ODkyNyA3LjExNTcgMy42MTQ5IDcuMTU3NDIgMy42NDc0NCA3LjE5NDU4QzMuNjczMDYgNy4yMjM5NiAzLjcwMiA3LjI0OTQxIDMuNzMzMzcgNy4yNzA2OUw3LjMyNTMzIDkuODM4MTNMMy44NzIzMiAxMS44MzE3QzIuNjM2MDQgMTAuNzk1MyAxLjg0OTk4IDkuMjM5NDQgMS44NDk5OCA3LjQ5OTk4Wk04LjM2ODQzIDEwLjI3NTFDOC4zNzY4MiAxMC4yNzA2IDguMzg1MDkgMTAuMjY1OSA4LjM5MzIyIDEwLjI2MDhMOS44NDA5MSA5LjQyNDk5QzkuODQ3MDYgOS40MjE2MyA5Ljg1MzE0IDkuNDE4MTIgOS44NTkxNSA5LjQxNDQ2TDExLjMxMDEgOC41NzY3N0MxMS4zNjU1IDguNTQ2NDkgMTEuNDE1NCA4LjUwNCAxMS40NTU0IDguNDQ5OTVDMTEuNjAzNCA4LjI1MDMxIDExLjU2MTYgNy45Njg0OCAxMS4zNjIgNy44MjA0Nkw3LjgyNzc5IDUuMjAwMTdMMTEuMjE2MSAzLjI0MzkzQzEyLjQwMTMgNC4yNzk2MyAxMy4xNSA1LjgwMjM3IDEzLjE1IDcuNDk5OThDMTMuMTUgNy44MzU0NiAxMy4xMjA3IDguMTY0MTEgMTMuMDY0NyA4LjQ4MzUzTDUuNTY4NzUgMTIuODExM0M1LjI2MTM4IDEyLjY5OTUgNC45NjY0NiAxMi41NjE4IDQuNjg2NjIgMTIuNDAwOEw4LjM2ODQzIDEwLjI3NTFaTTguMTgxNDkgOS4zNDM4M0w0LjgxNjU5IDYuOTM4NjhMNS41MDkxOCA2LjUzODgxTDguODA2MDQgOC45ODMyNEw4LjE4MTQ5IDkuMzQzODNaTTYuMzU4NzUgNi4wNDgzMkw2Ljk3ODIyIDUuNjkwNjdMMTAuMjc1MSA4LjEzNTA2TDkuNjU1NiA4LjQ5Mjc1TDYuMzU4NzUgNi4wNDgzMlpNOC4zMzE4IDEuOTEwNzhMMi4yNDI2MyA1LjQyNjM2QzMuMDY5NDEgMy4zMzE4OCA1LjExMTY0IDEuODQ5OTggNy40OTk5OCAxLjg0OTk4QzcuNzgyNTggMS44NDk5OCA4LjA2MDMzIDEuODcwNzIgOC4zMzE4IDEuOTEwNzhaTTYuODQ2ODQgMTMuMTEyNkM3LjA2MTE0IDEzLjEzNzMgNy4yNzkwOCAxMy4xNSA3LjQ5OTk4IDEzLjE1QzkuODI0NiAxMy4xNSAxMS44MjEzIDExLjc0NjEgMTIuNjg4NiA5LjczOTlMNi44NDY4NCAxMy4xMTI2Wk03LjQ5OTk4IDAuODQ5OTc2QzMuODI3MjggMC44NDk5NzYgMC44NDk5NzYgMy44MjcyOCAwLjg0OTk3NiA3LjQ5OTk4QzAuODQ5OTc2IDExLjE3MjcgMy44MjcyOCAxNC4xNSA3LjQ5OTk4IDE0LjE1QzExLjE3MjcgMTQuMTUgMTQuMTUgMTEuMTcyNyAxNC4xNSA3LjQ5OTk4QzE0LjE1IDMuODI3MjggMTEuMTcyNyAwLjg0OTk3NiA3LjQ5OTk4IDAuODQ5OTc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgM0MyIDIuNDQ3NzIgMi40NDc3MiAyIDMgMkgxMkMxMi41NTIzIDIgMTMgMi40NDc3MiAxMyAzVjEyQzEzIDEyLjU1MjMgMTIuNTUyMyAxMyAxMiAxM0gzQzIuNDQ3NzIgMTMgMiAxMi41NTIzIDIgMTJWM1pNMTIgM0gzVjEySDEyVjNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxGcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS40OTk5OCAwLjVDNS40OTk5OCAwLjIyMzg1OCA1LjcyMzgzIDAgNS45OTk5OCAwSDcuNDk5OThIOC45OTk5OEM5LjI3NjEyIDAgOS40OTk5OCAwLjIyMzg1OCA5LjQ5OTk4IDAuNUM5LjQ5OTk4IDAuNzc2MTQyIDkuMjc2MTIgMSA4Ljk5OTk4IDFINy45OTk5OFYyLjExOTIyQzkuMDk4MzIgMi4yMDQwOSAxMC4xMTkgMi41NjYyMiAxMC45OTIgMy4xMzU3MkMxMS4wMTE2IDMuMTA4NTEgMTEuMDMzNiAzLjA4MjUyIDExLjA1OCAzLjA1ODA2TDExLjg1OCAyLjI1ODA2QzEyLjEwMjEgMi4wMTM5OCAxMi40OTc4IDIuMDEzOTggMTIuNzQxOSAyLjI1ODA2QzEyLjk4NiAyLjUwMjE0IDEyLjk4NiAyLjg5Nzg2IDEyLjc0MTkgMy4xNDE5NEwxMS45NjcgMy45MTY4MkMxMy4xNTk1IDUuMDc5MjUgMTMuOSA2LjcwMzE0IDEzLjkgOC40OTk5OEMxMy45IDEyLjAzNDYgMTEuMDM0NiAxNC45IDcuNDk5OTggMTQuOUMzLjk2NTM1IDE0LjkgMS4wOTk5OCAxMi4wMzQ2IDEuMDk5OTggOC40OTk5OEMxLjA5OTk4IDUuMTMzNjIgMy42OTkwNCAyLjM3NDMgNi45OTk5OCAyLjExOTIyVjFINS45OTk5OEM1LjcyMzgzIDEgNS40OTk5OCAwLjc3NjE0MiA1LjQ5OTk4IDAuNVpNMi4wOTk5OCA4LjQ5OTk4QzIuMDk5OTggNS41MTc2NCA0LjUxNzY0IDMuMDk5OTggNy40OTk5OCAzLjA5OTk4QzEwLjQ4MjMgMy4wOTk5OCAxMi45IDUuNTE3NjQgMTIuOSA4LjQ5OTk4QzEyLjkgMTEuNDgyMyAxMC40ODIzIDEzLjkgNy40OTk5OCAxMy45QzQuNTE3NjQgMTMuOSAyLjA5OTk4IDExLjQ4MjMgMi4wOTk5OCA4LjQ5OTk4Wk03Ljk5OTk4IDQuNUM3Ljk5OTk4IDQuMjIzODYgNy43NzYxMiA0IDcuNDk5OTggNEM3LjIyMzgzIDQgNi45OTk5OCA0LjIyMzg2IDYuOTk5OTggNC41VjkuNUM2Ljk5OTk4IDkuNzc2MTQgNy4yMjM4MyAxMCA3LjQ5OTk4IDEwQzcuNzc2MTIgMTAgNy45OTk5OCA5Ljc3NjE0IDcuOTk5OTggOS41VjQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNC40OTk5IDAuOTk5OTkyQzE0LjIyMzcgMC45OTk5OTIgMTMuOTk5OSAxLjIyMzg1IDEzLjk5OTkgMS40OTk5OUwxMy45OTk5IDUuOTk5OTVMMC45OTk5OTIgNS45OTk5NUwwLjk5OTk5MiAxLjQ5OTk5QzAuOTk5OTkyIDEuMjIzODUgMC43NzYxMzYgMC45OTk5OTIgMC40OTk5OTYgMC45OTk5OTJDMC4yMjM4NTYgMC45OTk5OTIgLTkuNzg1MDllLTA5IDEuMjIzODUgLTIuMTg1NTZlLTA4IDEuNDk5OTlMNC4wNzI3OWUtMDcgMTMuNDk5OUMzLjk1MjA4ZS0wNyAxMy43NzYgMC4yMjM4NTUgMTMuOTk5OSAwLjQ5OTk5NiAxMy45OTk5QzAuNzc2MTM2IDEzLjk5OTkgMC45OTk5OTIgMTMuNzc2IDAuOTk5OTkyIDEzLjQ5OTlMMC45OTk5OTIgOC45OTk5MkwxMy45OTk5IDguOTk5OTJMMTMuOTk5OSAxMy40OTk5QzEzLjk5OTkgMTMuNzc2IDE0LjIyMzcgMTMuOTk5OSAxNC40OTk5IDEzLjk5OTlDMTQuNzc2IDEzLjk5OTkgMTQuOTk5OSAxMy43NzYgMTQuOTk5OSAxMy40OTk5TDE0Ljk5OTkgMS40OTk5OUMxNC45OTk5IDEuMjIzODUgMTQuNzc2IDAuOTk5OTkyIDE0LjQ5OTkgMC45OTk5OTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxVcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC45OTk4NzggMC41QzAuOTk5ODc4IDAuMjIzODU4IDEuMjIzNzQgMCAxLjQ5OTg4IDBIMTMuNDk5OUMxMy43NzYgMCAxMy45OTk5IDAuMjIzODU4IDEzLjk5OTkgMC41QzEzLjk5OTkgMC43NzYxNDIgMTMuNzc2IDEgMTMuNDk5OSAxSDZIMS40OTk4OEMxLjIyMzc0IDEgMC45OTk4NzggMC43NzYxNDIgMC45OTk4NzggMC41Wk05IDE0VjFMNiAxVjE0SDEuNDk5ODhDMS4yMjM3NCAxNCAwLjk5OTg3OCAxNC4yMjM5IDAuOTk5ODc4IDE0LjVDMC45OTk4NzggMTQuNzc2MSAxLjIyMzc0IDE1IDEuNDk5ODggMTVIMTMuNDk5OUMxMy43NzYgMTUgMTMuOTk5OSAxNC43NzYxIDEzLjk5OTkgMTQuNUMxMy45OTk5IDE0LjIyMzkgMTMuNzc2IDE0IDEzLjQ5OTkgMTRIOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHpyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjAwMDAzIDMuMjVDNS4wMDAwMyAyLjk3Mzg2IDQuNzc2MTcgMi43NSA0LjUwMDAzIDIuNzVDNC4yMjM4OSAyLjc1IDQuMDAwMDMgMi45NzM4NiA0LjAwMDAzIDMuMjVWNy4xMDAwM0gyLjQ5OTk4QzIuMjc5MDYgNy4xMDAwMyAyLjA5OTk4IDcuMjc5MTIgMi4wOTk5OCA3LjUwMDAzQzIuMDk5OTggNy43MjA5NCAyLjI3OTA2IDcuOTAwMDMgMi40OTk5OCA3LjkwMDAzSDQuMDAwMDNWOC41NUM0LjAwMDAzIDEwLjQ4MyA1LjU2NzAzIDEyLjA1IDcuNTAwMDMgMTIuMDVDOS40MzMwMyAxMi4wNSAxMSAxMC40ODMgMTEgOC41NVY3LjkwMDAzSDEyLjVDMTIuNzIwOSA3LjkwMDAzIDEyLjkgNy43MjA5NCAxMi45IDcuNTAwMDNDMTIuOSA3LjI3OTEyIDEyLjcyMDkgNy4xMDAwMyAxMi41IDcuMTAwMDNIMTFWMy4yNUMxMSAyLjk3Mzg2IDEwLjc3NjIgMi43NSAxMC41IDIuNzVDMTAuMjIzOSAyLjc1IDEwIDIuOTczODYgMTAgMy4yNVY3LjEwMDAzSDUuMDAwMDNWMy4yNVpNNS4wMDAwMyA3LjkwMDAzVjguNTVDNS4wMDAwMyA5LjkzMDcxIDYuMTE5MzIgMTEuMDUgNy41MDAwMyAxMS4wNUM4Ljg4MDc0IDExLjA1IDEwIDkuOTMwNzEgMTAgOC41NVY3LjkwMDAzSDUuMDAwMDNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxHcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDBDNy43NzYxNCAwIDggMC4yMjM4NTggOCAwLjVWMi41QzggMi43NzYxNCA3Ljc3NjE0IDMgNy41IDNDNy4yMjM4NiAzIDcgMi43NzYxNCA3IDIuNVYwLjVDNyAwLjIyMzg1OCA3LjIyMzg2IDAgNy41IDBaTTIuMTk2NyAyLjE5NjdDMi4zOTE5NiAyLjAwMTQ0IDIuNzA4NTQgMi4wMDE0NCAyLjkwMzgxIDIuMTk2N0w0LjMxODAyIDMuNjEwOTFDNC41MTMyOCAzLjgwNjE3IDQuNTEzMjggNC4xMjI3NiA0LjMxODAyIDQuMzE4MDJDNC4xMjI3NiA0LjUxMzI4IDMuODA2MTcgNC41MTMyOCAzLjYxMDkxIDQuMzE4MDJMMi4xOTY3IDIuOTAzODFDMi4wMDE0NCAyLjcwODU0IDIuMDAxNDQgMi4zOTE5NiAyLjE5NjcgMi4xOTY3Wk0wLjUgN0MwLjIyMzg1OCA3IDAgNy4yMjM4NiAwIDcuNUMwIDcuNzc2MTQgMC4yMjM4NTggOCAwLjUgOEgyLjVDMi43NzYxNCA4IDMgNy43NzYxNCAzIDcuNUMzIDcuMjIzODYgMi43NzYxNCA3IDIuNSA3SDAuNVpNMi4xOTY3IDEyLjgwMzNDMi4wMDE0NCAxMi42MDggMi4wMDE0NCAxMi4yOTE1IDIuMTk2NyAxMi4wOTYyTDMuNjEwOTEgMTAuNjgyQzMuODA2MTcgMTAuNDg2NyA0LjEyMjc2IDEwLjQ4NjcgNC4zMTgwMiAxMC42ODJDNC41MTMyOCAxMC44NzcyIDQuNTEzMjggMTEuMTkzOCA0LjMxODAyIDExLjM4OTFMMi45MDM4MSAxMi44MDMzQzIuNzA4NTQgMTIuOTk4NiAyLjM5MTk2IDEyLjk5ODYgMi4xOTY3IDEyLjgwMzNaTTEyLjUgN0MxMi4yMjM5IDcgMTIgNy4yMjM4NiAxMiA3LjVDMTIgNy43NzYxNCAxMi4yMjM5IDggMTIuNSA4SDE0LjVDMTQuNzc2MSA4IDE1IDcuNzc2MTQgMTUgNy41QzE1IDcuMjIzODYgMTQuNzc2MSA3IDE0LjUgN0gxMi41Wk0xMC42ODIgNC4zMTgwMkMxMC40ODY3IDQuMTIyNzYgMTAuNDg2NyAzLjgwNjE3IDEwLjY4MiAzLjYxMDkxTDEyLjA5NjIgMi4xOTY3QzEyLjI5MTUgMi4wMDE0NCAxMi42MDggMi4wMDE0NCAxMi44MDMzIDIuMTk2N0MxMi45OTg2IDIuMzkxOTYgMTIuOTk4NiAyLjcwODU0IDEyLjgwMzMgMi45MDM4MUwxMS4zODkxIDQuMzE4MDJDMTEuMTkzOCA0LjUxMzI4IDEwLjg3NzIgNC41MTMyOCAxMC42ODIgNC4zMTgwMlpNOCAxMi41QzggMTIuMjIzOSA3Ljc3NjE0IDEyIDcuNSAxMkM3LjIyMzg2IDEyIDcgMTIuMjIzOSA3IDEyLjVWMTQuNUM3IDE0Ljc3NjEgNy4yMjM4NiAxNSA3LjUgMTVDNy43NzYxNCAxNSA4IDE0Ljc3NjEgOCAxNC41VjEyLjVaTTEwLjY4MiAxMC42ODJDMTAuODc3MiAxMC40ODY3IDExLjE5MzggMTAuNDg2NyAxMS4zODkxIDEwLjY4MkwxMi44MDMzIDEyLjA5NjJDMTIuOTk4NiAxMi4yOTE1IDEyLjk5ODYgMTIuNjA4IDEyLjgwMzMgMTIuODAzM0MxMi42MDggMTIuOTk4NiAxMi4yOTE1IDEyLjk5ODYgMTIuMDk2MiAxMi44MDMzTDEwLjY4MiAxMS4zODkxQzEwLjQ4NjcgMTEuMTkzOCAxMC40ODY3IDEwLjg3NzIgMTAuNjgyIDEwLjY4MlpNNS41IDcuNUM1LjUgNi4zOTU0MyA2LjM5NTQzIDUuNSA3LjUgNS41QzguNjA0NTcgNS41IDkuNSA2LjM5NTQzIDkuNSA3LjVDOS41IDguNjA0NTcgOC42MDQ1NyA5LjUgNy41IDkuNUM2LjM5NTQzIDkuNSA1LjUgOC42MDQ1NyA1LjUgNy41Wk03LjUgNC41QzUuODQzMTUgNC41IDQuNSA1Ljg0MzE1IDQuNSA3LjVDNC41IDkuMTU2ODUgNS44NDMxNSAxMC41IDcuNSAxMC41QzkuMTU2ODUgMTAuNSAxMC41IDkuMTU2ODUgMTAuNSA3LjVDMTAuNSA1Ljg0MzE1IDkuMTU2ODUgNC41IDcuNSA0LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxLcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuNSA0QzguNTY3IDQgNyA1LjU2NyA3IDcuNUM3IDkuNDMzIDguNTY3IDExIDEwLjUgMTFDMTIuNDMzIDExIDE0IDkuNDMzIDE0IDcuNUMxNCA1LjU2NyAxMi40MzMgNCAxMC41IDRaTTcuNjcxMzMgMTFDNi42NTE4MyAxMC4xNzUgNiA4LjkxMzYzIDYgNy41QzYgNi4wODYzNyA2LjY1MTgzIDQuODI0OTggNy42NzEzMyA0SDQuNUMyLjU2NyA0IDEgNS41NjcgMSA3LjVDMSA5LjQzMyAyLjU2NyAxMSA0LjUgMTFINy42NzEzM1pNMCA3LjVDMCA1LjAxNDcyIDIuMDE0NzIgMyA0LjUgM0gxMC41QzEyLjk4NTMgMyAxNSA1LjAxNDcyIDE1IDcuNUMxNSA5Ljk4NTI4IDEyLjk4NTMgMTIgMTAuNSAxMkg0LjVDMi4wMTQ3MiAxMiAwIDkuOTg1MjggMCA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxxcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS45MDMyMSA3LjI5Njc3QzEuOTAzMjEgMTAuMzQxIDQuMTEwNDEgMTIuNDE0NyA2LjU4ODkzIDEyLjg0MzlDNi44NzI1NSAxMi44OTMgNy4wNjI2NiAxMy4xNjI3IDcuMDEzNTUgMTMuNDQ2NEM2Ljk2NDQ0IDEzLjczIDYuNjk0NzEgMTMuOTIwMSA2LjQxMTA5IDEzLjg3MUMzLjQ5OTQyIDEzLjM2NjggMC44NjA4NCAxMC45MTI3IDAuODYwODQgNy4yOTY3N0MwLjg2MDgzOSA1Ljc2MDA5IDEuNTU5OTYgNC41NTI0NSAyLjM3NjM5IDMuNjMzNzdDMi45NjEyNCAyLjk3NTY4IDMuNjMwMzQgMi40NDEzNSA0LjE2ODQ2IDIuMDMyMDJMMi41MzIwNSAyLjAzMjAyQzIuMjU1OTEgMi4wMzIwMiAyLjAzMjA1IDEuODA4MTYgMi4wMzIwNSAxLjUzMjAyQzIuMDMyMDUgMS4yNTU4OCAyLjI1NTkxIDEuMDMyMDIgMi41MzIwNSAxLjAzMjAyTDUuNTMyMDUgMS4wMzIwMkM1LjgwODE5IDEuMDMyMDIgNi4wMzIwNSAxLjI1NTg4IDYuMDMyMDUgMS41MzIwMkw2LjAzMjA1IDQuNTMyMDJDNi4wMzIwNSA0LjgwODE2IDUuODA4MTkgNS4wMzIwMiA1LjUzMjA1IDUuMDMyMDJDNS4yNTU5MSA1LjAzMjAyIDUuMDMyMDUgNC44MDgxNiA1LjAzMjA1IDQuNTMyMDJMNS4wMzIwNSAyLjY4NjQ1TDUuMDMwNTQgMi42ODc1OUw1LjAzMDQ1IDIuNjg3NjZMNS4wMzA0NCAyLjY4NzY3TDUuMDMwNDMgMi42ODc2N0M0LjQ1ODk2IDMuMTE4NjggMy43NjA1OSAzLjY0NTM4IDMuMTU1NTQgNC4zMjYyQzIuNDQxMDIgNS4xMzAyMSAxLjkwMzIxIDYuMTAxNTQgMS45MDMyMSA3LjI5Njc3Wk0xMy4wMTA5IDcuNzAzMjFDMTMuMDEwOSA0LjY5MTE1IDEwLjg1MDUgMi42Mjk2IDguNDAzODQgMi4xNzAyOUM4LjEyMDkzIDIuMTE3MTggNy45MzQ2NSAxLjg0NDc5IDcuOTg3NzYgMS41NjE4OEM4LjA0MDg3IDEuMjc4OTggOC4zMTMyNiAxLjA5MjcgOC41OTYxNiAxLjE0NTgxQzExLjQ3MDQgMS42ODU0MSAxNC4wNTMyIDQuMTI2MDUgMTQuMDUzMiA3LjcwMzIxQzE0LjA1MzIgOS4yMzk4OCAxMy4zNTQxIDEwLjQ0NzUgMTIuNTM3NyAxMS4zNjYyQzExLjk1MjggMTIuMDI0MyAxMS4yODM3IDEyLjU1ODYgMTAuNzQ1NiAxMi45NjhMMTIuMzgyMSAxMi45NjhDMTIuNjU4MiAxMi45NjggMTIuODgyMSAxMy4xOTE4IDEyLjg4MjEgMTMuNDY4QzEyLjg4MjEgMTMuNzQ0MSAxMi42NTgyIDEzLjk2OCAxMi4zODIxIDEzLjk2OEw5LjM4MjA1IDEzLjk2OEM5LjEwNTkxIDEzLjk2OCA4Ljg4MjA1IDEzLjc0NDEgOC44ODIwNSAxMy40NjhMOC44ODIwNSAxMC40NjhDOC44ODIwNSAxMC4xOTE4IDkuMTA1OTEgOS45Njc5NiA5LjM4MjA1IDkuOTY3OTZDOS42NTgxOSA5Ljk2Nzk2IDkuODgyMDUgMTAuMTkxOCA5Ljg4MjA1IDEwLjQ2OEw5Ljg4MjA1IDEyLjMxMzVMOS44ODM2MiAxMi4zMTIzQzEwLjQ1NTEgMTEuODgxMyAxMS4xNTM1IDExLjM1NDYgMTEuNzU4NSAxMC42NzM4QzEyLjQ3MzEgOS44Njk3NiAxMy4wMTA5IDguODk4NDQgMTMuMDEwOSA3LjcwMzIxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTggMkgxMi41QzEyLjc3NjEgMiAxMyAyLjIyMzg2IDEzIDIuNVY1SDhWMlpNNyA1VjJIMi41QzIuMjIzODYgMiAyIDIuMjIzODYgMiAyLjVWNUg3Wk0yIDZWOUg3VjZIMlpNOCA2SDEzVjlIOFY2Wk04IDEwSDEzVjEyLjVDMTMgMTIuNzc2MSAxMi43NzYxIDEzIDEyLjUgMTNIOFYxMFpNMiAxMi41VjEwSDdWMTNIMi41QzIuMjIzODYgMTMgMiAxMi43NzYxIDIgMTIuNVpNMSAyLjVDMSAxLjY3MTU3IDEuNjcxNTcgMSAyLjUgMUgxMi41QzEzLjMyODQgMSAxNCAxLjY3MTU3IDE0IDIuNVYxMi41QzE0IDEzLjMyODQgMTMuMzI4NCAxNCAxMi41IDE0SDIuNUMxLjY3MTU3IDE0IDEgMTMuMzI4NCAxIDEyLjVWMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuOTAwMDI0IDcuNTAwMDJDMC45MDAwMjQgMy44NTQ5NSAzLjg1NDk1IDAuOTAwMDI0IDcuNTAwMDIgMC45MDAwMjRDMTEuMTQ1MSAwLjkwMDAyNCAxNC4xIDMuODU0OTUgMTQuMSA3LjUwMDAyQzE0LjEgMTEuMTQ1MSAxMS4xNDUxIDE0LjEgNy41MDAwMiAxNC4xQzMuODU0OTUgMTQuMSAwLjkwMDAyNCAxMS4xNDUxIDAuOTAwMDI0IDcuNTAwMDJaTTcuNTAwMDIgMS44MDAwMkM0LjM1MjAxIDEuODAwMDIgMS44MDAwMiA0LjM1MjAxIDEuODAwMDIgNy41MDAwMkMxLjgwMDAyIDEwLjY0OCA0LjM1MjAxIDEzLjIgNy41MDAwMiAxMy4yQzEwLjY0OCAxMy4yIDEzLjIgMTAuNjQ4IDEzLjIgNy41MDAwMkMxMy4yIDQuMzUyMDEgMTAuNjQ4IDEuODAwMDIgNy41MDAwMiAxLjgwMDAyWk0zLjA3NTA0IDcuNTAwMDJDMy4wNzUwNCA1LjA1NjE3IDUuMDU2MTggMy4wNzUwMiA3LjUwMDA0IDMuMDc1MDJDOS45NDM4OCAzLjA3NTAyIDExLjkyNSA1LjA1NjE3IDExLjkyNSA3LjUwMDAyQzExLjkyNSA5Ljk0Mzg2IDkuOTQzODggMTEuOTI1IDcuNTAwMDQgMTEuOTI1QzUuMDU2MTggMTEuOTI1IDMuMDc1MDQgOS45NDM4NiAzLjA3NTA0IDcuNTAwMDJaTTcuNTAwMDQgMy45MjUwMkM1LjUyNTYyIDMuOTI1MDIgMy45MjUwNCA1LjUyNTYxIDMuOTI1MDQgNy41MDAwMkMzLjkyNTA0IDkuNDc0NDIgNS41MjU2MyAxMS4wNzUgNy41MDAwNCAxMS4wNzVDOS40NzQ0NCAxMS4wNzUgMTEuMDc1IDkuNDc0NDIgMTEuMDc1IDcuNTAwMDJDMTEuMDc1IDUuNTI1NjEgOS40NzQ0NCAzLjkyNTAyIDcuNTAwMDQgMy45MjUwMlpNNy41MDAwNCA1LjI1MDAyQzYuMjU3NCA1LjI1MDAyIDUuMjUwMDQgNi4yNTczOSA1LjI1MDA0IDcuNTAwMDJDNS4yNTAwNCA4Ljc0MjY2IDYuMjU3NCA5Ljc1MDAyIDcuNTAwMDQgOS43NTAwMkM4Ljc0MjY3IDkuNzUwMDIgOS43NTAwNCA4Ljc0MjY2IDkuNzUwMDQgNy41MDAwMkM5Ljc1MDA0IDYuMjU3MzggOC43NDI2NyA1LjI1MDAyIDcuNTAwMDQgNS4yNTAwMlpNNi4wNTAwNCA3LjUwMDAyQzYuMDUwMDQgNi42OTkyMSA2LjY5OTIzIDYuMDUwMDIgNy41MDAwNCA2LjA1MDAyQzguMzAwODQgNi4wNTAwMiA4Ljk1MDA0IDYuNjk5MjEgOC45NTAwNCA3LjUwMDAyQzguOTUwMDQgOC4zMDA4MyA4LjMwMDg0IDguOTUwMDIgNy41MDAwNCA4Ljk1MDAyQzYuNjk5MjMgOC45NTAwMiA2LjA1MDA0IDguMzAwODMgNi4wNTAwNCA3LjUwMDAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuOTQ5OTMgMi45NTAwMkwzLjk0OTkzIDQuNDk5OThDMy45NDk5MyA0Ljc0ODUxIDMuNzQ4NDUgNC45NDk5OCAzLjQ5OTkzIDQuOTQ5OThDMy4yNTE0IDQuOTQ5OTggMy4wNDk5MyA0Ljc0ODUxIDMuMDQ5OTMgNC40OTk5OFYyLjUwMDA0QzMuMDQ5OTMgMi40NTI0NiAzLjA1NzMxIDIuNDA2NjEgMy4wNzA5OSAyLjM2MzU3QzMuMTI4NzggMi4xODE3NSAzLjI5ODk3IDIuMDUwMDIgMy40OTk5MyAyLjA1MDAySDExLjQ5OTlDMTEuNjU1MyAyLjA1MDAyIDExLjc5MjIgMi4xMjg3MiAxMS44NzMxIDIuMjQ4NDJDMTEuOTIxNiAyLjMyMDI0IDExLjk0OTkgMi40MDY4MiAxMS45NDk5IDIuNTAwMDJMMTEuOTQ5OSAyLjUwMDA0VjQuNDk5OThDMTEuOTQ5OSA0Ljc0ODUxIDExLjc0ODUgNC45NDk5OCAxMS40OTk5IDQuOTQ5OThDMTEuMjUxNCA0Ljk0OTk4IDExLjA0OTkgNC43NDg1MSAxMS4wNDk5IDQuNDk5OThWMi45NTAwMkg4LjA0OTkzVjEyLjA1SDkuMjU0MjhDOS41MDI4MSAxMi4wNSA5LjcwNDI4IDEyLjI1MTUgOS43MDQyOCAxMi41QzkuNzA0MjggMTIuNzQ4NiA5LjUwMjgxIDEyLjk1IDkuMjU0MjggMTIuOTVINS43NTQyOEM1LjUwNTc1IDEyLjk1IDUuMzA0MjggMTIuNzQ4NiA1LjMwNDI4IDEyLjVDNS4zMDQyOCAxMi4yNTE1IDUuNTA1NzUgMTIuMDUgNS43NTQyOCAxMi4wNUg2Ljk0OTkzVjIuOTUwMDJIMy45NDk5M1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFFyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDQuNUMyIDQuMjIzODYgMi4yMjM4NiA0IDIuNSA0SDEyLjVDMTIuNzc2MSA0IDEzIDQuMjIzODYgMTMgNC41QzEzIDQuNzc2MTQgMTIuNzc2MSA1IDEyLjUgNUgyLjVDMi4yMjM4NiA1IDIgNC43NzYxNCAyIDQuNVpNNCA3LjVDNCA3LjIyMzg2IDQuMjIzODYgNyA0LjUgN0gxMC41QzEwLjc3NjEgNyAxMSA3LjIyMzg2IDExIDcuNUMxMSA3Ljc3NjE0IDEwLjc3NjEgOCAxMC41IDhINC41QzQuMjIzODYgOCA0IDcuNzc2MTQgNCA3LjVaTTMgMTAuNUMzIDEwLjIyMzkgMy4yMjM4NiAxMCAzLjUgMTBIMTEuNUMxMS43NzYxIDEwIDEyIDEwLjIyMzkgMTIgMTAuNUMxMiAxMC43NzYxIDExLjc3NjEgMTEgMTEuNSAxMUgzLjVDMy4yMjM4NiAxMSAzIDEwLjc3NjEgMyAxMC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuNSA0QzIuMjIzODYgNCAyIDQuMjIzODYgMiA0LjVDMiA0Ljc3NjE0IDIuMjIzODYgNSAyLjUgNUgxMi41QzEyLjc3NjEgNSAxMyA0Ljc3NjE0IDEzIDQuNUMxMyA0LjIyMzg2IDEyLjc3NjEgNCAxMi41IDRIMi41Wk0yIDcuNUMyIDcuMjIzODYgMi4yMjM4NiA3IDIuNSA3SDEyLjVDMTIuNzc2MSA3IDEzIDcuMjIzODYgMTMgNy41QzEzIDcuNzc2MTQgMTIuNzc2MSA4IDEyLjUgOEgyLjVDMi4yMjM4NiA4IDIgNy43NzYxNCAyIDcuNVpNMiAxMC41QzIgMTAuMjIzOSAyLjIyMzg2IDEwIDIuNSAxMEgxMi41QzEyLjc3NjEgMTAgMTMgMTAuMjIzOSAxMyAxMC41QzEzIDEwLjc3NjEgMTIuNzc2MSAxMSAxMi41IDExSDIuNUMyLjIyMzg2IDExIDIgMTAuNzc2MSAyIDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx0bz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiA0LjVDMiA0LjIyMzg2IDIuMjIzODYgNCAyLjUgNEgxMi41QzEyLjc3NjEgNCAxMyA0LjIyMzg2IDEzIDQuNUMxMyA0Ljc3NjE0IDEyLjc3NjEgNSAxMi41IDVIMi41QzIuMjIzODYgNSAyIDQuNzc2MTQgMiA0LjVaTTIgNy41QzIgNy4yMjM4NiAyLjIyMzg2IDcgMi41IDdINy41QzcuNzc2MTQgNyA4IDcuMjIzODYgOCA3LjVDOCA3Ljc3NjE0IDcuNzc2MTQgOCA3LjUgOEgyLjVDMi4yMjM4NiA4IDIgNy43NzYxNCAyIDcuNVpNMiAxMC41QzIgMTAuMjIzOSAyLjIyMzg2IDEwIDIuNSAxMEgxMC41QzEwLjc3NjEgMTAgMTEgMTAuMjIzOSAxMSAxMC41QzExIDEwLjc3NjEgMTAuNzc2MSAxMSAxMC41IDExSDIuNUMyLjIyMzg2IDExIDIgMTAuNzc2MSAyIDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxubz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiA0LjVDMiA0LjIyMzg2IDIuMjIzODYgNCAyLjUgNEgxMi41QzEyLjc3NjEgNCAxMyA0LjIyMzg2IDEzIDQuNUMxMyA0Ljc3NjE0IDEyLjc3NjEgNSAxMi41IDVIMi41QzIuMjIzODYgNSAyIDQuNzc2MTQgMiA0LjVaTTcgNy41QzcgNy4yMjM4NiA3LjIyMzg2IDcgNy41IDdIMTIuNUMxMi43NzYxIDcgMTMgNy4yMjM4NiAxMyA3LjVDMTMgNy43NzYxNCAxMi43NzYxIDggMTIuNSA4SDcuNUM3LjIyMzg2IDggNyA3Ljc3NjE0IDcgNy41Wk00IDEwLjVDNCAxMC4yMjM5IDQuMjIzODYgMTAgNC41IDEwSDEyLjVDMTIuNzc2MSAxMCAxMyAxMC4yMjM5IDEzIDEwLjVDMTMgMTAuNzc2MSAxMi43NzYxIDExIDEyLjUgMTFINC41QzQuMjIzODYgMTEgNCAxMC43NzYxIDQgMTAuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHJvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy4zNTM2IDIuMzUzNTVDMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMS44NDE3MSAxMy4zNTM2IDEuNjQ2NDVDMTMuMTU4MyAxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMi42NDY0IDEuNjQ2NDVMMTEuOTI5MSAyLjM2MzgzQzExLjkxNTkgMi4zMjI0NiAxMS44OTcgMi4yODM2OCAxMS44NzMyIDIuMjQ4NDVDMTEuNzkyMyAyLjEyODc1IDExLjY1NTQgMi4wNTAwNSAxMS41MDAxIDIuMDUwMDVIMy41MDAwNUMzLjI5OTA5IDIuMDUwMDUgMy4xMjg5IDIuMTgxNzggMy4wNzExMSAyLjM2MzZDMy4wNTc0MyAyLjQwNjY1IDMuMDUwMDUgMi40NTI0OSAzLjA1MDA1IDIuNTAwMDdWNC41MDAwMUMzLjA1MDA1IDQuNzQ4NTQgMy4yNTE1MiA0Ljk1MDAxIDMuNTAwMDUgNC45NTAwMUMzLjc0ODU4IDQuOTUwMDEgMy45NTAwNSA0Ljc0ODU0IDMuOTUwMDUgNC41MDAwMVYyLjk1MDA1SDYuOTUwMDZWNy4zNDI4NEwxLjY0NjQ1IDEyLjY0NjRDMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTMuMTU4MyAxLjY0NjQ1IDEzLjM1MzZDMS44NDE3MSAxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAyLjM1MzU1IDEzLjM1MzZMNi45NTAwNiA4Ljc1NzA1VjEyLjA1MDFINS43NTQ0QzUuNTA1ODcgMTIuMDUwMSA1LjMwNDQgMTIuMjUxNSA1LjMwNDQgMTIuNTAwMUM1LjMwNDQgMTIuNzQ4NiA1LjUwNTg3IDEyLjk1MDEgNS43NTQ0IDEyLjk1MDFIOS4yNTQ0QzkuNTAyOTMgMTIuOTUwMSA5LjcwNDQgMTIuNzQ4NiA5LjcwNDQgMTIuNTAwMUM5LjcwNDQgMTIuMjUxNSA5LjUwMjkzIDEyLjA1MDEgOS4yNTQ0IDEyLjA1MDFIOC4wNTAwNlY3LjY1NzA1TDEzLjM1MzYgMi4zNTM1NVpNOC4wNTAwNiA2LjI0Mjg0TDExLjA1MDEgMy4yNDI4M1YyLjk1MDA1SDguMDUwMDZWNi4yNDI4NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG9vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01IDMuNUM1IDMuMjIzODYgNS4yMjM4NiAzIDUuNSAzSDkuNUM5Ljc3NjE0IDMgMTAgMy4yMjM4NiAxMCAzLjVWNkgxMi41QzEyLjY4NzMgNiAxMi44NTg5IDYuMTA0NjcgMTIuOTQ0NiA2LjI3MTIxQzEzLjAzMDMgNi40Mzc3NCAxMy4wMTU3IDYuNjM4MjEgMTIuOTA2OSA2Ljc5MDYyTDcuOTA2ODcgMTMuNzkwNkM3LjgxMzAxIDEzLjkyMiA3LjY2MTQ4IDE0IDcuNSAxNEM3LjMzODUzIDE0IDcuMTg2OTkgMTMuOTIyIDcuMDkzMTQgMTMuNzkwNkwyLjA5MzE0IDYuNzkwNjJDMS45ODQyNyA2LjYzODIxIDEuOTY5NzIgNi40Mzc3NCAyLjA1NTQyIDYuMjcxMjFDMi4xNDExMiA2LjEwNDY3IDIuMzEyNzEgNiAyLjUgNkg1VjMuNVpNNiA0VjYuNUM2IDYuNzc2MTQgNS43NzYxNCA3IDUuNSA3SDMuNDcxNkw3LjUgMTIuNjM5OEwxMS41Mjg0IDdIOS41QzkuMjIzODYgNyA5IDYuNzc2MTQgOSA2LjVWNEg2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sYW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgNy41QzEgNy42NjE0OCAxLjA3Nzk4IDcuODEzMDEgMS4yMDkzOCA3LjkwNjg3TDguMjA5MzggMTIuOTA2OUM4LjM2MTc5IDEzLjAxNTcgOC41NjIyNiAxMy4wMzAzIDguNzI4NzkgMTIuOTQ0NkM4Ljg5NTMzIDEyLjg1ODkgOSAxMi42ODczIDkgMTIuNUw5IDEwTDExLjUgMTBDMTEuNzc2MSAxMCAxMiA5Ljc3NjE0IDEyIDkuNUwxMiA1LjVDMTIgNS4yMjM4NiAxMS43NzYxIDUgMTEuNSA1TDkgNUw5IDIuNUM5IDIuMzEyNzEgOC44OTUzMyAyLjE0MTEyIDguNzI4NzkgMi4wNTU0MkM4LjU2MjI2IDEuOTY5NzIgOC4zNjE3OSAxLjk4NDI3IDguMjA5MzggMi4wOTMxM0wxLjIwOTM4IDcuMDkzMTRDMS4wNzc5OCA3LjE4Njk5IDEgNy4zMzg1MyAxIDcuNVpNOCAzLjQ3MTZMOCA1LjVDOCA1Ljc3NjE0IDguMjIzODYgNiA4LjUgNkwxMSA2TDExIDlMOC41IDlDOC4yMjM4NiA5IDggOS4yMjM4NiA4IDkuNUw4IDExLjUyODRMMi4zNjAyMyA3LjVMOCAzLjQ3MTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxpbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQgNy41QzE0IDcuNjYxNDggMTMuOTIyIDcuODEzMDEgMTMuNzkwNiA3LjkwNjg3TDYuNzkwNjIgMTIuOTA2OUM2LjYzODIxIDEzLjAxNTcgNi40Mzc3NCAxMy4wMzAzIDYuMjcxMjEgMTIuOTQ0NkM2LjEwNDY3IDEyLjg1ODkgNiAxMi42ODczIDYgMTIuNUw2IDEwTDMuNSAxMEMzLjIyMzg2IDEwIDMgOS43NzYxNCAzIDkuNUwzIDUuNUMzIDUuMjIzODYgMy4yMjM4NiA1IDMuNSA1TDYgNUw2IDIuNUM2IDIuMzEyNzEgNi4xMDQ2NyAyLjE0MTEyIDYuMjcxMjEgMi4wNTU0MkM2LjQzNzc0IDEuOTY5NzIgNi42MzgyMSAxLjk4NDI3IDYuNzkwNjIgMi4wOTMxM0wxMy43OTA2IDcuMDkzMTRDMTMuOTIyIDcuMTg2OTkgMTQgNy4zMzg1MyAxNCA3LjVaTTcgMy40NzE2TDcgNS41QzcgNS43NzYxNCA2Ljc3NjE0IDYgNi41IDZMNCA2TDQgOUw2LjUgOUM2Ljc3NjE0IDkgNyA5LjIyMzg2IDcgOS41TDcgMTEuNTI4NEwxMi42Mzk4IDcuNUw3IDMuNDcxNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGxvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMUM3LjY2MTQ4IDEgNy44MTMwMSAxLjA3Nzk4IDcuOTA2ODcgMS4yMDkzOEwxMi45MDY5IDguMjA5MzhDMTMuMDE1NyA4LjM2MTc5IDEzLjAzMDMgOC41NjIyNiAxMi45NDQ2IDguNzI4NzlDMTIuODU4OSA4Ljg5NTMzIDEyLjY4NzMgOSAxMi41IDlIMTBWMTEuNUMxMCAxMS43NzYxIDkuNzc2MTQgMTIgOS41IDEySDUuNUM1LjIyMzg2IDEyIDUgMTEuNzc2MSA1IDExLjVWOUgyLjVDMi4zMTI3MSA5IDIuMTQxMTIgOC44OTUzMyAyLjA1NTQyIDguNzI4NzlDMS45Njk3MiA4LjU2MjI2IDEuOTg0MjcgOC4zNjE3OSAyLjA5MzE0IDguMjA5MzhMNy4wOTMxNCAxLjIwOTM4QzcuMTg2OTkgMS4wNzc5OCA3LjMzODUzIDEgNy41IDFaTTMuNDcxNiA4SDUuNUM1Ljc3NjE0IDggNiA4LjIyMzg2IDYgOC41VjExSDlWOC41QzkgOC4yMjM4NiA5LjIyMzg2IDggOS41IDhIMTEuNTI4NEw3LjUgMi4zNjAyM0wzLjQ3MTYgOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHNvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTk4IDAuODQ5OTc2QzcuMjIzODMgMC44NDk5NzYgNi45OTk5OCAxLjA3MzgzIDYuOTk5OTggMS4zNDk5OFYzLjUyMjM0QzYuOTk5OTggMy43OTg0OCA3LjIyMzgzIDQuMDIyMzQgNy40OTk5OCA0LjAyMjM0QzcuNzc2MTIgNC4wMjIzNCA3Ljk5OTk4IDMuNzk4NDggNy45OTk5OCAzLjUyMjM0VjEuODcxOEMxMC44ODYyIDIuMTI0ODggMTMuMTUgNC41NDgwNiAxMy4xNSA3LjQ5OTk4QzEzLjE1IDEwLjYyMDQgMTAuNjIwNCAxMy4xNSA3LjQ5OTk4IDEzLjE1QzQuMzc5NTcgMTMuMTUgMS44NDk5OCAxMC42MjA0IDEuODQ5OTggNy40OTk5OEMxLjg0OTk4IDYuMTA2MTIgMi4zNTQwNyA0LjgzMTI4IDMuMTkwNDkgMy44NDU5QzMuMzY5MTkgMy42MzUzOCAzLjM0MzM5IDMuMzE5ODUgMy4xMzI4NiAzLjE0MTE1QzIuOTIyMzQgMi45NjI0NSAyLjYwNjgxIDIuOTg4MjUgMi40MjgxMSAzLjE5ODc3QzEuNDQ0MDUgNC4zNTgwOCAwLjg0OTk3NiA1Ljg2MDI5IDAuODQ5OTc2IDcuNDk5OThDMC44NDk5NzYgMTEuMTcyNyAzLjgyNzI4IDE0LjE1IDcuNDk5OTggMTQuMTVDMTEuMTcyNyAxNC4xNSAxNC4xNSAxMS4xNzI3IDE0LjE1IDcuNDk5OThDMTQuMTUgMy44MjcyOCAxMS4xNzI3IDAuODQ5OTc2IDcuNDk5OTggMC44NDk5NzZaTTYuNzQwNDkgOC4wODA3Mkw0LjIyMzYzIDQuNTcyMzdDNC4xNTIzMSA0LjQ3Mjk1IDQuMTYzNDYgNC4zMzY1MiA0LjI0OTk4IDQuMjVDNC4zMzY0OSA0LjE2MzQ4IDQuNDcyOTMgNC4xNTIzMyA0LjU3MjM0IDQuMjIzNjVMOC4wODA2OSA2Ljc0MDUxQzguNTYyMjcgNy4wODU5OSA4LjYxOTA2IDcuNzgwOTEgOC4xOTk5OCA4LjJDNy43ODA4OSA4LjYxOTA5IDcuMDg1OTcgOC41NjIyOSA2Ljc0MDQ5IDguMDgwNzJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxjbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41IDJDMy4xMTkyOSAyIDIgMy4xMTkyOSAyIDQuNUMyIDUuODgwNzIgMy4xMTkyOSA3IDQuNSA3QzUuODgwNzIgNyA3IDUuODgwNzIgNyA0LjVDNyAzLjExOTI5IDUuODgwNzIgMiA0LjUgMlpNMyA0LjVDMyAzLjY3MTU3IDMuNjcxNTcgMyA0LjUgM0M1LjMyODQzIDMgNiAzLjY3MTU3IDYgNC41QzYgNS4zMjg0MyA1LjMyODQzIDYgNC41IDZDMy42NzE1NyA2IDMgNS4zMjg0MyAzIDQuNVpNMTAuNSAyQzkuMTE5MjkgMiA4IDMuMTE5MjkgOCA0LjVDOCA1Ljg4MDcyIDkuMTE5MjkgNyAxMC41IDdDMTEuODgwNyA3IDEzIDUuODgwNzIgMTMgNC41QzEzIDMuMTE5MjkgMTEuODgwNyAyIDEwLjUgMlpNOSA0LjVDOSAzLjY3MTU3IDkuNjcxNTcgMyAxMC41IDNDMTEuMzI4NCAzIDEyIDMuNjcxNTcgMTIgNC41QzEyIDUuMzI4NDMgMTEuMzI4NCA2IDEwLjUgNkM5LjY3MTU3IDYgOSA1LjMyODQzIDkgNC41Wk0yIDEwLjVDMiA5LjExOTI5IDMuMTE5MjkgOCA0LjUgOEM1Ljg4MDcyIDggNyA5LjExOTI5IDcgMTAuNUM3IDExLjg4MDcgNS44ODA3MiAxMyA0LjUgMTNDMy4xMTkyOSAxMyAyIDExLjg4MDcgMiAxMC41Wk00LjUgOUMzLjY3MTU3IDkgMyA5LjY3MTU3IDMgMTAuNUMzIDExLjMyODQgMy42NzE1NyAxMiA0LjUgMTJDNS4zMjg0MyAxMiA2IDExLjMyODQgNiAxMC41QzYgOS42NzE1NyA1LjMyODQzIDkgNC41IDlaTTEwLjUgOEM5LjExOTI5IDggOCA5LjExOTI5IDggMTAuNUM4IDExLjg4MDcgOS4xMTkyOSAxMyAxMC41IDEzQzExLjg4MDcgMTMgMTMgMTEuODgwNyAxMyAxMC41QzEzIDkuMTE5MjkgMTEuODgwNyA4IDEwLjUgOFpNOSAxMC41QzkgOS42NzE1NyA5LjY3MTU3IDkgMTAuNSA5QzExLjMyODQgOSAxMiA5LjY3MTU3IDEyIDEwLjVDMTIgMTEuMzI4NCAxMS4zMjg0IDEyIDEwLjUgMTJDOS42NzE1NyAxMiA5IDExLjMyODQgOSAxMC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjA1MDIgMi43NDk4OUMxMy4wNTAyIDIuNDQ2MTMgMTIuODA0IDIuMTk5ODkgMTIuNTAwMiAyLjE5OTg5QzEyLjE5NjUgMi4xOTk4OSAxMS45NTAyIDIuNDQ2MTMgMTEuOTUwMiAyLjc0OTg5VjcuMjgyNUMxMS45MDQ2IDcuMTg4MDIgMTEuODI5NSA3LjEwODUxIDExLjczMzQgNy4wNTc3NkwyLjczMzM4IDIuMzA3NzZDMi41Nzg0IDIuMjI1OTYgMi4zOTE5IDIuMjMxMjcgMi4yNDE4MiAyLjMyMTc2QzIuMDkxNzUgMi40MTIyNSAyIDIuNTc0NzEgMiAyLjc0OTk1VjEyLjI1QzIgMTIuNDI1MiAyLjA5MTc1IDEyLjU4NzcgMi4yNDE4MiAxMi42NzgxQzIuMzkxOSAxMi43Njg2IDIuNTc4NCAxMi43NzM5IDIuNzMzMzggMTIuNjkyMUwxMS43MzM0IDcuOTQyMTRDMTEuODI5NSA3Ljg5MTM5IDExLjkwNDYgNy44MTE4OCAxMS45NTAyIDcuNzE3NFYxMi4yNDk5QzExLjk1MDIgMTIuNTUzNiAxMi4xOTY1IDEyLjc5OTkgMTIuNTAwMiAxMi43OTk5QzEyLjgwNCAxMi43OTk5IDEzLjA1MDIgMTIuNTUzNiAxMy4wNTAyIDEyLjI0OTlWMi43NDk4OVpNMyAxMS40MjA3VjMuNTc5MkwxMC40Mjg4IDcuNDk5OTVMMyAxMS40MjA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuOTQ5NzYgMi43NDk4OUMxLjk0OTc2IDIuNDQ2MTMgMi4xOTYgMi4xOTk4OSAyLjQ5OTc2IDIuMTk5ODlDMi44MDM1MSAyLjE5OTg5IDMuMDQ5NzYgMi40NDYxMyAzLjA0OTc2IDIuNzQ5ODlWNy4yODI1QzMuMDk1NCA3LjE4ODAyIDMuMTcwNDYgNy4xMDg1MSAzLjI2NjYyIDcuMDU3NzZMMTIuMjY2NiAyLjMwNzc2QzEyLjQyMTYgMi4yMjU5NiAxMi42MDgxIDIuMjMxMjcgMTIuNzU4MiAyLjMyMTc2QzEyLjkwODMgMi40MTIyNSAxMyAyLjU3NDcxIDEzIDIuNzQ5OTVWMTIuMjVDMTMgMTIuNDI1MiAxMi45MDgzIDEyLjU4NzcgMTIuNzU4MiAxMi42NzgxQzEyLjYwODEgMTIuNzY4NiAxMi40MjE2IDEyLjc3MzkgMTIuMjY2NiAxMi42OTIxTDMuMjY2NjIgNy45NDIxNEMzLjE3MDQ2IDcuODkxMzkgMy4wOTU0IDcuODExODggMy4wNDk3NiA3LjcxNzRWMTIuMjQ5OUMzLjA0OTc2IDEyLjU1MzYgMi44MDM1MSAxMi43OTk5IDIuNDk5NzYgMTIuNzk5OUMyLjE5NiAxMi43OTk5IDEuOTQ5NzYgMTIuNTUzNiAxLjk0OTc2IDEyLjI0OTlWMi43NDk4OVpNNC41NzEyMiA3LjQ5OTk1TDEyIDExLjQyMDdWMy41NzkyTDQuNTcxMjIgNy40OTk5NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGZvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yNVwiLGQ6XCJNMCAwSDNWM0gwVjBaTTYgM0gzVjZIMFY5SDNWMTJIMFYxNUgzVjEySDZWMTVIOVYxMkgxMlYxNUgxNVYxMkgxMlY5SDE1VjZIMTJWM0gxNVYwSDEyVjNIOVYwSDZWM1pNNiA2VjNIOVY2SDZaTTYgOUgzVjZINlY5Wk05IDlWNkgxMlY5SDlaTTkgOUg2VjEySDlWOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGhvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjUgMUM1LjIyMzg2IDEgNSAxLjIyMzg2IDUgMS41QzUgMS43NzYxNCA1LjIyMzg2IDIgNS41IDJIOS41QzkuNzc2MTQgMiAxMCAxLjc3NjE0IDEwIDEuNUMxMCAxLjIyMzg2IDkuNzc2MTQgMSA5LjUgMUg1LjVaTTMgMy41QzMgMy4yMjM4NiAzLjIyMzg2IDMgMy41IDNINUgxMEgxMS41QzExLjc3NjEgMyAxMiAzLjIyMzg2IDEyIDMuNUMxMiAzLjc3NjE0IDExLjc3NjEgNCAxMS41IDRIMTFWMTJDMTEgMTIuNTUyMyAxMC41NTIzIDEzIDEwIDEzSDVDNC40NDc3MiAxMyA0IDEyLjU1MjMgNCAxMlY0TDMuNSA0QzMuMjIzODYgNCAzIDMuNzc2MTQgMyAzLjVaTTUgNEgxMFYxMkg1VjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxnbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNCA2SDExTDcuNSAxMC41TDQgNlpcIixmaWxsOm59KSl9LHZvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05IDRMOSAxMUw0LjUgNy41TDkgNFpcIixmaWxsOm59KSl9LENvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02IDExTDYgNEwxMC41IDcuNUw2IDExWlwiLGZpbGw6bn0pKX0sbW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQgOUgxMUw3LjUgNC41TDQgOVpcIixmaWxsOm59KSl9LHdvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjIzMzM2IDQuNjk2MjlDNy4yMzMzNiAyLjk2ODg0IDguNjMzMzUgMS41Njg1NyAxMC4zNiAxLjU2ODU3QzExLjM3MzYgMS41Njg1NyAxMi4xODMgMi4wNDgwNCAxMi43MjU0IDIuNzQzODVDMTMuMzA3OSAyLjYyNDY3IDEzLjg1NTcgMi40MDkxMyAxNC4zNTEzIDIuMTE1MDhDMTQuMTU1OSAyLjcyNTk4IDEzLjc0MjQgMy4yMzk2IDEzLjIwMzMgMy41NjQ2M0MxMy4yMDM4IDMuNTY1NjggMTMuMjA0MiAzLjU2Njc0IDEzLjIwNDcgMy41Njc3OUMxMy43MzM0IDMuNTAzNjEgMTQuMjM2NCAzLjM2MzAyIDE0LjcwNDggMy4xNTU0NkwxNC43MDM3IDMuMTU3MTVDMTQuMzY2NyAzLjY2MTgzIDEzLjk0MzEgNC4xMDczNiAxMy40NTYxIDQuNDcwMzRDMTMuNDgyMyA0LjY0NjcyIDEzLjQ5NTYgNC44MjQyNyAxMy40OTU2IDUuMDAwNzlDMTMuNDk1NiA4LjY4NzEgMTAuNjg3MyAxMi45NzQ2IDUuNTIxMjIgMTIuOTc0NkMzLjkzOTA2IDEyLjk3NDYgMi40NjU0NCAxMi41MTEgMS4yMjUwNSAxMS43MTUyQzAuOTkyNjMyIDExLjU2NjEgMC45MjUxMDggMTEuMjU2OCAxLjA3NDIzIDExLjAyNDRDMS4wODc0IDExLjAwMzggMS4xMDE4MyAxMC45ODQ2IDEuMTE3MzQgMTAuOTY2NkMxLjIwNTgyIDEwLjgyMDIgMS4zNzQzOCAxMC43MzA5IDEuNTU1NCAxMC43NTIyQzIuNDcwNjYgMTAuODYwMSAzLjM4NTY4IDEwLjc0ODUgNC4xOTIxOSAxMC4zOTYyQzMuMzkyMjYgMTAuMDQzNCAyLjc3MTI5IDkuMzU5NzUgMi41MDIwNCA4LjUxOTc0QzIuNDUzNTkgOC4zNjg2IDIuNDg4MzUgOC4yMDMxMSAyLjU5MzUxIDguMDg0MjJDMi41OTcxNiA4LjA4MDEgMi42MDA4NyA4LjA3NjA2IDIuNjA0NjQgOC4wNzIxQzEuOTYzOTEgNy41MDgxOSAxLjU1OTczIDYuNjgyMDggMS41NTk3MyA1Ljc2MTQzVjUuNzI3NTlDMS41NTk3MyA1LjU2ODE0IDEuNjQ0MTEgNS40MjA1OSAxLjc4MTU1IDUuMzM5NzRDMS44MjY3MSA1LjMxMzE3IDEuODc1MzcgNS4yOTUxMSAxLjkyNTMyIDUuMjg1NThDMS43MDU0OSA0Ljg2MTU0IDEuNTgxMTYgNC4zNzk4NCAxLjU4MTE2IDMuODY5NThDMS41ODExNiAzLjQwMTY1IDEuNTgzODQgMi44MTE5MiAxLjkxMzMyIDIuMjgwODFDMS45ODcxOCAyLjE2MTc1IDIuMTA3NTggMi4wODkxNSAyLjIzNjQgMi4wNzE5NUMyLjQyNTg4IDIuMDEyMzcgMi42NDA4NyAyLjA2OTY5IDIuNzc0MDYgMi4yMzMwMkMzLjg2NTM2IDMuNTcxMjYgNS40NDA2NiA0LjQ5NTgzIDcuMjMzNjYgNC43Mzk2MUw3LjIzMzM2IDQuNjk2MjlaTTUuNTIxMjIgMTEuOTc0NkM0LjczMzg3IDExLjk3NDYgMy45Nzc4MSAxMS44NDM1IDMuMjcyNDggMTEuNjAyM0M0LjEzMDEyIDExLjQ1MzggNC45NTMwNyAxMS4xMTU5IDUuNjYyMTggMTAuNTYwMkM1LjgxMjExIDEwLjQ0MjcgNS44NzE4MiAxMC4yNDM1IDUuODExMjYgMTAuMDYyOUM1Ljc1MDcgOS44ODIzNCA1LjU4MyA5Ljc1OTQzIDUuMzkyNTUgOS43NTYwN0M0LjY4OTY4IDkuNzQzNjYgNC4wNjcxMiA5LjM5NzE2IDMuNjc3OTMgOC44Njg0NUMzLjg2ODI4IDguODUzMDYgNC4wNTQyOCA4LjgyMDM5IDQuMjM0NDUgOC43NzE2N0M0LjQzNjAzIDguNzE3MTYgNC41NzM2MyA4LjUzMTE0IDQuNTY2NzQgOC4zMjI0M0M0LjU1OTg1IDguMTEzNzIgNC40MTAyOSA3LjkzNzE4IDQuMjA1NTUgNy44OTYwN0MzLjQyNjk0IDcuNzM5NzcgMi43OTg4MyA3LjE2NzY0IDIuNTYxNjkgNi40MjE3NEMyLjc2MjU1IDYuNDcwMjUgMi45NzEwMiA2LjQ5OTEgMy4xODQ4MiA2LjUwNjFDMy4zODU2MyA2LjUxMjY3IDMuNTY2NDYgNi4zODUzMyAzLjYyNzk1IDYuMTk0MDVDMy42ODk0MyA2LjAwMjc3IDMuNjE2NjYgNS43OTM5MSAzLjQ0OTYzIDUuNjgyMjRDMi44NjUyMyA1LjI5MTU1IDIuNDgxMTYgNC42MjQ2NCAyLjQ4MTE2IDMuODY5NThDMi40ODExNiAzLjcwMjEzIDIuNDgzNTIgMy41NTI2OCAyLjQ5MzU1IDMuNDE3MTlDMy44NTExNSA0Ljc5OTEzIDUuNzA4NzMgNS42ODkzMSA3Ljc3NTg4IDUuNzkzMzhDNy45MzIyNSA1LjgwMTI2IDguMDgzMjggNS43MzU0MyA4LjE4Mzk1IDUuNjE1NTNDOC4yODQ2MyA1LjQ5NTYyIDguMzIzMzIgNS4zMzU0OCA4LjI4ODUxIDUuMTgyODRDOC4yNTI1NSA1LjAyNTE3IDguMjMzMzYgNC44NjI4NCA4LjIzMzM2IDQuNjk2MjlDOC4yMzMzNiAzLjUyMDg1IDkuMTg1OTEgMi41Njg1NyAxMC4zNiAyLjU2ODU3QzExLjU5NDMgMi41Njg1NyAxMi40OTU2IDMuNzEyMDggMTIuNDk1NiA1LjAwMDc5QzEyLjQ5NTYgOC4yNTcwOSAxMC4wMjAyIDExLjk3NDYgNS41MjEyMiAxMS45NzQ2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sYm89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuMDAwMDEgMi43NUM1LjAwMDAxIDIuNDczODYgNC43NzYxNSAyLjI1IDQuNTAwMDEgMi4yNUM0LjIyMzg3IDIuMjUgNC4wMDAwMSAyLjQ3Mzg2IDQuMDAwMDEgMi43NVY4LjA1QzQuMDAwMDEgOS45ODMgNS41NjcwMiAxMS41NSA3LjUwMDAxIDExLjU1QzkuNDMzMDEgMTEuNTUgMTEgOS45ODMgMTEgOC4wNVYyLjc1QzExIDIuNDczODYgMTAuNzc2MiAyLjI1IDEwLjUgMi4yNUMxMC4yMjM5IDIuMjUgMTAgMi40NzM4NiAxMCAyLjc1VjguMDVDMTAgOS40MzA3MSA4Ljg4MDcyIDEwLjU1IDcuNTAwMDEgMTAuNTVDNi4xMTkzIDEwLjU1IDUuMDAwMDEgOS40MzA3MSA1LjAwMDAxIDguMDVWMi43NVpNMy40OTk5OCAxMy4xMDAxQzMuMjc5MDYgMTMuMTAwMSAzLjA5OTk4IDEzLjI3OTEgMy4wOTk5OCAxMy41MDAxQzMuMDk5OTggMTMuNzIxIDMuMjc5MDYgMTMuOTAwMSAzLjQ5OTk4IDEzLjkwMDFIMTEuNUMxMS43MjA5IDEzLjkwMDEgMTEuOSAxMy43MjEgMTEuOSAxMy41MDAxQzExLjkgMTMuMjc5MSAxMS43MjA5IDEzLjEwMDEgMTEuNSAxMy4xMDAxSDMuNDk5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5bz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS45MDMyMSA3LjI5Njc3QzEuOTAzMjEgMTAuMzQxIDQuMTEwNDEgMTIuNDE0NyA2LjU4ODkzIDEyLjg0MzlDNi44NzI1NSAxMi44OTMgNy4wNjI2NiAxMy4xNjI3IDcuMDEzNTUgMTMuNDQ2NEM2Ljk2NDQ0IDEzLjczIDYuNjk0NzEgMTMuOTIwMSA2LjQxMTA5IDEzLjg3MUMzLjQ5OTQyIDEzLjM2NjggMC44NjA4NCAxMC45MTI3IDAuODYwODQgNy4yOTY3N0MwLjg2MDgzOSA1Ljc2MDA5IDEuNTU5OTYgNC41NTI0NSAyLjM3NjM5IDMuNjMzNzdDMi45NjEyNCAyLjk3NTY4IDMuNjMwMzQgMi40NDEzNSA0LjE2ODQ2IDIuMDMyMDJMMi41MzIwNSAyLjAzMjAyQzIuMjU1OTEgMi4wMzIwMiAyLjAzMjA1IDEuODA4MTYgMi4wMzIwNSAxLjUzMjAyQzIuMDMyMDUgMS4yNTU4OCAyLjI1NTkxIDEuMDMyMDIgMi41MzIwNSAxLjAzMjAyTDUuNTMyMDUgMS4wMzIwMkM1LjgwODE5IDEuMDMyMDIgNi4wMzIwNSAxLjI1NTg4IDYuMDMyMDUgMS41MzIwMkw2LjAzMjA1IDQuNTMyMDJDNi4wMzIwNSA0LjgwODE2IDUuODA4MTkgNS4wMzIwMiA1LjUzMjA1IDUuMDMyMDJDNS4yNTU5MSA1LjAzMjAyIDUuMDMyMDUgNC44MDgxNiA1LjAzMjA1IDQuNTMyMDJMNS4wMzIwNSAyLjY4NjQ1TDUuMDMwNTQgMi42ODc1OUw1LjAzMDQ1IDIuNjg3NjZMNS4wMzA0NCAyLjY4NzY3TDUuMDMwNDMgMi42ODc2N0M0LjQ1ODk2IDMuMTE4NjggMy43NjA1OSAzLjY0NTM4IDMuMTU1NTQgNC4zMjYyQzIuNDQxMDIgNS4xMzAyMSAxLjkwMzIxIDYuMTAxNTQgMS45MDMyMSA3LjI5Njc3Wk0xMy4wMTA5IDcuNzAzMjFDMTMuMDEwOSA0LjY5MTE1IDEwLjg1MDUgMi42Mjk2IDguNDAzODQgMi4xNzAyOUM4LjEyMDkzIDIuMTE3MTggNy45MzQ2NSAxLjg0NDc5IDcuOTg3NzYgMS41NjE4OEM4LjA0MDg3IDEuMjc4OTggOC4zMTMyNiAxLjA5MjcgOC41OTYxNiAxLjE0NTgxQzExLjQ3MDQgMS42ODU0MSAxNC4wNTMyIDQuMTI2MDUgMTQuMDUzMiA3LjcwMzIxQzE0LjA1MzIgOS4yMzk4OCAxMy4zNTQxIDEwLjQ0NzUgMTIuNTM3NyAxMS4zNjYyQzExLjk1MjggMTIuMDI0MyAxMS4yODM3IDEyLjU1ODYgMTAuNzQ1NiAxMi45NjhMMTIuMzgyMSAxMi45NjhDMTIuNjU4MiAxMi45NjggMTIuODgyMSAxMy4xOTE4IDEyLjg4MjEgMTMuNDY4QzEyLjg4MjEgMTMuNzQ0MSAxMi42NTgyIDEzLjk2OCAxMi4zODIxIDEzLjk2OEw5LjM4MjA1IDEzLjk2OEM5LjEwNTkxIDEzLjk2OCA4Ljg4MjA1IDEzLjc0NDEgOC44ODIwNSAxMy40NjhMOC44ODIwNSAxMC40NjhDOC44ODIwNSAxMC4xOTE4IDkuMTA1OTEgOS45Njc5NiA5LjM4MjA1IDkuOTY3OTZDOS42NTgxOSA5Ljk2Nzk2IDkuODgyMDUgMTAuMTkxOCA5Ljg4MjA1IDEwLjQ2OEw5Ljg4MjA1IDEyLjMxMzVMOS44ODM2MiAxMi4zMTIzQzEwLjQ1NTEgMTEuODgxMyAxMS4xNTM1IDExLjM1NDYgMTEuNzU4NSAxMC42NzM4QzEyLjQ3MzEgOS44Njk3NiAxMy4wMTA5IDguODk4NDQgMTMuMDEwOSA3LjcwMzIxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuODE4MjUgMS4xODE4OEM3LjY0MjUxIDEuMDA2MTUgNy4zNTc1OSAxLjAwNjE1IDcuMTgxODUgMS4xODE4OEw0LjE4MTg1IDQuMTgxODhDNC4wMDYxMSA0LjM1NzYyIDQuMDA2MTEgNC42NDI1NCA0LjE4MTg1IDQuODE4MjhDNC4zNTc1OSA0Ljk5NDAxIDQuNjQyNTEgNC45OTQwMSA0LjgxODI1IDQuODE4MjhMNy4wNTAwNSAyLjU4NjQ4VjkuNDk5OTZDNy4wNTAwNSA5Ljc0ODQ5IDcuMjUxNTIgOS45NDk5NiA3LjUwMDA1IDkuOTQ5OTZDNy43NDg1OCA5Ljk0OTk2IDcuOTUwMDUgOS43NDg0OSA3Ljk1MDA1IDkuNDk5OTZWMi41ODY0OEwxMC4xODE5IDQuODE4MjhDMTAuMzU3NiA0Ljk5NDAxIDEwLjY0MjUgNC45OTQwMSAxMC44MTgyIDQuODE4MjhDMTAuOTk0IDQuNjQyNTQgMTAuOTk0IDQuMzU3NjIgMTAuODE4MiA0LjE4MTg4TDcuODE4MjUgMS4xODE4OFpNMi41IDkuOTk5OTdDMi43NzYxNCA5Ljk5OTk3IDMgMTAuMjIzOCAzIDEwLjVWMTJDMyAxMi41NTM4IDMuNDQ1NjUgMTMgMy45OTYzNSAxM0gxMS4wMDEyQzExLjU1MjkgMTMgMTIgMTIuNTUyOCAxMiAxMlYxMC41QzEyIDEwLjIyMzggMTIuMjIzOSA5Ljk5OTk3IDEyLjUgOS45OTk5N0MxMi43NzYxIDkuOTk5OTcgMTMgMTAuMjIzOCAxMyAxMC41VjEyQzEzIDEzLjEwNCAxMi4xMDYyIDE0IDExLjAwMTIgMTRIMy45OTYzNUMyLjg5MDE5IDE0IDIgMTMuMTAzIDIgMTJWMTAuNUMyIDEwLjIyMzggMi4yMjM4NiA5Ljk5OTk3IDIuNSA5Ljk5OTk3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sa289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNDk5ODhDMC44NzcwNzUgMy44NDIxOSAzLjg0MjIyIDAuODc3MDQ1IDcuNDk5OTEgMC44NzcwNDVDMTEuMTU3NiAwLjg3NzA0NSAxNC4xMjI3IDMuODQyMTkgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMTEuMTU3NSAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzMuODQyMjIgMTQuMTIyNyAwLjg3NzA3NSAxMS4xNTc1IDAuODc3MDc1IDcuNDk5ODhaTTcuNDk5OTEgMS44MjcwNEM0LjM2Njg5IDEuODI3MDQgMS44MjcwOCA0LjM2Njg2IDEuODI3MDggNy40OTk4OEMxLjgyNzA4IDEwLjYzMjkgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0MxMC42MzI5IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDQuMzY2ODYgMTAuNjMyOSAxLjgyNzA0IDcuNDk5OTEgMS44MjcwNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFNvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTg1IDAuODc3MDQ1QzMuODQyMTYgMC44NzcwNDUgMC44NzcwMTQgMy44NDIxOSAwLjg3NzAxNCA3LjQ5OTg4QzAuODc3MDE0IDkuMTQ4OCAxLjQ3OTYzIDEwLjY1NyAyLjQ3NjY1IDExLjgxNjJMMS42NDY0MyAxMi42NDY0QzEuNDUxMTcgMTIuODQxNyAxLjQ1MTE3IDEzLjE1ODMgMS42NDY0MyAxMy4zNTM1QzEuODQxNyAxMy41NDg4IDIuMTU4MjggMTMuNTQ4OCAyLjM1MzU0IDEzLjM1MzVMMy4xODM3NyAxMi41MjMzQzQuMzQyOTYgMTMuNTIwMiA1Ljg1MTA0IDE0LjEyMjcgNy40OTk4NSAxNC4xMjI3QzExLjE1NzUgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgNS44NTEwNyAxMy41MjAyIDQuMzQyOTkgMTIuNTIzMyAzLjE4MzhMMTMuMzUzNSAyLjM1MzU0QzEzLjU0ODggMi4xNTgyNyAxMy41NDg4IDEuODQxNjkgMTMuMzUzNSAxLjY0NjQzQzEzLjE1ODMgMS40NTExNyAxMi44NDE3IDEuNDUxMTcgMTIuNjQ2NCAxLjY0NjQzTDExLjgxNjIgMi40NzY2OEMxMC42NTcgMS40Nzk2NiA5LjE0ODc3IDAuODc3MDQ1IDcuNDk5ODUgMC44NzcwNDVaTTExLjE0MjIgMy4xNTA2NkMxMC4xNTY3IDIuMzI0NDkgOC44ODYzOSAxLjgyNzA0IDcuNDk5ODUgMS44MjcwNEM0LjM2NjgzIDEuODI3MDQgMS44MjcwMSA0LjM2Njg2IDEuODI3MDEgNy40OTk4OEMxLjgyNzAxIDguODg2NDIgMi4zMjQ0NiAxMC4xNTY4IDMuMTUwNjMgMTEuMTQyMkwxMS4xNDIyIDMuMTUwNjZaTTMuODU3NzYgMTEuODQ5M0M0Ljg0MzE3IDEyLjY3NTMgNi4xMTM0MyAxMy4xNzI3IDcuNDk5ODUgMTMuMTcyN0MxMC42MzI4IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDYuMTEzNDYgMTIuNjc1MyA0Ljg0MzIgMTEuODQ5MyAzLjg1Nzc5TDMuODU3NzYgMTEuODQ5M1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE9vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTk4IDFMNi45MjMyMSAyLjAwMzA3TDEuMTc0OTggMTJMMC41OTk5NzYgMTNIMS43NTM1SDEzLjI0NjRIMTQuNEwxMy44MjUgMTJMOC4wNzY3NCAyLjAwMzA3TDcuNDk5OTggMVpNNy40OTk5OCAzLjAwNjEzTDIuMzI4NSAxMkgxMi42NzE0TDcuNDk5OTggMy4wMDYxM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE1vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00Ljc2NDQ3IDMuMTIxOTlDNS42MzE1MSAzLjA0ODU5IDYuNTYwODIgMyA3LjUgM0M4LjQzOTE4IDMgOS4zNjg0OSAzLjA0ODU5IDEwLjIzNTUgMy4xMjE5OUMxMS4yNzk2IDMuMjEwMzcgMTEuOTU1MyAzLjI3MDA4IDEyLjQ3MiAzLjM5MjAzQzEyLjk0MjUgMy41MDMwNCAxMy4yMDQ4IDMuNjQ5NzYgMTMuNDMwNiAzLjg4MDg2QzEzLjQ1NTMgMy45MDYxOCAxMy40OTAyIDMuOTQ0MTQgMTMuNTEzMyAzLjk3MDkyQzEzLjcxMjYgNC4yMDE0OSAxMy44NDM1IDQuNDg4NyAxMy45MTggNS4wMzI4M0MxMy45OTc4IDUuNjE1NiAxNCA2LjM3NjQ0IDE0IDcuNTI0OTNDMTQgOC42NjAyNiAxMy45OTc4IDkuNDEwMTkgMTMuOTE4MSA5Ljk4NTM4QzEzLjg0MzkgMTAuNTIwNiAxMy43MTM3IDEwLjgwNjEgMTMuNTEyNSAxMS4wMzg3QzEzLjQ4OTYgMTEuMDY1MSAxMy40NTQxIDExLjEwMzggMTMuNDI5NiAxMS4xMjg3QzEzLjIwMDkgMTEuMzYyNSAxMi45NDA2IDExLjUwNzYgMTIuNDgxOCAxMS42MTY0QzExLjk3NTIgMTEuNzM2NSAxMS4zMTQzIDExLjc5NDIgMTAuMjg3OCAxMS44Nzk3QzkuNDE5NDggMTEuOTUyMSA4LjQ3NTY2IDEyIDcuNSAxMkM2LjUyNDM0IDEyIDUuNTgwNTIgMTEuOTUyMSA0LjcxMjIgMTEuODc5N0MzLjY4NTcyIDExLjc5NDIgMy4wMjQ3NyAxMS43MzY1IDIuNTE4MTYgMTEuNjE2NEMyLjA1OTM2IDExLjUwNzYgMS43OTkxIDExLjM2MjUgMS41NzAzNyAxMS4xMjg3QzEuNTQ1OTMgMTEuMTAzOCAxLjUxMDM1IDExLjA2NTEgMS40ODc0OCAxMS4wMzg3QzEuMjg2MjggMTAuODA2MSAxLjE1NjEyIDEwLjUyMDYgMS4wODE5MyA5Ljk4NTM4QzEuMDAyMjEgOS40MTAxOSAxIDguNjYwMjYgMSA3LjUyNDkzQzEgNi4zNzY0NCAxLjAwMjE2IDUuNjE1NiAxLjA4MiA1LjAzMjgzQzEuMTU2NTQgNC40ODg3IDEuMjg3NDQgNC4yMDE0OSAxLjQ4NjY2IDMuOTcwOTJDMS41MDk4IDMuOTQ0MTQgMS41NDQ2OCAzLjkwNjE4IDEuNTY5NDIgMy44ODA4NkMxLjc5NTIgMy42NDk3NiAyLjA1NzUyIDMuNTAzMDQgMi41Mjc5NiAzLjM5MjAzQzMuMDQ0NzMgMy4yNzAwOCAzLjcyMDQgMy4yMTAzNyA0Ljc2NDQ3IDMuMTIxOTlaTTAgNy41MjQ5M0MwIDUuMjgyOTYgMCA0LjE2MTk4IDAuNzI5OTg1IDMuMzE3MTNDMC43NjY0NTcgMy4yNzQ5MSAwLjgxNTEzOSAzLjIyMTk0IDAuODU0MTIzIDMuMTgyMDRDMS42MzQzOSAyLjM4MzM5IDIuNjQ5NjMgMi4yOTc0NCA0LjY4MDEyIDIuMTI1NTVDNS41NjkyMyAyLjA1MDI4IDYuNTI3MjQgMiA3LjUgMkM4LjQ3Mjc2IDIgOS40MzA3NyAyLjA1MDI4IDEwLjMxOTkgMi4xMjU1NUMxMi4zNTA0IDIuMjk3NDQgMTMuMzY1NiAyLjM4MzM5IDE0LjE0NTkgMy4xODIwNEMxNC4xODQ5IDMuMjIxOTQgMTQuMjMzNSAzLjI3NDkxIDE0LjI3IDMuMzE3MTNDMTUgNC4xNjE5OCAxNSA1LjI4Mjk2IDE1IDcuNTI0OTNDMTUgOS43NDAxMiAxNSAxMC44NDc3IDE0LjI2ODggMTEuNjkyOUMxNC4yMzI2IDExLjczNDggMTQuMTgzMiAxMS43ODg1IDE0LjE0NDQgMTEuODI4MUMxMy4zNjI5IDEyLjYyNjkgMTIuMzY1NSAxMi43MSAxMC4zNzA5IDEyLjg3NjNDOS40Nzk3MSAxMi45NTA1IDguNTA3ODIgMTMgNy41IDEzQzYuNDkyMTggMTMgNS41MjAyOCAxMi45NTA1IDQuNjI5MTUgMTIuODc2M0MyLjYzNDQ2IDEyLjcxIDEuNjM3MTIgMTIuNjI2OSAwLjg1NTU1OCAxMS44MjgxQzAuODE2ODQ0IDExLjc4ODUgMC43Njc0NDIgMTEuNzM0OCAwLjczMTIyMSAxMS42OTI5QzAgMTAuODQ3NyAwIDkuNzQwMTIgMCA3LjUyNDkzWk01LjI1IDUuMzgyNjRDNS4yNSA1LjIwMjI1IDUuNDM1MjIgNS4wODEyNCA1LjYwMDQxIDUuMTUzNjlMMTAuNDI4IDcuMjcxMDVDMTAuNjI3NCA3LjM1ODUzIDEwLjYyNzQgNy42NDE0NyAxMC40MjggNy43Mjg5NUw1LjYwMDQxIDkuODQ2MzFDNS40MzUyMiA5LjkxODc2IDUuMjUgOS43OTc3NSA1LjI1IDkuNjE3MzZWNS4zODI2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LExvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03IDJIMS41QzEuMjIzODYgMiAxIDIuMjIzODYgMSAyLjVWN0g3VjJaTTggMlY3SDE0VjIuNUMxNCAyLjIyMzg2IDEzLjc3NjEgMiAxMy41IDJIOFpNNyA4SDFWMTIuNUMxIDEyLjc3NjEgMS4yMjM4NiAxMyAxLjUgMTNIN1Y4Wk04IDEzVjhIMTRWMTIuNUMxNCAxMi43NzYxIDEzLjc3NjEgMTMgMTMuNSAxM0g4Wk0xLjUgMUMwLjY3MTU3MyAxIDAgMS42NzE1NyAwIDIuNVYxMi41QzAgMTMuMzI4NCAwLjY3MTU3MyAxNCAxLjUgMTRIMTMuNUMxNC4zMjg0IDE0IDE1IDEzLjMyODQgMTUgMTIuNVYyLjVDMTUgMS42NzE1NyAxNC4zMjg0IDEgMTMuNSAxSDEuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF9vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjUgMkgxMy41QzEzLjc3NjEgMiAxNCAyLjIyMzg2IDE0IDIuNVY3SDFWMi41QzEgMi4yMjM4NiAxLjIyMzg2IDIgMS41IDJaTTEgOFYxMi41QzEgMTIuNzc2MSAxLjIyMzg2IDEzIDEuNSAxM0gxMy41QzEzLjc3NjEgMTMgMTQgMTIuNzc2MSAxNCAxMi41VjhIMVpNMCAyLjVDMCAxLjY3MTU3IDAuNjcxNTczIDEgMS41IDFIMTMuNUMxNC4zMjg0IDEgMTUgMS42NzE1NyAxNSAyLjVWMTIuNUMxNSAxMy4zMjg0IDE0LjMyODQgMTQgMTMuNSAxNEgxLjVDMC42NzE1NzMgMTQgMCAxMy4zMjg0IDAgMTIuNVYyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQgMi41ODcxMUwxLjg1MTYzIDEzSDEzLjVDMTMuNzc2MSAxMyAxNCAxMi43NzYxIDE0IDEyLjVWMi41ODcxMVpNMC43NjI4NzkgMTMuODA2N0wwLjgyNTM5NiAxMy44Nzk2TDAuODU0NzE3IDEzLjg1NDVDMS4wNTAxNyAxMy45NDc4IDEuMjY4OTkgMTQgMS41IDE0SDEzLjVDMTQuMzI4NCAxNCAxNSAxMy4zMjg0IDE1IDEyLjVWMi41QzE1IDEuOTM5NDkgMTQuNjkyNiAxLjQ1MDc4IDE0LjIzNzEgMS4xOTMzMUwxNC4xNzQ2IDEuMTIwMzdMMTQuMTQ1MyAxLjE0NTVDMTMuOTQ5OCAxLjA1MjIyIDEzLjczMSAxIDEzLjUgMUgxLjVDMC42NzE1NzMgMSAwIDEuNjcxNTcgMCAyLjVWMTIuNUMwIDEzLjA2MDUgMC4zMDc0MzUgMTMuNTQ5MiAwLjc2Mjg3OSAxMy44MDY3Wk0xIDEyLjQxMjlMMTMuMTQ4NCAySDEuNUMxLjIyMzg2IDIgMSAyLjIyMzg2IDEgMi41VjEyLjQxMjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxFbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOCAySDEzLjVDMTMuNzc2MSAyIDE0IDIuMjIzODYgMTQgMi41VjEyLjVDMTQgMTIuNzc2MSAxMy43NzYxIDEzIDEzLjUgMTNIOFYyWk03IDJIMS41QzEuMjIzODYgMiAxIDIuMjIzODYgMSAyLjVWMTIuNUMxIDEyLjc3NjEgMS4yMjM4NiAxMyAxLjUgMTNIN1YyWk0wIDIuNUMwIDEuNjcxNTcgMC42NzE1NzMgMSAxLjUgMUgxMy41QzE0LjMyODQgMSAxNSAxLjY3MTU3IDE1IDIuNVYxMi41QzE1IDEzLjMyODQgMTQuMzI4NCAxNCAxMy41IDE0SDEuNUMwLjY3MTU3MyAxNCAwIDEzLjMyODQgMCAxMi41VjIuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGpvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjgxODEyIDQuNjgxNjFDNC45OTM4NiA0Ljg1NzM0IDQuOTkzODYgNS4xNDIyNyA0LjgxODEyIDUuMzE4TDMuMDg2MzIgNy4wNDk4SDExLjkxMzVMMTAuMTgxNyA1LjMxOEMxMC4wMDYgNS4xNDIyNyAxMC4wMDYgNC44NTczNCAxMC4xODE3IDQuNjgxNjFDMTAuMzU3NSA0LjUwNTg3IDEwLjY0MjQgNC41MDU4NyAxMC44MTgxIDQuNjgxNjFMMTMuMzE4MSA3LjE4MTYxQzEzLjQ5MzkgNy4zNTczNCAxMy40OTM5IDcuNjQyMjcgMTMuMzE4MSA3LjgxOEwxMC44MTgxIDEwLjMxOEMxMC42NDI0IDEwLjQ5MzcgMTAuMzU3NSAxMC40OTM3IDEwLjE4MTcgMTAuMzE4QzEwLjAwNiAxMC4xNDIzIDEwLjAwNiA5Ljg1NzM0IDEwLjE4MTcgOS42ODE2MUwxMS45MTM1IDcuOTQ5OEgzLjA4NjMyTDQuODE4MTIgOS42ODE2MUM0Ljk5Mzg2IDkuODU3MzQgNC45OTM4NiAxMC4xNDIzIDQuODE4MTIgMTAuMzE4QzQuNjQyMzkgMTAuNDkzNyA0LjM1NzQ2IDEwLjQ5MzcgNC4xODE3MyAxMC4zMThMMS42ODE3MyA3LjgxOEMxLjUwNTk5IDcuNjQyMjcgMS41MDU5OSA3LjM1NzM0IDEuNjgxNzMgNy4xODE2MUw0LjE4MTczIDQuNjgxNjFDNC4zNTc0NiA0LjUwNTg3IDQuNjQyMzkgNC41MDU4NyA0LjgxODEyIDQuNjgxNjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxSbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAgNi41QzEwIDguNDMzIDguNDMzIDEwIDYuNSAxMEM0LjU2NyAxMCAzIDguNDMzIDMgNi41QzMgNC41NjcgNC41NjcgMyA2LjUgM0M4LjQzMyAzIDEwIDQuNTY3IDEwIDYuNVpNOS4zMDg4NCAxMC4wMTU5QzguNTM5MDEgMTAuNjMxOCA3LjU2MjUxIDExIDYuNSAxMUM0LjAxNDcyIDExIDIgOC45ODUyOCAyIDYuNUMyIDQuMDE0NzIgNC4wMTQ3MiAyIDYuNSAyQzguOTg1MjggMiAxMSA0LjAxNDcyIDExIDYuNUMxMSA3LjU2MjUxIDEwLjYzMTggOC41MzkwMSAxMC4wMTU5IDkuMzA4ODRMMTIuODUzNiAxMi4xNDY0QzEzLjA0ODggMTIuMzQxNyAxMy4wNDg4IDEyLjY1ODMgMTIuODUzNiAxMi44NTM2QzEyLjY1ODMgMTMuMDQ4OCAxMi4zNDE3IDEzLjA0ODggMTIuMTQ2NCAxMi44NTM2TDkuMzA4ODQgMTAuMDE1OVpNNC4yNSA2LjVDNC4yNSA2LjIyMzg2IDQuNDczODYgNiA0Ljc1IDZINlY0Ljc1QzYgNC40NzM4NiA2LjIyMzg2IDQuMjUgNi41IDQuMjVDNi43NzYxNCA0LjI1IDcgNC40NzM4NiA3IDQuNzVWNkg4LjI1QzguNTI2MTQgNiA4Ljc1IDYuMjIzODYgOC43NSA2LjVDOC43NSA2Ljc3NjE0IDguNTI2MTQgNyA4LjI1IDdIN1Y4LjI1QzcgOC41MjYxNCA2Ljc3NjE0IDguNzUgNi41IDguNzVDNi4yMjM4NiA4Ljc1IDYgOC41MjYxNCA2IDguMjVWN0g0Ljc1QzQuNDczODYgNyA0LjI1IDYuNzc2MTQgNC4yNSA2LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxJbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi41IDEwQzguNDMzIDEwIDEwIDguNDMzIDEwIDYuNUMxMCA0LjU2NyA4LjQzMyAzIDYuNSAzQzQuNTY3IDMgMyA0LjU2NyAzIDYuNUMzIDguNDMzIDQuNTY3IDEwIDYuNSAxMFpNNi41IDExQzcuNTYyNTEgMTEgOC41MzkwMSAxMC42MzE4IDkuMzA4ODQgMTAuMDE1OUwxMi4xNDY0IDEyLjg1MzZDMTIuMzQxNyAxMy4wNDg4IDEyLjY1ODMgMTMuMDQ4OCAxMi44NTM2IDEyLjg1MzZDMTMuMDQ4OCAxMi42NTgzIDEzLjA0ODggMTIuMzQxNyAxMi44NTM2IDEyLjE0NjRMMTAuMDE1OSA5LjMwODg0QzEwLjYzMTggOC41MzkwMSAxMSA3LjU2MjUxIDExIDYuNUMxMSA0LjAxNDcyIDguOTg1MjggMiA2LjUgMkM0LjAxNDcyIDIgMiA0LjAxNDcyIDIgNi41QzIgOC45ODUyOCA0LjAxNDcyIDExIDYuNSAxMVpNNC43NSA2QzQuNDczODYgNiA0LjI1IDYuMjIzODYgNC4yNSA2LjVDNC4yNSA2Ljc3NjE0IDQuNDczODYgNyA0Ljc1IDdIOC4yNUM4LjUyNjE0IDcgOC43NSA2Ljc3NjE0IDguNzUgNi41QzguNzUgNi4yMjM4NiA4LjUyNjE0IDYgOC4yNSA2SDQuNzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfX0sNTI5OTooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtkZWZhdWx0OigpPT5sfSk7dmFyIHI9big4MDgxKSxvPW4ubihyKSxhPW4oMzY0NSksaT1uLm4oYSkoKShvKCkpO2kucHVzaChbZS5pZCxcIi5yZWFjdC1jYWxlbmRhciB7XFxuICB3aWR0aDogMzUwcHg7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNhMGEwOTY7XFxuICBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcXG4gIGxpbmUtaGVpZ2h0OiAxLjEyNWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXItLWRvdWJsZVZpZXcge1xcbiAgd2lkdGg6IDcwMHB4O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXItLWRvdWJsZVZpZXcgLnJlYWN0LWNhbGVuZGFyX192aWV3Q29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBtYXJnaW46IC0wLjVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyLS1kb3VibGVWaWV3IC5yZWFjdC1jYWxlbmRhcl9fdmlld0NvbnRhaW5lciA+ICoge1xcbiAgd2lkdGg6IDUwJTtcXG4gIG1hcmdpbjogMC41ZW07XFxufVxcbi5yZWFjdC1jYWxlbmRhcixcXG4ucmVhY3QtY2FsZW5kYXIgKixcXG4ucmVhY3QtY2FsZW5kYXIgKjpiZWZvcmUsXFxuLnJlYWN0LWNhbGVuZGFyICo6YWZ0ZXIge1xcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuLnJlYWN0LWNhbGVuZGFyIGJ1dHRvbiB7XFxuICBtYXJnaW46IDA7XFxuICBib3JkZXI6IDA7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXIgYnV0dG9uOmVuYWJsZWQ6aG92ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogNDRweDtcXG4gIG1hcmdpbi1ib3R0b206IDFlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uIGJ1dHRvbiB7XFxuICBtaW4td2lkdGg6IDQ0cHg7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24gYnV0dG9uOmRpc2FibGVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiBidXR0b246ZW5hYmxlZDpob3ZlcixcXG4ucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24gYnV0dG9uOmVuYWJsZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X193ZWVrZGF5cyB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICBmb250LXNpemU6IDAuNzVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X193ZWVrZGF5c19fd2Vla2RheSB7XFxuICBwYWRkaW5nOiAwLjVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X193ZWVrTnVtYmVycyAucmVhY3QtY2FsZW5kYXJfX3RpbGUge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGZvbnQtc2l6ZTogMC43NWVtO1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbW9udGgtdmlld19fZGF5c19fZGF5LS13ZWVrZW5kIHtcXG4gIGNvbG9yOiAjZDEwMDAwO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX2RheXNfX2RheS0tbmVpZ2hib3JpbmdNb250aCB7XFxuICBjb2xvcjogIzc1NzU3NTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX195ZWFyLXZpZXcgLnJlYWN0LWNhbGVuZGFyX190aWxlLFxcbi5yZWFjdC1jYWxlbmRhcl9fZGVjYWRlLXZpZXcgLnJlYWN0LWNhbGVuZGFyX190aWxlLFxcbi5yZWFjdC1jYWxlbmRhcl9fY2VudHVyeS12aWV3IC5yZWFjdC1jYWxlbmRhcl9fdGlsZSB7XFxuICBwYWRkaW5nOiAyZW0gMC41ZW07XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZSB7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAxMHB4IDYuNjY2N3B4O1xcbiAgYmFja2dyb3VuZDogbm9uZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIGxpbmUtaGVpZ2h0OiAxNnB4O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGU6ZGlzYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlOmVuYWJsZWQ6aG92ZXIsXFxuLnJlYWN0LWNhbGVuZGFyX190aWxlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1ub3cge1xcbiAgYmFja2dyb3VuZDogI2ZmZmY3NjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1ub3c6ZW5hYmxlZDpob3ZlcixcXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLW5vdzplbmFibGVkOmZvY3VzIHtcXG4gIGJhY2tncm91bmQ6ICNmZmZmYTk7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0taGFzQWN0aXZlIHtcXG4gIGJhY2tncm91bmQ6ICM3NmJhZmY7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0taGFzQWN0aXZlOmVuYWJsZWQ6aG92ZXIsXFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1oYXNBY3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kOiAjYTlkNGZmO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLWFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kOiAjMDA2ZWRjO1xcbiAgY29sb3I6IHdoaXRlO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLWFjdGl2ZTplbmFibGVkOmhvdmVyLFxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tYWN0aXZlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZDogIzEwODdmZjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyLS1zZWxlY3RSYW5nZSAucmVhY3QtY2FsZW5kYXJfX3RpbGUtLWhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7XFxufVxcblwiLFwiXCJdKTtjb25zdCBsPWl9LDM2NDU6ZT0+e2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcCgoZnVuY3Rpb24odCl7dmFyIG49XCJcIixyPXZvaWQgMCE9PXRbNV07cmV0dXJuIHRbNF0mJihuKz1cIkBzdXBwb3J0cyAoXCIuY29uY2F0KHRbNF0sXCIpIHtcIikpLHRbMl0mJihuKz1cIkBtZWRpYSBcIi5jb25jYXQodFsyXSxcIiB7XCIpKSxyJiYobis9XCJAbGF5ZXJcIi5jb25jYXQodFs1XS5sZW5ndGg+MD9cIiBcIi5jb25jYXQodFs1XSk6XCJcIixcIiB7XCIpKSxuKz1lKHQpLHImJihuKz1cIn1cIiksdFsyXSYmKG4rPVwifVwiKSx0WzRdJiYobis9XCJ9XCIpLG59KSkuam9pbihcIlwiKX0sdC5pPWZ1bmN0aW9uKGUsbixyLG8sYSl7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtbbnVsbCxlLHZvaWQgMF1dKTt2YXIgaT17fTtpZihyKWZvcih2YXIgbD0wO2w8dGhpcy5sZW5ndGg7bCsrKXt2YXIgcz10aGlzW2xdWzBdO251bGwhPXMmJihpW3NdPSEwKX1mb3IodmFyIGM9MDtjPGUubGVuZ3RoO2MrKyl7dmFyIHU9W10uY29uY2F0KGVbY10pO3ImJmlbdVswXV18fCh2b2lkIDAhPT1hJiYodm9pZCAwPT09dVs1XXx8KHVbMV09XCJAbGF5ZXJcIi5jb25jYXQodVs1XS5sZW5ndGg+MD9cIiBcIi5jb25jYXQodVs1XSk6XCJcIixcIiB7XCIpLmNvbmNhdCh1WzFdLFwifVwiKSksdVs1XT1hKSxuJiYodVsyXT8odVsxXT1cIkBtZWRpYSBcIi5jb25jYXQodVsyXSxcIiB7XCIpLmNvbmNhdCh1WzFdLFwifVwiKSx1WzJdPW4pOnVbMl09biksbyYmKHVbNF0/KHVbMV09XCJAc3VwcG9ydHMgKFwiLmNvbmNhdCh1WzRdLFwiKSB7XCIpLmNvbmNhdCh1WzFdLFwifVwiKSx1WzRdPW8pOnVbNF09XCJcIi5jb25jYXQobykpLHQucHVzaCh1KSl9fSx0fX0sODA4MTplPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlWzFdfX0sNDQ4MzooZSx0LG4pPT57ZnVuY3Rpb24gcihlKXtyZXR1cm4gcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSxyKGUpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gbz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LG8oZSx0KX1mdW5jdGlvbiBhKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiBlfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGkoZSl9ZnVuY3Rpb24gbChlKXt2YXIgdD1mdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCIhPT1yKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgbj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bil7dmFyIG89bi5jYWxsKGUsXCJzdHJpbmdcIik7aWYoXCJvYmplY3RcIiE9PXIobykpcmV0dXJuIG87dGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpfXJldHVybiBTdHJpbmcoZSl9KGUpO3JldHVyblwic3ltYm9sXCI9PT1yKHQpP3Q6U3RyaW5nKHQpfXZhciBzPW4oNjY4OSksYz1uKDU2OTcpLHU9big1MzAzKS5jcmVhdGVGb2N1c1RyYXAsZD1uKDgzODgpLmlzRm9jdXNhYmxlLHA9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcInByb3RvdHlwZVwiLHt3cml0YWJsZTohMX0pLHQmJm8oZSx0KX0oZixlKTt2YXIgdCxuLGMsdSxwPShjPWYsdT1mdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1pKGMpO2lmKHUpe3ZhciBuPWkodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxuKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKFwib2JqZWN0XCI9PT1yKHQpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtyZXR1cm4gYShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGYoZSl7dmFyIHQsbixyLG87IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0odGhpcyxmKSxuPWEodD1wLmNhbGwodGhpcyxlKSksbz1mdW5jdGlvbihlKXt2YXIgdCxuPW51bGwhPT0odD10aGlzLmludGVybmFsT3B0aW9uc1tlXSkmJnZvaWQgMCE9PXQ/dDp0aGlzLm9yaWdpbmFsT3B0aW9uc1tlXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxvPW5ldyBBcnJheShyPjE/ci0xOjApLGE9MTthPHI7YSsrKW9bYS0xXT1hcmd1bWVudHNbYV07bj1uLmFwcGx5KHZvaWQgMCxvKX1pZighMD09PW4mJihuPXZvaWQgMCksIW4pe2lmKHZvaWQgMD09PW58fCExPT09bilyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoXCJgXCIuY29uY2F0KGUsXCJgIHdhcyBzcGVjaWZpZWQgYnV0IHdhcyBub3QgYSBub2RlLCBvciBkaWQgbm90IHJldHVybiBhIG5vZGVcIikpfXZhciBpLGw9bjtpZihcInN0cmluZ1wiPT10eXBlb2YgbiYmIShsPW51bGw9PT0oaT10aGlzLmdldERvY3VtZW50KCkpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnF1ZXJ5U2VsZWN0b3IobikpKXRocm93IG5ldyBFcnJvcihcImBcIi5jb25jYXQoZSxcImAgYXMgc2VsZWN0b3IgcmVmZXJzIHRvIG5vIGtub3duIG5vZGVcIikpO3JldHVybiBsfSwocj1sKHI9XCJnZXROb2RlRm9yT3B0aW9uXCIpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4scix7dmFsdWU6byxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bcl09byx0LmhhbmRsZURlYWN0aXZhdGU9dC5oYW5kbGVEZWFjdGl2YXRlLmJpbmQoYSh0KSksdC5oYW5kbGVQb3N0RGVhY3RpdmF0ZT10LmhhbmRsZVBvc3REZWFjdGl2YXRlLmJpbmQoYSh0KSksdC5oYW5kbGVDbGlja091dHNpZGVEZWFjdGl2YXRlcz10LmhhbmRsZUNsaWNrT3V0c2lkZURlYWN0aXZhdGVzLmJpbmQoYSh0KSksdC5pbnRlcm5hbE9wdGlvbnM9e3JldHVybkZvY3VzT25EZWFjdGl2YXRlOiExLGNoZWNrQ2FuUmV0dXJuRm9jdXM6bnVsbCxvbkRlYWN0aXZhdGU6dC5oYW5kbGVEZWFjdGl2YXRlLG9uUG9zdERlYWN0aXZhdGU6dC5oYW5kbGVQb3N0RGVhY3RpdmF0ZSxjbGlja091dHNpZGVEZWFjdGl2YXRlczp0LmhhbmRsZUNsaWNrT3V0c2lkZURlYWN0aXZhdGVzfSx0Lm9yaWdpbmFsT3B0aW9ucz17cmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6ITAsb25EZWFjdGl2YXRlOm51bGwsb25Qb3N0RGVhY3RpdmF0ZTpudWxsLGNoZWNrQ2FuUmV0dXJuRm9jdXM6bnVsbCxjbGlja091dHNpZGVEZWFjdGl2YXRlczohMX07dmFyIGk9ZS5mb2N1c1RyYXBPcHRpb25zO2Zvcih2YXIgcyBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHMpJiYoXCJyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZVwiIT09cyYmXCJvbkRlYWN0aXZhdGVcIiE9PXMmJlwib25Qb3N0RGVhY3RpdmF0ZVwiIT09cyYmXCJjaGVja0NhblJldHVybkZvY3VzXCIhPT1zJiZcImNsaWNrT3V0c2lkZURlYWN0aXZhdGVzXCIhPT1zP3QuaW50ZXJuYWxPcHRpb25zW3NdPWlbc106dC5vcmlnaW5hbE9wdGlvbnNbc109aVtzXSk7cmV0dXJuIHQub3V0c2lkZUNsaWNrPW51bGwsdC5mb2N1c1RyYXBFbGVtZW50cz1lLmNvbnRhaW5lckVsZW1lbnRzfHxbXSx0LnVwZGF0ZVByZXZpb3VzRWxlbWVudCgpLHR9cmV0dXJuIHQ9Ziwobj1be2tleTpcImdldERvY3VtZW50XCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5mb2N1c1RyYXBPcHRpb25zLmRvY3VtZW50fHwoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50OnZvaWQgMCl9fSx7a2V5OlwiZ2V0UmV0dXJuRm9jdXNOb2RlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldE5vZGVGb3JPcHRpb24oXCJzZXRSZXR1cm5Gb2N1c1wiLHRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50KTtyZXR1cm4gZXx8ITEhPT1lJiZ0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudH19LHtrZXk6XCJ1cGRhdGVQcmV2aW91c0VsZW1lbnRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0RG9jdW1lbnQoKTtlJiYodGhpcy5wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9ZS5hY3RpdmVFbGVtZW50KX19LHtrZXk6XCJkZWFjdGl2YXRlVHJhcFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5mb2N1c1RyYXAmJnRoaXMuZm9jdXNUcmFwLmFjdGl2ZSYmdGhpcy5mb2N1c1RyYXAuZGVhY3RpdmF0ZSh7cmV0dXJuRm9jdXM6ITEsY2hlY2tDYW5SZXR1cm5Gb2N1czpudWxsLG9uRGVhY3RpdmF0ZTp0aGlzLm9yaWdpbmFsT3B0aW9ucy5vbkRlYWN0aXZhdGV9KX19LHtrZXk6XCJoYW5kbGVDbGlja091dHNpZGVEZWFjdGl2YXRlc1wiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMub3JpZ2luYWxPcHRpb25zLmNsaWNrT3V0c2lkZURlYWN0aXZhdGVzP3RoaXMub3JpZ2luYWxPcHRpb25zLmNsaWNrT3V0c2lkZURlYWN0aXZhdGVzLmNhbGwobnVsbCxlKTp0aGlzLm9yaWdpbmFsT3B0aW9ucy5jbGlja091dHNpZGVEZWFjdGl2YXRlcztyZXR1cm4gdCYmKHRoaXMub3V0c2lkZUNsaWNrPXt0YXJnZXQ6ZS50YXJnZXQsYWxsb3dEZWFjdGl2YXRpb246dH0pLHR9fSx7a2V5OlwiaGFuZGxlRGVhY3RpdmF0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vcmlnaW5hbE9wdGlvbnMub25EZWFjdGl2YXRlJiZ0aGlzLm9yaWdpbmFsT3B0aW9ucy5vbkRlYWN0aXZhdGUuY2FsbChudWxsKSx0aGlzLmRlYWN0aXZhdGVUcmFwKCl9fSx7a2V5OlwiaGFuZGxlUG9zdERlYWN0aXZhdGVcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1mdW5jdGlvbigpe3ZhciB0PWUuZ2V0UmV0dXJuRm9jdXNOb2RlKCksbj0hKCFlLm9yaWdpbmFsT3B0aW9ucy5yZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZXx8bnVsbD09dHx8IXQuZm9jdXN8fGUub3V0c2lkZUNsaWNrJiYoIWUub3V0c2lkZUNsaWNrLmFsbG93RGVhY3RpdmF0aW9ufHxkKGUub3V0c2lkZUNsaWNrLnRhcmdldCxlLmludGVybmFsT3B0aW9ucy50YWJiYWJsZU9wdGlvbnMpKSkscj1lLmludGVybmFsT3B0aW9ucy5wcmV2ZW50U2Nyb2xsLG89dm9pZCAwIT09ciYmcjtuJiZ0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOm99KSxlLm9yaWdpbmFsT3B0aW9ucy5vblBvc3REZWFjdGl2YXRlJiZlLm9yaWdpbmFsT3B0aW9ucy5vblBvc3REZWFjdGl2YXRlLmNhbGwobnVsbCksZS5vdXRzaWRlQ2xpY2s9bnVsbH07dGhpcy5vcmlnaW5hbE9wdGlvbnMuY2hlY2tDYW5SZXR1cm5Gb2N1cz90aGlzLm9yaWdpbmFsT3B0aW9ucy5jaGVja0NhblJldHVybkZvY3VzLmNhbGwobnVsbCx0aGlzLmdldFJldHVybkZvY3VzTm9kZSgpKS50aGVuKHQsdCk6dCgpfX0se2tleTpcInNldHVwRm9jdXNUcmFwXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmZvY3VzVHJhcD90aGlzLnByb3BzLmFjdGl2ZSYmIXRoaXMuZm9jdXNUcmFwLmFjdGl2ZSYmKHRoaXMuZm9jdXNUcmFwLmFjdGl2YXRlKCksdGhpcy5wcm9wcy5wYXVzZWQmJnRoaXMuZm9jdXNUcmFwLnBhdXNlKCkpOnRoaXMuZm9jdXNUcmFwRWxlbWVudHMuc29tZShCb29sZWFuKSYmKHRoaXMuZm9jdXNUcmFwPXRoaXMucHJvcHMuX2NyZWF0ZUZvY3VzVHJhcCh0aGlzLmZvY3VzVHJhcEVsZW1lbnRzLHRoaXMuaW50ZXJuYWxPcHRpb25zKSx0aGlzLnByb3BzLmFjdGl2ZSYmdGhpcy5mb2N1c1RyYXAuYWN0aXZhdGUoKSx0aGlzLnByb3BzLnBhdXNlZCYmdGhpcy5mb2N1c1RyYXAucGF1c2UoKSl9fSx7a2V5OlwiY29tcG9uZW50RGlkTW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMuYWN0aXZlJiZ0aGlzLnNldHVwRm9jdXNUcmFwKCl9fSx7a2V5OlwiY29tcG9uZW50RGlkVXBkYXRlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5mb2N1c1RyYXApe2UuY29udGFpbmVyRWxlbWVudHMhPT10aGlzLnByb3BzLmNvbnRhaW5lckVsZW1lbnRzJiZ0aGlzLmZvY3VzVHJhcC51cGRhdGVDb250YWluZXJFbGVtZW50cyh0aGlzLnByb3BzLmNvbnRhaW5lckVsZW1lbnRzKTt2YXIgdD0hZS5hY3RpdmUmJnRoaXMucHJvcHMuYWN0aXZlLG49ZS5hY3RpdmUmJiF0aGlzLnByb3BzLmFjdGl2ZSxyPSFlLnBhdXNlZCYmdGhpcy5wcm9wcy5wYXVzZWQsbz1lLnBhdXNlZCYmIXRoaXMucHJvcHMucGF1c2VkO2lmKHQmJih0aGlzLnVwZGF0ZVByZXZpb3VzRWxlbWVudCgpLHRoaXMuZm9jdXNUcmFwLmFjdGl2YXRlKCkpLG4pcmV0dXJuIHZvaWQgdGhpcy5kZWFjdGl2YXRlVHJhcCgpO3ImJnRoaXMuZm9jdXNUcmFwLnBhdXNlKCksbyYmdGhpcy5mb2N1c1RyYXAudW5wYXVzZSgpfWVsc2UgZS5jb250YWluZXJFbGVtZW50cyE9PXRoaXMucHJvcHMuY29udGFpbmVyRWxlbWVudHMmJih0aGlzLmZvY3VzVHJhcEVsZW1lbnRzPXRoaXMucHJvcHMuY29udGFpbmVyRWxlbWVudHMpLHRoaXMucHJvcHMuYWN0aXZlJiYodGhpcy51cGRhdGVQcmV2aW91c0VsZW1lbnQoKSx0aGlzLnNldHVwRm9jdXNUcmFwKCkpfX0se2tleTpcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRlYWN0aXZhdGVUcmFwKCl9fSx7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcy5jaGlsZHJlbj9zLkNoaWxkcmVuLm9ubHkodGhpcy5wcm9wcy5jaGlsZHJlbik6dm9pZCAwO2lmKHQpe2lmKHQudHlwZSYmdC50eXBlPT09cy5GcmFnbWVudCl0aHJvdyBuZXcgRXJyb3IoXCJBIGZvY3VzLXRyYXAgY2Fubm90IHVzZSBhIEZyYWdtZW50IGFzIGl0cyBjaGlsZCBjb250YWluZXIuIFRyeSByZXBsYWNpbmcgaXQgd2l0aCBhIDxkaXY+IGVsZW1lbnQuXCIpO3JldHVybiBzLmNsb25lRWxlbWVudCh0LHtyZWY6ZnVuY3Rpb24obil7dmFyIHI9ZS5wcm9wcy5jb250YWluZXJFbGVtZW50czt0JiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC5yZWY/dC5yZWYobik6dC5yZWYmJih0LnJlZi5jdXJyZW50PW4pKSxlLmZvY3VzVHJhcEVsZW1lbnRzPXJ8fFtuXX19KX1yZXR1cm4gbnVsbH19XSkmJmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGwoci5rZXkpLHIpfX0odC5wcm90b3R5cGUsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KSxmfShzLkNvbXBvbmVudCksZj1cInVuZGVmaW5lZFwiPT10eXBlb2YgRWxlbWVudD9GdW5jdGlvbjpFbGVtZW50O3AucHJvcFR5cGVzPXthY3RpdmU6Yy5ib29sLHBhdXNlZDpjLmJvb2wsZm9jdXNUcmFwT3B0aW9uczpjLnNoYXBlKHtkb2N1bWVudDpjLm9iamVjdCxvbkFjdGl2YXRlOmMuZnVuYyxvblBvc3RBY3RpdmF0ZTpjLmZ1bmMsY2hlY2tDYW5Gb2N1c1RyYXA6Yy5mdW5jLG9uRGVhY3RpdmF0ZTpjLmZ1bmMsb25Qb3N0RGVhY3RpdmF0ZTpjLmZ1bmMsY2hlY2tDYW5SZXR1cm5Gb2N1czpjLmZ1bmMsaW5pdGlhbEZvY3VzOmMub25lT2ZUeXBlKFtjLmluc3RhbmNlT2YoZiksYy5zdHJpbmcsYy5ib29sLGMuZnVuY10pLGZhbGxiYWNrRm9jdXM6Yy5vbmVPZlR5cGUoW2MuaW5zdGFuY2VPZihmKSxjLnN0cmluZyxjLmZ1bmNdKSxlc2NhcGVEZWFjdGl2YXRlczpjLm9uZU9mVHlwZShbYy5ib29sLGMuZnVuY10pLGNsaWNrT3V0c2lkZURlYWN0aXZhdGVzOmMub25lT2ZUeXBlKFtjLmJvb2wsYy5mdW5jXSkscmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6Yy5ib29sLHNldFJldHVybkZvY3VzOmMub25lT2ZUeXBlKFtjLmluc3RhbmNlT2YoZiksYy5zdHJpbmcsYy5ib29sLGMuZnVuY10pLGFsbG93T3V0c2lkZUNsaWNrOmMub25lT2ZUeXBlKFtjLmJvb2wsYy5mdW5jXSkscHJldmVudFNjcm9sbDpjLmJvb2wsdGFiYmFibGVPcHRpb25zOmMuc2hhcGUoe2Rpc3BsYXlDaGVjazpjLm9uZU9mKFtcImZ1bGxcIixcImxlZ2FjeS1mdWxsXCIsXCJub24temVyby1hcmVhXCIsXCJub25lXCJdKSxnZXRTaGFkb3dSb290OmMub25lT2ZUeXBlKFtjLmJvb2wsYy5mdW5jXSl9KSx0cmFwU3RhY2s6Yy5hcnJheSxpc0tleUZvcndhcmQ6Yy5mdW5jLGlzS2V5QmFja3dhcmQ6Yy5mdW5jfSksY29udGFpbmVyRWxlbWVudHM6Yy5hcnJheU9mKGMuaW5zdGFuY2VPZihmKSksY2hpbGRyZW46Yy5vbmVPZlR5cGUoW2MuZWxlbWVudCxjLmluc3RhbmNlT2YoZildKX0scC5kZWZhdWx0UHJvcHM9e2FjdGl2ZTohMCxwYXVzZWQ6ITEsZm9jdXNUcmFwT3B0aW9uczp7fSxfY3JlYXRlRm9jdXNUcmFwOnV9LGUuZXhwb3J0cz1wfSw1MzAzOihlLHQsbik9PntuLnIodCksbi5kKHQse2NyZWF0ZUZvY3VzVHJhcDooKT0+Z30pO3ZhciByPW4oODM4OCk7ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9vKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7aShlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6byhPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4odD1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiBlfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgbj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bil7dmFyIHI9bi5jYWxsKGUsXCJzdHJpbmdcIik7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpfXJldHVybiBTdHJpbmcoZSl9KGUpO3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0P3Q6U3RyaW5nKHQpfSh0KSlpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX12YXIgbD1mdW5jdGlvbihlKXtyZXR1cm5cIlRhYlwiPT09ZS5rZXl8fDk9PT1lLmtleUNvZGV9LHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSkmJiFlLnNoaWZ0S2V5fSxjPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUpJiZlLnNoaWZ0S2V5fSx1PWZ1bmN0aW9uKGUpe3JldHVybiBzZXRUaW1lb3V0KGUsMCl9LGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj0tMTtyZXR1cm4gZS5ldmVyeSgoZnVuY3Rpb24oZSxyKXtyZXR1cm4hdChlKXx8KG49ciwhMSl9KSksbn0scD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lLmFwcGx5KHZvaWQgMCxuKTplfSxmPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRhcmdldC5zaGFkb3dSb290JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNvbXBvc2VkUGF0aD9lLmNvbXBvc2VkUGF0aCgpWzBdOmUudGFyZ2V0fSxoPVtdLGc9ZnVuY3Rpb24oZSx0KXt2YXIgbixvPShudWxsPT10P3ZvaWQgMDp0LmRvY3VtZW50KXx8ZG9jdW1lbnQsaT0obnVsbD09dD92b2lkIDA6dC50cmFwU3RhY2spfHxoLGc9YSh7cmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6ITAsZXNjYXBlRGVhY3RpdmF0ZXM6ITAsZGVsYXlJbml0aWFsRm9jdXM6ITAsaXNLZXlGb3J3YXJkOnMsaXNLZXlCYWNrd2FyZDpjfSx0KSx2PXtjb250YWluZXJzOltdLGNvbnRhaW5lckdyb3VwczpbXSx0YWJiYWJsZUdyb3VwczpbXSxub2RlRm9jdXNlZEJlZm9yZUFjdGl2YXRpb246bnVsbCxtb3N0UmVjZW50bHlGb2N1c2VkTm9kZTpudWxsLGFjdGl2ZTohMSxwYXVzZWQ6ITEsZGVsYXlJbml0aWFsRm9jdXNUaW1lcjp2b2lkIDB9LEM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlJiZ2b2lkIDAhPT1lW3RdP2VbdF06Z1tufHx0XX0sbT1mdW5jdGlvbihlKXtyZXR1cm4gdi5jb250YWluZXJHcm91cHMuZmluZEluZGV4KChmdW5jdGlvbih0KXt2YXIgbj10LmNvbnRhaW5lcixyPXQudGFiYmFibGVOb2RlcztyZXR1cm4gbi5jb250YWlucyhlKXx8ci5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdD09PWV9KSl9KSl9LHc9ZnVuY3Rpb24oZSl7dmFyIHQ9Z1tlXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShuPjE/bi0xOjApLGE9MTthPG47YSsrKXJbYS0xXT1hcmd1bWVudHNbYV07dD10LmFwcGx5KHZvaWQgMCxyKX1pZighMD09PXQmJih0PXZvaWQgMCksIXQpe2lmKHZvaWQgMD09PXR8fCExPT09dClyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoXCJgXCIuY29uY2F0KGUsXCJgIHdhcyBzcGVjaWZpZWQgYnV0IHdhcyBub3QgYSBub2RlLCBvciBkaWQgbm90IHJldHVybiBhIG5vZGVcIikpfXZhciBpPXQ7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJiEoaT1vLnF1ZXJ5U2VsZWN0b3IodCkpKXRocm93IG5ldyBFcnJvcihcImBcIi5jb25jYXQoZSxcImAgYXMgc2VsZWN0b3IgcmVmZXJzIHRvIG5vIGtub3duIG5vZGVcIikpO3JldHVybiBpfSxiPWZ1bmN0aW9uKCl7dmFyIGU9dyhcImluaXRpYWxGb2N1c1wiKTtpZighMT09PWUpcmV0dXJuITE7aWYodm9pZCAwPT09ZSlpZihtKG8uYWN0aXZlRWxlbWVudCk+PTApZT1vLmFjdGl2ZUVsZW1lbnQ7ZWxzZXt2YXIgdD12LnRhYmJhYmxlR3JvdXBzWzBdO2U9dCYmdC5maXJzdFRhYmJhYmxlTm9kZXx8dyhcImZhbGxiYWNrRm9jdXNcIil9aWYoIWUpdGhyb3cgbmV3IEVycm9yKFwiWW91ciBmb2N1cy10cmFwIG5lZWRzIHRvIGhhdmUgYXQgbGVhc3Qgb25lIGZvY3VzYWJsZSBlbGVtZW50XCIpO3JldHVybiBlfSx5PWZ1bmN0aW9uKCl7aWYodi5jb250YWluZXJHcm91cHM9di5jb250YWluZXJzLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHQ9KDAsci50YWJiYWJsZSkoZSxnLnRhYmJhYmxlT3B0aW9ucyksbj0oMCxyLmZvY3VzYWJsZSkoZSxnLnRhYmJhYmxlT3B0aW9ucyk7cmV0dXJue2NvbnRhaW5lcjplLHRhYmJhYmxlTm9kZXM6dCxmb2N1c2FibGVOb2RlczpuLGZpcnN0VGFiYmFibGVOb2RlOnQubGVuZ3RoPjA/dFswXTpudWxsLGxhc3RUYWJiYWJsZU5vZGU6dC5sZW5ndGg+MD90W3QubGVuZ3RoLTFdOm51bGwsbmV4dFRhYmJhYmxlTm9kZTpmdW5jdGlvbihlKXt2YXIgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLG89bi5maW5kSW5kZXgoKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZX0pKTtpZighKG88MCkpcmV0dXJuIHQ/bi5zbGljZShvKzEpLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybigwLHIuaXNUYWJiYWJsZSkoZSxnLnRhYmJhYmxlT3B0aW9ucyl9KSk6bi5zbGljZSgwLG8pLnJldmVyc2UoKS5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4oMCxyLmlzVGFiYmFibGUpKGUsZy50YWJiYWJsZU9wdGlvbnMpfSkpfX19KSksdi50YWJiYWJsZUdyb3Vwcz12LmNvbnRhaW5lckdyb3Vwcy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhYmJhYmxlTm9kZXMubGVuZ3RoPjB9KSksdi50YWJiYWJsZUdyb3Vwcy5sZW5ndGg8PTAmJiF3KFwiZmFsbGJhY2tGb2N1c1wiKSl0aHJvdyBuZXcgRXJyb3IoXCJZb3VyIGZvY3VzLXRyYXAgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBjb250YWluZXIgd2l0aCBhdCBsZWFzdCBvbmUgdGFiYmFibGUgbm9kZSBpbiBpdCBhdCBhbGwgdGltZXNcIil9LHg9ZnVuY3Rpb24gZSh0KXshMSE9PXQmJnQhPT1vLmFjdGl2ZUVsZW1lbnQmJih0JiZ0LmZvY3VzPyh0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEhZy5wcmV2ZW50U2Nyb2xsfSksdi5tb3N0UmVjZW50bHlGb2N1c2VkTm9kZT10LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhZ05hbWUmJlwiaW5wdXRcIj09PWUudGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnNlbGVjdH0odCkmJnQuc2VsZWN0KCkpOmUoYigpKSl9LGs9ZnVuY3Rpb24oZSl7dmFyIHQ9dyhcInNldFJldHVybkZvY3VzXCIsZSk7cmV0dXJuIHR8fCExIT09dCYmZX0sUz1mdW5jdGlvbihlKXt2YXIgdD1mKGUpO20odCk+PTB8fChwKGcuY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXMsZSk/bi5kZWFjdGl2YXRlKHtyZXR1cm5Gb2N1czpnLnJldHVybkZvY3VzT25EZWFjdGl2YXRlfSk6cChnLmFsbG93T3V0c2lkZUNsaWNrLGUpfHxlLnByZXZlbnREZWZhdWx0KCkpfSxPPWZ1bmN0aW9uKGUpe3ZhciB0PWYoZSksbj1tKHQpPj0wO258fHQgaW5zdGFuY2VvZiBEb2N1bWVudD9uJiYodi5tb3N0UmVjZW50bHlGb2N1c2VkTm9kZT10KTooZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx4KHYubW9zdFJlY2VudGx5Rm9jdXNlZE5vZGV8fGIoKSkpfSxNPWZ1bmN0aW9uKGUpe2lmKChcIkVzY2FwZVwiPT09KHQ9ZSkua2V5fHxcIkVzY1wiPT09dC5rZXl8fDI3PT09dC5rZXlDb2RlKSYmITEhPT1wKGcuZXNjYXBlRGVhY3RpdmF0ZXMsZSkpcmV0dXJuIGUucHJldmVudERlZmF1bHQoKSx2b2lkIG4uZGVhY3RpdmF0ZSgpO3ZhciB0OyhnLmlzS2V5Rm9yd2FyZChlKXx8Zy5pc0tleUJhY2t3YXJkKGUpKSYmZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxuPWYoZSk7eSgpO3ZhciBvPW51bGw7aWYodi50YWJiYWJsZUdyb3Vwcy5sZW5ndGg+MCl7dmFyIGE9bShuKSxpPWE+PTA/di5jb250YWluZXJHcm91cHNbYV06dm9pZCAwO2lmKGE8MClvPXQ/di50YWJiYWJsZUdyb3Vwc1t2LnRhYmJhYmxlR3JvdXBzLmxlbmd0aC0xXS5sYXN0VGFiYmFibGVOb2RlOnYudGFiYmFibGVHcm91cHNbMF0uZmlyc3RUYWJiYWJsZU5vZGU7ZWxzZSBpZih0KXt2YXIgcz1kKHYudGFiYmFibGVHcm91cHMsKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZmlyc3RUYWJiYWJsZU5vZGU7cmV0dXJuIG49PT10fSkpO2lmKHM8MCYmKGkuY29udGFpbmVyPT09bnx8KDAsci5pc0ZvY3VzYWJsZSkobixnLnRhYmJhYmxlT3B0aW9ucykmJiEoMCxyLmlzVGFiYmFibGUpKG4sZy50YWJiYWJsZU9wdGlvbnMpJiYhaS5uZXh0VGFiYmFibGVOb2RlKG4sITEpKSYmKHM9YSkscz49MCl7dmFyIGM9MD09PXM/di50YWJiYWJsZUdyb3Vwcy5sZW5ndGgtMTpzLTE7bz12LnRhYmJhYmxlR3JvdXBzW2NdLmxhc3RUYWJiYWJsZU5vZGV9ZWxzZSBsKGUpfHwobz1pLm5leHRUYWJiYWJsZU5vZGUobiwhMSkpfWVsc2V7dmFyIHU9ZCh2LnRhYmJhYmxlR3JvdXBzLChmdW5jdGlvbihlKXt2YXIgdD1lLmxhc3RUYWJiYWJsZU5vZGU7cmV0dXJuIG49PT10fSkpO2lmKHU8MCYmKGkuY29udGFpbmVyPT09bnx8KDAsci5pc0ZvY3VzYWJsZSkobixnLnRhYmJhYmxlT3B0aW9ucykmJiEoMCxyLmlzVGFiYmFibGUpKG4sZy50YWJiYWJsZU9wdGlvbnMpJiYhaS5uZXh0VGFiYmFibGVOb2RlKG4pKSYmKHU9YSksdT49MCl7dmFyIHA9dT09PXYudGFiYmFibGVHcm91cHMubGVuZ3RoLTE/MDp1KzE7bz12LnRhYmJhYmxlR3JvdXBzW3BdLmZpcnN0VGFiYmFibGVOb2RlfWVsc2UgbChlKXx8KG89aS5uZXh0VGFiYmFibGVOb2RlKG4pKX19ZWxzZSBvPXcoXCJmYWxsYmFja0ZvY3VzXCIpO28mJihsKGUpJiZlLnByZXZlbnREZWZhdWx0KCkseChvKSl9KGUsZy5pc0tleUJhY2t3YXJkKGUpKX0sTD1mdW5jdGlvbihlKXt2YXIgdD1mKGUpO20odCk+PTB8fHAoZy5jbGlja091dHNpZGVEZWFjdGl2YXRlcyxlKXx8cChnLmFsbG93T3V0c2lkZUNsaWNrLGUpfHwoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfSxfPWZ1bmN0aW9uKCl7aWYodi5hY3RpdmUpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoZS5sZW5ndGg+MCl7dmFyIG49ZVtlLmxlbmd0aC0xXTtuIT09dCYmbi5wYXVzZSgpfXZhciByPWUuaW5kZXhPZih0KTstMT09PXJ8fGUuc3BsaWNlKHIsMSksZS5wdXNoKHQpfShpLG4pLHYuZGVsYXlJbml0aWFsRm9jdXNUaW1lcj1nLmRlbGF5SW5pdGlhbEZvY3VzP3UoKGZ1bmN0aW9uKCl7eChiKCkpfSkpOngoYigpKSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsTywhMCksby5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsUyx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksby5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLFMse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pLG8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsTCx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksby5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLE0se2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pLG59LFA9ZnVuY3Rpb24oKXtpZih2LmFjdGl2ZSlyZXR1cm4gby5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNpblwiLE8sITApLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLFMsITApLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIixTLCEwKSxvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLEwsITApLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixNLCEwKSxufTtyZXR1cm4obj17Z2V0IGFjdGl2ZSgpe3JldHVybiB2LmFjdGl2ZX0sZ2V0IHBhdXNlZCgpe3JldHVybiB2LnBhdXNlZH0sYWN0aXZhdGU6ZnVuY3Rpb24oZSl7aWYodi5hY3RpdmUpcmV0dXJuIHRoaXM7dmFyIHQ9QyhlLFwib25BY3RpdmF0ZVwiKSxuPUMoZSxcIm9uUG9zdEFjdGl2YXRlXCIpLHI9QyhlLFwiY2hlY2tDYW5Gb2N1c1RyYXBcIik7cnx8eSgpLHYuYWN0aXZlPSEwLHYucGF1c2VkPSExLHYubm9kZUZvY3VzZWRCZWZvcmVBY3RpdmF0aW9uPW8uYWN0aXZlRWxlbWVudCx0JiZ0KCk7dmFyIGE9ZnVuY3Rpb24oKXtyJiZ5KCksXygpLG4mJm4oKX07cmV0dXJuIHI/KHIodi5jb250YWluZXJzLmNvbmNhdCgpKS50aGVuKGEsYSksdGhpcyk6KGEoKSx0aGlzKX0sZGVhY3RpdmF0ZTpmdW5jdGlvbihlKXtpZighdi5hY3RpdmUpcmV0dXJuIHRoaXM7dmFyIHQ9YSh7b25EZWFjdGl2YXRlOmcub25EZWFjdGl2YXRlLG9uUG9zdERlYWN0aXZhdGU6Zy5vblBvc3REZWFjdGl2YXRlLGNoZWNrQ2FuUmV0dXJuRm9jdXM6Zy5jaGVja0NhblJldHVybkZvY3VzfSxlKTtjbGVhclRpbWVvdXQodi5kZWxheUluaXRpYWxGb2N1c1RpbWVyKSx2LmRlbGF5SW5pdGlhbEZvY3VzVGltZXI9dm9pZCAwLFAoKSx2LmFjdGl2ZT0hMSx2LnBhdXNlZD0hMSxmdW5jdGlvbihlLHQpe3ZhciBuPWUuaW5kZXhPZih0KTstMSE9PW4mJmUuc3BsaWNlKG4sMSksZS5sZW5ndGg+MCYmZVtlLmxlbmd0aC0xXS51bnBhdXNlKCl9KGksbik7dmFyIHI9Qyh0LFwib25EZWFjdGl2YXRlXCIpLG89Qyh0LFwib25Qb3N0RGVhY3RpdmF0ZVwiKSxsPUModCxcImNoZWNrQ2FuUmV0dXJuRm9jdXNcIikscz1DKHQsXCJyZXR1cm5Gb2N1c1wiLFwicmV0dXJuRm9jdXNPbkRlYWN0aXZhdGVcIik7ciYmcigpO3ZhciBjPWZ1bmN0aW9uKCl7dSgoZnVuY3Rpb24oKXtzJiZ4KGsodi5ub2RlRm9jdXNlZEJlZm9yZUFjdGl2YXRpb24pKSxvJiZvKCl9KSl9O3JldHVybiBzJiZsPyhsKGsodi5ub2RlRm9jdXNlZEJlZm9yZUFjdGl2YXRpb24pKS50aGVuKGMsYyksdGhpcyk6KGMoKSx0aGlzKX0scGF1c2U6ZnVuY3Rpb24oKXtyZXR1cm4gdi5wYXVzZWR8fCF2LmFjdGl2ZXx8KHYucGF1c2VkPSEwLFAoKSksdGhpc30sdW5wYXVzZTpmdW5jdGlvbigpe3JldHVybiB2LnBhdXNlZCYmdi5hY3RpdmU/KHYucGF1c2VkPSExLHkoKSxfKCksdGhpcyk6dGhpc30sdXBkYXRlQ29udGFpbmVyRWxlbWVudHM6ZnVuY3Rpb24oZSl7dmFyIHQ9W10uY29uY2F0KGUpLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gdi5jb250YWluZXJzPXQubWFwKChmdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT9vLnF1ZXJ5U2VsZWN0b3IoZSk6ZX0pKSx2LmFjdGl2ZSYmeSgpLHRoaXN9fSkudXBkYXRlQ29udGFpbmVyRWxlbWVudHMoZSksbn19LDkxNDE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPW4oNjU1KSxvPW4oNjY4OSksYT1uKDQzOTQpLGk9bigzNTczKSxsPW4oOTI5NCkscz1uKDQ4MzkpO2Z1bmN0aW9uIGMoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdT1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZSYmT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7aWYoXCJkZWZhdWx0XCIhPT1uKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbixyLmdldD9yOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW25dfX0pfX0pKSx0LmRlZmF1bHQ9ZSxPYmplY3QuZnJlZXplKHQpfShvKSxkPWMobykscD1jKHMpLGY9ZnVuY3Rpb24oZSl7cmV0dXJue2lzRW5hYmxlZDpmdW5jdGlvbih0KXtyZXR1cm4gZS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4hIXRbZV19KSl9fX0saD17bWVhc3VyZUxheW91dDpmKFtcImxheW91dFwiLFwibGF5b3V0SWRcIixcImRyYWdcIixcIl9sYXlvdXRSZXNldFRyYW5zZm9ybVwiXSksYW5pbWF0aW9uOmYoW1wiYW5pbWF0ZVwiLFwiZXhpdFwiLFwidmFyaWFudHNcIixcIndoaWxlSG92ZXJcIixcIndoaWxlVGFwXCIsXCJ3aGlsZUZvY3VzXCIsXCJ3aGlsZURyYWdcIl0pLGV4aXQ6ZihbXCJleGl0XCJdKSxkcmFnOmYoW1wiZHJhZ1wiLFwiZHJhZ0NvbnRyb2xzXCJdKSxmb2N1czpmKFtcIndoaWxlRm9jdXNcIl0pLGhvdmVyOmYoW1wid2hpbGVIb3ZlclwiLFwib25Ib3ZlclN0YXJ0XCIsXCJvbkhvdmVyRW5kXCJdKSx0YXA6ZihbXCJ3aGlsZVRhcFwiLFwib25UYXBcIixcIm9uVGFwU3RhcnRcIixcIm9uVGFwQ2FuY2VsXCJdKSxwYW46ZihbXCJvblBhblwiLFwib25QYW5TdGFydFwiLFwib25QYW5TZXNzaW9uU3RhcnRcIixcIm9uUGFuRW5kXCJdKSxsYXlvdXRBbmltYXRpb246ZihbXCJsYXlvdXRcIixcImxheW91dElkXCJdKX07ZnVuY3Rpb24gZyhlKXtmb3IodmFyIHQgaW4gZSl7dmFyIG49ZVt0XTtudWxsIT09biYmKGhbdF0uQ29tcG9uZW50PW4pfX12YXIgdj1vLmNyZWF0ZUNvbnRleHQoe3N0cmljdDohMX0pLEM9T2JqZWN0LmtleXMoaCksbT1DLmxlbmd0aCx3PW8uY3JlYXRlQ29udGV4dCh7dHJhbnNmb3JtUGFnZVBvaW50OmZ1bmN0aW9uKGUpe3JldHVybiBlfSxpc1N0YXRpYzohMX0pLGI9by5jcmVhdGVDb250ZXh0KHt9KTtmdW5jdGlvbiB5KCl7cmV0dXJuIG8udXNlQ29udGV4dChiKS52aXN1YWxFbGVtZW50fXZhciB4PW8uY3JlYXRlQ29udGV4dChudWxsKTtmdW5jdGlvbiBrKGUpe3ZhciB0PW8udXNlUmVmKG51bGwpO3JldHVybiBudWxsPT09dC5jdXJyZW50JiYodC5jdXJyZW50PWUoKSksdC5jdXJyZW50fWZ1bmN0aW9uIFMoKXt2YXIgZT1vLnVzZUNvbnRleHQoeCk7aWYobnVsbD09PWUpcmV0dXJuWyEwLG51bGxdO3ZhciB0PWUuaXNQcmVzZW50LG49ZS5vbkV4aXRDb21wbGV0ZSxyPWUucmVnaXN0ZXIsYT1fKCk7cmV0dXJuIG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiByKGEpfSksW10pLCF0JiZuP1shMSxmdW5jdGlvbigpe3JldHVybiBudWxsPT1uP3ZvaWQgMDpuKGEpfV06WyEwXX1mdW5jdGlvbiBPKGUpe3JldHVybiBudWxsPT09ZXx8ZS5pc1ByZXNlbnR9dmFyIE09MCxMPWZ1bmN0aW9uKCl7cmV0dXJuIE0rK30sXz1mdW5jdGlvbigpe3JldHVybiBrKEwpfSxQPW8uY3JlYXRlQ29udGV4dChudWxsKSxFPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3csaj1FP28udXNlTGF5b3V0RWZmZWN0Om8udXNlRWZmZWN0O2Z1bmN0aW9uIFIoZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLFwiY3VycmVudFwiKX1mdW5jdGlvbiBJKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIFYoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fEkoZSl9ZnVuY3Rpb24gSChlLHQsbixyLG8pe3ZhciBhO3JldHVybiB2b2lkIDA9PT1yJiYocj17fSksdm9pZCAwPT09byYmKG89e30pLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1udWxsPT09KGE9ZS52YXJpYW50cyl8fHZvaWQgMD09PWE/dm9pZCAwOmFbdF0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dChudWxsIT1uP246ZS5jdXN0b20scixvKTp0fWZ1bmN0aW9uIEEoZSx0LG4pe3ZhciByPWUuZ2V0UHJvcHMoKTtyZXR1cm4gSChyLHQsbnVsbCE9bj9uOnIuY3VzdG9tLGZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBlLmZvckVhY2hWYWx1ZSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdFtuXT1lLmdldCgpfSkpLHR9KGUpLGZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBlLmZvckVhY2hWYWx1ZSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdFtuXT1lLmdldFZlbG9jaXR5KCl9KSksdH0oZSkpfWZ1bmN0aW9uIFQoZSl7dmFyIHQ7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YobnVsbD09PSh0PWUuYW5pbWF0ZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuc3RhcnQpfHxWKGUuaW5pdGlhbCl8fFYoZS5hbmltYXRlKXx8VihlLndoaWxlSG92ZXIpfHxWKGUud2hpbGVEcmFnKXx8VihlLndoaWxlVGFwKXx8VihlLndoaWxlRm9jdXMpfHxWKGUuZXhpdCl9ZnVuY3Rpb24gRChlKXtyZXR1cm4gQm9vbGVhbihUKGUpfHxlLnZhcmlhbnRzKX1mdW5jdGlvbiBCKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2Uuam9pbihcIiBcIik6ZX1mdW5jdGlvbiBaKGUpe3ZhciB0PWUucHJlbG9hZGVkRmVhdHVyZXMsbj1lLmNyZWF0ZVZpc3VhbEVsZW1lbnQsYT1lLnVzZVJlbmRlcixpPWUudXNlVmlzdWFsU3RhdGUsbD1lLkNvbXBvbmVudDtyZXR1cm4gdCYmZyh0KSxvLmZvcndhcmRSZWYoKGZ1bmN0aW9uKGUsdCl7dmFyIHM9by51c2VDb250ZXh0KHcpLmlzU3RhdGljLGM9bnVsbCxkPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSx0KXtpZihUKGUpKXt2YXIgbj1lLmluaXRpYWwscj1lLmFuaW1hdGU7cmV0dXJue2luaXRpYWw6ITE9PT1ufHxWKG4pP246dm9pZCAwLGFuaW1hdGU6VihyKT9yOnZvaWQgMH19cmV0dXJuITEhPT1lLmluaGVyaXQ/dDp7fX0oZSxvLnVzZUNvbnRleHQoYikpLHI9bi5pbml0aWFsLGE9bi5hbmltYXRlO3JldHVybiBvLnVzZU1lbW8oKGZ1bmN0aW9uKCl7cmV0dXJue2luaXRpYWw6cixhbmltYXRlOmF9fSksdD9bQihyKSxCKGEpXTpbXSl9KGUscykscD1pKGUscyk7cmV0dXJuIXMmJkUmJihkLnZpc3VhbEVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4sYSl7dmFyIGk9by51c2VDb250ZXh0KHcpLGw9by51c2VDb250ZXh0KHYpLHM9eSgpLGM9by51c2VDb250ZXh0KHgpLHU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sYXlvdXRJZCxuPW8udXNlQ29udGV4dChQKTtyZXR1cm4gbiYmdm9pZCAwIT09dD9uK1wiLVwiK3Q6dH0obiksZD1vLnVzZVJlZih2b2lkIDApO2F8fChhPWwucmVuZGVyZXIpLCFkLmN1cnJlbnQmJmEmJihkLmN1cnJlbnQ9YShlLHt2aXN1YWxTdGF0ZTp0LHBhcmVudDpzLHByb3BzOnIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxuKSx7bGF5b3V0SWQ6dX0pLHByZXNlbmNlSWQ6bnVsbD09Yz92b2lkIDA6Yy5pZCxibG9ja0luaXRpYWxBbmltYXRpb246ITE9PT0obnVsbD09Yz92b2lkIDA6Yy5pbml0aWFsKX0pKTt2YXIgcD1kLmN1cnJlbnQ7cmV0dXJuIGooKGZ1bmN0aW9uKCl7cCYmKHAuc2V0UHJvcHMoci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30saSksbikse2xheW91dElkOnV9KSkscC5pc1ByZXNlbnQ9TyhjKSxwLmlzUHJlc2VuY2VSb290PSFzfHxzLnByZXNlbmNlSWQhPT0obnVsbD09Yz92b2lkIDA6Yy5pZCkscC5zeW5jUmVuZGVyKCkpfSkpLG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3ZhciBlO3AmJihudWxsPT09KGU9cC5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PWV8fGUuYW5pbWF0ZUNoYW5nZXMoKSl9KSksaigoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09cD92b2lkIDA6cC5ub3RpZnlVbm1vdW50KCl9fSksW10pLHB9KGwscCxlLG4pLGM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBhPVtdO2lmKG8udXNlQ29udGV4dCh2KSwhdClyZXR1cm4gbnVsbDtmb3IodmFyIGk9MDtpPG07aSsrKXt2YXIgbD1DW2ldLHM9aFtsXSxjPXMuaXNFbmFibGVkLGQ9cy5Db21wb25lbnQ7YyhlKSYmZCYmYS5wdXNoKHUuY3JlYXRlRWxlbWVudChkLHIuX19hc3NpZ24oe2tleTpsfSxlLHt2aXN1YWxFbGVtZW50OnR9KSkpfXJldHVybiBhfShlLGQudmlzdWFsRWxlbWVudCkpLHUuY3JlYXRlRWxlbWVudCh1LkZyYWdtZW50LG51bGwsdS5jcmVhdGVFbGVtZW50KGIuUHJvdmlkZXIse3ZhbHVlOmR9LGEobCxlLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gby51c2VDYWxsYmFjaygoZnVuY3Rpb24ocil7dmFyIG87ciYmKG51bGw9PT0obz1lLm1vdW50KXx8dm9pZCAwPT09b3x8by5jYWxsKGUscikpLHQmJihyP3QubW91bnQocik6dC51bm1vdW50KCkpLG4mJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuP24ocik6UihuKSYmKG4uY3VycmVudD1yKSl9KSxbdF0pfShwLGQudmlzdWFsRWxlbWVudCx0KSxwLHMpKSxjKX0pKX1mdW5jdGlvbiAkKGUpe2Z1bmN0aW9uIHQodCxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLFooZSh0LG4pKX12YXIgbj1uZXcgTWFwO3JldHVybiBuZXcgUHJveHkodCx7Z2V0OmZ1bmN0aW9uKGUscil7cmV0dXJuIG4uaGFzKHIpfHxuLnNldChyLHQocikpLG4uZ2V0KHIpfX0pfXZhciBOPVtcImFuaW1hdGVcIixcImNpcmNsZVwiLFwiZGVmc1wiLFwiZGVzY1wiLFwiZWxsaXBzZVwiLFwiZ1wiLFwiaW1hZ2VcIixcImxpbmVcIixcImZpbHRlclwiLFwibWFya2VyXCIsXCJtYXNrXCIsXCJtZXRhZGF0YVwiLFwicGF0aFwiLFwicGF0dGVyblwiLFwicG9seWdvblwiLFwicG9seWxpbmVcIixcInJlY3RcIixcInN0b3BcIixcInN2Z1wiLFwic3dpdGNoXCIsXCJzeW1ib2xcIixcInRleHRcIixcInRzcGFuXCIsXCJ1c2VcIixcInZpZXdcIl07ZnVuY3Rpb24gRihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmIWUuaW5jbHVkZXMoXCItXCIpJiYhIShOLmluZGV4T2YoZSk+LTF8fC9bQS1aXS8udGVzdChlKSl9dmFyIFc9e307ZnVuY3Rpb24gVShlKXtmb3IodmFyIHQgaW4gZSlXW3RdPWVbdF19dmFyIHo9W1wiXCIsXCJYXCIsXCJZXCIsXCJaXCJdLEc9W1widHJhbnNmb3JtUGVyc3BlY3RpdmVcIixcInhcIixcInlcIixcInpcIl07ZnVuY3Rpb24gSyhlLHQpe3JldHVybiBHLmluZGV4T2YoZSktRy5pbmRleE9mKHQpfVtcInRyYW5zbGF0ZVwiLFwic2NhbGVcIixcInJvdGF0ZVwiLFwic2tld1wiXS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gei5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gRy5wdXNoKGUrdCl9KSl9KSk7dmFyIHE9bmV3IFNldChHKTtmdW5jdGlvbiBZKGUpe3JldHVybiBxLmhhcyhlKX12YXIgSj1uZXcgU2V0KFtcIm9yaWdpblhcIixcIm9yaWdpbllcIixcIm9yaWdpblpcIl0pO2Z1bmN0aW9uIFgoZSl7cmV0dXJuIEouaGFzKGUpfWZ1bmN0aW9uIFEoZSx0KXt2YXIgbj10LmxheW91dCxyPXQubGF5b3V0SWQ7cmV0dXJuIFkoZSl8fFgoZSl8fChufHx2b2lkIDAhPT1yKSYmKCEhV1tlXXx8XCJvcGFjaXR5XCI9PT1lKX12YXIgZWU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmZS5nZXRWZWxvY2l0eX0sdGU9e3g6XCJ0cmFuc2xhdGVYXCIseTpcInRyYW5zbGF0ZVlcIix6OlwidHJhbnNsYXRlWlwiLHRyYW5zZm9ybVBlcnNwZWN0aXZlOlwicGVyc3BlY3RpdmVcIn07ZnVuY3Rpb24gbmUoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aChcIi0tXCIpfXZhciByZT1mdW5jdGlvbihlLHQpe3JldHVybiB0JiZcIm51bWJlclwiPT10eXBlb2YgZT90LnRyYW5zZm9ybShlKTplfSxvZT1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30saS5udW1iZXIpLHt0cmFuc2Zvcm06TWF0aC5yb3VuZH0pLGFlPXtib3JkZXJXaWR0aDppLnB4LGJvcmRlclRvcFdpZHRoOmkucHgsYm9yZGVyUmlnaHRXaWR0aDppLnB4LGJvcmRlckJvdHRvbVdpZHRoOmkucHgsYm9yZGVyTGVmdFdpZHRoOmkucHgsYm9yZGVyUmFkaXVzOmkucHgscmFkaXVzOmkucHgsYm9yZGVyVG9wTGVmdFJhZGl1czppLnB4LGJvcmRlclRvcFJpZ2h0UmFkaXVzOmkucHgsYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6aS5weCxib3JkZXJCb3R0b21MZWZ0UmFkaXVzOmkucHgsd2lkdGg6aS5weCxtYXhXaWR0aDppLnB4LGhlaWdodDppLnB4LG1heEhlaWdodDppLnB4LHNpemU6aS5weCx0b3A6aS5weCxyaWdodDppLnB4LGJvdHRvbTppLnB4LGxlZnQ6aS5weCxwYWRkaW5nOmkucHgscGFkZGluZ1RvcDppLnB4LHBhZGRpbmdSaWdodDppLnB4LHBhZGRpbmdCb3R0b206aS5weCxwYWRkaW5nTGVmdDppLnB4LG1hcmdpbjppLnB4LG1hcmdpblRvcDppLnB4LG1hcmdpblJpZ2h0OmkucHgsbWFyZ2luQm90dG9tOmkucHgsbWFyZ2luTGVmdDppLnB4LHJvdGF0ZTppLmRlZ3JlZXMscm90YXRlWDppLmRlZ3JlZXMscm90YXRlWTppLmRlZ3JlZXMscm90YXRlWjppLmRlZ3JlZXMsc2NhbGU6aS5zY2FsZSxzY2FsZVg6aS5zY2FsZSxzY2FsZVk6aS5zY2FsZSxzY2FsZVo6aS5zY2FsZSxza2V3OmkuZGVncmVlcyxza2V3WDppLmRlZ3JlZXMsc2tld1k6aS5kZWdyZWVzLGRpc3RhbmNlOmkucHgsdHJhbnNsYXRlWDppLnB4LHRyYW5zbGF0ZVk6aS5weCx0cmFuc2xhdGVaOmkucHgseDppLnB4LHk6aS5weCx6OmkucHgscGVyc3BlY3RpdmU6aS5weCx0cmFuc2Zvcm1QZXJzcGVjdGl2ZTppLnB4LG9wYWNpdHk6aS5hbHBoYSxvcmlnaW5YOmkucHJvZ3Jlc3NQZXJjZW50YWdlLG9yaWdpblk6aS5wcm9ncmVzc1BlcmNlbnRhZ2Usb3JpZ2luWjppLnB4LHpJbmRleDpvZSxmaWxsT3BhY2l0eTppLmFscGhhLHN0cm9rZU9wYWNpdHk6aS5hbHBoYSxudW1PY3RhdmVzOm9lfTtmdW5jdGlvbiBpZShlLHQsbixyLG8sYSxpLGwpe3ZhciBzLGM9ZS5zdHlsZSx1PWUudmFycyxkPWUudHJhbnNmb3JtLHA9ZS50cmFuc2Zvcm1LZXlzLGY9ZS50cmFuc2Zvcm1PcmlnaW47cC5sZW5ndGg9MDt2YXIgaD0hMSxnPSExLHY9ITA7Zm9yKHZhciBDIGluIHQpe3ZhciBtPXRbQ107aWYobmUoQykpdVtDXT1tO2Vsc2V7dmFyIHc9YWVbQ10sYj1yZShtLHcpO2lmKFkoQykpe2lmKGg9ITAsZFtDXT1iLHAucHVzaChDKSwhdiljb250aW51ZTttIT09KG51bGwhPT0ocz13LmRlZmF1bHQpJiZ2b2lkIDAhPT1zP3M6MCkmJih2PSExKX1lbHNlIGlmKFgoQykpZltDXT1iLGc9ITA7ZWxzZSBpZigobnVsbD09bj92b2lkIDA6bi5pc0h5ZHJhdGVkKSYmKG51bGw9PXI/dm9pZCAwOnIuaXNIeWRyYXRlZCkmJldbQ10pe3ZhciB5PVdbQ10ucHJvY2VzcyhtLHIsbikseD1XW0NdLmFwcGx5VG87aWYoeClmb3IodmFyIGs9eC5sZW5ndGgsUz0wO1M8aztTKyspY1t4W1NdXT15O2Vsc2UgY1tDXT15fWVsc2UgY1tDXT1ifX1yJiZuJiZpJiZsPyhjLnRyYW5zZm9ybT1pKHIuZGVsdGFGaW5hbCxyLnRyZWVTY2FsZSxoP2Q6dm9pZCAwKSxhJiYoYy50cmFuc2Zvcm09YShkLGMudHJhbnNmb3JtKSksYy50cmFuc2Zvcm1PcmlnaW49bChyKSk6KGgmJihjLnRyYW5zZm9ybT1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz1lLnRyYW5zZm9ybSxhPWUudHJhbnNmb3JtS2V5cyxpPXQuZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb24sbD12b2lkIDA9PT1pfHxpLHM9dC5hbGxvd1RyYW5zZm9ybU5vbmUsYz12b2lkIDA9PT1zfHxzLHU9XCJcIjthLnNvcnQoSyk7Zm9yKHZhciBkPSExLHA9YS5sZW5ndGgsZj0wO2Y8cDtmKyspe3ZhciBoPWFbZl07dSs9KHRlW2hdfHxoKStcIihcIitvW2hdK1wiKSBcIixcInpcIj09PWgmJihkPSEwKX1yZXR1cm4hZCYmbD91Kz1cInRyYW5zbGF0ZVooMClcIjp1PXUudHJpbSgpLHI/dT1yKG8sbj9cIlwiOnUpOmMmJm4mJih1PVwibm9uZVwiKSx1fShlLG8sdixhKSksZyYmKGMudHJhbnNmb3JtT3JpZ2luPWZ1bmN0aW9uKGUpe3ZhciB0PWUub3JpZ2luWCxuPXZvaWQgMD09PXQ/XCI1MCVcIjp0LHI9ZS5vcmlnaW5ZLG89dm9pZCAwPT09cj9cIjUwJVwiOnIsYT1lLm9yaWdpblo7cmV0dXJuIG4rXCIgXCIrbytcIiBcIisodm9pZCAwPT09YT8wOmEpfShmKSkpfXZhciBsZT1mdW5jdGlvbigpe3JldHVybntzdHlsZTp7fSx0cmFuc2Zvcm06e30sdHJhbnNmb3JtS2V5czpbXSx0cmFuc2Zvcm1PcmlnaW46e30sdmFyczp7fX19O2Z1bmN0aW9uIHNlKGUsdCxuKXtmb3IodmFyIHIgaW4gdCllZSh0W3JdKXx8UShyLG4pfHwoZVtyXT10W3JdKX1mdW5jdGlvbiBjZShlLHQsbil7dmFyIGE9e30saT1mdW5jdGlvbihlLHQsbil7dmFyIGE9e307cmV0dXJuIHNlKGEsZS5zdHlsZXx8e30sZSksT2JqZWN0LmFzc2lnbihhLGZ1bmN0aW9uKGUsdCxuKXt2YXIgYT1lLnRyYW5zZm9ybVRlbXBsYXRlO3JldHVybiBvLnVzZU1lbW8oKGZ1bmN0aW9uKCl7dmFyIGU9bGUoKTtpZShlLHQsdm9pZCAwLHZvaWQgMCx7ZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246IW59LGEpO3ZhciBvPWUudmFycyxpPWUuc3R5bGU7cmV0dXJuIHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxvKSxpKX0pLFt0XSl9KGUsdCxuKSksZS50cmFuc2Zvcm1WYWx1ZXMmJihhPWUudHJhbnNmb3JtVmFsdWVzKGEpKSxhfShlLHQsbik7cmV0dXJuIEJvb2xlYW4oZS5kcmFnKSYmKGEuZHJhZ2dhYmxlPSExLGkudXNlclNlbGVjdD1pLldlYmtpdFVzZXJTZWxlY3Q9aS5XZWJraXRUb3VjaENhbGxvdXQ9XCJub25lXCIsaS50b3VjaEFjdGlvbj0hMD09PWUuZHJhZz9cIm5vbmVcIjpcInBhbi1cIisoXCJ4XCI9PT1lLmRyYWc/XCJ5XCI6XCJ4XCIpKSxhLnN0eWxlPWksYX12YXIgdWU9bmV3IFNldChbXCJpbml0aWFsXCIsXCJhbmltYXRlXCIsXCJleGl0XCIsXCJzdHlsZVwiLFwidmFyaWFudHNcIixcInRyYW5zaXRpb25cIixcInRyYW5zZm9ybVRlbXBsYXRlXCIsXCJ0cmFuc2Zvcm1WYWx1ZXNcIixcImN1c3RvbVwiLFwiaW5oZXJpdFwiLFwibGF5b3V0XCIsXCJsYXlvdXRJZFwiLFwiX2xheW91dFJlc2V0VHJhbnNmb3JtXCIsXCJvbkxheW91dEFuaW1hdGlvbkNvbXBsZXRlXCIsXCJvblZpZXdwb3J0Qm94VXBkYXRlXCIsXCJvbkxheW91dE1lYXN1cmVcIixcIm9uQmVmb3JlTGF5b3V0TWVhc3VyZVwiLFwib25BbmltYXRpb25TdGFydFwiLFwib25BbmltYXRpb25Db21wbGV0ZVwiLFwib25VcGRhdGVcIixcIm9uRHJhZ1N0YXJ0XCIsXCJvbkRyYWdcIixcIm9uRHJhZ0VuZFwiLFwib25NZWFzdXJlRHJhZ0NvbnN0cmFpbnRzXCIsXCJvbkRpcmVjdGlvbkxvY2tcIixcIm9uRHJhZ1RyYW5zaXRpb25FbmRcIixcImRyYWdcIixcImRyYWdDb250cm9sc1wiLFwiZHJhZ0xpc3RlbmVyXCIsXCJkcmFnQ29uc3RyYWludHNcIixcImRyYWdEaXJlY3Rpb25Mb2NrXCIsXCJfZHJhZ1hcIixcIl9kcmFnWVwiLFwiZHJhZ0VsYXN0aWNcIixcImRyYWdNb21lbnR1bVwiLFwiZHJhZ1Byb3BhZ2F0aW9uXCIsXCJkcmFnVHJhbnNpdGlvblwiLFwid2hpbGVEcmFnXCIsXCJvblBhblwiLFwib25QYW5TdGFydFwiLFwib25QYW5FbmRcIixcIm9uUGFuU2Vzc2lvblN0YXJ0XCIsXCJvblRhcFwiLFwib25UYXBTdGFydFwiLFwib25UYXBDYW5jZWxcIixcIm9uSG92ZXJTdGFydFwiLFwib25Ib3ZlckVuZFwiLFwid2hpbGVGb2N1c1wiLFwid2hpbGVUYXBcIixcIndoaWxlSG92ZXJcIl0pO2Z1bmN0aW9uIGRlKGUpe3JldHVybiB1ZS5oYXMoZSl9dmFyIHBlPWZ1bmN0aW9uKGUpe3JldHVybiFkZShlKX07dHJ5e3ZhciBmZT1uKDg1OTQpLlo7cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhcnRzV2l0aChcIm9uXCIpPyFkZShlKTpmZShlKX19Y2F0Y2goZSl7fWZ1bmN0aW9uIGhlKGUsdCxuKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT9lOmkucHgudHJhbnNmb3JtKHQrbiplKX12YXIgZ2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaS5weC50cmFuc2Zvcm0oZSp0KX0sdmU9e29mZnNldDpcInN0cm9rZS1kYXNob2Zmc2V0XCIsYXJyYXk6XCJzdHJva2UtZGFzaGFycmF5XCJ9LENlPXtvZmZzZXQ6XCJzdHJva2VEYXNob2Zmc2V0XCIsYXJyYXk6XCJzdHJva2VEYXNoYXJyYXlcIn07ZnVuY3Rpb24gbWUoZSx0LG4sbyxhLGksbCxzKXt2YXIgYz10LmF0dHJYLHU9dC5hdHRyWSxkPXQub3JpZ2luWCxwPXQub3JpZ2luWSxmPXQucGF0aExlbmd0aCxoPXQucGF0aFNwYWNpbmcsZz12b2lkIDA9PT1oPzE6aCx2PXQucGF0aE9mZnNldCxDPXZvaWQgMD09PXY/MDp2O2llKGUsci5fX3Jlc3QodCxbXCJhdHRyWFwiLFwiYXR0cllcIixcIm9yaWdpblhcIixcIm9yaWdpbllcIixcInBhdGhMZW5ndGhcIixcInBhdGhTcGFjaW5nXCIsXCJwYXRoT2Zmc2V0XCJdKSxuLG8sYSxpLGwscyksZS5hdHRycz1lLnN0eWxlLGUuc3R5bGU9e307dmFyIG09ZS5hdHRycyx3PWUuc3R5bGUsYj1lLmRpbWVuc2lvbnMseT1lLnRvdGFsUGF0aExlbmd0aDttLnRyYW5zZm9ybSYmKGImJih3LnRyYW5zZm9ybT1tLnRyYW5zZm9ybSksZGVsZXRlIG0udHJhbnNmb3JtKSxiJiYodm9pZCAwIT09ZHx8dm9pZCAwIT09cHx8dy50cmFuc2Zvcm0pJiYody50cmFuc2Zvcm1PcmlnaW49ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBoZSh0LGUueCxlLndpZHRoKStcIiBcIitoZShuLGUueSxlLmhlaWdodCl9KGIsdm9pZCAwIT09ZD9kOi41LHZvaWQgMCE9PXA/cDouNSkpLHZvaWQgMCE9PWMmJihtLng9Yyksdm9pZCAwIT09dSYmKG0ueT11KSx2b2lkIDAhPT15JiZ2b2lkIDAhPT1mJiZmdW5jdGlvbihlLHQsbixyLG8sYSl7dm9pZCAwPT09ciYmKHI9MSksdm9pZCAwPT09byYmKG89MCksdm9pZCAwPT09YSYmKGE9ITApO3ZhciBpPWE/dmU6Q2U7ZVtpLm9mZnNldF09Z2UoLW8sdCk7dmFyIGw9Z2Uobix0KSxzPWdlKHIsdCk7ZVtpLmFycmF5XT1sK1wiIFwiK3N9KG0seSxmLGcsQywhMSl9dmFyIHdlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxsZSgpKSx7YXR0cnM6e319KX07ZnVuY3Rpb24gYmUoZSx0KXt2YXIgbj1vLnVzZU1lbW8oKGZ1bmN0aW9uKCl7dmFyIG49d2UoKTtyZXR1cm4gbWUobix0LHZvaWQgMCx2b2lkIDAse2VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiExfSxlLnRyYW5zZm9ybVRlbXBsYXRlKSxyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sbi5hdHRycykse3N0eWxlOnIuX19hc3NpZ24oe30sbi5zdHlsZSl9KX0pLFt0XSk7aWYoZS5zdHlsZSl7dmFyIGE9e307c2UoYSxlLnN0eWxlLGUpLG4uc3R5bGU9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGEpLG4uc3R5bGUpfXJldHVybiBufWZ1bmN0aW9uIHllKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksZnVuY3Rpb24odCxuLGEsaSxsKXt2YXIgcz1pLmxhdGVzdFZhbHVlcyxjPShGKHQpP2JlOmNlKShuLHMsbCksdT1mdW5jdGlvbihlLHQsbil7dmFyIHI9e307Zm9yKHZhciBvIGluIGUpKHBlKG8pfHwhMD09PW4mJmRlKG8pfHwhdCYmIWRlKG8pKSYmKHJbb109ZVtvXSk7cmV0dXJuIHJ9KG4sXCJzdHJpbmdcIj09dHlwZW9mIHQsZSksZD1yLl9fYXNzaWduKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSx1KSxjKSx7cmVmOmF9KTtyZXR1cm4gby5jcmVhdGVFbGVtZW50KHQsZCl9fXZhciB4ZT0vKFthLXpdKShbQS1aXSkvZyxrZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKHhlLFwiJDEtJDJcIikudG9Mb3dlckNhc2UoKX07ZnVuY3Rpb24gU2UoZSx0KXt2YXIgbj10LnN0eWxlLHI9dC52YXJzO2Zvcih2YXIgbyBpbiBPYmplY3QuYXNzaWduKGUuc3R5bGUsbikscillLnN0eWxlLnNldFByb3BlcnR5KG8scltvXSl9dmFyIE9lPW5ldyBTZXQoW1wiYmFzZUZyZXF1ZW5jeVwiLFwiZGlmZnVzZUNvbnN0YW50XCIsXCJrZXJuZWxNYXRyaXhcIixcImtlcm5lbFVuaXRMZW5ndGhcIixcImtleVNwbGluZXNcIixcImtleVRpbWVzXCIsXCJsaW1pdGluZ0NvbmVBbmdsZVwiLFwibWFya2VySGVpZ2h0XCIsXCJtYXJrZXJXaWR0aFwiLFwibnVtT2N0YXZlc1wiLFwidGFyZ2V0WFwiLFwidGFyZ2V0WVwiLFwic3VyZmFjZVNjYWxlXCIsXCJzcGVjdWxhckNvbnN0YW50XCIsXCJzcGVjdWxhckV4cG9uZW50XCIsXCJzdGREZXZpYXRpb25cIixcInRhYmxlVmFsdWVzXCIsXCJ2aWV3Qm94XCIsXCJncmFkaWVudFRyYW5zZm9ybVwiXSk7ZnVuY3Rpb24gTWUoZSx0KXtmb3IodmFyIG4gaW4gU2UoZSx0KSx0LmF0dHJzKWUuc2V0QXR0cmlidXRlKE9lLmhhcyhuKT9uOmtlKG4pLHQuYXR0cnNbbl0pfWZ1bmN0aW9uIExlKGUpe3ZhciB0PWUuc3R5bGUsbj17fTtmb3IodmFyIHIgaW4gdCkoZWUodFtyXSl8fFEocixlKSkmJihuW3JdPXRbcl0pO3JldHVybiBufWZ1bmN0aW9uIF9lKGUpe3ZhciB0PUxlKGUpO2Zvcih2YXIgbiBpbiBlKWVlKGVbbl0pJiYodFtcInhcIj09PW58fFwieVwiPT09bj9cImF0dHJcIituLnRvVXBwZXJDYXNlKCk6bl09ZVtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gUGUoZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuc3RhcnR9dmFyIEVlPWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfSxqZT1mdW5jdGlvbihlKXtyZXR1cm4gQm9vbGVhbihlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmZS5taXgmJmUudG9WYWx1ZSl9LFJlPWZ1bmN0aW9uKGUpe3JldHVybiBFZShlKT9lW2UubGVuZ3RoLTFdfHwwOmV9O2Z1bmN0aW9uIEllKGUpe3ZhciB0PWVlKGUpP2UuZ2V0KCk6ZTtyZXR1cm4gamUodCk/dC50b1ZhbHVlKCk6dH1mdW5jdGlvbiBWZShlLHQsbixyKXt2YXIgbz1lLnNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyxhPWUuY3JlYXRlUmVuZGVyU3RhdGUsaT1lLm9uTW91bnQsbD17bGF0ZXN0VmFsdWVzOkFlKHQsbixyLG8pLHJlbmRlclN0YXRlOmEoKX07cmV0dXJuIGkmJihsLm1vdW50PWZ1bmN0aW9uKGUpe3JldHVybiBpKHQsZSxsKX0pLGx9dmFyIEhlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciByPW8udXNlQ29udGV4dChiKSxhPW8udXNlQ29udGV4dCh4KTtyZXR1cm4gbj9WZShlLHQscixhKTprKChmdW5jdGlvbigpe3JldHVybiBWZShlLHQscixhKX0pKX19O2Z1bmN0aW9uIEFlKGUsdCxuLG8pe3ZhciBhPXt9LGk9ITE9PT0obnVsbD09bj92b2lkIDA6bi5pbml0aWFsKSxsPW8oZSk7Zm9yKHZhciBzIGluIGwpYVtzXT1JZShsW3NdKTt2YXIgYz1lLmluaXRpYWwsdT1lLmFuaW1hdGUsZD1UKGUpLHA9RChlKTt0JiZwJiYhZCYmITEhPT1lLmluaGVyaXQmJihudWxsIT1jfHwoYz10LmluaXRpYWwpLG51bGwhPXV8fCh1PXQuYW5pbWF0ZSkpO3ZhciBmPWl8fCExPT09Yz91OmM7cmV0dXJuIGYmJlwiYm9vbGVhblwiIT10eXBlb2YgZiYmIVBlKGYpJiYoQXJyYXkuaXNBcnJheShmKT9mOltmXSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49SChlLHQpO2lmKG4pe3ZhciBvPW4udHJhbnNpdGlvbkVuZDtuLnRyYW5zaXRpb247dmFyIGk9ci5fX3Jlc3QobixbXCJ0cmFuc2l0aW9uRW5kXCIsXCJ0cmFuc2l0aW9uXCJdKTtmb3IodmFyIGwgaW4gaSlhW2xdPWlbbF07Zm9yKHZhciBsIGluIG8pYVtsXT1vW2xdfX0pKSxhfXZhciBUZSxEZT17dXNlVmlzdWFsU3RhdGU6SGUoe3NjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczpfZSxjcmVhdGVSZW5kZXJTdGF0ZTp3ZSxvbk1vdW50OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLnJlbmRlclN0YXRlLG89bi5sYXRlc3RWYWx1ZXM7dHJ5e3IuZGltZW5zaW9ucz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmdldEJCb3g/dC5nZXRCQm94KCk6dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jYXRjaChlKXtyLmRpbWVuc2lvbnM9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19XCJwYXRoXCI9PT10LnRhZ05hbWUmJihyLnRvdGFsUGF0aExlbmd0aD10LmdldFRvdGFsTGVuZ3RoKCkpLG1lKHIsbyx2b2lkIDAsdm9pZCAwLHtlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjohMX0sZS50cmFuc2Zvcm1UZW1wbGF0ZSksTWUodCxyKX19KX0sQmU9e3VzZVZpc3VhbFN0YXRlOkhlKHtzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6TGUsY3JlYXRlUmVuZGVyU3RhdGU6bGV9KX07ZnVuY3Rpb24gWmUoZSx0LG4sbyl7dmFyIGE9dC5mb3J3YXJkTW90aW9uUHJvcHMsaT12b2lkIDAhPT1hJiZhLGw9RihlKT9EZTpCZTtyZXR1cm4gci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGwpLHtwcmVsb2FkZWRGZWF0dXJlczpuLHVzZVJlbmRlcjp5ZShpKSxjcmVhdGVWaXN1YWxFbGVtZW50Om8sQ29tcG9uZW50OmV9KX1mdW5jdGlvbiAkZShlLHQsbixyKXtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKHQsbixyKSxmdW5jdGlvbigpe3JldHVybiBlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLHIpfX1mdW5jdGlvbiBOZShlLHQsbixyKXtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXt2YXIgbz1lLmN1cnJlbnQ7aWYobiYmbylyZXR1cm4gJGUobyx0LG4scil9KSxbZSx0LG4scl0pfWZ1bmN0aW9uIEZlKGUpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBQb2ludGVyRXZlbnQmJmUgaW5zdGFuY2VvZiBQb2ludGVyRXZlbnQ/IShcIm1vdXNlXCIhPT1lLnBvaW50ZXJUeXBlKTplIGluc3RhbmNlb2YgTW91c2VFdmVudH1mdW5jdGlvbiBXZShlKXtyZXR1cm4hIWUudG91Y2hlc30hZnVuY3Rpb24oZSl7ZS5BbmltYXRlPVwiYW5pbWF0ZVwiLGUuSG92ZXI9XCJ3aGlsZUhvdmVyXCIsZS5UYXA9XCJ3aGlsZVRhcFwiLGUuRHJhZz1cIndoaWxlRHJhZ1wiLGUuRm9jdXM9XCJ3aGlsZUZvY3VzXCIsZS5FeGl0PVwiZXhpdFwifShUZXx8KFRlPXt9KSk7dmFyIFVlPXtwYWdlWDowLHBhZ2VZOjB9O2Z1bmN0aW9uIHplKGUsdCl7dm9pZCAwPT09dCYmKHQ9XCJwYWdlXCIpO3ZhciBuPWUudG91Y2hlc1swXXx8ZS5jaGFuZ2VkVG91Y2hlc1swXXx8VWU7cmV0dXJue3g6blt0K1wiWFwiXSx5Om5bdCtcIllcIl19fWZ1bmN0aW9uIEdlKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PVwicGFnZVwiKSx7eDplW3QrXCJYXCJdLHk6ZVt0K1wiWVwiXX19ZnVuY3Rpb24gS2UoZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9XCJwYWdlXCIpLHtwb2ludDpXZShlKT96ZShlLHQpOkdlKGUsdCl9fXZhciBxZT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgbixyPWZ1bmN0aW9uKHQpe3JldHVybiBlKHQsS2UodCkpfTtyZXR1cm4gdD8obj1yLGZ1bmN0aW9uKGUpe3ZhciB0PWUgaW5zdGFuY2VvZiBNb3VzZUV2ZW50OyghdHx8dCYmMD09PWUuYnV0dG9uKSYmbihlKX0pOnJ9LFllPWZ1bmN0aW9uKCl7cmV0dXJuIEUmJm51bGw9PT13aW5kb3cub25wb2ludGVyZG93bn0sSmU9ZnVuY3Rpb24oKXtyZXR1cm4gRSYmbnVsbD09PXdpbmRvdy5vbnRvdWNoc3RhcnR9LFhlPWZ1bmN0aW9uKCl7cmV0dXJuIEUmJm51bGw9PT13aW5kb3cub25tb3VzZWRvd259LFFlPXtwb2ludGVyZG93bjpcIm1vdXNlZG93blwiLHBvaW50ZXJtb3ZlOlwibW91c2Vtb3ZlXCIscG9pbnRlcnVwOlwibW91c2V1cFwiLHBvaW50ZXJjYW5jZWw6XCJtb3VzZWNhbmNlbFwiLHBvaW50ZXJvdmVyOlwibW91c2VvdmVyXCIscG9pbnRlcm91dDpcIm1vdXNlb3V0XCIscG9pbnRlcmVudGVyOlwibW91c2VlbnRlclwiLHBvaW50ZXJsZWF2ZTpcIm1vdXNlbGVhdmVcIn0sZXQ9e3BvaW50ZXJkb3duOlwidG91Y2hzdGFydFwiLHBvaW50ZXJtb3ZlOlwidG91Y2htb3ZlXCIscG9pbnRlcnVwOlwidG91Y2hlbmRcIixwb2ludGVyY2FuY2VsOlwidG91Y2hjYW5jZWxcIn07ZnVuY3Rpb24gdHQoZSl7cmV0dXJuIFllKCk/ZTpKZSgpP2V0W2VdOlhlKCk/UWVbZV06ZX1mdW5jdGlvbiBudChlLHQsbixyKXtyZXR1cm4gJGUoZSx0dCh0KSxxZShuLFwicG9pbnRlcmRvd25cIj09PXQpLHIpfWZ1bmN0aW9uIHJ0KGUsdCxuLHIpe3JldHVybiBOZShlLHR0KHQpLG4mJnFlKG4sXCJwb2ludGVyZG93blwiPT09dCkscil9ZnVuY3Rpb24gb3QoZSl7dmFyIHQ9bnVsbDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXQmJih0PWUsZnVuY3Rpb24oKXt0PW51bGx9KX19dmFyIGF0PW90KFwiZHJhZ0hvcml6b250YWxcIiksaXQ9b3QoXCJkcmFnVmVydGljYWxcIik7ZnVuY3Rpb24gbHQoZSl7dmFyIHQ9ITE7aWYoXCJ5XCI9PT1lKXQ9aXQoKTtlbHNlIGlmKFwieFwiPT09ZSl0PWF0KCk7ZWxzZXt2YXIgbj1hdCgpLHI9aXQoKTtuJiZyP3Q9ZnVuY3Rpb24oKXtuKCkscigpfToobiYmbigpLHImJnIoKSl9cmV0dXJuIHR9ZnVuY3Rpb24gc3QoKXt2YXIgZT1sdCghMCk7cmV0dXJuIWV8fChlKCksITEpfWZ1bmN0aW9uIGN0KGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocixvKXt2YXIgYTtGZShyKSYmIXN0KCkmJihudWxsPT1ufHxuKHIsbyksbnVsbD09PShhPWUuYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1hfHxhLnNldEFjdGl2ZShUZS5Ib3Zlcix0KSl9fXZhciB1dD1mdW5jdGlvbihlLHQpe3JldHVybiEhdCYmKGU9PT10fHx1dChlLHQucGFyZW50RWxlbWVudCkpfTtmdW5jdGlvbiBkdChlKXtyZXR1cm4gby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUoKX19KSxbXSl9dmFyIHB0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KSxudWxsfX0sZnQ9e3RhcDpwdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vblRhcCxuPWUub25UYXBTdGFydCxyPWUub25UYXBDYW5jZWwsYT1lLndoaWxlVGFwLGk9ZS52aXN1YWxFbGVtZW50LHM9dHx8bnx8cnx8YSxjPW8udXNlUmVmKCExKSx1PW8udXNlUmVmKG51bGwpO2Z1bmN0aW9uIGQoKXt2YXIgZTtudWxsPT09KGU9dS5jdXJyZW50KXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHUpLHUuY3VycmVudD1udWxsfWZ1bmN0aW9uIHAoKXt2YXIgZTtyZXR1cm4gZCgpLGMuY3VycmVudD0hMSxudWxsPT09KGU9aS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PWV8fGUuc2V0QWN0aXZlKFRlLlRhcCwhMSksIXN0KCl9ZnVuY3Rpb24gZihlLG4pe3AoKSYmKHV0KGkuZ2V0SW5zdGFuY2UoKSxlLnRhcmdldCk/bnVsbD09dHx8dChlLG4pOm51bGw9PXJ8fHIoZSxuKSl9ZnVuY3Rpb24gaChlLHQpe3AoKSYmKG51bGw9PXJ8fHIoZSx0KSl9cnQoaSxcInBvaW50ZXJkb3duXCIscz9mdW5jdGlvbihlLHQpe3ZhciByO2QoKSxjLmN1cnJlbnR8fChjLmN1cnJlbnQ9ITAsdS5jdXJyZW50PWwucGlwZShudCh3aW5kb3csXCJwb2ludGVydXBcIixmKSxudCh3aW5kb3csXCJwb2ludGVyY2FuY2VsXCIsaCkpLG51bGw9PW58fG4oZSx0KSxudWxsPT09KHI9aS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PXJ8fHIuc2V0QWN0aXZlKFRlLlRhcCwhMCkpfTp2b2lkIDApLGR0KGQpfSkpLGZvY3VzOnB0KChmdW5jdGlvbihlKXt2YXIgdD1lLndoaWxlRm9jdXMsbj1lLnZpc3VhbEVsZW1lbnQ7TmUobixcImZvY3VzXCIsdD9mdW5jdGlvbigpe3ZhciBlO251bGw9PT0oZT1uLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZXx8ZS5zZXRBY3RpdmUoVGUuRm9jdXMsITApfTp2b2lkIDApLE5lKG4sXCJibHVyXCIsdD9mdW5jdGlvbigpe3ZhciBlO251bGw9PT0oZT1uLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZXx8ZS5zZXRBY3RpdmUoVGUuRm9jdXMsITEpfTp2b2lkIDApfSkpLGhvdmVyOnB0KChmdW5jdGlvbihlKXt2YXIgdD1lLm9uSG92ZXJTdGFydCxuPWUub25Ib3ZlckVuZCxyPWUud2hpbGVIb3ZlcixvPWUudmlzdWFsRWxlbWVudDtydChvLFwicG9pbnRlcmVudGVyXCIsdHx8cj9jdChvLCEwLHQpOnZvaWQgMCkscnQobyxcInBvaW50ZXJsZWF2ZVwiLG58fHI/Y3QobywhMSxuKTp2b2lkIDApfSkpfTtmdW5jdGlvbiBodChlLHQpe2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiExO3ZhciBuPXQubGVuZ3RoO2lmKG4hPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPG47cisrKWlmKHRbcl0hPT1lW3JdKXJldHVybiExO3JldHVybiEwfXZhciBndD1mdW5jdGlvbihlKXtyZXR1cm4gMWUzKmV9LHZ0PXtsaW5lYXI6bC5saW5lYXIsZWFzZUluOmwuZWFzZUluLGVhc2VJbk91dDpsLmVhc2VJbk91dCxlYXNlT3V0OmwuZWFzZU91dCxjaXJjSW46bC5jaXJjSW4sY2lyY0luT3V0OmwuY2lyY0luT3V0LGNpcmNPdXQ6bC5jaXJjT3V0LGJhY2tJbjpsLmJhY2tJbixiYWNrSW5PdXQ6bC5iYWNrSW5PdXQsYmFja091dDpsLmJhY2tPdXQsYW50aWNpcGF0ZTpsLmFudGljaXBhdGUsYm91bmNlSW46bC5ib3VuY2VJbixib3VuY2VJbk91dDpsLmJvdW5jZUluT3V0LGJvdW5jZU91dDpsLmJvdW5jZU91dH0sQ3Q9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7YS5pbnZhcmlhbnQoND09PWUubGVuZ3RoLFwiQ3ViaWMgYmV6aWVyIGFycmF5cyBtdXN0IGNvbnRhaW4gZm91ciBudW1lcmljYWwgdmFsdWVzLlwiKTt2YXIgdD1yLl9fcmVhZChlLDQpLG49dFswXSxvPXRbMV0saT10WzJdLHM9dFszXTtyZXR1cm4gbC5jdWJpY0JlemllcihuLG8saSxzKX1yZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT8oYS5pbnZhcmlhbnQodm9pZCAwIT09dnRbZV0sXCJJbnZhbGlkIGVhc2luZyB0eXBlICdcIitlK1wiJ1wiKSx2dFtlXSk6ZX0sbXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJlwibnVtYmVyXCIhPXR5cGVvZiBlWzBdfSx3dD1mdW5jdGlvbihlLHQpe3JldHVybiEoXCJ6SW5kZXhcIj09PWV8fFwibnVtYmVyXCIhPXR5cGVvZiB0JiYhQXJyYXkuaXNBcnJheSh0KSYmKFwic3RyaW5nXCIhPXR5cGVvZiB0fHwhaS5jb21wbGV4LnRlc3QodCl8fHQuc3RhcnRzV2l0aChcInVybChcIikpKX0sYnQ9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcInNwcmluZ1wiLHN0aWZmbmVzczo1MDAsZGFtcGluZzoyNSxyZXN0RGVsdGE6LjUscmVzdFNwZWVkOjEwfX0seXQ9ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6XCJzcHJpbmdcIixzdGlmZm5lc3M6NTUwLGRhbXBpbmc6MD09PWU/MipNYXRoLnNxcnQoNTUwKTozMCxyZXN0RGVsdGE6LjAxLHJlc3RTcGVlZDoxMH19LHh0PWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJrZXlmcmFtZXNcIixlYXNlOlwibGluZWFyXCIsZHVyYXRpb246LjN9fSxrdD1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTpcImtleWZyYW1lc1wiLGR1cmF0aW9uOi44LHZhbHVlczplfX0sU3Q9e3g6YnQseTpidCx6OmJ0LHJvdGF0ZTpidCxyb3RhdGVYOmJ0LHJvdGF0ZVk6YnQscm90YXRlWjpidCxzY2FsZVg6eXQsc2NhbGVZOnl0LHNjYWxlOnl0LG9wYWNpdHk6eHQsYmFja2dyb3VuZENvbG9yOnh0LGNvbG9yOnh0LGRlZmF1bHQ6eXR9LE90PWZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG49RWUodCk/a3Q6U3RbZV18fFN0LmRlZmF1bHQsci5fX2Fzc2lnbih7dG86dH0sbih0KSl9LE10PXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxhZSkse2NvbG9yOmkuY29sb3IsYmFja2dyb3VuZENvbG9yOmkuY29sb3Isb3V0bGluZUNvbG9yOmkuY29sb3IsZmlsbDppLmNvbG9yLHN0cm9rZTppLmNvbG9yLGJvcmRlckNvbG9yOmkuY29sb3IsYm9yZGVyVG9wQ29sb3I6aS5jb2xvcixib3JkZXJSaWdodENvbG9yOmkuY29sb3IsYm9yZGVyQm90dG9tQ29sb3I6aS5jb2xvcixib3JkZXJMZWZ0Q29sb3I6aS5jb2xvcixmaWx0ZXI6aS5maWx0ZXIsV2Via2l0RmlsdGVyOmkuZmlsdGVyfSksTHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIE10W2VdfTtmdW5jdGlvbiBfdChlLHQpe3ZhciBuLHI9THQoZSk7cmV0dXJuIHIhPT1pLmZpbHRlciYmKHI9aS5jb21wbGV4KSxudWxsPT09KG49ci5nZXRBbmltYXRhYmxlTm9uZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uY2FsbChyLHQpfXZhciBQdD0hMTtmdW5jdGlvbiBFdChlKXtyZXR1cm4gMD09PWV8fFwic3RyaW5nXCI9PXR5cGVvZiBlJiYwPT09cGFyc2VGbG9hdChlKSYmLTE9PT1lLmluZGV4T2YoXCIgXCIpfWZ1bmN0aW9uIGp0KGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlPzA6X3QoXCJcIixlKX1mdW5jdGlvbiBSdChlLHQpe3JldHVybiBlW3RdfHxlLmRlZmF1bHR8fGV9ZnVuY3Rpb24gSXQoZSx0LG4sbyl7cmV0dXJuIHZvaWQgMD09PW8mJihvPXt9KSx0LnN0YXJ0KChmdW5jdGlvbihpKXt2YXIgcyxjLHU9ZnVuY3Rpb24oZSx0LG4sbyxpKXt2YXIgcyxjPVJ0KG8sZSksdT1udWxsIT09KHM9Yy5mcm9tKSYmdm9pZCAwIT09cz9zOnQuZ2V0KCksZD13dChlLG4pO1wibm9uZVwiPT09dSYmZCYmXCJzdHJpbmdcIj09dHlwZW9mIG4/dT1fdChlLG4pOkV0KHUpJiZcInN0cmluZ1wiPT10eXBlb2Ygbj91PWp0KG4pOiFBcnJheS5pc0FycmF5KG4pJiZFdChuKSYmXCJzdHJpbmdcIj09dHlwZW9mIHUmJihuPWp0KHUpKTt2YXIgcD13dChlLHUpO3JldHVybiBhLndhcm5pbmcocD09PWQsXCJZb3UgYXJlIHRyeWluZyB0byBhbmltYXRlIFwiK2UrJyBmcm9tIFwiJyt1KydcIiB0byBcIicrbisnXCIuICcrdStcIiBpcyBub3QgYW4gYW5pbWF0YWJsZSB2YWx1ZSAtIHRvIGVuYWJsZSB0aGlzIGFuaW1hdGlvbiBzZXQgXCIrdStcIiB0byBhIHZhbHVlIGFuaW1hdGFibGUgdG8gXCIrbitcIiB2aWEgdGhlIGBzdHlsZWAgcHJvcGVydHkuXCIpLHAmJmQmJiExIT09Yy50eXBlP2Z1bmN0aW9uKCl7dmFyIG89e2Zyb206dSx0bzpuLHZlbG9jaXR5OnQuZ2V0VmVsb2NpdHkoKSxvbkNvbXBsZXRlOmksb25VcGRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2V0KGUpfX07cmV0dXJuXCJpbmVydGlhXCI9PT1jLnR5cGV8fFwiZGVjYXlcIj09PWMudHlwZT9sLmluZXJ0aWEoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG8pLGMpKTpsLmFuaW1hdGUoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgbztyZXR1cm4gQXJyYXkuaXNBcnJheSh0LnRvKSYmKG51bGwhPT0obz1lLmR1cmF0aW9uKSYmdm9pZCAwIT09b3x8KGUuZHVyYXRpb249LjgpKSxmdW5jdGlvbihlKXtBcnJheS5pc0FycmF5KGUudG8pJiZudWxsPT09ZS50b1swXSYmKGUudG89ci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKGUudG8pKSxlLnRvWzBdPWUuZnJvbSl9KHQpLGZ1bmN0aW9uKGUpe2Uud2hlbixlLmRlbGF5LGUuZGVsYXlDaGlsZHJlbixlLnN0YWdnZXJDaGlsZHJlbixlLnN0YWdnZXJEaXJlY3Rpb24sZS5yZXBlYXQsZS5yZXBlYXRUeXBlLGUucmVwZWF0RGVsYXksZS5mcm9tO3ZhciB0PXIuX19yZXN0KGUsW1wid2hlblwiLFwiZGVsYXlcIixcImRlbGF5Q2hpbGRyZW5cIixcInN0YWdnZXJDaGlsZHJlblwiLFwic3RhZ2dlckRpcmVjdGlvblwiLFwicmVwZWF0XCIsXCJyZXBlYXRUeXBlXCIsXCJyZXBlYXREZWxheVwiLFwiZnJvbVwiXSk7cmV0dXJuISFPYmplY3Qua2V5cyh0KS5sZW5ndGh9KGUpfHwoZT1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sZSksT3Qobix0LnRvKSkpLHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSx0KSxmdW5jdGlvbihlKXt2YXIgdD1lLmVhc2Usbj1lLnRpbWVzLG89ZS55b3lvLGk9ZS5mbGlwLGw9ZS5sb29wLHM9ci5fX3Jlc3QoZSxbXCJlYXNlXCIsXCJ0aW1lc1wiLFwieW95b1wiLFwiZmxpcFwiLFwibG9vcFwiXSksYz1yLl9fYXNzaWduKHt9LHMpO3JldHVybiBuJiYoYy5vZmZzZXQ9bikscy5kdXJhdGlvbiYmKGMuZHVyYXRpb249Z3Qocy5kdXJhdGlvbikpLHMucmVwZWF0RGVsYXkmJihjLnJlcGVhdERlbGF5PWd0KHMucmVwZWF0RGVsYXkpKSx0JiYoYy5lYXNlPW10KHQpP3QubWFwKEN0KTpDdCh0KSksXCJ0d2VlblwiPT09cy50eXBlJiYoYy50eXBlPVwia2V5ZnJhbWVzXCIpLChvfHxsfHxpKSYmKGEud2FybmluZyghUHQsXCJ5b3lvLCBsb29wIGFuZCBmbGlwIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIEFQSS4gUmVwbGFjZSB3aXRoIHJlcGVhdCBhbmQgcmVwZWF0VHlwZSBvcHRpb25zLlwiKSxQdD0hMCxvP2MucmVwZWF0VHlwZT1cInJldmVyc2VcIjpsP2MucmVwZWF0VHlwZT1cImxvb3BcIjppJiYoYy5yZXBlYXRUeXBlPVwibWlycm9yXCIpLGMucmVwZWF0PWx8fG98fGl8fHMucmVwZWF0KSxcInNwcmluZ1wiIT09cy50eXBlJiYoYy50eXBlPVwia2V5ZnJhbWVzXCIpLGN9KGUpKX0oYyxvLGUpKSx7b25VcGRhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ7by5vblVwZGF0ZShlKSxudWxsPT09KHQ9Yy5vblVwZGF0ZSl8fHZvaWQgMD09PXR8fHQuY2FsbChjLGUpfSxvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dmFyIGU7by5vbkNvbXBsZXRlKCksbnVsbD09PShlPWMub25Db21wbGV0ZSl8fHZvaWQgMD09PWV8fGUuY2FsbChjKX19KSl9OmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHQuc2V0KG4pLGkoKSxudWxsPT09KGU9bnVsbD09Yz92b2lkIDA6Yy5vbkNvbXBsZXRlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKGMpLHtzdG9wOmZ1bmN0aW9uKCl7fX19fShlLHQsbixvLGkpLGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbnVsbCE9PShuPShSdChlLHQpfHx7fSkuZGVsYXkpJiZ2b2lkIDAhPT1uP246MH0obyxlKSxwPWZ1bmN0aW9uKCl7cmV0dXJuIGM9dSgpfTtyZXR1cm4gZD9zPXNldFRpbWVvdXQocCxndChkKSk6cCgpLGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHMpLG51bGw9PWN8fGMuc3RvcCgpfX0pKX1mdW5jdGlvbiBWdChlLHQpey0xPT09ZS5pbmRleE9mKHQpJiZlLnB1c2godCl9ZnVuY3Rpb24gSHQoZSx0KXt2YXIgbj1lLmluZGV4T2YodCk7bj4tMSYmZS5zcGxpY2UobiwxKX12YXIgQXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5zdWJzY3JpcHRpb25zPVtdfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gVnQodGhpcy5zdWJzY3JpcHRpb25zLGUpLGZ1bmN0aW9uKCl7cmV0dXJuIEh0KHQuc3Vic2NyaXB0aW9ucyxlKX19LGUucHJvdG90eXBlLm5vdGlmeT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aDtpZihyKWlmKDE9PT1yKXRoaXMuc3Vic2NyaXB0aW9uc1swXShlLHQsbik7ZWxzZSBmb3IodmFyIG89MDtvPHI7bysrKXt2YXIgYT10aGlzLnN1YnNjcmlwdGlvbnNbb107YSYmYShlLHQsbil9fSxlLnByb3RvdHlwZS5nZXRTaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9ucy5sZW5ndGh9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aD0wfSxlfSgpLFR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdCxuPXRoaXM7dGhpcy50aW1lRGVsdGE9MCx0aGlzLmxhc3RVcGRhdGVkPTAsdGhpcy51cGRhdGVTdWJzY3JpYmVycz1uZXcgQXQsdGhpcy52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzPW5ldyBBdCx0aGlzLnJlbmRlclN1YnNjcmliZXJzPW5ldyBBdCx0aGlzLmNhblRyYWNrVmVsb2NpdHk9ITEsdGhpcy51cGRhdGVBbmROb3RpZnk9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0hMCksbi5wcmV2PW4uY3VycmVudCxuLmN1cnJlbnQ9ZTt2YXIgcj1zLmdldEZyYW1lRGF0YSgpLG89ci5kZWx0YSxhPXIudGltZXN0YW1wO24ubGFzdFVwZGF0ZWQhPT1hJiYobi50aW1lRGVsdGE9byxuLmxhc3RVcGRhdGVkPWEscC5kZWZhdWx0LnBvc3RSZW5kZXIobi5zY2hlZHVsZVZlbG9jaXR5Q2hlY2spKSxuLnByZXYhPT1uLmN1cnJlbnQmJm4udXBkYXRlU3Vic2NyaWJlcnMubm90aWZ5KG4uY3VycmVudCksbi52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLmdldFNpemUoKSYmbi52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLm5vdGlmeShuLmdldFZlbG9jaXR5KCkpLHQmJm4ucmVuZGVyU3Vic2NyaWJlcnMubm90aWZ5KG4uY3VycmVudCl9LHRoaXMuc2NoZWR1bGVWZWxvY2l0eUNoZWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHAuZGVmYXVsdC5wb3N0UmVuZGVyKG4udmVsb2NpdHlDaGVjayl9LHRoaXMudmVsb2NpdHlDaGVjaz1mdW5jdGlvbihlKXtlLnRpbWVzdGFtcCE9PW4ubGFzdFVwZGF0ZWQmJihuLnByZXY9bi5jdXJyZW50LG4udmVsb2NpdHlVcGRhdGVTdWJzY3JpYmVycy5ub3RpZnkobi5nZXRWZWxvY2l0eSgpKSl9LHRoaXMuaGFzQW5pbWF0ZWQ9ITEsdGhpcy5wcmV2PXRoaXMuY3VycmVudD1lLHRoaXMuY2FuVHJhY2tWZWxvY2l0eT0odD10aGlzLmN1cnJlbnQsIWlzTmFOKHBhcnNlRmxvYXQodCkpKX1yZXR1cm4gZS5wcm90b3R5cGUub25DaGFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudXBkYXRlU3Vic2NyaWJlcnMuYWRkKGUpfSxlLnByb3RvdHlwZS5jbGVhckxpc3RlbmVycz1mdW5jdGlvbigpe3RoaXMudXBkYXRlU3Vic2NyaWJlcnMuY2xlYXIoKX0sZS5wcm90b3R5cGUub25SZW5kZXJSZXF1ZXN0PWZ1bmN0aW9uKGUpe3JldHVybiBlKHRoaXMuZ2V0KCkpLHRoaXMucmVuZGVyU3Vic2NyaWJlcnMuYWRkKGUpfSxlLnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24oZSl7dGhpcy5wYXNzaXZlRWZmZWN0PWV9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSEwKSx0JiZ0aGlzLnBhc3NpdmVFZmZlY3Q/dGhpcy5wYXNzaXZlRWZmZWN0KGUsdGhpcy51cGRhdGVBbmROb3RpZnkpOnRoaXMudXBkYXRlQW5kTm90aWZ5KGUsdCl9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LGUucHJvdG90eXBlLmdldFByZXZpb3VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldn0sZS5wcm90b3R5cGUuZ2V0VmVsb2NpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5UcmFja1ZlbG9jaXR5P2wudmVsb2NpdHlQZXJTZWNvbmQocGFyc2VGbG9hdCh0aGlzLmN1cnJlbnQpLXBhcnNlRmxvYXQodGhpcy5wcmV2KSx0aGlzLnRpbWVEZWx0YSk6MH0sZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5zdG9wKCksbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4pe3QuaGFzQW5pbWF0ZWQ9ITAsdC5zdG9wQW5pbWF0aW9uPWUobil9KSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdC5jbGVhckFuaW1hdGlvbigpfSkpfSxlLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7dGhpcy5zdG9wQW5pbWF0aW9uJiZ0aGlzLnN0b3BBbmltYXRpb24oKSx0aGlzLmNsZWFyQW5pbWF0aW9uKCl9LGUucHJvdG90eXBlLmlzQW5pbWF0aW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnN0b3BBbmltYXRpb259LGUucHJvdG90eXBlLmNsZWFyQW5pbWF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5zdG9wQW5pbWF0aW9uPW51bGx9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZVN1YnNjcmliZXJzLmNsZWFyKCksdGhpcy5yZW5kZXJTdWJzY3JpYmVycy5jbGVhcigpLHRoaXMuc3RvcCgpfSxlfSgpO2Z1bmN0aW9uIER0KGUpe3JldHVybiBuZXcgVHQoZSl9dmFyIEJ0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXN0KGUpfX0sWnQ9W2kubnVtYmVyLGkucHgsaS5wZXJjZW50LGkuZGVncmVlcyxpLnZ3LGkudmgse3Rlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuXCJhdXRvXCI9PT1lfSxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZX19XSwkdD1mdW5jdGlvbihlKXtyZXR1cm4gWnQuZmluZChCdChlKSl9LE50PXIuX19zcHJlYWRBcnJheShyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQoWnQpKSxbaS5jb2xvcixpLmNvbXBsZXhdKTtmdW5jdGlvbiBGdChlLHQsbil7ZS5oYXNWYWx1ZSh0KT9lLmdldFZhbHVlKHQpLnNldChuKTplLmFkZFZhbHVlKHQsRHQobikpfWZ1bmN0aW9uIFd0KGUsdCl7dmFyIG49QShlLHQpLG89bj9lLm1ha2VUYXJnZXRBbmltYXRhYmxlKG4sITEpOnt9LGE9by50cmFuc2l0aW9uRW5kLGk9dm9pZCAwPT09YT97fTphO28udHJhbnNpdGlvbjt2YXIgbD1yLl9fcmVzdChvLFtcInRyYW5zaXRpb25FbmRcIixcInRyYW5zaXRpb25cIl0pO2Zvcih2YXIgcyBpbiBsPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxsKSxpKSlGdChlLHMsUmUobFtzXSkpfWZ1bmN0aW9uIFV0KGUsdCl7ci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKHQpKS5yZXZlcnNlKCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHIsbz1lLmdldFZhcmlhbnQobik7byYmV3QoZSxvKSxudWxsPT09KHI9ZS52YXJpYW50Q2hpbGRyZW4pfHx2b2lkIDA9PT1yfHxyLmZvckVhY2goKGZ1bmN0aW9uKGUpe1V0KGUsdCl9KSl9KSl9ZnVuY3Rpb24genQoZSx0LG4pe3ZhciByLG8sYSxsLHMsYz1PYmplY3Qua2V5cyh0KS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFlLmhhc1ZhbHVlKHQpfSkpLHU9Yy5sZW5ndGg7aWYodSlmb3IodmFyIGQ9MDtkPHU7ZCsrKXt2YXIgcD1jW2RdLGY9dFtwXSxoPW51bGw7QXJyYXkuaXNBcnJheShmKSYmKGg9ZlswXSksbnVsbD09PWgmJihoPW51bGwhPT0obz1udWxsIT09KHI9bltwXSkmJnZvaWQgMCE9PXI/cjplLnJlYWRWYWx1ZShwKSkmJnZvaWQgMCE9PW8/bzp0W3BdKSxudWxsIT1oJiYoXCJzdHJpbmdcIj09dHlwZW9mIGgmJi9eXFwtP1xcZCpcXC4/XFxkKyQvLnRlc3QoaCk/aD1wYXJzZUZsb2F0KGgpOihzPWgsIU50LmZpbmQoQnQocykpJiZpLmNvbXBsZXgudGVzdChmKSYmKGg9X3QocCxmKSkpLGUuYWRkVmFsdWUocCxEdChoKSksbnVsbCE9PShhPShsPW4pW3BdKSYmdm9pZCAwIT09YXx8KGxbcF09aCksZS5zZXRCYXNlVGFyZ2V0KHAsaCkpfX1mdW5jdGlvbiBHdChlLHQpe2lmKHQpcmV0dXJuKHRbZV18fHQuZGVmYXVsdHx8dCkuZnJvbX1mdW5jdGlvbiBLdChlLHQsbil7dmFyIHIsbyxhPXt9O2Zvcih2YXIgaSBpbiBlKWFbaV09bnVsbCE9PShyPUd0KGksdCkpJiZ2b2lkIDAhPT1yP3I6bnVsbD09PShvPW4uZ2V0VmFsdWUoaSkpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmdldCgpO3JldHVybiBhfWZ1bmN0aW9uIHF0KGUsdCxuKXt2YXIgcjtpZih2b2lkIDA9PT1uJiYobj17fSksZS5ub3RpZnlBbmltYXRpb25TdGFydCgpLEFycmF5LmlzQXJyYXkodCkpe3ZhciBvPXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gWXQoZSx0LG4pfSkpO3I9UHJvbWlzZS5hbGwobyl9ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgdClyPVl0KGUsdCxuKTtlbHNle3ZhciBhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/QShlLHQsbi5jdXN0b20pOnQ7cj1KdChlLGEsbil9cmV0dXJuIHIudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZS5ub3RpZnlBbmltYXRpb25Db21wbGV0ZSh0KX0pKX1mdW5jdGlvbiBZdChlLHQsbil7dmFyIG87dm9pZCAwPT09biYmKG49e30pO3ZhciBhPUEoZSx0LG4uY3VzdG9tKSxpPShhfHx7fSkudHJhbnNpdGlvbixsPXZvaWQgMD09PWk/ZS5nZXREZWZhdWx0VHJhbnNpdGlvbigpfHx7fTppO24udHJhbnNpdGlvbk92ZXJyaWRlJiYobD1uLnRyYW5zaXRpb25PdmVycmlkZSk7dmFyIHM9YT9mdW5jdGlvbigpe3JldHVybiBKdChlLGEsbil9OmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSxjPShudWxsPT09KG89ZS52YXJpYW50Q2hpbGRyZW4pfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnNpemUpP2Z1bmN0aW9uKG8pe3ZvaWQgMD09PW8mJihvPTApO3ZhciBhPWwuZGVsYXlDaGlsZHJlbixpPXZvaWQgMD09PWE/MDphLHM9bC5zdGFnZ2VyQ2hpbGRyZW4sYz1sLnN0YWdnZXJEaXJlY3Rpb247cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLG8sYSxpKXt2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1vJiYobz0wKSx2b2lkIDA9PT1hJiYoYT0xKTt2YXIgbD1bXSxzPShlLnZhcmlhbnRDaGlsZHJlbi5zaXplLTEpKm8sYz0xPT09YT9mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCksZSpvfTpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCkscy1lKm99O3JldHVybiBBcnJheS5mcm9tKGUudmFyaWFudENoaWxkcmVuKS5zb3J0KFh0KS5mb3JFYWNoKChmdW5jdGlvbihlLG8pe2wucHVzaChZdChlLHQsci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGkpLHtkZWxheTpuK2Mobyl9KSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZS5ub3RpZnlBbmltYXRpb25Db21wbGV0ZSh0KX0pKSl9KSksUHJvbWlzZS5hbGwobCl9KGUsdCxpK28scyxjLG4pfTpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0sdT1sLndoZW47aWYodSl7dmFyIGQ9ci5fX3JlYWQoXCJiZWZvcmVDaGlsZHJlblwiPT09dT9bcyxjXTpbYyxzXSwyKSxwPWRbMF0sZj1kWzFdO3JldHVybiBwKCkudGhlbihmKX1yZXR1cm4gUHJvbWlzZS5hbGwoW3MoKSxjKG4uZGVsYXkpXSl9ZnVuY3Rpb24gSnQoZSx0LG4pe3ZhciBvLGE9dm9pZCAwPT09bj97fTpuLGk9YS5kZWxheSxsPXZvaWQgMD09PWk/MDppLHM9YS50cmFuc2l0aW9uT3ZlcnJpZGUsYz1hLnR5cGUsdT1lLm1ha2VUYXJnZXRBbmltYXRhYmxlKHQpLGQ9dS50cmFuc2l0aW9uLHA9dm9pZCAwPT09ZD9lLmdldERlZmF1bHRUcmFuc2l0aW9uKCk6ZCxmPXUudHJhbnNpdGlvbkVuZCxoPXIuX19yZXN0KHUsW1widHJhbnNpdGlvblwiLFwidHJhbnNpdGlvbkVuZFwiXSk7cyYmKHA9cyk7dmFyIGc9W10sdj1jJiYobnVsbD09PShvPWUuYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmdldFN0YXRlKClbY10pO2Zvcih2YXIgQyBpbiBoKXt2YXIgbT1lLmdldFZhbHVlKEMpLHc9aFtDXTtpZighKCFtfHx2b2lkIDA9PT13fHx2JiZRdCh2LEMpKSl7dmFyIGI9SXQoQyxtLHcsci5fX2Fzc2lnbih7ZGVsYXk6bH0scCkpO2cucHVzaChiKX19cmV0dXJuIFByb21pc2UuYWxsKGcpLnRoZW4oKGZ1bmN0aW9uKCl7ZiYmV3QoZSxmKX0pKX1mdW5jdGlvbiBYdChlLHQpe3JldHVybiBlLnNvcnROb2RlUG9zaXRpb24odCl9ZnVuY3Rpb24gUXQoZSx0KXt2YXIgbj1lLnByb3RlY3RlZEtleXMscj1lLm5lZWRzQW5pbWF0aW5nLG89bi5oYXNPd25Qcm9wZXJ0eSh0KSYmITAhPT1yW3RdO3JldHVybiByW3RdPSExLG99dmFyIGVuPVtUZS5BbmltYXRlLFRlLkhvdmVyLFRlLlRhcCxUZS5EcmFnLFRlLkZvY3VzLFRlLkV4aXRdLHRuPXIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChlbikpLnJldmVyc2UoKSxubj1lbi5sZW5ndGg7ZnVuY3Rpb24gcm4oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSx7aXNBY3RpdmU6ZSxwcm90ZWN0ZWRLZXlzOnt9LG5lZWRzQW5pbWF0aW5nOnt9LHByZXZSZXNvbHZlZFZhbHVlczp7fX19dmFyIG9uPXthbmltYXRpb246cHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUudmlzdWFsRWxlbWVudCxuPWUuYW5pbWF0ZTt0LmFuaW1hdGlvblN0YXRlfHwodC5hbmltYXRpb25TdGF0ZT1mdW5jdGlvbihlKXt2YXIgdCxuPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5hbGwodC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBuPXQuYW5pbWF0aW9uLHI9dC5vcHRpb25zO3JldHVybiBxdChlLG4scil9KSkpfX0oZSksbz0oKHQ9e30pW1RlLkFuaW1hdGVdPXJuKCEwKSx0W1RlLkhvdmVyXT1ybigpLHRbVGUuVGFwXT1ybigpLHRbVGUuRHJhZ109cm4oKSx0W1RlLkZvY3VzXT1ybigpLHRbVGUuRXhpdF09cm4oKSx0KSxhPXt9LGk9ITAsbD1mdW5jdGlvbih0LG4pe3ZhciBvPUEoZSxuKTtpZihvKXtvLnRyYW5zaXRpb247dmFyIGE9by50cmFuc2l0aW9uRW5kLGk9ci5fX3Jlc3QobyxbXCJ0cmFuc2l0aW9uXCIsXCJ0cmFuc2l0aW9uRW5kXCJdKTt0PXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHQpLGkpLGEpfXJldHVybiB0fTtmdW5jdGlvbiBzKHQscyl7Zm9yKHZhciBjLHU9ZS5nZXRQcm9wcygpLGQ9ZS5nZXRWYXJpYW50Q29udGV4dCghMCl8fHt9LHA9W10sZj1uZXcgU2V0LGg9e30sZz0xLzAsdj1mdW5jdGlvbihuKXt2YXIgYT10bltuXSx2PW9bYV0sQz1udWxsIT09KGM9dVthXSkmJnZvaWQgMCE9PWM/YzpkW2FdLG09VihDKSx3PWE9PT1zP3YuaXNBY3RpdmU6bnVsbDshMT09PXcmJihnPW4pO3ZhciBiPUM9PT1kW2FdJiZDIT09dVthXSYmbTtpZihiJiZpJiZlLm1hbnVhbGx5QW5pbWF0ZU9uTW91bnQmJihiPSExKSx2LnByb3RlY3RlZEtleXM9ci5fX2Fzc2lnbih7fSxoKSwhdi5pc0FjdGl2ZSYmbnVsbD09PXd8fCFDJiYhdi5wcmV2UHJvcHx8UGUoQyl8fFwiYm9vbGVhblwiPT10eXBlb2YgQylyZXR1cm5cImNvbnRpbnVlXCI7dmFyIHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD90IT09ZTohIUkodCkmJiFodCh0LGUpfSh2LnByZXZQcm9wLEMpfHxhPT09cyYmdi5pc0FjdGl2ZSYmIWImJm18fG4+ZyYmbSx4PUFycmF5LmlzQXJyYXkoQyk/QzpbQ10saz14LnJlZHVjZShsLHt9KTshMT09PXcmJihrPXt9KTt2YXIgUz12LnByZXZSZXNvbHZlZFZhbHVlcyxPPXZvaWQgMD09PVM/e306UyxNPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxPKSxrKSxMPWZ1bmN0aW9uKGUpe3k9ITAsZi5kZWxldGUoZSksdi5uZWVkc0FuaW1hdGluZ1tlXT0hMH07Zm9yKHZhciBfIGluIE0pe3ZhciBQPWtbX10sRT1PW19dO2guaGFzT3duUHJvcGVydHkoXyl8fChQIT09RT9FZShQKSYmRWUoRSk/aHQoUCxFKT92LnByb3RlY3RlZEtleXNbX109ITA6TChfKTp2b2lkIDAhPT1QP0woXyk6Zi5hZGQoXyk6dm9pZCAwIT09UCYmZi5oYXMoXyk/TChfKTp2LnByb3RlY3RlZEtleXNbX109ITApfXYucHJldlByb3A9Qyx2LnByZXZSZXNvbHZlZFZhbHVlcz1rLHYuaXNBY3RpdmUmJihoPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxoKSxrKSksaSYmZS5ibG9ja0luaXRpYWxBbmltYXRpb24mJih5PSExKSx5JiYhYiYmcC5wdXNoLmFwcGx5KHAsci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKHgubWFwKChmdW5jdGlvbihlKXtyZXR1cm57YW5pbWF0aW9uOmUsb3B0aW9uczpyLl9fYXNzaWduKHt0eXBlOmF9LHQpfX0pKSkpKX0sQz0wO0M8bm47QysrKXYoQyk7aWYoYT1yLl9fYXNzaWduKHt9LGgpLGYuc2l6ZSl7dmFyIG09e307Zi5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLmdldEJhc2VUYXJnZXQodCk7dm9pZCAwIT09biYmKG1bdF09bil9KSkscC5wdXNoKHthbmltYXRpb246bX0pfXZhciB3PUJvb2xlYW4ocC5sZW5ndGgpO3JldHVybiBpJiYhMT09PXUuaW5pdGlhbCYmIWUubWFudWFsbHlBbmltYXRlT25Nb3VudCYmKHc9ITEpLGk9ITEsdz9uKHApOlByb21pc2UucmVzb2x2ZSgpfXJldHVybntpc0FuaW1hdGVkOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1hW2VdfSxhbmltYXRlQ2hhbmdlczpzLHNldEFjdGl2ZTpmdW5jdGlvbih0LG4scil7dmFyIGE7cmV0dXJuIG9bdF0uaXNBY3RpdmU9PT1uP1Byb21pc2UucmVzb2x2ZSgpOihudWxsPT09KGE9ZS52YXJpYW50Q2hpbGRyZW4pfHx2b2lkIDA9PT1hfHxhLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByO3JldHVybiBudWxsPT09KHI9ZS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc2V0QWN0aXZlKHQsbil9KSksb1t0XS5pc0FjdGl2ZT1uLHMocix0KSl9LHNldEFuaW1hdGVGdW5jdGlvbjpmdW5jdGlvbih0KXtuPXQoZSl9LGdldFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG99fX0odCkpLFBlKG4pJiZvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gbi5zdWJzY3JpYmUodCl9KSxbbl0pfSkpLGV4aXQ6cHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuY3VzdG9tLG49ZS52aXN1YWxFbGVtZW50LGE9ci5fX3JlYWQoUygpLDIpLGk9YVswXSxsPWFbMV0scz1vLnVzZUNvbnRleHQoeCk7by51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7dmFyIGUscixvPW51bGw9PT0oZT1uLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5zZXRBY3RpdmUoVGUuRXhpdCwhaSx7Y3VzdG9tOm51bGwhPT0ocj1udWxsPT1zP3ZvaWQgMDpzLmN1c3RvbSkmJnZvaWQgMCE9PXI/cjp0fSk7IWkmJihudWxsPT1vfHxvLnRoZW4obCkpfSksW2ldKX0pKX0sYW49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2YXIgbz10aGlzLGE9KHZvaWQgMD09PW4/e306bikudHJhbnNmb3JtUGFnZVBvaW50O2lmKHRoaXMuc3RhcnRFdmVudD1udWxsLHRoaXMubGFzdE1vdmVFdmVudD1udWxsLHRoaXMubGFzdE1vdmVFdmVudEluZm89bnVsbCx0aGlzLmhhbmRsZXJzPXt9LHRoaXMudXBkYXRlUG9pbnQ9ZnVuY3Rpb24oKXtpZihvLmxhc3RNb3ZlRXZlbnQmJm8ubGFzdE1vdmVFdmVudEluZm8pe3ZhciBlPWNuKG8ubGFzdE1vdmVFdmVudEluZm8sby5oaXN0b3J5KSx0PW51bGwhPT1vLnN0YXJ0RXZlbnQsbj1sLmRpc3RhbmNlKGUub2Zmc2V0LHt4OjAseTowfSk+PTM7aWYodHx8bil7dmFyIGE9ZS5wb2ludCxpPXMuZ2V0RnJhbWVEYXRhKCkudGltZXN0YW1wO28uaGlzdG9yeS5wdXNoKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxhKSx7dGltZXN0YW1wOml9KSk7dmFyIGM9by5oYW5kbGVycyx1PWMub25TdGFydCxkPWMub25Nb3ZlO3R8fCh1JiZ1KG8ubGFzdE1vdmVFdmVudCxlKSxvLnN0YXJ0RXZlbnQ9by5sYXN0TW92ZUV2ZW50KSxkJiZkKG8ubGFzdE1vdmVFdmVudCxlKX19fSx0aGlzLmhhbmRsZVBvaW50ZXJNb3ZlPWZ1bmN0aW9uKGUsdCl7by5sYXN0TW92ZUV2ZW50PWUsby5sYXN0TW92ZUV2ZW50SW5mbz1sbih0LG8udHJhbnNmb3JtUGFnZVBvaW50KSxGZShlKSYmMD09PWUuYnV0dG9ucz9vLmhhbmRsZVBvaW50ZXJVcChlLHQpOnAuZGVmYXVsdC51cGRhdGUoby51cGRhdGVQb2ludCwhMCl9LHRoaXMuaGFuZGxlUG9pbnRlclVwPWZ1bmN0aW9uKGUsdCl7by5lbmQoKTt2YXIgbj1vLmhhbmRsZXJzLHI9bi5vbkVuZCxhPW4ub25TZXNzaW9uRW5kLGk9Y24obG4odCxvLnRyYW5zZm9ybVBhZ2VQb2ludCksby5oaXN0b3J5KTtvLnN0YXJ0RXZlbnQmJnImJnIoZSxpKSxhJiZhKGUsaSl9LCEoV2UoZSkmJmUudG91Y2hlcy5sZW5ndGg+MSkpe3RoaXMuaGFuZGxlcnM9dCx0aGlzLnRyYW5zZm9ybVBhZ2VQb2ludD1hO3ZhciBpPWxuKEtlKGUpLHRoaXMudHJhbnNmb3JtUGFnZVBvaW50KSxjPWkucG9pbnQsdT1zLmdldEZyYW1lRGF0YSgpLnRpbWVzdGFtcDt0aGlzLmhpc3Rvcnk9W3IuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxjKSx7dGltZXN0YW1wOnV9KV07dmFyIGQ9dC5vblNlc3Npb25TdGFydDtkJiZkKGUsY24oaSx0aGlzLmhpc3RvcnkpKSx0aGlzLnJlbW92ZUxpc3RlbmVycz1sLnBpcGUobnQod2luZG93LFwicG9pbnRlcm1vdmVcIix0aGlzLmhhbmRsZVBvaW50ZXJNb3ZlKSxudCh3aW5kb3csXCJwb2ludGVydXBcIix0aGlzLmhhbmRsZVBvaW50ZXJVcCksbnQod2luZG93LFwicG9pbnRlcmNhbmNlbFwiLHRoaXMuaGFuZGxlUG9pbnRlclVwKSl9fXJldHVybiBlLnByb3RvdHlwZS51cGRhdGVIYW5kbGVycz1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzPWV9LGUucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3RoaXMucmVtb3ZlTGlzdGVuZXJzJiZ0aGlzLnJlbW92ZUxpc3RlbmVycygpLHMuY2FuY2VsU3luYy51cGRhdGUodGhpcy51cGRhdGVQb2ludCl9LGV9KCk7ZnVuY3Rpb24gbG4oZSx0KXtyZXR1cm4gdD97cG9pbnQ6dChlLnBvaW50KX06ZX1mdW5jdGlvbiBzbihlLHQpe3JldHVybnt4OmUueC10LngseTplLnktdC55fX1mdW5jdGlvbiBjbihlLHQpe3ZhciBuPWUucG9pbnQ7cmV0dXJue3BvaW50Om4sZGVsdGE6c24obixkbih0KSksb2Zmc2V0OnNuKG4sdW4odCkpLHZlbG9jaXR5OnBuKHQsLjEpfX1mdW5jdGlvbiB1bihlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBkbihlKXtyZXR1cm4gZVtlLmxlbmd0aC0xXX1mdW5jdGlvbiBwbihlLHQpe2lmKGUubGVuZ3RoPDIpcmV0dXJue3g6MCx5OjB9O2Zvcih2YXIgbj1lLmxlbmd0aC0xLHI9bnVsbCxvPWRuKGUpO24+PTAmJihyPWVbbl0sIShvLnRpbWVzdGFtcC1yLnRpbWVzdGFtcD5ndCh0KSkpOyluLS07aWYoIXIpcmV0dXJue3g6MCx5OjB9O3ZhciBhPShvLnRpbWVzdGFtcC1yLnRpbWVzdGFtcCkvMWUzO2lmKDA9PT1hKXJldHVybnt4OjAseTowfTt2YXIgaT17eDooby54LXIueCkvYSx5OihvLnktci55KS9hfTtyZXR1cm4gaS54PT09MS8wJiYoaS54PTApLGkueT09PTEvMCYmKGkueT0wKSxpfWZ1bmN0aW9uIGZuKGUpe3JldHVybiBlfWZ1bmN0aW9uIGhuKGUpe3ZhciB0PWUudG9wO3JldHVybnt4OnttaW46ZS5sZWZ0LG1heDplLnJpZ2h0fSx5OnttaW46dCxtYXg6ZS5ib3R0b219fX12YXIgZ249e3RyYW5zbGF0ZTowLHNjYWxlOjEsb3JpZ2luOjAsb3JpZ2luUG9pbnQ6MH07ZnVuY3Rpb24gdm4oKXtyZXR1cm57eDpyLl9fYXNzaWduKHt9LGduKSx5OnIuX19hc3NpZ24oe30sZ24pfX1mdW5jdGlvbiBDbihlKXtyZXR1cm5bZShcInhcIiksZShcInlcIildfWZ1bmN0aW9uIG1uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09biYmKG49LjAxKSxsLmRpc3RhbmNlKGUsdCk8bn1mdW5jdGlvbiB3bihlKXtyZXR1cm4gZS5tYXgtZS5taW59ZnVuY3Rpb24gYm4oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9LjUpLGUub3JpZ2luPXIsZS5vcmlnaW5Qb2ludD1sLm1peCh0Lm1pbix0Lm1heCxlLm9yaWdpbiksZS5zY2FsZT13bihuKS93bih0KSxtbihlLnNjYWxlLDEsMWUtNCkmJihlLnNjYWxlPTEpLGUudHJhbnNsYXRlPWwubWl4KG4ubWluLG4ubWF4LGUub3JpZ2luKS1lLm9yaWdpblBvaW50LG1uKGUudHJhbnNsYXRlKSYmKGUudHJhbnNsYXRlPTApfWZ1bmN0aW9uIHluKGUsdCxuLHIpe2JuKGUueCx0Lngsbi54LHhuKHIub3JpZ2luWCkpLGJuKGUueSx0Lnksbi55LHhuKHIub3JpZ2luWSkpfWZ1bmN0aW9uIHhuKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlP2U6LjV9ZnVuY3Rpb24ga24oZSx0LG4pe2UubWluPW4ubWluK3QubWluLGUubWF4PWUubWluK3duKHQpfWZ1bmN0aW9uIFNuKGUsdCxuKXt2YXIgcj10Lm1pbixvPXQubWF4O3JldHVybiB2b2lkIDAhPT1yJiZlPHI/ZT1uP2wubWl4KHIsZSxuLm1pbik6TWF0aC5tYXgoZSxyKTp2b2lkIDAhPT1vJiZlPm8mJihlPW4/bC5taXgobyxlLG4ubWF4KTpNYXRoLm1pbihlLG8pKSxlfWZ1bmN0aW9uIE9uKGUsdCxuKXtyZXR1cm57bWluOnZvaWQgMCE9PXQ/ZS5taW4rdDp2b2lkIDAsbWF4OnZvaWQgMCE9PW4/ZS5tYXgrbi0oZS5tYXgtZS5taW4pOnZvaWQgMH19ZnVuY3Rpb24gTW4oZSx0KXt2YXIgbixvPXQubWluLWUubWluLGE9dC5tYXgtZS5tYXg7cmV0dXJuIHQubWF4LXQubWluPGUubWF4LWUubWluJiYobz0obj1yLl9fcmVhZChbYSxvXSwyKSlbMF0sYT1uWzFdKSx7bWluOmUubWluK28sbWF4OmUubWluK2F9fWZ1bmN0aW9uIExuKGUsdCxuKXtyZXR1cm57bWluOl9uKGUsdCksbWF4Ol9uKGUsbil9fWZ1bmN0aW9uIF9uKGUsdCl7dmFyIG47cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/ZTpudWxsIT09KG49ZVt0XSkmJnZvaWQgMCE9PW4/bjowfWZ1bmN0aW9uIFBuKGUsdCl7cmV0dXJuIGhuKGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS50b3Ascj1lLmxlZnQsbz1lLmJvdHRvbSxhPWUucmlnaHQ7dm9pZCAwPT09dCYmKHQ9Zm4pO3ZhciBpPXQoe3g6cix5Om59KSxsPXQoe3g6YSx5Om99KTtyZXR1cm57dG9wOmkueSxsZWZ0OmkueCxib3R0b206bC55LHJpZ2h0OmwueH19KGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdCkpfXZhciBFbj1mdW5jdGlvbihlLHQpe3JldHVybiBlLmRlcHRoLXQuZGVwdGh9O2Z1bmN0aW9uIGpuKGUpe3JldHVybiBlLnByb2plY3Rpb24uaXNFbmFibGVkfHxlLnNob3VsZFJlc2V0VHJhbnNmb3JtKCl9ZnVuY3Rpb24gUm4oZSx0KXt2b2lkIDA9PT10JiYodD1bXSk7dmFyIG49ZS5wYXJlbnQ7cmV0dXJuIG4mJlJuKG4sdCksam4oZSkmJnQucHVzaChlKSx0fWZ1bmN0aW9uIEluKGUpe2lmKCFlLnNob3VsZFJlc2V0VHJhbnNmb3JtKCkpe3ZhciB0LG49ZS5nZXRMYXlvdXRTdGF0ZSgpO2Uubm90aWZ5QmVmb3JlTGF5b3V0TWVhc3VyZShuLmxheW91dCksbi5pc0h5ZHJhdGVkPSEwLG4ubGF5b3V0PWUubWVhc3VyZVZpZXdwb3J0Qm94KCksbi5sYXlvdXRDb3JyZWN0ZWQ9KHQ9bi5sYXlvdXQse3g6ci5fX2Fzc2lnbih7fSx0LngpLHk6ci5fX2Fzc2lnbih7fSx0LnkpfSksZS5ub3RpZnlMYXlvdXRNZWFzdXJlKG4ubGF5b3V0LGUucHJldlZpZXdwb3J0Qm94fHxuLmxheW91dCkscC5kZWZhdWx0LnVwZGF0ZSgoZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWJhc2VQcm9qZWN0aW9uVGFyZ2V0KCl9KSl9fWZ1bmN0aW9uIFZuKGUpe2Uuc2hvdWxkUmVzZXRUcmFuc2Zvcm0oKXx8KGUucHJldlZpZXdwb3J0Qm94PWUubWVhc3VyZVZpZXdwb3J0Qm94KCExKSxlLnJlYmFzZVByb2plY3Rpb25UYXJnZXQoITEsZS5wcmV2Vmlld3BvcnRCb3gpKX1mdW5jdGlvbiBIbihlLHQpe3JldHVybnttaW46dC5taW4tZS5taW4sbWF4OnQubWF4LWUubWlufX1mdW5jdGlvbiBBbihlLHQpe3JldHVybnt4OkhuKGUueCx0LngpLHk6SG4oZS55LHQueSl9fWZ1bmN0aW9uIFRuKGUpe3ZhciB0PWUuZ2V0UHJvcHMoKSxuPXQuZHJhZyxyPXQuX2RyYWdYO3JldHVybiBuJiYhcn1mdW5jdGlvbiBEbihlLHQpe2UubWluPXQubWluLGUubWF4PXQubWF4fWZ1bmN0aW9uIEJuKGUsdCxuKXtyZXR1cm4gbit0KihlLW4pfWZ1bmN0aW9uIFpuKGUsdCxuLHIsbyl7cmV0dXJuIHZvaWQgMCE9PW8mJihlPUJuKGUsbyxyKSksQm4oZSxuLHIpK3R9ZnVuY3Rpb24gJG4oZSx0LG4scixvKXt2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj0xKSxlLm1pbj1abihlLm1pbix0LG4scixvKSxlLm1heD1abihlLm1heCx0LG4scixvKX1mdW5jdGlvbiBObihlLHQpe3ZhciBuPXQueCxyPXQueTskbihlLngsbi50cmFuc2xhdGUsbi5zY2FsZSxuLm9yaWdpblBvaW50KSwkbihlLnksci50cmFuc2xhdGUsci5zY2FsZSxyLm9yaWdpblBvaW50KX1mdW5jdGlvbiBGbihlLHQsbixvKXt2YXIgYT1yLl9fcmVhZChvLDMpLGk9YVswXSxzPWFbMV0sYz1hWzJdO2UubWluPXQubWluLGUubWF4PXQubWF4O3ZhciB1PXZvaWQgMCE9PW5bY10/bltjXTouNSxkPWwubWl4KHQubWluLHQubWF4LHUpOyRuKGUsbltpXSxuW3NdLGQsbi5zY2FsZSl9dmFyIFduPVtcInhcIixcInNjYWxlWFwiLFwib3JpZ2luWFwiXSxVbj1bXCJ5XCIsXCJzY2FsZVlcIixcIm9yaWdpbllcIl07ZnVuY3Rpb24gem4oZSx0LG4pe0ZuKGUueCx0LngsbixXbiksRm4oZS55LHQueSxuLFVuKX1mdW5jdGlvbiBHbihlLHQsbixyLG8pe3JldHVybiBlPUJuKGUtPXQsMS9uLHIpLHZvaWQgMCE9PW8mJihlPUJuKGUsMS9vLHIpKSxlfWZ1bmN0aW9uIEtuKGUsdCxuKXt2YXIgbz1yLl9fcmVhZChuLDMpLGE9b1swXSxpPW9bMV0scz1vWzJdOyFmdW5jdGlvbihlLHQsbixyLG8pe3ZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PW4mJihuPTEpLHZvaWQgMD09PXImJihyPS41KTt2YXIgYT1sLm1peChlLm1pbixlLm1heCxyKS10O2UubWluPUduKGUubWluLHQsbixhLG8pLGUubWF4PUduKGUubWF4LHQsbixhLG8pfShlLHRbYV0sdFtpXSx0W3NdLHQuc2NhbGUpfWZ1bmN0aW9uIHFuKGUsdCl7S24oZS54LHQsV24pLEtuKGUueSx0LFVuKX12YXIgWW49bmV3IFNldDtmdW5jdGlvbiBKbihlLHQsbil7ZVtuXXx8KGVbbl09W10pLGVbbl0ucHVzaCh0KX1mdW5jdGlvbiBYbihlKXtyZXR1cm4gWW4uYWRkKGUpLGZ1bmN0aW9uKCl7cmV0dXJuIFluLmRlbGV0ZShlKX19ZnVuY3Rpb24gUW4oKXtpZihZbi5zaXplKXt2YXIgZT0wLHQ9W1tdXSxuPVtdLHI9ZnVuY3Rpb24obil7cmV0dXJuIEpuKHQsbixlKX0sbz1mdW5jdGlvbih0KXtKbihuLHQsZSksZSsrfTtZbi5mb3JFYWNoKChmdW5jdGlvbih0KXt0KHIsbyksZT0wfSkpLFluLmNsZWFyKCk7Zm9yKHZhciBhPW4ubGVuZ3RoLGk9MDtpPD1hO2krKyl0W2ldJiZ0W2ldLmZvckVhY2godHIpLG5baV0mJm5baV0uZm9yRWFjaCh0cil9fXZhciBlcix0cj1mdW5jdGlvbihlKXtyZXR1cm4gZSgpfSxucj1uZXcgV2Vha01hcCxycj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9ZS52aXN1YWxFbGVtZW50O3RoaXMuaXNEcmFnZ2luZz0hMSx0aGlzLmN1cnJlbnREaXJlY3Rpb249bnVsbCx0aGlzLmNvbnN0cmFpbnRzPSExLHRoaXMuZWxhc3RpYz17eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sdGhpcy5wcm9wcz17fSx0aGlzLmhhc011dGF0ZWRDb25zdHJhaW50cz0hMSx0aGlzLmN1cnNvclByb2dyZXNzPXt4Oi41LHk6LjV9LHRoaXMub3JpZ2luUG9pbnQ9e30sdGhpcy5vcGVuR2xvYmFsTG9jaz1udWxsLHRoaXMucGFuU2Vzc2lvbj1udWxsLHRoaXMudmlzdWFsRWxlbWVudD10LHRoaXMudmlzdWFsRWxlbWVudC5lbmFibGVMYXlvdXRQcm9qZWN0aW9uKCksbnIuc2V0KHQsdGhpcyl9cmV0dXJuIGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxvPXZvaWQgMD09PXQ/e306dCxhPW8uc25hcFRvQ3Vyc29yLGk9dm9pZCAwIT09YSYmYSxjPW8uY3Vyc29yUHJvZ3Jlc3MsdT10aGlzLnByb3BzLnRyYW5zZm9ybVBhZ2VQb2ludDt0aGlzLnBhblNlc3Npb249bmV3IGFuKGUse29uU2Vzc2lvblN0YXJ0OmZ1bmN0aW9uKGUpe3ZhciB0O24uc3RvcE1vdGlvbigpO3ZhciBvPWZ1bmN0aW9uKGUpe3JldHVybiBLZShlLFwiY2xpZW50XCIpfShlKS5wb2ludDtudWxsPT09KHQ9bi5jYW5jZWxMYXlvdXQpfHx2b2lkIDA9PT10fHx0LmNhbGwobiksbi5jYW5jZWxMYXlvdXQ9WG4oKGZ1bmN0aW9uKGUsdCl7dmFyIGE9Um4obi52aXN1YWxFbGVtZW50KSx1PWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49ZnVuY3Rpb24oZSl7am4oZSkmJnQucHVzaChlKSxlLmNoaWxkcmVuLmZvckVhY2gobil9O3JldHVybiBlLmNoaWxkcmVuLmZvckVhY2gobiksdC5zb3J0KEVuKX0obi52aXN1YWxFbGVtZW50KSxkPXIuX19zcHJlYWRBcnJheShyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQoYSkpLHIuX19yZWFkKHUpKSxwPSExO24uaXNMYXlvdXREcmFnKCkmJm4udmlzdWFsRWxlbWVudC5sb2NrUHJvamVjdGlvblRhcmdldCgpLHQoKGZ1bmN0aW9uKCl7ZC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXNldFRyYW5zZm9ybSgpfSkpfSkpLGUoKGZ1bmN0aW9uKCl7SW4obi52aXN1YWxFbGVtZW50KSx1LmZvckVhY2goSW4pfSkpLHQoKGZ1bmN0aW9uKCl7ZC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXN0b3JlVHJhbnNmb3JtKCl9KSksaSYmKHA9bi5zbmFwVG9DdXJzb3IobykpfSkpLGUoKGZ1bmN0aW9uKCl7Qm9vbGVhbihuLmdldEF4aXNNb3Rpb25WYWx1ZShcInhcIikmJiFuLmlzRXh0ZXJuYWxEcmFnKCkpfHxuLnZpc3VhbEVsZW1lbnQucmViYXNlUHJvamVjdGlvblRhcmdldCghMCxuLnZpc3VhbEVsZW1lbnQubWVhc3VyZVZpZXdwb3J0Qm94KCExKSksbi52aXN1YWxFbGVtZW50LnNjaGVkdWxlVXBkYXRlTGF5b3V0UHJvamVjdGlvbigpO3ZhciBlPW4udmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uO0NuKChmdW5jdGlvbih0KXtpZighcCl7dmFyIHI9ZS50YXJnZXRbdF0sYT1yLm1pbixpPXIubWF4O24uY3Vyc29yUHJvZ3Jlc3NbdF09Yz9jW3RdOmwucHJvZ3Jlc3MoYSxpLG9bdF0pfXZhciBzPW4uZ2V0QXhpc01vdGlvblZhbHVlKHQpO3MmJihuLm9yaWdpblBvaW50W3RdPXMuZ2V0KCkpfSkpfSkpLHQoKGZ1bmN0aW9uKCl7cy5mbHVzaFN5bmMudXBkYXRlKCkscy5mbHVzaFN5bmMucHJlUmVuZGVyKCkscy5mbHVzaFN5bmMucmVuZGVyKCkscy5mbHVzaFN5bmMucG9zdFJlbmRlcigpfSkpLGUoKGZ1bmN0aW9uKCl7cmV0dXJuIG4ucmVzb2x2ZURyYWdDb25zdHJhaW50cygpfSkpfSkpfSxvblN0YXJ0OmZ1bmN0aW9uKGUsdCl7dmFyIHIsbyxhLGk9bi5wcm9wcyxsPWkuZHJhZyxzPWkuZHJhZ1Byb3BhZ2F0aW9uOyghbHx8c3x8KG4ub3Blbkdsb2JhbExvY2smJm4ub3Blbkdsb2JhbExvY2soKSxuLm9wZW5HbG9iYWxMb2NrPWx0KGwpLG4ub3Blbkdsb2JhbExvY2spKSYmKFFuKCksbi5pc0RyYWdnaW5nPSEwLG4uY3VycmVudERpcmVjdGlvbj1udWxsLG51bGw9PT0obz0ocj1uLnByb3BzKS5vbkRyYWdTdGFydCl8fHZvaWQgMD09PW98fG8uY2FsbChyLGUsdCksbnVsbD09PShhPW4udmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PWF8fGEuc2V0QWN0aXZlKFRlLkRyYWcsITApKX0sb25Nb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbyxhLGksbD1uLnByb3BzLHM9bC5kcmFnUHJvcGFnYXRpb24sYz1sLmRyYWdEaXJlY3Rpb25Mb2NrO2lmKHN8fG4ub3Blbkdsb2JhbExvY2spe3ZhciB1PXQub2Zmc2V0O2lmKGMmJm51bGw9PT1uLmN1cnJlbnREaXJlY3Rpb24pcmV0dXJuIG4uY3VycmVudERpcmVjdGlvbj1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PTEwKTt2YXIgbj1udWxsO3JldHVybiBNYXRoLmFicyhlLnkpPnQ/bj1cInlcIjpNYXRoLmFicyhlLngpPnQmJihuPVwieFwiKSxufSh1KSx2b2lkKG51bGwhPT1uLmN1cnJlbnREaXJlY3Rpb24mJihudWxsPT09KG89KHI9bi5wcm9wcykub25EaXJlY3Rpb25Mb2NrKXx8dm9pZCAwPT09b3x8by5jYWxsKHIsbi5jdXJyZW50RGlyZWN0aW9uKSkpO24udXBkYXRlQXhpcyhcInhcIix0LnBvaW50LHUpLG4udXBkYXRlQXhpcyhcInlcIix0LnBvaW50LHUpLG51bGw9PT0oaT0oYT1uLnByb3BzKS5vbkRyYWcpfHx2b2lkIDA9PT1pfHxpLmNhbGwoYSxlLHQpLGVyPWV9fSxvblNlc3Npb25FbmQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5zdG9wKGUsdCl9fSx7dHJhbnNmb3JtUGFnZVBvaW50OnV9KX0sZS5wcm90b3R5cGUucmVzb2x2ZURyYWdDb25zdHJhaW50cz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC5kcmFnQ29uc3RyYWludHMscj10LmRyYWdFbGFzdGljLG89dGhpcy52aXN1YWxFbGVtZW50LmdldExheW91dFN0YXRlKCkubGF5b3V0Q29ycmVjdGVkO3RoaXMuY29uc3RyYWludHM9ISFuJiYoUihuKT90aGlzLnJlc29sdmVSZWZDb25zdHJhaW50cyhvLG4pOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC50b3Ascj10LmxlZnQsbz10LmJvdHRvbSxhPXQucmlnaHQ7cmV0dXJue3g6T24oZS54LHIsYSkseTpPbihlLnksbixvKX19KG8sbikpLHRoaXMuZWxhc3RpYz1mdW5jdGlvbihlKXtyZXR1cm4hMT09PWU/ZT0wOiEwPT09ZSYmKGU9LjM1KSx7eDpMbihlLFwibGVmdFwiLFwicmlnaHRcIikseTpMbihlLFwidG9wXCIsXCJib3R0b21cIil9fShyKSx0aGlzLmNvbnN0cmFpbnRzJiYhdGhpcy5oYXNNdXRhdGVkQ29uc3RyYWludHMmJkNuKChmdW5jdGlvbih0KXtlLmdldEF4aXNNb3Rpb25WYWx1ZSh0KSYmKGUuY29uc3RyYWludHNbdF09ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtyZXR1cm4gdm9pZCAwIT09dC5taW4mJihuLm1pbj10Lm1pbi1lLm1pbiksdm9pZCAwIT09dC5tYXgmJihuLm1heD10Lm1heC1lLm1pbiksbn0ob1t0XSxlLmNvbnN0cmFpbnRzW3RdKSl9KSl9LGUucHJvdG90eXBlLnJlc29sdmVSZWZDb25zdHJhaW50cz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucHJvcHMscj1uLm9uTWVhc3VyZURyYWdDb25zdHJhaW50cyxvPW4udHJhbnNmb3JtUGFnZVBvaW50LGk9dC5jdXJyZW50O2EuaW52YXJpYW50KG51bGwhPT1pLFwiSWYgYGRyYWdDb25zdHJhaW50c2AgaXMgc2V0IGFzIGEgUmVhY3QgcmVmLCB0aGF0IHJlZiBtdXN0IGJlIHBhc3NlZCB0byBhbm90aGVyIGNvbXBvbmVudCdzIGByZWZgIHByb3AuXCIpLHRoaXMuY29uc3RyYWludHNCb3g9UG4oaSxvKTt2YXIgbD1mdW5jdGlvbihlLHQpe3JldHVybnt4Ok1uKGUueCx0LngpLHk6TW4oZS55LHQueSl9fShlLHRoaXMuY29uc3RyYWludHNCb3gpO2lmKHIpe3ZhciBzPXIoZnVuY3Rpb24oZSl7dmFyIHQ9ZS54LG49ZS55O3JldHVybnt0b3A6bi5taW4sYm90dG9tOm4ubWF4LGxlZnQ6dC5taW4scmlnaHQ6dC5tYXh9fShsKSk7dGhpcy5oYXNNdXRhdGVkQ29uc3RyYWludHM9ISFzLHMmJihsPWhuKHMpKX1yZXR1cm4gbH0sZS5wcm90b3R5cGUuY2FuY2VsRHJhZz1mdW5jdGlvbigpe3ZhciBlLHQ7dGhpcy52aXN1YWxFbGVtZW50LnVubG9ja1Byb2plY3Rpb25UYXJnZXQoKSxudWxsPT09KGU9dGhpcy5jYW5jZWxMYXlvdXQpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyksdGhpcy5pc0RyYWdnaW5nPSExLHRoaXMucGFuU2Vzc2lvbiYmdGhpcy5wYW5TZXNzaW9uLmVuZCgpLHRoaXMucGFuU2Vzc2lvbj1udWxsLCF0aGlzLnByb3BzLmRyYWdQcm9wYWdhdGlvbiYmdGhpcy5vcGVuR2xvYmFsTG9jayYmKHRoaXMub3Blbkdsb2JhbExvY2soKSx0aGlzLm9wZW5HbG9iYWxMb2NrPW51bGwpLG51bGw9PT0odD10aGlzLnZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT10fHx0LnNldEFjdGl2ZShUZS5EcmFnLCExKX0sZS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbztudWxsPT09KG49dGhpcy5wYW5TZXNzaW9uKXx8dm9pZCAwPT09bnx8bi5lbmQoKSx0aGlzLnBhblNlc3Npb249bnVsbDt2YXIgYT10aGlzLmlzRHJhZ2dpbmc7aWYodGhpcy5jYW5jZWxEcmFnKCksYSl7dmFyIGk9dC52ZWxvY2l0eTt0aGlzLmFuaW1hdGVEcmFnRW5kKGkpLG51bGw9PT0obz0ocj10aGlzLnByb3BzKS5vbkRyYWdFbmQpfHx2b2lkIDA9PT1vfHxvLmNhbGwocixlLHQpfX0sZS5wcm90b3R5cGUuc25hcFRvQ3Vyc29yPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIENuKChmdW5jdGlvbihuKXtpZihvcihuLHQucHJvcHMuZHJhZyx0LmN1cnJlbnREaXJlY3Rpb24pKXt2YXIgcj10LmdldEF4aXNNb3Rpb25WYWx1ZShuKTtpZighcilyZXR1cm4gdC5jdXJzb3JQcm9ncmVzc1tuXT0uNSwhMDt2YXIgbz10LnZpc3VhbEVsZW1lbnQuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXQsYT1vW25dLm1heC1vW25dLm1pbixpPW9bbl0ubWluK2EvMixsPWVbbl0taTt0Lm9yaWdpblBvaW50W25dPWVbbl0sci5zZXQobCl9fSkpLmluY2x1ZGVzKCEwKX0sZS5wcm90b3R5cGUudXBkYXRlQXhpcz1mdW5jdGlvbihlLHQsbil7aWYob3IoZSx0aGlzLnByb3BzLmRyYWcsdGhpcy5jdXJyZW50RGlyZWN0aW9uKSlyZXR1cm4gdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoZSk/dGhpcy51cGRhdGVBeGlzTW90aW9uVmFsdWUoZSxuKTp0aGlzLnVwZGF0ZVZpc3VhbEVsZW1lbnRBeGlzKGUsdCl9LGUucHJvdG90eXBlLnVwZGF0ZUF4aXNNb3Rpb25WYWx1ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGUpO2lmKHQmJm4pe3ZhciByPXRoaXMub3JpZ2luUG9pbnRbZV0rdFtlXSxvPXRoaXMuY29uc3RyYWludHM/U24ocix0aGlzLmNvbnN0cmFpbnRzW2VdLHRoaXMuZWxhc3RpY1tlXSk6cjtuLnNldChvKX19LGUucHJvdG90eXBlLnVwZGF0ZVZpc3VhbEVsZW1lbnRBeGlzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzLnZpc3VhbEVsZW1lbnQuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXRbZV0sbz1yLm1heC1yLm1pbixhPXRoaXMuY3Vyc29yUHJvZ3Jlc3NbZV0saT1mdW5jdGlvbihlLHQsbixyLG8pe3ZhciBhPWUtdCpuO3JldHVybiByP1NuKGEscixvKTphfSh0W2VdLG8sYSxudWxsPT09KG49dGhpcy5jb25zdHJhaW50cyl8fHZvaWQgMD09PW4/dm9pZCAwOm5bZV0sdGhpcy5lbGFzdGljW2VdKTt0aGlzLnZpc3VhbEVsZW1lbnQuc2V0UHJvamVjdGlvblRhcmdldEF4aXMoZSxpLGkrbyl9LGUucHJvdG90eXBlLnNldFByb3BzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZHJhZyxuPXZvaWQgMCE9PXQmJnQsbz1lLmRyYWdEaXJlY3Rpb25Mb2NrLGE9dm9pZCAwIT09byYmbyxpPWUuZHJhZ1Byb3BhZ2F0aW9uLGw9dm9pZCAwIT09aSYmaSxzPWUuZHJhZ0NvbnN0cmFpbnRzLGM9dm9pZCAwIT09cyYmcyx1PWUuZHJhZ0VsYXN0aWMsZD12b2lkIDA9PT11Py4zNTp1LHA9ZS5kcmFnTW9tZW50dW0sZj12b2lkIDA9PT1wfHxwLGg9ci5fX3Jlc3QoZSxbXCJkcmFnXCIsXCJkcmFnRGlyZWN0aW9uTG9ja1wiLFwiZHJhZ1Byb3BhZ2F0aW9uXCIsXCJkcmFnQ29uc3RyYWludHNcIixcImRyYWdFbGFzdGljXCIsXCJkcmFnTW9tZW50dW1cIl0pO3RoaXMucHJvcHM9ci5fX2Fzc2lnbih7ZHJhZzpuLGRyYWdEaXJlY3Rpb25Mb2NrOmEsZHJhZ1Byb3BhZ2F0aW9uOmwsZHJhZ0NvbnN0cmFpbnRzOmMsZHJhZ0VsYXN0aWM6ZCxkcmFnTW9tZW50dW06Zn0saCl9LGUucHJvdG90eXBlLmdldEF4aXNNb3Rpb25WYWx1ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLG49dC5sYXlvdXQscj10LmxheW91dElkLG89XCJfZHJhZ1wiK2UudG9VcHBlckNhc2UoKTtyZXR1cm4gdGhpcy5wcm9wc1tvXT90aGlzLnByb3BzW29dOm58fHZvaWQgMCE9PXI/dm9pZCAwOnRoaXMudmlzdWFsRWxlbWVudC5nZXRWYWx1ZShlLDApfSxlLnByb3RvdHlwZS5pc0xheW91dERyYWc9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoXCJ4XCIpfSxlLnByb3RvdHlwZS5pc0V4dGVybmFsRHJhZz1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLl9kcmFnWCxuPWUuX2RyYWdZO3JldHVybiB0fHxufSxlLnByb3RvdHlwZS5hbmltYXRlRHJhZ0VuZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy5wcm9wcyxvPW4uZHJhZyxhPW4uZHJhZ01vbWVudHVtLGk9bi5kcmFnRWxhc3RpYyxsPW4uZHJhZ1RyYW5zaXRpb24scz1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSEwKTt2YXIgbixyPWUuZ2V0UHJvamVjdGlvblBhcmVudCgpO3JldHVybiEhciYmKHQ/cW4obj1BbihyLnByb2plY3Rpb24udGFyZ2V0LGUucHJvamVjdGlvbi50YXJnZXQpLHIuZ2V0TGF0ZXN0VmFsdWVzKCkpOm49QW4oci5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCxlLmdldExheW91dFN0YXRlKCkubGF5b3V0KSxDbigoZnVuY3Rpb24odCl7cmV0dXJuIGUuc2V0UHJvamVjdGlvblRhcmdldEF4aXModCxuW3RdLm1pbixuW3RdLm1heCwhMCl9KSksITApfSh0aGlzLnZpc3VhbEVsZW1lbnQsdGhpcy5pc0xheW91dERyYWcoKSYmIXRoaXMuaXNFeHRlcm5hbERyYWcoKSksYz10aGlzLmNvbnN0cmFpbnRzfHx7fTtpZihzJiZPYmplY3Qua2V5cyhjKS5sZW5ndGgmJnRoaXMuaXNMYXlvdXREcmFnKCkpe3ZhciB1PXRoaXMudmlzdWFsRWxlbWVudC5nZXRQcm9qZWN0aW9uUGFyZW50KCk7aWYodSl7dmFyIGQ9QW4odS5wcm9qZWN0aW9uLnRhcmdldEZpbmFsLGMpO0NuKChmdW5jdGlvbihlKXt2YXIgdD1kW2VdLG49dC5taW4scj10Lm1heDtjW2VdPXttaW46aXNOYU4obik/dm9pZCAwOm4sbWF4OmlzTmFOKHIpP3ZvaWQgMDpyfX0pKX19dmFyIHA9Q24oKGZ1bmN0aW9uKG4pe3ZhciB1O2lmKG9yKG4sbyx0LmN1cnJlbnREaXJlY3Rpb24pKXt2YXIgZD1udWxsIT09KHU9bnVsbD09Yz92b2lkIDA6Y1tuXSkmJnZvaWQgMCE9PXU/dTp7fSxwPWk/MjAwOjFlNixmPWk/NDA6MWU3LGg9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt0eXBlOlwiaW5lcnRpYVwiLHZlbG9jaXR5OmE/ZVtuXTowLGJvdW5jZVN0aWZmbmVzczpwLGJvdW5jZURhbXBpbmc6Zix0aW1lQ29uc3RhbnQ6NzUwLHJlc3REZWx0YToxLHJlc3RTcGVlZDoxMH0sbCksZCk7cmV0dXJuIHQuZ2V0QXhpc01vdGlvblZhbHVlKG4pP3Quc3RhcnRBeGlzVmFsdWVBbmltYXRpb24obixoKTp0LnZpc3VhbEVsZW1lbnQuc3RhcnRMYXlvdXRBbmltYXRpb24obixoLHMpfX0pKTtyZXR1cm4gUHJvbWlzZS5hbGwocCkudGhlbigoZnVuY3Rpb24oKXt2YXIgZSxuO251bGw9PT0obj0oZT10LnByb3BzKS5vbkRyYWdUcmFuc2l0aW9uRW5kKXx8dm9pZCAwPT09bnx8bi5jYWxsKGUpfSkpfSxlLnByb3RvdHlwZS5zdG9wTW90aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztDbigoZnVuY3Rpb24odCl7dmFyIG49ZS5nZXRBeGlzTW90aW9uVmFsdWUodCk7bj9uLnN0b3AoKTplLnZpc3VhbEVsZW1lbnQuc3RvcExheW91dEFuaW1hdGlvbigpfSkpfSxlLnByb3RvdHlwZS5zdGFydEF4aXNWYWx1ZUFuaW1hdGlvbj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGUpO2lmKG4pe3ZhciByPW4uZ2V0KCk7cmV0dXJuIG4uc2V0KHIpLG4uc2V0KHIpLEl0KGUsbiwwLHQpfX0sZS5wcm90b3R5cGUuc2NhbGVQb2ludD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC5kcmFnO2lmKFIodC5kcmFnQ29uc3RyYWludHMpJiZ0aGlzLmNvbnN0cmFpbnRzQm94KXt0aGlzLnN0b3BNb3Rpb24oKTt2YXIgcj17eDowLHk6MH07Q24oKGZ1bmN0aW9uKHQpe3ZhciBuLG8sYSxpLHMsYztyW3RdPShuPWUudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uLnRhcmdldFt0XSxvPWUuY29uc3RyYWludHNCb3hbdF0saT0uNSxzPXduKG4pLChjPXduKG8pKT5zP2k9bC5wcm9ncmVzcyhvLm1pbixvLm1heC1zLG4ubWluKTpzPmMmJihpPWwucHJvZ3Jlc3Mobi5taW4sbi5tYXgtYyxvLm1pbikpLGE9aSxsLmNsYW1wKDAsMSxhKSl9KSksdGhpcy51cGRhdGVDb25zdHJhaW50cygoZnVuY3Rpb24oKXtDbigoZnVuY3Rpb24odCl7aWYob3IodCxuLG51bGwpKXt2YXIgbz1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5tYXgtZS5taW4sbz1sLm1peCh0Lm1pbix0Lm1heC1yLG4pO3JldHVybnttaW46byxtYXg6bytyfX0oZS52aXN1YWxFbGVtZW50LnByb2plY3Rpb24udGFyZ2V0W3RdLGUuY29uc3RyYWludHNCb3hbdF0sclt0XSksYT1vLm1pbixpPW8ubWF4O2UudmlzdWFsRWxlbWVudC5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyh0LGEsaSl9fSkpfSkpLHNldFRpbWVvdXQoUW4sMSl9fSxlLnByb3RvdHlwZS51cGRhdGVDb25zdHJhaW50cz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuY2FuY2VsTGF5b3V0PVhuKChmdW5jdGlvbihuLHIpe3ZhciBvPVJuKHQudmlzdWFsRWxlbWVudCk7cigoZnVuY3Rpb24oKXtyZXR1cm4gby5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXNldFRyYW5zZm9ybSgpfSkpfSkpLG4oKGZ1bmN0aW9uKCl7cmV0dXJuIEluKHQudmlzdWFsRWxlbWVudCl9KSkscigoZnVuY3Rpb24oKXtyZXR1cm4gby5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXN0b3JlVHJhbnNmb3JtKCl9KSl9KSksbigoZnVuY3Rpb24oKXt0LnJlc29sdmVEcmFnQ29uc3RyYWludHMoKX0pKSxlJiZyKGUpfSkpfSxlLnByb3RvdHlwZS5tb3VudD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49bnQoZS5nZXRJbnN0YW5jZSgpLFwicG9pbnRlcmRvd25cIiwoZnVuY3Rpb24oZSl7dmFyIG49dC5wcm9wcyxyPW4uZHJhZyxvPW4uZHJhZ0xpc3RlbmVyO3ImJih2b2lkIDA9PT1vfHxvKSYmdC5zdGFydChlKX0pKSxyPSRlKHdpbmRvdyxcInJlc2l6ZVwiLChmdW5jdGlvbigpe3Quc2NhbGVQb2ludCgpfSkpLG89ZS5vbkxheW91dFVwZGF0ZSgoZnVuY3Rpb24oKXt0LmlzRHJhZ2dpbmcmJnQucmVzb2x2ZURyYWdDb25zdHJhaW50cygpfSkpLGE9ZS5wcmV2RHJhZ0N1cnNvcjtyZXR1cm4gYSYmdGhpcy5zdGFydChlcix7Y3Vyc29yUHJvZ3Jlc3M6YX0pLGZ1bmN0aW9uKCl7bnVsbD09bnx8bigpLG51bGw9PXJ8fHIoKSxudWxsPT1vfHxvKCksdC5jYW5jZWxEcmFnKCl9fSxlfSgpO2Z1bmN0aW9uIG9yKGUsdCxuKXtyZXR1cm4hKCEwIT09dCYmdCE9PWV8fG51bGwhPT1uJiZuIT09ZSl9dmFyIGFyLGlyLGxyPXtwYW46cHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUub25QYW4sbj1lLm9uUGFuU3RhcnQscj1lLm9uUGFuRW5kLGE9ZS5vblBhblNlc3Npb25TdGFydCxpPWUudmlzdWFsRWxlbWVudCxsPXR8fG58fHJ8fGEscz1vLnVzZVJlZihudWxsKSxjPW8udXNlQ29udGV4dCh3KS50cmFuc2Zvcm1QYWdlUG9pbnQsdT17b25TZXNzaW9uU3RhcnQ6YSxvblN0YXJ0Om4sb25Nb3ZlOnQsb25FbmQ6ZnVuY3Rpb24oZSx0KXtzLmN1cnJlbnQ9bnVsbCxyJiZyKGUsdCl9fTtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtudWxsIT09cy5jdXJyZW50JiZzLmN1cnJlbnQudXBkYXRlSGFuZGxlcnModSl9KSkscnQoaSxcInBvaW50ZXJkb3duXCIsbCYmZnVuY3Rpb24oZSl7cy5jdXJyZW50PW5ldyBhbihlLHUse3RyYW5zZm9ybVBhZ2VQb2ludDpjfSl9KSxkdCgoZnVuY3Rpb24oKXtyZXR1cm4gcy5jdXJyZW50JiZzLmN1cnJlbnQuZW5kKCl9KSl9KSksZHJhZzpwdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kcmFnQ29udHJvbHMsbj1lLnZpc3VhbEVsZW1lbnQsYT1vLnVzZUNvbnRleHQodykudHJhbnNmb3JtUGFnZVBvaW50LGk9aygoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHJyKHt2aXN1YWxFbGVtZW50Om59KX0pKTtpLnNldFByb3BzKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxlKSx7dHJhbnNmb3JtUGFnZVBvaW50OmF9KSksby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHQmJnQuc3Vic2NyaWJlKGkpfSksW2ldKSxvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gaS5tb3VudChuKX0pLFtdKX0pKX07ZnVuY3Rpb24gc3IoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJmUuc3RhcnRzV2l0aChcInZhcigtLVwiKX0hZnVuY3Rpb24oZSl7ZVtlLkVudGVyaW5nPTBdPVwiRW50ZXJpbmdcIixlW2UuUHJlc2VudD0xXT1cIlByZXNlbnRcIixlW2UuRXhpdGluZz0yXT1cIkV4aXRpbmdcIn0oYXJ8fChhcj17fSkpLHQuVmlzaWJpbGl0eUFjdGlvbj12b2lkIDAsKGlyPXQuVmlzaWJpbGl0eUFjdGlvbnx8KHQuVmlzaWJpbGl0eUFjdGlvbj17fSkpW2lyLkhpZGU9MF09XCJIaWRlXCIsaXJbaXIuU2hvdz0xXT1cIlNob3dcIjt2YXIgY3I9L3ZhclxcKCgtLVthLXpBLVowLTktX10rKSw/ID8oW2EtekEtWjAtOSAoKSUjLiwtXSspP1xcKS87ZnVuY3Rpb24gdXIoZSx0LG4pe3ZvaWQgMD09PW4mJihuPTEpLGEuaW52YXJpYW50KG48PTQsJ01heCBDU1MgdmFyaWFibGUgZmFsbGJhY2sgZGVwdGggZGV0ZWN0ZWQgaW4gcHJvcGVydHkgXCInK2UrJ1wiLiBUaGlzIG1heSBpbmRpY2F0ZSBhIGNpcmN1bGFyIGZhbGxiYWNrIGRlcGVuZGVuY3kuJyk7dmFyIG89ci5fX3JlYWQoZnVuY3Rpb24oZSl7dmFyIHQ9Y3IuZXhlYyhlKTtpZighdClyZXR1cm5bLF07dmFyIG49ci5fX3JlYWQodCwzKTtyZXR1cm5bblsxXSxuWzJdXX0oZSksMiksaT1vWzBdLGw9b1sxXTtpZihpKXt2YXIgcz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGkpO3JldHVybiBzP3MudHJpbSgpOnNyKGwpP3VyKGwsdCxuKzEpOmx9fWZ1bmN0aW9uIGRyKGUsdCl7cmV0dXJuIGUvKHQubWF4LXQubWluKSoxMDB9dmFyIHByPVwiXyRjc3NcIixmcj17cHJvY2VzczpmdW5jdGlvbihlLHQsbil7dmFyIHI9bi50YXJnZXQ7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe2lmKCFpLnB4LnRlc3QoZSkpcmV0dXJuIGU7ZT1wYXJzZUZsb2F0KGUpfXJldHVybiBkcihlLHIueCkrXCIlIFwiK2RyKGUsci55KStcIiVcIn19LGhyPXtib3JkZXJSYWRpdXM6ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGZyKSx7YXBwbHlUbzpbXCJib3JkZXJUb3BMZWZ0UmFkaXVzXCIsXCJib3JkZXJUb3BSaWdodFJhZGl1c1wiLFwiYm9yZGVyQm90dG9tTGVmdFJhZGl1c1wiLFwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXNcIl19KSxib3JkZXJUb3BMZWZ0UmFkaXVzOmZyLGJvcmRlclRvcFJpZ2h0UmFkaXVzOmZyLGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6ZnIsYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6ZnIsYm94U2hhZG93Ontwcm9jZXNzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5kZWx0YSxyPXQudHJlZVNjYWxlLG89ZSxhPWUuaW5jbHVkZXMoXCJ2YXIoXCIpLHM9W107YSYmKGU9ZS5yZXBsYWNlKGNyLChmdW5jdGlvbihlKXtyZXR1cm4gcy5wdXNoKGUpLHByfSkpKTt2YXIgYz1pLmNvbXBsZXgucGFyc2UoZSk7aWYoYy5sZW5ndGg+NSlyZXR1cm4gbzt2YXIgdT1pLmNvbXBsZXguY3JlYXRlVHJhbnNmb3JtZXIoZSksZD1cIm51bWJlclwiIT10eXBlb2YgY1swXT8xOjAscD1uLnguc2NhbGUqci54LGY9bi55LnNjYWxlKnIueTtjWzArZF0vPXAsY1sxK2RdLz1mO3ZhciBoPWwubWl4KHAsZiwuNSk7XCJudW1iZXJcIj09dHlwZW9mIGNbMitkXSYmKGNbMitkXS89aCksXCJudW1iZXJcIj09dHlwZW9mIGNbMytkXSYmKGNbMytkXS89aCk7dmFyIGc9dShjKTtpZihhKXt2YXIgdj0wO2c9Zy5yZXBsYWNlKHByLChmdW5jdGlvbigpe3ZhciBlPXNbdl07cmV0dXJuIHYrKyxlfSkpfXJldHVybiBnfX19LGdyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt2YXIgbj1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIG4uZnJhbWVUYXJnZXQ9e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19LG4uY3VycmVudEFuaW1hdGlvblRhcmdldD17eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sbi5pc0FuaW1hdGluZz17eDohMSx5OiExfSxuLnN0b3BBeGlzQW5pbWF0aW9uPXt4OnZvaWQgMCx5OnZvaWQgMH0sbi5pc0FuaW1hdGluZ1RyZWU9ITEsbi5hbmltYXRlPWZ1bmN0aW9uKGUsbyxhKXt2b2lkIDA9PT1hJiYoYT17fSk7dmFyIGk9YS5vcmlnaW5Cb3gsbD1hLnRhcmdldEJveCxzPWEudmlzaWJpbGl0eUFjdGlvbixjPWEuc2hvdWxkU3RhY2tBbmltYXRlLHU9YS5vbkNvbXBsZXRlLGQ9YS5wcmV2UGFyZW50LHA9ci5fX3Jlc3QoYSxbXCJvcmlnaW5Cb3hcIixcInRhcmdldEJveFwiLFwidmlzaWJpbGl0eUFjdGlvblwiLFwic2hvdWxkU3RhY2tBbmltYXRlXCIsXCJvbkNvbXBsZXRlXCIsXCJwcmV2UGFyZW50XCJdKSxmPW4ucHJvcHMsaD1mLnZpc3VhbEVsZW1lbnQsZz1mLmxheW91dDtpZighMT09PWMpcmV0dXJuIG4uaXNBbmltYXRpbmdUcmVlPSExLG4uc2FmZVRvUmVtb3ZlKCk7aWYoIW4uaXNBbmltYXRpbmdUcmVlfHwhMD09PWMpe2MmJihuLmlzQW5pbWF0aW5nVHJlZT0hMCksbz1pfHxvLGU9bHx8ZTt2YXIgdixDLG0sdz0hMSxiPWguZ2V0UHJvamVjdGlvblBhcmVudCgpO2lmKGIpe3ZhciB5PWIucHJldlZpZXdwb3J0Qm94LHg9Yi5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dDtkJiYobCYmKHg9ZC5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCksaSYmKEM9Yiwodj1kKS5nZXRMYXlvdXRJZCgpPT09KG09Qy5nZXRMYXlvdXRJZCgpKSYmKHZvaWQgMCE9PW18fHY9PT1DKSkmJmQucHJldlZpZXdwb3J0Qm94JiYoeT1kLnByZXZWaWV3cG9ydEJveCkpLHkmJmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZXx8IWUmJiEodHx8bil9KGQsaSxsKSYmKHc9ITAsbz1Bbih5LG8pLGU9QW4oeCxlKSl9dmFyIGssUyxPPShTPWUsIShDcihrPW8pfHxDcihTKXx8bXIoay54LFMueCkmJm1yKGsueSxTLnkpKSksTT1DbigoZnVuY3Rpb24oYSl7dmFyIGksbDtpZihcInBvc2l0aW9uXCI9PT1nKXt2YXIgYz1lW2FdLm1heC1lW2FdLm1pbjtvW2FdLm1heD1vW2FdLm1pbitjfWlmKCFoLnByb2plY3Rpb24uaXNUYXJnZXRMb2NrZWQpcmV0dXJuIHZvaWQgMD09PXM/Tz9uLmFuaW1hdGVBeGlzKGEsZVthXSxvW2FdLHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxwKSx7aXNSZWxhdGl2ZTp3fSkpOihudWxsPT09KGw9KGk9bi5zdG9wQXhpc0FuaW1hdGlvbilbYV0pfHx2b2lkIDA9PT1sfHxsLmNhbGwoaSksaC5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyhhLGVbYV0ubWluLGVbYV0ubWF4LHcpKTp2b2lkIGguc2V0VmlzaWJpbGl0eShzPT09dC5WaXNpYmlsaXR5QWN0aW9uLlNob3cpfSkpO3JldHVybiBoLnN5bmNSZW5kZXIoKSxQcm9taXNlLmFsbChNKS50aGVuKChmdW5jdGlvbigpe24uaXNBbmltYXRpbmdUcmVlPSExLHUmJnUoKSxoLm5vdGlmeUxheW91dEFuaW1hdGlvbkNvbXBsZXRlKCl9KSl9fSxufXJldHVybiByLl9fZXh0ZW5kcyhuLGUpLG4ucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMudmlzdWFsRWxlbWVudDt0LmFuaW1hdGVNb3Rpb25WYWx1ZT1JdCx0LmVuYWJsZUxheW91dFByb2plY3Rpb24oKSx0aGlzLnVuc3ViTGF5b3V0UmVhZHk9dC5vbkxheW91dFVwZGF0ZSh0aGlzLmFuaW1hdGUpLHQubGF5b3V0U2FmZVRvUmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuc2FmZVRvUmVtb3ZlKCl9LFUoaHIpfSxuLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy51bnN1YkxheW91dFJlYWR5KCksQ24oKGZ1bmN0aW9uKHQpe3ZhciBuLHI7cmV0dXJuIG51bGw9PT0ocj0obj1lLnN0b3BBeGlzQW5pbWF0aW9uKVt0XSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuY2FsbChuKX0pKX0sbi5wcm90b3R5cGUuYW5pbWF0ZUF4aXM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG8sYSxpPXRoaXMscz12b2lkIDA9PT1yP3t9OnIsYz1zLnRyYW5zaXRpb24sdT1zLmlzUmVsYXRpdmU7aWYoIXRoaXMuaXNBbmltYXRpbmdbZV18fCFtcih0LHRoaXMuY3VycmVudEFuaW1hdGlvblRhcmdldFtlXSkpe251bGw9PT0oYT0obz10aGlzLnN0b3BBeGlzQW5pbWF0aW9uKVtlXSl8fHZvaWQgMD09PWF8fGEuY2FsbChvKSx0aGlzLmlzQW5pbWF0aW5nW2VdPSEwO3ZhciBkPXRoaXMucHJvcHMudmlzdWFsRWxlbWVudCxwPXRoaXMuZnJhbWVUYXJnZXRbZV0sZj1kLmdldFByb2plY3Rpb25BbmltYXRpb25Qcm9ncmVzcygpW2VdO2YuY2xlYXJMaXN0ZW5lcnMoKSxmLnNldCgwKSxmLnNldCgwKTt2YXIgaD1mdW5jdGlvbigpe3ZhciByPWYuZ2V0KCkvMWUzOyFmdW5jdGlvbihlLHQsbixyKXtlLm1pbj1sLm1peCh0Lm1pbixuLm1pbixyKSxlLm1heD1sLm1peCh0Lm1heCxuLm1heCxyKX0ocCxuLHQsciksZC5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyhlLHAubWluLHAubWF4LHUpfTtoKCk7dmFyIGc9Zi5vbkNoYW5nZShoKTt0aGlzLnN0b3BBeGlzQW5pbWF0aW9uW2VdPWZ1bmN0aW9uKCl7aS5pc0FuaW1hdGluZ1tlXT0hMSxmLnN0b3AoKSxnKCl9LHRoaXMuY3VycmVudEFuaW1hdGlvblRhcmdldFtlXT10O3ZhciB2PWN8fGQuZ2V0RGVmYXVsdFRyYW5zaXRpb24oKXx8d3I7cmV0dXJuIEl0KFwieFwiPT09ZT9cImxheW91dFhcIjpcImxheW91dFlcIixmLDFlMyx2JiZSdCh2LFwibGF5b3V0XCIpKS50aGVuKHRoaXMuc3RvcEF4aXNBbmltYXRpb25bZV0pfX0sbi5wcm90b3R5cGUuc2FmZVRvUmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIGUsdDtudWxsPT09KHQ9KGU9dGhpcy5wcm9wcykuc2FmZVRvUmVtb3ZlKXx8dm9pZCAwPT09dHx8dC5jYWxsKGUpfSxuLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbn0odS5Db21wb25lbnQpLHZyPXttaW46MCxtYXg6MH07ZnVuY3Rpb24gQ3IoZSl7cmV0dXJuIG1yKGUueCx2cikmJm1yKGUueSx2cil9ZnVuY3Rpb24gbXIoZSx0KXtyZXR1cm4gZS5taW49PT10Lm1pbiYmZS5tYXg9PT10Lm1heH12YXIgd3I9e2R1cmF0aW9uOi40NSxlYXNlOlsuNCwwLC4xLDFdfSxicj17bGF5b3V0UmVhZHk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm90aWZ5TGF5b3V0UmVhZHkoKX19O2Z1bmN0aW9uIHlyKCl7dmFyIGU9bmV3IFNldDtyZXR1cm57YWRkOmZ1bmN0aW9uKHQpe3JldHVybiBlLmFkZCh0KX0sZmx1c2g6ZnVuY3Rpb24odCl7dmFyIG49dm9pZCAwPT09dD9icjp0LG89bi5sYXlvdXRSZWFkeSxhPW4ucGFyZW50O1huKChmdW5jdGlvbih0LG4pe3ZhciBpPUFycmF5LmZyb20oZSkuc29ydChFbiksbD1hP1JuKGEpOltdO24oKGZ1bmN0aW9uKCl7ci5fX3NwcmVhZEFycmF5KHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChsKSksci5fX3JlYWQoaSkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc2V0VHJhbnNmb3JtKCl9KSl9KSksdCgoZnVuY3Rpb24oKXtpLmZvckVhY2goSW4pfSkpLG4oKGZ1bmN0aW9uKCl7bC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXN0b3JlVHJhbnNmb3JtKCl9KSksaS5mb3JFYWNoKG8pfSkpLHQoKGZ1bmN0aW9uKCl7aS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmlzUHJlc2VudCYmKGUucHJlc2VuY2U9YXIuUHJlc2VudCl9KSl9KSksbigoZnVuY3Rpb24oKXtzLmZsdXNoU3luYy5wcmVSZW5kZXIoKSxzLmZsdXNoU3luYy5yZW5kZXIoKX0pKSx0KChmdW5jdGlvbigpe3AuZGVmYXVsdC5wb3N0UmVuZGVyKChmdW5jdGlvbigpe3JldHVybiBpLmZvckVhY2goeHIpfSkpLGUuY2xlYXIoKX0pKX0pKSxRbigpfX19ZnVuY3Rpb24geHIoZSl7ZS5wcmV2Vmlld3BvcnRCb3g9ZS5wcm9qZWN0aW9uLnRhcmdldH12YXIga3I9by5jcmVhdGVDb250ZXh0KHlyKCkpLFNyPW8uY3JlYXRlQ29udGV4dCh5cigpKTtmdW5jdGlvbiBPcihlKXtyZXR1cm4hIWUuZm9yY2VVcGRhdGV9dmFyIE1yPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiByLl9fZXh0ZW5kcyh0LGUpLHQucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuc3luY0xheW91dCxuPWUuZnJhbWVyU3luY0xheW91dCxyPWUudmlzdWFsRWxlbWVudDtPcih0KSYmdC5yZWdpc3RlcihyKSxPcihuKSYmbi5yZWdpc3RlcihyKSxyLm9uVW5tb3VudCgoZnVuY3Rpb24oKXtPcih0KSYmdC5yZW1vdmUociksT3IobikmJm4ucmVtb3ZlKHIpfSkpfSx0LnByb3RvdHlwZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnN5bmNMYXlvdXQsbj1lLnZpc3VhbEVsZW1lbnQ7cmV0dXJuIE9yKHQpP3Quc3luY1VwZGF0ZSgpOihWbihuKSx0LmFkZChuKSksbnVsbH0sdC5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5zeW5jTGF5b3V0O09yKGUpfHxlLmZsdXNoKCl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBudWxsfSx0fShkLmRlZmF1bHQuQ29tcG9uZW50KSxMcj17bWVhc3VyZUxheW91dDpmdW5jdGlvbihlKXt2YXIgdD1vLnVzZUNvbnRleHQoa3IpLG49by51c2VDb250ZXh0KFNyKTtyZXR1cm4gZC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTXIsci5fX2Fzc2lnbih7fSxlLHtzeW5jTGF5b3V0OnQsZnJhbWVyU3luY0xheW91dDpufSkpfSxsYXlvdXRBbmltYXRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9ci5fX3JlYWQoUygpLDIpWzFdO3JldHVybiB1LmNyZWF0ZUVsZW1lbnQoZ3Isci5fX2Fzc2lnbih7fSxlLHtzYWZlVG9SZW1vdmU6dH0pKX19O2Z1bmN0aW9uIF9yKCl7cmV0dXJue2lzSHlkcmF0ZWQ6ITEsbGF5b3V0Ont4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSxsYXlvdXRDb3JyZWN0ZWQ6e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19LHRyZWVTY2FsZTp7eDoxLHk6MX0sZGVsdGE6dm4oKSxkZWx0YUZpbmFsOnZuKCksZGVsdGFUcmFuc2Zvcm06XCJcIn19dmFyIFByPV9yKCk7ZnVuY3Rpb24gRXIoZSx0LG4pe3ZhciByPWUueCxvPWUueSxhPVwidHJhbnNsYXRlM2QoXCIrci50cmFuc2xhdGUvdC54K1wicHgsIFwiK28udHJhbnNsYXRlL3QueStcInB4LCAwKSBcIjtpZihuKXt2YXIgaT1uLnJvdGF0ZSxsPW4ucm90YXRlWCxzPW4ucm90YXRlWTtpJiYoYSs9XCJyb3RhdGUoXCIraStcIikgXCIpLGwmJihhKz1cInJvdGF0ZVgoXCIrbCtcIikgXCIpLHMmJihhKz1cInJvdGF0ZVkoXCIrcytcIikgXCIpfXJldHVybiBhKz1cInNjYWxlKFwiK3Iuc2NhbGUrXCIsIFwiK28uc2NhbGUrXCIpXCIsbnx8YSE9PVJyP2E6XCJcIn1mdW5jdGlvbiBqcihlKXt2YXIgdD1lLmRlbHRhRmluYWw7cmV0dXJuIDEwMCp0Lngub3JpZ2luK1wiJSBcIisxMDAqdC55Lm9yaWdpbitcIiUgMFwifXZhciBScj1FcihQci5kZWx0YSxQci50cmVlU2NhbGUse3g6MSx5OjF9KSxJcj1bXCJMYXlvdXRNZWFzdXJlXCIsXCJCZWZvcmVMYXlvdXRNZWFzdXJlXCIsXCJMYXlvdXRVcGRhdGVcIixcIlZpZXdwb3J0Qm94VXBkYXRlXCIsXCJVcGRhdGVcIixcIlJlbmRlclwiLFwiQW5pbWF0aW9uQ29tcGxldGVcIixcIkxheW91dEFuaW1hdGlvbkNvbXBsZXRlXCIsXCJBbmltYXRpb25TdGFydFwiLFwiU2V0QXhpc1RhcmdldFwiLFwiVW5tb3VudFwiXSxWcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNoaWxkcmVuPVtdLHRoaXMuaXNEaXJ0eT0hMX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe1Z0KHRoaXMuY2hpbGRyZW4sZSksdGhpcy5pc0RpcnR5PSEwfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oZSl7SHQodGhpcy5jaGlsZHJlbixlKSx0aGlzLmlzRGlydHk9ITB9LGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7dGhpcy5pc0RpcnR5JiZ0aGlzLmNoaWxkcmVuLnNvcnQoRW4pLHRoaXMuaXNEaXJ0eT0hMSx0aGlzLmNoaWxkcmVuLmZvckVhY2goZSl9LGV9KCksSHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50cmVlVHlwZSxuPXZvaWQgMD09PXQ/XCJcIjp0LG89ZS5idWlsZCxhPWUuZ2V0QmFzZVRhcmdldCxpPWUubWFrZVRhcmdldEFuaW1hdGFibGUsYz1lLm1lYXN1cmVWaWV3cG9ydEJveCx1PWUucmVuZGVyLGQ9ZS5yZWFkVmFsdWVGcm9tSW5zdGFuY2UsZj1lLnJlc2V0VHJhbnNmb3JtLGg9ZS5yZXN0b3JlVHJhbnNmb3JtLGc9ZS5yZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZSx2PWUuc29ydE5vZGVQb3NpdGlvbixDPWUuc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzO3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciBtPWUucGFyZW50LHc9ZS5wcm9wcyxiPWUucHJlc2VuY2VJZCx5PWUuYmxvY2tJbml0aWFsQW5pbWF0aW9uLHg9ZS52aXN1YWxTdGF0ZTt2b2lkIDA9PT10JiYodD17fSk7dmFyIGssUyxPLE0sTCxfLFA9eC5sYXRlc3RWYWx1ZXMsRT14LnJlbmRlclN0YXRlLGo9ZnVuY3Rpb24oKXt2YXIgZT1Jci5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBdH0pKSx0PXt9LG49e2NsZWFyQWxsTGlzdGVuZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xlYXIoKX0pKX0sdXBkYXRlUHJvcExpc3RlbmVyczpmdW5jdGlvbihlKXtyZXR1cm4gSXIuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIG87bnVsbD09PShvPXRbcl0pfHx2b2lkIDA9PT1vfHxvLmNhbGwodCk7dmFyIGE9XCJvblwiK3IsaT1lW2FdO2kmJih0W3JdPW5bYV0oaSkpfSkpfX07cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtuW1wib25cIitJclt0XV09ZnVuY3Rpb24odCl7cmV0dXJuIGUuYWRkKHQpfSxuW1wibm90aWZ5XCIrSXJbdF1dPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiBlLm5vdGlmeS5hcHBseShlLHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZCh0KSkpfX0pKSxufSgpLFI9e2lzRW5hYmxlZDohMSxpc0h5ZHJhdGVkOiExLGlzVGFyZ2V0TG9ja2VkOiExLHRhcmdldDp7eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sdGFyZ2V0RmluYWw6e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19fSxJPVIsSD1QLEE9X3IoKSxCPSExLFo9bmV3IE1hcCwkPW5ldyBNYXAsTj17fSxGPXIuX19hc3NpZ24oe30sUCk7ZnVuY3Rpb24gVygpe2smJihRLmlzUHJvamVjdGlvblJlYWR5KCkmJih6bihJLnRhcmdldEZpbmFsLEkudGFyZ2V0LEgpLHluKEEuZGVsdGFGaW5hbCxBLmxheW91dENvcnJlY3RlZCxJLnRhcmdldEZpbmFsLFApKSxVKCksdShrLEUpKX1mdW5jdGlvbiBVKCl7dmFyIGU9UDtpZihNJiZNLmlzQWN0aXZlKCkpe3ZhciBuPU0uZ2V0Q3Jvc3NmYWRlU3RhdGUoUSk7biYmKGU9bil9byhRLEUsZSxJLEEsdCx3KX1mdW5jdGlvbiB6KCl7ai5ub3RpZnlVcGRhdGUoUCl9ZnVuY3Rpb24gRygpe1EubGF5b3V0VHJlZS5mb3JFYWNoKFRyKX12YXIgSz1DKHcpO2Zvcih2YXIgcSBpbiBLKXt2YXIgWT1LW3FdO3ZvaWQgMCE9PVBbcV0mJmVlKFkpJiZZLnNldChQW3FdLCExKX12YXIgSj1UKHcpLFg9RCh3KSxRPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7dHJlZVR5cGU6bixjdXJyZW50Om51bGwsZGVwdGg6bT9tLmRlcHRoKzE6MCxwYXJlbnQ6bSxjaGlsZHJlbjpuZXcgU2V0LHBhdGg6bT9yLl9fc3ByZWFkQXJyYXkoci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKG0ucGF0aCkpLFttXSk6W10sbGF5b3V0VHJlZTptP20ubGF5b3V0VHJlZTpuZXcgVnIscHJlc2VuY2VJZDpiLHByb2plY3Rpb246Uix2YXJpYW50Q2hpbGRyZW46WD9uZXcgU2V0OnZvaWQgMCxpc1Zpc2libGU6dm9pZCAwLG1hbnVhbGx5QW5pbWF0ZU9uTW91bnQ6Qm9vbGVhbihudWxsPT1tP3ZvaWQgMDptLmlzTW91bnRlZCgpKSxibG9ja0luaXRpYWxBbmltYXRpb246eSxpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbihrKX0sbW91bnQ6ZnVuY3Rpb24oZSl7az1RLmN1cnJlbnQ9ZSxRLnBvaW50VG8oUSksWCYmbSYmIUomJihfPW51bGw9PW0/dm9pZCAwOm0uYWRkVmFyaWFudENoaWxkKFEpKSxudWxsPT1tfHxtLmNoaWxkcmVuLmFkZChRKX0sdW5tb3VudDpmdW5jdGlvbigpe3MuY2FuY2VsU3luYy51cGRhdGUoeikscy5jYW5jZWxTeW5jLnJlbmRlcihXKSxzLmNhbmNlbFN5bmMucHJlUmVuZGVyKFEudXBkYXRlTGF5b3V0UHJvamVjdGlvbiksJC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZSgpfSkpLFEuc3RvcExheW91dEFuaW1hdGlvbigpLFEubGF5b3V0VHJlZS5yZW1vdmUoUSksbnVsbD09X3x8XygpLG51bGw9PW18fG0uY2hpbGRyZW4uZGVsZXRlKFEpLG51bGw9PU98fE8oKSxqLmNsZWFyQWxsTGlzdGVuZXJzKCl9LGFkZFZhcmlhbnRDaGlsZDpmdW5jdGlvbihlKXt2YXIgdCxuPVEuZ2V0Q2xvc2VzdFZhcmlhbnROb2RlKCk7aWYobilyZXR1cm4gbnVsbD09PSh0PW4udmFyaWFudENoaWxkcmVuKXx8dm9pZCAwPT09dHx8dC5hZGQoZSksZnVuY3Rpb24oKXtyZXR1cm4gbi52YXJpYW50Q2hpbGRyZW4uZGVsZXRlKGUpfX0sc29ydE5vZGVQb3NpdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gdiYmbj09PWUudHJlZVR5cGU/dihRLmdldEluc3RhbmNlKCksZS5nZXRJbnN0YW5jZSgpKTowfSxnZXRDbG9zZXN0VmFyaWFudE5vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gWD9ROm51bGw9PW0/dm9pZCAwOm0uZ2V0Q2xvc2VzdFZhcmlhbnROb2RlKCl9LHNjaGVkdWxlVXBkYXRlTGF5b3V0UHJvamVjdGlvbjptP20uc2NoZWR1bGVVcGRhdGVMYXlvdXRQcm9qZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHAuZGVmYXVsdC5wcmVSZW5kZXIoUS51cGRhdGVUcmVlTGF5b3V0UHJvamVjdGlvbiwhMSwhMCl9LGdldExheW91dElkOmZ1bmN0aW9uKCl7cmV0dXJuIHcubGF5b3V0SWR9LGdldEluc3RhbmNlOmZ1bmN0aW9uKCl7cmV0dXJuIGt9LGdldFN0YXRpY1ZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBQW2VdfSxzZXRTdGF0aWNWYWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBQW2VdPXR9LGdldExhdGVzdFZhbHVlczpmdW5jdGlvbigpe3JldHVybiBQfSxzZXRWaXNpYmlsaXR5OmZ1bmN0aW9uKGUpe1EuaXNWaXNpYmxlIT09ZSYmKFEuaXNWaXNpYmxlPWUsUS5zY2hlZHVsZVJlbmRlcigpKX0sbWFrZVRhcmdldEFuaW1hdGFibGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLGkoUSxlLHcsdCl9LGFkZFZhbHVlOmZ1bmN0aW9uKGUsdCl7US5oYXNWYWx1ZShlKSYmUS5yZW1vdmVWYWx1ZShlKSxaLnNldChlLHQpLFBbZV09dC5nZXQoKSxmdW5jdGlvbihlLHQpe3ZhciBuPXQub25DaGFuZ2UoKGZ1bmN0aW9uKHQpe1BbZV09dCx3Lm9uVXBkYXRlJiZwLmRlZmF1bHQudXBkYXRlKHosITEsITApfSkpLHI9dC5vblJlbmRlclJlcXVlc3QoUS5zY2hlZHVsZVJlbmRlcik7JC5zZXQoZSwoZnVuY3Rpb24oKXtuKCkscigpfSkpfShlLHQpfSxyZW1vdmVWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtaLmRlbGV0ZShlKSxudWxsPT09KHQ9JC5nZXQoZSkpfHx2b2lkIDA9PT10fHx0KCksJC5kZWxldGUoZSksZGVsZXRlIFBbZV0sZyhlLEUpfSxoYXNWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gWi5oYXMoZSl9LGdldFZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49Wi5nZXQoZSk7cmV0dXJuIHZvaWQgMD09PW4mJnZvaWQgMCE9PXQmJihuPUR0KHQpLFEuYWRkVmFsdWUoZSxuKSksbn0sZm9yRWFjaFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBaLmZvckVhY2goZSl9LHJlYWRWYWx1ZTpmdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbnVsbCE9PShuPVBbZV0pJiZ2b2lkIDAhPT1uP246ZChrLGUsdCl9LHNldEJhc2VUYXJnZXQ6ZnVuY3Rpb24oZSx0KXtGW2VdPXR9LGdldEJhc2VUYXJnZXQ6ZnVuY3Rpb24oZSl7aWYoYSl7dmFyIHQ9YSh3LGUpO2lmKHZvaWQgMCE9PXQmJiFlZSh0KSlyZXR1cm4gdH1yZXR1cm4gRltlXX19LGopLHtidWlsZDpmdW5jdGlvbigpe3JldHVybiBVKCksRX0sc2NoZWR1bGVSZW5kZXI6ZnVuY3Rpb24oKXtwLmRlZmF1bHQucmVuZGVyKFcsITEsITApfSxzeW5jUmVuZGVyOlcsc2V0UHJvcHM6ZnVuY3Rpb24oZSl7dz1lLGoudXBkYXRlUHJvcExpc3RlbmVycyhlKSxOPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtmb3IodmFyIG8gaW4gdCl7dmFyIGE9dFtvXSxpPW5bb107aWYoZWUoYSkpZS5hZGRWYWx1ZShvLGEpO2Vsc2UgaWYoZWUoaSkpZS5hZGRWYWx1ZShvLER0KGEpKTtlbHNlIGlmKGkhPT1hKWlmKGUuaGFzVmFsdWUobykpe3ZhciBsPWUuZ2V0VmFsdWUobyk7IWwuaGFzQW5pbWF0ZWQmJmwuc2V0KGEpfWVsc2UgZS5hZGRWYWx1ZShvLER0KG51bGwhPT0ocj1lLmdldFN0YXRpY1ZhbHVlKG8pKSYmdm9pZCAwIT09cj9yOmEpKX1mb3IodmFyIG8gaW4gbil2b2lkIDA9PT10W29dJiZlLnJlbW92ZVZhbHVlKG8pO3JldHVybiB0fShRLEModyksTil9LGdldFByb3BzOmZ1bmN0aW9uKCl7cmV0dXJuIHd9LGdldFZhcmlhbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG51bGw9PT0odD13LnZhcmlhbnRzKXx8dm9pZCAwPT09dD92b2lkIDA6dFtlXX0sZ2V0RGVmYXVsdFRyYW5zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdy50cmFuc2l0aW9ufSxnZXRWYXJpYW50Q29udGV4dDpmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lJiYoZT0hMSksZSlyZXR1cm4gbnVsbD09bT92b2lkIDA6bS5nZXRWYXJpYW50Q29udGV4dCgpO2lmKCFKKXt2YXIgdD0obnVsbD09bT92b2lkIDA6bS5nZXRWYXJpYW50Q29udGV4dCgpKXx8e307cmV0dXJuIHZvaWQgMCE9PXcuaW5pdGlhbCYmKHQuaW5pdGlhbD13LmluaXRpYWwpLHR9Zm9yKHZhciBuPXt9LHI9MDtyPFpyO3IrKyl7dmFyIG89QnJbcl0sYT13W29dOyhWKGEpfHwhMT09PWEpJiYobltvXT1hKX1yZXR1cm4gbn0sZW5hYmxlTGF5b3V0UHJvamVjdGlvbjpmdW5jdGlvbigpe1IuaXNFbmFibGVkPSEwLFEubGF5b3V0VHJlZS5hZGQoUSl9LGxvY2tQcm9qZWN0aW9uVGFyZ2V0OmZ1bmN0aW9uKCl7Ui5pc1RhcmdldExvY2tlZD0hMH0sdW5sb2NrUHJvamVjdGlvblRhcmdldDpmdW5jdGlvbigpe1Euc3RvcExheW91dEFuaW1hdGlvbigpLFIuaXNUYXJnZXRMb2NrZWQ9ITF9LGdldExheW91dFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIEF9LHNldENyb3NzZmFkZXI6ZnVuY3Rpb24oZSl7TT1lfSxpc1Byb2plY3Rpb25SZWFkeTpmdW5jdGlvbigpe3JldHVybiBSLmlzRW5hYmxlZCYmUi5pc0h5ZHJhdGVkJiZBLmlzSHlkcmF0ZWR9LHN0YXJ0TGF5b3V0QW5pbWF0aW9uOmZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT1uJiYobj0hMSk7dmFyIHI9US5nZXRQcm9qZWN0aW9uQW5pbWF0aW9uUHJvZ3Jlc3MoKVtlXSxvPW4/Ui5yZWxhdGl2ZVRhcmdldFtlXTpSLnRhcmdldFtlXSxhPW8ubWluLGk9by5tYXgtYTtyZXR1cm4gci5jbGVhckxpc3RlbmVycygpLHIuc2V0KGEpLHIuc2V0KGEpLHIub25DaGFuZ2UoKGZ1bmN0aW9uKHQpe1Euc2V0UHJvamVjdGlvblRhcmdldEF4aXMoZSx0LHQraSxuKX0pKSxRLmFuaW1hdGVNb3Rpb25WYWx1ZShlLHIsMCx0KX0sc3RvcExheW91dEFuaW1hdGlvbjpmdW5jdGlvbigpe0NuKChmdW5jdGlvbihlKXtyZXR1cm4gUS5nZXRQcm9qZWN0aW9uQW5pbWF0aW9uUHJvZ3Jlc3MoKVtlXS5zdG9wKCl9KSl9LG1lYXN1cmVWaWV3cG9ydEJveDpmdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT0hMCk7dmFyIG49YyhrLHQpO3JldHVybiBlfHxxbihuLFApLG59LGdldFByb2plY3Rpb25BbmltYXRpb25Qcm9ncmVzczpmdW5jdGlvbigpe3JldHVybiBMfHwoTD17eDpEdCgwKSx5OkR0KDApfSksTH0sc2V0UHJvamVjdGlvblRhcmdldEF4aXM6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG87dm9pZCAwPT09ciYmKHI9ITEpLHI/KFIucmVsYXRpdmVUYXJnZXR8fChSLnJlbGF0aXZlVGFyZ2V0PXt4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSksbz1SLnJlbGF0aXZlVGFyZ2V0W2VdKTooUi5yZWxhdGl2ZVRhcmdldD12b2lkIDAsbz1SLnRhcmdldFtlXSksUi5pc0h5ZHJhdGVkPSEwLG8ubWluPXQsby5tYXg9bixCPSEwLGoubm90aWZ5U2V0QXhpc1RhcmdldCgpfSxyZWJhc2VQcm9qZWN0aW9uVGFyZ2V0OmZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9QS5sYXlvdXQpO3ZhciBuPVEuZ2V0UHJvamVjdGlvbkFuaW1hdGlvblByb2dyZXNzKCkscj1uLngsbz1uLnksYT0hKFIucmVsYXRpdmVUYXJnZXR8fFIuaXNUYXJnZXRMb2NrZWR8fHIuaXNBbmltYXRpbmcoKXx8by5pc0FuaW1hdGluZygpKTsoZXx8YSkmJkNuKChmdW5jdGlvbihlKXt2YXIgbj10W2VdLHI9bi5taW4sbz1uLm1heDtRLnNldFByb2plY3Rpb25UYXJnZXRBeGlzKGUscixvKX0pKX0sbm90aWZ5TGF5b3V0UmVhZHk6ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0UHJvamVjdGlvblBhcmVudCgpO2lmKHQpe3ZhciBuPUFuKHQuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXQsZS5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCk7Q24oKGZ1bmN0aW9uKHQpe2Uuc2V0UHJvamVjdGlvblRhcmdldEF4aXModCxuW3RdLm1pbixuW3RdLm1heCwhMCl9KSl9ZWxzZSBlLnJlYmFzZVByb2plY3Rpb25UYXJnZXQoKX0oUSksUS5ub3RpZnlMYXlvdXRVcGRhdGUoQS5sYXlvdXQsUS5wcmV2Vmlld3BvcnRCb3h8fEEubGF5b3V0LGUpfSxyZXNldFRyYW5zZm9ybTpmdW5jdGlvbigpe3JldHVybiBmKFEsayx3KX0scmVzdG9yZVRyYW5zZm9ybTpmdW5jdGlvbigpe3JldHVybiBoKGssRSl9LHVwZGF0ZUxheW91dFByb2plY3Rpb246ZnVuY3Rpb24oKXtpZihRLmlzUHJvamVjdGlvblJlYWR5KCkpe3ZhciBlPUEuZGVsdGEsdD1BLnRyZWVTY2FsZSxuPXQueCxyPXQueSxvPUEuZGVsdGFUcmFuc2Zvcm07KGZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvLGEsaT1lLmRlbHRhLGw9ZS5sYXlvdXQscz1lLmxheW91dENvcnJlY3RlZCxjPWUudHJlZVNjYWxlLHU9dC50YXJnZXQ7YT1sLERuKChvPXMpLngsYS54KSxEbihvLnksYS55KSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bi5sZW5ndGg7aWYocil7dmFyIG8sYTt0Lng9dC55PTE7Zm9yKHZhciBpPTA7aTxyO2krKylhPShvPW5baV0pLmdldExheW91dFN0YXRlKCkuZGVsdGEsdC54Kj1hLnguc2NhbGUsdC55Kj1hLnkuc2NhbGUsTm4oZSxhKSxUbihvKSYmem4oZSxlLG8uZ2V0TGF0ZXN0VmFsdWVzKCkpfX0ocyxjLG4pLHluKGkscyx1LHIpfSkoQSxJLFEucGF0aCxQKSxCJiZRLm5vdGlmeVZpZXdwb3J0Qm94VXBkYXRlKEkudGFyZ2V0LGUpLEI9ITE7dmFyIGE9RXIoZSx0KTthPT09byYmbj09PXQueCYmcj09PXQueXx8US5zY2hlZHVsZVJlbmRlcigpLEEuZGVsdGFUcmFuc2Zvcm09YX19LHVwZGF0ZVRyZWVMYXlvdXRQcm9qZWN0aW9uOmZ1bmN0aW9uKCl7US5sYXlvdXRUcmVlLmZvckVhY2goQXIpLHAuZGVmYXVsdC5wcmVSZW5kZXIoRywhMSwhMCl9LGdldFByb2plY3Rpb25QYXJlbnQ6ZnVuY3Rpb24oKXtpZih2b2lkIDA9PT1TKXtmb3IodmFyIGU9ITEsdD1RLnBhdGgubGVuZ3RoLTE7dD49MDt0LS0pe3ZhciBuPVEucGF0aFt0XTtpZihuLnByb2plY3Rpb24uaXNFbmFibGVkKXtlPW47YnJlYWt9fVM9ZX1yZXR1cm4gU30scmVzb2x2ZVJlbGF0aXZlVGFyZ2V0Qm94OmZ1bmN0aW9uKCl7dmFyIGU9US5nZXRQcm9qZWN0aW9uUGFyZW50KCk7aWYoUi5yZWxhdGl2ZVRhcmdldCYmZSYmKGZ1bmN0aW9uKGUsdCl7a24oZS50YXJnZXQueCxlLnJlbGF0aXZlVGFyZ2V0LngsdC50YXJnZXQueCksa24oZS50YXJnZXQueSxlLnJlbGF0aXZlVGFyZ2V0LnksdC50YXJnZXQueSl9KFIsZS5wcm9qZWN0aW9uKSxUbihlKSkpe3ZhciB0PVIudGFyZ2V0O3puKHQsdCxlLmdldExhdGVzdFZhbHVlcygpKX19LHNob3VsZFJlc2V0VHJhbnNmb3JtOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4ody5fbGF5b3V0UmVzZXRUcmFuc2Zvcm0pfSxwb2ludFRvOmZ1bmN0aW9uKGUpe0k9ZS5wcm9qZWN0aW9uLEg9ZS5nZXRMYXRlc3RWYWx1ZXMoKSxudWxsPT1PfHxPKCksTz1sLnBpcGUoZS5vblNldEF4aXNUYXJnZXQoUS5zY2hlZHVsZVVwZGF0ZUxheW91dFByb2plY3Rpb24pLGUub25MYXlvdXRBbmltYXRpb25Db21wbGV0ZSgoZnVuY3Rpb24oKXt2YXIgZTtRLmlzUHJlc2VudD9RLnByZXNlbmNlPWFyLlByZXNlbnQ6bnVsbD09PShlPVEubGF5b3V0U2FmZVRvUmVtb3ZlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKFEpfSkpKX0saXNQcmVzZW50OiEwLHByZXNlbmNlOmFyLkVudGVyaW5nfSk7cmV0dXJuIFF9fTtmdW5jdGlvbiBBcihlKXtlLnJlc29sdmVSZWxhdGl2ZVRhcmdldEJveCgpfWZ1bmN0aW9uIFRyKGUpe2UudXBkYXRlTGF5b3V0UHJvamVjdGlvbigpfXZhciBEcixCcj1yLl9fc3ByZWFkQXJyYXkoW1wiaW5pdGlhbFwiXSxyLl9fcmVhZChlbikpLFpyPUJyLmxlbmd0aCwkcj1uZXcgU2V0KFtcIndpZHRoXCIsXCJoZWlnaHRcIixcInRvcFwiLFwibGVmdFwiLFwicmlnaHRcIixcImJvdHRvbVwiLFwieFwiLFwieVwiXSksTnI9ZnVuY3Rpb24oZSl7cmV0dXJuICRyLmhhcyhlKX0sRnI9ZnVuY3Rpb24oZSx0KXtlLnNldCh0LCExKSxlLnNldCh0KX0sV3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1pLm51bWJlcnx8ZT09PWkucHh9OyFmdW5jdGlvbihlKXtlLndpZHRoPVwid2lkdGhcIixlLmhlaWdodD1cImhlaWdodFwiLGUubGVmdD1cImxlZnRcIixlLnJpZ2h0PVwicmlnaHRcIixlLnRvcD1cInRvcFwiLGUuYm90dG9tPVwiYm90dG9tXCJ9KERyfHwoRHI9e30pKTt2YXIgVXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcGFyc2VGbG9hdChlLnNwbGl0KFwiLCBcIilbdF0pfSx6cj1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBvPXIudHJhbnNmb3JtO2lmKFwibm9uZVwiPT09b3x8IW8pcmV0dXJuIDA7dmFyIGE9by5tYXRjaCgvXm1hdHJpeDNkXFwoKC4rKVxcKSQvKTtpZihhKXJldHVybiBVcihhWzFdLHQpO3ZhciBpPW8ubWF0Y2goL15tYXRyaXhcXCgoLispXFwpJC8pO3JldHVybiBpP1VyKGlbMV0sZSk6MH19LEdyPW5ldyBTZXQoW1wieFwiLFwieVwiLFwielwiXSksS3I9Ry5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFHci5oYXMoZSl9KSkscXI9e3dpZHRoOmZ1bmN0aW9uKGUpe3ZhciB0PWUueDtyZXR1cm4gdC5tYXgtdC5taW59LGhlaWdodDpmdW5jdGlvbihlKXt2YXIgdD1lLnk7cmV0dXJuIHQubWF4LXQubWlufSx0b3A6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnRvcDtyZXR1cm4gcGFyc2VGbG9hdChuKX0sbGVmdDpmdW5jdGlvbihlLHQpe3ZhciBuPXQubGVmdDtyZXR1cm4gcGFyc2VGbG9hdChuKX0sYm90dG9tOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS55LHI9dC50b3A7cmV0dXJuIHBhcnNlRmxvYXQocikrKG4ubWF4LW4ubWluKX0scmlnaHQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLngscj10LmxlZnQ7cmV0dXJuIHBhcnNlRmxvYXQocikrKG4ubWF4LW4ubWluKX0seDp6cig0LDEzKSx5OnpyKDUsMTQpfTtmdW5jdGlvbiBZcihlLHQsbixvKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnNvbWUoTnIpfSh0KT9mdW5jdGlvbihlLHQsbixvKXt2b2lkIDA9PT1uJiYobj17fSksdm9pZCAwPT09byYmKG89e30pLHQ9ci5fX2Fzc2lnbih7fSx0KSxvPXIuX19hc3NpZ24oe30sbyk7dmFyIGw9T2JqZWN0LmtleXModCkuZmlsdGVyKE5yKSxzPVtdLGM9ITEsdT1bXTtpZihsLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBsPWUuZ2V0VmFsdWUocik7aWYoZS5oYXNWYWx1ZShyKSl7dmFyIGQscD1uW3JdLGY9dFtyXSxoPSR0KHApO2lmKEVlKGYpKWZvcih2YXIgZz1mLmxlbmd0aCx2PW51bGw9PT1mWzBdPzE6MDt2PGc7disrKWQ/YS5pbnZhcmlhbnQoJHQoZlt2XSk9PT1kLFwiQWxsIGtleWZyYW1lcyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGVcIik6KGQ9JHQoZlt2XSksYS5pbnZhcmlhbnQoZD09PWh8fFdyKGgpJiZXcihkKSxcIktleWZyYW1lcyBtdXN0IGJlIG9mIHRoZSBzYW1lIGRpbWVuc2lvbiBhcyB0aGUgY3VycmVudCB2YWx1ZVwiKSk7ZWxzZSBkPSR0KGYpO2lmKGghPT1kKWlmKFdyKGgpJiZXcihkKSl7dmFyIEM9bC5nZXQoKTtcInN0cmluZ1wiPT10eXBlb2YgQyYmbC5zZXQocGFyc2VGbG9hdChDKSksXCJzdHJpbmdcIj09dHlwZW9mIGY/dFtyXT1wYXJzZUZsb2F0KGYpOkFycmF5LmlzQXJyYXkoZikmJmQ9PT1pLnB4JiYodFtyXT1mLm1hcChwYXJzZUZsb2F0KSl9ZWxzZShudWxsPT1oP3ZvaWQgMDpoLnRyYW5zZm9ybSkmJihudWxsPT1kP3ZvaWQgMDpkLnRyYW5zZm9ybSkmJigwPT09cHx8MD09PWYpPzA9PT1wP2wuc2V0KGQudHJhbnNmb3JtKHApKTp0W3JdPWgudHJhbnNmb3JtKGYpOihjfHwocz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gS3IuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHI9ZS5nZXRWYWx1ZShuKTt2b2lkIDAhPT1yJiYodC5wdXNoKFtuLHIuZ2V0KCldKSxyLnNldChuLnN0YXJ0c1dpdGgoXCJzY2FsZVwiKT8xOjApKX0pKSx0Lmxlbmd0aCYmZS5zeW5jUmVuZGVyKCksdH0oZSksYz0hMCksdS5wdXNoKHIpLG9bcl09dm9pZCAwIT09b1tyXT9vW3JdOnRbcl0sRnIobCxmKSl9fSkpLHUubGVuZ3RoKXt2YXIgZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC5tZWFzdXJlVmlld3BvcnRCb3goKSxvPXQuZ2V0SW5zdGFuY2UoKSxhPWdldENvbXB1dGVkU3R5bGUobyksaT1hLmRpc3BsYXksbD17dG9wOmEudG9wLGxlZnQ6YS5sZWZ0LGJvdHRvbTphLmJvdHRvbSxyaWdodDphLnJpZ2h0LHRyYW5zZm9ybTphLnRyYW5zZm9ybX07XCJub25lXCI9PT1pJiZ0LnNldFN0YXRpY1ZhbHVlKFwiZGlzcGxheVwiLGUuZGlzcGxheXx8XCJibG9ja1wiKSx0LnN5bmNSZW5kZXIoKTt2YXIgcz10Lm1lYXN1cmVWaWV3cG9ydEJveCgpO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBvPXQuZ2V0VmFsdWUobik7RnIobyxxcltuXShyLGwpKSxlW25dPXFyW25dKHMsYSl9KSksZX0odCxlLHUpO3JldHVybiBzLmxlbmd0aCYmcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1yLl9fcmVhZCh0LDIpLG89blswXSxhPW5bMV07ZS5nZXRWYWx1ZShvKS5zZXQoYSl9KSksZS5zeW5jUmVuZGVyKCkse3RhcmdldDpkLHRyYW5zaXRpb25FbmQ6b319cmV0dXJue3RhcmdldDp0LHRyYW5zaXRpb25FbmQ6b319KGUsdCxuLG8pOnt0YXJnZXQ6dCx0cmFuc2l0aW9uRW5kOm99fXZhciBKcj17dHJlZVR5cGU6XCJkb21cIixyZWFkVmFsdWVGcm9tSW5zdGFuY2U6ZnVuY3Rpb24oZSx0KXtpZihZKHQpKXt2YXIgbj1MdCh0KTtyZXR1cm4gbiYmbi5kZWZhdWx0fHwwfXZhciByLG89KHI9ZSx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyKSk7cmV0dXJuKG5lKHQpP28uZ2V0UHJvcGVydHlWYWx1ZSh0KTpvW3RdKXx8MH0sc29ydE5vZGVQb3NpdGlvbjpmdW5jdGlvbihlLHQpe3JldHVybiAyJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk/MTotMX0sZ2V0QmFzZVRhcmdldDpmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsPT09KG49ZS5zdHlsZSl8fHZvaWQgMD09PW4/dm9pZCAwOm5bdF19LG1lYXN1cmVWaWV3cG9ydEJveDpmdW5jdGlvbihlLHQpe3JldHVybiBQbihlLHQudHJhbnNmb3JtUGFnZVBvaW50KX0scmVzZXRUcmFuc2Zvcm06ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4udHJhbnNmb3JtVGVtcGxhdGU7dC5zdHlsZS50cmFuc2Zvcm09cj9yKHt9LFwiXCIpOlwibm9uZVwiLGUuc2NoZWR1bGVSZW5kZXIoKX0scmVzdG9yZVRyYW5zZm9ybTpmdW5jdGlvbihlLHQpe2Uuc3R5bGUudHJhbnNmb3JtPXQuc3R5bGUudHJhbnNmb3JtfSxyZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXQudmFycyxyPXQuc3R5bGU7ZGVsZXRlIG5bZV0sZGVsZXRlIHJbZV19LG1ha2VUYXJnZXRBbmltYXRhYmxlOmZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBhPW4udHJhbnNmb3JtVmFsdWVzO3ZvaWQgMD09PW8mJihvPSEwKTt2YXIgaT10LnRyYW5zaXRpb24sbD10LnRyYW5zaXRpb25FbmQscz1yLl9fcmVzdCh0LFtcInRyYW5zaXRpb25cIixcInRyYW5zaXRpb25FbmRcIl0pLGM9S3QocyxpfHx7fSxlKTtpZihhJiYobCYmKGw9YShsKSkscyYmKHM9YShzKSksYyYmKGM9YShjKSkpLG8pe3p0KGUscyxjKTt2YXIgdT1mdW5jdGlvbihlLHQsbixvKXt2YXIgYT1mdW5jdGlvbihlLHQsbil7dmFyIG8sYT1yLl9fcmVzdCh0LFtdKSxpPWUuZ2V0SW5zdGFuY2UoKTtpZighKGkgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpcmV0dXJue3RhcmdldDphLHRyYW5zaXRpb25FbmQ6bn07Zm9yKHZhciBsIGluIG4mJihuPXIuX19hc3NpZ24oe30sbikpLGUuZm9yRWFjaFZhbHVlKChmdW5jdGlvbihlKXt2YXIgdD1lLmdldCgpO2lmKHNyKHQpKXt2YXIgbj11cih0LGkpO24mJmUuc2V0KG4pfX0pKSxhKXt2YXIgcz1hW2xdO2lmKHNyKHMpKXt2YXIgYz11cihzLGkpO2MmJihhW2xdPWMsbiYmKG51bGwhPT0obz1uW2xdKSYmdm9pZCAwIT09b3x8KG5bbF09cykpKX19cmV0dXJue3RhcmdldDphLHRyYW5zaXRpb25FbmQ6bn19KGUsdCxvKTtyZXR1cm4gWXIoZSx0PWEudGFyZ2V0LG4sbz1hLnRyYW5zaXRpb25FbmQpfShlLHMsYyxsKTtsPXUudHJhbnNpdGlvbkVuZCxzPXUudGFyZ2V0fXJldHVybiByLl9fYXNzaWduKHt0cmFuc2l0aW9uOmksdHJhbnNpdGlvbkVuZDpsfSxzKX0sc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOkxlLGJ1aWxkOmZ1bmN0aW9uKGUsdCxuLHIsbyxhLGkpe3ZvaWQgMCE9PWUuaXNWaXNpYmxlJiYodC5zdHlsZS52aXNpYmlsaXR5PWUuaXNWaXNpYmxlP1widmlzaWJsZVwiOlwiaGlkZGVuXCIpO3ZhciBsPXIuaXNFbmFibGVkJiZvLmlzSHlkcmF0ZWQ7aWUodCxuLHIsbyxhLGkudHJhbnNmb3JtVGVtcGxhdGUsbD9Fcjp2b2lkIDAsbD9qcjp2b2lkIDApfSxyZW5kZXI6U2V9LFhyPUhyKEpyKSxRcj1IcihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sSnIpLHtnZXRCYXNlVGFyZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF19LHJlYWRWYWx1ZUZyb21JbnN0YW5jZTpmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBZKHQpPyhudWxsPT09KG49THQodCkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRlZmF1bHQpfHwwOih0PU9lLmhhcyh0KT90OmtlKHQpLGUuZ2V0QXR0cmlidXRlKHQpKX0sc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOl9lLGJ1aWxkOmZ1bmN0aW9uKGUsdCxuLHIsbyxhLGkpe3ZhciBsPXIuaXNFbmFibGVkJiZvLmlzSHlkcmF0ZWQ7bWUodCxuLHIsbyxhLGkudHJhbnNmb3JtVGVtcGxhdGUsbD9Fcjp2b2lkIDAsbD9qcjp2b2lkIDApfSxyZW5kZXI6TWV9KSksZW89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gRihlKT9Rcih0LHtlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjohMX0pOlhyKHQse2VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiEwfSl9LHRvPXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sb24pLGZ0KSxsciksTHIpLG5vPSQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFplKGUsdCx0byxlbyl9KSkscm89JChaZSksb289MDtmdW5jdGlvbiBhbygpe3ZhciBlPW9vO3JldHVybiBvbysrLGV9dmFyIGlvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmluaXRpYWwscj1lLmlzUHJlc2VudCxhPWUub25FeGl0Q29tcGxldGUsaT1lLmN1c3RvbSxsPWUucHJlc2VuY2VBZmZlY3RzTGF5b3V0LHM9ayhsbyksYz1rKGFvKSxkPW8udXNlTWVtbygoZnVuY3Rpb24oKXtyZXR1cm57aWQ6Yyxpbml0aWFsOm4saXNQcmVzZW50OnIsY3VzdG9tOmksb25FeGl0Q29tcGxldGU6ZnVuY3Rpb24oZSl7cy5zZXQoZSwhMCk7dmFyIHQ9ITA7cy5mb3JFYWNoKChmdW5jdGlvbihlKXtlfHwodD0hMSl9KSksdCYmKG51bGw9PWF8fGEoKSl9LHJlZ2lzdGVyOmZ1bmN0aW9uKGUpe3JldHVybiBzLnNldChlLCExKSxmdW5jdGlvbigpe3JldHVybiBzLmRlbGV0ZShlKX19fX0pLGw/dm9pZCAwOltyXSk7cmV0dXJuIG8udXNlTWVtbygoZnVuY3Rpb24oKXtzLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMuc2V0KHQsITEpfSkpfSksW3JdKSx1LnVzZUVmZmVjdCgoZnVuY3Rpb24oKXshciYmIXMuc2l6ZSYmKG51bGw9PWF8fGEoKSl9KSxbcl0pLHUuY3JlYXRlRWxlbWVudCh4LlByb3ZpZGVyLHt2YWx1ZTpkfSx0KX07ZnVuY3Rpb24gbG8oKXtyZXR1cm4gbmV3IE1hcH1mdW5jdGlvbiBzbyhlKXtyZXR1cm4gZS5rZXl8fFwiXCJ9ZnVuY3Rpb24gY28oZSx0LG4pe3ZvaWQgMD09PW4mJihuPXt9KTt2YXIgcj1lZShlKT9lOkR0KGUpO3JldHVybiBJdChcIlwiLHIsdCxuKSx7c3RvcDpmdW5jdGlvbigpe3JldHVybiByLnN0b3AoKX19fWZ1bmN0aW9uIHVvKCl7dmFyIGU9RHQoMSksdD17bGVhZDp2b2lkIDAsZm9sbG93OnZvaWQgMCxjcm9zc2ZhZGVPcGFjaXR5OiExLHByZXNlcnZlRm9sbG93T3BhY2l0eTohMX0sbj1yLl9fYXNzaWduKHt9LHQpLG89e30sYT17fSxpPSExLGM9bnVsbCx1PTA7ZnVuY3Rpb24gZChuLG8pe3ZhciBhPXQubGVhZCxsPXQuZm9sbG93O2k9ITAsYz1udWxsO3ZhciB1PSExLGQ9ZnVuY3Rpb24oKXt1PSEwLGEmJmEuc2NoZWR1bGVSZW5kZXIoKSxsJiZsLnNjaGVkdWxlUmVuZGVyKCl9LGY9ZnVuY3Rpb24oKXtpPSExLGM9cy5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXB9O3JldHVybiBvPW8mJlJ0KG8sXCJjcm9zc2ZhZGVcIiksY28oZSxuLHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxvKSx7b25VcGRhdGU6ZCxvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dT9mKCk6KGUuc2V0KG4pLHAuZGVmYXVsdC5yZWFkKGYpKSxkKCl9fSkpfXJldHVybntpc0FjdGl2ZTpmdW5jdGlvbigpe3JldHVybiBvJiYoaXx8cy5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXA9PT1jKX0sZnJvbUxlYWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGQoMCxlKX0sdG9MZWFkOmZ1bmN0aW9uKHIpe3ZhciBvPTA7cmV0dXJuIHQucHJldlZhbHVlc3x8dC5mb2xsb3c/bi5sZWFkPT09dC5mb2xsb3cmJm4uZm9sbG93PT09dC5sZWFkJiYobz0xLWUuZ2V0KCkpOm89MSxlLnNldChvKSxkKDEscil9LHJlc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0KDEpfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc3RvcCgpfSxnZXRDcm9zc2ZhZGVTdGF0ZTpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbixyLGk9cy5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXAsYz10LmxlYWQsZD10LmZvbGxvdztpZihpIT09dSYmYyl7dT1pO3ZhciBwPWMuZ2V0TGF0ZXN0VmFsdWVzKCk7T2JqZWN0LmFzc2lnbihvLHApO3ZhciBmPWQ/ZC5nZXRMYXRlc3RWYWx1ZXMoKTp0LnByZXZWYWx1ZXM7T2JqZWN0LmFzc2lnbihhLGYpO3ZhciBoPWUuZ2V0KCksZz1udWxsIT09KG49cC5vcGFjaXR5KSYmdm9pZCAwIT09bj9uOjEsdj1udWxsIT09KHI9bnVsbD09Zj92b2lkIDA6Zi5vcGFjaXR5KSYmdm9pZCAwIT09cj9yOjE7dC5jcm9zc2ZhZGVPcGFjaXR5JiZkPyhvLm9wYWNpdHk9bC5taXgoITEhPT1kLmlzVmlzaWJsZT8wOnYsZyxwbyhoKSksYS5vcGFjaXR5PXQucHJlc2VydmVGb2xsb3dPcGFjaXR5P3Y6bC5taXgodiwwLGZvKGgpKSk6ZHx8KG8ub3BhY2l0eT1sLm1peCh2LGcsaCkpLGZ1bmN0aW9uKGUsdCxuLHIsbyxhKXtmb3IodmFyIGk9MDtpPHZvO2krKyl7dmFyIHM9XCJib3JkZXJcIitnb1tpXStcIlJhZGl1c1wiLGM9Q28ocixzKSx1PUNvKG4scyk7aWYoKHZvaWQgMCE9PWN8fHZvaWQgMCE9PXUpJiYoY3x8KGM9MCksdXx8KHU9MCksXCJudW1iZXJcIj09dHlwZW9mIGMmJlwibnVtYmVyXCI9PXR5cGVvZiB1KSl7dmFyIGQ9TWF0aC5tYXgobC5taXgoYyx1LGEpLDApO2Vbc109dFtzXT1kfX1pZihyLnJvdGF0ZXx8bi5yb3RhdGUpe3ZhciBwPWwubWl4KHIucm90YXRlfHwwLG4ucm90YXRlfHwwLGEpO2Uucm90YXRlPXQucm90YXRlPXB9IW8mJm4uYmFja2dyb3VuZENvbG9yJiZyLmJhY2tncm91bmRDb2xvciYmKGUuYmFja2dyb3VuZENvbG9yPXQuYmFja2dyb3VuZENvbG9yPWwubWl4Q29sb3Ioci5iYWNrZ3JvdW5kQ29sb3Isbi5iYWNrZ3JvdW5kQ29sb3IpKGEpKX0obyxhLHAsZnx8e30sQm9vbGVhbihkKSxoKX19KCksbj09PXQubGVhZD9vOm49PT10LmZvbGxvdz9hOnZvaWQgMH0sc2V0T3B0aW9uczpmdW5jdGlvbihlKXtuPXQsdD1lLG89e30sYT17fX0sZ2V0TGF0ZXN0VmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIG99fX12YXIgcG89aG8oMCwuNSxsLmNpcmNPdXQpLGZvPWhvKC41LC45NSxsLmxpbmVhcik7ZnVuY3Rpb24gaG8oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gcjxlPzA6cj50PzE6bihsLnByb2dyZXNzKGUsdCxyKSl9fXZhciBnbz1bXCJUb3BMZWZ0XCIsXCJUb3BSaWdodFwiLFwiQm90dG9tTGVmdFwiLFwiQm90dG9tUmlnaHRcIl0sdm89Z28ubGVuZ3RoO2Z1bmN0aW9uIENvKGUsdCl7dmFyIG47cmV0dXJuIG51bGwhPT0obj1lW3RdKSYmdm9pZCAwIT09bj9uOmUuYm9yZGVyUmFkaXVzfXZhciBtbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LmNoaWxkcmVuPW5ldyBTZXQsdC5zdGFja3M9bmV3IE1hcCx0Lmhhc01vdW50ZWQ9ITEsdC51cGRhdGVTY2hlZHVsZWQ9ITEsdC5yZW5kZXJTY2hlZHVsZWQ9ITEsdC5zeW5jQ29udGV4dD1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30seXIoKSkse3N5bmNVcGRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2NoZWR1bGVVcGRhdGUoZSl9LGZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7dC5zeW5jQ29udGV4dD1yLl9fYXNzaWduKHt9LHQuc3luY0NvbnRleHQpLHQuc2NoZWR1bGVVcGRhdGUoITApfSxyZWdpc3RlcjpmdW5jdGlvbihlKXtyZXR1cm4gdC5hZGRDaGlsZChlKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiB0LnJlbW92ZUNoaWxkKGUpfX0pLHR9cmV0dXJuIHIuX19leHRlbmRzKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt0aGlzLmhhc01vdW50ZWQ9ITB9LHQucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuc3RhcnRMYXlvdXRBbmltYXRpb24oKX0sdC5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyU2NoZWR1bGVkPSEwLCEwfSx0LnByb3RvdHlwZS5zdGFydExheW91dEFuaW1hdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5yZW5kZXJTY2hlZHVsZWQ9dGhpcy51cGRhdGVTY2hlZHVsZWQ9ITE7dmFyIHQ9dGhpcy5wcm9wcy50eXBlO3RoaXMuY2hpbGRyZW4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5pc1ByZXNlbnQ/ZS5wcmVzZW5jZSE9PWFyLkVudGVyaW5nJiYoZS5wcmVzZW5jZT1lLnByZXNlbmNlPT09YXIuRXhpdGluZz9hci5FbnRlcmluZzphci5QcmVzZW50KTplLnByZXNlbmNlPWFyLkV4aXRpbmd9KSksdGhpcy51cGRhdGVTdGFja3MoKTt2YXIgbj17bGF5b3V0UmVhZHk6ZnVuY3Rpb24obil7dm9pZCAwIT09bi5nZXRMYXlvdXRJZCgpP2UuZ2V0U3RhY2sobikuYW5pbWF0ZShuLFwiY3Jvc3NmYWRlXCI9PT10KTpuLm5vdGlmeUxheW91dFJlYWR5KCl9LHBhcmVudDp0aGlzLmNvbnRleHQudmlzdWFsRWxlbWVudH07dGhpcy5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5zeW5jQ29udGV4dC5hZGQodCl9KSksdGhpcy5zeW5jQ29udGV4dC5mbHVzaChuKSx0aGlzLnN0YWNrcy5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGVhclNuYXBzaG90KCl9KSl9LHQucHJvdG90eXBlLnVwZGF0ZVN0YWNrcz1mdW5jdGlvbigpe3RoaXMuc3RhY2tzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnVwZGF0ZUxlYWRBbmRGb2xsb3coKX0pKX0sdC5wcm90b3R5cGUuc2NoZWR1bGVVcGRhdGU9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9ITEpLCFlJiZ0aGlzLnVwZGF0ZVNjaGVkdWxlZHx8KHRoaXMudXBkYXRlU2NoZWR1bGVkPSEwLHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMSxuPXt9LHI9MDtyPHoubGVuZ3RoO3IrKyl7dmFyIG89XCJyb3RhdGVcIit6W3JdO2UuaGFzVmFsdWUobykmJjAhPT1lLmdldFN0YXRpY1ZhbHVlKG8pJiYodD0hMCxuW29dPWUuZ2V0U3RhdGljVmFsdWUobyksZS5zZXRTdGF0aWNWYWx1ZShvLDApKX1pZih0KXtmb3IodmFyIG8gaW4gZS5zeW5jUmVuZGVyKCksbillLnNldFN0YXRpY1ZhbHVlKG8sbltvXSk7ZS5zY2hlZHVsZVJlbmRlcigpfX0oZSksZS5zaG91bGRSZXNldFRyYW5zZm9ybSgpJiZlLnJlc2V0VHJhbnNmb3JtKCl9KSksdGhpcy5jaGlsZHJlbi5mb3JFYWNoKFZuKSx0aGlzLnN0YWNrcy5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS51cGRhdGVTbmFwc2hvdCgpfSkpLCFlJiZ0aGlzLnJlbmRlclNjaGVkdWxlZHx8KHRoaXMucmVuZGVyU2NoZWR1bGVkPSEwLHRoaXMuZm9yY2VVcGRhdGUoKSkpfSx0LnByb3RvdHlwZS5hZGRDaGlsZD1mdW5jdGlvbihlKXt0aGlzLmNoaWxkcmVuLmFkZChlKSx0aGlzLmFkZFRvU3RhY2soZSksZS5wcmVzZW5jZT10aGlzLmhhc01vdW50ZWQ/YXIuRW50ZXJpbmc6YXIuUHJlc2VudH0sdC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24oZSl7dGhpcy5zY2hlZHVsZVVwZGF0ZSgpLHRoaXMuY2hpbGRyZW4uZGVsZXRlKGUpLHRoaXMucmVtb3ZlRnJvbVN0YWNrKGUpfSx0LnByb3RvdHlwZS5hZGRUb1N0YWNrPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0U3RhY2soZSk7bnVsbD09dHx8dC5hZGQoZSl9LHQucHJvdG90eXBlLnJlbW92ZUZyb21TdGFjaz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFN0YWNrKGUpO251bGw9PXR8fHQucmVtb3ZlKGUpfSx0LnByb3RvdHlwZS5nZXRTdGFjaz1mdW5jdGlvbihlKXt2YXIgdCxuLG8sYSxpLGwscyxjLHU9ZS5nZXRMYXlvdXRJZCgpO2lmKHZvaWQgMCE9PXUpcmV0dXJuIXRoaXMuc3RhY2tzLmhhcyh1KSYmdGhpcy5zdGFja3Muc2V0KHUsKGE9bmV3IFNldCxpPXtsZWFkSXNFeGl0aW5nOiExfSxsPXIuX19hc3NpZ24oe30saSkscz11bygpLGM9ITEse2FkZDpmdW5jdGlvbihlKXtlLnNldENyb3NzZmFkZXIocyksYS5hZGQoZSksbyYmKGUucHJldkRyYWdDdXJzb3I9byksaS5sZWFkfHwoaS5sZWFkPWUpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7YS5kZWxldGUoZSl9LGdldExlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5sZWFkfSx1cGRhdGVTbmFwc2hvdDpmdW5jdGlvbigpe2lmKGkubGVhZCl7dD1zLmlzQWN0aXZlKCk/cy5nZXRMYXRlc3RWYWx1ZXMoKTppLmxlYWQuZ2V0TGF0ZXN0VmFsdWVzKCksbj1pLmxlYWQucHJldlZpZXdwb3J0Qm94O3ZhciBlPW5yLmdldChpLmxlYWQpO2UmJmUuaXNEcmFnZ2luZyYmKG89ZS5jdXJzb3JQcm9ncmVzcyl9fSxjbGVhclNuYXBzaG90OmZ1bmN0aW9uKCl7bz1uPXZvaWQgMH0sdXBkYXRlTGVhZEFuZEZvbGxvdzpmdW5jdGlvbigpe3ZhciBlLG4sbztsPXIuX19hc3NpZ24oe30saSk7Zm9yKHZhciB1PUFycmF5LmZyb20oYSksZD11Lmxlbmd0aDtkLS07ZD49MCl7dmFyIHA9dVtkXTtpZihuJiYobnVsbCE9b3x8KG89cCkpLG51bGwhPW58fChuPXApLG4mJm8pYnJlYWt9aS5sZWFkPW4saS5mb2xsb3c9byxpLmxlYWRJc0V4aXRpbmc9KG51bGw9PT0oZT1pLmxlYWQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnByZXNlbmNlKT09PWFyLkV4aXRpbmcscy5zZXRPcHRpb25zKHtsZWFkOm4sZm9sbG93Om8scHJldlZhbHVlczp0LGNyb3NzZmFkZU9wYWNpdHk6KG51bGw9PW8/dm9pZCAwOm8uaXNQcmVzZW5jZVJvb3QpfHwobnVsbD09bj92b2lkIDA6bi5pc1ByZXNlbmNlUm9vdCl9KSxpLmxlYWQ9PT1sLmZvbGxvd3x8bC5sZWFkPT09aS5sZWFkJiZsLmxlYWRJc0V4aXRpbmc9PT1pLmxlYWRJc0V4aXRpbmd8fChjPSEwKX0sYW5pbWF0ZTpmdW5jdGlvbihlLHQpe3ZhciByO2lmKHZvaWQgMD09PXQmJih0PSExKSxlPT09aS5sZWFkKXt0P2UucG9pbnRUbyhpLmxlYWQpOmUuc2V0VmlzaWJpbGl0eSghMCk7dmFyIG89e30sYT1udWxsPT09KHI9aS5mb2xsb3cpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmdldFByb2plY3Rpb25QYXJlbnQoKTtpZihhJiYoby5wcmV2UGFyZW50PWEpLGUucHJlc2VuY2U9PT1hci5FbnRlcmluZz9vLm9yaWdpbkJveD1pLmZvbGxvdz9pLmZvbGxvdy5wcmV2Vmlld3BvcnRCb3g6bjplLnByZXNlbmNlPT09YXIuRXhpdGluZyYmKG8udGFyZ2V0Qm94PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT1pLmZvbGxvdyl8fHZvaWQgMD09PWU/dm9pZCAwOmUuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXR9KCkpLGMpe2M9ITE7dmFyIGw9ZS5nZXREZWZhdWx0VHJhbnNpdGlvbigpO2UucHJlc2VuY2U9PT1hci5FbnRlcmluZz9zLnRvTGVhZChsKTpzLmZyb21MZWFkKGwpfWUubm90aWZ5TGF5b3V0UmVhZHkobyl9ZWxzZSB0P2kubGVhZCYmZS5wb2ludFRvKGkubGVhZCk6ZS5zZXRWaXNpYmlsaXR5KCExKX19KSksdGhpcy5zdGFja3MuZ2V0KHUpfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdS5jcmVhdGVFbGVtZW50KGtyLlByb3ZpZGVyLHt2YWx1ZTp0aGlzLnN5bmNDb250ZXh0fSx0aGlzLnByb3BzLmNoaWxkcmVuKX0sdC5jb250ZXh0VHlwZT1iLHR9KHUuQ29tcG9uZW50KTtmdW5jdGlvbiB3byhlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlfXZhciBibz1yLl9fYXNzaWduKHIuX19hc3NpZ24oe3JlbmRlcmVyOmVvfSxvbiksZnQpLHlvPXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGJvKSxsciksTHIpO2Z1bmN0aW9uIHhvKGUpe3ZhciB0PWsoKGZ1bmN0aW9uKCl7cmV0dXJuIER0KGUpfSkpO2lmKG8udXNlQ29udGV4dCh3KS5pc1N0YXRpYyl7dmFyIG49ci5fX3JlYWQoby51c2VTdGF0ZShlKSwyKVsxXTtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdC5vbkNoYW5nZShuKX0pLFtdKX1yZXR1cm4gdH1mdW5jdGlvbiBrbyhlLHQpe28udXNlRWZmZWN0KChmdW5jdGlvbigpe2lmKGVlKGUpKXJldHVybiBlLm9uQ2hhbmdlKHQpfSksW3RdKX1mdW5jdGlvbiBTbyhlLHQpe3ZhciBuPXhvKHQoKSkscj1mdW5jdGlvbigpe3JldHVybiBuLnNldCh0KCkpfTtyZXR1cm4gcigpLGZ1bmN0aW9uKGUsdCl7by51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7dmFyIG49ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLm9uQ2hhbmdlKHQpfSkpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KSl9fSkpfShlLChmdW5jdGlvbigpe3JldHVybiBwLmRlZmF1bHQudXBkYXRlKHIsITEsITApfSkpLG59dmFyIE9vLE1vPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmZS5taXh9KGUpP2UubWl4OnZvaWQgMH07ZnVuY3Rpb24gTG8oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07dmFyIG49IUFycmF5LmlzQXJyYXkoZVswXSksbz1uPzA6LTEsYT1lWzArb10saT1lWzErb10scz1lWzIrb10sYz1lWzMrb10sdT1sLmludGVycG9sYXRlKGkscyxyLl9fYXNzaWduKHttaXhlcjpNbyhzWzBdKX0sYykpO3JldHVybiBuP3UoYSk6dX1mdW5jdGlvbiBfbyhlLHQsbixvKXt2YXIgYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6TG8odCxuLG8pO3JldHVybiBBcnJheS5pc0FycmF5KGUpP1BvKGUsYSk6UG8oW2VdLChmdW5jdGlvbihlKXt2YXIgdD1yLl9fcmVhZChlLDEpWzBdO3JldHVybiBhKHQpfSkpfWZ1bmN0aW9uIFBvKGUsdCl7dmFyIG49aygoZnVuY3Rpb24oKXtyZXR1cm5bXX0pKTtyZXR1cm4gU28oZSwoZnVuY3Rpb24oKXtuLmxlbmd0aD0wO2Zvcih2YXIgcj1lLmxlbmd0aCxvPTA7bzxyO28rKyluW29dPWVbb10uZ2V0KCk7cmV0dXJuIHQobil9KSl9ZnVuY3Rpb24gRW8oKXtyZXR1cm57c2Nyb2xsWDpEdCgwKSxzY3JvbGxZOkR0KDApLHNjcm9sbFhQcm9ncmVzczpEdCgwKSxzY3JvbGxZUHJvZ3Jlc3M6RHQoMCl9fWZ1bmN0aW9uIGpvKGUsdCxuKXtuLnNldChlJiZ0P2UvdDowKX1mdW5jdGlvbiBSbyhlLHQpe3ZhciBuPWZ1bmN0aW9uKCl7dmFyIG49dCgpLHI9bi54T2Zmc2V0LG89bi55T2Zmc2V0LGE9bi54TWF4T2Zmc2V0LGk9bi55TWF4T2Zmc2V0O2Uuc2Nyb2xsWC5zZXQociksZS5zY3JvbGxZLnNldChvKSxqbyhyLGEsZS5zY3JvbGxYUHJvZ3Jlc3MpLGpvKG8saSxlLnNjcm9sbFlQcm9ncmVzcyl9O3JldHVybiBuKCksbn1mdW5jdGlvbiBJbygpe3JldHVybnt4T2Zmc2V0OndpbmRvdy5wYWdlWE9mZnNldCx5T2Zmc2V0OndpbmRvdy5wYWdlWU9mZnNldCx4TWF4T2Zmc2V0OmRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgtd2luZG93LmlubmVyV2lkdGgseU1heE9mZnNldDpkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodC13aW5kb3cuaW5uZXJIZWlnaHR9fXZhciBWbyxIbz0hMTtmdW5jdGlvbiBBbygpe3ZhciBlPSExLHQ9W10sbj1uZXcgU2V0LG89e3N1YnNjcmliZTpmdW5jdGlvbihlKXtyZXR1cm4gbi5hZGQoZSksZnVuY3Rpb24oKXtuLmRlbGV0ZShlKX19LHN0YXJ0OmZ1bmN0aW9uKHIsbyl7aWYoZSl7dmFyIGE9W107cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7YS5wdXNoKHF0KGUscix7dHJhbnNpdGlvbk92ZXJyaWRlOm99KSl9KSksUHJvbWlzZS5hbGwoYSl9cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt0LnB1c2goe2FuaW1hdGlvbjpbcixvXSxyZXNvbHZlOmV9KX0pKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBhLmludmFyaWFudChlLFwiY29udHJvbHMuc2V0KCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgY29tcG9uZW50IGhhcyBtb3VudGVkLiBDb25zaWRlciBjYWxsaW5nIHdpdGhpbiBhIHVzZUVmZmVjdCBob29rLlwiKSxuLmZvckVhY2goKGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe0FycmF5LmlzQXJyYXkodCk/VXQoZSx0KTpcInN0cmluZ1wiPT10eXBlb2YgdD9VdChlLFt0XSk6V3QoZSx0KX0oZSx0KX0pKX0sc3RvcDpmdW5jdGlvbigpe24uZm9yRWFjaCgoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe2UuZm9yRWFjaFZhbHVlKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zdG9wKCl9KSl9KGUpfSkpfSxtb3VudDpmdW5jdGlvbigpe3JldHVybiBlPSEwLHQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hbmltYXRpb24sbj1lLnJlc29sdmU7by5zdGFydC5hcHBseShvLHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZCh0KSkpLnRoZW4obil9KSksZnVuY3Rpb24oKXtlPSExLG8uc3RvcCgpfX19O3JldHVybiBvfXZhciBUbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNvbXBvbmVudENvbnRyb2xzPW5ldyBTZXR9cmV0dXJuIGUucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmNvbXBvbmVudENvbnRyb2xzLmFkZChlKSxmdW5jdGlvbigpe3JldHVybiB0LmNvbXBvbmVudENvbnRyb2xzLmRlbGV0ZShlKX19LGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUsdCl7dGhpcy5jb21wb25lbnRDb250cm9scy5mb3JFYWNoKChmdW5jdGlvbihuKXtuLnN0YXJ0KGUubmF0aXZlRXZlbnR8fGUsdCl9KSl9LGUucHJvdG90eXBlLnVwZGF0ZUNvbnN0cmFpbnRzPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPSEwKSx0aGlzLmNvbXBvbmVudENvbnRyb2xzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UudXBkYXRlQ29uc3RyYWludHMoKX0pKSxlJiZRbigpfSxlfSgpLERvPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUb30sQm89ZnVuY3Rpb24oKXtyZXR1cm57fX0sWm89SHIoe2J1aWxkOmZ1bmN0aW9uKCl7fSxtZWFzdXJlVmlld3BvcnRCb3g6ZnVuY3Rpb24oKXtyZXR1cm57eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX19LHJlc2V0VHJhbnNmb3JtOmZ1bmN0aW9uKCl7fSxyZXN0b3JlVHJhbnNmb3JtOmZ1bmN0aW9uKCl7fSxyZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZTpmdW5jdGlvbigpe30scmVuZGVyOmZ1bmN0aW9uKCl7fSxzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6Qm8scmVhZFZhbHVlRnJvbUluc3RhbmNlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi5pbml0aWFsU3RhdGVbdF18fDB9LG1ha2VUYXJnZXRBbmltYXRhYmxlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC50cmFuc2l0aW9uLG89dC50cmFuc2l0aW9uRW5kLGE9ci5fX3Jlc3QodCxbXCJ0cmFuc2l0aW9uXCIsXCJ0cmFuc2l0aW9uRW5kXCJdKTtyZXR1cm4genQoZSxhLEt0KGEsbnx8e30sZSkpLHIuX19hc3NpZ24oe3RyYW5zaXRpb246bix0cmFuc2l0aW9uRW5kOm99LGEpfX0pLCRvPUhlKHtzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6Qm8sY3JlYXRlUmVuZGVyU3RhdGU6Qm99KSxObz1mdW5jdGlvbihlKXtyZXR1cm4gZT4uMDAxPzEvZToxZTV9LEZvPSExO3QuQW5pbWF0ZVByZXNlbmNlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmN1c3RvbSxhPWUuaW5pdGlhbCxpPXZvaWQgMD09PWF8fGEsbD1lLm9uRXhpdENvbXBsZXRlLHM9ZS5leGl0QmVmb3JlRW50ZXIsYz1lLnByZXNlbmNlQWZmZWN0c0xheW91dCxkPXZvaWQgMD09PWN8fGMscD1mdW5jdGlvbigpe3ZhciBlPW8udXNlUmVmKCExKSx0PXIuX19yZWFkKG8udXNlU3RhdGUoMCksMiksbj10WzBdLGE9dFsxXTtyZXR1cm4gZHQoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY3VycmVudD0hMH0pKSxvLnVzZUNhbGxiYWNrKChmdW5jdGlvbigpeyFlLmN1cnJlbnQmJmEobisxKX0pLFtuXSl9KCksZj1vLnVzZUNvbnRleHQoa3IpO09yKGYpJiYocD1mLmZvcmNlVXBkYXRlKTt2YXIgaD1vLnVzZVJlZighMCksZz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gby5DaGlsZHJlbi5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe28uaXNWYWxpZEVsZW1lbnQoZSkmJnQucHVzaChlKX0pKSx0fSh0KSx2PW8udXNlUmVmKGcpLEM9by51c2VSZWYobmV3IE1hcCkuY3VycmVudCxtPW8udXNlUmVmKG5ldyBTZXQpLmN1cnJlbnQ7aWYoZnVuY3Rpb24oZSx0KXtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXNvKGUpO3Quc2V0KG4sZSl9KSl9KGcsQyksaC5jdXJyZW50KXJldHVybiBoLmN1cnJlbnQ9ITEsdS5jcmVhdGVFbGVtZW50KHUuRnJhZ21lbnQsbnVsbCxnLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHUuY3JlYXRlRWxlbWVudChpbyx7a2V5OnNvKGUpLGlzUHJlc2VudDohMCxpbml0aWFsOiEhaSYmdm9pZCAwLHByZXNlbmNlQWZmZWN0c0xheW91dDpkfSxlKX0pKSk7Zm9yKHZhciB3PXIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChnKSksYj12LmN1cnJlbnQubWFwKHNvKSx5PWcubWFwKHNvKSx4PWIubGVuZ3RoLGs9MDtrPHg7aysrKXt2YXIgUz1iW2tdOy0xPT09eS5pbmRleE9mKFMpP20uYWRkKFMpOm0uZGVsZXRlKFMpfXJldHVybiBzJiZtLnNpemUmJih3PVtdKSxtLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKC0xPT09eS5pbmRleE9mKGUpKXt2YXIgdD1DLmdldChlKTtpZih0KXt2YXIgcj1iLmluZGV4T2YoZSk7dy5zcGxpY2UociwwLHUuY3JlYXRlRWxlbWVudChpbyx7a2V5OnNvKHQpLGlzUHJlc2VudDohMSxvbkV4aXRDb21wbGV0ZTpmdW5jdGlvbigpe0MuZGVsZXRlKGUpLG0uZGVsZXRlKGUpO3ZhciB0PXYuY3VycmVudC5maW5kSW5kZXgoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleT09PWV9KSk7di5jdXJyZW50LnNwbGljZSh0LDEpLG0uc2l6ZXx8KHYuY3VycmVudD1nLHAoKSxsJiZsKCkpfSxjdXN0b206bixwcmVzZW5jZUFmZmVjdHNMYXlvdXQ6ZH0sdCkpfX19KSksdz13Lm1hcCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXk7cmV0dXJuIG0uaGFzKHQpP2U6dS5jcmVhdGVFbGVtZW50KGlvLHtrZXk6c28oZSksaXNQcmVzZW50OiEwLHByZXNlbmNlQWZmZWN0c0xheW91dDpkfSxlKX0pKSx2LmN1cnJlbnQ9dyx1LmNyZWF0ZUVsZW1lbnQodS5GcmFnbWVudCxudWxsLG0uc2l6ZT93OncubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gby5jbG9uZUVsZW1lbnQoZSl9KSkpfSx0LkFuaW1hdGVTaGFyZWRMYXlvdXQ9bW8sdC5EcmFnQ29udHJvbHM9VG8sdC5GbGF0VHJlZT1Wcix0LkZyYW1lclRyZWVMYXlvdXRDb250ZXh0PVNyLHQuTGF5b3V0R3JvdXBDb250ZXh0PVAsdC5MYXp5TW90aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmZlYXR1cmVzLGE9ZS5zdHJpY3QsaT12b2lkIDAhPT1hJiZhLGw9ci5fX3JlYWQoby51c2VTdGF0ZSghd28obikpLDIpWzFdLHM9by51c2VSZWYodm9pZCAwKTtpZighd28obikpe3ZhciBjPW4ucmVuZGVyZXIsZD1yLl9fcmVzdChuLFtcInJlbmRlcmVyXCJdKTtzLmN1cnJlbnQ9YyxnKGQpfXJldHVybiBvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXt3byhuKSYmbigpLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciB0PWUucmVuZGVyZXI7ZyhyLl9fcmVzdChlLFtcInJlbmRlcmVyXCJdKSkscy5jdXJyZW50PXQsbCghMCl9KSl9KSxbXSksdS5jcmVhdGVFbGVtZW50KHYuUHJvdmlkZXIse3ZhbHVlOntyZW5kZXJlcjpzLmN1cnJlbnQsc3RyaWN0Oml9fSx0KX0sdC5Nb3Rpb25Db25maWc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPXIuX19yZXN0KGUsW1wiY2hpbGRyZW5cIl0pOyhuPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxvLnVzZUNvbnRleHQodykpLG4pKS5pc1N0YXRpYz1rKChmdW5jdGlvbigpe3JldHVybiBuLmlzU3RhdGljfSkpO3ZhciBhPVwib2JqZWN0XCI9PXR5cGVvZiBuLnRyYW5zaXRpb24/bi50cmFuc2l0aW9uLnRvU3RyaW5nKCk6XCJcIixpPW8udXNlTWVtbygoZnVuY3Rpb24oKXtyZXR1cm4gbn0pLFthLG4udHJhbnNmb3JtUGFnZVBvaW50XSk7cmV0dXJuIHUuY3JlYXRlRWxlbWVudCh3LlByb3ZpZGVyLHt2YWx1ZTppfSx0KX0sdC5Nb3Rpb25Db25maWdDb250ZXh0PXcsdC5Nb3Rpb25WYWx1ZT1UdCx0LlByZXNlbmNlQ29udGV4dD14LHQuU2hhcmVkTGF5b3V0Q29udGV4dD1rcix0LmFkZFNjYWxlQ29ycmVjdGlvbj1VLHQuYW5pbWF0ZT1jbyx0LmFuaW1hdGVWaXN1YWxFbGVtZW50PXF0LHQuYW5pbWF0aW9uQ29udHJvbHM9QW8sdC5iYXRjaExheW91dD1Ybix0LmNyZWF0ZUJhdGNoZXI9eXIsdC5jcmVhdGVDcm9zc2ZhZGVyPXVvLHQuY3JlYXRlRG9tTW90aW9uQ29tcG9uZW50PWZ1bmN0aW9uKGUpe3JldHVybiBaKFplKGUse2ZvcndhcmRNb3Rpb25Qcm9wczohMX0sdG8sZW8pKX0sdC5jcmVhdGVNb3Rpb25Db21wb25lbnQ9Wix0LmRvbUFuaW1hdGlvbj1ibyx0LmRvbU1heD15byx0LmZsdXNoTGF5b3V0PVFuLHQuaXNWYWxpZE1vdGlvblByb3A9ZGUsdC5tPXJvLHQubW90aW9uPW5vLHQubW90aW9uVmFsdWU9RHQsdC5yZXNvbHZlTW90aW9uVmFsdWU9SWUsdC5zbmFwc2hvdFZpZXdwb3J0Qm94PVZuLHQudHJhbnNmb3JtPUxvLHQudXNlQW5pbWF0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9ayhBbyk7cmV0dXJuIG8udXNlRWZmZWN0KGUubW91bnQsW10pLGV9LHQudXNlQ3ljbGU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07dmFyIG49by51c2VSZWYoMCksYT1yLl9fcmVhZChvLnVzZVN0YXRlKGVbbi5jdXJyZW50XSksMiksaT1hWzBdLHM9YVsxXTtyZXR1cm5baSxmdW5jdGlvbih0KXtuLmN1cnJlbnQ9XCJudW1iZXJcIiE9dHlwZW9mIHQ/bC53cmFwKDAsZS5sZW5ndGgsbi5jdXJyZW50KzEpOnQscyhlW24uY3VycmVudF0pfV19LHQudXNlRGVwcmVjYXRlZEFuaW1hdGVkU3RhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5fX3JlYWQoby51c2VTdGF0ZShlKSwyKSxuPXRbMF0sYT10WzFdLGk9JG8oe30sITEpLGw9aygoZnVuY3Rpb24oKXtyZXR1cm4gWm8oe3Byb3BzOnt9LHZpc3VhbFN0YXRlOml9LHtpbml0aWFsU3RhdGU6ZX0pfSkpO3JldHVybiBvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gbC5tb3VudCh7fSksbC51bm1vdW50KCl9KSxbXSksby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7bC5zZXRQcm9wcyh7b25VcGRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoci5fX2Fzc2lnbih7fSxlKSl9fSl9KSksW24saygoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHF0KGwsZSl9fSkpXX0sdC51c2VEZXByZWNhdGVkSW52ZXJ0ZWRTY2FsZT1mdW5jdGlvbihlKXt2YXIgdD14bygxKSxuPXhvKDEpLHI9eSgpO3JldHVybiBhLmludmFyaWFudCghKCFlJiYhciksXCJJZiBubyBzY2FsZSB2YWx1ZXMgYXJlIHByb3ZpZGVkLCB1c2VJbnZlcnRlZFNjYWxlIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBjaGlsZCBvZiBhbm90aGVyIG1vdGlvbiBjb21wb25lbnQuXCIpLGEud2FybmluZyhGbyxcInVzZUludmVydGVkU2NhbGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuMC4gVXNlIHRoZSBsYXlvdXQgcHJvcCBpbnN0ZWFkLlwiKSxGbz0hMCxlPyh0PWUuc2NhbGVYfHx0LG49ZS5zY2FsZVl8fG4pOnImJih0PXIuZ2V0VmFsdWUoXCJzY2FsZVhcIiwxKSxuPXIuZ2V0VmFsdWUoXCJzY2FsZVlcIiwxKSkse3NjYWxlWDpfbyh0LE5vKSxzY2FsZVk6X28obixObyl9fSx0LnVzZURvbUV2ZW50PU5lLHQudXNlRHJhZ0NvbnRyb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIGsoRG8pfSx0LnVzZUVsZW1lbnRTY3JvbGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ayhFbyk7cmV0dXJuIGooKGZ1bmN0aW9uKCl7dmFyIG49ZS5jdXJyZW50O2lmKGEuaW52YXJpYW50KCEhbixcInJlZiBwcm92aWRlZCB0byB1c2VTY3JvbGwgbXVzdCBiZSBwYXNzZWQgaW50byBhIEhUTUwgZWxlbWVudC5cIiksbil7dmFyIHI9Um8odCxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm57eE9mZnNldDplLnNjcm9sbExlZnQseU9mZnNldDplLnNjcm9sbFRvcCx4TWF4T2Zmc2V0OmUuc2Nyb2xsV2lkdGgtZS5vZmZzZXRXaWR0aCx5TWF4T2Zmc2V0OmUuc2Nyb2xsSGVpZ2h0LWUub2Zmc2V0SGVpZ2h0fX19KG4pKSxvPSRlKG4sXCJzY3JvbGxcIixyLHtwYXNzaXZlOiEwfSksaT0kZShuLFwicmVzaXplXCIscik7cmV0dXJuIGZ1bmN0aW9uKCl7byYmbygpLGkmJmkoKX19fSksW10pLHR9LHQudXNlSXNQcmVzZW50PWZ1bmN0aW9uKCl7cmV0dXJuIE8oby51c2VDb250ZXh0KHgpKX0sdC51c2VNb3Rpb25UZW1wbGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTt2YXIgcj1lLmxlbmd0aDtyZXR1cm4gU28odCwoZnVuY3Rpb24oKXtmb3IodmFyIG49XCJcIixvPTA7bzxyO28rKyluKz1lW29dLHRbb10mJihuKz10W29dLmdldCgpKTtyZXR1cm4gbn0pKX0sdC51c2VNb3Rpb25WYWx1ZT14byx0LnVzZVByZXNlbmNlPVMsdC51c2VSZWR1Y2VkTW90aW9uPWZ1bmN0aW9uKCl7IVZvJiZmdW5jdGlvbigpe2lmKFZvPUR0KG51bGwpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpaWYod2luZG93Lm1hdGNoTWVkaWEpe3ZhciBlPXdpbmRvdy5tYXRjaE1lZGlhKFwiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pXCIpLHQ9ZnVuY3Rpb24oKXtyZXR1cm4gVm8uc2V0KGUubWF0Y2hlcyl9O2UuYWRkTGlzdGVuZXIodCksdCgpfWVsc2UgVm8uc2V0KCExKX0oKTt2YXIgZT1yLl9fcmVhZChvLnVzZVN0YXRlKFZvLmdldCgpKSwyKSx0PWVbMF0sbj1lWzFdO3JldHVybiBrbyhWbyxuKSx0fSx0LnVzZVNwcmluZz1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PXt9KTt2YXIgbj1vLnVzZUNvbnRleHQodykuaXNTdGF0aWMsYT1vLnVzZVJlZihudWxsKSxpPXhvKGVlKGUpP2UuZ2V0KCk6ZSk7cmV0dXJuIG8udXNlTWVtbygoZnVuY3Rpb24oKXtyZXR1cm4gaS5hdHRhY2goKGZ1bmN0aW9uKGUsbyl7cmV0dXJuIG4/byhlKTooYS5jdXJyZW50JiZhLmN1cnJlbnQuc3RvcCgpLGEuY3VycmVudD1sLmFuaW1hdGUoci5fX2Fzc2lnbihyLl9fYXNzaWduKHtmcm9tOmkuZ2V0KCksdG86ZSx2ZWxvY2l0eTppLmdldFZlbG9jaXR5KCl9LHQpLHtvblVwZGF0ZTpvfSkpLGkuZ2V0KCkpfSkpfSksT2JqZWN0LnZhbHVlcyh0KSksa28oZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuc2V0KHBhcnNlRmxvYXQoZSkpfSkpLGl9LHQudXNlVHJhbnNmb3JtPV9vLHQudXNlVmVsb2NpdHk9ZnVuY3Rpb24oZSl7dmFyIHQ9eG8oZS5nZXRWZWxvY2l0eSgpKTtyZXR1cm4gby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIGUudmVsb2NpdHlVcGRhdGVTdWJzY3JpYmVycy5hZGQoKGZ1bmN0aW9uKGUpe3Quc2V0KGUpfSkpfSksW2VdKSx0fSx0LnVzZVZpZXdwb3J0U2Nyb2xsPWZ1bmN0aW9uKCl7cmV0dXJuIE9vfHwoT289RW8oKSksaigoZnVuY3Rpb24oKXshSG8mJmZ1bmN0aW9uKCl7aWYoSG89ITAsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyl7dmFyIGU9Um8oT28sSW8pOyRlKHdpbmRvdyxcInNjcm9sbFwiLGUse3Bhc3NpdmU6ITB9KSwkZSh3aW5kb3csXCJyZXNpemVcIixlKX19KCl9KSxbXSksT299LHQudmlzdWFsRWxlbWVudD1Icn0sNDgzOTooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPTEvNjAqMWUzLHI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHBlcmZvcm1hbmNlP2Z1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpmdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfSxvPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/ZnVuY3Rpb24oZSl7cmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBlKHIoKSl9KSxuKX0sYT0hMCxpPSExLGw9ITEscz17ZGVsdGE6MCx0aW1lc3RhbXA6MH0sYz1bXCJyZWFkXCIsXCJ1cGRhdGVcIixcInByZVJlbmRlclwiLFwicmVuZGVyXCIsXCJwb3N0UmVuZGVyXCJdLHU9Yy5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1bXSxyPTAsbz0hMSxhPW5ldyBXZWFrU2V0LGk9e3NjaGVkdWxlOmZ1bmN0aW9uKGUsaSxsKXt2b2lkIDA9PT1pJiYoaT0hMSksdm9pZCAwPT09bCYmKGw9ITEpO3ZhciBzPWwmJm8sYz1zP3Q6bjtyZXR1cm4gaSYmYS5hZGQoZSksLTE9PT1jLmluZGV4T2YoZSkmJihjLnB1c2goZSkscyYmbyYmKHI9dC5sZW5ndGgpKSxlfSxjYW5jZWw6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5pbmRleE9mKGUpOy0xIT09dCYmbi5zcGxpY2UodCwxKSxhLmRlbGV0ZShlKX0scHJvY2VzczpmdW5jdGlvbihsKXt2YXIgcztpZihvPSEwLHQ9KHM9W24sdF0pWzBdLChuPXNbMV0pLmxlbmd0aD0wLHI9dC5sZW5ndGgpZm9yKHZhciBjPTA7YzxyO2MrKyl7dmFyIHU9dFtjXTt1KGwpLGEuaGFzKHUpJiYoaS5zY2hlZHVsZSh1KSxlKCkpfW89ITF9fTtyZXR1cm4gaX0oKGZ1bmN0aW9uKCl7cmV0dXJuIGk9ITB9KSksZX0pLHt9KSxkPWMucmVkdWNlKChmdW5jdGlvbihlLHQpe3ZhciBuPXVbdF07cmV0dXJuIGVbdF09ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMSksdm9pZCAwPT09ciYmKHI9ITEpLGl8fHYoKSxuLnNjaGVkdWxlKGUsdCxyKX0sZX0pLHt9KSxwPWMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPXVbdF0uY2FuY2VsLGV9KSx7fSksZj1jLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XT1mdW5jdGlvbigpe3JldHVybiB1W3RdLnByb2Nlc3Mocyl9LGV9KSx7fSksaD1mdW5jdGlvbihlKXtyZXR1cm4gdVtlXS5wcm9jZXNzKHMpfSxnPWZ1bmN0aW9uKGUpe2k9ITEscy5kZWx0YT1hP246TWF0aC5tYXgoTWF0aC5taW4oZS1zLnRpbWVzdGFtcCw0MCksMSkscy50aW1lc3RhbXA9ZSxsPSEwLGMuZm9yRWFjaChoKSxsPSExLGkmJihhPSExLG8oZykpfSx2PWZ1bmN0aW9uKCl7aT0hMCxhPSEwLGx8fG8oZyl9O3QuY2FuY2VsU3luYz1wLHQuZGVmYXVsdD1kLHQuZmx1c2hTeW5jPWYsdC5nZXRGcmFtZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gc319LDQzOTQ6KGUsdCxuKT0+e24ucih0KSxuLmQodCx7aW52YXJpYW50OigpPT5vLHdhcm5pbmc6KCk9PnJ9KTt2YXIgcj1mdW5jdGlvbigpe30sbz1mdW5jdGlvbigpe319LDc3MzooZSx0LG4pPT57dmFyIHIsbz1cIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX19cIixhPS9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC8saT1cIm9iamVjdFwiPT10eXBlb2Ygbi5nJiZuLmcmJm4uZy5PYmplY3Q9PT1PYmplY3QmJm4uZyxsPVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixzPWl8fGx8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxjPUFycmF5LnByb3RvdHlwZSx1PUZ1bmN0aW9uLnByb3RvdHlwZSxkPU9iamVjdC5wcm90b3R5cGUscD1zW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdLGY9KHI9L1teLl0rJC8uZXhlYyhwJiZwLmtleXMmJnAua2V5cy5JRV9QUk9UT3x8XCJcIikpP1wiU3ltYm9sKHNyYylfMS5cIityOlwiXCIsaD11LnRvU3RyaW5nLGc9ZC5oYXNPd25Qcm9wZXJ0eSx2PWQudG9TdHJpbmcsQz1SZWdFeHAoXCJeXCIraC5jYWxsKGcpLnJlcGxhY2UoL1tcXFxcXiQuKis/KClbXFxde318XS9nLFwiXFxcXCQmXCIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csXCIkMS4qP1wiKStcIiRcIiksbT1jLnNwbGljZSx3PU0ocyxcIk1hcFwiKSxiPU0oT2JqZWN0LFwiY3JlYXRlXCIpO2Z1bmN0aW9uIHkoZSl7dmFyIHQ9LTEsbj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24geChlKXt2YXIgdD0tMSxuPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBrKGUpe3ZhciB0PS0xLG49ZT9lLmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PG47KXt2YXIgcj1lW3RdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWZ1bmN0aW9uIFMoZSx0KXtmb3IodmFyIG4scixvPWUubGVuZ3RoO28tLTspaWYoKG49ZVtvXVswXSk9PT0ocj10KXx8biE9biYmciE9cilyZXR1cm4gbztyZXR1cm4tMX1mdW5jdGlvbiBPKGUsdCl7dmFyIG4scixvPWUuX19kYXRhX187cmV0dXJuKFwic3RyaW5nXCI9PShyPXR5cGVvZihuPXQpKXx8XCJudW1iZXJcIj09cnx8XCJzeW1ib2xcIj09cnx8XCJib29sZWFuXCI9PXI/XCJfX3Byb3RvX19cIiE9PW46bnVsbD09PW4pP29bXCJzdHJpbmdcIj09dHlwZW9mIHQ/XCJzdHJpbmdcIjpcImhhc2hcIl06by5tYXB9ZnVuY3Rpb24gTShlLHQpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/dm9pZCAwOmVbdF19KGUsdCk7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFfKGUpfHxmJiZmIGluIGUpcmV0dXJuITE7dmFyIHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9XyhlKT92LmNhbGwoZSk6XCJcIjtyZXR1cm5cIltvYmplY3QgRnVuY3Rpb25dXCI9PXR8fFwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIj09dH0oZSl8fGZ1bmN0aW9uKGUpe3ZhciB0PSExO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUudG9TdHJpbmcpdHJ5e3Q9ISEoZStcIlwiKX1jYXRjaChlKXt9cmV0dXJuIHR9KGUpP0M6YTtyZXR1cm4gdC50ZXN0KGZ1bmN0aW9uKGUpe2lmKG51bGwhPWUpe3RyeXtyZXR1cm4gaC5jYWxsKGUpfWNhdGNoKGUpe310cnl7cmV0dXJuIGUrXCJcIn1jYXRjaChlKXt9fXJldHVyblwiXCJ9KGUpKX0obik/bjp2b2lkIDB9ZnVuY3Rpb24gTChlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGV8fHQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgZnVuY3Rpb25cIik7dmFyIG49ZnVuY3Rpb24oKXt2YXIgcj1hcmd1bWVudHMsbz10P3QuYXBwbHkodGhpcyxyKTpyWzBdLGE9bi5jYWNoZTtpZihhLmhhcyhvKSlyZXR1cm4gYS5nZXQobyk7dmFyIGk9ZS5hcHBseSh0aGlzLHIpO3JldHVybiBuLmNhY2hlPWEuc2V0KG8saSksaX07cmV0dXJuIG4uY2FjaGU9bmV3KEwuQ2FjaGV8fGspLG59ZnVuY3Rpb24gXyhlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4hIWUmJihcIm9iamVjdFwiPT10fHxcImZ1bmN0aW9uXCI9PXQpfXkucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1iP2IobnVsbCk6e319LHkucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5oYXMoZSkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW2VdfSx5LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztpZihiKXt2YXIgbj10W2VdO3JldHVybiBuPT09bz92b2lkIDA6bn1yZXR1cm4gZy5jYWxsKHQsZSk/dFtlXTp2b2lkIDB9LHkucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBiP3ZvaWQgMCE9PXRbZV06Zy5jYWxsKHQsZSl9LHkucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9fZGF0YV9fW2VdPWImJnZvaWQgMD09PXQ/bzp0LHRoaXN9LHgucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXX0seC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1TKHQsZSk7cmV0dXJuIShuPDB8fChuPT10Lmxlbmd0aC0xP3QucG9wKCk6bS5jYWxsKHQsbiwxKSwwKSl9LHgucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49Uyh0LGUpO3JldHVybiBuPDA/dm9pZCAwOnRbbl1bMV19LHgucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gUyh0aGlzLl9fZGF0YV9fLGUpPi0xfSx4LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fLHI9UyhuLGUpO3JldHVybiByPDA/bi5wdXNoKFtlLHRdKTpuW3JdWzFdPXQsdGhpc30say5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyB5LG1hcDpuZXcod3x8eCksc3RyaW5nOm5ldyB5fX0say5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3JldHVybiBPKHRoaXMsZSkuZGVsZXRlKGUpfSxrLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIE8odGhpcyxlKS5nZXQoZSl9LGsucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gTyh0aGlzLGUpLmhhcyhlKX0say5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE8odGhpcyxlKS5zZXQoZSx0KSx0aGlzfSxMLkNhY2hlPWssZS5leHBvcnRzPUx9LDY0ODY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2U9bi5ubWQoZSksZnVuY3Rpb24oKXt2YXIgbyxhPVwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiLGk9XCJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fXCIsbD1cIl9fbG9kYXNoX3BsYWNlaG9sZGVyX19cIixzPTMyLGM9MTI4LHU9MS8wLGQ9OTAwNzE5OTI1NDc0MDk5MSxwPU5hTixmPTQyOTQ5NjcyOTUsaD1bW1wiYXJ5XCIsY10sW1wiYmluZFwiLDFdLFtcImJpbmRLZXlcIiwyXSxbXCJjdXJyeVwiLDhdLFtcImN1cnJ5UmlnaHRcIiwxNl0sW1wiZmxpcFwiLDUxMl0sW1wicGFydGlhbFwiLHNdLFtcInBhcnRpYWxSaWdodFwiLDY0XSxbXCJyZWFyZ1wiLDI1Nl1dLGc9XCJbb2JqZWN0IEFyZ3VtZW50c11cIix2PVwiW29iamVjdCBBcnJheV1cIixDPVwiW29iamVjdCBCb29sZWFuXVwiLG09XCJbb2JqZWN0IERhdGVdXCIsdz1cIltvYmplY3QgRXJyb3JdXCIsYj1cIltvYmplY3QgRnVuY3Rpb25dXCIseT1cIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dXCIseD1cIltvYmplY3QgTWFwXVwiLGs9XCJbb2JqZWN0IE51bWJlcl1cIixTPVwiW29iamVjdCBPYmplY3RdXCIsTz1cIltvYmplY3QgUHJvbWlzZV1cIixNPVwiW29iamVjdCBSZWdFeHBdXCIsTD1cIltvYmplY3QgU2V0XVwiLF89XCJbb2JqZWN0IFN0cmluZ11cIixQPVwiW29iamVjdCBTeW1ib2xdXCIsRT1cIltvYmplY3QgV2Vha01hcF1cIixqPVwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIixSPVwiW29iamVjdCBEYXRhVmlld11cIixJPVwiW29iamVjdCBGbG9hdDMyQXJyYXldXCIsVj1cIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiLEg9XCJbb2JqZWN0IEludDhBcnJheV1cIixBPVwiW29iamVjdCBJbnQxNkFycmF5XVwiLFQ9XCJbb2JqZWN0IEludDMyQXJyYXldXCIsRD1cIltvYmplY3QgVWludDhBcnJheV1cIixCPVwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV1cIixaPVwiW29iamVjdCBVaW50MTZBcnJheV1cIiwkPVwiW29iamVjdCBVaW50MzJBcnJheV1cIixOPS9cXGJfX3AgXFwrPSAnJzsvZyxGPS9cXGIoX19wIFxcKz0pICcnIFxcKy9nLFc9LyhfX2VcXCguKj9cXCl8XFxiX190XFwpKSBcXCtcXG4nJzsvZyxVPS8mKD86YW1wfGx0fGd0fHF1b3R8IzM5KTsvZyx6PS9bJjw+XCInXS9nLEc9UmVnRXhwKFUuc291cmNlKSxLPVJlZ0V4cCh6LnNvdXJjZSkscT0vPCUtKFtcXHNcXFNdKz8pJT4vZyxZPS88JShbXFxzXFxTXSs/KSU+L2csSj0vPCU9KFtcXHNcXFNdKz8pJT4vZyxYPS9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sUT0vXlxcdyokLyxlZT0vW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2csdGU9L1tcXFxcXiQuKis/KClbXFxde318XS9nLG5lPVJlZ0V4cCh0ZS5zb3VyY2UpLHJlPS9eXFxzKy8sb2U9L1xccy8sYWU9L1xceyg/OlxcblxcL1xcKiBcXFt3cmFwcGVkIHdpdGggLitcXF0gXFwqXFwvKT9cXG4/LyxpZT0vXFx7XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAoLispXFxdIFxcKi8sbGU9Lyw/ICYgLyxzZT0vW15cXHgwMC1cXHgyZlxceDNhLVxceDQwXFx4NWItXFx4NjBcXHg3Yi1cXHg3Zl0rL2csY2U9L1soKT0se31cXFtcXF1cXC9cXHNdLyx1ZT0vXFxcXChcXFxcKT8vZyxkZT0vXFwkXFx7KFteXFxcXH1dKig/OlxcXFwuW15cXFxcfV0qKSopXFx9L2cscGU9L1xcdyokLyxmZT0vXlstK10weFswLTlhLWZdKyQvaSxoZT0vXjBiWzAxXSskL2ksZ2U9L15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLyx2ZT0vXjBvWzAtN10rJC9pLENlPS9eKD86MHxbMS05XVxcZCopJC8sbWU9L1tcXHhjMC1cXHhkNlxceGQ4LVxceGY2XFx4ZjgtXFx4ZmZcXHUwMTAwLVxcdTAxN2ZdL2csd2U9LygkXikvLGJlPS9bJ1xcblxcclxcdTIwMjhcXHUyMDI5XFxcXF0vZyx5ZT1cIlxcXFx1ZDgwMC1cXFxcdWRmZmZcIix4ZT1cIlxcXFx1MDMwMC1cXFxcdTAzNmZcXFxcdWZlMjAtXFxcXHVmZTJmXFxcXHUyMGQwLVxcXFx1MjBmZlwiLGtlPVwiXFxcXHUyNzAwLVxcXFx1MjdiZlwiLFNlPVwiYS16XFxcXHhkZi1cXFxceGY2XFxcXHhmOC1cXFxceGZmXCIsT2U9XCJBLVpcXFxceGMwLVxcXFx4ZDZcXFxceGQ4LVxcXFx4ZGVcIixNZT1cIlxcXFx1ZmUwZVxcXFx1ZmUwZlwiLExlPVwiXFxcXHhhY1xcXFx4YjFcXFxceGQ3XFxcXHhmN1xcXFx4MDAtXFxcXHgyZlxcXFx4M2EtXFxcXHg0MFxcXFx4NWItXFxcXHg2MFxcXFx4N2ItXFxcXHhiZlxcXFx1MjAwMC1cXFxcdTIwNmYgXFxcXHRcXFxceDBiXFxcXGZcXFxceGEwXFxcXHVmZWZmXFxcXG5cXFxcclxcXFx1MjAyOFxcXFx1MjAyOVxcXFx1MTY4MFxcXFx1MTgwZVxcXFx1MjAwMFxcXFx1MjAwMVxcXFx1MjAwMlxcXFx1MjAwM1xcXFx1MjAwNFxcXFx1MjAwNVxcXFx1MjAwNlxcXFx1MjAwN1xcXFx1MjAwOFxcXFx1MjAwOVxcXFx1MjAwYVxcXFx1MjAyZlxcXFx1MjA1ZlxcXFx1MzAwMFwiLF9lPVwiW1wiK3llK1wiXVwiLFBlPVwiW1wiK0xlK1wiXVwiLEVlPVwiW1wiK3hlK1wiXVwiLGplPVwiXFxcXGQrXCIsUmU9XCJbXCIra2UrXCJdXCIsSWU9XCJbXCIrU2UrXCJdXCIsVmU9XCJbXlwiK3llK0xlK2plK2tlK1NlK09lK1wiXVwiLEhlPVwiXFxcXHVkODNjW1xcXFx1ZGZmYi1cXFxcdWRmZmZdXCIsQWU9XCJbXlwiK3llK1wiXVwiLFRlPVwiKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfVwiLERlPVwiW1xcXFx1ZDgwMC1cXFxcdWRiZmZdW1xcXFx1ZGMwMC1cXFxcdWRmZmZdXCIsQmU9XCJbXCIrT2UrXCJdXCIsWmU9XCJcXFxcdTIwMGRcIiwkZT1cIig/OlwiK0llK1wifFwiK1ZlK1wiKVwiLE5lPVwiKD86XCIrQmUrXCJ8XCIrVmUrXCIpXCIsRmU9XCIoPzpbJ+KAmV0oPzpkfGxsfG18cmV8c3x0fHZlKSk/XCIsV2U9XCIoPzpbJ+KAmV0oPzpEfExMfE18UkV8U3xUfFZFKSk/XCIsVWU9XCIoPzpcIitFZStcInxcIitIZStcIik/XCIsemU9XCJbXCIrTWUrXCJdP1wiLEdlPXplK1VlK1wiKD86XCIrWmUrXCIoPzpcIitbQWUsVGUsRGVdLmpvaW4oXCJ8XCIpK1wiKVwiK3plK1VlK1wiKSpcIixLZT1cIig/OlwiK1tSZSxUZSxEZV0uam9pbihcInxcIikrXCIpXCIrR2UscWU9XCIoPzpcIitbQWUrRWUrXCI/XCIsRWUsVGUsRGUsX2VdLmpvaW4oXCJ8XCIpK1wiKVwiLFllPVJlZ0V4cChcIlsn4oCZXVwiLFwiZ1wiKSxKZT1SZWdFeHAoRWUsXCJnXCIpLFhlPVJlZ0V4cChIZStcIig/PVwiK0hlK1wiKXxcIitxZStHZSxcImdcIiksUWU9UmVnRXhwKFtCZStcIj9cIitJZStcIitcIitGZStcIig/PVwiK1tQZSxCZSxcIiRcIl0uam9pbihcInxcIikrXCIpXCIsTmUrXCIrXCIrV2UrXCIoPz1cIitbUGUsQmUrJGUsXCIkXCJdLmpvaW4oXCJ8XCIpK1wiKVwiLEJlK1wiP1wiKyRlK1wiK1wiK0ZlLEJlK1wiK1wiK1dlLFwiXFxcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxcXGRUSCkoPz1cXFxcYnxbYS16X10pXCIsXCJcXFxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXFxcZHRoKSg/PVxcXFxifFtBLVpfXSlcIixqZSxLZV0uam9pbihcInxcIiksXCJnXCIpLGV0PVJlZ0V4cChcIltcIitaZSt5ZSt4ZStNZStcIl1cIiksdHQ9L1thLXpdW0EtWl18W0EtWl17Mn1bYS16XXxbMC05XVthLXpBLVpdfFthLXpBLVpdWzAtOV18W15hLXpBLVowLTkgXS8sbnQ9W1wiQXJyYXlcIixcIkJ1ZmZlclwiLFwiRGF0YVZpZXdcIixcIkRhdGVcIixcIkVycm9yXCIsXCJGbG9hdDMyQXJyYXlcIixcIkZsb2F0NjRBcnJheVwiLFwiRnVuY3Rpb25cIixcIkludDhBcnJheVwiLFwiSW50MTZBcnJheVwiLFwiSW50MzJBcnJheVwiLFwiTWFwXCIsXCJNYXRoXCIsXCJPYmplY3RcIixcIlByb21pc2VcIixcIlJlZ0V4cFwiLFwiU2V0XCIsXCJTdHJpbmdcIixcIlN5bWJvbFwiLFwiVHlwZUVycm9yXCIsXCJVaW50OEFycmF5XCIsXCJVaW50OENsYW1wZWRBcnJheVwiLFwiVWludDE2QXJyYXlcIixcIlVpbnQzMkFycmF5XCIsXCJXZWFrTWFwXCIsXCJfXCIsXCJjbGVhclRpbWVvdXRcIixcImlzRmluaXRlXCIsXCJwYXJzZUludFwiLFwic2V0VGltZW91dFwiXSxydD0tMSxvdD17fTtvdFtJXT1vdFtWXT1vdFtIXT1vdFtBXT1vdFtUXT1vdFtEXT1vdFtCXT1vdFtaXT1vdFskXT0hMCxvdFtnXT1vdFt2XT1vdFtqXT1vdFtDXT1vdFtSXT1vdFttXT1vdFt3XT1vdFtiXT1vdFt4XT1vdFtrXT1vdFtTXT1vdFtNXT1vdFtMXT1vdFtfXT1vdFtFXT0hMTt2YXIgYXQ9e307YXRbZ109YXRbdl09YXRbal09YXRbUl09YXRbQ109YXRbbV09YXRbSV09YXRbVl09YXRbSF09YXRbQV09YXRbVF09YXRbeF09YXRba109YXRbU109YXRbTV09YXRbTF09YXRbX109YXRbUF09YXRbRF09YXRbQl09YXRbWl09YXRbJF09ITAsYXRbd109YXRbYl09YXRbRV09ITE7dmFyIGl0PXtcIlxcXFxcIjpcIlxcXFxcIixcIidcIjpcIidcIixcIlxcblwiOlwiblwiLFwiXFxyXCI6XCJyXCIsXCJcXHUyMDI4XCI6XCJ1MjAyOFwiLFwiXFx1MjAyOVwiOlwidTIwMjlcIn0sbHQ9cGFyc2VGbG9hdCxzdD1wYXJzZUludCxjdD1cIm9iamVjdFwiPT10eXBlb2Ygbi5nJiZuLmcmJm4uZy5PYmplY3Q9PT1PYmplY3QmJm4uZyx1dD1cIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsZHQ9Y3R8fHV0fHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkscHQ9dCYmIXQubm9kZVR5cGUmJnQsZnQ9cHQmJmUmJiFlLm5vZGVUeXBlJiZlLGh0PWZ0JiZmdC5leHBvcnRzPT09cHQsZ3Q9aHQmJmN0LnByb2Nlc3MsdnQ9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGZ0JiZmdC5yZXF1aXJlJiZmdC5yZXF1aXJlKFwidXRpbFwiKS50eXBlc3x8Z3QmJmd0LmJpbmRpbmcmJmd0LmJpbmRpbmcoXCJ1dGlsXCIpfWNhdGNoKGUpe319KCksQ3Q9dnQmJnZ0LmlzQXJyYXlCdWZmZXIsbXQ9dnQmJnZ0LmlzRGF0ZSx3dD12dCYmdnQuaXNNYXAsYnQ9dnQmJnZ0LmlzUmVnRXhwLHl0PXZ0JiZ2dC5pc1NldCx4dD12dCYmdnQuaXNUeXBlZEFycmF5O2Z1bmN0aW9uIGt0KGUsdCxuKXtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gZS5jYWxsKHQpO2Nhc2UgMTpyZXR1cm4gZS5jYWxsKHQsblswXSk7Y2FzZSAyOnJldHVybiBlLmNhbGwodCxuWzBdLG5bMV0pO2Nhc2UgMzpyZXR1cm4gZS5jYWxsKHQsblswXSxuWzFdLG5bMl0pfXJldHVybiBlLmFwcGx5KHQsbil9ZnVuY3Rpb24gU3QoZSx0LG4scil7Zm9yKHZhciBvPS0xLGE9bnVsbD09ZT8wOmUubGVuZ3RoOysrbzxhOyl7dmFyIGk9ZVtvXTt0KHIsaSxuKGkpLGUpfXJldHVybiByfWZ1bmN0aW9uIE90KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoOysrbjxyJiYhMSE9PXQoZVtuXSxuLGUpOyk7cmV0dXJuIGV9ZnVuY3Rpb24gTXQoZSx0KXtmb3IodmFyIG49bnVsbD09ZT8wOmUubGVuZ3RoO24tLSYmITEhPT10KGVbbl0sbixlKTspO3JldHVybiBlfWZ1bmN0aW9uIEx0KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoOysrbjxyOylpZighdChlW25dLG4sZSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gX3QoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGgsbz0wLGE9W107KytuPHI7KXt2YXIgaT1lW25dO3QoaSxuLGUpJiYoYVtvKytdPWkpfXJldHVybiBhfWZ1bmN0aW9uIFB0KGUsdCl7cmV0dXJuIShudWxsPT1lfHwhZS5sZW5ndGgpJiZCdChlLHQsMCk+LTF9ZnVuY3Rpb24gRXQoZSx0LG4pe2Zvcih2YXIgcj0tMSxvPW51bGw9PWU/MDplLmxlbmd0aDsrK3I8bzspaWYobih0LGVbcl0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGp0KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoLG89QXJyYXkocik7KytuPHI7KW9bbl09dChlW25dLG4sZSk7cmV0dXJuIG99ZnVuY3Rpb24gUnQoZSx0KXtmb3IodmFyIG49LTEscj10Lmxlbmd0aCxvPWUubGVuZ3RoOysrbjxyOyllW28rbl09dFtuXTtyZXR1cm4gZX1mdW5jdGlvbiBJdChlLHQsbixyKXt2YXIgbz0tMSxhPW51bGw9PWU/MDplLmxlbmd0aDtmb3IociYmYSYmKG49ZVsrK29dKTsrK288YTspbj10KG4sZVtvXSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIFZ0KGUsdCxuLHIpe3ZhciBvPW51bGw9PWU/MDplLmxlbmd0aDtmb3IociYmbyYmKG49ZVstLW9dKTtvLS07KW49dChuLGVbb10sbyxlKTtyZXR1cm4gbn1mdW5jdGlvbiBIdChlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aDsrK248cjspaWYodChlW25dLG4sZSkpcmV0dXJuITA7cmV0dXJuITF9dmFyIEF0PUZ0KFwibGVuZ3RoXCIpO2Z1bmN0aW9uIFR0KGUsdCxuKXt2YXIgcjtyZXR1cm4gbihlLChmdW5jdGlvbihlLG4sbyl7aWYodChlLG4sbykpcmV0dXJuIHI9biwhMX0pKSxyfWZ1bmN0aW9uIER0KGUsdCxuLHIpe2Zvcih2YXIgbz1lLmxlbmd0aCxhPW4rKHI/MTotMSk7cj9hLS06KythPG87KWlmKHQoZVthXSxhLGUpKXJldHVybiBhO3JldHVybi0xfWZ1bmN0aW9uIEJ0KGUsdCxuKXtyZXR1cm4gdD09dD9mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW4tMSxvPWUubGVuZ3RoOysrcjxvOylpZihlW3JdPT09dClyZXR1cm4gcjtyZXR1cm4tMX0oZSx0LG4pOkR0KGUsJHQsbil9ZnVuY3Rpb24gWnQoZSx0LG4scil7Zm9yKHZhciBvPW4tMSxhPWUubGVuZ3RoOysrbzxhOylpZihyKGVbb10sdCkpcmV0dXJuIG87cmV0dXJuLTF9ZnVuY3Rpb24gJHQoZSl7cmV0dXJuIGUhPWV9ZnVuY3Rpb24gTnQoZSx0KXt2YXIgbj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIG4/enQoZSx0KS9uOnB9ZnVuY3Rpb24gRnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P286dFtlXX19ZnVuY3Rpb24gV3QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT1lP286ZVt0XX19ZnVuY3Rpb24gVXQoZSx0LG4scixvKXtyZXR1cm4gbyhlLChmdW5jdGlvbihlLG8sYSl7bj1yPyhyPSExLGUpOnQobixlLG8sYSl9KSksbn1mdW5jdGlvbiB6dChlLHQpe2Zvcih2YXIgbixyPS0xLGE9ZS5sZW5ndGg7KytyPGE7KXt2YXIgaT10KGVbcl0pO2khPT1vJiYobj1uPT09bz9pOm4raSl9cmV0dXJuIG59ZnVuY3Rpb24gR3QoZSx0KXtmb3IodmFyIG49LTEscj1BcnJheShlKTsrK248ZTspcltuXT10KG4pO3JldHVybiByfWZ1bmN0aW9uIEt0KGUpe3JldHVybiBlP2Uuc2xpY2UoMCxkbihlKSsxKS5yZXBsYWNlKHJlLFwiXCIpOmV9ZnVuY3Rpb24gcXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX1mdW5jdGlvbiBZdChlLHQpe3JldHVybiBqdCh0LChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKX1mdW5jdGlvbiBKdChlLHQpe3JldHVybiBlLmhhcyh0KX1mdW5jdGlvbiBYdChlLHQpe2Zvcih2YXIgbj0tMSxyPWUubGVuZ3RoOysrbjxyJiZCdCh0LGVbbl0sMCk+LTE7KTtyZXR1cm4gbn1mdW5jdGlvbiBRdChlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aDtuLS0mJkJ0KHQsZVtuXSwwKT4tMTspO3JldHVybiBufXZhciBlbj1XdCh7w4A6XCJBXCIsw4E6XCJBXCIsw4I6XCJBXCIsw4M6XCJBXCIsw4Q6XCJBXCIsw4U6XCJBXCIsw6A6XCJhXCIsw6E6XCJhXCIsw6I6XCJhXCIsw6M6XCJhXCIsw6Q6XCJhXCIsw6U6XCJhXCIsw4c6XCJDXCIsw6c6XCJjXCIsw5A6XCJEXCIsw7A6XCJkXCIsw4g6XCJFXCIsw4k6XCJFXCIsw4o6XCJFXCIsw4s6XCJFXCIsw6g6XCJlXCIsw6k6XCJlXCIsw6o6XCJlXCIsw6s6XCJlXCIsw4w6XCJJXCIsw406XCJJXCIsw446XCJJXCIsw486XCJJXCIsw6w6XCJpXCIsw606XCJpXCIsw646XCJpXCIsw686XCJpXCIsw5E6XCJOXCIsw7E6XCJuXCIsw5I6XCJPXCIsw5M6XCJPXCIsw5Q6XCJPXCIsw5U6XCJPXCIsw5Y6XCJPXCIsw5g6XCJPXCIsw7I6XCJvXCIsw7M6XCJvXCIsw7Q6XCJvXCIsw7U6XCJvXCIsw7Y6XCJvXCIsw7g6XCJvXCIsw5k6XCJVXCIsw5o6XCJVXCIsw5s6XCJVXCIsw5w6XCJVXCIsw7k6XCJ1XCIsw7o6XCJ1XCIsw7s6XCJ1XCIsw7w6XCJ1XCIsw506XCJZXCIsw706XCJ5XCIsw786XCJ5XCIsw4Y6XCJBZVwiLMOmOlwiYWVcIizDnjpcIlRoXCIsw746XCJ0aFwiLMOfOlwic3NcIizEgDpcIkFcIizEgjpcIkFcIizEhDpcIkFcIizEgTpcImFcIizEgzpcImFcIizEhTpcImFcIizEhjpcIkNcIizEiDpcIkNcIizEijpcIkNcIizEjDpcIkNcIizEhzpcImNcIizEiTpcImNcIizEizpcImNcIizEjTpcImNcIizEjjpcIkRcIizEkDpcIkRcIizEjzpcImRcIizEkTpcImRcIizEkjpcIkVcIizElDpcIkVcIizEljpcIkVcIizEmDpcIkVcIizEmjpcIkVcIizEkzpcImVcIizElTpcImVcIizElzpcImVcIizEmTpcImVcIizEmzpcImVcIizEnDpcIkdcIizEnjpcIkdcIizEoDpcIkdcIizEojpcIkdcIizEnTpcImdcIizEnzpcImdcIizEoTpcImdcIizEozpcImdcIizEpDpcIkhcIizEpjpcIkhcIizEpTpcImhcIizEpzpcImhcIizEqDpcIklcIizEqjpcIklcIizErDpcIklcIizErjpcIklcIizEsDpcIklcIizEqTpcImlcIizEqzpcImlcIizErTpcImlcIizErzpcImlcIizEsTpcImlcIizEtDpcIkpcIizEtTpcImpcIizEtjpcIktcIizEtzpcImtcIizEuDpcImtcIizEuTpcIkxcIizEuzpcIkxcIizEvTpcIkxcIizEvzpcIkxcIizFgTpcIkxcIizEujpcImxcIizEvDpcImxcIizEvjpcImxcIizFgDpcImxcIizFgjpcImxcIizFgzpcIk5cIizFhTpcIk5cIizFhzpcIk5cIizFijpcIk5cIizFhDpcIm5cIizFhjpcIm5cIizFiDpcIm5cIizFizpcIm5cIizFjDpcIk9cIizFjjpcIk9cIizFkDpcIk9cIizFjTpcIm9cIizFjzpcIm9cIizFkTpcIm9cIizFlDpcIlJcIizFljpcIlJcIizFmDpcIlJcIizFlTpcInJcIizFlzpcInJcIizFmTpcInJcIizFmjpcIlNcIizFnDpcIlNcIizFnjpcIlNcIizFoDpcIlNcIizFmzpcInNcIizFnTpcInNcIizFnzpcInNcIizFoTpcInNcIizFojpcIlRcIizFpDpcIlRcIizFpjpcIlRcIizFozpcInRcIizFpTpcInRcIizFpzpcInRcIizFqDpcIlVcIizFqjpcIlVcIizFrDpcIlVcIizFrjpcIlVcIizFsDpcIlVcIizFsjpcIlVcIizFqTpcInVcIizFqzpcInVcIizFrTpcInVcIizFrzpcInVcIizFsTpcInVcIizFszpcInVcIizFtDpcIldcIizFtTpcIndcIizFtjpcIllcIizFtzpcInlcIizFuDpcIllcIizFuTpcIlpcIizFuzpcIlpcIizFvTpcIlpcIizFujpcInpcIizFvDpcInpcIizFvjpcInpcIizEsjpcIklKXCIsxLM6XCJpalwiLMWSOlwiT2VcIizFkzpcIm9lXCIsxYk6XCInblwiLMW/Olwic1wifSksdG49V3Qoe1wiJlwiOlwiJmFtcDtcIixcIjxcIjpcIiZsdDtcIixcIj5cIjpcIiZndDtcIiwnXCInOlwiJnF1b3Q7XCIsXCInXCI6XCImIzM5O1wifSk7ZnVuY3Rpb24gbm4oZSl7cmV0dXJuXCJcXFxcXCIraXRbZV19ZnVuY3Rpb24gcm4oZSl7cmV0dXJuIGV0LnRlc3QoZSl9ZnVuY3Rpb24gb24oZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUscil7blsrK3RdPVtyLGVdfSkpLG59ZnVuY3Rpb24gYW4oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUodChuKSl9fWZ1bmN0aW9uIGxuKGUsdCl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGgsbz0wLGE9W107KytuPHI7KXt2YXIgaT1lW25dO2khPT10JiZpIT09bHx8KGVbbl09bCxhW28rK109bil9cmV0dXJuIGF9ZnVuY3Rpb24gc24oZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe25bKyt0XT1lfSkpLG59ZnVuY3Rpb24gY24oZSl7cmV0dXJuIHJuKGUpP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1YZS5sYXN0SW5kZXg9MDtYZS50ZXN0KGUpOykrK3Q7cmV0dXJuIHR9KGUpOkF0KGUpfWZ1bmN0aW9uIHVuKGUpe3JldHVybiBybihlKT9mdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaChYZSl8fFtdfShlKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdChcIlwiKX0oZSl9ZnVuY3Rpb24gZG4oZSl7Zm9yKHZhciB0PWUubGVuZ3RoO3QtLSYmb2UudGVzdChlLmNoYXJBdCh0KSk7KTtyZXR1cm4gdH12YXIgcG49V3Qoe1wiJmFtcDtcIjpcIiZcIixcIiZsdDtcIjpcIjxcIixcIiZndDtcIjpcIj5cIixcIiZxdW90O1wiOidcIicsXCImIzM5O1wiOlwiJ1wifSksZm49ZnVuY3Rpb24gZSh0KXt2YXIgbixyPSh0PW51bGw9PXQ/ZHQ6Zm4uZGVmYXVsdHMoZHQuT2JqZWN0KCksdCxmbi5waWNrKGR0LG50KSkpLkFycmF5LG9lPXQuRGF0ZSx5ZT10LkVycm9yLHhlPXQuRnVuY3Rpb24sa2U9dC5NYXRoLFNlPXQuT2JqZWN0LE9lPXQuUmVnRXhwLE1lPXQuU3RyaW5nLExlPXQuVHlwZUVycm9yLF9lPXIucHJvdG90eXBlLFBlPXhlLnByb3RvdHlwZSxFZT1TZS5wcm90b3R5cGUsamU9dFtcIl9fY29yZS1qc19zaGFyZWRfX1wiXSxSZT1QZS50b1N0cmluZyxJZT1FZS5oYXNPd25Qcm9wZXJ0eSxWZT0wLEhlPShuPS9bXi5dKyQvLmV4ZWMoamUmJmplLmtleXMmJmplLmtleXMuSUVfUFJPVE98fFwiXCIpKT9cIlN5bWJvbChzcmMpXzEuXCIrbjpcIlwiLEFlPUVlLnRvU3RyaW5nLFRlPVJlLmNhbGwoU2UpLERlPWR0Ll8sQmU9T2UoXCJeXCIrUmUuY2FsbChJZSkucmVwbGFjZSh0ZSxcIlxcXFwkJlwiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLFwiJDEuKj9cIikrXCIkXCIpLFplPWh0P3QuQnVmZmVyOm8sJGU9dC5TeW1ib2wsTmU9dC5VaW50OEFycmF5LEZlPVplP1plLmFsbG9jVW5zYWZlOm8sV2U9YW4oU2UuZ2V0UHJvdG90eXBlT2YsU2UpLFVlPVNlLmNyZWF0ZSx6ZT1FZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxHZT1fZS5zcGxpY2UsS2U9JGU/JGUuaXNDb25jYXRTcHJlYWRhYmxlOm8scWU9JGU/JGUuaXRlcmF0b3I6byxYZT0kZT8kZS50b1N0cmluZ1RhZzpvLGV0PWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPXNhKFNlLFwiZGVmaW5lUHJvcGVydHlcIik7cmV0dXJuIGUoe30sXCJcIix7fSksZX1jYXRjaChlKXt9fSgpLGl0PXQuY2xlYXJUaW1lb3V0IT09ZHQuY2xlYXJUaW1lb3V0JiZ0LmNsZWFyVGltZW91dCxjdD1vZSYmb2Uubm93IT09ZHQuRGF0ZS5ub3cmJm9lLm5vdyx1dD10LnNldFRpbWVvdXQhPT1kdC5zZXRUaW1lb3V0JiZ0LnNldFRpbWVvdXQscHQ9a2UuY2VpbCxmdD1rZS5mbG9vcixndD1TZS5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsdnQ9WmU/WmUuaXNCdWZmZXI6byxBdD10LmlzRmluaXRlLFd0PV9lLmpvaW4saG49YW4oU2Uua2V5cyxTZSksZ249a2UubWF4LHZuPWtlLm1pbixDbj1vZS5ub3csbW49dC5wYXJzZUludCx3bj1rZS5yYW5kb20sYm49X2UucmV2ZXJzZSx5bj1zYSh0LFwiRGF0YVZpZXdcIikseG49c2EodCxcIk1hcFwiKSxrbj1zYSh0LFwiUHJvbWlzZVwiKSxTbj1zYSh0LFwiU2V0XCIpLE9uPXNhKHQsXCJXZWFrTWFwXCIpLE1uPXNhKFNlLFwiY3JlYXRlXCIpLExuPU9uJiZuZXcgT24sX249e30sUG49QWEoeW4pLEVuPUFhKHhuKSxqbj1BYShrbiksUm49QWEoU24pLEluPUFhKE9uKSxWbj0kZT8kZS5wcm90b3R5cGU6byxIbj1Wbj9Wbi52YWx1ZU9mOm8sQW49Vm4/Vm4udG9TdHJpbmc6bztmdW5jdGlvbiBUbihlKXtpZihRaShlKSYmIU5pKGUpJiYhKGUgaW5zdGFuY2VvZiAkbikpe2lmKGUgaW5zdGFuY2VvZiBabilyZXR1cm4gZTtpZihJZS5jYWxsKGUsXCJfX3dyYXBwZWRfX1wiKSlyZXR1cm4gVGEoZSl9cmV0dXJuIG5ldyBabihlKX12YXIgRG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBmdW5jdGlvbih0KXtpZighWGkodCkpcmV0dXJue307aWYoVWUpcmV0dXJuIFVlKHQpO2UucHJvdG90eXBlPXQ7dmFyIG49bmV3IGU7cmV0dXJuIGUucHJvdG90eXBlPW8sbn19KCk7ZnVuY3Rpb24gQm4oKXt9ZnVuY3Rpb24gWm4oZSx0KXt0aGlzLl9fd3JhcHBlZF9fPWUsdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fY2hhaW5fXz0hIXQsdGhpcy5fX2luZGV4X189MCx0aGlzLl9fdmFsdWVzX189b31mdW5jdGlvbiAkbihlKXt0aGlzLl9fd3JhcHBlZF9fPWUsdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fZGlyX189MSx0aGlzLl9fZmlsdGVyZWRfXz0hMSx0aGlzLl9faXRlcmF0ZWVzX189W10sdGhpcy5fX3Rha2VDb3VudF9fPWYsdGhpcy5fX3ZpZXdzX189W119ZnVuY3Rpb24gTm4oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gRm4oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gV24oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gVW4oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IFduOysrdDxuOyl0aGlzLmFkZChlW3RdKX1mdW5jdGlvbiB6bihlKXt2YXIgdD10aGlzLl9fZGF0YV9fPW5ldyBGbihlKTt0aGlzLnNpemU9dC5zaXplfWZ1bmN0aW9uIEduKGUsdCl7dmFyIG49TmkoZSkscj0hbiYmJGkoZSksbz0hbiYmIXImJnppKGUpLGE9IW4mJiFyJiYhbyYmbGwoZSksaT1ufHxyfHxvfHxhLGw9aT9HdChlLmxlbmd0aCxNZSk6W10scz1sLmxlbmd0aDtmb3IodmFyIGMgaW4gZSkhdCYmIUllLmNhbGwoZSxjKXx8aSYmKFwibGVuZ3RoXCI9PWN8fG8mJihcIm9mZnNldFwiPT1jfHxcInBhcmVudFwiPT1jKXx8YSYmKFwiYnVmZmVyXCI9PWN8fFwiYnl0ZUxlbmd0aFwiPT1jfHxcImJ5dGVPZmZzZXRcIj09Yyl8fGdhKGMscykpfHxsLnB1c2goYyk7cmV0dXJuIGx9ZnVuY3Rpb24gS24oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIHQ/ZVtXcigwLHQtMSldOm99ZnVuY3Rpb24gcW4oZSx0KXtyZXR1cm4gamEoTW8oZSksb3IodCwwLGUubGVuZ3RoKSl9ZnVuY3Rpb24gWW4oZSl7cmV0dXJuIGphKE1vKGUpKX1mdW5jdGlvbiBKbihlLHQsbil7KG4hPT1vJiYhRGkoZVt0XSxuKXx8bj09PW8mJiEodCBpbiBlKSkmJm5yKGUsdCxuKX1mdW5jdGlvbiBYbihlLHQsbil7dmFyIHI9ZVt0XTtJZS5jYWxsKGUsdCkmJkRpKHIsbikmJihuIT09b3x8dCBpbiBlKXx8bnIoZSx0LG4pfWZ1bmN0aW9uIFFuKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoO24tLTspaWYoRGkoZVtuXVswXSx0KSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBlcihlLHQsbixyKXtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxvLGEpe3QocixlLG4oZSksYSl9KSkscn1mdW5jdGlvbiB0cihlLHQpe3JldHVybiBlJiZMbyh0LFBsKHQpLGUpfWZ1bmN0aW9uIG5yKGUsdCxuKXtcIl9fcHJvdG9fX1wiPT10JiZldD9ldChlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOm4sd3JpdGFibGU6ITB9KTplW3RdPW59ZnVuY3Rpb24gcnIoZSx0KXtmb3IodmFyIG49LTEsYT10Lmxlbmd0aCxpPXIoYSksbD1udWxsPT1lOysrbjxhOylpW25dPWw/bzpTbChlLHRbbl0pO3JldHVybiBpfWZ1bmN0aW9uIG9yKGUsdCxuKXtyZXR1cm4gZT09ZSYmKG4hPT1vJiYoZT1lPD1uP2U6biksdCE9PW8mJihlPWU+PXQ/ZTp0KSksZX1mdW5jdGlvbiBhcihlLHQsbixyLGEsaSl7dmFyIGwscz0xJnQsYz0yJnQsdT00JnQ7aWYobiYmKGw9YT9uKGUscixhLGkpOm4oZSkpLGwhPT1vKXJldHVybiBsO2lmKCFYaShlKSlyZXR1cm4gZTt2YXIgZD1OaShlKTtpZihkKXtpZihsPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49bmV3IGUuY29uc3RydWN0b3IodCk7cmV0dXJuIHQmJlwic3RyaW5nXCI9PXR5cGVvZiBlWzBdJiZJZS5jYWxsKGUsXCJpbmRleFwiKSYmKG4uaW5kZXg9ZS5pbmRleCxuLmlucHV0PWUuaW5wdXQpLG59KGUpLCFzKXJldHVybiBNbyhlLGwpfWVsc2V7dmFyIHA9ZGEoZSksZj1wPT1ifHxwPT15O2lmKHppKGUpKXJldHVybiBibyhlLHMpO2lmKHA9PVN8fHA9PWd8fGYmJiFhKXtpZihsPWN8fGY/e306ZmEoZSksIXMpcmV0dXJuIGM/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTG8oZSx1YShlKSx0KX0oZSxmdW5jdGlvbihlLHQpe3JldHVybiBlJiZMbyh0LEVsKHQpLGUpfShsLGUpKTpmdW5jdGlvbihlLHQpe3JldHVybiBMbyhlLGNhKGUpLHQpfShlLHRyKGwsZSkpfWVsc2V7aWYoIWF0W3BdKXJldHVybiBhP2U6e307bD1mdW5jdGlvbihlLHQsbil7dmFyIHIsbz1lLmNvbnN0cnVjdG9yO3N3aXRjaCh0KXtjYXNlIGo6cmV0dXJuIHlvKGUpO2Nhc2UgQzpjYXNlIG06cmV0dXJuIG5ldyBvKCtlKTtjYXNlIFI6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG49dD95byhlLmJ1ZmZlcik6ZS5idWZmZXI7cmV0dXJuIG5ldyBlLmNvbnN0cnVjdG9yKG4sZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCl9KGUsbik7Y2FzZSBJOmNhc2UgVjpjYXNlIEg6Y2FzZSBBOmNhc2UgVDpjYXNlIEQ6Y2FzZSBCOmNhc2UgWjpjYXNlICQ6cmV0dXJuIHhvKGUsbik7Y2FzZSB4OnJldHVybiBuZXcgbztjYXNlIGs6Y2FzZSBfOnJldHVybiBuZXcgbyhlKTtjYXNlIE06cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBlLmNvbnN0cnVjdG9yKGUuc291cmNlLHBlLmV4ZWMoZSkpO3JldHVybiB0Lmxhc3RJbmRleD1lLmxhc3RJbmRleCx0fShlKTtjYXNlIEw6cmV0dXJuIG5ldyBvO2Nhc2UgUDpyZXR1cm4gcj1lLEhuP1NlKEhuLmNhbGwocikpOnt9fX0oZSxwLHMpfX1pfHwoaT1uZXcgem4pO3ZhciBoPWkuZ2V0KGUpO2lmKGgpcmV0dXJuIGg7aS5zZXQoZSxsKSxvbChlKT9lLmZvckVhY2goKGZ1bmN0aW9uKHIpe2wuYWRkKGFyKHIsdCxuLHIsZSxpKSl9KSk6ZWwoZSkmJmUuZm9yRWFjaCgoZnVuY3Rpb24ocixvKXtsLnNldChvLGFyKHIsdCxuLG8sZSxpKSl9KSk7dmFyIHY9ZD9vOih1P2M/dGE6ZWE6Yz9FbDpQbCkoZSk7cmV0dXJuIE90KHZ8fGUsKGZ1bmN0aW9uKHIsbyl7diYmKHI9ZVtvPXJdKSxYbihsLG8sYXIocix0LG4sbyxlLGkpKX0pKSxsfWZ1bmN0aW9uIGlyKGUsdCxuKXt2YXIgcj1uLmxlbmd0aDtpZihudWxsPT1lKXJldHVybiFyO2ZvcihlPVNlKGUpO3ItLTspe3ZhciBhPW5bcl0saT10W2FdLGw9ZVthXTtpZihsPT09byYmIShhIGluIGUpfHwhaShsKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBscihlLHQsbil7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgTGUoYSk7cmV0dXJuIExhKChmdW5jdGlvbigpe2UuYXBwbHkobyxuKX0pLHQpfWZ1bmN0aW9uIHNyKGUsdCxuLHIpe3ZhciBvPS0xLGE9UHQsaT0hMCxsPWUubGVuZ3RoLHM9W10sYz10Lmxlbmd0aDtpZighbClyZXR1cm4gcztuJiYodD1qdCh0LHF0KG4pKSkscj8oYT1FdCxpPSExKTp0Lmxlbmd0aD49MjAwJiYoYT1KdCxpPSExLHQ9bmV3IFVuKHQpKTtlOmZvcig7KytvPGw7KXt2YXIgdT1lW29dLGQ9bnVsbD09bj91Om4odSk7aWYodT1yfHwwIT09dT91OjAsaSYmZD09ZCl7Zm9yKHZhciBwPWM7cC0tOylpZih0W3BdPT09ZCljb250aW51ZSBlO3MucHVzaCh1KX1lbHNlIGEodCxkLHIpfHxzLnB1c2godSl9cmV0dXJuIHN9VG4udGVtcGxhdGVTZXR0aW5ncz17ZXNjYXBlOnEsZXZhbHVhdGU6WSxpbnRlcnBvbGF0ZTpKLHZhcmlhYmxlOlwiXCIsaW1wb3J0czp7XzpUbn19LFRuLnByb3RvdHlwZT1Cbi5wcm90b3R5cGUsVG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPVRuLFpuLnByb3RvdHlwZT1EbihCbi5wcm90b3R5cGUpLFpuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1abiwkbi5wcm90b3R5cGU9RG4oQm4ucHJvdG90eXBlKSwkbi5wcm90b3R5cGUuY29uc3RydWN0b3I9JG4sTm4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1Nbj9NbihudWxsKTp7fSx0aGlzLnNpemU9MH0sTm4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV07cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH0sTm4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKE1uKXt2YXIgbj10W2VdO3JldHVybiBuPT09aT9vOm59cmV0dXJuIEllLmNhbGwodCxlKT90W2VdOm99LE5uLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gTW4/dFtlXSE9PW86SWUuY2FsbCh0LGUpfSxObi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhlKT8wOjEsbltlXT1NbiYmdD09PW8/aTp0LHRoaXN9LEZuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LEZuLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPVFuKHQsZSk7cmV0dXJuIShuPDB8fChuPT10Lmxlbmd0aC0xP3QucG9wKCk6R2UuY2FsbCh0LG4sMSksLS10aGlzLnNpemUsMCkpfSxGbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1Rbih0LGUpO3JldHVybiBuPDA/bzp0W25dWzFdfSxGbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBRbih0aGlzLl9fZGF0YV9fLGUpPi0xfSxGbi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXyxyPVFuKG4sZSk7cmV0dXJuIHI8MD8oKyt0aGlzLnNpemUsbi5wdXNoKFtlLHRdKSk6bltyXVsxXT10LHRoaXN9LFduLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IE5uLG1hcDpuZXcoeG58fEZuKSxzdHJpbmc6bmV3IE5ufX0sV24ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD1pYSh0aGlzLGUpLmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fSxXbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBpYSh0aGlzLGUpLmdldChlKX0sV24ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gaWEodGhpcyxlKS5oYXMoZSl9LFduLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1pYSh0aGlzLGUpLHI9bi5zaXplO3JldHVybiBuLnNldChlLHQpLHRoaXMuc2l6ZSs9bi5zaXplPT1yPzA6MSx0aGlzfSxVbi5wcm90b3R5cGUuYWRkPVVuLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLGkpLHRoaXN9LFVuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfSx6bi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPW5ldyBGbix0aGlzLnNpemU9MH0sem4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49dC5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZT10LnNpemUsbn0sem4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoZSl9LHpuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfSx6bi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXztpZihuIGluc3RhbmNlb2YgRm4pe3ZhciByPW4uX19kYXRhX187aWYoIXhufHxyLmxlbmd0aDwxOTkpcmV0dXJuIHIucHVzaChbZSx0XSksdGhpcy5zaXplPSsrbi5zaXplLHRoaXM7bj10aGlzLl9fZGF0YV9fPW5ldyBXbihyKX1yZXR1cm4gbi5zZXQoZSx0KSx0aGlzLnNpemU9bi5zaXplLHRoaXN9O3ZhciBjcj1FbyhDciksdXI9RW8obXIsITApO2Z1bmN0aW9uIGRyKGUsdCl7dmFyIG49ITA7cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUscixvKXtyZXR1cm4gbj0hIXQoZSxyLG8pfSkpLG59ZnVuY3Rpb24gcHIoZSx0LG4pe2Zvcih2YXIgcj0tMSxhPWUubGVuZ3RoOysrcjxhOyl7dmFyIGk9ZVtyXSxsPXQoaSk7aWYobnVsbCE9bCYmKHM9PT1vP2w9PWwmJiFpbChsKTpuKGwscykpKXZhciBzPWwsYz1pfXJldHVybiBjfWZ1bmN0aW9uIGZyKGUsdCl7dmFyIG49W107cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUscixvKXt0KGUscixvKSYmbi5wdXNoKGUpfSkpLG59ZnVuY3Rpb24gaHIoZSx0LG4scixvKXt2YXIgYT0tMSxpPWUubGVuZ3RoO2ZvcihufHwobj1oYSksb3x8KG89W10pOysrYTxpOyl7dmFyIGw9ZVthXTt0PjAmJm4obCk/dD4xP2hyKGwsdC0xLG4scixvKTpSdChvLGwpOnJ8fChvW28ubGVuZ3RoXT1sKX1yZXR1cm4gb312YXIgZ3I9am8oKSx2cj1qbyghMCk7ZnVuY3Rpb24gQ3IoZSx0KXtyZXR1cm4gZSYmZ3IoZSx0LFBsKX1mdW5jdGlvbiBtcihlLHQpe3JldHVybiBlJiZ2cihlLHQsUGwpfWZ1bmN0aW9uIHdyKGUsdCl7cmV0dXJuIF90KHQsKGZ1bmN0aW9uKHQpe3JldHVybiBxaShlW3RdKX0pKX1mdW5jdGlvbiBicihlLHQpe2Zvcih2YXIgbj0wLHI9KHQ9dm8odCxlKSkubGVuZ3RoO251bGwhPWUmJm48cjspZT1lW0hhKHRbbisrXSldO3JldHVybiBuJiZuPT1yP2U6b31mdW5jdGlvbiB5cihlLHQsbil7dmFyIHI9dChlKTtyZXR1cm4gTmkoZSk/cjpSdChyLG4oZSkpfWZ1bmN0aW9uIHhyKGUpe3JldHVybiBudWxsPT1lP2U9PT1vP1wiW29iamVjdCBVbmRlZmluZWRdXCI6XCJbb2JqZWN0IE51bGxdXCI6WGUmJlhlIGluIFNlKGUpP2Z1bmN0aW9uKGUpe3ZhciB0PUllLmNhbGwoZSxYZSksbj1lW1hlXTt0cnl7ZVtYZV09bzt2YXIgcj0hMH1jYXRjaChlKXt9dmFyIGE9QWUuY2FsbChlKTtyZXR1cm4gciYmKHQ/ZVtYZV09bjpkZWxldGUgZVtYZV0pLGF9KGUpOmZ1bmN0aW9uKGUpe3JldHVybiBBZS5jYWxsKGUpfShlKX1mdW5jdGlvbiBrcihlLHQpe3JldHVybiBlPnR9ZnVuY3Rpb24gU3IoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmSWUuY2FsbChlLHQpfWZ1bmN0aW9uIE9yKGUsdCl7cmV0dXJuIG51bGwhPWUmJnQgaW4gU2UoZSl9ZnVuY3Rpb24gTXIoZSx0LG4pe2Zvcih2YXIgYT1uP0V0OlB0LGk9ZVswXS5sZW5ndGgsbD1lLmxlbmd0aCxzPWwsYz1yKGwpLHU9MS8wLGQ9W107cy0tOyl7dmFyIHA9ZVtzXTtzJiZ0JiYocD1qdChwLHF0KHQpKSksdT12bihwLmxlbmd0aCx1KSxjW3NdPSFuJiYodHx8aT49MTIwJiZwLmxlbmd0aD49MTIwKT9uZXcgVW4ocyYmcCk6b31wPWVbMF07dmFyIGY9LTEsaD1jWzBdO2U6Zm9yKDsrK2Y8aSYmZC5sZW5ndGg8dTspe3ZhciBnPXBbZl0sdj10P3QoZyk6ZztpZihnPW58fDAhPT1nP2c6MCwhKGg/SnQoaCx2KTphKGQsdixuKSkpe2ZvcihzPWw7LS1zOyl7dmFyIEM9Y1tzXTtpZighKEM/SnQoQyx2KTphKGVbc10sdixuKSkpY29udGludWUgZX1oJiZoLnB1c2godiksZC5wdXNoKGcpfX1yZXR1cm4gZH1mdW5jdGlvbiBMcihlLHQsbil7dmFyIHI9bnVsbD09KGU9U2EoZSx0PXZvKHQsZSkpKT9lOmVbSGEoS2EodCkpXTtyZXR1cm4gbnVsbD09cj9vOmt0KHIsZSxuKX1mdW5jdGlvbiBfcihlKXtyZXR1cm4gUWkoZSkmJnhyKGUpPT1nfWZ1bmN0aW9uIFByKGUsdCxuLHIsYSl7cmV0dXJuIGU9PT10fHwobnVsbD09ZXx8bnVsbD09dHx8IVFpKGUpJiYhUWkodCk/ZSE9ZSYmdCE9dDpmdW5jdGlvbihlLHQsbixyLGEsaSl7dmFyIGw9TmkoZSkscz1OaSh0KSxjPWw/djpkYShlKSx1PXM/djpkYSh0KSxkPShjPWM9PWc/UzpjKT09UyxwPSh1PXU9PWc/Uzp1KT09UyxmPWM9PXU7aWYoZiYmemkoZSkpe2lmKCF6aSh0KSlyZXR1cm4hMTtsPSEwLGQ9ITF9aWYoZiYmIWQpcmV0dXJuIGl8fChpPW5ldyB6biksbHx8bGwoZSk/WG8oZSx0LG4scixhLGkpOmZ1bmN0aW9uKGUsdCxuLHIsbyxhLGkpe3N3aXRjaChuKXtjYXNlIFI6aWYoZS5ieXRlTGVuZ3RoIT10LmJ5dGVMZW5ndGh8fGUuYnl0ZU9mZnNldCE9dC5ieXRlT2Zmc2V0KXJldHVybiExO2U9ZS5idWZmZXIsdD10LmJ1ZmZlcjtjYXNlIGo6cmV0dXJuIShlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IWEobmV3IE5lKGUpLG5ldyBOZSh0KSkpO2Nhc2UgQzpjYXNlIG06Y2FzZSBrOnJldHVybiBEaSgrZSwrdCk7Y2FzZSB3OnJldHVybiBlLm5hbWU9PXQubmFtZSYmZS5tZXNzYWdlPT10Lm1lc3NhZ2U7Y2FzZSBNOmNhc2UgXzpyZXR1cm4gZT09dCtcIlwiO2Nhc2UgeDp2YXIgbD1vbjtjYXNlIEw6dmFyIHM9MSZyO2lmKGx8fChsPXNuKSxlLnNpemUhPXQuc2l6ZSYmIXMpcmV0dXJuITE7dmFyIGM9aS5nZXQoZSk7aWYoYylyZXR1cm4gYz09dDtyfD0yLGkuc2V0KGUsdCk7dmFyIHU9WG8obChlKSxsKHQpLHIsbyxhLGkpO3JldHVybiBpLmRlbGV0ZShlKSx1O2Nhc2UgUDppZihIbilyZXR1cm4gSG4uY2FsbChlKT09SG4uY2FsbCh0KX1yZXR1cm4hMX0oZSx0LGMsbixyLGEsaSk7aWYoISgxJm4pKXt2YXIgaD1kJiZJZS5jYWxsKGUsXCJfX3dyYXBwZWRfX1wiKSxiPXAmJkllLmNhbGwodCxcIl9fd3JhcHBlZF9fXCIpO2lmKGh8fGIpe3ZhciB5PWg/ZS52YWx1ZSgpOmUsTz1iP3QudmFsdWUoKTp0O3JldHVybiBpfHwoaT1uZXcgem4pLGEoeSxPLG4scixpKX19cmV0dXJuISFmJiYoaXx8KGk9bmV3IHpuKSxmdW5jdGlvbihlLHQsbixyLGEsaSl7dmFyIGw9MSZuLHM9ZWEoZSksYz1zLmxlbmd0aDtpZihjIT1lYSh0KS5sZW5ndGgmJiFsKXJldHVybiExO2Zvcih2YXIgdT1jO3UtLTspe3ZhciBkPXNbdV07aWYoIShsP2QgaW4gdDpJZS5jYWxsKHQsZCkpKXJldHVybiExfXZhciBwPWkuZ2V0KGUpLGY9aS5nZXQodCk7aWYocCYmZilyZXR1cm4gcD09dCYmZj09ZTt2YXIgaD0hMDtpLnNldChlLHQpLGkuc2V0KHQsZSk7Zm9yKHZhciBnPWw7Kyt1PGM7KXt2YXIgdj1lW2Q9c1t1XV0sQz10W2RdO2lmKHIpdmFyIG09bD9yKEMsdixkLHQsZSxpKTpyKHYsQyxkLGUsdCxpKTtpZighKG09PT1vP3Y9PT1DfHxhKHYsQyxuLHIsaSk6bSkpe2g9ITE7YnJlYWt9Z3x8KGc9XCJjb25zdHJ1Y3RvclwiPT1kKX1pZihoJiYhZyl7dmFyIHc9ZS5jb25zdHJ1Y3RvcixiPXQuY29uc3RydWN0b3I7dz09Ynx8IShcImNvbnN0cnVjdG9yXCJpbiBlKXx8IShcImNvbnN0cnVjdG9yXCJpbiB0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgdyYmdyBpbnN0YW5jZW9mIHcmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGImJmIgaW5zdGFuY2VvZiBifHwoaD0hMSl9cmV0dXJuIGkuZGVsZXRlKGUpLGkuZGVsZXRlKHQpLGh9KGUsdCxuLHIsYSxpKSl9KGUsdCxuLHIsUHIsYSkpfWZ1bmN0aW9uIEVyKGUsdCxuLHIpe3ZhciBhPW4ubGVuZ3RoLGk9YSxsPSFyO2lmKG51bGw9PWUpcmV0dXJuIWk7Zm9yKGU9U2UoZSk7YS0tOyl7dmFyIHM9blthXTtpZihsJiZzWzJdP3NbMV0hPT1lW3NbMF1dOiEoc1swXWluIGUpKXJldHVybiExfWZvcig7KythPGk7KXt2YXIgYz0ocz1uW2FdKVswXSx1PWVbY10sZD1zWzFdO2lmKGwmJnNbMl0pe2lmKHU9PT1vJiYhKGMgaW4gZSkpcmV0dXJuITF9ZWxzZXt2YXIgcD1uZXcgem47aWYocil2YXIgZj1yKHUsZCxjLGUsdCxwKTtpZighKGY9PT1vP1ByKGQsdSwzLHIscCk6ZikpcmV0dXJuITF9fXJldHVybiEwfWZ1bmN0aW9uIGpyKGUpe3JldHVybiEoIVhpKGUpfHwodD1lLEhlJiZIZSBpbiB0KSkmJihxaShlKT9CZTpnZSkudGVzdChBYShlKSk7dmFyIHR9ZnVuY3Rpb24gUnIoZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOm51bGw9PWU/dHM6XCJvYmplY3RcIj09dHlwZW9mIGU/TmkoZSk/VHIoZVswXSxlWzFdKTpBcihlKTp1cyhlKX1mdW5jdGlvbiBJcihlKXtpZighYmEoZSkpcmV0dXJuIGhuKGUpO3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBTZShlKSlJZS5jYWxsKGUsbikmJlwiY29uc3RydWN0b3JcIiE9biYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIFZyKGUsdCl7cmV0dXJuIGU8dH1mdW5jdGlvbiBIcihlLHQpe3ZhciBuPS0xLG89V2koZSk/cihlLmxlbmd0aCk6W107cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUscixhKXtvWysrbl09dChlLHIsYSl9KSksb31mdW5jdGlvbiBBcihlKXt2YXIgdD1sYShlKTtyZXR1cm4gMT09dC5sZW5ndGgmJnRbMF1bMl0/eGEodFswXVswXSx0WzBdWzFdKTpmdW5jdGlvbihuKXtyZXR1cm4gbj09PWV8fEVyKG4sZSx0KX19ZnVuY3Rpb24gVHIoZSx0KXtyZXR1cm4gQ2EoZSkmJnlhKHQpP3hhKEhhKGUpLHQpOmZ1bmN0aW9uKG4pe3ZhciByPVNsKG4sZSk7cmV0dXJuIHI9PT1vJiZyPT09dD9PbChuLGUpOlByKHQsciwzKX19ZnVuY3Rpb24gRHIoZSx0LG4scixhKXtlIT09dCYmZ3IodCwoZnVuY3Rpb24oaSxsKXtpZihhfHwoYT1uZXcgem4pLFhpKGkpKSFmdW5jdGlvbihlLHQsbixyLGEsaSxsKXt2YXIgcz1PYShlLG4pLGM9T2EodCxuKSx1PWwuZ2V0KGMpO2lmKHUpSm4oZSxuLHUpO2Vsc2V7dmFyIGQ9aT9pKHMsYyxuK1wiXCIsZSx0LGwpOm8scD1kPT09bztpZihwKXt2YXIgZj1OaShjKSxoPSFmJiZ6aShjKSxnPSFmJiYhaCYmbGwoYyk7ZD1jLGZ8fGh8fGc/Tmkocyk/ZD1zOlVpKHMpP2Q9TW8ocyk6aD8ocD0hMSxkPWJvKGMsITApKTpnPyhwPSExLGQ9eG8oYywhMCkpOmQ9W106bmwoYyl8fCRpKGMpPyhkPXMsJGkocyk/ZD1nbChzKTpYaShzKSYmIXFpKHMpfHwoZD1mYShjKSkpOnA9ITF9cCYmKGwuc2V0KGMsZCksYShkLGMscixpLGwpLGwuZGVsZXRlKGMpKSxKbihlLG4sZCl9fShlLHQsbCxuLERyLHIsYSk7ZWxzZXt2YXIgcz1yP3IoT2EoZSxsKSxpLGwrXCJcIixlLHQsYSk6bztzPT09byYmKHM9aSksSm4oZSxsLHMpfX0pLEVsKX1mdW5jdGlvbiBCcihlLHQpe3ZhciBuPWUubGVuZ3RoO2lmKG4pcmV0dXJuIGdhKHQrPXQ8MD9uOjAsbik/ZVt0XTpvfWZ1bmN0aW9uIFpyKGUsdCxuKXt0PXQubGVuZ3RoP2p0KHQsKGZ1bmN0aW9uKGUpe3JldHVybiBOaShlKT9mdW5jdGlvbih0KXtyZXR1cm4gYnIodCwxPT09ZS5sZW5ndGg/ZVswXTplKX06ZX0pKTpbdHNdO3ZhciByPS0xO3Q9anQodCxxdChhYSgpKSk7dmFyIG89SHIoZSwoZnVuY3Rpb24oZSxuLG8pe3ZhciBhPWp0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiB0KGUpfSkpO3JldHVybntjcml0ZXJpYTphLGluZGV4Oisrcix2YWx1ZTplfX0pKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmxlbmd0aDtmb3IoZS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPS0xLG89ZS5jcml0ZXJpYSxhPXQuY3JpdGVyaWEsaT1vLmxlbmd0aCxsPW4ubGVuZ3RoOysrcjxpOyl7dmFyIHM9a28ob1tyXSxhW3JdKTtpZihzKXJldHVybiByPj1sP3M6cyooXCJkZXNjXCI9PW5bcl0/LTE6MSl9cmV0dXJuIGUuaW5kZXgtdC5pbmRleH0oZSx0LG4pfSkpO3ItLTspZVtyXT1lW3JdLnZhbHVlO3JldHVybiBlfShvKX1mdW5jdGlvbiAkcihlLHQsbil7Zm9yKHZhciByPS0xLG89dC5sZW5ndGgsYT17fTsrK3I8bzspe3ZhciBpPXRbcl0sbD1icihlLGkpO24obCxpKSYmcXIoYSx2byhpLGUpLGwpfXJldHVybiBhfWZ1bmN0aW9uIE5yKGUsdCxuLHIpe3ZhciBvPXI/WnQ6QnQsYT0tMSxpPXQubGVuZ3RoLGw9ZTtmb3IoZT09PXQmJih0PU1vKHQpKSxuJiYobD1qdChlLHF0KG4pKSk7KythPGk7KWZvcih2YXIgcz0wLGM9dFthXSx1PW4/bihjKTpjOyhzPW8obCx1LHMscikpPi0xOylsIT09ZSYmR2UuY2FsbChsLHMsMSksR2UuY2FsbChlLHMsMSk7cmV0dXJuIGV9ZnVuY3Rpb24gRnIoZSx0KXtmb3IodmFyIG49ZT90Lmxlbmd0aDowLHI9bi0xO24tLTspe3ZhciBvPXRbbl07aWYobj09cnx8byE9PWEpe3ZhciBhPW87Z2Eobyk/R2UuY2FsbChlLG8sMSk6bG8oZSxvKX19cmV0dXJuIGV9ZnVuY3Rpb24gV3IoZSx0KXtyZXR1cm4gZStmdCh3bigpKih0LWUrMSkpfWZ1bmN0aW9uIFVyKGUsdCl7dmFyIG49XCJcIjtpZighZXx8dDwxfHx0PmQpcmV0dXJuIG47ZG97dCUyJiYobis9ZSksKHQ9ZnQodC8yKSkmJihlKz1lKX13aGlsZSh0KTtyZXR1cm4gbn1mdW5jdGlvbiB6cihlLHQpe3JldHVybiBfYShrYShlLHQsdHMpLGUrXCJcIil9ZnVuY3Rpb24gR3IoZSl7cmV0dXJuIEtuKERsKGUpKX1mdW5jdGlvbiBLcihlLHQpe3ZhciBuPURsKGUpO3JldHVybiBqYShuLG9yKHQsMCxuLmxlbmd0aCkpfWZ1bmN0aW9uIHFyKGUsdCxuLHIpe2lmKCFYaShlKSlyZXR1cm4gZTtmb3IodmFyIGE9LTEsaT0odD12byh0LGUpKS5sZW5ndGgsbD1pLTEscz1lO251bGwhPXMmJisrYTxpOyl7dmFyIGM9SGEodFthXSksdT1uO2lmKFwiX19wcm90b19fXCI9PT1jfHxcImNvbnN0cnVjdG9yXCI9PT1jfHxcInByb3RvdHlwZVwiPT09YylyZXR1cm4gZTtpZihhIT1sKXt2YXIgZD1zW2NdOyh1PXI/cihkLGMscyk6byk9PT1vJiYodT1YaShkKT9kOmdhKHRbYSsxXSk/W106e30pfVhuKHMsYyx1KSxzPXNbY119cmV0dXJuIGV9dmFyIFlyPUxuP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIExuLnNldChlLHQpLGV9OnRzLEpyPWV0P2Z1bmN0aW9uKGUsdCl7cmV0dXJuIGV0KGUsXCJ0b1N0cmluZ1wiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpYbCh0KSx3cml0YWJsZTohMH0pfTp0cztmdW5jdGlvbiBYcihlKXtyZXR1cm4gamEoRGwoZSkpfWZ1bmN0aW9uIFFyKGUsdCxuKXt2YXIgbz0tMSxhPWUubGVuZ3RoO3Q8MCYmKHQ9LXQ+YT8wOmErdCksKG49bj5hP2E6bik8MCYmKG4rPWEpLGE9dD5uPzA6bi10Pj4+MCx0Pj4+PTA7Zm9yKHZhciBpPXIoYSk7KytvPGE7KWlbb109ZVtvK3RdO3JldHVybiBpfWZ1bmN0aW9uIGVvKGUsdCl7dmFyIG47cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUscixvKXtyZXR1cm4hKG49dChlLHIsbykpfSkpLCEhbn1mdW5jdGlvbiB0byhlLHQsbil7dmFyIHI9MCxvPW51bGw9PWU/cjplLmxlbmd0aDtpZihcIm51bWJlclwiPT10eXBlb2YgdCYmdD09dCYmbzw9MjE0NzQ4MzY0Nyl7Zm9yKDtyPG87KXt2YXIgYT1yK28+Pj4xLGk9ZVthXTtudWxsIT09aSYmIWlsKGkpJiYobj9pPD10Omk8dCk/cj1hKzE6bz1hfXJldHVybiBvfXJldHVybiBubyhlLHQsdHMsbil9ZnVuY3Rpb24gbm8oZSx0LG4scil7dmFyIGE9MCxpPW51bGw9PWU/MDplLmxlbmd0aDtpZigwPT09aSlyZXR1cm4gMDtmb3IodmFyIGw9KHQ9bih0KSkhPXQscz1udWxsPT09dCxjPWlsKHQpLHU9dD09PW87YTxpOyl7dmFyIGQ9ZnQoKGEraSkvMikscD1uKGVbZF0pLGY9cCE9PW8saD1udWxsPT09cCxnPXA9PXAsdj1pbChwKTtpZihsKXZhciBDPXJ8fGc7ZWxzZSBDPXU/ZyYmKHJ8fGYpOnM/ZyYmZiYmKHJ8fCFoKTpjP2cmJmYmJiFoJiYocnx8IXYpOiFoJiYhdiYmKHI/cDw9dDpwPHQpO0M/YT1kKzE6aT1kfXJldHVybiB2bihpLDQyOTQ5NjcyOTQpfWZ1bmN0aW9uIHJvKGUsdCl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGgsbz0wLGE9W107KytuPHI7KXt2YXIgaT1lW25dLGw9dD90KGkpOmk7aWYoIW58fCFEaShsLHMpKXt2YXIgcz1sO2FbbysrXT0wPT09aT8wOml9fXJldHVybiBhfWZ1bmN0aW9uIG9vKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlP2U6aWwoZSk/cDorZX1mdW5jdGlvbiBhbyhlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gZTtpZihOaShlKSlyZXR1cm4ganQoZSxhbykrXCJcIjtpZihpbChlKSlyZXR1cm4gQW4/QW4uY2FsbChlKTpcIlwiO3ZhciB0PWUrXCJcIjtyZXR1cm5cIjBcIj09dCYmMS9lPT0tMS8wP1wiLTBcIjp0fWZ1bmN0aW9uIGlvKGUsdCxuKXt2YXIgcj0tMSxvPVB0LGE9ZS5sZW5ndGgsaT0hMCxsPVtdLHM9bDtpZihuKWk9ITEsbz1FdDtlbHNlIGlmKGE+PTIwMCl7dmFyIGM9dD9udWxsOnpvKGUpO2lmKGMpcmV0dXJuIHNuKGMpO2k9ITEsbz1KdCxzPW5ldyBVbn1lbHNlIHM9dD9bXTpsO2U6Zm9yKDsrK3I8YTspe3ZhciB1PWVbcl0sZD10P3QodSk6dTtpZih1PW58fDAhPT11P3U6MCxpJiZkPT1kKXtmb3IodmFyIHA9cy5sZW5ndGg7cC0tOylpZihzW3BdPT09ZCljb250aW51ZSBlO3QmJnMucHVzaChkKSxsLnB1c2godSl9ZWxzZSBvKHMsZCxuKXx8KHMhPT1sJiZzLnB1c2goZCksbC5wdXNoKHUpKX1yZXR1cm4gbH1mdW5jdGlvbiBsbyhlLHQpe3JldHVybiBudWxsPT0oZT1TYShlLHQ9dm8odCxlKSkpfHxkZWxldGUgZVtIYShLYSh0KSldfWZ1bmN0aW9uIHNvKGUsdCxuLHIpe3JldHVybiBxcihlLHQsbihicihlLHQpKSxyKX1mdW5jdGlvbiBjbyhlLHQsbixyKXtmb3IodmFyIG89ZS5sZW5ndGgsYT1yP286LTE7KHI/YS0tOisrYTxvKSYmdChlW2FdLGEsZSk7KTtyZXR1cm4gbj9RcihlLHI/MDphLHI/YSsxOm8pOlFyKGUscj9hKzE6MCxyP286YSl9ZnVuY3Rpb24gdW8oZSx0KXt2YXIgbj1lO3JldHVybiBuIGluc3RhbmNlb2YgJG4mJihuPW4udmFsdWUoKSksSXQodCwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5mdW5jLmFwcGx5KHQudGhpc0FyZyxSdChbZV0sdC5hcmdzKSl9KSxuKX1mdW5jdGlvbiBwbyhlLHQsbil7dmFyIG89ZS5sZW5ndGg7aWYobzwyKXJldHVybiBvP2lvKGVbMF0pOltdO2Zvcih2YXIgYT0tMSxpPXIobyk7KythPG87KWZvcih2YXIgbD1lW2FdLHM9LTE7KytzPG87KXMhPWEmJihpW2FdPXNyKGlbYV18fGwsZVtzXSx0LG4pKTtyZXR1cm4gaW8oaHIoaSwxKSx0LG4pfWZ1bmN0aW9uIGZvKGUsdCxuKXtmb3IodmFyIHI9LTEsYT1lLmxlbmd0aCxpPXQubGVuZ3RoLGw9e307KytyPGE7KXt2YXIgcz1yPGk/dFtyXTpvO24obCxlW3JdLHMpfXJldHVybiBsfWZ1bmN0aW9uIGhvKGUpe3JldHVybiBVaShlKT9lOltdfWZ1bmN0aW9uIGdvKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTp0c31mdW5jdGlvbiB2byhlLHQpe3JldHVybiBOaShlKT9lOkNhKGUsdCk/W2VdOlZhKHZsKGUpKX12YXIgQ289enI7ZnVuY3Rpb24gbW8oZSx0LG4pe3ZhciByPWUubGVuZ3RoO3JldHVybiBuPW49PT1vP3I6biwhdCYmbj49cj9lOlFyKGUsdCxuKX12YXIgd289aXR8fGZ1bmN0aW9uKGUpe3JldHVybiBkdC5jbGVhclRpbWVvdXQoZSl9O2Z1bmN0aW9uIGJvKGUsdCl7aWYodClyZXR1cm4gZS5zbGljZSgpO3ZhciBuPWUubGVuZ3RoLHI9RmU/RmUobik6bmV3IGUuY29uc3RydWN0b3Iobik7cmV0dXJuIGUuY29weShyKSxyfWZ1bmN0aW9uIHlvKGUpe3ZhciB0PW5ldyBlLmNvbnN0cnVjdG9yKGUuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBOZSh0KS5zZXQobmV3IE5lKGUpKSx0fWZ1bmN0aW9uIHhvKGUsdCl7dmFyIG49dD95byhlLmJ1ZmZlcik6ZS5idWZmZXI7cmV0dXJuIG5ldyBlLmNvbnN0cnVjdG9yKG4sZS5ieXRlT2Zmc2V0LGUubGVuZ3RoKX1mdW5jdGlvbiBrbyhlLHQpe2lmKGUhPT10KXt2YXIgbj1lIT09byxyPW51bGw9PT1lLGE9ZT09ZSxpPWlsKGUpLGw9dCE9PW8scz1udWxsPT09dCxjPXQ9PXQsdT1pbCh0KTtpZighcyYmIXUmJiFpJiZlPnR8fGkmJmwmJmMmJiFzJiYhdXx8ciYmbCYmY3x8IW4mJmN8fCFhKXJldHVybiAxO2lmKCFyJiYhaSYmIXUmJmU8dHx8dSYmbiYmYSYmIXImJiFpfHxzJiZuJiZhfHwhbCYmYXx8IWMpcmV0dXJuLTF9cmV0dXJuIDB9ZnVuY3Rpb24gU28oZSx0LG4sbyl7Zm9yKHZhciBhPS0xLGk9ZS5sZW5ndGgsbD1uLmxlbmd0aCxzPS0xLGM9dC5sZW5ndGgsdT1nbihpLWwsMCksZD1yKGMrdSkscD0hbzsrK3M8YzspZFtzXT10W3NdO2Zvcig7KythPGw7KShwfHxhPGkpJiYoZFtuW2FdXT1lW2FdKTtmb3IoO3UtLTspZFtzKytdPWVbYSsrXTtyZXR1cm4gZH1mdW5jdGlvbiBPbyhlLHQsbixvKXtmb3IodmFyIGE9LTEsaT1lLmxlbmd0aCxsPS0xLHM9bi5sZW5ndGgsYz0tMSx1PXQubGVuZ3RoLGQ9Z24oaS1zLDApLHA9cihkK3UpLGY9IW87KythPGQ7KXBbYV09ZVthXTtmb3IodmFyIGg9YTsrK2M8dTspcFtoK2NdPXRbY107Zm9yKDsrK2w8czspKGZ8fGE8aSkmJihwW2grbltsXV09ZVthKytdKTtyZXR1cm4gcH1mdW5jdGlvbiBNbyhlLHQpe3ZhciBuPS0xLG89ZS5sZW5ndGg7Zm9yKHR8fCh0PXIobykpOysrbjxvOyl0W25dPWVbbl07cmV0dXJuIHR9ZnVuY3Rpb24gTG8oZSx0LG4scil7dmFyIGE9IW47bnx8KG49e30pO2Zvcih2YXIgaT0tMSxsPXQubGVuZ3RoOysraTxsOyl7dmFyIHM9dFtpXSxjPXI/cihuW3NdLGVbc10scyxuLGUpOm87Yz09PW8mJihjPWVbc10pLGE/bnIobixzLGMpOlhuKG4scyxjKX1yZXR1cm4gbn1mdW5jdGlvbiBfbyhlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBvPU5pKG4pP1N0OmVyLGE9dD90KCk6e307cmV0dXJuIG8obixlLGFhKHIsMiksYSl9fWZ1bmN0aW9uIFBvKGUpe3JldHVybiB6cigoZnVuY3Rpb24odCxuKXt2YXIgcj0tMSxhPW4ubGVuZ3RoLGk9YT4xP25bYS0xXTpvLGw9YT4yP25bMl06bztmb3IoaT1lLmxlbmd0aD4zJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBpPyhhLS0saSk6byxsJiZ2YShuWzBdLG5bMV0sbCkmJihpPWE8Mz9vOmksYT0xKSx0PVNlKHQpOysrcjxhOyl7dmFyIHM9bltyXTtzJiZlKHQscyxyLGkpfXJldHVybiB0fSkpfWZ1bmN0aW9uIEVvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7aWYobnVsbD09bilyZXR1cm4gbjtpZighV2kobikpcmV0dXJuIGUobixyKTtmb3IodmFyIG89bi5sZW5ndGgsYT10P286LTEsaT1TZShuKTsodD9hLS06KythPG8pJiYhMSE9PXIoaVthXSxhLGkpOyk7cmV0dXJuIG59fWZ1bmN0aW9uIGpvKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7Zm9yKHZhciBvPS0xLGE9U2UodCksaT1yKHQpLGw9aS5sZW5ndGg7bC0tOyl7dmFyIHM9aVtlP2w6KytvXTtpZighMT09PW4oYVtzXSxzLGEpKWJyZWFrfXJldHVybiB0fX1mdW5jdGlvbiBSbyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49cm4odD12bCh0KSk/dW4odCk6byxyPW4/blswXTp0LmNoYXJBdCgwKSxhPW4/bW8obiwxKS5qb2luKFwiXCIpOnQuc2xpY2UoMSk7cmV0dXJuIHJbZV0oKSthfX1mdW5jdGlvbiBJbyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEl0KHFsKCRsKHQpLnJlcGxhY2UoWWUsXCJcIikpLGUsXCJcIil9fWZ1bmN0aW9uIFZvKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cztzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IGU7Y2FzZSAxOnJldHVybiBuZXcgZSh0WzBdKTtjYXNlIDI6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSk7Y2FzZSA0OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdKTtjYXNlIDU6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSk7Y2FzZSA2OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSk7Y2FzZSA3OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSx0WzZdKX12YXIgbj1EbihlLnByb3RvdHlwZSkscj1lLmFwcGx5KG4sdCk7cmV0dXJuIFhpKHIpP3I6bn19ZnVuY3Rpb24gSG8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXt2YXIgYT1TZSh0KTtpZighV2kodCkpe3ZhciBpPWFhKG4sMyk7dD1QbCh0KSxuPWZ1bmN0aW9uKGUpe3JldHVybiBpKGFbZV0sZSxhKX19dmFyIGw9ZSh0LG4scik7cmV0dXJuIGw+LTE/YVtpP3RbbF06bF06b319ZnVuY3Rpb24gQW8oZSl7cmV0dXJuIFFvKChmdW5jdGlvbih0KXt2YXIgbj10Lmxlbmd0aCxyPW4saT1abi5wcm90b3R5cGUudGhydTtmb3IoZSYmdC5yZXZlcnNlKCk7ci0tOyl7dmFyIGw9dFtyXTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBsKXRocm93IG5ldyBMZShhKTtpZihpJiYhcyYmXCJ3cmFwcGVyXCI9PXJhKGwpKXZhciBzPW5ldyBabihbXSwhMCl9Zm9yKHI9cz9yOm47KytyPG47KXt2YXIgYz1yYShsPXRbcl0pLHU9XCJ3cmFwcGVyXCI9PWM/bmEobCk6bztzPXUmJm1hKHVbMF0pJiY0MjQ9PXVbMV0mJiF1WzRdLmxlbmd0aCYmMT09dVs5XT9zW3JhKHVbMF0pXS5hcHBseShzLHVbM10pOjE9PWwubGVuZ3RoJiZtYShsKT9zW2NdKCk6cy50aHJ1KGwpfXJldHVybiBmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cyxyPWVbMF07aWYocyYmMT09ZS5sZW5ndGgmJk5pKHIpKXJldHVybiBzLnBsYW50KHIpLnZhbHVlKCk7Zm9yKHZhciBvPTAsYT1uP3Rbb10uYXBwbHkodGhpcyxlKTpyOysrbzxuOylhPXRbb10uY2FsbCh0aGlzLGEpO3JldHVybiBhfX0pKX1mdW5jdGlvbiBUbyhlLHQsbixhLGksbCxzLHUsZCxwKXt2YXIgZj10JmMsaD0xJnQsZz0yJnQsdj0yNCZ0LEM9NTEyJnQsbT1nP286Vm8oZSk7cmV0dXJuIGZ1bmN0aW9uIGMoKXtmb3IodmFyIHc9YXJndW1lbnRzLmxlbmd0aCxiPXIodykseT13O3ktLTspYlt5XT1hcmd1bWVudHNbeV07aWYodil2YXIgeD1vYShjKSxrPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9MDtuLS07KWVbbl09PT10JiYrK3I7cmV0dXJuIHJ9KGIseCk7aWYoYSYmKGI9U28oYixhLGksdikpLGwmJihiPU9vKGIsbCxzLHYpKSx3LT1rLHYmJnc8cCl7dmFyIFM9bG4oYix4KTtyZXR1cm4gV28oZSx0LFRvLGMucGxhY2Vob2xkZXIsbixiLFMsdSxkLHAtdyl9dmFyIE89aD9uOnRoaXMsTT1nP09bZV06ZTtyZXR1cm4gdz1iLmxlbmd0aCx1P2I9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgscj12bih0Lmxlbmd0aCxuKSxhPU1vKGUpO3ItLTspe3ZhciBpPXRbcl07ZVtyXT1nYShpLG4pP2FbaV06b31yZXR1cm4gZX0oYix1KTpDJiZ3PjEmJmIucmV2ZXJzZSgpLGYmJmQ8dyYmKGIubGVuZ3RoPWQpLHRoaXMmJnRoaXMhPT1kdCYmdGhpcyBpbnN0YW5jZW9mIGMmJihNPW18fFZvKE0pKSxNLmFwcGx5KE8sYil9fWZ1bmN0aW9uIERvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBDcihlLChmdW5jdGlvbihlLG8sYSl7dChyLG4oZSksbyxhKX0pKSxyfShuLGUsdChyKSx7fSl9fWZ1bmN0aW9uIEJvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIGE7aWYobj09PW8mJnI9PT1vKXJldHVybiB0O2lmKG4hPT1vJiYoYT1uKSxyIT09byl7aWYoYT09PW8pcmV0dXJuIHI7XCJzdHJpbmdcIj09dHlwZW9mIG58fFwic3RyaW5nXCI9PXR5cGVvZiByPyhuPWFvKG4pLHI9YW8ocikpOihuPW9vKG4pLHI9b28ocikpLGE9ZShuLHIpfXJldHVybiBhfX1mdW5jdGlvbiBabyhlKXtyZXR1cm4gUW8oKGZ1bmN0aW9uKHQpe3JldHVybiB0PWp0KHQscXQoYWEoKSkpLHpyKChmdW5jdGlvbihuKXt2YXIgcj10aGlzO3JldHVybiBlKHQsKGZ1bmN0aW9uKGUpe3JldHVybiBrdChlLHIsbil9KSl9KSl9KSl9ZnVuY3Rpb24gJG8oZSx0KXt2YXIgbj0odD10PT09bz9cIiBcIjphbyh0KSkubGVuZ3RoO2lmKG48MilyZXR1cm4gbj9Vcih0LGUpOnQ7dmFyIHI9VXIodCxwdChlL2NuKHQpKSk7cmV0dXJuIHJuKHQpP21vKHVuKHIpLDAsZSkuam9pbihcIlwiKTpyLnNsaWNlKDAsZSl9ZnVuY3Rpb24gTm8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixhKXtyZXR1cm4gYSYmXCJudW1iZXJcIiE9dHlwZW9mIGEmJnZhKHQsbixhKSYmKG49YT1vKSx0PWRsKHQpLG49PT1vPyhuPXQsdD0wKTpuPWRsKG4pLGZ1bmN0aW9uKGUsdCxuLG8pe2Zvcih2YXIgYT0tMSxpPWduKHB0KCh0LWUpLyhufHwxKSksMCksbD1yKGkpO2ktLTspbFtvP2k6KythXT1lLGUrPW47cmV0dXJuIGx9KHQsbixhPWE9PT1vP3Q8bj8xOi0xOmRsKGEpLGUpfX1mdW5jdGlvbiBGbyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmXCJzdHJpbmdcIj09dHlwZW9mIG58fCh0PWhsKHQpLG49aGwobikpLGUodCxuKX19ZnVuY3Rpb24gV28oZSx0LG4scixhLGksbCxjLHUsZCl7dmFyIHA9OCZ0O3R8PXA/czo2NCw0Jih0Jj1+KHA/NjQ6cykpfHwodCY9LTQpO3ZhciBmPVtlLHQsYSxwP2k6byxwP2w6byxwP286aSxwP286bCxjLHUsZF0saD1uLmFwcGx5KG8sZik7cmV0dXJuIG1hKGUpJiZNYShoLGYpLGgucGxhY2Vob2xkZXI9cixQYShoLGUsdCl9ZnVuY3Rpb24gVW8oZSl7dmFyIHQ9a2VbZV07cmV0dXJuIGZ1bmN0aW9uKGUsbil7aWYoZT1obChlKSwobj1udWxsPT1uPzA6dm4ocGwobiksMjkyKSkmJkF0KGUpKXt2YXIgcj0odmwoZSkrXCJlXCIpLnNwbGl0KFwiZVwiKTtyZXR1cm4rKChyPSh2bCh0KHJbMF0rXCJlXCIrKCtyWzFdK24pKSkrXCJlXCIpLnNwbGl0KFwiZVwiKSlbMF0rXCJlXCIrKCtyWzFdLW4pKX1yZXR1cm4gdChlKX19dmFyIHpvPVNuJiYxL3NuKG5ldyBTbihbLC0wXSkpWzFdPT11P2Z1bmN0aW9uKGUpe3JldHVybiBuZXcgU24oZSl9OmlzO2Z1bmN0aW9uIEdvKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1kYSh0KTtyZXR1cm4gbj09eD9vbih0KTpuPT1MP2Z1bmN0aW9uKGUpe3ZhciB0PS0xLG49QXJyYXkoZS5zaXplKTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXtuWysrdF09W2UsZV19KSksbn0odCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4ganQodCwoZnVuY3Rpb24odCl7cmV0dXJuW3QsZVt0XV19KSl9KHQsZSh0KSl9fWZ1bmN0aW9uIEtvKGUsdCxuLGksdSxkLHAsZil7dmFyIGg9MiZ0O2lmKCFoJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBMZShhKTt2YXIgZz1pP2kubGVuZ3RoOjA7aWYoZ3x8KHQmPS05NyxpPXU9bykscD1wPT09bz9wOmduKHBsKHApLDApLGY9Zj09PW8/ZjpwbChmKSxnLT11P3UubGVuZ3RoOjAsNjQmdCl7dmFyIHY9aSxDPXU7aT11PW99dmFyIG09aD9vOm5hKGUpLHc9W2UsdCxuLGksdSx2LEMsZCxwLGZdO2lmKG0mJmZ1bmN0aW9uKGUsdCl7dmFyIG49ZVsxXSxyPXRbMV0sbz1ufHIsYT1vPDEzMSxpPXI9PWMmJjg9PW58fHI9PWMmJjI1Nj09biYmZVs3XS5sZW5ndGg8PXRbOF18fDM4ND09ciYmdFs3XS5sZW5ndGg8PXRbOF0mJjg9PW47aWYoIWEmJiFpKXJldHVybiBlOzEmciYmKGVbMl09dFsyXSxvfD0xJm4/MDo0KTt2YXIgcz10WzNdO2lmKHMpe3ZhciB1PWVbM107ZVszXT11P1NvKHUscyx0WzRdKTpzLGVbNF09dT9sbihlWzNdLGwpOnRbNF19KHM9dFs1XSkmJih1PWVbNV0sZVs1XT11P09vKHUscyx0WzZdKTpzLGVbNl09dT9sbihlWzVdLGwpOnRbNl0pLChzPXRbN10pJiYoZVs3XT1zKSxyJmMmJihlWzhdPW51bGw9PWVbOF0/dFs4XTp2bihlWzhdLHRbOF0pKSxudWxsPT1lWzldJiYoZVs5XT10WzldKSxlWzBdPXRbMF0sZVsxXT1vfSh3LG0pLGU9d1swXSx0PXdbMV0sbj13WzJdLGk9d1szXSx1PXdbNF0sIShmPXdbOV09d1s5XT09PW8/aD8wOmUubGVuZ3RoOmduKHdbOV0tZywwKSkmJjI0JnQmJih0Jj0tMjUpLHQmJjEhPXQpYj04PT10fHwxNj09dD9mdW5jdGlvbihlLHQsbil7dmFyIGE9Vm8oZSk7cmV0dXJuIGZ1bmN0aW9uIGkoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxzPXIobCksYz1sLHU9b2EoaSk7Yy0tOylzW2NdPWFyZ3VtZW50c1tjXTt2YXIgZD1sPDMmJnNbMF0hPT11JiZzW2wtMV0hPT11P1tdOmxuKHMsdSk7cmV0dXJuKGwtPWQubGVuZ3RoKTxuP1dvKGUsdCxUbyxpLnBsYWNlaG9sZGVyLG8scyxkLG8sbyxuLWwpOmt0KHRoaXMmJnRoaXMhPT1kdCYmdGhpcyBpbnN0YW5jZW9mIGk/YTplLHRoaXMscyl9fShlLHQsZik6dCE9cyYmMzMhPXR8fHUubGVuZ3RoP1RvLmFwcGx5KG8sdyk6ZnVuY3Rpb24oZSx0LG4sbyl7dmFyIGE9MSZ0LGk9Vm8oZSk7cmV0dXJuIGZ1bmN0aW9uIHQoKXtmb3IodmFyIGw9LTEscz1hcmd1bWVudHMubGVuZ3RoLGM9LTEsdT1vLmxlbmd0aCxkPXIodStzKSxwPXRoaXMmJnRoaXMhPT1kdCYmdGhpcyBpbnN0YW5jZW9mIHQ/aTplOysrYzx1OylkW2NdPW9bY107Zm9yKDtzLS07KWRbYysrXT1hcmd1bWVudHNbKytsXTtyZXR1cm4ga3QocCxhP246dGhpcyxkKX19KGUsdCxuLGkpO2Vsc2UgdmFyIGI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPTEmdCxvPVZvKGUpO3JldHVybiBmdW5jdGlvbiB0KCl7cmV0dXJuKHRoaXMmJnRoaXMhPT1kdCYmdGhpcyBpbnN0YW5jZW9mIHQ/bzplKS5hcHBseShyP246dGhpcyxhcmd1bWVudHMpfX0oZSx0LG4pO3JldHVybiBQYSgobT9ZcjpNYSkoYix3KSxlLHQpfWZ1bmN0aW9uIHFvKGUsdCxuLHIpe3JldHVybiBlPT09b3x8RGkoZSxFZVtuXSkmJiFJZS5jYWxsKHIsbik/dDplfWZ1bmN0aW9uIFlvKGUsdCxuLHIsYSxpKXtyZXR1cm4gWGkoZSkmJlhpKHQpJiYoaS5zZXQodCxlKSxEcihlLHQsbyxZbyxpKSxpLmRlbGV0ZSh0KSksZX1mdW5jdGlvbiBKbyhlKXtyZXR1cm4gbmwoZSk/bzplfWZ1bmN0aW9uIFhvKGUsdCxuLHIsYSxpKXt2YXIgbD0xJm4scz1lLmxlbmd0aCxjPXQubGVuZ3RoO2lmKHMhPWMmJiEobCYmYz5zKSlyZXR1cm4hMTt2YXIgdT1pLmdldChlKSxkPWkuZ2V0KHQpO2lmKHUmJmQpcmV0dXJuIHU9PXQmJmQ9PWU7dmFyIHA9LTEsZj0hMCxoPTImbj9uZXcgVW46bztmb3IoaS5zZXQoZSx0KSxpLnNldCh0LGUpOysrcDxzOyl7dmFyIGc9ZVtwXSx2PXRbcF07aWYocil2YXIgQz1sP3IodixnLHAsdCxlLGkpOnIoZyx2LHAsZSx0LGkpO2lmKEMhPT1vKXtpZihDKWNvbnRpbnVlO2Y9ITE7YnJlYWt9aWYoaCl7aWYoIUh0KHQsKGZ1bmN0aW9uKGUsdCl7aWYoIUp0KGgsdCkmJihnPT09ZXx8YShnLGUsbixyLGkpKSlyZXR1cm4gaC5wdXNoKHQpfSkpKXtmPSExO2JyZWFrfX1lbHNlIGlmKGchPT12JiYhYShnLHYsbixyLGkpKXtmPSExO2JyZWFrfX1yZXR1cm4gaS5kZWxldGUoZSksaS5kZWxldGUodCksZn1mdW5jdGlvbiBRbyhlKXtyZXR1cm4gX2Eoa2EoZSxvLEZhKSxlK1wiXCIpfWZ1bmN0aW9uIGVhKGUpe3JldHVybiB5cihlLFBsLGNhKX1mdW5jdGlvbiB0YShlKXtyZXR1cm4geXIoZSxFbCx1YSl9dmFyIG5hPUxuP2Z1bmN0aW9uKGUpe3JldHVybiBMbi5nZXQoZSl9OmlzO2Z1bmN0aW9uIHJhKGUpe2Zvcih2YXIgdD1lLm5hbWUrXCJcIixuPV9uW3RdLHI9SWUuY2FsbChfbix0KT9uLmxlbmd0aDowO3ItLTspe3ZhciBvPW5bcl0sYT1vLmZ1bmM7aWYobnVsbD09YXx8YT09ZSlyZXR1cm4gby5uYW1lfXJldHVybiB0fWZ1bmN0aW9uIG9hKGUpe3JldHVybihJZS5jYWxsKFRuLFwicGxhY2Vob2xkZXJcIik/VG46ZSkucGxhY2Vob2xkZXJ9ZnVuY3Rpb24gYWEoKXt2YXIgZT1Ubi5pdGVyYXRlZXx8bnM7cmV0dXJuIGU9ZT09PW5zP1JyOmUsYXJndW1lbnRzLmxlbmd0aD9lKGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pOmV9ZnVuY3Rpb24gaWEoZSx0KXt2YXIgbixyLG89ZS5fX2RhdGFfXztyZXR1cm4oXCJzdHJpbmdcIj09KHI9dHlwZW9mKG49dCkpfHxcIm51bWJlclwiPT1yfHxcInN5bWJvbFwiPT1yfHxcImJvb2xlYW5cIj09cj9cIl9fcHJvdG9fX1wiIT09bjpudWxsPT09bik/b1tcInN0cmluZ1wiPT10eXBlb2YgdD9cInN0cmluZ1wiOlwiaGFzaFwiXTpvLm1hcH1mdW5jdGlvbiBsYShlKXtmb3IodmFyIHQ9UGwoZSksbj10Lmxlbmd0aDtuLS07KXt2YXIgcj10W25dLG89ZVtyXTt0W25dPVtyLG8seWEobyldfXJldHVybiB0fWZ1bmN0aW9uIHNhKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT9vOmVbdF19KGUsdCk7cmV0dXJuIGpyKG4pP246b312YXIgY2E9Z3Q/ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/W106KGU9U2UoZSksX3QoZ3QoZSksKGZ1bmN0aW9uKHQpe3JldHVybiB6ZS5jYWxsKGUsdCl9KSkpfTpmcyx1YT1ndD9mdW5jdGlvbihlKXtmb3IodmFyIHQ9W107ZTspUnQodCxjYShlKSksZT1XZShlKTtyZXR1cm4gdH06ZnMsZGE9eHI7ZnVuY3Rpb24gcGEoZSx0LG4pe2Zvcih2YXIgcj0tMSxvPSh0PXZvKHQsZSkpLmxlbmd0aCxhPSExOysrcjxvOyl7dmFyIGk9SGEodFtyXSk7aWYoIShhPW51bGwhPWUmJm4oZSxpKSkpYnJlYWs7ZT1lW2ldfXJldHVybiBhfHwrK3IhPW8/YTohIShvPW51bGw9PWU/MDplLmxlbmd0aCkmJkppKG8pJiZnYShpLG8pJiYoTmkoZSl8fCRpKGUpKX1mdW5jdGlvbiBmYShlKXtyZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiBlLmNvbnN0cnVjdG9yfHxiYShlKT97fTpEbihXZShlKSl9ZnVuY3Rpb24gaGEoZSl7cmV0dXJuIE5pKGUpfHwkaShlKXx8ISEoS2UmJmUmJmVbS2VdKX1mdW5jdGlvbiBnYShlLHQpe3ZhciBuPXR5cGVvZiBlO3JldHVybiEhKHQ9bnVsbD09dD9kOnQpJiYoXCJudW1iZXJcIj09bnx8XCJzeW1ib2xcIiE9biYmQ2UudGVzdChlKSkmJmU+LTEmJmUlMT09MCYmZTx0fWZ1bmN0aW9uIHZhKGUsdCxuKXtpZighWGkobikpcmV0dXJuITE7dmFyIHI9dHlwZW9mIHQ7cmV0dXJuISEoXCJudW1iZXJcIj09cj9XaShuKSYmZ2EodCxuLmxlbmd0aCk6XCJzdHJpbmdcIj09ciYmdCBpbiBuKSYmRGkoblt0XSxlKX1mdW5jdGlvbiBDYShlLHQpe2lmKE5pKGUpKXJldHVybiExO3ZhciBuPXR5cGVvZiBlO3JldHVybiEoXCJudW1iZXJcIiE9biYmXCJzeW1ib2xcIiE9biYmXCJib29sZWFuXCIhPW4mJm51bGwhPWUmJiFpbChlKSl8fFEudGVzdChlKXx8IVgudGVzdChlKXx8bnVsbCE9dCYmZSBpbiBTZSh0KX1mdW5jdGlvbiBtYShlKXt2YXIgdD1yYShlKSxuPVRuW3RdO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIG58fCEodCBpbiAkbi5wcm90b3R5cGUpKXJldHVybiExO2lmKGU9PT1uKXJldHVybiEwO3ZhciByPW5hKG4pO3JldHVybiEhciYmZT09PXJbMF19KHluJiZkYShuZXcgeW4obmV3IEFycmF5QnVmZmVyKDEpKSkhPVJ8fHhuJiZkYShuZXcgeG4pIT14fHxrbiYmZGEoa24ucmVzb2x2ZSgpKSE9T3x8U24mJmRhKG5ldyBTbikhPUx8fE9uJiZkYShuZXcgT24pIT1FKSYmKGRhPWZ1bmN0aW9uKGUpe3ZhciB0PXhyKGUpLG49dD09Uz9lLmNvbnN0cnVjdG9yOm8scj1uP0FhKG4pOlwiXCI7aWYocilzd2l0Y2gocil7Y2FzZSBQbjpyZXR1cm4gUjtjYXNlIEVuOnJldHVybiB4O2Nhc2Ugam46cmV0dXJuIE87Y2FzZSBSbjpyZXR1cm4gTDtjYXNlIEluOnJldHVybiBFfXJldHVybiB0fSk7dmFyIHdhPWplP3FpOmhzO2Z1bmN0aW9uIGJhKGUpe3ZhciB0PWUmJmUuY29uc3RydWN0b3I7cmV0dXJuIGU9PT0oXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmdC5wcm90b3R5cGV8fEVlKX1mdW5jdGlvbiB5YShlKXtyZXR1cm4gZT09ZSYmIVhpKGUpfWZ1bmN0aW9uIHhhKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiZuW2VdPT09dCYmKHQhPT1vfHxlIGluIFNlKG4pKX19ZnVuY3Rpb24ga2EoZSx0LG4pe3JldHVybiB0PWduKHQ9PT1vP2UubGVuZ3RoLTE6dCwwKSxmdW5jdGlvbigpe2Zvcih2YXIgbz1hcmd1bWVudHMsYT0tMSxpPWduKG8ubGVuZ3RoLXQsMCksbD1yKGkpOysrYTxpOylsW2FdPW9bdCthXTthPS0xO2Zvcih2YXIgcz1yKHQrMSk7KythPHQ7KXNbYV09b1thXTtyZXR1cm4gc1t0XT1uKGwpLGt0KGUsdGhpcyxzKX19ZnVuY3Rpb24gU2EoZSx0KXtyZXR1cm4gdC5sZW5ndGg8Mj9lOmJyKGUsUXIodCwwLC0xKSl9ZnVuY3Rpb24gT2EoZSx0KXtpZigoXCJjb25zdHJ1Y3RvclwiIT09dHx8XCJmdW5jdGlvblwiIT10eXBlb2YgZVt0XSkmJlwiX19wcm90b19fXCIhPXQpcmV0dXJuIGVbdF19dmFyIE1hPUVhKFlyKSxMYT11dHx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZHQuc2V0VGltZW91dChlLHQpfSxfYT1FYShKcik7ZnVuY3Rpb24gUGEoZSx0LG4pe3ZhciByPXQrXCJcIjtyZXR1cm4gX2EoZSxmdW5jdGlvbihlLHQpe3ZhciBuPXQubGVuZ3RoO2lmKCFuKXJldHVybiBlO3ZhciByPW4tMTtyZXR1cm4gdFtyXT0obj4xP1wiJiBcIjpcIlwiKSt0W3JdLHQ9dC5qb2luKG4+Mj9cIiwgXCI6XCIgXCIpLGUucmVwbGFjZShhZSxcIntcXG4vKiBbd3JhcHBlZCB3aXRoIFwiK3QrXCJdICovXFxuXCIpfShyLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE90KGgsKGZ1bmN0aW9uKG4pe3ZhciByPVwiXy5cIituWzBdO3QmblsxXSYmIVB0KGUscikmJmUucHVzaChyKX0pKSxlLnNvcnQoKX0oZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaChpZSk7cmV0dXJuIHQ/dFsxXS5zcGxpdChsZSk6W119KHIpLG4pKSl9ZnVuY3Rpb24gRWEoZSl7dmFyIHQ9MCxuPTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9Q24oKSxhPTE2LShyLW4pO2lmKG49cixhPjApe2lmKCsrdD49ODAwKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB0PTA7cmV0dXJuIGUuYXBwbHkobyxhcmd1bWVudHMpfX1mdW5jdGlvbiBqYShlLHQpe3ZhciBuPS0xLHI9ZS5sZW5ndGgsYT1yLTE7Zm9yKHQ9dD09PW8/cjp0Oysrbjx0Oyl7dmFyIGk9V3IobixhKSxsPWVbaV07ZVtpXT1lW25dLGVbbl09bH1yZXR1cm4gZS5sZW5ndGg9dCxlfXZhciBSYSxJYSxWYT0oUmE9UmkoKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiA0Nj09PWUuY2hhckNvZGVBdCgwKSYmdC5wdXNoKFwiXCIpLGUucmVwbGFjZShlZSwoZnVuY3Rpb24oZSxuLHIsbyl7dC5wdXNoKHI/by5yZXBsYWNlKHVlLFwiJDFcIik6bnx8ZSl9KSksdH0pLChmdW5jdGlvbihlKXtyZXR1cm4gNTAwPT09SWEuc2l6ZSYmSWEuY2xlYXIoKSxlfSkpLElhPVJhLmNhY2hlLFJhKTtmdW5jdGlvbiBIYShlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZXx8aWwoZSkpcmV0dXJuIGU7dmFyIHQ9ZStcIlwiO3JldHVyblwiMFwiPT10JiYxL2U9PS0xLzA/XCItMFwiOnR9ZnVuY3Rpb24gQWEoZSl7aWYobnVsbCE9ZSl7dHJ5e3JldHVybiBSZS5jYWxsKGUpfWNhdGNoKGUpe310cnl7cmV0dXJuIGUrXCJcIn1jYXRjaChlKXt9fXJldHVyblwiXCJ9ZnVuY3Rpb24gVGEoZSl7aWYoZSBpbnN0YW5jZW9mICRuKXJldHVybiBlLmNsb25lKCk7dmFyIHQ9bmV3IFpuKGUuX193cmFwcGVkX18sZS5fX2NoYWluX18pO3JldHVybiB0Ll9fYWN0aW9uc19fPU1vKGUuX19hY3Rpb25zX18pLHQuX19pbmRleF9fPWUuX19pbmRleF9fLHQuX192YWx1ZXNfXz1lLl9fdmFsdWVzX18sdH12YXIgRGE9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFVpKGUpP3NyKGUsaHIodCwxLFVpLCEwKSk6W119KSksQmE9enIoKGZ1bmN0aW9uKGUsdCl7dmFyIG49S2EodCk7cmV0dXJuIFVpKG4pJiYobj1vKSxVaShlKT9zcihlLGhyKHQsMSxVaSwhMCksYWEobiwyKSk6W119KSksWmE9enIoKGZ1bmN0aW9uKGUsdCl7dmFyIG49S2EodCk7cmV0dXJuIFVpKG4pJiYobj1vKSxVaShlKT9zcihlLGhyKHQsMSxVaSwhMCksbyxuKTpbXX0pKTtmdW5jdGlvbiAkYShlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFyKXJldHVybi0xO3ZhciBvPW51bGw9PW4/MDpwbChuKTtyZXR1cm4gbzwwJiYobz1nbihyK28sMCkpLER0KGUsYWEodCwzKSxvKX1mdW5jdGlvbiBOYShlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFyKXJldHVybi0xO3ZhciBhPXItMTtyZXR1cm4gbiE9PW8mJihhPXBsKG4pLGE9bjwwP2duKHIrYSwwKTp2bihhLHItMSkpLER0KGUsYWEodCwzKSxhLCEwKX1mdW5jdGlvbiBGYShlKXtyZXR1cm4gbnVsbCE9ZSYmZS5sZW5ndGg/aHIoZSwxKTpbXX1mdW5jdGlvbiBXYShlKXtyZXR1cm4gZSYmZS5sZW5ndGg/ZVswXTpvfXZhciBVYT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9anQoZSxobyk7cmV0dXJuIHQubGVuZ3RoJiZ0WzBdPT09ZVswXT9Ncih0KTpbXX0pKSx6YT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9S2EoZSksbj1qdChlLGhvKTtyZXR1cm4gdD09PUthKG4pP3Q9bzpuLnBvcCgpLG4ubGVuZ3RoJiZuWzBdPT09ZVswXT9NcihuLGFhKHQsMikpOltdfSkpLEdhPXpyKChmdW5jdGlvbihlKXt2YXIgdD1LYShlKSxuPWp0KGUsaG8pO3JldHVybih0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvKSYmbi5wb3AoKSxuLmxlbmd0aCYmblswXT09PWVbMF0/TXIobixvLHQpOltdfSkpO2Z1bmN0aW9uIEthKGUpe3ZhciB0PW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gdD9lW3QtMV06b312YXIgcWE9enIoWWEpO2Z1bmN0aW9uIFlhKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoJiZ0JiZ0Lmxlbmd0aD9OcihlLHQpOmV9dmFyIEphPVFvKChmdW5jdGlvbihlLHQpe3ZhciBuPW51bGw9PWU/MDplLmxlbmd0aCxyPXJyKGUsdCk7cmV0dXJuIEZyKGUsanQodCwoZnVuY3Rpb24oZSl7cmV0dXJuIGdhKGUsbik/K2U6ZX0pKS5zb3J0KGtvKSkscn0pKTtmdW5jdGlvbiBYYShlKXtyZXR1cm4gbnVsbD09ZT9lOmJuLmNhbGwoZSl9dmFyIFFhPXpyKChmdW5jdGlvbihlKXtyZXR1cm4gaW8oaHIoZSwxLFVpLCEwKSl9KSksZWk9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PUthKGUpO3JldHVybiBVaSh0KSYmKHQ9byksaW8oaHIoZSwxLFVpLCEwKSxhYSh0LDIpKX0pKSx0aT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9S2EoZSk7cmV0dXJuIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8saW8oaHIoZSwxLFVpLCEwKSxvLHQpfSkpO2Z1bmN0aW9uIG5pKGUpe2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuW107dmFyIHQ9MDtyZXR1cm4gZT1fdChlLChmdW5jdGlvbihlKXtpZihVaShlKSlyZXR1cm4gdD1nbihlLmxlbmd0aCx0KSwhMH0pKSxHdCh0LChmdW5jdGlvbih0KXtyZXR1cm4ganQoZSxGdCh0KSl9KSl9ZnVuY3Rpb24gcmkoZSx0KXtpZighZXx8IWUubGVuZ3RoKXJldHVybltdO3ZhciBuPW5pKGUpO3JldHVybiBudWxsPT10P246anQobiwoZnVuY3Rpb24oZSl7cmV0dXJuIGt0KHQsbyxlKX0pKX12YXIgb2k9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFVpKGUpP3NyKGUsdCk6W119KSksYWk9enIoKGZ1bmN0aW9uKGUpe3JldHVybiBwbyhfdChlLFVpKSl9KSksaWk9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PUthKGUpO3JldHVybiBVaSh0KSYmKHQ9bykscG8oX3QoZSxVaSksYWEodCwyKSl9KSksbGk9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PUthKGUpO3JldHVybiB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvLHBvKF90KGUsVWkpLG8sdCl9KSksc2k9enIobmkpLGNpPXpyKChmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxuPXQ+MT9lW3QtMV06bztyZXR1cm4gbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuPyhlLnBvcCgpLG4pOm8scmkoZSxuKX0pKTtmdW5jdGlvbiB1aShlKXt2YXIgdD1UbihlKTtyZXR1cm4gdC5fX2NoYWluX189ITAsdH1mdW5jdGlvbiBkaShlLHQpe3JldHVybiB0KGUpfXZhciBwaT1RbygoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj10P2VbMF06MCxyPXRoaXMuX193cmFwcGVkX18sYT1mdW5jdGlvbih0KXtyZXR1cm4gcnIodCxlKX07cmV0dXJuISh0PjF8fHRoaXMuX19hY3Rpb25zX18ubGVuZ3RoKSYmciBpbnN0YW5jZW9mICRuJiZnYShuKT8oKHI9ci5zbGljZShuLCtuKyh0PzE6MCkpKS5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOmRpLGFyZ3M6W2FdLHRoaXNBcmc6b30pLG5ldyBabihyLHRoaXMuX19jaGFpbl9fKS50aHJ1KChmdW5jdGlvbihlKXtyZXR1cm4gdCYmIWUubGVuZ3RoJiZlLnB1c2gobyksZX0pKSk6dGhpcy50aHJ1KGEpfSkpLGZpPV9vKChmdW5jdGlvbihlLHQsbil7SWUuY2FsbChlLG4pPysrZVtuXTpucihlLG4sMSl9KSksaGk9SG8oJGEpLGdpPUhvKE5hKTtmdW5jdGlvbiB2aShlLHQpe3JldHVybihOaShlKT9PdDpjcikoZSxhYSh0LDMpKX1mdW5jdGlvbiBDaShlLHQpe3JldHVybihOaShlKT9NdDp1cikoZSxhYSh0LDMpKX12YXIgbWk9X28oKGZ1bmN0aW9uKGUsdCxuKXtJZS5jYWxsKGUsbik/ZVtuXS5wdXNoKHQpOm5yKGUsbixbdF0pfSkpLHdpPXpyKChmdW5jdGlvbihlLHQsbil7dmFyIG89LTEsYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LGk9V2koZSk/cihlLmxlbmd0aCk6W107cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUpe2lbKytvXT1hP2t0KHQsZSxuKTpMcihlLHQsbil9KSksaX0pKSxiaT1fbygoZnVuY3Rpb24oZSx0LG4pe25yKGUsbix0KX0pKTtmdW5jdGlvbiB5aShlLHQpe3JldHVybihOaShlKT9qdDpIcikoZSxhYSh0LDMpKX12YXIgeGk9X28oKGZ1bmN0aW9uKGUsdCxuKXtlW24/MDoxXS5wdXNoKHQpfSksKGZ1bmN0aW9uKCl7cmV0dXJuW1tdLFtdXX0pKSxraT16cigoZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybltdO3ZhciBuPXQubGVuZ3RoO3JldHVybiBuPjEmJnZhKGUsdFswXSx0WzFdKT90PVtdOm4+MiYmdmEodFswXSx0WzFdLHRbMl0pJiYodD1bdFswXV0pLFpyKGUsaHIodCwxKSxbXSl9KSksU2k9Y3R8fGZ1bmN0aW9uKCl7cmV0dXJuIGR0LkRhdGUubm93KCl9O2Z1bmN0aW9uIE9pKGUsdCxuKXtyZXR1cm4gdD1uP286dCx0PWUmJm51bGw9PXQ/ZS5sZW5ndGg6dCxLbyhlLGMsbyxvLG8sbyx0KX1mdW5jdGlvbiBNaShlLHQpe3ZhciBuO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IExlKGEpO3JldHVybiBlPXBsKGUpLGZ1bmN0aW9uKCl7cmV0dXJuLS1lPjAmJihuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxlPD0xJiYodD1vKSxufX12YXIgTGk9enIoKGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0xO2lmKG4ubGVuZ3RoKXt2YXIgbz1sbihuLG9hKExpKSk7cnw9c31yZXR1cm4gS28oZSxyLHQsbixvKX0pKSxfaT16cigoZnVuY3Rpb24oZSx0LG4pe3ZhciByPTM7aWYobi5sZW5ndGgpe3ZhciBvPWxuKG4sb2EoX2kpKTtyfD1zfXJldHVybiBLbyh0LHIsZSxuLG8pfSkpO2Z1bmN0aW9uIFBpKGUsdCxuKXt2YXIgcixpLGwscyxjLHUsZD0wLHA9ITEsZj0hMSxoPSEwO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IExlKGEpO2Z1bmN0aW9uIGcodCl7dmFyIG49cixhPWk7cmV0dXJuIHI9aT1vLGQ9dCxzPWUuYXBwbHkoYSxuKX1mdW5jdGlvbiB2KGUpe3ZhciBuPWUtdTtyZXR1cm4gdT09PW98fG4+PXR8fG48MHx8ZiYmZS1kPj1sfWZ1bmN0aW9uIEMoKXt2YXIgZT1TaSgpO2lmKHYoZSkpcmV0dXJuIG0oZSk7Yz1MYShDLGZ1bmN0aW9uKGUpe3ZhciBuPXQtKGUtdSk7cmV0dXJuIGY/dm4obixsLShlLWQpKTpufShlKSl9ZnVuY3Rpb24gbShlKXtyZXR1cm4gYz1vLGgmJnI/ZyhlKToocj1pPW8scyl9ZnVuY3Rpb24gdygpe3ZhciBlPVNpKCksbj12KGUpO2lmKHI9YXJndW1lbnRzLGk9dGhpcyx1PWUsbil7aWYoYz09PW8pcmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBkPWUsYz1MYShDLHQpLHA/ZyhlKTpzfSh1KTtpZihmKXJldHVybiB3byhjKSxjPUxhKEMsdCksZyh1KX1yZXR1cm4gYz09PW8mJihjPUxhKEMsdCkpLHN9cmV0dXJuIHQ9aGwodCl8fDAsWGkobikmJihwPSEhbi5sZWFkaW5nLGw9KGY9XCJtYXhXYWl0XCJpbiBuKT9nbihobChuLm1heFdhaXQpfHwwLHQpOmwsaD1cInRyYWlsaW5nXCJpbiBuPyEhbi50cmFpbGluZzpoKSx3LmNhbmNlbD1mdW5jdGlvbigpe2MhPT1vJiZ3byhjKSxkPTAscj11PWk9Yz1vfSx3LmZsdXNoPWZ1bmN0aW9uKCl7cmV0dXJuIGM9PT1vP3M6bShTaSgpKX0sd312YXIgRWk9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGxyKGUsMSx0KX0pKSxqaT16cigoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBscihlLGhsKHQpfHwwLG4pfSkpO2Z1bmN0aW9uIFJpKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZXx8bnVsbCE9dCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgTGUoYSk7dmFyIG49ZnVuY3Rpb24oKXt2YXIgcj1hcmd1bWVudHMsbz10P3QuYXBwbHkodGhpcyxyKTpyWzBdLGE9bi5jYWNoZTtpZihhLmhhcyhvKSlyZXR1cm4gYS5nZXQobyk7dmFyIGk9ZS5hcHBseSh0aGlzLHIpO3JldHVybiBuLmNhY2hlPWEuc2V0KG8saSl8fGEsaX07cmV0dXJuIG4uY2FjaGU9bmV3KFJpLkNhY2hlfHxXbiksbn1mdW5jdGlvbiBJaShlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBMZShhKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHM7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIWUuY2FsbCh0aGlzKTtjYXNlIDE6cmV0dXJuIWUuY2FsbCh0aGlzLHRbMF0pO2Nhc2UgMjpyZXR1cm4hZS5jYWxsKHRoaXMsdFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIWUuY2FsbCh0aGlzLHRbMF0sdFsxXSx0WzJdKX1yZXR1cm4hZS5hcHBseSh0aGlzLHQpfX1SaS5DYWNoZT1Xbjt2YXIgVmk9Q28oKGZ1bmN0aW9uKGUsdCl7dmFyIG49KHQ9MT09dC5sZW5ndGgmJk5pKHRbMF0pP2p0KHRbMF0scXQoYWEoKSkpOmp0KGhyKHQsMSkscXQoYWEoKSkpKS5sZW5ndGg7cmV0dXJuIHpyKChmdW5jdGlvbihyKXtmb3IodmFyIG89LTEsYT12bihyLmxlbmd0aCxuKTsrK288YTspcltvXT10W29dLmNhbGwodGhpcyxyW29dKTtyZXR1cm4ga3QoZSx0aGlzLHIpfSkpfSkpLEhpPXpyKChmdW5jdGlvbihlLHQpe3ZhciBuPWxuKHQsb2EoSGkpKTtyZXR1cm4gS28oZSxzLG8sdCxuKX0pKSxBaT16cigoZnVuY3Rpb24oZSx0KXt2YXIgbj1sbih0LG9hKEFpKSk7cmV0dXJuIEtvKGUsNjQsbyx0LG4pfSkpLFRpPVFvKChmdW5jdGlvbihlLHQpe3JldHVybiBLbyhlLDI1NixvLG8sbyx0KX0pKTtmdW5jdGlvbiBEaShlLHQpe3JldHVybiBlPT09dHx8ZSE9ZSYmdCE9dH12YXIgQmk9Rm8oa3IpLFppPUZvKChmdW5jdGlvbihlLHQpe3JldHVybiBlPj10fSkpLCRpPV9yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/X3I6ZnVuY3Rpb24oZSl7cmV0dXJuIFFpKGUpJiZJZS5jYWxsKGUsXCJjYWxsZWVcIikmJiF6ZS5jYWxsKGUsXCJjYWxsZWVcIil9LE5pPXIuaXNBcnJheSxGaT1DdD9xdChDdCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFpKGUpJiZ4cihlKT09an07ZnVuY3Rpb24gV2koZSl7cmV0dXJuIG51bGwhPWUmJkppKGUubGVuZ3RoKSYmIXFpKGUpfWZ1bmN0aW9uIFVpKGUpe3JldHVybiBRaShlKSYmV2koZSl9dmFyIHppPXZ0fHxocyxHaT1tdD9xdChtdCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFpKGUpJiZ4cihlKT09bX07ZnVuY3Rpb24gS2koZSl7aWYoIVFpKGUpKXJldHVybiExO3ZhciB0PXhyKGUpO3JldHVybiB0PT13fHxcIltvYmplY3QgRE9NRXhjZXB0aW9uXVwiPT10fHxcInN0cmluZ1wiPT10eXBlb2YgZS5tZXNzYWdlJiZcInN0cmluZ1wiPT10eXBlb2YgZS5uYW1lJiYhbmwoZSl9ZnVuY3Rpb24gcWkoZSl7aWYoIVhpKGUpKXJldHVybiExO3ZhciB0PXhyKGUpO3JldHVybiB0PT1ifHx0PT15fHxcIltvYmplY3QgQXN5bmNGdW5jdGlvbl1cIj09dHx8XCJbb2JqZWN0IFByb3h5XVwiPT10fWZ1bmN0aW9uIFlpKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPT1wbChlKX1mdW5jdGlvbiBKaShlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmZT4tMSYmZSUxPT0wJiZlPD1kfWZ1bmN0aW9uIFhpKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiBudWxsIT1lJiYoXCJvYmplY3RcIj09dHx8XCJmdW5jdGlvblwiPT10KX1mdW5jdGlvbiBRaShlKXtyZXR1cm4gbnVsbCE9ZSYmXCJvYmplY3RcIj09dHlwZW9mIGV9dmFyIGVsPXd0P3F0KHd0KTpmdW5jdGlvbihlKXtyZXR1cm4gUWkoZSkmJmRhKGUpPT14fTtmdW5jdGlvbiB0bChlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZXx8UWkoZSkmJnhyKGUpPT1rfWZ1bmN0aW9uIG5sKGUpe2lmKCFRaShlKXx8eHIoZSkhPVMpcmV0dXJuITE7dmFyIHQ9V2UoZSk7aWYobnVsbD09PXQpcmV0dXJuITA7dmFyIG49SWUuY2FsbCh0LFwiY29uc3RydWN0b3JcIikmJnQuY29uc3RydWN0b3I7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIG4mJlJlLmNhbGwobik9PVRlfXZhciBybD1idD9xdChidCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFpKGUpJiZ4cihlKT09TX0sb2w9eXQ/cXQoeXQpOmZ1bmN0aW9uKGUpe3JldHVybiBRaShlKSYmZGEoZSk9PUx9O2Z1bmN0aW9uIGFsKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfHwhTmkoZSkmJlFpKGUpJiZ4cihlKT09X31mdW5jdGlvbiBpbChlKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZXx8UWkoZSkmJnhyKGUpPT1QfXZhciBsbD14dD9xdCh4dCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFpKGUpJiZKaShlLmxlbmd0aCkmJiEhb3RbeHIoZSldfSxzbD1GbyhWciksY2w9Rm8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU8PXR9KSk7ZnVuY3Rpb24gdWwoZSl7aWYoIWUpcmV0dXJuW107aWYoV2koZSkpcmV0dXJuIGFsKGUpP3VuKGUpOk1vKGUpO2lmKHFlJiZlW3FlXSlyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49W107ISh0PWUubmV4dCgpKS5kb25lOyluLnB1c2godC52YWx1ZSk7cmV0dXJuIG59KGVbcWVdKCkpO3ZhciB0PWRhKGUpO3JldHVybih0PT14P29uOnQ9PUw/c246RGwpKGUpfWZ1bmN0aW9uIGRsKGUpe3JldHVybiBlPyhlPWhsKGUpKT09PXV8fGU9PT0tMS8wPzE3OTc2OTMxMzQ4NjIzMTU3ZTI5MiooZTwwPy0xOjEpOmU9PWU/ZTowOjA9PT1lP2U6MH1mdW5jdGlvbiBwbChlKXt2YXIgdD1kbChlKSxuPXQlMTtyZXR1cm4gdD09dD9uP3Qtbjp0OjB9ZnVuY3Rpb24gZmwoZSl7cmV0dXJuIGU/b3IocGwoZSksMCxmKTowfWZ1bmN0aW9uIGhsKGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiBlO2lmKGlsKGUpKXJldHVybiBwO2lmKFhpKGUpKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnZhbHVlT2Y/ZS52YWx1ZU9mKCk6ZTtlPVhpKHQpP3QrXCJcIjp0fWlmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybiAwPT09ZT9lOitlO2U9S3QoZSk7dmFyIG49aGUudGVzdChlKTtyZXR1cm4gbnx8dmUudGVzdChlKT9zdChlLnNsaWNlKDIpLG4/Mjo4KTpmZS50ZXN0KGUpP3A6K2V9ZnVuY3Rpb24gZ2woZSl7cmV0dXJuIExvKGUsRWwoZSkpfWZ1bmN0aW9uIHZsKGUpe3JldHVybiBudWxsPT1lP1wiXCI6YW8oZSl9dmFyIENsPVBvKChmdW5jdGlvbihlLHQpe2lmKGJhKHQpfHxXaSh0KSlMbyh0LFBsKHQpLGUpO2Vsc2UgZm9yKHZhciBuIGluIHQpSWUuY2FsbCh0LG4pJiZYbihlLG4sdFtuXSl9KSksbWw9UG8oKGZ1bmN0aW9uKGUsdCl7TG8odCxFbCh0KSxlKX0pKSx3bD1QbygoZnVuY3Rpb24oZSx0LG4scil7TG8odCxFbCh0KSxlLHIpfSkpLGJsPVBvKChmdW5jdGlvbihlLHQsbixyKXtMbyh0LFBsKHQpLGUscil9KSkseWw9UW8ocnIpLHhsPXpyKChmdW5jdGlvbihlLHQpe2U9U2UoZSk7dmFyIG49LTEscj10Lmxlbmd0aCxhPXI+Mj90WzJdOm87Zm9yKGEmJnZhKHRbMF0sdFsxXSxhKSYmKHI9MSk7KytuPHI7KWZvcih2YXIgaT10W25dLGw9RWwoaSkscz0tMSxjPWwubGVuZ3RoOysrczxjOyl7dmFyIHU9bFtzXSxkPWVbdV07KGQ9PT1vfHxEaShkLEVlW3VdKSYmIUllLmNhbGwoZSx1KSkmJihlW3VdPWlbdV0pfXJldHVybiBlfSkpLGtsPXpyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wdXNoKG8sWW8pLGt0KFJsLG8sZSl9KSk7ZnVuY3Rpb24gU2woZSx0LG4pe3ZhciByPW51bGw9PWU/bzpicihlLHQpO3JldHVybiByPT09bz9uOnJ9ZnVuY3Rpb24gT2woZSx0KXtyZXR1cm4gbnVsbCE9ZSYmcGEoZSx0LE9yKX12YXIgTWw9RG8oKGZ1bmN0aW9uKGUsdCxuKXtudWxsIT10JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LnRvU3RyaW5nJiYodD1BZS5jYWxsKHQpKSxlW3RdPW59KSxYbCh0cykpLExsPURvKChmdW5jdGlvbihlLHQsbil7bnVsbCE9dCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdC50b1N0cmluZyYmKHQ9QWUuY2FsbCh0KSksSWUuY2FsbChlLHQpP2VbdF0ucHVzaChuKTplW3RdPVtuXX0pLGFhKSxfbD16cihMcik7ZnVuY3Rpb24gUGwoZSl7cmV0dXJuIFdpKGUpP0duKGUpOklyKGUpfWZ1bmN0aW9uIEVsKGUpe3JldHVybiBXaShlKT9HbihlLCEwKTpmdW5jdGlvbihlKXtpZighWGkoZSkpcmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2lmKG51bGwhPWUpZm9yKHZhciBuIGluIFNlKGUpKXQucHVzaChuKTtyZXR1cm4gdH0oZSk7dmFyIHQ9YmEoZSksbj1bXTtmb3IodmFyIHIgaW4gZSkoXCJjb25zdHJ1Y3RvclwiIT1yfHwhdCYmSWUuY2FsbChlLHIpKSYmbi5wdXNoKHIpO3JldHVybiBufShlKX12YXIgamw9UG8oKGZ1bmN0aW9uKGUsdCxuKXtEcihlLHQsbil9KSksUmw9UG8oKGZ1bmN0aW9uKGUsdCxuLHIpe0RyKGUsdCxuLHIpfSkpLElsPVFvKChmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2lmKG51bGw9PWUpcmV0dXJuIG47dmFyIHI9ITE7dD1qdCh0LChmdW5jdGlvbih0KXtyZXR1cm4gdD12byh0LGUpLHJ8fChyPXQubGVuZ3RoPjEpLHR9KSksTG8oZSx0YShlKSxuKSxyJiYobj1hcihuLDcsSm8pKTtmb3IodmFyIG89dC5sZW5ndGg7by0tOylsbyhuLHRbb10pO3JldHVybiBufSkpLFZsPVFvKChmdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP3t9OmZ1bmN0aW9uKGUsdCl7cmV0dXJuICRyKGUsdCwoZnVuY3Rpb24odCxuKXtyZXR1cm4gT2woZSxuKX0pKX0oZSx0KX0pKTtmdW5jdGlvbiBIbChlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG49anQodGEoZSksKGZ1bmN0aW9uKGUpe3JldHVybltlXX0pKTtyZXR1cm4gdD1hYSh0KSwkcihlLG4sKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZSxuWzBdKX0pKX12YXIgQWw9R28oUGwpLFRsPUdvKEVsKTtmdW5jdGlvbiBEbChlKXtyZXR1cm4gbnVsbD09ZT9bXTpZdChlLFBsKGUpKX12YXIgQmw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD10LnRvTG93ZXJDYXNlKCksZSsobj9abCh0KTp0KX0pKTtmdW5jdGlvbiBabChlKXtyZXR1cm4gS2wodmwoZSkudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gJGwoZSl7cmV0dXJuKGU9dmwoZSkpJiZlLnJlcGxhY2UobWUsZW4pLnJlcGxhY2UoSmUsXCJcIil9dmFyIE5sPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKG4/XCItXCI6XCJcIikrdC50b0xvd2VyQ2FzZSgpfSkpLEZsPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKG4/XCIgXCI6XCJcIikrdC50b0xvd2VyQ2FzZSgpfSkpLFdsPVJvKFwidG9Mb3dlckNhc2VcIiksVWw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIl9cIjpcIlwiKSt0LnRvTG93ZXJDYXNlKCl9KSksemw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIiBcIjpcIlwiKStLbCh0KX0pKSxHbD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiIFwiOlwiXCIpK3QudG9VcHBlckNhc2UoKX0pKSxLbD1SbyhcInRvVXBwZXJDYXNlXCIpO2Z1bmN0aW9uIHFsKGUsdCxuKXtyZXR1cm4gZT12bChlKSwodD1uP286dCk9PT1vP2Z1bmN0aW9uKGUpe3JldHVybiB0dC50ZXN0KGUpfShlKT9mdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaChRZSl8fFtdfShlKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaChzZSl8fFtdfShlKTplLm1hdGNoKHQpfHxbXX12YXIgWWw9enIoKGZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBrdChlLG8sdCl9Y2F0Y2goZSl7cmV0dXJuIEtpKGUpP2U6bmV3IHllKGUpfX0pKSxKbD1RbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gT3QodCwoZnVuY3Rpb24odCl7dD1IYSh0KSxucihlLHQsTGkoZVt0XSxlKSl9KSksZX0pKTtmdW5jdGlvbiBYbChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFFsPUFvKCksZXM9QW8oITApO2Z1bmN0aW9uIHRzKGUpe3JldHVybiBlfWZ1bmN0aW9uIG5zKGUpe3JldHVybiBScihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6YXIoZSwxKSl9dmFyIHJzPXpyKChmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gTHIobixlLHQpfX0pKSxvcz16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIExyKGUsbix0KX19KSk7ZnVuY3Rpb24gYXMoZSx0LG4pe3ZhciByPVBsKHQpLG89d3IodCxyKTtudWxsIT1ufHxYaSh0KSYmKG8ubGVuZ3RofHwhci5sZW5ndGgpfHwobj10LHQ9ZSxlPXRoaXMsbz13cih0LFBsKHQpKSk7dmFyIGE9IShYaShuKSYmXCJjaGFpblwiaW4gbiYmIW4uY2hhaW4pLGk9cWkoZSk7cmV0dXJuIE90KG8sKGZ1bmN0aW9uKG4pe3ZhciByPXRbbl07ZVtuXT1yLGkmJihlLnByb3RvdHlwZVtuXT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX19jaGFpbl9fO2lmKGF8fHQpe3ZhciBuPWUodGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuKG4uX19hY3Rpb25zX189TW8odGhpcy5fX2FjdGlvbnNfXykpLnB1c2goe2Z1bmM6cixhcmdzOmFyZ3VtZW50cyx0aGlzQXJnOmV9KSxuLl9fY2hhaW5fXz10LG59cmV0dXJuIHIuYXBwbHkoZSxSdChbdGhpcy52YWx1ZSgpXSxhcmd1bWVudHMpKX0pfSkpLGV9ZnVuY3Rpb24gaXMoKXt9dmFyIGxzPVpvKGp0KSxzcz1abyhMdCksY3M9Wm8oSHQpO2Z1bmN0aW9uIHVzKGUpe3JldHVybiBDYShlKT9GdChIYShlKSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBicih0LGUpfX0oZSl9dmFyIGRzPU5vKCkscHM9Tm8oITApO2Z1bmN0aW9uIGZzKCl7cmV0dXJuW119ZnVuY3Rpb24gaHMoKXtyZXR1cm4hMX12YXIgZ3MsdnM9Qm8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0pLDApLENzPVVvKFwiY2VpbFwiKSxtcz1CbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS90fSksMSksd3M9VW8oXCJmbG9vclwiKSxicz1CbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSp0fSksMSkseXM9VW8oXCJyb3VuZFwiKSx4cz1CbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fSksMCk7cmV0dXJuIFRuLmFmdGVyPWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgTGUoYSk7cmV0dXJuIGU9cGwoZSksZnVuY3Rpb24oKXtpZigtLWU8MSlyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxUbi5hcnk9T2ksVG4uYXNzaWduPUNsLFRuLmFzc2lnbkluPW1sLFRuLmFzc2lnbkluV2l0aD13bCxUbi5hc3NpZ25XaXRoPWJsLFRuLmF0PXlsLFRuLmJlZm9yZT1NaSxUbi5iaW5kPUxpLFRuLmJpbmRBbGw9SmwsVG4uYmluZEtleT1faSxUbi5jYXN0QXJyYXk9ZnVuY3Rpb24oKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bXTt2YXIgZT1hcmd1bWVudHNbMF07cmV0dXJuIE5pKGUpP2U6W2VdfSxUbi5jaGFpbj11aSxUbi5jaHVuaz1mdW5jdGlvbihlLHQsbil7dD0obj92YShlLHQsbik6dD09PW8pPzE6Z24ocGwodCksMCk7dmFyIGE9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFhfHx0PDEpcmV0dXJuW107Zm9yKHZhciBpPTAsbD0wLHM9cihwdChhL3QpKTtpPGE7KXNbbCsrXT1RcihlLGksaSs9dCk7cmV0dXJuIHN9LFRuLmNvbXBhY3Q9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PS0xLG49bnVsbD09ZT8wOmUubGVuZ3RoLHI9MCxvPVtdOysrdDxuOyl7dmFyIGE9ZVt0XTthJiYob1tyKytdPWEpfXJldHVybiBvfSxUbi5jb25jYXQ9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoO2lmKCFlKXJldHVybltdO2Zvcih2YXIgdD1yKGUtMSksbj1hcmd1bWVudHNbMF0sbz1lO28tLTspdFtvLTFdPWFyZ3VtZW50c1tvXTtyZXR1cm4gUnQoTmkobik/TW8obik6W25dLGhyKHQsMSkpfSxUbi5jb25kPWZ1bmN0aW9uKGUpe3ZhciB0PW51bGw9PWU/MDplLmxlbmd0aCxuPWFhKCk7cmV0dXJuIGU9dD9qdChlLChmdW5jdGlvbihlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlWzFdKXRocm93IG5ldyBMZShhKTtyZXR1cm5bbihlWzBdKSxlWzFdXX0pKTpbXSx6cigoZnVuY3Rpb24obil7Zm9yKHZhciByPS0xOysrcjx0Oyl7dmFyIG89ZVtyXTtpZihrdChvWzBdLHRoaXMsbikpcmV0dXJuIGt0KG9bMV0sdGhpcyxuKX19KSl9LFRuLmNvbmZvcm1zPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1QbChlKTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGlyKG4sZSx0KX19KGFyKGUsMSkpfSxUbi5jb25zdGFudD1YbCxUbi5jb3VudEJ5PWZpLFRuLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPURuKGUpO3JldHVybiBudWxsPT10P246dHIobix0KX0sVG4uY3Vycnk9ZnVuY3Rpb24gZSh0LG4scil7dmFyIGE9S28odCw4LG8sbyxvLG8sbyxuPXI/bzpuKTtyZXR1cm4gYS5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyLGF9LFRuLmN1cnJ5UmlnaHQ9ZnVuY3Rpb24gZSh0LG4scil7dmFyIGE9S28odCwxNixvLG8sbyxvLG8sbj1yP286bik7cmV0dXJuIGEucGxhY2Vob2xkZXI9ZS5wbGFjZWhvbGRlcixhfSxUbi5kZWJvdW5jZT1QaSxUbi5kZWZhdWx0cz14bCxUbi5kZWZhdWx0c0RlZXA9a2wsVG4uZGVmZXI9RWksVG4uZGVsYXk9amksVG4uZGlmZmVyZW5jZT1EYSxUbi5kaWZmZXJlbmNlQnk9QmEsVG4uZGlmZmVyZW5jZVdpdGg9WmEsVG4uZHJvcD1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiByP1FyKGUsKHQ9bnx8dD09PW8/MTpwbCh0KSk8MD8wOnQscik6W119LFRuLmRyb3BSaWdodD1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiByP1FyKGUsMCwodD1yLSh0PW58fHQ9PT1vPzE6cGwodCkpKTwwPzA6dCk6W119LFRuLmRyb3BSaWdodFdoaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2NvKGUsYWEodCwzKSwhMCwhMCk6W119LFRuLmRyb3BXaGlsZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9jbyhlLGFhKHQsMyksITApOltdfSxUbi5maWxsPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBhPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gYT8obiYmXCJudW1iZXJcIiE9dHlwZW9mIG4mJnZhKGUsdCxuKSYmKG49MCxyPWEpLGZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBhPWUubGVuZ3RoO2Zvcigobj1wbChuKSk8MCYmKG49LW4+YT8wOmErbiksKHI9cj09PW98fHI+YT9hOnBsKHIpKTwwJiYocis9YSkscj1uPnI/MDpmbChyKTtuPHI7KWVbbisrXT10O3JldHVybiBlfShlLHQsbixyKSk6W119LFRuLmZpbHRlcj1mdW5jdGlvbihlLHQpe3JldHVybihOaShlKT9fdDpmcikoZSxhYSh0LDMpKX0sVG4uZmxhdE1hcD1mdW5jdGlvbihlLHQpe3JldHVybiBocih5aShlLHQpLDEpfSxUbi5mbGF0TWFwRGVlcD1mdW5jdGlvbihlLHQpe3JldHVybiBocih5aShlLHQpLHUpfSxUbi5mbGF0TWFwRGVwdGg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW49PT1vPzE6cGwobiksaHIoeWkoZSx0KSxuKX0sVG4uZmxhdHRlbj1GYSxUbi5mbGF0dGVuRGVlcD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZS5sZW5ndGg/aHIoZSx1KTpbXX0sVG4uZmxhdHRlbkRlcHRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGwhPWUmJmUubGVuZ3RoP2hyKGUsdD10PT09bz8xOnBsKHQpKTpbXX0sVG4uZmxpcD1mdW5jdGlvbihlKXtyZXR1cm4gS28oZSw1MTIpfSxUbi5mbG93PVFsLFRuLmZsb3dSaWdodD1lcyxUbi5mcm9tUGFpcnM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PS0xLG49bnVsbD09ZT8wOmUubGVuZ3RoLHI9e307Kyt0PG47KXt2YXIgbz1lW3RdO3Jbb1swXV09b1sxXX1yZXR1cm4gcn0sVG4uZnVuY3Rpb25zPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOndyKGUsUGwoZSkpfSxUbi5mdW5jdGlvbnNJbj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9bXTp3cihlLEVsKGUpKX0sVG4uZ3JvdXBCeT1taSxUbi5pbml0aWFsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlLmxlbmd0aD9RcihlLDAsLTEpOltdfSxUbi5pbnRlcnNlY3Rpb249VWEsVG4uaW50ZXJzZWN0aW9uQnk9emEsVG4uaW50ZXJzZWN0aW9uV2l0aD1HYSxUbi5pbnZlcnQ9TWwsVG4uaW52ZXJ0Qnk9TGwsVG4uaW52b2tlTWFwPXdpLFRuLml0ZXJhdGVlPW5zLFRuLmtleUJ5PWJpLFRuLmtleXM9UGwsVG4ua2V5c0luPUVsLFRuLm1hcD15aSxUbi5tYXBLZXlzPWZ1bmN0aW9uKGUsdCl7dmFyIG49e307cmV0dXJuIHQ9YWEodCwzKSxDcihlLChmdW5jdGlvbihlLHIsbyl7bnIobix0KGUscixvKSxlKX0pKSxufSxUbi5tYXBWYWx1ZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtyZXR1cm4gdD1hYSh0LDMpLENyKGUsKGZ1bmN0aW9uKGUscixvKXtucihuLHIsdChlLHIsbykpfSkpLG59LFRuLm1hdGNoZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIEFyKGFyKGUsMSkpfSxUbi5tYXRjaGVzUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVHIoZSxhcih0LDEpKX0sVG4ubWVtb2l6ZT1SaSxUbi5tZXJnZT1qbCxUbi5tZXJnZVdpdGg9UmwsVG4ubWV0aG9kPXJzLFRuLm1ldGhvZE9mPW9zLFRuLm1peGluPWFzLFRuLm5lZ2F0ZT1JaSxUbi5udGhBcmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9cGwoZSksenIoKGZ1bmN0aW9uKHQpe3JldHVybiBCcih0LGUpfSkpfSxUbi5vbWl0PUlsLFRuLm9taXRCeT1mdW5jdGlvbihlLHQpe3JldHVybiBIbChlLElpKGFhKHQpKSl9LFRuLm9uY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIE1pKDIsZSl9LFRuLm9yZGVyQnk9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG51bGw9PWU/W106KE5pKHQpfHwodD1udWxsPT10P1tdOlt0XSksTmkobj1yP286bil8fChuPW51bGw9PW4/W106W25dKSxacihlLHQsbikpfSxUbi5vdmVyPWxzLFRuLm92ZXJBcmdzPVZpLFRuLm92ZXJFdmVyeT1zcyxUbi5vdmVyU29tZT1jcyxUbi5wYXJ0aWFsPUhpLFRuLnBhcnRpYWxSaWdodD1BaSxUbi5wYXJ0aXRpb249eGksVG4ucGljaz1WbCxUbi5waWNrQnk9SGwsVG4ucHJvcGVydHk9dXMsVG4ucHJvcGVydHlPZj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PWU/bzpicihlLHQpfX0sVG4ucHVsbD1xYSxUbi5wdWxsQWxsPVlhLFRuLnB1bGxBbGxCeT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJmUubGVuZ3RoJiZ0JiZ0Lmxlbmd0aD9OcihlLHQsYWEobiwyKSk6ZX0sVG4ucHVsbEFsbFdpdGg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlJiZlLmxlbmd0aCYmdCYmdC5sZW5ndGg/TnIoZSx0LG8sbik6ZX0sVG4ucHVsbEF0PUphLFRuLnJhbmdlPWRzLFRuLnJhbmdlUmlnaHQ9cHMsVG4ucmVhcmc9VGksVG4ucmVqZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKE5pKGUpP190OmZyKShlLElpKGFhKHQsMykpKX0sVG4ucmVtb3ZlPWZ1bmN0aW9uKGUsdCl7dmFyIG49W107aWYoIWV8fCFlLmxlbmd0aClyZXR1cm4gbjt2YXIgcj0tMSxvPVtdLGE9ZS5sZW5ndGg7Zm9yKHQ9YWEodCwzKTsrK3I8YTspe3ZhciBpPWVbcl07dChpLHIsZSkmJihuLnB1c2goaSksby5wdXNoKHIpKX1yZXR1cm4gRnIoZSxvKSxufSxUbi5yZXN0PWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgTGUoYSk7cmV0dXJuIHpyKGUsdD10PT09bz90OnBsKHQpKX0sVG4ucmV2ZXJzZT1YYSxUbi5zYW1wbGVTaXplPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD0obj92YShlLHQsbik6dD09PW8pPzE6cGwodCksKE5pKGUpP3FuOktyKShlLHQpfSxUbi5zZXQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT1lP2U6cXIoZSx0LG4pfSxUbi5zZXRXaXRoPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiByPVwiZnVuY3Rpb25cIj09dHlwZW9mIHI/cjpvLG51bGw9PWU/ZTpxcihlLHQsbixyKX0sVG4uc2h1ZmZsZT1mdW5jdGlvbihlKXtyZXR1cm4oTmkoZSk/WW46WHIpKGUpfSxUbi5zbGljZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiByPyhuJiZcIm51bWJlclwiIT10eXBlb2YgbiYmdmEoZSx0LG4pPyh0PTAsbj1yKToodD1udWxsPT10PzA6cGwodCksbj1uPT09bz9yOnBsKG4pKSxRcihlLHQsbikpOltdfSxUbi5zb3J0Qnk9a2ksVG4uc29ydGVkVW5pcT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/cm8oZSk6W119LFRuLnNvcnRlZFVuaXFCeT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9ybyhlLGFhKHQsMikpOltdfSxUbi5zcGxpdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4mJlwibnVtYmVyXCIhPXR5cGVvZiBuJiZ2YShlLHQsbikmJih0PW49byksKG49bj09PW8/ZjpuPj4+MCk/KGU9dmwoZSkpJiYoXCJzdHJpbmdcIj09dHlwZW9mIHR8fG51bGwhPXQmJiFybCh0KSkmJiEodD1hbyh0KSkmJnJuKGUpP21vKHVuKGUpLDAsbik6ZS5zcGxpdCh0LG4pOltdfSxUbi5zcHJlYWQ9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBMZShhKTtyZXR1cm4gdD1udWxsPT10PzA6Z24ocGwodCksMCksenIoKGZ1bmN0aW9uKG4pe3ZhciByPW5bdF0sbz1tbyhuLDAsdCk7cmV0dXJuIHImJlJ0KG8sciksa3QoZSx0aGlzLG8pfSkpfSxUbi50YWlsPWZ1bmN0aW9uKGUpe3ZhciB0PW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gdD9RcihlLDEsdCk6W119LFRuLnRha2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlJiZlLmxlbmd0aD9RcihlLDAsKHQ9bnx8dD09PW8/MTpwbCh0KSk8MD8wOnQpOltdfSxUbi50YWtlUmlnaHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gcj9RcihlLCh0PXItKHQ9bnx8dD09PW8/MTpwbCh0KSkpPDA/MDp0LHIpOltdfSxUbi50YWtlUmlnaHRXaGlsZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9jbyhlLGFhKHQsMyksITEsITApOltdfSxUbi50YWtlV2hpbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/Y28oZSxhYSh0LDMpKTpbXX0sVG4udGFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQoZSksZX0sVG4udGhyb3R0bGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSEwLG89ITA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgTGUoYSk7cmV0dXJuIFhpKG4pJiYocj1cImxlYWRpbmdcImluIG4/ISFuLmxlYWRpbmc6cixvPVwidHJhaWxpbmdcImluIG4/ISFuLnRyYWlsaW5nOm8pLFBpKGUsdCx7bGVhZGluZzpyLG1heFdhaXQ6dCx0cmFpbGluZzpvfSl9LFRuLnRocnU9ZGksVG4udG9BcnJheT11bCxUbi50b1BhaXJzPUFsLFRuLnRvUGFpcnNJbj1UbCxUbi50b1BhdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIE5pKGUpP2p0KGUsSGEpOmlsKGUpP1tlXTpNbyhWYSh2bChlKSkpfSxUbi50b1BsYWluT2JqZWN0PWdsLFRuLnRyYW5zZm9ybT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmkoZSksbz1yfHx6aShlKXx8bGwoZSk7aWYodD1hYSh0LDQpLG51bGw9PW4pe3ZhciBhPWUmJmUuY29uc3RydWN0b3I7bj1vP3I/bmV3IGE6W106WGkoZSkmJnFpKGEpP0RuKFdlKGUpKTp7fX1yZXR1cm4obz9PdDpDcikoZSwoZnVuY3Rpb24oZSxyLG8pe3JldHVybiB0KG4sZSxyLG8pfSkpLG59LFRuLnVuYXJ5PWZ1bmN0aW9uKGUpe3JldHVybiBPaShlLDEpfSxUbi51bmlvbj1RYSxUbi51bmlvbkJ5PWVpLFRuLnVuaW9uV2l0aD10aSxUbi51bmlxPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD9pbyhlKTpbXX0sVG4udW5pcUJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2lvKGUsYWEodCwyKSk6W119LFRuLnVuaXFXaXRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8sZSYmZS5sZW5ndGg/aW8oZSxvLHQpOltdfSxUbi51bnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lfHxsbyhlLHQpfSxUbi51bnppcD1uaSxUbi51bnppcFdpdGg9cmksVG4udXBkYXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09ZT9lOnNvKGUsdCxnbyhuKSl9LFRuLnVwZGF0ZVdpdGg9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHI9XCJmdW5jdGlvblwiPT10eXBlb2Ygcj9yOm8sbnVsbD09ZT9lOnNvKGUsdCxnbyhuKSxyKX0sVG4udmFsdWVzPURsLFRuLnZhbHVlc0luPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOll0KGUsRWwoZSkpfSxUbi53aXRob3V0PW9pLFRuLndvcmRzPXFsLFRuLndyYXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSGkoZ28odCksZSl9LFRuLnhvcj1haSxUbi54b3JCeT1paSxUbi54b3JXaXRoPWxpLFRuLnppcD1zaSxUbi56aXBPYmplY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZm8oZXx8W10sdHx8W10sWG4pfSxUbi56aXBPYmplY3REZWVwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZvKGV8fFtdLHR8fFtdLHFyKX0sVG4uemlwV2l0aD1jaSxUbi5lbnRyaWVzPUFsLFRuLmVudHJpZXNJbj1UbCxUbi5leHRlbmQ9bWwsVG4uZXh0ZW5kV2l0aD13bCxhcyhUbixUbiksVG4uYWRkPXZzLFRuLmF0dGVtcHQ9WWwsVG4uY2FtZWxDYXNlPUJsLFRuLmNhcGl0YWxpemU9WmwsVG4uY2VpbD1DcyxUbi5jbGFtcD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49PT1vJiYobj10LHQ9byksbiE9PW8mJihuPShuPWhsKG4pKT09bj9uOjApLHQhPT1vJiYodD0odD1obCh0KSk9PXQ/dDowKSxvcihobChlKSx0LG4pfSxUbi5jbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gYXIoZSw0KX0sVG4uY2xvbmVEZWVwPWZ1bmN0aW9uKGUpe3JldHVybiBhcihlLDUpfSxUbi5jbG9uZURlZXBXaXRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFyKGUsNSx0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvKX0sVG4uY2xvbmVXaXRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFyKGUsNCx0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvKX0sVG4uY29uZm9ybXNUbz1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT10fHxpcihlLHQsUGwodCkpfSxUbi5kZWJ1cnI9JGwsVG4uZGVmYXVsdFRvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWV8fGUhPWU/dDplfSxUbi5kaXZpZGU9bXMsVG4uZW5kc1dpdGg9ZnVuY3Rpb24oZSx0LG4pe2U9dmwoZSksdD1hbyh0KTt2YXIgcj1lLmxlbmd0aCxhPW49bj09PW8/cjpvcihwbChuKSwwLHIpO3JldHVybihuLT10Lmxlbmd0aCk+PTAmJmUuc2xpY2UobixhKT09dH0sVG4uZXE9RGksVG4uZXNjYXBlPWZ1bmN0aW9uKGUpe3JldHVybihlPXZsKGUpKSYmSy50ZXN0KGUpP2UucmVwbGFjZSh6LHRuKTplfSxUbi5lc2NhcGVSZWdFeHA9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dmwoZSkpJiZuZS50ZXN0KGUpP2UucmVwbGFjZSh0ZSxcIlxcXFwkJlwiKTplfSxUbi5ldmVyeT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmkoZSk/THQ6ZHI7cmV0dXJuIG4mJnZhKGUsdCxuKSYmKHQ9bykscihlLGFhKHQsMykpfSxUbi5maW5kPWhpLFRuLmZpbmRJbmRleD0kYSxUbi5maW5kS2V5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFR0KGUsYWEodCwzKSxDcil9LFRuLmZpbmRMYXN0PWdpLFRuLmZpbmRMYXN0SW5kZXg9TmEsVG4uZmluZExhc3RLZXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVHQoZSxhYSh0LDMpLG1yKX0sVG4uZmxvb3I9d3MsVG4uZm9yRWFjaD12aSxUbi5mb3JFYWNoUmlnaHQ9Q2ksVG4uZm9ySW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT9lOmdyKGUsYWEodCwzKSxFbCl9LFRuLmZvckluUmlnaHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT9lOnZyKGUsYWEodCwzKSxFbCl9LFRuLmZvck93bj1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZDcihlLGFhKHQsMykpfSxUbi5mb3JPd25SaWdodD1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZtcihlLGFhKHQsMykpfSxUbi5nZXQ9U2wsVG4uZ3Q9QmksVG4uZ3RlPVppLFRuLmhhcz1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsIT1lJiZwYShlLHQsU3IpfSxUbi5oYXNJbj1PbCxUbi5oZWFkPVdhLFRuLmlkZW50aXR5PXRzLFRuLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxuLHIpe2U9V2koZSk/ZTpEbChlKSxuPW4mJiFyP3BsKG4pOjA7dmFyIG89ZS5sZW5ndGg7cmV0dXJuIG48MCYmKG49Z24obytuLDApKSxhbChlKT9uPD1vJiZlLmluZGV4T2YodCxuKT4tMTohIW8mJkJ0KGUsdCxuKT4tMX0sVG4uaW5kZXhPZj1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFyKXJldHVybi0xO3ZhciBvPW51bGw9PW4/MDpwbChuKTtyZXR1cm4gbzwwJiYobz1nbihyK28sMCkpLEJ0KGUsdCxvKX0sVG4uaW5SYW5nZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9ZGwodCksbj09PW8/KG49dCx0PTApOm49ZGwobiksZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPj12bih0LG4pJiZlPGduKHQsbil9KGU9aGwoZSksdCxuKX0sVG4uaW52b2tlPV9sLFRuLmlzQXJndW1lbnRzPSRpLFRuLmlzQXJyYXk9TmksVG4uaXNBcnJheUJ1ZmZlcj1GaSxUbi5pc0FycmF5TGlrZT1XaSxUbi5pc0FycmF5TGlrZU9iamVjdD1VaSxUbi5pc0Jvb2xlYW49ZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lfHwhMT09PWV8fFFpKGUpJiZ4cihlKT09Q30sVG4uaXNCdWZmZXI9emksVG4uaXNEYXRlPUdpLFRuLmlzRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gUWkoZSkmJjE9PT1lLm5vZGVUeXBlJiYhbmwoZSl9LFRuLmlzRW1wdHk9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSlyZXR1cm4hMDtpZihXaShlKSYmKE5pKGUpfHxcInN0cmluZ1wiPT10eXBlb2YgZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZS5zcGxpY2V8fHppKGUpfHxsbChlKXx8JGkoZSkpKXJldHVybiFlLmxlbmd0aDt2YXIgdD1kYShlKTtpZih0PT14fHx0PT1MKXJldHVybiFlLnNpemU7aWYoYmEoZSkpcmV0dXJuIUlyKGUpLmxlbmd0aDtmb3IodmFyIG4gaW4gZSlpZihJZS5jYWxsKGUsbikpcmV0dXJuITE7cmV0dXJuITB9LFRuLmlzRXF1YWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUHIoZSx0KX0sVG4uaXNFcXVhbFdpdGg9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPShuPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpvKT9uKGUsdCk6bztyZXR1cm4gcj09PW8/UHIoZSx0LG8sbik6ISFyfSxUbi5pc0Vycm9yPUtpLFRuLmlzRmluaXRlPWZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZBdChlKX0sVG4uaXNGdW5jdGlvbj1xaSxUbi5pc0ludGVnZXI9WWksVG4uaXNMZW5ndGg9SmksVG4uaXNNYXA9ZWwsVG4uaXNNYXRjaD1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dHx8RXIoZSx0LGxhKHQpKX0sVG4uaXNNYXRjaFdpdGg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpvLEVyKGUsdCxsYSh0KSxuKX0sVG4uaXNOYU49ZnVuY3Rpb24oZSl7cmV0dXJuIHRsKGUpJiZlIT0rZX0sVG4uaXNOYXRpdmU9ZnVuY3Rpb24oZSl7aWYod2EoZSkpdGhyb3cgbmV3IHllKFwiVW5zdXBwb3J0ZWQgY29yZS1qcyB1c2UuIFRyeSBodHRwczovL25wbXMuaW8vc2VhcmNoP3E9cG9ueWZpbGwuXCIpO3JldHVybiBqcihlKX0sVG4uaXNOaWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV9LFRuLmlzTnVsbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV9LFRuLmlzTnVtYmVyPXRsLFRuLmlzT2JqZWN0PVhpLFRuLmlzT2JqZWN0TGlrZT1RaSxUbi5pc1BsYWluT2JqZWN0PW5sLFRuLmlzUmVnRXhwPXJsLFRuLmlzU2FmZUludGVnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIFlpKGUpJiZlPj0tOTAwNzE5OTI1NDc0MDk5MSYmZTw9ZH0sVG4uaXNTZXQ9b2wsVG4uaXNTdHJpbmc9YWwsVG4uaXNTeW1ib2w9aWwsVG4uaXNUeXBlZEFycmF5PWxsLFRuLmlzVW5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09b30sVG4uaXNXZWFrTWFwPWZ1bmN0aW9uKGUpe3JldHVybiBRaShlKSYmZGEoZSk9PUV9LFRuLmlzV2Vha1NldD1mdW5jdGlvbihlKXtyZXR1cm4gUWkoZSkmJlwiW29iamVjdCBXZWFrU2V0XVwiPT14cihlKX0sVG4uam9pbj1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP1wiXCI6V3QuY2FsbChlLHQpfSxUbi5rZWJhYkNhc2U9TmwsVG4ubGFzdD1LYSxUbi5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFyKXJldHVybi0xO3ZhciBhPXI7cmV0dXJuIG4hPT1vJiYoYT0oYT1wbChuKSk8MD9nbihyK2EsMCk6dm4oYSxyLTEpKSx0PT10P2Z1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bisxO3ItLTspaWYoZVtyXT09PXQpcmV0dXJuIHI7cmV0dXJuIHJ9KGUsdCxhKTpEdChlLCR0LGEsITApfSxUbi5sb3dlckNhc2U9RmwsVG4ubG93ZXJGaXJzdD1XbCxUbi5sdD1zbCxUbi5sdGU9Y2wsVG4ubWF4PWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD9wcihlLHRzLGtyKTpvfSxUbi5tYXhCeT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9wcihlLGFhKHQsMiksa3IpOm99LFRuLm1lYW49ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGUsdHMpfSxUbi5tZWFuQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTnQoZSxhYSh0LDIpKX0sVG4ubWluPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD9wcihlLHRzLFZyKTpvfSxUbi5taW5CeT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9wcihlLGFhKHQsMiksVnIpOm99LFRuLnN0dWJBcnJheT1mcyxUbi5zdHViRmFsc2U9aHMsVG4uc3R1Yk9iamVjdD1mdW5jdGlvbigpe3JldHVybnt9fSxUbi5zdHViU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJcIn0sVG4uc3R1YlRydWU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sVG4ubXVsdGlwbHk9YnMsVG4ubnRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP0JyKGUscGwodCkpOm99LFRuLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZHQuXz09PXRoaXMmJihkdC5fPURlKSx0aGlzfSxUbi5ub29wPWlzLFRuLm5vdz1TaSxUbi5wYWQ9ZnVuY3Rpb24oZSx0LG4pe2U9dmwoZSk7dmFyIHI9KHQ9cGwodCkpP2NuKGUpOjA7aWYoIXR8fHI+PXQpcmV0dXJuIGU7dmFyIG89KHQtcikvMjtyZXR1cm4gJG8oZnQobyksbikrZSskbyhwdChvKSxuKX0sVG4ucGFkRW5kPWZ1bmN0aW9uKGUsdCxuKXtlPXZsKGUpO3ZhciByPSh0PXBsKHQpKT9jbihlKTowO3JldHVybiB0JiZyPHQ/ZSskbyh0LXIsbik6ZX0sVG4ucGFkU3RhcnQ9ZnVuY3Rpb24oZSx0LG4pe2U9dmwoZSk7dmFyIHI9KHQ9cGwodCkpP2NuKGUpOjA7cmV0dXJuIHQmJnI8dD8kbyh0LXIsbikrZTplfSxUbi5wYXJzZUludD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG58fG51bGw9PXQ/dD0wOnQmJih0PSt0KSxtbih2bChlKS5yZXBsYWNlKHJlLFwiXCIpLHR8fDApfSxUbi5yYW5kb209ZnVuY3Rpb24oZSx0LG4pe2lmKG4mJlwiYm9vbGVhblwiIT10eXBlb2YgbiYmdmEoZSx0LG4pJiYodD1uPW8pLG49PT1vJiYoXCJib29sZWFuXCI9PXR5cGVvZiB0PyhuPXQsdD1vKTpcImJvb2xlYW5cIj09dHlwZW9mIGUmJihuPWUsZT1vKSksZT09PW8mJnQ9PT1vPyhlPTAsdD0xKTooZT1kbChlKSx0PT09bz8odD1lLGU9MCk6dD1kbCh0KSksZT50KXt2YXIgcj1lO2U9dCx0PXJ9aWYobnx8ZSUxfHx0JTEpe3ZhciBhPXduKCk7cmV0dXJuIHZuKGUrYSoodC1lK2x0KFwiMWUtXCIrKChhK1wiXCIpLmxlbmd0aC0xKSkpLHQpfXJldHVybiBXcihlLHQpfSxUbi5yZWR1Y2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPU5pKGUpP0l0OlV0LG89YXJndW1lbnRzLmxlbmd0aDwzO3JldHVybiByKGUsYWEodCw0KSxuLG8sY3IpfSxUbi5yZWR1Y2VSaWdodD1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmkoZSk/VnQ6VXQsbz1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIHIoZSxhYSh0LDQpLG4sbyx1cil9LFRuLnJlcGVhdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9KG4/dmEoZSx0LG4pOnQ9PT1vKT8xOnBsKHQpLFVyKHZsKGUpLHQpfSxUbi5yZXBsYWNlPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLHQ9dmwoZVswXSk7cmV0dXJuIGUubGVuZ3RoPDM/dDp0LnJlcGxhY2UoZVsxXSxlWzJdKX0sVG4ucmVzdWx0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0tMSxhPSh0PXZvKHQsZSkpLmxlbmd0aDtmb3IoYXx8KGE9MSxlPW8pOysrcjxhOyl7dmFyIGk9bnVsbD09ZT9vOmVbSGEodFtyXSldO2k9PT1vJiYocj1hLGk9biksZT1xaShpKT9pLmNhbGwoZSk6aX1yZXR1cm4gZX0sVG4ucm91bmQ9eXMsVG4ucnVuSW5Db250ZXh0PWUsVG4uc2FtcGxlPWZ1bmN0aW9uKGUpe3JldHVybihOaShlKT9LbjpHcikoZSl9LFRuLnNpemU9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSlyZXR1cm4gMDtpZihXaShlKSlyZXR1cm4gYWwoZSk/Y24oZSk6ZS5sZW5ndGg7dmFyIHQ9ZGEoZSk7cmV0dXJuIHQ9PXh8fHQ9PUw/ZS5zaXplOklyKGUpLmxlbmd0aH0sVG4uc25ha2VDYXNlPVVsLFRuLnNvbWU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPU5pKGUpP0h0OmVvO3JldHVybiBuJiZ2YShlLHQsbikmJih0PW8pLHIoZSxhYSh0LDMpKX0sVG4uc29ydGVkSW5kZXg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdG8oZSx0KX0sVG4uc29ydGVkSW5kZXhCeT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5vKGUsdCxhYShuLDIpKX0sVG4uc29ydGVkSW5kZXhPZj1mdW5jdGlvbihlLHQpe3ZhciBuPW51bGw9PWU/MDplLmxlbmd0aDtpZihuKXt2YXIgcj10byhlLHQpO2lmKHI8biYmRGkoZVtyXSx0KSlyZXR1cm4gcn1yZXR1cm4tMX0sVG4uc29ydGVkTGFzdEluZGV4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRvKGUsdCwhMCl9LFRuLnNvcnRlZExhc3RJbmRleEJ5PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbm8oZSx0LGFhKG4sMiksITApfSxUbi5zb3J0ZWRMYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQpe2lmKG51bGwhPWUmJmUubGVuZ3RoKXt2YXIgbj10byhlLHQsITApLTE7aWYoRGkoZVtuXSx0KSlyZXR1cm4gbn1yZXR1cm4tMX0sVG4uc3RhcnRDYXNlPXpsLFRuLnN0YXJ0c1dpdGg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPXZsKGUpLG49bnVsbD09bj8wOm9yKHBsKG4pLDAsZS5sZW5ndGgpLHQ9YW8odCksZS5zbGljZShuLG4rdC5sZW5ndGgpPT10fSxUbi5zdWJ0cmFjdD14cyxUbi5zdW09ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP3p0KGUsdHMpOjB9LFRuLnN1bUJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP3p0KGUsYWEodCwyKSk6MH0sVG4udGVtcGxhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVRuLnRlbXBsYXRlU2V0dGluZ3M7biYmdmEoZSx0LG4pJiYodD1vKSxlPXZsKGUpLHQ9d2woe30sdCxyLHFvKTt2YXIgYSxpLGw9d2woe30sdC5pbXBvcnRzLHIuaW1wb3J0cyxxbykscz1QbChsKSxjPVl0KGwscyksdT0wLGQ9dC5pbnRlcnBvbGF0ZXx8d2UscD1cIl9fcCArPSAnXCIsZj1PZSgodC5lc2NhcGV8fHdlKS5zb3VyY2UrXCJ8XCIrZC5zb3VyY2UrXCJ8XCIrKGQ9PT1KP2RlOndlKS5zb3VyY2UrXCJ8XCIrKHQuZXZhbHVhdGV8fHdlKS5zb3VyY2UrXCJ8JFwiLFwiZ1wiKSxoPVwiLy8jIHNvdXJjZVVSTD1cIisoSWUuY2FsbCh0LFwic291cmNlVVJMXCIpPyh0LnNvdXJjZVVSTCtcIlwiKS5yZXBsYWNlKC9cXHMvZyxcIiBcIik6XCJsb2Rhc2gudGVtcGxhdGVTb3VyY2VzW1wiKyArK3J0K1wiXVwiKStcIlxcblwiO2UucmVwbGFjZShmLChmdW5jdGlvbih0LG4scixvLGwscyl7cmV0dXJuIHJ8fChyPW8pLHArPWUuc2xpY2UodSxzKS5yZXBsYWNlKGJlLG5uKSxuJiYoYT0hMCxwKz1cIicgK1xcbl9fZShcIituK1wiKSArXFxuJ1wiKSxsJiYoaT0hMCxwKz1cIic7XFxuXCIrbCtcIjtcXG5fX3AgKz0gJ1wiKSxyJiYocCs9XCInICtcXG4oKF9fdCA9IChcIityK1wiKSkgPT0gbnVsbCA/ICcnIDogX190KSArXFxuJ1wiKSx1PXMrdC5sZW5ndGgsdH0pKSxwKz1cIic7XFxuXCI7dmFyIGc9SWUuY2FsbCh0LFwidmFyaWFibGVcIikmJnQudmFyaWFibGU7aWYoZyl7aWYoY2UudGVzdChnKSl0aHJvdyBuZXcgeWUoXCJJbnZhbGlkIGB2YXJpYWJsZWAgb3B0aW9uIHBhc3NlZCBpbnRvIGBfLnRlbXBsYXRlYFwiKX1lbHNlIHA9XCJ3aXRoIChvYmopIHtcXG5cIitwK1wiXFxufVxcblwiO3A9KGk/cC5yZXBsYWNlKE4sXCJcIik6cCkucmVwbGFjZShGLFwiJDFcIikucmVwbGFjZShXLFwiJDE7XCIpLHA9XCJmdW5jdGlvbihcIisoZ3x8XCJvYmpcIikrXCIpIHtcXG5cIisoZz9cIlwiOlwib2JqIHx8IChvYmogPSB7fSk7XFxuXCIpK1widmFyIF9fdCwgX19wID0gJydcIisoYT9cIiwgX19lID0gXy5lc2NhcGVcIjpcIlwiKSsoaT9cIiwgX19qID0gQXJyYXkucHJvdG90eXBlLmpvaW47XFxuZnVuY3Rpb24gcHJpbnQoKSB7IF9fcCArPSBfX2ouY2FsbChhcmd1bWVudHMsICcnKSB9XFxuXCI6XCI7XFxuXCIpK3ArXCJyZXR1cm4gX19wXFxufVwiO3ZhciB2PVlsKChmdW5jdGlvbigpe3JldHVybiB4ZShzLGgrXCJyZXR1cm4gXCIrcCkuYXBwbHkobyxjKX0pKTtpZih2LnNvdXJjZT1wLEtpKHYpKXRocm93IHY7cmV0dXJuIHZ9LFRuLnRpbWVzPWZ1bmN0aW9uKGUsdCl7aWYoKGU9cGwoZSkpPDF8fGU+ZClyZXR1cm5bXTt2YXIgbj1mLHI9dm4oZSxmKTt0PWFhKHQpLGUtPWY7Zm9yKHZhciBvPUd0KHIsdCk7KytuPGU7KXQobik7cmV0dXJuIG99LFRuLnRvRmluaXRlPWRsLFRuLnRvSW50ZWdlcj1wbCxUbi50b0xlbmd0aD1mbCxUbi50b0xvd2VyPWZ1bmN0aW9uKGUpe3JldHVybiB2bChlKS50b0xvd2VyQ2FzZSgpfSxUbi50b051bWJlcj1obCxUbi50b1NhZmVJbnRlZ2VyPWZ1bmN0aW9uKGUpe3JldHVybiBlP29yKHBsKGUpLC05MDA3MTk5MjU0NzQwOTkxLGQpOjA9PT1lP2U6MH0sVG4udG9TdHJpbmc9dmwsVG4udG9VcHBlcj1mdW5jdGlvbihlKXtyZXR1cm4gdmwoZSkudG9VcHBlckNhc2UoKX0sVG4udHJpbT1mdW5jdGlvbihlLHQsbil7aWYoKGU9dmwoZSkpJiYobnx8dD09PW8pKXJldHVybiBLdChlKTtpZighZXx8ISh0PWFvKHQpKSlyZXR1cm4gZTt2YXIgcj11bihlKSxhPXVuKHQpO3JldHVybiBtbyhyLFh0KHIsYSksUXQocixhKSsxKS5qb2luKFwiXCIpfSxUbi50cmltRW5kPWZ1bmN0aW9uKGUsdCxuKXtpZigoZT12bChlKSkmJihufHx0PT09bykpcmV0dXJuIGUuc2xpY2UoMCxkbihlKSsxKTtpZighZXx8ISh0PWFvKHQpKSlyZXR1cm4gZTt2YXIgcj11bihlKTtyZXR1cm4gbW8ociwwLFF0KHIsdW4odCkpKzEpLmpvaW4oXCJcIil9LFRuLnRyaW1TdGFydD1mdW5jdGlvbihlLHQsbil7aWYoKGU9dmwoZSkpJiYobnx8dD09PW8pKXJldHVybiBlLnJlcGxhY2UocmUsXCJcIik7aWYoIWV8fCEodD1hbyh0KSkpcmV0dXJuIGU7dmFyIHI9dW4oZSk7cmV0dXJuIG1vKHIsWHQocix1bih0KSkpLmpvaW4oXCJcIil9LFRuLnRydW5jYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49MzAscj1cIi4uLlwiO2lmKFhpKHQpKXt2YXIgYT1cInNlcGFyYXRvclwiaW4gdD90LnNlcGFyYXRvcjphO249XCJsZW5ndGhcImluIHQ/cGwodC5sZW5ndGgpOm4scj1cIm9taXNzaW9uXCJpbiB0P2FvKHQub21pc3Npb24pOnJ9dmFyIGk9KGU9dmwoZSkpLmxlbmd0aDtpZihybihlKSl7dmFyIGw9dW4oZSk7aT1sLmxlbmd0aH1pZihuPj1pKXJldHVybiBlO3ZhciBzPW4tY24ocik7aWYoczwxKXJldHVybiByO3ZhciBjPWw/bW8obCwwLHMpLmpvaW4oXCJcIik6ZS5zbGljZSgwLHMpO2lmKGE9PT1vKXJldHVybiBjK3I7aWYobCYmKHMrPWMubGVuZ3RoLXMpLHJsKGEpKXtpZihlLnNsaWNlKHMpLnNlYXJjaChhKSl7dmFyIHUsZD1jO2ZvcihhLmdsb2JhbHx8KGE9T2UoYS5zb3VyY2UsdmwocGUuZXhlYyhhKSkrXCJnXCIpKSxhLmxhc3RJbmRleD0wO3U9YS5leGVjKGQpOyl2YXIgcD11LmluZGV4O2M9Yy5zbGljZSgwLHA9PT1vP3M6cCl9fWVsc2UgaWYoZS5pbmRleE9mKGFvKGEpLHMpIT1zKXt2YXIgZj1jLmxhc3RJbmRleE9mKGEpO2Y+LTEmJihjPWMuc2xpY2UoMCxmKSl9cmV0dXJuIGMrcn0sVG4udW5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dmwoZSkpJiZHLnRlc3QoZSk/ZS5yZXBsYWNlKFUscG4pOmV9LFRuLnVuaXF1ZUlkPWZ1bmN0aW9uKGUpe3ZhciB0PSsrVmU7cmV0dXJuIHZsKGUpK3R9LFRuLnVwcGVyQ2FzZT1HbCxUbi51cHBlckZpcnN0PUtsLFRuLmVhY2g9dmksVG4uZWFjaFJpZ2h0PUNpLFRuLmZpcnN0PVdhLGFzKFRuLChncz17fSxDcihUbiwoZnVuY3Rpb24oZSx0KXtJZS5jYWxsKFRuLnByb3RvdHlwZSx0KXx8KGdzW3RdPWUpfSkpLGdzKSx7Y2hhaW46ITF9KSxUbi5WRVJTSU9OPVwiNC4xNy4yMVwiLE90KFtcImJpbmRcIixcImJpbmRLZXlcIixcImN1cnJ5XCIsXCJjdXJyeVJpZ2h0XCIsXCJwYXJ0aWFsXCIsXCJwYXJ0aWFsUmlnaHRcIl0sKGZ1bmN0aW9uKGUpe1RuW2VdLnBsYWNlaG9sZGVyPVRufSkpLE90KFtcImRyb3BcIixcInRha2VcIl0sKGZ1bmN0aW9uKGUsdCl7JG4ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKG4pe249bj09PW8/MTpnbihwbChuKSwwKTt2YXIgcj10aGlzLl9fZmlsdGVyZWRfXyYmIXQ/bmV3ICRuKHRoaXMpOnRoaXMuY2xvbmUoKTtyZXR1cm4gci5fX2ZpbHRlcmVkX18/ci5fX3Rha2VDb3VudF9fPXZuKG4sci5fX3Rha2VDb3VudF9fKTpyLl9fdmlld3NfXy5wdXNoKHtzaXplOnZuKG4sZiksdHlwZTplKyhyLl9fZGlyX188MD9cIlJpZ2h0XCI6XCJcIil9KSxyfSwkbi5wcm90b3R5cGVbZStcIlJpZ2h0XCJdPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJldmVyc2UoKVtlXSh0KS5yZXZlcnNlKCl9fSkpLE90KFtcImZpbHRlclwiLFwibWFwXCIsXCJ0YWtlV2hpbGVcIl0sKGZ1bmN0aW9uKGUsdCl7dmFyIG49dCsxLHI9MT09bnx8Mz09bjskbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jbG9uZSgpO3JldHVybiB0Ll9faXRlcmF0ZWVzX18ucHVzaCh7aXRlcmF0ZWU6YWEoZSwzKSx0eXBlOm59KSx0Ll9fZmlsdGVyZWRfXz10Ll9fZmlsdGVyZWRfX3x8cix0fX0pKSxPdChbXCJoZWFkXCIsXCJsYXN0XCJdLChmdW5jdGlvbihlLHQpe3ZhciBuPVwidGFrZVwiKyh0P1wiUmlnaHRcIjpcIlwiKTskbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tuXSgxKS52YWx1ZSgpWzBdfX0pKSxPdChbXCJpbml0aWFsXCIsXCJ0YWlsXCJdLChmdW5jdGlvbihlLHQpe3ZhciBuPVwiZHJvcFwiKyh0P1wiXCI6XCJSaWdodFwiKTskbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18/bmV3ICRuKHRoaXMpOnRoaXNbbl0oMSl9fSkpLCRuLnByb3RvdHlwZS5jb21wYWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsdGVyKHRzKX0sJG4ucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZmlsdGVyKGUpLmhlYWQoKX0sJG4ucHJvdG90eXBlLmZpbmRMYXN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJldmVyc2UoKS5maW5kKGUpfSwkbi5wcm90b3R5cGUuaW52b2tlTWFwPXpyKChmdW5jdGlvbihlLHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/bmV3ICRuKHRoaXMpOnRoaXMubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gTHIobixlLHQpfSkpfSkpLCRuLnByb3RvdHlwZS5yZWplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZmlsdGVyKElpKGFhKGUpKSl9LCRuLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe2U9cGwoZSk7dmFyIG49dGhpcztyZXR1cm4gbi5fX2ZpbHRlcmVkX18mJihlPjB8fHQ8MCk/bmV3ICRuKG4pOihlPDA/bj1uLnRha2VSaWdodCgtZSk6ZSYmKG49bi5kcm9wKGUpKSx0IT09byYmKG49KHQ9cGwodCkpPDA/bi5kcm9wUmlnaHQoLXQpOm4udGFrZSh0LWUpKSxuKX0sJG4ucHJvdG90eXBlLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUoZSkucmV2ZXJzZSgpfSwkbi5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRha2UoZil9LENyKCRuLnByb3RvdHlwZSwoZnVuY3Rpb24oZSx0KXt2YXIgbj0vXig/OmZpbHRlcnxmaW5kfG1hcHxyZWplY3QpfFdoaWxlJC8udGVzdCh0KSxyPS9eKD86aGVhZHxsYXN0KSQvLnRlc3QodCksYT1UbltyP1widGFrZVwiKyhcImxhc3RcIj09dD9cIlJpZ2h0XCI6XCJcIik6dF0saT1yfHwvXmZpbmQvLnRlc3QodCk7YSYmKFRuLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX193cmFwcGVkX18sbD1yP1sxXTphcmd1bWVudHMscz10IGluc3RhbmNlb2YgJG4sYz1sWzBdLHU9c3x8TmkodCksZD1mdW5jdGlvbihlKXt2YXIgdD1hLmFwcGx5KFRuLFJ0KFtlXSxsKSk7cmV0dXJuIHImJnA/dFswXTp0fTt1JiZuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBjJiYxIT1jLmxlbmd0aCYmKHM9dT0hMSk7dmFyIHA9dGhpcy5fX2NoYWluX18sZj0hIXRoaXMuX19hY3Rpb25zX18ubGVuZ3RoLGg9aSYmIXAsZz1zJiYhZjtpZighaSYmdSl7dD1nP3Q6bmV3ICRuKHRoaXMpO3ZhciB2PWUuYXBwbHkodCxsKTtyZXR1cm4gdi5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOmRpLGFyZ3M6W2RdLHRoaXNBcmc6b30pLG5ldyBabih2LHApfXJldHVybiBoJiZnP2UuYXBwbHkodGhpcyxsKToodj10aGlzLnRocnUoZCksaD9yP3YudmFsdWUoKVswXTp2LnZhbHVlKCk6dil9KX0pKSxPdChbXCJwb3BcIixcInB1c2hcIixcInNoaWZ0XCIsXCJzb3J0XCIsXCJzcGxpY2VcIixcInVuc2hpZnRcIl0sKGZ1bmN0aW9uKGUpe3ZhciB0PV9lW2VdLG49L14oPzpwdXNofHNvcnR8dW5zaGlmdCkkLy50ZXN0KGUpP1widGFwXCI6XCJ0aHJ1XCIscj0vXig/OnBvcHxzaGlmdCkkLy50ZXN0KGUpO1RuLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztpZihyJiYhdGhpcy5fX2NoYWluX18pe3ZhciBvPXRoaXMudmFsdWUoKTtyZXR1cm4gdC5hcHBseShOaShvKT9vOltdLGUpfXJldHVybiB0aGlzW25dKChmdW5jdGlvbihuKXtyZXR1cm4gdC5hcHBseShOaShuKT9uOltdLGUpfSkpfX0pKSxDcigkbi5wcm90b3R5cGUsKGZ1bmN0aW9uKGUsdCl7dmFyIG49VG5bdF07aWYobil7dmFyIHI9bi5uYW1lK1wiXCI7SWUuY2FsbChfbixyKXx8KF9uW3JdPVtdKSxfbltyXS5wdXNoKHtuYW1lOnQsZnVuYzpufSl9fSkpLF9uW1RvKG8sMikubmFtZV09W3tuYW1lOlwid3JhcHBlclwiLGZ1bmM6b31dLCRuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBlPW5ldyAkbih0aGlzLl9fd3JhcHBlZF9fKTtyZXR1cm4gZS5fX2FjdGlvbnNfXz1Nbyh0aGlzLl9fYWN0aW9uc19fKSxlLl9fZGlyX189dGhpcy5fX2Rpcl9fLGUuX19maWx0ZXJlZF9fPXRoaXMuX19maWx0ZXJlZF9fLGUuX19pdGVyYXRlZXNfXz1Nbyh0aGlzLl9faXRlcmF0ZWVzX18pLGUuX190YWtlQ291bnRfXz10aGlzLl9fdGFrZUNvdW50X18sZS5fX3ZpZXdzX189TW8odGhpcy5fX3ZpZXdzX18pLGV9LCRuLnByb3RvdHlwZS5yZXZlcnNlPWZ1bmN0aW9uKCl7aWYodGhpcy5fX2ZpbHRlcmVkX18pe3ZhciBlPW5ldyAkbih0aGlzKTtlLl9fZGlyX189LTEsZS5fX2ZpbHRlcmVkX189ITB9ZWxzZShlPXRoaXMuY2xvbmUoKSkuX19kaXJfXyo9LTE7cmV0dXJuIGV9LCRuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX193cmFwcGVkX18udmFsdWUoKSx0PXRoaXMuX19kaXJfXyxuPU5pKGUpLHI9dDwwLG89bj9lLmxlbmd0aDowLGE9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj0tMSxvPW4ubGVuZ3RoOysrcjxvOyl7dmFyIGE9bltyXSxpPWEuc2l6ZTtzd2l0Y2goYS50eXBlKXtjYXNlXCJkcm9wXCI6ZSs9aTticmVhaztjYXNlXCJkcm9wUmlnaHRcIjp0LT1pO2JyZWFrO2Nhc2VcInRha2VcIjp0PXZuKHQsZStpKTticmVhaztjYXNlXCJ0YWtlUmlnaHRcIjplPWduKGUsdC1pKX19cmV0dXJue3N0YXJ0OmUsZW5kOnR9fSgwLG8sdGhpcy5fX3ZpZXdzX18pLGk9YS5zdGFydCxsPWEuZW5kLHM9bC1pLGM9cj9sOmktMSx1PXRoaXMuX19pdGVyYXRlZXNfXyxkPXUubGVuZ3RoLHA9MCxmPXZuKHMsdGhpcy5fX3Rha2VDb3VudF9fKTtpZighbnx8IXImJm89PXMmJmY9PXMpcmV0dXJuIHVvKGUsdGhpcy5fX2FjdGlvbnNfXyk7dmFyIGg9W107ZTpmb3IoO3MtLSYmcDxmOyl7Zm9yKHZhciBnPS0xLHY9ZVtjKz10XTsrK2c8ZDspe3ZhciBDPXVbZ10sbT1DLml0ZXJhdGVlLHc9Qy50eXBlLGI9bSh2KTtpZigyPT13KXY9YjtlbHNlIGlmKCFiKXtpZigxPT13KWNvbnRpbnVlIGU7YnJlYWsgZX19aFtwKytdPXZ9cmV0dXJuIGh9LFRuLnByb3RvdHlwZS5hdD1waSxUbi5wcm90b3R5cGUuY2hhaW49ZnVuY3Rpb24oKXtyZXR1cm4gdWkodGhpcyl9LFRuLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFpuKHRoaXMudmFsdWUoKSx0aGlzLl9fY2hhaW5fXyl9LFRuLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dGhpcy5fX3ZhbHVlc19fPT09byYmKHRoaXMuX192YWx1ZXNfXz11bCh0aGlzLnZhbHVlKCkpKTt2YXIgZT10aGlzLl9faW5kZXhfXz49dGhpcy5fX3ZhbHVlc19fLmxlbmd0aDtyZXR1cm57ZG9uZTplLHZhbHVlOmU/bzp0aGlzLl9fdmFsdWVzX19bdGhpcy5fX2luZGV4X18rK119fSxUbi5wcm90b3R5cGUucGxhbnQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49dGhpcztuIGluc3RhbmNlb2YgQm47KXt2YXIgcj1UYShuKTtyLl9faW5kZXhfXz0wLHIuX192YWx1ZXNfXz1vLHQ/YS5fX3dyYXBwZWRfXz1yOnQ9cjt2YXIgYT1yO249bi5fX3dyYXBwZWRfX31yZXR1cm4gYS5fX3dyYXBwZWRfXz1lLHR9LFRuLnByb3RvdHlwZS5yZXZlcnNlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX3dyYXBwZWRfXztpZihlIGluc3RhbmNlb2YgJG4pe3ZhciB0PWU7cmV0dXJuIHRoaXMuX19hY3Rpb25zX18ubGVuZ3RoJiYodD1uZXcgJG4odGhpcykpLCh0PXQucmV2ZXJzZSgpKS5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOmRpLGFyZ3M6W1hhXSx0aGlzQXJnOm99KSxuZXcgWm4odCx0aGlzLl9fY2hhaW5fXyl9cmV0dXJuIHRoaXMudGhydShYYSl9LFRuLnByb3RvdHlwZS50b0pTT049VG4ucHJvdG90eXBlLnZhbHVlT2Y9VG4ucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHVvKHRoaXMuX193cmFwcGVkX18sdGhpcy5fX2FjdGlvbnNfXyl9LFRuLnByb3RvdHlwZS5maXJzdD1Ubi5wcm90b3R5cGUuaGVhZCxxZSYmKFRuLnByb3RvdHlwZVtxZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFRufSgpO2R0Ll89Zm4sKHI9ZnVuY3Rpb24oKXtyZXR1cm4gZm59LmNhbGwodCxuLHQsZSkpPT09b3x8KGUuZXhwb3J0cz1yKX0uY2FsbCh0aGlzKX0sNzQxODplPT57dmFyIHQ9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscj1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2UuZXhwb3J0cz1mdW5jdGlvbigpe3RyeXtpZighT2JqZWN0LmFzc2lnbilyZXR1cm4hMTt2YXIgZT1uZXcgU3RyaW5nKFwiYWJjXCIpO2lmKGVbNV09XCJkZVwiLFwiNVwiPT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSlbMF0pcmV0dXJuITE7Zm9yKHZhciB0PXt9LG49MDtuPDEwO24rKyl0W1wiX1wiK1N0cmluZy5mcm9tQ2hhckNvZGUobildPW47aWYoXCIwMTIzNDU2Nzg5XCIhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpLmpvaW4oXCJcIikpcmV0dXJuITE7dmFyIHI9e307cmV0dXJuXCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiLnNwbGl0KFwiXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JbZV09ZX0pKSxcImFiY2RlZmdoaWprbG1ub3BxcnN0XCI9PT1PYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LHIpKS5qb2luKFwiXCIpfWNhdGNoKGUpe3JldHVybiExfX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKGUsbyl7Zm9yKHZhciBhLGksbD1mdW5jdGlvbihlKXtpZihudWxsPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZFwiKTtyZXR1cm4gT2JqZWN0KGUpfShlKSxzPTE7czxhcmd1bWVudHMubGVuZ3RoO3MrKyl7Zm9yKHZhciBjIGluIGE9T2JqZWN0KGFyZ3VtZW50c1tzXSkpbi5jYWxsKGEsYykmJihsW2NdPWFbY10pO2lmKHQpe2k9dChhKTtmb3IodmFyIHU9MDt1PGkubGVuZ3RoO3UrKylyLmNhbGwoYSxpW3VdKSYmKGxbaVt1XV09YVtpW3VdXSl9fXJldHVybiBsfX0sOTI5NDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9big2NTUpLG89big0Mzk0KSxhPW4oMzU3MyksaT1uKDQ4MzkpO3ZhciBsPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19KGkpLHM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBNYXRoLm1pbihNYXRoLm1heChuLGUpLHQpfSxjPS4wMDEsdT0uMDEsZD0xMCxwPS4wNSxmPTEsaD0xMjtmdW5jdGlvbiBnKGUsdCl7cmV0dXJuIGUqTWF0aC5zcXJ0KDEtdCp0KX12YXIgdj1bXCJkdXJhdGlvblwiLFwiYm91bmNlXCJdLEM9W1wic3RpZmZuZXNzXCIsXCJkYW1waW5nXCIsXCJtYXNzXCJdO2Z1bmN0aW9uIG0oZSx0KXtyZXR1cm4gdC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09ZVt0XX0pKX1mdW5jdGlvbiB3KGUpe3ZhciB0PWUuZnJvbSxuPXZvaWQgMD09PXQ/MDp0LGE9ZS50byxpPXZvaWQgMD09PWE/MTphLGw9ZS5yZXN0U3BlZWQsdz12b2lkIDA9PT1sPzI6bCx5PWUucmVzdERlbHRhLHg9ci5fX3Jlc3QoZSxbXCJmcm9tXCIsXCJ0b1wiLFwicmVzdFNwZWVkXCIsXCJyZXN0RGVsdGFcIl0pLGs9e2RvbmU6ITEsdmFsdWU6bn0sUz1mdW5jdGlvbihlKXt2YXIgdD1yLl9fYXNzaWduKHt2ZWxvY2l0eTowLHN0aWZmbmVzczoxMDAsZGFtcGluZzoxMCxtYXNzOjEsaXNSZXNvbHZlZEZyb21EdXJhdGlvbjohMX0sZSk7aWYoIW0oZSxDKSYmbShlLHYpKXt2YXIgbj1mdW5jdGlvbihlKXt2YXIgdCxuLHI9ZS5kdXJhdGlvbixhPXZvaWQgMD09PXI/ODAwOnIsaT1lLmJvdW5jZSxsPXZvaWQgMD09PWk/LjI1Omksdj1lLnZlbG9jaXR5LEM9dm9pZCAwPT09dj8wOnYsbT1lLm1hc3Msdz12b2lkIDA9PT1tPzE6bTtvLndhcm5pbmcoYTw9MWUzKmQsXCJTcHJpbmcgZHVyYXRpb24gbXVzdCBiZSAxMCBzZWNvbmRzIG9yIGxlc3NcIik7dmFyIGI9MS1sO2I9cyhwLGYsYiksYT1zKHUsZCxhLzFlMyksYjwxPyh0PWZ1bmN0aW9uKGUpe3ZhciB0PWUqYixuPXQqYSxyPXQtQyxvPWcoZSxiKSxpPU1hdGguZXhwKC1uKTtyZXR1cm4gYy1yL28qaX0sbj1mdW5jdGlvbihlKXt2YXIgbj1lKmIqYSxyPW4qQytDLG89TWF0aC5wb3coYiwyKSpNYXRoLnBvdyhlLDIpKmEsaT1NYXRoLmV4cCgtbiksbD1nKE1hdGgucG93KGUsMiksYik7cmV0dXJuKC10KGUpK2M+MD8tMToxKSooKHItbykqaSkvbH0pOih0PWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmV4cCgtZSphKSooKGUtQykqYSsxKS1jfSxuPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmV4cCgtZSphKSooYSphKihDLWUpKX0pO3ZhciB5PWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bixvPTE7bzxoO28rKylyLT1lKHIpL3Qocik7cmV0dXJuIHJ9KHQsbiw1L2EpO2lmKGEqPTFlMyxpc05hTih5KSlyZXR1cm57c3RpZmZuZXNzOjEwMCxkYW1waW5nOjEwLGR1cmF0aW9uOmF9O3ZhciB4PU1hdGgucG93KHksMikqdztyZXR1cm57c3RpZmZuZXNzOngsZGFtcGluZzoyKmIqTWF0aC5zcXJ0KHcqeCksZHVyYXRpb246YX19KGUpOyh0PXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHQpLG4pLHt2ZWxvY2l0eTowLG1hc3M6MX0pKS5pc1Jlc29sdmVkRnJvbUR1cmF0aW9uPSEwfXJldHVybiB0fSh4KSxPPVMuc3RpZmZuZXNzLE09Uy5kYW1waW5nLEw9Uy5tYXNzLF89Uy52ZWxvY2l0eSxQPVMuZHVyYXRpb24sRT1TLmlzUmVzb2x2ZWRGcm9tRHVyYXRpb24saj1iLFI9YjtmdW5jdGlvbiBJKCl7dmFyIGU9Xz8tXy8xZTM6MCx0PWktbixyPU0vKDIqTWF0aC5zcXJ0KE8qTCkpLG89TWF0aC5zcXJ0KE8vTCkvMWUzO2lmKG51bGwhPXl8fCh5PU1hdGguYWJzKGktbik8PTE/LjAxOi40KSxyPDEpe3ZhciBhPWcobyxyKTtqPWZ1bmN0aW9uKG4pe3ZhciBsPU1hdGguZXhwKC1yKm8qbik7cmV0dXJuIGktbCooKGUrcipvKnQpL2EqTWF0aC5zaW4oYSpuKSt0Kk1hdGguY29zKGEqbikpfSxSPWZ1bmN0aW9uKG4pe3ZhciBpPU1hdGguZXhwKC1yKm8qbik7cmV0dXJuIHIqbyppKihNYXRoLnNpbihhKm4pKihlK3Iqbyp0KS9hK3QqTWF0aC5jb3MoYSpuKSktaSooTWF0aC5jb3MoYSpuKSooZStyKm8qdCktYSp0Kk1hdGguc2luKGEqbikpfX1lbHNlIGlmKDE9PT1yKWo9ZnVuY3Rpb24obil7cmV0dXJuIGktTWF0aC5leHAoLW8qbikqKHQrKGUrbyp0KSpuKX07ZWxzZXt2YXIgbD1vKk1hdGguc3FydChyKnItMSk7aj1mdW5jdGlvbihuKXt2YXIgYT1NYXRoLmV4cCgtcipvKm4pLHM9TWF0aC5taW4obCpuLDMwMCk7cmV0dXJuIGktYSooKGUrcipvKnQpKk1hdGguc2luaChzKStsKnQqTWF0aC5jb3NoKHMpKS9sfX19cmV0dXJuIEkoKSx7bmV4dDpmdW5jdGlvbihlKXt2YXIgdD1qKGUpO2lmKEUpay5kb25lPWU+PVA7ZWxzZXt2YXIgbj0xZTMqUihlKSxyPU1hdGguYWJzKG4pPD13LG89TWF0aC5hYnMoaS10KTw9eTtrLmRvbmU9ciYmb31yZXR1cm4gay52YWx1ZT1rLmRvbmU/aTp0LGt9LGZsaXBUYXJnZXQ6ZnVuY3Rpb24oKXt2YXIgZTtfPS1fLG49KGU9W2ksbl0pWzBdLGk9ZVsxXSxJKCl9fX13Lm5lZWRzSW50ZXJwb2xhdGlvbj1mdW5jdGlvbihlLHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfHxcInN0cmluZ1wiPT10eXBlb2YgdH07dmFyIGI9ZnVuY3Rpb24oZSl7cmV0dXJuIDB9LHk9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQtZTtyZXR1cm4gMD09PXI/MToobi1lKS9yfSx4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tbiplK24qdCtlfSxrPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKmUsbz10KnQ7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heCgwLG4qKG8tcikrcikpfSxTPVthLmhleCxhLnJnYmEsYS5oc2xhXSxPPWZ1bmN0aW9uKGUpe3JldHVybiBTLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRlc3QoZSl9KSl9LE09ZnVuY3Rpb24oZSl7cmV0dXJuXCInXCIrZStcIicgaXMgbm90IGFuIGFuaW1hdGFibGUgY29sb3IuIFVzZSB0aGUgZXF1aXZhbGVudCBjb2xvciBjb2RlIGluc3RlYWQuXCJ9LEw9ZnVuY3Rpb24oZSx0KXt2YXIgbj1PKGUpLGk9Tyh0KTtvLmludmFyaWFudCghIW4sTShlKSksby5pbnZhcmlhbnQoISFpLE0odCkpLG8uaW52YXJpYW50KG4udHJhbnNmb3JtPT09aS50cmFuc2Zvcm0sXCJCb3RoIGNvbG9ycyBtdXN0IGJlIGhleC9SR0JBLCBPUiBib3RoIG11c3QgYmUgSFNMQS5cIik7dmFyIGw9bi5wYXJzZShlKSxzPWkucGFyc2UodCksYz1yLl9fYXNzaWduKHt9LGwpLHU9bj09PWEuaHNsYT94Oms7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBjKVwiYWxwaGFcIiE9PXQmJihjW3RdPXUobFt0XSxzW3RdLGUpKTtyZXR1cm4gYy5hbHBoYT14KGwuYWxwaGEscy5hbHBoYSxlKSxuLnRyYW5zZm9ybShjKX19LF89e3g6MCx5OjAsejowfSxQPWZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlfSxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0KGUobikpfX0saj1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtyZXR1cm4gZS5yZWR1Y2UoRSl9O2Z1bmN0aW9uIFIoZSx0KXtyZXR1cm4gUChlKT9mdW5jdGlvbihuKXtyZXR1cm4geChlLHQsbil9OmEuY29sb3IudGVzdChlKT9MKGUsdCk6QShlLHQpfXZhciBJPWZ1bmN0aW9uKGUsdCl7dmFyIG49ci5fX3NwcmVhZEFycmF5KFtdLGUpLG89bi5sZW5ndGgsYT1lLm1hcCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gUihlLHRbbl0pfSkpO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PG87dCsrKW5bdF09YVt0XShlKTtyZXR1cm4gbn19LFY9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sZSksdCksbz17fTtmb3IodmFyIGEgaW4gbil2b2lkIDAhPT1lW2FdJiZ2b2lkIDAhPT10W2FdJiYob1thXT1SKGVbYV0sdFthXSkpO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gbyluW3RdPW9bdF0oZSk7cmV0dXJuIG59fTtmdW5jdGlvbiBIKGUpe2Zvcih2YXIgdD1hLmNvbXBsZXgucGFyc2UoZSksbj10Lmxlbmd0aCxyPTAsbz0wLGk9MCxsPTA7bDxuO2wrKylyfHxcIm51bWJlclwiPT10eXBlb2YgdFtsXT9yKys6dm9pZCAwIT09dFtsXS5odWU/aSsrOm8rKztyZXR1cm57cGFyc2VkOnQsbnVtTnVtYmVyczpyLG51bVJHQjpvLG51bUhTTDppfX12YXIgQT1mdW5jdGlvbihlLHQpe3ZhciBuPWEuY29tcGxleC5jcmVhdGVUcmFuc2Zvcm1lcih0KSxyPUgoZSksaT1IKHQpO3JldHVybiBvLmludmFyaWFudChyLm51bUhTTD09PWkubnVtSFNMJiZyLm51bVJHQj09PWkubnVtUkdCJiZyLm51bU51bWJlcnM+PWkubnVtTnVtYmVycyxcIkNvbXBsZXggdmFsdWVzICdcIitlK1wiJyBhbmQgJ1wiK3QrXCInIHRvbyBkaWZmZXJlbnQgdG8gbWl4LiBFbnN1cmUgYWxsIGNvbG9ycyBhcmUgb2YgdGhlIHNhbWUgdHlwZS5cIiksaihJKHIucGFyc2VkLGkucGFyc2VkKSxuKX0sVD1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4geChlLHQsbil9fTtmdW5jdGlvbiBEKGUsdCxuKXt2YXIgcj12b2lkIDA9PT1uP3t9Om4saT1yLmNsYW1wLGw9dm9pZCAwPT09aXx8aSxjPXIuZWFzZSx1PXIubWl4ZXIsZD1lLmxlbmd0aDtvLmludmFyaWFudChkPT09dC5sZW5ndGgsXCJCb3RoIGlucHV0IGFuZCBvdXRwdXQgcmFuZ2VzIG11c3QgYmUgdGhlIHNhbWUgbGVuZ3RoXCIpLG8uaW52YXJpYW50KCFjfHwhQXJyYXkuaXNBcnJheShjKXx8Yy5sZW5ndGg9PT1kLTEsXCJBcnJheSBvZiBlYXNpbmcgZnVuY3Rpb25zIG11c3QgYmUgb2YgbGVuZ3RoIGBpbnB1dC5sZW5ndGggLSAxYCwgYXMgaXQgYXBwbGllcyB0byB0aGUgdHJhbnNpdGlvbnMgKipiZXR3ZWVuKiogdGhlIGRlZmluZWQgdmFsdWVzLlwiKSxlWzBdPmVbZC0xXSYmKGU9W10uY29uY2F0KGUpLHQ9W10uY29uY2F0KHQpLGUucmV2ZXJzZSgpLHQucmV2ZXJzZSgpKTt2YXIgcD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByLG89W10saT1ufHwoXCJudW1iZXJcIj09dHlwZW9mKHI9ZVswXSk/VDpcInN0cmluZ1wiPT10eXBlb2Ygcj9hLmNvbG9yLnRlc3Qocik/TDpBOkFycmF5LmlzQXJyYXkocik/STpcIm9iamVjdFwiPT10eXBlb2Ygcj9WOnZvaWQgMCksbD1lLmxlbmd0aC0xLHM9MDtzPGw7cysrKXt2YXIgYz1pKGVbc10sZVtzKzFdKTtpZih0KXt2YXIgdT1BcnJheS5pc0FycmF5KHQpP3Rbc106dDtjPWoodSxjKX1vLnB1c2goYyl9cmV0dXJuIG99KHQsYyx1KSxmPTI9PT1kP2Z1bmN0aW9uKGUsdCl7dmFyIG49ZVswXSxyPWVbMV0sbz10WzBdO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbyh5KG4scixlKSl9fShlLHApOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5sZW5ndGgscj1uLTE7cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBhPTAsaT0hMTtpZihvPD1lWzBdP2k9ITA6bz49ZVtyXSYmKGE9ci0xLGk9ITApLCFpKXtmb3IodmFyIGw9MTtsPG4mJiEoZVtsXT5vfHxsPT09cik7bCsrKTthPWwtMX12YXIgcz15KGVbYV0sZVthKzFdLG8pO3JldHVybiB0W2FdKHMpfX0oZSxwKTtyZXR1cm4gbD9mdW5jdGlvbih0KXtyZXR1cm4gZihzKGVbMF0sZVtkLTFdLHQpKX06Zn12YXIgQj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDEtZSgxLXQpfX0sWj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PS41P2UoMip0KS8yOigyLWUoMiooMS10KSkpLzJ9fSwkPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3codCxlKX19LE49ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0KnQqKChlKzEpKnQtZSl9fSxGPWZ1bmN0aW9uKGUpe3ZhciB0PU4oZSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybihlKj0yKTwxPy41KnQoZSk6LjUqKDItTWF0aC5wb3coMiwtMTAqKGUtMSkpKX19LFc9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LFU9JCgyKSx6PUIoVSksRz1aKFUpLEs9ZnVuY3Rpb24oZSl7cmV0dXJuIDEtTWF0aC5zaW4oTWF0aC5hY29zKGUpKX0scT1CKEspLFk9WihxKSxKPU4oMS41MjUpLFg9QihKKSxRPVooSiksZWU9RigxLjUyNSksdGU9ZnVuY3Rpb24oZSl7aWYoMT09PWV8fDA9PT1lKXJldHVybiBlO3ZhciB0PWUqZTtyZXR1cm4gZTwuMzYzNjM2MzYzNjM2MzYzNjU/Ny41NjI1KnQ6ZTwuNzI3MjcyNzI3MjcyNzI3Mz85LjA3NSp0LTkuOSplKzMuNDplPC45PzEyLjA2NjQ4MTk5NDQ1OTgzMyp0LTE5LjYzNTQ1NzA2MzcxMTkxKmUrOC44OTgwNjA5NDE4MjgyNTU6MTAuOCplKmUtMjAuNTIqZSsxMC43Mn0sbmU9Qih0ZSk7ZnVuY3Rpb24gcmUoZSx0KXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIHR8fEd9KSkuc3BsaWNlKDAsZS5sZW5ndGgtMSl9ZnVuY3Rpb24gb2UoZSl7dmFyIHQ9ZS5mcm9tLG49dm9pZCAwPT09dD8wOnQscj1lLnRvLG89dm9pZCAwPT09cj8xOnIsYT1lLmVhc2UsaT1lLm9mZnNldCxsPWUuZHVyYXRpb24scz12b2lkIDA9PT1sPzMwMDpsLGM9e2RvbmU6ITEsdmFsdWU6bn0sdT1BcnJheS5pc0FycmF5KG8pP286W24sb10sZD1mdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUqdH0pKX0oaSYmaS5sZW5ndGg9PT11Lmxlbmd0aD9pOmZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gMCE9PW4/bi8odC0xKTowfSkpfSh1KSxzKTtmdW5jdGlvbiBwKCl7cmV0dXJuIEQoZCx1LHtlYXNlOkFycmF5LmlzQXJyYXkoYSk/YTpyZSh1LGEpfSl9dmFyIGY9cCgpO3JldHVybntuZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBjLnZhbHVlPWYoZSksYy5kb25lPWU+PXMsY30sZmxpcFRhcmdldDpmdW5jdGlvbigpe3UucmV2ZXJzZSgpLGY9cCgpfX19ZnVuY3Rpb24gYWUoZSl7dmFyIHQ9ZS52ZWxvY2l0eSxuPXZvaWQgMD09PXQ/MDp0LHI9ZS5mcm9tLG89dm9pZCAwPT09cj8wOnIsYT1lLnBvd2VyLGk9dm9pZCAwPT09YT8uODphLGw9ZS50aW1lQ29uc3RhbnQscz12b2lkIDA9PT1sPzM1MDpsLGM9ZS5yZXN0RGVsdGEsdT12b2lkIDA9PT1jPy41OmMsZD1lLm1vZGlmeVRhcmdldCxwPXtkb25lOiExLHZhbHVlOm99LGY9aSpuLGg9bytmLGc9dm9pZCAwPT09ZD9oOmQoaCk7cmV0dXJuIGchPT1oJiYoZj1nLW8pLHtuZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PS1mKk1hdGguZXhwKC1lL3MpO3JldHVybiBwLmRvbmU9ISh0PnV8fHQ8LXUpLHAudmFsdWU9cC5kb25lP2c6Zyt0LHB9LGZsaXBUYXJnZXQ6ZnVuY3Rpb24oKXt9fX12YXIgaWU9e2tleWZyYW1lczpvZSxzcHJpbmc6dyxkZWNheTphZX07ZnVuY3Rpb24gbGUoZSx0LG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0wKSxlLXQtbn12YXIgc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24odCl7dmFyIG49dC5kZWx0YTtyZXR1cm4gZShuKX07cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGwuZGVmYXVsdC51cGRhdGUodCwhMCl9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gaS5jYW5jZWxTeW5jLnVwZGF0ZSh0KX19fTtmdW5jdGlvbiBjZShlKXt2YXIgdCxuLG8sYSxpLGw9ZS5mcm9tLHM9ZS5hdXRvcGxheSxjPXZvaWQgMD09PXN8fHMsdT1lLmRyaXZlcixkPXZvaWQgMD09PXU/c2U6dSxwPWUuZWxhcHNlZCxmPXZvaWQgMD09PXA/MDpwLGg9ZS5yZXBlYXQsZz12b2lkIDA9PT1oPzA6aCx2PWUucmVwZWF0VHlwZSxDPXZvaWQgMD09PXY/XCJsb29wXCI6dixtPWUucmVwZWF0RGVsYXksYj12b2lkIDA9PT1tPzA6bSx5PWUub25QbGF5LHg9ZS5vblN0b3Asaz1lLm9uQ29tcGxldGUsUz1lLm9uUmVwZWF0LE89ZS5vblVwZGF0ZSxNPXIuX19yZXN0KGUsW1wiZnJvbVwiLFwiYXV0b3BsYXlcIixcImRyaXZlclwiLFwiZWxhcHNlZFwiLFwicmVwZWF0XCIsXCJyZXBlYXRUeXBlXCIsXCJyZXBlYXREZWxheVwiLFwib25QbGF5XCIsXCJvblN0b3BcIixcIm9uQ29tcGxldGVcIixcIm9uUmVwZWF0XCIsXCJvblVwZGF0ZVwiXSksTD1NLnRvLF89MCxQPU0uZHVyYXRpb24sRT0hMSxqPSEwLFI9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlLnRvKSlyZXR1cm4gb2U7aWYoaWVbZS50eXBlXSlyZXR1cm4gaWVbZS50eXBlXTt2YXIgdD1uZXcgU2V0KE9iamVjdC5rZXlzKGUpKTtyZXR1cm4gdC5oYXMoXCJlYXNlXCIpfHx0LmhhcyhcImR1cmF0aW9uXCIpJiYhdC5oYXMoXCJkYW1waW5nUmF0aW9cIik/b2U6dC5oYXMoXCJkYW1waW5nUmF0aW9cIil8fHQuaGFzKFwic3RpZmZuZXNzXCIpfHx0LmhhcyhcIm1hc3NcIil8fHQuaGFzKFwiZGFtcGluZ1wiKXx8dC5oYXMoXCJyZXN0U3BlZWRcIil8fHQuaGFzKFwicmVzdERlbHRhXCIpP3c6b2V9KE0pOyhudWxsPT09KG49KHQ9UikubmVlZHNJbnRlcnBvbGF0aW9uKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jYWxsKHQsbCxMKSkmJihpPUQoWzAsMTAwXSxbbCxMXSx7Y2xhbXA6ITF9KSxsPTAsTD0xMDApO3ZhciBJPVIoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LE0pLHtmcm9tOmwsdG86TH0pKTtyZXR1cm4gYyYmKG51bGw9PXl8fHkoKSwobz1kKChmdW5jdGlvbihlKXtpZihqfHwoZT0tZSksZis9ZSwhRSl7dmFyIHQ9SS5uZXh0KE1hdGgubWF4KDAsZikpO2E9dC52YWx1ZSxpJiYoYT1pKGEpKSxFPWo/dC5kb25lOmY8PTB9bnVsbD09T3x8TyhhKSxFJiYoMD09PV8mJihudWxsIT1QfHwoUD1mKSksXzxnP2Z1bmN0aW9uKGUsdCxuLHIpe3JldHVybiByP2U+PXQrbjplPD0tbn0oZixQLGIsaikmJihfKyssXCJyZXZlcnNlXCI9PT1DP2Y9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PXImJihyPSEwKSxyP2xlKHQrLWUsdCxuKTp0LShlLXQpK259KGYsUCxiLGo9XyUyPT0wKTooZj1sZShmLFAsYiksXCJtaXJyb3JcIj09PUMmJkkuZmxpcFRhcmdldCgpKSxFPSExLFMmJlMoKSk6KG8uc3RvcCgpLGsmJmsoKSkpfSkpKS5zdGFydCgpKSx7c3RvcDpmdW5jdGlvbigpe251bGw9PXh8fHgoKSxvLnN0b3AoKX19fWZ1bmN0aW9uIHVlKGUsdCl7cmV0dXJuIHQ/ZSooMWUzL3QpOjB9dmFyIGRlPWZ1bmN0aW9uKGUpe3JldHVybiAxODAqZS9NYXRoLlBJfSxwZT1mdW5jdGlvbihlKXtyZXR1cm4gZX0sZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXBlKSxmdW5jdGlvbih0LG4scil7dmFyIG89bi1yLGE9LSgwLXQrMSkqKDAtZShNYXRoLmFicyhvKSkpO3JldHVybiBvPD0wP24rYTpuLWF9fSxoZT1mZSgpLGdlPWZlKE1hdGguc3FydCksdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUqTWF0aC5QSS8xODB9LENlPWZ1bmN0aW9uKGUpe3JldHVybiBlLmhhc093blByb3BlcnR5KFwieFwiKSYmZS5oYXNPd25Qcm9wZXJ0eShcInlcIil9LG1lPWZ1bmN0aW9uKGUpe3JldHVybiBDZShlKSYmZS5oYXNPd25Qcm9wZXJ0eShcInpcIil9LHdlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGguYWJzKGUtdCl9LGJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PTIpLHQ9TWF0aC5wb3coMTAsdCksTWF0aC5yb3VuZChlKnQpL3R9LHllPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj0wKSxiZShlK24qKHQtZSkvTWF0aC5tYXgocixuKSl9LHhlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDEtMyp0KzMqZX0sa2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMyp0LTYqZX0sU2U9ZnVuY3Rpb24oZSl7cmV0dXJuIDMqZX0sT2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybigoeGUodCxuKSplK2tlKHQsbikpKmUrU2UodCkpKmV9LE1lPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMyp4ZSh0LG4pKmUqZSsyKmtlKHQsbikqZStTZSh0KX0sTGU9LjE7dC5hbmdsZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1fKSxkZShNYXRoLmF0YW4yKHQueS1lLnksdC54LWUueCkpfSx0LmFuaW1hdGU9Y2UsdC5hbnRpY2lwYXRlPWVlLHQuYXBwbHlPZmZzZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj0hMDtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ZSxuPSExKSxmdW5jdGlvbihyKXtyZXR1cm4gbj9yLWUrdDooZT1yLG49ITAsdCl9fSx0LmF0dHJhY3Q9aGUsdC5hdHRyYWN0RXhwbz1nZSx0LmJhY2tJbj1KLHQuYmFja0luT3V0PVEsdC5iYWNrT3V0PVgsdC5ib3VuY2VJbj1uZSx0LmJvdW5jZUluT3V0PWZ1bmN0aW9uKGUpe3JldHVybiBlPC41Py41KigxLXRlKDEtMiplKSk6LjUqdGUoMiplLTEpKy41fSx0LmJvdW5jZU91dD10ZSx0LmNpcmNJbj1LLHQuY2lyY0luT3V0PVksdC5jaXJjT3V0PXEsdC5jbGFtcD1zLHQuY3JlYXRlQW50aWNpcGF0ZT1GLHQuY3JlYXRlQXR0cmFjdG9yPWZlLHQuY3JlYXRlQmFja0luPU4sdC5jcmVhdGVFeHBvSW49JCx0LmN1YmljQmV6aWVyPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9PT10JiZuPT09cilyZXR1cm4gVztmb3IodmFyIG89bmV3IEZsb2F0MzJBcnJheSgxMSksYT0wO2E8MTE7KythKW9bYV09T2UoYSpMZSxlLG4pO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gMD09PWF8fDE9PT1hP2E6T2UoZnVuY3Rpb24odCl7Zm9yKHZhciByPTAsYT0xOzEwIT09YSYmb1thXTw9dDsrK2Epcis9TGU7LS1hO3ZhciBpPXIrKHQtb1thXSkvKG9bYSsxXS1vW2FdKSpMZSxsPU1lKGksZSxuKTtyZXR1cm4gbD49LjAwMT9mdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIG89MDtvPDg7KytvKXt2YXIgYT1NZSh0LG4scik7aWYoMD09PWEpcmV0dXJuIHQ7dC09KE9lKHQsbixyKS1lKS9hfXJldHVybiB0fSh0LGksZSxuKTowPT09bD9pOmZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGEsaSxsPTA7ZG97KGE9T2UoaT10KyhuLXQpLzIscixvKS1lKT4wP249aTp0PWl9d2hpbGUoTWF0aC5hYnMoYSk+MWUtNyYmKytsPDEwKTtyZXR1cm4gaX0odCxyLHIrTGUsZSxuKX0oYSksdCxyKX19LHQuZGVjYXk9YWUsdC5kZWdyZWVzVG9SYWRpYW5zPXZlLHQuZGlzdGFuY2U9ZnVuY3Rpb24oZSx0KXtpZihQKGUpJiZQKHQpKXJldHVybiB3ZShlLHQpO2lmKENlKGUpJiZDZSh0KSl7dmFyIG49d2UoZS54LHQueCkscj13ZShlLnksdC55KSxvPW1lKGUpJiZtZSh0KT93ZShlLnosdC56KTowO3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cobiwyKStNYXRoLnBvdyhyLDIpK01hdGgucG93KG8sMikpfX0sdC5lYXNlSW49VSx0LmVhc2VJbk91dD1HLHQuZWFzZU91dD16LHQuaW5lcnRpYT1mdW5jdGlvbihlKXt2YXIgdCxuPWUuZnJvbSxvPXZvaWQgMD09PW4/MDpuLGE9ZS52ZWxvY2l0eSxsPXZvaWQgMD09PWE/MDphLHM9ZS5taW4sYz1lLm1heCx1PWUucG93ZXIsZD12b2lkIDA9PT11Py44OnUscD1lLnRpbWVDb25zdGFudCxmPXZvaWQgMD09PXA/NzUwOnAsaD1lLmJvdW5jZVN0aWZmbmVzcyxnPXZvaWQgMD09PWg/NTAwOmgsdj1lLmJvdW5jZURhbXBpbmcsQz12b2lkIDA9PT12PzEwOnYsbT1lLnJlc3REZWx0YSx3PXZvaWQgMD09PW0/MTptLGI9ZS5tb2RpZnlUYXJnZXQseT1lLmRyaXZlcix4PWUub25VcGRhdGUsaz1lLm9uQ29tcGxldGU7ZnVuY3Rpb24gUyhlKXtyZXR1cm4gdm9pZCAwIT09cyYmZTxzfHx2b2lkIDAhPT1jJiZlPmN9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gdm9pZCAwPT09cz9jOnZvaWQgMD09PWN8fE1hdGguYWJzKHMtZSk8TWF0aC5hYnMoYy1lKT9zOmN9ZnVuY3Rpb24gTShlKXtudWxsPT10fHx0LnN0b3AoKSx0PWNlKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxlKSx7ZHJpdmVyOnksb25VcGRhdGU6ZnVuY3Rpb24odCl7dmFyIG47bnVsbD09eHx8eCh0KSxudWxsPT09KG49ZS5vblVwZGF0ZSl8fHZvaWQgMD09PW58fG4uY2FsbChlLHQpfSxvbkNvbXBsZXRlOmt9KSl9ZnVuY3Rpb24gTChlKXtNKHIuX19hc3NpZ24oe3R5cGU6XCJzcHJpbmdcIixzdGlmZm5lc3M6ZyxkYW1waW5nOkMscmVzdERlbHRhOnd9LGUpKX1pZihTKG8pKUwoe2Zyb206byx2ZWxvY2l0eTpsLHRvOk8obyl9KTtlbHNle3ZhciBfPWQqbCtvO3ZvaWQgMCE9PWImJihfPWIoXykpO3ZhciBQLEUsaj1PKF8pLFI9aj09PXM/LTE6MTtNKHt0eXBlOlwiZGVjYXlcIixmcm9tOm8sdmVsb2NpdHk6bCx0aW1lQ29uc3RhbnQ6Zixwb3dlcjpkLHJlc3REZWx0YTp3LG1vZGlmeVRhcmdldDpiLG9uVXBkYXRlOlMoXyk/ZnVuY3Rpb24oZSl7UD1FLEU9ZSxsPXVlKGUtUCxpLmdldEZyYW1lRGF0YSgpLmRlbHRhKSwoMT09PVImJmU+anx8LTE9PT1SJiZlPGopJiZMKHtmcm9tOmUsdG86aix2ZWxvY2l0eTpsfSl9OnZvaWQgMH0pfXJldHVybntzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOnQuc3RvcCgpfX19LHQuaW50ZXJwb2xhdGU9RCx0LmlzUG9pbnQ9Q2UsdC5pc1BvaW50M0Q9bWUsdC5rZXlmcmFtZXM9b2UsdC5saW5lYXI9Vyx0Lm1pcnJvckVhc2luZz1aLHQubWl4PXgsdC5taXhDb2xvcj1MLHQubWl4Q29tcGxleD1BLHQucGlwZT1qLHQucG9pbnRGcm9tVmVjdG9yPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD12ZSh0KSx7eDpuKk1hdGguY29zKHQpK2UueCx5Om4qTWF0aC5zaW4odCkrZS55fX0sdC5wcm9ncmVzcz15LHQucmFkaWFuc1RvRGVncmVlcz1kZSx0LnJldmVyc2VFYXNpbmc9Qix0LnNtb290aD1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT01MCk7dmFyIHQ9MCxuPTA7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBvPWkuZ2V0RnJhbWVEYXRhKCkudGltZXN0YW1wLGE9byE9PW4/by1uOjAsbD1hP3llKHQscixhLGUpOnQ7cmV0dXJuIG49byx0PWwsbH19LHQuc21vb3RoRnJhbWU9eWUsdC5zbmFwPWZ1bmN0aW9uKGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0L2UpKmV9O3ZhciB0PTAsbj1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG89TWF0aC5hYnMoZVswXS1yKTtmb3IodD0xO3Q8bjt0Kyspe3ZhciBhPWVbdF0saT1NYXRoLmFicyhhLXIpO2lmKDA9PT1pKXJldHVybiBhO2lmKGk+bylyZXR1cm4gZVt0LTFdO2lmKHQ9PT1uLTEpcmV0dXJuIGE7bz1pfX19LHQuc3ByaW5nPXcsdC5zdGVwcz1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1cImVuZFwiKSxmdW5jdGlvbihuKXt2YXIgcj0obj1cImVuZFwiPT09dD9NYXRoLm1pbihuLC45OTkpOk1hdGgubWF4KG4sLjAwMSkpKmUsbz1cImVuZFwiPT09dD9NYXRoLmZsb29yKHIpOk1hdGguY2VpbChyKTtyZXR1cm4gcygwLDEsby9lKX19LHQudG9EZWNpbWFsPWJlLHQudmVsb2NpdHlQZXJGcmFtZT1mdW5jdGlvbihlLHQpe3JldHVybiBlLygxZTMvdCl9LHQudmVsb2NpdHlQZXJTZWNvbmQ9dWUsdC53cmFwPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LWU7cmV0dXJuKChuLWUpJXIrciklcitlfX0sMjcwMzooZSx0LG4pPT57dmFyIHI9big0MTQpO2Z1bmN0aW9uIG8oKXt9ZnVuY3Rpb24gYSgpe31hLnJlc2V0V2FybmluZ0NhY2hlPW8sZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixvLGEsaSl7aWYoaSE9PXIpe3ZhciBsPW5ldyBFcnJvcihcIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXNcIik7dGhyb3cgbC5uYW1lPVwiSW52YXJpYW50IFZpb2xhdGlvblwiLGx9fWZ1bmN0aW9uIHQoKXtyZXR1cm4gZX1lLmlzUmVxdWlyZWQ9ZTt2YXIgbj17YXJyYXk6ZSxiaWdpbnQ6ZSxib29sOmUsZnVuYzplLG51bWJlcjplLG9iamVjdDplLHN0cmluZzplLHN5bWJvbDplLGFueTplLGFycmF5T2Y6dCxlbGVtZW50OmUsZWxlbWVudFR5cGU6ZSxpbnN0YW5jZU9mOnQsbm9kZTplLG9iamVjdE9mOnQsb25lT2Y6dCxvbmVPZlR5cGU6dCxzaGFwZTp0LGV4YWN0OnQsY2hlY2tQcm9wVHlwZXM6YSxyZXNldFdhcm5pbmdDYWNoZTpvfTtyZXR1cm4gbi5Qcm9wVHlwZXM9bixufX0sNTY5NzooZSx0LG4pPT57ZS5leHBvcnRzPW4oMjcwMykoKX0sNDE0OmU9PntlLmV4cG9ydHM9XCJTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRFwifSw3MjkyOihlLHQsbik9PntuLnIodCksbi5kKHQse0NhbGVuZGFyOigpPT5YbixDZW50dXJ5VmlldzooKT0+RXQsRGVjYWRlVmlldzooKT0+TnQsTW9udGhWaWV3OigpPT5MbixOYXZpZ2F0aW9uOigpPT5OZSxZZWFyVmlldzooKT0+dG4sZGVmYXVsdDooKT0+dHJ9KTt2YXIgcj1uKDY2ODkpLG89bi5uKHIpLGE9big1Njk3KSxpPW4ubihhKTtmdW5jdGlvbiBsKGUpe3ZhciB0LG4scj1cIlwiO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZSlyKz1lO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIGUpaWYoQXJyYXkuaXNBcnJheShlKSlmb3IodD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0mJihuPWwoZVt0XSkpJiYociYmKHIrPVwiIFwiKSxyKz1uKTtlbHNlIGZvcih0IGluIGUpZVt0XSYmKHImJihyKz1cIiBcIikscis9dCk7cmV0dXJuIHJ9Y29uc3Qgcz1mdW5jdGlvbigpe2Zvcih2YXIgZSx0LG49MCxyPVwiXCI7bjxhcmd1bWVudHMubGVuZ3RoOykoZT1hcmd1bWVudHNbbisrXSkmJih0PWwoZSkpJiYociYmKHIrPVwiIFwiKSxyKz10KTtyZXR1cm4gcn07dmFyIGM9big3NzMpLHU9bi5uKGMpO2Z1bmN0aW9uIGQoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfXZhciBwPXUoKSgoZnVuY3Rpb24oZSl7dmFyIHQsbj12b2lkIDA9PT1lP3t9OmUscj1uLnVzZUZhbGxiYWNrTG9jYWxlLG89dm9pZCAwPT09cnx8cixhPW4uZmFsbGJhY2tMb2NhbGUsaT12b2lkIDA9PT1hP1wiZW4tVVNcIjphLGw9W107aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyl7dmFyIHM9d2luZG93Lm5hdmlnYXRvcjtsPWwuY29uY2F0KHMubGFuZ3VhZ2VzLHMubGFuZ3VhZ2Uscy51c2VyTGFuZ3VhZ2Uscy5icm93c2VyTGFuZ3VhZ2Uscy5zeXN0ZW1MYW5ndWFnZSl9cmV0dXJuIG8mJmwucHVzaChpKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe2lmKCFlfHwtMT09PWUuaW5kZXhPZihcIi1cIil8fGUudG9Mb3dlckNhc2UoKSE9PWUpcmV0dXJuIGU7dmFyIHQ9ZS5zcGxpdChcIi1cIik7cmV0dXJuIHRbMF0rXCItXCIrdFsxXS50b1VwcGVyQ2FzZSgpfSkpfSgodD1sKS5maWx0ZXIoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGUmJnQuaW5kZXhPZihlKT09PW59KSkpfSksZCksZj11KCkoKGZ1bmN0aW9uKGUpe3JldHVybiBwKGUpWzBdfHxudWxsfSksZCk7Y29uc3QgaD1mO2Z1bmN0aW9uIGcoZSx0LG4pe3JldHVybiBmdW5jdGlvbihyLG8pe3ZvaWQgMD09PW8mJihvPW4pO3ZhciBhPWUocikrbztyZXR1cm4gdChhKX19ZnVuY3Rpb24gdihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEYXRlKGUodCkuZ2V0VGltZSgpLTEpfX1mdW5jdGlvbiBDKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybltlKG4pLHQobildfX1mdW5jdGlvbiBtKGUpe2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBlLmdldEZ1bGxZZWFyKCk7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGU7dmFyIHQ9cGFyc2VJbnQoZSwxMCk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJiFpc05hTih0KSlyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IHllYXIgZnJvbSBkYXRlOiBcIi5jb25jYXQoZSxcIi5cIikpfWZ1bmN0aW9uIHcoZSl7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGUuZ2V0TW9udGgoKTt0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IG1vbnRoIGZyb20gZGF0ZTogXCIuY29uY2F0KGUsXCIuXCIpKX1mdW5jdGlvbiBiKGUpe2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBlLmdldERhdGUoKTt0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IHllYXIgZnJvbSBkYXRlOiBcIi5jb25jYXQoZSxcIi5cIikpfWZ1bmN0aW9uIHkoZSl7dmFyIHQ9bShlKSxuPXQrKDEtdCklMTAwLHI9bmV3IERhdGU7cmV0dXJuIHIuc2V0RnVsbFllYXIobiwwLDEpLHIuc2V0SG91cnMoMCwwLDAsMCkscn12YXIgeD1nKG0seSwtMTAwKSxrPWcobSx5LDEwMCksUz12KGspLE89ZyhtLFMsLTEwMCksTT0oZyhtLFMsMTAwKSxDKHksUykpO2Z1bmN0aW9uIEwoZSl7dmFyIHQ9bShlKSxuPXQrKDEtdCklMTAscj1uZXcgRGF0ZTtyZXR1cm4gci5zZXRGdWxsWWVhcihuLDAsMSksci5zZXRIb3VycygwLDAsMCwwKSxyfXZhciBfPWcobSxMLC0xMCksUD1nKG0sTCwxMCksRT12KFApLGo9ZyhtLEUsLTEwKSxSPShnKG0sRSwxMCksQyhMLEUpKTtmdW5jdGlvbiBJKGUpe3ZhciB0PW0oZSksbj1uZXcgRGF0ZTtyZXR1cm4gbi5zZXRGdWxsWWVhcih0LDAsMSksbi5zZXRIb3VycygwLDAsMCwwKSxufXZhciBWPWcobSxJLC0xKSxIPWcobSxJLDEpLEE9dihIKSxUPWcobSxBLC0xKSxEPShnKG0sQSwxKSxDKEksQSkpO2Z1bmN0aW9uIEIoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2b2lkIDA9PT1yJiYocj10KTt2YXIgbz1tKG4pLGE9dyhuKStyLGk9bmV3IERhdGU7cmV0dXJuIGkuc2V0RnVsbFllYXIobyxhLDEpLGkuc2V0SG91cnMoMCwwLDAsMCksZShpKX19ZnVuY3Rpb24gWihlKXt2YXIgdD1tKGUpLG49dyhlKSxyPW5ldyBEYXRlO3JldHVybiByLnNldEZ1bGxZZWFyKHQsbiwxKSxyLnNldEhvdXJzKDAsMCwwLDApLHJ9dmFyICQ9QihaLC0xKSxOPUIoWiwxKSxGPXYoTiksVz1CKEYsLTEpLFU9KEIoRiwxKSxDKFosRikpO2Z1bmN0aW9uIHooZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2b2lkIDA9PT1yJiYocj10KTt2YXIgbz1tKG4pLGE9dyhuKSxpPWIobikrcixsPW5ldyBEYXRlO3JldHVybiBsLnNldEZ1bGxZZWFyKG8sYSxpKSxsLnNldEhvdXJzKDAsMCwwLDApLGUobCl9fWZ1bmN0aW9uIEcoZSl7dmFyIHQ9bShlKSxuPXcoZSkscj1iKGUpLG89bmV3IERhdGU7cmV0dXJuIG8uc2V0RnVsbFllYXIodCxuLHIpLG8uc2V0SG91cnMoMCwwLDAsMCksb316KEcsLTEpO3ZhciBLLHE9dih6KEcsMSkpLFk9KHoocSwtMSkseihxLDEpLEMoRyxxKSk7ZnVuY3Rpb24gSihlKXtyZXR1cm4gYihGKGUpKX1mdW5jdGlvbiBYKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gUShlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9dmFyIGVlLHRlPXtBUkFCSUM6XCJBcmFiaWNcIixIRUJSRVc6XCJIZWJyZXdcIixJU09fODYwMTpcIklTTyA4NjAxXCIsVVM6XCJVU1wifSxuZT0oUShLPXt9LHRlLlVTLFtcImVuLUNBXCIsXCJlbi1VU1wiLFwiZXMtQVJcIixcImVzLUJPXCIsXCJlcy1DTFwiLFwiZXMtQ09cIixcImVzLUNSXCIsXCJlcy1ET1wiLFwiZXMtRUNcIixcImVzLUdUXCIsXCJlcy1ITlwiLFwiZXMtTVhcIixcImVzLU5JXCIsXCJlcy1QQVwiLFwiZXMtUEVcIixcImVzLVBSXCIsXCJlcy1TVlwiLFwiZXMtVkVcIixcInB0LUJSXCJdKSxRKEssdGUuQVJBQklDLFtcImFyXCIsXCJhci1BRVwiLFwiYXItQkhcIixcImFyLURaXCIsXCJhci1FR1wiLFwiYXItSVFcIixcImFyLUpPXCIsXCJhci1LV1wiLFwiYXItTFlcIixcImFyLU9NXCIsXCJhci1RQVwiLFwiYXItU0FcIixcImFyLVNEXCIsXCJhci1TWVwiLFwiYXItWUVcIixcImR2XCIsXCJkdi1NVlwiLFwicHNcIixcInBzLUFSXCJdKSxRKEssdGUuSEVCUkVXLFtcImhlXCIsXCJoZS1JTFwiXSksSykscmU9KGVlPUFycmF5KDcpLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIFgoZSl9KGVlKXx8ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZWUpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBYKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVyblwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bj9BcnJheS5mcm9tKGUpOlwiQXJndW1lbnRzXCI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9YKGUsdCk6dm9pZCAwfX0oZWUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9KSksb2U9bmV3IE1hcDtmdW5jdGlvbiBhZShlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9dHx8aCgpO29lLmhhcyhyKXx8b2Uuc2V0KHIsbmV3IE1hcCk7dmFyIG89b2UuZ2V0KHIpO3JldHVybiBvLmhhcyhlKXx8by5zZXQoZSxuZXcgSW50bC5EYXRlVGltZUZvcm1hdChyLGUpLmZvcm1hdCksby5nZXQoZSkobil9fShlKSh0LGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBuZXcgRGF0ZSh0LnNldEhvdXJzKDEyKSl9KG4pKX19YWUoe2RheTpcIm51bWVyaWNcIixtb250aDpcIm51bWVyaWNcIix5ZWFyOlwibnVtZXJpY1wifSk7dmFyIGllPWFlKHtkYXk6XCJudW1lcmljXCJ9KSxsZT1hZSh7ZGF5OlwibnVtZXJpY1wiLG1vbnRoOlwibG9uZ1wiLHllYXI6XCJudW1lcmljXCJ9KSxzZT1hZSh7bW9udGg6XCJsb25nXCJ9KSxjZT1hZSh7bW9udGg6XCJsb25nXCIseWVhcjpcIm51bWVyaWNcIn0pLHVlPWFlKHt3ZWVrZGF5Olwic2hvcnRcIn0pLGRlPWFlKHt3ZWVrZGF5OlwibG9uZ1wifSkscGU9YWUoe3llYXI6XCJudW1lcmljXCJ9KSxmZT1yZVswXSxoZT1yZVs1XSxnZT1yZVs2XTtmdW5jdGlvbiB2ZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGUuSVNPXzg2MDEsbj1lLmdldERheSgpO3N3aXRjaCh0KXtjYXNlIHRlLklTT184NjAxOnJldHVybihuKzYpJTc7Y2FzZSB0ZS5BUkFCSUM6cmV0dXJuKG4rMSklNztjYXNlIHRlLkhFQlJFVzpjYXNlIHRlLlVTOnJldHVybiBuO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgY2FsZW5kYXIgdHlwZS5cIil9fWZ1bmN0aW9uIENlKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0ZS5JU09fODYwMSxuPW0oZSkscj13KGUpLG89ZS5nZXREYXRlKCktdmUoZSx0KTtyZXR1cm4gbmV3IERhdGUobixyLG8pfWZ1bmN0aW9uIG1lKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4geSh0KTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gTCh0KTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIEkodCk7Y2FzZVwibW9udGhcIjpyZXR1cm4gWih0KTtjYXNlXCJkYXlcIjpyZXR1cm4gRyh0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX1mdW5jdGlvbiB3ZShlLHQpe3N3aXRjaChlKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIGsodCk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIFAodCk7Y2FzZVwieWVhclwiOnJldHVybiBIKHQpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIE4odCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19dmFyIGJlPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImRlY2FkZVwiOnJldHVybiBfKHQsLTEwMCk7Y2FzZVwieWVhclwiOnJldHVybiBWKHQsLTEwKTtjYXNlXCJtb250aFwiOnJldHVybiAkKHQsLTEyKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX0seWU9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIFAodCwxMDApO2Nhc2VcInllYXJcIjpyZXR1cm4gSCh0LDEwKTtjYXNlXCJtb250aFwiOnJldHVybiBOKHQsMTIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fTtmdW5jdGlvbiB4ZShlLHQpe3N3aXRjaChlKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIFModCk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIEUodCk7Y2FzZVwieWVhclwiOnJldHVybiBBKHQpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIEYodCk7Y2FzZVwiZGF5XCI6cmV0dXJuIHEodCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19dmFyIGtlPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImRlY2FkZVwiOnJldHVybiBqKHQsLTEwMCk7Y2FzZVwieWVhclwiOnJldHVybiBUKHQsLTEwKTtjYXNlXCJtb250aFwiOnJldHVybiBXKHQsLTEyKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX07ZnVuY3Rpb24gU2UoZSx0KXtzd2l0Y2goZSl7Y2FzZVwiY2VudHVyeVwiOnJldHVybiBNKHQpO2Nhc2VcImRlY2FkZVwiOnJldHVybiBSKHQpO2Nhc2VcInllYXJcIjpyZXR1cm4gRCh0KTtjYXNlXCJtb250aFwiOnJldHVybiBVKHQpO2Nhc2VcImRheVwiOnJldHVybiBZKHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fWZ1bmN0aW9uIE9lKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpwZTtyZXR1cm4oYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0pKS5qb2luKFwiIOKAkyBcIil9ZnVuY3Rpb24gTWUoZSx0LG4pe3JldHVybiBPZShlLHQsUihuKSl9ZnVuY3Rpb24gTGUoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRlLklTT184NjAxLG49ZS5nZXREYXkoKTtzd2l0Y2godCl7Y2FzZSB0ZS5BUkFCSUM6Y2FzZSB0ZS5IRUJSRVc6cmV0dXJuIG49PT1oZXx8bj09PWdlO2Nhc2UgdGUuSVNPXzg2MDE6Y2FzZSB0ZS5VUzpyZXR1cm4gbj09PWdlfHxuPT09ZmU7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBjYWxlbmRhciB0eXBlLlwiKX19ZnVuY3Rpb24gX2UoZSl7cmV0dXJuIF9lPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LF9lKGUpfXZhciBQZT1PYmplY3QudmFsdWVzKHRlKSxFZT1bXCJjZW50dXJ5XCIsXCJkZWNhZGVcIixcInllYXJcIixcIm1vbnRoXCJdLGplPWkoKS5vbmVPZihQZSksUmU9aSgpLm9uZU9mVHlwZShbaSgpLnN0cmluZyxpKCkuYXJyYXlPZihpKCkuc3RyaW5nKV0pLEllPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lW3RdO2lmKCFyKXJldHVybiBudWxsO2lmKCEociBpbnN0YW5jZW9mIERhdGUpKXJldHVybiBuZXcgRXJyb3IoXCJJbnZhbGlkIHByb3AgYFwiLmNvbmNhdCh0LFwiYCBvZiB0eXBlIGBcIikuY29uY2F0KF9lKHIpLFwiYCBzdXBwbGllZCB0byBgXCIpLmNvbmNhdChuLFwiYCwgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgYERhdGVgLlwiKSk7dmFyIG89ZS5tYXhEYXRlO3JldHVybiBvJiZyPm8/bmV3IEVycm9yKFwiSW52YWxpZCBwcm9wIGBcIi5jb25jYXQodCxcImAgb2YgdHlwZSBgXCIpLmNvbmNhdChfZShyKSxcImAgc3VwcGxpZWQgdG8gYFwiKS5jb25jYXQobixcImAsIG1pbkRhdGUgY2Fubm90IGJlIGxhcmdlciB0aGFuIG1heERhdGUuXCIpKTpudWxsfSxWZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZVt0XTtpZighcilyZXR1cm4gbnVsbDtpZighKHIgaW5zdGFuY2VvZiBEYXRlKSlyZXR1cm4gbmV3IEVycm9yKFwiSW52YWxpZCBwcm9wIGBcIi5jb25jYXQodCxcImAgb2YgdHlwZSBgXCIpLmNvbmNhdChfZShyKSxcImAgc3VwcGxpZWQgdG8gYFwiKS5jb25jYXQobixcImAsIGV4cGVjdGVkIGluc3RhbmNlIG9mIGBEYXRlYC5cIikpO3ZhciBvPWUubWluRGF0ZTtyZXR1cm4gbyYmcjxvP25ldyBFcnJvcihcIkludmFsaWQgcHJvcCBgXCIuY29uY2F0KHQsXCJgIG9mIHR5cGUgYFwiKS5jb25jYXQoX2UociksXCJgIHN1cHBsaWVkIHRvIGBcIikuY29uY2F0KG4sXCJgLCBtYXhEYXRlIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gbWluRGF0ZS5cIikpOm51bGx9LEhlPWkoKS5vbmVPZlR5cGUoW2koKS5mdW5jLGkoKS5zaGFwZSh7Y3VycmVudDppKCkuYW55fSldKSxBZT1pKCkub25lT2ZUeXBlKFtpKCkuaW5zdGFuY2VPZihEYXRlKSxpKCkuYXJyYXlPZihpKCkuaW5zdGFuY2VPZihEYXRlKSldKSxUZT1pKCkuYXJyYXlPZihpKCkub25lT2YoRWUpKSxEZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZVt0XSxvPWUudmlld3N8fEVlO3JldHVybiB2b2lkIDAhPT1yJiYtMT09PW8uaW5kZXhPZihyKT9uZXcgRXJyb3IoXCJJbnZhbGlkIHByb3AgYFwiLmNvbmNhdCh0LFwiYCBvZiB2YWx1ZSBgXCIpLmNvbmNhdChyLFwiYCBzdXBwbGllZCB0byBgXCIpLmNvbmNhdChuLFwiYCwgZXhwZWN0ZWQgb25lIG9mIFtcIikuY29uY2F0KG8ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4nXCInLmNvbmNhdChlLCdcIicpfSkpLmpvaW4oXCIsIFwiKSxcIl0uXCIpKTpudWxsfTtEZS5pc1JlcXVpcmVkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lW3RdO3JldHVybiByP0RlKGUsdCxuKTpuZXcgRXJyb3IoXCJUaGUgcHJvcCBgXCIuY29uY2F0KHQsXCJgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiBgXCIpLmNvbmNhdChuLFwiYCwgYnV0IGl0cyB2YWx1ZSBpcyBgXCIpLmNvbmNhdChyLFwiYC5cIikpfTt2YXIgQmU9e2FjdGl2ZVN0YXJ0RGF0ZTppKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGhvdmVyOmkoKS5pbnN0YW5jZU9mKERhdGUpLGxvY2FsZTppKCkuc3RyaW5nLG1heERhdGU6VmUsbWluRGF0ZTpJZSxvbkNsaWNrOmkoKS5mdW5jLG9uTW91c2VPdmVyOmkoKS5mdW5jLHRpbGVDbGFzc05hbWU6aSgpLm9uZU9mVHlwZShbaSgpLmZ1bmMsUmVdKSx0aWxlQ29udGVudDppKCkub25lT2ZUeXBlKFtpKCkuZnVuYyxpKCkubm9kZV0pLHZhbHVlOkFlLHZhbHVlVHlwZTppKCkuc3RyaW5nfSxaZT17YWN0aXZlU3RhcnREYXRlOmkoKS5pbnN0YW5jZU9mKERhdGUpLmlzUmVxdWlyZWQsY2xhc3NlczppKCkuYXJyYXlPZihpKCkuc3RyaW5nKS5pc1JlcXVpcmVkLGRhdGU6aSgpLmluc3RhbmNlT2YoRGF0ZSkuaXNSZXF1aXJlZCxsb2NhbGU6aSgpLnN0cmluZyxtYXhEYXRlOlZlLG1pbkRhdGU6SWUsb25DbGljazppKCkuZnVuYyxvbk1vdXNlT3ZlcjppKCkuZnVuYyxzdHlsZTppKCkub2JqZWN0T2YoaSgpLm9uZU9mVHlwZShbaSgpLnN0cmluZyxpKCkubnVtYmVyXSkpLHRpbGVDbGFzc05hbWU6aSgpLm9uZU9mVHlwZShbaSgpLmZ1bmMsUmVdKSx0aWxlQ29udGVudDppKCkub25lT2ZUeXBlKFtpKCkuZnVuYyxpKCkubm9kZV0pLHRpbGVEaXNhYmxlZDppKCkuZnVuY30sJGU9XCJyZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvblwiO2Z1bmN0aW9uIE5lKGUpe3ZhciB0LG49ZS5hY3RpdmVTdGFydERhdGUscj1lLmRyaWxsVXAsYT1lLmZvcm1hdE1vbnRoWWVhcixpPXZvaWQgMD09PWE/Y2U6YSxsPWUuZm9ybWF0WWVhcixzPXZvaWQgMD09PWw/cGU6bCxjPWUubG9jYWxlLHU9ZS5tYXhEYXRlLGQ9ZS5taW5EYXRlLHA9ZS5uYXZpZ2F0aW9uQXJpYUxhYmVsLGg9dm9pZCAwPT09cD9cIlwiOnAsZz1lLm5hdmlnYXRpb25BcmlhTGl2ZSx2PWUubmF2aWdhdGlvbkxhYmVsLEM9ZS5uZXh0MkFyaWFMYWJlbCxtPXZvaWQgMD09PUM/XCJcIjpDLHc9ZS5uZXh0MkxhYmVsLGI9dm9pZCAwPT09dz9cIsK7XCI6dyx5PWUubmV4dEFyaWFMYWJlbCxrPXZvaWQgMD09PXk/XCJcIjp5LFM9ZS5uZXh0TGFiZWwsTD12b2lkIDA9PT1TP1wi4oC6XCI6UyxQPWUucHJldjJBcmlhTGFiZWwsRT12b2lkIDA9PT1QP1wiXCI6UCxSPWUucHJldjJMYWJlbCxJPXZvaWQgMD09PVI/XCLCq1wiOlIsSD1lLnByZXZBcmlhTGFiZWwsQT12b2lkIDA9PT1IP1wiXCI6SCxEPWUucHJldkxhYmVsLEI9dm9pZCAwPT09RD9cIuKAuVwiOkQsWj1lLnNldEFjdGl2ZVN0YXJ0RGF0ZSxOPWUuc2hvd0RvdWJsZVZpZXcsRj1lLnZpZXcsVT1lLnZpZXdzLmluZGV4T2YoRik+MCx6PVwiY2VudHVyeVwiIT09RixHPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4geCh0KTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gXyh0KTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIFYodCk7Y2FzZVwibW9udGhcIjpyZXR1cm4gJCh0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX0oRixuKSxLPXomJmJlKEYsbikscT13ZShGLG4pLFk9eiYmeWUoRixuKSxKPWZ1bmN0aW9uKCl7aWYoRy5nZXRGdWxsWWVhcigpPDApcmV0dXJuITA7dmFyIGU9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiY2VudHVyeVwiOnJldHVybiBPKHQpO2Nhc2VcImRlY2FkZVwiOnJldHVybiBqKHQpO2Nhc2VcInllYXJcIjpyZXR1cm4gVCh0KTtjYXNlXCJtb250aFwiOnJldHVybiBXKHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fShGLG4pO3JldHVybiBkJiZkPj1lfSgpLFg9eiYmZnVuY3Rpb24oKXtpZihLLmdldEZ1bGxZZWFyKCk8MClyZXR1cm4hMDt2YXIgZT1rZShGLG4pO3JldHVybiBkJiZkPj1lfSgpLFE9dSYmdTxxLGVlPXomJnUmJnU8WTtmdW5jdGlvbiB0ZShlKXt2YXIgdD1mdW5jdGlvbigpe3N3aXRjaChGKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gT2UoZSx0LE0obikpfShjLHMsZSk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIE1lKGMscyxlKTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIHMoYyxlKTtjYXNlXCJtb250aFwiOnJldHVybiBpKGMsZSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHZpZXc6IFwiLmNvbmNhdChGLFwiLlwiKSl9fSgpO3JldHVybiB2P3Yoe2RhdGU6ZSxsYWJlbDp0LGxvY2FsZTpjfHxmKCksdmlldzpGfSk6dH1yZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOiRlfSxudWxsIT09SSYmeiYmbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6RSxjbGFzc05hbWU6XCJcIi5jb25jYXQoJGUsXCJfX2Fycm93IFwiKS5jb25jYXQoJGUsXCJfX3ByZXYyLWJ1dHRvblwiKSxkaXNhYmxlZDpYLG9uQ2xpY2s6ZnVuY3Rpb24oKXtaKEssXCJwcmV2MlwiKX0sdHlwZTpcImJ1dHRvblwifSxJKSxudWxsIT09QiYmbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6QSxjbGFzc05hbWU6XCJcIi5jb25jYXQoJGUsXCJfX2Fycm93IFwiKS5jb25jYXQoJGUsXCJfX3ByZXYtYnV0dG9uXCIpLGRpc2FibGVkOkosb25DbGljazpmdW5jdGlvbigpe1ooRyxcInByZXZcIil9LHR5cGU6XCJidXR0b25cIn0sQiksKHQ9XCJcIi5jb25jYXQoJGUsXCJfX2xhYmVsXCIpLG8oKS5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIse1wiYXJpYS1sYWJlbFwiOmgsXCJhcmlhLWxpdmVcIjpnLGNsYXNzTmFtZTp0LGRpc2FibGVkOiFVLG9uQ2xpY2s6cixzdHlsZTp7ZmxleEdyb3c6MX0sdHlwZTpcImJ1dHRvblwifSxvKCkuY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwiXCIuY29uY2F0KHQsXCJfX2xhYmVsVGV4dCBcIikuY29uY2F0KHQsXCJfX2xhYmVsVGV4dC0tZnJvbVwiKX0sdGUobikpLE4mJm8oKS5jcmVhdGVFbGVtZW50KG8oKS5GcmFnbWVudCxudWxsLG8oKS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJcIi5jb25jYXQodCxcIl9fZGl2aWRlclwiKX0sXCIg4oCTIFwiKSxvKCkuY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwiXCIuY29uY2F0KHQsXCJfX2xhYmVsVGV4dCBcIikuY29uY2F0KHQsXCJfX2xhYmVsVGV4dC0tdG9cIil9LHRlKHEpKSkpKSxudWxsIT09TCYmbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6ayxjbGFzc05hbWU6XCJcIi5jb25jYXQoJGUsXCJfX2Fycm93IFwiKS5jb25jYXQoJGUsXCJfX25leHQtYnV0dG9uXCIpLGRpc2FibGVkOlEsb25DbGljazpmdW5jdGlvbigpe1oocSxcIm5leHRcIil9LHR5cGU6XCJidXR0b25cIn0sTCksbnVsbCE9PWImJnomJm8oKS5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIse1wiYXJpYS1sYWJlbFwiOm0sY2xhc3NOYW1lOlwiXCIuY29uY2F0KCRlLFwiX19hcnJvdyBcIikuY29uY2F0KCRlLFwiX19uZXh0Mi1idXR0b25cIiksZGlzYWJsZWQ6ZWUsb25DbGljazpmdW5jdGlvbigpe1ooWSxcIm5leHQyXCIpfSx0eXBlOlwiYnV0dG9uXCJ9LGIpKX1OZS5wcm9wVHlwZXM9e2FjdGl2ZVN0YXJ0RGF0ZTppKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGRyaWxsVXA6aSgpLmZ1bmMuaXNSZXF1aXJlZCxmb3JtYXRNb250aFllYXI6aSgpLmZ1bmMsZm9ybWF0WWVhcjppKCkuZnVuYyxsb2NhbGU6aSgpLnN0cmluZyxtYXhEYXRlOmkoKS5pbnN0YW5jZU9mKERhdGUpLG1pbkRhdGU6aSgpLmluc3RhbmNlT2YoRGF0ZSksbmF2aWdhdGlvbkFyaWFMYWJlbDppKCkuc3RyaW5nLG5hdmlnYXRpb25BcmlhTGl2ZTppKCkuc3RyaW5nLG5hdmlnYXRpb25MYWJlbDppKCkuZnVuYyxuZXh0MkFyaWFMYWJlbDppKCkuc3RyaW5nLG5leHQyTGFiZWw6aSgpLm5vZGUsbmV4dEFyaWFMYWJlbDppKCkuc3RyaW5nLG5leHRMYWJlbDppKCkubm9kZSxwcmV2MkFyaWFMYWJlbDppKCkuc3RyaW5nLHByZXYyTGFiZWw6aSgpLm5vZGUscHJldkFyaWFMYWJlbDppKCkuc3RyaW5nLHByZXZMYWJlbDppKCkubm9kZSxzZXRBY3RpdmVTdGFydERhdGU6aSgpLmZ1bmMuaXNSZXF1aXJlZCxzaG93RG91YmxlVmlldzppKCkuYm9vbCx2aWV3OkRlLmlzUmVxdWlyZWQsdmlld3M6VGUuaXNSZXF1aXJlZH07dmFyIEZlPVtcImNoaWxkcmVuXCIsXCJjbGFzc05hbWVcIixcImRpcmVjdGlvblwiLFwiY291bnRcIixcIm9mZnNldFwiLFwic3R5bGVcIixcIndyYXBcIl07ZnVuY3Rpb24gV2UoKXtyZXR1cm4gV2U9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxXZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVWUoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIHplKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1VlKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7R2UoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlVlKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIEdlKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBLZShlKXtyZXR1cm5cIlwiLmNvbmNhdChlLFwiJVwiKX1mdW5jdGlvbiBxZShlKXt2YXIgdD1lLmNoaWxkcmVuLG49ZS5jbGFzc05hbWUscj1lLmRpcmVjdGlvbixhPWUuY291bnQsaT1lLm9mZnNldCxsPWUuc3R5bGUscz1lLndyYXAsYz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsRmUpO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLFdlKHtjbGFzc05hbWU6bixzdHlsZTp6ZSh7ZGlzcGxheTpcImZsZXhcIixmbGV4RGlyZWN0aW9uOnIsZmxleFdyYXA6cz9cIndyYXBcIjpcIm5vLXdyYXBcIn0sbCl9LGMpLG8oKS5DaGlsZHJlbi5tYXAodCwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbygpLmNsb25lRWxlbWVudChlLHplKHplKHt9LGUucHJvcHMpLHt9LHtzdHlsZTp7ZmxleEJhc2lzOktlKDEwMC9hKSxmbGV4U2hyaW5rOjAsZmxleEdyb3c6MCxvdmVyZmxvdzpcImhpZGRlblwiLG1hcmdpbkxlZnQ6aSYmMD09PXQ/S2UoMTAwKmkvYSk6bnVsbH19KSl9KSkpfWZ1bmN0aW9uIFllKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBKZShlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVtcIkBAaXRlcmF0b3JcIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBKZShlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm5cIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4/QXJyYXkuZnJvbShlKTpcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/SmUoZSx0KTp2b2lkIDB9fShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBKZShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIFhlKGUsdCl7cmV0dXJuIHRbMF08PWUmJnRbMV0+PWV9ZnVuY3Rpb24gUWUoZSx0KXtyZXR1cm4gWGUoZVswXSx0KXx8WGUoZVsxXSx0KX1mdW5jdGlvbiBldChlLHQsbil7dmFyIHI9W107aWYoUWUodCxlKSl7ci5wdXNoKG4pO3ZhciBvPVhlKGVbMF0sdCksYT1YZShlWzFdLHQpO28mJnIucHVzaChcIlwiLmNvbmNhdChuLFwiU3RhcnRcIikpLGEmJnIucHVzaChcIlwiLmNvbmNhdChuLFwiRW5kXCIpKSxvJiZhJiZyLnB1c2goXCJcIi5jb25jYXQobixcIkJvdGhFbmRzXCIpKX1yZXR1cm4gcn1mdW5jdGlvbiB0dCgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWUudmFsdWUsbj1lLnZhbHVlVHlwZSxyPWUuZGF0ZSxvPWUuZGF0ZVR5cGUsYT1lLmhvdmVyLGk9XCJyZWFjdC1jYWxlbmRhcl9fdGlsZVwiLGw9W2ldO2lmKCFyKXJldHVybiBsO2lmKCFBcnJheS5pc0FycmF5KHIpJiYhbyl0aHJvdyBuZXcgRXJyb3IoXCJnZXRUaWxlQ2xhc3NlcygpOiBVbmFibGUgdG8gZ2V0IHRpbGUgYWN0aXZpdHkgY2xhc3NlcyBiZWNhdXNlIG9uZSBvciBtb3JlIHJlcXVpcmVkIGFyZ3VtZW50cyB3ZXJlIG5vdCBwYXNzZWQuXCIpO3ZhciBzPW5ldyBEYXRlLGM9QXJyYXkuaXNBcnJheShyKT9yOlNlKG8scik7aWYoWGUocyxjKSYmbC5wdXNoKFwiXCIuY29uY2F0KGksXCItLW5vd1wiKSksIXQpcmV0dXJuIGw7aWYoIUFycmF5LmlzQXJyYXkodCkmJiFuKXRocm93IG5ldyBFcnJvcihcImdldFRpbGVDbGFzc2VzKCk6IFVuYWJsZSB0byBnZXQgdGlsZSBhY3Rpdml0eSBjbGFzc2VzIGJlY2F1c2Ugb25lIG9yIG1vcmUgcmVxdWlyZWQgYXJndW1lbnRzIHdlcmUgbm90IHBhc3NlZC5cIik7dmFyIHUsZCxwPUFycmF5LmlzQXJyYXkodCk/dDpTZShuLHQpO2Q9YywodT1wKVswXTw9ZFswXSYmdVsxXT49ZFsxXT9sLnB1c2goXCJcIi5jb25jYXQoaSxcIi0tYWN0aXZlXCIpKTpRZShwLGMpJiZsLnB1c2goXCJcIi5jb25jYXQoaSxcIi0taGFzQWN0aXZlXCIpKTt2YXIgZj1ldChwLGMsXCJcIi5jb25jYXQoaSxcIi0tcmFuZ2VcIikpO2wucHVzaC5hcHBseShsLFllKGYpKTt2YXIgaD1bXS5jb25jYXQodCk7aWYoYSYmMT09PWgubGVuZ3RoKXt2YXIgZz1ldChhPnBbMF0/W3BbMF0sYV06W2EscFswXV0sYyxcIlwiLmNvbmNhdChpLFwiLS1ob3ZlclwiKSk7bC5wdXNoLmFwcGx5KGwsWWUoZykpfXJldHVybiBsfXFlLnByb3BUeXBlcz17Y2hpbGRyZW46aSgpLm5vZGUsY2xhc3NOYW1lOmkoKS5zdHJpbmcsY291bnQ6aSgpLm51bWJlci5pc1JlcXVpcmVkLGRpcmVjdGlvbjppKCkuc3RyaW5nLG9mZnNldDppKCkubnVtYmVyLHN0eWxlOmkoKS5vYmplY3RPZihpKCkub25lT2ZUeXBlKFtpKCkuc3RyaW5nLGkoKS5udW1iZXJdKSksd3JhcDppKCkuYm9vbH07dmFyIG50PVtcImNsYXNzTmFtZVwiLFwiY291bnRcIixcImRhdGVUcmFuc2Zvcm1cIixcImRhdGVUeXBlXCIsXCJlbmRcIixcImhvdmVyXCIsXCJvZmZzZXRcIixcInN0YXJ0XCIsXCJzdGVwXCIsXCJ0aWxlXCIsXCJ2YWx1ZVwiLFwidmFsdWVUeXBlXCJdO2Z1bmN0aW9uIHJ0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBvdChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9ydChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe2F0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpydChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBhdChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gaXQoKXtyZXR1cm4gaXQ9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxpdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbHQoZSl7Zm9yKHZhciB0PWUuY2xhc3NOYW1lLG49ZS5jb3VudCxyPXZvaWQgMD09PW4/MzpuLGE9ZS5kYXRlVHJhbnNmb3JtLGk9ZS5kYXRlVHlwZSxsPWUuZW5kLHM9ZS5ob3ZlcixjPWUub2Zmc2V0LHU9ZS5zdGFydCxkPWUuc3RlcCxwPXZvaWQgMD09PWQ/MTpkLGY9ZS50aWxlLGg9ZS52YWx1ZSxnPWUudmFsdWVUeXBlLHY9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLG50KSxDPVtdLG09dTttPD1sO20rPXApe3ZhciB3PWEobSk7Qy5wdXNoKG8oKS5jcmVhdGVFbGVtZW50KGYsaXQoe2tleTp3LmdldFRpbWUoKSxjbGFzc2VzOnR0KHt2YWx1ZTpoLHZhbHVlVHlwZTpnLGRhdGU6dyxkYXRlVHlwZTppLGhvdmVyOnN9KSxkYXRlOncscG9pbnQ6bX0sdikpKX1yZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQocWUse2NsYXNzTmFtZTp0LGNvdW50OnIsb2Zmc2V0OmMsd3JhcDohMH0sQyl9ZnVuY3Rpb24gc3QoZSl7cmV0dXJuIHN0PVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LHN0KGUpfWZ1bmN0aW9uIGN0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiB1dChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9jdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe2d0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpjdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBkdChlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19ZnVuY3Rpb24gcHQoZSx0KXtyZXR1cm4gcHQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxwdChlLHQpfWZ1bmN0aW9uIGZ0KGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiBlfWZ1bmN0aW9uIGh0KGUpe3JldHVybiBodD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saHQoZSl9ZnVuY3Rpb24gZ3QoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIHZ0KGUsdCl7cmV0dXJuIGUmJiF0fHwhZSYmdHx8ZSYmdCYmZS5nZXRUaW1lKCkhPT10LmdldFRpbWUoKX1mdW5jdGlvbiBDdChlLHQpe3ZhciBuPWUuYWN0aXZlU3RhcnREYXRlLHI9ZS5kYXRlLG89ZS52aWV3O3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dCh7YWN0aXZlU3RhcnREYXRlOm4sZGF0ZTpyLHZpZXc6b30pOnR9bHQucHJvcFR5cGVzPW90KG90KHt9LEJlKSx7fSx7YWN0aXZlU3RhcnREYXRlOmkoKS5pbnN0YW5jZU9mKERhdGUpLGNvdW50OmkoKS5udW1iZXIsZGF0ZVRyYW5zZm9ybTppKCkuZnVuYy5pc1JlcXVpcmVkLGRhdGVUeXBlOmkoKS5zdHJpbmcsb2Zmc2V0OmkoKS5udW1iZXIsc3RlcDppKCkubnVtYmVyLHRpbGU6aSgpLmZ1bmMuaXNSZXF1aXJlZH0pO3ZhciBtdD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksdCYmcHQoZSx0KX0oYyxlKTt2YXIgdCxuLHIsYSxpLGw9KGE9YyxpPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PWh0KGEpO2lmKGkpe3ZhciBuPWh0KHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMsbil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJihcIm9iamVjdFwiPT09c3QodCl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBmdChlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGMoKXt2YXIgZTshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLGMpO2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09YXJndW1lbnRzW3JdO3JldHVybiBndChmdChlPWwuY2FsbC5hcHBseShsLFt0aGlzXS5jb25jYXQobikpKSxcInN0YXRlXCIse30pLGV9cmV0dXJuIHQ9YyxyPVt7a2V5OlwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmFjdGl2ZVN0YXJ0RGF0ZSxyPWUudGlsZUNsYXNzTmFtZSxvPWUudGlsZUNvbnRlbnQsYT17fTtyZXR1cm4ociE9PXQudGlsZUNsYXNzTmFtZVByb3BzfHx2dChuLHQuYWN0aXZlU3RhcnREYXRlUHJvcHMpKSYmKGEudGlsZUNsYXNzTmFtZT1DdChlLHIpLGEudGlsZUNsYXNzTmFtZVByb3BzPXIpLChvIT09dC50aWxlQ29udGVudFByb3BzfHx2dChuLHQuYWN0aXZlU3RhcnREYXRlUHJvcHMpKSYmKGEudGlsZUNvbnRlbnQ9Q3QoZSxvKSxhLnRpbGVDb250ZW50UHJvcHM9byksYS5hY3RpdmVTdGFydERhdGVQcm9wcz1uLGF9fV0sKG49W3trZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmFjdGl2ZVN0YXJ0RGF0ZSxuPWUuY2hpbGRyZW4scj1lLmNsYXNzZXMsYT1lLmRhdGUsaT1lLmZvcm1hdEFiYnIsbD1lLmxvY2FsZSxjPWUubWF4RGF0ZSx1PWUubWF4RGF0ZVRyYW5zZm9ybSxkPWUubWluRGF0ZSxwPWUubWluRGF0ZVRyYW5zZm9ybSxmPWUub25DbGljayxoPWUub25Nb3VzZU92ZXIsZz1lLnN0eWxlLHY9ZS50aWxlRGlzYWJsZWQsQz1lLnZpZXcsbT10aGlzLnN0YXRlLHc9bS50aWxlQ2xhc3NOYW1lLGI9bS50aWxlQ29udGVudDtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7Y2xhc3NOYW1lOnMocix3KSxkaXNhYmxlZDpkJiZwKGQpPmF8fGMmJnUoYyk8YXx8diYmdih7YWN0aXZlU3RhcnREYXRlOnQsZGF0ZTphLHZpZXc6Q30pLG9uQ2xpY2s6ZiYmZnVuY3Rpb24oZSl7cmV0dXJuIGYoYSxlKX0sb25Gb2N1czpoJiZmdW5jdGlvbigpe3JldHVybiBoKGEpfSxvbk1vdXNlT3ZlcjpoJiZmdW5jdGlvbigpe3JldHVybiBoKGEpfSxzdHlsZTpnLHR5cGU6XCJidXR0b25cIn0saT9vKCkuY3JlYXRlRWxlbWVudChcImFiYnJcIix7XCJhcmlhLWxhYmVsXCI6aShsLGEpfSxuKTpuLGIpfX1dKSYmZHQodC5wcm90b3R5cGUsbiksciYmZHQodCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcInByb3RvdHlwZVwiLHt3cml0YWJsZTohMX0pLGN9KHIuQ29tcG9uZW50KTttdC5wcm9wVHlwZXM9dXQodXQoe30sWmUpLHt9LHtjaGlsZHJlbjppKCkubm9kZS5pc1JlcXVpcmVkLGZvcm1hdEFiYnI6aSgpLmZ1bmMsbWF4RGF0ZVRyYW5zZm9ybTppKCkuZnVuYy5pc1JlcXVpcmVkLG1pbkRhdGVUcmFuc2Zvcm06aSgpLmZ1bmMuaXNSZXF1aXJlZH0pO3ZhciB3dD1bXCJjbGFzc2VzXCIsXCJmb3JtYXRZZWFyXCJdO2Z1bmN0aW9uIGJ0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiB5dChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9idChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe3h0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpidChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiB4dChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24ga3QoKXtyZXR1cm4ga3Q9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxrdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIFN0PVwicmVhY3QtY2FsZW5kYXJfX2NlbnR1cnktdmlld19fZGVjYWRlc19fZGVjYWRlXCI7ZnVuY3Rpb24gT3QoZSl7dmFyIHQ9ZS5jbGFzc2VzLG49ZS5mb3JtYXRZZWFyLHI9dm9pZCAwPT09bj9wZTpuLGE9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLHd0KSxpPWEuZGF0ZSxsPWEubG9jYWxlO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChtdCxrdCh7fSxhLHtjbGFzc2VzOltdLmNvbmNhdCh0LFN0KSxtYXhEYXRlVHJhbnNmb3JtOkUsbWluRGF0ZVRyYW5zZm9ybTpMLHZpZXc6XCJjZW50dXJ5XCJ9KSxNZShsLHIsaSkpfWZ1bmN0aW9uIE10KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBMdChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gX3QoKXtyZXR1cm4gX3Q9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxfdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gUHQoZSl7dmFyIHQ9bSh5KGUuYWN0aXZlU3RhcnREYXRlKSksbj10Kzk5O3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChsdCxfdCh7fSxlLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9fY2VudHVyeS12aWV3X19kZWNhZGVzXCIsZGF0ZVRyYW5zZm9ybTpMLGRhdGVUeXBlOlwiZGVjYWRlXCIsZW5kOm4sc3RhcnQ6dCxzdGVwOjEwLHRpbGU6T3R9KSl9ZnVuY3Rpb24gRXQoZSl7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19jZW50dXJ5LXZpZXdcIn0sbygpLmNyZWF0ZUVsZW1lbnQoUHQsZSkpfU90LnByb3BUeXBlcz15dCh5dCh7fSxaZSkse30se2Zvcm1hdFllYXI6aSgpLmZ1bmN9KSxQdC5wcm9wVHlwZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/TXQoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtMdChlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6TXQoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9KHt9LEJlKTt2YXIganQ9W1wiY2xhc3Nlc1wiLFwiZm9ybWF0WWVhclwiXTtmdW5jdGlvbiBSdChlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gSXQoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/UnQoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtWdChlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6UnQoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gVnQoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIEh0KCl7cmV0dXJuIEh0PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sSHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBBdD1cInJlYWN0LWNhbGVuZGFyX19kZWNhZGUtdmlld19feWVhcnNfX3llYXJcIjtmdW5jdGlvbiBUdChlKXt2YXIgdD1lLmNsYXNzZXMsbj1lLmZvcm1hdFllYXIscj12b2lkIDA9PT1uP3BlOm4sYT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsanQpLGk9YS5kYXRlLGw9YS5sb2NhbGU7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KG10LEh0KHt9LGEse2NsYXNzZXM6W10uY29uY2F0KHQsQXQpLG1heERhdGVUcmFuc2Zvcm06QSxtaW5EYXRlVHJhbnNmb3JtOkksdmlldzpcImRlY2FkZVwifSkscihsLGkpKX1mdW5jdGlvbiBEdChlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gQnQoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIFp0KCl7cmV0dXJuIFp0PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sWnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uICR0KGUpe3ZhciB0PW0oTChlLmFjdGl2ZVN0YXJ0RGF0ZSkpLG49dCs5O3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChsdCxadCh7fSxlLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9fZGVjYWRlLXZpZXdfX3llYXJzXCIsZGF0ZVRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgRGF0ZTtyZXR1cm4gdC5zZXRGdWxsWWVhcihlLDAsMSksdC5zZXRIb3VycygwLDAsMCwwKSx0fSxkYXRlVHlwZTpcInllYXJcIixlbmQ6bixzdGFydDp0LHRpbGU6VHR9KSl9ZnVuY3Rpb24gTnQoZSl7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19kZWNhZGUtdmlld1wifSxvKCkuY3JlYXRlRWxlbWVudCgkdCxlKSl9VHQucHJvcFR5cGVzPUl0KEl0KHt9LFplKSx7fSx7Zm9ybWF0WWVhcjppKCkuZnVuY30pLCR0LnByb3BUeXBlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9EdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe0J0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpEdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX0oe30sQmUpO3ZhciBGdD1bXCJjbGFzc2VzXCIsXCJmb3JtYXRNb250aFwiLFwiZm9ybWF0TW9udGhZZWFyXCJdO2Z1bmN0aW9uIFd0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBVdChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9XdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe3p0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpXdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiB6dChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gR3QoKXtyZXR1cm4gR3Q9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxHdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIEt0PVwicmVhY3QtY2FsZW5kYXJfX3llYXItdmlld19fbW9udGhzX19tb250aFwiO2Z1bmN0aW9uIHF0KGUpe3ZhciB0PWUuY2xhc3NlcyxuPWUuZm9ybWF0TW9udGgscj12b2lkIDA9PT1uP3NlOm4sYT1lLmZvcm1hdE1vbnRoWWVhcixpPXZvaWQgMD09PWE/Y2U6YSxsPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxGdCkscz1sLmRhdGUsYz1sLmxvY2FsZTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQobXQsR3Qoe30sbCx7Y2xhc3NlczpbXS5jb25jYXQodCxLdCksZm9ybWF0QWJicjppLG1heERhdGVUcmFuc2Zvcm06RixtaW5EYXRlVHJhbnNmb3JtOlosdmlldzpcInllYXJcIn0pLHIoYyxzKSl9ZnVuY3Rpb24gWXQoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIEp0KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1l0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7WHQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOll0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIFh0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBRdCgpe3JldHVybiBRdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LFF0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBlbihlKXt2YXIgdD1tKGUuYWN0aXZlU3RhcnREYXRlKTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQobHQsUXQoe30sZSx7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX3llYXItdmlld19fbW9udGhzXCIsZGF0ZVRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgbj1uZXcgRGF0ZTtyZXR1cm4gbi5zZXRGdWxsWWVhcih0LGUsMSksbi5zZXRIb3VycygwLDAsMCwwKSxufSxkYXRlVHlwZTpcIm1vbnRoXCIsZW5kOjExLHN0YXJ0OjAsdGlsZTpxdH0pKX1mdW5jdGlvbiB0bihlKXtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX3llYXItdmlld1wifSxvKCkuY3JlYXRlRWxlbWVudChlbixlKSl9cXQucHJvcFR5cGVzPVV0KFV0KHt9LFplKSx7fSx7Zm9ybWF0TW9udGg6aSgpLmZ1bmMsZm9ybWF0TW9udGhZZWFyOmkoKS5mdW5jfSksZW4ucHJvcFR5cGVzPUp0KEp0KHt9LEJlKSx7fSx7bG9jYWxlOmkoKS5zdHJpbmd9KTt2YXIgbm49W1wiZm9ybWF0RGF5XCIsXCJmb3JtYXRMb25nRGF0ZVwiLFwiY2FsZW5kYXJUeXBlXCIsXCJjbGFzc2VzXCIsXCJjdXJyZW50TW9udGhJbmRleFwiXTtmdW5jdGlvbiBybihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/cm4oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXthbihlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6cm4oT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gYW4oZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIGxuKCl7cmV0dXJuIGxuPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sbG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBzbj1cInJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X19kYXlzX19kYXlcIjtmdW5jdGlvbiBjbihlKXt2YXIgdD1lLmZvcm1hdERheSxuPXZvaWQgMD09PXQ/aWU6dCxyPWUuZm9ybWF0TG9uZ0RhdGUsYT12b2lkIDA9PT1yP2xlOnIsaT1lLmNhbGVuZGFyVHlwZSxsPWUuY2xhc3NlcyxzPWUuY3VycmVudE1vbnRoSW5kZXgsYz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsbm4pLHU9Yy5kYXRlLGQ9Yy5sb2NhbGU7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KG10LGxuKHt9LGMse2NsYXNzZXM6W10uY29uY2F0KGwsc24sTGUodSxpKT9cIlwiLmNvbmNhdChzbixcIi0td2Vla2VuZFwiKTpudWxsLHUuZ2V0TW9udGgoKSE9PXM/XCJcIi5jb25jYXQoc24sXCItLW5laWdoYm9yaW5nTW9udGhcIik6bnVsbCksZm9ybWF0QWJicjphLG1heERhdGVUcmFuc2Zvcm06cSxtaW5EYXRlVHJhbnNmb3JtOkcsdmlldzpcIm1vbnRoXCJ9KSxuKGQsdSkpfWNuLnByb3BUeXBlcz1vbihvbih7fSxaZSkse30se2N1cnJlbnRNb250aEluZGV4OmkoKS5udW1iZXIuaXNSZXF1aXJlZCxmb3JtYXREYXk6aSgpLmZ1bmMsZm9ybWF0TG9uZ0RhdGU6aSgpLmZ1bmN9KTt2YXIgdW49W1wic2hvd0ZpeGVkTnVtYmVyT2ZXZWVrc1wiLFwic2hvd05laWdoYm9yaW5nTW9udGhcIl07ZnVuY3Rpb24gZG4oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIHBuKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBmbigpe3JldHVybiBmbj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBobihlKXt2YXIgdD1lLmFjdGl2ZVN0YXJ0RGF0ZSxuPWUuY2FsZW5kYXJUeXBlLHI9ZS5zaG93Rml4ZWROdW1iZXJPZldlZWtzLGE9ZS5zaG93TmVpZ2hib3JpbmdNb250aCxpPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSx1biksbD1tKHQpLHM9dyh0KSxjPXJ8fGEsdT12ZSh0LG4pLGQ9Yz8wOnUscD0xKyhjPy11OjApLGY9ZnVuY3Rpb24oKXtpZihyKXJldHVybiBwKzQyLTE7dmFyIGU9Sih0KTtpZihhKXt2YXIgbz1uZXcgRGF0ZTtyZXR1cm4gby5zZXRGdWxsWWVhcihsLHMsZSksby5zZXRIb3VycygwLDAsMCwwKSxlKyg3LXZlKG8sbiktMSl9cmV0dXJuIGV9KCk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KGx0LGZuKHt9LGkse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X19kYXlzXCIsY291bnQ6NyxjdXJyZW50TW9udGhJbmRleDpzLGRhdGVUcmFuc2Zvcm06ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGU7cmV0dXJuIHQuc2V0RnVsbFllYXIobCxzLGUpLHQuc2V0SG91cnMoMCwwLDAsMCksdH0sZGF0ZVR5cGU6XCJkYXlcIixlbmQ6ZixvZmZzZXQ6ZCxzdGFydDpwLHRpbGU6Y259KSl9aG4ucHJvcFR5cGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP2RuKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7cG4oZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOmRuKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfSh7Y2FsZW5kYXJUeXBlOmplLmlzUmVxdWlyZWQsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczppKCkuYm9vbCxzaG93TmVpZ2hib3JpbmdNb250aDppKCkuYm9vbH0sQmUpO3ZhciBnbj1cInJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X193ZWVrZGF5c1wiLHZuPVwiXCIuY29uY2F0KGduLFwiX193ZWVrZGF5XCIpO2Z1bmN0aW9uIENuKGUpe2Zvcih2YXIgdD1lLmNhbGVuZGFyVHlwZSxuPWUuZm9ybWF0U2hvcnRXZWVrZGF5LHI9dm9pZCAwPT09bj91ZTpuLGE9ZS5mb3JtYXRXZWVrZGF5LGk9dm9pZCAwPT09YT9kZTphLGw9ZS5sb2NhbGUsYz1lLm9uTW91c2VMZWF2ZSx1PVoobmV3IERhdGUpLGQ9bSh1KSxwPXcodSksZj1bXSxoPTE7aDw9NztoKz0xKXt2YXIgZz1uZXcgRGF0ZShkLHAsaC12ZSh1LHQpKSx2PWkobCxnKTtmLnB1c2gobygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7a2V5OmgsY2xhc3NOYW1lOnModm4sTGUoZyx0KSYmXCJcIi5jb25jYXQodm4sXCItLXdlZWtlbmRcIikpfSxvKCkuY3JlYXRlRWxlbWVudChcImFiYnJcIix7XCJhcmlhLWxhYmVsXCI6dix0aXRsZTp2fSxyKGwsZykucmVwbGFjZShcIi5cIixcIlwiKSkpKX1yZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQocWUse2NsYXNzTmFtZTpnbixjb3VudDo3LG9uRm9jdXM6Yyxvbk1vdXNlT3ZlcjpjfSxmKX1Dbi5wcm9wVHlwZXM9e2NhbGVuZGFyVHlwZTpqZS5pc1JlcXVpcmVkLGZvcm1hdFNob3J0V2Vla2RheTppKCkuZnVuYyxmb3JtYXRXZWVrZGF5OmkoKS5mdW5jLGxvY2FsZTppKCkuc3RyaW5nLG9uTW91c2VMZWF2ZTppKCkuZnVuY307dmFyIG1uPVtcImRhdGVcIixcIm9uQ2xpY2tXZWVrTnVtYmVyXCIsXCJ3ZWVrTnVtYmVyXCJdO2Z1bmN0aW9uIHduKCl7cmV0dXJuIHduPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sd24uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGJuKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiB5bihlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9dmFyIHhuPVwicmVhY3QtY2FsZW5kYXJfX3RpbGVcIjtmdW5jdGlvbiBrbihlKXt2YXIgdD1lLmRhdGUsbj1lLm9uQ2xpY2tXZWVrTnVtYmVyLHI9ZS53ZWVrTnVtYmVyLGE9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLG1uKSxpPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP2JuKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7eW4oZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOmJuKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfSh7Y2xhc3NOYW1lOnhufSxhKSxsPW8oKS5jcmVhdGVFbGVtZW50KFwic3BhblwiLG51bGwscik7cmV0dXJuIG4/bygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix3bih7fSxpLHtvbkNsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiBuKHIsdCxlKX0sdHlwZTpcImJ1dHRvblwifSksbCk6bygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIixpLGwpfWZ1bmN0aW9uIFNuKGUpe3ZhciB0PWUuYWN0aXZlU3RhcnREYXRlLG49ZS5jYWxlbmRhclR5cGUscj1lLm9uQ2xpY2tXZWVrTnVtYmVyLGE9ZS5vbk1vdXNlTGVhdmUsaT1lLnNob3dGaXhlZE51bWJlck9mV2Vla3MsbD1mdW5jdGlvbigpe2lmKGkpcmV0dXJuIDY7dmFyIGU9Sih0KS0oNy12ZSh0LG4pKTtyZXR1cm4gMStNYXRoLmNlaWwoZS83KX0oKSxzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPW0odCkscj13KHQpLG89Yih0KSxhPVtdLGk9MDtpPGw7aSs9MSlhLnB1c2goQ2UobmV3IERhdGUoZSxyLG8rNyppKSxuKSk7cmV0dXJuIGF9KCksYz1zLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRlLklTT184NjAxLHI9bj09PXRlLlVTP3RlLlVTOnRlLklTT184NjAxLG89Q2UoZSxuKSxhPW0oZSkrMTtkb3t0PUNlKG5ldyBEYXRlKGEsMCxyPT09dGUuSVNPXzg2MDE/NDoxKSxuKSxhLT0xfXdoaWxlKGU8dCk7cmV0dXJuIE1hdGgucm91bmQoKG8tdCkvNjA0OGU1KSsxfShlLG4pfSkpO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChxZSx7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtOdW1iZXJzXCIsY291bnQ6bCxkaXJlY3Rpb246XCJjb2x1bW5cIixvbkZvY3VzOmEsb25Nb3VzZU92ZXI6YSxzdHlsZTp7ZmxleEJhc2lzOlwiY2FsYygxMDAlICogKDEgLyA4KVwiLGZsZXhTaHJpbms6MH19LGMubWFwKChmdW5jdGlvbihlLHQpe3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChrbix7a2V5OmUsZGF0ZTpzW3RdLG9uQ2xpY2tXZWVrTnVtYmVyOnIsd2Vla051bWJlcjplfSl9KSkpfWtuLnByb3BUeXBlcz17ZGF0ZTppKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLG9uQ2xpY2tXZWVrTnVtYmVyOmkoKS5mdW5jLHdlZWtOdW1iZXI6aSgpLm5vZGUuaXNSZXF1aXJlZH0sU24ucHJvcFR5cGVzPXthY3RpdmVTdGFydERhdGU6aSgpLmluc3RhbmNlT2YoRGF0ZSkuaXNSZXF1aXJlZCxjYWxlbmRhclR5cGU6amUuaXNSZXF1aXJlZCxvbkNsaWNrV2Vla051bWJlcjppKCkuZnVuYyxvbk1vdXNlTGVhdmU6aSgpLmZ1bmMsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczppKCkuYm9vbH07dmFyIE9uPVtcImNhbGVuZGFyVHlwZVwiLFwiZm9ybWF0U2hvcnRXZWVrZGF5XCIsXCJmb3JtYXRXZWVrZGF5XCIsXCJvbkNsaWNrV2Vla051bWJlclwiLFwic2hvd1dlZWtOdW1iZXJzXCJdO2Z1bmN0aW9uIE1uKCl7cmV0dXJuIE1uPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sTW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIExuKGUpe3ZhciB0PWUuYWN0aXZlU3RhcnREYXRlLG49ZS5sb2NhbGUscj1lLm9uTW91c2VMZWF2ZSxhPWUuc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrcyxpPWUuY2FsZW5kYXJUeXBlLGw9dm9pZCAwPT09aT9mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmtleXMobmUpLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiBuZVt0XS5pbmNsdWRlcyhlKX0pKXx8dGUuSVNPXzg2MDF9KG4pOmksYz1lLmZvcm1hdFNob3J0V2Vla2RheSx1PWUuZm9ybWF0V2Vla2RheSxkPWUub25DbGlja1dlZWtOdW1iZXIscD1lLnNob3dXZWVrTnVtYmVycyxmPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxPbiksaD1cInJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3XCI7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpzKGgscD9cIlwiLmNvbmNhdChoLFwiLS13ZWVrTnVtYmVyc1wiKTpcIlwiKX0sbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7c3R5bGU6e2Rpc3BsYXk6XCJmbGV4XCIsYWxpZ25JdGVtczpcImZsZXgtZW5kXCJ9fSxwP28oKS5jcmVhdGVFbGVtZW50KFNuLHthY3RpdmVTdGFydERhdGU6dCxjYWxlbmRhclR5cGU6bCxvbkNsaWNrV2Vla051bWJlcjpkLG9uTW91c2VMZWF2ZTpyLHNob3dGaXhlZE51bWJlck9mV2Vla3M6YX0pOm51bGwsbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7c3R5bGU6e2ZsZXhHcm93OjEsd2lkdGg6XCIxMDAlXCJ9fSxvKCkuY3JlYXRlRWxlbWVudChDbix7Y2FsZW5kYXJUeXBlOmwsZm9ybWF0U2hvcnRXZWVrZGF5OmMsZm9ybWF0V2Vla2RheTp1LGxvY2FsZTpuLG9uTW91c2VMZWF2ZTpyfSksbygpLmNyZWF0ZUVsZW1lbnQoaG4sTW4oe2NhbGVuZGFyVHlwZTpsfSxmKSkpKSl9TG4ucHJvcFR5cGVzPXthY3RpdmVTdGFydERhdGU6aSgpLmluc3RhbmNlT2YoRGF0ZSkuaXNSZXF1aXJlZCxjYWxlbmRhclR5cGU6amUsZm9ybWF0U2hvcnRXZWVrZGF5OmkoKS5mdW5jLGZvcm1hdFdlZWtkYXk6aSgpLmZ1bmMsbG9jYWxlOmkoKS5zdHJpbmcsb25DbGlja1dlZWtOdW1iZXI6aSgpLmZ1bmMsb25Nb3VzZUxlYXZlOmkoKS5mdW5jLHNob3dGaXhlZE51bWJlck9mV2Vla3M6aSgpLmJvb2wsc2hvd1dlZWtOdW1iZXJzOmkoKS5ib29sfTt2YXIgX249W1wiYWN0aXZlU3RhcnREYXRlXCIsXCJkZWZhdWx0QWN0aXZlU3RhcnREYXRlXCIsXCJkZWZhdWx0VmFsdWVcIixcImRlZmF1bHRWaWV3XCIsXCJtYXhEZXRhaWxcIixcIm1pbkRldGFpbFwiLFwidmFsdWVcIixcInZpZXdcIl07ZnVuY3Rpb24gUG4oKXtyZXR1cm4gUG49T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxQbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRW4oZSl7cmV0dXJuIEVuPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LEVuKGUpfWZ1bmN0aW9uIGpuKGUsdCl7cmV0dXJuIGpuPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sam4oZSx0KX1mdW5jdGlvbiBSbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4gZX1mdW5jdGlvbiBJbihlKXtyZXR1cm4gSW49T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LEluKGUpfWZ1bmN0aW9uIFZuKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBIbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9WbihPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe0FuKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpWbihPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBBbihlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gVG4oZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn12YXIgRG49bmV3IERhdGU7RG4uc2V0RnVsbFllYXIoMSwwLDEpLERuLnNldEhvdXJzKDAsMCwwLDApO3ZhciBCbj1uZXcgRGF0ZSg4NjRlMTMpLFpuPVwicmVhY3QtY2FsZW5kYXJcIiwkbj1bXCJjZW50dXJ5XCIsXCJkZWNhZGVcIixcInllYXJcIixcIm1vbnRoXCJdLE5uPVtdLmNvbmNhdChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gVG4oZSl9KGUpfHxmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gVG4oZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuXCJPYmplY3RcIj09PW4mJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW58fFwiU2V0XCI9PT1uP0FycmF5LmZyb20oZSk6XCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP1RuKGUsdCk6dm9pZCAwfX0oZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9KCRuLnNsaWNlKDEpKSxbXCJkYXlcIl0pO2Z1bmN0aW9uIEZuKGUsdCl7cmV0dXJuICRuLnNsaWNlKCRuLmluZGV4T2YoZSksJG4uaW5kZXhPZih0KSsxKX1mdW5jdGlvbiBXbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMSE9PUZuKHQsbikuaW5kZXhPZihlKX0oZSx0LG4pP2U6bn1mdW5jdGlvbiBVbihlKXtyZXR1cm4gTm5bJG4uaW5kZXhPZihlKV19ZnVuY3Rpb24gem4oZSx0KXt2YXIgbj1lLnZhbHVlLHI9ZS5taW5EYXRlLG89ZS5tYXhEYXRlLGE9ZS5tYXhEZXRhaWwsaT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiBudWxsO3ZhciBuPUFycmF5LmlzQXJyYXkoZSkmJjI9PT1lLmxlbmd0aD9lW3RdOmU7aWYoIW4pcmV0dXJuIG51bGw7dmFyIHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlP2U6bmV3IERhdGUoZSl9KG4pO2lmKGlzTmFOKHIuZ2V0VGltZSgpKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGU6IFwiLmNvbmNhdChlKSk7cmV0dXJuIHJ9KG4sdCk7aWYoIWkpcmV0dXJuIG51bGw7dmFyIGw9VW4oYSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmdD5lP3Q6biYmbjxlP246ZX0oW21lLHhlXVt0XShsLGkpLHIsbyl9dmFyIEduPWZ1bmN0aW9uKGUpe3JldHVybiB6bihlLDApfSxLbj1mdW5jdGlvbihlKXtyZXR1cm4gem4oZSwxKX0scW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS52YWx1ZTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90OltHbixLbl0ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdChlKX0pKX07ZnVuY3Rpb24gWW4oZSl7dmFyIHQ9ZS5tYXhEYXRlLG49ZS5tYXhEZXRhaWwscj1lLm1pbkRhdGUsbz1lLm1pbkRldGFpbCxhPWUudmFsdWU7cmV0dXJuIG1lKFduKGUudmlldyxvLG4pLEduKHt2YWx1ZTphLG1pbkRhdGU6cixtYXhEYXRlOnQsbWF4RGV0YWlsOm59KXx8bmV3IERhdGUpfXZhciBKbj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmMT09PVtdLmNvbmNhdChlKS5sZW5ndGh9LFhuPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KSx0JiZqbihlLHQpfShsLGUpO3ZhciB0LG4scixhLGk9KHI9bCxhPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PUluKHIpO2lmKGEpe3ZhciBuPUluKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMsbil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJihcIm9iamVjdFwiPT09RW4odCl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBSbihlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGwoKXt2YXIgZTshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLGwpO2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09YXJndW1lbnRzW3JdO3JldHVybiBBbihSbihlPWkuY2FsbC5hcHBseShpLFt0aGlzXS5jb25jYXQobikpKSxcInN0YXRlXCIse2FjdGl2ZVN0YXJ0RGF0ZTplLnByb3BzLmRlZmF1bHRBY3RpdmVTdGFydERhdGUsdmFsdWU6ZS5wcm9wcy5kZWZhdWx0VmFsdWUsdmlldzplLnByb3BzLmRlZmF1bHRWaWV3fSksQW4oUm4oZSksXCJzZXRTdGF0ZUFuZENhbGxDYWxsYmFja3NcIiwoZnVuY3Rpb24odCxuLHIpe3ZhciBvPVJuKGUpLGE9by5hY3RpdmVTdGFydERhdGUsaT1vLnZpZXcsbD1lLnByb3BzLHM9bC5hbGxvd1BhcnRpYWxSYW5nZSxjPWwub25BY3RpdmVTdGFydERhdGVDaGFuZ2UsdT1sLm9uQ2hhbmdlLGQ9bC5vblZpZXdDaGFuZ2UscD1sLnNlbGVjdFJhbmdlLGY9e2FjdGl2ZVN0YXJ0RGF0ZTphLHZpZXc6aX07ZS5zZXRTdGF0ZSh0LChmdW5jdGlvbigpe3ZhciBvPXthY3Rpb246dC5hY3Rpb24sYWN0aXZlU3RhcnREYXRlOnQuYWN0aXZlU3RhcnREYXRlfHxlLmFjdGl2ZVN0YXJ0RGF0ZSx2YWx1ZTp0LnZhbHVlfHxlLnZhbHVlLHZpZXc6dC52aWV3fHxlLnZpZXd9O2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUgaW4gdCYmKEVuKHRbZV0pIT09RW4oZltlXSl8fCh0W2VdaW5zdGFuY2VvZiBEYXRlP3RbZV0uZ2V0VGltZSgpIT09ZltlXS5nZXRUaW1lKCk6dFtlXSE9PWZbZV0pKX1hKFwiYWN0aXZlU3RhcnREYXRlXCIpJiZjJiZjKG8pLGEoXCJ2aWV3XCIpJiZkJiZkKG8pLGEoXCJ2YWx1ZVwiKSYmdSYmKHAmJkpuKHQudmFsdWUpP3MmJnUoW3QudmFsdWVdLG4pOnUodC52YWx1ZSxuKSksciYmcihvKX0pKX0pKSxBbihSbihlKSxcInNldEFjdGl2ZVN0YXJ0RGF0ZVwiLChmdW5jdGlvbih0LG4pe2Uuc2V0U3RhdGVBbmRDYWxsQ2FsbGJhY2tzKHthY3Rpb246bixhY3RpdmVTdGFydERhdGU6dH0pfSkpLEFuKFJuKGUpLFwiZHJpbGxEb3duXCIsKGZ1bmN0aW9uKHQsbil7aWYoZS5kcmlsbERvd25BdmFpbGFibGUpe2Uub25DbGlja1RpbGUodCxuKTt2YXIgcj1SbihlKSxvPXIudmlldyxhPXIudmlld3MsaT1lLnByb3BzLm9uRHJpbGxEb3duLGw9YVthLmluZGV4T2YobykrMV07ZS5zZXRTdGF0ZUFuZENhbGxDYWxsYmFja3Moe2FjdGlvbjpcImRyaWxsRG93blwiLGFjdGl2ZVN0YXJ0RGF0ZTp0LHZpZXc6bH0sdm9pZCAwLGkpfX0pKSxBbihSbihlKSxcImRyaWxsVXBcIiwoZnVuY3Rpb24oKXtpZihlLmRyaWxsVXBBdmFpbGFibGUpe3ZhciB0PVJuKGUpLG49dC5hY3RpdmVTdGFydERhdGUscj10LnZpZXcsbz10LnZpZXdzLGE9ZS5wcm9wcy5vbkRyaWxsVXAsaT1vW28uaW5kZXhPZihyKS0xXSxsPW1lKGksbik7ZS5zZXRTdGF0ZUFuZENhbGxDYWxsYmFja3Moe2FjdGlvbjpcImRyaWxsVXBcIixhY3RpdmVTdGFydERhdGU6bCx2aWV3Oml9LHZvaWQgMCxhKX19KSksQW4oUm4oZSksXCJvbkNoYW5nZVwiLChmdW5jdGlvbih0LG4pe3ZhciByPVJuKGUpLnZhbHVlLG89ZS5wcm9wcyxhPW8uZ29Ub1JhbmdlU3RhcnRPblNlbGVjdCxpPW8uc2VsZWN0UmFuZ2U7ZS5vbkNsaWNrVGlsZSh0LG4pO3ZhciBsLHMsYyx1PWkmJiFKbihyKTtpZihpKXt2YXIgZD1SbihlKS52YWx1ZVR5cGU7bD11P21lKGQsdCk6W21lKHM9ZCwoYz1bcix0XS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KSkpWzBdKSx4ZShzLGNbMV0pXX1lbHNlIGw9ZS5nZXRQcm9jZXNzZWRWYWx1ZSh0KTt2YXIgcD0haXx8dXx8YT9ZbihIbihIbih7fSxlLnByb3BzKSx7fSx7dmFsdWU6bH0pKTpudWxsO24ucGVyc2lzdCgpLGUuc2V0U3RhdGVBbmRDYWxsQ2FsbGJhY2tzKHthY3Rpb246XCJvbkNoYW5nZVwiLGFjdGl2ZVN0YXJ0RGF0ZTpwLHZhbHVlOmx9LG4pfSkpLEFuKFJuKGUpLFwib25DbGlja1RpbGVcIiwoZnVuY3Rpb24odCxuKXt2YXIgcj1SbihlKS52aWV3LG89ZS5wcm9wcyxhPW8ub25DbGlja0RheSxpPW8ub25DbGlja0RlY2FkZSxsPW8ub25DbGlja01vbnRoLHM9by5vbkNsaWNrWWVhcixjPWZ1bmN0aW9uKCl7c3dpdGNoKHIpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4gaTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gcztjYXNlXCJ5ZWFyXCI6cmV0dXJuIGw7Y2FzZVwibW9udGhcIjpyZXR1cm4gYTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdmlldzogXCIuY29uY2F0KHIsXCIuXCIpKX19KCk7YyYmYyh0LG4pfSkpLEFuKFJuKGUpLFwib25Nb3VzZU92ZXJcIiwoZnVuY3Rpb24odCl7ZS5zZXRTdGF0ZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaG92ZXImJmUuaG92ZXIuZ2V0VGltZSgpPT09dC5nZXRUaW1lKCk/bnVsbDp7aG92ZXI6dH19KSl9KSksQW4oUm4oZSksXCJvbk1vdXNlTGVhdmVcIiwoZnVuY3Rpb24oKXtlLnNldFN0YXRlKHtob3ZlcjpudWxsfSl9KSksZX1yZXR1cm4gdD1sLG49W3trZXk6XCJhY3RpdmVTdGFydERhdGVcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixvLGEsaSxsLHMsYyx1LGQscD10aGlzLnByb3BzLmFjdGl2ZVN0YXJ0RGF0ZSxmPXRoaXMuc3RhdGUuYWN0aXZlU3RhcnREYXRlO3JldHVybiBwfHxmfHwodD0oZT10aGlzLnByb3BzKS5hY3RpdmVTdGFydERhdGUsbj1lLmRlZmF1bHRBY3RpdmVTdGFydERhdGUscj1lLmRlZmF1bHRWYWx1ZSxvPWUuZGVmYXVsdFZpZXcsYT1lLm1heERldGFpbCxpPWUubWluRGV0YWlsLGw9ZS52YWx1ZSxzPWUudmlldyxjPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxfbiksdT1XbihzLGksYSksKGQ9dHx8bik/bWUodSxkKTpZbihIbih7bWF4RGV0YWlsOmEsbWluRGV0YWlsOmksdmFsdWU6bHx8cix2aWV3OnN8fG99LGMpKSl9fSx7a2V5OlwidmFsdWVcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zZWxlY3RSYW5nZSxuPWUudmFsdWUscj10aGlzLnN0YXRlLnZhbHVlO3JldHVybiB0JiZKbihyKT9yOnZvaWQgMCE9PW4/bjpyfX0se2tleTpcInZhbHVlVHlwZVwiLGdldDpmdW5jdGlvbigpe3JldHVybiBVbih0aGlzLnByb3BzLm1heERldGFpbCl9fSx7a2V5Olwidmlld1wiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLm1pbkRldGFpbCxuPWUubWF4RGV0YWlsLHI9ZS52aWV3LG89dGhpcy5zdGF0ZS52aWV3O3JldHVybiBXbihyfHxvLHQsbil9fSx7a2V5Olwidmlld3NcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzO3JldHVybiBGbihlLm1pbkRldGFpbCxlLm1heERldGFpbCl9fSx7a2V5OlwiaG92ZXJcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLnNlbGVjdFJhbmdlLHQ9dGhpcy5zdGF0ZS5ob3ZlcjtyZXR1cm4gZT90Om51bGx9fSx7a2V5OlwiZHJpbGxEb3duQXZhaWxhYmxlXCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52aWV3LHQ9dGhpcy52aWV3cztyZXR1cm4gdC5pbmRleE9mKGUpPHQubGVuZ3RoLTF9fSx7a2V5OlwiZHJpbGxVcEF2YWlsYWJsZVwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMudmlldztyZXR1cm4gdGhpcy52aWV3cy5pbmRleE9mKGUpPjB9fSx7a2V5OlwiZ2V0UHJvY2Vzc2VkVmFsdWVcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLG49dC5taW5EYXRlLHI9dC5tYXhEYXRlLG89dC5tYXhEZXRhaWwsYT10LnJldHVyblZhbHVlO3JldHVybiBmdW5jdGlvbigpe3N3aXRjaChhKXtjYXNlXCJzdGFydFwiOnJldHVybiBHbjtjYXNlXCJlbmRcIjpyZXR1cm4gS247Y2FzZVwicmFuZ2VcIjpyZXR1cm4gcW47ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJldHVyblZhbHVlLlwiKX19KCkoe3ZhbHVlOmUsbWluRGF0ZTpuLG1heERhdGU6cixtYXhEZXRhaWw6b30pfX0se2tleTpcInJlbmRlckNvbnRlbnRcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmFjdGl2ZVN0YXJ0RGF0ZSxuPXRoaXMub25Nb3VzZU92ZXIscj10aGlzLnZhbHVlVHlwZSxhPXRoaXMudmFsdWUsaT10aGlzLnZpZXcsbD10aGlzLnByb3BzLHM9bC5jYWxlbmRhclR5cGUsYz1sLmxvY2FsZSx1PWwubWF4RGF0ZSxkPWwubWluRGF0ZSxwPWwuc2VsZWN0UmFuZ2UsZj1sLnRpbGVDbGFzc05hbWUsaD1sLnRpbGVDb250ZW50LGc9bC50aWxlRGlzYWJsZWQsdj10aGlzLmhvdmVyLEM9e2FjdGl2ZVN0YXJ0RGF0ZTplP3dlKGksdCk6bWUoaSx0KSxob3Zlcjp2LGxvY2FsZTpjLG1heERhdGU6dSxtaW5EYXRlOmQsb25DbGljazp0aGlzLmRyaWxsRG93bkF2YWlsYWJsZT90aGlzLmRyaWxsRG93bjp0aGlzLm9uQ2hhbmdlLG9uTW91c2VPdmVyOnA/bjpudWxsLHRpbGVDbGFzc05hbWU6Zix0aWxlQ29udGVudDpoLHRpbGVEaXNhYmxlZDpnLHZhbHVlOmEsdmFsdWVUeXBlOnJ9O3N3aXRjaChpKXtjYXNlXCJjZW50dXJ5XCI6dmFyIG09dGhpcy5wcm9wcy5mb3JtYXRZZWFyO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChFdCxQbih7Zm9ybWF0WWVhcjptfSxDKSk7Y2FzZVwiZGVjYWRlXCI6dmFyIHc9dGhpcy5wcm9wcy5mb3JtYXRZZWFyO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChOdCxQbih7Zm9ybWF0WWVhcjp3fSxDKSk7Y2FzZVwieWVhclwiOnZhciBiPXRoaXMucHJvcHMseT1iLmZvcm1hdE1vbnRoLHg9Yi5mb3JtYXRNb250aFllYXI7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KHRuLFBuKHtmb3JtYXRNb250aDp5LGZvcm1hdE1vbnRoWWVhcjp4fSxDKSk7Y2FzZVwibW9udGhcIjp2YXIgaz10aGlzLnByb3BzLFM9ay5mb3JtYXREYXksTz1rLmZvcm1hdExvbmdEYXRlLE09ay5mb3JtYXRTaG9ydFdlZWtkYXksTD1rLmZvcm1hdFdlZWtkYXksXz1rLm9uQ2xpY2tXZWVrTnVtYmVyLFA9ay5zaG93RG91YmxlVmlldyxFPWsuc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrcyxqPWsuc2hvd05laWdoYm9yaW5nTW9udGgsUj1rLnNob3dXZWVrTnVtYmVycyxJPXRoaXMub25Nb3VzZUxlYXZlO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChMbixQbih7Y2FsZW5kYXJUeXBlOnMsZm9ybWF0RGF5OlMsZm9ybWF0TG9uZ0RhdGU6Tyxmb3JtYXRTaG9ydFdlZWtkYXk6TSxmb3JtYXRXZWVrZGF5Okwsb25DbGlja1dlZWtOdW1iZXI6Xyxvbk1vdXNlTGVhdmU6cD9JOm51bGwsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczp2b2lkIDAhPT1FP0U6UCxzaG93TmVpZ2hib3JpbmdNb250aDpqLHNob3dXZWVrTnVtYmVyczpSfSxDKSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHZpZXc6IFwiLmNvbmNhdChpLFwiLlwiKSl9fX0se2tleTpcInJlbmRlck5hdmlnYXRpb25cIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLnByb3BzLnNob3dOYXZpZ2F0aW9uKXJldHVybiBudWxsO3ZhciBlPXRoaXMuYWN0aXZlU3RhcnREYXRlLHQ9dGhpcy52aWV3LG49dGhpcy52aWV3cyxyPXRoaXMucHJvcHMsYT1yLmZvcm1hdE1vbnRoWWVhcixpPXIuZm9ybWF0WWVhcixsPXIubG9jYWxlLHM9ci5tYXhEYXRlLGM9ci5taW5EYXRlLHU9ci5uYXZpZ2F0aW9uQXJpYUxhYmVsLGQ9ci5uYXZpZ2F0aW9uQXJpYUxpdmUscD1yLm5hdmlnYXRpb25MYWJlbCxmPXIubmV4dDJBcmlhTGFiZWwsaD1yLm5leHQyTGFiZWwsZz1yLm5leHRBcmlhTGFiZWwsdj1yLm5leHRMYWJlbCxDPXIucHJldjJBcmlhTGFiZWwsbT1yLnByZXYyTGFiZWwsdz1yLnByZXZBcmlhTGFiZWwsYj1yLnByZXZMYWJlbCx5PXIuc2hvd0RvdWJsZVZpZXc7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KE5lLHthY3RpdmVTdGFydERhdGU6ZSxkcmlsbFVwOnRoaXMuZHJpbGxVcCxmb3JtYXRNb250aFllYXI6YSxmb3JtYXRZZWFyOmksbG9jYWxlOmwsbWF4RGF0ZTpzLG1pbkRhdGU6YyxuYXZpZ2F0aW9uQXJpYUxhYmVsOnUsbmF2aWdhdGlvbkFyaWFMaXZlOmQsbmF2aWdhdGlvbkxhYmVsOnAsbmV4dDJBcmlhTGFiZWw6ZixuZXh0MkxhYmVsOmgsbmV4dEFyaWFMYWJlbDpnLG5leHRMYWJlbDp2LHByZXYyQXJpYUxhYmVsOkMscHJldjJMYWJlbDptLHByZXZBcmlhTGFiZWw6dyxwcmV2TGFiZWw6YixzZXRBY3RpdmVTdGFydERhdGU6dGhpcy5zZXRBY3RpdmVTdGFydERhdGUsc2hvd0RvdWJsZVZpZXc6eSx2aWV3OnQsdmlld3M6bn0pfX0se2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2xhc3NOYW1lLG49ZS5pbnB1dFJlZixyPWUuc2VsZWN0UmFuZ2UsYT1lLnNob3dEb3VibGVWaWV3LGk9dGhpcy5vbk1vdXNlTGVhdmUsbD10aGlzLnZhbHVlLGM9W10uY29uY2F0KGwpO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6cyhabixyJiYxPT09Yy5sZW5ndGgmJlwiXCIuY29uY2F0KFpuLFwiLS1zZWxlY3RSYW5nZVwiKSxhJiZcIlwiLmNvbmNhdChabixcIi0tZG91YmxlVmlld1wiKSx0KSxyZWY6bn0sdGhpcy5yZW5kZXJOYXZpZ2F0aW9uKCksbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwiXCIuY29uY2F0KFpuLFwiX192aWV3Q29udGFpbmVyXCIpLG9uQmx1cjpyP2k6bnVsbCxvbk1vdXNlTGVhdmU6cj9pOm51bGx9LHRoaXMucmVuZGVyQ29udGVudCgpLGEmJnRoaXMucmVuZGVyQ29udGVudCghMCkpKX19XSxuJiZmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19KHQucHJvdG90eXBlLG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksbH0oci5Db21wb25lbnQpO1huLmRlZmF1bHRQcm9wcz17Z29Ub1JhbmdlU3RhcnRPblNlbGVjdDohMCxtYXhEYXRlOkJuLG1heERldGFpbDpcIm1vbnRoXCIsbWluRGF0ZTpEbixtaW5EZXRhaWw6XCJjZW50dXJ5XCIscmV0dXJuVmFsdWU6XCJzdGFydFwiLHNob3dOYXZpZ2F0aW9uOiEwLHNob3dOZWlnaGJvcmluZ01vbnRoOiEwfTt2YXIgUW49aSgpLmluc3RhbmNlT2YoRGF0ZSksZXI9aSgpLm9uZU9mVHlwZShbaSgpLnN0cmluZyxBZV0pO1huLnByb3BUeXBlcz17YWN0aXZlU3RhcnREYXRlOlFuLGFsbG93UGFydGlhbFJhbmdlOmkoKS5ib29sLGNhbGVuZGFyVHlwZTpqZSxjbGFzc05hbWU6UmUsZGVmYXVsdEFjdGl2ZVN0YXJ0RGF0ZTpRbixkZWZhdWx0VmFsdWU6ZXIsZGVmYXVsdFZpZXc6RGUsZm9ybWF0RGF5OmkoKS5mdW5jLGZvcm1hdExvbmdEYXRlOmkoKS5mdW5jLGZvcm1hdE1vbnRoOmkoKS5mdW5jLGZvcm1hdE1vbnRoWWVhcjppKCkuZnVuYyxmb3JtYXRTaG9ydFdlZWtkYXk6aSgpLmZ1bmMsZm9ybWF0V2Vla2RheTppKCkuZnVuYyxmb3JtYXRZZWFyOmkoKS5mdW5jLGdvVG9SYW5nZVN0YXJ0T25TZWxlY3Q6aSgpLmJvb2wsaW5wdXRSZWY6SGUsbG9jYWxlOmkoKS5zdHJpbmcsbWF4RGF0ZTpWZSxtYXhEZXRhaWw6aSgpLm9uZU9mKCRuKSxtaW5EYXRlOkllLG1pbkRldGFpbDppKCkub25lT2YoJG4pLG5hdmlnYXRpb25BcmlhTGFiZWw6aSgpLnN0cmluZyxuYXZpZ2F0aW9uQXJpYUxpdmU6aSgpLm9uZU9mKFtcIm9mZlwiLFwicG9saXRlXCIsXCJhc3NlcnRpdmVcIl0pLG5hdmlnYXRpb25MYWJlbDppKCkuZnVuYyxuZXh0MkFyaWFMYWJlbDppKCkuc3RyaW5nLG5leHQyTGFiZWw6aSgpLm5vZGUsbmV4dEFyaWFMYWJlbDppKCkuc3RyaW5nLG5leHRMYWJlbDppKCkubm9kZSxvbkFjdGl2ZVN0YXJ0RGF0ZUNoYW5nZTppKCkuZnVuYyxvbkNoYW5nZTppKCkuZnVuYyxvbkNsaWNrRGF5OmkoKS5mdW5jLG9uQ2xpY2tEZWNhZGU6aSgpLmZ1bmMsb25DbGlja01vbnRoOmkoKS5mdW5jLG9uQ2xpY2tXZWVrTnVtYmVyOmkoKS5mdW5jLG9uQ2xpY2tZZWFyOmkoKS5mdW5jLG9uRHJpbGxEb3duOmkoKS5mdW5jLG9uRHJpbGxVcDppKCkuZnVuYyxvblZpZXdDaGFuZ2U6aSgpLmZ1bmMscHJldjJBcmlhTGFiZWw6aSgpLnN0cmluZyxwcmV2MkxhYmVsOmkoKS5ub2RlLHByZXZBcmlhTGFiZWw6aSgpLnN0cmluZyxwcmV2TGFiZWw6aSgpLm5vZGUscmV0dXJuVmFsdWU6aSgpLm9uZU9mKFtcInN0YXJ0XCIsXCJlbmRcIixcInJhbmdlXCJdKSxzZWxlY3RSYW5nZTppKCkuYm9vbCxzaG93RG91YmxlVmlldzppKCkuYm9vbCxzaG93Rml4ZWROdW1iZXJPZldlZWtzOmkoKS5ib29sLHNob3dOYXZpZ2F0aW9uOmkoKS5ib29sLHNob3dOZWlnaGJvcmluZ01vbnRoOmkoKS5ib29sLHNob3dXZWVrTnVtYmVyczppKCkuYm9vbCx0aWxlQ2xhc3NOYW1lOmkoKS5vbmVPZlR5cGUoW2koKS5mdW5jLFJlXSksdGlsZUNvbnRlbnQ6aSgpLm9uZU9mVHlwZShbaSgpLmZ1bmMsaSgpLm5vZGVdKSx0aWxlRGlzYWJsZWQ6aSgpLmZ1bmMsdmFsdWU6ZXIsdmlldzpEZX07Y29uc3QgdHI9WG59LDUyNTE6KGUsdCxuKT0+e24oNzQxOCk7dmFyIHI9big2Njg5KSxvPTYwMTAzO2lmKHQuRnJhZ21lbnQ9NjAxMDcsXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yKXt2YXIgYT1TeW1ib2wuZm9yO289YShcInJlYWN0LmVsZW1lbnRcIiksdC5GcmFnbWVudD1hKFwicmVhY3QuZnJhZ21lbnRcIil9dmFyIGk9ci5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRC5SZWFjdEN1cnJlbnRPd25lcixsPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscz17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O2Z1bmN0aW9uIGMoZSx0LG4pe3ZhciByLGE9e30sYz1udWxsLHU9bnVsbDtmb3IociBpbiB2b2lkIDAhPT1uJiYoYz1cIlwiK24pLHZvaWQgMCE9PXQua2V5JiYoYz1cIlwiK3Qua2V5KSx2b2lkIDAhPT10LnJlZiYmKHU9dC5yZWYpLHQpbC5jYWxsKHQscikmJiFzLmhhc093blByb3BlcnR5KHIpJiYoYVtyXT10W3JdKTtpZihlJiZlLmRlZmF1bHRQcm9wcylmb3IociBpbiB0PWUuZGVmYXVsdFByb3BzKXZvaWQgMD09PWFbcl0mJihhW3JdPXRbcl0pO3JldHVybnskJHR5cGVvZjpvLHR5cGU6ZSxrZXk6YyxyZWY6dSxwcm9wczphLF9vd25lcjppLmN1cnJlbnR9fXQuanN4PWMsdC5qc3hzPWN9LDU4OTM6KGUsdCxuKT0+e2UuZXhwb3J0cz1uKDUyNTEpfSwzNTczOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1uKDY1NSksbz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obix0KSxlKX19LGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUlMT9OdW1iZXIoZS50b0ZpeGVkKDUpKTplfSxpPS8oLSk/KFtcXGRdKlxcLj9bXFxkXSkrL2csbD0vKCNbMC05YS1mXXs2fXwjWzAtOWEtZl17M318Iyg/OlswLTlhLWZdezJ9KXsyLDR9fChyZ2J8aHNsKWE/XFwoKC0/W1xcZFxcLl0rJT9bLFxcc10rKXsyLDN9XFxzKlxcLypcXHMqW1xcZFxcLl0rJT9cXCkpL2dpLHM9L14oI1swLTlhLWZdezN9fCMoPzpbMC05YS1mXXsyfSl7Miw0fXwocmdifGhzbClhP1xcKCgtP1tcXGRcXC5dKyU/WyxcXHNdKyl7MiwzfVxccypcXC8qXFxzKltcXGRcXC5dKyU/XFwpKSQvaTtmdW5jdGlvbiBjKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfXZhciB1PXt0ZXN0OmZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlfSxwYXJzZTpwYXJzZUZsb2F0LHRyYW5zZm9ybTpmdW5jdGlvbihlKXtyZXR1cm4gZX19LGQ9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHUpLHt0cmFuc2Zvcm06bygwLDEpfSkscD1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdSkse2RlZmF1bHQ6MX0pLGY9ZnVuY3Rpb24oZSl7cmV0dXJue3Rlc3Q6ZnVuY3Rpb24odCl7cmV0dXJuIGModCkmJnQuZW5kc1dpdGgoZSkmJjE9PT10LnNwbGl0KFwiIFwiKS5sZW5ndGh9LHBhcnNlOnBhcnNlRmxvYXQsdHJhbnNmb3JtOmZ1bmN0aW9uKHQpe3JldHVyblwiXCIrdCtlfX19LGg9ZihcImRlZ1wiKSxnPWYoXCIlXCIpLHY9ZihcInB4XCIpLEM9ZihcInZoXCIpLG09ZihcInZ3XCIpLHc9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGcpLHtwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZy5wYXJzZShlKS8xMDB9LHRyYW5zZm9ybTpmdW5jdGlvbihlKXtyZXR1cm4gZy50cmFuc2Zvcm0oMTAwKmUpfX0pLGI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIEJvb2xlYW4oYyhuKSYmcy50ZXN0KG4pJiZuLnN0YXJ0c1dpdGgoZSl8fHQmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHQpKX19LHk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbztpZighYyhyKSlyZXR1cm4gcjt2YXIgYT1yLm1hdGNoKGkpLGw9YVswXSxzPWFbMV0sdT1hWzJdLGQ9YVszXTtyZXR1cm4obz17fSlbZV09cGFyc2VGbG9hdChsKSxvW3RdPXBhcnNlRmxvYXQocyksb1tuXT1wYXJzZUZsb2F0KHUpLG8uYWxwaGE9dm9pZCAwIT09ZD9wYXJzZUZsb2F0KGQpOjEsb319LHg9e3Rlc3Q6YihcImhzbFwiLFwiaHVlXCIpLHBhcnNlOnkoXCJodWVcIixcInNhdHVyYXRpb25cIixcImxpZ2h0bmVzc1wiKSx0cmFuc2Zvcm06ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5odWUsbj1lLnNhdHVyYXRpb24scj1lLmxpZ2h0bmVzcyxvPWUuYWxwaGEsaT12b2lkIDA9PT1vPzE6bztyZXR1cm5cImhzbGEoXCIrTWF0aC5yb3VuZCh0KStcIiwgXCIrZy50cmFuc2Zvcm0oYShuKSkrXCIsIFwiK2cudHJhbnNmb3JtKGEocikpK1wiLCBcIithKGQudHJhbnNmb3JtKGkpKStcIilcIn19LGs9bygwLDI1NSksUz1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdSkse3RyYW5zZm9ybTpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChrKGUpKX19KSxPPXt0ZXN0OmIoXCJyZ2JcIixcInJlZFwiKSxwYXJzZTp5KFwicmVkXCIsXCJncmVlblwiLFwiYmx1ZVwiKSx0cmFuc2Zvcm06ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZWQsbj1lLmdyZWVuLHI9ZS5ibHVlLG89ZS5hbHBoYSxpPXZvaWQgMD09PW8/MTpvO3JldHVyblwicmdiYShcIitTLnRyYW5zZm9ybSh0KStcIiwgXCIrUy50cmFuc2Zvcm0obikrXCIsIFwiK1MudHJhbnNmb3JtKHIpK1wiLCBcIithKGQudHJhbnNmb3JtKGkpKStcIilcIn19LE09e3Rlc3Q6YihcIiNcIikscGFyc2U6ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIixuPVwiXCIscj1cIlwiLG89XCJcIjtyZXR1cm4gZS5sZW5ndGg+NT8odD1lLnN1YnN0cigxLDIpLG49ZS5zdWJzdHIoMywyKSxyPWUuc3Vic3RyKDUsMiksbz1lLnN1YnN0cig3LDIpKToodD1lLnN1YnN0cigxLDEpLG49ZS5zdWJzdHIoMiwxKSxyPWUuc3Vic3RyKDMsMSksbz1lLnN1YnN0cig0LDEpLHQrPXQsbis9bixyKz1yLG8rPW8pLHtyZWQ6cGFyc2VJbnQodCwxNiksZ3JlZW46cGFyc2VJbnQobiwxNiksYmx1ZTpwYXJzZUludChyLDE2KSxhbHBoYTpvP3BhcnNlSW50KG8sMTYpLzI1NToxfX0sdHJhbnNmb3JtOk8udHJhbnNmb3JtfSxMPXt0ZXN0OmZ1bmN0aW9uKGUpe3JldHVybiBPLnRlc3QoZSl8fE0udGVzdChlKXx8eC50ZXN0KGUpfSxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gTy50ZXN0KGUpP08ucGFyc2UoZSk6eC50ZXN0KGUpP3gucGFyc2UoZSk6TS5wYXJzZShlKX0sdHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUpP2U6ZS5oYXNPd25Qcm9wZXJ0eShcInJlZFwiKT9PLnRyYW5zZm9ybShlKTp4LnRyYW5zZm9ybShlKX19LF89XCIke2N9XCIsUD1cIiR7bn1cIjtmdW5jdGlvbiBFKGUpe3ZhciB0PVtdLG49MCxyPWUubWF0Y2gobCk7ciYmKG49ci5sZW5ndGgsZT1lLnJlcGxhY2UobCxfKSx0LnB1c2guYXBwbHkodCxyLm1hcChMLnBhcnNlKSkpO3ZhciBvPWUubWF0Y2goaSk7cmV0dXJuIG8mJihlPWUucmVwbGFjZShpLFApLHQucHVzaC5hcHBseSh0LG8ubWFwKHUucGFyc2UpKSkse3ZhbHVlczp0LG51bUNvbG9yczpuLHRva2VuaXNlZDplfX1mdW5jdGlvbiBqKGUpe3JldHVybiBFKGUpLnZhbHVlc31mdW5jdGlvbiBSKGUpe3ZhciB0PUUoZSksbj10LnZhbHVlcyxyPXQubnVtQ29sb3JzLG89dC50b2tlbmlzZWQsaT1uLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW8sbj0wO248aTtuKyspdD10LnJlcGxhY2UobjxyP186UCxuPHI/TC50cmFuc2Zvcm0oZVtuXSk6YShlW25dKSk7cmV0dXJuIHR9fXZhciBJPWZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlPzA6ZX0sVj17dGVzdDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsbztyZXR1cm4gaXNOYU4oZSkmJmMoZSkmJihudWxsIT09KG49bnVsbD09PSh0PWUubWF0Y2goaSkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmxlbmd0aCkmJnZvaWQgMCE9PW4/bjowKSsobnVsbCE9PShvPW51bGw9PT0ocj1lLm1hdGNoKGwpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5sZW5ndGgpJiZ2b2lkIDAhPT1vP286MCk+MH0scGFyc2U6aixjcmVhdGVUcmFuc2Zvcm1lcjpSLGdldEFuaW1hdGFibGVOb25lOmZ1bmN0aW9uKGUpe3ZhciB0PWooZSk7cmV0dXJuIFIoZSkodC5tYXAoSSkpfX0sSD1uZXcgU2V0KFtcImJyaWdodG5lc3NcIixcImNvbnRyYXN0XCIsXCJzYXR1cmF0ZVwiLFwib3BhY2l0eVwiXSk7ZnVuY3Rpb24gQShlKXt2YXIgdD1lLnNsaWNlKDAsLTEpLnNwbGl0KFwiKFwiKSxuPXRbMF0scj10WzFdO2lmKFwiZHJvcC1zaGFkb3dcIj09PW4pcmV0dXJuIGU7dmFyIG89KHIubWF0Y2goaSl8fFtdKVswXTtpZighbylyZXR1cm4gZTt2YXIgYT1yLnJlcGxhY2UobyxcIlwiKSxsPUguaGFzKG4pPzE6MDtyZXR1cm4gbyE9PXImJihsKj0xMDApLG4rXCIoXCIrbCthK1wiKVwifXZhciBUPS8oW2Etei1dKilcXCguKj9cXCkvZyxEPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxWKSx7Z2V0QW5pbWF0YWJsZU5vbmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaChUKTtyZXR1cm4gdD90Lm1hcChBKS5qb2luKFwiIFwiKTplfX0pO3QuYWxwaGE9ZCx0LmNvbG9yPUwsdC5jb21wbGV4PVYsdC5kZWdyZWVzPWgsdC5maWx0ZXI9RCx0LmhleD1NLHQuaHNsYT14LHQubnVtYmVyPXUsdC5wZXJjZW50PWcsdC5wcm9ncmVzc1BlcmNlbnRhZ2U9dyx0LnB4PXYsdC5yZ2JVbml0PVMsdC5yZ2JhPU8sdC5zY2FsZT1wLHQudmg9Qyx0LnZ3PW19LDgzODg6KGUsdCxuKT0+e24ucih0KSxuLmQodCx7Zm9jdXNhYmxlOigpPT5iLGlzRm9jdXNhYmxlOigpPT5rLGlzVGFiYmFibGU6KCk9PnksdGFiYmFibGU6KCk9Pnd9KTt2YXIgcj1bXCJpbnB1dDpub3QoW2luZXJ0XSlcIixcInNlbGVjdDpub3QoW2luZXJ0XSlcIixcInRleHRhcmVhOm5vdChbaW5lcnRdKVwiLFwiYVtocmVmXTpub3QoW2luZXJ0XSlcIixcImJ1dHRvbjpub3QoW2luZXJ0XSlcIixcIlt0YWJpbmRleF06bm90KHNsb3QpOm5vdChbaW5lcnRdKVwiLFwiYXVkaW9bY29udHJvbHNdOm5vdChbaW5lcnRdKVwiLFwidmlkZW9bY29udHJvbHNdOm5vdChbaW5lcnRdKVwiLCdbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdKTpub3QoW2luZXJ0XSknLFwiZGV0YWlscz5zdW1tYXJ5OmZpcnN0LW9mLXR5cGU6bm90KFtpbmVydF0pXCIsXCJkZXRhaWxzOm5vdChbaW5lcnRdKVwiXSxvPXIuam9pbihcIixcIiksYT1cInVuZGVmaW5lZFwiPT10eXBlb2YgRWxlbWVudCxpPWE/ZnVuY3Rpb24oKXt9OkVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXN8fEVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yfHxFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3IsbD0hYSYmRWxlbWVudC5wcm90b3R5cGUuZ2V0Um9vdE5vZGU/ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG51bGw9PWV8fG51bGw9PT0odD1lLmdldFJvb3ROb2RlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5jYWxsKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZS5vd25lckRvY3VtZW50fSxzPWZ1bmN0aW9uIGUodCxuKXt2YXIgcjt2b2lkIDA9PT1uJiYobj0hMCk7dmFyIG89bnVsbD09dHx8bnVsbD09PShyPXQuZ2V0QXR0cmlidXRlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5jYWxsKHQsXCJpbmVydFwiKTtyZXR1cm5cIlwiPT09b3x8XCJ0cnVlXCI9PT1vfHxuJiZ0JiZlKHQucGFyZW50Tm9kZSl9LGM9ZnVuY3Rpb24oZSx0LG4pe2lmKHMoZSkpcmV0dXJuW107dmFyIHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGUucXVlcnlTZWxlY3RvckFsbChvKSk7cmV0dXJuIHQmJmkuY2FsbChlLG8pJiZyLnVuc2hpZnQoZSksci5maWx0ZXIobil9LHU9ZnVuY3Rpb24gZSh0LG4scil7Zm9yKHZhciBhPVtdLGw9QXJyYXkuZnJvbSh0KTtsLmxlbmd0aDspe3ZhciBjPWwuc2hpZnQoKTtpZighcyhjLCExKSlpZihcIlNMT1RcIj09PWMudGFnTmFtZSl7dmFyIHU9Yy5hc3NpZ25lZEVsZW1lbnRzKCksZD1lKHUubGVuZ3RoP3U6Yy5jaGlsZHJlbiwhMCxyKTtyLmZsYXR0ZW4/YS5wdXNoLmFwcGx5KGEsZCk6YS5wdXNoKHtzY29wZVBhcmVudDpjLGNhbmRpZGF0ZXM6ZH0pfWVsc2V7aS5jYWxsKGMsbykmJnIuZmlsdGVyKGMpJiYobnx8IXQuaW5jbHVkZXMoYykpJiZhLnB1c2goYyk7dmFyIHA9Yy5zaGFkb3dSb290fHxcImZ1bmN0aW9uXCI9PXR5cGVvZiByLmdldFNoYWRvd1Jvb3QmJnIuZ2V0U2hhZG93Um9vdChjKSxmPSFzKHAsITEpJiYoIXIuc2hhZG93Um9vdEZpbHRlcnx8ci5zaGFkb3dSb290RmlsdGVyKGMpKTtpZihwJiZmKXt2YXIgaD1lKCEwPT09cD9jLmNoaWxkcmVuOnAuY2hpbGRyZW4sITAscik7ci5mbGF0dGVuP2EucHVzaC5hcHBseShhLGgpOmEucHVzaCh7c2NvcGVQYXJlbnQ6YyxjYW5kaWRhdGVzOmh9KX1lbHNlIGwudW5zaGlmdC5hcHBseShsLGMuY2hpbGRyZW4pfX1yZXR1cm4gYX0sZD1mdW5jdGlvbihlLHQpe3JldHVybiBlLnRhYkluZGV4PDAmJih0fHwvXihBVURJT3xWSURFT3xERVRBSUxTKSQvLnRlc3QoZS50YWdOYW1lKXx8ZnVuY3Rpb24oZSl7dmFyIHQsbj1udWxsPT1lfHxudWxsPT09KHQ9ZS5nZXRBdHRyaWJ1dGUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNhbGwoZSxcImNvbnRlbnRlZGl0YWJsZVwiKTtyZXR1cm5cIlwiPT09bnx8XCJ0cnVlXCI9PT1ufShlKSkmJmlzTmFOKHBhcnNlSW50KGUuZ2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiksMTApKT8wOmUudGFiSW5kZXh9LHA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50YWJJbmRleD09PXQudGFiSW5kZXg/ZS5kb2N1bWVudE9yZGVyLXQuZG9jdW1lbnRPcmRlcjplLnRhYkluZGV4LXQudGFiSW5kZXh9LGY9ZnVuY3Rpb24oZSl7cmV0dXJuXCJJTlBVVFwiPT09ZS50YWdOYW1lfSxoPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10LndpZHRoLHI9dC5oZWlnaHQ7cmV0dXJuIDA9PT1uJiYwPT09cn0sZz1mdW5jdGlvbihlLHQpe3JldHVybiEodC5kaXNhYmxlZHx8cyh0KXx8ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSkmJlwiaGlkZGVuXCI9PT1lLnR5cGV9KHQpfHxmdW5jdGlvbihlLHQpe3ZhciBuPXQuZGlzcGxheUNoZWNrLHI9dC5nZXRTaGFkb3dSb290O2lmKFwiaGlkZGVuXCI9PT1nZXRDb21wdXRlZFN0eWxlKGUpLnZpc2liaWxpdHkpcmV0dXJuITA7dmFyIG89aS5jYWxsKGUsXCJkZXRhaWxzPnN1bW1hcnk6Zmlyc3Qtb2YtdHlwZVwiKT9lLnBhcmVudEVsZW1lbnQ6ZTtpZihpLmNhbGwobyxcImRldGFpbHM6bm90KFtvcGVuXSkgKlwiKSlyZXR1cm4hMDtpZihuJiZcImZ1bGxcIiE9PW4mJlwibGVnYWN5LWZ1bGxcIiE9PW4pe2lmKFwibm9uLXplcm8tYXJlYVwiPT09bilyZXR1cm4gaChlKX1lbHNle2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpe2Zvcih2YXIgYT1lO2U7KXt2YXIgcz1lLnBhcmVudEVsZW1lbnQsYz1sKGUpO2lmKHMmJiFzLnNoYWRvd1Jvb3QmJiEwPT09cihzKSlyZXR1cm4gaChlKTtlPWUuYXNzaWduZWRTbG90P2UuYXNzaWduZWRTbG90OnN8fGM9PT1lLm93bmVyRG9jdW1lbnQ/czpjLmhvc3R9ZT1hfWlmKGZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLGE9ZSYmbChlKSxpPW51bGw9PT0odD1hKXx8dm9pZCAwPT09dD92b2lkIDA6dC5ob3N0LHM9ITE7aWYoYSYmYSE9PWUpZm9yKHM9ISEobnVsbCE9PShuPWkpJiZ2b2lkIDAhPT1uJiZudWxsIT09KHI9bi5vd25lckRvY3VtZW50KSYmdm9pZCAwIT09ciYmci5jb250YWlucyhpKXx8bnVsbCE9ZSYmbnVsbCE9PShvPWUub3duZXJEb2N1bWVudCkmJnZvaWQgMCE9PW8mJm8uY29udGFpbnMoZSkpOyFzJiZpOyl7dmFyIGMsdSxkO3M9IShudWxsPT09KHU9aT1udWxsPT09KGM9YT1sKGkpKXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5ob3N0KXx8dm9pZCAwPT09dXx8bnVsbD09PShkPXUub3duZXJEb2N1bWVudCl8fHZvaWQgMD09PWR8fCFkLmNvbnRhaW5zKGkpKX1yZXR1cm4gc30oZSkpcmV0dXJuIWUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg7aWYoXCJsZWdhY3ktZnVsbFwiIT09bilyZXR1cm4hMH1yZXR1cm4hMX0odCxlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuXCJERVRBSUxTXCI9PT1lLnRhZ05hbWUmJkFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShlLmNoaWxkcmVuKS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm5cIlNVTU1BUllcIj09PWUudGFnTmFtZX0pKX0odCl8fGZ1bmN0aW9uKGUpe2lmKC9eKElOUFVUfEJVVFRPTnxTRUxFQ1R8VEVYVEFSRUEpJC8udGVzdChlLnRhZ05hbWUpKWZvcih2YXIgdD1lLnBhcmVudEVsZW1lbnQ7dDspe2lmKFwiRklFTERTRVRcIj09PXQudGFnTmFtZSYmdC5kaXNhYmxlZCl7Zm9yKHZhciBuPTA7bjx0LmNoaWxkcmVuLmxlbmd0aDtuKyspe3ZhciByPXQuY2hpbGRyZW4uaXRlbShuKTtpZihcIkxFR0VORFwiPT09ci50YWdOYW1lKXJldHVybiEhaS5jYWxsKHQsXCJmaWVsZHNldFtkaXNhYmxlZF0gKlwiKXx8IXIuY29udGFpbnMoZSl9cmV0dXJuITB9dD10LnBhcmVudEVsZW1lbnR9cmV0dXJuITF9KHQpKX0sdj1mdW5jdGlvbihlLHQpe3JldHVybiEoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBmKGUpJiZcInJhZGlvXCI9PT1lLnR5cGV9KGUpJiYhZnVuY3Rpb24oZSl7aWYoIWUubmFtZSlyZXR1cm4hMDt2YXIgdCxuPWUuZm9ybXx8bChlKSxyPWZ1bmN0aW9uKGUpe3JldHVybiBuLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXVtuYW1lPVwiJytlKydcIl0nKX07aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmdm9pZCAwIT09d2luZG93LkNTUyYmXCJmdW5jdGlvblwiPT10eXBlb2Ygd2luZG93LkNTUy5lc2NhcGUpdD1yKHdpbmRvdy5DU1MuZXNjYXBlKGUubmFtZSkpO2Vsc2UgdHJ5e3Q9cihlLm5hbWUpfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLmVycm9yKFwiTG9va3MgbGlrZSB5b3UgaGF2ZSBhIHJhZGlvIGJ1dHRvbiB3aXRoIGEgbmFtZSBhdHRyaWJ1dGUgY29udGFpbmluZyBpbnZhbGlkIENTUyBzZWxlY3RvciBjaGFyYWN0ZXJzIGFuZCBuZWVkIHRoZSBDU1MuZXNjYXBlIHBvbHlmaWxsOiAlc1wiLGUubWVzc2FnZSksITF9dmFyIG89ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihlW25dLmNoZWNrZWQmJmVbbl0uZm9ybT09PXQpcmV0dXJuIGVbbl19KHQsZS5mb3JtKTtyZXR1cm4hb3x8bz09PWV9KGUpfSh0KXx8ZCh0KTwwfHwhZyhlLHQpKX0sQz1mdW5jdGlvbihlKXt2YXIgdD1wYXJzZUludChlLmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpLDEwKTtyZXR1cm4hIShpc05hTih0KXx8dD49MCl9LG09ZnVuY3Rpb24gZSh0KXt2YXIgbj1bXSxyPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQsbyl7dmFyIGE9ISF0LnNjb3BlUGFyZW50LGk9YT90LnNjb3BlUGFyZW50OnQsbD1kKGksYSkscz1hP2UodC5jYW5kaWRhdGVzKTppOzA9PT1sP2E/bi5wdXNoLmFwcGx5KG4scyk6bi5wdXNoKGkpOnIucHVzaCh7ZG9jdW1lbnRPcmRlcjpvLHRhYkluZGV4OmwsaXRlbTp0LGlzU2NvcGU6YSxjb250ZW50OnN9KX0pKSxyLnNvcnQocCkucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiB0LmlzU2NvcGU/ZS5wdXNoLmFwcGx5KGUsdC5jb250ZW50KTplLnB1c2godC5jb250ZW50KSxlfSksW10pLmNvbmNhdChuKX0sdz1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBuPSh0PXR8fHt9KS5nZXRTaGFkb3dSb290P3UoW2VdLHQuaW5jbHVkZUNvbnRhaW5lcix7ZmlsdGVyOnYuYmluZChudWxsLHQpLGZsYXR0ZW46ITEsZ2V0U2hhZG93Um9vdDp0LmdldFNoYWRvd1Jvb3Qsc2hhZG93Um9vdEZpbHRlcjpDfSk6YyhlLHQuaW5jbHVkZUNvbnRhaW5lcix2LmJpbmQobnVsbCx0KSksbShuKX0sYj1mdW5jdGlvbihlLHQpe3JldHVybih0PXR8fHt9KS5nZXRTaGFkb3dSb290P3UoW2VdLHQuaW5jbHVkZUNvbnRhaW5lcix7ZmlsdGVyOmcuYmluZChudWxsLHQpLGZsYXR0ZW46ITAsZ2V0U2hhZG93Um9vdDp0LmdldFNoYWRvd1Jvb3R9KTpjKGUsdC5pbmNsdWRlQ29udGFpbmVyLGcuYmluZChudWxsLHQpKX0seT1mdW5jdGlvbihlLHQpe2lmKHQ9dHx8e30sIWUpdGhyb3cgbmV3IEVycm9yKFwiTm8gbm9kZSBwcm92aWRlZFwiKTtyZXR1cm4hMSE9PWkuY2FsbChlLG8pJiZ2KHQsZSl9LHg9ci5jb25jYXQoXCJpZnJhbWVcIikuam9pbihcIixcIiksaz1mdW5jdGlvbihlLHQpe2lmKHQ9dHx8e30sIWUpdGhyb3cgbmV3IEVycm9yKFwiTm8gbm9kZSBwcm92aWRlZFwiKTtyZXR1cm4hMSE9PWkuY2FsbChlLHgpJiZnKHQsZSl9fSw5ODI4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZvbnRzPXZvaWQgMDtjb25zdCBvPXIobig0NjY4KSksYT1yKG4oNjAzNikpLGk9cihuKDU5NDEpKSxsPXIobigyODEzKSk7dC5Gb250cz17cmVndWxhcjpvLmRlZmF1bHQsaXRhbGljOmEuZGVmYXVsdCxzZW1pQm9sZDppLmRlZmF1bHQsc2VtaUJvbGRJdGFsaWM6bC5kZWZhdWx0fX0sNjIxODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTgyOCksdCl9LDQyNDk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CdXR0b25UZXh0T25seT10LkJ1dHRvblNlY29uZGFyeT10LkJ1dHRvblByaW1hcnk9dC5CdXR0b249dm9pZCAwO2NvbnN0IGE9big1ODkzKSxpPW8obig3NTE4KSksbD1uKDEzMzUpLHM9big5NTA3KSxjPW4oNjEyNik7dC5CdXR0b249ZT0+e3ZhcntsYWJlbDp0LGNoaWxkcmVuOm4sc2l6ZTpvPVwiYmFzZVwiLHNoYXBlOmk9XCJzcXVhcmVcIixraW5kOmw9XCJwcmltYXJ5XCIsbGF5b3V0OnM9XCJmaXRcIixocmVmOmN9PWUscD1yKGUsW1wibGFiZWxcIixcImNoaWxkcmVuXCIsXCJzaXplXCIsXCJzaGFwZVwiLFwia2luZFwiLFwibGF5b3V0XCIsXCJocmVmXCJdKTtyZXR1cm4oMCxhLmpzeCkodSxPYmplY3QuYXNzaWduKHthczpjP1wiYVwiOlwiYnV0dG9uXCIsc2l6ZTpvLHNoYXBlOmksa2luZDpsLGxheW91dDpzfSxwLHtjaGlsZHJlbjp0PygwLGEuanN4KShkLE9iamVjdC5hc3NpZ24oe2FsaWduSXRlbXM6XCJjZW50ZXJcIixqdXN0aWZ5Q29udGVudDpcImNlbnRlclwifSx7Y2hpbGRyZW46dH0pKTpufSkpfTtjb25zdCB1PWkuZGVmYXVsdC5idXR0b25gXG4gIC8qIERlZmF1bHQgdmFsdWVzIHRoYXQgZ2V0IG92ZXJyaWRkZW4gYnkgdmFyaWFudHMgKi9cbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0QmFja2dyb3VuZH07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEJhY2tncm91bmR9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeVRleHR9O1xuXG4gIC8qIEluamVjdCB2YXJpYW50cyAqL1xuICAkeygwLHMuZ2V0VmFyaWFudENTUykoYy52YXJpYW50cyxjLlZhcmlhbnQuc2l6ZSl9XG4gICR7KDAscy5nZXRWYXJpYW50Q1NTKShjLnZhcmlhbnRzLGMuVmFyaWFudC5zaGFwZSl9XG4gICR7KDAscy5nZXRWYXJpYW50Q1NTKShjLnZhcmlhbnRzLGMuVmFyaWFudC5raW5kKX1cbiAgJHsoMCxzLmdldFZhcmlhbnRDU1MpKGMudmFyaWFudHMsYy5WYXJpYW50LmxheW91dCl9XG5cbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIG91dGxpbmU6IG5vbmU7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC51aX07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQuYm9sZH07XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuXG4gICY6bm90KDpkaXNhYmxlZCkge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gICY6ZGlzYWJsZWQsXG4gICY6YWN0aXZlOmRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyfTtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICB9XG5gLGQ9KDAsaS5kZWZhdWx0KShsLkJveClgXG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC54c21hbGx9YH07XG5gO3QuQnV0dG9uUHJpbWFyeT1lPT4oMCxhLmpzeCkodC5CdXR0b24sT2JqZWN0LmFzc2lnbih7fSxlLHtraW5kOlwicHJpbWFyeVwifSkpLHQuQnV0dG9uU2Vjb25kYXJ5PWU9PigwLGEuanN4KSh0LkJ1dHRvbixPYmplY3QuYXNzaWduKHt9LGUse2tpbmQ6XCJzZWNvbmRhcnlcIn0pKSx0LkJ1dHRvblRleHRPbmx5PWU9PigwLGEuanN4KSh0LkJ1dHRvbixPYmplY3QuYXNzaWduKHt9LGUse2tpbmQ6XCJ0ZXh0T25seVwifSkpfSw2MTI2OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnZhcmlhbnRzPXQuQnV0dG9uU2hhcGU9dC5CdXR0b25MYXlvdXQ9dC5CdXR0b25TaXplPXQuQnV0dG9uS2luZD10LlZhcmlhbnQ9dm9pZCAwO2NvbnN0IHI9big3NTE4KTt0LlZhcmlhbnQ9e3NoYXBlOlwic2hhcGVcIixzaXplOlwic2l6ZVwiLGtpbmQ6XCJraW5kXCIsbGF5b3V0OlwibGF5b3V0XCJ9LHQuQnV0dG9uS2luZD17cHJpbWFyeTpcInByaW1hcnlcIixzZWNvbmRhcnk6XCJzZWNvbmRhcnlcIix0ZXh0T25seTpcInRleHRPbmx5XCJ9LHQuQnV0dG9uU2l6ZT17c21hbGw6XCJzbWFsbFwiLGJhc2U6XCJiYXNlXCIsbGFyZ2U6XCJsYXJnZVwifSx0LkJ1dHRvbkxheW91dD17Zml0OlwiZml0XCIsZnVsbDpcImZ1bGxcIn0sdC5CdXR0b25TaGFwZT17c3F1YXJlOlwic3F1YXJlXCIscGlsbDpcInBpbGxcIn0sdC52YXJpYW50cz17W3QuVmFyaWFudC5zaXplXTp7W3QuQnV0dG9uU2l6ZS5iYXNlXTpyLmNzc2BcbiAgICAgIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5sYXJnZX1gfTtcbiAgICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgICBgLFt0LkJ1dHRvblNpemUuc21hbGxdOnIuY3NzYFxuICAgICAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC54c21hbGx9ICR7ZS5weC5iYXNlfWB9O1xuICAgICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLnNtYWxsfTtcbiAgICBgLFt0LkJ1dHRvblNpemUubGFyZ2VdOnIuY3NzYFxuICAgICAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5iYXNlfSAke2UucHgueGxhcmdlfWB9O1xuICAgICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmxhcmdlfTtcbiAgICBgfSxbdC5WYXJpYW50LnNoYXBlXTp7W3QuQnV0dG9uU2hhcGUuc3F1YXJlXTpyLmNzc2BcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgICBgLFt0LkJ1dHRvblNoYXBlLnBpbGxdOnIuY3NzYFxuICAgICAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMucGlsbH07XG4gICAgYH0sW3QuVmFyaWFudC5sYXlvdXRdOntbdC5CdXR0b25MYXlvdXQuZml0XTpyLmNzc2BcbiAgICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICBgLFt0LkJ1dHRvbkxheW91dC5mdWxsXTpyLmNzc2BcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIGB9LFt0LlZhcmlhbnQua2luZF06e1t0LkJ1dHRvbktpbmQucHJpbWFyeV06ci5jc3NgXG4gICAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX07XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5SG92ZXJ9O1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlBY3RpdmV9O1xuICAgICAgfVxuXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5Rm9jdXNlZH07XG4gICAgICB9XG4gICAgYCxbdC5CdXR0b25LaW5kLnNlY29uZGFyeV06ci5jc3NgXG4gICAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRTZWNvbmRhcnl9O1xuICAgICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRTZWNvbmRhcnl9O1xuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeVRleHR9O1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kU2Vjb25kYXJ5SG92ZXJ9O1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeUFjdGl2ZX07XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeUZvY3VzZWR9O1xuICAgICAgfVxuICAgIGAsW3QuQnV0dG9uS2luZC50ZXh0T25seV06ci5jc3NgXG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBvcGFjaXR5OiAwLjg7XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEZvY3VzZWR9O1xuICAgICAgfVxuICAgIGB9fX0sNDEzMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNDI0OSksdCksbyhuKDYxMjYpLHQpfSwzOTExOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNhcmRDb250YWluZXI9dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPXIobig3NTE4KSksaT1uKDk1MDcpLGw9bigxMzM1KTt0LkNhcmRDb250YWluZXI9ZT0+KDAsby5qc3gpKHMsT2JqZWN0LmFzc2lnbih7c3R5bGU6e21heEhlaWdodDplLm1heEhlaWdodCxvdmVyZmxvd1k6XCJhdXRvXCJ9LGlkOlwiY2FyZC1jb250YWluZXJcIixcImRhdGEtdGVzdGlkXCI6XCJjYXJkLWNvbnRhaW5lclwifSx7Y2hpbGRyZW46KDAsby5qc3gpKGMse2NoaWxkcmVuOmUuY2hpbGRyZW59KX0pKTtjb25zdCBzPSgwLGEuZGVmYXVsdCkobC5Cb3gpYFxuICBkaXNwbGF5OiBibG9jaztcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQzfTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNX07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfSAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH1cbiAgICAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfSAwcHg7XG4gIHdpZHRoOiAxMDAlO1xuICAke2kuTWl4aW5zLnNjcm9sbGJhci5iYXNlfTtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuYCxjPWEuZGVmYXVsdC5kaXZgXG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9IDBweFxuICAgICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHdpZHRoOiAxMDAlO1xuYH0sMTI0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzcz10LkNvbGxhcHNpYmxlQ2FyZD12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9big2Njg5KSxpPXIobig3NTE4KSksbD1uKDMxMzYpLHM9big5NjM0KSxjPW4oMTMzNSksdT1uKDM5MTEpLGQ9big3NzY5KSxwPW4oOTUwNyk7dC5Db2xsYXBzaWJsZUNhcmQ9KDAsYS5mb3J3YXJkUmVmKSgoKGUsbik9Pntjb25zdFtyLGldPSgwLGEudXNlU3RhdGUpKGUuZXhwYW5kZWR8fCExKTtyZXR1cm4oMCxvLmpzeCkodC5Db2xsYXBzaWJsZUNhcmRTdGF0ZWxlc3MsT2JqZWN0LmFzc2lnbih7fSxlLHtyZWY6bixleHBhbmRlZDpyLG9uRXhwYW5kOmU9PmkoIWUpfSkpfSkpLHQuQ29sbGFwc2libGVDYXJkLmRpc3BsYXlOYW1lPVwiQ29sbGFwc2libGVDYXJkXCIsdC5Db2xsYXBzaWJsZUNhcmRTdGF0ZWxlc3M9KDAsYS5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXIgbixyO3JldHVybigwLG8uanN4cykoZixPYmplY3QuYXNzaWduKHtcImRhdGEtdGVzdGlkXCI6XCJjb2xsYXBzaWJsZS1jYXJkXCJ9LHtjaGlsZHJlbjpbKDAsby5qc3hzKShnLE9iamVjdC5hc3NpZ24oe1wiYXJpYS1leHBhbmRlZFwiOmUuZXhwYW5kZWQsXCJkYXRhLXRlc3RpZFwiOlwiaGVhZGluZy1jb250YWluZXJcIixyZWY6dCx6SW5kZXg6bnVsbD09PShuPWUuaGVhZGVyU2V0dGluZ3MpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnpJbmRleCxmaXhlZEhlYWRlcjpudWxsPT09KHI9ZS5oZWFkZXJTZXR0aW5ncyl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZml4ZWRIZWFkZXIsb25DbGljazooKT0+ZS5vbkV4cGFuZChlLmV4cGFuZGVkKSx0YWJJbmRleDowLG9uS2V5RG93bjp0PT57c3dpdGNoKHQuY29kZSl7Y2FzZVwiRW50ZXJcIjpjYXNlXCJTcGFjZVwiOnQucHJldmVudERlZmF1bHQoKSxlLm9uRXhwYW5kKGUuZXhwYW5kZWQpfX19LHtjaGlsZHJlbjpbKDAsby5qc3gpKGgse2NoaWxkcmVuOmUudGl0bGV9KSwoMCxvLmpzeHMpKFwiZGl2XCIsT2JqZWN0LmFzc2lnbih7aWQ6XCJpY29uLWNvbnRhaW5lclwifSx7Y2hpbGRyZW46W3ZvaWQgMCE9PWUuYmFkZ2VUZXh0JiYoMCxvLmpzeCkobC5CYWRnZSx7Y291bnQ6ZS5iYWRnZVRleHQsaWQ6XCJjb2xsYXBzaWJsZS1jYXJkLWhlYWRpbmctYmFkZ2VcIixcImRhdGEtdGVzdGlkXCI6XCJjb2xsYXBzaWJsZS1jYXJkLWhlYWRpbmctYmFkZ2VcIn0pLCgwLG8uanN4KShzLkljb24se2ljb246ZS5leHBhbmRlZD9cIkNoZXZyb25VcEljb25cIjpcIkNoZXZyb25Eb3duSWNvblwifSldfSkpXX0pKSxlLmV4cGFuZGVkJiYoMCxvLmpzeCkodS5DYXJkQ29udGFpbmVyLE9iamVjdC5hc3NpZ24oe21heEhlaWdodDplLm1heEhlaWdodHx8XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJkaXZcIix7Y2hpbGRyZW46ZS5jaGlsZHJlbn0pfSkpXX0pKX0pKSx0LkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzcy5kaXNwbGF5TmFtZT1cIkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzc1wiO2NvbnN0IGY9aS5kZWZhdWx0LmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuYCxoPSgwLGkuZGVmYXVsdCkoZC5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICR7cC5NaXhpbnMudGV4dE92ZXJmbG93fTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBkaXNwbGF5OiBibG9jaztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbmAsZz0oMCxpLmRlZmF1bHQpKGMuQm94KWBcbiAgcG9zaXRpb246ICR7KHtmaXhlZEhlYWRlcjplfSk9PmU/XCJzdGlja3lcIjpcInJlbGF0aXZlXCJ9O1xuICB0b3A6ICR7KHtmaXhlZEhlYWRlcjplfSk9PmU/MDp2b2lkIDB9O1xuICB6LWluZGV4OiAkeyh7ekluZGV4OmV9KT0+ZX07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kM307XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDV9O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ1fTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LmhlYWRpbmd9O1xuICBvdXRsaW5lOiBub25lO1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uKTtcbiAgd2lkdGg6IDEwMCU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgI2ljb24tY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gIH1cblxuICAjY29sbGFwc2libGUtY2FyZC1oZWFkaW5nLWJhZGdlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gIH1cblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDJ9O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDV9O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDV9O1xuICB9XG5cbiAgJjpmb2N1cyB7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5ib3JkZXJOZXV0cmFsfTtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJvcmRlck5ldXRyYWx9O1xuICB9XG5gfSw3NDAxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigxMjQpLHQpfSw5MzE4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkN1c3RvbUNvbnRleHRNZW51PXQuQ09OVEVYVF9NRU5VX0FOSU1BVElPTl9EVVJBVElPTj10LlBSSU9SX0NPTlRFWFRfTUVOVV9DTEFTUz10LkJBU0VfQ09OVEVYVF9NRU5VPXQuQUNUSVZFX0NPTlRFWFRfTUVOVV9DTEFTUz10LkNPTlRFWFRfTUVOVV9GUkFNRV9JRD12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9big2Njg5KSxpPXIobig3NTE4KSksbD1uKDc2NDEpLHM9bigxMzM1KSxjPW4oOTMwNiksdT1uKDczMzYpLGQ9big0NzI1KSxwPW4oNDc0MCksZj1uKDY0NDkpO3QuQ09OVEVYVF9NRU5VX0ZSQU1FX0lEPVwiY29udGV4dF9tZW51X2ZyYW1lXCIsdC5BQ1RJVkVfQ09OVEVYVF9NRU5VX0NMQVNTPVwiYWN0aXZlX2NvbnRleHRfbWVudVwiLHQuQkFTRV9DT05URVhUX01FTlU9XCJiYXNlX2NvbnRleHRfbWVudVwiLHQuUFJJT1JfQ09OVEVYVF9NRU5VX0NMQVNTPVwicHJldmlvdXNfY29udGV4dF9tZW51XCIsdC5DT05URVhUX01FTlVfQU5JTUFUSU9OX0RVUkFUSU9OPTIwMCx0LkN1c3RvbUNvbnRleHRNZW51PSh7bWVudVRlbXBsYXRlOmUsb25DbGljazpuLGljb246cixvbk1lbnVSZXNpemU6aSxvbkNvbnRleHRNZW51UmVhZHk6cyxpc1dpbmRvd3M6dj0hMH0pPT57dmFyIEM7Y29uc3QgbT0oMCxhLnVzZVJlZikobnVsbCksW3csYl09KDAsYS51c2VTdGF0ZSkoITEpLFt5LHhdPSgwLGEudXNlU3RhdGUpKHt3aWR0aDoxNjAsaGVpZ2h0OjE2MH0pLFtrLFNdPSgwLGEudXNlU3RhdGUpKDApLFtPLE1dPSgwLGEudXNlU3RhdGUpKFtdKSxbTCxfXT0oMCxhLnVzZVN0YXRlKSgpLFtQLEVdPSgwLGEudXNlU3RhdGUpKFtdKSxbaixSXT0oMCxhLnVzZVN0YXRlKShlLm1hcCgoZT0+ZS5sYWJlbHx8XCJcIikpKSxbSSxWXT0oMCxhLnVzZVN0YXRlKSgtMSk7KDAsYS51c2VFZmZlY3QpKCgoKT0+e1IoZS5tYXAoKGU9PmUubGFiZWx8fFwiXCIpKSksVihqLmZpbmRJbmRleCgoZT0+ZT09PUwpKSl9KSxbZV0pO2NvbnN0e3dpZHRoOkgsaGVpZ2h0OkF9PSgwLGMudXNlUmVzaXplQ29udGV4dE1lbnUpKEwpLHtoYW5kbGVOYXZpZ2F0ZVRvU3VibWVudTpULGhhbmRsZU5hdmlnYXRlQmFja1RvUGFyZW50OkQsaGFuZGxlTmF2aWdhdGVUb0Jhc2U6Qn09KDAsZC51c2VDb250ZXh0TWVudU5hdmlnYXRpb24pKGssUyxQLEUsTCxfLHgsVixPLGkpO3JldHVybigwLGEudXNlRWZmZWN0KSgoKCk9PntNKCgwLHUuZ2V0TWVudU5hdmlnYXRpb25PcmRlcikoZSkpLF8odC5CQVNFX0NPTlRFWFRfTUVOVSksRShbXSkseCh7d2lkdGg6SCxoZWlnaHQ6QX0pfSksW2VdKSwoMCxwLnVzZUNvbnRleHRNZW51S2V5Ym9hcmROYXZpZ2F0aW9uKShudWxsPT09KEM9Ty5maW5kKChlPT5lLnBhcmVudExhYmVsPT09TCkpKXx8dm9pZCAwPT09Qz92b2lkIDA6Qy5tZW51VGVtcGxhdGUsUCxMLEksVixuLFQsRCxCKSwoMCxhLnVzZUVmZmVjdCkoKCgpPT57bS5jdXJyZW50JiYod3x8KHMmJnMoKSxiKCEwKSkpfSksW20uY3VycmVudF0pLCgwLG8uanN4KShoLE9iamVjdC5hc3NpZ24oe2lkOnQuQ09OVEVYVF9NRU5VX0ZSQU1FX0lELHRyYW5zaXRpb25TcGVlZDprLGlzV2luZG93czp2fSx7Y2hpbGRyZW46Ty5tYXAoKCh7cGFyZW50TGFiZWw6ZSxtZW51VGVtcGxhdGU6YX0pPT4oMCxvLmpzeCkoXCJkaXZcIixPYmplY3QuYXNzaWduKHtyZWY6ZT09PUw/bTp2b2lkIDB9LHtjaGlsZHJlbjooMCxvLmpzeHMpKGcsT2JqZWN0LmFzc2lnbih7Y2xhc3NOYW1lOigwLHUuZ2V0Q2xhc3NOYW1lKShlLEwsUCksYWN0aXZlTWVudVdpZHRoOnkud2lkdGgsdHJhbnNpdGlvblNwZWVkOmssaWQ6ZX0se2NoaWxkcmVuOltlIT09dC5CQVNFX0NPTlRFWFRfTUVOVT8oMCxvLmpzeCkobC5DdXN0b21Db250ZXh0TWVudUl0ZW0se3R5cGU6XCJzdWJtZW51SGVhZGVyXCIsbGFiZWw6ZSxvbkJhY2s6KCk9PkQoZSxcImNsaWNrXCIpLG9uQ2xvc2U6QixzaG93U2hvdWxkSG9tZUJ1dHRvbjpQLnNsaWNlKDIpLmluY2x1ZGVzKGUpfHxQLmxlbmd0aD49MiYmTD09PWUsc2VsZWN0ZWQ6LTE9PT1JfSxgJHtlfS1zdWJtZW51LWhlYWRlcmApOnImJigwLG8uanN4KShmLlJvb3RNZW51SGVhZGVyLHtpY29uOnJ9KSxhLm1hcCgoKHQscik9PigwLG8uanN4KShsLkN1c3RvbUNvbnRleHRNZW51SXRlbSxPYmplY3QuYXNzaWduKHtvbkNsaWNrOigpPT57dC5oYXNTdWJNZW51P1QodC5sYWJlbHx8XCJcIik6bih0LmRhdGEpLFYoLTIpfX0sdCx7c3VibWVudTp0Lmhhc1N1Yk1lbnUsc2VsZWN0ZWQ6ST09PXJ9KSxgJHtlfS0ke3QubGFiZWx9LSR7cn1gKSkpXX0pKX0pLGUpKSl9KSl9O2NvbnN0IGg9aS5kZWZhdWx0LmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4td2lkdGg6IGZpdC1jb250ZW50O1xuICBtaW4taGVpZ2h0OiBmaXQtY29udGVudDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDF9O1xuICB0cmFuc2l0aW9uOiAkeyh7dHJhbnNpdGlvblNwZWVkOmV9KT0+YGFsbCAke2V9bXMgbGluZWFyYH07XG4gIGJvcmRlcjogJHsoe3RoZW1lOmV9KT0+YDFweCBzb2xpZCAke2UucGFsZXR0ZS5iYWNrZ3JvdW5kMn1gfTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe2lzV2luZG93czplfSk9PiFlJiZcIjEwcHhcIn07XG5gLGc9KDAsaS5kZWZhdWx0KShzLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IG1heC1jb250ZW50O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDF9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfSAwICR7ZS5weC5zbWFsbH0gMGB9O1xuXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgkeyh7YWN0aXZlTWVudVdpZHRoOmV9KT0+YCR7ZX1weGB9KTtcbiAgdHJhbnNpdGlvbjogJHsoe3RyYW5zaXRpb25TcGVlZDplfSk9PmBhbGwgJHtlfW1zIGN1YmljLWJlemllcigwLCAwLCAwLjU4LCAxKWB9O1xuICBvcGFjaXR5OiAwJTtcblxuICAmLmFjdGl2ZV9jb250ZXh0X21lbnUge1xuICAgIHRyYW5zZm9ybTogdW5zZXQ7XG4gICAgb3BhY2l0eTogMTAwJTtcbiAgfVxuXG4gICYucHJldmlvdXNfY29udGV4dF9tZW51IHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xuICAgIG9wYWNpdHk6IDAlO1xuICB9XG5gfSw3NjQxOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkN1c3RvbUNvbnRleHRNZW51SXRlbT12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpLG89bigzNjAwKSxhPW4oMjA4MCksaT1uKDkwNjgpLGw9e25vcm1hbDphLk5vcm1hbEN1c3RvbUNvbnRleHRNZW51SXRlbSxjaGVja2JveDphLk5vcm1hbEN1c3RvbUNvbnRleHRNZW51SXRlbSxzdWJtZW51OmEuTm9ybWFsQ3VzdG9tQ29udGV4dE1lbnVJdGVtLHNlcGFyYXRvcjpvLlNlcGFyYXRvckN1c3RvbUNvbnRleHRNZW51SXRlbSxzdWJtZW51SGVhZGVyOmkuU3VibWVudUhlYWRlckN1c3RvbUNvbnRleHRNZW51SXRlbX07dC5DdXN0b21Db250ZXh0TWVudUl0ZW09KHt0eXBlOmU9XCJub3JtYWxcIixpY29uOnQsbGFiZWw6bixlbmFibGVkOm89ITAsY2hlY2tlZDphLHN1Ym1lbnU6aSxzaG93U2hvdWxkSG9tZUJ1dHRvbjpzLG9uQ2xpY2s6YyxvbkNsb3NlOnUsb25CYWNrOmQsc2VsZWN0ZWQ6cH0pPT57Y29uc3QgZj1sW2VdO2xldCBoO3N3aXRjaChlKXtjYXNlXCJub3JtYWxcIjpjYXNlXCJjaGVja2JveFwiOmg9e3R5cGU6ZSxsYWJlbDpuLGljb246dCxlbmFibGVkOm8sY2hlY2tlZDphLHNlbGVjdGVkOnB9O2JyZWFrO2Nhc2VcInN1Ym1lbnVcIjpoPXtsYWJlbDpuLGVuYWJsZWQ6byxjaGVja2VkOmEsc3VibWVudTppLHNlbGVjdGVkOnB9O2JyZWFrO2Nhc2VcInN1Ym1lbnVIZWFkZXJcIjpoPXtsYWJlbDpuLHNob3dTaG91bGRIb21lQnV0dG9uOnMsb25DbG9zZTp1LG9uQmFjazpkLHNlbGVjdGVkOnB9O2JyZWFrO2Nhc2VcInNlcGFyYXRvclwiOmg9e319cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShmLE9iamVjdC5hc3NpZ24oe30saCx7a2V5Om4sb25DbGljazpjfSkpfX0sMjA4MDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Ob3JtYWxDdXN0b21Db250ZXh0TWVudUl0ZW09dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPXIobig3NTE4KSksaT1uKDEzMzUpLGw9big3NzY5KSxzPW4oOTYzNCk7dC5Ob3JtYWxDdXN0b21Db250ZXh0TWVudUl0ZW09KHt0eXBlOmUsbGFiZWw6dCxlbmFibGVkOm49ITAsY2hlY2tlZDpyLHN1Ym1lbnU6YSxvbkNsaWNrOmksc2VsZWN0ZWQ6bH0pPT4oMCxvLmpzeCkoYyx7Y2hpbGRyZW46KDAsby5qc3hzKSh1LE9iamVjdC5hc3NpZ24oe29uQ2xpY2s6bj9pOnZvaWQgMCxlbmFibGVkOm4udG9TdHJpbmcoKSxzZWxlY3RlZDpsfSx7Y2hpbGRyZW46W1wiY2hlY2tib3hcIj09PWUmJigwLG8uanN4KShkLE9iamVjdC5hc3NpZ24oe3NpZGU6XCJsZWZ0XCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkocCx7aWNvbjpcIkNoZWNrSWNvblwiLGVuYWJsZWQ6bi50b1N0cmluZygpLGNoZWNrZWQ6cn0pfSkpLCgwLG8uanN4KShoLE9iamVjdC5hc3NpZ24oe3NpemU6XCJiYXNlXCIsd2VpZ2h0Olwibm9ybWFsXCIsZW5hYmxlZDpufSx7Y2hpbGRyZW46dH0pKSxhJiYoMCxvLmpzeCkoZCxPYmplY3QuYXNzaWduKHtzaWRlOlwicmlnaHRcIn0se2NoaWxkcmVuOigwLG8uanN4KShmLHtpY29uOlwiQ2hldnJvblJpZ2h0SWNvblwiLGVuYWJsZWQ6bi50b1N0cmluZygpfSl9KSldfSkpfSk7Y29uc3QgYz0oMCxhLmRlZmF1bHQpKGkuQm94KWBcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC5zbWFsbH0gMCAke2UucHguc21hbGx9YH07XG5gLHU9KDAsYS5kZWZhdWx0KShpLkJveClgXG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDI4cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZSxzZWxlY3RlZDp0LGVuYWJsZWQ6bn0pPT5cImZhbHNlXCIhPT1uJiZ0P2UucGFsZXR0ZS5iYWNrZ3JvdW5kMzpcInRyYW5zcGFyZW50XCJ9O1xuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplLGVuYWJsZWQ6dH0pPT5cImZhbHNlXCIhPT10P2UucGFsZXR0ZS5iYWNrZ3JvdW5kMzpcInRyYW5zcGFyZW50XCJ9O1xuICB9XG5gLGQ9KDAsYS5kZWZhdWx0KShpLkJveClgXG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplLHNpZGU6dH0pPT5cInJpZ2h0XCI9PT10P2AwICR7ZS5weC5zbWFsbH0gMCAwYDpgMCAwIDAgJHtlLnB4LnNtYWxsfWB9O1xuICBtYXJnaW4tbGVmdDogJHsoe3NpZGU6ZX0pPT5cInJpZ2h0XCI9PT1lP1wiYXV0b1wiOjB9O1xuYCxwPSgwLGEuZGVmYXVsdCkocy5JY29uKWBcbiAgc3ZnIHBhdGgge1xuICAgIGZpbGw6ICR7KHt0aGVtZTplLGVuYWJsZWQ6dCxjaGVja2VkOm59KT0+XCJ0cnVlXCI9PT10P24/ZS5wYWxldHRlLnRleHREZWZhdWx0OlwidHJhbnNwYXJlbnRcIjplLnBhbGV0dGUudGV4dEluYWN0aXZlfTtcbiAgICBzdHJva2Utd2lkdGg6IDEuMjU7XG4gIH1cbmAsZj0oMCxhLmRlZmF1bHQpKHMuSWNvbilgXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuXG4gIHN2ZyBwYXRoIHtcbiAgICBmaWxsOiAkeyh7dGhlbWU6ZSxlbmFibGVkOnR9KT0+XCJ0cnVlXCI9PT10P2UucGFsZXR0ZS50ZXh0RGVmYXVsdDplLnBhbGV0dGUudGV4dEluYWN0aXZlfTtcbiAgICBzdHJva2Utd2lkdGg6IDEuMjU7XG4gIH1cbmAsaD0oMCxhLmRlZmF1bHQpKGwuVGV4dClgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZSxlbmFibGVkOnR9KT0+dD9lLnBhbGV0dGUudGV4dERlZmF1bHQ6ZS5wYWxldHRlLnRleHRJbmFjdGl2ZX07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC54eHhsYXJnZX0gMCAke2UucHguc21hbGx9YH07XG4gIGN1cnNvcjogZGVmYXVsdDtcbmB9LDY0NDk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUm9vdE1lbnVIZWFkZXI9dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPXIobig3NTE4KSksaT1uKDEzMzUpLGw9bigzNjAwKTt0LlJvb3RNZW51SGVhZGVyPSh7aWNvbjplfSk9PigwLG8uanN4cykoby5GcmFnbWVudCx7Y2hpbGRyZW46WygwLG8uanN4KShzLHtjaGlsZHJlbjplfSksKDAsby5qc3gpKGwuU2VwYXJhdG9yQ3VzdG9tQ29udGV4dE1lbnVJdGVtLHt9KV19KTtjb25zdCBzPSgwLGEuZGVmYXVsdCkoaS5Cb3gpYFxuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAyOHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgMCAwICR7ZS5weC5sYXJnZX1gfTtcbmB9LDM2MDA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU2VwYXJhdG9yQ3VzdG9tQ29udGV4dE1lbnVJdGVtPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1uKDEzMzUpLGk9cihuKDc1MTgpKTt0LlNlcGFyYXRvckN1c3RvbUNvbnRleHRNZW51SXRlbT0oKT0+KDAsby5qc3gpKGwsT2JqZWN0LmFzc2lnbih7XCJkYXRhLXRlc3RpZFwiOlwiY3VzdG9tLWNvbnRleHQtbWVudS1zZXBhcmF0b3JcIn0se2NoaWxkcmVuOigwLG8uanN4KShzLHt9KX0pKTtjb25zdCBsPSgwLGkuZGVmYXVsdCkoYS5Cb3gpYFxuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH0gMDtcbmAscz1pLmRlZmF1bHQuaHJgXG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDFweDtcbiAgYm9yZGVyOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDJ9O1xuYH0sOTA2ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TdWJtZW51SGVhZGVyQ3VzdG9tQ29udGV4dE1lbnVJdGVtPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1uKDY2ODkpLGk9cihuKDc1MTgpKSxsPW4oOTYzNCkscz1uKDc3NjkpLGM9bigxMzM1KSx1PW4oMzYwMCk7dC5TdWJtZW51SGVhZGVyQ3VzdG9tQ29udGV4dE1lbnVJdGVtPSh7bGFiZWw6ZSxzaG93U2hvdWxkSG9tZUJ1dHRvbjp0LG9uQ2xvc2U6bixvbkJhY2s6cixzZWxlY3RlZDppfSk9Pntjb25zdCBsPSgwLGEudXNlQ2FsbGJhY2spKChlPT57ZS5zdG9wUHJvcGFnYXRpb24oKSxudWxsPT1yfHxyKCl9KSxbcl0pLHM9KDAsYS51c2VDYWxsYmFjaykoKGU9PntlLnN0b3BQcm9wYWdhdGlvbigpLG51bGw9PW58fG4oKX0pLFtuXSk7cmV0dXJuKDAsby5qc3hzKShvLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsby5qc3hzKShkLHtjaGlsZHJlbjpbKDAsby5qc3gpKHAsT2JqZWN0LmFzc2lnbih7c2lkZTpcImxlZnRcIixzZWxlY3RlZDppfSx7Y2hpbGRyZW46KDAsby5qc3gpKGYse2ljb246XCJBcnJvd0xlZnRJY29uXCIsb25DbGljazpsLGlkOlwiYmFjay1pY29uXCIsc2VsZWN0ZWQ6aX0pfSkpLCgwLG8uanN4KShoLE9iamVjdC5hc3NpZ24oe3NpemU6XCJiYXNlXCIsd2VpZ2h0Olwibm9ybWFsXCJ9LHtjaGlsZHJlbjplfSkpLHQmJigwLG8uanN4KShwLE9iamVjdC5hc3NpZ24oe3NpZGU6XCJyaWdodFwifSx7Y2hpbGRyZW46KDAsby5qc3gpKGcse2ljb246XCJDcm9zczFJY29uXCIsb25DbGljazpzLGlkOlwiY2xvc2UtaWNvblwifSl9KSldfSksKDAsby5qc3gpKHUuU2VwYXJhdG9yQ3VzdG9tQ29udGV4dE1lbnVJdGVtLHt9KV19KX07Y29uc3QgZD0oMCxpLmRlZmF1bHQpKGMuQm94KWBcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMjhweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC5zbWFsbH0gMCAke2UucHguc21hbGx9YH07XG5gLHA9KDAsaS5kZWZhdWx0KShjLkJveClgXG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplLHNpZGU6dH0pPT5cInJpZ2h0XCI9PT10P2AwICR7ZS5weC5zbWFsbH0gMCAwYDpgMCAwIDAgJHtlLnB4LnNtYWxsfWB9O1xuICBtYXJnaW4tbGVmdDogJHsoe3NpZGU6ZX0pPT5cInJpZ2h0XCI9PT1lP1wiYXV0b1wiOjB9O1xuYCxmPSgwLGkuZGVmYXVsdCkobC5JY29uKWBcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7c2VsZWN0ZWQ6ZSx0aGVtZTp0fSk9PmU/dC5wYWxldHRlLmJhY2tncm91bmQzOlwidHJhbnNwYXJlbnRcIn07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZSxzZWxlY3RlZDp0fSk9PnQ/ZS5wYWxldHRlLnRleHREZWZhdWx0OmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIHN0cm9rZS13aWR0aDogMS4yNTtcblxuICAmOmhvdmVyIHtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgfVxuYCxoPSgwLGkuZGVmYXVsdCkocy5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC54eHhsYXJnZX0gMCAke2UucHguc21hbGx9YH07XG4gIGN1cnNvcjogZGVmYXVsdDtcbmAsZz0oMCxpLmRlZmF1bHQpKGwuSWNvbilgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgc3Ryb2tlLXdpZHRoOiAxLjI1O1xuXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICB9XG5gfSw5NTAxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5MzE4KSx0KX0sNDc0MDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VDb250ZXh0TWVudUtleWJvYXJkTmF2aWdhdGlvbj12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpLG89big5MzE4KTt0LnVzZUNvbnRleHRNZW51S2V5Ym9hcmROYXZpZ2F0aW9uPShlLHQsbixhLGksbCxzLGMsdSk9Pntjb25zdCBkPXQ9Pnt2YXIgbixyLG87cmV0dXJuXCJzZXBhcmF0b3JcIj09PShudWxsPT09KG49ZVt0XSl8fHZvaWQgMD09PW4/dm9pZCAwOm4udHlwZSl8fCExPT09KG51bGw9PT0ocj1lW3RdKXx8dm9pZCAwPT09cj92b2lkIDA6ci5lbmFibGVkKXx8ITE9PT0obnVsbD09PShvPWVbdF0pfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnZpc2libGUpfSxwPSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+e2koKHQ9PntsZXQgbj10O2Rve2lmKG49PT0obnVsbD09ZT92b2lkIDA6ZS5sZW5ndGgpLTEpYnJlYWs7bis9MX13aGlsZShkKG4pKTtyZXR1cm4gZChuKT90Om59KSl9KSxbaSxlXSksZj0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9PntpKChlPT57bGV0IHQ9ZTtkb3tpZihuPT09by5CQVNFX0NPTlRFWFRfTUVOVSYmMD09PXR8fC0xPT09dClicmVhazt0LT0xfXdoaWxlKGQodCkpO3JldHVybiB0fSkpfSksW2ksZV0pLGg9KDAsci51c2VDYWxsYmFjaykoKCgpPT57aShuPT09by5CQVNFX0NPTlRFWFRfTUVOVT8wOi0xKX0pLFtpLG5dKSxnPSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+e2koKHQ9Pntmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj10O24tLSlpZighZChuKSlyZXR1cm4gbjtyZXR1cm4gdH0pKX0pLFtudWxsPT1lP3ZvaWQgMDplLmxlbmd0aCxpXSksdj0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9Pnt2YXIgdCxyO2lmKG51bGw9PT0odD1lW2FdKXx8dm9pZCAwPT09dD92b2lkIDA6dC5oYXNTdWJNZW51KXMoKG51bGw9PT0ocj1lW2FdKXx8dm9pZCAwPT09cj92b2lkIDA6ci5sYWJlbCl8fFwiXCIpO2Vsc2V7aWYoLTE9PT1hKXJldHVybiB2b2lkIGMobixcImtleWJvYXJkXCIpO2woZVthXS5kYXRhKX1pKC0xKX0pLFtpLGwscyxlLGEsYyxuXSksQz0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9Pnt2YXIgdCxuOyhudWxsPT09KHQ9ZVthXSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuaGFzU3ViTWVudSkmJihzKChudWxsPT09KG49ZVthXSl8fHZvaWQgMD09PW4/dm9pZCAwOm4ubGFiZWwpfHxcIlwiKSxpKC0xKSl9KSxbaSxzLGUsYV0pLG09KDAsci51c2VDYWxsYmFjaykoKCgpPT57KHQuc2xpY2UoMSkuaW5jbHVkZXMobil8fChudWxsPT10P3ZvaWQgMDp0Lmxlbmd0aCk+PTEpJiZjKG4sXCJrZXlib2FyZFwiKX0pLFtjLHQsbl0pLHc9KDAsci51c2VDYWxsYmFjaykoKCgpPT57dC5zbGljZSgyKS5pbmNsdWRlcyhuKXx8KG51bGw9PXQ/dm9pZCAwOnQubGVuZ3RoKT49Mj91KCk6bCh7dHlwZTpcImNsb3NlXCJ9KX0pLFt1LHQsbl0pOygwLHIudXNlRWZmZWN0KSgoKCk9Pntjb25zdCBlPWU9Pntzd2l0Y2goZS5rZXkpe2Nhc2VcIkFycm93RG93blwiOnAoKTticmVhaztjYXNlXCJBcnJvd1VwXCI6ZigpO2JyZWFrO2Nhc2VcIkhvbWVcIjpjYXNlXCJQYWdlVXBcIjpoKCk7YnJlYWs7Y2FzZVwiRW5kXCI6Y2FzZVwiUGFnZURvd25cIjpnKCk7YnJlYWs7Y2FzZVwiRW50ZXJcIjp2KCk7YnJlYWs7Y2FzZVwiQXJyb3dSaWdodFwiOkMoKTticmVhaztjYXNlXCJBcnJvd0xlZnRcIjptKCk7YnJlYWs7Y2FzZVwiRXNjYXBlXCI6dygpfX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZSksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGUpfX0pLFtwLGYsaCxnLHYsQyxtLHddKX19LDQ3MjU6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlQ29udGV4dE1lbnVOYXZpZ2F0aW9uPXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1uKDkzMTgpO3QudXNlQ29udGV4dE1lbnVOYXZpZ2F0aW9uPShlLHQsbixhLGksbCxzLGMsdSxkKT0+e2NvbnN0IHA9KDAsci51c2VDYWxsYmFjaykoKGU9Pntjb25zdCB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLG49bnVsbD09dD92b2lkIDA6dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57aGVpZ2h0OihudWxsPT1uP3ZvaWQgMDpuLmhlaWdodCl8fDAsd2lkdGg6KG51bGw9PW4/dm9pZCAwOm4ud2lkdGgpfHwwfX0pLFtdKTtyZXR1cm57aGFuZGxlTmF2aWdhdGVUb1N1Ym1lbnU6KDAsci51c2VDYWxsYmFjaykoKHI9Pntjb25zdHtoZWlnaHQ6Yyx3aWR0aDp1fT1wKHIpO2QmJmQoYyx1KSxlfHx0KG8uQ09OVEVYVF9NRU5VX0FOSU1BVElPTl9EVVJBVElPTikscyh7d2lkdGg6dSxoZWlnaHQ6Y30pLGwociksYShbLi4ubixpXSl9KSxbaSxuLGEsZCx0LHBdKSxoYW5kbGVOYXZpZ2F0ZUJhY2tUb1BhcmVudDooMCxyLnVzZUNhbGxiYWNrKSgoKGUsdD1cImNsaWNrXCIpPT57aWYoZCl7Y29uc3QgZT0xPT09bi5sZW5ndGg/by5CQVNFX0NPTlRFWFRfTUVOVTpuW24ubGVuZ3RoLTFdLHtoZWlnaHQ6dCx3aWR0aDpyfT1wKGUpO2QodCxyKX1jb25zdCByPW4saT1yLnBvcCgpLHM9dS5maW5kKChlPT5lLnBhcmVudExhYmVsPT09aSkpO2woaSksYShyKSxjKFwia2V5Ym9hcmRcIj09PXQ/KG51bGw9PXM/dm9pZCAwOnMubWVudVRlbXBsYXRlLmZpbmRJbmRleCgodD0+dC5sYWJlbD09PWUpKSl8fDA6LTEpfSksW24sYSxjLHAsZCx1XSksaGFuZGxlTmF2aWdhdGVUb0Jhc2U6KDAsci51c2VDYWxsYmFjaykoKCgpPT57aWYoZCl7Y29uc3R7aGVpZ2h0OmUsd2lkdGg6dH09cChvLkJBU0VfQ09OVEVYVF9NRU5VKTtkKGUsdCl9bChvLkJBU0VfQ09OVEVYVF9NRU5VKSxhKFtdKSxjKC0xKX0pLFtsLGEsYyxwLGRdKX19fSw5MzA2OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVJlc2l6ZUNvbnRleHRNZW51PXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1uKDkzMTgpO3QudXNlUmVzaXplQ29udGV4dE1lbnU9ZT0+e2NvbnN0W3Qsbl09KDAsci51c2VTdGF0ZSkoe2hlaWdodDoxNjAsd2lkdGg6MTYwfSk7cmV0dXJuKDAsci51c2VFZmZlY3QpKCgoKT0+e2NvbnN0IHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSkscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChvLkNPTlRFWFRfTUVOVV9GUkFNRV9JRCk7aWYoIXQpcmV0dXJuO2NvbnN0IGE9bmV3IFJlc2l6ZU9ic2VydmVyKChlPT57Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3R7d2lkdGg6ZSxoZWlnaHQ6b309dC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ciYmKHIuc3R5bGUuaGVpZ2h0PWAke299cHhgLHIuc3R5bGUud2lkdGg9YCR7ZX1weGAsbih7d2lkdGg6ZSxoZWlnaHQ6b30pKX19KSk7cmV0dXJuIGEub2JzZXJ2ZSh0KSwoKT0+e2EudW5vYnNlcnZlKHQpfX0pLFtlXSksdH19LDczMzY6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZ2V0TWVudU5hdmlnYXRpb25PcmRlcj10LmdldENsYXNzTmFtZT12b2lkIDA7Y29uc3Qgcj1uKDkzMTgpO3QuZ2V0Q2xhc3NOYW1lPShlLHQsbik9PnQ9PT1lP3IuQUNUSVZFX0NPTlRFWFRfTUVOVV9DTEFTUzpuLmluY2x1ZGVzKGUpP3IuUFJJT1JfQ09OVEVYVF9NRU5VX0NMQVNTOlwiXCIsdC5nZXRNZW51TmF2aWdhdGlvbk9yZGVyPWU9PntpZighZSlyZXR1cm5bXTtjb25zdCB0PVt7cGFyZW50TGFiZWw6ci5CQVNFX0NPTlRFWFRfTUVOVSx0ZW1wbGF0ZTplfV0sbj1bXTtmb3IoO3QubGVuZ3RoOyl7Y29uc3R7dGVtcGxhdGU6ZSxwYXJlbnRMYWJlbDpyfT10LnBvcCgpO2UuZm9yRWFjaCgoKHtzdWJtZW51Om4sbGFiZWw6cn0sbyk9PntuJiYodC5wdXNoKHtwYXJlbnRMYWJlbDpyfHxcIlwiLHRlbXBsYXRlOm59KSxkZWxldGUgZVtvXS5zdWJtZW51LGVbb10uaGFzU3ViTWVudT0hMCl9KSksbi5wdXNoKHtwYXJlbnRMYWJlbDpyLG1lbnVUZW1wbGF0ZTplfSl9cmV0dXJuIG59fSw5NjQ0OihlLHQpPT57dmFyIG47T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5FeHBhbmREaXJlY3Rpb249dm9pZCAwLChuPXQuRXhwYW5kRGlyZWN0aW9ufHwodC5FeHBhbmREaXJlY3Rpb249e30pKVtuLlVwPTBdPVwiVXBcIixuW24uRG93bj0xXT1cIkRvd25cIn0sNDAyMTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5FeHBhbmRhYmxlQnV0dG9uPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1uKDY2ODkpLGk9big0MTMwKSxsPXIobig3NTE4KSkscz1uKDk2MzQpLGM9big5MTQxKSx1PW4oMzAzMCksZD1uKDEzMzUpLHA9big5NjQ0KTt0LkV4cGFuZGFibGVCdXR0b249ZT0+e3ZhciB0LG4scixsLHMsZjtjb25zdFtiLHldPSgwLGEudXNlU3RhdGUpKHtzaG93OiExLHJlcXVlc3RlZEJ5Q29sbGFwc2U6ITF9KSx4PXtzaXplOmUuc2l6ZSxraW5kOmUua2luZCxkaXNhYmxlZDplLmRpc2FibGVkLHRhYkluZGV4OmUudGFiSW5kZXh9LGs9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtzaGFwZTppLkJ1dHRvblNoYXBlLnNxdWFyZSxcImFyaWEtbGFiZWxcIjpudWxsIT09KHQ9ZVtcImFyaWEtbGFiZWxcIl0pJiZ2b2lkIDAhPT10P3Q6YFByaW1hcnkgQnV0dG9uICR7ZS50aXRsZX1gfSksUz1udWxsIT09KG49ZS5leHBhbmREaXJlY3Rpb24pJiZ2b2lkIDAhPT1uP246cC5FeHBhbmREaXJlY3Rpb24uRG93bjtyZXR1cm4oMCxhLnVzZUVmZmVjdCkoKCgpPT57aWYoIWIucmVxdWVzdGVkQnlDb2xsYXBzZSlyZXR1cm47Y29uc3QgZT1zZXRUaW1lb3V0KCgoKT0+eSh7cmVxdWVzdGVkQnlDb2xsYXBzZTohMSxzaG93OiExfSkpLDIwMCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dChlKX0pLFtiLnJlcXVlc3RlZEJ5Q29sbGFwc2VdKSwoMCxvLmpzeHMpKHcse2NoaWxkcmVuOlsoMCxvLmpzeHMpKG0se2NoaWxkcmVuOlsoMCxvLmpzeCkoZyxPYmplY3QuYXNzaWduKHt9LGsse2NoaWxkcmVuOigwLG8uanN4KSh2LHtjaGlsZHJlbjpudWxsIT09KHI9ZS5jaGlsZHJlbikmJnZvaWQgMCE9PXI/cjprLnRpdGxlfSl9KSksZS5zZWNvbmRhcnlCdXR0b25zJiZlLnNlY29uZGFyeUJ1dHRvbnMubGVuZ3RoPjAmJigwLG8uanN4KShkLkJveCxPYmplY3QuYXNzaWduKHtpZDpcImRyb3Bkb3duLWNvbnRhaW5lclwifSx7Y2hpbGRyZW46KDAsby5qc3hzKShDLE9iamVjdC5hc3NpZ24oe30seCx7cm9sZTpcImNvbWJvYm94XCIsb25DbGljazooKT0+e2IucmVxdWVzdGVkQnlDb2xsYXBzZXx8eSh7cmVxdWVzdGVkQnlDb2xsYXBzZTohMSxzaG93OiFiLnNob3d9KX0sXCJhcmlhLWxhYmVsXCI6XCJFeHBhbmQgU2Vjb25kYXJ5IEJ1dHRvbnMgUGFuZWxcIixcImFyaWEtZXhwYW5kZWRcIjpiLnNob3d9LHtjaGlsZHJlbjpbUz09PXAuRXhwYW5kRGlyZWN0aW9uLkRvd24mJigwLG8uanN4KShoLHtraW5kOm51bGwhPT0obD1lLmtpbmQpJiZ2b2lkIDAhPT1sP2w6aS5CdXR0b25LaW5kLnByaW1hcnksaWNvbjpcIkNhcmV0RG93bkljb25cIn0pLFM9PT1wLkV4cGFuZERpcmVjdGlvbi5VcCYmKDAsby5qc3gpKGgse2tpbmQ6bnVsbCE9PShzPWUua2luZCkmJnZvaWQgMCE9PXM/czppLkJ1dHRvbktpbmQucHJpbWFyeSxpY29uOlwiQ2FyZXRVcEljb25cIn0pXX0pKX0pKV19KSxlLnNlY29uZGFyeUJ1dHRvbnMmJmUuc2Vjb25kYXJ5QnV0dG9ucy5sZW5ndGg+MCYmKDAsby5qc3gpKGMuQW5pbWF0ZVByZXNlbmNlLHtjaGlsZHJlbjpiLnNob3cmJigwLG8uanN4KSh1LkV4cGFuZGFibGVQYW5lbCx7ZXhwYW5kRGlyZWN0aW9uOlMsc2Vjb25kYXJ5QnV0dG9uczpudWxsIT09KGY9ZS5zZWNvbmRhcnlCdXR0b25zKSYmdm9pZCAwIT09Zj9mOltdLHN0cmV0Y2g6ZS5zdHJldGNoRXhwYW5kYWJsZVBhbmVsLGNsb3NlUGFuZWxPblNlY29uZGFyeUJ1dHRvbkNsaWNrOmUuY2xvc2VQYW5lbE9uU2Vjb25kYXJ5QnV0dG9uQ2xpY2ssb25Db2xsYXBzZVJlcXVlc3Q6KCk9Pnkoe3Nob3c6ITEscmVxdWVzdGVkQnlDb2xsYXBzZTohMH0pLGJ1dHRvblNpemU6ZS5zaXplLGRvY3VtZW50OmUuZG9jdW1lbnR9KX0pXX0pfTtjb25zdCBmPXtbaS5CdXR0b25LaW5kLnByaW1hcnldOmU9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlUZXh0LFtpLkJ1dHRvbktpbmQuc2Vjb25kYXJ5XTplPT5lLnBhbGV0dGUuYnJhbmRTZWNvbmRhcnlUZXh0LFtpLkJ1dHRvbktpbmQudGV4dE9ubHldOmU9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH0saD0oMCxsLmRlZmF1bHQpKHMuSWNvbilgXG4gIHN2ZyBwYXRoIHtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmUsa2luZDp0fSk9PmZbdF0oZSl9O1xuICB9XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQudWl9O1xuICBmb250LXdlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5mb250V2VpZ2h0LmJvbGR9O1xuYCxnPSgwLGwuZGVmYXVsdCkoaS5CdXR0b24pYFxuICBtYXJnaW4tcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbmAsdj0oMCxsLmRlZmF1bHQpKGQuQm94KWBcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuYCxDPSgwLGwuZGVmYXVsdCkoaS5CdXR0b24pYFxuICB3aWR0aDogJHtlPT5lLnRoZW1lLnB4Lnh4bGFyZ2V9O1xuICBwYWRkaW5nOiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbmAsbT1sLmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYCx3PWwuZGVmYXVsdC5kaXZgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuYH0sMjEyODooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5zZXR1cEV4cGFuZGFibGVQYW5lbD12b2lkIDA7Y29uc3Qgcj1uKDk2NDQpO3Quc2V0dXBFeHBhbmRhYmxlUGFuZWw9KGUsdCxuPSExKT0+e2lmKCFlfHwwPT09ZS5jaGlsZE5vZGVzLmxlbmd0aClyZXR1cm47Y29uc3Qgbz1lLnBhcmVudEVsZW1lbnQsYT1udWxsPT1vP3ZvaWQgMDpvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZighYSlyZXR1cm47Y29uc3QgbD1pLmhlaWdodCxzPWkud2lkdGg8PWEud2lkdGh8fG4/aS53aWR0aDphLndpZHRoLGM9YS54K3M+ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aHx8czxhLndpZHRoO2Uuc3R5bGUud2lkdGg9YCR7c31weGAsZS5zdHlsZS5vcGFjaXR5PVwiMVwiLGM/ZS5zdHlsZS5yaWdodD1cIjBweFwiOmUuc3R5bGUubGVmdD1cIjBweFwiLHQ9PT1yLkV4cGFuZERpcmVjdGlvbi5Eb3duJiYoZS5zdHlsZS50b3A9YCR7YS5oZWlnaHR9cHhgKSx0PT09ci5FeHBhbmREaXJlY3Rpb24uVXAmJihlLnN0eWxlLnRvcD0tMSpsK1wicHhcIil9fSwzMDMwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkV4cGFuZGFibGVQYW5lbD12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9cihuKDc1MTgpKSxpPW4oOTE0MSksbD1uKDQxMzApLHM9bigxMzM1KSxjPW4oMjEyOCksdT1yKG4oNDQ4MykpLGQ9e3R5cGU6XCJzcHJpbmdcIixkdXJhdGlvbjouMixib3VuY2U6LjI1fTt0LkV4cGFuZGFibGVQYW5lbD1lPT57dmFyIHQ7Y29uc3Qgbj1gJHtlLnBhbmVsSWR9LWV4cGFuZGFibGUtcGFuZWxgO3JldHVybigwLG8uanN4KSh1LmRlZmF1bHQsT2JqZWN0LmFzc2lnbih7Zm9jdXNUcmFwT3B0aW9uczp7ZmFsbGJhY2tGb2N1czpgIyR7bn1gLGNsaWNrT3V0c2lkZURlYWN0aXZhdGVzOiEwLG9uRGVhY3RpdmF0ZTplLm9uQ29sbGFwc2VSZXF1ZXN0LGluaXRpYWxGb2N1czohMSxkb2N1bWVudDplLmRvY3VtZW50LHJldHVybkZvY3VzT25EZWFjdGl2YXRlOiExfX0se2NoaWxkcmVuOigwLG8uanN4KShoLE9iamVjdC5hc3NpZ24oe3JlZjp0PT4oMCxjLnNldHVwRXhwYW5kYWJsZVBhbmVsKSh0LGUuZXhwYW5kRGlyZWN0aW9uLGUuc3RyZXRjaCksdGFiSW5kZXg6MCxpZDpuLGluaXRpYWw6XCJpbml0aWFsXCIsZXhpdDpcImhpZGRlblwiLGJ1dHRvblNpemU6bnVsbCE9PSh0PWUuYnV0dG9uU2l6ZSkmJnZvaWQgMCE9PXQ/dDpsLkJ1dHRvblNpemUuYmFzZSxhbmltYXRlOlwidmlzaWJsZVwiLHJvbGU6XCJtZW51XCIsdHJhbnNpdGlvbjpkLG9uTW91c2VPdmVyOigpPT57dmFyIGU7cmV0dXJuIG51bGw9PT0oZT1kb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5ibHVyKCl9fSx7Y2hpbGRyZW46ZS5zZWNvbmRhcnlCdXR0b25zLm1hcCgoKHQsbik9PigwLG8uanN4KShsLkJ1dHRvbixPYmplY3QuYXNzaWduKHtjbGFzc05hbWU6XCJtZW51LWl0ZW1cIix0YWJJbmRleDpuKzEsdGl0bGU6dC50aXRsZSxyb2xlOlwibWVudWl0ZW1cIixzaXplOmUuYnV0dG9uU2l6ZSxkaXNhYmxlZDp0LmRpc2FibGVkLGtpbmQ6XCJ0ZXh0T25seVwiLG9uQ2xpY2s6bj0+KCh0LG4pPT57ZS5jbG9zZVBhbmVsT25TZWNvbmRhcnlCdXR0b25DbGljaz8obi5vbkNsaWNrKHQpLGUub25Db2xsYXBzZVJlcXVlc3QoKSk6bi5vbkNsaWNrKHQsKCgpPT5lLm9uQ29sbGFwc2VSZXF1ZXN0KCkpKX0pKG4sdCksXCJhcmlhLWxhYmVsXCI6dC50aXRsZX0se2NoaWxkcmVuOigwLG8uanN4KShwLE9iamVjdC5hc3NpZ24oe1wiYXJpYS1sYWJlbFwiOnQudGl0bGV9LHtjaGlsZHJlbjp0LnRpdGxlfSkpfSksbikpKX0pLFwiZXhwYW5kYWJsZVBhbmVsXCIpfSkpfTtjb25zdCBwPSgwLGEuZGVmYXVsdCkocy5Cb3gpYFxuICBwYWRkaW5nLWJvdHRvbTogMXB4O1xuICBwYWRkaW5nLXRvcDogMXB4O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgZGlzcGxheTogYmxvY2s7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5gLGY9e1tsLkJ1dHRvblNpemUuc21hbGxdOmU9PmUucHguc21hbGwsW2wuQnV0dG9uU2l6ZS5iYXNlXTplPT5lLnB4LmJhc2UsW2wuQnV0dG9uU2l6ZS5sYXJnZV06ZT0+ZS5weC5sYXJnZX0saD0oMCxhLmRlZmF1bHQpKGkubW90aW9uLmRpdilgXG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgb3BhY2l0eTogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206ICR7ZT0+ZS50aGVtZS5weC54eHhsYXJnZX07XG4gIG1heC13aWR0aDogbWF4LWNvbnRlbnQ7XG4gIG1pbi13aWR0aDogODBweDtcbiAgYmFja2dyb3VuZDogJHtlPT5lLnRoZW1lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICBib3gtc2hhZG93OiAke2U9PmUudGhlbWUuc2hhZG93LmJhc2V9O1xuICBoZWlnaHQ6IG1heC1jb250ZW50O1xuICB6LWluZGV4OiAxMDA7XG5cbiAgLm1lbnUtaXRlbSB7XG4gICAgYm9yZGVyLXJhZGl1czogdW5zZXQ7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IHRyYW5zcGFyZW50O1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG92ZXJmbG93OiBjbGlwO1xuICAgICYgPiAqIHtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuICAgIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQubm9ybWFsfTtcbiAgICBwYWRkaW5nLXRvcDogJHsoe3RoZW1lOmUsYnV0dG9uU2l6ZTp0fSk9PmZbdF0oZSl9O1xuICAgIHBhZGRpbmctYm90dG9tOiAkeyh7dGhlbWU6ZSxidXR0b25TaXplOnR9KT0+Zlt0XShlKX07XG4gICAgcGFkZGluZy1sZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcblxuICAgIDpmaXJzdC1jaGlsZCB7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICAgIH1cblxuICAgIDpsYXN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gICAgfVxuXG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgYmFja2dyb3VuZDogJHtlPT5lLnRoZW1lLnBhbGV0dGUuYmFja2dyb3VuZDJ9O1xuICAgIH1cblxuICAgICY6ZGlzYWJsZWQsXG4gICAgJjphY3RpdmU6ZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SW5hY3RpdmV9O1xuICAgICAgYmFja2dyb3VuZDogJHtlPT5lLnRoZW1lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICAgICAgb3BhY2l0eTogdW5zZXQ7XG4gICAgfVxuICB9XG5gfSw0OTI1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig0MDIxKSx0KSxvKG4oOTY0NCksdCl9LDI2MDk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDU5NzEpLHQpfSw1OTcxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVG9nZ2xlPXZvaWQgMDtjb25zdCBhPW4oNTg5MyksaT1uKDY2ODkpLGw9byhuKDc1MTgpKSxzPW4oODUxMCksYz1uKDEzMzUpLHU9bigxOTQ0KTt0LlRvZ2dsZT1lPT57dmFye2lkOnQsbGFiZWw6bixvbkNoYW5nZTpvLGxhYmVsU2lkZTpsPVwicmlnaHRcIix0eXBlOnM9XCJjaGVja2JveFwiLGhlbHBlclRleHQ6Y309ZSxnPXIoZSxbXCJpZFwiLFwibGFiZWxcIixcIm9uQ2hhbmdlXCIsXCJsYWJlbFNpZGVcIixcInR5cGVcIixcImhlbHBlclRleHRcIl0pO2NvbnN0W3YsQ109KDAsaS51c2VTdGF0ZSkoZy5jaGVja2VkKTtyZXR1cm4oMCxpLnVzZUVmZmVjdCkoKCgpPT57QyhnLmNoZWNrZWQpfSksW2cuY2hlY2tlZF0pLCgwLGEuanN4cykoZCxPYmplY3QuYXNzaWduKHtsYWJlbFNpZGU6bH0se2NoaWxkcmVuOlsobnx8YykmJigwLGEuanN4KSh1LkxhYmVsLHtodG1sRm9yOnQsdGV4dDpuLGhlbHBlclRleHQ6Y30pLCgwLGEuanN4cykocCxPYmplY3QuYXNzaWduKHtpc0NoZWNrZWQ6dn0se2NoaWxkcmVuOlsoMCxhLmpzeCkoaCxPYmplY3QuYXNzaWduKHt9LGcse2lkOnQsdHlwZTpzLG9uQ2hhbmdlOmU9PntDKGUudGFyZ2V0LmNoZWNrZWQpLG51bGw9PW98fG8oZSl9fSkpLCgwLGEuanN4KShmLHt0YWJJbmRleDotMSxcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCIsaXNDaGVja2VkOnZ9KV19KSldfSkpfTtjb25zdCBkPWwuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+ZS5weC54bGFyZ2V9O1xuICBmbGV4LWRpcmVjdGlvbjogJHsoe2xhYmVsU2lkZTplfSk9PlwibGVmdFwiPT09ZT9cInJvd1wiOlwicm93LXJldmVyc2VcIn07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhsYXJnZX07XG5gLHA9KDAsbC5kZWZhdWx0KShjLkJveClgXG4gIC0tcHgtdG9nZ2xlOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhsYXJnZX07XG4gIC0tcHgta25vYjogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogdmFyKC0tcHgtdG9nZ2xlKTtcbiAgd2lkdGg6IGNhbGMoMiAqIHZhcigtLXB4LXRvZ2dsZSkpO1xuICBib3JkZXI6IDFweCBzb2xpZFxuICAgICR7KHtpc0NoZWNrZWQ6ZSx0aGVtZTp0fSk9PmU/dC5wYWxldHRlLmJyYW5kUHJpbWFyeTp0LnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICBib3JkZXItcmFkaXVzOiBjYWxjKDAuNSAqIHZhcigtLXB4LXRvZ2dsZSkpO1xuXG4gIGJhY2tncm91bmQ6ICR7KHtpc0NoZWNrZWQ6ZSx0aGVtZTp0fSk9PmU/dC5wYWxldHRlLmJyYW5kUHJpbWFyeTp0LnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbiksXG4gICAgYm9yZGVyLWNvbG9yIHZhcigtLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuXG4gICY6Zm9jdXMtd2l0aGluIHtcbiAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEZvY3VzZWR9O1xuICB9XG5gLGY9bC5kZWZhdWx0LmJ1dHRvbmBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogdmFyKC0tcHgta25vYik7XG4gIGhlaWdodDogdmFyKC0tcHgta25vYik7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH07XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kOiAkeyh7aXNDaGVja2VkOmUsdGhlbWU6dH0pPT5lP3QucGFsZXR0ZS5icmFuZFByaW1hcnlUZXh0OnQucGFsZXR0ZS5pbnB1dENvbG9yfTtcbiAgYm9yZGVyOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICB0cmFuc2l0aW9uOiBsZWZ0IHZhcigtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbiksIGJhY2tncm91bmQgdmFyKC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uKTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IC8qIEFsbG93IHBhc3MtdGhydSBmb3IgbmF0aXZlIGlucHV0ICovXG5gLGg9KDAsbC5kZWZhdWx0KShzLlJhd0lucHV0KWBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG9wYWNpdHk6IDA7XG4gIGJvcmRlcjogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgZGlzcGxheTogYmxvY2s7XG5cbiAgJjpjaGVja2VkICsgJHtmfSB7XG4gICAgbGVmdDogY2FsYygxMDAlIC0gJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX0pO1xuICB9XG4gICY6ZGlzYWJsZWQgKyAke2Z9IHtcbiAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gIH1cbiAgJjpub3QoOmRpc2FibGVkKSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5gfSw1MzAwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQmFkZ2U9dm9pZCAwO2NvbnN0IGE9big1ODkzKSxpPW8obig3NTE4KSksbD1uKDEzMzUpLHM9bigzODc3KTt0LkJhZGdlPWU9Pnt2YXJ7Y291bnQ6dD0wLG1heDpufT1lLG89cihlLFtcImNvdW50XCIsXCJtYXhcIl0pO2xldCBpPXQudG9TdHJpbmcoKTtyZXR1cm4gbiYmdD5uJiYoaT1gJHtufStgKSwoMCxhLmpzeCkoYyxPYmplY3QuYXNzaWduKHt9LG8se2NoaWxkcmVuOml9KSl9O2NvbnN0IGM9KDAsaS5kZWZhdWx0KShsLkJveClgXG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5zdGF0dXNDcml0aWNhbH07XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnBpbGx9O1xuICBjb2xvcjogJHtzLkNvbG9yLndoaXRlfTtcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLnNtYWxsfTtcbiAgbWluLXdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhsYXJnZX07XG4gIHBhZGRpbmc6IDJweCA2cHg7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYm94LXNoYWRvdzogJHsoe3RoZW1lOmV9KT0+ZS5zaGFkb3cuYmFzZX07XG5gfSwzMTM2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig1MzAwKSx0KX0sNjg5NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGE9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH0saT10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxsPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2FsZW5kYXI9dm9pZCAwO2NvbnN0IHM9big1ODkzKSxjPW4oNjY4OSksdT1sKG4oNzUxOCkpLGQ9big3MjkyKSxwPW4oNDEzMCksZj1uKDEzMzUpLGg9YShuKDUyOTkpKTt0LkNhbGVuZGFyPWU9Pnt2YXJ7dmFsdWU6dCxvbkNoYW5nZTpuLG9uRGlzbWlzczpyfT1lLG89aShlLFtcInZhbHVlXCIsXCJvbkNoYW5nZVwiLFwib25EaXNtaXNzXCJdKTtjb25zdFthXT0oMCxjLnVzZVN0YXRlKSh0KSxbbCx1XT0oMCxjLnVzZVN0YXRlKSh0KSxwPSgwLGMudXNlQ2FsbGJhY2spKChlPT57dShlKSxudWxsPT1ufHxuKGUpfSksW10pLGY9KDAsYy51c2VDYWxsYmFjaykoKCgpPT57cChhKSxudWxsPT1yfHxyKCl9KSxbXSk7cmV0dXJuKDAscy5qc3hzKShDLE9iamVjdC5hc3NpZ24oe1wiZGF0YS10ZXN0aWRcIjpcInJlYWN0LWNhbGVuZGFyXCJ9LHtjaGlsZHJlbjpbKDAscy5qc3gpKGQuQ2FsZW5kYXIsT2JqZWN0LmFzc2lnbih7dmFsdWU6bCxvbkNoYW5nZTpwLGNhbGVuZGFyVHlwZTpcIlVTXCIsZGVmYXVsdFZpZXc6XCJtb250aFwiLG1pbkRldGFpbDpcInllYXJcIixuZXh0MkxhYmVsOm51bGwscHJldjJMYWJlbDpudWxsLHNob3dGaXhlZE51bWJlck9mV2Vla3M6ITB9LG8pKSwoMCxzLmpzeHMpKGcse2NoaWxkcmVuOlsoMCxzLmpzeCkodix7XCJkYXRhLXRlc3RpZFwiOlwiY2FsZW5kYXItY2FuY2VsLWJ1dHRvblwiLFwiYXJpYS1sYWJlbFwiOlwiY2FuY2VsLWJ1dHRvblwiLGxhYmVsOlwiQ2FuY2VsXCIsc2l6ZTpcImJhc2VcIixraW5kOlwidGV4dE9ubHlcIixvbkNsaWNrOmZ9KSwoMCxzLmpzeCkodix7XCJkYXRhLXRlc3RpZFwiOlwiY2FsZW5kYXItYXBwbHktYnV0dG9uXCIsXCJhcmlhLWxhYmVsXCI6XCJhcHBseS1idXR0b25cIixsYWJlbDpcIkFwcGx5XCIsc2l6ZTpcImJhc2VcIixraW5kOlwicHJpbWFyeVwiLG9uQ2xpY2s6cn0pXX0pXX0pKX07Y29uc3QgZz0oMCx1LmRlZmF1bHQpKGYuQm94KWBcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9IDBweGB9O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICBtYXJnaW4tcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9YH07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIGJvcmRlci10b3A6IG5vbmU7XG5gLHY9KDAsdS5kZWZhdWx0KShwLkJ1dHRvbilgXG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5zbWFsbH1gfTtcbiAgbWFyZ2luLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfWB9O1xuYCxDPSgwLHUuZGVmYXVsdCkoZi5Cb3gpYFxuICAke2h9O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG5cbiAgLnJlYWN0LWNhbGVuZGFyIHtcbiAgICBtaW4td2lkdGg6IDIzMHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH0gIWltcG9ydGFudDtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgLnJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uX19hcnJvdyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fSAhaW1wb3J0YW50O1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5sYXJnZX07XG5cbiAgICA6ZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICB9XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb25fX2xhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICB9XG5cbiAgLnJlYWN0LWNhbGVuZGFyX192aWV3Q29udGFpbmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dENvbG9yfTtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtkYXlzIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG5cbiAgICBhYmJyIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB9XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX3RpbGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgYm9yZGVyLXJhZGl1czogMTAwcHg7XG4gICAgYXNwZWN0LXJhdGlvOiAxLzE7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgOmRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEluYWN0aXZlfTtcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cbiAgICAgIDpob3ZlciB7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICA6aG92ZXIge1xuICAgICAgYm9yZGVyOiAycHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX07XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgICB9XG5cbiAgICA6Zm9jdXMge1xuICAgICAgYm9yZGVyOiAycHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX07XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgICB9XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX3RpbGUtLW5vdyB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX0gIWltcG9ydGFudDtcbiAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fSAhaW1wb3J0YW50O1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5VGV4dH07XG4gICAgYm9yZGVyLXJhZGl1czogMTAwcHg7XG5cbiAgICA6Zm9jdXMge1xuICAgICAgYm9yZGVyOiAycHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX07XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICAgIH1cbiAgfVxuYH0sOTczNDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNjg5NSksdCl9LDE2MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Ecm9wZG93bkJ1dHRvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9bigyNzkpLGk9big3MjYxKSxsPW4oOTYzNCkscz1uKDY2ODkpLGM9cihuKDc1MTgpKSx1PW4oMTMzNSksZD1uKDk1MDcpLHA9bigxOTQ0KTt0LkRyb3Bkb3duQnV0dG9uPSgwLHMuZm9yd2FyZFJlZikoKChlLHQpPT57dmFyIG4scixsLHMsYztyZXR1cm4oMCxvLmpzeCkoaCx7Y2hpbGRyZW46KDAsby5qc3hzKShmLHtjaGlsZHJlbjpbKGUubGFiZWx8fGUuaGVscGVyVGV4dCkmJigwLG8uanN4KShwLkxhYmVsLHt0ZXh0OmUubGFiZWwsaGVscGVyVGV4dDplLmhlbHBlclRleHQsaHRtbEZvcjplLm5hbWV9KSwoMCxvLmpzeHMpKHYsT2JqZWN0LmFzc2lnbih7cm9sZTpcImNvbWJveGJveFwiLHJlZjp0LG5hbWU6ZS5uYW1lLHRhYkluZGV4OmUudGFiSW5kZXgsXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIjplLmFjdGl2ZURlc2NlbmRhbnQsc3RhdHVzOmUuc3RhdHVzLFwiYXJpYS1leHBhbmRlZFwiOmUuZXhwYW5kZWQsXCJhcmlhLWhhc3BvcHVwXCI6XCJsaXN0Ym94XCIsXCJhcmlhLWNvbnRyb2xzXCI6XCJkcm9wZG93bi1saXN0Ym94XCIsb25DbGljazooKT0+ZS5oYW5kbGVDbGljaygpLGFzOlwiYnV0dG9uXCIsXCJkYXRhLXRlc3RpZFwiOlwiZHJvcGRvd24tYnV0dG9uXCIsdGl0bGU6bnVsbCE9PShyPW51bGw9PT0obj1lLnNlbGVjdGVkKXx8dm9pZCAwPT09bj92b2lkIDA6bi50aXRsZSkmJnZvaWQgMCE9PXI/cjplLnBsYWNlaG9sZGVyfSx7Y2hpbGRyZW46WyhudWxsPT09KGw9ZS5zZWxlY3RlZCl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaWNvblVybCkmJigwLG8uanN4KShhLkJ1dHRvbkltYWdlLHtzcmM6ZS5zZWxlY3RlZC5pY29uVXJsfSksKDAsby5qc3gpKGkuT3B0aW9uVGl0bGUsT2JqZWN0LmFzc2lnbih7XCJhcmlhLWxpdmVcIjpcInBvbGl0ZVwiLFwiZGF0YS10ZXN0aWRcIjpcInNlbGVjdGVkLW9wdGlvblwifSx7Y2hpbGRyZW46bnVsbCE9PShjPW51bGw9PT0ocz1lLnNlbGVjdGVkKXx8dm9pZCAwPT09cz92b2lkIDA6cy50aXRsZSkmJnZvaWQgMCE9PWM/YzplLnBsYWNlaG9sZGVyfSkpLCgwLG8uanN4KShnLHtzdGF0dXM6ZS5zdGF0dXMsaWNvbjplLmV4cGFuZGVkP1wiQ2hldnJvblVwSWNvblwiOlwiQ2hldnJvbkRvd25JY29uXCJ9KV19KSldfSl9KX0pKSx0LkRyb3Bkb3duQnV0dG9uLmRpc3BsYXlOYW1lPVwiRHJvcGRvd25CdXR0b25cIjtjb25zdCBmPSgwLGMuZGVmYXVsdCkodS5Cb3gpYFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICB3aWR0aDogMTAwJTtcbmAsaD0oMCxjLmRlZmF1bHQpKHUuQm94KWBcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICB3aWR0aDogMTAwJTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG5gLGc9KDAsYy5kZWZhdWx0KShsLkljb24pYFxuICBjb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsZC5nZXRTdGF0dXNDb2xvcikoZSx0LFwidGV4dERlZmF1bHRcIil9O1xuYCx2PSgwLGMuZGVmYXVsdCkodS5Cb3gpYFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICBib3JkZXI6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRCYWNrZ3JvdW5kfTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplLHN0YXR1czp0fSk9PigwLGQuZ2V0U3RhdHVzQ29sb3IpKGUsdCxcImlucHV0Qm9yZGVyXCIpfTtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQuYm9sZH07XG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC51aX07XG4gIG91dGxpbmU6IG5vbmU7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5zbWFsbH1gfTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuICB3aWR0aDogMTAwJTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAke2wuSWNvbn0ge1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICB9XG5cbiAgJjpmb2N1cy13aXRoaW4ge1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsZC5nZXRTdGF0dXNDb2xvcikoZSx0LFwiaW5wdXRGb2N1c2VkXCIpfTtcbiAgfVxuYH0sNjA2MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Ecm9wZG93bk1lbnU9dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPW4oNjY4OSksaT1uKDEzMzUpLGw9cihuKDc1MTgpKSxzPW4oNzI2MSksYz1uKDI3OSksdT1uKDM0NyksZD1uKDE2Mik7dC5Ecm9wZG93bk1lbnU9KDAsYS5mb3J3YXJkUmVmKSgoKHtsYWJlbDplLG9wdGlvbnM6dD1bW11dLHBsYWNlaG9sZGVyOm49XCJTZWxlY3QgYW4gb3B0aW9uXCIsc2VsZWN0ZWQ6cixvbk9wdGlvbkhvdmVyOmwsb25DaGFuZ2U6aCxyZW5kZXJMYWJlbDpnLGZpdENvbnRlbnQ6dn0sQyk9PntpZihyJiYhKChlLHQpPT5lLnNvbWUoKGU9PmUuc29tZSgoZT0+ZS52YWx1ZT09PXQudmFsdWUpKSkpKSh0LHIpKXRocm93IG5ldyBFcnJvcihgVGhlIHNlbGVjdGVkIG9wdGlvbiAke3IudmFsdWV9IGlzIG5vdCBwcmVzZW50IGluIHRoZSBvcHRpb25zIGFycmF5YCk7Y29uc3RbbSx3XT0oMCxhLnVzZVN0YXRlKSghMSk7KDAsYS51c2VFZmZlY3QpKCgoKT0+ezE9PT10WzBdLmxlbmd0aCYmYighMSl9KSxbdF0pO2NvbnN0IGI9ZT0+e3cobnVsbCE9ZT9lOiFtKX0se2ZvY3VzZWRPcHRpb246eSxoYW5kbGVLZXlEb3duOnh9PSgwLHUudXNlRHJvcGRvd25LZXlib2FyZE5hdmlnYXRpb24pKHQscixtLGIsaCk7cmV0dXJuKDAsby5qc3gpKHAsT2JqZWN0LmFzc2lnbih7cmVmOkMsZmxleERpcmVjdGlvbjpcImNvbHVtblwiLG9uQmx1cjplPT57ZS5jdXJyZW50VGFyZ2V0LmNvbnRhaW5zKGUucmVsYXRlZFRhcmdldCl8fHcoITEpfSxvbktleURvd246eH0se2NoaWxkcmVuOigwLG8uanN4cykoaS5Cb3gsT2JqZWN0LmFzc2lnbih7Z2FwOlwic21hbGxcIixmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsc3R5bGU6e3dpZHRoOlwiMTAwJVwifX0se2NoaWxkcmVuOltlJiYoMCxvLmpzeCkoXCJsYWJlbFwiLE9iamVjdC5hc3NpZ24oe2h0bWxGb3I6XCJkcm9wZG93bi1idXR0b25cIn0se2NoaWxkcmVuOigwLG8uanN4KShzLk9wdGlvblRpdGxlLHtjaGlsZHJlbjplfSl9KSksKDAsby5qc3hzKShmLHtjaGlsZHJlbjpbZz8oMCxvLmpzeCkoYS5GcmFnbWVudCx7Y2hpbGRyZW46ZyhyfHx7dGl0bGU6bix2YWx1ZTpudWxsfSxtLGIseSl9LGByZW5kZXItbGFiZWwtJHtyfWApOigwLG8uanN4KShkLkRyb3Bkb3duQnV0dG9uLHt0YWJJbmRleDowLGFjdGl2ZURlc2NlbmRhbnQ6YG1lbnUtb3B0aW9uLSR7bnVsbD09eT92b2lkIDA6eS52YWx1ZX1gLGV4cGFuZGVkOm0mJnRbMF0ubGVuZ3RoPjEsaGFuZGxlQ2xpY2s6KCk9PmIoKSxzZWxlY3RlZDpyLHBsYWNlaG9sZGVyOm59KSx0Lmxlbmd0aCYmdFswXS5sZW5ndGg+MSYmbSYmKDAsby5qc3gpKGMuTWVudSx7bWVudUlkOlwiZHJvcGRvd24tbGlzdGJveFwiLG9wdGlvbnM6dCxzZWxlY3RlZDpyLGhhbmRsZUV4cGFuZE1lbnU6Yixvbk9wdGlvbkhvdmVyOmwsb25DaGFuZ2U6aCxmaXRDb250ZW50OnYsZm9jdXNlZE9wdGlvbjp5LGFic29sdXRlUG9zaXRpb246ITB9KV19KV19KSl9KSl9KSksdC5Ecm9wZG93bk1lbnUuZGlzcGxheU5hbWU9XCJEcm9wZG93bk1lbnVcIjtjb25zdCBwPSgwLGwuZGVmYXVsdCkoaS5Cb3gpYFxuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYCxmPSgwLGwuZGVmYXVsdCkoaS5Cb3gpYGB9LDYwMjY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDYwNjIpLHQpLG8obigyNzkpLHQpLG8obigxNjIpLHQpfSwyNzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQnV0dG9uSW1hZ2U9dC5NZW51PXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1yKG4oNjY4OSkpLGk9cihuKDc1MTgpKSxsPW4oOTYzNCkscz1uKDEzMzUpLGM9big3MjYxKTt0Lk1lbnU9KHtvcHRpb25zOmUsc2VsZWN0ZWQ6bixtZW51SWQ6cixoYW5kbGVFeHBhbmRNZW51Omksb25PcHRpb25Ib3ZlcjpsLG9uQ2hhbmdlOnMsd2lkdGg6ZyxoZWlnaHQ6dixoZWFkZXI6Qyxmb2N1c2VkT3B0aW9uOm0sYWJzb2x1dGVQb3NpdGlvbjp3LGZpdENvbnRlbnQ6Yn0pPT57Y29uc3QgeT1lPT57bnVsbD09bHx8bChlKX07cmV0dXJuKDAsby5qc3hzKSh1LE9iamVjdC5hc3NpZ24oe3JvbGU6XCJsaXN0Ym94XCIsZmxleERpcmVjdGlvbjpcImNvbHVtblwiLG9uTW91c2VMZWF2ZTooKT0+e3kobnVsbCl9LFwiZGF0YS10ZXN0aWRcIjpcIm1lbnVcIixpZDpyLHdpZHRoOmcsaGVpZ2h0OnYsYWJzb2x1dGVQb3NpdGlvbjp3LGZpdENvbnRlbnQ6Yn0se2NoaWxkcmVuOltDJiYoMCxvLmpzeHMpKGEuZGVmYXVsdC5GcmFnbWVudCx7Y2hpbGRyZW46WygwLG8uanN4KShwLHtjaGlsZHJlbjooMCxvLmpzeCkoYy5PcHRpb25UaXRsZSx7Y2hpbGRyZW46Q30pfSksKDAsby5qc3gpKGgse30pXX0pLGUubWFwKCgoZSxyKT0+KDAsby5qc3hzKShhLmRlZmF1bHQuRnJhZ21lbnQse2NoaWxkcmVuOlswIT09ciYmKDAsby5qc3gpKGgse30pLGUubWFwKCgoZSxyKT0+KDAsby5qc3hzKShkLE9iamVjdC5hc3NpZ24oe3JvbGU6XCJvcHRpb25cIixpc0ZvY3VzZWQ6KG51bGw9PW0/dm9pZCAwOm0udmFsdWUpPT09ZS52YWx1ZSxcImFyaWEtc2VsZWN0ZWRcIjoobnVsbD09bj92b2lkIDA6bi52YWx1ZSk9PT1lLnZhbHVlLGFsaWduSXRlbXM6XCJjZW50ZXJcIixhczpcImJ1dHRvblwiLFwiZGF0YS10ZXN0aWRcIjpgbWVudS1vcHRpb24tJHtyfWAsaWQ6YG1lbnUtb3B0aW9uLSR7ZS52YWx1ZX1gLHRpdGxlOmUudGl0bGUsb25DbGljazooKT0+e2Uub3ZlcnJpZGVPbkNsaWNrP2Uub3ZlcnJpZGVPbkNsaWNrKGUpOnMoZSksbnVsbD09aXx8aSgpfSxvbk1vdXNlT3ZlcjooKT0+eShlLnZhbHVlKX0se2NoaWxkcmVuOlsobnVsbD09ZT92b2lkIDA6ZS5pY29uVXJsKSYmKDAsby5qc3gpKHQuQnV0dG9uSW1hZ2Use3NyYzplLmljb25Vcmwsc3R5bGU6e21hcmdpblJpZ2h0OlwiOHB4XCJ9fSksKDAsby5qc3gpKGMuT3B0aW9uVGl0bGUse2NoaWxkcmVuOmUudGl0bGV9KSwobnVsbD09bj92b2lkIDA6bi52YWx1ZSk9PT1lLnZhbHVlPygwLG8uanN4KShmLHtpY29uOlwiQ2hlY2tJY29uXCJ9KTooMCxvLmpzeCkoZix7Y2hpbGRyZW46KDAsby5qc3gpKG8uRnJhZ21lbnQse30pfSldfSkscikpKV19LHIpKSldfSkpfTtjb25zdCB1PSgwLGkuZGVmYXVsdCkocy5Cb3gpYFxuICB3aWR0aDogJHsoe3dpZHRoOmUsZml0Q29udGVudDp0fSk9PmV8fCh0P1wiZml0LWNvbnRlbnRcIjpcIjEwMCVcIil9O1xuICBtYXgtaGVpZ2h0OiAkeyh7aGVpZ2h0OmV9KT0+bnVsbCE9ZT9lOlwiZml0LWNvbnRlbnRcIn07XG4gIHRvcDogJHsoe3RoZW1lOmV9KT0+YGNhbGMoMTAwJSArICR7ZS5weC54c21hbGx9KWB9O1xuICBib3gtc2hhZG93OiAwcHggNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgei1pbmRleDogMTA7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEJhY2tncm91bmR9O1xuICBwb3NpdGlvbjogJHsoe2Fic29sdXRlUG9zaXRpb246ZX0pPT5lP1wiYWJzb2x1dGVcIjpcImluaXRpYWxcIn07XG5gLGQ9KDAsaS5kZWZhdWx0KShzLkJveClgXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGJvcmRlcjogJHsoe2lzRm9jdXNlZDplLHRoZW1lOnR9KT0+ZT9gMXB4IHNvbGlkICR7dC5wYWxldHRlLmJvcmRlck5ldXRyYWx9YDpcIjFweCBzb2xpZCB0cmFuc3BhcmVudFwifTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfSAke2UucHguc21hbGx9YH07XG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMn07XG4gIH1cbmAscD0oMCxpLmRlZmF1bHQpKHMuQm94KWBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfSAke2UucHguc21hbGx9YH07XG5gLGY9KDAsaS5kZWZhdWx0KShsLkljb24pYFxuICBtYXJnaW4tbGVmdDogYXV0bztcbmAsaD0oMCxpLmRlZmF1bHQpKHMuQm94KWBcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEJhY2tncm91bmR9O1xuYDt0LkJ1dHRvbkltYWdlPWkuZGVmYXVsdC5pbWdgXG4gIGhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54bGFyZ2V9O1xuICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54bGFyZ2V9O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG5gfSw3MjYxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlVG9vbHRpcD10LmlzRWxlbWVudE92ZXJmbG93bj10Lk9wdGlvblRpdGxlPXZvaWQgMDtjb25zdCBhPW4oNTg5MyksaT1uKDY2ODkpLGw9big3NzY5KSxzPW4oOTUwNyksYz1vKG4oNzUxOCkpO3QuT3B0aW9uVGl0bGU9ZT0+e3ZhcntjaGlsZHJlbjpufT1lLG89cihlLFtcImNoaWxkcmVuXCJdKTtyZXR1cm4oMCxhLmpzeCkodSxPYmplY3QuYXNzaWduKHtyZWY6KDAsdC51c2VUb29sdGlwKShuKX0sbyx7Y2hpbGRyZW46KDAsYS5qc3gpKFwiZGl2XCIse2NoaWxkcmVuOm59KX0pKX07Y29uc3QgdT0oMCxjLmRlZmF1bHQpKGwuVGV4dClgXG4gICR7cy5NaXhpbnMudGV4dE92ZXJmbG93fTtcbiAgbWFyZ2luLWxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbmA7ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS5zY3JvbGxIZWlnaHQ+ZS5jbGllbnRIZWlnaHR8fGUuc2Nyb2xsV2lkdGg+ZS5jbGllbnRXaWR0aH10LmlzRWxlbWVudE92ZXJmbG93bj1kLHQudXNlVG9vbHRpcD1lPT4oMCxpLnVzZUNhbGxiYWNrKSgodD0+e3QmJmUmJmQodCkmJih0LnRpdGxlPWUpfSksW10pfSw3MDA2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuSWNvbj12b2lkIDA7Y29uc3QgYT1uKDU4OTMpLGk9byhuKDc1MTgpKSxsPW4oMTMzNSkscz1uKDk1MDcpLGM9bigzNDcxKSx1PW4oOTY2OSk7dC5JY29uPSgwLGkuZGVmYXVsdCkoKGU9Pnt2YXJ7dGFiSW5kZXg6dCxpY29uOm4sY2hpbGRyZW46byxzaXplOmk9XCJiYXNlXCIsY29udGFpbmVyU2l6ZTpsLFwiZGF0YS10ZXN0aWRcIjpzfT1lLGM9cihlLFtcInRhYkluZGV4XCIsXCJpY29uXCIsXCJjaGlsZHJlblwiLFwic2l6ZVwiLFwiY29udGFpbmVyU2l6ZVwiLFwiZGF0YS10ZXN0aWRcIl0pO3JldHVybigwLGEuanN4KShwLE9iamVjdC5hc3NpZ24oe30sYyx7aWNvblNpemU6aSxjb250YWluZXJTaXplOmx8fGksanVzdGlmeUNvbnRlbnQ6XCJjZW50ZXJcIixhbGlnbkl0ZW1zOlwiY2VudGVyXCIsXCJkYXRhLXRlc3RpZFwiOnMsdGFiSW5kZXg6dH0se2NoaWxkcmVuOm4/KDAsYS5qc3gpKGQsT2JqZWN0LmFzc2lnbih7YXJpYUxhYmVsOmNbXCJhcmlhLWxhYmVsXCJdLGljb246bn0sYykpOm99KSl9KSlgYDtjb25zdCBkPSgwLGkuZGVmYXVsdCkoKGU9Pnt2YXJ7aWNvbjp0LGFyaWFMYWJlbDpufT1lLG89cihlLFtcImljb25cIixcImFyaWFMYWJlbFwiXSk7Y29uc3QgaT1jLkljb25TZXRbdF07cmV0dXJuKDAsYS5qc3gpKGksT2JqZWN0LmFzc2lnbih7cm9sZTpcImltZ1wiLFwiYXJpYS1sYWJlbFwiOm59LG8pKX0pKWBgLHA9KDAsaS5kZWZhdWx0KShsLkJveClgXG4gIC8qKlxuICAgKiAxLiBJbml0aWFsaXplIGxvY2FsIHZhcmlhYmxlcyB3aXRoIHJlYXNvbmFibGUgZGVmYXVsdHNcbiAgICovXG4gIC0tcHgtZGVmYXVsdDogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5iYXNlfTtcblxuICAvKipcbiAgICogMi4gSW5qZWN0IHZhcmlhbnRzIC0tID8gV2hhdCBhcmUgVmFyaWFudHNcbiAgICovXG4gICR7KDAscy5nZXRWYXJpYW50Q1NTKSh1LnZhcmlhbnRzLHUuVmFyaWFudC5jb250YWluZXJTaXplKX1cbiAgJHsoMCxzLmdldFZhcmlhbnRDU1MpKHUudmFyaWFudHMsdS5WYXJpYW50Lmljb25TaXplKX1cblxuICB3aWR0aDogdmFyKC0tcHgtY29udGFpbmVyLCB2YXIoLS1weC1kZWZhdWx0KSk7XG4gIGhlaWdodDogdmFyKC0tcHgtY29udGFpbmVyLCB2YXIoLS1weC1kZWZhdWx0KSk7XG5cbiAgLyogU1ZHIEFzc2V0ICovXG4gICYgPiAqLFxuICAke2R9IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogdmFyKC0tcHgtaWNvbiwgdmFyKC0tcHgtZGVmYXVsdCkpO1xuICAgIGhlaWdodDogdmFyKC0tcHgtaWNvbiwgdmFyKC0tcHgtZGVmYXVsdCkpO1xuICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XG4gIH1cbmB9LDk2Njk6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudmFyaWFudHM9dC5WYXJpYW50PXZvaWQgMDtjb25zdCByPW4oNzUxOCk7dC5WYXJpYW50PXtpY29uU2l6ZTpcImljb25TaXplXCIsY29udGFpbmVyU2l6ZTpcImNvbnRhaW5lclNpemVcIn0sdC52YXJpYW50cz17W3QuVmFyaWFudC5pY29uU2l6ZV06e3hzbWFsbDpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54c21hbGx9O1xuICAgIGAsc21hbGw6ci5jc3NgXG4gICAgICAtLXB4LWljb246ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuc21hbGx9O1xuICAgIGAsYmFzZTpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5iYXNlfTtcbiAgICBgLGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1pY29uOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLmxhcmdlfTtcbiAgICBgLHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54bGFyZ2V9O1xuICAgIGAseHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54eGxhcmdlfTtcbiAgICBgLHh4eGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1pY29uOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnh4eGxhcmdlfTtcbiAgICBgfSxbdC5WYXJpYW50LmNvbnRhaW5lclNpemVdOnt4c21hbGw6ci5jc3NgXG4gICAgICAtLXB4LWNvbnRhaW5lcjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54c21hbGx9O1xuICAgIGAsc21hbGw6ci5jc3NgXG4gICAgICAtLXB4LWNvbnRhaW5lcjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5zbWFsbH07XG4gICAgYCxiYXNlOnIuY3NzYFxuICAgICAgLS1weC1jb250YWluZXI6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuYmFzZX07XG4gICAgYCxsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLmxhcmdlfTtcbiAgICBgLHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnhsYXJnZX07XG4gICAgYCx4eGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1jb250YWluZXI6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUueHhsYXJnZX07XG4gICAgYCx4eHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnh4eGxhcmdlfTtcbiAgICBgfX19LDk2MzQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDcwMDYpLHQpfSw5Mjg1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJlbGxGaWxsZWRJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5CZWxsRmlsbGVkSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMjBcIixoZWlnaHQ6XCIyMFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46WygwLG8uanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xMiAyQzExLjIyOTYgMiAxMC41ODQ1IDIuNTgzNzkgMTAuNTA3OCAzLjM1MDQxQzEwLjQ5NTIgMy40NzY3NyAxMC40MDU3IDMuNTgxNTcgMTAuMjg0NiAzLjYxOTcxQzguMDY1NTQgNC4zMTg1MSA2LjQyMjM4IDYuMzM3OTYgNi4zMDAzMyA4Ljc3ODkzTDYuMTIzODIgMTIuMzA5MUM2LjA5OTM2IDEyLjc5ODIgNS44MTMzMSAxMy4yMzYyIDUuMzc1MyAxMy40NTUyTDQuNjA3MzkgMTMuODM5MkM0LjE0NzYxIDE0LjA2OTEgMy44NTcxOCAxNC41MzkgMy44NTcxOCAxNS4wNTMxVjE2LjI1QzMuODU3MTggMTYuNjI0OCA0LjE2MDk4IDE2LjkyODYgNC41MzU3NSAxNi45Mjg2SDE5LjQ2NDNDMTkuODM5MSAxNi45Mjg2IDIwLjE0MjkgMTYuNjI0OCAyMC4xNDI5IDE2LjI1VjE1LjA1MzFDMjAuMTQyOSAxNC41MzkgMTkuODUyNSAxNC4wNjkxIDE5LjM5MjcgMTMuODM5MkwxOC42MjQ3IDEzLjQ1NTJDMTguMTg2NyAxMy4yMzYyIDE3LjkwMDYgMTIuNzk4MiAxNy44NzYyIDEyLjMwOTFMMTcuNjk5NyA4Ljc3ODkzQzE3LjU3NzYgNi4zMzc5NiAxNS45MzQ0IDQuMzE4NTEgMTMuNzE1NCAzLjYxOTcyQzEzLjU5NDIgMy41ODE1NyAxMy41MDQ4IDMuNDc2NzggMTMuNDkyMiAzLjM1MDQxQzEzLjQxNTUgMi41ODM4IDEyLjc3MDQgMiAxMiAyWlwiLGZpbGw6dH0pLCgwLG8uanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk05LjI4NTcxIDE4LjI4NTdDOS4yODU3MSAxOS43ODQ4IDEwLjUwMDkgMjEgMTIgMjFDMTMuNDk5MSAyMSAxNC43MTQzIDE5Ljc4NDggMTQuNzE0MyAxOC4yODU3TDkuMjg1NzEgMTguMjg1N1pcIixmaWxsOnR9KV19KSl9fSw0NzE4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJlbGxJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5CZWxsSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNy40NzMwNiAxLjIyOTQzQzYuNTE5MyAxLjIyOTQzIDUuODcyOTEgMS45ODM5OSA1LjY1MzcxIDIuNzI2OTdDNS42NTIwNyAyLjcyOTMyIDUuNjQ5MjEgMi43MzMwMyA1LjY0NDg1IDIuNzM3NTZDNS42MzkyIDIuNzQzNDIgNS42MzI2NCAyLjc0ODk2IDUuNjI1OTkgMi43NTM1NUM1LjYxOTI2IDIuNzU4MTkgNS42MTQ1MiAyLjc2MDQgNS42MTMgMi43NjEwMkw1LjYxMjY1IDIuNzYxMTdDNS4wNTA4OCAyLjk5MjUxIDQuMzkxOTMgMy4zNjAyMiAzLjg3Njk3IDQuMDMzNTdDMy4zNTgxNSA0LjcxMTk2IDMuMDE5NDkgNS42NTU3MSAzLjAxOTQ1IDYuOTc3NDlMNS42NTM3MSAyLjcyNjk3TDMuMDE5NDUgNi45Nzc3NkMzLjAxODY2IDguMzAxNjUgMi44Nzg3MSA5LjAzMTMgMi42NzA5MSA5LjUzNDM5QzIuNDg4NzkgOS45NzUzMSAyLjI0ODg5IDEwLjI2NTggMS45MTIgMTAuNjczOEwxLjkxMTg1IDEwLjY3NEMxLjg2MjYzIDEwLjczMzYgMS44MTEzNSAxMC43OTU3IDEuNzU3ODcgMTAuODYxMkMxLjE0OTIzIDExLjYwNiAxLjcyNzI5IDEyLjY0MTkgMi42NTk4NiAxMi42NDE5SDUuMDkwMTlDNS4yMTE5MSAxMi45OCA1LjQwNzI2IDEzLjI5MDYgNS42NjYxOCAxMy41NDk1QzYuMTI4MjcgMTQuMDExNiA2Ljc1NDk5IDE0LjI3MTIgNy40MDg0OCAxNC4yNzEyQzguMDYxOTcgMTQuMjcxMiA4LjY4ODcgMTQuMDExNiA5LjE1MDc4IDEzLjU0OTVDOS40MDk3MSAxMy4yOTA2IDkuNjA1MDUgMTIuOTggOS43MjY3OCAxMi42NDE5SDEyLjI4OTRDMTMuMjIzNCAxMi42NDE5IDEzLjc5MiAxMS42MDA4IDEzLjE4ODQgMTAuODYxM0wxMy4xODgzIDEwLjg2MTJDMTMuMTM0OCAxMC43OTU3IDEzLjA4MzUgMTAuNzMzNiAxMy4wMzQyIDEwLjY3NEMxMi42OTczIDEwLjI2NTkgMTIuNDU3NCA5Ljk3NTQgMTIuMjc1NSA5LjUzNDUxQzEyLjA2NzggOS4wMzE0NyAxMS45MjgyIDguMzAxODIgMTEuOTI4MiA2Ljk3Nzc2QzExLjkyODIgNS42NTY4OCAxMS41ODkxIDQuNzEyOTkgMTEuMDcwMyA0LjAzNDMzQzEwLjU1NTMgMy4zNjA3NSA5Ljg5NjUyIDIuOTkyMzQgOS4zMzQ5OSAyLjc2MTE1TDkuMzM0NjcgMi43NjEwMkM5LjMzNDA5IDIuNzYwNzkgOS4zMjk4MiAyLjc1ODg4IDkuMzIzMTMgMi43NTQyNEM5LjMxNjU1IDIuNzQ5NjcgOS4zMDk4MSAyLjc0Mzk0IDkuMzAzODIgMi43Mzc3QzkuMjk4NzUgMi43MzI0MSA5LjI5NTQ1IDIuNzI4MDMgOS4yOTM2MyAyLjcyNTMxQzkuMDcyNjQgMS45ODM3OCA4LjQyNjkxIDEuMjI5NDMgNy40NzMwNiAxLjIyOTQzWk04LjY4NjU0IDEyLjY0MTlINi4xMzA0MkM2LjE4NzYgMTIuNzI5NSA2LjI1NDAzIDEyLjgxMTUgNi4zMjkxIDEyLjg4NjZDNi42MTUzNyAxMy4xNzI5IDcuMDAzNjMgMTMuMzMzNyA3LjQwODQ4IDEzLjMzMzdDNy44MTMzMyAxMy4zMzM3IDguMjAxNiAxMy4xNzI5IDguNDg3ODcgMTIuODg2NkM4LjU2MjkzIDEyLjgxMTUgOC42MjkzNyAxMi43Mjk1IDguNjg2NTQgMTIuNjQxOVpNNi41NTE0NSAyLjk5NzE2QzYuNjk1NzEgMi41MDA4NSA3LjA3MTIxIDIuMTY2OTMgNy40NzMwNiAyLjE2NjkzQzcuODc0OTIgMi4xNjY5MyA4LjI1MDUgMi41MDA2MSA4LjM5NjYgMi45OTc4NUw4LjM5Njk1IDIuOTk5MDRDOC40ODQ5OSAzLjI5NTc1IDguNzI4NDMgMy41MjUzOCA4Ljk3ODA5IDMuNjI4MDZDOS40NTYyNSAzLjgyNDkyIDkuOTQ4OTQgNC4xMTExOSAxMC4zMjU1IDQuNjAzNzNDMTAuNjk4MiA1LjA5MTE5IDEwLjk5MDcgNS44MjQ4NiAxMC45OTA3IDYuOTc3NzZDMTAuOTkwNyA4LjM1NTA2IDExLjEzMzcgOS4yMjU1IDExLjQwODkgOS44OTIxN0MxMS42NDgzIDEwLjQ3MjMgMTEuOTgyMyAxMC44NzQ5IDEyLjMxNjcgMTEuMjc4QzEyLjM2NTMgMTEuMzM2NiAxMi40MTM5IDExLjM5NTEgMTIuNDYyMiAxMS40NTQyQzEyLjUwMTYgMTEuNTAyNSAxMi41MDQ2IDExLjU1NTIgMTIuNDc5MyAxMS42MDVDMTIuNDU1MyAxMS42NTI0IDEyLjM5OTYgMTEuNzA0NCAxMi4yODk0IDExLjcwNDRIMi42NTk4NkMyLjU0NjA0IDExLjcwNDQgMi40ODk1NSAxMS42NTA5IDIuNDY1ODggMTEuNjA0NUMyLjQ0MTE5IDExLjU1NjIgMi40NDMyNSAxMS41MDQgMi40ODM4IDExLjQ1NDRMMi40ODM4MyAxMS40NTQ0QzIuNTMyMTUgMTEuMzk1MiAyLjU4MDc1IDExLjMzNjYgMi42MjkzNCAxMS4yNzgxTDIuNjI5NDYgMTEuMjc3OUMyLjk2Mzg5IDEwLjg3NDggMy4yOTc4NSAxMC40NzIzIDMuNTM3NCA5Ljg5MjI5QzMuODEyNzMgOS4yMjU3MSAzLjk1NjE1IDguMzU1MzMgMy45NTY5NSA2Ljk3ODAzVjYuOTc3NzZDMy45NTY5NSA1LjgyMzQxIDQuMjQ5MjggNS4wODk5OSA0LjYyMTY1IDQuNjAzMDlDNC45OTc5MiA0LjExMTEgNS40OTA0NCAzLjgyNTM3IDUuOTY5NjMgMy42MjgwNUM2LjIxNjYxIDMuNTI2NDUgNi40NjI1NyAzLjMwMDAyIDYuNTUxMTEgMi45OTgzM0w2LjU1MTQ1IDIuOTk3MTZaXCIsZmlsbDp0LHJvbGU6XCJpbWdcIn0pfSkpfX0sODI2NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Ccm9rZW5MaW5rSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQnJva2VuTGlua0ljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4cykoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjMyXCIsaGVpZ2h0OlwiMzJcIix2aWV3Qm94OlwiMCAwIDMyIDMyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOlsoMCxvLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNi4zMzM1IDMuNzAwMkM2LjA1NzM1IDMuNzAwMiA1LjgzMzUgMy45MjQwNSA1LjgzMzUgNC4yMDAyVjI3LjgwMDJDNS44MzM1IDI4LjA3NjMgNi4wNTczNSAyOC4zMDAyIDYuMzMzNSAyOC4zMDAySDI1LjY2NjhDMjUuOTQzIDI4LjMwMDIgMjYuMTY2OCAyOC4wNzYzIDI2LjE2NjggMjcuODAwMlYxMi4yMzM1SDE4LjEzMzVDMTcuODU3NCAxMi4yMzM1IDE3LjYzMzUgMTIuMDA5NyAxNy42MzM1IDExLjczMzVWMy43MDAySDYuMzMzNVpNMTguNjMzNSA0LjQwNzNMMjUuNDU5NyAxMS4yMzM1SDE4LjYzMzVWNC40MDczWk00LjgzMzUgNC4yMDAyQzQuODMzNSAzLjM3MTc3IDUuNTA1MDcgMi43MDAyIDYuMzMzNSAyLjcwMDJIMTguMTMzNUMxOC4yNjYxIDIuNzAwMiAxOC4zOTMzIDIuNzUyODcgMTguNDg3IDIuODQ2NjRMMjcuMDIwNCAxMS4zOEMyNy4xMTQxIDExLjQ3MzcgMjcuMTY2OCAxMS42MDA5IDI3LjE2NjggMTEuNzMzNVYyNy44MDAyQzI3LjE2NjggMjguNjI4NiAyNi40OTUzIDI5LjMwMDIgMjUuNjY2OCAyOS4zMDAySDYuMzMzNUM1LjUwNTA3IDI5LjMwMDIgNC44MzM1IDI4LjYyODYgNC44MzM1IDI3LjgwMDJWNC4yMDAyWlwiLGZpbGw6dH0pLCgwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xNC4yNDggMjEuOTA4NFYyMS44NDA5QzE0LjI1MjggMjEuNDAwNiAxNC4yOTY2IDIxLjA1MDIgMTQuMzc5NCAyMC43ODk4QzE0LjQ2NDcgMjAuNTI5NCAxNC41ODU0IDIwLjMxODcgMTQuNzQxNyAyMC4xNTc3QzE0Ljg5NzkgMTkuOTk2NyAxNS4wODYxIDE5Ljg0OTkgMTUuMzA2MyAxOS43MTczQzE1LjQ0ODMgMTkuNjI3NCAxNS41NzYyIDE5LjUyNjggMTUuNjg5OCAxOS40MTU1QzE1LjgwMzQgMTkuMzA0MiAxNS44OTM0IDE5LjE3NjQgMTUuOTU5NyAxOS4wMzJDMTYuMDI2IDE4Ljg4NzUgMTYuMDU5MSAxOC43Mjc3IDE2LjA1OTEgMTguNTUyNkMxNi4wNTkxIDE4LjM0MTkgMTYuMDA5NCAxOC4xNTk2IDE1LjkxIDE4LjAwNTdDMTUuODEwNSAxNy44NTE4IDE1LjY3OCAxNy43MzM0IDE1LjUxMjMgMTcuNjUwNkMxNS4zNDg5IDE3LjU2NTMgMTUuMTY2NiAxNy41MjI3IDE0Ljk2NTQgMTcuNTIyN0MxNC43ODMxIDE3LjUyMjcgMTQuNjA5MSAxNy41NjA2IDE0LjQ0MzQgMTcuNjM2NEMxNC4yNzc2IDE3LjcxMjEgMTQuMTQwMyAxNy44MzA1IDE0LjAzMTQgMTcuOTkxNUMxMy45MjI1IDE4LjE1MDEgMTMuODU5OCAxOC4zNTQ5IDEzLjg0MzIgMTguNjA1OEgxMi43NjM3QzEyLjc4MDIgMTguMTc5NyAxMi44ODggMTcuODE5OCAxMy4wODY4IDE3LjUyNjNDMTMuMjg1NyAxNy4yMzA0IDEzLjU0ODUgMTcuMDA2NiAxMy44NzUyIDE2Ljg1NTFDMTQuMjA0MiAxNi43MDM2IDE0LjU2NzYgMTYuNjI3OCAxNC45NjU0IDE2LjYyNzhDMTUuNDAxIDE2LjYyNzggMTUuNzgyMSAxNi43MDk1IDE2LjEwODggMTYuODcyOUMxNi40MzU1IDE3LjAzMzkgMTYuNjg4OSAxNy4yNTk5IDE2Ljg2ODggMTcuNTUxMUMxNy4wNTExIDE3Ljg0IDE3LjE0MjIgMTguMTc3MyAxNy4xNDIyIDE4LjU2MzJDMTcuMTQyMiAxOC44Mjg0IDE3LjEwMDggMTkuMDY3NSAxNy4wMTc5IDE5LjI4MDVDMTYuOTM1MSAxOS40OTEyIDE2LjgxNjcgMTkuNjc5NSAxNi42NjI4IDE5Ljg0NTJDMTYuNTExMyAyMC4wMTA5IDE2LjMyOSAyMC4xNTc3IDE2LjExNTkgMjAuMjg1NUMxNS45MTQ3IDIwLjQxMSAxNS43NTE0IDIwLjU0MTIgMTUuNjI1OSAyMC42NzYxQzE1LjUwMjggMjAuODExMSAxNS40MTI4IDIwLjk3MDkgMTUuMzU2IDIxLjE1NTVDMTUuMjk5MiAyMS4zNDAyIDE1LjI2ODQgMjEuNTY4NyAxNS4yNjM3IDIxLjg0MDlWMjEuOTA4NEgxNC4yNDhaTTE0Ljc4NDMgMjQuMDY3NUMxNC41OTAxIDI0LjA2NzUgMTQuNDIzMiAyMy45OTg4IDE0LjI4MzYgMjMuODYxNUMxNC4xNDM5IDIzLjcyMTggMTQuMDc0IDIzLjU1MzcgMTQuMDc0IDIzLjM1NzJDMTQuMDc0IDIzLjE2MzEgMTQuMTQzOSAyMi45OTc0IDE0LjI4MzYgMjIuODYwMUMxNC40MjMyIDIyLjcyMDQgMTQuNTkwMSAyMi42NTA2IDE0Ljc4NDMgMjIuNjUwNkMxNC45NzYgMjIuNjUwNiAxNS4xNDE3IDIyLjcyMDQgMTUuMjgxNCAyMi44NjAxQzE1LjQyMzUgMjIuOTk3NCAxNS40OTQ1IDIzLjE2MzEgMTUuNDk0NSAyMy4zNTcyQzE1LjQ5NDUgMjMuNDg3NSAxNS40NjE0IDIzLjYwNyAxNS4zOTUxIDIzLjcxNTlDMTUuMzMxMSAyMy44MjI0IDE1LjI0NTkgMjMuOTA3NyAxNS4xMzk0IDIzLjk3MTZDMTUuMDMyOCAyNC4wMzU1IDE0LjkxNDUgMjQuMDY3NSAxNC43ODQzIDI0LjA2NzVaXCIsZmlsbDp0fSldfSkpfX0sNjQ0NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGV2cm9uRG93bkljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkNoZXZyb25Eb3duSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMjRcIixoZWlnaHQ6XCIyNFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwifSx7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLE9iamVjdC5hc3NpZ24oe2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNS4wNTI4MiA5Ljg4NzA3QzUuMzM2MTIgOS41ODQ4OSA1LjgxMDc1IDkuNTY5NTggNi4xMTI5MyA5Ljg1Mjg3TDEyIDE1LjM3MkwxNy44ODcgOS44NTI4N0MxOC4xODkyIDkuNTY5NTggMTguNjYzOCA5LjU4NDg5IDE4Ljk0NzEgOS44ODcwN0MxOS4yMzA0IDEwLjE4OTMgMTkuMjE1MSAxMC42NjM5IDE4LjkxMjkgMTAuOTQ3MkwxMi41MTI5IDE2Ljk0NzJDMTIuMjI0NCAxNy4yMTc2IDExLjc3NTUgMTcuMjE3NiAxMS40ODcgMTYuOTQ3Mkw1LjA4NzAyIDEwLjk0NzJDNC43ODQ4NCAxMC42NjM5IDQuNzY5NTIgMTAuMTg5MyA1LjA1MjgyIDkuODg3MDdaXCIsZmlsbDp0fSxuKSl9KSl9fSwyMTQ3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNoZXZyb25MZWZ0SWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQ2hldnJvbkxlZnRJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIyNFwiLGhlaWdodDpcIjI0XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xNC4xMTI3IDUuMDUyNzJDMTQuNDE0OSA1LjMzNjAxIDE0LjQzMDIgNS44MTA2NCAxNC4xNDY5IDYuMTEyODJMOC42Mjc4NCAxMS45OTk5TDE0LjE0NjkgMTcuODg2OUMxNC40MzAyIDE4LjE4OTEgMTQuNDE0OSAxOC42NjM3IDE0LjExMjcgMTguOTQ3QzEzLjgxMDYgMTkuMjMwMyAxMy4zMzU5IDE5LjIxNSAxMy4wNTI2IDE4LjkxMjhMNy4wNTI2NCAxMi41MTI4QzYuNzgyMTggMTIuMjI0MyA2Ljc4MjE4IDExLjc3NTQgNy4wNTI2NCAxMS40ODY5TDEzLjA1MjYgNS4wODY5MUMxMy4zMzU5IDQuNzg0NzMgMTMuODEwNiA0Ljc2OTQyIDE0LjExMjcgNS4wNTI3MlpcIixmaWxsOnR9LG4pKX0pKX19LDI0MDI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2hldnJvblJpZ2h0SWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQ2hldnJvblJpZ2h0SWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMjRcIixoZWlnaHQ6XCIyNFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwifSx7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLE9iamVjdC5hc3NpZ24oe2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNOS44ODc2MiA1LjA1MjU2QzEwLjE4OTggNC43NjkyNiAxMC42NjQ0IDQuNzg0NTcgMTAuOTQ3NyA1LjA4Njc2TDE2Ljk0NzcgMTEuNDg2OEMxNy4yMTgyIDExLjc3NTMgMTcuMjE4MiAxMi4yMjQyIDE2Ljk0NzcgMTIuNTEyN0wxMC45NDc3IDE4LjkxMjdDMTAuNjY0NCAxOS4yMTQ5IDEwLjE4OTggMTkuMjMwMiA5Ljg4NzYyIDE4Ljk0NjlDOS41ODU0MyAxOC42NjM2IDkuNTcwMTIgMTguMTg4OSA5Ljg1MzQyIDE3Ljg4NjhMMTUuMzcyNSAxMS45OTk3TDkuODUzNDIgNi4xMTI2N0M5LjU3MDEyIDUuODEwNDkgOS41ODU0NCA1LjMzNTg2IDkuODg3NjIgNS4wNTI1NlpcIixmaWxsOnR9LG4pKX0pKX19LDQ4MjU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2hldnJvblVwSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQ2hldnJvblVwSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMjRcIixoZWlnaHQ6XCIyNFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwifSx7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLE9iamVjdC5hc3NpZ24oe2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNS4wNTI4NSAxNC4xMTI5QzUuMzM2MTUgMTQuNDE1MSA1LjgxMDc4IDE0LjQzMDQgNi4xMTI5NiAxNC4xNDcxTDEyIDguNjI4MDJMMTcuODg3IDE0LjE0NzFDMTguMTg5MiAxNC40MzA0IDE4LjY2MzkgMTQuNDE1MSAxOC45NDcyIDE0LjExMjlDMTkuMjMwNSAxMy44MTA3IDE5LjIxNTEgMTMuMzM2MSAxOC45MTMgMTMuMDUyOEwxMi41MTMgNy4wNTI4MkMxMi4yMjQ1IDYuNzgyMzYgMTEuNzc1NSA2Ljc4MjM2IDExLjQ4NzEgNy4wNTI4Mkw1LjA4NzA1IDEzLjA1MjhDNC43ODQ4NyAxMy4zMzYxIDQuNzY5NTYgMTMuODEwNyA1LjA1Mjg1IDE0LjExMjlaXCIsZmlsbDp0fSxuKSl9KSl9fSwxMjgxOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkV4Y2xhbWF0aW9uQ2lyY2xlZEZpbGxlZEljb249dm9pZCAwO2NvbnN0IHI9big1ODkzKTt0LkV4Y2xhbWF0aW9uQ2lyY2xlZEZpbGxlZEljb249ZT0+KDAsci5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxN1wiLHZpZXdCb3g6XCIwIDAgMTYgMTdcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSx7Y2hpbGRyZW46WygwLHIuanN4KShcInBhdGhcIix7ZDpcIk03Ljk5OTg4IDE1LjMzMTdDMTEuNzcyOSAxNS4zMzE3IDE0LjgzMTYgMTIuMjczMSAxNC44MzE2IDguNTAwMDdDMTQuODMxNiA0LjcyNzA0IDExLjc3MjkgMS42Njg0IDcuOTk5ODggMS42Njg0QzQuMjI2ODYgMS42Njg0IDEuMTY4MjEgNC43MjcwNCAxLjE2ODIxIDguNTAwMDdDMS4xNjgyMSAxMi4yNzMxIDQuMjI2ODYgMTUuMzMxNyA3Ljk5OTg4IDE1LjMzMTdaXCIsZmlsbDpcInJlZFwifSksKDAsci5qc3gpKFwibWFza1wiLE9iamVjdC5hc3NpZ24oe2lkOlwicGF0aC0yLWluc2lkZS0xXzZfMjYyMDMzXCIsZmlsbDpcIndoaXRlXCJ9LHtjaGlsZHJlbjooMCxyLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNy45OTk5MyA0LjM3Mzg0QzcuNTc1MjUgNC4zNzM4NCA3LjIzNTY0IDQuNzI2NzYgNy4yNTE5NiA1LjE1MTEzTDcuNDIyOTYgOS41OTcwNkM3LjQzNDg5IDkuOTA3MDggNy42ODk2OCAxMC4xNTIzIDcuOTk5OTMgMTAuMTUyM0M4LjMxMDE5IDEwLjE1MjMgOC41NjQ5OCA5LjkwNzA4IDguNTc2OSA5LjU5NzA2TDguNzQ3OSA1LjE1MTEzQzguNzY0MjIgNC43MjY3NiA4LjQyNDYxIDQuMzczODQgNy45OTk5MyA0LjM3Mzg0Wk03Ljk5OTkzIDEyLjY0MDZDOC40NjAyMiAxMi42NDA2IDguODMzMzUgMTIuMjY3NSA4LjgzMzM1IDExLjgwNzJDOC44MzMzNSAxMS4zNDY5IDguNDYwMjIgMTAuOTczOCA3Ljk5OTkzIDEwLjk3MzhDNy41Mzk2NCAxMC45NzM4IDcuMTY2NSAxMS4zNDY5IDcuMTY2NSAxMS44MDcyQzcuMTY2NSAxMi4yNjc1IDcuNTM5NjQgMTIuNjQwNiA3Ljk5OTkzIDEyLjY0MDZaXCJ9KX0pKSwoMCxyLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNy45OTk5MyA0LjM3Mzg0QzcuNTc1MjUgNC4zNzM4NCA3LjIzNTY0IDQuNzI2NzYgNy4yNTE5NiA1LjE1MTEzTDcuNDIyOTYgOS41OTcwNkM3LjQzNDg5IDkuOTA3MDggNy42ODk2OCAxMC4xNTIzIDcuOTk5OTMgMTAuMTUyM0M4LjMxMDE5IDEwLjE1MjMgOC41NjQ5OCA5LjkwNzA4IDguNTc2OSA5LjU5NzA2TDguNzQ3OSA1LjE1MTEzQzguNzY0MjIgNC43MjY3NiA4LjQyNDYxIDQuMzczODQgNy45OTk5MyA0LjM3Mzg0Wk03Ljk5OTkzIDEyLjY0MDZDOC40NjAyMiAxMi42NDA2IDguODMzMzUgMTIuMjY3NSA4LjgzMzM1IDExLjgwNzJDOC44MzMzNSAxMS4zNDY5IDguNDYwMjIgMTAuOTczOCA3Ljk5OTkzIDEwLjk3MzhDNy41Mzk2NCAxMC45NzM4IDcuMTY2NSAxMS4zNDY5IDcuMTY2NSAxMS44MDcyQzcuMTY2NSAxMi4yNjc1IDcuNTM5NjQgMTIuNjQwNiA3Ljk5OTkzIDEyLjY0MDZaXCIsZmlsbDpcIndoaXRlXCJ9KSwoMCxyLmpzeCkoXCJwYXRoXCIse2Q6XCJNNy4yNTE5NiA1LjE1MTEzTDUuNjQ4NzQgNS4yMTI3OUw1LjY0ODc0IDUuMjEyNzlMNy4yNTE5NiA1LjE1MTEzWk03LjQyMjk2IDkuNTk3MDZMOS4wMjYxOCA5LjUzNTRMOS4wMjYxOCA5LjUzNTRMNy40MjI5NiA5LjU5NzA2Wk04LjU3NjkgOS41OTcwNkwxMC4xODAxIDkuNjU4NzJMOC41NzY5IDkuNTk3MDZaTTguNzQ3OSA1LjE1MTEzTDEwLjM1MTEgNS4yMTI3OUwxMC4zNTExIDUuMjEyNzlMOC43NDc5IDUuMTUxMTNaTTguODU1MTkgNS4wODk0N0M4Ljg3Mzg1IDUuNTc0NyA4LjQ4NTUzIDUuOTc4MjUgNy45OTk5MyA1Ljk3ODI1VjIuNzY5NDNDNi42NjQ5OCAyLjc2OTQzIDUuNTk3NDQgMy44Nzg4MiA1LjY0ODc0IDUuMjEyNzlMOC44NTUxOSA1LjA4OTQ3Wk05LjAyNjE4IDkuNTM1NEw4Ljg1NTE5IDUuMDg5NDdMNS42NDg3NCA1LjIxMjc5TDUuODE5NzQgOS42NTg3Mkw5LjAyNjE4IDkuNTM1NFpNNy45OTk5MyA4LjU0Nzg2QzguNTUxNzcgOC41NDc4NiA5LjAwNDk4IDguOTgzOTYgOS4wMjYxOCA5LjUzNTRMNS44MTk3NCA5LjY1ODcyQzUuODY0OCAxMC44MzAyIDYuODI3NTggMTEuNzU2NyA3Ljk5OTkzIDExLjc1NjdWOC41NDc4NlpNNi45NzM2OCA5LjUzNTRDNi45OTQ4OSA4Ljk4Mzk2IDcuNDQ4MDkgOC41NDc4NiA3Ljk5OTkzIDguNTQ3ODZWMTEuNzU2N0M5LjE3MjI4IDExLjc1NjcgMTAuMTM1MSAxMC44MzAyIDEwLjE4MDEgOS42NTg3Mkw2Ljk3MzY4IDkuNTM1NFpNNy4xNDQ2OCA1LjA4OTQ3TDYuOTczNjggOS41MzU0TDEwLjE4MDEgOS42NTg3MkwxMC4zNTExIDUuMjEyNzlMNy4xNDQ2OCA1LjA4OTQ3Wk03Ljk5OTkzIDUuOTc4MjVDNy41MTQzNCA1Ljk3ODI1IDcuMTI2MDIgNS41NzQ3IDcuMTQ0NjggNS4wODk0N0wxMC4zNTExIDUuMjEyNzlDMTAuNDAyNCAzLjg3ODgyIDkuMzM0ODkgMi43Njk0MyA3Ljk5OTkzIDIuNzY5NDNWNS45NzgyNVpNNy4yMjg5NSAxMS44MDcyQzcuMjI4OTUgMTEuMzgxNCA3LjU3NDEzIDExLjAzNjIgNy45OTk5MyAxMS4wMzYyVjE0LjI0NUM5LjM0NjMxIDE0LjI0NSAxMC40Mzc4IDEzLjE1MzYgMTAuNDM3OCAxMS44MDcySDcuMjI4OTVaTTcuOTk5OTMgMTIuNTc4MkM3LjU3NDEzIDEyLjU3ODIgNy4yMjg5NSAxMi4yMzMgNy4yMjg5NSAxMS44MDcySDEwLjQzNzhDMTAuNDM3OCAxMC40NjA4IDkuMzQ2MzEgOS4zNjkzNyA3Ljk5OTkzIDkuMzY5MzdWMTIuNTc4MlpNOC43NzA5MSAxMS44MDcyQzguNzcwOTEgMTIuMjMzIDguNDI1NzMgMTIuNTc4MiA3Ljk5OTkzIDEyLjU3ODJWOS4zNjkzN0M2LjY1MzU1IDkuMzY5MzcgNS41NjIxIDEwLjQ2MDggNS41NjIxIDExLjgwNzJIOC43NzA5MVpNNy45OTk5MyAxMS4wMzYyQzguNDI1NzMgMTEuMDM2MiA4Ljc3MDkxIDExLjM4MTQgOC43NzA5MSAxMS44MDcySDUuNTYyMUM1LjU2MjEgMTMuMTUzNiA2LjY1MzU1IDE0LjI0NSA3Ljk5OTkzIDE0LjI0NVYxMS4wMzYyWlwiLGZpbGw6XCJ3aGl0ZVwiLG1hc2s6XCJ1cmwoI3BhdGgtMi1pbnNpZGUtMV82XzI2MjAzMylcIn0pXX0pKX0sNzQyOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GaWxsZWRDaXJjbGVJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5GaWxsZWRDaXJjbGVJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcImdcIixPYmplY3QuYXNzaWduKHtpZDpcIi5TbG90XCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJjaXJjbGVcIix7aWQ6XCJFbGxpcHNlIDFcIixjeDpcIjhcIixjeTpcIjhcIixyOlwiOFwiLGZpbGw6dH0pfSkpfSkpfX0sNjc5NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GaWx0ZXJJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5GaWx0ZXJJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjEyXCIsaGVpZ2h0OlwiN1wiLHZpZXdCb3g6XCIwIDAgMTIgN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNNCA2LjVDNCA2LjM2NzM5IDQuMDUyNjggNi4yNDAyMSA0LjE0NjQ1IDYuMTQ2NDVDNC4yNDAyMSA2LjA1MjY4IDQuMzY3MzkgNiA0LjUgNkg3LjVDNy42MzI2MSA2IDcuNzU5NzkgNi4wNTI2OCA3Ljg1MzU1IDYuMTQ2NDVDNy45NDczMiA2LjI0MDIxIDggNi4zNjczOSA4IDYuNUM4IDYuNjMyNjEgNy45NDczMiA2Ljc1OTc5IDcuODUzNTUgNi44NTM1NUM3Ljc1OTc5IDYuOTQ3MzIgNy42MzI2MSA3IDcuNSA3SDQuNUM0LjM2NzM5IDcgNC4yNDAyMSA2Ljk0NzMyIDQuMTQ2NDUgNi44NTM1NUM0LjA1MjY4IDYuNzU5NzkgNCA2LjYzMjYxIDQgNi41Wk0yIDMuNUMyIDMuMzY3MzkgMi4wNTI2OCAzLjI0MDIxIDIuMTQ2NDUgMy4xNDY0NUMyLjI0MDIxIDMuMDUyNjggMi4zNjczOSAzIDIuNSAzSDkuNUM5LjYzMjYxIDMgOS43NTk3OSAzLjA1MjY4IDkuODUzNTUgMy4xNDY0NUM5Ljk0NzMyIDMuMjQwMjEgMTAgMy4zNjczOSAxMCAzLjVDMTAgMy42MzI2MSA5Ljk0NzMyIDMuNzU5NzkgOS44NTM1NSAzLjg1MzU1QzkuNzU5NzkgMy45NDczMiA5LjYzMjYxIDQgOS41IDRIMi41QzIuMzY3MzkgNCAyLjI0MDIxIDMuOTQ3MzIgMi4xNDY0NSAzLjg1MzU1QzIuMDUyNjggMy43NTk3OSAyIDMuNjMyNjEgMiAzLjVaTTAgMC41QzAgMC4zNjczOTIgMC4wNTI2Nzg1IDAuMjQwMjE1IDAuMTQ2NDQ3IDAuMTQ2NDQ3QzAuMjQwMjE1IDAuMDUyNjc4NSAwLjM2NzM5MiAwIDAuNSAwSDExLjVDMTEuNjMyNiAwIDExLjc1OTggMC4wNTI2Nzg1IDExLjg1MzYgMC4xNDY0NDdDMTEuOTQ3MyAwLjI0MDIxNSAxMiAwLjM2NzM5MiAxMiAwLjVDMTIgMC42MzI2MDggMTEuOTQ3MyAwLjc1OTc4NSAxMS44NTM2IDAuODUzNTUzQzExLjc1OTggMC45NDczMjEgMTEuNjMyNiAxIDExLjUgMUgwLjVDMC4zNjczOTIgMSAwLjI0MDIxNSAwLjk0NzMyMSAwLjE0NjQ0NyAwLjg1MzU1M0MwLjA1MjY3ODUgMC43NTk3ODUgMCAwLjYzMjYwOCAwIDAuNVpcIixmaWxsOnR9KX0pKX19LDExNzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GbG9wcHlEaXNrSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuRmxvcHB5RGlza0ljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTJcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTIgMTJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTEuODc1IDIuMTg3NUMxLjg3NSAyLjE1Mjk4IDEuOTAyOTggMi4xMjUgMS45Mzc1IDIuMTI1SDguMjMwMzlDOC4yNDY5NyAyLjEyNSA4LjI2Mjg3IDIuMTMxNTggOC4yNzQ1OSAyLjE0MzMxTDkuOTgxNjkgMy44NTA0MUM5Ljk5MzQxIDMuODYyMTMgMTAgMy44NzgwMyAxMCAzLjg5NDYxVjEwLjE4NzVDMTAgMTAuMjIyIDkuOTcyMDIgMTAuMjUgOS45Mzc1IDEwLjI1SDEuOTM3NUMxLjkwMjk4IDEwLjI1IDEuODc1IDEwLjIyMiAxLjg3NSAxMC4xODc1VjIuMTg3NVpNMS45Mzc1IDEuMjVDMS40MTk3MyAxLjI1IDEgMS42Njk3MyAxIDIuMTg3NVYxMC4xODc1QzEgMTAuNzA1MyAxLjQxOTczIDExLjEyNSAxLjkzNzUgMTEuMTI1SDkuOTM3NUMxMC40NTUzIDExLjEyNSAxMC44NzUgMTAuNzA1MyAxMC44NzUgMTAuMTg3NVYzLjg5NDYxQzEwLjg3NSAzLjY0NTk3IDEwLjc3NjIgMy40MDc1MSAxMC42MDA0IDMuMjMxNjlMOC44OTMzMSAxLjUyNDU5QzguNzE3NDkgMS4zNDg3NyA4LjQ3OTAzIDEuMjUgOC4yMzAzOSAxLjI1SDEuOTM3NVpNMi44NDkyNCAzLjQwODFDMi44NDkyNCAzLjIzNzU0IDIuOTg3NTEgMy4wOTkyNyAzLjE1ODA3IDMuMDk5MjdINy40ODE2QzcuNjUyMTUgMy4wOTkyNyA3Ljc5MDQyIDMuMjM3NTQgNy43OTA0MiAzLjQwODFWNC42NDMzOUM3Ljc5MDQyIDQuODEzOTUgNy42NTIxNSA0Ljk1MjIxIDcuNDgxNiA0Ljk1MjIxSDMuMTU4MDdDMi45ODc1MSA0Ljk1MjIxIDIuODQ5MjQgNC44MTM5NSAyLjg0OTI0IDQuNjQzMzlWMy40MDgxWk00LjUzNjggNi42Mzk3N0M0LjgyNjM4IDYuMzUwMTkgNS4yMTkxMyA2LjE4NzUxIDUuNjI4NjUgNi4xODc1MUM2LjAzODE4IDYuMTg3NTEgNi40MzA5MyA2LjM1MDE5IDYuNzIwNTEgNi42Mzk3N0M3LjAxMDA5IDYuOTI5MzUgNy4xNzI3NyA3LjMyMjEgNy4xNzI3NyA3LjczMTYzQzcuMTcyNzcgOC4xNDExNSA3LjAxMDA5IDguNTMzOSA2LjcyMDUxIDguODIzNDhDNi40MzA5MyA5LjExMzA2IDYuMDM4MTggOS4yNzU3NCA1LjYyODY1IDkuMjc1NzRDNS4yMTkxMyA5LjI3NTc0IDQuODI2MzggOS4xMTMwNiA0LjUzNjggOC44MjM0OEM0LjI0NzIyIDguNTMzOSA0LjA4NDU0IDguMTQxMTUgNC4wODQ1NCA3LjczMTYzQzQuMDg0NTQgNy4zMjIxIDQuMjQ3MjIgNi45MjkzNSA0LjUzNjggNi42Mzk3N1pcIixmaWxsOnQscm9sZTpcImltZ1wifSl9KSl9fSw1Mjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRnJhZ21lbnRzSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuRnJhZ21lbnRzSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIyMFwiLGhlaWdodDpcIjIwXCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNOC44MDAwMSA0LjgwMDAySDQuODAwMDFDMy45MTc2MSA0LjgwMDAyIDMuMjAwMDEgNS41MTc2MiAzLjIwMDAxIDYuNDAwMDJWMTAuNEMzLjIwMDAxIDExLjI4MjQgMy45MTc2MSAxMiA0LjgwMDAxIDEySDguODAwMDFDOS42ODI0MSAxMiAxMC40IDExLjI4MjQgMTAuNCAxMC40VjYuNDAwMDJDMTAuNCA1LjUxNzYyIDkuNjgyNDEgNC44MDAwMiA4LjgwMDAxIDQuODAwMDJaTTIwLjM1OTIgNi40Njg4MkwxNy41MzEyIDMuNjQwMDJDMTYuOTA4IDMuMDE2MDIgMTUuODkyIDMuMDE2MDIgMTUuMjY4OCAzLjY0MDAyTDEyLjQ0MDggNi40Njg4MkMxMS44MTY4IDcuMDkyODIgMTEuODE2OCA4LjEwNzIyIDEyLjQ0MDggOC43MzEyMkwxNS4yNjg4IDExLjU2QzE1LjU4MDggMTEuODcyIDE1Ljk5MDQgMTIuMDI4IDE2LjQgMTIuMDI4QzE2LjgwOTYgMTIuMDI4IDE3LjIxOTIgMTEuODcyIDE3LjUzMTIgMTEuNTZMMjAuMzU5MiA4LjczMTIyQzIwLjk4MzIgOC4xMDcyMiAyMC45ODMyIDcuMDkyODIgMjAuMzU5MiA2LjQ2ODgyWk04LjgwMDAxIDEzLjZINC44MDAwMUMzLjkxNzYxIDEzLjYgMy4yMDAwMSAxNC4zMTc2IDMuMjAwMDEgMTUuMlYxOS4yQzMuMjAwMDEgMjAuMDgyNCAzLjkxNzYxIDIwLjggNC44MDAwMSAyMC44SDguODAwMDFDOS42ODI0MSAyMC44IDEwLjQgMjAuMDgyNCAxMC40IDE5LjJWMTUuMkMxMC40IDE0LjMxNzYgOS42ODI0MSAxMy42IDguODAwMDEgMTMuNlpNMTcuNiAxMy42SDEzLjZDMTIuNzE3NiAxMy42IDEyIDE0LjMxNzYgMTIgMTUuMlYxOS4yQzEyIDIwLjA4MjQgMTIuNzE3NiAyMC44IDEzLjYgMjAuOEgxNy42QzE4LjQ4MjQgMjAuOCAxOS4yIDIwLjA4MjQgMTkuMiAxOS4yVjE1LjJDMTkuMiAxNC4zMTc2IDE4LjQ4MjQgMTMuNiAxNy42IDEzLjZaXCIsZmlsbDp0fSl9KSl9fSw3Nzg4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxpZ2h0QnVsYkZpbGxlZEljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkxpZ2h0QnVsYkZpbGxlZEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4cykoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjEwXCIsaGVpZ2h0OlwiMTJcIix2aWV3Qm94OlwiMCAwIDEwIDEyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOlsoMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMS44MyAxLjMxMDA4QzIuMjQ0MDkgMC44OTE2NjcgMi43Mzc2OCAwLjU2MDMwNyAzLjI4MTc0IDAuMzM1NTA0QzMuODI1ODEgMC4xMTA3MDEgNC40MDkzNCAtMC4wMDMwMDMzMyA0Ljk5OCAwLjAwMTA4MjkxQzYuMTg2MjggLTAuMDAzMTA3ODUgNy4zMjkwNSAwLjQ1NzczMyA4LjE4MiAxLjI4NTA4QzguNTk4ODEgMS42ODcxOSA4LjkzMDQ2IDIuMTY5MDMgOS4xNTcyMyAyLjcwMTk0QzkuMzg0IDMuMjM0ODUgOS41MDEyNSAzLjgwNzkzIDkuNTAyIDQuMzg3MDhDOS41MDIgNS42ODAwOCA4LjkxNyA2LjgzMDA4IDcuODgzIDcuODI1MDhMNy41NzcgOS4wMDAwOEgyLjQ2NkwyLjIzNiA4LjAzNzA4QzEuMTU0IDYuOTA3MDggMC41NTYgNS44MTkwOCAwLjUgNC41ODIwOFY0LjU0NDA4QzAuNTQgMy4yNDgwOCAxLjAzMyAyLjEyMTA4IDEuODMxIDEuMzExMDhMMS44MyAxLjMxMDA4WlwiLGZpbGw6dH0pLCgwLG8uanN4KShcInBhdGhcIix7ZDpcIk0yLjcwNDEgMTBMMi45MzcxIDEwLjk3OEwyLjk0NTEgMTFDMy4wNDUxIDExLjI5NyAzLjIzNzEgMTEuNTQ0IDMuNDc5MSAxMS43MTdDMy43MzAxIDExLjg5NyA0LjAzNzEgMTEuOTk5IDQuMzYxMSAxMS45OTlINC4zNjMxTDUuNzQ2MSAxMS45OTVMNS43NjcxIDExLjk5M0M2LjA3NTg3IDExLjk2NjkgNi4zNjkxMyAxMS44NDY1IDYuNjA3MSAxMS42NDhDNi44MzgxIDExLjQ1NCA3LjAxMzEgMTEuMTg4IDcuMDg3MSAxMC44NzRMNy4zMTYxIDEwSDIuNzA0MVYxMFpcIixmaWxsOnR9KV19KSl9fSwzNzAzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxpZ2h0QnVsYk91dGxpbmVkSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuTGlnaHRCdWxiT3V0bGluZWRJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjEwXCIsaGVpZ2h0OlwiMTJcIix2aWV3Qm94OlwiMCAwIDEwIDEyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk00Ljk5NzY2IDAuMDAxMDAxNDlDMy43Njg2NiAwLjAwMTAwMTQ5IDIuNjQ3NjYgMC40ODIwMDIgMS44Mjk2NiAxLjMxMUMxLjAzMTY2IDIuMTIxIDAuNTM5NjU3IDMuMjQ4IDAuNDk5NjU3IDQuNTQ0TDAuNDk4NjU3IDQuNTYzVjQuNTgzQzAuNTU1NjU3IDUuODE5IDEuMTUzNjYgNi45MDcgMi4yMzU2NiA4LjAzN0wyLjkzNzY2IDEwLjk3OEwyLjk0NDY2IDExQzMuMDQ0NjYgMTEuMjk3IDMuMjM2NjYgMTEuNTQ0IDMuNDc4NjYgMTEuNzE3QzMuNzI5NjYgMTEuODk3IDQuMDM2NjYgMTEuOTk5IDQuMzYxNjYgMTEuOTk5TDUuNzQ1NjYgMTEuOTk1TDUuNzY2NjYgMTEuOTkzQzYuMDc1NDIgMTEuOTY2OSA2LjM2ODY5IDExLjg0NjUgNi42MDY2NiAxMS42NDhDNi44Mzc2NiAxMS40NTQgNy4wMTI2NiAxMS4xODggNy4wODY2NiAxMC44NzRMNy44ODI2NiA3LjgyNEM4LjkxNjY2IDYuODMgOS41MDA2NiA1LjY4IDkuNTAwNjYgNC4zODdDOS40OTk5MSAzLjgwNzg1IDkuMzgyNjYgMy4yMzQ3NyA5LjE1NTg5IDIuNzAxODZDOC45MjkxMiAyLjE2ODk1IDguNTk3NDYgMS42ODcxMSA4LjE4MDY2IDEuMjg1QzcuMzI3OTYgMC40NTc4OTQgNi4xODU1OSAtMC4wMDI5Mjc4OCA0Ljk5NzY2IDAuMDAxMDAxNDlaTTIuNTQyNjYgMi4wMTNDMi44NjM0NCAxLjY4ODcxIDMuMjQ1OTYgMS40MzE5OCAzLjY2NzYyIDEuMjU4QzQuMDg5MjggMS4wODQwMSA0LjU0MTUzIDAuOTk2MjgzIDQuOTk3NjYgMUM1LjkyNTE0IDAuOTk1Nzg0IDYuODE3NDQgMS4zNTQ3MSA3LjQ4MzY2IDJDNy44MDQ3MSAyLjMwOTA0IDguMDYwMjMgMi42Nzk1NyA4LjIzNDk2IDMuMDg5NTFDOC40MDk2OSAzLjQ5OTQ1IDguNTAwMDUgMy45NDAzOCA4LjUwMDY2IDQuMzg2QzguNTAwNjYgNS4zNzcgOC4wNDc2NiA2LjMxMiA3LjA5NjY2IDcuMTkxTDYuOTg4NjYgNy4yOTFMNi41NDI2NiA5SDMuNDkzNjZMMy4xNDQ2NiA3LjUzNkwzLjA0NzY2IDcuNDM2QzEuOTk5NjYgNi4zNzIgMS41NDc2NiA1LjQ4IDEuNDk4NjYgNC41NTdDMS41MzY2NiAzLjUwOSAxLjkzMjY2IDIuNjMyIDIuNTQyNjYgMi4wMTRWMi4wMTNaTTMuNzMyNjYgMTBINi4yODI2Nkw2LjExNzY2IDEwLjYyN0w2LjExNDY2IDEwLjY0QzYuMDkyMTEgMTAuNzM0MiA2LjAzOTQ0IDEwLjgxODUgNS45NjQ2NiAxMC44OEM1Ljg4ODczIDEwLjk0MzUgNS43OTU5NSAxMC45ODM0IDUuNjk3NjYgMTAuOTk1TDQuMzYwNjYgMTFDNC4yNTMyMSAxMS4wMDAzIDQuMTQ4MzMgMTAuOTY3MSA0LjA2MDY2IDEwLjkwNUMzLjk4NzcgMTAuODUzNiAzLjkzMTM5IDEwLjc4MiAzLjg5ODY2IDEwLjY5OUwzLjczMTY2IDEwSDMuNzMyNjZaXCIsZmlsbDp0fSl9KSl9fSw4MzExOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxvY2tlZENsb3NlZEZpbGxlZEljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkxvY2tlZENsb3NlZEZpbGxlZEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTUuMDAwMDMgNC42MzYyM0M1LjAwMDAzIDMuNzYwNTIgNS4yNDIyMiAzLjEwNTYxIDUuNjQzMjcgMi42NzM3OEM2LjAzOTM4IDIuMjQ3MjcgNi42NDU4NSAxLjk3ODUyIDcuNTAxNDMgMS45Nzg1MkM4LjM1NzQ4IDEuOTc4NTIgOC45NjMwOSAyLjI0NjczIDkuMzU4MjcgMi42NzIzQzkuNzU4NDEgMy4xMDMyMSAxMCAzLjc1NzI5IDEwIDQuNjMzNDZWNi41MDAyMUgxMVY0LjYzMzQ2QzExIDMuNTc5MTcgMTAuNzA3NiAyLjY1NTc4IDEwLjA5MTEgMS45OTE4M0M5LjQ2OTU1IDEuMzIyNTQgOC41NzU4NiAwLjk3ODUxNiA3LjUwMTQzIDAuOTc4NTE2QzYuNDI2NzggMC45Nzg1MTYgNS41MzI1NSAxLjMyMzUgNC45MTA1MiAxLjk5MzI4QzQuMjkzNDIgMi42NTc3NSA0LjAwMDAzIDMuNTgxNjkgNC4wMDAwMyA0LjYzNjIzVjYuNTAwMjFINS4wMDAwM1Y0LjYzNjIzWk0zIDYuNTAwMjFDMi43MjM4NiA2LjUwMDIxIDIuNSA2LjcyNDA3IDIuNSA3LjAwMDIxVjEzLjAwMDJDMi41IDEzLjI3NjQgMi43MjM4NiAxMy41MDAyIDMgMTMuNTAwMkgxMkMxMi4yNzYxIDEzLjUwMDIgMTIuNSAxMy4yNzY0IDEyLjUgMTMuMDAwMlY3LjAwMDIxQzEyLjUgNi43MjQwNyAxMi4yNzYxIDYuNTAwMjEgMTIgNi41MDAyMUgzWlwiLGZpbGw6dCxyb2xlOlwiaW1nXCJ9KX0pKX19LDU3Mjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTWluaW1pemVJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5NaW5pbWl6ZUljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTIuMTY2MDIgMTJDMi4xNjYwMiAxMS43MjM5IDIuMzg5ODcgMTEuNSAyLjY2NjAyIDExLjVIMTMuMzMyN0MxMy42MDg4IDExLjUgMTMuODMyNyAxMS43MjM5IDEzLjgzMjcgMTJDMTMuODMyNyAxMi4yNzYxIDEzLjYwODggMTIuNSAxMy4zMzI3IDEyLjVIMi42NjYwMkMyLjM4OTg3IDEyLjUgMi4xNjYwMiAxMi4yNzYxIDIuMTY2MDIgMTJaXCIsZmlsbDp0LHJvbGU6XCJpbWdcIn0pfSkpfX0sMzc5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk9wZW5GaW5JY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5PcGVuRmluSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMTQuMjY4NSA1LjczOTE2QzE0LjE3ODUgNS42NDkwNiAxNC4wODE3IDUuNTY1OTIgMTMuOTc5IDUuNDkwNDdMMTMuOTQxMiA1LjQ2NDI5QzEzLjkxOTYgNS40NDkxOSAxMy44OTg0IDUuNDMzNTggMTMuODc2MyA1LjQxODk4QzEzLjg1NDEgNS40MDQzOCAxMy44Mjg0IDUuMzg4NzggMTMuODA0OCA1LjM3NDE4TDEzLjc3MTUgNS4zNTM1NEMxMy43NDE4IDUuMzM1OTIgMTMuNzExNiA1LjMxOTMgMTMuNjgxNCA1LjMwMzE5TDEzLjY2MzggNS4yOTM2M0MxMy4zMDY1IDUuMTA2MTggMTIuOTA5MSA1LjAwODA3IDEyLjUwNTcgNS4wMDc2OEMxMS44NDE3IDUuMDA3MTUgMTEuMjA1MiA0Ljc0MjkxIDEwLjczNjIgNC4yNzMxQzEwLjI2NzEgMy44MDMzIDEwLjAwNCAzLjE2NjQyIDEwLjAwNDYgMi41MDI2MkMxMC4wMDY1IDEuNDkyMjIgOS4zOTkzMyAwLjU4MDIxOSA4LjQ2NjM0IDAuMTkxOTExQzcuNTMzMzUgLTAuMTk2Mzk3IDYuNDU4MjYgMC4wMTU0NjYgNS43NDI0NCAwLjcyODcwMUM1LjAyNjYxIDEuNDQxOTQgNC44MTEwMyAyLjUxNjA3IDUuMTk2MjEgMy40NTAyQzUuNTgxNCA0LjM4NDMzIDYuNDkxNSA0Ljk5NDQ3IDcuNTAyMSA0Ljk5NjFDOC4xNjYwMyA0Ljk5NjY0IDguODAyNTYgNS4yNjA4OCA5LjI3MTYxIDUuNzMwNjhDOS43NDA2NiA2LjIwMDQ5IDEwLjAwMzggNi44MzczNiAxMC4wMDMxIDcuNTAxMTdDMTAuMDAyNiA4LjE2NDk3IDkuNzM4MyA4LjgwMTM3IDkuMjY4NCA5LjI3MDMyQzguNzk4NSA5LjczOTI4IDguMTYxNSAxMC4wMDI0IDcuNDk3NTYgMTAuMDAxN0M2LjgzNDEzIDEwLjAwMjIgNi4xOTc3MiA5LjczODk0IDUuNzI4NjUgOS4yNjk4N0M1LjI1OTU4IDguODAwOCA0Ljk5NjM2IDguMTY0NDcgNC45OTcwMyA3LjUwMTE3QzQuOTk3MDMgNi4xMjE1NSAzLjg3ODQxIDUuMDAzMTUgMi40OTg1MiA1LjAwMzE1QzEuMTE4NjIgNS4wMDMxNSAwIDYuMTIxNTUgMCA3LjUwMTE3QzAgOC44ODA3OCAxLjExODYyIDkuOTk5MTggMi40OTg1MiA5Ljk5OTE4QzMuODc4NDEgOS45OTkxOCA0Ljk5NzAzIDExLjExNzYgNC45OTcwMyAxMi40OTcyQzQuOTk3MDMgMTMuODc5NSA2LjExNzggMTUgNy41MDAzMyAxNUM4Ljg4Mjg3IDE1IDEwLjAwMzYgMTMuODc5NSAxMC4wMDM2IDEyLjQ5NzJDMTAuMDAzNiAxMS4xMTc2IDExLjEyMjMgOS45OTkxOCAxMi41MDIxIDkuOTk5MThDMTIuOTQ4MiA5Ljk5OTQ4IDEzLjM4NjIgOS44ODAyMiAxMy43NzA1IDkuNjUzODNDMTMuODAzOCA5LjYzNDIgMTMuODM2NSA5LjYxMzU2IDEzLjg3MTIgOS41OTI0MUwxMy44NzgzIDkuNTg3ODhDMTMuOTA4NSA5LjU2Nzc1IDEzLjkzODcgOS41NDY2IDEzLjk2NzkgOS41MjU0NkwxMy45ODEgOS41MTY0QzE0LjAwNzIgOS40OTcyNyAxNC4wMzE0IDkuNDc2NjIgMTQuMDU5MSA5LjQ1NTk4TDE0LjA4MTIgOS40Mzg4N0MxNC4xMDU0IDkuNDE5MjMgMTQuMTI4NiA5LjM5ODU5IDE0LjE1MjIgOS4zNzc5NUwxNC4xNzc5IDkuMzU1OEMxNC4yMDgxIDkuMzI4NjIgMTQuMjM3OCA5LjMwMDQyIDE0LjI2NyA5LjI3MTIzTDE0LjI3MTYgOS4yNjcyQzE0LjM3OTQgOS4xNTg4NyAxNC40NzcyIDkuMDQwOTEgMTQuNTYzNiA4LjkxNDhDMTQuNTgyNCA4Ljg4NzYxIDE0LjYwMDUgOC44NjAwOSAxNC42MTggOC44MzIyM0MxNS4yMzcgNy44NDU4NCAxNS4wOTIgNi41NjI2NyAxNC4yNjg1IDUuNzM5MTZaXCIsZmlsbDp0LHJvbGU6XCJpbWdcIn0pfSkpfX0sOTk0MDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5QYWdlSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuUGFnZUljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTRcIixoZWlnaHQ6XCIxOFwiLHZpZXdCb3g6XCIwIDAgMTQgMThcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTExLjk5OTcgMC42NjY5OTJIMS45OTk2N0MxLjA4MDUxIDAuNjY2OTkyIDAuMzMzMDA4IDEuNDE0NDkgMC4zMzMwMDggMi4zMzM2NlYxNS42NjdDMC4zMzMwMDggMTYuNTg2MiAxLjA4MDUxIDE3LjMzMzcgMS45OTk2NyAxNy4zMzM3SDExLjk5OTdDMTIuOTE4OCAxNy4zMzM3IDEzLjY2NjMgMTYuNTg2MiAxMy42NjYzIDE1LjY2N1YyLjMzMzY2QzEzLjY2NjMgMS40MTQ0OSAxMi45MTg4IDAuNjY2OTkyIDExLjk5OTcgMC42NjY5OTJaTTcuNDE2MzQgOC4xNjY5OUgzLjI0OTY3QzMuMDE5NjcgOC4xNjY5OSAyLjgzMzAxIDcuOTgwMzMgMi44MzMwMSA3Ljc1MDMzVjYuOTE2OTlDMi44MzMwMSA2LjY4Njk5IDMuMDE5NjcgNi41MDAzMyAzLjI0OTY3IDYuNTAwMzNINy40MTYzNEM3LjY0NjM0IDYuNTAwMzMgNy44MzMwMSA2LjY4Njk5IDcuODMzMDEgNi45MTY5OVY3Ljc1MDMzQzcuODMzMDEgNy45ODAzMyA3LjY0NjM0IDguMTY2OTkgNy40MTYzNCA4LjE2Njk5Wk0xMC43NDk3IDQuODMzNjZIMy4yNDk2N0MzLjAxOTY3IDQuODMzNjYgMi44MzMwMSA0LjY0Njk5IDIuODMzMDEgNC40MTY5OVYzLjU4MzY2QzIuODMzMDEgMy4zNTM2NiAzLjAxOTY3IDMuMTY2OTkgMy4yNDk2NyAzLjE2Njk5SDEwLjc0OTdDMTAuOTc5NyAzLjE2Njk5IDExLjE2NjMgMy4zNTM2NiAxMS4xNjYzIDMuNTgzNjZWNC40MTY5OUMxMS4xNjYzIDQuNjQ2OTkgMTAuOTc5NyA0LjgzMzY2IDEwLjc0OTcgNC44MzM2NlpcIixmaWxsOnR9KX0pKX19LDEwMDI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUmVkRG90SWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuUmVkRG90SWNvbj1lPT57dmFyIHQ9cihlLFtdKTtyZXR1cm4oMCxvLmpzeHMpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCI4XCIsaGVpZ2h0OlwiOFwiLHZpZXdCb3g6XCIwIDAgOCA4XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LHQse2NoaWxkcmVuOlsoMCxvLmpzeCkoXCJyZWN0XCIse3g6XCIwLjVcIix5OlwiMC41XCIsd2lkdGg6XCI3XCIsaGVpZ2h0OlwiN1wiLHJ4OlwiMy41XCIsZmlsbDpcIiNDMjEzMTNcIn0pLCgwLG8uanN4KShcInJlY3RcIix7eDpcIjAuNVwiLHk6XCIwLjVcIix3aWR0aDpcIjdcIixoZWlnaHQ6XCI3XCIscng6XCIzLjVcIixzdHJva2U6XCIjRjFGMEYxXCJ9KV19KSl9fSwxNTM5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlN0YWNrSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuU3RhY2tJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjIwXCIsaGVpZ2h0OlwiMjBcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xNC4yMTc4IDMuMDAwOTJDMTQuMTUwNCAzLjAwNTE0IDE0LjA4MzkgMy4wMTg0NCAxNC4wMiAzLjA0MDQ3TDMuNTE5ODYgNi40Mjg3QzMuMzY4NjQgNi40Nzc0MyAzLjIzNjgxIDYuNTcyOTEgMy4xNDMzNSA2LjcwMTM4QzMuMDQ5ODkgNi44Mjk4NiAyLjk5OTY0IDYuOTg0NjkgMi45OTk4MyA3LjE0MzU2VjE1Ljc1NEMyLjk5ODQzIDE1Ljg1MzQgMy4wMTY3OSAxNS45NTIxIDMuMDUzODUgMTYuMDQ0M0MzLjA5MDkxIDE2LjEzNjYgMy4xNDU5MyAxNi4yMjA1IDMuMjE1NzEgMTYuMjkxM0MzLjI4NTUgMTYuMzYyMSAzLjM2ODY1IDE2LjQxODMgMy40NjAzNSAxNi40NTY2QzMuNTUyMDQgMTYuNDk1IDMuNjUwNDUgMTYuNTE0NyAzLjc0OTg0IDE2LjUxNDdDMy44NDkyNCAxNi41MTQ3IDMuOTQ3NjQgMTYuNDk1IDQuMDM5MzQgMTYuNDU2NkM0LjEzMTAzIDE2LjQxODMgNC4yMTQxOSAxNi4zNjIxIDQuMjgzOTcgMTYuMjkxM0M0LjM1Mzc1IDE2LjIyMDUgNC40MDg3OCAxNi4xMzY2IDQuNDQ1ODQgMTYuMDQ0M0M0LjQ4MjkgMTUuOTUyMSA0LjUwMTI2IDE1Ljg1MzQgNC40OTk4NSAxNS43NTRWNy42ODg0OUwxNC40OCA0LjQ2NzI1QzE0LjY0OSA0LjQxNTI5IDE0Ljc5NDIgNC4zMDUzMiAxNC44OSA0LjE1Njc0QzE0Ljk4NTggNC4wMDgxNSAxNS4wMjYgMy44MzA1IDE1LjAwMzYgMy42NTUxNEMxNC45ODEyIDMuNDc5NzcgMTQuODk3NSAzLjMxNzk3IDE0Ljc2NzQgMy4xOTgyN0MxNC42MzczIDMuMDc4NTcgMTQuNDY5MSAzLjAwODY4IDE0LjI5MjUgMy4wMDA5MkMxNC4yNjc2IDIuOTk5NjcgMTQuMjQyNyAyLjk5OTY3IDE0LjIxNzggMy4wMDA5MlpNMTcuMjE3OCA1LjI1MDk1QzE3LjE1MDQgNS4yNTUxNyAxNy4wODM5IDUuMjY4NDggMTcuMDIwMSA1LjI5MDVMNi41MTk5IDguNjc4NzRDNi4zNjg2OSA4LjcyNzQ2IDYuMjM2ODUgOC44MjI5NCA2LjE0MzM5IDguOTUxNDJDNi4wNDk5MyA5LjA3OTg5IDUuOTk5NjggOS4yMzQ3MiA1Ljk5OTg4IDkuMzkzNTlWMTguMDA0MUM1Ljk5ODQ3IDE4LjEwMzUgNi4wMTY4MyAxOC4yMDIxIDYuMDUzODkgMTguMjk0NEM2LjA5MDk1IDE4LjM4NjYgNi4xNDU5NyAxOC40NzA1IDYuMjE1NzYgMTguNTQxM0M2LjI4NTU0IDE4LjYxMjEgNi4zNjg3IDE4LjY2ODMgNi40NjAzOSAxOC43MDY2QzYuNTUyMDkgMTguNzQ1IDYuNjUwNDkgMTguNzY0OCA2Ljc0OTg5IDE4Ljc2NDhDNi44NDkyOCAxOC43NjQ4IDYuOTQ3NjkgMTguNzQ1IDcuMDM5MzggMTguNzA2NkM3LjEzMTA4IDE4LjY2ODMgNy4yMTQyMyAxOC42MTIxIDcuMjg0MDIgMTguNTQxM0M3LjM1MzggMTguNDcwNSA3LjQwODgyIDE4LjM4NjYgNy40NDU4OCAxOC4yOTQ0QzcuNDgyOTQgMTguMjAyMSA3LjUwMTMgMTguMTAzNSA3LjQ5OTkgMTguMDA0MVY5LjkzODUyTDE3LjQ4IDYuNzE3MjhDMTcuNjQ5IDYuNjY1MzMgMTcuNzk0MiA2LjU1NTM1IDE3Ljg5IDYuNDA2NzdDMTcuOTg1OCA2LjI1ODE4IDE4LjAyNjEgNi4wODA1NCAxOC4wMDM2IDUuOTA1MTdDMTcuOTgxMiA1LjcyOTgxIDE3Ljg5NzYgNS41NjggMTcuNzY3NSA1LjQ0ODNDMTcuNjM3NCA1LjMyODYxIDE3LjQ2OTEgNS4yNTg3MSAxNy4yOTI1IDUuMjUwOTVDMTcuMjY3NiA1LjI0OTcxIDE3LjI0MjcgNS4yNDk3MSAxNy4yMTc4IDUuMjUwOTVaTTIwLjE5MyA3LjUwNTM4QzIwLjEzNDQgNy41MDk4MiAyMC4wNzU4IDcuNTIxOTcgMjAuMDE4NiA3LjU0MDUzTDkuNTE4NDggMTAuOTI4OEM5LjIwOTQ4IDExLjAyOTMgOC45OTk5MiAxMS4zMTgxIDguOTk5OTIgMTEuNjQzNlYyMC4yNTQxQzguOTk5OTIgMjAuNDk3OSA5LjExODI5IDIwLjcyNjIgOS4zMTc4IDIwLjg2NjRDOS40NDYwNSAyMC45NTcyIDkuNTk2OTMgMjEuMDA0MSA5Ljc0OTkzIDIxLjAwNDFDOS44MzQ2OCAyMS4wMDQxIDkuOTIwMTQgMjAuOTg5NCAxMC4wMDE5IDIwLjk2MDJMMjAuNTAyIDE3LjIxMDFDMjAuODAwNiAxNy4xMDQ0IDIxLjAwMDEgMTYuODIxMyAyMS4wMDAxIDE2LjUwNFY4LjI1MzkyQzIxLjAwMDEgOC4wMTQ2NyAyMC44ODUzIDcuNzg5MjIgMjAuNjkxIDcuNjQ3NDdDMjAuNTQ1OSA3LjU0MTcyIDIwLjM2ODggNy40OTIwNSAyMC4xOTMgNy41MDUzOFpcIixmaWxsOnR9KX0pKX19LDQwMjA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU3RvcmVmcm9udEljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LlN0b3JlZnJvbnRJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjIwXCIsaGVpZ2h0OlwiMjBcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk01IDNDNC40NDggMyA0IDMuNDQ4IDQgNEM0IDQuNTUyIDQuNDQ4IDUgNSA1SDE5QzE5LjU1MiA1IDIwIDQuNTUyIDIwIDRDMjAgMy40NDggMTkuNTUyIDMgMTkgM0g1Wk00LjYxNzE5IDdDNC4yMzgxOSA3IDMuODkzNjEgNy4yMTM3MyAzLjcyNDYxIDcuNTUyNzNMMi4xMDU0NyAxMC43ODkxQzIuMDM1NDcgMTAuOTI4MSAyIDExLjA4MTMgMiAxMS4yMzYzVjEyQzIgMTIuNTUyIDIuNDQ4IDEzIDMgMTNWMTlDMyAyMC4xMDUgMy44OTUgMjEgNSAyMUgxOUMyMC4xMDUgMjEgMjEgMjAuMTA1IDIxIDE5VjEzQzIxLjU1MiAxMyAyMiAxMi41NTIgMjIgMTJWMTEuMjM2M0MyMiAxMS4wODEzIDIxLjk2NDUgMTAuOTI4MSAyMS44OTQ1IDEwLjc4OTFMMjAuMjc1NCA3LjU1MjczQzIwLjEwNjQgNy4yMTM3MyAxOS43NjE4IDcgMTkuMzgyOCA3SDQuNjE3MTlaTTYgMTNIMThDMTguNTUyIDEzIDE5IDEzLjQ0OCAxOSAxNFYxOEMxOSAxOC41NTIgMTguNTUyIDE5IDE4IDE5SDZDNS40NDggMTkgNSAxOC41NTIgNSAxOFYxNEM1IDEzLjQ0OCA1LjQ0OCAxMyA2IDEzWlwiLGZpbGw6dH0pfSkpfX0sNzkzNzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Xb3Jrc3BhY2VJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5Xb3Jrc3BhY2VJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeHMpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHJvbGU6XCJpbWdcIn0sbix7Y2hpbGRyZW46WygwLG8uanN4KShcInBhdGhcIix7ZDpcIk02LjczODExIDIuODEyNUgzLjUzMTM3QzMuMTM0NDIgMi44MTI1IDIuODEyNjIgMy4xMzQzIDIuODEyNjIgMy41MzEyNVY3LjUxMjA0QzIuODEyNjIgNy45MDkgMy4xMzQ0MiA4LjIzMDc5IDMuNTMxMzcgOC4yMzA3OUg2LjczODExQzcuMTM1MDYgOC4yMzA3OSA3LjQ1Njg2IDcuOTA5IDcuNDU2ODYgNy41MTIwNFYzLjUzMTI1QzcuNDU2ODYgMy4xMzQzIDcuMTM1MDYgMi44MTI1IDYuNzM4MTEgMi44MTI1WlwiLGZpbGw6dH0pLCgwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xMi4xNTY1IDYuMjY3NThIOC45NDk3MUM4Ljc1MTIzIDYuMjY3NTggOC41OTAzMyA2LjQyODQ4IDguNTkwMzMgNi42MjY5NlYxMS4zODE4QzguNTkwMzMgMTEuNTgwMyA4Ljc1MTIzIDExLjc0MTIgOC45NDk3MSAxMS43NDEySDEyLjE1NjVDMTIuMzU0OSAxMS43NDEyIDEyLjUxNTggMTEuNTgwMyAxMi41MTU4IDExLjM4MThWNi42MjY5NkMxMi41MTU4IDYuNDI4NDggMTIuMzU0OSA2LjI2NzU4IDEyLjE1NjUgNi4yNjc1OFpcIixzdHJva2U6dCxzdHJva2VXaWR0aDpcIjAuNzE4NzUzXCJ9KSwoMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMTIuMTU2NCAyLjgxMjVIOC45NDk3MUM4LjU1Mjc1IDIuODEyNSA4LjIzMDk2IDMuMTM0MyA4LjIzMDk2IDMuNTMxMjVWNC40MTU4N0M4LjIzMDk2IDQuODEyODMgOC41NTI3NSA1LjEzNDYzIDguOTQ5NzEgNS4xMzQ2M0gxMi4xNTY0QzEyLjU1MzQgNS4xMzQ2MyAxMi44NzUyIDQuODEyODMgMTIuODc1MiA0LjQxNTg3VjMuNTMxMjVDMTIuODc1MiAzLjEzNDMgMTIuNTUzNCAyLjgxMjUgMTIuMTU2NCAyLjgxMjVaXCIsZmlsbDp0fSksKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTYuNzM3OTggOS4wMDQ4OEgzLjUzMTI1QzMuMTM0MyA5LjAwNDg4IDIuODEyNSA5LjMyNjY4IDIuODEyNSA5LjcyMzY0VjExLjM4MjNDMi44MTI1IDExLjc3OTMgMy4xMzQzIDEyLjEwMTEgMy41MzEyNSAxMi4xMDExSDYuNzM3OThDNy4xMzQ5NCAxMi4xMDExIDcuNDU2NzQgMTEuNzc5MyA3LjQ1Njc0IDExLjM4MjNWOS43MjM2NEM3LjQ1Njc0IDkuMzI2NjggNy4xMzQ5NCA5LjAwNDg4IDYuNzM3OTggOS4wMDQ4OFpcIixmaWxsOnR9KV19KSl9fSwyNzcyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigzNzkpLHQpLG8obig0NzE4KSx0KSxvKG4oNzkzNyksdCksbyhuKDgzMTEpLHQpLG8obig1NzI5KSx0KSxvKG4oNzc4OCksdCksbyhuKDM3MDMpLHQpLG8obig2Nzk1KSx0KSxvKG4oODI2NSksdCksbyhuKDExNyksdCksbyhuKDE1MzkpLHQpLG8obig5Mjg1KSx0KSxvKG4oNDAyMCksdCksbyhuKDUyOSksdCksbyhuKDI0MDIpLHQpLG8obigyMTQ3KSx0KSxvKG4oNDgyNSksdCksbyhuKDY0NDcpLHQpLG8obigxMjgxKSx0KSxvKG4oNzQyOSksdCksbyhuKDk5NDApLHQpLG8obigxMDAyKSx0KX0sMzExNzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lkljb25XaXRoQmFkZ2U9dm9pZCAwO2NvbnN0IGE9big1ODkzKSxpPW8obig3NTE4KSksbD1uKDcwMDYpLHM9bigzMTM2KSxjPW4oMTMzNSk7dC5JY29uV2l0aEJhZGdlPWU9Pnt2YXJ7Y291bnQ6dD0wLG1heDpufT1lLG89cihlLFtcImNvdW50XCIsXCJtYXhcIl0pO3JldHVybigwLGEuanN4cykodSx7Y2hpbGRyZW46WygwLGEuanN4KShsLkljb24sT2JqZWN0LmFzc2lnbih7fSxvKSksdD4wJiYoMCxhLmpzeCkoZCx7Y291bnQ6dCxtYXg6bn0pXX0pfTtjb25zdCB1PSgwLGkuZGVmYXVsdCkoYy5Cb3gpYFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gLGQ9KDAsaS5kZWZhdWx0KShzLkJhZGdlKWBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0cmFuc2Zvcm06IHNjYWxlKDcwJSk7XG4gIHJpZ2h0OiAtJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgdG9wOiAtJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5gfSwxNDQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDMxMTcpLHQpfSwxOTQ0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxhYmVsPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1yKG4oNzUxOCkpLGk9bigxMzM1KSxsPW4oNzc2OSkscz1uKDk2MzQpO3QuTGFiZWw9KHtpY29uOmUsdGV4dDp0LGhlbHBlclRleHQ6bixodG1sRm9yOnIsaW5saW5lOmF9KT0+KDAsby5qc3hzKShwLE9iamVjdC5hc3NpZ24oe2lubGluZTphfSx7Y2hpbGRyZW46WygwLG8uanN4cykoXCJkaXZcIixPYmplY3QuYXNzaWduKHtzdHlsZTp7ZGlzcGxheTpcImZsZXhcIn19LHtjaGlsZHJlbjpbXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lKCk6ZT8oMCxvLmpzeCkoZCx7aWNvbjplfSk6bnVsbCwoMCxvLmpzeCkodSxPYmplY3QuYXNzaWduKHthczpcImxhYmVsXCIsaHRtbEZvcjpyLHdlaWdodDpcImJvbGRcIn0se2NoaWxkcmVuOnR9KSldfSkpLG4mJigwLG8uanN4KShjLHtjaGlsZHJlbjpufSldfSkpO2NvbnN0IGM9KDAsYS5kZWZhdWx0KShsLlRleHQpYFxuICBzaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRIZWxwfTtcbmAsdT0oMCxhLmRlZmF1bHQpKGwuVGV4dClgXG4gIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbmAsZD0oMCxhLmRlZmF1bHQpKHMuSWNvbilgXG4gIG1hcmdpbi1yaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICBtaW4td2lkdGg6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuc21hbGx9O1xuICBtaW4taGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnNtYWxsfTtcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xuYCxwPSgwLGEuZGVmYXVsdCkoaS5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtYXJnaW4tYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcblxuICAkeyh7aW5saW5lOmUsdGhlbWU6dH0pPT5lJiZgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gICAgIG1hcmdpbi1sZWZ0OiAke3QucHguc21hbGx9O1xcbiAgICAgZm9udC13ZWlnaHQ6ICR7dC5mb250V2VpZ2h0Lm5vcm1hbH07XFxuICBgfVxuYH0sOTIzOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oODI3NSksdCksbyhuKDY5MyksdCl9LDgyNzU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Mb2FkZXI9dm9pZCAwO2NvbnN0IGE9big1ODkzKSxpPW8obig3NTE4KSksbD1uKDk2MzQpO3QuTG9hZGVyPSgwLGkuZGVmYXVsdCkoKGU9Pnt2YXIgdD1yKGUsW10pO3JldHVybigwLGEuanN4KShsLkljb24sT2JqZWN0LmFzc2lnbih7fSx0LHtjaGlsZHJlbjooMCxhLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjEwMCVcIixoZWlnaHQ6XCIxMDAlXCIsdmlld0JveDpcIjAgMCAzOCAzOFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIn0se2NoaWxkcmVuOigwLGEuanN4KShcImdcIixPYmplY3QuYXNzaWduKHtmaWxsOlwibm9uZVwiLGZpbGxSdWxlOlwiZXZlbm9kZFwifSx7Y2hpbGRyZW46KDAsYS5qc3hzKShcImdcIixPYmplY3QuYXNzaWduKHt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMSAxKVwiLHN0cm9rZVdpZHRoOlwiMlwifSx7Y2hpbGRyZW46WygwLGEuanN4KShcImNpcmNsZVwiLHtzdHJva2VPcGFjaXR5OlwiLjVcIixjeDpcIjE4XCIsY3k6XCIxOFwiLHI6XCIxOFwifSksKDAsYS5qc3gpKFwicGF0aFwiLE9iamVjdC5hc3NpZ24oe2Q6XCJNMzYgMThjMC05Ljk0LTguMDYtMTgtMTgtMThcIn0se2NoaWxkcmVuOigwLGEuanN4KShcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJyb3RhdGVcIixmcm9tOlwiMCAxOCAxOFwiLHRvOlwiMzYwIDE4IDE4XCIsZHVyOlwiMXNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn0pfSkpXX0pKX0pKX0pKX0pKX0pKWBgfSw2OTM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9KSxhPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZyKHQsZSxuKTtyZXR1cm4gbyh0LGUpLHR9LGk9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5PcGVuZmluTG9hZGVyPXZvaWQgMDtjb25zdCBsPW4oNTg5Mykscz1hKG4oNzUxOCkpLGM9big5NjM0KTt0Lk9wZW5maW5Mb2FkZXI9KDAscy5kZWZhdWx0KSgoZT0+e3ZhciB0PWkoZSxbXSk7cmV0dXJuKDAsbC5qc3gpKGMuSWNvbixPYmplY3QuYXNzaWduKHt9LHQse2NoaWxkcmVuOigwLGwuanN4cykoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjEwMCVcIixoZWlnaHQ6XCIxMDAlXCIsdmlld0JveDpcIjAgMCAxOCAxOFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSx7Y2hpbGRyZW46WygwLGwuanN4KSh1LHtkOlwiXFxuICAgICAgICAgICAgTSAxNy4xMjIyIDYuODg3XFxuICAgICAgICAgICAgQyAxNy4wMTQxIDYuNzc4ODcgMTYuODk4IDYuNjc5MTEgMTYuNzc0OCA2LjU4ODU2XFxuICAgICAgICAgICAgTCAxNi43Mjk1IDYuNTU3MTVcXG4gICAgICAgICAgICBDIDE2LjcwMzUgNi41MzkwMyAxNi42NzgxIDYuNTIwMyAxNi42NTE1IDYuNTAyNzhcXG4gICAgICAgICAgICBDIDE2LjYyNSA2LjQ4NTI2IDE2LjU5NDEgNi40NjY1MyAxNi41NjU3IDYuNDQ5MDFcXG4gICAgICAgICAgICBMIDE2LjUyNTkgNi40MjQyNFxcbiAgICAgICAgICAgIEMgMTYuNDkwMiA2LjQwMzEgMTYuNDU0IDYuMzgzMTYgMTYuNDE3NyA2LjM2MzgzXFxuICAgICAgICAgICAgTCAxNi4zOTY2IDYuMzUyMzZcXG4gICAgICAgICAgICBDIDE1Ljk2NzggNi4xMjc0MiAxNS40OTEgNi4wMDk2OCAxNS4wMDY4IDYuMDA5MjJcXG4gICAgICAgICAgICBDIDE0LjIxMDEgNi4wMDg1OCAxMy40NDYzIDUuNjkxNDkgMTIuODgzNCA1LjEyNzcyXFxuICAgICAgICAgICAgQyAxMi4zMjA1IDQuNTYzOTUgMTIuMDA0OCAzLjc5OTcxIDEyLjAwNTYgMy4wMDMxNFxcbiAgICAgICAgICAgIEMgMTIuMDA3OCAxLjc5MDY2IDExLjI3OTIgMC42OTYyNjMgMTAuMTU5NiAwLjIzMDI5M1xcbiAgICAgICAgICAgIEMgOS4wNDAwMiAtMC4yMzU2NzYgNy43NDk5MiAwLjAxODU1OTIgNi44OTA5MyAwLjg3NDQ0MVxcbiAgICAgICAgICAgIEMgNi4wMzE5NCAxLjczMDMyIDUuNzczMjMgMy4wMTkyOCA2LjIzNTQ2IDQuMTQwMjRcXG4gICAgICAgICAgICBDIDYuNjk3NjggNS4yNjExOSA3Ljc4OTggNS45OTMzNyA5LjAwMjUxIDUuOTk1MzJcXG4gICAgICAgICAgICBDIDkuNzk5MjQgNS45OTU5NiAxMC41NjMxIDYuMzEzMDUgMTEuMTI1OSA2Ljg3NjgyXFxuICAgICAgICAgICAgQyAxMS42ODg4IDcuNDQwNTkgMTIuMDA0NiA4LjIwNDg0IDEyLjAwMzggOS4wMDE0XFxuICAgICAgICAgICAgQyAxMi4wMDMxIDkuNzk3OTcgMTEuNjg2IDEwLjU2MTYgMTEuMTIyMSAxMS4xMjQ0XFxuICAgICAgICAgICAgQyAxMC41NTgyIDExLjY4NzEgOS43OTM4IDEyLjAwMjggOC45OTcwOCAxMi4wMDJcXG4gICAgICAgICAgICBDIDguMjAwOTYgMTIuMDAyNyA3LjQzNzI3IDExLjY4NjcgNi44NzQzOCAxMS4xMjM4XFxuICAgICAgICAgICAgQyA2LjMxMTUgMTAuNTYxIDUuOTk1NjQgOS43OTczNiA1Ljk5NjQ0IDkuMDAxNFxcbiAgICAgICAgICAgIEMgNS45OTY0NCA3LjM0NTg2IDQuNjU0MDkgNi4wMDM3OCAyLjk5ODIyIDYuMDAzNzhcXG4gICAgICAgICAgICBDIDEuMzQyMzUgNi4wMDM3OCAwIDcuMzQ1ODYgMCA5LjAwMTRcXG4gICAgICAgICAgICBDIDAgMTAuNjU2OSAxLjM0MjM1IDExLjk5OSAyLjk5ODIyIDExLjk5OVxcbiAgICAgICAgICAgIEMgNC42NTQwOSAxMS45OTkgNS45OTY0NCAxMy4zNDExIDUuOTk2NDQgMTQuOTk2NlxcbiAgICAgICAgICAgIEMgNS45OTY0NCAxNi42NTUzIDcuMzQxMzYgMTggOS4wMDA0IDE4XFxuICAgICAgICAgICAgQyAxMC42NTk0IDE4IDEyLjAwNDQgMTYuNjU1MyAxMi4wMDQ0IDE0Ljk5NjZcXG4gICAgICAgICAgICBDIDEyLjAwNDQgMTMuMzQxMSAxMy4zNDY3IDExLjk5OSAxNS4wMDI2IDExLjk5OVxcbiAgICAgICAgICAgIEMgMTUuNTM3OSAxMS45OTk0IDE2LjA2MzUgMTEuODU2MyAxNi41MjQ3IDExLjU4NDZcXG4gICAgICAgICAgICBDIDE2LjU2NDUgMTEuNTYxIDE2LjYwMzggMTEuNTM2MyAxNi42NDU1IDExLjUxMDlcXG4gICAgICAgICAgICBMIDE2LjY1NCAxMS41MDU1XFxuICAgICAgICAgICAgQyAxNi42OTAyIDExLjQ4MTMgMTYuNzI2NSAxMS40NTU5IDE2Ljc2MTUgMTEuNDMwNVxcbiAgICAgICAgICAgIEwgMTYuNzc3MiAxMS40MTk3XFxuICAgICAgICAgICAgQyAxNi44MDg2IDExLjM5NjcgMTYuODM3NiAxMS4zNzIgMTYuODcwOSAxMS4zNDcyXFxuICAgICAgICAgICAgTCAxNi44OTc1IDExLjMyNjZcXG4gICAgICAgICAgICBDIDE2LjkyNjUgMTEuMzAzMSAxNi45NTQzIDExLjI3ODMgMTYuOTgyNyAxMS4yNTM1XFxuICAgICAgICAgICAgTCAxNy4wMTM1IDExLjIyN1xcbiAgICAgICAgICAgIEMgMTcuMDQ5NyAxMS4xOTQzIDE3LjA4NTQgMTEuMTYwNSAxNy4xMjA0IDExLjEyNTVcXG4gICAgICAgICAgICBMIDE3LjEyNTkgMTEuMTIwNlxcbiAgICAgICAgICAgIEMgMTcuMjU1MyAxMC45OTA2IDE3LjM3MjYgMTAuODQ5MSAxNy40NzYzIDEwLjY5NzhcXG4gICAgICAgICAgICBDIDE3LjQ5ODkgMTAuNjY1MSAxNy41MjA2IDEwLjYzMjEgMTcuNTQxNiAxMC41OTg3XFxuICAgICAgICAgICAgQyAxOC4yODQzIDkuNDE1IDE4LjExMDQgNy44NzUyIDE3LjEyMjIgNi44ODdaXFxuICAgICAgICAgICAgXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSksKDAsbC5qc3gpKGQse2N4OlwiOVwiLGN5OlwiM1wiLHI6XCIyLjlcIixmaWxsOlwiY3VycmVudENvbG9yXCIsYW5nbGU6MH0pLCgwLGwuanN4KShkLHtjeDpcIjE1XCIsY3k6XCI5XCIscjpcIjIuNzVcIixmaWxsOlwiY3VycmVudENvbG9yXCIsYW5nbGU6LTkwfSksKDAsbC5qc3gpKGQse2N4OlwiOVwiLGN5OlwiMTVcIixyOlwiMi41XCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLGFuZ2xlOi0xODB9KSwoMCxsLmpzeCkoZCx7Y3g6XCIzXCIsY3k6XCI5XCIscjpcIjIuMjVcIixmaWxsOlwiY3VycmVudENvbG9yXCIsYW5nbGU6LTI3MH0pXX0pKX0pKX0pKWBgO2NvbnN0IHU9cy5kZWZhdWx0LnBhdGhgXG4gIEBrZXlmcmFtZXMgbG9nb0FuaW1hdGlvbiB7XG4gICAgMCUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgMjUlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDM1JSB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgICA2MCUge1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gICAgNzUlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDEwMCUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gIH1cblxuICBhbmltYXRpb246IGxvZ29BbmltYXRpb24gMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG5gLGQ9cy5kZWZhdWx0LmNpcmNsZWBcbiAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyO1xuICBhbmltYXRpb246ICR7KHthbmdsZTplfSk9PihlPT5zLmtleWZyYW1lc2BcbiAgICAwJSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICAgIDI1JSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDMwJSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDUwJSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgke2V9ZGVnKTtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDcwJSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMzYwZGVnKTtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDc1JSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMzYwZGVnKTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICAgIDEwMCUge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTM2MGRlZyk7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbmApKGUpfSAycyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmB9LDcwMzA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVmFsaWRhdGlvbkVycm9yPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1yKG4oNzUxOCkpLGk9big3NzY5KSxsPW4oOTYzNCk7dC5WYWxpZGF0aW9uRXJyb3I9KHtjaGlsZHJlbjplfSk9PigwLG8uanN4cykocyx7Y2hpbGRyZW46WygwLG8uanN4KShsLkljb24se2ljb246XCJFeGNsYW1hdGlvbkNpcmNsZWRGaWxsZWRJY29uXCJ9KSwoMCxvLmpzeCkoYyx7Y2hpbGRyZW46ZX0pXX0pO2NvbnN0IHM9YS5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbWFyZ2luLXRvcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5gLGM9KDAsYS5kZWZhdWx0KShpLlRleHQpYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRIZWxwfTtcbmB9LDM1ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlN0eWxlZElucHV0RmllbGQ9dC5CYXNlSW5wdXQ9dm9pZCAwO2NvbnN0IGE9big1ODkzKSxpPW4oNjY4OSksbD1vKG4oNzUxOCkpLHM9bigxMzM1KSxjPW4oOTUwNyksdT1uKDc3NjkpLGQ9big3MDMwKSxwPW4oMTk0NCk7dC5CYXNlSW5wdXQ9KDAsaS5mb3J3YXJkUmVmKSgoKGUsbik9Pnt2YXJ7Y2xhc3NOYW1lOm8scmVuZGVySW5wdXQ6aSxtZXNzYWdlOmwsbGFiZWw6cyxzdGF0dXM6YyxuYW1lOnUsaWNvbjp2LHR5cGU6Qz1cInRleHRcIixoZWxwZXJUZXh0Om0scGxhY2Vob2xkZXI6d309ZSxiPXIoZSxbXCJjbGFzc05hbWVcIixcInJlbmRlcklucHV0XCIsXCJtZXNzYWdlXCIsXCJsYWJlbFwiLFwic3RhdHVzXCIsXCJuYW1lXCIsXCJpY29uXCIsXCJ0eXBlXCIsXCJoZWxwZXJUZXh0XCIsXCJwbGFjZWhvbGRlclwiXSk7Y29uc3QgeT1cImNoZWNrYm94XCI9PT1DfHxcInJhZGlvXCI9PT1DO3JldHVybigwLGEuanN4cykoZyxPYmplY3QuYXNzaWduKHtmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsYWxpZ25JdGVtczpcImZsZXgtc3RhcnRcIn0se2NoaWxkcmVuOlsoMCxhLmpzeHMpKGYsT2JqZWN0LmFzc2lnbih7aW5saW5lOnl9LHtjaGlsZHJlbjpbISFzJiYoMCxhLmpzeCkocC5MYWJlbCx7aW5saW5lOnksaWNvbjp2LHRleHQ6cyxoZWxwZXJUZXh0Om0saHRtbEZvcjp1fSksISFpJiZpKE9iamVjdC5hc3NpZ24oe25hbWU6dSxzdGF0dXM6Yyx0eXBlOkN9LGIpKSwhaSYmKDAsYS5qc3gpKHQuU3R5bGVkSW5wdXRGaWVsZCxPYmplY3QuYXNzaWduKHtjbGFzc05hbWU6byxuYW1lOnUscGxhY2Vob2xkZXI6dyxzdGF0dXM6Yyx0eXBlOkN9LGIse3JlZjpufSkpXX0pKSxsJiYoXCJjcml0aWNhbFwiPT09Yz8oMCxhLmpzeCkoZC5WYWxpZGF0aW9uRXJyb3Ise2NoaWxkcmVuOmx9KTooMCxhLmpzeCkoaCxPYmplY3QuYXNzaWduKHtzdGF0dXM6Y30se2NoaWxkcmVuOmx9KSkpXX0pKX0pKSx0LkJhc2VJbnB1dC5kaXNwbGF5TmFtZT1cIkJhc2VJbnB1dFwiO2NvbnN0IGY9KDAsbC5kZWZhdWx0KShzLkJveClgXG4gIGFsaWduLWl0ZW1zOiAkeyh7aW5saW5lOmV9KT0+ZT9cImNlbnRlclwiOlwiZmxleC1zdGFydFwifTtcbiAgZmxleC1kaXJlY3Rpb246ICR7KHtpbmxpbmU6ZX0pPT5lP1wicm93LXJldmVyc2VcIjpcImNvbHVtblwifTtcbiAganVzdGlmeS1jb250ZW50OiAkeyh7aW5saW5lOmV9KT0+ZT9cImZsZXgtZW5kXCI6XCJmbGV4LXN0YXJ0XCJ9O1xuICB3aWR0aDogMTAwJTtcbmAsaD0oMCxsLmRlZmF1bHQpKHUuVGV4dClgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxjLmdldFN0YXR1c0NvbG9yKShlLHQsXCJ0ZXh0SGVscFwiKX07XG5gLGc9KDAsbC5kZWZhdWx0KShzLkJveClgXG4gIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG5gO3QuU3R5bGVkSW5wdXRGaWVsZD1sLmRlZmF1bHQuaW5wdXRgXG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsYy5nZXRTdGF0dXNDb2xvcikoZSx0LGMuUGFsZXR0ZS5pbnB1dEJvcmRlcil9O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIGJveC1zaGFkb3c6ICR7KHt0aGVtZTplfSk9PmUuc2hhZG93LmJhc2V9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Q29sb3J9O1xuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5iYXNlfWB9O1xuICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uKTtcbiAgd2lkdGg6IDEwMCU7XG5cbiAgJjpmb2N1cyB7XG4gICAgb3V0bGluZTogMDtcbiAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplLHN0YXR1czp0fSk9PigwLGMuZ2V0U3RhdHVzQ29sb3IpKGUsdCxjLlBhbGV0dGUuaW5wdXRGb2N1c2VkKX07XG4gIH1cblxuICAmOmRpc2FibGVkIHtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICB9XG5cbiAgJjpkaXNhYmxlZDo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBhIGhhY2sgdG8gaW52ZXJ0IHRoZSBjYWxlbmRhciBpY29uLiBUaGlzIG9ubHkgd29ya3MgaW4gZGFyayBtb2RlLlxuICAgKiBVbnRpbCBlaXRoZXIgbGlnaHQgbW9kZSBpcyBhIHRoaW5nIG9yIHdlIGdldCBhIGRhdGV0aW1lIHBpY2tlciBkZXNpZ24sIHRoaXMgd2lsbCBkby5cbiAgICovXG5cbiAgOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3Ige1xuICAgIGZpbHRlcjogaW52ZXJ0KDEpO1xuICB9XG5gfSw4ODc4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigzNTgpLHQpfSwxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksYT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fSxpPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LGw9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGVja2JveD12b2lkIDA7Y29uc3Qgcz1uKDU4OTMpLGM9YShuKDY2ODkpKSx1PWwobig3NTE4KSksZD1uKDg4NzgpLHA9big5NjM0KSxmPW4oOTUwNyk7dC5DaGVja2JveD1jLmZvcndhcmRSZWYoKChlLHQpPT57dmFye3N0YXR1czpufT1lLHI9aShlLFtcInN0YXR1c1wiXSk7cmV0dXJuKDAscy5qc3gpKGQuQmFzZUlucHV0LE9iamVjdC5hc3NpZ24oe30scix7dHlwZTpcImNoZWNrYm94XCIsc3RhdHVzOm4scmVuZGVySW5wdXQ6ZT0+e3ZhciByPWkoZSxbXSk7cmV0dXJuKDAscy5qc3hzKShoLHtjaGlsZHJlbjpbKDAscy5qc3gpKEMsT2JqZWN0LmFzc2lnbih7cmVmOnQsaWQ6ci5uYW1lLHR5cGU6XCJjaGVja2JveFwifSxyKSksKDAscy5qc3gpKGcsT2JqZWN0LmFzc2lnbih7c3RhdHVzOm59LHtjaGlsZHJlbjooMCxzLmpzeCkodix7fSl9KSldfSl9fSkpfSkpLHQuQ2hlY2tib3guZGlzcGxheU5hbWU9XCJDaGVja2JveFwiO2NvbnN0IGg9dS5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gLGc9dS5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgd2lkdGg6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsZi5nZXRTdGF0dXNDb2xvcikoZSx0LFwidGV4dERlZmF1bHRcIil9O1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuYCx2PSgwLHUuZGVmYXVsdCkocC5JY29uKS5hdHRycyh7aWNvbjpcIkNoZWNrSWNvblwiLHNpemU6XCJzbWFsbFwifSlgXG4gIG9wYWNpdHk6IDA7XG5gLEM9dS5kZWZhdWx0LmlucHV0YFxuICBvcGFjaXR5OiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAmOmNoZWNrZWQgKyAke2crXCIgXCIrdn0ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICAmOmhvdmVyICsgJHtnfSB7XG4gICAgYm94LXNoYWRvdzogMCAwIDFweCAxcHggJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gIH1cblxuICAmOmZvY3VzICsgJHtnfSB7XG4gICAgYm94LXNoYWRvdzogMCAwIDFweCAxcHggJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gIH1cblxuICAmOmRpc2FibGVkIHtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICB9XG5cbiAgJjpkaXNhYmxlZCArICR7Z30ge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgfVxuYH0sODA1MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMSksdCl9LDkwMjI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9KSxhPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZyKHQsZSxuKTtyZXR1cm4gbyh0LGUpLHR9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2hlY2tib3hHcm91cD12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGw9YShuKDY2ODkpKSxzPWEobig3NTE4KSksYz1uKDEzMzUpLHU9big3NzY5KSxkPW4oODA1MSkscD1uKDcwMzApO3QuQ2hlY2tib3hHcm91cD0oe2Rpc2FibGVkOmUsZ2FwOnQ9XCJzbWFsbFwiLGhlbHBlclRleHQ6bixsYWJlbDpyLG1lc3NhZ2U6byxjaGlsZHJlbjphLHZhbGlkYXRpb25FcnJvck1lc3NhZ2U6cyx2YWx1ZXM6YyxvbkNoYW5nZTp1fSk9Pntjb25zdFt3LGJdPWwudXNlU3RhdGUobnVsbCE9Yz9jOltdKSx5PWU9Pntjb25zdCB0PWUudGFyZ2V0LnZhbHVlLG49dy5pbmNsdWRlcyh0KT93LmZpbHRlcigoZT0+ZSE9PXQpKTpbLi4udyx0XTtiKG4pLHUmJnUobil9O3JldHVybigwLGkuanN4cykodix7Y2hpbGRyZW46W3ImJigwLGkuanN4cykoZix7Y2hpbGRyZW46WygwLGkuanN4KShoLE9iamVjdC5hc3NpZ24oe3dlaWdodDpcImJvbGRcIn0se2NoaWxkcmVuOnJ9KSksbiYmKDAsaS5qc3gpKGcse2NoaWxkcmVuOm59KV19KSwoMCxpLmpzeCkoQyxPYmplY3QuYXNzaWduKHtnYXA6dH0se2NoaWxkcmVuOmwuQ2hpbGRyZW4ubWFwKGEsKHQ9Pntjb25zdCBuPXQ7cmV0dXJuIG4udHlwZT09PWQuQ2hlY2tib3g/bC5jbG9uZUVsZW1lbnQobix7ZGlzYWJsZWQ6ZSxvbkNoYW5nZTp5LGNoZWNrZWQ6dy5pbmNsdWRlcyhuLnByb3BzLnZhbHVlKX0pOm59KSl9KSksIXcubGVuZ3RoJiZzJiYoMCxpLmpzeCkocC5WYWxpZGF0aW9uRXJyb3Ise2NoaWxkcmVuOnN9KSxvPygwLGkuanN4KShtLE9iamVjdC5hc3NpZ24oe2Rpc2FibGVkOmV9LHtjaGlsZHJlbjpvfSkpOm51bGxdfSl9O2NvbnN0IGY9KDAscy5kZWZhdWx0KShjLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbi1ib3R0b206ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuYCxoPSgwLHMuZGVmYXVsdCkodS5UZXh0KWBcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG5gLGc9KDAscy5kZWZhdWx0KSh1LlRleHQpYFxuICBzaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRIZWxwfTtcbmAsdj0oMCxzLmRlZmF1bHQpKGMuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IG1heC1jb250ZW50O1xuYCxDPSgwLHMuZGVmYXVsdCkoYy5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbmAsbT0oMCxzLmRlZmF1bHQpKHUuVGV4dClgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRQbGFjZWhvbGRlcn07XG4gIG1hcmdpbi10b3A6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG5cbiAgJHsoe2Rpc2FibGVkOmV9KT0+ZSYmcy5jc3NgXG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICAgIGB9XG5gfSw0MTY5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5MDIyKSx0KX0sOTM2ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRhdGVJbnB1dD12b2lkIDA7Y29uc3QgYT1uKDU4OTMpLGk9big2Njg5KSxsPW8obig3NTE4KSkscz1uKDk2MzQpLGM9bigxMzM1KSx1PW4oODg3OCk7dC5EYXRlSW5wdXQ9KDAsaS5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXJ7dmFsdWU6bj1cIlwiLHR5cGU6bz1cImRhdGVcIixleHBhbmRlZDpsPSExLG9uQ2hhbmdlOnN9PWUsYz1yKGUsW1widmFsdWVcIixcInR5cGVcIixcImV4cGFuZGVkXCIsXCJvbkNoYW5nZVwiXSk7Y29uc3RbcCxmXT0oMCxpLnVzZVN0YXRlKShuKTtyZXR1cm4oMCxpLnVzZUVmZmVjdCkoKCgpPT5mKG4pKSxbXSksKDAsYS5qc3gpKHUuQmFzZUlucHV0LE9iamVjdC5hc3NpZ24oe3R5cGU6b30sYyx7cmVuZGVySW5wdXQ6ZT0+e3ZhciBuPXIoZSxbXSk7cmV0dXJuKDAsYS5qc3gpKGQsT2JqZWN0LmFzc2lnbih7cmVmOnQsdHlwZTpvLG9uQ2hhbmdlOmU9Pntjb25zdHt2YWx1ZTp0fT1lLnRhcmdldDt0JiZmKHQpLG51bGw9PXN8fHMoZSl9LHZhbHVlOnAsZXhwYW5kZWQ6bH0sbikpfX0pKX0pKSx0LkRhdGVJbnB1dC5kaXNwbGF5TmFtZT1cIkRhdGVJbnB1dFwiO2NvbnN0IGQ9KDAsaS5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXJ7dHlwZTpuLGV4cGFuZGVkOm8sb25FeHBhbmQ6aX09ZSxsPXIoZSxbXCJ0eXBlXCIsXCJleHBhbmRlZFwiLFwib25FeHBhbmRcIl0pO3JldHVybigwLGEuanN4cykocCx7Y2hpbGRyZW46WygwLGEuanN4KShoLHtjaGlsZHJlbjooMCxhLmpzeCkocy5JY29uLHtpY29uOlwidGltZVwiPT09bj9cIkNsb2NrSWNvblwiOlwiQ2FsZW5kYXJJY29uXCJ9KX0pLCgwLGEuanN4KSh2LE9iamVjdC5hc3NpZ24oe3JlZjp0LHR5cGU6bixvbktleURvd246ZT0+e1wiIFwiPT09ZS5rZXkmJmUucHJldmVudERlZmF1bHQoKX19LGwpKSwoMCxhLmpzeCkoZyxPYmplY3QuYXNzaWduKHtmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsZGlzYWJsZWQ6bC5kaXNhYmxlZCxvbkNsaWNrOml9LHtjaGlsZHJlbjooMCxhLmpzeCkocy5JY29uLHtpY29uOm8/XCJDaGV2cm9uVXBJY29uXCI6XCJDaGV2cm9uRG93bkljb25cIn0pfSkpXX0pfSkpO2QuZGlzcGxheU5hbWU9XCJTdHlsZWREYXRlSW5wdXRcIjtjb25zdCBwPWwuZGVmYXVsdC5kaXZgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICB3aWR0aDogMTAwJTtcbmAsZj0oMCxsLmRlZmF1bHQpKGMuQm94KWBcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAxcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGhlaWdodDogY2FsYygxMDAlIC0gMnB4KTtcbmAsaD0oMCxsLmRlZmF1bHQpKGYpYFxuICBsZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5gLGc9KDAsbC5kZWZhdWx0KShmKWBcbiAgcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICBwb2ludGVyLWV2ZW50czogJHsoe2Rpc2FibGVkOmV9KT0+ZT9cIm5vbmVcIjp2b2lkIDB9O1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIHBhZGRpbmctbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5gLHY9KDAsbC5kZWZhdWx0KSh1LlN0eWxlZElucHV0RmllbGQpYFxuICBhcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIHBhZGRpbmctcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgueHh4bGFyZ2V9O1xuICBwYWRkaW5nLWxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHgueHh4bGFyZ2V9O1xuICA6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gIDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gIH1cbmB9LDk2NTQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDkzNjgpLHQpfSwxOTc4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig2ODg0KSx0KX0sNjg4NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk51bWJlcklucHV0PXQuRGlyZWN0aW9uPXZvaWQgMDtjb25zdCBhPW4oNTg5MyksaT1uKDY2ODkpLGw9byhuKDc1MTgpKSxzPW4oOTYzNCksYz1uKDEzMzUpLHU9big4ODc4KTt2YXIgZDshZnVuY3Rpb24oZSl7ZVtlLlVwPTFdPVwiVXBcIixlW2UuRG93bj0tMV09XCJEb3duXCJ9KGQ9dC5EaXJlY3Rpb258fCh0LkRpcmVjdGlvbj17fSkpLHQuTnVtYmVySW5wdXQ9KDAsaS5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXJ7bWluOm4sbWF4Om8sc3RlcDppPTEsb25UYWtlU3RlcDpsLHZhbHVlOnN9PWUsYz1yKGUsW1wibWluXCIsXCJtYXhcIixcInN0ZXBcIixcIm9uVGFrZVN0ZXBcIixcInZhbHVlXCJdKTtyZXR1cm4oMCxhLmpzeCkodS5CYXNlSW5wdXQsT2JqZWN0LmFzc2lnbih7dHlwZTpcIm51bWJlclwifSxjLHtyZW5kZXJJbnB1dDplPT57dmFyIHU9cihlLFtdKTtyZXR1cm4oMCxhLmpzeCkocCxPYmplY3QuYXNzaWduKHtwcmVwZW5kSWNvbjpjLnByZXBlbmRJY29uLHByZXBlbmRTdHJpbmc6Yy5wcmVwZW5kU3RyaW5nLHJlZjp0LG9uSW5jcmVtZW50OigpPT5sJiZsKGQuVXAsaSksb25EZWNyZW1lbnQ6KCk9PmwmJmwoZC5Eb3duLGkpLG1pbjpuLG1heDpvLHN0ZXA6aX0sdSx7cGxhY2Vob2xkZXI6Yy5wbGFjZWhvbGRlcix2YWx1ZTpzLFwiYXJpYS12YWx1ZW5vd1wiOnMsXCJhcmlhLXZhbHVlbWluXCI6bixcImFyaWEtdmFsdWVtYXhcIjpvfSkpfX0pKX0pKSx0Lk51bWJlcklucHV0LmRpc3BsYXlOYW1lPVwiTnVtYmVySW5wdXRcIjtjb25zdCBwPSgwLGkuZm9yd2FyZFJlZikoKChlLHQpPT57dmFye29uSW5jcmVtZW50Om4sb25EZWNyZW1lbnQ6byxwcmVwZW5kSWNvbjpsLHByZXBlbmRTdHJpbmc6Y309ZSx1PXIoZSxbXCJvbkluY3JlbWVudFwiLFwib25EZWNyZW1lbnRcIixcInByZXBlbmRJY29uXCIsXCJwcmVwZW5kU3RyaW5nXCJdKTtjb25zdCBkPShlLHQpPT57XCJFbnRlclwiIT09ZS5rZXkmJlwiIFwiIT09ZS5rZXl8fChlLnByZXZlbnREZWZhdWx0KCksdD9uKCk6bygpKX0scD0oMCxpLnVzZVJlZikobnVsbCksW20sd109KDAsaS51c2VTdGF0ZSkoMCk7cmV0dXJuKDAsaS51c2VFZmZlY3QpKCgoKT0+e3AuY3VycmVudD93KHAuY3VycmVudC5vZmZzZXRXaWR0aCk6dygwKX0pLFtwLmN1cnJlbnQsbCxjXSksKDAsYS5qc3hzKShmLHtjaGlsZHJlbjpbKCEhbHx8ISFjKSYmKDAsYS5qc3hzKShoLE9iamVjdC5hc3NpZ24oe2hhc0ljb246ISFsLHJlZjpwLGFsaWduSXRlbXM6XCJjZW50ZXJcIixqdXN0aWZ5Q29udGVudDpcImNlbnRlclwifSx7Y2hpbGRyZW46W2wmJigwLGEuanN4KShzLkljb24se2ljb246bCxzaXplOlwiYmFzZVwifSksYyYmIWwmJmNdfSkpLCgwLGEuanN4KShDLE9iamVjdC5hc3NpZ24oe3ByZXBlbmRDb250YWluZXJXaWR0aDptLHJlZjp0fSx1KSksKDAsYS5qc3hzKShnLE9iamVjdC5hc3NpZ24oe2ZsZXhEaXJlY3Rpb246XCJjb2x1bW5cIixkaXNhYmxlZDp1LmRpc2FibGVkfSx7Y2hpbGRyZW46WygwLGEuanN4KSh2LE9iamVjdC5hc3NpZ24oe29uQ2xpY2s6bixvbktleURvd246ZT0+ZChlLCEwKSxkaXNhYmxlZDp1LmRpc2FibGVkLFwiYXJpYS1sYWJlbFwiOlwiSW5jcmVtZW50IHZhbHVlXCIsdGFiSW5kZXg6MH0se2NoaWxkcmVuOigwLGEuanN4KShzLkljb24se2ljb246XCJUcmlhbmdsZVVwSWNvblwifSl9KSksKDAsYS5qc3gpKHYsT2JqZWN0LmFzc2lnbih7b25LZXlEb3duOmU9PmQoZSksb25DbGljazpvLFwiYXJpYS1sYWJlbFwiOlwiRGVjcmVtZW50IHZhbHVlXCIsZGlzYWJsZWQ6dS5kaXNhYmxlZCx0YWJJbmRleDowfSx7Y2hpbGRyZW46KDAsYS5qc3gpKHMuSWNvbix7aWNvbjpcIlRyaWFuZ2xlRG93bkljb25cIn0pfSkpXX0pKV19KX0pKTtwLmRpc3BsYXlOYW1lPVwiU3R5bGVkTnVtYmVySW5wdXRcIjtjb25zdCBmPWwuZGVmYXVsdC5kaXZgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICB3aWR0aDogMTAwJTtcbmAsaD0oMCxsLmRlZmF1bHQpKGMuQm94KWBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAxcHg7XG4gIHRvcDogMXB4O1xuICB3aWR0aDogJHsoe3RoZW1lOmUsaGFzSWNvbjp0fSk9PnQ/ZS5weC54eGxhcmdlOlwiZml0LWNvbnRlbnRcIn07XG4gIHBhZGRpbmc6IDAgJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIGhlaWdodDogY2FsYygxMDAlIC0gMnB4KTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+YCR7ZS5yYWRpdXMuc21hbGx9IDAgMCAke2UucmFkaXVzLnNtYWxsfWB9O1xuYCxnPSgwLGwuZGVmYXVsdCkoYy5Cb3gpYFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAxcHg7XG4gIHRvcDogMXB4O1xuICBnYXA6IDFweDtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpO1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5gMCAke2UucmFkaXVzLnNtYWxsfSAke2UucmFkaXVzLnNtYWxsfSAwYH07XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgcG9pbnRlci1ldmVudHM6ICR7KHtkaXNhYmxlZDplfSk9PmU/XCJub25lXCI6dm9pZCAwfTtcbmAsdj0oMCxsLmRlZmF1bHQpKGMuQm94KWBcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICBwYWRkaW5nOiAwICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGhlaWdodDogNTAlO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICBjb2xvcjogJHsoe2Rpc2FibGVkOmUsdGhlbWU6dH0pPT5lP3QucGFsZXR0ZS50ZXh0SGVscDp0LnBhbGV0dGUudGV4dERlZmF1bHR9O1xuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEZvY3VzZWR9O1xuICB9XG5cbiAgJjphY3RpdmUge1xuICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dENvbG9yfTtcbiAgfVxuYCxDPSgwLGwuZGVmYXVsdCkodS5TdHlsZWRJbnB1dEZpZWxkKWBcbiAgYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xuICBwYWRkaW5nLWxlZnQ6ICR7KHtwcmVwZW5kQ29udGFpbmVyV2lkdGg6ZX0pPT5gJHtlKzEwfXB4YH07XG5cbiAgOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICA6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICB9XG5gfSw1MjE1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigyMjU1KSx0KX0sMjI1NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGE9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5SYWRpb0dyb3VwPXZvaWQgMDtjb25zdCBpPW4oNTg5MyksbD1hKG4oNjY4OSkpLHM9YShuKDc1MTgpKSxjPW4oMTMzNSksdT1uKDc3NjkpLGQ9bigyNTY1KSxwPW4oNzAzMCk7dC5SYWRpb0dyb3VwPSh7ZGlyZWN0aW9uOmU9XCJjb2x1bW5cIixsYWJlbDp0LGRpc2FibGVkOm4sbGFiZWxTaWRlOnI9XCJyaWdodFwiLGdhcDpvPVwic21hbGxcIixtZXNzYWdlOmEsaGVscGVyVGV4dDpzLG5hbWU6YyxjaGlsZHJlbjp1LHZhbGlkYXRpb25FcnJvck1lc3NhZ2U6dyxvbkNoYW5nZTpiLHZhbHVlOnl9KT0+e2NvbnN0W3gsa109bC51c2VTdGF0ZSh5KSxTPWU9PntrKGUudGFyZ2V0LnZhbHVlKSxiJiZiKGUpfTtyZXR1cm4gbC51c2VFZmZlY3QoKCgpPT57ayh5KX0pLFt5XSksKDAsaS5qc3hzKShoLHtjaGlsZHJlbjpbKDAsaS5qc3hzKShmLHtjaGlsZHJlbjpbKDAsaS5qc3gpKG0sT2JqZWN0LmFzc2lnbih7d2VpZ2h0OlwiYm9sZFwifSx7Y2hpbGRyZW46dH0pKSxzJiYoMCxpLmpzeCkoZyx7Y2hpbGRyZW46c30pXX0pLCgwLGkuanN4KSh2LE9iamVjdC5hc3NpZ24oe2RpcmVjdGlvbjplLGxhYmVsU2lkZTpyLGdhcDpvfSx7Y2hpbGRyZW46bC5DaGlsZHJlbi5tYXAodSwoZT0+e2NvbnN0IHQ9ZTtyZXR1cm4gdC50eXBlPT09ZC5SYWRpb0lucHV0P2wuY2xvbmVFbGVtZW50KHQse25hbWU6YyxsYWJlbFNpZGU6cixkaXNhYmxlZDpuLG9uQ2hhbmdlOlMsY2hlY2tlZDp0LnByb3BzLnZhbHVlPT09eH0pOnR9KSl9KSksIXgmJncmJigwLGkuanN4KShwLlZhbGlkYXRpb25FcnJvcix7Y2hpbGRyZW46d30pLGE/KDAsaS5qc3gpKEMsT2JqZWN0LmFzc2lnbih7ZGlzYWJsZWQ6bn0se2NoaWxkcmVuOmF9KSk6bnVsbF19KX07Y29uc3QgZj0oMCxzLmRlZmF1bHQpKGMuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWFyZ2luLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5gLGg9KDAscy5kZWZhdWx0KShjLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiBtYXgtY29udGVudDtcbmAsZz0oMCxzLmRlZmF1bHQpKHUuVGV4dClgXG4gIHNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuYCx2PSgwLHMuZGVmYXVsdCkoYy5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogJHtlPT5lLmRpcmVjdGlvbn07XG4gIGFsaWduLWl0ZW1zOiAke2U9Pntzd2l0Y2goZS5sYWJlbFNpZGUpe2Nhc2VcImxlZnRcIjpyZXR1cm5cImVuZFwiO2Nhc2VcInJpZ2h0XCI6cmV0dXJuXCJzdGFydFwiO2RlZmF1bHQ6cmV0dXJuXCJjZW50ZXJcIn19fTtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xuYCxDPSgwLHMuZGVmYXVsdCkodS5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyfTtcbiAgbWFyZ2luLXRvcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcblxuICAkeyh7ZGlzYWJsZWQ6ZX0pPT5lJiZzLmNzc2BcbiAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gICAgYH1cbmAsbT0oMCxzLmRlZmF1bHQpKHUuVGV4dClgXG4gIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1xuYH0sMzY0MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMjU2NSksdCl9LDI1NjU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9KSxhPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZyKHQsZSxuKTtyZXR1cm4gbyh0LGUpLHR9LGk9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5SYWRpb0lucHV0PXZvaWQgMDtjb25zdCBsPW4oNTg5Mykscz1uKDc3NjkpLGM9YShuKDY2ODkpKSx1PWEobig3NTE4KSksZD1uKDEzMzUpLHA9big5NjM0KTt0LlJhZGlvSW5wdXQ9Yy5mb3J3YXJkUmVmKCgoZSx0KT0+e3ZhcntkaXNhYmxlZDpuLGlkOnIsbGFiZWw6byxsYWJlbFNpZGU6YSxpY29uOnN9PWUsYz1pKGUsW1wiZGlzYWJsZWRcIixcImlkXCIsXCJsYWJlbFwiLFwibGFiZWxTaWRlXCIsXCJpY29uXCJdKTtyZXR1cm4oMCxsLmpzeCkoZix7Y2hpbGRyZW46KDAsbC5qc3hzKSh2LE9iamVjdC5hc3NpZ24oe2FzOlwibGFiZWxcIixodG1sRm9yOnIsbGFiZWxTaWRlOmEsZGlzYWJsZWQ6bn0se2NoaWxkcmVuOlsoMCxsLmpzeCkoZyxPYmplY3QuYXNzaWduKHtyZWY6dCx0eXBlOlwicmFkaW9cIixkaXNhYmxlZDpufSxjKSksKDAsbC5qc3gpKGgse30pLCEhcyYmKDAsbC5qc3gpKHAuSWNvbix7aWNvbjpzfSksb3x8XCJcIl19KSl9KX0pKSx0LlJhZGlvSW5wdXQuZGlzcGxheU5hbWU9XCJSYWRpb0lucHV0XCI7Y29uc3QgZj0oMCx1LmRlZmF1bHQpKGQuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbmAsaD11LmRlZmF1bHQuZGl2YFxuICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuXG4gIGlucHV0OmNoZWNrZWQgfiAmOmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW46IDJweCAxcHggMHB4IDJweDtcbiAgICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gICAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgfVxuXG4gIGlucHV0OmRpc2FibGVkIH4gJiB7XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gIH1cblxuICBpbnB1dDpkaXNhYmxlZCB+ICY6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgfVxuYCxnPXUuZGVmYXVsdC5pbnB1dGBcbiAgb3BhY2l0eTogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICB9XG5gLHY9KDAsdS5kZWZhdWx0KShzLlRleHQpYFxuICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiAkeyh7bGFiZWxTaWRlOmV9KT0+e3N3aXRjaChlfHxcInJpZ2h0XCIpe2Nhc2VcImxlZnRcIjpyZXR1cm5cInJvdy1yZXZlcnNlXCI7Y2FzZVwicmlnaHRcIjpyZXR1cm5cInJvd1wiO2Nhc2VcInRvcFwiOnJldHVyblwiY29sdW1uLXJldmVyc2VcIjtjYXNlXCJib3R0b21cIjpyZXR1cm5cImNvbHVtblwifX19O1xuICBnYXA6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgJHsoe2Rpc2FibGVkOmV9KT0+ZT91LmNzc2BcbiAgICAgICAgICAmIHtcbiAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICAgICAgICBgOm51bGx9XG5gfSw4NTEwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig3MDY4KSx0KX0sNzA2ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5SYXdJbnB1dD12b2lkIDA7Y29uc3Qgbz1yKG4oNzUxOCkpO3QuUmF3SW5wdXQ9by5kZWZhdWx0LmlucHV0YGAsdC5SYXdJbnB1dC5kaXNwbGF5TmFtZT1cIlJhd0lucHV0XCJ9LDMxMTk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDc5OSksdCl9LDc5OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5UZXh0QXJlYT12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9big2Njg5KSxpPXIobig3NTE4KSksbD1uKDk1MDcpLHM9big5NTA3KSxjPW4oMTMzNSksdT1uKDE5NDQpO3QuVGV4dEFyZWE9KDAsYS5mb3J3YXJkUmVmKSgoKGUsdCk9PigwLG8uanN4KShwLE9iamVjdC5hc3NpZ24oe2ZsZXhEaXJlY3Rpb246XCJjb2x1bW5cIixhbGlnbkl0ZW1zOlwiZmxleC1zdGFydFwifSx7Y2hpbGRyZW46KDAsby5qc3hzKShkLHtjaGlsZHJlbjpbISFlLmxhYmVsJiYoMCxvLmpzeCkodS5MYWJlbCx7dGV4dDplLmxhYmVsLGh0bWxGb3I6ZS5uYW1lLGhlbHBlclRleHQ6ZS5oZWxwZXJUZXh0fSksKDAsby5qc3gpKGYsT2JqZWN0LmFzc2lnbih7cmVmOnR9LGUse29uQ2hhbmdlOmUub25DaGFuZ2V9KSldfSl9KSkpKSx0LlRleHRBcmVhLmRpc3BsYXlOYW1lPVwiVGV4dEFyZWFcIjtjb25zdCBkPSgwLGkuZGVmYXVsdCkoYy5Cb3gpYFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICB3aWR0aDogMTAwJTtcbmAscD0oMCxpLmRlZmF1bHQpKGMuQm94KWBcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbmAsZj1pLmRlZmF1bHQudGV4dGFyZWFgXG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEJvcmRlcn07XG4gIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAscy5nZXRTdGF0dXNDb2xvcikoZSx0LFwiaW5wdXRCb3JkZXJcIil9O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIHdpZHRoOiAxMDAlO1xuICByZXNpemU6IG5vbmU7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gICR7bC5NaXhpbnMuc2Nyb2xsYmFyLnNtYWxsfTtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dENvbG9yfTtcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LnRleHR9O1xuICBmb250LXdlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5mb250V2VpZ2h0Lm5vcm1hbH07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9IDBweCAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAscy5nZXRTdGF0dXNDb2xvcikoZSx0LFwiaW5wdXRGb2N1c2VkXCIpfTtcbiAgfVxuXG4gICY6ZGlzYWJsZWQ6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICB9XG5gfSw4OTUxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigyMzUyKSx0KX0sMjM1MjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5UZXh0SW5wdXQ9dm9pZCAwO2NvbnN0IHI9big1ODkzKSxvPW4oNjY4OSksYT1uKDg4NzgpO3QuVGV4dElucHV0PSgwLG8uZm9yd2FyZFJlZikoKChlLHQpPT4oMCxyLmpzeCkoYS5CYXNlSW5wdXQsT2JqZWN0LmFzc2lnbih7cmVmOnQsdHlwZTpcInRleHRcIn0sZSkpKSksdC5UZXh0SW5wdXQuZGlzcGxheU5hbWU9XCJUZXh0SW5wdXRcIn0sMzMzOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Cb3g9dm9pZCAwO2NvbnN0IG89cihuKDc1MTgpKSxhPW4oODczMiksaT1uKDU0NTkpLGw9ezE6aS5QYWxldHRlLmJhY2tncm91bmQxLDI6aS5QYWxldHRlLmJhY2tncm91bmQyLDM6aS5QYWxldHRlLmJhY2tncm91bmQzLDQ6aS5QYWxldHRlLmJhY2tncm91bmQ0LDU6aS5QYWxldHRlLmJhY2tncm91bmQ1LDY6aS5QYWxldHRlLmJhY2tncm91bmQ2fTt0LkJveD1vLmRlZmF1bHQuZGl2YFxuICAvKipcbiAgICogU3R5bGUgU2Nyb2xsYmFyIGZvciBCb3hlcyB3aXRoIG92ZXJmbG93XG4gICAqL1xuICAke2EuTWl4aW5zLnNjcm9sbGJhci5iYXNlfVxuXG4gIGRpc3BsYXk6ICR7KHtkaXNwbGF5OmU9XCJmbGV4XCJ9KT0+ZX07XG4gIGZsZXgtZGlyZWN0aW9uOiAkeyh7ZmxleERpcmVjdGlvbjplPVwicm93XCJ9KT0+ZX07XG4gIGZsZXgtd3JhcDogJHsoe2ZsZXhXcmFwOmU9XCJub3dyYXBcIn0pPT5lfTtcbiAgYWxpZ24taXRlbXM6ICR7KHthbGlnbkl0ZW1zOmV9KT0+ZX07XG4gIGp1c3RpZnktY29udGVudDogJHsoe2p1c3RpZnlDb250ZW50OmV9KT0+ZX07XG4gIGdhcDogJHsoe3RoZW1lOmUsZ2FwOnR9KT0+dCYmZS5weFt0XX07XG4gIGFsaWduLXNlbGY6ICR7KHthbGlnblNlbGY6ZX0pPT5lfTtcbiAgZmxleC1iYXNpczogJHsoe2ZsZXhCYXNpczplfSk9PmV9O1xuICBmbGV4LWdyb3c6ICR7KHtmbGV4R3JvdzplfSk9PmV9O1xuICBmbGV4LXNocmluazogJHsoe2ZsZXhTaHJpbms6ZX0pPT5lfTtcbiAgb3JkZXI6ICR7KHtvcmRlcjplfSk9PmV9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZSxwYWRkaW5nOnR9KT0+dCYmZS5weFt0XX07XG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplLGJhY2tncm91bmQ6dH0pPT50JiZlLnBhbGV0dGVbbFt0XV19O1xuYCx0LkJveC5kaXNwbGF5TmFtZT1cIkJveFwifSwxMzM1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigzMzM5KSx0KX0sNjcxMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRlZmluaXRpb25MaXN0PXZvaWQgMDtjb25zdCBhPW4oNTg5MyksaT1vKG4oNzUxOCkpO3QuRGVmaW5pdGlvbkxpc3Q9ZT0+e3ZhcntkZWZpbml0aW9uczp0fT1lLG49cihlLFtcImRlZmluaXRpb25zXCJdKTtyZXR1cm4oMCxhLmpzeCkocyxPYmplY3QuYXNzaWduKHt9LG4se3JvbGU6XCJsaXN0XCJ9LHtjaGlsZHJlbjooQXJyYXkuaXNBcnJheSh0KT90OkFycmF5LmZyb20odCkpLm1hcCgoKFtlLHRdLG4pPT4oMCxhLmpzeHMpKGwsT2JqZWN0LmFzc2lnbih7cm9sZTpcImxpc3RpdGVtXCJ9LHtjaGlsZHJlbjpbKDAsYS5qc3gpKGMsT2JqZWN0LmFzc2lnbih7aWQ6YHRlcm0ke259YH0se2NoaWxkcmVuOmV9KSksKDAsYS5qc3gpKHUsT2JqZWN0LmFzc2lnbih7XCJhcmlhLWxhYmVsbGVkYnlcIjpgdGVybSR7bn1gfSx7Y2hpbGRyZW46dH0pKV19KSxgJHtlfS0ke259YCkpKX0pKX07Y29uc3QgbD1pLmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAzZnI7XG5gLHM9aS5kZWZhdWx0LmRsYFxuICBnYXA6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC5sYXJnZX1gfTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gJHtlLnB4LmJhc2V9YH07XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG5gLGM9aS5kZWZhdWx0LmR0YFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRIZWxwfTtcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLnNtYWxsfTtcbiAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ub3JtYWx9O1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgcGFkZGluZy1ib3R0b206ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuYCx1PWkuZGVmYXVsdC5kZGBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5zbWFsbH07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBwYWRkaW5nLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5gfSw1Mzc3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig2NzEwKSx0KX0sOTQzMTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5HbG9iYWxTdHlsZXM9dm9pZCAwO2NvbnN0IHI9big3NTE4KSxvPW4oNTc1KSxhPW4oOTUwNyksaT1uKDYyMTgpO3QuR2xvYmFsU3R5bGVzPXIuY3JlYXRlR2xvYmFsU3R5bGVgXG4gIC8qKiAtPiBEZWZpbmUgR2xvYmFsIENTUyBWYXJzICovXG4gIDpyb290IHtcbiAgICAtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbjogJHsoe3RoZW1lOmV9KT0+ZS50cmFuc2l0aW9uLmJhc2V9O1xuXG4gICAgZm9udC1mYW1pbHk6ICR7KHt0aGVtZTplfSk9PmUuZm9udEZhbWlseX07XG4gICAgLyogTWFwIG92ZXIgdGhlIHBhbGV0dGUga2V5cyBhbmQgY3JlYXRlIHZhcmlhYmxlcyBvdXQgb2YgdGhlbSAqL1xuICAgICR7by5nZXRSb290Q3NzVmFyc31cbiAgfVxuXG4gIC8qKiAtPiBAZm9udC1mYWNlIERlY2xhcmF0aW9uICovXG4gICR7KDAsYS5jcmVhdGVGb250RmFjZUNzcykoaS5Gb250cyl9XG5cbiAgLyoqIC0+IE1pY3JvIFJlc2V0ICovXG4gICoge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgLyoqXG4gICAgICogUHJldmVudCBicm93c2VyIGF1dG8td2VpZ2h0aW5nXG4gICAgICogQGxpbmsgaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9hbG1hbmFjL3Byb3BlcnRpZXMvZi9mb250LXN5bnRoZXNpcy9cbiAgICAgKi9cbiAgICBmb250LXN5bnRoZXNpczogbm9uZTtcbiAgfVxuXG4gIC8qKiAtPiBBcHBseSBHbG9iYWwgU3R5bGVzICovXG5cbiAgYm9keSxcbiAgOnJvb3Qge1xuICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMX07XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgZm9udC1mYW1pbHk6ICR7KHt0aGVtZTplfSk9PmUuZm9udEZhbWlseX07XG4gICAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ub3JtYWx9O1xuICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LnRleHR9O1xuICB9XG5cbiAgOjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyfTtcbiAgfVxuXG4gIC8qKiAtPiBSZWR1Y2VkIE1vdGlvbiAoQWNjZXNzaWJpbGl0eSkgKi9cbiAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uKSB7XG4gICAgOnJvb3Qge1xuICAgICAgLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb246ICR7KHt0aGVtZTplfSk9PmUudHJhbnNpdGlvbi5ub25lfTtcbiAgICB9XG4gIH1cbmB9LDEwNjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDk0MzEpLHQpfSwxMzEwOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LDk1MDc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDk2MzgpLHQpLG8obig0MjApLHQpfSw5OTg0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmdldE1vc3RSZWFkYWJsZT10LmRhcmtlbkNvbG9yPXQubGlnaHRlbkNvbG9yPXZvaWQgMDtjb25zdCBvPXIobig4MjA3KSk7dC5saWdodGVuQ29sb3I9KGUsdCk9PmEoZSxcImxpZ2h0ZW5cIix0KSx0LmRhcmtlbkNvbG9yPShlLHQpPT5hKGUsXCJkYXJrZW5cIix0KTtjb25zdCBhPShlLHQsbik9PntpZihuJiYobjwwfHxuPjEwMCkpdGhyb3cgbmV3IEVycm9yKGAke259IG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxMDBgKTtyZXR1cm4oMCxvLmRlZmF1bHQpKGUpW3RdKG4pLnRvU3RyaW5nKCl9O3QuZ2V0TW9zdFJlYWRhYmxlPShlLHQpPT5vLmRlZmF1bHQubW9zdFJlYWRhYmxlKGUsdCkudG9IZXhTdHJpbmcoKX0sMzQ3MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGE9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5JY29uU2l6ZT10Lkljb25TZXQ9dC5UcmFuc2l0aW9uPXQuTGluZUhlaWdodD10LkZvbnRXZWlnaHQ9dC5Gb250U2l6ZT10LkZvbnRGYW1pbHk9dC5TaGFkb3c9dC5SYWRpdXM9dC5Vbml0UHg9dC5Vbml0PXQuU2l6ZU5hbWU9dC5TaXplPXQuQ29sb3I9dm9pZCAwO2NvbnN0IGk9YShuKDE1MjEpKSxsPWEobigyNzcyKSk7dC5Db2xvcj17d2hpdGU6XCIjRkZGRkZGXCIsbGlnaHRHcmF5MTpcIiNGQUZCRkVcIixsaWdodEdyYXkyOlwiI0YzRjVGOFwiLGxpZ2h0R3JheTM6XCIjRUNFRUYxXCIsbGlnaHRHcmF5NDpcIiNERERGRTRcIixsaWdodEdyYXk1OlwiI0M5Q0JEMlwiLG5ldXRyYWxHcmF5OlwiIzdEODA4QVwiLG5ldXRyYWxHcmF5ODA6XCJyZ2JhKDEyNSwxMjgsMTM4LDAuOClcIixzaWx2ZXJHcmF5OlwiI0MwQzFDMlwiLGRhcmtHcmF5MTpcIiM1MzU2NUZcIixkYXJrR3JheTI6XCIjMzgzQTQwXCIsZGFya0dyYXkzOlwiIzJGMzEzNlwiLGRhcmtHcmF5NDpcIiMyNDI2MkJcIixkYXJrR3JheTU6XCIjMUUxRjIzXCIsZGFya0dyYXk2OlwiIzExMTIxNFwiLG9wZW5GaW5EYXJrZXN0OlwiIzNEMzlDRFwiLG9wZW5GaW5EYXJrZXI6XCIjNDY0MkUwXCIsb3BlbkZpbjpcIiM1MDRDRkZcIixvcGVuRmluTGlnaHQ6XCIjNTI1NEZCXCIsb3BlbkZpbkxpZ2h0ZXI6XCIjNUM1RUZFXCIsb3BlbkZpbkxpZ2h0ZXN0OlwiIzY4NjRGRlwiLGZ1bmN0aW9uYWwxOlwiIzIwNzczNVwiLGZ1bmN0aW9uYWwyOlwiIzQ2QzhGMVwiLGZ1bmN0aW9uYWwzOlwiIzBBNzZEM1wiLGZ1bmN0aW9uYWw0OlwiIzZDQURFNVwiLGZ1bmN0aW9uYWw1OlwiIzBBNzZEM1wiLGZ1bmN0aW9uYWw2OlwiIzg4MkJGRVwiLGZ1bmN0aW9uYWw3OlwiI0YzMTgxOFwiLGZ1bmN0aW9uYWw4OlwiI0M5MzQwMFwiLGZ1bmN0aW9uYWw5OlwiI0ZGNUU2MFwiLGZ1bmN0aW9uYWwxMDpcIiNGNDhGMDBcIixwdXJwbGU6XCIjOEM2MUZGXCIsbGlnaHRibHVlOlwiIzM2QzNGRVwiLGFxdWE6XCIjMDBDQzg4XCIseWVsbG93OlwiI0ZGRUIwMFwiLHNhbG1vbjpcIiNGRjhDNENcIixwaW5rOlwiI0ZGNUU2MFwiLGxpZ2h0cGluazpcIiNGRjhGQjhcIix3aGl0ZTAwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjApXCIsd2hpdGUxMDpcInJnYmEoMjU1LDI1NSwyNTUsMC4xKVwiLHdoaXRlMjA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMilcIix3aGl0ZTMwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjMpXCIsd2hpdGU0MDpcInJnYmEoMjU1LDI1NSwyNTUsMC40KVwiLHdoaXRlNTA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNSlcIix3aGl0ZTYwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjYpXCIsd2hpdGU3MDpcInJnYmEoMjU1LDI1NSwyNTUsMC43KVwiLHdoaXRlODA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuOClcIix3aGl0ZTkwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjkpXCIsYmxhY2swMDpcInJnYmEoMCwwLDAsMC4wKVwiLGJsYWNrMTA6XCJyZ2JhKDAsMCwwLDAuMSlcIixibGFjazIwOlwicmdiYSgwLDAsMCwwLjIpXCIsYmxhY2szMDpcInJnYmEoMCwwLDAsMC4zKVwiLGJsYWNrNDA6XCJyZ2JhKDAsMCwwLDAuNClcIixibGFjazUwOlwicmdiYSgwLDAsMCwwLjUpXCIsYmxhY2s2MDpcInJnYmEoMCwwLDAsMC42KVwiLGJsYWNrNzA6XCJyZ2JhKDAsMCwwLDAuNylcIixibGFjazgwOlwicmdiYSgwLDAsMCwwLjgpXCIsYmxhY2s5MDpcInJnYmEoMCwwLDAsMC45KVwiLHRyYW5zcGFyZW50OlwidHJhbnNwYXJlbnRcIn0sdC5TaXplPXt4c21hbGw6XCJ4c21hbGxcIixzbWFsbDpcInNtYWxsXCIsYmFzZTpcImJhc2VcIixsYXJnZTpcImxhcmdlXCIseGxhcmdlOlwieGxhcmdlXCIseHhsYXJnZTpcInh4bGFyZ2VcIix4eHhsYXJnZTpcInh4eGxhcmdlXCIseHh4eGxhcmdlOlwieHh4eGxhcmdlXCJ9LHQuU2l6ZU5hbWU9e1t0LlNpemUueHNtYWxsXTpcIkV4dHJhIFNtYWxsXCIsW3QuU2l6ZS5zbWFsbF06XCJTbWFsbFwiLFt0LlNpemUuYmFzZV06XCJCYXNlXCIsW3QuU2l6ZS5sYXJnZV06XCJMYXJnZVwiLFt0LlNpemUueGxhcmdlXTpcIkV4dHJhIExhcmdlXCIsW3QuU2l6ZS54eGxhcmdlXTpcIjJYIExhcmdlXCIsW3QuU2l6ZS54eHhsYXJnZV06XCIzWCBMYXJnZVwiLFt0LlNpemUueHh4eGxhcmdlXTpcIjRYIExhcmdlXCJ9LHQuVW5pdD17W3QuU2l6ZS54c21hbGxdOjQsW3QuU2l6ZS5zbWFsbF06OCxbdC5TaXplLmJhc2VdOjEyLFt0LlNpemUubGFyZ2VdOjE2LFt0LlNpemUueGxhcmdlXToyMCxbdC5TaXplLnh4bGFyZ2VdOjI0LFt0LlNpemUueHh4bGFyZ2VdOjMyLFt0LlNpemUueHh4eGxhcmdlXTo0OH0sdC5Vbml0UHg9e1t0LlNpemUueHNtYWxsXTpcIjRweFwiLFt0LlNpemUuc21hbGxdOlwiOHB4XCIsW3QuU2l6ZS5iYXNlXTpcIjEycHhcIixbdC5TaXplLmxhcmdlXTpcIjE2cHhcIixbdC5TaXplLnhsYXJnZV06XCIyMHB4XCIsW3QuU2l6ZS54eGxhcmdlXTpcIjI0cHhcIixbdC5TaXplLnh4eGxhcmdlXTpcIjMycHhcIixbdC5TaXplLnh4eHhsYXJnZV06XCI0OHB4XCJ9LHQuUmFkaXVzPXtbdC5TaXplLnhzbWFsbF06XCIycHhcIixbdC5TaXplLnNtYWxsXTpcIjRweFwiLFt0LlNpemUuYmFzZV06XCI4cHhcIixbdC5TaXplLmxhcmdlXTpcIjI0cHhcIixwaWxsOlwiMTAwdmhcIixyb3VuZDpcIjUwJVwiLG5vbmU6XCIwXCJ9LHQuU2hhZG93PXtbdC5TaXplLmJhc2VdOlwiMCA0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yNSlcIn0sdC5Gb250RmFtaWx5PVtcIkludGVyXCIsXCJzeXN0ZW0tdWlcIixcIkJsaW5rTWFjU3lzdGVtRm9udFwiLFwiU2Vnb2UgVUlcIixcIlJvYm90b1wiLFwiT3h5Z2VuLVNhbnNcIixcIlVidW50dVwiLFwiQ2FudGFyZWxsXCIsXCJIZWx2ZXRpY2EgTmV1ZVwiLFwic2Fucy1zZXJpZlwiXS5qb2luKFwiLFwiKSx0LkZvbnRTaXplPXtbdC5TaXplLnhzbWFsbF06XCI4cHhcIixbdC5TaXplLnNtYWxsXTpcIjEwcHhcIixbdC5TaXplLmJhc2VdOlwiMTJweFwiLFt0LlNpemUubGFyZ2VdOlwiMTRweFwiLFt0LlNpemUueGxhcmdlXTpcIjE2cHhcIixbdC5TaXplLnh4bGFyZ2VdOlwiMThweFwiLFt0LlNpemUueHh4bGFyZ2VdOlwiMjBweFwiLFt0LlNpemUueHh4eGxhcmdlXTpcIjQwcHhcIn0sdC5Gb250V2VpZ2h0PXtub3JtYWw6NDAwLGJvbGQ6NjAwfSx0LkxpbmVIZWlnaHQ9e3VpOjEsaGVhZGluZzoxLjIsdGV4dDoxLjV9LHQuVHJhbnNpdGlvbj17YmFzZTpcIjIwMG1zIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpXCIsbm9uZTpcIjBtc1wifSx0Lkljb25TZXQ9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLGwpLHQuSWNvblNpemU9e1t0LlNpemUueHNtYWxsXTp0LlVuaXRQeC5zbWFsbCxbdC5TaXplLnNtYWxsXTp0LlVuaXRQeC5iYXNlLFt0LlNpemUuYmFzZV06XCIxNXB4XCIsW3QuU2l6ZS5sYXJnZV06dC5Vbml0UHgueGxhcmdlLFt0LlNpemUueGxhcmdlXTp0LlVuaXRQeC54eGxhcmdlLFt0LlNpemUueHhsYXJnZV06dC5Vbml0UHgueHh4bGFyZ2UsW3QuU2l6ZS54eHhsYXJnZV06dC5Vbml0UHgueHh4eGxhcmdlfX0sOTI3MjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5jcmVhdGVGb250RmFjZUNzcz12b2lkIDA7Y29uc3Qgcj1uKDc1MTgpLG89bigzNDcxKTt0LmNyZWF0ZUZvbnRGYWNlQ3NzPWZ1bmN0aW9uKGUpe3JldHVybiByLmNzc2BcbiAgICAke2UucmVndWxhciYmci5jc3NgXG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gICAgICAgIHNyYzogdXJsKCR7ZS5yZWd1bGFyfSkgZm9ybWF0KCd3b2ZmMicpO1xuICAgICAgICBmb250LXdlaWdodDogJHtvLkZvbnRXZWlnaHQubm9ybWFsfTtcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICBmb250LWRpc3BsYXk6IGZhbGxiYWNrO1xuICAgICAgfVxuICAgIGB9XG4gICAgJHtlLml0YWxpYyYmci5jc3NgXG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gICAgICAgIHNyYzogdXJsKCR7ZS5pdGFsaWN9KSBmb3JtYXQoJ3dvZmYyJyk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAke28uRm9udFdlaWdodC5ub3JtYWx9O1xuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgIGZvbnQtZGlzcGxheTogZmFsbGJhY2s7XG4gICAgICB9XG4gICAgYH1cbiAgICAke2Uuc2VtaUJvbGQmJnIuY3NzYFxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICAgICAgICBzcmM6IHVybCgke2Uuc2VtaUJvbGR9KSBmb3JtYXQoJ3dvZmYyJyk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAke28uRm9udFdlaWdodC5ib2xkfTtcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICBmb250LWRpc3BsYXk6IGZhbGxiYWNrO1xuICAgICAgfVxuICAgIGB9XG4gICAgJHtlLnNlbWlCb2xkSXRhbGljJiZyLmNzc2BcbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgICAgICAgc3JjOiB1cmwoJHtlLnNlbWlCb2xkSXRhbGljfSkgZm9ybWF0KCd3b2ZmMicpO1xuICAgICAgICBmb250LXdlaWdodDogJHtvLkZvbnRXZWlnaHQuYm9sZH07XG4gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgICAgZm9udC1kaXNwbGF5OiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICBgfVxuICBgfX0sNjcxNDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5jcmVhdGVUaGVtZT12b2lkIDA7Y29uc3Qgcj1uKDM0NzEpLG89big5OTg0KSxhPW4oNTQ1OSksaT17Zm9udEZhbWlseTpyLkZvbnRGYW1pbHksZm9udFNpemU6ci5Gb250U2l6ZSxmb250V2VpZ2h0OnIuRm9udFdlaWdodCxsaW5lSGVpZ2h0OnIuTGluZUhlaWdodCxpY29uU2l6ZTpyLkljb25TaXplLHJhZGl1czpyLlJhZGl1cyxzaGFkb3c6ci5TaGFkb3csdHJhbnNpdGlvbjpyLlRyYW5zaXRpb24sdW5pdDpyLlVuaXQscHg6ci5Vbml0UHh9LGw9KGUsdCk9Pih7W2Ake2V9QWN0aXZlYF06KDAsby5kYXJrZW5Db2xvcikodCwyKSxbYCR7ZX1Ib3ZlcmBdOigwLG8ubGlnaHRlbkNvbG9yKSh0LDUpLFtgJHtlfUZvY3VzZWRgXTooMCxvLmdldE1vc3RSZWFkYWJsZSkodCxbci5Db2xvci53aGl0ZSxyLkNvbG9yLmRhcmtHcmF5NV0pLFtgJHtlfVRleHRgXTooMCxvLmdldE1vc3RSZWFkYWJsZSkodCxbci5Db2xvci53aGl0ZSxyLkNvbG9yLmRhcmtHcmF5NV0pfSk7dC5jcmVhdGVUaGVtZT1lPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkse3BhbGV0dGU6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSksbChhLlBhbGV0dGUuYnJhbmRQcmltYXJ5LGUuYnJhbmRQcmltYXJ5KSksbChhLlBhbGV0dGUuYnJhbmRTZWNvbmRhcnksZS5icmFuZFNlY29uZGFyeSkpfSl9LDU3NTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TVVBQT1JURURfTEFOR1VBR0VTPXQuZ2V0U3RhdHVzQ29sb3I9dC5nZXRSb290Q3NzVmFycz10LmdldFZhcmlhbnRDU1M9dm9pZCAwO2NvbnN0IHI9big1NDU5KTt0LmdldFZhcmlhbnRDU1M9KGUsdCk9Pm49PmVbdF1bblt0XV0sdC5nZXRSb290Q3NzVmFycz0oe3RoZW1lOmV9KT0+T2JqZWN0LmtleXMoci5QYWxldHRlKS5tYXAoKHQ9PmAtLW9wZW5maW4tdWktJHt0fTogJHtlLnBhbGV0dGVbdF19O2ApKS5qb2luKFwiXFxuXCIpLHQuZ2V0U3RhdHVzQ29sb3I9KGUsdCxuKT0+e3N3aXRjaCh0KXtjYXNlXCJhY3RpdmVcIjpyZXR1cm4gZS5wYWxldHRlLnN0YXR1c0FjdGl2ZTtjYXNlXCJjcml0aWNhbFwiOnJldHVybiBlLnBhbGV0dGUuc3RhdHVzQ3JpdGljYWw7Y2FzZVwid2FybmluZ1wiOnJldHVybiBlLnBhbGV0dGUuc3RhdHVzV2FybmluZztjYXNlXCJzdWNjZXNzXCI6cmV0dXJuIGUucGFsZXR0ZS5zdGF0dXNTdWNjZXNzO2RlZmF1bHQ6cmV0dXJuIG4/ZS5wYWxldHRlW25dOlwiaW5oZXJpdFwifX0sdC5TVVBQT1JURURfTEFOR1VBR0VTPVtcImVuLVVTXCIsXCJqYS1KUFwiLFwiemgtQ05cIixcImtvLUtSXCIsXCJydS1SVVwiLFwiZGUtREVcIixcInpoLUhhbnRcIl19LDk2Mzg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDk5ODQpLHQpLG8obigzNDcxKSx0KSxvKG4oOTI3MiksdCksbyhuKDY3MTQpLHQpLG8obig1NzUpLHQpLG8obigxNDQxKSx0KSxvKG4oODczMiksdCksbyhuKDU0NTkpLHQpLG8obig1MzE3KSx0KX0sMTQ0MTooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSw4NzMyOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk1peGlucz12b2lkIDA7Y29uc3Qgcj1uKDM0NzEpLG89big3NTE4KSxhPW8uY3NzYFxuICB1c2VyLXNlbGVjdDogbm9uZTtcbmAsaT1vLmNzc2BcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG5gLGw9by5jc3NgXG4gICY6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICB3aWR0aDogdmFyKC0tc2Nyb2xsYmFyU2l6ZSwgJHtyLlVuaXRQeC54c21hbGx9KTtcbiAgICBoZWlnaHQ6IHZhcigtLXNjcm9sbGJhclNpemUsICR7ci5Vbml0UHgueHNtYWxsfSk7XG4gIH1cblxuICAmOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gICAgYmFja2dyb3VuZDogJHtyLkNvbG9yLm5ldXRyYWxHcmF5ODB9O1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXNjcm9sbGJhclNpemUsICR7ci5Vbml0UHgueHNtYWxsfSk7XG4gICAgb3BhY2l0eTogMC44O1xuICB9XG5cbiAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgIGJhY2tncm91bmQ6ICR7ci5Db2xvci53aGl0ZTgwfTtcbiAgICB3aWR0aDogdmFyKC0tc2Nyb2xsYmFyU2l6ZSwgJHtyLlVuaXRQeC54c21hbGx9KTtcbiAgICBoZWlnaHQ6IHZhcigtLXNjcm9sbGJhclNpemUsICR7ci5Vbml0UHgueHNtYWxsfSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2Nyb2xsYmFyU2l6ZSwgJHtyLlVuaXRQeC54c21hbGx9KTtcbiAgICBvcGFjaXR5OiAwLjg7XG4gIH1cbmAscz1vLmNzc2BcbiAgLS1zY3JvbGxiYXJTaXplOiAycHg7XG4gICR7bH07XG5gLGM9by5jc3NgXG4gIC13ZWJraXQtYXBwLXJlZ2lvbjogZHJhZztcbmAsdT1vLmNzc2BcbiAgLXdlYmtpdC1hcHAtcmVnaW9uOiBuby1kcmFnO1xuYDt0Lk1peGlucz17bm9TZWxlY3Q6YSx0ZXh0T3ZlcmZsb3c6aSxzY3JvbGxiYXI6e1tyLlNpemUuYmFzZV06bCxbci5TaXplLnNtYWxsXTpzfSxhcHBSZWdpb246e2RyYWc6Yyxub0RyYWc6dX19fSw1NDU5OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5QYWxldHRlPXZvaWQgMCx0LlBhbGV0dGU9e2JhY2tncm91bmQxOlwiYmFja2dyb3VuZDFcIixiYWNrZ3JvdW5kMjpcImJhY2tncm91bmQyXCIsYmFja2dyb3VuZDM6XCJiYWNrZ3JvdW5kM1wiLGJhY2tncm91bmQ0OlwiYmFja2dyb3VuZDRcIixiYWNrZ3JvdW5kNTpcImJhY2tncm91bmQ1XCIsYmFja2dyb3VuZDY6XCJiYWNrZ3JvdW5kNlwiLGJyYW5kUHJpbWFyeTpcImJyYW5kUHJpbWFyeVwiLGJyYW5kU2Vjb25kYXJ5OlwiYnJhbmRTZWNvbmRhcnlcIixicmFuZFByaW1hcnlBY3RpdmU6XCJicmFuZFByaW1hcnlBY3RpdmVcIixicmFuZFByaW1hcnlIb3ZlcjpcImJyYW5kUHJpbWFyeUhvdmVyXCIsYnJhbmRQcmltYXJ5Rm9jdXNlZDpcImJyYW5kUHJpbWFyeUZvY3VzZWRcIixicmFuZFByaW1hcnlUZXh0OlwiYnJhbmRQcmltYXJ5VGV4dFwiLGJyYW5kU2Vjb25kYXJ5QWN0aXZlOlwiYnJhbmRTZWNvbmRhcnlBY3RpdmVcIixicmFuZFNlY29uZGFyeUhvdmVyOlwiYnJhbmRTZWNvbmRhcnlIb3ZlclwiLGJyYW5kU2Vjb25kYXJ5Rm9jdXNlZDpcImJyYW5kU2Vjb25kYXJ5Rm9jdXNlZFwiLGJyYW5kU2Vjb25kYXJ5VGV4dDpcImJyYW5kU2Vjb25kYXJ5VGV4dFwiLGlucHV0QmFja2dyb3VuZDpcImlucHV0QmFja2dyb3VuZFwiLGlucHV0Q29sb3I6XCJpbnB1dENvbG9yXCIsaW5wdXRQbGFjZWhvbGRlcjpcImlucHV0UGxhY2Vob2xkZXJcIixpbnB1dERpc2FibGVkOlwiaW5wdXREaXNhYmxlZFwiLGlucHV0Rm9jdXNlZDpcImlucHV0Rm9jdXNlZFwiLGlucHV0Qm9yZGVyOlwiaW5wdXRCb3JkZXJcIixzdGF0dXNTdWNjZXNzOlwic3RhdHVzU3VjY2Vzc1wiLHN0YXR1c1dhcm5pbmc6XCJzdGF0dXNXYXJuaW5nXCIsc3RhdHVzQ3JpdGljYWw6XCJzdGF0dXNDcml0aWNhbFwiLHN0YXR1c0FjdGl2ZTpcInN0YXR1c0FjdGl2ZVwiLHRleHREZWZhdWx0OlwidGV4dERlZmF1bHRcIix0ZXh0SGVscDpcInRleHRIZWxwXCIsdGV4dEluYWN0aXZlOlwidGV4dEluYWN0aXZlXCIsYm9yZGVyTmV1dHJhbDpcImJvcmRlck5ldXRyYWxcIixjb250ZW50QmFja2dyb3VuZDE6XCJjb250ZW50QmFja2dyb3VuZDFcIixjb250ZW50QmFja2dyb3VuZDI6XCJjb250ZW50QmFja2dyb3VuZDJcIixjb250ZW50QmFja2dyb3VuZDM6XCJjb250ZW50QmFja2dyb3VuZDNcIixjb250ZW50QmFja2dyb3VuZDQ6XCJjb250ZW50QmFja2dyb3VuZDRcIixjb250ZW50QmFja2dyb3VuZDU6XCJjb250ZW50QmFja2dyb3VuZDVcIixsaW5rRGVmYXVsdDpcImxpbmtEZWZhdWx0XCIsbGlua0hvdmVyOlwibGlua0hvdmVyXCJ9fSw1MzE3OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LDQyNjY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDk0ODMpLHQpfSw5NDgzOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk9wZW5GaW5EYXJrVGhlbWU9dC5PcGVuRmluTGlnaHRUaGVtZT12b2lkIDA7Y29uc3Qgcj1uKDU0NTkpLG89bigzNDcxKSxhPW4oNjcxNCksaT17W3IuUGFsZXR0ZS5icmFuZFByaW1hcnldOm8uQ29sb3Iub3BlbkZpbixbci5QYWxldHRlLnN0YXR1c1N1Y2Nlc3NdOm8uQ29sb3IuZnVuY3Rpb25hbDEsW3IuUGFsZXR0ZS5zdGF0dXNXYXJuaW5nXTpvLkNvbG9yLmZ1bmN0aW9uYWwxMCxbci5QYWxldHRlLnN0YXR1c0NyaXRpY2FsXTpvLkNvbG9yLmZ1bmN0aW9uYWw3LFtyLlBhbGV0dGUuc3RhdHVzQWN0aXZlXTpvLkNvbG9yLmZ1bmN0aW9uYWwzLFtyLlBhbGV0dGUuYm9yZGVyTmV1dHJhbF06by5Db2xvci5zaWx2ZXJHcmF5LFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQxXTpvLkNvbG9yLm9wZW5GaW4sW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDJdOlwiIzAwMDAwMFwiLFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQzXTpcIiMwMDAwMDBcIixbci5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kNF06XCIjMDAwMDAwXCIsW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDVdOlwiIzAwMDAwMFwiLFtyLlBhbGV0dGUubGlua0RlZmF1bHRdOm8uQ29sb3IuZnVuY3Rpb25hbDQsW3IuUGFsZXR0ZS5saW5rSG92ZXJdOm8uQ29sb3IuZnVuY3Rpb25hbDV9O3QuT3BlbkZpbkxpZ2h0VGhlbWU9KDAsYS5jcmVhdGVUaGVtZSkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtbci5QYWxldHRlLmJhY2tncm91bmQxXTpvLkNvbG9yLndoaXRlLFtyLlBhbGV0dGUuYmFja2dyb3VuZDJdOm8uQ29sb3IubGlnaHRHcmF5MSxbci5QYWxldHRlLmJhY2tncm91bmQzXTpvLkNvbG9yLmxpZ2h0R3JheTIsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNF06by5Db2xvci5saWdodEdyYXkzLFtyLlBhbGV0dGUuYmFja2dyb3VuZDVdOm8uQ29sb3IubGlnaHRHcmF5Myxbci5QYWxldHRlLmJhY2tncm91bmQ2XTpvLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS5icmFuZFNlY29uZGFyeV06by5Db2xvci5saWdodEdyYXk0LFtyLlBhbGV0dGUuaW5wdXRCYWNrZ3JvdW5kXTpvLkNvbG9yLmxpZ2h0R3JheTMsW3IuUGFsZXR0ZS5pbnB1dENvbG9yXTpvLkNvbG9yLmRhcmtHcmF5NSxbci5QYWxldHRlLmlucHV0UGxhY2Vob2xkZXJdOm8uQ29sb3IuZGFya0dyYXkyLFtyLlBhbGV0dGUuaW5wdXREaXNhYmxlZF06by5Db2xvci5uZXV0cmFsR3JheSxbci5QYWxldHRlLmlucHV0Rm9jdXNlZF06by5Db2xvci5saWdodEdyYXk1LFtyLlBhbGV0dGUuaW5wdXRCb3JkZXJdOm8uQ29sb3IubmV1dHJhbEdyYXksW3IuUGFsZXR0ZS50ZXh0RGVmYXVsdF06by5Db2xvci5kYXJrR3JheTUsW3IuUGFsZXR0ZS50ZXh0SGVscF06by5Db2xvci5uZXV0cmFsR3JheSxbci5QYWxldHRlLnRleHRJbmFjdGl2ZV06by5Db2xvci5uZXV0cmFsR3JheX0pKSx0Lk9wZW5GaW5EYXJrVGhlbWU9KDAsYS5jcmVhdGVUaGVtZSkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtbci5QYWxldHRlLmJhY2tncm91bmQxXTpvLkNvbG9yLmRhcmtHcmF5Nixbci5QYWxldHRlLmJhY2tncm91bmQyXTpvLkNvbG9yLmRhcmtHcmF5NSxbci5QYWxldHRlLmJhY2tncm91bmQzXTpvLkNvbG9yLmRhcmtHcmF5NCxbci5QYWxldHRlLmJhY2tncm91bmQ0XTpvLkNvbG9yLmRhcmtHcmF5Myxbci5QYWxldHRlLmJhY2tncm91bmQ1XTpvLkNvbG9yLmRhcmtHcmF5Mixbci5QYWxldHRlLmJhY2tncm91bmQ2XTpvLkNvbG9yLmRhcmtHcmF5MSxbci5QYWxldHRlLmJyYW5kU2Vjb25kYXJ5XTpvLkNvbG9yLmRhcmtHcmF5Mixbci5QYWxldHRlLmlucHV0QmFja2dyb3VuZF06by5Db2xvci5kYXJrR3JheTEsW3IuUGFsZXR0ZS5pbnB1dENvbG9yXTpvLkNvbG9yLndoaXRlLFtyLlBhbGV0dGUuaW5wdXRQbGFjZWhvbGRlcl06by5Db2xvci5saWdodEdyYXk1LFtyLlBhbGV0dGUuaW5wdXREaXNhYmxlZF06by5Db2xvci5uZXV0cmFsR3JheSxbci5QYWxldHRlLmlucHV0Rm9jdXNlZF06by5Db2xvci5saWdodEdyYXk1LFtyLlBhbGV0dGUuaW5wdXRCb3JkZXJdOm8uQ29sb3IubmV1dHJhbEdyYXksW3IuUGFsZXR0ZS50ZXh0RGVmYXVsdF06by5Db2xvci53aGl0ZSxbci5QYWxldHRlLnRleHRIZWxwXTpvLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS50ZXh0SW5hY3RpdmVdOm8uQ29sb3IubmV1dHJhbEdyYXl9KSl9LDQyMDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5UaGVtZVByb3ZpZGVyPXZvaWQgMDtjb25zdCByPW4oNTg5Myksbz1uKDc1MTgpLGE9bigzMTkwKSxpPW4oNzA4OCksbD1uKDEwNjkpO3QuVGhlbWVQcm92aWRlcj0oe2NoaWxkcmVuOmUsdGhlbWVzOnQsc2NoZW1lOm49YS5Db2xvclNjaGVtZS5zeXN0ZW19KT0+e2NvbnN0IHM9KDAsaS51c2VUaGVtZSkoe3RoZW1lczp0LHNjaGVtZTpufSk7cmV0dXJuKDAsci5qc3gpKG8uVGhlbWVQcm92aWRlcixPYmplY3QuYXNzaWduKHt0aGVtZTpzfSx7Y2hpbGRyZW46KDAsci5qc3hzKShyLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsci5qc3gpKGwuR2xvYmFsU3R5bGVzLHt9KSxlXX0pfSkpfX0sMzg3NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMTA2OSksdCksbyhuKDEzMTApLHQpLG8obig5NTA3KSx0KX0sOTc1ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Db250YWN0U3RhdHVzSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9cihuKDc1MTgpKSxpPW4oMTMzMyksbD17YXZhaWxhYmxlOigwLG8uanN4KShpLkNoZWNrU1ZHLHt9KSxhd2F5OigwLG8uanN4KShpLkJ1c3lTVkcse30pLFwiZG8tbm90LWRpc3R1cmJcIjooMCxvLmpzeCkoaS5Eb05vdERpc3R1cmJTVkcse30pLG9mZmxpbmU6KDAsby5qc3gpKGkuT2ZmbGluZVNWRyx7fSksYnVzeTpudWxsfTt0LkNvbnRhY3RTdGF0dXNJY29uPSh7b25saW5lU3RhdHVzOmV9KT0+ZT8oMCxvLmpzeCkocyxPYmplY3QuYXNzaWduKHtvbmxpbmVTdGF0dXM6ZX0se2NoaWxkcmVuOmxbZV18fG51bGx9KSk6bnVsbDtjb25zdCBzPWEuZGVmYXVsdC5kaXZgXG4gIGJvcmRlcjogMS42cHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQxfTtcblxuICBiYWNrZ3JvdW5kOiAkeyh7b25saW5lU3RhdHVzOmV9KT0+XCJidXN5XCI9PT1lP1wiI0MyMTMxM1wiOlwid2hpdGVcIn07XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcblxuICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG5cbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA3OC45NSU7XG4gIHJpZ2h0OiAtNy4wMiU7XG4gIHRvcDogNzcuMTIlO1xuICBib3R0b206IC00LjI0JTtcbmB9LDEzMzM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuT2ZmbGluZVNWRz10LkRvTm90RGlzdHVyYlNWRz10LkJ1c3lTVkc9dC5DaGVja1NWRz12b2lkIDA7Y29uc3Qgcj1uKDU4OTMpO3QuQ2hlY2tTVkc9KCk9PigwLHIuanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0se2NoaWxkcmVuOigwLHIuanN4KShcInBhdGhcIix7ZDpcIk04IDBDOC43MzQzOCAwIDkuNDQwMSAwLjA5NjM1NDIgMTAuMTE3MiAwLjI4OTA2M0MxMC43OTQzIDAuNDgxNzcxIDExLjQyOTcgMC43NTI2MDQgMTIuMDIzNCAxLjEwMTU2QzEyLjYxNzIgMS40NTA1MiAxMy4xNTYzIDEuODY5NzkgMTMuNjQwNiAyLjM1OTM4QzE0LjEzMDIgMi44NDM3NSAxNC41NDk1IDMuMzgyODEgMTQuODk4NCAzLjk3NjU2QzE1LjI0NzQgNC41NzAzMSAxNS41MTgyIDUuMjA1NzMgMTUuNzEwOSA1Ljg4MjgxQzE1LjkwMzYgNi41NTk5IDE2IDcuMjY1NjMgMTYgOEMxNiA4LjcyOTE3IDE1LjkwMzYgOS40MzQ5IDE1LjcxMDkgMTAuMTE3MkMxNS41MTgyIDEwLjc5NDMgMTUuMjQ3NCAxMS40Mjk3IDE0Ljg5ODQgMTIuMDIzNEMxNC41NDk1IDEyLjYxNzIgMTQuMTMwMiAxMy4xNTg5IDEzLjY0MDYgMTMuNjQ4NEMxMy4xNTYzIDE0LjEzMjggMTIuNjE3MiAxNC41NDk1IDEyLjAyMzQgMTQuODk4NEMxMS40Mjk3IDE1LjI0NzQgMTAuNzkxNyAxNS41MTgyIDEwLjEwOTQgMTUuNzEwOUM5LjQzMjI5IDE1LjkwMzYgOC43MjkxNyAxNiA4IDE2QzcuMjcwODMgMTYgNi41NjUxIDE1LjkwMzYgNS44ODI4MSAxNS43MTA5QzUuMjA1NzMgMTUuNTE4MiA0LjU3MDMxIDE1LjI0NzQgMy45NzY1NiAxNC44OTg0QzMuMzgyODEgMTQuNTQ5NSAyLjg0MTE1IDE0LjEzMjggMi4zNTE1NiAxMy42NDg0QzEuODY3MTkgMTMuMTU4OSAxLjQ1MDUyIDEyLjYxNzIgMS4xMDE1NiAxMi4wMjM0QzAuNzUyNjA0IDExLjQyOTcgMC40ODE3NzEgMTAuNzk0MyAwLjI4OTA2MyAxMC4xMTcyQzAuMDk2MzU0MiA5LjQzNDkgMCA4LjcyOTE3IDAgOEMwIDcuMjcwODMgMC4wOTYzNTQyIDYuNTY3NzEgMC4yODkwNjMgNS44OTA2M0MwLjQ4MTc3MSA1LjIwODMzIDAuNzUyNjA0IDQuNTcwMzEgMS4xMDE1NiAzLjk3NjU2QzEuNDUwNTIgMy4zODI4MSAxLjg2NzE5IDIuODQzNzUgMi4zNTE1NiAyLjM1OTM4QzIuODQxMTUgMS44Njk3OSAzLjM4MjgxIDEuNDUwNTIgMy45NzY1NiAxLjEwMTU2QzQuNTcwMzEgMC43NTI2MDQgNS4yMDU3MyAwLjQ4MTc3MSA1Ljg4MjgxIDAuMjg5MDYzQzYuNTY1MSAwLjA5NjM1NDIgNy4yNzA4MyAwIDggMFpNMTAuNjMyOCA1LjY4NzVDMTAuNDI0NSA1LjY4NzUgMTAuMjQ3NCA1Ljc2MDQyIDEwLjEwMTYgNS45MDYyNUw3LjI3MzQ0IDguNzVMNi4yNjU2MyA3Ljc1QzYuMTE5NzkgNy42MDQxNyA1Ljk0NTMxIDcuNTMxMjUgNS43NDIxOSA3LjUzMTI1QzUuNjQzMjMgNy41MzEyNSA1LjU0OTQ4IDcuNTUyMDggNS40NjA5NCA3LjU5Mzc1QzUuMzcyNCA3LjYzNTQyIDUuMjkxNjcgNy42OTI3MSA1LjIxODc1IDcuNzY1NjNDNS4xNTEwNCA3LjgzMzMzIDUuMDk2MzUgNy45MTE0NiA1LjA1NDY5IDhDNS4wMTMwMiA4LjA4ODU0IDQuOTkyMTkgOC4xODIyOSA0Ljk5MjE5IDguMjgxMjVDNC45OTIxOSA4LjQ4OTU4IDUuMDY1MSA4LjY2NjY3IDUuMjEwOTQgOC44MTI1TDYuNzQyMTkgMTAuMzQzOEM2Ljg4ODAyIDEwLjQ4OTYgNy4wNjUxIDEwLjU2MjUgNy4yNzM0NCAxMC41NjI1QzcuNDgxNzcgMTAuNTYyNSA3LjY1ODg1IDEwLjQ4OTYgNy44MDQ2OSAxMC4zNDM4TDExLjE2NDEgNi45Njg3NUMxMS4zMDk5IDYuODIyOTIgMTEuMzgyOCA2LjY0NTgzIDExLjM4MjggNi40Mzc1QzExLjM4MjggNi4zMzg1NCAxMS4zNjIgNi4yNDQ3OSAxMS4zMjAzIDYuMTU2MjVDMTEuMjc4NiA2LjA2NzcxIDExLjIyMTQgNS45ODk1OCAxMS4xNDg0IDUuOTIxODhDMTEuMDgwNyA1Ljg0ODk2IDExLjAwMjYgNS43OTE2NyAxMC45MTQxIDUuNzVDMTAuODI1NSA1LjcwODMzIDEwLjczMTggNS42ODc1IDEwLjYzMjggNS42ODc1WlwiLGZpbGw6XCIjMjA3NzM1XCJ9KX0pKSx0LkJ1c3lTVkc9KCk9PigwLHIuanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxN1wiLHZpZXdCb3g6XCIwIDAgMTYgMTdcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0se2NoaWxkcmVuOigwLHIuanN4KShcInBhdGhcIix7ZDpcIk04IDAuNzkwMjM3QzguNzM0MzggMC43OTAyMzcgOS40NDAxIDAuODg2NTkyIDEwLjExNzIgMS4wNzkzQzEwLjc5NDMgMS4yNzIwMSAxMS40Mjk3IDEuNTQyODQgMTIuMDIzNCAxLjg5MThDMTIuNjE3MiAyLjI0MDc2IDEzLjE1NjMgMi42NjAwMyAxMy42NDA2IDMuMTQ5NjFDMTQuMTMwMiAzLjYzMzk5IDE0LjU0OTUgNC4xNzMwNSAxNC44OTg0IDQuNzY2OEMxNS4yNDc0IDUuMzYwNTUgMTUuNTE4MiA1Ljk5NTk3IDE1LjcxMDkgNi42NzMwNUMxNS45MDM2IDcuMzUwMTMgMTYgOC4wNTU4NiAxNiA4Ljc5MDI0QzE2IDkuNTE5NCAxNS45MDM2IDEwLjIyNTEgMTUuNzEwOSAxMC45MDc0QzE1LjUxODIgMTEuNTg0NSAxNS4yNDc0IDEyLjIxOTkgMTQuODk4NCAxMi44MTM3QzE0LjU0OTUgMTMuNDA3NCAxNC4xMzAyIDEzLjk0OTEgMTMuNjQwNiAxNC40Mzg3QzEzLjE1NjMgMTQuOTIzMSAxMi42MTcyIDE1LjMzOTcgMTIuMDIzNCAxNS42ODg3QzExLjQyOTcgMTYuMDM3NiAxMC43OTE3IDE2LjMwODUgMTAuMTA5NCAxNi41MDEyQzkuNDMyMjkgMTYuNjkzOSA4LjcyOTE3IDE2Ljc5MDIgOCAxNi43OTAyQzcuMjcwODMgMTYuNzkwMiA2LjU2NTEgMTYuNjkzOSA1Ljg4MjgxIDE2LjUwMTJDNS4yMDU3MyAxNi4zMDg1IDQuNTcwMzEgMTYuMDM3NiAzLjk3NjU2IDE1LjY4ODdDMy4zODI4MSAxNS4zMzk3IDIuODQxMTUgMTQuOTIzMSAyLjM1MTU2IDE0LjQzODdDMS44NjcxOSAxMy45NDkxIDEuNDUwNTIgMTMuNDA3NCAxLjEwMTU2IDEyLjgxMzdDMC43NTI2MDQgMTIuMjE5OSAwLjQ4MTc3MSAxMS41ODQ1IDAuMjg5MDYzIDEwLjkwNzRDMC4wOTYzNTQyIDEwLjIyNTEgMCA5LjUxOTQgMCA4Ljc5MDI0QzAgOC4wNjEwNyAwLjA5NjM1NDIgNy4zNTc5NSAwLjI4OTA2MyA2LjY4MDg2QzAuNDgxNzcxIDUuOTk4NTcgMC43NTI2MDQgNS4zNjA1NSAxLjEwMTU2IDQuNzY2OEMxLjQ1MDUyIDQuMTczMDUgMS44NjcxOSAzLjYzMzk5IDIuMzUxNTYgMy4xNDk2MUMyLjg0MTE1IDIuNjYwMDMgMy4zODI4MSAyLjI0MDc2IDMuOTc2NTYgMS44OTE4QzQuNTcwMzEgMS41NDI4NCA1LjIwNTczIDEuMjcyMDEgNS44ODI4MSAxLjA3OTNDNi41NjUxIDAuODg2NTkyIDcuMjcwODMgMC43OTAyMzcgOCAwLjc5MDIzN1pNNy4zMjAzMSA0LjA0ODA1QzcuMjEwOTQgNC4wNDgwNSA3LjEwNjc3IDQuMDcxNDkgNy4wMDc4MSA0LjExODM2QzYuOTE0MDYgNC4xNjAwMyA2LjgyODEzIDQuMjE5OTIgNi43NSA0LjI5ODA1QzYuNjc3MDggNC4zNzA5NyA2LjYxNzE5IDQuNDU2OSA2LjU3MDMxIDQuNTU1ODZDNi41Mjg2NSA0LjY0OTYxIDYuNTA3ODEgNC43NTExNyA2LjUwNzgxIDQuODYwNTVWOS4xOTY0OUM2LjUwNzgxIDkuMzA1ODYgNi41Mjg2NSA5LjQxMjYzIDYuNTcwMzEgOS41MTY4QzYuNjExOTggOS42MjA5NyA2LjY3MTg4IDkuNzEyMTEgNi43NSA5Ljc5MDI0TDkuMTg3NSAxMi4yMTIxQzkuMzQ4OTYgMTIuMzczNiA5LjU0MTY3IDEyLjQ1NDMgOS43NjU2MyAxMi40NTQzQzkuODc1IDEyLjQ1NDMgOS45NzkxNyAxMi40MzM1IDEwLjA3ODEgMTIuMzkxOEMxMC4xNzcxIDEyLjM0NDkgMTAuMjYzIDEyLjI4NSAxMC4zMzU5IDEyLjIxMjFDMTAuNDA4OSAxMi4xMzQgMTAuNDY2MSAxMi4wNDU0IDEwLjUwNzggMTEuOTQ2NUMxMC41NTQ3IDExLjg0NzUgMTAuNTc4MSAxMS43NDM0IDEwLjU3ODEgMTEuNjM0QzEwLjU3ODEgMTEuNTI5OCAxMC41NTQ3IDExLjQyODMgMTAuNTA3OCAxMS4zMjkzQzEwLjQ2NjEgMTEuMjI1MSAxMC40MDg5IDExLjEzNjYgMTAuMzM1OSAxMS4wNjM3TDguMTMyODEgOC44NzYxOFY0Ljg2MDU1QzguMTMyODEgNC43NTExNyA4LjEwOTM4IDQuNjQ3MDEgOC4wNjI1IDQuNTQ4MDVDOC4wMjA4MyA0LjQ0OTA5IDcuOTYzNTQgNC4zNjMxNSA3Ljg5MDYzIDQuMjkwMjRDNy44MTc3MSA0LjIxNzMyIDcuNzMxNzcgNC4xNjAwMyA3LjYzMjgxIDQuMTE4MzZDNy41MzM4NSA0LjA3MTQ5IDcuNDI5NjkgNC4wNDgwNSA3LjMyMDMxIDQuMDQ4MDVaXCIsZmlsbDpcIiNGRTlGNERcIn0pfSkpLHQuRG9Ob3REaXN0dXJiU1ZHPSgpPT4oMCxyLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTdcIix2aWV3Qm94OlwiMCAwIDE2IDE3XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LHtjaGlsZHJlbjooMCxyLmpzeCkoXCJwYXRoXCIse2Q6XCJNOCAwLjU5MDI1NkM4LjczNDM4IDAuNTkwMjU2IDkuNDQwMSAwLjY4NjYxIDEwLjExNzIgMC44NzkzMThDMTAuNzk0MyAxLjA3MjAzIDExLjQyOTcgMS4zNDI4NiAxMi4wMjM0IDEuNjkxODJDMTIuNjE3MiAyLjA0MDc4IDEzLjE1NjIgMi40NjAwNSAxMy42NDA2IDIuOTQ5NjNDMTQuMTMwMiAzLjQzNDAxIDE0LjU0OTUgMy45NzMwNyAxNC44OTg0IDQuNTY2ODJDMTUuMjQ3NCA1LjE2MDU3IDE1LjUxODIgNS43OTU5OCAxNS43MTA5IDYuNDczMDdDMTUuOTAzNiA3LjE1MDE1IDE2IDcuODU1ODggMTYgOC41OTAyNkMxNiA5LjMxOTQyIDE1LjkwMzYgMTAuMDI1MiAxNS43MTA5IDEwLjcwNzRDMTUuNTE4MiAxMS4zODQ1IDE1LjI0NzQgMTIuMDE5OSAxNC44OTg0IDEyLjYxMzdDMTQuNTQ5NSAxMy4yMDc0IDE0LjEzMDIgMTMuNzQ5MSAxMy42NDA2IDE0LjIzODdDMTMuMTU2MiAxNC43MjMxIDEyLjYxNzIgMTUuMTM5NyAxMi4wMjM0IDE1LjQ4ODdDMTEuNDI5NyAxNS44Mzc3IDEwLjc5MTcgMTYuMTA4NSAxMC4xMDk0IDE2LjMwMTJDOS40MzIyOSAxNi40OTM5IDguNzI5MTcgMTYuNTkwMyA4IDE2LjU5MDNDNy4yNzA4MyAxNi41OTAzIDYuNTY1MSAxNi40OTM5IDUuODgyODEgMTYuMzAxMkM1LjIwNTczIDE2LjEwODUgNC41NzAzMSAxNS44Mzc3IDMuOTc2NTYgMTUuNDg4N0MzLjM4MjgxIDE1LjEzOTcgMi44NDExNSAxNC43MjMxIDIuMzUxNTYgMTQuMjM4N0MxLjg2NzE5IDEzLjc0OTEgMS40NTA1MiAxMy4yMDc0IDEuMTAxNTYgMTIuNjEzN0MwLjc1MjYwNCAxMi4wMTk5IDAuNDgxNzcxIDExLjM4NDUgMC4yODkwNjIgMTAuNzA3NEMwLjA5NjM1NDIgMTAuMDI1MiAwIDkuMzE5NDIgMCA4LjU5MDI2QzAgNy44NjEwOSAwLjA5NjM1NDIgNy4xNTc5NiAwLjI4OTA2MiA2LjQ4MDg4QzAuNDgxNzcxIDUuNzk4NTkgMC43NTI2MDQgNS4xNjA1NyAxLjEwMTU2IDQuNTY2ODJDMS40NTA1MiAzLjk3MzA3IDEuODY3MTkgMy40MzQwMSAyLjM1MTU2IDIuOTQ5NjNDMi44NDExNSAyLjQ2MDA1IDMuMzgyODEgMi4wNDA3OCAzLjk3NjU2IDEuNjkxODJDNC41NzAzMSAxLjM0Mjg2IDUuMjA1NzMgMS4wNzIwMyA1Ljg4MjgxIDAuODc5MzE4QzYuNTY1MSAwLjY4NjYxIDcuMjcwODMgMC41OTAyNTYgOCAwLjU5MDI1NlpNNS40NzY1NiA3Ljc0NjUxQzUuMzY3MTkgNy43NDY1MSA1LjI2MDQyIDcuNzY5OTQgNS4xNTYyNSA3LjgxNjgyQzUuMDU3MjkgNy44NjM2OSA0Ljk2ODc1IDcuOTI2MTkgNC44OTA2MiA4LjAwNDMyQzQuODEyNSA4LjA4MjQ0IDQuNzUgOC4xNzM1OSA0LjcwMzEyIDguMjc3NzZDNC42NTYyNSA4LjM3NjcxIDQuNjMyODEgOC40ODA4OCA0LjYzMjgxIDguNTkwMjZDNC42MzI4MSA4LjY5OTYzIDQuNjU2MjUgOC44MDY0IDQuNzAzMTIgOC45MTA1N0M0Ljc1IDkuMDA5NTMgNC44MTI1IDkuMDk4MDcgNC44OTA2MiA5LjE3NjE5QzQuOTY4NzUgOS4yNTQzMiA1LjA1NzI5IDkuMzE2ODIgNS4xNTYyNSA5LjM2MzY5QzUuMjYwNDIgOS40MTA1NyA1LjM2NzE5IDkuNDM0MDEgNS40NzY1NiA5LjQzNDAxSDEwLjUyMzRDMTAuNjMyOCA5LjQzNDAxIDEwLjczNyA5LjQxMDU3IDEwLjgzNTkgOS4zNjM2OUMxMC45NDAxIDkuMzE2ODIgMTEuMDMxMiA5LjI1NDMyIDExLjEwOTQgOS4xNzYxOUMxMS4xODc1IDkuMDk4MDcgMTEuMjUgOS4wMDk1MyAxMS4yOTY5IDguOTEwNTdDMTEuMzQzOCA4LjgwNjQgMTEuMzY3MiA4LjY5OTYzIDExLjM2NzIgOC41OTAyNkMxMS4zNjcyIDguNDgwODggMTEuMzQzOCA4LjM3NjcxIDExLjI5NjkgOC4yNzc3NkMxMS4yNSA4LjE3MzU5IDExLjE4NzUgOC4wODI0NCAxMS4xMDk0IDguMDA0MzJDMTEuMDMxMiA3LjkyNjE5IDEwLjk0MDEgNy44NjM2OSAxMC44MzU5IDcuODE2ODJDMTAuNzM3IDcuNzY5OTQgMTAuNjMyOCA3Ljc0NjUxIDEwLjUyMzQgNy43NDY1MUg1LjQ3NjU2WlwiLGZpbGw6XCIjQzIxMzEzXCJ9KX0pKSx0Lk9mZmxpbmVTVkc9KCk9PigwLHIuanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxN1wiLHZpZXdCb3g6XCIwIDAgMTYgMTdcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0se2NoaWxkcmVuOigwLHIuanN4KShcInBhdGhcIix7ZDpcIk04IDAuOTkwMjUyQzguNzM0MzggMC45OTAyNTIgOS40NDAxIDEuMDg2NjEgMTAuMTE3MiAxLjI3OTMxQzEwLjc5NDMgMS40NzIwMiAxMS40Mjk3IDEuNzQyODYgMTIuMDIzNCAyLjA5MTgxQzEyLjYxNzIgMi40NDA3NyAxMy4xNTYyIDIuODYwMDQgMTMuNjQwNiAzLjM0OTYzQzE0LjEzMDIgMy44MzQgMTQuNTQ5NSA0LjM3MzA2IDE0Ljg5ODQgNC45NjY4MUMxNS4yNDc0IDUuNTYwNTYgMTUuNTE4MiA2LjE5NTk4IDE1LjcxMDkgNi44NzMwNkMxNS45MDM2IDcuNTUwMTUgMTYgOC4yNTU4OCAxNiA4Ljk5MDI1QzE2IDkuNzE5NDIgMTUuOTAzNiAxMC40MjUxIDE1LjcxMDkgMTEuMTA3NEMxNS41MTgyIDExLjc4NDUgMTUuMjQ3NCAxMi40MTk5IDE0Ljg5ODQgMTMuMDEzN0MxNC41NDk1IDEzLjYwNzQgMTQuMTMwMiAxNC4xNDkxIDEzLjY0MDYgMTQuNjM4N0MxMy4xNTYyIDE1LjEyMzEgMTIuNjE3MiAxNS41Mzk3IDEyLjAyMzQgMTUuODg4N0MxMS40Mjk3IDE2LjIzNzYgMTAuNzkxNyAxNi41MDg1IDEwLjEwOTQgMTYuNzAxMkM5LjQzMjI5IDE2Ljg5MzkgOC43MjkxNyAxNi45OTAzIDggMTYuOTkwM0M3LjI3MDgzIDE2Ljk5MDMgNi41NjUxIDE2Ljg5MzkgNS44ODI4MSAxNi43MDEyQzUuMjA1NzMgMTYuNTA4NSA0LjU3MDMxIDE2LjIzNzYgMy45NzY1NiAxNS44ODg3QzMuMzgyODEgMTUuNTM5NyAyLjg0MTE1IDE1LjEyMzEgMi4zNTE1NiAxNC42Mzg3QzEuODY3MTkgMTQuMTQ5MSAxLjQ1MDUyIDEzLjYwNzQgMS4xMDE1NiAxMy4wMTM3QzAuNzUyNjA0IDEyLjQxOTkgMC40ODE3NzEgMTEuNzg0NSAwLjI4OTA2MiAxMS4xMDc0QzAuMDk2MzU0MiAxMC40MjUxIDAgOS43MTk0MiAwIDguOTkwMjVDMCA4LjI2MTA5IDAuMDk2MzU0MiA3LjU1Nzk2IDAuMjg5MDYyIDYuODgwODhDMC40ODE3NzEgNi4xOTg1OSAwLjc1MjYwNCA1LjU2MDU2IDEuMTAxNTYgNC45NjY4MUMxLjQ1MDUyIDQuMzczMDYgMS44NjcxOSAzLjgzNCAyLjM1MTU2IDMuMzQ5NjNDMi44NDExNSAyLjg2MDA0IDMuMzgyODEgMi40NDA3NyAzLjk3NjU2IDIuMDkxODFDNC41NzAzMSAxLjc0Mjg2IDUuMjA1NzMgMS40NzIwMiA1Ljg4MjgxIDEuMjc5MzFDNi41NjUxIDEuMDg2NjEgNy4yNzA4MyAwLjk5MDI1MiA4IDAuOTkwMjUyWk04IDIuNjc3NzVDNy40MjE4OCAyLjY3Nzc1IDYuODY0NTggMi43NTMyNyA2LjMyODEyIDIuOTA0MzFDNS43OTE2NyAzLjA1NTM2IDUuMjg5MDYgMy4yNjg5IDQuODIwMzEgMy41NDQ5NEM0LjM1MTU2IDMuODIwOTggMy45MjQ0OCA0LjE1MTcxIDMuNTM5MDYgNC41MzcxM0MzLjE1ODg1IDQuOTE3MzQgMi44MzA3MyA1LjM0MTgxIDIuNTU0NjkgNS44MTA1NkMyLjI3ODY1IDYuMjc5MzEgMi4wNjUxIDYuNzgxOTIgMS45MTQwNiA3LjMxODM4QzEuNzYzMDIgNy44NTQ4NCAxLjY4NzUgOC40MTIxMyAxLjY4NzUgOC45OTAyNUMxLjY4NzUgOS41NjgzOCAxLjc2MzAyIDEwLjEyNTcgMS45MTQwNiAxMC42NjIxQzIuMDY1MSAxMS4xOTg2IDIuMjc4NjUgMTEuNzAxMiAyLjU1NDY5IDEyLjE2OTlDMi44MzA3MyAxMi42Mzg3IDMuMTU4ODUgMTMuMDY1OCAzLjUzOTA2IDEzLjQ1MTJDMy45MjQ0OCAxMy44MzE0IDQuMzUxNTYgMTQuMTU5NSA0LjgyMDMxIDE0LjQzNTZDNS4yODkwNiAxNC43MTE2IDUuNzkxNjcgMTQuOTI1MSA2LjMyODEyIDE1LjA3NjJDNi44NjQ1OCAxNS4yMjcyIDcuNDIxODggMTUuMzAyOCA4IDE1LjMwMjhDOC41NzgxMiAxNS4zMDI4IDkuMTM1NDIgMTUuMjI3MiA5LjY3MTg4IDE1LjA3NjJDMTAuMjA4MyAxNC45MjUxIDEwLjcxMDkgMTQuNzExNiAxMS4xNzk3IDE0LjQzNTZDMTEuNjQ4NCAxNC4xNTk1IDEyLjA3MjkgMTMuODMxNCAxMi40NTMxIDEzLjQ1MTJDMTIuODM4NSAxMy4wNjU4IDEzLjE2OTMgMTIuNjM4NyAxMy40NDUzIDEyLjE2OTlDMTMuNzIxNCAxMS43MDEyIDEzLjkzNDkgMTEuMTk4NiAxNC4wODU5IDEwLjY2MjFDMTQuMjM3IDEwLjEyNTcgMTQuMzEyNSA5LjU2ODM4IDE0LjMxMjUgOC45OTAyNUMxNC4zMTI1IDguNDEyMTMgMTQuMjM3IDcuODU0ODQgMTQuMDg1OSA3LjMxODM4QzEzLjkzNDkgNi43ODE5MiAxMy43MjE0IDYuMjc5MzEgMTMuNDQ1MyA1LjgxMDU2QzEzLjE2OTMgNS4zNDE4MSAxMi44Mzg1IDQuOTE3MzQgMTIuNDUzMSA0LjUzNzEzQzEyLjA3MjkgNC4xNTE3MSAxMS42NDg0IDMuODIwOTggMTEuMTc5NyAzLjU0NDk0QzEwLjcxMDkgMy4yNjg5IDEwLjIwODMgMy4wNTUzNiA5LjY3MTg4IDIuOTA0MzFDOS4xMzU0MiAyLjc1MzI3IDguNTc4MTIgMi42Nzc3NSA4IDIuNjc3NzVaXCIsZmlsbDpcIiM5Nzk3OTdcIn0pfSkpfSwzNDI5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksYT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fSxpPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LGw9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Db250YWN0Q2FyZD12b2lkIDA7Y29uc3Qgcz1uKDU4OTMpLGM9YShuKDY2ODkpKSx1PWwobig3NTE4KSksZD1uKDUzNzcpLHA9big3NDQ0KSxmPW4oOTc1OCksaD1uKDg4MzIpO3QuQ29udGFjdENhcmQ9ZT0+e3ZhcntuYW1lOnQsdGl0bGU6bixwaG90b1VybDpyLHVzZUluaXRpYWxzOm89ITEsZGV0YWlsczphLG9ubGluZVN0YXR1czpsfT1lLHU9aShlLFtcIm5hbWVcIixcInRpdGxlXCIsXCJwaG90b1VybFwiLFwidXNlSW5pdGlhbHNcIixcImRldGFpbHNcIixcIm9ubGluZVN0YXR1c1wiXSk7Y29uc3QgZD1yfHxvLE09KDAsYy51c2VNZW1vKSgoKCk9PigwLHAuZ2V0SW5pdGlhbHMpKHQpKSxbdF0pLEw9KDAsYy51c2VNZW1vKSgoKCk9PigwLGguZ2VuZXJhdGVDb2xvckZyb21TdHJpbmcpKHQpKSxbdF0pLF89KDAsYy5jcmVhdGVSZWYpKCk7cmV0dXJuKDAsYy51c2VFZmZlY3QpKCgoKT0+e3ZhciBlO251bGw9PT0oZT1fLmN1cnJlbnQpfHx2b2lkIDA9PT1lfHxlLnNjcm9sbFRvKDAsMCl9KSksKDAscy5qc3hzKShnLE9iamVjdC5hc3NpZ24oe30sdSx7Y2hpbGRyZW46WygwLHMuanN4cykodix7Y2hpbGRyZW46W2QmJigwLHMuanN4cykoQyxPYmplY3QuYXNzaWduKHtpY29uQ29sb3I6TH0se2NoaWxkcmVuOltyPygwLHMuanN4KSh3LHthbHQ6bixzcmM6cn0pOigwLHMuanN4KShtLHtjaGlsZHJlbjpNfSksKDAscy5qc3gpKGYuQ29udGFjdFN0YXR1c0ljb24se29ubGluZVN0YXR1czpsfSldfSkpLCgwLHMuanN4cykoYix7Y2hpbGRyZW46WygwLHMuanN4cykoeSx7Y2hpbGRyZW46W1wiIFwiLHQsXCIgXCJdfSksbiYmKDAscy5qc3hzKSh4LHtjaGlsZHJlbjpbXCIgXCIsbixcIiBcIl19KV19KV19KSwoMCxzLmpzeCkoUyx7fSksKDAscy5qc3gpKGssT2JqZWN0LmFzc2lnbih7cmVmOl99LHtjaGlsZHJlbjoobnVsbD09YT92b2lkIDA6YS5sZW5ndGgpPjA/YS5tYXAoKChlLG4pPT4oMCxzLmpzeHMpKGMuZGVmYXVsdC5GcmFnbWVudCx7Y2hpbGRyZW46WygwLHMuanN4KShPLHtkZWZpbml0aW9uczplfSksbjxhLmxlbmd0aC0xJiYoMCxzLmpzeCkoUyx7cGFkZGluZzohMH0pXX0sYCR7dH0tZGV0YWlscy0ke259YCkpKTooMCxzLmpzeCkoXCJwXCIse2NoaWxkcmVuOlwiTm8gaW5mb3JtYXRpb24gYXZhaWxhYmxlLlwifSl9KSldfSkpfTtjb25zdCBnPXUuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGhlaWdodDogMTAwJTtcbmAsdj11LmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG5gLEM9dS5kZWZhdWx0LmRpdmBcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtlPT5lLmljb25Db2xvcn07XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cbiAgaGVpZ2h0OiA2MHB4O1xuICB3aWR0aDogNjBweDtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gLG09dS5kZWZhdWx0LnNwYW5gXG4gIGZvbnQtc2l6ZTogMjRweDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbmAsdz11LmRlZmF1bHQuaW1nYFxuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH07XG4gIG9iamVjdC1maXQ6IGNvdmVyO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbmAsYj11LmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIG1pbi13aWR0aDogMDtcbiAgbWFyZ2luLWxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG5gLHk9dS5kZWZhdWx0LnNwYW5gXG4gIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5sYXJnZX07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZy1ib3R0b206ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ib2xkfTtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5gLHg9dS5kZWZhdWx0LnNwYW5gXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZy1ib3R0b206IDJweDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5gLGs9dS5kZWZhdWx0LmRpdmBcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBmbGV4OiAxO1xuICBtYXJnaW4tdG9wOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbiAgbWFyZ2luLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgcGFkZGluZy1yaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbmAsUz11LmRlZmF1bHQuZGl2YFxuICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgbWFyZ2luLWJvdHRvbTogJHsoe3RoZW1lOmUscGFkZGluZzp0fSk9PnQmJmUucHguYmFzZX07XG5gLE89KDAsdS5kZWZhdWx0KShkLkRlZmluaXRpb25MaXN0KWBcbiAgZHQge1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gIH1cblxuICBkZCB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5gfSwzMTg4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigzNDI5KSx0KX0sNzQ0NDooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZ2V0SW5pdGlhbHM9dm9pZCAwLHQuZ2V0SW5pdGlhbHM9ZT0+e2NvbnN0IHQ9ZS50cmltKCksbj10Lmxhc3RJbmRleE9mKFwiIFwiKTtyZXR1cm4gbj4tMT9bdC5jaGFyQXQoMCksdC5jaGFyQXQobisxKV0uam9pbihcIlwiKTp0LnNsaWNlKDAsMil9fSwxOTk2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuSDY9dC5INT10Lkg0PXQuSDM9dC5IMj10LkgxPXQuSGVhZGluZz10LmRlZmF1bHRTaXplPXZvaWQgMDtjb25zdCBhPW4oNTg5MyksaT1vKG4oNzUxOCkpLGw9bigzNDcxKSxzPW4oNzc2OSk7dC5kZWZhdWx0U2l6ZT17aDE6bC5TaXplLnh4eGxhcmdlLGgyOmwuU2l6ZS54eGxhcmdlLGgzOmwuU2l6ZS54bGFyZ2UsaDQ6bC5TaXplLmxhcmdlLGg1OmwuU2l6ZS5iYXNlLGg2OmwuU2l6ZS5zbWFsbH0sdC5IZWFkaW5nPWU9Pnt2YXJ7bGV2ZWw6bj0xLGNsYXNzTmFtZTpvfT1lLGk9cihlLFtcImxldmVsXCIsXCJjbGFzc05hbWVcIl0pO2NvbnN0IGw9YGgke259YDtyZXR1cm4oMCxhLmpzeCkoYyxPYmplY3QuYXNzaWduKHtjbGFzc05hbWU6byxhczpsLHNpemU6dC5kZWZhdWx0U2l6ZVtsXSx3ZWlnaHQ6XCJib2xkXCJ9LGkpKX07Y29uc3QgYz0oMCxpLmRlZmF1bHQpKHMuVGV4dClgXG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQuaGVhZGluZ307XG5gO3QuSDE9KDAsaS5kZWZhdWx0KSh0LkhlYWRpbmcpLmF0dHJzKChlPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2xldmVsOjF9KSkpYGAsdC5IMj0oMCxpLmRlZmF1bHQpKHQuSGVhZGluZykuYXR0cnMoKGU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bGV2ZWw6Mn0pKSlgYCx0LkgzPSgwLGkuZGVmYXVsdCkodC5IZWFkaW5nKS5hdHRycygoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtsZXZlbDozfSkpKWBgLHQuSDQ9KDAsaS5kZWZhdWx0KSh0LkhlYWRpbmcpLmF0dHJzKChlPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2xldmVsOjR9KSkpYGAsdC5INT0oMCxpLmRlZmF1bHQpKHQuSGVhZGluZykuYXR0cnMoKGU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bGV2ZWw6NX0pKSlgYCx0Lkg2PSgwLGkuZGVmYXVsdCkodC5IZWFkaW5nKS5hdHRycygoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtsZXZlbDo2fSkpKWBgfSw3MDYzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigxOTk2KSx0KX0sNzc2OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNTQzMSksdCl9LDU0MzE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVGV4dD12b2lkIDA7Y29uc3Qgbz1yKG4oNzUxOCkpO3QuVGV4dD1vLmRlZmF1bHQuc3BhbmBcbiAgY29sb3I6ICR7KHt0aGVtZTplLGNvbG9yOnQ9XCJ0ZXh0RGVmYXVsdFwifSk9PmUucGFsZXR0ZVt0XX07XG4gIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmUsc2l6ZTp0PVwiYmFzZVwifSk9PmUuZm9udFNpemVbdF19O1xuICBmb250LXdlaWdodDogJHsoe3RoZW1lOmUsd2VpZ2h0OnQ9XCJub3JtYWxcIn0pPT5lLmZvbnRXZWlnaHRbdF19O1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LnRleHR9O1xuYCx0LlRleHQuZGlzcGxheU5hbWU9XCJUZXh0XCJ9LDMxOTA6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlQ29sb3JTY2hlbWU9dC5Db2xvclNjaGVtZT12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpO3QuQ29sb3JTY2hlbWU9e2Rhcms6XCJkYXJrXCIsbGlnaHQ6XCJsaWdodFwiLHN5c3RlbTpcInN5c3RlbVwifSx0LnVzZUNvbG9yU2NoZW1lPSh7Y29sb3JTY2hlbWU6ZSxmYWxsYmFja1NjaGVtZTpuPXQuQ29sb3JTY2hlbWUubGlnaHR9KT0+e2NvbnN0W2EsaV09KDAsci51c2VTdGF0ZSkoZSYmZSE9PXQuQ29sb3JTY2hlbWUuc3lzdGVtP2U6biksbD10PT57aShvKHQsZXx8bikpfTtyZXR1cm4oMCxyLnVzZUVmZmVjdCkoKCgpPT57Y29uc3QgdD13aW5kb3cubWF0Y2hNZWRpYShcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIik7cmV0dXJuIGkobyh0LGV8fG4pKSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixsKSwoKT0+dC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsbCl9KSxbZSxhXSksYX07Y29uc3Qgbz0oZSxuKT0+bj09PXQuQ29sb3JTY2hlbWUuc3lzdGVtP2UubWF0Y2hlcz90LkNvbG9yU2NoZW1lLmRhcms6dC5Db2xvclNjaGVtZS5saWdodDpufSwzNDc6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlRHJvcGRvd25LZXlib2FyZE5hdmlnYXRpb249dm9pZCAwO2NvbnN0IHI9big2Njg5KTt0LnVzZURyb3Bkb3duS2V5Ym9hcmROYXZpZ2F0aW9uPShlLHQsbixvLGEpPT57Y29uc3RbaSxsXT0oMCxyLnVzZVN0YXRlKSgwKSxbcyxjXT0oMCxyLnVzZVN0YXRlKShcIlwiKTtsZXQgdTtpZigoMCxyLnVzZUVmZmVjdCkoKCgpPT57aWYodCYmIW4pe2NvbnN0IG49ZS5mbGF0KCkuZmluZEluZGV4KChlPT5lLnZhbHVlPT09dC52YWx1ZSkpO24+PTAmJmwobil9fSksW2UsdCxuXSksKDAsci51c2VFZmZlY3QpKCgoKT0+e258fGMoXCJcIil9KSxbbl0pLCgwLHIudXNlRWZmZWN0KSgoKCk9PntpZihzKXtjb25zdCB0PWUuZmxhdCgpLmZpbmRJbmRleCgoZT0+ZS50aXRsZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocy50b0xvd2VyQ2FzZSgpKSkpO3Q+PTAmJmwodCl9fSksW2Usc10pLGVbMF0ubGVuZ3RoPjAmJmUuZmxhdCgpLmxlbmd0aD5pKXtjb25zdFt0LG5dPVtNYXRoLmZsb29yKGkvZVswXS5sZW5ndGgpLGklZVswXS5sZW5ndGhdO3U9ZVt0XVtuXX1yZXR1cm4oMCxyLnVzZUVmZmVjdCkoKCgpPT57Y29uc3QgZT1zZXRUaW1lb3V0KCgoKT0+e2MoXCJcIil9KSw1MDApO3JldHVybigpPT5jbGVhclRpbWVvdXQoZSl9KSxbc10pLHtmb2N1c2VkT3B0aW9uOnUsaGFuZGxlS2V5RG93bjp0PT57c3dpdGNoKHQuY29kZSl7Y2FzZVwiQXJyb3dVcFwiOnQucHJldmVudERlZmF1bHQoKSxpPjAmJmwoaS0xKTticmVhaztjYXNlXCJBcnJvd0Rvd25cIjp0LnByZXZlbnREZWZhdWx0KCksaTxlLmZsYXQoKS5sZW5ndGgtMSYmbChpKzEpO2JyZWFrO2Nhc2VcIkVudGVyXCI6Y2FzZVwiU3BhY2VcIjp0LnByZXZlbnREZWZhdWx0KCksbj8oKG51bGw9PXU/dm9pZCAwOnUub3ZlcnJpZGVPbkNsaWNrKT91Lm92ZXJyaWRlT25DbGljaygpOmEobnVsbCE9dT91OmVbMF1bMF0pLG8oKSk6bygpO2JyZWFrO2Nhc2VcIkVzY2FwZVwiOnQucHJldmVudERlZmF1bHQoKSxvKCExKTticmVhaztkZWZhdWx0Oi9eW2EtejAtOV0kL2kudGVzdCh0LmtleSkmJmMoKGU9PmUrdC5rZXkpKX19fX19LDQ0ODE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlTGF5b3V0TWVkaWFRdWVyeT10LnVzZU1lZGlhUXVlcnk9dm9pZCAwO2NvbnN0IHI9big2Njg5KSxvPWU9PnQ9Pntjb25zdFtuLG9dPSgwLHIudXNlU3RhdGUpKCExKTtyZXR1cm4gZSgoKCk9Pntjb25zdCBlPXdpbmRvdy5tYXRjaE1lZGlhKHQpO2lmKGUpe2UubWF0Y2hlcyE9PW4mJm8oZS5tYXRjaGVzKTtjb25zdCB0PSgpPT5vKGUubWF0Y2hlcykscj0oKT0+ZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsdCk7cmV0dXJuIGUuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLHQpLHJ9fSksW24sdF0pLG59O3QudXNlTWVkaWFRdWVyeT1vKHIudXNlRWZmZWN0KSx0LnVzZUxheW91dE1lZGlhUXVlcnk9byhyLnVzZUxheW91dEVmZmVjdCl9LDI3NzY6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlUHJldmlvdXM9dm9pZCAwO2NvbnN0IHI9big2Njg5KTt0LnVzZVByZXZpb3VzPWU9Pntjb25zdCB0PSgwLHIudXNlUmVmKSgpO3JldHVybigwLHIudXNlRWZmZWN0KSgoKCk9Pnt0LmN1cnJlbnQ9ZX0pLFtlXSksdC5jdXJyZW50fX0sNzA4ODooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VUaGVtZT12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpLG89big0MjY2KSxhPW4oMzE5MCksaT1uKDk1MDcpLGw9big2NDg2KSxzPXtbYS5Db2xvclNjaGVtZS5kYXJrXTpvLk9wZW5GaW5EYXJrVGhlbWUsW2EuQ29sb3JTY2hlbWUubGlnaHRdOm8uT3BlbkZpbkxpZ2h0VGhlbWV9O3QudXNlVGhlbWU9KHt0aGVtZXM6ZSxzY2hlbWU6dH0pPT57bGV0IG49e307Y29uc3Qgbz0oMCxhLnVzZUNvbG9yU2NoZW1lKSh7Y29sb3JTY2hlbWU6dH0pO3RyeXtuPSgwLHIudXNlTWVtbykoKCgpPT4oKGUsdCk9Pntjb25zdCBuPW51bGw9PXQ/dm9pZCAwOnRbZV07bGV0IHI9T2JqZWN0LmFzc2lnbih7fSxzW2VdKTtyZXR1cm4gbiYmbi5wYWxldHRlJiYocj0oMCxsLm1lcmdlKShyLG4sKDAsaS5jcmVhdGVUaGVtZSkobi5wYWxldHRlKSkpLHJ9KShvLGUpKSxbZSxvXSl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX1yZXR1cm4gbn19LDM0MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNDEzMCksdCksbyhuKDc0MDEpLHQpLG8obig5NTAxKSx0KSxvKG4oNDkyNSksdCksbyhuKDI2MDkpLHQpLG8obigzMTM2KSx0KSxvKG4oOTczNCksdCksbyhuKDYwMjYpLHQpLG8obig5NjM0KSx0KSxvKG4oMTQ0KSx0KSxvKG4oOTIzOSksdCksbyhuKDg4NzgpLHQpLG8obig4NTEwKSx0KSxvKG4oODk1MSksdCksbyhuKDE5NzgpLHQpLG8obig4MDUxKSx0KSxvKG4oNDE2OSksdCksbyhuKDM2NDEpLHQpLG8obig1MjE1KSx0KSxvKG4oOTY1NCksdCksbyhuKDMxMTkpLHQpLG8obigxMzM1KSx0KSxvKG4oNTM3NyksdCksbyhuKDM4NzcpLHQpLG8obigzMTg4KSx0KSxvKG4oNzA2MyksdCksbyhuKDc3NjkpLHQpLG8obigzMTkwKSx0KSxvKG4oNDQ4MSksdCksbyhuKDI3NzYpLHQpLG8obigzNDcpLHQpLG8obig0OTkxKSx0KSxvKG4oODgzMiksdCksbyhuKDcwMzApLHQpLG8obig2MjE4KSx0KX0sODgzMjooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZ2VuZXJhdGVDb2xvckZyb21TdHJpbmc9dm9pZCAwLHQuZ2VuZXJhdGVDb2xvckZyb21TdHJpbmc9ZnVuY3Rpb24oZT1cIlwiLHQ9NzAsbj01MCl7bGV0IHI9MDtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKylyPWUuY2hhckNvZGVBdCh0KSsoKHI8PDUpLXIpLHImPXI7cmV0dXJuYGhzbCgke3IlMzYwfSwgJHt0fSUsICR7bn0lKWB9fSw0OTkxOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC53aGVuRmluPXZvaWQgMCx0LndoZW5GaW49ZnVuY3Rpb24oZSx0KXtjb25zdCBuPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBmaW4/ZTp0O3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bigpOm59fSw2NTU6KGUsdCxuKT0+e24ucih0KSxuLmQodCx7X19hc3NpZ246KCk9PmEsX19hc3luY0RlbGVnYXRvcjooKT0+TyxfX2FzeW5jR2VuZXJhdG9yOigpPT5TLF9fYXN5bmNWYWx1ZXM6KCk9Pk0sX19hd2FpdDooKT0+ayxfX2F3YWl0ZXI6KCk9PmgsX19jbGFzc1ByaXZhdGVGaWVsZEdldDooKT0+aixfX2NsYXNzUHJpdmF0ZUZpZWxkSW46KCk9PkksX19jbGFzc1ByaXZhdGVGaWVsZFNldDooKT0+UixfX2NyZWF0ZUJpbmRpbmc6KCk9PnYsX19kZWNvcmF0ZTooKT0+bCxfX2VzRGVjb3JhdGU6KCk9PmMsX19leHBvcnRTdGFyOigpPT5DLF9fZXh0ZW5kczooKT0+byxfX2dlbmVyYXRvcjooKT0+ZyxfX2ltcG9ydERlZmF1bHQ6KCk9PkUsX19pbXBvcnRTdGFyOigpPT5QLF9fbWFrZVRlbXBsYXRlT2JqZWN0OigpPT5MLF9fbWV0YWRhdGE6KCk9PmYsX19wYXJhbTooKT0+cyxfX3Byb3BLZXk6KCk9PmQsX19yZWFkOigpPT53LF9fcmVzdDooKT0+aSxfX3J1bkluaXRpYWxpemVyczooKT0+dSxfX3NldEZ1bmN0aW9uTmFtZTooKT0+cCxfX3NwcmVhZDooKT0+YixfX3NwcmVhZEFycmF5OigpPT54LF9fc3ByZWFkQXJyYXlzOigpPT55LF9fdmFsdWVzOigpPT5tfSk7dmFyIHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSl9LHIoZSx0KX07ZnVuY3Rpb24gbyhlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiK1N0cmluZyh0KStcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9cihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KG4ucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBuKX12YXIgYT1mdW5jdGlvbigpe3JldHVybiBhPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW25dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0sYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIGkoZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufWZ1bmN0aW9uIGwoZSx0LG4scil7dmFyIG8sYT1hcmd1bWVudHMubGVuZ3RoLGk9YTwzP3Q6bnVsbD09PXI/cj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik6cjtpZihcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlpPVJlZmxlY3QuZGVjb3JhdGUoZSx0LG4scik7ZWxzZSBmb3IodmFyIGw9ZS5sZW5ndGgtMTtsPj0wO2wtLSkobz1lW2xdKSYmKGk9KGE8Mz9vKGkpOmE+Mz9vKHQsbixpKTpvKHQsbikpfHxpKTtyZXR1cm4gYT4zJiZpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLGkpLGl9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3QobixyLGUpfX1mdW5jdGlvbiBjKGUsdCxuLHIsbyxhKXtmdW5jdGlvbiBpKGUpe2lmKHZvaWQgMCE9PWUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpO3JldHVybiBlfWZvcih2YXIgbCxzPXIua2luZCxjPVwiZ2V0dGVyXCI9PT1zP1wiZ2V0XCI6XCJzZXR0ZXJcIj09PXM/XCJzZXRcIjpcInZhbHVlXCIsdT0hdCYmZT9yLnN0YXRpYz9lOmUucHJvdG90eXBlOm51bGwsZD10fHwodT9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHUsci5uYW1lKTp7fSkscD0hMSxmPW4ubGVuZ3RoLTE7Zj49MDtmLS0pe3ZhciBoPXt9O2Zvcih2YXIgZyBpbiByKWhbZ109XCJhY2Nlc3NcIj09PWc/e306cltnXTtmb3IodmFyIGcgaW4gci5hY2Nlc3MpaC5hY2Nlc3NbZ109ci5hY2Nlc3NbZ107aC5hZGRJbml0aWFsaXplcj1mdW5jdGlvbihlKXtpZihwKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7YS5wdXNoKGkoZXx8bnVsbCkpfTt2YXIgdj0oMCxuW2ZdKShcImFjY2Vzc29yXCI9PT1zP3tnZXQ6ZC5nZXQsc2V0OmQuc2V0fTpkW2NdLGgpO2lmKFwiYWNjZXNzb3JcIj09PXMpe2lmKHZvaWQgMD09PXYpY29udGludWU7aWYobnVsbD09PXZ8fFwib2JqZWN0XCIhPXR5cGVvZiB2KXRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7KGw9aSh2LmdldCkpJiYoZC5nZXQ9bCksKGw9aSh2LnNldCkpJiYoZC5zZXQ9bCksKGw9aSh2LmluaXQpKSYmby5wdXNoKGwpfWVsc2UobD1pKHYpKSYmKFwiZmllbGRcIj09PXM/by5wdXNoKGwpOmRbY109bCl9dSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsci5uYW1lLGQpLHA9ITB9ZnVuY3Rpb24gdShlLHQsbil7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixvPTA7bzx0Lmxlbmd0aDtvKyspbj1yP3Rbb10uY2FsbChlLG4pOnRbb10uY2FsbChlKTtyZXR1cm4gcj9uOnZvaWQgMH1mdW5jdGlvbiBkKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlP2U6XCJcIi5jb25jYXQoZSl9ZnVuY3Rpb24gcChlLHQsbil7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHQmJih0PXQuZGVzY3JpcHRpb24/XCJbXCIuY29uY2F0KHQuZGVzY3JpcHRpb24sXCJdXCIpOlwiXCIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwibmFtZVwiLHtjb25maWd1cmFibGU6ITAsdmFsdWU6bj9cIlwiLmNvbmNhdChuLFwiIFwiLHQpOnR9KX1mdW5jdGlvbiBmKGUsdCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlZmxlY3QubWV0YWRhdGEpcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoZSx0KX1mdW5jdGlvbiBoKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihvLGEpe2Z1bmN0aW9uIGkoZSl7dHJ5e3Moci5uZXh0KGUpKX1jYXRjaChlKXthKGUpfX1mdW5jdGlvbiBsKGUpe3RyeXtzKHIudGhyb3coZSkpfWNhdGNoKGUpe2EoZSl9fWZ1bmN0aW9uIHMoZSl7dmFyIHQ7ZS5kb25lP28oZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGksbCl9cygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfWZ1bmN0aW9uIGcoZSx0KXt2YXIgbixyLG8sYSxpPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJm9bMF0pdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBhPXtuZXh0OmwoMCksdGhyb3c6bCgxKSxyZXR1cm46bCgyKX0sXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiYoYVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxhO2Z1bmN0aW9uIGwobCl7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbihsKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7YSYmKGE9MCxsWzBdJiYoaT0wKSksaTspdHJ5e2lmKG49MSxyJiYobz0yJmxbMF0/ci5yZXR1cm46bFswXT9yLnRocm93fHwoKG89ci5yZXR1cm4pJiZvLmNhbGwociksMCk6ci5uZXh0KSYmIShvPW8uY2FsbChyLGxbMV0pKS5kb25lKXJldHVybiBvO3N3aXRjaChyPTAsbyYmKGw9WzImbFswXSxvLnZhbHVlXSksbFswXSl7Y2FzZSAwOmNhc2UgMTpvPWw7YnJlYWs7Y2FzZSA0OnJldHVybiBpLmxhYmVsKysse3ZhbHVlOmxbMV0sZG9uZTohMX07Y2FzZSA1OmkubGFiZWwrKyxyPWxbMV0sbD1bMF07Y29udGludWU7Y2FzZSA3Omw9aS5vcHMucG9wKCksaS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgobz0obz1pLnRyeXMpLmxlbmd0aD4wJiZvW28ubGVuZ3RoLTFdKXx8NiE9PWxbMF0mJjIhPT1sWzBdKSl7aT0wO2NvbnRpbnVlfWlmKDM9PT1sWzBdJiYoIW98fGxbMV0+b1swXSYmbFsxXTxvWzNdKSl7aS5sYWJlbD1sWzFdO2JyZWFrfWlmKDY9PT1sWzBdJiZpLmxhYmVsPG9bMV0pe2kubGFiZWw9b1sxXSxvPWw7YnJlYWt9aWYobyYmaS5sYWJlbDxvWzJdKXtpLmxhYmVsPW9bMl0saS5vcHMucHVzaChsKTticmVha31vWzJdJiZpLm9wcy5wb3AoKSxpLnRyeXMucG9wKCk7Y29udGludWV9bD10LmNhbGwoZSxpKX1jYXRjaChlKXtsPVs2LGVdLHI9MH1maW5hbGx5e249bz0wfWlmKDUmbFswXSl0aHJvdyBsWzFdO3JldHVybnt2YWx1ZTpsWzBdP2xbMV06dm9pZCAwLGRvbmU6ITB9fShbbCxzXSl9fX12YXIgdj1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19O2Z1bmN0aW9uIEMoZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHx2KHQsZSxuKX1mdW5jdGlvbiBtKGUpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLG49dCYmZVt0XSxyPTA7aWYobilyZXR1cm4gbi5jYWxsKGUpO2lmKGUmJlwibnVtYmVyXCI9PXR5cGVvZiBlLmxlbmd0aClyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybiBlJiZyPj1lLmxlbmd0aCYmKGU9dm9pZCAwKSx7dmFsdWU6ZSYmZVtyKytdLGRvbmU6IWV9fX07dGhyb3cgbmV3IFR5cGVFcnJvcih0P1wiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIjpcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIil9ZnVuY3Rpb24gdyhlLHQpe3ZhciBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFuKXJldHVybiBlO3ZhciByLG8sYT1uLmNhbGwoZSksaT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09dHx8dC0tID4wKSYmIShyPWEubmV4dCgpKS5kb25lOylpLnB1c2goci52YWx1ZSl9Y2F0Y2goZSl7bz17ZXJyb3I6ZX19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKG49YS5yZXR1cm4pJiZuLmNhbGwoYSl9ZmluYWxseXtpZihvKXRocm93IG8uZXJyb3J9fXJldHVybiBpfWZ1bmN0aW9uIGIoKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZT1lLmNvbmNhdCh3KGFyZ3VtZW50c1t0XSkpO3JldHVybiBlfWZ1bmN0aW9uIHkoKXtmb3IodmFyIGU9MCx0PTAsbj1hcmd1bWVudHMubGVuZ3RoO3Q8bjt0KyspZSs9YXJndW1lbnRzW3RdLmxlbmd0aDt2YXIgcj1BcnJheShlKSxvPTA7Zm9yKHQ9MDt0PG47dCsrKWZvcih2YXIgYT1hcmd1bWVudHNbdF0saT0wLGw9YS5sZW5ndGg7aTxsO2krKyxvKyspcltvXT1hW2ldO3JldHVybiByfWZ1bmN0aW9uIHgoZSx0LG4pe2lmKG58fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgcixvPTAsYT10Lmxlbmd0aDtvPGE7bysrKSFyJiZvIGluIHR8fChyfHwocj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LDAsbykpLHJbb109dFtvXSk7cmV0dXJuIGUuY29uY2F0KHJ8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKX1mdW5jdGlvbiBrKGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygaz8odGhpcy52PWUsdGhpcyk6bmV3IGsoZSl9ZnVuY3Rpb24gUyhlLHQsbil7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7dmFyIHIsbz1uLmFwcGx5KGUsdHx8W10pLGE9W107cmV0dXJuIHI9e30saShcIm5leHRcIiksaShcInRocm93XCIpLGkoXCJyZXR1cm5cIikscltTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30scjtmdW5jdGlvbiBpKGUpe29bZV0mJihyW2VdPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixyKXthLnB1c2goW2UsdCxuLHJdKT4xfHxsKGUsdCl9KSl9KX1mdW5jdGlvbiBsKGUsdCl7dHJ5eyhuPW9bZV0odCkpLnZhbHVlIGluc3RhbmNlb2Ygaz9Qcm9taXNlLnJlc29sdmUobi52YWx1ZS52KS50aGVuKHMsYyk6dShhWzBdWzJdLG4pfWNhdGNoKGUpe3UoYVswXVszXSxlKX12YXIgbn1mdW5jdGlvbiBzKGUpe2woXCJuZXh0XCIsZSl9ZnVuY3Rpb24gYyhlKXtsKFwidGhyb3dcIixlKX1mdW5jdGlvbiB1KGUsdCl7ZSh0KSxhLnNoaWZ0KCksYS5sZW5ndGgmJmwoYVswXVswXSxhWzBdWzFdKX19ZnVuY3Rpb24gTyhlKXt2YXIgdCxuO3JldHVybiB0PXt9LHIoXCJuZXh0XCIpLHIoXCJ0aHJvd1wiLChmdW5jdGlvbihlKXt0aHJvdyBlfSkpLHIoXCJyZXR1cm5cIiksdFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHQ7ZnVuY3Rpb24gcihyLG8pe3Rbcl09ZVtyXT9mdW5jdGlvbih0KXtyZXR1cm4obj0hbik/e3ZhbHVlOmsoZVtyXSh0KSksZG9uZTohMX06bz9vKHQpOnR9Om99fWZ1bmN0aW9uIE0oZSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7dmFyIHQsbj1lW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gbj9uLmNhbGwoZSk6KGU9bShlKSx0PXt9LHIoXCJuZXh0XCIpLHIoXCJ0aHJvd1wiKSxyKFwicmV0dXJuXCIpLHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHQpO2Z1bmN0aW9uIHIobil7dFtuXT1lW25dJiZmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbyl7IWZ1bmN0aW9uKGUsdCxuLHIpe1Byb21pc2UucmVzb2x2ZShyKS50aGVuKChmdW5jdGlvbih0KXtlKHt2YWx1ZTp0LGRvbmU6bn0pfSksdCl9KHIsbywodD1lW25dKHQpKS5kb25lLHQudmFsdWUpfSkpfX19ZnVuY3Rpb24gTChlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJyYXdcIix7dmFsdWU6dH0pOmUucmF3PXQsZX12YXIgXz1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fTtmdW5jdGlvbiBQKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnYodCxlLG4pO3JldHVybiBfKHQsZSksdH1mdW5jdGlvbiBFKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBqKGUsdCxuLHIpe2lmKFwiYVwiPT09biYmIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2UhPT10fHwhcjohdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtyZXR1cm5cIm1cIj09PW4/cjpcImFcIj09PW4/ci5jYWxsKGUpOnI/ci52YWx1ZTp0LmdldChlKX1mdW5jdGlvbiBSKGUsdCxuLHIsbyl7aWYoXCJtXCI9PT1yKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7aWYoXCJhXCI9PT1yJiYhbyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZSE9PXR8fCFvOiF0LmhhcyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7cmV0dXJuXCJhXCI9PT1yP28uY2FsbChlLG4pOm8/by52YWx1ZT1uOnQuc2V0KGUsbiksbn1mdW5jdGlvbiBJKGUsdCl7aWYobnVsbD09PXR8fFwib2JqZWN0XCIhPXR5cGVvZiB0JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP3Q9PT1lOmUuaGFzKHQpfX0sNjAzNjplPT57ZS5leHBvcnRzPVwiaHR0cHM6Ly9jZG4ub3BlbmZpbi5jby91aS1saWJyYXJ5L2ZvbnRzL0ludGVyLUl0YWxpYy53b2ZmMlwifSw0NjY4OmU9PntlLmV4cG9ydHM9XCJodHRwczovL2Nkbi5vcGVuZmluLmNvL3VpLWxpYnJhcnkvZm9udHMvSW50ZXItUmVndWxhci53b2ZmMlwifSw1OTQxOmU9PntlLmV4cG9ydHM9XCJodHRwczovL2Nkbi5vcGVuZmluLmNvL3VpLWxpYnJhcnkvZm9udHMvSW50ZXItU2VtaUJvbGQud29mZjJcIn0sMjgxMzplPT57ZS5leHBvcnRzPVwiaHR0cHM6Ly9jZG4ub3BlbmZpbi5jby91aS1saWJyYXJ5L2ZvbnRzL0ludGVyLVNlbWlCb2xkSXRhbGljLndvZmYyXCJ9LDY2ODk6ZT0+e2UuZXhwb3J0cz1uKDM3OCl9LDc1MTg6ZT0+e2UuZXhwb3J0cz1uKDkyMSl9LDgyMDc6ZnVuY3Rpb24oZSl7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4oZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSkodCl9dmFyIHQ9L15cXHMrLyxuPS9cXHMrJC87ZnVuY3Rpb24gcihvLGEpe2lmKGE9YXx8e30sKG89b3x8XCJcIilpbnN0YW5jZW9mIHIpcmV0dXJuIG87aWYoISh0aGlzIGluc3RhbmNlb2YgcikpcmV0dXJuIG5ldyByKG8sYSk7dmFyIGk9ZnVuY3Rpb24ocil7dmFyIG8sYSxpLGw9e3I6MCxnOjAsYjowfSxzPTEsYz1udWxsLHU9bnVsbCxkPW51bGwscD0hMSxmPSExO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiByJiYocj1mdW5jdGlvbihlKXtlPWUucmVwbGFjZSh0LFwiXCIpLnJlcGxhY2UobixcIlwiKS50b0xvd2VyQ2FzZSgpO3ZhciByLG89ITE7aWYoYltlXSllPWJbZV0sbz0hMDtlbHNlIGlmKFwidHJhbnNwYXJlbnRcIj09ZSlyZXR1cm57cjowLGc6MCxiOjAsYTowLGZvcm1hdDpcIm5hbWVcIn07cmV0dXJuKHI9SS5yZ2IuZXhlYyhlKSk/e3I6clsxXSxnOnJbMl0sYjpyWzNdfToocj1JLnJnYmEuZXhlYyhlKSk/e3I6clsxXSxnOnJbMl0sYjpyWzNdLGE6cls0XX06KHI9SS5oc2wuZXhlYyhlKSk/e2g6clsxXSxzOnJbMl0sbDpyWzNdfToocj1JLmhzbGEuZXhlYyhlKSk/e2g6clsxXSxzOnJbMl0sbDpyWzNdLGE6cls0XX06KHI9SS5oc3YuZXhlYyhlKSk/e2g6clsxXSxzOnJbMl0sdjpyWzNdfToocj1JLmhzdmEuZXhlYyhlKSk/e2g6clsxXSxzOnJbMl0sdjpyWzNdLGE6cls0XX06KHI9SS5oZXg4LmV4ZWMoZSkpP3tyOk8oclsxXSksZzpPKHJbMl0pLGI6TyhyWzNdKSxhOlAocls0XSksZm9ybWF0Om8/XCJuYW1lXCI6XCJoZXg4XCJ9OihyPUkuaGV4Ni5leGVjKGUpKT97cjpPKHJbMV0pLGc6TyhyWzJdKSxiOk8oclszXSksZm9ybWF0Om8/XCJuYW1lXCI6XCJoZXhcIn06KHI9SS5oZXg0LmV4ZWMoZSkpP3tyOk8oclsxXStcIlwiK3JbMV0pLGc6TyhyWzJdK1wiXCIrclsyXSksYjpPKHJbM10rXCJcIityWzNdKSxhOlAocls0XStcIlwiK3JbNF0pLGZvcm1hdDpvP1wibmFtZVwiOlwiaGV4OFwifTohIShyPUkuaGV4My5leGVjKGUpKSYme3I6TyhyWzFdK1wiXCIrclsxXSksZzpPKHJbMl0rXCJcIityWzJdKSxiOk8oclszXStcIlwiK3JbM10pLGZvcm1hdDpvP1wibmFtZVwiOlwiaGV4XCJ9fShyKSksXCJvYmplY3RcIj09ZShyKSYmKFYoci5yKSYmVihyLmcpJiZWKHIuYik/KG89ci5yLGE9ci5nLGk9ci5iLGw9e3I6MjU1KmsobywyNTUpLGc6MjU1KmsoYSwyNTUpLGI6MjU1KmsoaSwyNTUpfSxwPSEwLGY9XCIlXCI9PT1TdHJpbmcoci5yKS5zdWJzdHIoLTEpP1wicHJnYlwiOlwicmdiXCIpOlYoci5oKSYmVihyLnMpJiZWKHIudik/KGM9TChyLnMpLHU9TChyLnYpLGw9ZnVuY3Rpb24oZSx0LG4pe2U9NiprKGUsMzYwKSx0PWsodCwxMDApLG49ayhuLDEwMCk7dmFyIHI9TWF0aC5mbG9vcihlKSxvPWUtcixhPW4qKDEtdCksaT1uKigxLW8qdCksbD1uKigxLSgxLW8pKnQpLHM9ciU2O3JldHVybntyOjI1NSpbbixpLGEsYSxsLG5dW3NdLGc6MjU1KltsLG4sbixpLGEsYV1bc10sYjoyNTUqW2EsYSxsLG4sbixpXVtzXX19KHIuaCxjLHUpLHA9ITAsZj1cImhzdlwiKTpWKHIuaCkmJlYoci5zKSYmVihyLmwpJiYoYz1MKHIucyksZD1MKHIubCksbD1mdW5jdGlvbihlLHQsbil7dmFyIHIsbyxhO2Z1bmN0aW9uIGkoZSx0LG4pe3JldHVybiBuPDAmJihuKz0xKSxuPjEmJihuLT0xKSxuPDEvNj9lKzYqKHQtZSkqbjpuPC41P3Q6bjwyLzM/ZSsodC1lKSooMi8zLW4pKjY6ZX1pZihlPWsoZSwzNjApLHQ9ayh0LDEwMCksbj1rKG4sMTAwKSwwPT09dClyPW89YT1uO2Vsc2V7dmFyIGw9bjwuNT9uKigxK3QpOm4rdC1uKnQscz0yKm4tbDtyPWkocyxsLGUrMS8zKSxvPWkocyxsLGUpLGE9aShzLGwsZS0xLzMpfXJldHVybntyOjI1NSpyLGc6MjU1Km8sYjoyNTUqYX19KHIuaCxjLGQpLHA9ITAsZj1cImhzbFwiKSxyLmhhc093blByb3BlcnR5KFwiYVwiKSYmKHM9ci5hKSkscz14KHMpLHtvazpwLGZvcm1hdDpyLmZvcm1hdHx8ZixyOk1hdGgubWluKDI1NSxNYXRoLm1heChsLnIsMCkpLGc6TWF0aC5taW4oMjU1LE1hdGgubWF4KGwuZywwKSksYjpNYXRoLm1pbigyNTUsTWF0aC5tYXgobC5iLDApKSxhOnN9fShvKTt0aGlzLl9vcmlnaW5hbElucHV0PW8sdGhpcy5fcj1pLnIsdGhpcy5fZz1pLmcsdGhpcy5fYj1pLmIsdGhpcy5fYT1pLmEsdGhpcy5fcm91bmRBPU1hdGgucm91bmQoMTAwKnRoaXMuX2EpLzEwMCx0aGlzLl9mb3JtYXQ9YS5mb3JtYXR8fGkuZm9ybWF0LHRoaXMuX2dyYWRpZW50VHlwZT1hLmdyYWRpZW50VHlwZSx0aGlzLl9yPDEmJih0aGlzLl9yPU1hdGgucm91bmQodGhpcy5fcikpLHRoaXMuX2c8MSYmKHRoaXMuX2c9TWF0aC5yb3VuZCh0aGlzLl9nKSksdGhpcy5fYjwxJiYodGhpcy5fYj1NYXRoLnJvdW5kKHRoaXMuX2IpKSx0aGlzLl9vaz1pLm9rfWZ1bmN0aW9uIG8oZSx0LG4pe2U9ayhlLDI1NSksdD1rKHQsMjU1KSxuPWsobiwyNTUpO3ZhciByLG8sYT1NYXRoLm1heChlLHQsbiksaT1NYXRoLm1pbihlLHQsbiksbD0oYStpKS8yO2lmKGE9PWkpcj1vPTA7ZWxzZXt2YXIgcz1hLWk7c3dpdGNoKG89bD4uNT9zLygyLWEtaSk6cy8oYStpKSxhKXtjYXNlIGU6cj0odC1uKS9zKyh0PG4/NjowKTticmVhaztjYXNlIHQ6cj0obi1lKS9zKzI7YnJlYWs7Y2FzZSBuOnI9KGUtdCkvcys0fXIvPTZ9cmV0dXJue2g6cixzOm8sbH19ZnVuY3Rpb24gYShlLHQsbil7ZT1rKGUsMjU1KSx0PWsodCwyNTUpLG49ayhuLDI1NSk7dmFyIHIsbyxhPU1hdGgubWF4KGUsdCxuKSxpPU1hdGgubWluKGUsdCxuKSxsPWEscz1hLWk7aWYobz0wPT09YT8wOnMvYSxhPT1pKXI9MDtlbHNle3N3aXRjaChhKXtjYXNlIGU6cj0odC1uKS9zKyh0PG4/NjowKTticmVhaztjYXNlIHQ6cj0obi1lKS9zKzI7YnJlYWs7Y2FzZSBuOnI9KGUtdCkvcys0fXIvPTZ9cmV0dXJue2g6cixzOm8sdjpsfX1mdW5jdGlvbiBpKGUsdCxuLHIpe3ZhciBvPVtNKE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpKSxNKE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpKSxNKE1hdGgucm91bmQobikudG9TdHJpbmcoMTYpKV07cmV0dXJuIHImJm9bMF0uY2hhckF0KDApPT1vWzBdLmNoYXJBdCgxKSYmb1sxXS5jaGFyQXQoMCk9PW9bMV0uY2hhckF0KDEpJiZvWzJdLmNoYXJBdCgwKT09b1syXS5jaGFyQXQoMSk/b1swXS5jaGFyQXQoMCkrb1sxXS5jaGFyQXQoMCkrb1syXS5jaGFyQXQoMCk6by5qb2luKFwiXCIpfWZ1bmN0aW9uIGwoZSx0LG4scil7cmV0dXJuW00oXyhyKSksTShNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KSksTShNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KSksTShNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KSldLmpvaW4oXCJcIil9ZnVuY3Rpb24gcyhlLHQpe3Q9MD09PXQ/MDp0fHwxMDt2YXIgbj1yKGUpLnRvSHNsKCk7cmV0dXJuIG4ucy09dC8xMDAsbi5zPVMobi5zKSxyKG4pfWZ1bmN0aW9uIGMoZSx0KXt0PTA9PT10PzA6dHx8MTA7dmFyIG49cihlKS50b0hzbCgpO3JldHVybiBuLnMrPXQvMTAwLG4ucz1TKG4ucykscihuKX1mdW5jdGlvbiB1KGUpe3JldHVybiByKGUpLmRlc2F0dXJhdGUoMTAwKX1mdW5jdGlvbiBkKGUsdCl7dD0wPT09dD8wOnR8fDEwO3ZhciBuPXIoZSkudG9Ic2woKTtyZXR1cm4gbi5sKz10LzEwMCxuLmw9UyhuLmwpLHIobil9ZnVuY3Rpb24gcChlLHQpe3Q9MD09PXQ/MDp0fHwxMDt2YXIgbj1yKGUpLnRvUmdiKCk7cmV0dXJuIG4ucj1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxuLnItTWF0aC5yb3VuZCgtdC8xMDAqMjU1KSkpLG4uZz1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxuLmctTWF0aC5yb3VuZCgtdC8xMDAqMjU1KSkpLG4uYj1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxuLmItTWF0aC5yb3VuZCgtdC8xMDAqMjU1KSkpLHIobil9ZnVuY3Rpb24gZihlLHQpe3Q9MD09PXQ/MDp0fHwxMDt2YXIgbj1yKGUpLnRvSHNsKCk7cmV0dXJuIG4ubC09dC8xMDAsbi5sPVMobi5sKSxyKG4pfWZ1bmN0aW9uIGgoZSx0KXt2YXIgbj1yKGUpLnRvSHNsKCksbz0obi5oK3QpJTM2MDtyZXR1cm4gbi5oPW88MD8zNjArbzpvLHIobil9ZnVuY3Rpb24gZyhlKXt2YXIgdD1yKGUpLnRvSHNsKCk7cmV0dXJuIHQuaD0odC5oKzE4MCklMzYwLHIodCl9ZnVuY3Rpb24gdihlLHQpe2lmKGlzTmFOKHQpfHx0PD0wKXRocm93IG5ldyBFcnJvcihcIkFyZ3VtZW50IHRvIHBvbHlhZCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyXCIpO2Zvcih2YXIgbj1yKGUpLnRvSHNsKCksbz1bcihlKV0sYT0zNjAvdCxpPTE7aTx0O2krKylvLnB1c2gocih7aDoobi5oK2kqYSklMzYwLHM6bi5zLGw6bi5sfSkpO3JldHVybiBvfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9cihlKS50b0hzbCgpLG49dC5oO3JldHVybltyKGUpLHIoe2g6KG4rNzIpJTM2MCxzOnQucyxsOnQubH0pLHIoe2g6KG4rMjE2KSUzNjAsczp0LnMsbDp0Lmx9KV19ZnVuY3Rpb24gbShlLHQsbil7dD10fHw2LG49bnx8MzA7dmFyIG89cihlKS50b0hzbCgpLGE9MzYwL24saT1bcihlKV07Zm9yKG8uaD0oby5oLShhKnQ+PjEpKzcyMCklMzYwOy0tdDspby5oPShvLmgrYSklMzYwLGkucHVzaChyKG8pKTtyZXR1cm4gaX1mdW5jdGlvbiB3KGUsdCl7dD10fHw2O2Zvcih2YXIgbj1yKGUpLnRvSHN2KCksbz1uLmgsYT1uLnMsaT1uLnYsbD1bXSxzPTEvdDt0LS07KWwucHVzaChyKHtoOm8sczphLHY6aX0pKSxpPShpK3MpJTE7cmV0dXJuIGx9ci5wcm90b3R5cGU9e2lzRGFyazpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJyaWdodG5lc3MoKTwxMjh9LGlzTGlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0RhcmsoKX0saXNWYWxpZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9va30sZ2V0T3JpZ2luYWxJbnB1dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmlnaW5hbElucHV0fSxnZXRGb3JtYXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9ybWF0fSxnZXRBbHBoYTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hfSxnZXRCcmlnaHRuZXNzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50b1JnYigpO3JldHVybigyOTkqZS5yKzU4NyplLmcrMTE0KmUuYikvMWUzfSxnZXRMdW1pbmFuY2U6ZnVuY3Rpb24oKXt2YXIgZSx0LG4scj10aGlzLnRvUmdiKCk7cmV0dXJuIGU9ci5yLzI1NSx0PXIuZy8yNTUsbj1yLmIvMjU1LC4yMTI2KihlPD0uMDM5Mjg/ZS8xMi45MjpNYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpKSsuNzE1MioodDw9LjAzOTI4P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KSkrLjA3MjIqKG48PS4wMzkyOD9uLzEyLjkyOk1hdGgucG93KChuKy4wNTUpLzEuMDU1LDIuNCkpfSxzZXRBbHBoYTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fYT14KGUpLHRoaXMuX3JvdW5kQT1NYXRoLnJvdW5kKDEwMCp0aGlzLl9hKS8xMDAsdGhpc30sdG9Ic3Y6ZnVuY3Rpb24oKXt2YXIgZT1hKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKTtyZXR1cm57aDozNjAqZS5oLHM6ZS5zLHY6ZS52LGE6dGhpcy5fYX19LHRvSHN2U3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9YSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiksdD1NYXRoLnJvdW5kKDM2MCplLmgpLG49TWF0aC5yb3VuZCgxMDAqZS5zKSxyPU1hdGgucm91bmQoMTAwKmUudik7cmV0dXJuIDE9PXRoaXMuX2E/XCJoc3YoXCIrdCtcIiwgXCIrbitcIiUsIFwiK3IrXCIlKVwiOlwiaHN2YShcIit0K1wiLCBcIituK1wiJSwgXCIrcitcIiUsIFwiK3RoaXMuX3JvdW5kQStcIilcIn0sdG9Ic2w6ZnVuY3Rpb24oKXt2YXIgZT1vKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKTtyZXR1cm57aDozNjAqZS5oLHM6ZS5zLGw6ZS5sLGE6dGhpcy5fYX19LHRvSHNsU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9byh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiksdD1NYXRoLnJvdW5kKDM2MCplLmgpLG49TWF0aC5yb3VuZCgxMDAqZS5zKSxyPU1hdGgucm91bmQoMTAwKmUubCk7cmV0dXJuIDE9PXRoaXMuX2E/XCJoc2woXCIrdCtcIiwgXCIrbitcIiUsIFwiK3IrXCIlKVwiOlwiaHNsYShcIit0K1wiLCBcIituK1wiJSwgXCIrcitcIiUsIFwiK3RoaXMuX3JvdW5kQStcIilcIn0sdG9IZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGkodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsZSl9LHRvSGV4U3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVyblwiI1wiK3RoaXMudG9IZXgoZSl9LHRvSGV4ODpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgYT1bTShNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KSksTShNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KSksTShNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KSksTShfKHIpKV07cmV0dXJuIG8mJmFbMF0uY2hhckF0KDApPT1hWzBdLmNoYXJBdCgxKSYmYVsxXS5jaGFyQXQoMCk9PWFbMV0uY2hhckF0KDEpJiZhWzJdLmNoYXJBdCgwKT09YVsyXS5jaGFyQXQoMSkmJmFbM10uY2hhckF0KDApPT1hWzNdLmNoYXJBdCgxKT9hWzBdLmNoYXJBdCgwKSthWzFdLmNoYXJBdCgwKSthWzJdLmNoYXJBdCgwKSthWzNdLmNoYXJBdCgwKTphLmpvaW4oXCJcIil9KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHRoaXMuX2EsZSl9LHRvSGV4OFN0cmluZzpmdW5jdGlvbihlKXtyZXR1cm5cIiNcIit0aGlzLnRvSGV4OChlKX0sdG9SZ2I6ZnVuY3Rpb24oKXtyZXR1cm57cjpNYXRoLnJvdW5kKHRoaXMuX3IpLGc6TWF0aC5yb3VuZCh0aGlzLl9nKSxiOk1hdGgucm91bmQodGhpcy5fYiksYTp0aGlzLl9hfX0sdG9SZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT9cInJnYihcIitNYXRoLnJvdW5kKHRoaXMuX3IpK1wiLCBcIitNYXRoLnJvdW5kKHRoaXMuX2cpK1wiLCBcIitNYXRoLnJvdW5kKHRoaXMuX2IpK1wiKVwiOlwicmdiYShcIitNYXRoLnJvdW5kKHRoaXMuX3IpK1wiLCBcIitNYXRoLnJvdW5kKHRoaXMuX2cpK1wiLCBcIitNYXRoLnJvdW5kKHRoaXMuX2IpK1wiLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvUGVyY2VudGFnZVJnYjpmdW5jdGlvbigpe3JldHVybntyOk1hdGgucm91bmQoMTAwKmsodGhpcy5fciwyNTUpKStcIiVcIixnOk1hdGgucm91bmQoMTAwKmsodGhpcy5fZywyNTUpKStcIiVcIixiOk1hdGgucm91bmQoMTAwKmsodGhpcy5fYiwyNTUpKStcIiVcIixhOnRoaXMuX2F9fSx0b1BlcmNlbnRhZ2VSZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT9cInJnYihcIitNYXRoLnJvdW5kKDEwMCprKHRoaXMuX3IsMjU1KSkrXCIlLCBcIitNYXRoLnJvdW5kKDEwMCprKHRoaXMuX2csMjU1KSkrXCIlLCBcIitNYXRoLnJvdW5kKDEwMCprKHRoaXMuX2IsMjU1KSkrXCIlKVwiOlwicmdiYShcIitNYXRoLnJvdW5kKDEwMCprKHRoaXMuX3IsMjU1KSkrXCIlLCBcIitNYXRoLnJvdW5kKDEwMCprKHRoaXMuX2csMjU1KSkrXCIlLCBcIitNYXRoLnJvdW5kKDEwMCprKHRoaXMuX2IsMjU1KSkrXCIlLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvTmFtZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5fYT9cInRyYW5zcGFyZW50XCI6ISh0aGlzLl9hPDEpJiYoeVtpKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLCEwKV18fCExKX0sdG9GaWx0ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9XCIjXCIrbCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0aGlzLl9hKSxuPXQsbz10aGlzLl9ncmFkaWVudFR5cGU/XCJHcmFkaWVudFR5cGUgPSAxLCBcIjpcIlwiO2lmKGUpe3ZhciBhPXIoZSk7bj1cIiNcIitsKGEuX3IsYS5fZyxhLl9iLGEuX2EpfXJldHVyblwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KFwiK28rXCJzdGFydENvbG9yc3RyPVwiK3QrXCIsZW5kQ29sb3JzdHI9XCIrbitcIilcIn0sdG9TdHJpbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ISFlO2U9ZXx8dGhpcy5fZm9ybWF0O3ZhciBuPSExLHI9dGhpcy5fYTwxJiZ0aGlzLl9hPj0wO3JldHVybiB0fHwhcnx8XCJoZXhcIiE9PWUmJlwiaGV4NlwiIT09ZSYmXCJoZXgzXCIhPT1lJiZcImhleDRcIiE9PWUmJlwiaGV4OFwiIT09ZSYmXCJuYW1lXCIhPT1lPyhcInJnYlwiPT09ZSYmKG49dGhpcy50b1JnYlN0cmluZygpKSxcInByZ2JcIj09PWUmJihuPXRoaXMudG9QZXJjZW50YWdlUmdiU3RyaW5nKCkpLFwiaGV4XCIhPT1lJiZcImhleDZcIiE9PWV8fChuPXRoaXMudG9IZXhTdHJpbmcoKSksXCJoZXgzXCI9PT1lJiYobj10aGlzLnRvSGV4U3RyaW5nKCEwKSksXCJoZXg0XCI9PT1lJiYobj10aGlzLnRvSGV4OFN0cmluZyghMCkpLFwiaGV4OFwiPT09ZSYmKG49dGhpcy50b0hleDhTdHJpbmcoKSksXCJuYW1lXCI9PT1lJiYobj10aGlzLnRvTmFtZSgpKSxcImhzbFwiPT09ZSYmKG49dGhpcy50b0hzbFN0cmluZygpKSxcImhzdlwiPT09ZSYmKG49dGhpcy50b0hzdlN0cmluZygpKSxufHx0aGlzLnRvSGV4U3RyaW5nKCkpOlwibmFtZVwiPT09ZSYmMD09PXRoaXMuX2E/dGhpcy50b05hbWUoKTp0aGlzLnRvUmdiU3RyaW5nKCl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy50b1N0cmluZygpKX0sX2FwcGx5TW9kaWZpY2F0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5hcHBseShudWxsLFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbCh0KSkpO3JldHVybiB0aGlzLl9yPW4uX3IsdGhpcy5fZz1uLl9nLHRoaXMuX2I9bi5fYix0aGlzLnNldEFscGhhKG4uX2EpLHRoaXN9LGxpZ2h0ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZCxhcmd1bWVudHMpfSxicmlnaHRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihwLGFyZ3VtZW50cyl9LGRhcmtlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihmLGFyZ3VtZW50cyl9LGRlc2F0dXJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24ocyxhcmd1bWVudHMpfSxzYXR1cmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihjLGFyZ3VtZW50cyl9LGdyZXlzY2FsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih1LGFyZ3VtZW50cyl9LHNwaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oaCxhcmd1bWVudHMpfSxfYXBwbHlDb21iaW5hdGlvbjpmdW5jdGlvbihlLHQpe3JldHVybiBlLmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKHQpKSl9LGFuYWxvZ291czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKG0sYXJndW1lbnRzKX0sY29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKGcsYXJndW1lbnRzKX0sbW9ub2Nocm9tYXRpYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHcsYXJndW1lbnRzKX0sc3BsaXRjb21wbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oQyxhcmd1bWVudHMpfSx0cmlhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHYsWzNdKX0sdGV0cmFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24odixbNF0pfX0sci5mcm9tUmF0aW89ZnVuY3Rpb24odCxuKXtpZihcIm9iamVjdFwiPT1lKHQpKXt2YXIgbz17fTtmb3IodmFyIGEgaW4gdCl0Lmhhc093blByb3BlcnR5KGEpJiYob1thXT1cImFcIj09PWE/dFthXTpMKHRbYV0pKTt0PW99cmV0dXJuIHIodCxuKX0sci5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hKCFlfHwhdCkmJnIoZSkudG9SZ2JTdHJpbmcoKT09cih0KS50b1JnYlN0cmluZygpfSxyLnJhbmRvbT1mdW5jdGlvbigpe3JldHVybiByLmZyb21SYXRpbyh7cjpNYXRoLnJhbmRvbSgpLGc6TWF0aC5yYW5kb20oKSxiOk1hdGgucmFuZG9tKCl9KX0sci5taXg9ZnVuY3Rpb24oZSx0LG4pe249MD09PW4/MDpufHw1MDt2YXIgbz1yKGUpLnRvUmdiKCksYT1yKHQpLnRvUmdiKCksaT1uLzEwMDtyZXR1cm4gcih7cjooYS5yLW8ucikqaStvLnIsZzooYS5nLW8uZykqaStvLmcsYjooYS5iLW8uYikqaStvLmIsYTooYS5hLW8uYSkqaStvLmF9KX0sci5yZWFkYWJpbGl0eT1mdW5jdGlvbihlLHQpe3ZhciBuPXIoZSksbz1yKHQpO3JldHVybihNYXRoLm1heChuLmdldEx1bWluYW5jZSgpLG8uZ2V0THVtaW5hbmNlKCkpKy4wNSkvKE1hdGgubWluKG4uZ2V0THVtaW5hbmNlKCksby5nZXRMdW1pbmFuY2UoKSkrLjA1KX0sci5pc1JlYWRhYmxlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbyxhLGksbCxzLGM9ci5yZWFkYWJpbGl0eShlLHQpO3N3aXRjaChhPSExLChpPW4sXCJBQVwiIT09KGw9KChpPWl8fHtsZXZlbDpcIkFBXCIsc2l6ZTpcInNtYWxsXCJ9KS5sZXZlbHx8XCJBQVwiKS50b1VwcGVyQ2FzZSgpKSYmXCJBQUFcIiE9PWwmJihsPVwiQUFcIiksXCJzbWFsbFwiIT09KHM9KGkuc2l6ZXx8XCJzbWFsbFwiKS50b0xvd2VyQ2FzZSgpKSYmXCJsYXJnZVwiIT09cyYmKHM9XCJzbWFsbFwiKSxvPXtsZXZlbDpsLHNpemU6c30pLmxldmVsK28uc2l6ZSl7Y2FzZVwiQUFzbWFsbFwiOmNhc2VcIkFBQWxhcmdlXCI6YT1jPj00LjU7YnJlYWs7Y2FzZVwiQUFsYXJnZVwiOmE9Yz49MzticmVhaztjYXNlXCJBQUFzbWFsbFwiOmE9Yz49N31yZXR1cm4gYX0sci5tb3N0UmVhZGFibGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvLGEsaSxsLHM9bnVsbCxjPTA7YT0obj1ufHx7fSkuaW5jbHVkZUZhbGxiYWNrQ29sb3JzLGk9bi5sZXZlbCxsPW4uc2l6ZTtmb3IodmFyIHU9MDt1PHQubGVuZ3RoO3UrKykobz1yLnJlYWRhYmlsaXR5KGUsdFt1XSkpPmMmJihjPW8scz1yKHRbdV0pKTtyZXR1cm4gci5pc1JlYWRhYmxlKGUscyx7bGV2ZWw6aSxzaXplOmx9KXx8IWE/czoobi5pbmNsdWRlRmFsbGJhY2tDb2xvcnM9ITEsci5tb3N0UmVhZGFibGUoZSxbXCIjZmZmXCIsXCIjMDAwXCJdLG4pKX07dmFyIGI9ci5uYW1lcz17YWxpY2VibHVlOlwiZjBmOGZmXCIsYW50aXF1ZXdoaXRlOlwiZmFlYmQ3XCIsYXF1YTpcIjBmZlwiLGFxdWFtYXJpbmU6XCI3ZmZmZDRcIixhenVyZTpcImYwZmZmZlwiLGJlaWdlOlwiZjVmNWRjXCIsYmlzcXVlOlwiZmZlNGM0XCIsYmxhY2s6XCIwMDBcIixibGFuY2hlZGFsbW9uZDpcImZmZWJjZFwiLGJsdWU6XCIwMGZcIixibHVldmlvbGV0OlwiOGEyYmUyXCIsYnJvd246XCJhNTJhMmFcIixidXJseXdvb2Q6XCJkZWI4ODdcIixidXJudHNpZW5uYTpcImVhN2U1ZFwiLGNhZGV0Ymx1ZTpcIjVmOWVhMFwiLGNoYXJ0cmV1c2U6XCI3ZmZmMDBcIixjaG9jb2xhdGU6XCJkMjY5MWVcIixjb3JhbDpcImZmN2Y1MFwiLGNvcm5mbG93ZXJibHVlOlwiNjQ5NWVkXCIsY29ybnNpbGs6XCJmZmY4ZGNcIixjcmltc29uOlwiZGMxNDNjXCIsY3lhbjpcIjBmZlwiLGRhcmtibHVlOlwiMDAwMDhiXCIsZGFya2N5YW46XCIwMDhiOGJcIixkYXJrZ29sZGVucm9kOlwiYjg4NjBiXCIsZGFya2dyYXk6XCJhOWE5YTlcIixkYXJrZ3JlZW46XCIwMDY0MDBcIixkYXJrZ3JleTpcImE5YTlhOVwiLGRhcmtraGFraTpcImJkYjc2YlwiLGRhcmttYWdlbnRhOlwiOGIwMDhiXCIsZGFya29saXZlZ3JlZW46XCI1NTZiMmZcIixkYXJrb3JhbmdlOlwiZmY4YzAwXCIsZGFya29yY2hpZDpcIjk5MzJjY1wiLGRhcmtyZWQ6XCI4YjAwMDBcIixkYXJrc2FsbW9uOlwiZTk5NjdhXCIsZGFya3NlYWdyZWVuOlwiOGZiYzhmXCIsZGFya3NsYXRlYmx1ZTpcIjQ4M2Q4YlwiLGRhcmtzbGF0ZWdyYXk6XCIyZjRmNGZcIixkYXJrc2xhdGVncmV5OlwiMmY0ZjRmXCIsZGFya3R1cnF1b2lzZTpcIjAwY2VkMVwiLGRhcmt2aW9sZXQ6XCI5NDAwZDNcIixkZWVwcGluazpcImZmMTQ5M1wiLGRlZXBza3libHVlOlwiMDBiZmZmXCIsZGltZ3JheTpcIjY5Njk2OVwiLGRpbWdyZXk6XCI2OTY5NjlcIixkb2RnZXJibHVlOlwiMWU5MGZmXCIsZmlyZWJyaWNrOlwiYjIyMjIyXCIsZmxvcmFsd2hpdGU6XCJmZmZhZjBcIixmb3Jlc3RncmVlbjpcIjIyOGIyMlwiLGZ1Y2hzaWE6XCJmMGZcIixnYWluc2Jvcm86XCJkY2RjZGNcIixnaG9zdHdoaXRlOlwiZjhmOGZmXCIsZ29sZDpcImZmZDcwMFwiLGdvbGRlbnJvZDpcImRhYTUyMFwiLGdyYXk6XCI4MDgwODBcIixncmVlbjpcIjAwODAwMFwiLGdyZWVueWVsbG93OlwiYWRmZjJmXCIsZ3JleTpcIjgwODA4MFwiLGhvbmV5ZGV3OlwiZjBmZmYwXCIsaG90cGluazpcImZmNjliNFwiLGluZGlhbnJlZDpcImNkNWM1Y1wiLGluZGlnbzpcIjRiMDA4MlwiLGl2b3J5OlwiZmZmZmYwXCIsa2hha2k6XCJmMGU2OGNcIixsYXZlbmRlcjpcImU2ZTZmYVwiLGxhdmVuZGVyYmx1c2g6XCJmZmYwZjVcIixsYXduZ3JlZW46XCI3Y2ZjMDBcIixsZW1vbmNoaWZmb246XCJmZmZhY2RcIixsaWdodGJsdWU6XCJhZGQ4ZTZcIixsaWdodGNvcmFsOlwiZjA4MDgwXCIsbGlnaHRjeWFuOlwiZTBmZmZmXCIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6XCJmYWZhZDJcIixsaWdodGdyYXk6XCJkM2QzZDNcIixsaWdodGdyZWVuOlwiOTBlZTkwXCIsbGlnaHRncmV5OlwiZDNkM2QzXCIsbGlnaHRwaW5rOlwiZmZiNmMxXCIsbGlnaHRzYWxtb246XCJmZmEwN2FcIixsaWdodHNlYWdyZWVuOlwiMjBiMmFhXCIsbGlnaHRza3libHVlOlwiODdjZWZhXCIsbGlnaHRzbGF0ZWdyYXk6XCI3ODlcIixsaWdodHNsYXRlZ3JleTpcIjc4OVwiLGxpZ2h0c3RlZWxibHVlOlwiYjBjNGRlXCIsbGlnaHR5ZWxsb3c6XCJmZmZmZTBcIixsaW1lOlwiMGYwXCIsbGltZWdyZWVuOlwiMzJjZDMyXCIsbGluZW46XCJmYWYwZTZcIixtYWdlbnRhOlwiZjBmXCIsbWFyb29uOlwiODAwMDAwXCIsbWVkaXVtYXF1YW1hcmluZTpcIjY2Y2RhYVwiLG1lZGl1bWJsdWU6XCIwMDAwY2RcIixtZWRpdW1vcmNoaWQ6XCJiYTU1ZDNcIixtZWRpdW1wdXJwbGU6XCI5MzcwZGJcIixtZWRpdW1zZWFncmVlbjpcIjNjYjM3MVwiLG1lZGl1bXNsYXRlYmx1ZTpcIjdiNjhlZVwiLG1lZGl1bXNwcmluZ2dyZWVuOlwiMDBmYTlhXCIsbWVkaXVtdHVycXVvaXNlOlwiNDhkMWNjXCIsbWVkaXVtdmlvbGV0cmVkOlwiYzcxNTg1XCIsbWlkbmlnaHRibHVlOlwiMTkxOTcwXCIsbWludGNyZWFtOlwiZjVmZmZhXCIsbWlzdHlyb3NlOlwiZmZlNGUxXCIsbW9jY2FzaW46XCJmZmU0YjVcIixuYXZham93aGl0ZTpcImZmZGVhZFwiLG5hdnk6XCIwMDAwODBcIixvbGRsYWNlOlwiZmRmNWU2XCIsb2xpdmU6XCI4MDgwMDBcIixvbGl2ZWRyYWI6XCI2YjhlMjNcIixvcmFuZ2U6XCJmZmE1MDBcIixvcmFuZ2VyZWQ6XCJmZjQ1MDBcIixvcmNoaWQ6XCJkYTcwZDZcIixwYWxlZ29sZGVucm9kOlwiZWVlOGFhXCIscGFsZWdyZWVuOlwiOThmYjk4XCIscGFsZXR1cnF1b2lzZTpcImFmZWVlZVwiLHBhbGV2aW9sZXRyZWQ6XCJkYjcwOTNcIixwYXBheWF3aGlwOlwiZmZlZmQ1XCIscGVhY2hwdWZmOlwiZmZkYWI5XCIscGVydTpcImNkODUzZlwiLHBpbms6XCJmZmMwY2JcIixwbHVtOlwiZGRhMGRkXCIscG93ZGVyYmx1ZTpcImIwZTBlNlwiLHB1cnBsZTpcIjgwMDA4MFwiLHJlYmVjY2FwdXJwbGU6XCI2NjMzOTlcIixyZWQ6XCJmMDBcIixyb3N5YnJvd246XCJiYzhmOGZcIixyb3lhbGJsdWU6XCI0MTY5ZTFcIixzYWRkbGVicm93bjpcIjhiNDUxM1wiLHNhbG1vbjpcImZhODA3MlwiLHNhbmR5YnJvd246XCJmNGE0NjBcIixzZWFncmVlbjpcIjJlOGI1N1wiLHNlYXNoZWxsOlwiZmZmNWVlXCIsc2llbm5hOlwiYTA1MjJkXCIsc2lsdmVyOlwiYzBjMGMwXCIsc2t5Ymx1ZTpcIjg3Y2VlYlwiLHNsYXRlYmx1ZTpcIjZhNWFjZFwiLHNsYXRlZ3JheTpcIjcwODA5MFwiLHNsYXRlZ3JleTpcIjcwODA5MFwiLHNub3c6XCJmZmZhZmFcIixzcHJpbmdncmVlbjpcIjAwZmY3ZlwiLHN0ZWVsYmx1ZTpcIjQ2ODJiNFwiLHRhbjpcImQyYjQ4Y1wiLHRlYWw6XCIwMDgwODBcIix0aGlzdGxlOlwiZDhiZmQ4XCIsdG9tYXRvOlwiZmY2MzQ3XCIsdHVycXVvaXNlOlwiNDBlMGQwXCIsdmlvbGV0OlwiZWU4MmVlXCIsd2hlYXQ6XCJmNWRlYjNcIix3aGl0ZTpcImZmZlwiLHdoaXRlc21va2U6XCJmNWY1ZjVcIix5ZWxsb3c6XCJmZjBcIix5ZWxsb3dncmVlbjpcIjlhY2QzMlwifSx5PXIuaGV4TmFtZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9e307Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbZVtuXV09bik7cmV0dXJuIHR9KGIpO2Z1bmN0aW9uIHgoZSl7cmV0dXJuIGU9cGFyc2VGbG9hdChlKSwoaXNOYU4oZSl8fGU8MHx8ZT4xKSYmKGU9MSksZX1mdW5jdGlvbiBrKGUsdCl7KGZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYtMSE9ZS5pbmRleE9mKFwiLlwiKSYmMT09PXBhcnNlRmxvYXQoZSl9KShlKSYmKGU9XCIxMDAlXCIpO3ZhciBuPWZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYtMSE9ZS5pbmRleE9mKFwiJVwiKX0oZSk7cmV0dXJuIGU9TWF0aC5taW4odCxNYXRoLm1heCgwLHBhcnNlRmxvYXQoZSkpKSxuJiYoZT1wYXJzZUludChlKnQsMTApLzEwMCksTWF0aC5hYnMoZS10KTwxZS02PzE6ZSV0L3BhcnNlRmxvYXQodCl9ZnVuY3Rpb24gUyhlKXtyZXR1cm4gTWF0aC5taW4oMSxNYXRoLm1heCgwLGUpKX1mdW5jdGlvbiBPKGUpe3JldHVybiBwYXJzZUludChlLDE2KX1mdW5jdGlvbiBNKGUpe3JldHVybiAxPT1lLmxlbmd0aD9cIjBcIitlOlwiXCIrZX1mdW5jdGlvbiBMKGUpe3JldHVybiBlPD0xJiYoZT0xMDAqZStcIiVcIiksZX1mdW5jdGlvbiBfKGUpe3JldHVybiBNYXRoLnJvdW5kKDI1NSpwYXJzZUZsb2F0KGUpKS50b1N0cmluZygxNil9ZnVuY3Rpb24gUChlKXtyZXR1cm4gTyhlKS8yNTV9dmFyIEUsaixSLEk9KGo9XCJbXFxcXHN8XFxcXChdKyhcIisoRT1cIig/OlstXFxcXCtdP1xcXFxkKlxcXFwuXFxcXGQrJT8pfCg/OlstXFxcXCtdP1xcXFxkKyU/KVwiKStcIilbLHxcXFxcc10rKFwiK0UrXCIpWyx8XFxcXHNdKyhcIitFK1wiKVxcXFxzKlxcXFwpP1wiLFI9XCJbXFxcXHN8XFxcXChdKyhcIitFK1wiKVssfFxcXFxzXSsoXCIrRStcIilbLHxcXFxcc10rKFwiK0UrXCIpWyx8XFxcXHNdKyhcIitFK1wiKVxcXFxzKlxcXFwpP1wiLHtDU1NfVU5JVDpuZXcgUmVnRXhwKEUpLHJnYjpuZXcgUmVnRXhwKFwicmdiXCIraikscmdiYTpuZXcgUmVnRXhwKFwicmdiYVwiK1IpLGhzbDpuZXcgUmVnRXhwKFwiaHNsXCIraiksaHNsYTpuZXcgUmVnRXhwKFwiaHNsYVwiK1IpLGhzdjpuZXcgUmVnRXhwKFwiaHN2XCIraiksaHN2YTpuZXcgUmVnRXhwKFwiaHN2YVwiK1IpLGhleDM6L14jPyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KSQvLGhleDY6L14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvLGhleDQ6L14jPyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg4Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pJC99KTtmdW5jdGlvbiBWKGUpe3JldHVybiEhSS5DU1NfVU5JVC5leGVjKGUpfXJldHVybiByfSgpfX0sbz17fTtmdW5jdGlvbiBhKGUpe3ZhciB0PW9bZV07aWYodm9pZCAwIT09dClyZXR1cm4gdC5leHBvcnRzO3ZhciBuPW9bZV09e2lkOmUsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiByW2VdLmNhbGwobi5leHBvcnRzLG4sbi5leHBvcnRzLGEpLG4ubG9hZGVkPSEwLG4uZXhwb3J0c31hLm49ZT0+e3ZhciB0PWUmJmUuX19lc01vZHVsZT8oKT0+ZS5kZWZhdWx0OigpPT5lO3JldHVybiBhLmQodCx7YTp0fSksdH0sYS5kPShlLHQpPT57Zm9yKHZhciBuIGluIHQpYS5vKHQsbikmJiFhLm8oZSxuKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSxhLmc9ZnVuY3Rpb24oKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2goZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxhLm89KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpLGEucj1lPT57XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sYS5ubWQ9ZT0+KGUucGF0aHM9W10sZS5jaGlsZHJlbnx8KGUuY2hpbGRyZW49W10pLGUpO3ZhciBpPWEoMzQxKSxsPXQ7Zm9yKHZhciBzIGluIGkpbFtzXT1pW3NdO2kuX19lc01vZHVsZSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LDE5ODooZSx0LG4pPT57dmFyIHI9TmFOLG89XCJbb2JqZWN0IFN5bWJvbF1cIixhPS9eXFxzK3xcXHMrJC9nLGk9L15bLStdMHhbMC05YS1mXSskL2ksbD0vXjBiWzAxXSskL2kscz0vXjBvWzAtN10rJC9pLGM9cGFyc2VJbnQsdT1cIm9iamVjdFwiPT10eXBlb2Ygbi5nJiZuLmcmJm4uZy5PYmplY3Q9PT1PYmplY3QmJm4uZyxkPVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixwPXV8fGR8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxmPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaD1NYXRoLm1heCxnPU1hdGgubWluLHY9ZnVuY3Rpb24oKXtyZXR1cm4gcC5EYXRlLm5vdygpfTtmdW5jdGlvbiBDKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiEhZSYmKFwib2JqZWN0XCI9PXR8fFwiZnVuY3Rpb25cIj09dCl9ZnVuY3Rpb24gbShlKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSlyZXR1cm4gZTtpZihmdW5jdGlvbihlKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZXx8ZnVuY3Rpb24oZSl7cmV0dXJuISFlJiZcIm9iamVjdFwiPT10eXBlb2YgZX0oZSkmJmYuY2FsbChlKT09b30oZSkpcmV0dXJuIHI7aWYoQyhlKSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZS52YWx1ZU9mP2UudmFsdWVPZigpOmU7ZT1DKHQpP3QrXCJcIjp0fWlmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybiAwPT09ZT9lOitlO2U9ZS5yZXBsYWNlKGEsXCJcIik7dmFyIG49bC50ZXN0KGUpO3JldHVybiBufHxzLnRlc3QoZSk/YyhlLnNsaWNlKDIpLG4/Mjo4KTppLnRlc3QoZSk/cjorZX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8sYSxpLGwscyxjPTAsdT0hMSxkPSExLHA9ITA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiKTtmdW5jdGlvbiBmKHQpe3ZhciBuPXIsYT1vO3JldHVybiByPW89dm9pZCAwLGM9dCxpPWUuYXBwbHkoYSxuKX1mdW5jdGlvbiB3KGUpe3ZhciBuPWUtcztyZXR1cm4gdm9pZCAwPT09c3x8bj49dHx8bjwwfHxkJiZlLWM+PWF9ZnVuY3Rpb24gYigpe3ZhciBlPXYoKTtpZih3KGUpKXJldHVybiB5KGUpO2w9c2V0VGltZW91dChiLGZ1bmN0aW9uKGUpe3ZhciBuPXQtKGUtcyk7cmV0dXJuIGQ/ZyhuLGEtKGUtYykpOm59KGUpKX1mdW5jdGlvbiB5KGUpe3JldHVybiBsPXZvaWQgMCxwJiZyP2YoZSk6KHI9bz12b2lkIDAsaSl9ZnVuY3Rpb24geCgpe3ZhciBlPXYoKSxuPXcoZSk7aWYocj1hcmd1bWVudHMsbz10aGlzLHM9ZSxuKXtpZih2b2lkIDA9PT1sKXJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gYz1lLGw9c2V0VGltZW91dChiLHQpLHU/ZihlKTppfShzKTtpZihkKXJldHVybiBsPXNldFRpbWVvdXQoYix0KSxmKHMpfXJldHVybiB2b2lkIDA9PT1sJiYobD1zZXRUaW1lb3V0KGIsdCkpLGl9cmV0dXJuIHQ9bSh0KXx8MCxDKG4pJiYodT0hIW4ubGVhZGluZyxhPShkPVwibWF4V2FpdFwiaW4gbik/aChtKG4ubWF4V2FpdCl8fDAsdCk6YSxwPVwidHJhaWxpbmdcImluIG4/ISFuLnRyYWlsaW5nOnApLHguY2FuY2VsPWZ1bmN0aW9uKCl7dm9pZCAwIT09bCYmY2xlYXJUaW1lb3V0KGwpLGM9MCxyPXM9bz1sPXZvaWQgMH0seC5mbHVzaD1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1sP2k6eSh2KCkpfSx4fX0sNTI1OmU9PntcInVzZSBzdHJpY3RcIjt2YXIgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxyPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciBlPW5ldyBTdHJpbmcoXCJhYmNcIik7aWYoZVs1XT1cImRlXCIsXCI1XCI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKVswXSlyZXR1cm4hMTtmb3IodmFyIHQ9e30sbj0wO248MTA7bisrKXRbXCJfXCIrU3RyaW5nLmZyb21DaGFyQ29kZShuKV09bjtpZihcIjAxMjM0NTY3ODlcIiE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSkuam9pbihcIlwiKSlyZXR1cm4hMTt2YXIgcj17fTtyZXR1cm5cImFiY2RlZmdoaWprbG1ub3BxcnN0XCIuc3BsaXQoXCJcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cltlXT1lfSkpLFwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIj09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30scikpLmpvaW4oXCJcIil9Y2F0Y2goZSl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24oZSxvKXtmb3IodmFyIGEsaSxsPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBPYmplY3QoZSl9KGUpLHM9MTtzPGFyZ3VtZW50cy5sZW5ndGg7cysrKXtmb3IodmFyIGMgaW4gYT1PYmplY3QoYXJndW1lbnRzW3NdKSluLmNhbGwoYSxjKSYmKGxbY109YVtjXSk7aWYodCl7aT10KGEpO2Zvcih2YXIgdT0wO3U8aS5sZW5ndGg7dSsrKXIuY2FsbChhLGlbdV0pJiYobFtpW3VdXT1hW2lbdV1dKX19cmV0dXJuIGx9fSw3MDI6KGUsdCk9PntcInVzZSBzdHJpY3RcIjt2YXIgbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Iscj1uP1N5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpOjYwMTAzLG89bj9TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpOjYwMTA2LGE9bj9TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIik6NjAxMDcsaT1uP1N5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTo2MDEwOCxsPW4/U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpOjYwMTE0LHM9bj9TeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik6NjAxMDksYz1uP1N5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpOjYwMTEwLHU9bj9TeW1ib2wuZm9yKFwicmVhY3QuYXN5bmNfbW9kZVwiKTo2MDExMSxkPW4/U3ltYm9sLmZvcihcInJlYWN0LmNvbmN1cnJlbnRfbW9kZVwiKTo2MDExMSxwPW4/U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpOjYwMTEyLGY9bj9TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIik6NjAxMTMsaD1uP1N5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpOjYwMTIwLGc9bj9TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKTo2MDExNSx2PW4/U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik6NjAxMTYsQz1uP1N5bWJvbC5mb3IoXCJyZWFjdC5ibG9ja1wiKTo2MDEyMSxtPW4/U3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpOjYwMTE3LHc9bj9TeW1ib2wuZm9yKFwicmVhY3QucmVzcG9uZGVyXCIpOjYwMTE4LGI9bj9TeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIik6NjAxMTk7ZnVuY3Rpb24geShlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUpe3ZhciB0PWUuJCR0eXBlb2Y7c3dpdGNoKHQpe2Nhc2Ugcjpzd2l0Y2goZT1lLnR5cGUpe2Nhc2UgdTpjYXNlIGQ6Y2FzZSBhOmNhc2UgbDpjYXNlIGk6Y2FzZSBmOnJldHVybiBlO2RlZmF1bHQ6c3dpdGNoKGU9ZSYmZS4kJHR5cGVvZil7Y2FzZSBjOmNhc2UgcDpjYXNlIHY6Y2FzZSBnOmNhc2UgczpyZXR1cm4gZTtkZWZhdWx0OnJldHVybiB0fX1jYXNlIG86cmV0dXJuIHR9fX1mdW5jdGlvbiB4KGUpe3JldHVybiB5KGUpPT09ZH10LkZvcndhcmRSZWY9cCx0LmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZXx8ZT09PWF8fGU9PT1kfHxlPT09bHx8ZT09PWl8fGU9PT1mfHxlPT09aHx8XCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiYoZS4kJHR5cGVvZj09PXZ8fGUuJCR0eXBlb2Y9PT1nfHxlLiQkdHlwZW9mPT09c3x8ZS4kJHR5cGVvZj09PWN8fGUuJCR0eXBlb2Y9PT1wfHxlLiQkdHlwZW9mPT09bXx8ZS4kJHR5cGVvZj09PXd8fGUuJCR0eXBlb2Y9PT1ifHxlLiQkdHlwZW9mPT09Qyl9fSwxODU6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1uKDcwMil9LDUzNTooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9big1MjUpLG89NjAxMDMsYT02MDEwNjt0LkZyYWdtZW50PTYwMTA3LHQuU3RyaWN0TW9kZT02MDEwOCx0LlByb2ZpbGVyPTYwMTE0O3ZhciBpPTYwMTA5LGw9NjAxMTAscz02MDExMjt0LlN1c3BlbnNlPTYwMTEzO3ZhciBjPTYwMTE1LHU9NjAxMTY7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yKXt2YXIgZD1TeW1ib2wuZm9yO289ZChcInJlYWN0LmVsZW1lbnRcIiksYT1kKFwicmVhY3QucG9ydGFsXCIpLHQuRnJhZ21lbnQ9ZChcInJlYWN0LmZyYWdtZW50XCIpLHQuU3RyaWN0TW9kZT1kKFwicmVhY3Quc3RyaWN0X21vZGVcIiksdC5Qcm9maWxlcj1kKFwicmVhY3QucHJvZmlsZXJcIiksaT1kKFwicmVhY3QucHJvdmlkZXJcIiksbD1kKFwicmVhY3QuY29udGV4dFwiKSxzPWQoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSx0LlN1c3BlbnNlPWQoXCJyZWFjdC5zdXNwZW5zZVwiKSxjPWQoXCJyZWFjdC5tZW1vXCIpLHU9ZChcInJlYWN0LmxhenlcIil9dmFyIHA9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I7ZnVuY3Rpb24gZihlKXtmb3IodmFyIHQ9XCJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD1cIitlLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXQrPVwiJmFyZ3NbXT1cIitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW25dKTtyZXR1cm5cIk1pbmlmaWVkIFJlYWN0IGVycm9yICNcIitlK1wiOyB2aXNpdCBcIit0K1wiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5cIn12YXIgaD17aXNNb3VudGVkOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKCl7fX0sZz17fTtmdW5jdGlvbiB2KGUsdCxuKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPWcsdGhpcy51cGRhdGVyPW58fGh9ZnVuY3Rpb24gQygpe31mdW5jdGlvbiBtKGUsdCxuKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPWcsdGhpcy51cGRhdGVyPW58fGh9di5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fSx2LnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT1lKXRocm93IEVycm9yKGYoODUpKTt0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsZSx0LFwic2V0U3RhdGVcIil9LHYucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcyxlLFwiZm9yY2VVcGRhdGVcIil9LEMucHJvdG90eXBlPXYucHJvdG90eXBlO3ZhciB3PW0ucHJvdG90eXBlPW5ldyBDO3cuY29uc3RydWN0b3I9bSxyKHcsdi5wcm90b3R5cGUpLHcuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIGI9e2N1cnJlbnQ6bnVsbH0seT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHg9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtmdW5jdGlvbiBrKGUsdCxuKXt2YXIgcixhPXt9LGk9bnVsbCxsPW51bGw7aWYobnVsbCE9dClmb3IociBpbiB2b2lkIDAhPT10LnJlZiYmKGw9dC5yZWYpLHZvaWQgMCE9PXQua2V5JiYoaT1cIlwiK3Qua2V5KSx0KXkuY2FsbCh0LHIpJiYheC5oYXNPd25Qcm9wZXJ0eShyKSYmKGFbcl09dFtyXSk7dmFyIHM9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT1zKWEuY2hpbGRyZW49bjtlbHNlIGlmKDE8cyl7Zm9yKHZhciBjPUFycmF5KHMpLHU9MDt1PHM7dSsrKWNbdV09YXJndW1lbnRzW3UrMl07YS5jaGlsZHJlbj1jfWlmKGUmJmUuZGVmYXVsdFByb3BzKWZvcihyIGluIHM9ZS5kZWZhdWx0UHJvcHMpdm9pZCAwPT09YVtyXSYmKGFbcl09c1tyXSk7cmV0dXJueyQkdHlwZW9mOm8sdHlwZTplLGtleTppLHJlZjpsLHByb3BzOmEsX293bmVyOmIuY3VycmVudH19ZnVuY3Rpb24gUyhlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUmJmUuJCR0eXBlb2Y9PT1vfXZhciBPPS9cXC8rL2c7ZnVuY3Rpb24gTShlLHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmbnVsbCE9ZS5rZXk/ZnVuY3Rpb24oZSl7dmFyIHQ9e1wiPVwiOlwiPTBcIixcIjpcIjpcIj0yXCJ9O3JldHVyblwiJFwiK2UucmVwbGFjZSgvWz06XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKX0oXCJcIitlLmtleSk6dC50b1N0cmluZygzNil9ZnVuY3Rpb24gTChlLHQsbixyLGkpe3ZhciBsPXR5cGVvZiBlO1widW5kZWZpbmVkXCIhPT1sJiZcImJvb2xlYW5cIiE9PWx8fChlPW51bGwpO3ZhciBzPSExO2lmKG51bGw9PT1lKXM9ITA7ZWxzZSBzd2l0Y2gobCl7Y2FzZVwic3RyaW5nXCI6Y2FzZVwibnVtYmVyXCI6cz0hMDticmVhaztjYXNlXCJvYmplY3RcIjpzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSBvOmNhc2UgYTpzPSEwfX1pZihzKXJldHVybiBpPWkocz1lKSxlPVwiXCI9PT1yP1wiLlwiK00ocywwKTpyLEFycmF5LmlzQXJyYXkoaSk/KG49XCJcIixudWxsIT1lJiYobj1lLnJlcGxhY2UoTyxcIiQmL1wiKStcIi9cIiksTChpLHQsbixcIlwiLChmdW5jdGlvbihlKXtyZXR1cm4gZX0pKSk6bnVsbCE9aSYmKFMoaSkmJihpPWZ1bmN0aW9uKGUsdCl7cmV0dXJueyQkdHlwZW9mOm8sdHlwZTplLnR5cGUsa2V5OnQscmVmOmUucmVmLHByb3BzOmUucHJvcHMsX293bmVyOmUuX293bmVyfX0oaSxuKyghaS5rZXl8fHMmJnMua2V5PT09aS5rZXk/XCJcIjooXCJcIitpLmtleSkucmVwbGFjZShPLFwiJCYvXCIpK1wiL1wiKStlKSksdC5wdXNoKGkpKSwxO2lmKHM9MCxyPVwiXCI9PT1yP1wiLlwiOnIrXCI6XCIsQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIGM9MDtjPGUubGVuZ3RoO2MrKyl7dmFyIHU9citNKGw9ZVtjXSxjKTtzKz1MKGwsdCxuLHUsaSl9ZWxzZSBpZih1PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZXx8XCJvYmplY3RcIiE9dHlwZW9mIGU/bnVsbDpcImZ1bmN0aW9uXCI9PXR5cGVvZihlPXAmJmVbcF18fGVbXCJAQGl0ZXJhdG9yXCJdKT9lOm51bGx9KGUpLFwiZnVuY3Rpb25cIj09dHlwZW9mIHUpZm9yKGU9dS5jYWxsKGUpLGM9MDshKGw9ZS5uZXh0KCkpLmRvbmU7KXMrPUwobD1sLnZhbHVlLHQsbix1PXIrTShsLGMrKyksaSk7ZWxzZSBpZihcIm9iamVjdFwiPT09bCl0aHJvdyB0PVwiXCIrZSxFcnJvcihmKDMxLFwiW29iamVjdCBPYmplY3RdXCI9PT10P1wib2JqZWN0IHdpdGgga2V5cyB7XCIrT2JqZWN0LmtleXMoZSkuam9pbihcIiwgXCIpK1wifVwiOnQpKTtyZXR1cm4gc31mdW5jdGlvbiBfKGUsdCxuKXtpZihudWxsPT1lKXJldHVybiBlO3ZhciByPVtdLG89MDtyZXR1cm4gTChlLHIsXCJcIixcIlwiLChmdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKG4sZSxvKyspfSkpLHJ9ZnVuY3Rpb24gUChlKXtpZigtMT09PWUuX3N0YXR1cyl7dmFyIHQ9ZS5fcmVzdWx0O3Q9dCgpLGUuX3N0YXR1cz0wLGUuX3Jlc3VsdD10LHQudGhlbigoZnVuY3Rpb24odCl7MD09PWUuX3N0YXR1cyYmKHQ9dC5kZWZhdWx0LGUuX3N0YXR1cz0xLGUuX3Jlc3VsdD10KX0pLChmdW5jdGlvbih0KXswPT09ZS5fc3RhdHVzJiYoZS5fc3RhdHVzPTIsZS5fcmVzdWx0PXQpfSkpfWlmKDE9PT1lLl9zdGF0dXMpcmV0dXJuIGUuX3Jlc3VsdDt0aHJvdyBlLl9yZXN1bHR9dmFyIEU9e2N1cnJlbnQ6bnVsbH07ZnVuY3Rpb24gaigpe3ZhciBlPUUuY3VycmVudDtpZihudWxsPT09ZSl0aHJvdyBFcnJvcihmKDMyMSkpO3JldHVybiBlfXZhciBSPXtSZWFjdEN1cnJlbnREaXNwYXRjaGVyOkUsUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6e3RyYW5zaXRpb246MH0sUmVhY3RDdXJyZW50T3duZXI6YixJc1NvbWVSZW5kZXJlckFjdGluZzp7Y3VycmVudDohMX0sYXNzaWduOnJ9O3QuQ2hpbGRyZW49e21hcDpfLGZvckVhY2g6ZnVuY3Rpb24oZSx0LG4pe18oZSwoZnVuY3Rpb24oKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLG4pfSxjb3VudDpmdW5jdGlvbihlKXt2YXIgdD0wO3JldHVybiBfKGUsKGZ1bmN0aW9uKCl7dCsrfSkpLHR9LHRvQXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIF8oZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSl8fFtdfSxvbmx5OmZ1bmN0aW9uKGUpe2lmKCFTKGUpKXRocm93IEVycm9yKGYoMTQzKSk7cmV0dXJuIGV9fSx0LkNvbXBvbmVudD12LHQuUHVyZUNvbXBvbmVudD1tLHQuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9Uix0LmNsb25lRWxlbWVudD1mdW5jdGlvbihlLHQsbil7aWYobnVsbD09ZSl0aHJvdyBFcnJvcihmKDI2NyxlKSk7dmFyIGE9cih7fSxlLnByb3BzKSxpPWUua2V5LGw9ZS5yZWYscz1lLl9vd25lcjtpZihudWxsIT10KXtpZih2b2lkIDAhPT10LnJlZiYmKGw9dC5yZWYscz1iLmN1cnJlbnQpLHZvaWQgMCE9PXQua2V5JiYoaT1cIlwiK3Qua2V5KSxlLnR5cGUmJmUudHlwZS5kZWZhdWx0UHJvcHMpdmFyIGM9ZS50eXBlLmRlZmF1bHRQcm9wcztmb3IodSBpbiB0KXkuY2FsbCh0LHUpJiYheC5oYXNPd25Qcm9wZXJ0eSh1KSYmKGFbdV09dm9pZCAwPT09dFt1XSYmdm9pZCAwIT09Yz9jW3VdOnRbdV0pfXZhciB1PWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09dSlhLmNoaWxkcmVuPW47ZWxzZSBpZigxPHUpe2M9QXJyYXkodSk7Zm9yKHZhciBkPTA7ZDx1O2QrKyljW2RdPWFyZ3VtZW50c1tkKzJdO2EuY2hpbGRyZW49Y31yZXR1cm57JCR0eXBlb2Y6byx0eXBlOmUudHlwZSxrZXk6aSxyZWY6bCxwcm9wczphLF9vd25lcjpzfX0sdC5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PW51bGwpLChlPXskJHR5cGVvZjpsLF9jYWxjdWxhdGVDaGFuZ2VkQml0czp0LF9jdXJyZW50VmFsdWU6ZSxfY3VycmVudFZhbHVlMjplLF90aHJlYWRDb3VudDowLFByb3ZpZGVyOm51bGwsQ29uc3VtZXI6bnVsbH0pLlByb3ZpZGVyPXskJHR5cGVvZjppLF9jb250ZXh0OmV9LGUuQ29uc3VtZXI9ZX0sdC5jcmVhdGVFbGVtZW50PWssdC5jcmVhdGVGYWN0b3J5PWZ1bmN0aW9uKGUpe3ZhciB0PWsuYmluZChudWxsLGUpO3JldHVybiB0LnR5cGU9ZSx0fSx0LmNyZWF0ZVJlZj1mdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGx9fSx0LmZvcndhcmRSZWY9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOnMscmVuZGVyOmV9fSx0LmlzVmFsaWRFbGVtZW50PVMsdC5sYXp5PWZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjp1LF9wYXlsb2FkOntfc3RhdHVzOi0xLF9yZXN1bHQ6ZX0sX2luaXQ6UH19LHQubWVtbz1mdW5jdGlvbihlLHQpe3JldHVybnskJHR5cGVvZjpjLHR5cGU6ZSxjb21wYXJlOnZvaWQgMD09PXQ/bnVsbDp0fX0sdC51c2VDYWxsYmFjaz1mdW5jdGlvbihlLHQpe3JldHVybiBqKCkudXNlQ2FsbGJhY2soZSx0KX0sdC51c2VDb250ZXh0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGooKS51c2VDb250ZXh0KGUsdCl9LHQudXNlRGVidWdWYWx1ZT1mdW5jdGlvbigpe30sdC51c2VFZmZlY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaigpLnVzZUVmZmVjdChlLHQpfSx0LnVzZUltcGVyYXRpdmVIYW5kbGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBqKCkudXNlSW1wZXJhdGl2ZUhhbmRsZShlLHQsbil9LHQudXNlTGF5b3V0RWZmZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGooKS51c2VMYXlvdXRFZmZlY3QoZSx0KX0sdC51c2VNZW1vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGooKS51c2VNZW1vKGUsdCl9LHQudXNlUmVkdWNlcj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGooKS51c2VSZWR1Y2VyKGUsdCxuKX0sdC51c2VSZWY9ZnVuY3Rpb24oZSl7cmV0dXJuIGooKS51c2VSZWYoZSl9LHQudXNlU3RhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGooKS51c2VTdGF0ZShlKX0sdC52ZXJzaW9uPVwiMTcuMC4yXCJ9LDM3ODooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPW4oNTM1KX0sOTIxOihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLnIodCksbi5kKHQse1NlcnZlclN0eWxlU2hlZXQ6KCk9PmZ0LFN0eWxlU2hlZXRDb25zdW1lcjooKT0+Z3QsU3R5bGVTaGVldENvbnRleHQ6KCk9Pmh0LFN0eWxlU2hlZXRNYW5hZ2VyOigpPT52dCxUaGVtZUNvbnN1bWVyOigpPT5kdCxUaGVtZUNvbnRleHQ6KCk9PnV0LFRoZW1lUHJvdmlkZXI6KCk9PnB0LF9fRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9IQVVOVEVEX0JZX1NQT09LWV9HSE9TVFM6KCk9Pk10LGNyZWF0ZUdsb2JhbFN0eWxlOigpPT54dCxjc3M6KCk9PlRlLGRlZmF1bHQ6KCk9Pkx0LGlzU3R5bGVkQ29tcG9uZW50OigpPT5OLGtleWZyYW1lczooKT0+U3Qsd2l0aFRoZW1lOigpPT5PdH0pO3ZhciByPW4oOTQ2KSxvPW4ubihyKSxhPW4oMjQ2KSxpPW4ubihhKSxsPW4oMzc4KTtjb25zdCBzPXthbmltYXRpb25JdGVyYXRpb25Db3VudDoxLGJvcmRlckltYWdlT3V0c2V0OjEsYm9yZGVySW1hZ2VTbGljZToxLGJvcmRlckltYWdlV2lkdGg6MSxib3hGbGV4OjEsYm94RmxleEdyb3VwOjEsYm94T3JkaW5hbEdyb3VwOjEsY29sdW1uQ291bnQ6MSxjb2x1bW5zOjEsZmxleDoxLGZsZXhHcm93OjEsZmxleFBvc2l0aXZlOjEsZmxleFNocmluazoxLGZsZXhOZWdhdGl2ZToxLGZsZXhPcmRlcjoxLGdyaWRSb3c6MSxncmlkUm93RW5kOjEsZ3JpZFJvd1NwYW46MSxncmlkUm93U3RhcnQ6MSxncmlkQ29sdW1uOjEsZ3JpZENvbHVtbkVuZDoxLGdyaWRDb2x1bW5TcGFuOjEsZ3JpZENvbHVtblN0YXJ0OjEsbXNHcmlkUm93OjEsbXNHcmlkUm93U3BhbjoxLG1zR3JpZENvbHVtbjoxLG1zR3JpZENvbHVtblNwYW46MSxmb250V2VpZ2h0OjEsbGluZUhlaWdodDoxLG9wYWNpdHk6MSxvcmRlcjoxLG9ycGhhbnM6MSx0YWJTaXplOjEsd2lkb3dzOjEsekluZGV4OjEsem9vbToxLFdlYmtpdExpbmVDbGFtcDoxLGZpbGxPcGFjaXR5OjEsZmxvb2RPcGFjaXR5OjEsc3RvcE9wYWNpdHk6MSxzdHJva2VEYXNoYXJyYXk6MSxzdHJva2VEYXNob2Zmc2V0OjEsc3Ryb2tlTWl0ZXJsaW1pdDoxLHN0cm9rZU9wYWNpdHk6MSxzdHJva2VXaWR0aDoxfTt2YXIgYz1uKDE4NSksdT1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZlIT1lfTtmdW5jdGlvbiBkKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihyPWVbbl0sbz10W25dLCEocj09PW98fHUocikmJnUobykpKXJldHVybiExO3ZhciByLG87cmV0dXJuITB9Y29uc3QgcD1mdW5jdGlvbihlLHQpe3ZhciBuO3ZvaWQgMD09PXQmJih0PWQpO3ZhciByLG89W10sYT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGk9W10sbD0wO2w8YXJndW1lbnRzLmxlbmd0aDtsKyspaVtsXT1hcmd1bWVudHNbbF07cmV0dXJuIGEmJm49PT10aGlzJiZ0KGksbyl8fChyPWUuYXBwbHkodGhpcyxpKSxhPSEwLG49dGhpcyxvPWkpLHJ9fTt2YXIgZj0vXigoY2hpbGRyZW58ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUx8a2V5fHJlZnxhdXRvRm9jdXN8ZGVmYXVsdFZhbHVlfGRlZmF1bHRDaGVja2VkfGlubmVySFRNTHxzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmd8c3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nfHZhbHVlTGlua3xhY2NlcHR8YWNjZXB0Q2hhcnNldHxhY2Nlc3NLZXl8YWN0aW9ufGFsbG93fGFsbG93VXNlck1lZGlhfGFsbG93UGF5bWVudFJlcXVlc3R8YWxsb3dGdWxsU2NyZWVufGFsbG93VHJhbnNwYXJlbmN5fGFsdHxhc3luY3xhdXRvQ29tcGxldGV8YXV0b1BsYXl8Y2FwdHVyZXxjZWxsUGFkZGluZ3xjZWxsU3BhY2luZ3xjaGFsbGVuZ2V8Y2hhclNldHxjaGVja2VkfGNpdGV8Y2xhc3NJRHxjbGFzc05hbWV8Y29sc3xjb2xTcGFufGNvbnRlbnR8Y29udGVudEVkaXRhYmxlfGNvbnRleHRNZW51fGNvbnRyb2xzfGNvbnRyb2xzTGlzdHxjb29yZHN8Y3Jvc3NPcmlnaW58ZGF0YXxkYXRlVGltZXxkZWNvZGluZ3xkZWZhdWx0fGRlZmVyfGRpcnxkaXNhYmxlZHxkaXNhYmxlUGljdHVyZUluUGljdHVyZXxkb3dubG9hZHxkcmFnZ2FibGV8ZW5jVHlwZXxmb3JtfGZvcm1BY3Rpb258Zm9ybUVuY1R5cGV8Zm9ybU1ldGhvZHxmb3JtTm9WYWxpZGF0ZXxmb3JtVGFyZ2V0fGZyYW1lQm9yZGVyfGhlYWRlcnN8aGVpZ2h0fGhpZGRlbnxoaWdofGhyZWZ8aHJlZkxhbmd8aHRtbEZvcnxodHRwRXF1aXZ8aWR8aW5wdXRNb2RlfGludGVncml0eXxpc3xrZXlQYXJhbXN8a2V5VHlwZXxraW5kfGxhYmVsfGxhbmd8bGlzdHxsb2FkaW5nfGxvb3B8bG93fG1hcmdpbkhlaWdodHxtYXJnaW5XaWR0aHxtYXh8bWF4TGVuZ3RofG1lZGlhfG1lZGlhR3JvdXB8bWV0aG9kfG1pbnxtaW5MZW5ndGh8bXVsdGlwbGV8bXV0ZWR8bmFtZXxub25jZXxub1ZhbGlkYXRlfG9wZW58b3B0aW11bXxwYXR0ZXJufHBsYWNlaG9sZGVyfHBsYXlzSW5saW5lfHBvc3RlcnxwcmVsb2FkfHByb2ZpbGV8cmFkaW9Hcm91cHxyZWFkT25seXxyZWZlcnJlclBvbGljeXxyZWx8cmVxdWlyZWR8cmV2ZXJzZWR8cm9sZXxyb3dzfHJvd1NwYW58c2FuZGJveHxzY29wZXxzY29wZWR8c2Nyb2xsaW5nfHNlYW1sZXNzfHNlbGVjdGVkfHNoYXBlfHNpemV8c2l6ZXN8c2xvdHxzcGFufHNwZWxsQ2hlY2t8c3JjfHNyY0RvY3xzcmNMYW5nfHNyY1NldHxzdGFydHxzdGVwfHN0eWxlfHN1bW1hcnl8dGFiSW5kZXh8dGFyZ2V0fHRpdGxlfHR5cGV8dXNlTWFwfHZhbHVlfHdpZHRofHdtb2RlfHdyYXB8YWJvdXR8ZGF0YXR5cGV8aW5saXN0fHByZWZpeHxwcm9wZXJ0eXxyZXNvdXJjZXx0eXBlb2Z8dm9jYWJ8YXV0b0NhcGl0YWxpemV8YXV0b0NvcnJlY3R8YXV0b1NhdmV8Y29sb3J8aW5lcnR8aXRlbVByb3B8aXRlbVNjb3BlfGl0ZW1UeXBlfGl0ZW1JRHxpdGVtUmVmfG9ufHJlc3VsdHN8c2VjdXJpdHl8dW5zZWxlY3RhYmxlfGFjY2VudEhlaWdodHxhY2N1bXVsYXRlfGFkZGl0aXZlfGFsaWdubWVudEJhc2VsaW5lfGFsbG93UmVvcmRlcnxhbHBoYWJldGljfGFtcGxpdHVkZXxhcmFiaWNGb3JtfGFzY2VudHxhdHRyaWJ1dGVOYW1lfGF0dHJpYnV0ZVR5cGV8YXV0b1JldmVyc2V8YXppbXV0aHxiYXNlRnJlcXVlbmN5fGJhc2VsaW5lU2hpZnR8YmFzZVByb2ZpbGV8YmJveHxiZWdpbnxiaWFzfGJ5fGNhbGNNb2RlfGNhcEhlaWdodHxjbGlwfGNsaXBQYXRoVW5pdHN8Y2xpcFBhdGh8Y2xpcFJ1bGV8Y29sb3JJbnRlcnBvbGF0aW9ufGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnN8Y29sb3JQcm9maWxlfGNvbG9yUmVuZGVyaW5nfGNvbnRlbnRTY3JpcHRUeXBlfGNvbnRlbnRTdHlsZVR5cGV8Y3Vyc29yfGN4fGN5fGR8ZGVjZWxlcmF0ZXxkZXNjZW50fGRpZmZ1c2VDb25zdGFudHxkaXJlY3Rpb258ZGlzcGxheXxkaXZpc29yfGRvbWluYW50QmFzZWxpbmV8ZHVyfGR4fGR5fGVkZ2VNb2RlfGVsZXZhdGlvbnxlbmFibGVCYWNrZ3JvdW5kfGVuZHxleHBvbmVudHxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkfGZpbGx8ZmlsbE9wYWNpdHl8ZmlsbFJ1bGV8ZmlsdGVyfGZpbHRlclJlc3xmaWx0ZXJVbml0c3xmbG9vZENvbG9yfGZsb29kT3BhY2l0eXxmb2N1c2FibGV8Zm9udEZhbWlseXxmb250U2l6ZXxmb250U2l6ZUFkanVzdHxmb250U3RyZXRjaHxmb250U3R5bGV8Zm9udFZhcmlhbnR8Zm9udFdlaWdodHxmb3JtYXR8ZnJvbXxmcnxmeHxmeXxnMXxnMnxnbHlwaE5hbWV8Z2x5cGhPcmllbnRhdGlvbkhvcml6b250YWx8Z2x5cGhPcmllbnRhdGlvblZlcnRpY2FsfGdseXBoUmVmfGdyYWRpZW50VHJhbnNmb3JtfGdyYWRpZW50VW5pdHN8aGFuZ2luZ3xob3JpekFkdlh8aG9yaXpPcmlnaW5YfGlkZW9ncmFwaGljfGltYWdlUmVuZGVyaW5nfGlufGluMnxpbnRlcmNlcHR8a3xrMXxrMnxrM3xrNHxrZXJuZWxNYXRyaXh8a2VybmVsVW5pdExlbmd0aHxrZXJuaW5nfGtleVBvaW50c3xrZXlTcGxpbmVzfGtleVRpbWVzfGxlbmd0aEFkanVzdHxsZXR0ZXJTcGFjaW5nfGxpZ2h0aW5nQ29sb3J8bGltaXRpbmdDb25lQW5nbGV8bG9jYWx8bWFya2VyRW5kfG1hcmtlck1pZHxtYXJrZXJTdGFydHxtYXJrZXJIZWlnaHR8bWFya2VyVW5pdHN8bWFya2VyV2lkdGh8bWFza3xtYXNrQ29udGVudFVuaXRzfG1hc2tVbml0c3xtYXRoZW1hdGljYWx8bW9kZXxudW1PY3RhdmVzfG9mZnNldHxvcGFjaXR5fG9wZXJhdG9yfG9yZGVyfG9yaWVudHxvcmllbnRhdGlvbnxvcmlnaW58b3ZlcmZsb3d8b3ZlcmxpbmVQb3NpdGlvbnxvdmVybGluZVRoaWNrbmVzc3xwYW5vc2UxfHBhaW50T3JkZXJ8cGF0aExlbmd0aHxwYXR0ZXJuQ29udGVudFVuaXRzfHBhdHRlcm5UcmFuc2Zvcm18cGF0dGVyblVuaXRzfHBvaW50ZXJFdmVudHN8cG9pbnRzfHBvaW50c0F0WHxwb2ludHNBdFl8cG9pbnRzQXRafHByZXNlcnZlQWxwaGF8cHJlc2VydmVBc3BlY3RSYXRpb3xwcmltaXRpdmVVbml0c3xyfHJhZGl1c3xyZWZYfHJlZll8cmVuZGVyaW5nSW50ZW50fHJlcGVhdENvdW50fHJlcGVhdER1cnxyZXF1aXJlZEV4dGVuc2lvbnN8cmVxdWlyZWRGZWF0dXJlc3xyZXN0YXJ0fHJlc3VsdHxyb3RhdGV8cnh8cnl8c2NhbGV8c2VlZHxzaGFwZVJlbmRlcmluZ3xzbG9wZXxzcGFjaW5nfHNwZWN1bGFyQ29uc3RhbnR8c3BlY3VsYXJFeHBvbmVudHxzcGVlZHxzcHJlYWRNZXRob2R8c3RhcnRPZmZzZXR8c3RkRGV2aWF0aW9ufHN0ZW1ofHN0ZW12fHN0aXRjaFRpbGVzfHN0b3BDb2xvcnxzdG9wT3BhY2l0eXxzdHJpa2V0aHJvdWdoUG9zaXRpb258c3RyaWtldGhyb3VnaFRoaWNrbmVzc3xzdHJpbmd8c3Ryb2tlfHN0cm9rZURhc2hhcnJheXxzdHJva2VEYXNob2Zmc2V0fHN0cm9rZUxpbmVjYXB8c3Ryb2tlTGluZWpvaW58c3Ryb2tlTWl0ZXJsaW1pdHxzdHJva2VPcGFjaXR5fHN0cm9rZVdpZHRofHN1cmZhY2VTY2FsZXxzeXN0ZW1MYW5ndWFnZXx0YWJsZVZhbHVlc3x0YXJnZXRYfHRhcmdldFl8dGV4dEFuY2hvcnx0ZXh0RGVjb3JhdGlvbnx0ZXh0UmVuZGVyaW5nfHRleHRMZW5ndGh8dG98dHJhbnNmb3JtfHUxfHUyfHVuZGVybGluZVBvc2l0aW9ufHVuZGVybGluZVRoaWNrbmVzc3x1bmljb2RlfHVuaWNvZGVCaWRpfHVuaWNvZGVSYW5nZXx1bml0c1BlckVtfHZBbHBoYWJldGljfHZIYW5naW5nfHZJZGVvZ3JhcGhpY3x2TWF0aGVtYXRpY2FsfHZhbHVlc3x2ZWN0b3JFZmZlY3R8dmVyc2lvbnx2ZXJ0QWR2WXx2ZXJ0T3JpZ2luWHx2ZXJ0T3JpZ2luWXx2aWV3Qm94fHZpZXdUYXJnZXR8dmlzaWJpbGl0eXx3aWR0aHN8d29yZFNwYWNpbmd8d3JpdGluZ01vZGV8eHx4SGVpZ2h0fHgxfHgyfHhDaGFubmVsU2VsZWN0b3J8eGxpbmtBY3R1YXRlfHhsaW5rQXJjcm9sZXx4bGlua0hyZWZ8eGxpbmtSb2xlfHhsaW5rU2hvd3x4bGlua1RpdGxlfHhsaW5rVHlwZXx4bWxCYXNlfHhtbG5zfHhtbG5zWGxpbmt8eG1sTGFuZ3x4bWxTcGFjZXx5fHkxfHkyfHlDaGFubmVsU2VsZWN0b3J8enx6b29tQW5kUGFufGZvcnxjbGFzc3xhdXRvZm9jdXMpfCgoW0RkXVtBYV1bVHRdW0FhXXxbQWFdW1JyXVtJaV1bQWFdfHgpLS4qKSkkLztjb25zdCBoPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwPT09dFtuXSYmKHRbbl09ZShuKSksdFtuXX19KChmdW5jdGlvbihlKXtyZXR1cm4gZi50ZXN0KGUpfHwxMTE9PT1lLmNoYXJDb2RlQXQoMCkmJjExMD09PWUuY2hhckNvZGVBdCgxKSYmZS5jaGFyQ29kZUF0KDIpPDkxfSkpO2Z1bmN0aW9uIGcoZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKX1mdW5jdGlvbiB2KGUpe3JldHVyblwiVW5kZWZpbmVkXCI9PT1nKGUpfWZ1bmN0aW9uIEMoZSl7cmV0dXJuXCJOdWxsXCI9PT1nKGUpfWZ1bmN0aW9uIG0oZSl7cmV0dXJuXCJPYmplY3RcIj09PWcoZSkmJihlLmNvbnN0cnVjdG9yPT09T2JqZWN0JiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1PYmplY3QucHJvdG90eXBlKX1mdW5jdGlvbiB3KGUpe3JldHVyblwiQXJyYXlcIj09PWcoZSl9ZnVuY3Rpb24gYihlKXtyZXR1cm5cIlN5bWJvbFwiPT09ZyhlKX12YXIgeSx4LGssUyxPO3k9Qyx4PXY7ZnVuY3Rpb24gTSgpe2Zvcih2YXIgZT0wLHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGg7dDxuO3QrKyllKz1hcmd1bWVudHNbdF0ubGVuZ3RoO3ZhciByPUFycmF5KGUpLG89MDtmb3IodD0wO3Q8bjt0KyspZm9yKHZhciBhPWFyZ3VtZW50c1t0XSxpPTAsbD1hLmxlbmd0aDtpPGw7aSsrLG8rKylyW29dPWFbaV07cmV0dXJuIHJ9ZnVuY3Rpb24gTChlLHQsbixyKXt2YXIgbz1yLnByb3BlcnR5SXNFbnVtZXJhYmxlKHQpP1wiZW51bWVyYWJsZVwiOlwibm9uZW51bWVyYWJsZVwiO1wiZW51bWVyYWJsZVwiPT09byYmKGVbdF09biksXCJub25lbnVtZXJhYmxlXCI9PT1vJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9ZnVuY3Rpb24gXyhlLHQsbil7aWYoIW0odCkpcmV0dXJuIG4mJncobikmJm4uZm9yRWFjaCgoZnVuY3Rpb24obil7dD1uKGUsdCl9KSksdDt2YXIgcj17fTttKGUpJiYocj1NKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSkpLnJlZHVjZSgoZnVuY3Rpb24obixyKXt2YXIgbz1lW3JdO3JldHVybighYihyKSYmIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmluY2x1ZGVzKHIpfHxiKHIpJiYhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5pbmNsdWRlcyhyKSkmJkwobixyLG8sZSksbn0pLHt9KSk7cmV0dXJuIE0oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCksT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KSkucmVkdWNlKChmdW5jdGlvbihyLG8pe3ZhciBhPXRbb10saT1tKGUpP2Vbb106dm9pZCAwO3JldHVybiBuJiZ3KG4pJiZuLmZvckVhY2goKGZ1bmN0aW9uKGUpe2E9ZShpLGEpfSkpLHZvaWQgMCE9PWkmJm0oYSkmJihhPV8oaSxhLG4pKSxMKHIsbyxhLHQpLHJ9KSxyKX1jb25zdCBQPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3ZhciByPW51bGwsbz1lO3JldHVybiBtKGUpJiZlLmV4dGVuc2lvbnMmJjE9PT1PYmplY3Qua2V5cyhlKS5sZW5ndGgmJihvPXt9LHI9ZS5leHRlbnNpb25zKSx0LnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gXyhlLHQscil9KSxvKX07dmFyIEU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W2VbMF1dLHI9MCxvPXQubGVuZ3RoO3I8bztyKz0xKW4ucHVzaCh0W3JdLGVbcisxXSk7cmV0dXJuIG59LGo9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0sUj1mdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9LEk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxWPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LEg9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX0sQT1mdW5jdGlvbihlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hdHx8XCJvYmplY3RcIiE9dHlwZW9mIHQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQ/ZTp0fSxUPWZ1bmN0aW9uKGUpe3JldHVyblwib2JqZWN0XCI9PT0odm9pZCAwPT09ZT9cInVuZGVmaW5lZFwiOmooZSkpJiZlLmNvbnN0cnVjdG9yPT09T2JqZWN0fSxEPU9iamVjdC5mcmVlemUoW10pLEI9T2JqZWN0LmZyZWV6ZSh7fSk7ZnVuY3Rpb24gWihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlfWZ1bmN0aW9uICQoZSl7cmV0dXJuIGUuZGlzcGxheU5hbWV8fGUubmFtZXx8XCJDb21wb25lbnRcIn1mdW5jdGlvbiBOKGUpe3JldHVybiBlJiZcInN0cmluZ1wiPT10eXBlb2YgZS5zdHlsZWRDb21wb25lbnRJZH12YXIgRj1cInVuZGVmaW5lZFwiIT10eXBlb2YgcHJvY2VzcyYmKHByb2Nlc3MuZW52LlJFQUNUX0FQUF9TQ19BVFRSfHxwcm9jZXNzLmVudi5TQ19BVFRSKXx8XCJkYXRhLXN0eWxlZFwiLFc9XCJkYXRhLXN0eWxlZC12ZXJzaW9uXCIsVT1cImRhdGEtc3R5bGVkLXN0cmVhbWVkXCIsej1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZcIkhUTUxFbGVtZW50XCJpbiB3aW5kb3csRz1cImJvb2xlYW5cIj09dHlwZW9mIFNDX0RJU0FCTEVfU1BFRURZJiZTQ19ESVNBQkxFX1NQRUVEWXx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHByb2Nlc3MmJihwcm9jZXNzLmVudi5SRUFDVF9BUFBfU0NfRElTQUJMRV9TUEVFRFl8fHByb2Nlc3MuZW52LlNDX0RJU0FCTEVfU1BFRURZKXx8ITEsSz17fTt2YXIgcT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe1IodGhpcyx0KTtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxvPUFycmF5KHI+MT9yLTE6MCksYT0xO2E8cjthKyspb1thLTFdPWFyZ3VtZW50c1thXTt2YXIgaT1BKHRoaXMsZS5jYWxsKHRoaXMsXCJBbiBlcnJvciBvY2N1cnJlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdHlsZWQtY29tcG9uZW50cy9zdHlsZWQtY29tcG9uZW50cy9ibG9iL21hc3Rlci9wYWNrYWdlcy9zdHlsZWQtY29tcG9uZW50cy9zcmMvdXRpbHMvZXJyb3JzLm1kI1wiK24rXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIrKG8ubGVuZ3RoPjA/XCIgQWRkaXRpb25hbCBhcmd1bWVudHM6IFwiK28uam9pbihcIiwgXCIpOlwiXCIpKSk7cmV0dXJuIEEoaSl9cmV0dXJuIEgodCxlKSx0fShFcnJvciksWT0vXlteXFxTXFxuXSo/XFwvXFwqIHNjLWNvbXBvbmVudC1pZDpcXHMqKFxcUyspXFxzK1xcKlxcLy9nbSxKPWZ1bmN0aW9uKGUpe3ZhciB0PVwiXCIrKGV8fFwiXCIpLG49W107cmV0dXJuIHQucmVwbGFjZShZLChmdW5jdGlvbihlLHQscil7cmV0dXJuIG4ucHVzaCh7Y29tcG9uZW50SWQ6dCxtYXRjaEluZGV4OnJ9KSxlfSkpLG4ubWFwKChmdW5jdGlvbihlLHIpe3ZhciBvPWUuY29tcG9uZW50SWQsYT1lLm1hdGNoSW5kZXgsaT1uW3IrMV07cmV0dXJue2NvbXBvbmVudElkOm8sY3NzRnJvbURPTTppP3Quc2xpY2UoYSxpLm1hdGNoSW5kZXgpOnQuc2xpY2UoYSl9fSkpfSxYPS9eXFxzKlxcL1xcLy4qJC9nbSxRPW5ldyhvKCkpKHtnbG9iYWw6ITEsY2FzY2FkZTohMCxrZXlmcmFtZTohMSxwcmVmaXg6ITEsY29tcHJlc3M6ITEsc2VtaWNvbG9uOiEwfSksZWU9bmV3KG8oKSkoe2dsb2JhbDohMSxjYXNjYWRlOiEwLGtleWZyYW1lOiExLHByZWZpeDohMCxjb21wcmVzczohMSxzZW1pY29sb246ITF9KSx0ZT1bXSxuZT1mdW5jdGlvbihlKXtpZigtMj09PWUpe3ZhciB0PXRlO3JldHVybiB0ZT1bXSx0fX0scmU9aSgpKChmdW5jdGlvbihlKXt0ZS5wdXNoKGUpfSkpLG9lPXZvaWQgMCxhZT12b2lkIDAsaWU9dm9pZCAwLGxlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD4wJiYtMSE9PW4uc2xpY2UoMCx0KS5pbmRleE9mKGFlKSYmbi5zbGljZSh0LWFlLmxlbmd0aCx0KSE9PWFlP1wiLlwiK29lOmV9O2VlLnVzZShbZnVuY3Rpb24oZSx0LG4pezI9PT1lJiZuLmxlbmd0aCYmblswXS5sYXN0SW5kZXhPZihhZSk+MCYmKG5bMF09blswXS5yZXBsYWNlKGllLGxlKSl9LHJlLG5lXSksUS51c2UoW3JlLG5lXSk7dmFyIHNlPWZ1bmN0aW9uKGUpe3JldHVybiBRKFwiXCIsZSl9O2Z1bmN0aW9uIGNlKGUsdCxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106XCImXCIsbz1lLmpvaW4oXCJcIikucmVwbGFjZShYLFwiXCIpLGE9dCYmbj9uK1wiIFwiK3QrXCIgeyBcIitvK1wiIH1cIjpvO3JldHVybiBvZT1yLGFlPXQsaWU9bmV3IFJlZ0V4cChcIlxcXFxcIithZStcIlxcXFxiXCIsXCJnXCIpLGVlKG58fCF0P1wiXCI6dCxhKX12YXIgdWU9ZnVuY3Rpb24oKXtyZXR1cm4gbi5uY30sZGU9ZnVuY3Rpb24oZSx0LG4pe24mJigoZVt0XXx8KGVbdF09T2JqZWN0LmNyZWF0ZShudWxsKSkpW25dPSEwKX0scGU9ZnVuY3Rpb24oZSx0KXtlW3RdPU9iamVjdC5jcmVhdGUobnVsbCl9LGZlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiB2b2lkIDAhPT1lW3RdJiZlW3RdW25dfX0saGU9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIjtmb3IodmFyIG4gaW4gZSl0Kz1PYmplY3Qua2V5cyhlW25dKS5qb2luKFwiIFwiKStcIiBcIjtyZXR1cm4gdC50cmltKCl9LGdlPWZ1bmN0aW9uKGUpe2lmKGUuc2hlZXQpcmV0dXJuIGUuc2hlZXQ7Zm9yKHZhciB0PWUub3duZXJEb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGgsbj0wO248dDtuKz0xKXt2YXIgcj1lLm93bmVyRG9jdW1lbnQuc3R5bGVTaGVldHNbbl07aWYoci5vd25lck5vZGU9PT1lKXJldHVybiByfXRocm93IG5ldyBxKDEwKX0sdmU9ZnVuY3Rpb24oZSx0LG4pe2lmKCF0KXJldHVybiExO3ZhciByPWUuY3NzUnVsZXMubGVuZ3RoO3RyeXtlLmluc2VydFJ1bGUodCxuPD1yP246cil9Y2F0Y2goZSl7cmV0dXJuITF9cmV0dXJuITB9LENlPWZ1bmN0aW9uKGUpe3JldHVyblwiXFxuLyogc2MtY29tcG9uZW50LWlkOiBcIitlK1wiICovXFxuXCJ9LG1lPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj0wO3I8PXQ7cis9MSluKz1lW3JdO3JldHVybiBufSx3ZT1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj11ZSgpO3JldHVyblwiPHN0eWxlIFwiK1tyJiYnbm9uY2U9XCInK3IrJ1wiJyxGKyc9XCInK2hlKHQpKydcIicsVysnPVwiNC40LjFcIicsbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpK1wiPlwiK2UoKStcIjwvc3R5bGU+XCJ9fSxiZT1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuLHI9KChuPXt9KVtGXT1oZSh0KSxuW1ddPVwiNC40LjFcIixuKSxvPXVlKCk7cmV0dXJuIG8mJihyLm5vbmNlPW8pLGwuY3JlYXRlRWxlbWVudChcInN0eWxlXCIsVih7fSxyLHtkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOmUoKX19KSl9fSx5ZT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoZSl9fSx4ZT1mdW5jdGlvbihlLHQpe3JldHVybiBlLmNyZWF0ZVRleHROb2RlKENlKHQpKX0sa2U9ZnVuY3Rpb24gZSh0LG4pe3ZhciByPXZvaWQgMD09PXQ/T2JqZWN0LmNyZWF0ZShudWxsKTp0LG89dm9pZCAwPT09bj9PYmplY3QuY3JlYXRlKG51bGwpOm4sYT1mdW5jdGlvbihlKXt2YXIgdD1vW2VdO3JldHVybiB2b2lkIDAhPT10P3Q6b1tlXT1bXCJcIl19LGk9ZnVuY3Rpb24oKXt2YXIgZT1cIlwiO2Zvcih2YXIgdCBpbiBvKXt2YXIgbj1vW3RdWzBdO24mJihlKz1DZSh0KStuKX1yZXR1cm4gZX0sbD17Y2xvbmU6ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgbiBpbiBlKXRbbl09Vih7fSxlW25dKTtyZXR1cm4gdH0ociksbj1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgYSBpbiBvKW5bYV09W29bYV1bMF1dO3JldHVybiBlKHQsbil9LGNzczppLGdldElkczp5ZShvKSxoYXNOYW1lRm9ySWQ6ZmUociksaW5zZXJ0TWFya2VyOmEsaW5zZXJ0UnVsZXM6ZnVuY3Rpb24oZSx0LG4pe2EoZSlbMF0rPXQuam9pbihcIiBcIiksZGUocixlLG4pfSxyZW1vdmVSdWxlczpmdW5jdGlvbihlKXt2YXIgdD1vW2VdO3ZvaWQgMCE9PXQmJih0WzBdPVwiXCIscGUocixlKSl9LHNlYWxlZDohMSxzdHlsZVRhZzpudWxsLHRvRWxlbWVudDpiZShpLHIpLHRvSFRNTDp3ZShpLHIpfTtyZXR1cm4gbH0sU2U9ZnVuY3Rpb24oZSx0LG4scixvKXtpZih6JiYhbil7dmFyIGE9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWRvY3VtZW50O2U/cj1lLm93bmVyRG9jdW1lbnQ6dCYmKHI9dC5vd25lckRvY3VtZW50KTt2YXIgbz1yLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtvLnNldEF0dHJpYnV0ZShGLFwiXCIpLG8uc2V0QXR0cmlidXRlKFcsXCI0LjQuMVwiKTt2YXIgYT11ZSgpO2lmKGEmJm8uc2V0QXR0cmlidXRlKFwibm9uY2VcIixhKSxvLmFwcGVuZENoaWxkKHIuY3JlYXRlVGV4dE5vZGUoXCJcIikpLGUmJiF0KWUuYXBwZW5kQ2hpbGQobyk7ZWxzZXtpZighdHx8IWV8fCF0LnBhcmVudE5vZGUpdGhyb3cgbmV3IHEoNik7dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLG4/dDp0Lm5leHRTaWJsaW5nKX1yZXR1cm4gb30oZSx0LHIpO3JldHVybiBHP2Z1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPU9iamVjdC5jcmVhdGUobnVsbCksbz12b2lkIDAhPT10LGE9ITEsaT1mdW5jdGlvbih0KXt2YXIgbz1yW3RdO3JldHVybiB2b2lkIDAhPT1vP286KHJbdF09eGUoZS5vd25lckRvY3VtZW50LHQpLGUuYXBwZW5kQ2hpbGQoclt0XSksblt0XT1PYmplY3QuY3JlYXRlKG51bGwpLHJbdF0pfSxsPWZ1bmN0aW9uKCl7dmFyIGU9XCJcIjtmb3IodmFyIHQgaW4gcillKz1yW3RdLmRhdGE7cmV0dXJuIGV9O3JldHVybntjbG9uZTpmdW5jdGlvbigpe3Rocm93IG5ldyBxKDUpfSxjc3M6bCxnZXRJZHM6eWUociksaGFzTmFtZUZvcklkOmZlKG4pLGluc2VydE1hcmtlcjppLGluc2VydFJ1bGVzOmZ1bmN0aW9uKGUscixsKXtmb3IodmFyIHM9aShlKSxjPVtdLHU9ci5sZW5ndGgsZD0wO2Q8dTtkKz0xKXt2YXIgcD1yW2RdLGY9bztpZihmJiYtMSE9PXAuaW5kZXhPZihcIkBpbXBvcnRcIikpYy5wdXNoKHApO2Vsc2V7Zj0hMTt2YXIgaD1kPT09dS0xP1wiXCI6XCIgXCI7cy5hcHBlbmREYXRhKFwiXCIrcCtoKX19ZGUobixlLGwpLG8mJmMubGVuZ3RoPjAmJihhPSEwLHQoKS5pbnNlcnRSdWxlcyhlK1wiLWltcG9ydFwiLGMpKX0scmVtb3ZlUnVsZXM6ZnVuY3Rpb24oaSl7dmFyIGw9cltpXTtpZih2b2lkIDAhPT1sKXt2YXIgcz14ZShlLm93bmVyRG9jdW1lbnQsaSk7ZS5yZXBsYWNlQ2hpbGQocyxsKSxyW2ldPXMscGUobixpKSxvJiZhJiZ0KCkucmVtb3ZlUnVsZXMoaStcIi1pbXBvcnRcIil9fSxzZWFsZWQ6ITEsc3R5bGVUYWc6ZSx0b0VsZW1lbnQ6YmUobCxuKSx0b0hUTUw6d2UobCxuKX19KGEsbyk6ZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxvPVtdLGE9dm9pZCAwIT09dCxpPSExLGw9ZnVuY3Rpb24oZSl7dmFyIHQ9cltlXTtyZXR1cm4gdm9pZCAwIT09dD90OihyW2VdPW8ubGVuZ3RoLG8ucHVzaCgwKSxwZShuLGUpLHJbZV0pfSxzPWZ1bmN0aW9uKCl7dmFyIHQ9Z2UoZSkuY3NzUnVsZXMsbj1cIlwiO2Zvcih2YXIgYSBpbiByKXtuKz1DZShhKTtmb3IodmFyIGk9clthXSxsPW1lKG8saSkscz1sLW9baV07czxsO3MrPTEpe3ZhciBjPXRbc107dm9pZCAwIT09YyYmKG4rPWMuY3NzVGV4dCl9fXJldHVybiBufTtyZXR1cm57Y2xvbmU6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgcSg1KX0sY3NzOnMsZ2V0SWRzOnllKHIpLGhhc05hbWVGb3JJZDpmZShuKSxpbnNlcnRNYXJrZXI6bCxpbnNlcnRSdWxlczpmdW5jdGlvbihyLHMsYyl7Zm9yKHZhciB1PWwociksZD1nZShlKSxwPW1lKG8sdSksZj0wLGg9W10sZz1zLmxlbmd0aCx2PTA7djxnO3YrPTEpe3ZhciBDPXNbdl0sbT1hO20mJi0xIT09Qy5pbmRleE9mKFwiQGltcG9ydFwiKT9oLnB1c2goQyk6dmUoZCxDLHArZikmJihtPSExLGYrPTEpfWEmJmgubGVuZ3RoPjAmJihpPSEwLHQoKS5pbnNlcnRSdWxlcyhyK1wiLWltcG9ydFwiLGgpKSxvW3VdKz1mLGRlKG4scixjKX0scmVtb3ZlUnVsZXM6ZnVuY3Rpb24obCl7dmFyIHM9cltsXTtpZih2b2lkIDAhPT1zJiYhMSE9PWUuaXNDb25uZWN0ZWQpe3ZhciBjPW9bc107IWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9dC1uLG89dDtvPnI7by09MSllLmRlbGV0ZVJ1bGUobyl9KGdlKGUpLG1lKG8scyktMSxjKSxvW3NdPTAscGUobixsKSxhJiZpJiZ0KCkucmVtb3ZlUnVsZXMobCtcIi1pbXBvcnRcIil9fSxzZWFsZWQ6ITEsc3R5bGVUYWc6ZSx0b0VsZW1lbnQ6YmUocyxuKSx0b0hUTUw6d2UocyxuKX19KGEsbyl9cmV0dXJuIGtlKCl9LE9lPS9cXHMrLyxNZT12b2lkIDA7TWU9ej9HPzQwOjFlMzotMTt2YXIgTGU9MCxfZT12b2lkIDAsUGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp6P2RvY3VtZW50LmhlYWQ6bnVsbCxyPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Uih0aGlzLGUpLHRoaXMuZ2V0SW1wb3J0UnVsZVRhZz1mdW5jdGlvbigpe3ZhciBlPXQuaW1wb3J0UnVsZVRhZztpZih2b2lkIDAhPT1lKXJldHVybiBlO3ZhciBuPXQudGFnc1swXTtyZXR1cm4gdC5pbXBvcnRSdWxlVGFnPVNlKHQudGFyZ2V0LG4/bi5zdHlsZVRhZzpudWxsLHQuZm9yY2VTZXJ2ZXIsITApfSxMZSs9MSx0aGlzLmlkPUxlLHRoaXMuZm9yY2VTZXJ2ZXI9cix0aGlzLnRhcmdldD1yP251bGw6bix0aGlzLnRhZ01hcD17fSx0aGlzLmRlZmVycmVkPXt9LHRoaXMucmVoeWRyYXRlZE5hbWVzPXt9LHRoaXMuaWdub3JlUmVoeWRyYXRlZE5hbWVzPXt9LHRoaXMudGFncz1bXSx0aGlzLmNhcGFjaXR5PTEsdGhpcy5jbG9uZXM9W119cmV0dXJuIGUucHJvdG90eXBlLnJlaHlkcmF0ZT1mdW5jdGlvbigpe2lmKCF6fHx0aGlzLmZvcmNlU2VydmVyKXJldHVybiB0aGlzO3ZhciBlPVtdLHQ9W10sbj0hMSxyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtcIitGK1wiXVtcIitXKyc9XCI0LjQuMVwiXScpLG89ci5sZW5ndGg7aWYoIW8pcmV0dXJuIHRoaXM7Zm9yKHZhciBhPTA7YTxvO2ErPTEpe3ZhciBpPXJbYV07bnx8KG49ISFpLmdldEF0dHJpYnV0ZShVKSk7Zm9yKHZhciBsLHM9KGkuZ2V0QXR0cmlidXRlKEYpfHxcIlwiKS50cmltKCkuc3BsaXQoT2UpLGM9cy5sZW5ndGgsdT0wO3U8Yzt1Kz0xKWw9c1t1XSx0aGlzLnJlaHlkcmF0ZWROYW1lc1tsXT0hMDt0LnB1c2guYXBwbHkodCxKKGkudGV4dENvbnRlbnQpKSxlLnB1c2goaSl9dmFyIGQ9dC5sZW5ndGg7aWYoIWQpcmV0dXJuIHRoaXM7dmFyIHA9dGhpcy5tYWtlVGFnKG51bGwpOyFmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsbz1uLmxlbmd0aDtyPG87cis9MSl7dmFyIGE9bltyXSxpPWEuY29tcG9uZW50SWQsbD1hLmNzc0Zyb21ET00scz1zZShsKTtlLmluc2VydFJ1bGVzKGkscyl9Zm9yKHZhciBjPTAsdT10Lmxlbmd0aDtjPHU7Yys9MSl7dmFyIGQ9dFtjXTtkLnBhcmVudE5vZGUmJmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkKX19KHAsZSx0KSx0aGlzLmNhcGFjaXR5PU1hdGgubWF4KDEsTWUtZCksdGhpcy50YWdzLnB1c2gocCk7Zm9yKHZhciBmPTA7ZjxkO2YrPTEpdGhpcy50YWdNYXBbdFtmXS5jb21wb25lbnRJZF09cDtyZXR1cm4gdGhpc30sZS5yZXNldD1mdW5jdGlvbigpe19lPW5ldyBlKHZvaWQgMCxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKS5yZWh5ZHJhdGUoKX0sZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZSh0aGlzLnRhcmdldCx0aGlzLmZvcmNlU2VydmVyKTtyZXR1cm4gdGhpcy5jbG9uZXMucHVzaCh0KSx0LnRhZ3M9dGhpcy50YWdzLm1hcCgoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPWUuZ2V0SWRzKCkscj1lLmNsb25lKCksbz0wO288bi5sZW5ndGg7bys9MSl0LnRhZ01hcFtuW29dXT1yO3JldHVybiByfSkpLHQucmVoeWRyYXRlZE5hbWVzPVYoe30sdGhpcy5yZWh5ZHJhdGVkTmFtZXMpLHQuZGVmZXJyZWQ9Vih7fSx0aGlzLmRlZmVycmVkKSx0fSxlLnByb3RvdHlwZS5zZWFsQWxsVGFncz1mdW5jdGlvbigpe3RoaXMuY2FwYWNpdHk9MSx0aGlzLnRhZ3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5zZWFsZWQ9ITB9KSl9LGUucHJvdG90eXBlLm1ha2VUYWc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZT9lLnN0eWxlVGFnOm51bGw7cmV0dXJuIFNlKHRoaXMudGFyZ2V0LHQsdGhpcy5mb3JjZVNlcnZlciwhMSx0aGlzLmdldEltcG9ydFJ1bGVUYWcpfSxlLnByb3RvdHlwZS5nZXRUYWdGb3JJZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnRhZ01hcFtlXTtpZih2b2lkIDAhPT10JiYhdC5zZWFsZWQpcmV0dXJuIHQ7dmFyIG49dGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGgtMV07cmV0dXJuIHRoaXMuY2FwYWNpdHktPTEsMD09PXRoaXMuY2FwYWNpdHkmJih0aGlzLmNhcGFjaXR5PU1lLG49dGhpcy5tYWtlVGFnKG4pLHRoaXMudGFncy5wdXNoKG4pKSx0aGlzLnRhZ01hcFtlXT1ufSxlLnByb3RvdHlwZS5oYXNJZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy50YWdNYXBbZV19LGUucHJvdG90eXBlLmhhc05hbWVGb3JJZD1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXRoaXMuaWdub3JlUmVoeWRyYXRlZE5hbWVzW2VdJiZ0aGlzLnJlaHlkcmF0ZWROYW1lc1t0XSlyZXR1cm4hMDt2YXIgbj10aGlzLnRhZ01hcFtlXTtyZXR1cm4gdm9pZCAwIT09biYmbi5oYXNOYW1lRm9ySWQoZSx0KX0sZS5wcm90b3R5cGUuZGVmZXJyZWRJbmplY3Q9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10aGlzLnRhZ01hcFtlXSl7Zm9yKHZhciBuPXRoaXMuY2xvbmVzLHI9MDtyPG4ubGVuZ3RoO3IrPTEpbltyXS5kZWZlcnJlZEluamVjdChlLHQpO3RoaXMuZ2V0VGFnRm9ySWQoZSkuaW5zZXJ0TWFya2VyKGUpLHRoaXMuZGVmZXJyZWRbZV09dH19LGUucHJvdG90eXBlLmluamVjdD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPXRoaXMuY2xvbmVzLG89MDtvPHIubGVuZ3RoO28rPTEpcltvXS5pbmplY3QoZSx0LG4pO3ZhciBhPXRoaXMuZ2V0VGFnRm9ySWQoZSk7aWYodm9pZCAwIT09dGhpcy5kZWZlcnJlZFtlXSl7dmFyIGk9dGhpcy5kZWZlcnJlZFtlXS5jb25jYXQodCk7YS5pbnNlcnRSdWxlcyhlLGksbiksdGhpcy5kZWZlcnJlZFtlXT12b2lkIDB9ZWxzZSBhLmluc2VydFJ1bGVzKGUsdCxuKX0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudGFnTWFwW2VdO2lmKHZvaWQgMCE9PXQpe2Zvcih2YXIgbj10aGlzLmNsb25lcyxyPTA7cjxuLmxlbmd0aDtyKz0xKW5bcl0ucmVtb3ZlKGUpO3QucmVtb3ZlUnVsZXMoZSksdGhpcy5pZ25vcmVSZWh5ZHJhdGVkTmFtZXNbZV09ITAsdGhpcy5kZWZlcnJlZFtlXT12b2lkIDB9fSxlLnByb3RvdHlwZS50b0hUTUw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YWdzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9IVE1MKCl9KSkuam9pbihcIlwiKX0sZS5wcm90b3R5cGUudG9SZWFjdEVsZW1lbnRzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5pZDtyZXR1cm4gdGhpcy50YWdzLm1hcCgoZnVuY3Rpb24odCxuKXt2YXIgcj1cInNjLVwiK2UrXCItXCIrbjtyZXR1cm4oMCxsLmNsb25lRWxlbWVudCkodC50b0VsZW1lbnQoKSx7a2V5OnJ9KX0pKX0sSShlLG51bGwsW3trZXk6XCJtYXN0ZXJcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gX2V8fChfZT0obmV3IGUpLnJlaHlkcmF0ZSgpKX19LHtrZXk6XCJpbnN0YW5jZVwiLGdldDpmdW5jdGlvbigpe3JldHVybiBlLm1hc3Rlcn19XSksZX0oKSxFZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXt2YXIgcj10aGlzO1IodGhpcyxlKSx0aGlzLmluamVjdD1mdW5jdGlvbihlKXtlLmhhc05hbWVGb3JJZChyLmlkLHIubmFtZSl8fGUuaW5qZWN0KHIuaWQsci5ydWxlcyxyLm5hbWUpfSx0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IHEoMTIsU3RyaW5nKHIubmFtZSkpfSx0aGlzLm5hbWU9dCx0aGlzLnJ1bGVzPW4sdGhpcy5pZD1cInNjLWtleWZyYW1lcy1cIit0fXJldHVybiBlLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZX0sZX0oKSxqZT0vKFtBLVpdKS9nLFJlPS9ebXMtLztmdW5jdGlvbiBJZShlKXtyZXR1cm4gZS5yZXBsYWNlKGplLFwiLSQxXCIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShSZSxcIi1tcy1cIil9dmFyIFZlPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfHwhMT09PWV8fFwiXCI9PT1lfSxIZT1mdW5jdGlvbiBlKHQsbil7dmFyIHI9W107cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe2lmKCFWZSh0W25dKSl7aWYoVCh0W25dKSlyZXR1cm4gci5wdXNoLmFwcGx5KHIsZSh0W25dLG4pKSxyO2lmKFoodFtuXSkpcmV0dXJuIHIucHVzaChJZShuKStcIjpcIix0W25dLFwiO1wiKSxyO3IucHVzaChJZShuKStcIjogXCIrKG89biwobnVsbD09KGE9dFtuXSl8fFwiYm9vbGVhblwiPT10eXBlb2YgYXx8XCJcIj09PWE/XCJcIjpcIm51bWJlclwiIT10eXBlb2YgYXx8MD09PWF8fG8gaW4gcz9TdHJpbmcoYSkudHJpbSgpOmErXCJweFwiKStcIjtcIikpfXZhciBvLGE7cmV0dXJuIHJ9KSksbj9bbitcIiB7XCJdLmNvbmNhdChyLFtcIn1cIl0pOnJ9O2Z1bmN0aW9uIEFlKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHIsbz1bXSxhPTAsaT1lLmxlbmd0aDthPGk7YSs9MSludWxsIT09KHI9QWUoZVthXSx0LG4pKSYmKEFycmF5LmlzQXJyYXkocik/by5wdXNoLmFwcGx5KG8scik6by5wdXNoKHIpKTtyZXR1cm4gb31yZXR1cm4gVmUoZSk/bnVsbDpOKGUpP1wiLlwiK2Uuc3R5bGVkQ29tcG9uZW50SWQ6WihlKT9cImZ1bmN0aW9uXCIhPXR5cGVvZihsPWUpfHxsLnByb3RvdHlwZSYmbC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudHx8IXQ/ZTpBZShlKHQpLHQsbik6ZSBpbnN0YW5jZW9mIEVlP24/KGUuaW5qZWN0KG4pLGUuZ2V0TmFtZSgpKTplOlQoZSk/SGUoZSk6ZS50b1N0cmluZygpO3ZhciBsfWZ1bmN0aW9uIFRlKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3JldHVybiBaKGUpfHxUKGUpP0FlKEUoRCxbZV0uY29uY2F0KG4pKSk6QWUoRShlLG4pKX1mdW5jdGlvbiBEZShlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpCO2lmKCEoMCxjLmlzVmFsaWRFbGVtZW50VHlwZSkodCkpdGhyb3cgbmV3IHEoMSxTdHJpbmcodCkpO3ZhciByPWZ1bmN0aW9uKCl7cmV0dXJuIGUodCxuLFRlLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX07cmV0dXJuIHIud2l0aENvbmZpZz1mdW5jdGlvbihyKXtyZXR1cm4gRGUoZSx0LFYoe30sbixyKSl9LHIuYXR0cnM9ZnVuY3Rpb24ocil7cmV0dXJuIERlKGUsdCxWKHt9LG4se2F0dHJzOkFycmF5LnByb3RvdHlwZS5jb25jYXQobi5hdHRycyxyKS5maWx0ZXIoQm9vbGVhbil9KSl9LHJ9ZnVuY3Rpb24gQmUoZSl7Zm9yKHZhciB0LG49MHxlLmxlbmd0aCxyPTB8bixvPTA7bj49NDspdD0xNTQwNDgzNDc3Kig2NTUzNSYodD0yNTUmZS5jaGFyQ29kZUF0KG8pfCgyNTUmZS5jaGFyQ29kZUF0KCsrbykpPDw4fCgyNTUmZS5jaGFyQ29kZUF0KCsrbykpPDwxNnwoMjU1JmUuY2hhckNvZGVBdCgrK28pKTw8MjQpKSsoKDE1NDA0ODM0NzcqKHQ+Pj4xNikmNjU1MzUpPDwxNikscj0xNTQwNDgzNDc3Kig2NTUzNSZyKSsoKDE1NDA0ODM0NzcqKHI+Pj4xNikmNjU1MzUpPDwxNileKHQ9MTU0MDQ4MzQ3NyooNjU1MzUmKHRePXQ+Pj4yNCkpKygoMTU0MDQ4MzQ3NyoodD4+PjE2KSY2NTUzNSk8PDE2KSksbi09NCwrK287c3dpdGNoKG4pe2Nhc2UgMzpyXj0oMjU1JmUuY2hhckNvZGVBdChvKzIpKTw8MTY7Y2FzZSAyOnJePSgyNTUmZS5jaGFyQ29kZUF0KG8rMSkpPDw4O2Nhc2UgMTpyPTE1NDA0ODM0NzcqKDY1NTM1JihyXj0yNTUmZS5jaGFyQ29kZUF0KG8pKSkrKCgxNTQwNDgzNDc3KihyPj4+MTYpJjY1NTM1KTw8MTYpfXJldHVybigocj0xNTQwNDgzNDc3Kig2NTUzNSYocl49cj4+PjEzKSkrKCgxNTQwNDgzNDc3KihyPj4+MTYpJjY1NTM1KTw8MTYpKV5yPj4+MTUpPj4+MH12YXIgWmU9NTIsJGU9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZSsoZT4yNT8zOTo5NykpfTtmdW5jdGlvbiBOZShlKXt2YXIgdD1cIlwiLG49dm9pZCAwO2ZvcihuPWU7bj5aZTtuPU1hdGguZmxvb3Iobi9aZSkpdD0kZShuJVplKSt0O3JldHVybiAkZShuJVplKSt0fWZ1bmN0aW9uIEZlKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKz0xKXt2YXIgcj1lW25dO2lmKEFycmF5LmlzQXJyYXkocikmJiFGZShyLHQpKXJldHVybiExO2lmKFoocikmJiFOKHIpKXJldHVybiExfXJldHVybiF0LnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBaKGUpfHxmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSlpZihaKGVbdF0pKXJldHVybiEwO3JldHVybiExfShlKX0pKX12YXIgV2UsVWU9ZnVuY3Rpb24oZSl7cmV0dXJuIE5lKEJlKGUpKX0semU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbixyKXtSKHRoaXMsZSksdGhpcy5ydWxlcz10LHRoaXMuaXNTdGF0aWM9RmUodCxuKSx0aGlzLmNvbXBvbmVudElkPXIsUGUubWFzdGVyLmhhc0lkKHIpfHxQZS5tYXN0ZXIuZGVmZXJyZWRJbmplY3QocixbXSl9cmV0dXJuIGUucHJvdG90eXBlLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5pc1N0YXRpYyxyPXRoaXMuY29tcG9uZW50SWQsbz10aGlzLmxhc3RDbGFzc05hbWU7aWYoeiYmbiYmXCJzdHJpbmdcIj09dHlwZW9mIG8mJnQuaGFzTmFtZUZvcklkKHIsbykpcmV0dXJuIG87dmFyIGE9QWUodGhpcy5ydWxlcyxlLHQpLGk9VWUodGhpcy5jb21wb25lbnRJZCthLmpvaW4oXCJcIikpO3JldHVybiB0Lmhhc05hbWVGb3JJZChyLGkpfHx0LmluamVjdCh0aGlzLmNvbXBvbmVudElkLGNlKGEsXCIuXCIraSx2b2lkIDAsciksaSksdGhpcy5sYXN0Q2xhc3NOYW1lPWksaX0sZS5nZW5lcmF0ZU5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFVlKGUpfSxlfSgpLEdlPWZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOkIscj0hIW4mJmUudGhlbWU9PT1uLnRoZW1lO3JldHVybiBlLnRoZW1lJiYhcj9lLnRoZW1lOnR8fG4udGhlbWV9LEtlPS9bW1xcXS4jKiQ+PCt+PXxeOigpLFwiJ2AtXSsvZyxxZT0vKF4tfC0kKS9nO2Z1bmN0aW9uIFllKGUpe3JldHVybiBlLnJlcGxhY2UoS2UsXCItXCIpLnJlcGxhY2UocWUsXCJcIil9ZnVuY3Rpb24gSmUoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJiEwfXZhciBYZT17Y2hpbGRDb250ZXh0VHlwZXM6ITAsY29udGV4dFR5cGVzOiEwLGRlZmF1bHRQcm9wczohMCxkaXNwbGF5TmFtZTohMCxnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6ITAscHJvcFR5cGVzOiEwLHR5cGU6ITB9LFFlPXtuYW1lOiEwLGxlbmd0aDohMCxwcm90b3R5cGU6ITAsY2FsbGVyOiEwLGNhbGxlZTohMCxhcmd1bWVudHM6ITAsYXJpdHk6ITB9LGV0PSgoV2U9e30pW2MuRm9yd2FyZFJlZl09eyQkdHlwZW9mOiEwLHJlbmRlcjohMH0sV2UpLHR0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxudD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxydD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLG90PXZvaWQgMD09PXJ0P2Z1bmN0aW9uKCl7cmV0dXJuW119OnJ0LGF0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsaXQ9T2JqZWN0LmdldFByb3RvdHlwZU9mLGx0PU9iamVjdC5wcm90b3R5cGUsc3Q9QXJyYXkucHJvdG90eXBlO2Z1bmN0aW9uIGN0KGUsdCxuKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl7dmFyIHI9aXQodCk7ciYmciE9PWx0JiZjdChlLHIsbik7Zm9yKHZhciBvPXN0LmNvbmNhdChudCh0KSxvdCh0KSksYT1ldFtlLiQkdHlwZW9mXXx8WGUsaT1ldFt0LiQkdHlwZW9mXXx8WGUsbD1vLmxlbmd0aCxzPXZvaWQgMCxjPXZvaWQgMDtsLS07KWlmKGM9b1tsXSwhKFFlW2NdfHxuJiZuW2NdfHxpJiZpW2NdfHxhJiZhW2NdKSYmKHM9YXQodCxjKSkpdHJ5e3R0KGUsYyxzKX1jYXRjaChlKXt9cmV0dXJuIGV9cmV0dXJuIGV9dmFyIHV0PSgwLGwuY3JlYXRlQ29udGV4dCkoKSxkdD11dC5Db25zdW1lcixwdD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe1IodGhpcyx0KTt2YXIgcj1BKHRoaXMsZS5jYWxsKHRoaXMsbikpO3JldHVybiByLmdldENvbnRleHQ9cChyLmdldENvbnRleHQuYmluZChyKSksci5yZW5kZXJJbm5lcj1yLnJlbmRlcklubmVyLmJpbmQocikscn1yZXR1cm4gSCh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuP2wuY3JlYXRlRWxlbWVudCh1dC5Db25zdW1lcixudWxsLHRoaXMucmVuZGVySW5uZXIpOm51bGx9LHQucHJvdG90eXBlLnJlbmRlcklubmVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0Q29udGV4dCh0aGlzLnByb3BzLnRoZW1lLGUpO3JldHVybiBsLmNyZWF0ZUVsZW1lbnQodXQuUHJvdmlkZXIse3ZhbHVlOnR9LHRoaXMucHJvcHMuY2hpbGRyZW4pfSx0LnByb3RvdHlwZS5nZXRUaGVtZT1mdW5jdGlvbihlLHQpe2lmKFooZSkpcmV0dXJuIGUodCk7aWYobnVsbD09PWV8fEFycmF5LmlzQXJyYXkoZSl8fFwib2JqZWN0XCIhPT0odm9pZCAwPT09ZT9cInVuZGVmaW5lZFwiOmooZSkpKXRocm93IG5ldyBxKDgpO3JldHVybiBWKHt9LHQsZSl9LHQucHJvdG90eXBlLmdldENvbnRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5nZXRUaGVtZShlLHQpfSx0fShsLkNvbXBvbmVudCksZnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Uih0aGlzLGUpLHRoaXMubWFzdGVyU2hlZXQ9UGUubWFzdGVyLHRoaXMuaW5zdGFuY2U9dGhpcy5tYXN0ZXJTaGVldC5jbG9uZSgpLHRoaXMuc2VhbGVkPSExfXJldHVybiBlLnByb3RvdHlwZS5zZWFsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc2VhbGVkKXt2YXIgZT10aGlzLm1hc3RlclNoZWV0LmNsb25lcy5pbmRleE9mKHRoaXMuaW5zdGFuY2UpO3RoaXMubWFzdGVyU2hlZXQuY2xvbmVzLnNwbGljZShlLDEpLHRoaXMuc2VhbGVkPSEwfX0sZS5wcm90b3R5cGUuY29sbGVjdFN0eWxlcz1mdW5jdGlvbihlKXtpZih0aGlzLnNlYWxlZCl0aHJvdyBuZXcgcSgyKTtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KHZ0LHtzaGVldDp0aGlzLmluc3RhbmNlfSxlKX0sZS5wcm90b3R5cGUuZ2V0U3R5bGVUYWdzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VhbCgpLHRoaXMuaW5zdGFuY2UudG9IVE1MKCl9LGUucHJvdG90eXBlLmdldFN0eWxlRWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlYWwoKSx0aGlzLmluc3RhbmNlLnRvUmVhY3RFbGVtZW50cygpfSxlLnByb3RvdHlwZS5pbnRlcmxlYXZlV2l0aE5vZGVTdHJlYW09ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IHEoMyl9LGV9KCksaHQ9KDAsbC5jcmVhdGVDb250ZXh0KSgpLGd0PWh0LkNvbnN1bWVyLHZ0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7Uih0aGlzLHQpO3ZhciByPUEodGhpcyxlLmNhbGwodGhpcyxuKSk7cmV0dXJuIHIuZ2V0Q29udGV4dD1wKHIuZ2V0Q29udGV4dCkscn1yZXR1cm4gSCh0LGUpLHQucHJvdG90eXBlLmdldENvbnRleHQ9ZnVuY3Rpb24oZSx0KXtpZihlKXJldHVybiBlO2lmKHQpcmV0dXJuIG5ldyBQZSh0KTt0aHJvdyBuZXcgcSg0KX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2hpbGRyZW4sbj1lLnNoZWV0LHI9ZS50YXJnZXQ7cmV0dXJuIGwuY3JlYXRlRWxlbWVudChodC5Qcm92aWRlcix7dmFsdWU6dGhpcy5nZXRDb250ZXh0KG4scil9LHQpfSx0fShsLkNvbXBvbmVudCksQ3Q9e307dmFyIG10PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtSKHRoaXMsdCk7dmFyIG49QSh0aGlzLGUuY2FsbCh0aGlzKSk7cmV0dXJuIG4uYXR0cnM9e30sbi5yZW5kZXJPdXRlcj1uLnJlbmRlck91dGVyLmJpbmQobiksbi5yZW5kZXJJbm5lcj1uLnJlbmRlcklubmVyLmJpbmQobiksbn1yZXR1cm4gSCh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBsLmNyZWF0ZUVsZW1lbnQoZ3QsbnVsbCx0aGlzLnJlbmRlck91dGVyKX0sdC5wcm90b3R5cGUucmVuZGVyT3V0ZXI9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06UGUubWFzdGVyO3JldHVybiB0aGlzLnN0eWxlU2hlZXQ9ZSx0aGlzLnByb3BzLmZvcndhcmRlZENvbXBvbmVudC5jb21wb25lbnRTdHlsZS5pc1N0YXRpYz90aGlzLnJlbmRlcklubmVyKCk6bC5jcmVhdGVFbGVtZW50KGR0LG51bGwsdGhpcy5yZW5kZXJJbm5lcil9LHQucHJvdG90eXBlLnJlbmRlcklubmVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMuZm9yd2FyZGVkQ29tcG9uZW50LG49dC5jb21wb25lbnRTdHlsZSxyPXQuZGVmYXVsdFByb3BzLG89KHQuZGlzcGxheU5hbWUsdC5mb2xkZWRDb21wb25lbnRJZHMpLGE9dC5zdHlsZWRDb21wb25lbnRJZCxpPXQudGFyZ2V0LHM9dm9pZCAwO3M9bi5pc1N0YXRpYz90aGlzLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKEIsdGhpcy5wcm9wcyk6dGhpcy5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcyhHZSh0aGlzLnByb3BzLGUscil8fEIsdGhpcy5wcm9wcyk7dmFyIGM9dGhpcy5wcm9wcy5hc3x8dGhpcy5hdHRycy5hc3x8aSx1PUplKGMpLGQ9e30scD1WKHt9LHRoaXMucHJvcHMsdGhpcy5hdHRycyksZj12b2lkIDA7Zm9yKGYgaW4gcClcImZvcndhcmRlZENvbXBvbmVudFwiIT09ZiYmXCJhc1wiIT09ZiYmKFwiZm9yd2FyZGVkUmVmXCI9PT1mP2QucmVmPXBbZl06XCJmb3J3YXJkZWRBc1wiPT09Zj9kLmFzPXBbZl06dSYmIWgoZil8fChkW2ZdPXBbZl0pKTtyZXR1cm4gdGhpcy5wcm9wcy5zdHlsZSYmdGhpcy5hdHRycy5zdHlsZSYmKGQuc3R5bGU9Vih7fSx0aGlzLmF0dHJzLnN0eWxlLHRoaXMucHJvcHMuc3R5bGUpKSxkLmNsYXNzTmFtZT1BcnJheS5wcm90b3R5cGUuY29uY2F0KG8sYSxzIT09YT9zOm51bGwsdGhpcy5wcm9wcy5jbGFzc05hbWUsdGhpcy5hdHRycy5jbGFzc05hbWUpLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSwoMCxsLmNyZWF0ZUVsZW1lbnQpKGMsZCl9LHQucHJvdG90eXBlLmJ1aWxkRXhlY3V0aW9uQ29udGV4dD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxvPVYoe30sdCx7dGhlbWU6ZX0pO3JldHVybiBuLmxlbmd0aD8odGhpcy5hdHRycz17fSxuLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0LG49ZSxhPSExLGk9dm9pZCAwLGw9dm9pZCAwO2ZvcihsIGluIFoobikmJihuPW4obyksYT0hMCksbilpPW5bbF0sYXx8IVooaSl8fCh0PWkpJiZ0LnByb3RvdHlwZSYmdC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudHx8TihpKXx8KGk9aShvKSksci5hdHRyc1tsXT1pLG9bbF09aX0pKSxvKTpvfSx0LnByb3RvdHlwZS5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcz1mdW5jdGlvbihlLHQpe3ZhciBuPXQuZm9yd2FyZGVkQ29tcG9uZW50LHI9bi5hdHRycyxvPW4uY29tcG9uZW50U3R5bGU7bi53YXJuVG9vTWFueUNsYXNzZXM7cmV0dXJuIG8uaXNTdGF0aWMmJiFyLmxlbmd0aD9vLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKEIsdGhpcy5zdHlsZVNoZWV0KTpvLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKHRoaXMuYnVpbGRFeGVjdXRpb25Db250ZXh0KGUsdCxyKSx0aGlzLnN0eWxlU2hlZXQpfSx0fShsLkNvbXBvbmVudCk7ZnVuY3Rpb24gd3QoZSx0LG4pe3ZhciByPU4oZSksbz0hSmUoZSksYT10LmRpc3BsYXlOYW1lLGk9dm9pZCAwPT09YT9mdW5jdGlvbihlKXtyZXR1cm4gSmUoZSk/XCJzdHlsZWQuXCIrZTpcIlN0eWxlZChcIiskKGUpK1wiKVwifShlKTphLHM9dC5jb21wb25lbnRJZCxjPXZvaWQgMD09PXM/ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVwic3RyaW5nXCIhPXR5cGVvZiB0P1wic2NcIjpZZSh0KSxvPShDdFtyXXx8MCkrMTtDdFtyXT1vO3ZhciBhPXIrXCItXCIrZS5nZW5lcmF0ZU5hbWUocitvKTtyZXR1cm4gbj9uK1wiLVwiK2E6YX0oemUsdC5kaXNwbGF5TmFtZSx0LnBhcmVudENvbXBvbmVudElkKTpzLHU9dC5QYXJlbnRDb21wb25lbnQsZD12b2lkIDA9PT11P210OnUscD10LmF0dHJzLGY9dm9pZCAwPT09cD9EOnAsaD10LmRpc3BsYXlOYW1lJiZ0LmNvbXBvbmVudElkP1llKHQuZGlzcGxheU5hbWUpK1wiLVwiK3QuY29tcG9uZW50SWQ6dC5jb21wb25lbnRJZHx8YyxnPXImJmUuYXR0cnM/QXJyYXkucHJvdG90eXBlLmNvbmNhdChlLmF0dHJzLGYpLmZpbHRlcihCb29sZWFuKTpmLHY9bmV3IHplKHI/ZS5jb21wb25lbnRTdHlsZS5ydWxlcy5jb25jYXQobik6bixnLGgpLEM9dm9pZCAwLG09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KGQsVih7fSxlLHtmb3J3YXJkZWRDb21wb25lbnQ6Qyxmb3J3YXJkZWRSZWY6dH0pKX07cmV0dXJuIG0uZGlzcGxheU5hbWU9aSwoQz1sLmZvcndhcmRSZWYobSkpLmRpc3BsYXlOYW1lPWksQy5hdHRycz1nLEMuY29tcG9uZW50U3R5bGU9dixDLmZvbGRlZENvbXBvbmVudElkcz1yP0FycmF5LnByb3RvdHlwZS5jb25jYXQoZS5mb2xkZWRDb21wb25lbnRJZHMsZS5zdHlsZWRDb21wb25lbnRJZCk6RCxDLnN0eWxlZENvbXBvbmVudElkPWgsQy50YXJnZXQ9cj9lLnRhcmdldDplLEMud2l0aENvbXBvbmVudD1mdW5jdGlvbihlKXt2YXIgcj10LmNvbXBvbmVudElkLG89ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn0odCxbXCJjb21wb25lbnRJZFwiXSksYT1yJiZyK1wiLVwiKyhKZShlKT9lOlllKCQoZSkpKTtyZXR1cm4gd3QoZSxWKHt9LG8se2F0dHJzOmcsY29tcG9uZW50SWQ6YSxQYXJlbnRDb21wb25lbnQ6ZH0pLG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQyxcImRlZmF1bHRQcm9wc1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9sZGVkRGVmYXVsdFByb3BzfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZm9sZGVkRGVmYXVsdFByb3BzPXI/UChlLmRlZmF1bHRQcm9wcyx0KTp0fX0pLEMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIi5cIitDLnN0eWxlZENvbXBvbmVudElkfSxvJiZjdChDLGUse2F0dHJzOiEwLGNvbXBvbmVudFN0eWxlOiEwLGRpc3BsYXlOYW1lOiEwLGZvbGRlZENvbXBvbmVudElkczohMCxzdHlsZWRDb21wb25lbnRJZDohMCx0YXJnZXQ6ITAsd2l0aENvbXBvbmVudDohMH0pLEN9dmFyIGJ0PWZ1bmN0aW9uKGUpe3JldHVybiBEZSh3dCxlKX07W1wiYVwiLFwiYWJiclwiLFwiYWRkcmVzc1wiLFwiYXJlYVwiLFwiYXJ0aWNsZVwiLFwiYXNpZGVcIixcImF1ZGlvXCIsXCJiXCIsXCJiYXNlXCIsXCJiZGlcIixcImJkb1wiLFwiYmlnXCIsXCJibG9ja3F1b3RlXCIsXCJib2R5XCIsXCJiclwiLFwiYnV0dG9uXCIsXCJjYW52YXNcIixcImNhcHRpb25cIixcImNpdGVcIixcImNvZGVcIixcImNvbFwiLFwiY29sZ3JvdXBcIixcImRhdGFcIixcImRhdGFsaXN0XCIsXCJkZFwiLFwiZGVsXCIsXCJkZXRhaWxzXCIsXCJkZm5cIixcImRpYWxvZ1wiLFwiZGl2XCIsXCJkbFwiLFwiZHRcIixcImVtXCIsXCJlbWJlZFwiLFwiZmllbGRzZXRcIixcImZpZ2NhcHRpb25cIixcImZpZ3VyZVwiLFwiZm9vdGVyXCIsXCJmb3JtXCIsXCJoMVwiLFwiaDJcIixcImgzXCIsXCJoNFwiLFwiaDVcIixcImg2XCIsXCJoZWFkXCIsXCJoZWFkZXJcIixcImhncm91cFwiLFwiaHJcIixcImh0bWxcIixcImlcIixcImlmcmFtZVwiLFwiaW1nXCIsXCJpbnB1dFwiLFwiaW5zXCIsXCJrYmRcIixcImtleWdlblwiLFwibGFiZWxcIixcImxlZ2VuZFwiLFwibGlcIixcImxpbmtcIixcIm1haW5cIixcIm1hcFwiLFwibWFya1wiLFwibWFycXVlZVwiLFwibWVudVwiLFwibWVudWl0ZW1cIixcIm1ldGFcIixcIm1ldGVyXCIsXCJuYXZcIixcIm5vc2NyaXB0XCIsXCJvYmplY3RcIixcIm9sXCIsXCJvcHRncm91cFwiLFwib3B0aW9uXCIsXCJvdXRwdXRcIixcInBcIixcInBhcmFtXCIsXCJwaWN0dXJlXCIsXCJwcmVcIixcInByb2dyZXNzXCIsXCJxXCIsXCJycFwiLFwicnRcIixcInJ1YnlcIixcInNcIixcInNhbXBcIixcInNjcmlwdFwiLFwic2VjdGlvblwiLFwic2VsZWN0XCIsXCJzbWFsbFwiLFwic291cmNlXCIsXCJzcGFuXCIsXCJzdHJvbmdcIixcInN0eWxlXCIsXCJzdWJcIixcInN1bW1hcnlcIixcInN1cFwiLFwidGFibGVcIixcInRib2R5XCIsXCJ0ZFwiLFwidGV4dGFyZWFcIixcInRmb290XCIsXCJ0aFwiLFwidGhlYWRcIixcInRpbWVcIixcInRpdGxlXCIsXCJ0clwiLFwidHJhY2tcIixcInVcIixcInVsXCIsXCJ2YXJcIixcInZpZGVvXCIsXCJ3YnJcIixcImNpcmNsZVwiLFwiY2xpcFBhdGhcIixcImRlZnNcIixcImVsbGlwc2VcIixcImZvcmVpZ25PYmplY3RcIixcImdcIixcImltYWdlXCIsXCJsaW5lXCIsXCJsaW5lYXJHcmFkaWVudFwiLFwibWFya2VyXCIsXCJtYXNrXCIsXCJwYXRoXCIsXCJwYXR0ZXJuXCIsXCJwb2x5Z29uXCIsXCJwb2x5bGluZVwiLFwicmFkaWFsR3JhZGllbnRcIixcInJlY3RcIixcInN0b3BcIixcInN2Z1wiLFwidGV4dFwiLFwidHNwYW5cIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7YnRbZV09YnQoZSl9KSk7dmFyIHl0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4pe1IodGhpcyxlKSx0aGlzLnJ1bGVzPXQsdGhpcy5jb21wb25lbnRJZD1uLHRoaXMuaXNTdGF0aWM9RmUodCxEKSxQZS5tYXN0ZXIuaGFzSWQobil8fFBlLm1hc3Rlci5kZWZlcnJlZEluamVjdChuLFtdKX1yZXR1cm4gZS5wcm90b3R5cGUuY3JlYXRlU3R5bGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49Y2UoQWUodGhpcy5ydWxlcyxlLHQpLFwiXCIpO3QuaW5qZWN0KHRoaXMuY29tcG9uZW50SWQsbil9LGUucHJvdG90eXBlLnJlbW92ZVN0eWxlcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbXBvbmVudElkO2UuaGFzSWQodCkmJmUucmVtb3ZlKHQpfSxlLnByb3RvdHlwZS5yZW5kZXJTdHlsZXM9ZnVuY3Rpb24oZSx0KXt0aGlzLnJlbW92ZVN0eWxlcyh0KSx0aGlzLmNyZWF0ZVN0eWxlcyhlLHQpfSxlfSgpO2Z1bmN0aW9uIHh0KGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3ZhciBvPVRlLmFwcGx5KHZvaWQgMCxbZV0uY29uY2F0KG4pKSxhPVwic2MtZ2xvYmFsLVwiK0JlKEpTT04uc3RyaW5naWZ5KG8pKSxpPW5ldyB5dChvLGEpLHM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtSKHRoaXMsdCk7dmFyIHI9QSh0aGlzLGUuY2FsbCh0aGlzLG4pKSxvPXIuY29uc3RydWN0b3IsYT1vLmdsb2JhbFN0eWxlLGk9by5zdHlsZWRDb21wb25lbnRJZDtyZXR1cm4geiYmKHdpbmRvdy5zY0NHU0hNUkNhY2hlW2ldPSh3aW5kb3cuc2NDR1NITVJDYWNoZVtpXXx8MCkrMSksci5zdGF0ZT17Z2xvYmFsU3R5bGU6YSxzdHlsZWRDb21wb25lbnRJZDppfSxyfXJldHVybiBIKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt3aW5kb3cuc2NDR1NITVJDYWNoZVt0aGlzLnN0YXRlLnN0eWxlZENvbXBvbmVudElkXSYmKHdpbmRvdy5zY0NHU0hNUkNhY2hlW3RoaXMuc3RhdGUuc3R5bGVkQ29tcG9uZW50SWRdLT0xKSwwPT09d2luZG93LnNjQ0dTSE1SQ2FjaGVbdGhpcy5zdGF0ZS5zdHlsZWRDb21wb25lbnRJZF0mJnRoaXMuc3RhdGUuZ2xvYmFsU3R5bGUucmVtb3ZlU3R5bGVzKHRoaXMuc3R5bGVTaGVldCl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGwuY3JlYXRlRWxlbWVudChndCxudWxsLChmdW5jdGlvbih0KXtlLnN0eWxlU2hlZXQ9dHx8UGUubWFzdGVyO3ZhciBuPWUuc3RhdGUuZ2xvYmFsU3R5bGU7cmV0dXJuIG4uaXNTdGF0aWM/KG4ucmVuZGVyU3R5bGVzKEssZS5zdHlsZVNoZWV0KSxudWxsKTpsLmNyZWF0ZUVsZW1lbnQoZHQsbnVsbCwoZnVuY3Rpb24odCl7dmFyIHI9ZS5jb25zdHJ1Y3Rvci5kZWZhdWx0UHJvcHMsbz1WKHt9LGUucHJvcHMpO3JldHVybiB2b2lkIDAhPT10JiYoby50aGVtZT1HZShlLnByb3BzLHQscikpLG4ucmVuZGVyU3R5bGVzKG8sZS5zdHlsZVNoZWV0KSxudWxsfSkpfSkpfSx0fShsLkNvbXBvbmVudCk7cmV0dXJuIHMuZ2xvYmFsU3R5bGU9aSxzLnN0eWxlZENvbXBvbmVudElkPWEsc316JiYod2luZG93LnNjQ0dTSE1SQ2FjaGU9e30pO3ZhciBrdD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cXHN8XFxcXG4vZyxcIlwiKX07ZnVuY3Rpb24gU3QoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07dmFyIG89VGUuYXBwbHkodm9pZCAwLFtlXS5jb25jYXQobikpLGE9TmUoQmUoa3QoSlNPTi5zdHJpbmdpZnkobykpKSk7cmV0dXJuIG5ldyBFZShhLGNlKG8sYSxcIkBrZXlmcmFtZXNcIikpfXZhciBPdD1mdW5jdGlvbihlKXt2YXIgdD1sLmZvcndhcmRSZWYoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGwuY3JlYXRlRWxlbWVudChkdCxudWxsLChmdW5jdGlvbihyKXt2YXIgbz1lLmRlZmF1bHRQcm9wcyxhPUdlKHQscixvKTtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KGUsVih7fSx0LHt0aGVtZTphLHJlZjpufSkpfSkpfSkpO3JldHVybiBjdCh0LGUpLHQuZGlzcGxheU5hbWU9XCJXaXRoVGhlbWUoXCIrJChlKStcIilcIix0fSxNdD17U3R5bGVTaGVldDpQZX07Y29uc3QgTHQ9YnR9LDI0NjplPT57ZS5leHBvcnRzPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PVwiLyp8Ki9cIixuPXQrXCJ9XCI7ZnVuY3Rpb24gcih0KXtpZih0KXRyeXtlKHQrXCJ9XCIpfWNhdGNoKGUpe319cmV0dXJuIGZ1bmN0aW9uKG8sYSxpLGwscyxjLHUsZCxwLGYpe3N3aXRjaChvKXtjYXNlIDE6aWYoMD09PXAmJjY0PT09YS5jaGFyQ29kZUF0KDApKXJldHVybiBlKGErXCI7XCIpLFwiXCI7YnJlYWs7Y2FzZSAyOmlmKDA9PT1kKXJldHVybiBhK3Q7YnJlYWs7Y2FzZSAzOnN3aXRjaChkKXtjYXNlIDEwMjpjYXNlIDExMjpyZXR1cm4gZShpWzBdK2EpLFwiXCI7ZGVmYXVsdDpyZXR1cm4gYSsoMD09PWY/dDpcIlwiKX1jYXNlLTI6YS5zcGxpdChuKS5mb3JFYWNoKHIpfX19fSgpfSw5NDY6ZT0+e2UuZXhwb3J0cz1mdW5jdGlvbiBlKHQpe1widXNlIHN0cmljdFwiO3ZhciBuPS9eXFwwKy9nLHI9L1tcXDBcXHJcXGZdL2csbz0vOiAqL2csYT0vem9vfGdyYS8saT0vKFssOiBdKSh0cmFuc2Zvcm0pL2csbD0vLCtcXHMqKD8hW14oXSpbKV0pL2cscz0vICtcXHMqKD8hW14oXSpbKV0pL2csYz0vICpbXFwwXSAqL2csdT0vLFxccis/L2csZD0vKFtcXHRcXHJcXG4gXSkqXFxmPyYvZyxwPS86Z2xvYmFsXFwoKCg/OlteXFwoXFwpXFxbXFxdXSp8XFxbLipcXF18XFwoW15cXChcXCldKlxcKSkqKVxcKS9nLGY9L1xcVysvZyxoPS9AKGtcXHcrKVxccyooXFxTKilcXHMqLyxnPS86OihwbGFjZSkvZyx2PS86KHJlYWQtb25seSkvZyxDPS9cXHMrKD89W3tcXF07PTo+XSkvZyxtPS8oW1t9PTo+XSlcXHMrL2csdz0vKFxce1tee10rPyk7KD89XFx9KS9nLGI9L1xcc3syLH0vZyx5PS8oW15cXChdKSg6KykgKi9nLHg9L1tzdmhdXFx3Ky1bdGJscl17Mn0vLGs9L1xcKFxccyooLiopXFxzKlxcKS9nLFM9LyhbXFxzXFxTXSo/KTsvZyxPPS8tc2VsZnxmbGV4LS9nLE09L1teXSo/KDpbcnBdW2VsXWFbXFx3LV0rKVteXSovLEw9L3N0cmV0Y2h8OlxccypcXHcrXFwtKD86Y29udGV8YXZhaWwpLyxfPS8oW14tXSkoaW1hZ2Utc2V0XFwoKS8sUD1cIi13ZWJraXQtXCIsRT1cIi1tb3otXCIsaj1cIi1tcy1cIixSPTU5LEk9MTI1LFY9MTIzLEg9NDAsQT00MSxUPTkxLEQ9OTMsQj0xMCxaPTEzLCQ9OSxOPTY0LEY9MzIsVz0zOCxVPTQ1LHo9OTUsRz00MixLPTQ0LHE9NTgsWT0zOSxKPTM0LFg9NDcsUT02MixlZT00Myx0ZT0xMjYsbmU9MCxyZT0xMixvZT0xMSxhZT0xMDcsaWU9MTA5LGxlPTExNSxzZT0xMTIsY2U9MTExLHVlPTEwNSxkZT05OSxwZT0xMDAsZmU9MTEyLGhlPTEsZ2U9MSx2ZT0wLENlPTEsbWU9MSx3ZT0xLGJlPTAseWU9MCx4ZT0wLGtlPVtdLFNlPVtdLE9lPTAsTWU9bnVsbCxMZT0tMixfZT0tMSxQZT0wLEVlPTEsamU9MixSZT0zLEllPTAsVmU9MSxIZT1cIlwiLEFlPVwiXCIsVGU9XCJcIjtmdW5jdGlvbiBEZShlLHQsbyxhLGkpe2Zvcih2YXIgbCxzLHU9MCxkPTAscD0wLGY9MCxDPTAsbT0wLHc9MCxiPTAseD0wLFM9MCxPPTAsTT0wLEw9MCxfPTAsej0wLGJlPTAsU2U9MCxNZT0wLExlPTAsX2U9by5sZW5ndGgsWmU9X2UtMSx6ZT1cIlwiLEdlPVwiXCIsS2U9XCJcIixxZT1cIlwiLFllPVwiXCIsSmU9XCJcIjt6PF9lOyl7aWYodz1vLmNoYXJDb2RlQXQoeiksej09PVplJiZkK2YrcCt1IT09MCYmKDAhPT1kJiYodz1kPT09WD9COlgpLGY9cD11PTAsX2UrKyxaZSsrKSxkK2YrcCt1PT09MCl7aWYoej09PVplJiYoYmU+MCYmKEdlPUdlLnJlcGxhY2UocixcIlwiKSksR2UudHJpbSgpLmxlbmd0aD4wKSl7c3dpdGNoKHcpe2Nhc2UgRjpjYXNlICQ6Y2FzZSBSOmNhc2UgWjpjYXNlIEI6YnJlYWs7ZGVmYXVsdDpHZSs9by5jaGFyQXQoeil9dz1SfWlmKDE9PT1TZSlzd2l0Y2godyl7Y2FzZSBWOmNhc2UgSTpjYXNlIFI6Y2FzZSBKOmNhc2UgWTpjYXNlIEg6Y2FzZSBBOmNhc2UgSzpTZT0wO2Nhc2UgJDpjYXNlIFo6Y2FzZSBCOmNhc2UgRjpicmVhaztkZWZhdWx0OmZvcihTZT0wLExlPXosQz13LHotLSx3PVI7TGU8X2U7KXN3aXRjaChvLmNoYXJDb2RlQXQoTGUrKykpe2Nhc2UgQjpjYXNlIFo6Y2FzZSBSOisreix3PUMsTGU9X2U7YnJlYWs7Y2FzZSBxOmJlPjAmJigrK3osdz1DKTtjYXNlIFY6TGU9X2V9fXN3aXRjaCh3KXtjYXNlIFY6Zm9yKEM9KEdlPUdlLnRyaW0oKSkuY2hhckNvZGVBdCgwKSxPPTEsTGU9Kyt6O3o8X2U7KXtzd2l0Y2godz1vLmNoYXJDb2RlQXQoeikpe2Nhc2UgVjpPKys7YnJlYWs7Y2FzZSBJOk8tLTticmVhaztjYXNlIFg6c3dpdGNoKG09by5jaGFyQ29kZUF0KHorMSkpe2Nhc2UgRzpjYXNlIFg6ej1VZShtLHosWmUsbyl9YnJlYWs7Y2FzZSBUOncrKztjYXNlIEg6dysrO2Nhc2UgSjpjYXNlIFk6Zm9yKDt6Kys8WmUmJm8uY2hhckNvZGVBdCh6KSE9PXc7KTt9aWYoMD09PU8pYnJlYWs7eisrfWlmKEtlPW8uc3Vic3RyaW5nKExlLHopLEM9PT1uZSYmKEM9KEdlPUdlLnJlcGxhY2UobixcIlwiKS50cmltKCkpLmNoYXJDb2RlQXQoMCkpLEM9PT1OKXtzd2l0Y2goYmU+MCYmKEdlPUdlLnJlcGxhY2UocixcIlwiKSksbT1HZS5jaGFyQ29kZUF0KDEpKXtjYXNlIHBlOmNhc2UgaWU6Y2FzZSBsZTpjYXNlIFU6bD10O2JyZWFrO2RlZmF1bHQ6bD1rZX1pZihMZT0oS2U9RGUodCxsLEtlLG0saSsxKSkubGVuZ3RoLHhlPjAmJjA9PT1MZSYmKExlPUdlLmxlbmd0aCksT2U+MCYmKGw9QmUoa2UsR2UsTWUpLHM9V2UoUmUsS2UsbCx0LGdlLGhlLExlLG0saSxhKSxHZT1sLmpvaW4oXCJcIiksdm9pZCAwIT09cyYmMD09PShMZT0oS2U9cy50cmltKCkpLmxlbmd0aCkmJihtPTAsS2U9XCJcIikpLExlPjApc3dpdGNoKG0pe2Nhc2UgbGU6R2U9R2UucmVwbGFjZShrLEZlKTtjYXNlIHBlOmNhc2UgaWU6Y2FzZSBVOktlPUdlK1wie1wiK0tlK1wifVwiO2JyZWFrO2Nhc2UgYWU6S2U9KEdlPUdlLnJlcGxhY2UoaCxcIiQxICQyXCIrKFZlPjA/SGU6XCJcIikpKStcIntcIitLZStcIn1cIixLZT0xPT09bWV8fDI9PT1tZSYmTmUoXCJAXCIrS2UsMyk/XCJAXCIrUCtLZStcIkBcIitLZTpcIkBcIitLZTticmVhaztkZWZhdWx0OktlPUdlK0tlLGE9PT1mZSYmKHFlKz1LZSxLZT1cIlwiKX1lbHNlIEtlPVwiXCJ9ZWxzZSBLZT1EZSh0LEJlKHQsR2UsTWUpLEtlLGEsaSsxKTtZZSs9S2UsTT0wLFNlPTAsXz0wLGJlPTAsTWU9MCxMPTAsR2U9XCJcIixLZT1cIlwiLHc9by5jaGFyQ29kZUF0KCsreik7YnJlYWs7Y2FzZSBJOmNhc2UgUjppZigoTGU9KEdlPShiZT4wP0dlLnJlcGxhY2UocixcIlwiKTpHZSkudHJpbSgpKS5sZW5ndGgpPjEpc3dpdGNoKDA9PT1fJiYoKEM9R2UuY2hhckNvZGVBdCgwKSk9PT1VfHxDPjk2JiZDPDEyMykmJihMZT0oR2U9R2UucmVwbGFjZShcIiBcIixcIjpcIikpLmxlbmd0aCksT2U+MCYmdm9pZCAwIT09KHM9V2UoRWUsR2UsdCxlLGdlLGhlLHFlLmxlbmd0aCxhLGksYSkpJiYwPT09KExlPShHZT1zLnRyaW0oKSkubGVuZ3RoKSYmKEdlPVwiXFwwXFwwXCIpLEM9R2UuY2hhckNvZGVBdCgwKSxtPUdlLmNoYXJDb2RlQXQoMSksQyl7Y2FzZSBuZTpicmVhaztjYXNlIE46aWYobT09PXVlfHxtPT09ZGUpe0plKz1HZStvLmNoYXJBdCh6KTticmVha31kZWZhdWx0OmlmKEdlLmNoYXJDb2RlQXQoTGUtMSk9PT1xKWJyZWFrO3FlKz0kZShHZSxDLG0sR2UuY2hhckNvZGVBdCgyKSl9TT0wLFNlPTAsXz0wLGJlPTAsTWU9MCxHZT1cIlwiLHc9by5jaGFyQ29kZUF0KCsreil9fXN3aXRjaCh3KXtjYXNlIFo6Y2FzZSBCOmlmKGQrZitwK3UreWU9PT0wKXN3aXRjaChTKXtjYXNlIEE6Y2FzZSBZOmNhc2UgSjpjYXNlIE46Y2FzZSB0ZTpjYXNlIFE6Y2FzZSBHOmNhc2UgZWU6Y2FzZSBYOmNhc2UgVTpjYXNlIHE6Y2FzZSBLOmNhc2UgUjpjYXNlIFY6Y2FzZSBJOmJyZWFrO2RlZmF1bHQ6Xz4wJiYoU2U9MSl9ZD09PVg/ZD0wOkNlK009PT0wJiZhIT09YWUmJkdlLmxlbmd0aD4wJiYoYmU9MSxHZSs9XCJcXDBcIiksT2UqSWU+MCYmV2UoUGUsR2UsdCxlLGdlLGhlLHFlLmxlbmd0aCxhLGksYSksaGU9MSxnZSsrO2JyZWFrO2Nhc2UgUjpjYXNlIEk6aWYoZCtmK3ArdT09PTApe2hlKys7YnJlYWt9ZGVmYXVsdDpzd2l0Y2goaGUrKyx6ZT1vLmNoYXJBdCh6KSx3KXtjYXNlICQ6Y2FzZSBGOmlmKGYrdStkPT09MClzd2l0Y2goYil7Y2FzZSBLOmNhc2UgcTpjYXNlICQ6Y2FzZSBGOnplPVwiXCI7YnJlYWs7ZGVmYXVsdDp3IT09RiYmKHplPVwiIFwiKX1icmVhaztjYXNlIG5lOnplPVwiXFxcXDBcIjticmVhaztjYXNlIHJlOnplPVwiXFxcXGZcIjticmVhaztjYXNlIG9lOnplPVwiXFxcXHZcIjticmVhaztjYXNlIFc6ZitkK3U9PT0wJiZDZT4wJiYoTWU9MSxiZT0xLHplPVwiXFxmXCIremUpO2JyZWFrO2Nhc2UgMTA4OmlmKGYrZCt1K3ZlPT09MCYmXz4wKXN3aXRjaCh6LV8pe2Nhc2UgMjpiPT09c2UmJm8uY2hhckNvZGVBdCh6LTMpPT09cSYmKHZlPWIpO2Nhc2UgODp4PT09Y2UmJih2ZT14KX1icmVhaztjYXNlIHE6ZitkK3U9PT0wJiYoXz16KTticmVhaztjYXNlIEs6ZCtwK2YrdT09PTAmJihiZT0xLHplKz1cIlxcclwiKTticmVhaztjYXNlIEo6Y2FzZSBZOjA9PT1kJiYoZj1mPT09dz8wOjA9PT1mP3c6Zik7YnJlYWs7Y2FzZSBUOmYrZCtwPT09MCYmdSsrO2JyZWFrO2Nhc2UgRDpmK2QrcD09PTAmJnUtLTticmVhaztjYXNlIEE6ZitkK3U9PT0wJiZwLS07YnJlYWs7Y2FzZSBIOmYrZCt1PT09MCYmKDA9PT1NJiYoMipiKzMqeD09NTMzfHwoTz0wLE09MSkpLHArKyk7YnJlYWs7Y2FzZSBOOmQrcCtmK3UrXytMPT09MCYmKEw9MSk7YnJlYWs7Y2FzZSBHOmNhc2UgWDppZihmK3UrcD4wKWJyZWFrO3N3aXRjaChkKXtjYXNlIDA6c3dpdGNoKDIqdyszKm8uY2hhckNvZGVBdCh6KzEpKXtjYXNlIDIzNTpkPVg7YnJlYWs7Y2FzZSAyMjA6TGU9eixkPUd9YnJlYWs7Y2FzZSBHOnc9PT1YJiZiPT09RyYmTGUrMiE9PXomJigzMz09PW8uY2hhckNvZGVBdChMZSsyKSYmKHFlKz1vLnN1YnN0cmluZyhMZSx6KzEpKSx6ZT1cIlwiLGQ9MCl9fWlmKDA9PT1kKXtpZihDZStmK3UrTD09PTAmJmEhPT1hZSYmdyE9PVIpc3dpdGNoKHcpe2Nhc2UgSzpjYXNlIHRlOmNhc2UgUTpjYXNlIGVlOmNhc2UgQTpjYXNlIEg6aWYoMD09PU0pe3N3aXRjaChiKXtjYXNlICQ6Y2FzZSBGOmNhc2UgQjpjYXNlIFo6emUrPVwiXFwwXCI7YnJlYWs7ZGVmYXVsdDp6ZT1cIlxcMFwiK3plKyh3PT09Sz9cIlwiOlwiXFwwXCIpfWJlPTF9ZWxzZSBzd2l0Y2godyl7Y2FzZSBIOl8rNz09PXomJjEwOD09PWImJihfPTApLE09KytPO2JyZWFrO2Nhc2UgQTowPT0oTT0tLU8pJiYoYmU9MSx6ZSs9XCJcXDBcIil9YnJlYWs7Y2FzZSAkOmNhc2UgRjpzd2l0Y2goYil7Y2FzZSBuZTpjYXNlIFY6Y2FzZSBJOmNhc2UgUjpjYXNlIEs6Y2FzZSByZTpjYXNlICQ6Y2FzZSBGOmNhc2UgQjpjYXNlIFo6YnJlYWs7ZGVmYXVsdDowPT09TSYmKGJlPTEsemUrPVwiXFwwXCIpfX1HZSs9emUsdyE9PUYmJnchPT0kJiYoUz13KX19eD1iLGI9dyx6Kyt9aWYoTGU9cWUubGVuZ3RoLHhlPjAmJjA9PT1MZSYmMD09PVllLmxlbmd0aCYmMD09PXRbMF0ubGVuZ3RoPT0wJiYoYSE9PWllfHwxPT09dC5sZW5ndGgmJihDZT4wP0FlOlRlKT09PXRbMF0pJiYoTGU9dC5qb2luKFwiLFwiKS5sZW5ndGgrMiksTGU+MCl7aWYobD0wPT09Q2UmJmEhPT1hZT9mdW5jdGlvbihlKXtmb3IodmFyIHQsbixvPTAsYT1lLmxlbmd0aCxpPUFycmF5KGEpO288YTsrK28pe2Zvcih2YXIgbD1lW29dLnNwbGl0KGMpLHM9XCJcIix1PTAsZD0wLHA9MCxmPTAsaD1sLmxlbmd0aDt1PGg7Kyt1KWlmKCEoMD09PShkPShuPWxbdV0pLmxlbmd0aCkmJmg+MSkpe2lmKHA9cy5jaGFyQ29kZUF0KHMubGVuZ3RoLTEpLGY9bi5jaGFyQ29kZUF0KDApLHQ9XCJcIiwwIT09dSlzd2l0Y2gocCl7Y2FzZSBHOmNhc2UgdGU6Y2FzZSBROmNhc2UgZWU6Y2FzZSBGOmNhc2UgSDpicmVhaztkZWZhdWx0OnQ9XCIgXCJ9c3dpdGNoKGYpe2Nhc2UgVzpuPXQrQWU7Y2FzZSB0ZTpjYXNlIFE6Y2FzZSBlZTpjYXNlIEY6Y2FzZSBBOmNhc2UgSDpicmVhaztjYXNlIFQ6bj10K24rQWU7YnJlYWs7Y2FzZSBxOnN3aXRjaCgyKm4uY2hhckNvZGVBdCgxKSszKm4uY2hhckNvZGVBdCgyKSl7Y2FzZSA1MzA6aWYod2U+MCl7bj10K24uc3Vic3RyaW5nKDgsZC0xKTticmVha31kZWZhdWx0Oih1PDF8fGxbdS0xXS5sZW5ndGg8MSkmJihuPXQrQWUrbil9YnJlYWs7Y2FzZSBLOnQ9XCJcIjtkZWZhdWx0Om49ZD4xJiZuLmluZGV4T2YoXCI6XCIpPjA/dCtuLnJlcGxhY2UoeSxcIiQxXCIrQWUrXCIkMlwiKTp0K24rQWV9cys9bn1pW29dPXMucmVwbGFjZShyLFwiXCIpLnRyaW0oKX1yZXR1cm4gaX0odCk6dCxPZT4wJiZ2b2lkIDAhPT0ocz1XZShqZSxxZSxsLGUsZ2UsaGUsTGUsYSxpLGEpKSYmMD09PShxZT1zKS5sZW5ndGgpcmV0dXJuIEplK3FlK1llO2lmKHFlPWwuam9pbihcIixcIikrXCJ7XCIrcWUrXCJ9XCIsbWUqdmUhPTApe3N3aXRjaCgyIT09bWV8fE5lKHFlLDIpfHwodmU9MCksdmUpe2Nhc2UgY2U6cWU9cWUucmVwbGFjZSh2LFwiOlwiK0UrXCIkMVwiKStxZTticmVhaztjYXNlIHNlOnFlPXFlLnJlcGxhY2UoZyxcIjo6XCIrUCtcImlucHV0LSQxXCIpK3FlLnJlcGxhY2UoZyxcIjo6XCIrRStcIiQxXCIpK3FlLnJlcGxhY2UoZyxcIjpcIitqK1wiaW5wdXQtJDFcIikrcWV9dmU9MH19cmV0dXJuIEplK3FlK1llfWZ1bmN0aW9uIEJlKGUsdCxuKXt2YXIgcj10LnRyaW0oKS5zcGxpdCh1KSxvPXIsYT1yLmxlbmd0aCxpPWUubGVuZ3RoO3N3aXRjaChpKXtjYXNlIDA6Y2FzZSAxOmZvcih2YXIgbD0wLHM9MD09PWk/XCJcIjplWzBdK1wiIFwiO2w8YTsrK2wpb1tsXT1aZShzLG9bbF0sbixpKS50cmltKCk7YnJlYWs7ZGVmYXVsdDpsPTA7dmFyIGM9MDtmb3Iobz1bXTtsPGE7KytsKWZvcih2YXIgZD0wO2Q8aTsrK2Qpb1tjKytdPVplKGVbZF0rXCIgXCIscltsXSxuLGkpLnRyaW0oKX1yZXR1cm4gb31mdW5jdGlvbiBaZShlLHQsbixyKXt2YXIgbz10LGE9by5jaGFyQ29kZUF0KDApO3N3aXRjaChhPDMzJiYoYT0obz1vLnRyaW0oKSkuY2hhckNvZGVBdCgwKSksYSl7Y2FzZSBXOnN3aXRjaChDZStyKXtjYXNlIDA6Y2FzZSAxOmlmKDA9PT1lLnRyaW0oKS5sZW5ndGgpYnJlYWs7ZGVmYXVsdDpyZXR1cm4gby5yZXBsYWNlKGQsXCIkMVwiK2UudHJpbSgpKX1icmVhaztjYXNlIHE6aWYoMTAzIT09by5jaGFyQ29kZUF0KDEpKXJldHVybiBlLnRyaW0oKStvLnJlcGxhY2UoZCxcIiQxXCIrZS50cmltKCkpO2lmKHdlPjAmJkNlPjApcmV0dXJuIG8ucmVwbGFjZShwLFwiJDFcIikucmVwbGFjZShkLFwiJDFcIitUZSk7ZGVmYXVsdDppZihuKkNlPjAmJm8uaW5kZXhPZihcIlxcZlwiKT4wKXJldHVybiBvLnJlcGxhY2UoZCwoZS5jaGFyQ29kZUF0KDApPT09cT9cIlwiOlwiJDFcIikrZS50cmltKCkpfXJldHVybiBlK299ZnVuY3Rpb24gJGUoZSx0LG4scil7dmFyIGMsdT0wLGQ9ZStcIjtcIixwPTIqdCszKm4rNCpyO2lmKDk0ND09PXApcmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49ZS5pbmRleE9mKFwiOlwiLDkpKzEscj1lLnN1YnN0cmluZygwLG4pLnRyaW0oKSxvPWUuc3Vic3RyaW5nKG4sdC0xKS50cmltKCk7c3dpdGNoKGUuY2hhckNvZGVBdCg5KSpWZSl7Y2FzZSAwOmJyZWFrO2Nhc2UgVTppZigxMTAhPT1lLmNoYXJDb2RlQXQoMTApKWJyZWFrO2RlZmF1bHQ6dmFyIGE9by5zcGxpdCgobz1cIlwiLGwpKSxpPTA7Zm9yKG49MCx0PWEubGVuZ3RoO2k8dDtuPTAsKytpKXtmb3IodmFyIGM9YVtpXSx1PWMuc3BsaXQocyk7Yz11W25dOyl7dmFyIGQ9Yy5jaGFyQ29kZUF0KDApO2lmKDE9PT1WZSYmKGQ+TiYmZDw5MHx8ZD45NiYmZDwxMjN8fGQ9PT16fHxkPT09VSYmYy5jaGFyQ29kZUF0KDEpIT09VSkmJmlzTmFOKHBhcnNlRmxvYXQoYykpKygtMSE9PWMuaW5kZXhPZihcIihcIikpPT09MSlzd2l0Y2goYyl7Y2FzZVwiaW5maW5pdGVcIjpjYXNlXCJhbHRlcm5hdGVcIjpjYXNlXCJiYWNrd2FyZHNcIjpjYXNlXCJydW5uaW5nXCI6Y2FzZVwibm9ybWFsXCI6Y2FzZVwiZm9yd2FyZHNcIjpjYXNlXCJib3RoXCI6Y2FzZVwibm9uZVwiOmNhc2VcImxpbmVhclwiOmNhc2VcImVhc2VcIjpjYXNlXCJlYXNlLWluXCI6Y2FzZVwiZWFzZS1vdXRcIjpjYXNlXCJlYXNlLWluLW91dFwiOmNhc2VcInBhdXNlZFwiOmNhc2VcInJldmVyc2VcIjpjYXNlXCJhbHRlcm5hdGUtcmV2ZXJzZVwiOmNhc2VcImluaGVyaXRcIjpjYXNlXCJpbml0aWFsXCI6Y2FzZVwidW5zZXRcIjpjYXNlXCJzdGVwLXN0YXJ0XCI6Y2FzZVwic3RlcC1lbmRcIjpicmVhaztkZWZhdWx0OmMrPUhlfXVbbisrXT1jfW8rPSgwPT09aT9cIlwiOlwiLFwiKSt1LmpvaW4oXCIgXCIpfX1yZXR1cm4gbz1yK28rXCI7XCIsMT09PW1lfHwyPT09bWUmJk5lKG8sMSk/UCtvK286b30oZCk7aWYoMD09PW1lfHwyPT09bWUmJiFOZShkLDEpKXJldHVybiBkO3N3aXRjaChwKXtjYXNlIDEwMTU6cmV0dXJuIDk3PT09ZC5jaGFyQ29kZUF0KDEwKT9QK2QrZDpkO2Nhc2UgOTUxOnJldHVybiAxMTY9PT1kLmNoYXJDb2RlQXQoMyk/UCtkK2Q6ZDtjYXNlIDk2MzpyZXR1cm4gMTEwPT09ZC5jaGFyQ29kZUF0KDUpP1ArZCtkOmQ7Y2FzZSAxMDA5OmlmKDEwMCE9PWQuY2hhckNvZGVBdCg0KSlicmVhaztjYXNlIDk2OTpjYXNlIDk0MjpyZXR1cm4gUCtkK2Q7Y2FzZSA5Nzg6cmV0dXJuIFArZCtFK2QrZDtjYXNlIDEwMTk6Y2FzZSA5ODM6cmV0dXJuIFArZCtFK2QraitkK2Q7Y2FzZSA4ODM6cmV0dXJuIGQuY2hhckNvZGVBdCg4KT09PVU/UCtkK2Q6ZC5pbmRleE9mKFwiaW1hZ2Utc2V0KFwiLDExKT4wP2QucmVwbGFjZShfLFwiJDFcIitQK1wiJDJcIikrZDpkO2Nhc2UgOTMyOmlmKGQuY2hhckNvZGVBdCg0KT09PVUpc3dpdGNoKGQuY2hhckNvZGVBdCg1KSl7Y2FzZSAxMDM6cmV0dXJuIFArXCJib3gtXCIrZC5yZXBsYWNlKFwiLWdyb3dcIixcIlwiKStQK2QraitkLnJlcGxhY2UoXCJncm93XCIsXCJwb3NpdGl2ZVwiKStkO2Nhc2UgMTE1OnJldHVybiBQK2QraitkLnJlcGxhY2UoXCJzaHJpbmtcIixcIm5lZ2F0aXZlXCIpK2Q7Y2FzZSA5ODpyZXR1cm4gUCtkK2orZC5yZXBsYWNlKFwiYmFzaXNcIixcInByZWZlcnJlZC1zaXplXCIpK2R9cmV0dXJuIFArZCtqK2QrZDtjYXNlIDk2NDpyZXR1cm4gUCtkK2orXCJmbGV4LVwiK2QrZDtjYXNlIDEwMjM6aWYoOTkhPT1kLmNoYXJDb2RlQXQoOCkpYnJlYWs7cmV0dXJuIGM9ZC5zdWJzdHJpbmcoZC5pbmRleE9mKFwiOlwiLDE1KSkucmVwbGFjZShcImZsZXgtXCIsXCJcIikucmVwbGFjZShcInNwYWNlLWJldHdlZW5cIixcImp1c3RpZnlcIiksUCtcImJveC1wYWNrXCIrYytQK2QraitcImZsZXgtcGFja1wiK2MrZDtjYXNlIDEwMDU6cmV0dXJuIGEudGVzdChkKT9kLnJlcGxhY2UobyxcIjpcIitQKStkLnJlcGxhY2UobyxcIjpcIitFKStkOmQ7Y2FzZSAxZTM6c3dpdGNoKHU9KGM9ZC5zdWJzdHJpbmcoMTMpLnRyaW0oKSkuaW5kZXhPZihcIi1cIikrMSxjLmNoYXJDb2RlQXQoMCkrYy5jaGFyQ29kZUF0KHUpKXtjYXNlIDIyNjpjPWQucmVwbGFjZSh4LFwidGJcIik7YnJlYWs7Y2FzZSAyMzI6Yz1kLnJlcGxhY2UoeCxcInRiLXJsXCIpO2JyZWFrO2Nhc2UgMjIwOmM9ZC5yZXBsYWNlKHgsXCJsclwiKTticmVhaztkZWZhdWx0OnJldHVybiBkfXJldHVybiBQK2QraitjK2Q7Y2FzZSAxMDE3OmlmKC0xPT09ZC5pbmRleE9mKFwic3RpY2t5XCIsOSkpcmV0dXJuIGQ7Y2FzZSA5NzU6c3dpdGNoKHU9KGQ9ZSkubGVuZ3RoLTEwLHA9KGM9KDMzPT09ZC5jaGFyQ29kZUF0KHUpP2Quc3Vic3RyaW5nKDAsdSk6ZCkuc3Vic3RyaW5nKGUuaW5kZXhPZihcIjpcIiw3KSsxKS50cmltKCkpLmNoYXJDb2RlQXQoMCkrKDB8Yy5jaGFyQ29kZUF0KDcpKSl7Y2FzZSAyMDM6aWYoYy5jaGFyQ29kZUF0KDgpPDExMSlicmVhaztjYXNlIDExNTpkPWQucmVwbGFjZShjLFArYykrXCI7XCIrZDticmVhaztjYXNlIDIwNzpjYXNlIDEwMjpkPWQucmVwbGFjZShjLFArKHA+MTAyP1wiaW5saW5lLVwiOlwiXCIpK1wiYm94XCIpK1wiO1wiK2QucmVwbGFjZShjLFArYykrXCI7XCIrZC5yZXBsYWNlKGMsaitjK1wiYm94XCIpK1wiO1wiK2R9cmV0dXJuIGQrXCI7XCI7Y2FzZSA5Mzg6aWYoZC5jaGFyQ29kZUF0KDUpPT09VSlzd2l0Y2goZC5jaGFyQ29kZUF0KDYpKXtjYXNlIDEwNTpyZXR1cm4gYz1kLnJlcGxhY2UoXCItaXRlbXNcIixcIlwiKSxQK2QrUCtcImJveC1cIitjK2orXCJmbGV4LVwiK2MrZDtjYXNlIDExNTpyZXR1cm4gUCtkK2orXCJmbGV4LWl0ZW0tXCIrZC5yZXBsYWNlKE8sXCJcIikrZDtkZWZhdWx0OnJldHVybiBQK2QraitcImZsZXgtbGluZS1wYWNrXCIrZC5yZXBsYWNlKFwiYWxpZ24tY29udGVudFwiLFwiXCIpLnJlcGxhY2UoTyxcIlwiKStkfWJyZWFrO2Nhc2UgOTczOmNhc2UgOTg5OmlmKGQuY2hhckNvZGVBdCgzKSE9PVV8fDEyMj09PWQuY2hhckNvZGVBdCg0KSlicmVhaztjYXNlIDkzMTpjYXNlIDk1MzppZighMD09PUwudGVzdChlKSlyZXR1cm4gMTE1PT09KGM9ZS5zdWJzdHJpbmcoZS5pbmRleE9mKFwiOlwiKSsxKSkuY2hhckNvZGVBdCgwKT8kZShlLnJlcGxhY2UoXCJzdHJldGNoXCIsXCJmaWxsLWF2YWlsYWJsZVwiKSx0LG4scikucmVwbGFjZShcIjpmaWxsLWF2YWlsYWJsZVwiLFwiOnN0cmV0Y2hcIik6ZC5yZXBsYWNlKGMsUCtjKStkLnJlcGxhY2UoYyxFK2MucmVwbGFjZShcImZpbGwtXCIsXCJcIikpK2Q7YnJlYWs7Y2FzZSA5NjI6aWYoZD1QK2QrKDEwMj09PWQuY2hhckNvZGVBdCg1KT9qK2Q6XCJcIikrZCxuK3I9PT0yMTEmJjEwNT09PWQuY2hhckNvZGVBdCgxMykmJmQuaW5kZXhPZihcInRyYW5zZm9ybVwiLDEwKT4wKXJldHVybiBkLnN1YnN0cmluZygwLGQuaW5kZXhPZihcIjtcIiwyNykrMSkucmVwbGFjZShpLFwiJDFcIitQK1wiJDJcIikrZH1yZXR1cm4gZH1mdW5jdGlvbiBOZShlLHQpe3ZhciBuPWUuaW5kZXhPZigxPT09dD9cIjpcIjpcIntcIikscj1lLnN1YnN0cmluZygwLDMhPT10P246MTApLG89ZS5zdWJzdHJpbmcobisxLGUubGVuZ3RoLTEpO3JldHVybiBNZSgyIT09dD9yOnIucmVwbGFjZShNLFwiJDFcIiksbyx0KX1mdW5jdGlvbiBGZShlLHQpe3ZhciBuPSRlKHQsdC5jaGFyQ29kZUF0KDApLHQuY2hhckNvZGVBdCgxKSx0LmNoYXJDb2RlQXQoMikpO3JldHVybiBuIT09dCtcIjtcIj9uLnJlcGxhY2UoUyxcIiBvciAoJDEpXCIpLnN1YnN0cmluZyg0KTpcIihcIit0K1wiKVwifWZ1bmN0aW9uIFdlKGUsdCxuLHIsbyxhLGksbCxzLGMpe2Zvcih2YXIgdSxkPTAscD10O2Q8T2U7KytkKXN3aXRjaCh1PVNlW2RdLmNhbGwoR2UsZSxwLG4scixvLGEsaSxsLHMsYykpe2Nhc2Ugdm9pZCAwOmNhc2UhMTpjYXNlITA6Y2FzZSBudWxsOmJyZWFrO2RlZmF1bHQ6cD11fWlmKHAhPT10KXJldHVybiBwfWZ1bmN0aW9uIFVlKGUsdCxuLHIpe2Zvcih2YXIgbz10KzE7bzxuOysrbylzd2l0Y2goci5jaGFyQ29kZUF0KG8pKXtjYXNlIFg6aWYoZT09PUcmJnIuY2hhckNvZGVBdChvLTEpPT09RyYmdCsyIT09bylyZXR1cm4gbysxO2JyZWFrO2Nhc2UgQjppZihlPT09WClyZXR1cm4gbysxfXJldHVybiBvfWZ1bmN0aW9uIHplKGUpe2Zvcih2YXIgdCBpbiBlKXt2YXIgbj1lW3RdO3N3aXRjaCh0KXtjYXNlXCJrZXlmcmFtZVwiOlZlPTB8bjticmVhaztjYXNlXCJnbG9iYWxcIjp3ZT0wfG47YnJlYWs7Y2FzZVwiY2FzY2FkZVwiOkNlPTB8bjticmVhaztjYXNlXCJjb21wcmVzc1wiOmJlPTB8bjticmVhaztjYXNlXCJzZW1pY29sb25cIjp5ZT0wfG47YnJlYWs7Y2FzZVwicHJlc2VydmVcIjp4ZT0wfG47YnJlYWs7Y2FzZVwicHJlZml4XCI6TWU9bnVsbCxuP1wiZnVuY3Rpb25cIiE9dHlwZW9mIG4/bWU9MToobWU9MixNZT1uKTptZT0wfX1yZXR1cm4gemV9ZnVuY3Rpb24gR2UodCxuKXtpZih2b2lkIDAhPT10aGlzJiZ0aGlzLmNvbnN0cnVjdG9yPT09R2UpcmV0dXJuIGUodCk7dmFyIG89dCxhPW8uY2hhckNvZGVBdCgwKTthPDMzJiYoYT0obz1vLnRyaW0oKSkuY2hhckNvZGVBdCgwKSksVmU+MCYmKEhlPW8ucmVwbGFjZShmLGE9PT1UP1wiXCI6XCItXCIpKSxhPTEsMT09PUNlP1RlPW86QWU9bzt2YXIgaSxsPVtUZV07T2U+MCYmdm9pZCAwIT09KGk9V2UoX2UsbixsLGwsZ2UsaGUsMCwwLDAsMCkpJiZcInN0cmluZ1wiPT10eXBlb2YgaSYmKG49aSk7dmFyIHM9RGUoa2UsbCxuLDAsMCk7cmV0dXJuIE9lPjAmJnZvaWQgMCE9PShpPVdlKExlLHMsbCxsLGdlLGhlLHMubGVuZ3RoLDAsMCwwKSkmJlwic3RyaW5nXCIhPXR5cGVvZihzPWkpJiYoYT0wKSxIZT1cIlwiLFRlPVwiXCIsQWU9XCJcIix2ZT0wLGdlPTEsaGU9MSxiZSphPT0wP3M6cy5yZXBsYWNlKHIsXCJcIikucmVwbGFjZShDLFwiXCIpLnJlcGxhY2UobSxcIiQxXCIpLnJlcGxhY2UodyxcIiQxXCIpLnJlcGxhY2UoYixcIiBcIil9cmV0dXJuIEdlLnVzZT1mdW5jdGlvbiBlKHQpe3N3aXRjaCh0KXtjYXNlIHZvaWQgMDpjYXNlIG51bGw6T2U9U2UubGVuZ3RoPTA7YnJlYWs7ZGVmYXVsdDppZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KVNlW09lKytdPXQ7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgdClmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjsrK24pZSh0W25dKTtlbHNlIEllPTB8ISF0fXJldHVybiBlfSxHZS5zZXQ9emUsdm9pZCAwIT09dCYmemUodCksR2V9KG51bGwpfSwzNjE6ZT0+e2UuZXhwb3J0cz17YXJlYTohMCxiYXNlOiEwLGJyOiEwLGNvbDohMCxlbWJlZDohMCxocjohMCxpbWc6ITAsaW5wdXQ6ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9fX0sdD17fTtmdW5jdGlvbiBuKHIpe3ZhciBvPXRbcl07aWYodm9pZCAwIT09bylyZXR1cm4gby5leHBvcnRzO3ZhciBhPXRbcl09e2V4cG9ydHM6e319O3JldHVybiBlW3JdKGEsYS5leHBvcnRzLG4pLGEuZXhwb3J0c31uLm49ZT0+e3ZhciB0PWUmJmUuX19lc01vZHVsZT8oKT0+ZS5kZWZhdWx0OigpPT5lO3JldHVybiBuLmQodCx7YTp0fSksdH0sbi5kPShlLHQpPT57Zm9yKHZhciByIGluIHQpbi5vKHQscikmJiFuLm8oZSxyKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7ZW51bWVyYWJsZTohMCxnZXQ6dFtyXX0pfSxuLmc9ZnVuY3Rpb24oKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2goZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxuLm89KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpLG4ucj1lPT57XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sbi5uYz12b2lkIDA7dmFyIHI9e307KCgpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGUsdCxvLGEsaSxsLHMsYztuLnIociksbi5kKHIse0FwcE1hbmlmZXN0VHlwZTooKT0+cyxCb29rbWFya0l0ZW1Db250ZXh0TWVudU9wdGlvblR5cGU6KCk9Pm0sQnJvd3NlckJ1dHRvblR5cGU6KCk9PmIsQ29sb3JTY2hlbWVPcHRpb25UeXBlOigpPT5nLEN1c3RvbUFjdGlvbkNhbGxlclR5cGU6KCk9PmssRW50ZXJwcmlzZU1haW5Db250ZXh0TWVudU9wdGlvblR5cGU6KCk9PkMsR2xvYmFsQ29udGV4dE1lbnVPcHRpb25UeXBlOigpPT5oLFBhZ2VDaGFuZ2VFdmVudFR5cGU6KCk9PmYsUGFnZVRhYkNvbnRleHRNZW51T3B0aW9uVHlwZTooKT0+dixQYW5lbFBvc2l0aW9uOigpPT5wLFNVUFBPUlRFRF9MQU5HVUFHRVM6KCk9Pk0uU1VQUE9SVEVEX0xBTkdVQUdFUyxTYXZlQnV0dG9uQ29udGV4dE1lbnVPcHRpb25UeXBlOigpPT55LFNhdmVNb2RhbFR5cGU6KCk9PlMsVmlld1RhYk1lbnVPcHRpb25UeXBlOigpPT53LFdpbmRvd1R5cGU6KCk9PngsZ2V0Q3VycmVudFN5bmM6KCk9Pk90LGluaXQ6KCk9Pm9sLHdyYXBTeW5jOigpPT5TdH0pLGZ1bmN0aW9uKGUpe2UuRmV0Y2hpbmc9XCJmZXRjaGluZ1wiLGUuRmV0Y2hlZD1cImZldGNoZWRcIixlLkNvbXBsZXRlPVwiY29tcGxldGVcIn0oZXx8KGU9e30pKSxmdW5jdGlvbihlKXtlLlVzZXJBY3Rpb249XCJ1c2VyLWFjdGlvblwiLGUuRm9jdXNDaGFuZ2U9XCJmb2N1cy1jaGFuZ2VcIixlLlJlbG9hZD1cInJlbG9hZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKGUpe2UuQWN0aXZlPVwiYWN0aXZlXCIsZS5EZWZhdWx0PVwiZGVmYXVsdFwifShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe2UuU3VnZ2VzdGlvbj1cInN1Z2dlc3Rpb25cIn0oYXx8KGE9e30pKSxmdW5jdGlvbihlKXtlLkNvbnRhY3Q9XCJDb250YWN0XCIsZS5DdXN0b209XCJDdXN0b21cIixlLkxpc3Q9XCJMaXN0XCIsZS5QbGFpbj1cIlBsYWluXCIsZS5TaW1wbGVUZXh0PVwiU2ltcGxlVGV4dFwiLGUuTG9hZGluZz1cIkxvYWRpbmdcIixlLkVycm9yPVwiRXJyb3JcIn0oaXx8KGk9e30pKSxmdW5jdGlvbihlKXtlLk11bHRpU2VsZWN0PVwiTXVsdGlTZWxlY3RcIn0obHx8KGw9e30pKSxmdW5jdGlvbihlKXtlLlNuYXBzaG90PVwic25hcHNob3RcIixlLk1hbmlmZXN0PVwibWFuaWZlc3RcIixlLlZpZXc9XCJ2aWV3XCIsZS5FeHRlcm5hbD1cImV4dGVybmFsXCJ9KHN8fChzPXt9KSksZnVuY3Rpb24oZSl7ZS5MYW5kaW5nUGFnZT1cImxhbmRpbmdQYWdlXCIsZS5BcHBHcmlkPVwiYXBwR3JpZFwifShjfHwoYz17fSkpO3ZhciB1LGQscDshZnVuY3Rpb24oZSl7ZS5QcmltYXJ5PVwicHJpbWFyeVwiLGUuU2Vjb25kYXJ5PVwic2Vjb25kYXJ5XCIsZS5UZXh0T25seT1cInRleHRPbmx5XCJ9KHV8fCh1PXt9KSksZnVuY3Rpb24oZSl7ZS5BY3Rpb25CdXR0b249XCJBY3Rpb25CdXR0b25cIixlLkRyb3Bkb3duQnV0dG9uPVwiRHJvcGRvd25CdXR0b25cIn0oZHx8KGQ9e30pKSxmdW5jdGlvbihlKXtlLkxlZnQ9XCJMZWZ0XCIsZS5SaWdodD1cIlJpZ2h0XCIsZS5Ub3A9XCJUb3BcIixlLkJvdHRvbT1cIkJvdHRvbVwifShwfHwocD17fSkpO3ZhciBmLGgsZyx2LEMsbSx3LGIseSx4LGssUyxPLE09bigzMDQpOyFmdW5jdGlvbihlKXtlLlVybENoYW5nZT1cIlVSTF9DSEFOR0VcIixlLlZpZXdBZGRlZD1cIlZJRVdfQURERURcIixlLlZpZXdSZW1vdmVkPVwiVklFV19SRU1PVkVEXCIsZS5QYWdlQ29udGV4dEFkZGVkPVwiUEFHRV9DT05URVhUX0FEREVEXCIsZS5QYWdlQ29udGV4dFJlbW92ZWQ9XCJQQUdFX0NPTlRFWFRfUkVNT1ZFRFwifShmfHwoZj17fSkpLGZ1bmN0aW9uKGUpe2UuTmV3V2luZG93PVwiTmV3V2luZG93XCIsZS5OZXdQYWdlPVwiTmV3UGFnZVwiLGUuU2F2ZVBhZ2U9XCJTYXZlUGFnZVwiLGUuU2F2ZVBhZ2VBcz1cIlNhdmVQYWdlQXNcIixlLlByaW50PVwiUHJpbnRcIixlLlByaW50QWxsPVwiUHJpbnRBbGxcIixlLlByaW50U2NyZWVuPVwiUHJpbnRTY3JlZW5cIixlLkNsb3NlV2luZG93PVwiQ2xvc2VXaW5kb3dcIixlLlJlc3RvcmVDaGFuZ2VzPVwiUmVzdG9yZUNoYW5nZXNcIixlLlNhdmVXb3Jrc3BhY2U9XCJTYXZlV29ya3NwYWNlXCIsZS5TYXZlV29ya3NwYWNlQXM9XCJTYXZlV29ya3NwYWNlQXNcIixlLlJlbmFtZVdvcmtzcGFjZT1cIlJlbmFtZVdvcmtzcGFjZVwiLGUuU3dpdGNoV29ya3NwYWNlPVwiU3dpdGNoV29ya3NwYWNlXCIsZS5EZWxldGVXb3Jrc3BhY2U9XCJEZWxldGVXb3Jrc3BhY2VcIixlLkRvd25sb2Fkcz1cIkRvd25sb2Fkc1wiLGUuT3BlblN0b3JlZnJvbnQ9XCJPcGVuU3RvcmVmcm9udFwiLGUuQXBwZWFyYW5jZT1cIkFwcGVhcmFuY2VcIixlLlF1aXQ9XCJRdWl0XCIsZS5DdXN0b209XCJDdXN0b21cIn0oaHx8KGg9e30pKSxmdW5jdGlvbihlKXtlLkxpZ2h0PVwibGlnaHRcIixlLkRhcms9XCJkYXJrXCIsZS5TeXN0ZW09XCJzeXN0ZW1cIn0oZ3x8KGc9e30pKSxmdW5jdGlvbihlKXtlLkNsb3NlPVwiQ2xvc2VcIixlLkR1cGxpY2F0ZT1cIkR1cGxpY2F0ZVwiLGUuUmVuYW1lPVwiUmVuYW1lXCIsZS5TYXZlPVwiU2F2ZVwiLGUuU2F2ZUFzPVwiU2F2ZSBBc1wiLGUuTmV3UGFnZT1cIk5ldyBQYWdlXCIsZS5EZWxldGVQYWdlPVwiRGVsZXRlIFBhZ2VcIixlLlNhdmVXb3Jrc3BhY2VBcz1cIlNhdmVXb3Jrc3BhY2VBc1wiLGUuUmVmcmVzaD1cIlJlZnJlc2hcIixlLkNsb3NlT3RoZXJzPVwiQ2xvc2Ugb3RoZXJzXCIsZS5EZWxldGU9XCJEZWxldGVcIixlLkN1c3RvbT1cIkN1c3RvbVwifSh2fHwodj17fSkpLGZ1bmN0aW9uKGUpe2UuTG9jaz1cIkxvY2tcIixlLlNob3dIaWRlVGFicz1cIlNob3dIaWRlVGFic1wiLGUuQWRkVG9DaGFuZWw9XCJBZGRUb0NoYW5uZWxcIixlLlByaW50PVwiUHJpbnRcIixlLlBpbj1cIlBpblwifShDfHwoQz17fSkpLGZ1bmN0aW9uKGUpe2UuRWRpdE5hbWU9XCJFZGl0IE5hbWVcIixlLk1vdmU9XCJNb3ZlXCIsZS5EZWxldGU9XCJEZWxldGVcIn0obXx8KG09e30pKSxmdW5jdGlvbihlKXtlLk5ld1ZpZXc9XCJOZXdWaWV3XCIsZS5EdXBsaWNhdGVWaWV3cz1cIkR1cGxpY2F0ZVZpZXdcIixlLk9wZW5XaXRoRGVmYXVsdEJyb3dzZXI9XCJPcGVuV2l0aERlZmF1bHRCcm93c2VyXCIsZS5SZWxvYWRWaWV3cz1cIlJlbG9hZFRhYlwiLGUuQ2xvc2VWaWV3cz1cIkNsb3NlVGFiXCIsZS5BZGRUb0NoYW5uZWw9XCJBZGRUb0NoYW5uZWxcIixlLlJlbW92ZUZyb21DaGFubmVsPVwiUmVtb3ZlRnJvbUNoYW5uZWxcIixlLkJhY2s9XCJCYWNrXCIsZS5Gb3J3YXJkPVwiRm9yd2FyZFwiLGUuUHJpbnQ9XCJQcmludFwiLGUuUHJpbnRBbGw9XCJQcmludEFsbFwiLGUuUHJpbnRTY3JlZW49XCJQcmludFNjcmVlblwiLGUuQ3VzdG9tPVwiQ3VzdG9tXCJ9KHd8fCh3PXt9KSksZnVuY3Rpb24oZSl7ZS5TaG93SGlkZVRhYnM9XCJTaG93SGlkZVRhYnNcIixlLkNvbG9yTGlua2luZz1cIkNvbG9yTGlua2luZ1wiLGUuUHJlc2V0TGF5b3V0cz1cIlByZXNldExheW91dHNcIixlLkxvY2tVbmxvY2tQYWdlPVwiTG9ja1VubG9ja1BhZ2VcIixlLlNhdmVNZW51PVwiU2F2ZU1lbnVcIixlLlNhdmVQYWdlPVwiU2F2ZVBhZ2VcIixlLk1pbmltaXNlPVwiTWluaW1pc2VcIixlLk1heGltaXNlPVwiTWF4aW1pc2VcIixlLkNsb3NlPVwiQ2xvc2VcIixlLkN1c3RvbT1cIkN1c3RvbVwifShifHwoYj17fSkpLGZ1bmN0aW9uKGUpe2UuU2F2ZVBhZ2U9XCJTYXZlUGFnZVwiLGUuU2F2ZVdvcmtzcGFjZT1cIlNhdmVXb3Jrc3BhY2VcIixlLlNhdmVQYWdlQXM9XCJTYXZlUGFnZUFzXCIsZS5TYXZlV29ya3NwYWNlQXM9XCJTYXZlV29ya3NwYWNlQXNcIixlLkN1c3RvbT1cIkN1c3RvbVwifSh5fHwoeT17fSkpLGZ1bmN0aW9uKGUpe2UuQnJvd3Nlcj1cImJyb3dzZXJcIixlLlBsYXRmb3JtPVwicGxhdGZvcm1cIn0oeHx8KHg9e30pKSxmdW5jdGlvbihlKXtlLkN1c3RvbUJ1dHRvbj1cIkN1c3RvbUJ1dHRvblwiLGUuU3RvcmVDdXN0b21CdXR0b249XCJTdG9yZUN1c3RvbUJ1dHRvblwiLGUuQ3VzdG9tRHJvcGRvd25JdGVtPVwiQ3VzdG9tRHJvcGRvd25JdGVtXCIsZS5HbG9iYWxDb250ZXh0TWVudT1cIkdsb2JhbENvbnRleHRNZW51XCIsZS5WaWV3VGFiQ29udGV4dE1lbnU9XCJWaWV3VGFiQ29udGV4dE1lbnVcIixlLlBhZ2VUYWJDb250ZXh0TWVudT1cIlBhZ2VUYWJDb250ZXh0TWVudVwiLGUuU2F2ZUJ1dHRvbkNvbnRleHRNZW51PVwiU2F2ZUJ1dHRvbkNvbnRleHRNZW51XCIsZS5BUEk9XCJBUElcIn0oa3x8KGs9e30pKSxmdW5jdGlvbihlKXtlLlNBVkVfUEFHRT1cIlNBVkVfUEFHRVwiLGUuU0FWRV9XT1JLU1BBQ0U9XCJTQVZFX1dPUktTUEFDRVwiLGUuU0FWRV9QQUdFX0FTPVwiU0FWRV9QQUdFX0FTXCIsZS5TQVZFX1dPUktTUEFDRV9BUz1cIlNBVkVfV09SS1NQQUNFX0FTXCIsZS5SRU5BTUVfUEFHRT1cIlJFTkFNRV9QQUdFXCIsZS5SRU5BTUVfV09SS1NQQUNFPVwiUkVOQU1FX1dPUktTUEFDRVwifShTfHwoUz17fSkpLGZ1bmN0aW9uKGUpe2UuSG9tZT1cIi9ob21lL1wiLGUuSG9tZVNlYXJjaD1cIi9ob21lLz9kZWVwbGluaz1zZWFyY2hcIixlLkhvbWVQYWdlc1JlbmFtZT1cIi9ob21lL3BhZ2VzL3JlbmFtZS9cIixlLkRvY2s9XCIvZG9jay9cIixlLkJyb3dzZXI9XCIvYnJvd3Nlci9cIixlLkJyb3dzZXJQb3B1cE1lbnU9XCIvYnJvd3Nlci9wb3B1cC1tZW51L1wiLGUuUHJvdmlkZXI9XCIvcHJvdmlkZXIvXCIsZS5Ccm93c2VyUG9wdXBNZW51U2F2ZU1vZGFsPVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9zYXZlLW1vZGFsL1wiLGUuQnJvd3NlclBvcHVwTWVudUxheW91dHM9XCIvYnJvd3Nlci9wb3B1cC1tZW51L2xheW91dHMvbGF5b3V0cy9cIixlLkJyb3dzZXJQb3B1cE1lbnVDb2xvckxpbmtpbmc9XCIvYnJvd3Nlci9wb3B1cC1tZW51L2NvbG9yLWxpbmtpbmcvY29sb3ItbGlua2luZy9cIixlLkJyb3dzZXJJbmRpY2F0b3I9XCIvYnJvd3Nlci9pbmRpY2F0b3IvXCIsZS5Ccm93c2VyUG9wdXBNZW51QWRkcmVzc1NlYXJjaFJlc3VsdHNWaWV3PVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9hZGRyZXNzLXNlYXJjaC1yZXN1bHRzLXZpZXcvXCIsZS5SZXNwb25zZU1vZGFsPVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9yZXNwb25zZS1tb2RhbC9cIixlLkNsb3NlQ29uZmlybWF0aW9uTW9kYWw9XCIvYnJvd3Nlci9wb3B1cC1tZW51L2Nsb3NlLWNvbmZpcm1hdGlvbi1tb2RhbC9cIixlLkRvY3M9XCIvcHJvdmlkZXIvZG9jcy9cIixlLlN0b3JlZnJvbnQ9XCIvc3RvcmVmcm9udC9cIixlLkRlcHJlY2F0ZWRBbGVydD1cIi9wcm92aWRlci9kZXByZWNhdGVkLWFsZXJ0L1wiLGUuQW5hbHl0aWNzPVwiL3Byb3ZpZGVyL2FuYWx5dGljcy9cIixlLkVudGVycHJpc2VCcm93c2VyPVwiL2Jyb3dzZXIvZW50ZXJwcmlzZS9cIixlLkVudGVycHJpc2VDb250ZXh0TWVudT1cIi9icm93c2VyL2VudGVycHJpc2UvY29udGV4dC1tZW51L1wiLGUuRW50ZXJwcmlzZUJvb2ttYXJrRGlhbG9nPVwiL2Jyb3dzZXIvZW50ZXJwcmlzZS9ib29rbWFyay1kaWFsb2cvXCIsZS5Ecm9wZG93bk1lbnU9XCIvYnJvd3Nlci9lbnRlcnByaXNlL2Ryb3Bkb3duLW1lbnUvXCJ9KE98fChPPXt9KSk7dmFyIEw7IWZ1bmN0aW9uKGUpe2UuU2VhcmNoPVwic2VhcmNoXCJ9KEx8fChMPXt9KSk7Y29uc3QgXz1PO3ZhciBQOyFmdW5jdGlvbihlKXtlLkxvY2FsPVwibG9jYWxcIixlLkRldj1cImRldlwiLGUuU3RhZ2luZz1cInN0YWdpbmdcIixlLlByb2Q9XCJwcm9kXCJ9KFB8fChQPXt9KSk7Y29uc3QgRT1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZmluLGo9KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBwcm9jZXNzfHxwcm9jZXNzLmVudixcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KSxSPWomJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBpbmRleGVkREIsST1qP3dpbmRvdy5vcmlnaW46UC5Mb2NhbCxWPUUmJmZpbi5tZS51dWlkLEg9RSYmZmluLm1lLm5hbWUsQT1FJiZmaW4ubWUuZW50aXR5VHlwZSxUPShQLkxvY2FsLFAuRGV2LFAuU3RhZ2luZyxcInByb2RcIj09PVAuUHJvZCksRD1lPT5lLnN0YXJ0c1dpdGgoXCJodHRwOi8vXCIpfHxlLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKT9lOkkrZSxCPUQoXCJodHRwczovL3dvcmtzcGFjZS5vcGVuZmluLmNvL3dvcmtzcGFjZS8yMC4wLjVcIiksWj1EKFwiaHR0cHM6Ly93b3Jrc3BhY2Uub3BlbmZpbi5jby93b3Jrc3BhY2UvMjAuMC41XCIpLCQ9KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBXT1JLU1BBQ0VfRE9DU19QTEFURk9STV9VUkwmJkQoV09SS1NQQUNFX0RPQ1NfUExBVEZPUk1fVVJMKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgV09SS1NQQUNFX0RPQ1NfQ0xJRU5UX1VSTCYmRChXT1JLU1BBQ0VfRE9DU19DTElFTlRfVVJMKSxcIjQwLjEzMC4xMDAuN1wiKSxOPVwiMjAuMC41XCI7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFdPUktTUEFDRV9CVUlMRF9TSEEmJldPUktTUEFDRV9CVUlMRF9TSEE7dmFyIEYsVzshZnVuY3Rpb24oZSl7ZS5Xb3Jrc3BhY2U9XCJvcGVuZmluLXdvcmtzcGFjZVwiLGUuT2xkV29ya3NwYWNlPVwib3BlbmZpbi1icm93c2VyXCJ9KEZ8fChGPXt9KSksZnVuY3Rpb24oZSl7ZS5GaW5Qcm90b2NvbD1cImZpbi1wcm90b2NvbFwifShXfHwoVz17fSkpO2NvbnN0IFU9e3V1aWQ6Vn0sej0oRi5Xb3Jrc3BhY2UsZT0+e2lmKCFFKXRocm93IG5ldyBFcnJvcihcImdldEFwcGxpY2F0aW9uIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uIE9wZW5GaW4gZW52LiBBdm9pZCB1c2luZyB0aGlzIGR1cmluZyBwcmUtcmVuZGVyaW5nLlwiKTtyZXR1cm4gZmluLkFwcGxpY2F0aW9uLndyYXBTeW5jKGUpfSksRz0oKT0+eihVKTt2YXIgSzshZnVuY3Rpb24oZSl7ZS5Ib21lPVwib3BlbmZpbi1ob21lXCIsZS5Eb2NrPVwib3BlbmZpbi1kb2NrXCIsZS5TdG9yZWZyb250PVwib3BlbmZpbi1zdG9yZWZyb250XCIsZS5Ib21lSW50ZXJuYWw9XCJvcGVuZmluLWhvbWUtaW50ZXJuYWxcIixlLkJyb3dzZXJNZW51PVwib3BlbmZpbi1icm93c2VyLW1lbnVcIixlLkJyb3dzZXJTYXZlTWVudT1cIm9wZW5maW4tYnJvd3Nlci1zYXZlLW1lbnVcIixlLkJyb3dzZXJJbmRpY2F0b3I9XCJvcGVuZmluLWJyb3dzZXItaW5kaWNhdG9yXCIsZS5Ccm93c2VyV2luZG93PVwiaW50ZXJuYWwtZ2VuZXJhdGVkLXdpbmRvd1wiLGUuQ2xhc3NpY1dpbmRvdz1cImludGVybmFsLWdlbmVyYXRlZC1jbGFzc2ljLXdpbmRvd1wiLGUuRW50ZXJwcmlzZUNvbnRleHRNZW51PVwib3BlbmZpbi1lbnRlcnByaXNlLWNvbnRleHQtbWVudVwiLGUuQnJvd3NlckFkZHJlc3NTZWFyY2hQcmVmaXg9XCJvcGVuZmluLWJyb3dzZXItbWVudS1hZGRyZXNzLXNlYXJjaC1cIixlLkVudGVycHJpc2VCb29rbWFya0RpYWxvZ1dpbmRvdz1cIm9wZW5maW4tZW50ZXJwcmlzZS1ib29rbWFyay1kaWFsb2dcIixlLkRyb3Bkb3duTWVudT1cIm9wZW5maW4tZW50ZXJwcmlzZS1kcm9wZG93bi1tZW51XCJ9KEt8fChLPXt9KSk7ZnVuY3Rpb24gcShlKXtpZighRSl0aHJvdyBuZXcgRXJyb3IoXCJnZXRPRldpbmRvdyBjYW4gb25seSBiZSB1c2VkIGluIGFuIE9wZW5GaW4gZW52LiBBdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kIGR1cmluZyBwcmUtcmVuZGVyaW5nLlwiKTtyZXR1cm4gZmluLldpbmRvdy53cmFwU3luYyhlKX1jb25zdCBZPXtuYW1lOkgsdXVpZDpWfTtLLkhvbWUsRi5Xb3Jrc3BhY2UsSy5Eb2NrLEYuV29ya3NwYWNlO2NvbnN0IEo9e25hbWU6Sy5TdG9yZWZyb250LHV1aWQ6Ri5Xb3Jrc3BhY2V9O0YuV29ya3NwYWNlLEYuV29ya3NwYWNlO2FzeW5jIGZ1bmN0aW9uIFgoZSl7Y29uc3QgdD1xKGUpO1wibWluaW1pemVkXCI9PT1hd2FpdCB0LmdldFN0YXRlKCkmJmF3YWl0IHQucmVzdG9yZSgpLGF3YWl0IHQuc2hvdygpLGF3YWl0IHQuc2V0QXNGb3JlZ3JvdW5kKCl9Y29uc3QgUT1hc3luYyBlPT57dHJ5e2NvbnN0IHQ9YXdhaXQgZmluLldpbmRvdy53cmFwU3luYyh7bmFtZTplLm5hbWUsdXVpZDplLnV1aWQ/P2Zpbi5tZS51dWlkfSkuZ2V0T3B0aW9ucygpO3JldHVybihcImJyb3dzZXJcIj09PXQud29ya3NwYWNlUGxhdGZvcm0/LndpbmRvd1R5cGV8fFwiZW50ZXJwcmlzZVwiPT09dC53b3Jrc3BhY2VQbGF0Zm9ybT8ud2luZG93VHlwZSkmJnQud29ya3NwYWNlUGxhdGZvcm0/LnBhZ2VzfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLndhcm4oXCJpc0Jyb3dzZXJXaW5kb3cgZXJyb3I6IFwiLGUpLCExfX07YXN5bmMgZnVuY3Rpb24gZWUoKXtjb25zdCBlPWF3YWl0IGZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpLmdldENoaWxkV2luZG93cygpLHQ9YXdhaXQgUHJvbWlzZS5hbGwoZS5tYXAoKGFzeW5jIGU9PlEoZS5pZGVudGl0eSkpKSk7cmV0dXJuIGUuZmlsdGVyKCgoZSxuKT0+dFtuXSkpfWFzeW5jIGZ1bmN0aW9uIHRlKCl7cmV0dXJuKGF3YWl0IGZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpLmdldENoaWxkV2luZG93cygpKS5maWx0ZXIoKGU9PmUuaWRlbnRpdHkubmFtZS5zdGFydHNXaXRoKEsuQnJvd3Nlck1lbnUpKSl9Y29uc3QgbmU9ZT0+cShlKS5nZXRPcHRpb25zKCkudGhlbigoKCk9PiEwKSkuY2F0Y2goKCgpPT4hMSkpLHJlPSgpPT5uZShKKSxvZT1lPT5gJHtlLnRvcH0sJHtlLmxlZnR9LCR7ZS5oZWlnaHR9LCR7ZS53aWR0aH0sJHtlLmJvdHRvbX0sJHtlLnJpZ2h0fWA7ZnVuY3Rpb24gYWUoZSx0KXtjb25zdCBuPWUudG9wLHI9ZS5sZWZ0LG89ZS50b3ArZS5oZWlnaHQsYT1lLmxlZnQrZS53aWR0aCxpPXQubW9uaXRvclJlY3QudG9wLGw9dC5tb25pdG9yUmVjdC5sZWZ0LHM9dC5tb25pdG9yUmVjdC5ib3R0b20sYz10Lm1vbml0b3JSZWN0LnJpZ2h0O2lmKG4+c3x8bzxpfHxyPmN8fGE8bClyZXR1cm4gMDtjb25zdCB1PU1hdGgubWF4KG4saSksZD1NYXRoLm1heChyLGwpO3JldHVybihNYXRoLm1pbihvLHMpLXUpKihNYXRoLm1pbihhLGMpLWQpLyhlLmhlaWdodCplLndpZHRoKX1hc3luYyBmdW5jdGlvbiBpZShlKXtjb25zdCB0PWF3YWl0IGZpbi5TeXN0ZW0uZ2V0TW9uaXRvckluZm8oKTtyZXR1cm5bdC5wcmltYXJ5TW9uaXRvciwuLi50Lm5vblByaW1hcnlNb25pdG9yc10ucmVkdWNlKCgodCxuKT0+e2NvbnN0IHI9YWUoZSxuKTtyZXR1cm4gcj50LnBlcmNlbnRhZ2U/e3BlcmNlbnRhZ2U6cixtb25pdG9yOm59OnR9KSx7cGVyY2VudGFnZTowLG1vbml0b3I6dC5wcmltYXJ5TW9uaXRvcn0pLm1vbml0b3J9Y29uc3QgbGU9YXN5bmMgZT0+e2NvbnN0IHQ9ZT9maW4uV2luZG93LndyYXBTeW5jKGUpOmZpbi5XaW5kb3cuZ2V0Q3VycmVudFN5bmMoKSxuPWF3YWl0IHQuZ2V0T3B0aW9ucygpO3JldHVybiBuLndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlJiZcImVudGVycHJpc2VcIj09PW4ud29ya3NwYWNlUGxhdGZvcm0ud2luZG93VHlwZX0sc2U9ZT0+e2NvbnN0IHQ9ZT8uZGVmYXVsdFdpbmRvd09wdGlvbnM/LndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlO3JldHVyblwiZW50ZXJwcmlzZVwiPT09dH07dmFyIGNlOyFmdW5jdGlvbihlKXtlLkJyb3dzZXI9XCJCcm93c2VyXCIsZS5Eb2NrPVwiRG9ja1wiLGUuSG9tZT1cIkhvbWVcIixlLk5vdGlmaWNhdGlvbj1cIk5vdGlmaWNhdGlvblwiLGUuU3RvcmVmcm9udD1cIlN0b3JlZnJvbnRcIixlLlBsYXRmb3JtPVwiUGxhdGZvcm1cIixlLlRoZW1pbmc9XCJUaGVtaW5nXCIsZS5NaWNyb2Zsb3c9XCJNaWNyb2Zsb3dcIn0oY2V8fChjZT17fSkpO2NvbnN0IHVlPWFzeW5jKGUsdCxuPVwid29ya3NwYWNlLWxpY2Vuc2luZ1wiKT0+e2NvbnN0IHI9e2FwaVZlcnNpb246dC5hcGlWZXJzaW9ufHxOLGNvbXBvbmVudE5hbWU6ZSxjb21wb25lbnRWZXJzaW9uOnQuY29tcG9uZW50VmVyc2lvbnx8TixhbGxvd2VkOnQuYWxsb3dlZCxyZWplY3Rpb25Db2RlOnQucmVqZWN0aW9uQ29kZX07ZmluLlN5c3RlbS5yZWdpc3RlclVzYWdlKHt0eXBlOm4sZGF0YTpyfSl9O2xldCBkZT0hMTtjb25zdCBwZT1uZXcgTWFwLGZlPWU9PntsZXQgdD1wZS5nZXQoZS51dWlkKTtyZXR1cm4gdHx8KHQ9U3QoZSksdC5vbmNlKFwiY2xvc2VkXCIsKCgpPT57cGUuZGVsZXRlKGUudXVpZCl9KSkscGUuc2V0KGUudXVpZCx0KSksdH0saGU9YXN5bmMoZSx0KT0+e3RyeXthd2FpdCBlLl9yYWlzZUFuYWx5dGljcyhbdF0pfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gcmFpc2UgYW5hbHl0aWNzIGV2ZW50XCIsZSl9fSxnZT1hc3luYyBlPT57YXdhaXQgaGUoZmUoZmluLm1lLmlkZW50aXR5KSx7c291cmNlOlwiQnJvd3NlclwiLC4uLmV9KX07dmFyIHZlPW4oMzc4KTtjb25zdCBDZT1lPT5maW4uU3lzdGVtLmdldFN5c3RlbUFwcENvbmZpZyhlKTtsZXQgbWU7YXN5bmMgZnVuY3Rpb24gd2UoKXtpZihtZSlyZXR1cm4gbWU7Y29uc3QgZT1cImdldE92ZXJyaWRlc1wiO2lmKCFFKXJldHVybiBqJiZjb25zb2xlLndhcm4oYCR7ZX06IFRoZSBGaW4gQVBJIHdhcyBub3QgYXZhaWxhYmxlLiBSZXR1cm5pbmcgYW4gZW1wdHkgcmVzdWx0LmApLHt9O2NvbnN0IHQ9YXdhaXQgYXN5bmMgZnVuY3Rpb24oKXtjb25zdCBlPVwiZ2V0RE9TT3ZlcnJpZGVzXCI7aWYoIUUpcmV0dXJuIGNvbnNvbGUud2FybihgJHtlfTogdGhlIGZpbiBBUEkgd2FzIG5vdCBhdmFpbGFibGUsIHJldHVybmluZyBubyByZXN1bHRgKSx7fTt0cnl7bGV0IHQ9YXdhaXQgQ2UoXCJ3b3Jrc3BhY2VcIikuY2F0Y2goKHQ9Pntjb25zb2xlLndhcm4oYCR7ZX06IGN1c3RvbUNvbmZpZyBlbnRyeSBmb3IgU3lzdGVtQXBwIHdvcmtzcGFjZSBub3QgYXZhaWxhYmxlIGluIERlc2t0b3AgT3duZXIgU2V0dGluZ3MuICR7dD8ubWVzc2FnZX1gKX0pKTtyZXR1cm4gdHx8KHQ9YXdhaXQgQ2UoXCJob21lXCIpKSxKU09OLnN0cmluZ2lmeSh0KSx0fWNhdGNoKHQpe2lmKCFUKXJldHVybnt9O2lmKCEodCBpbnN0YW5jZW9mIEVycm9yKSl0aHJvdyB0O2NvbnNvbGUud2FybihgJHtlfTogTWlzc2luZyBXb3Jrc3BhY2UgRGVza3RvcCBPd25lciBTZXR0aW5ncyBjb25maWd1cmF0aW9uLCB1c2luZyBkZWZhdWx0cy4gJHt0Py5tZXNzYWdlfWApfXJldHVybnt9fSgpLG49YXdhaXQgYXN5bmMgZnVuY3Rpb24oKXtjb25zdCBlPVwiZ2V0TWFuaWZlc3RPdmVycmlkZXNcIix7bWFuaWZlc3Q6dCxpbml0aWFsT3B0aW9uczpufT1hd2FpdCBmaW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudFN5bmMoKS5nZXRJbmZvKCk7cmV0dXJuIHQ/LnBsYXRmb3JtLndvcmtzcGFjZXx8dD8ucGxhdGZvcm0uaG9tZXx8bj8ud29ya3NwYWNlfHxuPy5ob21lfHxjb25zb2xlLndhcm4oYCR7ZX06IE1pc3NpbmcgSG9tZSBkZXZlbG9wbWVudCBtYW5pZmVzdCBvdmVycmlkZXMsIHVzaW5nIERlc2t0b3AgT3duZXIgU2V0dGluZ3MuYCksdD8ucGxhdGZvcm0ud29ya3NwYWNlPyhKU09OLnN0cmluZ2lmeSh0Py5wbGF0Zm9ybS53b3Jrc3BhY2UpLHQ/LnBsYXRmb3JtLndvcmtzcGFjZSk6dD8ucGxhdGZvcm0uaG9tZT8oSlNPTi5zdHJpbmdpZnkodD8ucGxhdGZvcm0uaG9tZSksdD8ucGxhdGZvcm0uaG9tZSk6bj8ud29ya3NwYWNlPyhKU09OLnN0cmluZ2lmeShuPy53b3Jrc3BhY2UpLG4/LndvcmtzcGFjZSk6bj8uaG9tZT8oSlNPTi5zdHJpbmdpZnkobj8uaG9tZSksbj8uaG9tZSk6e319KCk7cmV0dXJuIG1lPXsuLi5uLC4uLnR9LG1lfWxldCBiZTtjb25zdCB5ZT1hc3luYyBlPT57YmV8fChiZT1uZXcgVGV4dEVuY29kZXIpO2NvbnN0IHQ9YmUuZW5jb2RlKGUpLG49YXdhaXQgd2luZG93LmNyeXB0by5zdWJ0bGUuZGlnZXN0KFwiU0hBLTI1NlwiLHQpO3JldHVybiBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KG4pKS5tYXAoKGU9PmUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsXCIwXCIpKSkuam9pbihcIlwiKX07ZnVuY3Rpb24geGUoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiYhQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBrZShlLC4uLnQpe2lmKCF0Lmxlbmd0aClyZXR1cm4gZTtjb25zdCBuPXQuc2hpZnQoKTtyZXR1cm4geGUoZSkmJnhlKG4pJiZPYmplY3QuZW50cmllcyhuKS5mb3JFYWNoKCgoW3Qsbl0pPT57aWYoeGUobikpcmV0dXJuIGVbdF18fChlW3RdPXt9KSxrZShlW3RdLG4pO2VbdF09bn0pKSxrZShlLC4uLnQpfXZhciBTZSxPZT1uKDE5OCksTWU9bi5uKE9lKTshZnVuY3Rpb24oZSl7ZS5DdXJyZW50V29ya3NwYWNlSWQ9XCJjdXJyZW50V29ya3NwYWNlSWRcIixlLkxhc3RGb2N1c2VkQnJvd3NlcldpbmRvdz1cImxhc3RGb2N1c2VkQnJvd3NlcldpbmRvd1wiLGUuTWFjaGluZU5hbWU9XCJtYWNoaW5lTmFtZVwiLGUuTmV3VGFiUGFnZUxheW91dD1cIk5ld1RhYlBhZ2VMYXlvdXRcIixlLk5ld1RhYlBhZ2VTb3J0PVwiTmV3VGFiUGFnZVNvcnRcIixlLkRvY2tQb3NpdGlvbj1cIkRvY2tQb3NpdGlvblwiLGUuU2VsZWN0ZWRDb2xvclNjaGVtZT1cIlNlbGVjdGVkQ29sb3JTY2hlbWVcIixlLkhhc01vdmVkU3RvcmU9XCJIYXNNb3ZlZFN0b3JlXCIsZS5QYWdlRHJhZ1N0YXRlPVwiQnJvd3NlclBhZ2VEcmFnU3RhdGVcIn0oU2V8fChTZT17fSkpO2NvbnN0IExlPVNlO2Z1bmN0aW9uIF9lKCl7cmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKExlLk1hY2hpbmVOYW1lKT8/XCJ1bmtub3duXCJ9bGV0IFBlO2FzeW5jIGZ1bmN0aW9uIEVlKCl7cmV0dXJuIFBlfHwoUGU9YXdhaXQgZmluLlN5c3RlbS5nZXRNYWNoaW5lSWQoKSksUGV9Y29uc3QgamU9ZT0+e2lmKEFycmF5LmlzQXJyYXkoZS53b3Jrc3BhY2VQbGF0Zm9ybT8ucGFnZXMpJiYoZS5sYXlvdXRTbmFwc2hvdHx8ZS5sYXlvdXQpKXtjb25zdCB0PWUud29ya3NwYWNlUGxhdGZvcm0ucGFnZXMuZmluZCgoZT0+ZS5pc0FjdGl2ZSkpO2lmKHQpe2NvbnN0IG49ZS5sYXlvdXRTbmFwc2hvdD9lLmxheW91dFNuYXBzaG90LmxheW91dHNbdC5sYXlvdXRDb250YWluZXJLZXldOmUubGF5b3V0O2lmKG4paWYodC5pc0xvY2tlZCl7Y29uc3Qgcj1IdChuLHQubGF5b3V0KTt0LmxheW91dD1yLGUubGF5b3V0PXJ9ZWxzZSB0LmxheW91dD1uLGUubGF5b3V0PW59fXJldHVybiBlfTthc3luYyBmdW5jdGlvbiBSZShlKXtjb25zdCB0PWV8fGF3YWl0IGZpbi5QbGF0Zm9ybS5nZXRDdXJyZW50U3luYygpLmdldFNuYXBzaG90KCk7aWYodC5zbmFwc2hvdERldGFpbHM/Lm1hY2hpbmVJZClyZXR1cm4gdDtjb25zdCBuPV9lKCk7cmV0dXJuey4uLnQsc25hcHNob3REZXRhaWxzOnsuLi50LnNuYXBzaG90RGV0YWlscyxtYWNoaW5lSWQ6YXdhaXQgRWUoKSxtYWNoaW5lTmFtZTpufX19ZnVuY3Rpb24gSWUoKXtyZXR1cm4gdm9pZCAwIT09dHlwZW9mIGNyeXB0byYmXCJyYW5kb21VVUlEXCJpbiBjcnlwdG8mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGNyeXB0by5yYW5kb21VVUlEP2NyeXB0by5yYW5kb21VVUlEKCk6XCIxMDAwMDAwMC0xMDAwLTQwMDAtODAwMC0xMDAwMDAwMDAwMDBcIi5yZXBsYWNlKC9bMDE4XS9nLChlPT4oZV5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSYxNT4+ZS80KS50b1N0cmluZygxNikpKX1jb25zdCBWZT1qJiZcImNvbXBsZXRlXCIhPT1kb2N1bWVudC5yZWFkeVN0YXRlJiZuZXcgUHJvbWlzZSgoZT0+ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInJlYWR5c3RhdGVjaGFuZ2VcIiwoKCk9PntcImNvbXBsZXRlXCI9PT1kb2N1bWVudC5yZWFkeVN0YXRlJiZlKCl9KSkpKTtmdW5jdGlvbiBIZShlKXtsZXQgdDtjb25zdCBuPW5ldyBTZXQ7cmV0dXJuKCk9PntpZighRSl0aHJvdyBuZXcgRXJyb3IoXCJnZXRDaGFubmVsQ2xpZW50IGNhbm5vdCBiZSB1c2VkIG91dHNpZGUgYW4gT3BlbkZpbiBlbnYuIEF2b2lkIHVzaW5nIHRoaXMgbWV0aG9kIGR1cmluZyBwcmUtcmVuZGVyaW5nLlwiKTtyZXR1cm4gdHx8KHQ9KGFzeW5jKCk9Pnthd2FpdCBWZTtjb25zdCByPXtjbGllbnRBUElWZXJzaW9uOk59LG89YXdhaXQgZmluLkludGVyQXBwbGljYXRpb25CdXMuQ2hhbm5lbC5jb25uZWN0KGUse3BheWxvYWQ6cn0pO3JldHVybiBvLm9uRGlzY29ubmVjdGlvbigoYXN5bmMoKT0+e24uZm9yRWFjaCgoZT0+ZSgpKSksbi5jbGVhcigpLGNvbnNvbGUud2FybihgZGlzY29ubmVjdGVkIGZyb20gY2hhbm5lbCBwcm92aWRlciAke2V9YCksdD12b2lkIDB9KSksb30pKCkudGhlbigoZT0+KGUuYWRkRGlzY29ubmVjdGlvbkxpc3RlbmVyPWU9PntuLmFkZChlKX0sZSkpKS5jYXRjaCgobj0+e3Rocm93IHQ9dm9pZCAwLG5ldyBFcnJvcihgZmFpbGVkIHRvIGNvbm5lY3QgdG8gY2hhbm5lbCBwcm92aWRlciAke2V9OiAke259YCl9KSkpLHR9fXZhciBBZSxUZTshZnVuY3Rpb24oZSl7ZS5GZXRjaGluZz1cImZldGNoaW5nXCIsZS5GZXRjaGVkPVwiZmV0Y2hlZFwiLGUuQ29tcGxldGU9XCJjb21wbGV0ZVwifShBZXx8KEFlPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkluaXRpYWw9MF09XCJJbml0aWFsXCIsZVtlLk9wZW49MV09XCJPcGVuXCIsZVtlLkNsb3NlPTJdPVwiQ2xvc2VcIn0oVGV8fChUZT17fSkpO2NvbnN0IERlPUhlKFwiX19vZl93b3Jrc3BhY2VfcHJvdG9jb2xfX1wiKSxCZT1EZTtIZShcIl9fc2VhcmNoLW9wZW5maW4tYnJvd3Nlci1ob21lLXRvcGljX19cIik7Y29uc3QgWmU9YXN5bmMgZT0+KHsuLi5lLGxheW91dERldGFpbHM6e21hY2hpbmVJZDphd2FpdCBFZSgpLG1hY2hpbmVOYW1lOl9lKCl9fSksJGU9YXN5bmMoZSx0KT0+KHtwYWdlSWQ6SWUoKSx0aXRsZTplLGxheW91dDphd2FpdCBaZSh0KSxpc1JlYWRPbmx5OiExfSksTmU9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgJGUoZS50aXRsZSxSdChlLmxheW91dCkpO3JldHVybiBlLnBhbmVscyYmKHQucGFuZWxzPWUucGFuZWxzLm1hcCgoZT0+KHsuLi5lLHZpZXdPcHRpb25zOmp0KGUudmlld09wdGlvbnMpfSkpKSksey4uLmUsLi4udH19LEZlPWU9Pntjb25zdCB0PWZpbi5QbGF0Zm9ybS5MYXlvdXQud3JhcFN5bmMoZSk7cmV0dXJue3Nob3c6YXN5bmMoKT0+e2NvbnN0IG49YXdhaXQgdC5nZXRDb25maWcoKSx7c2V0dGluZ3M6cixkaW1lbnNpb25zOm99PW4sYT1hd2FpdCBsZShlKTthd2FpdCB0LnJlcGxhY2Uoey4uLm4sc2V0dGluZ3M6ey4uLnIsaGFzSGVhZGVyczohMCxyZW9yZGVyRW5hYmxlZDohMH0sZGltZW5zaW9uczp7Li4ubyxoZWFkZXJIZWlnaHQ6YT8yODozMH19KX0saGlkZTphc3luYyBlPT57Y29uc3Qgbj1hd2FpdCB0LmdldENvbmZpZygpLHtzZXR0aW5nczpyLGRpbWVuc2lvbnM6b309YXdhaXQgbjthd2FpdCB0LnJlcGxhY2Uoey4uLm4sc2V0dGluZ3M6ey4uLnIsaGFzSGVhZGVyczohMSxyZW9yZGVyRW5hYmxlZDplPy5zZXR0aW5ncz8ucmVvcmRlckVuYWJsZWQ/PyExfSxkaW1lbnNpb25zOnsuLi5vLGhlYWRlckhlaWdodDowfX0pfSxpc1Nob3dpbmdUYWJzOmFzeW5jKCk9Pnt0cnl7Y29uc3QgZT1hd2FpdCB0LmdldENvbmZpZygpLHtzZXR0aW5nczpufT1hd2FpdCBlO3JldHVybiBuLmhhc0hlYWRlcnN9Y2F0Y2goZSl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gZ2V0IGxheW91dCBjb25maWc6IFwiLGUpLCEwfX19fTt2YXIgV2U7IWZ1bmN0aW9uKGUpe2UuTGF1bmNoQXBwPVwibGF1bmNoQXBwXCIsZS5TYXZlUGFnZT1cInNhdmVQYWdlXCIsZS5HZXRTYXZlZFBhZ2U9XCJnZXRTYXZlZFBhZ2VcIixlLkNyZWF0ZVNhdmVkUGFnZT1cImNyZWF0ZVNhdmVkUGFnZVwiLGUuVXBkYXRlU2F2ZWRQYWdlPVwidXBkYXRlU2F2ZWRQYWdlXCIsZS5EZWxldGVTYXZlZFBhZ2U9XCJkZWxldGVTYXZlZFBhZ2VcIixlLkdldFNhdmVkUGFnZXM9XCJnZXRTYXZlZFBhZ2VzXCIsZS5DcmVhdGVTYXZlZFBhZ2VJbnRlcm5hbD1cImNyZWF0ZVNhdmVkUGFnZUludGVybmFsXCIsZS5VcGRhdGVTYXZlZFBhZ2VJbnRlcm5hbD1cInVwZGF0ZVNhdmVkUGFnZUludGVybmFsXCIsZS5EZWxldGVTYXZlZFBhZ2VJbnRlcm5hbD1cImRlbGV0ZVNhdmVkUGFnZUludGVybmFsXCIsZS5VcGRhdGVQYWdlRm9yV2luZG93PVwidXBkYXRlUGFnZUZvcldpbmRvd1wiLGUuQXR0YWNoUGFnZXNUb1dpbmRvdz1cImF0dGFjaFBhZ2VzVG9XaW5kb3dcIixlLkRldGFjaFBhZ2VzRnJvbVdpbmRvdz1cImRldGFjaFBhZ2VzRnJvbVdpbmRvd1wiLGUuUmVvcmRlclBhZ2VzRm9yV2luZG93PVwicmVvcmRlclBhZ2VzRm9yV2luZG93XCIsZS5TZXRBY3RpdmVQYWdlPVwic2V0QWN0aXZlUGFnZVwiLGUuQWRkUGFnZT1cImFkZFBhZ2VcIixlLkFkZERlZmF1bHRQYWdlPVwiYWRkRGVmYXVsdFBhZ2VcIixlLkdldEFsbEF0dGFjaGVkUGFnZXM9XCJnZXRBbGxBdHRhY2hlZFBhZ2VzXCIsZS5HZXRBY3RpdmVQYWdlSWRGb3JXaW5kb3c9XCJnZXRBY3RpdmVQYWdlSWRGb3JXaW5kb3dcIixlLkdldFBhZ2VzRm9yV2luZG93PVwiZ2V0UGFnZXNGb3JXaW5kb3dcIixlLkdldFBhZ2VGb3JXaW5kb3c9XCJnZXRQYWdlRm9yV2luZG93XCIsZS5HZXRTYXZlZFBhZ2VNZXRhZGF0YT1cImdldFNhdmVkUGFnZU1ldGFkYXRhXCIsZS5HZXRVbmlxdWVQYWdlVGl0bGU9XCJnZXRVbmlxdWVQYWdlVGl0bGVcIixlLkdldExhc3RGb2N1c2VkQnJvd3NlcldpbmRvdz1cImdldExhc3RGb2N1c2VkQnJvd3NlcldpbmRvd1wiLGUuR2V0VGhlbWVzPVwiZ2V0VGhlbWVzXCIsZS5HZXRTZWxlY3RlZFNjaGVtZT1cImdldFNlbGVjdGVkU2NoZW1lXCIsZS5TZXRTZWxlY3RlZFNjaGVtZT1cInNldFNlbGVjdGVkU2NoZW1lXCIsZS5PcGVuR2xvYmFsQ29udGV4dE1lbnVJbnRlcm5hbD1cIm9wZW5HbG9iYWxDb250ZXh0TWVudUludGVybmFsXCIsZS5PcGVuVmlld1RhYkNvbnRleHRNZW51SW50ZXJuYWw9XCJvcGVuVmlld1RhYkNvbnRleHRNZW51SW50ZXJuYWxcIixlLk9wZW5QYWdlVGFiQ29udGV4dE1lbnVJbnRlcm5hbD1cIm9wZW5QYWdlVGFiQ29udGV4dE1lbnVJbnRlcm5hbFwiLGUuT3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsPVwib3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsXCIsZS5JbnZva2VDdXN0b21BY3Rpb25JbnRlcm5hbD1cImludm9rZUN1c3RvbUFjdGlvbkludGVybmFsXCIsZS5SZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nSW50ZXJuYWw9XCJyZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nSW50ZXJuYWxcIixlLkdldFNhdmVkV29ya3NwYWNlPVwiZ2V0U2F2ZWRXb3Jrc3BhY2VcIixlLkNyZWF0ZVNhdmVkV29ya3NwYWNlPVwiY3JlYXRlU2F2ZWRXb3Jrc3BhY2VcIixlLlVwZGF0ZVNhdmVkV29ya3NwYWNlPVwidXBkYXRlU2F2ZWRXb3Jrc3BhY2VcIixlLkRlbGV0ZVNhdmVkV29ya3NwYWNlPVwiZGVsZXRlU2F2ZWRXb3Jrc3BhY2VcIixlLkdldFNhdmVkV29ya3NwYWNlcz1cImdldFNhdmVkV29ya3NwYWNlc1wiLGUuU2F2ZVdvcmtzcGFjZT1cInNhdmVXb3Jrc3BhY2VcIixlLkdldEN1cnJlbnRXb3Jrc3BhY2U9XCJnZXRDdXJyZW50V29ya3NwYWNlXCIsZS5BcHBseVdvcmtzcGFjZT1cImFwcGx5V29ya3NwYWNlXCIsZS5TZXRBY3RpdmVXb3Jrc3BhY2U9XCJzZXRBY3RpdmVXb3Jrc3BhY2VcIixlLklzQnJvd3NlckluaXRpYWxpemVkPVwiaXNCcm93c2VySW5pdGlhbGl6ZWRcIixlLkFuYWx5dGljcz1cImFuYWx5dGljc0ludGVybmFsXCIsZS5HZXRMYW5ndWFnZT1cImdldExhbmd1YWdlXCIsZS5HZXRMYW5ndWFnZVJlc291cmNlc0ludGVybmFsPVwiZ2V0TGFuZ3VhZ2VSZXNvdXJjZXNJbnRlcm5hbFwiLGUuU2V0TGFuZ3VhZ2U9XCJzZXRMYW5ndWFnZVwiLGUuR2V0RG9ja1Byb3ZpZGVyQ29uZmlnPVwiZ2V0RG9ja1Byb3ZpZGVyQ29uZmlnXCIsZS5TYXZlRG9ja1Byb3ZpZGVyQ29uZmlnPVwic2F2ZURvY2tQcm92aWRlckNvbmZpZ1wiLGUuSGFuZGxlU2F2ZU1vZGFsT25QYWdlQ2xvc2U9XCJoYW5kbGVTYXZlTW9kYWxPblBhZ2VDbG9zZVwiLGUuU2hvdWxkUGFnZUNsb3NlPVwic2hvdWxkUGFnZUNsb3NlXCIsZS5TaG91bGRXaW5kb3dDbG9zZT1cInNob3VsZFdpbmRvd0Nsb3NlXCIsZS5Db3B5UGFnZT1cImNvcHlQYWdlXCIsZS5IYW5kbGVQYWdlQ2hhbmdlcz1cImhhbmRsZVBhZ2VDaGFuZ2VzXCIsZS5NYXJrVW5zYXZlZFBhZ2VzQXNTYXZlZEludGVybmFsPVwibWFya1Vuc2F2ZWRQYWdlc0FzU2F2ZWRJbnRlcm5hbFwiLGUuVHJhY2tSZW1vdmVkVGFiSW50ZXJuYWw9XCJ0cmFja1JlbW92ZWRUYWJJbnRlcm5hbFwiLGUuUmVzdG9yZVJlbW92ZWRUYWJJbnRlcm5hbD1cInJlc3RvcmVSZW1vdmVkVGFiSW50ZXJuYWxcIixlLlRyYWNrVmlzaXRlZFNpdGVJbnRlcm5hbD1cInRyYWNrVmlzaXRlZFNpdGVJbnRlcm5hbFwiLGUuR2V0UmVjZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbD1cImdldFJlY2VudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWxcIixlLkdldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbD1cImdldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbFwiLGUuU2VhcmNoU2l0ZXNJbnRlcm5hbD1cInNlYXJjaFNpdGVzSW50ZXJuYWxcIixlLkdldEN1cmF0ZWRDb250ZW50SW50ZXJuYWw9XCJnZXRDdXJhdGVkQ29udGVudEludGVybmFsXCIsZS5IYW5kbGVSZXF1ZXN0TmF2aWdhdGlvbkludGVybmFsPVwiaGFuZGxlUmVxdWVzdE5hdmlnYXRpb25JbnRlcm5hbFwiLGUuUmVmcmVzaEJvb2ttYXJrc0ludGVybmFsPVwicmVmcmVzaEJvb2ttYXJrc0ludGVybmFsXCIsZS5HZXROb3RpZmljYXRpb25zQ29uZmlnPVwiZ2V0Tm90aWZpY2F0aW9uc0NvbmZpZ1wifShXZXx8KFdlPXt9KSk7Y29uc3QgVWU9YXN5bmMgZT0+ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmdldENsaWVudCgpLHplPWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IFVlKGUpLG49XCJUYXJnZXQgaXMgbm90IGEgV29ya3NwYWNlIFBsYXRmb3JtLiBUYXJnZXQgbXVzdCBjYWxsIFdvcmtzcGFjZVBsYXRmb3JtLmluaXRcIjtsZXQgcjt0cnl7cj1hd2FpdCB0LmRpc3BhdGNoKFwiaXNXb3Jrc3BhY2VQbGF0Zm9ybVwiKX1jYXRjaChlKXt0aHJvdyBuZXcgRXJyb3Iobil9aWYoXCJib29sZWFuXCI9PXR5cGVvZiByJiZyKXJldHVybiBjb25zb2xlLndhcm4oXCJZb3UgYXJlIHVzaW5nIGFuIG9sZGVyIHZlcnNpb24gb2YgdGhlIHdvcmtzcGFjZSBwbGF0Zm9ybS4gUGxlYXNlIHVwZGF0ZSB5b3VyIHdvcmtzcGFjZSBwbGF0Zm9ybS5cIikscjtpZihcIm9iamVjdFwiPT10eXBlb2YgciYmci5pc1dvcmtzcGFjZVBsYXRmb3JtKXJldHVybiByO3Rocm93IG5ldyBFcnJvcihuKX0sR2U9YXN5bmMgZT0+KGF3YWl0IHplKGUpLFVlKGUpKSxLZT1hc3luYyBlPT57Y29uc3QgdD1hd2FpdCB6ZShlKTtpZihcIm9iamVjdFwiPT10eXBlb2YgdCYmITAhPT10Py5pc0Jyb3dzZXJJbml0aWFsaXplZCl0aHJvdyBuZXcgRXJyb3IoXCJUYXJnZXQgaXMgbm90IGEgQnJvd3Nlci1lbmFibGVkIFdvcmtzcGFjZSBQbGF0Zm9ybS5cIik7cmV0dXJuIFVlKGUpfSxxZT1cIm9mLXdvcmtzcGFjZS1cIjtjb25zdCBZZT1uZXcgY2xhc3N7bWFyayhlKXtwZXJmb3JtYW5jZS5tYXJrKGAke3FlfSR7ZX1gKX1tYXJrU3RhcnQoZSl7cGVyZm9ybWFuY2UubWFyayhgJHtxZX0ke2V9LXN0YXJ0YCl9bWFya0VuZChlKXtwZXJmb3JtYW5jZS5tYXJrKGAke3FlfSR7ZX0tZW5kYCl9bWFya0VuZEFuZE1lYXN1cmUoZSl7cGVyZm9ybWFuY2UubWFyayhgJHtxZX0ke2V9LWVuZGApO3RyeXtyZXR1cm4gcGVyZm9ybWFuY2UubWVhc3VyZShgJHtxZX0ke2V9YCxgJHtxZX0ke2V9LXN0YXJ0YCxgJHtxZX0ke2V9LWVuZGApfWNhdGNoKGUpezB9fW1hcmtBbmRNZWFzdXJlKGUsdCl7cGVyZm9ybWFuY2UubWFyayhgJHtxZX0ke2V9YCk7dHJ5e3JldHVybiBwZXJmb3JtYW5jZS5tZWFzdXJlKGAke3FlfSR7ZX0tbWVhc3VyZWAsYCR7cWV9JHt0fS1zdGFydGAsYCR7cWV9JHtlfWApfWNhdGNoKGUpezB9fXJlcG9ydFdvcmtzcGFjZVBlcmZvcm1hbmNlRW50cmllcygpe3JldHVybiBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlKFwibWVhc3VyZVwiKS5maWx0ZXIoKGU9PmUubmFtZS5zdGFydHNXaXRoKHFlKSkpfXJlcG9ydFdvcmtzcGFjZVBlcmZvcm1hbmNlKCl7cmV0dXJuIHRoaXMucmVwb3J0V29ya3NwYWNlUGVyZm9ybWFuY2VFbnRyaWVzKCkubWFwKChlPT4oe25hbWU6ZS5uYW1lLnJlcGxhY2UoYCR7cWV9YCxcIlwiKS5yZXBsYWNlKFwiLW1lYXN1cmVcIixcIlwiKSxkdXJhdGlvbjplLmR1cmF0aW9ufSkpKX19LEplPShlLHQpPT50P2Ake3R9LSR7ZS51dWlkfS0ke2UubmFtZX1gOmBfX2Jyb3dzZXJfd2luZG93X18tJHtlLnV1aWR9LSR7ZS5uYW1lfWAsWGU9bmV3IE1hcCxRZT0oZSx0KT0+e2NvbnN0IG49SmUoZSx0KTtyZXR1cm4gWGUuaGFzKG4pfHxYZS5zZXQobixIZShuKSksWGUuZ2V0KG4pKCl9O3ZhciBldCx0dCxudCxydDshZnVuY3Rpb24oZSl7ZS5DbG9zZUJyb3dzZXJXaW5kb3c9XCJjbG9zZS1icm93c2VyLXdpbmRvd1wiLGUuUXVpdFBsYXRmb3JtPVwicXVpdC1wbGF0Zm9ybVwiLGUuQ2xvc2VQYWdlPVwiY2xvc2UtcGFnZVwiLGUuQWRkVG9DaGFubmVsPVwiYWRkLXRvLWNoYW5uZWxcIixlLlJlbW92ZUZyb21DaGFubmVsPVwicmVtb3ZlLWZyb20tY2hhbm5lbFwiLGUuT3BlblNhdmVNb2RhbEludGVybmFsPVwib3Blbi1zYXZlLW1vZGFsLWludGVybmFsXCIsZS5EdXBsaWNhdGVQYWdlPVwiZHVwbGljYXRlLXBhZ2VcIixlLlNldFNlbGVjdGVkU2NoZW1lPVwic2V0LXNlbGVjdGVkLXNjaGVtZVwiLGUuU2hvd0Jyb3dzZXJJbmRpY2F0b3I9XCJzaG93LWJyb3dzZXItaW5kaWNhdG9yXCIsZS5TZXRTZWxlY3RlZExhbmd1YWdlPVwic2V0LXNlbGVjdGVkLWxhbmd1YWdlXCIsZS5SZWZyZXNoQm9va21hcmtzSW50ZXJuYWw9XCJyZWZyZXNoLWJvb2ttYXJrc1wifShldHx8KGV0PXt9KSksZnVuY3Rpb24oZSl7ZS5HZXRQYWdlcz1cImdldC1wYWdlc1wiLGUuR2V0QWN0aXZlUGFnZUZvcldpbmRvdz1cImdldC1hY3RpdmUtcGFnZS1mb3Itd2luZG93XCIsZS5BdHRhY2hQYWdlc1RvV2luZG93PVwiYXR0YWNoLXBhZ2VzLXRvLXdpbmRvd1wiLGUuRGV0YWNoUGFnZXNGcm9tV2luZG93PVwiZGV0YWNoLXBhZ2VzLWZyb20td2luZG93XCIsZS5TZXRBY3RpdmVQYWdlRm9yV2luZG93PVwic2V0LWFjdGl2ZS1wYWdlLWZvci13aW5kb3dcIixlLlJlbmFtZVBhZ2U9XCJyZW5hbWUtcGFnZVwiLGUuUmVvcmRlclBhZ2VzRm9yV2luZG93PVwicmVvcmRlci1wYWdlcy1mb3Itd2luZG93XCIsZS5VcGRhdGVQYWdlRm9yV2luZG93PVwidXBkYXRlLXBhZ2UtZm9yLXdpbmRvd1wiLGUuVXBkYXRlUGFnZXNXaW5kb3dPcHRpb25zPVwidXBkYXRlLXBhZ2VzLXdpbmRvdy1vcHRpb25zXCIsZS5Jc0RldGFjaGluZ1BhZ2VzPVwiaXMtZGV0YWNoaW5nLXBhZ2VzXCIsZS5Jc0FjdGl2ZVBhZ2VDaGFuZ2luZz1cImlzLWFjdGl2ZS1wYWdlLWNoYW5naW5nXCJ9KHR0fHwodHQ9e30pKSxmdW5jdGlvbihlKXtlLkdldEFwcHM9XCJnZXQtYXBwc1wiLGUuR2V0Q3VyYXRlZENvbnRlbnQ9XCJnZXQtY3VyYXRlZC1jb250ZW50XCIsZS5HZXRSZWNlbnRseVZpc2l0ZWQ9XCJnZXQtcmVjZW50bHktdmlzaXRlZFwifShudHx8KG50PXt9KSksZnVuY3Rpb24oZSl7ZS5DcmVhdGVCb29rbWFya05vZGU9XCJjcmVhdGUtYm9va21hcmstbm9kZVwiLGUuR2V0Qm9va21hcmtOb2RlPVwiZ2V0LWJvb2ttYXJrLW5vZGVcIixlLlNlYXJjaEJvb2ttYXJrTm9kZXM9XCJzZWFyY2gtYm9va21hcmstbm9kZXNcIixlLlVwZGF0ZUJvb2ttYXJrTm9kZT1cInVwZGF0ZS1ib29rbWFyay1ub2RlXCIsZS5EZWxldGVCb29rbWFya05vZGU9XCJkZWxldGUtYm9va21hcmstbm9kZVwifShydHx8KHJ0PXt9KSk7Y29uc3Qgb3Q9ey4uLmV0LC4uLnR0fSxhdD1IZShgJHtcInVuZGVmaW5lZFwiIT10eXBlb2YgZmluJiZmaW4/Lm1lLmlkZW50aXR5LnV1aWR9LWVudGVycHJpc2UtYm9va21hcmtzYCksaXQ9ZT0+KHtpZGVudGl0eTplLG9wZW5maW5XaW5kb3c6ZmluLldpbmRvdy53cmFwU3luYyhlKSxfYm9va21hcmtzOntfY3JlYXRlQm9va21hcmtOb2RlOmFzeW5jIGU9Pihhc3luYyBlPT4oYXdhaXQgYXQoKSkuZGlzcGF0Y2gocnQuQ3JlYXRlQm9va21hcmtOb2RlLGUpKShlKSxfZ2V0Qm9va21hcmtOb2RlOmFzeW5jIGU9Pihhc3luYyBlPT4oYXdhaXQgYXQoKSkuZGlzcGF0Y2gocnQuR2V0Qm9va21hcmtOb2RlLGUpKShlKSxfc2VhcmNoQm9va21hcmtOb2Rlczphc3luYyBlPT4oYXN5bmMgZT0+KGF3YWl0IGF0KCkpLmRpc3BhdGNoKHJ0LlNlYXJjaEJvb2ttYXJrTm9kZXMsZSkpKGUpLF91cGRhdGVCb29rbWFya05vZGU6YXN5bmMgZT0+KGFzeW5jIGU9Pihhd2FpdCBhdCgpKS5kaXNwYXRjaChydC5VcGRhdGVCb29rbWFya05vZGUsZSkpKGUpLF9kZWxldGVCb29rbWFya05vZGU6YXN5bmMgZT0+KGFzeW5jIGU9Pihhd2FpdCBhdCgpKS5kaXNwYXRjaChydC5EZWxldGVCb29rbWFya05vZGUsZSkpKGUpfSxnZXRQYWdlczphc3luYygpPT4oYXdhaXQgS2UoZSkpLmRpc3BhdGNoKFdlLkdldFBhZ2VzRm9yV2luZG93LGUpLGdldFBhZ2U6YXN5bmMgdD0+KGF3YWl0IEtlKGUpKS5kaXNwYXRjaChXZS5HZXRQYWdlRm9yV2luZG93LHtpZGVudGl0eTplLHBhZ2VJZDp0fSksYWRkUGFnZTphc3luYyB0PT5PdCgpLkJyb3dzZXIud3JhcFN5bmMoZSkuX2FkZFBhZ2UodCksX2FkZFBhZ2U6YXN5bmModCxuKT0+e2NvbnN0IHI9YXdhaXQgS2UoZSksbz17aWRlbnRpdHk6ZSxwYWdlOnQsaW5zZXJ0aW9uSW5kZXg6bj8uaW5kZXh9O3JldHVybiByLmRpc3BhdGNoKFdlLkFkZFBhZ2Usbyl9LHJlbW92ZVBhZ2U6YXN5bmMgdD0+KGF3YWl0IEtlKGUpKS5kaXNwYXRjaChXZS5EZXRhY2hQYWdlc0Zyb21XaW5kb3cse2lkZW50aXR5OmUscGFnZUlkczpbdF19KSxyZXBhcmVudFBhZ2U6YXN5bmMgdD0+T3QoKS5Ccm93c2VyLndyYXBTeW5jKGUpLl9yZXBhcmVudFBhZ2UodCksX3JlcGFyZW50UGFnZTphc3luYyB0PT57Y29uc3R7cGFnZUlkOm59PXQscj1hd2FpdCBLZShlKSxvPShhd2FpdCByLmRpc3BhdGNoKFdlLkdldEFsbEF0dGFjaGVkUGFnZXMsdm9pZCAwKSkuZmluZCgoKHtwYWdlSWQ6ZX0pPT5lPT09bikpO2lmKCFvKXRocm93IG5ldyBFcnJvcihgUmVwYXJlbnQgUGFnZSBFcnJvcjogVGFyZ2V0IHBhZ2Ugd2l0aCBwYWdlSWQgJHtufSBub3QgZm91bmRgKTtvLm11bHRpSW5zdGFuY2VWaWV3QmVoYXZpb3I9XCJyZXBhcmVudFwiO2NvbnN0IGE9e2lkZW50aXR5OmUscGFnZXM6W29dLGluc2VydGlvbkluZGV4OnQuaW5kZXh9O3JldHVybiByLmRpc3BhdGNoKFdlLkF0dGFjaFBhZ2VzVG9XaW5kb3csYSl9LHNldEFjdGl2ZVBhZ2U6YXN5bmMgdD0+KGF3YWl0IEtlKGUpKS5kaXNwYXRjaChXZS5TZXRBY3RpdmVQYWdlLHtpZGVudGl0eTplLHBhZ2VJZDp0fSksdXBkYXRlUGFnZTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCBLZShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goV2UuVXBkYXRlUGFnZUZvcldpbmRvdyx0KX0scmVvcmRlclBhZ2VzOmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0IEtlKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaChXZS5SZW9yZGVyUGFnZXNGb3JXaW5kb3csdCl9LF9vcGVuR2xvYmFsQ29udGV4dE1lbnU6YXN5bmMgdD0+e2NvbnN0IG49YXdhaXQgS2UoZSk7cmV0dXJuIHQuaWRlbnRpdHk9ZSxuLmRpc3BhdGNoKFdlLk9wZW5HbG9iYWxDb250ZXh0TWVudUludGVybmFsLHQpfSxyZXBsYWNlVG9vbGJhck9wdGlvbnM6YXN5bmMgdD0+e2F3YWl0IEtlKGUpO2NvbnN0IG49ZmluLldpbmRvdy53cmFwU3luYyhlKTthd2FpdCBuLnVwZGF0ZU9wdGlvbnMoe3dvcmtzcGFjZVBsYXRmb3JtOnt0b29sYmFyT3B0aW9uczp0fX0pfSxyZXBsYWNlV2luZG93U3RhdGVCdXR0b25PcHRpb25zOmFzeW5jIHQ9Pnthd2FpdCBLZShlKTtjb25zdCBuPWZpbi5XaW5kb3cud3JhcFN5bmMoZSk7YXdhaXQgbi51cGRhdGVPcHRpb25zKHt3b3Jrc3BhY2VQbGF0Zm9ybTp7d2luZG93U3RhdGVCdXR0b25PcHRpb25zOnR9fSl9LHVwZGF0ZUJyb3dzZXJXaW5kb3dUaXRsZTphc3luYyB0PT57Y29uc3Qgbj1maW4uV2luZG93LndyYXBTeW5jKGUpO1wic3RyaW5nXCIhPXR5cGVvZiB0P2F3YWl0IG4udXBkYXRlT3B0aW9ucyh7d29ya3NwYWNlUGxhdGZvcm06e3RpdGxlOnR9fSk6Y29uc29sZS53YXJuKFwiVHlwZSBzdHJpbmcgZm9yIHdpbmRvdyB0aXRsZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIFdpbmRvd1RpdGxlIHR5cGUgaW5zdGVhZFwiLHQpfSxfb3BlblZpZXdUYWJDb250ZXh0TWVudTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCBLZShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goV2UuT3BlblZpZXdUYWJDb250ZXh0TWVudUludGVybmFsLHQpfSxfb3BlblBhZ2VUYWJDb250ZXh0TWVudTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCBLZShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goV2UuT3BlblBhZ2VUYWJDb250ZXh0TWVudUludGVybmFsLHQpfSxfb3BlblNhdmVNb2RhbDphc3luYyB0PT57YXdhaXQgS2UoZSk7cmV0dXJuKGF3YWl0IFFlKGUpKS5kaXNwYXRjaChvdC5PcGVuU2F2ZU1vZGFsSW50ZXJuYWwsdCl9LF9vcGVuU2F2ZUJ1dHRvbkNvbnRleHRNZW51OmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0IEtlKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaChXZS5PcGVuU2F2ZUJ1dHRvbkNvbnRleHRNZW51SW50ZXJuYWwsdCl9LF9hZGREZWZhdWx0UGFnZTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCBLZShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goV2UuQWRkRGVmYXVsdFBhZ2UsdCl9LF90cmFja1JlbW92ZWRUYWI6YXN5bmMgdD0+KGF3YWl0IEtlKGUpKS5kaXNwYXRjaChXZS5UcmFja1JlbW92ZWRUYWJJbnRlcm5hbCx0KSxfcmVzdG9yZVJlbW92ZWRUYWI6YXN5bmMgdD0+KGF3YWl0IEtlKGUpKS5kaXNwYXRjaChXZS5SZXN0b3JlUmVtb3ZlZFRhYkludGVybmFsLHQpLF90cmFja1Zpc2l0ZWRTaXRlOmFzeW5jIHQ9Pihhd2FpdCBLZShlKSkuZGlzcGF0Y2goV2UuVHJhY2tWaXNpdGVkU2l0ZUludGVybmFsLHQpLF9nZXRSZWNlbnRseVZpc2l0ZWRTaXRlczphc3luYyB0PT4oYXdhaXQgS2UoZSkpLmRpc3BhdGNoKFdlLkdldFJlY2VudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWwsdCksX2dldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXM6YXN5bmMgdD0+KGF3YWl0IEtlKGUpKS5kaXNwYXRjaChXZS5HZXRGcmVxdWVudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWwsdCksX3NlYXJjaFNpdGVzOmFzeW5jIHQ9Pihhd2FpdCBLZShlKSkuZGlzcGF0Y2goV2UuU2VhcmNoU2l0ZXNJbnRlcm5hbCx7aWRlbnRpdHk6ZSxyZXE6dH0pLF9nZXRDdXJhdGVkQ29udGVudDphc3luYyB0PT4oYXdhaXQgS2UoZSkpLmRpc3BhdGNoKFdlLkdldEN1cmF0ZWRDb250ZW50SW50ZXJuYWwse2lkZW50aXR5OmUscmVxOnR9KSxfaGFuZGxlUmVxdWVzdE5hdmlnYXRpb246YXN5bmMgdD0+KGF3YWl0IEtlKGUpKS5kaXNwYXRjaChXZS5IYW5kbGVSZXF1ZXN0TmF2aWdhdGlvbkludGVybmFsLHQpfSksbHQ9ZT0+e2NvbnN0IHQ9ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpO3JldHVybnt3cmFwU3luYzplPT5pdChlKSxjcmVhdGVXaW5kb3c6YXN5bmMgbj0+e2NvbnN0IHI9KCgpPT57Y29uc3QgZT1gYnJvd3Nlci13aW5kb3ctc3RhcnR1cC0ke0llKCl9YDtyZXR1cm4gWWUubWFya1N0YXJ0KGUpLGV9KSgpOyhlPT57ZmluLkFwcGxpY2F0aW9uLndyYXBTeW5jKHt1dWlkOmZpbi5tZS5pZGVudGl0eS51dWlkfSkub25jZShcIndpbmRvdy1zaG93blwiLCgoKT0+e1llLm1hcmtBbmRNZWFzdXJlKFwiYnJvd3Nlci13aW5kb3ctc2hvd25cIixlKX0pKX0pKHIpLGF3YWl0IEtlKGUpO2NvbnN0IG89YXdhaXQgdC5jcmVhdGVXaW5kb3cobik7cmV0dXJuKGU9PntZZS5tYXJrQW5kTWVhc3VyZShcImJyb3dzZXItd2luZG93LXN0YXJ0ZWRcIixlKX0pKHIpLGl0KG8uaWRlbnRpdHkpfSxnZXRBbGxBdHRhY2hlZFBhZ2VzOmFzeW5jKCk9Pihhd2FpdCBLZShlKSkuZGlzcGF0Y2goV2UuR2V0QWxsQXR0YWNoZWRQYWdlcyx2b2lkIDApLGdldEFsbFdpbmRvd3M6YXN5bmMoKT0+e2F3YWl0IEtlKGUpO3JldHVybihhd2FpdCBlZSgpKS5tYXAoKGU9Pml0KGUuaWRlbnRpdHkpKSl9LGdldFVuaXF1ZVBhZ2VUaXRsZTphc3luYyB0PT4oYXdhaXQgS2UoZSkpLmRpc3BhdGNoKFdlLkdldFVuaXF1ZVBhZ2VUaXRsZSx0KSxnZXRMYXN0Rm9jdXNlZFdpbmRvdzphc3luYygpPT4oYXdhaXQgS2UoZSkpLmRpc3BhdGNoKFdlLkdldExhc3RGb2N1c2VkQnJvd3NlcldpbmRvdyx2b2lkIDApfX0sc3Q9ZT0+KHtjcmVhdGVQYWdlOmFzeW5jIHQ9Pihhd2FpdCBLZShlKSkuZGlzcGF0Y2goV2UuQ3JlYXRlU2F2ZWRQYWdlSW50ZXJuYWwsdCksZGVsZXRlUGFnZTphc3luYyB0PT4oYXdhaXQgS2UoZSkpLmRpc3BhdGNoKFdlLkRlbGV0ZVNhdmVkUGFnZUludGVybmFsLHQpLHVwZGF0ZVBhZ2U6YXN5bmMgdD0+KGF3YWl0IEtlKGUpKS5kaXNwYXRjaChXZS5VcGRhdGVTYXZlZFBhZ2VJbnRlcm5hbCx0KSxnZXRQYWdlOmFzeW5jIHQ9Pihhd2FpdCBLZShlKSkuZGlzcGF0Y2goV2UuR2V0U2F2ZWRQYWdlLHQpLGdldFBhZ2VzOmFzeW5jIHQ9Pihhd2FpdCBLZShlKSkuZGlzcGF0Y2goV2UuR2V0U2F2ZWRQYWdlcyx0KSxzYXZlUGFnZTphc3luYyB0PT4oYXdhaXQgS2UoZSkpLmRpc3BhdGNoKFdlLlNhdmVQYWdlLHQpLGNyZWF0ZVdvcmtzcGFjZTphc3luYyB0PT4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLkNyZWF0ZVNhdmVkV29ya3NwYWNlLHQpLGRlbGV0ZVdvcmtzcGFjZTphc3luYyB0PT57Y29uc3Qgbj1PdCgpLHI9YXdhaXQgbi5nZXRDdXJyZW50V29ya3NwYWNlKCk7aWYoci53b3Jrc3BhY2VJZD09PXQpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZGVsZXRlIGN1cnJlbnQgYWN0aXZlIHdvcmtzcGFjZSAke3IudGl0bGV9YCk7cmV0dXJuKGF3YWl0IEdlKGUpKS5kaXNwYXRjaChXZS5EZWxldGVTYXZlZFdvcmtzcGFjZSx0KX0sdXBkYXRlV29ya3NwYWNlOmFzeW5jIHQ9Pihhd2FpdCBHZShlKSkuZGlzcGF0Y2goV2UuVXBkYXRlU2F2ZWRXb3Jrc3BhY2UsdCksZ2V0V29ya3NwYWNlOmFzeW5jIHQ9Pihhd2FpdCBHZShlKSkuZGlzcGF0Y2goV2UuR2V0U2F2ZWRXb3Jrc3BhY2UsdCksZ2V0V29ya3NwYWNlczphc3luYyB0PT4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLkdldFNhdmVkV29ya3NwYWNlcyx0KSxzYXZlV29ya3NwYWNlOmFzeW5jIHQ9Pihhd2FpdCBHZShlKSkuZGlzcGF0Y2goV2UuU2F2ZVdvcmtzcGFjZSx0KSxnZXREb2NrUHJvdmlkZXJDb25maWc6YXN5bmMgdD0+KGF3YWl0IEdlKGUpKS5kaXNwYXRjaChXZS5HZXREb2NrUHJvdmlkZXJDb25maWcsdCksc2F2ZURvY2tQcm92aWRlckNvbmZpZzphc3luYyB0PT4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLlNhdmVEb2NrUHJvdmlkZXJDb25maWcsdCl9KSxjdD0oZSx0KT0+e2xvY2FsU3RvcmFnZS5zZXRJdGVtKGAke1Z9LSR7ZX1gLHQpfSx1dD1lPT5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHtWfS0ke2V9YCk7dmFyIGR0OyFmdW5jdGlvbihlKXtlLlVwZGF0ZVBsYXRmb3JtVGhlbWVTY2hlbWU9XCJ1cGRhdGUtcGxhdGZvcm0tdGhlbWUtc2NoZW1lXCJ9KGR0fHwoZHQ9e30pKTtjb25zdCBwdD1IZShcIm9mLXdvcmtzcGFjZS1ub3RpZmljYXRpb25zLXN5bmNcIiksZnQ9ZT0+KHtnZXRUaGVtZXM6YXN5bmMoKT0+KGF3YWl0IEdlKGUpKS5kaXNwYXRjaChXZS5HZXRUaGVtZXMsdm9pZCAwKSxzZXRTZWxlY3RlZFNjaGVtZTphc3luYyB0PT4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLlNldFNlbGVjdGVkU2NoZW1lLHQpLGdldFNlbGVjdGVkU2NoZW1lOmFzeW5jKCk9Pihhd2FpdCBHZShlKSkuZGlzcGF0Y2goV2UuR2V0U2VsZWN0ZWRTY2hlbWUsdm9pZCAwKX0pLGh0PWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IEJlKCk7YXdhaXQgdC5kaXNwYXRjaChcInNldC1zZWxlY3RlZC1zY2hlbWVcIixlKX0sZ3Q9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgcHQoKTthd2FpdCB0LmRpc3BhdGNoKGR0LlVwZGF0ZVBsYXRmb3JtVGhlbWVTY2hlbWUse3NjaGVtZTplfSl9LHZ0PWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IGVlKCk7cmV0dXJuIFByb21pc2UuYWxsKHQubWFwKChhc3luYyB0PT57Y29uc3Qgbj1hd2FpdCBRZSh0LmlkZW50aXR5KTthd2FpdCBuLmRpc3BhdGNoKG90LlNldFNlbGVjdGVkU2NoZW1lLGUpfSkpKX0sQ3Q9YXN5bmMgZT0+e2NvbnN0IHQ9bmV3IEFycmF5LG49ZmluLkFwcGxpY2F0aW9uLmdldEN1cnJlbnRTeW5jKCkscj1hd2FpdCBuLmdldFZpZXdzKCk7Zm9yKGNvbnN0IGUgb2Ygcil7LTEhPT1lLmlkZW50aXR5Lm5hbWUuaW5kZXhPZihLLkJyb3dzZXJBZGRyZXNzU2VhcmNoUHJlZml4KSYmdC5wdXNoKGUuaWRlbnRpdHkpOy0xIT09KGF3YWl0IGUuZ2V0T3B0aW9ucygpKS51cmwuaW5kZXhPZihfLkVudGVycHJpc2VCcm93c2VyKSYmdC5wdXNoKGUuaWRlbnRpdHkpfXJldHVybiBQcm9taXNlLmFsbCh0Lm1hcCgoYXN5bmMgdD0+e2NvbnN0IG49YXdhaXQgUWUodCxcInRoZW1lLWNoYW5nZS1saXN0ZW5lclwiKTthd2FpdCBuLmRpc3BhdGNoKG90LlNldFNlbGVjdGVkU2NoZW1lLGUpfSkpKX0sbXQ9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgdGUoKTtyZXR1cm4gUHJvbWlzZS5hbGwodC5tYXAoKGFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0IFFlKHQuaWRlbnRpdHkpO2F3YWl0IG4uZGlzcGF0Y2gob3QuU2V0U2VsZWN0ZWRTY2hlbWUsZSl9KSkpfSx3dD1hc3luYyBlPT57Y29uc3QgdD1hd2FpdCBRZSh7dXVpZDpZLnV1aWQsbmFtZTpLLkVudGVycHJpc2VDb250ZXh0TWVudX0pO2F3YWl0IHQuZGlzcGF0Y2gob3QuU2V0U2VsZWN0ZWRTY2hlbWUsZSl9LGJ0PWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IFFlKHt1dWlkOlkudXVpZCxuYW1lOksuRW50ZXJwcmlzZUJvb2ttYXJrRGlhbG9nV2luZG93fSk7YXdhaXQgdC5kaXNwYXRjaChvdC5TZXRTZWxlY3RlZFNjaGVtZSxlKS5jYXRjaCgoKCk9Pnt9KSl9LHl0PWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IFFlKHt1dWlkOlkudXVpZCxuYW1lOksuRHJvcGRvd25NZW51fSk7YXdhaXQgdC5kaXNwYXRjaChvdC5TZXRTZWxlY3RlZFNjaGVtZSxlKS5jYXRjaCgoKCk9Pnt9KSl9LHh0PWFzeW5jIGU9PntpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgbG9jYWxTdG9yYWdlKXRyeXthd2FpdCBQcm9taXNlLmFsbChbY3QoTGUuU2VsZWN0ZWRDb2xvclNjaGVtZSxlKSxDdChlKSxndChlKSx2dChlKSxtdChlKSx3dChlKSxodChlKSxidChlKSx5dChlKV0pfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gc2V0IHRoZSBzZWxlY3RlZCBzY2hlbWU6IFwiLGUpfX0sa3Q9KCk9PntpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgbG9jYWxTdG9yYWdlKXJldHVybiBudWxsO3RyeXtjb25zdCBlPXV0KExlLlNlbGVjdGVkQ29sb3JTY2hlbWUpO3JldHVybiBlfHxudWxsfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gZ2V0IHRoZSBzZWxlY3RlZCBzY2hlbWU6IFwiLGUpfX0sU3Q9ZT0+e2NvbnN0IHQ9ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpO2xldCBuO3JldHVybiBPYmplY3QuYXNzaWduKHQse2FwcGx5U25hcHNob3Q6YXN5bmModCxuKT0+e2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0JiYhdD8ud2luZG93cyl0aHJvdyBuZXcgRXJyb3IoXCJOb3QgYSB2YWxpZCBicm93c2VyIHNuYXBzaG90XCIpO3JldHVybiBmaW4uUGxhdGZvcm0ud3JhcFN5bmMoZSkuYXBwbHlTbmFwc2hvdCh0LG4pfSxnZXRTbmFwc2hvdDooKT0+ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmdldFNuYXBzaG90KCkudGhlbigoZT0+ZSkpLGdldFZpZXdTbmFwc2hvdDp0PT5maW4uUGxhdGZvcm0ud3JhcFN5bmMoZSkuZ2V0Vmlld1NuYXBzaG90KHQpLGNyZWF0ZVZpZXc6KHQsbixyKT0+ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmNyZWF0ZVZpZXcodCxuLHIpLGxhdW5jaEFwcDphc3luYyB0PT57Y29uc29sZS53YXJuKFwibGF1bmNoQXBwIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgY3JlYXRlVmlldyAtIGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuZmluLmNvL29mLWRvY3MvZG9jcy9wbGF0Zm9ybS1nZXR0aW5nLXN0YXJ0ZWQjYWRkLWEtdmlldy10by1hbi1leGlzdGluZy13aW5kb3cgb3IgIGNyZWF0ZVdpbmRvdyAtIGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuZmluLmNvL29mLWRvY3MvZG9jcy9wbGF0Zm9ybS1nZXR0aW5nLXN0YXJ0ZWQjY3JlYXRlLWEtcGxhdGZvcm0td2luZG93IGluc3RlYWQuXCIpLHQudGFyZ2V0fHwodC50YXJnZXQ9e3V1aWQ6VixuYW1lOkgsZW50aXR5VHlwZTpBfHxcInVua25vd25cIn0pO3JldHVybihhd2FpdCBHZShlKSkuZGlzcGF0Y2goV2UuTGF1bmNoQXBwLHQpfSxfaW52b2tlQ3VzdG9tQWN0aW9uOmFzeW5jKHQsbik9Pntjb25zdCByPWF3YWl0IEdlKGUpLG89e2FjdGlvbklkOnQscGF5bG9hZDp7Li4ubixjYWxsZXJUeXBlOm4uY2FsbGVyVHlwZXx8ay5BUEl9fTtyZXR1cm4gci5kaXNwYXRjaChXZS5JbnZva2VDdXN0b21BY3Rpb25JbnRlcm5hbCxvKX0sX3JlcXVlc3RRdWl0UGxhdGZvcm1EaWFsb2c6YXN5bmMgdD0+KGF3YWl0IEdlKGUpKS5kaXNwYXRjaChXZS5SZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nSW50ZXJuYWwsdCksZ2V0Q3VycmVudFdvcmtzcGFjZTphc3luYygpPT4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLkdldEN1cnJlbnRXb3Jrc3BhY2Usdm9pZCAwKSxhcHBseVdvcmtzcGFjZTphc3luYyh0LG4pPT4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLkFwcGx5V29ya3NwYWNlLHsuLi50LG9wdGlvbnM6bn0pLHNldEFjdGl2ZVdvcmtzcGFjZTphc3luYyB0PT4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLlNldEFjdGl2ZVdvcmtzcGFjZSx0KSxnZXRMYW5ndWFnZTphc3luYygpPT4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLkdldExhbmd1YWdlKSxfZ2V0TGFuZ3VhZ2VSZXNvdXJjZXM6YXN5bmMoKT0+KGF3YWl0IEdlKGUpKS5kaXNwYXRjaChXZS5HZXRMYW5ndWFnZVJlc291cmNlc0ludGVybmFsKSxzZXRMYW5ndWFnZTphc3luYyB0PT4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLlNldExhbmd1YWdlLHQpLF9yYWlzZUFuYWx5dGljczphc3luYyB0PT57aWYobnx8KG49YXdhaXQgemUoZSkpLFwib2JqZWN0XCI9PXR5cGVvZiBuJiZuPy5hbmFseXRpY3M/LmlzU3VwcG9ydGVkKXtyZXR1cm4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLkFuYWx5dGljcyx0KX1lLnV1aWR9LGdldE5vdGlmaWNhdGlvbnNDb25maWc6YXN5bmMoKT0+KGF3YWl0IEdlKGUpKS5kaXNwYXRjaChXZS5HZXROb3RpZmljYXRpb25zQ29uZmlnKSxfcmVmcmVzaEJvb2ttYXJrc0ludGVybmFsOmFzeW5jKCk9Pihhd2FpdCBHZShlKSkuZGlzcGF0Y2goV2UuUmVmcmVzaEJvb2ttYXJrc0ludGVybmFsKSxUaGVtZTpmdChlKSxCcm93c2VyOmx0KGUpLFN0b3JhZ2U6c3QoZSl9KX0sT3Q9KCk9PlN0KGZpbi5tZS5pZGVudGl0eSksTXQ9e2NvbnRleHRNZW51T3B0aW9uczp7ZW5hYmxlZDohMCx0ZW1wbGF0ZTpbXCJzcGVsbENoZWNrXCIsXCJzZXBhcmF0b3JcIixcInByaW50XCIsXCJzZXBhcmF0b3JcIixcImN1dFwiLFwiY29weVwiLFwicGFzdGVcIixcInVuZG9cIixcInJlZG9cIixcInNlbGVjdEFsbFwiLFwiaW5zcGVjdFwiLFwicmVsb2FkXCJdfSxkb3dubG9hZFNoZWxmOntlbmFibGVkOiEwfX07ZnVuY3Rpb24gTHQoZSx0KXtyZXR1cm4ga2Uoe30sTXQsdCxlKX1jb25zdCBfdD1cImludGVybmFsLWdlbmVyYXRlZC12aWV3LVwiLFB0PShlLHQpPT5lLmNvbnRlbnQ/ey4uLmUsY29udGVudDplLmNvbnRlbnQubWFwKChlPT5QdChlLHQpKSl9OnsuLi5lLGNvbXBvbmVudFN0YXRlOnQoZS5jb21wb25lbnRTdGF0ZSl9LEV0PShlLHQpPT57cmV0dXJuIG49THQoZSx0KSx7Li4ubixuYW1lOm4ubmFtZT9uLm5hbWU6YGludGVybmFsLWdlbmVyYXRlZC12aWV3LSR7SWUoKX1gLF9pbnRlcm5hbFdvcmtzcGFjZURhdGE6ey4uLm4uX2ludGVybmFsV29ya3NwYWNlRGF0YSx2aWV3SWRlbnRpZmllcjpuLl9pbnRlcm5hbFdvcmtzcGFjZURhdGE/LnZpZXdJZGVudGlmaWVyfHxJZSgpfX07dmFyIG59LGp0PWU9Pih7Li4uZSxuYW1lOnZvaWQgMH0pLFJ0PWU9Pntjb25zdCB0PXsuLi5lfTtyZXR1cm4gUHQodCxqdCl9LEl0PWU9Pntjb25zdCB0PXsuLi5lfTtyZXR1cm4gUHQodCwoZT0+ZS5uYW1lJiZlLm5hbWUuc3RhcnRzV2l0aChfdCk/anQoZSk6ZSkpfSxWdD1lPT57Y29uc3QgdD1bXTtyZXR1cm4oZSYmQXJyYXkuaXNBcnJheShlKT9lOltdKS5mb3JFYWNoKChlPT57aWYoXCJjb21wb25lbnRcIj09PWUudHlwZSlyZXR1cm4gdC5wdXNoKGUuY29tcG9uZW50U3RhdGUpO2NvbnN0IG49VnQoZS5jb250ZW50KTt0LnB1c2goLi4ubil9KSksdH07bmV3IE1hcCxuZXcgTWFwO2NvbnN0IEh0PShlLHQpPT57Y29uc3Qgbj1WdCh0LmNvbnRlbnQpO3JldHVybnsuLi5QdChlLChlPT57Y29uc3QgdD1uLmZpbmQoKHQ9PnQuX2ludGVybmFsV29ya3NwYWNlRGF0YT8udmlld0lkZW50aWZpZXI9PT1lLl9pbnRlcm5hbFdvcmtzcGFjZURhdGE/LnZpZXdJZGVudGlmaWVyKSkscj10P3QuaXNDbG9zYWJsZTplLmlzQ2xvc2FibGU7cmV0dXJuey4uLmUsaXNDbG9zYWJsZTpyfX0pKSxzZXR0aW5nczp0LnNldHRpbmdzfX0sQXQ9ZT0+ZT9WdChlKS5sZW5ndGg6MDtNZSgpKChhc3luYyBlPT57dHJ5e2NvbnN0IHQ9YXdhaXQoYXN5bmMgZT0+ZmluLlBsYXRmb3JtLkxheW91dC53cmFwU3luYyh7Li4uZmluLm1lLmlkZW50aXR5LGxheW91dE5hbWU6ZX0pLmdldENvbmZpZygpKShlLmxheW91dENvbnRhaW5lcktleSksbj10LmNvbnRlbnQ/VnQodC5jb250ZW50KTpbXSxyPW4ubGVuZ3RoO3I+MT8oZT0+e1wibXVsdGlWaWV3XCIhPT1lLmF0dGFjaGVkUGFnZVR5cGUmJk90KCkuQnJvd3Nlci53cmFwU3luYyhZKS51cGRhdGVQYWdlKHtwYWdlSWQ6ZS5wYWdlSWQscGFnZTp7c2luZ2xlVmlld05hbWU6bnVsbCxhdHRhY2hlZFBhZ2VUeXBlOlwibXVsdGlWaWV3XCJ9fSl9KShlKToxPT09ciYmKGFzeW5jKGUsdCk9Pntjb25zdCBuPU90KCkuQnJvd3Nlci53cmFwU3luYyhZKTtpZihcInNpbmdsZVZpZXdcIiE9PWUuYXR0YWNoZWRQYWdlVHlwZSl7Y29uc3Qgcj1hd2FpdCBOZShlKSxvPWF3YWl0IE90KCkuQnJvd3Nlci5nZXRVbmlxdWVQYWdlVGl0bGUoKTtkZWxldGUgci5sYXlvdXQ7Y29uc3QgYT17Li4ucixzaW5nbGVWaWV3TmFtZTp0LHRpdGxlOm8saGFzVW5zYXZlZENoYW5nZXM6ITEsYXR0YWNoZWRQYWdlVHlwZTpcInNpbmdsZVZpZXdcIn07YXdhaXQgbi51cGRhdGVQYWdlKHtwYWdlSWQ6ZS5wYWdlSWQscGFnZTphfSl9fSkoZSxuWzBdLm5hbWUpLGF3YWl0KGFzeW5jKGUsdCk9Pntjb25zdCBuPUZlKHsuLi5ZLGxheW91dE5hbWU6ZS5sYXlvdXRDb250YWluZXJLZXl9KSxyPWF3YWl0IG4uaXNTaG93aW5nVGFicygpO3Q+MT9yfHxhd2FpdCBuLnNob3coKToxPT09dCYmciYmYXdhaXQgbi5oaWRlKHtzZXR0aW5nczp7cmVvcmRlckVuYWJsZWQ6ITB9fSl9KShlLHIpfWNhdGNoKGUpe319KSw1MCx7bGVhZGluZzohMSx0cmFpbGluZzohMH0pO24oMzYxKTtPYmplY3QuY3JlYXRlKG51bGwpO2NvbnN0IFR0PS8mKD86YW1wfCMzOHxsdHwjNjB8Z3R8IzYyfGFwb3N8IzM5fHF1b3R8IzM0fG5ic3B8IzE2MHxjb3B5fCMxNjl8cmVnfCMxNzR8aGVsbGlwfCM4MjMwfCN4MkZ8IzQ3KTsvZyxEdD17XCImYW1wO1wiOlwiJlwiLFwiJiMzODtcIjpcIiZcIixcIiZsdDtcIjpcIjxcIixcIiYjNjA7XCI6XCI8XCIsXCImZ3Q7XCI6XCI+XCIsXCImIzYyO1wiOlwiPlwiLFwiJmFwb3M7XCI6XCInXCIsXCImIzM5O1wiOlwiJ1wiLFwiJnF1b3Q7XCI6J1wiJyxcIiYjMzQ7XCI6J1wiJyxcIiZuYnNwO1wiOlwiIFwiLFwiJiMxNjA7XCI6XCIgXCIsXCImY29weTtcIjpcIsKpXCIsXCImIzE2OTtcIjpcIsKpXCIsXCImcmVnO1wiOlwiwq5cIixcIiYjMTc0O1wiOlwiwq5cIixcIiZoZWxsaXA7XCI6XCLigKZcIixcIiYjODIzMDtcIjpcIuKAplwiLFwiJiN4MkY7XCI6XCIvXCIsXCImIzQ3O1wiOlwiL1wifSxCdD1lPT5EdFtlXTtsZXQgWnQsJHQ9e2JpbmRJMThuOlwibGFuZ3VhZ2VDaGFuZ2VkXCIsYmluZEkxOG5TdG9yZTpcIlwiLHRyYW5zRW1wdHlOb2RlVmFsdWU6XCJcIix0cmFuc1N1cHBvcnRCYXNpY0h0bWxOb2RlczohMCx0cmFuc1dyYXBUZXh0Tm9kZXM6XCJcIix0cmFuc0tlZXBCYXNpY0h0bWxOb2Rlc0ZvcjpbXCJiclwiLFwic3Ryb25nXCIsXCJpXCIsXCJwXCJdLHVzZVN1c3BlbnNlOiEwLHVuZXNjYXBlOmU9PmUucmVwbGFjZShUdCxCdCl9O2NvbnN0IE50PXt0eXBlOlwiM3JkUGFydHlcIixpbml0KGUpeyFmdW5jdGlvbigpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTskdD17Li4uJHQsLi4uZX19KGUub3B0aW9ucy5yZWFjdCksZnVuY3Rpb24oZSl7WnQ9ZX0oZSl9fTsoMCx2ZS5jcmVhdGVDb250ZXh0KSgpO2NvbnN0IEZ0PXt0eXBlOlwibG9nZ2VyXCIsbG9nKGUpe3RoaXMub3V0cHV0KFwibG9nXCIsZSl9LHdhcm4oZSl7dGhpcy5vdXRwdXQoXCJ3YXJuXCIsZSl9LGVycm9yKGUpe3RoaXMub3V0cHV0KFwiZXJyb3JcIixlKX0sb3V0cHV0KGUsdCl7Y29uc29sZSYmY29uc29sZVtlXSYmY29uc29sZVtlXS5hcHBseShjb25zb2xlLHQpfX07Y2xhc3MgV3R7Y29uc3RydWN0b3IoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3RoaXMuaW5pdChlLHQpfWluaXQoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3RoaXMucHJlZml4PXQucHJlZml4fHxcImkxOG5leHQ6XCIsdGhpcy5sb2dnZXI9ZXx8RnQsdGhpcy5vcHRpb25zPXQsdGhpcy5kZWJ1Zz10LmRlYnVnfWxvZygpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiB0aGlzLmZvcndhcmQodCxcImxvZ1wiLFwiXCIsITApfXdhcm4oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gdGhpcy5mb3J3YXJkKHQsXCJ3YXJuXCIsXCJcIiwhMCl9ZXJyb3IoKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gdGhpcy5mb3J3YXJkKHQsXCJlcnJvclwiLFwiXCIpfWRlcHJlY2F0ZSgpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiB0aGlzLmZvcndhcmQodCxcIndhcm5cIixcIldBUk5JTkcgREVQUkVDQVRFRDogXCIsITApfWZvcndhcmQoZSx0LG4scil7cmV0dXJuIHImJiF0aGlzLmRlYnVnP251bGw6KFwic3RyaW5nXCI9PXR5cGVvZiBlWzBdJiYoZVswXT1gJHtufSR7dGhpcy5wcmVmaXh9ICR7ZVswXX1gKSx0aGlzLmxvZ2dlclt0XShlKSl9Y3JlYXRlKGUpe3JldHVybiBuZXcgV3QodGhpcy5sb2dnZXIse3ByZWZpeDpgJHt0aGlzLnByZWZpeH06JHtlfTpgLC4uLnRoaXMub3B0aW9uc30pfWNsb25lKGUpe3JldHVybihlPWV8fHRoaXMub3B0aW9ucykucHJlZml4PWUucHJlZml4fHx0aGlzLnByZWZpeCxuZXcgV3QodGhpcy5sb2dnZXIsZSl9fXZhciBVdD1uZXcgV3Q7Y2xhc3MgenR7Y29uc3RydWN0b3IoKXt0aGlzLm9ic2VydmVycz17fX1vbihlLHQpe3JldHVybiBlLnNwbGl0KFwiIFwiKS5mb3JFYWNoKChlPT57dGhpcy5vYnNlcnZlcnNbZV18fCh0aGlzLm9ic2VydmVyc1tlXT1uZXcgTWFwKTtjb25zdCBuPXRoaXMub2JzZXJ2ZXJzW2VdLmdldCh0KXx8MDt0aGlzLm9ic2VydmVyc1tlXS5zZXQodCxuKzEpfSkpLHRoaXN9b2ZmKGUsdCl7dGhpcy5vYnNlcnZlcnNbZV0mJih0P3RoaXMub2JzZXJ2ZXJzW2VdLmRlbGV0ZSh0KTpkZWxldGUgdGhpcy5vYnNlcnZlcnNbZV0pfWVtaXQoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO2lmKHRoaXMub2JzZXJ2ZXJzW2VdKXtBcnJheS5mcm9tKHRoaXMub2JzZXJ2ZXJzW2VdLmVudHJpZXMoKSkuZm9yRWFjaCgoZT0+e2xldFt0LHJdPWU7Zm9yKGxldCBlPTA7ZTxyO2UrKyl0KC4uLm4pfSkpfWlmKHRoaXMub2JzZXJ2ZXJzW1wiKlwiXSl7QXJyYXkuZnJvbSh0aGlzLm9ic2VydmVyc1tcIipcIl0uZW50cmllcygpKS5mb3JFYWNoKCh0PT57bGV0W3Isb109dDtmb3IobGV0IHQ9MDt0PG87dCsrKXIuYXBwbHkocixbZSwuLi5uXSl9KSl9fX1mdW5jdGlvbiBHdCgpe2xldCBlLHQ7Y29uc3Qgbj1uZXcgUHJvbWlzZSgoKG4scik9PntlPW4sdD1yfSkpO3JldHVybiBuLnJlc29sdmU9ZSxuLnJlamVjdD10LG59ZnVuY3Rpb24gS3QoZSl7cmV0dXJuIG51bGw9PWU/XCJcIjpcIlwiK2V9Y29uc3QgcXQ9LyMjIy9nO2Z1bmN0aW9uIFl0KGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLmluZGV4T2YoXCIjIyNcIik+LTE/ZS5yZXBsYWNlKHF0LFwiLlwiKTplfWZ1bmN0aW9uIG8oKXtyZXR1cm4hZXx8XCJzdHJpbmdcIj09dHlwZW9mIGV9Y29uc3QgYT1cInN0cmluZ1wiIT10eXBlb2YgdD90OnQuc3BsaXQoXCIuXCIpO2xldCBpPTA7Zm9yKDtpPGEubGVuZ3RoLTE7KXtpZihvKCkpcmV0dXJue307Y29uc3QgdD1yKGFbaV0pOyFlW3RdJiZuJiYoZVt0XT1uZXcgbiksZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KT9lW3RdOnt9LCsraX1yZXR1cm4gbygpP3t9OntvYmo6ZSxrOnIoYVtpXSl9fWZ1bmN0aW9uIEp0KGUsdCxuKXtjb25zdHtvYmo6cixrOm99PVl0KGUsdCxPYmplY3QpO2lmKHZvaWQgMCE9PXJ8fDE9PT10Lmxlbmd0aClyZXR1cm4gdm9pZChyW29dPW4pO2xldCBhPXRbdC5sZW5ndGgtMV0saT10LnNsaWNlKDAsdC5sZW5ndGgtMSksbD1ZdChlLGksT2JqZWN0KTtmb3IoO3ZvaWQgMD09PWwub2JqJiZpLmxlbmd0aDspYT1gJHtpW2kubGVuZ3RoLTFdfS4ke2F9YCxpPWkuc2xpY2UoMCxpLmxlbmd0aC0xKSxsPVl0KGUsaSxPYmplY3QpLGwmJmwub2JqJiZ2b2lkIDAhPT1sLm9ialtgJHtsLmt9LiR7YX1gXSYmKGwub2JqPXZvaWQgMCk7bC5vYmpbYCR7bC5rfS4ke2F9YF09bn1mdW5jdGlvbiBYdChlLHQpe2NvbnN0e29iajpuLGs6cn09WXQoZSx0KTtpZihuKXJldHVybiBuW3JdfWZ1bmN0aW9uIFF0KGUsdCxuKXtmb3IoY29uc3QgciBpbiB0KVwiX19wcm90b19fXCIhPT1yJiZcImNvbnN0cnVjdG9yXCIhPT1yJiYociBpbiBlP1wic3RyaW5nXCI9PXR5cGVvZiBlW3JdfHxlW3JdaW5zdGFuY2VvZiBTdHJpbmd8fFwic3RyaW5nXCI9PXR5cGVvZiB0W3JdfHx0W3JdaW5zdGFuY2VvZiBTdHJpbmc/biYmKGVbcl09dFtyXSk6UXQoZVtyXSx0W3JdLG4pOmVbcl09dFtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZW4oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xcLVxcW1xcXVxcL1xce1xcfVxcKFxcKVxcKlxcK1xcP1xcLlxcXFxcXF5cXCRcXHxdL2csXCJcXFxcJCZcIil9dmFyIHRuPXtcIiZcIjpcIiZhbXA7XCIsXCI8XCI6XCImbHQ7XCIsXCI+XCI6XCImZ3Q7XCIsJ1wiJzpcIiZxdW90O1wiLFwiJ1wiOlwiJiMzOTtcIixcIi9cIjpcIiYjeDJGO1wifTtmdW5jdGlvbiBubihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT9lLnJlcGxhY2UoL1smPD5cIidcXC9dL2csKGU9PnRuW2VdKSk6ZX1jb25zdCBybj1bXCIgXCIsXCIsXCIsXCI/XCIsXCIhXCIsXCI7XCJdLG9uPW5ldyBjbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmNhcGFjaXR5PWUsdGhpcy5yZWdFeHBNYXA9bmV3IE1hcCx0aGlzLnJlZ0V4cFF1ZXVlPVtdfWdldFJlZ0V4cChlKXtjb25zdCB0PXRoaXMucmVnRXhwTWFwLmdldChlKTtpZih2b2lkIDAhPT10KXJldHVybiB0O2NvbnN0IG49bmV3IFJlZ0V4cChlKTtyZXR1cm4gdGhpcy5yZWdFeHBRdWV1ZS5sZW5ndGg9PT10aGlzLmNhcGFjaXR5JiZ0aGlzLnJlZ0V4cE1hcC5kZWxldGUodGhpcy5yZWdFeHBRdWV1ZS5zaGlmdCgpKSx0aGlzLnJlZ0V4cE1hcC5zZXQoZSxuKSx0aGlzLnJlZ0V4cFF1ZXVlLnB1c2goZSksbn19KDIwKTtmdW5jdGlvbiBhbihlLHQpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpcIi5cIjtpZighZSlyZXR1cm47aWYoZVt0XSlyZXR1cm4gZVt0XTtjb25zdCByPXQuc3BsaXQobik7bGV0IG89ZTtmb3IobGV0IGU9MDtlPHIubGVuZ3RoOyl7aWYoIW98fFwib2JqZWN0XCIhPXR5cGVvZiBvKXJldHVybjtsZXQgdCxhPVwiXCI7Zm9yKGxldCBpPWU7aTxyLmxlbmd0aDsrK2kpaWYoaSE9PWUmJihhKz1uKSxhKz1yW2ldLHQ9b1thXSx2b2lkIDAhPT10KXtpZihbXCJzdHJpbmdcIixcIm51bWJlclwiLFwiYm9vbGVhblwiXS5pbmRleE9mKHR5cGVvZiB0KT4tMSYmaTxyLmxlbmd0aC0xKWNvbnRpbnVlO2UrPWktZSsxO2JyZWFrfW89dH1yZXR1cm4gb31mdW5jdGlvbiBsbihlKXtyZXR1cm4gZSYmZS5pbmRleE9mKFwiX1wiKT4wP2UucmVwbGFjZShcIl9cIixcIi1cIik6ZX1jbGFzcyBzbiBleHRlbmRzIHp0e2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7bnM6W1widHJhbnNsYXRpb25cIl0sZGVmYXVsdE5TOlwidHJhbnNsYXRpb25cIn07c3VwZXIoKSx0aGlzLmRhdGE9ZXx8e30sdGhpcy5vcHRpb25zPXQsdm9pZCAwPT09dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciYmKHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I9XCIuXCIpLHZvaWQgMD09PXRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlJiYodGhpcy5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmU9ITApfWFkZE5hbWVzcGFjZXMoZSl7dGhpcy5vcHRpb25zLm5zLmluZGV4T2YoZSk8MCYmdGhpcy5vcHRpb25zLm5zLnB1c2goZSl9cmVtb3ZlTmFtZXNwYWNlcyhlKXtjb25zdCB0PXRoaXMub3B0aW9ucy5ucy5pbmRleE9mKGUpO3Q+LTEmJnRoaXMub3B0aW9ucy5ucy5zcGxpY2UodCwxKX1nZXRSZXNvdXJjZShlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O2NvbnN0IG89dm9pZCAwIT09ci5rZXlTZXBhcmF0b3I/ci5rZXlTZXBhcmF0b3I6dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcixhPXZvaWQgMCE9PXIuaWdub3JlSlNPTlN0cnVjdHVyZT9yLmlnbm9yZUpTT05TdHJ1Y3R1cmU6dGhpcy5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmU7bGV0IGk7ZS5pbmRleE9mKFwiLlwiKT4tMT9pPWUuc3BsaXQoXCIuXCIpOihpPVtlLHRdLG4mJihBcnJheS5pc0FycmF5KG4pP2kucHVzaCguLi5uKTpcInN0cmluZ1wiPT10eXBlb2YgbiYmbz9pLnB1c2goLi4ubi5zcGxpdChvKSk6aS5wdXNoKG4pKSk7Y29uc3QgbD1YdCh0aGlzLmRhdGEsaSk7cmV0dXJuIWwmJiF0JiYhbiYmZS5pbmRleE9mKFwiLlwiKT4tMSYmKGU9aVswXSx0PWlbMV0sbj1pLnNsaWNlKDIpLmpvaW4oXCIuXCIpKSxsfHwhYXx8XCJzdHJpbmdcIiE9dHlwZW9mIG4/bDphbih0aGlzLmRhdGEmJnRoaXMuZGF0YVtlXSYmdGhpcy5kYXRhW2VdW3RdLG4sbyl9YWRkUmVzb3VyY2UoZSx0LG4scil7bGV0IG89YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOntzaWxlbnQ6ITF9O2NvbnN0IGE9dm9pZCAwIT09by5rZXlTZXBhcmF0b3I/by5rZXlTZXBhcmF0b3I6dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtsZXQgaT1bZSx0XTtuJiYoaT1pLmNvbmNhdChhP24uc3BsaXQoYSk6bikpLGUuaW5kZXhPZihcIi5cIik+LTEmJihpPWUuc3BsaXQoXCIuXCIpLHI9dCx0PWlbMV0pLHRoaXMuYWRkTmFtZXNwYWNlcyh0KSxKdCh0aGlzLmRhdGEsaSxyKSxvLnNpbGVudHx8dGhpcy5lbWl0KFwiYWRkZWRcIixlLHQsbixyKX1hZGRSZXNvdXJjZXMoZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7c2lsZW50OiExfTtmb3IoY29uc3QgciBpbiBuKVwic3RyaW5nXCIhPXR5cGVvZiBuW3JdJiZcIltvYmplY3QgQXJyYXldXCIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KG5bcl0pfHx0aGlzLmFkZFJlc291cmNlKGUsdCxyLG5bcl0se3NpbGVudDohMH0pO3Iuc2lsZW50fHx0aGlzLmVtaXQoXCJhZGRlZFwiLGUsdCxuKX1hZGRSZXNvdXJjZUJ1bmRsZShlLHQsbixyLG8pe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdP2FyZ3VtZW50c1s1XTp7c2lsZW50OiExfSxpPVtlLHRdO2UuaW5kZXhPZihcIi5cIik+LTEmJihpPWUuc3BsaXQoXCIuXCIpLHI9bixuPXQsdD1pWzFdKSx0aGlzLmFkZE5hbWVzcGFjZXModCk7bGV0IGw9WHQodGhpcy5kYXRhLGkpfHx7fTtyP1F0KGwsbixvKTpsPXsuLi5sLC4uLm59LEp0KHRoaXMuZGF0YSxpLGwpLGEuc2lsZW50fHx0aGlzLmVtaXQoXCJhZGRlZFwiLGUsdCxuKX1yZW1vdmVSZXNvdXJjZUJ1bmRsZShlLHQpe3RoaXMuaGFzUmVzb3VyY2VCdW5kbGUoZSx0KSYmZGVsZXRlIHRoaXMuZGF0YVtlXVt0XSx0aGlzLnJlbW92ZU5hbWVzcGFjZXModCksdGhpcy5lbWl0KFwicmVtb3ZlZFwiLGUsdCl9aGFzUmVzb3VyY2VCdW5kbGUoZSx0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5nZXRSZXNvdXJjZShlLHQpfWdldFJlc291cmNlQnVuZGxlKGUsdCl7cmV0dXJuIHR8fCh0PXRoaXMub3B0aW9ucy5kZWZhdWx0TlMpLFwidjFcIj09PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJP3suLi50aGlzLmdldFJlc291cmNlKGUsdCl9OnRoaXMuZ2V0UmVzb3VyY2UoZSx0KX1nZXREYXRhQnlMYW5ndWFnZShlKXtyZXR1cm4gdGhpcy5kYXRhW2VdfWhhc0xhbmd1YWdlU29tZVRyYW5zbGF0aW9ucyhlKXtjb25zdCB0PXRoaXMuZ2V0RGF0YUJ5TGFuZ3VhZ2UoZSk7cmV0dXJuISEodCYmT2JqZWN0LmtleXModCl8fFtdKS5maW5kKChlPT50W2VdJiZPYmplY3Qua2V5cyh0W2VdKS5sZW5ndGg+MCkpfXRvSlNPTigpe3JldHVybiB0aGlzLmRhdGF9fXZhciBjbj17cHJvY2Vzc29yczp7fSxhZGRQb3N0UHJvY2Vzc29yKGUpe3RoaXMucHJvY2Vzc29yc1tlLm5hbWVdPWV9LGhhbmRsZShlLHQsbixyLG8pe3JldHVybiBlLmZvckVhY2goKGU9Pnt0aGlzLnByb2Nlc3NvcnNbZV0mJih0PXRoaXMucHJvY2Vzc29yc1tlXS5wcm9jZXNzKHQsbixyLG8pKX0pKSx0fX07Y29uc3QgdW49e307Y2xhc3MgZG4gZXh0ZW5kcyB6dHtjb25zdHJ1Y3RvcihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307c3VwZXIoKSxmdW5jdGlvbihlLHQsbil7ZS5mb3JFYWNoKChlPT57dFtlXSYmKG5bZV09dFtlXSl9KSl9KFtcInJlc291cmNlU3RvcmVcIixcImxhbmd1YWdlVXRpbHNcIixcInBsdXJhbFJlc29sdmVyXCIsXCJpbnRlcnBvbGF0b3JcIixcImJhY2tlbmRDb25uZWN0b3JcIixcImkxOG5Gb3JtYXRcIixcInV0aWxzXCJdLGUsdGhpcyksdGhpcy5vcHRpb25zPXQsdm9pZCAwPT09dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciYmKHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I9XCIuXCIpLHRoaXMubG9nZ2VyPVV0LmNyZWF0ZShcInRyYW5zbGF0b3JcIil9Y2hhbmdlTGFuZ3VhZ2UoZSl7ZSYmKHRoaXMubGFuZ3VhZ2U9ZSl9ZXhpc3RzKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7aW50ZXJwb2xhdGlvbjp7fX07aWYobnVsbD09ZSlyZXR1cm4hMTtjb25zdCBuPXRoaXMucmVzb2x2ZShlLHQpO3JldHVybiBuJiZ2b2lkIDAhPT1uLnJlc31leHRyYWN0RnJvbUtleShlLHQpe2xldCBuPXZvaWQgMCE9PXQubnNTZXBhcmF0b3I/dC5uc1NlcGFyYXRvcjp0aGlzLm9wdGlvbnMubnNTZXBhcmF0b3I7dm9pZCAwPT09biYmKG49XCI6XCIpO2NvbnN0IHI9dm9pZCAwIT09dC5rZXlTZXBhcmF0b3I/dC5rZXlTZXBhcmF0b3I6dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtsZXQgbz10Lm5zfHx0aGlzLm9wdGlvbnMuZGVmYXVsdE5TfHxbXTtjb25zdCBhPW4mJmUuaW5kZXhPZihuKT4tMSxpPSEodGhpcy5vcHRpb25zLnVzZXJEZWZpbmVkS2V5U2VwYXJhdG9yfHx0LmtleVNlcGFyYXRvcnx8dGhpcy5vcHRpb25zLnVzZXJEZWZpbmVkTnNTZXBhcmF0b3J8fHQubnNTZXBhcmF0b3J8fGZ1bmN0aW9uKGUsdCxuKXt0PXR8fFwiXCIsbj1ufHxcIlwiO2NvbnN0IHI9cm4uZmlsdGVyKChlPT50LmluZGV4T2YoZSk8MCYmbi5pbmRleE9mKGUpPDApKTtpZigwPT09ci5sZW5ndGgpcmV0dXJuITA7Y29uc3Qgbz1vbi5nZXRSZWdFeHAoYCgke3IubWFwKChlPT5cIj9cIj09PWU/XCJcXFxcP1wiOmUpKS5qb2luKFwifFwiKX0pYCk7bGV0IGE9IW8udGVzdChlKTtpZighYSl7Y29uc3QgdD1lLmluZGV4T2Yobik7dD4wJiYhby50ZXN0KGUuc3Vic3RyaW5nKDAsdCkpJiYoYT0hMCl9cmV0dXJuIGF9KGUsbixyKSk7aWYoYSYmIWkpe2NvbnN0IHQ9ZS5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTtpZih0JiZ0Lmxlbmd0aD4wKXJldHVybntrZXk6ZSxuYW1lc3BhY2VzOm99O2NvbnN0IGE9ZS5zcGxpdChuKTsobiE9PXJ8fG49PT1yJiZ0aGlzLm9wdGlvbnMubnMuaW5kZXhPZihhWzBdKT4tMSkmJihvPWEuc2hpZnQoKSksZT1hLmpvaW4ocil9cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIG8mJihvPVtvXSkse2tleTplLG5hbWVzcGFjZXM6b319dHJhbnNsYXRlKGUsdCxuKXtpZihcIm9iamVjdFwiIT10eXBlb2YgdCYmdGhpcy5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyJiYodD10aGlzLm9wdGlvbnMub3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXIoYXJndW1lbnRzKSksXCJvYmplY3RcIj09dHlwZW9mIHQmJih0PXsuLi50fSksdHx8KHQ9e30pLG51bGw9PWUpcmV0dXJuXCJcIjtBcnJheS5pc0FycmF5KGUpfHwoZT1bU3RyaW5nKGUpXSk7Y29uc3Qgcj12b2lkIDAhPT10LnJldHVybkRldGFpbHM/dC5yZXR1cm5EZXRhaWxzOnRoaXMub3B0aW9ucy5yZXR1cm5EZXRhaWxzLG89dm9pZCAwIT09dC5rZXlTZXBhcmF0b3I/dC5rZXlTZXBhcmF0b3I6dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcix7a2V5OmEsbmFtZXNwYWNlczppfT10aGlzLmV4dHJhY3RGcm9tS2V5KGVbZS5sZW5ndGgtMV0sdCksbD1pW2kubGVuZ3RoLTFdLHM9dC5sbmd8fHRoaXMubGFuZ3VhZ2UsYz10LmFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlfHx0aGlzLm9wdGlvbnMuYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGU7aWYocyYmXCJjaW1vZGVcIj09PXMudG9Mb3dlckNhc2UoKSl7aWYoYyl7Y29uc3QgZT10Lm5zU2VwYXJhdG9yfHx0aGlzLm9wdGlvbnMubnNTZXBhcmF0b3I7cmV0dXJuIHI/e3JlczpgJHtsfSR7ZX0ke2F9YCx1c2VkS2V5OmEsZXhhY3RVc2VkS2V5OmEsdXNlZExuZzpzLHVzZWROUzpsLHVzZWRQYXJhbXM6dGhpcy5nZXRVc2VkUGFyYW1zRGV0YWlscyh0KX06YCR7bH0ke2V9JHthfWB9cmV0dXJuIHI/e3JlczphLHVzZWRLZXk6YSxleGFjdFVzZWRLZXk6YSx1c2VkTG5nOnMsdXNlZE5TOmwsdXNlZFBhcmFtczp0aGlzLmdldFVzZWRQYXJhbXNEZXRhaWxzKHQpfTphfWNvbnN0IHU9dGhpcy5yZXNvbHZlKGUsdCk7bGV0IGQ9dSYmdS5yZXM7Y29uc3QgcD11JiZ1LnVzZWRLZXl8fGEsZj11JiZ1LmV4YWN0VXNlZEtleXx8YSxoPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkoZCksZz12b2lkIDAhPT10LmpvaW5BcnJheXM/dC5qb2luQXJyYXlzOnRoaXMub3B0aW9ucy5qb2luQXJyYXlzLHY9IXRoaXMuaTE4bkZvcm1hdHx8dGhpcy5pMThuRm9ybWF0LmhhbmRsZUFzT2JqZWN0O2lmKHYmJmQmJihcInN0cmluZ1wiIT10eXBlb2YgZCYmXCJib29sZWFuXCIhPXR5cGVvZiBkJiZcIm51bWJlclwiIT10eXBlb2YgZCkmJltcIltvYmplY3QgTnVtYmVyXVwiLFwiW29iamVjdCBGdW5jdGlvbl1cIixcIltvYmplY3QgUmVnRXhwXVwiXS5pbmRleE9mKGgpPDAmJihcInN0cmluZ1wiIT10eXBlb2YgZ3x8XCJbb2JqZWN0IEFycmF5XVwiIT09aCkpe2lmKCF0LnJldHVybk9iamVjdHMmJiF0aGlzLm9wdGlvbnMucmV0dXJuT2JqZWN0cyl7dGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlcnx8dGhpcy5sb2dnZXIud2FybihcImFjY2Vzc2luZyBhbiBvYmplY3QgLSBidXQgcmV0dXJuT2JqZWN0cyBvcHRpb25zIGlzIG5vdCBlbmFibGVkIVwiKTtjb25zdCBlPXRoaXMub3B0aW9ucy5yZXR1cm5lZE9iamVjdEhhbmRsZXI/dGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlcihwLGQsey4uLnQsbnM6aX0pOmBrZXkgJyR7YX0gKCR7dGhpcy5sYW5ndWFnZX0pJyByZXR1cm5lZCBhbiBvYmplY3QgaW5zdGVhZCBvZiBzdHJpbmcuYDtyZXR1cm4gcj8odS5yZXM9ZSx1LnVzZWRQYXJhbXM9dGhpcy5nZXRVc2VkUGFyYW1zRGV0YWlscyh0KSx1KTplfWlmKG8pe2NvbnN0IGU9XCJbb2JqZWN0IEFycmF5XVwiPT09aCxuPWU/W106e30scj1lP2Y6cDtmb3IoY29uc3QgZSBpbiBkKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLGUpKXtjb25zdCBhPWAke3J9JHtvfSR7ZX1gO25bZV09dGhpcy50cmFuc2xhdGUoYSx7Li4udCxqb2luQXJyYXlzOiExLG5zOml9KSxuW2VdPT09YSYmKG5bZV09ZFtlXSl9ZD1ufX1lbHNlIGlmKHYmJlwic3RyaW5nXCI9PXR5cGVvZiBnJiZcIltvYmplY3QgQXJyYXldXCI9PT1oKWQ9ZC5qb2luKGcpLGQmJihkPXRoaXMuZXh0ZW5kVHJhbnNsYXRpb24oZCxlLHQsbikpO2Vsc2V7bGV0IHI9ITEsaT0hMTtjb25zdCBjPXZvaWQgMCE9PXQuY291bnQmJlwic3RyaW5nXCIhPXR5cGVvZiB0LmNvdW50LHA9ZG4uaGFzRGVmYXVsdFZhbHVlKHQpLGY9Yz90aGlzLnBsdXJhbFJlc29sdmVyLmdldFN1ZmZpeChzLHQuY291bnQsdCk6XCJcIixoPXQub3JkaW5hbCYmYz90aGlzLnBsdXJhbFJlc29sdmVyLmdldFN1ZmZpeChzLHQuY291bnQse29yZGluYWw6ITF9KTpcIlwiLGc9YyYmIXQub3JkaW5hbCYmMD09PXQuY291bnQmJnRoaXMucGx1cmFsUmVzb2x2ZXIuc2hvdWxkVXNlSW50bEFwaSgpLHY9ZyYmdFtgZGVmYXVsdFZhbHVlJHt0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yfXplcm9gXXx8dFtgZGVmYXVsdFZhbHVlJHtmfWBdfHx0W2BkZWZhdWx0VmFsdWUke2h9YF18fHQuZGVmYXVsdFZhbHVlOyF0aGlzLmlzVmFsaWRMb29rdXAoZCkmJnAmJihyPSEwLGQ9diksdGhpcy5pc1ZhbGlkTG9va3VwKGQpfHwoaT0hMCxkPWEpO2NvbnN0IEM9KHQubWlzc2luZ0tleU5vVmFsdWVGYWxsYmFja1RvS2V5fHx0aGlzLm9wdGlvbnMubWlzc2luZ0tleU5vVmFsdWVGYWxsYmFja1RvS2V5KSYmaT92b2lkIDA6ZCxtPXAmJnYhPT1kJiZ0aGlzLm9wdGlvbnMudXBkYXRlTWlzc2luZztpZihpfHxyfHxtKXtpZih0aGlzLmxvZ2dlci5sb2cobT9cInVwZGF0ZUtleVwiOlwibWlzc2luZ0tleVwiLHMsbCxhLG0/djpkKSxvKXtjb25zdCBlPXRoaXMucmVzb2x2ZShhLHsuLi50LGtleVNlcGFyYXRvcjohMX0pO2UmJmUucmVzJiZ0aGlzLmxvZ2dlci53YXJuKFwiU2VlbXMgdGhlIGxvYWRlZCB0cmFuc2xhdGlvbnMgd2VyZSBpbiBmbGF0IEpTT04gZm9ybWF0IGluc3RlYWQgb2YgbmVzdGVkLiBFaXRoZXIgc2V0IGtleVNlcGFyYXRvcjogZmFsc2Ugb24gaW5pdCBvciBtYWtlIHN1cmUgeW91ciB0cmFuc2xhdGlvbnMgYXJlIHB1Ymxpc2hlZCBpbiBuZXN0ZWQgZm9ybWF0LlwiKX1sZXQgZT1bXTtjb25zdCBuPXRoaXMubGFuZ3VhZ2VVdGlscy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyx0LmxuZ3x8dGhpcy5sYW5ndWFnZSk7aWYoXCJmYWxsYmFja1wiPT09dGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nVG8mJm4mJm5bMF0pZm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0KyspZS5wdXNoKG5bdF0pO2Vsc2VcImFsbFwiPT09dGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nVG8/ZT10aGlzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KHQubG5nfHx0aGlzLmxhbmd1YWdlKTplLnB1c2godC5sbmd8fHRoaXMubGFuZ3VhZ2UpO2NvbnN0IHI9KGUsbixyKT0+e2NvbnN0IG89cCYmciE9PWQ/cjpDO3RoaXMub3B0aW9ucy5taXNzaW5nS2V5SGFuZGxlcj90aGlzLm9wdGlvbnMubWlzc2luZ0tleUhhbmRsZXIoZSxsLG4sbyxtLHQpOnRoaXMuYmFja2VuZENvbm5lY3RvciYmdGhpcy5iYWNrZW5kQ29ubmVjdG9yLnNhdmVNaXNzaW5nJiZ0aGlzLmJhY2tlbmRDb25uZWN0b3Iuc2F2ZU1pc3NpbmcoZSxsLG4sbyxtLHQpLHRoaXMuZW1pdChcIm1pc3NpbmdLZXlcIixlLGwsbixkKX07dGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nJiYodGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nUGx1cmFscyYmYz9lLmZvckVhY2goKGU9Pntjb25zdCBuPXRoaXMucGx1cmFsUmVzb2x2ZXIuZ2V0U3VmZml4ZXMoZSx0KTtnJiZ0W2BkZWZhdWx0VmFsdWUke3RoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3J9emVyb2BdJiZuLmluZGV4T2YoYCR7dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcn16ZXJvYCk8MCYmbi5wdXNoKGAke3RoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3J9emVyb2ApLG4uZm9yRWFjaCgobj0+e3IoW2VdLGErbix0W2BkZWZhdWx0VmFsdWUke259YF18fHYpfSkpfSkpOnIoZSxhLHYpKX1kPXRoaXMuZXh0ZW5kVHJhbnNsYXRpb24oZCxlLHQsdSxuKSxpJiZkPT09YSYmdGhpcy5vcHRpb25zLmFwcGVuZE5hbWVzcGFjZVRvTWlzc2luZ0tleSYmKGQ9YCR7bH06JHthfWApLChpfHxyKSYmdGhpcy5vcHRpb25zLnBhcnNlTWlzc2luZ0tleUhhbmRsZXImJihkPVwidjFcIiE9PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJP3RoaXMub3B0aW9ucy5wYXJzZU1pc3NpbmdLZXlIYW5kbGVyKHRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb01pc3NpbmdLZXk/YCR7bH06JHthfWA6YSxyP2Q6dm9pZCAwKTp0aGlzLm9wdGlvbnMucGFyc2VNaXNzaW5nS2V5SGFuZGxlcihkKSl9cmV0dXJuIHI/KHUucmVzPWQsdS51c2VkUGFyYW1zPXRoaXMuZ2V0VXNlZFBhcmFtc0RldGFpbHModCksdSk6ZH1leHRlbmRUcmFuc2xhdGlvbihlLHQsbixyLG8pe3ZhciBhPXRoaXM7aWYodGhpcy5pMThuRm9ybWF0JiZ0aGlzLmkxOG5Gb3JtYXQucGFyc2UpZT10aGlzLmkxOG5Gb3JtYXQucGFyc2UoZSx7Li4udGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcywuLi5ufSxuLmxuZ3x8dGhpcy5sYW5ndWFnZXx8ci51c2VkTG5nLHIudXNlZE5TLHIudXNlZEtleSx7cmVzb2x2ZWQ6cn0pO2Vsc2UgaWYoIW4uc2tpcEludGVycG9sYXRpb24pe24uaW50ZXJwb2xhdGlvbiYmdGhpcy5pbnRlcnBvbGF0b3IuaW5pdCh7Li4ubixpbnRlcnBvbGF0aW9uOnsuLi50aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbiwuLi5uLmludGVycG9sYXRpb259fSk7Y29uc3QgaT1cInN0cmluZ1wiPT10eXBlb2YgZSYmKG4mJm4uaW50ZXJwb2xhdGlvbiYmdm9pZCAwIT09bi5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcz9uLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzOnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcyk7bGV0IGw7aWYoaSl7Y29uc3QgdD1lLm1hdGNoKHRoaXMuaW50ZXJwb2xhdG9yLm5lc3RpbmdSZWdleHApO2w9dCYmdC5sZW5ndGh9bGV0IHM9bi5yZXBsYWNlJiZcInN0cmluZ1wiIT10eXBlb2Ygbi5yZXBsYWNlP24ucmVwbGFjZTpuO2lmKHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMmJihzPXsuLi50aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzLC4uLnN9KSxlPXRoaXMuaW50ZXJwb2xhdG9yLmludGVycG9sYXRlKGUscyxuLmxuZ3x8dGhpcy5sYW5ndWFnZSxuKSxpKXtjb25zdCB0PWUubWF0Y2godGhpcy5pbnRlcnBvbGF0b3IubmVzdGluZ1JlZ2V4cCk7bDwodCYmdC5sZW5ndGgpJiYobi5uZXN0PSExKX0hbi5sbmcmJlwidjFcIiE9PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJJiZyJiZyLnJlcyYmKG4ubG5nPXIudXNlZExuZyksITEhPT1uLm5lc3QmJihlPXRoaXMuaW50ZXJwb2xhdG9yLm5lc3QoZSwoZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gbyYmb1swXT09PXJbMF0mJiFuLmNvbnRleHQ/KGEubG9nZ2VyLndhcm4oYEl0IHNlZW1zIHlvdSBhcmUgbmVzdGluZyByZWN1cnNpdmVseSBrZXk6ICR7clswXX0gaW4ga2V5OiAke3RbMF19YCksbnVsbCk6YS50cmFuc2xhdGUoLi4ucix0KX0pLG4pKSxuLmludGVycG9sYXRpb24mJnRoaXMuaW50ZXJwb2xhdG9yLnJlc2V0KCl9Y29uc3QgaT1uLnBvc3RQcm9jZXNzfHx0aGlzLm9wdGlvbnMucG9zdFByb2Nlc3MsbD1cInN0cmluZ1wiPT10eXBlb2YgaT9baV06aTtyZXR1cm4gbnVsbCE9ZSYmbCYmbC5sZW5ndGgmJiExIT09bi5hcHBseVBvc3RQcm9jZXNzb3ImJihlPWNuLmhhbmRsZShsLGUsdCx0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5wb3N0UHJvY2Vzc1Bhc3NSZXNvbHZlZD97aTE4blJlc29sdmVkOnsuLi5yLHVzZWRQYXJhbXM6dGhpcy5nZXRVc2VkUGFyYW1zRGV0YWlscyhuKX0sLi4ubn06bix0aGlzKSksZX1yZXNvbHZlKGUpe2xldCB0LG4scixvLGEsaT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtlXSksZS5mb3JFYWNoKChlPT57aWYodGhpcy5pc1ZhbGlkTG9va3VwKHQpKXJldHVybjtjb25zdCBsPXRoaXMuZXh0cmFjdEZyb21LZXkoZSxpKSxzPWwua2V5O249cztsZXQgYz1sLm5hbWVzcGFjZXM7dGhpcy5vcHRpb25zLmZhbGxiYWNrTlMmJihjPWMuY29uY2F0KHRoaXMub3B0aW9ucy5mYWxsYmFja05TKSk7Y29uc3QgdT12b2lkIDAhPT1pLmNvdW50JiZcInN0cmluZ1wiIT10eXBlb2YgaS5jb3VudCxkPXUmJiFpLm9yZGluYWwmJjA9PT1pLmNvdW50JiZ0aGlzLnBsdXJhbFJlc29sdmVyLnNob3VsZFVzZUludGxBcGkoKSxwPXZvaWQgMCE9PWkuY29udGV4dCYmKFwic3RyaW5nXCI9PXR5cGVvZiBpLmNvbnRleHR8fFwibnVtYmVyXCI9PXR5cGVvZiBpLmNvbnRleHQpJiZcIlwiIT09aS5jb250ZXh0LGY9aS5sbmdzP2kubG5nczp0aGlzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGkubG5nfHx0aGlzLmxhbmd1YWdlLGkuZmFsbGJhY2tMbmcpO2MuZm9yRWFjaCgoZT0+e3RoaXMuaXNWYWxpZExvb2t1cCh0KXx8KGE9ZSwhdW5bYCR7ZlswXX0tJHtlfWBdJiZ0aGlzLnV0aWxzJiZ0aGlzLnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSYmIXRoaXMudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlKGEpJiYodW5bYCR7ZlswXX0tJHtlfWBdPSEwLHRoaXMubG9nZ2VyLndhcm4oYGtleSBcIiR7bn1cIiBmb3IgbGFuZ3VhZ2VzIFwiJHtmLmpvaW4oXCIsIFwiKX1cIiB3b24ndCBnZXQgcmVzb2x2ZWQgYXMgbmFtZXNwYWNlIFwiJHthfVwiIHdhcyBub3QgeWV0IGxvYWRlZGAsXCJUaGlzIG1lYW5zIHNvbWV0aGluZyBJUyBXUk9ORyBpbiB5b3VyIHNldHVwLiBZb3UgYWNjZXNzIHRoZSB0IGZ1bmN0aW9uIGJlZm9yZSBpMThuZXh0LmluaXQgLyBpMThuZXh0LmxvYWROYW1lc3BhY2UgLyBpMThuZXh0LmNoYW5nZUxhbmd1YWdlIHdhcyBkb25lLiBXYWl0IGZvciB0aGUgY2FsbGJhY2sgb3IgUHJvbWlzZSB0byByZXNvbHZlIGJlZm9yZSBhY2Nlc3NpbmcgaXQhISFcIikpLGYuZm9yRWFjaCgobj0+e2lmKHRoaXMuaXNWYWxpZExvb2t1cCh0KSlyZXR1cm47bz1uO2NvbnN0IGE9W3NdO2lmKHRoaXMuaTE4bkZvcm1hdCYmdGhpcy5pMThuRm9ybWF0LmFkZExvb2t1cEtleXMpdGhpcy5pMThuRm9ybWF0LmFkZExvb2t1cEtleXMoYSxzLG4sZSxpKTtlbHNle2xldCBlO3UmJihlPXRoaXMucGx1cmFsUmVzb2x2ZXIuZ2V0U3VmZml4KG4saS5jb3VudCxpKSk7Y29uc3QgdD1gJHt0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yfXplcm9gLHI9YCR7dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcn1vcmRpbmFsJHt0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yfWA7aWYodSYmKGEucHVzaChzK2UpLGkub3JkaW5hbCYmMD09PWUuaW5kZXhPZihyKSYmYS5wdXNoKHMrZS5yZXBsYWNlKHIsdGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcikpLGQmJmEucHVzaChzK3QpKSxwKXtjb25zdCBuPWAke3N9JHt0aGlzLm9wdGlvbnMuY29udGV4dFNlcGFyYXRvcn0ke2kuY29udGV4dH1gO2EucHVzaChuKSx1JiYoYS5wdXNoKG4rZSksaS5vcmRpbmFsJiYwPT09ZS5pbmRleE9mKHIpJiZhLnB1c2gobitlLnJlcGxhY2Uocix0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yKSksZCYmYS5wdXNoKG4rdCkpfX1sZXQgbDtmb3IoO2w9YS5wb3AoKTspdGhpcy5pc1ZhbGlkTG9va3VwKHQpfHwocj1sLHQ9dGhpcy5nZXRSZXNvdXJjZShuLGUsbCxpKSl9KSkpfSkpfSkpLHtyZXM6dCx1c2VkS2V5Om4sZXhhY3RVc2VkS2V5OnIsdXNlZExuZzpvLHVzZWROUzphfX1pc1ZhbGlkTG9va3VwKGUpe3JldHVybiEodm9pZCAwPT09ZXx8IXRoaXMub3B0aW9ucy5yZXR1cm5OdWxsJiZudWxsPT09ZXx8IXRoaXMub3B0aW9ucy5yZXR1cm5FbXB0eVN0cmluZyYmXCJcIj09PWUpfWdldFJlc291cmNlKGUsdCxuKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106e307cmV0dXJuIHRoaXMuaTE4bkZvcm1hdCYmdGhpcy5pMThuRm9ybWF0LmdldFJlc291cmNlP3RoaXMuaTE4bkZvcm1hdC5nZXRSZXNvdXJjZShlLHQsbixyKTp0aGlzLnJlc291cmNlU3RvcmUuZ2V0UmVzb3VyY2UoZSx0LG4scil9Z2V0VXNlZFBhcmFtc0RldGFpbHMoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3QgdD1bXCJkZWZhdWx0VmFsdWVcIixcIm9yZGluYWxcIixcImNvbnRleHRcIixcInJlcGxhY2VcIixcImxuZ1wiLFwibG5nc1wiLFwiZmFsbGJhY2tMbmdcIixcIm5zXCIsXCJrZXlTZXBhcmF0b3JcIixcIm5zU2VwYXJhdG9yXCIsXCJyZXR1cm5PYmplY3RzXCIsXCJyZXR1cm5EZXRhaWxzXCIsXCJqb2luQXJyYXlzXCIsXCJwb3N0UHJvY2Vzc1wiLFwiaW50ZXJwb2xhdGlvblwiXSxuPWUucmVwbGFjZSYmXCJzdHJpbmdcIiE9dHlwZW9mIGUucmVwbGFjZTtsZXQgcj1uP2UucmVwbGFjZTplO2lmKG4mJnZvaWQgMCE9PWUuY291bnQmJihyLmNvdW50PWUuY291bnQpLHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMmJihyPXsuLi50aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzLC4uLnJ9KSwhbil7cj17Li4ucn07Zm9yKGNvbnN0IGUgb2YgdClkZWxldGUgcltlXX1yZXR1cm4gcn1zdGF0aWMgaGFzRGVmYXVsdFZhbHVlKGUpe2NvbnN0IHQ9XCJkZWZhdWx0VmFsdWVcIjtmb3IoY29uc3QgbiBpbiBlKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0PT09bi5zdWJzdHJpbmcoMCwxMikmJnZvaWQgMCE9PWVbbl0pcmV0dXJuITA7cmV0dXJuITF9fWZ1bmN0aW9uIHBuKGUpe3JldHVybiBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSl9Y2xhc3MgZm57Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWUsdGhpcy5zdXBwb3J0ZWRMbmdzPXRoaXMub3B0aW9ucy5zdXBwb3J0ZWRMbmdzfHwhMSx0aGlzLmxvZ2dlcj1VdC5jcmVhdGUoXCJsYW5ndWFnZVV0aWxzXCIpfWdldFNjcmlwdFBhcnRGcm9tQ29kZShlKXtpZighKGU9bG4oZSkpfHxlLmluZGV4T2YoXCItXCIpPDApcmV0dXJuIG51bGw7Y29uc3QgdD1lLnNwbGl0KFwiLVwiKTtyZXR1cm4gMj09PXQubGVuZ3RoP251bGw6KHQucG9wKCksXCJ4XCI9PT10W3QubGVuZ3RoLTFdLnRvTG93ZXJDYXNlKCk/bnVsbDp0aGlzLmZvcm1hdExhbmd1YWdlQ29kZSh0LmpvaW4oXCItXCIpKSl9Z2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSl7aWYoIShlPWxuKGUpKXx8ZS5pbmRleE9mKFwiLVwiKTwwKXJldHVybiBlO2NvbnN0IHQ9ZS5zcGxpdChcIi1cIik7cmV0dXJuIHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKHRbMF0pfWZvcm1hdExhbmd1YWdlQ29kZShlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmZS5pbmRleE9mKFwiLVwiKT4tMSl7Y29uc3QgdD1bXCJoYW5zXCIsXCJoYW50XCIsXCJsYXRuXCIsXCJjeXJsXCIsXCJjYW5zXCIsXCJtb25nXCIsXCJhcmFiXCJdO2xldCBuPWUuc3BsaXQoXCItXCIpO3JldHVybiB0aGlzLm9wdGlvbnMubG93ZXJDYXNlTG5nP249bi5tYXAoKGU9PmUudG9Mb3dlckNhc2UoKSkpOjI9PT1uLmxlbmd0aD8oblswXT1uWzBdLnRvTG93ZXJDYXNlKCksblsxXT1uWzFdLnRvVXBwZXJDYXNlKCksdC5pbmRleE9mKG5bMV0udG9Mb3dlckNhc2UoKSk+LTEmJihuWzFdPXBuKG5bMV0udG9Mb3dlckNhc2UoKSkpKTozPT09bi5sZW5ndGgmJihuWzBdPW5bMF0udG9Mb3dlckNhc2UoKSwyPT09blsxXS5sZW5ndGgmJihuWzFdPW5bMV0udG9VcHBlckNhc2UoKSksXCJzZ25cIiE9PW5bMF0mJjI9PT1uWzJdLmxlbmd0aCYmKG5bMl09blsyXS50b1VwcGVyQ2FzZSgpKSx0LmluZGV4T2YoblsxXS50b0xvd2VyQ2FzZSgpKT4tMSYmKG5bMV09cG4oblsxXS50b0xvd2VyQ2FzZSgpKSksdC5pbmRleE9mKG5bMl0udG9Mb3dlckNhc2UoKSk+LTEmJihuWzJdPXBuKG5bMl0udG9Mb3dlckNhc2UoKSkpKSxuLmpvaW4oXCItXCIpfXJldHVybiB0aGlzLm9wdGlvbnMuY2xlYW5Db2RlfHx0aGlzLm9wdGlvbnMubG93ZXJDYXNlTG5nP2UudG9Mb3dlckNhc2UoKTplfWlzU3VwcG9ydGVkQ29kZShlKXtyZXR1cm4oXCJsYW5ndWFnZU9ubHlcIj09PXRoaXMub3B0aW9ucy5sb2FkfHx0aGlzLm9wdGlvbnMubm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzKSYmKGU9dGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShlKSksIXRoaXMuc3VwcG9ydGVkTG5nc3x8IXRoaXMuc3VwcG9ydGVkTG5ncy5sZW5ndGh8fHRoaXMuc3VwcG9ydGVkTG5ncy5pbmRleE9mKGUpPi0xfWdldEJlc3RNYXRjaEZyb21Db2RlcyhlKXtpZighZSlyZXR1cm4gbnVsbDtsZXQgdDtyZXR1cm4gZS5mb3JFYWNoKChlPT57aWYodClyZXR1cm47Y29uc3Qgbj10aGlzLmZvcm1hdExhbmd1YWdlQ29kZShlKTt0aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncyYmIXRoaXMuaXNTdXBwb3J0ZWRDb2RlKG4pfHwodD1uKX0pKSwhdCYmdGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MmJmUuZm9yRWFjaCgoZT0+e2lmKHQpcmV0dXJuO2NvbnN0IG49dGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShlKTtpZih0aGlzLmlzU3VwcG9ydGVkQ29kZShuKSlyZXR1cm4gdD1uO3Q9dGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MuZmluZCgoZT0+ZT09PW4/ZTplLmluZGV4T2YoXCItXCIpPDAmJm4uaW5kZXhPZihcIi1cIik8MD92b2lkIDA6MD09PWUuaW5kZXhPZihuKT9lOnZvaWQgMCkpfSkpLHR8fCh0PXRoaXMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpWzBdKSx0fWdldEZhbGxiYWNrQ29kZXMoZSx0KXtpZighZSlyZXR1cm5bXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYoZT1lKHQpKSxcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W2VdKSxcIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KGUpKXJldHVybiBlO2lmKCF0KXJldHVybiBlLmRlZmF1bHR8fFtdO2xldCBuPWVbdF07cmV0dXJuIG58fChuPWVbdGhpcy5nZXRTY3JpcHRQYXJ0RnJvbUNvZGUodCldKSxufHwobj1lW3RoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKHQpXSksbnx8KG49ZVt0aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKHQpXSksbnx8KG49ZS5kZWZhdWx0KSxufHxbXX10b1Jlc29sdmVIaWVyYXJjaHkoZSx0KXtjb25zdCBuPXRoaXMuZ2V0RmFsbGJhY2tDb2Rlcyh0fHx0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmd8fFtdLGUpLHI9W10sbz1lPT57ZSYmKHRoaXMuaXNTdXBwb3J0ZWRDb2RlKGUpP3IucHVzaChlKTp0aGlzLmxvZ2dlci53YXJuKGByZWplY3RpbmcgbGFuZ3VhZ2UgY29kZSBub3QgZm91bmQgaW4gc3VwcG9ydGVkTG5nczogJHtlfWApKX07cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlLmluZGV4T2YoXCItXCIpPi0xfHxlLmluZGV4T2YoXCJfXCIpPi0xKT8oXCJsYW5ndWFnZU9ubHlcIiE9PXRoaXMub3B0aW9ucy5sb2FkJiZvKHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGUpKSxcImxhbmd1YWdlT25seVwiIT09dGhpcy5vcHRpb25zLmxvYWQmJlwiY3VycmVudE9ubHlcIiE9PXRoaXMub3B0aW9ucy5sb2FkJiZvKHRoaXMuZ2V0U2NyaXB0UGFydEZyb21Db2RlKGUpKSxcImN1cnJlbnRPbmx5XCIhPT10aGlzLm9wdGlvbnMubG9hZCYmbyh0aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpKSk6XCJzdHJpbmdcIj09dHlwZW9mIGUmJm8odGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoZSkpLG4uZm9yRWFjaCgoZT0+e3IuaW5kZXhPZihlKTwwJiZvKHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGUpKX0pKSxyfX1sZXQgaG49W3tsbmdzOltcImFjaFwiLFwiYWtcIixcImFtXCIsXCJhcm5cIixcImJyXCIsXCJmaWxcIixcImd1blwiLFwibG5cIixcIm1mZVwiLFwibWdcIixcIm1pXCIsXCJvY1wiLFwicHRcIixcInB0LUJSXCIsXCJ0Z1wiLFwidGxcIixcInRpXCIsXCJ0clwiLFwidXpcIixcIndhXCJdLG5yOlsxLDJdLGZjOjF9LHtsbmdzOltcImFmXCIsXCJhblwiLFwiYXN0XCIsXCJhelwiLFwiYmdcIixcImJuXCIsXCJjYVwiLFwiZGFcIixcImRlXCIsXCJkZXZcIixcImVsXCIsXCJlblwiLFwiZW9cIixcImVzXCIsXCJldFwiLFwiZXVcIixcImZpXCIsXCJmb1wiLFwiZnVyXCIsXCJmeVwiLFwiZ2xcIixcImd1XCIsXCJoYVwiLFwiaGlcIixcImh1XCIsXCJoeVwiLFwiaWFcIixcIml0XCIsXCJra1wiLFwia25cIixcImt1XCIsXCJsYlwiLFwibWFpXCIsXCJtbFwiLFwibW5cIixcIm1yXCIsXCJuYWhcIixcIm5hcFwiLFwibmJcIixcIm5lXCIsXCJubFwiLFwibm5cIixcIm5vXCIsXCJuc29cIixcInBhXCIsXCJwYXBcIixcInBtc1wiLFwicHNcIixcInB0LVBUXCIsXCJybVwiLFwic2NvXCIsXCJzZVwiLFwic2lcIixcInNvXCIsXCJzb25cIixcInNxXCIsXCJzdlwiLFwic3dcIixcInRhXCIsXCJ0ZVwiLFwidGtcIixcInVyXCIsXCJ5b1wiXSxucjpbMSwyXSxmYzoyfSx7bG5nczpbXCJheVwiLFwiYm9cIixcImNnZ1wiLFwiZmFcIixcImh0XCIsXCJpZFwiLFwiamFcIixcImpib1wiLFwia2FcIixcImttXCIsXCJrb1wiLFwia3lcIixcImxvXCIsXCJtc1wiLFwic2FoXCIsXCJzdVwiLFwidGhcIixcInR0XCIsXCJ1Z1wiLFwidmlcIixcIndvXCIsXCJ6aFwiXSxucjpbMV0sZmM6M30se2xuZ3M6W1wiYmVcIixcImJzXCIsXCJjbnJcIixcImR6XCIsXCJoclwiLFwicnVcIixcInNyXCIsXCJ1a1wiXSxucjpbMSwyLDVdLGZjOjR9LHtsbmdzOltcImFyXCJdLG5yOlswLDEsMiwzLDExLDEwMF0sZmM6NX0se2xuZ3M6W1wiY3NcIixcInNrXCJdLG5yOlsxLDIsNV0sZmM6Nn0se2xuZ3M6W1wiY3NiXCIsXCJwbFwiXSxucjpbMSwyLDVdLGZjOjd9LHtsbmdzOltcImN5XCJdLG5yOlsxLDIsMyw4XSxmYzo4fSx7bG5nczpbXCJmclwiXSxucjpbMSwyXSxmYzo5fSx7bG5nczpbXCJnYVwiXSxucjpbMSwyLDMsNywxMV0sZmM6MTB9LHtsbmdzOltcImdkXCJdLG5yOlsxLDIsMywyMF0sZmM6MTF9LHtsbmdzOltcImlzXCJdLG5yOlsxLDJdLGZjOjEyfSx7bG5nczpbXCJqdlwiXSxucjpbMCwxXSxmYzoxM30se2xuZ3M6W1wia3dcIl0sbnI6WzEsMiwzLDRdLGZjOjE0fSx7bG5nczpbXCJsdFwiXSxucjpbMSwyLDEwXSxmYzoxNX0se2xuZ3M6W1wibHZcIl0sbnI6WzEsMiwwXSxmYzoxNn0se2xuZ3M6W1wibWtcIl0sbnI6WzEsMl0sZmM6MTd9LHtsbmdzOltcIm1ua1wiXSxucjpbMCwxLDJdLGZjOjE4fSx7bG5nczpbXCJtdFwiXSxucjpbMSwyLDExLDIwXSxmYzoxOX0se2xuZ3M6W1wib3JcIl0sbnI6WzIsMV0sZmM6Mn0se2xuZ3M6W1wicm9cIl0sbnI6WzEsMiwyMF0sZmM6MjB9LHtsbmdzOltcInNsXCJdLG5yOls1LDEsMiwzXSxmYzoyMX0se2xuZ3M6W1wiaGVcIixcIml3XCJdLG5yOlsxLDIsMjAsMjFdLGZjOjIyfV0sZ249ezE6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlPjEpfSwyOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMSE9ZSl9LDM6ZnVuY3Rpb24oZSl7cmV0dXJuIDB9LDQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlJTEwPT0xJiZlJTEwMCE9MTE/MDplJTEwPj0yJiZlJTEwPD00JiYoZSUxMDA8MTB8fGUlMTAwPj0yMCk/MToyKX0sNTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDA9PWU/MDoxPT1lPzE6Mj09ZT8yOmUlMTAwPj0zJiZlJTEwMDw9MTA/MzplJTEwMD49MTE/NDo1KX0sNjpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDplPj0yJiZlPD00PzE6Mil9LDc6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6ZSUxMD49MiYmZSUxMDw9NCYmKGUlMTAwPDEwfHxlJTEwMD49MjApPzE6Mil9LDg6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOjghPWUmJjExIT1lPzI6Myl9LDk6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlPj0yKX0sMTA6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOmU8Nz8yOmU8MTE/Mzo0KX0sMTE6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lfHwxMT09ZT8wOjI9PWV8fDEyPT1lPzE6ZT4yJiZlPDIwPzI6Myl9LDEyOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMCE9MXx8ZSUxMDA9PTExKX0sMTM6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigwIT09ZSl9LDE0OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMT09ZT8wOjI9PWU/MTozPT1lPzI6Myl9LDE1OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMD09MSYmZSUxMDAhPTExPzA6ZSUxMD49MiYmKGUlMTAwPDEwfHxlJTEwMD49MjApPzE6Mil9LDE2OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMD09MSYmZSUxMDAhPTExPzA6MCE9PWU/MToyKX0sMTc6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lfHxlJTEwPT0xJiZlJTEwMCE9MTE/MDoxKX0sMTg6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigwPT1lPzA6MT09ZT8xOjIpfSwxOTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDowPT1lfHxlJTEwMD4xJiZlJTEwMDwxMT8xOmUlMTAwPjEwJiZlJTEwMDwyMD8yOjMpfSwyMDpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDowPT1lfHxlJTEwMD4wJiZlJTEwMDwyMD8xOjIpfSwyMTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGUlMTAwPT0xPzE6ZSUxMDA9PTI/MjplJTEwMD09M3x8ZSUxMDA9PTQ/MzowKX0sMjI6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOihlPDB8fGU+MTApJiZlJTEwPT0wPzI6Myl9fTtjb25zdCB2bj1bXCJ2MVwiLFwidjJcIixcInYzXCJdLENuPVtcInY0XCJdLG1uPXt6ZXJvOjAsb25lOjEsdHdvOjIsZmV3OjMsbWFueTo0LG90aGVyOjV9O2NsYXNzIHdue2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTt0aGlzLmxhbmd1YWdlVXRpbHM9ZSx0aGlzLm9wdGlvbnM9dCx0aGlzLmxvZ2dlcj1VdC5jcmVhdGUoXCJwbHVyYWxSZXNvbHZlclwiKSx0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04mJiFDbi5pbmNsdWRlcyh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04pfHxcInVuZGVmaW5lZFwiIT10eXBlb2YgSW50bCYmSW50bC5QbHVyYWxSdWxlc3x8KHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTj1cInYzXCIsdGhpcy5sb2dnZXIuZXJyb3IoXCJZb3VyIGVudmlyb25tZW50IHNlZW1zIG5vdCB0byBiZSBJbnRsIEFQSSBjb21wYXRpYmxlLCB1c2UgYW4gSW50bC5QbHVyYWxSdWxlcyBwb2x5ZmlsbC4gV2lsbCBmYWxsYmFjayB0byB0aGUgY29tcGF0aWJpbGl0eUpTT04gdjMgZm9ybWF0IGhhbmRsaW5nLlwiKSksdGhpcy5ydWxlcz1mdW5jdGlvbigpe2NvbnN0IGU9e307cmV0dXJuIGhuLmZvckVhY2goKHQ9Pnt0LmxuZ3MuZm9yRWFjaCgobj0+e2Vbbl09e251bWJlcnM6dC5ucixwbHVyYWxzOmduW3QuZmNdfX0pKX0pKSxlfSgpfWFkZFJ1bGUoZSx0KXt0aGlzLnJ1bGVzW2VdPXR9Z2V0UnVsZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYodGhpcy5zaG91bGRVc2VJbnRsQXBpKCkpdHJ5e3JldHVybiBuZXcgSW50bC5QbHVyYWxSdWxlcyhsbihcImRldlwiPT09ZT9cImVuXCI6ZSkse3R5cGU6dC5vcmRpbmFsP1wib3JkaW5hbFwiOlwiY2FyZGluYWxcIn0pfWNhdGNoKGUpe3JldHVybn1yZXR1cm4gdGhpcy5ydWxlc1tlXXx8dGhpcy5ydWxlc1t0aGlzLmxhbmd1YWdlVXRpbHMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSldfW5lZWRzUGx1cmFsKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtjb25zdCBuPXRoaXMuZ2V0UnVsZShlLHQpO3JldHVybiB0aGlzLnNob3VsZFVzZUludGxBcGkoKT9uJiZuLnJlc29sdmVkT3B0aW9ucygpLnBsdXJhbENhdGVnb3JpZXMubGVuZ3RoPjE6biYmbi5udW1iZXJzLmxlbmd0aD4xfWdldFBsdXJhbEZvcm1zT2ZLZXkoZSx0KXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307cmV0dXJuIHRoaXMuZ2V0U3VmZml4ZXMoZSxuKS5tYXAoKGU9PmAke3R9JHtlfWApKX1nZXRTdWZmaXhlcyhlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Y29uc3Qgbj10aGlzLmdldFJ1bGUoZSx0KTtyZXR1cm4gbj90aGlzLnNob3VsZFVzZUludGxBcGkoKT9uLnJlc29sdmVkT3B0aW9ucygpLnBsdXJhbENhdGVnb3JpZXMuc29ydCgoKGUsdCk9Pm1uW2VdLW1uW3RdKSkubWFwKChlPT5gJHt0aGlzLm9wdGlvbnMucHJlcGVuZH0ke3Qub3JkaW5hbD9gb3JkaW5hbCR7dGhpcy5vcHRpb25zLnByZXBlbmR9YDpcIlwifSR7ZX1gKSk6bi5udW1iZXJzLm1hcCgobj0+dGhpcy5nZXRTdWZmaXgoZSxuLHQpKSk6W119Z2V0U3VmZml4KGUsdCl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2NvbnN0IHI9dGhpcy5nZXRSdWxlKGUsbik7cmV0dXJuIHI/dGhpcy5zaG91bGRVc2VJbnRsQXBpKCk/YCR7dGhpcy5vcHRpb25zLnByZXBlbmR9JHtuLm9yZGluYWw/YG9yZGluYWwke3RoaXMub3B0aW9ucy5wcmVwZW5kfWA6XCJcIn0ke3Iuc2VsZWN0KHQpfWA6dGhpcy5nZXRTdWZmaXhSZXRyb0NvbXBhdGlibGUocix0KToodGhpcy5sb2dnZXIud2Fybihgbm8gcGx1cmFsIHJ1bGUgZm91bmQgZm9yOiAke2V9YCksXCJcIil9Z2V0U3VmZml4UmV0cm9Db21wYXRpYmxlKGUsdCl7Y29uc3Qgbj1lLm5vQWJzP2UucGx1cmFscyh0KTplLnBsdXJhbHMoTWF0aC5hYnModCkpO2xldCByPWUubnVtYmVyc1tuXTt0aGlzLm9wdGlvbnMuc2ltcGxpZnlQbHVyYWxTdWZmaXgmJjI9PT1lLm51bWJlcnMubGVuZ3RoJiYxPT09ZS5udW1iZXJzWzBdJiYoMj09PXI/cj1cInBsdXJhbFwiOjE9PT1yJiYocj1cIlwiKSk7Y29uc3Qgbz0oKT0+dGhpcy5vcHRpb25zLnByZXBlbmQmJnIudG9TdHJpbmcoKT90aGlzLm9wdGlvbnMucHJlcGVuZCtyLnRvU3RyaW5nKCk6ci50b1N0cmluZygpO3JldHVyblwidjFcIj09PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTj8xPT09cj9cIlwiOlwibnVtYmVyXCI9PXR5cGVvZiByP2BfcGx1cmFsXyR7ci50b1N0cmluZygpfWA6bygpOlwidjJcIj09PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTnx8dGhpcy5vcHRpb25zLnNpbXBsaWZ5UGx1cmFsU3VmZml4JiYyPT09ZS5udW1iZXJzLmxlbmd0aCYmMT09PWUubnVtYmVyc1swXT9vKCk6dGhpcy5vcHRpb25zLnByZXBlbmQmJm4udG9TdHJpbmcoKT90aGlzLm9wdGlvbnMucHJlcGVuZCtuLnRvU3RyaW5nKCk6bi50b1N0cmluZygpfXNob3VsZFVzZUludGxBcGkoKXtyZXR1cm4hdm4uaW5jbHVkZXModGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OKX19ZnVuY3Rpb24gYm4oZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpcIi5cIixvPSEoYXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0pfHxhcmd1bWVudHNbNF0sYT1mdW5jdGlvbihlLHQsbil7Y29uc3Qgcj1YdChlLG4pO3JldHVybiB2b2lkIDAhPT1yP3I6WHQodCxuKX0oZSx0LG4pO3JldHVybiFhJiZvJiZcInN0cmluZ1wiPT10eXBlb2YgbiYmKGE9YW4oZSxuLHIpLHZvaWQgMD09PWEmJihhPWFuKHQsbixyKSkpLGF9Y2xhc3MgeW57Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307dGhpcy5sb2dnZXI9VXQuY3JlYXRlKFwiaW50ZXJwb2xhdG9yXCIpLHRoaXMub3B0aW9ucz1lLHRoaXMuZm9ybWF0PWUuaW50ZXJwb2xhdGlvbiYmZS5pbnRlcnBvbGF0aW9uLmZvcm1hdHx8KGU9PmUpLHRoaXMuaW5pdChlKX1pbml0KCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2UuaW50ZXJwb2xhdGlvbnx8KGUuaW50ZXJwb2xhdGlvbj17ZXNjYXBlVmFsdWU6ITB9KTtjb25zdCB0PWUuaW50ZXJwb2xhdGlvbjt0aGlzLmVzY2FwZT12b2lkIDAhPT10LmVzY2FwZT90LmVzY2FwZTpubix0aGlzLmVzY2FwZVZhbHVlPXZvaWQgMD09PXQuZXNjYXBlVmFsdWV8fHQuZXNjYXBlVmFsdWUsdGhpcy51c2VSYXdWYWx1ZVRvRXNjYXBlPXZvaWQgMCE9PXQudXNlUmF3VmFsdWVUb0VzY2FwZSYmdC51c2VSYXdWYWx1ZVRvRXNjYXBlLHRoaXMucHJlZml4PXQucHJlZml4P2VuKHQucHJlZml4KTp0LnByZWZpeEVzY2FwZWR8fFwie3tcIix0aGlzLnN1ZmZpeD10LnN1ZmZpeD9lbih0LnN1ZmZpeCk6dC5zdWZmaXhFc2NhcGVkfHxcIn19XCIsdGhpcy5mb3JtYXRTZXBhcmF0b3I9dC5mb3JtYXRTZXBhcmF0b3I/dC5mb3JtYXRTZXBhcmF0b3I6dC5mb3JtYXRTZXBhcmF0b3J8fFwiLFwiLHRoaXMudW5lc2NhcGVQcmVmaXg9dC51bmVzY2FwZVN1ZmZpeD9cIlwiOnQudW5lc2NhcGVQcmVmaXh8fFwiLVwiLHRoaXMudW5lc2NhcGVTdWZmaXg9dGhpcy51bmVzY2FwZVByZWZpeD9cIlwiOnQudW5lc2NhcGVTdWZmaXh8fFwiXCIsdGhpcy5uZXN0aW5nUHJlZml4PXQubmVzdGluZ1ByZWZpeD9lbih0Lm5lc3RpbmdQcmVmaXgpOnQubmVzdGluZ1ByZWZpeEVzY2FwZWR8fGVuKFwiJHQoXCIpLHRoaXMubmVzdGluZ1N1ZmZpeD10Lm5lc3RpbmdTdWZmaXg/ZW4odC5uZXN0aW5nU3VmZml4KTp0Lm5lc3RpbmdTdWZmaXhFc2NhcGVkfHxlbihcIilcIiksdGhpcy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcj10Lm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yP3QubmVzdGluZ09wdGlvbnNTZXBhcmF0b3I6dC5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcnx8XCIsXCIsdGhpcy5tYXhSZXBsYWNlcz10Lm1heFJlcGxhY2VzP3QubWF4UmVwbGFjZXM6MWUzLHRoaXMuYWx3YXlzRm9ybWF0PXZvaWQgMCE9PXQuYWx3YXlzRm9ybWF0JiZ0LmFsd2F5c0Zvcm1hdCx0aGlzLnJlc2V0UmVnRXhwKCl9cmVzZXQoKXt0aGlzLm9wdGlvbnMmJnRoaXMuaW5pdCh0aGlzLm9wdGlvbnMpfXJlc2V0UmVnRXhwKCl7Y29uc3QgZT0oZSx0KT0+ZSYmZS5zb3VyY2U9PT10PyhlLmxhc3RJbmRleD0wLGUpOm5ldyBSZWdFeHAodCxcImdcIik7dGhpcy5yZWdleHA9ZSh0aGlzLnJlZ2V4cCxgJHt0aGlzLnByZWZpeH0oLis/KSR7dGhpcy5zdWZmaXh9YCksdGhpcy5yZWdleHBVbmVzY2FwZT1lKHRoaXMucmVnZXhwVW5lc2NhcGUsYCR7dGhpcy5wcmVmaXh9JHt0aGlzLnVuZXNjYXBlUHJlZml4fSguKz8pJHt0aGlzLnVuZXNjYXBlU3VmZml4fSR7dGhpcy5zdWZmaXh9YCksdGhpcy5uZXN0aW5nUmVnZXhwPWUodGhpcy5uZXN0aW5nUmVnZXhwLGAke3RoaXMubmVzdGluZ1ByZWZpeH0oLis/KSR7dGhpcy5uZXN0aW5nU3VmZml4fWApfWludGVycG9sYXRlKGUsdCxuLHIpe2xldCBvLGEsaTtjb25zdCBsPXRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24mJnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXN8fHt9O2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUucmVwbGFjZSgvXFwkL2csXCIkJCQkXCIpfWNvbnN0IGM9ZT0+e2lmKGUuaW5kZXhPZih0aGlzLmZvcm1hdFNlcGFyYXRvcik8MCl7Y29uc3Qgbz1ibih0LGwsZSx0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yLHRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlKTtyZXR1cm4gdGhpcy5hbHdheXNGb3JtYXQ/dGhpcy5mb3JtYXQobyx2b2lkIDAsbix7Li4uciwuLi50LGludGVycG9sYXRpb25rZXk6ZX0pOm99Y29uc3Qgbz1lLnNwbGl0KHRoaXMuZm9ybWF0U2VwYXJhdG9yKSxhPW8uc2hpZnQoKS50cmltKCksaT1vLmpvaW4odGhpcy5mb3JtYXRTZXBhcmF0b3IpLnRyaW0oKTtyZXR1cm4gdGhpcy5mb3JtYXQoYm4odCxsLGEsdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcix0aGlzLm9wdGlvbnMuaWdub3JlSlNPTlN0cnVjdHVyZSksaSxuLHsuLi5yLC4uLnQsaW50ZXJwb2xhdGlvbmtleTphfSl9O3RoaXMucmVzZXRSZWdFeHAoKTtjb25zdCB1PXImJnIubWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyfHx0aGlzLm9wdGlvbnMubWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyLGQ9ciYmci5pbnRlcnBvbGF0aW9uJiZ2b2lkIDAhPT1yLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzP3IuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM6dGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzO3JldHVyblt7cmVnZXg6dGhpcy5yZWdleHBVbmVzY2FwZSxzYWZlVmFsdWU6ZT0+cyhlKX0se3JlZ2V4OnRoaXMucmVnZXhwLHNhZmVWYWx1ZTplPT50aGlzLmVzY2FwZVZhbHVlP3ModGhpcy5lc2NhcGUoZSkpOnMoZSl9XS5mb3JFYWNoKCh0PT57Zm9yKGk9MDtvPXQucmVnZXguZXhlYyhlKTspe2NvbnN0IG49b1sxXS50cmltKCk7aWYoYT1jKG4pLHZvaWQgMD09PWEpaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdSl7Y29uc3QgdD11KGUsbyxyKTthPVwic3RyaW5nXCI9PXR5cGVvZiB0P3Q6XCJcIn1lbHNlIGlmKHImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pKWE9XCJcIjtlbHNle2lmKGQpe2E9b1swXTtjb250aW51ZX10aGlzLmxvZ2dlci53YXJuKGBtaXNzZWQgdG8gcGFzcyBpbiB2YXJpYWJsZSAke259IGZvciBpbnRlcnBvbGF0aW5nICR7ZX1gKSxhPVwiXCJ9ZWxzZVwic3RyaW5nXCI9PXR5cGVvZiBhfHx0aGlzLnVzZVJhd1ZhbHVlVG9Fc2NhcGV8fChhPUt0KGEpKTtjb25zdCBsPXQuc2FmZVZhbHVlKGEpO2lmKGU9ZS5yZXBsYWNlKG9bMF0sbCksZD8odC5yZWdleC5sYXN0SW5kZXgrPWEubGVuZ3RoLHQucmVnZXgubGFzdEluZGV4LT1vWzBdLmxlbmd0aCk6dC5yZWdleC5sYXN0SW5kZXg9MCxpKyssaT49dGhpcy5tYXhSZXBsYWNlcylicmVha319KSksZX1uZXN0KGUsdCl7bGV0IG4scixvLGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2Z1bmN0aW9uIGkoZSx0KXtjb25zdCBuPXRoaXMubmVzdGluZ09wdGlvbnNTZXBhcmF0b3I7aWYoZS5pbmRleE9mKG4pPDApcmV0dXJuIGU7Y29uc3Qgcj1lLnNwbGl0KG5ldyBSZWdFeHAoYCR7bn1bIF0qe2ApKTtsZXQgYT1geyR7clsxXX1gO2U9clswXSxhPXRoaXMuaW50ZXJwb2xhdGUoYSxvKTtjb25zdCBpPWEubWF0Y2goLycvZyksbD1hLm1hdGNoKC9cIi9nKTsoaSYmaS5sZW5ndGglMj09MCYmIWx8fGwubGVuZ3RoJTIhPTApJiYoYT1hLnJlcGxhY2UoLycvZywnXCInKSk7dHJ5e289SlNPTi5wYXJzZShhKSx0JiYobz17Li4udCwuLi5vfSl9Y2F0Y2godCl7cmV0dXJuIHRoaXMubG9nZ2VyLndhcm4oYGZhaWxlZCBwYXJzaW5nIG9wdGlvbnMgc3RyaW5nIGluIG5lc3RpbmcgZm9yIGtleSAke2V9YCx0KSxgJHtlfSR7bn0ke2F9YH1yZXR1cm4gZGVsZXRlIG8uZGVmYXVsdFZhbHVlLGV9Zm9yKDtuPXRoaXMubmVzdGluZ1JlZ2V4cC5leGVjKGUpOyl7bGV0IGw9W107bz17Li4uYX0sbz1vLnJlcGxhY2UmJlwic3RyaW5nXCIhPXR5cGVvZiBvLnJlcGxhY2U/by5yZXBsYWNlOm8sby5hcHBseVBvc3RQcm9jZXNzb3I9ITEsZGVsZXRlIG8uZGVmYXVsdFZhbHVlO2xldCBzPSExO2lmKC0xIT09blswXS5pbmRleE9mKHRoaXMuZm9ybWF0U2VwYXJhdG9yKSYmIS97Lip9Ly50ZXN0KG5bMV0pKXtjb25zdCBlPW5bMV0uc3BsaXQodGhpcy5mb3JtYXRTZXBhcmF0b3IpLm1hcCgoZT0+ZS50cmltKCkpKTtuWzFdPWUuc2hpZnQoKSxsPWUscz0hMH1pZihyPXQoaS5jYWxsKHRoaXMsblsxXS50cmltKCksbyksbyksciYmblswXT09PWUmJlwic3RyaW5nXCIhPXR5cGVvZiByKXJldHVybiByO1wic3RyaW5nXCIhPXR5cGVvZiByJiYocj1LdChyKSkscnx8KHRoaXMubG9nZ2VyLndhcm4oYG1pc3NlZCB0byByZXNvbHZlICR7blsxXX0gZm9yIG5lc3RpbmcgJHtlfWApLHI9XCJcIikscyYmKHI9bC5yZWR1Y2UoKChlLHQpPT50aGlzLmZvcm1hdChlLHQsYS5sbmcsey4uLmEsaW50ZXJwb2xhdGlvbmtleTpuWzFdLnRyaW0oKX0pKSxyLnRyaW0oKSkpLGU9ZS5yZXBsYWNlKG5bMF0sciksdGhpcy5yZWdleHAubGFzdEluZGV4PTB9cmV0dXJuIGV9fWZ1bmN0aW9uIHhuKGUpe2NvbnN0IHQ9e307cmV0dXJuIGZ1bmN0aW9uKG4scixvKXtjb25zdCBhPXIrSlNPTi5zdHJpbmdpZnkobyk7bGV0IGk9dFthXTtyZXR1cm4gaXx8KGk9ZShsbihyKSxvKSx0W2FdPWkpLGkobil9fWNsYXNzIGtue2NvbnN0cnVjdG9yKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3RoaXMubG9nZ2VyPVV0LmNyZWF0ZShcImZvcm1hdHRlclwiKSx0aGlzLm9wdGlvbnM9ZSx0aGlzLmZvcm1hdHM9e251bWJlcjp4bigoKGUsdCk9Pntjb25zdCBuPW5ldyBJbnRsLk51bWJlckZvcm1hdChlLHsuLi50fSk7cmV0dXJuIGU9Pm4uZm9ybWF0KGUpfSkpLGN1cnJlbmN5OnhuKCgoZSx0KT0+e2NvbnN0IG49bmV3IEludGwuTnVtYmVyRm9ybWF0KGUsey4uLnQsc3R5bGU6XCJjdXJyZW5jeVwifSk7cmV0dXJuIGU9Pm4uZm9ybWF0KGUpfSkpLGRhdGV0aW1lOnhuKCgoZSx0KT0+e2NvbnN0IG49bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoZSx7Li4udH0pO3JldHVybiBlPT5uLmZvcm1hdChlKX0pKSxyZWxhdGl2ZXRpbWU6eG4oKChlLHQpPT57Y29uc3Qgbj1uZXcgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQoZSx7Li4udH0pO3JldHVybiBlPT5uLmZvcm1hdChlLHQucmFuZ2V8fFwiZGF5XCIpfSkpLGxpc3Q6eG4oKChlLHQpPT57Y29uc3Qgbj1uZXcgSW50bC5MaXN0Rm9ybWF0KGUsey4uLnR9KTtyZXR1cm4gZT0+bi5mb3JtYXQoZSl9KSl9LHRoaXMuaW5pdChlKX1pbml0KGUpe2NvbnN0IHQ9KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7aW50ZXJwb2xhdGlvbjp7fX0pLmludGVycG9sYXRpb247dGhpcy5mb3JtYXRTZXBhcmF0b3I9dC5mb3JtYXRTZXBhcmF0b3I/dC5mb3JtYXRTZXBhcmF0b3I6dC5mb3JtYXRTZXBhcmF0b3J8fFwiLFwifWFkZChlLHQpe3RoaXMuZm9ybWF0c1tlLnRvTG93ZXJDYXNlKCkudHJpbSgpXT10fWFkZENhY2hlZChlLHQpe3RoaXMuZm9ybWF0c1tlLnRvTG93ZXJDYXNlKCkudHJpbSgpXT14bih0KX1mb3JtYXQoZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7fTtyZXR1cm4gdC5zcGxpdCh0aGlzLmZvcm1hdFNlcGFyYXRvcikucmVkdWNlKCgoZSx0KT0+e2NvbnN0e2Zvcm1hdE5hbWU6byxmb3JtYXRPcHRpb25zOmF9PWZ1bmN0aW9uKGUpe2xldCB0PWUudG9Mb3dlckNhc2UoKS50cmltKCk7Y29uc3Qgbj17fTtpZihlLmluZGV4T2YoXCIoXCIpPi0xKXtjb25zdCByPWUuc3BsaXQoXCIoXCIpO3Q9clswXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtjb25zdCBvPXJbMV0uc3Vic3RyaW5nKDAsclsxXS5sZW5ndGgtMSk7XCJjdXJyZW5jeVwiPT09dCYmby5pbmRleE9mKFwiOlwiKTwwP24uY3VycmVuY3l8fChuLmN1cnJlbmN5PW8udHJpbSgpKTpcInJlbGF0aXZldGltZVwiPT09dCYmby5pbmRleE9mKFwiOlwiKTwwP24ucmFuZ2V8fChuLnJhbmdlPW8udHJpbSgpKTpvLnNwbGl0KFwiO1wiKS5mb3JFYWNoKChlPT57aWYoIWUpcmV0dXJuO2NvbnN0W3QsLi4ucl09ZS5zcGxpdChcIjpcIiksbz1yLmpvaW4oXCI6XCIpLnRyaW0oKS5yZXBsYWNlKC9eJyt8JyskL2csXCJcIik7blt0LnRyaW0oKV18fChuW3QudHJpbSgpXT1vKSxcImZhbHNlXCI9PT1vJiYoblt0LnRyaW0oKV09ITEpLFwidHJ1ZVwiPT09byYmKG5bdC50cmltKCldPSEwKSxpc05hTihvKXx8KG5bdC50cmltKCldPXBhcnNlSW50KG8sMTApKX0pKX1yZXR1cm57Zm9ybWF0TmFtZTp0LGZvcm1hdE9wdGlvbnM6bn19KHQpO2lmKHRoaXMuZm9ybWF0c1tvXSl7bGV0IHQ9ZTt0cnl7Y29uc3QgaT1yJiZyLmZvcm1hdFBhcmFtcyYmci5mb3JtYXRQYXJhbXNbci5pbnRlcnBvbGF0aW9ua2V5XXx8e30sbD1pLmxvY2FsZXx8aS5sbmd8fHIubG9jYWxlfHxyLmxuZ3x8bjt0PXRoaXMuZm9ybWF0c1tvXShlLGwsey4uLmEsLi4uciwuLi5pfSl9Y2F0Y2goZSl7dGhpcy5sb2dnZXIud2FybihlKX1yZXR1cm4gdH1yZXR1cm4gdGhpcy5sb2dnZXIud2FybihgdGhlcmUgd2FzIG5vIGZvcm1hdCBmdW5jdGlvbiBmb3IgJHtvfWApLGV9KSxlKX19Y2xhc3MgU24gZXh0ZW5kcyB6dHtjb25zdHJ1Y3RvcihlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O3N1cGVyKCksdGhpcy5iYWNrZW5kPWUsdGhpcy5zdG9yZT10LHRoaXMuc2VydmljZXM9bix0aGlzLmxhbmd1YWdlVXRpbHM9bi5sYW5ndWFnZVV0aWxzLHRoaXMub3B0aW9ucz1yLHRoaXMubG9nZ2VyPVV0LmNyZWF0ZShcImJhY2tlbmRDb25uZWN0b3JcIiksdGhpcy53YWl0aW5nUmVhZHM9W10sdGhpcy5tYXhQYXJhbGxlbFJlYWRzPXIubWF4UGFyYWxsZWxSZWFkc3x8MTAsdGhpcy5yZWFkaW5nQ2FsbHM9MCx0aGlzLm1heFJldHJpZXM9ci5tYXhSZXRyaWVzPj0wP3IubWF4UmV0cmllczo1LHRoaXMucmV0cnlUaW1lb3V0PXIucmV0cnlUaW1lb3V0Pj0xP3IucmV0cnlUaW1lb3V0OjM1MCx0aGlzLnN0YXRlPXt9LHRoaXMucXVldWU9W10sdGhpcy5iYWNrZW5kJiZ0aGlzLmJhY2tlbmQuaW5pdCYmdGhpcy5iYWNrZW5kLmluaXQobixyLmJhY2tlbmQscil9cXVldWVMb2FkKGUsdCxuLHIpe2NvbnN0IG89e30sYT17fSxpPXt9LGw9e307cmV0dXJuIGUuZm9yRWFjaCgoZT0+e2xldCByPSEwO3QuZm9yRWFjaCgodD0+e2NvbnN0IGk9YCR7ZX18JHt0fWA7IW4ucmVsb2FkJiZ0aGlzLnN0b3JlLmhhc1Jlc291cmNlQnVuZGxlKGUsdCk/dGhpcy5zdGF0ZVtpXT0yOnRoaXMuc3RhdGVbaV08MHx8KDE9PT10aGlzLnN0YXRlW2ldP3ZvaWQgMD09PWFbaV0mJihhW2ldPSEwKToodGhpcy5zdGF0ZVtpXT0xLHI9ITEsdm9pZCAwPT09YVtpXSYmKGFbaV09ITApLHZvaWQgMD09PW9baV0mJihvW2ldPSEwKSx2b2lkIDA9PT1sW3RdJiYobFt0XT0hMCkpKX0pKSxyfHwoaVtlXT0hMCl9KSksKE9iamVjdC5rZXlzKG8pLmxlbmd0aHx8T2JqZWN0LmtleXMoYSkubGVuZ3RoKSYmdGhpcy5xdWV1ZS5wdXNoKHtwZW5kaW5nOmEscGVuZGluZ0NvdW50Ok9iamVjdC5rZXlzKGEpLmxlbmd0aCxsb2FkZWQ6e30sZXJyb3JzOltdLGNhbGxiYWNrOnJ9KSx7dG9Mb2FkOk9iamVjdC5rZXlzKG8pLHBlbmRpbmc6T2JqZWN0LmtleXMoYSksdG9Mb2FkTGFuZ3VhZ2VzOk9iamVjdC5rZXlzKGkpLHRvTG9hZE5hbWVzcGFjZXM6T2JqZWN0LmtleXMobCl9fWxvYWRlZChlLHQsbil7Y29uc3Qgcj1lLnNwbGl0KFwifFwiKSxvPXJbMF0sYT1yWzFdO3QmJnRoaXMuZW1pdChcImZhaWxlZExvYWRpbmdcIixvLGEsdCksbiYmdGhpcy5zdG9yZS5hZGRSZXNvdXJjZUJ1bmRsZShvLGEsbiksdGhpcy5zdGF0ZVtlXT10Py0xOjI7Y29uc3QgaT17fTt0aGlzLnF1ZXVlLmZvckVhY2goKG49PnshZnVuY3Rpb24oZSx0LG4scil7Y29uc3R7b2JqOm8sazphfT1ZdChlLHQsT2JqZWN0KTtvW2FdPW9bYV18fFtdLHImJihvW2FdPW9bYV0uY29uY2F0KG4pKSxyfHxvW2FdLnB1c2gobil9KG4ubG9hZGVkLFtvXSxhKSxmdW5jdGlvbihlLHQpe3ZvaWQgMCE9PWUucGVuZGluZ1t0XSYmKGRlbGV0ZSBlLnBlbmRpbmdbdF0sZS5wZW5kaW5nQ291bnQtLSl9KG4sZSksdCYmbi5lcnJvcnMucHVzaCh0KSwwIT09bi5wZW5kaW5nQ291bnR8fG4uZG9uZXx8KE9iamVjdC5rZXlzKG4ubG9hZGVkKS5mb3JFYWNoKChlPT57aVtlXXx8KGlbZV09e30pO2NvbnN0IHQ9bi5sb2FkZWRbZV07dC5sZW5ndGgmJnQuZm9yRWFjaCgodD0+e3ZvaWQgMD09PWlbZV1bdF0mJihpW2VdW3RdPSEwKX0pKX0pKSxuLmRvbmU9ITAsbi5lcnJvcnMubGVuZ3RoP24uY2FsbGJhY2sobi5lcnJvcnMpOm4uY2FsbGJhY2soKSl9KSksdGhpcy5lbWl0KFwibG9hZGVkXCIsaSksdGhpcy5xdWV1ZT10aGlzLnF1ZXVlLmZpbHRlcigoZT0+IWUuZG9uZSkpfXJlYWQoZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLG89YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOnRoaXMucmV0cnlUaW1lb3V0LGE9YXJndW1lbnRzLmxlbmd0aD41P2FyZ3VtZW50c1s1XTp2b2lkIDA7aWYoIWUubGVuZ3RoKXJldHVybiBhKG51bGwse30pO2lmKHRoaXMucmVhZGluZ0NhbGxzPj10aGlzLm1heFBhcmFsbGVsUmVhZHMpcmV0dXJuIHZvaWQgdGhpcy53YWl0aW5nUmVhZHMucHVzaCh7bG5nOmUsbnM6dCxmY05hbWU6bix0cmllZDpyLHdhaXQ6byxjYWxsYmFjazphfSk7dGhpcy5yZWFkaW5nQ2FsbHMrKztjb25zdCBpPShpLGwpPT57aWYodGhpcy5yZWFkaW5nQ2FsbHMtLSx0aGlzLndhaXRpbmdSZWFkcy5sZW5ndGg+MCl7Y29uc3QgZT10aGlzLndhaXRpbmdSZWFkcy5zaGlmdCgpO3RoaXMucmVhZChlLmxuZyxlLm5zLGUuZmNOYW1lLGUudHJpZWQsZS53YWl0LGUuY2FsbGJhY2spfWkmJmwmJnI8dGhpcy5tYXhSZXRyaWVzP3NldFRpbWVvdXQoKCgpPT57dGhpcy5yZWFkLmNhbGwodGhpcyxlLHQsbixyKzEsMipvLGEpfSksbyk6YShpLGwpfSxsPXRoaXMuYmFja2VuZFtuXS5iaW5kKHRoaXMuYmFja2VuZCk7aWYoMiE9PWwubGVuZ3RoKXJldHVybiBsKGUsdCxpKTt0cnl7Y29uc3Qgbj1sKGUsdCk7biYmXCJmdW5jdGlvblwiPT10eXBlb2Ygbi50aGVuP24udGhlbigoZT0+aShudWxsLGUpKSkuY2F0Y2goaSk6aShudWxsLG4pfWNhdGNoKGUpe2koZSl9fXByZXBhcmVMb2FkaW5nKGUsdCl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LHI9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7aWYoIXRoaXMuYmFja2VuZClyZXR1cm4gdGhpcy5sb2dnZXIud2FybihcIk5vIGJhY2tlbmQgd2FzIGFkZGVkIHZpYSBpMThuZXh0LnVzZS4gV2lsbCBub3QgbG9hZCByZXNvdXJjZXMuXCIpLHImJnIoKTtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9dGhpcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeShlKSksXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PVt0XSk7Y29uc3Qgbz10aGlzLnF1ZXVlTG9hZChlLHQsbixyKTtpZighby50b0xvYWQubGVuZ3RoKXJldHVybiBvLnBlbmRpbmcubGVuZ3RofHxyKCksbnVsbDtvLnRvTG9hZC5mb3JFYWNoKChlPT57dGhpcy5sb2FkT25lKGUpfSkpfWxvYWQoZSx0LG4pe3RoaXMucHJlcGFyZUxvYWRpbmcoZSx0LHt9LG4pfXJlbG9hZChlLHQsbil7dGhpcy5wcmVwYXJlTG9hZGluZyhlLHQse3JlbG9hZDohMH0sbil9bG9hZE9uZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06XCJcIjtjb25zdCBuPWUuc3BsaXQoXCJ8XCIpLHI9blswXSxvPW5bMV07dGhpcy5yZWFkKHIsbyxcInJlYWRcIix2b2lkIDAsdm9pZCAwLCgobixhKT0+e24mJnRoaXMubG9nZ2VyLndhcm4oYCR7dH1sb2FkaW5nIG5hbWVzcGFjZSAke299IGZvciBsYW5ndWFnZSAke3J9IGZhaWxlZGAsbiksIW4mJmEmJnRoaXMubG9nZ2VyLmxvZyhgJHt0fWxvYWRlZCBuYW1lc3BhY2UgJHtvfSBmb3IgbGFuZ3VhZ2UgJHtyfWAsYSksdGhpcy5sb2FkZWQoZSxuLGEpfSkpfXNhdmVNaXNzaW5nKGUsdCxuLHIsbyl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0/YXJndW1lbnRzWzVdOnt9LGk9YXJndW1lbnRzLmxlbmd0aD42JiZ2b2lkIDAhPT1hcmd1bWVudHNbNl0/YXJndW1lbnRzWzZdOigpPT57fTtpZih0aGlzLnNlcnZpY2VzLnV0aWxzJiZ0aGlzLnNlcnZpY2VzLnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSYmIXRoaXMuc2VydmljZXMudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlKHQpKXRoaXMubG9nZ2VyLndhcm4oYGRpZCBub3Qgc2F2ZSBrZXkgXCIke259XCIgYXMgdGhlIG5hbWVzcGFjZSBcIiR7dH1cIiB3YXMgbm90IHlldCBsb2FkZWRgLFwiVGhpcyBtZWFucyBzb21ldGhpbmcgSVMgV1JPTkcgaW4geW91ciBzZXR1cC4gWW91IGFjY2VzcyB0aGUgdCBmdW5jdGlvbiBiZWZvcmUgaTE4bmV4dC5pbml0IC8gaTE4bmV4dC5sb2FkTmFtZXNwYWNlIC8gaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSB3YXMgZG9uZS4gV2FpdCBmb3IgdGhlIGNhbGxiYWNrIG9yIFByb21pc2UgdG8gcmVzb2x2ZSBiZWZvcmUgYWNjZXNzaW5nIGl0ISEhXCIpO2Vsc2UgaWYobnVsbCE9biYmXCJcIiE9PW4pe2lmKHRoaXMuYmFja2VuZCYmdGhpcy5iYWNrZW5kLmNyZWF0ZSl7Y29uc3QgbD17Li4uYSxpc1VwZGF0ZTpvfSxzPXRoaXMuYmFja2VuZC5jcmVhdGUuYmluZCh0aGlzLmJhY2tlbmQpO2lmKHMubGVuZ3RoPDYpdHJ5e2xldCBvO289NT09PXMubGVuZ3RoP3MoZSx0LG4scixsKTpzKGUsdCxuLHIpLG8mJlwiZnVuY3Rpb25cIj09dHlwZW9mIG8udGhlbj9vLnRoZW4oKGU9PmkobnVsbCxlKSkpLmNhdGNoKGkpOmkobnVsbCxvKX1jYXRjaChlKXtpKGUpfWVsc2UgcyhlLHQsbixyLGksbCl9ZSYmZVswXSYmdGhpcy5zdG9yZS5hZGRSZXNvdXJjZShlWzBdLHQsbixyKX19fWZ1bmN0aW9uIE9uKCl7cmV0dXJue2RlYnVnOiExLGluaXRJbW1lZGlhdGU6ITAsbnM6W1widHJhbnNsYXRpb25cIl0sZGVmYXVsdE5TOltcInRyYW5zbGF0aW9uXCJdLGZhbGxiYWNrTG5nOltcImRldlwiXSxmYWxsYmFja05TOiExLHN1cHBvcnRlZExuZ3M6ITEsbm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzOiExLGxvYWQ6XCJhbGxcIixwcmVsb2FkOiExLHNpbXBsaWZ5UGx1cmFsU3VmZml4OiEwLGtleVNlcGFyYXRvcjpcIi5cIixuc1NlcGFyYXRvcjpcIjpcIixwbHVyYWxTZXBhcmF0b3I6XCJfXCIsY29udGV4dFNlcGFyYXRvcjpcIl9cIixwYXJ0aWFsQnVuZGxlZExhbmd1YWdlczohMSxzYXZlTWlzc2luZzohMSx1cGRhdGVNaXNzaW5nOiExLHNhdmVNaXNzaW5nVG86XCJmYWxsYmFja1wiLHNhdmVNaXNzaW5nUGx1cmFsczohMCxtaXNzaW5nS2V5SGFuZGxlcjohMSxtaXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXI6ITEscG9zdFByb2Nlc3M6ITEscG9zdFByb2Nlc3NQYXNzUmVzb2x2ZWQ6ITEscmV0dXJuTnVsbDohMSxyZXR1cm5FbXB0eVN0cmluZzohMCxyZXR1cm5PYmplY3RzOiExLGpvaW5BcnJheXM6ITEscmV0dXJuZWRPYmplY3RIYW5kbGVyOiExLHBhcnNlTWlzc2luZ0tleUhhbmRsZXI6ITEsYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5OiExLGFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlOiExLG92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyOmZ1bmN0aW9uKGUpe2xldCB0PXt9O2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlWzFdJiYodD1lWzFdKSxcInN0cmluZ1wiPT10eXBlb2YgZVsxXSYmKHQuZGVmYXVsdFZhbHVlPWVbMV0pLFwic3RyaW5nXCI9PXR5cGVvZiBlWzJdJiYodC50RGVzY3JpcHRpb249ZVsyXSksXCJvYmplY3RcIj09dHlwZW9mIGVbMl18fFwib2JqZWN0XCI9PXR5cGVvZiBlWzNdKXtjb25zdCBuPWVbM118fGVbMl07T2JqZWN0LmtleXMobikuZm9yRWFjaCgoZT0+e3RbZV09bltlXX0pKX1yZXR1cm4gdH0saW50ZXJwb2xhdGlvbjp7ZXNjYXBlVmFsdWU6ITAsZm9ybWF0OmU9PmUscHJlZml4Olwie3tcIixzdWZmaXg6XCJ9fVwiLGZvcm1hdFNlcGFyYXRvcjpcIixcIix1bmVzY2FwZVByZWZpeDpcIi1cIixuZXN0aW5nUHJlZml4OlwiJHQoXCIsbmVzdGluZ1N1ZmZpeDpcIilcIixuZXN0aW5nT3B0aW9uc1NlcGFyYXRvcjpcIixcIixtYXhSZXBsYWNlczoxZTMsc2tpcE9uVmFyaWFibGVzOiEwfX19ZnVuY3Rpb24gTW4oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUubnMmJihlLm5zPVtlLm5zXSksXCJzdHJpbmdcIj09dHlwZW9mIGUuZmFsbGJhY2tMbmcmJihlLmZhbGxiYWNrTG5nPVtlLmZhbGxiYWNrTG5nXSksXCJzdHJpbmdcIj09dHlwZW9mIGUuZmFsbGJhY2tOUyYmKGUuZmFsbGJhY2tOUz1bZS5mYWxsYmFja05TXSksZS5zdXBwb3J0ZWRMbmdzJiZlLnN1cHBvcnRlZExuZ3MuaW5kZXhPZihcImNpbW9kZVwiKTwwJiYoZS5zdXBwb3J0ZWRMbmdzPWUuc3VwcG9ydGVkTG5ncy5jb25jYXQoW1wiY2ltb2RlXCJdKSksZX1mdW5jdGlvbiBMbigpe31jbGFzcyBfbiBleHRlbmRzIHp0e2NvbnN0cnVjdG9yKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7dmFyIG47aWYoc3VwZXIoKSx0aGlzLm9wdGlvbnM9TW4oZSksdGhpcy5zZXJ2aWNlcz17fSx0aGlzLmxvZ2dlcj1VdCx0aGlzLm1vZHVsZXM9e2V4dGVybmFsOltdfSxuPXRoaXMsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pKS5mb3JFYWNoKChlPT57XCJmdW5jdGlvblwiPT10eXBlb2YgbltlXSYmKG5bZV09bltlXS5iaW5kKG4pKX0pKSx0JiYhdGhpcy5pc0luaXRpYWxpemVkJiYhZS5pc0Nsb25lKXtpZighdGhpcy5vcHRpb25zLmluaXRJbW1lZGlhdGUpcmV0dXJuIHRoaXMuaW5pdChlLHQpLHRoaXM7c2V0VGltZW91dCgoKCk9Pnt0aGlzLmluaXQoZSx0KX0pLDApfX1pbml0KCl7dmFyIGU9dGhpcztsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sbj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYobj10LHQ9e30pLCF0LmRlZmF1bHROUyYmITEhPT10LmRlZmF1bHROUyYmdC5ucyYmKFwic3RyaW5nXCI9PXR5cGVvZiB0Lm5zP3QuZGVmYXVsdE5TPXQubnM6dC5ucy5pbmRleE9mKFwidHJhbnNsYXRpb25cIik8MCYmKHQuZGVmYXVsdE5TPXQubnNbMF0pKTtjb25zdCByPU9uKCk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZT9cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP25ldyBlOmU6bnVsbH1pZih0aGlzLm9wdGlvbnM9ey4uLnIsLi4udGhpcy5vcHRpb25zLC4uLk1uKHQpfSxcInYxXCIhPT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQSSYmKHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uPXsuLi5yLmludGVycG9sYXRpb24sLi4udGhpcy5vcHRpb25zLmludGVycG9sYXRpb259KSx2b2lkIDAhPT10LmtleVNlcGFyYXRvciYmKHRoaXMub3B0aW9ucy51c2VyRGVmaW5lZEtleVNlcGFyYXRvcj10LmtleVNlcGFyYXRvciksdm9pZCAwIT09dC5uc1NlcGFyYXRvciYmKHRoaXMub3B0aW9ucy51c2VyRGVmaW5lZE5zU2VwYXJhdG9yPXQubnNTZXBhcmF0b3IpLCF0aGlzLm9wdGlvbnMuaXNDbG9uZSl7bGV0IHQ7dGhpcy5tb2R1bGVzLmxvZ2dlcj9VdC5pbml0KG8odGhpcy5tb2R1bGVzLmxvZ2dlciksdGhpcy5vcHRpb25zKTpVdC5pbml0KG51bGwsdGhpcy5vcHRpb25zKSx0aGlzLm1vZHVsZXMuZm9ybWF0dGVyP3Q9dGhpcy5tb2R1bGVzLmZvcm1hdHRlcjpcInVuZGVmaW5lZFwiIT10eXBlb2YgSW50bCYmKHQ9a24pO2NvbnN0IG49bmV3IGZuKHRoaXMub3B0aW9ucyk7dGhpcy5zdG9yZT1uZXcgc24odGhpcy5vcHRpb25zLnJlc291cmNlcyx0aGlzLm9wdGlvbnMpO2NvbnN0IGE9dGhpcy5zZXJ2aWNlczthLmxvZ2dlcj1VdCxhLnJlc291cmNlU3RvcmU9dGhpcy5zdG9yZSxhLmxhbmd1YWdlVXRpbHM9bixhLnBsdXJhbFJlc29sdmVyPW5ldyB3bihuLHtwcmVwZW5kOnRoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3IsY29tcGF0aWJpbGl0eUpTT046dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OLHNpbXBsaWZ5UGx1cmFsU3VmZml4OnRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeH0pLCF0fHx0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQmJnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdCE9PXIuaW50ZXJwb2xhdGlvbi5mb3JtYXR8fChhLmZvcm1hdHRlcj1vKHQpLGEuZm9ybWF0dGVyLmluaXQoYSx0aGlzLm9wdGlvbnMpLHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdD1hLmZvcm1hdHRlci5mb3JtYXQuYmluZChhLmZvcm1hdHRlcikpLGEuaW50ZXJwb2xhdG9yPW5ldyB5bih0aGlzLm9wdGlvbnMpLGEudXRpbHM9e2hhc0xvYWRlZE5hbWVzcGFjZTp0aGlzLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKHRoaXMpfSxhLmJhY2tlbmRDb25uZWN0b3I9bmV3IFNuKG8odGhpcy5tb2R1bGVzLmJhY2tlbmQpLGEucmVzb3VyY2VTdG9yZSxhLHRoaXMub3B0aW9ucyksYS5iYWNrZW5kQ29ubmVjdG9yLm9uKFwiKlwiLChmdW5jdGlvbih0KXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShuPjE/bi0xOjApLG89MTtvPG47bysrKXJbby0xXT1hcmd1bWVudHNbb107ZS5lbWl0KHQsLi4ucil9KSksdGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3ImJihhLmxhbmd1YWdlRGV0ZWN0b3I9byh0aGlzLm1vZHVsZXMubGFuZ3VhZ2VEZXRlY3RvciksYS5sYW5ndWFnZURldGVjdG9yLmluaXQmJmEubGFuZ3VhZ2VEZXRlY3Rvci5pbml0KGEsdGhpcy5vcHRpb25zLmRldGVjdGlvbix0aGlzLm9wdGlvbnMpKSx0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdCYmKGEuaTE4bkZvcm1hdD1vKHRoaXMubW9kdWxlcy5pMThuRm9ybWF0KSxhLmkxOG5Gb3JtYXQuaW5pdCYmYS5pMThuRm9ybWF0LmluaXQodGhpcykpLHRoaXMudHJhbnNsYXRvcj1uZXcgZG4odGhpcy5zZXJ2aWNlcyx0aGlzLm9wdGlvbnMpLHRoaXMudHJhbnNsYXRvci5vbihcIipcIiwoZnVuY3Rpb24odCl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4xP24tMTowKSxvPTE7bzxuO28rKylyW28tMV09YXJndW1lbnRzW29dO2UuZW1pdCh0LC4uLnIpfSkpLHRoaXMubW9kdWxlcy5leHRlcm5hbC5mb3JFYWNoKChlPT57ZS5pbml0JiZlLmluaXQodGhpcyl9KSl9aWYodGhpcy5mb3JtYXQ9dGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZm9ybWF0LG58fChuPUxuKSx0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcmJiF0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3ImJiF0aGlzLm9wdGlvbnMubG5nKXtjb25zdCBlPXRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyk7ZS5sZW5ndGg+MCYmXCJkZXZcIiE9PWVbMF0mJih0aGlzLm9wdGlvbnMubG5nPWVbMF0pfXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvcnx8dGhpcy5vcHRpb25zLmxuZ3x8dGhpcy5sb2dnZXIud2FybihcImluaXQ6IG5vIGxhbmd1YWdlRGV0ZWN0b3IgaXMgdXNlZCBhbmQgbm8gbG5nIGlzIGRlZmluZWRcIik7W1wiZ2V0UmVzb3VyY2VcIixcImhhc1Jlc291cmNlQnVuZGxlXCIsXCJnZXRSZXNvdXJjZUJ1bmRsZVwiLFwiZ2V0RGF0YUJ5TGFuZ3VhZ2VcIl0uZm9yRWFjaCgodD0+e3RoaXNbdF09ZnVuY3Rpb24oKXtyZXR1cm4gZS5zdG9yZVt0XSguLi5hcmd1bWVudHMpfX0pKTtbXCJhZGRSZXNvdXJjZVwiLFwiYWRkUmVzb3VyY2VzXCIsXCJhZGRSZXNvdXJjZUJ1bmRsZVwiLFwicmVtb3ZlUmVzb3VyY2VCdW5kbGVcIl0uZm9yRWFjaCgodD0+e3RoaXNbdF09ZnVuY3Rpb24oKXtyZXR1cm4gZS5zdG9yZVt0XSguLi5hcmd1bWVudHMpLGV9fSkpO2NvbnN0IGE9R3QoKSxpPSgpPT57Y29uc3QgZT0oZSx0KT0+e3RoaXMuaXNJbml0aWFsaXplZCYmIXRoaXMuaW5pdGlhbGl6ZWRTdG9yZU9uY2UmJnRoaXMubG9nZ2VyLndhcm4oXCJpbml0OiBpMThuZXh0IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuIFlvdSBzaG91bGQgY2FsbCBpbml0IGp1c3Qgb25jZSFcIiksdGhpcy5pc0luaXRpYWxpemVkPSEwLHRoaXMub3B0aW9ucy5pc0Nsb25lfHx0aGlzLmxvZ2dlci5sb2coXCJpbml0aWFsaXplZFwiLHRoaXMub3B0aW9ucyksdGhpcy5lbWl0KFwiaW5pdGlhbGl6ZWRcIix0aGlzLm9wdGlvbnMpLGEucmVzb2x2ZSh0KSxuKGUsdCl9O2lmKHRoaXMubGFuZ3VhZ2VzJiZcInYxXCIhPT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQSSYmIXRoaXMuaXNJbml0aWFsaXplZClyZXR1cm4gZShudWxsLHRoaXMudC5iaW5kKHRoaXMpKTt0aGlzLmNoYW5nZUxhbmd1YWdlKHRoaXMub3B0aW9ucy5sbmcsZSl9O3JldHVybiB0aGlzLm9wdGlvbnMucmVzb3VyY2VzfHwhdGhpcy5vcHRpb25zLmluaXRJbW1lZGlhdGU/aSgpOnNldFRpbWVvdXQoaSwwKSxhfWxvYWRSZXNvdXJjZXMoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOkxuO2NvbnN0IG49XCJzdHJpbmdcIj09dHlwZW9mIGU/ZTp0aGlzLmxhbmd1YWdlO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJih0PWUpLCF0aGlzLm9wdGlvbnMucmVzb3VyY2VzfHx0aGlzLm9wdGlvbnMucGFydGlhbEJ1bmRsZWRMYW5ndWFnZXMpe2lmKG4mJlwiY2ltb2RlXCI9PT1uLnRvTG93ZXJDYXNlKCkmJighdGhpcy5vcHRpb25zLnByZWxvYWR8fDA9PT10aGlzLm9wdGlvbnMucHJlbG9hZC5sZW5ndGgpKXJldHVybiB0KCk7Y29uc3QgZT1bXSxyPXQ9PntpZighdClyZXR1cm47aWYoXCJjaW1vZGVcIj09PXQpcmV0dXJuO3RoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkodCkuZm9yRWFjaCgodD0+e1wiY2ltb2RlXCIhPT10JiZlLmluZGV4T2YodCk8MCYmZS5wdXNoKHQpfSkpfTtpZihuKXIobik7ZWxzZXt0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpLmZvckVhY2goKGU9PnIoZSkpKX10aGlzLm9wdGlvbnMucHJlbG9hZCYmdGhpcy5vcHRpb25zLnByZWxvYWQuZm9yRWFjaCgoZT0+cihlKSkpLHRoaXMuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5sb2FkKGUsdGhpcy5vcHRpb25zLm5zLChlPT57ZXx8dGhpcy5yZXNvbHZlZExhbmd1YWdlfHwhdGhpcy5sYW5ndWFnZXx8dGhpcy5zZXRSZXNvbHZlZExhbmd1YWdlKHRoaXMubGFuZ3VhZ2UpLHQoZSl9KSl9ZWxzZSB0KG51bGwpfXJlbG9hZFJlc291cmNlcyhlLHQsbil7Y29uc3Qgcj1HdCgpO3JldHVybiBlfHwoZT10aGlzLmxhbmd1YWdlcyksdHx8KHQ9dGhpcy5vcHRpb25zLm5zKSxufHwobj1MbiksdGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLnJlbG9hZChlLHQsKGU9PntyLnJlc29sdmUoKSxuKGUpfSkpLHJ9dXNlKGUpe2lmKCFlKXRocm93IG5ldyBFcnJvcihcIllvdSBhcmUgcGFzc2luZyBhbiB1bmRlZmluZWQgbW9kdWxlISBQbGVhc2UgY2hlY2sgdGhlIG9iamVjdCB5b3UgYXJlIHBhc3NpbmcgdG8gaTE4bmV4dC51c2UoKVwiKTtpZighZS50eXBlKXRocm93IG5ldyBFcnJvcihcIllvdSBhcmUgcGFzc2luZyBhIHdyb25nIG1vZHVsZSEgUGxlYXNlIGNoZWNrIHRoZSBvYmplY3QgeW91IGFyZSBwYXNzaW5nIHRvIGkxOG5leHQudXNlKClcIik7cmV0dXJuXCJiYWNrZW5kXCI9PT1lLnR5cGUmJih0aGlzLm1vZHVsZXMuYmFja2VuZD1lKSwoXCJsb2dnZXJcIj09PWUudHlwZXx8ZS5sb2cmJmUud2FybiYmZS5lcnJvcikmJih0aGlzLm1vZHVsZXMubG9nZ2VyPWUpLFwibGFuZ3VhZ2VEZXRlY3RvclwiPT09ZS50eXBlJiYodGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3I9ZSksXCJpMThuRm9ybWF0XCI9PT1lLnR5cGUmJih0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdD1lKSxcInBvc3RQcm9jZXNzb3JcIj09PWUudHlwZSYmY24uYWRkUG9zdFByb2Nlc3NvcihlKSxcImZvcm1hdHRlclwiPT09ZS50eXBlJiYodGhpcy5tb2R1bGVzLmZvcm1hdHRlcj1lKSxcIjNyZFBhcnR5XCI9PT1lLnR5cGUmJnRoaXMubW9kdWxlcy5leHRlcm5hbC5wdXNoKGUpLHRoaXN9c2V0UmVzb2x2ZWRMYW5ndWFnZShlKXtpZihlJiZ0aGlzLmxhbmd1YWdlcyYmIShbXCJjaW1vZGVcIixcImRldlwiXS5pbmRleE9mKGUpPi0xKSlmb3IobGV0IGU9MDtlPHRoaXMubGFuZ3VhZ2VzLmxlbmd0aDtlKyspe2NvbnN0IHQ9dGhpcy5sYW5ndWFnZXNbZV07aWYoIShbXCJjaW1vZGVcIixcImRldlwiXS5pbmRleE9mKHQpPi0xKSYmdGhpcy5zdG9yZS5oYXNMYW5ndWFnZVNvbWVUcmFuc2xhdGlvbnModCkpe3RoaXMucmVzb2x2ZWRMYW5ndWFnZT10O2JyZWFrfX19Y2hhbmdlTGFuZ3VhZ2UoZSx0KXt2YXIgbj10aGlzO3RoaXMuaXNMYW5ndWFnZUNoYW5naW5nVG89ZTtjb25zdCByPUd0KCk7dGhpcy5lbWl0KFwibGFuZ3VhZ2VDaGFuZ2luZ1wiLGUpO2NvbnN0IG89ZT0+e3RoaXMubGFuZ3VhZ2U9ZSx0aGlzLmxhbmd1YWdlcz10aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGUpLHRoaXMucmVzb2x2ZWRMYW5ndWFnZT12b2lkIDAsdGhpcy5zZXRSZXNvbHZlZExhbmd1YWdlKGUpfSxhPShlLGEpPT57YT8obyhhKSx0aGlzLnRyYW5zbGF0b3IuY2hhbmdlTGFuZ3VhZ2UoYSksdGhpcy5pc0xhbmd1YWdlQ2hhbmdpbmdUbz12b2lkIDAsdGhpcy5lbWl0KFwibGFuZ3VhZ2VDaGFuZ2VkXCIsYSksdGhpcy5sb2dnZXIubG9nKFwibGFuZ3VhZ2VDaGFuZ2VkXCIsYSkpOnRoaXMuaXNMYW5ndWFnZUNoYW5naW5nVG89dm9pZCAwLHIucmVzb2x2ZSgoZnVuY3Rpb24oKXtyZXR1cm4gbi50KC4uLmFyZ3VtZW50cyl9KSksdCYmdChlLChmdW5jdGlvbigpe3JldHVybiBuLnQoLi4uYXJndW1lbnRzKX0pKX0saT10PT57ZXx8dHx8IXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvcnx8KHQ9W10pO2NvbnN0IG49XCJzdHJpbmdcIj09dHlwZW9mIHQ/dDp0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0QmVzdE1hdGNoRnJvbUNvZGVzKHQpO24mJih0aGlzLmxhbmd1YWdlfHxvKG4pLHRoaXMudHJhbnNsYXRvci5sYW5ndWFnZXx8dGhpcy50cmFuc2xhdG9yLmNoYW5nZUxhbmd1YWdlKG4pLHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciYmdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmNhY2hlVXNlckxhbmd1YWdlJiZ0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuY2FjaGVVc2VyTGFuZ3VhZ2UobikpLHRoaXMubG9hZFJlc291cmNlcyhuLChlPT57YShlLG4pfSkpfTtyZXR1cm4gZXx8IXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvcnx8dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmFzeW5jPyFlJiZ0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3ImJnRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5hc3luYz8wPT09dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdC5sZW5ndGg/dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdCgpLnRoZW4oaSk6dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdChpKTppKGUpOmkodGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdCgpKSxyfWdldEZpeGVkVChlLHQsbil7dmFyIHI9dGhpcztjb25zdCBvPWZ1bmN0aW9uKGUsdCl7bGV0IGE7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHQpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGk+Mj9pLTI6MCkscz0yO3M8aTtzKyspbFtzLTJdPWFyZ3VtZW50c1tzXTthPXIub3B0aW9ucy5vdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlcihbZSx0XS5jb25jYXQobCkpfWVsc2UgYT17Li4udH07YS5sbmc9YS5sbmd8fG8ubG5nLGEubG5ncz1hLmxuZ3N8fG8ubG5ncyxhLm5zPWEubnN8fG8ubnMsYS5rZXlQcmVmaXg9YS5rZXlQcmVmaXh8fG58fG8ua2V5UHJlZml4O2NvbnN0IGM9ci5vcHRpb25zLmtleVNlcGFyYXRvcnx8XCIuXCI7bGV0IHU7cmV0dXJuIHU9YS5rZXlQcmVmaXgmJkFycmF5LmlzQXJyYXkoZSk/ZS5tYXAoKGU9PmAke2Eua2V5UHJlZml4fSR7Y30ke2V9YCkpOmEua2V5UHJlZml4P2Ake2Eua2V5UHJlZml4fSR7Y30ke2V9YDplLHIudCh1LGEpfTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT9vLmxuZz1lOm8ubG5ncz1lLG8ubnM9dCxvLmtleVByZWZpeD1uLG99dCgpe3JldHVybiB0aGlzLnRyYW5zbGF0b3ImJnRoaXMudHJhbnNsYXRvci50cmFuc2xhdGUoLi4uYXJndW1lbnRzKX1leGlzdHMoKXtyZXR1cm4gdGhpcy50cmFuc2xhdG9yJiZ0aGlzLnRyYW5zbGF0b3IuZXhpc3RzKC4uLmFyZ3VtZW50cyl9c2V0RGVmYXVsdE5hbWVzcGFjZShlKXt0aGlzLm9wdGlvbnMuZGVmYXVsdE5TPWV9aGFzTG9hZGVkTmFtZXNwYWNlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighdGhpcy5pc0luaXRpYWxpemVkKXJldHVybiB0aGlzLmxvZ2dlci53YXJuKFwiaGFzTG9hZGVkTmFtZXNwYWNlOiBpMThuZXh0IHdhcyBub3QgaW5pdGlhbGl6ZWRcIix0aGlzLmxhbmd1YWdlcyksITE7aWYoIXRoaXMubGFuZ3VhZ2VzfHwhdGhpcy5sYW5ndWFnZXMubGVuZ3RoKXJldHVybiB0aGlzLmxvZ2dlci53YXJuKFwiaGFzTG9hZGVkTmFtZXNwYWNlOiBpMThuLmxhbmd1YWdlcyB3ZXJlIHVuZGVmaW5lZCBvciBlbXB0eVwiLHRoaXMubGFuZ3VhZ2VzKSwhMTtjb25zdCBuPXQubG5nfHx0aGlzLnJlc29sdmVkTGFuZ3VhZ2V8fHRoaXMubGFuZ3VhZ2VzWzBdLHI9ISF0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyxvPXRoaXMubGFuZ3VhZ2VzW3RoaXMubGFuZ3VhZ2VzLmxlbmd0aC0xXTtpZihcImNpbW9kZVwiPT09bi50b0xvd2VyQ2FzZSgpKXJldHVybiEwO2NvbnN0IGE9KGUsdCk9Pntjb25zdCBuPXRoaXMuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5zdGF0ZVtgJHtlfXwke3R9YF07cmV0dXJuLTE9PT1ufHwyPT09bn07aWYodC5wcmVjaGVjayl7Y29uc3QgZT10LnByZWNoZWNrKHRoaXMsYSk7aWYodm9pZCAwIT09ZSlyZXR1cm4gZX1yZXR1cm4hIXRoaXMuaGFzUmVzb3VyY2VCdW5kbGUobixlKXx8KCEodGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLmJhY2tlbmQmJighdGhpcy5vcHRpb25zLnJlc291cmNlc3x8dGhpcy5vcHRpb25zLnBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzKSl8fCEoIWEobixlKXx8ciYmIWEobyxlKSkpfWxvYWROYW1lc3BhY2VzKGUsdCl7Y29uc3Qgbj1HdCgpO3JldHVybiB0aGlzLm9wdGlvbnMubnM/KFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1bZV0pLGUuZm9yRWFjaCgoZT0+e3RoaXMub3B0aW9ucy5ucy5pbmRleE9mKGUpPDAmJnRoaXMub3B0aW9ucy5ucy5wdXNoKGUpfSkpLHRoaXMubG9hZFJlc291cmNlcygoZT0+e24ucmVzb2x2ZSgpLHQmJnQoZSl9KSksbik6KHQmJnQoKSxQcm9taXNlLnJlc29sdmUoKSl9bG9hZExhbmd1YWdlcyhlLHQpe2NvbnN0IG49R3QoKTtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W2VdKTtjb25zdCByPXRoaXMub3B0aW9ucy5wcmVsb2FkfHxbXSxvPWUuZmlsdGVyKChlPT5yLmluZGV4T2YoZSk8MCkpO3JldHVybiBvLmxlbmd0aD8odGhpcy5vcHRpb25zLnByZWxvYWQ9ci5jb25jYXQobyksdGhpcy5sb2FkUmVzb3VyY2VzKChlPT57bi5yZXNvbHZlKCksdCYmdChlKX0pKSxuKToodCYmdCgpLFByb21pc2UucmVzb2x2ZSgpKX1kaXIoZSl7aWYoZXx8KGU9dGhpcy5yZXNvbHZlZExhbmd1YWdlfHwodGhpcy5sYW5ndWFnZXMmJnRoaXMubGFuZ3VhZ2VzLmxlbmd0aD4wP3RoaXMubGFuZ3VhZ2VzWzBdOnRoaXMubGFuZ3VhZ2UpKSwhZSlyZXR1cm5cInJ0bFwiO2NvbnN0IHQ9dGhpcy5zZXJ2aWNlcyYmdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzfHxuZXcgZm4oT24oKSk7cmV0dXJuW1wiYXJcIixcInNodVwiLFwic3FyXCIsXCJzc2hcIixcInhhYVwiLFwieWhkXCIsXCJ5dWRcIixcImFhb1wiLFwiYWJoXCIsXCJhYnZcIixcImFjbVwiLFwiYWNxXCIsXCJhY3dcIixcImFjeFwiLFwiYWN5XCIsXCJhZGZcIixcImFkc1wiLFwiYWViXCIsXCJhZWNcIixcImFmYlwiLFwiYWpwXCIsXCJhcGNcIixcImFwZFwiLFwiYXJiXCIsXCJhcnFcIixcImFyc1wiLFwiYXJ5XCIsXCJhcnpcIixcImF1elwiLFwiYXZsXCIsXCJheWhcIixcImF5bFwiLFwiYXluXCIsXCJheXBcIixcImJielwiLFwicGdhXCIsXCJoZVwiLFwiaXdcIixcInBzXCIsXCJwYnRcIixcInBidVwiLFwicHN0XCIsXCJwcnBcIixcInByZFwiLFwidWdcIixcInVyXCIsXCJ5ZGRcIixcInlkc1wiLFwieWloXCIsXCJqaVwiLFwieWlcIixcImhib1wiLFwibWVuXCIsXCJ4bW5cIixcImZhXCIsXCJqcHJcIixcInBlb1wiLFwicGVzXCIsXCJwcnNcIixcImR2XCIsXCJzYW1cIixcImNrYlwiXS5pbmRleE9mKHQuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSkpPi0xfHxlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcIi1hcmFiXCIpPjE/XCJydGxcIjpcImx0clwifXN0YXRpYyBjcmVhdGVJbnN0YW5jZSgpe3JldHVybiBuZXcgX24oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX1jbG9uZUluc3RhbmNlKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOkxuO2NvbnN0IG49ZS5mb3JrUmVzb3VyY2VTdG9yZTtuJiZkZWxldGUgZS5mb3JrUmVzb3VyY2VTdG9yZTtjb25zdCByPXsuLi50aGlzLm9wdGlvbnMsLi4uZSxpc0Nsb25lOiEwfSxvPW5ldyBfbihyKTt2b2lkIDA9PT1lLmRlYnVnJiZ2b2lkIDA9PT1lLnByZWZpeHx8KG8ubG9nZ2VyPW8ubG9nZ2VyLmNsb25lKGUpKTtyZXR1cm5bXCJzdG9yZVwiLFwic2VydmljZXNcIixcImxhbmd1YWdlXCJdLmZvckVhY2goKGU9PntvW2VdPXRoaXNbZV19KSksby5zZXJ2aWNlcz17Li4udGhpcy5zZXJ2aWNlc30sby5zZXJ2aWNlcy51dGlscz17aGFzTG9hZGVkTmFtZXNwYWNlOm8uaGFzTG9hZGVkTmFtZXNwYWNlLmJpbmQobyl9LG4mJihvLnN0b3JlPW5ldyBzbih0aGlzLnN0b3JlLmRhdGEsciksby5zZXJ2aWNlcy5yZXNvdXJjZVN0b3JlPW8uc3RvcmUpLG8udHJhbnNsYXRvcj1uZXcgZG4oby5zZXJ2aWNlcyxyKSxvLnRyYW5zbGF0b3Iub24oXCIqXCIsKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtvLmVtaXQoZSwuLi5uKX0pKSxvLmluaXQocix0KSxvLnRyYW5zbGF0b3Iub3B0aW9ucz1yLG8udHJhbnNsYXRvci5iYWNrZW5kQ29ubmVjdG9yLnNlcnZpY2VzLnV0aWxzPXtoYXNMb2FkZWROYW1lc3BhY2U6by5oYXNMb2FkZWROYW1lc3BhY2UuYmluZChvKX0sb310b0pTT04oKXtyZXR1cm57b3B0aW9uczp0aGlzLm9wdGlvbnMsc3RvcmU6dGhpcy5zdG9yZSxsYW5ndWFnZTp0aGlzLmxhbmd1YWdlLGxhbmd1YWdlczp0aGlzLmxhbmd1YWdlcyxyZXNvbHZlZExhbmd1YWdlOnRoaXMucmVzb2x2ZWRMYW5ndWFnZX19fWNvbnN0IFBuPV9uLmNyZWF0ZUluc3RhbmNlKCk7UG4uY3JlYXRlSW5zdGFuY2U9X24uY3JlYXRlSW5zdGFuY2U7UG4uY3JlYXRlSW5zdGFuY2UsUG4uZGlyLFBuLmluaXQsUG4ubG9hZFJlc291cmNlcyxQbi5yZWxvYWRSZXNvdXJjZXMsUG4udXNlLFBuLmNoYW5nZUxhbmd1YWdlLFBuLmdldEZpeGVkVCxQbi50LFBuLmV4aXN0cyxQbi5zZXREZWZhdWx0TmFtZXNwYWNlLFBuLmhhc0xvYWRlZE5hbWVzcGFjZSxQbi5sb2FkTmFtZXNwYWNlcyxQbi5sb2FkTGFuZ3VhZ2VzO2NvbnN0IEVuPUpTT04ucGFyc2UoJ3tcImNvbnRleHRNZW51Lm5ld1dpbmRvd1wiOlwi5paw5bu656qX5Y+jXCIsXCJjb250ZXh0TWVudS5uZXdQYWdlXCI6XCLmlrDlu7rpobXpnaJcIixcImNvbnRleHRNZW51LnJlc3RvcmVcIjpcIui/mOWOn+WIsOS4iuasoeS/neWtmOeahOabtOaUuVwiLFwiY29udGV4dE1lbnUuc3dpdGNoV29ya3NwYWNlXCI6XCLliIfmjaLlt6XkvZzljLpcIixcImNvbnRleHRNZW51LmFwcGVhcmFuY2VcIjpcIuWkluinglwiLFwiY29udGV4dE1lbnUuc2F2ZVdvcmtzcGFjZVwiOlwi5L+d5a2Y5bel5L2c5Yy6XCIsXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlQXNcIjpcIuWwhuW3peS9nOWMuuWPpuWtmOS4ui4uLlwiLFwiY29udGV4dE1lbnUucmVuYW1lV29ya3NwYWNlXCI6XCLph43lkb3lkI3lt6XkvZzljLpcIixcImNvbnRleHRNZW51LmRlbGV0ZVdvcmtzcGFjZVwiOlwi5Yig6Zmk5bel5L2c5Yy6XCIsXCJjb250ZXh0TWVudS5kb3dubG9hZHNcIjpcIuS4i+i9vVwiLFwiY29udGV4dE1lbnUuc2F2ZVBhZ2VcIjpcIuS/neWtmOmhtemdolwiLFwiY29udGV4dE1lbnUuc2F2ZVBhZ2VBc1wiOlwi5bCG6aG16Z2i5Y+m5a2Y5Li6Li4uXCIsXCJjb250ZXh0TWVudS5wcmludFwiOlwi5omT5Y2wLi4uXCIsXCJjb250ZXh0TWVudS5wcmludFNjcmVlblwiOlwi5omT5Y2w5bGP5bmVXCIsXCJjb250ZXh0TWVudS5jbG9zZVdpbmRvd1wiOlwi5YWz6Zet56qX5Y+jXCIsXCJjb250ZXh0TWVudS5vcGVuU3RvcmVmcm9udFwiOlwi5byA5pS+5byP5bqX6Z2iXCIsXCJjb250ZXh0TWVudS5xdWl0UGxhdGZvcm1cIjpcIumAgOWHuuW5s+WPsFwiLFwiY29udGV4dE1lbnUubmV3Vmlld1wiOlwi5paw5bu66KeG5Zu+XCIsXCJjb250ZXh0TWVudS5vcGVuVmlld1wiOlwi5L2/55So6buY6K6kIFdlYiDmtY/op4jlmajmiZPlvIDop4blm75cIixcImNvbnRleHRNZW51Lm9wZW5WaWV3c1wiOlwi5L2/55So6buY6K6kIFdlYiDmtY/op4jlmajmiZPlvIDop4blm75cIixcImNvbnRleHRNZW51LnJlbG9hZFwiOlwiUmVsb2FkIENOXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3XCI6XCLph43mlrDliqDovb3op4blm75cIixcImNvbnRleHRNZW51LnJlbG9hZFZpZXdzXCI6XCLph43mlrDliqDovb3op4blm75cIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVwiOlwiRHVwbGljYXRlIENOXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVWaWV3XCI6XCLlpI3liLbop4blm75cIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVZpZXdzXCI6XCLlpI3liLbop4blm75cIixcImNvbnRleHRNZW51LmFkZFZpZXdcIjpcIuWwhuinhuWbvua3u+WKoOWIsOmikemBk1wiLFwiY29udGV4dE1lbnUuYWRkVmlld3NcIjpcIuWwhuinhuWbvua3u+WKoOWIsOmikemBk1wiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld1wiOlwi5LuO6aKR6YGT5Lit56e76Zmk6KeG5Zu+XCIsXCJjb250ZXh0TWVudS5yZW1vdmVWaWV3c1wiOlwi5LuO6aKR6YGT5Lit56e76Zmk6KeG5Zu+XCIsXCJjb250ZXh0TWVudS5jbG9zZVZpZXdcIjpcIuWFs+mXreinhuWbvlwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3c1wiOlwi5YWz6Zet6KeG5Zu+XCIsXCJjb250ZXh0TWVudS5jbG9zZVRhYlwiOlwiQ2xvc2UgVGFiIENOXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVQYWdlXCI6XCLlpI3liLbpobXpnaJcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRcIjpcIuaJk+WNsFwiLFwiY29udGV4dE1lbnUuc3VibWVudS5wcmludEFsbFwiOlwi5YWo6YOo5omT5Y2wXCIsXCJzYXZlTWVudS5zYXZlV29ya3NwYWNlQXNcIjpcIuWwhuW3peS9nOWMuuWPpuWtmOS4ulwiLFwic2F2ZU1lbnUuc2F2ZVBhZ2VBc1wiOlwi5bCG6aG16Z2i5Y+m5a2Y5Li6XCIsXCJzYXZlTW9kYWwuZW50ZXJWYWx1ZVwiOlwiUGxlYXNlIGVudGVyIGEgdmFsdWUgQ05cIixcInNhdmVNb2RhbC5hbHJlYWR5RXhpc3RzXCI6XCJ7e3RpdGxlfX0g5bey5a2Y5Zyo44CCXCIsXCJzYXZlTW9kYWwucGxlYXNlRW50ZXJWYWxpZE5hbWVcIjpcIuivt+i+k+WFpeacieaViOWQjeensFwiLFwic2F2ZU1vZGFsLnJlbmFtZVBhZ2VcIjpcIumHjeaWsOWRveWQjemhtemdolwiLFwic2F2ZU1vZGFsLmNsb3NlUGFnZVwiOlwi5YWz6Zet6aG16Z2iXCIsXCJzYXZlTW9kYWwuZGlzY2FyZENoYW5nZXNcIjpcIuaUvuW8g+abtOaUuVwiLFwic2F2ZU1vZGFsLmRpc2NhcmRBbGxcIjpcIuWFqOmDqOaUvuW8g1wiLFwic2F2ZU1vZGFsLnNhdmVBbGxcIjpcIuWFqOmDqOS/neWtmFwiLFwic2F2ZU1vZGFsLnNhdmVQYWdlc0NvdW50XCI6XCLlhbPpl63liY3kv53lrZggKHt7Y291bnR9fSkg5Liq6aG16Z2i77yfXCIsXCJkZWZhdWx0UGFnZVRpdGxlXCI6XCJVbnRpdGxlZCBQYWdlIENOXCIsXCJlbnRlcnByaXNlRGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgU3VwZXJ0YWIgQ05cIixcImFkZE5ld1BhZ2VcIjpcIk5ldyBQYWdlIENOXCIsXCJhZGROZXdUYWJcIjpcIua3u+WKoOaWsOmAiemhueWNoVwiLFwiYWRkTmV3Vmlld1wiOlwi5paw5bu66KeG5Zu+XCIsXCJyZXN0b3JlTW9kYWxcIjpcIuaCqOehruWumuimgei/mOWOn+WIsOS4iuasoeS/neWtmOeahOabtOaUueWQl++8n1wiLFwibW9kYWwuZGlzY2FyZFdhcm5pbmdcIjpcIuS7u+S9leacquS/neWtmOeahOabtOaUuemDveWwhuS4ouWksVwiLFwibW9kYWwuZGlzY2FyZFBhZ2VXYXJuaW5nXCI6XCLlr7nmraTpobXnmoTku7vkvZXmnKrkv53lrZjnmoTmm7TmlLnpg73lsIbkuKLlpLHjgIJcIixcIm1vZGFsLnNhdmVDaGFuZ2VzUHJvbXB0XCI6XCLlhbPpl63liY3kv53lrZjmm7TmlLnvvJ9cIixcIm1vZGFsLnBhZ2VDbG9zZVwiOlwiUGFnZSBDbG9zZSBDTlwiLFwic3dpdGNoV29ya3NwYWNlTW9kYWxcIjpcIuaCqOehruWumuimgeWIh+aNouWIsCB7e3dvcmtzcGFjZX19IOWQl++8n1wiLFwic3dpdGNoV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi5Lu75L2V5pyq5L+d5a2Y55qE5pu05pS56YO95bCG5Lii5aSxXCIsXCJkZWxldGVXb3Jrc3BhY2VNb2RhbFwiOlwi5oKo56Gu5a6a6KaB5rC45LmF5Yig6Zmk5q2k5bel5L2c5Yy65ZCX77yfXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi5ZCN56ew5Li6IHt7d29ya3NwYWNlfX0g55qE5bel5L2c5Yy65bey5a2Y5Zyo44CC5oKo5piv5ZCm6KaB5pu/5o2i5a6D77yfXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZy5ib2R5XCI6XCLlt7LlrZjlnKjlkIzlkI3nmoTlt6XkvZzljLrjgILmm7/mjaLlroPlsIbopobnm5blhbblvZPliY3lhoXlrrnjgIJcIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC5yZXBsYWNlXCI6XCLmm7/mjaJcIixcImNsb3NlUGxhdGZvcm1cIjpcIuWFs+mXreW5s+WPsFwiLFwiY2xvc2VQbGF0Zm9ybS53b3Jrc3BhY2VcIjpcIuWFs+mXrSB7e3dvcmtzcGFjZX19IOW5s+WPsFwiLFwiY2xvc2VQbGF0Zm9ybS53YXJuaW5nXCI6XCLlhbPpl63lubPlj7DlsIblhbPpl63miYDmnInlt6XkvZzljLrjgIHlupTnlKjmiJbku7vkvZXmraPlnKjov5DooYznmoTov5vnqIvjgIJcIixcImJhY2tcIjpcIuWQjumAgFwiLFwiZm9yd2FyZFwiOlwi5YmN6L+bXCIsXCJyZWxvYWRcIjpcIumHjeaWsOWKoOi9vVwiLFwiZ3JlZW5cIjpcIue7v+iJslwiLFwicHVycGxlXCI6XCLntKvoibJcIixcIm9yYW5nZVwiOlwi5qmZ6ImyXCIsXCJyZWRcIjpcIue6ouiJslwiLFwicGlua1wiOlwi57KJ57qi6ImyXCIsXCJ5ZWxsb3dcIjpcIum7hOiJslwiLFwidGhlbWUubGlnaHRcIjpcIua1heiJslwiLFwidGhlbWUuZGFya1wiOlwi5rex6ImyXCIsXCJ0aGVtZS5zeXN0ZW1cIjpcIuS4juaTjeS9nOezu+e7n+iuvue9ruWQjOatpVwiLFwidG9vbGJhci5oaWRlVGFic1wiOlwi6ZqQ6JeP6YCJ6aG55Y2hXCIsXCJ0b29sYmFyLnNob3dUYWJzXCI6XCLmmL7npLrpgInpobnljaFcIixcInRvb2xiYXIubG9ja1wiOlwi6ZSB5a6aXCIsXCJ0b29sYmFyLnVubG9ja1wiOlwi6Kej6ZSBXCIsXCJ0b29sYmFyLmNvbG9yTGlua2luZ1wiOlwi6aKc6Imy6ZO+5o6lXCIsXCJ0b29sYmFyLmNoYW5nZUxheW91dFwiOlwi5pu05pS55biD5bGAXCIsXCJ0b29sYmFyLnNhdmVNZW51XCI6XCLkv53lrZjoj5zljZVcIixcInRvb2xiYXIubWF4aW1pemVXaW5kb3dcIjpcIuacgOWkp+WMlueql+WPo1wiLFwidG9vbGJhci5yZXN0b3JlV2luZG93XCI6XCLov5jljp/nqpflj6NcIixcInRvb2xiYXIubWluaW1pemVXaW5kb3dcIjpcIuacgOWwj+WMlueql+WPo1wiLFwiY2hhbmdlTGF5b3V0LmZ1bGxXaWR0aFwiOlwi5YWo5a69XCIsXCJjaGFuZ2VMYXlvdXQuY29sdW1uc1wiOlwi5YiX5pWwXCIsXCJjaGFuZ2VMYXlvdXQuUm93c1wiOlwi6KGM5pWwXCIsXCJjaGFuZ2VMYXlvdXQuR3JpZFwiOlwi572R5qC8XCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVN3aXRjaGVkXCI6XCLlt7LliIfmjaLlt6XkvZzljLpcIixcInN1Y2Nlc3NJbmRpY2F0b3IuaGlkZGVuXCI6XCLpgInpobnljaHlt7LpmpDol49cIixcInN1Y2Nlc3NJbmRpY2F0b3Iuc2hvd25cIjpcIumAiemhueWNoeW3suaYvuekulwiLFwic3VjY2Vzc0luZGljYXRvci5sb2NrZWRcIjpcIumhtemdouW3sumUgeWumlwiLFwic3VjY2Vzc0luZGljYXRvci51bmxvY2tlZFwiOlwi6aG16Z2i5bey6Kej6ZSBXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkXCI6XCLlt6XkvZzljLrlt7Lkv53lrZhcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRBc1wiOlwi5bel5L2c5Yy65bey5Y+m5a2Y5Li6IHt7d29ya3NwYWNlfX1cIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlUmVuYW1lZFwiOlwi5bel5L2c5Yy65bey6YeN5ZG95ZCNXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VTYXZlZFwiOlwi6aG16Z2i5bey5L+d5a2YXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBoYXMgYmVlbiBzYXZlZC4gQ05cIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUNvcHlTYXZlZFwiOlwi6aG16Z2i5bey5Y+m5a2Y5Li6IHt7dGl0bGV9fVwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlUmVuYW1lZFwiOlwi6aG16Z2i5bey6YeN5ZG95ZCNXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmNvbnRleHRHcm91cEFwcGxpZWRcIjpcIuW3suW6lOeUqOS4iuS4i+aWh+e7hFwiLFwic3VjY2Vzc0luZGljYXRvci5uYW1lZENvbnRleHRHcm91cEFwcGxpZWRcIjpcIuW3suW6lOeUqCB7e2NvbG9yTmFtZX19IOS4iuS4i+aWh+e7hFwiLFwic3VjY2Vzc0luZGljYXRvci52aWV3UmVtb3ZlZFwiOlwi5LuO5LiK5LiL5paH57uE5Lit56e76Zmk6KeG5Zu+XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdzUmVtb3ZlZFwiOlwi5LuO5LiK5LiL5paH57uE5Lit56e76Zmk6KeG5Zu+XCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxheW91dEFwcGxpZWRcIjpcIuW3suW6lOeUqCB7e2xheW91dE5hbWV9fSDluIPlsYBcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlRGVsZXRlZFwiOlwi5bel5L2c5Yy65bey5Yig6ZmkXCIsXCJlcnJvckluZGljYXRvci5wYWdlU2F2ZUZhaWxlZFwiOlwi6aG16Z2i5L+d5a2Y5aSx6LSlXCIsXCJlcnJvckluZGljYXRvci53b3Jrc3BhY2VTYXZlRmFpbGVkXCI6XCLlt6XkvZzljLrkv53lrZjlpLHotKVcIixcImVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlUGFnZVwiOlwi5aSN5Yi26aG16Z2i5aSx6LSlXCIsXCJpbmZvSW5kaWNhdG9yLmNvbG9yTGlua0F0dGVtcHRcIjpcIuaIkeS7rOWwneivleWvueatpOmAiemhueWNoei/m+ihjOminOiJsumTvuaOpe+8jOS9hue9keermS/lhoXlrrnmiYDmnInogIXlsJrmnKrlkK/nlKjor6Xlip/og71cIixcImdsb2JhbC5jYW5jZWxcIjpcIuWPlua2iFwiLFwiZ2xvYmFsLmNvbmZpcm1cIjpcIuehruiupFwiLFwiZ2xvYmFsLnNhdmVcIjpcIuS/neWtmFwiLFwiZ2xvYmFsLmRlbGV0ZVwiOlwiRGVsZXRlIENOXCIsXCJhcHBSZXN1bHRzLmhlYWRlclwiOlwiRmVhdHVyZWQgQ29udGVudCBDTlwiLFwicmVjZW50bHlWaXNpdGVkLmhlYWRlclwiOlwiUmVjZW50bHkgdmlzaXRlZCBDTlwiLFwibGFuZGluZ1BhZ2Uuc3ViaGVhZGVyXCI6XCJBcHBzIGFuZCB3ZWJzaXRlcyBzZWxlY3RlZCBieSBhbiBhZG1pbiB3aWxsIHNob3cgaGVyZSBDTlwiLFwiYXJpYS5vcGVuQnJvd3NlclwiOlwi5omT5byA5rWP6KeI5Zmo6I+c5Y2VXCIsXCJhcmlhLmJyb3dzZXJUYWJzXCI6XCLmtY/op4jlmajpgInpobnljaFcIixcImFyaWEudmlld1RhYlwiOlwi5p+l55yLIHt7dGl0bGV9fSDnmoTpgInpobnljaFcIixcImFyaWEuY2xvc2VQYWdlXCI6XCLlhbPpl60ge3t0aXRsZX19IOeahOmhtemdoumAiemhueWNoeaMiemSrlwiLFwiYXJpYS5jbG9zZVRhYlwiOlwi5YWz6Zet6YCJ6aG55Y2hIHt7dGl0bGV9fVwiLFwiYXJpYS50aXRsZVwiOlwi5qCH6aKYXCIsXCJhcmlhLmNsb3NlQ29udGV4dEdyb3VwXCI6XCLkvb/nlKjovazkuYnlhbPpl63kuIrkuIvmlofnu4TpgInmi6nlr7nor53moYZcIixcImFyaWEuY29sb3JMaW5raW5nXCI6XCLmmL7npLrmiJbpmpDol4/popzoibLpk77mjqVcIixcImFyaWEuYXBwbHlDb2xvckxpbmtpbmdcIjpcIuivt+mAieaLqeS4gOS4quinhuWbvuS7peW6lOeUqOminOiJsumTvuaOpVwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld1wiOlwi5YiG6YWN57uZIHt7bmFtZX19IOS4iuS4i+aWh+e7hOeahOW9k+WJjeinhuWbvlwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld3NcIjpcIuWIhumFjee7mSB7e25hbWV9fSDkuIrkuIvmlofnu4TnmoTlvZPliY3op4blm75cIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld1wiOlwi5bCG5rS75Yqo6KeG5Zu+6K6+572u5Li6IHt7bmFtZX19IOS4iuS4i+aWh+e7hFwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3c1wiOlwi5bCG5rS75Yqo6KeG5Zu+6K6+572u5Li6IHt7bmFtZX19IOS4iuS4i+aWh+e7hFwiLFwiYXJpYS5lc2NhcGVMYXlvdXREaWFsb2dcIjpcIuS9v+eUqOi9rOS5ieWFs+mXreabtOaUueW4g+WxgOWvueivneahhlwiLFwiZ2xvYmFsLnN1cGVydGFiXCI6XCJTdXBlcnRhYiBDTlwiLFwiZ2xvYmFsLnRhYlwiOlwiVGFiIENOXCIsXCJib29rbWFya3MuZWRpdEJvb2ttYXJrXCI6XCJFZGl0IEJvb2ttYXJrIENOXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFwiOlwiQm9va21hcmsgYWRkZWQgQ05cIixcImJvb2ttYXJrcy5kb25lXCI6XCJEb25lIENOXCIsXCJib29rbWFya3MucmVtb3ZlXCI6XCJSZW1vdmUgQ05cIixcImJvb2ttYXJrcy5ib29rbWFya3NQYW5lbFwiOlwiQm9va21hcmtzIFBhbmVsIENOXCIsXCJib29rbWFya3MuY2xvc2VQYW5lbFwiOlwiQ2xvc2UgQm9va21hcmtzIFBhbmVsIENOXCIsXCJib29rbWFya3MuYm9va21hcmtzXCI6XCJCb29rbWFya3MgQ05cIixcImJvb2ttYXJrcy5hbGxCb29rbWFya3NcIjpcIkFsbCBCb29rbWFya3MgQ05cIixcImJvb2ttYXJrcy5mYXZvcml0ZXNcIjpcIkZhdm9yaXRlcyBDTlwiLFwiYm9va21hcmtzLnNlYXJjaEJvb2ttYXJrc1wiOlwiU2VhcmNoIEJvb2ttYXJrcyBDTlwiLFwiYm9va21hcmtzLmNsZWFyU2VhcmNoSW5wdXRcIjpcIkNsZWFyIFNlYXJjaCBJbnB1dCBDTlwiLFwiYm9va21hcmtzLmNyZWF0ZUZvbGRlclwiOlwiQ3JlYXRlIE5ldyBGb2xkZXIgQ05cIixcImJvb2ttYXJrcy5leGl0Rm9sZGVyXCI6XCJFeGl0IEZvbGRlciBDTlwiLFwiYm9va21hcmtzLm5ld0ZvbGRlclwiOlwiTmV3IEZvbGRlciBDTlwiLFwiYm9va21hcmtzLm5hbWVkRm9sZGVyXCI6XCJ7e25hbWV9fSBGb2xkZXIgQ05cIixcImJvb2ttYXJrcy5ib29rbWFya1NldHRpbmdzXCI6XCJ7e25hbWV9fSBCb29rbWFyayBTZXR0aW5ncyBDTlwiLFwiYm9va21hcmtzLmZvbGRlclNldHRpbmdzXCI6XCJ7e25hbWV9fSBGb2xkZXIgU2V0dGluZ3MgQ05cIixcImJvb2ttYXJrcy5ub1Jlc3VsdHNGb3VuZFwiOlwiTm8gcmVzdWx0cyBmb3VuZCBDTlwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kU3VidGV4dFwiOlwiVGhlcmUgYXJlIG5vIGJvb2ttYXJrcyB0aGF0IG1hdGNoIHlvdXIgc2VhcmNoIENOXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1wiOlwiTm90aGluZyB0byBzaG93IHlldCBDTlwiLFwiYm9va21hcmtzLm5vdGhpbmdUb1Nob3dTdWJ0ZXh0XCI6XCJBZGQgYSBib29rbWFyayB0byB0aGlzIGZvbGRlciBDTlwiLFwiYm9va21hcmtzLnJlc3VsdHNGb3VuZEluXCI6XCJSZXN1bHRzIGZvdW5kIGluIHt7bmFtZX19IENOXCIsXCJib29rbWFya3MucmVzdWx0c0luT3RoZXJGb2xkZXJzXCI6XCJSZXN1bHRzIGZvdW5kIGluIG90aGVyIGZvbGRlcnMgQ05cIixcImJvb2ttYXJrcy5hbGxSZXN1bHRzRm91bmRJblwiOlwiQWxsIHJlc3VsdHMgZm91bmQgaW4gQ05cIixcImJvb2ttYXJrcy5lZGl0TmFtZVwiOlwiRWRpdCBOYW1lIENOXCIsXCJib29rbWFya3MubW92ZVwiOlwiTW92ZSBDTlwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUaXRsZVwiOlwiQm9va21hcmsgQWRkZWQgQ05cIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkVG9Gb2xkZXJcIjpcIllvdXIgYm9va21hcmsgd2FzIGFkZGVkIHRvIFxcXFxcInt7Zm9sZGVyTmFtZX19XFxcXFwiIENOXCIsXCJib29rbWFya3MuYm9va21hcmtFZGl0ZWRUaXRsZVwiOlwiQm9va21hcmsgRWRpdGVkIENOXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiXCI6XCJTYXZlIFN1cGVydGFiIENOXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcIlNhdmUgU3VwZXJ0YWIgQXMuLi4gQ05cIixcImVudGVycHJpc2VDb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBDTlwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgU3VwZXJ0YWIgQ05cIixcImVudGVycHJpc2VDb250ZXh0TWVudS5uZXdUYWJcIjpcIk5ldyBUYWIgQ05cIixcImVudGVycHJpc2VTYXZlTWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBcyBDTlwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5yZW5hbWVTdXBlcnRhYlwiOlwiUmVuYW1lIENOXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnVuc2F2ZWRDaGFuZ2VzXCI6XCJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhpcyBUYWIuIENOXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlVGFiXCI6XCJDbG9zZSBUYWIgQ05cIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VTdXBlcnRhYlwiOlwiQ2xvc2UgU3VwZXJ0YWIgQ05cIixcImVudGVycHJpc2VTYXZlTW9kYWwuc2F2ZVN1cGVydGFiQ291bnRcIjpcIlNhdmUge3tjb3VudH19IFN1cGVydGFicyBiZWZvcmUgY2xvc2luZz8gQ05cIixcImVudGVycHJpc2VNb2RhbC5kaXNjYXJkU3VwZXJ0YWJXYXJuaW5nXCI6XCJBbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHRoaXMgU3VwZXJ0YWIgd2lsbCBiZSBsb3N0LiBDTlwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgdGhlIFxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYj8gQ05cIixcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYldhcm5pbmdcIjpcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBTdXBlcnRhYj8gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZSBhbmQgaXMgcGVybWFuZW50LiBDTlwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJTYXZlZFwiOlwiU3VwZXJ0YWIgU2F2ZWQgQ05cIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlblNhdmVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gc2F2ZWQuIENOXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkRlbGV0ZWRcIjpcIlN1cGVydGFiIERlbGV0ZWQgQ05cIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlbkRlbGV0ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYiBoYXMgYmVlbiBkZWxldGVkLiBDTlwiLFwiZW50ZXJwcmlzZUVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlVGFiXCI6XCJGYWlsZWQgdG8gZHVwbGljYXRlIFRhYiBDTlwiLFwiZW50ZXJwcmlzZUVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlU3VwZXJ0YWJcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgU3VwZXJ0YWIgQ05cIixcImVudGVycHJpc2VDb21tYW5kQmFyLnN3aXRjaFRvU3VwZXJ0YWJcIjpcIlN3aXRjaCB0byBTdXBlcnRhYiBDTlwiLFwiZW50ZXJwcmlzZUNvbW1hbmRCYXIuZ29Ub1wiOlwiR28gdG8ge3t0eXBlfX0gQ05cIixcImNvbnRleHRNZW51LnF1aXRFbnRlcnByaXNlQnJvd3NlclwiOlwiUXVpdCBDTlwifScpLGpuPUpTT04ucGFyc2UoJ3tcImNvbnRleHRNZW51Lm5ld1dpbmRvd1wiOlwi5paw6KaW56qXXCIsXCJjb250ZXh0TWVudS5uZXdQYWdlXCI6XCLmlrDpoIHpnaJcIixcImNvbnRleHRNZW51LnJlc3RvcmVcIjpcIumChOWOn+WIsOS4iuasoeWEsuWtmOeahOiuiuabtFwiLFwiY29udGV4dE1lbnUuc3dpdGNoV29ya3NwYWNlXCI6XCLliIfmj5vlt6XkvZznqbrplpNcIixcImNvbnRleHRNZW51LmFwcGVhcmFuY2VcIjpcIuWkluingFwiLFwiY29udGV4dE1lbnUuc2F2ZVdvcmtzcGFjZVwiOlwi5YSy5a2Y5bel5L2c56m66ZaTXCIsXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlQXNcIjpcIuWwh+W3peS9nOepuumWk+WPpuWtmOeCui4uLlwiLFwiY29udGV4dE1lbnUucmVuYW1lV29ya3NwYWNlXCI6XCLph43mlrDlkb3lkI3lt6XkvZznqbrplpNcIixcImNvbnRleHRNZW51LmRlbGV0ZVdvcmtzcGFjZVwiOlwi5Yiq6Zmk5bel5L2c56m66ZaTXCIsXCJjb250ZXh0TWVudS5kb3dubG9hZHNcIjpcIuS4i+i8iVwiLFwiY29udGV4dE1lbnUuc2F2ZVBhZ2VcIjpcIuWEsuWtmOmggemdolwiLFwiY29udGV4dE1lbnUuc2F2ZVBhZ2VBc1wiOlwi5bCH6aCB6Z2i5Y+m5a2Y54K6Li4uXCIsXCJjb250ZXh0TWVudS5wcmludFwiOlwi5YiX5Y2wLi4uXCIsXCJjb250ZXh0TWVudS5wcmludFNjcmVlblwiOlwi5pO35Y+W55Wr6Z2iXCIsXCJjb250ZXh0TWVudS5jbG9zZVdpbmRvd1wiOlwi6Zec6ZaJ6KaW56qXXCIsXCJjb250ZXh0TWVudS5vcGVuU3RvcmVmcm9udFwiOlwi5omT6ZaLIFN0b3JlZnJvbnRcIixcImNvbnRleHRNZW51LnF1aXRQbGF0Zm9ybVwiOlwi6YCA5Ye65bmz5Y+wXCIsXCJjb250ZXh0TWVudS5uZXdWaWV3XCI6XCLmlrDoppblnJZcIixcImNvbnRleHRNZW51Lm9wZW5WaWV3XCI6XCLkvb/nlKjpoJDoqK3ntrLpoIHngI/opr3lmajmiZPplovoppblnJZcIixcImNvbnRleHRNZW51Lm9wZW5WaWV3c1wiOlwi5L2/55So6aCQ6Kit57ay6aCB54CP6Ka95Zmo5omT6ZaL6KaW5ZyWXCIsXCJjb250ZXh0TWVudS5yZWxvYWRcIjpcIlJlbG9hZCBaSFwiLFwiY29udGV4dE1lbnUucmVsb2FkVmlld1wiOlwi6YeN5paw6LyJ5YWl6KaW5ZyWXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3c1wiOlwi6YeN5paw6LyJ5YWl6KaW5ZyWXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBaSFwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld1wiOlwi6KSH5a+r6KaW5ZyWXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVWaWV3c1wiOlwi6KSH5a+r6KaW5ZyWXCIsXCJjb250ZXh0TWVudS5hZGRWaWV3XCI6XCLlsIfoppblnJbmlrDlop7oh7PpoLvpgZNcIixcImNvbnRleHRNZW51LmFkZFZpZXdzXCI6XCLlsIfoppblnJbmlrDlop7oh7PpoLvpgZNcIixcImNvbnRleHRNZW51LnJlbW92ZVZpZXdcIjpcIuW+numgu+mBk+S4reenu+mZpOimluWcllwiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld3NcIjpcIuW+numgu+mBk+S4reenu+mZpOimluWcllwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3XCI6XCLpl5zplonoppblnJZcIixcImNvbnRleHRNZW51LmNsb3NlVmlld3NcIjpcIumXnOmWieimluWcllwiLFwiY29udGV4dE1lbnUuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiBaSFwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlUGFnZVwiOlwi6KSH5a+r6aCB6Z2iXCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50XCI6XCLliJfljbBcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRBbGxcIjpcIuWIl+WNsOWFqOmDqFwiLFwic2F2ZU1lbnUuc2F2ZVdvcmtzcGFjZUFzXCI6XCLlsIflt6XkvZznqbrplpPlj6blrZjngrpcIixcInNhdmVNZW51LnNhdmVQYWdlQXNcIjpcIumggemdouWPpuWtmOeCulwiLFwic2F2ZU1vZGFsLmVudGVyVmFsdWVcIjpcIlBsZWFzZSBlbnRlciBhIHZhbHVlIFpIXCIsXCJzYXZlTW9kYWwuYWxyZWFkeUV4aXN0c1wiOlwie3t0aXRsZX19IOW3sue2k+WtmOWcqOOAglwiLFwic2F2ZU1vZGFsLnBsZWFzZUVudGVyVmFsaWROYW1lXCI6XCLoq4vovLjlhaXkuIDlgIvmnInmlYjnmoTlkI3nqLFcIixcInNhdmVNb2RhbC5yZW5hbWVQYWdlXCI6XCLph43mlrDlkb3lkI3poIHpnaJcIixcInNhdmVNb2RhbC5jbG9zZVBhZ2VcIjpcIumXnOmWiemggemdolwiLFwic2F2ZU1vZGFsLmRpc2NhcmRDaGFuZ2VzXCI6XCLmjajmo4Torormm7RcIixcInNhdmVNb2RhbC5kaXNjYXJkQWxsXCI6XCLlhajpg6jmjajmo4RcIixcInNhdmVNb2RhbC5zYXZlQWxsXCI6XCLlhLLlrZjlhajpg6hcIixcInNhdmVNb2RhbC5zYXZlUGFnZXNDb3VudFwiOlwi6KaB5YWI5YSy5a2YICh7e2NvdW50fX0pIOWAi+mggemdouWGjemXnOmWieWXju+8n1wiLFwiZGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgUGFnZSBaSFwiLFwiZW50ZXJwcmlzZURlZmF1bHRQYWdlVGl0bGVcIjpcIlVudGl0bGVkIFN1cGVydGFiIFpIXCIsXCJhZGROZXdQYWdlXCI6XCJOZXcgUGFnZSBaSFwiLFwiYWRkTmV3VGFiXCI6XCLmlrDlop7mlrDntKLlvJXmqJnnsaRcIixcImFkZE5ld1ZpZXdcIjpcIuaWsOimluWcllwiLFwicmVzdG9yZU1vZGFsXCI6XCLmgqjnorrlrpropoHpgoTljp/liLDkuIrmrKHlhLLlrZjnmoTorormm7Tll47vvJ9cIixcIm1vZGFsLmRpc2NhcmRXYXJuaW5nXCI6XCLku7vkvZXmnKrlhLLlrZjnmoTorormm7Tpg73lsIfooqvmjajmo4RcIixcIm1vZGFsLmRpc2NhcmRQYWdlV2FybmluZ1wiOlwi5Zyo5q2k6aCB6Z2i5Lu75L2V5pyq5YSy5a2Y55qE6K6K5pu06YO95bCH6YG65aSx44CCXCIsXCJtb2RhbC5zYXZlQ2hhbmdlc1Byb21wdFwiOlwi6KaB5YWI5YSy5a2Y6K6K5pu05YaN6Zec6ZaJ5ZeO77yfXCIsXCJtb2RhbC5wYWdlQ2xvc2VcIjpcIlBhZ2UgQ2xvc2UgWkhcIixcInN3aXRjaFdvcmtzcGFjZU1vZGFsXCI6XCLmgqjnorrlrpropoHliIfmj5vliLAge3t3b3Jrc3BhY2V9fe+8n1wiLFwic3dpdGNoV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi5Lu75L2V5pyq5YSy5a2Y55qE6K6K5pu06YO95bCH6KKr5o2o5qOEXCIsXCJkZWxldGVXb3Jrc3BhY2VNb2RhbFwiOlwi5oKo56K65a6a6KaB5rC45LmF5Yiq6Zmk5q2k5bel5L2c56m66ZaT5ZeO77yfXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi5YW35pyJ5ZCN56ixIHt7d29ya3NwYWNlfX0g55qE5bel5L2c56m66ZaT5bey57aT5a2Y5Zyo44CC5L2g6KaB5pu05o+b5a6D5ZeO77yfXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZy5ib2R5XCI6XCLnm7jlkIzlkI3nqLHnmoTlt6XkvZznqbrplpPlt7LntpPlrZjlnKjjgILmm7Tmj5vlroPlvozvvIzlsIfmnIPopobok4vnm67liY3lhaflrrnjgIJcIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC5yZXBsYWNlXCI6XCLmm7Tmj5tcIixcImNsb3NlUGxhdGZvcm1cIjpcIumXnOmWieW5s+WPsFwiLFwiY2xvc2VQbGF0Zm9ybS53b3Jrc3BhY2VcIjpcIumXnOmWiSB7e3dvcmtzcGFjZX19IOW5s+WPsFwiLFwiY2xvc2VQbGF0Zm9ybS53YXJuaW5nXCI6XCLpl5zplonlubPlj7DlvozvvIzlsIfpl5zplonmraPlnKjln7fooYznmoTku7vkvZXlt6XkvZznqbrplpPjgIFBUFAg5oiW5rWB56iL44CCXCIsXCJiYWNrXCI6XCLkuIrkuIDpoIFcIixcImZvcndhcmRcIjpcIuS4i+S4gOmggVwiLFwicmVsb2FkXCI6XCLph43mlrDovInlhaVcIixcImdyZWVuXCI6XCLntqBcIixcInB1cnBsZVwiOlwi57SrXCIsXCJvcmFuZ2VcIjpcIuapmFwiLFwicmVkXCI6XCLntIXoibJcIixcInBpbmtcIjpcIueyiee0hVwiLFwieWVsbG93XCI6XCLpu4NcIixcInRoZW1lLmxpZ2h0XCI6XCLmt7pcIixcInRoZW1lLmRhcmtcIjpcIua3sVwiLFwidGhlbWUuc3lzdGVtXCI6XCLoiIcgT1Mg6Kit5a6a5ZCM5q2lXCIsXCJ0b29sYmFyLmhpZGVUYWJzXCI6XCLpmrHol4/ntKLlvJXmqJnnsaRcIixcInRvb2xiYXIuc2hvd1RhYnNcIjpcIumhr+ekuue0ouW8leaomeexpFwiLFwidG9vbGJhci5sb2NrXCI6XCLkuIrpjpZcIixcInRvb2xiYXIudW5sb2NrXCI6XCLop6PpjpZcIixcInRvb2xiYXIuY29sb3JMaW5raW5nXCI6XCLpoY/oibLpgKPntZBcIixcInRvb2xiYXIuY2hhbmdlTGF5b3V0XCI6XCLorormm7TniYjpnaJcIixcInRvb2xiYXIuc2F2ZU1lbnVcIjpcIuWEsuWtmOmBuOWWrlwiLFwidG9vbGJhci5tYXhpbWl6ZVdpbmRvd1wiOlwi5pyA5aSn5YyW6KaW56qXXCIsXCJ0b29sYmFyLnJlc3RvcmVXaW5kb3dcIjpcIumChOWOn+imlueql1wiLFwidG9vbGJhci5taW5pbWl6ZVdpbmRvd1wiOlwi5pyA5bCP5YyW6KaW56qXXCIsXCJjaGFuZ2VMYXlvdXQuZnVsbFdpZHRoXCI6XCLlhajonqLluZXlr6zluqZcIixcImNoYW5nZUxheW91dC5jb2x1bW5zXCI6XCLooYxcIixcImNoYW5nZUxheW91dC5Sb3dzXCI6XCLliJdcIixcImNoYW5nZUxheW91dC5HcmlkXCI6XCLntrLmoLxcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU3dpdGNoZWRcIjpcIuW3peS9nOepuumWk+W3suWIh+aPm1wiLFwic3VjY2Vzc0luZGljYXRvci5oaWRkZW5cIjpcIue0ouW8leaomeexpOW3sumaseiXj1wiLFwic3VjY2Vzc0luZGljYXRvci5zaG93blwiOlwi57Si5byV5qiZ57Gk5bey6aGv56S6XCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxvY2tlZFwiOlwi6aCB6Z2i5bey5LiK6Y6WXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnVubG9ja2VkXCI6XCLpoIHpnaLlt7Lop6PpjpZcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRcIjpcIuW3peS9nOepuumWk+W3suWEsuWtmFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTYXZlZEFzXCI6XCLlt6XkvZznqbrplpPlt7Llj6blrZjngroge3t3b3Jrc3BhY2V9fVwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VSZW5hbWVkXCI6XCLlt6XkvZznqbrplpPlt7Lph43mlrDlkb3lkI1cIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVNhdmVkXCI6XCLpoIHpnaLlt7LlhLLlrZhcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUhhc0JlZW5TYXZlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIGhhcyBiZWVuIHNhdmVkLiBaSFwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlQ29weVNhdmVkXCI6XCLpoIHpnaLlt7Llj6blrZjngroge3t0aXRsZX19XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VSZW5hbWVkXCI6XCLpoIHpnaLlt7Lph43mlrDlkb3lkI1cIixcInN1Y2Nlc3NJbmRpY2F0b3IuY29udGV4dEdyb3VwQXBwbGllZFwiOlwi6ISI57Wh576k57WE5bey5aWX55SoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLm5hbWVkQ29udGV4dEdyb3VwQXBwbGllZFwiOlwie3tjb2xvck5hbWV9fSDohIjntaHnvqTntYTlt7LlpZfnlKhcIixcInN1Y2Nlc3NJbmRpY2F0b3Iudmlld1JlbW92ZWRcIjpcIuW+nuiEiOe1oee+pOe1hOS4reenu+mZpOeahOimluWcllwiLFwic3VjY2Vzc0luZGljYXRvci52aWV3c1JlbW92ZWRcIjpcIuW+nuiEiOe1oee+pOe1hOS4reenu+mZpOeahOimluWcllwiLFwic3VjY2Vzc0luZGljYXRvci5sYXlvdXRBcHBsaWVkXCI6XCJ7e2xheW91dE5hbWV9fSDniYjpnaLlt7LlpZfnlKhcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlRGVsZXRlZFwiOlwi5bel5L2c56m66ZaT5bey5Yiq6ZmkXCIsXCJlcnJvckluZGljYXRvci5wYWdlU2F2ZUZhaWxlZFwiOlwi6aCB6Z2i54Sh5rOV5YSy5a2YXCIsXCJlcnJvckluZGljYXRvci53b3Jrc3BhY2VTYXZlRmFpbGVkXCI6XCLlt6XkvZznqbrplpPnhKHms5XlhLLlrZhcIixcImVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlUGFnZVwiOlwi54Sh5rOV6KSH5a+r6aCB6Z2iXCIsXCJpbmZvSW5kaWNhdG9yLmNvbG9yTGlua0F0dGVtcHRcIjpcIuaIkeWAkeWYl+ippuWwjeatpOe0ouW8leaomeexpOmAsuihjOmhj+iJsumAo+e1kO+8jOS9hue2suermS/lhaflrrnmiYDmnInogIXlsJrmnKrllZ/nlKjoqbLlip/og71cIixcImdsb2JhbC5jYW5jZWxcIjpcIuWPlua2iFwiLFwiZ2xvYmFsLmNvbmZpcm1cIjpcIueiuuiqjVwiLFwiZ2xvYmFsLnNhdmVcIjpcIuWEsuWtmFwiLFwiZ2xvYmFsLmRlbGV0ZVwiOlwiRGVsZXRlIFpIXCIsXCJhcHBSZXN1bHRzLmhlYWRlclwiOlwiRmVhdHVyZWQgQ29udGVudCBaSFwiLFwicmVjZW50bHlWaXNpdGVkLmhlYWRlclwiOlwiUmVjZW50bHkgdmlzaXRlZCBaSFwiLFwibGFuZGluZ1BhZ2Uuc3ViaGVhZGVyXCI6XCJBcHBzIGFuZCB3ZWJzaXRlcyBzZWxlY3RlZCBieSBhbiBhZG1pbiB3aWxsIHNob3cgaGVyZSBaSFwiLFwiYXJpYS5vcGVuQnJvd3NlclwiOlwi6ZaL5ZWf54CP6Ka95Zmo6YG45ZauXCIsXCJhcmlhLmJyb3dzZXJUYWJzXCI6XCLngI/opr3lmajntKLlvJXmqJnnsaRcIixcImFyaWEudmlld1RhYlwiOlwie3t0aXRsZX19IOeahOimluWclue0ouW8leaomeexpFwiLFwiYXJpYS5jbG9zZVBhZ2VcIjpcIumXnOmWiSB7e3RpdGxlfX0g55qE6aCB6Z2i57Si5byV5qiZ57Gk5oyJ6YiVXCIsXCJhcmlhLmNsb3NlVGFiXCI6XCLpl5zplonntKLlvJXmqJnnsaQge3t0aXRsZX19XCIsXCJhcmlhLnRpdGxlXCI6XCLmqJnpoYxcIixcImFyaWEuY2xvc2VDb250ZXh0R3JvdXBcIjpcIuS9v+eUqCBFc2Mg6Y216Zec6ZaJ6ISI57Wh576k57WE6YG45Y+W5bCN6Kmx5qGGXCIsXCJhcmlhLmNvbG9yTGlua2luZ1wiOlwi6aGv56S65oiW6Zqx6JeP6aGP6Imy6YCj57WQXCIsXCJhcmlhLmFwcGx5Q29sb3JMaW5raW5nXCI6XCLoq4vpgbjlj5bopoHlpZfnlKjpoY/oibLpgKPntZDnmoToppblnJZcIixcImFyaWEuYXNzaWduQ29sb3JMaW5raW5nQ3VycmVudFZpZXdcIjpcIuebruWJjeimluWcluWIhumFjee1piB7e25hbWV9fSDohIjntaHnvqTntYRcIixcImFyaWEuYXNzaWduQ29sb3JMaW5raW5nQ3VycmVudFZpZXdzXCI6XCLnm67liY3oppblnJbliIbphY3ntaYge3tuYW1lfX0g6ISI57Wh576k57WEXCIsXCJhcmlhLnNldENvbG9yTGlua2luZ0FjdGl2ZVZpZXdcIjpcIuWwh+WVn+eUqOimluWcluioreWumueCuiB7e25hbWV9fSDohIjntaHnvqTntYRcIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld3NcIjpcIuWwh+WVn+eUqOimluWcluioreWumueCuiB7e25hbWV9fSDohIjntaHnvqTntYRcIixcImFyaWEuZXNjYXBlTGF5b3V0RGlhbG9nXCI6XCLkvb/nlKggRXNjIOmNtemXnOmWieiuiuabtOeJiOmdouWwjeipseahhlwiLFwiZ2xvYmFsLnN1cGVydGFiXCI6XCJTdXBlcnRhYiBaSFwiLFwiZ2xvYmFsLnRhYlwiOlwiVGFiIFpIXCIsXCJib29rbWFya3MuZWRpdEJvb2ttYXJrXCI6XCJFZGl0IEJvb2ttYXJrIFpIXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFwiOlwiQm9va21hcmsgYWRkZWQgWkhcIixcImJvb2ttYXJrcy5kb25lXCI6XCJEb25lIFpIXCIsXCJib29rbWFya3MucmVtb3ZlXCI6XCJSZW1vdmUgWkhcIixcImJvb2ttYXJrcy5ib29rbWFya3NQYW5lbFwiOlwiQm9va21hcmtzIFBhbmVsIFpIXCIsXCJib29rbWFya3MuY2xvc2VQYW5lbFwiOlwiQ2xvc2UgQm9va21hcmtzIFBhbmVsIFpIXCIsXCJib29rbWFya3MuYm9va21hcmtzXCI6XCJCb29rbWFya3MgWkhcIixcImJvb2ttYXJrcy5hbGxCb29rbWFya3NcIjpcIkFsbCBCb29rbWFya3MgWkhcIixcImJvb2ttYXJrcy5mYXZvcml0ZXNcIjpcIkZhdm9yaXRlcyBaSFwiLFwiYm9va21hcmtzLnNlYXJjaEJvb2ttYXJrc1wiOlwiU2VhcmNoIEJvb2ttYXJrcyBaSFwiLFwiYm9va21hcmtzLmNsZWFyU2VhcmNoSW5wdXRcIjpcIkNsZWFyIFNlYXJjaCBJbnB1dCBaSFwiLFwiYm9va21hcmtzLmNyZWF0ZUZvbGRlclwiOlwiQ3JlYXRlIE5ldyBGb2xkZXIgWkhcIixcImJvb2ttYXJrcy5leGl0Rm9sZGVyXCI6XCJFeGl0IEZvbGRlciBaSFwiLFwiYm9va21hcmtzLm5ld0ZvbGRlclwiOlwiTmV3IEZvbGRlciBaSFwiLFwiYm9va21hcmtzLm5hbWVkRm9sZGVyXCI6XCJ7e25hbWV9fSBGb2xkZXIgWkhcIixcImJvb2ttYXJrcy5ib29rbWFya1NldHRpbmdzXCI6XCJ7e25hbWV9fSBCb29rbWFyayBTZXR0aW5ncyBaSFwiLFwiYm9va21hcmtzLmZvbGRlclNldHRpbmdzXCI6XCJ7e25hbWV9fSBGb2xkZXIgU2V0dGluZ3MgWkhcIixcImJvb2ttYXJrcy5ub1Jlc3VsdHNGb3VuZFwiOlwiTm8gcmVzdWx0cyBmb3VuZCBaSFwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kU3VidGV4dFwiOlwiVGhlcmUgYXJlIG5vIGJvb2ttYXJrcyB0aGF0IG1hdGNoIHlvdXIgc2VhcmNoIFpIXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1wiOlwiTm90aGluZyB0byBzaG93IHlldCBaSFwiLFwiYm9va21hcmtzLm5vdGhpbmdUb1Nob3dTdWJ0ZXh0XCI6XCJBZGQgYSBib29rbWFyayB0byB0aGlzIGZvbGRlciBaSFwiLFwiYm9va21hcmtzLnJlc3VsdHNGb3VuZEluXCI6XCJSZXN1bHRzIGZvdW5kIGluIHt7bmFtZX19IFpIXCIsXCJib29rbWFya3MucmVzdWx0c0luT3RoZXJGb2xkZXJzXCI6XCJSZXN1bHRzIGZvdW5kIGluIG90aGVyIGZvbGRlcnMgWkhcIixcImJvb2ttYXJrcy5hbGxSZXN1bHRzRm91bmRJblwiOlwiQWxsIHJlc3VsdHMgZm91bmQgaW4gWkhcIixcImJvb2ttYXJrcy5lZGl0TmFtZVwiOlwiRWRpdCBOYW1lIFpIXCIsXCJib29rbWFya3MubW92ZVwiOlwiTW92ZSBaSFwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUaXRsZVwiOlwiQm9va21hcmsgQWRkZWQgWkhcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkVG9Gb2xkZXJcIjpcIllvdXIgYm9va21hcmsgd2FzIGFkZGVkIHRvIFxcXFxcInt7Zm9sZGVyTmFtZX19XFxcXFwiIFpIXCIsXCJib29rbWFya3MuYm9va21hcmtFZGl0ZWRUaXRsZVwiOlwiQm9va21hcmsgRWRpdGVkIFpIXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiXCI6XCJTYXZlIFN1cGVydGFiIFpIXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcIlNhdmUgU3VwZXJ0YWIgQXMuLi4gWkhcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBaSFwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgU3VwZXJ0YWIgWkhcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5uZXdUYWJcIjpcIk5ldyBUYWIgWkhcIixcImVudGVycHJpc2VTYXZlTWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBcyBaSFwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5yZW5hbWVTdXBlcnRhYlwiOlwiUmVuYW1lIFpIXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnVuc2F2ZWRDaGFuZ2VzXCI6XCJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhpcyBUYWIuIFpIXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlVGFiXCI6XCJDbG9zZSBUYWIgWkhcIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VTdXBlcnRhYlwiOlwiQ2xvc2UgU3VwZXJ0YWIgWkhcIixcImVudGVycHJpc2VTYXZlTW9kYWwuc2F2ZVN1cGVydGFiQ291bnRcIjpcIlNhdmUge3tjb3VudH19IFN1cGVydGFicyBiZWZvcmUgY2xvc2luZz8gWkhcIixcImVudGVycHJpc2VNb2RhbC5kaXNjYXJkU3VwZXJ0YWJXYXJuaW5nXCI6XCJBbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHRoaXMgU3VwZXJ0YWIgd2lsbCBiZSBsb3N0LiBaSFwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgdGhlIFxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYj8gWkhcIixcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYldhcm5pbmdcIjpcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBTdXBlcnRhYj8gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZSBhbmQgaXMgcGVybWFuZW50LiBaSFwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJTYXZlZFwiOlwiU3VwZXJ0YWIgU2F2ZWQgWkhcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlblNhdmVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gc2F2ZWQuIFpIXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkRlbGV0ZWRcIjpcIlN1cGVydGFiIERlbGV0ZWQgWkhcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlbkRlbGV0ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYiBoYXMgYmVlbiBkZWxldGVkLiBaSFwiLFwiZW50ZXJwcmlzZUVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlVGFiXCI6XCJGYWlsZWQgdG8gZHVwbGljYXRlIFRhYiBaSFwiLFwiZW50ZXJwcmlzZUVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlU3VwZXJ0YWJcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgU3VwZXJ0YWIgWkhcIixcImVudGVycHJpc2VDb21tYW5kQmFyLnN3aXRjaFRvU3VwZXJ0YWJcIjpcIlN3aXRjaCB0byBTdXBlcnRhYiBaSFwiLFwiZW50ZXJwcmlzZUNvbW1hbmRCYXIuZ29Ub1wiOlwiR28gdG8ge3t0eXBlfX0gWkhcIixcImNvbnRleHRNZW51LnF1aXRFbnRlcnByaXNlQnJvd3NlclwiOlwiUXVpdCBaSFwifScpLFJuPUpTT04ucGFyc2UoJ3tcImNvbnRleHRNZW51Lm5ld1dpbmRvd1wiOlwiTmV3IFdpbmRvd1wiLFwiY29udGV4dE1lbnUubmV3UGFnZVwiOlwiTmV3IFBhZ2VcIixcImNvbnRleHRNZW51LnJlc3RvcmVcIjpcIlJlc3RvcmUgdG8gTGFzdCBTYXZlZCBDaGFuZ2VzXCIsXCJjb250ZXh0TWVudS5zd2l0Y2hXb3Jrc3BhY2VcIjpcIlN3aXRjaCBXb3Jrc3BhY2VcIixcImNvbnRleHRNZW51LmFwcGVhcmFuY2VcIjpcIkFwcGVhcmFuY2VcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VcIjpcIlNhdmUgV29ya3NwYWNlXCIsXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlQXNcIjpcIlNhdmUgV29ya3NwYWNlIEFzLi4uXCIsXCJjb250ZXh0TWVudS5yZW5hbWVXb3Jrc3BhY2VcIjpcIlJlbmFtZSBXb3Jrc3BhY2VcIixcImNvbnRleHRNZW51LmRlbGV0ZVdvcmtzcGFjZVwiOlwiRGVsZXRlIFdvcmtzcGFjZVwiLFwiY29udGV4dE1lbnUuZG93bmxvYWRzXCI6XCJEb3dubG9hZHNcIixcImNvbnRleHRNZW51LnNhdmVQYWdlXCI6XCJTYXZlIFBhZ2VcIixcImNvbnRleHRNZW51LnNhdmVQYWdlQXNcIjpcIlNhdmUgUGFnZSBBcy4uLlwiLFwiY29udGV4dE1lbnUucHJpbnRcIjpcIlByaW50Li4uXCIsXCJjb250ZXh0TWVudS5wcmludFNjcmVlblwiOlwiUHJpbnQgU2NyZWVuXCIsXCJjb250ZXh0TWVudS5jbG9zZVdpbmRvd1wiOlwiQ2xvc2UgV2luZG93XCIsXCJjb250ZXh0TWVudS5vcGVuU3RvcmVmcm9udFwiOlwiT3BlbiBTdG9yZWZyb250XCIsXCJjb250ZXh0TWVudS5xdWl0UGxhdGZvcm1cIjpcIlF1aXQge3twbGF0Zm9ybUxhYmVsfX1cIixcImNvbnRleHRNZW51Lm5ld1ZpZXdcIjpcIk5ldyBWaWV3XCIsXCJjb250ZXh0TWVudS5vcGVuVmlld1wiOlwiT3BlbiBWaWV3IHdpdGggRGVmYXVsdCBXZWIgQnJvd3NlclwiLFwiY29udGV4dE1lbnUub3BlblZpZXdzXCI6XCJPcGVuIFZpZXdzIHdpdGggRGVmYXVsdCBXZWIgQnJvd3NlclwiLFwiY29udGV4dE1lbnUucmVsb2FkXCI6XCJSZWxvYWRcIixcImNvbnRleHRNZW51LnJlbG9hZFZpZXdcIjpcIlJlbG9hZCBWaWV3XCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3c1wiOlwiUmVsb2FkIFZpZXdzXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZVwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld1wiOlwiRHVwbGljYXRlIFZpZXdcIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVZpZXdzXCI6XCJEdXBsaWNhdGUgVmlld3NcIixcImNvbnRleHRNZW51LmFkZFZpZXdcIjpcIkFkZCBWaWV3IHRvIENoYW5uZWxcIixcImNvbnRleHRNZW51LmFkZFZpZXdzXCI6XCJBZGQgVmlld3MgdG8gQ2hhbm5lbFwiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld1wiOlwiUmVtb3ZlIFZpZXcgZnJvbSBDaGFubmVsXCIsXCJjb250ZXh0TWVudS5yZW1vdmVWaWV3c1wiOlwiUmVtb3ZlIFZpZXdzIGZyb20gQ2hhbm5lbFwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3XCI6XCJDbG9zZSBWaWV3XCIsXCJjb250ZXh0TWVudS5jbG9zZVZpZXdzXCI6XCJDbG9zZSBWaWV3c1wiLFwiY29udGV4dE1lbnUuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYlwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlUGFnZVwiOlwiRHVwbGljYXRlIFBhZ2VcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRcIjpcIlByaW50XCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50QWxsXCI6XCJQcmludCBBbGxcIixcInNhdmVNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwiU2F2ZSBXb3Jrc3BhY2UgQXNcIixcInNhdmVNZW51LnNhdmVQYWdlQXNcIjpcIlNhdmUgUGFnZSBBc1wiLFwic2F2ZU1vZGFsLmVudGVyVmFsdWVcIjpcIlBsZWFzZSBlbnRlciBhIHZhbHVlXCIsXCJzYXZlTW9kYWwuYWxyZWFkeUV4aXN0c1wiOlwie3t0aXRsZX19IGFscmVhZHkgZXhpc3RzLlwiLFwic2F2ZU1vZGFsLnBsZWFzZUVudGVyVmFsaWROYW1lXCI6XCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBuYW1lXCIsXCJzYXZlTW9kYWwucmVuYW1lUGFnZVwiOlwiUmVuYW1lIFBhZ2VcIixcInNhdmVNb2RhbC5jbG9zZVBhZ2VcIjpcIkNsb3NlIFBhZ2VcIixcInNhdmVNb2RhbC5kaXNjYXJkQ2hhbmdlc1wiOlwiRGlzY2FyZCBDaGFuZ2VzXCIsXCJzYXZlTW9kYWwuZGlzY2FyZEFsbFwiOlwiRGlzY2FyZCBBbGxcIixcInNhdmVNb2RhbC5zYXZlQWxsXCI6XCJTYXZlIEFsbFwiLFwic2F2ZU1vZGFsLnNhdmVQYWdlc0NvdW50XCI6XCJTYXZlICh7e2NvdW50fX0pIHBhZ2VzIGJlZm9yZSBjbG9zaW5nP1wiLFwiZGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgUGFnZVwiLFwiZW50ZXJwcmlzZURlZmF1bHRQYWdlVGl0bGVcIjpcIlVudGl0bGVkIFN1cGVydGFiXCIsXCJhZGROZXdQYWdlXCI6XCJOZXcgUGFnZVwiLFwiYWRkTmV3VGFiXCI6XCJBZGQgTmV3IFRhYlwiLFwiYWRkTmV3Vmlld1wiOlwiTmV3IFZpZXdcIixcInJlc3RvcmVNb2RhbFwiOlwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlc3RvcmUgdG8gbGFzdCBzYXZlZCBjaGFuZ2VzP1wiLFwibW9kYWwuZGlzY2FyZFdhcm5pbmdcIjpcIkFueSB1bnNhdmVkIGNoYW5nZXMgd2lsbCBiZSBkaXNjYXJkZWRcIixcIm1vZGFsLmRpc2NhcmRQYWdlV2FybmluZ1wiOlwiQW55IHVuc2F2ZWQgY2hhbmdlcyB0byB0aGlzIHBhZ2Ugd2lsbCBiZSBsb3N0LlwiLFwibW9kYWwuc2F2ZUNoYW5nZXNQcm9tcHRcIjpcIlNhdmUgY2hhbmdlcyBiZWZvcmUgY2xvc2luZz9cIixcIm1vZGFsLnBhZ2VDbG9zZVwiOlwiUGFnZSBDbG9zZVwiLFwic3dpdGNoV29ya3NwYWNlTW9kYWxcIjpcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBzd2l0Y2ggdG8ge3t3b3Jrc3BhY2V9fT9cIixcInN3aXRjaFdvcmtzcGFjZU1vZGFsLndhcm5pbmdcIjpcIkFueSB1bnNhdmVkIGNoYW5nZXMgd2lsbCBiZSBkaXNjYXJkZWRcIixcImRlbGV0ZVdvcmtzcGFjZU1vZGFsXCI6XCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcGVybWFuZW50bHkgZGVsZXRlIHRoaXMgd29ya3NwYWNlP1wiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLndhcm5pbmdcIjpcIkEgV29ya3NwYWNlIHdpdGggdGhlIG5hbWUge3t3b3Jrc3BhY2V9fSBhbHJlYWR5IGV4aXN0cy4gRG8geW91IHdhbnQgdG8gcmVwbGFjZSBpdD9cIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC53YXJuaW5nLmJvZHlcIjpcIkEgd29ya3NwYWNlIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cy4gUmVwbGFjaW5nIGl0IHdpbGwgb3ZlcndyaXRlIGl0cyBjdXJyZW50IGNvbnRlbnRzLlwiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLnJlcGxhY2VcIjpcIlJlcGxhY2VcIixcImNsb3NlUGxhdGZvcm1cIjpcIkNsb3NlIHRoZSBwbGF0Zm9ybVwiLFwiY2xvc2VQbGF0Zm9ybS53b3Jrc3BhY2VcIjpcIkNsb3NlIHRoZSB7e3dvcmtzcGFjZX19IFBsYXRmb3JtXCIsXCJjbG9zZVBsYXRmb3JtLndhcm5pbmdcIjpcIkNsb3NpbmcgYSBwbGF0Zm9ybSB3aWxsIGNsb3NlIGFueSB3b3Jrc3BhY2VzLCBhcHBzIG9yIGFueSBwcm9jZXNzZXMgdGhhdCBhcmUgcnVubmluZy5cIixcImJhY2tcIjpcIkJhY2tcIixcImZvcndhcmRcIjpcIkZvcndhcmRcIixcInJlbG9hZFwiOlwiUmVsb2FkXCIsXCJncmVlblwiOlwiR3JlZW5cIixcInB1cnBsZVwiOlwiUHVycGxlXCIsXCJvcmFuZ2VcIjpcIk9yYW5nZVwiLFwicmVkXCI6XCJSZWRcIixcInBpbmtcIjpcIlBpbmtcIixcInllbGxvd1wiOlwiWWVsbG93XCIsXCJ0aGVtZS5saWdodFwiOlwiTGlnaHRcIixcInRoZW1lLmRhcmtcIjpcIkRhcmtcIixcInRoZW1lLnN5c3RlbVwiOlwiU3luYyB3aXRoIE9TIHNldHRpbmdcIixcInRvb2xiYXIuaGlkZVRhYnNcIjpcIkhpZGUgVGFic1wiLFwidG9vbGJhci5zaG93VGFic1wiOlwiU2hvdyBUYWJzXCIsXCJ0b29sYmFyLmxvY2tcIjpcIkxvY2tcIixcInRvb2xiYXIudW5sb2NrXCI6XCJVbmxvY2tcIixcInRvb2xiYXIuY29sb3JMaW5raW5nXCI6XCJDb2xvciBMaW5raW5nXCIsXCJ0b29sYmFyLmNoYW5nZUxheW91dFwiOlwiQ2hhbmdlIExheW91dFwiLFwidG9vbGJhci5zYXZlTWVudVwiOlwiU2F2ZSBNZW51XCIsXCJ0b29sYmFyLm1heGltaXplV2luZG93XCI6XCJNYXhpbWl6ZSBXaW5kb3dcIixcInRvb2xiYXIucmVzdG9yZVdpbmRvd1wiOlwiUmVzdG9yZSBXaW5kb3dcIixcInRvb2xiYXIubWluaW1pemVXaW5kb3dcIjpcIk1pbmltaXplIFdpbmRvd1wiLFwiY2hhbmdlTGF5b3V0LmZ1bGxXaWR0aFwiOlwiRnVsbCBXaWR0aFwiLFwiY2hhbmdlTGF5b3V0LmNvbHVtbnNcIjpcIkNvbHVtbnNcIixcImNoYW5nZUxheW91dC5Sb3dzXCI6XCJSb3dzXCIsXCJjaGFuZ2VMYXlvdXQuR3JpZFwiOlwiR3JpZFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTd2l0Y2hlZFwiOlwiV29ya3NwYWNlIFN3aXRjaGVkXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmhpZGRlblwiOlwiVGFicyBhcmUgSGlkZGVuXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnNob3duXCI6XCJUYWJzIGFyZSBTaG93blwiLFwic3VjY2Vzc0luZGljYXRvci5sb2NrZWRcIjpcIlBhZ2UgaXMgTG9ja2VkXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnVubG9ja2VkXCI6XCJQYWdlIGlzIFVubG9ja2VkXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkXCI6XCJXb3Jrc3BhY2Ugc2F2ZWRcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRBc1wiOlwiV29ya3NwYWNlIHNhdmVkIGFzIHt7d29ya3NwYWNlfX1cIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlUmVuYW1lZFwiOlwiV29ya3NwYWNlIHJlbmFtZWRcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVNhdmVkXCI6XCJQYWdlIFNhdmVkXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBoYXMgYmVlbiBzYXZlZC5cIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUNvcHlTYXZlZFwiOlwiUGFnZSBzYXZlZCBhcyB7e3RpdGxlfX1cIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVJlbmFtZWRcIjpcIlBhZ2UgcmVuYW1lZFwiLFwic3VjY2Vzc0luZGljYXRvci5jb250ZXh0R3JvdXBBcHBsaWVkXCI6XCJDb250ZXh0IGdyb3VwIGFwcGxpZWRcIixcInN1Y2Nlc3NJbmRpY2F0b3IubmFtZWRDb250ZXh0R3JvdXBBcHBsaWVkXCI6XCJ7e2NvbG9yTmFtZX19IGNvbnRleHQgZ3JvdXAgYXBwbGllZFwiLFwic3VjY2Vzc0luZGljYXRvci52aWV3UmVtb3ZlZFwiOlwiVmlldyByZW1vdmVkIGZyb20gY29udGV4dCBncm91cFwiLFwic3VjY2Vzc0luZGljYXRvci52aWV3c1JlbW92ZWRcIjpcIlZpZXdzIHJlbW92ZWQgZnJvbSBjb250ZXh0IGdyb3VwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxheW91dEFwcGxpZWRcIjpcInt7bGF5b3V0TmFtZX19IGxheW91dCBhcHBsaWVkXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZURlbGV0ZWRcIjpcIldvcmtzcGFjZSBkZWxldGVkXCIsXCJlcnJvckluZGljYXRvci5wYWdlU2F2ZUZhaWxlZFwiOlwiUGFnZSBmYWlsZWQgdG8gc2F2ZVwiLFwiZXJyb3JJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZUZhaWxlZFwiOlwiV29ya3NwYWNlIGZhaWxlZCB0byBzYXZlXCIsXCJlcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVBhZ2VcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgUGFnZVwiLFwiaW5mb0luZGljYXRvci5jb2xvckxpbmtBdHRlbXB0XCI6XCJXZSBhdHRlbXB0ZWQgdG8gY29sb3IgbGluayB0aGlzIHRhYiwgYnV0IHRoZSBzaXRlL2NvbnRlbnQgb3duZXIgaGFzIG5vdCBlbmFibGVkIGl0IHlldFwiLFwiZ2xvYmFsLmNhbmNlbFwiOlwiQ2FuY2VsXCIsXCJnbG9iYWwuY29uZmlybVwiOlwiQ29uZmlybVwiLFwiZ2xvYmFsLnNhdmVcIjpcIlNhdmVcIixcImdsb2JhbC5kZWxldGVcIjpcIkRlbGV0ZVwiLFwiYXBwUmVzdWx0cy5oZWFkZXJcIjpcIkZlYXR1cmVkIENvbnRlbnRcIixcInJlY2VudGx5VmlzaXRlZC5oZWFkZXJcIjpcIlJlY2VudGx5IHZpc2l0ZWRcIixcImxhbmRpbmdQYWdlLnN1YmhlYWRlclwiOlwiQXBwcyBhbmQgd2Vic2l0ZXMgc2VsZWN0ZWQgYnkgYW4gYWRtaW4gd2lsbCBzaG93IGhlcmVcIixcImFyaWEub3BlbkJyb3dzZXJcIjpcIk9wZW4gQnJvd3NlciBNZW51XCIsXCJhcmlhLmJyb3dzZXJUYWJzXCI6XCJCcm93c2VyIFRhYnNcIixcImFyaWEudmlld1RhYlwiOlwiVmlldyBUYWIgZm9yIHt7dGl0bGV9fVwiLFwiYXJpYS5jbG9zZVBhZ2VcIjpcIkNsb3NlIFBhZ2UgVGFiIEJ1dHRvbiBmb3Ige3t0aXRsZX19XCIsXCJhcmlhLmNsb3NlVGFiXCI6XCJDbG9zZSBUYWIge3t0aXRsZX19XCIsXCJhcmlhLnRpdGxlXCI6XCJUaXRsZVwiLFwiYXJpYS5jbG9zZUNvbnRleHRHcm91cFwiOlwiVXNlIGVzY2FwZSB0byBjbG9zZSBjb250ZXh0IGdyb3VwIHNlbGVjdGlvbiBkaWFsb2dcIixcImFyaWEuY29sb3JMaW5raW5nXCI6XCJTaG93IG9yIGhpZGUgY29sb3IgbGlua2luZ1wiLFwiYXJpYS5hcHBseUNvbG9yTGlua2luZ1wiOlwiUGxlYXNlIHNlbGVjdCBhIHZpZXcgdG8gYXBwbHkgY29sb3IgbGlua2luZ1wiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld1wiOlwiQ3VycmVudCB2aWV3IGFzc2lnbmVkIHRvIHt7bmFtZX19IGNvbnRleHQgZ3JvdXBcIixcImFyaWEuYXNzaWduQ29sb3JMaW5raW5nQ3VycmVudFZpZXdzXCI6XCJDdXJyZW50IHZpZXdzIGFzc2lnbmVkIHRvIHt7bmFtZX19IGNvbnRleHQgZ3JvdXBcIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld1wiOlwiU2V0IGFjdGl2ZSB2aWV3IHRvIHt7bmFtZX19IGNvbnRleHQgZ3JvdXBcIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld3NcIjpcIlNldCBhY3RpdmUgdmlld3MgdG8ge3tuYW1lfX0gY29udGV4dCBncm91cFwiLFwiYXJpYS5lc2NhcGVMYXlvdXREaWFsb2dcIjpcIlVzZSBlc2NhcGUgdG8gY2xvc2UgY2hhbmdlIGxheW91dCBkaWFsb2dcIixcImdsb2JhbC5zdXBlcnRhYlwiOlwiU3VwZXJ0YWJcIixcImdsb2JhbC50YWJcIjpcIlRhYlwiLFwiYm9va21hcmtzLmVkaXRCb29rbWFya1wiOlwiRWRpdCBCb29rbWFya1wiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRcIjpcIkJvb2ttYXJrIGFkZGVkXCIsXCJib29rbWFya3MuZG9uZVwiOlwiRG9uZVwiLFwiYm9va21hcmtzLnJlbW92ZVwiOlwiUmVtb3ZlXCIsXCJib29rbWFya3MuYm9va21hcmtzUGFuZWxcIjpcIkJvb2ttYXJrcyBQYW5lbFwiLFwiYm9va21hcmtzLmNsb3NlUGFuZWxcIjpcIkNsb3NlIEJvb2ttYXJrcyBQYW5lbFwiLFwiYm9va21hcmtzLmJvb2ttYXJrc1wiOlwiQm9va21hcmtzXCIsXCJib29rbWFya3MuYWxsQm9va21hcmtzXCI6XCJBbGwgQm9va21hcmtzXCIsXCJib29rbWFya3MuZmF2b3JpdGVzXCI6XCJGYXZvcml0ZXNcIixcImJvb2ttYXJrcy5zZWFyY2hCb29rbWFya3NcIjpcIlNlYXJjaCBCb29rbWFya3NcIixcImJvb2ttYXJrcy5jbGVhclNlYXJjaElucHV0XCI6XCJDbGVhciBTZWFyY2ggSW5wdXRcIixcImJvb2ttYXJrcy5jcmVhdGVGb2xkZXJcIjpcIkNyZWF0ZSBOZXcgRm9sZGVyXCIsXCJib29rbWFya3MuZXhpdEZvbGRlclwiOlwiRXhpdCBGb2xkZXJcIixcImJvb2ttYXJrcy5uZXdGb2xkZXJcIjpcIk5ldyBGb2xkZXJcIixcImJvb2ttYXJrcy5uYW1lZEZvbGRlclwiOlwie3tuYW1lfX0gRm9sZGVyXCIsXCJib29rbWFya3MuYm9va21hcmtTZXR0aW5nc1wiOlwie3tuYW1lfX0gQm9va21hcmsgU2V0dGluZ3NcIixcImJvb2ttYXJrcy5mb2xkZXJTZXR0aW5nc1wiOlwie3tuYW1lfX0gRm9sZGVyIFNldHRpbmdzXCIsXCJib29rbWFya3Mubm9SZXN1bHRzRm91bmRcIjpcIk5vIHJlc3VsdHMgZm91bmRcIixcImJvb2ttYXJrcy5ub1Jlc3VsdHNGb3VuZFN1YnRleHRcIjpcIlRoZXJlIGFyZSBubyBib29rbWFya3MgdGhhdCBtYXRjaCB5b3VyIHNlYXJjaFwiLFwiYm9va21hcmtzLm5vdGhpbmdUb1Nob3dcIjpcIk5vdGhpbmcgdG8gc2hvdyB5ZXRcIixcImJvb2ttYXJrcy5ub3RoaW5nVG9TaG93U3VidGV4dFwiOlwiQWRkIGEgYm9va21hcmsgdG8gdGhpcyBmb2xkZXJcIixcImJvb2ttYXJrcy5yZXN1bHRzRm91bmRJblwiOlwiUmVzdWx0cyBmb3VuZCBpbiB7e25hbWV9fVwiLFwiYm9va21hcmtzLnJlc3VsdHNJbk90aGVyRm9sZGVyc1wiOlwiUmVzdWx0cyBmb3VuZCBpbiBvdGhlciBmb2xkZXJzXCIsXCJib29rbWFya3MuYWxsUmVzdWx0c0ZvdW5kSW5cIjpcIkFsbCByZXN1bHRzIGZvdW5kIGluXCIsXCJib29rbWFya3MuZWRpdE5hbWVcIjpcIkVkaXQgTmFtZVwiLFwiYm9va21hcmtzLm1vdmVcIjpcIk1vdmVcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkVGl0bGVcIjpcIkJvb2ttYXJrIEFkZGVkXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFRvRm9sZGVyXCI6XCJZb3VyIGJvb2ttYXJrIHdhcyBhZGRlZCB0byBcXFxcXCJ7e2ZvbGRlck5hbWV9fVxcXFxcIlwiLFwiYm9va21hcmtzLmJvb2ttYXJrRWRpdGVkVGl0bGVcIjpcIkJvb2ttYXJrIEVkaXRlZFwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYlwiOlwiU2F2ZSBTdXBlcnRhYlwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYkFzXCI6XCJTYXZlIFN1cGVydGFiIEFzLi4uXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZHVwbGljYXRlXCI6XCJEdXBsaWNhdGVcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5kZWxldGVTdXBlcnRhYlwiOlwiRGVsZXRlIFN1cGVydGFiXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUubmV3VGFiXCI6XCJOZXcgVGFiXCIsXCJlbnRlcnByaXNlU2F2ZU1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcIlNhdmUgU3VwZXJ0YWIgQXNcIixcImVudGVycHJpc2VTYXZlTW9kYWwucmVuYW1lU3VwZXJ0YWJcIjpcIlJlbmFtZVwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC51bnNhdmVkQ2hhbmdlc1wiOlwiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoaXMgVGFiLlwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVRhYlwiOlwiQ2xvc2UgVGFiXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlU3VwZXJ0YWJcIjpcIkNsb3NlIFN1cGVydGFiXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnNhdmVTdXBlcnRhYkNvdW50XCI6XCJTYXZlIHt7Y291bnR9fSBTdXBlcnRhYnMgYmVmb3JlIGNsb3Npbmc/XCIsXCJlbnRlcnByaXNlTW9kYWwuZGlzY2FyZFN1cGVydGFiV2FybmluZ1wiOlwiQW55IHVuc2F2ZWQgY2hhbmdlcyB0byB0aGlzIFN1cGVydGFiIHdpbGwgYmUgbG9zdC5cIixcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYlwiOlwiRGVsZXRlIHRoZSBcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWI/XCIsXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJXYXJuaW5nXCI6XCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgU3VwZXJ0YWI/IFRoaXMgYWN0aW9uIGNhbm5vdCBiZSB1bmRvbmUgYW5kIGlzIHBlcm1hbmVudC5cIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiU2F2ZWRcIjpcIlN1cGVydGFiIFNhdmVkXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkhhc0JlZW5TYXZlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiIGhhcyBiZWVuIHNhdmVkLlwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJEZWxldGVkXCI6XCJTdXBlcnRhYiBEZWxldGVkXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkhhc0JlZW5EZWxldGVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gZGVsZXRlZC5cIixcImVudGVycHJpc2VFcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBUYWJcIixcImVudGVycHJpc2VFcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVN1cGVydGFiXCI6XCJGYWlsZWQgdG8gZHVwbGljYXRlIFN1cGVydGFiXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5zd2l0Y2hUb1N1cGVydGFiXCI6XCJTd2l0Y2ggdG8gU3VwZXJ0YWJcIixcImVudGVycHJpc2VDb21tYW5kQmFyLmdvVG9cIjpcIkdvIHRvIHt7dHlwZX19XCIsXCJjb250ZXh0TWVudS5xdWl0RW50ZXJwcmlzZUJyb3dzZXJcIjpcIlF1aXRcIn0nKSxJbj1KU09OLnBhcnNlKCd7XCJjb250ZXh0TWVudS5uZXdXaW5kb3dcIjpcIk5ldWVzIEZlbnN0ZXJcIixcImNvbnRleHRNZW51Lm5ld1BhZ2VcIjpcIk5ldWUgU2VpdGVcIixcImNvbnRleHRNZW51LnJlc3RvcmVcIjpcIldpZWRlcmhlcnN0ZWxsZW4gZGVyIHp1bGV0enQgZ2VzcGVpY2hlcnRlbiDDhG5kZXJ1bmdlblwiLFwiY29udGV4dE1lbnUuc3dpdGNoV29ya3NwYWNlXCI6XCJXb3Jrc3BhY2Ugd2VjaHNlbG5cIixcImNvbnRleHRNZW51LmFwcGVhcmFuY2VcIjpcIkVyc2NoZWludW5nc2JpbGRcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VcIjpcIldvcmtzcGFjZSBzcGVpY2hlcm5cIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwiV29ya3NwYWNlIHNwZWljaGVybiB1bnRlci4uLlwiLFwiY29udGV4dE1lbnUucmVuYW1lV29ya3NwYWNlXCI6XCJXb3Jrc3BhY2UgdW1iZW5lbm5lblwiLFwiY29udGV4dE1lbnUuZGVsZXRlV29ya3NwYWNlXCI6XCJXb3Jrc3BhY2UgbMO2c2NoZW5cIixcImNvbnRleHRNZW51LmRvd25sb2Fkc1wiOlwiRG93bmxvYWRzXCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZVwiOlwiU2VpdGUgc3BlaWNoZXJuXCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZUFzXCI6XCJTZWl0ZSBzcGVpY2hlcm4gdW50ZXIuLi5cIixcImNvbnRleHRNZW51LnByaW50XCI6XCJEcnVja2VuLi4uXCIsXCJjb250ZXh0TWVudS5wcmludFNjcmVlblwiOlwiQmlsZHNjaGlybWFuc2ljaHQgZHJ1Y2tlblwiLFwiY29udGV4dE1lbnUuY2xvc2VXaW5kb3dcIjpcIkZlbnN0ZXIgc2NobGllw59lblwiLFwiY29udGV4dE1lbnUub3BlblN0b3JlZnJvbnRcIjpcIlNjaGF1ZmVuc3RlciDDtmZmbmVuXCIsXCJjb250ZXh0TWVudS5xdWl0UGxhdGZvcm1cIjpcIlBsYXR0Zm9ybSB2ZXJsYXNzZW5cIixcImNvbnRleHRNZW51Lm5ld1ZpZXdcIjpcIk5ldWUgQW5zaWNodFwiLFwiY29udGV4dE1lbnUub3BlblZpZXdcIjpcIkFuc2ljaHQgbWl0IFN0YW5kYXJkLVdlYmJyb3dzZXIgw7ZmZm5lblwiLFwiY29udGV4dE1lbnUub3BlblZpZXdzXCI6XCJBbnNpY2h0ZW4gbWl0IFN0YW5kYXJkLVdlYmJyb3dzZXIgw7ZmZm5lblwiLFwiY29udGV4dE1lbnUucmVsb2FkXCI6XCJSZWxvYWQgREVcIixcImNvbnRleHRNZW51LnJlbG9hZFZpZXdcIjpcIkFuc2ljaHQgbmV1IGxhZGVuXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3c1wiOlwiQW5zaWNodGVuIG5ldSBsYWRlblwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlXCI6XCJEdXBsaWNhdGUgREVcIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVZpZXdcIjpcIkFuc2ljaHQgZHVwbGl6aWVyZW5cIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVZpZXdzXCI6XCJBbnNpY2h0ZW4gZHVwbGl6aWVyZW5cIixcImNvbnRleHRNZW51LmFkZFZpZXdcIjpcIkFuc2ljaHQgenVtIENoYW5uZWwgaGluenVmw7xnZW5cIixcImNvbnRleHRNZW51LmFkZFZpZXdzXCI6XCJBbnNpY2h0ZW4genVtIENoYW5uZWwgaGluenVmw7xnZW5cIixcImNvbnRleHRNZW51LnJlbW92ZVZpZXdcIjpcIkFuc2ljaHQgYXVzIGRlbSBDaGFubmVsIGVudGZlcm5lblwiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld3NcIjpcIkFuc2ljaHRlbiBhdXMgZGVtIENoYW5uZWwgZW50ZmVybmVuXCIsXCJjb250ZXh0TWVudS5jbG9zZVZpZXdcIjpcIkFuc2ljaHQgc2NobGllw59lblwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3c1wiOlwiQW5zaWNodGVuIHNjaGxpZcOfZW5cIixcImNvbnRleHRNZW51LmNsb3NlVGFiXCI6XCJDbG9zZSBUYWIgREVcIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVBhZ2VcIjpcIlNlaXRlIGR1cGxpemllcmVuXCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50XCI6XCJEcnVja2VuXCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50QWxsXCI6XCJBbGxlIGRydWNrZW5cIixcInNhdmVNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwiV29ya3NwYWNlIHNwZWljaGVybiB1bnRlclwiLFwic2F2ZU1lbnUuc2F2ZVBhZ2VBc1wiOlwiU2VpdGUgc3BlaWNoZXJuIHVudGVyXCIsXCJzYXZlTW9kYWwuZW50ZXJWYWx1ZVwiOlwiUGxlYXNlIGVudGVyIGEgdmFsdWUgREVcIixcInNhdmVNb2RhbC5hbHJlYWR5RXhpc3RzXCI6XCJ7e3RpdGxlfX0gZXhpc3RpZXJ0IGJlcmVpdHMuXCIsXCJzYXZlTW9kYWwucGxlYXNlRW50ZXJWYWxpZE5hbWVcIjpcIkJpdHRlIGdlYmVuIFNpZSBlaW5lbiBnw7xsdGlnZW4gTmFtZW4gZWluXCIsXCJzYXZlTW9kYWwucmVuYW1lUGFnZVwiOlwiU2VpdGUgdW1iZW5lbm5lblwiLFwic2F2ZU1vZGFsLmNsb3NlUGFnZVwiOlwiU2VpdGUgc2NobGllw59lblwiLFwic2F2ZU1vZGFsLmRpc2NhcmRDaGFuZ2VzXCI6XCLDhG5kZXJ1bmdlbiB2ZXJ3ZXJmZW5cIixcInNhdmVNb2RhbC5kaXNjYXJkQWxsXCI6XCJBbGxlIHZlcndlcmZlblwiLFwic2F2ZU1vZGFsLnNhdmVBbGxcIjpcIkFsbGUgc3BlaWNoZXJuXCIsXCJzYXZlTW9kYWwuc2F2ZVBhZ2VzQ291bnRcIjpcIih7e2NvdW50fX0pIFNlaXRlbiB2b3IgZGVtIFNjaGxpZcOfZW4gc3BlaWNoZXJuP1wiLFwiZGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgUGFnZSBERVwiLFwiZW50ZXJwcmlzZURlZmF1bHRQYWdlVGl0bGVcIjpcIlVudGl0bGVkIFN1cGVydGFiIERFXCIsXCJhZGROZXdQYWdlXCI6XCJOZXcgUGFnZSBERVwiLFwiYWRkTmV3VGFiXCI6XCJOZXVlbiBUYWIgaGluenVmw7xnZW5cIixcImFkZE5ld1ZpZXdcIjpcIk5ldWUgQW5zaWNodFwiLFwicmVzdG9yZU1vZGFsXCI6XCJTaW5kIFNpZSBzaWNoZXIsIGRhc3MgU2llIGRpZSB6dWxldHp0IGdlc3BlaWNoZXJ0ZW4gw4RuZGVydW5nZW4gd2llZGVyaGVyc3RlbGxlbiB3b2xsZW4/XCIsXCJtb2RhbC5kaXNjYXJkV2FybmluZ1wiOlwiQWxsZSBuaWNodCBnZXNwZWljaGVydGVuIMOEbmRlcnVuZ2VuIHdlcmRlbiB2ZXJ3b3JmZW5cIixcIm1vZGFsLmRpc2NhcmRQYWdlV2FybmluZ1wiOlwiQWxsZSBuaWNodCBnZXNwZWljaGVydGVuIMOEbmRlcnVuZ2VuIGF1ZiBkaWVzZXIgU2VpdGUgZ2VoZW4gdmVybG9yZW4uXCIsXCJtb2RhbC5zYXZlQ2hhbmdlc1Byb21wdFwiOlwiw4RuZGVydW5nZW4gdm9yIGRlbSBTY2hsaWXDn2VuIHNwZWljaGVybj9cIixcIm1vZGFsLnBhZ2VDbG9zZVwiOlwiUGFnZSBDbG9zZSBERVwiLFwic3dpdGNoV29ya3NwYWNlTW9kYWxcIjpcIlNpbmQgU2llIHNpY2hlciwgZGFzcyBTaWUgenUge3t3b3Jrc3BhY2V9fXdlY2hzZWxuIHdvbGxlbj9cIixcInN3aXRjaFdvcmtzcGFjZU1vZGFsLndhcm5pbmdcIjpcIkFsbGUgbmljaHQgZ2VzcGVpY2hlcnRlbiDDhG5kZXJ1bmdlbiB3ZXJkZW4gdmVyd29yZmVuXCIsXCJkZWxldGVXb3Jrc3BhY2VNb2RhbFwiOlwiU2luZCBTaWUgc2ljaGVyLCBkYXNzIFNpZSBkaWVzZW4gV29ya3NwYWNlIGRhdWVyaGFmdCBsw7ZzY2hlbiB3b2xsZW4/XCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwiRWluIFdvcmtzcGFjZSBtaXQgZGVtIE5hbWVuIHt7d29ya3NwYWNlfX0gZXhpc3RpZXJ0IGJlcmVpdHMuIE3DtmNodGVuIFNpZSBpaG4gZXJzZXR6ZW4/XCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZy5ib2R5XCI6XCJFaW4gV29ya3NwYWNlIG1pdCBkZW1zZWxiZW4gTmFtZW4gZXhpc3RpZXJ0IGJlcmVpdHMuIFdlbm4gU2llIGlobiBlcnNldHplbiwgd2lyZCBkZXIgYWt0dWVsbGUgSW5oYWx0IMO8YmVyc2NocmllYmVuLlwiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLnJlcGxhY2VcIjpcIkVyc2V0emVuXCIsXCJjbG9zZVBsYXRmb3JtXCI6XCJQbGF0dGZvcm0gc2NobGllw59lblwiLFwiY2xvc2VQbGF0Zm9ybS53b3Jrc3BhY2VcIjpcIkRpZSB7e3dvcmtzcGFjZX19IFBsYXR0Zm9ybSBzY2hsaWXDn2VuXCIsXCJjbG9zZVBsYXRmb3JtLndhcm5pbmdcIjpcIldlbm4gU2llIGVpbmUgUGxhdHRmb3JtIHNjaGxpZcOfZW4sIHdlcmRlbiBhbGxlIFdvcmtzcGFjZXMsIEFwcHMgdW5kIGxhdWZlbmRlbiBQcm96ZXNzZSBiZWVuZGV0LlwiLFwiYmFja1wiOlwiWnVyw7xja1wiLFwiZm9yd2FyZFwiOlwiV2VpdGVyXCIsXCJyZWxvYWRcIjpcIk5ldSBsYWRlblwiLFwiZ3JlZW5cIjpcIkdyw7xuXCIsXCJwdXJwbGVcIjpcIkxpbGFcIixcIm9yYW5nZVwiOlwiT3JhbmdlXCIsXCJyZWRcIjpcIlJvdFwiLFwicGlua1wiOlwiUGlua1wiLFwieWVsbG93XCI6XCJHZWxiXCIsXCJ0aGVtZS5saWdodFwiOlwiSGVsbFwiLFwidGhlbWUuZGFya1wiOlwiRHVua2VsXCIsXCJ0aGVtZS5zeXN0ZW1cIjpcIlN5bmNocm9uaXNpZXJ1bmcgbWl0IE9TLUVpbnN0ZWxsdW5nXCIsXCJ0b29sYmFyLmhpZGVUYWJzXCI6XCJUYWJzIGF1c2JsZW5kZW5cIixcInRvb2xiYXIuc2hvd1RhYnNcIjpcIlRhYnMgYW56ZWlnZW5cIixcInRvb2xiYXIubG9ja1wiOlwiU3BlcnJlblwiLFwidG9vbGJhci51bmxvY2tcIjpcIkZyZWlzY2hhbHRlblwiLFwidG9vbGJhci5jb2xvckxpbmtpbmdcIjpcIkZhcmJ2ZXJrbsO8cGZ1bmdcIixcInRvb2xiYXIuY2hhbmdlTGF5b3V0XCI6XCJMYXlvdXQgw6RuZGVyblwiLFwidG9vbGJhci5zYXZlTWVudVwiOlwiTWVuw7wgc3BlaWNoZXJuXCIsXCJ0b29sYmFyLm1heGltaXplV2luZG93XCI6XCJGZW5zdGVyIG1heGltaWVyZW5cIixcInRvb2xiYXIucmVzdG9yZVdpbmRvd1wiOlwiRmVuc3RlciB3aWVkZXJoZXJzdGVsbGVuXCIsXCJ0b29sYmFyLm1pbmltaXplV2luZG93XCI6XCJGZW5zdGVyIG1pbmltaWVyZW5cIixcImNoYW5nZUxheW91dC5mdWxsV2lkdGhcIjpcIlZvbGxlIEJyZWl0ZVwiLFwiY2hhbmdlTGF5b3V0LmNvbHVtbnNcIjpcIlNwYWx0ZW5cIixcImNoYW5nZUxheW91dC5Sb3dzXCI6XCJaZWlsZW5cIixcImNoYW5nZUxheW91dC5HcmlkXCI6XCJSYXN0ZXJcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU3dpdGNoZWRcIjpcIldvcmtzcGFjZSBnZXdlY2hzZWx0XCIsXCJzdWNjZXNzSW5kaWNhdG9yLmhpZGRlblwiOlwiVGFicyBzaW5kIGF1c2dlYmxlbmRldFwiLFwic3VjY2Vzc0luZGljYXRvci5zaG93blwiOlwiVGFicyB3ZXJkZW4gYW5nZXplaWd0XCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxvY2tlZFwiOlwiU2VpdGUgaXN0IGdlc3BlcnJ0XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnVubG9ja2VkXCI6XCJTZWl0ZSBpc3QgZnJlaWdlc2NoYWx0ZXRcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRcIjpcIldvcmtzcGFjZSBnZXNwZWljaGVydFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTYXZlZEFzXCI6XCJXb3Jrc3BhY2UgZ2VzcGVpY2hlcnQgYWxzIHt7d29ya3NwYWNlfX1cIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlUmVuYW1lZFwiOlwiV29ya3NwYWNlIHVtYmVuYW5udFwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlU2F2ZWRcIjpcIlNlaXRlIGdlc3BlaWNoZXJ0XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBoYXMgYmVlbiBzYXZlZC4gREVcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUNvcHlTYXZlZFwiOlwiU2VpdGUgZ2VzcGVpY2hlcnQgYWxzIHt7dGl0bGV9fVwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlUmVuYW1lZFwiOlwiU2VpdGUgdW1iZW5hbm50XCIsXCJzdWNjZXNzSW5kaWNhdG9yLmNvbnRleHRHcm91cEFwcGxpZWRcIjpcIkFuZ2V3YW5kdGUgS29udGV4dGdydXBwZVwiLFwic3VjY2Vzc0luZGljYXRvci5uYW1lZENvbnRleHRHcm91cEFwcGxpZWRcIjpcInt7Y29sb3JOYW1lfX0gYW5nZXdhbmR0ZSBLb250ZXh0Z3J1cHBlXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdSZW1vdmVkXCI6XCJBbnNpY2h0IGF1cyBkZXIgS29udGV4dGdydXBwZSBlbnRmZXJudFwiLFwic3VjY2Vzc0luZGljYXRvci52aWV3c1JlbW92ZWRcIjpcIkFuc2ljaHRlbiBhdXMgZGVyIEtvbnRleHRncnVwcGUgZW50ZmVybnRcIixcInN1Y2Nlc3NJbmRpY2F0b3IubGF5b3V0QXBwbGllZFwiOlwie3tsYXlvdXROYW1lfX0gYW5nZXdhbmR0ZXMgTGF5b3V0XCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZURlbGV0ZWRcIjpcIldvcmtzcGFjZSBnZWzDtnNjaHRcIixcImVycm9ySW5kaWNhdG9yLnBhZ2VTYXZlRmFpbGVkXCI6XCJTZWl0ZSBrb25udGUgbmljaHQgZ2VzcGVpY2hlcnQgd2VyZGVuXCIsXCJlcnJvckluZGljYXRvci53b3Jrc3BhY2VTYXZlRmFpbGVkXCI6XCJXb3Jrc3BhY2Uga29ubnRlIG5pY2h0IGdlc3BlaWNoZXJ0IHdlcmRlblwiLFwiZXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVQYWdlXCI6XCJTZWl0ZSBrYW5uIG5pY2h0IGR1cGxpemllcnQgd2VyZGVuXCIsXCJpbmZvSW5kaWNhdG9yLmNvbG9yTGlua0F0dGVtcHRcIjpcIldpciBoYWJlbiB2ZXJzdWNodCwgZGllc2VtIFRhYiBlaW5lIEZhcmJlIHp1b3JkbmVuLCBhYmVyIGRlciBFaWdlbnTDvG1lciBkZXIgV2Vic2l0ZS9kZXMgSW5oYWx0cyBoYXQgc2llIG5vY2ggbmljaHQgYWt0aXZpZXJ0XCIsXCJnbG9iYWwuY2FuY2VsXCI6XCJBYmJyZWNoZW5cIixcImdsb2JhbC5jb25maXJtXCI6XCJCZXN0w6R0aWdlblwiLFwiZ2xvYmFsLnNhdmVcIjpcIlNwZWljaGVyblwiLFwiZ2xvYmFsLmRlbGV0ZVwiOlwiRGVsZXRlIERFXCIsXCJhcHBSZXN1bHRzLmhlYWRlclwiOlwiRmVhdHVyZWQgQ29udGVudCBEQ1wiLFwicmVjZW50bHlWaXNpdGVkLmhlYWRlclwiOlwiUmVjZW50bHkgdmlzaXRlZCBEQ1wiLFwibGFuZGluZ1BhZ2Uuc3ViaGVhZGVyXCI6XCJBcHBzIGFuZCB3ZWJzaXRlcyBzZWxlY3RlZCBieSBhbiBhZG1pbiB3aWxsIHNob3cgaGVyZSBERVwiLFwiYXJpYS5vcGVuQnJvd3NlclwiOlwiQnJvd3Nlci1NZW7DvCDDtmZmbmVuXCIsXCJhcmlhLmJyb3dzZXJUYWJzXCI6XCJCcm93c2VyLVRhYlwiLFwiYXJpYS52aWV3VGFiXCI6XCJUYWIg4oCeQW5zaWNodOKAnCBmw7xyIHt7dGl0bGV9fVwiLFwiYXJpYS5jbG9zZVBhZ2VcIjpcIkJ1dHRvbiDigJ5TZWl0ZSBzY2hsaWXDn2Vu4oCcIGbDvHIge3t0aXRsZX19XCIsXCJhcmlhLmNsb3NlVGFiXCI6XCJUYWIgc2NobGllw59lbiB7e3RpdGxlfX1cIixcImFyaWEudGl0bGVcIjpcIkJlemVpY2hudW5nXCIsXCJhcmlhLmNsb3NlQ29udGV4dEdyb3VwXCI6XCJWZXJ3ZW5kZW4gU2llIGRpZSBFc2NhcGUtVGFzdGUsIHVtIGRlbiBEaWFsb2cgenVyIEF1c3dhaGwgdm9uIEtvbnRleHRncnVwcGVuIHp1IHNjaGxpZcOfZW5cIixcImFyaWEuY29sb3JMaW5raW5nXCI6XCJGYXJidmVya27DvHBmdW5nIGVpbi0gb2RlciBhdXNibGVuZGVuXCIsXCJhcmlhLmFwcGx5Q29sb3JMaW5raW5nXCI6XCJCaXR0ZSB3w6RobGVuIFNpZSBlaW5lIEFuc2ljaHQsIHVtIGRpZSBGYXJidmVya27DvHBmdW5nIGFuenV3ZW5kZW5cIixcImFyaWEuYXNzaWduQ29sb3JMaW5raW5nQ3VycmVudFZpZXdcIjpcIkFrdHVlbGxlIEFuc2ljaHQsIGRpZSBkZXIgS29udGV4dGdydXBwZSB7e25hbWV9fSB6dWdlb3JkbmV0IGlzdFwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld3NcIjpcIkFrdHVlbGxlIEFuc2ljaHRlbiwgZGllIGRlciBLb250ZXh0Z3J1cHBlIHt7bmFtZX19IHp1Z2VvcmRuZXQgc2luZFwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3XCI6XCJBa3RpdmUgQW5zaWNodCBhdWYgZGllIEtvbnRleHRncnVwcGUge3tuYW1lfX0gc2V0emVuXCIsXCJhcmlhLnNldENvbG9yTGlua2luZ0FjdGl2ZVZpZXdzXCI6XCJBa3RpdmUgQW5zaWNodGVuIGF1ZiBkaWUgS29udGV4dGdydXBwZSB7e25hbWV9fSBzZXR6ZW5cIixcImFyaWEuZXNjYXBlTGF5b3V0RGlhbG9nXCI6XCJWZXJ3ZW5kZW4gU2llIGRpZSBFc2NhcGUtVGFzdGUsIHVtIGRlbiBEaWFsb2cgenVyIExheW91dMOkbmRlcnVuZyB6dSBzY2hsaWXDn2VuXCIsXCJnbG9iYWwuc3VwZXJ0YWJcIjpcIlN1cGVydGFiIERFXCIsXCJnbG9iYWwudGFiXCI6XCJUYWIgREVcIixcImJvb2ttYXJrcy5lZGl0Qm9va21hcmtcIjpcIkVkaXQgQm9va21hcmsgREVcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkXCI6XCJCb29rbWFyayBhZGRlZCBERVwiLFwiYm9va21hcmtzLmRvbmVcIjpcIkRvbmUgREVcIixcImJvb2ttYXJrcy5yZW1vdmVcIjpcIlJlbW92ZSBERVwiLFwiYm9va21hcmtzLmJvb2ttYXJrc1BhbmVsXCI6XCJCb29rbWFya3MgUGFuZWwgREVcIixcImJvb2ttYXJrcy5jbG9zZVBhbmVsXCI6XCJDbG9zZSBCb29rbWFya3MgUGFuZWwgREVcIixcImJvb2ttYXJrcy5ib29rbWFya3NcIjpcIkJvb2ttYXJrcyBERVwiLFwiYm9va21hcmtzLmFsbEJvb2ttYXJrc1wiOlwiQWxsIEJvb2ttYXJrcyBERVwiLFwiYm9va21hcmtzLmZhdm9yaXRlc1wiOlwiRmF2b3JpdGVzIERFXCIsXCJib29rbWFya3Muc2VhcmNoQm9va21hcmtzXCI6XCJTZWFyY2ggQm9va21hcmtzIERFXCIsXCJib29rbWFya3MuY2xlYXJTZWFyY2hJbnB1dFwiOlwiQ2xlYXIgU2VhcmNoIElucHV0IERFXCIsXCJib29rbWFya3MuY3JlYXRlRm9sZGVyXCI6XCJDcmVhdGUgTmV3IEZvbGRlciBERVwiLFwiYm9va21hcmtzLmV4aXRGb2xkZXJcIjpcIkV4aXQgRm9sZGVyIERFXCIsXCJib29rbWFya3MubmV3Rm9sZGVyXCI6XCJOZXcgRm9sZGVyIERFXCIsXCJib29rbWFya3MubmFtZWRGb2xkZXJcIjpcInt7bmFtZX19IEZvbGRlciBERVwiLFwiYm9va21hcmtzLmJvb2ttYXJrU2V0dGluZ3NcIjpcInt7bmFtZX19IEJvb2ttYXJrIFNldHRpbmdzIERFXCIsXCJib29rbWFya3MuZm9sZGVyU2V0dGluZ3NcIjpcInt7bmFtZX19IEZvbGRlciBTZXR0aW5ncyBERVwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kXCI6XCJObyByZXN1bHRzIGZvdW5kIERFXCIsXCJib29rbWFya3Mubm9SZXN1bHRzRm91bmRTdWJ0ZXh0XCI6XCJUaGVyZSBhcmUgbm8gYm9va21hcmtzIHRoYXQgbWF0Y2ggeW91ciBzZWFyY2ggREVcIixcImJvb2ttYXJrcy5ub3RoaW5nVG9TaG93XCI6XCJOb3RoaW5nIHRvIHNob3cgeWV0IERFXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1N1YnRleHRcIjpcIkFkZCBhIGJvb2ttYXJrIHRvIHRoaXMgZm9sZGVyIERFXCIsXCJib29rbWFya3MucmVzdWx0c0ZvdW5kSW5cIjpcIlJlc3VsdHMgZm91bmQgaW4ge3tuYW1lfX0gREVcIixcImJvb2ttYXJrcy5yZXN1bHRzSW5PdGhlckZvbGRlcnNcIjpcIlJlc3VsdHMgZm91bmQgaW4gb3RoZXIgZm9sZGVycyBERVwiLFwiYm9va21hcmtzLmFsbFJlc3VsdHNGb3VuZEluXCI6XCJBbGwgcmVzdWx0cyBmb3VuZCBpbiBERVwiLFwiYm9va21hcmtzLmVkaXROYW1lXCI6XCJFZGl0IE5hbWUgREVcIixcImJvb2ttYXJrcy5tb3ZlXCI6XCJNb3ZlIERFXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFRpdGxlXCI6XCJCb29rbWFyayBBZGRlZCBERVwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUb0ZvbGRlclwiOlwiWW91ciBib29rbWFyayB3YXMgYWRkZWQgdG8gXFxcXFwie3tmb2xkZXJOYW1lfX1cXFxcXCIgREVcIixcImJvb2ttYXJrcy5ib29rbWFya0VkaXRlZFRpdGxlXCI6XCJCb29rbWFyayBFZGl0ZWQgREVcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJcIjpcIlNhdmUgU3VwZXJ0YWIgREVcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBcy4uLiBERVwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmR1cGxpY2F0ZVwiOlwiRHVwbGljYXRlIERFXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZGVsZXRlU3VwZXJ0YWJcIjpcIkRlbGV0ZSBTdXBlcnRhYiBERVwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51Lm5ld1RhYlwiOlwiTmV3IFRhYiBERVwiLFwiZW50ZXJwcmlzZVNhdmVNZW51LnNhdmVTdXBlcnRhYkFzXCI6XCJTYXZlIFN1cGVydGFiIEFzIERFXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnJlbmFtZVN1cGVydGFiXCI6XCJSZW5hbWUgREVcIixcImVudGVycHJpc2VTYXZlTW9kYWwudW5zYXZlZENoYW5nZXNcIjpcIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGlzIFRhYi4gREVcIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiBERVwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVN1cGVydGFiXCI6XCJDbG9zZSBTdXBlcnRhYiBERVwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5zYXZlU3VwZXJ0YWJDb3VudFwiOlwiU2F2ZSB7e2NvdW50fX0gU3VwZXJ0YWJzIGJlZm9yZSBjbG9zaW5nPyBERVwiLFwiZW50ZXJwcmlzZU1vZGFsLmRpc2NhcmRTdXBlcnRhYldhcm5pbmdcIjpcIkFueSB1bnNhdmVkIGNoYW5nZXMgdG8gdGhpcyBTdXBlcnRhYiB3aWxsIGJlIGxvc3QuIERFXCIsXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJcIjpcIkRlbGV0ZSB0aGUgXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiPyBERVwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiV2FybmluZ1wiOlwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIFN1cGVydGFiPyBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lIGFuZCBpcyBwZXJtYW5lbnQuIERFXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYlNhdmVkXCI6XCJTdXBlcnRhYiBTYXZlZCBERVwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYiBoYXMgYmVlbiBzYXZlZC4gREVcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiRGVsZXRlZFwiOlwiU3VwZXJ0YWIgRGVsZXRlZCBERVwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuRGVsZXRlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiIGhhcyBiZWVuIGRlbGV0ZWQuIERFXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVUYWJcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgVGFiIERFXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVTdXBlcnRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBTdXBlcnRhYiBERVwiLFwiZW50ZXJwcmlzZUNvbW1hbmRCYXIuc3dpdGNoVG9TdXBlcnRhYlwiOlwiU3dpdGNoIHRvIFN1cGVydGFiIERFXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5nb1RvXCI6XCJHbyB0byB7e3R5cGV9fSBERVwiLFwiY29udGV4dE1lbnUucXVpdEVudGVycHJpc2VCcm93c2VyXCI6XCJRdWl0IERFXCJ9JyksVm49SlNPTi5wYXJzZSgne1wiY29udGV4dE1lbnUubmV3V2luZG93XCI6XCLmlrDjgZfjgYTjgqbjgqPjg7Pjg4njgqZcIixcImNvbnRleHRNZW51Lm5ld1BhZ2VcIjpcIuaWsOOBl+OBhOODmuODvOOCuFwiLFwiY29udGV4dE1lbnUucmVzdG9yZVwiOlwi5pyA5b6M44Gr5L+d5a2Y44GV44KM44Gf5aSJ5pu044Gr5oi744GZXCIsXCJjb250ZXh0TWVudS5zd2l0Y2hXb3Jrc3BhY2VcIjpcIuODr+ODvOOCr+OCueODmuODvOOCueOBq+WIh+OCiuabv+OBiOOCi1wiLFwiY29udGV4dE1lbnUuYXBwZWFyYW5jZVwiOlwi5aSW6KazXCIsXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlXCI6XCLjg6/jg7zjgq/jgrnjg5rjg7zjgrnjgpLkv53lrZhcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwi44Ov44O844Kv44K544Oa44O844K544KS5Yil5ZCN44Gn5L+d5a2YLi4uXCIsXCJjb250ZXh0TWVudS5yZW5hbWVXb3Jrc3BhY2VcIjpcIuODr+ODvOOCr+OCueODmuODvOOCueWQjeOCkuWkieabtFwiLFwiY29udGV4dE1lbnUuZGVsZXRlV29ya3NwYWNlXCI6XCLjg6/jg7zjgq/jgrnjg5rjg7zjgrnjgpLliYrpmaRcIixcImNvbnRleHRNZW51LmRvd25sb2Fkc1wiOlwi44OA44Km44Oz44Ot44O844OJXCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZVwiOlwi44Oa44O844K444KS5L+d5a2YXCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZUFzXCI6XCLjg5rjg7zjgrjjgpLliKXlkI3jgafkv53lrZguLi5cIixcImNvbnRleHRNZW51LnByaW50XCI6XCLljbDliLcuLi5cIixcImNvbnRleHRNZW51LnByaW50U2NyZWVuXCI6XCLjg5fjg6rjg7Pjg4jjgrnjgq/jg6rjg7zjg7NcIixcImNvbnRleHRNZW51LmNsb3NlV2luZG93XCI6XCLjgqbjgqPjg7Pjg4njgqbjgpLplonjgZjjgotcIixcImNvbnRleHRNZW51Lm9wZW5TdG9yZWZyb250XCI6XCLjgrnjg4jjgqLjg5Xjg63jg7Pjg4jjgpLplovjgY9cIixcImNvbnRleHRNZW51LnF1aXRQbGF0Zm9ybVwiOlwi44OX44Op44OD44OI44OV44Kp44O844Og44KS57WC5LqG44GZ44KLXCIsXCJjb250ZXh0TWVudS5uZXdWaWV3XCI6XCLmlrDjgZfjgYTjg5Pjg6Xjg7xcIixcImNvbnRleHRNZW51Lm9wZW5WaWV3XCI6XCLjg4fjg5Xjgqnjg6vjg4jjga7jgqbjgqfjg5bjg5bjg6njgqbjgrbjg7zjgafjg5Pjg6Xjg7zjgpLplovjgY9cIixcImNvbnRleHRNZW51Lm9wZW5WaWV3c1wiOlwi44OH44OV44Kp44Or44OI44Gu44Km44Kn44OW44OW44Op44Km44K244O844Gn44OT44Ol44O844KS6ZaL44GPXCIsXCJjb250ZXh0TWVudS5yZWxvYWRcIjpcIlJlbG9hZCBKUFwiLFwiY29udGV4dE1lbnUucmVsb2FkVmlld1wiOlwi44OT44Ol44O844KS44Oq44Ot44O844OJXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3c1wiOlwi44OT44Ol44O844KS44Oq44Ot44O844OJXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBKUFwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld1wiOlwi44OT44Ol44O844KS6KSH6KO9XCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVWaWV3c1wiOlwi44OT44Ol44O844KS6KSH6KO9XCIsXCJjb250ZXh0TWVudS5hZGRWaWV3XCI6XCLjg5Pjg6Xjg7zjgpLjg4Hjg6Pjg43jg6vjgavov73liqBcIixcImNvbnRleHRNZW51LmFkZFZpZXdzXCI6XCLjg5Pjg6Xjg7zjgpLjg4Hjg6Pjg43jg6vjgavov73liqBcIixcImNvbnRleHRNZW51LnJlbW92ZVZpZXdcIjpcIuODgeODo+ODjeODq+OBi+OCieODk+ODpeODvOOCkuWJiumZpFwiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld3NcIjpcIuODgeODo+ODjeODq+OBi+OCieODk+ODpeODvOOCkuWJiumZpFwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3XCI6XCLjg5Pjg6Xjg7zjgpLplonjgZjjgotcIixcImNvbnRleHRNZW51LmNsb3NlVmlld3NcIjpcIuODk+ODpeODvOOCkumWieOBmOOCi1wiLFwiY29udGV4dE1lbnUuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiBKUFwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlUGFnZVwiOlwi44Oa44O844K444KS6KSH6KO9XCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50XCI6XCLljbDliLdcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRBbGxcIjpcIuOBmeOBueOBpuOCkuWNsOWIt1wiLFwic2F2ZU1lbnUuc2F2ZVdvcmtzcGFjZUFzXCI6XCLjg6/jg7zjgq/jgrnjg5rjg7zjgrnjgpLliKXlkI3jgafkv53lrZhcIixcInNhdmVNZW51LnNhdmVQYWdlQXNcIjpcIuODmuODvOOCuOOCkuWIpeWQjeOBp+S/neWtmFwiLFwic2F2ZU1vZGFsLmVudGVyVmFsdWVcIjpcIlBsZWFzZSBlbnRlciBhIHZhbHVlIEpQXCIsXCJzYXZlTW9kYWwuYWxyZWFkeUV4aXN0c1wiOlwie3t0aXRsZX1944Gv44GZ44Gn44Gr5a2Y5Zyo44GX44Gm44GE44G+44GZ44CCXCIsXCJzYXZlTW9kYWwucGxlYXNlRW50ZXJWYWxpZE5hbWVcIjpcIuacieWKueOBquWQjeWJjeOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhFwiLFwic2F2ZU1vZGFsLnJlbmFtZVBhZ2VcIjpcIuODmuODvOOCuOWQjeOCkuWkieabtFwiLFwic2F2ZU1vZGFsLmNsb3NlUGFnZVwiOlwi44Oa44O844K444KS6ZaJ44GY44KLXCIsXCJzYXZlTW9kYWwuZGlzY2FyZENoYW5nZXNcIjpcIuWkieabtOOCkuegtOajhFwiLFwic2F2ZU1vZGFsLmRpc2NhcmRBbGxcIjpcIuOBmeOBueOBpuegtOajhFwiLFwic2F2ZU1vZGFsLnNhdmVBbGxcIjpcIuOBmeOBueOBpuS/neWtmFwiLFwic2F2ZU1vZGFsLnNhdmVQYWdlc0NvdW50XCI6XCLplonjgZjjgovliY3jgavvvIh7e2NvdW50fX3vvInjgaTjga7jg5rjg7zjgrjjgpLkv53lrZjjgZfjgb7jgZnjgYvvvJ9cIixcImRlZmF1bHRQYWdlVGl0bGVcIjpcIlVudGl0bGVkIFBhZ2UgSlBcIixcImVudGVycHJpc2VEZWZhdWx0UGFnZVRpdGxlXCI6XCJVbnRpdGxlZCBTdXBlcnRhYiBKUFwiLFwiYWRkTmV3UGFnZVwiOlwiTmV3IFBhZ2UgSlBcIixcImFkZE5ld1RhYlwiOlwi5paw44GX44GE44K/44OW44KS6L+95YqgXCIsXCJhZGROZXdWaWV3XCI6XCLmlrDjgZfjgYTjg5Pjg6Xjg7xcIixcInJlc3RvcmVNb2RhbFwiOlwi5pys5b2T44Gr5pyA5b6M44Gr5L+d5a2Y44GV44KM44Gf5aSJ5pu044Gr5oi744GX44G+44GZ44GL77yfXCIsXCJtb2RhbC5kaXNjYXJkV2FybmluZ1wiOlwi5L+d5a2Y44GV44KM44Gm44GE44Gq44GE5aSJ5pu044Gv56C05qOE44GV44KM44G+44GZXCIsXCJtb2RhbC5kaXNjYXJkUGFnZVdhcm5pbmdcIjpcIuS/neWtmOOBleOCjOOBpuOBhOOBquOBhOOBk+OBruODmuODvOOCuOOBuOOBruWkieabtOOBr+WkseOCj+OCjOOBvuOBmeOAglwiLFwibW9kYWwuc2F2ZUNoYW5nZXNQcm9tcHRcIjpcIumWieOBmOOCi+WJjeOBq+WkieabtOOCkuS/neWtmOOBl+OBvuOBmeOBi++8n1wiLFwibW9kYWwucGFnZUNsb3NlXCI6XCJQYWdlIENsb3NlIEpQXCIsXCJzd2l0Y2hXb3Jrc3BhY2VNb2RhbFwiOlwi5pys5b2T44Gre3t3b3Jrc3BhY2V9feOBq+WIh+OCiuabv+OBiOOBvuOBmeOBi++8n1wiLFwic3dpdGNoV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi5L+d5a2Y44GV44KM44Gm44GE44Gq44GE5aSJ5pu044Gv56C05qOE44GV44KM44G+44GZXCIsXCJkZWxldGVXb3Jrc3BhY2VNb2RhbFwiOlwi44GT44Gu44Ov44O844Kv44K544Oa44O844K544KS5rC45LmF44Gr5YmK6Zmk44GX44Gm44KC44KI44KN44GX44GE44Gn44GZ44GL77yfXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwie3t3b3Jrc3BhY2V9feOBqOOBhOOBhuWQjeWJjeOBruODr+ODvOOCr+OCueODmuODvOOCueOBjOOBmeOBp+OBq+WtmOWcqOOBl+OBvuOBmeOAgue9ruOBjeaPm+OBiOOBvuOBmeOBi++8n1wiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLndhcm5pbmcuYm9keVwiOlwi5ZCM44GY5ZCN5YmN44Gu44Ov44O844Kv44K544Oa44O844K544GM44GZ44Gn44Gr5a2Y5Zyo44GX44G+44GZ44CC572u44GN5o+b44GI44KL44Go44CB54++5Zyo44Gu5YaF5a6544Gv5LiK5pu444GN44GV44KM44G+44GZ44CCXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwucmVwbGFjZVwiOlwi572u44GN5o+b44GI44KLXCIsXCJjbG9zZVBsYXRmb3JtXCI6XCLjg5fjg6njg4Pjg4jjg5Xjgqnjg7zjg6DjgpLplonjgZjjgotcIixcImNsb3NlUGxhdGZvcm0ud29ya3NwYWNlXCI6XCJ7e3dvcmtzcGFjZX1944OX44Op44OD44OI44OV44Kp44O844Og44KS6ZaJ44GY44KLXCIsXCJjbG9zZVBsYXRmb3JtLndhcm5pbmdcIjpcIuODl+ODqeODg+ODiOODleOCqeODvOODoOOCkumWieOBmOOCi+OBqOOAgeWun+ihjOS4reOBruODr+ODvOOCr+OCueODmuODvOOCueOAgeOCouODl+ODquOAgeODl+ODreOCu+OCueOBjOOBmeOBueOBpumWieOBmOOBvuOBmeOAglwiLFwiYmFja1wiOlwi5oi744KLXCIsXCJmb3J3YXJkXCI6XCLpgLLjgoBcIixcInJlbG9hZFwiOlwi44Oq44Ot44O844OJXCIsXCJncmVlblwiOlwi44Kw44Oq44O844OzXCIsXCJwdXJwbGVcIjpcIuODkeODvOODl+ODq1wiLFwib3JhbmdlXCI6XCLjgqrjg6zjg7PjgrhcIixcInJlZFwiOlwi44Os44OD44OJXCIsXCJwaW5rXCI6XCLjg5Tjg7Pjgq9cIixcInllbGxvd1wiOlwi44Kk44Ko44Ot44O8XCIsXCJ0aGVtZS5saWdodFwiOlwi44Op44Kk44OIXCIsXCJ0aGVtZS5kYXJrXCI6XCLjg4Djg7zjgq9cIixcInRoZW1lLnN5c3RlbVwiOlwiT1Pjga7oqK3lrprjgajlkIzmnJ9cIixcInRvb2xiYXIuaGlkZVRhYnNcIjpcIuOCv+ODluOCkumdnuihqOekulwiLFwidG9vbGJhci5zaG93VGFic1wiOlwi44K/44OW44KS6KGo56S6XCIsXCJ0b29sYmFyLmxvY2tcIjpcIuODreODg+OCr1wiLFwidG9vbGJhci51bmxvY2tcIjpcIuODreODg+OCr+ino+mZpFwiLFwidG9vbGJhci5jb2xvckxpbmtpbmdcIjpcIuOCq+ODqeODvOODquODs+OCr1wiLFwidG9vbGJhci5jaGFuZ2VMYXlvdXRcIjpcIuODrOOCpOOCouOCpuODiOOCkuWkieabtFwiLFwidG9vbGJhci5zYXZlTWVudVwiOlwi44Oh44OL44Ol44O844KS5L+d5a2YXCIsXCJ0b29sYmFyLm1heGltaXplV2luZG93XCI6XCLjgqbjgqPjg7Pjg4njgqbjgpLmnIDlpKfljJbjgZnjgotcIixcInRvb2xiYXIucmVzdG9yZVdpbmRvd1wiOlwi44Km44Kj44Oz44OJ44Km44KS5b6p5YWDXCIsXCJ0b29sYmFyLm1pbmltaXplV2luZG93XCI6XCLjgqbjgqPjg7Pjg4njgqbjgpLmnIDlsI/ljJbjgZnjgotcIixcImNoYW5nZUxheW91dC5mdWxsV2lkdGhcIjpcIuWFqOW5hVwiLFwiY2hhbmdlTGF5b3V0LmNvbHVtbnNcIjpcIuWIl1wiLFwiY2hhbmdlTGF5b3V0LlJvd3NcIjpcIuihjFwiLFwiY2hhbmdlTGF5b3V0LkdyaWRcIjpcIuOCsOODquODg+ODiVwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTd2l0Y2hlZFwiOlwi44Ov44O844Kv44K544Oa44O844K544GM5YiH44KK5pu/44KP44KK44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmhpZGRlblwiOlwi44K/44OW44GM6Z2e6KGo56S644Gr44Gq44Gj44Gm44GE44G+44GZXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnNob3duXCI6XCLjgr/jg5bjgYzooajnpLrjgZXjgozjgabjgYTjgb7jgZlcIixcInN1Y2Nlc3NJbmRpY2F0b3IubG9ja2VkXCI6XCLjg5rjg7zjgrjjgYzjg63jg4Pjgq/jgZXjgozjgabjgYTjgb7jgZlcIixcInN1Y2Nlc3NJbmRpY2F0b3IudW5sb2NrZWRcIjpcIuODmuODvOOCuOOBruODreODg+OCr+OBjOino+mZpOOBleOCjOOBpuOBhOOBvuOBmVwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTYXZlZFwiOlwi44Ov44O844Kv44K544Oa44O844K544GM5L+d5a2Y44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkQXNcIjpcIuODr+ODvOOCr+OCueODmuODvOOCueOBjHt7d29ya3NwYWNlfX3jgajjgZfjgabkv53lrZjjgZXjgozjgb7jgZfjgZ9cIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlUmVuYW1lZFwiOlwi44Ov44O844Kv44K544Oa44O844K55ZCN44GM5aSJ5pu044GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VTYXZlZFwiOlwi44Oa44O844K444GM5L+d5a2Y44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBoYXMgYmVlbiBzYXZlZC4gSlBcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUNvcHlTYXZlZFwiOlwi44Oa44O844K444GMe3t0aXRsZX1944Go44GX44Gm5L+d5a2Y44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VSZW5hbWVkXCI6XCLjg5rjg7zjgrjlkI3jgYzlpInmm7TjgZXjgozjgb7jgZfjgZ9cIixcInN1Y2Nlc3NJbmRpY2F0b3IuY29udGV4dEdyb3VwQXBwbGllZFwiOlwi44Kz44Oz44OG44Kt44K544OI44Kw44Or44O844OX44GM6YGp55So44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLm5hbWVkQ29udGV4dEdyb3VwQXBwbGllZFwiOlwie3tjb2xvck5hbWV9feOCs+ODs+ODhuOCreOCueODiOOCsOODq+ODvOODl+OBjOmBqeeUqOOBleOCjOOBvuOBl+OBn1wiLFwic3VjY2Vzc0luZGljYXRvci52aWV3UmVtb3ZlZFwiOlwi44Kz44Oz44OG44Kt44K544OI44Kw44Or44O844OX44GL44KJ44OT44Ol44O844GM5YmK6Zmk44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdzUmVtb3ZlZFwiOlwi44Kz44Oz44OG44Kt44K544OI44Kw44Or44O844OX44GL44KJ44OT44Ol44O844GM5YmK6Zmk44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxheW91dEFwcGxpZWRcIjpcInt7bGF5b3V0TmFtZX1944Os44Kk44Ki44Km44OI44GM6YGp55So44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZURlbGV0ZWRcIjpcIuODr+ODvOOCr+OCueODmuODvOOCueOBjOWJiumZpOOBleOCjOOBvuOBl+OBn1wiLFwiZXJyb3JJbmRpY2F0b3IucGFnZVNhdmVGYWlsZWRcIjpcIuODmuODvOOCuOOCkuS/neWtmOOBp+OBjeOBvuOBm+OCk+OBp+OBl+OBn1wiLFwiZXJyb3JJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZUZhaWxlZFwiOlwi44Ov44O844Kv44K544Oa44O844K544KS5L+d5a2Y44Gn44GN44G+44Gb44KT44Gn44GX44GfXCIsXCJlcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVBhZ2VcIjpcIuODmuODvOOCuOOCkuikh+ijveOBp+OBjeOBvuOBm+OCk+OBp+OBl+OBn1wiLFwiaW5mb0luZGljYXRvci5jb2xvckxpbmtBdHRlbXB0XCI6XCLjgZPjga7jgr/jg5bjgpLjgqvjg6njg7zjg6rjg7Pjgq/jgZfjgojjgYbjgajjgZfjgb7jgZfjgZ/jgYzjgIHjgrXjgqTjg4gv44Kz44Oz44OG44Oz44OE44Gu44Kq44O844OK44O844GM44G+44Gg44GT44KM44KS5pyJ5Yq544Gr44GX44Gm44GE44G+44Gb44KTXCIsXCJnbG9iYWwuY2FuY2VsXCI6XCLjgq3jg6Pjg7Pjgrvjg6tcIixcImdsb2JhbC5jb25maXJtXCI6XCLnorroqo1cIixcImdsb2JhbC5zYXZlXCI6XCLkv53lrZhcIixcImdsb2JhbC5kZWxldGVcIjpcIkRlbGV0ZSBKUFwiLFwiYXBwUmVzdWx0cy5oZWFkZXJcIjpcIkZlYXR1cmVkIGNvbnRlbnQgSlBcIixcInJlY2VudGx5VmlzaXRlZC5oZWFkZXJcIjpcIlJlY2VudGx5IHZpc2l0ZWQgSlBcIixcImxhbmRpbmdQYWdlLnN1YmhlYWRlclwiOlwiQXBwcyBhbmQgd2Vic2l0ZXMgc2VsZWN0ZWQgYnkgYW4gYWRtaW4gd2lsbCBzaG93IGhlcmUgSlBcIixcImFyaWEub3BlbkJyb3dzZXJcIjpcIuODluODqeOCpuOCtuODvOODoeODi+ODpeODvOOCkumWi+OBj1wiLFwiYXJpYS5icm93c2VyVGFic1wiOlwi44OW44Op44Km44K244O844K/44OWXCIsXCJhcmlhLnZpZXdUYWJcIjpcInt7dGl0bGV9feOBruOCv+ODluOCkuihqOekulwiLFwiYXJpYS5jbG9zZVBhZ2VcIjpcInt7dGl0bGV9feOBruODmuODvOOCuOOCv+ODluODnOOCv+ODs+OCkumWieOBmOOCi1wiLFwiYXJpYS5jbG9zZVRhYlwiOlwie3t0aXRsZX1944K/44OW44KS6ZaJ44GY44KLXCIsXCJhcmlhLnRpdGxlXCI6XCLjgr/jgqTjg4jjg6tcIixcImFyaWEuY2xvc2VDb250ZXh0R3JvdXBcIjpcIuOCqOOCueOCseODvOODl+OCkuS9v+eUqOOBl+OBpuOAgeOCs+ODs+ODhuOCreOCueODiOOCsOODq+ODvOODl+mBuOaKnuODgOOCpOOCouODreOCsOOCkumWieOBmOOCi1wiLFwiYXJpYS5jb2xvckxpbmtpbmdcIjpcIuOCq+ODqeODvOODquODs+OCr+OBruihqOekui/pnZ7ooajnpLpcIixcImFyaWEuYXBwbHlDb2xvckxpbmtpbmdcIjpcIuOCq+ODqeODvOODquODs+OCr+OCkumBqeeUqOOBmeOCi+ODk+ODpeODvOOCkumBuOaKnuOBl+OBpuOBj+OBoOOBleOBhFwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld1wiOlwi54++5Zyo44Gu44OT44Ol44O844Gve3tuYW1lfX3jgrPjg7Pjg4bjgq3jgrnjg4jjgrDjg6vjg7zjg5fjgavlibLjgorlvZPjgabjgonjgozjgabjgYTjgb7jgZlcIixcImFyaWEuYXNzaWduQ29sb3JMaW5raW5nQ3VycmVudFZpZXdzXCI6XCLnj77lnKjjga7jg5Pjg6Xjg7zjga97e25hbWV9feOCs+ODs+ODhuOCreOCueODiOOCsOODq+ODvOODl+OBq+WJsuOCiuW9k+OBpuOCieOCjOOBpuOBhOOBvuOBmVwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3XCI6XCLjgqLjgq/jg4bjgqPjg5bjg5Pjg6Xjg7zjgpJ7e25hbWV9feOCs+ODs+ODhuOCreOCueODiOOCsOODq+ODvOODl+OBq+ioreWumlwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3c1wiOlwi44Ki44Kv44OG44Kj44OW44OT44Ol44O844KSe3tuYW1lfX3jgrPjg7Pjg4bjgq3jgrnjg4jjgrDjg6vjg7zjg5fjgavoqK3lrppcIixcImFyaWEuZXNjYXBlTGF5b3V0RGlhbG9nXCI6XCLjgqjjgrnjgrHjg7zjg5fjgpLkvb/nlKjjgZfjgabjgIHjg6zjgqTjgqLjgqbjg4jlpInmm7Tpgbjmip7jg4DjgqTjgqLjg63jgrDjgpLplonjgZjjgotcIixcImdsb2JhbC5zdXBlcnRhYlwiOlwiU3VwZXJ0YWIgSlBcIixcImdsb2JhbC50YWJcIjpcIlRhYiBKUFwiLFwiYm9va21hcmtzLmVkaXRCb29rbWFya1wiOlwiRWRpdCBCb29rbWFyayBKUFwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRcIjpcIkJvb2ttYXJrIGFkZGVkIEpQXCIsXCJib29rbWFya3MuZG9uZVwiOlwiRG9uZSBKUFwiLFwiYm9va21hcmtzLnJlbW92ZVwiOlwiUmVtb3ZlIEpQXCIsXCJib29rbWFya3MuYm9va21hcmtzUGFuZWxcIjpcIkJvb2ttYXJrcyBQYW5lbCBKUFwiLFwiYm9va21hcmtzLmNsb3NlUGFuZWxcIjpcIkNsb3NlIEJvb2ttYXJrcyBQYW5lbCBKUFwiLFwiYm9va21hcmtzLmJvb2ttYXJrc1wiOlwiQm9va21hcmtzIEpQXCIsXCJib29rbWFya3MuYWxsQm9va21hcmtzXCI6XCJBbGwgQm9va21hcmtzIEpQXCIsXCJib29rbWFya3MuZmF2b3JpdGVzXCI6XCJGYXZvcml0ZXMgSlBcIixcImJvb2ttYXJrcy5zZWFyY2hCb29rbWFya3NcIjpcIlNlYXJjaCBCb29rbWFya3MgSlBcIixcImJvb2ttYXJrcy5jbGVhclNlYXJjaElucHV0XCI6XCJDbGVhciBTZWFyY2ggSW5wdXQgSlBcIixcImJvb2ttYXJrcy5jcmVhdGVGb2xkZXJcIjpcIkNyZWF0ZSBOZXcgRm9sZGVyIEpQXCIsXCJib29rbWFya3MuZXhpdEZvbGRlclwiOlwiRXhpdCBGb2xkZXIgSlBcIixcImJvb2ttYXJrcy5uZXdGb2xkZXJcIjpcIk5ldyBGb2xkZXIgSlBcIixcImJvb2ttYXJrcy5uYW1lZEZvbGRlclwiOlwie3tuYW1lfX0gRm9sZGVyIEpQXCIsXCJib29rbWFya3MuYm9va21hcmtTZXR0aW5nc1wiOlwie3tuYW1lfX0gQm9va21hcmsgU2V0dGluZ3MgSlBcIixcImJvb2ttYXJrcy5mb2xkZXJTZXR0aW5nc1wiOlwie3tuYW1lfX0gRm9sZGVyIFNldHRpbmdzIEpQXCIsXCJib29rbWFya3Mubm9SZXN1bHRzRm91bmRcIjpcIk5vIHJlc3VsdHMgZm91bmQgSlBcIixcImJvb2ttYXJrcy5ub1Jlc3VsdHNGb3VuZFN1YnRleHRcIjpcIlRoZXJlIGFyZSBubyBib29rbWFya3MgdGhhdCBtYXRjaCB5b3VyIHNlYXJjaCBKUFwiLFwiYm9va21hcmtzLm5vdGhpbmdUb1Nob3dcIjpcIk5vdGhpbmcgdG8gc2hvdyB5ZXQgSlBcIixcImJvb2ttYXJrcy5ub3RoaW5nVG9TaG93U3VidGV4dFwiOlwiQWRkIGEgYm9va21hcmsgdG8gdGhpcyBmb2xkZXIgSlBcIixcImJvb2ttYXJrcy5yZXN1bHRzRm91bmRJblwiOlwiUmVzdWx0cyBmb3VuZCBpbiB7e25hbWV9fSBKUFwiLFwiYm9va21hcmtzLnJlc3VsdHNJbk90aGVyRm9sZGVyc1wiOlwiUmVzdWx0cyBmb3VuZCBpbiBvdGhlciBmb2xkZXJzIEpQXCIsXCJib29rbWFya3MuYWxsUmVzdWx0c0ZvdW5kSW5cIjpcIkFsbCByZXN1bHRzIGZvdW5kIGluIEpQXCIsXCJib29rbWFya3MuZWRpdE5hbWVcIjpcIkVkaXQgTmFtZSBKUFwiLFwiYm9va21hcmtzLm1vdmVcIjpcIk1vdmUgSlBcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkVGl0bGVcIjpcIkJvb2ttYXJrIEFkZGVkIEpQXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFRvRm9sZGVyXCI6XCJZb3VyIGJvb2ttYXJrIHdhcyBhZGRlZCB0byBcXFxcXCJ7e2ZvbGRlck5hbWV9fVxcXFxcIiBKUFwiLFwiYm9va21hcmtzLmJvb2ttYXJrRWRpdGVkVGl0bGVcIjpcIkJvb2ttYXJrIEVkaXRlZCBKUFwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYlwiOlwiU2F2ZSBTdXBlcnRhYiBKUFwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYkFzXCI6XCJTYXZlIFN1cGVydGFiIEFzLi4uIEpQXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZHVwbGljYXRlXCI6XCJEdXBsaWNhdGUgSlBcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5kZWxldGVTdXBlcnRhYlwiOlwiRGVsZXRlIFN1cGVydGFiIEpQXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUubmV3VGFiXCI6XCJOZXcgVGFiIEpQXCIsXCJlbnRlcnByaXNlU2F2ZU1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcIlNhdmUgU3VwZXJ0YWIgQXMgSlBcIixcImVudGVycHJpc2VTYXZlTW9kYWwucmVuYW1lU3VwZXJ0YWJcIjpcIlJlbmFtZSBKUFwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC51bnNhdmVkQ2hhbmdlc1wiOlwiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoaXMgVGFiLiBKUFwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVRhYlwiOlwiQ2xvc2UgVGFiIEpQXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlU3VwZXJ0YWJcIjpcIkNsb3NlIFN1cGVydGFiIEpQXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnNhdmVTdXBlcnRhYkNvdW50XCI6XCJTYXZlIHt7Y291bnR9fSBTdXBlcnRhYnMgYmVmb3JlIGNsb3Npbmc/IEpQXCIsXCJlbnRlcnByaXNlTW9kYWwuZGlzY2FyZFN1cGVydGFiV2FybmluZ1wiOlwiQW55IHVuc2F2ZWQgY2hhbmdlcyB0byB0aGlzIFN1cGVydGFiIHdpbGwgYmUgbG9zdC4gSlBcIixcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYlwiOlwiRGVsZXRlIHRoZSBcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWI/IEpQXCIsXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJXYXJuaW5nXCI6XCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgU3VwZXJ0YWI/IFRoaXMgYWN0aW9uIGNhbm5vdCBiZSB1bmRvbmUgYW5kIGlzIHBlcm1hbmVudC4gSlBcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiU2F2ZWRcIjpcIlN1cGVydGFiIFNhdmVkIEpQXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkhhc0JlZW5TYXZlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiIGhhcyBiZWVuIHNhdmVkLiBKUFwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJEZWxldGVkXCI6XCJTdXBlcnRhYiBEZWxldGVkIEpQXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkhhc0JlZW5EZWxldGVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gZGVsZXRlZC4gSlBcIixcImVudGVycHJpc2VFcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBUYWIgSlBcIixcImVudGVycHJpc2VFcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVN1cGVydGFiXCI6XCJGYWlsZWQgdG8gZHVwbGljYXRlIFN1cGVydGFiIEpQXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5zd2l0Y2hUb1N1cGVydGFiXCI6XCJTd2l0Y2ggdG8gU3VwZXJ0YWIgSlBcIixcImVudGVycHJpc2VDb21tYW5kQmFyLmdvVG9cIjpcIkdvIHRvIHt7dHlwZX19IEpQXCIsXCJjb250ZXh0TWVudS5xdWl0RW50ZXJwcmlzZUJyb3dzZXJcIjpcIlF1aXQgSlBcIn0nKSxIbj1KU09OLnBhcnNlKCd7XCJjb250ZXh0TWVudS5uZXdXaW5kb3dcIjpcIuyDiCDssL1cIixcImNvbnRleHRNZW51Lm5ld1BhZ2VcIjpcIuyDiCDtjpjsnbTsp4BcIixcImNvbnRleHRNZW51LnJlc3RvcmVcIjpcIuuniOyngOunieycvOuhnCDsoIDsnqXtlZwg67OA6rK9IOyCrO2VreycvOuhnCDrs7Xsm5BcIixcImNvbnRleHRNZW51LnN3aXRjaFdvcmtzcGFjZVwiOlwi7J6R7JeFIOqzteqwhCDsoITtmZhcIixcImNvbnRleHRNZW51LmFwcGVhcmFuY2VcIjpcIuuqqOyWkVwiLFwiY29udGV4dE1lbnUuc2F2ZVdvcmtzcGFjZVwiOlwi7J6R7JeFIOqzteqwhCDsoIDsnqVcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwi64uk66W4IOydtOumhOycvOuhnCDsnpHsl4Ug6rO16rCEIOyggOyepS4uLlwiLFwiY29udGV4dE1lbnUucmVuYW1lV29ya3NwYWNlXCI6XCLsnpHsl4Ug6rO16rCEIOydtOumhCDrsJTqvrjquLBcIixcImNvbnRleHRNZW51LmRlbGV0ZVdvcmtzcGFjZVwiOlwi7J6R7JeFIOqzteqwhCDsgq3soJxcIixcImNvbnRleHRNZW51LmRvd25sb2Fkc1wiOlwi64uk7Jq066Gc65OcXCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZVwiOlwi7Y6Y7J207KeAIOyggOyepVwiLFwiY29udGV4dE1lbnUuc2F2ZVBhZ2VBc1wiOlwi64uk66W4IOydtOumhOycvOuhnCDtjpjsnbTsp4Ag7KCA7J6lLi4uXCIsXCJjb250ZXh0TWVudS5wcmludFwiOlwi7J247IeELi4uXCIsXCJjb250ZXh0TWVudS5wcmludFNjcmVlblwiOlwi7ZmU66m0IOyduOyHhFwiLFwiY29udGV4dE1lbnUuY2xvc2VXaW5kb3dcIjpcIuywvSDri6vquLBcIixcImNvbnRleHRNZW51Lm9wZW5TdG9yZWZyb250XCI6XCLrp6TsnqUg7Je06riwXCIsXCJjb250ZXh0TWVudS5xdWl0UGxhdGZvcm1cIjpcIu2UjOueq+2PvCDsooXro4xcIixcImNvbnRleHRNZW51Lm5ld1ZpZXdcIjpcIuyDiCDrt7BcIixcImNvbnRleHRNZW51Lm9wZW5WaWV3XCI6XCLquLDrs7gg7Ju5IOu4jOudvOyasOyggOuhnCDrt7Ag7Je06riwXCIsXCJjb250ZXh0TWVudS5vcGVuVmlld3NcIjpcIuq4sOuzuCDsm7kg67iM65287Jqw7KCA66GcIOu3sCDsl7TquLBcIixcImNvbnRleHRNZW51LnJlbG9hZFwiOlwiUmVsb2FkIEtSXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3XCI6XCLrt7Ag64uk7IucIOuhnOuTnFwiLFwiY29udGV4dE1lbnUucmVsb2FkVmlld3NcIjpcIuu3sCDri6Tsi5wg66Gc65OcXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBLUlwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld1wiOlwi67ewIOuzteygnFwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld3NcIjpcIuu3sCDrs7XsoJxcIixcImNvbnRleHRNZW51LmFkZFZpZXdcIjpcIuyxhOuEkOyXkCDrt7Ag7LaU6rCAXCIsXCJjb250ZXh0TWVudS5hZGRWaWV3c1wiOlwi7LGE64SQ7JeQIOu3sCDstpTqsIBcIixcImNvbnRleHRNZW51LnJlbW92ZVZpZXdcIjpcIuyxhOuEkOyXkOyEnCDrt7Ag7KCc6rGwXCIsXCJjb250ZXh0TWVudS5yZW1vdmVWaWV3c1wiOlwi7LGE64SQ7JeQ7IScIOu3sCDsoJzqsbBcIixcImNvbnRleHRNZW51LmNsb3NlVmlld1wiOlwi67ewIOuLq+q4sFwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3c1wiOlwi67ewIOuLq+q4sFwiLFwiY29udGV4dE1lbnUuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiBLUlwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlUGFnZVwiOlwi7Y6Y7J207KeAIOuzteygnFwiLFwiY29udGV4dE1lbnUuc3VibWVudS5wcmludFwiOlwi7J247IeEXCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50QWxsXCI6XCLrqqjrkZAg7J247IeEXCIsXCJzYXZlTWVudS5zYXZlV29ya3NwYWNlQXNcIjpcIuuLpOuluCDsnbTrpoTsnLzroZwg7J6R7JeFIOqzteqwhCDsoIDsnqVcIixcInNhdmVNZW51LnNhdmVQYWdlQXNcIjpcIuuLpOuluCDsnbTrpoTsnLzroZwg7Y6Y7J207KeAIOyggOyepVwiLFwic2F2ZU1vZGFsLmVudGVyVmFsdWVcIjpcIlBsZWFzZSBlbnRlciBhIHZhbHVlIEtSXCIsXCJzYXZlTW9kYWwuYWxyZWFkeUV4aXN0c1wiOlwie3t0aXRsZX197J20KOqwgCkg7J2066+4IOyhtOyerO2VqeuLiOuLpC5cIixcInNhdmVNb2RhbC5wbGVhc2VFbnRlclZhbGlkTmFtZVwiOlwi7Jyg7Zqo7ZWcIOydtOumhOydhCDsnoXroKXtlZjsi63si5zsmKQuXCIsXCJzYXZlTW9kYWwucmVuYW1lUGFnZVwiOlwi7Y6Y7J207KeAIOydtOumhCDrsJTqvrjquLBcIixcInNhdmVNb2RhbC5jbG9zZVBhZ2VcIjpcIu2OmOydtOyngCDri6vquLBcIixcInNhdmVNb2RhbC5kaXNjYXJkQ2hhbmdlc1wiOlwi67OA6rK9IOyCrO2VrSDtj5DquLBcIixcInNhdmVNb2RhbC5kaXNjYXJkQWxsXCI6XCLrqqjrkZAg7Y+Q6riwXCIsXCJzYXZlTW9kYWwuc2F2ZUFsbFwiOlwi66qo65GQIOyggOyepVwiLFwic2F2ZU1vZGFsLnNhdmVQYWdlc0NvdW50XCI6XCLri6vquLAg7KCE7JeQIO2OmOydtOyngCh7e2NvdW50fX3qsJwp66W8IOyggOyepe2VmOyLnOqyoOyKteuLiOq5jD9cIixcImRlZmF1bHRQYWdlVGl0bGVcIjpcIlVudGl0bGVkIFBhZ2UgS1JcIixcImVudGVycHJpc2VEZWZhdWx0UGFnZVRpdGxlXCI6XCJVbnRpdGxlZCBTdXBlcnRhYiBLUlwiLFwiYWRkTmV3UGFnZVwiOlwiTmV3IFBhZ2UgS1JcIixcImFkZE5ld1RhYlwiOlwi7IOIIO2DrSDstpTqsIBcIixcImFkZE5ld1ZpZXdcIjpcIuyDiCDrt7BcIixcInJlc3RvcmVNb2RhbFwiOlwi66eI7KeA66eJ7Jy866GcIOyggOyepe2VnCDrs4Dqsr0g7IKs7ZWt7Jy866GcIOuzteybkO2VmOyLnOqyoOyKteuLiOq5jD9cIixcIm1vZGFsLmRpc2NhcmRXYXJuaW5nXCI6XCLsoIDsnqXtlZjsp4Ag7JWK7J2AIOuzgOqyvSDsgqztla3snYAg66qo65GQIO2PkOq4sOuQqeuLiOuLpFwiLFwibW9kYWwuZGlzY2FyZFBhZ2VXYXJuaW5nXCI6XCLsnbQg7Y6Y7J207KeA7J2YIOyggOyepe2VmOyngCDslYrsnYAg67OA6rK9IOyCrO2VreydgCDrqqjrkZAg7IaQ7Iuk65Cp64uI64ukLlwiLFwibW9kYWwuc2F2ZUNoYW5nZXNQcm9tcHRcIjpcIuuLq+q4sCDsoITsl5Ag67OA6rK9IOyCrO2VreydhCDsoIDsnqXtlZjsi5zqsqDsirXri4jquYw/XCIsXCJtb2RhbC5wYWdlQ2xvc2VcIjpcIlBhZ2UgQ2xvc2UgS1JcIixcInN3aXRjaFdvcmtzcGFjZU1vZGFsXCI6XCJ7e3dvcmtzcGFjZX19KOycvCnroZwg7KCE7ZmY7ZWY7Iuc6rKg7Iq164uI6rmMP1wiLFwic3dpdGNoV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi7KCA7J6l7ZWY7KeAIOyViuydgCDrs4Dqsr0g7IKs7ZWt7J2AIOuqqOuRkCDtj5DquLDrkKnri4jri6RcIixcImRlbGV0ZVdvcmtzcGFjZU1vZGFsXCI6XCLsnbQg7J6R7JeFIOqzteqwhOydhCDsmIHqtazsoIHsnLzroZwg7IKt7KCc7ZWY7Iuc6rKg7Iq164uI6rmMP1wiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLndhcm5pbmdcIjpcInt7d29ya3NwYWNlfX0o7J20KeudvOuKlCDsnbTrpoTsnZgg7J6R7JeFIOqzteqwhOydtCDsnbTrr7gg7KG07J6s7ZWp64uI64ukLiDqtZDssrTtlZjsi5zqsqDsirXri4jquYw/XCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZy5ib2R5XCI6XCLqsJnsnYAg7J2066aE7J2YIOyekeyXhSDqs7XqsITsnbQg7J2066+4IOyhtOyerO2VqeuLiOuLpC4g6rWQ7LK07ZWY66m0IO2YhOyerCDrgrTsmqnsnYQg642u7Ja07JOw6rKMIOuQqeuLiOuLpC5cIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC5yZXBsYWNlXCI6XCLqtZDssrRcIixcImNsb3NlUGxhdGZvcm1cIjpcIu2UjOueq+2PvCDri6vquLBcIixcImNsb3NlUGxhdGZvcm0ud29ya3NwYWNlXCI6XCJ7e3dvcmtzcGFjZX19IO2UjOueq+2PvCDri6vquLBcIixcImNsb3NlUGxhdGZvcm0ud2FybmluZ1wiOlwi7ZSM656r7Y+87J2EIOuLq+ycvOuptCDsi6Ttlokg7KSR7J24IOuqqOuToCDsnpHsl4Ug6rO16rCELCDslbEg65iQ64qUIO2UhOuhnOyEuOyKpOqwgCDri6vtnpnri4jri6QuXCIsXCJiYWNrXCI6XCLrkqTroZwg6rCA6riwXCIsXCJmb3J3YXJkXCI6XCLslZ7snLzroZwg6rCA6riwXCIsXCJyZWxvYWRcIjpcIuyDiOuhnOqzoOy5qFwiLFwiZ3JlZW5cIjpcIuuFueyDiVwiLFwicHVycGxlXCI6XCLrs7Trnbzsg4lcIixcIm9yYW5nZVwiOlwi7Jik66CM7KeA7IOJXCIsXCJyZWRcIjpcIuu5qOqwhOyDiVwiLFwicGlua1wiOlwi7ZWR7YGs7IOJXCIsXCJ5ZWxsb3dcIjpcIuuFuOuegOyDiVwiLFwidGhlbWUubGlnaHRcIjpcIuuwneydgFwiLFwidGhlbWUuZGFya1wiOlwi7Ja065GQ7Jq0XCIsXCJ0aGVtZS5zeXN0ZW1cIjpcIk9TIOyEpOygleqzvCDrj5nquLDtmZRcIixcInRvb2xiYXIuaGlkZVRhYnNcIjpcIu2DrSDsiKjquLDquLBcIixcInRvb2xiYXIuc2hvd1RhYnNcIjpcIu2DrSDtkZzsi5xcIixcInRvb2xiYXIubG9ja1wiOlwi7J6g6riIXCIsXCJ0b29sYmFyLnVubG9ja1wiOlwi7J6g6riIIO2VtOygnFwiLFwidG9vbGJhci5jb2xvckxpbmtpbmdcIjpcIuyDieyDgSDsl7DqsrBcIixcInRvb2xiYXIuY2hhbmdlTGF5b3V0XCI6XCLroIjsnbTslYTsm4Mg67OA6rK9XCIsXCJ0b29sYmFyLnNhdmVNZW51XCI6XCLsoIDsnqUg66mU64m0XCIsXCJ0b29sYmFyLm1heGltaXplV2luZG93XCI6XCLssL0g7LWc64yA7ZmUXCIsXCJ0b29sYmFyLnJlc3RvcmVXaW5kb3dcIjpcIuywvSDrs7Xsm5BcIixcInRvb2xiYXIubWluaW1pemVXaW5kb3dcIjpcIuywvSDstZzshoztmZRcIixcImNoYW5nZUxheW91dC5mdWxsV2lkdGhcIjpcIuyghOyytCDrhIjruYRcIixcImNoYW5nZUxheW91dC5jb2x1bW5zXCI6XCLsl7RcIixcImNoYW5nZUxheW91dC5Sb3dzXCI6XCLtlolcIixcImNoYW5nZUxheW91dC5HcmlkXCI6XCLqt7jrpqzrk5xcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU3dpdGNoZWRcIjpcIuyekeyXhSDqs7XqsIQg7KCE7ZmYXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmhpZGRlblwiOlwi7YOtIOyIqOq5gFwiLFwic3VjY2Vzc0luZGljYXRvci5zaG93blwiOlwi7YOtIO2RnOyLnFwiLFwic3VjY2Vzc0luZGljYXRvci5sb2NrZWRcIjpcIu2OmOydtOyngCDsnqDquIhcIixcInN1Y2Nlc3NJbmRpY2F0b3IudW5sb2NrZWRcIjpcIu2OmOydtOyngCDsnqDquIgg7ZW07KCc65CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkXCI6XCLsnpHsl4Ug6rO16rCEIOyggOyepeuQqFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTYXZlZEFzXCI6XCLsnpHsl4Ug6rO16rCE7J20IHt7d29ya3NwYWNlfX0o7Jy8KeuhnCDsoIDsnqXrkKhcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlUmVuYW1lZFwiOlwi7J6R7JeFIOqzteqwhCDsnbTrpoQg67OA6rK965CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VTYXZlZFwiOlwi7Y6Y7J207KeAIOyggOyepeuQqFwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlSGFzQmVlblNhdmVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgaGFzIGJlZW4gc2F2ZWQuIEtSXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VDb3B5U2F2ZWRcIjpcIu2OmOydtOyngOqwgCB7e3RpdGxlfX0o7Jy8KeuhnCDsoIDsnqXrkKhcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVJlbmFtZWRcIjpcIu2OmOydtOyngCDsnbTrpoQg67OA6rK965CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmNvbnRleHRHcm91cEFwcGxpZWRcIjpcIuy7qO2FjeyKpO2KuCDqt7jro7kg7KCB7Jqp65CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLm5hbWVkQ29udGV4dEdyb3VwQXBwbGllZFwiOlwie3tjb2xvck5hbWV9fSDsu6jthY3siqTtirgg6re466O5IOyggeyaqeuQqFwiLFwic3VjY2Vzc0luZGljYXRvci52aWV3UmVtb3ZlZFwiOlwi7Luo7YWN7Iqk7Yq4IOq3uOujueyXkOyEnCDrt7Ag7KCc6rGw65CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdzUmVtb3ZlZFwiOlwi7Luo7YWN7Iqk7Yq4IOq3uOujueyXkOyEnCDrt7Ag7KCc6rGw65CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxheW91dEFwcGxpZWRcIjpcInt7bGF5b3V0TmFtZX19IOugiOydtOyVhOybgyDsoIHsmqnrkKhcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlRGVsZXRlZFwiOlwi7J6R7JeFIOqzteqwhCDsgq3soJzrkKhcIixcImVycm9ySW5kaWNhdG9yLnBhZ2VTYXZlRmFpbGVkXCI6XCLtjpjsnbTsp4Ag7KCA7J6lIOyLpO2MqFwiLFwiZXJyb3JJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZUZhaWxlZFwiOlwi7J6R7JeFIOqzteqwhCDsoIDsnqUg7Iuk7YyoXCIsXCJlcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVBhZ2VcIjpcIu2OmOydtOyngCDrs7XsoJwg7Iuk7YyoXCIsXCJpbmZvSW5kaWNhdG9yLmNvbG9yTGlua0F0dGVtcHRcIjpcIuydtCDtg63snZgg7IOJ7IOBIOunge2BrOulvCDsi5zrj4Ttlojsp4Drp4wg7IKs7J207Yq4L+y9mO2FkOy4oCDshozsnKDsnpDqsIAg7JWE7KeBIO2ZnOyEse2ZlO2VmOyngCDslYrslZjsirXri4jri6QuXCIsXCJnbG9iYWwuY2FuY2VsXCI6XCLst6jshoxcIixcImdsb2JhbC5jb25maXJtXCI6XCLtmZXsnbhcIixcImdsb2JhbC5zYXZlXCI6XCLsoIDsnqVcIixcImdsb2JhbC5kZWxldGVcIjpcIkRlbGV0ZSBLUlwiLFwiYXBwUmVzdWx0cy5oZWFkZXJcIjpcIkZlYXR1cmVkIENvbnRlbnQgS1JcIixcInJlY2VudGx5VmlzaXRlZC5oZWFkZXJcIjpcIlJlY2VudGx5IHZpc2l0ZWQgS1JcIixcImxhbmRpbmdQYWdlLnN1YmhlYWRlclwiOlwiQXBwcyBhbmQgd2Vic2l0ZXMgc2VsZWN0ZWQgYnkgYW4gYWRtaW4gd2lsbCBzaG93IGhlcmUgS1JcIixcImFyaWEub3BlbkJyb3dzZXJcIjpcIuu4jOudvOyasOyggCDrqZTribQg7Je06riwXCIsXCJhcmlhLmJyb3dzZXJUYWJzXCI6XCLruIzrnbzsmrDsoIAg7YOtXCIsXCJhcmlhLnZpZXdUYWJcIjpcInt7dGl0bGV9feydmCDrt7Ag7YOtXCIsXCJhcmlhLmNsb3NlUGFnZVwiOlwie3t0aXRsZX197J2YIO2OmOydtOyngCDri6vquLAg7YOtXCIsXCJhcmlhLmNsb3NlVGFiXCI6XCLtg60ge3t0aXRsZX19IOuLq+q4sFwiLFwiYXJpYS50aXRsZVwiOlwi7KCc66qpXCIsXCJhcmlhLmNsb3NlQ29udGV4dEdyb3VwXCI6XCLsnbTsiqTsvIDsnbTtlITrpbwg7IKs7Jqp7ZWY7JesIOy7qO2FjeyKpO2KuCDqt7jro7kg7ISg7YOdIOuMgO2ZlOyDgeyekCDri6vquLBcIixcImFyaWEuY29sb3JMaW5raW5nXCI6XCLsg4nsg4Eg7Jew6rKwIO2RnOyLnCDrmJDripQg7Iio6riw6riwXCIsXCJhcmlhLmFwcGx5Q29sb3JMaW5raW5nXCI6XCLsg4nsg4Eg7Jew6rKw7J2EIOyggeyaqe2VmOugpOuptCDrt7Drpbwg7ISg7YOd7ZWY7Iut7Iuc7JikLlwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld1wiOlwie3tuYW1lfX0g7Luo7YWN7Iqk7Yq4IOq3uOujueyXkCDtlaDri7nrkJwg7ZiE7J6sIOu3sFwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld3NcIjpcInt7bmFtZX19IOy7qO2FjeyKpO2KuCDqt7jro7nsl5Ag7ZWg64u565CcIO2YhOyerCDrt7BcIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld1wiOlwi7Zmc7ISxIOu3sOulvCB7e25hbWV9fSDsu6jthY3siqTtirgg6re466O57Jy866GcIOyEpOyglVwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3c1wiOlwi7Zmc7ISxIOu3sOulvCB7e25hbWV9fSDsu6jthY3siqTtirgg6re466O57Jy866GcIOyEpOyglVwiLFwiYXJpYS5lc2NhcGVMYXlvdXREaWFsb2dcIjpcIuydtOyKpOy8gOydtO2UhOulvCDsgqzsmqntlZjsl6wg66CI7J207JWE7JuDIOuzgOqyvSDrjIDtmZTsg4HsnpAg64ur6riwXCIsXCJnbG9iYWwuc3VwZXJ0YWJcIjpcIlN1cGVydGFiIEtSXCIsXCJnbG9iYWwudGFiXCI6XCJUYWIgS1JcIixcImJvb2ttYXJrcy5lZGl0Qm9va21hcmtcIjpcIkVkaXQgQm9va21hcmsgS1JcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkXCI6XCJCb29rbWFyayBhZGRlZCBLUlwiLFwiYm9va21hcmtzLmRvbmVcIjpcIkRvbmUgS1JcIixcImJvb2ttYXJrcy5yZW1vdmVcIjpcIlJlbW92ZSBLUlwiLFwiYm9va21hcmtzLmJvb2ttYXJrc1BhbmVsXCI6XCJCb29rbWFya3MgUGFuZWwgS1JcIixcImJvb2ttYXJrcy5jbG9zZVBhbmVsXCI6XCJDbG9zZSBCb29rbWFya3MgUGFuZWwgS1JcIixcImJvb2ttYXJrcy5ib29rbWFya3NcIjpcIkJvb2ttYXJrcyBLUlwiLFwiYm9va21hcmtzLmFsbEJvb2ttYXJrc1wiOlwiQWxsIEJvb2ttYXJrcyBLUlwiLFwiYm9va21hcmtzLmZhdm9yaXRlc1wiOlwiRmF2b3JpdGVzIEtSXCIsXCJib29rbWFya3Muc2VhcmNoQm9va21hcmtzXCI6XCJTZWFyY2ggQm9va21hcmtzIEtSXCIsXCJib29rbWFya3MuY2xlYXJTZWFyY2hJbnB1dFwiOlwiQ2xlYXIgU2VhcmNoIElucHV0IEtSXCIsXCJib29rbWFya3MuY3JlYXRlRm9sZGVyXCI6XCJDcmVhdGUgTmV3IEZvbGRlciBLUlwiLFwiYm9va21hcmtzLmV4aXRGb2xkZXJcIjpcIkV4aXQgRm9sZGVyIEtSXCIsXCJib29rbWFya3MubmV3Rm9sZGVyXCI6XCJOZXcgRm9sZGVyIEtSXCIsXCJib29rbWFya3MubmFtZWRGb2xkZXJcIjpcInt7bmFtZX19IEZvbGRlciBLUlwiLFwiYm9va21hcmtzLmJvb2ttYXJrU2V0dGluZ3NcIjpcInt7bmFtZX19IEJvb2ttYXJrIFNldHRpbmdzIEtSXCIsXCJib29rbWFya3MuZm9sZGVyU2V0dGluZ3NcIjpcInt7bmFtZX19IEZvbGRlciBTZXR0aW5ncyBLUlwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kXCI6XCJObyByZXN1bHRzIGZvdW5kIEtSXCIsXCJib29rbWFya3Mubm9SZXN1bHRzRm91bmRTdWJ0ZXh0XCI6XCJUaGVyZSBhcmUgbm8gYm9va21hcmtzIHRoYXQgbWF0Y2ggeW91ciBzZWFyY2ggS1JcIixcImJvb2ttYXJrcy5ub3RoaW5nVG9TaG93XCI6XCJOb3RoaW5nIHRvIHNob3cgeWV0IEtSXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1N1YnRleHRcIjpcIkFkZCBhIGJvb2ttYXJrIHRvIHRoaXMgZm9sZGVyIEtSXCIsXCJib29rbWFya3MucmVzdWx0c0ZvdW5kSW5cIjpcIlJlc3VsdHMgZm91bmQgaW4ge3tuYW1lfX0gS1JcIixcImJvb2ttYXJrcy5yZXN1bHRzSW5PdGhlckZvbGRlcnNcIjpcIlJlc3VsdHMgZm91bmQgaW4gb3RoZXIgZm9sZGVycyBLUlwiLFwiYm9va21hcmtzLmFsbFJlc3VsdHNGb3VuZEluXCI6XCJBbGwgcmVzdWx0cyBmb3VuZCBpbiBLUlwiLFwiYm9va21hcmtzLmVkaXROYW1lXCI6XCJFZGl0IE5hbWUgS1JcIixcImJvb2ttYXJrcy5tb3ZlXCI6XCJNb3ZlIEtSXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFRpdGxlXCI6XCJCb29rbWFyayBBZGRlZCBLUlwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUb0ZvbGRlclwiOlwiWW91ciBib29rbWFyayB3YXMgYWRkZWQgdG8gXFxcXFwie3tmb2xkZXJOYW1lfX1cXFxcXCIgS1JcIixcImJvb2ttYXJrcy5ib29rbWFya0VkaXRlZFRpdGxlXCI6XCJCb29rbWFyayBFZGl0ZWQgS1JcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJcIjpcIlNhdmUgU3VwZXJ0YWIgS1JcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBcy4uLiBLUlwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmR1cGxpY2F0ZVwiOlwiRHVwbGljYXRlIEtSXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZGVsZXRlU3VwZXJ0YWJcIjpcIkRlbGV0ZSBTdXBlcnRhYiBLUlwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51Lm5ld1RhYlwiOlwiTmV3IFRhYiBLUlwiLFwiZW50ZXJwcmlzZVNhdmVNZW51LnNhdmVTdXBlcnRhYkFzXCI6XCJTYXZlIFN1cGVydGFiIEFzIEtSXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnJlbmFtZVN1cGVydGFiXCI6XCJSZW5hbWUgS1JcIixcImVudGVycHJpc2VTYXZlTW9kYWwudW5zYXZlZENoYW5nZXNcIjpcIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGlzIFRhYi4gS1JcIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiBLUlwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVN1cGVydGFiXCI6XCJDbG9zZSBTdXBlcnRhYiBLUlwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5zYXZlU3VwZXJ0YWJDb3VudFwiOlwiU2F2ZSB7e2NvdW50fX0gU3VwZXJ0YWJzIGJlZm9yZSBjbG9zaW5nPyBLUlwiLFwiZW50ZXJwcmlzZU1vZGFsLmRpc2NhcmRTdXBlcnRhYldhcm5pbmdcIjpcIkFueSB1bnNhdmVkIGNoYW5nZXMgdG8gdGhpcyBTdXBlcnRhYiB3aWxsIGJlIGxvc3QuIEtSXCIsXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJcIjpcIkRlbGV0ZSB0aGUgXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiPyBLUlwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiV2FybmluZ1wiOlwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIFN1cGVydGFiPyBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lIGFuZCBpcyBwZXJtYW5lbnQuIEtSXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYlNhdmVkXCI6XCJTdXBlcnRhYiBTYXZlZCBLUlwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYiBoYXMgYmVlbiBzYXZlZC4gS1JcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiRGVsZXRlZFwiOlwiU3VwZXJ0YWIgRGVsZXRlZCBLUlwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuRGVsZXRlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiIGhhcyBiZWVuIGRlbGV0ZWQuIEtSXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVUYWJcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgVGFiIEtSXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVTdXBlcnRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBTdXBlcnRhYiBLUlwiLFwiZW50ZXJwcmlzZUNvbW1hbmRCYXIuc3dpdGNoVG9TdXBlcnRhYlwiOlwiU3dpdGNoIHRvIFN1cGVydGFiIEtSXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5nb1RvXCI6XCJHbyB0byB7e3R5cGV9fSBLUlwiLFwiY29udGV4dE1lbnUucXVpdEVudGVycHJpc2VCcm93c2VyXCI6XCJRdWl0IEtSXCJ9JyksQW49SlNPTi5wYXJzZSgne1wiY29udGV4dE1lbnUubmV3V2luZG93XCI6XCLQndC+0LLQvtC1INC+0LrQvdC+XCIsXCJjb250ZXh0TWVudS5uZXdQYWdlXCI6XCLQndC+0LLQsNGPINGB0YLRgNCw0L3QuNGG0LBcIixcImNvbnRleHRNZW51LnJlc3RvcmVcIjpcItCS0L7RgdGB0YLQsNC90L7QstC40YLRjCDQv9C+0YHQu9C10LTQvdC40LUg0YHQvtGF0YDQsNC90LXQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y9cIixcImNvbnRleHRNZW51LnN3aXRjaFdvcmtzcGFjZVwiOlwi0J/QtdGA0LXQutC70Y7Rh9C40YLRjCDRgNCw0LHQvtGH0YPRjiDQvtCx0LvQsNGB0YLRjFwiLFwiY29udGV4dE1lbnUuYXBwZWFyYW5jZVwiOlwi0JLQvdC10YjQvdC40Lkg0LLQuNC0XCIsXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlXCI6XCLQodC+0YXRgNCw0L3QuNGC0Ywg0YDQsNCx0L7Rh9GD0Y4g0L7QsdC70LDRgdGC0YxcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwi0KHQvtGF0YDQsNC90LjRgtGMINGA0LDQsdC+0YfRg9GOINC+0LHQu9Cw0YHRgtGMINC60LDQui4uLlwiLFwiY29udGV4dE1lbnUucmVuYW1lV29ya3NwYWNlXCI6XCLQn9C10YDQtdC40LzQtdC90L7QstCw0YLRjCDRgNCw0LHQvtGH0YPRjiDQvtCx0LvQsNGB0YLRjFwiLFwiY29udGV4dE1lbnUuZGVsZXRlV29ya3NwYWNlXCI6XCLQo9C00LDQu9C40YLRjCDRgNCw0LHQvtGH0YPRjiDQvtCx0LvQsNGB0YLRjFwiLFwiY29udGV4dE1lbnUuZG93bmxvYWRzXCI6XCLQl9Cw0LPRgNGD0LfQutC4XCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZVwiOlwi0KHQvtGF0YDQsNC90LjRgtGMINGB0YLRgNCw0L3QuNGG0YNcIixcImNvbnRleHRNZW51LnNhdmVQYWdlQXNcIjpcItCh0L7RhdGA0LDQvdC40YLRjCDRgdGC0YDQsNC90LjRhtGDINC60LDQui4uLlwiLFwiY29udGV4dE1lbnUucHJpbnRcIjpcItCf0LXRh9Cw0YLRjC4uLlwiLFwiY29udGV4dE1lbnUucHJpbnRTY3JlZW5cIjpcItCg0LDRgdC/0LXRh9Cw0YLQsNGC0Ywg0Y3QutGA0LDQvVwiLFwiY29udGV4dE1lbnUuY2xvc2VXaW5kb3dcIjpcItCX0LDQutGA0YvRgtGMINC+0LrQvdC+XCIsXCJjb250ZXh0TWVudS5vcGVuU3RvcmVmcm9udFwiOlwi0J7RgtC60YDRi9GC0YwgU3RvcmVmcm9udFwiLFwiY29udGV4dE1lbnUucXVpdFBsYXRmb3JtXCI6XCLQktGL0LnRgtC4INC40Lcg0L/Qu9Cw0YLRhNC+0YDQvNGLXCIsXCJjb250ZXh0TWVudS5uZXdWaWV3XCI6XCLQndC+0LLQvtC1INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1XCIsXCJjb250ZXh0TWVudS5vcGVuVmlld1wiOlwi0J7RgtC60YDRi9GC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUg0YEg0L/QvtC80L7RidGM0Y4g0LLQtdCxLdCx0YDQsNGD0LfQtdGA0LAg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y5cIixcImNvbnRleHRNZW51Lm9wZW5WaWV3c1wiOlwi0J7RgtC60YDRi9GC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0YEg0L/QvtC80L7RidGM0Y4g0LLQtdCxLdCx0YDQsNGD0LfQtdGA0LAg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y5cIixcImNvbnRleHRNZW51LnJlbG9hZFwiOlwiUmVsb2FkIFJVXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3XCI6XCLQn9C10YDQtdC30LDQs9GA0YPQt9C40YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtVwiLFwiY29udGV4dE1lbnUucmVsb2FkVmlld3NcIjpcItCf0LXRgNC10LfQsNCz0YDRg9C30LjRgtGMINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGPXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBSVVwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld1wiOlwi0JTRg9Cx0LvQuNGA0L7QstCw0YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtVwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld3NcIjpcItCU0YPQsdC70LjRgNC+0LLQsNGC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y9cIixcImNvbnRleHRNZW51LmFkZFZpZXdcIjpcItCU0L7QsdCw0LLQuNGC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUg0L3QsCDQutCw0L3QsNC7XCIsXCJjb250ZXh0TWVudS5hZGRWaWV3c1wiOlwi0JTQvtCx0LDQstC40YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjRjyDQvdCwINC60LDQvdCw0LtcIixcImNvbnRleHRNZW51LnJlbW92ZVZpZXdcIjpcItCj0LTQsNC70LjRgtGMINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1INC40Lcg0LrQsNC90LDQu9CwXCIsXCJjb250ZXh0TWVudS5yZW1vdmVWaWV3c1wiOlwi0KPQtNCw0LvQuNGC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0LjQtyDQutCw0L3QsNC70LBcIixcImNvbnRleHRNZW51LmNsb3NlVmlld1wiOlwi0JfQsNC60YDRi9GC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LVcIixcImNvbnRleHRNZW51LmNsb3NlVmlld3NcIjpcItCX0LDQutGA0YvRgtGMINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGPXCIsXCJjb250ZXh0TWVudS5jbG9zZVRhYlwiOlwiQ2xvc2UgVGFiIFJVXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVQYWdlXCI6XCLQlNGD0LHQu9C40YDQvtCy0LDRgtGMINGB0YLRgNCw0L3QuNGG0YNcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRcIjpcItCf0LXRh9Cw0YLQsNGC0YxcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRBbGxcIjpcItCf0LXRh9Cw0YLQsNGC0Ywg0LLRgdC1XCIsXCJzYXZlTWVudS5zYXZlV29ya3NwYWNlQXNcIjpcItCh0L7RhdGA0LDQvdC40YLRjCDRgNCw0LHQvtGH0YPRjiDQvtCx0LvQsNGB0YLRjCDQutCw0LpcIixcInNhdmVNZW51LnNhdmVQYWdlQXNcIjpcItCh0L7RhdGA0LDQvdC40YLRjCDRgdGC0YDQsNC90LjRhtGDINC60LDQulwiLFwic2F2ZU1vZGFsLmVudGVyVmFsdWVcIjpcIlBsZWFzZSBlbnRlciBhIHZhbHVlIFJVXCIsXCJzYXZlTW9kYWwuYWxyZWFkeUV4aXN0c1wiOlwie3t0aXRsZX19INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi5cIixcInNhdmVNb2RhbC5wbGVhc2VFbnRlclZhbGlkTmFtZVwiOlwi0JLQstC10LTQuNGC0LUg0L/QvtC00YXQvtC00Y/RidC10LUg0LjQvNGPXCIsXCJzYXZlTW9kYWwucmVuYW1lUGFnZVwiOlwi0J/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0Ywg0YHRgtGA0LDQvdC40YbRg1wiLFwic2F2ZU1vZGFsLmNsb3NlUGFnZVwiOlwi0JfQsNC60YDRi9GC0Ywg0YHRgtGA0LDQvdC40YbRg1wiLFwic2F2ZU1vZGFsLmRpc2NhcmRDaGFuZ2VzXCI6XCLQntGC0LzQtdC90LjRgtGMINC40LfQvNC10L3QtdC90LjRj1wiLFwic2F2ZU1vZGFsLmRpc2NhcmRBbGxcIjpcItCe0YLQvNC10L3QuNGC0Ywg0LLRgdC1XCIsXCJzYXZlTW9kYWwuc2F2ZUFsbFwiOlwi0KHQvtGF0YDQsNC90LjRgtGMINCy0YHQtVwiLFwic2F2ZU1vZGFsLnNhdmVQYWdlc0NvdW50XCI6XCLQodC+0YXRgNCw0L3QuNGC0YwgKHt7Y291bnR9fSkg0YHRgtGA0LDQvdC40YYg0L/QtdGA0LXQtCDQt9Cw0LrRgNGL0YLQuNC10Lw/XCIsXCJkZWZhdWx0UGFnZVRpdGxlXCI6XCJVbnRpdGxlZCBQYWdlIFJVXCIsXCJlbnRlcnByaXNlRGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgU3VwZXJ0YWIgUlVcIixcImFkZE5ld1BhZ2VcIjpcIk5ldyBQYWdlIFJVXCIsXCJhZGROZXdUYWJcIjpcItCU0L7QsdCw0LLQuNGC0Ywg0L3QvtCy0YPRjiDQstC60LvQsNC00LrRg1wiLFwiYWRkTmV3Vmlld1wiOlwi0J3QvtCy0L7QtSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtVwiLFwicmVzdG9yZU1vZGFsXCI6XCLQktGLINGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0YXQvtGC0LjRgtC1INCy0L7RgdGB0YLQsNC90L7QstC40YLRjCDQv9C+0YHQu9C10LTQvdC40LUg0YHQvtGF0YDQsNC90LXQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8/XCIsXCJtb2RhbC5kaXNjYXJkV2FybmluZ1wiOlwi0JLRgdC1INC90LXRgdC+0YXRgNCw0L3QtdC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQsdGD0LTRg9GCINC+0YLQvNC10L3QtdC90YtcIixcIm1vZGFsLmRpc2NhcmRQYWdlV2FybmluZ1wiOlwi0JLRgdC1INC90LXRgdC+0YXRgNCw0L3QtdC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQvdCwINGN0YLQvtC5INGB0YLRgNCw0L3QuNGG0LUg0LHRg9C00YPRgiDQv9C+0YLQtdGA0Y/QvdGLLlwiLFwibW9kYWwuc2F2ZUNoYW5nZXNQcm9tcHRcIjpcItCh0L7RhdGA0LDQvdC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0L/QtdGA0LXQtCDQt9Cw0LrRgNGL0YLQuNC10Lw/XCIsXCJtb2RhbC5wYWdlQ2xvc2VcIjpcIlBhZ2UgQ2xvc2UgUlVcIixcInN3aXRjaFdvcmtzcGFjZU1vZGFsXCI6XCLQktGLINGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0YXQvtGC0LjRgtC1INC/0LXRgNC10LnRgtC4INCyIHt7d29ya3NwYWNlfX0/XCIsXCJzd2l0Y2hXb3Jrc3BhY2VNb2RhbC53YXJuaW5nXCI6XCLQktGB0LUg0L3QtdGB0L7RhdGA0LDQvdC10L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINCx0YPQtNGD0YIg0L7RgtC80LXQvdC10L3Ri1wiLFwiZGVsZXRlV29ya3NwYWNlTW9kYWxcIjpcItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0L3QsNCy0YHQtdCz0LTQsCDRg9C00LDQu9C40YLRjCDRjdGC0YMg0YDQsNCx0L7Rh9GD0Y4g0L7QsdC70LDRgdGC0Yw/XCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi0KDQsNCx0L7Rh9Cw0Y8g0L7QsdC70LDRgdGC0Ywg0YEg0LjQvNC10L3QtdC8IHt7d29ya3NwYWNlfX0g0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCLiDQktGLINGF0L7RgtC40YLQtSDQt9Cw0LzQtdC90LjRgtGMINC10LU/XCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZy5ib2R5XCI6XCLQoNCw0LHQvtGH0LDRjyDQvtCx0LvQsNGB0YLRjCDRgSDRgtCw0LrQuNC8INC20LUg0LjQvNC10L3QtdC8INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4g0J/RgNC4INC10LUg0LfQsNC80LXQvdC1INGC0LXQutGD0YnQtdC1INGB0L7QtNC10YDQttC40LzQvtC1INCx0YPQtNC10YIg0L/QtdGA0LXQt9Cw0L/QuNGB0LDQvdC+LlwiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLnJlcGxhY2VcIjpcItCX0LDQvNC10L3QuNGC0YxcIixcImNsb3NlUGxhdGZvcm1cIjpcItCX0LDQutGA0YvRgtGMINC/0LvQsNGC0YTQvtGA0LzRg1wiLFwiY2xvc2VQbGF0Zm9ybS53b3Jrc3BhY2VcIjpcItCX0LDQutGA0YvRgtGMINC/0LvQsNGC0YTQvtGA0LzRgyB7e3dvcmtzcGFjZX19XCIsXCJjbG9zZVBsYXRmb3JtLndhcm5pbmdcIjpcItCX0LDQutGA0YvRgtC40LUg0L/Qu9Cw0YLRhNC+0YDQvNGLINC/0YDQuNCy0LXQtNC10YIg0Log0LfQsNC60YDRi9GC0LjRjiDQstGB0LXRhSDRgNCw0LHQvtGH0LjRhSDQvtCx0LvQsNGB0YLQtdC5LCDQv9GA0LjQu9C+0LbQtdC90LjQuSDQuCDQt9Cw0L/Rg9GJ0LXQvdC90YvRhSDQv9GA0L7RhtC10YHRgdC+0LIuXCIsXCJiYWNrXCI6XCLQndCw0LfQsNC0XCIsXCJmb3J3YXJkXCI6XCLQktC/0LXRgNC10LRcIixcInJlbG9hZFwiOlwi0J/QtdGA0LXQt9Cw0LPRgNGD0LfQuNGC0YzCoFwiLFwiZ3JlZW5cIjpcItCX0LXQu9C10L3Ri9C5XCIsXCJwdXJwbGVcIjpcItCk0LjQvtC70LXRgtC+0LLRi9C5XCIsXCJvcmFuZ2VcIjpcItCe0YDQsNC90LbQtdCy0YvQuVwiLFwicmVkXCI6XCLQmtGA0LDRgdC90YvQuVwiLFwicGlua1wiOlwi0KDQvtC30L7QstGL0LlcIixcInllbGxvd1wiOlwi0JbQtdC70YLRi9C5XCIsXCJ0aGVtZS5saWdodFwiOlwi0KHQstC10YLQu9GL0LlcIixcInRoZW1lLmRhcmtcIjpcItCi0LXQvNC90YvQuVwiLFwidGhlbWUuc3lzdGVtXCI6XCLQodC40L3RhdGA0L7QvdC40LfQuNGA0L7QstCw0YLRjCDRgSDQvdCw0YHRgtGA0L7QudC60LDQvNC4INCe0KFcIixcInRvb2xiYXIuaGlkZVRhYnNcIjpcItCh0LrRgNGL0YLRjCDQstC60LvQsNC00LrQuFwiLFwidG9vbGJhci5zaG93VGFic1wiOlwi0J/QvtC60LDQt9Cw0YLRjCDQstC60LvQsNC00LrQuFwiLFwidG9vbGJhci5sb2NrXCI6XCLQl9Cw0LHQu9C+0LrQuNGA0L7QstCw0YLRjFwiLFwidG9vbGJhci51bmxvY2tcIjpcItCg0LDQt9Cx0LvQvtC60LjRgNC+0LLQsNGC0YxcIixcInRvb2xiYXIuY29sb3JMaW5raW5nXCI6XCLQn9GA0LjQstGP0LfQutCwINC6INGG0LLQtdGC0YNcIixcInRvb2xiYXIuY2hhbmdlTGF5b3V0XCI6XCLQmNC30LzQtdC90LjRgtGMINC80LDQutC10YJcIixcInRvb2xiYXIuc2F2ZU1lbnVcIjpcItCc0LXQvdGOINGB0L7RhdGA0LDQvdC10L3QuNGPXCIsXCJ0b29sYmFyLm1heGltaXplV2luZG93XCI6XCLQo9Cy0LXQu9C40YfQuNGC0Ywg0L7QutC90L5cIixcInRvb2xiYXIucmVzdG9yZVdpbmRvd1wiOlwi0JLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINC+0LrQvdC+XCIsXCJ0b29sYmFyLm1pbmltaXplV2luZG93XCI6XCLQodCy0LXRgNC90YPRgtGMINC+0LrQvdC+XCIsXCJjaGFuZ2VMYXlvdXQuZnVsbFdpZHRoXCI6XCLQn9C+0LvQvdCw0Y8g0YjQuNGA0LjQvdCwXCIsXCJjaGFuZ2VMYXlvdXQuY29sdW1uc1wiOlwi0KHRgtC+0LvQsdGG0YtcIixcImNoYW5nZUxheW91dC5Sb3dzXCI6XCLQodGC0YDQvtC60LhcIixcImNoYW5nZUxheW91dC5HcmlkXCI6XCLQodC10YLQutCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVN3aXRjaGVkXCI6XCLQoNCw0LHQvtGH0LDRjyDQvtCx0LvQsNGB0YLRjCDQv9C10YDQtdC60LvRjtGH0LXQvdCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmhpZGRlblwiOlwi0JLQutC70LDQtNC60Lgg0YHQutGA0YvRgtGLXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnNob3duXCI6XCLQktC60LvQsNC00LrQuCDQv9C+0LrQsNC30LDQvdGLXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxvY2tlZFwiOlwi0KHRgtGA0LDQvdC40YbQsCDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0L3QsFwiLFwic3VjY2Vzc0luZGljYXRvci51bmxvY2tlZFwiOlwi0KHRgtGA0LDQvdC40YbQsCDRgNCw0LfQsdC70L7QutC40YDQvtCy0LDQvdCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkXCI6XCLQoNCw0LHQvtGH0LDRjyDQvtCx0LvQsNGB0YLRjCDRgdC+0YXRgNCw0L3QtdC90LBcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRBc1wiOlwi0KDQsNCx0L7Rh9Cw0Y8g0L7QsdC70LDRgdGC0Ywg0YHQvtGF0YDQsNC90LXQvdCwINC60LDQuiB7e3dvcmtzcGFjZX19XCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVJlbmFtZWRcIjpcItCg0LDQsdC+0YfQsNGPINC+0LHQu9Cw0YHRgtGMINC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VTYXZlZFwiOlwi0KHRgtGA0LDQvdC40YbQsCDRgdC+0YXRgNCw0L3QtdC90LBcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUhhc0JlZW5TYXZlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIGhhcyBiZWVuIHNhdmVkLiBSVVwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlQ29weVNhdmVkXCI6XCLQodGC0YDQsNC90LjRhtCwINGB0L7RhdGA0LDQvdC10L3QsCDQutCw0Loge3t0aXRsZX19XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VSZW5hbWVkXCI6XCLQodGC0YDQsNC90LjRhtCwINC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmNvbnRleHRHcm91cEFwcGxpZWRcIjpcItCa0L7QvdGC0LXQutGB0YLQvdCw0Y8g0LPRgNGD0L/Qv9CwINC/0YDQuNC80LXQvdC10L3QsFwiLFwic3VjY2Vzc0luZGljYXRvci5uYW1lZENvbnRleHRHcm91cEFwcGxpZWRcIjpcItCa0L7QvdGC0LXQutGB0YLQvdCw0Y8g0LPRgNGD0L/Qv9CwIHt7Y29sb3JOYW1lfX0g0L/RgNC40LzQtdC90LXQvdCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdSZW1vdmVkXCI6XCLQn9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSDRg9C00LDQu9C10L3QviDQuNC3INC60L7QvdGC0LXQutGB0YLQvdC+0Lkg0LPRgNGD0L/Qv9GLXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdzUmVtb3ZlZFwiOlwi0J/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0YPQtNCw0LvQtdC90Ysg0LjQtyDQutC+0L3RgtC10LrRgdGC0L3QvtC5INCz0YDRg9C/0L/Ri1wiLFwic3VjY2Vzc0luZGljYXRvci5sYXlvdXRBcHBsaWVkXCI6XCLQnNCw0LrQtdGCIHt7bGF5b3V0TmFtZX19INC/0YDQuNC80LXQvdC10L1cIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlRGVsZXRlZFwiOlwi0KDQsNCx0L7Rh9Cw0Y8g0L7QsdC70LDRgdGC0Ywg0YPQtNCw0LvQtdC90LBcIixcImVycm9ySW5kaWNhdG9yLnBhZ2VTYXZlRmFpbGVkXCI6XCLQndC1INGD0LTQsNC70L7RgdGMINGB0L7RhdGA0LDQvdC40YLRjCDRgdGC0YDQsNC90LjRhtGDXCIsXCJlcnJvckluZGljYXRvci53b3Jrc3BhY2VTYXZlRmFpbGVkXCI6XCLQndC1INGD0LTQsNC70L7RgdGMINGB0L7RhdGA0LDQvdC40YLRjCDRgNCw0LHQvtGH0YPRjiDQvtCx0LvQsNGB0YLRjFwiLFwiZXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVQYWdlXCI6XCLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQvtC00YPQsdC70LjRgNC+0LLQsNGC0Ywg0YHRgtGA0LDQvdC40YbRg1wiLFwiaW5mb0luZGljYXRvci5jb2xvckxpbmtBdHRlbXB0XCI6XCLQnNGLINC/0L7Qv9GL0YLQsNC70LjRgdGMINC/0YDQuNCy0Y/Qt9Cw0YLRjCDRhtCy0LXRgiDQuiDRjdGC0L7QuSDQstC60LvQsNC00LrQtSwg0L3QviDQstC70LDQtNC10LvQtdGGINGB0LDQudGC0LAv0LrQvtC90YLQtdC90YLQsCDQtdGJ0LUg0L3QtSDQstC60LvRjtGH0LjQuyDRjdGC0YMg0LLQvtC30LzQvtC20L3QvtGB0YLRjFwiLFwiZ2xvYmFsLmNhbmNlbFwiOlwi0J7RgtC80LXQvdC40YLRjFwiLFwiZ2xvYmFsLmNvbmZpcm1cIjpcItCf0L7QtNGC0LLQtdGA0LTQuNGC0YxcIixcImdsb2JhbC5zYXZlXCI6XCLQodC+0YXRgNCw0L3QuNGC0YxcIixcImdsb2JhbC5kZWxldGVcIjpcIkRlbGV0ZSBSVVwiLFwiYXBwUmVzdWx0cy5oZWFkZXJcIjpcIkZlYXR1cmVkIENvbnRlbnQgUlVcIixcInJlY2VudGx5VmlzaXRlZC5oZWFkZXJcIjpcIlJlY2VudGx5IHZpc2l0ZWQgUlVcIixcImxhbmRpbmdQYWdlLnN1YmhlYWRlclwiOlwiQXBwcyBhbmQgd2Vic2l0ZXMgc2VsZWN0ZWQgYnkgYW4gYWRtaW4gd2lsbCBzaG93IGhlcmUgUlVcIixcImFyaWEub3BlbkJyb3dzZXJcIjpcItCe0YLQutGA0YvRgtGMINC80LXQvdGOINCx0YDQsNGD0LfQtdGA0LBcIixcImFyaWEuYnJvd3NlclRhYnNcIjpcItCS0LrQu9Cw0LTQutC4INCx0YDQsNGD0LfQtdGA0LBcIixcImFyaWEudmlld1RhYlwiOlwi0JLQutC70LDQtNC60LAg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8ge3t0aXRsZX19XCIsXCJhcmlhLmNsb3NlUGFnZVwiOlwi0JrQvdC+0L/QutCwIMKr0JfQsNC60YDRi9GC0YzCuyDQvdCwINCy0LrQu9Cw0LTQutC1INC00LvRjyDRgdGC0YDQsNC90LjRhtGLIHt7dGl0bGV9fVwiLFwiYXJpYS5jbG9zZVRhYlwiOlwi0JfQsNC60YDRi9GC0Ywg0LLQutC70LDQtNC60YMge3t0aXRsZX19XCIsXCJhcmlhLnRpdGxlXCI6XCLQndCw0LfQstCw0L3QuNC1XCIsXCJhcmlhLmNsb3NlQ29udGV4dEdyb3VwXCI6XCLQp9GC0L7QsdGLINC30LDQutGA0YvRgtGMINC00LjQsNC70L7QsyDQstGL0LHQvtGA0LAg0LrQvtC90YLQtdC60YHRgtC90L7QuSDQs9GA0YPQv9C/0YssINC40YHQv9C+0LvRjNC30YPQudGC0LUgZXNjYXBlXCIsXCJhcmlhLmNvbG9yTGlua2luZ1wiOlwi0J/QvtC60LDQt9Cw0YLRjCDQuNC70Lgg0YHQutGA0YvRgtGMINC/0YDQuNCy0Y/Qt9C60YMg0Log0YbQstC10YLRg1wiLFwiYXJpYS5hcHBseUNvbG9yTGlua2luZ1wiOlwi0JLRi9Cx0LXRgNC40YLQtSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSwg0YfRgtC+0LHRiyDQv9GA0LjQvNC10L3QuNGC0Ywg0L/RgNC40LLRj9C30LrRgyDQuiDRhtCy0LXRgtGDXCIsXCJhcmlhLmFzc2lnbkNvbG9yTGlua2luZ0N1cnJlbnRWaWV3XCI6XCLQotC10LrRg9GJ0LXQtSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSwg0L3QsNC30L3QsNGH0LXQvdC90L7QtSDQutC+0L3RgtC10LrRgdGC0L3QvtC5INCz0YDRg9C/0L/QtSB7e25hbWV9fVwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld3NcIjpcItCi0LXQutGD0YnQuNC1INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGPLCDQvdCw0LfQvdCw0YfQtdC90L3Ri9C1INC60L7QvdGC0LXQutGB0YLQvdC+0Lkg0LPRgNGD0L/Qv9C1IHt7bmFtZX19XCIsXCJhcmlhLnNldENvbG9yTGlua2luZ0FjdGl2ZVZpZXdcIjpcItCj0YHRgtCw0L3QvtCy0LjRgtGMINCw0LrRgtC40LLQvdC+0LUg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUg0LIg0LrQvtC90YLQtdC60YHRgtC90YPRjiDQs9GA0YPQv9C/0YMge3tuYW1lfX1cIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld3NcIjpcItCj0YHRgtCw0L3QvtCy0LjRgtGMINCw0LrRgtC40LLQvdGL0LUg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0LIg0LrQvtC90YLQtdC60YHRgtC90YPRjiDQs9GA0YPQv9C/0YMge3tuYW1lfX1cIixcImFyaWEuZXNjYXBlTGF5b3V0RGlhbG9nXCI6XCLQp9GC0L7QsdGLINC30LDQutGA0YvRgtGMINC00LjQsNC70L7QsyDQuNC30LzQtdC90LXQvdC40Y8g0LzQsNC60LXRgtCwLCDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IGVzY2FwZVwiLFwiZ2xvYmFsLnN1cGVydGFiXCI6XCJTdXBlcnRhYiBSVVwiLFwiZ2xvYmFsLnRhYlwiOlwiVGFiIFJVXCIsXCJib29rbWFya3MuZWRpdEJvb2ttYXJrXCI6XCJFZGl0IEJvb2ttYXJrIFJVXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFwiOlwiQm9va21hcmsgYWRkZWQgUlVcIixcImJvb2ttYXJrcy5kb25lXCI6XCJEb25lIFJVXCIsXCJib29rbWFya3MucmVtb3ZlXCI6XCJSZW1vdmUgUlVcIixcImJvb2ttYXJrcy5ib29rbWFya3NQYW5lbFwiOlwiQm9va21hcmtzIFBhbmVsIFJVXCIsXCJib29rbWFya3MuY2xvc2VQYW5lbFwiOlwiQ2xvc2UgQm9va21hcmtzIFBhbmVsIFJVXCIsXCJib29rbWFya3MuYm9va21hcmtzXCI6XCJCb29rbWFya3MgUlVcIixcImJvb2ttYXJrcy5hbGxCb29rbWFya3NcIjpcIkFsbCBCb29rbWFya3MgUlVcIixcImJvb2ttYXJrcy5mYXZvcml0ZXNcIjpcIkZhdm9yaXRlcyBSVVwiLFwiYm9va21hcmtzLnNlYXJjaEJvb2ttYXJrc1wiOlwiU2VhcmNoIEJvb2ttYXJrcyBSVVwiLFwiYm9va21hcmtzLmNsZWFyU2VhcmNoSW5wdXRcIjpcIkNsZWFyIFNlYXJjaCBJbnB1dCBSVVwiLFwiYm9va21hcmtzLmNyZWF0ZUZvbGRlclwiOlwiQ3JlYXRlIE5ldyBGb2xkZXIgUlVcIixcImJvb2ttYXJrcy5leGl0Rm9sZGVyXCI6XCJFeGl0IEZvbGRlciBSVVwiLFwiYm9va21hcmtzLm5ld0ZvbGRlclwiOlwiTmV3IEZvbGRlciBSVVwiLFwiYm9va21hcmtzLm5hbWVkRm9sZGVyXCI6XCJ7e25hbWV9fSBGb2xkZXIgUlVcIixcImJvb2ttYXJrcy5ib29rbWFya1NldHRpbmdzXCI6XCJ7e25hbWV9fSBCb29rbWFyayBTZXR0aW5ncyBSVVwiLFwiYm9va21hcmtzLmZvbGRlclNldHRpbmdzXCI6XCJ7e25hbWV9fSBGb2xkZXIgU2V0dGluZ3MgUlVcIixcImJvb2ttYXJrcy5ub1Jlc3VsdHNGb3VuZFwiOlwiTm8gcmVzdWx0cyBmb3VuZCBSVVwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kU3VidGV4dFwiOlwiVGhlcmUgYXJlIG5vIGJvb2ttYXJrcyB0aGF0IG1hdGNoIHlvdXIgc2VhcmNoIFJVXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1wiOlwiTm90aGluZyB0byBzaG93IHlldCBSVVwiLFwiYm9va21hcmtzLm5vdGhpbmdUb1Nob3dTdWJ0ZXh0XCI6XCJBZGQgYSBib29rbWFyayB0byB0aGlzIGZvbGRlciBSVVwiLFwiYm9va21hcmtzLnJlc3VsdHNGb3VuZEluXCI6XCJSZXN1bHRzIGZvdW5kIGluIHt7bmFtZX19IFJVXCIsXCJib29rbWFya3MucmVzdWx0c0luT3RoZXJGb2xkZXJzXCI6XCJSZXN1bHRzIGZvdW5kIGluIG90aGVyIGZvbGRlcnMgUlVcIixcImJvb2ttYXJrcy5hbGxSZXN1bHRzRm91bmRJblwiOlwiQWxsIHJlc3VsdHMgZm91bmQgaW4gUlVcIixcImJvb2ttYXJrcy5lZGl0TmFtZVwiOlwiRWRpdCBOYW1lIFJVXCIsXCJib29rbWFya3MubW92ZVwiOlwiTW92ZSBSVVwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUaXRsZVwiOlwiQm9va21hcmsgQWRkZWQgUlVcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkVG9Gb2xkZXJcIjpcIllvdXIgYm9va21hcmsgd2FzIGFkZGVkIHRvIFxcXFxcInt7Zm9sZGVyTmFtZX19XFxcXFwiIFJVXCIsXCJib29rbWFya3MuYm9va21hcmtFZGl0ZWRUaXRsZVwiOlwiQm9va21hcmsgRWRpdGVkIFJVXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiXCI6XCJTYXZlIFN1cGVydGFiIFJVXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcIlNhdmUgU3VwZXJ0YWIgQXMuLi4gUlVcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBSVVwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgU3VwZXJ0YWIgUlVcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5uZXdUYWJcIjpcIk5ldyBUYWIgUlVcIixcImVudGVycHJpc2VTYXZlTWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBcyBSVVwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5yZW5hbWVTdXBlcnRhYlwiOlwiUmVuYW1lIFJVXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnVuc2F2ZWRDaGFuZ2VzXCI6XCJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhpcyBUYWIuIFJVXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlVGFiXCI6XCJDbG9zZSBUYWIgUlVcIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VTdXBlcnRhYlwiOlwiQ2xvc2UgU3VwZXJ0YWIgUlVcIixcImVudGVycHJpc2VTYXZlTW9kYWwuc2F2ZVN1cGVydGFiQ291bnRcIjpcIlNhdmUge3tjb3VudH19IFN1cGVydGFicyBiZWZvcmUgY2xvc2luZz8gUlVcIixcImVudGVycHJpc2VNb2RhbC5kaXNjYXJkU3VwZXJ0YWJXYXJuaW5nXCI6XCJBbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHRoaXMgU3VwZXJ0YWIgd2lsbCBiZSBsb3N0LiBSVVwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgdGhlIFxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYj8gUlVcIixcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYldhcm5pbmdcIjpcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBTdXBlcnRhYj8gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZSBhbmQgaXMgcGVybWFuZW50LiBSVVwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJTYXZlZFwiOlwiU3VwZXJ0YWIgU2F2ZWQgUlVcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlblNhdmVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gc2F2ZWQuUlVcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiRGVsZXRlZFwiOlwiU3VwZXJ0YWIgRGVsZXRlZCBSVVwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuRGVsZXRlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiIGhhcyBiZWVuIGRlbGV0ZWQuIFJVXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVUYWJcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgVGFiIFJVXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVTdXBlcnRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBTdXBlcnRhYiBSVVwiLFwiZW50ZXJwcmlzZUNvbW1hbmRCYXIuc3dpdGNoVG9TdXBlcnRhYlwiOlwiU3dpdGNoIHRvIFN1cGVydGFiIFJVXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5nb1RvXCI6XCJHbyB0byB7e3R5cGV9fSBSVVwiLFwiY29udGV4dE1lbnUucXVpdEVudGVycHJpc2VCcm93c2VyXCI6XCJRdWl0IFJVXCJ9Jyk7Y29uc3QgVG49UG4udCxEbj1hc3luYyBlPT57Y29uc3QgdD1hd2FpdCBRZShlKTtyZXR1cm4gYXdhaXQgdC5kaXNwYXRjaChvdC5HZXRQYWdlcyl9LEJuPWFzeW5jIGU9Pihhd2FpdCBRZShlLmlkZW50aXR5KSkuZGlzcGF0Y2gob3QuVXBkYXRlUGFnZUZvcldpbmRvdyxlKTtsZXQgWm49ITE7ZnVuY3Rpb24gJG4oZSl7cmV0dXJuIGUubWFwKChlPT57Y29uc3QgdD0obj1lLnZpZXdPcHRpb25zLG4ubmFtZXx8PWAke190fSR7SWUoKX1gLG4pO3ZhciBuO3JldHVybnsuLi5lLHZpZXdPcHRpb25zOnsuLi50LHV1aWQ6WS51dWlkfX19KSl9YXN5bmMgZnVuY3Rpb24gTm4oZSl7Zm9yKGNvbnN0IHQgb2YgZSl0LnBhbmVscyYmYXdhaXQgV24odC5wYW5lbHMpfWNvbnN0IEZuPWU9Pm51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJtZXNzYWdlXCJpbiBlJiZcInN0cmluZ1wiPT10eXBlb2YgZS5tZXNzYWdlJiYvRVJSXyhbQS1aXStfKikrLy50ZXN0KGUubWVzc2FnZSk7YXN5bmMgZnVuY3Rpb24gV24oZSl7Y29uc3QgdD1lLm1hcCgoZT0+ZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkuY3JlYXRlVmlldyhlLnZpZXdPcHRpb25zLGZpbi5tZS5pZGVudGl0eSkuY2F0Y2goKGU9PntpZighRm4oZSkpdGhyb3cgZTtjb25zb2xlLmVycm9yKGUpfSkpKSk7cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKHQpfWNvbnN0IFVuPShlLHQpPT4hdC5maW5kKCh0PT50PT09ZSkpLHpuPShlLHQpPT5gJHtlfSAoJHt0fSlgLEduPShlLHQpPT57aWYoVW4oZSx0KSlyZXR1cm4gZTtsZXQgbj0xO2NvbnN0IHI9ZS5yZXBsYWNlKC8gKlxcKFxcZCtcXCkkLyxcIlwiKTtmb3IoOyFVbih6bihyLG4pLHQpOyluKz0xO3JldHVybiB6bihyLG4pfSxLbj1hc3luYygpPT57Y29uc3QgZT1hd2FpdCBlZSgpO3JldHVybihhd2FpdCBQcm9taXNlLmFsbChlLm1hcCgoYXN5bmMgZT0+e3RyeXtyZXR1cm4gRG4oZS5pZGVudGl0eSl9Y2F0Y2godCl7SlNPTi5zdHJpbmdpZnkoZS5pZGVudGl0eSk7Y29uc3Qgbj1hd2FpdCBlLmdldE9wdGlvbnMoKTtyZXR1cm4gbi53b3Jrc3BhY2VQbGF0Zm9ybT8ucGFnZXN8fFtdfX0pKSkpLnJlZHVjZSgoKGUsdCk9PmUuY29uY2F0KHQpKSxbXSl9LHFuPWFzeW5jKCk9Pihhd2FpdCBHZShZKSkuZGlzcGF0Y2goV2UuR2V0U2F2ZWRQYWdlcyx2b2lkIDApLFluPWFzeW5jIGU9Pihhd2FpdCBHZShZKSkuZGlzcGF0Y2goV2UuR2V0U2F2ZWRQYWdlLGUpLEpuPWFzeW5jKGUsdCk9Pntjb25zdCBuPWF3YWl0KGFzeW5jIGU9Pihhd2FpdCBLbigpKS5maW5kKCh0PT50LnBhZ2VJZD09PWUpKSkoZSk7cmV0dXJuIW58fG4udGl0bGU9PT10LnRpdGxlJiZlPT09dC5wYWdlSWR8fGF3YWl0IEJuKHtpZGVudGl0eTpuLnBhcmVudElkZW50aXR5LHBhZ2VJZDplLHBhZ2U6e3BhZ2VJZDp0LnBhZ2VJZCx0aXRsZTp0LnRpdGxlfX0pLG59LFhuPWFzeW5jKHtwYWdlOmV9KT0+e2F3YWl0IEpuKGUucGFnZUlkLGUpLGF3YWl0KGFzeW5jIGU9Pihhd2FpdCBHZShZKSkuZGlzcGF0Y2goV2UuQ3JlYXRlU2F2ZWRQYWdlLGUpKSh7cGFnZTplfSl9LFFuPWFzeW5jIGU9Pnthd2FpdCBZbihlKSYmYXdhaXQoYXN5bmMgZT0+KGF3YWl0IEdlKFkpKS5kaXNwYXRjaChXZS5EZWxldGVTYXZlZFBhZ2UsZSkpKGUpfSxlcj1hc3luYyh7cGFnZUlkOmUscGFnZTp0fSk9Pnthd2FpdCBKbihlLHQpO3JldHVybiBhd2FpdChhc3luYyBlPT4oYXdhaXQgR2UoWSkpLmRpc3BhdGNoKFdlLlVwZGF0ZVNhdmVkUGFnZSxlKSkoe3BhZ2VJZDplLHBhZ2U6dH0pfSx0cj1hc3luYyBlPT5hd2FpdCBZbihlLnBhZ2VJZCk/ZXIoe3BhZ2VJZDplLnBhZ2VJZCxwYWdlOmV9KTpYbih7cGFnZTplfSksbnI9YXN5bmMgZT0+e2F3YWl0KGFzeW5jIGU9Pihhd2FpdCBRZShlLmlkZW50aXR5KSkuZGlzcGF0Y2gob3QuQXR0YWNoUGFnZXNUb1dpbmRvdyxlKSkoZSl9LHJyPWFzeW5jIGU9Pntjb25zdCB0PXsuLi5lLnBhZ2UscGFuZWxzOmUucGFnZS5wYW5lbHMmJiRuKGUucGFnZS5wYW5lbHMpfTt0LnBhbmVscyYmYXdhaXQgV24odC5wYW5lbHMpLGF3YWl0IEJuKHsuLi5lLHBhZ2U6dH0pfSxvcj1hc3luYyBlPT57YXdhaXQoYXN5bmMgZT0+KGF3YWl0IFFlKGUuaWRlbnRpdHkpKS5kaXNwYXRjaChvdC5EZXRhY2hQYWdlc0Zyb21XaW5kb3csZSkpKGUpfSxhcj1hc3luYyBlPT57YXdhaXQoYXN5bmMgZT0+KGF3YWl0IFFlKGUuaWRlbnRpdHkpKS5kaXNwYXRjaChvdC5TZXRBY3RpdmVQYWdlRm9yV2luZG93LGUpKShlKX0saXI9ZT0+RG4oZSksbHI9YXN5bmMoe2lkZW50aXR5OmUscGFnZUlkOnR9KT0+KGF3YWl0IGlyKGUpKS5maW5kKChlPT5lLnBhZ2VJZD09PXQpKSxzcj1hc3luYyBlPT57YXdhaXQoYXN5bmMgZT0+KGF3YWl0IFFlKGUuaWRlbnRpdHkpKS5kaXNwYXRjaChvdC5SZW9yZGVyUGFnZXNGb3JXaW5kb3csZSkpKGUpfSxjcj1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnF1ZXVlPVtdLHRoaXMubG9ja2VkPSExfWxvY2soKXtyZXR1cm4gbmV3IFByb21pc2UoKGU9Pnt0aGlzLmxvY2tlZD90aGlzLnF1ZXVlLnB1c2goZSk6KHRoaXMubG9ja2VkPSEwLGUoKSl9KSl9dW5sb2NrKCl7aWYodGhpcy5xdWV1ZS5sZW5ndGg+MCl7Y29uc3QgZT10aGlzLnF1ZXVlLnNoaWZ0KCk7ZSYmZSgpfWVsc2UgdGhpcy5sb2NrZWQ9ITF9fTthc3luYyBmdW5jdGlvbiB1cihlKXthd2FpdCBjci5sb2NrKCk7dHJ5e2NvbnN0IHQ9VG4oWm4/XCJlbnRlcnByaXNlRGVmYXVsdFBhZ2VUaXRsZVwiOlwiZGVmYXVsdFBhZ2VUaXRsZVwiKSxuPWU/P3QsW3Isb109YXdhaXQgUHJvbWlzZS5hbGwoW3FuKCksS24oKV0pLGE9Wy4uLnIsLi4ub10ubWFwKCgoe3RpdGxlOmV9KT0+ZSkpO3JldHVybiBHbihuLGEpfWZpbmFsbHl7Y3IudW5sb2NrKCl9fWFzeW5jIGZ1bmN0aW9uIGRyKHtwYWdlOmV9KXtyZXR1cm57c2hvdWxkU2hvd01vZGFsOiEoIWV8fCFlLmhhc1Vuc2F2ZWRDaGFuZ2VzKX19YXN5bmMgZnVuY3Rpb24gcHIoe3BhZ2U6ZSxpZGVudGl0eTp0fSl7Y29uc3Qgbj1maW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudFN5bmMoKTtpZigoYXdhaXQgbi5nZXRJbmZvKCkpLmluaXRpYWxPcHRpb25zLmVuYWJsZUJlZm9yZVVubG9hZCl7Y29uc3Qgbj1WdChlLmxheW91dC5jb250ZW50KS5maWx0ZXIoKGU9PmUubmFtZSkpLm1hcCgoZT0+ZmluLlZpZXcud3JhcFN5bmMoe25hbWU6ZS5uYW1lLHV1aWQ6dC51dWlkfSkpKSxyPWF3YWl0IHRoaXMuY2hlY2tWaWV3c0ZvclByZXZlbnRVbmxvYWQobik7aWYoci52aWV3c1ByZXZlbnRpbmdVbmxvYWQubGVuZ3RoPjApe2lmKChhd2FpdCB0aGlzLmdldFVzZXJEZWNpc2lvbkZvckJlZm9yZVVubG9hZCh7Li4ucix3aW5kb3dJZDp0LHdpbmRvd1Nob3VsZENsb3NlOiExLGNsb3NlVHlwZTpcInBhZ2VcIn0pKS52aWV3c1RvQ2xvc2UubGVuZ3RoIT09bi5sZW5ndGgpcmV0dXJuIGUucGFnZUlkLHtzaG91bGRQYWdlQ2xvc2U6ITF9fX1yZXR1cm57c2hvdWxkUGFnZUNsb3NlOiEwfX1hc3luYyBmdW5jdGlvbiBmcih7cGFnZXM6ZSxpZGVudGl0eTp0fSl7Y29uc3Qgbj1hd2FpdCBQcm9taXNlLmFsbChlLm1hcCgoZT0+dGhpcy5zaG91bGRQYWdlQ2xvc2Uoe3BhZ2U6ZSxjbG9zZVR5cGU6XCJ3aW5kb3dcIixpZGVudGl0eTp0fSkpKSkse3BhZ2VzUHJldmVudGluZ0Nsb3NlOnIscGFnZXNOb3RQcmV2ZW50aW5nQ2xvc2U6b309ZS5yZWR1Y2UoKChlLHQscik9PiFuW3JdLnNob3VsZFBhZ2VDbG9zZT97cGFnZXNOb3RQcmV2ZW50aW5nQ2xvc2U6ZS5wYWdlc05vdFByZXZlbnRpbmdDbG9zZSxwYWdlc1ByZXZlbnRpbmdDbG9zZTpbLi4uZS5wYWdlc1ByZXZlbnRpbmdDbG9zZSx0XX06e3BhZ2VzUHJldmVudGluZ0Nsb3NlOmUucGFnZXNQcmV2ZW50aW5nQ2xvc2UscGFnZXNOb3RQcmV2ZW50aW5nQ2xvc2U6Wy4uLmUucGFnZXNOb3RQcmV2ZW50aW5nQ2xvc2UsdF19KSx7cGFnZXNQcmV2ZW50aW5nQ2xvc2U6W10scGFnZXNOb3RQcmV2ZW50aW5nQ2xvc2U6W119KTtyZXR1cm4gdGhpcy5oYW5kbGVQYWdlc0FuZFdpbmRvd0Nsb3NlKHtwYWdlc05vdFByZXZlbnRpbmdDbG9zZTpvLHBhZ2VzUHJldmVudGluZ0Nsb3NlOnIsaWRlbnRpdHk6dH0pfWFzeW5jIGZ1bmN0aW9uIGhyKHtwYWdlc1ByZXZlbnRpbmdDbG9zZTplLHBhZ2VzTm90UHJldmVudGluZ0Nsb3NlOnQsaWRlbnRpdHk6bn0pe3JldHVybntzaG91bGRXaW5kb3dDbG9zZTowPT09ZS5sZW5ndGh9fWFzeW5jIGZ1bmN0aW9uIGdyKHtwYWdlOmV9KXtyZXR1cm4gTmUoZSl9YXN5bmMgZnVuY3Rpb24gdnIoZSl7cmV0dXJue2hhc1Vuc2F2ZWRDaGFuZ2VzOiEwfX1jb25zdCBDcj1hc3luYygpPT57Y29uc3QgZT1PdCgpLHQ9KGF3YWl0IGVlKCkpLm1hcCgodD0+ZS5Ccm93c2VyLndyYXBTeW5jKHQuaWRlbnRpdHkpKSk7YXdhaXQgUHJvbWlzZS5hbGwodC5tYXAoKGFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IGUuZ2V0UGFnZXMoKTthd2FpdCBQcm9taXNlLmFsbCh0Lm1hcCgoYXN5bmMgdD0+e3QudGl0bGUsYXdhaXQgZS51cGRhdGVQYWdlKHtwYWdlSWQ6dC5wYWdlSWQscGFnZTp7aGFzVW5zYXZlZENoYW5nZXM6ITF9fSksdC5wYWdlSWQsdC50aXRsZSxhd2FpdCB0cih7Li4udCxoYXNVbnNhdmVkQ2hhbmdlczohMX0pfSkpKX0pKSl9LG1yPW5ldyBNYXAsd3I9KCk9Pm1yLGJyPWU9Pm1yLmRlbGV0ZShlKTtsZXQgeXI9ITE7Y29uc3QgeHI9KCk9Pnt5cnx8KHlyPSEwLGZpbi5XaW5kb3cud3JhcFN5bmMoSikub25jZShcImNsb3NlZFwiLCgoKT0+e3lyPSExLChhc3luYyhlLHQpPT57YXdhaXQgaGUoZmUoZSkse3NvdXJjZTpcIlN0b3JlXCIsLi4udH0pfSkoZmluLm1lLmlkZW50aXR5LHt0eXBlOlwiTmF2aWdhdGlvblwiLGFjdGlvbjpcIkNsb3NlIFN0b3JlXCIsc2tpcFZhbHVlSGFzaGluZzohMH0pfSkpKX07bGV0IGtyLFNyLE9yO2NvbnN0IE1yPWFzeW5jKCk9Pih2b2lkIDA9PT1PciYmKE9yPSEhKGF3YWl0IHdlKCkpLmRpc2FibGVPcGVuRmluQW5hbHl0aWNzKSxPcik7YXN5bmMgZnVuY3Rpb24gTHIoZSl7ZS5mb3JFYWNoKChlPT57dmFyIHQsbjtcIlBhZ2VcIj09PWUudHlwZT9cIk9wZW4gUGFnZVwiPT09ZS5hY3Rpb24/KHQ9ZS5kYXRhLnV1aWQsbj1lLG1yLnNldCh0LG4pKTpcIkNsb3NlIFBhZ2VcIj09PWUuYWN0aW9uJiZicihlLmRhdGEudXVpZCk6XCJTdG9yZVwiPT09ZS5zb3VyY2UmJlwiQ2xvc2VcIiE9PWUuYWN0aW9uJiZ4cigpfSkpLGF3YWl0KGFzeW5jIGU9Pntrcj8uc2VuZFRvT3BlbkZpbiYmKGF3YWl0IE1yKCl8fGUuZm9yRWFjaCgoYXN5bmMgZT0+e2NvbnN0IHQ9a2Uoe30sZSk7dC5lbnRpdHlJZCYmKHQuZW50aXR5SWQudXVpZD1hd2FpdCB5ZSh0LmVudGl0eUlkLnV1aWQpLHQuZW50aXR5SWQubmFtZT1hd2FpdCB5ZSh0LmVudGl0eUlkLm5hbWUpKSwhZS5za2lwVmFsdWVIYXNoaW5nJiZcInZhbHVlXCJpbiB0JiYodC52YWx1ZT1hd2FpdCB5ZSh0LnZhbHVlKSksU3IodCl9KSkpfSkoZSk7Y29uc3QgdD1lLm1hcCgoKHtza2lwVmFsdWVIYXNoaW5nOmUsLi4udH0pPT50KSk7dGhpcy5oYW5kbGVBbmFseXRpY3ModCl9Y29uc3QgX3I9YXN5bmMgZT0+e2tyPWU7a3I/LnNlbmRUb09wZW5GaW4mJiFhd2FpdCBNcigpJiYoKCk9Pntjb25zdCBlPUIsdD1lK18uQW5hbHl0aWNzLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIklGUkFNRVwiKTtuLnNldEF0dHJpYnV0ZShcInNyY1wiLHQpLG4uc2V0QXR0cmlidXRlKFwic3R5bGVcIixcIndpZHRoOiAwcHggIWltcG9ydGFudFwiKSxuLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsXCJoZWlnaHQ6IDBweCAhaW1wb3J0YW50XCIpLG4uc2V0QXR0cmlidXRlKFwic3R5bGVcIixcImRpc3BsYXk6IG5vbmUgIWltcG9ydGFudFwiKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG4pLFNyPWFzeW5jIHQ9PntuLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UodCxlKX19KSgpO2NvbnN0IHQ9ZmluLkFwcGxpY2F0aW9uLmdldEN1cnJlbnRTeW5jKCk7dC5hZGRMaXN0ZW5lcihcInZpZXctY3JlYXRlZFwiLChhc3luYyBlPT57dmFyIHQ7Z2Uoe3R5cGU6XCJWaWV3XCIsYWN0aW9uOlwiT3BlbiBWaWV3XCIsdmFsdWU6ZS52aWV3SWRlbnRpdHkubmFtZSxkYXRhOnt1dWlkOmUudmlld0lkZW50aXR5LnV1aWQsdXJsOmF3YWl0KHQ9ZS52aWV3SWRlbnRpdHksZmluLlZpZXcud3JhcFN5bmModCkuZ2V0SW5mbygpLnRoZW4oKGU9PmUudXJsKSkpfX0pfSkpLHQuYWRkTGlzdGVuZXIoXCJ2aWV3LWRlc3Ryb3llZFwiLChhc3luYyBlPT57Z2Uoe3R5cGU6XCJWaWV3XCIsYWN0aW9uOlwiQ2xvc2UgVmlld1wiLHZhbHVlOmUudmlld0lkZW50aXR5Lm5hbWUsZGF0YTp7dXVpZDplLnZpZXdJZGVudGl0eS51dWlkfX0pfSkpLHQuYWRkTGlzdGVuZXIoXCJ3aW5kb3ctY2xvc2VkXCIsKGU9PntlLm5hbWUuc3RhcnRzV2l0aChLLkJyb3dzZXJNZW51KXx8KGdlKHt0eXBlOlwiV2luZG93XCIsYWN0aW9uOlwiQ2xvc2UgV2luZG93XCIsdmFsdWU6ZS5uYW1lLGRhdGE6e3V1aWQ6ZS51dWlkfX0pLChhc3luYygpPT57Y29uc3QgZT13cigpLHQ9YXdhaXQgS24oKTtpZih0Lmxlbmd0aD09PWUuc2l6ZSlyZXR1cm47Y29uc3Qgbj10LnJlZHVjZSgoKGUsdCk9PmUuc2V0KHQucGFnZUlkLDEpKSxuZXcgTWFwKTtmb3IoY29uc3RbdCxyXW9mIGUpbi5oYXModCl8fChyLmFjdGlvbj1cIkNsb3NlIFBhZ2VcIixnZShyKSxicih0KSl9KSgpKX0pKX07YXN5bmMgZnVuY3Rpb24gUHIoKXtjb25zdCBlPShhd2FpdCB3ZSgpKS5icm93c2VyQmFzZVVybDtpZihlKXRyeXtjb25zdCB0PW5ldyBVUkwoZSk7aWYodC5wYXRobmFtZS5lbmRzV2l0aChcIi9cIikpdC5wYXRobmFtZT10LnBhdGhuYW1lLnNsaWNlKDAsLTEpO2Vsc2V7aWYoXCIvd29ya3NwYWNlXCI9PT10LnBhdGhuYW1lKXJldHVybiB0LnBhdGhuYW1lKz1gLyR7Tn1gLHQudG9TdHJpbmcoKTtjb25zb2xlLndhcm4oYEBvcGVuZmluL3dvcmtzcGFjZS1wbGF0Zm9ybTogYnJvd3Nlck92ZXJyaWRlQmFzZVVybCBtdXN0IGJlIGEgdmFsaWQgdXJsLCB3aXRoIHBhdGg6IC93b3Jrc3BhY2UuIEV4cGVjdGVkIDxwcm90b2NvbD46Ly88b3B0aW9uYWwgc3ViZG9tYWluPi48ZG9tYWluPi93b3Jrc3BhY2UgYnV0IGdvdCAke2V9YCl9fWNhdGNoKHQpe2NvbnNvbGUud2FybihgQG9wZW5maW4vd29ya3NwYWNlLXBsYXRmb3JtOiBicm93c2VyT3ZlcnJpZGVCYXNlVXJsIG11c3QgYmUgYSB2YWxpZCB1cmwuIEV4cGVjdGVkIDxwcm90b2NvbD46Ly88b3B0aW9uYWwgc3ViZG9tYWluPi48ZG9tYWluPi93b3Jrc3BhY2UgYnV0IGdvdCAke2V9YCl9cmV0dXJuIFp9dmFyIEVyOyFmdW5jdGlvbihlKXtlLkVSUk9SPVwiZXJyb3JcIixlLlNVQ0NFU1M9XCJzdWNjZXNzXCIsZS5JTkZPPVwiaW5mb1wifShFcnx8KEVyPXt9KSk7Y29uc3QganI9KGUsdCk9Pntjb25zdCBuPWU7cmV0dXJuIG4ud29ya3NwYWNlUGxhdGZvcm18fChuLndvcmtzcGFjZVBsYXRmb3JtPXt9KSxuLndvcmtzcGFjZVBsYXRmb3JtLl9pbnRlcm5hbERlZmVyU2hvd09wdGlvbnM9e3NldEFzRm9yZWdyb3VuZDohIXQsZGVmZXJTaG93RW5hYmxlZDohMCxhdXRvU2hvdzpuLndvcmtzcGFjZVBsYXRmb3JtPy5faW50ZXJuYWxBdXRvU2hvd3x8bi53b3Jrc3BhY2VQbGF0Zm9ybT8uX2ludGVybmFsRGVmZXJTaG93T3B0aW9ucz8uYXV0b1Nob3d8fHZvaWQgMD09PW4uYXV0b1Nob3d8fG4uYXV0b1Nob3d9LG4uYXV0b1Nob3c9ITEsbn07Y29uc3QgUnI9anIoe2Fsd2F5c09uVG9wOiEwLGF1dG9TaG93OiExLGZyYW1lOiExLHJlc2l6YWJsZTohMSxzaG93VGFza2Jhckljb246ITF9KTt2YXIgSXI7IWZ1bmN0aW9uKGUpe2UuTG9ja2VkPVwiTG9ja0Nsb3NlZEljb25cIixlLlVubG9ja2VkPVwiTG9ja09wZW4xSWNvblwifShJcnx8KElyPXt9KSk7Y29uc3QgVnI9XCJicm93c2VyXCIsSHI9ZnVuY3Rpb24oZT1Scil7Y29uc3QgdD1uZXcgTWFwO3JldHVybiBhc3luYyhuLHIsbyxhLGkpPT57aWYodC5oYXMobikpe2NvbnN0e2N1cnJlbnRVcmw6ZSxjdXJyZW50TmFtZTpvfT10LmdldChuKTtpZihlPT09cilyZXR1cm47Y29uc3QgYT1maW4uV2luZG93LndyYXBTeW5jKHt1dWlkOmZpbi5tZS51dWlkLG5hbWU6b30pO2F3YWl0IGEuY2xvc2UoKX1jb25zdCBsPWAke0suSG9tZUludGVybmFsfS0ke0RhdGUubm93KCl9JHtNYXRoLnJhbmRvbSgpfWA7dC5zZXQobix7Y3VycmVudFVybDpyLGN1cnJlbnROYW1lOmx9KTtjb25zdCBzPWBOZXcgJHthfSBpbmRpY2F0b3I6ICR7b30gJHtpfWAsYz1hd2FpdCBmaW4uUGxhdGZvcm0uZ2V0Q3VycmVudFN5bmMoKS5jcmVhdGVXaW5kb3coey4uLmUsbmFtZTpsLHVybDpyfSk7KChlLHQpPT57Y29uc3Qgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO24uc2V0QXR0cmlidXRlKFwicm9sZVwiLFwiYWxlcnRcIiksbi5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxpdmVcIix0fHxcInBvbGl0ZVwiKSwoZT0+e2Uuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLGUuc3R5bGUud2lkdGg9XCIxcHhcIixlLnN0eWxlLmhlaWdodD1cIjFweFwiLGUuc3R5bGUucGFkZGluZz1cIjBcIixlLnN0eWxlLm1hcmdpbj1cIi0xcHhcIixlLnN0eWxlLm92ZXJmbG93PVwiaGlkZGVuXCIsZS5zdHlsZS53aGl0ZVNwYWNlPVwibm93cmFwXCIsZS5zdHlsZS5ib3JkZXI9XCIwXCJ9KShuKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG4pLHNldFRpbWVvdXQoKCgpPT57bi5pbm5lckhUTUw9ZX0pLDMwMCksc2V0VGltZW91dCgoKCk9Pntkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG4pfSksMWUzKX0pKHMpLGMub25jZShcImNsb3NlZFwiLCgoKT0+e3QuZGVsZXRlKG4pfSkpfX0oKTthc3luYyBmdW5jdGlvbiBBcihlLHQsbixyLG8sYSl7aWYobiYmZmluLm1lLm5hbWUhPT1uKXtjb25zdCBpPXt0eXBlOmUsbWVzc2FnZTp0LHBhcmVudEJyb3dzZXJOYW1lOm4sc2Vjb25kYXJ5TWVzc2FnZTpyLGljb246byxpc0VudGVycHJpc2U6YX07cmV0dXJuKGF3YWl0IFFlKHt1dWlkOmZpbi5tZS51dWlkLG5hbWU6bn0pKS5kaXNwYXRjaChvdC5TaG93QnJvd3NlckluZGljYXRvcixpKX1jb25zdCBpPW5ldyBVUkxTZWFyY2hQYXJhbXM7aWYoaS5hcHBlbmQoXCJ0eXBlXCIsZSksaS5hcHBlbmQoXCJtZXNzYWdlXCIsdCksaS5hcHBlbmQoXCJwYXJlbnROYW1lXCIsbnx8XCJcIiksaS5hcHBlbmQoXCJzZWNvbmRhcnlNZXNzYWdlXCIscnx8XCJcIiksaS5hcHBlbmQoXCJpY29uXCIsb3x8XCJcIiksaS5hcHBlbmQoXCJpc0VudGVycHJpc2VcIixgJHthfWB8fFwiXCIpLG4pe2NvbnN0IGU9bj97dXVpZDpWLG5hbWU6bn06dm9pZCAwLHQ9YXdhaXQgcShlKSxyPW9lKGF3YWl0IHQuZ2V0Qm91bmRzKCkpO2kuYXBwZW5kKFwicGFyZW50Qm91bmRzXCIscil9Y29uc3QgbD1gJHthd2FpdCBQcigpK18uQnJvd3NlckluZGljYXRvcn0jJHtpLnRvU3RyaW5nKCl9YDtyZXR1cm4gSHIoVnIrbixsLHQsZSxyKX1hc3luYyBmdW5jdGlvbiBUcihlLHQsbixyKXtjb25zdCBvPWF3YWl0IGxlKHQpLGE9dC5uYW1lO3JldHVybiBBcihFci5TVUNDRVNTLGUsYSxuLHIsbyl9Y29uc3QgRHI9YXN5bmMoZT1ZKT0+e2NvbnN0e3dvcmtzcGFjZVBsYXRmb3JtOnR9PWF3YWl0IHEoZSkuZ2V0T3B0aW9ucygpLG49dD8ubmV3UGFnZVVybCxyPXQ/Lm5ld1RhYlVybDtyZXR1cm57bmV3UGFnZVVybDpuLG5ld1RhYlVybDpyfX0sQnI9YXN5bmMoZSx0PVkpPT57Y29uc3R7bmV3UGFnZVVybDpufT1hd2FpdCBEcih0KTtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJUcnlpbmcgdG8gY3JlYXRlIGEgbmV3IHBhZ2Ugd2l0aG91dCBhIG5ld1BhZ2VVcmwgc2V0XCIpO3JldHVybihhc3luYyhlLHQsbj1ZKT0+e2xldCByO2F3YWl0IFEobikmJihyPShhd2FpdCBxKG4pLmdldE9wdGlvbnMoKSkubGF5b3V0fHx7c2V0dGluZ3M6e319KTtyZXR1cm57Li4ucixjb250ZW50Olt7dHlwZTpcInN0YWNrXCIsY29udGVudDpbe3R5cGU6XCJjb21wb25lbnRcIixjb21wb25lbnROYW1lOlwidmlld1wiLGNvbXBvbmVudFN0YXRlOnt0aXRsZTplLHVybDp0fX1dfV19fSkoZSxuLHQpfSxacj1hc3luYyhlPVkpPT57Y29uc3QgdD1hd2FpdCBsZShlKSxuPWF3YWl0IE90KCkuQnJvd3Nlci5nZXRVbmlxdWVQYWdlVGl0bGUoKSxyPWF3YWl0IEJyKG4sZSk7dCYmKHIuc2V0dGluZ3MuaGFzSGVhZGVycz0hMSxyLnNldHRpbmdzLnJlb3JkZXJFbmFibGVkPSEwLHIuZGltZW5zaW9ucy5oZWFkZXJIZWlnaHQ9MCk7Y29uc3Qgbz1hd2FpdCAkZShuLHIpO3JldHVybiB0JiYoby5oYXNVbnNhdmVkQ2hhbmdlcz0hMSksb307dmFyICRyOyFmdW5jdGlvbihlKXtlLkhvbWU9XCIvaG9tZVwiLGUuQnJvd3Nlcj1cIi9icm93c2VyXCIsZS5Qcm92aWRlcj1cIi9wcm92aWRlclwiLGUuU3RvcmVmcm9udD1cIi9zdG9yZWZyb250XCIsZS5Eb2NrPVwiL2RvY2tcIn0oJHJ8fCgkcj17fSkpO2NvbnN0IE5yPShlLHQ9MCk9PntsZXQgbixyLG89ITE7Y29uc3QgYT1hc3luYyByPT57Y29uc3QgaT1hd2FpdCBlKC4uLnIpO2lmKG8pe2F3YWl0IG5ldyBQcm9taXNlKChlPT5zZXRUaW1lb3V0KGUsdCkpKTtjb25zdCBlPW47cmV0dXJuIG49dm9pZCAwLG89ITEsYShlKX1yZXR1cm4gaX07cmV0dXJuKC4uLmUpPT4ocj8obz0hMCxuPWUpOnI9YShlKS5jYXRjaCgoZT0+e3Rocm93IGNvbnNvbGUuZXJyb3IoXCJtYWtlRGVib3VuY2VkRnVuY1wiLGUpLGV9KSkuZmluYWxseSgoKCk9PntyPXZvaWQgMH0pKSxyKX07ZnVuY3Rpb24gRnIoZSx0KXtyZXR1cm4gYXN5bmMobiwuLi5yKT0+e2UuaGFzKG4pJiZlLmdldChuKS5mb3JFYWNoKChlPT5lKC4uLnIpKSksdCYmYXdhaXQgdCh7ZXZlbnQ6bixwYXlsb2FkOnJ9KX19ZnVuY3Rpb24gV3IoZSx0KXtyZXR1cm4gdCYmdCgodD0+e2NvbnN0e2V2ZW50Om4scGF5bG9hZDpyfT10O2UuaGFzKG4pJiZlLmdldChuKS5mb3JFYWNoKChlPT5lKC4uLnIpKSl9KSksKHQsbik9PntlLmhhcyh0KXx8ZS5zZXQodCxuZXcgU2V0KSxlLmdldCh0KS5hZGQobil9fWZ1bmN0aW9uIFVyKGUpe3JldHVybih0LG4pPT57ZS5oYXModCl8fGUuc2V0KHQsbmV3IFNldCk7Y29uc3Qgcj1lLmdldCh0KSxvPSguLi5lKT0+e24oLi4uZSksci5kZWxldGUobyl9O3IuYWRkKG8pfX1mdW5jdGlvbiB6cihlKXtyZXR1cm4odCxuKT0+e2UuaGFzKHQpJiZlLmdldCh0KS5kZWxldGUobil9fWNvbnN0IEdyPWU9PmUucmVwbGFjZSgvW15cXGQsXS9nLFwiXCIpLnNwbGl0KFwiLFwiKSxLcj1lPT57aWYoZS5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvbG9yIG9iamVjdCwgY2Fubm90IGNvbnZlcnQgdG8gSFNMLlwiKTtjb25zdCB0PWVbMF0vMjU1LG49ZVsxXS8yNTUscj1lWzJdLzI1NSxvPU1hdGgubWluKHQsbixyKSxhPU1hdGgubWF4KHQsbixyKSxpPWEtbztsZXQgbD0wLHM9MCxjPTA7cmV0dXJuIGw9MD09PWk/MDphPT09dD8obi1yKS9pJTY6YT09PW4/KHItdCkvaSsyOih0LW4pL2krNCxsPU1hdGgucm91bmQoNjAqbCksbDwwJiYobCs9MzYwKSxjPShhK28pLzIscz0wPT1pPzA6aS8oMS1NYXRoLmFicygyKmMtMSkpLHM9KygxMDAqcykudG9GaXhlZCgxKSxjPSsoMTAwKmMpLnRvRml4ZWQoMSkse2hzbDpgaHNsKCR7bH0sICR7c30lLCAke2N9JSlgLGhzbGE6YGhzbCgke2x9LCAke3N9JSwgJHtjfSUsIDEpYCxodWU6bCxsaWdodG5lc3M6YyxzYXR1cmF0aW9uOnN9fSxxcj1lPT57aWYoIWUpdGhyb3cgbmV3IEVycm9yKFwiQ29sb3IgaXMgbm90IGRlZmluZWRcIik7Y29uc3QgdD1lLnRvTG93ZXJDYXNlKCk7bGV0IG47aWYodC5pbmNsdWRlcyhcInJnYlwiKSl7Y29uc3QgZT1Hcih0KTtlLmxlbmd0aD4zJiZlLnBvcCgpLG49S3IoZSkuaHVlfWlmKHQuaW5jbHVkZXMoXCIjXCIpKXtjb25zdCBlPShlPT57aWYoIWUuaW5jbHVkZXMoXCIjXCIpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGV4IHZhbHVlLCBjYW5ub3QgY29udmVydCB0byBSR0IuIEhleCB2YWx1ZSBiZWdpbnMgd2l0aCBhIGhhc2h0YWcuXCIpO2xldCB0PTAsbj0wLHI9MDtpZig0PT09ZS5sZW5ndGgpdD1gMHgke2VbMV19JHtlWzFdfWAsbj1gMHgke2VbMl19JHtlWzJdfWAscj1gMHgke2VbM119JHtlWzNdfWA7ZWxzZXtpZig3IT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBoZXggc3RyaW5nIGxlbmd0aCwgY2Fubm90IGNvbnZlcnQgdG8gUkdCLlwiKTt0PWAweCR7ZVsxXX0ke2VbMl19YCxuPWAweCR7ZVszXX0ke2VbNF19YCxyPWAweCR7ZVs1XX0ke2VbNl19YH1yZXR1cm5bK3QsK24sK3JdfSkodCk7bj1LcihlKS5odWV9aWYodC5pbmNsdWRlcyhcImhzbFwiKSl7bj1Hcih0KVswXX1jb25zdCByPW4/LnRvU3RyaW5nKCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBIdWUgd2FzIHVuYWJsZSB0byBiZSBleHRyYWN0ZWQgZnJvbSBcIiR7dH1cIiwgY2hlY2sgY29sb3IgZm9ybWF0LiBBY2NlcHRlZCBmb3JtYXRzIGFyZTogcmdiKCksIHJnYmEoKSwgaGV4LCBoc2woKSwgYW5kIGhzbGEoKWApO3JldHVybiByfSxZcj0oZSx0PSExKT0+e2NvbnN0IG49cXIoZSk7cmV0dXJuIHQ/e2JhY2tncm91bmQxOmBoc2xhKCR7bn0sIDAlLCAxMDAlLCAxKWAsYmFja2dyb3VuZDI6YGhzbGEoJHtufSwgNjclLCA5OSUsIDEpYCxiYWNrZ3JvdW5kMzpgaHNsYSgke259LCAyNiUsIDk2JSwgMSlgLGJhY2tncm91bmQ0OmBoc2xhKCR7bn0sIDE1JSwgOTQlLCAxKWAsYmFja2dyb3VuZDU6YGhzbGEoJHtufSwgMTAlLCA4OCUsIDEpYCxiYWNrZ3JvdW5kNjpgaHNsYSgke259LCA4MCUsIDgwJSwgMSlgfTp7YmFja2dyb3VuZDE6YGhzbGEoJHtufSwgOCUsIDclLCAxKWAsYmFja2dyb3VuZDI6YGhzbGEoJHtufSwgOCUsIDEzJSwgMSlgLGJhY2tncm91bmQzOmBoc2xhKCR7bn0sIDklLCAxNSUsIDEpYCxiYWNrZ3JvdW5kNDpgaHNsYSgke259LCA2JSwgMjMlLCAxKWAsYmFja2dyb3VuZDU6YGhzbGEoJHtufSwgMjElLCAyOCUsIDEpYCxiYWNrZ3JvdW5kNjpgaHNsYSgke259LCA1JSwgNTElLCAxKWB9fSxKcj0oZSx0KT0+e2NvbnN0IG49e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKHI9PntuW3JdPXRbcl0/dFtyXTplW3JdfSkpLG59LFhyPXtbTS5QYWxldHRlLmJyYW5kUHJpbWFyeV06XCIjMEE3NkQzXCIsW00uUGFsZXR0ZS5zdGF0dXNTdWNjZXNzXTpNLkNvbG9yLmZ1bmN0aW9uYWwxLFtNLlBhbGV0dGUuc3RhdHVzV2FybmluZ106TS5Db2xvci5mdW5jdGlvbmFsMTAsW00uUGFsZXR0ZS5zdGF0dXNDcml0aWNhbF06TS5Db2xvci5mdW5jdGlvbmFsNyxbTS5QYWxldHRlLnN0YXR1c0FjdGl2ZV06TS5Db2xvci5mdW5jdGlvbmFsMyxbTS5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kMV06XCIjMEE3NkQzXCIsW00uUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDJdOlwiIzAwMDAwMFwiLFtNLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQzXTpcIiMwMDAwMDBcIixbTS5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kNF06XCIjMDAwMDAwXCIsW00uUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDVdOlwiIzAwMDAwMFwifSxRcj17Li4uWHIsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kMV06TS5Db2xvci53aGl0ZSxbTS5QYWxldHRlLmJhY2tncm91bmQyXTpNLkNvbG9yLmxpZ2h0R3JheTEsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kM106TS5Db2xvci5saWdodEdyYXkyLFtNLlBhbGV0dGUuYmFja2dyb3VuZDRdOk0uQ29sb3IubGlnaHRHcmF5MyxbTS5QYWxldHRlLmJhY2tncm91bmQ1XTpNLkNvbG9yLmxpZ2h0R3JheTQsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kNl06TS5Db2xvci5saWdodEdyYXk1LFtNLlBhbGV0dGUuYnJhbmRTZWNvbmRhcnldOk0uQ29sb3IubGlnaHRHcmF5NCxbTS5QYWxldHRlLmlucHV0QmFja2dyb3VuZF06TS5Db2xvci5saWdodEdyYXkzLFtNLlBhbGV0dGUuaW5wdXRDb2xvcl06TS5Db2xvci5kYXJrR3JheTUsW00uUGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyXTpNLkNvbG9yLmRhcmtHcmF5MixbTS5QYWxldHRlLmlucHV0RGlzYWJsZWRdOk0uQ29sb3IubmV1dHJhbEdyYXksW00uUGFsZXR0ZS5pbnB1dEZvY3VzZWRdOk0uQ29sb3IubGlnaHRHcmF5NSxbTS5QYWxldHRlLmlucHV0Qm9yZGVyXTpNLkNvbG9yLm5ldXRyYWxHcmF5LFtNLlBhbGV0dGUudGV4dERlZmF1bHRdOk0uQ29sb3IuZGFya0dyYXk1LFtNLlBhbGV0dGUudGV4dEhlbHBdOk0uQ29sb3IuZGFya0dyYXkzLFtNLlBhbGV0dGUudGV4dEluYWN0aXZlXTpNLkNvbG9yLm5ldXRyYWxHcmF5fSxlbz17Li4uWHIsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kMV06TS5Db2xvci5kYXJrR3JheTYsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kMl06TS5Db2xvci5kYXJrR3JheTUsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kM106TS5Db2xvci5kYXJrR3JheTQsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kNF06TS5Db2xvci5kYXJrR3JheTMsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kNV06TS5Db2xvci5kYXJrR3JheTIsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kNl06TS5Db2xvci5kYXJrR3JheTEsW00uUGFsZXR0ZS5icmFuZFNlY29uZGFyeV06TS5Db2xvci5kYXJrR3JheTIsW00uUGFsZXR0ZS5pbnB1dEJhY2tncm91bmRdOk0uQ29sb3IuZGFya0dyYXkxLFtNLlBhbGV0dGUuaW5wdXRDb2xvcl06TS5Db2xvci53aGl0ZSxbTS5QYWxldHRlLmlucHV0UGxhY2Vob2xkZXJdOk0uQ29sb3IubGlnaHRHcmF5NSxbTS5QYWxldHRlLmlucHV0RGlzYWJsZWRdOk0uQ29sb3IubmV1dHJhbEdyYXksW00uUGFsZXR0ZS5pbnB1dEZvY3VzZWRdOk0uQ29sb3IubGlnaHRHcmF5NSxbTS5QYWxldHRlLmlucHV0Qm9yZGVyXTpNLkNvbG9yLm5ldXRyYWxHcmF5LFtNLlBhbGV0dGUudGV4dERlZmF1bHRdOk0uQ29sb3Iud2hpdGUsW00uUGFsZXR0ZS50ZXh0SGVscF06TS5Db2xvci5saWdodEdyYXk1LFtNLlBhbGV0dGUudGV4dEluYWN0aXZlXTpNLkNvbG9yLm5ldXRyYWxHcmF5fSx0bz1be2xhYmVsOlwiT3BlbkZpbiBEZWZhdWx0IExpZ2h0IGFuZCBEYXJrIFRoZW1lXCIscGFsZXR0ZXM6e2xpZ2h0OnsuLi5RcixicmFuZFByaW1hcnk6XCIjMEE3NkQzXCIsYnJhbmRTZWNvbmRhcnk6TS5Db2xvci5saWdodEdyYXk0LGJhY2tncm91bmRQcmltYXJ5Ok0uQ29sb3IuZGFya0dyYXk1fSxkYXJrOnsuLi5lbyxicmFuZFByaW1hcnk6XCIjMEE3NkQzXCIsYnJhbmRTZWNvbmRhcnk6TS5Db2xvci5kYXJrR3JheTIsYmFja2dyb3VuZFByaW1hcnk6TS5Db2xvci5kYXJrR3JheTV9fX1dLG5vPWU9Pntjb25zdHtiYWNrZ3JvdW5kOnQsZm9yZWdyb3VuZDpufT1lO3JldHVybntiYWNrZ3JvdW5kOnQsZm9yZWdyb3VuZDpuPz9cIiNGRkZGRkZcIn19LHJvPWU9Pntjb25zdHtsaWdodDp0LGRhcms6bn09XCJwYWxldHRlc1wiaW4gZT9lLnBhbGV0dGVzOntsaWdodDplLnBhbGV0dGUsZGFyazplLnBhbGV0dGV9LHI9SnIoZW8sbiksbz1KcihRcix0KSxhPSgoZSx0KT0+e2NvbnN0IG49ey4uLmV9LHI9ey4uLnR9O2xldCBvPXQuYmFja2dyb3VuZFByaW1hcnk/WXIodC5iYWNrZ3JvdW5kUHJpbWFyeSwhMCk6e30sYT1lLmJhY2tncm91bmRQcmltYXJ5P1lyKGUuYmFja2dyb3VuZFByaW1hcnkpOnt9O3JldHVybiBvPXsuLi5vLC4uLnJ9LGE9ey4uLmEsLi4ubn0se2xpZ2h0OnsuLi50LC4uLm99LGRhcms6ey4uLmUsLi4uYX19fSkobix0KSxpPSgwLE0uY3JlYXRlVGhlbWUpKHsuLi5yLC4uLmE/LmRhcmt9KSxsPSgwLE0uY3JlYXRlVGhlbWUpKHsuLi5vLC4uLmE/LmxpZ2h0fSkse2xpZ2h0OnMsZGFyazpjfT0oZT0+e2NvbnN0IHQ9T2JqZWN0LmtleXMoZS5ub3RpZmljYXRpb25JbmRpY2F0b3JDb2xvcnM/P3t9KTtpZih0Py5sZW5ndGgpe2NvbnN0IG49e30scj17fTtyZXR1cm4gdC5mb3JFYWNoKCh0PT57Y29uc3Qgbz1lLm5vdGlmaWNhdGlvbkluZGljYXRvckNvbG9yc1t0XTtcImJhY2tncm91bmRcImluIG8/KG5bdF09bm8obyksclt0XT1ubyhvKSk6KG5bdF09bm8oby5kYXJrPz9vLmxpZ2h0KSxyW3RdPW5vKG8ubGlnaHQ/P28uZGFyaykpfSkpLHtsaWdodDpyLGRhcms6bn19cmV0dXJue2xpZ2h0Om51bGwsZGFyazpudWxsfX0pKGUpO3JldHVybiBpLm5vdGlmaWNhdGlvbkluZGljYXRvckNvbG9ycz1jLGwubm90aWZpY2F0aW9uSW5kaWNhdG9yQ29sb3JzPXMse2Rhcms6aSxsaWdodDpsfX0sb289YXN5bmMgZT0+e2NvbnN0e3RoZW1lczp0LHNlbGVjdGVkU2NoZW1lOm59PWF3YWl0KGFzeW5jIGU9Pntjb25zdCB0PWZpbj8uX19pbnRlcm5hbF8/LmluaXRpYWxPcHRpb25zPy53b3Jrc3BhY2VQbGF0Zm9ybT8uX3RoZW1lRGF0YTtpZighdHx8ZS51dWlkIT09WS51dWlkKXJldHVybnt0aGVtZXM6YXdhaXQgU3QoZSkuVGhlbWUuZ2V0VGhlbWVzKCksc2VsZWN0ZWRTY2hlbWU6YXdhaXQgU3QoZSkuVGhlbWUuZ2V0U2VsZWN0ZWRTY2hlbWUoKX07cmV0dXJuIHR9KShlKTt2YXIgcixvO3JldHVybihyPXQ/Lmxlbmd0aD90OnRvLG89bixyLm1hcCgoZT0+e2NvbnN0IHQ9XCJwYWxldHRlc1wiaW4gZT9lLmRlZmF1bHQ6TS5Db2xvclNjaGVtZS5kYXJrLHtsaWdodDpuLGRhcms6cn09cm8oZSk7cmV0dXJue2xhYmVsOmUubGFiZWwsbG9nb1VybDplLmxvZ29VcmwsdGhlbWU6e2Rhcms6cixsaWdodDpufSxkZWZhdWx0U2NoZW1lOm8/P3R9fSkpKVswXX0sYW89YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgR2UoZXx8ZmluLm1lLmlkZW50aXR5KSxuPWF3YWl0IHQuZGlzcGF0Y2goV2UuR2V0U2VsZWN0ZWRTY2hlbWUsdm9pZCAwKTtyZXR1cm4gbj09PWcuU3lzdGVtP3dpbmRvdy5tYXRjaE1lZGlhKFwiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKVwiKS5tYXRjaGVzP1wiZGFya1wiOlwibGlnaHRcIjpufSxpbz17bmFtZTpLLkJyb3dzZXJNZW51LGFsd2F5c09uVG9wOiEwLGF1dG9TaG93OiEwLGZyYW1lOiExLHJlc2l6YWJsZTohMSxiYWNrZ3JvdW5kQ29sb3I6XCIjMmYzMTM2XCIsc21hbGxXaW5kb3c6ITAsc2hvd1Rhc2tiYXJJY29uOiExLGJhY2tncm91bmRUaHJvdHRsaW5nOiExLHNhdmVXaW5kb3dTdGF0ZTohMX07ZnVuY3Rpb24gbG8oZSl7Y29uc3QgdD17Li4uaW8sLi4uZX07cmV0dXJuIHQudXJsPWZ1bmN0aW9uKGUpe2lmKCFqKXRocm93IG5ldyBFcnJvcihcInJlc29sdmVBYnNvbHV0ZVBhdGggY2FuIG9ubHkgYmUgdXNlZCBpbiBhIHdpbmRvd1wiKTtyZXR1cm4gZS5zdGFydHNXaXRoKFwiaHR0cFwiKT9lOmAke3dpbmRvdy5vcmlnaW59JHtlfWB9KHQudXJsPz9cIlwiKSx0fWNvbnN0IHNvPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IE1hcDtyZXR1cm57ZW1pdDpGcih0LCh0PT5FJiZmaW4uSW50ZXJBcHBsaWNhdGlvbkJ1cy5wdWJsaXNoKGUsdCkpKSxhZGRMaXN0ZW5lcjpXcih0LCh0PT5FJiZmaW4uSW50ZXJBcHBsaWNhdGlvbkJ1cy5zdWJzY3JpYmUoe3V1aWQ6ZmluLm1lLnV1aWR9LGUsdCkpKSxyZW1vdmVMaXN0ZW5lcjp6cih0KSxvbmNlOlVyKHQpfX0oXCJ3aW5kb3cubWVudVwiKSxjbz0oZSx0KT0+ZmluLldpbmRvdy53cmFwU3luYyhlKS51cGRhdGVPcHRpb25zKHtvcGFjaXR5OnR9KSx1bz1lPT5zby5lbWl0KFwicmVzcG9uc2VcIixlKSxwbz1OcigoKCk9PkcoKS5nZXRDaGlsZFdpbmRvd3MoKSksNTAwKTtjb25zdCBmbz1uZXcgTWFwO2FzeW5jIGZ1bmN0aW9uIGhvKGUsdCl7Y29uc3Qgbj1sbyhlKSxyPXt0b3A6bi50b3AsbGVmdDpuLmxlZnQsd2lkdGg6bi5kZWZhdWx0V2lkdGh8fG4ud2lkdGgsaGVpZ2h0Om4uZGVmYXVsdEhlaWdodHx8bi5oZWlnaHR9O3JldHVybiB0LnNldChcInBhcmVudE5hbWVcIixmaW4uV2luZG93LmdldEN1cnJlbnRTeW5jKCkuaWRlbnRpdHkubmFtZSkse25hbWU6bi5uYW1lLGJvdW5kczpyLHJvdXRlOmAke24udXJsfSMke3QudG9TdHJpbmcoKX1gfX1hc3luYyBmdW5jdGlvbiBnbyh7b3B0aW9uczplLHBhcmFtZXRlcnM6dH0pe2NvbnN0IG49bG8oZSkse25hbWU6cn09bjtsZXQgbz1hd2FpdCBhc3luYyBmdW5jdGlvbihlKXtyZXR1cm4oYXdhaXQgcG8oKSkuZmluZCgodD0+dC5pZGVudGl0eS5uYW1lPT09ZSkpfShyKTtpZihvKWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCl7Y29uc3R7bmFtZTpuLGJvdW5kczpyLHJvdXRlOm99PWF3YWl0IGhvKGUsdCksYT17dXVpZDpmaW4ubWUuaWRlbnRpdHkudXVpZCxuYW1lOm59LGk9ZmluLldpbmRvdy53cmFwU3luYyhhKTthd2FpdCBQcm9taXNlLmFsbChbY28oYSwwKSxpLnNldEJvdW5kcyhyKV0pLGkub25jZShcImJsdXJyZWRcIiwoKCk9PntjbyhhLDApLGkuaGlkZSgpLHVvKHtuYW1lOmEubmFtZSxkYXRhOnthY3Rpb25OYW1lOlwiQ2FuY2VsXCJ9fSl9KSksc28uZW1pdChcInVwZGF0ZVwiLG4scixvKSxhd2FpdCB1byh7bmFtZTpuLGRhdGE6e2FjdGlvbk5hbWU6XCJDYW5jZWxcIn19KX0obix0fHxuZXcgVVJMU2VhcmNoUGFyYW1zKTtlbHNle2NvbnN0e3JvdXRlOnIsYm91bmRzOmF9PWF3YWl0IGhvKGUsdCk7bz1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQsbil7Y29uc3Qgcj1sbyhlKSxvPWF3YWl0IG9vKGZpbi5tZS5pZGVudGl0eSksYT1hd2FpdCBhbyhmaW4ubWUuaWRlbnRpdHkpPT09Zy5EYXJrLGk9bz8udGhlbWU7aWYoci5iYWNrZ3JvdW5kQ29sb3I9aT8uW2E/Zy5EYXJrOmcuTGlnaHRdLnBhbGV0dGU/LmlucHV0QmFja2dyb3VuZHx8ci5iYWNrZ3JvdW5kQ29sb3IsIWZvLmhhcyhyLm5hbWUpKXJldHVybiBuZXcgUHJvbWlzZSgoZT0+e3NvLm9uY2UoXCJyZWFkeVwiLChhc3luYyB0PT57aWYodC5uYW1lPT09ci5uYW1lKXtjb25zdCBuPWF3YWl0IGZvLmdldChyLm5hbWUpO24ub25jZShcImJsdXJyZWRcIiwoYXN5bmMoKT0+e2lmKGNvKHQsMCksbi5oaWRlKCksdW8oe25hbWU6ci5uYW1lLGRhdGE6e2FjdGlvbk5hbWU6XCJDYW5jZWxcIn19KSxuLmlkZW50aXR5Lm5hbWU9PT1LLkJyb3dzZXJTYXZlTWVudSl7Y29uc3QgZT1hd2FpdCBuLmdldE9wdGlvbnMoKTtcInN1Ym1pdHRpbmdcIiE9PWUuY3VzdG9tQ29udGV4dCYmXCJlcnJvclwiIT09ZS5jdXN0b21Db250ZXh0JiZuLmNsb3NlKCl9ZWxzZSBuLmlkZW50aXR5Lm5hbWUuc3RhcnRzV2l0aChLLkJyb3dzZXJNZW51KSYmbi5jbG9zZSgpfSkpLHNldFRpbWVvdXQoKGFzeW5jKCk9Pnthd2FpdCBjbyh0LDEpLDEhPT0oYXdhaXQgZmluLldpbmRvdy53cmFwU3luYyh0KS5nZXRPcHRpb25zKCkpLm9wYWNpdHkmJmNvKHQsMSl9KSksZShuKX19KSk7Y29uc3Qgbz0oYXN5bmMoKT0+e2NvbnN0IGU9YXdhaXQgZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkuY3JlYXRlV2luZG93KGpyKHsuLi5yLG9wYWNpdHk6MCx1cmw6dHx8ci51cmwsZGVmYXVsdExlZnQ6bj8ubGVmdCxkZWZhdWx0VG9wOm4/LnRvcCxkZWZhdWx0V2lkdGg6bj8ud2lkdGgsZGVmYXVsdEhlaWdodDpuPy5oZWlnaHR9LCEwKSk7cmV0dXJuIGUub25jZShcImNsb3NlZFwiLCgoKT0+e2ZvLmRlbGV0ZShyLm5hbWUpfSkpLGV9KSgpO2ZvLnNldChyLm5hbWUsbyl9KSk7cmV0dXJuIGZvLmdldChyLm5hbWUpfSh7Li4ubn0scixhKX1yZXR1cm4gb31jb25zdCB2bz1hc3luYyh7b3B0aW9uczplLGNvbnRlbnQ6dH0pPT57Y29uc3Qgbj0oZT0+bmV3IFVSTFNlYXJjaFBhcmFtcyh7Y29udGVudDpKU09OLnN0cmluZ2lmeShlKX0pKSh7Li4udCxpbnZvY2F0aW9uSWQ6SWUoKX0pLHI9ey4uLmUsbmFtZTpgJHtlLm5hbWV9LS0ke2UubW9kYWxQYXJlbnRJZGVudGl0eT8ubmFtZT8/XCJcIn1gfTtyZXR1cm4gYXdhaXQgZ28oe29wdGlvbnM6cixwYXJhbWV0ZXJzOm59KSxuZXcgUHJvbWlzZSgoZT0+e3NvLm9uY2UoXCJyZXNwb25zZVwiLChhc3luYyB0PT57dC5uYW1lPT09ci5uYW1lJiZlKHtkYXRhOnQuZGF0YX0pfSkpfSkpfSxDbz1hc3luYyhlLHQsbj0hMSk9PntsZXQgcjtpZihuKXI9YXdhaXQoYXN5bmMgZT0+e2NvbnN0IHQ9ZSYmYXdhaXQgcShlKS5nZXRCb3VuZHMoKSxuPWU/YXdhaXQgaWUodCk6KGF3YWl0IGZpbi5TeXN0ZW0uZ2V0TW9uaXRvckluZm8oKSkucHJpbWFyeU1vbml0b3I7cmV0dXJue2xlZnQ6KChyPW4uYXZhaWxhYmxlUmVjdCkubGVmdCtyLnJpZ2h0KS8yLHRvcDooci50b3Arci5ib3R0b20pLzJ9O3ZhciByfSkodCk7ZWxzZXtjb25zdCBlPXEodCksbj1hd2FpdCBlLmdldEJvdW5kcygpO3I9cj8/e2xlZnQ6KChvPW4pLmxlZnQrKG8ucmlnaHQ/P28ubGVmdCtvLndpZHRoKSkvMix0b3A6KG8udG9wKyhvLmJvdHRvbT8/by50b3Arby5oZWlnaHQpKS8yfX12YXIgbztjb25zdHtkZWZhdWx0SGVpZ2h0OmEsZGVmYXVsdFdpZHRoOml9PWU7cmV0dXJuKChlLHQpPT57Y29uc3Qgbj10LndpZHRoLzIscj10LmhlaWdodC8yO3JldHVybntsZWZ0Ok1hdGgucm91bmQoZS5sZWZ0LW4pLHRvcDpNYXRoLnJvdW5kKGUudG9wLXIpLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fX0pKHIse2hlaWdodDphLHdpZHRoOml9KX07YXN5bmMgZnVuY3Rpb24gbW8oZSx0LG49ITEpe2NvbnN0IHI9dCYmXCJtYXhpbWl6ZWRcIj09PWF3YWl0IHEodCkuZ2V0U3RhdGUoKSxvPW58fHJ8fCF0LGE9YXdhaXQgQ28oZSx0LG8pO3JldHVybiBhd2FpdChhc3luYyBlPT57Y29uc3QgdD1hd2FpdCBmaW4uU3lzdGVtLmdldE1vbml0b3JJbmZvKCksbj1bdC5wcmltYXJ5TW9uaXRvciwuLi50Lm5vblByaW1hcnlNb25pdG9yc107Zm9yKGNvbnN0IHQgb2YgbilpZigxPT09YWUoZSx0KSlyZXR1cm4hMTtyZXR1cm4hMH0pKGEpPyhhd2FpdCBxKHQpLmNlbnRlcigpLENvKGUsdCxvKSk6KGNvbnNvbGUud2FybihcIlJlc3BvbnNlIG1vZGFsIGlzbid0IG9mZiBzY3JlZW4sIG5vdCBjZW50ZXJpbmcgcGFyZW50IHdpbmRvd1wiKSxhKX1jb25zdCB3bz1hc3luYyhlLHQsbik9Pntjb25zdHt3aW5kb3dPcHRpb25zOnIsY29udGVudDpvfT1hd2FpdChhc3luYyhlLHQpPT4oe3RpdGxlOlwiU3dpdGNoIFdvcmtzcGFjZVwiLHdpbmRvd09wdGlvbnM6e3VybDphd2FpdCBQcigpK18uUmVzcG9uc2VNb2RhbCxuYW1lOksuQnJvd3Nlck1lbnUsZGVmYXVsdEhlaWdodDoxMzQsZGVmYXVsdFdpZHRoOjQxMCxtb2RhbFBhcmVudElkZW50aXR5OnR9LGNvbnRlbnQ6e3RpdGxlOlRuKFwic3dpdGNoV29ya3NwYWNlTW9kYWxcIix7d29ya3NwYWNlOmV9KSxib2R5OlRuKFwic3dpdGNoV29ya3NwYWNlTW9kYWwud2FybmluZ1wiKSxidXR0b25zOntyaWdodDpbe2xhYmVsOlRuKFwiZ2xvYmFsLmNhbmNlbFwiKSx0eXBlOlwic2Vjb25kYXJ5XCIsaWQ6XCJDYW5jZWxcIn0se2xhYmVsOlRuKFwiZ2xvYmFsLmNvbmZpcm1cIiksdHlwZTpcInByaW1hcnlcIixpZDpcIkNvbmZpcm1cIn1dfX19KSkodCxuP3ZvaWQgMDplKSxhPWF3YWl0IG1vKHIsZSxuKSxpPXsuLi5yLHRvcDphLnRvcCxsZWZ0OmEubGVmdH07cmV0dXJuXCJDb25maXJtXCI9PT0oYXdhaXQgdm8oe29wdGlvbnM6aSxjb250ZW50Om99KSkuZGF0YS5hY3Rpb25OYW1lfSxibz1hc3luYyhlLHQpPT57Y29uc3R7d2luZG93T3B0aW9uczpuLGNvbnRlbnQ6cn09YXdhaXQoYXN5bmMoZSx0KT0+KHt0aXRsZTpcIkRlbGV0ZSBXb3Jrc3BhY2VcIix3aW5kb3dPcHRpb25zOnt1cmw6YXdhaXQgUHIoKStfLlJlc3BvbnNlTW9kYWwsbmFtZTpLLkJyb3dzZXJNZW51LGRlZmF1bHRIZWlnaHQ6MTQ0LGRlZmF1bHRXaWR0aDo0MTAsbW9kYWxQYXJlbnRJZGVudGl0eTplfSxjb250ZW50Ont0aXRsZTpUbihcImRlbGV0ZVdvcmtzcGFjZU1vZGFsXCIpLGJvZHk6YCR7dH1gLGJ1dHRvbnM6e3JpZ2h0Olt7bGFiZWw6VG4oXCJnbG9iYWwuY2FuY2VsXCIpLHR5cGU6XCJzZWNvbmRhcnlcIixpZDpcIkNhbmNlbFwifSx7bGFiZWw6VG4oXCJnbG9iYWwuY29uZmlybVwiKSx0eXBlOlwicHJpbWFyeVwiLGlkOlwiQ29uZmlybVwifV19fX0pKShlLHQpLG89YXdhaXQgbW8obixuLm1vZGFsUGFyZW50SWRlbnRpdHkpLGE9ey4uLm4sdG9wOm8udG9wLGxlZnQ6by5sZWZ0fTtyZXR1cm5cIkNvbmZpcm1cIj09PShhd2FpdCB2byh7b3B0aW9uczphLGNvbnRlbnQ6cn0pKS5kYXRhLmFjdGlvbk5hbWV9LHlvPWFzeW5jKGUsdCxuKT0+e2NvbnN0e3dpbmRvd09wdGlvbnM6cixjb250ZW50Om99PWF3YWl0KGFzeW5jKGUsdCk9Pih7dGl0bGU6XCJQbGF0Zm9ybSBRdWl0XCIsd2luZG93T3B0aW9uczp7dXJsOmF3YWl0IFByKCkrXy5SZXNwb25zZU1vZGFsLG5hbWU6Sy5Ccm93c2VyTWVudSxkZWZhdWx0SGVpZ2h0OjEzNCxkZWZhdWx0V2lkdGg6NDEwLG1vZGFsUGFyZW50SWRlbnRpdHk6dH0sY29udGVudDp7dGl0bGU6VG4oXCJQbGF0Zm9ybVwiPT09ZT9cImNsb3NlUGxhdGZvcm1cIjpcImNsb3NlUGxhdGZvcm0ud29ya3NwYWNlXCIse3dvcmtzcGFjZTplfSksYm9keTpUbihcImNsb3NlUGxhdGZvcm0ud2FybmluZ1wiKSxidXR0b25zOntyaWdodDpbe2xhYmVsOlRuKFwiZ2xvYmFsLmNhbmNlbFwiKSx0eXBlOlwic2Vjb25kYXJ5XCIsaWQ6XCJDYW5jZWxcIn0se2xhYmVsOlRuKFwiZ2xvYmFsLmNvbmZpcm1cIiksdHlwZTpcInByaW1hcnlcIixpZDpcIkNvbmZpcm1cIn1dfX19KSkodCxuP3ZvaWQgMDplKSxhPWF3YWl0IG1vKHIsZSxuKSxpPXsuLi5yLHRvcDphLnRvcCxsZWZ0OmEubGVmdH07cmV0dXJuXCJDb25maXJtXCI9PT0oYXdhaXQgdm8oe29wdGlvbnM6aSxjb250ZW50Om99KSkuZGF0YS5hY3Rpb25OYW1lfSx4bz1hc3luYyBlPT57Y29uc3R7d2luZG93T3B0aW9uczp0LGNvbnRlbnQ6bn09YXdhaXQoYXN5bmMgZT0+KHt0aXRsZTpcIlJlc3RvcmUgQ2hhbmdlc1wiLHdpbmRvd09wdGlvbnM6e3VybDphd2FpdCBQcigpK18uUmVzcG9uc2VNb2RhbCxuYW1lOksuQnJvd3Nlck1lbnUsZGVmYXVsdEhlaWdodDoxMzQsZGVmYXVsdFdpZHRoOjQxMCxtb2RhbFBhcmVudElkZW50aXR5OmV9LGNvbnRlbnQ6e3RpdGxlOlRuKFwicmVzdG9yZU1vZGFsXCIpLGJvZHk6VG4oXCJtb2RhbC5kaXNjYXJkV2FybmluZ1wiKSxidXR0b25zOntyaWdodDpbe2xhYmVsOlRuKFwiZ2xvYmFsLmNhbmNlbFwiKSx0eXBlOlwic2Vjb25kYXJ5XCIsaWQ6XCJDYW5jZWxcIn0se2xhYmVsOlRuKFwiZ2xvYmFsLmNvbmZpcm1cIiksdHlwZTpcInByaW1hcnlcIixpZDpcIkNvbmZpcm1cIn1dfX19KSkoZSkscj1hd2FpdCBtbyh0LHQubW9kYWxQYXJlbnRJZGVudGl0eSksbz17Li4udCx0b3A6ci50b3AsbGVmdDpyLmxlZnR9O3JldHVyblwiQ29uZmlybVwiPT09KGF3YWl0IHZvKHtvcHRpb25zOm8sY29udGVudDpufSkpLmRhdGEuYWN0aW9uTmFtZX0sa289YXN5bmMoZSx0KT0+e2NvbnN0e3dpbmRvd09wdGlvbnM6bixjb250ZW50OnJ9PWF3YWl0KGFzeW5jKGUsdCk9Pntjb25zdCBuPWF3YWl0IGxlKGUpLHI9bmV3IFVSTChhd2FpdCBQcigpK18uUmVzcG9uc2VNb2RhbCk7cmV0dXJuIHIuc2VhcmNoUGFyYW1zLmFwcGVuZChcImlzRW50ZXJwcmlzZVwiLGAke259YCkse3RpdGxlOlwiRGVsZXRlIFBhZ2VcIix3aW5kb3dPcHRpb25zOnt1cmw6ci50b1N0cmluZygpLG5hbWU6Sy5Ccm93c2VyTWVudSxkZWZhdWx0SGVpZ2h0OjE3MixkZWZhdWx0V2lkdGg6NDY0LG1vZGFsUGFyZW50SWRlbnRpdHk6ZX0sY29udGVudDp7dGl0bGU6VG4oXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJcIix7dGl0bGU6dH0pLGJvZHk6VG4oXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJXYXJuaW5nXCIpLGJ1dHRvbnM6e3JpZ2h0Olt7bGFiZWw6VG4oXCJnbG9iYWwuY2FuY2VsXCIpLHR5cGU6XCJzZWNvbmRhcnlcIixpZDpcIkNhbmNlbFwifSx7bGFiZWw6VG4oXCJnbG9iYWwuZGVsZXRlXCIpLHR5cGU6XCJwcmltYXJ5XCIsaWQ6XCJEZWxldGVcIn1dfX19fSkoZSx0KSxvPWF3YWl0IG1vKG4sbi5tb2RhbFBhcmVudElkZW50aXR5KSxhPXsuLi5uLHRvcDpvLnRvcCxsZWZ0Om8ubGVmdH07cmV0dXJuXCJEZWxldGVcIj09PShhd2FpdCB2byh7b3B0aW9uczphLGNvbnRlbnQ6cn0pKS5kYXRhLmFjdGlvbk5hbWV9O2FzeW5jIGZ1bmN0aW9uIFNvKHtvcHRpb25zOmUsLi4udH0pe3RyeXtpZighKCEhZT8uc2tpcFByb21wdHx8YXdhaXQgd28oZT8ucHJvbXB0Q29udGFpbmVyV2luZG93SWRlbnRpdHksdC50aXRsZSxlPy5zaG91bGRDZW50ZXJNb2RhbE9uTW9uaXRvcikpKXJldHVybiExO2NvbnN0IG49T3QoKTthd2FpdCBuLmFwcGx5U25hcHNob3QodC5zbmFwc2hvdCx7Li4uZT8uYXBwbHlTbmFwc2hvdE9wdGlvbnM/P3t9LGNsb3NlRXhpc3RpbmdXaW5kb3dzOmU/LmFwcGx5U25hcHNob3RPcHRpb25zPy5jbG9zZUV4aXN0aW5nV2luZG93cz8/ITB9KSxPbyh0KSxBcihFci5TVUNDRVNTLFRuKFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTd2l0Y2hlZFwiKSkuY2F0Y2goY29uc29sZS53YXJuKX1jYXRjaChlKXtyZXR1cm4gY29uc29sZS5lcnJvcihcImZhaWxlZCB0byBhcHBseSB0aGUgY3VycmVudCB3b3Jrc3BhY2U6IFwiLGUpLCExfXJldHVybiEwfWZ1bmN0aW9uIE9vKGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBsb2NhbFN0b3JhZ2UpdHJ5e2NvbnN0IHQ9SlNPTi5zdHJpbmdpZnkoZSk7Y3QoTGUuQ3VycmVudFdvcmtzcGFjZUlkLHQpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gc2V0IHRoZSBhY3RpdmUgd29ya3NwYWNlOiBcIixlKX19YXN5bmMgZnVuY3Rpb24gTW8oKXtjb25zdCBlPU90KCksdD1hd2FpdCBlLmdldFNuYXBzaG90KCk7cmV0dXJue3dvcmtzcGFjZUlkOkllKCksdGl0bGU6YXdhaXQgRW8oKSxtZXRhZGF0YTp7QVBJVmVyc2lvbjpOfSxzbmFwc2hvdDp0fX1hc3luYyBmdW5jdGlvbiBMbygpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBsb2NhbFN0b3JhZ2UpcmV0dXJuIE1vKCk7Y29uc3QgZT11dChMZS5DdXJyZW50V29ya3NwYWNlSWQpO2lmKCFlKXJldHVybiBNbygpO2NvbnN0IHQ9SlNPTi5wYXJzZShlKSxuPU90KCkscj1hd2FpdCBuLmdldFNuYXBzaG90KCk7cmV0dXJuey4uLnQsbWV0YWRhdGE6e0FQSVZlcnNpb246Tn0sc25hcHNob3Q6cn19Y29uc3QgX289YXN5bmMoKT0+KGF3YWl0IEdlKFkpKS5kaXNwYXRjaChXZS5HZXRTYXZlZFdvcmtzcGFjZXMsdm9pZCAwKSxQbz1hc3luYyBlPT5hd2FpdChhc3luYyBlPT4oYXdhaXQgR2UoWSkpLmRpc3BhdGNoKFdlLkdldFNhdmVkV29ya3NwYWNlLGUpKShlLndvcmtzcGFjZUlkKT8oYXN5bmMgZT0+KGF3YWl0IEdlKFkpKS5kaXNwYXRjaChXZS5VcGRhdGVTYXZlZFdvcmtzcGFjZSxlKSkoe3dvcmtzcGFjZUlkOmUud29ya3NwYWNlSWQsd29ya3NwYWNlOmV9KTooYXN5bmMgZT0+KGF3YWl0IEdlKFkpKS5kaXNwYXRjaChXZS5DcmVhdGVTYXZlZFdvcmtzcGFjZSxlKSkoe3dvcmtzcGFjZTplfSk7YXN5bmMgZnVuY3Rpb24gRW8oZT1cIlVudGl0bGVkIFdvcmtzcGFjZVwiKXtjb25zdCB0PShhd2FpdCBfbygpKS5tYXAoKCh7dGl0bGU6ZX0pPT5lKSk7cmV0dXJuIEduKGUsdCl9Y29uc3Qgam89ZT0+KHsuLi5lLHNuYXBzaG90OnsuLi5lLnNuYXBzaG90LHdpbmRvd3M6ZS5zbmFwc2hvdC53aW5kb3dzLm1hcCgoZT0+KHsuLi5lLHdvcmtzcGFjZVBsYXRmb3JtOnsuLi5lLndvcmtzcGFjZVBsYXRmb3JtLHBhZ2VzOmUud29ya3NwYWNlUGxhdGZvcm0/LnBhZ2VzPy5tYXAoKGU9Pih7Li4uZSxoYXNVbnNhdmVkQ2hhbmdlczohMX0pKSl9fSkpKX19KSxSbz1hc3luYyhlLHQpPT57Y29uc3Qgbj10Pz9PdCgpO2F3YWl0IG4uU3RvcmFnZS5zYXZlV29ya3NwYWNlKGpvKGUpKSxhd2FpdChhc3luYygpPT4oYXdhaXQgR2UoWSkpLmRpc3BhdGNoKFdlLk1hcmtVbnNhdmVkUGFnZXNBc1NhdmVkSW50ZXJuYWwsdm9pZCAwKSkoKX0sSW89YXN5bmMgZT0+e2NvbnN0IHQ9T3QoKSxuPWF3YWl0IHQuZ2V0Q3VycmVudFdvcmtzcGFjZSgpLHI9YXdhaXQgdC5TdG9yYWdlLmdldFdvcmtzcGFjZXMoKSxvPW4ud29ya3NwYWNlSWQ7aWYoci5zb21lKChlPT5lLndvcmtzcGFjZUlkPT09bykpKWF3YWl0IFJvKG4sdCksYXdhaXQgdC5zZXRBY3RpdmVXb3Jrc3BhY2UobiksYXdhaXQgVHIoVG4oXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkXCIpLGUpO2Vsc2V7Y29uc3Qgbj10LkJyb3dzZXIud3JhcFN5bmMoZSk7YXdhaXQgbi5fb3BlblNhdmVNb2RhbCh7bWVudVR5cGU6Uy5TQVZFX1dPUktTUEFDRX0pfX0sVm89ZT0+e090KCkuQnJvd3Nlci53cmFwU3luYyhlKS5fb3BlblNhdmVNb2RhbCh7bWVudVR5cGU6Uy5TQVZFX1dPUktTUEFDRV9BU30pfSxIbz1hc3luYyBlPT57Y29uc3QgdD1PdCgpLkJyb3dzZXIud3JhcFN5bmMoZSkse25ld1BhZ2VVcmw6bn09YXdhaXQgRHIoKSxyPWF3YWl0IFpyKGUpLG89bnx8dm9pZCAwO2F3YWl0IHQuX2FkZERlZmF1bHRQYWdlKHtpZGVudGl0eTplLHBhZ2U6cixuZXdQYWdlVXJsOm99KX0sQW89YXN5bmMoZSx0KT0+e2NvbnN0IG49T3QoKS5Ccm93c2VyLndyYXBTeW5jKGUpLHI9YXdhaXQgT3QoKS5TdG9yYWdlLmdldFBhZ2VzKCksbz0oYXdhaXQgbi5nZXRQYWdlcygpKS5maW5kKChlPT50P2UucGFnZUlkPT09dDplLmlzQWN0aXZlKSksYT1yLnNvbWUoKGU9Pm8ucGFnZUlkPT09ZS5wYWdlSWQpKSxpPWF3YWl0IGxlKGUpO2lmKGEpdHJ5e2F3YWl0IE90KCkuU3RvcmFnZS5zYXZlUGFnZSgodT1vLHsuLi51LGhhc1Vuc2F2ZWRDaGFuZ2VzOnZvaWQgMCxwYXJlbnRJZGVudGl0eTp2b2lkIDAsaXNBY3RpdmU6dm9pZCAwLGxheW91dDpJdCh1LmxheW91dCl9KSksYXdhaXQgbi51cGRhdGVQYWdlKHtwYWdlSWQ6by5wYWdlSWQscGFnZTp7aGFzVW5zYXZlZENoYW5nZXM6ITF9fSksVHIoVG4oaT9cImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiU2F2ZWRcIjpcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVNhdmVkXCIpLGUsVG4oaT9cImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlblNhdmVkXCI6XCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VIYXNCZWVuU2F2ZWRcIix7dGl0bGU6by50aXRsZX0pKX1jYXRjaHtsPVRuKFwiZXJyb3JJbmRpY2F0b3IucGFnZVNhdmVGYWlsZWRcIikscz1vLnBhcmVudElkZW50aXR5Lm5hbWUsQXIoRXIuRVJST1IsbCxzLGMpfWVsc2Ugbi5fb3BlblNhdmVNb2RhbCh7aWQ6by5wYWdlSWQsbWVudVR5cGU6Uy5TQVZFX1BBR0V9KTt2YXIgbCxzLGMsdX0sVG89YXN5bmMoZSx0KT0+e2NvbnN0IG49T3QoKS5Ccm93c2VyLndyYXBTeW5jKGUpLHI9KGF3YWl0IG4uZ2V0UGFnZXMoKSkuZmluZCgoZT0+dD9lLnBhZ2VJZD09PXQ6ZS5pc0FjdGl2ZSkpO24uX29wZW5TYXZlTW9kYWwoe2lkOnIucGFnZUlkLG1lbnVUeXBlOlMuU0FWRV9QQUdFX0FTfSksZ2Uoe3R5cGU6XCJQYWdlIE1vZGFsXCIsYWN0aW9uOlwiU2VsZWN0IFNhdmUgQXNcIix2YWx1ZTpyLnRpdGxlLHNraXBWYWx1ZUhhc2hpbmc6ITB9KX0sRG89e3RpdGxlOlwiRG93bmxvYWRzXCIscGFnZUlkOlwiZG93bmxvYWRzLXBhZ2UtaWRcIixsYXlvdXQ6e2NvbnRlbnQ6W3t0eXBlOlwic3RhY2tcIixjb250ZW50Olt7dHlwZTpcImNvbXBvbmVudFwiLGNvbXBvbmVudE5hbWU6XCJ2aWV3XCIsY29tcG9uZW50U3RhdGU6e25hbWU6XCJzaG93LWRvd25sb2FkLXZpZXdcIix1cmw6XCJjaHJvbWU6Ly9kb3dubG9hZHMvXCJ9fV19XX19LEJvPWFzeW5jIGU9Pntjb25zdCB0PXEoZSksbj1hd2FpdCB0LmdldEN1cnJlbnRWaWV3cygpLHI9KGF3YWl0IE90KCkuQnJvd3Nlci53cmFwU3luYyh0LmlkZW50aXR5KS5nZXRQYWdlcygpKS5maW5kKChlPT5lLmlzQWN0aXZlKSk7dHJ5e2NvbnN0IHQ9KGF3YWl0IFByb21pc2UuYWxsKG4ubWFwKChhc3luYyBlPT4oe2lkZW50aXR5OmUuaWRlbnRpdHksaW5mbzphd2FpdCBmaW4uVmlldy53cmFwU3luYyhlLmlkZW50aXR5KS5nZXRJbmZvKCl9KSkpKSkuZmluZCgoZT0+XCJjaHJvbWU6Ly9kb3dubG9hZHMvXCI9PT1lLmluZm8udXJsKSk7aWYodClhd2FpdCBmaW4uVmlldy53cmFwU3luYyh0LmlkZW50aXR5KS5mb2N1cygpO2Vsc2V7Y29uc3QgdD1PdCgpO2lmKHI/LmlzTG9ja2VkKXtjb25zdCBlPShhd2FpdCBmaW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudFN5bmMoKS5nZXRDaGlsZFdpbmRvd3MoKSkuZmluZCgoZT0+XCJzaG93LWRvd25sb2FkLXdpbmRvd1wiPT09ZS5pZGVudGl0eS5uYW1lKSk7cmV0dXJuIHZvaWQoZT9hd2FpdCBlLmZvY3VzKCk6dC5Ccm93c2VyLmNyZWF0ZVdpbmRvdyh7bmFtZTpcInNob3ctZG93bmxvYWQtd2luZG93XCIsd29ya3NwYWNlUGxhdGZvcm06e3BhZ2VzOltEb119fSkpfShhd2FpdCBPdCgpLmNyZWF0ZVZpZXcoe25hbWU6XCJzaG93LWRvd25sb2FkLXZpZXdcIix1cmw6XCJjaHJvbWU6Ly9kb3dubG9hZHMvXCIsdGFyZ2V0OmV9LGUpKS5mb2N1cygpfX1jYXRjaChlKXtjb25zb2xlLmVycm9yKFwiQ291bGRuJ3Qgb3BlbiBkb3dubG9hZHMgdmlld1wiLGUpfX0sWm89YXN5bmMgZT0+e2NvbnN0IHQ9ZS5tYXAoKGU9PmZpbi5WaWV3LndyYXBTeW5jKGUpLnByaW50KCkpKTthd2FpdCBQcm9taXNlLmFsbCh0KX0sJG89ZT0+e2NvbnN0W3QsbixyXT1lLnNwbGl0KFwiLlwiKS5tYXAoKGU9PlwieFwiPT09ZT8wOjEpKTtyZXR1cm4gMTAwKnQrMTAqbisxKnJ9O2NsYXNzIE5vIGV4dGVuZHMgRXJyb3J7fWNvbnN0IEZvPWFzeW5jIGU9Pnt0cnl7Y29uc3Qgbj1hd2FpdCBhc3luYyBmdW5jdGlvbigpe2NvbnN0IGU9YXdhaXQgd2UoKSx0PWU/LnRyYW5zbGF0aW9uT3ZlcnJpZGVzVXJsPz9cImh0dHBzOi8vd29ya3NwYWNlLm9wZW5maW4uY28vd29ya3NwYWNlL2Fzc2V0cy90cmFuc2xhdGlvbi1vdmVycmlkZS5qc29uXCI7aWYoXCJcIj09PXQpdGhyb3cgbmV3IE5vKFwiRW1wdHkgc3RyaW5nIHByb3ZpZGVkIGFzIHVybCB0byB0cmFuc2xhdGlvbk92ZXJyaWRlc1VybCwgb3ZlcnJpZGVzIHdpbGwgbm90IGJlIGZldGNoZWQuXCIpO3JldHVybiBhd2FpdCBmZXRjaCh0KS50aGVuKChlPT5lLmpzb24oKSkpfSgpLHI9KHQ9KGU9Pntjb25zdCB0PU4uc3BsaXQoXCIuXCIpO3JldHVybiBPYmplY3Qua2V5cyhlKS5maWx0ZXIoKGU9Pntjb25zdCBuPWUuc3BsaXQoXCIuXCIpO2lmKDMhPT1uLmxlbmd0aClyZXR1cm4gY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCBhIHRyYW5zbGF0aW9uIG92ZXJyaWRlIHZlcnNpb24gc3RyaW5nIGluIGFuIHVuc3VwcG9ydGVkIGZvcm1hdDogJHtlfS4gVmVyc2lvbnMgbXVzdCBiZSBpbiBBLkIuQyBmb3JtYXQgd2hlcmUgQSwgQiwgQyBhcmUgZWl0aGVyIGludGVnZXJzIG9yIHRoZSB3aWxkY2FyZCBzeW1ib2wgJ3gnLmApLCExO2NvbnN0W3IsbyxhXT1uO3JldHVybiEociE9PXRbMF0mJlwieFwiIT09cnx8byE9PXRbMV0mJlwieFwiIT09b3x8YSE9PXRbMl0mJlwieFwiIT09YSl9KSl9KShuKSxbLi4udF0uc29ydCgoKGUsdCk9PiRvKGUpLSRvKHQpKSkpO3IuZm9yRWFjaCgodD0+e2NvbnN0IHI9blt0XTtPYmplY3Qua2V5cyhyKS5mb3JFYWNoKCh0PT57ZS5hZGRSZXNvdXJjZUJ1bmRsZSh0LFwidHJhbnNsYXRpb25cIixyW3RdLCEwLCEwKX0pKX0pKX1jYXRjaChlKXtlIGluc3RhbmNlb2YgTm8/Y29uc29sZS53YXJuKGUubWVzc2FnZSk6Y29uc29sZS5lcnJvcihcIkVycm9yIGFwcGx5aW5nIGEgdHJhbnNsYXRpb24gb3ZlcnJpZGU6IFwiLGUpfXZhciB0fTtmdW5jdGlvbiBXbygpe3JldHVybiBQbi5sYW5ndWFnZX1jb25zdCBVbz1hc3luYyBlPT57S28oZSksKGU9PntQbi5jaGFuZ2VMYW5ndWFnZShlKX0pKGUpLGF3YWl0KGFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IGVlKCk7cmV0dXJuIFByb21pc2UuYWxsKHQubWFwKChhc3luYyB0PT57Y29uc3Qgbj1hd2FpdCBRZSh0LmlkZW50aXR5KTthd2FpdCBuLmRpc3BhdGNoKG90LlNldFNlbGVjdGVkTGFuZ3VhZ2UsZSl9KSkpfSkoZSl9O2Z1bmN0aW9uIHpvKCl7aWYoIVBuLm9wdGlvbnMucmVzb3VyY2VzKXRocm93IG5ldyBFcnJvcihcIk5vIGxhbmd1YWdlIHJlc291cmNlcyBmb3VuZFwiKTtyZXR1cm57Y3VycmVudExhbmd1YWdlOldvKCkscmVzb3VyY2VzOlBuLm9wdGlvbnMucmVzb3VyY2VzfX1hc3luYyBmdW5jdGlvbiBHbyhlPVwiZW4tVVNcIil7S28oZSksZnVuY3Rpb24oZT1cImVuLVVTXCIpe1BuLnVzZShOdCkuaW5pdCh7bG5nOmUsZmFsbGJhY2tMbmc6XCJlbi1VU1wiLHJlc291cmNlczp7XCJlbi1VU1wiOnt0cmFuc2xhdGlvbjpSbn0sXCJqYS1KUFwiOnt0cmFuc2xhdGlvbjpWbn0sXCJ6aC1DTlwiOnt0cmFuc2xhdGlvbjpFbn0sXCJrby1LUlwiOnt0cmFuc2xhdGlvbjpIbn0sXCJydS1SVVwiOnt0cmFuc2xhdGlvbjpBbn0sXCJkZS1ERVwiOnt0cmFuc2xhdGlvbjpJbn0sXCJ6aC1IYW50XCI6e3RyYW5zbGF0aW9uOmpufX19KX0oZSksYXdhaXQgRm8oUG4pfWZ1bmN0aW9uIEtvKGUpe2lmKCFNLlNVUFBPUlRFRF9MQU5HVUFHRVMuaW5jbHVkZXMoZSkpdGhyb3cgbmV3IEVycm9yKGBUaGUgSVNPIGxhbmd1YWdlIHByb3ZpZGVkICR7ZX0gaXMgbm90IHN1cHBvcnRlZGApfWNvbnN0IHFvPVtcImdyZWVuXCIsXCJwdXJwbGVcIixcIm9yYW5nZVwiLFwicmVkXCIsXCJwaW5rXCIsXCJ5ZWxsb3dcIl0sWW89XCJDT05URVhUX0dST1VQX1BBR0VcIixKbz0oKT0+ZT0+Y2xhc3MgZXh0ZW5kcyBle2dldENvbnRleHRHcm91cHMoKXtyZXR1cm4gc3VwZXIuZ2V0Q29udGV4dEdyb3VwcygpLm1hcCgoZT0+cW8uaW5jbHVkZXMoZS5kaXNwbGF5TWV0YWRhdGE/Lm5hbWUpP3suLi5lLGRpc3BsYXlNZXRhZGF0YTp7Li4uZS5kaXNwbGF5TWV0YWRhdGEsbmFtZTpUbihlLmRpc3BsYXlNZXRhZGF0YT8ubmFtZSl9fTplKSl9fSxYbz0oKT0+e2NvbnN0IGU9bmV3IFNldDtyZXR1cm4gdD0+Y2xhc3MgZXh0ZW5kcyB0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm9uQ2xpZW50Q29ubmVjdGVkPWU9PntlLm5hbWUuc3RhcnRzV2l0aChcImludGVybmFsLWdlbmVyYXRlZC12aWV3XCIpJiZ0aGlzLmpvaW5Db250ZXh0R3JvdXAoe2NvbnRleHRHcm91cElkOllvLHRhcmdldDplfSx7dXVpZDp0aGlzLmZpbi5tZS51dWlkLG5hbWU6dGhpcy5maW4ubWUubmFtZX0pfTtjb25zdCBlPXRoaXMuaW50ZXJvcENsaWVudHMuc2V0O3RoaXMuaW50ZXJvcENsaWVudHMuc2V0PSh0LG4pPT57ZS5jYWxsKHRoaXMuaW50ZXJvcENsaWVudHMsdCxuKSx0aGlzLm9uQ2xpZW50Q29ubmVjdGVkKG4uY2xpZW50SWRlbnRpdHkpfX1hc3luYyBqb2luQ29udGV4dEdyb3VwKHtjb250ZXh0R3JvdXBJZDp0LHRhcmdldDpufSxyKXtpZih0IT09WW8pcmV0dXJuIHN1cGVyLmpvaW5Db250ZXh0R3JvdXAoe2NvbnRleHRHcm91cElkOnQsdGFyZ2V0Om59LHIpO3RyeXtjb25zdCB0PWF3YWl0IHRoaXMuZmluLlZpZXcud3JhcFN5bmMobikuZ2V0UGFyZW50TGF5b3V0KCkse3NldHRpbmdzOntwYWdlSWQ6b319PWF3YWl0IHQuZ2V0Q29uZmlnKCk7aWYoIW8pdGhyb3cgbmV3IEVycm9yKFwiVmlldyBkb2VzIG5vdCBiZWxvbmcgdG8gYSBwYWdlXCIpO2lmKCFlLmhhcyhvKSYmKGUuYWRkKG8pLCF0aGlzLmNvbnRleHRHcm91cHNCeUlkLmhhcyhvKSkpe2NvbnN0IGU9bmV3IE1hcDt0aGlzLmNvbnRleHRHcm91cHNCeUlkLnNldChvLGUpfWF3YWl0IHN1cGVyLmpvaW5Db250ZXh0R3JvdXAoe2NvbnRleHRHcm91cElkOm8sdGFyZ2V0Om59LHIpLG4ubmFtZX1jYXRjaChlKXtKU09OLnN0cmluZ2lmeShuKSxlLnN0YWNrfX1nZXRDb250ZXh0R3JvdXBzKCl7cmV0dXJuWy4uLkFycmF5LmZyb20oZSkubWFwKChlPT4oe2lkOmUsZGlzcGxheU1ldGFkYXRhOnt9fSkpKV19c2V0Q29udGV4dEZvckdyb3VwKGUsdCl7aWYoIXRoaXMuY29udGV4dEdyb3Vwc0J5SWQuaGFzKHQpKXtjb25zdCBlPW5ldyBNYXA7dGhpcy5jb250ZXh0R3JvdXBzQnlJZC5zZXQodCxlKX1yZXR1cm4gc3VwZXIuc2V0Q29udGV4dEZvckdyb3VwKGUsdCl9fX0sUW89KGUsdCk9Pntjb25zdCBuPShlPT5zZShlKT9YbygpOkpvKCkpKHQpO3RyeXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP3Q9PmUobih0KSk6QXJyYXkuaXNBcnJheShlKT9bLi4uZSxuXTplPT5uZXcobihlKSl9Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKFwiV29ya3NwYWNlUGxhdGZvcm0uaW5pdCBFcnJvcjpcIixlKX19O2FzeW5jIGZ1bmN0aW9uIGVhKCl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGxvY2FsU3RvcmFnZSl0cnl7Y29uc3QgZT11dChMZS5MYXN0Rm9jdXNlZEJyb3dzZXJXaW5kb3cpO2lmKCFlKXJldHVybjtjb25zdCB0PUpTT04ucGFyc2UoZSk7aWYoYXdhaXQgbmUodCkpcmV0dXJuIHR9Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gZ2V0IGxhc3QgZm9jdXNlZCBicm93c2VyIHdpbmRvdzogJHtlfWApfX1hc3luYyBmdW5jdGlvbiB0YShlPWZpbi5tZS5pZGVudGl0eSl7YXdhaXQgUShlKSYmZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGxvY2FsU3RvcmFnZSl0cnl7Y29uc3QgdD1KU09OLnN0cmluZ2lmeShlKTtjdChMZS5MYXN0Rm9jdXNlZEJyb3dzZXJXaW5kb3csdCl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihcImZhaWxlZCB0byBzYXZlIGxhc3QgZm9jdXNlZCBicm93c2VyIHdpbmRvdzogXCIsZSl9fShlKX1jb25zdCBuYT1NZSgpKChhc3luYygpPT57Y29uc3QgZT1hd2FpdCBmaW4uUGxhdGZvcm0uZ2V0Q3VycmVudFN5bmMoKS5BcHBsaWNhdGlvbi5nZXRDaGlsZFdpbmRvd3MoKTtsZXQgdCxuPSExO2Zvcihjb25zdCByIG9mIGUpaWYoci5pZGVudGl0eS5uYW1lPT09Sy5Ccm93c2VyTWVudXx8ci5pZGVudGl0eS5uYW1lPT09Sy5Ccm93c2VyU2F2ZU1lbnU/dD1yOmF3YWl0IFEoci5pZGVudGl0eSkmJihuPSEwKSxuKWJyZWFrOyFuJiZ0JiZ0LmNsb3NlKCl9KSwxMDAse2xlYWRpbmc6ITEsdHJhaWxpbmc6ITB9KSxyYT1hc3luYygpPT57RygpLm9uKFwid2luZG93LWNsb3NlZFwiLG5hKX07bGV0IG9hPXt9O2NvbnN0IGFhPWFzeW5jKHthY3Rpb25JZDplLHBheWxvYWQ6dH0pPT57aWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygb2FbZV0pdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBhIGNvbmZpZ3VyZWQgZnVuY3Rpb24gZm9yIHRoZSBhY3Rpb24gJyR7ZX0nYCk7cmV0dXJuIG9hW2VdKHQpfSxpYT0oKT0+YGN1c3RvbS1jb250ZXh0LW1lbnUtJHtPdCgpLmlkZW50aXR5LnV1aWR9LSR7Tn1gLGxhPSgpPT5maW4uSW50ZXJBcHBsaWNhdGlvbkJ1cy5DaGFubmVsLmNvbm5lY3QoaWEoKSk7dmFyIHNhOyFmdW5jdGlvbihlKXtlLkxhYmVsPVwibm9ybWFsXCIsZS5TZXBhcmF0b3I9XCJzZXBhcmF0b3JcIixlLlN1Ym1lbnU9XCJzdWJtZW51XCIsZS5DaGVja2JveD1cImNoZWNrYm94XCJ9KHNhfHwoc2E9e30pKTtjb25zdCBjYT17dHlwZTpzYS5TZXBhcmF0b3IsZGF0YTp2b2lkIDB9O3ZhciB1YTshZnVuY3Rpb24oZSl7ZS5TYXZlPVwiU2F2ZVwiLGUuU2F2ZUFzPVwiU2F2ZUFzXCJ9KHVhfHwodWE9e30pKTt2YXIgZGE7IWZ1bmN0aW9uKGUpe2UuR2xvYmFsTWVudT1cImdsb2JhbC1tZW51XCIsZS5Db250ZXh0TWVudT1cImNvbnRleHQtbWVudVwiLGUuUmVuYW1lU3VwZXJ0YWI9XCJyZW5hbWUtc3VwZXJ0YWJcIixlLkFkZEVkaXRCb29rbWFyaz1cImFkZC1lZGl0LWJvb2ttYXJrXCIsZS5Ecm9wZG93bk1lbnU9XCJkcm9wZG93bi1tZW51XCJ9KGRhfHwoZGE9e30pKTtmdW5jdGlvbiBwYShlKXtyZXR1cm4gbmV3IFByb21pc2UoKCh0LG4pPT57ZS5vbmNvbXBsZXRlPWUub25zdWNjZXNzPSgpPT50KGUucmVzdWx0KSxlLm9uYWJvcnQ9ZS5vbmVycm9yPSgpPT5uKGUuZXJyb3IpfSkpfWZ1bmN0aW9uIGZhKGUsdCl7Y29uc3Qgbj1pbmRleGVkREIub3BlbihlKTtuLm9udXBncmFkZW5lZWRlZD0oKT0+bi5yZXN1bHQuY3JlYXRlT2JqZWN0U3RvcmUodCk7Y29uc3Qgcj1wYShuKTtyZXR1cm4oZSxuKT0+ci50aGVuKChyPT5uKHIudHJhbnNhY3Rpb24odCxlKS5vYmplY3RTdG9yZSh0KSkpKX1sZXQgaGE7ZnVuY3Rpb24gZ2EoKXtyZXR1cm4gaGF8fChoYT1mYShcImtleXZhbC1zdG9yZVwiLFwia2V5dmFsXCIpKSxoYX1mdW5jdGlvbiB2YShlLHQ9Z2EoKSl7cmV0dXJuIHQoXCJyZWFkb25seVwiLCh0PT5wYSh0LmdldChlKSkpKX1mdW5jdGlvbiBDYShlLHQsbj1nYSgpKXtyZXR1cm4gbihcInJlYWR3cml0ZVwiLChuPT4obi5wdXQodCxlKSxwYShuLnRyYW5zYWN0aW9uKSkpKX1mdW5jdGlvbiBtYShlLHQ9Z2EoKSl7cmV0dXJuIHQoXCJyZWFkd3JpdGVcIiwodD0+KHQuZGVsZXRlKGUpLHBhKHQudHJhbnNhY3Rpb24pKSkpfWZ1bmN0aW9uIHdhKGUsdCl7cmV0dXJuIGUub3BlbkN1cnNvcigpLm9uc3VjY2Vzcz1mdW5jdGlvbigpe3RoaXMucmVzdWx0JiYodCh0aGlzLnJlc3VsdCksdGhpcy5yZXN1bHQuY29udGludWUoKSl9LHBhKGUudHJhbnNhY3Rpb24pfWZ1bmN0aW9uIGJhKGU9Z2EoKSl7cmV0dXJuIGUoXCJyZWFkb25seVwiLChlPT57aWYoZS5nZXRBbGxLZXlzKXJldHVybiBwYShlLmdldEFsbEtleXMoKSk7Y29uc3QgdD1bXTtyZXR1cm4gd2EoZSwoZT0+dC5wdXNoKGUua2V5KSkpLnRoZW4oKCgpPT50KSl9KSl9ZnVuY3Rpb24geWEoZT1nYSgpKXtyZXR1cm4gZShcInJlYWRvbmx5XCIsKHQ9PntpZih0LmdldEFsbCYmdC5nZXRBbGxLZXlzKXJldHVybiBQcm9taXNlLmFsbChbcGEodC5nZXRBbGxLZXlzKCkpLHBhKHQuZ2V0QWxsKCkpXSkudGhlbigoKFtlLHRdKT0+ZS5tYXAoKChlLG4pPT5bZSx0W25dXSkpKSk7Y29uc3Qgbj1bXTtyZXR1cm4gZShcInJlYWRvbmx5XCIsKGU9PndhKGUsKGU9Pm4ucHVzaChbZS5rZXksZS52YWx1ZV0pKSkudGhlbigoKCk9Pm4pKSkpfSkpfWNvbnN0IHhhPWFzeW5jKGUsdCxuKT0+e2NvbnN0IHI9dXQoTGUuSGFzTW92ZWRTdG9yZSksbz1yP0pTT04ucGFyc2Uocik6e307aWYobyYmb1tuXSlyZXR1cm47b1tuXT0hMCxjdChMZS5IYXNNb3ZlZFN0b3JlLEpTT04uc3RyaW5naWZ5KG8pKTtjb25zdCBhPWF3YWl0IHlhKGUpO2F3YWl0IGZ1bmN0aW9uKGUsdD1nYSgpKXtyZXR1cm4gdChcInJlYWR3cml0ZVwiLCh0PT4oZS5mb3JFYWNoKChlPT50LnB1dChlWzFdLGVbMF0pKSkscGEodC50cmFuc2FjdGlvbikpKSl9KGEsdCl9LGthPShlLHQpPT5mYShlK1wiLVwiK2Zpbi5tZS51dWlkLHQpLFNhPShlLHQpPT57Y29uc3Qgbj1rYShlLHQpLHI9ZmEoZSx0KTtyZXR1cm4geGEocixuLGUpLG59LE9hPShlLHQ9XCJcIik9PmUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0LnRvTG93ZXJDYXNlKCkpLE1hPVImJkUmJlNhKFwib3BlbmZpbi1ob21lLXBhZ2VzXCIsXCJwYWdlc1wiKTthc3luYyBmdW5jdGlvbiBMYShlKXtpZighTWEpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGdldCBwYWdlIC0gSW5kZXhEQiBub3Qgc3VwcG9ydGVkXCIpO2NvbnN0IHQ9YXdhaXQgdmEoZSxNYSk7aWYodClyZXR1cm4gdC5wYWdlSWQ9ZS50b1N0cmluZygpLHQudGl0bGU9dC50aXRsZXx8dC5wYWdlSWQsdH1hc3luYyBmdW5jdGlvbiBfYShlKXtpZighTWEpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGdldCBwYWdlIGxpc3QgLSBJbmRleERCIG5vdCBzdXBwb3J0ZWRcIik7Y29uc3QgdD1hd2FpdCBiYShNYSksbj0oYXdhaXQgUHJvbWlzZS5hbGwodC5tYXAoKGU9PkxhKGUudG9TdHJpbmcoKSkpKSkpLmZpbHRlcigoZT0+ISFlKSk7cmV0dXJuIGU/bi5maWx0ZXIoKHQ9Pk9hKHQudGl0bGUsZSkpKTpufWFzeW5jIGZ1bmN0aW9uIFBhKHtwYWdlOmV9KXtpZighTWEpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGNyZWF0ZSBwYWdlIC0gSW5kZXhEQiBub3Qgc3VwcG9ydGVkXCIpO2F3YWl0IENhKGUucGFnZUlkLGUsTWEpfWFzeW5jIGZ1bmN0aW9uIEVhKGUpe2lmKCFNYSl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZGVsZXRlIHBhZ2UgLSBJbmRleERCIG5vdCBzdXBwb3J0ZWRcIik7YXdhaXQgbWEoZSxNYSl9YXN5bmMgZnVuY3Rpb24gamEoe3BhZ2VJZDplLHBhZ2U6dH0pe2lmKCFNYSl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gdXBkYXRlIHBhZ2UgLSBJbmRleERCIG5vdCBzdXBwb3J0ZWRcIik7aWYodm9pZCAwPT09YXdhaXQgTGEoZSkpdGhyb3cgbmV3IEVycm9yKFwicGFnZSBub3QgZm91bmRcIik7YXdhaXQgUGEoe3BhZ2U6dH0pLGUhPT10LnBhZ2VJZCYmYXdhaXQgRWEoZSl9Y29uc3QgUmE9UiYmRSYma2EoXCJvcGVuZmluLWVudGVycHJpc2UtdGFiLWhpc3RvcnlcIixcInJlbW92ZWQtdGFiLXN0YWNrXCIpLElhPWFzeW5jIGU9PntDYShEYXRlLm5vdygpLGUsUmEpfSxWYT1SJiZFJiZrYShcIm9wZW5maW4tZW50ZXJwcmlzZS1zaXRlLWhpc3RvcnlcIixcInZpc2l0ZWQtc2l0ZXNcIiksSGE9YXN5bmMgZT0+e2lmKFwid2Vic2l0ZVwiPT09ZS50eXBlKXtsZXQgdD1hd2FpdCB2YShlLnVybCxWYSk7dD8odC5pY29uPWUuaWNvbix0LnRpdGxlPWUudGl0bGUsdC50eXBlPWUudHlwZSx0LnZpc2l0Q291bnQ9KHQudmlzaXRDb3VudHx8MCkrMSk6dD17dXJsOmUudXJsLGljb246ZS5pY29uLHRpdGxlOmUudGl0bGUsdHlwZTplLnR5cGUsdmlzaXRDb3VudDoxfSx0LmFjY2Vzc1RpbWU9RGF0ZS5ub3coKSxDYSh0LnVybCx0LFZhKX19LEFhPWFzeW5jKCk9Pntjb25zdCBlPWF3YWl0IHlhKFZhKTtpZihlLmxlbmd0aD4wKXtlLnNvcnQoKChlLHQpPT50WzFdLnZpc2l0Q291bnQtZVsxXS52aXNpdENvdW50KSk7cmV0dXJuKGUubGVuZ3RoPjU/ZS5zbGljZSgwLDUpOmUpLm1hcCgoZT0+ZVsxXSkpfXJldHVybltdfSxUYT1hc3luYygpPT4oYXdhaXQgZmluLlN5c3RlbS5nZXRIb3N0U3BlY3MoKSkubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwid2luZG93c1wiKSxEYT0oKT0+KHt0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwiY29udGV4dE1lbnUuY2xvc2VXaW5kb3dcIiksZGF0YTp7dHlwZTpoLkNsb3NlV2luZG93fX0pLEJhPWU9Pih7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihlP1wiY29udGV4dE1lbnUucXVpdEVudGVycHJpc2VCcm93c2VyXCI6XCJjb250ZXh0TWVudS5xdWl0UGxhdGZvcm1cIiksZGF0YTp7dHlwZTpoLlF1aXR9fSksWmE9KCk9Pih7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihcImNvbnRleHRNZW51Lm5ld1dpbmRvd1wiKSxkYXRhOnt0eXBlOmguTmV3V2luZG93fX0pLCRhPWU9Pih7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihlP1wiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYlwiOlwiY29udGV4dE1lbnUuc2F2ZVBhZ2VcIiksZGF0YTp7dHlwZTpoLlNhdmVQYWdlfX0pLE5hPWU9Pih7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihlP1wiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYkFzXCI6XCJjb250ZXh0TWVudS5zYXZlUGFnZUFzXCIpLGRhdGE6e3R5cGU6aC5TYXZlUGFnZUFzfX0pLEZhPShlLHQpPT4oe3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4odD9cImVudGVycHJpc2VDb250ZXh0TWVudS5uZXdUYWJcIjpcImNvbnRleHRNZW51Lm5ld1BhZ2VcIiksZGF0YTp7dHlwZTpoLk5ld1BhZ2V9LGVuYWJsZWQ6ZX0pLFdhPSgpPT4oe2xhYmVsOlRuKFwiY29udGV4dE1lbnUuc3dpdGNoV29ya3NwYWNlXCIpfSksVWE9KCk9Pih7bGFiZWw6VG4oXCJjb250ZXh0TWVudS5kZWxldGVXb3Jrc3BhY2VcIil9KSx6YT0oKT0+KHtsYWJlbDpUbihcImNvbnRleHRNZW51LmFwcGVhcmFuY2VcIil9KSxHYT0oZSx0LG4pPT50Lm1hcCgodD0+e2NvbnN0IHI9dC53b3Jrc3BhY2VJZD09PWUud29ya3NwYWNlSWQ7cmV0dXJue2xhYmVsOnQudGl0bGUsdHlwZTpzYS5DaGVja2JveCxlbmFibGVkOiFyLGNoZWNrZWQ6cixkYXRhOnt0eXBlOm4sd29ya3NwYWNlSWQ6dC53b3Jrc3BhY2VJZH19fSkpLEthPWFzeW5jKCk9Pntjb25zdCBlPWF3YWl0IE90KCkuVGhlbWUuZ2V0U2VsZWN0ZWRTY2hlbWUoKTtyZXR1cm5be2xhYmVsOlRuKFwidGhlbWUubGlnaHRcIiksdHlwZTpzYS5DaGVja2JveCxjaGVja2VkOmU9PT1nLkxpZ2h0LGRhdGE6e3R5cGU6aC5BcHBlYXJhbmNlLHNjaGVtZTpnLkxpZ2h0fX0se2xhYmVsOlRuKFwidGhlbWUuZGFya1wiKSx0eXBlOnNhLkNoZWNrYm94LGNoZWNrZWQ6ZT09PWcuRGFyayxkYXRhOnt0eXBlOmguQXBwZWFyYW5jZSxzY2hlbWU6Zy5EYXJrfX0se2xhYmVsOlRuKFwidGhlbWUuc3lzdGVtXCIpLHR5cGU6c2EuQ2hlY2tib3gsY2hlY2tlZDplPT09Zy5TeXN0ZW0sZGF0YTp7dHlwZTpoLkFwcGVhcmFuY2Usc2NoZW1lOmcuU3lzdGVtfX1dfSxxYT1hc3luYyhlLHQ9W10pPT57Y29uc3Qgbj1hd2FpdCByZSgpLHtuZXdQYWdlVXJsOnJ9PWF3YWl0IERyKGUpLG89YXdhaXQoYXN5bmMgZT0+e2NvbnN0IHQ9cShlKSx7d29ya3NwYWNlUGxhdGZvcm06bn09YXdhaXQgdC5nZXRPcHRpb25zKCk7cmV0dXJuIG4/LmRpc2FibGVNdWx0aXBsZVBhZ2VzfSkoZSksYT1hd2FpdChhc3luYyBlPT57Y29uc3QgdD1xKGUpLHt3b3Jrc3BhY2VQbGF0Zm9ybTpufT1hd2FpdCB0LmdldE9wdGlvbnMoKTtyZXR1cm4gbj8uaXNMb2NrZWR9KShlKSxpPWF3YWl0IGxlKGUpLGw9W10scz10Lmxlbmd0aD4wO3ImJihsLnB1c2goWmEoKSksb3x8bC5wdXNoKEZhKCFhLGkpKSksbC5wdXNoKGNhKTtjb25zdCBjPU90KCksdT1hd2FpdCBjLmdldEN1cnJlbnRXb3Jrc3BhY2UoKSxkPWF3YWl0IGMuU3RvcmFnZS5nZXRXb3Jrc3BhY2VzKCkscD1kLmZpbmQoKGU9PmUud29ya3NwYWNlSWQ9PT11LndvcmtzcGFjZUlkKSk7bC5wdXNoKHt0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwiY29udGV4dE1lbnUucmVzdG9yZVwiKSxkYXRhOnt0eXBlOmguUmVzdG9yZUNoYW5nZXN9LGVuYWJsZWQ6ISFwfSksbC5wdXNoKHt0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwiY29udGV4dE1lbnUuc2F2ZVdvcmtzcGFjZVwiKSxkYXRhOnt0eXBlOmguU2F2ZVdvcmtzcGFjZX0sZW5hYmxlZDohIXB9KSxsLnB1c2goe3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4oXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlQXNcIiksZGF0YTp7dHlwZTpoLlNhdmVXb3Jrc3BhY2VBc319KSxsLnB1c2goe3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4oXCJjb250ZXh0TWVudS5yZW5hbWVXb3Jrc3BhY2VcIiksZGF0YTp7dHlwZTpoLlJlbmFtZVdvcmtzcGFjZX0sZW5hYmxlZDohIXB9KSxkLnNvbWUoKGU9PmUud29ya3NwYWNlSWQhPT11LndvcmtzcGFjZUlkKSk/bC5wdXNoKHtsYWJlbDpXYSgpLmxhYmVsLHN1Ym1lbnU6R2EodSxkLGguU3dpdGNoV29ya3NwYWNlKSxkYXRhOnZvaWQgMH0se2xhYmVsOlVhKCkubGFiZWwsc3VibWVudTpHYSh1LGQsaC5EZWxldGVXb3Jrc3BhY2UpLGRhdGE6dm9pZCAwfSk6bC5wdXNoKHtsYWJlbDpXYSgpLmxhYmVsLGVuYWJsZWQ6ITEsZGF0YTp2b2lkIDB9LHtsYWJlbDpVYSgpLmxhYmVsLGVuYWJsZWQ6ITEsZGF0YTp2b2lkIDB9KSxsLnB1c2goe2xhYmVsOlRuKFwiY29udGV4dE1lbnUuZG93bmxvYWRzXCIpLGRhdGE6e3R5cGU6aC5Eb3dubG9hZHN9fSk7Y29uc3QgZj1hd2FpdCBjLlRoZW1lLmdldFRoZW1lcygpO3JldHVybihmWzBdJiZcInBhbGV0dGVzXCJpbiBmWzBdfHwhZlswXXx8MD09PWYubGVuZ3RoKSYmbC5wdXNoKHtsYWJlbDp6YSgpLmxhYmVsLHN1Ym1lbnU6YXdhaXQgS2EoKSxkYXRhOnZvaWQgMH0pLGwucHVzaChjYSwkYShpKSxOYShpKSxhd2FpdChhc3luYyBlPT57Y29uc3QgdD1hd2FpdCBUYSgpO3JldHVybntsYWJlbDpUbihcImNvbnRleHRNZW51LnByaW50XCIpLHN1Ym1lbnU6W3t0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwiY29udGV4dE1lbnUuc3VibWVudS5wcmludFwiKSxkYXRhOnt0eXBlOmguUHJpbnR9LGVuYWJsZWQ6ZX0se3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4oXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50QWxsXCIpLGRhdGE6e3R5cGU6aC5QcmludEFsbH19LC4uLnQ/W2NhLHt0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwiY29udGV4dE1lbnUucHJpbnRTY3JlZW5cIiksZGF0YTp7dHlwZTpoLlByaW50U2NyZWVufX1dOltdXSxkYXRhOnZvaWQgMH19KShzKSksbj9bLi4ubCxEYSgpLGNhLHt0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwiY29udGV4dE1lbnUub3BlblN0b3JlZnJvbnRcIiksZGF0YTp7dHlwZTpoLk9wZW5TdG9yZWZyb250fX0sY2EsQmEoKV06Wy4uLmwsY2EsRGEoKSxjYSxCYSgpXX0sWWE9YXN5bmMoZSx0KT0+e2NvbnN0IG49dC5zZWxlY3RlZFZpZXdzWzBdLHI9ZmluLlZpZXcud3JhcFN5bmMobiksbz1hd2FpdChhc3luYyBlPT57Y29uc3R7bmV3VGFiVXJsOnR9PWF3YWl0IERyKGUpO2lmKCF0KXRocm93IG5ldyBFcnJvcihcIlRyeWluZyB0byBjcmVhdGUgYSBuZXcgcGFnZSB3aXRob3V0IGEgbmV3VGFiVXJsIHNldFwiKTtyZXR1cm57dXJsOnQsdGFyZ2V0OmUsdGl0bGU6XCJOZXcgVGFiXCJ9fSkoZSk7YXdhaXQgT3QoKS5jcmVhdGVWaWV3KG8sZSxyLmlkZW50aXR5KX0sSmE9YXN5bmMoZSx0KT0+e2NvbnN0IG49YXdhaXQoZT0+UHJvbWlzZS5hbGwoZS5tYXAoKGFzeW5jIGU9PmZpbi5WaWV3LndyYXBTeW5jKGUpLmdldEluZm8oKSkpKSkodCkse25ld1BhZ2VVcmw6cixuZXdUYWJVcmw6b309YXdhaXQgRHIoZSk7bi5mb3JFYWNoKChhc3luYyBlPT57ZS51cmwhPT1yJiZlLnVybCE9PW8mJmF3YWl0IGZpbi5TeXN0ZW0ub3BlblVybFdpdGhCcm93c2VyKGUudXJsKX0pKX0sWGE9KGUsdCk9Pnt0LmZvckVhY2goKGFzeW5jIHQ9Pntjb25zdCBuPWZpbi5WaWV3LndyYXBTeW5jKHQpO2F3YWl0KGFzeW5jKGUsdCk9Pntjb25zdHt1cmw6bn09YXdhaXQgdC5nZXRJbmZvKCkscj17Li4uYXdhaXQgdC5nZXRPcHRpb25zKCksdXJsOm4sdGFyZ2V0OmUsbmFtZTp2b2lkIDB9O2F3YWl0IE90KCkuY3JlYXRlVmlldyhyLGUsdC5pZGVudGl0eSl9KShlLG4pfSkpfSxRYT1hc3luYyhlLHQsbik9Pntjb25zdCByPXtuZXdDaGFubmVsSWQ6dCxzZWxlY3RlZFZpZXdzOm59Oyhhd2FpdCBRZShlKSkuZGlzcGF0Y2gob3QuQWRkVG9DaGFubmVsLHIpfSxlaT1hc3luYyhlLHQpPT57KGF3YWl0IFFlKGUpKS5kaXNwYXRjaChvdC5SZW1vdmVGcm9tQ2hhbm5lbCx0KX0sdGk9YXN5bmMoZSx0KT0+e2lmKCFlKXJldHVybjtjb25zdCBuPXQuaWRlbnRpdHkscj1maW4uV2luZG93LndyYXBTeW5jKG4pO3N3aXRjaChnZSh7dHlwZTpcIlZpZXcgVGFiIE1lbnVcIixhY3Rpb246XCJTZWxlY3QgTWVudSBJdGVtXCIsdmFsdWU6ZS50eXBlLHNraXBWYWx1ZUhhc2hpbmc6ITB9KSxlLnR5cGUpe2Nhc2Ugdy5CYWNrOmF3YWl0KGFzeW5jIGU9Pntjb25zdCB0PWUubWFwKChlPT5maW4uVmlldy53cmFwU3luYyhlKS5uYXZpZ2F0ZUJhY2soKSkpO2F3YWl0IFByb21pc2UuYWxsKHQpfSkodC5zZWxlY3RlZFZpZXdzKTticmVhaztjYXNlIHcuRm9yd2FyZDphd2FpdChhc3luYyBlPT57Y29uc3QgdD1lLm1hcCgoZT0+ZmluLlZpZXcud3JhcFN5bmMoZSkubmF2aWdhdGVGb3J3YXJkKCkpKTthd2FpdCBQcm9taXNlLmFsbCh0KX0pKHQuc2VsZWN0ZWRWaWV3cyk7YnJlYWs7Y2FzZSB3LlByaW50OmF3YWl0IFpvKHQuc2VsZWN0ZWRWaWV3cyk7YnJlYWs7Y2FzZSB3LlByaW50QWxsOmF3YWl0IHIucHJpbnQoe2NvbnRlbnQ6XCJ2aWV3c1wiLGluY2x1ZGVTZWxmOiExfSk7YnJlYWs7Y2FzZSB3LlByaW50U2NyZWVuOmF3YWl0IHIucHJpbnQoe2NvbnRlbnQ6XCJzY3JlZW5zaG90XCJ9KTticmVhaztjYXNlIHcuQ2xvc2VWaWV3czphd2FpdChhc3luYyhlLHQpPT57Y29uc3Qgbj0oYXdhaXQgT3QoKS5Ccm93c2VyLndyYXBTeW5jKGUpLmdldFBhZ2VzKCkpLmZpbmQoKGU9PmUuaXNBY3RpdmUpKSxyPWF3YWl0IGZpbi5XaW5kb3cud3JhcFN5bmMoZSkuZ2V0Q3VycmVudFZpZXdzKCk7aWYodC5sZW5ndGg9PT1yLmxlbmd0aC0obi5wYW5lbHM/P1tdKS5sZW5ndGgpcmV0dXJuIHZvaWQoYXdhaXQgUWUoZSkpLmRpc3BhdGNoKG90LkNsb3NlUGFnZSx7cGFnZUlkOm4/LnBhZ2VJZH0pO2NvbnN0IG89ZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCk7dC5mb3JFYWNoKChhc3luYyBlPT57YXdhaXQgby5jbG9zZVZpZXcoZSl9KSl9KShuLHQuc2VsZWN0ZWRWaWV3cyk7YnJlYWs7Y2FzZSB3Lk9wZW5XaXRoRGVmYXVsdEJyb3dzZXI6YXdhaXQgSmEobix0LnNlbGVjdGVkVmlld3MpO2JyZWFrO2Nhc2Ugdy5SZWxvYWRWaWV3czp0LnNlbGVjdGVkVmlld3MuZm9yRWFjaCgoYXN5bmMgZT0+e2NvbnN0IHQ9ZmluLlZpZXcud3JhcFN5bmMoZSk7YXdhaXQgdC5yZWxvYWQoKX0pKTticmVhaztjYXNlIHcuTmV3Vmlldzphd2FpdCBZYShuLHQpO2JyZWFrO2Nhc2Ugdy5EdXBsaWNhdGVWaWV3czpYYShuLHQuc2VsZWN0ZWRWaWV3cyk7YnJlYWs7Y2FzZSB3LkFkZFRvQ2hhbm5lbDpRYShuLGUub3B0aW9uLHQuc2VsZWN0ZWRWaWV3cyk7YnJlYWs7Y2FzZSB3LlJlbW92ZUZyb21DaGFubmVsOmVpKG4sdC5zZWxlY3RlZFZpZXdzKTticmVhaztjYXNlIHcuQ3VzdG9tOmlmKGUuYWN0aW9uKXtjb25zdCByPXtjYWxsZXJUeXBlOmsuVmlld1RhYkNvbnRleHRNZW51LHdpbmRvd0lkZW50aXR5Om4sc2VsZWN0ZWRWaWV3czp0LnNlbGVjdGVkVmlld3MsY3VzdG9tRGF0YTplLmFjdGlvbi5jdXN0b21EYXRhfTtPdCgpLl9pbnZva2VDdXN0b21BY3Rpb24oZS5hY3Rpb24uaWQscil9fX07bGV0IG5pPVwiUGxhdGZvcm1cIjtjb25zdCByaT1hc3luYygpPT5uaTtjb25zdCBvaT1hc3luYyhlLHQpPT57aWYoIWUpcmV0dXJuO2NvbnN0IG49dC5pZGVudGl0eSxyPWF3YWl0IFFlKG4pLG89T3QoKS5Ccm93c2VyLndyYXBTeW5jKG4pLGE9ZmluLldpbmRvdy53cmFwU3luYyhuKTtpZihnZSh7dHlwZTpcIkdsb2JhbCBNZW51XCIsYWN0aW9uOlwiU2VsZWN0IE1lbnUgSXRlbVwiLHZhbHVlOmUudHlwZSxza2lwVmFsdWVIYXNoaW5nOiEwLGRhdGE6e2FjdGlvbjplLmFjdGlvbj8uaWR9fSksYXdhaXQgbGUobikpe2NvbnN0IG49YXdhaXQoYXN5bmMoZSx0KT0+e2NvbnN0IG49dC5pZGVudGl0eSxyPU90KCkuQnJvd3Nlci53cmFwU3luYyhuKSxvPShhd2FpdCByLmdldFBhZ2VzKCkpLmZpbmQoKGU9PmUuaXNBY3RpdmUpKSxhPUZlKHsuLi5uLGxheW91dE5hbWU6by5sYXlvdXRDb250YWluZXJLZXl9KSxpPXQuc2VsZWN0ZWRWaWV3cztzd2l0Y2goZT8udHlwZSl7Y2FzZSBDLkxvY2s6YXdhaXQgci51cGRhdGVQYWdlKHtwYWdlSWQ6by5wYWdlSWQscGFnZTp7aXNMb2NrZWQ6IW8uaXNMb2NrZWR9fSk7YnJlYWs7Y2FzZSBDLkFkZFRvQ2hhbmVsOmUub3B0aW9uP2F3YWl0IFFhKG4sZS5vcHRpb24saSk6bnVsbD09PWUub3B0aW9uJiZhd2FpdCBlaShuLGkpO2JyZWFrO2Nhc2UgaC5OZXdXaW5kb3c6e2NvbnN0IGU9YXdhaXQgWnIobik7YXdhaXQgT3QoKS5Ccm93c2VyLmNyZWF0ZVdpbmRvdyh7d29ya3NwYWNlUGxhdGZvcm06e3BhZ2VzOltlXSx3aW5kb3dUeXBlOlwiZW50ZXJwcmlzZVwifX0pO2JyZWFrfWNhc2UgQy5QaW46e2NvbnN0e2Fsd2F5c09uVG9wOmV9PWF3YWl0IHIub3BlbmZpbldpbmRvdy5nZXRPcHRpb25zKCk7YXdhaXQgci5vcGVuZmluV2luZG93LnVwZGF0ZU9wdGlvbnMoe2Fsd2F5c09uVG9wOiFlfSk7YnJlYWt9Y2FzZSBDLlNob3dIaWRlVGFiczphd2FpdCBhLmlzU2hvd2luZ1RhYnMoKT9hd2FpdCBhLmhpZGUoKTphd2FpdCBhLnNob3coKTticmVhaztkZWZhdWx0OnJldHVybiExfXJldHVybiEwfSkoZSx0KTtpZihuKXJldHVybn1zd2l0Y2goZS50eXBlKXtjYXNlIGguTmV3V2luZG93Ontjb25zdHtuZXdQYWdlVXJsOmV9PWF3YWl0IERyKG4pO2lmKCFlKXRocm93IG5ldyBFcnJvcihcIlRyeWluZyB0byBjcmVhdGUgYSBuZXcgZW1wdHkgd2luZG93IHdpdGhvdXQgYSBuZXdQYWdlVXJsIHNldFwiKTtPdCgpLmNyZWF0ZVZpZXcoe3RhcmdldDp2b2lkIDAsdXJsOmV9KTticmVha31jYXNlIGguTmV3UGFnZTphd2FpdCBIbyhuKTticmVhaztjYXNlIGguQ2xvc2VXaW5kb3c6ci5kaXNwYXRjaChvdC5DbG9zZUJyb3dzZXJXaW5kb3cpO2JyZWFrO2Nhc2UgaC5TYXZlV29ya3NwYWNlOmF3YWl0IElvKG4pO2JyZWFrO2Nhc2UgaC5TYXZlUGFnZTphd2FpdCBBbyhuKTticmVhaztjYXNlIGguU2F2ZVBhZ2VBczphd2FpdCBUbyhuKTticmVhaztjYXNlIGguU2F2ZVdvcmtzcGFjZUFzOmF3YWl0IFZvKG4pO2JyZWFrO2Nhc2UgaC5SZW5hbWVXb3Jrc3BhY2U6by5fb3BlblNhdmVNb2RhbCh7bWVudVR5cGU6Uy5SRU5BTUVfV09SS1NQQUNFfSk7YnJlYWs7Y2FzZSBoLlN3aXRjaFdvcmtzcGFjZTphd2FpdChhc3luYyhlLHQpPT57Y29uc3Qgbj1PdCgpLHI9KGF3YWl0IG4uU3RvcmFnZS5nZXRXb3Jrc3BhY2VzKCkpLmZpbmQoKGU9PmUud29ya3NwYWNlSWQ9PT10LndvcmtzcGFjZUlkKSk7bi5hcHBseVdvcmtzcGFjZShyLHtza2lwUHJvbXB0OiExLHByb21wdENvbnRhaW5lcldpbmRvd0lkZW50aXR5OmV9KX0pKG4sZSk7YnJlYWs7Y2FzZSBoLkRlbGV0ZVdvcmtzcGFjZTphd2FpdChhc3luYyhlLHQpPT57Y29uc3Qgbj1PdCgpLHI9KGF3YWl0IG4uU3RvcmFnZS5nZXRXb3Jrc3BhY2VzKCkpLmZpbmQoKGU9PmUud29ya3NwYWNlSWQ9PT10LndvcmtzcGFjZUlkKSk7ciYmYXdhaXQgYm8oZSxyLnRpdGxlKSYmKGF3YWl0IG4uU3RvcmFnZS5kZWxldGVXb3Jrc3BhY2UodC53b3Jrc3BhY2VJZCksVHIoVG4oXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZURlbGV0ZWRcIiksZSkpfSkobixlKTticmVhaztjYXNlIGguRG93bmxvYWRzOmF3YWl0IEJvKG4pO2JyZWFrO2Nhc2UgaC5BcHBlYXJhbmNlOmF3YWl0IE90KCkuVGhlbWUuc2V0U2VsZWN0ZWRTY2hlbWUoZS5zY2hlbWUpO2JyZWFrO2Nhc2UgaC5RdWl0Ontjb25zdCBlPXJpKCk7YXdhaXQgeW8obixhd2FpdCBlKSYmZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkucXVpdCgpfWJyZWFrO2Nhc2UgaC5PcGVuU3RvcmVmcm9udDooYXN5bmMoKT0+e2F3YWl0IHJlKCkmJlgoSil9KSgpO2JyZWFrO2Nhc2UgaC5SZXN0b3JlQ2hhbmdlczp7Y29uc3QgZT1hd2FpdCBhc3luYyBmdW5jdGlvbigpe2NvbnN0IGU9T3QoKSx0PWF3YWl0IGUuZ2V0Q3VycmVudFdvcmtzcGFjZSgpO3JldHVybihhd2FpdCBlLlN0b3JhZ2UuZ2V0V29ya3NwYWNlcygpKS5maW5kKChlPT5lLndvcmtzcGFjZUlkPT09dC53b3Jrc3BhY2VJZCkpfSgpO2F3YWl0IHhvKG4pJiZhd2FpdCBTbyh7b3B0aW9uczp7c2tpcFByb21wdDohMH0sLi4uZX0pfWJyZWFrO2Nhc2UgaC5QcmludDphd2FpdCBabyh0LnNlbGVjdGVkVmlld3MpO2JyZWFrO2Nhc2UgaC5QcmludEFsbDphd2FpdCBhLnByaW50KHtjb250ZW50Olwidmlld3NcIixpbmNsdWRlU2VsZjohMX0pO2JyZWFrO2Nhc2UgaC5QcmludFNjcmVlbjphd2FpdCBhLnByaW50KHtjb250ZW50Olwic2NyZWVuc2hvdFwifSk7YnJlYWs7Y2FzZSBoLkN1c3RvbTppZihlLmFjdGlvbil7Y29uc3QgdD17Y2FsbGVyVHlwZTprLkdsb2JhbENvbnRleHRNZW51LHdpbmRvd0lkZW50aXR5Om4sY3VzdG9tRGF0YTplLmFjdGlvbi5jdXN0b21EYXRhfTtPdCgpLl9pbnZva2VDdXN0b21BY3Rpb24oZS5hY3Rpb24uaWQsdCl9ZWxzZSBjb25zb2xlLndhcm4oYEVuY291bnRlcmVkIGEgQ3VzdG9tIGNvbnRleHQgbWVudSBvcHRpb24gd2l0aCBhbiBcImFjdGlvblwiIHByb3BlcnR5IHdpdGggdmFsdWUgXCIke2UuYWN0aW9ufVwiYCl9fSxhaT1hc3luYyhlLHQsbik9Pntjb25zdCByPWF3YWl0IFFlKHQuaWRlbnRpdHkpLG89T3QoKSxhPWF3YWl0IGxlKCk7c3dpdGNoKGUmJmdlKHt0eXBlOlwiUGFnZSBUYWIgTWVudVwiLGFjdGlvbjpcIlNlbGVjdCBNZW51IEl0ZW1cIix2YWx1ZTplLnR5cGUsc2tpcFZhbHVlSGFzaGluZzohMH0pLGU/LnR5cGUpe2Nhc2Ugdi5TYXZlOmF3YWl0IEFvKHQuaWRlbnRpdHksdC5wYWdlSWQpO2JyZWFrO2Nhc2Ugdi5TYXZlQXM6YXdhaXQgVG8odC5pZGVudGl0eSx0LnBhZ2VJZCk7YnJlYWs7Y2FzZSB2Lk5ld1BhZ2U6YXdhaXQgSG8odC5pZGVudGl0eSk7YnJlYWs7Y2FzZSB2LkRlbGV0ZVBhZ2U6YXdhaXQoYXN5bmMoZSx0KT0+e2NvbnN0IG49T3QoKSxyPW4uQnJvd3Nlci53cmFwU3luYyhlKSxvPShhd2FpdCBuLlN0b3JhZ2UuZ2V0UGFnZXMoKSkuZmluZCgoZT0+ZS5wYWdlSWQ9PT10KSk7byYmYXdhaXQga28oZSxvLnRpdGxlKSYmKGF3YWl0IG4uU3RvcmFnZS5kZWxldGVQYWdlKG8ucGFnZUlkKSxhd2FpdCByLnJlbW92ZVBhZ2UodCksVHIoVG4oXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkRlbGV0ZWRcIiksZSxUbihcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlbkRlbGV0ZWRcIix7dGl0bGU6by50aXRsZX0pKSl9KSh0LmlkZW50aXR5LHQucGFnZUlkKTticmVhaztjYXNlIHYuUmVuYW1lOmlmKGF3YWl0IGxlKHQuaWRlbnRpdHkpKXtjb25zdCBlPU90KCkuQnJvd3Nlci53cmFwU3luYyh0LmlkZW50aXR5KTthd2FpdCBlLnNldEFjdGl2ZVBhZ2UodC5wYWdlSWQpO2NvbnN0IHI9YXdhaXQgbGEoKTthd2FpdCByLmRpc3BhdGNoKFwib3BlblwiLHtwYXJlbnRJZGVudGl0eTp0LmlkZW50aXR5LHR5cGU6ZGEuUmVuYW1lU3VwZXJ0YWIsYW5jaG9yQmVoYXZpb3I6bGkuQ2VudGVyLHg6bi5sZWZ0K24ud2lkdGgvMi0xNjQseTpuLmJvdHRvbS04LHBheWxvYWQ6e3BhZ2VJZDp0LnBhZ2VJZH19KX1lbHNlIGF3YWl0IG8uQnJvd3Nlci53cmFwU3luYyh0LmlkZW50aXR5KS5fb3BlblNhdmVNb2RhbCh7bWVudVR5cGU6Uy5SRU5BTUVfUEFHRSxpZDp0LnBhZ2VJZH0pO2JyZWFrO2Nhc2Ugdi5EdXBsaWNhdGU6ci5kaXNwYXRjaChvdC5EdXBsaWNhdGVQYWdlLHQucGFnZUlkKTticmVhaztjYXNlIHYuQ2xvc2U6YT9hd2FpdChhc3luYyhlLHQpPT57Y29uc3Qgbj1PdCgpLkJyb3dzZXIud3JhcFN5bmMoZSkscj1hd2FpdCBuLmdldFBhZ2VzKCk7Zm9yKGNvbnN0IG8gb2YgcilpZihvLnBhZ2VJZD09PXQpe2F3YWl0IG4ucmVtb3ZlUGFnZShvLnBhZ2VJZCksYXdhaXQgbi5fdHJhY2tSZW1vdmVkVGFiKHtpZGVudGl0eTplLHBhZ2U6b30pO2JyZWFrfX0pKHQuaWRlbnRpdHksdC5wYWdlSWQpOnIuZGlzcGF0Y2gob3QuQ2xvc2VQYWdlLHtwYWdlSWQ6dC5wYWdlSWR9KTticmVhaztjYXNlIHYuQ3VzdG9tOmlmKGUuYWN0aW9uKXtjb25zdCBuPXtjYWxsZXJUeXBlOmsuUGFnZVRhYkNvbnRleHRNZW51LHdpbmRvd0lkZW50aXR5OnQuaWRlbnRpdHkscGFnZUlkOnQucGFnZUlkLGN1c3RvbURhdGE6ZS5hY3Rpb24uY3VzdG9tRGF0YX07T3QoKS5faW52b2tlQ3VzdG9tQWN0aW9uKGUuYWN0aW9uLmlkLG4pfWVsc2UgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCBhIEN1c3RvbSBjb250ZXh0IG1lbnUgb3B0aW9uIHdpdGggYW4gXCJhY3Rpb25cIiBwcm9wZXJ0eSB3aXRoIHZhbHVlIFwiJHtlLmFjdGlvbn1cImApO2JyZWFrO2Nhc2Ugdi5SZWZyZXNoOmF3YWl0KGFzeW5jKGUsdCk9Pntjb25zdCBuPU90KCkscj1uLkJyb3dzZXIud3JhcFN5bmMoZSksbz0oYXdhaXQgci5nZXRQYWdlcygpKS5maW5kKChlPT50P2UucGFnZUlkPT09dDplLmlzQWN0aXZlKSk7bz8ubGF5b3V0Py5jb250ZW50JiZWdChvLmxheW91dC5jb250ZW50KS5mb3JFYWNoKChhc3luYyBlPT57KGF3YWl0IGZpbi5WaWV3LndyYXAoe3V1aWQ6bi5pZGVudGl0eS51dWlkLG5hbWU6ZS5uYW1lfSkpLnJlbG9hZCgpfSkpfSkodC5pZGVudGl0eSx0LnBhZ2VJZCk7YnJlYWs7Y2FzZSB2LkNsb3NlT3RoZXJzOmF3YWl0KGFzeW5jKGUsdCk9Pntjb25zdCBuPU90KCkuQnJvd3Nlci53cmFwU3luYyhlKSxyPWF3YWl0IG4uZ2V0UGFnZXMoKTtmb3IoY29uc3QgbyBvZiByKW8ucGFnZUlkIT09dCYmKGF3YWl0IG4ucmVtb3ZlUGFnZShvLnBhZ2VJZCksYXdhaXQgbi5fdHJhY2tSZW1vdmVkVGFiKHtpZGVudGl0eTplLHBhZ2U6b30pKX0pKHQuaWRlbnRpdHksdC5wYWdlSWQpO2JyZWFrO2Nhc2Ugdi5TYXZlV29ya3NwYWNlQXM6YXdhaXQgVm8odC5pZGVudGl0eSl9fSxpaT1hc3luYyhlLHQpPT57aWYoZT8udHlwZSl7Y29uc3Qgbj10LmlkZW50aXR5O3N3aXRjaChlLnR5cGUpe2Nhc2UgeS5TYXZlUGFnZTphd2FpdCBBbyhuKTticmVhaztjYXNlIHkuU2F2ZVdvcmtzcGFjZTphd2FpdCBJbyhuKTticmVhaztjYXNlIHkuU2F2ZVBhZ2VBczphd2FpdCBUbyhuKTticmVhaztjYXNlIHkuU2F2ZVdvcmtzcGFjZUFzOmF3YWl0IFZvKG4pO2JyZWFrO2Nhc2UgeS5DdXN0b206aWYoZS5hY3Rpb24pe2NvbnN0IG49e2NhbGxlclR5cGU6ay5TYXZlQnV0dG9uQ29udGV4dE1lbnUsd2luZG93SWRlbnRpdHk6dC5pZGVudGl0eSxwYWdlSWQ6dC5wYWdlSWQsY3VzdG9tRGF0YTplLmFjdGlvbi5jdXN0b21EYXRhfTtPdCgpLl9pbnZva2VDdXN0b21BY3Rpb24oZS5hY3Rpb24uaWQsbil9ZWxzZSBjb25zb2xlLndhcm4oYEVuY291bnRlcmVkIGEgQ3VzdG9tIGNvbnRleHQgbWVudSBvcHRpb24gd2l0aCBhbiBcImFjdGlvblwiIHByb3BlcnR5IHdpdGggdmFsdWUgXCIke2UuYWN0aW9ufVwiYCl9fX07dmFyIGxpOyFmdW5jdGlvbihlKXtlW2UuQm90dG9tTGVmdD0wXT1cIkJvdHRvbUxlZnRcIixlW2UuQm90dG9tUmlnaHQ9MV09XCJCb3R0b21SaWdodFwiLGVbZS5DZW50ZXI9Ml09XCJDZW50ZXJcIn0obGl8fChsaT17fSkpO2NvbnN0IHNpPWFzeW5jKGUsdCxuLHIpPT57Y29uc3R7eDpvLHk6YSxpZGVudGl0eTppLHRlbXBsYXRlOmwsY2FsbGJhY2s6c309ZSxjPWF3YWl0IGxlKGkpLHtkYXRhOnV9PWM/YXdhaXQoYXN5bmMoZSx0LG4scik9PntpZighRSl0aHJvdyBuZXcgRXJyb3IoXCJzaG93RW50ZXJwcmlzZUNvbnRleHRNZW51IGNhbiBvbmx5IGJlIHVzZWQgaW4gYSBIZXJlIGVudi4gQXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZCBkdXJpbmcgcHJlLXJlbmRlcmluZy5cIik7aWYoIXImJiFmaW4ubWUuaXNXaW5kb3cpdGhyb3cgbmV3IEVycm9yKFwic2hvd0VudGVycHJpc2VDb250ZXh0TWVudSBjYW4gb25seSBiZSB1c2VkIGluIGEgSGVyZSB3aW5kb3cuXCIpO2NvbnN0IG89ZmluLldpbmRvdy53cmFwU3luYyh7dXVpZDpZLnV1aWQsbmFtZTpLLkVudGVycHJpc2VDb250ZXh0TWVudX0pO2F3YWl0IG8uaXNTaG93aW5nKCkmJmF3YWl0IG8uYmx1cigpO2NvbnN0IGE9YXdhaXQgbGEoKSxpPW5ldyBQcm9taXNlKCgoZSx0KT0+e2EucmVnaXN0ZXIoXCJyZXNwb25zZVwiLCh0PT57ZSh0KX0pKX0pKSx7eDpsLHk6cyx0ZW1wbGF0ZTpjfT1lO3JldHVybiBhd2FpdCBhLmRpc3BhdGNoKFwib3BlblwiLHtwYXJlbnRJZGVudGl0eTpyLmlkZW50aXR5LHJlc3BvbnNlSWRlbnRpdHk6WSx0eXBlOnQsYW5jaG9yQmVoYXZpb3I6bix4OmwseTpzLHBheWxvYWQ6e3RlbXBsYXRlOmN9fSksaX0pKHt4Om8seTphLHRlbXBsYXRlOmx9LG4scixmaW4uV2luZG93LndyYXBTeW5jKGkpKTphd2FpdCBmdW5jdGlvbihlLHQpe2lmKCFFKXRocm93IG5ldyBFcnJvcihcInNob3dDb250ZXh0TWVudSBjYW4gb25seSBiZSB1c2VkIGluIGFuIE9wZW5GaW4gZW52LiBBdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kIGR1cmluZyBwcmUtcmVuZGVyaW5nLlwiKTtpZighdCYmIWZpbi5tZS5pc1dpbmRvdyl0aHJvdyBuZXcgRXJyb3IoXCJzaG93Q29udGV4dE1lbnUgY2FuIG9ubHkgYmUgdXNlZCBpbiBhbiBPcGVuRmluIHdpbmRvdy5cIik7cmV0dXJuKHR8fGZpbi5XaW5kb3cuZ2V0Q3VycmVudFN5bmMoKSkuc2hvd1BvcHVwTWVudShlKX0oe3g6byx5OmEsdGVtcGxhdGU6bH0sZmluLldpbmRvdy53cmFwU3luYyhpKSk7cyh1LGUpfTthc3luYyBmdW5jdGlvbiBjaShlLHQpe2NvbnN0IG49YXdhaXQgbGUoZS5pZGVudGl0eSkscj1uP2F3YWl0KGFzeW5jKHtpZGVudGl0eTplLHNlbGVjdGVkVmlld3M6dH0pPT57Y29uc3Qgbj1PdCgpLHI9bi5Ccm93c2VyLndyYXBTeW5jKGUpLG89KGF3YWl0IHIuZ2V0UGFnZXMoKSkuZmluZCgoZT0+ZS5pc0FjdGl2ZSkpLGE9QXQoby5sYXlvdXQuY29udGVudCk+MSxpPWF3YWl0IGxlKGUpLGw9YXdhaXQgbi5UaGVtZS5nZXRUaGVtZXMoKSxzPWxbMF0mJlwicGFsZXR0ZXNcImluIGxbMF18fCFsWzBdfHwwPT09bC5sZW5ndGgsYz17Li4uJGEoaSksZW5hYmxlZDphfSx1PXsuLi5OYShpKSxlbmFibGVkOmF9O3JldHVybltaYSgpLEZhKCEwLGkpLHt0eXBlOnNhLlNlcGFyYXRvcn0sYyx1LHt0eXBlOnNhLlNlcGFyYXRvcn0sLi4ucz9be3R5cGU6c2EuU3VibWVudSxsYWJlbDp6YSgpLmxhYmVsLHN1Ym1lbnU6YXdhaXQgS2EoKX1dOltdLHt0eXBlOnNhLlNlcGFyYXRvcn0sRGEoKSx7dHlwZTpzYS5TZXBhcmF0b3J9LEJhKCEwKV19KSh7aWRlbnRpdHk6ZS5pZGVudGl0eSxzZWxlY3RlZFZpZXdzOmUuc2VsZWN0ZWRWaWV3c30pOmF3YWl0IHFhKGUuaWRlbnRpdHksZS5zZWxlY3RlZFZpZXdzKSxvPWF3YWl0IHJpKCk7bnx8KHIuZmluZCgoZT0+ZS5kYXRhPy50eXBlPT09aC5RdWl0KSkubGFiZWw9YFF1aXQgJHtvfWApO2NvbnN0e3JlY3Q6YSwuLi5pfT1lLHt4OmwseTpzfT1uP3t4OmEubGVmdCthLndpZHRoLHk6YS5ib3R0b219OmUsYz17Li4uaSx4OmwseTpzLHRlbXBsYXRlOnIsY2FsbGJhY2s6b2l9O2F3YWl0IHRoaXMub3Blbkdsb2JhbENvbnRleHRNZW51KGMsdCl9YXN5bmMgZnVuY3Rpb24gdWkoZSx0KXtjb25zdCBuPXsuLi5lLGNhbGxiYWNrOnRpfTthd2FpdCB0aGlzLm9wZW5WaWV3VGFiQ29udGV4dE1lbnUobix0KX1hc3luYyBmdW5jdGlvbiBkaShlLHQpe2NvbnN0IG49YXdhaXQoYXN5bmMoZSx0KT0+e2NvbnN0IG49YXdhaXQgT3QoKS5TdG9yYWdlLmdldFBhZ2UoZSkscj1hd2FpdCBLbigpLG89YXdhaXQgbGUodCksYT1yLmZpbmQoKHQ9PnQucGFnZUlkPT09ZSkpLGk9QXQoYS5sYXlvdXQuY29udGVudCk+MSxsPWkse3dvcmtzcGFjZVBsYXRmb3JtOnN9PWF3YWl0IHEodCkuZ2V0T3B0aW9ucygpLGM9IShzLmlzTG9ja2VkfHxzLnByZXZlbnRQYWdlQ2xvc2V8fGEuY2xvc2VCdXR0b24/LmRpc2FibGVkfHxhLmNsb3NlQnV0dG9uPy5oaWRkZW4pLHU9W3t0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwiZW50ZXJwcmlzZUNvbnRleHRNZW51Lm5ld1RhYlwiKSxkYXRhOnt0eXBlOnYuTmV3UGFnZX19LGNhLHt0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwicmVsb2FkXCIpLGRhdGE6e3R5cGU6di5SZWZyZXNofX0se3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4oXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZHVwbGljYXRlXCIpLGRhdGE6e3R5cGU6di5EdXBsaWNhdGV9LGVuYWJsZWQ6IXMuaXNMb2NrZWR9LGNhLHt0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKGw/XCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlU3VwZXJ0YWJcIjpcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VUYWJcIiksZGF0YTp7dHlwZTp2LkNsb3NlfSxlbmFibGVkOmN9XSxkPVt7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihcImVudGVycHJpc2VDb250ZXh0TWVudS5uZXdUYWJcIiksZGF0YTp7dHlwZTp2Lk5ld1BhZ2V9fSxjYSx7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihcImVudGVycHJpc2VTYXZlTW9kYWwucmVuYW1lU3VwZXJ0YWJcIiksZGF0YTp7dHlwZTp2LlJlbmFtZX0sZW5hYmxlZDohcy5pc0xvY2tlZCYmISFuJiZpfSx7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihcImVudGVycHJpc2VDb250ZXh0TWVudS5kdXBsaWNhdGVcIiksZGF0YTp7dHlwZTp2LkR1cGxpY2F0ZX0sZW5hYmxlZDohcy5pc0xvY2tlZH0sY2Ese3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4oXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiXCIpLGRhdGE6e3R5cGU6di5TYXZlfSxlbmFibGVkOml9LHt0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYkFzXCIpLGRhdGE6e3R5cGU6di5TYXZlQXN9LGVuYWJsZWQ6aX0sY2Ese3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4oXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZGVsZXRlU3VwZXJ0YWJcIiksZGF0YTp7dHlwZTp2LkRlbGV0ZVBhZ2V9LGVuYWJsZWQ6ISFufSxjYSx7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihsP1wiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVN1cGVydGFiXCI6XCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlVGFiXCIpLGRhdGE6e3R5cGU6di5DbG9zZX0sZW5hYmxlZDpjfV0scD1be3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4oXCJjb250ZXh0TWVudS5zYXZlUGFnZVwiKSxkYXRhOnt0eXBlOnYuU2F2ZX0sZW5hYmxlZDohMH0se3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4oXCJzYXZlTWVudS5zYXZlUGFnZUFzXCIpLGRhdGE6e3R5cGU6di5TYXZlQXN9LGVuYWJsZWQ6ITB9LHt0eXBlOnNhLkxhYmVsLGxhYmVsOlwiU2F2ZSBXb3Jrc3BhY2UgQXNcIixkYXRhOnt0eXBlOnYuU2F2ZVdvcmtzcGFjZUFzfX0se3R5cGU6c2EuTGFiZWwsbGFiZWw6XCJSZWZyZXNoXCIsZGF0YTp7dHlwZTp2LlJlZnJlc2h9fSxjYSx7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihcInNhdmVNb2RhbC5yZW5hbWVQYWdlXCIpLGRhdGE6e3R5cGU6di5SZW5hbWV9LGVuYWJsZWQ6ISFufSx7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihcImNvbnRleHRNZW51LmR1cGxpY2F0ZVBhZ2VcIiksZGF0YTp7dHlwZTp2LkR1cGxpY2F0ZX0sZW5hYmxlZDohcy5pc0xvY2tlZH0sY2Ese3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4oXCJzYXZlTW9kYWwuY2xvc2VQYWdlXCIpLGRhdGE6e3R5cGU6di5DbG9zZX0sZW5hYmxlZDpjfV07cmV0dXJuIG8/bD9kOnU6cH0pKGUucGFnZUlkLGUuaWRlbnRpdHkpLHI9ey4uLmUsdGVtcGxhdGU6bixjYWxsYmFjazoodCxuKT0+e2FpKHQsbixlLnJlY3QpfX07YXdhaXQgdGhpcy5vcGVuUGFnZVRhYkNvbnRleHRNZW51KHIsdCl9YXN5bmMgZnVuY3Rpb24gcGkoZSx0KXtjb25zdCBuPXsuLi5lLHRlbXBsYXRlOmF3YWl0KGFzeW5jKCk9Pntjb25zdCBlPU90KCksdD1hd2FpdCBlLmdldEN1cnJlbnRXb3Jrc3BhY2UoKSxuPShhd2FpdCBlLlN0b3JhZ2UuZ2V0V29ya3NwYWNlcygpKS5maW5kKChlPT5lLndvcmtzcGFjZUlkPT09dC53b3Jrc3BhY2VJZCkpO3JldHVyblt7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VcIiksZW5hYmxlZDohIW4sZGF0YTp7dHlwZTp5LlNhdmVXb3Jrc3BhY2V9fSx7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihcInNhdmVNZW51LnNhdmVXb3Jrc3BhY2VBc1wiKSxkYXRhOnt0eXBlOnkuU2F2ZVdvcmtzcGFjZUFzfX0se3R5cGU6c2EuU2VwYXJhdG9yLGRhdGE6dm9pZCAwfSx7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihcImNvbnRleHRNZW51LnNhdmVQYWdlXCIpLGRhdGE6e3R5cGU6eS5TYXZlUGFnZX19LHt0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwic2F2ZU1lbnUuc2F2ZVBhZ2VBc1wiKSxkYXRhOnt0eXBlOnkuU2F2ZVBhZ2VBc319XX0pKCksY2FsbGJhY2s6aWl9O2F3YWl0IHRoaXMub3BlblNhdmVCdXR0b25Db250ZXh0TWVudShuLHQpfWNvbnN0IGZpPVImJkUmJmthKFwiZG9jay1wcm92aWRlci1jb25maWdzXCIsXCJkb2NrLXByb3ZpZGVyLWNvbmZpZ3NcIik7YXN5bmMgZnVuY3Rpb24gaGkoZSl7aWYoIWZpKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBnZXQgRG9jayBwcm92aWRlciBjb25maWcgLSBJbmRleERCIG5vdCBzdXBwb3J0ZWRcIik7cmV0dXJuIGF3YWl0IHZhKGUsZmkpLmNhdGNoKChlPT57Y29uc29sZS53YXJuKFwiRmFpbGVkIHRvIHJldHJpZXZlIERvY2sgcHJvdmlkZXIgY29uZmlnIGZyb20gSW5kZXhlZERCXCIsZSl9KSl9YXN5bmMgZnVuY3Rpb24gZ2koZSl7YXdhaXQgQ2EoZS5pZCxlLGZpKX1jb25zdCB2aT1SJiZFJiZTYShcIm9wZW5maW4td29ya3NwYWNlLXBsYXRmb3JtLXdvcmtzcGFjZXNcIixcIndvcmtzcGFjZXNcIik7YXN5bmMgZnVuY3Rpb24gQ2koZSl7aWYoIXZpKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBnZXQgd29ya3NwYWNlIC0gSW5kZXhEQiBub3Qgc3VwcG9ydGVkXCIpO2NvbnN0IHQ9YXdhaXQgdmEoZSx2aSk7aWYodClyZXR1cm4gdC53b3Jrc3BhY2VJZD1lLnRvU3RyaW5nKCksdC50aXRsZT10LnRpdGxlfHx0LndvcmtzcGFjZUlkLHR9YXN5bmMgZnVuY3Rpb24gbWkoZSl7aWYoIXZpKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBnZXQgd29ya3NwYWNlcyAtIEluZGV4REIgbm90IHN1cHBvcnRlZFwiKTtjb25zdCB0PWF3YWl0IGJhKHZpKSxuPShhd2FpdCBQcm9taXNlLmFsbCh0Lm1hcCgoZT0+Q2koZS50b1N0cmluZygpKSkpKSkuZmlsdGVyKChlPT4hIWUpKTtyZXR1cm4gZT9uLmZpbHRlcigodD0+T2EodC50aXRsZSxlKSkpOm59YXN5bmMgZnVuY3Rpb24gd2koe3dvcmtzcGFjZTplfSl7aWYoIXZpKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBjcmVhdGUgd29ya3NwYWNlIC0gSW5kZXhEQiBub3Qgc3VwcG9ydGVkXCIpO2NvbnN0IHQ9KGF3YWl0IG1pKCkpLmZpbmQoKHQ9PnQudGl0bGU9PT1lLnRpdGxlKSk7aWYodCYmdC53b3Jrc3BhY2VJZCE9PWUud29ya3NwYWNlSWQpdGhyb3cgbmV3IEVycm9yKGBXb3Jrc3BhY2Ugd2l0aCB0aXRsZSAnJHtlLnRpdGxlfScgYWxyZWFkeSBleGlzdHMuYCk7YXdhaXQgQ2EoZS53b3Jrc3BhY2VJZCxlLHZpKX1hc3luYyBmdW5jdGlvbiBiaShlKXtpZighdmkpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgLSBJbmRleERCIG5vdCBzdXBwb3J0ZWRcIik7YXdhaXQgbWEoZSx2aSl9YXN5bmMgZnVuY3Rpb24geWkoe3dvcmtzcGFjZUlkOmUsd29ya3NwYWNlOnR9KXtpZighdmkpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHVwZGF0ZSB3b3Jrc3BhY2VzIC0gSW5kZXhEQiBub3Qgc3VwcG9ydGVkXCIpO2lmKCFhd2FpdCBDaShlKSl0aHJvdyBuZXcgRXJyb3IoXCJ3b3Jrc3BhY2Ugbm90IGZvdW5kXCIpO2F3YWl0IHdpKHt3b3Jrc3BhY2U6dH0pLGUhPT10LndvcmtzcGFjZUlkJiZhd2FpdCBiaShlKX1jb25zdCB4aT1lPT57Y29uc3QgdD1lLmxheW91dCxuPXQuY29udGVudD9WdCh0LmNvbnRlbnQpOltdLHI9bi5sZW5ndGg7cmV0dXJuIHI+MT97Li4uZSxzaW5nbGVWaWV3TmFtZTpudWxsfToxPT09cj97Li4uZSxzaW5nbGVWaWV3TmFtZTpuWzBdLm5hbWV9OnZvaWQgMH0sa2k9YXN5bmMoZSx0LG4pPT57Y29uc3Qgcj1hd2FpdCBPdCgpLkJyb3dzZXIuZ2V0QWxsQXR0YWNoZWRQYWdlcygpLG89bmV3IFNldChyLm1hcCgoZT0+ZS50aXRsZSkpLmZpbHRlcigoZT0+ISFlKSkpLGE9bmV3IFNldChyLm1hcCgoZT0+ZS5wYWdlSWQpKS5maWx0ZXIoKGU9PiEhZSkpKSxpPXQ/LmRlZmF1bHRQYWdlT3B0aW9ucyxsPVwiZW50ZXJwcmlzZVwiPT09bj8ud29ya3NwYWNlUGxhdGZvcm0/LndpbmRvd1R5cGV8fFwiZW50ZXJwcmlzZVwiPT09dD8uZGVmYXVsdFdpbmRvd09wdGlvbnM/LndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlO3JldHVybiBlLm1hcCgoZT0+e2lmKFwicmVwYXJlbnRcIj09PWUubXVsdGlJbnN0YW5jZVZpZXdCZWhhdmlvcilyZXR1cm57Li4uZSxsYXlvdXRDb250YWluZXJLZXk6SWUoKX07KChlLHQpPT57ZS5wYWdlSWR8fD1JZSgpLHQuaGFzKGUucGFnZUlkKSYmKGNvbnNvbGUud2FybihcIlBhZ2VJRCBjb2xsaXNpb24gZGV0ZWN0ZWQuIEFsbCBQYWdlIElEcyBzaG91bGQgYmUgdW5pcXVlLiBBIHJhbmRvbSBuZXcgcGFnZUlkIHdpbGwgYmUgZ2VuZXJhdGVkXCIpLGUucGFnZUlkPUllKCkpLHQuYWRkKGUucGFnZUlkKX0pKGUsYSksbD9lLmljb25Vcmw9YCR7Wn0vaWNvbnMvZW50ZXJwcmlzZS1wYWdlLnN2Z2A6ZS50aXRsZT1HbihlLnRpdGxlLEFycmF5LmZyb20oby5rZXlzKCkpKSxvLmFkZChlLnRpdGxlKSxlLnBhbmVscz8ucmVkdWNlKCgoZSx0KT0+e2NvbnN0IG49T2JqZWN0LnZhbHVlcyhwKTtpZighbi5pbmNsdWRlcyh0LnBvc2l0aW9uKSl0aHJvdyBuZXcgRXJyb3IoYEVuY291bnRlcmVkIGEgcGFuZWwgd2l0aCB1bnN1cHBvcnRlZCBwb3NpdGlvbiBcIiR7dC5wb3NpdGlvbn1cIi4gU3VwcG9ydGVkIHBvc2l0aW9ucyBhcmU6ICR7bi50b1N0cmluZygpfWApO2lmKDE9PWVbdC5wb3NpdGlvbl0pdGhyb3cgbmV3IEVycm9yKGBGb3VuZCBtb3JlIHRoYW4gMSBwYW5lbCBhdCBwb3NpdGlvbjogJHt0LnBvc2l0aW9ufS4gT25seSAxIHBhbmVsIGF0IGEgZ2l2ZW4gcG9zaXRpb24gaXMgY3VycmVudGx5IHN1cHBvcnRlZC5gKTtyZXR1cm57Li4uZSxbdC5wb3NpdGlvbl06ZVt0LnBvc2l0aW9uXSsxfX0pLHtbcC5MZWZ0XTowLFtwLlJpZ2h0XTowLFtwLlRvcF06MCxbcC5Cb3R0b21dOjB9KTtjb25zdCByPVwicGFuZWxzXCJpbiBlP2UucGFuZWxzOmk/LnBhbmVscztsZXQgcz0oYz1lLmxheW91dCx1PXQ/LmRlZmF1bHRWaWV3T3B0aW9ucyxQdCh7Li4uY30sKGU9PkV0KGUsdSkpKSk7dmFyIGMsdTtjb25zdCBkPSgoZSx0LG4pPT57aWYobilyZXR1cm4gT2k7Y29uc3Qgcj10Py53b3Jrc3BhY2VQbGF0Zm9ybT8ubmV3VGFiVXJsO2lmKHIpcmV0dXJuIHI7Y29uc3Qgbz1lPy5kZWZhdWx0V2luZG93T3B0aW9ucz8ud29ya3NwYWNlUGxhdGZvcm0/Lm5ld1RhYlVybDtyZXR1cm4gb3x8dm9pZCAwfSkodCxuLGwpO2QmJiFzPy5zZXR0aW5ncz8ubmV3VGFiQnV0dG9uJiYocz17Li4ucyxzZXR0aW5nczp7Li4ucz8uc2V0dGluZ3MsbmV3VGFiQnV0dG9uOnt1cmw6ZH19fSk7cmV0dXJuey4uLmksLi4uZSxwYW5lbHM6ciYmJG4ociksbGF5b3V0Q29udGFpbmVyS2V5OkllKCksbGF5b3V0OnMsaXNMYXlvdXRDcmVhdGVkOiExfX0pKX0sU2k9WitfLkJyb3dzZXIsT2k9U2krXCJlbnRlcnByaXNlL2xhbmRpbmcvXCIsTWk9e2JhY2tncm91bmRUaHJvdHRsaW5nOiEwLHVybDpTaSxjb250ZXh0TWVudTohMCxjbG9zZU9uTGFzdFZpZXdSZW1vdmVkOiExLHBlcm1pc3Npb25zOntTeXN0ZW06e29wZW5VcmxXaXRoQnJvd3Nlcjp7ZW5hYmxlZDohMCxwcm90b2NvbHM6W1wibWFpbHRvXCJdfX19fSxMaT17ZGltZW5zaW9uczp7Ym9yZGVyV2lkdGg6MyxoZWFkZXJIZWlnaHQ6MzB9fSxfaT0oWS51dWlkLEsuQnJvd3NlckFkZHJlc3NTZWFyY2hQcmVmaXgpO2FzeW5jIGZ1bmN0aW9uIFBpKGUsdCxuKXtsZXQgcj1lO2NvbnN0IG89XCJlbnRlcnByaXNlXCI9PT1yLndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlfHxcImVudGVycHJpc2VcIj09PXQ/LmRlZmF1bHRXaW5kb3dPcHRpb25zPy53b3Jrc3BhY2VQbGF0Zm9ybT8ud2luZG93VHlwZTtpZihyLmxheW91dCYmIXIud29ya3NwYWNlUGxhdGZvcm0/LnBhZ2VzPy5sZW5ndGgpe2NvbnN0IGU9YXdhaXQgdXIoKSxuPXsuLi5hd2FpdCAkZShlLHIubGF5b3V0KSxpc0FjdGl2ZTohMH07ci53b3Jrc3BhY2VQbGF0Zm9ybXx8PXt9LHIud29ya3NwYWNlUGxhdGZvcm0ucGFnZXM9YXdhaXQga2koW25dLHQscil9Y29uc3QgYT1uPy50aGVtZXM/LlswXTtpZihyLndvcmtzcGFjZVBsYXRmb3JtPy5wYWdlcz8ubGVuZ3RoKXtjb25zdCBlPWF3YWl0IGtpKHIud29ya3NwYWNlUGxhdGZvcm0ucGFnZXMsdCxyKSxpPWUsbD0oZT0+e2lmKCFlKXJldHVybjtsZXQgdD1lLmZpbmQoKGU9PmUuaXNBY3RpdmUpKTtyZXR1cm4hdCYmZS5sZW5ndGg+MCYmKGVbMF0uaXNBY3RpdmU9ITAsdD1lWzBdKSx0fSkoaSk7aWYoaS5mb3JFYWNoKChlPT57ZS5wYWdlSWQhPT1sPy5wYWdlSWQmJihlLmlzQWN0aXZlPSExKX0pKSxhd2FpdCBObihpKSxyLndvcmtzcGFjZVBsYXRmb3JtLnBhZ2VzPWUscj1rZSh7fSwoZT0+KHtjb250ZXh0TWVudU9wdGlvbnM6e2VuYWJsZWQ6ITF9LGV4cGVyaW1lbnRhbDp7c2hvd0Zhdmljb25zOiEwLGRlZmF1bHRGYXZpY29uVXJsOmU/XCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFQLy8vd0FBQUNINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQ1JBRUFPdz09XCI6YCR7Wn0vaWNvbnMvZGVmYXVsdEZhdmljb24uc3ZnYH0sdmlld1Zpc2liaWxpdHk6e3Nob3dWaWV3c09uU3BsaXR0ZXJEcmFnOntlbmFibGVkOiEwfSxzaG93Vmlld3NPbldpbmRvd1Jlc2l6ZTp7ZW5hYmxlZDohMH19fSkpKG8pLHQ/LmRlZmF1bHRXaW5kb3dPcHRpb25zLHIsTWkpLGwubGF5b3V0PWtlKGwubGF5b3V0LExpKSxhc3luYyBmdW5jdGlvbihlKXtpZihlLmljb258fGUudGFza2Jhckljb24pe2NvbnN0IHQ9ZmluLkFwcGxpY2F0aW9uLmdldEN1cnJlbnRTeW5jKCksbj1hd2FpdChhd2FpdCB0LmdldFdpbmRvdygpKS5nZXRPcHRpb25zKCk7ZS50YXNrYmFySWNvbkdyb3VwfHw9bi50YXNrYmFySWNvbkdyb3VwfHxmaW4ubWUuaWRlbnRpdHkudXVpZH1pZihlLndvcmtzcGFjZVBsYXRmb3JtLmljb24paWYoXCJvYmplY3RcIj09dHlwZW9mIGUud29ya3NwYWNlUGxhdGZvcm0uaWNvbil7Y29uc3QgdD13aW5kb3cubWF0Y2hNZWRpYShcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIik7ZS5pY29uPXQubWF0Y2hlcz9lLndvcmtzcGFjZVBsYXRmb3JtLmljb24uZGFyazplLndvcmtzcGFjZVBsYXRmb3JtLmljb24ubGlnaHR9ZWxzZSBlLmljb249ZS53b3Jrc3BhY2VQbGF0Zm9ybS5pY29ufShyKSwhci5iYWNrZ3JvdW5kQ29sb3ImJmEpaWYoXCJwYWxldHRlXCJpbiBhKXIuYmFja2dyb3VuZENvbG9yPWE/LnBhbGV0dGU/LmJhY2tncm91bmQyfHxhPy5wYWxldHRlPy5iYWNrZ3JvdW5kUHJpbWFyeTtlbHNle2NvbnN0IGU9bi5zZWxlY3RlZFNjaGVtZT09PWcuRGFya3x8bi5zZWxlY3RlZFNjaGVtZT09PWcuU3lzdGVtJiZ3aW5kb3cubWF0Y2hNZWRpYShcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIik/YT8ucGFsZXR0ZXMuZGFyazphPy5wYWxldHRlcy5saWdodDtyLmJhY2tncm91bmRDb2xvcj1lPy5iYWNrZ3JvdW5kMnx8ZT8uYmFja2dyb3VuZFByaW1hcnl9cj1qcihyLCEwKTtjb25zdCBzPWF3YWl0IFByKCk7cyYmKHIudXJsPXMrXy5Ccm93c2VyKSxyLmxheW91dD1sLmxheW91dCxyLmxheW91dFNuYXBzaG90PSgoZSx0KT0+KHtsYXlvdXRzOmUucmVkdWNlKCgoZSxuKT0+e2lmKCFuLmlzQWN0aXZlKXtpZighdClyZXR1cm4gZTtpZigheGkobikuc2luZ2xlVmlld05hbWUpcmV0dXJuIGV9cmV0dXJuIGVbbi5sYXlvdXRDb250YWluZXJLZXldPW4ubGF5b3V0LGV9KSx7fSkscGFnZXM6ZX0pKShyLndvcmtzcGFjZVBsYXRmb3JtLnBhZ2VzLG8pLHIud29ya3NwYWNlUGxhdGZvcm0ud2luZG93VHlwZT1yLndvcmtzcGFjZVBsYXRmb3JtLndpbmRvd1R5cGU/P3guQnJvd3Nlcn1pZihyLmNvcm5lclJvdW5kaW5nJiZkZWxldGUgci5jb3JuZXJSb3VuZGluZyxyLm5hbWV8fHIubGF5b3V0U25hcHNob3Q/ci5jb250ZXh0TWVudU9wdGlvbnM/LnRlbXBsYXRlPy5sZW5ndGg+MD9yLmNvbnRleHRNZW51T3B0aW9ucy50ZW1wbGF0ZT1yLmNvbnRleHRNZW51T3B0aW9ucy50ZW1wbGF0ZS5maWx0ZXIoKGU9PlwicHJpbnRcIiE9PWUpKTpyLmNvbnRleHRNZW51T3B0aW9ucz17dGVtcGxhdGU6W10sZW5hYmxlZDohMX06ci5uYW1lPWAke0suQ2xhc3NpY1dpbmRvd30tJHtJZSgpfWAsci53b3Jrc3BhY2VQbGF0Zm9ybSYmbiYmKHIud29ya3NwYWNlUGxhdGZvcm0uX3RoZW1lRGF0YT1uKSxvKXtyLndvcmtzcGFjZVBsYXRmb3JtLm5ld1BhZ2VVcmw9T2ksci53b3Jrc3BhY2VQbGF0Zm9ybS5uZXdUYWJVcmw9T2ksci5sYXlvdXQmJihyLmxheW91dC5kaW1lbnNpb25zLmJvcmRlcldpZHRoPTQsci5sYXlvdXQuZGltZW5zaW9ucy5oZWFkZXJIZWlnaHQ9MjgpLHIubmFtZT1yLm5hbWV8fGAke0suQnJvd3NlcldpbmRvd30tJHtJZSgpfWA7Y29uc3QgZT1faStyLm5hbWUsdD1maW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudFN5bmMoKTtpZighKGF3YWl0IHQuZ2V0Vmlld3MoKSkuc29tZSgodD0+dC5pZGVudGl0eS5uYW1lPT09ZSkpJiZyLm5hbWUuc3RhcnRzV2l0aChLLkJyb3dzZXJXaW5kb3cpKXtjb25zdCB0PWF3YWl0IFByKCkrXy5Ccm93c2VyUG9wdXBNZW51QWRkcmVzc1NlYXJjaFJlc3VsdHNWaWV3Oyhhd2FpdCBmaW4uVmlldy5jcmVhdGUoe25hbWU6ZSxjb250ZXh0TWVudU9wdGlvbnM6e2VuYWJsZWQ6ITB9LHVybDp0LHRhcmdldDpmaW4ubWUuaWRlbnRpdHksYm91bmRzOnt0b3A6MCxsZWZ0OjAsd2lkdGg6MCxoZWlnaHQ6MH19KSkubmF2aWdhdGUodCl9fXJldHVybiByfWNvbnN0IEVpPWFzeW5jKGUsdCk9Pntjb25zdCBuPXt1dWlkOnQudXVpZCxuYW1lOnQubmFtZX07YXdhaXQgeW8obixlLnRpdGxlPz9hd2FpdCByaSgpLGUuc2hvdWxkQ2VudGVyT25Nb25pdG9yKSYmZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkucXVpdCgpfSxqaT1lPT57Y29uc3QgdD1lLm5hbWU9PT1LLkhvbWUsbj1lLm5hbWU/LnN0YXJ0c1dpdGgoSy5Ib21lSW50ZXJuYWwpLHI9ZS5uYW1lPy5zdGFydHNXaXRoKEsuQnJvd3Nlck1lbnUpfHxlLm5hbWU/LnN0YXJ0c1dpdGgoSy5Ccm93c2VyU2F2ZU1lbnUpO3JldHVybiF0JiYhbiYmIXJ9O2NvbnN0IFJpPWU9PkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZSkpO2FzeW5jIGZ1bmN0aW9uIElpKGUsdCxuKXtjb25zdCByPWUubWFuaWZlc3RVcmw/YXdhaXQgdCh7bWFuaWZlc3RVcmw6ZS5tYW5pZmVzdFVybH0sbik6dm9pZCAwO2lmKHI/LmludGVyb3AmJmUuaW50ZXJvcCl7Y29uc3QgdD17Li4uZSwuLi5yLGludGVyb3A6ZS5pbnRlcm9wfTtyZXR1cm4gZGVsZXRlIHQubWFuaWZlc3RVcmwsdH1yZXR1cm4gZX1jb25zdCBWaT1lPT57Y29uc3QgdD1SaShlKTtyZXR1cm4gdC5faW50ZXJuYWxXb3Jrc3BhY2VEYXRhPy5icm93c2VyTmF2aWdhdGlvbkJ1dHRvbnMmJih0LndvcmtzcGFjZVBsYXRmb3JtPXsuLi50LndvcmtzcGFjZVBsYXRmb3JtLGJyb3dzZXJOYXZpZ2F0aW9uQnV0dG9uczp0Ll9pbnRlcm5hbFdvcmtzcGFjZURhdGEuYnJvd3Nlck5hdmlnYXRpb25CdXR0b25zfSxkZWxldGUgdC5faW50ZXJuYWxXb3Jrc3BhY2VEYXRhLmJyb3dzZXJOYXZpZ2F0aW9uQnV0dG9ucyksdH0sSGk9ZT0+e2NvbnN0IHQ9UmkoZSk7cmV0dXJuIHQud29ya3NwYWNlUGxhdGZvcm0mJih0Ll9pbnRlcm5hbFdvcmtzcGFjZURhdGE9ey4uLnQuX2ludGVybmFsV29ya3NwYWNlRGF0YSwuLi50LndvcmtzcGFjZVBsYXRmb3JtfSxkZWxldGUgdC53b3Jrc3BhY2VQbGF0Zm9ybSksdH0sQWk9e3JlbG9hZDpbe2tleXM6XCJDdHJsK1JcIixwcmV2ZW50RGVmYXVsdDohMH1dLGJhY2s6W3trZXlzOlwiQWx0K0xlZnRcIixwcmV2ZW50RGVmYXVsdDohMH1dLGZvcndhcmQ6W3trZXlzOlwiQWx0K1JpZ2h0XCIscHJldmVudERlZmF1bHQ6ITB9XX0sVGk9e3JlbG9hZDpbe2tleXM6XCJDbWQrUlwiLHByZXZlbnREZWZhdWx0OiEwfV0sYmFjazpbe2tleXM6XCJDbWQrW1wiLHByZXZlbnREZWZhdWx0OiEwfSx7a2V5czpcIkNtZCtMZWZ0XCIscHJldmVudERlZmF1bHQ6ITB9XSxmb3J3YXJkOlt7a2V5czpcIkNtZCtdXCIscHJldmVudERlZmF1bHQ6ITB9LHtrZXlzOlwiQ21kK1JpZ2h0XCIscHJldmVudERlZmF1bHQ6ITB9XX0sRGk9YXN5bmMoKT0+YXdhaXQgVGEoKT9BaTpUaSxCaT1hc3luYyBlPT57Y29uc3QgdD1hd2FpdCBlLmdldEN1cnJlbnRXaW5kb3coKSxuPWF3YWl0IHQuZ2V0T3B0aW9ucygpLHI9bi53b3Jrc3BhY2VQbGF0Zm9ybT8ubmF2aWdhdGlvbkJ1dHRvbnM7cmV0dXJuIHIuZW5hYmxlZCYmIXIuaG90a2V5c0Rpc2FibGVkfSxaaT0oZSx0KT0+e2NvbnN0IG49ZmluLlZpZXcud3JhcFN5bmMoZSk7dD8ucmVsb2FkJiYoZT0+e2UuYWRkTGlzdGVuZXIoXCJob3RrZXlcIiwoYXN5bmMgdD0+e2lmKFwia2V5RG93blwiPT09dC5pbnB1dFR5cGUpe2NvbnN0IG49YXdhaXQgQmkoZSkscj1hd2FpdCBUYSgpLG89dC5jdHJsS2V5JiYhdC5hbHRLZXkmJiF0Lm1ldGFLZXkmJiF0LnNoaWZ0S2V5JiZcInJcIj09PXQua2V5LGE9IXQuY3RybEtleSYmIXQuYWx0S2V5JiZ0Lm1ldGFLZXkmJiF0LnNoaWZ0S2V5JiZcInJcIj09PXQua2V5O24mJihyP286YSkmJihlLnJlbG9hZCgpLGdlKHt0eXBlOlwiVmlld1wiLGFjdGlvbjpcIlJlbG9hZFwiLHZhbHVlOmUuaWRlbnRpdHkubmFtZX0pKX19KSl9KShuKSx0Py5iYWNrJiYoZT0+e2UuYWRkTGlzdGVuZXIoXCJob3RrZXlcIiwoYXN5bmMgdD0+e2lmKFwia2V5RG93blwiPT09dC5pbnB1dFR5cGUpe2NvbnN0IG49YXdhaXQgQmkoZSkscj1hd2FpdCBUYSgpLG89IXQuY3RybEtleSYmdC5hbHRLZXkmJiF0Lm1ldGFLZXkmJiF0LnNoaWZ0S2V5JiZcIkFycm93TGVmdFwiPT09dC5rZXksYT0hdC5jdHJsS2V5JiYhdC5hbHRLZXkmJnQubWV0YUtleSYmIXQuc2hpZnRLZXkmJlwiQXJyb3dMZWZ0XCI9PT10LmtleSxpPSF0LmN0cmxLZXkmJiF0LmFsdEtleSYmdC5tZXRhS2V5JiYhdC5zaGlmdEtleSYmXCJbXCI9PT10LmtleTtuJiYocj9vOmF8fGkpJiYoZS5uYXZpZ2F0ZUJhY2soKSxnZSh7dHlwZTpcIlZpZXdcIixhY3Rpb246XCJCYWNrXCIsdmFsdWU6ZS5pZGVudGl0eS5uYW1lfSkpfX0pKX0pKG4pLHQ/LmZvcndhcmQmJihlPT57ZS5hZGRMaXN0ZW5lcihcImhvdGtleVwiLChhc3luYyB0PT57aWYoXCJrZXlEb3duXCI9PT10LmlucHV0VHlwZSl7Y29uc3Qgbj1hd2FpdCBCaShlKSxyPWF3YWl0IFRhKCksbz0hdC5jdHJsS2V5JiZ0LmFsdEtleSYmIXQubWV0YUtleSYmIXQuc2hpZnRLZXkmJlwiQXJyb3dSaWdodFwiPT09dC5rZXksYT0hdC5jdHJsS2V5JiYhdC5hbHRLZXkmJnQubWV0YUtleSYmIXQuc2hpZnRLZXkmJlwiQXJyb3dSaWdodFwiPT09dC5rZXksaT0hdC5jdHJsS2V5JiYhdC5hbHRLZXkmJnQubWV0YUtleSYmIXQuc2hpZnRLZXkmJlwiXVwiPT09dC5rZXk7biYmKHI/bzphfHxpKSYmKGUubmF2aWdhdGVGb3J3YXJkKCksZ2Uoe3R5cGU6XCJWaWV3XCIsYWN0aW9uOlwiRm9yd2FyZFwiLHZhbHVlOmUuaWRlbnRpdHkubmFtZX0pKX19KSl9KShuKX0sJGk9KGUsdCk9PlJpKGUpLm1hcCgoZT0+KFwiY29tcG9uZW50U3RhdGVcImluIGU/ZS5jb21wb25lbnRTdGF0ZT10KGUuY29tcG9uZW50U3RhdGUpOlwiY29udGVudFwiaW4gZSYmKGUuY29udGVudD0kaShlLmNvbnRlbnQsdCkpLGUpKSksTmk9ZT0+e2lmKGUpe2NvbnN0IHQ9UmkoZSk7cmV0dXJuIHQuY29udGVudCYmKHQuY29udGVudD0kaSh0LmNvbnRlbnQsVmkpKSx0fXJldHVybiBlfSxGaT1lPT57aWYoZSl7Y29uc3QgdD1SaShlKTtyZXR1cm4gdC5jb250ZW50JiYodC5jb250ZW50PSRpKHQuY29udGVudCxIaSkpLHR9cmV0dXJuIGV9O2FzeW5jIGZ1bmN0aW9uIFdpKHthcHA6ZSx0YXJnZXQ6dH0pe2NvbnN0IG49ZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCk7c3dpdGNoKGUubWFuaWZlc3RUeXBlKXtjYXNlIHMuU25hcHNob3Q6cmV0dXJuIG4uYXBwbHlTbmFwc2hvdChlLm1hbmlmZXN0KTtjYXNlIHMuVmlldzpyZXR1cm4gYXN5bmMgZnVuY3Rpb24oZSx0KXtjb25zdCBuPWZpbi5QbGF0Zm9ybS5nZXRDdXJyZW50U3luYygpO2lmKFwidmlld1wiPT09dC5lbnRpdHlUeXBlKXtjb25zdCBuPWZpbi5WaWV3LndyYXBTeW5jKHQpLHI9YXdhaXQgbi5nZXRQYXJlbnRMYXlvdXQoKTtyZXR1cm4gYXdhaXQgci5yZXBsYWNlVmlldyh0LHttYW5pZmVzdFVybDplLm1hbmlmZXN0LHVybDp2b2lkIDAsdGFyZ2V0OnZvaWQgMH0pLG4uZGVzdHJveSgpfXJldHVybiBuLmNyZWF0ZVZpZXcoe25hbWU6dm9pZCAwLHVybDp2b2lkIDAsbWFuaWZlc3RVcmw6ZS5tYW5pZmVzdCx0YXJnZXQ6dm9pZCAwfSl9KGUsdCk7Y2FzZSBzLkV4dGVybmFsOnJldHVybiBmaW4uU3lzdGVtLmxhdW5jaEV4dGVybmFsUHJvY2Vzcyh7cGF0aDplLm1hbmlmZXN0LHV1aWQ6ZS5hcHBJZH0pO2RlZmF1bHQ6cmV0dXJuIGZpbi5BcHBsaWNhdGlvbi5zdGFydEZyb21NYW5pZmVzdChlLm1hbmlmZXN0KX19bGV0IFVpO2NvbnN0IHppPSgpPT57aWYoIVVpKXtjb25zdCBlPUhlKGAke1widW5kZWZpbmVkXCIhPXR5cGVvZiBmaW4mJmZpbi5tZS5pZGVudGl0eS51dWlkfS1lbnRlcnByaXNlLWFwcC1kaXJlY3RvcnlgKTtVaT1lKCl9cmV0dXJuIFVpfTthc3luYyBmdW5jdGlvbiBHaShlKXtpZighYXdhaXQgbGUoZS5pZGVudGl0eSkpcmV0dXJue307cmV0dXJuKGF3YWl0IHppKCkpLmRpc3BhdGNoKG50LkdldEFwcHMse3F1ZXJ5OmUucmVxLnNlYXJjaFF1ZXJ5fSl9YXN5bmMgZnVuY3Rpb24gS2koZSl7cmV0dXJuKGF3YWl0IHppKCkpLmRpc3BhdGNoKG50LkdldEN1cmF0ZWRDb250ZW50LGUpfWFzeW5jIGZ1bmN0aW9uIHFpKGUpe3JldHVybihhd2FpdCB6aSgpKS5kaXNwYXRjaChudC5HZXRSZWNlbnRseVZpc2l0ZWQsZSl9YXN5bmMgZnVuY3Rpb24gWWkoZSl7Y29uc3QgdD0oYXdhaXQgZWUoKSkubWFwKChhc3luYyBlPT57Y29uc3QgdD1hd2FpdCBlLmdldE9wdGlvbnMoKTt0LndvcmtzcGFjZVBsYXRmb3JtPy5wYWdlcyYmdC5sYXlvdXQmJmF3YWl0KGFzeW5jIGU9Pihhd2FpdCBRZShlKSkuZGlzcGF0Y2gob3QuVXBkYXRlUGFnZXNXaW5kb3dPcHRpb25zKSkoZS5pZGVudGl0eSl9KSk7cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKHQpLGU/ZSgpOlJlKCl9bGV0IEppPVtdO2NvbnN0IFhpPSgpPT5KaTtjb25zdCBRaT0oZSx0KT0+bj0+e2NvbnN0IHI9bnVsbCE9PWU7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5pc1dvcmtzcGFjZVBsYXRmb3JtPSgpPT4oe2lzV29ya3NwYWNlUGxhdGZvcm06ITAsaXNCcm93c2VySW5pdGlhbGl6ZWQ6ISFlLGFuYWx5dGljczp7aXNTdXBwb3J0ZWQ6ITB9fSksdGhpcy5kZXRhY2hQYWdlc0Zyb21XaW5kb3c9b3IsdGhpcy5nZXRBbGxBdHRhY2hlZFBhZ2VzPUtuLHRoaXMuZ2V0UGFnZXNGb3JXaW5kb3c9aXIsdGhpcy5nZXRQYWdlRm9yV2luZG93PWxyLHRoaXMubWFya1Vuc2F2ZWRQYWdlc0FzU2F2ZWRJbnRlcm5hbD1Dcix0aGlzLmxhdW5jaEFwcD1XaSx0aGlzLnNhdmVQYWdlPXRyLHRoaXMuc2F2ZVdvcmtzcGFjZT1Qbyx0aGlzLmNyZWF0ZVNhdmVkUGFnZUludGVybmFsPVhuLHRoaXMudXBkYXRlU2F2ZWRQYWdlSW50ZXJuYWw9ZXIsdGhpcy5kZWxldGVTYXZlZFBhZ2VJbnRlcm5hbD1Rbix0aGlzLnJlb3JkZXJQYWdlc0ZvcldpbmRvdz1zcix0aGlzLmdldFVuaXF1ZVBhZ2VUaXRsZT11cix0aGlzLnVwZGF0ZVBhZ2VGb3JXaW5kb3c9cnIsdGhpcy5nZXRMYXN0Rm9jdXNlZEJyb3dzZXJXaW5kb3c9ZWEsdGhpcy5nZXRUaGVtZXM9WGksdGhpcy5pbnZva2VDdXN0b21BY3Rpb25JbnRlcm5hbD1hYSx0aGlzLnJlcXVlc3RRdWl0UGxhdGZvcm1EaWFsb2dJbnRlcm5hbD1FaSx0aGlzLmdldEN1cnJlbnRXb3Jrc3BhY2U9TG8sdGhpcy5zZXRBY3RpdmVXb3Jrc3BhY2U9T28sdGhpcy5nZXRMYW5ndWFnZVJlc291cmNlc0ludGVybmFsPXpvLHRoaXMub3Blbkdsb2JhbENvbnRleHRNZW51SW50ZXJuYWw9dGhpcy5vcGVuR2xvYmFsQ29udGV4dE1lbnVJbnRlcm5hbC5iaW5kKHRoaXMpLHRoaXMub3Blbkdsb2JhbENvbnRleHRNZW51PXRoaXMub3Blbkdsb2JhbENvbnRleHRNZW51LmJpbmQodGhpcyksdGhpcy5nZXRTYXZlZFBhZ2VzPXRoaXMuZ2V0U2F2ZWRQYWdlcy5iaW5kKHRoaXMpLHRoaXMuZ2V0U2F2ZWRQYWdlPXRoaXMuZ2V0U2F2ZWRQYWdlLmJpbmQodGhpcyksdGhpcy5jcmVhdGVTYXZlZFBhZ2U9dGhpcy5jcmVhdGVTYXZlZFBhZ2UuYmluZCh0aGlzKSx0aGlzLnVwZGF0ZVNhdmVkUGFnZT10aGlzLnVwZGF0ZVNhdmVkUGFnZS5iaW5kKHRoaXMpLHRoaXMuZGVsZXRlU2F2ZWRQYWdlPXRoaXMuZGVsZXRlU2F2ZWRQYWdlLmJpbmQodGhpcyksdGhpcy5oYW5kbGVQYWdlQ2hhbmdlcz10aGlzLmhhbmRsZVBhZ2VDaGFuZ2VzLmJpbmQodGhpcyksdGhpcy5hdHRhY2hQYWdlc1RvV2luZG93PXRoaXMuYXR0YWNoUGFnZXNUb1dpbmRvdy5iaW5kKHRoaXMpLHRoaXMub3BlblZpZXdUYWJDb250ZXh0TWVudUludGVybmFsPXRoaXMub3BlblZpZXdUYWJDb250ZXh0TWVudUludGVybmFsLmJpbmQodGhpcyksdGhpcy5vcGVuVmlld1RhYkNvbnRleHRNZW51PXRoaXMub3BlblZpZXdUYWJDb250ZXh0TWVudS5iaW5kKHRoaXMpLHRoaXMub3BlblBhZ2VUYWJDb250ZXh0TWVudUludGVybmFsPXRoaXMub3BlblBhZ2VUYWJDb250ZXh0TWVudUludGVybmFsLmJpbmQodGhpcyksdGhpcy5vcGVuUGFnZVRhYkNvbnRleHRNZW51PXRoaXMub3BlblBhZ2VUYWJDb250ZXh0TWVudS5iaW5kKHRoaXMpLHRoaXMuZ2V0U2F2ZWRXb3Jrc3BhY2VzPXRoaXMuZ2V0U2F2ZWRXb3Jrc3BhY2VzLmJpbmQodGhpcyksdGhpcy5nZXRTYXZlZFdvcmtzcGFjZT10aGlzLmdldFNhdmVkV29ya3NwYWNlLmJpbmQodGhpcyksdGhpcy5jcmVhdGVTYXZlZFdvcmtzcGFjZT10aGlzLmNyZWF0ZVNhdmVkV29ya3NwYWNlLmJpbmQodGhpcyksdGhpcy51cGRhdGVTYXZlZFdvcmtzcGFjZT10aGlzLnVwZGF0ZVNhdmVkV29ya3NwYWNlLmJpbmQodGhpcyksdGhpcy5kZWxldGVTYXZlZFdvcmtzcGFjZT10aGlzLmRlbGV0ZVNhdmVkV29ya3NwYWNlLmJpbmQodGhpcyksdGhpcy5nZXRDdXJyZW50V29ya3NwYWNlPXRoaXMuZ2V0Q3VycmVudFdvcmtzcGFjZS5iaW5kKHRoaXMpLHRoaXMuZ2V0RG9ja1Byb3ZpZGVyQ29uZmlnPXRoaXMuZ2V0RG9ja1Byb3ZpZGVyQ29uZmlnLmJpbmQodGhpcyksdGhpcy5zYXZlRG9ja1Byb3ZpZGVyQ29uZmlnPXRoaXMuc2F2ZURvY2tQcm92aWRlckNvbmZpZy5iaW5kKHRoaXMpLHRoaXMuYXBwbHlXb3Jrc3BhY2U9dGhpcy5hcHBseVdvcmtzcGFjZS5iaW5kKHRoaXMpLHRoaXMuc2V0QWN0aXZlV29ya3NwYWNlPXRoaXMuc2V0QWN0aXZlV29ya3NwYWNlLmJpbmQodGhpcyksdGhpcy5vcGVuU2F2ZUJ1dHRvbkNvbnRleHRNZW51PXRoaXMub3BlblNhdmVCdXR0b25Db250ZXh0TWVudS5iaW5kKHRoaXMpLHRoaXMub3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsPXRoaXMub3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsLmJpbmQodGhpcyksdGhpcy5nZXRTZWxlY3RlZFNjaGVtZT10aGlzLmdldFNlbGVjdGVkU2NoZW1lLmJpbmQodGhpcyksdGhpcy5zZXRTZWxlY3RlZFNjaGVtZT10aGlzLnNldFNlbGVjdGVkU2NoZW1lLmJpbmQodGhpcyksdGhpcy5hbmFseXRpY3NJbnRlcm5hbD10aGlzLmFuYWx5dGljc0ludGVybmFsLmJpbmQodGhpcyksdGhpcy5oYW5kbGVBbmFseXRpY3M9dGhpcy5oYW5kbGVBbmFseXRpY3MuYmluZCh0aGlzKSx0aGlzLmdldExhbmd1YWdlPXRoaXMuZ2V0TGFuZ3VhZ2UuYmluZCh0aGlzKSx0aGlzLnNldExhbmd1YWdlPXRoaXMuc2V0TGFuZ3VhZ2UuYmluZCh0aGlzKSx0aGlzLmhhbmRsZVNhdmVNb2RhbE9uUGFnZUNsb3NlPXRoaXMuaGFuZGxlU2F2ZU1vZGFsT25QYWdlQ2xvc2UuYmluZCh0aGlzKSx0aGlzLnNob3VsZFBhZ2VDbG9zZT10aGlzLnNob3VsZFBhZ2VDbG9zZS5iaW5kKHRoaXMpLHRoaXMuc2hvdWxkV2luZG93Q2xvc2U9dGhpcy5zaG91bGRXaW5kb3dDbG9zZS5iaW5kKHRoaXMpLHRoaXMuaGFuZGxlUGFnZXNBbmRXaW5kb3dDbG9zZT10aGlzLmhhbmRsZVBhZ2VzQW5kV2luZG93Q2xvc2UuYmluZCh0aGlzKSx0aGlzLnNldEFjdGl2ZVBhZ2U9dGhpcy5zZXRBY3RpdmVQYWdlLmJpbmQodGhpcyksdGhpcy5oYW5kbGVQYWdlQ2hhbmdlcz10aGlzLmhhbmRsZVBhZ2VDaGFuZ2VzLmJpbmQodGhpcyksdGhpcy5jb3B5UGFnZT10aGlzLmNvcHlQYWdlLmJpbmQodGhpcyksdGhpcy5hZGRQYWdlPXRoaXMuYWRkUGFnZS5iaW5kKHRoaXMpLHRoaXMuYWRkRGVmYXVsdFBhZ2U9dGhpcy5hZGREZWZhdWx0UGFnZS5iaW5kKHRoaXMpLHRoaXMubWFya1Vuc2F2ZWRQYWdlc0FzU2F2ZWRJbnRlcm5hbD10aGlzLm1hcmtVbnNhdmVkUGFnZXNBc1NhdmVkSW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLnRyYWNrUmVtb3ZlZFRhYkludGVybmFsPXRoaXMudHJhY2tSZW1vdmVkVGFiSW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLnJlc3RvcmVSZW1vdmVkVGFiSW50ZXJuYWw9dGhpcy5yZXN0b3JlUmVtb3ZlZFRhYkludGVybmFsLmJpbmQodGhpcyksdGhpcy50cmFja1Zpc2l0ZWRTaXRlSW50ZXJuYWw9dGhpcy50cmFja1Zpc2l0ZWRTaXRlSW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLmdldFJlY2VudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWw9dGhpcy5nZXRSZWNlbnRseVZpc2l0ZWRTaXRlc0ludGVybmFsLmJpbmQodGhpcyksdGhpcy5nZXRGcmVxdWVudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWw9dGhpcy5nZXRGcmVxdWVudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLnNlYXJjaFNpdGVzSW50ZXJuYWw9dGhpcy5zZWFyY2hTaXRlc0ludGVybmFsLmJpbmQodGhpcyksdGhpcy5nZXRDdXJhdGVkQ29udGVudEludGVybmFsPXRoaXMuZ2V0Q3VyYXRlZENvbnRlbnRJbnRlcm5hbC5iaW5kKHRoaXMpLHRoaXMuaGFuZGxlUmVxdWVzdE5hdmlnYXRpb25JbnRlcm5hbD10aGlzLmhhbmRsZVJlcXVlc3ROYXZpZ2F0aW9uSW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLnJlZnJlc2hCb29rbWFya3NJbnRlcm5hbD10aGlzLnJlZnJlc2hCb29rbWFya3NJbnRlcm5hbC5iaW5kKHRoaXMpLHRoaXMuZ2V0Tm90aWZpY2F0aW9uc0NvbmZpZz10aGlzLmdldE5vdGlmaWNhdGlvbnNDb25maWcuYmluZCh0aGlzKX1hc3luYyBhcHBseVdvcmtzcGFjZSguLi5lKXtyZXR1cm4gU28uYXBwbHkodGhpcyxlKX1hc3luYyBnZXRTbmFwc2hvdCgpe2NvbnN0IGU9cj9hd2FpdCBZaSgoYXN5bmMoKT0+UmUoYXdhaXQgc3VwZXIuZ2V0U25hcHNob3Qodm9pZCAwLGZpbi5tZS5pZGVudGl0eSkpKSk6YXdhaXQgUmUoYXdhaXQgc3VwZXIuZ2V0U25hcHNob3Qodm9pZCAwLGZpbi5tZS5pZGVudGl0eSkpO2xldCB0PXsuLi5lLHdpbmRvd3M6ZS53aW5kb3dzLmZpbHRlcihqaSkubWFwKGplKX07cmV0dXJuIHQ9KGU9Pntjb25zdCB0PVJpKGUpO3JldHVybiB0LndpbmRvd3MuZm9yRWFjaCgoZT0+e2UubGF5b3V0JiYoZS5sYXlvdXQ9TmkoZS5sYXlvdXQpKSxlLndvcmtzcGFjZVBsYXRmb3JtPy5wYWdlcz8uZm9yRWFjaCgoZT0+e2U/LmxheW91dCYmKGUubGF5b3V0PU5pKGUubGF5b3V0KSl9KSl9KSksdH0pKHQpLHR9YXN5bmMgZ2V0Vmlld1NuYXBzaG90KGUpe2xldCB0PWF3YWl0IHN1cGVyLmdldFZpZXdTbmFwc2hvdChlKTtyZXR1cm4gdD1WaSh0KSx0fWFzeW5jIGFwcGx5U25hcHNob3Qoe3NuYXBzaG90OmUsb3B0aW9uczp0fSl7bGV0IG49ZTtcInN0cmluZ1wiPT10eXBlb2YgbiYmKG49YXdhaXQgc3VwZXIuZmV0Y2hNYW5pZmVzdCh7bWFuaWZlc3RVcmw6bn0sZmluLm1lLmlkZW50aXR5KSk7Y29uc3Qgbz1mdW5jdGlvbihlKXtmb3IoY29uc3QgdCBvZiBlLndpbmRvd3MpaWYodC53b3Jrc3BhY2VQbGF0Zm9ybT8ucGFnZXM/Lmxlbmd0aClyZXR1cm4hMDtyZXR1cm4hMX0obik7aWYoIXImJm8pdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzbmFwc2hvdCBjYW5ub3QgYmUgYXBwbGllZCBhcyB0aGUgcGxhdGZvcm0gaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aG91dCB0aGUgYnJvd3Nlci5cIik7cmV0dXJuIG49KGU9Pntjb25zdCB0PVJpKGUpO3JldHVybiB0LndpbmRvd3MuZm9yRWFjaCgoZT0+e2UubGF5b3V0PUZpKGUubGF5b3V0KSxlLndvcmtzcGFjZVBsYXRmb3JtPy5wYWdlcz8uZm9yRWFjaCgoZT0+e2UubGF5b3V0PUZpKGUubGF5b3V0KX0pKX0pKSx0fSkobiksc3VwZXIuYXBwbHlTbmFwc2hvdCh7c25hcHNob3Q6bixvcHRpb25zOnR9KX1hc3luYyBjcmVhdGVXaW5kb3codCxuKXtpZihyJiZcInRlYXJvdXRcIj09PXQucmVhc29uKXtjb25zdCBlPWF3YWl0IGZpbi5XaW5kb3cud3JhcFN5bmMobikuZ2V0T3B0aW9ucygpLHI9ZS53b3Jrc3BhY2VQbGF0Zm9ybT8ud2luZG93VHlwZTt0LnRhc2tiYXJJY29uR3JvdXA9ZS50YXNrYmFySWNvbkdyb3VwLHImJih0LndvcmtzcGFjZVBsYXRmb3JtfHw9e30sdC53b3Jrc3BhY2VQbGF0Zm9ybS53aW5kb3dUeXBlPWUud29ya3NwYWNlUGxhdGZvcm0ud2luZG93VHlwZSxyPT09eC5QbGF0Zm9ybSYmKHQudXJsPWUudXJsKSl9aWYoIXJ8fHQud29ya3NwYWNlUGxhdGZvcm0/LndpbmRvd1R5cGU9PT14LlBsYXRmb3JtKXtjb25zdCBlPWF3YWl0IHN1cGVyLmNyZWF0ZVdpbmRvdyh0LG4pO3JldHVybiBnZSh7dHlwZTpcIldpbmRvd1wiLGFjdGlvbjpcIk9wZW4gV2luZG93XCIsdmFsdWU6ZS5pZGVudGl0eS5uYW1lLGRhdGE6e3V1aWQ6ZS5pZGVudGl0eS51dWlkfX0pLGV9dmFyIG87bz17YWxsb3dlZDohMH0sZGV8fChkZT0hMCx1ZShjZS5Ccm93c2VyLG8pKSwoKGU9W10pPT57Y29uc3QgdD1lLmZpbHRlcigoZT0+ZS50eXBlIT09Yi5DdXN0b20pKSxuPW5ldyBTZXQscj1bXTtmb3IoY29uc3QgZSBvZiB0KW4uaGFzKGUudHlwZSkmJnIucHVzaChlLnR5cGUpLG4uYWRkKGUudHlwZSk7aWYoci5sZW5ndGg+MCl7Y29uc3QgZT1yLmpvaW4oXCIsIFwiKTt0aHJvdyBuZXcgRXJyb3IoYEVuY291bnRlcmVkIGEgZHVwbGljYXRlIFwiJHtlfVwiIHRvb2xiYXIgYnV0dG9uLiBObyBtb3JlIHRoYW4gb25lIGluc3RhbmNlIG9mIGEgYnV0dG9uIHR5cGUgbWF5IGJlIHByb3ZpZGVkLmApfX0pKHQud29ya3NwYWNlUGxhdGZvcm0/LnRvb2xiYXJPcHRpb25zPy5idXR0b25zKTtsZXQgYT0oZT0+XCJ3b3Jrc3BhY2VQbGF0Zm9ybVwiaW4gZT9lOigoe3dvcmtzdGFja3M6ZSxwYWdlczp0LC4uLm59KT0+KHsuLi5uLHdvcmtzcGFjZVBsYXRmb3JtOntwYWdlczp0fHxlfHxudWxsfX0pKShlKSkodCk7ZT8uZGVmYXVsdFdpbmRvd09wdGlvbnM/LmhvdGtleXMmJihhLmhvdGtleXM9ZS5kZWZhdWx0V2luZG93T3B0aW9ucy5ob3RrZXlzKSxhPWF3YWl0IFBpKGEsZSx7dGhlbWVzOlhpKCksc2VsZWN0ZWRTY2hlbWU6dGhpcy5nZXRTZWxlY3RlZFNjaGVtZSgpfSksYT1hd2FpdChhc3luYyBlPT57Y29uc3QgdD1hd2FpdCBmaW4uU3lzdGVtLmdldE1vbml0b3JJbmZvKCk7bGV0IG49dC5wcmltYXJ5TW9uaXRvcjtjb25zdCByPWUuZGVmYXVsdExlZnQsbz1lLmRlZmF1bHRUb3A7dC5ub25QcmltYXJ5TW9uaXRvcnMuZm9yRWFjaCgoZT0+e2NvbnN0e3RvcDp0LGJvdHRvbTphLGxlZnQ6aSxyaWdodDpsfT1lLmF2YWlsYWJsZVJlY3Q7cj49aSYmcjw9bCYmbz49dCYmbzw9YSYmKG49ZSl9KSk7Y29uc3QgYT1uLmF2YWlsYWJsZVJlY3QuYm90dG9tLW4uYXZhaWxhYmxlUmVjdC50b3AsaT1uLmF2YWlsYWJsZVJlY3QucmlnaHQtbi5hdmFpbGFibGVSZWN0LmxlZnQ7cmV0dXJuIGUuZGVmYXVsdEhlaWdodD1NYXRoLm1pbihlLmRlZmF1bHRIZWlnaHR8fDgwMCxhKSxlLmRlZmF1bHRXaWR0aD1NYXRoLm1pbihlLmRlZmF1bHRXaWR0aHx8ODAwLGkpLGV9KShhKTtjb25zdCBpPWF3YWl0KGU9PmFzeW5jKHQsbik9PntsZXQgcj0hMTtjb25zdCBvPWF3YWl0IGUodCxuKTtyZXR1cm4gdD8ud29ya3NwYWNlUGxhdGZvcm0/Ll9pbnRlcm5hbERlZmVyU2hvd09wdGlvbnM/LmRlZmVyU2hvd0VuYWJsZWQ/KGF3YWl0IG8uYWRkTGlzdGVuZXIoXCJzaG93LXJlcXVlc3RlZFwiLChhc3luYygpPT57aWYocilyZXR1cm47Y29uc3QgZT1hd2FpdCBvLmdldE9wdGlvbnMoKTthd2FpdCBvLnVwZGF0ZU9wdGlvbnMoe3dvcmtzcGFjZVBsYXRmb3JtOnsuLi5lLndvcmtzcGFjZVBsYXRmb3JtLF9pbnRlcm5hbERlZmVyU2hvd09wdGlvbnM6ey4uLmUud29ya3NwYWNlUGxhdGZvcm0uX2ludGVybmFsRGVmZXJTaG93T3B0aW9ucyxhdXRvU2hvdzohMH19fSkscj0hMH0pKSxvKTpvfSkoKChlLHQpPT5zdXBlci5jcmVhdGVXaW5kb3coZSx0KSkpKGEsbik7cmV0dXJuIGdlKHt0eXBlOlwiV2luZG93XCIsYWN0aW9uOlwiT3BlbiBXaW5kb3dcIix2YWx1ZTppLmlkZW50aXR5Lm5hbWUsZGF0YTp7dXVpZDppLmlkZW50aXR5LnV1aWR9fSksaX1hc3luYyBjcmVhdGVWaWV3KHQsbil7dC5vcHRzPUx0KHQub3B0cyxlPy5kZWZhdWx0Vmlld09wdGlvbnMpLGU/LmRlZmF1bHRWaWV3T3B0aW9ucz8uaG90a2V5cyYmKHQub3B0cy5ob3RrZXlzPWUuZGVmYXVsdFZpZXdPcHRpb25zLmhvdGtleXMpLHQub3B0cz1hd2FpdCBJaSh0Lm9wdHMsdGhpcy5mZXRjaE1hbmlmZXN0LG4pLHQub3B0cz1hd2FpdChhc3luYyBlPT57Y29uc3QgdD1SaShlKSxuPXQud29ya3NwYWNlUGxhdGZvcm0/LmJyb3dzZXJOYXZpZ2F0aW9uQnV0dG9ucztpZihuKXtjb25zdCBlPU9iamVjdC5rZXlzKG4pO2Zvcihjb25zdCByIG9mIGUpaWYobltyXSl7Y29uc3QgZT0oYXdhaXQgRGkoKSlbcl07dC5ob3RrZXlzP3QuaG90a2V5cy5wdXNoKC4uLmUpOnQuaG90a2V5cz1bLi4uZV19fXJldHVybiB0fSkodC5vcHRzKSx0Lm9wdHM9SGkodC5vcHRzKTtjb25zdCByPWF3YWl0IHN1cGVyLmNyZWF0ZVZpZXcodCxuKTtyZXR1cm4gWmkoci5pZGVudGl0eSx0Lm9wdHMuX2ludGVybmFsV29ya3NwYWNlRGF0YT8uYnJvd3Nlck5hdmlnYXRpb25CdXR0b25zKSxyfWFzeW5jIHJlcGxhY2VWaWV3KHQsbil7cmV0dXJuIHQub3B0cy5uZXdWaWV3PWF3YWl0IEx0KHQub3B0cy5uZXdWaWV3LGU/LmRlZmF1bHRWaWV3T3B0aW9ucyksdC5vcHRzLm5ld1ZpZXc9YXdhaXQgSWkodC5vcHRzLm5ld1ZpZXcsdGhpcy5mZXRjaE1hbmlmZXN0LG4pLHN1cGVyLnJlcGxhY2VWaWV3KHQsbil9YXN5bmMgcmVwbGFjZUxheW91dChlLHQpe3JldHVybiBhd2FpdCBsZSh0KXx8ZGVsZXRlIGUub3B0cy5sYXlvdXQ/LmRpbWVuc2lvbnMsc3VwZXIucmVwbGFjZUxheW91dChlLHQpfWFzeW5jIGdldFNhdmVkUGFnZSguLi5lKXtyZXR1cm4gTGEuYXBwbHkodGhpcyxlKX1hc3luYyBnZXRTYXZlZFBhZ2VzKC4uLmUpe3JldHVybiBfYS5hcHBseSh0aGlzLGUpfWFzeW5jIGNyZWF0ZVNhdmVkUGFnZSguLi5lKXtyZXR1cm4gUGEuYXBwbHkodGhpcyxlKX1hc3luYyBkZWxldGVTYXZlZFBhZ2UoLi4uZSl7cmV0dXJuIEVhLmFwcGx5KHRoaXMsZSl9YXN5bmMgdXBkYXRlU2F2ZWRQYWdlKC4uLmUpe3JldHVybiBqYS5hcHBseSh0aGlzLGUpfWFzeW5jIGdldFNhdmVkV29ya3NwYWNlKC4uLmUpe3JldHVybiBDaS5hcHBseSh0aGlzLGUpfWFzeW5jIGdldFNhdmVkV29ya3NwYWNlcyguLi5lKXtyZXR1cm4gbWkuYXBwbHkodGhpcyxlKX1hc3luYyBjcmVhdGVTYXZlZFdvcmtzcGFjZSguLi5lKXtyZXR1cm4gd2kuYXBwbHkodGhpcyxlKX1hc3luYyBkZWxldGVTYXZlZFdvcmtzcGFjZSguLi5lKXtyZXR1cm4gYmkuYXBwbHkodGhpcyxlKX1hc3luYyB1cGRhdGVTYXZlZFdvcmtzcGFjZSguLi5lKXtyZXR1cm4geWkuYXBwbHkodGhpcyxlKX1hc3luYyBnZXREb2NrUHJvdmlkZXJDb25maWcoLi4uZSl7cmV0dXJuIGhpLmFwcGx5KHRoaXMsZSl9YXN5bmMgc2F2ZURvY2tQcm92aWRlckNvbmZpZyguLi5lKXtyZXR1cm4gZ2kuYXBwbHkodGhpcyxlKX1hc3luYyBhdHRhY2hQYWdlc1RvV2luZG93KHQpe2NvbnN0IG49YXdhaXQga2kodC5wYWdlcyxlKTthd2FpdCBObihuKSxhd2FpdCBucih7Li4udCxwYWdlczpufSl9YXN5bmMgYWRkUGFnZShlKXtjb25zdCB0PWF3YWl0IGxlKGUuaWRlbnRpdHkpLG49YXdhaXQgS2UoZS5pZGVudGl0eSkse3BhZ2U6cixpbnNlcnRpb25JbmRleDpvfT1lO3I/LnRpdGxlfHwoci50aXRsZT1hd2FpdCBuLmRpc3BhdGNoKFdlLkdldFVuaXF1ZVBhZ2VUaXRsZSx2b2lkIDApKTtjb25zdCBhPShhd2FpdCB0aGlzLmdldEFsbEF0dGFjaGVkUGFnZXMoKSkuZmluZCgoZT0+ZS5wYWdlSWQ9PT1yLnBhZ2VJZHx8ZS50aXRsZT09PXIudGl0bGUpKTtpZihhKXtpZihhLnBhZ2VJZD09PXIucGFnZUlkKXRocm93IG5ldyBFcnJvcihgcGFnZSB3aXRoIGlkICR7ci5wYWdlSWR9IGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gYSBicm93c2VyIHdpbmRvdyAke2EucGFyZW50SWRlbnRpdHkubmFtZX1gKTtpZighdCl0aHJvdyBuZXcgRXJyb3IoYGFkZFBhZ2UgdGl0bGUgY29sbGlzaW9uLCBwYWdlIHdpdGggdGl0bGUgJHtyLnRpdGxlfSBhbHJlYWR5IGV4aXN0cywgY29uZmxpY3RpbmcgcGFnZSBpZDogJHthLnBhZ2VJZH0gd2l0aCB0aXRsZSAke2EudGl0bGV9YCl9Y29uc3QgaT17aWRlbnRpdHk6ZS5pZGVudGl0eSxwYWdlczpbey4uLnIsbXVsdGlJbnN0YW5jZVZpZXdCZWhhdmlvcjpcImR1cGxpY2F0ZVwifV0saW5zZXJ0aW9uSW5kZXg6b307YXdhaXQgdGhpcy5hdHRhY2hQYWdlc1RvV2luZG93KGkpfWFzeW5jIGFkZERlZmF1bHRQYWdlKGUpe2F3YWl0IHRoaXMuYWRkUGFnZShlKSxhd2FpdCB0aGlzLnNldEFjdGl2ZVBhZ2Uoe2lkZW50aXR5OmUuaWRlbnRpdHkscGFnZUlkOmUucGFnZS5wYWdlSWR9KX1hc3luYyBzZXRBY3RpdmVQYWdlKC4uLmUpe3JldHVybiBhci5hcHBseSh0aGlzLGUpfWFzeW5jIG9wZW5HbG9iYWxDb250ZXh0TWVudUludGVybmFsKC4uLmUpe3JldHVybiBjaS5hcHBseSh0aGlzLGUpfWFzeW5jIG9wZW5HbG9iYWxDb250ZXh0TWVudSguLi5lKXtyZXR1cm4gc2kuYXBwbHkodGhpcyxbLi4uZSxkYS5HbG9iYWxNZW51LGxpLkJvdHRvbVJpZ2h0XSl9YXN5bmMgb3BlblZpZXdUYWJDb250ZXh0TWVudUludGVybmFsKC4uLmUpe3JldHVybiB1aS5hcHBseSh0aGlzLGUpfWFzeW5jIG9wZW5WaWV3VGFiQ29udGV4dE1lbnUoLi4uZSl7cmV0dXJuIHNpLmFwcGx5KHRoaXMsWy4uLmUsZGEuQ29udGV4dE1lbnVdKX1hc3luYyBvcGVuUGFnZVRhYkNvbnRleHRNZW51SW50ZXJuYWwoLi4uZSl7cmV0dXJuIGRpLmFwcGx5KHRoaXMsZSl9YXN5bmMgb3BlblBhZ2VUYWJDb250ZXh0TWVudSguLi5lKXtyZXR1cm4gc2kuYXBwbHkodGhpcyxbLi4uZSxkYS5Db250ZXh0TWVudV0pfWFzeW5jIG9wZW5TYXZlQnV0dG9uQ29udGV4dE1lbnUoLi4uZSl7cmV0dXJuIHNpLmFwcGx5KHRoaXMsZSl9YXN5bmMgb3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsKC4uLmUpe3JldHVybiBwaS5hcHBseSh0aGlzLGUpfWdldFNlbGVjdGVkU2NoZW1lKC4uLmUpe3JldHVybiBrdC5hcHBseSh0aGlzLGUpfWFzeW5jIHNldFNlbGVjdGVkU2NoZW1lKC4uLmUpe3JldHVybiB4dC5hcHBseSh0aGlzLGUpfWFzeW5jIGhhbmRsZVBhZ2VDaGFuZ2VzKC4uLmUpe3JldHVybiB2ci5hcHBseSh0aGlzLGUpfWFzeW5jIGFuYWx5dGljc0ludGVybmFsKC4uLmUpe3JldHVybiBMci5hcHBseSh0aGlzLGUpfWFzeW5jIGhhbmRsZUFuYWx5dGljcyguLi5lKXt9YXN5bmMgaGFuZGxlU2F2ZU1vZGFsT25QYWdlQ2xvc2UoLi4uZSl7cmV0dXJuIGRyLmFwcGx5KHRoaXMsZSl9YXN5bmMgc2hvdWxkUGFnZUNsb3NlKC4uLmUpe3JldHVybiBwci5hcHBseSh0aGlzLGUpfWFzeW5jIHNob3VsZFdpbmRvd0Nsb3NlKC4uLmUpe3JldHVybiBmci5hcHBseSh0aGlzLGUpfWhhbmRsZVBhZ2VzQW5kV2luZG93Q2xvc2UoLi4uZSl7cmV0dXJuIGhyLmFwcGx5KHRoaXMsZSl9YXN5bmMgY29weVBhZ2UoLi4uZSl7cmV0dXJuIGdyLmFwcGx5KHRoaXMsZSl9YXN5bmMgZ2V0Tm90aWZpY2F0aW9uc0NvbmZpZygpe3JldHVybiB0fWFzeW5jIHNldExhbmd1YWdlKC4uLmUpe3JldHVybiBVby5hcHBseSh0aGlzLGUpfWFzeW5jIGdldExhbmd1YWdlKCl7cmV0dXJuIFdvLmFwcGx5KHRoaXMpfWFzeW5jIHRyYWNrUmVtb3ZlZFRhYkludGVybmFsKC4uLmUpe3JldHVybiBJYS5hcHBseSh0aGlzLGUpfWFzeW5jIHJlc3RvcmVSZW1vdmVkVGFiSW50ZXJuYWwoKXtjb25zdCBlPWF3YWl0KGFzeW5jKCk9Pntjb25zdCBlPWF3YWl0IGJhKFJhKTtpZihlLmxlbmd0aD4wKXtjb25zdCB0PU1hdGgubWF4KC4uLmUpLG49YXdhaXQgdmEodCxSYSk7cmV0dXJuIGF3YWl0IG1hKHQsUmEpLG59fSkoKTtpZihlPy5wYWdlKWlmKGF3YWl0IG5lKGUuaWRlbnRpdHkpKXtjb25zdCB0PU90KCkuQnJvd3Nlci53cmFwU3luYyhlLmlkZW50aXR5KTthd2FpdCB0LmFkZFBhZ2UoZS5wYWdlKSxhd2FpdCB0LnNldEFjdGl2ZVBhZ2UoZS5wYWdlLnBhZ2VJZCl9ZWxzZSBPdCgpLmNyZWF0ZVdpbmRvdyh7bmFtZTplLmlkZW50aXR5Lm5hbWUsd29ya3NwYWNlUGxhdGZvcm06e3BhZ2VzOltlLnBhZ2VdLHdpbmRvd1R5cGU6eC5Ccm93c2VyfX0pO2Vsc2UgZT8ud2luZG93JiZPdCgpLmNyZWF0ZVdpbmRvdyh7d29ya3NwYWNlUGxhdGZvcm06e3BhZ2VzOmUud2luZG93LnBhZ2VzLHdpbmRvd1R5cGU6eC5Ccm93c2VyfX0pfWFzeW5jIHRyYWNrVmlzaXRlZFNpdGVJbnRlcm5hbCguLi5lKXtyZXR1cm4gSGEuYXBwbHkodGhpcyxlKX1hc3luYyBnZXRSZWNlbnRseVZpc2l0ZWRTaXRlc0ludGVybmFsKC4uLmUpe3JldHVybiBhd2FpdCBxaS5hcHBseSh0aGlzLGUpfWFzeW5jIGdldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbCguLi5lKXtyZXR1cm4gQWEuYXBwbHkodGhpcyxlKX1hc3luYyBzZWFyY2hTaXRlc0ludGVybmFsKC4uLmUpe3JldHVybiBhd2FpdCBHaS5hcHBseSh0aGlzLGUpfWFzeW5jIGdldEN1cmF0ZWRDb250ZW50SW50ZXJuYWwoLi4uZSl7cmV0dXJuIGF3YWl0IEtpLmFwcGx5KHRoaXMsZSl9YXN5bmMgaGFuZGxlUmVxdWVzdE5hdmlnYXRpb25JbnRlcm5hbCguLi5lKXt9YXN5bmMgcmVmcmVzaEJvb2ttYXJrc0ludGVybmFsKCl7KGF3YWl0IE90KCkuQnJvd3Nlci5nZXRBbGxXaW5kb3dzKCkpLmZvckVhY2goKGFzeW5jKHtpZGVudGl0eTplfSk9PnsoYXdhaXQgUWUoZSkpLmRpc3BhdGNoKG90LlJlZnJlc2hCb29rbWFya3NJbnRlcm5hbCl9KSl9fX07ZnVuY3Rpb24gZWwoZSx0LG4pe2NvbnN0IHI9UWkoZSxuKTt0cnl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD9lPT50KHIoZSkpOkFycmF5LmlzQXJyYXkodCk/Wy4uLnQscl06ZT0+bmV3KHIoZSkpfWNhdGNoKGUpe3Rocm93IG5ldyBFcnJvcihcIldvcmtzcGFjZVBsYXRmb3JtLmluaXQgRXJyb3I6XCIsZSl9fWFzeW5jIGZ1bmN0aW9uIHRsKCl7cmEoKSxhc3luYyBmdW5jdGlvbigpe2NvbnN0IGU9ZmluLkFwcGxpY2F0aW9uLmdldEN1cnJlbnRTeW5jKCk7YXdhaXQgZS5hZGRMaXN0ZW5lcihcIndpbmRvdy1mb2N1c2VkXCIsdGEpfSgpO09vKGF3YWl0IE1vKCkpfWxldCBubDtmdW5jdGlvbiBybCh7b3ZlcnJpZGVDYWxsYmFjazplLGludGVyb3BPdmVycmlkZTp0LGJyb3dzZXI6bixub3RpZmljYXRpb25zOnIsYW5hbHl0aWNzOm8saW50ZWdyYXRpb25zOmE9W119KXtpZighRSl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgYmUgdXNlZCBvdXRzaWRlIGFuIE9wZW5GaW4gZW52LlwiKTtyZXR1cm4gbmx8fChubD0oYXN5bmMoKT0+e2NvbnN0IGk9ZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCk7dmFyIGwscztpLm9uY2UoXCJwbGF0Zm9ybS1hcGktcmVhZHlcIiwoKCk9PnRsKCkpKSxpLm9uKFwid2luZG93LXNob3ctYWxsLWRvd25sb2Fkc1wiLCgoe25hbWU6ZSx1dWlkOnR9KT0+e0JvKHtuYW1lOmUsdXVpZDp0fSl9KSksbj8udGl0bGUmJihsPW4udGl0bGUsbmk9bCksX3IobyksYXdhaXQgZmluLlBsYXRmb3JtLmluaXQoe292ZXJyaWRlQ2FsbGJhY2s6ZWwobixlfHxuPy5vdmVycmlkZUNhbGxiYWNrLHIpLGludGVyb3BPdmVycmlkZTpRbyh0fHxuPy5pbnRlcm9wT3ZlcnJpZGUsbil9KSxzPXthbGxvd2VkOiEwfSx1ZShjZS5QbGF0Zm9ybSxzKSxhd2FpdCBQcm9taXNlLmFsbChhLm1hcCgoYXN5bmMgZT0+eygoZSx0KT0+e3VlKGAke2NlLk1pY3JvZmxvd306JHtlfWAsdCxcImludGVncmF0aW9uLWZlYXR1cmVcIil9KShlLndvcmtmbG93SW50ZWdyYXRpb25OYW1lLHthbGxvd2VkOiEwLGFwaVZlcnNpb246JH0pLGF3YWl0IGUuX2luaXRpYWxpemVXb3JrZmxvd3MoKX0pKSksc2UobikmJihabj0hMCl9KSgpKSxubH1jb25zdCBvbD1hc3luYyh7dGhlbWU6ZSxjdXN0b21BY3Rpb25zOnQsbGFuZ3VhZ2U6biwuLi5yfSk9Pntjb25zdCBvPSQuc3BsaXQoXCIuXCIpLm1hcCgoZT0+cGFyc2VJbnQoZSkpKSxhPWF3YWl0KGFzeW5jIGU9PntpZigoYXdhaXQgd2UoKSkuZGlzYWJsZVJ1bnRpbWVWYWxpZGF0aW9uKXJldHVybiEwO2lmKGF3YWl0IGxlKCkpcmV0dXJuITA7Y29uc3QgdD0oYXdhaXQgZmluLlN5c3RlbS5nZXRWZXJzaW9uKCkpLnNwbGl0KFwiLlwiKS5tYXAoKGU9PnBhcnNlSW50KGUpKSksbj1lLmV2ZXJ5KCgobixyKT0+IShyPDMpfHx0W3JdPT09ZVtyXSkpO3JldHVybiBufSkobyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKGBSdW50aW1lIHZlcnNpb24gaXMgbm90IHN1cHBvcnRlZC4gICR7b1swXX0uJHtvWzFdfS4ke29bMl19LiogaXMgcmVxdWlyZWRgKTt2YXIgaTtyZXR1cm4gZSYmKCFmdW5jdGlvbihlKXtjb25zdCB0PWU9PntpZighZS5pbmNsdWRlcyhcIiNcIikmJiFlLmluY2x1ZGVzKFwicmdiXCIpJiYhZS5pbmNsdWRlcyhcImhzbFwiKSl0aHJvdyBuZXcgRXJyb3IoXCJCYWNrZ3JvdW5kIHByaW1hcnkgY29sb3IgaXMgbm90IHRoZSByaWdodCBmb3JtYXQuXCIpfTtlLmZvckVhY2goKGU9PntcInBhbGV0dGVcImluIGUmJnQoZS5wYWxldHRlLmJhY2tncm91bmRQcmltYXJ5KSxcInBhbGV0dGVzXCJpbiBlJiYodChlLnBhbGV0dGVzLmRhcmsuYmFja2dyb3VuZFByaW1hcnkpLHQoZS5wYWxldHRlcy5saWdodC5iYWNrZ3JvdW5kUHJpbWFyeSkpfSkpLEppPWV9KGUpLGk9e2FsbG93ZWQ6ITB9LHVlKGNlLlRoZW1pbmcsaSkpLHQmJihvYT10KSxhd2FpdCBHbyhuPy5pbml0aWFsTGFuZ3VhZ2UpLHJsKHIpfX0pKCksbW9kdWxlLmV4cG9ydHM9cn0pKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIvKiEgRm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSBpbmRleC5qcy5MSUNFTlNFLnR4dCAqL1xuKCgpPT57dmFyIGU9ezUzMDQ6KGUsdCxuKT0+e3ZhciByPXs4NTk0OihlLHQsbik9PntuLmQodCx7WjooKT0+b30pO3ZhciByPS9eKChjaGlsZHJlbnxkYW5nZXJvdXNseVNldElubmVySFRNTHxrZXl8cmVmfGF1dG9Gb2N1c3xkZWZhdWx0VmFsdWV8ZGVmYXVsdENoZWNrZWR8aW5uZXJIVE1MfHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ3xzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmd8dmFsdWVMaW5rfGFjY2VwdHxhY2NlcHRDaGFyc2V0fGFjY2Vzc0tleXxhY3Rpb258YWxsb3d8YWxsb3dVc2VyTWVkaWF8YWxsb3dQYXltZW50UmVxdWVzdHxhbGxvd0Z1bGxTY3JlZW58YWxsb3dUcmFuc3BhcmVuY3l8YWx0fGFzeW5jfGF1dG9Db21wbGV0ZXxhdXRvUGxheXxjYXB0dXJlfGNlbGxQYWRkaW5nfGNlbGxTcGFjaW5nfGNoYWxsZW5nZXxjaGFyU2V0fGNoZWNrZWR8Y2l0ZXxjbGFzc0lEfGNsYXNzTmFtZXxjb2xzfGNvbFNwYW58Y29udGVudHxjb250ZW50RWRpdGFibGV8Y29udGV4dE1lbnV8Y29udHJvbHN8Y29udHJvbHNMaXN0fGNvb3Jkc3xjcm9zc09yaWdpbnxkYXRhfGRhdGVUaW1lfGRlY29kaW5nfGRlZmF1bHR8ZGVmZXJ8ZGlyfGRpc2FibGVkfGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlfGRvd25sb2FkfGRyYWdnYWJsZXxlbmNUeXBlfGZvcm18Zm9ybUFjdGlvbnxmb3JtRW5jVHlwZXxmb3JtTWV0aG9kfGZvcm1Ob1ZhbGlkYXRlfGZvcm1UYXJnZXR8ZnJhbWVCb3JkZXJ8aGVhZGVyc3xoZWlnaHR8aGlkZGVufGhpZ2h8aHJlZnxocmVmTGFuZ3xodG1sRm9yfGh0dHBFcXVpdnxpZHxpbnB1dE1vZGV8aW50ZWdyaXR5fGlzfGtleVBhcmFtc3xrZXlUeXBlfGtpbmR8bGFiZWx8bGFuZ3xsaXN0fGxvYWRpbmd8bG9vcHxsb3d8bWFyZ2luSGVpZ2h0fG1hcmdpbldpZHRofG1heHxtYXhMZW5ndGh8bWVkaWF8bWVkaWFHcm91cHxtZXRob2R8bWlufG1pbkxlbmd0aHxtdWx0aXBsZXxtdXRlZHxuYW1lfG5vbmNlfG5vVmFsaWRhdGV8b3BlbnxvcHRpbXVtfHBhdHRlcm58cGxhY2Vob2xkZXJ8cGxheXNJbmxpbmV8cG9zdGVyfHByZWxvYWR8cHJvZmlsZXxyYWRpb0dyb3VwfHJlYWRPbmx5fHJlZmVycmVyUG9saWN5fHJlbHxyZXF1aXJlZHxyZXZlcnNlZHxyb2xlfHJvd3N8cm93U3BhbnxzYW5kYm94fHNjb3BlfHNjb3BlZHxzY3JvbGxpbmd8c2VhbWxlc3N8c2VsZWN0ZWR8c2hhcGV8c2l6ZXxzaXplc3xzbG90fHNwYW58c3BlbGxDaGVja3xzcmN8c3JjRG9jfHNyY0xhbmd8c3JjU2V0fHN0YXJ0fHN0ZXB8c3R5bGV8c3VtbWFyeXx0YWJJbmRleHx0YXJnZXR8dGl0bGV8dHlwZXx1c2VNYXB8dmFsdWV8d2lkdGh8d21vZGV8d3JhcHxhYm91dHxkYXRhdHlwZXxpbmxpc3R8cHJlZml4fHByb3BlcnR5fHJlc291cmNlfHR5cGVvZnx2b2NhYnxhdXRvQ2FwaXRhbGl6ZXxhdXRvQ29ycmVjdHxhdXRvU2F2ZXxjb2xvcnxpbmVydHxpdGVtUHJvcHxpdGVtU2NvcGV8aXRlbVR5cGV8aXRlbUlEfGl0ZW1SZWZ8b258cmVzdWx0c3xzZWN1cml0eXx1bnNlbGVjdGFibGV8YWNjZW50SGVpZ2h0fGFjY3VtdWxhdGV8YWRkaXRpdmV8YWxpZ25tZW50QmFzZWxpbmV8YWxsb3dSZW9yZGVyfGFscGhhYmV0aWN8YW1wbGl0dWRlfGFyYWJpY0Zvcm18YXNjZW50fGF0dHJpYnV0ZU5hbWV8YXR0cmlidXRlVHlwZXxhdXRvUmV2ZXJzZXxhemltdXRofGJhc2VGcmVxdWVuY3l8YmFzZWxpbmVTaGlmdHxiYXNlUHJvZmlsZXxiYm94fGJlZ2lufGJpYXN8Ynl8Y2FsY01vZGV8Y2FwSGVpZ2h0fGNsaXB8Y2xpcFBhdGhVbml0c3xjbGlwUGF0aHxjbGlwUnVsZXxjb2xvckludGVycG9sYXRpb258Y29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc3xjb2xvclByb2ZpbGV8Y29sb3JSZW5kZXJpbmd8Y29udGVudFNjcmlwdFR5cGV8Y29udGVudFN0eWxlVHlwZXxjdXJzb3J8Y3h8Y3l8ZHxkZWNlbGVyYXRlfGRlc2NlbnR8ZGlmZnVzZUNvbnN0YW50fGRpcmVjdGlvbnxkaXNwbGF5fGRpdmlzb3J8ZG9taW5hbnRCYXNlbGluZXxkdXJ8ZHh8ZHl8ZWRnZU1vZGV8ZWxldmF0aW9ufGVuYWJsZUJhY2tncm91bmR8ZW5kfGV4cG9uZW50fGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWR8ZmlsbHxmaWxsT3BhY2l0eXxmaWxsUnVsZXxmaWx0ZXJ8ZmlsdGVyUmVzfGZpbHRlclVuaXRzfGZsb29kQ29sb3J8Zmxvb2RPcGFjaXR5fGZvY3VzYWJsZXxmb250RmFtaWx5fGZvbnRTaXplfGZvbnRTaXplQWRqdXN0fGZvbnRTdHJldGNofGZvbnRTdHlsZXxmb250VmFyaWFudHxmb250V2VpZ2h0fGZvcm1hdHxmcm9tfGZyfGZ4fGZ5fGcxfGcyfGdseXBoTmFtZXxnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbHxnbHlwaE9yaWVudGF0aW9uVmVydGljYWx8Z2x5cGhSZWZ8Z3JhZGllbnRUcmFuc2Zvcm18Z3JhZGllbnRVbml0c3xoYW5naW5nfGhvcml6QWR2WHxob3Jpek9yaWdpblh8aWRlb2dyYXBoaWN8aW1hZ2VSZW5kZXJpbmd8aW58aW4yfGludGVyY2VwdHxrfGsxfGsyfGszfGs0fGtlcm5lbE1hdHJpeHxrZXJuZWxVbml0TGVuZ3RofGtlcm5pbmd8a2V5UG9pbnRzfGtleVNwbGluZXN8a2V5VGltZXN8bGVuZ3RoQWRqdXN0fGxldHRlclNwYWNpbmd8bGlnaHRpbmdDb2xvcnxsaW1pdGluZ0NvbmVBbmdsZXxsb2NhbHxtYXJrZXJFbmR8bWFya2VyTWlkfG1hcmtlclN0YXJ0fG1hcmtlckhlaWdodHxtYXJrZXJVbml0c3xtYXJrZXJXaWR0aHxtYXNrfG1hc2tDb250ZW50VW5pdHN8bWFza1VuaXRzfG1hdGhlbWF0aWNhbHxtb2RlfG51bU9jdGF2ZXN8b2Zmc2V0fG9wYWNpdHl8b3BlcmF0b3J8b3JkZXJ8b3JpZW50fG9yaWVudGF0aW9ufG9yaWdpbnxvdmVyZmxvd3xvdmVybGluZVBvc2l0aW9ufG92ZXJsaW5lVGhpY2tuZXNzfHBhbm9zZTF8cGFpbnRPcmRlcnxwYXRoTGVuZ3RofHBhdHRlcm5Db250ZW50VW5pdHN8cGF0dGVyblRyYW5zZm9ybXxwYXR0ZXJuVW5pdHN8cG9pbnRlckV2ZW50c3xwb2ludHN8cG9pbnRzQXRYfHBvaW50c0F0WXxwb2ludHNBdFp8cHJlc2VydmVBbHBoYXxwcmVzZXJ2ZUFzcGVjdFJhdGlvfHByaW1pdGl2ZVVuaXRzfHJ8cmFkaXVzfHJlZlh8cmVmWXxyZW5kZXJpbmdJbnRlbnR8cmVwZWF0Q291bnR8cmVwZWF0RHVyfHJlcXVpcmVkRXh0ZW5zaW9uc3xyZXF1aXJlZEZlYXR1cmVzfHJlc3RhcnR8cmVzdWx0fHJvdGF0ZXxyeHxyeXxzY2FsZXxzZWVkfHNoYXBlUmVuZGVyaW5nfHNsb3BlfHNwYWNpbmd8c3BlY3VsYXJDb25zdGFudHxzcGVjdWxhckV4cG9uZW50fHNwZWVkfHNwcmVhZE1ldGhvZHxzdGFydE9mZnNldHxzdGREZXZpYXRpb258c3RlbWh8c3RlbXZ8c3RpdGNoVGlsZXN8c3RvcENvbG9yfHN0b3BPcGFjaXR5fHN0cmlrZXRocm91Z2hQb3NpdGlvbnxzdHJpa2V0aHJvdWdoVGhpY2tuZXNzfHN0cmluZ3xzdHJva2V8c3Ryb2tlRGFzaGFycmF5fHN0cm9rZURhc2hvZmZzZXR8c3Ryb2tlTGluZWNhcHxzdHJva2VMaW5lam9pbnxzdHJva2VNaXRlcmxpbWl0fHN0cm9rZU9wYWNpdHl8c3Ryb2tlV2lkdGh8c3VyZmFjZVNjYWxlfHN5c3RlbUxhbmd1YWdlfHRhYmxlVmFsdWVzfHRhcmdldFh8dGFyZ2V0WXx0ZXh0QW5jaG9yfHRleHREZWNvcmF0aW9ufHRleHRSZW5kZXJpbmd8dGV4dExlbmd0aHx0b3x0cmFuc2Zvcm18dTF8dTJ8dW5kZXJsaW5lUG9zaXRpb258dW5kZXJsaW5lVGhpY2tuZXNzfHVuaWNvZGV8dW5pY29kZUJpZGl8dW5pY29kZVJhbmdlfHVuaXRzUGVyRW18dkFscGhhYmV0aWN8dkhhbmdpbmd8dklkZW9ncmFwaGljfHZNYXRoZW1hdGljYWx8dmFsdWVzfHZlY3RvckVmZmVjdHx2ZXJzaW9ufHZlcnRBZHZZfHZlcnRPcmlnaW5YfHZlcnRPcmlnaW5ZfHZpZXdCb3h8dmlld1RhcmdldHx2aXNpYmlsaXR5fHdpZHRoc3x3b3JkU3BhY2luZ3x3cml0aW5nTW9kZXx4fHhIZWlnaHR8eDF8eDJ8eENoYW5uZWxTZWxlY3Rvcnx4bGlua0FjdHVhdGV8eGxpbmtBcmNyb2xlfHhsaW5rSHJlZnx4bGlua1JvbGV8eGxpbmtTaG93fHhsaW5rVGl0bGV8eGxpbmtUeXBlfHhtbEJhc2V8eG1sbnN8eG1sbnNYbGlua3x4bWxMYW5nfHhtbFNwYWNlfHl8eTF8eTJ8eUNoYW5uZWxTZWxlY3Rvcnx6fHpvb21BbmRQYW58Zm9yfGNsYXNzfGF1dG9mb2N1cyl8KChbRGRdW0FhXVtUdF1bQWFdfFtBYV1bUnJdW0lpXVtBYV18eCktLiopKSQvO2NvbnN0IG89KGk9e30sZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWlbZV0mJihpW2VdPSh0PWUsci50ZXN0KHQpfHwxMTE9PT10LmNoYXJDb2RlQXQoMCkmJjExMD09PXQuY2hhckNvZGVBdCgxKSYmdC5jaGFyQ29kZUF0KDIpPDkxKSksaVtlXTt2YXIgdH0pO3ZhciBpfSwxNTIxOihlLHQsbik9PntuLnIodCksbi5kKHQse0FjdGl2aXR5TG9nSWNvbjooKT0+aSxBbGlnbkJhc2VsaW5lSWNvbjooKT0+YSxBbGlnbkJvdHRvbUljb246KCk9PmwsQWxpZ25DZW50ZXJIb3Jpem9udGFsbHlJY29uOigpPT5zLEFsaWduQ2VudGVyVmVydGljYWxseUljb246KCk9PmMsQWxpZ25MZWZ0SWNvbjooKT0+dSxBbGlnblJpZ2h0SWNvbjooKT0+ZixBbGlnblRvcEljb246KCk9PmQsQWxsU2lkZXNJY29uOigpPT5wLEFuZ2xlSWNvbjooKT0+aCxBcmNoaXZlSWNvbjooKT0+ZyxBcnJvd0JvdHRvbUxlZnRJY29uOigpPT52LEFycm93Qm90dG9tUmlnaHRJY29uOigpPT5tLEFycm93RG93bkljb246KCk9PkMsQXJyb3dMZWZ0SWNvbjooKT0+eSxBcnJvd1JpZ2h0SWNvbjooKT0+dyxBcnJvd1RvcExlZnRJY29uOigpPT5iLEFycm93VG9wUmlnaHRJY29uOigpPT54LEFycm93VXBJY29uOigpPT5fLEFzcGVjdFJhdGlvSWNvbjooKT0+TyxBdmF0YXJJY29uOigpPT5MLEJhY2twYWNrSWNvbjooKT0+RSxCYWRnZUljb246KCk9PlMsQmFyQ2hhcnRJY29uOigpPT5qLEJlbGxJY29uOigpPT5NLEJsZW5kaW5nTW9kZUljb246KCk9PmssQm9va21hcmtJY29uOigpPT5SLEJvcmRlckFsbEljb246KCk9PlAsQm9yZGVyQm90dG9tSWNvbjooKT0+SSxCb3JkZXJEYXNoZWRJY29uOigpPT5BLEJvcmRlckRvdHRlZEljb246KCk9PlQsQm9yZGVyTGVmdEljb246KCk9PkgsQm9yZGVyTm9uZUljb246KCk9PkIsQm9yZGVyUmlnaHRJY29uOigpPT5WLEJvcmRlclNvbGlkSWNvbjooKT0+RCxCb3JkZXJTcGxpdEljb246KCk9PlosQm9yZGVyU3R5bGVJY29uOigpPT4kLEJvcmRlclRvcEljb246KCk9Pk4sQm94SWNvbjooKT0+RixCb3hNb2RlbEljb246KCk9PlUsQnV0dG9uSWNvbjooKT0+VyxDYWxlbmRhckljb246KCk9PnosQ2FtZXJhSWNvbjooKT0+RyxDYXJkU3RhY2tJY29uOigpPT5xLENhcmRTdGFja01pbnVzSWNvbjooKT0+WSxDYXJkU3RhY2tQbHVzSWNvbjooKT0+SyxDYXJldERvd25JY29uOigpPT5YLENhcmV0TGVmdEljb246KCk9PkosQ2FyZXRSaWdodEljb246KCk9PlEsQ2FyZXRTb3J0SWNvbjooKT0+ZWUsQ2FyZXRVcEljb246KCk9PnRlLENoYXRCdWJibGVJY29uOigpPT5uZSxDaGVja0NpcmNsZWRJY29uOigpPT5vZSxDaGVja0ljb246KCk9PnJlLENoZWNrYm94SWNvbjooKT0+aWUsQ2hldnJvbkRvd25JY29uOigpPT5hZSxDaGV2cm9uTGVmdEljb246KCk9PmxlLENoZXZyb25SaWdodEljb246KCk9PnNlLENoZXZyb25VcEljb246KCk9PmNlLENpcmNsZUJhY2tzbGFzaEljb246KCk9PmZlLENpcmNsZUljb246KCk9PnVlLENsaXBib2FyZENvcHlJY29uOigpPT5wZSxDbGlwYm9hcmRJY29uOigpPT5kZSxDbG9ja0ljb246KCk9PmhlLENvZGVJY29uOigpPT5nZSxDb2RlU2FuZGJveExvZ29JY29uOigpPT52ZSxDb2x1bW5TcGFjaW5nSWNvbjooKT0+bWUsQ29sdW1uc0ljb246KCk9PkNlLENvbW1pdEljb246KCk9PnllLENvbXBvbmVudDFJY29uOigpPT53ZSxDb21wb25lbnQySWNvbjooKT0+YmUsQ29tcG9uZW50Qm9vbGVhbkljb246KCk9PnhlLENvbXBvbmVudEluc3RhbmNlSWNvbjooKT0+X2UsQ29tcG9uZW50Tm9uZUljb246KCk9Pk9lLENvbXBvbmVudFBsYWNlaG9sZGVySWNvbjooKT0+TGUsQ29udGFpbmVySWNvbjooKT0+RWUsQ29va2llSWNvbjooKT0+U2UsQ29weUljb246KCk9PmplLENvcm5lckJvdHRvbUxlZnRJY29uOigpPT5NZSxDb3JuZXJCb3R0b21SaWdodEljb246KCk9PmtlLENvcm5lclRvcExlZnRJY29uOigpPT5SZSxDb3JuZXJUb3BSaWdodEljb246KCk9PlBlLENvcm5lcnNJY29uOigpPT5JZSxDb3VudGRvd25UaW1lckljb246KCk9PkFlLENvdW50ZXJDbG9ja3dpc2VDbG9ja0ljb246KCk9PlRlLENyb3BJY29uOigpPT5IZSxDcm9zczFJY29uOigpPT5CZSxDcm9zczJJY29uOigpPT5WZSxDcm9zc0NpcmNsZWRJY29uOigpPT5EZSxDcm9zc2hhaXIxSWNvbjooKT0+WmUsQ3Jvc3NoYWlyMkljb246KCk9PiRlLENydW1wbGVkUGFwZXJJY29uOigpPT5OZSxDdWJlSWNvbjooKT0+RmUsQ3Vyc29yQXJyb3dJY29uOigpPT5VZSxDdXJzb3JUZXh0SWNvbjooKT0+V2UsRGFzaEljb246KCk9PnplLERhc2hib2FyZEljb246KCk9PkdlLERpbWVuc2lvbnNJY29uOigpPT5xZSxEaXNjSWNvbjooKT0+WWUsRGl2aWRlckhvcml6b250YWxJY29uOigpPT5LZSxEaXZpZGVyVmVydGljYWxJY29uOigpPT5YZSxEb3RGaWxsZWRJY29uOigpPT5RZSxEb3RJY29uOigpPT5KZSxEb3RzSG9yaXpvbnRhbEljb246KCk9PmV0LERvdHNWZXJ0aWNhbEljb246KCk9PnR0LERvdWJsZUFycm93RG93bkljb246KCk9Pm50LERvdWJsZUFycm93TGVmdEljb246KCk9PnJ0LERvdWJsZUFycm93UmlnaHRJY29uOigpPT5vdCxEb3VibGVBcnJvd1VwSWNvbjooKT0+aXQsRG93bmxvYWRJY29uOigpPT5hdCxEcmFnSGFuZGxlRG90czFJY29uOigpPT5sdCxEcmFnSGFuZGxlRG90czJJY29uOigpPT5zdCxEcmFnSGFuZGxlSG9yaXpvbnRhbEljb246KCk9PmN0LERyYWdIYW5kbGVWZXJ0aWNhbEljb246KCk9PnV0LERyYXdpbmdQaW5GaWxsZWRJY29uOigpPT5kdCxEcmF3aW5nUGluSWNvbjooKT0+ZnQsRHJvcGRvd25NZW51SWNvbjooKT0+cHQsRW50ZXJGdWxsU2NyZWVuSWNvbjooKT0+Z3QsRW50ZXJJY29uOigpPT5odCxFbnZlbG9wZUNsb3NlZEljb246KCk9PnZ0LEVudmVsb3BlT3Blbkljb246KCk9Pm10LEV4Y2xhbWF0aW9uVHJpYW5nbGVJY29uOigpPT5DdCxFeGl0RnVsbFNjcmVlbkljb246KCk9Pnd0LEV4aXRJY29uOigpPT55dCxFeHRlcm5hbExpbmtJY29uOigpPT5idCxFeWVDbG9zZWRJY29uOigpPT54dCxFeWVOb25lSWNvbjooKT0+X3QsRXllT3Blbkljb246KCk9Pk90LEZhY2VJY29uOigpPT5MdCxGaWdtYUxvZ29JY29uOigpPT5FdCxGaWxlSWNvbjooKT0+U3QsRmlsZU1pbnVzSWNvbjooKT0+anQsRmlsZVBsdXNJY29uOigpPT5NdCxGaWxlVGV4dEljb246KCk9Pmt0LEZvbnRCb2xkSWNvbjooKT0+UnQsRm9udEZhbWlseUljb246KCk9PlB0LEZvbnRJdGFsaWNJY29uOigpPT5JdCxGb250Um9tYW5JY29uOigpPT5BdCxGb250U2l6ZUljb246KCk9PlR0LEZvbnRTdHlsZUljb246KCk9Pkh0LEZyYW1lSWNvbjooKT0+QnQsRnJhbWVyTG9nb0ljb246KCk9PlZ0LEdlYXJJY29uOigpPT5EdCxHaXRIdWJMb2dvSWNvbjooKT0+WnQsR2xvYmVJY29uOigpPT4kdCxHcmlkSWNvbjooKT0+TnQsR3JvdXBJY29uOigpPT5GdCxIYWxmMUljb246KCk9PlV0LEhhbGYySWNvbjooKT0+V3QsSGFtYnVyZ2VyTWVudUljb246KCk9Pnp0LEhhbmRJY29uOigpPT5HdCxIZWFkaW5nSWNvbjooKT0+cXQsSGVpZ2h0SWNvbjooKT0+WXQsSG9tZUljb246KCk9Pkt0LEljb25KYXJMb2dvSWNvbjooKT0+WHQsSWRDYXJkSWNvbjooKT0+SnQsSW1hZ2VJY29uOigpPT5RdCxJbmZvQ2lyY2xlZEljb246KCk9PmVuLElucHV0SWNvbjooKT0+dG4sTGFwVGltZXJJY29uOigpPT5ubixMYXllcnNJY29uOigpPT5ybixMYXlvdXRJY29uOigpPT5vbixMZXR0ZXJDYXNlQ2FwaXRhbGl6ZUljb246KCk9PmFuLExldHRlckNhc2VMb3dlcmNhc2VJY29uOigpPT5sbixMZXR0ZXJDYXNlVG9nZ2xlSWNvbjooKT0+c24sTGV0dGVyQ2FzZVVwcGVyY2FzZUljb246KCk9PmNuLExldHRlclNwYWNpbmdJY29uOigpPT51bixMaWdodG5pbmdCb2x0SWNvbjooKT0+Zm4sTGluZUhlaWdodEljb246KCk9PmRuLExpbmsxSWNvbjooKT0+cG4sTGluazJJY29uOigpPT5obixMaW5rQnJlYWsxSWNvbjooKT0+Z24sTGlua0JyZWFrMkljb246KCk9PnZuLExpbmtOb25lMUljb246KCk9Pm1uLExpbmtOb25lMkljb246KCk9PkNuLExpc3RCdWxsZXRJY29uOigpPT55bixMb2NrQ2xvc2VkSWNvbjooKT0+d24sTG9ja09wZW4xSWNvbjooKT0+Ym4sTG9ja09wZW4ySWNvbjooKT0+eG4sTG9vcEljb246KCk9Pl9uLE1hZ2ljV2FuZEljb246KCk9Pk9uLE1hZ25pZnlpbmdHbGFzc0ljb246KCk9PkxuLE1hcmdpbkljb246KCk9PkVuLE1hc2tPZmZJY29uOigpPT5TbixNYXNrT25JY29uOigpPT5qbixNaW51c0NpcmNsZWRJY29uOigpPT5rbixNaW51c0ljb246KCk9Pk1uLE1peEljb246KCk9PlJuLE1peGVySG9yaXpvbnRhbEljb246KCk9PlBuLE1peGVyVmVydGljYWxJY29uOigpPT5JbixNb2R1bHpMb2dvSWNvbjooKT0+QW4sTW9vbkljb246KCk9PlRuLE1vdmVJY29uOigpPT5IbixOb3Rpb25Mb2dvSWNvbjooKT0+Qm4sT3BhY2l0eUljb246KCk9PlZuLE92ZXJsaW5lSWNvbjooKT0+RG4sUGFkZGluZ0ljb246KCk9PlpuLFBhcGVyUGxhbmVJY29uOigpPT4kbixQYXVzZUljb246KCk9Pk5uLFBlbmNpbDFJY29uOigpPT5GbixQZW5jaWwySWNvbjooKT0+VW4sUGVyc29uSWNvbjooKT0+V24sUGllQ2hhcnRJY29uOigpPT56bixQaWxjcm93SWNvbjooKT0+R24sUGluQm90dG9tSWNvbjooKT0+cW4sUGluTGVmdEljb246KCk9PlluLFBpblJpZ2h0SWNvbjooKT0+S24sUGluVG9wSWNvbjooKT0+WG4sUGxheUljb246KCk9PkpuLFBsdXNDaXJjbGVkSWNvbjooKT0+ZXIsUGx1c0ljb246KCk9PlFuLFF1ZXN0aW9uTWFya0NpcmNsZWRJY29uOigpPT5ucixRdWVzdGlvbk1hcmtJY29uOigpPT50cixRdW90ZUljb246KCk9PnJyLFJhZGlvYnV0dG9uSWNvbjooKT0+b3IsUmVhZGVySWNvbjooKT0+aXIsUmVsb2FkSWNvbjooKT0+YXIsUmVzZXRJY29uOigpPT5scixSZXN1bWVJY29uOigpPT5zcixSb2NrZXRJY29uOigpPT5jcixSb3RhdGVDb3VudGVyQ2xvY2t3aXNlSWNvbjooKT0+dXIsUm93U3BhY2luZ0ljb246KCk9PmZyLFJvd3NJY29uOigpPT5kcixSdWxlckhvcml6b250YWxJY29uOigpPT5wcixSdWxlclNxdWFyZUljb246KCk9PmhyLFNlY3Rpb25JY29uOigpPT5ncixTZXdpbmdQaW5GaWxsZWRJY29uOigpPT5tcixTZXdpbmdQaW5JY29uOigpPT52cixTaGFkb3dJY29uOigpPT5DcixTaGFkb3dJbm5lckljb246KCk9PnlyLFNoYWRvd05vbmVJY29uOigpPT53cixTaGFkb3dPdXRlckljb246KCk9PmJyLFNoYXJlMUljb246KCk9PnhyLFNoYXJlMkljb246KCk9Pl9yLFNodWZmbGVJY29uOigpPT5PcixTaXplSWNvbjooKT0+THIsU2tldGNoTG9nb0ljb246KCk9PkVyLFNsYXNoSWNvbjooKT0+U3IsU2xpZGVySWNvbjooKT0+anIsU3BhY2VCZXR3ZWVuSG9yaXpvbnRhbGx5SWNvbjooKT0+TXIsU3BhY2VCZXR3ZWVuVmVydGljYWxseUljb246KCk9PmtyLFNwYWNlRXZlbmx5SG9yaXpvbnRhbGx5SWNvbjooKT0+UnIsU3BhY2VFdmVubHlWZXJ0aWNhbGx5SWNvbjooKT0+UHIsU3BlYWtlckxvdWRJY29uOigpPT5JcixTcGVha2VyTW9kZXJhdGVJY29uOigpPT5BcixTcGVha2VyT2ZmSWNvbjooKT0+VHIsU3BlYWtlclF1aWV0SWNvbjooKT0+SHIsU3F1YXJlSWNvbjooKT0+QnIsU3RhY2tJY29uOigpPT5WcixTdGFyRmlsbGVkSWNvbjooKT0+WnIsU3Rhckljb246KCk9PkRyLFN0aXRjaGVzTG9nb0ljb246KCk9PiRyLFN0b3BJY29uOigpPT5OcixTdG9wd2F0Y2hJY29uOigpPT5GcixTdHJldGNoSG9yaXpvbnRhbGx5SWNvbjooKT0+VXIsU3RyZXRjaFZlcnRpY2FsbHlJY29uOigpPT5XcixTdHJpa2V0aHJvdWdoSWNvbjooKT0+enIsU3VuSWNvbjooKT0+R3IsU3dpdGNoSWNvbjooKT0+cXIsU3ltYm9sSWNvbjooKT0+WXIsVGFibGVJY29uOigpPT5LcixUYXJnZXRJY29uOigpPT5YcixUZXh0QWxpZ25DZW50ZXJJY29uOigpPT5RcixUZXh0QWxpZ25KdXN0aWZ5SWNvbjooKT0+ZW8sVGV4dEFsaWduTGVmdEljb246KCk9PnRvLFRleHRBbGlnblJpZ2h0SWNvbjooKT0+bm8sVGV4dEljb246KCk9PkpyLFRleHROb25lSWNvbjooKT0+cm8sVGhpY2tBcnJvd0Rvd25JY29uOigpPT5vbyxUaGlja0Fycm93TGVmdEljb246KCk9PmlvLFRoaWNrQXJyb3dSaWdodEljb246KCk9PmFvLFRoaWNrQXJyb3dVcEljb246KCk9PmxvLFRpbWVySWNvbjooKT0+c28sVG9rZW5zSWNvbjooKT0+Y28sVHJhY2tOZXh0SWNvbjooKT0+dW8sVHJhY2tQcmV2aW91c0ljb246KCk9PmZvLFRyYW5zcGFyZW5jeUdyaWRJY29uOigpPT5wbyxUcmFzaEljb246KCk9PmhvLFRyaWFuZ2xlRG93bkljb246KCk9PmdvLFRyaWFuZ2xlTGVmdEljb246KCk9PnZvLFRyaWFuZ2xlUmlnaHRJY29uOigpPT5tbyxUcmlhbmdsZVVwSWNvbjooKT0+Q28sVHdpdHRlckxvZ29JY29uOigpPT55byxVbmRlcmxpbmVJY29uOigpPT53byxVcGRhdGVJY29uOigpPT5ibyxVcGxvYWRJY29uOigpPT54byxWYWx1ZUljb246KCk9Pl9vLFZhbHVlTm9uZUljb246KCk9Pk9vLFZlcmNlbExvZ29JY29uOigpPT5MbyxWaWRlb0ljb246KCk9PkVvLFZpZXdHcmlkSWNvbjooKT0+U28sVmlld0hvcml6b250YWxJY29uOigpPT5qbyxWaWV3Tm9uZUljb246KCk9Pk1vLFZpZXdWZXJ0aWNhbEljb246KCk9PmtvLFdpZHRoSWNvbjooKT0+Um8sWm9vbUluSWNvbjooKT0+UG8sWm9vbU91dEljb246KCk9PklvfSk7dmFyIHI9big2Njg5KTtmdW5jdGlvbiBvKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30saT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfXZhciBpPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wIDEuNUMwIDEuMjIzODYgMC4yMjM4NTggMSAwLjUgMUgyLjVDMi43NzYxNCAxIDMgMS4yMjM4NiAzIDEuNUMzIDEuNzc2MTQgMi43NzYxNCAyIDIuNSAySDAuNUMwLjIyMzg1OCAyIDAgMS43NzYxNCAwIDEuNVpNNCAxLjVDNCAxLjIyMzg2IDQuMjIzODYgMSA0LjUgMUgxNC41QzE0Ljc3NjEgMSAxNSAxLjIyMzg2IDE1IDEuNUMxNSAxLjc3NjE0IDE0Ljc3NjEgMiAxNC41IDJINC41QzQuMjIzODYgMiA0IDEuNzc2MTQgNCAxLjVaTTQgNC41QzQgNC4yMjM4NiA0LjIyMzg2IDQgNC41IDRIMTEuNUMxMS43NzYxIDQgMTIgNC4yMjM4NiAxMiA0LjVDMTIgNC43NzYxNCAxMS43NzYxIDUgMTEuNSA1SDQuNUM0LjIyMzg2IDUgNCA0Ljc3NjE0IDQgNC41Wk0wIDcuNUMwIDcuMjIzODYgMC4yMjM4NTggNyAwLjUgN0gyLjVDMi43NzYxNCA3IDMgNy4yMjM4NiAzIDcuNUMzIDcuNzc2MTQgMi43NzYxNCA4IDIuNSA4SDAuNUMwLjIyMzg1OCA4IDAgNy43NzYxNCAwIDcuNVpNNCA3LjVDNCA3LjIyMzg2IDQuMjIzODYgNyA0LjUgN0gxNC41QzE0Ljc3NjEgNyAxNSA3LjIyMzg2IDE1IDcuNUMxNSA3Ljc3NjE0IDE0Ljc3NjEgOCAxNC41IDhINC41QzQuMjIzODYgOCA0IDcuNzc2MTQgNCA3LjVaTTQgMTAuNUM0IDEwLjIyMzkgNC4yMjM4NiAxMCA0LjUgMTBIMTEuNUMxMS43NzYxIDEwIDEyIDEwLjIyMzkgMTIgMTAuNUMxMiAxMC43NzYxIDExLjc3NjEgMTEgMTEuNSAxMUg0LjVDNC4yMjM4NiAxMSA0IDEwLjc3NjEgNCAxMC41Wk0wIDEzLjVDMCAxMy4yMjM5IDAuMjIzODU4IDEzIDAuNSAxM0gyLjVDMi43NzYxNCAxMyAzIDEzLjIyMzkgMyAxMy41QzMgMTMuNzc2MSAyLjc3NjE0IDE0IDIuNSAxNEgwLjVDMC4yMjM4NTggMTQgMCAxMy43NzYxIDAgMTMuNVpNNCAxMy41QzQgMTMuMjIzOSA0LjIyMzg2IDEzIDQuNSAxM0gxNC41QzE0Ljc3NjEgMTMgMTUgMTMuMjIzOSAxNSAxMy41QzE1IDEzLjc3NjEgMTQuNzc2MSAxNCAxNC41IDE0SDQuNUM0LjIyMzg2IDE0IDQgMTMuNzc2MSA0IDEzLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMC41IDEuNzUwMDNDMTAuNzEwNyAxLjc1MDAzIDEwLjg5ODggMS44ODIxNyAxMC45NzAzIDIuMDgwNDJMMTMuOTcwMyAxMC40QzE0LjA2NCAxMC42NTk4IDEzLjkyOTMgMTAuOTQ2MyAxMy42Njk2IDExLjA0QzEzLjQwOTggMTEuMTMzNiAxMy4xMjMzIDEwLjk5OSAxMy4wMjk2IDEwLjczOTJMMTIuMDQ3NyA4LjAxNjA2SDguOTUyMjdMNy45NzAzMSAxMC43MzkyQzcuODc2NjQgMTAuOTk5IDcuNTkwMTIgMTEuMTMzNiA3LjMzMDM1IDExLjA0QzcuMDcwNTggMTAuOTQ2MyA2LjkzNTkzIDEwLjY1OTggNy4wMjk2IDEwLjRMMTAuMDI5NiAyLjA4MDQyQzEwLjEwMTEgMS44ODIxNyAxMC4yODkyIDEuNzUwMDMgMTAuNSAxLjc1MDAzWk0xMC41IDMuNzI0MDJMMTEuNzQxMSA3LjE2NjA2SDkuMjU4NzdMMTAuNSAzLjcyNDAyWk0yLjQ5OTQ5IDIuMDk5OTdDMi43MjA0IDIuMDk5OTcgMi44OTk0OSAyLjI3OTA2IDIuODk5NDkgMi40OTk5N0wyLjg5OTQ5IDkuNTM0MjhMNC4yMTY2NCA4LjIxNzEzQzQuMzcyODUgOC4wNjA5MiA0LjYyNjEyIDguMDYwOTIgNC43ODIzMyA4LjIxNzEzQzQuOTM4NTQgOC4zNzMzNCA0LjkzODU0IDguNjI2NiA0Ljc4MjMzIDguNzgyODFMMi43ODIzMyAxMC43ODI4QzIuNzA3MzIgMTAuODU3OCAyLjYwNTU3IDEwLjkgMi40OTk0OSAxMC45QzIuMzkzNCAxMC45IDIuMjkxNjYgMTAuODU3OCAyLjIxNjY0IDEwLjc4MjhMMC4yMTY2NDUgOC43ODI4MUMwLjA2MDQzNDkgOC42MjY2IDAuMDYwNDM0OSA4LjM3MzM0IDAuMjE2NjQ1IDguMjE3MTNDMC4zNzI4NTQgOC4wNjA5MiAwLjYyNjEyIDguMDYwOTIgMC43ODIzMyA4LjIxNzEzTDIuMDk5NDkgOS41MzQyOEwyLjA5OTQ5IDIuNDk5OTdDMi4wOTk0OSAyLjI3OTA2IDIuMjc4NTcgMi4wOTk5NyAyLjQ5OTQ5IDIuMDk5OTdaTTAuMDk5OTY5NSAxMy41MDAxQzAuMDk5OTY5NSAxMy4yNzkxIDAuMjc5MDU2IDEzLjEwMDEgMC40OTk5NjkgMTMuMTAwMUgxNC41QzE0LjcyMDkgMTMuMTAwMSAxNC45IDEzLjI3OTEgMTQuOSAxMy41MDAxQzE0LjkgMTMuNzIxIDE0LjcyMDkgMTMuOTAwMSAxNC41IDEzLjkwMDFIMC40OTk5NjlDMC4yNzkwNTYgMTMuOTAwMSAwLjA5OTk2OTUgMTMuNzIxIDAuMDk5OTY5NSAxMy41MDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOSAzQzkgMi40NDc3MiA4LjU1MjI5IDIgOCAySDdDNi40NDc3MiAyIDYgMi40NDc3MiA2IDNMNiAxNEgxLjVDMS4yMjM4NiAxNCAxIDE0LjIyMzkgMSAxNC41QzEgMTQuNzc2MSAxLjIyMzg2IDE1IDEuNSAxNUw2IDE1SDlIMTMuNUMxMy43NzYxIDE1IDE0IDE0Ljc3NjEgMTQgMTQuNUMxNCAxNC4yMjM5IDEzLjc3NjEgMTQgMTMuNSAxNEg5VjNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljk5OTg4IDFDNi40NDc1OSAxIDUuOTk5ODggMS40NDc3MiA1Ljk5OTg4IDJWN0gxLjQ5OTg4QzEuMjIzNzQgNyAwLjk5OTg3OCA3LjIyMzg2IDAuOTk5ODc4IDcuNUMwLjk5OTg3OCA3Ljc3NjE0IDEuMjIzNzQgOCAxLjQ5OTg4IDhINS45OTk4OFYxM0M1Ljk5OTg4IDEzLjU1MjMgNi40NDc1OSAxNCA2Ljk5OTg4IDE0SDcuOTk5ODhDOC41NTIxNiAxNCA4Ljk5OTg4IDEzLjU1MjMgOC45OTk4OCAxM1Y4SDEzLjQ5OTlDMTMuNzc2IDggMTMuOTk5OSA3Ljc3NjE0IDEzLjk5OTkgNy41QzEzLjk5OTkgNy4yMjM4NiAxMy43NzYgNyAxMy40OTk5IDdIOC45OTk4OFYyQzguOTk5ODggMS40NDc3MiA4LjU1MjE2IDEgNy45OTk4OCAxTDYuOTk5ODggMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuOTk5ODggNkMxLjQ0NzU5IDYgMC45OTk4NzcgNi40NDc3MiAwLjk5OTg3NyA3TDAuOTk5ODc3IDhDMC45OTk4NzcgOC41NTIyOCAxLjQ0NzU5IDkgMS45OTk4OCA5TDYuOTk5ODggOUw2Ljk5OTg4IDEzLjVDNi45OTk4OCAxMy43NzYxIDcuMjIzNzQgMTQgNy40OTk4OCAxNEM3Ljc3NjAyIDE0IDcuOTk5ODggMTMuNzc2MSA3Ljk5OTg4IDEzLjVMNy45OTk4OCA5TDEyLjk5OTkgOUMxMy41NTIyIDkgMTMuOTk5OSA4LjU1MjI4IDEzLjk5OTkgOEwxMy45OTk5IDdDMTMuOTk5OSA2LjQ0NzcyIDEzLjU1MjIgNiAxMi45OTk5IDZMNy45OTk4OCA2TDcuOTk5ODggMS41QzcuOTk5ODggMS4yMjM4NiA3Ljc3NjAyIDEgNy40OTk4OCAxQzcuMjIzNzMgMSA2Ljk5OTg4IDEuMjIzODYgNi45OTk4OCAxLjVMNi45OTk4OCA2TDEuOTk5ODggNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuNDk5OTk1IDAuOTk5OTk1QzAuMjIzODU1IDAuOTk5OTk1IC01LjU4NDU4ZS0wNyAxLjIyMzg1IC01LjQ2Mzg4ZS0wNyAxLjQ5OTk5TC0yLjE4NTU0ZS0wOCAxMy40OTk5Qy05Ljc4NDkyZS0wOSAxMy43NzYgMC4yMjM4NTUgMTMuOTk5OSAwLjQ5OTk5NSAxMy45OTk5QzAuNzc2MTM2IDEzLjk5OTkgMC45OTk5OTEgMTMuNzc2IDAuOTk5OTkxIDEzLjQ5OTlMMC45OTk5OTEgOC45OTk5M0wxMiA4Ljk5OTkzQzEyLjU1MjMgOC45OTk5MyAxMyA4LjU1MjIyIDEzIDcuOTk5OTNMMTMgNi45OTk5NEMxMyA2LjQ0NzY2IDEyLjU1MjMgNS45OTk5NSAxMiA1Ljk5OTk1TDAuOTk5OTkxIDUuOTk5OTVMMC45OTk5OTEgMS40OTk5OUMwLjk5OTk5MSAxLjIyMzg1IDAuNzc2MTM1IDAuOTk5OTk1IDAuNDk5OTk1IDAuOTk5OTk1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQuNDk5OSAxQzE0LjIyMzcgMSAxMy45OTk5IDEuMjIzODYgMTMuOTk5OSAxLjVMMTMuOTk5OSA2TDIuOTk5ODggNkMyLjQ0NzU5IDYgMS45OTk4OCA2LjQ0NzcyIDEuOTk5ODggN0wxLjk5OTg4IDhDMS45OTk4OCA4LjU1MjI4IDIuNDQ3NTkgOSAyLjk5OTg4IDlMMTMuOTk5OSA5TDEzLjk5OTkgMTMuNUMxMy45OTk5IDEzLjc3NjEgMTQuMjIzNyAxNCAxNC40OTk5IDE0QzE0Ljc3NiAxNCAxNC45OTk5IDEzLjc3NjEgMTQuOTk5OSAxMy41TDE0Ljk5OTkgOUwxNC45OTk5IDZMMTQuOTk5OSAxLjVDMTQuOTk5OSAxLjIyMzg2IDE0Ljc3NiAxIDE0LjQ5OTkgMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSAwQzEuMjIzODYgMCAxIDAuMjIzODU4IDEgMC41QzEgMC43NzYxNDIgMS4yMjM4NiAxIDEuNSAxSDZWMTJDNiAxMi41NTIzIDYuNDQ3NzIgMTMgNyAxM0g4QzguNTUyMjggMTMgOSAxMi41NTIzIDkgMTJWMUgxMy41QzEzLjc3NjEgMSAxNCAwLjc3NjE0MiAxNCAwLjVDMTQgMC4yMjM4NTggMTMuNzc2MSAwIDEzLjUgMEg5SDZIMS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDAuNzVMOS43NSAzSDUuMjVMNy41IDAuNzVaTTcuNSAxNC4yNUw5Ljc1IDEySDUuMjVMNy41IDE0LjI1Wk0zIDUuMjVMMC43NSA3LjVMMyA5Ljc1VjUuMjVaTTE0LjI1IDcuNUwxMiA1LjI1VjkuNzVMMTQuMjUgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC44OTE0IDIuMTkzN0M5LjExNTggMi4zNTQ2NCA5LjE2NzI1IDIuNjY3MDEgOS4wMDYzMSAyLjg5MTQxTDIuNDczODggMTJIMTMuNUMxMy43NzYxIDEyIDE0IDEyLjIyMzkgMTQgMTIuNUMxNCAxMi43NzYyIDEzLjc3NjEgMTMgMTMuNSAxM0gxLjVDMS4zMTI1NCAxMyAxLjE0MDgyIDEyLjg5NTIgMS4wNTUyIDEyLjcyODRDMC45Njk1NzggMTIuNTYxNiAwLjk4NDQzOCAxMi4zNjEgMS4wOTM2OSAxMi4yMDg2TDguMTkzNjkgMi4zMDg2MkM4LjM1NDYyIDIuMDg0MjIgOC42NjcgMi4wMzI3NyA4Ljg5MTQgMi4xOTM3Wk0xMS4xIDYuNTAwMDFDMTEuMSA2LjIyMzg3IDExLjMyMzggNi4wMDAwMSAxMS42IDYuMDAwMDFDMTEuODc2MSA2LjAwMDAxIDEyLjEgNi4yMjM4NyAxMi4xIDYuNTAwMDFDMTIuMSA2Ljc3NjE1IDExLjg3NjEgNy4wMDAwMSAxMS42IDcuMDAwMDFDMTEuMzIzOCA3LjAwMDAxIDExLjEgNi43NzYxNSAxMS4xIDYuNTAwMDFaTTEwLjQgNC4wMDAwMUMxMC4xMjM5IDQuMDAwMDEgOS45MDAwMyA0LjIyMzg3IDkuOTAwMDMgNC41MDAwMUM5LjkwMDAzIDQuNzc2MTUgMTAuMTIzOSA1LjAwMDAxIDEwLjQgNS4wMDAwMUMxMC42NzYyIDUuMDAwMDEgMTAuOSA0Ljc3NjE1IDEwLjkgNC41MDAwMUMxMC45IDQuMjIzODcgMTAuNjc2MiA0LjAwMDAxIDEwLjQgNC4wMDAwMVpNMTIuMSA4LjUwMDAxQzEyLjEgOC4yMjM4NyAxMi4zMjM4IDguMDAwMDEgMTIuNiA4LjAwMDAxQzEyLjg3NjEgOC4wMDAwMSAxMy4xIDguMjIzODcgMTMuMSA4LjUwMDAxQzEzLjEgOC43NzYxNSAxMi44NzYxIDkuMDAwMDEgMTIuNiA5LjAwMDAxQzEyLjMyMzggOS4wMDAwMSAxMi4xIDguNzc2MTUgMTIuMSA4LjUwMDAxWk0xMy40IDEwQzEzLjEyMzkgMTAgMTIuOSAxMC4yMjM5IDEyLjkgMTAuNUMxMi45IDEwLjc3NjEgMTMuMTIzOSAxMSAxMy40IDExQzEzLjY3NjIgMTEgMTMuOSAxMC43NzYxIDEzLjkgMTAuNUMxMy45IDEwLjIyMzkgMTMuNjc2MiAxMCAxMy40IDEwWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4zMDkwMiAxQzIuOTMwMjUgMSAyLjU4Mzk4IDEuMjE0IDIuNDE0NTkgMS41NTI3OUwxLjA1Mjc5IDQuMjc2MzlDMS4wMTgwNyA0LjM0NTgyIDEgNC40MjIzOCAxIDQuNVYxM0MxIDEzLjU1MjMgMS40NDc3MiAxNCAyIDE0SDEzQzEzLjU1MjMgMTQgMTQgMTMuNTUyMyAxNCAxM1Y0LjVDMTQgNC40MjIzOCAxMy45ODE5IDQuMzQ1ODIgMTMuOTQ3MiA0LjI3NjM5TDEyLjU4NTQgMS41NTI4MUMxMi40MTYgMS4yMTQwMyAxMi4wNjk4IDEuMDAwMDMgMTEuNjkxIDEuMDAwMDNMNy41IDEuMDAwMDFMMy4zMDkwMiAxWk0zLjMwOTAyIDJMNyAyLjAwMDAxVjRIMi4zMDkwMkwzLjMwOTAyIDJaTTggNFYyLjAwMDAyTDExLjY5MSAyLjAwMDAzTDEyLjY5MSA0SDhaTTcuNSA1SDEzVjEzSDJWNUg3LjVaTTUuNSA3QzUuMjIzODYgNyA1IDcuMjIzODYgNSA3LjVDNSA3Ljc3NjE0IDUuMjIzODYgOCA1LjUgOEg5LjVDOS43NzYxNCA4IDEwIDcuNzc2MTQgMTAgNy41QzEwIDcuMjIzODYgOS43NzYxNCA3IDkuNSA3SDUuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTExLjM1MzYgMy42NDY0NEMxMS41NDg4IDMuODQxNyAxMS41NDg4IDQuMTU4MjggMTEuMzUzNiA0LjM1MzU0TDQuNzA3MTEgMTFMOSAxMUM5LjI3NjE0IDExIDkuNSAxMS4yMjM5IDkuNSAxMS41QzkuNSAxMS43NzYxIDkuMjc2MTQgMTIgOSAxMkwzLjUgMTJDMy4zNjczOSAxMiAzLjI0MDIxIDExLjk0NzMgMy4xNDY0NSAxMS44NTM2QzMuMDUyNjggMTEuNzU5OCAzIDExLjYzMjYgMyAxMS41TDMgNS45OTk5OUMzIDUuNzIzODUgMy4yMjM4NiA1LjQ5OTk5IDMuNSA1LjQ5OTk5QzMuNzc2MTQgNS40OTk5OSA0IDUuNzIzODUgNCA1Ljk5OTk5VjEwLjI5MjlMMTAuNjQ2NCAzLjY0NjQzQzEwLjg0MTcgMy40NTExNyAxMS4xNTgzIDMuNDUxMTcgMTEuMzUzNiAzLjY0NjQ0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy42NDY0NSAzLjY0NjQ0QzMuNDUxMTggMy44NDE3IDMuNDUxMTggNC4xNTgyOCAzLjY0NjQ1IDQuMzUzNTRMMTAuMjkyOSAxMUw2IDExQzUuNzIzODYgMTEgNS41IDExLjIyMzkgNS41IDExLjVDNS41IDExLjc3NjEgNS43MjM4NiAxMiA2IDEyTDExLjUgMTJDMTEuNjMyNiAxMiAxMS43NTk4IDExLjk0NzMgMTEuODUzNiAxMS44NTM2QzExLjk0NzMgMTEuNzU5OCAxMiAxMS42MzI2IDEyIDExLjVMMTIgNS45OTk5OUMxMiA1LjcyMzg1IDExLjc3NjEgNS40OTk5OSAxMS41IDUuNDk5OTlDMTEuMjIzOSA1LjQ5OTk5IDExIDUuNzIzODUgMTEgNS45OTk5OVYxMC4yOTI5TDQuMzUzNTUgMy42NDY0M0M0LjE1ODI5IDMuNDUxMTcgMy44NDE3MSAzLjQ1MTE3IDMuNjQ2NDUgMy42NDY0NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAyQzcuNzc2MTQgMiA4IDIuMjIzODYgOCAyLjVMOCAxMS4yOTI5TDExLjE0NjQgOC4xNDY0NUMxMS4zNDE3IDcuOTUxMTggMTEuNjU4MyA3Ljk1MTE4IDExLjg1MzYgOC4xNDY0NUMxMi4wNDg4IDguMzQxNzEgMTIuMDQ4OCA4LjY1ODI5IDExLjg1MzYgOC44NTM1NUw3Ljg1MzU1IDEyLjg1MzZDNy43NTk3OSAxMi45NDczIDcuNjMyNjEgMTMgNy41IDEzQzcuMzY3MzkgMTMgNy4yNDAyMSAxMi45NDczIDcuMTQ2NDUgMTIuODUzNkwzLjE0NjQ1IDguODUzNTVDMi45NTExOCA4LjY1ODI5IDIuOTUxMTggOC4zNDE3MSAzLjE0NjQ1IDguMTQ2NDVDMy4zNDE3MSA3Ljk1MTE4IDMuNjU4MjkgNy45NTExOCAzLjg1MzU1IDguMTQ2NDVMNyAxMS4yOTI5TDcgMi41QzcgMi4yMjM4NiA3LjIyMzg2IDIgNy41IDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljg1MzU1IDMuMTQ2NDVDNy4wNDg4MiAzLjM0MTcxIDcuMDQ4ODIgMy42NTgyOSA2Ljg1MzU1IDMuODUzNTVMMy43MDcxMSA3SDEyLjVDMTIuNzc2MSA3IDEzIDcuMjIzODYgMTMgNy41QzEzIDcuNzc2MTQgMTIuNzc2MSA4IDEyLjUgOEgzLjcwNzExTDYuODUzNTUgMTEuMTQ2NEM3LjA0ODgyIDExLjM0MTcgNy4wNDg4MiAxMS42NTgzIDYuODUzNTUgMTEuODUzNkM2LjY1ODI5IDEyLjA0ODggNi4zNDE3MSAxMi4wNDg4IDYuMTQ2NDUgMTEuODUzNkwyLjE0NjQ1IDcuODUzNTVDMS45NTExOCA3LjY1ODI5IDEuOTUxMTggNy4zNDE3MSAyLjE0NjQ1IDcuMTQ2NDVMNi4xNDY0NSAzLjE0NjQ1QzYuMzQxNzEgMi45NTExOCA2LjY1ODI5IDIuOTUxMTggNi44NTM1NSAzLjE0NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC4xNDY0NSAzLjE0NjQ1QzguMzQxNzEgMi45NTExOCA4LjY1ODI5IDIuOTUxMTggOC44NTM1NSAzLjE0NjQ1TDEyLjg1MzYgNy4xNDY0NUMxMy4wNDg4IDcuMzQxNzEgMTMuMDQ4OCA3LjY1ODI5IDEyLjg1MzYgNy44NTM1NUw4Ljg1MzU1IDExLjg1MzZDOC42NTgyOSAxMi4wNDg4IDguMzQxNzEgMTIuMDQ4OCA4LjE0NjQ1IDExLjg1MzZDNy45NTExOCAxMS42NTgzIDcuOTUxMTggMTEuMzQxNyA4LjE0NjQ1IDExLjE0NjRMMTEuMjkyOSA4SDIuNUMyLjIyMzg2IDggMiA3Ljc3NjE0IDIgNy41QzIgNy4yMjM4NiAyLjIyMzg2IDcgMi41IDdIMTEuMjkyOUw4LjE0NjQ1IDMuODUzNTVDNy45NTExOCAzLjY1ODI5IDcuOTUxMTggMy4zNDE3MSA4LjE0NjQ1IDMuMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxiPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS4zNTM2IDExLjM1MzZDMTEuNTQ4OCAxMS4xNTgzIDExLjU0ODggMTAuODQxNyAxMS4zNTM2IDEwLjY0NjVMNC43MDcxMSA0TDkgNEM5LjI3NjE0IDQgOS41IDMuNzc2MTQgOS41IDMuNUM5LjUgMy4yMjM4NiA5LjI3NjE0IDMgOSAzTDMuNSAzQzMuMzY3MzkgMyAzLjI0MDIxIDMuMDUyNjggMy4xNDY0NSAzLjE0NjQ1QzMuMDUyNjggMy4yNDAyMiAzIDMuMzY3MzkgMyAzLjVMMyA5LjAwMDAxQzMgOS4yNzYxNSAzLjIyMzg2IDkuNTAwMDEgMy41IDkuNTAwMDFDMy43NzYxNCA5LjUwMDAxIDQgOS4yNzYxNSA0IDkuMDAwMDFWNC43MDcxMUwxMC42NDY0IDExLjM1MzZDMTAuODQxNyAxMS41NDg4IDExLjE1ODMgMTEuNTQ4OCAxMS4zNTM2IDExLjM1MzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjY0NjQ1IDExLjM1MzZDMy40NTExOCAxMS4xNTgzIDMuNDUxMTggMTAuODQxNyAzLjY0NjQ1IDEwLjY0NjVMMTAuMjkyOSA0TDYgNEM1LjcyMzg2IDQgNS41IDMuNzc2MTQgNS41IDMuNUM1LjUgMy4yMjM4NiA1LjcyMzg2IDMgNiAzTDExLjUgM0MxMS42MzI2IDMgMTEuNzU5OCAzLjA1MjY4IDExLjg1MzYgMy4xNDY0NUMxMS45NDczIDMuMjQwMjIgMTIgMy4zNjczOSAxMiAzLjVMMTIgOS4wMDAwMUMxMiA5LjI3NjE1IDExLjc3NjEgOS41MDAwMSAxMS41IDkuNTAwMDFDMTEuMjIzOSA5LjUwMDAxIDExIDkuMjc2MTUgMTEgOS4wMDAwMVY0LjcwNzExTDQuMzUzNTUgMTEuMzUzNkM0LjE1ODI5IDExLjU0ODggMy44NDE3MSAxMS41NDg4IDMuNjQ2NDUgMTEuMzUzNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMTQ2NDUgMi4xNDY0NUM3LjM0MTcxIDEuOTUxMTggNy42NTgyOSAxLjk1MTE4IDcuODUzNTUgMi4xNDY0NUwxMS44NTM2IDYuMTQ2NDVDMTIuMDQ4OCA2LjM0MTcxIDEyLjA0ODggNi42NTgyOSAxMS44NTM2IDYuODUzNTVDMTEuNjU4MyA3LjA0ODgyIDExLjM0MTcgNy4wNDg4MiAxMS4xNDY0IDYuODUzNTVMOCAzLjcwNzExTDggMTIuNUM4IDEyLjc3NjEgNy43NzYxNCAxMyA3LjUgMTNDNy4yMjM4NiAxMyA3IDEyLjc3NjEgNyAxMi41TDcgMy43MDcxMUwzLjg1MzU1IDYuODUzNTVDMy42NTgyOSA3LjA0ODgyIDMuMzQxNzEgNy4wNDg4MiAzLjE0NjQ1IDYuODUzNTVDMi45NTExOCA2LjY1ODI5IDIuOTUxMTggNi4zNDE3MSAzLjE0NjQ1IDYuMTQ2NDVMNy4xNDY0NSAyLjE0NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi41IDJIMTIuNUMxMi43NzYxIDIgMTMgMi4yMjM4NiAxMyAyLjVWMTIuNUMxMyAxMi43NzYxIDEyLjc3NjEgMTMgMTIuNSAxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41VjIuNUMyIDIuMjIzODYgMi4yMjM4NiAyIDIuNSAyWk0xIDIuNUMxIDEuNjcxNTcgMS42NzE1NyAxIDIuNSAxSDEyLjVDMTMuMzI4NCAxIDE0IDEuNjcxNTcgMTQgMi41VjEyLjVDMTQgMTMuMzI4NCAxMy4zMjg0IDE0IDEyLjUgMTRIMi41QzEuNjcxNTcgMTQgMSAxMy4zMjg0IDEgMTIuNVYyLjVaTTcuNSA0QzcuNzc2MTQgNCA4IDMuNzc2MTQgOCAzLjVDOCAzLjIyMzg2IDcuNzc2MTQgMyA3LjUgM0M3LjIyMzg2IDMgNyAzLjIyMzg2IDcgMy41QzcgMy43NzYxNCA3LjIyMzg2IDQgNy41IDRaTTggNS41QzggNS43NzYxNCA3Ljc3NjE0IDYgNy41IDZDNy4yMjM4NiA2IDcgNS43NzYxNCA3IDUuNUM3IDUuMjIzODYgNy4yMjM4NiA1IDcuNSA1QzcuNzc2MTQgNSA4IDUuMjIzODYgOCA1LjVaTTcuNSA4QzcuNzc2MTQgOCA4IDcuNzc2MTQgOCA3LjVDOCA3LjIyMzg2IDcuNzc2MTQgNyA3LjUgN0M3LjIyMzg2IDcgNyA3LjIyMzg2IDcgNy41QzcgNy43NzYxNCA3LjIyMzg2IDggNy41IDhaTTEwIDcuNUMxMCA3Ljc3NjE0IDkuNzc2MTQgOCA5LjUgOEM5LjIyMzg2IDggOSA3Ljc3NjE0IDkgNy41QzkgNy4yMjM4NiA5LjIyMzg2IDcgOS41IDdDOS43NzYxNCA3IDEwIDcuMjIzODYgMTAgNy41Wk0xMS41IDhDMTEuNzc2MSA4IDEyIDcuNzc2MTQgMTIgNy41QzEyIDcuMjIzODYgMTEuNzc2MSA3IDExLjUgN0MxMS4yMjM5IDcgMTEgNy4yMjM4NiAxMSA3LjVDMTEgNy43NzYxNCAxMS4yMjM5IDggMTEuNSA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwMTQgNy40OTk4OEMwLjg3NzAxNCAzLjg0MjE5IDMuODQyMTYgMC44NzcwNDUgNy40OTk4NSAwLjg3NzA0NUMxMS4xNTc1IDAuODc3MDQ1IDE0LjEyMjcgMy44NDIxOSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyAxMS4xNTc1IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg1IDE0LjEyMjdDMy44NDIxNiAxNC4xMjI3IDAuODc3MDE0IDExLjE1NzUgMC44NzcwMTQgNy40OTk4OFpNNy40OTk4NSAxLjgyNzA0QzQuMzY2ODMgMS44MjcwNCAxLjgyNzAxIDQuMzY2ODYgMS44MjcwMSA3LjQ5OTg4QzEuODI3MDEgOC45NzE5NiAyLjM4Nzc0IDEwLjMxMzEgMy4zMDcyNyAxMS4zMjEzQzQuMTkwNzQgOS45NDExOSA1LjczODE4IDkuMDI0OTkgNy41MDAyMyA5LjAyNDk5QzkuMjYyMDYgOS4wMjQ5OSAxMC44MDkzIDkuOTQwOTcgMTEuNjkyOSAxMS4zMjA4QzEyLjYxMjEgMTAuMzEyNyAxMy4xNzI3IDguOTcxNzIgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNC4zNjY4NiAxMC42MzI4IDEuODI3MDQgNy40OTk4NSAxLjgyNzA0Wk0xMC45ODE4IDExLjk3ODdDMTAuMjgzOSAxMC43Nzk1IDguOTg1NyA5Ljk3NDk5IDcuNTAwMjMgOS45NzQ5OUM2LjAxNDU4IDkuOTc0OTkgNC43MTYyNCAxMC43Nzk3IDQuMDE4NDUgMTEuOTc5MUM0Ljk3OTUyIDEyLjcyNzIgNi4xODc2NSAxMy4xNzI3IDcuNDk5ODUgMTMuMTcyN0M4LjgxMjI3IDEzLjE3MjcgMTAuMDIwNiAxMi43MjcgMTAuOTgxOCAxMS45Nzg3Wk01LjE0OTk5IDYuNTA0ODdDNS4xNDk5OSA1LjIwNyA2LjIwMjEyIDQuMTU0ODcgNy40OTk5OSA0LjE1NDg3QzguNzk3ODYgNC4xNTQ4NyA5Ljg0OTk5IDUuMjA3IDkuODQ5OTkgNi41MDQ4N0M5Ljg0OTk5IDcuODAyNzQgOC43OTc4NiA4Ljg1NDg3IDcuNDk5OTkgOC44NTQ4N0M2LjIwMjEyIDguODU0ODcgNS4xNDk5OSA3LjgwMjc0IDUuMTQ5OTkgNi41MDQ4N1pNNy40OTk5OSA1LjEwNDg3QzYuNzI2NzkgNS4xMDQ4NyA2LjA5OTk5IDUuNzMxNjcgNi4wOTk5OSA2LjUwNDg3QzYuMDk5OTkgNy4yNzgwNyA2LjcyNjc5IDcuOTA0ODcgNy40OTk5OSA3LjkwNDg3QzguMjczMTkgNy45MDQ4NyA4Ljg5OTk5IDcuMjc4MDcgOC44OTk5OSA2LjUwNDg3QzguODk5OTkgNS43MzE2NyA4LjI3MzE5IDUuMTA0ODcgNy40OTk5OSA1LjEwNDg3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSAxQzUgMC40NDc3MTUgNS40NDc3MiAwIDYgMEg5QzkuNTUyMjggMCAxMCAwLjQ0NzcxNSAxMCAxVjJIMTRDMTQuNTUyMyAyIDE1IDIuNDQ3NzIgMTUgM1Y2QzE1IDYuODg4OCAxNC42MTMxIDcuNjg3MzQgMTQgOC4yMzYwOFYxMS41QzE0IDEyLjMyODQgMTMuMzI4NCAxMyAxMi41IDEzSDIuNUMxLjY3MTU3IDEzIDEgMTIuMzI4NCAxIDExLjVWOC4yMzU5QzAuMzg2OTcgNy42ODcyMSAwIDYuODg4ODMgMCA2VjNDMCAyLjQ0NzcyIDAuNDQ3NzE2IDIgMSAySDVWMVpNOSAxVjJINlYxSDlaTTEgM0g1SDUuNUg5LjVIMTBIMTRWNkMxNCA2LjY1NCAxMy42ODY2IDcuMjM0NjcgMTMuMTk5NyA3LjYwMDRDMTIuODY1NSA3Ljg1MTQ0IDEyLjQ1MDggOCAxMiA4SDhWNy41QzggNy4yMjM4NiA3Ljc3NjE0IDcgNy41IDdDNy4yMjM4NiA3IDcgNy4yMjM4NiA3IDcuNVY4SDNDMi41NDkzIDggMi4xMzQ2IDcuODUxMzMgMS44MDAyOSA3LjYwMDIyQzEuMzEzMzUgNy4yMzQ0NiAxIDYuNjUzOTYgMSA2VjNaTTcgOUgzQzIuNjQ5NjEgOSAyLjMxMjkyIDguOTM5NzIgMiA4LjgyOTA1VjExLjVDMiAxMS43NzYxIDIuMjIzODYgMTIgMi41IDEySDEyLjVDMTIuNzc2MSAxMiAxMyAxMS43NzYxIDEzIDExLjVWOC44MjkxNUMxMi42ODcxIDguOTM5NzggMTIuMzUwNCA5IDEyIDlIOFY5LjVDOCA5Ljc3NjE0IDcuNzc2MTQgMTAgNy41IDEwQzcuMjIzODYgMTAgNyA5Ljc3NjE0IDcgOS41VjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxTPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjUgNkgxMS41QzEyLjMyODQgNiAxMyA2LjY3MTU3IDEzIDcuNUMxMyA4LjMyODQzIDEyLjMyODQgOSAxMS41IDlIMy41QzIuNjcxNTcgOSAyIDguMzI4NDMgMiA3LjVDMiA2LjY3MTU3IDIuNjcxNTcgNiAzLjUgNlpNMSA3LjVDMSA2LjExOTI5IDIuMTE5MjkgNSAzLjUgNUgxMS41QzEyLjg4MDcgNSAxNCA2LjExOTI5IDE0IDcuNUMxNCA4Ljg4MDcxIDEyLjg4MDcgMTAgMTEuNSAxMEgzLjVDMi4xMTkyOSAxMCAxIDguODgwNzEgMSA3LjVaTTQuNSA3QzQuMjIzODYgNyA0IDcuMjIzODYgNCA3LjVDNCA3Ljc3NjE0IDQuMjIzODYgOCA0LjUgOEgxMC41QzEwLjc3NjEgOCAxMSA3Ljc3NjE0IDExIDcuNUMxMSA3LjIyMzg2IDEwLjc3NjEgNyAxMC41IDdINC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuNSAxQzExLjc3NjEgMSAxMiAxLjIyMzg2IDEyIDEuNVYxMy41QzEyIDEzLjc3NjEgMTEuNzc2MSAxNCAxMS41IDE0QzExLjIyMzkgMTQgMTEgMTMuNzc2MSAxMSAxMy41VjEuNUMxMSAxLjIyMzg2IDExLjIyMzkgMSAxMS41IDFaTTkuNSAzQzkuNzc2MTQgMyAxMCAzLjIyMzg2IDEwIDMuNVYxMy41QzEwIDEzLjc3NjEgOS43NzYxNCAxNCA5LjUgMTRDOS4yMjM4NiAxNCA5IDEzLjc3NjEgOSAxMy41VjMuNUM5IDMuMjIzODYgOS4yMjM4NiAzIDkuNSAzWk0xMy41IDNDMTMuNzc2MSAzIDE0IDMuMjIzODYgMTQgMy41VjEzLjVDMTQgMTMuNzc2MSAxMy43NzYxIDE0IDEzLjUgMTRDMTMuMjIzOSAxNCAxMyAxMy43NzYxIDEzIDEzLjVWMy41QzEzIDMuMjIzODYgMTMuMjIzOSAzIDEzLjUgM1pNNS41IDRDNS43NzYxNCA0IDYgNC4yMjM4NiA2IDQuNVYxMy41QzYgMTMuNzc2MSA1Ljc3NjE0IDE0IDUuNSAxNEM1LjIyMzg2IDE0IDUgMTMuNzc2MSA1IDEzLjVWNC41QzUgNC4yMjM4NiA1LjIyMzg2IDQgNS41IDRaTTEuNSA1QzEuNzc2MTQgNSAyIDUuMjIzODYgMiA1LjVWMTMuNUMyIDEzLjc3NjEgMS43NzYxNCAxNCAxLjUgMTRDMS4yMjM4NiAxNCAxIDEzLjc3NjEgMSAxMy41VjUuNUMxIDUuMjIzODYgMS4yMjM4NiA1IDEuNSA1Wk03LjUgNUM3Ljc3NjE0IDUgOCA1LjIyMzg2IDggNS41VjEzLjVDOCAxMy43NzYxIDcuNzc2MTQgMTQgNy41IDE0QzcuMjIzODYgMTQgNyAxMy43NzYxIDcgMTMuNVY1LjVDNyA1LjIyMzg2IDcuMjIzODYgNSA3LjUgNVpNMy41IDdDMy43NzYxNCA3IDQgNy4yMjM4NiA0IDcuNVYxMy41QzQgMTMuNzc2MSAzLjc3NjE0IDE0IDMuNSAxNEMzLjIyMzg2IDE0IDMgMTMuNzc2MSAzIDEzLjVWNy41QzMgNy4yMjM4NiAzLjIyMzg2IDcgMy41IDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxNPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04LjYwMTI0IDEuMjUwODZDOC42MDEyNCAxLjc1NDU5IDguMjYyNzggMi4xNzkyNyA3LjgwMDg3IDIuMzA5ODlDMTAuMTQ1OSAyLjQ2NDcgMTIgNC40MTU4MiAxMiA2Ljc5OTk5VjEwLjI1QzEyIDExLjA1NjMgMTIuMDMyOSAxMS43MDc0IDEyLjcyMzYgMTIuMDUyOEMxMi45MzEgMTIuMTU2NSAxMy4wMzk5IDEyLjM4OTIgMTIuOTg2NiAxMi42MTQ5QzEyLjkzMzMgMTIuODQwNiAxMi43MzE5IDEzIDEyLjUgMTNIOC4xNjE0NEM4LjM2OTA0IDEzLjE4MzIgOC40OTk5NyAxMy40NTEzIDguNDk5OTcgMTMuNzVDOC40OTk5NyAxNC4zMDIzIDguMDUyMjYgMTQuNzUgNy40OTk5NyAxNC43NUM2Ljk0NzY5IDE0Ljc1IDYuNDk5OTcgMTQuMzAyMyA2LjQ5OTk3IDEzLjc1QzYuNDk5OTcgMTMuNDUxMyA2LjYzMDkxIDEzLjE4MzIgNi44Mzg1MSAxM0gyLjQ5OTk5QzIuMjY4MSAxMyAyLjA2NjY0IDEyLjg0MDYgMi4wMTMzNiAxMi42MTQ5QzEuOTYwMDkgMTIuMzg5MiAyLjA2ODk3IDEyLjE1NjUgMi4yNzYzOCAxMi4wNTI4QzIuOTY3MDggMTEuNzA3NCAyLjk5OTk5IDExLjA1NjMgMi45OTk5OSAxMC4yNVY2Ljc5OTk5QzIuOTk5OTkgNC40MTUzNyA0Ljg1NDgxIDIuNDYzOTYgNy4yMDA0MiAyLjMwOThDNi43Mzg2NyAyLjE3OTA4IDYuNDAwMzYgMS43NTQ0OCA2LjQwMDM2IDEuMjUwODZDNi40MDAzNiAwLjY0MzEwNCA2Ljg5MzA0IDAuMTUwNDIxIDcuNTAwOCAwLjE1MDQyMUM4LjEwODU1IDAuMTUwNDIxIDguNjAxMjQgMC42NDMxMDQgOC42MDEyNCAxLjI1MDg2Wk03LjQ5OTk5IDMuMjk5OTlDNS41NjY5OSAzLjI5OTk5IDMuOTk5OTkgNC44NjY5OSAzLjk5OTk5IDYuNzk5OTlWMTAuMjVMNC4wMDAwMiAxMC4zMDA5QzQuMDAwNSAxMC43NDYzIDQuMDAxMjEgMTEuNDA4NCAzLjY5OTI5IDEySDExLjMwMDdDMTAuOTk4OCAxMS40MDg0IDEwLjk5OTUgMTAuNzQ2MyAxMSAxMC4zMDA5TDExIDEwLjI1VjYuNzk5OTlDMTEgNC44NjY5OSA5LjQzMjk5IDMuMjk5OTkgNy40OTk5OSAzLjI5OTk5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMyA5QzMgNi41IDQuNSA0LjI1IDcuNSAxLjVDMTAuNSA0LjI1IDEyIDYuNSAxMiA5QzEyIDExLjQ4NTMgOS45ODUyOCAxMy41IDcuNSAxMy41QzUuMDE0NzIgMTMuNSAzIDExLjQ4NTMgMyA5Wk0xMC45NTI0IDguMzAzMDdDOS42NzM0NyA3LjgyMTIxIDguMjg3OSA4LjQ2MjA4IDYuOTg5NTYgOS4wNjI1OUM1LjkzMjcgOS41NTE0MiA0LjkzMzY1IDEwLjAxMzUgNC4wOTY5NSA5LjgyMTUzQzQuMDMzNTcgOS41NTgwNCA0IDkuMjgyOTQgNCA5QzQgNy4xMTIwMyA1LjAyNjg2IDUuMjcxOTUgNy41IDIuODczNTdDOS42NjgzNyA0Ljk3NjM5IDEwLjcyNSA2LjY1MDA0IDEwLjk1MjQgOC4zMDMwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgMi41QzMgMi4yMjM4NiAzLjIyMzg2IDIgMy41IDJIMTEuNUMxMS43NzYxIDIgMTIgMi4yMjM4NiAxMiAyLjVWMTMuNUMxMiAxMy42ODE4IDExLjkwMTQgMTMuODQ5MiAxMS43NDI0IDEzLjkzNzNDMTEuNTgzNCAxNC4wMjU0IDExLjM4OTEgMTQuMDIwMyAxMS4yMzUgMTMuOTI0TDcuNSAxMS41ODk2TDMuNzY1IDEzLjkyNEMzLjYxMDg3IDE0LjAyMDMgMy40MTY1OSAxNC4wMjU0IDMuMjU3NjIgMTMuOTM3M0MzLjA5ODY0IDEzLjg0OTIgMyAxMy42ODE4IDMgMTMuNVYyLjVaTTQgM1YxMi41OTc5TDYuOTcgMTAuNzQxNkM3LjI5NDI3IDEwLjUzOSA3LjcwNTczIDEwLjUzOSA4LjAzIDEwLjc0MTZMMTEgMTIuNTk3OVYzSDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjI1IDFDMC4yNSAwLjU4NTc4NiAwLjU4NTc4NiAwLjI1IDEgMC4yNUgxNEMxNC40MTQyIDAuMjUgMTQuNzUgMC41ODU3ODYgMTQuNzUgMVYxNEMxNC43NSAxNC40MTQyIDE0LjQxNDIgMTQuNzUgMTQgMTQuNzVIMUMwLjU4NTc4NiAxNC43NSAwLjI1IDE0LjQxNDIgMC4yNSAxNFYxWk0xLjc1IDEuNzVWMTMuMjVIMTMuMjVWMS43NUgxLjc1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIzXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSkpfSxJPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDEzLjI1TDE0IDEzLjI1VjE0Ljc1TDEgMTQuNzVWMTMuMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIzXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIzXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiOVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiMTFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSl9LEE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAgNy41QzAgNy4yMjM4NiAwLjIyMzg1OCA3IDAuNSA3SDNDMy4yNzYxNCA3IDMuNSA3LjIyMzg2IDMuNSA3LjVDMy41IDcuNzc2MTQgMy4yNzYxNCA4IDMgOEgwLjVDMC4yMjM4NTggOCAwIDcuNzc2MTQgMCA3LjVaTTUuNzUgNy41QzUuNzUgNy4yMjM4NiA1Ljk3Mzg2IDcgNi4yNSA3SDguNzVDOS4wMjYxNCA3IDkuMjUgNy4yMjM4NiA5LjI1IDcuNUM5LjI1IDcuNzc2MTQgOS4wMjYxNCA4IDguNzUgOEg2LjI1QzUuOTczODYgOCA1Ljc1IDcuNzc2MTQgNS43NSA3LjVaTTEyIDdDMTEuNzIzOSA3IDExLjUgNy4yMjM4NiAxMS41IDcuNUMxMS41IDcuNzc2MTQgMTEuNzIzOSA4IDEyIDhIMTQuNUMxNC43NzYxIDggMTUgNy43NzYxNCAxNSA3LjVDMTUgNy4yMjM4NiAxNC43NzYxIDcgMTQuNSA3SDEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS41IDYuNjI1QzEuMDE2NzUgNi42MjUgMC42MjUgNy4wMTY3NSAwLjYyNSA3LjVDMC42MjUgNy45ODMyNSAxLjAxNjc1IDguMzc1IDEuNSA4LjM3NUMxLjk4MzI1IDguMzc1IDIuMzc1IDcuOTgzMjUgMi4zNzUgNy41QzIuMzc1IDcuMDE2NzUgMS45ODMyNSA2LjYyNSAxLjUgNi42MjVaTTUuNSA2LjYyNUM1LjAxNjc1IDYuNjI1IDQuNjI1IDcuMDE2NzUgNC42MjUgNy41QzQuNjI1IDcuOTgzMjUgNS4wMTY3NSA4LjM3NSA1LjUgOC4zNzVDNS45ODMyNSA4LjM3NSA2LjM3NSA3Ljk4MzI1IDYuMzc1IDcuNUM2LjM3NSA3LjAxNjc1IDUuOTgzMjUgNi42MjUgNS41IDYuNjI1Wk05LjUgNi42MjVDOS4wMTY3NSA2LjYyNSA4LjYyNSA3LjAxNjc1IDguNjI1IDcuNUM4LjYyNSA3Ljk4MzI1IDkuMDE2NzUgOC4zNzUgOS41IDguMzc1QzkuOTgzMjUgOC4zNzUgMTAuMzc1IDcuOTgzMjUgMTAuMzc1IDcuNUMxMC4zNzUgNy4wMTY3NSA5Ljk4MzI1IDYuNjI1IDkuNSA2LjYyNVpNMTIuNjI1IDcuNUMxMi42MjUgNy4wMTY3NSAxMy4wMTY4IDYuNjI1IDEzLjUgNi42MjVDMTMuOTgzMiA2LjYyNSAxNC4zNzUgNy4wMTY3NSAxNC4zNzUgNy41QzE0LjM3NSA3Ljk4MzI1IDEzLjk4MzIgOC4zNzUgMTMuNSA4LjM3NUMxMy4wMTY4IDguMzc1IDEyLjYyNSA3Ljk4MzI1IDEyLjYyNSA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjc1IDFMMS43NSAxNEwwLjI0OTk5OSAxNEwwLjI1IDFMMS43NSAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMFwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTAgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiMTNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxMCAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTJcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDEyIDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTIgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDggNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDE0IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiMTNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIxM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDE0IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDUpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCA1KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCAzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDkpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCA5KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCAxMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiMTFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCAxMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNlwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNiA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI2XCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNiAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNFwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNCA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI0XCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNCAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDEwIDEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxMiAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI2XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA2IDEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjRcIix5OlwiMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDQgMSlcIixmaWxsOm59KSl9LEI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI1LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjUuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjNcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjlcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjlcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjExXCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjExXCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI5LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjkuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCIxMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjUuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjkuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIxMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pKX0sVj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMjUgMUwxMy4yNSAxNEwxNC43NSAxNEwxNC43NSAxTDEzLjI1IDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA1IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA1IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMyA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMyAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCAxIDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyA1KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSA1KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyAzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSAzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyA5KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSA5KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyAxMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgMTEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA5IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA5IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMTEgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDExIDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNSAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMyAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgOSAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMTEgMSlcIixmaWxsOm59KSl9LEQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuMjUgNy41QzEuMjUgNy4yMjM4NiAxLjQ3Mzg2IDcgMS43NSA3SDEzLjI1QzEzLjUyNjEgNyAxMy43NSA3LjIyMzg2IDEzLjc1IDcuNUMxMy43NSA3Ljc3NjE0IDEzLjUyNjEgOCAxMy4yNSA4SDEuNzVDMS40NzM4NiA4IDEuMjUgNy43NzYxNCAxLjI1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFo9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI1LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjlcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiOS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjExLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSAxLjQ5OTk0QzEgMS4yMjM4IDEuMjIzODYgMC45OTk5MzkgMS41IDAuOTk5OTM5SDZWMS45OTk5NEgyVjUuOTk5OTRIMVYxLjQ5OTk0Wk0xMyAxLjk5OTk0SDlWMC45OTk5MzlIMTMuNUMxMy43NzYxIDAuOTk5OTM5IDE0IDEuMjIzOCAxNCAxLjQ5OTk0VjUuOTk5OTRIMTNWMS45OTk5NFpNMSAxMy40OTk5VjguOTk5OTRIMlYxMi45OTk5SDZWMTMuOTk5OUgxLjVDMS4yMjM4NiAxMy45OTk5IDEgMTMuNzc2MSAxIDEzLjQ5OTlaTTEzIDEyLjk5OTlWOC45OTk5NEgxNFYxMy40OTk5QzE0IDEzLjc3NjEgMTMuNzc2MSAxMy45OTk5IDEzLjUgMTMuOTk5OUg5LjVWMTIuOTk5OUgxM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LCQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSAzQzEuMjIzODYgMyAxIDMuMjIzODYgMSAzLjVDMSAzLjc3NjE0IDEuMjIzODYgNCAxLjUgNEgxMy41QzEzLjc3NjEgNCAxNCAzLjc3NjE0IDE0IDMuNUMxNCAzLjIyMzg2IDEzLjc3NjEgMyAxMy41IDNIMS41Wk0xIDcuNUMxIDcuMjIzODYgMS4yMjM4NiA3IDEuNSA3SDMuNUMzLjc3NjE0IDcgNCA3LjIyMzg2IDQgNy41QzQgNy43NzYxNCAzLjc3NjE0IDggMy41IDhIMS41QzEuMjIzODYgOCAxIDcuNzc2MTQgMSA3LjVaTTEgMTEuNUMxIDExLjIyMzkgMS4yMjM4NiAxMSAxLjUgMTFDMS43NzYxNCAxMSAyIDExLjIyMzkgMiAxMS41QzIgMTEuNzc2MSAxLjc3NjE0IDEyIDEuNSAxMkMxLjIyMzg2IDEyIDEgMTEuNzc2MSAxIDExLjVaTTMgMTEuNUMzIDExLjIyMzkgMy4yMjM4NiAxMSAzLjUgMTFDMy43NzYxNCAxMSA0IDExLjIyMzkgNCAxMS41QzQgMTEuNzc2MSAzLjc3NjE0IDEyIDMuNSAxMkMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVaTTUuNSAxMUM1LjIyMzg2IDExIDUgMTEuMjIzOSA1IDExLjVDNSAxMS43NzYxIDUuMjIzODYgMTIgNS41IDEyQzUuNzc2MTQgMTIgNiAxMS43NzYxIDYgMTEuNUM2IDExLjIyMzkgNS43NzYxNCAxMSA1LjUgMTFaTTcgMTEuNUM3IDExLjIyMzkgNy4yMjM4NiAxMSA3LjUgMTFDNy43NzYxNCAxMSA4IDExLjIyMzkgOCAxMS41QzggMTEuNzc2MSA3Ljc3NjE0IDEyIDcuNSAxMkM3LjIyMzg2IDEyIDcgMTEuNzc2MSA3IDExLjVaTTkuNSAxMUM5LjIyMzg2IDExIDkgMTEuMjIzOSA5IDExLjVDOSAxMS43NzYxIDkuMjIzODYgMTIgOS41IDEyQzkuNzc2MTQgMTIgMTAgMTEuNzc2MSAxMCAxMS41QzEwIDExLjIyMzkgOS43NzYxNCAxMSA5LjUgMTFaTTExIDExLjVDMTEgMTEuMjIzOSAxMS4yMjM5IDExIDExLjUgMTFDMTEuNzc2MSAxMSAxMiAxMS4yMjM5IDEyIDExLjVDMTIgMTEuNzc2MSAxMS43NzYxIDEyIDExLjUgMTJDMTEuMjIzOSAxMiAxMSAxMS43NzYxIDExIDExLjVaTTEzLjUgMTFDMTMuMjIzOSAxMSAxMyAxMS4yMjM5IDEzIDExLjVDMTMgMTEuNzc2MSAxMy4yMjM5IDEyIDEzLjUgMTJDMTMuNzc2MSAxMiAxNCAxMS43NzYxIDE0IDExLjVDMTQgMTEuMjIzOSAxMy43NzYxIDExIDEzLjUgMTFaTTYuNSA3QzYuMjIzODYgNyA2IDcuMjIzODYgNiA3LjVDNiA3Ljc3NjE0IDYuMjIzODYgOCA2LjUgOEg4LjVDOC43NzYxNCA4IDkgNy43NzYxNCA5IDcuNUM5IDcuMjIzODYgOC43NzYxNCA3IDguNSA3SDYuNVpNMTEgNy41QzExIDcuMjIzODYgMTEuMjIzOSA3IDExLjUgN0gxMy41QzEzLjc3NjEgNyAxNCA3LjIyMzg2IDE0IDcuNUMxNCA3Ljc3NjE0IDEzLjc3NjEgOCAxMy41IDhIMTEuNUMxMS4yMjM5IDggMTEgNy43NzYxNCAxMSA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxOPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCAxLjc1TDEgMS43NUwxIDAuMjQ5OTk5TDE0IDAuMjVMMTQgMS43NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIxMFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgOCAxMClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCIxMFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiAxMClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIxMlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgOCAxMilcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCIxMlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiAxMilcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA4IDgpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiMTRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjJcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIyXCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAyIDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMFwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxMCA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMFwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTAgMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjhcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDEyIDgpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxMiAxNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNlwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA2IDgpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjZcIix5OlwiMTRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDYgMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjRcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgNCA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI0XCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA0IDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjZcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggNilcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCI2XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAyIDYpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgOCA0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIyXCIseTpcIjRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDIgNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiMTBcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDEwKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIxMlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTQgMTIpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjhcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDgpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxNCAxNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiNlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTQgNilcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTQgNClcIixmaWxsOm59KSl9LEY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEyLjUgMkgyLjVDMi4yMjM4NiAyIDIgMi4yMjM4NiAyIDIuNVYxMi41QzIgMTIuNzc2MSAyLjIyMzg2IDEzIDIuNSAxM0gxMi41QzEyLjc3NjEgMTMgMTMgMTIuNzc2MSAxMyAxMi41VjIuNUMxMyAyLjIyMzg2IDEyLjc3NjEgMiAxMi41IDJaTTIuNSAxQzEuNjcxNTcgMSAxIDEuNjcxNTcgMSAyLjVWMTIuNUMxIDEzLjMyODQgMS42NzE1NyAxNCAyLjUgMTRIMTIuNUMxMy4zMjg0IDE0IDE0IDEzLjMyODQgMTQgMTIuNVYyLjVDMTQgMS42NzE1NyAxMy4zMjg0IDEgMTIuNSAxSDIuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuOTk5OTggMC45OTk5NzZDMS40NDc2OSAwLjk5OTk3NiAwLjk5OTk3NiAxLjQ0NzY5IDAuOTk5OTc2IDEuOTk5OThWMTNDMC45OTk5NzYgMTMuNTUyMyAxLjQ0NzY5IDE0IDEuOTk5OTggMTRIMTNDMTMuNTUyMyAxNCAxNCAxMy41NTIzIDE0IDEzVjEuOTk5OThDMTQgMS40NDc2OSAxMy41NTIzIDAuOTk5OTc2IDEzIDAuOTk5OTc2SDEuOTk5OThaTTEuOTk5OTggMS45OTk5OEwxMyAxLjk5OTk4VjEzSDEuOTk5OThWMS45OTk5OFpNNC40OTk5NiAzLjk5OTk2QzQuMjIzODIgMy45OTk5NiAzLjk5OTk2IDQuMjIzODIgMy45OTk5NiA0LjQ5OTk2VjEwLjVDMy45OTk5NiAxMC43NzYxIDQuMjIzODIgMTEgNC40OTk5NiAxMUgxMC41QzEwLjc3NjEgMTEgMTEgMTAuNzc2MSAxMSAxMC41VjQuNDk5OTZDMTEgNC4yMjM4MiAxMC43NzYxIDMuOTk5OTYgMTAuNSAzLjk5OTk2SDQuNDk5OTZaTTQuOTk5OTYgOS45OTk5NlY0Ljk5OTk2SDkuOTk5OTZWOS45OTk5Nkg0Ljk5OTk2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiA1SDEzQzEzLjU1MjMgNSAxNCA1LjQ0NzcyIDE0IDZWOUMxNCA5LjU1MjI4IDEzLjU1MjMgMTAgMTMgMTBIMkMxLjQ0NzcyIDEwIDEgOS41NTIyOCAxIDlWNkMxIDUuNDQ3NzIgMS40NDc3MiA1IDIgNVpNMCA2QzAgNC44OTU0MyAwLjg5NTQzMSA0IDIgNEgxM0MxNC4xMDQ2IDQgMTUgNC44OTU0MyAxNSA2VjlDMTUgMTAuMTA0NiAxNC4xMDQ2IDExIDEzIDExSDJDMC44OTU0MyAxMSAwIDEwLjEwNDYgMCA5VjZaTTQuNSA2Ljc1QzQuMDg1NzkgNi43NSAzLjc1IDcuMDg1NzkgMy43NSA3LjVDMy43NSA3LjkxNDIxIDQuMDg1NzkgOC4yNSA0LjUgOC4yNUM0LjkxNDIxIDguMjUgNS4yNSA3LjkxNDIxIDUuMjUgNy41QzUuMjUgNy4wODU3OSA0LjkxNDIxIDYuNzUgNC41IDYuNzVaTTYuNzUgNy41QzYuNzUgNy4wODU3OSA3LjA4NTc5IDYuNzUgNy41IDYuNzVDNy45MTQyMSA2Ljc1IDguMjUgNy4wODU3OSA4LjI1IDcuNUM4LjI1IDcuOTE0MjEgNy45MTQyMSA4LjI1IDcuNSA4LjI1QzcuMDg1NzkgOC4yNSA2Ljc1IDcuOTE0MjEgNi43NSA3LjVaTTEwLjUgNi43NUMxMC4wODU4IDYuNzUgOS43NSA3LjA4NTc5IDkuNzUgNy41QzkuNzUgNy45MTQyMSAxMC4wODU4IDguMjUgMTAuNSA4LjI1QzEwLjkxNDIgOC4yNSAxMS4yNSA3LjkxNDIxIDExLjI1IDcuNUMxMS4yNSA3LjA4NTc5IDEwLjkxNDIgNi43NSAxMC41IDYuNzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx6PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjUgMUM0Ljc3NjE0IDEgNSAxLjIyMzg2IDUgMS41VjJIMTBWMS41QzEwIDEuMjIzODYgMTAuMjIzOSAxIDEwLjUgMUMxMC43NzYxIDEgMTEgMS4yMjM4NiAxMSAxLjVWMkgxMi41QzEzLjMyODQgMiAxNCAyLjY3MTU3IDE0IDMuNVYxMi41QzE0IDEzLjMyODQgMTMuMzI4NCAxNCAxMi41IDE0SDIuNUMxLjY3MTU3IDE0IDEgMTMuMzI4NCAxIDEyLjVWMy41QzEgMi42NzE1NyAxLjY3MTU3IDIgMi41IDJINFYxLjVDNCAxLjIyMzg2IDQuMjIzODYgMSA0LjUgMVpNMTAgM1YzLjVDMTAgMy43NzYxNCAxMC4yMjM5IDQgMTAuNSA0QzEwLjc3NjEgNCAxMSAzLjc3NjE0IDExIDMuNVYzSDEyLjVDMTIuNzc2MSAzIDEzIDMuMjIzODYgMTMgMy41VjVIMlYzLjVDMiAzLjIyMzg2IDIuMjIzODYgMyAyLjUgM0g0VjMuNUM0IDMuNzc2MTQgNC4yMjM4NiA0IDQuNSA0QzQuNzc2MTQgNCA1IDMuNzc2MTQgNSAzLjVWM0gxMFpNMiA2VjEyLjVDMiAxMi43NzYxIDIuMjIzODYgMTMgMi41IDEzSDEyLjVDMTIuNzc2MSAxMyAxMyAxMi43NzYxIDEzIDEyLjVWNkgyWk03IDcuNUM3IDcuMjIzODYgNy4yMjM4NiA3IDcuNSA3QzcuNzc2MTQgNyA4IDcuMjIzODYgOCA3LjVDOCA3Ljc3NjE0IDcuNzc2MTQgOCA3LjUgOEM3LjIyMzg2IDggNyA3Ljc3NjE0IDcgNy41Wk05LjUgN0M5LjIyMzg2IDcgOSA3LjIyMzg2IDkgNy41QzkgNy43NzYxNCA5LjIyMzg2IDggOS41IDhDOS43NzYxNCA4IDEwIDcuNzc2MTQgMTAgNy41QzEwIDcuMjIzODYgOS43NzYxNCA3IDkuNSA3Wk0xMSA3LjVDMTEgNy4yMjM4NiAxMS4yMjM5IDcgMTEuNSA3QzExLjc3NjEgNyAxMiA3LjIyMzg2IDEyIDcuNUMxMiA3Ljc3NjE0IDExLjc3NjEgOCAxMS41IDhDMTEuMjIzOSA4IDExIDcuNzc2MTQgMTEgNy41Wk0xMS41IDlDMTEuMjIzOSA5IDExIDkuMjIzODYgMTEgOS41QzExIDkuNzc2MTQgMTEuMjIzOSAxMCAxMS41IDEwQzExLjc3NjEgMTAgMTIgOS43NzYxNCAxMiA5LjVDMTIgOS4yMjM4NiAxMS43NzYxIDkgMTEuNSA5Wk05IDkuNUM5IDkuMjIzODYgOS4yMjM4NiA5IDkuNSA5QzkuNzc2MTQgOSAxMCA5LjIyMzg2IDEwIDkuNUMxMCA5Ljc3NjE0IDkuNzc2MTQgMTAgOS41IDEwQzkuMjIzODYgMTAgOSA5Ljc3NjE0IDkgOS41Wk03LjUgOUM3LjIyMzg2IDkgNyA5LjIyMzg2IDcgOS41QzcgOS43NzYxNCA3LjIyMzg2IDEwIDcuNSAxMEM3Ljc3NjE0IDEwIDggOS43NzYxNCA4IDkuNUM4IDkuMjIzODYgNy43NzYxNCA5IDcuNSA5Wk01IDkuNUM1IDkuMjIzODYgNS4yMjM4NiA5IDUuNSA5QzUuNzc2MTQgOSA2IDkuMjIzODYgNiA5LjVDNiA5Ljc3NjE0IDUuNzc2MTQgMTAgNS41IDEwQzUuMjIzODYgMTAgNSA5Ljc3NjE0IDUgOS41Wk0zLjUgOUMzLjIyMzg2IDkgMyA5LjIyMzg2IDMgOS41QzMgOS43NzYxNCAzLjIyMzg2IDEwIDMuNSAxMEMzLjc3NjE0IDEwIDQgOS43NzYxNCA0IDkuNUM0IDkuMjIzODYgMy43NzYxNCA5IDMuNSA5Wk0zIDExLjVDMyAxMS4yMjM5IDMuMjIzODYgMTEgMy41IDExQzMuNzc2MTQgMTEgNCAxMS4yMjM5IDQgMTEuNUM0IDExLjc3NjEgMy43NzYxNCAxMiAzLjUgMTJDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41Wk01LjUgMTFDNS4yMjM4NiAxMSA1IDExLjIyMzkgNSAxMS41QzUgMTEuNzc2MSA1LjIyMzg2IDEyIDUuNSAxMkM1Ljc3NjE0IDEyIDYgMTEuNzc2MSA2IDExLjVDNiAxMS4yMjM5IDUuNzc2MTQgMTEgNS41IDExWk03IDExLjVDNyAxMS4yMjM5IDcuMjIzODYgMTEgNy41IDExQzcuNzc2MTQgMTEgOCAxMS4yMjM5IDggMTEuNUM4IDExLjc3NjEgNy43NzYxNCAxMiA3LjUgMTJDNy4yMjM4NiAxMiA3IDExLjc3NjEgNyAxMS41Wk05LjUgMTFDOS4yMjM4NiAxMSA5IDExLjIyMzkgOSAxMS41QzkgMTEuNzc2MSA5LjIyMzg2IDEyIDkuNSAxMkM5Ljc3NjE0IDEyIDEwIDExLjc3NjEgMTAgMTEuNUMxMCAxMS4yMjM5IDkuNzc2MTQgMTEgOS41IDExWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAzQzEuNDQ3NzIgMyAxIDMuNDQ3NzIgMSA0VjExQzEgMTEuNTUyMyAxLjQ0NzcyIDEyIDIgMTJIMTNDMTMuNTUyMyAxMiAxNCAxMS41NTIzIDE0IDExVjRDMTQgMy40NDc3MiAxMy41NTIzIDMgMTMgM0gyWk0wIDRDMCAyLjg5NTQzIDAuODk1NDMxIDIgMiAySDEzQzE0LjEwNDYgMiAxNSAyLjg5NTQzIDE1IDRWMTFDMTUgMTIuMTA0NiAxNC4xMDQ2IDEzIDEzIDEzSDJDMC44OTU0MzEgMTMgMCAxMi4xMDQ2IDAgMTFWNFpNMiA0LjI1QzIgNC4xMTE5MyAyLjExMTkzIDQgMi4yNSA0SDQuNzVDNC44ODgwNyA0IDUgNC4xMTE5MyA1IDQuMjVWNS43NTQ1NEM1IDUuODkyNjEgNC44ODgwNyA2LjAwNDU0IDQuNzUgNi4wMDQ1NEgyLjI1QzIuMTExOTMgNi4wMDQ1NCAyIDUuODkyNjEgMiA1Ljc1NDU0VjQuMjVaTTEyLjEwMSA3LjU4NDIxQzEyLjEwMSA5LjAyMDczIDEwLjkzNjUgMTAuMTg1MyA5LjQ5OTk4IDEwLjE4NTNDOC4wNjM0NiAxMC4xODUzIDYuODk4OTMgOS4wMjA3MyA2Ljg5ODkzIDcuNTg0MjFDNi44OTg5MyA2LjE0NzY5IDguMDYzNDYgNC45ODMxNSA5LjQ5OTk4IDQuOTgzMTVDMTAuOTM2NSA0Ljk4MzE1IDEyLjEwMSA2LjE0NzY5IDEyLjEwMSA3LjU4NDIxWk0xMy4xMDEgNy41ODQyMUMxMy4xMDEgOS41NzMwMiAxMS40ODg4IDExLjE4NTMgOS40OTk5OCAxMS4xODUzQzcuNTExMTcgMTEuMTg1MyA1Ljg5ODkzIDkuNTczMDIgNS44OTg5MyA3LjU4NDIxQzUuODk4OTMgNS41OTU0IDcuNTExMTcgMy45ODMxNSA5LjQ5OTk4IDMuOTgzMTVDMTEuNDg4OCAzLjk4MzE1IDEzLjEwMSA1LjU5NTQgMTMuMTAxIDcuNTg0MjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxxPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDMuNUMyIDMuMjIzODYgMi4yMjM4NiAzIDIuNSAzSDEyLjVDMTIuNzc2MSAzIDEzIDMuMjIzODYgMTMgMy41VjkuNUMxMyA5Ljc3NjE0IDEyLjc3NjEgMTAgMTIuNSAxMEgyLjVDMi4yMjM4NiAxMCAyIDkuNzc2MTQgMiA5LjVWMy41Wk0yIDEwLjkxNDZDMS40MTc0IDEwLjcwODcgMSAxMC4xNTMxIDEgOS41VjMuNUMxIDIuNjcxNTcgMS42NzE1NyAyIDIuNSAySDEyLjVDMTMuMzI4NCAyIDE0IDIuNjcxNTcgMTQgMy41VjkuNUMxNCAxMC4xNTMxIDEzLjU4MjYgMTAuNzA4NyAxMyAxMC45MTQ2VjExLjVDMTMgMTIuMzI4NCAxMi4zMjg0IDEzIDExLjUgMTNIMy41QzIuNjcxNTcgMTMgMiAxMi4zMjg0IDIgMTEuNVYxMC45MTQ2Wk0xMiAxMVYxMS41QzEyIDExLjc3NjEgMTEuNzc2MSAxMiAxMS41IDEySDMuNUMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVWMTFIMTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxZPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjUgM0MyLjIyMzg2IDMgMiAzLjIyMzg2IDIgMy41VjkuNUMyIDkuNzc2MTQgMi4yMjM4NiAxMCAyLjUgMTBIMTIuNUMxMi43NzYxIDEwIDEzIDkuNzc2MTQgMTMgOS41VjMuNUMxMyAzLjIyMzg2IDEyLjc3NjEgMyAxMi41IDNIMi41Wk0xIDkuNUMxIDEwLjE1MzEgMS40MTc0IDEwLjcwODcgMiAxMC45MTQ2VjExLjVDMiAxMi4zMjg0IDIuNjcxNTcgMTMgMy41IDEzSDExLjVDMTIuMzI4NCAxMyAxMyAxMi4zMjg0IDEzIDExLjVWMTAuOTE0NkMxMy41ODI2IDEwLjcwODcgMTQgMTAuMTUzMSAxNCA5LjVWMy41QzE0IDIuNjcxNTcgMTMuMzI4NCAyIDEyLjUgMkgyLjVDMS42NzE1NyAyIDEgMi42NzE1NyAxIDMuNVY5LjVaTTEyIDExLjVWMTFIM1YxMS41QzMgMTEuNzc2MSAzLjIyMzg2IDEyIDMuNSAxMkgxMS41QzExLjc3NjEgMTIgMTIgMTEuNzc2MSAxMiAxMS41Wk01LjUgNkM1LjIyMzg2IDYgNSA2LjIyMzg2IDUgNi41QzUgNi43NzYxNCA1LjIyMzg2IDcgNS41IDdIOS41QzkuNzc2MTQgNyAxMCA2Ljc3NjE0IDEwIDYuNUMxMCA2LjIyMzg2IDkuNzc2MTQgNiA5LjUgNkg1LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxLPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDMuNUMyIDMuMjIzODYgMi4yMjM4NiAzIDIuNSAzSDEyLjVDMTIuNzc2MSAzIDEzIDMuMjIzODYgMTMgMy41VjkuNUMxMyA5Ljc3NjE0IDEyLjc3NjEgMTAgMTIuNSAxMEgyLjVDMi4yMjM4NiAxMCAyIDkuNzc2MTQgMiA5LjVWMy41Wk0yIDEwLjkxNDZDMS40MTc0IDEwLjcwODcgMSAxMC4xNTMxIDEgOS41VjMuNUMxIDIuNjcxNTcgMS42NzE1NyAyIDIuNSAySDEyLjVDMTMuMzI4NCAyIDE0IDIuNjcxNTcgMTQgMy41VjkuNUMxNCAxMC4xNTMxIDEzLjU4MjYgMTAuNzA4NyAxMyAxMC45MTQ2VjExLjVDMTMgMTIuMzI4NCAxMi4zMjg0IDEzIDExLjUgMTNIMy41QzIuNjcxNTcgMTMgMiAxMi4zMjg0IDIgMTEuNVYxMC45MTQ2Wk0xMiAxMVYxMS41QzEyIDExLjc3NjEgMTEuNzc2MSAxMiAxMS41IDEySDMuNUMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVWMTFIMTJaTTUgNi41QzUgNi4yMjM4NiA1LjIyMzg2IDYgNS41IDZIN1Y0LjVDNyA0LjIyMzg2IDcuMjIzODYgNCA3LjUgNEM3Ljc3NjE0IDQgOCA0LjIyMzg2IDggNC41VjZIOS41QzkuNzc2MTQgNiAxMCA2LjIyMzg2IDEwIDYuNUMxMCA2Ljc3NjE0IDkuNzc2MTQgNyA5LjUgN0g4VjguNUM4IDguNzc2MTQgNy43NzYxNCA5IDcuNSA5QzcuMjIzODYgOSA3IDguNzc2MTQgNyA4LjVWN0g1LjVDNS4yMjM4NiA3IDUgNi43NzYxNCA1IDYuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMTgxNzkgNi4xODE4MUM0LjM1NzUzIDYuMDA2MDggNC42NDI0NSA2LjAwNjA4IDQuODE4MTkgNi4xODE4MUw3LjQ5OTk5IDguODYzNjJMMTAuMTgxOCA2LjE4MTgxQzEwLjM1NzUgNi4wMDYwOCAxMC42NDI0IDYuMDA2MDggMTAuODE4MiA2LjE4MTgxQzEwLjk5MzkgNi4zNTc1NSAxMC45OTM5IDYuNjQyNDcgMTAuODE4MiA2LjgxODIxTDcuODE4MTkgOS44MTgyMUM3LjczMzc5IDkuOTAyNiA3LjYxOTM0IDkuOTUwMDEgNy40OTk5OSA5Ljk1MDAxQzcuMzgwNjQgOS45NTAwMSA3LjI2NjE4IDkuOTAyNiA3LjE4MTc5IDkuODE4MjFMNC4xODE3OSA2LjgxODIxQzQuMDA2MDUgNi42NDI0NyA0LjAwNjA1IDYuMzU3NTUgNC4xODE3OSA2LjE4MTgxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC44MTgwOSA0LjE4MTc5QzguOTkzODMgNC4zNTc1MyA4Ljk5MzgzIDQuNjQyNDUgOC44MTgwOSA0LjgxODE5TDYuMTM2MjkgNy40OTk5OUw4LjgxODA5IDEwLjE4MThDOC45OTM4MyAxMC4zNTc1IDguOTkzODMgMTAuNjQyNCA4LjgxODA5IDEwLjgxODJDOC42NDIzNiAxMC45OTM5IDguMzU3NDMgMTAuOTkzOSA4LjE4MTcgMTAuODE4Mkw1LjE4MTcgNy44MTgxOUM1LjA5NzMxIDcuNzMzNzkgNS4wNDk5IDcuNjE5MzMgNS4wNDk5IDcuNDk5OTlDNS4wNDk5IDcuMzgwNjQgNS4wOTczMSA3LjI2NjE4IDUuMTgxNyA3LjE4MTc5TDguMTgxNyA0LjE4MTc5QzguMzU3NDMgNC4wMDYwNSA4LjY0MjM2IDQuMDA2MDUgOC44MTgwOSA0LjE4MTc5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi4xODE5NCA0LjE4MTg1QzYuMzU3NjcgNC4wMDYxMSA2LjY0MjYgNC4wMDYxMSA2LjgxODMzIDQuMTgxODVMOS44MTgzMyA3LjE4MTg1QzkuOTAyNzIgNy4yNjYyNCA5Ljk1MDEzIDcuMzgwNyA5Ljk1MDEzIDcuNTAwMDVDOS45NTAxMyA3LjYxOTQgOS45MDI3MiA3LjczMzg2IDkuODE4MzMgNy44MTgyNUw2LjgxODMzIDEwLjgxODJDNi42NDI2IDEwLjk5NCA2LjM1NzY3IDEwLjk5NCA2LjE4MTk0IDEwLjgxODJDNi4wMDYyIDEwLjY0MjUgNi4wMDYyIDEwLjM1NzYgNi4xODE5NCAxMC4xODE5TDguODYzNzQgNy41MDAwNUw2LjE4MTk0IDQuODE4MjVDNi4wMDYyIDQuNjQyNTEgNi4wMDYyIDQuMzU3NTkgNi4xODE5NCA0LjE4MTg1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuOTMxNzkgNS40MzE3OUM0Ljc1NjA1IDUuNjA3NTMgNC43NTYwNSA1Ljg5MjQ1IDQuOTMxNzkgNi4wNjgxOUM1LjEwNzUzIDYuMjQzOTIgNS4zOTI0NSA2LjI0MzkyIDUuNTY4MTkgNi4wNjgxOUw3LjQ5OTk5IDQuMTM2MzhMOS40MzE3OSA2LjA2ODE5QzkuNjA3NTMgNi4yNDM5MiA5Ljg5MjQ1IDYuMjQzOTIgMTAuMDY4MiA2LjA2ODE5QzEwLjI0MzkgNS44OTI0NSAxMC4yNDM5IDUuNjA3NTMgMTAuMDY4MiA1LjQzMTc5TDcuODE4MTkgMy4xODE3OUM3LjczMzc5IDMuMDk3NCA3LjYxOTMzIDMuMDQ5OTkgNy40OTk5OSAzLjA0OTk5QzcuMzgwNjQgMy4wNDk5OSA3LjI2NjE4IDMuMDk3NCA3LjE4MTc5IDMuMTgxNzlMNC45MzE3OSA1LjQzMTc5Wk0xMC4wNjgyIDkuNTY4MTlDMTAuMjQzOSA5LjM5MjQ1IDEwLjI0MzkgOS4xMDc1MyAxMC4wNjgyIDguOTMxNzlDOS44OTI0NSA4Ljc1NjA2IDkuNjA3NTMgOC43NTYwNiA5LjQzMTc5IDguOTMxNzlMNy40OTk5OSAxMC44NjM2TDUuNTY4MTkgOC45MzE3OUM1LjM5MjQ1IDguNzU2MDYgNS4xMDc1MyA4Ljc1NjA2IDQuOTMxNzkgOC45MzE3OUM0Ljc1NjA1IDkuMTA3NTMgNC43NTYwNSA5LjM5MjQ1IDQuOTMxNzkgOS41NjgxOUw3LjE4MTc5IDExLjgxODJDNy4zNTc1MyAxMS45OTM5IDcuNjQyNDUgMTEuOTkzOSA3LjgxODE5IDExLjgxODJMMTAuMDY4MiA5LjU2ODE5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMTgxNzkgOC44MTgxOUM0LjAwNjA1IDguNjQyNDUgNC4wMDYwNSA4LjM1NzUzIDQuMTgxNzkgOC4xODE3OUw3LjE4MTc5IDUuMTgxNzlDNy4yNjYxOCA1LjA5NzQgNy4zODA2NCA1LjA0OTk5IDcuNDk5OTkgNS4wNDk5OUM3LjYxOTMzIDUuMDQ5OTkgNy43MzM3OSA1LjA5NzQgNy44MTgxOSA1LjE4MTc5TDEwLjgxODIgOC4xODE3OUMxMC45OTM5IDguMzU3NTMgMTAuOTkzOSA4LjY0MjQ1IDEwLjgxODIgOC44MTgxOUMxMC42NDI0IDguOTkzOTIgMTAuMzU3NSA4Ljk5MzkyIDEwLjE4MTggOC44MTgxOUw3LjQ5OTk5IDYuMTM2MzhMNC44MTgxOSA4LjgxODE5QzQuNjQyNDUgOC45OTM5MiA0LjM1NzUzIDguOTkzOTIgNC4xODE3OSA4LjgxODE5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEyLjUgM0wyLjQ5OTk5IDMuMDAwMDJDMS42NzE1NyAzLjAwMDAyIDAuOTk5OTk5IDMuNjcxNTkgMC45OTk5OTkgNC41MDAwMlY5LjUwMDAyQzAuOTk5OTk5IDEwLjMyODQgMS42NzE1NyAxMSAyLjUgMTFINy41MDAwMkM3LjYzMjYzIDExIDcuNzU5ODEgMTEuMDUyNyA3Ljg1MzU4IDExLjE0NjVMOS45OTk5OSAxMy4yOTI5VjExLjVDOS45OTk5OSAxMS4yMjM5IDEwLjIyMzkgMTEgMTAuNSAxMUgxMi41QzEzLjMyODQgMTEgMTQgMTAuMzI4NCAxNCA5LjUwMDAyVjQuNUMxNCAzLjY3MTU3IDEzLjMyODQgMyAxMi41IDNaTTIuNDk5OTkgMi4wMDAwMkwxMi41IDJDMTMuODgwNyAyIDE1IDMuMTE5MjggMTUgNC41VjkuNTAwMDJDMTUgMTAuODgwNyAxMy44ODA3IDEyIDEyLjUgMTJIMTFWMTQuNUMxMSAxNC43MDIyIDEwLjg3ODIgMTQuODg0NSAxMC42OTEzIDE0Ljk2MTlDMTAuNTA0NSAxNS4wMzkzIDEwLjI4OTQgMTQuOTk2NSAxMC4xNDY0IDE0Ljg1MzVMNy4yOTI5MiAxMkgyLjVDMS4xMTkyOSAxMiAwIDEwLjg4MDcgMCA5LjUwMDAyVjQuNTAwMDJDMCAzLjExOTMxIDEuMTE5MjggMi4wMDAwMiAyLjQ5OTk5IDIuMDAwMDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxyZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuNDY2OSAzLjcyNjg0QzExLjc1NTggMy45MTU3NCAxMS44MzY5IDQuMzAzMDggMTEuNjQ4IDQuNTkxOThMNy4zOTc5OSAxMS4wOTJDNy4yOTc4MyAxMS4yNDUyIDcuMTM1NTYgMTEuMzQ2NyA2Ljk1NDAyIDExLjM2OTlDNi43NzI0NyAxMS4zOTMxIDYuNTg5ODkgMTEuMzM1NSA2LjQ1NDQ2IDExLjIxMjRMMy43MDQ0NiA4LjcxMjQxQzMuNDQ5MDUgOC40ODAyMiAzLjQzMDIzIDguMDg0OTQgMy42NjI0MiA3LjgyOTUzQzMuODk0NjEgNy41NzQxMiA0LjI4OTg5IDcuNTU1MjkgNC41NDUzIDcuNzg3NDlMNi43NTI5MiA5Ljc5NDQxTDEwLjYwMTggMy45MDc5MkMxMC43OTA3IDMuNjE5MDIgMTEuMTc4IDMuNTM3OTUgMTEuNDY2OSAzLjcyNjg0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sb2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzcwNDVDMy44NDIyMiAwLjg3NzA0NSAwLjg3NzA3NSAzLjg0MjE5IDAuODc3MDc1IDcuNDk5ODhDMC44NzcwNzUgMTEuMTU3NSAzLjg0MjIyIDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzExLjE1NzYgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMy44NDIxOSAxMS4xNTc2IDAuODc3MDQ1IDcuNDk5OTEgMC44NzcwNDVaTTEuODI3MDggNy40OTk4OEMxLjgyNzA4IDQuMzY2ODYgNC4zNjY4OSAxLjgyNzA0IDcuNDk5OTEgMS44MjcwNEMxMC42MzI5IDEuODI3MDQgMTMuMTcyNyA0LjM2Njg2IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDEwLjYzMjkgMTAuNjMyOSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0M0LjM2Njg5IDEzLjE3MjcgMS44MjcwOCAxMC42MzI5IDEuODI3MDggNy40OTk4OFpNMTAuMTU4OSA1LjUzNzc0QzEwLjMxNzggNS4zMTE5MSAxMC4yNjM2IDUuMDAwMDEgMTAuMDM3OCA0Ljg0MTA5QzkuODExOTQgNC42ODIxNyA5LjUwMDA0IDQuNzM2NDIgOS4zNDExMiA0Ljk2MjI1TDYuNTE5NzcgOC45NzE1NEw1LjM1NjgxIDcuNzg3MDZDNS4xNjMzNCA3LjU5MDAyIDQuODQ2NzcgNy41ODcxMSA0LjY0OTczIDcuNzgwNThDNC40NTI2OCA3Ljk3NDA0IDQuNDQ5NzggOC4yOTA2MSA0LjY0MzI1IDguNDg3NjVMNi4yMjY1OCAxMC4xMDAzQzYuMzMwNTQgMTAuMjA2MiA2LjQ3NjE3IDEwLjI2MDQgNi42MjQwNyAxMC4yNDgzQzYuNzcxOTcgMTAuMjM2MyA2LjkwNjg2IDEwLjE1OTEgNi45OTIyNiAxMC4wMzc3TDEwLjE1ODkgNS41Mzc3NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGllPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDNIMTJWMTJIM0wzIDNaTTIgM0MyIDIuNDQ3NzEgMi40NDc3MiAyIDMgMkgxMkMxMi41NTIzIDIgMTMgMi40NDc3MiAxMyAzVjEyQzEzIDEyLjU1MjMgMTIuNTUyMyAxMyAxMiAxM0gzQzIuNDQ3NzEgMTMgMiAxMi41NTIzIDIgMTJWM1pNMTAuMzQ5OCA1LjUxMTA1QzEwLjUwNiA1LjI4MzM3IDEwLjQ0ODEgNC45NzIxMiAxMC4yMjA0IDQuODE1ODdDOS45OTI3NSA0LjY1OTYxIDkuNjgxNSA0LjcxNzUxIDkuNTI1MjUgNC45NDUxOUw2LjY0MDQ4IDkuMTQ4NTdMNS4xOTczMyA3LjQwODg5QzUuMDIxMDIgNy4xOTYzNSA0LjcwNTggNy4xNjY5OSA0LjQ5MzI3IDcuMzQzMjlDNC4yODA3MyA3LjUxOTYgNC4yNTEzNyA3LjgzNDgyIDQuNDI3NjcgOC4wNDczNUw2LjI5MzQgMTAuMjk2NEM2LjM5MzQ4IDEwLjQxNzEgNi41NDQzNyAxMC40ODM4IDYuNzAwOTcgMTAuNDc2N0M2Ljg1NzU3IDEwLjQ2OTUgNy4wMDE3NyAxMC4zODk0IDcuMDkwNDcgMTAuMjYwMUwxMC4zNDk4IDUuNTExMDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4xMzUyMyA2LjE1ODAzQzMuMzI0MSA1Ljk1NjU3IDMuNjQwNTIgNS45NDYzNyAzLjg0MTk3IDYuMTM1MjNMNy41IDkuNTY0NjRMMTEuMTU4IDYuMTM1MjNDMTEuMzU5NSA1Ljk0NjM3IDExLjY3NTkgNS45NTY1NyAxMS44NjQ4IDYuMTU4MDNDMTIuMDUzNiA2LjM1OTQ5IDEyLjA0MzQgNi42NzU5MSAxMS44NDIgNi44NjQ3N0w3Ljg0MTk3IDEwLjYxNDhDNy42NDk2NCAxMC43OTUxIDcuMzUwMzYgMTAuNzk1MSA3LjE1ODAzIDEwLjYxNDhMMy4xNTgwMyA2Ljg2NDc3QzIuOTU2NTcgNi42NzU5MSAyLjk0NjM3IDYuMzU5NDkgMy4xMzUyMyA2LjE1ODAzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguODQxODIgMy4xMzUxNEM5LjA0MzI3IDMuMzI0MDEgOS4wNTM0OCAzLjY0MDQyIDguODY0NjIgMy44NDE4OEw1LjQzNTIxIDcuNDk5OTFMOC44NjQ2MiAxMS4xNTc5QzkuMDUzNDggMTEuMzU5NCA5LjA0MzI3IDExLjY3NTggOC44NDE4MiAxMS44NjQ3QzguNjQwMzYgMTIuMDUzNSA4LjMyMzk0IDEyLjA0MzMgOC4xMzUwOCAxMS44NDE5TDQuMzg1MDggNy44NDE4OEM0LjIwNDc3IDcuNjQ5NTUgNC4yMDQ3NyA3LjM1MDI3IDQuMzg1MDggNy4xNTc5NEw4LjEzNTA4IDMuMTU3OTRDOC4zMjM5NCAyLjk1NjQ4IDguNjQwMzYgMi45NDYyOCA4Ljg0MTgyIDMuMTM1MTRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxzZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi4xNTg0IDMuMTM1MDhDNi4zNTk4NSAyLjk0NjIxIDYuNjc2MjcgMi45NTY0MiA2Ljg2NTE0IDMuMTU3ODhMMTAuNjE1MSA3LjE1Nzg4QzEwLjc5NTQgNy4zNTAyIDEwLjc5NTQgNy42NDk0OSAxMC42MTUxIDcuODQxODJMNi44NjUxNCAxMS44NDE4QzYuNjc2MjcgMTIuMDQzMyA2LjM1OTg1IDEyLjA1MzUgNi4xNTg0IDExLjg2NDZDNS45NTY5NCAxMS42NzU3IDUuOTQ2NzMgMTEuMzU5MyA2LjEzNTYgMTEuMTU3OUw5LjU2NSA3LjQ5OTg1TDYuMTM1NiAzLjg0MTgyQzUuOTQ2NzMgMy42NDAzNiA1Ljk1Njk0IDMuMzIzOTQgNi4xNTg0IDMuMTM1MDhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxjZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4xMzUyMyA4Ljg0MTk3QzMuMzI0MSA5LjA0MzQzIDMuNjQwNTIgOS4wNTM2MyAzLjg0MTk3IDguODY0NzdMNy41IDUuNDM1MzZMMTEuMTU4IDguODY0NzdDMTEuMzU5NSA5LjA1MzYzIDExLjY3NTkgOS4wNDM0MyAxMS44NjQ4IDguODQxOTdDMTIuMDUzNiA4LjY0MDUxIDEyLjA0MzQgOC4zMjQwOSAxMS44NDIgOC4xMzUyM0w3Ljg0MTk3IDQuMzg1MjNDNy42NDk2NCA0LjIwNDkyIDcuMzUwMzYgNC4yMDQ5MiA3LjE1ODAzIDQuMzg1MjNMMy4xNTgwMyA4LjEzNTIzQzIuOTU2NTcgOC4zMjQwOSAyLjk0NjM3IDguNjQwNTEgMy4xMzUyMyA4Ljg0MTk3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNDk5OTFDMC44NzcwNzUgMy44NDIyMiAzLjg0MjIyIDAuODc3MDc1IDcuNDk5OTEgMC44NzcwNzVDMTEuMTU3NiAwLjg3NzA3NSAxNC4xMjI3IDMuODQyMjIgMTQuMTIyNyA3LjQ5OTkxQzE0LjEyMjcgMTEuMTU3NiAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzMuODQyMjIgMTQuMTIyNyAwLjg3NzA3NSAxMS4xNTc2IDAuODc3MDc1IDcuNDk5OTFaTTcuNDk5OTEgMS44MjcwOEM0LjM2Njg5IDEuODI3MDggMS44MjcwOCA0LjM2Njg5IDEuODI3MDggNy40OTk5MUMxLjgyNzA4IDEwLjYzMjkgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0MxMC42MzI5IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk5MUMxMy4xNzI3IDQuMzY2ODkgMTAuNjMyOSAxLjgyNzA4IDcuNDk5OTEgMS44MjcwOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGZlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc3MDc1QzMuODQyMjIgMC44NzcwNzUgMC44NzcwNzUgMy44NDIyMiAwLjg3NzA3NSA3LjQ5OTkxQzAuODc3MDc1IDExLjE1NzYgMy44NDIyMiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MxMS4xNTc2IDE0LjEyMjcgMTQuMTIyNyAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MUMxNC4xMjI3IDMuODQyMjIgMTEuMTU3NiAwLjg3NzA3NSA3LjQ5OTkxIDAuODc3MDc1Wk0zLjg1NzY4IDMuMTUwNTdDNC44NDMxMSAyLjMyNDQ4IDYuMTEzNDIgMS44MjcwOCA3LjQ5OTkxIDEuODI3MDhDMTAuNjMyOSAxLjgyNzA4IDEzLjE3MjcgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTFDMTMuMTcyNyA4Ljg4NjM4IDEyLjY3NTMgMTAuMTU2NyAxMS44NDkyIDExLjE0MjFMMy44NTc2OCAzLjE1MDU3Wk0zLjE1MDU3IDMuODU3NjhDMi4zMjQ0OCA0Ljg0MzExIDEuODI3MDggNi4xMTM0MiAxLjgyNzA4IDcuNDk5OTFDMS44MjcwOCAxMC42MzI5IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDOC44ODYzOCAxMy4xNzI3IDEwLjE1NjcgMTIuNjc1MyAxMS4xNDIxIDExLjg0OTJMMy4xNTA1NyAzLjg1NzY4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMlYxSDEwVjJINVpNNC43NSAwQzQuMzM1NzkgMCA0IDAuMzM1Nzg2IDQgMC43NVYxSDMuNUMyLjY3MTU3IDEgMiAxLjY3MTU3IDIgMi41VjEyLjVDMiAxMy4zMjg0IDIuNjcxNTcgMTQgMy41IDE0SDExLjVDMTIuMzI4NCAxNCAxMyAxMy4zMjg0IDEzIDEyLjVWMi41QzEzIDEuNjcxNTcgMTIuMzI4NCAxIDExLjUgMUgxMVYwLjc1QzExIDAuMzM1Nzg2IDEwLjY2NDIgMCAxMC4yNSAwSDQuNzVaTTExIDJWMi4yNUMxMSAyLjY2NDIxIDEwLjY2NDIgMyAxMC4yNSAzSDQuNzVDNC4zMzU3OSAzIDQgMi42NjQyMSA0IDIuMjVWMkgzLjVDMy4yMjM4NiAyIDMgMi4yMjM4NiAzIDIuNVYxMi41QzMgMTIuNzc2MSAzLjIyMzg2IDEzIDMuNSAxM0gxMS41QzExLjc3NjEgMTMgMTIgMTIuNzc2MSAxMiAxMi41VjIuNUMxMiAyLjIyMzg2IDExLjc3NjEgMiAxMS41IDJIMTFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxwZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSAyVjFIMTBWMkg1Wk00Ljc1IDBDNC4zMzU3OSAwIDQgMC4zMzU3ODYgNCAwLjc1VjFIMy41QzIuNjcxNTcgMSAyIDEuNjcxNTcgMiAyLjVWMTIuNUMyIDEzLjMyODQgMi42NzE1NyAxNCAzLjUgMTRIN1YxM0gzLjVDMy4yMjM4NiAxMyAzIDEyLjc3NjEgMyAxMi41VjIuNUMzIDIuMjIzODYgMy4yMjM4NiAyIDMuNSAySDRWMi4yNUM0IDIuNjY0MjEgNC4zMzU3OSAzIDQuNzUgM0gxMC4yNUMxMC42NjQyIDMgMTEgMi42NjQyMSAxMSAyLjI1VjJIMTEuNUMxMS43NzYxIDIgMTIgMi4yMjM4NiAxMiAyLjVWN0gxM1YyLjVDMTMgMS42NzE1NyAxMi4zMjg0IDEgMTEuNSAxSDExVjAuNzVDMTEgMC4zMzU3ODYgMTAuNjY0MiAwIDEwLjI1IDBINC43NVpNOSA4LjVDOSA4Ljc3NjE0IDguNzc2MTQgOSA4LjUgOUM4LjIyMzg2IDkgOCA4Ljc3NjE0IDggOC41QzggOC4yMjM4NiA4LjIyMzg2IDggOC41IDhDOC43NzYxNCA4IDkgOC4yMjM4NiA5IDguNVpNMTAuNSA5QzEwLjc3NjEgOSAxMSA4Ljc3NjE0IDExIDguNUMxMSA4LjIyMzg2IDEwLjc3NjEgOCAxMC41IDhDMTAuMjIzOSA4IDEwIDguMjIzODYgMTAgOC41QzEwIDguNzc2MTQgMTAuMjIzOSA5IDEwLjUgOVpNMTMgOC41QzEzIDguNzc2MTQgMTIuNzc2MSA5IDEyLjUgOUMxMi4yMjM5IDkgMTIgOC43NzYxNCAxMiA4LjVDMTIgOC4yMjM4NiAxMi4yMjM5IDggMTIuNSA4QzEyLjc3NjEgOCAxMyA4LjIyMzg2IDEzIDguNVpNMTQuNSA5QzE0Ljc3NjEgOSAxNSA4Ljc3NjE0IDE1IDguNUMxNSA4LjIyMzg2IDE0Ljc3NjEgOCAxNC41IDhDMTQuMjIzOSA4IDE0IDguMjIzODYgMTQgOC41QzE0IDguNzc2MTQgMTQuMjIzOSA5IDE0LjUgOVpNMTUgMTAuNUMxNSAxMC43NzYxIDE0Ljc3NjEgMTEgMTQuNSAxMUMxNC4yMjM5IDExIDE0IDEwLjc3NjEgMTQgMTAuNUMxNCAxMC4yMjM5IDE0LjIyMzkgMTAgMTQuNSAxMEMxNC43NzYxIDEwIDE1IDEwLjIyMzkgMTUgMTAuNVpNMTQuNSAxM0MxNC43NzYxIDEzIDE1IDEyLjc3NjEgMTUgMTIuNUMxNSAxMi4yMjM5IDE0Ljc3NjEgMTIgMTQuNSAxMkMxNC4yMjM5IDEyIDE0IDEyLjIyMzkgMTQgMTIuNUMxNCAxMi43NzYxIDE0LjIyMzkgMTMgMTQuNSAxM1pNMTQuNSAxNUMxNC43NzYxIDE1IDE1IDE0Ljc3NjEgMTUgMTQuNUMxNSAxNC4yMjM5IDE0Ljc3NjEgMTQgMTQuNSAxNEMxNC4yMjM5IDE0IDE0IDE0LjIyMzkgMTQgMTQuNUMxNCAxNC43NzYxIDE0LjIyMzkgMTUgMTQuNSAxNVpNOC41IDExQzguNzc2MTQgMTEgOSAxMC43NzYxIDkgMTAuNUM5IDEwLjIyMzkgOC43NzYxNCAxMCA4LjUgMTBDOC4yMjM4NiAxMCA4IDEwLjIyMzkgOCAxMC41QzggMTAuNzc2MSA4LjIyMzg2IDExIDguNSAxMVpNOSAxMi41QzkgMTIuNzc2MSA4Ljc3NjE0IDEzIDguNSAxM0M4LjIyMzg2IDEzIDggMTIuNzc2MSA4IDEyLjVDOCAxMi4yMjM5IDguMjIzODYgMTIgOC41IDEyQzguNzc2MTQgMTIgOSAxMi4yMjM5IDkgMTIuNVpNOC41IDE1QzguNzc2MTQgMTUgOSAxNC43NzYxIDkgMTQuNUM5IDE0LjIyMzkgOC43NzYxNCAxNCA4LjUgMTRDOC4yMjM4NiAxNCA4IDE0LjIyMzkgOCAxNC41QzggMTQuNzc2MSA4LjIyMzg2IDE1IDguNSAxNVpNMTEgMTQuNUMxMSAxNC43NzYxIDEwLjc3NjEgMTUgMTAuNSAxNUMxMC4yMjM5IDE1IDEwIDE0Ljc3NjEgMTAgMTQuNUMxMCAxNC4yMjM5IDEwLjIyMzkgMTQgMTAuNSAxNEMxMC43NzYxIDE0IDExIDE0LjIyMzkgMTEgMTQuNVpNMTIuNSAxNUMxMi43NzYxIDE1IDEzIDE0Ljc3NjEgMTMgMTQuNUMxMyAxNC4yMjM5IDEyLjc3NjEgMTQgMTIuNSAxNEMxMi4yMjM5IDE0IDEyIDE0LjIyMzkgMTIgMTQuNUMxMiAxNC43NzYxIDEyLjIyMzkgMTUgMTIuNSAxNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGhlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUwMDA5IDAuODc3MDE0QzMuODQyNDEgMC44NzcwMTQgMC44NzcyNTggMy44NDIxNiAwLjg3NzI1OCA3LjQ5OTg0QzAuODc3MjU4IDExLjE1NzUgMy44NDI0IDE0LjEyMjcgNy41MDAwOSAxNC4xMjI3QzExLjE1NzggMTQuMTIyNyAxNC4xMjI5IDExLjE1NzUgMTQuMTIyOSA3LjQ5OTg0QzE0LjEyMjkgMy44NDIxNiAxMS4xNTc3IDAuODc3MDE0IDcuNTAwMDkgMC44NzcwMTRaTTEuODI3MjYgNy40OTk4NEMxLjgyNzI2IDQuMzY2ODMgNC4zNjcwOCAxLjgyNzAxIDcuNTAwMDkgMS44MjcwMUMxMC42MzMxIDEuODI3MDEgMTMuMTcyOSA0LjM2NjgzIDEzLjE3MjkgNy40OTk4NEMxMy4xNzI5IDEwLjYzMjggMTAuNjMzMSAxMy4xNzI3IDcuNTAwMDkgMTMuMTcyN0M0LjM2NzA4IDEzLjE3MjcgMS44MjcyNiAxMC42MzI4IDEuODI3MjYgNy40OTk4NFpNOCA0LjUwMDAxQzggNC4yMjM4NyA3Ljc3NjE0IDQuMDAwMDEgNy41IDQuMDAwMDFDNy4yMjM4NiA0LjAwMDAxIDcgNC4yMjM4NyA3IDQuNTAwMDFWNy41MDAwMUM3IDcuNjMyNjIgNy4wNTI2OCA3Ljc1OTggNy4xNDY0NSA3Ljg1MzU3TDkuMTQ2NDUgOS44NTM1N0M5LjM0MTcxIDEwLjA0ODggOS42NTgyOSAxMC4wNDg4IDkuODUzNTUgOS44NTM1N0MxMC4wNDg4IDkuNjU4MzEgMTAuMDQ4OCA5LjM0MTcyIDkuODUzNTUgOS4xNDY0Nkw4IDcuMjkyOTFWNC41MDAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05Ljk2NDI0IDIuNjg1NzFDMTAuMDY2OCAyLjQyOTMxIDkuOTQyMDkgMi4xMzgzMyA5LjY4NTcgMi4wMzU3N0M5LjQyOTMgMS45MzMyMiA5LjEzODMyIDIuMDU3OTIgOS4wMzU3NiAyLjMxNDMyTDUuMDM1NzYgMTIuMzE0M0M0LjkzMzIgMTIuNTcwNyA1LjA1NzkxIDEyLjg2MTcgNS4zMTQzIDEyLjk2NDJDNS41NzA3IDEzLjA2NjggNS44NjE2OCAxMi45NDIxIDUuOTY0MjQgMTIuNjg1N0w5Ljk2NDI0IDIuNjg1NzFaTTMuODUzNTUgNS4xNDY0NkM0LjA0ODgyIDUuMzQxNzIgNC4wNDg4MiA1LjY1ODMgMy44NTM1NSA1Ljg1MzU2TDIuMjA3MTEgNy41MDAwMUwzLjg1MzU1IDkuMTQ2NDZDNC4wNDg4MiA5LjM0MTcyIDQuMDQ4ODIgOS42NTgzIDMuODUzNTUgOS44NTM1NkMzLjY1ODI5IDEwLjA0ODggMy4zNDE3MSAxMC4wNDg4IDMuMTQ2NDUgOS44NTM1NkwxLjE0NjQ1IDcuODUzNTZDMC45NTExODQgNy42NTgzIDAuOTUxMTg0IDcuMzQxNzIgMS4xNDY0NSA3LjE0NjQ2TDMuMTQ2NDUgNS4xNDY0NkMzLjM0MTcxIDQuOTUxMiAzLjY1ODI5IDQuOTUxMiAzLjg1MzU1IDUuMTQ2NDZaTTExLjE0NjQgNS4xNDY0NkMxMS4zNDE3IDQuOTUxMiAxMS42NTgzIDQuOTUxMiAxMS44NTM2IDUuMTQ2NDZMMTMuODUzNiA3LjE0NjQ2QzE0LjA0ODggNy4zNDE3MiAxNC4wNDg4IDcuNjU4MyAxMy44NTM2IDcuODUzNTZMMTEuODUzNiA5Ljg1MzU2QzExLjY1ODMgMTAuMDQ4OCAxMS4zNDE3IDEwLjA0ODggMTEuMTQ2NCA5Ljg1MzU2QzEwLjk1MTIgOS42NTgzIDEwLjk1MTIgOS4zNDE3MiAxMS4xNDY0IDkuMTQ2NDZMMTIuNzkyOSA3LjUwMDAxTDExLjE0NjQgNS44NTM1NkMxMC45NTEyIDUuNjU4MyAxMC45NTEyIDUuMzQxNzIgMTEuMTQ2NCA1LjE0NjQ2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNzExNDQgMC43OTY5MDJDNy41Nzc0MSAwLjczNDM1NyA3LjQyMjU3IDAuNzM0MzU3IDcuMjg4NTUgMC43OTY5MDJMMS4yODg1NSAzLjU5NjlDMS4xMTI1MSAzLjY3OTA1IDAuOTk5OTkzIDMuODU1NzMgMC45OTk5OTMgNC4wNDk5OVYxMC45NUMwLjk5OTk5MyAxMS4xNDQzIDEuMTEyNTEgMTEuMzIwOSAxLjI4ODU1IDExLjQwMzFMNy4yODg1NSAxNC4yMDMxQzcuNDIyNTcgMTQuMjY1NiA3LjU3NzQxIDE0LjI2NTYgNy43MTE0NCAxNC4yMDMxTDEzLjcxMTQgMTEuNDAzMUMxMy44ODc1IDExLjMyMDkgMTQgMTEuMTQ0MyAxNCAxMC45NVY0LjA0OTk5QzE0IDMuODU1NzMgMTMuODg3NSAzLjY3OTA1IDEzLjcxMTQgMy41OTY5TDcuNzExNDQgMC43OTY5MDJaTTcuNDk5OTkgMy4xNTY3NEw1Ljk4MDM5IDIuNTEwOTFMNy40OTk5OSAxLjgwMTc2TDkuMDE5NTkgMi41MTA5MUw3LjQ5OTk5IDMuMTU2NzRaTTcuNjk1NTYgNC4xNjAxOEwxMC4yMzgyIDMuMDc5NThMMTIuMjcxOSA0LjAyODY1TDcuNDk5OTkgNi4wNTY3MUwyLjcyODA4IDQuMDI4NjVMNC43NjE4MSAzLjA3OTU4TDcuMzA0NDIgNC4xNjAxOEM3LjQyOTM5IDQuMjEzMyA3LjU3MDU5IDQuMjEzMyA3LjY5NTU2IDQuMTYwMThaTTcuOTk5OTkgNi45MzA3OEwxMyA0LjgwNTc4VjcuOTI5NjZMMTEuMDgyMSA4LjgxMTlDMTAuNzI3MyA4Ljk3NTA5IDEwLjUgOS4zMjk4OCAxMC41IDkuNzIwMzlWMTEuNzk4Mkw3Ljk5OTk5IDEyLjk2NDlWNi45MzA3OFpNMTEuNSAxMS4zMzE2TDEzIDEwLjYzMTZWOS4wMzAzOUwxMS41IDkuNzIwMzlWMTEuMzMxNlpNNi45OTk5OSA2LjkzMDc4VjEyLjk2NDlMNC41MDIzMSAxMS43OTkzVjkuNzIwMzZDNC41MDIzMSA5LjMyOTg1IDQuMjc0OTkgOC45NzUwNiAzLjkyMDIyIDguODExODdMMS45OTk5OSA3LjkyODU2VjQuODA1NzhMNi45OTk5OSA2LjkzMDc4Wk0xLjk5OTk5IDEwLjYzMTZMMy41MDIzMSAxMS4zMzI2TDMuNTAyMzEgOS43MjAzNkwxLjk5OTk5IDkuMDI5MjlWMTAuNjMxNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG1lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04LjAwMDEyIDEuNUM4LjAwMDEyIDEuMjIzODYgNy43NzYyNiAxIDcuNTAwMTIgMUM3LjIyMzk4IDEgNy4wMDAxMiAxLjIyMzg2IDcuMDAwMTIgMS41VjEzLjVDNy4wMDAxMiAxMy43NzYxIDcuMjIzOTggMTQgNy41MDAxMiAxNEM3Ljc3NjI2IDE0IDguMDAwMTIgMTMuNzc2MSA4LjAwMDEyIDEzLjVWMS41Wk0zLjMxODEyIDUuODE4QzMuNDkzODYgNS42NDIyNyAzLjQ5Mzg2IDUuMzU3MzQgMy4zMTgxMiA1LjE4MTYxQzMuMTQyMzkgNS4wMDU4NyAyLjg1NzQ2IDUuMDA1ODcgMi42ODE3MyA1LjE4MTYxTDAuNjgxNzI5IDcuMTgxNjFDMC41MDU5OTMgNy4zNTczNCAwLjUwNTk5MyA3LjY0MjI3IDAuNjgxNzI5IDcuODE4TDIuNjgxNzMgOS44MThDMi44NTc0NiA5Ljk5Mzc0IDMuMTQyMzkgOS45OTM3NCAzLjMxODEyIDkuODE4QzMuNDkzODYgOS42NDIyNyAzLjQ5Mzg2IDkuMzU3MzQgMy4zMTgxMiA5LjE4MTYxTDIuMDg2MzIgNy45NDk4SDUuNTAwMTdDNS43NDg3IDcuOTQ5OCA1Ljk1MDE3IDcuNzQ4MzMgNS45NTAxNyA3LjQ5OThDNS45NTAxNyA3LjI1MTI4IDUuNzQ4NyA3LjA0OTggNS41MDAxNyA3LjA0OThIMi4wODYzMkwzLjMxODEyIDUuODE4Wk0xMi4zMTgxIDUuMTgxNjFDMTIuMTQyNCA1LjAwNTg3IDExLjg1NzUgNS4wMDU4NyAxMS42ODE3IDUuMTgxNjFDMTEuNTA2IDUuMzU3MzQgMTEuNTA2IDUuNjQyMjcgMTEuNjgxNyA1LjgxOEwxMi45MTM1IDcuMDQ5OEg5LjUwMDE3QzkuMjUxNjQgNy4wNDk4IDkuMDUwMTcgNy4yNTEyOCA5LjA1MDE3IDcuNDk5OEM5LjA1MDE3IDcuNzQ4MzMgOS4yNTE2NCA3Ljk0OTggOS41MDAxNyA3Ljk0OThIMTIuOTEzNUwxMS42ODE3IDkuMTgxNjFDMTEuNTA2IDkuMzU3MzQgMTEuNTA2IDkuNjQyMjcgMTEuNjgxNyA5LjgxOEMxMS44NTc1IDkuOTkzNzQgMTIuMTQyNCA5Ljk5Mzc0IDEyLjMxODEgOS44MThMMTQuMzE4MSA3LjgxOEMxNC40OTM5IDcuNjQyMjcgMTQuNDkzOSA3LjM1NzM0IDE0LjMxODEgNy4xODE2MUwxMi4zMTgxIDUuMTgxNjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxDZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi4xNDk5OCAxNFYxSDAuODQ5OTc2VjE0SDIuMTQ5OThaTTYuMTQ5OTggMTRWMUg0Ljg0OTk4VjE0SDYuMTQ5OThaTTEwLjE1IDFWMTRIOC44NDk5OFYxSDEwLjE1Wk0xNC4xNSAxNFYxSDEyLjg1VjE0SDE0LjE1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuOTQ5NjkgNy40OTk4OUM5Ljk0OTY5IDguODUyODggOC44NTI4OCA5Ljk0OTY5IDcuNDk5ODkgOS45NDk2OUM2LjE0NjkxIDkuOTQ5NjkgNS4wNTAxIDguODUyODggNS4wNTAxIDcuNDk5ODlDNS4wNTAxIDYuMTQ2OTEgNi4xNDY5MSA1LjA1MDEgNy40OTk4OSA1LjA1MDFDOC44NTI4OCA1LjA1MDEgOS45NDk2OSA2LjE0NjkxIDkuOTQ5NjkgNy40OTk4OVpNMTAuODYzMiA4QzEwLjYyMTMgOS42NDA1NSA5LjIwNzY0IDEwLjg5OTcgNy40OTk4OSAxMC44OTk3QzUuNzkyMTQgMTAuODk5NyA0LjM3ODQ3IDkuNjQwNTUgNC4xMzY2MiA4SDAuNUMwLjIyMzg1OCA4IDAgNy43NzYxNCAwIDcuNUMwIDcuMjIzODYgMC4yMjM4NTggNyAwLjUgN0g0LjEzNjU5QzQuMzc4MzUgNS4zNTkzNSA1Ljc5MjA2IDQuMTAwMSA3LjQ5OTg5IDQuMTAwMUM5LjIwNzcyIDQuMTAwMSAxMC42MjE0IDUuMzU5MzUgMTAuODYzMiA3SDE0LjVDMTQuNzc2MSA3IDE1IDcuMjIzODYgMTUgNy41QzE1IDcuNzc2MTQgMTQuNzc2MSA4IDE0LjUgOEgxMC44NjMyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sd2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNjcxMjkgMy4xNDYzNEM0LjQ3NjAzIDMuMzQxNjEgNC40NzYwMyAzLjY1ODE5IDQuNjcxMjkgMy44NTM0NUw3LjE0NjE2IDYuMzI4MzNDNy4zNDE0MiA2LjUyMzU5IDcuNjU4MDEgNi41MjM1OSA3Ljg1MzI3IDYuMzI4MzNMMTAuMzI4MSAzLjg1MzQ1QzEwLjUyMzQgMy42NTgxOSAxMC41MjM0IDMuMzQxNjEgMTAuMzI4MSAzLjE0NjM0TDcuODUzMjcgMC42NzE0NzFDNy42NTgwMSAwLjQ3NjIwOSA3LjM0MTQyIDAuNDc2MjA5IDcuMTQ2MTYgMC42NzE0NzFMNC42NzEyOSAzLjE0NjM0Wk03LjQ5OTcxIDUuMjY3NjZMNS43MzE5NSAzLjQ5OTlMNy40OTk3MSAxLjczMjEzTDkuMjY3NDggMy40OTk5TDcuNDk5NzEgNS4yNjc2NlpNOC42NzEyOSA3LjE0NjM0QzguNDc2MDMgNy4zNDE2MSA4LjQ3NjAzIDcuNjU4MTkgOC42NzEyOSA3Ljg1MzQ1TDExLjE0NjIgMTAuMzI4M0MxMS4zNDE0IDEwLjUyMzYgMTEuNjU4IDEwLjUyMzYgMTEuODUzMyAxMC4zMjgzTDE0LjMyODEgNy44NTM0NUMxNC41MjM0IDcuNjU4MTkgMTQuNTIzNCA3LjM0MTYxIDE0LjMyODEgNy4xNDYzNEwxMS44NTMzIDQuNjcxNDdDMTEuNjU4IDQuNDc2MjEgMTEuMzQxNCA0LjQ3NjIxIDExLjE0NjIgNC42NzE0N0w4LjY3MTI5IDcuMTQ2MzRaTTExLjQ5OTcgOS4yNjc2Nkw5LjczMTk1IDcuNDk5OUwxMS40OTk3IDUuNzMyMTNMMTMuMjY3NSA3LjQ5OTlMMTEuNDk5NyA5LjI2NzY2Wk00LjY3MTI5IDExLjg1MzVDNC40NzYwMyAxMS42NTgyIDQuNDc2MDMgMTEuMzQxNiA0LjY3MTI5IDExLjE0NjNMNy4xNDYxNiA4LjY3MTQ3QzcuMzQxNDIgOC40NzYyMSA3LjY1ODAxIDguNDc2MjEgNy44NTMyNyA4LjY3MTQ3TDEwLjMyODEgMTEuMTQ2M0MxMC41MjM0IDExLjM0MTYgMTAuNTIzNCAxMS42NTgyIDEwLjMyODEgMTEuODUzNUw3Ljg1MzI3IDE0LjMyODNDNy42NTgwMSAxNC41MjM2IDcuMzQxNDIgMTQuNTIzNiA3LjE0NjE2IDE0LjMyODNMNC42NzEyOSAxMS44NTM1Wk01LjczMTk1IDExLjQ5OTlMNy40OTk3MSAxMy4yNjc3TDkuMjY3NDggMTEuNDk5OUw3LjQ5OTcxIDkuNzMyMTNMNS43MzE5NSAxMS40OTk5Wk0wLjY3MTI4OCA3LjE0NjQ5QzAuNDc2MDI2IDcuMzQxNzUgMC40NzYwMjYgNy42NTgzNCAwLjY3MTI4OCA3Ljg1MzZMMy4xNDYxNiAxMC4zMjg1QzMuMzQxNDIgMTAuNTIzNyAzLjY1ODAxIDEwLjUyMzcgMy44NTMyNyAxMC4zMjg1TDYuMzI4MTQgNy44NTM2QzYuNTIzNCA3LjY1ODM0IDYuNTIzNCA3LjM0MTc1IDYuMzI4MTQgNy4xNDY0OUwzLjg1MzI3IDQuNjcxNjJDMy42NTgwMSA0LjQ3NjM2IDMuMzQxNDIgNC40NzYzNiAzLjE0NjE2IDQuNjcxNjJMMC42NzEyODggNy4xNDY0OVpNMy40OTk3MiA5LjI2NzgxTDEuNzMxOTUgNy41MDAwNUwzLjQ5OTcyIDUuNzMyMjhMNS4yNjc0OCA3LjUwMDA1TDMuNDk5NzIgOS4yNjc4MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjg3OTM1IDFIMy45SDExLjFIMTEuMTIwN0MxMS41MjMxIDAuOTk5OTk0IDExLjg1NTMgMC45OTk5ODkgMTIuMTI1OSAxLjAyMjFDMTIuNDA3IDEuMDQ1MDYgMTIuNjY1MyAxLjA5NDM0IDEyLjkwOCAxLjIxNzk5QzEzLjI4NDMgMS40MDk3MyAxMy41OTAzIDEuNzE1NyAxMy43ODIgMi4wOTIwMkMxMy45MDU3IDIuMzM0NjkgMTMuOTU0OSAyLjU5MzA0IDEzLjk3NzkgMi44NzQwOUMxNCAzLjE0NDY4IDE0IDMuNDc2ODYgMTQgMy44NzkzNFYzLjlWMTEuMVYxMS4xMjA3QzE0IDExLjUyMzEgMTQgMTEuODU1MyAxMy45Nzc5IDEyLjEyNTlDMTMuOTU0OSAxMi40MDcgMTMuOTA1NyAxMi42NjUzIDEzLjc4MiAxMi45MDhDMTMuNTkwMyAxMy4yODQzIDEzLjI4NDMgMTMuNTkwMyAxMi45MDggMTMuNzgyQzEyLjY2NTMgMTMuOTA1NyAxMi40MDcgMTMuOTU0OSAxMi4xMjU5IDEzLjk3NzlDMTEuODU1MyAxNCAxMS41MjMxIDE0IDExLjEyMDcgMTRIMTEuMUgzLjlIMy44NzkzNEMzLjQ3Njg2IDE0IDMuMTQ0NjggMTQgMi44NzQwOSAxMy45Nzc5QzIuNTkzMDQgMTMuOTU0OSAyLjMzNDY5IDEzLjkwNTcgMi4wOTIwMiAxMy43ODJDMS43MTU3IDEzLjU5MDMgMS40MDk3MyAxMy4yODQzIDEuMjE3OTkgMTIuOTA4QzEuMDk0MzQgMTIuNjY1MyAxLjA0NTA2IDEyLjQwNyAxLjAyMjEgMTIuMTI1OUMwLjk5OTk4OSAxMS44NTUzIDAuOTk5OTk0IDExLjUyMzEgMSAxMS4xMjA3VjExLjEyMDdWMTEuMVYzLjlWMy44NzkzNVYzLjg3OTM0QzAuOTk5OTk0IDMuNDc2ODYgMC45OTk5ODkgMy4xNDQ2OCAxLjAyMjEgMi44NzQwOUMxLjA0NTA2IDIuNTkzMDQgMS4wOTQzNCAyLjMzNDY5IDEuMjE3OTkgMi4wOTIwMkMxLjQwOTczIDEuNzE1NyAxLjcxNTcgMS40MDk3MyAyLjA5MjAyIDEuMjE3OTlDMi4zMzQ2OSAxLjA5NDM0IDIuNTkzMDQgMS4wNDUwNiAyLjg3NDA5IDEuMDIyMUMzLjE0NDY5IDAuOTk5OTg5IDMuNDc2ODcgMC45OTk5OTQgMy44NzkzNSAxWk0yLjk1NTUyIDIuMDE4NzhDMi43MzYzMSAyLjAzNjY5IDIuNjI0MjEgMi4wNjkxNSAyLjU0NjAxIDIuMTA4OTlDMi4zNTc4NSAyLjIwNDg3IDIuMjA0ODcgMi4zNTc4NSAyLjEwODk5IDIuNTQ2MDFDMi4wNjkxNSAyLjYyNDIxIDIuMDM2NjkgMi43MzYzMSAyLjAxODc4IDIuOTU1NTJDMi4wMDAzOSAzLjE4MDU2IDIgMy40NzE3MSAyIDMuOVY3SDdWMkgzLjlDMy40NzE3MSAyIDMuMTgwNTYgMi4wMDAzOSAyLjk1NTUyIDIuMDE4NzhaTTcgOEgyVjExLjFDMiAxMS41MjgzIDIuMDAwMzkgMTEuODE5NCAyLjAxODc4IDEyLjA0NDVDMi4wMzY2OSAxMi4yNjM3IDIuMDY5MTUgMTIuMzc1OCAyLjEwODk5IDEyLjQ1NEMyLjIwNDg3IDEyLjY0MjIgMi4zNTc4NSAxMi43OTUxIDIuNTQ2MDEgMTIuODkxQzIuNjI0MjEgMTIuOTMwOSAyLjczNjMxIDEyLjk2MzMgMi45NTU1MiAxMi45ODEyQzMuMTgwNTYgMTIuOTk5NiAzLjQ3MTcxIDEzIDMuOSAxM0g3VjhaTTggOEgxM1YxMS4xQzEzIDExLjUyODMgMTIuOTk5NiAxMS44MTk0IDEyLjk4MTIgMTIuMDQ0NUMxMi45NjMzIDEyLjI2MzcgMTIuOTMwOSAxMi4zNzU4IDEyLjg5MSAxMi40NTRDMTIuNzk1MSAxMi42NDIyIDEyLjY0MjIgMTIuNzk1MSAxMi40NTQgMTIuODkxQzEyLjM3NTggMTIuOTMwOSAxMi4yNjM3IDEyLjk2MzMgMTIuMDQ0NSAxMi45ODEyQzExLjgxOTQgMTIuOTk5NiAxMS41MjgzIDEzIDExLjEgMTNIOFY4Wk0xMyA3SDhWMkgxMS4xQzExLjUyODMgMiAxMS44MTk0IDIuMDAwMzkgMTIuMDQ0NSAyLjAxODc4QzEyLjI2MzcgMi4wMzY2OSAxMi4zNzU4IDIuMDY5MTUgMTIuNDU0IDIuMTA4OTlDMTIuNjQyMiAyLjIwNDg3IDEyLjc5NTEgMi4zNTc4NSAxMi44OTEgMi41NDYwMUMxMi45MzA5IDIuNjI0MjEgMTIuOTYzMyAyLjczNjMxIDEyLjk4MTIgMi45NTU1MkMxMi45OTk2IDMuMTgwNTYgMTMgMy40NzE3MSAxMyAzLjlWN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHhlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03Ljg1MzY3IDEuNDg5NTZDNy42NTg0MSAxLjI5NDI5IDcuMzQxODIgMS4yOTQyOSA3LjE0NjU2IDEuNDg5NTZMMS40ODk3MSA3LjE0NjQxQzEuMjk0NDUgNy4zNDE2NyAxLjI5NDQ1IDcuNjU4MjUgMS40ODk3MSA3Ljg1MzUyTDcuMTQ2NTYgMTMuNTEwNEM3LjM0MTgyIDEzLjcwNTYgNy42NTg0MSAxMy43MDU2IDcuODUzNjcgMTMuNTEwNEwxMy41MTA1IDcuODUzNTJDMTMuNzA1OCA3LjY1ODI1IDEzLjcwNTggNy4zNDE2NyAxMy41MTA1IDcuMTQ2NDFMNy44NTM2NyAxLjQ4OTU2Wk03LjUgMi41NTAzM0wyLjU1MDM3IDcuNDk5OTZMNy41IDEyLjQ0OTZWMi41NTAzM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF9lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjE0NjUgMS40ODk1OUM3LjM0MTc2IDEuMjk0MzIgNy42NTgzNSAxLjI5NDMyIDcuODUzNjEgMS40ODk1OUwxMy41MTA1IDcuMTQ2NDRDMTMuNzA1NyA3LjM0MTcgMTMuNzA1NyA3LjY1ODI5IDEzLjUxMDUgNy44NTM1NUw3Ljg1MzYxIDEzLjUxMDRDNy42NTgzNSAxMy43MDU3IDcuMzQxNzYgMTMuNzA1NyA3LjE0NjUgMTMuNTEwNEwxLjQ4OTY1IDcuODUzNTVDMS4yOTQzOSA3LjY1ODI5IDEuMjk0MzkgNy4zNDE3IDEuNDg5NjUgNy4xNDY0NEw3LjE0NjUgMS40ODk1OVpNNy41MDAwNSAyLjU1MDI1TDIuNTUwMzEgNy40OTk5OUw3LjUwMDA1IDEyLjQ0OTdMMTIuNDQ5OCA3LjQ5OTk5TDcuNTAwMDUgMi41NTAyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE9lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03Ljg1MzYxIDEuNDg5NTlDNy42NTgzNSAxLjI5NDMyIDcuMzQxNzYgMS4yOTQzMiA3LjE0NjUgMS40ODk1OUwxLjQ4OTY1IDcuMTQ2NDRDMS4yOTQzOSA3LjM0MTcgMS4yOTQzOSA3LjY1ODI5IDEuNDg5NjUgNy44NTM1NUwzLjk2NDUgMTAuMzI4NEwxLjY0NjQ0IDEyLjY0NjRDMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTMuMTU4MyAxLjY0NjQ0IDEzLjM1MzZDMS44NDE3MSAxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAyLjM1MzU1IDEzLjM1MzZMNC42NzE2IDExLjAzNTVMNy4xNDY1IDEzLjUxMDRDNy4zNDE3NiAxMy43MDU3IDcuNjU4MzUgMTMuNzA1NyA3Ljg1MzYxIDEzLjUxMDRMMTMuNTEwNSA3Ljg1MzU1QzEzLjcwNTcgNy42NTgyOSAxMy43MDU3IDcuMzQxNyAxMy41MTA1IDcuMTQ2NDRMMTEuMDM1NiA0LjY3MTU0TDEzLjM1MzUgMi4zNTM1NUMxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAxLjg0MTcxIDEzLjM1MzUgMS42NDY0NUMxMy4xNTgzIDEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEyLjY0NjQgMS42NDY0NUwxMC4zMjg1IDMuOTY0NDNMNy44NTM2MSAxLjQ4OTU5Wk05LjYyMTM1IDQuNjcxNTRMNy41MDAwNSAyLjU1MDI1TDIuNTUwMzEgNy40OTk5OUw0LjY3MTYgOS42MjEyOUw5LjYyMTM1IDQuNjcxNTRaTTUuMzc4NzEgMTAuMzI4NEw3LjUwMDA1IDEyLjQ0OTdMMTIuNDQ5OCA3LjQ5OTk5TDEwLjMyODUgNS4zNzg2NUw1LjM3ODcxIDEwLjMyODRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxMZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuODAzNCA3LjE0NjQ0QzEyLjk5ODYgNi45NTExOCAxMy4zMTUyIDYuOTUxMTggMTMuNTEwNSA3LjE0NjQ0QzEzLjcwNTcgNy4zNDE3IDEzLjcwNTcgNy42NTgyOSAxMy41MTA1IDcuODUzNTVDMTMuMzE1MiA4LjA0ODgxIDEyLjk5ODYgOC4wNDg4MSAxMi44MDM0IDcuODUzNTVDMTIuNjA4MSA3LjY1ODI4IDEyLjYwODEgNy4zNDE3IDEyLjgwMzQgNy4xNDY0NFpNMTIuMDk2MiA4LjU2MDY1QzEyLjI5MTUgOC43NTU5MiAxMi4yOTE1IDkuMDcyNSAxMi4wOTYyIDkuMjY3NzZDMTEuOTAxIDkuNDYzMDIgMTEuNTg0NCA5LjQ2MzAyIDExLjM4OTEgOS4yNjc3NkMxMS4xOTM5IDkuMDcyNSAxMS4xOTM5IDguNzU1OTIgMTEuMzg5MSA4LjU2MDY1QzExLjU4NDQgOC4zNjUzOSAxMS45MDEgOC4zNjUzOSAxMi4wOTYyIDguNTYwNjVaTTEwLjY4MiA5Ljk3NDg3QzEwLjg3NzMgMTAuMTcwMSAxMC44NzczIDEwLjQ4NjcgMTAuNjgyIDEwLjY4MkMxMC40ODY4IDEwLjg3NzIgMTAuMTcwMiAxMC44NzcyIDkuOTc0OTMgMTAuNjgyQzkuNzc5NjcgMTAuNDg2NyA5Ljc3OTY3IDEwLjE3MDEgOS45NzQ5MyA5Ljk3NDg3QzEwLjE3MDIgOS43Nzk2IDEwLjQ4NjggOS43Nzk2IDEwLjY4MiA5Ljk3NDg3Wk05LjI2NzgyIDExLjM4OTFDOS40NjMwOCAxMS41ODQzIDkuNDYzMDggMTEuOTAwOSA5LjI2NzgyIDEyLjA5NjJDOS4wNzI1NiAxMi4yOTE1IDguNzU1OTggMTIuMjkxNSA4LjU2MDcxIDEyLjA5NjJDOC4zNjU0NSAxMS45MDA5IDguMzY1NDUgMTEuNTg0MyA4LjU2MDcyIDExLjM4OTFDOC43NTU5OCAxMS4xOTM4IDkuMDcyNTYgMTEuMTkzOCA5LjI2NzgyIDExLjM4OTFaTTcuMTQ2NSAxMy41MTA0QzYuOTUxMjQgMTMuMzE1MSA2Ljk1MTI0IDEyLjk5ODYgNy4xNDY1IDEyLjgwMzNDNy4xNzA5MSAxMi43Nzg5IDcuMTk3MjEgMTIuNzU3NSA3LjIyNDk0IDEyLjczOTJDNy40MTkwMSAxMi42MTExIDcuNjgyNzUgMTIuNjMyNCA3Ljg1MzYxIDEyLjgwMzNDOC4wNDg4NyAxMi45OTg2IDguMDQ4ODcgMTMuMzE1MSA3Ljg1MzYxIDEzLjUxMDRDNy42NTgzNSAxMy43MDU3IDcuMzQxNzYgMTMuNzA1NyA3LjE0NjUgMTMuNTEwNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuOTAzODYgOC41NjA2NUMyLjcwODYgOC43NTU5MiAyLjcwODYgOS4wNzI1IDIuOTAzODYgOS4yNjc3NiAzLjA5OTEyIDkuNDYzMDIgMy40MTU3MSA5LjQ2MzAyIDMuNjEwOTcgOS4yNjc3NiAzLjgwNjIzIDkuMDcyNSAzLjgwNjIzIDguNzU1OTIgMy42MTA5NyA4LjU2MDY1IDMuNDE1NzEgOC4zNjUzOSAzLjA5OTEyIDguMzY1MzkgMi45MDM4NiA4LjU2MDY1ek00LjMxODA3IDkuOTc0ODdDNC4xMjI4MSAxMC4xNzAxIDQuMTIyODEgMTAuNDg2NyA0LjMxODA3IDEwLjY4MiA0LjUxMzM0IDEwLjg3NzIgNC44Mjk5MiAxMC44NzcyIDUuMDI1MTggMTAuNjgyIDUuMjIwNDQgMTAuNDg2NyA1LjIyMDQ0IDEwLjE3MDEgNS4wMjUxOCA5Ljk3NDg3IDQuODI5OTIgOS43Nzk2IDQuNTEzMzQgOS43Nzk2IDQuMzE4MDcgOS45NzQ4N3pNNS43MzIyOSAxMS4zODkxQzUuNTM3MDMgMTEuNTg0MyA1LjUzNzAzIDExLjkwMDkgNS43MzIyOSAxMi4wOTYyIDUuOTI3NTUgMTIuMjkxNCA2LjI0NDEzIDEyLjI5MTUgNi40MzkzOSAxMi4wOTYyIDYuNjM0NjYgMTEuOTAwOSA2LjYzNDY2IDExLjU4NDMgNi40MzkzOSAxMS4zODkxIDYuMjQ0MTMgMTEuMTkzOCA1LjkyNzU1IDExLjE5MzggNS43MzIyOSAxMS4zODkxek0yLjE5Njc1IDcuODUzNTVDMi4zNjc2MSA3LjY4MjY5IDIuMzg4OTcgNy40MTg5NSAyLjI2MDgyIDcuMjI0ODggMi4wOTA0NiA2Ljk2Njg0IDEuNzEwNjMgNi45MjU0NiAxLjQ4OTY1IDcuMTQ2NDQgMS4yOTQzOSA3LjM0MTcgMS4yOTQzOSA3LjY1ODI5IDEuNDg5NjUgNy44NTM1NSAxLjY4NDkxIDguMDQ4ODEgMi4wMDE0OSA4LjA0ODgxIDIuMTk2NzUgNy44NTM1NXpNMy42MTA5NyA1LjczMjIzQzMuNDE1NzEgNS41MzY5NiAzLjA5OTEyIDUuNTM2OTYgMi45MDM4NiA1LjczMjIzIDIuNzA4NiA1LjkyNzQ5IDIuNzA4NiA2LjI0NDA3IDIuOTAzODYgNi40MzkzMyAzLjA5OTEyIDYuNjM0NiAzLjQxNTcxIDYuNjM0NiAzLjYxMDk3IDYuNDM5MzMgMy44MDYyMyA2LjI0NDA3IDMuODA2MjMgNS45Mjc0OSAzLjYxMDk3IDUuNzMyMjN6TTUuMDI1MTggNC4zMTgwMUM0LjgyOTkyIDQuMTIyNzUgNC41MTMzNCA0LjEyMjc1IDQuMzE4MDcgNC4zMTgwMSA0LjEyMjgxIDQuNTEzMjggNC4xMjI4MSA0LjgyOTg2IDQuMzE4MDcgNS4wMjUxMiA0LjUxMzM0IDUuMjIwMzggNC44Mjk5MiA1LjIyMDM4IDUuMDI1MTggNS4wMjUxMiA1LjIyMDQ0IDQuODI5ODYgNS4yMjA0NCA0LjUxMzI4IDUuMDI1MTggNC4zMTgwMXpNNi40MzkzOSAyLjkwMzhDNi4yNDQxMyAyLjcwODU0IDUuOTI3NTUgMi43MDg1NCA1LjczMjI5IDIuOTAzOCA1LjUzNzAzIDMuMDk5MDYgNS41MzcwMyAzLjQxNTY0IDUuNzMyMjkgMy42MTA5MSA1LjkyNzU1IDMuODA2MTcgNi4yNDQxMyAzLjgwNjE3IDYuNDM5MzkgMy42MTA5MSA2LjYzNDY2IDMuNDE1NjQgNi42MzQ2NiAzLjA5OTA2IDYuNDM5MzkgMi45MDM4ek03Ljg1MzYxIDEuNDg5NTlDNy42NTgzNSAxLjI5NDMyIDcuMzQxNzYgMS4yOTQzMiA3LjE0NjUgMS40ODk1OSA2Ljk1MTI0IDEuNjg0ODUgNi45NTEyNCAyLjAwMTQzIDcuMTQ2NSAyLjE5NjY5IDcuMzQxNzYgMi4zOTE5NiA3LjY1ODM1IDIuMzkxOTYgNy44NTM2MSAyLjE5NjY5IDguMDQ4ODcgMi4wMDE0MyA4LjA0ODg3IDEuNjg0ODUgNy44NTM2MSAxLjQ4OTU5ek05LjI2NzgyIDIuOTAzOEM5LjA3MjU2IDIuNzA4NTQgOC43NTU5OCAyLjcwODU0IDguNTYwNzEgMi45MDM4IDguMzY1NDUgMy4wOTkwNiA4LjM2NTQ1IDMuNDE1NjQgOC41NjA3MSAzLjYxMDkxIDguNzU1OTggMy44MDYxNyA5LjA3MjU2IDMuODA2MTcgOS4yNjc4MiAzLjYxMDkxIDkuNDYzMDggMy40MTU2NCA5LjQ2MzA4IDMuMDk5MDYgOS4yNjc4MiAyLjkwMzh6TTEwLjY4MiA0LjMxODAxQzEwLjQ4NjggNC4xMjI3NSAxMC4xNzAyIDQuMTIyNzUgOS45NzQ5MyA0LjMxODAxIDkuNzc5NjcgNC41MTMyOCA5Ljc3OTY3IDQuODI5ODYgOS45NzQ5MyA1LjAyNTEyIDEwLjE3MDIgNS4yMjAzOCAxMC40ODY4IDUuMjIwMzggMTAuNjgyIDUuMDI1MTIgMTAuODc3MyA0LjgyOTg2IDEwLjg3NzMgNC41MTMyOCAxMC42ODIgNC4zMTgwMXpNMTIuMDk2MiA1LjczMjIzQzExLjkwMSA1LjUzNjk2IDExLjU4NDQgNS41MzY5NiAxMS4zODkxIDUuNzMyMjMgMTEuMTkzOSA1LjkyNzQ5IDExLjE5MzkgNi4yNDQwNyAxMS4zODkxIDYuNDM5MzMgMTEuNTg0NCA2LjYzNDYgMTEuOTAxIDYuNjM0NiAxMi4wOTYyIDYuNDM5MzMgMTIuMjkxNSA2LjI0NDA3IDEyLjI5MTUgNS45Mjc0OSAxMi4wOTYyIDUuNzMyMjN6XCIsZmlsbDpufSkpfSxFZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAxLjVDMiAxLjc3NjE0IDEuNzc2MTQgMiAxLjUgMkMxLjIyMzg2IDIgMSAxLjc3NjE0IDEgMS41QzEgMS4yMjM4NiAxLjIyMzg2IDEgMS41IDFDMS43NzYxNCAxIDIgMS4yMjM4NiAyIDEuNVpNNSAxM0gxMFYyTDUgMkw1IDEzWk00IDEzQzQgMTMuNTUyMyA0LjQ0NzcyIDE0IDUgMTRIMTBDMTAuNTUyMyAxNCAxMSAxMy41NTIzIDExIDEzVjJDMTEgMS40NDc3MiAxMC41NTIzIDEgMTAgMUg1QzQuNDQ3NzIgMSA0IDEuNDQ3NzEgNCAyVjEzWk0xMy41IDJDMTMuNzc2MSAyIDE0IDEuNzc2MTQgMTQgMS41QzE0IDEuMjIzODYgMTMuNzc2MSAxIDEzLjUgMUMxMy4yMjM5IDEgMTMgMS4yMjM4NiAxMyAxLjVDMTMgMS43NzYxNCAxMy4yMjM5IDIgMTMuNSAyWk0yIDMuNUMyIDMuNzc2MTQgMS43NzYxNCA0IDEuNSA0QzEuMjIzODYgNCAxIDMuNzc2MTQgMSAzLjVDMSAzLjIyMzg2IDEuMjIzODYgMyAxLjUgM0MxLjc3NjE0IDMgMiAzLjIyMzg2IDIgMy41Wk0xMy41IDRDMTMuNzc2MSA0IDE0IDMuNzc2MTQgMTQgMy41QzE0IDMuMjIzODYgMTMuNzc2MSAzIDEzLjUgM0MxMy4yMjM5IDMgMTMgMy4yMjM4NiAxMyAzLjVDMTMgMy43NzYxNCAxMy4yMjM5IDQgMTMuNSA0Wk0yIDUuNUMyIDUuNzc2MTQgMS43NzYxNCA2IDEuNSA2QzEuMjIzODYgNiAxIDUuNzc2MTQgMSA1LjVDMSA1LjIyMzg2IDEuMjIzODYgNSAxLjUgNUMxLjc3NjE0IDUgMiA1LjIyMzg2IDIgNS41Wk0xMy41IDZDMTMuNzc2MSA2IDE0IDUuNzc2MTQgMTQgNS41QzE0IDUuMjIzODYgMTMuNzc2MSA1IDEzLjUgNUMxMy4yMjM5IDUgMTMgNS4yMjM4NiAxMyA1LjVDMTMgNS43NzYxNCAxMy4yMjM5IDYgMTMuNSA2Wk0yIDcuNUMyIDcuNzc2MTQgMS43NzYxNCA4IDEuNSA4QzEuMjIzODYgOCAxIDcuNzc2MTQgMSA3LjVDMSA3LjIyMzg2IDEuMjIzODYgNyAxLjUgN0MxLjc3NjE0IDcgMiA3LjIyMzg2IDIgNy41Wk0xMy41IDhDMTMuNzc2MSA4IDE0IDcuNzc2MTQgMTQgNy41QzE0IDcuMjIzODYgMTMuNzc2MSA3IDEzLjUgN0MxMy4yMjM5IDcgMTMgNy4yMjM4NiAxMyA3LjVDMTMgNy43NzYxNCAxMy4yMjM5IDggMTMuNSA4Wk0yIDkuNUMyIDkuNzc2MTQgMS43NzYxNCAxMCAxLjUgMTBDMS4yMjM4NiAxMCAxIDkuNzc2MTQgMSA5LjVDMSA5LjIyMzg2IDEuMjIzODYgOSAxLjUgOUMxLjc3NjE0IDkgMiA5LjIyMzg2IDIgOS41Wk0xMy41IDEwQzEzLjc3NjEgMTAgMTQgOS43NzYxNCAxNCA5LjVDMTQgOS4yMjM4NiAxMy43NzYxIDkgMTMuNSA5QzEzLjIyMzkgOSAxMyA5LjIyMzg2IDEzIDkuNUMxMyA5Ljc3NjE0IDEzLjIyMzkgMTAgMTMuNSAxMFpNMiAxMS41QzIgMTEuNzc2MSAxLjc3NjE0IDEyIDEuNSAxMkMxLjIyMzg2IDEyIDEgMTEuNzc2MSAxIDExLjVDMSAxMS4yMjM5IDEuMjIzODYgMTEgMS41IDExQzEuNzc2MTQgMTEgMiAxMS4yMjM5IDIgMTEuNVpNMTMuNSAxMkMxMy43NzYxIDEyIDE0IDExLjc3NjEgMTQgMTEuNUMxNCAxMS4yMjM5IDEzLjc3NjEgMTEgMTMuNSAxMUMxMy4yMjM5IDExIDEzIDExLjIyMzkgMTMgMTEuNUMxMyAxMS43NzYxIDEzLjIyMzkgMTIgMTMuNSAxMlpNMiAxMy41QzIgMTMuNzc2MSAxLjc3NjE0IDE0IDEuNSAxNEMxLjIyMzg2IDE0IDEgMTMuNzc2MSAxIDEzLjVDMSAxMy4yMjM5IDEuMjIzODYgMTMgMS41IDEzQzEuNzc2MTQgMTMgMiAxMy4yMjM5IDIgMTMuNVpNMTMuNSAxNEMxMy43NzYxIDE0IDE0IDEzLjc3NjEgMTQgMTMuNUMxNCAxMy4yMjM5IDEzLjc3NjEgMTMgMTMuNSAxM0MxMy4yMjM5IDEzIDEzIDEzLjIyMzkgMTMgMTMuNUMxMyAxMy43NzYxIDEzLjIyMzkgMTQgMTMuNSAxNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFNlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi4wNjk3IDEuNzY3NDZDMTIuNDgwNyAxLjIxOTQ3IDExLjQ2MDUgMC40NTQzMTEgMTEuMDQ5NSAxLjAwMjNDMTAuNjM4NSAxLjU1MDI4IDExLjY1ODggMi4zMTU0NCAxMi4wNjk3IDEuNzY3NDZaTTguMzkyNjMgMS4wNzgxMUM3LjE1NTg1IDAuOTUwNjAyIDUuNzgyMyAxLjE2MzQ4IDQuNTg0MzMgMS43MDkzN0MzLjM4NTUyIDIuMjU1NjMgMi4zMjczNSAzLjE1MzA5IDEuNzg4NDQgNC40MTgzMkMxLjM3NTc0IDUuMzg3MjQgMS4wMTcxNSA2LjI4MTEzIDEuMDAwODggNy40NDM1NEMwLjk4NDcyNCA4LjU5ODQ0IDEuMzA1MjIgOS45Njg5OCAyLjEzMTc0IDExLjkyOEMyLjYxMTQyIDEzLjA2NDkgNC4wMzk2MyAxMy41NDQ2IDUuMTM4OTUgMTMuODA3OUM2LjQwODM2IDE0LjExMTkgNy44MDg1NyAxNC4xOTE0IDguNjY0NCAxNC4wNzQyQzkuMzY1MTUgMTMuOTc4MiAxMC4xNDQ4IDEzLjgyODQgMTAuNzk4NyAxMy4yOTdDMTEuODk3NyAxMi40MDM5IDEyLjkwMDkgMTEuMzk1NSAxMy40OTk0IDEwLjMzOTNDMTQuMTA0IDkuMjcyMjEgMTQuMzI1NiA4LjA5MjA3IDEzLjcyMTYgNi45NTMyNEMxMy41NjI4IDYuNjUzNzMgMTMuMzE2IDYuNTc3MzQgMTMuMDQxMiA2LjQ5MjNDMTIuOTM3NCA2LjQ2MDE2IDEyLjgyOTUgNi40MjY3OCAxMi43MjA5IDYuMzc5NjZDMTEuNjIxMSA1LjkwMjM0IDEwLjk2NDYgNS4zNDk2MyAxMC45MTM1IDUuMDI4NzZDMTAuODY1NiA0LjcyODA4IDEwLjkyMjEgNC41MTQ2MyAxMC45ODExIDQuMjkxODFDMTEuMDEyOSA0LjE3MTk5IDExLjA0NTMgNC4wNDk0NyAxMS4wNjI2IDMuOTA5MjJDMTEuMDgzOCAzLjczNzM3IDExLjA4MTQgMy4zMzMxOSAxMC42OTk2IDMuMTI3NjFDMTAuNDA0OCAyLjk2ODg4IDEwLjIxNjQgMi42NTg0MyAxMC4wNDA3IDIuMzY5MDRDOS45OTc0MiAyLjI5Nzc1IDkuOTU0OTIgMi4yMjc3MyA5LjkxMTggMi4xNjE1OEM5LjYyNjM0IDEuNzIzNjcgOS4yMDc2OSAxLjE2MjEzIDguMzkyNjMgMS4wNzgxMVpNNC45OTg5OSAyLjYxOTM1QzMuOTY0ODMgMy4wOTA1OCAzLjEyNTU0IDMuODMwOTcgMi43MDg0NiA0LjgxMDE4QzIuMjk4MDggNS43NzM2OCAyLjAxNDA2IDYuNTA4NzMgMi4wMDA3OSA3LjQ1NzUzQzEuOTg3NDEgOC40MTM4NSAyLjI1MDQzIDkuNjM2OCAzLjA1MzEgMTEuNTM5M0MzLjM5MTgxIDEyLjM0MjEgNC42MjE2NyAxMi42NTU3IDUuMzcxODYgMTIuODM1NEM2LjU0OTMgMTMuMTE3NCA3LjgyMiAxMy4xODAyIDguNTI4NjggMTMuMDgzNEM5LjIxMjcxIDEyLjk4OTcgOS43NDU2OCAxMi44NjQyIDEwLjE2ODEgMTIuNTIwOUMxMS4yMjkgMTEuNjU4NyAxMi4xMjEgMTAuNzQzNSAxMi42MjkzIDkuODQ2MzVDMTIuOTM0OSA5LjMwNzA5IDEzLjUxNDEgNy43MDI4IDEyLjYyOTIgNy4zODczQzEwLjc1MzkgNi43MTg3NSAxMC4yNjIgNi4wNjY2OSA5Ljk5MDExIDUuNDEyNjhDOS44MDkxNSA0Ljk3NzQ0IDkuODI4NjggNC41MjI4MiA5Ljk1NzQxIDQuMDc4ODVMOS45NTc0MSA0LjA3ODg0QzkuOTc2NjIgNC4wMTI2IDkuOTk1MzggMy45NDc5MSAxMC4wMzM0IDMuODg4ODJDOS44MTg1NyAzLjczNjc2IDkuNjUxNSAzLjU1MTk1IDkuNTE0NjQgMy4zNzE1QzkuNDI4NzYgMy4yNTgyOCA5LjM0NjkgMy4xMjA5OSA5LjI2MTk3IDIuOTc4NTZDOS4wMTg2NiAyLjU3MDUyIDguNzUwMTggMi4xMjAyNyA4LjI5MDA4IDIuMDcyODNDNy4yMjg4OSAxLjk2MzQzIDYuMDMzOTggMi4xNDc3MiA0Ljk5ODk5IDIuNjE5MzVaTTEzLjIwODEgMy43NzQ3MUMxMy40NDEgMy4yMjY3MSAxMi40NTQ3IDIuNjM2MDYgMTIuMDgyMiAzLjEwMTYzQzExLjU4MTcgMy43MjczMiAxMi45MDI5IDQuNDkyODEgMTMuMjA4MSAzLjc3NDcxWk0xNC4zNjcyIDIuMjYwMzFDMTQuOTY2OCAyLjI3NDkzIDE1LjE1NTEgMS4xMTYwMyAxNC41NzE4IDAuOTQ5MzcxQzEzLjgwNzYgMC43MzEwMjYgMTMuNTkxOCAyLjI0MTM5IDE0LjM2NzIgMi4yNjAzMVpNMTQuMjg1NyA1LjA5MDk4QzE0Ljg2NDQgNS4xMDAwNCAxNS4wNDYyIDQuMzgyMjIgMTQuNDgzMiA0LjI3ODk5QzEzLjc0NTUgNC4xNDM3NSAxMy41MzczIDUuMDc5MjcgMTQuMjg1NyA1LjA5MDk4Wk02LjkwNzUgNC4yODY3MkM2LjQ2ODk4IDQuNjY3NTQgNi4wNTIyIDQuMTUxODUgNS45Nzk4MyAzLjczNjVDNS44Njg0OCAzLjA5NzQ0IDYuMzM2OTYgMi41Njg1NiA2Ljk0ODIzIDIuOTExNTZDNy40MzM0NCAzLjE4MzgyIDcuMjY2NzggMy45NzQ3MSA2LjkwNzUgNC4yODY3MlpNNC45NDQ1NSA1Ljg4MTg0QzUuNDA4ODUgNS40MTc1NCA0LjU5NTY3IDQuNTcwMTMgNC4xMTQyNSA1LjA1MTU0QzMuODMzMzggNS4zMzI0MiA0LjAwOTM2IDUuNjUzNzYgNC4yMzc0NCA1Ljg4MTg0QzQuNDMyNzEgNi4wNzcxIDQuNzQ5MjkgNi4wNzcxIDQuOTQ0NTUgNS44ODE4NFpNNi45NzcxNiA2LjcxOTg0QzcuMzExODEgNy4zODkxNCA4LjQ4ODA0IDYuNzkxNTkgNy45OTQxMyA2LjE0Nzg4QzcuODY1MTkgNS45Nzk4MyA3LjY4NjU3IDUuOTQ5NCA3LjYyMTQ1IDUuOTQyMDdDNy4yMTIxNyA1Ljg5NjAxIDYuNzYzNDkgNi4yOTI1IDYuOTc3MTYgNi43MTk4NFpNNi45ODc5OCA4LjcyNDYxQzcuMTQwNjYgOS4xMTg4IDcuNTExMjIgOS4zMTg3IDcuOTE5MTUgOS4xNjMzQzguMjc0MzQgOS4wMjc5OSA4LjMzMTg2IDguMzk2ODkgOC4xNzE3NSA4LjA3NDI3QzguMDIzMzEgNy43NzUxNCA3LjYzOTU2IDcuNjc3OTMgNy4zMzc0NyA3Ljc5NDE3QzYuOTg1MTIgNy45Mjk3NiA2Ljg1NjcyIDguMzg3MDggNi45ODU3NiA4LjcxODg5TDYuOTg3OTggOC43MjQ2MVpNMTAuMzg4NSA4Ljg0MDgxQzEwLjc1NzUgOC42NTY2IDExLjQ2MTcgOC44Mjc3MSAxMS40NjE3IDkuMzExOTlDMTEuNDYxNyA5LjcxMjg2IDEwLjk1ODcgMTAuMjE2NSAxMC41NjM0IDEwLjI4MjZDMTAuMTgxMyAxMC4zNDY1IDkuNzA1MTUgOS45NzU4MSA5Ljc2NjQ4IDkuNTc3MThDOS44MTQ0NSA5LjI2NTM5IDEwLjEyMTcgOC45NzQwMSAxMC4zODg1IDguODQwODFaTTcuNTY3MDQgMTAuODQzMkM3LjMzNDYxIDEwLjc1MDIgNy4xNDM1MyAxMC44NjAxIDcuMTE0MzcgMTAuODc2OUw3LjExMjc5IDEwLjg3NzhDNi45MDc4MiAxMC45OTQ5IDYuNzEzODMgMTEuMjQzOSA2LjY3NDcgMTEuNDg0MkM2LjU5MDE4IDEyLjAwMzQgNy4xMzE5OSAxMi4xMjM5IDcuNTI2NjEgMTIuMDk4N0M4LjIwNzQgMTIuMDU1MyA4LjA2NTQ3IDExLjA0MjYgNy41NjcwNCAxMC44NDMyWk00Ljg4MDUgMTAuODkzMkM1LjA2NzQgMTAuNzcyMyA1LjE1NjU4IDEwLjUzNjMgNS4wODI5MyAxMC4zMTUzQzQuOTMwNDYgOS43OTY4NyA0LjMyNDYgOS43MTI1MiAzLjk2NTYxIDEwLjEyOTdDMy43OTMzNiAxMC4zMjk5IDMuODA3NDkgMTAuNjI3NCAzLjk5MjE0IDEwLjgxMDVMMy45OTQ5NSAxMC44MTRMMy45OTc5IDEwLjgxNzZDNC4yMjAyNSAxMS4wOTQyIDQuNjM2MjQgMTEuMTg1NyA0Ljg4MDUgMTAuODkzMlpNMy4wNDY5NSA3LjgxMzE4QzMuMzMxNDcgOC4wOTc3IDMuNjAwNzcgOC4xNTA2NyAzLjk4NDQzIDguMDU4NTlDNC42MDgyNiA3LjkwODg3IDQuMTM4MTQgNi4yNDI5OSAzLjA0NyA2Ljg3Mjk2QzIuNzA5MzkgNy4wNjc4OCAyLjg2NzE2IDcuNjMzMzkgMy4wNDY5NSA3LjgxMzE4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0samU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgOS41MDAwNkMxIDEwLjMyODUgMS42NzE1NyAxMS4wMDAxIDIuNSAxMS4wMDAxSDRMNCAxMC4wMDAxSDIuNUMyLjIyMzg2IDEwLjAwMDEgMiA5Ljc3NjIgMiA5LjUwMDA2TDIgMi41MDAwNkMyIDIuMjIzOTIgMi4yMjM4NiAyLjAwMDA2IDIuNSAyLjAwMDA2TDkuNSAyLjAwMDA2QzkuNzc2MTQgMi4wMDAwNiAxMCAyLjIyMzkyIDEwIDIuNTAwMDZWNC4wMDAwMkg1LjVDNC42NzE1OCA0LjAwMDAyIDQgNC42NzE1OSA0IDUuNTAwMDJWMTIuNUM0IDEzLjMyODQgNC42NzE1OCAxNCA1LjUgMTRIMTIuNUMxMy4zMjg0IDE0IDE0IDEzLjMyODQgMTQgMTIuNVY1LjUwMDAyQzE0IDQuNjcxNTkgMTMuMzI4NCA0LjAwMDAyIDEyLjUgNC4wMDAwMkgxMVYyLjUwMDA2QzExIDEuNjcxNjMgMTAuMzI4NCAxLjAwMDA2IDkuNSAxLjAwMDA2SDIuNUMxLjY3MTU3IDEuMDAwMDYgMSAxLjY3MTYzIDEgMi41MDAwNlY5LjUwMDA2Wk01IDUuNTAwMDJDNSA1LjIyMzg4IDUuMjIzODYgNS4wMDAwMiA1LjUgNS4wMDAwMkgxMi41QzEyLjc3NjEgNS4wMDAwMiAxMyA1LjIyMzg4IDEzIDUuNTAwMDJWMTIuNUMxMyAxMi43NzYyIDEyLjc3NjEgMTMgMTIuNSAxM0g1LjVDNS4yMjM4NiAxMyA1IDEyLjc3NjIgNSAxMi41VjUuNTAwMDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxNZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOS44NzczNyAxMkg5LjlIMTEuNUMxMS43NzYxIDEyIDEyIDExLjc3NjEgMTIgMTEuNUMxMiAxMS4yMjM5IDExLjc3NjEgMTEgMTEuNSAxMUg5LjlDOC43NzE2NCAxMSA3Ljk1NTQ1IDEwLjk5OTYgNy4zMTM1MiAxMC45NDcyQzYuNjc3NDQgMTAuODk1MiA2LjI1NjYyIDEwLjc5NDYgNS45MTEwMyAxMC42MTg1QzUuMjUyNDcgMTAuMjgzIDQuNzE3MDMgOS43NDc1MyA0LjM4MTQ4IDkuMDg4OTdDNC4yMDUzOSA4Ljc0MzM4IDQuMTA0ODEgOC4zMjI1NiA0LjA1Mjg0IDcuNjg2NDhDNC4wMDAzOSA3LjA0NDU1IDQgNi4yMjgzNiA0IDUuMVYzLjVDNCAzLjIyMzg2IDMuNzc2MTQgMyAzLjUgM0MzLjIyMzg2IDMgMyAzLjIyMzg2IDMgMy41VjUuMVY1LjEyMjYzQzMgNi4yMjM1OSAzIDcuMDgwNTIgMy4wNTYxNiA3Ljc2NzkxQzMuMTEzMTggOC40NjU4NCAzLjIzMDU4IDkuMDMyOSAzLjQ5MDQ3IDkuNTQyOTZDMy45MjE5IDEwLjM4OTcgNC42MTAzMSAxMS4wNzgxIDUuNDU3MDQgMTEuNTA5NUM1Ljk2NzEgMTEuNzY5NCA2LjUzNDE2IDExLjg4NjggNy4yMzIwOSAxMS45NDM4QzcuOTE5NDggMTIgOC43NzY0MSAxMiA5Ljg3NzM3IDEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sa2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuMTIyNjMgMTJINS4xSDMuNUMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVDMyAxMS4yMjM5IDMuMjIzODYgMTEgMy41IDExSDUuMUM2LjIyODM2IDExIDcuMDQ0NTUgMTAuOTk5NiA3LjY4NjQ4IDEwLjk0NzJDOC4zMjI1NiAxMC44OTUyIDguNzQzMzggMTAuNzk0NiA5LjA4ODk3IDEwLjYxODVDOS43NDc1MyAxMC4yODMgMTAuMjgzIDkuNzQ3NTMgMTAuNjE4NSA5LjA4ODk3QzEwLjc5NDYgOC43NDMzOCAxMC44OTUyIDguMzIyNTYgMTAuOTQ3MiA3LjY4NjQ4QzEwLjk5OTYgNy4wNDQ1NSAxMSA2LjIyODM2IDExIDUuMVYzLjVDMTEgMy4yMjM4NiAxMS4yMjM5IDMgMTEuNSAzQzExLjc3NjEgMyAxMiAzLjIyMzg2IDEyIDMuNVY1LjFWNS4xMjI2M0MxMiA2LjIyMzU5IDEyIDcuMDgwNTIgMTEuOTQzOCA3Ljc2NzkxQzExLjg4NjggOC40NjU4NCAxMS43Njk0IDkuMDMyOSAxMS41MDk1IDkuNTQyOTZDMTEuMDc4MSAxMC4zODk3IDEwLjM4OTcgMTEuMDc4MSA5LjU0Mjk2IDExLjUwOTVDOS4wMzI5IDExLjc2OTQgOC40NjU4NCAxMS44ODY4IDcuNzY3OTEgMTEuOTQzOEM3LjA4MDUyIDEyIDYuMjIzNTkgMTIgNS4xMjI2MyAxMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFJlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05Ljg3NzM3IDNIOS45SDExLjVDMTEuNzc2MSAzIDEyIDMuMjIzODYgMTIgMy41QzEyIDMuNzc2MTQgMTEuNzc2MSA0IDExLjUgNEg5LjlDOC43NzE2NCA0IDcuOTU1NDUgNC4wMDAzOSA3LjMxMzUyIDQuMDUyODRDNi42Nzc0NCA0LjEwNDgxIDYuMjU2NjIgNC4yMDUzOSA1LjkxMTAzIDQuMzgxNDhDNS4yNTI0NyA0LjcxNzAzIDQuNzE3MDMgNS4yNTI0NyA0LjM4MTQ4IDUuOTExMDNDNC4yMDUzOSA2LjI1NjYyIDQuMTA0ODEgNi42Nzc0NCA0LjA1Mjg0IDcuMzEzNTJDNC4wMDAzOSA3Ljk1NTQ1IDQgOC43NzE2NCA0IDkuOVYxMS41QzQgMTEuNzc2MSAzLjc3NjE0IDEyIDMuNSAxMkMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVWOS45VjkuODc3MzdDMyA4Ljc3NjQxIDMgNy45MTk0OCAzLjA1NjE2IDcuMjMyMDlDMy4xMTMxOCA2LjUzNDE2IDMuMjMwNTggNS45NjcxIDMuNDkwNDcgNS40NTcwNEMzLjkyMTkgNC42MTAzMSA0LjYxMDMxIDMuOTIxOSA1LjQ1NzA0IDMuNDkwNDdDNS45NjcxIDMuMjMwNTggNi41MzQxNiAzLjExMzE4IDcuMjMyMDkgMy4wNTYxNkM3LjkxOTQ4IDMgOC43NzY0MSAzIDkuODc3MzcgM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFBlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjEyMjYzIDNINS4xSDMuNUMzLjIyMzg2IDMgMyAzLjIyMzg2IDMgMy41QzMgMy43NzYxNCAzLjIyMzg2IDQgMy41IDRINS4xQzYuMjI4MzYgNCA3LjA0NDU1IDQuMDAwMzkgNy42ODY0OCA0LjA1Mjg0QzguMzIyNTYgNC4xMDQ4MSA4Ljc0MzM4IDQuMjA1MzkgOS4wODg5NyA0LjM4MTQ4QzkuNzQ3NTMgNC43MTcwMyAxMC4yODMgNS4yNTI0NyAxMC42MTg1IDUuOTExMDNDMTAuNzk0NiA2LjI1NjYyIDEwLjg5NTIgNi42Nzc0NCAxMC45NDcyIDcuMzEzNTJDMTAuOTk5NiA3Ljk1NTQ1IDExIDguNzcxNjQgMTEgOS45VjExLjVDMTEgMTEuNzc2MSAxMS4yMjM5IDEyIDExLjUgMTJDMTEuNzc2MSAxMiAxMiAxMS43NzYxIDEyIDExLjVWOS45VjkuODc3MzdDMTIgOC43NzY0MSAxMiA3LjkxOTQ4IDExLjk0MzggNy4yMzIwOUMxMS44ODY4IDYuNTM0MTYgMTEuNzY5NCA1Ljk2NzEgMTEuNTA5NSA1LjQ1NzA0QzExLjA3ODEgNC42MTAzMSAxMC4zODk3IDMuOTIxOSA5LjU0Mjk2IDMuNDkwNDdDOS4wMzI5IDMuMjMwNTggOC40NjU4NCAzLjExMzE4IDcuNzY3OTEgMy4wNTYxNkM3LjA4MDUyIDMgNi4yMjM1OSAzIDUuMTIyNjMgM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEllPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMC4xIDNDMTAuNTI4MyAzIDEwLjgxOTQgMy4wMDAzOSAxMS4wNDQ1IDMuMDE4NzhDMTEuMjYzNyAzLjAzNjY5IDExLjM3NTggMy4wNjkxNSAxMS40NTQgMy4xMDg5OUMxMS42NDIyIDMuMjA0ODcgMTEuNzk1MSAzLjM1Nzg1IDExLjg5MSAzLjU0NjAxQzExLjkzMDkgMy42MjQyMSAxMS45NjMzIDMuNzM2MzEgMTEuOTgxMiAzLjk1NTUyQzExLjk5OTYgNC4xODA1NiAxMiA0LjQ3MTcxIDEyIDQuOVY1LjVDMTIgNS43NzYxNCAxMi4yMjM5IDYgMTIuNSA2QzEyLjc3NjEgNiAxMyA1Ljc3NjE0IDEzIDUuNVY0Ljg3OTM1QzEzIDQuNDc2ODcgMTMgNC4xNDQ2OSAxMi45Nzc5IDMuODc0MDlDMTIuOTU0OSAzLjU5MzA0IDEyLjkwNTcgMy4zMzQ2OSAxMi43ODIgMy4wOTIwMkMxMi41OTAzIDIuNzE1NyAxMi4yODQzIDIuNDA5NzMgMTEuOTA4IDIuMjE3OTlDMTEuNjY1MyAyLjA5NDM0IDExLjQwNyAyLjA0NTA2IDExLjEyNTkgMi4wMjIxQzEwLjg1NTMgMS45OTk5OSAxMC41MjMxIDEuOTk5OTkgMTAuMTIwNyAySDEwLjEyMDZIMTAuMUg5LjVDOS4yMjM4NiAyIDkgMi4yMjM4NiA5IDIuNUM5IDIuNzc2MTQgOS4yMjM4NiAzIDkuNSAzSDEwLjFaTTUuNSAySDQuODc5MzVINC44NzkzNEM0LjQ3Njg2IDEuOTk5OTkgNC4xNDQ2OCAxLjk5OTk5IDMuODc0MDkgMi4wMjIxQzMuNTkzMDQgMi4wNDUwNiAzLjMzNDY5IDIuMDk0MzQgMy4wOTIwMiAyLjIxNzk5QzIuNzE1NyAyLjQwOTczIDIuNDA5NzMgMi43MTU3IDIuMjE3OTkgMy4wOTIwMkMyLjA5NDM0IDMuMzM0NjkgMi4wNDUwNiAzLjU5MzA0IDIuMDIyMSAzLjg3NDA5QzEuOTk5OTkgNC4xNDQ2OCAxLjk5OTk5IDQuNDc2ODYgMiA0Ljg3OTM0VjQuODc5MzVWNS41QzIgNS43NzYxNCAyLjIyMzg2IDYgMi41IDZDMi43NzYxNCA2IDMgNS43NzYxNCAzIDUuNVY0LjlDMyA0LjQ3MTcxIDMuMDAwMzkgNC4xODA1NiAzLjAxODc4IDMuOTU1NTJDMy4wMzY2OSAzLjczNjMxIDMuMDY5MTUgMy42MjQyMSAzLjEwODk5IDMuNTQ2MDFDMy4yMDQ4NyAzLjM1Nzg1IDMuMzU3ODUgMy4yMDQ4NyAzLjU0NjAxIDMuMTA4OTlDMy42MjQyMSAzLjA2OTE1IDMuNzM2MzEgMy4wMzY2OSAzLjk1NTUyIDMuMDE4NzhDNC4xODA1NiAzLjAwMDM5IDQuNDcxNzEgMyA0LjkgM0g1LjVDNS43NzYxNCAzIDYgMi43NzYxNCA2IDIuNUM2IDIuMjIzODYgNS43NzYxNCAyIDUuNSAyWk0xMyA5LjVDMTMgOS4yMjM4NiAxMi43NzYxIDkgMTIuNSA5QzEyLjIyMzkgOSAxMiA5LjIyMzg2IDEyIDkuNVYxMC4xQzEyIDEwLjUyODMgMTEuOTk5NiAxMC44MTk0IDExLjk4MTIgMTEuMDQ0NUMxMS45NjMzIDExLjI2MzcgMTEuOTMwOSAxMS4zNzU4IDExLjg5MSAxMS40NTRDMTEuNzk1MSAxMS42NDIyIDExLjY0MjIgMTEuNzk1MSAxMS40NTQgMTEuODkxQzExLjM3NTggMTEuOTMwOSAxMS4yNjM3IDExLjk2MzMgMTEuMDQ0NSAxMS45ODEyQzEwLjgxOTQgMTEuOTk5NiAxMC41MjgzIDEyIDEwLjEgMTJIOS41QzkuMjIzODYgMTIgOSAxMi4yMjM5IDkgMTIuNUM5IDEyLjc3NjEgOS4yMjM4NiAxMyA5LjUgMTNIMTAuMTIwNkMxMC41MjMxIDEzIDEwLjg1NTMgMTMgMTEuMTI1OSAxMi45Nzc5QzExLjQwNyAxMi45NTQ5IDExLjY2NTMgMTIuOTA1NyAxMS45MDggMTIuNzgyQzEyLjI4NDMgMTIuNTkwMyAxMi41OTAzIDEyLjI4NDMgMTIuNzgyIDExLjkwOEMxMi45MDU3IDExLjY2NTMgMTIuOTU0OSAxMS40MDcgMTIuOTc3OSAxMS4xMjU5QzEzIDEwLjg1NTMgMTMgMTAuNTIzMSAxMyAxMC4xMjA2VjkuNVpNMi41IDlDMi43NzYxNCA5IDMgOS4yMjM4NiAzIDkuNVYxMC4xQzMgMTAuNTI4MyAzLjAwMDM5IDEwLjgxOTQgMy4wMTg3OCAxMS4wNDQ1QzMuMDM2NjkgMTEuMjYzNyAzLjA2OTE1IDExLjM3NTggMy4xMDg5OSAxMS40NTRDMy4yMDQ4NyAxMS42NDIyIDMuMzU3ODUgMTEuNzk1MSAzLjU0NjAxIDExLjg5MUMzLjYyNDIxIDExLjkzMDkgMy43MzYzMSAxMS45NjMzIDMuOTU1NTIgMTEuOTgxMkM0LjE4MDU2IDExLjk5OTYgNC40NzE3MSAxMiA0LjkgMTJINS41QzUuNzc2MTQgMTIgNiAxMi4yMjM5IDYgMTIuNUM2IDEyLjc3NjEgNS43NzYxNCAxMyA1LjUgMTNINC44NzkzNUM0LjQ3Njg3IDEzIDQuMTQ0NjkgMTMgMy44NzQwOSAxMi45Nzc5QzMuNTkzMDQgMTIuOTU0OSAzLjMzNDY5IDEyLjkwNTcgMy4wOTIwMiAxMi43ODJDMi43MTU3IDEyLjU5MDMgMi40MDk3MyAxMi4yODQzIDIuMjE3OTkgMTEuOTA4QzIuMDk0MzQgMTEuNjY1MyAyLjA0NTA2IDExLjQwNyAyLjAyMjEgMTEuMTI1OUMxLjk5OTk5IDEwLjg1NTMgMS45OTk5OSAxMC41MjMxIDIgMTAuMTIwN1YxMC4xMjA2VjEwLjFWOS41QzIgOS4yMjM4NiAyLjIyMzg2IDkgMi41IDlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxBZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMTUgNy40OTk5OEMxMy4xNSA0LjY2NDU4IDEwLjk0MDIgMS44NDk5OCA3LjUwMDAyIDEuODQ5OThDNC43MjE3IDEuODQ5OTggMy4zNDg1MSAzLjkwNjM2IDIuNzYzMzYgNC45OTk5N0g0LjVDNC43NzYxNCA0Ljk5OTk3IDUgNS4yMjM4MyA1IDUuNDk5OTdDNSA1Ljc3NjExIDQuNzc2MTQgNS45OTk5NyA0LjUgNS45OTk5N0gxLjVDMS4yMjM4NiA1Ljk5OTk3IDEgNS43NzYxMSAxIDUuNDk5OTdWMi40OTk5N0MxIDIuMjIzODMgMS4yMjM4NiAxLjk5OTk3IDEuNSAxLjk5OTk3QzEuNzc2MTQgMS45OTk5NyAyIDIuMjIzODMgMiAyLjQ5OTk3VjQuMzEzMThDMi43MDQ1MyAzLjA3MTI2IDQuMzM0MDYgMC44NDk5NzYgNy41MDAwMiAwLjg0OTk3NkMxMS41NjI4IDAuODQ5OTc2IDE0LjE1IDQuMTg1MzcgMTQuMTUgNy40OTk5OEMxNC4xNSAxMC44MTQ2IDExLjU2MjggMTQuMTUgNy41MDAwMiAxNC4xNUM1LjU1NjE4IDE0LjE1IDMuOTM3NzggMTMuMzgwOCAyLjc4NTQ4IDEyLjIwODRDMi4xNjg1MiAxMS41ODA2IDEuNjg2NjggMTAuODM5IDEuMzU4MTYgMTAuMDQwN0MxLjI1MzA2IDkuNzg1MzYgMS4zNzQ4OCA5LjQ5MzE1IDEuNjMwMjQgOS4zODgwNkMxLjg4NTYgOS4yODI5NiAyLjE3NzgxIDkuNDA0NzggMi4yODI5IDkuNjYwMTRDMi41NjM3NCAxMC4zNDI1IDIuOTc0OTUgMTAuOTc0NSAzLjQ5ODcgMTEuNTA3NEM0LjQ3MDUyIDEyLjQ5NjMgNS44MzQ5NiAxMy4xNSA3LjUwMDAyIDEzLjE1QzEwLjk0MDIgMTMuMTUgMTMuMTUgMTAuMzM1NCAxMy4xNSA3LjQ5OTk4Wk03IDEwVjUuMDAwMDFIOFYxMEg3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjE1IDcuNDk5OThDMTMuMTUgNC42NjQ1OCAxMC45NDAyIDEuODQ5OTggNy41MDAwMiAxLjg0OTk4QzQuNzIxNjcgMS44NDk5OCAzLjM0ODQ5IDMuOTA2NCAyLjc2MzM1IDVINC41QzQuNzc2MTQgNSA1IDUuMjIzODYgNSA1LjVDNSA1Ljc3NjE0IDQuNzc2MTQgNiA0LjUgNkgxLjVDMS4yMjM4NiA2IDEgNS43NzYxNCAxIDUuNVYyLjVDMSAyLjIyMzg2IDEuMjIzODYgMiAxLjUgMkMxLjc3NjE0IDIgMiAyLjIyMzg2IDIgMi41VjQuMzEzMThDMi43MDQ1MyAzLjA3MTI2IDQuMzM0MDYgMC44NDk5NzYgNy41MDAwMiAwLjg0OTk3NkMxMS41NjI4IDAuODQ5OTc2IDE0LjE1IDQuMTg1MzcgMTQuMTUgNy40OTk5OEMxNC4xNSAxMC44MTQ2IDExLjU2MjggMTQuMTUgNy41MDAwMiAxNC4xNUM1LjU1NjE4IDE0LjE1IDMuOTM3NzggMTMuMzgwOCAyLjc4NTQ4IDEyLjIwODRDMi4xNjg1MiAxMS41ODA2IDEuNjg2NjggMTAuODM5IDEuMzU4MTYgMTAuMDQwN0MxLjI1MzA2IDkuNzg1MzYgMS4zNzQ4OCA5LjQ5MzE1IDEuNjMwMjQgOS4zODgwNkMxLjg4NTYgOS4yODI5NiAyLjE3NzgxIDkuNDA0NzggMi4yODI5IDkuNjYwMTRDMi41NjM3NCAxMC4zNDI1IDIuOTc0OTUgMTAuOTc0NSAzLjQ5ODcgMTEuNTA3NEM0LjQ3MDUyIDEyLjQ5NjMgNS44MzQ5NiAxMy4xNSA3LjUwMDAyIDEzLjE1QzEwLjk0MDIgMTMuMTUgMTMuMTUgMTAuMzM1NCAxMy4xNSA3LjQ5OTk4Wk03LjUgNC4wMDAwMUM3Ljc3NjE0IDQuMDAwMDEgOCA0LjIyMzg3IDggNC41MDAwMVY3LjI5MjkxTDkuODUzNTUgOS4xNDY0NkMxMC4wNDg4IDkuMzQxNzIgMTAuMDQ4OCA5LjY1ODMxIDkuODUzNTUgOS44NTM1N0M5LjY1ODI5IDEwLjA0ODggOS4zNDE3MSAxMC4wNDg4IDkuMTQ2NDUgOS44NTM1N0w3LjE0NjQ1IDcuODUzNTdDNy4wNTI2OCA3Ljc1OTggNyA3LjYzMjYyIDcgNy41MDAwMVY0LjUwMDAxQzcgNC4yMjM4NyA3LjIyMzg2IDQuMDAwMDEgNy41IDQuMDAwMDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDguMDA2ODRlLTA3QzMuNzc2MTQgNy44ODYxNGUtMDcgNCAwLjIyMzg1OSA0IDAuNTAwMDAxTDQgMy4wMDAwNkwxMS41IDMuMDAwMDZDMTEuNzc2MSAzLjAwMDA2IDEyIDMuMjIzOTIgMTIgMy41MDAwNkwxMiAxMS4wMDAxTDE0LjUgMTFDMTQuNzc2MSAxMSAxNSAxMS4yMjM4IDE1IDExLjVDMTUgMTEuNzc2MSAxNC43NzYyIDEyIDE0LjUgMTJMMTIgMTIuMDAwMUwxMiAxNC41QzEyIDE0Ljc3NjEgMTEuNzc2MSAxNSAxMS41IDE1QzExLjIyMzkgMTUgMTEgMTQuNzc2MSAxMSAxNC41TDExIDEyLjAwMDFMMy41IDEyLjAwMDFDMy4yMjM4NiAxMi4wMDAxIDMgMTEuNzc2MiAzIDExLjUwMDFMMyA0LjAwMDA1TDAuNDk5OTg5IDRDMC4yMjM4NDcgNCAtNi4xMDU0MWUtMDYgMy43NzYxMyAtNS4wMjU3NmUtMDcgMy40OTk5OUM1LjEzMDA2ZS0wNiAzLjIyMzg1IDAuMjIzODY3IDMgMC41MDAwMSAzTDMgMy4wMDAwNUwzIDAuNTAwMDAxQzMgMC4yMjM4NTkgMy4yMjM4NiA4LjEyNzU1ZS0wNyAzLjUgOC4wMDY4NGUtMDdaTTQgNC4wMDAwNkw0IDExLjAwMDFMMTEgMTEuMDAwMUwxMSA0LjAwMDA2TDQgNC4wMDAwNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEJlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi44NTM2IDIuODUzNTVDMTMuMDQ4OCAyLjY1ODI5IDEzLjA0ODggMi4zNDE3MSAxMi44NTM2IDIuMTQ2NDVDMTIuNjU4MyAxLjk1MTE4IDEyLjM0MTcgMS45NTExOCAxMi4xNDY0IDIuMTQ2NDVMNy41IDYuNzkyODlMMi44NTM1NSAyLjE0NjQ1QzIuNjU4MjkgMS45NTExOCAyLjM0MTcxIDEuOTUxMTggMi4xNDY0NSAyLjE0NjQ1QzEuOTUxMTggMi4zNDE3MSAxLjk1MTE4IDIuNjU4MjkgMi4xNDY0NSAyLjg1MzU1TDYuNzkyODkgNy41TDIuMTQ2NDUgMTIuMTQ2NEMxLjk1MTE4IDEyLjM0MTcgMS45NTExOCAxMi42NTgzIDIuMTQ2NDUgMTIuODUzNkMyLjM0MTcxIDEzLjA0ODggMi42NTgyOSAxMy4wNDg4IDIuODUzNTUgMTIuODUzNkw3LjUgOC4yMDcxMUwxMi4xNDY0IDEyLjg1MzZDMTIuMzQxNyAxMy4wNDg4IDEyLjY1ODMgMTMuMDQ4OCAxMi44NTM2IDEyLjg1MzZDMTMuMDQ4OCAxMi42NTgzIDEzLjA0ODggMTIuMzQxNyAxMi44NTM2IDEyLjE0NjRMOC4yMDcxMSA3LjVMMTIuODUzNiAyLjg1MzU1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTExLjc4MTYgNC4wMzE1N0MxMi4wMDYyIDMuODA3MDIgMTIuMDA2MiAzLjQ0Mjk1IDExLjc4MTYgMy4yMTg0QzExLjU1NzEgMi45OTM4NSAxMS4xOTMgMi45OTM4NSAxMC45Njg1IDMuMjE4NEw3LjUwMDA1IDYuNjg2ODJMNC4wMzE2NCAzLjIxODRDMy44MDcwOCAyLjk5Mzg1IDMuNDQzMDEgMi45OTM4NSAzLjIxODQ2IDMuMjE4NEMyLjk5MzkxIDMuNDQyOTUgMi45OTM5MSAzLjgwNzAyIDMuMjE4NDYgNC4wMzE1N0w2LjY4Njg4IDcuNDk5OTlMMy4yMTg0NiAxMC45Njg0QzIuOTkzOTEgMTEuMTkzIDIuOTkzOTEgMTEuNTU3IDMuMjE4NDYgMTEuNzgxNkMzLjQ0MzAxIDEyLjAwNjEgMy44MDcwOCAxMi4wMDYxIDQuMDMxNjQgMTEuNzgxNkw3LjUwMDA1IDguMzEzMTZMMTAuOTY4NSAxMS43ODE2QzExLjE5MyAxMi4wMDYxIDExLjU1NzEgMTIuMDA2MSAxMS43ODE2IDExLjc4MTZDMTIuMDA2MiAxMS41NTcgMTIuMDA2MiAxMS4xOTMgMTEuNzgxNiAxMC45Njg0TDguMzEzMjIgNy40OTk5OUwxMS43ODE2IDQuMDMxNTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxEZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy40OTk4OEMwLjg3NzA3NSAzLjg0MjE5IDMuODQyMjIgMC44NzcwNDUgNy40OTk5MSAwLjg3NzA0NUMxMS4xNTc2IDAuODc3MDQ1IDE0LjEyMjcgMy44NDIxOSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyAxMS4xNTc1IDExLjE1NzYgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMy44NDIyMiAxNC4xMjI3IDAuODc3MDc1IDExLjE1NzUgMC44NzcwNzUgNy40OTk4OFpNNy40OTk5MSAxLjgyNzA0QzQuMzY2ODkgMS44MjcwNCAxLjgyNzA4IDQuMzY2ODYgMS44MjcwOCA3LjQ5OTg4QzEuODI3MDggMTAuNjMyOSA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzEwLjYzMjkgMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNC4zNjY4NiAxMC42MzI5IDEuODI3MDQgNy40OTk5MSAxLjgyNzA0Wk05Ljg1MzU4IDUuMTQ2NDRDMTAuMDQ4OCA1LjM0MTcgMTAuMDQ4OCA1LjY1ODI5IDkuODUzNTggNS44NTM1NUw4LjIwNzEzIDcuNDk5OTlMOS44NTM1OCA5LjE0NjQ0QzEwLjA0ODggOS4zNDE3IDEwLjA0ODggOS42NTgyOSA5Ljg1MzU4IDkuODUzNTVDOS42NTgzMiAxMC4wNDg4IDkuMzQxNzMgMTAuMDQ4OCA5LjE0NjQ3IDkuODUzNTVMNy41MDAwMiA4LjIwNzFMNS44NTM1OCA5Ljg1MzU1QzUuNjU4MzIgMTAuMDQ4OCA1LjM0MTczIDEwLjA0ODggNS4xNDY0NyA5Ljg1MzU1QzQuOTUxMjEgOS42NTgyOSA0Ljk1MTIxIDkuMzQxNyA1LjE0NjQ3IDkuMTQ2NDRMNi43OTI5MiA3LjQ5OTk5TDUuMTQ2NDcgNS44NTM1NUM0Ljk1MTIxIDUuNjU4MjkgNC45NTEyMSA1LjM0MTcgNS4xNDY0NyA1LjE0NjQ0QzUuMzQxNzMgNC45NTExOCA1LjY1ODMyIDQuOTUxMTggNS44NTM1OCA1LjE0NjQ0TDcuNTAwMDIgNi43OTI4OUw5LjE0NjQ3IDUuMTQ2NDRDOS4zNDE3MyA0Ljk1MTE4IDkuNjU4MzIgNC45NTExOCA5Ljg1MzU4IDUuMTQ2NDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxaZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy41MDIwN0MwLjg3NzA3NSAzLjg0MzE5IDMuODQzMTkgMC44NzcwNzUgNy41MDIwOCAwLjg3NzA3NUMxMS4xNjA5IDAuODc3MDc1IDE0LjEyNzEgMy44NDMxOSAxNC4xMjcxIDcuNTAyMDdDMTQuMTI3MSAxMS4xNjA5IDExLjE2MDkgMTQuMTI3MSA3LjUwMjA4IDE0LjEyNzFDMy44NDMxOSAxNC4xMjcxIDAuODc3MDc1IDExLjE2MDkgMC44NzcwNzUgNy41MDIwN1pNMS44NDg5OCA3LjAwMDAzQzIuMDg4NiA0LjI2NjM5IDQuMjY2MzkgMi4wODg2IDcuMDAwMDMgMS44NDg5OFY0LjUwMDAzQzcuMDAwMDMgNC43NzYxNyA3LjIyMzg4IDUuMDAwMDMgNy41MDAwMyA1LjAwMDAzQzcuNzc2MTcgNS4wMDAwMyA4LjAwMDAzIDQuNzc2MTcgOC4wMDAwMyA0LjUwMDAzVjEuODQ4NjJDMTAuNzM1NiAyLjA4NjQzIDEyLjkxNTQgNC4yNjUwMiAxMy4xNTUyIDcuMDAwMDNIMTAuNUMxMC4yMjM5IDcuMDAwMDMgMTAgNy4yMjM4OCAxMCA3LjUwMDAzQzEwIDcuNzc2MTcgMTAuMjIzOSA4LjAwMDAzIDEwLjUgOC4wMDAwM0gxMy4xNTU1QzEyLjkxNzYgMTAuNzM2OSAxMC43MzY5IDEyLjkxNzYgOC4wMDAwMyAxMy4xNTU1VjEwLjVDOC4wMDAwMyAxMC4yMjM5IDcuNzc2MTcgMTAgNy41MDAwMyAxMEM3LjIyMzg4IDEwIDcuMDAwMDMgMTAuMjIzOSA3LjAwMDAzIDEwLjVWMTMuMTU1MkM0LjI2NTAyIDEyLjkxNTQgMi4wODY0MyAxMC43MzU2IDEuODQ4NjIgOC4wMDAwM0g0LjUwMDAzQzQuNzc2MTcgOC4wMDAwMyA1LjAwMDAzIDcuNzc2MTcgNS4wMDAwMyA3LjUwMDAzQzUuMDAwMDMgNy4yMjM4OCA0Ljc3NjE3IDcuMDAwMDMgNC41MDAwMyA3LjAwMDAzSDEuODQ4OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSwkZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDBDNy43NzYxNCAwIDggMC4yMjM4NTggOCAwLjVWMS44MDY4N0MxMC42OTIyIDIuMDkzNSAxMi44MTY3IDQuMjgwMTIgMTMuMDA2OCA3SDE0LjVDMTQuNzc2MSA3IDE1IDcuMjIzODYgMTUgNy41QzE1IDcuNzc2MTQgMTQuNzc2MSA4IDE0LjUgOEgxMi45ODg4QzEyLjcwOTQgMTAuNjI0NCAxMC42MjQ0IDEyLjcwOTQgOCAxMi45ODg4VjE0LjVDOCAxNC43NzYxIDcuNzc2MTQgMTUgNy41IDE1QzcuMjIzODYgMTUgNyAxNC43NzYxIDcgMTQuNVYxMy4wMDY4QzQuMjgwMTIgMTIuODE2NyAyLjA5MzUgMTAuNjkyMiAxLjgwNjg3IDhIMC41QzAuMjIzODU4IDggMCA3Ljc3NjE0IDAgNy41QzAgNy4yMjM4NiAwLjIyMzg1OCA3IDAuNSA3SDEuNzg4ODZDMS45ODM3NiA0LjIxMTY2IDQuMjExNjYgMS45ODM3NiA3IDEuNzg4ODZWMC41QzcgMC4yMjM4NTggNy4yMjM4NiAwIDcuNSAwWk04IDEyLjAzMjJWOS41QzggOS4yMjM4NiA3Ljc3NjE0IDkgNy41IDlDNy4yMjM4NiA5IDcgOS4yMjM4NiA3IDkuNVYxMi4wNTRDNC44MDUxNyAxMS44Njg5IDMuMDQyMjIgMTAuMTY2OCAyLjc2MzQ0IDhINS41QzUuNzc2MTQgOCA2IDcuNzc2MTQgNiA3LjVDNiA3LjIyMzg2IDUuNzc2MTQgNyA1LjUgN0gyLjc0MTdDMi45MzI1MiA0LjczNjYyIDQuNzM2NjIgMi45MzI1MiA3IDIuNzQxN1Y1LjVDNyA1Ljc3NjE0IDcuMjIzODYgNiA3LjUgNkM3Ljc3NjE0IDYgOCA1Ljc3NjE0IDggNS41VjIuNzYzNDRDMTAuMTY2OCAzLjA0MjIyIDExLjg2ODkgNC44MDUxNyAxMi4wNTQgN0g5LjVDOS4yMjM4NiA3IDkgNy4yMjM4NiA5IDcuNUM5IDcuNzc2MTQgOS4yMjM4NiA4IDkuNSA4SDEyLjAzMjJDMTEuNzYyMSAxMC4wOTkxIDEwLjA5OTEgMTEuNzYyMSA4IDEyLjAzMjJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxOZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC42MDkxMyAwLjA2MzQyODdDNC4zOTA4MiAwLjAwODg1MDUgNC4xNjU3NSAwLjEyMzkzIDQuMDgyMTggMC4zMzI4NjdMMy4xNTM4IDIuNjUzOEwwLjgzMjg2NiAzLjU4MjE4QzAuNzAyODg0IDMuNjM0MTcgMC42MDQ1MDQgMy43NDM3IDAuNTY2NzA1IDMuODc4NDlDMC41Mjg5MDYgNC4wMTMyOSAwLjU1NTk5NCA0LjE1OCAwLjYzOTk5MiA0LjI2OTk5TDIuMDExNDggNi4wOTg2NEwxLjA2MzQzIDkuODkwODVDMS4wMDk0NCAxMC4xMDY4IDEuMTIxNDUgMTAuMzI5OCAxLjMyNjkxIDEwLjQxNTRMNC4yMDExNSAxMS42MTNMNS42MjU1NyAxMy43NDk2QzUuNzM0MTIgMTMuOTEyNCA1LjkzNTQ1IDEzLjk4NjQgNi4xMjM2MiAxMy45MzI3TDkuNjIzNjIgMTIuOTMyN0M5LjYyOTg4IDEyLjkzMDkgOS42MzYxMSAxMi45MjkgOS42NDIyOSAxMi45MjY5TDEyLjY0MjMgMTEuOTI2OUMxMi43OTIzIDExLjg3NjkgMTIuOTA1IDExLjc1MTkgMTIuOTM5MyAxMS41OTc2TDEzLjkzOTMgNy4wOTc2MUMxMy45Nzc2IDYuOTI1MDYgMTMuOTExNCA2Ljc0NjA1IDEzLjc3IDYuNjM5OTlMMTEuOTUgNS4yNzQ5OVYyLjk5OTk5QzExLjk1IDIuODI5NTUgMTEuODUzNyAyLjY3MzczIDExLjcwMTIgMi41OTc1TDguNzAxMjQgMS4wOTc1QzguNjcxODcgMS4wODI4MiA4LjY0MDk4IDEuMDcxMzkgOC42MDkxMyAxLjA2MzQzTDQuNjA5MTMgMC4wNjM0Mjg3Wk0xMS40MzIzIDYuMDExNzNMMTIuNzc0OCA3LjAxODU4TDEwLjIxMTkgOS4xNTQyOUMxMC4xNDc2IDkuMjA3ODYgMTAuMDk5NSA5LjI3ODMgMTAuMDczMSA5LjM1NzY5TDkuMjUzODIgMTEuODE1NUw3LjczODQ5IDEwLjg2ODRDNy41Mjc3NCAxMC43MzY3IDcuMjUwMTEgMTAuODAwNyA3LjExODM5IDExLjAxMTVDNi45ODY2NyAxMS4yMjIyIDcuMDUwNzQgMTEuNDk5OSA3LjI2MTQ5IDExLjYzMTZMOC40MDM0MSAxMi4zNDUzTDYuMTkyMjEgMTIuOTc3MUw0Ljg3NDQxIDExLjAwMDRDNC44MjUxMyAxMC45MjY1IDQuNzU1MDggMTAuODY4OCA0LjY3MzA3IDEwLjgzNDZMMi4wMzA0NiA5LjczMzUyTDIuODUxMzQgNi40NDk5OUg0Ljk5OTk5QzUuMjQ4NTIgNi40NDk5OSA1LjQ0OTk5IDYuMjQ4NTIgNS40NDk5OSA1Ljk5OTk5QzUuNDQ5OTkgNS43NTE0NiA1LjI0ODUyIDUuNTQ5OTkgNC45OTk5OSA1LjU0OTk5SDIuNzI0OTlMMS43MTIzIDQuMTk5NzRMMy41MTQwNyAzLjQ3OTAzTDYuMzU3NjkgNC40MjY5QzYuNTM2NTUgNC40ODY1MiA2LjczMzYxIDQuNDI4MzIgNi44NTEzOCA0LjI4MTExTDguNjI0MTMgMi4wNjUxOEwxMS4wNSAzLjI3ODExVjUuMTk1MzNMOC44MzI4NyA2LjA4MjE4QzguNzA5OTYgNi4xMzEzNCA4LjYxNDk0IDYuMjMyMTIgOC41NzMwOCA2LjM1NzY5TDguMDczMDggNy44NTc2OUM3Ljk5NDQ5IDguMDkzNDYgOC4xMjE5MSA4LjM0ODMxIDguMzU3NjkgOC40MjY5QzguNTkzNDYgOC41MDU0OSA4Ljg0ODMxIDguMzc4MDcgOC45MjY5IDguMTQyMjlMOS4zNjA5IDYuODQwMjlMMTEuNDMyMyA2LjAxMTczWk03LjcxMDUyIDEuNzY2NDhMNi4zNDQ2MiAzLjQ3Mzg2TDQuMDk1MDUgMi43MjRMNC43NzE5MiAxLjAzMTgzTDcuNzEwNTIgMS43NjY0OFpNMTAuMjExNSAxMS43ODg1TDEyLjExNiAxMS4xNTM3TDEyLjc3NDUgOC4xOTAzNEwxMC44ODY0IDkuNzYzNzRMMTAuMjExNSAxMS43ODg1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMjg4NTYgMC43OTY5MDhDNy40MjI1OCAwLjczNDM2NCA3LjU3NzQyIDAuNzM0MzY0IDcuNzExNDQgMC43OTY5MDhMMTMuNzExNCAzLjU5NjkxQzEzLjg4NzUgMy42NzkwNiAxNCAzLjg1NTc0IDE0IDQuMDVWMTAuOTVDMTQgMTEuMTQ0MyAxMy44ODc1IDExLjMyMDkgMTMuNzExNCAxMS40MDMxTDcuNzExNDQgMTQuMjAzMUM3LjU3NzQyIDE0LjI2NTYgNy40MjI1OCAxNC4yNjU2IDcuMjg4NTYgMTQuMjAzMUwxLjI4ODU2IDExLjQwMzFDMS4xMTI1MiAxMS4zMjA5IDEgMTEuMTQ0MyAxIDEwLjk1VjQuMDVDMSAzLjg1NTc0IDEuMTEyNTIgMy42NzkwNiAxLjI4ODU2IDMuNTk2OTFMNy4yODg1NiAwLjc5NjkwOFpNMiA0LjgwNTc4TDcgNi45MzA3OFYxMi45NjQ5TDIgMTAuNjMxNlY0LjgwNTc4Wk04IDEyLjk2NDlMMTMgMTAuNjMxNlY0LjgwNTc4TDggNi45MzA3OFYxMi45NjQ5Wk03LjUgNi4wNTY3MkwxMi4yNzE5IDQuMDI4NjZMNy41IDEuODAxNzZMMi43MjgwOSA0LjAyODY2TDcuNSA2LjA1NjcyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMjkyMjcgMC4wNDg5ODRDMy40NzAzMyAtMC4wMzIzMzggMy42Nzk0NiAtMC4wMDIyODIxNCAzLjgyNzQgMC4xMjU4OTFMMTIuODU4NyA3Ljk1MDI2QzEzLjAxMzQgOC4wODQzMiAxMy4wNzA4IDguMjk5MTYgMTMuMDAzNSA4LjQ5MjUxQzEyLjkzNjIgOC42ODU4NiAxMi43NTc4IDguODE4NjYgMTIuNTUzMyA4LjgyNzY4TDkuMjE4ODcgOC45NzQ3NEwxMS4xNTA0IDEzLjIxODdDMTEuMjY0OCAxMy40NyAxMS4xNTM4IDEzLjc2NjQgMTAuOTAyNiAxMy44ODA4TDguNzUwMjQgMTQuODYxM0M4LjQ5OSAxNC45NzU4IDguMjAyNTUgMTQuODY0OSA4LjA4ODAyIDE0LjYxMzdMNi4xNTMzOSAxMC4zNzAzTDMuODYyNzkgMTIuNzg1NUMzLjcyMTk2IDEyLjkzNCAzLjUwNDg3IDEyLjk4MTcgMy4zMTQ3OSAxMi45MDU5QzMuMTI0NyAxMi44MzAxIDMgMTIuNjQ2MSAzIDEyLjQ0MTRWMC41MDM3OTJDMyAwLjMwODA0OCAzLjExNDIyIDAuMTMwMzA2IDMuMjkyMjcgMC4wNDg5ODRaTTQgMS41OTg1MlYxMS4xODc3TDUuOTM3OTkgOS4xNDQyNUM2LjA1MjM4IDkuMDIzNjMgNi4yMTkyNCA4Ljk2Nzc2IDYuMzgzMTkgOC45OTUxNkM2LjU0NzE1IDkuMDIyNTYgNi42ODY3NyA5LjEyOTY1IDYuNzU1NzMgOS4yODA5TDguNzkwNTYgMTMuNzQ0MUwxMC4wMzMyIDEzLjE3OEw4LjAwMTk1IDguNzE0OTdDNy45MzMxMyA4LjU2Mzc2IDcuOTQzOTEgOC4zODgyNCA4LjAzMDcyIDguMjQ2NTlDOC4xMTc1MyA4LjEwNDk0IDguMjY5MDMgOC4wMTU2NiA4LjQzNSA4LjAwODM0TDExLjI1NDkgNy44ODM5N0w0IDEuNTk4NTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxXZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41IDFDNC4yMjM4NiAxIDQgMS4yMjM4NiA0IDEuNUM0IDEuNzc2MTQgNC4yMjM4NiAyIDQuNSAyQzUuNDIyMTUgMiA2LjAzOTkgMi4yMzA1NCA2LjQyMDc1IDIuNTYzNzlDNi43OTI4NiAyLjg4OTM5IDcgMy4zNjYyNiA3IDRWN0g1Ljc1QzUuNDczODYgNyA1LjI1IDcuMjIzODYgNS4yNSA3LjVDNS4yNSA3Ljc3NjE0IDUuNDczODYgOCA1Ljc1IDhIN1YxMUM3IDExLjYzMzcgNi43OTI4NiAxMi4xMTA2IDYuNDIwNzUgMTIuNDM2MkM2LjAzOTkgMTIuNzY5NSA1LjQyMjE1IDEzIDQuNSAxM0M0LjIyMzg2IDEzIDQgMTMuMjIzOSA0IDEzLjVDNCAxMy43NzYxIDQuMjIzODYgMTQgNC41IDE0QzUuNTc3ODUgMTQgNi40NjAxIDEzLjczMDUgNy4wNzkyNSAxMy4xODg4QzcuMjQxNjggMTMuMDQ2NyA3LjM4MTY5IDEyLjg4OTYgNy41IDEyLjcxOThDNy42MTgzMiAxMi44ODk2IDcuNzU4MzIgMTMuMDQ2NyA3LjkyMDc1IDEzLjE4ODhDOC41Mzk5IDEzLjczMDUgOS40MjIxNSAxNCAxMC41IDE0QzEwLjc3NjEgMTQgMTEgMTMuNzc2MSAxMSAxMy41QzExIDEzLjIyMzkgMTAuNzc2MSAxMyAxMC41IDEzQzkuNTc3ODUgMTMgOC45NjAxIDEyLjc2OTUgOC41NzkyNSAxMi40MzYyQzguMjA3MTQgMTIuMTEwNiA4IDExLjYzMzcgOCAxMVY4SDkuMjVDOS41MjYxNCA4IDkuNzUgNy43NzYxNCA5Ljc1IDcuNUM5Ljc1IDcuMjIzODYgOS41MjYxNCA3IDkuMjUgN0g4VjRDOCAzLjM2NjI2IDguMjA3MTQgMi44ODkzOSA4LjU3OTI1IDIuNTYzNzlDOC45NjAxIDIuMjMwNTQgOS41Nzc4NSAyIDEwLjUgMkMxMC43NzYxIDIgMTEgMS43NzYxNCAxMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxQzkuNDIyMTUgMSA4LjUzOTkgMS4yNjk0NiA3LjkyMDc1IDEuODExMjFDNy43NTgzMiAxLjk1MzMzIDcuNjE4MzIgMi4xMTA0MyA3LjUgMi4yODAyM0M3LjM4MTY4IDIuMTEwNDMgNy4yNDE2OCAxLjk1MzMzIDcuMDc5MjUgMS44MTEyMUM2LjQ2MDEgMS4yNjk0NiA1LjU3Nzg1IDEgNC41IDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx6ZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSA3LjVDNSA3LjIyMzg2IDUuMjIzODYgNyA1LjUgN0g5LjVDOS43NzYxNCA3IDEwIDcuMjIzODYgMTAgNy41QzEwIDcuNzc2MTQgOS43NzYxNCA4IDkuNSA4SDUuNUM1LjIyMzg2IDggNSA3Ljc3NjE0IDUgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sR2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuOCAxTDIuNzQ5NjcgMC45OTk5N0MyLjUyMTIyIDAuOTk5NzUyIDIuMzI0MjkgMC45OTk1NjQgMi4xNDk4MyAxLjA0MTQ1QzEuNjAxMzYgMS4xNzMxMiAxLjE3MzEyIDEuNjAxMzYgMS4wNDE0NSAyLjE0OTgzQzAuOTk5NTY0IDIuMzI0MjkgMC45OTk3NTIgMi41MjEyMiAwLjk5OTk3IDIuNzQ5NjdMMSAyLjhWNS4yTDAuOTk5OTcgNS4yNTAzM0MwLjk5OTc1MiA1LjQ3ODc4IDAuOTk5NTY0IDUuNjc1NzIgMS4wNDE0NSA1Ljg1MDE3QzEuMTczMTIgNi4zOTg2NCAxLjYwMTM2IDYuODI2ODggMi4xNDk4MyA2Ljk1ODU2QzIuMzI0MjkgNy4wMDA0NCAyLjUyMTIyIDcuMDAwMjUgMi43NDk2NyA3LjAwMDAzTDIuOCA3SDUuMkw1LjI1MDMzIDcuMDAwMDNDNS40Nzg3OCA3LjAwMDI1IDUuNjc1NzIgNy4wMDA0NCA1Ljg1MDE3IDYuOTU4NTZDNi4zOTg2NCA2LjgyNjg4IDYuODI2ODggNi4zOTg2NCA2Ljk1ODU2IDUuODUwMTdDNy4wMDA0NCA1LjY3NTcyIDcuMDAwMjUgNS40Nzg3OCA3LjAwMDAzIDUuMjUwMzNMNyA1LjJWMi44TDcuMDAwMDMgMi43NDk2N0M3LjAwMDI1IDIuNTIxMjIgNy4wMDA0NCAyLjMyNDI5IDYuOTU4NTYgMi4xNDk4M0M2LjgyNjg4IDEuNjAxMzYgNi4zOTg2NCAxLjE3MzEyIDUuODUwMTcgMS4wNDE0NUM1LjY3NTcyIDAuOTk5NTY0IDUuNDc4NzggMC45OTk3NTIgNS4yNTAzMyAwLjk5OTk3TDUuMiAxSDIuOFpNMi4zODMyOCAyLjAxMzgyQzIuNDI2MzIgMi4wMDM0OCAyLjQ5MjIyIDIgMi44IDJINS4yQzUuNTA3NzkgMiA1LjU3MzY5IDIuMDAzNDggNS42MTY3MiAyLjAxMzgyQzUuNzk5NTUgMi4wNTc3MSA1Ljk0MjI5IDIuMjAwNDUgNS45ODYxOSAyLjM4MzI4QzUuOTk2NTIgMi40MjYzMiA2IDIuNDkyMjIgNiAyLjhWNS4yQzYgNS41MDc3OSA1Ljk5NjUyIDUuNTczNjkgNS45ODYxOSA1LjYxNjcyQzUuOTQyMjkgNS43OTk1NSA1Ljc5OTU1IDUuOTQyMjkgNS42MTY3MiA1Ljk4NjE5QzUuNTczNjkgNS45OTY1MiA1LjUwNzc5IDYgNS4yIDZIMi44QzIuNDkyMjIgNiAyLjQyNjMyIDUuOTk2NTIgMi4zODMyOCA1Ljk4NjE5QzIuMjAwNDUgNS45NDIyOSAyLjA1NzcxIDUuNzk5NTUgMi4wMTM4MiA1LjYxNjcyQzIuMDAzNDggNS41NzM2OSAyIDUuNTA3NzkgMiA1LjJWMi44QzIgMi40OTIyMiAyLjAwMzQ4IDIuNDI2MzIgMi4wMTM4MiAyLjM4MzI4QzIuMDU3NzEgMi4yMDA0NSAyLjIwMDQ1IDIuMDU3NzEgMi4zODMyOCAyLjAxMzgyWk05LjggMUw5Ljc0OTY3IDAuOTk5OTdDOS41MjEyMiAwLjk5OTc1MiA5LjMyNDI5IDAuOTk5NTY0IDkuMTQ5ODMgMS4wNDE0NUM4LjYwMTM2IDEuMTczMTIgOC4xNzMxMiAxLjYwMTM2IDguMDQxNDUgMi4xNDk4M0M3Ljk5OTU2IDIuMzI0MjkgNy45OTk3NSAyLjUyMTIyIDcuOTk5OTcgMi43NDk2N0w4IDIuOFY1LjJMNy45OTk5NyA1LjI1MDMzQzcuOTk5NzUgNS40Nzg3OCA3Ljk5OTU2IDUuNjc1NzIgOC4wNDE0NSA1Ljg1MDE3QzguMTczMTIgNi4zOTg2NCA4LjYwMTM2IDYuODI2ODggOS4xNDk4MyA2Ljk1ODU2QzkuMzI0MjkgNy4wMDA0NCA5LjUyMTIyIDcuMDAwMjUgOS43NDk2NyA3LjAwMDAzTDkuOCA3SDEyLjJMMTIuMjUwMyA3LjAwMDAzQzEyLjQ3ODggNy4wMDAyNSAxMi42NzU3IDcuMDAwNDQgMTIuODUwMiA2Ljk1ODU2QzEzLjM5ODYgNi44MjY4OCAxMy44MjY5IDYuMzk4NjQgMTMuOTU4NiA1Ljg1MDE3QzE0LjAwMDQgNS42NzU3MiAxNC4wMDAzIDUuNDc4NzggMTQgNS4yNTAzM0wxNCA1LjJWMi44TDE0IDIuNzQ5NjdDMTQuMDAwMyAyLjUyMTIyIDE0LjAwMDQgMi4zMjQyOSAxMy45NTg2IDIuMTQ5ODNDMTMuODI2OSAxLjYwMTM2IDEzLjM5ODYgMS4xNzMxMiAxMi44NTAyIDEuMDQxNDVDMTIuNjc1NyAwLjk5OTU2NCAxMi40Nzg4IDAuOTk5NzUyIDEyLjI1MDMgMC45OTk5N0wxMi4yIDFIOS44Wk05LjM4MzI4IDIuMDEzODJDOS40MjYzMiAyLjAwMzQ4IDkuNDkyMjIgMiA5LjggMkgxMi4yQzEyLjUwNzggMiAxMi41NzM3IDIuMDAzNDggMTIuNjE2NyAyLjAxMzgyQzEyLjc5OTUgMi4wNTc3MSAxMi45NDIzIDIuMjAwNDUgMTIuOTg2MiAyLjM4MzI4QzEyLjk5NjUgMi40MjYzMiAxMyAyLjQ5MjIyIDEzIDIuOFY1LjJDMTMgNS41MDc3OSAxMi45OTY1IDUuNTczNjkgMTIuOTg2MiA1LjYxNjcyQzEyLjk0MjMgNS43OTk1NSAxMi43OTk1IDUuOTQyMjkgMTIuNjE2NyA1Ljk4NjE5QzEyLjU3MzcgNS45OTY1MiAxMi41MDc4IDYgMTIuMiA2SDkuOEM5LjQ5MjIyIDYgOS40MjYzMiA1Ljk5NjUyIDkuMzgzMjggNS45ODYxOUM5LjIwMDQ1IDUuOTQyMjkgOS4wNTc3MSA1Ljc5OTU1IDkuMDEzODIgNS42MTY3MkM5LjAwMzQ4IDUuNTczNjkgOSA1LjUwNzc5IDkgNS4yVjIuOEM5IDIuNDkyMjIgOS4wMDM0OCAyLjQyNjMyIDkuMDEzODIgMi4zODMyOEM5LjA1NzcxIDIuMjAwNDUgOS4yMDA0NSAyLjA1NzcxIDkuMzgzMjggMi4wMTM4MlpNMi43NDk2NyA3Ljk5OTk3TDIuOCA4SDUuMkw1LjI1MDMzIDcuOTk5OTdDNS40Nzg3OCA3Ljk5OTc1IDUuNjc1NzIgNy45OTk1NiA1Ljg1MDE3IDguMDQxNDVDNi4zOTg2NCA4LjE3MzEyIDYuODI2ODggOC42MDEzNiA2Ljk1ODU2IDkuMTQ5ODNDNy4wMDA0NCA5LjMyNDI5IDcuMDAwMjUgOS41MjEyMiA3LjAwMDAzIDkuNzQ5NjdMNyA5LjhWMTIuMkw3LjAwMDAzIDEyLjI1MDNDNy4wMDAyNSAxMi40Nzg4IDcuMDAwNDQgMTIuNjc1NyA2Ljk1ODU2IDEyLjg1MDJDNi44MjY4OCAxMy4zOTg2IDYuMzk4NjQgMTMuODI2OSA1Ljg1MDE3IDEzLjk1ODZDNS42NzU3MiAxNC4wMDA0IDUuNDc4NzggMTQuMDAwMyA1LjI1MDMzIDE0TDUuMiAxNEgyLjhMMi43NDk2NyAxNEMyLjUyMTIyIDE0LjAwMDMgMi4zMjQyOSAxNC4wMDA0IDIuMTQ5ODMgMTMuOTU4NkMxLjYwMTM2IDEzLjgyNjkgMS4xNzMxMiAxMy4zOTg2IDEuMDQxNDUgMTIuODUwMkMwLjk5OTU2NCAxMi42NzU3IDAuOTk5NzUyIDEyLjQ3ODggMC45OTk5NyAxMi4yNTAzTDEgMTIuMlY5LjhMMC45OTk5NyA5Ljc0OTY3QzAuOTk5NzUyIDkuNTIxMjIgMC45OTk1NjQgOS4zMjQyOSAxLjA0MTQ1IDkuMTQ5ODNDMS4xNzMxMiA4LjYwMTM2IDEuNjAxMzYgOC4xNzMxMiAyLjE0OTgzIDguMDQxNDVDMi4zMjQyOSA3Ljk5OTU2IDIuNTIxMjIgNy45OTk3NSAyLjc0OTY3IDcuOTk5OTdaTTIuOCA5QzIuNDkyMjIgOSAyLjQyNjMyIDkuMDAzNDggMi4zODMyOCA5LjAxMzgyQzIuMjAwNDUgOS4wNTc3MSAyLjA1NzcxIDkuMjAwNDUgMi4wMTM4MiA5LjM4MzI4QzIuMDAzNDggOS40MjYzMiAyIDkuNDkyMjIgMiA5LjhWMTIuMkMyIDEyLjUwNzggMi4wMDM0OCAxMi41NzM3IDIuMDEzODIgMTIuNjE2N0MyLjA1NzcxIDEyLjc5OTUgMi4yMDA0NSAxMi45NDIzIDIuMzgzMjggMTIuOTg2MkMyLjQyNjMyIDEyLjk5NjUgMi40OTIyMiAxMyAyLjggMTNINS4yQzUuNTA3NzkgMTMgNS41NzM2OSAxMi45OTY1IDUuNjE2NzIgMTIuOTg2MkM1Ljc5OTU1IDEyLjk0MjMgNS45NDIyOSAxMi43OTk1IDUuOTg2MTkgMTIuNjE2N0M1Ljk5NjUyIDEyLjU3MzcgNiAxMi41MDc4IDYgMTIuMlY5LjhDNiA5LjQ5MjIyIDUuOTk2NTIgOS40MjYzMiA1Ljk4NjE5IDkuMzgzMjhDNS45NDIyOSA5LjIwMDQ1IDUuNzk5NTUgOS4wNTc3MSA1LjYxNjcyIDkuMDEzODJDNS41NzM2OSA5LjAwMzQ4IDUuNTA3NzkgOSA1LjIgOUgyLjhaTTkuOCA4TDkuNzQ5NjcgNy45OTk5N0M5LjUyMTIyIDcuOTk5NzUgOS4zMjQyOSA3Ljk5OTU2IDkuMTQ5ODMgOC4wNDE0NUM4LjYwMTM2IDguMTczMTIgOC4xNzMxMiA4LjYwMTM2IDguMDQxNDUgOS4xNDk4M0M3Ljk5OTU2IDkuMzI0MjkgNy45OTk3NSA5LjUyMTIyIDcuOTk5OTcgOS43NDk2N0w4IDkuOFYxMi4yTDcuOTk5OTcgMTIuMjUwM0M3Ljk5OTc1IDEyLjQ3ODggNy45OTk1NiAxMi42NzU3IDguMDQxNDUgMTIuODUwMkM4LjE3MzEyIDEzLjM5ODYgOC42MDEzNiAxMy44MjY5IDkuMTQ5ODMgMTMuOTU4NkM5LjMyNDI5IDE0LjAwMDQgOS41MjEyMiAxNC4wMDAzIDkuNzQ5NjcgMTRMOS44IDE0SDEyLjJMMTIuMjUwMyAxNEMxMi40Nzg4IDE0LjAwMDMgMTIuNjc1NyAxNC4wMDA0IDEyLjg1MDIgMTMuOTU4NkMxMy4zOTg2IDEzLjgyNjkgMTMuODI2OSAxMy4zOTg2IDEzLjk1ODYgMTIuODUwMkMxNC4wMDA0IDEyLjY3NTcgMTQuMDAwMyAxMi40Nzg4IDE0IDEyLjI1MDNMMTQgMTIuMlY5LjhMMTQgOS43NDk2N0MxNC4wMDAzIDkuNTIxMjIgMTQuMDAwNCA5LjMyNDI5IDEzLjk1ODYgOS4xNDk4M0MxMy44MjY5IDguNjAxMzYgMTMuMzk4NiA4LjE3MzEyIDEyLjg1MDIgOC4wNDE0NUMxMi42NzU3IDcuOTk5NTYgMTIuNDc4OCA3Ljk5OTc1IDEyLjI1MDMgNy45OTk5N0wxMi4yIDhIOS44Wk05LjM4MzI4IDkuMDEzODJDOS40MjYzMiA5LjAwMzQ4IDkuNDkyMjIgOSA5LjggOUgxMi4yQzEyLjUwNzggOSAxMi41NzM3IDkuMDAzNDggMTIuNjE2NyA5LjAxMzgyQzEyLjc5OTUgOS4wNTc3MSAxMi45NDIzIDkuMjAwNDUgMTIuOTg2MiA5LjM4MzI4QzEyLjk5NjUgOS40MjYzMiAxMyA5LjQ5MjIyIDEzIDkuOFYxMi4yQzEzIDEyLjUwNzggMTIuOTk2NSAxMi41NzM3IDEyLjk4NjIgMTIuNjE2N0MxMi45NDIzIDEyLjc5OTUgMTIuNzk5NSAxMi45NDIzIDEyLjYxNjcgMTIuOTg2MkMxMi41NzM3IDEyLjk5NjUgMTIuNTA3OCAxMyAxMi4yIDEzSDkuOEM5LjQ5MjIyIDEzIDkuNDI2MzIgMTIuOTk2NSA5LjM4MzI4IDEyLjk4NjJDOS4yMDA0NSAxMi45NDIzIDkuMDU3NzEgMTIuNzk5NSA5LjAxMzgyIDEyLjYxNjdDOS4wMDM0OCAxMi41NzM3IDkgMTIuNTA3OCA5IDEyLjJWOS44QzkgOS40OTIyMiA5LjAwMzQ4IDkuNDI2MzIgOS4wMTM4MiA5LjM4MzI4QzkuMDU3NzEgOS4yMDA0NSA5LjIwMDQ1IDkuMDU3NzEgOS4zODMyOCA5LjAxMzgyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMDAwMTQgMi43Mzg5NUMzLjAwMDE0IDIuOTQ2OTggMi43NjA4NyAzLjA2NDAxIDIuNTk2NjYgMi45MzYyOEwxLjAwMzg2IDEuNjk3NDRDMC44NzUxNzcgMS41OTczNSAwLjg3NTE3NyAxLjQwMjg2IDEuMDAzODYgMS4zMDI3N0wyLjU5NjY2IDAuMDYzOTI4QzIuNzYwODcgLTAuMDYzNzk0NCAzLjAwMDE0IDAuMDUzMjI5MyAzLjAwMDE0IDAuMjYxMjY2VjEuMDAwMTJIOS4wMDAwOVYwLjI2MTI5NkM5LjAwMDA5IDAuMDUzMjU5MSA5LjIzOTM2IC0wLjA2Mzc2NDYgOS40MDM1OCAwLjA2Mzk1NzhMMTAuOTk2NCAxLjMwMjhDMTEuMTI1MSAxLjQwMjg5IDExLjEyNTEgMS41OTczOCAxMC45OTY0IDEuNjk3NDdMOS40MDM1OCAyLjkzNjMxQzkuMjM5MzYgMy4wNjQwNCA5LjAwMDA5IDIuOTQ3MDEgOS4wMDAwOSAyLjczODk4VjIuMDAwMTJIMy4wMDAxNFYyLjczODk1Wk05LjUwMDAyIDQuOTk5OThIMi41MDAwMkMyLjIyMzg4IDQuOTk5OTggMi4wMDAwMiA1LjIyMzg0IDIuMDAwMDIgNS40OTk5OFYxMi41QzIuMDAwMDIgMTIuNzc2MSAyLjIyMzg4IDEzIDIuNTAwMDIgMTNIOS41MDAwMkM5Ljc3NjE2IDEzIDEwIDEyLjc3NjEgMTAgMTIuNVY1LjQ5OTk4QzEwIDUuMjIzODQgOS43NzYxNiA0Ljk5OTk4IDkuNTAwMDIgNC45OTk5OFpNMi41MDAwMiAzLjk5OTk4QzEuNjcxNTkgMy45OTk5OCAxLjAwMDAyIDQuNjcxNTYgMS4wMDAwMiA1LjQ5OTk4VjEyLjVDMS4wMDAwMiAxMy4zMjg0IDEuNjcxNTkgMTQgMi41MDAwMiAxNEg5LjUwMDAyQzEwLjMyODQgMTQgMTEgMTMuMzI4NCAxMSAxMi41VjUuNDk5OThDMTEgNC42NzE1NiAxMC4zMjg0IDMuOTk5OTggOS41MDAwMiAzLjk5OTk4SDIuNTAwMDJaTTE0LjczODkgNi4wMDAwMUgxNFYxMkgxNC43Mzg5QzE0Ljk0NjkgMTIgMTUuMDY0IDEyLjIzOTMgMTQuOTM2MiAxMi40MDM1TDEzLjY5NzQgMTMuOTk2M0MxMy41OTczIDE0LjEyNSAxMy40MDI4IDE0LjEyNSAxMy4zMDI3IDEzLjk5NjNMMTIuMDYzOSAxMi40MDM1QzExLjkzNjIgMTIuMjM5MyAxMi4wNTMyIDEyIDEyLjI2MTIgMTJIMTNWNi4wMDAwMUgxMi4yNjEyQzEyLjA1MzIgNi4wMDAwMSAxMS45MzYxIDUuNzYwNzQgMTIuMDYzOSA1LjU5NjUzTDEzLjMwMjcgNC4wMDM3M0MxMy40MDI4IDMuODc1MDUgMTMuNTk3MyAzLjg3NTA1IDEzLjY5NzQgNC4wMDM3NEwxNC45MzYyIDUuNTk2NTNDMTUuMDYzOSA1Ljc2MDc0IDE0Ljk0NjkgNi4wMDAwMSAxNC43Mzg5IDYuMDAwMDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxZZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3NzA3NUMzLjg0MjIyIDAuODc3MDc1IDAuODc3MDc1IDMuODQyMjIgMC44NzcwNzUgNy40OTk5MUMwLjg3NzA3NSAxMS4xNTc2IDMuODQyMjIgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMTEuMTU3NiAxNC4xMjI3IDE0LjEyMjcgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTFDMTQuMTIyNyAzLjg0MjIyIDExLjE1NzYgMC44NzcwNzUgNy40OTk5MSAwLjg3NzA3NVpNMS44MjcwOCA3LjQ5OTkxQzEuODI3MDggNC4zNjY4OSA0LjM2Njg5IDEuODI3MDcgNy40OTk5MSAxLjgyNzA3QzEwLjYzMjkgMS44MjcwNyAxMy4xNzI3IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxQzEzLjE3MjcgMTAuNjMyOSAxMC42MzI5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzQuMzY2ODkgMTMuMTcyNyAxLjgyNzA4IDEwLjYzMjkgMS44MjcwOCA3LjQ5OTkxWk04LjM3Mjg3IDcuNTAwMDZDOC4zNzI4NyA3Ljk4MTk2IDcuOTgyMjEgOC4zNzI2MyA3LjUwMDMgOC4zNzI2M0M3LjAxODM5IDguMzcyNjMgNi42Mjc3MyA3Ljk4MTk2IDYuNjI3NzMgNy41MDAwNkM2LjYyNzczIDcuMDE4MTUgNy4wMTgzOSA2LjYyNzQ4IDcuNTAwMyA2LjYyNzQ4QzcuOTgyMjEgNi42Mjc0OCA4LjM3Mjg3IDcuMDE4MTUgOC4zNzI4NyA3LjUwMDA2Wk05LjMyMjg3IDcuNTAwMDZDOS4zMjI4NyA4LjUwNjY0IDguNTA2ODggOS4zMjI2MyA3LjUwMDMgOS4zMjI2M0M2LjQ5MzcyIDkuMzIyNjMgNS42Nzc3MyA4LjUwNjY0IDUuNjc3NzMgNy41MDAwNkM1LjY3NzczIDYuNDkzNDggNi40OTM3MiA1LjY3NzQ4IDcuNTAwMyA1LjY3NzQ4QzguNTA2ODggNS42Nzc0OCA5LjMyMjg3IDYuNDkzNDggOS4zMjI4NyA3LjUwMDA2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sS2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgNy41QzIgNy4yMjM4NiAyLjIyMzg2IDcgMi41IDdIMTIuNUMxMi43NzYxIDcgMTMgNy4yMjM4NiAxMyA3LjVDMTMgNy43NzYxNCAxMi43NzYxIDggMTIuNSA4SDIuNUMyLjIyMzg2IDggMiA3Ljc3NjE0IDIgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAyQzcuNzc2MTQgMiA4IDIuMjIzODYgOCAyLjVMOCAxMi41QzggMTIuNzc2MSA3Ljc3NjE0IDEzIDcuNSAxM0M3LjIyMzg2IDEzIDcgMTIuNzc2MSA3IDEyLjVMNyAyLjVDNyAyLjIyMzg2IDcuMjIzODYgMiA3LjUgMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEplPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgOS4xMjVDOC4zOTc0NiA5LjEyNSA5LjEyNSA4LjM5NzQ2IDkuMTI1IDcuNUM5LjEyNSA2LjYwMjU0IDguMzk3NDYgNS44NzUgNy41IDUuODc1QzYuNjAyNTQgNS44NzUgNS44NzUgNi42MDI1NCA1Ljg3NSA3LjVDNS44NzUgOC4zOTc0NiA2LjYwMjU0IDkuMTI1IDcuNSA5LjEyNVpNNy41IDEwLjEyNUM4Ljk0OTc1IDEwLjEyNSAxMC4xMjUgOC45NDk3NSAxMC4xMjUgNy41QzEwLjEyNSA2LjA1MDI1IDguOTQ5NzUgNC44NzUgNy41IDQuODc1QzYuMDUwMjUgNC44NzUgNC44NzUgNi4wNTAyNSA0Ljg3NSA3LjVDNC44NzUgOC45NDk3NSA2LjA1MDI1IDEwLjEyNSA3LjUgMTAuMTI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuODc1IDcuNUM5Ljg3NSA4LjgxMTY4IDguODExNjggOS44NzUgNy41IDkuODc1QzYuMTg4MzIgOS44NzUgNS4xMjUgOC44MTE2OCA1LjEyNSA3LjVDNS4xMjUgNi4xODgzMiA2LjE4ODMyIDUuMTI1IDcuNSA1LjEyNUM4LjgxMTY4IDUuMTI1IDkuODc1IDYuMTg4MzIgOS44NzUgNy41WlwiLGZpbGw6bn0pKX0sZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjI1IDcuNUMzLjYyNSA4LjEyMTMyIDMuMTIxMzIgOC42MjUgMi41IDguNjI1QzEuODc4NjggOC42MjUgMS4zNzUgOC4xMjEzMiAxLjM3NSA3LjVDMS4zNzUgNi44Nzg2OCAxLjg3ODY4IDYuMzc1IDIuNSA2LjM3NUMzLjEyMTMyIDYuMzc1IDMuNjI1IDYuODc4NjggMy42MjUgNy41Wk04LjYyNSA3LjVDOC42MjUgOC4xMjEzMiA4LjEyMTMyIDguNjI1IDcuNSA4LjYyNUM2Ljg3ODY4IDguNjI1IDYuMzc1IDguMTIxMzIgNi4zNzUgNy41QzYuMzc1IDYuODc4NjggNi44Nzg2OCA2LjM3NSA3LjUgNi4zNzVDOC4xMjEzMiA2LjM3NSA4LjYyNSA2Ljg3ODY4IDguNjI1IDcuNVpNMTIuNSA4LjYyNUMxMy4xMjEzIDguNjI1IDEzLjYyNSA4LjEyMTMyIDEzLjYyNSA3LjVDMTMuNjI1IDYuODc4NjggMTMuMTIxMyA2LjM3NSAxMi41IDYuMzc1QzExLjg3ODcgNi4zNzUgMTEuMzc1IDYuODc4NjggMTEuMzc1IDcuNUMxMS4zNzUgOC4xMjEzMiAxMS44Nzg3IDguNjI1IDEyLjUgOC42MjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx0dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC42MjUgMi41QzguNjI1IDMuMTIxMzIgOC4xMjEzMiAzLjYyNSA3LjUgMy42MjVDNi44Nzg2OCAzLjYyNSA2LjM3NSAzLjEyMTMyIDYuMzc1IDIuNUM2LjM3NSAxLjg3ODY4IDYuODc4NjggMS4zNzUgNy41IDEuMzc1QzguMTIxMzIgMS4zNzUgOC42MjUgMS44Nzg2OCA4LjYyNSAyLjVaTTguNjI1IDcuNUM4LjYyNSA4LjEyMTMyIDguMTIxMzIgOC42MjUgNy41IDguNjI1QzYuODc4NjggOC42MjUgNi4zNzUgOC4xMjEzMiA2LjM3NSA3LjVDNi4zNzUgNi44Nzg2OCA2Ljg3ODY4IDYuMzc1IDcuNSA2LjM3NUM4LjEyMTMyIDYuMzc1IDguNjI1IDYuODc4NjggOC42MjUgNy41Wk03LjUgMTMuNjI1QzguMTIxMzIgMTMuNjI1IDguNjI1IDEzLjEyMTMgOC42MjUgMTIuNUM4LjYyNSAxMS44Nzg3IDguMTIxMzIgMTEuMzc1IDcuNSAxMS4zNzVDNi44Nzg2OCAxMS4zNzUgNi4zNzUgMTEuODc4NyA2LjM3NSAxMi41QzYuMzc1IDEzLjEyMTMgNi44Nzg2OCAxMy42MjUgNy41IDEzLjYyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG50PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjg1MzU1IDIuMTQ2NDVDMy42NTgyOSAxLjk1MTE4IDMuMzQxNzEgMS45NTExOCAzLjE0NjQ1IDIuMTQ2NDVDMi45NTExOCAyLjM0MTcxIDIuOTUxMTggMi42NTgyOSAzLjE0NjQ1IDIuODUzNTVMNy4xNDY0NSA2Ljg1MzU1QzcuMzQxNzEgNy4wNDg4MiA3LjY1ODI5IDcuMDQ4ODIgNy44NTM1NSA2Ljg1MzU1TDExLjg1MzYgMi44NTM1NUMxMi4wNDg4IDIuNjU4MjkgMTIuMDQ4OCAyLjM0MTcxIDExLjg1MzYgMi4xNDY0NUMxMS42NTgzIDEuOTUxMTggMTEuMzQxNyAxLjk1MTE4IDExLjE0NjQgMi4xNDY0NUw3LjUgNS43OTI4OUwzLjg1MzU1IDIuMTQ2NDVaTTMuODUzNTUgOC4xNDY0NUMzLjY1ODI5IDcuOTUxMTggMy4zNDE3MSA3Ljk1MTE4IDMuMTQ2NDUgOC4xNDY0NUMyLjk1MTE4IDguMzQxNzEgMi45NTExOCA4LjY1ODI5IDMuMTQ2NDUgOC44NTM1NUw3LjE0NjQ1IDEyLjg1MzZDNy4zNDE3MSAxMy4wNDg4IDcuNjU4MjkgMTMuMDQ4OCA3Ljg1MzU1IDEyLjg1MzZMMTEuODUzNiA4Ljg1MzU1QzEyLjA0ODggOC42NTgyOSAxMi4wNDg4IDguMzQxNzEgMTEuODUzNiA4LjE0NjQ1QzExLjY1ODMgNy45NTExOCAxMS4zNDE3IDcuOTUxMTggMTEuMTQ2NCA4LjE0NjQ1TDcuNSAxMS43OTI5TDMuODUzNTUgOC4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljg1MzU1IDMuODUzNTVDNy4wNDg4MiAzLjY1ODI5IDcuMDQ4ODIgMy4zNDE3MSA2Ljg1MzU1IDMuMTQ2NDVDNi42NTgyOSAyLjk1MTE4IDYuMzQxNzEgMi45NTExOCA2LjE0NjQ1IDMuMTQ2NDVMMi4xNDY0NSA3LjE0NjQ1QzEuOTUxMTggNy4zNDE3MSAxLjk1MTE4IDcuNjU4MjkgMi4xNDY0NSA3Ljg1MzU1TDYuMTQ2NDUgMTEuODUzNkM2LjM0MTcxIDEyLjA0ODggNi42NTgyOSAxMi4wNDg4IDYuODUzNTUgMTEuODUzNkM3LjA0ODgyIDExLjY1ODMgNy4wNDg4MiAxMS4zNDE3IDYuODUzNTUgMTEuMTQ2NEwzLjIwNzExIDcuNUw2Ljg1MzU1IDMuODUzNTVaTTEyLjg1MzYgMy44NTM1NUMxMy4wNDg4IDMuNjU4MjkgMTMuMDQ4OCAzLjM0MTcxIDEyLjg1MzYgMy4xNDY0NUMxMi42NTgzIDIuOTUxMTggMTIuMzQxNyAyLjk1MTE4IDEyLjE0NjQgMy4xNDY0NUw4LjE0NjQ1IDcuMTQ2NDVDNy45NTExOCA3LjM0MTcxIDcuOTUxMTggNy42NTgyOSA4LjE0NjQ1IDcuODUzNTVMMTIuMTQ2NCAxMS44NTM2QzEyLjM0MTcgMTIuMDQ4OCAxMi42NTgzIDEyLjA0ODggMTIuODUzNiAxMS44NTM2QzEzLjA0ODggMTEuNjU4MyAxMy4wNDg4IDExLjM0MTcgMTIuODUzNiAxMS4xNDY0TDkuMjA3MTEgNy41TDEyLjg1MzYgMy44NTM1NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG90PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjE0NjQ1IDExLjE0NjRDMS45NTExOCAxMS4zNDE3IDEuOTUxMTggMTEuNjU4MyAyLjE0NjQ1IDExLjg1MzZDMi4zNDE3MSAxMi4wNDg4IDIuNjU4MjkgMTIuMDQ4OCAyLjg1MzU1IDExLjg1MzZMNi44NTM1NSA3Ljg1MzU1QzcuMDQ4ODIgNy42NTgyOSA3LjA0ODgyIDcuMzQxNzEgNi44NTM1NSA3LjE0NjQ1TDIuODUzNTUgMy4xNDY0NUMyLjY1ODI5IDIuOTUxMTggMi4zNDE3MSAyLjk1MTE4IDIuMTQ2NDUgMy4xNDY0NUMxLjk1MTE4IDMuMzQxNzEgMS45NTExOCAzLjY1ODI5IDIuMTQ2NDUgMy44NTM1NUw1Ljc5Mjg5IDcuNUwyLjE0NjQ1IDExLjE0NjRaTTguMTQ2NDUgMTEuMTQ2NEM3Ljk1MTE4IDExLjM0MTcgNy45NTExOCAxMS42NTgzIDguMTQ2NDUgMTEuODUzNkM4LjM0MTcxIDEyLjA0ODggOC42NTgyOSAxMi4wNDg4IDguODUzNTUgMTEuODUzNkwxMi44NTM2IDcuODUzNTVDMTMuMDQ4OCA3LjY1ODI5IDEzLjA0ODggNy4zNDE3MSAxMi44NTM2IDcuMTQ2NDVMOC44NTM1NSAzLjE0NjQ1QzguNjU4MjkgMi45NTExOCA4LjM0MTcxIDIuOTUxMTggOC4xNDY0NSAzLjE0NjQ1QzcuOTUxMTggMy4zNDE3MSA3Ljk1MTE4IDMuNjU4MjkgOC4xNDY0NSAzLjg1MzU1TDExLjc5MjkgNy41TDguMTQ2NDUgMTEuMTQ2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGl0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS4xNDY0IDYuODUzNTVDMTEuMzQxNyA3LjA0ODgyIDExLjY1ODMgNy4wNDg4MiAxMS44NTM2IDYuODUzNTVDMTIuMDQ4OCA2LjY1ODI5IDEyLjA0ODggNi4zNDE3MSAxMS44NTM2IDYuMTQ2NDVMNy44NTM1NSAyLjE0NjQ1QzcuNjU4MjkgMS45NTExOCA3LjM0MTcxIDEuOTUxMTggNy4xNDY0NSAyLjE0NjQ1TDMuMTQ2NDUgNi4xNDY0NUMyLjk1MTE4IDYuMzQxNzEgMi45NTExOCA2LjY1ODI5IDMuMTQ2NDUgNi44NTM1NUMzLjM0MTcxIDcuMDQ4ODIgMy42NTgyOSA3LjA0ODgyIDMuODUzNTUgNi44NTM1NUw3LjUgMy4yMDcxMUwxMS4xNDY0IDYuODUzNTVaTTExLjE0NjQgMTIuODUzNkMxMS4zNDE3IDEzLjA0ODggMTEuNjU4MyAxMy4wNDg4IDExLjg1MzYgMTIuODUzNkMxMi4wNDg4IDEyLjY1ODMgMTIuMDQ4OCAxMi4zNDE3IDExLjg1MzYgMTIuMTQ2NEw3Ljg1MzU1IDguMTQ2NDVDNy42NTgyOSA3Ljk1MTE4IDcuMzQxNzEgNy45NTExOCA3LjE0NjQ1IDguMTQ2NDVMMy4xNDY0NSAxMi4xNDY0QzIuOTUxMTggMTIuMzQxNyAyLjk1MTE4IDEyLjY1ODMgMy4xNDY0NSAxMi44NTM2QzMuMzQxNzEgMTMuMDQ4OCAzLjY1ODI5IDEzLjA0ODggMy44NTM1NSAxMi44NTM2TDcuNSA5LjIwNzExTDExLjE0NjQgMTIuODUzNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGF0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUwMDA1IDEuMDQ5OTlDNy43NDg1OCAxLjA0OTk5IDcuOTUwMDUgMS4yNTE0NiA3Ljk1MDA1IDEuNDk5OTlWOC40MTM1OUwxMC4xODE5IDYuMTgxNzlDMTAuMzU3NiA2LjAwNjA1IDEwLjY0MjUgNi4wMDYwNSAxMC44MTgyIDYuMTgxNzlDMTAuOTk0IDYuMzU3NTMgMTAuOTk0IDYuNjQyNDUgMTAuODE4MiA2LjgxODE5TDcuODE4MjUgOS44MTgxOUM3LjY0MjUxIDkuOTkzOTIgNy4zNTc1OSA5Ljk5MzkyIDcuMTgxODUgOS44MTgxOUw0LjE4MTg1IDYuODE4MTlDNC4wMDYxMSA2LjY0MjQ1IDQuMDA2MTEgNi4zNTc1MyA0LjE4MTg1IDYuMTgxNzlDNC4zNTc1OSA2LjAwNjA1IDQuNjQyNTEgNi4wMDYwNSA0LjgxODI1IDYuMTgxNzlMNy4wNTAwNSA4LjQxMzU5VjEuNDk5OTlDNy4wNTAwNSAxLjI1MTQ2IDcuMjUxNTIgMS4wNDk5OSA3LjUwMDA1IDEuMDQ5OTlaTTIuNSAxMEMyLjc3NjE0IDEwIDMgMTAuMjIzOSAzIDEwLjVWMTJDMyAxMi41NTM5IDMuNDQ1NjUgMTMgMy45OTYzNSAxM0gxMS4wMDEyQzExLjU1MjkgMTMgMTIgMTIuNTUyOCAxMiAxMlYxMC41QzEyIDEwLjIyMzkgMTIuMjIzOSAxMCAxMi41IDEwQzEyLjc3NjEgMTAgMTMgMTAuMjIzOSAxMyAxMC41VjEyQzEzIDEzLjEwNDEgMTIuMTA2MiAxNCAxMS4wMDEyIDE0SDMuOTk2MzVDMi44OTAxOSAxNCAyIDEzLjEwMyAyIDEyVjEwLjVDMiAxMC4yMjM5IDIuMjIzODYgMTAgMi41IDEwWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNC41XCIsY3k6XCIyLjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNC41XCIsY3k6XCI0LjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNC41XCIsY3k6XCI2LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI0LjVcIixjeTpcIjguNDk5XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiMTAuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiMTIuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjYuNVwiLGN5OlwiMi41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjYuNVwiLGN5OlwiNC41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjYuNVwiLGN5OlwiNi40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNi41XCIsY3k6XCI4LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjEwLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjEyLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiMi41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjguNDk5XCIsY3k6XCI0LjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiOC40OTlcIixjeTpcIjYuNDk5XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjguNDk5XCIsY3k6XCI4LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiMTAuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjguNDk5XCIsY3k6XCIxMi40OThcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiMTAuNDk5XCIsY3k6XCIyLjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiMTAuNDk5XCIsY3k6XCI0LjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiMTAuNDk5XCIsY3k6XCI2LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCIxMC40OTlcIixjeTpcIjguNDk5XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiMTAuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiMTIuNDk4XCIscjpcIi42XCIsZmlsbDpufSkpfSxzdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS41IDQuNjI1QzYuMTIxMzIgNC42MjUgNi42MjUgNC4xMjEzMiA2LjYyNSAzLjVDNi42MjUgMi44Nzg2OCA2LjEyMTMyIDIuMzc1IDUuNSAyLjM3NUM0Ljg3ODY4IDIuMzc1IDQuMzc1IDIuODc4NjggNC4zNzUgMy41QzQuMzc1IDQuMTIxMzIgNC44Nzg2OCA0LjYyNSA1LjUgNC42MjVaTTkuNSA0LjYyNUMxMC4xMjEzIDQuNjI1IDEwLjYyNSA0LjEyMTMyIDEwLjYyNSAzLjVDMTAuNjI1IDIuODc4NjggMTAuMTIxMyAyLjM3NSA5LjUgMi4zNzVDOC44Nzg2OCAyLjM3NSA4LjM3NSAyLjg3ODY4IDguMzc1IDMuNUM4LjM3NSA0LjEyMTMyIDguODc4NjggNC42MjUgOS41IDQuNjI1Wk0xMC42MjUgNy41QzEwLjYyNSA4LjEyMTMyIDEwLjEyMTMgOC42MjUgOS41IDguNjI1QzguODc4NjggOC42MjUgOC4zNzUgOC4xMjEzMiA4LjM3NSA3LjVDOC4zNzUgNi44Nzg2OCA4Ljg3ODY4IDYuMzc1IDkuNSA2LjM3NUMxMC4xMjEzIDYuMzc1IDEwLjYyNSA2Ljg3ODY4IDEwLjYyNSA3LjVaTTUuNSA4LjYyNUM2LjEyMTMyIDguNjI1IDYuNjI1IDguMTIxMzIgNi42MjUgNy41QzYuNjI1IDYuODc4NjggNi4xMjEzMiA2LjM3NSA1LjUgNi4zNzVDNC44Nzg2OCA2LjM3NSA0LjM3NSA2Ljg3ODY4IDQuMzc1IDcuNUM0LjM3NSA4LjEyMTMyIDQuODc4NjggOC42MjUgNS41IDguNjI1Wk0xMC42MjUgMTEuNUMxMC42MjUgMTIuMTIxMyAxMC4xMjEzIDEyLjYyNSA5LjUgMTIuNjI1QzguODc4NjggMTIuNjI1IDguMzc1IDEyLjEyMTMgOC4zNzUgMTEuNUM4LjM3NSAxMC44Nzg3IDguODc4NjggMTAuMzc1IDkuNSAxMC4zNzVDMTAuMTIxMyAxMC4zNzUgMTAuNjI1IDEwLjg3ODcgMTAuNjI1IDExLjVaTTUuNSAxMi42MjVDNi4xMjEzMiAxMi42MjUgNi42MjUgMTIuMTIxMyA2LjYyNSAxMS41QzYuNjI1IDEwLjg3ODcgNi4xMjEzMiAxMC4zNzUgNS41IDEwLjM3NUM0Ljg3ODY4IDEwLjM3NSA0LjM3NSAxMC44Nzg3IDQuMzc1IDExLjVDNC4zNzUgMTIuMTIxMyA0Ljg3ODY4IDEyLjYyNSA1LjUgMTIuNjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuNDk5OTggNC4wOTk5OEMyLjI3OTA2IDQuMDk5OTggMi4wOTk5OCA0LjI3OTA2IDIuMDk5OTggNC40OTk5OEMyLjA5OTk4IDQuNzIwODkgMi4yNzkwNiA0Ljg5OTk4IDIuNDk5OTggNC44OTk5OEgxMi41QzEyLjcyMDkgNC44OTk5OCAxMi45IDQuNzIwODkgMTIuOSA0LjQ5OTk4QzEyLjkgNC4yNzkwNiAxMi43MjA5IDQuMDk5OTggMTIuNSA0LjA5OTk4SDIuNDk5OThaTTIuNDk5OTggNi4wOTk5OEMyLjI3OTA2IDYuMDk5OTggMi4wOTk5OCA2LjI3OTA2IDIuMDk5OTggNi40OTk5OEMyLjA5OTk4IDYuNzIwODkgMi4yNzkwNiA2Ljg5OTk4IDIuNDk5OTggNi44OTk5OEgxMi41QzEyLjcyMDkgNi44OTk5OCAxMi45IDYuNzIwODkgMTIuOSA2LjQ5OTk4QzEyLjkgNi4yNzkwNiAxMi43MjA5IDYuMDk5OTggMTIuNSA2LjA5OTk4SDIuNDk5OThaTTIuMDk5OTggOC40OTk5OEMyLjA5OTk4IDguMjc5MDYgMi4yNzkwNiA4LjA5OTk4IDIuNDk5OTggOC4wOTk5OEgxMi41QzEyLjcyMDkgOC4wOTk5OCAxMi45IDguMjc5MDYgMTIuOSA4LjQ5OTk4QzEyLjkgOC43MjA4OSAxMi43MjA5IDguODk5OTggMTIuNSA4Ljg5OTk4SDIuNDk5OThDMi4yNzkwNiA4Ljg5OTk4IDIuMDk5OTggOC43MjA4OSAyLjA5OTk4IDguNDk5OThaTTIuNDk5OTggMTAuMUMyLjI3OTA2IDEwLjEgMi4wOTk5OCAxMC4yNzkxIDIuMDk5OTggMTAuNUMyLjA5OTk4IDEwLjcyMDkgMi4yNzkwNiAxMC45IDIuNDk5OTggMTAuOUgxMi41QzEyLjcyMDkgMTAuOSAxMi45IDEwLjcyMDkgMTIuOSAxMC41QzEyLjkgMTAuMjc5MSAxMi43MjA5IDEwLjEgMTIuNSAxMC4xSDIuNDk5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC4wOTk5OCAxMi41QzQuMDk5OTggMTIuNzIwOSA0LjI3OTA2IDEyLjkgNC40OTk5OCAxMi45QzQuNzIwODkgMTIuOSA0Ljg5OTk4IDEyLjcyMDkgNC44OTk5OCAxMi41TDQuODk5OTggMi41MDAwMkM0Ljg5OTk4IDIuMjc5MTEgNC43MjA4OSAyLjEwMDAzIDQuNDk5OTggMi4xMDAwM0M0LjI3OTA2IDIuMTAwMDMgNC4wOTk5OCAyLjI3OTExIDQuMDk5OTggMi41MDAwMkw0LjA5OTk4IDEyLjVaTTYuMDk5OTggMTIuNUM2LjA5OTk4IDEyLjcyMDkgNi4yNzkwNiAxMi45IDYuNDk5OTggMTIuOUM2LjcyMDg5IDEyLjkgNi44OTk5OCAxMi43MjA5IDYuODk5OTggMTIuNUw2Ljg5OTk4IDIuNTAwMDJDNi44OTk5OCAyLjI3OTExIDYuNzIwODkgMi4xMDAwMyA2LjQ5OTk4IDIuMTAwMDNDNi4yNzkwNiAyLjEwMDAzIDYuMDk5OTggMi4yNzkxMSA2LjA5OTk4IDIuNTAwMDJMNi4wOTk5OCAxMi41Wk04LjQ5OTk4IDEyLjlDOC4yNzkwNiAxMi45IDguMDk5OTggMTIuNzIwOSA4LjA5OTk4IDEyLjVMOC4wOTk5OCAyLjUwMDAyQzguMDk5OTggMi4yNzkxMSA4LjI3OTA2IDIuMTAwMDIgOC40OTk5OCAyLjEwMDAyQzguNzIwODkgMi4xMDAwMiA4Ljg5OTk4IDIuMjc5MTEgOC44OTk5OCAyLjUwMDAyTDguODk5OTggMTIuNUM4Ljg5OTk4IDEyLjcyMDkgOC43MjA4OSAxMi45IDguNDk5OTggMTIuOVpNMTAuMSAxMi41QzEwLjEgMTIuNzIwOSAxMC4yNzkxIDEyLjkgMTAuNSAxMi45QzEwLjcyMDkgMTIuOSAxMC45IDEyLjcyMDkgMTAuOSAxMi41TDEwLjkgMi41MDAwMkMxMC45IDIuMjc5MTEgMTAuNzIwOSAyLjEwMDAyIDEwLjUgMi4xMDAwMkMxMC4yNzkxIDIuMTAwMDIgMTAuMSAyLjI3OTExIDEwLjEgMi41MDAwMkwxMC4xIDEyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxmdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuMzI4NSAxLjEzNjA3QzEwLjEzMzIgMC45NDA4MDkgOS44MTY2MiAwLjk0MDgwOCA5LjYyMTM2IDEuMTM2MDdDOS40MjYwOSAxLjMzMTMzIDkuNDI2MDkgMS42NDc5MiA5LjYyMTM2IDEuODQzMThMMTAuMjc0NCAyLjQ5NjE5TDUuNDI1NjMgNi4xMzI3NEw0LjMxODA1IDUuMDI1MTZDNC4xMjI3OSA0LjgyOTkgMy44MDYyMSA0LjgyOTkgMy42MTA5NSA1LjAyNTE2QzMuNDE1NjkgNS4yMjA0MiAzLjQxNTY5IDUuNTM3IDMuNjEwOTUgNS43MzIyNkw1LjAyNTE2IDcuMTQ2NDhMNi4wODU4MiA4LjIwNzE0TDIuODE1NDUgMTEuNDc3NUMyLjYyMDE5IDExLjY3MjggMi42MjAxOSAxMS45ODk0IDIuODE1NDUgMTIuMTg0NkMzLjAxMDcyIDEyLjM3OTkgMy4zMjczIDEyLjM3OTkgMy41MjI1NiAxMi4xODQ2TDYuNzkyOTMgOC45MTQyNUw3Ljg1MzU5IDkuOTc0OTFMOS4yNjc4IDExLjM4OTFDOS40NjMwNiAxMS41ODQ0IDkuNzc5NjUgMTEuNTg0NCA5Ljk3NDkxIDExLjM4OTFDMTAuMTcwMiAxMS4xOTM5IDEwLjE3MDIgMTAuODc3MyA5Ljk3NDkxIDEwLjY4Mkw4Ljg2NzMzIDkuNTc0NDNMMTIuNTAzOSA0LjcyNTdMMTMuMTU2OSA1LjM3ODcxQzEzLjM1MjIgNS41NzM5NyAxMy42Njg3IDUuNTczOTcgMTMuODY0IDUuMzc4NzFDMTQuMDU5MyA1LjE4MzQ1IDE0LjA1OTMgNC44NjY4NyAxMy44NjQgNC42NzE2TDEyLjgwMzMgMy42MTA5NEwxMS4zODkxIDIuMTk2NzNMMTAuMzI4NSAxLjEzNjA3Wk02LjEzOTkyIDYuODQ3MDJMMTAuOTg4NyAzLjIxMDQ3TDExLjc4OTYgNC4wMTE0Mkw4LjE1MzA1IDguODYwMTVMNi4xMzk5MiA2Ljg0NzAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuNjIxMjkgMS4xMzYwN0M5LjgxNjU2IDAuOTQwODA4IDEwLjEzMzEgMC45NDA4MDkgMTAuMzI4NCAxLjEzNjA3TDExLjM4OTEgMi4xOTY3M0wxMi44MDMzIDMuNjEwOTRMMTMuODYzOSA0LjY3MTZDMTQuMDU5MiA0Ljg2Njg3IDE0LjA1OTIgNS4xODM0NSAxMy44NjM5IDUuMzc4NzFDMTMuNjY4NyA1LjU3Mzk3IDEzLjM1MjEgNS41NzM5NyAxMy4xNTY4IDUuMzc4NzFMMTIuNTAzOCA0LjcyNTdMOC44NjcyNyA5LjU3NDQzTDkuOTc0ODUgMTAuNjgyQzEwLjE3MDEgMTAuODc3MyAxMC4xNzAxIDExLjE5MzkgOS45NzQ4NSAxMS4zODkxQzkuNzc5NTkgMTEuNTg0NCA5LjQ2MyAxMS41ODQ0IDkuMjY3NzQgMTEuMzg5MUw3Ljg1MzUzIDkuOTc0OTFMNi43OTI4NyA4LjkxNDI1TDMuNTIyNSAxMi4xODQ2QzMuMzI3MjQgMTIuMzc5OSAzLjAxMDY1IDEyLjM3OTkgMi44MTUzOSAxMi4xODQ2QzIuNjIwMTMgMTEuOTg5NCAyLjYyMDEzIDExLjY3MjggMi44MTUzOSAxMS40Nzc1TDYuMDg1NzYgOC4yMDcxNEw1LjAyNTEgNy4xNDY0OEwzLjYxMDg5IDUuNzMyMjZDMy40MTU2MyA1LjUzNyAzLjQxNTYyIDUuMjIwNDIgMy42MTA4OSA1LjAyNTE2QzMuODA2MTUgNC44Mjk5IDQuMTIyNzMgNC44Mjk5IDQuMzE3OTkgNS4wMjUxNkw1LjQyNTU3IDYuMTMyNzRMMTAuMjc0MyAyLjQ5NjE5TDkuNjIxMjkgMS44NDMxOEM5LjQyNjAzIDEuNjQ3OTIgOS40MjYwMyAxLjMzMTMzIDkuNjIxMjkgMS4xMzYwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuNjIxMjkgMS4xMzYwN0M5LjgxNjU2IDAuOTQwODA4IDEwLjEzMzEgMC45NDA4MDkgMTAuMzI4NCAxLjEzNjA3TDExLjM4OTEgMi4xOTY3M0wxMi44MDMzIDMuNjEwOTRMMTMuODYzOSA0LjY3MTZDMTQuMDU5MiA0Ljg2Njg3IDE0LjA1OTIgNS4xODM0NSAxMy44NjM5IDUuMzc4NzFDMTMuNjY4NyA1LjU3Mzk3IDEzLjM1MjEgNS41NzM5NyAxMy4xNTY4IDUuMzc4NzFMMTIuNTAzOCA0LjcyNTdMOC44NjcyNyA5LjU3NDQzTDkuOTc0ODUgMTAuNjgyQzEwLjE3MDEgMTAuODc3MyAxMC4xNzAxIDExLjE5MzkgOS45NzQ4NSAxMS4zODkxQzkuNzc5NTkgMTEuNTg0NCA5LjQ2MyAxMS41ODQ0IDkuMjY3NzQgMTEuMzg5MUw3Ljg1MzUzIDkuOTc0OTFMNi43OTI4NyA4LjkxNDI1TDMuNTIyNSAxMi4xODQ2QzMuMzI3MjQgMTIuMzc5OSAzLjAxMDY1IDEyLjM3OTkgMi44MTUzOSAxMi4xODQ2QzIuNjIwMTMgMTEuOTg5NCAyLjYyMDEzIDExLjY3MjggMi44MTUzOSAxMS40Nzc1TDYuMDg1NzYgOC4yMDcxNEw1LjAyNTEgNy4xNDY0OEwzLjYxMDg5IDUuNzMyMjZDMy40MTU2MyA1LjUzNyAzLjQxNTYyIDUuMjIwNDIgMy42MTA4OSA1LjAyNTE2QzMuODA2MTUgNC44Mjk5IDQuMTIyNzMgNC44Mjk5IDQuMzE3OTkgNS4wMjUxNkw1LjQyNTU3IDYuMTMyNzRMMTAuMjc0MyAyLjQ5NjE5TDkuNjIxMjkgMS44NDMxOEM5LjQyNjAzIDEuNjQ3OTIgOS40MjYwMyAxLjMzMTMzIDkuNjIxMjkgMS4xMzYwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHB0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTk5IDMuMDk5OThDNy4yNzkwNyAzLjA5OTk4IDcuMDk5OTkgMy4yNzkwNiA3LjA5OTk5IDMuNDk5OThDNy4wOTk5OSAzLjcyMDg5IDcuMjc5MDcgMy44OTk5OCA3LjQ5OTk5IDMuODk5OThIMTQuNUMxNC43MjA5IDMuODk5OTggMTQuOSAzLjcyMDg5IDE0LjkgMy40OTk5OEMxNC45IDMuMjc5MDYgMTQuNzIwOSAzLjA5OTk4IDE0LjUgMy4wOTk5OEg3LjQ5OTk5Wk03LjQ5OTk4IDUuMUM3LjI3OTA3IDUuMSA3LjA5OTk4IDUuMjc5MDggNy4wOTk5OCA1LjVDNy4wOTk5OCA1LjcyMDkxIDcuMjc5MDcgNS45IDcuNDk5OTggNS45SDE0LjVDMTQuNzIwOSA1LjkgMTQuOSA1LjcyMDkxIDE0LjkgNS41QzE0LjkgNS4yNzkwOCAxNC43MjA5IDUuMSAxNC41IDUuMUg3LjQ5OTk4Wk03LjEgNy41QzcuMSA3LjI3OTA4IDcuMjc5MDkgNy4xIDcuNSA3LjFIMTQuNUMxNC43MjA5IDcuMSAxNC45IDcuMjc5MDggMTQuOSA3LjVDMTQuOSA3LjcyMDkxIDE0LjcyMDkgNy45IDE0LjUgNy45SDcuNUM3LjI3OTA5IDcuOSA3LjEgNy43MjA5MSA3LjEgNy41Wk03LjQ5OTk4IDkuMUM3LjI3OTA3IDkuMSA3LjA5OTk4IDkuMjc5MDggNy4wOTk5OCA5LjVDNy4wOTk5OCA5LjcyMDkxIDcuMjc5MDcgOS45IDcuNDk5OTggOS45SDE0LjVDMTQuNzIwOSA5LjkgMTQuOSA5LjcyMDkxIDE0LjkgOS41QzE0LjkgOS4yNzkwOCAxNC43MjA5IDkuMSAxNC41IDkuMUg3LjQ5OTk4Wk03LjA5OTk4IDExLjVDNy4wOTk5OCAxMS4yNzkxIDcuMjc5MDcgMTEuMSA3LjQ5OTk4IDExLjFIMTQuNUMxNC43MjA5IDExLjEgMTQuOSAxMS4yNzkxIDE0LjkgMTEuNUMxNC45IDExLjcyMDkgMTQuNzIwOSAxMS45IDE0LjUgMTEuOUg3LjQ5OTk4QzcuMjc5MDcgMTEuOSA3LjA5OTk4IDExLjcyMDkgNy4wOTk5OCAxMS41Wk0yLjUgOS4yNTAwM0w1IDYuMDAwMDNIMEwyLjUgOS4yNTAwM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGh0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjUgMUM0LjIyMzg2IDEgNCAxLjIyMzg2IDQgMS41QzQgMS43NzYxNCA0LjIyMzg2IDIgNC41IDJIMTJWMTNINC41QzQuMjIzODYgMTMgNCAxMy4yMjM5IDQgMTMuNUM0IDEzLjc3NjEgNC4yMjM4NiAxNCA0LjUgMTRIMTJDMTIuNTUyMyAxNCAxMyAxMy41NTIzIDEzIDEzVjJDMTMgMS40NDc3MiAxMi41NTIzIDEgMTIgMUg0LjVaTTYuNjAzNTUgNC44OTY0NUM2LjQwODI5IDQuNzAxMTggNi4wOTE3MSA0LjcwMTE4IDUuODk2NDUgNC44OTY0NUM1LjcwMTE4IDUuMDkxNzEgNS43MDExOCA1LjQwODI5IDUuODk2NDUgNS42MDM1NUw3LjI5Mjg5IDdIMC41QzAuMjIzODU4IDcgMCA3LjIyMzg2IDAgNy41QzAgNy43NzYxNCAwLjIyMzg1OCA4IDAuNSA4SDcuMjkyODlMNS44OTY0NSA5LjM5NjQ1QzUuNzAxMTggOS41OTE3MSA1LjcwMTE4IDkuOTA4MjkgNS44OTY0NSAxMC4xMDM2QzYuMDkxNzEgMTAuMjk4OCA2LjQwODI5IDEwLjI5ODggNi42MDM1NSAxMC4xMDM2TDguODUzNTUgNy44NTM1NUM5LjA0ODgyIDcuNjU4MjkgOS4wNDg4MiA3LjM0MTcxIDguODUzNTUgNy4xNDY0NUw2LjYwMzU1IDQuODk2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxndD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAyLjVDMiAyLjIyMzg2IDIuMjIzODYgMiAyLjUgMkg1LjVDNS43NzYxNCAyIDYgMi4yMjM4NiA2IDIuNUM2IDIuNzc2MTQgNS43NzYxNCAzIDUuNSAzSDNWNS41QzMgNS43NzYxNCAyLjc3NjE0IDYgMi41IDZDMi4yMjM4NiA2IDIgNS43NzYxNCAyIDUuNVYyLjVaTTkgMi41QzkgMi4yMjM4NiA5LjIyMzg2IDIgOS41IDJIMTIuNUMxMi43NzYxIDIgMTMgMi4yMjM4NiAxMyAyLjVWNS41QzEzIDUuNzc2MTQgMTIuNzc2MSA2IDEyLjUgNkMxMi4yMjM5IDYgMTIgNS43NzYxNCAxMiA1LjVWM0g5LjVDOS4yMjM4NiAzIDkgMi43NzYxNCA5IDIuNVpNMi41IDlDMi43NzYxNCA5IDMgOS4yMjM4NiAzIDkuNVYxMkg1LjVDNS43NzYxNCAxMiA2IDEyLjIyMzkgNiAxMi41QzYgMTIuNzc2MSA1Ljc3NjE0IDEzIDUuNSAxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41VjkuNUMyIDkuMjIzODYgMi4yMjM4NiA5IDIuNSA5Wk0xMi41IDlDMTIuNzc2MSA5IDEzIDkuMjIzODYgMTMgOS41VjEyLjVDMTMgMTIuNzc2MSAxMi43NzYxIDEzIDEyLjUgMTNIOS41QzkuMjIzODYgMTMgOSAxMi43NzYxIDkgMTIuNUM5IDEyLjIyMzkgOS4yMjM4NiAxMiA5LjUgMTJIMTJWOS41QzEyIDkuMjIzODYgMTIuMjIzOSA5IDEyLjUgOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHZ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDJDMC40NDc3MTUgMiAwIDIuNDQ3NzIgMCAzVjEyQzAgMTIuNTUyMyAwLjQ0NzcxNSAxMyAxIDEzSDE0QzE0LjU1MjMgMTMgMTUgMTIuNTUyMyAxNSAxMlYzQzE1IDIuNDQ3NzIgMTQuNTUyMyAyIDE0IDJIMVpNMSAzTDE0IDNWMy45MjQ5NEMxMy45MTc0IDMuOTI0ODYgMTMuODMzOCAzLjk0NzUxIDEzLjc1ODkgMy45OTUwNUw3LjUgNy45NjcwM0wxLjI0MTEyIDMuOTk1MDVDMS4xNjYyMSAzLjk0NzUxIDEuMDgyNiAzLjkyNDg2IDEgMy45MjQ5NFYzWk0xIDQuOTA3OTdWMTJIMTRWNC45MDc5N0w3Ljc0MTEyIDguODc5OTVDNy41OTM5NCA4Ljk3MzM1IDcuNDA2MDYgOC45NzMzNSA3LjI1ODg4IDguODc5OTVMMSA0LjkwNzk3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuOTQ3MjEgMC4xNjQ1OTRDNy42NjU2OSAwLjAyMzgyOTkgNy4zMzQzMSAwLjAyMzgzMDIgNy4wNTI3OSAwLjE2NDU5NEwwLjU1Mjc4NiAzLjQxNDU5QzAuMjE0MDAyIDMuNTgzOTkgMCAzLjkzMDI1IDAgNC4zMDkwMlYxMkMwIDEyLjU1MjMgMC40NDc3MTUgMTMgMSAxM0gxNEMxNC41NTIzIDEzIDE1IDEyLjU1MjMgMTUgMTJWNC4zMDkwMkMxNSAzLjkzMDI1IDE0Ljc4NiAzLjU4Mzk5IDE0LjQ0NzIgMy40MTQ1OUw3Ljk0NzIxIDAuMTY0NTk0Wk0xMy41Njg5IDQuMDkzNDlMNy41IDEuMDU5MDJMMS40MzEwNSA0LjA5MzQ5TDcuNSA3LjI5MTM2TDEzLjU2ODkgNC4wOTM0OVpNMSA0Ljg4MzY2VjEySDE0VjQuODgzNjZMNy43MDk3NyA4LjE5ODEzQzcuNTc4NDggOC4yNjczMSA3LjQyMTUyIDguMjY3MzEgNy4yOTAyMyA4LjE5ODEzTDEgNC44ODM2NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEN0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04LjQ0NDkgMC42MDg3NjVDOC4wMTgzIC0wLjEwNzAxNSA2Ljk4MTcgLTAuMTA3MDE1IDYuNTU1MDkgMC42MDg3NjZMMC4xNjExNzggMTEuMzM2OEMtMC4yNzU4MjQgMTIuMDcgMC4yNTI1MDMgMTMgMS4xMDYwOCAxM0gxMy44OTM5QzE0Ljc0NzUgMTMgMTUuMjc1OCAxMi4wNyAxNC44Mzg4IDExLjMzNjhMOC40NDQ5IDAuNjA4NzY1Wk03LjQxNDEgMS4xMjA3M0M3LjQ1Mjg4IDEuMDU1NjYgNy41NDcxMiAxLjA1NTY2IDcuNTg1OSAxLjEyMDczTDEzLjk3OTggMTEuODQ4OEMxNC4wMTk2IDExLjkxNTQgMTMuOTcxNSAxMiAxMy44OTM5IDEySDEuMTA2MDhDMS4wMjg0OSAxMiAwLjk4MDQ1NCAxMS45MTU0IDEuMDIwMTggMTEuODQ4OEw3LjQxNDEgMS4xMjA3M1pNNi44MjY5IDQuNDg2MTFDNi44MTIyMSA0LjEwNDIzIDcuMTE3ODMgMy43ODY2MyA3LjUgMy43ODY2M0M3Ljg4MjE3IDMuNzg2NjMgOC4xODc3OCA0LjEwNDIzIDguMTczMSA0LjQ4NjEyTDguMDE5MjEgOC40ODcwMUM4LjAwODQ4IDguNzY2IDcuNzc5MiA4Ljk4NjY0IDcuNSA4Ljk4NjY0QzcuMjIwOCA4Ljk4NjY0IDYuOTkxNTEgOC43NjYgNi45ODA3OCA4LjQ4NzAxTDYuODI2OSA0LjQ4NjExWk04LjI0OTg5IDEwLjQ3NkM4LjI0OTg5IDEwLjg5MDIgNy45MTQxIDExLjIyNiA3LjQ5OTg5IDExLjIyNkM3LjA4NTY3IDExLjIyNiA2Ljc0OTg5IDEwLjg5MDIgNi43NDk4OSAxMC40NzZDNi43NDk4OSAxMC4wNjE4IDcuMDg1NjcgOS43MjU5OSA3LjQ5OTg5IDkuNzI1OTlDNy45MTQxIDkuNzI1OTkgOC4yNDk4OSAxMC4wNjE4IDguMjQ5ODkgMTAuNDc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgMUMyLjQ0NzcxIDEgMiAxLjQ0NzcyIDIgMlYxM0MyIDEzLjU1MjMgMi40NDc3MiAxNCAzIDE0SDEwLjVDMTAuNzc2MSAxNCAxMSAxMy43NzYxIDExIDEzLjVDMTEgMTMuMjIzOSAxMC43NzYxIDEzIDEwLjUgMTNIM1YyTDEwLjUgMkMxMC43NzYxIDIgMTEgMS43NzYxNCAxMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxSDNaTTEyLjYwMzYgNC44OTY0NUMxMi40MDgzIDQuNzAxMTggMTIuMDkxNyA0LjcwMTE4IDExLjg5NjQgNC44OTY0NUMxMS43MDEyIDUuMDkxNzEgMTEuNzAxMiA1LjQwODI5IDExLjg5NjQgNS42MDM1NUwxMy4yOTI5IDdINi41QzYuMjIzODYgNyA2IDcuMjIzODYgNiA3LjVDNiA3Ljc3NjE0IDYuMjIzODYgOCA2LjUgOEgxMy4yOTI5TDExLjg5NjQgOS4zOTY0NUMxMS43MDEyIDkuNTkxNzEgMTEuNzAxMiA5LjkwODI5IDExLjg5NjQgMTAuMTAzNkMxMi4wOTE3IDEwLjI5ODggMTIuNDA4MyAxMC4yOTg4IDEyLjYwMzYgMTAuMTAzNkwxNC44NTM2IDcuODUzNTVDMTUuMDQ4OCA3LjY1ODI5IDE1LjA0ODggNy4zNDE3MSAxNC44NTM2IDcuMTQ2NDVMMTIuNjAzNiA0Ljg5NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sd3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNSAyQzUuNzc2MTQgMiA2IDIuMjIzODYgNiAyLjVWNS41QzYgNS43NzYxNCA1Ljc3NjE0IDYgNS41IDZIMi41QzIuMjIzODYgNiAyIDUuNzc2MTQgMiA1LjVDMiA1LjIyMzg2IDIuMjIzODYgNSAyLjUgNUg1VjIuNUM1IDIuMjIzODYgNS4yMjM4NiAyIDUuNSAyWk05LjUgMkM5Ljc3NjE0IDIgMTAgMi4yMjM4NiAxMCAyLjVWNUgxMi41QzEyLjc3NjEgNSAxMyA1LjIyMzg2IDEzIDUuNUMxMyA1Ljc3NjE0IDEyLjc3NjEgNiAxMi41IDZIOS41QzkuMjIzODYgNiA5IDUuNzc2MTQgOSA1LjVWMi41QzkgMi4yMjM4NiA5LjIyMzg2IDIgOS41IDJaTTIgOS41QzIgOS4yMjM4NiAyLjIyMzg2IDkgMi41IDlINS41QzUuNzc2MTQgOSA2IDkuMjIzODYgNiA5LjVWMTIuNUM2IDEyLjc3NjEgNS43NzYxNCAxMyA1LjUgMTNDNS4yMjM4NiAxMyA1IDEyLjc3NjEgNSAxMi41VjEwSDIuNUMyLjIyMzg2IDEwIDIgOS43NzYxNCAyIDkuNVpNOSA5LjVDOSA5LjIyMzg2IDkuMjIzODYgOSA5LjUgOUgxMi41QzEyLjc3NjEgOSAxMyA5LjIyMzg2IDEzIDkuNUMxMyA5Ljc3NjE0IDEyLjc3NjEgMTAgMTIuNSAxMEgxMFYxMi41QzEwIDEyLjc3NjEgOS43NzYxNCAxMyA5LjUgMTNDOS4yMjM4NiAxMyA5IDEyLjc3NjEgOSAxMi41VjkuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDJDMi40NDc3MiAyIDIgMi40NDc3MiAyIDNWMTJDMiAxMi41NTIzIDIuNDQ3NzIgMTMgMyAxM0gxMkMxMi41NTIzIDEzIDEzIDEyLjU1MjMgMTMgMTJWOC41QzEzIDguMjIzODYgMTIuNzc2MSA4IDEyLjUgOEMxMi4yMjM5IDggMTIgOC4yMjM4NiAxMiA4LjVWMTJIM1YzTDYuNSAzQzYuNzc2MTQgMyA3IDIuNzc2MTQgNyAyLjVDNyAyLjIyMzg2IDYuNzc2MTQgMiA2LjUgMkgzWk0xMi44NTM2IDIuMTQ2NDVDMTIuOTAxNSAyLjE5NDM5IDEyLjkzNzcgMi4yNDk2NCAxMi45NjIxIDIuMzA4NjFDMTIuOTg2MSAyLjM2NjY5IDEyLjk5OTYgMi40MzAzIDEzIDIuNDk3TDEzIDIuNVYyLjUwMDQ5VjUuNUMxMyA1Ljc3NjE0IDEyLjc3NjEgNiAxMi41IDZDMTIuMjIzOSA2IDEyIDUuNzc2MTQgMTIgNS41VjMuNzA3MTFMNi44NTM1NSA4Ljg1MzU1QzYuNjU4MjkgOS4wNDg4MiA2LjM0MTcxIDkuMDQ4ODIgNi4xNDY0NSA4Ljg1MzU1QzUuOTUxMTggOC42NTgyOSA1Ljk1MTE4IDguMzQxNzEgNi4xNDY0NSA4LjE0NjQ1TDExLjI5MjkgM0g5LjVDOS4yMjM4NiAzIDkgMi43NzYxNCA5IDIuNUM5IDIuMjIzODYgOS4yMjM4NiAyIDkuNSAySDEyLjQ5OTlIMTIuNUMxMi41Njc4IDIgMTIuNjMyNCAyLjAxMzQ5IDEyLjY5MTQgMi4wMzc5NEMxMi43NTA0IDIuMDYyMzQgMTIuODA1NiAyLjA5ODUxIDEyLjg1MzYgMi4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHh0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNC43NjQ5IDYuMDc1OTVDMTQuOTk5MSA2LjIyMjMxIDE1LjA3MDMgNi41MzA3OCAxNC45MjM5IDYuNzY0OTVDMTQuNDg0OSA3LjQ2NzQyIDEzLjk2MzIgOC4xMDY0NCAxMy4zNzAyIDguNjYzMDRMMTQuNTcxMiA5Ljg2NDA1QzE0Ljc2NjQgMTAuMDU5MyAxNC43NjY0IDEwLjM3NTkgMTQuNTcxMiAxMC41NzEyQzE0LjM3NTkgMTAuNzY2NCAxNC4wNTkzIDEwLjc2NjQgMTMuODY0MSAxMC41NzEyTDEyLjYwMTEgOS4zMDgxNkMxMS44MDQ5IDkuOTAyODIgMTAuOTA4OSAxMC4zNjIxIDkuOTMzNzQgMTAuNjUxTDEwLjM4MyAxMi4zMjc2QzEwLjQ1NDQgMTIuNTk0NCAxMC4yOTYxIDEyLjg2ODUgMTAuMDI5NCAxMi45NEM5Ljc2MjY2IDEzLjAxMTUgOS40ODg1IDEyLjg1MzIgOS40MTcwMyAxMi41ODY0TDguOTU5MTYgMTAuODc3NUM4LjQ4NzQyIDEwLjk1OCA4LjAwMDM1IDEwLjk5OTkgNy41IDEwLjk5OTlDNi45OTk2NCAxMC45OTk5IDYuNTEyNTcgMTAuOTU4IDYuMDQwODIgMTAuODc3NUw1LjU4Mjk5IDEyLjU4NjRDNS41MTE1MyAxMi44NTMyIDUuMjM3MzcgMTMuMDExNSA0Ljk3MDYzIDEyLjk0QzQuNzAzOSAxMi44Njg1IDQuNTQ1NiAxMi41OTQ0IDQuNjE3MDYgMTIuMzI3N0w1LjA2NjI0IDEwLjY1MUM0LjA5MTExIDEwLjM2MjEgMy4xOTUwMyA5LjkwMjgxIDIuMzk4OSA5LjMwODE0TDEuMTM1OSAxMC41NzExQzAuOTQwNjM4IDEwLjc2NjQgMC42MjQwNTggMTAuNzY2NCAwLjQyODc5NyAxMC41NzExQzAuMjMzNTM3IDEwLjM3NTkgMC4yMzM1MzcgMTAuMDU5MyAwLjQyODc5NyA5Ljg2NDA0TDEuNjI5ODIgOC42NjMwMkMxLjAzNjgyIDguMTA2NDMgMC41MTUxMTMgNy40Njc0MiAwLjA3NjA2NzcgNi43NjQ5NUMtMC4wNzAyODY3IDYuNTMwNzggMC4wMDA4OTg1NDQgNi4yMjIzMSAwLjIzNTA2NCA2LjA3NTk1QzAuNDY5MjMgNS45Mjk2IDAuNzc3NzAzIDYuMDAwNzggMC45MjQwNTcgNi4yMzQ5NUMxLjQwMzU0IDcuMDAyMTIgMS45ODkgNy42ODA1NiAyLjY2MjMzIDguMjQyN0MyLjY3MzE1IDguMjUwOTYgMi42ODM3IDguMjU5NzEgMi42OTM5NyA4LjI2ODk3QzQuMDA4OTcgOS4zNTUyNyA1LjY1NTM2IDkuOTk5OSA3LjUgOS45OTk5QzEwLjMwNzggOS45OTk5IDEyLjY1NjMgOC41MDYyOSAxNC4wNzU5IDYuMjM0OTVDMTQuMjIyMyA2LjAwMDc4IDE0LjUzMDggNS45Mjk2IDE0Ljc2NDkgNi4wNzU5NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF90PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy4zNTM2IDIuMzUzNTVDMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMS44NDE3MSAxMy4zNTM2IDEuNjQ2NDVDMTMuMTU4MyAxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMi42NDY0IDEuNjQ2NDVMMTAuNjgyOCAzLjYxMDEyQzkuNzA2NTIgMy4yMTY3MSA4LjYzNzU5IDMgNy41IDNDNC4zMDc4NiAzIDEuNjU2MzkgNC43MDYzOCAwLjA3NjAwMDIgNy4yMzUwMUMtMC4wMjUzMzM4IDcuMzk3MTUgLTAuMDI1MzMzNCA3LjYwMjg4IDAuMDc2MDAxNCA3Ljc2NTAxQzAuOTAyOTQ1IDkuMDg4MTIgMi4wMjMxNCAxMC4xODYxIDMuMzYwNjEgMTAuOTMyM0wxLjY0NjQ1IDEyLjY0NjRDMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTMuMTU4MyAxLjY0NjQ1IDEzLjM1MzZDMS44NDE3MSAxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAyLjM1MzU1IDEzLjM1MzZMNC4zMTcyMyAxMS4zODk5QzUuMjkzNDggMTEuNzgzMyA2LjM2MjQxIDEyIDcuNSAxMkMxMC42OTIxIDEyIDEzLjM0MzYgMTAuMjkzNiAxNC45MjQgNy43NjUwMUMxNS4wMjUzIDcuNjAyODggMTUuMDI1MyA3LjM5NzE1IDE0LjkyNCA3LjIzNTAxQzE0LjA5NzEgNS45MTE5IDEyLjk3NjkgNC44MTM5MSAxMS42Mzk0IDQuMDY3NzFMMTMuMzUzNiAyLjM1MzU1Wk05LjkwNDI4IDQuMzg4NjFDOS4xNTMzMiA0LjEzNjEgOC4zNDc1OSA0IDcuNSA0QzQuODAyODUgNCAyLjUyOTUyIDUuMzc4MTYgMS4wOTYyMiA3LjUwMDAxQzEuODcyODQgOC42NDk3IDIuODk2MDkgOS41ODEwNiA0LjA5OTc0IDEwLjE5MzFMOS45MDQyOCA0LjM4ODYxWk01LjA5NTcyIDEwLjYxMTRMMTAuOTAwMyA0LjgwNjg1QzEyLjEwMzkgNS40MTg5NCAxMy4xMjcyIDYuMzUwMzEgMTMuOTAzOCA3LjUwMDAxQzEyLjQ3MDUgOS42MjE4MyAxMC4xOTcxIDExIDcuNSAxMUM2LjY1MjQxIDExIDUuODQ2NjggMTAuODYzOSA1LjA5NTcyIDEwLjYxMTRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxPdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDExQzQuODAyODUgMTEgMi41Mjk1MiA5LjYyMTg0IDEuMDk2MjIgNy41MDAwMUMyLjUyOTUyIDUuMzc4MTYgNC44MDI4NSA0IDcuNSA0QzEwLjE5NzEgNCAxMi40NzA1IDUuMzc4MTYgMTMuOTAzOCA3LjUwMDAxQzEyLjQ3MDUgOS42MjE4MyAxMC4xOTcxIDExIDcuNSAxMVpNNy41IDNDNC4zMDc4NiAzIDEuNjU2MzkgNC43MDYzOCAwLjA3NjAwMDIgNy4yMzUwMUMtMC4wMjUzMzM4IDcuMzk3MTUgLTAuMDI1MzMzNCA3LjYwMjg4IDAuMDc2MDAxNCA3Ljc2NTAxQzEuNjU2MzkgMTAuMjkzNiA0LjMwNzg2IDEyIDcuNSAxMkMxMC42OTIxIDEyIDEzLjM0MzYgMTAuMjkzNiAxNC45MjQgNy43NjUwMUMxNS4wMjUzIDcuNjAyODggMTUuMDI1MyA3LjM5NzE1IDE0LjkyNCA3LjIzNTAxQzEzLjM0MzYgNC43MDYzOCAxMC42OTIxIDMgNy41IDNaTTcuNSA5LjVDOC42MDQ1NyA5LjUgOS41IDguNjA0NTcgOS41IDcuNUM5LjUgNi4zOTU0MyA4LjYwNDU3IDUuNSA3LjUgNS41QzYuMzk1NDMgNS41IDUuNSA2LjM5NTQzIDUuNSA3LjVDNS41IDguNjA0NTcgNi4zOTU0MyA5LjUgNy41IDkuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk0xLjgyNzA4IDcuNDk5NzJDMS44MjcwOCA0LjM2NjcxIDQuMzY2ODkgMS44MjY4OSA3LjQ5OTkxIDEuODI2ODlDMTAuNjMyOSAxLjgyNjg5IDEzLjE3MjcgNC4zNjY3MSAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyAxMC42MzI3IDEwLjYzMjkgMTMuMTcyNiA3LjQ5OTkxIDEzLjE3MjZDNC4zNjY4OSAxMy4xNzI2IDEuODI3MDggMTAuNjMyNyAxLjgyNzA4IDcuNDk5NzJaTTUuMDM3NDcgOS4yMTM5NUM0Ljg3OTQ5IDguOTg3NDYgNC41Njc4MiA4LjkzMTkzIDQuMzQxMzMgOS4wODk5MUM0LjExNDg0IDkuMjQ3ODkgNC4wNTkzMSA5LjU1OTU2IDQuMjE3MjkgOS43ODYwNUM0LjkzOTI2IDEwLjgyMTEgNi4xNDAzMyAxMS41IDcuNTAwMDQgMTEuNUM4Ljg1OTc0IDExLjUgMTAuMDYwOCAxMC44MjExIDEwLjc4MjggOS43ODYwNUMxMC45NDA4IDkuNTU5NTYgMTAuODg1MiA5LjI0Nzg5IDEwLjY1ODcgOS4wODk5MUMxMC40MzIzIDguOTMxOTMgMTAuMTIwNiA4Ljk4NzQ2IDkuOTYyNiA5LjIxMzk1QzkuNDE5NjMgOS45OTIzOCA4LjUxOTA3IDEwLjUgNy41MDAwNCAxMC41QzYuNDgxIDEwLjUgNS41ODA0NCA5Ljk5MjM4IDUuMDM3NDcgOS4yMTM5NVpNNS4zNzUwMyA2Ljg0OTk4QzUuODU4MjggNi44NDk5OCA2LjI1MDAzIDYuNDU4MTUgNi4yNTAwMyA1Ljk3NDk4QzYuMjUwMDMgNS40OTE4IDUuODU4MjggNS4wOTk5OCA1LjM3NTAzIDUuMDk5OThDNC44OTE3OSA1LjA5OTk4IDQuNTAwMDMgNS40OTE4IDQuNTAwMDMgNS45NzQ5OEM0LjUwMDAzIDYuNDU4MTUgNC44OTE3OSA2Ljg0OTk4IDUuMzc1MDMgNi44NDk5OFpNMTAuNSA1Ljk3NDk4QzEwLjUgNi40NTgxNSAxMC4xMDgzIDYuODQ5OTggOS42MjUwMyA2Ljg0OTk4QzkuMTQxNzkgNi44NDk5OCA4Ljc1MDAzIDYuNDU4MTUgOC43NTAwMyA1Ljk3NDk4QzguNzUwMDMgNS40OTE4IDkuMTQxNzkgNS4wOTk5OCA5LjYyNTAzIDUuMDk5OThDMTAuMTA4MyA1LjA5OTk4IDEwLjUgNS40OTE4IDEwLjUgNS45NzQ5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEV0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjAwMDA1IDIuMDQ5OTlINS41MjUwNUM0LjcxMDQzIDIuMDQ5OTkgNC4wNTAwNSAyLjcxMDM3IDQuMDUwMDUgMy41MjQ5OUM0LjA1MDA1IDQuMzM5NjEgNC43MTA0MyA0Ljk5OTk5IDUuNTI1MDUgNC45OTk5OUg3LjAwMDA1VjIuMDQ5OTlaTTcuMDAwMDUgMS4wNDk5OUg4LjAwMDA1SDkuNDc1MDVDMTAuODQyIDEuMDQ5OTkgMTEuOTUgMi4xNTgwOCAxMS45NSAzLjUyNDk5QzExLjk1IDQuMzMxNjMgMTEuNTY0MiA1LjA0ODE1IDEwLjk2NjkgNS40OTk5OUMxMS41NjQyIDUuOTUxODQgMTEuOTUgNi42NjgzNiAxMS45NSA3LjQ3NUMxMS45NSA4Ljg0MTkgMTAuODQyIDkuOTUgOS40NzUwNSA5Ljk1QzguOTIyMzYgOS45NSA4LjQxMTk4IDkuNzY4ODQgOC4wMDAwNSA5LjQ2MjY2VjkuOTVMOC4wMDAwNSAxMS40MjVDOC4wMDAwNSAxMi43OTE5IDYuODkxOTUgMTMuOSA1LjUyNTA1IDEzLjlDNC4xNTgxNCAxMy45IDMuMDUwMDUgMTIuNzkxOSAzLjA1MDA1IDExLjQyNUMzLjA1MDA1IDEwLjYxODMgMy40MzU5MyA5LjkwMTg0IDQuMDMzMTcgOS40NDk5OUMzLjQzNTkzIDguOTk4MTQgMy4wNTAwNSA4LjI4MTYzIDMuMDUwMDUgNy40NzVDMy4wNTAwNSA2LjY2ODM2IDMuNDM1OTQgNS45NTE4NCA0LjAzMzE5IDUuNUMzLjQzNTk0IDUuMDQ4MTUgMy4wNTAwNSA0LjMzMTYzIDMuMDUwMDUgMy41MjQ5OUMzLjA1MDA1IDIuMTU4MDggNC4xNTgxNCAxLjA0OTk5IDUuNTI1MDUgMS4wNDk5OUg3LjAwMDA1Wk04LjAwMDA1IDIuMDQ5OTlWNC45OTk5OUg5LjQ3NTA1QzEwLjI4OTcgNC45OTk5OSAxMC45NSA0LjMzOTYxIDEwLjk1IDMuNTI0OTlDMTAuOTUgMi43MTAzNyAxMC4yODk3IDIuMDQ5OTkgOS40NzUwNSAyLjA0OTk5SDguMDAwMDVaTTUuNTI1MDUgOC45NDk5OEg3LjAwMDA1TDcuMDAwMDUgNy40Nzg4TDcuMDAwMDUgNy40NzVMNy4wMDAwNSA3LjQ3MTJWNkg1LjUyNTA1QzQuNzEwNDMgNiA0LjA1MDA1IDYuNjYwMzggNC4wNTAwNSA3LjQ3NUM0LjA1MDA1IDguMjg3NjcgNC43MDcyNyA4Ljk0Njg0IDUuNTE5MiA4Ljk0OTk5TDUuNTI1MDUgOC45NDk5OFpNNC4wNTAwNSAxMS40MjVDNC4wNTAwNSAxMC42MTIzIDQuNzA3MjcgOS45NTMxNSA1LjUxOTIgOS45NDk5OUw1LjUyNTA1IDkuOTVINy4wMDAwNUw3LjAwMDA1IDExLjQyNUM3LjAwMDA1IDEyLjIzOTYgNi4zMzk2NyAxMi45IDUuNTI1MDUgMTIuOUM0LjcxMDQzIDEyLjkgNC4wNTAwNSAxMi4yMzk2IDQuMDUwMDUgMTEuNDI1Wk04LjAwMDA1IDcuNDcyMDZDOC4wMDE2NCA2LjY1ODc5IDguNjYxNDEgNiA5LjQ3NTA1IDZDMTAuMjg5NyA2IDEwLjk1IDYuNjYwMzggMTAuOTUgNy40NzVDMTAuOTUgOC4yODk2MiAxMC4yODk3IDguOTUgOS40NzUwNSA4Ljk1QzguNjYxNDEgOC45NSA4LjAwMTY0IDguMjkxMjEgOC4wMDAwNSA3LjQ3Nzk0VjcuNDcyMDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxTdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDJDMy4yMjM4NiAyIDMgMi4yMjM4NiAzIDIuNVYxMi41QzMgMTIuNzc2MSAzLjIyMzg2IDEzIDMuNSAxM0gxMS41QzExLjc3NjEgMTMgMTIgMTIuNzc2MSAxMiAxMi41VjZIOC41QzguMjIzODYgNiA4IDUuNzc2MTQgOCA1LjVWMkgzLjVaTTkgMi43MDcxMUwxMS4yOTI5IDVIOVYyLjcwNzExWk0yIDIuNUMyIDEuNjcxNTcgMi42NzE1NyAxIDMuNSAxSDguNUM4LjYzMjYxIDEgOC43NTk3OSAxLjA1MjY4IDguODUzNTUgMS4xNDY0NUwxMi44NTM2IDUuMTQ2NDVDMTIuOTQ3MyA1LjI0MDIxIDEzIDUuMzY3MzkgMTMgNS41VjEyLjVDMTMgMTMuMzI4NCAxMi4zMjg0IDE0IDExLjUgMTRIMy41QzIuNjcxNTcgMTQgMiAxMy4zMjg0IDIgMTIuNVYyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxqdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMyAyLjVDMyAyLjIyMzg2IDMuMjIzODYgMiAzLjUgMkg5LjI5Mjg5TDEyIDQuNzA3MTFWMTIuNUMxMiAxMi43NzYxIDExLjc3NjEgMTMgMTEuNSAxM0gzLjVDMy4yMjM4NiAxMyAzIDEyLjc3NjEgMyAxMi41VjIuNVpNMy41IDFDMi42NzE1NyAxIDIgMS42NzE1NyAyIDIuNVYxMi41QzIgMTMuMzI4NCAyLjY3MTU3IDE0IDMuNSAxNEgxMS41QzEyLjMyODQgMTQgMTMgMTMuMzI4NCAxMyAxMi41VjQuNjAzNTVDMTMgNC40MDQ2NCAxMi45MjEgNC4yMTM4OCAxMi43ODAzIDQuMDczMjJMOS44NTM1NSAxLjE0NjQ1QzkuNzU5NzkgMS4wNTI2OCA5LjYzMjYxIDEgOS41IDFIMy41Wk01LjI1IDdDNC45NzM4NiA3IDQuNzUgNy4yMjM4NiA0Ljc1IDcuNUM0Ljc1IDcuNzc2MTQgNC45NzM4NiA4IDUuMjUgOEg5Ljc1QzEwLjAyNjEgOCAxMC4yNSA3Ljc3NjE0IDEwLjI1IDcuNUMxMC4yNSA3LjIyMzg2IDEwLjAyNjEgNyA5Ljc1IDdINS4yNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE10PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjUgMkMzLjIyMzg2IDIgMyAyLjIyMzg2IDMgMi41VjEyLjVDMyAxMi43NzYxIDMuMjIzODYgMTMgMy41IDEzSDExLjVDMTEuNzc2MSAxMyAxMiAxMi43NzYxIDEyIDEyLjVWNC43MDcxMUw5LjI5Mjg5IDJIMy41Wk0yIDIuNUMyIDEuNjcxNTcgMi42NzE1NyAxIDMuNSAxSDkuNUM5LjYzMjYxIDEgOS43NTk3OSAxLjA1MjY4IDkuODUzNTUgMS4xNDY0NUwxMi43ODAzIDQuMDczMjJDMTIuOTIxIDQuMjEzODggMTMgNC40MDQ2NCAxMyA0LjYwMzU1VjEyLjVDMTMgMTMuMzI4NCAxMi4zMjg0IDE0IDExLjUgMTRIMy41QzIuNjcxNTcgMTQgMiAxMy4zMjg0IDIgMTIuNVYyLjVaTTQuNzUgNy41QzQuNzUgNy4yMjM4NiA0Ljk3Mzg2IDcgNS4yNSA3SDdWNS4yNUM3IDQuOTczODYgNy4yMjM4NiA0Ljc1IDcuNSA0Ljc1QzcuNzc2MTQgNC43NSA4IDQuOTczODYgOCA1LjI1VjdIOS43NUMxMC4wMjYxIDcgMTAuMjUgNy4yMjM4NiAxMC4yNSA3LjVDMTAuMjUgNy43NzYxNCAxMC4wMjYxIDggOS43NSA4SDhWOS43NUM4IDEwLjAyNjEgNy43NzYxNCAxMC4yNSA3LjUgMTAuMjVDNy4yMjM4NiAxMC4yNSA3IDEwLjAyNjEgNyA5Ljc1VjhINS4yNUM0Ljk3Mzg2IDggNC43NSA3Ljc3NjE0IDQuNzUgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sa3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgMi41QzMgMi4yMjM4NiAzLjIyMzg2IDIgMy41IDJIOS4wODU3OUM5LjIxODM5IDIgOS4zNDU1NyAyLjA1MjY4IDkuNDM5MzQgMi4xNDY0NUwxMS44NTM2IDQuNTYwNjZDMTEuOTQ3MyA0LjY1NDQzIDEyIDQuNzgxNjEgMTIgNC45MTQyMVYxMi41QzEyIDEyLjc3NjEgMTEuNzc2MSAxMyAxMS41IDEzSDMuNUMzLjIyMzg2IDEzIDMgMTIuNzc2MSAzIDEyLjVWMi41Wk0zLjUgMUMyLjY3MTU3IDEgMiAxLjY3MTU3IDIgMi41VjEyLjVDMiAxMy4zMjg0IDIuNjcxNTcgMTQgMy41IDE0SDExLjVDMTIuMzI4NCAxNCAxMyAxMy4zMjg0IDEzIDEyLjVWNC45MTQyMUMxMyA0LjUxNjM5IDEyLjg0MiA0LjEzNDg2IDEyLjU2MDcgMy44NTM1NUwxMC4xNDY0IDEuNDM5MzRDOS44NjUxNCAxLjE1ODA0IDkuNDgzNjEgMSA5LjA4NTc5IDFIMy41Wk00LjUgNEM0LjIyMzg2IDQgNCA0LjIyMzg2IDQgNC41QzQgNC43NzYxNCA0LjIyMzg2IDUgNC41IDVINy41QzcuNzc2MTQgNSA4IDQuNzc2MTQgOCA0LjVDOCA0LjIyMzg2IDcuNzc2MTQgNCA3LjUgNEg0LjVaTTQuNSA3QzQuMjIzODYgNyA0IDcuMjIzODYgNCA3LjVDNCA3Ljc3NjE0IDQuMjIzODYgOCA0LjUgOEgxMC41QzEwLjc3NjEgOCAxMSA3Ljc3NjE0IDExIDcuNUMxMSA3LjIyMzg2IDEwLjc3NjEgNyAxMC41IDdINC41Wk00LjUgMTBDNC4yMjM4NiAxMCA0IDEwLjIyMzkgNCAxMC41QzQgMTAuNzc2MSA0LjIyMzg2IDExIDQuNSAxMUgxMC41QzEwLjc3NjEgMTEgMTEgMTAuNzc2MSAxMSAxMC41QzExIDEwLjIyMzkgMTAuNzc2MSAxMCAxMC41IDEwSDQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjEwNTA1IDEyQzQuNzA4MDUgMTIgNC40MjM2IDExLjkxMiA0LjI1MTcxIDExLjczNkM0LjA4MzkgMTEuNTU1OSA0IDExLjI3MTUgNCAxMC44ODI3VjQuMTE3MzNDNCAzLjcyMDMzIDQuMDg1OTUgMy40MzU4OCA0LjI1Nzg0IDMuMjYzOThDNC40MzM4MyAzLjA4Nzk5IDQuNzE2MjMgMyA1LjEwNTA1IDNDNi40Mjc0MSAzIDguMjU1OTEgMyA5LjAyODUyIDNDMTAuMTM3MyAzIDExLjA1MzkgMy45ODE1MyAxMS4wNTM5IDUuMTg0NkMxMS4wNTM5IDYuMDg1MDEgMTAuNjAzNyA2LjgxODU1IDkuNzAzMjcgNy4yMzYwMkMxMC44NjU3IDcuNDQ4NTEgMTEuNTE3NiA4LjYyNzg3IDExLjUxNzYgOS40ODEyOEMxMS41MTc2IDEwLjUxMjUgMTAuOTkwMiAxMiA5LjI3NzM0IDEyQzguNzc3NDIgMTIgNi40MjYyNiAxMiA1LjEwNTA1IDEyWk04LjM3ODkxIDguMDAzNDFINS44VjEwLjYzMUg4LjM3ODkxQzguOSAxMC42MzEgOS42Mjk2IDEwLjEyMTEgOS42Mjk2IDkuMjk4NzdDOS42Mjk2IDguNDc2NDMgOC45IDguMDAzNDEgOC4zNzg5MSA4LjAwMzQxWk01LjggNC4zNjkwM1Y2LjY5NTc3SDguMTc5NjlDOC41MzkwNiA2LjY5NTc3IDkuMjc3MzQgNi4zNTkzOSA5LjI3NzM0IDUuNTAwMDJDOS4yNzczNCA0LjY0MDY0IDguNDgwNDcgNC4zNjkwMyA4LjE3OTY5IDQuMzY5MDNINS44WlwiLGZpbGw6bn0pKX0sUHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuNSA0LjVDMi41IDMuMDk4ODYgMy41OTg4NiAyIDUgMkgxMi40OTlDMTIuNzc1MiAyIDEzIDIuMjIzODYgMTMgMi41QzEzIDIuNzc2MTQgMTIuNzc2MSAzIDEyLjUgM0g4LjY5MjQ0TDguNDA1MDkgMy44NTQ1OEM4LjE4ODY5IDQuNDk3NTIgNy44OTQwMSA1LjM3MTk3IDcuNTgwOTEgNi4yOTc5NEM3LjUwMjU5IDYuNTI5NTYgNy40MjMwOCA2Ljc2NDUzIDcuMzQzMzIgN0g4LjVDOC43NzYxNCA3IDkgNy4yMjM4NiA5IDcuNUM5IDcuNzc2MTQgOC43NzYxNCA4IDguNSA4SDcuMDA0MDdDNi41NjcyNCA5LjI4NTQzIDYuMTY0MzUgMTAuNDYxMyA1Ljk1Nzk5IDExLjAzODZDNS42MzYyNyAxMS45Mzg2IDUuMjA3MTIgMTIuNDg1NyA0LjY2NzQxIDEyLjc3NzhDNC4xNjMzNSAxMy4wNTA3IDMuNjQxNTQgMTMuMDUwMyAzLjI4Mzc4IDEzLjA1TDMuMjUgMTMuMDVDMi45NDYyNCAxMy4wNSAyLjcgMTIuODAzNyAyLjcgMTIuNUMyLjcgMTIuMTk2MiAyLjk0NjI0IDExLjk1IDMuMjUgMTEuOTVDMy42NDE4MiAxMS45NSAzLjkwMzUgMTEuOTQwNSA0LjE0Mzc0IDExLjgxMDVDNC4zNjQ0MyAxMS42OTEgNC42NTUzMiAxMS40MTQ4IDQuOTIyMTcgMTAuNjY4M0M1LjEwNjk1IDEwLjE1MTQgNS40NTM3NSA5LjE0MTM0IDUuODQyMiA4SDQuNUM0LjIyMzg2IDggNCA3Ljc3NjE0IDQgNy41QzQgNy4yMjM4NiA0LjIyMzg2IDcgNC41IDdINi4xODE4N0M2LjMwMTI3IDYuNjQ3ODUgNi40MjEzMiA2LjI5MzIzIDYuNTM4ODcgNS45NDU1OUM2Ljg1MTc1IDUuMDIwMjUgNy4xNDYyNyA0LjE0NjMxIDcuMzYyNTYgMy41MDM2OEw3LjUzMTkyIDNINUM0LjE1MTE0IDMgMy41IDMuNjUxMTQgMy41IDQuNUMzLjUgNC43NzYxNCAzLjI3NjE0IDUgMyA1QzIuNzIzODYgNSAyLjUgNC43NzYxNCAyLjUgNC41WlwiLGZpbGw6bn0pKX0sSXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNjc0OTQgMy41MDAxN0M1LjY3NDk0IDMuMjUxNjQgNS44NzY0MSAzLjA1MDE3IDYuMTI0OTQgMy4wNTAxN0gxMC42MjQ5QzEwLjg3MzUgMy4wNTAxNyAxMS4wNzQ5IDMuMjUxNjQgMTEuMDc0OSAzLjUwMDE3QzExLjA3NDkgMy43NDg3IDEwLjg3MzUgMy45NTAxNyAxMC42MjQ5IDMuOTUwMTdIOS4wMDU4N0w3LjIzMDkgMTEuMDVIOC44NzQ5M0M5LjEyMzQ1IDExLjA1IDkuMzI0OTMgMTEuMjUxNSA5LjMyNDkzIDExLjVDOS4zMjQ5MyAxMS43NDg2IDkuMTIzNDUgMTEuOTUgOC44NzQ5MyAxMS45NUg0LjM3NDkzQzQuMTI2NCAxMS45NSAzLjkyNDkzIDExLjc0ODYgMy45MjQ5MyAxMS41QzMuOTI0OTMgMTEuMjUxNSA0LjEyNjQgMTEuMDUgNC4zNzQ5MyAxMS4wNUg1Ljk5Mzk3TDcuNzY4OTQgMy45NTAxN0g2LjEyNDk0QzUuODc2NDEgMy45NTAxNyA1LjY3NDk0IDMuNzQ4NyA1LjY3NDk0IDMuNTAwMTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxBdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC43OTk5MyAzLjUwMDE3QzQuNzk5OTMgMy4yNTE2NCA1LjAwMTQgMy4wNTAxNyA1LjI0OTkzIDMuMDUwMTdIOS43NDk5M0M5Ljk5ODQ1IDMuMDUwMTcgMTAuMTk5OSAzLjI1MTY0IDEwLjE5OTkgMy41MDAxN0MxMC4xOTk5IDMuNzQ4NyA5Ljk5ODQ1IDMuOTUwMTcgOS43NDk5MyAzLjk1MDE3SDguMDk5OTNWMTEuMDVIOS43NDk5NEM5Ljk5ODQ3IDExLjA1IDEwLjE5OTkgMTEuMjUxNSAxMC4xOTk5IDExLjVDMTAuMTk5OSAxMS43NDg2IDkuOTk4NDcgMTEuOTUgOS43NDk5NCAxMS45NUg1LjI0OTk0QzUuMDAxNDEgMTEuOTUgNC43OTk5NCAxMS43NDg2IDQuNzk5OTQgMTEuNUM0Ljc5OTk0IDExLjI1MTUgNS4wMDE0MSAxMS4wNSA1LjI0OTk0IDExLjA1SDYuODk5OTNWMy45NTAxN0g1LjI0OTkzQzUuMDAxNCAzLjk1MDE3IDQuNzk5OTMgMy43NDg3IDQuNzk5OTMgMy41MDAxN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFR0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjc4MjMzIDIuMjE3MDdDMi43MDczMiAyLjE0MjA2IDIuNjA1NTcgMi4wOTk5MSAyLjQ5OTQ5IDIuMDk5OTFDMi4zOTM0IDIuMDk5OTEgMi4yOTE2NiAyLjE0MjA2IDIuMjE2NjQgMi4yMTcwN0wwLjIxNjY0NSA0LjIxNzA3QzAuMDYwNDM1MSA0LjM3MzI4IDAuMDYwNDM1MSA0LjYyNjU1IDAuMjE2NjQ1IDQuNzgyNzZDMC4zNzI4NTUgNC45Mzg5NyAwLjYyNjEyMSA0LjkzODk3IDAuNzgyMzMgNC43ODI3NkwyLjA5OTQ5IDMuNDY1NkwyLjA5OTQ5IDExLjUzNDJMMC43ODIzMyAxMC4yMTcxQzAuNjI2MTIgMTAuMDYwOSAwLjM3Mjg1NCAxMC4wNjA5IDAuMjE2NjQ1IDEwLjIxNzFDMC4wNjA0MzQ5IDEwLjM3MzMgMC4wNjA0MzQ5IDEwLjYyNjUgMC4yMTY2NDUgMTAuNzgyOEwyLjIxNjY0IDEyLjc4MjhDMi4yOTE2NiAxMi44NTc4IDIuMzkzNCAxMi44OTk5IDIuNDk5NDkgMTIuODk5OUMyLjYwNTU3IDEyLjg5OTkgMi43MDczMSAxMi44NTc4IDIuNzgyMzMgMTIuNzgyOEw0Ljc4MjMzIDEwLjc4MjhDNC45Mzg1NCAxMC42MjY1IDQuOTM4NTQgMTAuMzczMyA0Ljc4MjMzIDEwLjIxNzFDNC42MjYxMiAxMC4wNjA5IDQuMzcyODUgMTAuMDYwOSA0LjIxNjY0IDEwLjIxNzFMMi44OTk0OSAxMS41MzQyTDIuODk5NDkgMy40NjU2TDQuMjE2NjQgNC43ODI3NkM0LjM3Mjg1IDQuOTM4OTcgNC42MjYxMiA0LjkzODk3IDQuNzgyMzMgNC43ODI3NkM0LjkzODU0IDQuNjI2NTUgNC45Mzg1NCA0LjM3MzI4IDQuNzgyMzMgNC4yMTcwN0wyLjc4MjMzIDIuMjE3MDdaTTEwLjUgMi43NDk5N0MxMC43MTA3IDIuNzQ5OTcgMTAuODk4OCAyLjg4MjExIDEwLjk3MDMgMy4wODAzNkwxMy45NzAzIDExLjM5OTlDMTQuMDY0IDExLjY1OTcgMTMuOTI5MyAxMS45NDYyIDEzLjY2OTYgMTIuMDM5OUMxMy40MDk4IDEyLjEzMzYgMTMuMTIzMyAxMS45OTg5IDEzLjAyOTYgMTEuNzM5MkwxMi4wNDc3IDkuMDE2SDguOTUyMjhMNy45NzAzMyAxMS43MzkyQzcuODc2NjYgMTEuOTk4OSA3LjU5MDEzIDEyLjEzMzYgNy4zMzAzNiAxMi4wMzk5QzcuMDcwNTkgMTEuOTQ2MiA2LjkzNTk1IDExLjY1OTcgNy4wMjk2MiAxMS4zOTk5TDEwLjAyOTYgMy4wODAzNkMxMC4xMDExIDIuODgyMTEgMTAuMjg5MiAyLjc0OTk3IDEwLjUgMi43NDk5N1pNMTAuNSA0LjcyMzk2TDExLjc0MTIgOC4xNjZIOS4yNTg3OUwxMC41IDQuNzIzOTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS4wMzc5MSA5Ljk4MDc1QzAuOTM0Nzc3IDkuNjU4MyAxLjExNjAzIDkuMzc3MTkgMS40MDAwNSA5LjI0ODcxQzEuNjg0MDggOS4xMjAyMiAyLjA5NDYzIDkuMTM0MTIgMi4yNzA3MSA5LjQ1NDI2QzIuODUzOTMgMTAuNTE0NyAzLjY0NTk5IDEwLjcyODIgNC40ODY2NSAxMC43MjgyQzUuNTI3MjEgMTAuNzI4MiA2LjI5NjU5IDEwLjI2MTUgNi4yOTY1OSA5LjQ1NDI2QzYuMjk2NTkgOC44MDQ3IDUuOTExOSA4LjQ2NDE2IDQuODcxMzQgOC4xNDI1M0w0LjE1ODcyIDcuOTIxODFDMi42NDUxOCA3LjQ0ODgzIDEuODg4NDIgNi42OTIwNiAxLjg4ODQyIDUuNDU2MDFDMS44ODg0MiAzLjc5NzQzIDMuMjc1ODMgMi42ODc1IDUuMjQzNDIgMi42ODc1QzYuOTE3MzMgMi42ODc1IDcuOTc0MDkgMy4zMzUzNiA4LjQzODMzIDQuMzEwNjVDOC41NzA4NyA0LjU4OTA5IDguNTc2MTQgNC45MTI5NCA4LjIyNzk0IDUuMTkxMTRDNy44Nzk3NCA1LjQ2OTM0IDcuNTIzNTEgNS4zNDc5OSA3LjIzMzI3IDUuMDM4MzlDNi40NzIxNSA0LjIyNjUzIDUuOTk1NDUgNC4wNDk2OCA1LjI1NjA0IDQuMDQ5NjhDNC4xMzk4IDQuMDQ5NjggMy41NDcgNC42MzYxOCAzLjU0NyA1LjI3OTQzQzMuNTQ3IDUuODY1OTIgMy45NjMyMiA2LjIzMTY5IDQuOTQ3MDIgNi41MzQ0TDUuNjc4NTYgNi43NjE0M0M3LjIyOTk0IDcuMjM0NDEgNy45NzQwOSA3Ljk1OTY0IDcuOTc0MDkgOS4xNzA0N0M3Ljk3NDA5IDEwLjc3MjMgNi42OTM4OSAxMi4wOTAzIDQuNDYxNDMgMTIuMDkwM0MyLjg2NjEyIDEyLjA5MDMgMS40MDAwNSAxMS4xMTMxIDEuMDM3OTEgOS45ODA3NVpNMTEuODQ5MSA4Ljc3OTg1QzEwLjY2MSA4LjM5NTQzIDEwLjE2NDkgNy44NjExNCAxMC4xNjQ5IDYuOTg4MDVDMTAuMTY0OSA1Ljg2NzM2IDExLjE2MzYgNS4wNDYzOSAxMi42MTI4IDUuMDQ2MzlDMTMuODU0NiA1LjA0NjM5IDE0LjY2MjkgNS42MzM0NSAxNC45Nzc4IDYuNjM0NkMxNS4wNDQzIDYuODQ1OTkgMTQuOTU5MyA2Ljk4MDA2IDE0Ljc0NzUgNy4wNDkxQzE0LjUzOTQgNy4xMTY5NyAxNC4zMTc2IDcuMDk5NzQgMTQuMjM4IDYuODk2MTFDMTMuOTM1NiA2LjEyMjczIDEzLjM1MiA1Ljc2MzExIDEyLjU5OTggNS43NjMxMUMxMS42NDY3IDUuNzYzMTEgMTEuMDEzNSA2LjI1MTc4IDExLjAxMzUgNi45MTYzOEMxMS4wMTM1IDcuNDUwNjYgMTEuMzQ2NCA3Ljc1MDM4IDEyLjI0NzMgOC4wNDM1OEwxMi44MzQ4IDguMjMyNTRDMTQuMDYyIDguNjI5OTkgMTQuNTUxNiA5LjEzODIxIDE0LjU1MTYgMTAuMDE3OEMxNC41NTE2IDExLjE5NzIgMTMuNDgxIDEyLjA0NDIgMTEuOTkyNyAxMi4wNDQyQzEwLjY0MzkgMTIuMDQ0MiA5LjY1NjQ0IDExLjI4MDkgOS40MTk3OSAxMC4zMzYxQzkuMzY1MzUgMTAuMTE4OCA5LjQxMTkyIDEwLjAyODcgOS43MDAzOSA5Ljk2MTg0QzkuOTg4ODYgOS44OTQ5OSAxMC4wNzE0IDkuODk5MTggMTAuMTcxNSAxMC4xMzY5QzEwLjQ1NTUgMTAuODExNCAxMS4xNTMxIDExLjMyNzUgMTIuMDMxOCAxMS4zMjc1QzEyLjk5MTQgMTEuMzI3NSAxMy42ODM0IDEwLjc4MDIgMTMuNjgzNCAxMC4wNjM0QzEzLjY4MzQgOS41MzU2NyAxMy4zOTYxIDkuMjg4MDcgMTIuNDM2NiA4Ljk3NTMyTDExLjg0OTEgOC43Nzk4NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxQzEwLjIyMzkgMSAxMCAxLjIyMzg2IDEwIDEuNVY0SDVWMS41QzUgMS4yMjM4NiA0Ljc3NjE0IDEgNC41IDFDNC4yMjM4NiAxIDQgMS4yMjM4NiA0IDEuNVY0SDEuNUMxLjIyMzg2IDQgMSA0LjIyMzg2IDEgNC41QzEgNC43NzYxNCAxLjIyMzg2IDUgMS41IDVINFYxMEgxLjVDMS4yMjM4NiAxMCAxIDEwLjIyMzkgMSAxMC41QzEgMTAuNzc2MSAxLjIyMzg2IDExIDEuNSAxMUg0VjEzLjVDNCAxMy43NzYxIDQuMjIzODYgMTQgNC41IDE0QzQuNzc2MTQgMTQgNSAxMy43NzYxIDUgMTMuNVYxMUgxMFYxMy41QzEwIDEzLjc3NjEgMTAuMjIzOSAxNCAxMC41IDE0QzEwLjc3NjEgMTQgMTEgMTMuNzc2MSAxMSAxMy41VjExSDEzLjVDMTMuNzc2MSAxMSAxNCAxMC43NzYxIDE0IDEwLjVDMTQgMTAuMjIzOSAxMy43NzYxIDEwIDEzLjUgMTBIMTFWNUgxMy41QzEzLjc3NjEgNSAxNCA0Ljc3NjE0IDE0IDQuNUMxNCA0LjIyMzg2IDEzLjc3NjEgNCAxMy41IDRIMTFWMS41Wk0xMCAxMFY1SDVWMTBIMTBaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxWdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4zODI1IDEuMjk1NjdDMy40NjI0MSAxLjExNDMyIDMuNjQxODggMC45OTcyODQgMy44NDAwNSAwLjk5NzI4NEgxMS41QzExLjc3NjEgMC45OTcyODQgMTIgMS4yMjExNCAxMiAxLjQ5NzI4VjUuNUMxMiA1Ljc3NjE0IDExLjc3NjEgNiAxMS41IDZIOC42MzUyMUwxMS41Mjg4IDkuMTYyNDdDMTEuNjYyNiA5LjMwODcgMTEuNjk3NCA5LjUyMDE1IDExLjYxNzUgOS43MDE1NEMxMS41Mzc2IDkuODgyOTMgMTEuMzU4MiAxMCAxMS4xNiAxMEg4VjEzLjVDOCAxMy43MDIyIDcuODc4MTggMTMuODg0NSA3LjY5MTM0IDEzLjk2MTlDNy41MDQ1IDE0LjAzOTMgNy4yODk0NSAxMy45OTY2IDcuMTQ2NDUgMTMuODUzNkwzLjE0NjQ1IDkuODUzNTVDMy4wNTI2OCA5Ljc1OTc5IDMgOS42MzI2MSAzIDkuNVY1LjVDMyA1LjIyMzg2IDMuMjIzODYgNSAzLjUgNUg2LjM2NTMxTDMuNDcxMDUgMS44MzQ2OEMzLjMzNzMyIDEuNjg4NDQgMy4zMDI1OSAxLjQ3NzAxIDMuMzgyNSAxLjI5NTY3Wk03LjcyMDMyIDVMNC45NzQ3NCAxLjk5NzI4SDExVjVINy43MjAzMlpNNy4yNzk3OCA2SDRWOUg3LjVIMTAuMDI0N0w3LjI3OTc4IDZaTTQuNzA3MTEgMTBMNyAxMi4yOTI5VjEwSDQuNzA3MTFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxEdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4wNzA5NSAwLjY1MDIzOEM2LjY3MzkxIDAuNjUwMjM4IDYuMzI5NzcgMC45MjUwOTYgNi4yNDE5OCAxLjMxMjMxTDYuMDAzOSAyLjM2MjQ3QzUuNjI0OSAyLjQ3MjY5IDUuMjYzMzUgMi42MjM2MyA0LjkyNDM2IDIuODEwMTNMNC4wMTMzNSAyLjIzNTg1QzMuNjc3NDggMi4wMjQxMyAzLjIzOTc4IDIuMDczMTIgMi45NTkwMyAyLjM1Mzg2TDIuMzUyOTQgMi45NTk5NkMyLjA3MjIgMy4yNDA3IDIuMDIzMiAzLjY3ODQgMi4yMzQ5MyA0LjAxNDI3TDIuODA5NDIgNC45MjU2MUMyLjYyMzA3IDUuMjY0NSAyLjQ3MjI3IDUuNjI1OTQgMi4zNjIxNiA2LjAwNDgxTDEuMzEyMDkgNi4yNDI4N0MwLjkyNDg4MyA2LjMzMDY1IDAuNjUwMDI0IDYuNjc0OCAwLjY1MDAyNCA3LjA3MTgzVjcuOTI4OTdDMC42NTAwMjQgOC4zMjYwMSAwLjkyNDg4MyA4LjY3MDE1IDEuMzEyMDkgOC43NTc5NEwyLjM2MjI4IDguOTk2MDNDMi40NzI0NiA5LjM3NSAyLjYyMzM1IDkuNzM2NTIgMi44MDk3OSAxMC4wNzU1TDIuMjM1NCAxMC45ODY3QzIuMDIzNjcgMTEuMzIyNSAyLjA3MjY3IDExLjc2MDIgMi4zNTM0MSAxMi4wNDFMMi45NTk1MSAxMi42NDcxQzMuMjQwMjUgMTIuOTI3OCAzLjY3Nzk1IDEyLjk3NjggNC4wMTM4MiAxMi43NjUxTDQuOTI1MDYgMTIuMTkwN0M1LjI2Mzg0IDEyLjM3NyA1LjYyNTE2IDEyLjUyNzggNi4wMDM5IDEyLjYzNzlMNi4yNDE5OCAxMy42ODgxQzYuMzI5NzcgMTQuMDc1MyA2LjY3MzkxIDE0LjM1MDIgNy4wNzA5NSAxNC4zNTAySDcuOTI4MDlDOC4zMjUxMiAxNC4zNTAyIDguNjY5MjcgMTQuMDc1MyA4Ljc1NzA1IDEzLjY4ODFMOC45OTUwNSAxMi42MzgzQzkuMzc0MTEgMTIuNTI4MiA5LjczNTczIDEyLjM3NzMgMTAuMDc0OCAxMi4xOTA5TDEwLjk4NiAxMi43NjUzQzExLjMyMTggMTIuOTc3IDExLjc1OTUgMTIuOTI4IDEyLjA0MDMgMTIuNjQ3M0wxMi42NDY0IDEyLjA0MTJDMTIuOTI3MSAxMS43NjA0IDEyLjk3NjEgMTEuMzIyNyAxMi43NjQ0IDEwLjk4NjlMMTIuMTkwMiAxMC4wNzZDMTIuMzc2OCA5LjczNjg4IDEyLjUyNzggOS4zNzUxNSAxMi42MzggOC45OTU5NkwxMy42ODc5IDguNzU3OTRDMTQuMDc1MSA4LjY3MDE1IDE0LjM1IDguMzI2MDEgMTQuMzUgNy45Mjg5N1Y3LjA3MTgzQzE0LjM1IDYuNjc0OCAxNC4wNzUxIDYuMzMwNjUgMTMuNjg3OSA2LjI0Mjg3TDEyLjYzODEgNi4wMDQ4OEMxMi41MjggNS42MjU3OCAxMi4zNzcxIDUuMjY0MTQgMTIuMTkwNiA0LjkyNTA3TDEyLjc2NDggNC4wMTQwN0MxMi45NzY2IDMuNjc4MiAxMi45Mjc2IDMuMjQwNSAxMi42NDY4IDIuOTU5NzVMMTIuMDQwNyAyLjM1MzY2QzExLjc2IDIuMDcyOTIgMTEuMzIyMyAyLjAyMzkyIDEwLjk4NjQgMi4yMzU2NUwxMC4wNzU1IDIuODA5ODlDOS43MzYyMiAyLjYyMzI4IDkuMzc0MzcgMi40NzIyOSA4Ljk5NTA1IDIuMzYyMDlMOC43NTcwNSAxLjMxMjMxQzguNjY5MjcgMC45MjUwOTYgOC4zMjUxMiAwLjY1MDIzOCA3LjkyODA5IDAuNjUwMjM4SDcuMDcwOTVaTTQuOTIwNTMgMy44MTI1MUM1LjQ0NzI0IDMuNDQzMzkgNi4wNTY2NSAzLjE4NDI0IDYuNzE1NDMgMy4wNjgzOUw3LjA3MDk1IDEuNTAwMjRINy45MjgwOUw4LjI4MzU1IDMuMDY4MTZDOC45NDI2NyAzLjE4Mzg3IDkuNTUyNCAzLjQ0MzAyIDEwLjA3OTQgMy44MTIyNEwxMS40Mzk3IDIuOTU0N0wxMi4wNDU4IDMuNTYwNzlMMTEuMTg4MiA0LjkyMTE3QzExLjU1NzMgNS40NDc5OCAxMS44MTY0IDYuMDU3NSAxMS45MzIxIDYuNzE2MzhMMTMuNSA3LjA3MTgzVjcuOTI4OTdMMTEuOTMyIDguMjg0NDRDMTEuODE2MiA4Ljk0MzQyIDExLjU1NyA5LjU1MzAxIDExLjE4NzggMTAuMDc5OEwxMi4wNDUzIDExLjQ0MDJMMTEuNDM5MiAxMi4wNDYyTDEwLjA3ODcgMTEuMTg4NkM5LjU1MTkyIDExLjU1NzYgOC45NDI0MSAxMS44MTY2IDguMjgzNTUgMTEuOTMyM0w3LjkyODA5IDEzLjUwMDJINy4wNzA5NUw2LjcxNTQzIDExLjkzMkM2LjA1NjkgMTEuODE2MiA1LjQ0NzcyIDExLjU1NzIgNC45MjExNiAxMS4xODgzTDMuNTYwNTUgMTIuMDQ2TDIuOTU0NDUgMTEuNDM5OUwzLjgxMjEzIDEwLjA3OTRDMy40NDMxIDkuNTUyNjYgMy4xODQwMyA4Ljk0MzI2IDMuMDY4MjUgOC4yODQ1TDEuNTAwMDIgNy45Mjg5N1Y3LjA3MTgzTDMuMDY4MTggNi43MTYzMkMzLjE4Mzg4IDYuMDU3NjUgMy40NDI4MyA1LjQ0ODMzIDMuODExNzEgNC45MjE2NUwyLjk1Mzk4IDMuNTYxTDMuNTYwMDggMi45NTQ5MUw0LjkyMDUzIDMuODEyNTFaTTkuMDI0OTYgNy41MDAwOEM5LjAyNDk2IDguMzQyMjYgOC4zNDIyMyA5LjAyNDk5IDcuNTAwMDUgOS4wMjQ5OUM2LjY1Nzg2IDkuMDI0OTkgNS45NzUxMyA4LjM0MjI2IDUuOTc1MTMgNy41MDAwOEM1Ljk3NTEzIDYuNjU3ODkgNi42NTc4NiA1Ljk3NTE2IDcuNTAwMDUgNS45NzUxNkM4LjM0MjIzIDUuOTc1MTYgOS4wMjQ5NiA2LjY1Nzg5IDkuMDI0OTYgNy41MDAwOFpNOS45MjQ5NiA3LjUwMDA4QzkuOTI0OTYgOC44MzkzMiA4LjgzOTI5IDkuOTI0OTkgNy41MDAwNSA5LjkyNDk5QzYuMTYwOCA5LjkyNDk5IDUuMDc1MTMgOC44MzkzMiA1LjA3NTEzIDcuNTAwMDhDNS4wNzUxMyA2LjE2MDg0IDYuMTYwOCA1LjA3NTE2IDcuNTAwMDUgNS4wNzUxNkM4LjgzOTI5IDUuMDc1MTYgOS45MjQ5NiA2LjE2MDg0IDkuOTI0OTYgNy41MDAwOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFp0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTM2IDAuODUwMDA2QzMuODI3NjcgMC44NTAwMDYgMC44NDk5NzYgMy44MjczIDAuODQ5OTc2IDcuNTAwMjNDMC44NDk5NzYgMTAuNDM3OSAyLjc1NTIzIDEyLjkzMDYgNS4zOTc3NSAxMy44MTA0QzUuNzMwNDcgMTMuODcxMiA1Ljg1MTcxIDEzLjY2NTggNS44NTE3MSAxMy40ODk1QzUuODUxNzEgMTMuMzMxNSA1Ljg0NiAxMi45MTM1IDUuODQyNzMgMTIuMzU4N0MzLjk5MzAxIDEyLjc2MDQgMy42MDI3MyAxMS40NjcxIDMuNjAyNzMgMTEuNDY3MUMzLjMwMDIyIDEwLjY5ODggMi44NjQyMyAxMC40OTQyIDIuODY0MjMgMTAuNDk0MkMyLjI2MDQ0IDEwLjA4MTkgMi45MDk5NSAxMC4wOTAxIDIuOTA5OTUgMTAuMDkwMUMzLjU3NzQyIDEwLjEzNyAzLjkyODUgMTAuNzc1NSAzLjkyODUgMTAuNzc1NUM0LjUyMTY3IDExLjc5MTYgNS40ODUxMiAxMS40OTgxIDUuODYzOTYgMTEuMzI3OUM1LjkyNDM4IDEwLjg5ODQgNi4wOTYyNSAxMC42MDUzIDYuMjg2MDggMTAuNDM5MUM0LjgwOTQ4IDEwLjI3MDkgMy4yNTY5NSA5LjcwMDYzIDMuMjU2OTUgNy4xNTI0MUMzLjI1Njk1IDYuNDI2MTUgMy41MTYxOCA1LjgzMjk4IDMuOTQxNTcgNS4zNjhDMy44NzI5OSA1LjE5OTggMy42NDQ3OCA0LjUyMzc1IDQuMDA2ODkgMy42MDgwN0M0LjAwNjg5IDMuNjA4MDcgNC41NjQ5NCAzLjQyOTI2IDUuODM1MzggNC4yODk0MUM2LjM2NTY4IDQuMTQyMDQgNi45MzQ3NyA0LjA2ODU2IDcuNTAwMTggNC4wNjU3QzguMDY1MTggNC4wNjg1NiA4LjYzMzg2IDQuMTQyMDQgOS4xNjQ5OCA0LjI4OTQxQzEwLjQzNDYgMy40MjkyNiAxMC45OTE4IDMuNjA4MDcgMTAuOTkxOCAzLjYwODA3QzExLjM1NDggNC41MjM3NSAxMS4xMjY2IDUuMTk5OCAxMS4wNTg0IDUuMzY4QzExLjQ4NDYgNS44MzI5OCAxMS43NDE4IDYuNDI2MTUgMTEuNzQxOCA3LjE1MjQxQzExLjc0MTggOS43MDcxNiAxMC4xODY4IDEwLjI2OTMgOC43MDU3MSAxMC40MzM4QzguOTQ0MTIgMTAuNjM5MiA5LjE1NjgxIDExLjA0NSA5LjE1NjgxIDExLjY2NTVDOS4xNTY4MSAxMi41NTQyIDkuMTQ4NjUgMTMuMjcxNSA5LjE0ODY1IDEzLjQ4OTVDOS4xNDg2NSAxMy42Njc1IDkuMjY4NjcgMTMuODc0NSA5LjYwNTg4IDEzLjgwOTVDMTIuMjQ2NCAxMi45MjgyIDE0LjE1IDEwLjQzNzUgMTQuMTUgNy41MDAyM0MxNC4xNSAzLjgyNzMgMTEuMTcyMyAwLjg1MDAwNiA3LjQ5OTM2IDAuODUwMDA2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sJHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTYgMS44MDAwMkM0LjM1MTk0IDEuODAwMDIgMS43OTk5NiA0LjM1MiAxLjc5OTk2IDcuNTAwMDJDMS43OTk5NiAxMC42NDggNC4zNTE5NCAxMy4yIDcuNDk5OTYgMTMuMkMxMC42NDggMTMuMiAxMy4yIDEwLjY0OCAxMy4yIDcuNTAwMDJDMTMuMiA0LjM1MiAxMC42NDggMS44MDAwMiA3LjQ5OTk2IDEuODAwMDJaTTAuODk5OTYzIDcuNTAwMDJDMC44OTk5NjMgMy44NTQ5NCAzLjg1NDg4IDAuOTAwMDI0IDcuNDk5OTYgMC45MDAwMjRDMTEuMTQ1IDAuOTAwMDI0IDE0LjEgMy44NTQ5NCAxNC4xIDcuNTAwMDJDMTQuMSAxMS4xNDUxIDExLjE0NSAxNC4xIDcuNDk5OTYgMTQuMUMzLjg1NDg4IDE0LjEgMC44OTk5NjMgMTEuMTQ1MSAwLjg5OTk2MyA3LjUwMDAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuNDk5OSA3Ljg5OTk4SDEuNDk5OTRWNy4wOTk5OEgxMy40OTk5VjcuODk5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjA5OTkxIDEzLjVWMS41SDcuODk5OTFWMTMuNUg3LjA5OTkxek0xMC4zNzUgNy40OTk5OEMxMC4zNzUgNS4zMjcyNCA5LjU5MzY0IDMuMTc3NzggOC4wNjE4MyAxLjc1NjU2TDguNTM3OTMgMS4yNDM0MUMxMC4yMzk2IDIuODIyMTggMTEuMDc1IDUuMTcyNzMgMTEuMDc1IDcuNDk5OTggMTEuMDc1IDkuODI3MjQgMTAuMjM5NiAxMi4xNzc4IDguNTM3OTMgMTMuNzU2Nkw4LjA2MTgzIDEzLjI0MzRDOS41OTM2NCAxMS44MjIyIDEwLjM3NSA5LjY3MjczIDEwLjM3NSA3LjQ5OTk4ek0zLjk5OTY5IDcuNUMzLjk5OTY5IDUuMTc2MTEgNC44MDc4NiAyLjgyNjc4IDYuNDU3NjggMS4yNDcxOUw2Ljk0MTc3IDEuNzUyODFDNS40NTgyIDMuMTczMjMgNC42OTk2OSA1LjMyMzg5IDQuNjk5NjkgNy41IDQuNjk5NyA5LjY3NjExIDUuNDU4MjIgMTEuODI2OCA2Ljk0MTc5IDEzLjI0NzJMNi40NTc2OSAxMy43NTI4QzQuODA3ODggMTIuMTczMiAzLjk5OTcgOS44MjM5IDMuOTk5NjkgNy41elwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5NiAzLjk1ODAxQzkuNjY5MjggMy45NTgwMSAxMS44NzUzIDQuMzU5MTUgMTMuMzcwNiA1LjE5NDQ4IDEzLjUzOTQgNS4yODg3NSAxMy41OTk4IDUuNTAxOTcgMTMuNTA1NSA1LjY3MDczIDEzLjQxMTMgNS44Mzk0OCAxMy4xOTggNS44OTk4NyAxMy4wMjkzIDUuODA1NiAxMS42Nzk0IDUuMDUxNTUgOS42MDc5OSA0LjY1ODAxIDcuNDk5OTYgNC42NTgwMSA1LjM5MTkyIDQuNjU4MDEgMy4zMjA1MiA1LjA1MTU1IDEuOTcwNjQgNS44MDU2IDEuODAxODggNS44OTk4NyAxLjU4ODY2IDUuODM5NDggMS40OTQzOSA1LjY3MDczIDEuNDAwMTMgNS41MDE5NyAxLjQ2MDUxIDUuMjg4NzUgMS42MjkyNyA1LjE5NDQ4IDMuMTI0NjYgNC4zNTkxNSA1LjMzMDYzIDMuOTU4MDEgNy40OTk5NiAzLjk1ODAxek03LjQ5OTk2IDEwLjg1QzkuNjY5MjggMTAuODUgMTEuODc1MyAxMC40NDg4IDEzLjM3MDYgOS42MTM1IDEzLjUzOTQgOS41MTkyNCAxMy41OTk4IDkuMzA2MDEgMTMuNTA1NSA5LjEzNzI2IDEzLjQxMTMgOC45Njg1IDEzLjE5OCA4LjkwODEyIDEzLjAyOTMgOS4wMDIzOCAxMS42Nzk0IDkuNzU2NDMgOS42MDc5OSAxMC4xNSA3LjQ5OTk2IDEwLjE1IDUuMzkxOTIgMTAuMTUgMy4zMjA1MiA5Ljc1NjQzIDEuOTcwNjQgOS4wMDIzOSAxLjgwMTg4IDguOTA4MTIgMS41ODg2NiA4Ljk2ODUgMS40OTQzOSA5LjEzNzI2IDEuNDAwMTMgOS4zMDYwMSAxLjQ2MDUxIDkuNTE5MjQgMS42MjkyNyA5LjYxMzUgMy4xMjQ2NiAxMC40NDg4IDUuMzMwNjMgMTAuODUgNy40OTk5NiAxMC44NXpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE50PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi41IDJIOFY3SDEzVjIuNUMxMyAyLjIyMzg2IDEyLjc3NjEgMiAxMi41IDJaTTEzIDhIOFYxM0gxMi41QzEyLjc3NjEgMTMgMTMgMTIuNzc2MSAxMyAxMi41VjhaTTcgN1YySDIuNUMyLjIyMzg2IDIgMiAyLjIyMzg2IDIgMi41VjdIN1pNMiA4VjEyLjVDMiAxMi43NzYxIDIuMjIzODYgMTMgMi41IDEzSDdWOEgyWk0yLjUgMUMxLjY3MTU3IDEgMSAxLjY3MTU3IDEgMi41VjEyLjVDMSAxMy4zMjg0IDEuNjcxNTcgMTQgMi41IDE0SDEyLjVDMTMuMzI4NCAxNCAxNCAxMy4zMjg0IDE0IDEyLjVWMi41QzE0IDEuNjcxNTcgMTMuMzI4NCAxIDEyLjUgMUgyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxGdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS40NDk5NSAwLjk0OTk1MUMxLjMxNzM0IDAuOTQ5OTUxIDEuMTkwMTYgMS4wMDI2MyAxLjA5NjQgMS4wOTY0QzEuMDAyNjMgMS4xOTAxNyAwLjk0OTk1MSAxLjMxNzM1IDAuOTQ5OTUxIDEuNDQ5OTVMMC45NDk5NjYgMy40NDk5NUMwLjk0OTk2OSAzLjcyNjEgMS4xNzM4MyAzLjk0OTk1IDEuNDQ5OTcgMy45NDk5NUMxLjcyNjExIDMuOTQ5OTUgMS45NDk5NyAzLjcyNjA5IDEuOTQ5OTcgMy40NDk5NUwxLjk0OTk1IDEuOTQ5OTVIMy40NDk5N0MzLjcyNjExIDEuOTQ5OTUgMy45NDk5NyAxLjcyNjA5IDMuOTQ5OTcgMS40NDk5NUMzLjk0OTk3IDEuMTczODEgMy43MjYxMSAwLjk0OTk1MSAzLjQ0OTk3IDAuOTQ5OTUxSDEuNDQ5OTVaTTUuOTQ5OTUgMC45NDk5NTFDNS42NzM4MSAwLjk0OTk1MSA1LjQ0OTk1IDEuMTczODEgNS40NDk5NSAxLjQ0OTk1QzUuNDQ5OTUgMS43MjYwOSA1LjY3MzgxIDEuOTQ5OTUgNS45NDk5NSAxLjk0OTk1SDguOTQ5OTVDOS4yMjYwOSAxLjk0OTk1IDkuNDQ5OTUgMS43MjYwOSA5LjQ0OTk1IDEuNDQ5OTVDOS40NDk5NSAxLjE3MzgxIDkuMjI2MDkgMC45NDk5NTEgOC45NDk5NSAwLjk0OTk1MUg1Ljk0OTk1Wk01LjQ0OTk1IDEzLjQ1QzUuNDQ5OTUgMTMuMTczOCA1LjY3MzgxIDEyLjk1IDUuOTQ5OTUgMTIuOTVIOC45NDk5NUM5LjIyNjA5IDEyLjk1IDkuNDQ5OTUgMTMuMTczOCA5LjQ0OTk1IDEzLjQ1QzkuNDQ5OTUgMTMuNzI2MSA5LjIyNjA5IDEzLjk1IDguOTQ5OTUgMTMuOTVINS45NDk5NUM1LjY3MzgxIDEzLjk1IDUuNDQ5OTUgMTMuNzI2MSA1LjQ0OTk1IDEzLjQ1Wk0xLjk0OTk1IDUuOTQ5OTVDMS45NDk5NSA1LjY3MzgxIDEuNzI2MDkgNS40NDk5NSAxLjQ0OTk1IDUuNDQ5OTVDMS4xNzM4MSA1LjQ0OTk1IDAuOTQ5OTUxIDUuNjczODEgMC45NDk5NTEgNS45NDk5NVY4Ljk0OTk1QzAuOTQ5OTUxIDkuMjI2MDkgMS4xNzM4MSA5LjQ0OTk1IDEuNDQ5OTUgOS40NDk5NUMxLjcyNjA5IDkuNDQ5OTUgMS45NDk5NSA5LjIyNjA5IDEuOTQ5OTUgOC45NDk5NVY1Ljk0OTk1Wk0xMy40NSA1LjQ0OTk1QzEzLjcyNjEgNS40NDk5NSAxMy45NSA1LjY3MzgxIDEzLjk1IDUuOTQ5OTVWOC45NDk5NUMxMy45NSA5LjIyNjA5IDEzLjcyNjEgOS40NDk5NSAxMy40NSA5LjQ0OTk1QzEzLjE3MzggOS40NDk5NSAxMi45NSA5LjIyNjA5IDEyLjk1IDguOTQ5OTVWNS45NDk5NUMxMi45NSA1LjY3MzgxIDEzLjE3MzggNS40NDk5NSAxMy40NSA1LjQ0OTk1Wk0xMS40NSAwLjk0OTk1MUMxMS4xNzM4IDAuOTQ5OTUxIDEwLjk1IDEuMTczODEgMTAuOTUgMS40NDk5NUMxMC45NSAxLjcyNjA5IDExLjE3MzggMS45NDk5NSAxMS40NSAxLjk0OTk1SDEyLjk0OTlWMy40NDk5NUMxMi45NDk5IDMuNzI2MDkgMTMuMTczOCAzLjk0OTk1IDEzLjQ0OTkgMy45NDk5NUMxMy43MjYxIDMuOTQ5OTUgMTMuOTQ5OSAzLjcyNjA5IDEzLjk0OTkgMy40NDk5NVYxLjQ0OTk1QzEzLjk0OTkgMS4xNzM4MSAxMy43MjUyIDAuOTQ5OTUxIDEzLjQ0OSAwLjk0OTk1MUgxMS40NVpNMS40NDk5NSAxMC45NUMxLjcyNjA5IDEwLjk1IDEuOTQ5OTUgMTEuMTczOCAxLjk0OTk1IDExLjQ1VjEyLjk1SDMuNDQ5OTdDMy43MjYxMSAxMi45NSAzLjk0OTk3IDEzLjE3MzggMy45NDk5NyAxMy40NUMzLjk0OTk3IDEzLjcyNjEgMy43MjYxMSAxMy45NSAzLjQ0OTk3IDEzLjk1SDEuNDQ5OTVDMS4xNzM4MSAxMy45NSAwLjk0OTk1MSAxMy43MjYxIDAuOTQ5OTUxIDEzLjQ1VjExLjQ1QzAuOTQ5OTUxIDExLjE3MzggMS4xNzM4MSAxMC45NSAxLjQ0OTk1IDEwLjk1Wk0xMy45NSAxMS40NUMxMy45NSAxMS4xNzM4IDEzLjcyNjEgMTAuOTUgMTMuNDUgMTAuOTVDMTMuMTczOCAxMC45NDk5IDEyLjk1IDExLjE3MzggMTIuOTUgMTEuNDQ5OUwxMi45NDkxIDEyLjk1SDExLjQ1QzExLjE3MzggMTIuOTUgMTAuOTUgMTMuMTczOCAxMC45NSAxMy40NUMxMC45NSAxMy43MjYxIDExLjE3MzggMTMuOTUgMTEuNDUgMTMuOTVIMTMuNDQ5OUMxMy43MjYxIDEzLjk1IDEzLjk0OTkgMTMuNzI2MSAxMy45NDk5IDEzLjQ1TDEzLjk1IDExLjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzY4OTJDMy44NDIyMiAwLjg3Njg5MiAwLjg3NzA3NSAzLjg0MjA0IDAuODc3MDc1IDcuNDk5NzJDMC44NzcwNzUgMTEuMTU3NCAzLjg0MjIyIDE0LjEyMjYgNy40OTk5MSAxNC4xMjI2QzExLjE1NzYgMTQuMTIyNiAxNC4xMjI3IDExLjE1NzQgMTQuMTIyNyA3LjQ5OTcyQzE0LjEyMjcgMy44NDIwNCAxMS4xNTc2IDAuODc2ODkyIDcuNDk5OTEgMC44NzY4OTJaTTcuMDAwMDMgMS44NDg2MUM0LjEwMTE0IDIuMTAxNyAxLjgyNzA3IDQuNTM1MTUgMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgMTAuNDY0MyA0LjEwMTE0IDEyLjg5NzcgNy4wMDAwMyAxMy4xNTA4VjEuODQ4NjFaTTguMDAwMDMgMTMuMTUwOEMxMC44OTg4IDEyLjg5NzYgMTMuMTcyNyAxMC40NjQyIDEzLjE3MjcgNy40OTk3MkMxMy4xNzI3IDQuNTM1MjQgMTAuODk4OCAyLjEwMTg1IDguMDAwMDMgMS44NDg2NFYxMy4xNTA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sV3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzY4OTJDMy44NDIyMiAwLjg3Njg5MiAwLjg3NzA3NSAzLjg0MjA0IDAuODc3MDc1IDcuNDk5NzJDMC44NzcwNzUgMTEuMTU3NCAzLjg0MjIyIDE0LjEyMjYgNy40OTk5MSAxNC4xMjI2QzExLjE1NzYgMTQuMTIyNiAxNC4xMjI3IDExLjE1NzQgMTQuMTIyNyA3LjQ5OTcyQzE0LjEyMjcgMy44NDIwNCAxMS4xNTc2IDAuODc2ODkyIDcuNDk5OTEgMC44NzY4OTJaTTcuNDk5ODggMS44MjY4OUM0LjM2Njg4IDEuODI2OSAxLjgyNzA3IDQuMzY2NzIgMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgMTAuNjMyNyA0LjM2Njg4IDEzLjE3MjUgNy40OTk4OCAxMy4xNzI2VjEuODI2ODlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx6dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS41IDNDMS4yMjM4NiAzIDEgMy4yMjM4NiAxIDMuNUMxIDMuNzc2MTQgMS4yMjM4NiA0IDEuNSA0SDEzLjVDMTMuNzc2MSA0IDE0IDMuNzc2MTQgMTQgMy41QzE0IDMuMjIzODYgMTMuNzc2MSAzIDEzLjUgM0gxLjVaTTEgNy41QzEgNy4yMjM4NiAxLjIyMzg2IDcgMS41IDdIMTMuNUMxMy43NzYxIDcgMTQgNy4yMjM4NiAxNCA3LjVDMTQgNy43NzYxNCAxMy43NzYxIDggMTMuNSA4SDEuNUMxLjIyMzg2IDggMSA3Ljc3NjE0IDEgNy41Wk0xIDExLjVDMSAxMS4yMjM5IDEuMjIzODYgMTEgMS41IDExSDEzLjVDMTMuNzc2MSAxMSAxNCAxMS4yMjM5IDE0IDExLjVDMTQgMTEuNzc2MSAxMy43NzYxIDEyIDEzLjUgMTJIMS41QzEuMjIzODYgMTIgMSAxMS43NzYxIDEgMTEuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEd0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02LjgxMTMgMS42NDcwNkM2LjYyMTg4IDIuODc5MTggNi42ODI2OCAzLjg4NTIzIDYuNzY4NDggNS4zMDQ5OUM2Ljc4NDE1IDUuNTY0MjYgNi44MDA2NSA1LjgzNzMyIDYuODE2NjEgNi4xMjgwOEM2LjgzMTExIDYuMzkyMDggNi42Mzc1OCA2LjYyMTcyIDYuMzc0OTUgNi42NTIxN0M2LjExMjMyIDYuNjgyNjIgNS44NzEzOCA2LjUwMzM0IDUuODI1MDkgNi4yNDMwNEw1Ljc0NzU0IDUuODA2OThDNS42NDQwMiA1LjE2NTI5IDUuNDgzNTUgNC4yNTQ4MSA1LjE3ODA3IDMuNDQ3NDFDNC44NjI0MSAyLjYxMzEyIDQuNDQ4NiAyLjA0MTIxIDMuOTM0MzYgMS44NjA0NEMzLjY0OTk0IDEuNzYxMDQgMy40MTkwMSAxLjg0Mjc5IDMuMjU4NjggMi4wMTA1MkMzLjA4NzQ2IDIuMTg5NjIgMi45OTc2IDIuNDcwNjUgMy4wNjI3IDIuNzUzOTlDMy4yMTQ2IDMuMzQ0MjQgMy40NDYyNyAzLjkxNjcgMy42OTgzNiA0LjUxODAyQzMuNzIwODIgNC41NzE1OCAzLjc0MzQ2IDQuNjI1NDMgMy43NjYyMSA0LjY3OTU0QzMuOTk1NCA1LjIyNDU3IDQuMjM2MTkgNS43OTcyIDQuNDE2NDQgNi4zOTA4MUw0LjQxNjkxIDYuMzkyMzhDNC41NjIgNi44NzU4NiA0LjY1NjQ2IDcuMjU5NSA0LjczMDg2IDcuNTYxNjVDNC43NjAzNCA3LjY4MTM4IDQuNzg2NjcgNy43ODgzMSA0LjgxMTc1IDcuODgzNTlDNC44Njc2OCA4LjA5NjA2IDQuNzc4MzYgOC4zMjAxNCA0LjU5MTYxIDguNDM1ODhDNC40MDQ4NiA4LjU1MTYxIDQuMTY0NDUgOC41MzE4OCAzLjk5OTA3IDguMzg3MjVDMy43Mzc0OSA4LjE1ODQ4IDMuNTE1IDcuOTI3ODQgMy4zMTgxNyA3LjcxODAyQzMuMjc2MjcgNy42NzMzNSAzLjIzNjAyIDcuNjMwMTggMy4xOTcwNSA3LjU4ODM4QzMuMDQ3NzcgNy40MjgyNiAyLjkxNzEyIDcuMjg4MTIgMi43ODMzNCA3LjE2MDI5QzIuNDU5ODkgNi44NTEyMiAyLjE4Mzk4IDYuNjgwMDQgMS44MDU4NSA2LjY0MzY5TDEuODAzMjQgNi42NDM0M0MxLjU2MTE3IDYuNjE4ODggMS40MTQwMiA2LjY2NDQxIDEuMzE3NTYgNi43MjYyN0MxLjIxODk5IDYuNzg5NDcgMS4xMTk4OCA2LjkwNDE0IDEuMDM3ODQgNy4xMTIzQzAuOTc2NTc2IDcuMjg0OTIgMS4wMTUxNSA3LjYyOTg3IDEuMTkyOSA3Ljk2OTExTDEuMTk3MjggNy45Nzc0N0MxLjQwMDg2IDguMzg0NTIgMS43NDQ3NSA4LjgxNTg3IDIuMTgxNDEgOS4yOTI5OUMyLjM5NzM5IDkuNTI4OTggMi42Mjg3MiA5Ljc2ODQ5IDIuODY5MzQgMTAuMDE3NEwyLjg3OTY2IDEwLjAyODFDMy4xMTU0NiAxMC4yNzIxIDMuMzU5NjIgMTAuNTI0NyAzLjU5NzEzIDEwLjc4MjdDNC40Mjg4IDExLjY4NjMgNS4yNzcwNiAxMi43NTM4IDUuNDYyNyAxNEgxMS41MDg3QzExLjU2MzYgMTIuNDM1MyAxMS44NzU2IDExLjI2OCAxMi4yODc1IDEwLjEzNDZDMTIuNDQ1NCA5LjcwMDQxIDEyLjYxMjEgOS4yODQxMiAxMi43ODI2IDguODU4MjlDMTMuMTA5NyA4LjA0MTM5IDEzLjQ1MDkgNy4xODkzNyAxMy43NzA1IDYuMTA4MjRDMTQuMDk4OSA0Ljk5NzM3IDE0LjAwOTcgNC4zNzAzMyAxMy44NjEzIDQuMDM5ODRDMTMuNzE3IDMuNzE4NTggMTMuNDkxNCAzLjYxNzg2IDEzLjM4MTYgMy41OTYwNkMxMy4xMzgxIDMuNTQ3NzQgMTMuMDM4NCAzLjYwOTQ3IDEyLjk2OTggMy42NzkwMUMxMi44NjcgMy43ODMxNiAxMi43Njk4IDMuOTgyNzMgMTIuNjkyMSA0LjMwMjY5QzEyLjYxNjYgNC42MTM0NSAxMi41NzUyIDQuOTY1MTcgMTIuNTMzIDUuMzI1MDFMMTIuNTI5OCA1LjM1Mjg1QzEyLjQ5MjQgNS42NzI0MiAxMi40NTA1IDYuMDMwMTYgMTIuMzY2NSA2LjMwMDk4QzEyLjMzODMgNi40MDY5OSAxMi4yODE5IDYuNTA0MDcgMTIuMTk3OSA2LjU3NTM5QzEyLjEzODIgNi42MjYxIDEyLjAxMDQgNi43MDgxOCAxMS44MzA5IDYuNjkzMTJDMTEuNTQyNCA2LjY2ODkxIDExLjM3MTIgNi40MjE0MyAxMS4zNjUgNi4xNDc4M0MxMS4zNTYgNS43NTQ1NCAxMS4zODgzIDUuMzU4NjQgMTEuNDA3NCA0Ljk2NjA4QzExLjQ0MjggNC4yMzY0NiAxMS40NzcgMy41MzM3IDExLjQyNDUgMi44MzQyTDExLjQyNDIgMi44MjkzNEMxMS4zOTE2IDIuMzI5OTcgMTEuMDQ5MyAyLjAwMjI4IDEwLjcwMDcgMS45MjI4QzEwLjUzMDUgMS44ODQwMSAxMC4zNjkgMS45MDYwMSAxMC4yMzQ3IDEuOTgzNUMxMC4xMDMgMi4wNTk0NiA5Ljk1NTM1IDIuMjEzMTggOS44NTc0IDIuNTEzOTRMOS44NTYzMSAyLjUxNzI2QzkuODE1MjUgMi42NDA0IDkuNzcyOTggMi44Nzc1MyA5LjczNjA2IDMuMjEyNEM5LjcwMDQ0IDMuNTM1NDIgOS42NzMzNyAzLjkxMjc5IDkuNjUxNTYgNC4yOTQxOEM5LjYzMjkgNC42MjAzMyA5LjYxNzg1IDQuOTU4NCA5LjYwNDM0IDUuMjYxOTRDOS41ODcyOCA1LjY0NTI5IDkuNTcyNjcgNS45NzM1NyA5LjU1NjMzIDYuMTUzMkM5LjU0OTgzIDYuMjI0NTkgOS41MjkzOSA2LjI5NDkzIDkuNDk1MDEgNi4zNTc4NUM5LjQ3MzU2IDYuMzk3MTEgOS4zNjExNSA2LjYwOTQ3IDkuMDcxMDYgNi42MTg0M0M4Ljc3OTE3IDYuNjI3NDQgOC42Mzk3NSA2LjQwMDU3IDguNjE2OTggNi4zNTkxOUM4LjU1NjM0IDYuMjQ4OTkgOC41NTA2NiA2LjExODA3IDguNTQ3NTQgNS45OTI4M0M4LjU0NDc0IDUuODgwNjQgOC41NDI5NCA1LjcxNzk4IDguNTQxNzQgNS41NDc2N0M4LjUzOTM1IDUuMjA1ODIgOC41MzkzNSA0LjgxOTE5IDguNTM5MzUgNC43MDk1MkM4LjUzOTM1IDMuNjY1NyA4LjUzODM4IDIuNjUzNzIgOC40NDcxNCAxLjY0MzcyQzguMzkxODMgMS4yNDEyNyA4LjA2Mjc4IDEuMDA0NTUgNy42NDM2IDEuMDAwMDVDNy4yMjM5OSAwLjk5NTU1MiA2Ljg3OTE4IDEuMjI3MDQgNi44MTEzIDEuNjQ3MDZaTTkuNDEyMTkgMS4zNjE3QzkuMjE0NjkgMC40NDg0ODQgOC4zOTkxMyAwLjAwODEwMzI0IDcuNjU0MzMgMC4wMDAxMTE1NEM2Ljg2NDUyIC0wLjAwODM2MzA4IDUuOTg3NjEgMC40NjU4ODEgNS44MjM2NSAxLjQ5MDM3TDUuODIzMTggMS40OTMzNEM1Ljc4MjM5IDEuNzU4NCA1Ljc1MjI5IDIuMDE0ODEgNS43MzA5IDIuMjY2NTJDNS4zOTQyMyAxLjY3MzY0IDQuOTI2MjIgMS4xNDg5NCA0LjI2NTUgMC45MTY4NTlDMy41ODY2MSAwLjY3OTMxMiAyLjk0OTIgMC44ODcwODcgMi41MzU4MiAxLjMxOTUyQzIuMTM0MTUgMS43Mzk3MSAxLjk0NDM4IDIuMzY3NDIgMi4wOTAzMSAyLjk4NzQ2TDIuMDkyNjkgMi45OTcxM0MyLjI2NDc4IDMuNjY4MDggMi41MjM5NiA0LjMwMzE2IDIuNzc2MTMgNC45MDQ2NUMyLjc5ODE0IDQuOTU3MTcgMi44MjAxIDUuMDA5NDEgMi44NDE5NCA1LjA2MTM5QzMuMDIxMzkgNS40ODg0MiAzLjE5Mzc4IDUuODk4NjYgMy4zMzg3MSA2LjMxMjU2QzIuOTY0MDQgNS45ODE0MiAyLjUxOTI1IDUuNzA3OTYgMS45MDI3NiA1LjY0ODRDMS40ODg2NSA1LjYwNjYzIDEuMTAzOTEgNS42NzUzNiAwLjc3NzgwNSA1Ljg4NDQ0QzAuNDU0MjM5IDYuMDkxOSAwLjI0MDY3MSA2LjQwNDA1IDAuMTA0MTg3IDYuNzU0MDZMMC4xMDA4NjggNi43NjI4MUMtMC4xMDE4NCA3LjMxMjg2IDAuMDY2MzMxMiA3Ljk3MTU3IDAuMzA0ODk1IDguNDI4OTdDMC41NzM3MDQgOC45NjQ3NCAwLjk5NjEwNCA5LjQ3OTA0IDEuNDQzNzIgOS45NjgxM0MxLjY3MDQ2IDEwLjIxNTkgMS45MTEzNiAxMC40NjUyIDIuMTUwMzMgMTAuNzEyNEwyLjE1NjgyIDEwLjcxOTFDMi4zOTUyNCAxMC45NjU4IDIuNjMyMTcgMTEuMjEwOSAyLjg2MTM0IDExLjQ1OTlDMy44MDkzNyAxMi40OSA0LjUwMDAyIDEzLjQ2MzIgNC41MDAwMiAxNC41QzQuNTAwMDIgMTQuNzc2MSA0LjcyMzg4IDE1IDUuMDAwMDIgMTVIMTJDMTIuMjc2MiAxNSAxMi41IDE0Ljc3NjEgMTIuNSAxNC41QzEyLjUgMTIuODIxMiAxMi44MDIxIDExLjY0NjIgMTMuMjI3NCAxMC40NzYyQzEzLjM2NTMgMTAuMDk2OCAxMy41MjE2IDkuNzA1NzkgMTMuNjg2OCA5LjI5MjQ3QzE0LjAyMzggOC40NDkyMiAxNC4zOTggNy41MTI5OCAxNC43Mjk1IDYuMzkxNzVDMTUuMDk1NiA1LjE1MzI0IDE1LjA1NTkgNC4yNTkwNCAxNC43NzM1IDMuNjMwMTdDMTQuNDg3IDIuOTkyMDggMTMuOTc5OCAyLjY5NTMgMTMuNTc2MyAyLjYxNTJDMTMuMTI3NiAyLjUyNjE0IDEyLjczNjcgMi42MDQ3NSAxMi40MjY4IDIuODMwODFDMTIuNDI1MyAyLjgwNzczIDEyLjQyMzYgMi43ODQ2OCAxMi40MjE5IDIuNzYxNjdDMTIuMzU4NyAxLjgxMDUgMTEuNjkwNyAxLjEyMjg1IDEwLjkyMyAwLjk0NzgyMUMxMC41MzQ2IDAuODU5Mjg3IDEwLjExMTEgMC45MDAzOTMgOS43MzUwOSAxLjExNzI0QzkuNjE4NTIgMS4xODQ0NiA5LjUxMDU1IDEuMjY2MjMgOS40MTIxOSAxLjM2MTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxxdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC43NTQzMiAyLjA1MDJDOC41MDU3OSAyLjA1MDIgOC4zMDQzMiAyLjI1MTY3IDguMzA0MzIgMi41MDAyQzguMzA0MzIgMi43NDg3MyA4LjUwNTc5IDIuOTUwMiA4Ljc1NDMyIDIuOTUwMkg5Ljk0OTk3VjcuMDUwMDRINS4wNDk5N1YyLjk1MDJINi4yNTQzMkM2LjUwMjg1IDIuOTUwMiA2LjcwNDMyIDIuNzQ4NzMgNi43MDQzMiAyLjUwMDJDNi43MDQzMiAyLjI1MTY3IDYuNTAyODUgMi4wNTAyIDYuMjU0MzIgMi4wNTAySDIuNzU0MzJDMi41MDU3OSAyLjA1MDIgMi4zMDQzMiAyLjI1MTY3IDIuMzA0MzIgMi41MDAyQzIuMzA0MzIgMi43NDg3MyAyLjUwNTc5IDIuOTUwMiAyLjc1NDMyIDIuOTUwMkgzLjk0OTk3VjEyLjA1MDJIMi43NTQzMkMyLjUwNTc5IDEyLjA1MDIgMi4zMDQzMiAxMi4yNTE3IDIuMzA0MzIgMTIuNTAwMkMyLjMwNDMyIDEyLjc0ODcgMi41MDU3OSAxMi45NTAyIDIuNzU0MzIgMTIuOTUwMkg2LjI1NDMyQzYuNTAyODUgMTIuOTUwMiA2LjcwNDMyIDEyLjc0ODcgNi43MDQzMiAxMi41MDAyQzYuNzA0MzIgMTIuMjUxNyA2LjUwMjg1IDEyLjA1MDIgNi4yNTQzMiAxMi4wNTAySDUuMDQ5OTdWNy45NTAwNEg5Ljk0OTk3VjEyLjA1MDJIOC43NTQzMkM4LjUwNTc5IDEyLjA1MDIgOC4zMDQzMiAxMi4yNTE3IDguMzA0MzIgMTIuNTAwMkM4LjMwNDMyIDEyLjc0ODcgOC41MDU3OSAxMi45NTAyIDguNzU0MzIgMTIuOTUwMkgxMi4yNTQzQzEyLjUwMjggMTIuOTUwMiAxMi43MDQzIDEyLjc0ODcgMTIuNzA0MyAxMi41MDAyQzEyLjcwNDMgMTIuMjUxNyAxMi41MDI4IDEyLjA1MDIgMTIuMjU0MyAxMi4wNTAySDExLjA1VjIuOTUwMkgxMi4yNTQzQzEyLjUwMjggMi45NTAyIDEyLjcwNDMgMi43NDg3MyAxMi43MDQzIDIuNTAwMkMxMi43MDQzIDIuMjUxNjcgMTIuNTAyOCAyLjA1MDIgMTIuMjU0MyAyLjA1MDJIOC43NTQzMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFl0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjE4MTMgMS42ODE3OUM3LjM1NzA0IDEuNTA2MDUgNy42NDE5NiAxLjUwNjA1IDcuODE3NyAxLjY4MTc5TDEwLjMxNzcgNC4xODE3OUMxMC40OTM0IDQuMzU3NTMgMTAuNDkzNCA0LjY0MjQ1IDEwLjMxNzcgNC44MTgxOUMxMC4xNDIgNC45OTM5MiA5Ljg1NzA0IDQuOTkzOTIgOS42ODEzIDQuODE4MTlMNy45NDk1IDMuMDg2MzhMNy45NDk1IDExLjkxMzZMOS42ODEzIDEwLjE4MThDOS44NTcwNCAxMC4wMDYxIDEwLjE0MiAxMC4wMDYxIDEwLjMxNzcgMTAuMTgxOEMxMC40OTM0IDEwLjM1NzUgMTAuNDkzNCAxMC42NDI0IDEwLjMxNzcgMTAuODE4Mkw3LjgxNzcgMTMuMzE4MkM3LjczMzMxIDEzLjQwMjYgNy42MTg4NSAxMy40NSA3LjQ5OTUgMTMuNDVDNy4zODAxNSAxMy40NSA3LjI2NTY5IDEzLjQwMjYgNy4xODEzIDEzLjMxODJMNC42ODEzIDEwLjgxODJDNC41MDU1NyAxMC42NDI0IDQuNTA1NTcgMTAuMzU3NSA0LjY4MTMgMTAuMTgxOEM0Ljg1NzA0IDEwLjAwNjEgNS4xNDE5NiAxMC4wMDYxIDUuMzE3NyAxMC4xODE4TDcuMDQ5NSAxMS45MTM2TDcuMDQ5NSAzLjA4NjM4TDUuMzE3NyA0LjgxODE5QzUuMTQxOTYgNC45OTM5MiA0Ljg1NzA0IDQuOTkzOTIgNC42ODEzIDQuODE4MTlDNC41MDU1NyA0LjY0MjQ1IDQuNTA1NTcgNC4zNTc1MyA0LjY4MTMgNC4xODE3OUw3LjE4MTMgMS42ODE3OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEt0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjA3OTI2IDAuMjIyMjUzQzcuMzEyNzUgLTAuMDA3NDM0IDcuNjg3MyAtMC4wMDc0MzQgNy45MjA3OSAwLjIyMjI1M0wxNC42NzA4IDYuODYyMjdDMTQuOTA3IDcuMDk0NjUgMTQuOTEwMSA3LjQ3NDUzIDE0LjY3NzggNy43MTA3NkMxNC40NDU0IDcuOTQ3IDE0LjA2NTUgNy45NTAxMiAxMy44MjkzIDcuNzE3NzNMMTMgNi45MDIwMVYxMi41QzEzIDEyLjc3NjEgMTIuNzc2MiAxMyAxMi41IDEzSDIuNTAwMDJDMi4yMjM4OCAxMyAyLjAwMDAyIDEyLjc3NjEgMi4wMDAwMiAxMi41VjYuOTAyMDFMMS4xNzA3OSA3LjcxNzczQzAuOTM0NTU4IDcuOTUwMTIgMC41NTQ2NzIgNy45NDcgMC4zMjIyOSA3LjcxMDc2QzAuMDg5OTA3OSA3LjQ3NDUzIDAuMDkzMDI4MyA3LjA5NDY1IDAuMzI5MjYgNi44NjIyN0w3LjA3OTI2IDAuMjIyMjUzWk03LjUwMDAyIDEuNDkxNjNMMTIgNS45MTgzMVYxMkgxMFY4LjQ5OTk5QzEwIDguMjIzODUgOS43NzYxNyA3Ljk5OTk5IDkuNTAwMDIgNy45OTk5OUg2LjUwMDAyQzYuMjIzODggNy45OTk5OSA2LjAwMDAyIDguMjIzODUgNi4wMDAwMiA4LjQ5OTk5VjEySDMuMDAwMDJWNS45MTgzMUw3LjUwMDAyIDEuNDkxNjNaTTcuMDAwMDIgMTJIOS4wMDAwMlY4Ljk5OTk5SDcuMDAwMDJWMTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxYdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDAuMDAzMjk1OUM2LjgwNDczIDAuMDAzMjk1OSA2LjI0OTUzIDAuMjgxMTA2IDYuMjUgMC43NDk5OTVDNi4yNSAwLjk5NzI1OCA2LjQyNDQ2IDEuMTIwMTQgNi41NzY4NyAxLjIyNzQ5QzYuNjk1MDcgMS4zMTA3NCA2LjggMS4zODQ2NSA2LjggMS41QzYuOCAxLjcwNzEgNi4wNjIyNCAxLjc0MjY0IDUuMTk3ODkgMS43ODQyN0MzLjk3NTUzIDEuODQzMTQgMi41IDEuOTE0MjEgMi41IDIuNUMyLjUgMi43NzYxNCAyLjcyMzg2IDMgMyAzSDEyQzEyLjI3NjEgMyAxMi41IDIuNzc2MTQgMTIuNSAyLjVDMTIuNSAxLjkxNDIxIDExLjAyNDUgMS44NDMxNCA5LjgwMjExIDEuNzg0MjdDOC45Mzc3NiAxLjc0MjY0IDguMiAxLjcwNzEgOC4yIDEuNUM4LjIgMS4zODQ2NSA4LjMwNDkzIDEuMzEwNzQgOC40MjMxMyAxLjIyNzQ5QzguNTc1NTQgMS4xMjAxNCA4Ljc1IDAuOTk3MjU4IDguNzUgMC43NDk5OTVDOC43NTA0NyAwLjI4MTEwNiA4LjE5NTI3IDAuMDAzMjk1OSA3LjUgMC4wMDMyOTU5Wk0yLjg5NDUxIDYuMTIyNjZDMi4yNTgwNiA2LjUyNDcxIDEuOTA0MTcgNy4zMTExOCAyLjAyNDczIDguMDU1NkwyLjgzNTg4IDEyLjQ3NzJDMy4wMDk5MyAxMy4zNTYyIDMuNzYyOSAxNCA0LjY2MDYxIDE0SDEwLjMzNzNDMTEuMjM1NCAxNCAxMS45ODg0IDEzLjM1NjIgMTIuMTYyNSAxMi40NzcyTDEyLjk3MzYgOC4wNTYwN0MxMy4wODkgNy4zMjM1OCAxMi44Mjg0IDYuNTMyNzYgMTIuMTMzMSA2LjA5MzczQzExLjcyODMgNS44MzAxMyAxMS42NDEyIDUuMzMyMzEgMTIuMTMzMSA1LjEyNzk2QzEyLjgyODQgNC44NjQzNSAxMi42OTQ4IDQgMTIgNEgxMC4zMDAxSDYuODAwMDVIMi45OTk5NkMyLjMwNDY5IDQgMi4xOTg3OCA0Ljg5MzI4IDIuODk0NTEgNS4xNTY4OUMzLjM4NjQyIDUuMzMyMzEgMy4yOTkzOSA1LjgzMDEzIDIuODk0NTEgNi4xMjI2NlpNOC4yMDAwNiA2LjI1QzguMjAwMDYgNS44MTc2OSA4LjA4NTcyIDUuMzc2MTUgNy45MDYzNSA1TDQuMTEwOTMgNUM0LjIwNjI2IDUuMjEzMTIgNC4yNDE5IDUuNDM4ODkgNC4yMjkwNCA1LjY1NTIxQzQuMTk1MjIgNi4yMjQxMiAzLjg0NTg3IDYuNjY4OTkgMy40ODAxNiA2LjkzMzIyTDMuNDU0OTIgNi45NTE0NkwzLjQyODU4IDYuOTY4MUMzLjEzNDA3IDcuMTU0MTQgMi45NTgwMSA3LjUzOTg5IDMuMDEwNTggNy44ODc0OUwzLjgxNzk3IDEyLjI4ODZDMy45MDUxMyAxMi43MTU0IDQuMjYxNDggMTMgNC42NjA2MSAxM0gxMC4zMzczQzEwLjczNyAxMyAxMS4wOTMyIDEyLjcxNTMgMTEuMTgwNCAxMi4yODg2TDExLjk4NzQgNy44ODk4QzEyLjA0OCA3LjQ4MjQ3IDExLjg5NTQgNy4xMjYzMSAxMS41OTkyIDYuOTM5MjdMMTEuNTg3NSA2LjkzMTg0TDExLjU4NzUgNi45MzE3NkMxMS4xOTQ3IDYuNjc2MDIgMTAuODMzMSA2LjIyNzg1IDEwLjc5ODYgNS42NDc5OEMxMC43ODQ2IDUuNDEyIDEwLjgyNjQgNS4xOTM5NyAxMC45MTEyIDVIOS4wNTUxN0M5LjAxOTg3IDUuMTQ2MTEgOS4wMDAwNiA1LjMxMjAxIDkuMDAwMDYgNS41QzkuMDAwMDYgNS45NzQ1IDkuMjE2NzkgNi4zNzEyNyA5LjQ0MzY3IDYuNzg2NjJDOS42OTI4NCA3LjI0Mjc4IDkuOTU0MjUgNy43MjEzNiA5Ljk1NDI1IDguMzQ5OTNDOS45NTQyNSA5LjI2OTggOS40OTg2OCA5Ljg0MjA1IDguNjIxODkgOS44NDIwNUM4LjEzMjA2IDkuODQyMDUgNy41NzgxOCA5LjQ2MDk3IDcuNTc4MTggOC43NTc4MUM3LjU3ODE4IDguMzUyNzkgNy43MTU1OCA4LjAxNjQ2IDcuODYxMjEgNy42NTk5OEM4LjAyNTQgNy4yNTgwNiA4LjIwMDA2IDYuODMwNTEgOC4yMDAwNiA2LjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTE0IDExLjAwMDFWNC4wMDAwNkwxIDQuMDAwMDZMMSAxMS4wMDAxSDE0Wk0xNSA0LjAwMDA2VjExLjAwMDFDMTUgMTEuNTUyMyAxNC41NTIzIDEyLjAwMDEgMTQgMTIuMDAwMUgxQzAuNDQ3NzE1IDEyLjAwMDEgMCAxMS41NTIzIDAgMTEuMDAwMVY0LjAwMDA2QzAgMy40NDc3OCAwLjQ0NzcxNSAzLjAwMDA2IDEgMy4wMDAwNkgxNEMxNC41NTIzIDMuMDAwMDYgMTUgMy40NDc3OCAxNSA0LjAwMDA2Wk0yIDUuMjVDMiA1LjExMTkzIDIuMTExOTMgNSAyLjI1IDVINS43NUM1Ljg4ODA3IDUgNiA1LjExMTkzIDYgNS4yNVY5Ljc1QzYgOS44ODgwNyA1Ljg4ODA3IDEwIDUuNzUgMTBIMi4yNUMyLjExMTkzIDEwIDIgOS44ODgwNyAyIDkuNzVWNS4yNVpNNy41IDdDNy4yMjM4NiA3IDcgNy4yMjM4NiA3IDcuNUM3IDcuNzc2MTQgNy4yMjM4NiA4IDcuNSA4SDEwLjVDMTAuNzc2MSA4IDExIDcuNzc2MTQgMTEgNy41QzExIDcuMjIzODYgMTAuNzc2MSA3IDEwLjUgN0g3LjVaTTcgOS41QzcgOS4yMjM4NiA3LjIyMzg2IDkgNy41IDlIMTIuNUMxMi43NzYxIDkgMTMgOS4yMjM4NiAxMyA5LjVDMTMgOS43NzYxNCAxMi43NzYxIDEwIDEyLjUgMTBINy41QzcuMjIzODYgMTAgNyA5Ljc3NjE0IDcgOS41Wk03LjUgNUM3LjIyMzg2IDUgNyA1LjIyMzg2IDcgNS41QzcgNS43NzYxNCA3LjIyMzg2IDYgNy41IDZIMTEuNUMxMS43NzYxIDYgMTIgNS43NzYxNCAxMiA1LjVDMTIgNS4yMjM4NiAxMS43NzYxIDUgMTEuNSA1SDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFF0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjUgMUgxMi41QzEzLjMyODQgMSAxNCAxLjY3MTU3IDE0IDIuNVYxMi41QzE0IDEzLjMyODQgMTMuMzI4NCAxNCAxMi41IDE0SDIuNUMxLjY3MTU3IDE0IDEgMTMuMzI4NCAxIDEyLjVWMi41QzEgMS42NzE1NyAxLjY3MTU3IDEgMi41IDFaTTIuNSAyQzIuMjIzODYgMiAyIDIuMjIzODYgMiAyLjVWOC4zNjM2TDMuNjgxOCA2LjY4MThDMy43NjgwOSA2LjU5NTUxIDMuODg1NzIgNi41NDc5NyA0LjAwNzc0IDYuNTUwMDdDNC4xMjk3NSA2LjU1MjE2IDQuMjQ1NjggNi42MDM3MiA0LjMyODk1IDYuNjkyOTNMNy44NzM1NSAxMC40OTAxTDEwLjY4MTggNy42ODE4QzEwLjg1NzUgNy41MDYwNyAxMS4xNDI1IDcuNTA2MDcgMTEuMzE4MiA3LjY4MThMMTMgOS4zNjM2VjIuNUMxMyAyLjIyMzg2IDEyLjc3NjEgMiAxMi41IDJIMi41Wk0yIDEyLjVWOS42MzY0TDMuOTg4ODcgNy42NDc1M0w3LjUzMTEgMTEuNDQyMUw4Ljk0MTEzIDEzSDIuNUMyLjIyMzg2IDEzIDIgMTIuNzc2MSAyIDEyLjVaTTEyLjUgMTNIMTAuMTU1TDguNDgzMzYgMTEuMTUzTDExIDguNjM2NEwxMyAxMC42MzY0VjEyLjVDMTMgMTIuNzc2MSAxMi43NzYxIDEzIDEyLjUgMTNaTTYuNjQ5MjIgNS41QzYuNjQ5MjIgNS4wMzAxMyA3LjAzMDEzIDQuNjQ5MjIgNy41IDQuNjQ5MjJDNy45Njk4NyA0LjY0OTIyIDguMzUwNzggNS4wMzAxMyA4LjM1MDc4IDUuNUM4LjM1MDc4IDUuOTY5ODcgNy45Njk4NyA2LjM1MDc4IDcuNSA2LjM1MDc4QzcuMDMwMTMgNi4zNTA3OCA2LjY0OTIyIDUuOTY5ODcgNi42NDkyMiA1LjVaTTcuNSAzLjc0OTIyQzYuNTMzMDcgMy43NDkyMiA1Ljc0OTIyIDQuNTMzMDcgNS43NDkyMiA1LjVDNS43NDkyMiA2LjQ2NjkzIDYuNTMzMDcgNy4yNTA3OCA3LjUgNy4yNTA3OEM4LjQ2NjkzIDcuMjUwNzggOS4yNTA3OCA2LjQ2NjkzIDkuMjUwNzggNS41QzkuMjUwNzggNC41MzMwNyA4LjQ2NjkzIDMuNzQ5MjIgNy41IDMuNzQ5MjJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxlbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3Njg5MkMzLjg0MjIyIDAuODc2ODkyIDAuODc3MDc1IDMuODQyMDQgMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAxMS4xNTc0IDMuODQyMjIgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMTEuMTU3NiAxNC4xMjI2IDE0LjEyMjcgMTEuMTU3NCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAzLjg0MjA0IDExLjE1NzYgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MlpNMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgNC4zNjY3MSA0LjM2Njg5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5QzEwLjYzMjkgMS44MjY4OSAxMy4xNzI3IDQuMzY2NzEgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgMTAuNjMyNyAxMC42MzI5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzQuMzY2ODkgMTMuMTcyNiAxLjgyNzA3IDEwLjYzMjcgMS44MjcwNyA3LjQ5OTcyWk04LjI0OTkyIDQuNDk5OTlDOC4yNDk5MiA0LjkxNDIgNy45MTQxMyA1LjI0OTk5IDcuNDk5OTIgNS4yNDk5OUM3LjA4NTcxIDUuMjQ5OTkgNi43NDk5MiA0LjkxNDIgNi43NDk5MiA0LjQ5OTk5QzYuNzQ5OTIgNC4wODU3NyA3LjA4NTcxIDMuNzQ5OTkgNy40OTk5MiAzLjc0OTk5QzcuOTE0MTMgMy43NDk5OSA4LjI0OTkyIDQuMDg1NzcgOC4yNDk5MiA0LjQ5OTk5Wk02LjAwMDAzIDUuOTk5OTlINi41MDAwM0g3LjUwMDAzQzcuNzc2MTggNS45OTk5OSA4LjAwMDAzIDYuMjIzODQgOC4wMDAwMyA2LjQ5OTk5VjkuOTk5OTlIOC41MDAwM0g5LjAwMDAzVjExSDguNTAwMDNINy41MDAwM0g2LjUwMDAzSDYuMDAwMDNWOS45OTk5OUg2LjUwMDAzSDcuMDAwMDNWNi45OTk5OUg2LjUwMDAzSDYuMDAwMDNWNS45OTk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHRuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02LjUgMUM2LjIyMzg2IDEgNiAxLjIyMzg2IDYgMS41QzYgMS43NzYxNCA2LjIyMzg2IDIgNi41IDJDNy4xMjY3MSAyIDcuNDU3MTggMi4yMDAyOCA3LjY1NTYzIDIuNDc4MTJDNy44NzgxIDIuNzg5NTcgOCAzLjI4ODM3IDggNFYxMUM4IDExLjcxMTYgNy44NzgxIDEyLjIxMDQgNy42NTU2MyAxMi41MjE5QzcuNDU3MTggMTIuNzk5NyA3LjEyNjcxIDEzIDYuNSAxM0M2LjIyMzg2IDEzIDYgMTMuMjIzOSA2IDEzLjVDNiAxMy43NzYxIDYuMjIzODYgMTQgNi41IDE0QzcuMzczMjkgMTQgOC4wNDI4MiAxMy43MDAzIDguNDY5MzcgMTMuMTAzMUM4LjQ3OTc2IDEzLjA4ODYgOC40ODk5NyAxMy4wNzM5IDguNSAxMy4wNTkxQzguNTEwMDMgMTMuMDczOSA4LjUyMDI0IDEzLjA4ODYgOC41MzA2MyAxMy4xMDMxQzguOTU3MTggMTMuNzAwMyA5LjYyNjcxIDE0IDEwLjUgMTRDMTAuNzc2MSAxNCAxMSAxMy43NzYxIDExIDEzLjVDMTEgMTMuMjIzOSAxMC43NzYxIDEzIDEwLjUgMTNDOS44NzMyOSAxMyA5LjU0MjgyIDEyLjc5OTcgOS4zNDQzNyAxMi41MjE5QzkuMTIxOSAxMi4yMTA0IDkgMTEuNzExNiA5IDExVjRDOSAzLjI4ODM3IDkuMTIxOSAyLjc4OTU3IDkuMzQ0MzcgMi40NzgxMkM5LjU0MjgyIDIuMjAwMjggOS44NzMyOSAyIDEwLjUgMkMxMC43NzYxIDIgMTEgMS43NzYxNCAxMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxQzkuNjI2NzEgMSA4Ljk1NzE4IDEuMjk5NzIgOC41MzA2MyAxLjg5Njg4QzguNTIwMjQgMS45MTE0MyA4LjUxMDAzIDEuOTI2MTEgOC41IDEuOTQwOUM4LjQ4OTk3IDEuOTI2MTEgOC40Nzk3NiAxLjkxMTQzIDguNDY5MzcgMS44OTY4OEM4LjA0MjgyIDEuMjk5NzIgNy4zNzMyOSAxIDYuNSAxWk0xNCA1SDExVjRIMTRDMTQuNTUyMyA0IDE1IDQuNDQ3NzIgMTUgNVYxMEMxNSAxMC41NTIzIDE0LjU1MjMgMTEgMTQgMTFIMTFWMTBIMTRWNVpNNiA0VjVIMUwxIDEwSDZWMTFIMUMwLjQ0NzcxNSAxMSAwIDEwLjU1MjMgMCAxMFY1QzAgNC40NDc3MiAwLjQ0NzcxNSA0IDEgNEg2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNDk5OTggMC41QzUuNDk5OTggMC4yMjM4NTggNS43MjM4MyAwIDUuOTk5OTggMEg3LjQ5OTk4SDguOTk5OThDOS4yNzYxMiAwIDkuNDk5OTggMC4yMjM4NTggOS40OTk5OCAwLjVDOS40OTk5OCAwLjc3NjE0MiA5LjI3NjEyIDEgOC45OTk5OCAxSDcuOTk5OThWMi4xMTkyMkM5LjA5ODMyIDIuMjA0MDkgMTAuMTE5IDIuNTY2MjIgMTAuOTkyIDMuMTM1NzJDMTEuMDExNiAzLjEwODUxIDExLjAzMzYgMy4wODI1MiAxMS4wNTggMy4wNTgwNkwxMi4wNTggMi4wNTgwNkMxMi4zMDIxIDEuODEzOTggMTIuNjk3OCAxLjgxMzk4IDEyLjk0MTkgMi4wNTgwNkMxMy4xODYgMi4zMDIxNCAxMy4xODYgMi42OTc4NiAxMi45NDE5IDIuOTQxOTRMMTEuOTY3IDMuOTE2ODJDMTMuMTU5NSA1LjA3OTI1IDEzLjkgNi43MDMxNCAxMy45IDguNDk5OThDMTMuOSAxMi4wMzQ2IDExLjAzNDYgMTQuOSA3LjQ5OTk4IDE0LjlDMy45NjUzNSAxNC45IDEuMDk5OTggMTIuMDM0NiAxLjA5OTk4IDguNDk5OThDMS4wOTk5OCA1LjEzMzYxIDMuNjk5MDQgMi4zNzQzIDYuOTk5OTggMi4xMTkyMlYxSDUuOTk5OThDNS43MjM4MyAxIDUuNDk5OTggMC43NzYxNDIgNS40OTk5OCAwLjVaTTIuMDk5OTggOC40OTk5OEMyLjA5OTk4IDUuNTE3NjQgNC41MTc2NCAzLjA5OTk4IDcuNDk5OTggMy4wOTk5OEMxMC40ODIzIDMuMDk5OTggMTIuOSA1LjUxNzY0IDEyLjkgOC40OTk5OEMxMi45IDExLjQ4MjMgMTAuNDgyMyAxMy45IDcuNDk5OTggMTMuOUM0LjUxNzY0IDEzLjkgMi4wOTk5OCAxMS40ODIzIDIuMDk5OTggOC40OTk5OFpNNy40OTk5OCA4LjQ5OTk4VjQuMDk5OThDNS4wNjk5MiA0LjA5OTk4IDMuMDk5OTggNi4wNjk5MiAzLjA5OTk4IDguNDk5OThDMy4wOTk5OCAxMC45MyA1LjA2OTkyIDEyLjkgNy40OTk5OCAxMi45QzguNzE1IDEyLjkgOS44MTUgMTIuNDA3NSAxMC42MTEyIDExLjYxMTJMNy40OTk5OCA4LjQ5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNzU0MzIgMC44MTk1MzdDNy41OTc0MiAwLjcyNjgyMSA3LjQwMjUgMC43MjY4MjEgNy4yNDU1OSAwLjgxOTUzN0wxLjc0NTU5IDQuMDY5NTRDMS41OTMzNiA0LjE1OTQ5IDEuNDk5OTYgNC4zMjMxNyAxLjQ5OTk2IDQuNUMxLjQ5OTk2IDQuNjc2ODMgMS41OTMzNiA0Ljg0MDUxIDEuNzQ1NTkgNC45MzA0Nkw3LjI0NTU5IDguMTgwNDZDNy40MDI1IDguMjczMTggNy41OTc0MiA4LjI3MzE4IDcuNzU0MzIgOC4xODA0NkwxMy4yNTQzIDQuOTMwNDZDMTMuNDA2NiA0Ljg0MDUxIDEzLjUgNC42NzY4MyAxMy41IDQuNUMxMy41IDQuMzIzMTcgMTMuNDA2NiA0LjE1OTQ5IDEzLjI1NDMgNC4wNjk1NEw3Ljc1NDMyIDAuODE5NTM3Wk03LjQ5OTk2IDcuMTY5MjNMMi45ODI4IDQuNUw3LjQ5OTk2IDEuODMwNzdMMTIuMDE3MSA0LjVMNy40OTk5NiA3LjE2OTIzWk0xLjU2OTUgNy40OTU2NEMxLjcwOTk4IDcuMjU3OSAyLjAxNjU5IDcuMTc5MDYgMi4yNTQzMiA3LjMxOTU0TDcuNDk5OTYgMTAuNDE5MkwxMi43NDU2IDcuMzE5NTRDMTIuOTgzMyA3LjE3OTA2IDEzLjI4OTkgNy4yNTc5IDEzLjQzMDQgNy40OTU2NEMxMy41NzA5IDcuNzMzMzcgMTMuNDkyMSA4LjAzOTk4IDEzLjI1NDMgOC4xODA0Nkw3Ljc1NDMyIDExLjQzMDVDNy41OTc0MiAxMS41MjMyIDcuNDAyNSAxMS41MjMyIDcuMjQ1NTkgMTEuNDMwNUwxLjc0NTU5IDguMTgwNDZDMS41MDc4NiA4LjAzOTk4IDEuNDI5MDEgNy43MzMzNyAxLjU2OTUgNy40OTU2NFpNMS41Njk0OSAxMC40OTU2QzEuNzA5OTggMTAuMjU3OSAyLjAxNjU4IDEwLjE3OTEgMi4yNTQzMiAxMC4zMTk1TDcuNDk5OTYgMTMuNDE5MkwxMi43NDU2IDEwLjMxOTVDMTIuOTgzMyAxMC4xNzkxIDEzLjI4OTkgMTAuMjU3OSAxMy40MzA0IDEwLjQ5NTZDMTMuNTcwOSAxMC43MzM0IDEzLjQ5MjEgMTEuMDQgMTMuMjU0MyAxMS4xODA1TDcuNzU0MzIgMTQuNDMwNUM3LjU5NzQyIDE0LjUyMzIgNy40MDI1IDE0LjUyMzIgNy4yNDU1OSAxNC40MzA1TDEuNzQ1NTkgMTEuMTgwNUMxLjUwNzg1IDExLjA0IDEuNDI5MDEgMTAuNzMzNCAxLjU2OTQ5IDEwLjQ5NTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxvbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOSAySDZWMTNIOVYyWk0xMCAyVjEzSDEyLjVDMTIuNzc2MSAxMyAxMyAxMi43NzYxIDEzIDEyLjVWMi41QzEzIDIuMjIzODYgMTIuNzc2MSAyIDEyLjUgMkgxMFpNMi41IDJINVYxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41VjIuNUMyIDIuMjIzODYgMi4yMjM4NiAyIDIuNSAyWk0yLjUgMUMxLjY3MTU3IDEgMSAxLjY3MTU3IDEgMi41VjEyLjVDMSAxMy4zMjg0IDEuNjcxNTcgMTQgMi41IDE0SDEyLjVDMTMuMzI4NCAxNCAxNCAxMy4zMjg0IDE0IDEyLjVWMi41QzE0IDEuNjcxNTcgMTMuMzI4NCAxIDEyLjUgMUgyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy42ODk3OSAyLjc1QzMuODk2NjcgMi43NDk3OSA0LjA4MjMyIDIuODc3MDEgNC4xNTY3OSAzLjA3MDAzTDcuMzY2NjIgMTEuMzlDNy40NjYwMiAxMS42NDc3IDcuMzM3NzQgMTEuOTM3MSA3LjA4MDEgMTIuMDM2NUM2LjgyMjQ3IDEyLjEzNTkgNi41MzMwNCAxMi4wMDc2IDYuNDMzNjUgMTEuNzVMNS4zODI1IDkuMDI1MzdIMi4wMTEzM0wwLjk2Njk5MiAxMS43NDlDMC44NjgxMjggMTIuMDA2OCAwLjU3ODk2NCAxMi4xMzU3IDAuMzIxMTI2IDEyLjAzNjlDMC4wNjMyODc4IDExLjkzOCAtMC4wNjU1ODY0IDExLjY0ODggMC4wMzMyNzc0IDExLjM5MUwzLjIyMzQ0IDMuMDcwOTlDMy4yOTc1MSAyLjg3NzgyIDMuNDgyOSAyLjc1MDIxIDMuNjg5NzkgMi43NVpNMy42OTE3NCA0LjY0Mjg0TDUuMDU0NTggOC4xNzUzN0gyLjMzNzI0TDMuNjkxNzQgNC42NDI4NFpNMTAuODk4OSA1LjIwNzAzQzkuMjU4MTggNS4yMDcwMyA4LjAwOTE1IDYuNjg1NjkgOC4wMDkxNSA4LjYwOTcyQzguMDA5MTUgMTAuNjMzNyA5LjM1ODE4IDEyLjAxMjQgMTAuODk4OSAxMi4wMTI0QzExLjcyMTQgMTIuMDEyNCAxMi41NzQ0IDExLjY2OTIgMTMuMTU0MyAxMS4wMjE5VjExLjUzQzEzLjE1NDMgMTEuNzc4NSAxMy4zNTU3IDExLjk4IDEzLjYwNDMgMTEuOThDMTMuODUyOCAxMS45OCAxNC4wNTQzIDExLjc3ODUgMTQuMDU0MyAxMS41M1Y1LjcyQzE0LjA1NDMgNS40NzE0NyAxMy44NTI4IDUuMjcgMTMuNjA0MyA1LjI3QzEzLjM1NTcgNS4yNyAxMy4xNTQzIDUuNDcxNDcgMTMuMTU0MyA1LjcyVjYuMjIzMTdDMTIuNjA1NCA1LjYwMDk1IDExLjc5MjQgNS4yMDcwMyAxMC44OTg5IDUuMjA3MDNaTTEzLjE1NDMgOS43OTgyM1Y3LjMwMTk1QzEyLjc2MzkgNi41ODEwMSAxMS45NDE0IDYuMDU3NTcgMTEuMDg2OCA2LjA1NzU3QzEwLjEwODggNi4wNTc1NyA5LjAzNTAzIDYuOTY1ODEgOS4wMzUwMyA4LjYwOTU1QzkuMDM1MDMgMTAuMTUzMyAxMC4wMDg4IDExLjE2MTUgMTEuMDg2OCAxMS4xNjE1QzExLjk3MDEgMTEuMTYxNSAxMi43NzE5IDEwLjQ5NTIgMTMuMTU0MyA5Ljc5ODIzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjk4OTkgNS4yMDcwM0MyLjA1ODIzIDUuMjA3MDMgMC44MDkyMDQgNi42ODU2OSAwLjgwOTIwNCA4LjYwOTcyQzAuODA5MjA0IDEwLjYzMzcgMi4xNTgyMyAxMi4wMTI0IDMuNjk4OTkgMTIuMDEyNEM0LjUyMTI2IDEyLjAxMjQgNS4zNzQwMiAxMS42NjkzIDUuOTUzOSAxMS4wMjIzVjExLjUzQzUuOTUzOSAxMS43Nzg1IDYuMTU1MzcgMTEuOTggNi40MDM5IDExLjk4QzYuNjUyNDMgMTEuOTggNi44NTM5IDExLjc3ODUgNi44NTM5IDExLjUzVjUuNzIwMDFDNi44NTM5IDUuNDcxNDkgNi42NTI0MyA1LjI3MDAxIDYuNDAzOSA1LjI3MDAxQzYuMTU1MzcgNS4yNzAwMSA1Ljk1MzkgNS40NzE0OSA1Ljk1MzkgNS43MjAwMVY2LjIyMjY5QzUuNDA1MDYgNS42MDA3NSA0LjU5MjE4IDUuMjA3MDMgMy42OTg5OSA1LjIwNzAzWk01Ljk1MzkgOS43OTlWNy4zMDExN0M1LjU2MzM5IDYuNTgwNjQgNC43NDExOCA2LjA1NzU3IDMuODg2OCA2LjA1NzU3QzIuOTA4OSA2LjA1NzU3IDEuODM1MDggNi45NjU4MSAxLjgzNTA4IDguNjA5NTVDMS44MzUwOCAxMC4xNTMzIDIuODA4ODkgMTEuMTYxNSAzLjg4NjggMTEuMTYxNUM0Ljc2OTg0IDExLjE2MTUgNS41NzE0MSAxMC40OTU3IDUuOTUzOSA5Ljc5OVpNMTAuNzk5IDUuMjA3MDNDOS4xNTgyMyA1LjIwNzAzIDcuOTA5MiA2LjY4NTY5IDcuOTA5MiA4LjYwOTcyQzcuOTA5MiAxMC42MzM3IDkuMjU4MjMgMTIuMDEyNCAxMC43OTkgMTIuMDEyNEMxMS42MjE1IDEyLjAxMjQgMTIuNDc0NCAxMS42NjkyIDEzLjA1NDMgMTEuMDIxOFYxMS41M0MxMy4wNTQzIDExLjc3ODUgMTMuMjU1OCAxMS45OCAxMy41MDQzIDExLjk4QzEzLjc1MjkgMTEuOTggMTMuOTU0MyAxMS43Nzg1IDEzLjk1NDMgMTEuNTNWNS43MkMxMy45NTQzIDUuNDcxNDcgMTMuNzUyOSA1LjI3IDEzLjUwNDMgNS4yN0MxMy4yNTU4IDUuMjcgMTMuMDU0MyA1LjQ3MTQ3IDEzLjA1NDMgNS43MlY2LjIyMzE4QzEyLjUwNTUgNS42MDA5NSAxMS42OTI0IDUuMjA3MDMgMTAuNzk5IDUuMjA3MDNaTTEzLjA1NDMgOS43OTgyMlY3LjMwMTk2QzEyLjY2NCA2LjU4MTAyIDExLjg0MTUgNi4wNTc1NyAxMC45ODY4IDYuMDU3NTdDMTAuMDA4OSA2LjA1NzU3IDguOTM1MDggNi45NjU4MSA4LjkzNTA4IDguNjA5NTVDOC45MzUwOCAxMC4xNTMzIDkuOTA4ODkgMTEuMTYxNSAxMC45ODY4IDExLjE2MTVDMTEuODcwMiAxMS4xNjE1IDEyLjY3MiAxMC40OTUyIDEzLjA1NDMgOS43OTgyMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHNuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS4yODk1IDIuNzVDMTEuNDk2NCAyLjc0OTc5IDExLjY4MjEgMi44NzcwMSAxMS43NTY1IDMuMDcwMDNMMTQuOTY2NCAxMS4zOUMxNS4wNjU3IDExLjY0NzcgMTQuOTM3NSAxMS45MzcxIDE0LjY3OTggMTIuMDM2NUMxNC40MjIyIDEyLjEzNTkgMTQuMTMyOCAxMi4wMDc2IDE0LjAzMzQgMTEuNzVMMTIuOTgyMiA5LjAyNTM3SDkuNjExMDZMOC41NjY3MiAxMS43NDlDOC40Njc4NiAxMi4wMDY4IDguMTc4NyAxMi4xMzU3IDcuOTIwODYgMTIuMDM2OUM3LjY2MzAyIDExLjkzOCA3LjUzNDE0IDExLjY0ODggNy42MzMwMSAxMS4zOTFMMTAuODIzMiAzLjA3MDk5QzEwLjg5NzIgMi44Nzc4MiAxMS4wODI2IDIuNzUwMjEgMTEuMjg5NSAyLjc1Wk0xMS4yOTE1IDQuNjQyODRMMTIuNjU0MyA4LjE3NTM3SDkuOTM2OThMMTEuMjkxNSA0LjY0Mjg0Wk0yLjg5ODk1IDUuMjA3MDNDMS4yNTgxOCA1LjIwNzAzIDAuMDA5MTU1MjcgNi42ODU2OSAwLjAwOTE1NTI3IDguNjA5NzJDMC4wMDkxNTUyNyAxMC42MzM3IDEuMzU4MTggMTIuMDEyNCAyLjg5ODk1IDEyLjAxMjRDMy43MjE0MSAxMi4wMTI0IDQuNTc0MzggMTEuNjY5MiA1LjE1NDI3IDExLjAyMTlWMTEuNTNDNS4xNTQyNyAxMS43Nzg1IDUuMzU1NzQgMTEuOTggNS42MDQyNyAxMS45OEM1Ljg1MjggMTEuOTggNi4wNTQyNyAxMS43Nzg1IDYuMDU0MjcgMTEuNTNWNS43MkM2LjA1NDI3IDUuNDcxNDcgNS44NTI4IDUuMjcgNS42MDQyNyA1LjI3QzUuMzU1NzQgNS4yNyA1LjE1NDI3IDUuNDcxNDcgNS4xNTQyNyA1LjcyVjYuMjIzMTdDNC42MDU0MyA1LjYwMDk1IDMuNzkyMzYgNS4yMDcwMyAyLjg5ODk1IDUuMjA3MDNaTTUuMTU0MjcgOS43OTgyM1Y3LjMwMTk1QzQuNzYzOTMgNi41ODEwMSAzLjk0MTQ0IDYuMDU3NTcgMy4wODY3NSA2LjA1NzU3QzIuMTA4ODUgNi4wNTc1NyAxLjAzNTAzIDYuOTY1ODEgMS4wMzUwMyA4LjYwOTU1QzEuMDM1MDMgMTAuMTUzMyAyLjAwODg1IDExLjE2MTUgMy4wODY3NSAxMS4xNjE1QzMuOTcwMTEgMTEuMTYxNSA0Ljc3MTk1IDEwLjQ5NTIgNS4xNTQyNyA5Ljc5ODIzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sY249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjI1NSAyLjc1QzMuODM0NzggMi43NSA0LjAyMTkyIDIuODgwMzQgNC4wOTQ0OCAzLjA3NjY0TDcuMTY5ODUgMTEuMzk2MkM3LjI2NTYgMTEuNjU1MiA3LjEzMzI0IDExLjk0MjggNi44NzQyMyAxMi4wMzg2QzYuNjE1MjIgMTIuMTM0MyA2LjMyNzYzIDEyLjAwMiA2LjIzMTg4IDExLjc0MjlMNS4yMjM4NyA5LjAxNjAzSDIuMDI3MTJMMS4wMTkxMSAxMS43NDI5QzAuOTIzMzYyIDEyLjAwMiAwLjYzNTc3NCAxMi4xMzQzIDAuMzc2NzYyIDEyLjAzODZDMC4xMTc3NDkgMTEuOTQyOCAtMC4wMTQ2MDUyIDExLjY1NTIgMC4wODExNDAxIDExLjM5NjJMMy4xNTY1MSAzLjA3NjY0QzMuMjI5MDggMi44ODAzNCAzLjQxNjIxIDIuNzUgMy42MjU1IDIuNzVaTTMuNjI1NSA0LjY5MjA3TDQuOTA5NjYgOC4xNjYwM0gyLjM0MTMzTDMuNjI1NSA0LjY5MjA3Wk0xMS4zNzE5IDIuNzVDMTEuNTgxMSAyLjc1IDExLjc2ODMgMi44ODAzNCAxMS44NDA4IDMuMDc2NjRMMTQuOTE2MiAxMS4zOTYyQzE1LjAxMiAxMS42NTUyIDE0Ljg3OTYgMTEuOTQyOCAxNC42MjA2IDEyLjAzODZDMTQuMzYxNiAxMi4xMzQzIDE0LjA3NCAxMi4wMDIgMTMuOTc4MiAxMS43NDI5TDEyLjk3MDIgOS4wMTYwM0g5Ljc3MzQ4TDguNzY1NDcgMTEuNzQyOUM4LjY2OTcyIDEyLjAwMiA4LjM4MjEzIDEyLjEzNDMgOC4xMjMxMiAxMi4wMzg2QzcuODY0MTEgMTEuOTQyOCA3LjczMTc1IDExLjY1NTIgNy44Mjc1IDExLjM5NjJMMTAuOTAyOSAzLjA3NjY0QzEwLjk3NTQgMi44ODAzNCAxMS4xNjI2IDIuNzUgMTEuMzcxOSAyLjc1Wk0xMS4zNzE5IDQuNjkyMDdMMTIuNjU2IDguMTY2MDNIMTAuMDg3N0wxMS4zNzE5IDQuNjkyMDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41NTI5MyAwLjk5OTk2OUM0Ljc1Mjk1IDAuOTk5OTY5IDQuOTMzNzIgMS4xMTkxNyA1LjAxMjUgMS4zMDMwMUw4LjAxMTA2IDguMjk5ODJDOC4xMTk4NCA4LjU1MzYzIDguMDAyMjYgOC44NDc1NyA3Ljc0ODQ0IDguOTU2MzVDNy40OTQ2MyA5LjA2NTEyIDcuMjAwNjkgOC45NDc1NCA3LjA5MTkxIDguNjkzNzNMNi4xMTYxMyA2LjQxNjg1SDIuOTg5NzNMMi4wMTM5NSA4LjY5MzczQzEuOTA1MTcgOC45NDc1NCAxLjYxMTIzIDkuMDY1MTIgMS4zNTc0MiA4Ljk1NjM1QzEuMTAzNiA4Ljg0NzU3IDAuOTg2MDIzIDguNTUzNjMgMS4wOTQ4IDguMjk5ODJMNC4wOTMzNiAxLjMwMzAxQzQuMTcyMTQgMS4xMTkxNyA0LjM1MjkxIDAuOTk5OTY5IDQuNTUyOTMgMC45OTk5NjlaTTQuNTUyOTMgMi43NjkyOUw1Ljc1MTg2IDUuNTY2ODVIMy4zNTRMNC41NTI5MyAyLjc2OTI5Wk0xMS4wNTYyIDkuMDAyMTRDMTEuMjYxNyA5LjAwMjE0IDExLjQ0NjMgOC44NzYzMyAxMS41MjE1IDguNjg1MDJMMTQuMjczMyAxLjY4Mjk5QzE0LjM3NDMgMS40MjU5OCAxNC4yNDc4IDEuMTM1NzUgMTMuOTkwOCAxLjAzNDc1QzEzLjczMzggMC45MzM3NDcgMTMuNDQzNiAxLjA2MDIxIDEzLjM0MjYgMS4zMTcyMkwxMS4wNTYyIDcuMTM1MTRMOC43Njk3MyAxLjMxNzIyQzguNjY4NzMgMS4wNjAyMSA4LjM3ODUgMC45MzM3NDcgOC4xMjE1IDEuMDM0NzVDNy44NjQ0OSAxLjEzNTc1IDcuNzM4MDIgMS40MjU5OCA3LjgzOTAyIDEuNjgyOTlMMTAuNTkwOCA4LjY4NTAyQzEwLjY2NiA4Ljg3NjMzIDEwLjg1MDYgOS4wMDIxNCAxMS4wNTYyIDkuMDAyMTRaTTE0Ljk1MzcgMTIuNDk5OUMxNC45NTM3IDEyLjYwNiAxNC45MTE1IDEyLjcwNzcgMTQuODM2NSAxMi43ODI4TDEyLjgzNjUgMTQuNzgyOEMxMi42ODAzIDE0LjkzOSAxMi40MjcxIDE0LjkzOSAxMi4yNzA4IDE0Ljc4MjhDMTIuMTE0NiAxNC42MjY1IDEyLjExNDYgMTQuMzczMyAxMi4yNzA4IDE0LjIxNzFMMTMuNTg4IDEyLjg5OTlIMS41MTkzN0wyLjgzNjUzIDE0LjIxNzFDMi45OTI3NCAxNC4zNzMzIDIuOTkyNzQgMTQuNjI2NSAyLjgzNjUzIDE0Ljc4MjhDMi42ODAzMiAxNC45MzkgMi40MjcwNSAxNC45MzkgMi4yNzA4NCAxNC43ODI4TDAuMjcwODQzIDEyLjc4MjhDMC4xOTU4MjggMTIuNzA3NyAwLjE1MzY4NyAxMi42MDYgMC4xNTM2ODcgMTIuNDk5OUMwLjE1MzY4NyAxMi4zOTM4IDAuMTk1ODI4IDEyLjI5MjEgMC4yNzA4NDMgMTIuMjE3MUwyLjI3MDg0IDEwLjIxNzFDMi40MjcwNSAxMC4wNjA5IDIuNjgwMzIgMTAuMDYwOSAyLjgzNjUzIDEwLjIxNzFDMi45OTI3NCAxMC4zNzMzIDIuOTkyNzQgMTAuNjI2NSAyLjgzNjUzIDEwLjc4MjhMMS41MTkzNyAxMi4wOTk5TDEzLjU4OCAxMi4wOTk5TDEyLjI3MDggMTAuNzgyOEMxMi4xMTQ2IDEwLjYyNjUgMTIuMTE0NiAxMC4zNzMzIDEyLjI3MDggMTAuMjE3MUMxMi40MjcxIDEwLjA2MDkgMTIuNjgwMyAxMC4wNjA5IDEyLjgzNjUgMTAuMjE3MUwxNC44MzY1IDEyLjIxNzFDMTQuOTExNSAxMi4yOTIxIDE0Ljk1MzcgMTIuMzkzOCAxNC45NTM3IDEyLjQ5OTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxmbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC42OTY2NiAwLjA0MDM1NEM4LjkwODU5IDAuMTMxMDM4IDkuMDMxMDUgMC4zNTQ4NTYgOC45OTMxNSAwLjU4MjIzNUw4LjA5MDE5IDYuMDAwMDFIMTIuNDk5OUMxMi42ODkzIDYuMDAwMDEgMTIuODYyNSA2LjEwNzAxIDEyLjk0NzIgNi4yNzY0QzEzLjAzMTggNi40NDU3OSAxMy4wMTM2IDYuNjQ4NSAxMi44OTk5IDYuOEw2Ljg5OTk3IDE0LjhDNi43NjE2NiAxNC45ODQ0IDYuNTE1MiAxNS4wNTAzIDYuMzAzMjcgMTQuOTU5NkM2LjA5MTM0IDE0Ljg2OSA1Ljk2ODg4IDE0LjY0NTEgNi4wMDY3OCAxNC40MTc4TDYuOTA5NzQgOC45OTk5OUgyLjQ5OTk5QzIuMzEwNjEgOC45OTk5OSAyLjEzNzQ3IDguODkyOTkgMi4wNTI3OCA4LjcyMzZDMS45NjgwOCA4LjU1NDIxIDEuOTg2MzYgOC4zNTE1IDIuMDk5OTkgOC4yTDguMDk5OTYgMC4yMDAwMzdDOC4yMzgyNyAwLjAxNTYyNTUgOC40ODQ3MyAtMC4wNTAzMzAxIDguNjk2NjYgMC4wNDAzNTRaTTMuNDk5OTkgOEg3LjQ5OTk2QzcuNjQ2OTQgOCA3Ljc4NjQ3IDguMDY0NjYgNy44ODE0NyA4LjE3NjgxQzcuOTc2NDcgOC4yODg5NSA4LjAxNzMyIDguNDM3MjIgNy45OTMxNiA4LjU4MjE5TDcuMzMwMjYgMTIuNTU5NkwxMS40OTk5IDdINy40OTk5NkM3LjM1Mjk5IDcgNy4yMTM0NiA2LjkzNTM0IDcuMTE4NDYgNi44MjMxOUM3LjAyMzQ2IDYuNzExMDUgNi45ODI2MSA2LjU2Mjc4IDcuMDA2NzcgNi40MTc4MUw3LjY2OTY3IDIuNDQwNDJMMy40OTk5OSA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNzgyMzMgMi4yMTcxM0MzLjcwNzMyIDIuMTQyMTIgMy42MDU1NyAyLjA5OTk4IDMuNDk5NDkgMi4wOTk5OEMzLjM5MzQgMi4wOTk5OCAzLjI5MTY2IDIuMTQyMTIgMy4yMTY2NCAyLjIxNzEzTDEuMjE2NjQgNC4yMTcxM0MxLjA2MDQ0IDQuMzczMzQgMS4wNjA0NCA0LjYyNjYxIDEuMjE2NjQgNC43ODI4MkMxLjM3Mjg1IDQuOTM5MDMgMS42MjYxMiA0LjkzOTAzIDEuNzgyMzMgNC43ODI4MkwzLjA5OTQ5IDMuNDY1NjZMMy4wOTk0OSAxMS41MzQzTDEuNzgyMzMgMTAuMjE3MUMxLjYyNjEyIDEwLjA2MDkgMS4zNzI4NSAxMC4wNjA5IDEuMjE2NjQgMTAuMjE3MUMxLjA2MDQzIDEwLjM3MzMgMS4wNjA0MyAxMC42MjY2IDEuMjE2NjQgMTAuNzgyOEwzLjIxNjY0IDEyLjc4MjhDMy4yOTE2NiAxMi44NTc4IDMuMzkzNCAxMi45IDMuNDk5NDkgMTIuOUMzLjYwNTU3IDEyLjkgMy43MDczMSAxMi44NTc4IDMuNzgyMzMgMTIuNzgyOEw1Ljc4MjMzIDEwLjc4MjhDNS45Mzg1NCAxMC42MjY2IDUuOTM4NTQgMTAuMzczMyA1Ljc4MjMzIDEwLjIxNzFDNS42MjYxMiAxMC4wNjA5IDUuMzcyODUgMTAuMDYwOSA1LjIxNjY0IDEwLjIxNzFMMy44OTk0OSAxMS41MzQzTDMuODk5NDkgMy40NjU2Nkw1LjIxNjY0IDQuNzgyODJDNS4zNzI4NSA0LjkzOTAzIDUuNjI2MTIgNC45MzkwMyA1Ljc4MjMzIDQuNzgyODJDNS45Mzg1NCA0LjYyNjYxIDUuOTM4NTQgNC4zNzMzNCA1Ljc4MjMzIDQuMjE3MTNMMy43ODIzMyAyLjIxNzEzWk04LjQ5OTk4IDMuOTk5OTdDOC4yMjM4MyAzLjk5OTk3IDcuOTk5OTggNC4yMjM4MiA3Ljk5OTk4IDQuNDk5OTdDNy45OTk5OCA0Ljc3NjExIDguMjIzODMgNC45OTk5NyA4LjQ5OTk4IDQuOTk5OTdIMTQuNUMxNC43NzYxIDQuOTk5OTcgMTUgNC43NzYxMSAxNSA0LjQ5OTk3QzE1IDQuMjIzODIgMTQuNzc2MSAzLjk5OTk3IDE0LjUgMy45OTk5N0g4LjQ5OTk4Wk03Ljk5OTk4IDcuNDk5OTdDNy45OTk5OCA3LjIyMzgyIDguMjIzODMgNi45OTk5NyA4LjQ5OTk4IDYuOTk5OTdIMTQuNUMxNC43NzYxIDYuOTk5OTcgMTUgNy4yMjM4MiAxNSA3LjQ5OTk3QzE1IDcuNzc2MTEgMTQuNzc2MSA3Ljk5OTk3IDE0LjUgNy45OTk5N0g4LjQ5OTk4QzguMjIzODMgNy45OTk5NyA3Ljk5OTk4IDcuNzc2MTEgNy45OTk5OCA3LjQ5OTk3Wk04LjQ5OTk4IDkuOTk5OTdDOC4yMjM4MyA5Ljk5OTk3IDcuOTk5OTggMTAuMjIzOCA3Ljk5OTk4IDEwLjVDNy45OTk5OCAxMC43NzYxIDguMjIzODMgMTEgOC40OTk5OCAxMUgxNC41QzE0Ljc3NjEgMTEgMTUgMTAuNzc2MSAxNSAxMC41QzE1IDEwLjIyMzggMTQuNzc2MSA5Ljk5OTk3IDE0LjUgOS45OTk5N0g4LjQ5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNjI0NzEgNC4wMDAwMUw0LjU2NDAyIDQuMDAwMDFDNC4wNDEzNCAzLjk5OTkzIDMuNzA2ODcgMy45OTk4OCAzLjQxODIgNC4wNTVDMi4yMzc5IDQuMjgwMzkgMS4yOTg0NiA1LjE3MDUzIDEuMDU4MTUgNi4zMzAzNUMwLjk5OTUzOCA2LjYxMzIxIDAuOTk5NjA0IDYuOTM5OTggMC45OTk3MDMgNy40MzY4OUwwLjk5OTcxMSA3LjUwMDAxTDAuOTk5NzAzIDcuNTYzMTNDMC45OTk2MDQgOC4wNjAwNCAwLjk5OTUzOCA4LjM4NjgxIDEuMDU4MTUgOC42Njk2N0MxLjI5ODQ2IDkuODI5NSAyLjIzNzkgMTAuNzE5NiAzLjQxODIgMTAuOTQ1QzMuNzA2ODggMTEuMDAwMSA0LjA0MTM1IDExLjAwMDEgNC41NjQwMyAxMUw0LjYyNDcxIDExSDUuNDk5NzFDNS43NzU4NSAxMSA1Ljk5OTcxIDEwLjc3NjIgNS45OTk3MSAxMC41QzUuOTk5NzEgMTAuMjIzOSA1Ljc3NTg1IDEwIDUuNDk5NzEgMTBINC42MjQ3MUM0LjAyMDg0IDEwIDMuNzg5MDcgOS45OTc3NyAzLjYwNTc3IDkuOTYyNzdDMi44MDI2MiA5LjgwOTQgMi4xOTE1NyA5LjIxMTA4IDIuMDM3MzUgOC40NjY3OEMyLjAwMjMzIDguMjk3NzggMS45OTk3MSA4LjA4MjUxIDEuOTk5NzEgNy41MDAwMUMxLjk5OTcxIDYuOTE3NTIgMi4wMDIzMyA2LjcwMjI1IDIuMDM3MzUgNi41MzMyNEMyLjE5MTU3IDUuNzg4OTUgMi44MDI2MiA1LjE5MDYyIDMuNjA1NzcgNS4wMzcyNUMzLjc4OTA3IDUuMDAyMjUgNC4wMjA4NCA1LjAwMDAxIDQuNjI0NzEgNS4wMDAwMUg1LjQ5OTcxQzUuNzc1ODUgNS4wMDAwMSA1Ljk5OTcxIDQuNzc2MTUgNS45OTk3MSA0LjUwMDAxQzUuOTk5NzEgNC4yMjM4NyA1Ljc3NTg1IDQuMDAwMDEgNS40OTk3MSA0LjAwMDAxSDQuNjI0NzFaTTEwLjM3NDcgNS4wMDAwMUMxMC45Nzg2IDUuMDAwMDEgMTEuMjEwNCA1LjAwMjI1IDExLjM5MzcgNS4wMzcyNUMxMi4xOTY4IDUuMTkwNjIgMTIuODA3OSA1Ljc4ODk1IDEyLjk2MjEgNi41MzMyNEMxMi45OTcxIDYuNzAyMjUgMTIuOTk5NyA2LjkxNzUyIDEyLjk5OTcgNy41MDAwMUMxMi45OTk3IDguMDgyNTEgMTIuOTk3MSA4LjI5Nzc4IDEyLjk2MjEgOC40NjY3OEMxMi44MDc5IDkuMjExMDggMTIuMTk2OCA5LjgwOTQgMTEuMzkzNyA5Ljk2Mjc3QzExLjIxMDQgOS45OTc3NyAxMC45Nzg2IDEwIDEwLjM3NDcgMTBIOS40OTk3MUM5LjIyMzU3IDEwIDguOTk5NzEgMTAuMjIzOSA4Ljk5OTcxIDEwLjVDOC45OTk3MSAxMC43NzYyIDkuMjIzNTcgMTEgOS40OTk3MSAxMUgxMC4zNzQ3TDEwLjQzNTQgMTFDMTAuOTU4MSAxMS4wMDAxIDExLjI5MjUgMTEuMDAwMSAxMS41ODEyIDEwLjk0NUMxMi43NjE1IDEwLjcxOTYgMTMuNzAxIDkuODI5NSAxMy45NDEzIDguNjY5NjdDMTMuOTk5OSA4LjM4NjgxIDEzLjk5OTggOC4wNjAwNSAxMy45OTk3IDcuNTYzMTRMMTMuOTk5NyA3LjUwMDAxTDEzLjk5OTcgNy40MzY4OEMxMy45OTk4IDYuOTM5OTggMTMuOTk5OSA2LjYxMzIxIDEzLjk0MTMgNi4zMzAzNUMxMy43MDEgNS4xNzA1MyAxMi43NjE1IDQuMjgwMzkgMTEuNTgxMiA0LjA1NUMxMS4yOTI1IDMuOTk5ODggMTAuOTU4MSAzLjk5OTkzIDEwLjQzNTQgNC4wMDAwMUwxMC4zNzQ3IDQuMDAwMDFIOS40OTk3MUM5LjIyMzU3IDQuMDAwMDEgOC45OTk3MSA0LjIyMzg3IDguOTk5NzEgNC41MDAwMUM4Ljk5OTcxIDQuNzc2MTUgOS4yMjM1NyA1LjAwMDAxIDkuNDk5NzEgNS4wMDAwMUgxMC4zNzQ3Wk01LjAwMDM4IDdDNC43MjQyNCA3IDQuNTAwMzggNy4yMjM4NiA0LjUwMDM4IDcuNUM0LjUwMDM4IDcuNzc2MTQgNC43MjQyNCA4IDUuMDAwMzggOEgxMC4wMDA0QzEwLjI3NjUgOCAxMC41MDA0IDcuNzc2MTQgMTAuNTAwNCA3LjVDMTAuNTAwNCA3LjIyMzg2IDEwLjI3NjUgNyAxMC4wMDA0IDdINS4wMDAzOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGhuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04LjUxMTk0IDMuMDA1NDFDOS4xODgyOSAyLjU0NTk0IDEwLjA0MzUgMi41MzY5NCAxMC42Nzg4IDIuOTU0MTlDMTAuODIzMSAzLjA0ODkzIDEwLjk3NzEgMy4xOTkzIDExLjM4OSAzLjYxMTE5QzExLjgwMDkgNC4wMjMwNyAxMS45NTEzIDQuMTc3MTQgMTIuMDQ2IDQuMzIxNDFDMTIuNDYzMyA0Ljk1Njc1IDEyLjQ1NDMgNS44MTE5MiAxMS45OTQ4IDYuNDg4MjdDMTEuODg5OSA2LjY0MjY0IDExLjcyNzYgNi44MDgxMSAxMS4zMDA2IDcuMjM1MTFMMTAuNjgxOSA3Ljg1MzgzQzEwLjQ4NjcgOC4wNDkwOSAxMC40ODY3IDguMzY1NjcgMTAuNjgxOSA4LjU2MDkzQzEwLjg3NzIgOC43NTYyIDExLjE5MzggOC43NTYyIDExLjM4OSA4LjU2MDkzTDEyLjAwNzcgNy45NDIyMUwxMi4wNTA3IDcuODk5MjlDMTIuNDIwMyA3LjUyOTc2IDEyLjY1NjggNy4yOTMzIDEyLjgyMiA3LjA1MDJDMTMuNDk3MiA2LjA1NjIzIDEzLjUzMjEgNC43NjI1MiAxMi44ODE5IDMuNzcyNDhDMTIuNzIzMyAzLjUzMTAyIDEyLjQ5MjIgMy4zMDAwMSAxMi4xNDA4IDIuOTQ4NzFMMTIuMDk2MSAyLjkwNDA4TDEyLjA1MTUgMi44NTk0MkMxMS43MDAyIDIuNTA4IDExLjQ2OTIgMi4yNzY4OSAxMS4yMjc3IDIuMTE4MzJDMTAuMjM3NyAxLjQ2ODEzIDguOTQzOTggMS41MDI5OSA3Ljk1MDAxIDIuMTc4MjJDNy43MDY5MSAyLjM0MzM2IDcuNDcwNDQgMi41Nzk5MSA3LjEwMDkgMi45NDk1NUw3LjA1OCAyLjk5MjQ3TDYuNDM5MjggMy42MTExOUM2LjI0NDAxIDMuODA2NDUgNi4yNDQwMSA0LjEyMzAzIDYuNDM5MjggNC4zMTgyOUM2LjYzNDU0IDQuNTEzNTUgNi45NTExMiA0LjUxMzU1IDcuMTQ2MzggNC4zMTgyOUw3Ljc2NTEgMy42OTk1N0M4LjE5MjEgMy4yNzI1NyA4LjM1NzU3IDMuMTEwMjcgOC41MTE5NCAzLjAwNTQxWk00LjMxNzk2IDcuMTQ2NzJDNC41MTMyMiA2Ljk1MTQ2IDQuNTEzMjIgNi42MzQ4NyA0LjMxNzk2IDYuNDM5NjFDNC4xMjI2OSA2LjI0NDM1IDMuODA2MTEgNi4yNDQzNSAzLjYxMDg1IDYuNDM5NjFMMi45OTIxMyA3LjA1ODMzTDIuOTQ5MjIgNy4xMDEyNEMyLjU3OTU3IDcuNDcwNzcgMi4zNDMwMyA3LjcwNzI0IDIuMTc3ODggNy45NTAzNUMxLjUwMjY1IDguOTQ0MzIgMS40Njc4IDEwLjIzOCAyLjExNzk5IDExLjIyODFDMi4yNzY1NiAxMS40Njk1IDIuNTA3NjYgMTEuNzAwNSAyLjg1OTEgMTIuMDUxOEwyLjkwMzc0IDEyLjA5NjVMMi45NDgzNyAxMi4xNDExQzMuMjk5NjcgMTIuNDkyNSAzLjUzMDY4IDEyLjcyMzcgMy43NzIxNCAxMi44ODIyQzQuNzYyMTkgMTMuNTMyNCA2LjA1NTg5IDEzLjQ5NzYgNy4wNDk4NiAxMi44MjIzQzcuMjkyOTYgMTIuNjU3MiA3LjUyOTQzIDEyLjQyMDYgNy44OTg5NiAxMi4wNTFMNy44OTg5NyAxMi4wNTFMNy45NDE4OCAxMi4wMDgxTDguNTYwNiAxMS4zODk0QzguNzU1ODYgMTEuMTk0MSA4Ljc1NTg2IDEwLjg3NzUgOC41NjA2IDEwLjY4MjNDOC4zNjUzMyAxMC40ODcgOC4wNDg3NSAxMC40ODcgNy44NTM0OSAxMC42ODIzTDcuMjM0NzcgMTEuMzAxQzYuODA3NzcgMTEuNzI4IDYuNjQyMyAxMS44OTAzIDYuNDg3OTQgMTEuOTk1MUM1LjgxMTU4IDEyLjQ1NDYgNC45NTY0MiAxMi40NjM2IDQuMzIxMDcgMTIuMDQ2NEM0LjE3NjgxIDExLjk1MTYgNC4wMjI3NCAxMS44MDEyIDMuNjEwODUgMTEuMzg5NEMzLjE5ODk2IDEwLjk3NzUgMy4wNDg2IDEwLjgyMzQgMi45NTM4NSAxMC42NzkxQzIuNTM2NjEgMTAuMDQzOCAyLjU0NTYxIDkuMTg4NjMgMy4wMDUwNyA4LjUxMjI3QzMuMTA5OTMgOC4zNTc5MSAzLjI3MjI0IDguMTkyNDQgMy42OTkyNCA3Ljc2NTQ0TDQuMzE3OTYgNy4xNDY3MlpNOS42MjE3MiA2LjA4NTU4QzkuODE2OTggNS44OTAzMiA5LjgxNjk4IDUuNTczNzMgOS42MjE3MiA1LjM3ODQ3QzkuNDI2NDYgNS4xODMyMSA5LjEwOTg4IDUuMTgzMjEgOC45MTQ2MSA1LjM3ODQ3TDUuMzc5MDggOC45MTQwMUM1LjE4MzgyIDkuMTA5MjcgNS4xODM4MiA5LjQyNTg1IDUuMzc5MDggOS42MjExMUM1LjU3NDM0IDkuODE2MzcgNS44OTA5MiA5LjgxNjM3IDYuMDg2MTkgOS42MjExMUw5LjYyMTcyIDYuMDg1NThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxnbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMzUzNiAyLjM1MzU1QzEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDEuODQxNzEgMTMuMzUzNiAxLjY0NjQ1QzEzLjE1ODMgMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTIuNjQ2NCAxLjY0NjQ1TDEuNjQ2NDUgMTIuNjQ2NEMxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMy4xNTgzIDEuNjQ2NDUgMTMuMzUzNkMxLjg0MTcxIDEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDIuMzUzNTUgMTMuMzUzNkwxMy4zNTM2IDIuMzUzNTVaTTIuMDM3MzUgOC40NjY3OEMyLjE3Mzk4IDkuMTI2MTkgMi42NjkxOCA5LjY3MTAzIDMuMzM4ODYgOS44OTMzOEwyLjU3ODMzIDEwLjY1MzlDMS44MDg0MyAxMC4yNTM0IDEuMjM3ODQgOS41MzY5MyAxLjA1ODE1IDguNjY5NjdDMC45OTk1MzggOC4zODY4MSAwLjk5OTYwNCA4LjA2MDA0IDAuOTk5NzAzIDcuNTYzMTNMMC45OTk3MTEgNy41MDAwMUwwLjk5OTcwMyA3LjQzNjg5QzAuOTk5NjA0IDYuOTM5OTggMC45OTk1MzggNi42MTMyMSAxLjA1ODE1IDYuMzMwMzVDMS4yOTg0NiA1LjE3MDUzIDIuMjM3OSA0LjI4MDM5IDMuNDE4MiA0LjA1NUMzLjcwNjg3IDMuOTk5ODggNC4wNDEzNCAzLjk5OTkzIDQuNTY0MDIgNC4wMDAwMUw0LjYyNDcxIDQuMDAwMDFINS40OTk3MUM1Ljc3NTg1IDQuMDAwMDEgNS45OTk3MSA0LjIyMzg3IDUuOTk5NzEgNC41MDAwMUM1Ljk5OTcxIDQuNzc2MTUgNS43NzU4NSA1LjAwMDAxIDUuNDk5NzEgNS4wMDAwMUg0LjYyNDcxQzQuMDIwODQgNS4wMDAwMSAzLjc4OTA3IDUuMDAyMjUgMy42MDU3NyA1LjAzNzI1QzIuODAyNjIgNS4xOTA2MiAyLjE5MTU3IDUuNzg4OTUgMi4wMzczNSA2LjUzMzI0QzIuMDAyMzMgNi43MDIyNSAxLjk5OTcxIDYuOTE3NTIgMS45OTk3MSA3LjUwMDAxQzEuOTk5NzEgOC4wODI1MSAyLjAwMjMzIDguMjk3NzggMi4wMzczNSA4LjQ2Njc4Wk0xMi45NjIxIDYuNTMzMjRDMTIuODI1NSA1Ljg3Mzk3IDEyLjMzMDQgNS4zMjkyMiAxMS42NjEgNS4xMDY3OUwxMi40MjE1IDQuMzQ2MzFDMTMuMTkxMiA0Ljc0Njg2IDEzLjc2MTYgNS40NjMyMyAxMy45NDEzIDYuMzMwMzVDMTMuOTk5OSA2LjYxMzIxIDEzLjk5OTggNi45Mzk5OCAxMy45OTk3IDcuNDM2ODhMMTMuOTk5NyA3LjUwMDAxTDEzLjk5OTcgNy41NjMxNEMxMy45OTk4IDguMDYwMDUgMTMuOTk5OSA4LjM4NjgxIDEzLjk0MTMgOC42Njk2N0MxMy43MDEgOS44Mjk1IDEyLjc2MTUgMTAuNzE5NiAxMS41ODEyIDEwLjk0NUMxMS4yOTI1IDExLjAwMDEgMTAuOTU4MSAxMS4wMDAxIDEwLjQzNTQgMTFMMTAuMzc0NyAxMUg5LjQ5OTcxQzkuMjIzNTcgMTEgOC45OTk3MSAxMC43NzYyIDguOTk5NzEgMTAuNUM4Ljk5OTcxIDEwLjIyMzkgOS4yMjM1NyAxMCA5LjQ5OTcxIDEwSDEwLjM3NDdDMTAuOTc4NiAxMCAxMS4yMTA0IDkuOTk3NzcgMTEuMzkzNyA5Ljk2Mjc3QzEyLjE5NjggOS44MDk0IDEyLjgwNzkgOS4yMTEwOCAxMi45NjIxIDguNDY2NzhDMTIuOTk3MSA4LjI5Nzc4IDEyLjk5OTcgOC4wODI1MSAxMi45OTk3IDcuNTAwMDFDMTIuOTk5NyA2LjkxNzUyIDEyLjk5NzEgNi43MDIyNSAxMi45NjIxIDYuNTMzMjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx2bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41MDAyMSAwQzQuNzc2MzUgMCA1LjAwMDIgMC4yMjM4NTMgNS4wMDAyIDAuNDk5OTlWMi40OTk5NUM1LjAwMDIgMi43NzYwOSA0Ljc3NjM1IDIuOTk5OTQgNC41MDAyMSAyLjk5OTk0QzQuMjI0MDggMi45OTk5NCA0LjAwMDIyIDIuNzc2MDkgNC4wMDAyMiAyLjQ5OTk1VjAuNDk5OTlDNC4wMDAyMiAwLjIyMzg1MyA0LjIyNDA4IDAgNC41MDAyMSAwWk0wLjY0NjQ1MSAwLjY0NjQ3QzAuODQxNzEgMC40NTEyMTIgMS4xNTgyOSAwLjQ1MTIxMiAxLjM1MzU0IDAuNjQ2NDdMMi44NTM1MSAyLjE0NjQ0QzMuMDQ4NzcgMi4zNDE3IDMuMDQ4NzcgMi42NTgyNyAyLjg1MzUxIDIuODUzNTNDMi42NTgyNiAzLjA0ODc5IDIuMzQxNjggMy4wNDg3OSAyLjE0NjQyIDIuODUzNTNMMC42NDY0NTIgMS4zNTM1NkMwLjQ1MTE5MyAxLjE1ODMgMC40NTExOTMgMC44NDE3MjggMC42NDY0NTEgMC42NDY0N1pNMC4wMDAzMDUxNyA0LjQ5OTkxQzAuMDAwMzA1MTcgNC4yMjM3NyAwLjIyNDE1OCAzLjk5OTkyIDAuNTAwMjk1IDMuOTk5OTJIMi41MDAyNUMyLjc3NjM5IDMuOTk5OTIgMy4wMDAyNCA0LjIyMzc3IDMuMDAwMjQgNC40OTk5MUMzLjAwMDI0IDQuNzc2MDUgMi43NzYzOSA0Ljk5OTkgMi41MDAyNSA0Ljk5OTlIMC41MDAyOTVDMC4yMjQxNTggNC45OTk5IDAuMDAwMzA1MTcgNC43NzYwNSAwLjAwMDMwNTE3IDQuNDk5OTFaTTEyLjAwMDEgMTAuNDk5OEMxMi4wMDAxIDEwLjIyMzYgMTIuMjIzOSA5Ljk5OTggMTIuNTAwMSA5Ljk5OThIMTQuNUMxNC43NzYxIDkuOTk5OCAxNSAxMC4yMjM2IDE1IDEwLjQ5OThDMTUgMTAuNzc1OSAxNC43NzYxIDEwLjk5OTggMTQuNSAxMC45OTk4SDEyLjUwMDFDMTIuMjIzOSAxMC45OTk4IDEyLjAwMDEgMTAuNzc1OSAxMi4wMDAxIDEwLjQ5OThaTTEwLjUwMDEgMTEuOTk5OEMxMC43NzYyIDExLjk5OTggMTEuMDAwMSAxMi4yMjM2IDExLjAwMDEgMTIuNDk5N1YxNC40OTk3QzExLjAwMDEgMTQuNzc1OCAxMC43NzYyIDE0Ljk5OTcgMTAuNTAwMSAxNC45OTk3QzEwLjIyNCAxNC45OTk3IDEwLjAwMDEgMTQuNzc1OCAxMC4wMDAxIDE0LjQ5OTdWMTIuNDk5N0MxMC4wMDAxIDEyLjIyMzYgMTAuMjI0IDExLjk5OTggMTAuNTAwMSAxMS45OTk4Wk0xMi4xNDYyIDEyLjE0NjJDMTIuMzQxNSAxMS45NTEgMTIuNjU4IDExLjk1MSAxMi44NTMzIDEyLjE0NjJMMTQuMzUzMyAxMy42NDYyQzE0LjU0ODUgMTMuODQxNSAxNC41NDg1IDE0LjE1OCAxNC4zNTMzIDE0LjM1MzNDMTQuMTU4IDE0LjU0ODUgMTMuODQxNCAxNC41NDg1IDEzLjY0NjIgMTQuMzUzM0wxMi4xNDYyIDEyLjg1MzNDMTEuOTUxIDEyLjY1ODEgMTEuOTUxIDEyLjM0MTUgMTIuMTQ2MiAxMi4xNDYyWk03Ljc2NDc4IDMuNjk5MzhDOC4xOTE3NyAzLjI3MjM4IDguMzU3MjQgMy4xMTAwOCA4LjUxMTYgMy4wMDUyMkM5LjE4Nzk0IDIuNTQ1NzcgMTAuMDQzMSAyLjUzNjc3IDEwLjY3ODQgMi45NTQwMUMxMC44MjI3IDMuMDQ4NzUgMTAuOTc2NyAzLjE5OTExIDExLjM4ODYgMy42MTA5OUMxMS44MDA1IDQuMDIyODcgMTEuOTUwOSA0LjE3Njk0IDEyLjA0NTYgNC4zMjEyQzEyLjQ2MjggNC45NTY1MyAxMi40NTM5IDUuODExNjggMTEuOTk0NCA2LjQ4ODAyQzExLjg4OTUgNi42NDIzOCAxMS43MjcyIDYuODA3ODUgMTEuMzAwMiA3LjIzNDg0TDEwLjY4MTUgNy44NTM1NEMxMC40ODYzIDguMDQ4OCAxMC40ODYzIDguMzY1MzggMTAuNjgxNSA4LjU2MDY0QzEwLjg3NjggOC43NTU4OSAxMS4xOTM0IDguNzU1ODkgMTEuMzg4NiA4LjU2MDY0TDEyLjAwNzMgNy45NDE5M0wxMi4wNTAyIDcuODk5MDNDMTIuNDE5OSA3LjUyOTUgMTIuNjU2NCA3LjI5MzAzIDEyLjgyMTYgNy4wNDk5M0MxMy40OTY4IDYuMDU1OTggMTMuNTMxNiA0Ljc2MjMgMTIuODgxNSAzLjc3MjI4QzEyLjcyMjkgMy41MzA4MyAxMi40OTE4IDMuMjk5ODIgMTIuMTQwNCAyLjk0ODUzTDEyLjA5NTcgMi45MDM5TDEyLjA1MTEgMi44NTkyNUMxMS42OTk4IDIuNTA3ODIgMTEuNDY4OCAyLjI3NjcyIDExLjIyNzMgMi4xMTgxNkMxMC4yMzczIDEuNDY3OTggOC45NDM2NCAxLjUwMjg0IDcuOTQ5NjggMi4xNzgwNUM3LjcwNjU5IDIuMzQzMTkgNy40NzAxMiAyLjU3OTczIDcuMTAwNiAyLjk0OTM2TDcuMTAwNiAyLjk0OTM3TDcuMDU3NjkgMi45OTIyOEw2LjQzODk4IDMuNjEwOTlDNi4yNDM3MiAzLjgwNjI1IDYuMjQzNzIgNC4xMjI4MiA2LjQzODk4IDQuMzE4MDhDNi42MzQyNCA0LjUxMzM0IDYuOTUwODEgNC41MTMzNCA3LjE0NjA3IDQuMzE4MDhMNy43NjQ3OCAzLjY5OTM4Wk0yLjk5MTkxIDcuMDU4MDdMMi45NDg5OSA3LjEwMDk3QzIuNTc5MzUgNy40NzA1IDIuMzQyODIgNy43MDY5NyAyLjE3NzY3IDcuOTUwMDZDMS41MDI0NiA4Ljk0NDAxIDEuNDY3NiAxMC4yMzc3IDIuMTE3NzggMTEuMjI3N0MyLjI3NjM0IDExLjQ2OTIgMi41MDc0NCAxMS43MDAyIDIuODU4ODYgMTIuMDUxNUwyLjg1ODg4IDEyLjA1MTVMMi45MDM1MiAxMi4wOTYxTDIuOTQ4MTUgMTIuMTQwN0wyLjk0ODE1IDEyLjE0MDdMMi45NDgxNyAxMi4xNDA4QzMuMjk5NDUgMTIuNDkyMiAzLjUzMDQ1IDEyLjcyMzMgMy43NzE5IDEyLjg4MThDNC43NjE5MyAxMy41MzIgNi4wNTU2IDEzLjQ5NzIgNy4wNDk1NiAxMi44MjE5QzcuMjkyNjUgMTIuNjU2OCA3LjUyOTEyIDEyLjQyMDMgNy44OTg2NSAxMi4wNTA2TDcuOTQxNTUgMTIuMDA3N0w4LjU2MDI2IDExLjM4OUM4Ljc1NTUyIDExLjE5MzcgOC43NTU1MiAxMC44NzcyIDguNTYwMjYgMTAuNjgxOUM4LjM2NSAxMC40ODY3IDguMDQ4NDIgMTAuNDg2NyA3Ljg1MzE3IDEwLjY4MTlMNy4yMzQ0NiAxMS4zMDA2QzYuODA3NDcgMTEuNzI3NiA2LjY0MiAxMS44ODk5IDYuNDg3NjQgMTEuOTk0OEM1LjgxMTMgMTIuNDU0MiA0Ljk1NjE1IDEyLjQ2MzIgNC4zMjA4MiAxMi4wNDZDNC4xNzY1NiAxMS45NTEyIDQuMDIyNDkgMTEuODAwOSAzLjYxMDYxIDExLjM4OUMzLjE5ODczIDEwLjk3NzEgMy4wNDgzNyAxMC44MjMxIDIuOTUzNjMgMTAuNjc4OEMyLjUzNjM5IDEwLjA0MzUgMi41NDUzOSA5LjE4ODMyIDMuMDA0ODQgOC41MTE5OEMzLjEwOTcxIDguMzU3NjEgMy4yNzIwMSA4LjE5MjE1IDMuNjk5IDcuNzY1MTZMNC4zMTc3IDcuMTQ2NDVDNC41MTI5NiA2Ljk1MTE5IDQuNTEyOTYgNi42MzQ2MiA0LjMxNzcgNi40MzkzNkM0LjEyMjQ1IDYuMjQ0MSAzLjgwNTg3IDYuMjQ0MSAzLjYxMDYxIDYuNDM5MzZMMi45OTE5MSA3LjA1ODA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNTY0MjcgMy45OTk4OEM0LjU4NDIyIDMuOTk5ODkgNC42MDQ0NSAzLjk5OTg5IDQuNjI0OTYgMy45OTk4OUg1LjQ5OTk2QzUuNzc2MSAzLjk5OTg5IDUuOTk5OTYgNC4yMjM3NSA1Ljk5OTk2IDQuNDk5ODlDNS45OTk5NiA0Ljc3NjAzIDUuNzc2MSA0Ljk5OTg5IDUuNDk5OTYgNC45OTk4OUg0LjYyNDk2QzQuMDIxMDggNC45OTk4OSAzLjc4OTMyIDUuMDAyMTMgMy42MDYwMSA1LjAzNzEzQzIuODAyODcgNS4xOTA1IDIuMTkxODEgNS43ODg4MyAyLjAzNzU5IDYuNTMzMTJDMi4wMDI1NyA2LjcwMjEyIDEuOTk5OTYgNi45MTczOSAxLjk5OTk2IDcuNDk5ODlDMS45OTk5NiA4LjA4MjM5IDIuMDAyNTcgOC4yOTc2NiAyLjAzNzU5IDguNDY2NjZDMi4xOTE4MSA5LjIxMDk1IDIuODAyODcgOS44MDkyOCAzLjYwNjAxIDkuOTYyNjVDMy43ODkzMiA5Ljk5NzY1IDQuMDIxMDggOS45OTk4OSA0LjYyNDk2IDkuOTk5ODlINS40OTk5NkM1Ljc3NjEgOS45OTk4OSA1Ljk5OTk2IDEwLjIyMzcgNS45OTk5NiAxMC40OTk5QzUuOTk5OTYgMTAuNzc2IDUuNzc2MSAxMC45OTk5IDUuNDk5OTYgMTAuOTk5OUg0LjYyNDk2QzQuNjA0NDUgMTAuOTk5OSA0LjU4NDIyIDEwLjk5OTkgNC41NjQyNyAxMC45OTk5QzQuMDQxNTkgMTEgMy43MDcxMiAxMSAzLjQxODQ1IDEwLjk0NDlDMi4yMzgxNCAxMC43MTk1IDEuMjk4NzEgOS44MjkzNyAxLjA1ODM5IDguNjY5NTVDMC45OTk3ODIgOC4zODY2OSAwLjk5OTg0OCA4LjA1OTkyIDAuOTk5OTQ3IDcuNTYzMDFDMC45OTk5NTEgNy41NDIyNyAwLjk5OTk1NSA3LjUyMTIzIDAuOTk5OTU1IDcuNDk5ODlDMC45OTk5NTUgNy40Nzg1NSAwLjk5OTk1MSA3LjQ1NzUxIDAuOTk5OTQ3IDcuNDM2NzdDMC45OTk4NDggNi45Mzk4NiAwLjk5OTc4MiA2LjYxMzA5IDEuMDU4MzkgNi4zMzAyM0MxLjI5ODcxIDUuMTcwNDEgMi4yMzgxNCA0LjI4MDI3IDMuNDE4NDUgNC4wNTQ4OEMzLjcwNzEyIDMuOTk5NzYgNC4wNDE1OSAzLjk5OTgxIDQuNTY0MjcgMy45OTk4OFpNMTEuMzkzOSA1LjAzNzEzQzExLjIxMDYgNS4wMDIxMyAxMC45Nzg4IDQuOTk5ODkgMTAuMzc1IDQuOTk5ODlIOS40OTk5NkM5LjIyMzgxIDQuOTk5ODkgOC45OTk5NiA0Ljc3NjAzIDguOTk5OTYgNC40OTk4OUM4Ljk5OTk2IDQuMjIzNzUgOS4yMjM4MSAzLjk5OTg5IDkuNDk5OTYgMy45OTk4OUgxMC4zNzVDMTAuMzk1NSAzLjk5OTg5IDEwLjQxNTcgMy45OTk4OSAxMC40MzU2IDMuOTk5ODhDMTAuOTU4MyAzLjk5OTgxIDExLjI5MjggMy45OTk3NiAxMS41ODE1IDQuMDU0ODhDMTIuNzYxOCA0LjI4MDI3IDEzLjcwMTIgNS4xNzA0MSAxMy45NDE1IDYuMzMwMjNDMTQuMDAwMSA2LjYxMzA5IDE0LjAwMDEgNi45Mzk4NSAxNCA3LjQzNjc2QzE0IDcuNDU3NSAxNCA3LjQ3ODU0IDE0IDcuNDk5ODlDMTQgNy41MjEyNCAxNCA3LjU0MjI4IDE0IDcuNTYzMDJDMTQuMDAwMSA4LjA1OTkyIDE0LjAwMDEgOC4zODY2OSAxMy45NDE1IDguNjY5NTVDMTMuNzAxMiA5LjgyOTM3IDEyLjc2MTggMTAuNzE5NSAxMS41ODE1IDEwLjk0NDlDMTEuMjkyOCAxMSAxMC45NTgzIDExIDEwLjQzNTYgMTAuOTk5OUMxMC40MTU3IDEwLjk5OTkgMTAuMzk1NSAxMC45OTk5IDEwLjM3NSAxMC45OTk5SDkuNDk5OTZDOS4yMjM4MSAxMC45OTk5IDguOTk5OTYgMTAuNzc2IDguOTk5OTYgMTAuNDk5OUM4Ljk5OTk2IDEwLjIyMzcgOS4yMjM4MSA5Ljk5OTg5IDkuNDk5OTYgOS45OTk4OUgxMC4zNzVDMTAuOTc4OCA5Ljk5OTg5IDExLjIxMDYgOS45OTc2NSAxMS4zOTM5IDkuOTYyNjVDMTIuMTk3IDkuODA5MjggMTIuODA4MSA5LjIxMDk1IDEyLjk2MjMgOC40NjY2NkMxMi45OTczIDguMjk3NjYgMTMgOC4wODIzOSAxMyA3LjQ5OTg5QzEzIDYuOTE3MzkgMTIuOTk3MyA2LjcwMjEyIDEyLjk2MjMgNi41MzMxMkMxMi44MDgxIDUuNzg4ODMgMTIuMTk3IDUuMTkwNSAxMS4zOTM5IDUuMDM3MTNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxDbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuNjc4OCAyLjk1NDE5QzEwLjA0MzUgMi41MzY5NCA5LjE4ODI5IDIuNTQ1OTQgOC41MTE5NCAzLjAwNTQxQzguMzU3NTcgMy4xMTAyNyA4LjE5MjEgMy4yNzI1NyA3Ljc2NTEgMy42OTk1N0w3LjE0NjM4IDQuMzE4MjlDNi45NTExMiA0LjUxMzU1IDYuNjM0NTQgNC41MTM1NSA2LjQzOTI4IDQuMzE4MjlDNi4yNDQwMSA0LjEyMzAzIDYuMjQ0MDEgMy44MDY0NSA2LjQzOTI4IDMuNjExMTlMNy4wNTggMi45OTI0N0M3LjA3MjUgMi45Nzc5NyA3LjA4Njc5IDIuOTYzNjYgNy4xMDA5IDIuOTQ5NTVDNy40NzA0NCAyLjU3OTkxIDcuNzA2OTEgMi4zNDMzNiA3Ljk1MDAxIDIuMTc4MjJDOC45NDM5OCAxLjUwMjk5IDEwLjIzNzcgMS40NjgxMyAxMS4yMjc3IDIuMTE4MzJDMTEuNDY5MiAyLjI3Njg5IDExLjcwMDIgMi41MDggMTIuMDUxNSAyLjg1OTQyQzEyLjA2NjIgMi44NzQxIDEyLjA4MSAyLjg4ODk4IDEyLjA5NjEgMi45MDQwOEMxMi4xMTEyIDIuOTE5MTcgMTIuMTI2MSAyLjkzNDA1IDEyLjE0MDggMi45NDg3MUMxMi40OTIyIDMuMzAwMDEgMTIuNzIzMyAzLjUzMTAyIDEyLjg4MTkgMy43NzI0OEMxMy41MzIxIDQuNzYyNTIgMTMuNDk3MiA2LjA1NjIzIDEyLjgyMiA3LjA1MDJDMTIuNjU2OCA3LjI5MzMgMTIuNDIwMyA3LjUyOTc2IDEyLjA1MDcgNy44OTkyOUMxMi4wMzY2IDcuOTEzNCAxMi4wMjIyIDcuOTI3NzEgMTIuMDA3NyA3Ljk0MjIxTDExLjM4OSA4LjU2MDkzQzExLjE5MzggOC43NTYyIDEwLjg3NzIgOC43NTYyIDEwLjY4MTkgOC41NjA5M0MxMC40ODY3IDguMzY1NjcgMTAuNDg2NyA4LjA0OTA5IDEwLjY4MTkgNy44NTM4M0wxMS4zMDA2IDcuMjM1MTFDMTEuNzI3NiA2LjgwODExIDExLjg4OTkgNi42NDI2NCAxMS45OTQ4IDYuNDg4MjdDMTIuNDU0MyA1LjgxMTkyIDEyLjQ2MzMgNC45NTY3NSAxMi4wNDYgNC4zMjE0MUMxMS45NTEzIDQuMTc3MTQgMTEuODAwOSA0LjAyMzA3IDExLjM4OSAzLjYxMTE5QzEwLjk3NzEgMy4xOTkzIDEwLjgyMzEgMy4wNDg5MyAxMC42Nzg4IDIuOTU0MTlaTTQuMzE3OTYgNi40Mzk2MUM0LjUxMzIyIDYuNjM0ODcgNC41MTMyMiA2Ljk1MTQ2IDQuMzE3OTYgNy4xNDY3MkwzLjY5OTI0IDcuNzY1NDRDMy4yNzIyNCA4LjE5MjQ0IDMuMTA5OTMgOC4zNTc5MSAzLjAwNTA3IDguNTEyMjdDMi41NDU2MSA5LjE4ODYzIDIuNTM2NjEgMTAuMDQzOCAyLjk1Mzg1IDEwLjY3OTFDMy4wNDg2IDEwLjgyMzQgMy4xOTg5NiAxMC45Nzc1IDMuNjEwODUgMTEuMzg5NEM0LjAyMjc0IDExLjgwMTIgNC4xNzY4MSAxMS45NTE2IDQuMzIxMDcgMTIuMDQ2NEM0Ljk1NjQyIDEyLjQ2MzYgNS44MTE1OCAxMi40NTQ2IDYuNDg3OTQgMTEuOTk1MUM2LjY0MjMgMTEuODkwMyA2LjgwNzc3IDExLjcyOCA3LjIzNDc3IDExLjMwMUw3Ljg1MzQ5IDEwLjY4MjNDOC4wNDg3NSAxMC40ODcgOC4zNjUzMyAxMC40ODcgOC41NjA2IDEwLjY4MjNDOC43NTU4NiAxMC44Nzc1IDguNzU1ODYgMTEuMTk0MSA4LjU2MDYgMTEuMzg5NEw3Ljk0MTg4IDEyLjAwODFDNy45MjczOCAxMi4wMjI2IDcuOTEzMDcgMTIuMDM2OSA3Ljg5ODk3IDEyLjA1MUM3LjUyOTQzIDEyLjQyMDYgNy4yOTI5NiAxMi42NTcyIDcuMDQ5ODYgMTIuODIyM0M2LjA1NTg5IDEzLjQ5NzYgNC43NjIxOSAxMy41MzI0IDMuNzcyMTQgMTIuODgyMkMzLjUzMDY4IDEyLjcyMzcgMy4yOTk2NyAxMi40OTI1IDIuOTQ4MzcgMTIuMTQxMUMyLjkzMzcxIDEyLjEyNjQgMi45MTg4MyAxMi4xMTE2IDIuOTAzNzQgMTIuMDk2NUMyLjg4ODY1IDEyLjA4MTQgMi44NzM3NyAxMi4wNjY1IDIuODU5MSAxMi4wNTE4QzIuNTA3NjYgMTEuNzAwNSAyLjI3NjU2IDExLjQ2OTUgMi4xMTc5OSAxMS4yMjgxQzEuNDY3OCAxMC4yMzggMS41MDI2NSA4Ljk0NDMyIDIuMTc3ODggNy45NTAzNUMyLjM0MzAzIDcuNzA3MjQgMi41Nzk1NyA3LjQ3MDc3IDIuOTQ5MjIgNy4xMDEyNEMyLjk2MzMzIDcuMDg3MTMgMi45Nzc2MyA3LjA3MjgzIDIuOTkyMTMgNy4wNTgzM0wzLjYxMDg1IDYuNDM5NjFDMy44MDYxMSA2LjI0NDM1IDQuMTIyNjkgNi4yNDQzNSA0LjMxNzk2IDYuNDM5NjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS41IDUuMjVDMS45MTQyMSA1LjI1IDIuMjUgNC45MTQyMSAyLjI1IDQuNUMyLjI1IDQuMDg1NzkgMS45MTQyMSAzLjc1IDEuNSAzLjc1QzEuMDg1NzkgMy43NSAwLjc1IDQuMDg1NzkgMC43NSA0LjVDMC43NSA0LjkxNDIxIDEuMDg1NzkgNS4yNSAxLjUgNS4yNVpNNCA0LjVDNCA0LjIyMzg2IDQuMjIzODYgNCA0LjUgNEgxMy41QzEzLjc3NjEgNCAxNCA0LjIyMzg2IDE0IDQuNUMxNCA0Ljc3NjE0IDEzLjc3NjEgNSAxMy41IDVINC41QzQuMjIzODYgNSA0IDQuNzc2MTQgNCA0LjVaTTQuNSA3QzQuMjIzODYgNyA0IDcuMjIzODYgNCA3LjVDNCA3Ljc3NjE0IDQuMjIzODYgOCA0LjUgOEgxMy41QzEzLjc3NjEgOCAxNCA3Ljc3NjE0IDE0IDcuNUMxNCA3LjIyMzg2IDEzLjc3NjEgNyAxMy41IDdINC41Wk00LjUgMTBDNC4yMjM4NiAxMCA0IDEwLjIyMzkgNCAxMC41QzQgMTAuNzc2MSA0LjIyMzg2IDExIDQuNSAxMUgxMy41QzEzLjc3NjEgMTEgMTQgMTAuNzc2MSAxNCAxMC41QzE0IDEwLjIyMzkgMTMuNzc2MSAxMCAxMy41IDEwSDQuNVpNMi4yNSA3LjVDMi4yNSA3LjkxNDIxIDEuOTE0MjEgOC4yNSAxLjUgOC4yNUMxLjA4NTc5IDguMjUgMC43NSA3LjkxNDIxIDAuNzUgNy41QzAuNzUgNy4wODU3OSAxLjA4NTc5IDYuNzUgMS41IDYuNzVDMS45MTQyMSA2Ljc1IDIuMjUgNy4wODU3OSAyLjI1IDcuNVpNMS41IDExLjI1QzEuOTE0MjEgMTEuMjUgMi4yNSAxMC45MTQyIDIuMjUgMTAuNUMyLjI1IDEwLjA4NTggMS45MTQyMSA5Ljc1IDEuNSA5Ljc1QzEuMDg1NzkgOS43NSAwLjc1IDEwLjA4NTggMC43NSAxMC41QzAuNzUgMTAuOTE0MiAxLjA4NTc5IDExLjI1IDEuNSAxMS4yNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHduPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01IDQuNjM2MDFDNSAzLjc2MDMxIDUuMjQyMTkgMy4xMDU0IDUuNjQzMjMgMi42NzM1N0M2LjAzOTM0IDIuMjQ3MDUgNi42NDU4MiAxLjk3ODMgNy41MDE0IDEuOTc4M0M4LjM1NzQ1IDEuOTc4MyA4Ljk2MzA2IDIuMjQ2NTIgOS4zNTgyMyAyLjY3MjA4QzkuNzU4MzggMy4xMDI5OSAxMCAzLjc1NzA4IDEwIDQuNjMzMjVWNS45OTk5OUg1VjQuNjM2MDFaTTQgNS45OTk5OVY0LjYzNjAxQzQgMy41ODE0OCA0LjI5MzM5IDIuNjU3NTQgNC45MTA0OSAxLjk5MzA3QzUuNTMyNTIgMS4zMjMyOSA2LjQyNjc1IDAuOTc4MzAyIDcuNTAxNCAwLjk3ODMwMkM4LjU3NTgzIDAuOTc4MzAyIDkuNDY5NTIgMS4zMjIzMyAxMC4wOTEgMS45OTE2MkMxMC43MDc2IDIuNjU1NTcgMTEgMy41Nzg5NiAxMSA0LjYzMzI1VjUuOTk5OTlIMTJDMTIuNTUyMyA1Ljk5OTk5IDEzIDYuNDQ3NzEgMTMgNi45OTk5OVYxM0MxMyAxMy41NTIzIDEyLjU1MjMgMTQgMTIgMTRIM0MyLjQ0NzcyIDE0IDIgMTMuNTUyMyAyIDEzVjYuOTk5OTlDMiA2LjQ0NzcxIDIuNDQ3NzIgNS45OTk5OSAzIDUuOTk5OTlINFpNMyA2Ljk5OTk5SDEyVjEzSDNWNi45OTk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5ODYgMEM2LjMyNTcgMCA1LjM2MTA3IDAuMzg5NDMgNC43Mzc1MyAxLjE5MzYxQzQuMjM3NDUgMS44Mzg1NiA0IDIuNjgyNDIgNCAzLjYzMzI1SDVDNSAyLjg0MzEzIDUuMTk2OTEgMi4yMzMxMiA1LjUyNzggMS44MDYzNkM1LjkxNjE1IDEuMzA1NTIgNi41NTE1MiAxIDcuNDk4NiAxQzguMzU2ODMgMSA4Ljk2MzM2IDEuMjY1MDIgOS4zNTg0NiAxLjY4NjIzQzkuNzU3OTMgMi4xMTIxMSAxMCAyLjc2MDQ0IDEwIDMuNjM2MDFWNkgzQzIuNDQ3NzIgNiAyIDYuNDQ3NzIgMiA3VjEzQzIgMTMuNTUyMyAyLjQ0NzcyIDE0IDMgMTRIMTJDMTIuNTUyMyAxNCAxMyAxMy41NTIzIDEzIDEzVjdDMTMgNi40NDc3MSAxMi41NTIzIDYgMTIgNkgxMVYzLjYzNjAxQzExIDIuNTgxMzUgMTAuNzA2NSAxLjY2MTY3IDEwLjA4NzggMS4wMDIxQzkuNDY0NzcgMC4zMzc4NzEgOC41NzA2MSAwIDcuNDk4NiAwWk0zIDdIMTJWMTNIM1Y3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkgMy42MzYwMUM5IDIuNzYwNDQgOS4yNDIwNyAyLjExMjExIDkuNjQxNTQgMS42ODYyM0MxMC4wMzY2IDEuMjY1MDIgMTAuNjQzMiAxIDExLjUwMTQgMUMxMi40NDg1IDEgMTMuMDgzOSAxLjMwNTUyIDEzLjQ3MjIgMS44MDYzNkMxMy44MDMxIDIuMjMzMTIgMTQgMi44NDMxMyAxNCAzLjYzMzI1SDE1QzE1IDIuNjgyNDIgMTQuNzYyNiAxLjgzODU2IDE0LjI2MjUgMS4xOTM2MUMxMy42Mzg5IDAuMzg5NDMgMTIuNjc0MyAwIDExLjUwMTQgMEMxMC40Mjk0IDAgOS41MzUyMyAwLjMzNzg3MSA4LjkxMjE4IDEuMDAyMUM4LjI5MzUxIDEuNjYxNjcgOCAyLjU4MTM1IDggMy42MzYwMVY2SDFDMC40NDc3MTUgNiAwIDYuNDQ3NzIgMCA3VjEzQzAgMTMuNTUyMyAwLjQ0NzcxNSAxNCAxIDE0SDEwQzEwLjU1MjMgMTQgMTEgMTMuNTUyMyAxMSAxM1Y3QzExIDYuNDQ3NzIgMTAuNTUyMyA2IDEwIDZIOVYzLjYzNjAxWk0xIDdIMTBWMTNIMVY3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sX249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMzUzNTUgMS44NTM1NUMzLjU0ODgyIDEuNjU4MjkgMy41NDg4MiAxLjM0MTcxIDMuMzUzNTUgMS4xNDY0NUMzLjE1ODI5IDAuOTUxMTg0IDIuODQxNzEgMC45NTExODQgMi42NDY0NSAxLjE0NjQ1TDAuNjQ2NDQ3IDMuMTQ2NDVDMC40NTExODQgMy4zNDE3MSAwLjQ1MTE4NCAzLjY1ODI5IDAuNjQ2NDQ3IDMuODUzNTVMMi42NDY0NSA1Ljg1MzU1QzIuODQxNzEgNi4wNDg4MiAzLjE1ODI5IDYuMDQ4ODIgMy4zNTM1NSA1Ljg1MzU1QzMuNTQ4ODIgNS42NTgyOSAzLjU0ODgyIDUuMzQxNzEgMy4zNTM1NSA1LjE0NjQ1TDIuMjA3MTEgNEg5LjVDMTEuNDMzIDQgMTMgNS41NjcgMTMgNy41QzEzIDcuNzc2MTQgMTMuMjIzOSA4IDEzLjUgOEMxMy43NzYxIDggMTQgNy43NzYxNCAxNCA3LjVDMTQgNS4wMTQ3MiAxMS45ODUzIDMgOS41IDNIMi4yMDcxMUwzLjM1MzU1IDEuODUzNTVaTTIgNy41QzIgNy4yMjM4NiAxLjc3NjE0IDcgMS41IDdDMS4yMjM4NiA3IDEgNy4yMjM4NiAxIDcuNUMxIDkuOTg1MjggMy4wMTQ3MiAxMiA1LjUgMTJIMTIuNzkyOUwxMS42NDY0IDEzLjE0NjRDMTEuNDUxMiAxMy4zNDE3IDExLjQ1MTIgMTMuNjU4MyAxMS42NDY0IDEzLjg1MzZDMTEuODQxNyAxNC4wNDg4IDEyLjE1ODMgMTQuMDQ4OCAxMi4zNTM2IDEzLjg1MzZMMTQuMzUzNiAxMS44NTM2QzE0LjU0ODggMTEuNjU4MyAxNC41NDg4IDExLjM0MTcgMTQuMzUzNiAxMS4xNDY0TDEyLjM1MzYgOS4xNDY0NUMxMi4xNTgzIDguOTUxMTggMTEuODQxNyA4Ljk1MTE4IDExLjY0NjQgOS4xNDY0NUMxMS40NTEyIDkuMzQxNzEgMTEuNDUxMiA5LjY1ODI5IDExLjY0NjQgOS44NTM1NUwxMi43OTI5IDExSDUuNUMzLjU2NyAxMSAyIDkuNDMzIDIgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sT249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjkgMC40OTk5NzZDMTMuOSAwLjI3OTA2MiAxMy43MjA5IDAuMDk5OTc1NiAxMy41IDAuMDk5OTc1NkMxMy4yNzkxIDAuMDk5OTc1NiAxMy4xIDAuMjc5MDYyIDEzLjEgMC40OTk5NzZWMS4wOTk5OEgxMi41QzEyLjI3OTEgMS4wOTk5OCAxMi4xIDEuMjc5MDYgMTIuMSAxLjQ5OTk4QzEyLjEgMS43MjA4OSAxMi4yNzkxIDEuODk5OTggMTIuNSAxLjg5OTk4SDEzLjFWMi40OTk5OEMxMy4xIDIuNzIwODkgMTMuMjc5MSAyLjg5OTk4IDEzLjUgMi44OTk5OEMxMy43MjA5IDIuODk5OTggMTMuOSAyLjcyMDg5IDEzLjkgMi40OTk5OFYxLjg5OTk4SDE0LjVDMTQuNzIwOSAxLjg5OTk4IDE0LjkgMS43MjA4OSAxNC45IDEuNDk5OThDMTQuOSAxLjI3OTA2IDE0LjcyMDkgMS4wOTk5OCAxNC41IDEuMDk5OThIMTMuOVYwLjQ5OTk3NlpNMTEuODUzNiAzLjE0NjQyQzEyLjA0ODggMy4zNDE2OCAxMi4wNDg4IDMuNjU4MjYgMTEuODUzNiAzLjg1MzUzTDEwLjg1MzYgNC44NTM1M0MxMC42NTgzIDUuMDQ4NzkgMTAuMzQxNyA1LjA0ODc5IDEwLjE0NjUgNC44NTM1M0M5Ljk1MTIgNC42NTgyNyA5Ljk1MTIgNC4zNDE2OSAxMC4xNDY1IDQuMTQ2NDJMMTEuMTQ2NCAzLjE0NjQzQzExLjM0MTcgMi45NTExNiAxMS42NTgzIDIuOTUxMTYgMTEuODUzNiAzLjE0NjQyWk05Ljg1MzU3IDUuMTQ2NDJDMTAuMDQ4OCA1LjM0MTY4IDEwLjA0ODggNS42NTgyNyA5Ljg1MzU3IDUuODUzNTNMMi44NTM1NSAxMi44NTM1QzIuNjU4MjkgMTMuMDQ4OCAyLjM0MTcxIDEzLjA0ODggMi4xNDY0NSAxMi44NTM1QzEuOTUxMTggMTIuNjU4MyAxLjk1MTE4IDEyLjM0MTcgMi4xNDY0NSAxMi4xNDY0TDkuMTQ2NDYgNS4xNDY0MkM5LjM0MTcyIDQuOTUxMTYgOS42NTgzMSA0Ljk1MTE2IDkuODUzNTcgNS4xNDY0MlpNMTMuNSA1LjA5OTk4QzEzLjcyMDkgNS4wOTk5OCAxMy45IDUuMjc5MDYgMTMuOSA1LjQ5OTk4VjYuMDk5OThIMTQuNUMxNC43MjA5IDYuMDk5OTggMTQuOSA2LjI3OTA2IDE0LjkgNi40OTk5OEMxNC45IDYuNzIwODkgMTQuNzIwOSA2Ljg5OTk4IDE0LjUgNi44OTk5OEgxMy45VjcuNDk5OThDMTMuOSA3LjcyMDg5IDEzLjcyMDkgNy44OTk5OCAxMy41IDcuODk5OThDMTMuMjc5MSA3Ljg5OTk4IDEzLjEgNy43MjA4OSAxMy4xIDcuNDk5OThWNi44OTk5OEgxMi41QzEyLjI3OTEgNi44OTk5OCAxMi4xIDYuNzIwODkgMTIuMSA2LjQ5OTk4QzEyLjEgNi4yNzkwNiAxMi4yNzkxIDYuMDk5OTggMTIuNSA2LjA5OTk4SDEzLjFWNS40OTk5OEMxMy4xIDUuMjc5MDYgMTMuMjc5MSA1LjA5OTk4IDEzLjUgNS4wOTk5OFpNOC45MDAwMiAwLjQ5OTk3NkM4LjkwMDAyIDAuMjc5MDYyIDguNzIwOTMgMC4wOTk5NzU2IDguNTAwMDIgMC4wOTk5NzU2QzguMjc5MSAwLjA5OTk3NTYgOC4xMDAwMiAwLjI3OTA2MiA4LjEwMDAyIDAuNDk5OTc2VjEuMDk5OThINy41MDAwMkM3LjI3OTEgMS4wOTk5OCA3LjEwMDAyIDEuMjc5MDYgNy4xMDAwMiAxLjQ5OTk4QzcuMTAwMDIgMS43MjA4OSA3LjI3OTEgMS44OTk5OCA3LjUwMDAyIDEuODk5OThIOC4xMDAwMlYyLjQ5OTk4QzguMTAwMDIgMi43MjA4OSA4LjI3OTEgMi44OTk5OCA4LjUwMDAyIDIuODk5OThDOC43MjA5MyAyLjg5OTk4IDguOTAwMDIgMi43MjA4OSA4LjkwMDAyIDIuNDk5OThWMS44OTk5OEg5LjUwMDAyQzkuNzIwOTMgMS44OTk5OCA5LjkwMDAyIDEuNzIwODkgOS45MDAwMiAxLjQ5OTk4QzkuOTAwMDIgMS4yNzkwNiA5LjcyMDkzIDEuMDk5OTggOS41MDAwMiAxLjA5OTk4SDguOTAwMDJWMC40OTk5NzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxMbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAgNi41QzEwIDguNDMzIDguNDMzIDEwIDYuNSAxMEM0LjU2NyAxMCAzIDguNDMzIDMgNi41QzMgNC41NjcgNC41NjcgMyA2LjUgM0M4LjQzMyAzIDEwIDQuNTY3IDEwIDYuNVpNOS4zMDg4NCAxMC4wMTU5QzguNTM5MDEgMTAuNjMxOCA3LjU2MjUxIDExIDYuNSAxMUM0LjAxNDcyIDExIDIgOC45ODUyOCAyIDYuNUMyIDQuMDE0NzIgNC4wMTQ3MiAyIDYuNSAyQzguOTg1MjggMiAxMSA0LjAxNDcyIDExIDYuNUMxMSA3LjU2MjUxIDEwLjYzMTggOC41MzkwMSAxMC4wMTU5IDkuMzA4ODRMMTIuODUzNiAxMi4xNDY0QzEzLjA0ODggMTIuMzQxNyAxMy4wNDg4IDEyLjY1ODMgMTIuODUzNiAxMi44NTM2QzEyLjY1ODMgMTMuMDQ4OCAxMi4zNDE3IDEzLjA0ODggMTIuMTQ2NCAxMi44NTM2TDkuMzA4ODQgMTAuMDE1OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEVuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjQ5OTg4IDIuMDAwMTJDMS43NzYwMiAyLjAwMDEyIDEuOTk5ODggMS43NzYyNiAxLjk5OTg4IDEuNTAwMTJDMS45OTk4OCAxLjIyMzk4IDEuNzc2MDIgMS4wMDAxMiAxLjQ5OTg4IDEuMDAwMTJDMS4yMjM3NCAxLjAwMDEyIDAuOTk5ODc4IDEuMjIzOTggMC45OTk4NzggMS41MDAxMkMwLjk5OTg3OCAxLjc3NjI2IDEuMjIzNzQgMi4wMDAxMiAxLjQ5OTg4IDIuMDAwMTJaTTQuNDk5ODggMi4wMDAxMkM0Ljc3NjAyIDIuMDAwMTIgNC45OTk4OCAxLjc3NjI2IDQuOTk5ODggMS41MDAxMkM0Ljk5OTg4IDEuMjIzOTggNC43NzYwMiAxLjAwMDEyIDQuNDk5ODggMS4wMDAxMkM0LjIyMzc0IDEuMDAwMTIgMy45OTk4OCAxLjIyMzk4IDMuOTk5ODggMS41MDAxMkMzLjk5OTg4IDEuNzc2MjYgNC4yMjM3NCAyLjAwMDEyIDQuNDk5ODggMi4wMDAxMlpNNy45OTk4OCAxLjUwMDEyQzcuOTk5ODggMS43NzYyNiA3Ljc3NjAyIDIuMDAwMTIgNy40OTk4OCAyLjAwMDEyQzcuMjIzNzQgMi4wMDAxMiA2Ljk5OTg4IDEuNzc2MjYgNi45OTk4OCAxLjUwMDEyQzYuOTk5ODggMS4yMjM5OCA3LjIyMzc0IDEuMDAwMTIgNy40OTk4OCAxLjAwMDEyQzcuNzc2MDIgMS4wMDAxMiA3Ljk5OTg4IDEuMjIzOTggNy45OTk4OCAxLjUwMDEyWk0xMC40OTk5IDIuMDAwMTJDMTAuNzc2IDIuMDAwMTIgMTAuOTk5OSAxLjc3NjI2IDEwLjk5OTkgMS41MDAxMkMxMC45OTk5IDEuMjIzOTggMTAuNzc2IDEuMDAwMTIgMTAuNDk5OSAxLjAwMDEyQzEwLjIyMzcgMS4wMDAxMiA5Ljk5OTg4IDEuMjIzOTggOS45OTk4OCAxLjUwMDEyQzkuOTk5ODggMS43NzYyNiAxMC4yMjM3IDIuMDAwMTIgMTAuNDk5OSAyLjAwMDEyWk0xMy45OTk5IDEuNTAwMTJDMTMuOTk5OSAxLjc3NjI2IDEzLjc3NiAyLjAwMDEyIDEzLjQ5OTkgMi4wMDAxMkMxMy4yMjM3IDIuMDAwMTIgMTIuOTk5OSAxLjc3NjI2IDEyLjk5OTkgMS41MDAxMkMxMi45OTk5IDEuMjIzOTggMTMuMjIzNyAxLjAwMDEyIDEzLjQ5OTkgMS4wMDAxMkMxMy43NzYgMS4wMDAxMiAxMy45OTk5IDEuMjIzOTggMTMuOTk5OSAxLjUwMDEyWk0xLjQ5OTg4IDE0LjAwMDFDMS43NzYwMiAxNC4wMDAxIDEuOTk5ODggMTMuNzc2MyAxLjk5OTg4IDEzLjUwMDFDMS45OTk4OCAxMy4yMjQgMS43NzYwMiAxMy4wMDAxIDEuNDk5ODggMTMuMDAwMUMxLjIyMzc0IDEzLjAwMDEgMC45OTk4NzggMTMuMjI0IDAuOTk5ODc4IDEzLjUwMDFDMC45OTk4NzggMTMuNzc2MyAxLjIyMzc0IDE0LjAwMDEgMS40OTk4OCAxNC4wMDAxWk0xLjk5OTg4IDEwLjUwMDFDMS45OTk4OCAxMC43NzYzIDEuNzc2MDIgMTEuMDAwMSAxLjQ5OTg4IDExLjAwMDFDMS4yMjM3NCAxMS4wMDAxIDAuOTk5ODc4IDEwLjc3NjMgMC45OTk4NzggMTAuNTAwMUMwLjk5OTg3OCAxMC4yMjQgMS4yMjM3NCAxMC4wMDAxIDEuNDk5ODggMTAuMDAwMUMxLjc3NjAyIDEwLjAwMDEgMS45OTk4OCAxMC4yMjQgMS45OTk4OCAxMC41MDAxWk0xLjQ5OTg4IDguMDAwMTJDMS43NzYwMiA4LjAwMDEyIDEuOTk5ODggNy43NzYyNiAxLjk5OTg4IDcuNTAwMTJDMS45OTk4OCA3LjIyMzk4IDEuNzc2MDIgNy4wMDAxMiAxLjQ5OTg4IDcuMDAwMTJDMS4yMjM3NCA3LjAwMDEyIDAuOTk5ODc4IDcuMjIzOTggMC45OTk4NzggNy41MDAxMkMwLjk5OTg3OCA3Ljc3NjI2IDEuMjIzNzQgOC4wMDAxMiAxLjQ5OTg4IDguMDAwMTJaTTEuOTk5ODggNC41MDAxMkMxLjk5OTg4IDQuNzc2MjYgMS43NzYwMiA1LjAwMDEyIDEuNDk5ODggNS4wMDAxMkMxLjIyMzc0IDUuMDAwMTIgMC45OTk4NzggNC43NzYyNiAwLjk5OTg3OCA0LjUwMDEyQzAuOTk5ODc4IDQuMjIzOTggMS4yMjM3NCA0LjAwMDEyIDEuNDk5ODggNC4wMDAxMkMxLjc3NjAyIDQuMDAwMTIgMS45OTk4OCA0LjIyMzk4IDEuOTk5ODggNC41MDAxMlpNMTMuNDk5OSAxMS4wMDAxQzEzLjc3NiAxMS4wMDAxIDEzLjk5OTkgMTAuNzc2MyAxMy45OTk5IDEwLjUwMDFDMTMuOTk5OSAxMC4yMjQgMTMuNzc2IDEwLjAwMDEgMTMuNDk5OSAxMC4wMDAxQzEzLjIyMzcgMTAuMDAwMSAxMi45OTk5IDEwLjIyNCAxMi45OTk5IDEwLjUwMDFDMTIuOTk5OSAxMC43NzYzIDEzLjIyMzcgMTEuMDAwMSAxMy40OTk5IDExLjAwMDFaTTEzLjk5OTkgNy41MDAxMkMxMy45OTk5IDcuNzc2MjYgMTMuNzc2IDguMDAwMTIgMTMuNDk5OSA4LjAwMDEyQzEzLjIyMzcgOC4wMDAxMiAxMi45OTk5IDcuNzc2MjYgMTIuOTk5OSA3LjUwMDEyQzEyLjk5OTkgNy4yMjM5OCAxMy4yMjM3IDcuMDAwMTIgMTMuNDk5OSA3LjAwMDEyQzEzLjc3NiA3LjAwMDEyIDEzLjk5OTkgNy4yMjM5OCAxMy45OTk5IDcuNTAwMTJaTTEzLjQ5OTkgNS4wMDAxMkMxMy43NzYgNS4wMDAxMiAxMy45OTk5IDQuNzc2MjYgMTMuOTk5OSA0LjUwMDEyQzEzLjk5OTkgNC4yMjM5OCAxMy43NzYgNC4wMDAxMiAxMy40OTk5IDQuMDAwMTJDMTMuMjIzNyA0LjAwMDEyIDEyLjk5OTkgNC4yMjM5OCAxMi45OTk5IDQuNTAwMTJDMTIuOTk5OSA0Ljc3NjI2IDEzLjIyMzcgNS4wMDAxMiAxMy40OTk5IDUuMDAwMTJaTTQuOTk5ODggMTMuNTAwMUM0Ljk5OTg4IDEzLjc3NjMgNC43NzYwMiAxNC4wMDAxIDQuNDk5ODggMTQuMDAwMUM0LjIyMzc0IDE0LjAwMDEgMy45OTk4OCAxMy43NzYzIDMuOTk5ODggMTMuNTAwMUMzLjk5OTg4IDEzLjIyNCA0LjIyMzc0IDEzLjAwMDEgNC40OTk4OCAxMy4wMDAxQzQuNzc2MDIgMTMuMDAwMSA0Ljk5OTg4IDEzLjIyNCA0Ljk5OTg4IDEzLjUwMDFaTTcuNDk5ODggMTQuMDAwMUM3Ljc3NjAyIDE0LjAwMDEgNy45OTk4OCAxMy43NzYzIDcuOTk5ODggMTMuNTAwMUM3Ljk5OTg4IDEzLjIyNCA3Ljc3NjAyIDEzLjAwMDEgNy40OTk4OCAxMy4wMDAxQzcuMjIzNzQgMTMuMDAwMSA2Ljk5OTg4IDEzLjIyNCA2Ljk5OTg4IDEzLjUwMDFDNi45OTk4OCAxMy43NzYzIDcuMjIzNzQgMTQuMDAwMSA3LjQ5OTg4IDE0LjAwMDFaTTEwLjk5OTkgMTMuNTAwMUMxMC45OTk5IDEzLjc3NjMgMTAuNzc2IDE0LjAwMDEgMTAuNDk5OSAxNC4wMDAxQzEwLjIyMzcgMTQuMDAwMSA5Ljk5OTg4IDEzLjc3NjMgOS45OTk4OCAxMy41MDAxQzkuOTk5ODggMTMuMjI0IDEwLjIyMzcgMTMuMDAwMSAxMC40OTk5IDEzLjAwMDFDMTAuNzc2IDEzLjAwMDEgMTAuOTk5OSAxMy4yMjQgMTAuOTk5OSAxMy41MDAxWk0xMy40OTk5IDE0LjAwMDFDMTMuNzc2IDE0LjAwMDEgMTMuOTk5OSAxMy43NzYzIDEzLjk5OTkgMTMuNTAwMUMxMy45OTk5IDEzLjIyNCAxMy43NzYgMTMuMDAwMSAxMy40OTk5IDEzLjAwMDFDMTMuMjIzNyAxMy4wMDAxIDEyLjk5OTkgMTMuMjI0IDEyLjk5OTkgMTMuNTAwMUMxMi45OTk5IDEzLjc3NjMgMTMuMjIzNyAxNC4wMDAxIDEzLjQ5OTkgMTQuMDAwMVpNMy45OTk4OCA1LjAwMDEyQzMuOTk5ODggNC40NDc4NCA0LjQ0NzU5IDQuMDAwMTIgNC45OTk4OCA0LjAwMDEySDkuOTk5ODhDMTAuNTUyMiA0LjAwMDEyIDEwLjk5OTkgNC40NDc4NCAxMC45OTk5IDUuMDAwMTJWMTAuMDAwMUMxMC45OTk5IDEwLjU1MjQgMTAuNTUyMiAxMS4wMDAxIDkuOTk5ODggMTEuMDAwMUg0Ljk5OTg4QzQuNDQ3NTkgMTEuMDAwMSAzLjk5OTg4IDEwLjU1MjQgMy45OTk4OCAxMC4wMDAxVjUuMDAwMTJaTTQuOTk5ODggNS4wMDAxMkg5Ljk5OTg4VjEwLjAwMDFINC45OTk4OFY1LjAwMDEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sU249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgMkgxNFYxM0gxTDEgMlpNMCAyQzAgMS40NDc3MiAwLjQ0NzcxNSAxIDEgMUgxNEMxNC41NTIzIDEgMTUgMS40NDc3MiAxNSAyVjEzQzE1IDEzLjU1MjMgMTQuNTUyMyAxNCAxNCAxNEgxQzAuNDQ3NzE1IDE0IDAgMTMuNTUyMyAwIDEzVjJaTTQuODc1IDcuNUM0Ljg3NSA2LjA1MDI1IDYuMDUwMjUgNC44NzUgNy41IDQuODc1QzguOTQ5NzUgNC44NzUgMTAuMTI1IDYuMDUwMjUgMTAuMTI1IDcuNUMxMC4xMjUgOC45NDk3NSA4Ljk0OTc1IDEwLjEyNSA3LjUgMTAuMTI1QzYuMDUwMjUgMTAuMTI1IDQuODc1IDguOTQ5NzUgNC44NzUgNy41Wk03LjUgMy44NzVDNS40OTc5NyAzLjg3NSAzLjg3NSA1LjQ5Nzk3IDMuODc1IDcuNUMzLjg3NSA5LjUwMjAzIDUuNDk3OTcgMTEuMTI1IDcuNSAxMS4xMjVDOS41MDIwMyAxMS4xMjUgMTEuMTI1IDkuNTAyMDMgMTEuMTI1IDcuNUMxMS4xMjUgNS40OTc5NyA5LjUwMjAzIDMuODc1IDcuNSAzLjg3NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDFDMC40NDc3MTUgMSAwIDEuNDQ3NzIgMCAyVjEzQzAgMTMuNTUyMyAwLjQ0NzcxNSAxNCAxIDE0SDE0QzE0LjU1MjMgMTQgMTUgMTMuNTUyMyAxNSAxM1YyQzE1IDEuNDQ3NzIgMTQuNTUyMyAxIDE0IDFIMVpNNy41IDEwLjYyNUM5LjIyNTg5IDEwLjYyNSAxMC42MjUgOS4yMjU4OSAxMC42MjUgNy41QzEwLjYyNSA1Ljc3NDExIDkuMjI1ODkgNC4zNzUgNy41IDQuMzc1QzUuNzc0MTEgNC4zNzUgNC4zNzUgNS43NzQxMSA0LjM3NSA3LjVDNC4zNzUgOS4yMjU4OSA1Ljc3NDExIDEwLjYyNSA3LjUgMTAuNjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuMjUgNy41QzIuMjUgNy4yMjM4NiAyLjQ3Mzg2IDcgMi43NSA3SDEyLjI1QzEyLjUyNjEgNyAxMi43NSA3LjIyMzg2IDEyLjc1IDcuNUMxMi43NSA3Ljc3NjE0IDEyLjUyNjEgOCAxMi4yNSA4SDIuNzVDMi40NzM4NiA4IDIuMjUgNy43NzYxNCAyLjI1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGtuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk0xLjgyNzA3IDcuNDk5NzJDMS44MjcwNyA0LjM2NjcxIDQuMzY2ODkgMS44MjY4OSA3LjQ5OTkxIDEuODI2ODlDMTAuNjMyOSAxLjgyNjg5IDEzLjE3MjcgNC4zNjY3MSAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyAxMC42MzI3IDEwLjYzMjkgMTMuMTcyNiA3LjQ5OTkxIDEzLjE3MjZDNC4zNjY4OSAxMy4xNzI2IDEuODI3MDcgMTAuNjMyNyAxLjgyNzA3IDcuNDk5NzJaTTQuNTAwMDMgN0M0LjIyMzg5IDcgNC4wMDAwMyA3LjIyMzg2IDQuMDAwMDMgNy41QzQuMDAwMDMgNy43NzYxNCA0LjIyMzg5IDggNC41MDAwMyA4SDEwLjVDMTAuNzc2MiA4IDExIDcuNzc2MTQgMTEgNy41QzExIDcuMjIzODYgMTAuNzc2MiA3IDEwLjUgN0g0LjUwMDAzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuMTQ5MjEgMy45OTk5NkMyLjE0OTIxIDIuOTc3NzggMi45Nzc4NCAyLjE0OTE1IDQuMDAwMDIgMi4xNDkxNUM1LjAyMjE5IDIuMTQ5MTUgNS44NTA4MyAyLjk3Nzc4IDUuODUwODMgMy45OTk5NkM1Ljg1MDgzIDUuMDIyMTMgNS4wMjIxOSA1Ljg1MDc3IDQuMDAwMDIgNS44NTA3N0MyLjk3Nzg0IDUuODUwNzcgMi4xNDkyMSA1LjAyMjEzIDIuMTQ5MjEgMy45OTk5NlpNNC4wMDAwMiAxLjI0OTE1QzIuNDgwNzkgMS4yNDkxNSAxLjI0OTIxIDIuNDgwNzMgMS4yNDkyMSAzLjk5OTk2QzEuMjQ5MjEgNS41MTkxOSAyLjQ4MDc5IDYuNzUwNzcgNC4wMDAwMiA2Ljc1MDc3QzUuNTE5MjUgNi43NTA3NyA2Ljc1MDgzIDUuNTE5MTkgNi43NTA4MyAzLjk5OTk2QzYuNzUwODMgMi40ODA3MyA1LjUxOTI1IDEuMjQ5MTUgNC4wMDAwMiAxLjI0OTE1Wk01LjgyMDM0IDExLjAwMDFMMi40OTk5OCAxMi44MzY5VjkuMTYzMzFMNS44MjAzNCAxMS4wMDAxWk0yLjYzODgzIDguMjExNTlDMi4xNzIyOCA3Ljk1MzUgMS41OTk5OCA4LjI5MDkzIDEuNTk5OTggOC44MjQxMVYxMy4xNzYxQzEuNTk5OTggMTMuNzA5MyAyLjE3MjI4IDE0LjA0NjcgMi42Mzg4MyAxMy43ODg2TDYuNTcyMzUgMTEuNjEyNkM3LjA1Mzg5IDExLjM0NjIgNy4wNTM4OSAxMC42NTQgNi41NzIzNSAxMC4zODc2TDIuNjM4ODMgOC4yMTE1OVpNOC4zMDAwMSA5LjAwMDAzQzguMzAwMDEgOC42MTM0MyA4LjYxMzQxIDguMzAwMDMgOS4wMDAwMSA4LjMwMDAzSDEzQzEzLjM4NjYgOC4zMDAwMyAxMy43IDguNjEzNDMgMTMuNyA5LjAwMDAzVjEzQzEzLjcgMTMuMzg2NiAxMy4zODY2IDEzLjcgMTMgMTMuN0g5LjAwMDAxQzguNjEzNDEgMTMuNyA4LjMwMDAxIDEzLjM4NjYgOC4zMDAwMSAxM1Y5LjAwMDAzWk05LjIwMDAxIDkuMjAwMDNWMTIuOEgxMi44VjkuMjAwMDNIOS4yMDAwMVpNMTMuNDQzMiAyLjE5MzExQzEzLjYxODkgMi4wMTczNyAxMy42MTg5IDEuNzMyNDUgMTMuNDQzMiAxLjU1NjcxQzEzLjI2NzUgMS4zODA5OCAxMi45ODI2IDEuMzgwOTggMTIuODA2OCAxLjU1NjcxTDExIDMuMzYzNTNMOS4xOTMyMSAxLjU1Njc0QzkuMDE3NDggMS4zODEgOC43MzI1NSAxLjM4MSA4LjU1NjgyIDEuNTU2NzRDOC4zODEwOCAxLjczMjQ3IDguMzgxMDggMi4wMTc0IDguNTU2ODIgMi4xOTMxM0wxMC4zNjM2IDMuOTk5OTJMOC41NTY4MiA1LjgwNjcxQzguMzgxMDggNS45ODI0NSA4LjM4MTA4IDYuMjY3MzcgOC41NTY4MiA2LjQ0MzExQzguNzMyNTUgNi42MTg4NSA5LjAxNzQ4IDYuNjE4ODUgOS4xOTMyMSA2LjQ0MzExTDExIDQuNjM2MzJMMTIuODA2OCA2LjQ0MzE0QzEyLjk4MjYgNi42MTg4NyAxMy4yNjc1IDYuNjE4ODcgMTMuNDQzMiA2LjQ0MzE0QzEzLjYxODkgNi4yNjc0IDEzLjYxODkgNS45ODI0NyAxMy40NDMyIDUuODA2NzRMMTEuNjM2NCAzLjk5OTkyTDEzLjQ0MzIgMi4xOTMxMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFBuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjUgM0M0LjY3MTU3IDMgNCAzLjY3MTU3IDQgNC41QzQgNS4zMjg0MyA0LjY3MTU3IDYgNS41IDZDNi4zMjg0MyA2IDcgNS4zMjg0MyA3IDQuNUM3IDMuNjcxNTcgNi4zMjg0MyAzIDUuNSAzWk0zIDVDMy4wMTY3MSA1IDMuMDMzMjMgNC45OTkxOCAzLjA0OTUyIDQuOTk3NThDMy4yODAyMiA2LjEzOTkgNC4yODk2NyA3IDUuNSA3QzYuNzEwMzMgNyA3LjcxOTc4IDYuMTM5OSA3Ljk1MDQ4IDQuOTk3NThDNy45NjY3NyA0Ljk5OTE4IDcuOTgzMjkgNSA4IDVIMTMuNUMxMy43NzYxIDUgMTQgNC43NzYxNCAxNCA0LjVDMTQgNC4yMjM4NiAxMy43NzYxIDQgMTMuNSA0SDhDNy45ODMyOSA0IDcuOTY2NzcgNC4wMDA4MiA3Ljk1MDQ4IDQuMDAyNDJDNy43MTk3OCAyLjg2MDA5IDYuNzEwMzMgMiA1LjUgMkM0LjI4OTY3IDIgMy4yODAyMiAyLjg2MDA5IDMuMDQ5NTIgNC4wMDI0MkMzLjAzMzIzIDQuMDAwODIgMy4wMTY3MSA0IDMgNEgxLjVDMS4yMjM4NiA0IDEgNC4yMjM4NiAxIDQuNUMxIDQuNzc2MTQgMS4yMjM4NiA1IDEuNSA1SDNaTTExLjk1MDUgMTAuOTk3NkMxMS43MTk4IDEyLjEzOTkgMTAuNzEwMyAxMyA5LjUgMTNDOC4yODk2NyAxMyA3LjI4MDIyIDEyLjEzOTkgNy4wNDk1MiAxMC45OTc2QzcuMDMzMjMgMTAuOTk5MiA3LjAxNjcxIDExIDcgMTFIMS41QzEuMjIzODYgMTEgMSAxMC43NzYxIDEgMTAuNUMxIDEwLjIyMzkgMS4yMjM4NiAxMCAxLjUgMTBIN0M3LjAxNjcxIDEwIDcuMDMzMjMgMTAuMDAwOCA3LjA0OTUyIDEwLjAwMjRDNy4yODAyMiA4Ljg2MDEgOC4yODk2NyA4IDkuNSA4QzEwLjcxMDMgOCAxMS43MTk4IDguODYwMSAxMS45NTA1IDEwLjAwMjRDMTEuOTY2OCAxMC4wMDA4IDExLjk4MzMgMTAgMTIgMTBIMTMuNUMxMy43NzYxIDEwIDE0IDEwLjIyMzkgMTQgMTAuNUMxNCAxMC43NzYxIDEzLjc3NjEgMTEgMTMuNSAxMUgxMkMxMS45ODMzIDExIDExLjk2NjggMTAuOTk5MiAxMS45NTA1IDEwLjk5NzZaTTggMTAuNUM4IDkuNjcxNTcgOC42NzE1NyA5IDkuNSA5QzEwLjMyODQgOSAxMSA5LjY3MTU3IDExIDEwLjVDMTEgMTEuMzI4NCAxMC4zMjg0IDEyIDkuNSAxMkM4LjY3MTU3IDEyIDggMTEuMzI4NCA4IDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxJbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSAxLjVDNSAxLjIyMzg2IDQuNzc2MTQgMSA0LjUgMUM0LjIyMzg2IDEgNCAxLjIyMzg2IDQgMS41TDQgN0M0IDcuMDE2NzEgNC4wMDA4MiA3LjAzMzIzIDQuMDAyNDIgNy4wNDk1MkMyLjg2MDA5IDcuMjgwMjIgMiA4LjI4OTY3IDIgOS41QzIgMTAuNzEwMyAyLjg2MDA5IDExLjcxOTggNC4wMDI0MiAxMS45NTA1QzQuMDAwODIgMTEuOTY2OCA0IDExLjk4MzMgNCAxMlYxMy41QzQgMTMuNzc2MSA0LjIyMzg2IDE0IDQuNSAxNEM0Ljc3NjE0IDE0IDUgMTMuNzc2MSA1IDEzLjVWMTJDNSAxMS45ODMzIDQuOTk5MTggMTEuOTY2OCA0Ljk5NzU4IDExLjk1MDVDNi4xMzk5IDExLjcxOTggNyAxMC43MTAzIDcgOS41QzcgOC4yODk2NyA2LjEzOTkgNy4yODAyMiA0Ljk5NzU4IDcuMDQ5NTJDNC45OTkxOCA3LjAzMzIzIDUgNy4wMTY3MSA1IDdMNSAxLjVaTTExIDEuNUMxMSAxLjIyMzg2IDEwLjc3NjEgMSAxMC41IDFDMTAuMjIzOSAxIDEwIDEuMjIzODYgMTAgMS41VjNDMTAgMy4wMTY3MSAxMC4wMDA4IDMuMDMzMjMgMTAuMDAyNCAzLjA0OTUyQzguODYwMSAzLjI4MDIyIDggNC4yODk2NyA4IDUuNUM4IDYuNzEwMzMgOC44NjAxIDcuNzE5NzggMTAuMDAyNCA3Ljk1MDQ4QzEwLjAwMDggNy45NjY3NyAxMCA3Ljk4MzI5IDEwIDhWMTMuNUMxMCAxMy43NzYxIDEwLjIyMzkgMTQgMTAuNSAxNEMxMC43NzYxIDE0IDExIDEzLjc3NjEgMTEgMTMuNVY4QzExIDcuOTgzMjkgMTAuOTk5MiA3Ljk2Njc3IDEwLjk5NzYgNy45NTA0OEMxMi4xMzk5IDcuNzE5NzggMTMgNi43MTAzMyAxMyA1LjVDMTMgNC4yODk2NyAxMi4xMzk5IDMuMjgwMjIgMTAuOTk3NiAzLjA0OTUyQzEwLjk5OTIgMy4wMzMyMyAxMSAzLjAxNjcxIDExIDNWMS41Wk00LjUgOEMzLjY3MTU3IDggMyA4LjY3MTU3IDMgOS41QzMgMTAuMzI4NCAzLjY3MTU3IDExIDQuNSAxMUM1LjMyODQzIDExIDYgMTAuMzI4NCA2IDkuNUM2IDguNjcxNTcgNS4zMjg0MyA4IDQuNSA4Wk05IDUuNUM5IDQuNjcxNTcgOS42NzE1NyA0IDEwLjUgNEMxMS4zMjg0IDQgMTIgNC42NzE1NyAxMiA1LjVDMTIgNi4zMjg0MyAxMS4zMjg0IDcgMTAuNSA3QzkuNjcxNTcgNyA5IDYuMzI4NDMgOSA1LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxBbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4yNTkyNSAzLjE2NjY3TDQuMzcwMzYgNS4zMzMzM1YxTDcuMjU5MjUgMy4xNjY2N1pNMSA4LjIyMjIyTDMuODg4ODkgNi4wNTU1NUwxIDMuODg4ODlWOC4yMjIyMlpNMSAxNEwzLjg4ODg5IDExLjgzMzNMMSA5LjY2NjY2VjE0Wk03Ljc0MDcyIDguMjIyMjJMMTAuNjI5NiA2LjA1NTU1TDcuNzQwNzIgMy44ODg4OVY4LjIyMjIyWk0xNCAzLjE2NjY3TDExLjExMTEgNS4zMzMzM1YxTDE0IDMuMTY2NjdaTTExLjExMTEgMTEuMTExMUwxNCA4Ljk0NDQ0TDExLjExMTEgNi43Nzc3N1YxMS4xMTExWk0zLjg4ODg5IDExLjExMTFMMSA4Ljk0NDQ0TDMuODg4ODkgNi43Nzc3N1YxMS4xMTExWk00LjM3MDM2IDYuMDU1NTVMNy4yNTkyNSA4LjIyMjIyVjMuODg4ODlMNC4zNzAzNiA2LjA1NTU1Wk0zLjg4ODg5IDUuMzMzMzNMMSAzLjE2NjY3TDMuODg4ODkgMVY1LjMzMzMzWk03Ljc0MDcyIDMuMTY2NjdMMTAuNjI5NiA1LjMzMzMzVjFMNy43NDA3MiAzLjE2NjY3Wk0xNCA4LjIyMjIyTDExLjExMTEgNi4wNTU1NUwxNCAzLjg4ODg5VjguMjIyMjJaTTExLjExMTEgMTEuODMzM0wxNCAxNFY5LjY2NjY2TDExLjExMTEgMTEuODMzM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFRuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjg5OTk4IDAuNDk5OTc2QzIuODk5OTggMC4yNzkwNjIgMi43MjA4OSAwLjA5OTk3NTYgMi40OTk5OCAwLjA5OTk3NTZDMi4yNzkwNiAwLjA5OTk3NTYgMi4wOTk5OCAwLjI3OTA2MiAyLjA5OTk4IDAuNDk5OTc2VjEuMDk5OThIMS40OTk5OEMxLjI3OTA2IDEuMDk5OTggMS4wOTk5OCAxLjI3OTA2IDEuMDk5OTggMS40OTk5OEMxLjA5OTk4IDEuNzIwODkgMS4yNzkwNiAxLjg5OTk4IDEuNDk5OTggMS44OTk5OEgyLjA5OTk4VjIuNDk5OThDMi4wOTk5OCAyLjcyMDg5IDIuMjc5MDYgMi44OTk5OCAyLjQ5OTk4IDIuODk5OThDMi43MjA4OSAyLjg5OTk4IDIuODk5OTggMi43MjA4OSAyLjg5OTk4IDIuNDk5OThWMS44OTk5OEgzLjQ5OTk4QzMuNzIwODkgMS44OTk5OCAzLjg5OTk4IDEuNzIwODkgMy44OTk5OCAxLjQ5OTk4QzMuODk5OTggMS4yNzkwNiAzLjcyMDg5IDEuMDk5OTggMy40OTk5OCAxLjA5OTk4SDIuODk5OThWMC40OTk5NzZaTTUuODk5OTggMy40OTk5OEM1Ljg5OTk4IDMuMjc5MDYgNS43MjA4OSAzLjA5OTk4IDUuNDk5OTggMy4wOTk5OEM1LjI3OTA2IDMuMDk5OTggNS4wOTk5OCAzLjI3OTA2IDUuMDk5OTggMy40OTk5OFY0LjA5OTk4SDQuNDk5OThDNC4yNzkwNiA0LjA5OTk4IDQuMDk5OTggNC4yNzkwNiA0LjA5OTk4IDQuNDk5OThDNC4wOTk5OCA0LjcyMDg5IDQuMjc5MDYgNC44OTk5OCA0LjQ5OTk4IDQuODk5OThINS4wOTk5OFY1LjQ5OTk4QzUuMDk5OTggNS43MjA4OSA1LjI3OTA2IDUuODk5OTggNS40OTk5OCA1Ljg5OTk4QzUuNzIwODkgNS44OTk5OCA1Ljg5OTk4IDUuNzIwODkgNS44OTk5OCA1LjQ5OTk4VjQuODk5OThINi40OTk5OEM2LjcyMDg5IDQuODk5OTggNi44OTk5OCA0LjcyMDg5IDYuODk5OTggNC40OTk5OEM2Ljg5OTk4IDQuMjc5MDYgNi43MjA4OSA0LjA5OTk4IDYuNDk5OTggNC4wOTk5OEg1Ljg5OTk4VjMuNDk5OThaTTEuODk5OTggNi40OTk5OEMxLjg5OTk4IDYuMjc5MDYgMS43MjA4OSA2LjA5OTk4IDEuNDk5OTggNi4wOTk5OEMxLjI3OTA2IDYuMDk5OTggMS4wOTk5OCA2LjI3OTA2IDEuMDk5OTggNi40OTk5OFY3LjA5OTk4SDAuNDk5OTc2QzAuMjc5MDYyIDcuMDk5OTggMC4wOTk5NzU2IDcuMjc5MDYgMC4wOTk5NzU2IDcuNDk5OThDMC4wOTk5NzU2IDcuNzIwODkgMC4yNzkwNjIgNy44OTk5OCAwLjQ5OTk3NiA3Ljg5OTk4SDEuMDk5OThWOC40OTk5OEMxLjA5OTk4IDguNzIwODkgMS4yNzkwNiA4Ljg5OTk3IDEuNDk5OTggOC44OTk5N0MxLjcyMDg5IDguODk5OTcgMS44OTk5OCA4LjcyMDg5IDEuODk5OTggOC40OTk5OFY3Ljg5OTk4SDIuNDk5OThDMi43MjA4OSA3Ljg5OTk4IDIuODk5OTggNy43MjA4OSAyLjg5OTk4IDcuNDk5OThDMi44OTk5OCA3LjI3OTA2IDIuNzIwODkgNy4wOTk5OCAyLjQ5OTk4IDcuMDk5OThIMS44OTk5OFY2LjQ5OTk4Wk04LjU0NDA2IDAuOTgxODRMOC4yNDYxOCAwLjk0MTU4NkM4LjAzMjc1IDAuOTE3Njc2IDcuOTA2OTIgMS4xNjU1IDguMDI5MzYgMS4zNDE5NEM4LjE3MDEzIDEuNTQ0NzkgOC4yOTk4MSAxLjc1NTkyIDguNDE3NTQgMS45NzQ0NUM4LjkxODc4IDIuOTA0ODUgOS4yMDMyMiAzLjk2OTMyIDkuMjAzMjIgNS4xMDAyMkM5LjIwMzIyIDguMzcyMDEgNi44MjI0NyAxMS4wODc4IDMuNjk4ODcgMTEuNjA5N0MzLjQ1NzM2IDExLjY1IDMuMjA5ODggMTEuNjc3MiAyLjk2MDA4IDExLjY5MDZDMi43NDU2MyAxMS43MDIgMi42MjcyOSAxMS45NTM1IDIuNzc3MjEgMTIuMTA3MkMyLjg0NTUxIDEyLjE3NzMgMi45MTUzNSAxMi4yNDU4IDIuOTg2NjcgMTIuMzEyOEwzLjA1ODgzIDEyLjM3OTVMMy4zMTg4MyAxMi42MDQ1TDMuNTA2ODQgMTIuNzUzMkwzLjYyNzk2IDEyLjg0MzNMMy44MTQ5MSAxMi45NzQyTDMuOTkwNzkgMTMuMDg5QzQuMTExNzUgMTMuMTY1MSA0LjIzNTM2IDEzLjIzNzUgNC4zNjE1NyAxMy4zMDU5TDQuNjI0OTYgMTMuNDQxMkw0Ljg4NTUzIDEzLjU2MDdMNS4xODgzNyAxMy42ODI4TDUuNDMxNjkgMTMuNzY4NkM1LjU2NTY0IDEzLjgxMjggNS43MDE0OSAxMy44NTI5IDUuODM4NTcgMTMuODg4NUM1Ljk0MjYyIDEzLjkxNTUgNi4wNDc2NyAxMy45NDAxIDYuMTU0MDUgMTMuOTYyMkM2LjI3OTkzIDEzLjk4ODMgNi40MDcxMyAxNC4wMTA5IDYuNTM1NDQgMTQuMDI5OEw2Ljg1MjQxIDE0LjA2ODVMNy4xMTkzNCAxNC4wODkyQzcuMjQ2MzcgMTQuMDk2NSA3LjM3NDM2IDE0LjEwMDIgNy41MDMyMiAxNC4xMDAyQzExLjE0ODMgMTQuMTAwMiAxNC4xMDMyIDExLjE0NTMgMTQuMTAzMiA3LjUwMDIzQzE0LjEwMzIgNy4yNTA0NCAxNC4wODkzIDcuMDAzODkgMTQuMDYyMyA2Ljc2MTMxTDE0LjAyNTUgNi40ODQwN0MxMy45OTEgNi4yNjA4MyAxMy45NDUzIDYuMDQxMjkgMTMuODg5MSA1LjgyNjQyQzEzLjgyMTMgNS41NjcwOSAxMy43MzgyIDUuMzEzOTggMTMuNjQwOSA1LjA2ODgxTDEzLjUyNzkgNC44MDEzMkwxMy40NTA3IDQuNjM1NDJMMTMuMzc2NiA0LjQ4NjY2QzEzLjIxNzggNC4xNzc3MyAxMy4wMzUzIDMuODgyOTUgMTIuODMxMiAzLjYwNDIzTDEyLjY3ODIgMy40MDM1MkwxMi40NzkzIDMuMTY0MzJMMTIuMzE1NyAyLjk4MzYxTDEyLjE5NjEgMi44NTk1MUwxMi4wMzU1IDIuNzAyNDZMMTEuODEzNCAyLjUwMTg0TDExLjQ5MjUgMi4yNDE5MUwxMS4yNDgzIDIuMDY0OThMMTAuOTU2MiAxLjg3NDQ2TDEwLjYzNDYgMS42ODg5NEwxMC4zMDczIDEuNTIzNzhMMTAuMTkzOCAxLjQ3MTc2TDkuOTU0ODggMS4zNzA2TDkuNjc3OTEgMS4yNjY5TDkuNDI1NjYgMS4xODQ2TDkuMTAwNzUgMS4wOTQ4OUw4LjgzNTk5IDEuMDM0ODZMOC41NDQwNiAwLjk4MTg0Wk0xMC40MDMyIDUuMzAwMjNDMTAuNDAzMiA0LjI3NTg4IDEwLjIwMDIgMy4yOTgyOSA5LjgzMjQ0IDIuNDA2MDRDMTEuNzYyMyAzLjI4OTk1IDEzLjEwMzIgNS4yMzg2MiAxMy4xMDMyIDcuNTAwMjNDMTMuMTAzMiAxMC41OTMgMTAuNTk2IDEzLjEwMDIgNy41MDMyMiAxMy4xMDAyQzYuNjM2NDYgMTMuMTAwMiA1LjgxNTk3IDEyLjkwMzYgNS4wODM1NSAxMi41NTIyQzYuNTQxOSAxMi4wOTQxIDcuODEwODEgMTEuMjA4MiA4Ljc0MzIyIDEwLjA0MTZDOC44Nzk2MyAxMC4yMjg0IDkuMTAwMjggMTAuMzQ5NyA5LjM0OTI4IDEwLjM0OTdDOS43NjM0OSAxMC4zNDk3IDEwLjA5OTMgMTAuMDEzOSAxMC4wOTkzIDkuNTk5NzFDMTAuMDk5MyA5LjI0MjU2IDkuODQ5NjUgOC45NDM3MyA5LjUxNTM1IDguODY4MTZDOS41Nzc0MSA4Ljc1MTY1IDkuNjM2NTMgOC42MzMzNCA5LjY5MjYgOC41MTMzMkM5Ljg4MzU4IDguNjMxNjMgMTAuMTA4OCA4LjY5OTkzIDEwLjM1IDguNjk5OTNDMTEuMDQwMyA4LjY5OTkzIDExLjYgOC4xNDAyOCAxMS42IDcuNDQ5OTNDMTEuNiA2Ljc1OTc2IDExLjA0MDYgNi4yMDAyNCAxMC4zNTA1IDYuMTk5OTNDMTAuMzg1MyA1LjkwNDg3IDEwLjQwMzIgNS42MDQ2NCAxMC40MDMyIDUuMzAwMjNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy44MTgxOSAwLjkzMTc5QzcuNjQyNDUgMC43NTYwNTQgNy4zNTc1MyAwLjc1NjA1NCA3LjE4MTc5IDAuOTMxNzlMNS40MzE3OSAyLjY4MTc5QzUuMjU2MDUgMi44NTc1MyA1LjI1NjA1IDMuMTQyNDUgNS40MzE3OSAzLjMxODE5QzUuNjA3NTMgMy40OTM5MiA1Ljg5MjQ1IDMuNDkzOTIgNi4wNjgxOSAzLjMxODE5TDYuOTk5OTkgMi4zODYzOFY1LjQ5OTk5QzYuOTk5OTkgNS43NzYxMyA3LjIyMzg1IDUuOTk5OTkgNy40OTk5OSA1Ljk5OTk5QzcuNzc2MTMgNS45OTk5OSA3Ljk5OTk5IDUuNzc2MTMgNy45OTk5OSA1LjQ5OTk5VjIuMzg2MzhMOC45MzE3OSAzLjMxODE5QzkuMTA3NTMgMy40OTM5MiA5LjM5MjQ1IDMuNDkzOTIgOS41NjgxOSAzLjMxODE5QzkuNzQzOTIgMy4xNDI0NSA5Ljc0MzkyIDIuODU3NTMgOS41NjgxOSAyLjY4MTc5TDcuODE4MTkgMC45MzE3OVpNNy45OTk5OSA5LjQ5OTk5QzcuOTk5OTkgOS4yMjM4NSA3Ljc3NjEzIDguOTk5OTkgNy40OTk5OSA4Ljk5OTk5QzcuMjIzODUgOC45OTk5OSA2Ljk5OTk5IDkuMjIzODUgNi45OTk5OSA5LjQ5OTk5VjEyLjYxMzZMNi4wNjgxOSAxMS42ODE4QzUuODkyNDUgMTEuNTA2MSA1LjYwNzUzIDExLjUwNjEgNS40MzE3OSAxMS42ODE4QzUuMjU2MDUgMTEuODU3NSA1LjI1NjA1IDEyLjE0MjQgNS40MzE3OSAxMi4zMTgyTDcuMTgxNzkgMTQuMDY4MkM3LjM1NzUzIDE0LjI0MzkgNy42NDI0NSAxNC4yNDM5IDcuODE4MTkgMTQuMDY4Mkw5LjU2ODE5IDEyLjMxODJDOS43NDM5MiAxMi4xNDI0IDkuNzQzOTIgMTEuODU3NSA5LjU2ODE5IDExLjY4MThDOS4zOTI0NSAxMS41MDYxIDkuMTA3NTMgMTEuNTA2MSA4LjkzMTc5IDExLjY4MThMNy45OTk5OSAxMi42MTM2VjkuNDk5OTlaTTguOTk5OTkgNy40OTk5OUM4Ljk5OTk5IDcuMjIzODUgOS4yMjM4NSA2Ljk5OTk5IDkuNDk5OTkgNi45OTk5OUgxMi42MTM2TDExLjY4MTggNi4wNjgxOUMxMS41MDYxIDUuODkyNDUgMTEuNTA2MSA1LjYwNzUzIDExLjY4MTggNS40MzE3OUMxMS44NTc1IDUuMjU2MDUgMTIuMTQyNCA1LjI1NjA1IDEyLjMxODIgNS40MzE3OUwxNC4wNjgyIDcuMTgxNzlDMTQuMjQzOSA3LjM1NzUzIDE0LjI0MzkgNy42NDI0NSAxNC4wNjgyIDcuODE4MTlMMTIuMzE4MiA5LjU2ODE5QzEyLjE0MjQgOS43NDM5MiAxMS44NTc1IDkuNzQzOTIgMTEuNjgxOCA5LjU2ODE5QzExLjUwNjEgOS4zOTI0NSAxMS41MDYxIDkuMTA3NTMgMTEuNjgxOCA4LjkzMTc5TDEyLjYxMzYgNy45OTk5OUg5LjQ5OTk5QzkuMjIzODUgNy45OTk5OSA4Ljk5OTk5IDcuNzc2MTMgOC45OTk5OSA3LjQ5OTk5Wk0zLjMxODE5IDYuMDY4MTlMMi4zODYzOCA2Ljk5OTk5SDUuNDk5OTlDNS43NzYxMyA2Ljk5OTk5IDUuOTk5OTkgNy4yMjM4NSA1Ljk5OTk5IDcuNDk5OTlDNS45OTk5OSA3Ljc3NjEzIDUuNzc2MTMgNy45OTk5OSA1LjQ5OTk5IDcuOTk5OTlIMi4zODYzOEwzLjMxODE5IDguOTMxNzlDMy40OTM5MiA5LjEwNzUzIDMuNDkzOTIgOS4zOTI0NSAzLjMxODE5IDkuNTY4MTlDMy4xNDI0NSA5Ljc0MzkyIDIuODU3NTMgOS43NDM5MiAyLjY4MTc5IDkuNTY4MTlMMC45MzE3OSA3LjgxODE5QzAuNzU2MDU0IDcuNjQyNDUgMC43NTYwNTQgNy4zNTc1MyAwLjkzMTc5IDcuMTgxNzlMMi42ODE3OSA1LjQzMTc5QzIuODU3NTMgNS4yNTYwNSAzLjE0MjQ1IDUuMjU2MDUgMy4zMTgxOSA1LjQzMTc5QzMuNDkzOTIgNS42MDc1MyAzLjQ5MzkyIDUuODkyNDUgMy4zMTgxOSA2LjA2ODE5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMjU3ODEgMy4xMTY4NEMzLjY3NzcxIDMuNDU3OTYgMy44MzUyMyAzLjQzMTkzIDQuNjIzNjkgMy4zNzkzM0wxMi4wNTcxIDIuOTMyOTlDMTIuMjE0NyAyLjkzMjk5IDEyLjA4MzYgMi43NzU3MSAxMi4wMzExIDIuNzQ5NTdMMTAuNzk2NSAxLjg1NzExQzEwLjU2IDEuNjczNDcgMTAuMjQ0OCAxLjQ2MzE1IDkuNjQwODMgMS41MTU3NkwyLjQ0MzA4IDIuMDQwNzRDMi4xODA1OSAyLjA2Njc3IDIuMTI4MTUgMi4xOTgwMSAyLjIzMjcgMi4zMDMyMkwzLjI1NzgxIDMuMTE2ODRaTTMuNzA0MSA0Ljg0OTE3VjEyLjY3MDRDMy43MDQxIDEzLjA5MDcgMy45MTQxNSAxMy4yNDggNC4zODY5MyAxMy4yMjJMMTIuNTU2MiAxMi43NDkzQzEzLjAyOTIgMTIuNzIzMyAxMy4wODE5IDEyLjQzNDEgMTMuMDgxOSAxMi4wOTI3VjQuMzIzOTdDMTMuMDgxOSAzLjk4MzA2IDEyLjk1MDggMy43OTkyMSAxMi42NjEyIDMuODI1NDVMNC4xMjQyMiA0LjMyMzk3QzMuODA5MTggNC4zNTA0NCAzLjcwNDEgNC41MDgwMyAzLjcwNDEgNC44NDkxN1pNMTEuNzY4OCA1LjI2ODcyQzExLjgyMTIgNS41MDUxOCAxMS43Njg4IDUuNzQxNDIgMTEuNTMxOSA1Ljc2Nzk5TDExLjEzODMgNS44NDY0MVYxMS42MjA1QzEwLjc5NjUgMTEuODA0MiAxMC40ODE0IDExLjkwOTIgMTAuMjE4OCAxMS45MDkyQzkuNzk4MzUgMTEuOTA5MiA5LjY5MzA1IDExLjc3NzkgOS4zNzgxMiAxMS4zODQ0TDYuODAzNDUgNy4zNDI0OVYxMS4yNTMyTDcuNjE4MTYgMTEuNDM3QzcuNjE4MTYgMTEuNDM3IDcuNjE4MTYgMTEuOTA5MiA2Ljk2MDg2IDExLjkwOTJMNS4xNDg3OSAxMi4wMTQzQzUuMDk2MTUgMTEuOTA5MiA1LjE0ODc5IDExLjY0NyA1LjMzMjU5IDExLjU5NDRMNS44MDU0NiAxMS40NjM0VjYuMjkyNzZMNS4xNDg5IDYuMjQwMTVDNS4wOTYyNSA2LjAwMzY5IDUuMjI3MzkgNS42NjI3OCA1LjU5NTQgNS42MzYzMUw3LjUzOTM1IDUuNTA1MjhMMTAuMjE4OCA5LjU5OThWNS45Nzc2NUw5LjUzNTY0IDUuODk5MjRDOS40ODMyIDUuNjEwMTggOS42OTMwNSA1LjQwMDI4IDkuOTU1NzYgNS4zNzQyNUwxMS43Njg4IDUuMjY4NzJaTTEuODM4NzQgMS4zMzIxMkw5LjMyNTU3IDAuNzgwNzg3QzEwLjI0NSAwLjcwMTkzMiAxMC40ODE1IDAuNzU0NzUzIDExLjA1OTQgMS4xNzQ1MkwxMy40NDkyIDIuODU0MjRDMTMuODQzNiAzLjE0MzA5IDEzLjk3NSAzLjIyMTczIDEzLjk3NSAzLjUzNjYxVjEyLjc0OTNDMTMuOTc1IDEzLjMyNjYgMTMuNzY0NyAxMy42NjgxIDEzLjAyOTMgMTMuNzIwM0w0LjMzNDkyIDE0LjI0NTRDMy43ODI5MSAxNC4yNzE3IDMuNTIwMTkgMTQuMTkzIDMuMjMxMTEgMTMuODI1M0wxLjQ3MTE2IDExLjU0MTlDMS4xNTU4IDExLjEyMTYgMS4wMjQ2NiAxMC44MDcxIDEuMDI0NjYgMTAuNDM5MlYyLjI1MDQxQzEuMDI0NjYgMS43NzgyNSAxLjIzNTA0IDEuMzg0NDEgMS44Mzg3NCAxLjMzMjEyWlwiLGZpbGw6bn0pKX0sVm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAxLjVDNC41IDQuMjUgMyA2LjUgMyA5QzMgMTEuNDg1MyA1LjAxNDcyIDEzLjUgNy41IDEzLjVDOS45ODUyOCAxMy41IDEyIDExLjQ4NTMgMTIgOUMxMiA2LjUgMTAuNSA0LjI1IDcuNSAxLjVaTTExIDlDMTEgNy4xMTIwMyA5Ljk3MzE1IDUuMjcxOTUgNy41IDIuODczNTdDNS4wMjY4NiA1LjI3MTk1IDQgNy4xMTIwMyA0IDlDNCAxMC45MzMgNS41NjcgMTIuNSA3LjUgMTIuNUM5LjQzMyAxMi41IDExIDEwLjkzMyAxMSA5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNDk5ODUgMS4xMDAwMUMzLjI3ODk0IDEuMTAwMDEgMy4wOTk4NSAxLjI3OTA5IDMuMDk5ODUgMS41MDAwMUMzLjA5OTg1IDEuNzIwOTIgMy4yNzg5NCAxLjkwMDAxIDMuNDk5ODUgMS45MDAwMUgxMS40OTk5QzExLjcyMDggMS45MDAwMSAxMS44OTk5IDEuNzIwOTIgMTEuODk5OSAxLjUwMDAxQzExLjg5OTkgMS4yNzkwOSAxMS43MjA4IDEuMTAwMDEgMTEuNDk5OSAxLjEwMDAxSDMuNDk5ODVaTTQuOTk5OTUgNC4yNTAwMUM0Ljk5OTk1IDMuOTczODcgNC43NzYwOSAzLjc1MDAxIDQuNDk5OTUgMy43NTAwMUM0LjIyMzgxIDMuNzUwMDEgMy45OTk5NSAzLjk3Mzg3IDMuOTk5OTUgNC4yNTAwMVY5LjU1MDAxQzMuOTk5OTUgMTEuNDgzIDUuNTY2OTUgMTMuMDUgNy40OTk5NSAxMy4wNUM5LjQzMjk1IDEzLjA1IDExIDExLjQ4MyAxMSA5LjU1MDAxVjQuMjUwMDFDMTEgMy45NzM4NyAxMC43NzYxIDMuNzUwMDEgMTAuNSAzLjc1MDAxQzEwLjIyMzggMy43NTAwMSA5Ljk5OTk1IDMuOTczODcgOS45OTk5NSA0LjI1MDAxVjkuNTUwMDFDOS45OTk5NSAxMC45MzA3IDguODgwNjYgMTIuMDUgNy40OTk5NSAxMi4wNUM2LjExOTI0IDEyLjA1IDQuOTk5OTUgMTAuOTMwNyA0Ljk5OTk1IDkuNTUwMDFWNC4yNTAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjg1NzE0IDJIMTIuMTQyOUMxMi42MTYyIDIgMTMgMi4zODM3NiAxMyAyLjg1NzE0VjEyLjE0MjlDMTMgMTIuNjE2MiAxMi42MTYyIDEzIDEyLjE0MjkgMTNIMi44NTcxNEMyLjM4Mzc2IDEzIDIgMTIuNjE2MiAyIDEyLjE0MjlWMi44NTcxNEMyIDIuMzgzNzYgMi4zODM3NiAyIDIuODU3MTQgMlpNMSAyLjg1NzE0QzEgMS44MzE0NyAxLjgzMTQ3IDEgMi44NTcxNCAxSDEyLjE0MjlDMTMuMTY4NSAxIDE0IDEuODMxNDcgMTQgMi44NTcxNFYxMi4xNDI5QzE0IDEzLjE2ODUgMTMuMTY4NSAxNCAxMi4xNDI5IDE0SDIuODU3MTRDMS44MzE0NyAxNCAxIDEzLjE2ODUgMSAxMi4xNDI5VjIuODU3MTRaTTcuNDk5ODggNS4wMDAxMkM3Ljc3NjAyIDUuMDAwMTIgNy45OTk4OCA0Ljc3NjI2IDcuOTk5ODggNC41MDAxMkM3Ljk5OTg4IDQuMjIzOTggNy43NzYwMiA0LjAwMDEyIDcuNDk5ODggNC4wMDAxMkM3LjIyMzc0IDQuMDAwMTIgNi45OTk4OCA0LjIyMzk4IDYuOTk5ODggNC41MDAxMkM2Ljk5OTg4IDQuNzc2MjYgNy4yMjM3NCA1LjAwMDEyIDcuNDk5ODggNS4wMDAxMlpNNC40OTk4OCAxMS4wMDAxQzQuNzc2MDIgMTEuMDAwMSA0Ljk5OTg4IDEwLjc3NjMgNC45OTk4OCAxMC41MDAxQzQuOTk5ODggMTAuMjI0IDQuNzc2MDIgMTAuMDAwMSA0LjQ5OTg4IDEwLjAwMDFDNC4yMjM3NCAxMC4wMDAxIDMuOTk5ODggMTAuMjI0IDMuOTk5ODggMTAuNTAwMUMzLjk5OTg4IDEwLjc3NjMgNC4yMjM3NCAxMS4wMDAxIDQuNDk5ODggMTEuMDAwMVpNNC45OTk4OCA3LjUwMDEyQzQuOTk5ODggNy43NzYyNiA0Ljc3NjAyIDguMDAwMTIgNC40OTk4OCA4LjAwMDEyQzQuMjIzNzQgOC4wMDAxMiAzLjk5OTg4IDcuNzc2MjYgMy45OTk4OCA3LjUwMDEyQzMuOTk5ODggNy4yMjM5OCA0LjIyMzc0IDcuMDAwMTIgNC40OTk4OCA3LjAwMDEyQzQuNzc2MDIgNy4wMDAxMiA0Ljk5OTg4IDcuMjIzOTggNC45OTk4OCA3LjUwMDEyWk00LjQ5OTg4IDUuMDAwMTJDNC43NzYwMiA1LjAwMDEyIDQuOTk5ODggNC43NzYyNiA0Ljk5OTg4IDQuNTAwMTJDNC45OTk4OCA0LjIyMzk4IDQuNzc2MDIgNC4wMDAxMiA0LjQ5OTg4IDQuMDAwMTJDNC4yMjM3NCA0LjAwMDEyIDMuOTk5ODggNC4yMjM5OCAzLjk5OTg4IDQuNTAwMTJDMy45OTk4OCA0Ljc3NjI2IDQuMjIzNzQgNS4wMDAxMiA0LjQ5OTg4IDUuMDAwMTJaTTEwLjk5OTkgMTAuNTAwMUMxMC45OTk5IDEwLjc3NjMgMTAuNzc2IDExLjAwMDEgMTAuNDk5OSAxMS4wMDAxQzEwLjIyMzcgMTEuMDAwMSA5Ljk5OTg4IDEwLjc3NjMgOS45OTk4OCAxMC41MDAxQzkuOTk5ODggMTAuMjI0IDEwLjIyMzcgMTAuMDAwMSAxMC40OTk5IDEwLjAwMDFDMTAuNzc2IDEwLjAwMDEgMTAuOTk5OSAxMC4yMjQgMTAuOTk5OSAxMC41MDAxWk0xMC40OTk5IDguMDAwMTJDMTAuNzc2IDguMDAwMTIgMTAuOTk5OSA3Ljc3NjI2IDEwLjk5OTkgNy41MDAxMkMxMC45OTk5IDcuMjIzOTggMTAuNzc2IDcuMDAwMTIgMTAuNDk5OSA3LjAwMDEyQzEwLjIyMzcgNy4wMDAxMiA5Ljk5OTg4IDcuMjIzOTggOS45OTk4OCA3LjUwMDEyQzkuOTk5ODggNy43NzYyNiAxMC4yMjM3IDguMDAwMTIgMTAuNDk5OSA4LjAwMDEyWk0xMC45OTk5IDQuNTAwMTJDMTAuOTk5OSA0Ljc3NjI2IDEwLjc3NiA1LjAwMDEyIDEwLjQ5OTkgNS4wMDAxMkMxMC4yMjM3IDUuMDAwMTIgOS45OTk4OCA0Ljc3NjI2IDkuOTk5ODggNC41MDAxMkM5Ljk5OTg4IDQuMjIzOTggMTAuMjIzNyA0LjAwMDEyIDEwLjQ5OTkgNC4wMDAxMkMxMC43NzYgNC4wMDAxMiAxMC45OTk5IDQuMjIzOTggMTAuOTk5OSA0LjUwMDEyWk03LjQ5OTg4IDExLjAwMDFDNy43NzYwMiAxMS4wMDAxIDcuOTk5ODggMTAuNzc2MyA3Ljk5OTg4IDEwLjUwMDFDNy45OTk4OCAxMC4yMjQgNy43NzYwMiAxMC4wMDAxIDcuNDk5ODggMTAuMDAwMUM3LjIyMzc0IDEwLjAwMDEgNi45OTk4OCAxMC4yMjQgNi45OTk4OCAxMC41MDAxQzYuOTk5ODggMTAuNzc2MyA3LjIyMzc0IDExLjAwMDEgNy40OTk4OCAxMS4wMDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sJG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuMjAzMDcgMS4wNDMxMkMxLjAwNDgxIDAuOTU0OTk4IDAuNzcyMzQgMS4wMDQ4IDAuNjI3NTc3IDEuMTY2NDFDMC40ODI4MTMgMS4zMjgwMiAwLjQ1ODc5NCAxLjU2NDU1IDAuNTY4MTE2IDEuNzUxOTZMMy45MjExNSA3LjUwMDAyTDAuNTY4MTE2IDEzLjI0ODFDMC40NTg3OTQgMTMuNDM1NSAwLjQ4MjgxMyAxMy42NzIgMC42Mjc1NzcgMTMuODMzNkMwLjc3MjM0IDEzLjk5NTIgMS4wMDQ4MSAxNC4wNDUgMS4yMDMwNyAxMy45NTY5TDE0LjcwMzEgNy45NTY5MkMxNC44ODM2IDcuODc2NjcgMTUgNy42OTc2MSAxNSA3LjUwMDAyQzE1IDcuMzAyNDIgMTQuODgzNiA3LjEyMzM2IDE0LjcwMzEgNy4wNDMxMUwxLjIwMzA3IDEuMDQzMTJaTTQuODQ1NTIgNy4xMDAwMkwyLjIxMjM0IDIuNTg2TDEzLjI2ODkgNy41MDAwMkwyLjIxMjM0IDEyLjQxNEw0Ljg0NTUyIDcuOTAwMDJIOUM5LjIyMDkxIDcuOTAwMDIgOS40IDcuNzIwOTQgOS40IDcuNTAwMDJDOS40IDcuMjc5MTEgOS4yMjA5MSA3LjEwMDAyIDkgNy4xMDAwMkg0Ljg0NTUyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuMDQ5OTUgMi43NDk5OEM2LjA0OTk1IDIuNDQ2MjMgNS44MDM3MSAyLjE5OTk4IDUuNDk5OTUgMi4xOTk5OEM1LjE5NjE5IDIuMTk5OTggNC45NDk5NSAyLjQ0NjIzIDQuOTQ5OTUgMi43NDk5OFYxMi4yNUM0Ljk0OTk1IDEyLjU1MzcgNS4xOTYxOSAxMi44IDUuNDk5OTUgMTIuOEM1LjgwMzcxIDEyLjggNi4wNDk5NSAxMi41NTM3IDYuMDQ5OTUgMTIuMjVWMi43NDk5OFpNMTAuMDUgMi43NDk5OEMxMC4wNSAyLjQ0NjIzIDkuODAzNzEgMi4xOTk5OCA5LjQ5OTk1IDIuMTk5OThDOS4xOTYxOSAyLjE5OTk4IDguOTQ5OTUgMi40NDYyMyA4Ljk0OTk1IDIuNzQ5OThWMTIuMjVDOC45NDk5NSAxMi41NTM3IDkuMTk2MTkgMTIuOCA5LjQ5OTk1IDEyLjhDOS44MDM3MSAxMi44IDEwLjA1IDEyLjU1MzcgMTAuMDUgMTIuMjVWMi43NDk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEZuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS44NTM2IDEuMTQ2NDVDMTEuNjU4MyAwLjk1MTE4NCAxMS4zNDE3IDAuOTUxMTg0IDExLjE0NjUgMS4xNDY0NUwzLjcxNDU1IDguNTc4MzZDMy42MjQ1OSA4LjY2ODMyIDMuNTUyNjMgOC43NzQ2MSAzLjUwMjUxIDguODkxNTVMMi4wNDA0NCAxMi4zMDNDMS45NTk5IDEyLjQ5MSAyLjAwMTg5IDEyLjcwOSAyLjE0NjQ2IDEyLjg1MzZDMi4yOTEwMyAxMi45OTgxIDIuNTA5MDUgMTMuMDQwMSAyLjY5Njk3IDEyLjk1OTZMNi4xMDg0NyAxMS40OTc1QzYuMjI1NCAxMS40NDc0IDYuMzMxNyAxMS4zNzU0IDYuNDIxNjYgMTEuMjg1NUwxMy44NTM2IDMuODUzNTVDMTQuMDQ4OCAzLjY1ODI5IDE0LjA0ODggMy4zNDE3MSAxMy44NTM2IDMuMTQ2NDVMMTEuODUzNiAxLjE0NjQ1Wk00LjQyMTY2IDkuMjg1NDdMMTEuNSAyLjIwNzExTDEyLjc5MjkgMy41TDUuNzE0NTUgMTAuNTc4NEw0LjIxOTI0IDExLjIxOTJMMy43ODA4MSAxMC43ODA4TDQuNDIxNjYgOS4yODU0N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFVuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi4xNDY0IDEuMTQ2NDVDMTIuMzQxNyAwLjk1MTE4NCAxMi42NTgzIDAuOTUxMTg0IDEyLjg1MzUgMS4xNDY0NUwxNC44NTM1IDMuMTQ2NDVDMTUuMDQ4OCAzLjM0MTcxIDE1LjA0ODggMy42NTgyOSAxNC44NTM1IDMuODUzNTVMMTAuOTEwOSA3Ljc5NjE4QzEwLjgzNDkgNy44NzIxOCAxMC43NDcxIDcuOTM1NDMgMTAuNjUxIDcuOTgzNUw2LjcyMzU5IDkuOTQ3MjFDNi41MzEwOSAxMC4wNDM1IDYuMjk4NjEgMTAuMDA1NyA2LjE0NjQzIDkuODUzNTVDNS45OTQyNSA5LjcwMTM3IDUuOTU2NTIgOS40Njg4OSA2LjA1Mjc3IDkuMjc2MzlMOC4wMTY0OCA1LjM0ODk3QzguMDY0NTUgNS4yNTI4MyA4LjEyNzggNS4xNjUwNyA4LjIwMzggNS4wODkwN0wxMi4xNDY0IDEuMTQ2NDVaTTEyLjUgMi4yMDcxMUw4LjkxMDkxIDUuNzk2MThMNy44NzI2NiA3Ljg3MjY3TDguMTI3MzEgOC4xMjczMkwxMC4yMDM4IDcuMDg5MDdMMTMuNzkyOSAzLjVMMTIuNSAyLjIwNzExWk05Ljk5OTk4IDJMOC45OTk5OCAzSDQuOUM0LjQ3MTcxIDMgNC4xODA1NiAzLjAwMDM5IDMuOTU1NTIgMy4wMTg3N0MzLjczNjMxIDMuMDM2NjggMy42MjQyMSAzLjA2OTE1IDMuNTQ2MDEgMy4xMDg5OUMzLjM1Nzg1IDMuMjA0ODcgMy4yMDQ4NyAzLjM1Nzg1IDMuMTA4OTkgMy41NDYwMUMzLjA2OTE1IDMuNjI0MjEgMy4wMzY2OSAzLjczNjMxIDMuMDE4NzggMy45NTU1MkMzLjAwMDM5IDQuMTgwNTYgMyA0LjQ3MTcxIDMgNC45VjExLjFDMyAxMS41MjgzIDMuMDAwMzkgMTEuODE5NCAzLjAxODc4IDEyLjA0NDVDMy4wMzY2OSAxMi4yNjM3IDMuMDY5MTUgMTIuMzc1OCAzLjEwODk5IDEyLjQ1NEMzLjIwNDg3IDEyLjY0MjIgMy4zNTc4NSAxMi43OTUxIDMuNTQ2MDEgMTIuODkxQzMuNjI0MjEgMTIuOTMwOSAzLjczNjMxIDEyLjk2MzMgMy45NTU1MiAxMi45ODEyQzQuMTgwNTYgMTIuOTk5NiA0LjQ3MTcxIDEzIDQuOSAxM0gxMS4xQzExLjUyODMgMTMgMTEuODE5NCAxMi45OTk2IDEyLjA0NDUgMTIuOTgxMkMxMi4yNjM3IDEyLjk2MzMgMTIuMzc1OCAxMi45MzA5IDEyLjQ1NCAxMi44OTFDMTIuNjQyMiAxMi43OTUxIDEyLjc5NTEgMTIuNjQyMiAxMi44OTEgMTIuNDU0QzEyLjkzMDkgMTIuMzc1OCAxMi45NjMzIDEyLjI2MzcgMTIuOTgxMiAxMi4wNDQ1QzEyLjk5OTYgMTEuODE5NCAxMyAxMS41MjgzIDEzIDExLjFWNi45OTk5OEwxNCA1Ljk5OTk4VjExLjFWMTEuMTIwN0MxNCAxMS41MjMxIDE0IDExLjg1NTMgMTMuOTc3OSAxMi4xMjU5QzEzLjk1NDkgMTIuNDA3IDEzLjkwNTcgMTIuNjY1MyAxMy43ODIgMTIuOTA4QzEzLjU5MDMgMTMuMjg0MyAxMy4yODQzIDEzLjU5MDMgMTIuOTA4IDEzLjc4MkMxMi42NjUzIDEzLjkwNTcgMTIuNDA3IDEzLjk1NDkgMTIuMTI1OSAxMy45Nzc5QzExLjg1NTMgMTQgMTEuNTIzMSAxNCAxMS4xMjA3IDE0SDExLjFINC45SDQuODc5MzRDNC40NzY4NiAxNCA0LjE0NDY4IDE0IDMuODc0MDkgMTMuOTc3OUMzLjU5MzA0IDEzLjk1NDkgMy4zMzQ2OSAxMy45MDU3IDMuMDkyMDIgMTMuNzgyQzIuNzE1NyAxMy41OTAzIDIuNDA5NzMgMTMuMjg0MyAyLjIxNzk5IDEyLjkwOEMyLjA5NDM0IDEyLjY2NTMgMi4wNDUwNiAxMi40MDcgMi4wMjIxIDEyLjEyNTlDMS45OTk5OSAxMS44NTUzIDEuOTk5OTkgMTEuNTIzMSAyIDExLjEyMDdWMTEuMTIwNlYxMS4xVjQuOVY0Ljg3OTM1VjQuODc5MzJWNC44NzkzMUMxLjk5OTk5IDQuNDc2ODUgMS45OTk5OSA0LjE0NDY4IDIuMDIyMSAzLjg3NDA5QzIuMDQ1MDYgMy41OTMwNCAyLjA5NDM0IDMuMzM0NjkgMi4yMTc5OSAzLjA5MjAyQzIuNDA5NzMgMi43MTU2OSAyLjcxNTcgMi40MDk3MyAzLjA5MjAyIDIuMjE3OTlDMy4zMzQ2OSAyLjA5NDM0IDMuNTkzMDQgMi4wNDUwNiAzLjg3NDA5IDIuMDIyMUM0LjE0NDY4IDEuOTk5OTkgNC40NzY4NSAxLjk5OTk5IDQuODc5MzIgMkg0Ljg3OTM1SDQuOUg5Ljk5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sV249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAwLjg3NUM1LjQ5Nzk3IDAuODc1IDMuODc1IDIuNDk3OTcgMy44NzUgNC41QzMuODc1IDYuMTUyODggNC45ODEyNCA3LjU0NzM4IDYuNDkzNzMgNy45ODM1MUM1LjI5OTcgOC4xMjkwMSA0LjI3NTU3IDguNTUxMzQgMy41MDQwNyA5LjMxMTY3QzIuNTIyMTYgMTAuMjc5NCAyLjAyNTAyIDExLjcyIDIuMDI1MDIgMTMuNTk5OUMyLjAyNTAyIDEzLjg2MjMgMi4yMzc2OSAxNC4wNzQ5IDIuNTAwMDIgMTQuMDc0OUMyLjc2MjM2IDE0LjA3NDkgMi45NzUwMiAxMy44NjIzIDIuOTc1MDIgMTMuNTk5OUMyLjk3NTAyIDExLjg3OTkgMy40Mjc4NiAxMC43MjA2IDQuMTcwOTEgOS45ODgzQzQuOTE1MzYgOS4yNTQ2MyA2LjAyNjc0IDguODc0OTkgNy40OTk5NSA4Ljg3NDk5QzguOTczMTcgOC44NzQ5OSAxMC4wODQ2IDkuMjU0NjMgMTAuODI5MSA5Ljk4ODMxQzExLjU3MjEgMTAuNzIwNiAxMi4wMjUgMTEuODc5OSAxMi4wMjUgMTMuNTk5OUMxMi4wMjUgMTMuODYyMyAxMi4yMzc2IDE0LjA3NDkgMTIuNSAxNC4wNzQ5QzEyLjc2MjMgMTQuMDc1IDEyLjk3NSAxMy44NjIzIDEyLjk3NSAxMy42QzEyLjk3NSAxMS43MiAxMi40Nzc4IDEwLjI3OTQgMTEuNDk1OSA5LjMxMTY2QzEwLjcyNDQgOC41NTEzNSA5LjcwMDI1IDguMTI5MDMgOC41MDYyNSA3Ljk4MzUyQzEwLjAxODcgNy41NDc0IDExLjEyNSA2LjE1Mjg5IDExLjEyNSA0LjVDMTEuMTI1IDIuNDk3OTcgOS41MDIwMyAwLjg3NSA3LjUgMC44NzVaTTQuODI1IDQuNUM0LjgyNSAzLjAyMjY0IDYuMDIyNjQgMS44MjUgNy41IDEuODI1QzguOTc3MzYgMS44MjUgMTAuMTc1IDMuMDIyNjQgMTAuMTc1IDQuNUMxMC4xNzUgNS45NzczNiA4Ljk3NzM2IDcuMTc1IDcuNSA3LjE3NUM2LjAyMjY0IDcuMTc1IDQuODI1IDUuOTc3MzYgNC44MjUgNC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sem49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuODUwMDEgNy41MDA0M0MxLjg1MDAxIDQuMzc5NzUgNC4zNzk2MyAxLjg1MDAxIDcuNTAwMDEgMS44NTAwMUMxMC42MjA0IDEuODUwMDEgMTMuMTUgNC4zNzk3NSAxMy4xNSA3LjUwMDQzQzEzLjE1IDEwLjYyMTEgMTAuNjIwNCAxMy4xNTA5IDcuNTAwMDEgMTMuMTUwOUM0LjM3OTYzIDEzLjE1MDkgMS44NTAwMSAxMC42MjExIDEuODUwMDEgNy41MDA0M1pNNy41MDAwMSAwLjg1MDAwNkMzLjgyNzI4IDAuODUwMDA2IDAuODUwMDA2IDMuODI3NTMgMC44NTAwMDYgNy41MDA0M0MwLjg1MDAwNiAxMS4xNzMzIDMuODI3MjggMTQuMTUwOSA3LjUwMDAxIDE0LjE1MDlDMTEuMTcyNyAxNC4xNTA5IDE0LjE1IDExLjE3MzMgMTQuMTUgNy41MDA0M0MxNC4xNSAzLjgyNzUzIDExLjE3MjcgMC44NTAwMDYgNy41MDAwMSAwLjg1MDAwNlpNNy4wMDAwMSA4LjAwMDAxVjMuMTI4MTFDNy4xNjQxMSAzLjEwOTU0IDcuMzMwOTQgMy4xMDAwMSA3LjUwMDAxIDMuMTAwMDFDOS45MzAwNiAzLjEwMDAxIDExLjkgNS4wNzAxNCAxMS45IDcuNTAwNDNDMTEuOSA3LjY2OTM1IDExLjg5MDUgNy44MzYwNCAxMS44NzIgOC4wMDAwMUg3LjAwMDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sR249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgNS41QzMgNy45ODMgNC45OTE2OSA5IDcgOVYxMi41QzcgMTIuNzc2MSA3LjIyMzg2IDEzIDcuNSAxM0M3Ljc3NjE0IDEzIDggMTIuNzc2MSA4IDEyLjVWOVYzLjFIOVYxMi41QzkgMTIuNzc2MSA5LjIyMzg2IDEzIDkuNSAxM0M5Ljc3NjE0IDEzIDEwIDEyLjc3NjEgMTAgMTIuNVYzLjFIMTEuNUMxMS44MDM4IDMuMSAxMi4wNSAyLjg1Mzc2IDEyLjA1IDIuNTVDMTIuMDUgMi4yNDYyNCAxMS44MDM4IDIgMTEuNSAySDkuNUg4SDcuNUg3QzQuOTkxNjkgMiAzIDMuMDE3IDMgNS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjUgMTMuOTVDMTMuNzQ4NSAxMy45NSAxMy45NSAxMy43NDg1IDEzLjk1IDEzLjVDMTMuOTUgMTMuMjUxNCAxMy43NDg1IDEzLjA1IDEzLjUgMTMuMDVMMS40OTk5NSAxMy4wNUMxLjI1MTQyIDEzLjA1IDEuMDQ5OTUgMTMuMjUxNCAxLjA0OTk1IDEzLjVDMS4wNDk5NSAxMy43NDg1IDEuMjUxNDIgMTMuOTUgMS40OTk5NSAxMy45NUwxMy41IDEzLjk1Wk0xMS4wNjgxIDcuNTY4M0MxMS4yNDM5IDcuMzkyNTcgMTEuMjQzOSA3LjEwNzY0IDExLjA2ODEgNi45MzE5MUMxMC44OTI0IDYuNzU2MTcgMTAuNjA3NSA2Ljc1NjE3IDEwLjQzMTcgNi45MzE5MUw3Ljk0OTkzIDkuNDEzNzFMNy45NDk5MyAxLjQ5OTk4QzcuOTQ5OTMgMS4yNTE0NiA3Ljc0ODQ2IDEuMDQ5OTggNy40OTk5MyAxLjA0OTk4QzcuMjUxNCAxLjA0OTk4IDcuMDQ5OTMgMS4yNTE0NiA3LjA0OTkzIDEuNDk5OThMNy4wNDk5MyA5LjQxMzcxTDQuNTY4MTMgNi45MzE5MUM0LjM5MjM5IDYuNzU2MTcgNC4xMDc0NiA2Ljc1NjE3IDMuOTMxNzMgNi45MzE5MUMzLjc1NTk5IDcuMTA3NjQgMy43NTU5OSA3LjM5MjU3IDMuOTMxNzMgNy41NjgzTDcuMTgxNzMgMTAuODE4M0M3LjM1NzQ2IDEwLjk5NCA3LjY0MjM5IDEwLjk5NCA3LjgxODEyIDEwLjgxODNMMTEuMDY4MSA3LjU2ODNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxZbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi4wNTAwNSAxMy41QzIuMDUwMDUgMTMuNzQ4NSAyLjI1MTUyIDEzLjk1IDIuNTAwMDUgMTMuOTVDMi43NDg1OCAxMy45NSAyLjk1MDA1IDEzLjc0ODUgMi45NTAwNSAxMy41TDIuOTUwMDUgMS40OTk5NUMyLjk1MDA1IDEuMjUxNDIgMi43NDg1OCAxLjA0OTk1IDIuNTAwMDUgMS4wNDk5NUMyLjI1MTUyIDEuMDQ5OTUgMi4wNTAwNSAxLjI1MTQyIDIuMDUwMDUgMS40OTk5NUwyLjA1MDA1IDEzLjVaTTguNDMxNyAxMS4wNjgxQzguNjA3NDMgMTEuMjQzOSA4Ljg5MjM2IDExLjI0MzkgOS4wNjgwOSAxMS4wNjgxQzkuMjQzODMgMTAuODkyNCA5LjI0MzgzIDEwLjYwNzUgOS4wNjgwOSAxMC40MzE3TDYuNTg2MjkgNy45NDk5M0wxNC41IDcuOTQ5OTNDMTQuNzQ4NSA3Ljk0OTkzIDE0Ljk1IDcuNzQ4NDYgMTQuOTUgNy40OTk5M0MxNC45NSA3LjI1MTQgMTQuNzQ4NSA3LjA0OTkzIDE0LjUgNy4wNDk5M0w2LjU4NjI5IDcuMDQ5OTNMOS4wNjgwOSA0LjU2ODEzQzkuMjQzODMgNC4zOTIzOSA5LjI0MzgzIDQuMTA3NDYgOS4wNjgwOSAzLjkzMTczQzguODkyMzYgMy43NTU5OSA4LjYwNzQzIDMuNzU1OTkgOC40MzE3IDMuOTMxNzNMNS4xODE3IDcuMTgxNzNDNS4wMDU5NiA3LjM1NzQ2IDUuMDA1OTYgNy42NDIzOSA1LjE4MTcgNy44MTgxMkw4LjQzMTcgMTEuMDY4MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEtuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi45NSAxLjUwMDA1QzEyLjk1IDEuMjUxNTIgMTIuNzQ4NSAxLjA1MDA1IDEyLjUgMS4wNTAwNUMxMi4yNTE0IDEuMDUwMDUgMTIuMDUgMS4yNTE1MiAxMi4wNSAxLjUwMDA1TDEyLjA1IDEzLjVDMTIuMDUgMTMuNzQ4NiAxMi4yNTE0IDEzLjk1IDEyLjUgMTMuOTVDMTIuNzQ4NSAxMy45NSAxMi45NSAxMy43NDg2IDEyLjk1IDEzLjVMMTIuOTUgMS41MDAwNVpNNi41NjgzIDMuOTMxODhDNi4zOTI1NyAzLjc1NjE0IDYuMTA3NjQgMy43NTYxNCA1LjkzMTkxIDMuOTMxODhDNS43NTYxNyA0LjEwNzYxIDUuNzU2MTcgNC4zOTI1NCA1LjkzMTkxIDQuNTY4MjdMOC40MTM3MSA3LjA1MDA3TDAuNDk5OTg0IDcuMDUwMDdDMC4yNTE0NTYgNy4wNTAwNyAwLjA0OTk4NDcgNy4yNTE1NSAwLjA0OTk4NDcgNy41MDAwN0MwLjA0OTk4NDYgNy43NDg2IDAuMjUxNDU3IDcuOTUwMDcgMC40OTk5ODQgNy45NTAwN0w4LjQxMzcxIDcuOTUwMDdMNS45MzE5MSAxMC40MzE5QzUuNzU2MTcgMTAuNjA3NiA1Ljc1NjE3IDEwLjg5MjUgNS45MzE5MSAxMS4wNjgzQzYuMTA3NjQgMTEuMjQ0IDYuMzkyNTcgMTEuMjQ0IDYuNTY4MzEgMTEuMDY4M0w5LjgxODMgNy44MTgyN0M5Ljk5NDA0IDcuNjQyNTQgOS45OTQwNCA3LjM1NzYxIDkuODE4MyA3LjE4MTg4TDYuNTY4MyAzLjkzMTg4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNTAwMDUgMS4wNTAwNUMxLjI1MTUyIDEuMDUwMDUgMS4wNTAwNSAxLjI1MTUyIDEuMDUwMDUgMS41MDAwNUMxLjA1MDA1IDEuNzQ4NTggMS4yNTE1MiAxLjk1MDA1IDEuNTAwMDUgMS45NTAwNUwxMy41IDEuOTUwMDVDMTMuNzQ4NiAxLjk1MDA1IDEzLjk1IDEuNzQ4NTggMTMuOTUgMS41MDAwNUMxMy45NSAxLjI1MTUyIDEzLjc0ODYgMS4wNTAwNSAxMy41IDEuMDUwMDVIMS41MDAwNVpNMy45MzE4OCA3LjQzMTY5QzMuNzU2MTQgNy42MDc0MyAzLjc1NjE0IDcuODkyMzYgMy45MzE4OCA4LjA2ODA5QzQuMTA3NjEgOC4yNDM4MyA0LjM5MjU0IDguMjQzODMgNC41NjgyNyA4LjA2ODA5TDcuMDUwMDcgNS41ODYyOVYxMy41QzcuMDUwMDcgMTMuNzQ4NSA3LjI1MTU1IDEzLjk1IDcuNTAwMDcgMTMuOTVDNy43NDg2IDEzLjk1IDcuOTUwMDcgMTMuNzQ4NSA3Ljk1MDA3IDEzLjVMNy45NTAwNyA1LjU4NjI5TDEwLjQzMTkgOC4wNjgwOUMxMC42MDc2IDguMjQzODMgMTAuODkyNSA4LjI0MzgzIDExLjA2ODMgOC4wNjgwOUMxMS4yNDQgNy44OTIzNSAxMS4yNDQgNy42MDc0MyAxMS4wNjgzIDcuNDMxNjlMNy44MTgyNyA0LjE4MTY5QzcuNjQyNTQgNC4wMDU5NiA3LjM1NzYxIDQuMDA1OTYgNy4xODE4OCA0LjE4MTY5TDMuOTMxODggNy40MzE2OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjI0MTgyIDIuMzIxODFDMy4zOTE5IDIuMjMxMzIgMy41Nzg0IDIuMjI2MDEgMy43MzMzOCAyLjMwNzgxTDEyLjczMzQgNy4wNTc4MUMxMi44OTc0IDcuMTQ0MzYgMTMgNy4zMTQ1NyAxMyA3LjVDMTMgNy42ODU0MyAxMi44OTc0IDcuODU1NjQgMTIuNzMzNCA3Ljk0MjE5TDMuNzMzMzggMTIuNjkyMkMzLjU3ODQgMTIuNzc0IDMuMzkxOSAxMi43Njg3IDMuMjQxODIgMTIuNjc4MkMzLjA5MTc1IDEyLjU4NzcgMyAxMi40MjUyIDMgMTIuMjVWMi43NUMzIDIuNTc0NzYgMy4wOTE3NSAyLjQxMjMgMy4yNDE4MiAyLjMyMTgxWk00IDMuNTc5MjVWMTEuNDIwN0wxMS40Mjg4IDcuNUw0IDMuNTc5MjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxRbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOCAyLjc1QzggMi40NzM4NiA3Ljc3NjE0IDIuMjUgNy41IDIuMjVDNy4yMjM4NiAyLjI1IDcgMi40NzM4NiA3IDIuNzVWN0gyLjc1QzIuNDczODYgNyAyLjI1IDcuMjIzODYgMi4yNSA3LjVDMi4yNSA3Ljc3NjE0IDIuNDczODYgOCAyLjc1IDhIN1YxMi4yNUM3IDEyLjUyNjEgNy4yMjM4NiAxMi43NSA3LjUgMTIuNzVDNy43NzYxNCAxMi43NSA4IDEyLjUyNjEgOCAxMi4yNVY4SDEyLjI1QzEyLjUyNjEgOCAxMi43NSA3Ljc3NjE0IDEyLjc1IDcuNUMxMi43NSA3LjIyMzg2IDEyLjUyNjEgNyAxMi4yNSA3SDhWMi43NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGVyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk0xLjgyNzA3IDcuNDk5NzJDMS44MjcwNyA0LjM2NjcxIDQuMzY2ODkgMS44MjY4OSA3LjQ5OTkxIDEuODI2ODlDMTAuNjMyOSAxLjgyNjg5IDEzLjE3MjcgNC4zNjY3MSAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyAxMC42MzI3IDEwLjYzMjkgMTMuMTcyNiA3LjQ5OTkxIDEzLjE3MjZDNC4zNjY4OSAxMy4xNzI2IDEuODI3MDcgMTAuNjMyNyAxLjgyNzA3IDcuNDk5NzJaTTcuNTAwMDMgNEM3Ljc3NjE3IDQgOC4wMDAwMyA0LjIyMzg2IDguMDAwMDMgNC41VjdIMTAuNUMxMC43NzYyIDcgMTEgNy4yMjM4NiAxMSA3LjVDMTEgNy43NzYxNCAxMC43NzYyIDggMTAuNSA4SDguMDAwMDNWMTAuNUM4LjAwMDAzIDEwLjc3NjEgNy43NzYxNyAxMSA3LjUwMDAzIDExQzcuMjIzODkgMTEgNy4wMDAwMyAxMC43NzYxIDcuMDAwMDMgMTAuNVY4SDQuNTAwMDNDNC4yMjM4OSA4IDQuMDAwMDMgNy43NzYxNCA0LjAwMDAzIDcuNUM0LjAwMDAzIDcuMjIzODYgNC4yMjM4OSA3IDQuNTAwMDMgN0g3LjAwMDAzVjQuNUM3LjAwMDAzIDQuMjIzODYgNy4yMjM4OSA0IDcuNTAwMDMgNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHRyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjA3NTA1IDQuMTAwMDFDNS4wNzUwNSAyLjkxMTAzIDYuMjU3MjcgMS45MjUwMiA3LjUwMDA1IDEuOTI1MDJDOC43NDI4MyAxLjkyNTAyIDkuOTI1MDUgMi45MTEwMyA5LjkyNTA1IDQuMTAwMDFDOS45MjUwNSA1LjE5ODYxIDkuMzY3ODIgNS43MTQzNiA4LjYxODU0IDYuMzc4ODRMOC41ODc1NyA2LjQwNjNDNy44NDQ4MSA3LjA2NDY3IDYuOTI1MDUgNy44Nzk5NSA2LjkyNTA1IDkuNUM2LjkyNTA1IDkuODE3NTcgNy4xODI0OCAxMC4wNzUgNy41MDAwNSAxMC4wNzVDNy44MTc2MSAxMC4wNzUgOC4wNzUwNSA5LjgxNzU3IDguMDc1MDUgOS41QzguMDc1MDUgOC40MTUxNyA4LjYyOTQ1IDcuOTA2MjMgOS4zODE1NiA3LjIzOTI1TDkuNDAyMzggNy4yMjA3OUMxMC4xNDk2IDYuNTU4MjkgMTEuMDc1IDUuNzM3NzUgMTEuMDc1IDQuMTAwMDFDMTEuMDc1IDIuMTI3NTcgOS4yMTg2OSAwLjc3NTAyNCA3LjUwMDA1IDAuNzc1MDI0QzUuNzgxNCAwLjc3NTAyNCAzLjkyNTA1IDIuMTI3NTcgMy45MjUwNSA0LjEwMDAxQzMuOTI1MDUgNC40MTc1OCA0LjE4MjQ5IDQuNjc1MDEgNC41MDAwNSA0LjY3NTAxQzQuODE3NjEgNC42NzUwMSA1LjA3NTA1IDQuNDE3NTggNS4wNzUwNSA0LjEwMDAxWk03LjUwMDA1IDEzLjM1NzVDNy45ODMzIDEzLjM1NzUgOC4zNzUwNSAxMi45NjU3IDguMzc1MDUgMTIuNDgyNUM4LjM3NTA1IDExLjk5OTIgNy45ODMzIDExLjYwNzUgNy41MDAwNSAxMS42MDc1QzcuMDE2OCAxMS42MDc1IDYuNjI1MDUgMTEuOTk5MiA2LjYyNTA1IDEyLjQ4MjVDNi42MjUwNSAxMi45NjU3IDcuMDE2OCAxMy4zNTc1IDcuNTAwMDUgMTMuMzU3NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG5yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDMuODQyMDQgMy44NDIyMiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyQzExLjE1NzYgMC44NzY4OTIgMTQuMTIyNyAzLjg0MjA0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDExLjE1NzQgMTEuMTU3NiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMzLjg0MjIyIDE0LjEyMjYgMC44NzcwNzUgMTEuMTU3NCAwLjg3NzA3NSA3LjQ5OTcyWk03LjQ5OTkxIDEuODI2ODlDNC4zNjY4OSAxLjgyNjg5IDEuODI3MDggNC4zNjY3MSAxLjgyNzA4IDcuNDk5NzJDMS44MjcwOCAxMC42MzI3IDQuMzY2ODkgMTMuMTcyNiA3LjQ5OTkxIDEzLjE3MjZDMTAuNjMyOSAxMy4xNzI2IDEzLjE3MjcgMTAuNjMyNyAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyA0LjM2NjcxIDEwLjYzMjkgMS44MjY4OSA3LjQ5OTkxIDEuODI2ODlaTTguMjQ5OTMgMTAuNUM4LjI0OTkzIDEwLjkxNDIgNy45MTQxNCAxMS4yNSA3LjQ5OTkzIDExLjI1QzcuMDg1NzEgMTEuMjUgNi43NDk5MyAxMC45MTQyIDYuNzQ5OTMgMTAuNUM2Ljc0OTkzIDEwLjA4NTggNy4wODU3MSA5Ljc1IDcuNDk5OTMgOS43NUM3LjkxNDE0IDkuNzUgOC4yNDk5MyAxMC4wODU4IDguMjQ5OTMgMTAuNVpNNi4wNTAwMyA2LjI1QzYuMDUwMDMgNS41NzIxMSA2LjYzNTExIDQuOTI1IDcuNTAwMDMgNC45MjVDOC4zNjQ5NiA0LjkyNSA4Ljk1MDAzIDUuNTcyMTEgOC45NTAwMyA2LjI1QzguOTUwMDMgNi43NDExOCA4LjY4MDAyIDYuOTkyMTIgOC4yMTQ0NyA3LjI3NDk0QzguMTYyNTEgNy4zMDY1MSA4LjEwMjU4IDcuMzQxMzEgOC4wMzg0NyA3LjM3ODU0TDguMDM4NDEgNy4zNzg1OEM3Ljg1NTIxIDcuNDg0OTcgNy42Mzc4OCA3LjYxMTE5IDcuNDc0NDkgNy43Mzg0OUM3LjIzMjE0IDcuOTI3MzIgNi45NTAwMyA4LjIzMTk4IDYuOTUwMDMgOC43QzYuOTUwMDQgOS4wMDM3NiA3LjE5NjI4IDkuMjUgNy41MDAwNCA5LjI1QzcuODAyNCA5LjI1IDguMDQ3NzggOS4wMDYwMSA4LjA1MDAyIDguNzA0MTdMOC4wNTA1NiA4LjcwMzNDOC4wNTkyNCA4LjY4OTYgOC4wODQ5MyA4LjY1NzM1IDguMTUwNTggOC42MDYyQzguMjUyMDcgOC41MjcxMiA4LjM2NTA4IDguNDYxNjMgOC41MTU2NyA4LjM3NDM2TDguNTE1NzEgOC4zNzQzM0M4LjU5NDIyIDguMzI4ODMgOC42ODI5NiA4LjI3NzQxIDguNzg1NTkgOC4yMTUwNkM5LjMyMDA0IDcuODkwMzggMTAuMDUgNy4zNTM4MiAxMC4wNSA2LjI1QzEwLjA1IDQuOTI3ODkgOC45MzUxMSAzLjgyNSA3LjUwMDAzIDMuODI1QzYuMDY0OTYgMy44MjUgNC45NTAwMyA0LjkyNzg5IDQuOTUwMDMgNi4yNUM0Ljk1MDAzIDYuNTUzNzYgNS4xOTYyOCA2LjggNS41MDAwMyA2LjhDNS44MDM3OSA2LjggNi4wNTAwMyA2LjU1Mzc2IDYuMDUwMDMgNi4yNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHJyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05LjQyNTAzIDMuNDQxMzZDMTAuMDU2MSAzLjIzNjU0IDEwLjc4MzcgMy4yNDAyIDExLjM3OTIgMy41NDYyM0MxMi43NTMyIDQuMjUyMjQgMTMuMzQ3NyA2LjA3MTkxIDEyLjc5NDYgOEMxMi41NDY1IDguODY0OSAxMi4xMTAyIDkuNzA0NzIgMTEuMTg2MSAxMC41NTI0QzEwLjI2MiAxMS40IDguOTgwMzQgMTEuOSA4LjM4NTcxIDExLjlDOC4xNzI2OSAxMS45IDggMTEuNzMyMSA4IDExLjUyNUM4IDExLjMxNzkgOC4xNzY0NCAxMS4xNSA4LjM4NTcxIDExLjE1QzkuMDY0OTcgMTEuMTUgOS42NzE4OSAxMC43ODA0IDEwLjM5MDYgMTAuMjM2QzEwLjk0MDYgOS44MTkzIDExLjM3MDEgOS4yODYzMyAxMS42MDggOC44MjE5MUMxMi4wNjI4IDcuOTMzNjcgMTIuMDc4MiA2LjY4MTc0IDExLjM0MzMgNi4zNDkwMUMxMC45OTA0IDYuNzM0NTUgMTAuNTI5NSA2Ljk1OTQ2IDkuOTc3MjUgNi45NTk0NkM4Ljc3NzMgNi45NTk0NiA4LjA3MDEgNS45OTQxMiA4LjEwMDUxIDUuMTIwMDlDOC4xMjk1NyA0LjI4NDc0IDguNjYwMzIgMy42ODk1NCA5LjQyNTAzIDMuNDQxMzZaTTMuNDI1MDMgMy40NDEzNkM0LjA1NjE0IDMuMjM2NTQgNC43ODM2NiAzLjI0MDIgNS4zNzkyMyAzLjU0NjIzQzYuNzUzMiA0LjI1MjI0IDcuMzQ3NjYgNi4wNzE5MSA2Ljc5NDYyIDhDNi41NDY1NCA4Ljg2NDkgNi4xMTAxOSA5LjcwNDcyIDUuMTg2MSAxMC41NTI0QzQuMjYyMDEgMTEuNCAyLjk4MDM0IDExLjkgMi4zODU3MSAxMS45QzIuMTcyNjkgMTEuOSAyIDExLjczMjEgMiAxMS41MjVDMiAxMS4zMTc5IDIuMTc2NDQgMTEuMTUgMi4zODU3MSAxMS4xNUMzLjA2NDk3IDExLjE1IDMuNjcxODkgMTAuNzgwNCA0LjM5MDU4IDEwLjIzNkM0Ljk0MDY1IDkuODE5MyA1LjM3MDE0IDkuMjg2MzMgNS42MDc5NyA4LjgyMTkxQzYuMDYyODIgNy45MzM2NyA2LjA3ODIxIDYuNjgxNzQgNS4zNDMzIDYuMzQ5MDFDNC45OTAzNyA2LjczNDU1IDQuNTI5NDggNi45NTk0NiAzLjk3NzI1IDYuOTU5NDZDMi43NzczIDYuOTU5NDYgMi4wNzAxIDUuOTk0MTIgMi4xMDA1MSA1LjEyMDA5QzIuMTI5NTcgNC4yODQ3NCAyLjY2MDMyIDMuNjg5NTQgMy40MjUwMyAzLjQ0MTM2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5ODUgMC44NzcwNDVDMy44NDIxNiAwLjg3NzA0NSAwLjg3NzAxNCAzLjg0MjE5IDAuODc3MDE0IDcuNDk5ODhDMC44NzcwMTQgMTEuMTU3NSAzLjg0MjE2IDE0LjEyMjcgNy40OTk4NSAxNC4xMjI3QzExLjE1NzUgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMy44NDIxOSAxMS4xNTc1IDAuODc3MDQ1IDcuNDk5ODUgMC44NzcwNDVaTTEuODI3MDEgNy40OTk4OEMxLjgyNzAxIDQuMzY2ODYgNC4zNjY4MyAxLjgyNzA0IDcuNDk5ODUgMS44MjcwNEMxMC42MzI4IDEuODI3MDQgMTMuMTcyNyA0LjM2Njg2IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDEwLjYzMjkgMTAuNjMyOCAxMy4xNzI3IDcuNDk5ODUgMTMuMTcyN0M0LjM2NjgzIDEzLjE3MjcgMS44MjcwMSAxMC42MzI5IDEuODI3MDEgNy40OTk4OFpNNy40OTk5OSA5LjQ5OTk5QzguNjA0NTYgOS40OTk5OSA5LjQ5OTk5IDguNjA0NTYgOS40OTk5OSA3LjQ5OTk5QzkuNDk5OTkgNi4zOTU0MiA4LjYwNDU2IDUuNDk5OTkgNy40OTk5OSA1LjQ5OTk5QzYuMzk1NDIgNS40OTk5OSA1LjQ5OTk5IDYuMzk1NDIgNS40OTk5OSA3LjQ5OTk5QzUuNDk5OTkgOC42MDQ1NiA2LjM5NTQyIDkuNDk5OTkgNy40OTk5OSA5LjQ5OTk5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMiAxSDQuMTc3NDFINC4xNzc0QzMuODY5MzYgMC45OTk5ODggMy42MDM2OCAwLjk5OTk3OCAzLjM4NjA5IDEuMDIwNjdDMy4xNTU3NiAxLjA0MjU3IDIuOTI4MjUgMS4wOTExMyAyLjcxNjI1IDEuMjIxMDRDMi41MTQ0MiAxLjM0NDcyIDIuMzQ0NzMgMS41MTQ0MiAyLjIyMTA0IDEuNzE2MjVDMi4wOTExMyAxLjkyODI1IDIuMDQyNTcgMi4xNTU3NiAyLjAyMDY3IDIuMzg2MDlDMS45OTk5OCAyLjYwMzY3IDEuOTk5OTkgMi44NjkzNSAyIDMuMTc3MzhWMy4xNzc0VjMuMlYxMS44VjExLjgyMjZWMTEuODIyNkMxLjk5OTk5IDEyLjEzMDcgMS45OTk5OCAxMi4zOTYzIDIuMDIwNjcgMTIuNjEzOUMyLjA0MjU3IDEyLjg0NDIgMi4wOTExMyAxMy4wNzE3IDIuMjIxMDQgMTMuMjgzN0MyLjM0NDczIDEzLjQ4NTYgMi41MTQ0MiAxMy42NTUzIDIuNzE2MjUgMTMuNzc5QzIuOTI4MjUgMTMuOTA4OSAzLjE1NTc2IDEzLjk1NzQgMy4zODYwOSAxMy45NzkzQzMuNjAzNjggMTQgMy44NjkzNyAxNCA0LjE3NzQxIDE0SDQuMkgxMC44SDEwLjgyMjZDMTEuMTMwNiAxNCAxMS4zOTYzIDE0IDExLjYxMzkgMTMuOTc5M0MxMS44NDQyIDEzLjk1NzQgMTIuMDcxNyAxMy45MDg5IDEyLjI4MzcgMTMuNzc5QzEyLjQ4NTYgMTMuNjU1MyAxMi42NTUzIDEzLjQ4NTYgMTIuNzc5IDEzLjI4MzdDMTIuOTA4OSAxMy4wNzE3IDEyLjk1NzQgMTIuODQ0MiAxMi45NzkzIDEyLjYxMzlDMTMgMTIuMzk2MyAxMyAxMi4xMzA2IDEzIDExLjgyMjZWMTEuOFYzLjJWMy4xNzc0MUMxMyAyLjg2OTM2IDEzIDIuNjAzNjggMTIuOTc5MyAyLjM4NjA5QzEyLjk1NzQgMi4xNTU3NiAxMi45MDg5IDEuOTI4MjUgMTIuNzc5IDEuNzE2MjVDMTIuNjU1MyAxLjUxNDQyIDEyLjQ4NTYgMS4zNDQ3MiAxMi4yODM3IDEuMjIxMDRDMTIuMDcxNyAxLjA5MTEzIDExLjg0NDIgMS4wNDI1NyAxMS42MTM5IDEuMDIwNjdDMTEuMzk2MyAwLjk5OTk3OCAxMS4xMzA2IDAuOTk5OTg4IDEwLjgyMjYgMUgxMC44SDQuMlpNMy4yMzg3NSAyLjA3MzY4QzMuMjY3MjIgMi4wNTYyMyAzLjMyMzYyIDIuMDMxMTIgMy40ODA3NSAyLjAxNjE4QzMuNjQ1MzIgMi4wMDA1MyAzLjg2Mjk4IDIgNC4yIDJIMTAuOEMxMS4xMzcgMiAxMS4zNTQ3IDIuMDAwNTMgMTEuNTE5MyAyLjAxNjE4QzExLjY3NjQgMi4wMzExMiAxMS43MzI4IDIuMDU2MjMgMTEuNzYxMyAyLjA3MzY4QzExLjgyODUgMi4xMTQ5MSAxMS44ODUxIDIuMTcxNDcgMTEuOTI2MyAyLjIzODc1QzExLjk0MzggMi4yNjcyMiAxMS45Njg5IDIuMzIzNjIgMTEuOTgzOCAyLjQ4MDc1QzExLjk5OTUgMi42NDUzMiAxMiAyLjg2Mjk4IDEyIDMuMlYxMS44QzEyIDEyLjEzNyAxMS45OTk1IDEyLjM1NDcgMTEuOTgzOCAxMi41MTkzQzExLjk2ODkgMTIuNjc2NCAxMS45NDM4IDEyLjczMjggMTEuOTI2MyAxMi43NjEzQzExLjg4NTEgMTIuODI4NSAxMS44Mjg1IDEyLjg4NTEgMTEuNzYxMyAxMi45MjYzQzExLjczMjggMTIuOTQzOCAxMS42NzY0IDEyLjk2ODkgMTEuNTE5MyAxMi45ODM4QzExLjM1NDcgMTIuOTk5NSAxMS4xMzcgMTMgMTAuOCAxM0g0LjJDMy44NjI5OCAxMyAzLjY0NTMyIDEyLjk5OTUgMy40ODA3NSAxMi45ODM4QzMuMzIzNjIgMTIuOTY4OSAzLjI2NzIyIDEyLjk0MzggMy4yMzg3NSAxMi45MjYzQzMuMTcxNDcgMTIuODg1MSAzLjExNDkxIDEyLjgyODUgMy4wNzM2OCAxMi43NjEzQzMuMDU2MjQgMTIuNzMyOCAzLjAzMTEyIDEyLjY3NjQgMy4wMTYxOCAxMi41MTkzQzMuMDAwNTMgMTIuMzU0NyAzIDEyLjEzNyAzIDExLjhWMy4yQzMgMi44NjI5OCAzLjAwMDUzIDIuNjQ1MzIgMy4wMTYxOCAyLjQ4MDc1QzMuMDMxMTIgMi4zMjM2MiAzLjA1NjI0IDIuMjY3MjIgMy4wNzM2OCAyLjIzODc1QzMuMTE0OTEgMi4xNzE0NyAzLjE3MTQ3IDIuMTE0OTEgMy4yMzg3NSAyLjA3MzY4Wk01IDEwQzQuNzIzODYgMTAgNC41IDEwLjIyMzkgNC41IDEwLjVDNC41IDEwLjc3NjEgNC43MjM4NiAxMSA1IDExSDhDOC4yNzYxNCAxMSA4LjUgMTAuNzc2MSA4LjUgMTAuNUM4LjUgMTAuMjIzOSA4LjI3NjE0IDEwIDggMTBINVpNNC41IDcuNUM0LjUgNy4yMjM4NiA0LjcyMzg2IDcgNSA3SDEwQzEwLjI3NjEgNyAxMC41IDcuMjIzODYgMTAuNSA3LjVDMTAuNSA3Ljc3NjE0IDEwLjI3NjEgOCAxMCA4SDVDNC43MjM4NiA4IDQuNSA3Ljc3NjE0IDQuNSA3LjVaTTUgNEM0LjcyMzg2IDQgNC41IDQuMjIzODYgNC41IDQuNUM0LjUgNC43NzYxNCA0LjcyMzg2IDUgNSA1SDEwQzEwLjI3NjEgNSAxMC41IDQuNzc2MTQgMTAuNSA0LjVDMTAuNSA0LjIyMzg2IDEwLjI3NjEgNCAxMCA0SDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS44NDk5OCA3LjQ5OTk4QzEuODQ5OTggNC42NjQ1OCA0LjA1OTc5IDEuODQ5OTggNy40OTk5OCAxLjg0OTk4QzEwLjI3ODMgMS44NDk5OCAxMS42NTE1IDMuOTA2NCAxMi4yMzY3IDVIMTAuNUMxMC4yMjM5IDUgMTAgNS4yMjM4NiAxMCA1LjVDMTAgNS43NzYxNCAxMC4yMjM5IDYgMTAuNSA2SDEzLjVDMTMuNzc2MSA2IDE0IDUuNzc2MTQgMTQgNS41VjIuNUMxNCAyLjIyMzg2IDEzLjc3NjEgMiAxMy41IDJDMTMuMjIzOSAyIDEzIDIuMjIzODYgMTMgMi41VjQuMzEzMThDMTIuMjk1NSAzLjA3MTI2IDEwLjY2NTkgMC44NDk5NzYgNy40OTk5OCAwLjg0OTk3NkMzLjQzNzE2IDAuODQ5OTc2IDAuODQ5OTc2IDQuMTg1MzcgMC44NDk5NzYgNy40OTk5OEMwLjg0OTk3NiAxMC44MTQ2IDMuNDM3MTYgMTQuMTUgNy40OTk5OCAxNC4xNUM5LjQ0MzgyIDE0LjE1IDExLjA2MjIgMTMuMzgwOCAxMi4yMTQ1IDEyLjIwODRDMTIuODMxNSAxMS41ODA2IDEzLjMxMzMgMTAuODM5IDEzLjY0MTggMTAuMDQwN0MxMy43NDY5IDkuNzg1MzYgMTMuNjI1MSA5LjQ5MzE1IDEzLjM2OTggOS4zODgwNkMxMy4xMTQ0IDkuMjgyOTYgMTIuODIyMiA5LjQwNDc4IDEyLjcxNzEgOS42NjAxNEMxMi40MzYzIDEwLjM0MjUgMTIuMDI1MSAxMC45NzQ1IDExLjUwMTMgMTEuNTA3NEMxMC41Mjk1IDEyLjQ5NjMgOS4xNjUwNCAxMy4xNSA3LjQ5OTk4IDEzLjE1QzQuMDU5NzkgMTMuMTUgMS44NDk5OCAxMC4zMzU0IDEuODQ5OTggNy40OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGxyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00Ljg1MzU1IDIuMTQ2NDVDNS4wNDg4MiAyLjM0MTcxIDUuMDQ4ODIgMi42NTgyOSA0Ljg1MzU1IDIuODUzNTVMMy43MDcxMSA0SDlDMTEuNDg1MyA0IDEzLjUgNi4wMTQ3MiAxMy41IDguNUMxMy41IDEwLjk4NTMgMTEuNDg1MyAxMyA5IDEzSDVDNC43MjM4NiAxMyA0LjUgMTIuNzc2MSA0LjUgMTIuNUM0LjUgMTIuMjIzOSA0LjcyMzg2IDEyIDUgMTJIOUMxMC45MzMgMTIgMTIuNSAxMC40MzMgMTIuNSA4LjVDMTIuNSA2LjU2NyAxMC45MzMgNSA5IDVIMy43MDcxMUw0Ljg1MzU1IDYuMTQ2NDVDNS4wNDg4MiA2LjM0MTcxIDUuMDQ4ODIgNi42NTgyOSA0Ljg1MzU1IDYuODUzNTVDNC42NTgyOSA3LjA0ODgyIDQuMzQxNzEgNy4wNDg4MiA0LjE0NjQ1IDYuODUzNTVMMi4xNDY0NSA0Ljg1MzU1QzEuOTUxMTggNC42NTgyOSAxLjk1MTE4IDQuMzQxNzEgMi4xNDY0NSA0LjE0NjQ1TDQuMTQ2NDUgMi4xNDY0NUM0LjM0MTcxIDEuOTUxMTggNC42NTgyOSAxLjk1MTE4IDQuODUzNTUgMi4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHNyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjA0OTk1IDIuNzQ5OTVDMy4wNDk5NSAyLjQ0NjE5IDIuODAzNzEgMi4xOTk5NSAyLjQ5OTk1IDIuMTk5OTVDMi4xOTYxOSAyLjE5OTk1IDEuOTQ5OTUgMi40NDYxOSAxLjk0OTk1IDIuNzQ5OTVWMTIuMjVDMS45NDk5NSAxMi41NTM3IDIuMTk2MTkgMTIuOCAyLjQ5OTk1IDEyLjhDMi44MDM3MSAxMi44IDMuMDQ5OTUgMTIuNTUzNyAzLjA0OTk1IDEyLjI1VjIuNzQ5OTVaTTUuNzMzMzMgMi4zMDc3NkM1LjU3ODM1IDIuMjI1OTYgNS4zOTE4NSAyLjIzMTI3IDUuMjQxNzcgMi4zMjE3NkM1LjA5MTcgMi40MTIyNSA0Ljk5OTk1IDIuNTc0NzEgNC45OTk5NSAyLjc0OTk1VjEyLjI1QzQuOTk5OTUgMTIuNDI1MiA1LjA5MTcgMTIuNTg3NyA1LjI0MTc3IDEyLjY3ODFDNS4zOTE4NSAxMi43Njg2IDUuNTc4MzUgMTIuNzczOSA1LjczMzMzIDEyLjY5MjFMMTQuNzMzMyA3Ljk0MjE0QzE0Ljg5NzMgNy44NTU1OSAxNSA3LjY4NTM5IDE1IDcuNDk5OTVDMTUgNy4zMTQ1MiAxNC44OTczIDcuMTQ0MzEgMTQuNzMzMyA3LjA1Nzc2TDUuNzMzMzMgMi4zMDc3NlpNNS45OTk5NSAxMS40MjA3VjMuNTc5MkwxMy40Mjg3IDcuNDk5OTVMNS45OTk5NSAxMS40MjA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sY3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuODUzNTcgMy44NTM1NUw3LjY1MzU1IDMuMDUzNTNDOC4yOTgxIDIuNDA5MDEgOS40Mjg1OCAxLjk2MTcyIDEwLjU1MiAxLjgwMTI1QzExLjEwNTYgMS43MjIxNyAxMS42MjkxIDEuNzE3MjUgMTIuMDU2NCAxLjc4MTI0QzEyLjQ5ODcgMS44NDc0OCAxMi43Njk4IDEuOTc2OTYgMTIuODk2NSAyLjEwMzU3QzEzLjAyMzEgMi4yMzAxOCAxMy4xNTI2IDIuNTAxMjUgMTMuMjE4OCAyLjk0MzU3QzEzLjI4MjggMy4zNzA4NiAxMy4yNzc5IDMuODk0MzkgMTMuMTk4OCA0LjQ0ODAxQzEzLjAzODMgNS41NzEzOSAxMi41OTEgNi43MDE4OCAxMS45NDY0IDcuMzQ2NDVMNy40OTk5OSAxMS43OTI5TDYuMzUzNTQgMTAuNjQ2NUM2LjE1ODI3IDEwLjQ1MTIgNS44NDE2OSAxMC40NTEyIDUuNjQ2NDMgMTAuNjQ2NUM1LjQ1MTE3IDEwLjg0MTcgNS40NTExNyAxMS4xNTgzIDUuNjQ2NDMgMTEuMzUzNkw3LjE0NjQ0IDEyLjg1MzZDNy4zNDE3MSAxMy4wNDg4IDcuNjU4MjkgMTMuMDQ4OCA3Ljg1MzU1IDEyLjg1MzZMOC40MDA3MyAxMi4zMDY0TDkuNTcxMjQgMTQuMjU3MkM5LjY1MDQ2IDE0LjM4OTMgOS43ODYwOCAxNC40Nzc0IDkuOTM4OSAxNC40OTYzQzEwLjA5MTcgMTQuNTE1MSAxMC4yNDQ3IDE0LjQ2MjQgMTAuMzUzNSAxNC4zNTM2TDEyLjM1MzUgMTIuMzUzNkMxMi40NjQ4IDEyLjI0MjMgMTIuNTE3MiAxMi4wODUxIDEyLjQ5NSAxMS45MjkzTDEyLjAzMDMgOC42NzY3OUwxMi42NTM2IDguMDUzNTVDMTMuNTA5IDcuMTk4MDggMTQuMDExNyA1LjgyODU1IDE0LjE4ODcgNC41ODk0M0MxNC4yNzg0IDMuOTYxOCAxNC4yODkxIDMuMzM4NDcgMTQuMjA3OCAyLjc5NTQ2QzE0LjEyODcgMi4yNjc0OCAxMy45NTE5IDEuNzQ0ODIgMTMuNjAzNSAxLjM5NjQ1QzEzLjI1NTIgMS4wNDgwOSAxMi43MzI1IDAuODcxMzMyIDEyLjIwNDUgMC43OTIyNjRDMTEuNjYxNSAwLjcxMDk0NSAxMS4wMzgyIDAuNzIxNjQ0IDEwLjQxMDUgMC44MTEzQzkuMTcxNDMgMC45ODgzMDYgNy44MDE4OSAxLjQ5MSA2Ljk0NjQ0IDIuMzQ2NDJMNi4zMjMyMiAyLjk2OTY4TDMuMDcwNzEgMi41MDUwNEMyLjkxNDkyIDIuNDgyNzggMi43NTc3MyAyLjUzNTE3IDIuNjQ2NDUgMi42NDY0NkwwLjY0NjQ1MSA0LjY0NjQ1QzAuNTM3NTc5IDQuNzU1MzMgMC40ODQ5MzggNC45MDgyOSAwLjUwMzc1IDUuMDYxMUMwLjUyMjU2MyA1LjIxMzkxIDAuNjEwNzMgNS4zNDk1NCAwLjc0Mjc1NyA1LjQyODc2TDIuNjkzNjQgNi41OTkyOEwyLjE0NjQ2IDcuMTQ2NDVDMi4wNTI3IDcuMjQwMjIgMi4wMDAwMiA3LjM2NzQgMi4wMDAwMiA3LjUwMDAxQzIuMDAwMDIgNy42MzI2MSAyLjA1MjcgNy43NTk3OSAyLjE0NjQ2IDcuODUzNTZMMy42NDY0NyA5LjM1MzU2QzMuODQxNzMgOS41NDg4MyA0LjE1ODMxIDkuNTQ4ODMgNC4zNTM1NyA5LjM1MzU2QzQuNTQ4ODQgOS4xNTgzIDQuNTQ4ODQgOC44NDE3MiA0LjM1MzU3IDguNjQ2NDZMMy4yMDcxMiA3LjUwMDAxTDMuODUzNTcgNi44NTM1Nkw2Ljg1MzU3IDMuODUzNTVaTTEwLjA5OTMgMTMuMTkzNkw5LjEyOTU5IDExLjU3NzVMMTEuMTQ2NCA5LjU2MDY3TDExLjQ2OTcgMTEuODIzMkwxMC4wOTkzIDEzLjE5MzZaTTMuNDIyNTEgNS44NzA0MUw1LjQzOTM1IDMuODUzNTZMMy4xNzY3OCAzLjUzMDM0TDEuODA2MzggNC45MDA3NEwzLjQyMjUxIDUuODcwNDFaTTIuMzUzNTYgMTAuMzUzNUMyLjU0ODgyIDEwLjE1ODMgMi41NDg4MiA5Ljg0MTcgMi4zNTM1NiA5LjY0NjQ0QzIuMTU4MyA5LjQ1MTE4IDEuODQxNzEgOS40NTExOCAxLjY0NjQ1IDkuNjQ2NDRMMC42NDY0NTEgMTAuNjQ2NEMwLjQ1MTE4OCAxMC44NDE3IDAuNDUxMTg4IDExLjE1ODMgMC42NDY0NTEgMTEuMzUzNUMwLjg0MTcxMyAxMS41NDg4IDEuMTU4MyAxMS41NDg4IDEuMzUzNTYgMTEuMzUzNUwyLjM1MzU2IDEwLjM1MzVaTTMuODUzNTggMTEuODUzNkM0LjA0ODg0IDExLjY1ODMgNC4wNDg4NSAxMS4zNDE3IDMuODUzNTkgMTEuMTQ2NUMzLjY1ODMzIDEwLjk1MTIgMy4zNDE3NSAxMC45NTEyIDMuMTQ2NDggMTEuMTQ2NUwxLjE0NjQ1IDEzLjE0NjRDMC45NTExOSAxMy4zNDE3IDAuOTUxMTg3IDEzLjY1ODMgMS4xNDY0NSAxMy44NTM1QzEuMzQxNzEgMTQuMDQ4OCAxLjY1ODI5IDE0LjA0ODggMS44NTM1NSAxMy44NTM2TDMuODUzNTggMTEuODUzNlpNNS4zNTM1NiAxMy4zNTM1QzUuNTQ4ODIgMTMuMTU4MyA1LjU0ODgyIDEyLjg0MTcgNS4zNTM1NiAxMi42NDY0QzUuMTU4MyAxMi40NTEyIDQuODQxNzEgMTIuNDUxMiA0LjY0NjQ1IDEyLjY0NjRMMy42NDY0NSAxMy42NDY0QzMuNDUxMTkgMTMuODQxNyAzLjQ1MTE5IDE0LjE1ODMgMy42NDY0NSAxNC4zNTM1QzMuODQxNzEgMTQuNTQ4OCA0LjE1ODMgMTQuNTQ4OCA0LjM1MzU2IDE0LjM1MzVMNS4zNTM1NiAxMy4zNTM1Wk05LjQ5OTk3IDYuNzQ4ODFDMTAuMTg5NyA2Ljc0ODgxIDEwLjc0ODggNi4xODk3IDEwLjc0ODggNS41QzEwLjc0ODggNC44MTAzIDEwLjE4OTcgNC4yNTExOCA5LjQ5OTk3IDQuMjUxMThDOC44MTAyNiA0LjI1MTE4IDguMjUxMTUgNC44MTAzIDguMjUxMTUgNS41QzguMjUxMTUgNi4xODk3IDguODEwMjYgNi43NDg4MSA5LjQ5OTk3IDYuNzQ4ODFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41OTY2NCAyLjkzNjI4QzcuNzYwODUgMy4wNjQwMSA4LjAwMDEyIDIuOTQ2OTggOC4wMDAxMiAyLjczODk1VjEuOTk5OThDOS45ODE0MyAyIDExLjE4NDggMi4zNjM3IDExLjkxMDUgMy4wODk0NUMxMi42MzYzIDMuODE1MjIgMTMgNS4wMTg2IDEzIDYuOTk5OThDMTMgNy4yNzYxMyAxMy4yMjM5IDcuNDk5OTggMTMuNSA3LjQ5OTk4QzEzLjc3NjEgNy40OTk5OCAxNCA3LjI3NjEzIDE0IDYuOTk5OThDMTQgNC45NDM4IDEzLjYzMjUgMy4zOTcxOSAxMi42MTc2IDIuMzgyMzRDMTEuNjAyOCAxLjM2NzUyIDEwLjA1NjIgMC45OTk5OTkgOC4wMDAxMiAwLjk5OTk4NFYwLjI2MTI2NkM4LjAwMDEyIDAuMDUzMjI5MyA3Ljc2MDg1IC0wLjA2Mzc5NDQgNy41OTY2NCAwLjA2MzkyOEw2LjAwMzg0IDEuMzAyNzdDNS44NzUxNiAxLjQwMjg2IDUuODc1MTYgMS41OTczNSA2LjAwMzg0IDEuNjk3NDRMNy41OTY2NCAyLjkzNjI4Wk05LjUgNUgyLjVDMi4yMjM4NiA1IDIgNS4yMjM4NiAyIDUuNVYxMi41QzIgMTIuNzc2MSAyLjIyMzg2IDEzIDIuNSAxM0g5LjVDOS43NzYxNCAxMyAxMCAxMi43NzYxIDEwIDEyLjVWNS41QzEwIDUuMjIzODYgOS43NzYxNCA1IDkuNSA1Wk0yLjUgNEMxLjY3MTU3IDQgMSA0LjY3MTU3IDEgNS41VjEyLjVDMSAxMy4zMjg0IDEuNjcxNTcgMTQgMi41IDE0SDkuNUMxMC4zMjg0IDE0IDExIDEzLjMyODQgMTEgMTIuNVY1LjVDMTEgNC42NzE1NyAxMC4zMjg0IDQgOS41IDRIMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuODE4MzIgMC42ODE3OUM3LjY0MjU4IDAuNTA2MDU0IDcuMzU3NjYgMC41MDYwNTQgNy4xODE5MiAwLjY4MTc5TDUuMTgxOTIgMi42ODE3OUM1LjAwNjE5IDIuODU3NTMgNS4wMDYxOSAzLjE0MjQ1IDUuMTgxOTIgMy4zMTgxOUM1LjM1NzY2IDMuNDkzOTIgNS42NDI1OCAzLjQ5MzkyIDUuODE4MzIgMy4zMTgxOUw3LjA1MDEyIDIuMDg2MzhMNy4wNTAxMiA1LjUwMDIzQzcuMDUwMTIgNS43NDg3NiA3LjI1MTU5IDUuOTUwMjMgNy41MDAxMiA1Ljk1MDIzQzcuNzQ4NjUgNS45NTAyMyA3Ljk1MDEyIDUuNzQ4NzYgNy45NTAxMiA1LjUwMDIzTDcuOTUwMTIgMi4wODYzOEw5LjE4MTkyIDMuMzE4MTlDOS4zNTc2NiAzLjQ5MzkyIDkuNjQyNTggMy40OTM5MiA5LjgxODMyIDMuMzE4MTlDOS45OTQwNiAzLjE0MjQ1IDkuOTk0MDYgMi44NTc1MyA5LjgxODMyIDIuNjgxNzlMNy44MTgzMiAwLjY4MTc5Wk03Ljk1MDEyIDEyLjkxMzZWOS41MDAyM0M3Ljk1MDEyIDkuMjUxNyA3Ljc0ODY1IDkuMDUwMjMgNy41MDAxMiA5LjA1MDIzQzcuMjUxNTkgOS4wNTAyMyA3LjA1MDEyIDkuMjUxNyA3LjA1MDEyIDkuNTAwMjNWMTIuOTEzNkw1LjgxODMyIDExLjY4MThDNS42NDI1OCAxMS41MDYxIDUuMzU3NjYgMTEuNTA2MSA1LjE4MTkyIDExLjY4MThDNS4wMDYxOSAxMS44NTc1IDUuMDA2MTkgMTIuMTQyNCA1LjE4MTkyIDEyLjMxODJMNy4xODE5MiAxNC4zMTgyQzcuMjY2MzIgMTQuNDAyNiA3LjM4MDc3IDE0LjQ1IDcuNTAwMTIgMTQuNDVDNy42MTk0NyAxNC40NSA3LjczMzkzIDE0LjQwMjYgNy44MTgzMiAxNC4zMTgyTDkuODE4MzIgMTIuMzE4MkM5Ljk5NDA2IDEyLjE0MjQgOS45OTQwNiAxMS44NTc1IDkuODE4MzIgMTEuNjgxOEM5LjY0MjU4IDExLjUwNjEgOS4zNTc2NiAxMS41MDYxIDkuMTgxOTIgMTEuNjgxOEw3Ljk1MDEyIDEyLjkxMzZaTTEuNDk5OTQgNy4wMDAxN0MxLjIyMzggNy4wMDAxNyAwLjk5OTkzOSA3LjIyNDAzIDAuOTk5OTM5IDcuNTAwMTdDMC45OTk5MzkgNy43NzYzMSAxLjIyMzggOC4wMDAxNyAxLjQ5OTk0IDguMDAwMTdMMTMuNDk5OSA4LjAwMDE3QzEzLjc3NjEgOC4wMDAxNyAxMy45OTk5IDcuNzc2MzEgMTMuOTk5OSA3LjUwMDE3QzEzLjk5OTkgNy4yMjQwMyAxMy43NzYxIDcuMDAwMTcgMTMuNDk5OSA3LjAwMDE3TDEuNDk5OTQgNy4wMDAxN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGRyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCAxMi44NUwxIDEyLjg1TDEgMTQuMTVMMTQgMTQuMTVMMTQgMTIuODVaTTE0IDguODUwMDJMMSA4Ljg1MDAyTDEgMTAuMTVMMTQgMTAuMTVMMTQgOC44NTAwMlpNMSA0Ljg1MDAzTDE0IDQuODUwMDNMMTQgNi4xNTAwM0wxIDYuMTUwMDJMMSA0Ljg1MDAzWk0xNCAwLjg1MDAyNUwxIDAuODUwMDI1TDEgMi4xNTAwMkwxNCAyLjE1MDAyTDE0IDAuODUwMDI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuNSA0QzAuMjIzODU4IDQgMCA0LjIyMzg2IDAgNC41VjEwLjVDMCAxMC43NzYxIDAuMjIzODU4IDExIDAuNSAxMUgxNC41QzE0Ljc3NjEgMTEgMTUgMTAuNzc2MSAxNSAxMC41VjQuNUMxNSA0LjIyMzg2IDE0Ljc3NjEgNCAxNC41IDRIMC41Wk0xIDEwVjVIMi4wNzVWNy41QzIuMDc1IDcuNzM0NzIgMi4yNjUyOCA3LjkyNSAyLjUgNy45MjVDMi43MzQ3MiA3LjkyNSAyLjkyNSA3LjczNDcyIDIuOTI1IDcuNVY1SDQuMDc1VjYuNUM0LjA3NSA2LjczNDcyIDQuMjY1MjggNi45MjUgNC41IDYuOTI1QzQuNzM0NzIgNi45MjUgNC45MjUgNi43MzQ3MiA0LjkyNSA2LjVWNUg2LjA3NVY2LjVDNi4wNzUgNi43MzQ3MiA2LjI2NTI4IDYuOTI1IDYuNSA2LjkyNUM2LjczNDcyIDYuOTI1IDYuOTI1IDYuNzM0NzIgNi45MjUgNi41VjVIOC4wNzVWNy41QzguMDc1IDcuNzM0NzIgOC4yNjUyOCA3LjkyNSA4LjUgNy45MjVDOC43MzQ3MiA3LjkyNSA4LjkyNSA3LjczNDcyIDguOTI1IDcuNVY1SDEwLjA3NVY2LjVDMTAuMDc1IDYuNzM0NzIgMTAuMjY1MyA2LjkyNSAxMC41IDYuOTI1QzEwLjczNDcgNi45MjUgMTAuOTI1IDYuNzM0NzIgMTAuOTI1IDYuNVY1SDEyLjA3NVY2LjVDMTIuMDc1IDYuNzM0NzIgMTIuMjY1MyA2LjkyNSAxMi41IDYuOTI1QzEyLjczNDcgNi45MjUgMTIuOTI1IDYuNzM0NzIgMTIuOTI1IDYuNVY1SDE0VjEwSDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxocj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC41IDBDMC4yMjM4NTggMCAwIDAuMjIzODU4IDAgMC41VjE0LjVDMCAxNC43NzYxIDAuMjIzODU4IDE1IDAuNSAxNUg0LjVDNC43NzYxNCAxNSA1IDE0Ljc3NjEgNSAxNC41VjVIMTQuNUMxNC43NzYxIDUgMTUgNC43NzYxNCAxNSA0LjVWMC41QzE1IDAuMjIzODU4IDE0Ljc3NjEgMCAxNC41IDBIMC41Wk0xIDQuMDc1MDVMMSAxSDQuMDc1MDJDNC4wNzUwMiAxIDQuMDc1MDIgMSA0LjA3NTAyIDFMNC4wNzUwNSA0LjA3NTA3TDEgNC4wNzUwNVpNMC45OTk5OTcgNC45MjUwNUwxIDE0SDRWMTIuOTI1SDIuNzUwMDJDMi41MTUzIDEyLjkyNSAyLjMyNTAyIDEyLjczNDggMi4zMjUwMiAxMi41QzIuMzI1MDIgMTIuMjY1MyAyLjUxNTMgMTIuMDc1IDIuNzUwMDIgMTIuMDc1SDRWMTAuOTI1SDIuMjUwMDJDMi4wMTUzIDEwLjkyNSAxLjgyNTAyIDEwLjczNDcgMS44MjUwMiAxMC41QzEuODI1MDIgMTAuMjY1MyAyLjAxNTMgMTAuMDc1IDIuMjUwMDIgMTAuMDc1SDRWOC45MjUwNEwyLjc1MDAyIDguOTI1MDJDMi41MTUzIDguOTI1MDIgMi4zMjUwMiA4LjczNDc0IDIuMzI1MDIgOC41MDAwMkMyLjMyNTAzIDguMjY1MjkgMi41MTUzMSA4LjA3NTAyIDIuNzUwMDMgOC4wNzUwMkw0IDguMDc1MDRWNi45MjUwMkwyLjc0OTk5IDYuOTI1QzIuNTE1MjcgNi45MjUgMi4zMjUgNi43MzQ3MiAyLjMyNSA2LjVDMi4zMjUgNi4yNjUyOCAyLjUxNTI5IDYuMDc1IDIuNzUwMDEgNi4wNzVMNCA2LjA3NTAyVjQuOTI1MDdMMC45OTk5OTcgNC45MjUwNVpNNC45MjUwNSA0SDYuMDc1VjIuNzUwMDZDNi4wNzUgMi41MTUzNCA2LjI2NTI4IDIuMzI1MDYgNi41IDIuMzI1MDZDNi43MzQ3MiAyLjMyNTA2IDYuOTI1IDIuNTE1MzQgNi45MjUgMi43NTAwNlY0SDguMDc1MDJWMi43NTAwNUM4LjA3NTAyIDIuNTE1MzMgOC4yNjUzIDIuMzI1MDUgOC41MDAwMiAyLjMyNTA1QzguNzM0NzQgMi4zMjUwNSA4LjkyNTAyIDIuNTE1MzMgOC45MjUwMiAyLjc1MDA1VjRIMTAuMDc1MVYyLjI1MDA1QzEwLjA3NTEgMi4wMTUzMyAxMC4yNjUzIDEuODI1MDUgMTAuNTAwMSAxLjgyNTA1QzEwLjczNDggMS44MjUwNSAxMC45MjUxIDIuMDE1MzMgMTAuOTI1MSAyLjI1MDA1VjRIMTIuMDc1MVYyLjc1MDA1QzEyLjA3NTEgMi41MTUzMyAxMi4yNjU0IDIuMzI1MDUgMTIuNTAwMSAyLjMyNTA1QzEyLjczNDggMi4zMjUwNSAxMi45MjUxIDIuNTE1MzMgMTIuOTI1MSAyLjc1MDA1VjRIMTRWMUg0LjkyNTAyTDQuOTI1MDUgNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDEuNUMyIDEuNzc2MTQgMS43NzYxNCAyIDEuNSAyQzEuMjIzODYgMiAxIDEuNzc2MTQgMSAxLjVDMSAxLjIyMzg2IDEuMjIzODYgMSAxLjUgMUMxLjc3NjE0IDEgMiAxLjIyMzg2IDIgMS41Wk0yIDVMMiAxMEgxM1Y1SDJaTTIgNEMxLjQ0NzcyIDQgMSA0LjQ0NzcyIDEgNVYxMEMxIDEwLjU1MjMgMS40NDc3MiAxMSAyIDExSDEzQzEzLjU1MjMgMTEgMTQgMTAuNTUyMyAxNCAxMFY1QzE0IDQuNDQ3NzIgMTMuNTUyMyA0IDEzIDRIMlpNMS41IDE0QzEuNzc2MTQgMTQgMiAxMy43NzYxIDIgMTMuNUMyIDEzLjIyMzkgMS43NzYxNCAxMyAxLjUgMTNDMS4yMjM4NiAxMyAxIDEzLjIyMzkgMSAxMy41QzEgMTMuNzc2MSAxLjIyMzg2IDE0IDEuNSAxNFpNNCAxLjVDNCAxLjc3NjE0IDMuNzc2MTQgMiAzLjUgMkMzLjIyMzg2IDIgMyAxLjc3NjE0IDMgMS41QzMgMS4yMjM4NiAzLjIyMzg2IDEgMy41IDFDMy43NzYxNCAxIDQgMS4yMjM4NiA0IDEuNVpNMy41IDE0QzMuNzc2MTQgMTQgNCAxMy43NzYxIDQgMTMuNUM0IDEzLjIyMzkgMy43NzYxNCAxMyAzLjUgMTNDMy4yMjM4NiAxMyAzIDEzLjIyMzkgMyAxMy41QzMgMTMuNzc2MSAzLjIyMzg2IDE0IDMuNSAxNFpNNiAxLjVDNiAxLjc3NjE0IDUuNzc2MTQgMiA1LjUgMkM1LjIyMzg2IDIgNSAxLjc3NjE0IDUgMS41QzUgMS4yMjM4NiA1LjIyMzg2IDEgNS41IDFDNS43NzYxNCAxIDYgMS4yMjM4NiA2IDEuNVpNNS41IDE0QzUuNzc2MTQgMTQgNiAxMy43NzYxIDYgMTMuNUM2IDEzLjIyMzkgNS43NzYxNCAxMyA1LjUgMTNDNS4yMjM4NiAxMyA1IDEzLjIyMzkgNSAxMy41QzUgMTMuNzc2MSA1LjIyMzg2IDE0IDUuNSAxNFpNOCAxLjVDOCAxLjc3NjE0IDcuNzc2MTQgMiA3LjUgMkM3LjIyMzg2IDIgNyAxLjc3NjE0IDcgMS41QzcgMS4yMjM4NiA3LjIyMzg2IDEgNy41IDFDNy43NzYxNCAxIDggMS4yMjM4NiA4IDEuNVpNNy41IDE0QzcuNzc2MTQgMTQgOCAxMy43NzYxIDggMTMuNUM4IDEzLjIyMzkgNy43NzYxNCAxMyA3LjUgMTNDNy4yMjM4NiAxMyA3IDEzLjIyMzkgNyAxMy41QzcgMTMuNzc2MSA3LjIyMzg2IDE0IDcuNSAxNFpNMTAgMS41QzEwIDEuNzc2MTQgOS43NzYxNCAyIDkuNSAyQzkuMjIzODYgMiA5IDEuNzc2MTQgOSAxLjVDOSAxLjIyMzg2IDkuMjIzODYgMSA5LjUgMUM5Ljc3NjE0IDEgMTAgMS4yMjM4NiAxMCAxLjVaTTkuNSAxNEM5Ljc3NjE0IDE0IDEwIDEzLjc3NjEgMTAgMTMuNUMxMCAxMy4yMjM5IDkuNzc2MTQgMTMgOS41IDEzQzkuMjIzODYgMTMgOSAxMy4yMjM5IDkgMTMuNUM5IDEzLjc3NjEgOS4yMjM4NiAxNCA5LjUgMTRaTTEyIDEuNUMxMiAxLjc3NjE0IDExLjc3NjEgMiAxMS41IDJDMTEuMjIzOSAyIDExIDEuNzc2MTQgMTEgMS41QzExIDEuMjIzODYgMTEuMjIzOSAxIDExLjUgMUMxMS43NzYxIDEgMTIgMS4yMjM4NiAxMiAxLjVaTTExLjUgMTRDMTEuNzc2MSAxNCAxMiAxMy43NzYxIDEyIDEzLjVDMTIgMTMuMjIzOSAxMS43NzYxIDEzIDExLjUgMTNDMTEuMjIzOSAxMyAxMSAxMy4yMjM5IDExIDEzLjVDMTEgMTMuNzc2MSAxMS4yMjM5IDE0IDExLjUgMTRaTTE0IDEuNUMxNCAxLjc3NjE0IDEzLjc3NjEgMiAxMy41IDJDMTMuMjIzOSAyIDEzIDEuNzc2MTQgMTMgMS41QzEzIDEuMjIzODYgMTMuMjIzOSAxIDEzLjUgMUMxMy43NzYxIDEgMTQgMS4yMjM4NiAxNCAxLjVaTTEzLjUgMTRDMTMuNzc2MSAxNCAxNCAxMy43NzYxIDE0IDEzLjVDMTQgMTMuMjIzOSAxMy43NzYxIDEzIDEzLjUgMTNDMTMuMjIzOSAxMyAxMyAxMy4yMjM5IDEzIDEzLjVDMTMgMTMuNzc2MSAxMy4yMjM5IDE0IDEzLjUgMTRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx2cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNiAzLjVDNiAyLjY3MTU3IDYuNjcxNTcgMiA3LjUgMkM4LjMyODQzIDIgOSAyLjY3MTU3IDkgMy41QzkgNC4zMjg0MyA4LjMyODQzIDUgNy41IDVDNi42NzE1NyA1IDYgNC4zMjg0MyA2IDMuNVpNOCA1Ljk0OTk5QzkuMTQxMTIgNS43MTgzNiAxMCA0LjcwOTQ4IDEwIDMuNUMxMCAyLjExOTI5IDguODgwNzEgMSA3LjUgMUM2LjExOTI5IDEgNSAyLjExOTI5IDUgMy41QzUgNC43MDk0OCA1Ljg1ODg4IDUuNzE4MzYgNyA1Ljk0OTk5VjEzLjVDNyAxMy43NzYxIDcuMjIzODYgMTQgNy41IDE0QzcuNzc2MTQgMTQgOCAxMy43NzYxIDggMTMuNVY1Ljk0OTk5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwIDMuNUMxMCA0LjcwOTQ4IDkuMTQxMTIgNS43MTgzNiA4IDUuOTQ5OTlWMTMuNUM4IDEzLjc3NjEgNy43NzYxNCAxNCA3LjUgMTRDNy4yMjM4NiAxNCA3IDEzLjc3NjEgNyAxMy41VjUuOTQ5OTlDNS44NTg4OCA1LjcxODM2IDUgNC43MDk0OCA1IDMuNUM1IDIuMTE5MjkgNi4xMTkyOSAxIDcuNSAxQzguODgwNzEgMSAxMCAyLjExOTI5IDEwIDMuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LENyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjg3NzA3NSA3LjQ5OTg4QzAuODc3MDc1IDMuODQyMTkgMy44NDIyMiAwLjg3NzA0NSA3LjQ5OTkxIDAuODc3MDQ1QzExLjE1NzYgMC44NzcwNDUgMTQuMTIyNyAzLjg0MjE5IDE0LjEyMjcgNy40OTk4OEMxNC4xMjI3IDExLjE1NzUgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MzLjg0MjIyIDE0LjEyMjcgMC44NzcwNzUgMTEuMTU3NSAwLjg3NzA3NSA3LjQ5OTg4Wk03LjQ5OTkxIDEuODI3MDRDNC4zNjY4OSAxLjgyNzA0IDEuODI3MDggNC4zNjY4NiAxLjgyNzA4IDcuNDk5ODhDMS44MjcwOCAxMC42MzI5IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDMTAuNjMyOSAxMy4xNzI3IDEzLjE3MjcgMTAuNjMyOSAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyA0LjM2Njg2IDEwLjYzMjkgMS44MjcwNCA3LjQ5OTkxIDEuODI3MDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4wNVwiLGQ6XCJNNi43ODI5NiAxMy4zNzZDOC43MzkwNCA5Ljk1Mjg0IDguNzM5MDQgNS4wNDcxOSA2Ljc4Mjk2IDEuNjI0MDVMNy4yMTcwOCAxLjM3NTk4QzkuMjYxIDQuOTUyODMgOS4yNjEgMTAuMDQ3MiA3LjIxNzA4IDEzLjYyNEw2Ljc4Mjk2IDEzLjM3NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjFcIixkOlwiTTcuMjgyMDQgMTMuNDc3NUM5LjIzOTI5IDkuOTk1MjMgOS4yMzkyOSA1LjAwNDc1IDcuMjgyMDQgMS41MjI0OEw3LjcxNzkxIDEuMjc3NUM5Ljc2MDY3IDQuOTExOSA5Ljc2MDY3IDEwLjA4ODEgNy43MTc5MSAxMy43MjI1TDcuMjgyMDQgMTMuNDc3NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjE1XCIsZDpcIk03LjgyMDk4IDEzLjUwNjRDOS43MjUwMiA5Ljk5NTIzIDkuNzI2MzYgNS4wMTQxMSA3LjgyNDkyIDEuNTAwODRMOC4yNjQ2NSAxLjI2Mjg1QzEwLjI0NjUgNC45MjQ2NiAxMC4yNDUxIDEwLjA4NSA4LjI2MDUyIDEzLjc0NDhMNy44MjA5OCAxMy41MDY0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMlwiLGQ6XCJNOC40MTI4NCAxMy40MjlDMTAuMTk1MiA5LjkyODQyIDEwLjE5NTcgNS4wNzUzNyA4LjQxNDM1IDEuNTc0MDJMOC44NTk5OSAxLjM0NzI5QzEwLjcxMzkgNC45OTExMyAxMC43MTMzIDEwLjAxMjggOC44NTg0MSAxMy42NTU5TDguNDEyODQgMTMuNDI5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMjVcIixkOlwiTTkuMDI0NDEgMTMuMjk1NkMxMC42NTY3IDkuODM3OSAxMC42NTg2IDUuMTc3MTUgOS4wMzAwNSAxLjcxNjU2TDkuNDgyNDUgMS41MDM2NkMxMS4xNzQ1IDUuMDk5MTkgMTEuMTcyNiA5LjkxNjI5IDkuNDc2NTcgMTMuNTA5MUw5LjAyNDQxIDEzLjI5NTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zXCIsZDpcIk05LjY2ODA5IDEzLjA2NTVDMTEuMTA5NyA5LjY5NTcyIDExLjExMDcgNS4zMTIxIDkuNjcwODggMS45NDA5NUwxMC4xMzA3IDEuNzQ0NTdDMTEuNjI0MSA1LjI0MTIxIDExLjYyMzEgOS43NjY4MyAxMC4xMjc4IDEzLjI2MjJMOS42NjgwOSAxMy4wNjU1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMzVcIixkOlwiTTEwLjMzMSAxMi43NDU2QzExLjU1NTEgOS41MjA3MyAxMS41NTY0IDUuNDkxMDMgMTAuMzM0NyAyLjI2NDQ0TDEwLjgwMjQgMi4wODc0QzEyLjA2NzIgNS40MjgxNSAxMi4wNjU5IDkuNTgzOTQgMTAuNzk4NSAxMi45MjMxTDEwLjMzMSAxMi43NDU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNFwiLGQ6XCJNMTEuMDE1NSAxMi4yOTg2QzExLjk5MzggOS4yOTc0NCAxMS45OTQ4IDUuNzEyOTYgMTEuMDE4NCAyLjcxMDY3TDExLjQ5MzkgMi41NTYwM0MxMi41MDMgNS42NTg5IDEyLjUwMiA5LjM1MTc4IDExLjQ5MDkgMTIuNDUzNUwxMS4wMTU1IDEyLjI5ODZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi40NVwiLGQ6XCJNMTEuNzIxNCAxMS42NjhDMTIuNDI1NCA5LjAxMzAzIDEyLjQyNjIgNS45OTY5MSAxMS43MjM3IDMuMzQxMTZMMTIuMjA3MSAzLjIxMzI5QzEyLjkzMTggNS45NTI5MiAxMi45MzEgOS4wNTcyOCAxMi4yMDQ3IDExLjc5NjFMMTEuNzIxNCAxMS42NjhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi41XCIsZDpcIk0xMi40NDMyIDEwLjc1MkMxMi44NTI0IDguNjM3NjIgMTIuODUyMyA2LjM2MDg5IDEyLjQ0MjkgNC4yNDY2TDEyLjkzMzggNC4xNTE1NUMxMy4zNTUzIDYuMzI4NjEgMTMuMzU1NCA4LjY2OTg1IDEyLjkzNDEgMTAuODQ3TDEyLjQ0MzIgMTAuNzUyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNDk5ODhDMC44NzcwNzUgMy44NDIxOSAzLjg0MjIyIDAuODc3MDQ1IDcuNDk5OTEgMC44NzcwNDVDMTEuMTU3NiAwLjg3NzA0NSAxNC4xMjI3IDMuODQyMTkgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMTEuMTU3NSAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzMuODQyMjIgMTQuMTIyNyAwLjg3NzA3NSAxMS4xNTc1IDAuODc3MDc1IDcuNDk5ODhaTTcuNDk5OTEgMS44MjcwNEM0LjM2Njg5IDEuODI3MDQgMS44MjcwOCA0LjM2Njg2IDEuODI3MDggNy40OTk4OEMxLjgyNzA4IDEwLjYzMjkgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0MxMC42MzI5IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDQuMzY2ODYgMTAuNjMyOSAxLjgyNzA0IDcuNDk5OTEgMS44MjcwNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjA1XCIsZDpcIk0xMi4xNjE5IDMuODUxODJDOC4zNTgxNyA0Ljg4OTE4IDQuODg5MzYgOC4zNTggMy44NTE5OSAxMi4xNjE3TDMuMzY5NiAxMi4wMzAxQzQuNDUzNTYgOC4wNTU2NCA4LjA1NTgxIDQuNDUzMzkgMTIuMDMwMyAzLjM2OTQzTDEyLjE2MTkgMy44NTE4MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjFcIixkOlwiTTExLjg4MDcgMy40MjcwN0M4LjAzNDQxIDQuNTA1NDIgNC41MDU2MSA4LjAzNDIyIDMuNDI3MjYgMTEuODgwNUwyLjk0NTgyIDExLjc0NTZDNC4wNzEyOSA3LjczMTIxIDcuNzMxNCA0LjA3MTEgMTEuNzQ1OCAyLjk0NTYzTDExLjg4MDcgMy40MjcwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjE1XCIsZDpcIk0xMS41MjAxIDMuMDI1NTZDNy42OTA5MiA0LjE2MTk5IDQuMTY3NzkgNy42ODMyMyAzLjAyODA1IDExLjUxMkwyLjU0ODgzIDExLjM2OTRDMy43MzY3NiA3LjM3ODY5IDcuMzg2NTkgMy43MzA3NiAxMS4zNzc4IDIuNTQ2MjNMMTEuNTIwMSAzLjAyNTU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMlwiLGQ6XCJNMTEuMDQ2OCAyLjY2MTY5QzcuMzExMTcgMy44NzY2NCAzLjg3OTE4IDcuMzA3OSAyLjY2Mjk4IDExLjA0MzRMMi4xODc1NCAxMC44ODg2QzMuNDUzMjQgNy4wMDEwOSA3LjAwNDQ1IDMuNDUwNjIgMTAuODkyMSAyLjE4NjIxTDExLjA0NjggMi42NjE2OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjI1XCIsZDpcIk0xMC41MjAxIDIuMzIzNjVDNi45MjA5MSAzLjYxNDQ3IDMuNjIzOTEgNi45MDg3NiAyLjMyODQ1IDEwLjUwNzNMMS44NTggMTAuMzM4QzMuMjAzOTggNi41OTkwOSA2LjYxMTU1IDMuMTk0MjQgMTAuMzUxMyAxLjg1MzAxTDEwLjUyMDEgMi4zMjM2NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjNcIixkOlwiTTkuOTAyMjIgMi4wMzEyMkM2LjUwMDAzIDMuMzk0NjUgMy4zOTk2OCA2LjQ5MzY3IDIuMDMzOTkgOS44OTU1MUwxLjU2OTk4IDkuNzA5MjRDMi45ODY1MSA2LjE4MDc2IDYuMTg3MjggMi45ODEzMyA5LjcxNjIyIDEuNTY3MUw5LjkwMjIyIDIuMDMxMjJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zNVwiLGQ6XCJNOS4yMDcyNyAxLjc4ODczQzYuMDYxMzYgMy4yMDM0OSAzLjIxMTAzIDYuMDUyMDMgMS43OTMzMSA5LjE5NzM4TDEuMzM3NDcgOC45OTE5MkMyLjgwNTM2IDUuNzM1MjggNS43NDQ4NSAyLjc5NzYgOS4wMDIyIDEuMzMyNzJMOS4yMDcyNyAxLjc4ODczWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNFwiLGQ6XCJNOC40MDcxMyAxLjYyMDg1QzUuNTkzMjMgMy4wNTExNyAzLjA1Nzk0IDUuNTg1MDkgMS42MjU0NCA4LjM5ODQ3TDEuMTc5ODcgOC4xNzE2QzIuNjYwMzYgNS4yNjM5NyA1LjI3MjMyIDIuNjUzNCA4LjE4MDU3IDEuMTc1MTNMOC40MDcxMyAxLjYyMDg1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNDVcIixkOlwiTTcuNDYyMDcgMS41Njc0N0M1LjA4Njg5IDIuOTQ2OTUgMi45NTM2MiA1LjA3OTEyIDEuNTcyNDkgNy40NTM3OUwxLjE0MDI4IDcuMjAyNDFDMi41NjUwMyA0Ljc1MjczIDQuNzYwNyAyLjU1ODE4IDcuMjEwOTYgMS4xMzUxTDcuNDYyMDcgMS41Njc0N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjVcIixkOlwiTTYuMzA0MDcgMS43MDQ4N0M0LjUxOTY0IDIuOTEwNjMgMi45MDk4MyA0LjUyMDYxIDEuNzA0MyA2LjMwNTEzTDEuMjg5OTggNi4wMjUyNEMyLjUzMTMgNC4xODc3MyA0LjE4NjczIDIuNTMyMTQgNi4wMjQxMyAxLjI5MDU5TDYuMzA0MDcgMS43MDQ4N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc3MDQ1QzMuODQyMjIgMC44NzcwNDUgMC44NzcwNzUgMy44NDIxOSAwLjg3NzA3NSA3LjQ5OTg4QzAuODc3MDc1IDkuMTQ4OCAxLjQ3OTY5IDEwLjY1NyAyLjQ3NjcgMTEuODE2MkwxLjY0NjQ3IDEyLjY0NjRDMS40NTEyMSAxMi44NDE3IDEuNDUxMjEgMTMuMTU4MyAxLjY0NjQ3IDEzLjM1MzVDMS44NDE3MyAxMy41NDg4IDIuMTU4MzIgMTMuNTQ4OCAyLjM1MzU4IDEzLjM1MzVMMy4xODM4MyAxMi41MjMzQzQuMzQzMDIgMTMuNTIwMiA1Ljg1MTEgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMTEuMTU3NiAxNC4xMjI3IDE0LjEyMjcgMTEuMTU3NSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyA1Ljg1MTA3IDEzLjUyMDIgNC4zNDI5OCAxMi41MjMzIDMuMTgzOEwxMy4zNTM2IDIuMzUzNTVDMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMS44NDE3IDEzLjM1MzYgMS42NDY0NEMxMy4xNTgzIDEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEyLjY0NjUgMS42NDY0NEwxMS44MTYyIDIuNDc2NjdDMTAuNjU3IDEuNDc5NjYgOS4xNDg4MyAwLjg3NzA0NSA3LjQ5OTkxIDAuODc3MDQ1Wk0xMS4xNDIzIDMuMTUwNjVDMTAuMTU2OCAyLjMyNDQ5IDguODg2NDQgMS44MjcwNCA3LjQ5OTkxIDEuODI3MDRDNC4zNjY4OSAxLjgyNzA0IDEuODI3MDggNC4zNjY4NiAxLjgyNzA4IDcuNDk5ODhDMS44MjcwOCA4Ljg4NjQxIDIuMzI0NTIgMTAuMTU2OCAzLjE1MDY5IDExLjE0MjJMMTEuMTQyMyAzLjE1MDY1Wk0zLjg1NzgxIDExLjg0OTNDNC44NDMyMiAxMi42NzUzIDYuMTEzNDggMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDMTAuNjMyOSAxMy4xNzI3IDEzLjE3MjcgMTAuNjMyOSAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyA2LjExMzQ1IDEyLjY3NTQgNC44NDMxOSAxMS44NDkzIDMuODU3NzhMMy44NTc4MSAxMS44NDkzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMDVcIixkOlwiTTYuNzgyOTYgMTMuMzc2QzguNzM5MDQgOS45NTI4NCA4LjczOTA0IDUuMDQ3MTkgNi43ODI5NiAxLjYyNDA1TDcuMjE3MDggMS4zNzU5OEM5LjI2MSA0Ljk1MjgzIDkuMjYxIDEwLjA0NzIgNy4yMTcwOCAxMy42MjRMNi43ODI5NiAxMy4zNzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xXCIsZDpcIk03LjI4MjA0IDEzLjQ3NzVDOS4yMzkyOSA5Ljk5NTIzIDkuMjM5MjkgNS4wMDQ3NSA3LjI4MjA0IDEuNTIyNDhMNy43MTc5MSAxLjI3NzVDOS43NjA2NyA0LjkxMTkgOS43NjA2NyAxMC4wODgxIDcuNzE3OTEgMTMuNzIyNUw3LjI4MjA0IDEzLjQ3NzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xNVwiLGQ6XCJNNy44MjA5OCAxMy41MDY0QzkuNzI1MDIgOS45OTUyMyA5LjcyNjM2IDUuMDE0MTEgNy44MjQ5MiAxLjUwMDg0TDguMjY0NjUgMS4yNjI4NUMxMC4yNDY1IDQuOTI0NjYgMTAuMjQ1MSAxMC4wODUgOC4yNjA1MiAxMy43NDQ4TDcuODIwOTggMTMuNTA2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjJcIixkOlwiTTguNDEyODQgMTMuNDI5QzEwLjE5NTIgOS45Mjg0MiAxMC4xOTU3IDUuMDc1MzcgOC40MTQzNSAxLjU3NDAyTDguODU5OTkgMS4zNDcyOUMxMC43MTM5IDQuOTkxMTMgMTAuNzEzMyAxMC4wMTI4IDguODU4NDEgMTMuNjU1OUw4LjQxMjg0IDEzLjQyOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjI1XCIsZDpcIk05LjAyNDQxIDEzLjI5NTZDMTAuNjU2NyA5LjgzNzkgMTAuNjU4NiA1LjE3NzE1IDkuMDMwMDUgMS43MTY1Nkw5LjQ4MjQ1IDEuNTAzNjZDMTEuMTc0NSA1LjA5OTE5IDExLjE3MjYgOS45MTYyOSA5LjQ3NjU3IDEzLjUwOTFMOS4wMjQ0MSAxMy4yOTU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuM1wiLGQ6XCJNOS42NjgwOSAxMy4wNjU1QzExLjEwOTcgOS42OTU3MiAxMS4xMTA3IDUuMzEyMSA5LjY3MDg4IDEuOTQwOTVMMTAuMTMwNyAxLjc0NDU3QzExLjYyNDEgNS4yNDEyMSAxMS42MjMxIDkuNzY2ODMgMTAuMTI3OCAxMy4yNjIyTDkuNjY4MDkgMTMuMDY1NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjM1XCIsZDpcIk0xMC4zMzEgMTIuNzQ1NkMxMS41NTUxIDkuNTIwNzMgMTEuNTU2NCA1LjQ5MTAzIDEwLjMzNDcgMi4yNjQ0NEwxMC44MDI0IDIuMDg3NEMxMi4wNjcyIDUuNDI4MTUgMTIuMDY1OSA5LjU4Mzk0IDEwLjc5ODUgMTIuOTIzMUwxMC4zMzEgMTIuNzQ1NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjRcIixkOlwiTTExLjAxNTUgMTIuMjk4NkMxMS45OTM4IDkuMjk3NDQgMTEuOTk0OCA1LjcxMjk2IDExLjAxODQgMi43MTA2N0wxMS40OTM5IDIuNTU2MDNDMTIuNTAzIDUuNjU4OSAxMi41MDIgOS4zNTE3OCAxMS40OTA5IDEyLjQ1MzVMMTEuMDE1NSAxMi4yOTg2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNDVcIixkOlwiTTExLjcyMTQgMTEuNjY4QzEyLjQyNTQgOS4wMTMwMyAxMi40MjYyIDUuOTk2OTEgMTEuNzIzNyAzLjM0MTE2TDEyLjIwNzEgMy4yMTMyOUMxMi45MzE4IDUuOTUyOTIgMTIuOTMxIDkuMDU3MjggMTIuMjA0NyAxMS43OTYxTDExLjcyMTQgMTEuNjY4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNVwiLGQ6XCJNMTIuNDQzMiAxMC43NTJDMTIuODUyNCA4LjYzNzYyIDEyLjg1MjMgNi4zNjA4OSAxMi40NDI5IDQuMjQ2NkwxMi45MzM4IDQuMTUxNTVDMTMuMzU1MyA2LjMyODYxIDEzLjM1NTQgOC42Njk4NSAxMi45MzQxIDEwLjg0N0wxMi40NDMyIDEwLjc1MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4wNVwiLGQ6XCJNMTIuMTM5OCAzLjg4NjE2QzEzLjg1NTMgNC45NDE1OSAxNSA2LjgzNyAxNSA4Ljk5OTk5QzE1IDEyLjMxMzcgMTIuMzEzNyAxNSA5LjAwMDAxIDE1QzYuODQzNSAxNSA0Ljk1Mjk1IDEzLjg2MjEgMy44OTU2OSAxMi4xNTUyTDQuMzIwNzUgMTEuODkxOUM1LjI5MDY5IDEzLjQ1NzggNy4wMjM3NSAxNC41IDkuMDAwMDEgMTQuNUMxMi4wMzc1IDE0LjUgMTQuNSAxMi4wMzc1IDE0LjUgOC45OTk5OUMxNC41IDcuMDE3OCAxMy40NTE2IDUuMjgwMjYgMTEuODc3OCA0LjMxMjAyTDEyLjEzOTggMy44ODYxNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjJcIixkOlwiTTEyLjg1MSA1LjA3MzJDMTMuODY4NCA2LjA3MTA1IDE0LjUgNy40NjE5OCAxNC41IDguOTk5OTlDMTQuNSAxMi4wMzc1IDEyLjAzNzYgMTQuNSA5LjAwMDAyIDE0LjVDNy40NjIxNCAxNC41IDYuMDcxMzEgMTMuODY4NSA1LjA3MzQ4IDEyLjg1MTJMNS40MzA0MiAxMi41MDExQzYuMzM4MDkgMTMuNDI2NCA3LjYwMTg1IDE0IDkuMDAwMDIgMTRDMTEuNzYxNCAxNCAxNCAxMS43NjE0IDE0IDguOTk5OTlDMTQgNy42MDE3IDEzLjQyNjQgNi4zMzc4NSAxMi41MDA5IDUuNDMwMTdMMTIuODUxIDUuMDczMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjM1XCIsZDpcIk0xMy4zMDIxIDYuNDUwNzFDMTMuNzQ1NSA3LjE5NzM3IDE0IDguMDY5MzQgMTQgOUMxNCAxMS43NjE0IDExLjc2MTQgMTQgOS4wMDAwMSAxNEM4LjA0ODY3IDE0IDcuMTU4NjcgMTMuNzM0MSA2LjQwMTE4IDEzLjI3MjNMNi42NjE0MSAxMi44NDU0QzcuMzQyNzQgMTMuMjYwNyA4LjE0MzA1IDEzLjUgOS4wMDAwMSAxMy41QzExLjQ4NTMgMTMuNSAxMy41IDExLjQ4NTMgMTMuNSA5QzEzLjUgOC4xNjE2NCAxMy4yNzEgNy4zNzc1MyAxMi44NzIyIDYuNzA1OThMMTMuMzAyMSA2LjQ1MDcxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNVwiLGQ6XCJNMTMuMzc0NCA3Ljk0MDIxQzEzLjQ1NjYgOC4yODAzIDEzLjUgOC42MzUyNCAxMy41IDlDMTMuNSAxMS40ODUzIDExLjQ4NTMgMTMuNSA5LjAwMDAyIDEzLjVDOC42MTEwMyAxMy41IDguMjMzMjEgMTMuNDUwNiA3Ljg3MjY3IDEzLjM1NzZMNy45OTc1OCAxMi44NzM0QzguMzE3NjcgMTIuOTU2IDguNjUzNTIgMTMgOS4wMDAwMiAxM0MxMS4yMDkxIDEzIDEzIDExLjIwOTEgMTMgOUMxMyA4LjY3NTA3IDEyLjk2MTMgOC4zNTk1MiAxMi44ODg0IDguMDU3NTZMMTMuMzc0NCA3Ljk0MDIxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNjVcIixkOlwiTTEyLjkxNTUgOS44MjEzMkMxMi41ODk4IDExLjM4MTMgMTEuMzU2MiAxMi42MDcyIDkuNzkyMDMgMTIuOTIxNUw5LjY5MzUzIDEyLjQzMTNDMTEuMDYxMyAxMi4xNTY1IDEyLjE0MTMgMTEuMDgzMyAxMi40MjYxIDkuNzE5MTNMMTIuOTE1NSA5LjgyMTMyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS4yNzcxIDcuNTAyNTJDMS4yNzcxIDQuMDY0NTUgNC4wNjQxMyAxLjI3NzUzIDcuNTAyMDkgMS4yNzc1M0MxMC45NCAxLjI3NzUzIDEzLjcyNzEgNC4wNjQ1NSAxMy43MjcxIDcuNTAyNTJDMTMuNzI3MSAxMC45NDA1IDEwLjk0IDEzLjcyNzUgNy41MDIwOSAxMy43Mjc1QzQuMDY0MTIgMTMuNzI3NSAxLjI3NzEgMTAuOTQwNSAxLjI3NzEgNy41MDI1MlpNNy41MDIwOSAyLjIyNzUyQzQuNTg4OCAyLjIyNzUyIDIuMjI3MSA0LjU4OTIyIDIuMjI3MSA3LjUwMjUyQzIuMjI3MSAxMC40MTU4IDQuNTg4OCAxMi43Nzc1IDcuNTAyMDkgMTIuNzc3NUMxMC40MTU0IDEyLjc3NzUgMTIuNzc3MSAxMC40MTU4IDEyLjc3NzEgNy41MDI1MkMxMi43NzcxIDQuNTg5MjIgMTAuNDE1NCAyLjIyNzUyIDcuNTAyMDkgMi4yMjc1MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHhyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01IDcuNTAwMDNDNSA4LjMyODQ1IDQuMzI4NDMgOS4wMDAwMyAzLjUgOS4wMDAwM0MyLjY3MTU3IDkuMDAwMDMgMiA4LjMyODQ1IDIgNy41MDAwM0MyIDYuNjcxNiAyLjY3MTU3IDYuMDAwMDMgMy41IDYuMDAwMDNDNC4zMjg0MyA2LjAwMDAzIDUgNi42NzE2IDUgNy41MDAwM1pNNS43MTMxMyA4LjY2Mzg4QzUuMjk0NDUgOS40NTgzOCA0LjQ2MDQ4IDEwIDMuNSAxMEMyLjExOTI5IDEwIDEgOC44ODA3NCAxIDcuNTAwMDNDMSA2LjExOTMxIDIuMTE5MjkgNS4wMDAwMyAzLjUgNS4wMDAwM0M0LjQ2MDQ4IDUuMDAwMDMgNS4yOTQ0NSA1LjU0MTY3IDUuNzEzMTMgNi4zMzYxNkw5LjEwNDI0IDQuMjE2NzFDOS4wMzY0MyAzLjk4OTY4IDkgMy43NDkxMSA5IDMuNTAwMDNDOSAyLjExOTMyIDEwLjExOTMgMS4wMDAwMyAxMS41IDEuMDAwMDNDMTIuODgwNyAxLjAwMDAzIDE0IDIuMTE5MzIgMTQgMy41MDAwM0MxNCA0Ljg4MDc0IDEyLjg4MDcgNi4wMDAwMyAxMS41IDYuMDAwMDNDMTAuNjkxNSA2LjAwMDAzIDkuOTcyNjQgNS42MTYyNCA5LjUxNTY2IDUuMDIwOUw1Ljk4NTMgNy4yMjczOEM1Ljk5NTAyIDcuMzE2OTIgNiA3LjQwNzg5IDYgNy41MDAwM0M2IDcuNTkyMTYgNS45OTUwMiA3LjY4MzEyIDUuOTg1MyA3Ljc3MjY3TDkuNTE1NjcgOS45NzkxNUM5Ljk3MjY1IDkuMzgzODIgMTAuNjkxNSA5LjAwMDAzIDExLjUgOS4wMDAwM0MxMi44ODA3IDkuMDAwMDMgMTQgMTAuMTE5MyAxNCAxMS41QzE0IDEyLjg4MDcgMTIuODgwNyAxNCAxMS41IDE0QzEwLjExOTMgMTQgOSAxMi44ODA3IDkgMTEuNUM5IDExLjI1MDkgOS4wMzY0MyAxMS4wMTA0IDkuMTA0MjUgMTAuNzgzM0w1LjcxMzEzIDguNjYzODhaTTExLjUgNS4wMDAwM0MxMi4zMjg0IDUuMDAwMDMgMTMgNC4zMjg0NiAxMyAzLjUwMDAzQzEzIDIuNjcxNiAxMi4zMjg0IDIuMDAwMDMgMTEuNSAyLjAwMDAzQzEwLjY3MTYgMi4wMDAwMyAxMCAyLjY3MTYgMTAgMy41MDAwM0MxMCA0LjMyODQ2IDEwLjY3MTYgNS4wMDAwMyAxMS41IDUuMDAwMDNaTTEzIDExLjVDMTMgMTIuMzI4NSAxMi4zMjg0IDEzIDExLjUgMTNDMTAuNjcxNiAxMyAxMCAxMi4zMjg1IDEwIDExLjVDMTAgMTAuNjcxNiAxMC42NzE2IDEwIDExLjUgMTBDMTIuMzI4NCAxMCAxMyAxMC42NzE2IDEzIDExLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxfcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDUuMDAwMDZDMy4yMjM4NiA1LjAwMDA2IDMgNS4yMjM5MiAzIDUuNTAwMDZMMyAxMS41MDAxQzMgMTEuNzc2MiAzLjIyMzg2IDEyLjAwMDEgMy41IDEyLjAwMDFMMTEuNSAxMi4wMDAxQzExLjc3NjEgMTIuMDAwMSAxMiAxMS43NzYyIDEyIDExLjUwMDFMMTIgNS41MDAwNkMxMiA1LjIyMzkyIDExLjc3NjEgNS4wMDAwNiAxMS41IDUuMDAwMDZMMTAuMjUgNS4wMDAwNkM5Ljk3Mzg2IDUuMDAwMDYgOS43NSA0Ljc3NjIgOS43NSA0LjUwMDA2QzkuNzUgNC4yMjM5MiA5Ljk3Mzg2IDQuMDAwMDYgMTAuMjUgNC4wMDAwNkwxMS41IDQuMDAwMDZDMTIuMzI4NCA0LjAwMDA2IDEzIDQuNjcxNjMgMTMgNS41MDAwNkwxMyAxMS41MDAxQzEzIDEyLjMyODUgMTIuMzI4NCAxMy4wMDAxIDExLjUgMTMuMDAwMUwzLjUgMTMuMDAwMUMyLjY3MTU3IDEzLjAwMDEgMiAxMi4zMjg1IDIgMTEuNTAwMUwyIDUuNTAwMDZDMiA0LjY3MTYzIDIuNjcxNTcgNC4wMDAwNiAzLjUgNC4wMDAwNkw0Ljc1IDQuMDAwMDZDNS4wMjYxNCA0LjAwMDA2IDUuMjUgNC4yMjM5MiA1LjI1IDQuNTAwMDZDNS4yNSA0Ljc3NjIgNS4wMjYxNCA1LjAwMDA2IDQuNzUgNS4wMDAwNkwzLjUgNS4wMDAwNlpNNyAxLjYzNjRMNS41NjgyIDMuMDY4MkM1LjM5MjQ2IDMuMjQzOTMgNS4xMDc1NCAzLjI0MzkzIDQuOTMxOCAzLjA2ODJDNC43NTYwNyAyLjg5MjQ2IDQuNzU2MDcgMi42MDc1NCA0LjkzMTggMi40MzE4TDcuMTgxOCAwLjE4MTgwMkM3LjI2NjE5IDAuMDk3NDEgNy4zODA2NSAwLjA0OTk5OSA3LjUgMC4wNDk5OTlDNy42MTkzNSAwLjA0OTk5OSA3LjczMzgxIDAuMDk3NDEgNy44MTgyIDAuMTgxODAyTDEwLjA2ODIgMi40MzE4QzEwLjI0MzkgMi42MDc1NCAxMC4yNDM5IDIuODkyNDYgMTAuMDY4MiAzLjA2ODJDOS44OTI0NiAzLjI0MzkzIDkuNjA3NTQgMy4yNDM5MyA5LjQzMTggMy4wNjgyTDggMS42MzY0TDggOC41QzggOC43NzYxNCA3Ljc3NjE0IDkgNy41IDlDNy4yMjM4NiA5IDcgOC43NzYxNCA3IDguNUw3IDEuNjM2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE9yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi4zNTM2IDEuMTQ2NDVDMTIuMTU4MyAwLjk1MTE4NCAxMS44NDE3IDAuOTUxMTg0IDExLjY0NjQgMS4xNDY0NUMxMS40NTEyIDEuMzQxNzEgMTEuNDUxMiAxLjY1ODI5IDExLjY0NjQgMS44NTM1NUwxMi43OTI5IDNIMTJDMTAuNzAzNyAzIDkuNzExMTEgMy41ODQyMyA4Ljg3MjQ4IDQuMzg5MzFDOC4yMDA2NSA1LjAzNDI3IDcuNTkzNDkgNS44NTY4NCA2Ljk5NDYxIDYuNjY4MkM2Ljg2Mjg3IDYuODQ2NjggNi43MzE1NCA3LjAyNDYyIDYuNiA3LjJDNS4xMDg3NCA5LjE4ODM1IDMuNDkwMzcgMTEgMC41IDExQzAuMjIzODU4IDExIDAgMTEuMjIzOSAwIDExLjVDMCAxMS43NzYxIDAuMjIzODU4IDEyIDAuNSAxMkM0LjAwOTYzIDEyIDUuODkxMjYgOS44MTE2NSA3LjQgNy44QzcuNTQzNjcgNy42MDg0NSA3LjY4MzIgNy40MTk2MiA3LjgxOTk2IDcuMjM0NTRMNy44MjAwNSA3LjIzNDQzTDcuODIwMDYgNy4yMzQ0MUM4LjQxNjc0IDYuNDI2OTUgOC45NjA2OSA1LjY5MDg1IDkuNTY1MDIgNS4xMTA2OUMxMC4yODg5IDQuNDE1NzcgMTEuMDQ2MyA0IDEyIDRIMTIuNzkyOUwxMS42NDY0IDUuMTQ2NDVDMTEuNDUxMiA1LjM0MTcxIDExLjQ1MTIgNS42NTgyOSAxMS42NDY0IDUuODUzNTVDMTEuODQxNyA2LjA0ODgyIDEyLjE1ODMgNi4wNDg4MiAxMi4zNTM2IDUuODUzNTVMMTQuMzUzNiAzLjg1MzU1QzE0LjU0ODggMy42NTgyOSAxNC41NDg4IDMuMzQxNzEgMTQuMzUzNiAzLjE0NjQ1TDEyLjM1MzYgMS4xNDY0NVpNMC41IDNDMy4zNTI3OCAzIDUuMTI5OTIgNC40NDU4OCA2LjUwNTQ4IDYuMDY3NDZMNi4zNzYyIDYuMjQyNjZDNi4yNDgzIDYuNDE2MSA2LjEyMjkzIDYuNTg2MDkgNiA2Ljc1QzUuOTYzOTcgNi43OTgwNCA1LjkyNzk4IDYuODQ1ODEgNS44OTIgNi44OTMzMUM0LjU3MzQ4IDUuMjkzMDYgMy4wMjYzNyA0IDAuNSA0QzAuMjIzODU4IDQgMCAzLjc3NjE0IDAgMy41QzAgMy4yMjM4NiAwLjIyMzg1OCAzIDAuNSAzWk04Ljg3MjQ4IDEwLjYxMDdDOC4zNzI4NCAxMC4xMzEgNy45MDg5NyA5LjU1MzE0IDcuNDU3NjcgOC45NTQ2OEM3LjY0Njg4IDguNzE2OTMgNy44MjcwNCA4LjQ4MDYxIDggOC4yNUw4LjA4OTg3IDguMTI5ODdDOC41ODQxMiA4Ljc5NDAyIDkuMDUyODggOS4zOTc2NiA5LjU2NTAyIDkuODg5MzFDMTAuMjg4OSAxMC41ODQyIDExLjA0NjMgMTEgMTIgMTFIMTIuNzkyOUwxMS42NDY0IDkuODUzNTVDMTEuNDUxMiA5LjY1ODI5IDExLjQ1MTIgOS4zNDE3MSAxMS42NDY0IDkuMTQ2NDVDMTEuODQxNyA4Ljk1MTE4IDEyLjE1ODMgOC45NTExOCAxMi4zNTM2IDkuMTQ2NDVMMTQuMzUzNiAxMS4xNDY0QzE0LjU0ODggMTEuMzQxNyAxNC41NDg4IDExLjY1ODMgMTQuMzUzNiAxMS44NTM2TDEyLjM1MzYgMTMuODUzNkMxMi4xNTgzIDE0LjA0ODggMTEuODQxNyAxNC4wNDg4IDExLjY0NjQgMTMuODUzNkMxMS40NTEyIDEzLjY1ODMgMTEuNDUxMiAxMy4zNDE3IDExLjY0NjQgMTMuMTQ2NEwxMi43OTI5IDEySDEyQzEwLjcwMzcgMTIgOS43MTExMSAxMS40MTU4IDguODcyNDggMTAuNjEwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LExyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS41IDMuMDQ5OTlDMTEuNzQ4NSAzLjA0OTk5IDExLjk1IDMuMjUxNDYgMTEuOTUgMy40OTk5OVY3LjQ5OTk5QzExLjk1IDcuNzQ4NTIgMTEuNzQ4NSA3Ljk0OTk5IDExLjUgNy45NDk5OUMxMS4yNTE1IDcuOTQ5OTkgMTEuMDUgNy43NDg1MiAxMS4wNSA3LjQ5OTk5VjQuNTg2MzlMNC41ODYzOCAxMS4wNUg3LjQ5OTk5QzcuNzQ4NTIgMTEuMDUgNy45NDk5OSAxMS4yNTE1IDcuOTQ5OTkgMTEuNUM3Ljk0OTk5IDExLjc0ODUgNy43NDg1MiAxMS45NSA3LjQ5OTk5IDExLjk1TDMuNDk5OTkgMTEuOTVDMy4zODA2NCAxMS45NSAzLjI2NjE4IDExLjkwMjYgMy4xODE3OSAxMS44MTgyQzMuMDk3NCAxMS43MzM4IDMuMDQ5OTkgMTEuNjE5MyAzLjA0OTk5IDExLjVMMy4wNDk5OSA3LjQ5OTk5QzMuMDQ5OTkgNy4yNTE0NiAzLjI1MTQ2IDcuMDQ5OTkgMy40OTk5OSA3LjA0OTk5QzMuNzQ4NTIgNy4wNDk5OSAzLjk0OTk5IDcuMjUxNDYgMy45NDk5OSA3LjQ5OTk5TDMuOTQ5OTkgMTAuNDEzNkwxMC40MTM2IDMuOTQ5OTlMNy40OTk5OSAzLjk0OTk5QzcuMjUxNDYgMy45NDk5OSA3LjA0OTk5IDMuNzQ4NTIgNy4wNDk5OSAzLjQ5OTk5QzcuMDQ5OTkgMy4yNTE0NiA3LjI1MTQ2IDMuMDQ5OTkgNy40OTk5OSAzLjA0OTk5TDExLjUgMy4wNDk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEVyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUzNzMxIDAuODI2ODczQzcuNTEyNSAwLjgyNDM5MiA3LjQ4NzUgMC44MjQzOTIgNy40NjI2OSAwLjgyNjg3M0wzLjk2MjY5IDEuMTc2ODdDMy44NTY3MiAxLjE4NzQ3IDMuNzYwMjUgMS4yNDI2MiAzLjY5NzM2IDEuMzI4NTdMMC42OTk3NzEgNS40MjUyOEMwLjY1NDA0NiA1LjQ4NjI3IDAuNjI2NDcgNS41NjE2NSAwLjYyNTA1NyA1LjY0MzRDMC42MjUwMTkgNS42NDU2IDAuNjI1IDUuNjQ3ODEgMC42MjUgNS42NTAwMUMwLjYyNSA1LjY1MDUyIDAuNjI1MDAxIDUuNjUxMDMgMC42MjUwMDMgNS42NTE1M0MwLjYyNTM2MyA1Ljc0MjM3IDAuNjU4MDIxIDUuODI1NTkgMC43MTIwODcgNS44OTAzTDcuMjEwNDIgMTMuNzg4M0M3LjI4MTY1IDEzLjg3NDkgNy4zODc4OSAxMy45MjUgNy41IDEzLjkyNUM3LjYxMjExIDEzLjkyNSA3LjcxODM1IDEzLjg3NDkgNy43ODk1OCAxMy43ODgzTDE0LjI4NzkgNS44OTAzMUMxNC4zNDIgNS44MjU2IDE0LjM3NDYgNS43NDIzNyAxNC4zNzUgNS42NTE1M0MxNC4zNzUgNS42NTEwMyAxNC4zNzUgNS42NTA1MiAxNC4zNzUgNS42NTAwMUMxNC4zNzUgNS42NDg0OSAxNC4zNzUgNS42NDY5NyAxNC4zNzUgNS42NDU0NUMxNC4zNzQ5IDUuNjM5NjMgMTQuMzc0NyA1LjYzMzgyIDE0LjM3NDQgNS42MjgwMUMxNC4zNyA1LjU1MjE5IDE0LjM0MzEgNS40ODI0MiAxNC4zMDAyIDUuNDI1MjdMMTEuMzAyNiAxLjMyODU3QzExLjIzOTcgMS4yNDI2MiAxMS4xNDMzIDEuMTg3NDcgMTEuMDM3MyAxLjE3Njg3TDcuNTM3MzEgMC44MjY4NzNaTTEwLjkyNSA1LjI3NTAxVjUuMjUyMzZMMTAuOTIyMyA1LjI3NTAxSDEwLjkyNVpNMTAuOTM0MiA1LjE3NDk4SDEzLjE4NzdMMTEuMjQ5NSAyLjUyNjFMMTAuOTM0MiA1LjE3NDk4Wk0xMC41NzA3IDEuODgzOTVMOC4wNDQzMiAxLjYzMTMxTDEwLjE3NDcgNS4yMTAzNEwxMC41NzA3IDEuODgzOTVaTTYuOTU1NjggMS42MzEzMUw0LjQyOTMxIDEuODgzOTVMNC44MjUzMSA1LjIxMDM0TDYuOTU1NjggMS42MzEzMVpNMy43NTA0NiAyLjUyNjFMMS44MTIyNiA1LjE3NDk4SDQuMDY1OEwzLjc1MDQ2IDIuNTI2MVpNMS43OTQxNiA2LjAyNTAxTDYuNzU4NjEgMTIuMDU4N0w0LjIyMzcxIDYuMDY2OUM0LjIxNzg3IDYuMDUzMSA0LjIxMzE0IDYuMDM5MSA0LjIwOTQ5IDYuMDI1MDFIMS43OTQxNlpNNS4xNTA1NSA2LjAyNTAxTDcuNDk5OTkgMTIuMTA4NUw5Ljg0OTQzIDYuMDI1MDFIOS43ODY4MUg1LjIxMzE5SDUuMTUwNTVaTTEwLjc5MDUgNi4wMjUwMUMxMC43ODY5IDYuMDM5MSAxMC43ODIxIDYuMDUzMSAxMC43NzYzIDYuMDY2OUw4LjI0MTM5IDEyLjA1ODdMMTMuMjA1OCA2LjAyNTAxSDEwLjc5MDVaTTcuNSAyLjE4MzE3TDkuMzQwMzggNS4yNzUwMUg1LjY1OTYyTDcuNSAyLjE4MzE3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sU3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMTA4NzYgMTRMOS40NjU4MiAxSDEwLjgxNzhMNS40NjA3NCAxNEg0LjEwODc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sanI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwLjMwMDQgNy40OTk5MUMxMC4zMDA0IDguNDk0MyA5LjQ5NDI2IDkuMzAwNDEgOC40OTk4OCA5LjMwMDQxQzcuNTA1NDkgOS4zMDA0MSA2LjY5OTM4IDguNDk0MyA2LjY5OTM4IDcuNDk5OTFDNi42OTkzOCA2LjUwNTUzIDcuNTA1NDkgNS42OTk0MiA4LjQ5OTg4IDUuNjk5NDJDOS40OTQyNiA1LjY5OTQyIDEwLjMwMDQgNi41MDU1MyAxMC4zMDA0IDcuNDk5OTFaTTExLjIwNSA4QzEwLjk2OTkgOS4yODAyOSA5Ljg0ODE2IDEwLjI1MDQgOC40OTk4OCAxMC4yNTA0QzcuMTUxNiAxMC4yNTA0IDYuMDI5OSA5LjI4MDI5IDUuNzk0NzMgOEgwLjVDMC4yMjM4NTggOCAwIDcuNzc2MTQgMCA3LjVDMCA3LjIyMzg2IDAuMjIzODU4IDcgMC41IDdINS43OTQ3QzYuMDI5OCA1LjcxOTYyIDcuMTUxNTQgNC43NDk0MiA4LjQ5OTg4IDQuNzQ5NDJDOS44NDgyMiA0Ljc0OTQyIDEwLjk2OTkgNS43MTk2MiAxMS4yMDUxIDdIMTQuNUMxNC43NzYxIDcgMTUgNy4yMjM4NiAxNSA3LjVDMTUgNy43NzYxNCAxNC43NzYxIDggMTQuNSA4SDExLjIwNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE1yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNC40OTk5IDAuOTk5OTk0QzE0LjIyMzcgMC45OTk5OTQgMTMuOTk5OSAxLjIyMzg1IDEzLjk5OTkgMS40OTk5OUwxMy45OTk5IDUuOTk5OTVMOS45OTk5MiA1Ljk5OTk1QzkuNDQ3NjQgNS45OTk5NSA4Ljk5OTkzIDYuNDQ3NjYgOC45OTk5MyA2Ljk5OTk0TDguOTk5OTMgNy45OTk5NEM4Ljk5OTkzIDguNTUyMjIgOS40NDc2NCA4Ljk5OTkzIDkuOTk5OTIgOC45OTk5M0wxMy45OTk5IDguOTk5OTNMMTMuOTk5OSAxMy40OTk5QzEzLjk5OTkgMTMuNzc2IDE0LjIyMzcgMTMuOTk5OSAxNC40OTk5IDEzLjk5OTlDMTQuNzc2IDEzLjk5OTkgMTQuOTk5OSAxMy43NzYgMTQuOTk5OSAxMy40OTk5TDE0Ljk5OTkgMS40OTk5OUMxNC45OTk5IDEuMjIzODUgMTQuNzc2IDAuOTk5OTk0IDE0LjQ5OTkgMC45OTk5OTRaTTQuOTk5OTYgNS45OTk5NUwwLjk5OTk5MiA1Ljk5OTk1TDAuOTk5OTkyIDEuNDk5OTlDMC45OTk5OTIgMS4yMjM4NSAwLjc3NjEzNiAwLjk5OTk5NCAwLjQ5OTk5NiAwLjk5OTk5NEMwLjIyMzg1NiAwLjk5OTk5NCAtOS43ODUyZS0wOSAxLjIyMzg1IC0yLjE4NTU3ZS0wOCAxLjQ5OTk5TDQuMDcyNzllLTA3IDEzLjQ5OTlDMy45NTIwOGUtMDcgMTMuNzc2IDAuMjIzODU1IDEzLjk5OTkgMC40OTk5OTYgMTMuOTk5OUMwLjc3NjEzNiAxMy45OTk5IDAuOTk5OTkyIDEzLjc3NiAwLjk5OTk5MiAxMy40OTk5TDAuOTk5OTkyIDguOTk5OTNMNC45OTk5NiA4Ljk5OTkzQzUuNTUyMjQgOC45OTk5MyA1Ljk5OTk1IDguNTUyMjIgNS45OTk5NSA3Ljk5OTkzTDUuOTk5OTUgNi45OTk5NEM1Ljk5OTk1IDYuNDQ3NjYgNS41NTIyNCA1Ljk5OTk1IDQuOTk5OTYgNS45OTk5NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGtyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjk5OTg3OCAwLjVDMC45OTk4NzggMC4yMjM4NTggMS4yMjM3NCAwIDEuNDk5ODggMEgxMy40OTk5QzEzLjc3NiAwIDEzLjk5OTkgMC4yMjM4NTggMTMuOTk5OSAwLjVDMTMuOTk5OSAwLjc3NjE0MiAxMy43NzYgMSAxMy40OTk5IDFMOSAxVjVDOSA1LjU1MjI4IDguNTUyMjggNiA4IDZIN0M2LjQ0NzcyIDYgNiA1LjU1MjI4IDYgNVYxSDEuNDk5ODhDMS4yMjM3NCAxIDAuOTk5ODc4IDAuNzc2MTQyIDAuOTk5ODc4IDAuNVpNNyA5QzYuNDQ3NzIgOSA2IDkuNDQ3NzEgNiAxMFYxNEgxLjQ5OTg4QzEuMjIzNzQgMTQgMC45OTk4NzggMTQuMjIzOSAwLjk5OTg3OCAxNC41QzAuOTk5ODc4IDE0Ljc3NjEgMS4yMjM3NCAxNSAxLjQ5OTg4IDE1SDEzLjQ5OTlDMTMuNzc2IDE1IDEzLjk5OTkgMTQuNzc2MSAxMy45OTk5IDE0LjVDMTMuOTk5OSAxNC4yMjM5IDEzLjc3NiAxNCAxMy40OTk5IDE0SDlWMTBDOSA5LjQ0NzcyIDguNTUyMjggOSA4IDlIN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFJyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNC40OTk5IDAuOTk5OTkyQzE0LjIyMzcgMC45OTk5OTIgMTMuOTk5OSAxLjIyMzg1IDEzLjk5OTkgMS40OTk5OUwxMy45OTk5IDEzLjQ5OTlDMTMuOTk5OSAxMy43NzYgMTQuMjIzNyAxMy45OTk5IDE0LjQ5OTkgMTMuOTk5OUMxNC43NzYgMTMuOTk5OSAxNC45OTk5IDEzLjc3NiAxNC45OTk5IDEzLjQ5OTlMMTQuOTk5OSAxLjQ5OTk5QzE0Ljk5OTkgMS4yMjM4NSAxNC43NzYgMC45OTk5OTIgMTQuNDk5OSAwLjk5OTk5MlpNMC40OTk5OTYgMC45OTk5OTJDMC4yMjM4NTYgMC45OTk5OTIgLTkuNzg1MDllLTA5IDEuMjIzODUgLTIuMTg1NTZlLTA4IDEuNDk5OTlMNC4wNzI3OWUtMDcgMTMuNDk5OUMzLjk1MjA4ZS0wNyAxMy43NzYgMC4yMjM4NTUgMTMuOTk5OSAwLjQ5OTk5NiAxMy45OTk5QzAuNzc2MTM2IDEzLjk5OTkgMC45OTk5OTIgMTMuNzc2IDAuOTk5OTkyIDEzLjQ5OTlMMC45OTk5OTIgMS40OTk5OUMwLjk5OTk5MiAxLjIyMzg1IDAuNzc2MTM2IDAuOTk5OTkyIDAuNDk5OTk2IDAuOTk5OTkyWk0xLjk5OTk4IDYuOTk5OTRDMS45OTk5OCA2LjQ0NzY2IDIuNDQ3NjkgNS45OTk5NSAyLjk5OTk4IDUuOTk5OTVMNS45OTk5NSA1Ljk5OTk1QzYuNTUyMjMgNS45OTk5NSA2Ljk5OTk0IDYuNDQ3NjYgNi45OTk5NCA2Ljk5OTk0TDYuOTk5OTQgNy45OTk5M0M2Ljk5OTk0IDguNTUyMjEgNi41NTIyMyA4Ljk5OTkyIDUuOTk5OTUgOC45OTk5MkwyLjk5OTk4IDguOTk5OTJDMi40NDc3IDguOTk5OTIgMS45OTk5OCA4LjU1MjIxIDEuOTk5OTggNy45OTk5M0wxLjk5OTk4IDYuOTk5OTRaTTguOTk5OTMgNS45OTk5NUM4LjQ0NzY1IDUuOTk5OTUgNy45OTk5MyA2LjQ0NzY2IDcuOTk5OTMgNi45OTk5NEw3Ljk5OTkzIDcuOTk5OTNDNy45OTk5MyA4LjU1MjIxIDguNDQ3NjUgOC45OTk5MiA4Ljk5OTkzIDguOTk5OTJMMTEuOTk5OSA4Ljk5OTkyQzEyLjU1MjIgOC45OTk5MiAxMi45OTk5IDguNTUyMjEgMTIuOTk5OSA3Ljk5OTkzTDEyLjk5OTkgNi45OTk5NEMxMi45OTk5IDYuNDQ3NjYgMTIuNTUyMiA1Ljk5OTk1IDExLjk5OTkgNS45OTk5NUw4Ljk5OTkzIDUuOTk5OTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC45OTk4NzggMC41QzAuOTk5ODc4IDAuMjIzODU4IDEuMjIzNzQgMCAxLjQ5OTg4IDBIMTMuNDk5OUMxMy43NzYgMCAxMy45OTk5IDAuMjIzODU4IDEzLjk5OTkgMC41QzEzLjk5OTkgMC43NzYxNDIgMTMuNzc2IDEgMTMuNDk5OSAxSDEuNDk5ODhDMS4yMjM3NCAxIDAuOTk5ODc4IDAuNzc2MTQyIDAuOTk5ODc4IDAuNVpNNyAyQzYuNDQ3NzIgMiA2IDIuNDQ3NzIgNiAzVjZDNiA2LjU1MjI4IDYuNDQ3NzIgNyA3IDdIOEM4LjU1MjI4IDcgOSA2LjU1MjI4IDkgNlYzQzkgMi40NDc3MiA4LjU1MjI4IDIgOCAySDdaTTcgOEM2LjQ0NzcyIDggNiA4LjQ0NzcxIDYgOVYxMkM2IDEyLjU1MjMgNi40NDc3MiAxMyA3IDEzSDhDOC41NTIyOCAxMyA5IDEyLjU1MjMgOSAxMlY5QzkgOC40NDc3MiA4LjU1MjI4IDggOCA4SDdaTTEuNDk5ODggMTRDMS4yMjM3NCAxNCAwLjk5OTg3OCAxNC4yMjM5IDAuOTk5ODc4IDE0LjVDMC45OTk4NzggMTQuNzc2MSAxLjIyMzc0IDE1IDEuNDk5ODggMTVIMTMuNDk5OUMxMy43NzYgMTUgMTMuOTk5OSAxNC43NzYxIDEzLjk5OTkgMTQuNUMxMy45OTk5IDE0LjIyMzkgMTMuNzc2IDE0IDEzLjQ5OTkgMTRIMS40OTk4OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LElyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ2OTY4IDEuMDUwODVDNy42NDEyMiAxLjEzNDc1IDcuNzUgMS4zMDkwNCA3Ljc1IDEuNVYxMy41QzcuNzUgMTMuNjkxIDcuNjQxMjIgMTMuODY1MyA3LjQ2OTY4IDEzLjk0OTJDNy4yOTgxMyAxNC4wMzMxIDcuMDkzNzcgMTQuMDExOSA2Ljk0MzAzIDEzLjg5NDdMMy4yMjEzIDExSDEuNUMwLjY3MTU3MSAxMSAwIDEwLjMyODQgMCA5LjVWNS41QzAgNC42NzE1OCAwLjY3MTU3MyA0IDEuNSA0SDMuMjIxM0w2Ljk0MzAzIDEuMTA1MzNDNy4wOTM3NyAwLjk4ODA4NSA3LjI5ODEzIDAuOTY2OTQ1IDcuNDY5NjggMS4wNTA4NVpNNi43NSAyLjUyMjMyTDMuNjk5ODMgNC44OTQ2OEMzLjYxMjA2IDQuOTYyOTQgMy41MDQwNSA1IDMuMzkyODYgNUgxLjVDMS4yMjM4NiA1IDEgNS4yMjM4NiAxIDUuNVY5LjVDMSA5Ljc3NjE1IDEuMjIzODYgMTAgMS41IDEwSDMuMzkyODZDMy41MDQwNSAxMCAzLjYxMjA2IDEwLjAzNzEgMy42OTk4MyAxMC4xMDUzTDYuNzUgMTIuNDc3N1YyLjUyMjMyWk0xMC4yNzg0IDMuODQ4MDRDMTAuNDYyMyAzLjcyNTY3IDEwLjcxMDYgMy43NzU1NyAxMC44MzMgMy45NTk0OUMxMi4yNTU4IDYuMDk3OTggMTIuMjU1OCA4LjkwMTk5IDEwLjgzMyAxMS4wNDA1QzEwLjcxMDYgMTEuMjI0NCAxMC40NjIzIDExLjI3NDMgMTAuMjc4NCAxMS4xNTE5QzEwLjA5NDQgMTEuMDI5NiAxMC4wNDQ1IDEwLjc4MTMgMTAuMTY2OSAxMC41OTczQzExLjQxMTEgOC43MjcyOCAxMS40MTExIDYuMjcyNjkgMTAuMTY2OSA0LjQwMjY0QzEwLjA0NDUgNC4yMTg3MSAxMC4wOTQ0IDMuOTcwNDEgMTAuMjc4NCAzLjg0ODA0Wk0xMi42Nzg1IDEuNDMwNDRDMTIuNTM1NiAxLjI2MTkgMTIuMjgzMiAxLjI0MTA0IDEyLjExNDcgMS4zODM4NkMxMS45NDYyIDEuNTI2NjcgMTEuOTI1MyAxLjc3OTA4IDEyLjA2ODEgMS45NDc2MkMxNC43NzczIDUuMTQ0ODggMTQuNzc3MyA5Ljg1NTEzIDEyLjA2ODEgMTMuMDUyNEMxMS45MjUzIDEzLjIyMDkgMTEuOTQ2MiAxMy40NzMzIDEyLjExNDcgMTMuNjE2MUMxMi4yODMyIDEzLjc1OSAxMi41MzU2IDEzLjczODEgMTIuNjc4NSAxMy41Njk2QzE1LjY0MDYgMTAuMDczOSAxNS42NDA2IDQuOTI2MTIgMTIuNjc4NSAxLjQzMDQ0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTggMS41QzggMS4zMTA2MiA3Ljg5MyAxLjEzNzQ5IDcuNzIzNjEgMS4wNTI3OUM3LjU1NDIxIDAuOTY4MDkzIDcuMzUxNTEgMC45ODYzNzEgNy4yIDEuMUwzLjMzMzMzIDRIMS41QzAuNjcxNTczIDQgMCA0LjY3MTU4IDAgNS41VjkuNUMwIDEwLjMyODQgMC42NzE1NzMgMTEgMS41IDExSDMuMzMzMzNMNy4yIDEzLjlDNy4zNTE1MSAxNC4wMTM2IDcuNTU0MjEgMTQuMDMxOSA3LjcyMzYxIDEzLjk0NzJDNy44OTMgMTMuODYyNSA4IDEzLjY4OTQgOCAxMy41VjEuNVpNMy44IDQuOUw3IDIuNVYxMi41TDMuOCAxMC4xQzMuNzEzNDUgMTAuMDM1MSAzLjYwODE5IDEwIDMuNSAxMEgxLjVDMS4yMjM4NiAxMCAxIDkuNzc2MTQgMSA5LjVWNS41QzEgNS4yMjM4NiAxLjIyMzg2IDUgMS41IDVIMy41QzMuNjA4MTkgNSAzLjcxMzQ1IDQuOTY0OTEgMy44IDQuOVpNMTAuODMzIDMuOTU5NDlDMTAuNzEwNiAzLjc3NTU3IDEwLjQ2MjMgMy43MjU2NyAxMC4yNzg0IDMuODQ4MDRDMTAuMDk0NCAzLjk3MDQxIDEwLjA0NDUgNC4yMTg3MSAxMC4xNjY5IDQuNDAyNjRDMTEuNDExMSA2LjI3MjY4IDExLjQxMTEgOC43MjcyOCAxMC4xNjY5IDEwLjU5NzNDMTAuMDQ0NSAxMC43ODEzIDEwLjA5NDQgMTEuMDI5NiAxMC4yNzg0IDExLjE1MTlDMTAuNDYyMyAxMS4yNzQzIDEwLjcxMDYgMTEuMjI0NCAxMC44MzMgMTEuMDQwNUMxMi4yNTU4IDguOTAxOTkgMTIuMjU1OCA2LjA5Nzk4IDEwLjgzMyAzLjk1OTQ5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNzIzNjEgMS4wNTI3OUM3Ljg5MyAxLjEzNzQ5IDggMS4zMTA2MiA4IDEuNVYxMy41QzggMTMuNjg5NCA3Ljg5MyAxMy44NjI1IDcuNzIzNjEgMTMuOTQ3MkM3LjU1NDIxIDE0LjAzMTkgNy4zNTE1MSAxNC4wMTM2IDcuMiAxMy45TDMuMzMzMzMgMTFIMS41QzAuNjcxNTczIDExIDAgMTAuMzI4NCAwIDkuNVY1LjVDMCA0LjY3MTU4IDAuNjcxNTczIDQgMS41IDRIMy4zMzMzM0w3LjIgMS4xQzcuMzUxNTEgMC45ODYzNzEgNy41NTQyMSAwLjk2ODA5MyA3LjcyMzYxIDEuMDUyNzlaTTcgMi41TDMuOCA0LjlDMy43MTM0NSA0Ljk2NDkxIDMuNjA4MTkgNSAzLjUgNUgxLjVDMS4yMjM4NiA1IDEgNS4yMjM4NiAxIDUuNVY5LjVDMSA5Ljc3NjE0IDEuMjIzODYgMTAgMS41IDEwSDMuNUMzLjYwODE5IDEwIDMuNzEzNDUgMTAuMDM1MSAzLjggMTAuMUw3IDEyLjVWMi41Wk0xNC44NTM2IDUuMTQ2NDVDMTUuMDQ4OCA1LjM0MTcxIDE1LjA0ODggNS42NTgyOSAxNC44NTM2IDUuODUzNTVMMTMuMjA3MSA3LjVMMTQuODUzNiA5LjE0NjQ1QzE1LjA0ODggOS4zNDE3MSAxNS4wNDg4IDkuNjU4MjkgMTQuODUzNiA5Ljg1MzU1QzE0LjY1ODMgMTAuMDQ4OCAxNC4zNDE3IDEwLjA0ODggMTQuMTQ2NCA5Ljg1MzU1TDEyLjUgOC4yMDcxMUwxMC44NTM2IDkuODUzNTVDMTAuNjU4MyAxMC4wNDg4IDEwLjM0MTcgMTAuMDQ4OCAxMC4xNDY0IDkuODUzNTVDOS45NTExOCA5LjY1ODI5IDkuOTUxMTggOS4zNDE3MSAxMC4xNDY0IDkuMTQ2NDVMMTEuNzkyOSA3LjVMMTAuMTQ2NCA1Ljg1MzU1QzkuOTUxMTggNS42NTgyOSA5Ljk1MTE4IDUuMzQxNzEgMTAuMTQ2NCA1LjE0NjQ1QzEwLjM0MTcgNC45NTExOCAxMC42NTgzIDQuOTUxMTggMTAuODUzNiA1LjE0NjQ1TDEyLjUgNi43OTI4OUwxNC4xNDY0IDUuMTQ2NDVDMTQuMzQxNyA0Ljk1MTE4IDE0LjY1ODMgNC45NTExOCAxNC44NTM2IDUuMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOCAxLjVDOCAxLjMxMDYyIDcuODkzIDEuMTM3NDkgNy43MjM2MSAxLjA1Mjc5QzcuNTU0MjEgMC45NjgwOTMgNy4zNTE1MSAwLjk4NjM3MSA3LjIgMS4xTDMuMzMzMzMgNEgxLjVDMC42NzE1NzMgNCAwIDQuNjcxNTggMCA1LjVWOS41QzAgMTAuMzI4NCAwLjY3MTU3MyAxMSAxLjUgMTFIMy4zMzMzM0w3LjIgMTMuOUM3LjM1MTUxIDE0LjAxMzYgNy41NTQyMSAxNC4wMzE5IDcuNzIzNjEgMTMuOTQ3MkM3Ljg5MyAxMy44NjI1IDggMTMuNjg5NCA4IDEzLjVWMS41Wk0zLjggNC45TDcgMi41VjEyLjVMMy44IDEwLjFDMy43MTM0NSAxMC4wMzUxIDMuNjA4MTkgMTAgMy41IDEwSDEuNUMxLjIyMzg2IDEwIDEgOS43NzYxNCAxIDkuNVY1LjVDMSA1LjIyMzg2IDEuMjIzODYgNSAxLjUgNUgzLjVDMy42MDgxOSA1IDMuNzEzNDUgNC45NjQ5MSAzLjggNC45Wk0xMC4wODMgNS4wNTU3N0M5Ljk2MDY2IDQuODcxODUgOS43MTIzNSA0LjgyMTk1IDkuNTI4NDMgNC45NDQzMkM5LjM0NDUgNS4wNjY2OSA5LjI5NDYgNS4zMTQ5OSA5LjQxNjk3IDUuNDk4OTJDMTAuMjIwNyA2LjcwNjkzIDEwLjIyMDcgOC4yOTMwMyA5LjQxNjk3IDkuNTAxMDRDOS4yOTQ2IDkuNjg0OTYgOS4zNDQ1IDkuOTMzMjYgOS41Mjg0MyAxMC4wNTU2QzkuNzEyMzUgMTAuMTc4IDkuOTYwNjYgMTAuMTI4MSAxMC4wODMgOS45NDQxOEMxMS4wNjUzIDguNDY3NzMgMTEuMDY1MyA2LjUzMjIyIDEwLjA4MyA1LjA1NTc3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgMUgxLjVIMTMuNUgxNFYxLjVWMTMuNVYxNEgxMy41SDEuNUgxVjEzLjVWMS41VjFaTTIgMlYxM0gxM1YySDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxWcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy43NTQzMiAxLjgxOTU0QzcuNTk3NDIgMS43MjY4MiA3LjQwMjUgMS43MjY4MiA3LjI0NTU5IDEuODE5NTRMMS43NDU1OSA1LjA2OTU0QzEuNTkzMzYgNS4xNTk0OSAxLjQ5OTk2IDUuMzIzMTcgMS40OTk5NiA1LjVDMS40OTk5NiA1LjY3NjgzIDEuNTkzMzYgNS44NDA1MSAxLjc0NTU5IDUuOTMwNDZMNy4yNDU1OSA5LjE4MDQ2QzcuNDAyNSA5LjI3MzE4IDcuNTk3NDIgOS4yNzMxOCA3Ljc1NDMyIDkuMTgwNDZMMTMuMjU0MyA1LjkzMDQ2QzEzLjQwNjYgNS44NDA1MSAxMy41IDUuNjc2ODMgMTMuNSA1LjVDMTMuNSA1LjMyMzE3IDEzLjQwNjYgNS4xNTk0OSAxMy4yNTQzIDUuMDY5NTRMNy43NTQzMiAxLjgxOTU0Wk03LjQ5OTk2IDguMTY5MjNMMi45ODI4IDUuNUw3LjQ5OTk2IDIuODMwNzdMMTIuMDE3MSA1LjVMNy40OTk5NiA4LjE2OTIzWk0yLjI1NDMyIDguMzE5NTRDMi4wMTY1OCA4LjE3OTA2IDEuNzA5OTggOC4yNTc5IDEuNTY5NDkgOC40OTU2NEMxLjQyOTAxIDguNzMzMzcgMS41MDc4NSA5LjAzOTk4IDEuNzQ1NTkgOS4xODA0Nkw3LjI0NTU5IDEyLjQzMDVDNy40MDI1IDEyLjUyMzIgNy41OTc0MiAxMi41MjMyIDcuNzU0MzIgMTIuNDMwNUwxMy4yNTQzIDkuMTgwNDZDMTMuNDkyMSA5LjAzOTk4IDEzLjU3MDkgOC43MzMzNyAxMy40MzA0IDguNDk1NjRDMTMuMjg5OSA4LjI1NzkgMTIuOTgzMyA4LjE3OTA2IDEyLjc0NTYgOC4zMTk1NEw3LjQ5OTk2IDExLjQxOTJMMi4yNTQzMiA4LjMxOTU0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuOTc5NDIgMS4yNTE3MUw2Ljk1ODUgMS4zMDE5OUw1LjU4NjYyIDQuNjAwMzlDNS41NDM0MiA0LjcwNDI2IDUuNDQ1NzMgNC43NzUyMyA1LjMzMzYgNC43ODQyMkwxLjc3MjcgNS4wNjk3TDEuNzE4NDEgNS4wNzQwNUwxLjM4Njg3IDUuMTAwNjNMMS4wODYwOCA1LjEyNDc1QzAuODIwMDg1IDUuMTQ2MDcgMC43MTIyMjggNS40NzgwMiAwLjkxNDg4OSA1LjY1MTYyTDEuMTQ0MDYgNS44NDc5M0wxLjM5NjY2IDYuMDY0MzFMMS40MzgwMiA2LjA5OTc0TDQuMTUxMDUgOC40MjM3NEM0LjIzNjQ4IDguNDk2OTIgNC4yNzM4IDguNjExNzYgNC4yNDc2OSA4LjcyMTE4TDMuNDE4ODIgMTIuMTk2TDMuNDA2MTggMTIuMjQ5TDMuMzI5MDEgMTIuNTcyNUwzLjI1ODk5IDEyLjg2NkMzLjE5NzA4IDEzLjEyNTYgMy40Nzk0NSAxMy4zMzA4IDMuNzA3MTggMTMuMTkxN0wzLjk2NDcgMTMuMDM0NEw0LjI0ODU0IDEyLjg2MUw0LjI5NTAyIDEyLjgzMjZMNy4zNDM2NSAxMC45NzA1QzcuNDM5NjUgMTAuOTExOSA3LjU2MDQgMTAuOTExOSA3LjY1NjQgMTAuOTcwNUwxMC43MDUgMTIuODMyNkwxMC43NTE1IDEyLjg2MUwxMS4wMzU0IDEzLjAzNDRMMTEuMjkyOSAxMy4xOTE3QzExLjUyMDYgMTMuMzMwOCAxMS44MDMgMTMuMTI1NiAxMS43NDExIDEyLjg2NkwxMS42NzEgMTIuNTcyNUwxMS41OTM5IDEyLjI0OUwxMS41ODEyIDEyLjE5NkwxMC43NTI0IDguNzIxMThDMTAuNzI2MyA4LjYxMTc2IDEwLjc2MzYgOC40OTY5MiAxMC44NDkgOC40MjM3NEwxMy41NjIgNi4wOTk3NEwxMy42MDM0IDYuMDY0MzFMMTMuODU2IDUuODQ3OTNMMTQuMDg1MiA1LjY1MTYyQzE0LjI4NzggNS40NzgwMiAxNC4xOCA1LjE0NjA3IDEzLjkxNCA1LjEyNDc1TDEzLjYxMzIgNS4xMDA2M0wxMy4yODE2IDUuMDc0MDVMMTMuMjI3NCA1LjA2OTdMOS42NjY0NSA0Ljc4NDIyQzkuNTU0MzIgNC43NzUyMyA5LjQ1NjYzIDQuNzA0MjYgOS40MTM0MyA0LjYwMDM5TDguMDQxNTUgMS4zMDE5OUw4LjAyMDY0IDEuMjUxNzFMNy44OTI5MSAwLjk0NDYwOUw3Ljc3NzAyIDAuNjY1OTkyQzcuNjc0NTQgMC40MTk2MDQgNy4zMjU1MSAwLjQxOTYwNCA3LjIyMzAzIDAuNjY1OTkyTDcuMTA3MTUgMC45NDQ2MDlMNi45Nzk0MiAxLjI1MTcxWk03LjUwMDAzIDIuNjAzOTdMNi41MDk5NCA0Ljk4NDQyQzYuMzIyNzMgNS40MzQ1MyA1Ljg5OTQ0IDUuNzQyMDcgNS40MTM1MSA1Ljc4MTAzTDIuODQzNjEgNS45ODcwNUw0LjgwMTYgNy42NjQyOEM1LjE3MTgzIDcuOTgxNDIgNS4zMzM1MSA4LjQ3OTAzIDUuMjIwNCA4Ljk1MzIxTDQuNjIyMjEgMTEuNDYxTDYuODIyNCAxMC4xMTcxQzcuMjM4NDIgOS44NjMwMiA3Ljc2MTY0IDkuODYzMDIgOC4xNzc2NiAxMC4xMTcxTDEwLjM3NzggMTEuNDYxTDkuNzc5NjUgOC45NTMyMUM5LjY2NjU0IDguNDc5MDMgOS44MjgyMiA3Ljk4MTQyIDEwLjE5ODQgNy42NjQyOEwxMi4xNTY0IDUuOTg3MDVMOS41ODY1NCA1Ljc4MTAzQzkuMTAwNjEgNS43NDIwNyA4LjY3NzMyIDUuNDM0NTMgOC40OTAxMSA0Ljk4NDQyTDcuNTAwMDMgMi42MDM5N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFpyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjIyMzAzIDAuNjY1OTkyQzcuMzI1NTEgMC40MTk2MDQgNy42NzQ1NCAwLjQxOTYwNCA3Ljc3NzAyIDAuNjY1OTkyTDkuNDEzNDMgNC42MDAzOUM5LjQ1NjYzIDQuNzA0MjYgOS41NTQzMiA0Ljc3NTIzIDkuNjY2NDUgNC43ODQyMkwxMy45MTQgNS4xMjQ3NUMxNC4xOCA1LjE0NjA3IDE0LjI4NzggNS40NzgwMiAxNC4wODUyIDUuNjUxNjJMMTAuODQ5IDguNDIzNzRDMTAuNzYzNiA4LjQ5NjkyIDEwLjcyNjMgOC42MTE3NiAxMC43NTI0IDguNzIxMThMMTEuNzQxMSAxMi44NjZDMTEuODAzIDEzLjEyNTYgMTEuNTIwNiAxMy4zMzA4IDExLjI5MjkgMTMuMTkxN0w3LjY1NjQgMTAuOTcwNUM3LjU2MDQgMTAuOTExOSA3LjQzOTY1IDEwLjkxMTkgNy4zNDM2NSAxMC45NzA1TDMuNzA3MTggMTMuMTkxN0MzLjQ3OTQ1IDEzLjMzMDggMy4xOTcwOCAxMy4xMjU2IDMuMjU4OTkgMTIuODY2TDQuMjQ3NjkgOC43MjExOEM0LjI3MzggOC42MTE3NiA0LjIzNjQ4IDguNDk2OTIgNC4xNTEwNSA4LjQyMzc0TDAuOTE0ODg5IDUuNjUxNjJDMC43MTIyMjggNS40NzgwMiAwLjgyMDA4NiA1LjE0NjA3IDEuMDg2MDggNS4xMjQ3NUw1LjMzMzYgNC43ODQyMkM1LjQ0NTczIDQuNzc1MjMgNS41NDM0MiA0LjcwNDI2IDUuNTg2NjIgNC42MDAzOUw3LjIyMzAzIDAuNjY1OTkyWlwiLGZpbGw6bn0pKX0sJHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuODQ5OTggNy40OTk5OEMxLjg0OTk4IDcuMjEzMjEgMS44NzEzNCA2LjkzMTQzIDEuOTEyNTYgNi42NTYxNUw5LjU2Mzc0IDIuMjM4NzVDOS44NjMxMSAyLjM1NjI3IDEwLjE1IDIuNDk4NjEgMTAuNDIxOSAyLjY2MzIyTDMuNzcwNjUgNi41MDMzMkMzLjczNjY5IDYuNTIxODMgMy43MDQ4MiA2LjU0NDkgMy42NzYwMiA2LjU3MjM4QzMuNTkxMSA2LjY1MzA4IDMuNTQyNDUgNi43NjI4NiAzLjUzNjgyIDYuODc2NThDMy41MzM1OSA2Ljk0MTggMy41NDQ1MSA3LjAwODMxIDMuNTcwODYgNy4wNzEzN0MzLjU4OTI3IDcuMTE1NyAzLjYxNDkgNy4xNTc0MiAzLjY0NzQ0IDcuMTk0NThDMy42NzMwNiA3LjIyMzk2IDMuNzAyIDcuMjQ5NDEgMy43MzMzNyA3LjI3MDY5TDcuMzI1MzMgOS44MzgxM0wzLjg3MjMyIDExLjgzMTdDMi42MzYwNCAxMC43OTUzIDEuODQ5OTggOS4yMzk0NCAxLjg0OTk4IDcuNDk5OThaTTguMzY4NDMgMTAuMjc1MUM4LjM3NjgyIDEwLjI3MDYgOC4zODUwOSAxMC4yNjU5IDguMzkzMjIgMTAuMjYwOEw5Ljg0MDkxIDkuNDI0OTlDOS44NDcwNiA5LjQyMTYzIDkuODUzMTQgOS40MTgxMiA5Ljg1OTE1IDkuNDE0NDZMMTEuMzEwMSA4LjU3Njc3QzExLjM2NTUgOC41NDY0OSAxMS40MTU0IDguNTA0IDExLjQ1NTQgOC40NDk5NUMxMS42MDM0IDguMjUwMzEgMTEuNTYxNiA3Ljk2ODQ4IDExLjM2MiA3LjgyMDQ2TDcuODI3NzkgNS4yMDAxN0wxMS4yMTYxIDMuMjQzOTNDMTIuNDAxMyA0LjI3OTYzIDEzLjE1IDUuODAyMzcgMTMuMTUgNy40OTk5OEMxMy4xNSA3LjgzNTQ2IDEzLjEyMDcgOC4xNjQxMSAxMy4wNjQ3IDguNDgzNTNMNS41Njg3NSAxMi44MTEzQzUuMjYxMzggMTIuNjk5NSA0Ljk2NjQ2IDEyLjU2MTggNC42ODY2MiAxMi40MDA4TDguMzY4NDMgMTAuMjc1MVpNOC4xODE0OSA5LjM0MzgzTDQuODE2NTkgNi45Mzg2OEw1LjUwOTE4IDYuNTM4ODFMOC44MDYwNCA4Ljk4MzI0TDguMTgxNDkgOS4zNDM4M1pNNi4zNTg3NSA2LjA0ODMyTDYuOTc4MjIgNS42OTA2N0wxMC4yNzUxIDguMTM1MDZMOS42NTU2IDguNDkyNzVMNi4zNTg3NSA2LjA0ODMyWk04LjMzMTggMS45MTA3OEwyLjI0MjYzIDUuNDI2MzZDMy4wNjk0MSAzLjMzMTg4IDUuMTExNjQgMS44NDk5OCA3LjQ5OTk4IDEuODQ5OThDNy43ODI1OCAxLjg0OTk4IDguMDYwMzMgMS44NzA3MiA4LjMzMTggMS45MTA3OFpNNi44NDY4NCAxMy4xMTI2QzcuMDYxMTQgMTMuMTM3MyA3LjI3OTA4IDEzLjE1IDcuNDk5OTggMTMuMTVDOS44MjQ2IDEzLjE1IDExLjgyMTMgMTEuNzQ2MSAxMi42ODg2IDkuNzM5OUw2Ljg0Njg0IDEzLjExMjZaTTcuNDk5OTggMC44NDk5NzZDMy44MjcyOCAwLjg0OTk3NiAwLjg0OTk3NiAzLjgyNzI4IDAuODQ5OTc2IDcuNDk5OThDMC44NDk5NzYgMTEuMTcyNyAzLjgyNzI4IDE0LjE1IDcuNDk5OTggMTQuMTVDMTEuMTcyNyAxNC4xNSAxNC4xNSAxMS4xNzI3IDE0LjE1IDcuNDk5OThDMTQuMTUgMy44MjcyOCAxMS4xNzI3IDAuODQ5OTc2IDcuNDk5OTggMC44NDk5NzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxOcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAzQzIgMi40NDc3MiAyLjQ0NzcyIDIgMyAySDEyQzEyLjU1MjMgMiAxMyAyLjQ0NzcyIDEzIDNWMTJDMTMgMTIuNTUyMyAxMi41NTIzIDEzIDEyIDEzSDNDMi40NDc3MiAxMyAyIDEyLjU1MjMgMiAxMlYzWk0xMiAzSDNWMTJIMTJWM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEZyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjQ5OTk4IDAuNUM1LjQ5OTk4IDAuMjIzODU4IDUuNzIzODMgMCA1Ljk5OTk4IDBINy40OTk5OEg4Ljk5OTk4QzkuMjc2MTIgMCA5LjQ5OTk4IDAuMjIzODU4IDkuNDk5OTggMC41QzkuNDk5OTggMC43NzYxNDIgOS4yNzYxMiAxIDguOTk5OTggMUg3Ljk5OTk4VjIuMTE5MjJDOS4wOTgzMiAyLjIwNDA5IDEwLjExOSAyLjU2NjIyIDEwLjk5MiAzLjEzNTcyQzExLjAxMTYgMy4xMDg1MSAxMS4wMzM2IDMuMDgyNTIgMTEuMDU4IDMuMDU4MDZMMTEuODU4IDIuMjU4MDZDMTIuMTAyMSAyLjAxMzk4IDEyLjQ5NzggMi4wMTM5OCAxMi43NDE5IDIuMjU4MDZDMTIuOTg2IDIuNTAyMTQgMTIuOTg2IDIuODk3ODYgMTIuNzQxOSAzLjE0MTk0TDExLjk2NyAzLjkxNjgyQzEzLjE1OTUgNS4wNzkyNSAxMy45IDYuNzAzMTQgMTMuOSA4LjQ5OTk4QzEzLjkgMTIuMDM0NiAxMS4wMzQ2IDE0LjkgNy40OTk5OCAxNC45QzMuOTY1MzUgMTQuOSAxLjA5OTk4IDEyLjAzNDYgMS4wOTk5OCA4LjQ5OTk4QzEuMDk5OTggNS4xMzM2MiAzLjY5OTA0IDIuMzc0MyA2Ljk5OTk4IDIuMTE5MjJWMUg1Ljk5OTk4QzUuNzIzODMgMSA1LjQ5OTk4IDAuNzc2MTQyIDUuNDk5OTggMC41Wk0yLjA5OTk4IDguNDk5OThDMi4wOTk5OCA1LjUxNzY0IDQuNTE3NjQgMy4wOTk5OCA3LjQ5OTk4IDMuMDk5OThDMTAuNDgyMyAzLjA5OTk4IDEyLjkgNS41MTc2NCAxMi45IDguNDk5OThDMTIuOSAxMS40ODIzIDEwLjQ4MjMgMTMuOSA3LjQ5OTk4IDEzLjlDNC41MTc2NCAxMy45IDIuMDk5OTggMTEuNDgyMyAyLjA5OTk4IDguNDk5OThaTTcuOTk5OTggNC41QzcuOTk5OTggNC4yMjM4NiA3Ljc3NjEyIDQgNy40OTk5OCA0QzcuMjIzODMgNCA2Ljk5OTk4IDQuMjIzODYgNi45OTk5OCA0LjVWOS41QzYuOTk5OTggOS43NzYxNCA3LjIyMzgzIDEwIDcuNDk5OTggMTBDNy43NzYxMiAxMCA3Ljk5OTk4IDkuNzc2MTQgNy45OTk5OCA5LjVWNC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTE0LjQ5OTkgMC45OTk5OTJDMTQuMjIzNyAwLjk5OTk5MiAxMy45OTk5IDEuMjIzODUgMTMuOTk5OSAxLjQ5OTk5TDEzLjk5OTkgNS45OTk5NUwwLjk5OTk5MiA1Ljk5OTk1TDAuOTk5OTkyIDEuNDk5OTlDMC45OTk5OTIgMS4yMjM4NSAwLjc3NjEzNiAwLjk5OTk5MiAwLjQ5OTk5NiAwLjk5OTk5MkMwLjIyMzg1NiAwLjk5OTk5MiAtOS43ODUwOWUtMDkgMS4yMjM4NSAtMi4xODU1NmUtMDggMS40OTk5OUw0LjA3Mjc5ZS0wNyAxMy40OTk5QzMuOTUyMDhlLTA3IDEzLjc3NiAwLjIyMzg1NSAxMy45OTk5IDAuNDk5OTk2IDEzLjk5OTlDMC43NzYxMzYgMTMuOTk5OSAwLjk5OTk5MiAxMy43NzYgMC45OTk5OTIgMTMuNDk5OUwwLjk5OTk5MiA4Ljk5OTkyTDEzLjk5OTkgOC45OTk5MkwxMy45OTk5IDEzLjQ5OTlDMTMuOTk5OSAxMy43NzYgMTQuMjIzNyAxMy45OTk5IDE0LjQ5OTkgMTMuOTk5OUMxNC43NzYgMTMuOTk5OSAxNC45OTk5IDEzLjc3NiAxNC45OTk5IDEzLjQ5OTlMMTQuOTk5OSAxLjQ5OTk5QzE0Ljk5OTkgMS4yMjM4NSAxNC43NzYgMC45OTk5OTIgMTQuNDk5OSAwLjk5OTk5MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjk5OTg3OCAwLjVDMC45OTk4NzggMC4yMjM4NTggMS4yMjM3NCAwIDEuNDk5ODggMEgxMy40OTk5QzEzLjc3NiAwIDEzLjk5OTkgMC4yMjM4NTggMTMuOTk5OSAwLjVDMTMuOTk5OSAwLjc3NjE0MiAxMy43NzYgMSAxMy40OTk5IDFINkgxLjQ5OTg4QzEuMjIzNzQgMSAwLjk5OTg3OCAwLjc3NjE0MiAwLjk5OTg3OCAwLjVaTTkgMTRWMUw2IDFWMTRIMS40OTk4OEMxLjIyMzc0IDE0IDAuOTk5ODc4IDE0LjIyMzkgMC45OTk4NzggMTQuNUMwLjk5OTg3OCAxNC43NzYxIDEuMjIzNzQgMTUgMS40OTk4OCAxNUgxMy40OTk5QzEzLjc3NiAxNSAxMy45OTk5IDE0Ljc3NjEgMTMuOTk5OSAxNC41QzEzLjk5OTkgMTQuMjIzOSAxMy43NzYgMTQgMTMuNDk5OSAxNEg5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0senI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuMDAwMDMgMy4yNUM1LjAwMDAzIDIuOTczODYgNC43NzYxNyAyLjc1IDQuNTAwMDMgMi43NUM0LjIyMzg5IDIuNzUgNC4wMDAwMyAyLjk3Mzg2IDQuMDAwMDMgMy4yNVY3LjEwMDAzSDIuNDk5OThDMi4yNzkwNiA3LjEwMDAzIDIuMDk5OTggNy4yNzkxMiAyLjA5OTk4IDcuNTAwMDNDMi4wOTk5OCA3LjcyMDk0IDIuMjc5MDYgNy45MDAwMyAyLjQ5OTk4IDcuOTAwMDNINC4wMDAwM1Y4LjU1QzQuMDAwMDMgMTAuNDgzIDUuNTY3MDMgMTIuMDUgNy41MDAwMyAxMi4wNUM5LjQzMzAzIDEyLjA1IDExIDEwLjQ4MyAxMSA4LjU1VjcuOTAwMDNIMTIuNUMxMi43MjA5IDcuOTAwMDMgMTIuOSA3LjcyMDk0IDEyLjkgNy41MDAwM0MxMi45IDcuMjc5MTIgMTIuNzIwOSA3LjEwMDAzIDEyLjUgNy4xMDAwM0gxMVYzLjI1QzExIDIuOTczODYgMTAuNzc2MiAyLjc1IDEwLjUgMi43NUMxMC4yMjM5IDIuNzUgMTAgMi45NzM4NiAxMCAzLjI1VjcuMTAwMDNINS4wMDAwM1YzLjI1Wk01LjAwMDAzIDcuOTAwMDNWOC41NUM1LjAwMDAzIDkuOTMwNzEgNi4xMTkzMiAxMS4wNSA3LjUwMDAzIDExLjA1QzguODgwNzQgMTEuMDUgMTAgOS45MzA3MSAxMCA4LjU1VjcuOTAwMDNINS4wMDAwM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMEM3Ljc3NjE0IDAgOCAwLjIyMzg1OCA4IDAuNVYyLjVDOCAyLjc3NjE0IDcuNzc2MTQgMyA3LjUgM0M3LjIyMzg2IDMgNyAyLjc3NjE0IDcgMi41VjAuNUM3IDAuMjIzODU4IDcuMjIzODYgMCA3LjUgMFpNMi4xOTY3IDIuMTk2N0MyLjM5MTk2IDIuMDAxNDQgMi43MDg1NCAyLjAwMTQ0IDIuOTAzODEgMi4xOTY3TDQuMzE4MDIgMy42MTA5MUM0LjUxMzI4IDMuODA2MTcgNC41MTMyOCA0LjEyMjc2IDQuMzE4MDIgNC4zMTgwMkM0LjEyMjc2IDQuNTEzMjggMy44MDYxNyA0LjUxMzI4IDMuNjEwOTEgNC4zMTgwMkwyLjE5NjcgMi45MDM4MUMyLjAwMTQ0IDIuNzA4NTQgMi4wMDE0NCAyLjM5MTk2IDIuMTk2NyAyLjE5NjdaTTAuNSA3QzAuMjIzODU4IDcgMCA3LjIyMzg2IDAgNy41QzAgNy43NzYxNCAwLjIyMzg1OCA4IDAuNSA4SDIuNUMyLjc3NjE0IDggMyA3Ljc3NjE0IDMgNy41QzMgNy4yMjM4NiAyLjc3NjE0IDcgMi41IDdIMC41Wk0yLjE5NjcgMTIuODAzM0MyLjAwMTQ0IDEyLjYwOCAyLjAwMTQ0IDEyLjI5MTUgMi4xOTY3IDEyLjA5NjJMMy42MTA5MSAxMC42ODJDMy44MDYxNyAxMC40ODY3IDQuMTIyNzYgMTAuNDg2NyA0LjMxODAyIDEwLjY4MkM0LjUxMzI4IDEwLjg3NzIgNC41MTMyOCAxMS4xOTM4IDQuMzE4MDIgMTEuMzg5MUwyLjkwMzgxIDEyLjgwMzNDMi43MDg1NCAxMi45OTg2IDIuMzkxOTYgMTIuOTk4NiAyLjE5NjcgMTIuODAzM1pNMTIuNSA3QzEyLjIyMzkgNyAxMiA3LjIyMzg2IDEyIDcuNUMxMiA3Ljc3NjE0IDEyLjIyMzkgOCAxMi41IDhIMTQuNUMxNC43NzYxIDggMTUgNy43NzYxNCAxNSA3LjVDMTUgNy4yMjM4NiAxNC43NzYxIDcgMTQuNSA3SDEyLjVaTTEwLjY4MiA0LjMxODAyQzEwLjQ4NjcgNC4xMjI3NiAxMC40ODY3IDMuODA2MTcgMTAuNjgyIDMuNjEwOTFMMTIuMDk2MiAyLjE5NjdDMTIuMjkxNSAyLjAwMTQ0IDEyLjYwOCAyLjAwMTQ0IDEyLjgwMzMgMi4xOTY3QzEyLjk5ODYgMi4zOTE5NiAxMi45OTg2IDIuNzA4NTQgMTIuODAzMyAyLjkwMzgxTDExLjM4OTEgNC4zMTgwMkMxMS4xOTM4IDQuNTEzMjggMTAuODc3MiA0LjUxMzI4IDEwLjY4MiA0LjMxODAyWk04IDEyLjVDOCAxMi4yMjM5IDcuNzc2MTQgMTIgNy41IDEyQzcuMjIzODYgMTIgNyAxMi4yMjM5IDcgMTIuNVYxNC41QzcgMTQuNzc2MSA3LjIyMzg2IDE1IDcuNSAxNUM3Ljc3NjE0IDE1IDggMTQuNzc2MSA4IDE0LjVWMTIuNVpNMTAuNjgyIDEwLjY4MkMxMC44NzcyIDEwLjQ4NjcgMTEuMTkzOCAxMC40ODY3IDExLjM4OTEgMTAuNjgyTDEyLjgwMzMgMTIuMDk2MkMxMi45OTg2IDEyLjI5MTUgMTIuOTk4NiAxMi42MDggMTIuODAzMyAxMi44MDMzQzEyLjYwOCAxMi45OTg2IDEyLjI5MTUgMTIuOTk4NiAxMi4wOTYyIDEyLjgwMzNMMTAuNjgyIDExLjM4OTFDMTAuNDg2NyAxMS4xOTM4IDEwLjQ4NjcgMTAuODc3MiAxMC42ODIgMTAuNjgyWk01LjUgNy41QzUuNSA2LjM5NTQzIDYuMzk1NDMgNS41IDcuNSA1LjVDOC42MDQ1NyA1LjUgOS41IDYuMzk1NDMgOS41IDcuNUM5LjUgOC42MDQ1NyA4LjYwNDU3IDkuNSA3LjUgOS41QzYuMzk1NDMgOS41IDUuNSA4LjYwNDU3IDUuNSA3LjVaTTcuNSA0LjVDNS44NDMxNSA0LjUgNC41IDUuODQzMTUgNC41IDcuNUM0LjUgOS4xNTY4NSA1Ljg0MzE1IDEwLjUgNy41IDEwLjVDOS4xNTY4NSAxMC41IDEwLjUgOS4xNTY4NSAxMC41IDcuNUMxMC41IDUuODQzMTUgOS4xNTY4NSA0LjUgNy41IDQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHFyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMC41IDRDOC41NjcgNCA3IDUuNTY3IDcgNy41QzcgOS40MzMgOC41NjcgMTEgMTAuNSAxMUMxMi40MzMgMTEgMTQgOS40MzMgMTQgNy41QzE0IDUuNTY3IDEyLjQzMyA0IDEwLjUgNFpNNy42NzEzMyAxMUM2LjY1MTgzIDEwLjE3NSA2IDguOTEzNjMgNiA3LjVDNiA2LjA4NjM3IDYuNjUxODMgNC44MjQ5OCA3LjY3MTMzIDRINC41QzIuNTY3IDQgMSA1LjU2NyAxIDcuNUMxIDkuNDMzIDIuNTY3IDExIDQuNSAxMUg3LjY3MTMzWk0wIDcuNUMwIDUuMDE0NzIgMi4wMTQ3MiAzIDQuNSAzSDEwLjVDMTIuOTg1MyAzIDE1IDUuMDE0NzIgMTUgNy41QzE1IDkuOTg1MjggMTIuOTg1MyAxMiAxMC41IDEySDQuNUMyLjAxNDcyIDEyIDAgOS45ODUyOCAwIDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFlyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjkwMzIxIDcuMjk2NzdDMS45MDMyMSAxMC4zNDEgNC4xMTA0MSAxMi40MTQ3IDYuNTg4OTMgMTIuODQzOUM2Ljg3MjU1IDEyLjg5MyA3LjA2MjY2IDEzLjE2MjcgNy4wMTM1NSAxMy40NDY0QzYuOTY0NDQgMTMuNzMgNi42OTQ3MSAxMy45MjAxIDYuNDExMDkgMTMuODcxQzMuNDk5NDIgMTMuMzY2OCAwLjg2MDg0IDEwLjkxMjcgMC44NjA4NCA3LjI5Njc3QzAuODYwODM5IDUuNzYwMDkgMS41NTk5NiA0LjU1MjQ1IDIuMzc2MzkgMy42MzM3N0MyLjk2MTI0IDIuOTc1NjggMy42MzAzNCAyLjQ0MTM1IDQuMTY4NDYgMi4wMzIwMkwyLjUzMjA1IDIuMDMyMDJDMi4yNTU5MSAyLjAzMjAyIDIuMDMyMDUgMS44MDgxNiAyLjAzMjA1IDEuNTMyMDJDMi4wMzIwNSAxLjI1NTg4IDIuMjU1OTEgMS4wMzIwMiAyLjUzMjA1IDEuMDMyMDJMNS41MzIwNSAxLjAzMjAyQzUuODA4MTkgMS4wMzIwMiA2LjAzMjA1IDEuMjU1ODggNi4wMzIwNSAxLjUzMjAyTDYuMDMyMDUgNC41MzIwMkM2LjAzMjA1IDQuODA4MTYgNS44MDgxOSA1LjAzMjAyIDUuNTMyMDUgNS4wMzIwMkM1LjI1NTkxIDUuMDMyMDIgNS4wMzIwNSA0LjgwODE2IDUuMDMyMDUgNC41MzIwMkw1LjAzMjA1IDIuNjg2NDVMNS4wMzA1NCAyLjY4NzU5TDUuMDMwNDUgMi42ODc2Nkw1LjAzMDQ0IDIuNjg3NjdMNS4wMzA0MyAyLjY4NzY3QzQuNDU4OTYgMy4xMTg2OCAzLjc2MDU5IDMuNjQ1MzggMy4xNTU1NCA0LjMyNjJDMi40NDEwMiA1LjEzMDIxIDEuOTAzMjEgNi4xMDE1NCAxLjkwMzIxIDcuMjk2NzdaTTEzLjAxMDkgNy43MDMyMUMxMy4wMTA5IDQuNjkxMTUgMTAuODUwNSAyLjYyOTYgOC40MDM4NCAyLjE3MDI5QzguMTIwOTMgMi4xMTcxOCA3LjkzNDY1IDEuODQ0NzkgNy45ODc3NiAxLjU2MTg4QzguMDQwODcgMS4yNzg5OCA4LjMxMzI2IDEuMDkyNyA4LjU5NjE2IDEuMTQ1ODFDMTEuNDcwNCAxLjY4NTQxIDE0LjA1MzIgNC4xMjYwNSAxNC4wNTMyIDcuNzAzMjFDMTQuMDUzMiA5LjIzOTg4IDEzLjM1NDEgMTAuNDQ3NSAxMi41Mzc3IDExLjM2NjJDMTEuOTUyOCAxMi4wMjQzIDExLjI4MzcgMTIuNTU4NiAxMC43NDU2IDEyLjk2OEwxMi4zODIxIDEyLjk2OEMxMi42NTgyIDEyLjk2OCAxMi44ODIxIDEzLjE5MTggMTIuODgyMSAxMy40NjhDMTIuODgyMSAxMy43NDQxIDEyLjY1ODIgMTMuOTY4IDEyLjM4MjEgMTMuOTY4TDkuMzgyMDUgMTMuOTY4QzkuMTA1OTEgMTMuOTY4IDguODgyMDUgMTMuNzQ0MSA4Ljg4MjA1IDEzLjQ2OEw4Ljg4MjA1IDEwLjQ2OEM4Ljg4MjA1IDEwLjE5MTggOS4xMDU5MSA5Ljk2Nzk2IDkuMzgyMDUgOS45Njc5NkM5LjY1ODE5IDkuOTY3OTYgOS44ODIwNSAxMC4xOTE4IDkuODgyMDUgMTAuNDY4TDkuODgyMDUgMTIuMzEzNUw5Ljg4MzYyIDEyLjMxMjNDMTAuNDU1MSAxMS44ODEzIDExLjE1MzUgMTEuMzU0NiAxMS43NTg1IDEwLjY3MzhDMTIuNDczMSA5Ljg2OTc2IDEzLjAxMDkgOC44OTg0NCAxMy4wMTA5IDcuNzAzMjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxLcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOCAySDEyLjVDMTIuNzc2MSAyIDEzIDIuMjIzODYgMTMgMi41VjVIOFYyWk03IDVWMkgyLjVDMi4yMjM4NiAyIDIgMi4yMjM4NiAyIDIuNVY1SDdaTTIgNlY5SDdWNkgyWk04IDZIMTNWOUg4VjZaTTggMTBIMTNWMTIuNUMxMyAxMi43NzYxIDEyLjc3NjEgMTMgMTIuNSAxM0g4VjEwWk0yIDEyLjVWMTBIN1YxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41Wk0xIDIuNUMxIDEuNjcxNTcgMS42NzE1NyAxIDIuNSAxSDEyLjVDMTMuMzI4NCAxIDE0IDEuNjcxNTcgMTQgMi41VjEyLjVDMTQgMTMuMzI4NCAxMy4zMjg0IDE0IDEyLjUgMTRIMi41QzEuNjcxNTcgMTQgMSAxMy4zMjg0IDEgMTIuNVYyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxYcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC45MDAwMjQgNy41MDAwMkMwLjkwMDAyNCAzLjg1NDk1IDMuODU0OTUgMC45MDAwMjQgNy41MDAwMiAwLjkwMDAyNEMxMS4xNDUxIDAuOTAwMDI0IDE0LjEgMy44NTQ5NSAxNC4xIDcuNTAwMDJDMTQuMSAxMS4xNDUxIDExLjE0NTEgMTQuMSA3LjUwMDAyIDE0LjFDMy44NTQ5NSAxNC4xIDAuOTAwMDI0IDExLjE0NTEgMC45MDAwMjQgNy41MDAwMlpNNy41MDAwMiAxLjgwMDAyQzQuMzUyMDEgMS44MDAwMiAxLjgwMDAyIDQuMzUyMDEgMS44MDAwMiA3LjUwMDAyQzEuODAwMDIgMTAuNjQ4IDQuMzUyMDEgMTMuMiA3LjUwMDAyIDEzLjJDMTAuNjQ4IDEzLjIgMTMuMiAxMC42NDggMTMuMiA3LjUwMDAyQzEzLjIgNC4zNTIwMSAxMC42NDggMS44MDAwMiA3LjUwMDAyIDEuODAwMDJaTTMuMDc1MDQgNy41MDAwMkMzLjA3NTA0IDUuMDU2MTcgNS4wNTYxOCAzLjA3NTAyIDcuNTAwMDQgMy4wNzUwMkM5Ljk0Mzg4IDMuMDc1MDIgMTEuOTI1IDUuMDU2MTcgMTEuOTI1IDcuNTAwMDJDMTEuOTI1IDkuOTQzODYgOS45NDM4OCAxMS45MjUgNy41MDAwNCAxMS45MjVDNS4wNTYxOCAxMS45MjUgMy4wNzUwNCA5Ljk0Mzg2IDMuMDc1MDQgNy41MDAwMlpNNy41MDAwNCAzLjkyNTAyQzUuNTI1NjIgMy45MjUwMiAzLjkyNTA0IDUuNTI1NjEgMy45MjUwNCA3LjUwMDAyQzMuOTI1MDQgOS40NzQ0MiA1LjUyNTYzIDExLjA3NSA3LjUwMDA0IDExLjA3NUM5LjQ3NDQ0IDExLjA3NSAxMS4wNzUgOS40NzQ0MiAxMS4wNzUgNy41MDAwMkMxMS4wNzUgNS41MjU2MSA5LjQ3NDQ0IDMuOTI1MDIgNy41MDAwNCAzLjkyNTAyWk03LjUwMDA0IDUuMjUwMDJDNi4yNTc0IDUuMjUwMDIgNS4yNTAwNCA2LjI1NzM5IDUuMjUwMDQgNy41MDAwMkM1LjI1MDA0IDguNzQyNjYgNi4yNTc0IDkuNzUwMDIgNy41MDAwNCA5Ljc1MDAyQzguNzQyNjcgOS43NTAwMiA5Ljc1MDA0IDguNzQyNjYgOS43NTAwNCA3LjUwMDAyQzkuNzUwMDQgNi4yNTczOCA4Ljc0MjY3IDUuMjUwMDIgNy41MDAwNCA1LjI1MDAyWk02LjA1MDA0IDcuNTAwMDJDNi4wNTAwNCA2LjY5OTIxIDYuNjk5MjMgNi4wNTAwMiA3LjUwMDA0IDYuMDUwMDJDOC4zMDA4NCA2LjA1MDAyIDguOTUwMDQgNi42OTkyMSA4Ljk1MDA0IDcuNTAwMDJDOC45NTAwNCA4LjMwMDgzIDguMzAwODQgOC45NTAwMiA3LjUwMDA0IDguOTUwMDJDNi42OTkyMyA4Ljk1MDAyIDYuMDUwMDQgOC4zMDA4MyA2LjA1MDA0IDcuNTAwMDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxKcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy45NDk5MyAyLjk1MDAyTDMuOTQ5OTMgNC40OTk5OEMzLjk0OTkzIDQuNzQ4NTEgMy43NDg0NSA0Ljk0OTk4IDMuNDk5OTMgNC45NDk5OEMzLjI1MTQgNC45NDk5OCAzLjA0OTkzIDQuNzQ4NTEgMy4wNDk5MyA0LjQ5OTk4VjIuNTAwMDRDMy4wNDk5MyAyLjQ1MjQ2IDMuMDU3MzEgMi40MDY2MSAzLjA3MDk5IDIuMzYzNTdDMy4xMjg3OCAyLjE4MTc1IDMuMjk4OTcgMi4wNTAwMiAzLjQ5OTkzIDIuMDUwMDJIMTEuNDk5OUMxMS42NTUzIDIuMDUwMDIgMTEuNzkyMiAyLjEyODcyIDExLjg3MzEgMi4yNDg0MkMxMS45MjE2IDIuMzIwMjQgMTEuOTQ5OSAyLjQwNjgyIDExLjk0OTkgMi41MDAwMkwxMS45NDk5IDIuNTAwMDRWNC40OTk5OEMxMS45NDk5IDQuNzQ4NTEgMTEuNzQ4NSA0Ljk0OTk4IDExLjQ5OTkgNC45NDk5OEMxMS4yNTE0IDQuOTQ5OTggMTEuMDQ5OSA0Ljc0ODUxIDExLjA0OTkgNC40OTk5OFYyLjk1MDAySDguMDQ5OTNWMTIuMDVIOS4yNTQyOEM5LjUwMjgxIDEyLjA1IDkuNzA0MjggMTIuMjUxNSA5LjcwNDI4IDEyLjVDOS43MDQyOCAxMi43NDg2IDkuNTAyODEgMTIuOTUgOS4yNTQyOCAxMi45NUg1Ljc1NDI4QzUuNTA1NzUgMTIuOTUgNS4zMDQyOCAxMi43NDg2IDUuMzA0MjggMTIuNUM1LjMwNDI4IDEyLjI1MTUgNS41MDU3NSAxMi4wNSA1Ljc1NDI4IDEyLjA1SDYuOTQ5OTNWMi45NTAwMkgzLjk0OTkzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgNC41QzIgNC4yMjM4NiAyLjIyMzg2IDQgMi41IDRIMTIuNUMxMi43NzYxIDQgMTMgNC4yMjM4NiAxMyA0LjVDMTMgNC43NzYxNCAxMi43NzYxIDUgMTIuNSA1SDIuNUMyLjIyMzg2IDUgMiA0Ljc3NjE0IDIgNC41Wk00IDcuNUM0IDcuMjIzODYgNC4yMjM4NiA3IDQuNSA3SDEwLjVDMTAuNzc2MSA3IDExIDcuMjIzODYgMTEgNy41QzExIDcuNzc2MTQgMTAuNzc2MSA4IDEwLjUgOEg0LjVDNC4yMjM4NiA4IDQgNy43NzYxNCA0IDcuNVpNMyAxMC41QzMgMTAuMjIzOSAzLjIyMzg2IDEwIDMuNSAxMEgxMS41QzExLjc3NjEgMTAgMTIgMTAuMjIzOSAxMiAxMC41QzEyIDEwLjc3NjEgMTEuNzc2MSAxMSAxMS41IDExSDMuNUMzLjIyMzg2IDExIDMgMTAuNzc2MSAzIDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxlbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi41IDRDMi4yMjM4NiA0IDIgNC4yMjM4NiAyIDQuNUMyIDQuNzc2MTQgMi4yMjM4NiA1IDIuNSA1SDEyLjVDMTIuNzc2MSA1IDEzIDQuNzc2MTQgMTMgNC41QzEzIDQuMjIzODYgMTIuNzc2MSA0IDEyLjUgNEgyLjVaTTIgNy41QzIgNy4yMjM4NiAyLjIyMzg2IDcgMi41IDdIMTIuNUMxMi43NzYxIDcgMTMgNy4yMjM4NiAxMyA3LjVDMTMgNy43NzYxNCAxMi43NzYxIDggMTIuNSA4SDIuNUMyLjIyMzg2IDggMiA3Ljc3NjE0IDIgNy41Wk0yIDEwLjVDMiAxMC4yMjM5IDIuMjIzODYgMTAgMi41IDEwSDEyLjVDMTIuNzc2MSAxMCAxMyAxMC4yMjM5IDEzIDEwLjVDMTMgMTAuNzc2MSAxMi43NzYxIDExIDEyLjUgMTFIMi41QzIuMjIzODYgMTEgMiAxMC43NzYxIDIgMTAuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHRvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDQuNUMyIDQuMjIzODYgMi4yMjM4NiA0IDIuNSA0SDEyLjVDMTIuNzc2MSA0IDEzIDQuMjIzODYgMTMgNC41QzEzIDQuNzc2MTQgMTIuNzc2MSA1IDEyLjUgNUgyLjVDMi4yMjM4NiA1IDIgNC43NzYxNCAyIDQuNVpNMiA3LjVDMiA3LjIyMzg2IDIuMjIzODYgNyAyLjUgN0g3LjVDNy43NzYxNCA3IDggNy4yMjM4NiA4IDcuNUM4IDcuNzc2MTQgNy43NzYxNCA4IDcuNSA4SDIuNUMyLjIyMzg2IDggMiA3Ljc3NjE0IDIgNy41Wk0yIDEwLjVDMiAxMC4yMjM5IDIuMjIzODYgMTAgMi41IDEwSDEwLjVDMTAuNzc2MSAxMCAxMSAxMC4yMjM5IDExIDEwLjVDMTEgMTAuNzc2MSAxMC43NzYxIDExIDEwLjUgMTFIMi41QzIuMjIzODYgMTEgMiAxMC43NzYxIDIgMTAuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG5vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDQuNUMyIDQuMjIzODYgMi4yMjM4NiA0IDIuNSA0SDEyLjVDMTIuNzc2MSA0IDEzIDQuMjIzODYgMTMgNC41QzEzIDQuNzc2MTQgMTIuNzc2MSA1IDEyLjUgNUgyLjVDMi4yMjM4NiA1IDIgNC43NzYxNCAyIDQuNVpNNyA3LjVDNyA3LjIyMzg2IDcuMjIzODYgNyA3LjUgN0gxMi41QzEyLjc3NjEgNyAxMyA3LjIyMzg2IDEzIDcuNUMxMyA3Ljc3NjE0IDEyLjc3NjEgOCAxMi41IDhINy41QzcuMjIzODYgOCA3IDcuNzc2MTQgNyA3LjVaTTQgMTAuNUM0IDEwLjIyMzkgNC4yMjM4NiAxMCA0LjUgMTBIMTIuNUMxMi43NzYxIDEwIDEzIDEwLjIyMzkgMTMgMTAuNUMxMyAxMC43NzYxIDEyLjc3NjEgMTEgMTIuNSAxMUg0LjVDNC4yMjM4NiAxMSA0IDEwLjc3NjEgNCAxMC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scm89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjM1MzYgMi4zNTM1NUMxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAxLjg0MTcxIDEzLjM1MzYgMS42NDY0NUMxMy4xNTgzIDEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEyLjY0NjQgMS42NDY0NUwxMS45MjkxIDIuMzYzODNDMTEuOTE1OSAyLjMyMjQ2IDExLjg5NyAyLjI4MzY4IDExLjg3MzIgMi4yNDg0NUMxMS43OTIzIDIuMTI4NzUgMTEuNjU1NCAyLjA1MDA1IDExLjUwMDEgMi4wNTAwNUgzLjUwMDA1QzMuMjk5MDkgMi4wNTAwNSAzLjEyODkgMi4xODE3OCAzLjA3MTExIDIuMzYzNkMzLjA1NzQzIDIuNDA2NjUgMy4wNTAwNSAyLjQ1MjQ5IDMuMDUwMDUgMi41MDAwN1Y0LjUwMDAxQzMuMDUwMDUgNC43NDg1NCAzLjI1MTUyIDQuOTUwMDEgMy41MDAwNSA0Ljk1MDAxQzMuNzQ4NTggNC45NTAwMSAzLjk1MDA1IDQuNzQ4NTQgMy45NTAwNSA0LjUwMDAxVjIuOTUwMDVINi45NTAwNlY3LjM0Mjg0TDEuNjQ2NDUgMTIuNjQ2NEMxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMy4xNTgzIDEuNjQ2NDUgMTMuMzUzNkMxLjg0MTcxIDEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDIuMzUzNTUgMTMuMzUzNkw2Ljk1MDA2IDguNzU3MDVWMTIuMDUwMUg1Ljc1NDRDNS41MDU4NyAxMi4wNTAxIDUuMzA0NCAxMi4yNTE1IDUuMzA0NCAxMi41MDAxQzUuMzA0NCAxMi43NDg2IDUuNTA1ODcgMTIuOTUwMSA1Ljc1NDQgMTIuOTUwMUg5LjI1NDRDOS41MDI5MyAxMi45NTAxIDkuNzA0NCAxMi43NDg2IDkuNzA0NCAxMi41MDAxQzkuNzA0NCAxMi4yNTE1IDkuNTAyOTMgMTIuMDUwMSA5LjI1NDQgMTIuMDUwMUg4LjA1MDA2VjcuNjU3MDVMMTMuMzUzNiAyLjM1MzU1Wk04LjA1MDA2IDYuMjQyODRMMTEuMDUwMSAzLjI0MjgzVjIuOTUwMDVIOC4wNTAwNlY2LjI0Mjg0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sb289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMy41QzUgMy4yMjM4NiA1LjIyMzg2IDMgNS41IDNIOS41QzkuNzc2MTQgMyAxMCAzLjIyMzg2IDEwIDMuNVY2SDEyLjVDMTIuNjg3MyA2IDEyLjg1ODkgNi4xMDQ2NyAxMi45NDQ2IDYuMjcxMjFDMTMuMDMwMyA2LjQzNzc0IDEzLjAxNTcgNi42MzgyMSAxMi45MDY5IDYuNzkwNjJMNy45MDY4NyAxMy43OTA2QzcuODEzMDEgMTMuOTIyIDcuNjYxNDggMTQgNy41IDE0QzcuMzM4NTMgMTQgNy4xODY5OSAxMy45MjIgNy4wOTMxNCAxMy43OTA2TDIuMDkzMTQgNi43OTA2MkMxLjk4NDI3IDYuNjM4MjEgMS45Njk3MiA2LjQzNzc0IDIuMDU1NDIgNi4yNzEyMUMyLjE0MTEyIDYuMTA0NjcgMi4zMTI3MSA2IDIuNSA2SDVWMy41Wk02IDRWNi41QzYgNi43NzYxNCA1Ljc3NjE0IDcgNS41IDdIMy40NzE2TDcuNSAxMi42Mzk4TDExLjUyODQgN0g5LjVDOS4yMjM4NiA3IDkgNi43NzYxNCA5IDYuNVY0SDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxpbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSA3LjVDMSA3LjY2MTQ4IDEuMDc3OTggNy44MTMwMSAxLjIwOTM4IDcuOTA2ODdMOC4yMDkzOCAxMi45MDY5QzguMzYxNzkgMTMuMDE1NyA4LjU2MjI2IDEzLjAzMDMgOC43Mjg3OSAxMi45NDQ2QzguODk1MzMgMTIuODU4OSA5IDEyLjY4NzMgOSAxMi41TDkgMTBMMTEuNSAxMEMxMS43NzYxIDEwIDEyIDkuNzc2MTQgMTIgOS41TDEyIDUuNUMxMiA1LjIyMzg2IDExLjc3NjEgNSAxMS41IDVMOSA1TDkgMi41QzkgMi4zMTI3MSA4Ljg5NTMzIDIuMTQxMTIgOC43Mjg3OSAyLjA1NTQyQzguNTYyMjYgMS45Njk3MiA4LjM2MTc5IDEuOTg0MjcgOC4yMDkzOCAyLjA5MzEzTDEuMjA5MzggNy4wOTMxNEMxLjA3Nzk4IDcuMTg2OTkgMSA3LjMzODUzIDEgNy41Wk04IDMuNDcxNkw4IDUuNUM4IDUuNzc2MTQgOC4yMjM4NiA2IDguNSA2TDExIDZMMTEgOUw4LjUgOUM4LjIyMzg2IDkgOCA5LjIyMzg2IDggOS41TDggMTEuNTI4NEwyLjM2MDIzIDcuNUw4IDMuNDcxNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGFvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCA3LjVDMTQgNy42NjE0OCAxMy45MjIgNy44MTMwMSAxMy43OTA2IDcuOTA2ODdMNi43OTA2MiAxMi45MDY5QzYuNjM4MjEgMTMuMDE1NyA2LjQzNzc0IDEzLjAzMDMgNi4yNzEyMSAxMi45NDQ2QzYuMTA0NjcgMTIuODU4OSA2IDEyLjY4NzMgNiAxMi41TDYgMTBMMy41IDEwQzMuMjIzODYgMTAgMyA5Ljc3NjE0IDMgOS41TDMgNS41QzMgNS4yMjM4NiAzLjIyMzg2IDUgMy41IDVMNiA1TDYgMi41QzYgMi4zMTI3MSA2LjEwNDY3IDIuMTQxMTIgNi4yNzEyMSAyLjA1NTQyQzYuNDM3NzQgMS45Njk3MiA2LjYzODIxIDEuOTg0MjcgNi43OTA2MiAyLjA5MzEzTDEzLjc5MDYgNy4wOTMxNEMxMy45MjIgNy4xODY5OSAxNCA3LjMzODUzIDE0IDcuNVpNNyAzLjQ3MTZMNyA1LjVDNyA1Ljc3NjE0IDYuNzc2MTQgNiA2LjUgNkw0IDZMNCA5TDYuNSA5QzYuNzc2MTQgOSA3IDkuMjIzODYgNyA5LjVMNyAxMS41Mjg0TDEyLjYzOTggNy41TDcgMy40NzE2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAxQzcuNjYxNDggMSA3LjgxMzAxIDEuMDc3OTggNy45MDY4NyAxLjIwOTM4TDEyLjkwNjkgOC4yMDkzOEMxMy4wMTU3IDguMzYxNzkgMTMuMDMwMyA4LjU2MjI2IDEyLjk0NDYgOC43Mjg3OUMxMi44NTg5IDguODk1MzMgMTIuNjg3MyA5IDEyLjUgOUgxMFYxMS41QzEwIDExLjc3NjEgOS43NzYxNCAxMiA5LjUgMTJINS41QzUuMjIzODYgMTIgNSAxMS43NzYxIDUgMTEuNVY5SDIuNUMyLjMxMjcxIDkgMi4xNDExMiA4Ljg5NTMzIDIuMDU1NDIgOC43Mjg3OUMxLjk2OTcyIDguNTYyMjYgMS45ODQyNyA4LjM2MTc5IDIuMDkzMTQgOC4yMDkzOEw3LjA5MzE0IDEuMjA5MzhDNy4xODY5OSAxLjA3Nzk4IDcuMzM4NTMgMSA3LjUgMVpNMy40NzE2IDhINS41QzUuNzc2MTQgOCA2IDguMjIzODYgNiA4LjVWMTFIOVY4LjVDOSA4LjIyMzg2IDkuMjIzODYgOCA5LjUgOEgxMS41Mjg0TDcuNSAyLjM2MDIzTDMuNDcxNiA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sc289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTggMC44NDk5NzZDNy4yMjM4MyAwLjg0OTk3NiA2Ljk5OTk4IDEuMDczODMgNi45OTk5OCAxLjM0OTk4VjMuNTIyMzRDNi45OTk5OCAzLjc5ODQ4IDcuMjIzODMgNC4wMjIzNCA3LjQ5OTk4IDQuMDIyMzRDNy43NzYxMiA0LjAyMjM0IDcuOTk5OTggMy43OTg0OCA3Ljk5OTk4IDMuNTIyMzRWMS44NzE4QzEwLjg4NjIgMi4xMjQ4OCAxMy4xNSA0LjU0ODA2IDEzLjE1IDcuNDk5OThDMTMuMTUgMTAuNjIwNCAxMC42MjA0IDEzLjE1IDcuNDk5OTggMTMuMTVDNC4zNzk1NyAxMy4xNSAxLjg0OTk4IDEwLjYyMDQgMS44NDk5OCA3LjQ5OTk4QzEuODQ5OTggNi4xMDYxMiAyLjM1NDA3IDQuODMxMjggMy4xOTA0OSAzLjg0NTlDMy4zNjkxOSAzLjYzNTM4IDMuMzQzMzkgMy4zMTk4NSAzLjEzMjg2IDMuMTQxMTVDMi45MjIzNCAyLjk2MjQ1IDIuNjA2ODEgMi45ODgyNSAyLjQyODExIDMuMTk4NzdDMS40NDQwNSA0LjM1ODA4IDAuODQ5OTc2IDUuODYwMjkgMC44NDk5NzYgNy40OTk5OEMwLjg0OTk3NiAxMS4xNzI3IDMuODI3MjggMTQuMTUgNy40OTk5OCAxNC4xNUMxMS4xNzI3IDE0LjE1IDE0LjE1IDExLjE3MjcgMTQuMTUgNy40OTk5OEMxNC4xNSAzLjgyNzI4IDExLjE3MjcgMC44NDk5NzYgNy40OTk5OCAwLjg0OTk3NlpNNi43NDA0OSA4LjA4MDcyTDQuMjIzNjMgNC41NzIzN0M0LjE1MjMxIDQuNDcyOTUgNC4xNjM0NiA0LjMzNjUyIDQuMjQ5OTggNC4yNUM0LjMzNjQ5IDQuMTYzNDggNC40NzI5MyA0LjE1MjMzIDQuNTcyMzQgNC4yMjM2NUw4LjA4MDY5IDYuNzQwNTFDOC41NjIyNyA3LjA4NTk5IDguNjE5MDYgNy43ODA5MSA4LjE5OTk4IDguMkM3Ljc4MDg5IDguNjE5MDkgNy4wODU5NyA4LjU2MjI5IDYuNzQwNDkgOC4wODA3MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGNvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjUgMkMzLjExOTI5IDIgMiAzLjExOTI5IDIgNC41QzIgNS44ODA3MiAzLjExOTI5IDcgNC41IDdDNS44ODA3MiA3IDcgNS44ODA3MiA3IDQuNUM3IDMuMTE5MjkgNS44ODA3MiAyIDQuNSAyWk0zIDQuNUMzIDMuNjcxNTcgMy42NzE1NyAzIDQuNSAzQzUuMzI4NDMgMyA2IDMuNjcxNTcgNiA0LjVDNiA1LjMyODQzIDUuMzI4NDMgNiA0LjUgNkMzLjY3MTU3IDYgMyA1LjMyODQzIDMgNC41Wk0xMC41IDJDOS4xMTkyOSAyIDggMy4xMTkyOSA4IDQuNUM4IDUuODgwNzIgOS4xMTkyOSA3IDEwLjUgN0MxMS44ODA3IDcgMTMgNS44ODA3MiAxMyA0LjVDMTMgMy4xMTkyOSAxMS44ODA3IDIgMTAuNSAyWk05IDQuNUM5IDMuNjcxNTcgOS42NzE1NyAzIDEwLjUgM0MxMS4zMjg0IDMgMTIgMy42NzE1NyAxMiA0LjVDMTIgNS4zMjg0MyAxMS4zMjg0IDYgMTAuNSA2QzkuNjcxNTcgNiA5IDUuMzI4NDMgOSA0LjVaTTIgMTAuNUMyIDkuMTE5MjkgMy4xMTkyOSA4IDQuNSA4QzUuODgwNzIgOCA3IDkuMTE5MjkgNyAxMC41QzcgMTEuODgwNyA1Ljg4MDcyIDEzIDQuNSAxM0MzLjExOTI5IDEzIDIgMTEuODgwNyAyIDEwLjVaTTQuNSA5QzMuNjcxNTcgOSAzIDkuNjcxNTcgMyAxMC41QzMgMTEuMzI4NCAzLjY3MTU3IDEyIDQuNSAxMkM1LjMyODQzIDEyIDYgMTEuMzI4NCA2IDEwLjVDNiA5LjY3MTU3IDUuMzI4NDMgOSA0LjUgOVpNMTAuNSA4QzkuMTE5MjkgOCA4IDkuMTE5MjkgOCAxMC41QzggMTEuODgwNyA5LjExOTI5IDEzIDEwLjUgMTNDMTEuODgwNyAxMyAxMyAxMS44ODA3IDEzIDEwLjVDMTMgOS4xMTkyOSAxMS44ODA3IDggMTAuNSA4Wk05IDEwLjVDOSA5LjY3MTU3IDkuNjcxNTcgOSAxMC41IDlDMTEuMzI4NCA5IDEyIDkuNjcxNTcgMTIgMTAuNUMxMiAxMS4zMjg0IDExLjMyODQgMTIgMTAuNSAxMkM5LjY3MTU3IDEyIDkgMTEuMzI4NCA5IDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1bz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMDUwMiAyLjc0OTg5QzEzLjA1MDIgMi40NDYxMyAxMi44MDQgMi4xOTk4OSAxMi41MDAyIDIuMTk5ODlDMTIuMTk2NSAyLjE5OTg5IDExLjk1MDIgMi40NDYxMyAxMS45NTAyIDIuNzQ5ODlWNy4yODI1QzExLjkwNDYgNy4xODgwMiAxMS44Mjk1IDcuMTA4NTEgMTEuNzMzNCA3LjA1Nzc2TDIuNzMzMzggMi4zMDc3NkMyLjU3ODQgMi4yMjU5NiAyLjM5MTkgMi4yMzEyNyAyLjI0MTgyIDIuMzIxNzZDMi4wOTE3NSAyLjQxMjI1IDIgMi41NzQ3MSAyIDIuNzQ5OTVWMTIuMjVDMiAxMi40MjUyIDIuMDkxNzUgMTIuNTg3NyAyLjI0MTgyIDEyLjY3ODFDMi4zOTE5IDEyLjc2ODYgMi41Nzg0IDEyLjc3MzkgMi43MzMzOCAxMi42OTIxTDExLjczMzQgNy45NDIxNEMxMS44Mjk1IDcuODkxMzkgMTEuOTA0NiA3LjgxMTg4IDExLjk1MDIgNy43MTc0VjEyLjI0OTlDMTEuOTUwMiAxMi41NTM2IDEyLjE5NjUgMTIuNzk5OSAxMi41MDAyIDEyLjc5OTlDMTIuODA0IDEyLjc5OTkgMTMuMDUwMiAxMi41NTM2IDEzLjA1MDIgMTIuMjQ5OVYyLjc0OTg5Wk0zIDExLjQyMDdWMy41NzkyTDEwLjQyODggNy40OTk5NUwzIDExLjQyMDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxmbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS45NDk3NiAyLjc0OTg5QzEuOTQ5NzYgMi40NDYxMyAyLjE5NiAyLjE5OTg5IDIuNDk5NzYgMi4xOTk4OUMyLjgwMzUxIDIuMTk5ODkgMy4wNDk3NiAyLjQ0NjEzIDMuMDQ5NzYgMi43NDk4OVY3LjI4MjVDMy4wOTU0IDcuMTg4MDIgMy4xNzA0NiA3LjEwODUxIDMuMjY2NjIgNy4wNTc3NkwxMi4yNjY2IDIuMzA3NzZDMTIuNDIxNiAyLjIyNTk2IDEyLjYwODEgMi4yMzEyNyAxMi43NTgyIDIuMzIxNzZDMTIuOTA4MyAyLjQxMjI1IDEzIDIuNTc0NzEgMTMgMi43NDk5NVYxMi4yNUMxMyAxMi40MjUyIDEyLjkwODMgMTIuNTg3NyAxMi43NTgyIDEyLjY3ODFDMTIuNjA4MSAxMi43Njg2IDEyLjQyMTYgMTIuNzczOSAxMi4yNjY2IDEyLjY5MjFMMy4yNjY2MiA3Ljk0MjE0QzMuMTcwNDYgNy44OTEzOSAzLjA5NTQgNy44MTE4OCAzLjA0OTc2IDcuNzE3NFYxMi4yNDk5QzMuMDQ5NzYgMTIuNTUzNiAyLjgwMzUxIDEyLjc5OTkgMi40OTk3NiAxMi43OTk5QzIuMTk2IDEyLjc5OTkgMS45NDk3NiAxMi41NTM2IDEuOTQ5NzYgMTIuMjQ5OVYyLjc0OTg5Wk00LjU3MTIyIDcuNDk5OTVMMTIgMTEuNDIwN1YzLjU3OTJMNC41NzEyMiA3LjQ5OTk1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjI1XCIsZDpcIk0wIDBIM1YzSDBWMFpNNiAzSDNWNkgwVjlIM1YxMkgwVjE1SDNWMTJINlYxNUg5VjEySDEyVjE1SDE1VjEySDEyVjlIMTVWNkgxMlYzSDE1VjBIMTJWM0g5VjBINlYzWk02IDZWM0g5VjZINlpNNiA5SDNWNkg2VjlaTTkgOVY2SDEyVjlIOVpNOSA5SDZWMTJIOVY5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNSAxQzUuMjIzODYgMSA1IDEuMjIzODYgNSAxLjVDNSAxLjc3NjE0IDUuMjIzODYgMiA1LjUgMkg5LjVDOS43NzYxNCAyIDEwIDEuNzc2MTQgMTAgMS41QzEwIDEuMjIzODYgOS43NzYxNCAxIDkuNSAxSDUuNVpNMyAzLjVDMyAzLjIyMzg2IDMuMjIzODYgMyAzLjUgM0g1SDEwSDExLjVDMTEuNzc2MSAzIDEyIDMuMjIzODYgMTIgMy41QzEyIDMuNzc2MTQgMTEuNzc2MSA0IDExLjUgNEgxMVYxMkMxMSAxMi41NTIzIDEwLjU1MjMgMTMgMTAgMTNINUM0LjQ0NzcyIDEzIDQgMTIuNTUyMyA0IDEyVjRMMy41IDRDMy4yMjM4NiA0IDMgMy43NzYxNCAzIDMuNVpNNSA0SDEwVjEySDVWNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGdvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00IDZIMTFMNy41IDEwLjVMNCA2WlwiLGZpbGw6bn0pKX0sdm89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkgNEw5IDExTDQuNSA3LjVMOSA0WlwiLGZpbGw6bn0pKX0sbW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYgMTFMNiA0TDEwLjUgNy41TDYgMTFaXCIsZmlsbDpufSkpfSxDbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNCA5SDExTDcuNSA0LjVMNCA5WlwiLGZpbGw6bn0pKX0seW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMjMzMzYgNC42OTYyOUM3LjIzMzM2IDIuOTY4ODQgOC42MzMzNSAxLjU2ODU3IDEwLjM2IDEuNTY4NTdDMTEuMzczNiAxLjU2ODU3IDEyLjE4MyAyLjA0ODA0IDEyLjcyNTQgMi43NDM4NUMxMy4zMDc5IDIuNjI0NjcgMTMuODU1NyAyLjQwOTEzIDE0LjM1MTMgMi4xMTUwOEMxNC4xNTU5IDIuNzI1OTggMTMuNzQyNCAzLjIzOTYgMTMuMjAzMyAzLjU2NDYzQzEzLjIwMzggMy41NjU2OCAxMy4yMDQyIDMuNTY2NzQgMTMuMjA0NyAzLjU2Nzc5QzEzLjczMzQgMy41MDM2MSAxNC4yMzY0IDMuMzYzMDIgMTQuNzA0OCAzLjE1NTQ2TDE0LjcwMzcgMy4xNTcxNUMxNC4zNjY3IDMuNjYxODMgMTMuOTQzMSA0LjEwNzM2IDEzLjQ1NjEgNC40NzAzNEMxMy40ODIzIDQuNjQ2NzIgMTMuNDk1NiA0LjgyNDI3IDEzLjQ5NTYgNS4wMDA3OUMxMy40OTU2IDguNjg3MSAxMC42ODczIDEyLjk3NDYgNS41MjEyMiAxMi45NzQ2QzMuOTM5MDYgMTIuOTc0NiAyLjQ2NTQ0IDEyLjUxMSAxLjIyNTA1IDExLjcxNTJDMC45OTI2MzIgMTEuNTY2MSAwLjkyNTEwOCAxMS4yNTY4IDEuMDc0MjMgMTEuMDI0NEMxLjA4NzQgMTEuMDAzOCAxLjEwMTgzIDEwLjk4NDYgMS4xMTczNCAxMC45NjY2QzEuMjA1ODIgMTAuODIwMiAxLjM3NDM4IDEwLjczMDkgMS41NTU0IDEwLjc1MjJDMi40NzA2NiAxMC44NjAxIDMuMzg1NjggMTAuNzQ4NSA0LjE5MjE5IDEwLjM5NjJDMy4zOTIyNiAxMC4wNDM0IDIuNzcxMjkgOS4zNTk3NSAyLjUwMjA0IDguNTE5NzRDMi40NTM1OSA4LjM2ODYgMi40ODgzNSA4LjIwMzExIDIuNTkzNTEgOC4wODQyMkMyLjU5NzE2IDguMDgwMSAyLjYwMDg3IDguMDc2MDYgMi42MDQ2NCA4LjA3MjFDMS45NjM5MSA3LjUwODE5IDEuNTU5NzMgNi42ODIwOCAxLjU1OTczIDUuNzYxNDNWNS43Mjc1OUMxLjU1OTczIDUuNTY4MTQgMS42NDQxMSA1LjQyMDU5IDEuNzgxNTUgNS4zMzk3NEMxLjgyNjcxIDUuMzEzMTcgMS44NzUzNyA1LjI5NTExIDEuOTI1MzIgNS4yODU1OEMxLjcwNTQ5IDQuODYxNTQgMS41ODExNiA0LjM3OTg0IDEuNTgxMTYgMy44Njk1OEMxLjU4MTE2IDMuNDAxNjUgMS41ODM4NCAyLjgxMTkyIDEuOTEzMzIgMi4yODA4MUMxLjk4NzE4IDIuMTYxNzUgMi4xMDc1OCAyLjA4OTE1IDIuMjM2NCAyLjA3MTk1QzIuNDI1ODggMi4wMTIzNyAyLjY0MDg3IDIuMDY5NjkgMi43NzQwNiAyLjIzMzAyQzMuODY1MzYgMy41NzEyNiA1LjQ0MDY2IDQuNDk1ODMgNy4yMzM2NiA0LjczOTYxTDcuMjMzMzYgNC42OTYyOVpNNS41MjEyMiAxMS45NzQ2QzQuNzMzODcgMTEuOTc0NiAzLjk3NzgxIDExLjg0MzUgMy4yNzI0OCAxMS42MDIzQzQuMTMwMTIgMTEuNDUzOCA0Ljk1MzA3IDExLjExNTkgNS42NjIxOCAxMC41NjAyQzUuODEyMTEgMTAuNDQyNyA1Ljg3MTgyIDEwLjI0MzUgNS44MTEyNiAxMC4wNjI5QzUuNzUwNyA5Ljg4MjM0IDUuNTgzIDkuNzU5NDMgNS4zOTI1NSA5Ljc1NjA3QzQuNjg5NjggOS43NDM2NiA0LjA2NzEyIDkuMzk3MTYgMy42Nzc5MyA4Ljg2ODQ1QzMuODY4MjggOC44NTMwNiA0LjA1NDI4IDguODIwMzkgNC4yMzQ0NSA4Ljc3MTY3QzQuNDM2MDMgOC43MTcxNiA0LjU3MzYzIDguNTMxMTQgNC41NjY3NCA4LjMyMjQzQzQuNTU5ODUgOC4xMTM3MiA0LjQxMDI5IDcuOTM3MTggNC4yMDU1NSA3Ljg5NjA3QzMuNDI2OTQgNy43Mzk3NyAyLjc5ODgzIDcuMTY3NjQgMi41NjE2OSA2LjQyMTc0QzIuNzYyNTUgNi40NzAyNSAyLjk3MTAyIDYuNDk5MSAzLjE4NDgyIDYuNTA2MUMzLjM4NTYzIDYuNTEyNjcgMy41NjY0NiA2LjM4NTMzIDMuNjI3OTUgNi4xOTQwNUMzLjY4OTQzIDYuMDAyNzcgMy42MTY2NiA1Ljc5MzkxIDMuNDQ5NjMgNS42ODIyNEMyLjg2NTIzIDUuMjkxNTUgMi40ODExNiA0LjYyNDY0IDIuNDgxMTYgMy44Njk1OEMyLjQ4MTE2IDMuNzAyMTMgMi40ODM1MiAzLjU1MjY4IDIuNDkzNTUgMy40MTcxOUMzLjg1MTE1IDQuNzk5MTMgNS43MDg3MyA1LjY4OTMxIDcuNzc1ODggNS43OTMzOEM3LjkzMjI1IDUuODAxMjYgOC4wODMyOCA1LjczNTQzIDguMTgzOTUgNS42MTU1M0M4LjI4NDYzIDUuNDk1NjIgOC4zMjMzMiA1LjMzNTQ4IDguMjg4NTEgNS4xODI4NEM4LjI1MjU1IDUuMDI1MTcgOC4yMzMzNiA0Ljg2Mjg0IDguMjMzMzYgNC42OTYyOUM4LjIzMzM2IDMuNTIwODUgOS4xODU5MSAyLjU2ODU3IDEwLjM2IDIuNTY4NTdDMTEuNTk0MyAyLjU2ODU3IDEyLjQ5NTYgMy43MTIwOCAxMi40OTU2IDUuMDAwNzlDMTIuNDk1NiA4LjI1NzA5IDEwLjAyMDIgMTEuOTc0NiA1LjUyMTIyIDExLjk3NDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx3bz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS4wMDAwMSAyLjc1QzUuMDAwMDEgMi40NzM4NiA0Ljc3NjE1IDIuMjUgNC41MDAwMSAyLjI1QzQuMjIzODcgMi4yNSA0LjAwMDAxIDIuNDczODYgNC4wMDAwMSAyLjc1VjguMDVDNC4wMDAwMSA5Ljk4MyA1LjU2NzAyIDExLjU1IDcuNTAwMDEgMTEuNTVDOS40MzMwMSAxMS41NSAxMSA5Ljk4MyAxMSA4LjA1VjIuNzVDMTEgMi40NzM4NiAxMC43NzYyIDIuMjUgMTAuNSAyLjI1QzEwLjIyMzkgMi4yNSAxMCAyLjQ3Mzg2IDEwIDIuNzVWOC4wNUMxMCA5LjQzMDcxIDguODgwNzIgMTAuNTUgNy41MDAwMSAxMC41NUM2LjExOTMgMTAuNTUgNS4wMDAwMSA5LjQzMDcxIDUuMDAwMDEgOC4wNVYyLjc1Wk0zLjQ5OTk4IDEzLjEwMDFDMy4yNzkwNiAxMy4xMDAxIDMuMDk5OTggMTMuMjc5MSAzLjA5OTk4IDEzLjUwMDFDMy4wOTk5OCAxMy43MjEgMy4yNzkwNiAxMy45MDAxIDMuNDk5OTggMTMuOTAwMUgxMS41QzExLjcyMDkgMTMuOTAwMSAxMS45IDEzLjcyMSAxMS45IDEzLjUwMDFDMTEuOSAxMy4yNzkxIDExLjcyMDkgMTMuMTAwMSAxMS41IDEzLjEwMDFIMy40OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjkwMzIxIDcuMjk2NzdDMS45MDMyMSAxMC4zNDEgNC4xMTA0MSAxMi40MTQ3IDYuNTg4OTMgMTIuODQzOUM2Ljg3MjU1IDEyLjg5MyA3LjA2MjY2IDEzLjE2MjcgNy4wMTM1NSAxMy40NDY0QzYuOTY0NDQgMTMuNzMgNi42OTQ3MSAxMy45MjAxIDYuNDExMDkgMTMuODcxQzMuNDk5NDIgMTMuMzY2OCAwLjg2MDg0IDEwLjkxMjcgMC44NjA4NCA3LjI5Njc3QzAuODYwODM5IDUuNzYwMDkgMS41NTk5NiA0LjU1MjQ1IDIuMzc2MzkgMy42MzM3N0MyLjk2MTI0IDIuOTc1NjggMy42MzAzNCAyLjQ0MTM1IDQuMTY4NDYgMi4wMzIwMkwyLjUzMjA1IDIuMDMyMDJDMi4yNTU5MSAyLjAzMjAyIDIuMDMyMDUgMS44MDgxNiAyLjAzMjA1IDEuNTMyMDJDMi4wMzIwNSAxLjI1NTg4IDIuMjU1OTEgMS4wMzIwMiAyLjUzMjA1IDEuMDMyMDJMNS41MzIwNSAxLjAzMjAyQzUuODA4MTkgMS4wMzIwMiA2LjAzMjA1IDEuMjU1ODggNi4wMzIwNSAxLjUzMjAyTDYuMDMyMDUgNC41MzIwMkM2LjAzMjA1IDQuODA4MTYgNS44MDgxOSA1LjAzMjAyIDUuNTMyMDUgNS4wMzIwMkM1LjI1NTkxIDUuMDMyMDIgNS4wMzIwNSA0LjgwODE2IDUuMDMyMDUgNC41MzIwMkw1LjAzMjA1IDIuNjg2NDVMNS4wMzA1NCAyLjY4NzU5TDUuMDMwNDUgMi42ODc2Nkw1LjAzMDQ0IDIuNjg3NjdMNS4wMzA0MyAyLjY4NzY3QzQuNDU4OTYgMy4xMTg2OCAzLjc2MDU5IDMuNjQ1MzggMy4xNTU1NCA0LjMyNjJDMi40NDEwMiA1LjEzMDIxIDEuOTAzMjEgNi4xMDE1NCAxLjkwMzIxIDcuMjk2NzdaTTEzLjAxMDkgNy43MDMyMUMxMy4wMTA5IDQuNjkxMTUgMTAuODUwNSAyLjYyOTYgOC40MDM4NCAyLjE3MDI5QzguMTIwOTMgMi4xMTcxOCA3LjkzNDY1IDEuODQ0NzkgNy45ODc3NiAxLjU2MTg4QzguMDQwODcgMS4yNzg5OCA4LjMxMzI2IDEuMDkyNyA4LjU5NjE2IDEuMTQ1ODFDMTEuNDcwNCAxLjY4NTQxIDE0LjA1MzIgNC4xMjYwNSAxNC4wNTMyIDcuNzAzMjFDMTQuMDUzMiA5LjIzOTg4IDEzLjM1NDEgMTAuNDQ3NSAxMi41Mzc3IDExLjM2NjJDMTEuOTUyOCAxMi4wMjQzIDExLjI4MzcgMTIuNTU4NiAxMC43NDU2IDEyLjk2OEwxMi4zODIxIDEyLjk2OEMxMi42NTgyIDEyLjk2OCAxMi44ODIxIDEzLjE5MTggMTIuODgyMSAxMy40NjhDMTIuODgyMSAxMy43NDQxIDEyLjY1ODIgMTMuOTY4IDEyLjM4MjEgMTMuOTY4TDkuMzgyMDUgMTMuOTY4QzkuMTA1OTEgMTMuOTY4IDguODgyMDUgMTMuNzQ0MSA4Ljg4MjA1IDEzLjQ2OEw4Ljg4MjA1IDEwLjQ2OEM4Ljg4MjA1IDEwLjE5MTggOS4xMDU5MSA5Ljk2Nzk2IDkuMzgyMDUgOS45Njc5NkM5LjY1ODE5IDkuOTY3OTYgOS44ODIwNSAxMC4xOTE4IDkuODgyMDUgMTAuNDY4TDkuODgyMDUgMTIuMzEzNUw5Ljg4MzYyIDEyLjMxMjNDMTAuNDU1MSAxMS44ODEzIDExLjE1MzUgMTEuMzU0NiAxMS43NTg1IDEwLjY3MzhDMTIuNDczMSA5Ljg2OTc2IDEzLjAxMDkgOC44OTg0NCAxMy4wMTA5IDcuNzAzMjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4bz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy44MTgyNSAxLjE4MTg4QzcuNjQyNTEgMS4wMDYxNSA3LjM1NzU5IDEuMDA2MTUgNy4xODE4NSAxLjE4MTg4TDQuMTgxODUgNC4xODE4OEM0LjAwNjExIDQuMzU3NjIgNC4wMDYxMSA0LjY0MjU0IDQuMTgxODUgNC44MTgyOEM0LjM1NzU5IDQuOTk0MDEgNC42NDI1MSA0Ljk5NDAxIDQuODE4MjUgNC44MTgyOEw3LjA1MDA1IDIuNTg2NDhWOS40OTk5NkM3LjA1MDA1IDkuNzQ4NDkgNy4yNTE1MiA5Ljk0OTk2IDcuNTAwMDUgOS45NDk5NkM3Ljc0ODU4IDkuOTQ5OTYgNy45NTAwNSA5Ljc0ODQ5IDcuOTUwMDUgOS40OTk5NlYyLjU4NjQ4TDEwLjE4MTkgNC44MTgyOEMxMC4zNTc2IDQuOTk0MDEgMTAuNjQyNSA0Ljk5NDAxIDEwLjgxODIgNC44MTgyOEMxMC45OTQgNC42NDI1NCAxMC45OTQgNC4zNTc2MiAxMC44MTgyIDQuMTgxODhMNy44MTgyNSAxLjE4MTg4Wk0yLjUgOS45OTk5N0MyLjc3NjE0IDkuOTk5OTcgMyAxMC4yMjM4IDMgMTAuNVYxMkMzIDEyLjU1MzggMy40NDU2NSAxMyAzLjk5NjM1IDEzSDExLjAwMTJDMTEuNTUyOSAxMyAxMiAxMi41NTI4IDEyIDEyVjEwLjVDMTIgMTAuMjIzOCAxMi4yMjM5IDkuOTk5OTcgMTIuNSA5Ljk5OTk3QzEyLjc3NjEgOS45OTk5NyAxMyAxMC4yMjM4IDEzIDEwLjVWMTJDMTMgMTMuMTA0IDEyLjEwNjIgMTQgMTEuMDAxMiAxNEgzLjk5NjM1QzIuODkwMTkgMTQgMiAxMy4xMDMgMiAxMlYxMC41QzIgMTAuMjIzOCAyLjIyMzg2IDkuOTk5OTcgMi41IDkuOTk5OTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxfbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy40OTk4OEMwLjg3NzA3NSAzLjg0MjE5IDMuODQyMjIgMC44NzcwNDUgNy40OTk5MSAwLjg3NzA0NUMxMS4xNTc2IDAuODc3MDQ1IDE0LjEyMjcgMy44NDIxOSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyAxMS4xNTc1IDExLjE1NzYgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMy44NDIyMiAxNC4xMjI3IDAuODc3MDc1IDExLjE1NzUgMC44NzcwNzUgNy40OTk4OFpNNy40OTk5MSAxLjgyNzA0QzQuMzY2ODkgMS44MjcwNCAxLjgyNzA4IDQuMzY2ODYgMS44MjcwOCA3LjQ5OTg4QzEuODI3MDggMTAuNjMyOSA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzEwLjYzMjkgMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNC4zNjY4NiAxMC42MzI5IDEuODI3MDQgNy40OTk5MSAxLjgyNzA0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sT289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5ODUgMC44NzcwNDVDMy44NDIxNiAwLjg3NzA0NSAwLjg3NzAxNCAzLjg0MjE5IDAuODc3MDE0IDcuNDk5ODhDMC44NzcwMTQgOS4xNDg4IDEuNDc5NjMgMTAuNjU3IDIuNDc2NjUgMTEuODE2MkwxLjY0NjQzIDEyLjY0NjRDMS40NTExNyAxMi44NDE3IDEuNDUxMTcgMTMuMTU4MyAxLjY0NjQzIDEzLjM1MzVDMS44NDE3IDEzLjU0ODggMi4xNTgyOCAxMy41NDg4IDIuMzUzNTQgMTMuMzUzNUwzLjE4Mzc3IDEyLjUyMzNDNC4zNDI5NiAxMy41MjAyIDUuODUxMDQgMTQuMTIyNyA3LjQ5OTg1IDE0LjEyMjdDMTEuMTU3NSAxNC4xMjI3IDE0LjEyMjcgMTEuMTU3NSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyA1Ljg1MTA3IDEzLjUyMDIgNC4zNDI5OSAxMi41MjMzIDMuMTgzOEwxMy4zNTM1IDIuMzUzNTRDMTMuNTQ4OCAyLjE1ODI3IDEzLjU0ODggMS44NDE2OSAxMy4zNTM1IDEuNjQ2NDNDMTMuMTU4MyAxLjQ1MTE3IDEyLjg0MTcgMS40NTExNyAxMi42NDY0IDEuNjQ2NDNMMTEuODE2MiAyLjQ3NjY4QzEwLjY1NyAxLjQ3OTY2IDkuMTQ4NzcgMC44NzcwNDUgNy40OTk4NSAwLjg3NzA0NVpNMTEuMTQyMiAzLjE1MDY2QzEwLjE1NjcgMi4zMjQ0OSA4Ljg4NjM5IDEuODI3MDQgNy40OTk4NSAxLjgyNzA0QzQuMzY2ODMgMS44MjcwNCAxLjgyNzAxIDQuMzY2ODYgMS44MjcwMSA3LjQ5OTg4QzEuODI3MDEgOC44ODY0MiAyLjMyNDQ2IDEwLjE1NjggMy4xNTA2MyAxMS4xNDIyTDExLjE0MjIgMy4xNTA2NlpNMy44NTc3NiAxMS44NDkzQzQuODQzMTcgMTIuNjc1MyA2LjExMzQzIDEzLjE3MjcgNy40OTk4NSAxMy4xNzI3QzEwLjYzMjggMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNi4xMTM0NiAxMi42NzUzIDQuODQzMiAxMS44NDkzIDMuODU3NzlMMy44NTc3NiAxMS44NDkzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTggMUw2LjkyMzIxIDIuMDAzMDdMMS4xNzQ5OCAxMkwwLjU5OTk3NiAxM0gxLjc1MzVIMTMuMjQ2NEgxNC40TDEzLjgyNSAxMkw4LjA3Njc0IDIuMDAzMDdMNy40OTk5OCAxWk03LjQ5OTk4IDMuMDA2MTNMMi4zMjg1IDEySDEyLjY3MTRMNy40OTk5OCAzLjAwNjEzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNzY0NDcgMy4xMjE5OUM1LjYzMTUxIDMuMDQ4NTkgNi41NjA4MiAzIDcuNSAzQzguNDM5MTggMyA5LjM2ODQ5IDMuMDQ4NTkgMTAuMjM1NSAzLjEyMTk5QzExLjI3OTYgMy4yMTAzNyAxMS45NTUzIDMuMjcwMDggMTIuNDcyIDMuMzkyMDNDMTIuOTQyNSAzLjUwMzA0IDEzLjIwNDggMy42NDk3NiAxMy40MzA2IDMuODgwODZDMTMuNDU1MyAzLjkwNjE4IDEzLjQ5MDIgMy45NDQxNCAxMy41MTMzIDMuOTcwOTJDMTMuNzEyNiA0LjIwMTQ5IDEzLjg0MzUgNC40ODg3IDEzLjkxOCA1LjAzMjgzQzEzLjk5NzggNS42MTU2IDE0IDYuMzc2NDQgMTQgNy41MjQ5M0MxNCA4LjY2MDI2IDEzLjk5NzggOS40MTAxOSAxMy45MTgxIDkuOTg1MzhDMTMuODQzOSAxMC41MjA2IDEzLjcxMzcgMTAuODA2MSAxMy41MTI1IDExLjAzODdDMTMuNDg5NiAxMS4wNjUxIDEzLjQ1NDEgMTEuMTAzOCAxMy40Mjk2IDExLjEyODdDMTMuMjAwOSAxMS4zNjI1IDEyLjk0MDYgMTEuNTA3NiAxMi40ODE4IDExLjYxNjRDMTEuOTc1MiAxMS43MzY1IDExLjMxNDMgMTEuNzk0MiAxMC4yODc4IDExLjg3OTdDOS40MTk0OCAxMS45NTIxIDguNDc1NjYgMTIgNy41IDEyQzYuNTI0MzQgMTIgNS41ODA1MiAxMS45NTIxIDQuNzEyMiAxMS44Nzk3QzMuNjg1NzIgMTEuNzk0MiAzLjAyNDc3IDExLjczNjUgMi41MTgxNiAxMS42MTY0QzIuMDU5MzYgMTEuNTA3NiAxLjc5OTEgMTEuMzYyNSAxLjU3MDM3IDExLjEyODdDMS41NDU5MyAxMS4xMDM4IDEuNTEwMzUgMTEuMDY1MSAxLjQ4NzQ4IDExLjAzODdDMS4yODYyOCAxMC44MDYxIDEuMTU2MTIgMTAuNTIwNiAxLjA4MTkzIDkuOTg1MzhDMS4wMDIyMSA5LjQxMDE5IDEgOC42NjAyNiAxIDcuNTI0OTNDMSA2LjM3NjQ0IDEuMDAyMTYgNS42MTU2IDEuMDgyIDUuMDMyODNDMS4xNTY1NCA0LjQ4ODcgMS4yODc0NCA0LjIwMTQ5IDEuNDg2NjYgMy45NzA5MkMxLjUwOTggMy45NDQxNCAxLjU0NDY4IDMuOTA2MTggMS41Njk0MiAzLjg4MDg2QzEuNzk1MiAzLjY0OTc2IDIuMDU3NTIgMy41MDMwNCAyLjUyNzk2IDMuMzkyMDNDMy4wNDQ3MyAzLjI3MDA4IDMuNzIwNCAzLjIxMDM3IDQuNzY0NDcgMy4xMjE5OVpNMCA3LjUyNDkzQzAgNS4yODI5NiAwIDQuMTYxOTggMC43Mjk5ODUgMy4zMTcxM0MwLjc2NjQ1NyAzLjI3NDkxIDAuODE1MTM5IDMuMjIxOTQgMC44NTQxMjMgMy4xODIwNEMxLjYzNDM5IDIuMzgzMzkgMi42NDk2MyAyLjI5NzQ0IDQuNjgwMTIgMi4xMjU1NUM1LjU2OTIzIDIuMDUwMjggNi41MjcyNCAyIDcuNSAyQzguNDcyNzYgMiA5LjQzMDc3IDIuMDUwMjggMTAuMzE5OSAyLjEyNTU1QzEyLjM1MDQgMi4yOTc0NCAxMy4zNjU2IDIuMzgzMzkgMTQuMTQ1OSAzLjE4MjA0QzE0LjE4NDkgMy4yMjE5NCAxNC4yMzM1IDMuMjc0OTEgMTQuMjcgMy4zMTcxM0MxNSA0LjE2MTk4IDE1IDUuMjgyOTYgMTUgNy41MjQ5M0MxNSA5Ljc0MDEyIDE1IDEwLjg0NzcgMTQuMjY4OCAxMS42OTI5QzE0LjIzMjYgMTEuNzM0OCAxNC4xODMyIDExLjc4ODUgMTQuMTQ0NCAxMS44MjgxQzEzLjM2MjkgMTIuNjI2OSAxMi4zNjU1IDEyLjcxIDEwLjM3MDkgMTIuODc2M0M5LjQ3OTcxIDEyLjk1MDUgOC41MDc4MiAxMyA3LjUgMTNDNi40OTIxOCAxMyA1LjUyMDI4IDEyLjk1MDUgNC42MjkxNSAxMi44NzYzQzIuNjM0NDYgMTIuNzEgMS42MzcxMiAxMi42MjY5IDAuODU1NTU4IDExLjgyODFDMC44MTY4NDQgMTEuNzg4NSAwLjc2NzQ0MiAxMS43MzQ4IDAuNzMxMjIxIDExLjY5MjlDMCAxMC44NDc3IDAgOS43NDAxMiAwIDcuNTI0OTNaTTUuMjUgNS4zODI2NEM1LjI1IDUuMjAyMjUgNS40MzUyMiA1LjA4MTI0IDUuNjAwNDEgNS4xNTM2OUwxMC40MjggNy4yNzEwNUMxMC42Mjc0IDcuMzU4NTMgMTAuNjI3NCA3LjY0MTQ3IDEwLjQyOCA3LjcyODk1TDUuNjAwNDEgOS44NDYzMUM1LjQzNTIyIDkuOTE4NzYgNS4yNSA5Ljc5Nzc1IDUuMjUgOS42MTczNlY1LjM4MjY0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sU289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcgMkgxLjVDMS4yMjM4NiAyIDEgMi4yMjM4NiAxIDIuNVY3SDdWMlpNOCAyVjdIMTRWMi41QzE0IDIuMjIzODYgMTMuNzc2MSAyIDEzLjUgMkg4Wk03IDhIMVYxMi41QzEgMTIuNzc2MSAxLjIyMzg2IDEzIDEuNSAxM0g3VjhaTTggMTNWOEgxNFYxMi41QzE0IDEyLjc3NjEgMTMuNzc2MSAxMyAxMy41IDEzSDhaTTEuNSAxQzAuNjcxNTczIDEgMCAxLjY3MTU3IDAgMi41VjEyLjVDMCAxMy4zMjg0IDAuNjcxNTczIDE0IDEuNSAxNEgxMy41QzE0LjMyODQgMTQgMTUgMTMuMzI4NCAxNSAxMi41VjIuNUMxNSAxLjY3MTU3IDE0LjMyODQgMSAxMy41IDFIMS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sam89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSAySDEzLjVDMTMuNzc2MSAyIDE0IDIuMjIzODYgMTQgMi41VjdIMVYyLjVDMSAyLjIyMzg2IDEuMjIzODYgMiAxLjUgMlpNMSA4VjEyLjVDMSAxMi43NzYxIDEuMjIzODYgMTMgMS41IDEzSDEzLjVDMTMuNzc2MSAxMyAxNCAxMi43NzYxIDE0IDEyLjVWOEgxWk0wIDIuNUMwIDEuNjcxNTcgMC42NzE1NzMgMSAxLjUgMUgxMy41QzE0LjMyODQgMSAxNSAxLjY3MTU3IDE1IDIuNVYxMi41QzE1IDEzLjMyODQgMTQuMzI4NCAxNCAxMy41IDE0SDEuNUMwLjY3MTU3MyAxNCAwIDEzLjMyODQgMCAxMi41VjIuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE1vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCAyLjU4NzExTDEuODUxNjMgMTNIMTMuNUMxMy43NzYxIDEzIDE0IDEyLjc3NjEgMTQgMTIuNVYyLjU4NzExWk0wLjc2Mjg3OSAxMy44MDY3TDAuODI1Mzk2IDEzLjg3OTZMMC44NTQ3MTcgMTMuODU0NUMxLjA1MDE3IDEzLjk0NzggMS4yNjg5OSAxNCAxLjUgMTRIMTMuNUMxNC4zMjg0IDE0IDE1IDEzLjMyODQgMTUgMTIuNVYyLjVDMTUgMS45Mzk0OSAxNC42OTI2IDEuNDUwNzggMTQuMjM3MSAxLjE5MzMxTDE0LjE3NDYgMS4xMjAzN0wxNC4xNDUzIDEuMTQ1NUMxMy45NDk4IDEuMDUyMjIgMTMuNzMxIDEgMTMuNSAxSDEuNUMwLjY3MTU3MyAxIDAgMS42NzE1NyAwIDIuNVYxMi41QzAgMTMuMDYwNSAwLjMwNzQzNSAxMy41NDkyIDAuNzYyODc5IDEzLjgwNjdaTTEgMTIuNDEyOUwxMy4xNDg0IDJIMS41QzEuMjIzODYgMiAxIDIuMjIzODYgMSAyLjVWMTIuNDEyOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGtvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04IDJIMTMuNUMxMy43NzYxIDIgMTQgMi4yMjM4NiAxNCAyLjVWMTIuNUMxNCAxMi43NzYxIDEzLjc3NjEgMTMgMTMuNSAxM0g4VjJaTTcgMkgxLjVDMS4yMjM4NiAyIDEgMi4yMjM4NiAxIDIuNVYxMi41QzEgMTIuNzc2MSAxLjIyMzg2IDEzIDEuNSAxM0g3VjJaTTAgMi41QzAgMS42NzE1NyAwLjY3MTU3MyAxIDEuNSAxSDEzLjVDMTQuMzI4NCAxIDE1IDEuNjcxNTcgMTUgMi41VjEyLjVDMTUgMTMuMzI4NCAxNC4zMjg0IDE0IDEzLjUgMTRIMS41QzAuNjcxNTczIDE0IDAgMTMuMzI4NCAwIDEyLjVWMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUm89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuODE4MTIgNC42ODE2MUM0Ljk5Mzg2IDQuODU3MzQgNC45OTM4NiA1LjE0MjI3IDQuODE4MTIgNS4zMThMMy4wODYzMiA3LjA0OThIMTEuOTEzNUwxMC4xODE3IDUuMzE4QzEwLjAwNiA1LjE0MjI3IDEwLjAwNiA0Ljg1NzM0IDEwLjE4MTcgNC42ODE2MUMxMC4zNTc1IDQuNTA1ODcgMTAuNjQyNCA0LjUwNTg3IDEwLjgxODEgNC42ODE2MUwxMy4zMTgxIDcuMTgxNjFDMTMuNDkzOSA3LjM1NzM0IDEzLjQ5MzkgNy42NDIyNyAxMy4zMTgxIDcuODE4TDEwLjgxODEgMTAuMzE4QzEwLjY0MjQgMTAuNDkzNyAxMC4zNTc1IDEwLjQ5MzcgMTAuMTgxNyAxMC4zMThDMTAuMDA2IDEwLjE0MjMgMTAuMDA2IDkuODU3MzQgMTAuMTgxNyA5LjY4MTYxTDExLjkxMzUgNy45NDk4SDMuMDg2MzJMNC44MTgxMiA5LjY4MTYxQzQuOTkzODYgOS44NTczNCA0Ljk5Mzg2IDEwLjE0MjMgNC44MTgxMiAxMC4zMThDNC42NDIzOSAxMC40OTM3IDQuMzU3NDYgMTAuNDkzNyA0LjE4MTczIDEwLjMxOEwxLjY4MTczIDcuODE4QzEuNTA1OTkgNy42NDIyNyAxLjUwNTk5IDcuMzU3MzQgMS42ODE3MyA3LjE4MTYxTDQuMTgxNzMgNC42ODE2MUM0LjM1NzQ2IDQuNTA1ODcgNC42NDIzOSA0LjUwNTg3IDQuODE4MTIgNC42ODE2MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFBvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMCA2LjVDMTAgOC40MzMgOC40MzMgMTAgNi41IDEwQzQuNTY3IDEwIDMgOC40MzMgMyA2LjVDMyA0LjU2NyA0LjU2NyAzIDYuNSAzQzguNDMzIDMgMTAgNC41NjcgMTAgNi41Wk05LjMwODg0IDEwLjAxNTlDOC41MzkwMSAxMC42MzE4IDcuNTYyNTEgMTEgNi41IDExQzQuMDE0NzIgMTEgMiA4Ljk4NTI4IDIgNi41QzIgNC4wMTQ3MiA0LjAxNDcyIDIgNi41IDJDOC45ODUyOCAyIDExIDQuMDE0NzIgMTEgNi41QzExIDcuNTYyNTEgMTAuNjMxOCA4LjUzOTAxIDEwLjAxNTkgOS4zMDg4NEwxMi44NTM2IDEyLjE0NjRDMTMuMDQ4OCAxMi4zNDE3IDEzLjA0ODggMTIuNjU4MyAxMi44NTM2IDEyLjg1MzZDMTIuNjU4MyAxMy4wNDg4IDEyLjM0MTcgMTMuMDQ4OCAxMi4xNDY0IDEyLjg1MzZMOS4zMDg4NCAxMC4wMTU5Wk00LjI1IDYuNUM0LjI1IDYuMjIzODYgNC40NzM4NiA2IDQuNzUgNkg2VjQuNzVDNiA0LjQ3Mzg2IDYuMjIzODYgNC4yNSA2LjUgNC4yNUM2Ljc3NjE0IDQuMjUgNyA0LjQ3Mzg2IDcgNC43NVY2SDguMjVDOC41MjYxNCA2IDguNzUgNi4yMjM4NiA4Ljc1IDYuNUM4Ljc1IDYuNzc2MTQgOC41MjYxNCA3IDguMjUgN0g3VjguMjVDNyA4LjUyNjE0IDYuNzc2MTQgOC43NSA2LjUgOC43NUM2LjIyMzg2IDguNzUgNiA4LjUyNjE0IDYgOC4yNVY3SDQuNzVDNC40NzM4NiA3IDQuMjUgNi43NzYxNCA0LjI1IDYuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LElvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02LjUgMTBDOC40MzMgMTAgMTAgOC40MzMgMTAgNi41QzEwIDQuNTY3IDguNDMzIDMgNi41IDNDNC41NjcgMyAzIDQuNTY3IDMgNi41QzMgOC40MzMgNC41NjcgMTAgNi41IDEwWk02LjUgMTFDNy41NjI1MSAxMSA4LjUzOTAxIDEwLjYzMTggOS4zMDg4NCAxMC4wMTU5TDEyLjE0NjQgMTIuODUzNkMxMi4zNDE3IDEzLjA0ODggMTIuNjU4MyAxMy4wNDg4IDEyLjg1MzYgMTIuODUzNkMxMy4wNDg4IDEyLjY1ODMgMTMuMDQ4OCAxMi4zNDE3IDEyLjg1MzYgMTIuMTQ2NEwxMC4wMTU5IDkuMzA4ODRDMTAuNjMxOCA4LjUzOTAxIDExIDcuNTYyNTEgMTEgNi41QzExIDQuMDE0NzIgOC45ODUyOCAyIDYuNSAyQzQuMDE0NzIgMiAyIDQuMDE0NzIgMiA2LjVDMiA4Ljk4NTI4IDQuMDE0NzIgMTEgNi41IDExWk00Ljc1IDZDNC40NzM4NiA2IDQuMjUgNi4yMjM4NiA0LjI1IDYuNUM0LjI1IDYuNzc2MTQgNC40NzM4NiA3IDQuNzUgN0g4LjI1QzguNTI2MTQgNyA4Ljc1IDYuNzc2MTQgOC43NSA2LjVDOC43NSA2LjIyMzg2IDguNTI2MTQgNiA4LjI1IDZINC43NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9fSw1Mjk5OihlLHQsbik9PntuLnIodCksbi5kKHQse2RlZmF1bHQ6KCk9Pmx9KTt2YXIgcj1uKDgwODEpLG89bi5uKHIpLGk9bigzNjQ1KSxhPW4ubihpKSgpKG8oKSk7YS5wdXNoKFtlLmlkLFwiLnJlYWN0LWNhbGVuZGFyIHtcXG4gIHdpZHRoOiAzNTBweDtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIGJhY2tncm91bmQ6IHdoaXRlO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2EwYTA5NjtcXG4gIGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xcbiAgbGluZS1oZWlnaHQ6IDEuMTI1ZW07XFxufVxcbi5yZWFjdC1jYWxlbmRhci0tZG91YmxlVmlldyB7XFxuICB3aWR0aDogNzAwcHg7XFxufVxcbi5yZWFjdC1jYWxlbmRhci0tZG91YmxlVmlldyAucmVhY3QtY2FsZW5kYXJfX3ZpZXdDb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG1hcmdpbjogLTAuNWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXItLWRvdWJsZVZpZXcgLnJlYWN0LWNhbGVuZGFyX192aWV3Q29udGFpbmVyID4gKiB7XFxuICB3aWR0aDogNTAlO1xcbiAgbWFyZ2luOiAwLjVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyLFxcbi5yZWFjdC1jYWxlbmRhciAqLFxcbi5yZWFjdC1jYWxlbmRhciAqOmJlZm9yZSxcXG4ucmVhY3QtY2FsZW5kYXIgKjphZnRlciB7XFxuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXIgYnV0dG9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGJvcmRlcjogMDtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcbi5yZWFjdC1jYWxlbmRhciBidXR0b246ZW5hYmxlZDpob3ZlciB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiA0NHB4O1xcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24gYnV0dG9uIHtcXG4gIG1pbi13aWR0aDogNDRweDtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiBidXR0b246ZGlzYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uIGJ1dHRvbjplbmFibGVkOmhvdmVyLFxcbi5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiBidXR0b246ZW5hYmxlZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtkYXlzIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG4gIGZvbnQtc2l6ZTogMC43NWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtkYXlzX193ZWVrZGF5IHtcXG4gIHBhZGRpbmc6IDAuNWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtOdW1iZXJzIC5yZWFjdC1jYWxlbmRhcl9fdGlsZSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgZm9udC1zaXplOiAwLjc1ZW07XFxuICBmb250LXdlaWdodDogYm9sZDtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X19kYXlzX19kYXktLXdlZWtlbmQge1xcbiAgY29sb3I6ICNkMTAwMDA7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbW9udGgtdmlld19fZGF5c19fZGF5LS1uZWlnaGJvcmluZ01vbnRoIHtcXG4gIGNvbG9yOiAjNzU3NTc1O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3llYXItdmlldyAucmVhY3QtY2FsZW5kYXJfX3RpbGUsXFxuLnJlYWN0LWNhbGVuZGFyX19kZWNhZGUtdmlldyAucmVhY3QtY2FsZW5kYXJfX3RpbGUsXFxuLnJlYWN0LWNhbGVuZGFyX19jZW50dXJ5LXZpZXcgLnJlYWN0LWNhbGVuZGFyX190aWxlIHtcXG4gIHBhZGRpbmc6IDJlbSAwLjVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlIHtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDEwcHggNi42NjY3cHg7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgbGluZS1oZWlnaHQ6IDE2cHg7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZTpkaXNhYmxlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGU6ZW5hYmxlZDpob3ZlcixcXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGU6ZW5hYmxlZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLW5vdyB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmZjc2O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLW5vdzplbmFibGVkOmhvdmVyLFxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tbm93OmVuYWJsZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZDogI2ZmZmZhOTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1oYXNBY3RpdmUge1xcbiAgYmFja2dyb3VuZDogIzc2YmFmZjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1oYXNBY3RpdmU6ZW5hYmxlZDpob3ZlcixcXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLWhhc0FjdGl2ZTplbmFibGVkOmZvY3VzIHtcXG4gIGJhY2tncm91bmQ6ICNhOWQ0ZmY7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tYWN0aXZlIHtcXG4gIGJhY2tncm91bmQ6ICMwMDZlZGM7XFxuICBjb2xvcjogd2hpdGU7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tYWN0aXZlOmVuYWJsZWQ6aG92ZXIsXFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1hY3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kOiAjMTA4N2ZmO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXItLXNlbGVjdFJhbmdlIC5yZWFjdC1jYWxlbmRhcl9fdGlsZS0taG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcXG59XFxuXCIsXCJcIl0pO2NvbnN0IGw9YX0sMzY0NTplPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKChmdW5jdGlvbih0KXt2YXIgbj1cIlwiLHI9dm9pZCAwIT09dFs1XTtyZXR1cm4gdFs0XSYmKG4rPVwiQHN1cHBvcnRzIChcIi5jb25jYXQodFs0XSxcIikge1wiKSksdFsyXSYmKG4rPVwiQG1lZGlhIFwiLmNvbmNhdCh0WzJdLFwiIHtcIikpLHImJihuKz1cIkBsYXllclwiLmNvbmNhdCh0WzVdLmxlbmd0aD4wP1wiIFwiLmNvbmNhdCh0WzVdKTpcIlwiLFwiIHtcIikpLG4rPWUodCksciYmKG4rPVwifVwiKSx0WzJdJiYobis9XCJ9XCIpLHRbNF0mJihuKz1cIn1cIiksbn0pKS5qb2luKFwiXCIpfSx0Lmk9ZnVuY3Rpb24oZSxuLHIsbyxpKXtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W1tudWxsLGUsdm9pZCAwXV0pO3ZhciBhPXt9O2lmKHIpZm9yKHZhciBsPTA7bDx0aGlzLmxlbmd0aDtsKyspe3ZhciBzPXRoaXNbbF1bMF07bnVsbCE9cyYmKGFbc109ITApfWZvcih2YXIgYz0wO2M8ZS5sZW5ndGg7YysrKXt2YXIgdT1bXS5jb25jYXQoZVtjXSk7ciYmYVt1WzBdXXx8KHZvaWQgMCE9PWkmJih2b2lkIDA9PT11WzVdfHwodVsxXT1cIkBsYXllclwiLmNvbmNhdCh1WzVdLmxlbmd0aD4wP1wiIFwiLmNvbmNhdCh1WzVdKTpcIlwiLFwiIHtcIikuY29uY2F0KHVbMV0sXCJ9XCIpKSx1WzVdPWkpLG4mJih1WzJdPyh1WzFdPVwiQG1lZGlhIFwiLmNvbmNhdCh1WzJdLFwiIHtcIikuY29uY2F0KHVbMV0sXCJ9XCIpLHVbMl09bik6dVsyXT1uKSxvJiYodVs0XT8odVsxXT1cIkBzdXBwb3J0cyAoXCIuY29uY2F0KHVbNF0sXCIpIHtcIikuY29uY2F0KHVbMV0sXCJ9XCIpLHVbNF09byk6dVs0XT1cIlwiLmNvbmNhdChvKSksdC5wdXNoKHUpKX19LHR9fSw4MDgxOmU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV19fSw0NDgzOihlLHQsbik9PntmdW5jdGlvbiByKGUpe3JldHVybiByPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LHIoZSl9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBvPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbyhlLHQpfWZ1bmN0aW9uIGkoZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIGV9ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sYShlKX1mdW5jdGlvbiBsKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIiE9PXIoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1uKXt2YXIgbz1uLmNhbGwoZSxcInN0cmluZ1wiKTtpZihcIm9iamVjdFwiIT09cihvKSlyZXR1cm4gbzt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIil9cmV0dXJuIFN0cmluZyhlKX0oZSk7cmV0dXJuXCJzeW1ib2xcIj09PXIodCk/dDpTdHJpbmcodCl9dmFyIHM9big2Njg5KSxjPW4oNTY5NyksdT1uKDUzMDMpLmNyZWF0ZUZvY3VzVHJhcCxmPW4oODM4OCkuaXNGb2N1c2FibGUsZD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksdCYmbyhlLHQpfShwLGUpO3ZhciB0LG4sYyx1LGQ9KGM9cCx1PWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PWEoYyk7aWYodSl7dmFyIG49YSh0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KHQsYXJndW1lbnRzLG4pfWVsc2UgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoXCJvYmplY3RcIj09PXIodCl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBpKGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gcChlKXt2YXIgdCxuLHIsbzshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLHApLG49aSh0PWQuY2FsbCh0aGlzLGUpKSxvPWZ1bmN0aW9uKGUpe3ZhciB0LG49bnVsbCE9PSh0PXRoaXMuaW50ZXJuYWxPcHRpb25zW2VdKSYmdm9pZCAwIT09dD90OnRoaXMub3JpZ2luYWxPcHRpb25zW2VdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLG89bmV3IEFycmF5KHI+MT9yLTE6MCksaT0xO2k8cjtpKyspb1tpLTFdPWFyZ3VtZW50c1tpXTtuPW4uYXBwbHkodm9pZCAwLG8pfWlmKCEwPT09biYmKG49dm9pZCAwKSwhbil7aWYodm9pZCAwPT09bnx8ITE9PT1uKXJldHVybiBuO3Rocm93IG5ldyBFcnJvcihcImBcIi5jb25jYXQoZSxcImAgd2FzIHNwZWNpZmllZCBidXQgd2FzIG5vdCBhIG5vZGUsIG9yIGRpZCBub3QgcmV0dXJuIGEgbm9kZVwiKSl9dmFyIGEsbD1uO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuJiYhKGw9bnVsbD09PShhPXRoaXMuZ2V0RG9jdW1lbnQoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEucXVlcnlTZWxlY3RvcihuKSkpdGhyb3cgbmV3IEVycm9yKFwiYFwiLmNvbmNhdChlLFwiYCBhcyBzZWxlY3RvciByZWZlcnMgdG8gbm8ga25vd24gbm9kZVwiKSk7cmV0dXJuIGx9LChyPWwocj1cImdldE5vZGVGb3JPcHRpb25cIikpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobixyLHt2YWx1ZTpvLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bltyXT1vLHQuaGFuZGxlRGVhY3RpdmF0ZT10LmhhbmRsZURlYWN0aXZhdGUuYmluZChpKHQpKSx0LmhhbmRsZVBvc3REZWFjdGl2YXRlPXQuaGFuZGxlUG9zdERlYWN0aXZhdGUuYmluZChpKHQpKSx0LmhhbmRsZUNsaWNrT3V0c2lkZURlYWN0aXZhdGVzPXQuaGFuZGxlQ2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXMuYmluZChpKHQpKSx0LmludGVybmFsT3B0aW9ucz17cmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6ITEsY2hlY2tDYW5SZXR1cm5Gb2N1czpudWxsLG9uRGVhY3RpdmF0ZTp0LmhhbmRsZURlYWN0aXZhdGUsb25Qb3N0RGVhY3RpdmF0ZTp0LmhhbmRsZVBvc3REZWFjdGl2YXRlLGNsaWNrT3V0c2lkZURlYWN0aXZhdGVzOnQuaGFuZGxlQ2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXN9LHQub3JpZ2luYWxPcHRpb25zPXtyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZTohMCxvbkRlYWN0aXZhdGU6bnVsbCxvblBvc3REZWFjdGl2YXRlOm51bGwsY2hlY2tDYW5SZXR1cm5Gb2N1czpudWxsLGNsaWNrT3V0c2lkZURlYWN0aXZhdGVzOiExfTt2YXIgYT1lLmZvY3VzVHJhcE9wdGlvbnM7Zm9yKHZhciBzIGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEscykmJihcInJldHVybkZvY3VzT25EZWFjdGl2YXRlXCIhPT1zJiZcIm9uRGVhY3RpdmF0ZVwiIT09cyYmXCJvblBvc3REZWFjdGl2YXRlXCIhPT1zJiZcImNoZWNrQ2FuUmV0dXJuRm9jdXNcIiE9PXMmJlwiY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXNcIiE9PXM/dC5pbnRlcm5hbE9wdGlvbnNbc109YVtzXTp0Lm9yaWdpbmFsT3B0aW9uc1tzXT1hW3NdKTtyZXR1cm4gdC5vdXRzaWRlQ2xpY2s9bnVsbCx0LmZvY3VzVHJhcEVsZW1lbnRzPWUuY29udGFpbmVyRWxlbWVudHN8fFtdLHQudXBkYXRlUHJldmlvdXNFbGVtZW50KCksdH1yZXR1cm4gdD1wLChuPVt7a2V5OlwiZ2V0RG9jdW1lbnRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmZvY3VzVHJhcE9wdGlvbnMuZG9jdW1lbnR8fChcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQ6dm9pZCAwKX19LHtrZXk6XCJnZXRSZXR1cm5Gb2N1c05vZGVcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Tm9kZUZvck9wdGlvbihcInNldFJldHVybkZvY3VzXCIsdGhpcy5wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQpO3JldHVybiBlfHwhMSE9PWUmJnRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50fX0se2tleTpcInVwZGF0ZVByZXZpb3VzRWxlbWVudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXREb2N1bWVudCgpO2UmJih0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudD1lLmFjdGl2ZUVsZW1lbnQpfX0se2tleTpcImRlYWN0aXZhdGVUcmFwXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmZvY3VzVHJhcCYmdGhpcy5mb2N1c1RyYXAuYWN0aXZlJiZ0aGlzLmZvY3VzVHJhcC5kZWFjdGl2YXRlKHtyZXR1cm5Gb2N1czohMSxjaGVja0NhblJldHVybkZvY3VzOm51bGwsb25EZWFjdGl2YXRlOnRoaXMub3JpZ2luYWxPcHRpb25zLm9uRGVhY3RpdmF0ZX0pfX0se2tleTpcImhhbmRsZUNsaWNrT3V0c2lkZURlYWN0aXZhdGVzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcmlnaW5hbE9wdGlvbnMuY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXM/dGhpcy5vcmlnaW5hbE9wdGlvbnMuY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXMuY2FsbChudWxsLGUpOnRoaXMub3JpZ2luYWxPcHRpb25zLmNsaWNrT3V0c2lkZURlYWN0aXZhdGVzO3JldHVybiB0JiYodGhpcy5vdXRzaWRlQ2xpY2s9e3RhcmdldDplLnRhcmdldCxhbGxvd0RlYWN0aXZhdGlvbjp0fSksdH19LHtrZXk6XCJoYW5kbGVEZWFjdGl2YXRlXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm9yaWdpbmFsT3B0aW9ucy5vbkRlYWN0aXZhdGUmJnRoaXMub3JpZ2luYWxPcHRpb25zLm9uRGVhY3RpdmF0ZS5jYWxsKG51bGwpLHRoaXMuZGVhY3RpdmF0ZVRyYXAoKX19LHtrZXk6XCJoYW5kbGVQb3N0RGVhY3RpdmF0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWZ1bmN0aW9uKCl7dmFyIHQ9ZS5nZXRSZXR1cm5Gb2N1c05vZGUoKSxuPSEoIWUub3JpZ2luYWxPcHRpb25zLnJldHVybkZvY3VzT25EZWFjdGl2YXRlfHxudWxsPT10fHwhdC5mb2N1c3x8ZS5vdXRzaWRlQ2xpY2smJighZS5vdXRzaWRlQ2xpY2suYWxsb3dEZWFjdGl2YXRpb258fGYoZS5vdXRzaWRlQ2xpY2sudGFyZ2V0LGUuaW50ZXJuYWxPcHRpb25zLnRhYmJhYmxlT3B0aW9ucykpKSxyPWUuaW50ZXJuYWxPcHRpb25zLnByZXZlbnRTY3JvbGwsbz12b2lkIDAhPT1yJiZyO24mJnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6b30pLGUub3JpZ2luYWxPcHRpb25zLm9uUG9zdERlYWN0aXZhdGUmJmUub3JpZ2luYWxPcHRpb25zLm9uUG9zdERlYWN0aXZhdGUuY2FsbChudWxsKSxlLm91dHNpZGVDbGljaz1udWxsfTt0aGlzLm9yaWdpbmFsT3B0aW9ucy5jaGVja0NhblJldHVybkZvY3VzP3RoaXMub3JpZ2luYWxPcHRpb25zLmNoZWNrQ2FuUmV0dXJuRm9jdXMuY2FsbChudWxsLHRoaXMuZ2V0UmV0dXJuRm9jdXNOb2RlKCkpLnRoZW4odCx0KTp0KCl9fSx7a2V5Olwic2V0dXBGb2N1c1RyYXBcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZm9jdXNUcmFwP3RoaXMucHJvcHMuYWN0aXZlJiYhdGhpcy5mb2N1c1RyYXAuYWN0aXZlJiYodGhpcy5mb2N1c1RyYXAuYWN0aXZhdGUoKSx0aGlzLnByb3BzLnBhdXNlZCYmdGhpcy5mb2N1c1RyYXAucGF1c2UoKSk6dGhpcy5mb2N1c1RyYXBFbGVtZW50cy5zb21lKEJvb2xlYW4pJiYodGhpcy5mb2N1c1RyYXA9dGhpcy5wcm9wcy5fY3JlYXRlRm9jdXNUcmFwKHRoaXMuZm9jdXNUcmFwRWxlbWVudHMsdGhpcy5pbnRlcm5hbE9wdGlvbnMpLHRoaXMucHJvcHMuYWN0aXZlJiZ0aGlzLmZvY3VzVHJhcC5hY3RpdmF0ZSgpLHRoaXMucHJvcHMucGF1c2VkJiZ0aGlzLmZvY3VzVHJhcC5wYXVzZSgpKX19LHtrZXk6XCJjb21wb25lbnREaWRNb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5hY3RpdmUmJnRoaXMuc2V0dXBGb2N1c1RyYXAoKX19LHtrZXk6XCJjb21wb25lbnREaWRVcGRhdGVcIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmZvY3VzVHJhcCl7ZS5jb250YWluZXJFbGVtZW50cyE9PXRoaXMucHJvcHMuY29udGFpbmVyRWxlbWVudHMmJnRoaXMuZm9jdXNUcmFwLnVwZGF0ZUNvbnRhaW5lckVsZW1lbnRzKHRoaXMucHJvcHMuY29udGFpbmVyRWxlbWVudHMpO3ZhciB0PSFlLmFjdGl2ZSYmdGhpcy5wcm9wcy5hY3RpdmUsbj1lLmFjdGl2ZSYmIXRoaXMucHJvcHMuYWN0aXZlLHI9IWUucGF1c2VkJiZ0aGlzLnByb3BzLnBhdXNlZCxvPWUucGF1c2VkJiYhdGhpcy5wcm9wcy5wYXVzZWQ7aWYodCYmKHRoaXMudXBkYXRlUHJldmlvdXNFbGVtZW50KCksdGhpcy5mb2N1c1RyYXAuYWN0aXZhdGUoKSksbilyZXR1cm4gdm9pZCB0aGlzLmRlYWN0aXZhdGVUcmFwKCk7ciYmdGhpcy5mb2N1c1RyYXAucGF1c2UoKSxvJiZ0aGlzLmZvY3VzVHJhcC51bnBhdXNlKCl9ZWxzZSBlLmNvbnRhaW5lckVsZW1lbnRzIT09dGhpcy5wcm9wcy5jb250YWluZXJFbGVtZW50cyYmKHRoaXMuZm9jdXNUcmFwRWxlbWVudHM9dGhpcy5wcm9wcy5jb250YWluZXJFbGVtZW50cyksdGhpcy5wcm9wcy5hY3RpdmUmJih0aGlzLnVwZGF0ZVByZXZpb3VzRWxlbWVudCgpLHRoaXMuc2V0dXBGb2N1c1RyYXAoKSl9fSx7a2V5OlwiY29tcG9uZW50V2lsbFVubW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGVhY3RpdmF0ZVRyYXAoKX19LHtrZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLmNoaWxkcmVuP3MuQ2hpbGRyZW4ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKTp2b2lkIDA7aWYodCl7aWYodC50eXBlJiZ0LnR5cGU9PT1zLkZyYWdtZW50KXRocm93IG5ldyBFcnJvcihcIkEgZm9jdXMtdHJhcCBjYW5ub3QgdXNlIGEgRnJhZ21lbnQgYXMgaXRzIGNoaWxkIGNvbnRhaW5lci4gVHJ5IHJlcGxhY2luZyBpdCB3aXRoIGEgPGRpdj4gZWxlbWVudC5cIik7cmV0dXJuIHMuY2xvbmVFbGVtZW50KHQse3JlZjpmdW5jdGlvbihuKXt2YXIgcj1lLnByb3BzLmNvbnRhaW5lckVsZW1lbnRzO3QmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnJlZj90LnJlZihuKTp0LnJlZiYmKHQucmVmLmN1cnJlbnQ9bikpLGUuZm9jdXNUcmFwRWxlbWVudHM9cnx8W25dfX0pfXJldHVybiBudWxsfX1dKSYmZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbChyLmtleSkscil9fSh0LnByb3RvdHlwZSxuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcInByb3RvdHlwZVwiLHt3cml0YWJsZTohMX0pLHB9KHMuQ29tcG9uZW50KSxwPVwidW5kZWZpbmVkXCI9PXR5cGVvZiBFbGVtZW50P0Z1bmN0aW9uOkVsZW1lbnQ7ZC5wcm9wVHlwZXM9e2FjdGl2ZTpjLmJvb2wscGF1c2VkOmMuYm9vbCxmb2N1c1RyYXBPcHRpb25zOmMuc2hhcGUoe2RvY3VtZW50OmMub2JqZWN0LG9uQWN0aXZhdGU6Yy5mdW5jLG9uUG9zdEFjdGl2YXRlOmMuZnVuYyxjaGVja0NhbkZvY3VzVHJhcDpjLmZ1bmMsb25EZWFjdGl2YXRlOmMuZnVuYyxvblBvc3REZWFjdGl2YXRlOmMuZnVuYyxjaGVja0NhblJldHVybkZvY3VzOmMuZnVuYyxpbml0aWFsRm9jdXM6Yy5vbmVPZlR5cGUoW2MuaW5zdGFuY2VPZihwKSxjLnN0cmluZyxjLmJvb2wsYy5mdW5jXSksZmFsbGJhY2tGb2N1czpjLm9uZU9mVHlwZShbYy5pbnN0YW5jZU9mKHApLGMuc3RyaW5nLGMuZnVuY10pLGVzY2FwZURlYWN0aXZhdGVzOmMub25lT2ZUeXBlKFtjLmJvb2wsYy5mdW5jXSksY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXM6Yy5vbmVPZlR5cGUoW2MuYm9vbCxjLmZ1bmNdKSxyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZTpjLmJvb2wsc2V0UmV0dXJuRm9jdXM6Yy5vbmVPZlR5cGUoW2MuaW5zdGFuY2VPZihwKSxjLnN0cmluZyxjLmJvb2wsYy5mdW5jXSksYWxsb3dPdXRzaWRlQ2xpY2s6Yy5vbmVPZlR5cGUoW2MuYm9vbCxjLmZ1bmNdKSxwcmV2ZW50U2Nyb2xsOmMuYm9vbCx0YWJiYWJsZU9wdGlvbnM6Yy5zaGFwZSh7ZGlzcGxheUNoZWNrOmMub25lT2YoW1wiZnVsbFwiLFwibGVnYWN5LWZ1bGxcIixcIm5vbi16ZXJvLWFyZWFcIixcIm5vbmVcIl0pLGdldFNoYWRvd1Jvb3Q6Yy5vbmVPZlR5cGUoW2MuYm9vbCxjLmZ1bmNdKX0pLHRyYXBTdGFjazpjLmFycmF5LGlzS2V5Rm9yd2FyZDpjLmZ1bmMsaXNLZXlCYWNrd2FyZDpjLmZ1bmN9KSxjb250YWluZXJFbGVtZW50czpjLmFycmF5T2YoYy5pbnN0YW5jZU9mKHApKSxjaGlsZHJlbjpjLm9uZU9mVHlwZShbYy5lbGVtZW50LGMuaW5zdGFuY2VPZihwKV0pfSxkLmRlZmF1bHRQcm9wcz17YWN0aXZlOiEwLHBhdXNlZDohMSxmb2N1c1RyYXBPcHRpb25zOnt9LF9jcmVhdGVGb2N1c1RyYXA6dX0sZS5leHBvcnRzPWR9LDUzMDM6KGUsdCxuKT0+e24ucih0KSxuLmQodCx7Y3JlYXRlRm9jdXNUcmFwOigpPT5nfSk7dmFyIHI9big4Mzg4KTtmdW5jdGlvbiBvKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBpKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP28oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXthKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpvKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIGEoZSx0LG4pe3JldHVybih0PWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGV8fG51bGw9PT1lKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1uKXt2YXIgcj1uLmNhbGwoZSxcInN0cmluZ1wiKTtpZihcIm9iamVjdFwiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIil9cmV0dXJuIFN0cmluZyhlKX0oZSk7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHQ/dDpTdHJpbmcodCl9KHQpKWluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfXZhciBsPWZ1bmN0aW9uKGUpe3JldHVyblwiVGFiXCI9PT1lLmtleXx8OT09PWUua2V5Q29kZX0scz1mdW5jdGlvbihlKXtyZXR1cm4gbChlKSYmIWUuc2hpZnRLZXl9LGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSkmJmUuc2hpZnRLZXl9LHU9ZnVuY3Rpb24oZSl7cmV0dXJuIHNldFRpbWVvdXQoZSwwKX0sZj1mdW5jdGlvbihlLHQpe3ZhciBuPS0xO3JldHVybiBlLmV2ZXJ5KChmdW5jdGlvbihlLHIpe3JldHVybiF0KGUpfHwobj1yLCExKX0pKSxufSxkPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UuYXBwbHkodm9pZCAwLG4pOmV9LHA9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFyZ2V0LnNoYWRvd1Jvb3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY29tcG9zZWRQYXRoP2UuY29tcG9zZWRQYXRoKClbMF06ZS50YXJnZXR9LGg9W10sZz1mdW5jdGlvbihlLHQpe3ZhciBuLG89KG51bGw9PXQ/dm9pZCAwOnQuZG9jdW1lbnQpfHxkb2N1bWVudCxhPShudWxsPT10P3ZvaWQgMDp0LnRyYXBTdGFjayl8fGgsZz1pKHtyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZTohMCxlc2NhcGVEZWFjdGl2YXRlczohMCxkZWxheUluaXRpYWxGb2N1czohMCxpc0tleUZvcndhcmQ6cyxpc0tleUJhY2t3YXJkOmN9LHQpLHY9e2NvbnRhaW5lcnM6W10sY29udGFpbmVyR3JvdXBzOltdLHRhYmJhYmxlR3JvdXBzOltdLG5vZGVGb2N1c2VkQmVmb3JlQWN0aXZhdGlvbjpudWxsLG1vc3RSZWNlbnRseUZvY3VzZWROb2RlOm51bGwsYWN0aXZlOiExLHBhdXNlZDohMSxkZWxheUluaXRpYWxGb2N1c1RpbWVyOnZvaWQgMH0sbT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJnZvaWQgMCE9PWVbdF0/ZVt0XTpnW258fHRdfSxDPWZ1bmN0aW9uKGUpe3JldHVybiB2LmNvbnRhaW5lckdyb3Vwcy5maW5kSW5kZXgoKGZ1bmN0aW9uKHQpe3ZhciBuPXQuY29udGFpbmVyLHI9dC50YWJiYWJsZU5vZGVzO3JldHVybiBuLmNvbnRhaW5zKGUpfHxyLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZX0pKX0pKX0seT1mdW5jdGlvbihlKXt2YXIgdD1nW2VdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+MT9uLTE6MCksaT0xO2k8bjtpKyspcltpLTFdPWFyZ3VtZW50c1tpXTt0PXQuYXBwbHkodm9pZCAwLHIpfWlmKCEwPT09dCYmKHQ9dm9pZCAwKSwhdCl7aWYodm9pZCAwPT09dHx8ITE9PT10KXJldHVybiB0O3Rocm93IG5ldyBFcnJvcihcImBcIi5jb25jYXQoZSxcImAgd2FzIHNwZWNpZmllZCBidXQgd2FzIG5vdCBhIG5vZGUsIG9yIGRpZCBub3QgcmV0dXJuIGEgbm9kZVwiKSl9dmFyIGE9dDtpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmIShhPW8ucXVlcnlTZWxlY3Rvcih0KSkpdGhyb3cgbmV3IEVycm9yKFwiYFwiLmNvbmNhdChlLFwiYCBhcyBzZWxlY3RvciByZWZlcnMgdG8gbm8ga25vd24gbm9kZVwiKSk7cmV0dXJuIGF9LHc9ZnVuY3Rpb24oKXt2YXIgZT15KFwiaW5pdGlhbEZvY3VzXCIpO2lmKCExPT09ZSlyZXR1cm4hMTtpZih2b2lkIDA9PT1lKWlmKEMoby5hY3RpdmVFbGVtZW50KT49MCllPW8uYWN0aXZlRWxlbWVudDtlbHNle3ZhciB0PXYudGFiYmFibGVHcm91cHNbMF07ZT10JiZ0LmZpcnN0VGFiYmFibGVOb2RlfHx5KFwiZmFsbGJhY2tGb2N1c1wiKX1pZighZSl0aHJvdyBuZXcgRXJyb3IoXCJZb3VyIGZvY3VzLXRyYXAgbmVlZHMgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgZm9jdXNhYmxlIGVsZW1lbnRcIik7cmV0dXJuIGV9LGI9ZnVuY3Rpb24oKXtpZih2LmNvbnRhaW5lckdyb3Vwcz12LmNvbnRhaW5lcnMubWFwKChmdW5jdGlvbihlKXt2YXIgdD0oMCxyLnRhYmJhYmxlKShlLGcudGFiYmFibGVPcHRpb25zKSxuPSgwLHIuZm9jdXNhYmxlKShlLGcudGFiYmFibGVPcHRpb25zKTtyZXR1cm57Y29udGFpbmVyOmUsdGFiYmFibGVOb2Rlczp0LGZvY3VzYWJsZU5vZGVzOm4sZmlyc3RUYWJiYWJsZU5vZGU6dC5sZW5ndGg+MD90WzBdOm51bGwsbGFzdFRhYmJhYmxlTm9kZTp0Lmxlbmd0aD4wP3RbdC5sZW5ndGgtMV06bnVsbCxuZXh0VGFiYmFibGVOb2RlOmZ1bmN0aW9uKGUpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sbz1uLmZpbmRJbmRleCgoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lfSkpO2lmKCEobzwwKSlyZXR1cm4gdD9uLnNsaWNlKG8rMSkuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5pc1RhYmJhYmxlKShlLGcudGFiYmFibGVPcHRpb25zKX0pKTpuLnNsaWNlKDAsbykucmV2ZXJzZSgpLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybigwLHIuaXNUYWJiYWJsZSkoZSxnLnRhYmJhYmxlT3B0aW9ucyl9KSl9fX0pKSx2LnRhYmJhYmxlR3JvdXBzPXYuY29udGFpbmVyR3JvdXBzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFiYmFibGVOb2Rlcy5sZW5ndGg+MH0pKSx2LnRhYmJhYmxlR3JvdXBzLmxlbmd0aDw9MCYmIXkoXCJmYWxsYmFja0ZvY3VzXCIpKXRocm93IG5ldyBFcnJvcihcIllvdXIgZm9jdXMtdHJhcCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGNvbnRhaW5lciB3aXRoIGF0IGxlYXN0IG9uZSB0YWJiYWJsZSBub2RlIGluIGl0IGF0IGFsbCB0aW1lc1wiKX0seD1mdW5jdGlvbiBlKHQpeyExIT09dCYmdCE9PW8uYWN0aXZlRWxlbWVudCYmKHQmJnQuZm9jdXM/KHQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ISFnLnByZXZlbnRTY3JvbGx9KSx2Lm1vc3RSZWNlbnRseUZvY3VzZWROb2RlPXQsZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFnTmFtZSYmXCJpbnB1dFwiPT09ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuc2VsZWN0fSh0KSYmdC5zZWxlY3QoKSk6ZSh3KCkpKX0sXz1mdW5jdGlvbihlKXt2YXIgdD15KFwic2V0UmV0dXJuRm9jdXNcIixlKTtyZXR1cm4gdHx8ITEhPT10JiZlfSxPPWZ1bmN0aW9uKGUpe3ZhciB0PXAoZSk7Qyh0KT49MHx8KGQoZy5jbGlja091dHNpZGVEZWFjdGl2YXRlcyxlKT9uLmRlYWN0aXZhdGUoe3JldHVybkZvY3VzOmcucmV0dXJuRm9jdXNPbkRlYWN0aXZhdGV9KTpkKGcuYWxsb3dPdXRzaWRlQ2xpY2ssZSl8fGUucHJldmVudERlZmF1bHQoKSl9LEw9ZnVuY3Rpb24oZSl7dmFyIHQ9cChlKSxuPUModCk+PTA7bnx8dCBpbnN0YW5jZW9mIERvY3VtZW50P24mJih2Lm1vc3RSZWNlbnRseUZvY3VzZWROb2RlPXQpOihlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHgodi5tb3N0UmVjZW50bHlGb2N1c2VkTm9kZXx8dygpKSl9LEU9ZnVuY3Rpb24oZSl7aWYoKFwiRXNjYXBlXCI9PT0odD1lKS5rZXl8fFwiRXNjXCI9PT10LmtleXx8Mjc9PT10LmtleUNvZGUpJiYhMSE9PWQoZy5lc2NhcGVEZWFjdGl2YXRlcyxlKSlyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgbi5kZWFjdGl2YXRlKCk7dmFyIHQ7KGcuaXNLZXlGb3J3YXJkKGUpfHxnLmlzS2V5QmFja3dhcmQoZSkpJiZmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLG49cChlKTtiKCk7dmFyIG89bnVsbDtpZih2LnRhYmJhYmxlR3JvdXBzLmxlbmd0aD4wKXt2YXIgaT1DKG4pLGE9aT49MD92LmNvbnRhaW5lckdyb3Vwc1tpXTp2b2lkIDA7aWYoaTwwKW89dD92LnRhYmJhYmxlR3JvdXBzW3YudGFiYmFibGVHcm91cHMubGVuZ3RoLTFdLmxhc3RUYWJiYWJsZU5vZGU6di50YWJiYWJsZUdyb3Vwc1swXS5maXJzdFRhYmJhYmxlTm9kZTtlbHNlIGlmKHQpe3ZhciBzPWYodi50YWJiYWJsZUdyb3VwcywoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5maXJzdFRhYmJhYmxlTm9kZTtyZXR1cm4gbj09PXR9KSk7aWYoczwwJiYoYS5jb250YWluZXI9PT1ufHwoMCxyLmlzRm9jdXNhYmxlKShuLGcudGFiYmFibGVPcHRpb25zKSYmISgwLHIuaXNUYWJiYWJsZSkobixnLnRhYmJhYmxlT3B0aW9ucykmJiFhLm5leHRUYWJiYWJsZU5vZGUobiwhMSkpJiYocz1pKSxzPj0wKXt2YXIgYz0wPT09cz92LnRhYmJhYmxlR3JvdXBzLmxlbmd0aC0xOnMtMTtvPXYudGFiYmFibGVHcm91cHNbY10ubGFzdFRhYmJhYmxlTm9kZX1lbHNlIGwoZSl8fChvPWEubmV4dFRhYmJhYmxlTm9kZShuLCExKSl9ZWxzZXt2YXIgdT1mKHYudGFiYmFibGVHcm91cHMsKGZ1bmN0aW9uKGUpe3ZhciB0PWUubGFzdFRhYmJhYmxlTm9kZTtyZXR1cm4gbj09PXR9KSk7aWYodTwwJiYoYS5jb250YWluZXI9PT1ufHwoMCxyLmlzRm9jdXNhYmxlKShuLGcudGFiYmFibGVPcHRpb25zKSYmISgwLHIuaXNUYWJiYWJsZSkobixnLnRhYmJhYmxlT3B0aW9ucykmJiFhLm5leHRUYWJiYWJsZU5vZGUobikpJiYodT1pKSx1Pj0wKXt2YXIgZD11PT09di50YWJiYWJsZUdyb3Vwcy5sZW5ndGgtMT8wOnUrMTtvPXYudGFiYmFibGVHcm91cHNbZF0uZmlyc3RUYWJiYWJsZU5vZGV9ZWxzZSBsKGUpfHwobz1hLm5leHRUYWJiYWJsZU5vZGUobikpfX1lbHNlIG89eShcImZhbGxiYWNrRm9jdXNcIik7byYmKGwoZSkmJmUucHJldmVudERlZmF1bHQoKSx4KG8pKX0oZSxnLmlzS2V5QmFja3dhcmQoZSkpfSxTPWZ1bmN0aW9uKGUpe3ZhciB0PXAoZSk7Qyh0KT49MHx8ZChnLmNsaWNrT3V0c2lkZURlYWN0aXZhdGVzLGUpfHxkKGcuYWxsb3dPdXRzaWRlQ2xpY2ssZSl8fChlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9LGo9ZnVuY3Rpb24oKXtpZih2LmFjdGl2ZSlyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZihlLmxlbmd0aD4wKXt2YXIgbj1lW2UubGVuZ3RoLTFdO24hPT10JiZuLnBhdXNlKCl9dmFyIHI9ZS5pbmRleE9mKHQpOy0xPT09cnx8ZS5zcGxpY2UociwxKSxlLnB1c2godCl9KGEsbiksdi5kZWxheUluaXRpYWxGb2N1c1RpbWVyPWcuZGVsYXlJbml0aWFsRm9jdXM/dSgoZnVuY3Rpb24oKXt4KHcoKSl9KSk6eCh3KCkpLG8uYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzaW5cIixMLCEwKSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixPLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsTyx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksby5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixTLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsRSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksbn0sTT1mdW5jdGlvbigpe2lmKHYuYWN0aXZlKXJldHVybiBvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsTCwhMCksby5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsTywhMCksby5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLE8sITApLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsUywhMCksby5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLEUsITApLG59O3JldHVybihuPXtnZXQgYWN0aXZlKCl7cmV0dXJuIHYuYWN0aXZlfSxnZXQgcGF1c2VkKCl7cmV0dXJuIHYucGF1c2VkfSxhY3RpdmF0ZTpmdW5jdGlvbihlKXtpZih2LmFjdGl2ZSlyZXR1cm4gdGhpczt2YXIgdD1tKGUsXCJvbkFjdGl2YXRlXCIpLG49bShlLFwib25Qb3N0QWN0aXZhdGVcIikscj1tKGUsXCJjaGVja0NhbkZvY3VzVHJhcFwiKTtyfHxiKCksdi5hY3RpdmU9ITAsdi5wYXVzZWQ9ITEsdi5ub2RlRm9jdXNlZEJlZm9yZUFjdGl2YXRpb249by5hY3RpdmVFbGVtZW50LHQmJnQoKTt2YXIgaT1mdW5jdGlvbigpe3ImJmIoKSxqKCksbiYmbigpfTtyZXR1cm4gcj8ocih2LmNvbnRhaW5lcnMuY29uY2F0KCkpLnRoZW4oaSxpKSx0aGlzKTooaSgpLHRoaXMpfSxkZWFjdGl2YXRlOmZ1bmN0aW9uKGUpe2lmKCF2LmFjdGl2ZSlyZXR1cm4gdGhpczt2YXIgdD1pKHtvbkRlYWN0aXZhdGU6Zy5vbkRlYWN0aXZhdGUsb25Qb3N0RGVhY3RpdmF0ZTpnLm9uUG9zdERlYWN0aXZhdGUsY2hlY2tDYW5SZXR1cm5Gb2N1czpnLmNoZWNrQ2FuUmV0dXJuRm9jdXN9LGUpO2NsZWFyVGltZW91dCh2LmRlbGF5SW5pdGlhbEZvY3VzVGltZXIpLHYuZGVsYXlJbml0aWFsRm9jdXNUaW1lcj12b2lkIDAsTSgpLHYuYWN0aXZlPSExLHYucGF1c2VkPSExLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5pbmRleE9mKHQpOy0xIT09biYmZS5zcGxpY2UobiwxKSxlLmxlbmd0aD4wJiZlW2UubGVuZ3RoLTFdLnVucGF1c2UoKX0oYSxuKTt2YXIgcj1tKHQsXCJvbkRlYWN0aXZhdGVcIiksbz1tKHQsXCJvblBvc3REZWFjdGl2YXRlXCIpLGw9bSh0LFwiY2hlY2tDYW5SZXR1cm5Gb2N1c1wiKSxzPW0odCxcInJldHVybkZvY3VzXCIsXCJyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZVwiKTtyJiZyKCk7dmFyIGM9ZnVuY3Rpb24oKXt1KChmdW5jdGlvbigpe3MmJngoXyh2Lm5vZGVGb2N1c2VkQmVmb3JlQWN0aXZhdGlvbikpLG8mJm8oKX0pKX07cmV0dXJuIHMmJmw/KGwoXyh2Lm5vZGVGb2N1c2VkQmVmb3JlQWN0aXZhdGlvbikpLnRoZW4oYyxjKSx0aGlzKTooYygpLHRoaXMpfSxwYXVzZTpmdW5jdGlvbigpe3JldHVybiB2LnBhdXNlZHx8IXYuYWN0aXZlfHwodi5wYXVzZWQ9ITAsTSgpKSx0aGlzfSx1bnBhdXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHYucGF1c2VkJiZ2LmFjdGl2ZT8odi5wYXVzZWQ9ITEsYigpLGooKSx0aGlzKTp0aGlzfSx1cGRhdGVDb250YWluZXJFbGVtZW50czpmdW5jdGlvbihlKXt2YXIgdD1bXS5jb25jYXQoZSkuZmlsdGVyKEJvb2xlYW4pO3JldHVybiB2LmNvbnRhaW5lcnM9dC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP28ucXVlcnlTZWxlY3RvcihlKTplfSkpLHYuYWN0aXZlJiZiKCksdGhpc319KS51cGRhdGVDb250YWluZXJFbGVtZW50cyhlKSxufX0sOTE0MTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9big2NTUpLG89big2Njg5KSxpPW4oNDM5NCksYT1uKDM1NzMpLGw9big5Mjk0KSxzPW4oNDgzOSk7ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB1PWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBlJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXtpZihcImRlZmF1bHRcIiE9PW4pe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHIuZ2V0P3I6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbbl19fSl9fSkpLHQuZGVmYXVsdD1lLE9iamVjdC5mcmVlemUodCl9KG8pLGY9YyhvKSxkPWMocykscD1mdW5jdGlvbihlKXtyZXR1cm57aXNFbmFibGVkOmZ1bmN0aW9uKHQpe3JldHVybiBlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiEhdFtlXX0pKX19fSxoPXttZWFzdXJlTGF5b3V0OnAoW1wibGF5b3V0XCIsXCJsYXlvdXRJZFwiLFwiZHJhZ1wiLFwiX2xheW91dFJlc2V0VHJhbnNmb3JtXCJdKSxhbmltYXRpb246cChbXCJhbmltYXRlXCIsXCJleGl0XCIsXCJ2YXJpYW50c1wiLFwid2hpbGVIb3ZlclwiLFwid2hpbGVUYXBcIixcIndoaWxlRm9jdXNcIixcIndoaWxlRHJhZ1wiXSksZXhpdDpwKFtcImV4aXRcIl0pLGRyYWc6cChbXCJkcmFnXCIsXCJkcmFnQ29udHJvbHNcIl0pLGZvY3VzOnAoW1wid2hpbGVGb2N1c1wiXSksaG92ZXI6cChbXCJ3aGlsZUhvdmVyXCIsXCJvbkhvdmVyU3RhcnRcIixcIm9uSG92ZXJFbmRcIl0pLHRhcDpwKFtcIndoaWxlVGFwXCIsXCJvblRhcFwiLFwib25UYXBTdGFydFwiLFwib25UYXBDYW5jZWxcIl0pLHBhbjpwKFtcIm9uUGFuXCIsXCJvblBhblN0YXJ0XCIsXCJvblBhblNlc3Npb25TdGFydFwiLFwib25QYW5FbmRcIl0pLGxheW91dEFuaW1hdGlvbjpwKFtcImxheW91dFwiLFwibGF5b3V0SWRcIl0pfTtmdW5jdGlvbiBnKGUpe2Zvcih2YXIgdCBpbiBlKXt2YXIgbj1lW3RdO251bGwhPT1uJiYoaFt0XS5Db21wb25lbnQ9bil9fXZhciB2PW8uY3JlYXRlQ29udGV4dCh7c3RyaWN0OiExfSksbT1PYmplY3Qua2V5cyhoKSxDPW0ubGVuZ3RoLHk9by5jcmVhdGVDb250ZXh0KHt0cmFuc2Zvcm1QYWdlUG9pbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGlzU3RhdGljOiExfSksdz1vLmNyZWF0ZUNvbnRleHQoe30pO2Z1bmN0aW9uIGIoKXtyZXR1cm4gby51c2VDb250ZXh0KHcpLnZpc3VhbEVsZW1lbnR9dmFyIHg9by5jcmVhdGVDb250ZXh0KG51bGwpO2Z1bmN0aW9uIF8oZSl7dmFyIHQ9by51c2VSZWYobnVsbCk7cmV0dXJuIG51bGw9PT10LmN1cnJlbnQmJih0LmN1cnJlbnQ9ZSgpKSx0LmN1cnJlbnR9ZnVuY3Rpb24gTygpe3ZhciBlPW8udXNlQ29udGV4dCh4KTtpZihudWxsPT09ZSlyZXR1cm5bITAsbnVsbF07dmFyIHQ9ZS5pc1ByZXNlbnQsbj1lLm9uRXhpdENvbXBsZXRlLHI9ZS5yZWdpc3RlcixpPWooKTtyZXR1cm4gby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHIoaSl9KSxbXSksIXQmJm4/WyExLGZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PW4/dm9pZCAwOm4oaSl9XTpbITBdfWZ1bmN0aW9uIEwoZSl7cmV0dXJuIG51bGw9PT1lfHxlLmlzUHJlc2VudH12YXIgRT0wLFM9ZnVuY3Rpb24oKXtyZXR1cm4gRSsrfSxqPWZ1bmN0aW9uKCl7cmV0dXJuIF8oUyl9LE09by5jcmVhdGVDb250ZXh0KG51bGwpLGs9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyxSPWs/by51c2VMYXlvdXRFZmZlY3Q6by51c2VFZmZlY3Q7ZnVuY3Rpb24gUChlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJjdXJyZW50XCIpfWZ1bmN0aW9uIEkoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gQShlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZXx8SShlKX1mdW5jdGlvbiBUKGUsdCxuLHIsbyl7dmFyIGk7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSx2b2lkIDA9PT1vJiYobz17fSksXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PW51bGw9PT0oaT1lLnZhcmlhbnRzKXx8dm9pZCAwPT09aT92b2lkIDA6aVt0XSksXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KG51bGwhPW4/bjplLmN1c3RvbSxyLG8pOnR9ZnVuY3Rpb24gSChlLHQsbil7dmFyIHI9ZS5nZXRQcm9wcygpO3JldHVybiBUKHIsdCxudWxsIT1uP246ci5jdXN0b20sZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIGUuZm9yRWFjaFZhbHVlKChmdW5jdGlvbihlLG4pe3JldHVybiB0W25dPWUuZ2V0KCl9KSksdH0oZSksZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIGUuZm9yRWFjaFZhbHVlKChmdW5jdGlvbihlLG4pe3JldHVybiB0W25dPWUuZ2V0VmVsb2NpdHkoKX0pKSx0fShlKSl9ZnVuY3Rpb24gQihlKXt2YXIgdDtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZihudWxsPT09KHQ9ZS5hbmltYXRlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5zdGFydCl8fEEoZS5pbml0aWFsKXx8QShlLmFuaW1hdGUpfHxBKGUud2hpbGVIb3Zlcil8fEEoZS53aGlsZURyYWcpfHxBKGUud2hpbGVUYXApfHxBKGUud2hpbGVGb2N1cyl8fEEoZS5leGl0KX1mdW5jdGlvbiBWKGUpe3JldHVybiBCb29sZWFuKEIoZSl8fGUudmFyaWFudHMpfWZ1bmN0aW9uIEQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5qb2luKFwiIFwiKTplfWZ1bmN0aW9uIFooZSl7dmFyIHQ9ZS5wcmVsb2FkZWRGZWF0dXJlcyxuPWUuY3JlYXRlVmlzdWFsRWxlbWVudCxpPWUudXNlUmVuZGVyLGE9ZS51c2VWaXN1YWxTdGF0ZSxsPWUuQ29tcG9uZW50O3JldHVybiB0JiZnKHQpLG8uZm9yd2FyZFJlZigoZnVuY3Rpb24oZSx0KXt2YXIgcz1vLnVzZUNvbnRleHQoeSkuaXNTdGF0aWMsYz1udWxsLGY9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlLHQpe2lmKEIoZSkpe3ZhciBuPWUuaW5pdGlhbCxyPWUuYW5pbWF0ZTtyZXR1cm57aW5pdGlhbDohMT09PW58fEEobik/bjp2b2lkIDAsYW5pbWF0ZTpBKHIpP3I6dm9pZCAwfX1yZXR1cm4hMSE9PWUuaW5oZXJpdD90Ont9fShlLG8udXNlQ29udGV4dCh3KSkscj1uLmluaXRpYWwsaT1uLmFuaW1hdGU7cmV0dXJuIG8udXNlTWVtbygoZnVuY3Rpb24oKXtyZXR1cm57aW5pdGlhbDpyLGFuaW1hdGU6aX19KSx0P1tEKHIpLEQoaSldOltdKX0oZSxzKSxkPWEoZSxzKTtyZXR1cm4hcyYmayYmKGYudmlzdWFsRWxlbWVudD1mdW5jdGlvbihlLHQsbixpKXt2YXIgYT1vLnVzZUNvbnRleHQoeSksbD1vLnVzZUNvbnRleHQodikscz1iKCksYz1vLnVzZUNvbnRleHQoeCksdT1mdW5jdGlvbihlKXt2YXIgdD1lLmxheW91dElkLG49by51c2VDb250ZXh0KE0pO3JldHVybiBuJiZ2b2lkIDAhPT10P24rXCItXCIrdDp0fShuKSxmPW8udXNlUmVmKHZvaWQgMCk7aXx8KGk9bC5yZW5kZXJlciksIWYuY3VycmVudCYmaSYmKGYuY3VycmVudD1pKGUse3Zpc3VhbFN0YXRlOnQscGFyZW50OnMscHJvcHM6ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG4pLHtsYXlvdXRJZDp1fSkscHJlc2VuY2VJZDpudWxsPT1jP3ZvaWQgMDpjLmlkLGJsb2NrSW5pdGlhbEFuaW1hdGlvbjohMT09PShudWxsPT1jP3ZvaWQgMDpjLmluaXRpYWwpfSkpO3ZhciBkPWYuY3VycmVudDtyZXR1cm4gUigoZnVuY3Rpb24oKXtkJiYoZC5zZXRQcm9wcyhyLl9fYXNzaWduKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxhKSxuKSx7bGF5b3V0SWQ6dX0pKSxkLmlzUHJlc2VudD1MKGMpLGQuaXNQcmVzZW5jZVJvb3Q9IXN8fHMucHJlc2VuY2VJZCE9PShudWxsPT1jP3ZvaWQgMDpjLmlkKSxkLnN5bmNSZW5kZXIoKSl9KSksby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7dmFyIGU7ZCYmKG51bGw9PT0oZT1kLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZXx8ZS5hbmltYXRlQ2hhbmdlcygpKX0pKSxSKChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBudWxsPT1kP3ZvaWQgMDpkLm5vdGlmeVVubW91bnQoKX19KSxbXSksZH0obCxkLGUsbiksYz1mdW5jdGlvbihlLHQsbil7dmFyIGk9W107aWYoby51c2VDb250ZXh0KHYpLCF0KXJldHVybiBudWxsO2Zvcih2YXIgYT0wO2E8QzthKyspe3ZhciBsPW1bYV0scz1oW2xdLGM9cy5pc0VuYWJsZWQsZj1zLkNvbXBvbmVudDtjKGUpJiZmJiZpLnB1c2godS5jcmVhdGVFbGVtZW50KGYsci5fX2Fzc2lnbih7a2V5Omx9LGUse3Zpc3VhbEVsZW1lbnQ6dH0pKSl9cmV0dXJuIGl9KGUsZi52aXN1YWxFbGVtZW50KSksdS5jcmVhdGVFbGVtZW50KHUuRnJhZ21lbnQsbnVsbCx1LmNyZWF0ZUVsZW1lbnQody5Qcm92aWRlcix7dmFsdWU6Zn0saShsLGUsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBvLnVzZUNhbGxiYWNrKChmdW5jdGlvbihyKXt2YXIgbztyJiYobnVsbD09PShvPWUubW91bnQpfHx2b2lkIDA9PT1vfHxvLmNhbGwoZSxyKSksdCYmKHI/dC5tb3VudChyKTp0LnVubW91bnQoKSksbiYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bihyKTpQKG4pJiYobi5jdXJyZW50PXIpKX0pLFt0XSl9KGQsZi52aXN1YWxFbGVtZW50LHQpLGQscykpLGMpfSkpfWZ1bmN0aW9uICQoZSl7ZnVuY3Rpb24gdCh0LG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksWihlKHQsbikpfXZhciBuPW5ldyBNYXA7cmV0dXJuIG5ldyBQcm94eSh0LHtnZXQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbi5oYXMocil8fG4uc2V0KHIsdChyKSksbi5nZXQocil9fSl9dmFyIE49W1wiYW5pbWF0ZVwiLFwiY2lyY2xlXCIsXCJkZWZzXCIsXCJkZXNjXCIsXCJlbGxpcHNlXCIsXCJnXCIsXCJpbWFnZVwiLFwibGluZVwiLFwiZmlsdGVyXCIsXCJtYXJrZXJcIixcIm1hc2tcIixcIm1ldGFkYXRhXCIsXCJwYXRoXCIsXCJwYXR0ZXJuXCIsXCJwb2x5Z29uXCIsXCJwb2x5bGluZVwiLFwicmVjdFwiLFwic3RvcFwiLFwic3ZnXCIsXCJzd2l0Y2hcIixcInN5bWJvbFwiLFwidGV4dFwiLFwidHNwYW5cIixcInVzZVwiLFwidmlld1wiXTtmdW5jdGlvbiBGKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYhZS5pbmNsdWRlcyhcIi1cIikmJiEhKE4uaW5kZXhPZihlKT4tMXx8L1tBLVpdLy50ZXN0KGUpKX12YXIgVT17fTtmdW5jdGlvbiBXKGUpe2Zvcih2YXIgdCBpbiBlKVVbdF09ZVt0XX12YXIgej1bXCJcIixcIlhcIixcIllcIixcIlpcIl0sRz1bXCJ0cmFuc2Zvcm1QZXJzcGVjdGl2ZVwiLFwieFwiLFwieVwiLFwielwiXTtmdW5jdGlvbiBxKGUsdCl7cmV0dXJuIEcuaW5kZXhPZihlKS1HLmluZGV4T2YodCl9W1widHJhbnNsYXRlXCIsXCJzY2FsZVwiLFwicm90YXRlXCIsXCJza2V3XCJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB6LmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBHLnB1c2goZSt0KX0pKX0pKTt2YXIgWT1uZXcgU2V0KEcpO2Z1bmN0aW9uIEsoZSl7cmV0dXJuIFkuaGFzKGUpfXZhciBYPW5ldyBTZXQoW1wib3JpZ2luWFwiLFwib3JpZ2luWVwiLFwib3JpZ2luWlwiXSk7ZnVuY3Rpb24gSihlKXtyZXR1cm4gWC5oYXMoZSl9ZnVuY3Rpb24gUShlLHQpe3ZhciBuPXQubGF5b3V0LHI9dC5sYXlvdXRJZDtyZXR1cm4gSyhlKXx8SihlKXx8KG58fHZvaWQgMCE9PXIpJiYoISFVW2VdfHxcIm9wYWNpdHlcIj09PWUpfXZhciBlZT1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLmdldFZlbG9jaXR5fSx0ZT17eDpcInRyYW5zbGF0ZVhcIix5OlwidHJhbnNsYXRlWVwiLHo6XCJ0cmFuc2xhdGVaXCIsdHJhbnNmb3JtUGVyc3BlY3RpdmU6XCJwZXJzcGVjdGl2ZVwifTtmdW5jdGlvbiBuZShlKXtyZXR1cm4gZS5zdGFydHNXaXRoKFwiLS1cIil9dmFyIHJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQmJlwibnVtYmVyXCI9PXR5cGVvZiBlP3QudHJhbnNmb3JtKGUpOmV9LG9lPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxhLm51bWJlcikse3RyYW5zZm9ybTpNYXRoLnJvdW5kfSksaWU9e2JvcmRlcldpZHRoOmEucHgsYm9yZGVyVG9wV2lkdGg6YS5weCxib3JkZXJSaWdodFdpZHRoOmEucHgsYm9yZGVyQm90dG9tV2lkdGg6YS5weCxib3JkZXJMZWZ0V2lkdGg6YS5weCxib3JkZXJSYWRpdXM6YS5weCxyYWRpdXM6YS5weCxib3JkZXJUb3BMZWZ0UmFkaXVzOmEucHgsYm9yZGVyVG9wUmlnaHRSYWRpdXM6YS5weCxib3JkZXJCb3R0b21SaWdodFJhZGl1czphLnB4LGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6YS5weCx3aWR0aDphLnB4LG1heFdpZHRoOmEucHgsaGVpZ2h0OmEucHgsbWF4SGVpZ2h0OmEucHgsc2l6ZTphLnB4LHRvcDphLnB4LHJpZ2h0OmEucHgsYm90dG9tOmEucHgsbGVmdDphLnB4LHBhZGRpbmc6YS5weCxwYWRkaW5nVG9wOmEucHgscGFkZGluZ1JpZ2h0OmEucHgscGFkZGluZ0JvdHRvbTphLnB4LHBhZGRpbmdMZWZ0OmEucHgsbWFyZ2luOmEucHgsbWFyZ2luVG9wOmEucHgsbWFyZ2luUmlnaHQ6YS5weCxtYXJnaW5Cb3R0b206YS5weCxtYXJnaW5MZWZ0OmEucHgscm90YXRlOmEuZGVncmVlcyxyb3RhdGVYOmEuZGVncmVlcyxyb3RhdGVZOmEuZGVncmVlcyxyb3RhdGVaOmEuZGVncmVlcyxzY2FsZTphLnNjYWxlLHNjYWxlWDphLnNjYWxlLHNjYWxlWTphLnNjYWxlLHNjYWxlWjphLnNjYWxlLHNrZXc6YS5kZWdyZWVzLHNrZXdYOmEuZGVncmVlcyxza2V3WTphLmRlZ3JlZXMsZGlzdGFuY2U6YS5weCx0cmFuc2xhdGVYOmEucHgsdHJhbnNsYXRlWTphLnB4LHRyYW5zbGF0ZVo6YS5weCx4OmEucHgseTphLnB4LHo6YS5weCxwZXJzcGVjdGl2ZTphLnB4LHRyYW5zZm9ybVBlcnNwZWN0aXZlOmEucHgsb3BhY2l0eTphLmFscGhhLG9yaWdpblg6YS5wcm9ncmVzc1BlcmNlbnRhZ2Usb3JpZ2luWTphLnByb2dyZXNzUGVyY2VudGFnZSxvcmlnaW5aOmEucHgsekluZGV4Om9lLGZpbGxPcGFjaXR5OmEuYWxwaGEsc3Ryb2tlT3BhY2l0eTphLmFscGhhLG51bU9jdGF2ZXM6b2V9O2Z1bmN0aW9uIGFlKGUsdCxuLHIsbyxpLGEsbCl7dmFyIHMsYz1lLnN0eWxlLHU9ZS52YXJzLGY9ZS50cmFuc2Zvcm0sZD1lLnRyYW5zZm9ybUtleXMscD1lLnRyYW5zZm9ybU9yaWdpbjtkLmxlbmd0aD0wO3ZhciBoPSExLGc9ITEsdj0hMDtmb3IodmFyIG0gaW4gdCl7dmFyIEM9dFttXTtpZihuZShtKSl1W21dPUM7ZWxzZXt2YXIgeT1pZVttXSx3PXJlKEMseSk7aWYoSyhtKSl7aWYoaD0hMCxmW21dPXcsZC5wdXNoKG0pLCF2KWNvbnRpbnVlO0MhPT0obnVsbCE9PShzPXkuZGVmYXVsdCkmJnZvaWQgMCE9PXM/czowKSYmKHY9ITEpfWVsc2UgaWYoSihtKSlwW21dPXcsZz0hMDtlbHNlIGlmKChudWxsPT1uP3ZvaWQgMDpuLmlzSHlkcmF0ZWQpJiYobnVsbD09cj92b2lkIDA6ci5pc0h5ZHJhdGVkKSYmVVttXSl7dmFyIGI9VVttXS5wcm9jZXNzKEMscixuKSx4PVVbbV0uYXBwbHlUbztpZih4KWZvcih2YXIgXz14Lmxlbmd0aCxPPTA7TzxfO08rKyljW3hbT11dPWI7ZWxzZSBjW21dPWJ9ZWxzZSBjW21dPXd9fXImJm4mJmEmJmw/KGMudHJhbnNmb3JtPWEoci5kZWx0YUZpbmFsLHIudHJlZVNjYWxlLGg/Zjp2b2lkIDApLGkmJihjLnRyYW5zZm9ybT1pKGYsYy50cmFuc2Zvcm0pKSxjLnRyYW5zZm9ybU9yaWdpbj1sKHIpKTooaCYmKGMudHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPWUudHJhbnNmb3JtLGk9ZS50cmFuc2Zvcm1LZXlzLGE9dC5lbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbixsPXZvaWQgMD09PWF8fGEscz10LmFsbG93VHJhbnNmb3JtTm9uZSxjPXZvaWQgMD09PXN8fHMsdT1cIlwiO2kuc29ydChxKTtmb3IodmFyIGY9ITEsZD1pLmxlbmd0aCxwPTA7cDxkO3ArKyl7dmFyIGg9aVtwXTt1Kz0odGVbaF18fGgpK1wiKFwiK29baF0rXCIpIFwiLFwielwiPT09aCYmKGY9ITApfXJldHVybiFmJiZsP3UrPVwidHJhbnNsYXRlWigwKVwiOnU9dS50cmltKCkscj91PXIobyxuP1wiXCI6dSk6YyYmbiYmKHU9XCJub25lXCIpLHV9KGUsbyx2LGkpKSxnJiYoYy50cmFuc2Zvcm1PcmlnaW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vcmlnaW5YLG49dm9pZCAwPT09dD9cIjUwJVwiOnQscj1lLm9yaWdpblksbz12b2lkIDA9PT1yP1wiNTAlXCI6cixpPWUub3JpZ2luWjtyZXR1cm4gbitcIiBcIitvK1wiIFwiKyh2b2lkIDA9PT1pPzA6aSl9KHApKSl9dmFyIGxlPWZ1bmN0aW9uKCl7cmV0dXJue3N0eWxlOnt9LHRyYW5zZm9ybTp7fSx0cmFuc2Zvcm1LZXlzOltdLHRyYW5zZm9ybU9yaWdpbjp7fSx2YXJzOnt9fX07ZnVuY3Rpb24gc2UoZSx0LG4pe2Zvcih2YXIgciBpbiB0KWVlKHRbcl0pfHxRKHIsbil8fChlW3JdPXRbcl0pfWZ1bmN0aW9uIGNlKGUsdCxuKXt2YXIgaT17fSxhPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT17fTtyZXR1cm4gc2UoaSxlLnN0eWxlfHx7fSxlKSxPYmplY3QuYXNzaWduKGksZnVuY3Rpb24oZSx0LG4pe3ZhciBpPWUudHJhbnNmb3JtVGVtcGxhdGU7cmV0dXJuIG8udXNlTWVtbygoZnVuY3Rpb24oKXt2YXIgZT1sZSgpO2FlKGUsdCx2b2lkIDAsdm9pZCAwLHtlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjohbn0saSk7dmFyIG89ZS52YXJzLGE9ZS5zdHlsZTtyZXR1cm4gci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG8pLGEpfSksW3RdKX0oZSx0LG4pKSxlLnRyYW5zZm9ybVZhbHVlcyYmKGk9ZS50cmFuc2Zvcm1WYWx1ZXMoaSkpLGl9KGUsdCxuKTtyZXR1cm4gQm9vbGVhbihlLmRyYWcpJiYoaS5kcmFnZ2FibGU9ITEsYS51c2VyU2VsZWN0PWEuV2Via2l0VXNlclNlbGVjdD1hLldlYmtpdFRvdWNoQ2FsbG91dD1cIm5vbmVcIixhLnRvdWNoQWN0aW9uPSEwPT09ZS5kcmFnP1wibm9uZVwiOlwicGFuLVwiKyhcInhcIj09PWUuZHJhZz9cInlcIjpcInhcIikpLGkuc3R5bGU9YSxpfXZhciB1ZT1uZXcgU2V0KFtcImluaXRpYWxcIixcImFuaW1hdGVcIixcImV4aXRcIixcInN0eWxlXCIsXCJ2YXJpYW50c1wiLFwidHJhbnNpdGlvblwiLFwidHJhbnNmb3JtVGVtcGxhdGVcIixcInRyYW5zZm9ybVZhbHVlc1wiLFwiY3VzdG9tXCIsXCJpbmhlcml0XCIsXCJsYXlvdXRcIixcImxheW91dElkXCIsXCJfbGF5b3V0UmVzZXRUcmFuc2Zvcm1cIixcIm9uTGF5b3V0QW5pbWF0aW9uQ29tcGxldGVcIixcIm9uVmlld3BvcnRCb3hVcGRhdGVcIixcIm9uTGF5b3V0TWVhc3VyZVwiLFwib25CZWZvcmVMYXlvdXRNZWFzdXJlXCIsXCJvbkFuaW1hdGlvblN0YXJ0XCIsXCJvbkFuaW1hdGlvbkNvbXBsZXRlXCIsXCJvblVwZGF0ZVwiLFwib25EcmFnU3RhcnRcIixcIm9uRHJhZ1wiLFwib25EcmFnRW5kXCIsXCJvbk1lYXN1cmVEcmFnQ29uc3RyYWludHNcIixcIm9uRGlyZWN0aW9uTG9ja1wiLFwib25EcmFnVHJhbnNpdGlvbkVuZFwiLFwiZHJhZ1wiLFwiZHJhZ0NvbnRyb2xzXCIsXCJkcmFnTGlzdGVuZXJcIixcImRyYWdDb25zdHJhaW50c1wiLFwiZHJhZ0RpcmVjdGlvbkxvY2tcIixcIl9kcmFnWFwiLFwiX2RyYWdZXCIsXCJkcmFnRWxhc3RpY1wiLFwiZHJhZ01vbWVudHVtXCIsXCJkcmFnUHJvcGFnYXRpb25cIixcImRyYWdUcmFuc2l0aW9uXCIsXCJ3aGlsZURyYWdcIixcIm9uUGFuXCIsXCJvblBhblN0YXJ0XCIsXCJvblBhbkVuZFwiLFwib25QYW5TZXNzaW9uU3RhcnRcIixcIm9uVGFwXCIsXCJvblRhcFN0YXJ0XCIsXCJvblRhcENhbmNlbFwiLFwib25Ib3ZlclN0YXJ0XCIsXCJvbkhvdmVyRW5kXCIsXCJ3aGlsZUZvY3VzXCIsXCJ3aGlsZVRhcFwiLFwid2hpbGVIb3ZlclwiXSk7ZnVuY3Rpb24gZmUoZSl7cmV0dXJuIHVlLmhhcyhlKX12YXIgZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIWZlKGUpfTt0cnl7dmFyIHBlPW4oODU5NCkuWjtkZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKFwib25cIik/IWZlKGUpOnBlKGUpfX1jYXRjaChlKXt9ZnVuY3Rpb24gaGUoZSx0LG4pe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP2U6YS5weC50cmFuc2Zvcm0odCtuKmUpfXZhciBnZT1mdW5jdGlvbihlLHQpe3JldHVybiBhLnB4LnRyYW5zZm9ybShlKnQpfSx2ZT17b2Zmc2V0Olwic3Ryb2tlLWRhc2hvZmZzZXRcIixhcnJheTpcInN0cm9rZS1kYXNoYXJyYXlcIn0sbWU9e29mZnNldDpcInN0cm9rZURhc2hvZmZzZXRcIixhcnJheTpcInN0cm9rZURhc2hhcnJheVwifTtmdW5jdGlvbiBDZShlLHQsbixvLGksYSxsLHMpe3ZhciBjPXQuYXR0clgsdT10LmF0dHJZLGY9dC5vcmlnaW5YLGQ9dC5vcmlnaW5ZLHA9dC5wYXRoTGVuZ3RoLGg9dC5wYXRoU3BhY2luZyxnPXZvaWQgMD09PWg/MTpoLHY9dC5wYXRoT2Zmc2V0LG09dm9pZCAwPT09dj8wOnY7YWUoZSxyLl9fcmVzdCh0LFtcImF0dHJYXCIsXCJhdHRyWVwiLFwib3JpZ2luWFwiLFwib3JpZ2luWVwiLFwicGF0aExlbmd0aFwiLFwicGF0aFNwYWNpbmdcIixcInBhdGhPZmZzZXRcIl0pLG4sbyxpLGEsbCxzKSxlLmF0dHJzPWUuc3R5bGUsZS5zdHlsZT17fTt2YXIgQz1lLmF0dHJzLHk9ZS5zdHlsZSx3PWUuZGltZW5zaW9ucyxiPWUudG90YWxQYXRoTGVuZ3RoO0MudHJhbnNmb3JtJiYodyYmKHkudHJhbnNmb3JtPUMudHJhbnNmb3JtKSxkZWxldGUgQy50cmFuc2Zvcm0pLHcmJih2b2lkIDAhPT1mfHx2b2lkIDAhPT1kfHx5LnRyYW5zZm9ybSkmJih5LnRyYW5zZm9ybU9yaWdpbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGhlKHQsZS54LGUud2lkdGgpK1wiIFwiK2hlKG4sZS55LGUuaGVpZ2h0KX0odyx2b2lkIDAhPT1mP2Y6LjUsdm9pZCAwIT09ZD9kOi41KSksdm9pZCAwIT09YyYmKEMueD1jKSx2b2lkIDAhPT11JiYoQy55PXUpLHZvaWQgMCE9PWImJnZvaWQgMCE9PXAmJmZ1bmN0aW9uKGUsdCxuLHIsbyxpKXt2b2lkIDA9PT1yJiYocj0xKSx2b2lkIDA9PT1vJiYobz0wKSx2b2lkIDA9PT1pJiYoaT0hMCk7dmFyIGE9aT92ZTptZTtlW2Eub2Zmc2V0XT1nZSgtbyx0KTt2YXIgbD1nZShuLHQpLHM9Z2Uocix0KTtlW2EuYXJyYXldPWwrXCIgXCIrc30oQyxiLHAsZyxtLCExKX12YXIgeWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGxlKCkpLHthdHRyczp7fX0pfTtmdW5jdGlvbiB3ZShlLHQpe3ZhciBuPW8udXNlTWVtbygoZnVuY3Rpb24oKXt2YXIgbj15ZSgpO3JldHVybiBDZShuLHQsdm9pZCAwLHZvaWQgMCx7ZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246ITF9LGUudHJhbnNmb3JtVGVtcGxhdGUpLHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxuLmF0dHJzKSx7c3R5bGU6ci5fX2Fzc2lnbih7fSxuLnN0eWxlKX0pfSksW3RdKTtpZihlLnN0eWxlKXt2YXIgaT17fTtzZShpLGUuc3R5bGUsZSksbi5zdHlsZT1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30saSksbi5zdHlsZSl9cmV0dXJuIG59ZnVuY3Rpb24gYmUoZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxmdW5jdGlvbih0LG4saSxhLGwpe3ZhciBzPWEubGF0ZXN0VmFsdWVzLGM9KEYodCk/d2U6Y2UpKG4scyxsKSx1PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj17fTtmb3IodmFyIG8gaW4gZSkoZGUobyl8fCEwPT09biYmZmUobyl8fCF0JiYhZmUobykpJiYocltvXT1lW29dKTtyZXR1cm4gcn0obixcInN0cmluZ1wiPT10eXBlb2YgdCxlKSxmPXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHUpLGMpLHtyZWY6aX0pO3JldHVybiBvLmNyZWF0ZUVsZW1lbnQodCxmKX19dmFyIHhlPS8oW2Etel0pKFtBLVpdKS9nLF9lPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoeGUsXCIkMS0kMlwiKS50b0xvd2VyQ2FzZSgpfTtmdW5jdGlvbiBPZShlLHQpe3ZhciBuPXQuc3R5bGUscj10LnZhcnM7Zm9yKHZhciBvIGluIE9iamVjdC5hc3NpZ24oZS5zdHlsZSxuKSxyKWUuc3R5bGUuc2V0UHJvcGVydHkobyxyW29dKX12YXIgTGU9bmV3IFNldChbXCJiYXNlRnJlcXVlbmN5XCIsXCJkaWZmdXNlQ29uc3RhbnRcIixcImtlcm5lbE1hdHJpeFwiLFwia2VybmVsVW5pdExlbmd0aFwiLFwia2V5U3BsaW5lc1wiLFwia2V5VGltZXNcIixcImxpbWl0aW5nQ29uZUFuZ2xlXCIsXCJtYXJrZXJIZWlnaHRcIixcIm1hcmtlcldpZHRoXCIsXCJudW1PY3RhdmVzXCIsXCJ0YXJnZXRYXCIsXCJ0YXJnZXRZXCIsXCJzdXJmYWNlU2NhbGVcIixcInNwZWN1bGFyQ29uc3RhbnRcIixcInNwZWN1bGFyRXhwb25lbnRcIixcInN0ZERldmlhdGlvblwiLFwidGFibGVWYWx1ZXNcIixcInZpZXdCb3hcIixcImdyYWRpZW50VHJhbnNmb3JtXCJdKTtmdW5jdGlvbiBFZShlLHQpe2Zvcih2YXIgbiBpbiBPZShlLHQpLHQuYXR0cnMpZS5zZXRBdHRyaWJ1dGUoTGUuaGFzKG4pP246X2UobiksdC5hdHRyc1tuXSl9ZnVuY3Rpb24gU2UoZSl7dmFyIHQ9ZS5zdHlsZSxuPXt9O2Zvcih2YXIgciBpbiB0KShlZSh0W3JdKXx8UShyLGUpKSYmKG5bcl09dFtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gamUoZSl7dmFyIHQ9U2UoZSk7Zm9yKHZhciBuIGluIGUpZWUoZVtuXSkmJih0W1wieFwiPT09bnx8XCJ5XCI9PT1uP1wiYXR0clwiK24udG9VcHBlckNhc2UoKTpuXT1lW25dKTtyZXR1cm4gdH1mdW5jdGlvbiBNZShlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5zdGFydH12YXIga2U9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9LFJlPWZ1bmN0aW9uKGUpe3JldHVybiBCb29sZWFuKGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLm1peCYmZS50b1ZhbHVlKX0sUGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGtlKGUpP2VbZS5sZW5ndGgtMV18fDA6ZX07ZnVuY3Rpb24gSWUoZSl7dmFyIHQ9ZWUoZSk/ZS5nZXQoKTplO3JldHVybiBSZSh0KT90LnRvVmFsdWUoKTp0fWZ1bmN0aW9uIEFlKGUsdCxuLHIpe3ZhciBvPWUuc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzLGk9ZS5jcmVhdGVSZW5kZXJTdGF0ZSxhPWUub25Nb3VudCxsPXtsYXRlc3RWYWx1ZXM6SGUodCxuLHIsbykscmVuZGVyU3RhdGU6aSgpfTtyZXR1cm4gYSYmKGwubW91bnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGEodCxlLGwpfSksbH12YXIgVGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9by51c2VDb250ZXh0KHcpLGk9by51c2VDb250ZXh0KHgpO3JldHVybiBuP0FlKGUsdCxyLGkpOl8oKGZ1bmN0aW9uKCl7cmV0dXJuIEFlKGUsdCxyLGkpfSkpfX07ZnVuY3Rpb24gSGUoZSx0LG4sbyl7dmFyIGk9e30sYT0hMT09PShudWxsPT1uP3ZvaWQgMDpuLmluaXRpYWwpLGw9byhlKTtmb3IodmFyIHMgaW4gbClpW3NdPUllKGxbc10pO3ZhciBjPWUuaW5pdGlhbCx1PWUuYW5pbWF0ZSxmPUIoZSksZD1WKGUpO3QmJmQmJiFmJiYhMSE9PWUuaW5oZXJpdCYmKG51bGwhPWN8fChjPXQuaW5pdGlhbCksbnVsbCE9dXx8KHU9dC5hbmltYXRlKSk7dmFyIHA9YXx8ITE9PT1jP3U6YztyZXR1cm4gcCYmXCJib29sZWFuXCIhPXR5cGVvZiBwJiYhTWUocCkmJihBcnJheS5pc0FycmF5KHApP3A6W3BdKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1UKGUsdCk7aWYobil7dmFyIG89bi50cmFuc2l0aW9uRW5kO24udHJhbnNpdGlvbjt2YXIgYT1yLl9fcmVzdChuLFtcInRyYW5zaXRpb25FbmRcIixcInRyYW5zaXRpb25cIl0pO2Zvcih2YXIgbCBpbiBhKWlbbF09YVtsXTtmb3IodmFyIGwgaW4gbylpW2xdPW9bbF19fSkpLGl9dmFyIEJlLFZlPXt1c2VWaXN1YWxTdGF0ZTpUZSh7c2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOmplLGNyZWF0ZVJlbmRlclN0YXRlOnllLG9uTW91bnQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4ucmVuZGVyU3RhdGUsbz1uLmxhdGVzdFZhbHVlczt0cnl7ci5kaW1lbnNpb25zPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZ2V0QkJveD90LmdldEJCb3goKTp0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWNhdGNoKGUpe3IuZGltZW5zaW9ucz17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfX1cInBhdGhcIj09PXQudGFnTmFtZSYmKHIudG90YWxQYXRoTGVuZ3RoPXQuZ2V0VG90YWxMZW5ndGgoKSksQ2UocixvLHZvaWQgMCx2b2lkIDAse2VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiExfSxlLnRyYW5zZm9ybVRlbXBsYXRlKSxFZSh0LHIpfX0pfSxEZT17dXNlVmlzdWFsU3RhdGU6VGUoe3NjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczpTZSxjcmVhdGVSZW5kZXJTdGF0ZTpsZX0pfTtmdW5jdGlvbiBaZShlLHQsbixvKXt2YXIgaT10LmZvcndhcmRNb3Rpb25Qcm9wcyxhPXZvaWQgMCE9PWkmJmksbD1GKGUpP1ZlOkRlO3JldHVybiByLl9fYXNzaWduKHIuX19hc3NpZ24oe30sbCkse3ByZWxvYWRlZEZlYXR1cmVzOm4sdXNlUmVuZGVyOmJlKGEpLGNyZWF0ZVZpc3VhbEVsZW1lbnQ6byxDb21wb25lbnQ6ZX0pfWZ1bmN0aW9uICRlKGUsdCxuLHIpe3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIodCxuLHIpLGZ1bmN0aW9uKCl7cmV0dXJuIGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4scil9fWZ1bmN0aW9uIE5lKGUsdCxuLHIpe28udXNlRWZmZWN0KChmdW5jdGlvbigpe3ZhciBvPWUuY3VycmVudDtpZihuJiZvKXJldHVybiAkZShvLHQsbixyKX0pLFtlLHQsbixyXSl9ZnVuY3Rpb24gRmUoZSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFBvaW50ZXJFdmVudCYmZSBpbnN0YW5jZW9mIFBvaW50ZXJFdmVudD8hKFwibW91c2VcIiE9PWUucG9pbnRlclR5cGUpOmUgaW5zdGFuY2VvZiBNb3VzZUV2ZW50fWZ1bmN0aW9uIFVlKGUpe3JldHVybiEhZS50b3VjaGVzfSFmdW5jdGlvbihlKXtlLkFuaW1hdGU9XCJhbmltYXRlXCIsZS5Ib3Zlcj1cIndoaWxlSG92ZXJcIixlLlRhcD1cIndoaWxlVGFwXCIsZS5EcmFnPVwid2hpbGVEcmFnXCIsZS5Gb2N1cz1cIndoaWxlRm9jdXNcIixlLkV4aXQ9XCJleGl0XCJ9KEJlfHwoQmU9e30pKTt2YXIgV2U9e3BhZ2VYOjAscGFnZVk6MH07ZnVuY3Rpb24gemUoZSx0KXt2b2lkIDA9PT10JiYodD1cInBhZ2VcIik7dmFyIG49ZS50b3VjaGVzWzBdfHxlLmNoYW5nZWRUb3VjaGVzWzBdfHxXZTtyZXR1cm57eDpuW3QrXCJYXCJdLHk6blt0K1wiWVwiXX19ZnVuY3Rpb24gR2UoZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9XCJwYWdlXCIpLHt4OmVbdCtcIlhcIl0seTplW3QrXCJZXCJdfX1mdW5jdGlvbiBxZShlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1cInBhZ2VcIikse3BvaW50OlVlKGUpP3plKGUsdCk6R2UoZSx0KX19dmFyIFllPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBuLHI9ZnVuY3Rpb24odCl7cmV0dXJuIGUodCxxZSh0KSl9O3JldHVybiB0PyhuPXIsZnVuY3Rpb24oZSl7dmFyIHQ9ZSBpbnN0YW5jZW9mIE1vdXNlRXZlbnQ7KCF0fHx0JiYwPT09ZS5idXR0b24pJiZuKGUpfSk6cn0sS2U9ZnVuY3Rpb24oKXtyZXR1cm4gayYmbnVsbD09PXdpbmRvdy5vbnBvaW50ZXJkb3dufSxYZT1mdW5jdGlvbigpe3JldHVybiBrJiZudWxsPT09d2luZG93Lm9udG91Y2hzdGFydH0sSmU9ZnVuY3Rpb24oKXtyZXR1cm4gayYmbnVsbD09PXdpbmRvdy5vbm1vdXNlZG93bn0sUWU9e3BvaW50ZXJkb3duOlwibW91c2Vkb3duXCIscG9pbnRlcm1vdmU6XCJtb3VzZW1vdmVcIixwb2ludGVydXA6XCJtb3VzZXVwXCIscG9pbnRlcmNhbmNlbDpcIm1vdXNlY2FuY2VsXCIscG9pbnRlcm92ZXI6XCJtb3VzZW92ZXJcIixwb2ludGVyb3V0OlwibW91c2VvdXRcIixwb2ludGVyZW50ZXI6XCJtb3VzZWVudGVyXCIscG9pbnRlcmxlYXZlOlwibW91c2VsZWF2ZVwifSxldD17cG9pbnRlcmRvd246XCJ0b3VjaHN0YXJ0XCIscG9pbnRlcm1vdmU6XCJ0b3VjaG1vdmVcIixwb2ludGVydXA6XCJ0b3VjaGVuZFwiLHBvaW50ZXJjYW5jZWw6XCJ0b3VjaGNhbmNlbFwifTtmdW5jdGlvbiB0dChlKXtyZXR1cm4gS2UoKT9lOlhlKCk/ZXRbZV06SmUoKT9RZVtlXTplfWZ1bmN0aW9uIG50KGUsdCxuLHIpe3JldHVybiAkZShlLHR0KHQpLFllKG4sXCJwb2ludGVyZG93blwiPT09dCkscil9ZnVuY3Rpb24gcnQoZSx0LG4scil7cmV0dXJuIE5lKGUsdHQodCksbiYmWWUobixcInBvaW50ZXJkb3duXCI9PT10KSxyKX1mdW5jdGlvbiBvdChlKXt2YXIgdD1udWxsO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBudWxsPT09dCYmKHQ9ZSxmdW5jdGlvbigpe3Q9bnVsbH0pfX12YXIgaXQ9b3QoXCJkcmFnSG9yaXpvbnRhbFwiKSxhdD1vdChcImRyYWdWZXJ0aWNhbFwiKTtmdW5jdGlvbiBsdChlKXt2YXIgdD0hMTtpZihcInlcIj09PWUpdD1hdCgpO2Vsc2UgaWYoXCJ4XCI9PT1lKXQ9aXQoKTtlbHNle3ZhciBuPWl0KCkscj1hdCgpO24mJnI/dD1mdW5jdGlvbigpe24oKSxyKCl9OihuJiZuKCksciYmcigpKX1yZXR1cm4gdH1mdW5jdGlvbiBzdCgpe3ZhciBlPWx0KCEwKTtyZXR1cm4hZXx8KGUoKSwhMSl9ZnVuY3Rpb24gY3QoZSx0LG4pe3JldHVybiBmdW5jdGlvbihyLG8pe3ZhciBpO0ZlKHIpJiYhc3QoKSYmKG51bGw9PW58fG4ocixvKSxudWxsPT09KGk9ZS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PWl8fGkuc2V0QWN0aXZlKEJlLkhvdmVyLHQpKX19dmFyIHV0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuISF0JiYoZT09PXR8fHV0KGUsdC5wYXJlbnRFbGVtZW50KSl9O2Z1bmN0aW9uIGZ0KGUpe3JldHVybiBvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSgpfX0pLFtdKX12YXIgZHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpLG51bGx9fSxwdD17dGFwOmR0KChmdW5jdGlvbihlKXt2YXIgdD1lLm9uVGFwLG49ZS5vblRhcFN0YXJ0LHI9ZS5vblRhcENhbmNlbCxpPWUud2hpbGVUYXAsYT1lLnZpc3VhbEVsZW1lbnQscz10fHxufHxyfHxpLGM9by51c2VSZWYoITEpLHU9by51c2VSZWYobnVsbCk7ZnVuY3Rpb24gZigpe3ZhciBlO251bGw9PT0oZT11LmN1cnJlbnQpfHx2b2lkIDA9PT1lfHxlLmNhbGwodSksdS5jdXJyZW50PW51bGx9ZnVuY3Rpb24gZCgpe3ZhciBlO3JldHVybiBmKCksYy5jdXJyZW50PSExLG51bGw9PT0oZT1hLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZXx8ZS5zZXRBY3RpdmUoQmUuVGFwLCExKSwhc3QoKX1mdW5jdGlvbiBwKGUsbil7ZCgpJiYodXQoYS5nZXRJbnN0YW5jZSgpLGUudGFyZ2V0KT9udWxsPT10fHx0KGUsbik6bnVsbD09cnx8cihlLG4pKX1mdW5jdGlvbiBoKGUsdCl7ZCgpJiYobnVsbD09cnx8cihlLHQpKX1ydChhLFwicG9pbnRlcmRvd25cIixzP2Z1bmN0aW9uKGUsdCl7dmFyIHI7ZigpLGMuY3VycmVudHx8KGMuY3VycmVudD0hMCx1LmN1cnJlbnQ9bC5waXBlKG50KHdpbmRvdyxcInBvaW50ZXJ1cFwiLHApLG50KHdpbmRvdyxcInBvaW50ZXJjYW5jZWxcIixoKSksbnVsbD09bnx8bihlLHQpLG51bGw9PT0ocj1hLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09cnx8ci5zZXRBY3RpdmUoQmUuVGFwLCEwKSl9OnZvaWQgMCksZnQoZil9KSksZm9jdXM6ZHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUud2hpbGVGb2N1cyxuPWUudmlzdWFsRWxlbWVudDtOZShuLFwiZm9jdXNcIix0P2Z1bmN0aW9uKCl7dmFyIGU7bnVsbD09PShlPW4uYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1lfHxlLnNldEFjdGl2ZShCZS5Gb2N1cywhMCl9OnZvaWQgMCksTmUobixcImJsdXJcIix0P2Z1bmN0aW9uKCl7dmFyIGU7bnVsbD09PShlPW4uYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1lfHxlLnNldEFjdGl2ZShCZS5Gb2N1cywhMSl9OnZvaWQgMCl9KSksaG92ZXI6ZHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUub25Ib3ZlclN0YXJ0LG49ZS5vbkhvdmVyRW5kLHI9ZS53aGlsZUhvdmVyLG89ZS52aXN1YWxFbGVtZW50O3J0KG8sXCJwb2ludGVyZW50ZXJcIix0fHxyP2N0KG8sITAsdCk6dm9pZCAwKSxydChvLFwicG9pbnRlcmxlYXZlXCIsbnx8cj9jdChvLCExLG4pOnZvaWQgMCl9KSl9O2Z1bmN0aW9uIGh0KGUsdCl7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuITE7dmFyIG49dC5sZW5ndGg7aWYobiE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wO3I8bjtyKyspaWYodFtyXSE9PWVbcl0pcmV0dXJuITE7cmV0dXJuITB9dmFyIGd0PWZ1bmN0aW9uKGUpe3JldHVybiAxZTMqZX0sdnQ9e2xpbmVhcjpsLmxpbmVhcixlYXNlSW46bC5lYXNlSW4sZWFzZUluT3V0OmwuZWFzZUluT3V0LGVhc2VPdXQ6bC5lYXNlT3V0LGNpcmNJbjpsLmNpcmNJbixjaXJjSW5PdXQ6bC5jaXJjSW5PdXQsY2lyY091dDpsLmNpcmNPdXQsYmFja0luOmwuYmFja0luLGJhY2tJbk91dDpsLmJhY2tJbk91dCxiYWNrT3V0OmwuYmFja091dCxhbnRpY2lwYXRlOmwuYW50aWNpcGF0ZSxib3VuY2VJbjpsLmJvdW5jZUluLGJvdW5jZUluT3V0OmwuYm91bmNlSW5PdXQsYm91bmNlT3V0OmwuYm91bmNlT3V0fSxtdD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtpLmludmFyaWFudCg0PT09ZS5sZW5ndGgsXCJDdWJpYyBiZXppZXIgYXJyYXlzIG11c3QgY29udGFpbiBmb3VyIG51bWVyaWNhbCB2YWx1ZXMuXCIpO3ZhciB0PXIuX19yZWFkKGUsNCksbj10WzBdLG89dFsxXSxhPXRbMl0scz10WzNdO3JldHVybiBsLmN1YmljQmV6aWVyKG4sbyxhLHMpfXJldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlPyhpLmludmFyaWFudCh2b2lkIDAhPT12dFtlXSxcIkludmFsaWQgZWFzaW5nIHR5cGUgJ1wiK2UrXCInXCIpLHZ0W2VdKTplfSxDdD1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmXCJudW1iZXJcIiE9dHlwZW9mIGVbMF19LHl0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIShcInpJbmRleFwiPT09ZXx8XCJudW1iZXJcIiE9dHlwZW9mIHQmJiFBcnJheS5pc0FycmF5KHQpJiYoXCJzdHJpbmdcIiE9dHlwZW9mIHR8fCFhLmNvbXBsZXgudGVzdCh0KXx8dC5zdGFydHNXaXRoKFwidXJsKFwiKSkpfSx3dD1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwic3ByaW5nXCIsc3RpZmZuZXNzOjUwMCxkYW1waW5nOjI1LHJlc3REZWx0YTouNSxyZXN0U3BlZWQ6MTB9fSxidD1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTpcInNwcmluZ1wiLHN0aWZmbmVzczo1NTAsZGFtcGluZzowPT09ZT8yKk1hdGguc3FydCg1NTApOjMwLHJlc3REZWx0YTouMDEscmVzdFNwZWVkOjEwfX0seHQ9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcImtleWZyYW1lc1wiLGVhc2U6XCJsaW5lYXJcIixkdXJhdGlvbjouM319LF90PWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOlwia2V5ZnJhbWVzXCIsZHVyYXRpb246LjgsdmFsdWVzOmV9fSxPdD17eDp3dCx5Ond0LHo6d3Qscm90YXRlOnd0LHJvdGF0ZVg6d3Qscm90YXRlWTp3dCxyb3RhdGVaOnd0LHNjYWxlWDpidCxzY2FsZVk6YnQsc2NhbGU6YnQsb3BhY2l0eTp4dCxiYWNrZ3JvdW5kQ29sb3I6eHQsY29sb3I6eHQsZGVmYXVsdDpidH0sTHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbj1rZSh0KT9fdDpPdFtlXXx8T3QuZGVmYXVsdCxyLl9fYXNzaWduKHt0bzp0fSxuKHQpKX0sRXQ9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGllKSx7Y29sb3I6YS5jb2xvcixiYWNrZ3JvdW5kQ29sb3I6YS5jb2xvcixvdXRsaW5lQ29sb3I6YS5jb2xvcixmaWxsOmEuY29sb3Isc3Ryb2tlOmEuY29sb3IsYm9yZGVyQ29sb3I6YS5jb2xvcixib3JkZXJUb3BDb2xvcjphLmNvbG9yLGJvcmRlclJpZ2h0Q29sb3I6YS5jb2xvcixib3JkZXJCb3R0b21Db2xvcjphLmNvbG9yLGJvcmRlckxlZnRDb2xvcjphLmNvbG9yLGZpbHRlcjphLmZpbHRlcixXZWJraXRGaWx0ZXI6YS5maWx0ZXJ9KSxTdD1mdW5jdGlvbihlKXtyZXR1cm4gRXRbZV19O2Z1bmN0aW9uIGp0KGUsdCl7dmFyIG4scj1TdChlKTtyZXR1cm4gciE9PWEuZmlsdGVyJiYocj1hLmNvbXBsZXgpLG51bGw9PT0obj1yLmdldEFuaW1hdGFibGVOb25lKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jYWxsKHIsdCl9dmFyIE10PSExO2Z1bmN0aW9uIGt0KGUpe3JldHVybiAwPT09ZXx8XCJzdHJpbmdcIj09dHlwZW9mIGUmJjA9PT1wYXJzZUZsb2F0KGUpJiYtMT09PWUuaW5kZXhPZihcIiBcIil9ZnVuY3Rpb24gUnQoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/MDpqdChcIlwiLGUpfWZ1bmN0aW9uIFB0KGUsdCl7cmV0dXJuIGVbdF18fGUuZGVmYXVsdHx8ZX1mdW5jdGlvbiBJdChlLHQsbixvKXtyZXR1cm4gdm9pZCAwPT09byYmKG89e30pLHQuc3RhcnQoKGZ1bmN0aW9uKGEpe3ZhciBzLGMsdT1mdW5jdGlvbihlLHQsbixvLGEpe3ZhciBzLGM9UHQobyxlKSx1PW51bGwhPT0ocz1jLmZyb20pJiZ2b2lkIDAhPT1zP3M6dC5nZXQoKSxmPXl0KGUsbik7XCJub25lXCI9PT11JiZmJiZcInN0cmluZ1wiPT10eXBlb2Ygbj91PWp0KGUsbik6a3QodSkmJlwic3RyaW5nXCI9PXR5cGVvZiBuP3U9UnQobik6IUFycmF5LmlzQXJyYXkobikmJmt0KG4pJiZcInN0cmluZ1wiPT10eXBlb2YgdSYmKG49UnQodSkpO3ZhciBkPXl0KGUsdSk7cmV0dXJuIGkud2FybmluZyhkPT09ZixcIllvdSBhcmUgdHJ5aW5nIHRvIGFuaW1hdGUgXCIrZSsnIGZyb20gXCInK3UrJ1wiIHRvIFwiJytuKydcIi4gJyt1K1wiIGlzIG5vdCBhbiBhbmltYXRhYmxlIHZhbHVlIC0gdG8gZW5hYmxlIHRoaXMgYW5pbWF0aW9uIHNldCBcIit1K1wiIHRvIGEgdmFsdWUgYW5pbWF0YWJsZSB0byBcIituK1wiIHZpYSB0aGUgYHN0eWxlYCBwcm9wZXJ0eS5cIiksZCYmZiYmITEhPT1jLnR5cGU/ZnVuY3Rpb24oKXt2YXIgbz17ZnJvbTp1LHRvOm4sdmVsb2NpdHk6dC5nZXRWZWxvY2l0eSgpLG9uQ29tcGxldGU6YSxvblVwZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5zZXQoZSl9fTtyZXR1cm5cImluZXJ0aWFcIj09PWMudHlwZXx8XCJkZWNheVwiPT09Yy50eXBlP2wuaW5lcnRpYShyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sbyksYykpOmwuYW5pbWF0ZShyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sZnVuY3Rpb24oZSx0LG4pe3ZhciBvO3JldHVybiBBcnJheS5pc0FycmF5KHQudG8pJiYobnVsbCE9PShvPWUuZHVyYXRpb24pJiZ2b2lkIDAhPT1vfHwoZS5kdXJhdGlvbj0uOCkpLGZ1bmN0aW9uKGUpe0FycmF5LmlzQXJyYXkoZS50bykmJm51bGw9PT1lLnRvWzBdJiYoZS50bz1yLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQoZS50bykpLGUudG9bMF09ZS5mcm9tKX0odCksZnVuY3Rpb24oZSl7ZS53aGVuLGUuZGVsYXksZS5kZWxheUNoaWxkcmVuLGUuc3RhZ2dlckNoaWxkcmVuLGUuc3RhZ2dlckRpcmVjdGlvbixlLnJlcGVhdCxlLnJlcGVhdFR5cGUsZS5yZXBlYXREZWxheSxlLmZyb207dmFyIHQ9ci5fX3Jlc3QoZSxbXCJ3aGVuXCIsXCJkZWxheVwiLFwiZGVsYXlDaGlsZHJlblwiLFwic3RhZ2dlckNoaWxkcmVuXCIsXCJzdGFnZ2VyRGlyZWN0aW9uXCIsXCJyZXBlYXRcIixcInJlcGVhdFR5cGVcIixcInJlcGVhdERlbGF5XCIsXCJmcm9tXCJdKTtyZXR1cm4hIU9iamVjdC5rZXlzKHQpLmxlbmd0aH0oZSl8fChlPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxlKSxMdChuLHQudG8pKSksci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHQpLGZ1bmN0aW9uKGUpe3ZhciB0PWUuZWFzZSxuPWUudGltZXMsbz1lLnlveW8sYT1lLmZsaXAsbD1lLmxvb3Ascz1yLl9fcmVzdChlLFtcImVhc2VcIixcInRpbWVzXCIsXCJ5b3lvXCIsXCJmbGlwXCIsXCJsb29wXCJdKSxjPXIuX19hc3NpZ24oe30scyk7cmV0dXJuIG4mJihjLm9mZnNldD1uKSxzLmR1cmF0aW9uJiYoYy5kdXJhdGlvbj1ndChzLmR1cmF0aW9uKSkscy5yZXBlYXREZWxheSYmKGMucmVwZWF0RGVsYXk9Z3Qocy5yZXBlYXREZWxheSkpLHQmJihjLmVhc2U9Q3QodCk/dC5tYXAobXQpOm10KHQpKSxcInR3ZWVuXCI9PT1zLnR5cGUmJihjLnR5cGU9XCJrZXlmcmFtZXNcIiksKG98fGx8fGEpJiYoaS53YXJuaW5nKCFNdCxcInlveW8sIGxvb3AgYW5kIGZsaXAgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgQVBJLiBSZXBsYWNlIHdpdGggcmVwZWF0IGFuZCByZXBlYXRUeXBlIG9wdGlvbnMuXCIpLE10PSEwLG8/Yy5yZXBlYXRUeXBlPVwicmV2ZXJzZVwiOmw/Yy5yZXBlYXRUeXBlPVwibG9vcFwiOmEmJihjLnJlcGVhdFR5cGU9XCJtaXJyb3JcIiksYy5yZXBlYXQ9bHx8b3x8YXx8cy5yZXBlYXQpLFwic3ByaW5nXCIhPT1zLnR5cGUmJihjLnR5cGU9XCJrZXlmcmFtZXNcIiksY30oZSkpfShjLG8sZSkpLHtvblVwZGF0ZTpmdW5jdGlvbihlKXt2YXIgdDtvLm9uVXBkYXRlKGUpLG51bGw9PT0odD1jLm9uVXBkYXRlKXx8dm9pZCAwPT09dHx8dC5jYWxsKGMsZSl9LG9uQ29tcGxldGU6ZnVuY3Rpb24oKXt2YXIgZTtvLm9uQ29tcGxldGUoKSxudWxsPT09KGU9Yy5vbkNvbXBsZXRlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKGMpfX0pKX06ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdC5zZXQobiksYSgpLG51bGw9PT0oZT1udWxsPT1jP3ZvaWQgMDpjLm9uQ29tcGxldGUpfHx2b2lkIDA9PT1lfHxlLmNhbGwoYykse3N0b3A6ZnVuY3Rpb24oKXt9fX19KGUsdCxuLG8sYSksZj1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsIT09KG49KFB0KGUsdCl8fHt9KS5kZWxheSkmJnZvaWQgMCE9PW4/bjowfShvLGUpLGQ9ZnVuY3Rpb24oKXtyZXR1cm4gYz11KCl9O3JldHVybiBmP3M9c2V0VGltZW91dChkLGd0KGYpKTpkKCksZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQocyksbnVsbD09Y3x8Yy5zdG9wKCl9fSkpfWZ1bmN0aW9uIEF0KGUsdCl7LTE9PT1lLmluZGV4T2YodCkmJmUucHVzaCh0KX1mdW5jdGlvbiBUdChlLHQpe3ZhciBuPWUuaW5kZXhPZih0KTtuPi0xJiZlLnNwbGljZShuLDEpfXZhciBIdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnN1YnNjcmlwdGlvbnM9W119cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBBdCh0aGlzLnN1YnNjcmlwdGlvbnMsZSksZnVuY3Rpb24oKXtyZXR1cm4gVHQodC5zdWJzY3JpcHRpb25zLGUpfX0sZS5wcm90b3R5cGUubm90aWZ5PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLnN1YnNjcmlwdGlvbnMubGVuZ3RoO2lmKHIpaWYoMT09PXIpdGhpcy5zdWJzY3JpcHRpb25zWzBdKGUsdCxuKTtlbHNlIGZvcih2YXIgbz0wO288cjtvKyspe3ZhciBpPXRoaXMuc3Vic2NyaXB0aW9uc1tvXTtpJiZpKGUsdCxuKX19LGUucHJvdG90eXBlLmdldFNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aH0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnN1YnNjcmlwdGlvbnMubGVuZ3RoPTB9LGV9KCksQnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0LG49dGhpczt0aGlzLnRpbWVEZWx0YT0wLHRoaXMubGFzdFVwZGF0ZWQ9MCx0aGlzLnVwZGF0ZVN1YnNjcmliZXJzPW5ldyBIdCx0aGlzLnZlbG9jaXR5VXBkYXRlU3Vic2NyaWJlcnM9bmV3IEh0LHRoaXMucmVuZGVyU3Vic2NyaWJlcnM9bmV3IEh0LHRoaXMuY2FuVHJhY2tWZWxvY2l0eT0hMSx0aGlzLnVwZGF0ZUFuZE5vdGlmeT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSEwKSxuLnByZXY9bi5jdXJyZW50LG4uY3VycmVudD1lO3ZhciByPXMuZ2V0RnJhbWVEYXRhKCksbz1yLmRlbHRhLGk9ci50aW1lc3RhbXA7bi5sYXN0VXBkYXRlZCE9PWkmJihuLnRpbWVEZWx0YT1vLG4ubGFzdFVwZGF0ZWQ9aSxkLmRlZmF1bHQucG9zdFJlbmRlcihuLnNjaGVkdWxlVmVsb2NpdHlDaGVjaykpLG4ucHJldiE9PW4uY3VycmVudCYmbi51cGRhdGVTdWJzY3JpYmVycy5ub3RpZnkobi5jdXJyZW50KSxuLnZlbG9jaXR5VXBkYXRlU3Vic2NyaWJlcnMuZ2V0U2l6ZSgpJiZuLnZlbG9jaXR5VXBkYXRlU3Vic2NyaWJlcnMubm90aWZ5KG4uZ2V0VmVsb2NpdHkoKSksdCYmbi5yZW5kZXJTdWJzY3JpYmVycy5ub3RpZnkobi5jdXJyZW50KX0sdGhpcy5zY2hlZHVsZVZlbG9jaXR5Q2hlY2s9ZnVuY3Rpb24oKXtyZXR1cm4gZC5kZWZhdWx0LnBvc3RSZW5kZXIobi52ZWxvY2l0eUNoZWNrKX0sdGhpcy52ZWxvY2l0eUNoZWNrPWZ1bmN0aW9uKGUpe2UudGltZXN0YW1wIT09bi5sYXN0VXBkYXRlZCYmKG4ucHJldj1uLmN1cnJlbnQsbi52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLm5vdGlmeShuLmdldFZlbG9jaXR5KCkpKX0sdGhpcy5oYXNBbmltYXRlZD0hMSx0aGlzLnByZXY9dGhpcy5jdXJyZW50PWUsdGhpcy5jYW5UcmFja1ZlbG9jaXR5PSh0PXRoaXMuY3VycmVudCwhaXNOYU4ocGFyc2VGbG9hdCh0KSkpfXJldHVybiBlLnByb3RvdHlwZS5vbkNoYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51cGRhdGVTdWJzY3JpYmVycy5hZGQoZSl9LGUucHJvdG90eXBlLmNsZWFyTGlzdGVuZXJzPWZ1bmN0aW9uKCl7dGhpcy51cGRhdGVTdWJzY3JpYmVycy5jbGVhcigpfSxlLnByb3RvdHlwZS5vblJlbmRlclJlcXVlc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGUodGhpcy5nZXQoKSksdGhpcy5yZW5kZXJTdWJzY3JpYmVycy5hZGQoZSl9LGUucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbihlKXt0aGlzLnBhc3NpdmVFZmZlY3Q9ZX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITApLHQmJnRoaXMucGFzc2l2ZUVmZmVjdD90aGlzLnBhc3NpdmVFZmZlY3QoZSx0aGlzLnVwZGF0ZUFuZE5vdGlmeSk6dGhpcy51cGRhdGVBbmROb3RpZnkoZSx0KX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sZS5wcm90b3R5cGUuZ2V0UHJldmlvdXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2fSxlLnByb3RvdHlwZS5nZXRWZWxvY2l0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhblRyYWNrVmVsb2NpdHk/bC52ZWxvY2l0eVBlclNlY29uZChwYXJzZUZsb2F0KHRoaXMuY3VycmVudCktcGFyc2VGbG9hdCh0aGlzLnByZXYpLHRoaXMudGltZURlbHRhKTowfSxlLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLnN0b3AoKSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24obil7dC5oYXNBbmltYXRlZD0hMCx0LnN0b3BBbmltYXRpb249ZShuKX0pKS50aGVuKChmdW5jdGlvbigpe3JldHVybiB0LmNsZWFyQW5pbWF0aW9uKCl9KSl9LGUucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXt0aGlzLnN0b3BBbmltYXRpb24mJnRoaXMuc3RvcEFuaW1hdGlvbigpLHRoaXMuY2xlYXJBbmltYXRpb24oKX0sZS5wcm90b3R5cGUuaXNBbmltYXRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuc3RvcEFuaW1hdGlvbn0sZS5wcm90b3R5cGUuY2xlYXJBbmltYXRpb249ZnVuY3Rpb24oKXt0aGlzLnN0b3BBbmltYXRpb249bnVsbH0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMudXBkYXRlU3Vic2NyaWJlcnMuY2xlYXIoKSx0aGlzLnJlbmRlclN1YnNjcmliZXJzLmNsZWFyKCksdGhpcy5zdG9wKCl9LGV9KCk7ZnVuY3Rpb24gVnQoZSl7cmV0dXJuIG5ldyBCdChlKX12YXIgRHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnRlc3QoZSl9fSxadD1bYS5udW1iZXIsYS5weCxhLnBlcmNlbnQsYS5kZWdyZWVzLGEudncsYS52aCx7dGVzdDpmdW5jdGlvbihlKXtyZXR1cm5cImF1dG9cIj09PWV9LHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlfX1dLCR0PWZ1bmN0aW9uKGUpe3JldHVybiBadC5maW5kKER0KGUpKX0sTnQ9ci5fX3NwcmVhZEFycmF5KHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChadCkpLFthLmNvbG9yLGEuY29tcGxleF0pO2Z1bmN0aW9uIEZ0KGUsdCxuKXtlLmhhc1ZhbHVlKHQpP2UuZ2V0VmFsdWUodCkuc2V0KG4pOmUuYWRkVmFsdWUodCxWdChuKSl9ZnVuY3Rpb24gVXQoZSx0KXt2YXIgbj1IKGUsdCksbz1uP2UubWFrZVRhcmdldEFuaW1hdGFibGUobiwhMSk6e30saT1vLnRyYW5zaXRpb25FbmQsYT12b2lkIDA9PT1pP3t9Omk7by50cmFuc2l0aW9uO3ZhciBsPXIuX19yZXN0KG8sW1widHJhbnNpdGlvbkVuZFwiLFwidHJhbnNpdGlvblwiXSk7Zm9yKHZhciBzIGluIGw9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGwpLGEpKUZ0KGUscyxQZShsW3NdKSl9ZnVuY3Rpb24gV3QoZSx0KXtyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQodCkpLnJldmVyc2UoKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcixvPWUuZ2V0VmFyaWFudChuKTtvJiZVdChlLG8pLG51bGw9PT0ocj1lLnZhcmlhbnRDaGlsZHJlbil8fHZvaWQgMD09PXJ8fHIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7V3QoZSx0KX0pKX0pKX1mdW5jdGlvbiB6dChlLHQsbil7dmFyIHIsbyxpLGwscyxjPU9iamVjdC5rZXlzKHQpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIWUuaGFzVmFsdWUodCl9KSksdT1jLmxlbmd0aDtpZih1KWZvcih2YXIgZj0wO2Y8dTtmKyspe3ZhciBkPWNbZl0scD10W2RdLGg9bnVsbDtBcnJheS5pc0FycmF5KHApJiYoaD1wWzBdKSxudWxsPT09aCYmKGg9bnVsbCE9PShvPW51bGwhPT0ocj1uW2RdKSYmdm9pZCAwIT09cj9yOmUucmVhZFZhbHVlKGQpKSYmdm9pZCAwIT09bz9vOnRbZF0pLG51bGwhPWgmJihcInN0cmluZ1wiPT10eXBlb2YgaCYmL15cXC0/XFxkKlxcLj9cXGQrJC8udGVzdChoKT9oPXBhcnNlRmxvYXQoaCk6KHM9aCwhTnQuZmluZChEdChzKSkmJmEuY29tcGxleC50ZXN0KHApJiYoaD1qdChkLHApKSksZS5hZGRWYWx1ZShkLFZ0KGgpKSxudWxsIT09KGk9KGw9bilbZF0pJiZ2b2lkIDAhPT1pfHwobFtkXT1oKSxlLnNldEJhc2VUYXJnZXQoZCxoKSl9fWZ1bmN0aW9uIEd0KGUsdCl7aWYodClyZXR1cm4odFtlXXx8dC5kZWZhdWx0fHx0KS5mcm9tfWZ1bmN0aW9uIHF0KGUsdCxuKXt2YXIgcixvLGk9e307Zm9yKHZhciBhIGluIGUpaVthXT1udWxsIT09KHI9R3QoYSx0KSkmJnZvaWQgMCE9PXI/cjpudWxsPT09KG89bi5nZXRWYWx1ZShhKSl8fHZvaWQgMD09PW8/dm9pZCAwOm8uZ2V0KCk7cmV0dXJuIGl9ZnVuY3Rpb24gWXQoZSx0LG4pe3ZhciByO2lmKHZvaWQgMD09PW4mJihuPXt9KSxlLm5vdGlmeUFuaW1hdGlvblN0YXJ0KCksQXJyYXkuaXNBcnJheSh0KSl7dmFyIG89dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBLdChlLHQsbil9KSk7cj1Qcm9taXNlLmFsbChvKX1lbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXI9S3QoZSx0LG4pO2Vsc2V7dmFyIGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdD9IKGUsdCxuLmN1c3RvbSk6dDtyPVh0KGUsaSxuKX1yZXR1cm4gci50aGVuKChmdW5jdGlvbigpe3JldHVybiBlLm5vdGlmeUFuaW1hdGlvbkNvbXBsZXRlKHQpfSkpfWZ1bmN0aW9uIEt0KGUsdCxuKXt2YXIgbzt2b2lkIDA9PT1uJiYobj17fSk7dmFyIGk9SChlLHQsbi5jdXN0b20pLGE9KGl8fHt9KS50cmFuc2l0aW9uLGw9dm9pZCAwPT09YT9lLmdldERlZmF1bHRUcmFuc2l0aW9uKCl8fHt9OmE7bi50cmFuc2l0aW9uT3ZlcnJpZGUmJihsPW4udHJhbnNpdGlvbk92ZXJyaWRlKTt2YXIgcz1pP2Z1bmN0aW9uKCl7cmV0dXJuIFh0KGUsaSxuKX06ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LGM9KG51bGw9PT0obz1lLnZhcmlhbnRDaGlsZHJlbil8fHZvaWQgMD09PW8/dm9pZCAwOm8uc2l6ZSk/ZnVuY3Rpb24obyl7dm9pZCAwPT09byYmKG89MCk7dmFyIGk9bC5kZWxheUNoaWxkcmVuLGE9dm9pZCAwPT09aT8wOmkscz1sLnN0YWdnZXJDaGlsZHJlbixjPWwuc3RhZ2dlckRpcmVjdGlvbjtyZXR1cm4gZnVuY3Rpb24oZSx0LG4sbyxpLGEpe3ZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PW8mJihvPTApLHZvaWQgMD09PWkmJihpPTEpO3ZhciBsPVtdLHM9KGUudmFyaWFudENoaWxkcmVuLnNpemUtMSkqbyxjPTE9PT1pP2Z1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0wKSxlKm99OmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0wKSxzLWUqb307cmV0dXJuIEFycmF5LmZyb20oZS52YXJpYW50Q2hpbGRyZW4pLnNvcnQoSnQpLmZvckVhY2goKGZ1bmN0aW9uKGUsbyl7bC5wdXNoKEt0KGUsdCxyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sYSkse2RlbGF5Om4rYyhvKX0pKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBlLm5vdGlmeUFuaW1hdGlvbkNvbXBsZXRlKHQpfSkpKX0pKSxQcm9taXNlLmFsbChsKX0oZSx0LGErbyxzLGMsbil9OmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSx1PWwud2hlbjtpZih1KXt2YXIgZj1yLl9fcmVhZChcImJlZm9yZUNoaWxkcmVuXCI9PT11P1tzLGNdOltjLHNdLDIpLGQ9ZlswXSxwPWZbMV07cmV0dXJuIGQoKS50aGVuKHApfXJldHVybiBQcm9taXNlLmFsbChbcygpLGMobi5kZWxheSldKX1mdW5jdGlvbiBYdChlLHQsbil7dmFyIG8saT12b2lkIDA9PT1uP3t9Om4sYT1pLmRlbGF5LGw9dm9pZCAwPT09YT8wOmEscz1pLnRyYW5zaXRpb25PdmVycmlkZSxjPWkudHlwZSx1PWUubWFrZVRhcmdldEFuaW1hdGFibGUodCksZj11LnRyYW5zaXRpb24sZD12b2lkIDA9PT1mP2UuZ2V0RGVmYXVsdFRyYW5zaXRpb24oKTpmLHA9dS50cmFuc2l0aW9uRW5kLGg9ci5fX3Jlc3QodSxbXCJ0cmFuc2l0aW9uXCIsXCJ0cmFuc2l0aW9uRW5kXCJdKTtzJiYoZD1zKTt2YXIgZz1bXSx2PWMmJihudWxsPT09KG89ZS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8uZ2V0U3RhdGUoKVtjXSk7Zm9yKHZhciBtIGluIGgpe3ZhciBDPWUuZ2V0VmFsdWUobSkseT1oW21dO2lmKCEoIUN8fHZvaWQgMD09PXl8fHYmJlF0KHYsbSkpKXt2YXIgdz1JdChtLEMseSxyLl9fYXNzaWduKHtkZWxheTpsfSxkKSk7Zy5wdXNoKHcpfX1yZXR1cm4gUHJvbWlzZS5hbGwoZykudGhlbigoZnVuY3Rpb24oKXtwJiZVdChlLHApfSkpfWZ1bmN0aW9uIEp0KGUsdCl7cmV0dXJuIGUuc29ydE5vZGVQb3NpdGlvbih0KX1mdW5jdGlvbiBRdChlLHQpe3ZhciBuPWUucHJvdGVjdGVkS2V5cyxyPWUubmVlZHNBbmltYXRpbmcsbz1uLmhhc093blByb3BlcnR5KHQpJiYhMCE9PXJbdF07cmV0dXJuIHJbdF09ITEsb312YXIgZW49W0JlLkFuaW1hdGUsQmUuSG92ZXIsQmUuVGFwLEJlLkRyYWcsQmUuRm9jdXMsQmUuRXhpdF0sdG49ci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKGVuKSkucmV2ZXJzZSgpLG5uPWVuLmxlbmd0aDtmdW5jdGlvbiBybihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLHtpc0FjdGl2ZTplLHByb3RlY3RlZEtleXM6e30sbmVlZHNBbmltYXRpbmc6e30scHJldlJlc29sdmVkVmFsdWVzOnt9fX12YXIgb249e2FuaW1hdGlvbjpkdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS52aXN1YWxFbGVtZW50LG49ZS5hbmltYXRlO3QuYW5pbWF0aW9uU3RhdGV8fCh0LmFuaW1hdGlvblN0YXRlPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLmFsbCh0Lm1hcCgoZnVuY3Rpb24odCl7dmFyIG49dC5hbmltYXRpb24scj10Lm9wdGlvbnM7cmV0dXJuIFl0KGUsbixyKX0pKSl9fShlKSxvPSgodD17fSlbQmUuQW5pbWF0ZV09cm4oITApLHRbQmUuSG92ZXJdPXJuKCksdFtCZS5UYXBdPXJuKCksdFtCZS5EcmFnXT1ybigpLHRbQmUuRm9jdXNdPXJuKCksdFtCZS5FeGl0XT1ybigpLHQpLGk9e30sYT0hMCxsPWZ1bmN0aW9uKHQsbil7dmFyIG89SChlLG4pO2lmKG8pe28udHJhbnNpdGlvbjt2YXIgaT1vLnRyYW5zaXRpb25FbmQsYT1yLl9fcmVzdChvLFtcInRyYW5zaXRpb25cIixcInRyYW5zaXRpb25FbmRcIl0pO3Q9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdCksYSksaSl9cmV0dXJuIHR9O2Z1bmN0aW9uIHModCxzKXtmb3IodmFyIGMsdT1lLmdldFByb3BzKCksZj1lLmdldFZhcmlhbnRDb250ZXh0KCEwKXx8e30sZD1bXSxwPW5ldyBTZXQsaD17fSxnPTEvMCx2PWZ1bmN0aW9uKG4pe3ZhciBpPXRuW25dLHY9b1tpXSxtPW51bGwhPT0oYz11W2ldKSYmdm9pZCAwIT09Yz9jOmZbaV0sQz1BKG0pLHk9aT09PXM/di5pc0FjdGl2ZTpudWxsOyExPT09eSYmKGc9bik7dmFyIHc9bT09PWZbaV0mJm0hPT11W2ldJiZDO2lmKHcmJmEmJmUubWFudWFsbHlBbmltYXRlT25Nb3VudCYmKHc9ITEpLHYucHJvdGVjdGVkS2V5cz1yLl9fYXNzaWduKHt9LGgpLCF2LmlzQWN0aXZlJiZudWxsPT09eXx8IW0mJiF2LnByZXZQcm9wfHxNZShtKXx8XCJib29sZWFuXCI9PXR5cGVvZiBtKXJldHVyblwiY29udGludWVcIjt2YXIgYj1mdW5jdGlvbihlLHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0P3QhPT1lOiEhSSh0KSYmIWh0KHQsZSl9KHYucHJldlByb3AsbSl8fGk9PT1zJiZ2LmlzQWN0aXZlJiYhdyYmQ3x8bj5nJiZDLHg9QXJyYXkuaXNBcnJheShtKT9tOlttXSxfPXgucmVkdWNlKGwse30pOyExPT09eSYmKF89e30pO3ZhciBPPXYucHJldlJlc29sdmVkVmFsdWVzLEw9dm9pZCAwPT09Tz97fTpPLEU9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LEwpLF8pLFM9ZnVuY3Rpb24oZSl7Yj0hMCxwLmRlbGV0ZShlKSx2Lm5lZWRzQW5pbWF0aW5nW2VdPSEwfTtmb3IodmFyIGogaW4gRSl7dmFyIE09X1tqXSxrPUxbal07aC5oYXNPd25Qcm9wZXJ0eShqKXx8KE0hPT1rP2tlKE0pJiZrZShrKT9odChNLGspP3YucHJvdGVjdGVkS2V5c1tqXT0hMDpTKGopOnZvaWQgMCE9PU0/UyhqKTpwLmFkZChqKTp2b2lkIDAhPT1NJiZwLmhhcyhqKT9TKGopOnYucHJvdGVjdGVkS2V5c1tqXT0hMCl9di5wcmV2UHJvcD1tLHYucHJldlJlc29sdmVkVmFsdWVzPV8sdi5pc0FjdGl2ZSYmKGg9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGgpLF8pKSxhJiZlLmJsb2NrSW5pdGlhbEFuaW1hdGlvbiYmKGI9ITEpLGImJiF3JiZkLnB1c2guYXBwbHkoZCxyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQoeC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybnthbmltYXRpb246ZSxvcHRpb25zOnIuX19hc3NpZ24oe3R5cGU6aX0sdCl9fSkpKSkpfSxtPTA7bTxubjttKyspdihtKTtpZihpPXIuX19hc3NpZ24oe30saCkscC5zaXplKXt2YXIgQz17fTtwLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUuZ2V0QmFzZVRhcmdldCh0KTt2b2lkIDAhPT1uJiYoQ1t0XT1uKX0pKSxkLnB1c2goe2FuaW1hdGlvbjpDfSl9dmFyIHk9Qm9vbGVhbihkLmxlbmd0aCk7cmV0dXJuIGEmJiExPT09dS5pbml0aWFsJiYhZS5tYW51YWxseUFuaW1hdGVPbk1vdW50JiYoeT0hMSksYT0hMSx5P24oZCk6UHJvbWlzZS5yZXNvbHZlKCl9cmV0dXJue2lzQW5pbWF0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWlbZV19LGFuaW1hdGVDaGFuZ2VzOnMsc2V0QWN0aXZlOmZ1bmN0aW9uKHQsbixyKXt2YXIgaTtyZXR1cm4gb1t0XS5pc0FjdGl2ZT09PW4/UHJvbWlzZS5yZXNvbHZlKCk6KG51bGw9PT0oaT1lLnZhcmlhbnRDaGlsZHJlbil8fHZvaWQgMD09PWl8fGkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI7cmV0dXJuIG51bGw9PT0ocj1lLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zZXRBY3RpdmUodCxuKX0pKSxvW3RdLmlzQWN0aXZlPW4scyhyLHQpKX0sc2V0QW5pbWF0ZUZ1bmN0aW9uOmZ1bmN0aW9uKHQpe249dChlKX0sZ2V0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gb319fSh0KSksTWUobikmJm8udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiBuLnN1YnNjcmliZSh0KX0pLFtuXSl9KSksZXhpdDpkdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jdXN0b20sbj1lLnZpc3VhbEVsZW1lbnQsaT1yLl9fcmVhZChPKCksMiksYT1pWzBdLGw9aVsxXSxzPW8udXNlQ29udGV4dCh4KTtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXt2YXIgZSxyLG89bnVsbD09PShlPW4uYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnNldEFjdGl2ZShCZS5FeGl0LCFhLHtjdXN0b206bnVsbCE9PShyPW51bGw9PXM/dm9pZCAwOnMuY3VzdG9tKSYmdm9pZCAwIT09cj9yOnR9KTshYSYmKG51bGw9PW98fG8udGhlbihsKSl9KSxbYV0pfSkpfSxhbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3ZhciBvPXRoaXMsaT0odm9pZCAwPT09bj97fTpuKS50cmFuc2Zvcm1QYWdlUG9pbnQ7aWYodGhpcy5zdGFydEV2ZW50PW51bGwsdGhpcy5sYXN0TW92ZUV2ZW50PW51bGwsdGhpcy5sYXN0TW92ZUV2ZW50SW5mbz1udWxsLHRoaXMuaGFuZGxlcnM9e30sdGhpcy51cGRhdGVQb2ludD1mdW5jdGlvbigpe2lmKG8ubGFzdE1vdmVFdmVudCYmby5sYXN0TW92ZUV2ZW50SW5mbyl7dmFyIGU9Y24oby5sYXN0TW92ZUV2ZW50SW5mbyxvLmhpc3RvcnkpLHQ9bnVsbCE9PW8uc3RhcnRFdmVudCxuPWwuZGlzdGFuY2UoZS5vZmZzZXQse3g6MCx5OjB9KT49MztpZih0fHxuKXt2YXIgaT1lLnBvaW50LGE9cy5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXA7by5oaXN0b3J5LnB1c2goci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGkpLHt0aW1lc3RhbXA6YX0pKTt2YXIgYz1vLmhhbmRsZXJzLHU9Yy5vblN0YXJ0LGY9Yy5vbk1vdmU7dHx8KHUmJnUoby5sYXN0TW92ZUV2ZW50LGUpLG8uc3RhcnRFdmVudD1vLmxhc3RNb3ZlRXZlbnQpLGYmJmYoby5sYXN0TW92ZUV2ZW50LGUpfX19LHRoaXMuaGFuZGxlUG9pbnRlck1vdmU9ZnVuY3Rpb24oZSx0KXtvLmxhc3RNb3ZlRXZlbnQ9ZSxvLmxhc3RNb3ZlRXZlbnRJbmZvPWxuKHQsby50cmFuc2Zvcm1QYWdlUG9pbnQpLEZlKGUpJiYwPT09ZS5idXR0b25zP28uaGFuZGxlUG9pbnRlclVwKGUsdCk6ZC5kZWZhdWx0LnVwZGF0ZShvLnVwZGF0ZVBvaW50LCEwKX0sdGhpcy5oYW5kbGVQb2ludGVyVXA9ZnVuY3Rpb24oZSx0KXtvLmVuZCgpO3ZhciBuPW8uaGFuZGxlcnMscj1uLm9uRW5kLGk9bi5vblNlc3Npb25FbmQsYT1jbihsbih0LG8udHJhbnNmb3JtUGFnZVBvaW50KSxvLmhpc3RvcnkpO28uc3RhcnRFdmVudCYmciYmcihlLGEpLGkmJmkoZSxhKX0sIShVZShlKSYmZS50b3VjaGVzLmxlbmd0aD4xKSl7dGhpcy5oYW5kbGVycz10LHRoaXMudHJhbnNmb3JtUGFnZVBvaW50PWk7dmFyIGE9bG4ocWUoZSksdGhpcy50cmFuc2Zvcm1QYWdlUG9pbnQpLGM9YS5wb2ludCx1PXMuZ2V0RnJhbWVEYXRhKCkudGltZXN0YW1wO3RoaXMuaGlzdG9yeT1bci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGMpLHt0aW1lc3RhbXA6dX0pXTt2YXIgZj10Lm9uU2Vzc2lvblN0YXJ0O2YmJmYoZSxjbihhLHRoaXMuaGlzdG9yeSkpLHRoaXMucmVtb3ZlTGlzdGVuZXJzPWwucGlwZShudCh3aW5kb3csXCJwb2ludGVybW92ZVwiLHRoaXMuaGFuZGxlUG9pbnRlck1vdmUpLG50KHdpbmRvdyxcInBvaW50ZXJ1cFwiLHRoaXMuaGFuZGxlUG9pbnRlclVwKSxudCh3aW5kb3csXCJwb2ludGVyY2FuY2VsXCIsdGhpcy5oYW5kbGVQb2ludGVyVXApKX19cmV0dXJuIGUucHJvdG90eXBlLnVwZGF0ZUhhbmRsZXJzPWZ1bmN0aW9uKGUpe3RoaXMuaGFuZGxlcnM9ZX0sZS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVMaXN0ZW5lcnMmJnRoaXMucmVtb3ZlTGlzdGVuZXJzKCkscy5jYW5jZWxTeW5jLnVwZGF0ZSh0aGlzLnVwZGF0ZVBvaW50KX0sZX0oKTtmdW5jdGlvbiBsbihlLHQpe3JldHVybiB0P3twb2ludDp0KGUucG9pbnQpfTplfWZ1bmN0aW9uIHNuKGUsdCl7cmV0dXJue3g6ZS54LXQueCx5OmUueS10Lnl9fWZ1bmN0aW9uIGNuKGUsdCl7dmFyIG49ZS5wb2ludDtyZXR1cm57cG9pbnQ6bixkZWx0YTpzbihuLGZuKHQpKSxvZmZzZXQ6c24obix1bih0KSksdmVsb2NpdHk6ZG4odCwuMSl9fWZ1bmN0aW9uIHVuKGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIGZuKGUpe3JldHVybiBlW2UubGVuZ3RoLTFdfWZ1bmN0aW9uIGRuKGUsdCl7aWYoZS5sZW5ndGg8MilyZXR1cm57eDowLHk6MH07Zm9yKHZhciBuPWUubGVuZ3RoLTEscj1udWxsLG89Zm4oZSk7bj49MCYmKHI9ZVtuXSwhKG8udGltZXN0YW1wLXIudGltZXN0YW1wPmd0KHQpKSk7KW4tLTtpZighcilyZXR1cm57eDowLHk6MH07dmFyIGk9KG8udGltZXN0YW1wLXIudGltZXN0YW1wKS8xZTM7aWYoMD09PWkpcmV0dXJue3g6MCx5OjB9O3ZhciBhPXt4OihvLngtci54KS9pLHk6KG8ueS1yLnkpL2l9O3JldHVybiBhLng9PT0xLzAmJihhLng9MCksYS55PT09MS8wJiYoYS55PTApLGF9ZnVuY3Rpb24gcG4oZSl7cmV0dXJuIGV9ZnVuY3Rpb24gaG4oZSl7dmFyIHQ9ZS50b3A7cmV0dXJue3g6e21pbjplLmxlZnQsbWF4OmUucmlnaHR9LHk6e21pbjp0LG1heDplLmJvdHRvbX19fXZhciBnbj17dHJhbnNsYXRlOjAsc2NhbGU6MSxvcmlnaW46MCxvcmlnaW5Qb2ludDowfTtmdW5jdGlvbiB2bigpe3JldHVybnt4OnIuX19hc3NpZ24oe30sZ24pLHk6ci5fX2Fzc2lnbih7fSxnbil9fWZ1bmN0aW9uIG1uKGUpe3JldHVybltlKFwieFwiKSxlKFwieVwiKV19ZnVuY3Rpb24gQ24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj0uMDEpLGwuZGlzdGFuY2UoZSx0KTxufWZ1bmN0aW9uIHluKGUpe3JldHVybiBlLm1heC1lLm1pbn1mdW5jdGlvbiB3bihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj0uNSksZS5vcmlnaW49cixlLm9yaWdpblBvaW50PWwubWl4KHQubWluLHQubWF4LGUub3JpZ2luKSxlLnNjYWxlPXluKG4pL3luKHQpLENuKGUuc2NhbGUsMSwxZS00KSYmKGUuc2NhbGU9MSksZS50cmFuc2xhdGU9bC5taXgobi5taW4sbi5tYXgsZS5vcmlnaW4pLWUub3JpZ2luUG9pbnQsQ24oZS50cmFuc2xhdGUpJiYoZS50cmFuc2xhdGU9MCl9ZnVuY3Rpb24gYm4oZSx0LG4scil7d24oZS54LHQueCxuLngseG4oci5vcmlnaW5YKSksd24oZS55LHQueSxuLnkseG4oci5vcmlnaW5ZKSl9ZnVuY3Rpb24geG4oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/ZTouNX1mdW5jdGlvbiBfbihlLHQsbil7ZS5taW49bi5taW4rdC5taW4sZS5tYXg9ZS5taW4reW4odCl9ZnVuY3Rpb24gT24oZSx0LG4pe3ZhciByPXQubWluLG89dC5tYXg7cmV0dXJuIHZvaWQgMCE9PXImJmU8cj9lPW4/bC5taXgocixlLG4ubWluKTpNYXRoLm1heChlLHIpOnZvaWQgMCE9PW8mJmU+byYmKGU9bj9sLm1peChvLGUsbi5tYXgpOk1hdGgubWluKGUsbykpLGV9ZnVuY3Rpb24gTG4oZSx0LG4pe3JldHVybnttaW46dm9pZCAwIT09dD9lLm1pbit0OnZvaWQgMCxtYXg6dm9pZCAwIT09bj9lLm1heCtuLShlLm1heC1lLm1pbik6dm9pZCAwfX1mdW5jdGlvbiBFbihlLHQpe3ZhciBuLG89dC5taW4tZS5taW4saT10Lm1heC1lLm1heDtyZXR1cm4gdC5tYXgtdC5taW48ZS5tYXgtZS5taW4mJihvPShuPXIuX19yZWFkKFtpLG9dLDIpKVswXSxpPW5bMV0pLHttaW46ZS5taW4rbyxtYXg6ZS5taW4raX19ZnVuY3Rpb24gU24oZSx0LG4pe3JldHVybnttaW46am4oZSx0KSxtYXg6am4oZSxuKX19ZnVuY3Rpb24gam4oZSx0KXt2YXIgbjtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZT9lOm51bGwhPT0obj1lW3RdKSYmdm9pZCAwIT09bj9uOjB9ZnVuY3Rpb24gTW4oZSx0KXtyZXR1cm4gaG4oZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnRvcCxyPWUubGVmdCxvPWUuYm90dG9tLGk9ZS5yaWdodDt2b2lkIDA9PT10JiYodD1wbik7dmFyIGE9dCh7eDpyLHk6bn0pLGw9dCh7eDppLHk6b30pO3JldHVybnt0b3A6YS55LGxlZnQ6YS54LGJvdHRvbTpsLnkscmlnaHQ6bC54fX0oZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0KSl9dmFyIGtuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGVwdGgtdC5kZXB0aH07ZnVuY3Rpb24gUm4oZSl7cmV0dXJuIGUucHJvamVjdGlvbi5pc0VuYWJsZWR8fGUuc2hvdWxkUmVzZXRUcmFuc2Zvcm0oKX1mdW5jdGlvbiBQbihlLHQpe3ZvaWQgMD09PXQmJih0PVtdKTt2YXIgbj1lLnBhcmVudDtyZXR1cm4gbiYmUG4obix0KSxSbihlKSYmdC5wdXNoKGUpLHR9ZnVuY3Rpb24gSW4oZSl7aWYoIWUuc2hvdWxkUmVzZXRUcmFuc2Zvcm0oKSl7dmFyIHQsbj1lLmdldExheW91dFN0YXRlKCk7ZS5ub3RpZnlCZWZvcmVMYXlvdXRNZWFzdXJlKG4ubGF5b3V0KSxuLmlzSHlkcmF0ZWQ9ITAsbi5sYXlvdXQ9ZS5tZWFzdXJlVmlld3BvcnRCb3goKSxuLmxheW91dENvcnJlY3RlZD0odD1uLmxheW91dCx7eDpyLl9fYXNzaWduKHt9LHQueCkseTpyLl9fYXNzaWduKHt9LHQueSl9KSxlLm5vdGlmeUxheW91dE1lYXN1cmUobi5sYXlvdXQsZS5wcmV2Vmlld3BvcnRCb3h8fG4ubGF5b3V0KSxkLmRlZmF1bHQudXBkYXRlKChmdW5jdGlvbigpe3JldHVybiBlLnJlYmFzZVByb2plY3Rpb25UYXJnZXQoKX0pKX19ZnVuY3Rpb24gQW4oZSl7ZS5zaG91bGRSZXNldFRyYW5zZm9ybSgpfHwoZS5wcmV2Vmlld3BvcnRCb3g9ZS5tZWFzdXJlVmlld3BvcnRCb3goITEpLGUucmViYXNlUHJvamVjdGlvblRhcmdldCghMSxlLnByZXZWaWV3cG9ydEJveCkpfWZ1bmN0aW9uIFRuKGUsdCl7cmV0dXJue21pbjp0Lm1pbi1lLm1pbixtYXg6dC5tYXgtZS5taW59fWZ1bmN0aW9uIEhuKGUsdCl7cmV0dXJue3g6VG4oZS54LHQueCkseTpUbihlLnksdC55KX19ZnVuY3Rpb24gQm4oZSl7dmFyIHQ9ZS5nZXRQcm9wcygpLG49dC5kcmFnLHI9dC5fZHJhZ1g7cmV0dXJuIG4mJiFyfWZ1bmN0aW9uIFZuKGUsdCl7ZS5taW49dC5taW4sZS5tYXg9dC5tYXh9ZnVuY3Rpb24gRG4oZSx0LG4pe3JldHVybiBuK3QqKGUtbil9ZnVuY3Rpb24gWm4oZSx0LG4scixvKXtyZXR1cm4gdm9pZCAwIT09byYmKGU9RG4oZSxvLHIpKSxEbihlLG4scikrdH1mdW5jdGlvbiAkbihlLHQsbixyLG8pe3ZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PW4mJihuPTEpLGUubWluPVpuKGUubWluLHQsbixyLG8pLGUubWF4PVpuKGUubWF4LHQsbixyLG8pfWZ1bmN0aW9uIE5uKGUsdCl7dmFyIG49dC54LHI9dC55OyRuKGUueCxuLnRyYW5zbGF0ZSxuLnNjYWxlLG4ub3JpZ2luUG9pbnQpLCRuKGUueSxyLnRyYW5zbGF0ZSxyLnNjYWxlLHIub3JpZ2luUG9pbnQpfWZ1bmN0aW9uIEZuKGUsdCxuLG8pe3ZhciBpPXIuX19yZWFkKG8sMyksYT1pWzBdLHM9aVsxXSxjPWlbMl07ZS5taW49dC5taW4sZS5tYXg9dC5tYXg7dmFyIHU9dm9pZCAwIT09bltjXT9uW2NdOi41LGY9bC5taXgodC5taW4sdC5tYXgsdSk7JG4oZSxuW2FdLG5bc10sZixuLnNjYWxlKX12YXIgVW49W1wieFwiLFwic2NhbGVYXCIsXCJvcmlnaW5YXCJdLFduPVtcInlcIixcInNjYWxlWVwiLFwib3JpZ2luWVwiXTtmdW5jdGlvbiB6bihlLHQsbil7Rm4oZS54LHQueCxuLFVuKSxGbihlLnksdC55LG4sV24pfWZ1bmN0aW9uIEduKGUsdCxuLHIsbyl7cmV0dXJuIGU9RG4oZS09dCwxL24sciksdm9pZCAwIT09byYmKGU9RG4oZSwxL28scikpLGV9ZnVuY3Rpb24gcW4oZSx0LG4pe3ZhciBvPXIuX19yZWFkKG4sMyksaT1vWzBdLGE9b1sxXSxzPW9bMl07IWZ1bmN0aW9uKGUsdCxuLHIsbyl7dm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09biYmKG49MSksdm9pZCAwPT09ciYmKHI9LjUpO3ZhciBpPWwubWl4KGUubWluLGUubWF4LHIpLXQ7ZS5taW49R24oZS5taW4sdCxuLGksbyksZS5tYXg9R24oZS5tYXgsdCxuLGksbyl9KGUsdFtpXSx0W2FdLHRbc10sdC5zY2FsZSl9ZnVuY3Rpb24gWW4oZSx0KXtxbihlLngsdCxVbikscW4oZS55LHQsV24pfXZhciBLbj1uZXcgU2V0O2Z1bmN0aW9uIFhuKGUsdCxuKXtlW25dfHwoZVtuXT1bXSksZVtuXS5wdXNoKHQpfWZ1bmN0aW9uIEpuKGUpe3JldHVybiBLbi5hZGQoZSksZnVuY3Rpb24oKXtyZXR1cm4gS24uZGVsZXRlKGUpfX1mdW5jdGlvbiBRbigpe2lmKEtuLnNpemUpe3ZhciBlPTAsdD1bW11dLG49W10scj1mdW5jdGlvbihuKXtyZXR1cm4gWG4odCxuLGUpfSxvPWZ1bmN0aW9uKHQpe1huKG4sdCxlKSxlKyt9O0tuLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QocixvKSxlPTB9KSksS24uY2xlYXIoKTtmb3IodmFyIGk9bi5sZW5ndGgsYT0wO2E8PWk7YSsrKXRbYV0mJnRbYV0uZm9yRWFjaCh0ciksblthXSYmblthXS5mb3JFYWNoKHRyKX19dmFyIGVyLHRyPWZ1bmN0aW9uKGUpe3JldHVybiBlKCl9LG5yPW5ldyBXZWFrTWFwLHJyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD1lLnZpc3VhbEVsZW1lbnQ7dGhpcy5pc0RyYWdnaW5nPSExLHRoaXMuY3VycmVudERpcmVjdGlvbj1udWxsLHRoaXMuY29uc3RyYWludHM9ITEsdGhpcy5lbGFzdGljPXt4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSx0aGlzLnByb3BzPXt9LHRoaXMuaGFzTXV0YXRlZENvbnN0cmFpbnRzPSExLHRoaXMuY3Vyc29yUHJvZ3Jlc3M9e3g6LjUseTouNX0sdGhpcy5vcmlnaW5Qb2ludD17fSx0aGlzLm9wZW5HbG9iYWxMb2NrPW51bGwsdGhpcy5wYW5TZXNzaW9uPW51bGwsdGhpcy52aXN1YWxFbGVtZW50PXQsdGhpcy52aXN1YWxFbGVtZW50LmVuYWJsZUxheW91dFByb2plY3Rpb24oKSxuci5zZXQodCx0aGlzKX1yZXR1cm4gZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLG89dm9pZCAwPT09dD97fTp0LGk9by5zbmFwVG9DdXJzb3IsYT12b2lkIDAhPT1pJiZpLGM9by5jdXJzb3JQcm9ncmVzcyx1PXRoaXMucHJvcHMudHJhbnNmb3JtUGFnZVBvaW50O3RoaXMucGFuU2Vzc2lvbj1uZXcgYW4oZSx7b25TZXNzaW9uU3RhcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ7bi5zdG9wTW90aW9uKCk7dmFyIG89ZnVuY3Rpb24oZSl7cmV0dXJuIHFlKGUsXCJjbGllbnRcIil9KGUpLnBvaW50O251bGw9PT0odD1uLmNhbmNlbExheW91dCl8fHZvaWQgMD09PXR8fHQuY2FsbChuKSxuLmNhbmNlbExheW91dD1KbigoZnVuY3Rpb24oZSx0KXt2YXIgaT1QbihuLnZpc3VhbEVsZW1lbnQpLHU9ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1mdW5jdGlvbihlKXtSbihlKSYmdC5wdXNoKGUpLGUuY2hpbGRyZW4uZm9yRWFjaChuKX07cmV0dXJuIGUuY2hpbGRyZW4uZm9yRWFjaChuKSx0LnNvcnQoa24pfShuLnZpc3VhbEVsZW1lbnQpLGY9ci5fX3NwcmVhZEFycmF5KHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChpKSksci5fX3JlYWQodSkpLGQ9ITE7bi5pc0xheW91dERyYWcoKSYmbi52aXN1YWxFbGVtZW50LmxvY2tQcm9qZWN0aW9uVGFyZ2V0KCksdCgoZnVuY3Rpb24oKXtmLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc2V0VHJhbnNmb3JtKCl9KSl9KSksZSgoZnVuY3Rpb24oKXtJbihuLnZpc3VhbEVsZW1lbnQpLHUuZm9yRWFjaChJbil9KSksdCgoZnVuY3Rpb24oKXtmLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc3RvcmVUcmFuc2Zvcm0oKX0pKSxhJiYoZD1uLnNuYXBUb0N1cnNvcihvKSl9KSksZSgoZnVuY3Rpb24oKXtCb29sZWFuKG4uZ2V0QXhpc01vdGlvblZhbHVlKFwieFwiKSYmIW4uaXNFeHRlcm5hbERyYWcoKSl8fG4udmlzdWFsRWxlbWVudC5yZWJhc2VQcm9qZWN0aW9uVGFyZ2V0KCEwLG4udmlzdWFsRWxlbWVudC5tZWFzdXJlVmlld3BvcnRCb3goITEpKSxuLnZpc3VhbEVsZW1lbnQuc2NoZWR1bGVVcGRhdGVMYXlvdXRQcm9qZWN0aW9uKCk7dmFyIGU9bi52aXN1YWxFbGVtZW50LnByb2plY3Rpb247bW4oKGZ1bmN0aW9uKHQpe2lmKCFkKXt2YXIgcj1lLnRhcmdldFt0XSxpPXIubWluLGE9ci5tYXg7bi5jdXJzb3JQcm9ncmVzc1t0XT1jP2NbdF06bC5wcm9ncmVzcyhpLGEsb1t0XSl9dmFyIHM9bi5nZXRBeGlzTW90aW9uVmFsdWUodCk7cyYmKG4ub3JpZ2luUG9pbnRbdF09cy5nZXQoKSl9KSl9KSksdCgoZnVuY3Rpb24oKXtzLmZsdXNoU3luYy51cGRhdGUoKSxzLmZsdXNoU3luYy5wcmVSZW5kZXIoKSxzLmZsdXNoU3luYy5yZW5kZXIoKSxzLmZsdXNoU3luYy5wb3N0UmVuZGVyKCl9KSksZSgoZnVuY3Rpb24oKXtyZXR1cm4gbi5yZXNvbHZlRHJhZ0NvbnN0cmFpbnRzKCl9KSl9KSl9LG9uU3RhcnQ6ZnVuY3Rpb24oZSx0KXt2YXIgcixvLGksYT1uLnByb3BzLGw9YS5kcmFnLHM9YS5kcmFnUHJvcGFnYXRpb247KCFsfHxzfHwobi5vcGVuR2xvYmFsTG9jayYmbi5vcGVuR2xvYmFsTG9jaygpLG4ub3Blbkdsb2JhbExvY2s9bHQobCksbi5vcGVuR2xvYmFsTG9jaykpJiYoUW4oKSxuLmlzRHJhZ2dpbmc9ITAsbi5jdXJyZW50RGlyZWN0aW9uPW51bGwsbnVsbD09PShvPShyPW4ucHJvcHMpLm9uRHJhZ1N0YXJ0KXx8dm9pZCAwPT09b3x8by5jYWxsKHIsZSx0KSxudWxsPT09KGk9bi52aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09aXx8aS5zZXRBY3RpdmUoQmUuRHJhZywhMCkpfSxvbk1vdmU6ZnVuY3Rpb24oZSx0KXt2YXIgcixvLGksYSxsPW4ucHJvcHMscz1sLmRyYWdQcm9wYWdhdGlvbixjPWwuZHJhZ0RpcmVjdGlvbkxvY2s7aWYoc3x8bi5vcGVuR2xvYmFsTG9jayl7dmFyIHU9dC5vZmZzZXQ7aWYoYyYmbnVsbD09PW4uY3VycmVudERpcmVjdGlvbilyZXR1cm4gbi5jdXJyZW50RGlyZWN0aW9uPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9MTApO3ZhciBuPW51bGw7cmV0dXJuIE1hdGguYWJzKGUueSk+dD9uPVwieVwiOk1hdGguYWJzKGUueCk+dCYmKG49XCJ4XCIpLG59KHUpLHZvaWQobnVsbCE9PW4uY3VycmVudERpcmVjdGlvbiYmKG51bGw9PT0obz0ocj1uLnByb3BzKS5vbkRpcmVjdGlvbkxvY2spfHx2b2lkIDA9PT1vfHxvLmNhbGwocixuLmN1cnJlbnREaXJlY3Rpb24pKSk7bi51cGRhdGVBeGlzKFwieFwiLHQucG9pbnQsdSksbi51cGRhdGVBeGlzKFwieVwiLHQucG9pbnQsdSksbnVsbD09PShhPShpPW4ucHJvcHMpLm9uRHJhZyl8fHZvaWQgMD09PWF8fGEuY2FsbChpLGUsdCksZXI9ZX19LG9uU2Vzc2lvbkVuZDpmdW5jdGlvbihlLHQpe3JldHVybiBuLnN0b3AoZSx0KX19LHt0cmFuc2Zvcm1QYWdlUG9pbnQ6dX0pfSxlLnByb3RvdHlwZS5yZXNvbHZlRHJhZ0NvbnN0cmFpbnRzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmRyYWdDb25zdHJhaW50cyxyPXQuZHJhZ0VsYXN0aWMsbz10aGlzLnZpc3VhbEVsZW1lbnQuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXRDb3JyZWN0ZWQ7dGhpcy5jb25zdHJhaW50cz0hIW4mJihQKG4pP3RoaXMucmVzb2x2ZVJlZkNvbnN0cmFpbnRzKG8sbik6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnRvcCxyPXQubGVmdCxvPXQuYm90dG9tLGk9dC5yaWdodDtyZXR1cm57eDpMbihlLngscixpKSx5OkxuKGUueSxuLG8pfX0obyxuKSksdGhpcy5lbGFzdGljPWZ1bmN0aW9uKGUpe3JldHVybiExPT09ZT9lPTA6ITA9PT1lJiYoZT0uMzUpLHt4OlNuKGUsXCJsZWZ0XCIsXCJyaWdodFwiKSx5OlNuKGUsXCJ0b3BcIixcImJvdHRvbVwiKX19KHIpLHRoaXMuY29uc3RyYWludHMmJiF0aGlzLmhhc011dGF0ZWRDb25zdHJhaW50cyYmbW4oKGZ1bmN0aW9uKHQpe2UuZ2V0QXhpc01vdGlvblZhbHVlKHQpJiYoZS5jb25zdHJhaW50c1t0XT1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O3JldHVybiB2b2lkIDAhPT10Lm1pbiYmKG4ubWluPXQubWluLWUubWluKSx2b2lkIDAhPT10Lm1heCYmKG4ubWF4PXQubWF4LWUubWluKSxufShvW3RdLGUuY29uc3RyYWludHNbdF0pKX0pKX0sZS5wcm90b3R5cGUucmVzb2x2ZVJlZkNvbnN0cmFpbnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5wcm9wcyxyPW4ub25NZWFzdXJlRHJhZ0NvbnN0cmFpbnRzLG89bi50cmFuc2Zvcm1QYWdlUG9pbnQsYT10LmN1cnJlbnQ7aS5pbnZhcmlhbnQobnVsbCE9PWEsXCJJZiBgZHJhZ0NvbnN0cmFpbnRzYCBpcyBzZXQgYXMgYSBSZWFjdCByZWYsIHRoYXQgcmVmIG11c3QgYmUgcGFzc2VkIHRvIGFub3RoZXIgY29tcG9uZW50J3MgYHJlZmAgcHJvcC5cIiksdGhpcy5jb25zdHJhaW50c0JveD1NbihhLG8pO3ZhciBsPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3g6RW4oZS54LHQueCkseTpFbihlLnksdC55KX19KGUsdGhpcy5jb25zdHJhaW50c0JveCk7aWYocil7dmFyIHM9cihmdW5jdGlvbihlKXt2YXIgdD1lLngsbj1lLnk7cmV0dXJue3RvcDpuLm1pbixib3R0b206bi5tYXgsbGVmdDp0Lm1pbixyaWdodDp0Lm1heH19KGwpKTt0aGlzLmhhc011dGF0ZWRDb25zdHJhaW50cz0hIXMscyYmKGw9aG4ocykpfXJldHVybiBsfSxlLnByb3RvdHlwZS5jYW5jZWxEcmFnPWZ1bmN0aW9uKCl7dmFyIGUsdDt0aGlzLnZpc3VhbEVsZW1lbnQudW5sb2NrUHJvamVjdGlvblRhcmdldCgpLG51bGw9PT0oZT10aGlzLmNhbmNlbExheW91dCl8fHZvaWQgMD09PWV8fGUuY2FsbCh0aGlzKSx0aGlzLmlzRHJhZ2dpbmc9ITEsdGhpcy5wYW5TZXNzaW9uJiZ0aGlzLnBhblNlc3Npb24uZW5kKCksdGhpcy5wYW5TZXNzaW9uPW51bGwsIXRoaXMucHJvcHMuZHJhZ1Byb3BhZ2F0aW9uJiZ0aGlzLm9wZW5HbG9iYWxMb2NrJiYodGhpcy5vcGVuR2xvYmFsTG9jaygpLHRoaXMub3Blbkdsb2JhbExvY2s9bnVsbCksbnVsbD09PSh0PXRoaXMudmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PXR8fHQuc2V0QWN0aXZlKEJlLkRyYWcsITEpfSxlLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvO251bGw9PT0obj10aGlzLnBhblNlc3Npb24pfHx2b2lkIDA9PT1ufHxuLmVuZCgpLHRoaXMucGFuU2Vzc2lvbj1udWxsO3ZhciBpPXRoaXMuaXNEcmFnZ2luZztpZih0aGlzLmNhbmNlbERyYWcoKSxpKXt2YXIgYT10LnZlbG9jaXR5O3RoaXMuYW5pbWF0ZURyYWdFbmQoYSksbnVsbD09PShvPShyPXRoaXMucHJvcHMpLm9uRHJhZ0VuZCl8fHZvaWQgMD09PW98fG8uY2FsbChyLGUsdCl9fSxlLnByb3RvdHlwZS5zbmFwVG9DdXJzb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gbW4oKGZ1bmN0aW9uKG4pe2lmKG9yKG4sdC5wcm9wcy5kcmFnLHQuY3VycmVudERpcmVjdGlvbikpe3ZhciByPXQuZ2V0QXhpc01vdGlvblZhbHVlKG4pO2lmKCFyKXJldHVybiB0LmN1cnNvclByb2dyZXNzW25dPS41LCEwO3ZhciBvPXQudmlzdWFsRWxlbWVudC5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCxpPW9bbl0ubWF4LW9bbl0ubWluLGE9b1tuXS5taW4raS8yLGw9ZVtuXS1hO3Qub3JpZ2luUG9pbnRbbl09ZVtuXSxyLnNldChsKX19KSkuaW5jbHVkZXMoITApfSxlLnByb3RvdHlwZS51cGRhdGVBeGlzPWZ1bmN0aW9uKGUsdCxuKXtpZihvcihlLHRoaXMucHJvcHMuZHJhZyx0aGlzLmN1cnJlbnREaXJlY3Rpb24pKXJldHVybiB0aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShlKT90aGlzLnVwZGF0ZUF4aXNNb3Rpb25WYWx1ZShlLG4pOnRoaXMudXBkYXRlVmlzdWFsRWxlbWVudEF4aXMoZSx0KX0sZS5wcm90b3R5cGUudXBkYXRlQXhpc01vdGlvblZhbHVlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoZSk7aWYodCYmbil7dmFyIHI9dGhpcy5vcmlnaW5Qb2ludFtlXSt0W2VdLG89dGhpcy5jb25zdHJhaW50cz9PbihyLHRoaXMuY29uc3RyYWludHNbZV0sdGhpcy5lbGFzdGljW2VdKTpyO24uc2V0KG8pfX0sZS5wcm90b3R5cGUudXBkYXRlVmlzdWFsRWxlbWVudEF4aXM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMudmlzdWFsRWxlbWVudC5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dFtlXSxvPXIubWF4LXIubWluLGk9dGhpcy5jdXJzb3JQcm9ncmVzc1tlXSxhPWZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGk9ZS10Km47cmV0dXJuIHI/T24oaSxyLG8pOml9KHRbZV0sbyxpLG51bGw9PT0obj10aGlzLmNvbnN0cmFpbnRzKXx8dm9pZCAwPT09bj92b2lkIDA6bltlXSx0aGlzLmVsYXN0aWNbZV0pO3RoaXMudmlzdWFsRWxlbWVudC5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyhlLGEsYStvKX0sZS5wcm90b3R5cGUuc2V0UHJvcHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kcmFnLG49dm9pZCAwIT09dCYmdCxvPWUuZHJhZ0RpcmVjdGlvbkxvY2ssaT12b2lkIDAhPT1vJiZvLGE9ZS5kcmFnUHJvcGFnYXRpb24sbD12b2lkIDAhPT1hJiZhLHM9ZS5kcmFnQ29uc3RyYWludHMsYz12b2lkIDAhPT1zJiZzLHU9ZS5kcmFnRWxhc3RpYyxmPXZvaWQgMD09PXU/LjM1OnUsZD1lLmRyYWdNb21lbnR1bSxwPXZvaWQgMD09PWR8fGQsaD1yLl9fcmVzdChlLFtcImRyYWdcIixcImRyYWdEaXJlY3Rpb25Mb2NrXCIsXCJkcmFnUHJvcGFnYXRpb25cIixcImRyYWdDb25zdHJhaW50c1wiLFwiZHJhZ0VsYXN0aWNcIixcImRyYWdNb21lbnR1bVwiXSk7dGhpcy5wcm9wcz1yLl9fYXNzaWduKHtkcmFnOm4sZHJhZ0RpcmVjdGlvbkxvY2s6aSxkcmFnUHJvcGFnYXRpb246bCxkcmFnQ29uc3RyYWludHM6YyxkcmFnRWxhc3RpYzpmLGRyYWdNb21lbnR1bTpwfSxoKX0sZS5wcm90b3R5cGUuZ2V0QXhpc01vdGlvblZhbHVlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMsbj10LmxheW91dCxyPXQubGF5b3V0SWQsbz1cIl9kcmFnXCIrZS50b1VwcGVyQ2FzZSgpO3JldHVybiB0aGlzLnByb3BzW29dP3RoaXMucHJvcHNbb106bnx8dm9pZCAwIT09cj92b2lkIDA6dGhpcy52aXN1YWxFbGVtZW50LmdldFZhbHVlKGUsMCl9LGUucHJvdG90eXBlLmlzTGF5b3V0RHJhZz1mdW5jdGlvbigpe3JldHVybiF0aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShcInhcIil9LGUucHJvdG90eXBlLmlzRXh0ZXJuYWxEcmFnPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuX2RyYWdYLG49ZS5fZHJhZ1k7cmV0dXJuIHR8fG59LGUucHJvdG90eXBlLmFuaW1hdGVEcmFnRW5kPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLnByb3BzLG89bi5kcmFnLGk9bi5kcmFnTW9tZW50dW0sYT1uLmRyYWdFbGFzdGljLGw9bi5kcmFnVHJhbnNpdGlvbixzPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITApO3ZhciBuLHI9ZS5nZXRQcm9qZWN0aW9uUGFyZW50KCk7cmV0dXJuISFyJiYodD9ZbihuPUhuKHIucHJvamVjdGlvbi50YXJnZXQsZS5wcm9qZWN0aW9uLnRhcmdldCksci5nZXRMYXRlc3RWYWx1ZXMoKSk6bj1IbihyLmdldExheW91dFN0YXRlKCkubGF5b3V0LGUuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXQpLG1uKChmdW5jdGlvbih0KXtyZXR1cm4gZS5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyh0LG5bdF0ubWluLG5bdF0ubWF4LCEwKX0pKSwhMCl9KHRoaXMudmlzdWFsRWxlbWVudCx0aGlzLmlzTGF5b3V0RHJhZygpJiYhdGhpcy5pc0V4dGVybmFsRHJhZygpKSxjPXRoaXMuY29uc3RyYWludHN8fHt9O2lmKHMmJk9iamVjdC5rZXlzKGMpLmxlbmd0aCYmdGhpcy5pc0xheW91dERyYWcoKSl7dmFyIHU9dGhpcy52aXN1YWxFbGVtZW50LmdldFByb2plY3Rpb25QYXJlbnQoKTtpZih1KXt2YXIgZj1Ibih1LnByb2plY3Rpb24udGFyZ2V0RmluYWwsYyk7bW4oKGZ1bmN0aW9uKGUpe3ZhciB0PWZbZV0sbj10Lm1pbixyPXQubWF4O2NbZV09e21pbjppc05hTihuKT92b2lkIDA6bixtYXg6aXNOYU4ocik/dm9pZCAwOnJ9fSkpfX12YXIgZD1tbigoZnVuY3Rpb24obil7dmFyIHU7aWYob3IobixvLHQuY3VycmVudERpcmVjdGlvbikpe3ZhciBmPW51bGwhPT0odT1udWxsPT1jP3ZvaWQgMDpjW25dKSYmdm9pZCAwIT09dT91Ont9LGQ9YT8yMDA6MWU2LHA9YT80MDoxZTcsaD1yLl9fYXNzaWduKHIuX19hc3NpZ24oe3R5cGU6XCJpbmVydGlhXCIsdmVsb2NpdHk6aT9lW25dOjAsYm91bmNlU3RpZmZuZXNzOmQsYm91bmNlRGFtcGluZzpwLHRpbWVDb25zdGFudDo3NTAscmVzdERlbHRhOjEscmVzdFNwZWVkOjEwfSxsKSxmKTtyZXR1cm4gdC5nZXRBeGlzTW90aW9uVmFsdWUobik/dC5zdGFydEF4aXNWYWx1ZUFuaW1hdGlvbihuLGgpOnQudmlzdWFsRWxlbWVudC5zdGFydExheW91dEFuaW1hdGlvbihuLGgscyl9fSkpO3JldHVybiBQcm9taXNlLmFsbChkKS50aGVuKChmdW5jdGlvbigpe3ZhciBlLG47bnVsbD09PShuPShlPXQucHJvcHMpLm9uRHJhZ1RyYW5zaXRpb25FbmQpfHx2b2lkIDA9PT1ufHxuLmNhbGwoZSl9KSl9LGUucHJvdG90eXBlLnN0b3BNb3Rpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzO21uKChmdW5jdGlvbih0KXt2YXIgbj1lLmdldEF4aXNNb3Rpb25WYWx1ZSh0KTtuP24uc3RvcCgpOmUudmlzdWFsRWxlbWVudC5zdG9wTGF5b3V0QW5pbWF0aW9uKCl9KSl9LGUucHJvdG90eXBlLnN0YXJ0QXhpc1ZhbHVlQW5pbWF0aW9uPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoZSk7aWYobil7dmFyIHI9bi5nZXQoKTtyZXR1cm4gbi5zZXQociksbi5zZXQociksSXQoZSxuLDAsdCl9fSxlLnByb3RvdHlwZS5zY2FsZVBvaW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmRyYWc7aWYoUCh0LmRyYWdDb25zdHJhaW50cykmJnRoaXMuY29uc3RyYWludHNCb3gpe3RoaXMuc3RvcE1vdGlvbigpO3ZhciByPXt4OjAseTowfTttbigoZnVuY3Rpb24odCl7dmFyIG4sbyxpLGEscyxjO3JbdF09KG49ZS52aXN1YWxFbGVtZW50LnByb2plY3Rpb24udGFyZ2V0W3RdLG89ZS5jb25zdHJhaW50c0JveFt0XSxhPS41LHM9eW4obiksKGM9eW4obykpPnM/YT1sLnByb2dyZXNzKG8ubWluLG8ubWF4LXMsbi5taW4pOnM+YyYmKGE9bC5wcm9ncmVzcyhuLm1pbixuLm1heC1jLG8ubWluKSksaT1hLGwuY2xhbXAoMCwxLGkpKX0pKSx0aGlzLnVwZGF0ZUNvbnN0cmFpbnRzKChmdW5jdGlvbigpe21uKChmdW5jdGlvbih0KXtpZihvcih0LG4sbnVsbCkpe3ZhciBvPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLm1heC1lLm1pbixvPWwubWl4KHQubWluLHQubWF4LXIsbik7cmV0dXJue21pbjpvLG1heDpvK3J9fShlLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbi50YXJnZXRbdF0sZS5jb25zdHJhaW50c0JveFt0XSxyW3RdKSxpPW8ubWluLGE9by5tYXg7ZS52aXN1YWxFbGVtZW50LnNldFByb2plY3Rpb25UYXJnZXRBeGlzKHQsaSxhKX19KSl9KSksc2V0VGltZW91dChRbiwxKX19LGUucHJvdG90eXBlLnVwZGF0ZUNvbnN0cmFpbnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5jYW5jZWxMYXlvdXQ9Sm4oKGZ1bmN0aW9uKG4scil7dmFyIG89UG4odC52aXN1YWxFbGVtZW50KTtyKChmdW5jdGlvbigpe3JldHVybiBvLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc2V0VHJhbnNmb3JtKCl9KSl9KSksbigoZnVuY3Rpb24oKXtyZXR1cm4gSW4odC52aXN1YWxFbGVtZW50KX0pKSxyKChmdW5jdGlvbigpe3JldHVybiBvLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc3RvcmVUcmFuc2Zvcm0oKX0pKX0pKSxuKChmdW5jdGlvbigpe3QucmVzb2x2ZURyYWdDb25zdHJhaW50cygpfSkpLGUmJnIoZSl9KSl9LGUucHJvdG90eXBlLm1vdW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1udChlLmdldEluc3RhbmNlKCksXCJwb2ludGVyZG93blwiLChmdW5jdGlvbihlKXt2YXIgbj10LnByb3BzLHI9bi5kcmFnLG89bi5kcmFnTGlzdGVuZXI7ciYmKHZvaWQgMD09PW98fG8pJiZ0LnN0YXJ0KGUpfSkpLHI9JGUod2luZG93LFwicmVzaXplXCIsKGZ1bmN0aW9uKCl7dC5zY2FsZVBvaW50KCl9KSksbz1lLm9uTGF5b3V0VXBkYXRlKChmdW5jdGlvbigpe3QuaXNEcmFnZ2luZyYmdC5yZXNvbHZlRHJhZ0NvbnN0cmFpbnRzKCl9KSksaT1lLnByZXZEcmFnQ3Vyc29yO3JldHVybiBpJiZ0aGlzLnN0YXJ0KGVyLHtjdXJzb3JQcm9ncmVzczppfSksZnVuY3Rpb24oKXtudWxsPT1ufHxuKCksbnVsbD09cnx8cigpLG51bGw9PW98fG8oKSx0LmNhbmNlbERyYWcoKX19LGV9KCk7ZnVuY3Rpb24gb3IoZSx0LG4pe3JldHVybiEoITAhPT10JiZ0IT09ZXx8bnVsbCE9PW4mJm4hPT1lKX12YXIgaXIsYXIsbHI9e3BhbjpkdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vblBhbixuPWUub25QYW5TdGFydCxyPWUub25QYW5FbmQsaT1lLm9uUGFuU2Vzc2lvblN0YXJ0LGE9ZS52aXN1YWxFbGVtZW50LGw9dHx8bnx8cnx8aSxzPW8udXNlUmVmKG51bGwpLGM9by51c2VDb250ZXh0KHkpLnRyYW5zZm9ybVBhZ2VQb2ludCx1PXtvblNlc3Npb25TdGFydDppLG9uU3RhcnQ6bixvbk1vdmU6dCxvbkVuZDpmdW5jdGlvbihlLHQpe3MuY3VycmVudD1udWxsLHImJnIoZSx0KX19O28udXNlRWZmZWN0KChmdW5jdGlvbigpe251bGwhPT1zLmN1cnJlbnQmJnMuY3VycmVudC51cGRhdGVIYW5kbGVycyh1KX0pKSxydChhLFwicG9pbnRlcmRvd25cIixsJiZmdW5jdGlvbihlKXtzLmN1cnJlbnQ9bmV3IGFuKGUsdSx7dHJhbnNmb3JtUGFnZVBvaW50OmN9KX0pLGZ0KChmdW5jdGlvbigpe3JldHVybiBzLmN1cnJlbnQmJnMuY3VycmVudC5lbmQoKX0pKX0pKSxkcmFnOmR0KChmdW5jdGlvbihlKXt2YXIgdD1lLmRyYWdDb250cm9scyxuPWUudmlzdWFsRWxlbWVudCxpPW8udXNlQ29udGV4dCh5KS50cmFuc2Zvcm1QYWdlUG9pbnQsYT1fKChmdW5jdGlvbigpe3JldHVybiBuZXcgcnIoe3Zpc3VhbEVsZW1lbnQ6bn0pfSkpO2Euc2V0UHJvcHMoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGUpLHt0cmFuc2Zvcm1QYWdlUG9pbnQ6aX0pKSxvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdCYmdC5zdWJzY3JpYmUoYSl9KSxbYV0pLG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiBhLm1vdW50KG4pfSksW10pfSkpfTtmdW5jdGlvbiBzcihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmZS5zdGFydHNXaXRoKFwidmFyKC0tXCIpfSFmdW5jdGlvbihlKXtlW2UuRW50ZXJpbmc9MF09XCJFbnRlcmluZ1wiLGVbZS5QcmVzZW50PTFdPVwiUHJlc2VudFwiLGVbZS5FeGl0aW5nPTJdPVwiRXhpdGluZ1wifShpcnx8KGlyPXt9KSksdC5WaXNpYmlsaXR5QWN0aW9uPXZvaWQgMCwoYXI9dC5WaXNpYmlsaXR5QWN0aW9ufHwodC5WaXNpYmlsaXR5QWN0aW9uPXt9KSlbYXIuSGlkZT0wXT1cIkhpZGVcIixhclthci5TaG93PTFdPVwiU2hvd1wiO3ZhciBjcj0vdmFyXFwoKC0tW2EtekEtWjAtOS1fXSspLD8gPyhbYS16QS1aMC05ICgpJSMuLC1dKyk/XFwpLztmdW5jdGlvbiB1cihlLHQsbil7dm9pZCAwPT09biYmKG49MSksaS5pbnZhcmlhbnQobjw9NCwnTWF4IENTUyB2YXJpYWJsZSBmYWxsYmFjayBkZXB0aCBkZXRlY3RlZCBpbiBwcm9wZXJ0eSBcIicrZSsnXCIuIFRoaXMgbWF5IGluZGljYXRlIGEgY2lyY3VsYXIgZmFsbGJhY2sgZGVwZW5kZW5jeS4nKTt2YXIgbz1yLl9fcmVhZChmdW5jdGlvbihlKXt2YXIgdD1jci5leGVjKGUpO2lmKCF0KXJldHVyblssXTt2YXIgbj1yLl9fcmVhZCh0LDMpO3JldHVybltuWzFdLG5bMl1dfShlKSwyKSxhPW9bMF0sbD1vWzFdO2lmKGEpe3ZhciBzPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLmdldFByb3BlcnR5VmFsdWUoYSk7cmV0dXJuIHM/cy50cmltKCk6c3IobCk/dXIobCx0LG4rMSk6bH19ZnVuY3Rpb24gZnIoZSx0KXtyZXR1cm4gZS8odC5tYXgtdC5taW4pKjEwMH12YXIgZHI9XCJfJGNzc1wiLHByPXtwcm9jZXNzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLnRhcmdldDtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7aWYoIWEucHgudGVzdChlKSlyZXR1cm4gZTtlPXBhcnNlRmxvYXQoZSl9cmV0dXJuIGZyKGUsci54KStcIiUgXCIrZnIoZSxyLnkpK1wiJVwifX0saHI9e2JvcmRlclJhZGl1czpyLl9fYXNzaWduKHIuX19hc3NpZ24oe30scHIpLHthcHBseVRvOltcImJvcmRlclRvcExlZnRSYWRpdXNcIixcImJvcmRlclRvcFJpZ2h0UmFkaXVzXCIsXCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzXCIsXCJib3JkZXJCb3R0b21SaWdodFJhZGl1c1wiXX0pLGJvcmRlclRvcExlZnRSYWRpdXM6cHIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6cHIsYm9yZGVyQm90dG9tTGVmdFJhZGl1czpwcixib3JkZXJCb3R0b21SaWdodFJhZGl1czpwcixib3hTaGFkb3c6e3Byb2Nlc3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmRlbHRhLHI9dC50cmVlU2NhbGUsbz1lLGk9ZS5pbmNsdWRlcyhcInZhcihcIikscz1bXTtpJiYoZT1lLnJlcGxhY2UoY3IsKGZ1bmN0aW9uKGUpe3JldHVybiBzLnB1c2goZSksZHJ9KSkpO3ZhciBjPWEuY29tcGxleC5wYXJzZShlKTtpZihjLmxlbmd0aD41KXJldHVybiBvO3ZhciB1PWEuY29tcGxleC5jcmVhdGVUcmFuc2Zvcm1lcihlKSxmPVwibnVtYmVyXCIhPXR5cGVvZiBjWzBdPzE6MCxkPW4ueC5zY2FsZSpyLngscD1uLnkuc2NhbGUqci55O2NbMCtmXS89ZCxjWzErZl0vPXA7dmFyIGg9bC5taXgoZCxwLC41KTtcIm51bWJlclwiPT10eXBlb2YgY1syK2ZdJiYoY1syK2ZdLz1oKSxcIm51bWJlclwiPT10eXBlb2YgY1szK2ZdJiYoY1szK2ZdLz1oKTt2YXIgZz11KGMpO2lmKGkpe3ZhciB2PTA7Zz1nLnJlcGxhY2UoZHIsKGZ1bmN0aW9uKCl7dmFyIGU9c1t2XTtyZXR1cm4gdisrLGV9KSl9cmV0dXJuIGd9fX0sZ3I9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3ZhciBuPW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gbi5mcmFtZVRhcmdldD17eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sbi5jdXJyZW50QW5pbWF0aW9uVGFyZ2V0PXt4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSxuLmlzQW5pbWF0aW5nPXt4OiExLHk6ITF9LG4uc3RvcEF4aXNBbmltYXRpb249e3g6dm9pZCAwLHk6dm9pZCAwfSxuLmlzQW5pbWF0aW5nVHJlZT0hMSxuLmFuaW1hdGU9ZnVuY3Rpb24oZSxvLGkpe3ZvaWQgMD09PWkmJihpPXt9KTt2YXIgYT1pLm9yaWdpbkJveCxsPWkudGFyZ2V0Qm94LHM9aS52aXNpYmlsaXR5QWN0aW9uLGM9aS5zaG91bGRTdGFja0FuaW1hdGUsdT1pLm9uQ29tcGxldGUsZj1pLnByZXZQYXJlbnQsZD1yLl9fcmVzdChpLFtcIm9yaWdpbkJveFwiLFwidGFyZ2V0Qm94XCIsXCJ2aXNpYmlsaXR5QWN0aW9uXCIsXCJzaG91bGRTdGFja0FuaW1hdGVcIixcIm9uQ29tcGxldGVcIixcInByZXZQYXJlbnRcIl0pLHA9bi5wcm9wcyxoPXAudmlzdWFsRWxlbWVudCxnPXAubGF5b3V0O2lmKCExPT09YylyZXR1cm4gbi5pc0FuaW1hdGluZ1RyZWU9ITEsbi5zYWZlVG9SZW1vdmUoKTtpZighbi5pc0FuaW1hdGluZ1RyZWV8fCEwPT09Yyl7YyYmKG4uaXNBbmltYXRpbmdUcmVlPSEwKSxvPWF8fG8sZT1sfHxlO3ZhciB2LG0sQyx5PSExLHc9aC5nZXRQcm9qZWN0aW9uUGFyZW50KCk7aWYodyl7dmFyIGI9dy5wcmV2Vmlld3BvcnRCb3gseD13LmdldExheW91dFN0YXRlKCkubGF5b3V0O2YmJihsJiYoeD1mLmdldExheW91dFN0YXRlKCkubGF5b3V0KSxhJiYobT13LCh2PWYpLmdldExheW91dElkKCk9PT0oQz1tLmdldExheW91dElkKCkpJiYodm9pZCAwIT09Q3x8dj09PW0pKSYmZi5wcmV2Vmlld3BvcnRCb3gmJihiPWYucHJldlZpZXdwb3J0Qm94KSksYiYmZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlfHwhZSYmISh0fHxuKX0oZixhLGwpJiYoeT0hMCxvPUhuKGIsbyksZT1Ibih4LGUpKX12YXIgXyxPLEw9KE89ZSwhKG1yKF89byl8fG1yKE8pfHxDcihfLngsTy54KSYmQ3IoXy55LE8ueSkpKSxFPW1uKChmdW5jdGlvbihpKXt2YXIgYSxsO2lmKFwicG9zaXRpb25cIj09PWcpe3ZhciBjPWVbaV0ubWF4LWVbaV0ubWluO29baV0ubWF4PW9baV0ubWluK2N9aWYoIWgucHJvamVjdGlvbi5pc1RhcmdldExvY2tlZClyZXR1cm4gdm9pZCAwPT09cz9MP24uYW5pbWF0ZUF4aXMoaSxlW2ldLG9baV0sci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGQpLHtpc1JlbGF0aXZlOnl9KSk6KG51bGw9PT0obD0oYT1uLnN0b3BBeGlzQW5pbWF0aW9uKVtpXSl8fHZvaWQgMD09PWx8fGwuY2FsbChhKSxoLnNldFByb2plY3Rpb25UYXJnZXRBeGlzKGksZVtpXS5taW4sZVtpXS5tYXgseSkpOnZvaWQgaC5zZXRWaXNpYmlsaXR5KHM9PT10LlZpc2liaWxpdHlBY3Rpb24uU2hvdyl9KSk7cmV0dXJuIGguc3luY1JlbmRlcigpLFByb21pc2UuYWxsKEUpLnRoZW4oKGZ1bmN0aW9uKCl7bi5pc0FuaW1hdGluZ1RyZWU9ITEsdSYmdSgpLGgubm90aWZ5TGF5b3V0QW5pbWF0aW9uQ29tcGxldGUoKX0pKX19LG59cmV0dXJuIHIuX19leHRlbmRzKG4sZSksbi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcy52aXN1YWxFbGVtZW50O3QuYW5pbWF0ZU1vdGlvblZhbHVlPUl0LHQuZW5hYmxlTGF5b3V0UHJvamVjdGlvbigpLHRoaXMudW5zdWJMYXlvdXRSZWFkeT10Lm9uTGF5b3V0VXBkYXRlKHRoaXMuYW5pbWF0ZSksdC5sYXlvdXRTYWZlVG9SZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5zYWZlVG9SZW1vdmUoKX0sVyhocil9LG4ucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnVuc3ViTGF5b3V0UmVhZHkoKSxtbigoZnVuY3Rpb24odCl7dmFyIG4scjtyZXR1cm4gbnVsbD09PShyPShuPWUuc3RvcEF4aXNBbmltYXRpb24pW3RdKXx8dm9pZCAwPT09cj92b2lkIDA6ci5jYWxsKG4pfSkpfSxuLnByb3RvdHlwZS5hbmltYXRlQXhpcz1mdW5jdGlvbihlLHQsbixyKXt2YXIgbyxpLGE9dGhpcyxzPXZvaWQgMD09PXI/e306cixjPXMudHJhbnNpdGlvbix1PXMuaXNSZWxhdGl2ZTtpZighdGhpcy5pc0FuaW1hdGluZ1tlXXx8IUNyKHQsdGhpcy5jdXJyZW50QW5pbWF0aW9uVGFyZ2V0W2VdKSl7bnVsbD09PShpPShvPXRoaXMuc3RvcEF4aXNBbmltYXRpb24pW2VdKXx8dm9pZCAwPT09aXx8aS5jYWxsKG8pLHRoaXMuaXNBbmltYXRpbmdbZV09ITA7dmFyIGY9dGhpcy5wcm9wcy52aXN1YWxFbGVtZW50LGQ9dGhpcy5mcmFtZVRhcmdldFtlXSxwPWYuZ2V0UHJvamVjdGlvbkFuaW1hdGlvblByb2dyZXNzKClbZV07cC5jbGVhckxpc3RlbmVycygpLHAuc2V0KDApLHAuc2V0KDApO3ZhciBoPWZ1bmN0aW9uKCl7dmFyIHI9cC5nZXQoKS8xZTM7IWZ1bmN0aW9uKGUsdCxuLHIpe2UubWluPWwubWl4KHQubWluLG4ubWluLHIpLGUubWF4PWwubWl4KHQubWF4LG4ubWF4LHIpfShkLG4sdCxyKSxmLnNldFByb2plY3Rpb25UYXJnZXRBeGlzKGUsZC5taW4sZC5tYXgsdSl9O2goKTt2YXIgZz1wLm9uQ2hhbmdlKGgpO3RoaXMuc3RvcEF4aXNBbmltYXRpb25bZV09ZnVuY3Rpb24oKXthLmlzQW5pbWF0aW5nW2VdPSExLHAuc3RvcCgpLGcoKX0sdGhpcy5jdXJyZW50QW5pbWF0aW9uVGFyZ2V0W2VdPXQ7dmFyIHY9Y3x8Zi5nZXREZWZhdWx0VHJhbnNpdGlvbigpfHx5cjtyZXR1cm4gSXQoXCJ4XCI9PT1lP1wibGF5b3V0WFwiOlwibGF5b3V0WVwiLHAsMWUzLHYmJlB0KHYsXCJsYXlvdXRcIikpLnRoZW4odGhpcy5zdG9wQXhpc0FuaW1hdGlvbltlXSl9fSxuLnByb3RvdHlwZS5zYWZlVG9SZW1vdmU9ZnVuY3Rpb24oKXt2YXIgZSx0O251bGw9PT0odD0oZT10aGlzLnByb3BzKS5zYWZlVG9SZW1vdmUpfHx2b2lkIDA9PT10fHx0LmNhbGwoZSl9LG4ucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxufSh1LkNvbXBvbmVudCksdnI9e21pbjowLG1heDowfTtmdW5jdGlvbiBtcihlKXtyZXR1cm4gQ3IoZS54LHZyKSYmQ3IoZS55LHZyKX1mdW5jdGlvbiBDcihlLHQpe3JldHVybiBlLm1pbj09PXQubWluJiZlLm1heD09PXQubWF4fXZhciB5cj17ZHVyYXRpb246LjQ1LGVhc2U6Wy40LDAsLjEsMV19LHdyPXtsYXlvdXRSZWFkeTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub3RpZnlMYXlvdXRSZWFkeSgpfX07ZnVuY3Rpb24gYnIoKXt2YXIgZT1uZXcgU2V0O3JldHVybnthZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYWRkKHQpfSxmbHVzaDpmdW5jdGlvbih0KXt2YXIgbj12b2lkIDA9PT10P3dyOnQsbz1uLmxheW91dFJlYWR5LGk9bi5wYXJlbnQ7Sm4oKGZ1bmN0aW9uKHQsbil7dmFyIGE9QXJyYXkuZnJvbShlKS5zb3J0KGtuKSxsPWk/UG4oaSk6W107bigoZnVuY3Rpb24oKXtyLl9fc3ByZWFkQXJyYXkoci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKGwpKSxyLl9fcmVhZChhKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVzZXRUcmFuc2Zvcm0oKX0pKX0pKSx0KChmdW5jdGlvbigpe2EuZm9yRWFjaChJbil9KSksbigoZnVuY3Rpb24oKXtsLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc3RvcmVUcmFuc2Zvcm0oKX0pKSxhLmZvckVhY2gobyl9KSksdCgoZnVuY3Rpb24oKXthLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuaXNQcmVzZW50JiYoZS5wcmVzZW5jZT1pci5QcmVzZW50KX0pKX0pKSxuKChmdW5jdGlvbigpe3MuZmx1c2hTeW5jLnByZVJlbmRlcigpLHMuZmx1c2hTeW5jLnJlbmRlcigpfSkpLHQoKGZ1bmN0aW9uKCl7ZC5kZWZhdWx0LnBvc3RSZW5kZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIGEuZm9yRWFjaCh4cil9KSksZS5jbGVhcigpfSkpfSkpLFFuKCl9fX1mdW5jdGlvbiB4cihlKXtlLnByZXZWaWV3cG9ydEJveD1lLnByb2plY3Rpb24udGFyZ2V0fXZhciBfcj1vLmNyZWF0ZUNvbnRleHQoYnIoKSksT3I9by5jcmVhdGVDb250ZXh0KGJyKCkpO2Z1bmN0aW9uIExyKGUpe3JldHVybiEhZS5mb3JjZVVwZGF0ZX12YXIgRXI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHIuX19leHRlbmRzKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zeW5jTGF5b3V0LG49ZS5mcmFtZXJTeW5jTGF5b3V0LHI9ZS52aXN1YWxFbGVtZW50O0xyKHQpJiZ0LnJlZ2lzdGVyKHIpLExyKG4pJiZuLnJlZ2lzdGVyKHIpLHIub25Vbm1vdW50KChmdW5jdGlvbigpe0xyKHQpJiZ0LnJlbW92ZShyKSxMcihuKSYmbi5yZW1vdmUocil9KSl9LHQucHJvdG90eXBlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuc3luY0xheW91dCxuPWUudmlzdWFsRWxlbWVudDtyZXR1cm4gTHIodCk/dC5zeW5jVXBkYXRlKCk6KEFuKG4pLHQuYWRkKG4pKSxudWxsfSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLnN5bmNMYXlvdXQ7THIoZSl8fGUuZmx1c2goKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHR9KGYuZGVmYXVsdC5Db21wb25lbnQpLFNyPXttZWFzdXJlTGF5b3V0OmZ1bmN0aW9uKGUpe3ZhciB0PW8udXNlQ29udGV4dChfciksbj1vLnVzZUNvbnRleHQoT3IpO3JldHVybiBmLmRlZmF1bHQuY3JlYXRlRWxlbWVudChFcixyLl9fYXNzaWduKHt9LGUse3N5bmNMYXlvdXQ6dCxmcmFtZXJTeW5jTGF5b3V0Om59KSl9LGxheW91dEFuaW1hdGlvbjpmdW5jdGlvbihlKXt2YXIgdD1yLl9fcmVhZChPKCksMilbMV07cmV0dXJuIHUuY3JlYXRlRWxlbWVudChncixyLl9fYXNzaWduKHt9LGUse3NhZmVUb1JlbW92ZTp0fSkpfX07ZnVuY3Rpb24ganIoKXtyZXR1cm57aXNIeWRyYXRlZDohMSxsYXlvdXQ6e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19LGxheW91dENvcnJlY3RlZDp7eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sdHJlZVNjYWxlOnt4OjEseToxfSxkZWx0YTp2bigpLGRlbHRhRmluYWw6dm4oKSxkZWx0YVRyYW5zZm9ybTpcIlwifX12YXIgTXI9anIoKTtmdW5jdGlvbiBrcihlLHQsbil7dmFyIHI9ZS54LG89ZS55LGk9XCJ0cmFuc2xhdGUzZChcIityLnRyYW5zbGF0ZS90LngrXCJweCwgXCIrby50cmFuc2xhdGUvdC55K1wicHgsIDApIFwiO2lmKG4pe3ZhciBhPW4ucm90YXRlLGw9bi5yb3RhdGVYLHM9bi5yb3RhdGVZO2EmJihpKz1cInJvdGF0ZShcIithK1wiKSBcIiksbCYmKGkrPVwicm90YXRlWChcIitsK1wiKSBcIikscyYmKGkrPVwicm90YXRlWShcIitzK1wiKSBcIil9cmV0dXJuIGkrPVwic2NhbGUoXCIrci5zY2FsZStcIiwgXCIrby5zY2FsZStcIilcIixufHxpIT09UHI/aTpcIlwifWZ1bmN0aW9uIFJyKGUpe3ZhciB0PWUuZGVsdGFGaW5hbDtyZXR1cm4gMTAwKnQueC5vcmlnaW4rXCIlIFwiKzEwMCp0Lnkub3JpZ2luK1wiJSAwXCJ9dmFyIFByPWtyKE1yLmRlbHRhLE1yLnRyZWVTY2FsZSx7eDoxLHk6MX0pLElyPVtcIkxheW91dE1lYXN1cmVcIixcIkJlZm9yZUxheW91dE1lYXN1cmVcIixcIkxheW91dFVwZGF0ZVwiLFwiVmlld3BvcnRCb3hVcGRhdGVcIixcIlVwZGF0ZVwiLFwiUmVuZGVyXCIsXCJBbmltYXRpb25Db21wbGV0ZVwiLFwiTGF5b3V0QW5pbWF0aW9uQ29tcGxldGVcIixcIkFuaW1hdGlvblN0YXJ0XCIsXCJTZXRBeGlzVGFyZ2V0XCIsXCJVbm1vdW50XCJdLEFyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuY2hpbGRyZW49W10sdGhpcy5pc0RpcnR5PSExfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7QXQodGhpcy5jaGlsZHJlbixlKSx0aGlzLmlzRGlydHk9ITB9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXtUdCh0aGlzLmNoaWxkcmVuLGUpLHRoaXMuaXNEaXJ0eT0hMH0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXt0aGlzLmlzRGlydHkmJnRoaXMuY2hpbGRyZW4uc29ydChrbiksdGhpcy5pc0RpcnR5PSExLHRoaXMuY2hpbGRyZW4uZm9yRWFjaChlKX0sZX0oKSxUcj1mdW5jdGlvbihlKXt2YXIgdD1lLnRyZWVUeXBlLG49dm9pZCAwPT09dD9cIlwiOnQsbz1lLmJ1aWxkLGk9ZS5nZXRCYXNlVGFyZ2V0LGE9ZS5tYWtlVGFyZ2V0QW5pbWF0YWJsZSxjPWUubWVhc3VyZVZpZXdwb3J0Qm94LHU9ZS5yZW5kZXIsZj1lLnJlYWRWYWx1ZUZyb21JbnN0YW5jZSxwPWUucmVzZXRUcmFuc2Zvcm0saD1lLnJlc3RvcmVUcmFuc2Zvcm0sZz1lLnJlbW92ZVZhbHVlRnJvbVJlbmRlclN0YXRlLHY9ZS5zb3J0Tm9kZVBvc2l0aW9uLG09ZS5zY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIEM9ZS5wYXJlbnQseT1lLnByb3BzLHc9ZS5wcmVzZW5jZUlkLGI9ZS5ibG9ja0luaXRpYWxBbmltYXRpb24seD1lLnZpc3VhbFN0YXRlO3ZvaWQgMD09PXQmJih0PXt9KTt2YXIgXyxPLEwsRSxTLGosTT14LmxhdGVzdFZhbHVlcyxrPXgucmVuZGVyU3RhdGUsUj1mdW5jdGlvbigpe3ZhciBlPUlyLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEh0fSkpLHQ9e30sbj17Y2xlYXJBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGVhcigpfSkpfSx1cGRhdGVQcm9wTGlzdGVuZXJzOmZ1bmN0aW9uKGUpe3JldHVybiBJci5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbztudWxsPT09KG89dFtyXSl8fHZvaWQgMD09PW98fG8uY2FsbCh0KTt2YXIgaT1cIm9uXCIrcixhPWVbaV07YSYmKHRbcl09bltpXShhKSl9KSl9fTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe25bXCJvblwiK0lyW3RdXT1mdW5jdGlvbih0KXtyZXR1cm4gZS5hZGQodCl9LG5bXCJub3RpZnlcIitJclt0XV09ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUubm90aWZ5LmFwcGx5KGUsci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKHQpKSl9fSkpLG59KCksUD17aXNFbmFibGVkOiExLGlzSHlkcmF0ZWQ6ITEsaXNUYXJnZXRMb2NrZWQ6ITEsdGFyZ2V0Ont4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSx0YXJnZXRGaW5hbDp7eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX19LEk9UCxUPU0sSD1qcigpLEQ9ITEsWj1uZXcgTWFwLCQ9bmV3IE1hcCxOPXt9LEY9ci5fX2Fzc2lnbih7fSxNKTtmdW5jdGlvbiBVKCl7XyYmKFEuaXNQcm9qZWN0aW9uUmVhZHkoKSYmKHpuKEkudGFyZ2V0RmluYWwsSS50YXJnZXQsVCksYm4oSC5kZWx0YUZpbmFsLEgubGF5b3V0Q29ycmVjdGVkLEkudGFyZ2V0RmluYWwsTSkpLFcoKSx1KF8saykpfWZ1bmN0aW9uIFcoKXt2YXIgZT1NO2lmKEUmJkUuaXNBY3RpdmUoKSl7dmFyIG49RS5nZXRDcm9zc2ZhZGVTdGF0ZShRKTtuJiYoZT1uKX1vKFEsayxlLEksSCx0LHkpfWZ1bmN0aW9uIHooKXtSLm5vdGlmeVVwZGF0ZShNKX1mdW5jdGlvbiBHKCl7US5sYXlvdXRUcmVlLmZvckVhY2goQnIpfXZhciBxPW0oeSk7Zm9yKHZhciBZIGluIHEpe3ZhciBLPXFbWV07dm9pZCAwIT09TVtZXSYmZWUoSykmJksuc2V0KE1bWV0sITEpfXZhciBYPUIoeSksSj1WKHkpLFE9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt0cmVlVHlwZTpuLGN1cnJlbnQ6bnVsbCxkZXB0aDpDP0MuZGVwdGgrMTowLHBhcmVudDpDLGNoaWxkcmVuOm5ldyBTZXQscGF0aDpDP3IuX19zcHJlYWRBcnJheShyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQoQy5wYXRoKSksW0NdKTpbXSxsYXlvdXRUcmVlOkM/Qy5sYXlvdXRUcmVlOm5ldyBBcixwcmVzZW5jZUlkOncscHJvamVjdGlvbjpQLHZhcmlhbnRDaGlsZHJlbjpKP25ldyBTZXQ6dm9pZCAwLGlzVmlzaWJsZTp2b2lkIDAsbWFudWFsbHlBbmltYXRlT25Nb3VudDpCb29sZWFuKG51bGw9PUM/dm9pZCAwOkMuaXNNb3VudGVkKCkpLGJsb2NrSW5pdGlhbEFuaW1hdGlvbjpiLGlzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKF8pfSxtb3VudDpmdW5jdGlvbihlKXtfPVEuY3VycmVudD1lLFEucG9pbnRUbyhRKSxKJiZDJiYhWCYmKGo9bnVsbD09Qz92b2lkIDA6Qy5hZGRWYXJpYW50Q2hpbGQoUSkpLG51bGw9PUN8fEMuY2hpbGRyZW4uYWRkKFEpfSx1bm1vdW50OmZ1bmN0aW9uKCl7cy5jYW5jZWxTeW5jLnVwZGF0ZSh6KSxzLmNhbmNlbFN5bmMucmVuZGVyKFUpLHMuY2FuY2VsU3luYy5wcmVSZW5kZXIoUS51cGRhdGVMYXlvdXRQcm9qZWN0aW9uKSwkLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KSksUS5zdG9wTGF5b3V0QW5pbWF0aW9uKCksUS5sYXlvdXRUcmVlLnJlbW92ZShRKSxudWxsPT1qfHxqKCksbnVsbD09Q3x8Qy5jaGlsZHJlbi5kZWxldGUoUSksbnVsbD09THx8TCgpLFIuY2xlYXJBbGxMaXN0ZW5lcnMoKX0sYWRkVmFyaWFudENoaWxkOmZ1bmN0aW9uKGUpe3ZhciB0LG49US5nZXRDbG9zZXN0VmFyaWFudE5vZGUoKTtpZihuKXJldHVybiBudWxsPT09KHQ9bi52YXJpYW50Q2hpbGRyZW4pfHx2b2lkIDA9PT10fHx0LmFkZChlKSxmdW5jdGlvbigpe3JldHVybiBuLnZhcmlhbnRDaGlsZHJlbi5kZWxldGUoZSl9fSxzb3J0Tm9kZVBvc2l0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiB2JiZuPT09ZS50cmVlVHlwZT92KFEuZ2V0SW5zdGFuY2UoKSxlLmdldEluc3RhbmNlKCkpOjB9LGdldENsb3Nlc3RWYXJpYW50Tm9kZTpmdW5jdGlvbigpe3JldHVybiBKP1E6bnVsbD09Qz92b2lkIDA6Qy5nZXRDbG9zZXN0VmFyaWFudE5vZGUoKX0sc2NoZWR1bGVVcGRhdGVMYXlvdXRQcm9qZWN0aW9uOkM/Qy5zY2hlZHVsZVVwZGF0ZUxheW91dFByb2plY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gZC5kZWZhdWx0LnByZVJlbmRlcihRLnVwZGF0ZVRyZWVMYXlvdXRQcm9qZWN0aW9uLCExLCEwKX0sZ2V0TGF5b3V0SWQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5sYXlvdXRJZH0sZ2V0SW5zdGFuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gX30sZ2V0U3RhdGljVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1bZV19LHNldFN0YXRpY1ZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1bZV09dH0sZ2V0TGF0ZXN0VmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIE19LHNldFZpc2liaWxpdHk6ZnVuY3Rpb24oZSl7US5pc1Zpc2libGUhPT1lJiYoUS5pc1Zpc2libGU9ZSxRLnNjaGVkdWxlUmVuZGVyKCkpfSxtYWtlVGFyZ2V0QW5pbWF0YWJsZTpmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksYShRLGUseSx0KX0sYWRkVmFsdWU6ZnVuY3Rpb24oZSx0KXtRLmhhc1ZhbHVlKGUpJiZRLnJlbW92ZVZhbHVlKGUpLFouc2V0KGUsdCksTVtlXT10LmdldCgpLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vbkNoYW5nZSgoZnVuY3Rpb24odCl7TVtlXT10LHkub25VcGRhdGUmJmQuZGVmYXVsdC51cGRhdGUoeiwhMSwhMCl9KSkscj10Lm9uUmVuZGVyUmVxdWVzdChRLnNjaGVkdWxlUmVuZGVyKTskLnNldChlLChmdW5jdGlvbigpe24oKSxyKCl9KSl9KGUsdCl9LHJlbW92ZVZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0O1ouZGVsZXRlKGUpLG51bGw9PT0odD0kLmdldChlKSl8fHZvaWQgMD09PXR8fHQoKSwkLmRlbGV0ZShlKSxkZWxldGUgTVtlXSxnKGUsayl9LGhhc1ZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBaLmhhcyhlKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1aLmdldChlKTtyZXR1cm4gdm9pZCAwPT09biYmdm9pZCAwIT09dCYmKG49VnQodCksUS5hZGRWYWx1ZShlLG4pKSxufSxmb3JFYWNoVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFouZm9yRWFjaChlKX0scmVhZFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBudWxsIT09KG49TVtlXSkmJnZvaWQgMCE9PW4/bjpmKF8sZSx0KX0sc2V0QmFzZVRhcmdldDpmdW5jdGlvbihlLHQpe0ZbZV09dH0sZ2V0QmFzZVRhcmdldDpmdW5jdGlvbihlKXtpZihpKXt2YXIgdD1pKHksZSk7aWYodm9pZCAwIT09dCYmIWVlKHQpKXJldHVybiB0fXJldHVybiBGW2VdfX0sUikse2J1aWxkOmZ1bmN0aW9uKCl7cmV0dXJuIFcoKSxrfSxzY2hlZHVsZVJlbmRlcjpmdW5jdGlvbigpe2QuZGVmYXVsdC5yZW5kZXIoVSwhMSwhMCl9LHN5bmNSZW5kZXI6VSxzZXRQcm9wczpmdW5jdGlvbihlKXt5PWUsUi51cGRhdGVQcm9wTGlzdGVuZXJzKGUpLE49ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2Zvcih2YXIgbyBpbiB0KXt2YXIgaT10W29dLGE9bltvXTtpZihlZShpKSllLmFkZFZhbHVlKG8saSk7ZWxzZSBpZihlZShhKSllLmFkZFZhbHVlKG8sVnQoaSkpO2Vsc2UgaWYoYSE9PWkpaWYoZS5oYXNWYWx1ZShvKSl7dmFyIGw9ZS5nZXRWYWx1ZShvKTshbC5oYXNBbmltYXRlZCYmbC5zZXQoaSl9ZWxzZSBlLmFkZFZhbHVlKG8sVnQobnVsbCE9PShyPWUuZ2V0U3RhdGljVmFsdWUobykpJiZ2b2lkIDAhPT1yP3I6aSkpfWZvcih2YXIgbyBpbiBuKXZvaWQgMD09PXRbb10mJmUucmVtb3ZlVmFsdWUobyk7cmV0dXJuIHR9KFEsbSh5KSxOKX0sZ2V0UHJvcHM6ZnVuY3Rpb24oKXtyZXR1cm4geX0sZ2V0VmFyaWFudDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbnVsbD09PSh0PXkudmFyaWFudHMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0W2VdfSxnZXREZWZhdWx0VHJhbnNpdGlvbjpmdW5jdGlvbigpe3JldHVybiB5LnRyYW5zaXRpb259LGdldFZhcmlhbnRDb250ZXh0OmZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUmJihlPSExKSxlKXJldHVybiBudWxsPT1DP3ZvaWQgMDpDLmdldFZhcmlhbnRDb250ZXh0KCk7aWYoIVgpe3ZhciB0PShudWxsPT1DP3ZvaWQgMDpDLmdldFZhcmlhbnRDb250ZXh0KCkpfHx7fTtyZXR1cm4gdm9pZCAwIT09eS5pbml0aWFsJiYodC5pbml0aWFsPXkuaW5pdGlhbCksdH1mb3IodmFyIG49e30scj0wO3I8WnI7cisrKXt2YXIgbz1EcltyXSxpPXlbb107KEEoaSl8fCExPT09aSkmJihuW29dPWkpfXJldHVybiBufSxlbmFibGVMYXlvdXRQcm9qZWN0aW9uOmZ1bmN0aW9uKCl7UC5pc0VuYWJsZWQ9ITAsUS5sYXlvdXRUcmVlLmFkZChRKX0sbG9ja1Byb2plY3Rpb25UYXJnZXQ6ZnVuY3Rpb24oKXtQLmlzVGFyZ2V0TG9ja2VkPSEwfSx1bmxvY2tQcm9qZWN0aW9uVGFyZ2V0OmZ1bmN0aW9uKCl7US5zdG9wTGF5b3V0QW5pbWF0aW9uKCksUC5pc1RhcmdldExvY2tlZD0hMX0sZ2V0TGF5b3V0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gSH0sc2V0Q3Jvc3NmYWRlcjpmdW5jdGlvbihlKXtFPWV9LGlzUHJvamVjdGlvblJlYWR5OmZ1bmN0aW9uKCl7cmV0dXJuIFAuaXNFbmFibGVkJiZQLmlzSHlkcmF0ZWQmJkguaXNIeWRyYXRlZH0sc3RhcnRMYXlvdXRBbmltYXRpb246ZnVuY3Rpb24oZSx0LG4pe3ZvaWQgMD09PW4mJihuPSExKTt2YXIgcj1RLmdldFByb2plY3Rpb25BbmltYXRpb25Qcm9ncmVzcygpW2VdLG89bj9QLnJlbGF0aXZlVGFyZ2V0W2VdOlAudGFyZ2V0W2VdLGk9by5taW4sYT1vLm1heC1pO3JldHVybiByLmNsZWFyTGlzdGVuZXJzKCksci5zZXQoaSksci5zZXQoaSksci5vbkNoYW5nZSgoZnVuY3Rpb24odCl7US5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyhlLHQsdCthLG4pfSkpLFEuYW5pbWF0ZU1vdGlvblZhbHVlKGUsciwwLHQpfSxzdG9wTGF5b3V0QW5pbWF0aW9uOmZ1bmN0aW9uKCl7bW4oKGZ1bmN0aW9uKGUpe3JldHVybiBRLmdldFByb2plY3Rpb25BbmltYXRpb25Qcm9ncmVzcygpW2VdLnN0b3AoKX0pKX0sbWVhc3VyZVZpZXdwb3J0Qm94OmZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPSEwKTt2YXIgbj1jKF8sdCk7cmV0dXJuIGV8fFluKG4sTSksbn0sZ2V0UHJvamVjdGlvbkFuaW1hdGlvblByb2dyZXNzOmZ1bmN0aW9uKCl7cmV0dXJuIFN8fChTPXt4OlZ0KDApLHk6VnQoMCl9KSxTfSxzZXRQcm9qZWN0aW9uVGFyZ2V0QXhpczpmdW5jdGlvbihlLHQsbixyKXt2YXIgbzt2b2lkIDA9PT1yJiYocj0hMSkscj8oUC5yZWxhdGl2ZVRhcmdldHx8KFAucmVsYXRpdmVUYXJnZXQ9e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19KSxvPVAucmVsYXRpdmVUYXJnZXRbZV0pOihQLnJlbGF0aXZlVGFyZ2V0PXZvaWQgMCxvPVAudGFyZ2V0W2VdKSxQLmlzSHlkcmF0ZWQ9ITAsby5taW49dCxvLm1heD1uLEQ9ITAsUi5ub3RpZnlTZXRBeGlzVGFyZ2V0KCl9LHJlYmFzZVByb2plY3Rpb25UYXJnZXQ6ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD1ILmxheW91dCk7dmFyIG49US5nZXRQcm9qZWN0aW9uQW5pbWF0aW9uUHJvZ3Jlc3MoKSxyPW4ueCxvPW4ueSxpPSEoUC5yZWxhdGl2ZVRhcmdldHx8UC5pc1RhcmdldExvY2tlZHx8ci5pc0FuaW1hdGluZygpfHxvLmlzQW5pbWF0aW5nKCkpOyhlfHxpKSYmbW4oKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV0scj1uLm1pbixvPW4ubWF4O1Euc2V0UHJvamVjdGlvblRhcmdldEF4aXMoZSxyLG8pfSkpfSxub3RpZnlMYXlvdXRSZWFkeTpmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRQcm9qZWN0aW9uUGFyZW50KCk7aWYodCl7dmFyIG49SG4odC5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCxlLmdldExheW91dFN0YXRlKCkubGF5b3V0KTttbigoZnVuY3Rpb24odCl7ZS5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyh0LG5bdF0ubWluLG5bdF0ubWF4LCEwKX0pKX1lbHNlIGUucmViYXNlUHJvamVjdGlvblRhcmdldCgpfShRKSxRLm5vdGlmeUxheW91dFVwZGF0ZShILmxheW91dCxRLnByZXZWaWV3cG9ydEJveHx8SC5sYXlvdXQsZSl9LHJlc2V0VHJhbnNmb3JtOmZ1bmN0aW9uKCl7cmV0dXJuIHAoUSxfLHkpfSxyZXN0b3JlVHJhbnNmb3JtOmZ1bmN0aW9uKCl7cmV0dXJuIGgoXyxrKX0sdXBkYXRlTGF5b3V0UHJvamVjdGlvbjpmdW5jdGlvbigpe2lmKFEuaXNQcm9qZWN0aW9uUmVhZHkoKSl7dmFyIGU9SC5kZWx0YSx0PUgudHJlZVNjYWxlLG49dC54LHI9dC55LG89SC5kZWx0YVRyYW5zZm9ybTsoZnVuY3Rpb24oZSx0LG4scil7dmFyIG8saSxhPWUuZGVsdGEsbD1lLmxheW91dCxzPWUubGF5b3V0Q29ycmVjdGVkLGM9ZS50cmVlU2NhbGUsdT10LnRhcmdldDtpPWwsVm4oKG89cykueCxpLngpLFZuKG8ueSxpLnkpLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLmxlbmd0aDtpZihyKXt2YXIgbyxpO3QueD10Lnk9MTtmb3IodmFyIGE9MDthPHI7YSsrKWk9KG89blthXSkuZ2V0TGF5b3V0U3RhdGUoKS5kZWx0YSx0LngqPWkueC5zY2FsZSx0LnkqPWkueS5zY2FsZSxObihlLGkpLEJuKG8pJiZ6bihlLGUsby5nZXRMYXRlc3RWYWx1ZXMoKSl9fShzLGMsbiksYm4oYSxzLHUscil9KShILEksUS5wYXRoLE0pLEQmJlEubm90aWZ5Vmlld3BvcnRCb3hVcGRhdGUoSS50YXJnZXQsZSksRD0hMTt2YXIgaT1rcihlLHQpO2k9PT1vJiZuPT09dC54JiZyPT09dC55fHxRLnNjaGVkdWxlUmVuZGVyKCksSC5kZWx0YVRyYW5zZm9ybT1pfX0sdXBkYXRlVHJlZUxheW91dFByb2plY3Rpb246ZnVuY3Rpb24oKXtRLmxheW91dFRyZWUuZm9yRWFjaChIciksZC5kZWZhdWx0LnByZVJlbmRlcihHLCExLCEwKX0sZ2V0UHJvamVjdGlvblBhcmVudDpmdW5jdGlvbigpe2lmKHZvaWQgMD09PU8pe2Zvcih2YXIgZT0hMSx0PVEucGF0aC5sZW5ndGgtMTt0Pj0wO3QtLSl7dmFyIG49US5wYXRoW3RdO2lmKG4ucHJvamVjdGlvbi5pc0VuYWJsZWQpe2U9bjticmVha319Tz1lfXJldHVybiBPfSxyZXNvbHZlUmVsYXRpdmVUYXJnZXRCb3g6ZnVuY3Rpb24oKXt2YXIgZT1RLmdldFByb2plY3Rpb25QYXJlbnQoKTtpZihQLnJlbGF0aXZlVGFyZ2V0JiZlJiYoZnVuY3Rpb24oZSx0KXtfbihlLnRhcmdldC54LGUucmVsYXRpdmVUYXJnZXQueCx0LnRhcmdldC54KSxfbihlLnRhcmdldC55LGUucmVsYXRpdmVUYXJnZXQueSx0LnRhcmdldC55KX0oUCxlLnByb2plY3Rpb24pLEJuKGUpKSl7dmFyIHQ9UC50YXJnZXQ7em4odCx0LGUuZ2V0TGF0ZXN0VmFsdWVzKCkpfX0sc2hvdWxkUmVzZXRUcmFuc2Zvcm06ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbih5Ll9sYXlvdXRSZXNldFRyYW5zZm9ybSl9LHBvaW50VG86ZnVuY3Rpb24oZSl7ST1lLnByb2plY3Rpb24sVD1lLmdldExhdGVzdFZhbHVlcygpLG51bGw9PUx8fEwoKSxMPWwucGlwZShlLm9uU2V0QXhpc1RhcmdldChRLnNjaGVkdWxlVXBkYXRlTGF5b3V0UHJvamVjdGlvbiksZS5vbkxheW91dEFuaW1hdGlvbkNvbXBsZXRlKChmdW5jdGlvbigpe3ZhciBlO1EuaXNQcmVzZW50P1EucHJlc2VuY2U9aXIuUHJlc2VudDpudWxsPT09KGU9US5sYXlvdXRTYWZlVG9SZW1vdmUpfHx2b2lkIDA9PT1lfHxlLmNhbGwoUSl9KSkpfSxpc1ByZXNlbnQ6ITAscHJlc2VuY2U6aXIuRW50ZXJpbmd9KTtyZXR1cm4gUX19O2Z1bmN0aW9uIEhyKGUpe2UucmVzb2x2ZVJlbGF0aXZlVGFyZ2V0Qm94KCl9ZnVuY3Rpb24gQnIoZSl7ZS51cGRhdGVMYXlvdXRQcm9qZWN0aW9uKCl9dmFyIFZyLERyPXIuX19zcHJlYWRBcnJheShbXCJpbml0aWFsXCJdLHIuX19yZWFkKGVuKSksWnI9RHIubGVuZ3RoLCRyPW5ldyBTZXQoW1wid2lkdGhcIixcImhlaWdodFwiLFwidG9wXCIsXCJsZWZ0XCIsXCJyaWdodFwiLFwiYm90dG9tXCIsXCJ4XCIsXCJ5XCJdKSxOcj1mdW5jdGlvbihlKXtyZXR1cm4gJHIuaGFzKGUpfSxGcj1mdW5jdGlvbihlLHQpe2Uuc2V0KHQsITEpLGUuc2V0KHQpfSxVcj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PWEubnVtYmVyfHxlPT09YS5weH07IWZ1bmN0aW9uKGUpe2Uud2lkdGg9XCJ3aWR0aFwiLGUuaGVpZ2h0PVwiaGVpZ2h0XCIsZS5sZWZ0PVwibGVmdFwiLGUucmlnaHQ9XCJyaWdodFwiLGUudG9wPVwidG9wXCIsZS5ib3R0b209XCJib3R0b21cIn0oVnJ8fChWcj17fSkpO3ZhciBXcj1mdW5jdGlvbihlLHQpe3JldHVybiBwYXJzZUZsb2F0KGUuc3BsaXQoXCIsIFwiKVt0XSl9LHpyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIG89ci50cmFuc2Zvcm07aWYoXCJub25lXCI9PT1vfHwhbylyZXR1cm4gMDt2YXIgaT1vLm1hdGNoKC9ebWF0cml4M2RcXCgoLispXFwpJC8pO2lmKGkpcmV0dXJuIFdyKGlbMV0sdCk7dmFyIGE9by5tYXRjaCgvXm1hdHJpeFxcKCguKylcXCkkLyk7cmV0dXJuIGE/V3IoYVsxXSxlKTowfX0sR3I9bmV3IFNldChbXCJ4XCIsXCJ5XCIsXCJ6XCJdKSxxcj1HLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIUdyLmhhcyhlKX0pKSxZcj17d2lkdGg6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS54O3JldHVybiB0Lm1heC10Lm1pbn0saGVpZ2h0OmZ1bmN0aW9uKGUpe3ZhciB0PWUueTtyZXR1cm4gdC5tYXgtdC5taW59LHRvcDpmdW5jdGlvbihlLHQpe3ZhciBuPXQudG9wO3JldHVybiBwYXJzZUZsb2F0KG4pfSxsZWZ0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZWZ0O3JldHVybiBwYXJzZUZsb2F0KG4pfSxib3R0b206ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnkscj10LnRvcDtyZXR1cm4gcGFyc2VGbG9hdChyKSsobi5tYXgtbi5taW4pfSxyaWdodDpmdW5jdGlvbihlLHQpe3ZhciBuPWUueCxyPXQubGVmdDtyZXR1cm4gcGFyc2VGbG9hdChyKSsobi5tYXgtbi5taW4pfSx4OnpyKDQsMTMpLHk6enIoNSwxNCl9O2Z1bmN0aW9uIEtyKGUsdCxuLG8pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuc29tZShOcil9KHQpP2Z1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW4mJihuPXt9KSx2b2lkIDA9PT1vJiYobz17fSksdD1yLl9fYXNzaWduKHt9LHQpLG89ci5fX2Fzc2lnbih7fSxvKTt2YXIgbD1PYmplY3Qua2V5cyh0KS5maWx0ZXIoTnIpLHM9W10sYz0hMSx1PVtdO2lmKGwuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIGw9ZS5nZXRWYWx1ZShyKTtpZihlLmhhc1ZhbHVlKHIpKXt2YXIgZixkPW5bcl0scD10W3JdLGg9JHQoZCk7aWYoa2UocCkpZm9yKHZhciBnPXAubGVuZ3RoLHY9bnVsbD09PXBbMF0/MTowO3Y8Zzt2KyspZj9pLmludmFyaWFudCgkdChwW3ZdKT09PWYsXCJBbGwga2V5ZnJhbWVzIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZVwiKTooZj0kdChwW3ZdKSxpLmludmFyaWFudChmPT09aHx8VXIoaCkmJlVyKGYpLFwiS2V5ZnJhbWVzIG11c3QgYmUgb2YgdGhlIHNhbWUgZGltZW5zaW9uIGFzIHRoZSBjdXJyZW50IHZhbHVlXCIpKTtlbHNlIGY9JHQocCk7aWYoaCE9PWYpaWYoVXIoaCkmJlVyKGYpKXt2YXIgbT1sLmdldCgpO1wic3RyaW5nXCI9PXR5cGVvZiBtJiZsLnNldChwYXJzZUZsb2F0KG0pKSxcInN0cmluZ1wiPT10eXBlb2YgcD90W3JdPXBhcnNlRmxvYXQocCk6QXJyYXkuaXNBcnJheShwKSYmZj09PWEucHgmJih0W3JdPXAubWFwKHBhcnNlRmxvYXQpKX1lbHNlKG51bGw9PWg/dm9pZCAwOmgudHJhbnNmb3JtKSYmKG51bGw9PWY/dm9pZCAwOmYudHJhbnNmb3JtKSYmKDA9PT1kfHwwPT09cCk/MD09PWQ/bC5zZXQoZi50cmFuc2Zvcm0oZCkpOnRbcl09aC50cmFuc2Zvcm0ocCk6KGN8fChzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBxci5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1lLmdldFZhbHVlKG4pO3ZvaWQgMCE9PXImJih0LnB1c2goW24sci5nZXQoKV0pLHIuc2V0KG4uc3RhcnRzV2l0aChcInNjYWxlXCIpPzE6MCkpfSkpLHQubGVuZ3RoJiZlLnN5bmNSZW5kZXIoKSx0fShlKSxjPSEwKSx1LnB1c2gociksb1tyXT12b2lkIDAhPT1vW3JdP29bcl06dFtyXSxGcihsLHApKX19KSksdS5sZW5ndGgpe3ZhciBmPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10Lm1lYXN1cmVWaWV3cG9ydEJveCgpLG89dC5nZXRJbnN0YW5jZSgpLGk9Z2V0Q29tcHV0ZWRTdHlsZShvKSxhPWkuZGlzcGxheSxsPXt0b3A6aS50b3AsbGVmdDppLmxlZnQsYm90dG9tOmkuYm90dG9tLHJpZ2h0OmkucmlnaHQsdHJhbnNmb3JtOmkudHJhbnNmb3JtfTtcIm5vbmVcIj09PWEmJnQuc2V0U3RhdGljVmFsdWUoXCJkaXNwbGF5XCIsZS5kaXNwbGF5fHxcImJsb2NrXCIpLHQuc3luY1JlbmRlcigpO3ZhciBzPXQubWVhc3VyZVZpZXdwb3J0Qm94KCk7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIG89dC5nZXRWYWx1ZShuKTtGcihvLFlyW25dKHIsbCkpLGVbbl09WXJbbl0ocyxpKX0pKSxlfSh0LGUsdSk7cmV0dXJuIHMubGVuZ3RoJiZzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXIuX19yZWFkKHQsMiksbz1uWzBdLGk9blsxXTtlLmdldFZhbHVlKG8pLnNldChpKX0pKSxlLnN5bmNSZW5kZXIoKSx7dGFyZ2V0OmYsdHJhbnNpdGlvbkVuZDpvfX1yZXR1cm57dGFyZ2V0OnQsdHJhbnNpdGlvbkVuZDpvfX0oZSx0LG4sbyk6e3RhcmdldDp0LHRyYW5zaXRpb25FbmQ6b319dmFyIFhyPXt0cmVlVHlwZTpcImRvbVwiLHJlYWRWYWx1ZUZyb21JbnN0YW5jZTpmdW5jdGlvbihlLHQpe2lmKEsodCkpe3ZhciBuPVN0KHQpO3JldHVybiBuJiZuLmRlZmF1bHR8fDB9dmFyIHIsbz0ocj1lLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHIpKTtyZXR1cm4obmUodCk/by5nZXRQcm9wZXJ0eVZhbHVlKHQpOm9bdF0pfHwwfSxzb3J0Tm9kZVBvc2l0aW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDImZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KT8xOi0xfSxnZXRCYXNlVGFyZ2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG51bGw9PT0obj1lLnN0eWxlKXx8dm9pZCAwPT09bj92b2lkIDA6blt0XX0sbWVhc3VyZVZpZXdwb3J0Qm94OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1uKGUsdC50cmFuc2Zvcm1QYWdlUG9pbnQpfSxyZXNldFRyYW5zZm9ybTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bi50cmFuc2Zvcm1UZW1wbGF0ZTt0LnN0eWxlLnRyYW5zZm9ybT1yP3Ioe30sXCJcIik6XCJub25lXCIsZS5zY2hlZHVsZVJlbmRlcigpfSxyZXN0b3JlVHJhbnNmb3JtOmZ1bmN0aW9uKGUsdCl7ZS5zdHlsZS50cmFuc2Zvcm09dC5zdHlsZS50cmFuc2Zvcm19LHJlbW92ZVZhbHVlRnJvbVJlbmRlclN0YXRlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC52YXJzLHI9dC5zdHlsZTtkZWxldGUgbltlXSxkZWxldGUgcltlXX0sbWFrZVRhcmdldEFuaW1hdGFibGU6ZnVuY3Rpb24oZSx0LG4sbyl7dmFyIGk9bi50cmFuc2Zvcm1WYWx1ZXM7dm9pZCAwPT09byYmKG89ITApO3ZhciBhPXQudHJhbnNpdGlvbixsPXQudHJhbnNpdGlvbkVuZCxzPXIuX19yZXN0KHQsW1widHJhbnNpdGlvblwiLFwidHJhbnNpdGlvbkVuZFwiXSksYz1xdChzLGF8fHt9LGUpO2lmKGkmJihsJiYobD1pKGwpKSxzJiYocz1pKHMpKSxjJiYoYz1pKGMpKSksbyl7enQoZSxzLGMpO3ZhciB1PWZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBpPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbyxpPXIuX19yZXN0KHQsW10pLGE9ZS5nZXRJbnN0YW5jZSgpO2lmKCEoYSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSlyZXR1cm57dGFyZ2V0OmksdHJhbnNpdGlvbkVuZDpufTtmb3IodmFyIGwgaW4gbiYmKG49ci5fX2Fzc2lnbih7fSxuKSksZS5mb3JFYWNoVmFsdWUoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0KCk7aWYoc3IodCkpe3ZhciBuPXVyKHQsYSk7biYmZS5zZXQobil9fSkpLGkpe3ZhciBzPWlbbF07aWYoc3Iocykpe3ZhciBjPXVyKHMsYSk7YyYmKGlbbF09YyxuJiYobnVsbCE9PShvPW5bbF0pJiZ2b2lkIDAhPT1vfHwobltsXT1zKSkpfX1yZXR1cm57dGFyZ2V0OmksdHJhbnNpdGlvbkVuZDpufX0oZSx0LG8pO3JldHVybiBLcihlLHQ9aS50YXJnZXQsbixvPWkudHJhbnNpdGlvbkVuZCl9KGUscyxjLGwpO2w9dS50cmFuc2l0aW9uRW5kLHM9dS50YXJnZXR9cmV0dXJuIHIuX19hc3NpZ24oe3RyYW5zaXRpb246YSx0cmFuc2l0aW9uRW5kOmx9LHMpfSxzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6U2UsYnVpbGQ6ZnVuY3Rpb24oZSx0LG4scixvLGksYSl7dm9pZCAwIT09ZS5pc1Zpc2libGUmJih0LnN0eWxlLnZpc2liaWxpdHk9ZS5pc1Zpc2libGU/XCJ2aXNpYmxlXCI6XCJoaWRkZW5cIik7dmFyIGw9ci5pc0VuYWJsZWQmJm8uaXNIeWRyYXRlZDthZSh0LG4scixvLGksYS50cmFuc2Zvcm1UZW1wbGF0ZSxsP2tyOnZvaWQgMCxsP1JyOnZvaWQgMCl9LHJlbmRlcjpPZX0sSnI9VHIoWHIpLFFyPVRyKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxYcikse2dldEJhc2VUYXJnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XX0scmVhZFZhbHVlRnJvbUluc3RhbmNlOmZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIEsodCk/KG51bGw9PT0obj1TdCh0KSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGVmYXVsdCl8fDA6KHQ9TGUuaGFzKHQpP3Q6X2UodCksZS5nZXRBdHRyaWJ1dGUodCkpfSxzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6amUsYnVpbGQ6ZnVuY3Rpb24oZSx0LG4scixvLGksYSl7dmFyIGw9ci5pc0VuYWJsZWQmJm8uaXNIeWRyYXRlZDtDZSh0LG4scixvLGksYS50cmFuc2Zvcm1UZW1wbGF0ZSxsP2tyOnZvaWQgMCxsP1JyOnZvaWQgMCl9LHJlbmRlcjpFZX0pKSxlbz1mdW5jdGlvbihlLHQpe3JldHVybiBGKGUpP1FyKHQse2VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiExfSk6SnIodCx7ZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246ITB9KX0sdG89ci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxvbikscHQpLGxyKSxTciksbm89JCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gWmUoZSx0LHRvLGVvKX0pKSxybz0kKFplKSxvbz0wO2Z1bmN0aW9uIGlvKCl7dmFyIGU9b287cmV0dXJuIG9vKyssZX12YXIgYW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPWUuaW5pdGlhbCxyPWUuaXNQcmVzZW50LGk9ZS5vbkV4aXRDb21wbGV0ZSxhPWUuY3VzdG9tLGw9ZS5wcmVzZW5jZUFmZmVjdHNMYXlvdXQscz1fKGxvKSxjPV8oaW8pLGY9by51c2VNZW1vKChmdW5jdGlvbigpe3JldHVybntpZDpjLGluaXRpYWw6bixpc1ByZXNlbnQ6cixjdXN0b206YSxvbkV4aXRDb21wbGV0ZTpmdW5jdGlvbihlKXtzLnNldChlLCEwKTt2YXIgdD0hMDtzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2V8fCh0PSExKX0pKSx0JiYobnVsbD09aXx8aSgpKX0scmVnaXN0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHMuc2V0KGUsITEpLGZ1bmN0aW9uKCl7cmV0dXJuIHMuZGVsZXRlKGUpfX19fSksbD92b2lkIDA6W3JdKTtyZXR1cm4gby51c2VNZW1vKChmdW5jdGlvbigpe3MuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gcy5zZXQodCwhMSl9KSl9KSxbcl0pLHUudXNlRWZmZWN0KChmdW5jdGlvbigpeyFyJiYhcy5zaXplJiYobnVsbD09aXx8aSgpKX0pLFtyXSksdS5jcmVhdGVFbGVtZW50KHguUHJvdmlkZXIse3ZhbHVlOmZ9LHQpfTtmdW5jdGlvbiBsbygpe3JldHVybiBuZXcgTWFwfWZ1bmN0aW9uIHNvKGUpe3JldHVybiBlLmtleXx8XCJcIn1mdW5jdGlvbiBjbyhlLHQsbil7dm9pZCAwPT09biYmKG49e30pO3ZhciByPWVlKGUpP2U6VnQoZSk7cmV0dXJuIEl0KFwiXCIscix0LG4pLHtzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHIuc3RvcCgpfX19ZnVuY3Rpb24gdW8oKXt2YXIgZT1WdCgxKSx0PXtsZWFkOnZvaWQgMCxmb2xsb3c6dm9pZCAwLGNyb3NzZmFkZU9wYWNpdHk6ITEscHJlc2VydmVGb2xsb3dPcGFjaXR5OiExfSxuPXIuX19hc3NpZ24oe30sdCksbz17fSxpPXt9LGE9ITEsYz1udWxsLHU9MDtmdW5jdGlvbiBmKG4sbyl7dmFyIGk9dC5sZWFkLGw9dC5mb2xsb3c7YT0hMCxjPW51bGw7dmFyIHU9ITEsZj1mdW5jdGlvbigpe3U9ITAsaSYmaS5zY2hlZHVsZVJlbmRlcigpLGwmJmwuc2NoZWR1bGVSZW5kZXIoKX0scD1mdW5jdGlvbigpe2E9ITEsYz1zLmdldEZyYW1lRGF0YSgpLnRpbWVzdGFtcH07cmV0dXJuIG89byYmUHQobyxcImNyb3NzZmFkZVwiKSxjbyhlLG4sci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG8pLHtvblVwZGF0ZTpmLG9uQ29tcGxldGU6ZnVuY3Rpb24oKXt1P3AoKTooZS5zZXQobiksZC5kZWZhdWx0LnJlYWQocCkpLGYoKX19KSl9cmV0dXJue2lzQWN0aXZlOmZ1bmN0aW9uKCl7cmV0dXJuIG8mJihhfHxzLmdldEZyYW1lRGF0YSgpLnRpbWVzdGFtcD09PWMpfSxmcm9tTGVhZDpmdW5jdGlvbihlKXtyZXR1cm4gZigwLGUpfSx0b0xlYWQ6ZnVuY3Rpb24ocil7dmFyIG89MDtyZXR1cm4gdC5wcmV2VmFsdWVzfHx0LmZvbGxvdz9uLmxlYWQ9PT10LmZvbGxvdyYmbi5mb2xsb3c9PT10LmxlYWQmJihvPTEtZS5nZXQoKSk6bz0xLGUuc2V0KG8pLGYoMSxyKX0scmVzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXQoMSl9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zdG9wKCl9LGdldENyb3NzZmFkZVN0YXRlOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBuLHIsYT1zLmdldEZyYW1lRGF0YSgpLnRpbWVzdGFtcCxjPXQubGVhZCxmPXQuZm9sbG93O2lmKGEhPT11JiZjKXt1PWE7dmFyIGQ9Yy5nZXRMYXRlc3RWYWx1ZXMoKTtPYmplY3QuYXNzaWduKG8sZCk7dmFyIHA9Zj9mLmdldExhdGVzdFZhbHVlcygpOnQucHJldlZhbHVlcztPYmplY3QuYXNzaWduKGkscCk7dmFyIGg9ZS5nZXQoKSxnPW51bGwhPT0obj1kLm9wYWNpdHkpJiZ2b2lkIDAhPT1uP246MSx2PW51bGwhPT0ocj1udWxsPT1wP3ZvaWQgMDpwLm9wYWNpdHkpJiZ2b2lkIDAhPT1yP3I6MTt0LmNyb3NzZmFkZU9wYWNpdHkmJmY/KG8ub3BhY2l0eT1sLm1peCghMSE9PWYuaXNWaXNpYmxlPzA6dixnLGZvKGgpKSxpLm9wYWNpdHk9dC5wcmVzZXJ2ZUZvbGxvd09wYWNpdHk/djpsLm1peCh2LDAscG8oaCkpKTpmfHwoby5vcGFjaXR5PWwubWl4KHYsZyxoKSksZnVuY3Rpb24oZSx0LG4scixvLGkpe2Zvcih2YXIgYT0wO2E8dm87YSsrKXt2YXIgcz1cImJvcmRlclwiK2dvW2FdK1wiUmFkaXVzXCIsYz1tbyhyLHMpLHU9bW8obixzKTtpZigodm9pZCAwIT09Y3x8dm9pZCAwIT09dSkmJihjfHwoYz0wKSx1fHwodT0wKSxcIm51bWJlclwiPT10eXBlb2YgYyYmXCJudW1iZXJcIj09dHlwZW9mIHUpKXt2YXIgZj1NYXRoLm1heChsLm1peChjLHUsaSksMCk7ZVtzXT10W3NdPWZ9fWlmKHIucm90YXRlfHxuLnJvdGF0ZSl7dmFyIGQ9bC5taXgoci5yb3RhdGV8fDAsbi5yb3RhdGV8fDAsaSk7ZS5yb3RhdGU9dC5yb3RhdGU9ZH0hbyYmbi5iYWNrZ3JvdW5kQ29sb3ImJnIuYmFja2dyb3VuZENvbG9yJiYoZS5iYWNrZ3JvdW5kQ29sb3I9dC5iYWNrZ3JvdW5kQ29sb3I9bC5taXhDb2xvcihyLmJhY2tncm91bmRDb2xvcixuLmJhY2tncm91bmRDb2xvcikoaSkpfShvLGksZCxwfHx7fSxCb29sZWFuKGYpLGgpfX0oKSxuPT09dC5sZWFkP286bj09PXQuZm9sbG93P2k6dm9pZCAwfSxzZXRPcHRpb25zOmZ1bmN0aW9uKGUpe249dCx0PWUsbz17fSxpPXt9fSxnZXRMYXRlc3RWYWx1ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gb319fXZhciBmbz1obygwLC41LGwuY2lyY091dCkscG89aG8oLjUsLjk1LGwubGluZWFyKTtmdW5jdGlvbiBobyhlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByPGU/MDpyPnQ/MTpuKGwucHJvZ3Jlc3MoZSx0LHIpKX19dmFyIGdvPVtcIlRvcExlZnRcIixcIlRvcFJpZ2h0XCIsXCJCb3R0b21MZWZ0XCIsXCJCb3R0b21SaWdodFwiXSx2bz1nby5sZW5ndGg7ZnVuY3Rpb24gbW8oZSx0KXt2YXIgbjtyZXR1cm4gbnVsbCE9PShuPWVbdF0pJiZ2b2lkIDAhPT1uP246ZS5ib3JkZXJSYWRpdXN9dmFyIENvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuY2hpbGRyZW49bmV3IFNldCx0LnN0YWNrcz1uZXcgTWFwLHQuaGFzTW91bnRlZD0hMSx0LnVwZGF0ZVNjaGVkdWxlZD0hMSx0LnJlbmRlclNjaGVkdWxlZD0hMSx0LnN5bmNDb250ZXh0PXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxicigpKSx7c3luY1VwZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5zY2hlZHVsZVVwZGF0ZShlKX0sZm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt0LnN5bmNDb250ZXh0PXIuX19hc3NpZ24oe30sdC5zeW5jQ29udGV4dCksdC5zY2hlZHVsZVVwZGF0ZSghMCl9LHJlZ2lzdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0LmFkZENoaWxkKGUpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQucmVtb3ZlQ2hpbGQoZSl9fSksdH1yZXR1cm4gci5fX2V4dGVuZHModCxlKSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3RoaXMuaGFzTW91bnRlZD0hMH0sdC5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5zdGFydExheW91dEFuaW1hdGlvbigpfSx0LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJTY2hlZHVsZWQ9ITAsITB9LHQucHJvdG90eXBlLnN0YXJ0TGF5b3V0QW5pbWF0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnJlbmRlclNjaGVkdWxlZD10aGlzLnVwZGF0ZVNjaGVkdWxlZD0hMTt2YXIgdD10aGlzLnByb3BzLnR5cGU7dGhpcy5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmlzUHJlc2VudD9lLnByZXNlbmNlIT09aXIuRW50ZXJpbmcmJihlLnByZXNlbmNlPWUucHJlc2VuY2U9PT1pci5FeGl0aW5nP2lyLkVudGVyaW5nOmlyLlByZXNlbnQpOmUucHJlc2VuY2U9aXIuRXhpdGluZ30pKSx0aGlzLnVwZGF0ZVN0YWNrcygpO3ZhciBuPXtsYXlvdXRSZWFkeTpmdW5jdGlvbihuKXt2b2lkIDAhPT1uLmdldExheW91dElkKCk/ZS5nZXRTdGFjayhuKS5hbmltYXRlKG4sXCJjcm9zc2ZhZGVcIj09PXQpOm4ubm90aWZ5TGF5b3V0UmVhZHkoKX0scGFyZW50OnRoaXMuY29udGV4dC52aXN1YWxFbGVtZW50fTt0aGlzLmNoaWxkcmVuLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLnN5bmNDb250ZXh0LmFkZCh0KX0pKSx0aGlzLnN5bmNDb250ZXh0LmZsdXNoKG4pLHRoaXMuc3RhY2tzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsZWFyU25hcHNob3QoKX0pKX0sdC5wcm90b3R5cGUudXBkYXRlU3RhY2tzPWZ1bmN0aW9uKCl7dGhpcy5zdGFja3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudXBkYXRlTGVhZEFuZEZvbGxvdygpfSkpfSx0LnByb3RvdHlwZS5zY2hlZHVsZVVwZGF0ZT1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT0hMSksIWUmJnRoaXMudXBkYXRlU2NoZWR1bGVkfHwodGhpcy51cGRhdGVTY2hlZHVsZWQ9ITAsdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSExLG49e30scj0wO3I8ei5sZW5ndGg7cisrKXt2YXIgbz1cInJvdGF0ZVwiK3pbcl07ZS5oYXNWYWx1ZShvKSYmMCE9PWUuZ2V0U3RhdGljVmFsdWUobykmJih0PSEwLG5bb109ZS5nZXRTdGF0aWNWYWx1ZShvKSxlLnNldFN0YXRpY1ZhbHVlKG8sMCkpfWlmKHQpe2Zvcih2YXIgbyBpbiBlLnN5bmNSZW5kZXIoKSxuKWUuc2V0U3RhdGljVmFsdWUobyxuW29dKTtlLnNjaGVkdWxlUmVuZGVyKCl9fShlKSxlLnNob3VsZFJlc2V0VHJhbnNmb3JtKCkmJmUucmVzZXRUcmFuc2Zvcm0oKX0pKSx0aGlzLmNoaWxkcmVuLmZvckVhY2goQW4pLHRoaXMuc3RhY2tzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnVwZGF0ZVNuYXBzaG90KCl9KSksIWUmJnRoaXMucmVuZGVyU2NoZWR1bGVkfHwodGhpcy5yZW5kZXJTY2hlZHVsZWQ9ITAsdGhpcy5mb3JjZVVwZGF0ZSgpKSl9LHQucHJvdG90eXBlLmFkZENoaWxkPWZ1bmN0aW9uKGUpe3RoaXMuY2hpbGRyZW4uYWRkKGUpLHRoaXMuYWRkVG9TdGFjayhlKSxlLnByZXNlbmNlPXRoaXMuaGFzTW91bnRlZD9pci5FbnRlcmluZzppci5QcmVzZW50fSx0LnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbihlKXt0aGlzLnNjaGVkdWxlVXBkYXRlKCksdGhpcy5jaGlsZHJlbi5kZWxldGUoZSksdGhpcy5yZW1vdmVGcm9tU3RhY2soZSl9LHQucHJvdG90eXBlLmFkZFRvU3RhY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRTdGFjayhlKTtudWxsPT10fHx0LmFkZChlKX0sdC5wcm90b3R5cGUucmVtb3ZlRnJvbVN0YWNrPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0U3RhY2soZSk7bnVsbD09dHx8dC5yZW1vdmUoZSl9LHQucHJvdG90eXBlLmdldFN0YWNrPWZ1bmN0aW9uKGUpe3ZhciB0LG4sbyxpLGEsbCxzLGMsdT1lLmdldExheW91dElkKCk7aWYodm9pZCAwIT09dSlyZXR1cm4hdGhpcy5zdGFja3MuaGFzKHUpJiZ0aGlzLnN0YWNrcy5zZXQodSwoaT1uZXcgU2V0LGE9e2xlYWRJc0V4aXRpbmc6ITF9LGw9ci5fX2Fzc2lnbih7fSxhKSxzPXVvKCksYz0hMSx7YWRkOmZ1bmN0aW9uKGUpe2Uuc2V0Q3Jvc3NmYWRlcihzKSxpLmFkZChlKSxvJiYoZS5wcmV2RHJhZ0N1cnNvcj1vKSxhLmxlYWR8fChhLmxlYWQ9ZSl9LHJlbW92ZTpmdW5jdGlvbihlKXtpLmRlbGV0ZShlKX0sZ2V0TGVhZDpmdW5jdGlvbigpe3JldHVybiBhLmxlYWR9LHVwZGF0ZVNuYXBzaG90OmZ1bmN0aW9uKCl7aWYoYS5sZWFkKXt0PXMuaXNBY3RpdmUoKT9zLmdldExhdGVzdFZhbHVlcygpOmEubGVhZC5nZXRMYXRlc3RWYWx1ZXMoKSxuPWEubGVhZC5wcmV2Vmlld3BvcnRCb3g7dmFyIGU9bnIuZ2V0KGEubGVhZCk7ZSYmZS5pc0RyYWdnaW5nJiYobz1lLmN1cnNvclByb2dyZXNzKX19LGNsZWFyU25hcHNob3Q6ZnVuY3Rpb24oKXtvPW49dm9pZCAwfSx1cGRhdGVMZWFkQW5kRm9sbG93OmZ1bmN0aW9uKCl7dmFyIGUsbixvO2w9ci5fX2Fzc2lnbih7fSxhKTtmb3IodmFyIHU9QXJyYXkuZnJvbShpKSxmPXUubGVuZ3RoO2YtLTtmPj0wKXt2YXIgZD11W2ZdO2lmKG4mJihudWxsIT1vfHwobz1kKSksbnVsbCE9bnx8KG49ZCksbiYmbylicmVha31hLmxlYWQ9bixhLmZvbGxvdz1vLGEubGVhZElzRXhpdGluZz0obnVsbD09PShlPWEubGVhZCl8fHZvaWQgMD09PWU/dm9pZCAwOmUucHJlc2VuY2UpPT09aXIuRXhpdGluZyxzLnNldE9wdGlvbnMoe2xlYWQ6bixmb2xsb3c6byxwcmV2VmFsdWVzOnQsY3Jvc3NmYWRlT3BhY2l0eToobnVsbD09bz92b2lkIDA6by5pc1ByZXNlbmNlUm9vdCl8fChudWxsPT1uP3ZvaWQgMDpuLmlzUHJlc2VuY2VSb290KX0pLGEubGVhZD09PWwuZm9sbG93fHxsLmxlYWQ9PT1hLmxlYWQmJmwubGVhZElzRXhpdGluZz09PWEubGVhZElzRXhpdGluZ3x8KGM9ITApfSxhbmltYXRlOmZ1bmN0aW9uKGUsdCl7dmFyIHI7aWYodm9pZCAwPT09dCYmKHQ9ITEpLGU9PT1hLmxlYWQpe3Q/ZS5wb2ludFRvKGEubGVhZCk6ZS5zZXRWaXNpYmlsaXR5KCEwKTt2YXIgbz17fSxpPW51bGw9PT0ocj1hLmZvbGxvdyl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0UHJvamVjdGlvblBhcmVudCgpO2lmKGkmJihvLnByZXZQYXJlbnQ9aSksZS5wcmVzZW5jZT09PWlyLkVudGVyaW5nP28ub3JpZ2luQm94PWEuZm9sbG93P2EuZm9sbG93LnByZXZWaWV3cG9ydEJveDpuOmUucHJlc2VuY2U9PT1pci5FeGl0aW5nJiYoby50YXJnZXRCb3g9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gbnVsbD09PShlPWEuZm9sbG93KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dH0oKSksYyl7Yz0hMTt2YXIgbD1lLmdldERlZmF1bHRUcmFuc2l0aW9uKCk7ZS5wcmVzZW5jZT09PWlyLkVudGVyaW5nP3MudG9MZWFkKGwpOnMuZnJvbUxlYWQobCl9ZS5ub3RpZnlMYXlvdXRSZWFkeShvKX1lbHNlIHQ/YS5sZWFkJiZlLnBvaW50VG8oYS5sZWFkKTplLnNldFZpc2liaWxpdHkoITEpfX0pKSx0aGlzLnN0YWNrcy5nZXQodSl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB1LmNyZWF0ZUVsZW1lbnQoX3IuUHJvdmlkZXIse3ZhbHVlOnRoaXMuc3luY0NvbnRleHR9LHRoaXMucHJvcHMuY2hpbGRyZW4pfSx0LmNvbnRleHRUeXBlPXcsdH0odS5Db21wb25lbnQpO2Z1bmN0aW9uIHlvKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGV9dmFyIHdvPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7cmVuZGVyZXI6ZW99LG9uKSxwdCksYm89ci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sd28pLGxyKSxTcik7ZnVuY3Rpb24geG8oZSl7dmFyIHQ9XygoZnVuY3Rpb24oKXtyZXR1cm4gVnQoZSl9KSk7aWYoby51c2VDb250ZXh0KHkpLmlzU3RhdGljKXt2YXIgbj1yLl9fcmVhZChvLnVzZVN0YXRlKGUpLDIpWzFdO28udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiB0Lm9uQ2hhbmdlKG4pfSksW10pfXJldHVybiB0fWZ1bmN0aW9uIF9vKGUsdCl7by51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7aWYoZWUoZSkpcmV0dXJuIGUub25DaGFuZ2UodCl9KSxbdF0pfWZ1bmN0aW9uIE9vKGUsdCl7dmFyIG49eG8odCgpKSxyPWZ1bmN0aW9uKCl7cmV0dXJuIG4uc2V0KHQoKSl9O3JldHVybiByKCksZnVuY3Rpb24oZSx0KXtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXt2YXIgbj1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUub25DaGFuZ2UodCl9KSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUoKX0pKX19KSl9KGUsKGZ1bmN0aW9uKCl7cmV0dXJuIGQuZGVmYXVsdC51cGRhdGUociwhMSwhMCl9KSksbn12YXIgTG8sRW89ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLm1peH0oZSk/ZS5taXg6dm9pZCAwfTtmdW5jdGlvbiBTbygpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTt2YXIgbj0hQXJyYXkuaXNBcnJheShlWzBdKSxvPW4/MDotMSxpPWVbMCtvXSxhPWVbMStvXSxzPWVbMitvXSxjPWVbMytvXSx1PWwuaW50ZXJwb2xhdGUoYSxzLHIuX19hc3NpZ24oe21peGVyOkVvKHNbMF0pfSxjKSk7cmV0dXJuIG4/dShpKTp1fWZ1bmN0aW9uIGpvKGUsdCxuLG8pe3ZhciBpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpTbyh0LG4sbyk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/TW8oZSxpKTpNbyhbZV0sKGZ1bmN0aW9uKGUpe3ZhciB0PXIuX19yZWFkKGUsMSlbMF07cmV0dXJuIGkodCl9KSl9ZnVuY3Rpb24gTW8oZSx0KXt2YXIgbj1fKChmdW5jdGlvbigpe3JldHVybltdfSkpO3JldHVybiBPbyhlLChmdW5jdGlvbigpe24ubGVuZ3RoPTA7Zm9yKHZhciByPWUubGVuZ3RoLG89MDtvPHI7bysrKW5bb109ZVtvXS5nZXQoKTtyZXR1cm4gdChuKX0pKX1mdW5jdGlvbiBrbygpe3JldHVybntzY3JvbGxYOlZ0KDApLHNjcm9sbFk6VnQoMCksc2Nyb2xsWFByb2dyZXNzOlZ0KDApLHNjcm9sbFlQcm9ncmVzczpWdCgwKX19ZnVuY3Rpb24gUm8oZSx0LG4pe24uc2V0KGUmJnQ/ZS90OjApfWZ1bmN0aW9uIFBvKGUsdCl7dmFyIG49ZnVuY3Rpb24oKXt2YXIgbj10KCkscj1uLnhPZmZzZXQsbz1uLnlPZmZzZXQsaT1uLnhNYXhPZmZzZXQsYT1uLnlNYXhPZmZzZXQ7ZS5zY3JvbGxYLnNldChyKSxlLnNjcm9sbFkuc2V0KG8pLFJvKHIsaSxlLnNjcm9sbFhQcm9ncmVzcyksUm8obyxhLGUuc2Nyb2xsWVByb2dyZXNzKX07cmV0dXJuIG4oKSxufWZ1bmN0aW9uIElvKCl7cmV0dXJue3hPZmZzZXQ6d2luZG93LnBhZ2VYT2Zmc2V0LHlPZmZzZXQ6d2luZG93LnBhZ2VZT2Zmc2V0LHhNYXhPZmZzZXQ6ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aC13aW5kb3cuaW5uZXJXaWR0aCx5TWF4T2Zmc2V0OmRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0LXdpbmRvdy5pbm5lckhlaWdodH19dmFyIEFvLFRvPSExO2Z1bmN0aW9uIEhvKCl7dmFyIGU9ITEsdD1bXSxuPW5ldyBTZXQsbz17c3Vic2NyaWJlOmZ1bmN0aW9uKGUpe3JldHVybiBuLmFkZChlKSxmdW5jdGlvbigpe24uZGVsZXRlKGUpfX0sc3RhcnQ6ZnVuY3Rpb24ocixvKXtpZihlKXt2YXIgaT1bXTtyZXR1cm4gbi5mb3JFYWNoKChmdW5jdGlvbihlKXtpLnB1c2goWXQoZSxyLHt0cmFuc2l0aW9uT3ZlcnJpZGU6b30pKX0pKSxQcm9taXNlLmFsbChpKX1yZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3QucHVzaCh7YW5pbWF0aW9uOltyLG9dLHJlc29sdmU6ZX0pfSkpfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGkuaW52YXJpYW50KGUsXCJjb250cm9scy5zZXQoKSBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBjb21wb25lbnQgaGFzIG1vdW50ZWQuIENvbnNpZGVyIGNhbGxpbmcgd2l0aGluIGEgdXNlRWZmZWN0IGhvb2suXCIpLG4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7QXJyYXkuaXNBcnJheSh0KT9XdChlLHQpOlwic3RyaW5nXCI9PXR5cGVvZiB0P1d0KGUsW3RdKTpVdChlLHQpfShlLHQpfSkpfSxzdG9wOmZ1bmN0aW9uKCl7bi5mb3JFYWNoKChmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7ZS5mb3JFYWNoVmFsdWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0b3AoKX0pKX0oZSl9KSl9LG1vdW50OmZ1bmN0aW9uKCl7cmV0dXJuIGU9ITAsdC5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmFuaW1hdGlvbixuPWUucmVzb2x2ZTtvLnN0YXJ0LmFwcGx5KG8sci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKHQpKSkudGhlbihuKX0pKSxmdW5jdGlvbigpe2U9ITEsby5zdG9wKCl9fX07cmV0dXJuIG99dmFyIEJvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuY29tcG9uZW50Q29udHJvbHM9bmV3IFNldH1yZXR1cm4gZS5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuY29tcG9uZW50Q29udHJvbHMuYWRkKGUpLGZ1bmN0aW9uKCl7cmV0dXJuIHQuY29tcG9uZW50Q29udHJvbHMuZGVsZXRlKGUpfX0sZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmNvbXBvbmVudENvbnRyb2xzLmZvckVhY2goKGZ1bmN0aW9uKG4pe24uc3RhcnQoZS5uYXRpdmVFdmVudHx8ZSx0KX0pKX0sZS5wcm90b3R5cGUudXBkYXRlQ29uc3RyYWludHM9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9ITApLHRoaXMuY29tcG9uZW50Q29udHJvbHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS51cGRhdGVDb25zdHJhaW50cygpfSkpLGUmJlFuKCl9LGV9KCksVm89ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEJvfSxEbz1mdW5jdGlvbigpe3JldHVybnt9fSxabz1Ucih7YnVpbGQ6ZnVuY3Rpb24oKXt9LG1lYXN1cmVWaWV3cG9ydEJveDpmdW5jdGlvbigpe3JldHVybnt4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fX0scmVzZXRUcmFuc2Zvcm06ZnVuY3Rpb24oKXt9LHJlc3RvcmVUcmFuc2Zvcm06ZnVuY3Rpb24oKXt9LHJlbW92ZVZhbHVlRnJvbVJlbmRlclN0YXRlOmZ1bmN0aW9uKCl7fSxyZW5kZXI6ZnVuY3Rpb24oKXt9LHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczpEbyxyZWFkVmFsdWVGcm9tSW5zdGFuY2U6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuLmluaXRpYWxTdGF0ZVt0XXx8MH0sbWFrZVRhcmdldEFuaW1hdGFibGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnRyYW5zaXRpb24sbz10LnRyYW5zaXRpb25FbmQsaT1yLl9fcmVzdCh0LFtcInRyYW5zaXRpb25cIixcInRyYW5zaXRpb25FbmRcIl0pO3JldHVybiB6dChlLGkscXQoaSxufHx7fSxlKSksci5fX2Fzc2lnbih7dHJhbnNpdGlvbjpuLHRyYW5zaXRpb25FbmQ6b30saSl9fSksJG89VGUoe3NjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczpEbyxjcmVhdGVSZW5kZXJTdGF0ZTpEb30pLE5vPWZ1bmN0aW9uKGUpe3JldHVybiBlPi4wMDE/MS9lOjFlNX0sRm89ITE7dC5BbmltYXRlUHJlc2VuY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPWUuY3VzdG9tLGk9ZS5pbml0aWFsLGE9dm9pZCAwPT09aXx8aSxsPWUub25FeGl0Q29tcGxldGUscz1lLmV4aXRCZWZvcmVFbnRlcixjPWUucHJlc2VuY2VBZmZlY3RzTGF5b3V0LGY9dm9pZCAwPT09Y3x8YyxkPWZ1bmN0aW9uKCl7dmFyIGU9by51c2VSZWYoITEpLHQ9ci5fX3JlYWQoby51c2VTdGF0ZSgwKSwyKSxuPXRbMF0saT10WzFdO3JldHVybiBmdCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5jdXJyZW50PSEwfSkpLG8udXNlQ2FsbGJhY2soKGZ1bmN0aW9uKCl7IWUuY3VycmVudCYmaShuKzEpfSksW25dKX0oKSxwPW8udXNlQ29udGV4dChfcik7THIocCkmJihkPXAuZm9yY2VVcGRhdGUpO3ZhciBoPW8udXNlUmVmKCEwKSxnPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBvLkNoaWxkcmVuLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7by5pc1ZhbGlkRWxlbWVudChlKSYmdC5wdXNoKGUpfSkpLHR9KHQpLHY9by51c2VSZWYoZyksbT1vLnVzZVJlZihuZXcgTWFwKS5jdXJyZW50LEM9by51c2VSZWYobmV3IFNldCkuY3VycmVudDtpZihmdW5jdGlvbihlLHQpe2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49c28oZSk7dC5zZXQobixlKX0pKX0oZyxtKSxoLmN1cnJlbnQpcmV0dXJuIGguY3VycmVudD0hMSx1LmNyZWF0ZUVsZW1lbnQodS5GcmFnbWVudCxudWxsLGcubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdS5jcmVhdGVFbGVtZW50KGFvLHtrZXk6c28oZSksaXNQcmVzZW50OiEwLGluaXRpYWw6ISFhJiZ2b2lkIDAscHJlc2VuY2VBZmZlY3RzTGF5b3V0OmZ9LGUpfSkpKTtmb3IodmFyIHk9ci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKGcpKSx3PXYuY3VycmVudC5tYXAoc28pLGI9Zy5tYXAoc28pLHg9dy5sZW5ndGgsXz0wO188eDtfKyspe3ZhciBPPXdbX107LTE9PT1iLmluZGV4T2YoTyk/Qy5hZGQoTyk6Qy5kZWxldGUoTyl9cmV0dXJuIHMmJkMuc2l6ZSYmKHk9W10pLEMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoLTE9PT1iLmluZGV4T2YoZSkpe3ZhciB0PW0uZ2V0KGUpO2lmKHQpe3ZhciByPXcuaW5kZXhPZihlKTt5LnNwbGljZShyLDAsdS5jcmVhdGVFbGVtZW50KGFvLHtrZXk6c28odCksaXNQcmVzZW50OiExLG9uRXhpdENvbXBsZXRlOmZ1bmN0aW9uKCl7bS5kZWxldGUoZSksQy5kZWxldGUoZSk7dmFyIHQ9di5jdXJyZW50LmZpbmRJbmRleCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5PT09ZX0pKTt2LmN1cnJlbnQuc3BsaWNlKHQsMSksQy5zaXplfHwodi5jdXJyZW50PWcsZCgpLGwmJmwoKSl9LGN1c3RvbTpuLHByZXNlbmNlQWZmZWN0c0xheW91dDpmfSx0KSl9fX0pKSx5PXkubWFwKChmdW5jdGlvbihlKXt2YXIgdD1lLmtleTtyZXR1cm4gQy5oYXModCk/ZTp1LmNyZWF0ZUVsZW1lbnQoYW8se2tleTpzbyhlKSxpc1ByZXNlbnQ6ITAscHJlc2VuY2VBZmZlY3RzTGF5b3V0OmZ9LGUpfSkpLHYuY3VycmVudD15LHUuY3JlYXRlRWxlbWVudCh1LkZyYWdtZW50LG51bGwsQy5zaXplP3k6eS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBvLmNsb25lRWxlbWVudChlKX0pKSl9LHQuQW5pbWF0ZVNoYXJlZExheW91dD1Dbyx0LkRyYWdDb250cm9scz1Cbyx0LkZsYXRUcmVlPUFyLHQuRnJhbWVyVHJlZUxheW91dENvbnRleHQ9T3IsdC5MYXlvdXRHcm91cENvbnRleHQ9TSx0LkxhenlNb3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPWUuZmVhdHVyZXMsaT1lLnN0cmljdCxhPXZvaWQgMCE9PWkmJmksbD1yLl9fcmVhZChvLnVzZVN0YXRlKCF5byhuKSksMilbMV0scz1vLnVzZVJlZih2b2lkIDApO2lmKCF5byhuKSl7dmFyIGM9bi5yZW5kZXJlcixmPXIuX19yZXN0KG4sW1wicmVuZGVyZXJcIl0pO3MuY3VycmVudD1jLGcoZil9cmV0dXJuIG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3lvKG4pJiZuKCkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZW5kZXJlcjtnKHIuX19yZXN0KGUsW1wicmVuZGVyZXJcIl0pKSxzLmN1cnJlbnQ9dCxsKCEwKX0pKX0pLFtdKSx1LmNyZWF0ZUVsZW1lbnQodi5Qcm92aWRlcix7dmFsdWU6e3JlbmRlcmVyOnMuY3VycmVudCxzdHJpY3Q6YX19LHQpfSx0Lk1vdGlvbkNvbmZpZz1mdW5jdGlvbihlKXt2YXIgdD1lLmNoaWxkcmVuLG49ci5fX3Jlc3QoZSxbXCJjaGlsZHJlblwiXSk7KG49ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG8udXNlQ29udGV4dCh5KSksbikpLmlzU3RhdGljPV8oKGZ1bmN0aW9uKCl7cmV0dXJuIG4uaXNTdGF0aWN9KSk7dmFyIGk9XCJvYmplY3RcIj09dHlwZW9mIG4udHJhbnNpdGlvbj9uLnRyYW5zaXRpb24udG9TdHJpbmcoKTpcIlwiLGE9by51c2VNZW1vKChmdW5jdGlvbigpe3JldHVybiBufSksW2ksbi50cmFuc2Zvcm1QYWdlUG9pbnRdKTtyZXR1cm4gdS5jcmVhdGVFbGVtZW50KHkuUHJvdmlkZXIse3ZhbHVlOmF9LHQpfSx0Lk1vdGlvbkNvbmZpZ0NvbnRleHQ9eSx0Lk1vdGlvblZhbHVlPUJ0LHQuUHJlc2VuY2VDb250ZXh0PXgsdC5TaGFyZWRMYXlvdXRDb250ZXh0PV9yLHQuYWRkU2NhbGVDb3JyZWN0aW9uPVcsdC5hbmltYXRlPWNvLHQuYW5pbWF0ZVZpc3VhbEVsZW1lbnQ9WXQsdC5hbmltYXRpb25Db250cm9scz1Ibyx0LmJhdGNoTGF5b3V0PUpuLHQuY3JlYXRlQmF0Y2hlcj1icix0LmNyZWF0ZUNyb3NzZmFkZXI9dW8sdC5jcmVhdGVEb21Nb3Rpb25Db21wb25lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFooWmUoZSx7Zm9yd2FyZE1vdGlvblByb3BzOiExfSx0byxlbykpfSx0LmNyZWF0ZU1vdGlvbkNvbXBvbmVudD1aLHQuZG9tQW5pbWF0aW9uPXdvLHQuZG9tTWF4PWJvLHQuZmx1c2hMYXlvdXQ9UW4sdC5pc1ZhbGlkTW90aW9uUHJvcD1mZSx0Lm09cm8sdC5tb3Rpb249bm8sdC5tb3Rpb25WYWx1ZT1WdCx0LnJlc29sdmVNb3Rpb25WYWx1ZT1JZSx0LnNuYXBzaG90Vmlld3BvcnRCb3g9QW4sdC50cmFuc2Zvcm09U28sdC51c2VBbmltYXRpb249ZnVuY3Rpb24oKXt2YXIgZT1fKEhvKTtyZXR1cm4gby51c2VFZmZlY3QoZS5tb3VudCxbXSksZX0sdC51c2VDeWNsZT1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTt2YXIgbj1vLnVzZVJlZigwKSxpPXIuX19yZWFkKG8udXNlU3RhdGUoZVtuLmN1cnJlbnRdKSwyKSxhPWlbMF0scz1pWzFdO3JldHVyblthLGZ1bmN0aW9uKHQpe24uY3VycmVudD1cIm51bWJlclwiIT10eXBlb2YgdD9sLndyYXAoMCxlLmxlbmd0aCxuLmN1cnJlbnQrMSk6dCxzKGVbbi5jdXJyZW50XSl9XX0sdC51c2VEZXByZWNhdGVkQW5pbWF0ZWRTdGF0ZT1mdW5jdGlvbihlKXt2YXIgdD1yLl9fcmVhZChvLnVzZVN0YXRlKGUpLDIpLG49dFswXSxpPXRbMV0sYT0kbyh7fSwhMSksbD1fKChmdW5jdGlvbigpe3JldHVybiBabyh7cHJvcHM6e30sdmlzdWFsU3RhdGU6YX0se2luaXRpYWxTdGF0ZTplfSl9KSk7cmV0dXJuIG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiBsLm1vdW50KHt9KSxsLnVubW91bnQoKX0pLFtdKSxvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtsLnNldFByb3BzKHtvblVwZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gaShyLl9fYXNzaWduKHt9LGUpKX19KX0pKSxbbixfKChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gWXQobCxlKX19KSldfSx0LnVzZURlcHJlY2F0ZWRJbnZlcnRlZFNjYWxlPWZ1bmN0aW9uKGUpe3ZhciB0PXhvKDEpLG49eG8oMSkscj1iKCk7cmV0dXJuIGkuaW52YXJpYW50KCEoIWUmJiFyKSxcIklmIG5vIHNjYWxlIHZhbHVlcyBhcmUgcHJvdmlkZWQsIHVzZUludmVydGVkU2NhbGUgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIGNoaWxkIG9mIGFub3RoZXIgbW90aW9uIGNvbXBvbmVudC5cIiksaS53YXJuaW5nKEZvLFwidXNlSW52ZXJ0ZWRTY2FsZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gMy4wLiBVc2UgdGhlIGxheW91dCBwcm9wIGluc3RlYWQuXCIpLEZvPSEwLGU/KHQ9ZS5zY2FsZVh8fHQsbj1lLnNjYWxlWXx8bik6ciYmKHQ9ci5nZXRWYWx1ZShcInNjYWxlWFwiLDEpLG49ci5nZXRWYWx1ZShcInNjYWxlWVwiLDEpKSx7c2NhbGVYOmpvKHQsTm8pLHNjYWxlWTpqbyhuLE5vKX19LHQudXNlRG9tRXZlbnQ9TmUsdC51c2VEcmFnQ29udHJvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gXyhWbyl9LHQudXNlRWxlbWVudFNjcm9sbD1mdW5jdGlvbihlKXt2YXIgdD1fKGtvKTtyZXR1cm4gUigoZnVuY3Rpb24oKXt2YXIgbj1lLmN1cnJlbnQ7aWYoaS5pbnZhcmlhbnQoISFuLFwicmVmIHByb3ZpZGVkIHRvIHVzZVNjcm9sbCBtdXN0IGJlIHBhc3NlZCBpbnRvIGEgSFRNTCBlbGVtZW50LlwiKSxuKXt2YXIgcj1Qbyh0LGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybnt4T2Zmc2V0OmUuc2Nyb2xsTGVmdCx5T2Zmc2V0OmUuc2Nyb2xsVG9wLHhNYXhPZmZzZXQ6ZS5zY3JvbGxXaWR0aC1lLm9mZnNldFdpZHRoLHlNYXhPZmZzZXQ6ZS5zY3JvbGxIZWlnaHQtZS5vZmZzZXRIZWlnaHR9fX0obikpLG89JGUobixcInNjcm9sbFwiLHIse3Bhc3NpdmU6ITB9KSxhPSRlKG4sXCJyZXNpemVcIixyKTtyZXR1cm4gZnVuY3Rpb24oKXtvJiZvKCksYSYmYSgpfX19KSxbXSksdH0sdC51c2VJc1ByZXNlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gTChvLnVzZUNvbnRleHQoeCkpfSx0LnVzZU1vdGlvblRlbXBsYXRlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3ZhciByPWUubGVuZ3RoO3JldHVybiBPbyh0LChmdW5jdGlvbigpe2Zvcih2YXIgbj1cIlwiLG89MDtvPHI7bysrKW4rPWVbb10sdFtvXSYmKG4rPXRbb10uZ2V0KCkpO3JldHVybiBufSkpfSx0LnVzZU1vdGlvblZhbHVlPXhvLHQudXNlUHJlc2VuY2U9Tyx0LnVzZVJlZHVjZWRNb3Rpb249ZnVuY3Rpb24oKXshQW8mJmZ1bmN0aW9uKCl7aWYoQW89VnQobnVsbCksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdylpZih3aW5kb3cubWF0Y2hNZWRpYSl7dmFyIGU9d2luZG93Lm1hdGNoTWVkaWEoXCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbilcIiksdD1mdW5jdGlvbigpe3JldHVybiBBby5zZXQoZS5tYXRjaGVzKX07ZS5hZGRMaXN0ZW5lcih0KSx0KCl9ZWxzZSBBby5zZXQoITEpfSgpO3ZhciBlPXIuX19yZWFkKG8udXNlU3RhdGUoQW8uZ2V0KCkpLDIpLHQ9ZVswXSxuPWVbMV07cmV0dXJuIF9vKEFvLG4pLHR9LHQudXNlU3ByaW5nPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9e30pO3ZhciBuPW8udXNlQ29udGV4dCh5KS5pc1N0YXRpYyxpPW8udXNlUmVmKG51bGwpLGE9eG8oZWUoZSk/ZS5nZXQoKTplKTtyZXR1cm4gby51c2VNZW1vKChmdW5jdGlvbigpe3JldHVybiBhLmF0dGFjaCgoZnVuY3Rpb24oZSxvKXtyZXR1cm4gbj9vKGUpOihpLmN1cnJlbnQmJmkuY3VycmVudC5zdG9wKCksaS5jdXJyZW50PWwuYW5pbWF0ZShyLl9fYXNzaWduKHIuX19hc3NpZ24oe2Zyb206YS5nZXQoKSx0bzplLHZlbG9jaXR5OmEuZ2V0VmVsb2NpdHkoKX0sdCkse29uVXBkYXRlOm99KSksYS5nZXQoKSl9KSl9KSxPYmplY3QudmFsdWVzKHQpKSxfbyhlLChmdW5jdGlvbihlKXtyZXR1cm4gYS5zZXQocGFyc2VGbG9hdChlKSl9KSksYX0sdC51c2VUcmFuc2Zvcm09am8sdC51c2VWZWxvY2l0eT1mdW5jdGlvbihlKXt2YXIgdD14byhlLmdldFZlbG9jaXR5KCkpO3JldHVybiBvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gZS52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLmFkZCgoZnVuY3Rpb24oZSl7dC5zZXQoZSl9KSl9KSxbZV0pLHR9LHQudXNlVmlld3BvcnRTY3JvbGw9ZnVuY3Rpb24oKXtyZXR1cm4gTG98fChMbz1rbygpKSxSKChmdW5jdGlvbigpeyFUbyYmZnVuY3Rpb24oKXtpZihUbz0hMCxcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXt2YXIgZT1QbyhMbyxJbyk7JGUod2luZG93LFwic2Nyb2xsXCIsZSx7cGFzc2l2ZTohMH0pLCRlKHdpbmRvdyxcInJlc2l6ZVwiLGUpfX0oKX0pLFtdKSxMb30sdC52aXN1YWxFbGVtZW50PVRyfSw0ODM5OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49MS82MCoxZTMscj1cInVuZGVmaW5lZFwiIT10eXBlb2YgcGVyZm9ybWFuY2U/ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OmZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9LG89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz9mdW5jdGlvbihlKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIGUocigpKX0pLG4pfSxpPSEwLGE9ITEsbD0hMSxzPXtkZWx0YTowLHRpbWVzdGFtcDowfSxjPVtcInJlYWRcIixcInVwZGF0ZVwiLFwicHJlUmVuZGVyXCIsXCJyZW5kZXJcIixcInBvc3RSZW5kZXJcIl0sdT1jLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XT1mdW5jdGlvbihlKXt2YXIgdD1bXSxuPVtdLHI9MCxvPSExLGk9bmV3IFdlYWtTZXQsYT17c2NoZWR1bGU6ZnVuY3Rpb24oZSxhLGwpe3ZvaWQgMD09PWEmJihhPSExKSx2b2lkIDA9PT1sJiYobD0hMSk7dmFyIHM9bCYmbyxjPXM/dDpuO3JldHVybiBhJiZpLmFkZChlKSwtMT09PWMuaW5kZXhPZihlKSYmKGMucHVzaChlKSxzJiZvJiYocj10Lmxlbmd0aCkpLGV9LGNhbmNlbDpmdW5jdGlvbihlKXt2YXIgdD1uLmluZGV4T2YoZSk7LTEhPT10JiZuLnNwbGljZSh0LDEpLGkuZGVsZXRlKGUpfSxwcm9jZXNzOmZ1bmN0aW9uKGwpe3ZhciBzO2lmKG89ITAsdD0ocz1bbix0XSlbMF0sKG49c1sxXSkubGVuZ3RoPTAscj10Lmxlbmd0aClmb3IodmFyIGM9MDtjPHI7YysrKXt2YXIgdT10W2NdO3UobCksaS5oYXModSkmJihhLnNjaGVkdWxlKHUpLGUoKSl9bz0hMX19O3JldHVybiBhfSgoZnVuY3Rpb24oKXtyZXR1cm4gYT0hMH0pKSxlfSkse30pLGY9Yy5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7dmFyIG49dVt0XTtyZXR1cm4gZVt0XT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHZvaWQgMD09PXQmJih0PSExKSx2b2lkIDA9PT1yJiYocj0hMSksYXx8digpLG4uc2NoZWR1bGUoZSx0LHIpfSxlfSkse30pLGQ9Yy5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09dVt0XS5jYW5jZWwsZX0pLHt9KSxwPWMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPWZ1bmN0aW9uKCl7cmV0dXJuIHVbdF0ucHJvY2VzcyhzKX0sZX0pLHt9KSxoPWZ1bmN0aW9uKGUpe3JldHVybiB1W2VdLnByb2Nlc3Mocyl9LGc9ZnVuY3Rpb24oZSl7YT0hMSxzLmRlbHRhPWk/bjpNYXRoLm1heChNYXRoLm1pbihlLXMudGltZXN0YW1wLDQwKSwxKSxzLnRpbWVzdGFtcD1lLGw9ITAsYy5mb3JFYWNoKGgpLGw9ITEsYSYmKGk9ITEsbyhnKSl9LHY9ZnVuY3Rpb24oKXthPSEwLGk9ITAsbHx8byhnKX07dC5jYW5jZWxTeW5jPWQsdC5kZWZhdWx0PWYsdC5mbHVzaFN5bmM9cCx0LmdldEZyYW1lRGF0YT1mdW5jdGlvbigpe3JldHVybiBzfX0sNDM5NDooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtpbnZhcmlhbnQ6KCk9Pm8sd2FybmluZzooKT0+cn0pO3ZhciByPWZ1bmN0aW9uKCl7fSxvPWZ1bmN0aW9uKCl7fX0sNzczOihlLHQsbik9Pnt2YXIgcixvPVwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfX1wiLGk9L15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLyxhPVwib2JqZWN0XCI9PXR5cGVvZiBuLmcmJm4uZyYmbi5nLk9iamVjdD09PU9iamVjdCYmbi5nLGw9XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLHM9YXx8bHx8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpLGM9QXJyYXkucHJvdG90eXBlLHU9RnVuY3Rpb24ucHJvdG90eXBlLGY9T2JqZWN0LnByb3RvdHlwZSxkPXNbXCJfX2NvcmUtanNfc2hhcmVkX19cIl0scD0ocj0vW14uXSskLy5leGVjKGQmJmQua2V5cyYmZC5rZXlzLklFX1BST1RPfHxcIlwiKSk/XCJTeW1ib2woc3JjKV8xLlwiK3I6XCJcIixoPXUudG9TdHJpbmcsZz1mLmhhc093blByb3BlcnR5LHY9Zi50b1N0cmluZyxtPVJlZ0V4cChcIl5cIitoLmNhbGwoZykucmVwbGFjZSgvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csXCJcXFxcJCZcIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZyxcIiQxLio/XCIpK1wiJFwiKSxDPWMuc3BsaWNlLHk9RShzLFwiTWFwXCIpLHc9RShPYmplY3QsXCJjcmVhdGVcIik7ZnVuY3Rpb24gYihlKXt2YXIgdD0tMSxuPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiB4KGUpe3ZhciB0PS0xLG49ZT9lLmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PG47KXt2YXIgcj1lW3RdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWZ1bmN0aW9uIF8oZSl7dmFyIHQ9LTEsbj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gTyhlLHQpe2Zvcih2YXIgbixyLG89ZS5sZW5ndGg7by0tOylpZigobj1lW29dWzBdKT09PShyPXQpfHxuIT1uJiZyIT1yKXJldHVybiBvO3JldHVybi0xfWZ1bmN0aW9uIEwoZSx0KXt2YXIgbixyLG89ZS5fX2RhdGFfXztyZXR1cm4oXCJzdHJpbmdcIj09KHI9dHlwZW9mKG49dCkpfHxcIm51bWJlclwiPT1yfHxcInN5bWJvbFwiPT1yfHxcImJvb2xlYW5cIj09cj9cIl9fcHJvdG9fX1wiIT09bjpudWxsPT09bik/b1tcInN0cmluZ1wiPT10eXBlb2YgdD9cInN0cmluZ1wiOlwiaGFzaFwiXTpvLm1hcH1mdW5jdGlvbiBFKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZVt0XX0oZSx0KTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoIWooZSl8fHAmJnAgaW4gZSlyZXR1cm4hMTt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdD1qKGUpP3YuY2FsbChlKTpcIlwiO3JldHVyblwiW29iamVjdCBGdW5jdGlvbl1cIj09dHx8XCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXVwiPT10fShlKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9ITE7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZS50b1N0cmluZyl0cnl7dD0hIShlK1wiXCIpfWNhdGNoKGUpe31yZXR1cm4gdH0oZSk/bTppO3JldHVybiB0LnRlc3QoZnVuY3Rpb24oZSl7aWYobnVsbCE9ZSl7dHJ5e3JldHVybiBoLmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZStcIlwifWNhdGNoKGUpe319cmV0dXJuXCJcIn0oZSkpfShuKT9uOnZvaWQgMH1mdW5jdGlvbiBTKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZXx8dCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiKTt2YXIgbj1mdW5jdGlvbigpe3ZhciByPWFyZ3VtZW50cyxvPXQ/dC5hcHBseSh0aGlzLHIpOnJbMF0saT1uLmNhY2hlO2lmKGkuaGFzKG8pKXJldHVybiBpLmdldChvKTt2YXIgYT1lLmFwcGx5KHRoaXMscik7cmV0dXJuIG4uY2FjaGU9aS5zZXQobyxhKSxhfTtyZXR1cm4gbi5jYWNoZT1uZXcoUy5DYWNoZXx8Xyksbn1mdW5jdGlvbiBqKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiEhZSYmKFwib2JqZWN0XCI9PXR8fFwiZnVuY3Rpb25cIj09dCl9Yi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPXc/dyhudWxsKTp7fX0sYi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV19LGIucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKHcpe3ZhciBuPXRbZV07cmV0dXJuIG49PT1vP3ZvaWQgMDpufXJldHVybiBnLmNhbGwodCxlKT90W2VdOnZvaWQgMH0sYi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIHc/dm9pZCAwIT09dFtlXTpnLmNhbGwodCxlKX0sYi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX19kYXRhX19bZV09dyYmdm9pZCAwPT09dD9vOnQsdGhpc30seC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVtdfSx4LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPU8odCxlKTtyZXR1cm4hKG48MHx8KG49PXQubGVuZ3RoLTE/dC5wb3AoKTpDLmNhbGwodCxuLDEpLDApKX0seC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1PKHQsZSk7cmV0dXJuIG48MD92b2lkIDA6dFtuXVsxXX0seC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBPKHRoaXMuX19kYXRhX18sZSk+LTF9LHgucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX19kYXRhX18scj1PKG4sZSk7cmV0dXJuIHI8MD9uLnB1c2goW2UsdF0pOm5bcl1bMV09dCx0aGlzfSxfLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189e2hhc2g6bmV3IGIsbWFwOm5ldyh5fHx4KSxzdHJpbmc6bmV3IGJ9fSxfLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7cmV0dXJuIEwodGhpcyxlKS5kZWxldGUoZSl9LF8ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gTCh0aGlzLGUpLmdldChlKX0sXy5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBMKHRoaXMsZSkuaGFzKGUpfSxfLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTCh0aGlzLGUpLnNldChlLHQpLHRoaXN9LFMuQ2FjaGU9XyxlLmV4cG9ydHM9U30sNjQ4NjpmdW5jdGlvbihlLHQsbil7dmFyIHI7ZT1uLm5tZChlKSxmdW5jdGlvbigpe3ZhciBvLGk9XCJFeHBlY3RlZCBhIGZ1bmN0aW9uXCIsYT1cIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX19cIixsPVwiX19sb2Rhc2hfcGxhY2Vob2xkZXJfX1wiLHM9MzIsYz0xMjgsdT0xLzAsZj05MDA3MTk5MjU0NzQwOTkxLGQ9TmFOLHA9NDI5NDk2NzI5NSxoPVtbXCJhcnlcIixjXSxbXCJiaW5kXCIsMV0sW1wiYmluZEtleVwiLDJdLFtcImN1cnJ5XCIsOF0sW1wiY3VycnlSaWdodFwiLDE2XSxbXCJmbGlwXCIsNTEyXSxbXCJwYXJ0aWFsXCIsc10sW1wicGFydGlhbFJpZ2h0XCIsNjRdLFtcInJlYXJnXCIsMjU2XV0sZz1cIltvYmplY3QgQXJndW1lbnRzXVwiLHY9XCJbb2JqZWN0IEFycmF5XVwiLG09XCJbb2JqZWN0IEJvb2xlYW5dXCIsQz1cIltvYmplY3QgRGF0ZV1cIix5PVwiW29iamVjdCBFcnJvcl1cIix3PVwiW29iamVjdCBGdW5jdGlvbl1cIixiPVwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIix4PVwiW29iamVjdCBNYXBdXCIsXz1cIltvYmplY3QgTnVtYmVyXVwiLE89XCJbb2JqZWN0IE9iamVjdF1cIixMPVwiW29iamVjdCBQcm9taXNlXVwiLEU9XCJbb2JqZWN0IFJlZ0V4cF1cIixTPVwiW29iamVjdCBTZXRdXCIsaj1cIltvYmplY3QgU3RyaW5nXVwiLE09XCJbb2JqZWN0IFN5bWJvbF1cIixrPVwiW29iamVjdCBXZWFrTWFwXVwiLFI9XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiLFA9XCJbb2JqZWN0IERhdGFWaWV3XVwiLEk9XCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIixBPVwiW29iamVjdCBGbG9hdDY0QXJyYXldXCIsVD1cIltvYmplY3QgSW50OEFycmF5XVwiLEg9XCJbb2JqZWN0IEludDE2QXJyYXldXCIsQj1cIltvYmplY3QgSW50MzJBcnJheV1cIixWPVwiW29iamVjdCBVaW50OEFycmF5XVwiLEQ9XCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiLFo9XCJbb2JqZWN0IFVpbnQxNkFycmF5XVwiLCQ9XCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiLE49L1xcYl9fcCBcXCs9ICcnOy9nLEY9L1xcYihfX3AgXFwrPSkgJycgXFwrL2csVT0vKF9fZVxcKC4qP1xcKXxcXGJfX3RcXCkpIFxcK1xcbicnOy9nLFc9LyYoPzphbXB8bHR8Z3R8cXVvdHwjMzkpOy9nLHo9L1smPD5cIiddL2csRz1SZWdFeHAoVy5zb3VyY2UpLHE9UmVnRXhwKHouc291cmNlKSxZPS88JS0oW1xcc1xcU10rPyklPi9nLEs9LzwlKFtcXHNcXFNdKz8pJT4vZyxYPS88JT0oW1xcc1xcU10rPyklPi9nLEo9L1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxRPS9eXFx3KiQvLGVlPS9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZyx0ZT0vW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csbmU9UmVnRXhwKHRlLnNvdXJjZSkscmU9L15cXHMrLyxvZT0vXFxzLyxpZT0vXFx7KD86XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAuK1xcXSBcXCpcXC8pP1xcbj8vLGFlPS9cXHtcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoICguKylcXF0gXFwqLyxsZT0vLD8gJiAvLHNlPS9bXlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceDdmXSsvZyxjZT0vWygpPSx7fVxcW1xcXVxcL1xcc10vLHVlPS9cXFxcKFxcXFwpPy9nLGZlPS9cXCRcXHsoW15cXFxcfV0qKD86XFxcXC5bXlxcXFx9XSopKilcXH0vZyxkZT0vXFx3KiQvLHBlPS9eWy0rXTB4WzAtOWEtZl0rJC9pLGhlPS9eMGJbMDFdKyQvaSxnZT0vXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvLHZlPS9eMG9bMC03XSskL2ksbWU9L14oPzowfFsxLTldXFxkKikkLyxDZT0vW1xceGMwLVxceGQ2XFx4ZDgtXFx4ZjZcXHhmOC1cXHhmZlxcdTAxMDAtXFx1MDE3Zl0vZyx5ZT0vKCReKS8sd2U9L1snXFxuXFxyXFx1MjAyOFxcdTIwMjlcXFxcXS9nLGJlPVwiXFxcXHVkODAwLVxcXFx1ZGZmZlwiLHhlPVwiXFxcXHUwMzAwLVxcXFx1MDM2ZlxcXFx1ZmUyMC1cXFxcdWZlMmZcXFxcdTIwZDAtXFxcXHUyMGZmXCIsX2U9XCJcXFxcdTI3MDAtXFxcXHUyN2JmXCIsT2U9XCJhLXpcXFxceGRmLVxcXFx4ZjZcXFxceGY4LVxcXFx4ZmZcIixMZT1cIkEtWlxcXFx4YzAtXFxcXHhkNlxcXFx4ZDgtXFxcXHhkZVwiLEVlPVwiXFxcXHVmZTBlXFxcXHVmZTBmXCIsU2U9XCJcXFxceGFjXFxcXHhiMVxcXFx4ZDdcXFxceGY3XFxcXHgwMC1cXFxceDJmXFxcXHgzYS1cXFxceDQwXFxcXHg1Yi1cXFxceDYwXFxcXHg3Yi1cXFxceGJmXFxcXHUyMDAwLVxcXFx1MjA2ZiBcXFxcdFxcXFx4MGJcXFxcZlxcXFx4YTBcXFxcdWZlZmZcXFxcblxcXFxyXFxcXHUyMDI4XFxcXHUyMDI5XFxcXHUxNjgwXFxcXHUxODBlXFxcXHUyMDAwXFxcXHUyMDAxXFxcXHUyMDAyXFxcXHUyMDAzXFxcXHUyMDA0XFxcXHUyMDA1XFxcXHUyMDA2XFxcXHUyMDA3XFxcXHUyMDA4XFxcXHUyMDA5XFxcXHUyMDBhXFxcXHUyMDJmXFxcXHUyMDVmXFxcXHUzMDAwXCIsamU9XCJbXCIrYmUrXCJdXCIsTWU9XCJbXCIrU2UrXCJdXCIsa2U9XCJbXCIreGUrXCJdXCIsUmU9XCJcXFxcZCtcIixQZT1cIltcIitfZStcIl1cIixJZT1cIltcIitPZStcIl1cIixBZT1cIlteXCIrYmUrU2UrUmUrX2UrT2UrTGUrXCJdXCIsVGU9XCJcXFxcdWQ4M2NbXFxcXHVkZmZiLVxcXFx1ZGZmZl1cIixIZT1cIlteXCIrYmUrXCJdXCIsQmU9XCIoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9XCIsVmU9XCJbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl1cIixEZT1cIltcIitMZStcIl1cIixaZT1cIlxcXFx1MjAwZFwiLCRlPVwiKD86XCIrSWUrXCJ8XCIrQWUrXCIpXCIsTmU9XCIoPzpcIitEZStcInxcIitBZStcIilcIixGZT1cIig/Olsn4oCZXSg/OmR8bGx8bXxyZXxzfHR8dmUpKT9cIixVZT1cIig/Olsn4oCZXSg/OkR8TEx8TXxSRXxTfFR8VkUpKT9cIixXZT1cIig/OlwiK2tlK1wifFwiK1RlK1wiKT9cIix6ZT1cIltcIitFZStcIl0/XCIsR2U9emUrV2UrXCIoPzpcIitaZStcIig/OlwiK1tIZSxCZSxWZV0uam9pbihcInxcIikrXCIpXCIremUrV2UrXCIpKlwiLHFlPVwiKD86XCIrW1BlLEJlLFZlXS5qb2luKFwifFwiKStcIilcIitHZSxZZT1cIig/OlwiK1tIZStrZStcIj9cIixrZSxCZSxWZSxqZV0uam9pbihcInxcIikrXCIpXCIsS2U9UmVnRXhwKFwiWyfigJldXCIsXCJnXCIpLFhlPVJlZ0V4cChrZSxcImdcIiksSmU9UmVnRXhwKFRlK1wiKD89XCIrVGUrXCIpfFwiK1llK0dlLFwiZ1wiKSxRZT1SZWdFeHAoW0RlK1wiP1wiK0llK1wiK1wiK0ZlK1wiKD89XCIrW01lLERlLFwiJFwiXS5qb2luKFwifFwiKStcIilcIixOZStcIitcIitVZStcIig/PVwiK1tNZSxEZSskZSxcIiRcIl0uam9pbihcInxcIikrXCIpXCIsRGUrXCI/XCIrJGUrXCIrXCIrRmUsRGUrXCIrXCIrVWUsXCJcXFxcZCooPzoxU1R8Mk5EfDNSRHwoPyFbMTIzXSlcXFxcZFRIKSg/PVxcXFxifFthLXpfXSlcIixcIlxcXFxkKig/OjFzdHwybmR8M3JkfCg/IVsxMjNdKVxcXFxkdGgpKD89XFxcXGJ8W0EtWl9dKVwiLFJlLHFlXS5qb2luKFwifFwiKSxcImdcIiksZXQ9UmVnRXhwKFwiW1wiK1plK2JlK3hlK0VlK1wiXVwiKSx0dD0vW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyxudD1bXCJBcnJheVwiLFwiQnVmZmVyXCIsXCJEYXRhVmlld1wiLFwiRGF0ZVwiLFwiRXJyb3JcIixcIkZsb2F0MzJBcnJheVwiLFwiRmxvYXQ2NEFycmF5XCIsXCJGdW5jdGlvblwiLFwiSW50OEFycmF5XCIsXCJJbnQxNkFycmF5XCIsXCJJbnQzMkFycmF5XCIsXCJNYXBcIixcIk1hdGhcIixcIk9iamVjdFwiLFwiUHJvbWlzZVwiLFwiUmVnRXhwXCIsXCJTZXRcIixcIlN0cmluZ1wiLFwiU3ltYm9sXCIsXCJUeXBlRXJyb3JcIixcIlVpbnQ4QXJyYXlcIixcIlVpbnQ4Q2xhbXBlZEFycmF5XCIsXCJVaW50MTZBcnJheVwiLFwiVWludDMyQXJyYXlcIixcIldlYWtNYXBcIixcIl9cIixcImNsZWFyVGltZW91dFwiLFwiaXNGaW5pdGVcIixcInBhcnNlSW50XCIsXCJzZXRUaW1lb3V0XCJdLHJ0PS0xLG90PXt9O290W0ldPW90W0FdPW90W1RdPW90W0hdPW90W0JdPW90W1ZdPW90W0RdPW90W1pdPW90WyRdPSEwLG90W2ddPW90W3ZdPW90W1JdPW90W21dPW90W1BdPW90W0NdPW90W3ldPW90W3ddPW90W3hdPW90W19dPW90W09dPW90W0VdPW90W1NdPW90W2pdPW90W2tdPSExO3ZhciBpdD17fTtpdFtnXT1pdFt2XT1pdFtSXT1pdFtQXT1pdFttXT1pdFtDXT1pdFtJXT1pdFtBXT1pdFtUXT1pdFtIXT1pdFtCXT1pdFt4XT1pdFtfXT1pdFtPXT1pdFtFXT1pdFtTXT1pdFtqXT1pdFtNXT1pdFtWXT1pdFtEXT1pdFtaXT1pdFskXT0hMCxpdFt5XT1pdFt3XT1pdFtrXT0hMTt2YXIgYXQ9e1wiXFxcXFwiOlwiXFxcXFwiLFwiJ1wiOlwiJ1wiLFwiXFxuXCI6XCJuXCIsXCJcXHJcIjpcInJcIixcIlxcdTIwMjhcIjpcInUyMDI4XCIsXCJcXHUyMDI5XCI6XCJ1MjAyOVwifSxsdD1wYXJzZUZsb2F0LHN0PXBhcnNlSW50LGN0PVwib2JqZWN0XCI9PXR5cGVvZiBuLmcmJm4uZyYmbi5nLk9iamVjdD09PU9iamVjdCYmbi5nLHV0PVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmdD1jdHx8dXR8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxkdD10JiYhdC5ub2RlVHlwZSYmdCxwdD1kdCYmZSYmIWUubm9kZVR5cGUmJmUsaHQ9cHQmJnB0LmV4cG9ydHM9PT1kdCxndD1odCYmY3QucHJvY2Vzcyx2dD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gcHQmJnB0LnJlcXVpcmUmJnB0LnJlcXVpcmUoXCJ1dGlsXCIpLnR5cGVzfHxndCYmZ3QuYmluZGluZyYmZ3QuYmluZGluZyhcInV0aWxcIil9Y2F0Y2goZSl7fX0oKSxtdD12dCYmdnQuaXNBcnJheUJ1ZmZlcixDdD12dCYmdnQuaXNEYXRlLHl0PXZ0JiZ2dC5pc01hcCx3dD12dCYmdnQuaXNSZWdFeHAsYnQ9dnQmJnZ0LmlzU2V0LHh0PXZ0JiZ2dC5pc1R5cGVkQXJyYXk7ZnVuY3Rpb24gX3QoZSx0LG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodCk7Y2FzZSAxOnJldHVybiBlLmNhbGwodCxuWzBdKTtjYXNlIDI6cmV0dXJuIGUuY2FsbCh0LG5bMF0sblsxXSk7Y2FzZSAzOnJldHVybiBlLmNhbGwodCxuWzBdLG5bMV0sblsyXSl9cmV0dXJuIGUuYXBwbHkodCxuKX1mdW5jdGlvbiBPdChlLHQsbixyKXtmb3IodmFyIG89LTEsaT1udWxsPT1lPzA6ZS5sZW5ndGg7KytvPGk7KXt2YXIgYT1lW29dO3QocixhLG4oYSksZSl9cmV0dXJuIHJ9ZnVuY3Rpb24gTHQoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7KytuPHImJiExIT09dChlW25dLG4sZSk7KTtyZXR1cm4gZX1mdW5jdGlvbiBFdChlLHQpe2Zvcih2YXIgbj1udWxsPT1lPzA6ZS5sZW5ndGg7bi0tJiYhMSE9PXQoZVtuXSxuLGUpOyk7cmV0dXJuIGV9ZnVuY3Rpb24gU3QoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7KytuPHI7KWlmKCF0KGVbbl0sbixlKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBqdChlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aCxvPTAsaT1bXTsrK248cjspe3ZhciBhPWVbbl07dChhLG4sZSkmJihpW28rK109YSl9cmV0dXJuIGl9ZnVuY3Rpb24gTXQoZSx0KXtyZXR1cm4hKG51bGw9PWV8fCFlLmxlbmd0aCkmJkR0KGUsdCwwKT4tMX1mdW5jdGlvbiBrdChlLHQsbil7Zm9yKHZhciByPS0xLG89bnVsbD09ZT8wOmUubGVuZ3RoOysrcjxvOylpZihuKHQsZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gUnQoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGgsbz1BcnJheShyKTsrK248cjspb1tuXT10KGVbbl0sbixlKTtyZXR1cm4gb31mdW5jdGlvbiBQdChlLHQpe2Zvcih2YXIgbj0tMSxyPXQubGVuZ3RoLG89ZS5sZW5ndGg7KytuPHI7KWVbbytuXT10W25dO3JldHVybiBlfWZ1bmN0aW9uIEl0KGUsdCxuLHIpe3ZhciBvPS0xLGk9bnVsbD09ZT8wOmUubGVuZ3RoO2ZvcihyJiZpJiYobj1lWysrb10pOysrbzxpOyluPXQobixlW29dLG8sZSk7cmV0dXJuIG59ZnVuY3Rpb24gQXQoZSx0LG4scil7dmFyIG89bnVsbD09ZT8wOmUubGVuZ3RoO2ZvcihyJiZvJiYobj1lWy0tb10pO28tLTspbj10KG4sZVtvXSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIFR0KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoOysrbjxyOylpZih0KGVbbl0sbixlKSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgSHQ9RnQoXCJsZW5ndGhcIik7ZnVuY3Rpb24gQnQoZSx0LG4pe3ZhciByO3JldHVybiBuKGUsKGZ1bmN0aW9uKGUsbixvKXtpZih0KGUsbixvKSlyZXR1cm4gcj1uLCExfSkpLHJ9ZnVuY3Rpb24gVnQoZSx0LG4scil7Zm9yKHZhciBvPWUubGVuZ3RoLGk9bisocj8xOi0xKTtyP2ktLTorK2k8bzspaWYodChlW2ldLGksZSkpcmV0dXJuIGk7cmV0dXJuLTF9ZnVuY3Rpb24gRHQoZSx0LG4pe3JldHVybiB0PT10P2Z1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bi0xLG89ZS5sZW5ndGg7KytyPG87KWlmKGVbcl09PT10KXJldHVybiByO3JldHVybi0xfShlLHQsbik6VnQoZSwkdCxuKX1mdW5jdGlvbiBadChlLHQsbixyKXtmb3IodmFyIG89bi0xLGk9ZS5sZW5ndGg7KytvPGk7KWlmKHIoZVtvXSx0KSlyZXR1cm4gbztyZXR1cm4tMX1mdW5jdGlvbiAkdChlKXtyZXR1cm4gZSE9ZX1mdW5jdGlvbiBOdChlLHQpe3ZhciBuPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gbj96dChlLHQpL246ZH1mdW5jdGlvbiBGdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bzp0W2VdfX1mdW5jdGlvbiBVdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PWU/bzplW3RdfX1mdW5jdGlvbiBXdChlLHQsbixyLG8pe3JldHVybiBvKGUsKGZ1bmN0aW9uKGUsbyxpKXtuPXI/KHI9ITEsZSk6dChuLGUsbyxpKX0pKSxufWZ1bmN0aW9uIHp0KGUsdCl7Zm9yKHZhciBuLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspe3ZhciBhPXQoZVtyXSk7YSE9PW8mJihuPW49PT1vP2E6bithKX1yZXR1cm4gbn1mdW5jdGlvbiBHdChlLHQpe2Zvcih2YXIgbj0tMSxyPUFycmF5KGUpOysrbjxlOylyW25dPXQobik7cmV0dXJuIHJ9ZnVuY3Rpb24gcXQoZSl7cmV0dXJuIGU/ZS5zbGljZSgwLGZuKGUpKzEpLnJlcGxhY2UocmUsXCJcIik6ZX1mdW5jdGlvbiBZdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCl9fWZ1bmN0aW9uIEt0KGUsdCl7cmV0dXJuIFJ0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkpfWZ1bmN0aW9uIFh0KGUsdCl7cmV0dXJuIGUuaGFzKHQpfWZ1bmN0aW9uIEp0KGUsdCl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGg7KytuPHImJkR0KHQsZVtuXSwwKT4tMTspO3JldHVybiBufWZ1bmN0aW9uIFF0KGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoO24tLSYmRHQodCxlW25dLDApPi0xOyk7cmV0dXJuIG59dmFyIGVuPVV0KHvDgDpcIkFcIizDgTpcIkFcIizDgjpcIkFcIizDgzpcIkFcIizDhDpcIkFcIizDhTpcIkFcIizDoDpcImFcIizDoTpcImFcIizDojpcImFcIizDozpcImFcIizDpDpcImFcIizDpTpcImFcIizDhzpcIkNcIizDpzpcImNcIizDkDpcIkRcIizDsDpcImRcIizDiDpcIkVcIizDiTpcIkVcIizDijpcIkVcIizDizpcIkVcIizDqDpcImVcIizDqTpcImVcIizDqjpcImVcIizDqzpcImVcIizDjDpcIklcIizDjTpcIklcIizDjjpcIklcIizDjzpcIklcIizDrDpcImlcIizDrTpcImlcIizDrjpcImlcIizDrzpcImlcIizDkTpcIk5cIizDsTpcIm5cIizDkjpcIk9cIizDkzpcIk9cIizDlDpcIk9cIizDlTpcIk9cIizDljpcIk9cIizDmDpcIk9cIizDsjpcIm9cIizDszpcIm9cIizDtDpcIm9cIizDtTpcIm9cIizDtjpcIm9cIizDuDpcIm9cIizDmTpcIlVcIizDmjpcIlVcIizDmzpcIlVcIizDnDpcIlVcIizDuTpcInVcIizDujpcInVcIizDuzpcInVcIizDvDpcInVcIizDnTpcIllcIizDvTpcInlcIizDvzpcInlcIizDhjpcIkFlXCIsw6Y6XCJhZVwiLMOeOlwiVGhcIizDvjpcInRoXCIsw586XCJzc1wiLMSAOlwiQVwiLMSCOlwiQVwiLMSEOlwiQVwiLMSBOlwiYVwiLMSDOlwiYVwiLMSFOlwiYVwiLMSGOlwiQ1wiLMSIOlwiQ1wiLMSKOlwiQ1wiLMSMOlwiQ1wiLMSHOlwiY1wiLMSJOlwiY1wiLMSLOlwiY1wiLMSNOlwiY1wiLMSOOlwiRFwiLMSQOlwiRFwiLMSPOlwiZFwiLMSROlwiZFwiLMSSOlwiRVwiLMSUOlwiRVwiLMSWOlwiRVwiLMSYOlwiRVwiLMSaOlwiRVwiLMSTOlwiZVwiLMSVOlwiZVwiLMSXOlwiZVwiLMSZOlwiZVwiLMSbOlwiZVwiLMScOlwiR1wiLMSeOlwiR1wiLMSgOlwiR1wiLMSiOlwiR1wiLMSdOlwiZ1wiLMSfOlwiZ1wiLMShOlwiZ1wiLMSjOlwiZ1wiLMSkOlwiSFwiLMSmOlwiSFwiLMSlOlwiaFwiLMSnOlwiaFwiLMSoOlwiSVwiLMSqOlwiSVwiLMSsOlwiSVwiLMSuOlwiSVwiLMSwOlwiSVwiLMSpOlwiaVwiLMSrOlwiaVwiLMStOlwiaVwiLMSvOlwiaVwiLMSxOlwiaVwiLMS0OlwiSlwiLMS1OlwialwiLMS2OlwiS1wiLMS3Olwia1wiLMS4Olwia1wiLMS5OlwiTFwiLMS7OlwiTFwiLMS9OlwiTFwiLMS/OlwiTFwiLMWBOlwiTFwiLMS6OlwibFwiLMS8OlwibFwiLMS+OlwibFwiLMWAOlwibFwiLMWCOlwibFwiLMWDOlwiTlwiLMWFOlwiTlwiLMWHOlwiTlwiLMWKOlwiTlwiLMWEOlwiblwiLMWGOlwiblwiLMWIOlwiblwiLMWLOlwiblwiLMWMOlwiT1wiLMWOOlwiT1wiLMWQOlwiT1wiLMWNOlwib1wiLMWPOlwib1wiLMWROlwib1wiLMWUOlwiUlwiLMWWOlwiUlwiLMWYOlwiUlwiLMWVOlwiclwiLMWXOlwiclwiLMWZOlwiclwiLMWaOlwiU1wiLMWcOlwiU1wiLMWeOlwiU1wiLMWgOlwiU1wiLMWbOlwic1wiLMWdOlwic1wiLMWfOlwic1wiLMWhOlwic1wiLMWiOlwiVFwiLMWkOlwiVFwiLMWmOlwiVFwiLMWjOlwidFwiLMWlOlwidFwiLMWnOlwidFwiLMWoOlwiVVwiLMWqOlwiVVwiLMWsOlwiVVwiLMWuOlwiVVwiLMWwOlwiVVwiLMWyOlwiVVwiLMWpOlwidVwiLMWrOlwidVwiLMWtOlwidVwiLMWvOlwidVwiLMWxOlwidVwiLMWzOlwidVwiLMW0OlwiV1wiLMW1Olwid1wiLMW2OlwiWVwiLMW3OlwieVwiLMW4OlwiWVwiLMW5OlwiWlwiLMW7OlwiWlwiLMW9OlwiWlwiLMW6OlwielwiLMW8OlwielwiLMW+OlwielwiLMSyOlwiSUpcIizEszpcImlqXCIsxZI6XCJPZVwiLMWTOlwib2VcIizFiTpcIiduXCIsxb86XCJzXCJ9KSx0bj1VdCh7XCImXCI6XCImYW1wO1wiLFwiPFwiOlwiJmx0O1wiLFwiPlwiOlwiJmd0O1wiLCdcIic6XCImcXVvdDtcIixcIidcIjpcIiYjMzk7XCJ9KTtmdW5jdGlvbiBubihlKXtyZXR1cm5cIlxcXFxcIithdFtlXX1mdW5jdGlvbiBybihlKXtyZXR1cm4gZXQudGVzdChlKX1mdW5jdGlvbiBvbihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtuWysrdF09W3IsZV19KSksbn1mdW5jdGlvbiBhbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZSh0KG4pKX19ZnVuY3Rpb24gbG4oZSx0KXtmb3IodmFyIG49LTEscj1lLmxlbmd0aCxvPTAsaT1bXTsrK248cjspe3ZhciBhPWVbbl07YSE9PXQmJmEhPT1sfHwoZVtuXT1sLGlbbysrXT1uKX1yZXR1cm4gaX1mdW5jdGlvbiBzbihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7blsrK3RdPWV9KSksbn1mdW5jdGlvbiBjbihlKXtyZXR1cm4gcm4oZSk/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PUplLmxhc3RJbmRleD0wO0plLnRlc3QoZSk7KSsrdDtyZXR1cm4gdH0oZSk6SHQoZSl9ZnVuY3Rpb24gdW4oZSl7cmV0dXJuIHJuKGUpP2Z1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKEplKXx8W119KGUpOmZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KFwiXCIpfShlKX1mdW5jdGlvbiBmbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7dC0tJiZvZS50ZXN0KGUuY2hhckF0KHQpKTspO3JldHVybiB0fXZhciBkbj1VdCh7XCImYW1wO1wiOlwiJlwiLFwiJmx0O1wiOlwiPFwiLFwiJmd0O1wiOlwiPlwiLFwiJnF1b3Q7XCI6J1wiJyxcIiYjMzk7XCI6XCInXCJ9KSxwbj1mdW5jdGlvbiBlKHQpe3ZhciBuLHI9KHQ9bnVsbD09dD9mdDpwbi5kZWZhdWx0cyhmdC5PYmplY3QoKSx0LHBuLnBpY2soZnQsbnQpKSkuQXJyYXksb2U9dC5EYXRlLGJlPXQuRXJyb3IseGU9dC5GdW5jdGlvbixfZT10Lk1hdGgsT2U9dC5PYmplY3QsTGU9dC5SZWdFeHAsRWU9dC5TdHJpbmcsU2U9dC5UeXBlRXJyb3IsamU9ci5wcm90b3R5cGUsTWU9eGUucHJvdG90eXBlLGtlPU9lLnByb3RvdHlwZSxSZT10W1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdLFBlPU1lLnRvU3RyaW5nLEllPWtlLmhhc093blByb3BlcnR5LEFlPTAsVGU9KG49L1teLl0rJC8uZXhlYyhSZSYmUmUua2V5cyYmUmUua2V5cy5JRV9QUk9UT3x8XCJcIikpP1wiU3ltYm9sKHNyYylfMS5cIituOlwiXCIsSGU9a2UudG9TdHJpbmcsQmU9UGUuY2FsbChPZSksVmU9ZnQuXyxEZT1MZShcIl5cIitQZS5jYWxsKEllKS5yZXBsYWNlKHRlLFwiXFxcXCQmXCIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csXCIkMS4qP1wiKStcIiRcIiksWmU9aHQ/dC5CdWZmZXI6bywkZT10LlN5bWJvbCxOZT10LlVpbnQ4QXJyYXksRmU9WmU/WmUuYWxsb2NVbnNhZmU6byxVZT1hbihPZS5nZXRQcm90b3R5cGVPZixPZSksV2U9T2UuY3JlYXRlLHplPWtlLnByb3BlcnR5SXNFbnVtZXJhYmxlLEdlPWplLnNwbGljZSxxZT0kZT8kZS5pc0NvbmNhdFNwcmVhZGFibGU6byxZZT0kZT8kZS5pdGVyYXRvcjpvLEplPSRlPyRlLnRvU3RyaW5nVGFnOm8sZXQ9ZnVuY3Rpb24oKXt0cnl7dmFyIGU9c2koT2UsXCJkZWZpbmVQcm9wZXJ0eVwiKTtyZXR1cm4gZSh7fSxcIlwiLHt9KSxlfWNhdGNoKGUpe319KCksYXQ9dC5jbGVhclRpbWVvdXQhPT1mdC5jbGVhclRpbWVvdXQmJnQuY2xlYXJUaW1lb3V0LGN0PW9lJiZvZS5ub3chPT1mdC5EYXRlLm5vdyYmb2Uubm93LHV0PXQuc2V0VGltZW91dCE9PWZ0LnNldFRpbWVvdXQmJnQuc2V0VGltZW91dCxkdD1fZS5jZWlsLHB0PV9lLmZsb29yLGd0PU9lLmdldE93blByb3BlcnR5U3ltYm9scyx2dD1aZT9aZS5pc0J1ZmZlcjpvLEh0PXQuaXNGaW5pdGUsVXQ9amUuam9pbixobj1hbihPZS5rZXlzLE9lKSxnbj1fZS5tYXgsdm49X2UubWluLG1uPW9lLm5vdyxDbj10LnBhcnNlSW50LHluPV9lLnJhbmRvbSx3bj1qZS5yZXZlcnNlLGJuPXNpKHQsXCJEYXRhVmlld1wiKSx4bj1zaSh0LFwiTWFwXCIpLF9uPXNpKHQsXCJQcm9taXNlXCIpLE9uPXNpKHQsXCJTZXRcIiksTG49c2kodCxcIldlYWtNYXBcIiksRW49c2koT2UsXCJjcmVhdGVcIiksU249TG4mJm5ldyBMbixqbj17fSxNbj1IaShibiksa249SGkoeG4pLFJuPUhpKF9uKSxQbj1IaShPbiksSW49SGkoTG4pLEFuPSRlPyRlLnByb3RvdHlwZTpvLFRuPUFuP0FuLnZhbHVlT2Y6byxIbj1Bbj9Bbi50b1N0cmluZzpvO2Z1bmN0aW9uIEJuKGUpe2lmKFFhKGUpJiYhTmEoZSkmJiEoZSBpbnN0YW5jZW9mICRuKSl7aWYoZSBpbnN0YW5jZW9mIFpuKXJldHVybiBlO2lmKEllLmNhbGwoZSxcIl9fd3JhcHBlZF9fXCIpKXJldHVybiBCaShlKX1yZXR1cm4gbmV3IFpuKGUpfXZhciBWbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCFKYSh0KSlyZXR1cm57fTtpZihXZSlyZXR1cm4gV2UodCk7ZS5wcm90b3R5cGU9dDt2YXIgbj1uZXcgZTtyZXR1cm4gZS5wcm90b3R5cGU9byxufX0oKTtmdW5jdGlvbiBEbigpe31mdW5jdGlvbiBabihlLHQpe3RoaXMuX193cmFwcGVkX189ZSx0aGlzLl9fYWN0aW9uc19fPVtdLHRoaXMuX19jaGFpbl9fPSEhdCx0aGlzLl9faW5kZXhfXz0wLHRoaXMuX192YWx1ZXNfXz1vfWZ1bmN0aW9uICRuKGUpe3RoaXMuX193cmFwcGVkX189ZSx0aGlzLl9fYWN0aW9uc19fPVtdLHRoaXMuX19kaXJfXz0xLHRoaXMuX19maWx0ZXJlZF9fPSExLHRoaXMuX19pdGVyYXRlZXNfXz1bXSx0aGlzLl9fdGFrZUNvdW50X189cCx0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBObihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBGbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBVbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBXbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgVW47Kyt0PG47KXRoaXMuYWRkKGVbdF0pfWZ1bmN0aW9uIHpuKGUpe3ZhciB0PXRoaXMuX19kYXRhX189bmV3IEZuKGUpO3RoaXMuc2l6ZT10LnNpemV9ZnVuY3Rpb24gR24oZSx0KXt2YXIgbj1OYShlKSxyPSFuJiYkYShlKSxvPSFuJiYhciYmemEoZSksaT0hbiYmIXImJiFvJiZsbChlKSxhPW58fHJ8fG98fGksbD1hP0d0KGUubGVuZ3RoLEVlKTpbXSxzPWwubGVuZ3RoO2Zvcih2YXIgYyBpbiBlKSF0JiYhSWUuY2FsbChlLGMpfHxhJiYoXCJsZW5ndGhcIj09Y3x8byYmKFwib2Zmc2V0XCI9PWN8fFwicGFyZW50XCI9PWMpfHxpJiYoXCJidWZmZXJcIj09Y3x8XCJieXRlTGVuZ3RoXCI9PWN8fFwiYnl0ZU9mZnNldFwiPT1jKXx8Z2koYyxzKSl8fGwucHVzaChjKTtyZXR1cm4gbH1mdW5jdGlvbiBxbihlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gdD9lW1VyKDAsdC0xKV06b31mdW5jdGlvbiBZbihlLHQpe3JldHVybiBSaShFbyhlKSxvcih0LDAsZS5sZW5ndGgpKX1mdW5jdGlvbiBLbihlKXtyZXR1cm4gUmkoRW8oZSkpfWZ1bmN0aW9uIFhuKGUsdCxuKXsobiE9PW8mJiFWYShlW3RdLG4pfHxuPT09byYmISh0IGluIGUpKSYmbnIoZSx0LG4pfWZ1bmN0aW9uIEpuKGUsdCxuKXt2YXIgcj1lW3RdO0llLmNhbGwoZSx0KSYmVmEocixuKSYmKG4hPT1vfHx0IGluIGUpfHxucihlLHQsbil9ZnVuY3Rpb24gUW4oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7bi0tOylpZihWYShlW25dWzBdLHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIGVyKGUsdCxuLHIpe3JldHVybiBjcihlLChmdW5jdGlvbihlLG8saSl7dChyLGUsbihlKSxpKX0pKSxyfWZ1bmN0aW9uIHRyKGUsdCl7cmV0dXJuIGUmJlNvKHQsTWwodCksZSl9ZnVuY3Rpb24gbnIoZSx0LG4pe1wiX19wcm90b19fXCI9PXQmJmV0P2V0KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6bix3cml0YWJsZTohMH0pOmVbdF09bn1mdW5jdGlvbiBycihlLHQpe2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLGE9cihpKSxsPW51bGw9PWU7KytuPGk7KWFbbl09bD9vOk9sKGUsdFtuXSk7cmV0dXJuIGF9ZnVuY3Rpb24gb3IoZSx0LG4pe3JldHVybiBlPT1lJiYobiE9PW8mJihlPWU8PW4/ZTpuKSx0IT09byYmKGU9ZT49dD9lOnQpKSxlfWZ1bmN0aW9uIGlyKGUsdCxuLHIsaSxhKXt2YXIgbCxzPTEmdCxjPTImdCx1PTQmdDtpZihuJiYobD1pP24oZSxyLGksYSk6bihlKSksbCE9PW8pcmV0dXJuIGw7aWYoIUphKGUpKXJldHVybiBlO3ZhciBmPU5hKGUpO2lmKGYpe2lmKGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj1uZXcgZS5jb25zdHJ1Y3Rvcih0KTtyZXR1cm4gdCYmXCJzdHJpbmdcIj09dHlwZW9mIGVbMF0mJkllLmNhbGwoZSxcImluZGV4XCIpJiYobi5pbmRleD1lLmluZGV4LG4uaW5wdXQ9ZS5pbnB1dCksbn0oZSksIXMpcmV0dXJuIEVvKGUsbCl9ZWxzZXt2YXIgZD1maShlKSxwPWQ9PXd8fGQ9PWI7aWYoemEoZSkpcmV0dXJuIHdvKGUscyk7aWYoZD09T3x8ZD09Z3x8cCYmIWkpe2lmKGw9Y3x8cD97fTpwaShlKSwhcylyZXR1cm4gYz9mdW5jdGlvbihlLHQpe3JldHVybiBTbyhlLHVpKGUpLHQpfShlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJlNvKHQsa2wodCksZSl9KGwsZSkpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFNvKGUsY2koZSksdCl9KGUsdHIobCxlKSl9ZWxzZXtpZighaXRbZF0pcmV0dXJuIGk/ZTp7fTtsPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvPWUuY29uc3RydWN0b3I7c3dpdGNoKHQpe2Nhc2UgUjpyZXR1cm4gYm8oZSk7Y2FzZSBtOmNhc2UgQzpyZXR1cm4gbmV3IG8oK2UpO2Nhc2UgUDpyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj10P2JvKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IobixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKX0oZSxuKTtjYXNlIEk6Y2FzZSBBOmNhc2UgVDpjYXNlIEg6Y2FzZSBCOmNhc2UgVjpjYXNlIEQ6Y2FzZSBaOmNhc2UgJDpyZXR1cm4geG8oZSxuKTtjYXNlIHg6cmV0dXJuIG5ldyBvO2Nhc2UgXzpjYXNlIGo6cmV0dXJuIG5ldyBvKGUpO2Nhc2UgRTpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5zb3VyY2UsZGUuZXhlYyhlKSk7cmV0dXJuIHQubGFzdEluZGV4PWUubGFzdEluZGV4LHR9KGUpO2Nhc2UgUzpyZXR1cm4gbmV3IG87Y2FzZSBNOnJldHVybiByPWUsVG4/T2UoVG4uY2FsbChyKSk6e319fShlLGQscyl9fWF8fChhPW5ldyB6bik7dmFyIGg9YS5nZXQoZSk7aWYoaClyZXR1cm4gaDthLnNldChlLGwpLG9sKGUpP2UuZm9yRWFjaCgoZnVuY3Rpb24ocil7bC5hZGQoaXIocix0LG4scixlLGEpKX0pKTplbChlKSYmZS5mb3JFYWNoKChmdW5jdGlvbihyLG8pe2wuc2V0KG8saXIocix0LG4sbyxlLGEpKX0pKTt2YXIgdj1mP286KHU/Yz90aTplaTpjP2tsOk1sKShlKTtyZXR1cm4gTHQodnx8ZSwoZnVuY3Rpb24ocixvKXt2JiYocj1lW289cl0pLEpuKGwsbyxpcihyLHQsbixvLGUsYSkpfSkpLGx9ZnVuY3Rpb24gYXIoZSx0LG4pe3ZhciByPW4ubGVuZ3RoO2lmKG51bGw9PWUpcmV0dXJuIXI7Zm9yKGU9T2UoZSk7ci0tOyl7dmFyIGk9bltyXSxhPXRbaV0sbD1lW2ldO2lmKGw9PT1vJiYhKGkgaW4gZSl8fCFhKGwpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGxyKGUsdCxuKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTtyZXR1cm4gU2koKGZ1bmN0aW9uKCl7ZS5hcHBseShvLG4pfSksdCl9ZnVuY3Rpb24gc3IoZSx0LG4scil7dmFyIG89LTEsaT1NdCxhPSEwLGw9ZS5sZW5ndGgscz1bXSxjPXQubGVuZ3RoO2lmKCFsKXJldHVybiBzO24mJih0PVJ0KHQsWXQobikpKSxyPyhpPWt0LGE9ITEpOnQubGVuZ3RoPj0yMDAmJihpPVh0LGE9ITEsdD1uZXcgV24odCkpO2U6Zm9yKDsrK288bDspe3ZhciB1PWVbb10sZj1udWxsPT1uP3U6bih1KTtpZih1PXJ8fDAhPT11P3U6MCxhJiZmPT1mKXtmb3IodmFyIGQ9YztkLS07KWlmKHRbZF09PT1mKWNvbnRpbnVlIGU7cy5wdXNoKHUpfWVsc2UgaSh0LGYscil8fHMucHVzaCh1KX1yZXR1cm4gc31Cbi50ZW1wbGF0ZVNldHRpbmdzPXtlc2NhcGU6WSxldmFsdWF0ZTpLLGludGVycG9sYXRlOlgsdmFyaWFibGU6XCJcIixpbXBvcnRzOntfOkJufX0sQm4ucHJvdG90eXBlPURuLnByb3RvdHlwZSxCbi5wcm90b3R5cGUuY29uc3RydWN0b3I9Qm4sWm4ucHJvdG90eXBlPVZuKERuLnByb3RvdHlwZSksWm4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPVpuLCRuLnByb3RvdHlwZT1WbihEbi5wcm90b3R5cGUpLCRuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0kbixObi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPUVuP0VuKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxObi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fSxObi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX187aWYoRW4pe3ZhciBuPXRbZV07cmV0dXJuIG49PT1hP286bn1yZXR1cm4gSWUuY2FsbCh0LGUpP3RbZV06b30sTm4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBFbj90W2VdIT09bzpJZS5jYWxsKHQsZSl9LE5uLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKGUpPzA6MSxuW2VdPUVuJiZ0PT09bz9hOnQsdGhpc30sRm4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sRm4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49UW4odCxlKTtyZXR1cm4hKG48MHx8KG49PXQubGVuZ3RoLTE/dC5wb3AoKTpHZS5jYWxsKHQsbiwxKSwtLXRoaXMuc2l6ZSwwKSl9LEZuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPVFuKHQsZSk7cmV0dXJuIG48MD9vOnRbbl1bMV19LEZuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIFFuKHRoaXMuX19kYXRhX18sZSk+LTF9LEZuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fLHI9UW4obixlKTtyZXR1cm4gcjwwPygrK3RoaXMuc2l6ZSxuLnB1c2goW2UsdF0pKTpuW3JdWzFdPXQsdGhpc30sVW4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgTm4sbWFwOm5ldyh4bnx8Rm4pLHN0cmluZzpuZXcgTm59fSxVbi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWFpKHRoaXMsZSkuZGVsZXRlKGUpO3JldHVybiB0aGlzLnNpemUtPXQ/MTowLHR9LFVuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFpKHRoaXMsZSkuZ2V0KGUpfSxVbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBhaSh0aGlzLGUpLmhhcyhlKX0sVW4ucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciBuPWFpKHRoaXMsZSkscj1uLnNpemU7cmV0dXJuIG4uc2V0KGUsdCksdGhpcy5zaXplKz1uLnNpemU9PXI/MDoxLHRoaXN9LFduLnByb3RvdHlwZS5hZGQ9V24ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KGUsYSksdGhpc30sV24ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9LHpuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189bmV3IEZuLHRoaXMuc2l6ZT0wfSx6bi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj10LmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplPXQuc2l6ZSxufSx6bi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChlKX0sem4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9LHpuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO2lmKG4gaW5zdGFuY2VvZiBGbil7dmFyIHI9bi5fX2RhdGFfXztpZigheG58fHIubGVuZ3RoPDE5OSlyZXR1cm4gci5wdXNoKFtlLHRdKSx0aGlzLnNpemU9KytuLnNpemUsdGhpcztuPXRoaXMuX19kYXRhX189bmV3IFVuKHIpfXJldHVybiBuLnNldChlLHQpLHRoaXMuc2l6ZT1uLnNpemUsdGhpc307dmFyIGNyPWtvKG1yKSx1cj1rbyhDciwhMCk7ZnVuY3Rpb24gZnIoZSx0KXt2YXIgbj0hMDtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLG8pe3JldHVybiBuPSEhdChlLHIsbyl9KSksbn1mdW5jdGlvbiBkcihlLHQsbil7Zm9yKHZhciByPS0xLGk9ZS5sZW5ndGg7KytyPGk7KXt2YXIgYT1lW3JdLGw9dChhKTtpZihudWxsIT1sJiYocz09PW8/bD09bCYmIWFsKGwpOm4obCxzKSkpdmFyIHM9bCxjPWF9cmV0dXJuIGN9ZnVuY3Rpb24gcHIoZSx0KXt2YXIgbj1bXTtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLG8pe3QoZSxyLG8pJiZuLnB1c2goZSl9KSksbn1mdW5jdGlvbiBocihlLHQsbixyLG8pe3ZhciBpPS0xLGE9ZS5sZW5ndGg7Zm9yKG58fChuPWhpKSxvfHwobz1bXSk7KytpPGE7KXt2YXIgbD1lW2ldO3Q+MCYmbihsKT90PjE/aHIobCx0LTEsbixyLG8pOlB0KG8sbCk6cnx8KG9bby5sZW5ndGhdPWwpfXJldHVybiBvfXZhciBncj1SbygpLHZyPVJvKCEwKTtmdW5jdGlvbiBtcihlLHQpe3JldHVybiBlJiZncihlLHQsTWwpfWZ1bmN0aW9uIENyKGUsdCl7cmV0dXJuIGUmJnZyKGUsdCxNbCl9ZnVuY3Rpb24geXIoZSx0KXtyZXR1cm4ganQodCwoZnVuY3Rpb24odCl7cmV0dXJuIFlhKGVbdF0pfSkpfWZ1bmN0aW9uIHdyKGUsdCl7Zm9yKHZhciBuPTAscj0odD12byh0LGUpKS5sZW5ndGg7bnVsbCE9ZSYmbjxyOyllPWVbVGkodFtuKytdKV07cmV0dXJuIG4mJm49PXI/ZTpvfWZ1bmN0aW9uIGJyKGUsdCxuKXt2YXIgcj10KGUpO3JldHVybiBOYShlKT9yOlB0KHIsbihlKSl9ZnVuY3Rpb24geHIoZSl7cmV0dXJuIG51bGw9PWU/ZT09PW8/XCJbb2JqZWN0IFVuZGVmaW5lZF1cIjpcIltvYmplY3QgTnVsbF1cIjpKZSYmSmUgaW4gT2UoZSk/ZnVuY3Rpb24oZSl7dmFyIHQ9SWUuY2FsbChlLEplKSxuPWVbSmVdO3RyeXtlW0plXT1vO3ZhciByPSEwfWNhdGNoKGUpe312YXIgaT1IZS5jYWxsKGUpO3JldHVybiByJiYodD9lW0plXT1uOmRlbGV0ZSBlW0plXSksaX0oZSk6ZnVuY3Rpb24oZSl7cmV0dXJuIEhlLmNhbGwoZSl9KGUpfWZ1bmN0aW9uIF9yKGUsdCl7cmV0dXJuIGU+dH1mdW5jdGlvbiBPcihlLHQpe3JldHVybiBudWxsIT1lJiZJZS5jYWxsKGUsdCl9ZnVuY3Rpb24gTHIoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmdCBpbiBPZShlKX1mdW5jdGlvbiBFcihlLHQsbil7Zm9yKHZhciBpPW4/a3Q6TXQsYT1lWzBdLmxlbmd0aCxsPWUubGVuZ3RoLHM9bCxjPXIobCksdT0xLzAsZj1bXTtzLS07KXt2YXIgZD1lW3NdO3MmJnQmJihkPVJ0KGQsWXQodCkpKSx1PXZuKGQubGVuZ3RoLHUpLGNbc109IW4mJih0fHxhPj0xMjAmJmQubGVuZ3RoPj0xMjApP25ldyBXbihzJiZkKTpvfWQ9ZVswXTt2YXIgcD0tMSxoPWNbMF07ZTpmb3IoOysrcDxhJiZmLmxlbmd0aDx1Oyl7dmFyIGc9ZFtwXSx2PXQ/dChnKTpnO2lmKGc9bnx8MCE9PWc/ZzowLCEoaD9YdChoLHYpOmkoZix2LG4pKSl7Zm9yKHM9bDstLXM7KXt2YXIgbT1jW3NdO2lmKCEobT9YdChtLHYpOmkoZVtzXSx2LG4pKSljb250aW51ZSBlfWgmJmgucHVzaCh2KSxmLnB1c2goZyl9fXJldHVybiBmfWZ1bmN0aW9uIFNyKGUsdCxuKXt2YXIgcj1udWxsPT0oZT1PaShlLHQ9dm8odCxlKSkpP2U6ZVtUaShxaSh0KSldO3JldHVybiBudWxsPT1yP286X3QocixlLG4pfWZ1bmN0aW9uIGpyKGUpe3JldHVybiBRYShlKSYmeHIoZSk9PWd9ZnVuY3Rpb24gTXIoZSx0LG4scixpKXtyZXR1cm4gZT09PXR8fChudWxsPT1lfHxudWxsPT10fHwhUWEoZSkmJiFRYSh0KT9lIT1lJiZ0IT10OmZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2YXIgbD1OYShlKSxzPU5hKHQpLGM9bD92OmZpKGUpLHU9cz92OmZpKHQpLGY9KGM9Yz09Zz9POmMpPT1PLGQ9KHU9dT09Zz9POnUpPT1PLHA9Yz09dTtpZihwJiZ6YShlKSl7aWYoIXphKHQpKXJldHVybiExO2w9ITAsZj0hMX1pZihwJiYhZilyZXR1cm4gYXx8KGE9bmV3IHpuKSxsfHxsbChlKT9KbyhlLHQsbixyLGksYSk6ZnVuY3Rpb24oZSx0LG4scixvLGksYSl7c3dpdGNoKG4pe2Nhc2UgUDppZihlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8ZS5ieXRlT2Zmc2V0IT10LmJ5dGVPZmZzZXQpcmV0dXJuITE7ZT1lLmJ1ZmZlcix0PXQuYnVmZmVyO2Nhc2UgUjpyZXR1cm4hKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHwhaShuZXcgTmUoZSksbmV3IE5lKHQpKSk7Y2FzZSBtOmNhc2UgQzpjYXNlIF86cmV0dXJuIFZhKCtlLCt0KTtjYXNlIHk6cmV0dXJuIGUubmFtZT09dC5uYW1lJiZlLm1lc3NhZ2U9PXQubWVzc2FnZTtjYXNlIEU6Y2FzZSBqOnJldHVybiBlPT10K1wiXCI7Y2FzZSB4OnZhciBsPW9uO2Nhc2UgUzp2YXIgcz0xJnI7aWYobHx8KGw9c24pLGUuc2l6ZSE9dC5zaXplJiYhcylyZXR1cm4hMTt2YXIgYz1hLmdldChlKTtpZihjKXJldHVybiBjPT10O3J8PTIsYS5zZXQoZSx0KTt2YXIgdT1KbyhsKGUpLGwodCkscixvLGksYSk7cmV0dXJuIGEuZGVsZXRlKGUpLHU7Y2FzZSBNOmlmKFRuKXJldHVybiBUbi5jYWxsKGUpPT1Ubi5jYWxsKHQpfXJldHVybiExfShlLHQsYyxuLHIsaSxhKTtpZighKDEmbikpe3ZhciBoPWYmJkllLmNhbGwoZSxcIl9fd3JhcHBlZF9fXCIpLHc9ZCYmSWUuY2FsbCh0LFwiX193cmFwcGVkX19cIik7aWYoaHx8dyl7dmFyIGI9aD9lLnZhbHVlKCk6ZSxMPXc/dC52YWx1ZSgpOnQ7cmV0dXJuIGF8fChhPW5ldyB6biksaShiLEwsbixyLGEpfX1yZXR1cm4hIXAmJihhfHwoYT1uZXcgem4pLGZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2YXIgbD0xJm4scz1laShlKSxjPXMubGVuZ3RoO2lmKGMhPWVpKHQpLmxlbmd0aCYmIWwpcmV0dXJuITE7Zm9yKHZhciB1PWM7dS0tOyl7dmFyIGY9c1t1XTtpZighKGw/ZiBpbiB0OkllLmNhbGwodCxmKSkpcmV0dXJuITF9dmFyIGQ9YS5nZXQoZSkscD1hLmdldCh0KTtpZihkJiZwKXJldHVybiBkPT10JiZwPT1lO3ZhciBoPSEwO2Euc2V0KGUsdCksYS5zZXQodCxlKTtmb3IodmFyIGc9bDsrK3U8Yzspe3ZhciB2PWVbZj1zW3VdXSxtPXRbZl07aWYocil2YXIgQz1sP3IobSx2LGYsdCxlLGEpOnIodixtLGYsZSx0LGEpO2lmKCEoQz09PW8/dj09PW18fGkodixtLG4scixhKTpDKSl7aD0hMTticmVha31nfHwoZz1cImNvbnN0cnVjdG9yXCI9PWYpfWlmKGgmJiFnKXt2YXIgeT1lLmNvbnN0cnVjdG9yLHc9dC5jb25zdHJ1Y3Rvcjt5PT13fHwhKFwiY29uc3RydWN0b3JcImluIGUpfHwhKFwiY29uc3RydWN0b3JcImluIHQpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB5JiZ5IGluc3RhbmNlb2YgeSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdyYmdyBpbnN0YW5jZW9mIHd8fChoPSExKX1yZXR1cm4gYS5kZWxldGUoZSksYS5kZWxldGUodCksaH0oZSx0LG4scixpLGEpKX0oZSx0LG4scixNcixpKSl9ZnVuY3Rpb24ga3IoZSx0LG4scil7dmFyIGk9bi5sZW5ndGgsYT1pLGw9IXI7aWYobnVsbD09ZSlyZXR1cm4hYTtmb3IoZT1PZShlKTtpLS07KXt2YXIgcz1uW2ldO2lmKGwmJnNbMl0/c1sxXSE9PWVbc1swXV06IShzWzBdaW4gZSkpcmV0dXJuITF9Zm9yKDsrK2k8YTspe3ZhciBjPShzPW5baV0pWzBdLHU9ZVtjXSxmPXNbMV07aWYobCYmc1syXSl7aWYodT09PW8mJiEoYyBpbiBlKSlyZXR1cm4hMX1lbHNle3ZhciBkPW5ldyB6bjtpZihyKXZhciBwPXIodSxmLGMsZSx0LGQpO2lmKCEocD09PW8/TXIoZix1LDMscixkKTpwKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gUnIoZSl7cmV0dXJuISghSmEoZSl8fCh0PWUsVGUmJlRlIGluIHQpKSYmKFlhKGUpP0RlOmdlKS50ZXN0KEhpKGUpKTt2YXIgdH1mdW5jdGlvbiBQcihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6bnVsbD09ZT90czpcIm9iamVjdFwiPT10eXBlb2YgZT9OYShlKT9CcihlWzBdLGVbMV0pOkhyKGUpOnVzKGUpfWZ1bmN0aW9uIElyKGUpe2lmKCF3aShlKSlyZXR1cm4gaG4oZSk7dmFyIHQ9W107Zm9yKHZhciBuIGluIE9lKGUpKUllLmNhbGwoZSxuKSYmXCJjb25zdHJ1Y3RvclwiIT1uJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gQXIoZSx0KXtyZXR1cm4gZTx0fWZ1bmN0aW9uIFRyKGUsdCl7dmFyIG49LTEsbz1VYShlKT9yKGUubGVuZ3RoKTpbXTtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLGkpe29bKytuXT10KGUscixpKX0pKSxvfWZ1bmN0aW9uIEhyKGUpe3ZhciB0PWxpKGUpO3JldHVybiAxPT10Lmxlbmd0aCYmdFswXVsyXT94aSh0WzBdWzBdLHRbMF1bMV0pOmZ1bmN0aW9uKG4pe3JldHVybiBuPT09ZXx8a3IobixlLHQpfX1mdW5jdGlvbiBCcihlLHQpe3JldHVybiBtaShlKSYmYmkodCk/eGkoVGkoZSksdCk6ZnVuY3Rpb24obil7dmFyIHI9T2wobixlKTtyZXR1cm4gcj09PW8mJnI9PT10P0xsKG4sZSk6TXIodCxyLDMpfX1mdW5jdGlvbiBWcihlLHQsbixyLGkpe2UhPT10JiZncih0LChmdW5jdGlvbihhLGwpe2lmKGl8fChpPW5ldyB6biksSmEoYSkpIWZ1bmN0aW9uKGUsdCxuLHIsaSxhLGwpe3ZhciBzPUxpKGUsbiksYz1MaSh0LG4pLHU9bC5nZXQoYyk7aWYodSlYbihlLG4sdSk7ZWxzZXt2YXIgZj1hP2EocyxjLG4rXCJcIixlLHQsbCk6byxkPWY9PT1vO2lmKGQpe3ZhciBwPU5hKGMpLGg9IXAmJnphKGMpLGc9IXAmJiFoJiZsbChjKTtmPWMscHx8aHx8Zz9OYShzKT9mPXM6V2Eocyk/Zj1FbyhzKTpoPyhkPSExLGY9d28oYywhMCkpOmc/KGQ9ITEsZj14byhjLCEwKSk6Zj1bXTpubChjKXx8JGEoYyk/KGY9cywkYShzKT9mPWdsKHMpOkphKHMpJiYhWWEocyl8fChmPXBpKGMpKSk6ZD0hMX1kJiYobC5zZXQoYyxmKSxpKGYsYyxyLGEsbCksbC5kZWxldGUoYykpLFhuKGUsbixmKX19KGUsdCxsLG4sVnIscixpKTtlbHNle3ZhciBzPXI/cihMaShlLGwpLGEsbCtcIlwiLGUsdCxpKTpvO3M9PT1vJiYocz1hKSxYbihlLGwscyl9fSksa2wpfWZ1bmN0aW9uIERyKGUsdCl7dmFyIG49ZS5sZW5ndGg7aWYobilyZXR1cm4gZ2kodCs9dDwwP246MCxuKT9lW3RdOm99ZnVuY3Rpb24gWnIoZSx0LG4pe3Q9dC5sZW5ndGg/UnQodCwoZnVuY3Rpb24oZSl7cmV0dXJuIE5hKGUpP2Z1bmN0aW9uKHQpe3JldHVybiB3cih0LDE9PT1lLmxlbmd0aD9lWzBdOmUpfTplfSkpOlt0c107dmFyIHI9LTE7dD1SdCh0LFl0KGlpKCkpKTt2YXIgbz1UcihlLChmdW5jdGlvbihlLG4sbyl7dmFyIGk9UnQodCwoZnVuY3Rpb24odCl7cmV0dXJuIHQoZSl9KSk7cmV0dXJue2NyaXRlcmlhOmksaW5kZXg6KytyLHZhbHVlOmV9fSkpO3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciByPWUubGVuZ3RoO2ZvcihlLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9LTEsbz1lLmNyaXRlcmlhLGk9dC5jcml0ZXJpYSxhPW8ubGVuZ3RoLGw9bi5sZW5ndGg7KytyPGE7KXt2YXIgcz1fbyhvW3JdLGlbcl0pO2lmKHMpcmV0dXJuIHI+PWw/czpzKihcImRlc2NcIj09bltyXT8tMToxKX1yZXR1cm4gZS5pbmRleC10LmluZGV4fShlLHQsbil9KSk7ci0tOyllW3JdPWVbcl0udmFsdWU7cmV0dXJuIGV9KG8pfWZ1bmN0aW9uICRyKGUsdCxuKXtmb3IodmFyIHI9LTEsbz10Lmxlbmd0aCxpPXt9OysrcjxvOyl7dmFyIGE9dFtyXSxsPXdyKGUsYSk7bihsLGEpJiZZcihpLHZvKGEsZSksbCl9cmV0dXJuIGl9ZnVuY3Rpb24gTnIoZSx0LG4scil7dmFyIG89cj9adDpEdCxpPS0xLGE9dC5sZW5ndGgsbD1lO2ZvcihlPT09dCYmKHQ9RW8odCkpLG4mJihsPVJ0KGUsWXQobikpKTsrK2k8YTspZm9yKHZhciBzPTAsYz10W2ldLHU9bj9uKGMpOmM7KHM9byhsLHUscyxyKSk+LTE7KWwhPT1lJiZHZS5jYWxsKGwscywxKSxHZS5jYWxsKGUscywxKTtyZXR1cm4gZX1mdW5jdGlvbiBGcihlLHQpe2Zvcih2YXIgbj1lP3QubGVuZ3RoOjAscj1uLTE7bi0tOyl7dmFyIG89dFtuXTtpZihuPT1yfHxvIT09aSl7dmFyIGk9bztnaShvKT9HZS5jYWxsKGUsbywxKTpsbyhlLG8pfX1yZXR1cm4gZX1mdW5jdGlvbiBVcihlLHQpe3JldHVybiBlK3B0KHluKCkqKHQtZSsxKSl9ZnVuY3Rpb24gV3IoZSx0KXt2YXIgbj1cIlwiO2lmKCFlfHx0PDF8fHQ+ZilyZXR1cm4gbjtkb3t0JTImJihuKz1lKSwodD1wdCh0LzIpKSYmKGUrPWUpfXdoaWxlKHQpO3JldHVybiBufWZ1bmN0aW9uIHpyKGUsdCl7cmV0dXJuIGppKF9pKGUsdCx0cyksZStcIlwiKX1mdW5jdGlvbiBHcihlKXtyZXR1cm4gcW4oVmwoZSkpfWZ1bmN0aW9uIHFyKGUsdCl7dmFyIG49VmwoZSk7cmV0dXJuIFJpKG4sb3IodCwwLG4ubGVuZ3RoKSl9ZnVuY3Rpb24gWXIoZSx0LG4scil7aWYoIUphKGUpKXJldHVybiBlO2Zvcih2YXIgaT0tMSxhPSh0PXZvKHQsZSkpLmxlbmd0aCxsPWEtMSxzPWU7bnVsbCE9cyYmKytpPGE7KXt2YXIgYz1UaSh0W2ldKSx1PW47aWYoXCJfX3Byb3RvX19cIj09PWN8fFwiY29uc3RydWN0b3JcIj09PWN8fFwicHJvdG90eXBlXCI9PT1jKXJldHVybiBlO2lmKGkhPWwpe3ZhciBmPXNbY107KHU9cj9yKGYsYyxzKTpvKT09PW8mJih1PUphKGYpP2Y6Z2kodFtpKzFdKT9bXTp7fSl9Sm4ocyxjLHUpLHM9c1tjXX1yZXR1cm4gZX12YXIgS3I9U24/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gU24uc2V0KGUsdCksZX06dHMsWHI9ZXQ/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZXQoZSxcInRvU3RyaW5nXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOkpsKHQpLHdyaXRhYmxlOiEwfSl9OnRzO2Z1bmN0aW9uIEpyKGUpe3JldHVybiBSaShWbChlKSl9ZnVuY3Rpb24gUXIoZSx0LG4pe3ZhciBvPS0xLGk9ZS5sZW5ndGg7dDwwJiYodD0tdD5pPzA6aSt0KSwobj1uPmk/aTpuKTwwJiYobis9aSksaT10Pm4/MDpuLXQ+Pj4wLHQ+Pj49MDtmb3IodmFyIGE9cihpKTsrK288aTspYVtvXT1lW28rdF07cmV0dXJuIGF9ZnVuY3Rpb24gZW8oZSx0KXt2YXIgbjtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLG8pe3JldHVybiEobj10KGUscixvKSl9KSksISFufWZ1bmN0aW9uIHRvKGUsdCxuKXt2YXIgcj0wLG89bnVsbD09ZT9yOmUubGVuZ3RoO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0PT10JiZvPD0yMTQ3NDgzNjQ3KXtmb3IoO3I8bzspe3ZhciBpPXIrbz4+PjEsYT1lW2ldO251bGwhPT1hJiYhYWwoYSkmJihuP2E8PXQ6YTx0KT9yPWkrMTpvPWl9cmV0dXJuIG99cmV0dXJuIG5vKGUsdCx0cyxuKX1mdW5jdGlvbiBubyhlLHQsbixyKXt2YXIgaT0wLGE9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKDA9PT1hKXJldHVybiAwO2Zvcih2YXIgbD0odD1uKHQpKSE9dCxzPW51bGw9PT10LGM9YWwodCksdT10PT09bztpPGE7KXt2YXIgZj1wdCgoaSthKS8yKSxkPW4oZVtmXSkscD1kIT09byxoPW51bGw9PT1kLGc9ZD09ZCx2PWFsKGQpO2lmKGwpdmFyIG09cnx8ZztlbHNlIG09dT9nJiYocnx8cCk6cz9nJiZwJiYocnx8IWgpOmM/ZyYmcCYmIWgmJihyfHwhdik6IWgmJiF2JiYocj9kPD10OmQ8dCk7bT9pPWYrMTphPWZ9cmV0dXJuIHZuKGEsNDI5NDk2NzI5NCl9ZnVuY3Rpb24gcm8oZSx0KXtmb3IodmFyIG49LTEscj1lLmxlbmd0aCxvPTAsaT1bXTsrK248cjspe3ZhciBhPWVbbl0sbD10P3QoYSk6YTtpZighbnx8IVZhKGwscykpe3ZhciBzPWw7aVtvKytdPTA9PT1hPzA6YX19cmV0dXJuIGl9ZnVuY3Rpb24gb28oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/ZTphbChlKT9kOitlfWZ1bmN0aW9uIGlvKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBlO2lmKE5hKGUpKXJldHVybiBSdChlLGlvKStcIlwiO2lmKGFsKGUpKXJldHVybiBIbj9Ibi5jYWxsKGUpOlwiXCI7dmFyIHQ9ZStcIlwiO3JldHVyblwiMFwiPT10JiYxL2U9PS0xLzA/XCItMFwiOnR9ZnVuY3Rpb24gYW8oZSx0LG4pe3ZhciByPS0xLG89TXQsaT1lLmxlbmd0aCxhPSEwLGw9W10scz1sO2lmKG4pYT0hMSxvPWt0O2Vsc2UgaWYoaT49MjAwKXt2YXIgYz10P251bGw6em8oZSk7aWYoYylyZXR1cm4gc24oYyk7YT0hMSxvPVh0LHM9bmV3IFdufWVsc2Ugcz10P1tdOmw7ZTpmb3IoOysrcjxpOyl7dmFyIHU9ZVtyXSxmPXQ/dCh1KTp1O2lmKHU9bnx8MCE9PXU/dTowLGEmJmY9PWYpe2Zvcih2YXIgZD1zLmxlbmd0aDtkLS07KWlmKHNbZF09PT1mKWNvbnRpbnVlIGU7dCYmcy5wdXNoKGYpLGwucHVzaCh1KX1lbHNlIG8ocyxmLG4pfHwocyE9PWwmJnMucHVzaChmKSxsLnB1c2godSkpfXJldHVybiBsfWZ1bmN0aW9uIGxvKGUsdCl7cmV0dXJuIG51bGw9PShlPU9pKGUsdD12byh0LGUpKSl8fGRlbGV0ZSBlW1RpKHFpKHQpKV19ZnVuY3Rpb24gc28oZSx0LG4scil7cmV0dXJuIFlyKGUsdCxuKHdyKGUsdCkpLHIpfWZ1bmN0aW9uIGNvKGUsdCxuLHIpe2Zvcih2YXIgbz1lLmxlbmd0aCxpPXI/bzotMTsocj9pLS06KytpPG8pJiZ0KGVbaV0saSxlKTspO3JldHVybiBuP1FyKGUscj8wOmkscj9pKzE6byk6UXIoZSxyP2krMTowLHI/bzppKX1mdW5jdGlvbiB1byhlLHQpe3ZhciBuPWU7cmV0dXJuIG4gaW5zdGFuY2VvZiAkbiYmKG49bi52YWx1ZSgpKSxJdCh0LChmdW5jdGlvbihlLHQpe3JldHVybiB0LmZ1bmMuYXBwbHkodC50aGlzQXJnLFB0KFtlXSx0LmFyZ3MpKX0pLG4pfWZ1bmN0aW9uIGZvKGUsdCxuKXt2YXIgbz1lLmxlbmd0aDtpZihvPDIpcmV0dXJuIG8/YW8oZVswXSk6W107Zm9yKHZhciBpPS0xLGE9cihvKTsrK2k8bzspZm9yKHZhciBsPWVbaV0scz0tMTsrK3M8bzspcyE9aSYmKGFbaV09c3IoYVtpXXx8bCxlW3NdLHQsbikpO3JldHVybiBhbyhocihhLDEpLHQsbil9ZnVuY3Rpb24gcG8oZSx0LG4pe2Zvcih2YXIgcj0tMSxpPWUubGVuZ3RoLGE9dC5sZW5ndGgsbD17fTsrK3I8aTspe3ZhciBzPXI8YT90W3JdOm87bihsLGVbcl0scyl9cmV0dXJuIGx9ZnVuY3Rpb24gaG8oZSl7cmV0dXJuIFdhKGUpP2U6W119ZnVuY3Rpb24gZ28oZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOnRzfWZ1bmN0aW9uIHZvKGUsdCl7cmV0dXJuIE5hKGUpP2U6bWkoZSx0KT9bZV06QWkodmwoZSkpfXZhciBtbz16cjtmdW5jdGlvbiBDbyhlLHQsbil7dmFyIHI9ZS5sZW5ndGg7cmV0dXJuIG49bj09PW8/cjpuLCF0JiZuPj1yP2U6UXIoZSx0LG4pfXZhciB5bz1hdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGZ0LmNsZWFyVGltZW91dChlKX07ZnVuY3Rpb24gd28oZSx0KXtpZih0KXJldHVybiBlLnNsaWNlKCk7dmFyIG49ZS5sZW5ndGgscj1GZT9GZShuKTpuZXcgZS5jb25zdHJ1Y3RvcihuKTtyZXR1cm4gZS5jb3B5KHIpLHJ9ZnVuY3Rpb24gYm8oZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IE5lKHQpLnNldChuZXcgTmUoZSkpLHR9ZnVuY3Rpb24geG8oZSx0KXt2YXIgbj10P2JvKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IobixlLmJ5dGVPZmZzZXQsZS5sZW5ndGgpfWZ1bmN0aW9uIF9vKGUsdCl7aWYoZSE9PXQpe3ZhciBuPWUhPT1vLHI9bnVsbD09PWUsaT1lPT1lLGE9YWwoZSksbD10IT09byxzPW51bGw9PT10LGM9dD09dCx1PWFsKHQpO2lmKCFzJiYhdSYmIWEmJmU+dHx8YSYmbCYmYyYmIXMmJiF1fHxyJiZsJiZjfHwhbiYmY3x8IWkpcmV0dXJuIDE7aWYoIXImJiFhJiYhdSYmZTx0fHx1JiZuJiZpJiYhciYmIWF8fHMmJm4mJml8fCFsJiZpfHwhYylyZXR1cm4tMX1yZXR1cm4gMH1mdW5jdGlvbiBPbyhlLHQsbixvKXtmb3IodmFyIGk9LTEsYT1lLmxlbmd0aCxsPW4ubGVuZ3RoLHM9LTEsYz10Lmxlbmd0aCx1PWduKGEtbCwwKSxmPXIoYyt1KSxkPSFvOysrczxjOylmW3NdPXRbc107Zm9yKDsrK2k8bDspKGR8fGk8YSkmJihmW25baV1dPWVbaV0pO2Zvcig7dS0tOylmW3MrK109ZVtpKytdO3JldHVybiBmfWZ1bmN0aW9uIExvKGUsdCxuLG8pe2Zvcih2YXIgaT0tMSxhPWUubGVuZ3RoLGw9LTEscz1uLmxlbmd0aCxjPS0xLHU9dC5sZW5ndGgsZj1nbihhLXMsMCksZD1yKGYrdSkscD0hbzsrK2k8ZjspZFtpXT1lW2ldO2Zvcih2YXIgaD1pOysrYzx1OylkW2grY109dFtjXTtmb3IoOysrbDxzOykocHx8aTxhKSYmKGRbaCtuW2xdXT1lW2krK10pO3JldHVybiBkfWZ1bmN0aW9uIEVvKGUsdCl7dmFyIG49LTEsbz1lLmxlbmd0aDtmb3IodHx8KHQ9cihvKSk7KytuPG87KXRbbl09ZVtuXTtyZXR1cm4gdH1mdW5jdGlvbiBTbyhlLHQsbixyKXt2YXIgaT0hbjtufHwobj17fSk7Zm9yKHZhciBhPS0xLGw9dC5sZW5ndGg7KythPGw7KXt2YXIgcz10W2FdLGM9cj9yKG5bc10sZVtzXSxzLG4sZSk6bztjPT09byYmKGM9ZVtzXSksaT9ucihuLHMsYyk6Sm4obixzLGMpfXJldHVybiBufWZ1bmN0aW9uIGpvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIG89TmEobik/T3Q6ZXIsaT10P3QoKTp7fTtyZXR1cm4gbyhuLGUsaWkociwyKSxpKX19ZnVuY3Rpb24gTW8oZSl7cmV0dXJuIHpyKChmdW5jdGlvbih0LG4pe3ZhciByPS0xLGk9bi5sZW5ndGgsYT1pPjE/bltpLTFdOm8sbD1pPjI/blsyXTpvO2ZvcihhPWUubGVuZ3RoPjMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGE/KGktLSxhKTpvLGwmJnZpKG5bMF0sblsxXSxsKSYmKGE9aTwzP286YSxpPTEpLHQ9T2UodCk7KytyPGk7KXt2YXIgcz1uW3JdO3MmJmUodCxzLHIsYSl9cmV0dXJuIHR9KSl9ZnVuY3Rpb24ga28oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtpZihudWxsPT1uKXJldHVybiBuO2lmKCFVYShuKSlyZXR1cm4gZShuLHIpO2Zvcih2YXIgbz1uLmxlbmd0aCxpPXQ/bzotMSxhPU9lKG4pOyh0P2ktLTorK2k8bykmJiExIT09cihhW2ldLGksYSk7KTtyZXR1cm4gbn19ZnVuY3Rpb24gUm8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtmb3IodmFyIG89LTEsaT1PZSh0KSxhPXIodCksbD1hLmxlbmd0aDtsLS07KXt2YXIgcz1hW2U/bDorK29dO2lmKCExPT09bihpW3NdLHMsaSkpYnJlYWt9cmV0dXJuIHR9fWZ1bmN0aW9uIFBvKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1ybih0PXZsKHQpKT91bih0KTpvLHI9bj9uWzBdOnQuY2hhckF0KDApLGk9bj9DbyhuLDEpLmpvaW4oXCJcIik6dC5zbGljZSgxKTtyZXR1cm4gcltlXSgpK2l9fWZ1bmN0aW9uIElvKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSXQoWWwoJGwodCkucmVwbGFjZShLZSxcIlwiKSksZSxcIlwiKX19ZnVuY3Rpb24gQW8oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgZTtjYXNlIDE6cmV0dXJuIG5ldyBlKHRbMF0pO2Nhc2UgMjpyZXR1cm4gbmV3IGUodFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdKTtjYXNlIDQ6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10pO2Nhc2UgNTpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSx0WzRdKTtjYXNlIDY6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSx0WzVdKTtjYXNlIDc6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSx0WzVdLHRbNl0pfXZhciBuPVZuKGUucHJvdG90eXBlKSxyPWUuYXBwbHkobix0KTtyZXR1cm4gSmEocik/cjpufX1mdW5jdGlvbiBUbyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe3ZhciBpPU9lKHQpO2lmKCFVYSh0KSl7dmFyIGE9aWkobiwzKTt0PU1sKHQpLG49ZnVuY3Rpb24oZSl7cmV0dXJuIGEoaVtlXSxlLGkpfX12YXIgbD1lKHQsbixyKTtyZXR1cm4gbD4tMT9pW2E/dFtsXTpsXTpvfX1mdW5jdGlvbiBIbyhlKXtyZXR1cm4gUW8oKGZ1bmN0aW9uKHQpe3ZhciBuPXQubGVuZ3RoLHI9bixhPVpuLnByb3RvdHlwZS50aHJ1O2ZvcihlJiZ0LnJldmVyc2UoKTtyLS07KXt2YXIgbD10W3JdO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGwpdGhyb3cgbmV3IFNlKGkpO2lmKGEmJiFzJiZcIndyYXBwZXJcIj09cmkobCkpdmFyIHM9bmV3IFpuKFtdLCEwKX1mb3Iocj1zP3I6bjsrK3I8bjspe3ZhciBjPXJpKGw9dFtyXSksdT1cIndyYXBwZXJcIj09Yz9uaShsKTpvO3M9dSYmQ2kodVswXSkmJjQyND09dVsxXSYmIXVbNF0ubGVuZ3RoJiYxPT11WzldP3NbcmkodVswXSldLmFwcGx5KHMsdVszXSk6MT09bC5sZW5ndGgmJkNpKGwpP3NbY10oKTpzLnRocnUobCl9cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLHI9ZVswXTtpZihzJiYxPT1lLmxlbmd0aCYmTmEocikpcmV0dXJuIHMucGxhbnQocikudmFsdWUoKTtmb3IodmFyIG89MCxpPW4/dFtvXS5hcHBseSh0aGlzLGUpOnI7KytvPG47KWk9dFtvXS5jYWxsKHRoaXMsaSk7cmV0dXJuIGl9fSkpfWZ1bmN0aW9uIEJvKGUsdCxuLGksYSxsLHMsdSxmLGQpe3ZhciBwPXQmYyxoPTEmdCxnPTImdCx2PTI0JnQsbT01MTImdCxDPWc/bzpBbyhlKTtyZXR1cm4gZnVuY3Rpb24gYygpe2Zvcih2YXIgeT1hcmd1bWVudHMubGVuZ3RoLHc9cih5KSxiPXk7Yi0tOyl3W2JdPWFyZ3VtZW50c1tiXTtpZih2KXZhciB4PW9pKGMpLF89ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgscj0wO24tLTspZVtuXT09PXQmJisrcjtyZXR1cm4gcn0odyx4KTtpZihpJiYodz1Pbyh3LGksYSx2KSksbCYmKHc9TG8odyxsLHMsdikpLHktPV8sdiYmeTxkKXt2YXIgTz1sbih3LHgpO3JldHVybiBVbyhlLHQsQm8sYy5wbGFjZWhvbGRlcixuLHcsTyx1LGYsZC15KX12YXIgTD1oP246dGhpcyxFPWc/TFtlXTplO3JldHVybiB5PXcubGVuZ3RoLHU/dz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aCxyPXZuKHQubGVuZ3RoLG4pLGk9RW8oZSk7ci0tOyl7dmFyIGE9dFtyXTtlW3JdPWdpKGEsbik/aVthXTpvfXJldHVybiBlfSh3LHUpOm0mJnk+MSYmdy5yZXZlcnNlKCkscCYmZjx5JiYody5sZW5ndGg9ZiksdGhpcyYmdGhpcyE9PWZ0JiZ0aGlzIGluc3RhbmNlb2YgYyYmKEU9Q3x8QW8oRSkpLEUuYXBwbHkoTCx3KX19ZnVuY3Rpb24gVm8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG1yKGUsKGZ1bmN0aW9uKGUsbyxpKXt0KHIsbihlKSxvLGkpfSkpLHJ9KG4sZSx0KHIpLHt9KX19ZnVuY3Rpb24gRG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2YXIgaTtpZihuPT09byYmcj09PW8pcmV0dXJuIHQ7aWYobiE9PW8mJihpPW4pLHIhPT1vKXtpZihpPT09bylyZXR1cm4gcjtcInN0cmluZ1wiPT10eXBlb2Ygbnx8XCJzdHJpbmdcIj09dHlwZW9mIHI/KG49aW8obikscj1pbyhyKSk6KG49b28obikscj1vbyhyKSksaT1lKG4scil9cmV0dXJuIGl9fWZ1bmN0aW9uIFpvKGUpe3JldHVybiBRbygoZnVuY3Rpb24odCl7cmV0dXJuIHQ9UnQodCxZdChpaSgpKSksenIoKGZ1bmN0aW9uKG4pe3ZhciByPXRoaXM7cmV0dXJuIGUodCwoZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUscixuKX0pKX0pKX0pKX1mdW5jdGlvbiAkbyhlLHQpe3ZhciBuPSh0PXQ9PT1vP1wiIFwiOmlvKHQpKS5sZW5ndGg7aWYobjwyKXJldHVybiBuP1dyKHQsZSk6dDt2YXIgcj1Xcih0LGR0KGUvY24odCkpKTtyZXR1cm4gcm4odCk/Q28odW4ociksMCxlKS5qb2luKFwiXCIpOnIuc2xpY2UoMCxlKX1mdW5jdGlvbiBObyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuLGkpe3JldHVybiBpJiZcIm51bWJlclwiIT10eXBlb2YgaSYmdmkodCxuLGkpJiYobj1pPW8pLHQ9ZmwodCksbj09PW8/KG49dCx0PTApOm49ZmwobiksZnVuY3Rpb24oZSx0LG4sbyl7Zm9yKHZhciBpPS0xLGE9Z24oZHQoKHQtZSkvKG58fDEpKSwwKSxsPXIoYSk7YS0tOylsW28/YTorK2ldPWUsZSs9bjtyZXR1cm4gbH0odCxuLGk9aT09PW8/dDxuPzE6LTE6ZmwoaSksZSl9fWZ1bmN0aW9uIEZvKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiZcInN0cmluZ1wiPT10eXBlb2Ygbnx8KHQ9aGwodCksbj1obChuKSksZSh0LG4pfX1mdW5jdGlvbiBVbyhlLHQsbixyLGksYSxsLGMsdSxmKXt2YXIgZD04JnQ7dHw9ZD9zOjY0LDQmKHQmPX4oZD82NDpzKSl8fCh0Jj0tNCk7dmFyIHA9W2UsdCxpLGQ/YTpvLGQ/bDpvLGQ/bzphLGQ/bzpsLGMsdSxmXSxoPW4uYXBwbHkobyxwKTtyZXR1cm4gQ2koZSkmJkVpKGgscCksaC5wbGFjZWhvbGRlcj1yLE1pKGgsZSx0KX1mdW5jdGlvbiBXbyhlKXt2YXIgdD1fZVtlXTtyZXR1cm4gZnVuY3Rpb24oZSxuKXtpZihlPWhsKGUpLChuPW51bGw9PW4/MDp2bihkbChuKSwyOTIpKSYmSHQoZSkpe3ZhciByPSh2bChlKStcImVcIikuc3BsaXQoXCJlXCIpO3JldHVybisoKHI9KHZsKHQoclswXStcImVcIisoK3JbMV0rbikpKStcImVcIikuc3BsaXQoXCJlXCIpKVswXStcImVcIisoK3JbMV0tbikpfXJldHVybiB0KGUpfX12YXIgem89T24mJjEvc24obmV3IE9uKFssLTBdKSlbMV09PXU/ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBPbihlKX06YXM7ZnVuY3Rpb24gR28oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPWZpKHQpO3JldHVybiBuPT14P29uKHQpOm49PVM/ZnVuY3Rpb24oZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe25bKyt0XT1bZSxlXX0pKSxufSh0KTpmdW5jdGlvbihlLHQpe3JldHVybiBSdCh0LChmdW5jdGlvbih0KXtyZXR1cm5bdCxlW3RdXX0pKX0odCxlKHQpKX19ZnVuY3Rpb24gcW8oZSx0LG4sYSx1LGYsZCxwKXt2YXIgaD0yJnQ7aWYoIWgmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFNlKGkpO3ZhciBnPWE/YS5sZW5ndGg6MDtpZihnfHwodCY9LTk3LGE9dT1vKSxkPWQ9PT1vP2Q6Z24oZGwoZCksMCkscD1wPT09bz9wOmRsKHApLGctPXU/dS5sZW5ndGg6MCw2NCZ0KXt2YXIgdj1hLG09dTthPXU9b312YXIgQz1oP286bmkoZSkseT1bZSx0LG4sYSx1LHYsbSxmLGQscF07aWYoQyYmZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdLHI9dFsxXSxvPW58cixpPW88MTMxLGE9cj09YyYmOD09bnx8cj09YyYmMjU2PT1uJiZlWzddLmxlbmd0aDw9dFs4XXx8Mzg0PT1yJiZ0WzddLmxlbmd0aDw9dFs4XSYmOD09bjtpZighaSYmIWEpcmV0dXJuIGU7MSZyJiYoZVsyXT10WzJdLG98PTEmbj8wOjQpO3ZhciBzPXRbM107aWYocyl7dmFyIHU9ZVszXTtlWzNdPXU/T28odSxzLHRbNF0pOnMsZVs0XT11P2xuKGVbM10sbCk6dFs0XX0ocz10WzVdKSYmKHU9ZVs1XSxlWzVdPXU/TG8odSxzLHRbNl0pOnMsZVs2XT11P2xuKGVbNV0sbCk6dFs2XSksKHM9dFs3XSkmJihlWzddPXMpLHImYyYmKGVbOF09bnVsbD09ZVs4XT90WzhdOnZuKGVbOF0sdFs4XSkpLG51bGw9PWVbOV0mJihlWzldPXRbOV0pLGVbMF09dFswXSxlWzFdPW99KHksQyksZT15WzBdLHQ9eVsxXSxuPXlbMl0sYT15WzNdLHU9eVs0XSwhKHA9eVs5XT15WzldPT09bz9oPzA6ZS5sZW5ndGg6Z24oeVs5XS1nLDApKSYmMjQmdCYmKHQmPS0yNSksdCYmMSE9dCl3PTg9PXR8fDE2PT10P2Z1bmN0aW9uKGUsdCxuKXt2YXIgaT1BbyhlKTtyZXR1cm4gZnVuY3Rpb24gYSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLHM9cihsKSxjPWwsdT1vaShhKTtjLS07KXNbY109YXJndW1lbnRzW2NdO3ZhciBmPWw8MyYmc1swXSE9PXUmJnNbbC0xXSE9PXU/W106bG4ocyx1KTtyZXR1cm4obC09Zi5sZW5ndGgpPG4/VW8oZSx0LEJvLGEucGxhY2Vob2xkZXIsbyxzLGYsbyxvLG4tbCk6X3QodGhpcyYmdGhpcyE9PWZ0JiZ0aGlzIGluc3RhbmNlb2YgYT9pOmUsdGhpcyxzKX19KGUsdCxwKTp0IT1zJiYzMyE9dHx8dS5sZW5ndGg/Qm8uYXBwbHkobyx5KTpmdW5jdGlvbihlLHQsbixvKXt2YXIgaT0xJnQsYT1BbyhlKTtyZXR1cm4gZnVuY3Rpb24gdCgpe2Zvcih2YXIgbD0tMSxzPWFyZ3VtZW50cy5sZW5ndGgsYz0tMSx1PW8ubGVuZ3RoLGY9cih1K3MpLGQ9dGhpcyYmdGhpcyE9PWZ0JiZ0aGlzIGluc3RhbmNlb2YgdD9hOmU7KytjPHU7KWZbY109b1tjXTtmb3IoO3MtLTspZltjKytdPWFyZ3VtZW50c1srK2xdO3JldHVybiBfdChkLGk/bjp0aGlzLGYpfX0oZSx0LG4sYSk7ZWxzZSB2YXIgdz1mdW5jdGlvbihlLHQsbil7dmFyIHI9MSZ0LG89QW8oZSk7cmV0dXJuIGZ1bmN0aW9uIHQoKXtyZXR1cm4odGhpcyYmdGhpcyE9PWZ0JiZ0aGlzIGluc3RhbmNlb2YgdD9vOmUpLmFwcGx5KHI/bjp0aGlzLGFyZ3VtZW50cyl9fShlLHQsbik7cmV0dXJuIE1pKChDP0tyOkVpKSh3LHkpLGUsdCl9ZnVuY3Rpb24gWW8oZSx0LG4scil7cmV0dXJuIGU9PT1vfHxWYShlLGtlW25dKSYmIUllLmNhbGwocixuKT90OmV9ZnVuY3Rpb24gS28oZSx0LG4scixpLGEpe3JldHVybiBKYShlKSYmSmEodCkmJihhLnNldCh0LGUpLFZyKGUsdCxvLEtvLGEpLGEuZGVsZXRlKHQpKSxlfWZ1bmN0aW9uIFhvKGUpe3JldHVybiBubChlKT9vOmV9ZnVuY3Rpb24gSm8oZSx0LG4scixpLGEpe3ZhciBsPTEmbixzPWUubGVuZ3RoLGM9dC5sZW5ndGg7aWYocyE9YyYmIShsJiZjPnMpKXJldHVybiExO3ZhciB1PWEuZ2V0KGUpLGY9YS5nZXQodCk7aWYodSYmZilyZXR1cm4gdT09dCYmZj09ZTt2YXIgZD0tMSxwPSEwLGg9MiZuP25ldyBXbjpvO2ZvcihhLnNldChlLHQpLGEuc2V0KHQsZSk7KytkPHM7KXt2YXIgZz1lW2RdLHY9dFtkXTtpZihyKXZhciBtPWw/cih2LGcsZCx0LGUsYSk6cihnLHYsZCxlLHQsYSk7aWYobSE9PW8pe2lmKG0pY29udGludWU7cD0hMTticmVha31pZihoKXtpZighVHQodCwoZnVuY3Rpb24oZSx0KXtpZighWHQoaCx0KSYmKGc9PT1lfHxpKGcsZSxuLHIsYSkpKXJldHVybiBoLnB1c2godCl9KSkpe3A9ITE7YnJlYWt9fWVsc2UgaWYoZyE9PXYmJiFpKGcsdixuLHIsYSkpe3A9ITE7YnJlYWt9fXJldHVybiBhLmRlbGV0ZShlKSxhLmRlbGV0ZSh0KSxwfWZ1bmN0aW9uIFFvKGUpe3JldHVybiBqaShfaShlLG8sRmkpLGUrXCJcIil9ZnVuY3Rpb24gZWkoZSl7cmV0dXJuIGJyKGUsTWwsY2kpfWZ1bmN0aW9uIHRpKGUpe3JldHVybiBicihlLGtsLHVpKX12YXIgbmk9U24/ZnVuY3Rpb24oZSl7cmV0dXJuIFNuLmdldChlKX06YXM7ZnVuY3Rpb24gcmkoZSl7Zm9yKHZhciB0PWUubmFtZStcIlwiLG49am5bdF0scj1JZS5jYWxsKGpuLHQpP24ubGVuZ3RoOjA7ci0tOyl7dmFyIG89bltyXSxpPW8uZnVuYztpZihudWxsPT1pfHxpPT1lKXJldHVybiBvLm5hbWV9cmV0dXJuIHR9ZnVuY3Rpb24gb2koZSl7cmV0dXJuKEllLmNhbGwoQm4sXCJwbGFjZWhvbGRlclwiKT9CbjplKS5wbGFjZWhvbGRlcn1mdW5jdGlvbiBpaSgpe3ZhciBlPUJuLml0ZXJhdGVlfHxucztyZXR1cm4gZT1lPT09bnM/UHI6ZSxhcmd1bWVudHMubGVuZ3RoP2UoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSk6ZX1mdW5jdGlvbiBhaShlLHQpe3ZhciBuLHIsbz1lLl9fZGF0YV9fO3JldHVybihcInN0cmluZ1wiPT0ocj10eXBlb2Yobj10KSl8fFwibnVtYmVyXCI9PXJ8fFwic3ltYm9sXCI9PXJ8fFwiYm9vbGVhblwiPT1yP1wiX19wcm90b19fXCIhPT1uOm51bGw9PT1uKT9vW1wic3RyaW5nXCI9PXR5cGVvZiB0P1wic3RyaW5nXCI6XCJoYXNoXCJdOm8ubWFwfWZ1bmN0aW9uIGxpKGUpe2Zvcih2YXIgdD1NbChlKSxuPXQubGVuZ3RoO24tLTspe3ZhciByPXRbbl0sbz1lW3JdO3Rbbl09W3IsbyxiaShvKV19cmV0dXJuIHR9ZnVuY3Rpb24gc2koZSx0KXt2YXIgbj1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP286ZVt0XX0oZSx0KTtyZXR1cm4gUnIobik/bjpvfXZhciBjaT1ndD9mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9bXTooZT1PZShlKSxqdChndChlKSwoZnVuY3Rpb24odCl7cmV0dXJuIHplLmNhbGwoZSx0KX0pKSl9OnBzLHVpPWd0P2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXTtlOylQdCh0LGNpKGUpKSxlPVVlKGUpO3JldHVybiB0fTpwcyxmaT14cjtmdW5jdGlvbiBkaShlLHQsbil7Zm9yKHZhciByPS0xLG89KHQ9dm8odCxlKSkubGVuZ3RoLGk9ITE7KytyPG87KXt2YXIgYT1UaSh0W3JdKTtpZighKGk9bnVsbCE9ZSYmbihlLGEpKSlicmVhaztlPWVbYV19cmV0dXJuIGl8fCsrciE9bz9pOiEhKG89bnVsbD09ZT8wOmUubGVuZ3RoKSYmWGEobykmJmdpKGEsbykmJihOYShlKXx8JGEoZSkpfWZ1bmN0aW9uIHBpKGUpe3JldHVyblwiZnVuY3Rpb25cIiE9dHlwZW9mIGUuY29uc3RydWN0b3J8fHdpKGUpP3t9OlZuKFVlKGUpKX1mdW5jdGlvbiBoaShlKXtyZXR1cm4gTmEoZSl8fCRhKGUpfHwhIShxZSYmZSYmZVtxZV0pfWZ1bmN0aW9uIGdpKGUsdCl7dmFyIG49dHlwZW9mIGU7cmV0dXJuISEodD1udWxsPT10P2Y6dCkmJihcIm51bWJlclwiPT1ufHxcInN5bWJvbFwiIT1uJiZtZS50ZXN0KGUpKSYmZT4tMSYmZSUxPT0wJiZlPHR9ZnVuY3Rpb24gdmkoZSx0LG4pe2lmKCFKYShuKSlyZXR1cm4hMTt2YXIgcj10eXBlb2YgdDtyZXR1cm4hIShcIm51bWJlclwiPT1yP1VhKG4pJiZnaSh0LG4ubGVuZ3RoKTpcInN0cmluZ1wiPT1yJiZ0IGluIG4pJiZWYShuW3RdLGUpfWZ1bmN0aW9uIG1pKGUsdCl7aWYoTmEoZSkpcmV0dXJuITE7dmFyIG49dHlwZW9mIGU7cmV0dXJuIShcIm51bWJlclwiIT1uJiZcInN5bWJvbFwiIT1uJiZcImJvb2xlYW5cIiE9biYmbnVsbCE9ZSYmIWFsKGUpKXx8US50ZXN0KGUpfHwhSi50ZXN0KGUpfHxudWxsIT10JiZlIGluIE9lKHQpfWZ1bmN0aW9uIENpKGUpe3ZhciB0PXJpKGUpLG49Qm5bdF07aWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygbnx8ISh0IGluICRuLnByb3RvdHlwZSkpcmV0dXJuITE7aWYoZT09PW4pcmV0dXJuITA7dmFyIHI9bmkobik7cmV0dXJuISFyJiZlPT09clswXX0oYm4mJmZpKG5ldyBibihuZXcgQXJyYXlCdWZmZXIoMSkpKSE9UHx8eG4mJmZpKG5ldyB4bikhPXh8fF9uJiZmaShfbi5yZXNvbHZlKCkpIT1MfHxPbiYmZmkobmV3IE9uKSE9U3x8TG4mJmZpKG5ldyBMbikhPWspJiYoZmk9ZnVuY3Rpb24oZSl7dmFyIHQ9eHIoZSksbj10PT1PP2UuY29uc3RydWN0b3I6byxyPW4/SGkobik6XCJcIjtpZihyKXN3aXRjaChyKXtjYXNlIE1uOnJldHVybiBQO2Nhc2Uga246cmV0dXJuIHg7Y2FzZSBSbjpyZXR1cm4gTDtjYXNlIFBuOnJldHVybiBTO2Nhc2UgSW46cmV0dXJuIGt9cmV0dXJuIHR9KTt2YXIgeWk9UmU/WWE6aHM7ZnVuY3Rpb24gd2koZSl7dmFyIHQ9ZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4gZT09PShcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZ0LnByb3RvdHlwZXx8a2UpfWZ1bmN0aW9uIGJpKGUpe3JldHVybiBlPT1lJiYhSmEoZSl9ZnVuY3Rpb24geGkoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW4mJm5bZV09PT10JiYodCE9PW98fGUgaW4gT2UobikpfX1mdW5jdGlvbiBfaShlLHQsbil7cmV0dXJuIHQ9Z24odD09PW8/ZS5sZW5ndGgtMTp0LDApLGZ1bmN0aW9uKCl7Zm9yKHZhciBvPWFyZ3VtZW50cyxpPS0xLGE9Z24oby5sZW5ndGgtdCwwKSxsPXIoYSk7KytpPGE7KWxbaV09b1t0K2ldO2k9LTE7Zm9yKHZhciBzPXIodCsxKTsrK2k8dDspc1tpXT1vW2ldO3JldHVybiBzW3RdPW4obCksX3QoZSx0aGlzLHMpfX1mdW5jdGlvbiBPaShlLHQpe3JldHVybiB0Lmxlbmd0aDwyP2U6d3IoZSxRcih0LDAsLTEpKX1mdW5jdGlvbiBMaShlLHQpe2lmKChcImNvbnN0cnVjdG9yXCIhPT10fHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlW3RdKSYmXCJfX3Byb3RvX19cIiE9dClyZXR1cm4gZVt0XX12YXIgRWk9a2koS3IpLFNpPXV0fHxmdW5jdGlvbihlLHQpe3JldHVybiBmdC5zZXRUaW1lb3V0KGUsdCl9LGppPWtpKFhyKTtmdW5jdGlvbiBNaShlLHQsbil7dmFyIHI9dCtcIlwiO3JldHVybiBqaShlLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZW5ndGg7aWYoIW4pcmV0dXJuIGU7dmFyIHI9bi0xO3JldHVybiB0W3JdPShuPjE/XCImIFwiOlwiXCIpK3Rbcl0sdD10LmpvaW4obj4yP1wiLCBcIjpcIiBcIiksZS5yZXBsYWNlKGllLFwie1xcbi8qIFt3cmFwcGVkIHdpdGggXCIrdCtcIl0gKi9cXG5cIil9KHIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTHQoaCwoZnVuY3Rpb24obil7dmFyIHI9XCJfLlwiK25bMF07dCZuWzFdJiYhTXQoZSxyKSYmZS5wdXNoKHIpfSkpLGUuc29ydCgpfShmdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKGFlKTtyZXR1cm4gdD90WzFdLnNwbGl0KGxlKTpbXX0ociksbikpKX1mdW5jdGlvbiBraShlKXt2YXIgdD0wLG49MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1tbigpLGk9MTYtKHItbik7aWYobj1yLGk+MCl7aWYoKyt0Pj04MDApcmV0dXJuIGFyZ3VtZW50c1swXX1lbHNlIHQ9MDtyZXR1cm4gZS5hcHBseShvLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFJpKGUsdCl7dmFyIG49LTEscj1lLmxlbmd0aCxpPXItMTtmb3IodD10PT09bz9yOnQ7KytuPHQ7KXt2YXIgYT1VcihuLGkpLGw9ZVthXTtlW2FdPWVbbl0sZVtuXT1sfXJldHVybiBlLmxlbmd0aD10LGV9dmFyIFBpLElpLEFpPShQaT1QYSgoZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIDQ2PT09ZS5jaGFyQ29kZUF0KDApJiZ0LnB1c2goXCJcIiksZS5yZXBsYWNlKGVlLChmdW5jdGlvbihlLG4scixvKXt0LnB1c2gocj9vLnJlcGxhY2UodWUsXCIkMVwiKTpufHxlKX0pKSx0fSksKGZ1bmN0aW9uKGUpe3JldHVybiA1MDA9PT1JaS5zaXplJiZJaS5jbGVhcigpLGV9KSksSWk9UGkuY2FjaGUsUGkpO2Z1bmN0aW9uIFRpKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxhbChlKSlyZXR1cm4gZTt2YXIgdD1lK1wiXCI7cmV0dXJuXCIwXCI9PXQmJjEvZT09LTEvMD9cIi0wXCI6dH1mdW5jdGlvbiBIaShlKXtpZihudWxsIT1lKXt0cnl7cmV0dXJuIFBlLmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZStcIlwifWNhdGNoKGUpe319cmV0dXJuXCJcIn1mdW5jdGlvbiBCaShlKXtpZihlIGluc3RhbmNlb2YgJG4pcmV0dXJuIGUuY2xvbmUoKTt2YXIgdD1uZXcgWm4oZS5fX3dyYXBwZWRfXyxlLl9fY2hhaW5fXyk7cmV0dXJuIHQuX19hY3Rpb25zX189RW8oZS5fX2FjdGlvbnNfXyksdC5fX2luZGV4X189ZS5fX2luZGV4X18sdC5fX3ZhbHVlc19fPWUuX192YWx1ZXNfXyx0fXZhciBWaT16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gV2EoZSk/c3IoZSxocih0LDEsV2EsITApKTpbXX0pKSxEaT16cigoZnVuY3Rpb24oZSx0KXt2YXIgbj1xaSh0KTtyZXR1cm4gV2EobikmJihuPW8pLFdhKGUpP3NyKGUsaHIodCwxLFdhLCEwKSxpaShuLDIpKTpbXX0pKSxaaT16cigoZnVuY3Rpb24oZSx0KXt2YXIgbj1xaSh0KTtyZXR1cm4gV2EobikmJihuPW8pLFdhKGUpP3NyKGUsaHIodCwxLFdhLCEwKSxvLG4pOltdfSkpO2Z1bmN0aW9uICRpKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIG89bnVsbD09bj8wOmRsKG4pO3JldHVybiBvPDAmJihvPWduKHIrbywwKSksVnQoZSxpaSh0LDMpLG8pfWZ1bmN0aW9uIE5pKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIGk9ci0xO3JldHVybiBuIT09byYmKGk9ZGwobiksaT1uPDA/Z24ocitpLDApOnZuKGksci0xKSksVnQoZSxpaSh0LDMpLGksITApfWZ1bmN0aW9uIEZpKGUpe3JldHVybiBudWxsIT1lJiZlLmxlbmd0aD9ocihlLDEpOltdfWZ1bmN0aW9uIFVpKGUpe3JldHVybiBlJiZlLmxlbmd0aD9lWzBdOm99dmFyIFdpPXpyKChmdW5jdGlvbihlKXt2YXIgdD1SdChlLGhvKTtyZXR1cm4gdC5sZW5ndGgmJnRbMF09PT1lWzBdP0VyKHQpOltdfSkpLHppPXpyKChmdW5jdGlvbihlKXt2YXIgdD1xaShlKSxuPVJ0KGUsaG8pO3JldHVybiB0PT09cWkobik/dD1vOm4ucG9wKCksbi5sZW5ndGgmJm5bMF09PT1lWzBdP0VyKG4saWkodCwyKSk6W119KSksR2k9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PXFpKGUpLG49UnQoZSxobyk7cmV0dXJuKHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8pJiZuLnBvcCgpLG4ubGVuZ3RoJiZuWzBdPT09ZVswXT9FcihuLG8sdCk6W119KSk7ZnVuY3Rpb24gcWkoZSl7dmFyIHQ9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiB0P2VbdC0xXTpvfXZhciBZaT16cihLaSk7ZnVuY3Rpb24gS2koZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGgmJnQmJnQubGVuZ3RoP05yKGUsdCk6ZX12YXIgWGk9UW8oKGZ1bmN0aW9uKGUsdCl7dmFyIG49bnVsbD09ZT8wOmUubGVuZ3RoLHI9cnIoZSx0KTtyZXR1cm4gRnIoZSxSdCh0LChmdW5jdGlvbihlKXtyZXR1cm4gZ2koZSxuKT8rZTplfSkpLnNvcnQoX28pKSxyfSkpO2Z1bmN0aW9uIEppKGUpe3JldHVybiBudWxsPT1lP2U6d24uY2FsbChlKX12YXIgUWk9enIoKGZ1bmN0aW9uKGUpe3JldHVybiBhbyhocihlLDEsV2EsITApKX0pKSxlYT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9cWkoZSk7cmV0dXJuIFdhKHQpJiYodD1vKSxhbyhocihlLDEsV2EsITApLGlpKHQsMikpfSkpLHRhPXpyKChmdW5jdGlvbihlKXt2YXIgdD1xaShlKTtyZXR1cm4gdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byxhbyhocihlLDEsV2EsITApLG8sdCl9KSk7ZnVuY3Rpb24gbmEoZSl7aWYoIWV8fCFlLmxlbmd0aClyZXR1cm5bXTt2YXIgdD0wO3JldHVybiBlPWp0KGUsKGZ1bmN0aW9uKGUpe2lmKFdhKGUpKXJldHVybiB0PWduKGUubGVuZ3RoLHQpLCEwfSkpLEd0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiBSdChlLEZ0KHQpKX0pKX1mdW5jdGlvbiByYShlLHQpe2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuW107dmFyIG49bmEoZSk7cmV0dXJuIG51bGw9PXQ/bjpSdChuLChmdW5jdGlvbihlKXtyZXR1cm4gX3QodCxvLGUpfSkpfXZhciBvYT16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gV2EoZSk/c3IoZSx0KTpbXX0pKSxpYT16cigoZnVuY3Rpb24oZSl7cmV0dXJuIGZvKGp0KGUsV2EpKX0pKSxhYT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9cWkoZSk7cmV0dXJuIFdhKHQpJiYodD1vKSxmbyhqdChlLFdhKSxpaSh0LDIpKX0pKSxsYT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9cWkoZSk7cmV0dXJuIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8sZm8oanQoZSxXYSksbyx0KX0pKSxzYT16cihuYSksY2E9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49dD4xP2VbdC0xXTpvO3JldHVybiBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/KGUucG9wKCksbik6byxyYShlLG4pfSkpO2Z1bmN0aW9uIHVhKGUpe3ZhciB0PUJuKGUpO3JldHVybiB0Ll9fY2hhaW5fXz0hMCx0fWZ1bmN0aW9uIGZhKGUsdCl7cmV0dXJuIHQoZSl9dmFyIGRhPVFvKChmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxuPXQ/ZVswXTowLHI9dGhpcy5fX3dyYXBwZWRfXyxpPWZ1bmN0aW9uKHQpe3JldHVybiBycih0LGUpfTtyZXR1cm4hKHQ+MXx8dGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgpJiZyIGluc3RhbmNlb2YgJG4mJmdpKG4pPygocj1yLnNsaWNlKG4sK24rKHQ/MTowKSkpLl9fYWN0aW9uc19fLnB1c2goe2Z1bmM6ZmEsYXJnczpbaV0sdGhpc0FyZzpvfSksbmV3IFpuKHIsdGhpcy5fX2NoYWluX18pLnRocnUoKGZ1bmN0aW9uKGUpe3JldHVybiB0JiYhZS5sZW5ndGgmJmUucHVzaChvKSxlfSkpKTp0aGlzLnRocnUoaSl9KSkscGE9am8oKGZ1bmN0aW9uKGUsdCxuKXtJZS5jYWxsKGUsbik/KytlW25dOm5yKGUsbiwxKX0pKSxoYT1UbygkaSksZ2E9VG8oTmkpO2Z1bmN0aW9uIHZhKGUsdCl7cmV0dXJuKE5hKGUpP0x0OmNyKShlLGlpKHQsMykpfWZ1bmN0aW9uIG1hKGUsdCl7cmV0dXJuKE5hKGUpP0V0OnVyKShlLGlpKHQsMykpfXZhciBDYT1qbygoZnVuY3Rpb24oZSx0LG4pe0llLmNhbGwoZSxuKT9lW25dLnB1c2godCk6bnIoZSxuLFt0XSl9KSkseWE9enIoKGZ1bmN0aW9uKGUsdCxuKXt2YXIgbz0tMSxpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQsYT1VYShlKT9yKGUubGVuZ3RoKTpbXTtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSl7YVsrK29dPWk/X3QodCxlLG4pOlNyKGUsdCxuKX0pKSxhfSkpLHdhPWpvKChmdW5jdGlvbihlLHQsbil7bnIoZSxuLHQpfSkpO2Z1bmN0aW9uIGJhKGUsdCl7cmV0dXJuKE5hKGUpP1J0OlRyKShlLGlpKHQsMykpfXZhciB4YT1qbygoZnVuY3Rpb24oZSx0LG4pe2Vbbj8wOjFdLnB1c2godCl9KSwoZnVuY3Rpb24oKXtyZXR1cm5bW10sW11dfSkpLF9hPXpyKChmdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJuW107dmFyIG49dC5sZW5ndGg7cmV0dXJuIG4+MSYmdmkoZSx0WzBdLHRbMV0pP3Q9W106bj4yJiZ2aSh0WzBdLHRbMV0sdFsyXSkmJih0PVt0WzBdXSksWnIoZSxocih0LDEpLFtdKX0pKSxPYT1jdHx8ZnVuY3Rpb24oKXtyZXR1cm4gZnQuRGF0ZS5ub3coKX07ZnVuY3Rpb24gTGEoZSx0LG4pe3JldHVybiB0PW4/bzp0LHQ9ZSYmbnVsbD09dD9lLmxlbmd0aDp0LHFvKGUsYyxvLG8sbyxvLHQpfWZ1bmN0aW9uIEVhKGUsdCl7dmFyIG47aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgU2UoaSk7cmV0dXJuIGU9ZGwoZSksZnVuY3Rpb24oKXtyZXR1cm4tLWU+MCYmKG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGU8PTEmJih0PW8pLG59fXZhciBTYT16cigoZnVuY3Rpb24oZSx0LG4pe3ZhciByPTE7aWYobi5sZW5ndGgpe3ZhciBvPWxuKG4sb2koU2EpKTtyfD1zfXJldHVybiBxbyhlLHIsdCxuLG8pfSkpLGphPXpyKChmdW5jdGlvbihlLHQsbil7dmFyIHI9MztpZihuLmxlbmd0aCl7dmFyIG89bG4obixvaShqYSkpO3J8PXN9cmV0dXJuIHFvKHQscixlLG4sbyl9KSk7ZnVuY3Rpb24gTWEoZSx0LG4pe3ZhciByLGEsbCxzLGMsdSxmPTAsZD0hMSxwPSExLGg9ITA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgU2UoaSk7ZnVuY3Rpb24gZyh0KXt2YXIgbj1yLGk9YTtyZXR1cm4gcj1hPW8sZj10LHM9ZS5hcHBseShpLG4pfWZ1bmN0aW9uIHYoZSl7dmFyIG49ZS11O3JldHVybiB1PT09b3x8bj49dHx8bjwwfHxwJiZlLWY+PWx9ZnVuY3Rpb24gbSgpe3ZhciBlPU9hKCk7aWYodihlKSlyZXR1cm4gQyhlKTtjPVNpKG0sZnVuY3Rpb24oZSl7dmFyIG49dC0oZS11KTtyZXR1cm4gcD92bihuLGwtKGUtZikpOm59KGUpKX1mdW5jdGlvbiBDKGUpe3JldHVybiBjPW8saCYmcj9nKGUpOihyPWE9byxzKX1mdW5jdGlvbiB5KCl7dmFyIGU9T2EoKSxuPXYoZSk7aWYocj1hcmd1bWVudHMsYT10aGlzLHU9ZSxuKXtpZihjPT09bylyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGY9ZSxjPVNpKG0sdCksZD9nKGUpOnN9KHUpO2lmKHApcmV0dXJuIHlvKGMpLGM9U2kobSx0KSxnKHUpfXJldHVybiBjPT09byYmKGM9U2kobSx0KSksc31yZXR1cm4gdD1obCh0KXx8MCxKYShuKSYmKGQ9ISFuLmxlYWRpbmcsbD0ocD1cIm1heFdhaXRcImluIG4pP2duKGhsKG4ubWF4V2FpdCl8fDAsdCk6bCxoPVwidHJhaWxpbmdcImluIG4/ISFuLnRyYWlsaW5nOmgpLHkuY2FuY2VsPWZ1bmN0aW9uKCl7YyE9PW8mJnlvKGMpLGY9MCxyPXU9YT1jPW99LHkuZmx1c2g9ZnVuY3Rpb24oKXtyZXR1cm4gYz09PW8/czpDKE9hKCkpfSx5fXZhciBrYT16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbHIoZSwxLHQpfSkpLFJhPXpyKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGxyKGUsaGwodCl8fDAsbil9KSk7ZnVuY3Rpb24gUGEoZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlfHxudWxsIT10JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBTZShpKTt2YXIgbj1mdW5jdGlvbigpe3ZhciByPWFyZ3VtZW50cyxvPXQ/dC5hcHBseSh0aGlzLHIpOnJbMF0saT1uLmNhY2hlO2lmKGkuaGFzKG8pKXJldHVybiBpLmdldChvKTt2YXIgYT1lLmFwcGx5KHRoaXMscik7cmV0dXJuIG4uY2FjaGU9aS5zZXQobyxhKXx8aSxhfTtyZXR1cm4gbi5jYWNoZT1uZXcoUGEuQ2FjaGV8fFVuKSxufWZ1bmN0aW9uIElhKGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFNlKGkpO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cztzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4hZS5jYWxsKHRoaXMpO2Nhc2UgMTpyZXR1cm4hZS5jYWxsKHRoaXMsdFswXSk7Y2FzZSAyOnJldHVybiFlLmNhbGwodGhpcyx0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4hZS5jYWxsKHRoaXMsdFswXSx0WzFdLHRbMl0pfXJldHVybiFlLmFwcGx5KHRoaXMsdCl9fVBhLkNhY2hlPVVuO3ZhciBBYT1tbygoZnVuY3Rpb24oZSx0KXt2YXIgbj0odD0xPT10Lmxlbmd0aCYmTmEodFswXSk/UnQodFswXSxZdChpaSgpKSk6UnQoaHIodCwxKSxZdChpaSgpKSkpLmxlbmd0aDtyZXR1cm4genIoKGZ1bmN0aW9uKHIpe2Zvcih2YXIgbz0tMSxpPXZuKHIubGVuZ3RoLG4pOysrbzxpOylyW29dPXRbb10uY2FsbCh0aGlzLHJbb10pO3JldHVybiBfdChlLHRoaXMscil9KSl9KSksVGE9enIoKGZ1bmN0aW9uKGUsdCl7dmFyIG49bG4odCxvaShUYSkpO3JldHVybiBxbyhlLHMsbyx0LG4pfSkpLEhhPXpyKChmdW5jdGlvbihlLHQpe3ZhciBuPWxuKHQsb2koSGEpKTtyZXR1cm4gcW8oZSw2NCxvLHQsbil9KSksQmE9UW8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHFvKGUsMjU2LG8sbyxvLHQpfSkpO2Z1bmN0aW9uIFZhKGUsdCl7cmV0dXJuIGU9PT10fHxlIT1lJiZ0IT10fXZhciBEYT1GbyhfciksWmE9Rm8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+PXR9KSksJGE9anIoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9qcjpmdW5jdGlvbihlKXtyZXR1cm4gUWEoZSkmJkllLmNhbGwoZSxcImNhbGxlZVwiKSYmIXplLmNhbGwoZSxcImNhbGxlZVwiKX0sTmE9ci5pc0FycmF5LEZhPW10P1l0KG10KTpmdW5jdGlvbihlKXtyZXR1cm4gUWEoZSkmJnhyKGUpPT1SfTtmdW5jdGlvbiBVYShlKXtyZXR1cm4gbnVsbCE9ZSYmWGEoZS5sZW5ndGgpJiYhWWEoZSl9ZnVuY3Rpb24gV2EoZSl7cmV0dXJuIFFhKGUpJiZVYShlKX12YXIgemE9dnR8fGhzLEdhPUN0P1l0KEN0KTpmdW5jdGlvbihlKXtyZXR1cm4gUWEoZSkmJnhyKGUpPT1DfTtmdW5jdGlvbiBxYShlKXtpZighUWEoZSkpcmV0dXJuITE7dmFyIHQ9eHIoZSk7cmV0dXJuIHQ9PXl8fFwiW29iamVjdCBET01FeGNlcHRpb25dXCI9PXR8fFwic3RyaW5nXCI9PXR5cGVvZiBlLm1lc3NhZ2UmJlwic3RyaW5nXCI9PXR5cGVvZiBlLm5hbWUmJiFubChlKX1mdW5jdGlvbiBZYShlKXtpZighSmEoZSkpcmV0dXJuITE7dmFyIHQ9eHIoZSk7cmV0dXJuIHQ9PXd8fHQ9PWJ8fFwiW29iamVjdCBBc3luY0Z1bmN0aW9uXVwiPT10fHxcIltvYmplY3QgUHJveHldXCI9PXR9ZnVuY3Rpb24gS2EoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJmU9PWRsKGUpfWZ1bmN0aW9uIFhhKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPi0xJiZlJTE9PTAmJmU8PWZ9ZnVuY3Rpb24gSmEoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIG51bGwhPWUmJihcIm9iamVjdFwiPT10fHxcImZ1bmN0aW9uXCI9PXQpfWZ1bmN0aW9uIFFhKGUpe3JldHVybiBudWxsIT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZX12YXIgZWw9eXQ/WXQoeXQpOmZ1bmN0aW9uKGUpe3JldHVybiBRYShlKSYmZmkoZSk9PXh9O2Z1bmN0aW9uIHRsKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlfHxRYShlKSYmeHIoZSk9PV99ZnVuY3Rpb24gbmwoZSl7aWYoIVFhKGUpfHx4cihlKSE9TylyZXR1cm4hMTt2YXIgdD1VZShlKTtpZihudWxsPT09dClyZXR1cm4hMDt2YXIgbj1JZS5jYWxsKHQsXCJjb25zdHJ1Y3RvclwiKSYmdC5jb25zdHJ1Y3RvcjtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiZuIGluc3RhbmNlb2YgbiYmUGUuY2FsbChuKT09QmV9dmFyIHJsPXd0P1l0KHd0KTpmdW5jdGlvbihlKXtyZXR1cm4gUWEoZSkmJnhyKGUpPT1FfSxvbD1idD9ZdChidCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFhKGUpJiZmaShlKT09U307ZnVuY3Rpb24gaWwoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fCFOYShlKSYmUWEoZSkmJnhyKGUpPT1qfWZ1bmN0aW9uIGFsKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfHxRYShlKSYmeHIoZSk9PU19dmFyIGxsPXh0P1l0KHh0KTpmdW5jdGlvbihlKXtyZXR1cm4gUWEoZSkmJlhhKGUubGVuZ3RoKSYmISFvdFt4cihlKV19LHNsPUZvKEFyKSxjbD1GbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTw9dH0pKTtmdW5jdGlvbiB1bChlKXtpZighZSlyZXR1cm5bXTtpZihVYShlKSlyZXR1cm4gaWwoZSk/dW4oZSk6RW8oZSk7aWYoWWUmJmVbWWVdKXJldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQsbj1bXTshKHQ9ZS5uZXh0KCkpLmRvbmU7KW4ucHVzaCh0LnZhbHVlKTtyZXR1cm4gbn0oZVtZZV0oKSk7dmFyIHQ9ZmkoZSk7cmV0dXJuKHQ9PXg/b246dD09Uz9zbjpWbCkoZSl9ZnVuY3Rpb24gZmwoZSl7cmV0dXJuIGU/KGU9aGwoZSkpPT09dXx8ZT09PS0xLzA/MTc5NzY5MzEzNDg2MjMxNTdlMjkyKihlPDA/LTE6MSk6ZT09ZT9lOjA6MD09PWU/ZTowfWZ1bmN0aW9uIGRsKGUpe3ZhciB0PWZsKGUpLG49dCUxO3JldHVybiB0PT10P24/dC1uOnQ6MH1mdW5jdGlvbiBwbChlKXtyZXR1cm4gZT9vcihkbChlKSwwLHApOjB9ZnVuY3Rpb24gaGwoZSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoYWwoZSkpcmV0dXJuIGQ7aWYoSmEoZSkpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGUudmFsdWVPZj9lLnZhbHVlT2YoKTplO2U9SmEodCk/dCtcIlwiOnR9aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuIDA9PT1lP2U6K2U7ZT1xdChlKTt2YXIgbj1oZS50ZXN0KGUpO3JldHVybiBufHx2ZS50ZXN0KGUpP3N0KGUuc2xpY2UoMiksbj8yOjgpOnBlLnRlc3QoZSk/ZDorZX1mdW5jdGlvbiBnbChlKXtyZXR1cm4gU28oZSxrbChlKSl9ZnVuY3Rpb24gdmwoZSl7cmV0dXJuIG51bGw9PWU/XCJcIjppbyhlKX12YXIgbWw9TW8oKGZ1bmN0aW9uKGUsdCl7aWYod2kodCl8fFVhKHQpKVNvKHQsTWwodCksZSk7ZWxzZSBmb3IodmFyIG4gaW4gdClJZS5jYWxsKHQsbikmJkpuKGUsbix0W25dKX0pKSxDbD1NbygoZnVuY3Rpb24oZSx0KXtTbyh0LGtsKHQpLGUpfSkpLHlsPU1vKChmdW5jdGlvbihlLHQsbixyKXtTbyh0LGtsKHQpLGUscil9KSksd2w9TW8oKGZ1bmN0aW9uKGUsdCxuLHIpe1NvKHQsTWwodCksZSxyKX0pKSxibD1RbyhycikseGw9enIoKGZ1bmN0aW9uKGUsdCl7ZT1PZShlKTt2YXIgbj0tMSxyPXQubGVuZ3RoLGk9cj4yP3RbMl06bztmb3IoaSYmdmkodFswXSx0WzFdLGkpJiYocj0xKTsrK248cjspZm9yKHZhciBhPXRbbl0sbD1rbChhKSxzPS0xLGM9bC5sZW5ndGg7KytzPGM7KXt2YXIgdT1sW3NdLGY9ZVt1XTsoZj09PW98fFZhKGYsa2VbdV0pJiYhSWUuY2FsbChlLHUpKSYmKGVbdV09YVt1XSl9cmV0dXJuIGV9KSksX2w9enIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnB1c2gobyxLbyksX3QoUGwsbyxlKX0pKTtmdW5jdGlvbiBPbChlLHQsbil7dmFyIHI9bnVsbD09ZT9vOndyKGUsdCk7cmV0dXJuIHI9PT1vP246cn1mdW5jdGlvbiBMbChlLHQpe3JldHVybiBudWxsIT1lJiZkaShlLHQsTHIpfXZhciBFbD1WbygoZnVuY3Rpb24oZSx0LG4pe251bGwhPXQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQudG9TdHJpbmcmJih0PUhlLmNhbGwodCkpLGVbdF09bn0pLEpsKHRzKSksU2w9Vm8oKGZ1bmN0aW9uKGUsdCxuKXtudWxsIT10JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LnRvU3RyaW5nJiYodD1IZS5jYWxsKHQpKSxJZS5jYWxsKGUsdCk/ZVt0XS5wdXNoKG4pOmVbdF09W25dfSksaWkpLGpsPXpyKFNyKTtmdW5jdGlvbiBNbChlKXtyZXR1cm4gVWEoZSk/R24oZSk6SXIoZSl9ZnVuY3Rpb24ga2woZSl7cmV0dXJuIFVhKGUpP0duKGUsITApOmZ1bmN0aW9uKGUpe2lmKCFKYShlKSlyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9W107aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gT2UoZSkpdC5wdXNoKG4pO3JldHVybiB0fShlKTt2YXIgdD13aShlKSxuPVtdO2Zvcih2YXIgciBpbiBlKShcImNvbnN0cnVjdG9yXCIhPXJ8fCF0JiZJZS5jYWxsKGUscikpJiZuLnB1c2gocik7cmV0dXJuIG59KGUpfXZhciBSbD1NbygoZnVuY3Rpb24oZSx0LG4pe1ZyKGUsdCxuKX0pKSxQbD1NbygoZnVuY3Rpb24oZSx0LG4scil7VnIoZSx0LG4scil9KSksSWw9UW8oKGZ1bmN0aW9uKGUsdCl7dmFyIG49e307aWYobnVsbD09ZSlyZXR1cm4gbjt2YXIgcj0hMTt0PVJ0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiB0PXZvKHQsZSkscnx8KHI9dC5sZW5ndGg+MSksdH0pKSxTbyhlLHRpKGUpLG4pLHImJihuPWlyKG4sNyxYbykpO2Zvcih2YXIgbz10Lmxlbmd0aDtvLS07KWxvKG4sdFtvXSk7cmV0dXJuIG59KSksQWw9UW8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/e306ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJHIoZSx0LChmdW5jdGlvbih0LG4pe3JldHVybiBMbChlLG4pfSkpfShlLHQpfSkpO2Z1bmN0aW9uIFRsKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbj1SdCh0aShlKSwoZnVuY3Rpb24oZSl7cmV0dXJuW2VdfSkpO3JldHVybiB0PWlpKHQpLCRyKGUsbiwoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG5bMF0pfSkpfXZhciBIbD1HbyhNbCksQmw9R28oa2wpO2Z1bmN0aW9uIFZsKGUpe3JldHVybiBudWxsPT1lP1tdOkt0KGUsTWwoZSkpfXZhciBEbD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXQudG9Mb3dlckNhc2UoKSxlKyhuP1psKHQpOnQpfSkpO2Z1bmN0aW9uIFpsKGUpe3JldHVybiBxbCh2bChlKS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiAkbChlKXtyZXR1cm4oZT12bChlKSkmJmUucmVwbGFjZShDZSxlbikucmVwbGFjZShYZSxcIlwiKX12YXIgTmw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIi1cIjpcIlwiKSt0LnRvTG93ZXJDYXNlKCl9KSksRmw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIiBcIjpcIlwiKSt0LnRvTG93ZXJDYXNlKCl9KSksVWw9UG8oXCJ0b0xvd2VyQ2FzZVwiKSxXbD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiX1wiOlwiXCIpK3QudG9Mb3dlckNhc2UoKX0pKSx6bD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiIFwiOlwiXCIpK3FsKHQpfSkpLEdsPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKG4/XCIgXCI6XCJcIikrdC50b1VwcGVyQ2FzZSgpfSkpLHFsPVBvKFwidG9VcHBlckNhc2VcIik7ZnVuY3Rpb24gWWwoZSx0LG4pe3JldHVybiBlPXZsKGUpLCh0PW4/bzp0KT09PW8/ZnVuY3Rpb24oZSl7cmV0dXJuIHR0LnRlc3QoZSl9KGUpP2Z1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKFFlKXx8W119KGUpOmZ1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKHNlKXx8W119KGUpOmUubWF0Y2godCl8fFtdfXZhciBLbD16cigoZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIF90KGUsbyx0KX1jYXRjaChlKXtyZXR1cm4gcWEoZSk/ZTpuZXcgYmUoZSl9fSkpLFhsPVFvKChmdW5jdGlvbihlLHQpe3JldHVybiBMdCh0LChmdW5jdGlvbih0KXt0PVRpKHQpLG5yKGUsdCxTYShlW3RdLGUpKX0pKSxlfSkpO2Z1bmN0aW9uIEpsKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgUWw9SG8oKSxlcz1IbyghMCk7ZnVuY3Rpb24gdHMoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gbnMoZSl7cmV0dXJuIFByKFwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTppcihlLDEpKX12YXIgcnM9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBTcihuLGUsdCl9fSkpLG9zPXpyKChmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gU3IoZSxuLHQpfX0pKTtmdW5jdGlvbiBpcyhlLHQsbil7dmFyIHI9TWwodCksbz15cih0LHIpO251bGwhPW58fEphKHQpJiYoby5sZW5ndGh8fCFyLmxlbmd0aCl8fChuPXQsdD1lLGU9dGhpcyxvPXlyKHQsTWwodCkpKTt2YXIgaT0hKEphKG4pJiZcImNoYWluXCJpbiBuJiYhbi5jaGFpbiksYT1ZYShlKTtyZXR1cm4gTHQobywoZnVuY3Rpb24obil7dmFyIHI9dFtuXTtlW25dPXIsYSYmKGUucHJvdG90eXBlW25dPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX2NoYWluX187aWYoaXx8dCl7dmFyIG49ZSh0aGlzLl9fd3JhcHBlZF9fKTtyZXR1cm4obi5fX2FjdGlvbnNfXz1Fbyh0aGlzLl9fYWN0aW9uc19fKSkucHVzaCh7ZnVuYzpyLGFyZ3M6YXJndW1lbnRzLHRoaXNBcmc6ZX0pLG4uX19jaGFpbl9fPXQsbn1yZXR1cm4gci5hcHBseShlLFB0KFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfSl9KSksZX1mdW5jdGlvbiBhcygpe312YXIgbHM9Wm8oUnQpLHNzPVpvKFN0KSxjcz1abyhUdCk7ZnVuY3Rpb24gdXMoZSl7cmV0dXJuIG1pKGUpP0Z0KFRpKGUpKTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHdyKHQsZSl9fShlKX12YXIgZnM9Tm8oKSxkcz1ObyghMCk7ZnVuY3Rpb24gcHMoKXtyZXR1cm5bXX1mdW5jdGlvbiBocygpe3JldHVybiExfXZhciBncyx2cz1EbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSksMCksbXM9V28oXCJjZWlsXCIpLENzPURvKChmdW5jdGlvbihlLHQpe3JldHVybiBlL3R9KSwxKSx5cz1XbyhcImZsb29yXCIpLHdzPURvKChmdW5jdGlvbihlLHQpe3JldHVybiBlKnR9KSwxKSxicz1XbyhcInJvdW5kXCIpLHhzPURvKChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KSwwKTtyZXR1cm4gQm4uYWZ0ZXI9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBTZShpKTtyZXR1cm4gZT1kbChlKSxmdW5jdGlvbigpe2lmKC0tZTwxKXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LEJuLmFyeT1MYSxCbi5hc3NpZ249bWwsQm4uYXNzaWduSW49Q2wsQm4uYXNzaWduSW5XaXRoPXlsLEJuLmFzc2lnbldpdGg9d2wsQm4uYXQ9YmwsQm4uYmVmb3JlPUVhLEJuLmJpbmQ9U2EsQm4uYmluZEFsbD1YbCxCbi5iaW5kS2V5PWphLEJuLmNhc3RBcnJheT1mdW5jdGlvbigpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltdO3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gTmEoZSk/ZTpbZV19LEJuLmNoYWluPXVhLEJuLmNodW5rPWZ1bmN0aW9uKGUsdCxuKXt0PShuP3ZpKGUsdCxuKTp0PT09byk/MTpnbihkbCh0KSwwKTt2YXIgaT1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIWl8fHQ8MSlyZXR1cm5bXTtmb3IodmFyIGE9MCxsPTAscz1yKGR0KGkvdCkpO2E8aTspc1tsKytdPVFyKGUsYSxhKz10KTtyZXR1cm4gc30sQm4uY29tcGFjdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGgscj0wLG89W107Kyt0PG47KXt2YXIgaT1lW3RdO2kmJihvW3IrK109aSl9cmV0dXJuIG99LEJuLmNvbmNhdD1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg7aWYoIWUpcmV0dXJuW107Zm9yKHZhciB0PXIoZS0xKSxuPWFyZ3VtZW50c1swXSxvPWU7by0tOyl0W28tMV09YXJndW1lbnRzW29dO3JldHVybiBQdChOYShuKT9FbyhuKTpbbl0saHIodCwxKSl9LEJuLmNvbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbD09ZT8wOmUubGVuZ3RoLG49aWkoKTtyZXR1cm4gZT10P1J0KGUsKGZ1bmN0aW9uKGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGVbMV0pdGhyb3cgbmV3IFNlKGkpO3JldHVybltuKGVbMF0pLGVbMV1dfSkpOltdLHpyKChmdW5jdGlvbihuKXtmb3IodmFyIHI9LTE7KytyPHQ7KXt2YXIgbz1lW3JdO2lmKF90KG9bMF0sdGhpcyxuKSlyZXR1cm4gX3Qob1sxXSx0aGlzLG4pfX0pKX0sQm4uY29uZm9ybXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PU1sKGUpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gYXIobixlLHQpfX0oaXIoZSwxKSl9LEJuLmNvbnN0YW50PUpsLEJuLmNvdW50Qnk9cGEsQm4uY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49Vm4oZSk7cmV0dXJuIG51bGw9PXQ/bjp0cihuLHQpfSxCbi5jdXJyeT1mdW5jdGlvbiBlKHQsbixyKXt2YXIgaT1xbyh0LDgsbyxvLG8sbyxvLG49cj9vOm4pO3JldHVybiBpLnBsYWNlaG9sZGVyPWUucGxhY2Vob2xkZXIsaX0sQm4uY3VycnlSaWdodD1mdW5jdGlvbiBlKHQsbixyKXt2YXIgaT1xbyh0LDE2LG8sbyxvLG8sbyxuPXI/bzpuKTtyZXR1cm4gaS5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyLGl9LEJuLmRlYm91bmNlPU1hLEJuLmRlZmF1bHRzPXhsLEJuLmRlZmF1bHRzRGVlcD1fbCxCbi5kZWZlcj1rYSxCbi5kZWxheT1SYSxCbi5kaWZmZXJlbmNlPVZpLEJuLmRpZmZlcmVuY2VCeT1EaSxCbi5kaWZmZXJlbmNlV2l0aD1aaSxCbi5kcm9wPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/UXIoZSwodD1ufHx0PT09bz8xOmRsKHQpKTwwPzA6dCxyKTpbXX0sQm4uZHJvcFJpZ2h0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/UXIoZSwwLCh0PXItKHQ9bnx8dD09PW8/MTpkbCh0KSkpPDA/MDp0KTpbXX0sQm4uZHJvcFJpZ2h0V2hpbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/Y28oZSxpaSh0LDMpLCEwLCEwKTpbXX0sQm4uZHJvcFdoaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2NvKGUsaWkodCwzKSwhMCk6W119LEJuLmZpbGw9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiBpPyhuJiZcIm51bWJlclwiIT10eXBlb2YgbiYmdmkoZSx0LG4pJiYobj0wLHI9aSksZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9ZS5sZW5ndGg7Zm9yKChuPWRsKG4pKTwwJiYobj0tbj5pPzA6aStuKSwocj1yPT09b3x8cj5pP2k6ZGwocikpPDAmJihyKz1pKSxyPW4+cj8wOnBsKHIpO248cjspZVtuKytdPXQ7cmV0dXJuIGV9KGUsdCxuLHIpKTpbXX0sQm4uZmlsdGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKE5hKGUpP2p0OnByKShlLGlpKHQsMykpfSxCbi5mbGF0TWFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGhyKGJhKGUsdCksMSl9LEJuLmZsYXRNYXBEZWVwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGhyKGJhKGUsdCksdSl9LEJuLmZsYXRNYXBEZXB0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj09PW8/MTpkbChuKSxocihiYShlLHQpLG4pfSxCbi5mbGF0dGVuPUZpLEJuLmZsYXR0ZW5EZWVwPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlLmxlbmd0aD9ocihlLHUpOltdfSxCbi5mbGF0dGVuRGVwdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbCE9ZSYmZS5sZW5ndGg/aHIoZSx0PXQ9PT1vPzE6ZGwodCkpOltdfSxCbi5mbGlwPWZ1bmN0aW9uKGUpe3JldHVybiBxbyhlLDUxMil9LEJuLmZsb3c9UWwsQm4uZmxvd1JpZ2h0PWVzLEJuLmZyb21QYWlycz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGgscj17fTsrK3Q8bjspe3ZhciBvPWVbdF07cltvWzBdXT1vWzFdfXJldHVybiByfSxCbi5mdW5jdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/W106eXIoZSxNbChlKSl9LEJuLmZ1bmN0aW9uc0luPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOnlyKGUsa2woZSkpfSxCbi5ncm91cEJ5PUNhLEJuLmluaXRpYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJmUubGVuZ3RoP1FyKGUsMCwtMSk6W119LEJuLmludGVyc2VjdGlvbj1XaSxCbi5pbnRlcnNlY3Rpb25CeT16aSxCbi5pbnRlcnNlY3Rpb25XaXRoPUdpLEJuLmludmVydD1FbCxCbi5pbnZlcnRCeT1TbCxCbi5pbnZva2VNYXA9eWEsQm4uaXRlcmF0ZWU9bnMsQm4ua2V5Qnk9d2EsQm4ua2V5cz1NbCxCbi5rZXlzSW49a2wsQm4ubWFwPWJhLEJuLm1hcEtleXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtyZXR1cm4gdD1paSh0LDMpLG1yKGUsKGZ1bmN0aW9uKGUscixvKXtucihuLHQoZSxyLG8pLGUpfSkpLG59LEJuLm1hcFZhbHVlcz1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O3JldHVybiB0PWlpKHQsMyksbXIoZSwoZnVuY3Rpb24oZSxyLG8pe25yKG4scix0KGUscixvKSl9KSksbn0sQm4ubWF0Y2hlcz1mdW5jdGlvbihlKXtyZXR1cm4gSHIoaXIoZSwxKSl9LEJuLm1hdGNoZXNQcm9wZXJ0eT1mdW5jdGlvbihlLHQpe3JldHVybiBCcihlLGlyKHQsMSkpfSxCbi5tZW1vaXplPVBhLEJuLm1lcmdlPVJsLEJuLm1lcmdlV2l0aD1QbCxCbi5tZXRob2Q9cnMsQm4ubWV0aG9kT2Y9b3MsQm4ubWl4aW49aXMsQm4ubmVnYXRlPUlhLEJuLm50aEFyZz1mdW5jdGlvbihlKXtyZXR1cm4gZT1kbChlKSx6cigoZnVuY3Rpb24odCl7cmV0dXJuIERyKHQsZSl9KSl9LEJuLm9taXQ9SWwsQm4ub21pdEJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFRsKGUsSWEoaWkodCkpKX0sQm4ub25jZT1mdW5jdGlvbihlKXtyZXR1cm4gRWEoMixlKX0sQm4ub3JkZXJCeT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbnVsbD09ZT9bXTooTmEodCl8fCh0PW51bGw9PXQ/W106W3RdKSxOYShuPXI/bzpuKXx8KG49bnVsbD09bj9bXTpbbl0pLFpyKGUsdCxuKSl9LEJuLm92ZXI9bHMsQm4ub3ZlckFyZ3M9QWEsQm4ub3ZlckV2ZXJ5PXNzLEJuLm92ZXJTb21lPWNzLEJuLnBhcnRpYWw9VGEsQm4ucGFydGlhbFJpZ2h0PUhhLEJuLnBhcnRpdGlvbj14YSxCbi5waWNrPUFsLEJuLnBpY2tCeT1UbCxCbi5wcm9wZXJ0eT11cyxCbi5wcm9wZXJ0eU9mPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09ZT9vOndyKGUsdCl9fSxCbi5wdWxsPVlpLEJuLnB1bGxBbGw9S2ksQm4ucHVsbEFsbEJ5PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSYmZS5sZW5ndGgmJnQmJnQubGVuZ3RoP05yKGUsdCxpaShuLDIpKTplfSxCbi5wdWxsQWxsV2l0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJmUubGVuZ3RoJiZ0JiZ0Lmxlbmd0aD9OcihlLHQsbyxuKTplfSxCbi5wdWxsQXQ9WGksQm4ucmFuZ2U9ZnMsQm4ucmFuZ2VSaWdodD1kcyxCbi5yZWFyZz1CYSxCbi5yZWplY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oTmEoZSk/anQ6cHIpKGUsSWEoaWkodCwzKSkpfSxCbi5yZW1vdmU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtpZighZXx8IWUubGVuZ3RoKXJldHVybiBuO3ZhciByPS0xLG89W10saT1lLmxlbmd0aDtmb3IodD1paSh0LDMpOysrcjxpOyl7dmFyIGE9ZVtyXTt0KGEscixlKSYmKG4ucHVzaChhKSxvLnB1c2gocikpfXJldHVybiBGcihlLG8pLG59LEJuLnJlc3Q9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTtyZXR1cm4genIoZSx0PXQ9PT1vP3Q6ZGwodCkpfSxCbi5yZXZlcnNlPUppLEJuLnNhbXBsZVNpemU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PShuP3ZpKGUsdCxuKTp0PT09byk/MTpkbCh0KSwoTmEoZSk/WW46cXIpKGUsdCl9LEJuLnNldD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PWU/ZTpZcihlLHQsbil9LEJuLnNldFdpdGg9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHI9XCJmdW5jdGlvblwiPT10eXBlb2Ygcj9yOm8sbnVsbD09ZT9lOllyKGUsdCxuLHIpfSxCbi5zaHVmZmxlPWZ1bmN0aW9uKGUpe3JldHVybihOYShlKT9LbjpKcikoZSl9LEJuLnNsaWNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/KG4mJlwibnVtYmVyXCIhPXR5cGVvZiBuJiZ2aShlLHQsbik/KHQ9MCxuPXIpOih0PW51bGw9PXQ/MDpkbCh0KSxuPW49PT1vP3I6ZGwobikpLFFyKGUsdCxuKSk6W119LEJuLnNvcnRCeT1fYSxCbi5zb3J0ZWRVbmlxPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD9ybyhlKTpbXX0sQm4uc29ydGVkVW5pcUJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP3JvKGUsaWkodCwyKSk6W119LEJuLnNwbGl0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbiYmXCJudW1iZXJcIiE9dHlwZW9mIG4mJnZpKGUsdCxuKSYmKHQ9bj1vKSwobj1uPT09bz9wOm4+Pj4wKT8oZT12bChlKSkmJihcInN0cmluZ1wiPT10eXBlb2YgdHx8bnVsbCE9dCYmIXJsKHQpKSYmISh0PWlvKHQpKSYmcm4oZSk/Q28odW4oZSksMCxuKTplLnNwbGl0KHQsbik6W119LEJuLnNwcmVhZD1mdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFNlKGkpO3JldHVybiB0PW51bGw9PXQ/MDpnbihkbCh0KSwwKSx6cigoZnVuY3Rpb24obil7dmFyIHI9blt0XSxvPUNvKG4sMCx0KTtyZXR1cm4gciYmUHQobyxyKSxfdChlLHRoaXMsbyl9KSl9LEJuLnRhaWw9ZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiB0P1FyKGUsMSx0KTpbXX0sQm4udGFrZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJmUubGVuZ3RoP1FyKGUsMCwodD1ufHx0PT09bz8xOmRsKHQpKTwwPzA6dCk6W119LEJuLnRha2VSaWdodD1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiByP1FyKGUsKHQ9ci0odD1ufHx0PT09bz8xOmRsKHQpKSk8MD8wOnQscik6W119LEJuLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2NvKGUsaWkodCwzKSwhMSwhMCk6W119LEJuLnRha2VXaGlsZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9jbyhlLGlpKHQsMykpOltdfSxCbi50YXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdChlKSxlfSxCbi50aHJvdHRsZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ITAsbz0hMDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTtyZXR1cm4gSmEobikmJihyPVwibGVhZGluZ1wiaW4gbj8hIW4ubGVhZGluZzpyLG89XCJ0cmFpbGluZ1wiaW4gbj8hIW4udHJhaWxpbmc6byksTWEoZSx0LHtsZWFkaW5nOnIsbWF4V2FpdDp0LHRyYWlsaW5nOm99KX0sQm4udGhydT1mYSxCbi50b0FycmF5PXVsLEJuLnRvUGFpcnM9SGwsQm4udG9QYWlyc0luPUJsLEJuLnRvUGF0aD1mdW5jdGlvbihlKXtyZXR1cm4gTmEoZSk/UnQoZSxUaSk6YWwoZSk/W2VdOkVvKEFpKHZsKGUpKSl9LEJuLnRvUGxhaW5PYmplY3Q9Z2wsQm4udHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1OYShlKSxvPXJ8fHphKGUpfHxsbChlKTtpZih0PWlpKHQsNCksbnVsbD09bil7dmFyIGk9ZSYmZS5jb25zdHJ1Y3RvcjtuPW8/cj9uZXcgaTpbXTpKYShlKSYmWWEoaSk/Vm4oVWUoZSkpOnt9fXJldHVybihvP0x0Om1yKShlLChmdW5jdGlvbihlLHIsbyl7cmV0dXJuIHQobixlLHIsbyl9KSksbn0sQm4udW5hcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIExhKGUsMSl9LEJuLnVuaW9uPVFpLEJuLnVuaW9uQnk9ZWEsQm4udW5pb25XaXRoPXRhLEJuLnVuaXE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2FvKGUpOltdfSxCbi51bmlxQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/YW8oZSxpaSh0LDIpKTpbXX0sQm4udW5pcVdpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byxlJiZlLmxlbmd0aD9hbyhlLG8sdCk6W119LEJuLnVuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWV8fGxvKGUsdCl9LEJuLnVuemlwPW5hLEJuLnVuemlwV2l0aD1yYSxCbi51cGRhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT1lP2U6c28oZSx0LGdvKG4pKX0sQm4udXBkYXRlV2l0aD1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiByP3I6byxudWxsPT1lP2U6c28oZSx0LGdvKG4pLHIpfSxCbi52YWx1ZXM9VmwsQm4udmFsdWVzSW49ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/W106S3QoZSxrbChlKSl9LEJuLndpdGhvdXQ9b2EsQm4ud29yZHM9WWwsQm4ud3JhcD1mdW5jdGlvbihlLHQpe3JldHVybiBUYShnbyh0KSxlKX0sQm4ueG9yPWlhLEJuLnhvckJ5PWFhLEJuLnhvcldpdGg9bGEsQm4uemlwPXNhLEJuLnppcE9iamVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBwbyhlfHxbXSx0fHxbXSxKbil9LEJuLnppcE9iamVjdERlZXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcG8oZXx8W10sdHx8W10sWXIpfSxCbi56aXBXaXRoPWNhLEJuLmVudHJpZXM9SGwsQm4uZW50cmllc0luPUJsLEJuLmV4dGVuZD1DbCxCbi5leHRlbmRXaXRoPXlsLGlzKEJuLEJuKSxCbi5hZGQ9dnMsQm4uYXR0ZW1wdD1LbCxCbi5jYW1lbENhc2U9RGwsQm4uY2FwaXRhbGl6ZT1abCxCbi5jZWlsPW1zLEJuLmNsYW1wPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj09PW8mJihuPXQsdD1vKSxuIT09byYmKG49KG49aGwobikpPT1uP246MCksdCE9PW8mJih0PSh0PWhsKHQpKT09dD90OjApLG9yKGhsKGUpLHQsbil9LEJuLmNsb25lPWZ1bmN0aW9uKGUpe3JldHVybiBpcihlLDQpfSxCbi5jbG9uZURlZXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGlyKGUsNSl9LEJuLmNsb25lRGVlcFdpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaXIoZSw1LHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8pfSxCbi5jbG9uZVdpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaXIoZSw0LHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8pfSxCbi5jb25mb3Jtc1RvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PXR8fGFyKGUsdCxNbCh0KSl9LEJuLmRlYnVycj0kbCxCbi5kZWZhdWx0VG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZXx8ZSE9ZT90OmV9LEJuLmRpdmlkZT1DcyxCbi5lbmRzV2l0aD1mdW5jdGlvbihlLHQsbil7ZT12bChlKSx0PWlvKHQpO3ZhciByPWUubGVuZ3RoLGk9bj1uPT09bz9yOm9yKGRsKG4pLDAscik7cmV0dXJuKG4tPXQubGVuZ3RoKT49MCYmZS5zbGljZShuLGkpPT10fSxCbi5lcT1WYSxCbi5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dmwoZSkpJiZxLnRlc3QoZSk/ZS5yZXBsYWNlKHosdG4pOmV9LEJuLmVzY2FwZVJlZ0V4cD1mdW5jdGlvbihlKXtyZXR1cm4oZT12bChlKSkmJm5lLnRlc3QoZSk/ZS5yZXBsYWNlKHRlLFwiXFxcXCQmXCIpOmV9LEJuLmV2ZXJ5PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1OYShlKT9TdDpmcjtyZXR1cm4gbiYmdmkoZSx0LG4pJiYodD1vKSxyKGUsaWkodCwzKSl9LEJuLmZpbmQ9aGEsQm4uZmluZEluZGV4PSRpLEJuLmZpbmRLZXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQnQoZSxpaSh0LDMpLG1yKX0sQm4uZmluZExhc3Q9Z2EsQm4uZmluZExhc3RJbmRleD1OaSxCbi5maW5kTGFzdEtleT1mdW5jdGlvbihlLHQpe3JldHVybiBCdChlLGlpKHQsMyksQ3IpfSxCbi5mbG9vcj15cyxCbi5mb3JFYWNoPXZhLEJuLmZvckVhY2hSaWdodD1tYSxCbi5mb3JJbj1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP2U6Z3IoZSxpaSh0LDMpLGtsKX0sQm4uZm9ySW5SaWdodD1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP2U6dnIoZSxpaSh0LDMpLGtsKX0sQm4uZm9yT3duPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJm1yKGUsaWkodCwzKSl9LEJuLmZvck93blJpZ2h0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJkNyKGUsaWkodCwzKSl9LEJuLmdldD1PbCxCbi5ndD1EYSxCbi5ndGU9WmEsQm4uaGFzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGwhPWUmJmRpKGUsdCxPcil9LEJuLmhhc0luPUxsLEJuLmhlYWQ9VWksQm4uaWRlbnRpdHk9dHMsQm4uaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LG4scil7ZT1VYShlKT9lOlZsKGUpLG49biYmIXI/ZGwobik6MDt2YXIgbz1lLmxlbmd0aDtyZXR1cm4gbjwwJiYobj1nbihvK24sMCkpLGlsKGUpP248PW8mJmUuaW5kZXhPZih0LG4pPi0xOiEhbyYmRHQoZSx0LG4pPi0xfSxCbi5pbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIG89bnVsbD09bj8wOmRsKG4pO3JldHVybiBvPDAmJihvPWduKHIrbywwKSksRHQoZSx0LG8pfSxCbi5pblJhbmdlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD1mbCh0KSxuPT09bz8obj10LHQ9MCk6bj1mbChuKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU+PXZuKHQsbikmJmU8Z24odCxuKX0oZT1obChlKSx0LG4pfSxCbi5pbnZva2U9amwsQm4uaXNBcmd1bWVudHM9JGEsQm4uaXNBcnJheT1OYSxCbi5pc0FycmF5QnVmZmVyPUZhLEJuLmlzQXJyYXlMaWtlPVVhLEJuLmlzQXJyYXlMaWtlT2JqZWN0PVdhLEJuLmlzQm9vbGVhbj1mdW5jdGlvbihlKXtyZXR1cm4hMD09PWV8fCExPT09ZXx8UWEoZSkmJnhyKGUpPT1tfSxCbi5pc0J1ZmZlcj16YSxCbi5pc0RhdGU9R2EsQm4uaXNFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBRYShlKSYmMT09PWUubm9kZVR5cGUmJiFubChlKX0sQm4uaXNFbXB0eT1mdW5jdGlvbihlKXtpZihudWxsPT1lKXJldHVybiEwO2lmKFVhKGUpJiYoTmEoZSl8fFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnNwbGljZXx8emEoZSl8fGxsKGUpfHwkYShlKSkpcmV0dXJuIWUubGVuZ3RoO3ZhciB0PWZpKGUpO2lmKHQ9PXh8fHQ9PVMpcmV0dXJuIWUuc2l6ZTtpZih3aShlKSlyZXR1cm4hSXIoZSkubGVuZ3RoO2Zvcih2YXIgbiBpbiBlKWlmKEllLmNhbGwoZSxuKSlyZXR1cm4hMTtyZXR1cm4hMH0sQm4uaXNFcXVhbD1mdW5jdGlvbihlLHQpe3JldHVybiBNcihlLHQpfSxCbi5pc0VxdWFsV2l0aD1mdW5jdGlvbihlLHQsbil7dmFyIHI9KG49XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOm8pP24oZSx0KTpvO3JldHVybiByPT09bz9NcihlLHQsbyxuKTohIXJ9LEJuLmlzRXJyb3I9cWEsQm4uaXNGaW5pdGU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJkh0KGUpfSxCbi5pc0Z1bmN0aW9uPVlhLEJuLmlzSW50ZWdlcj1LYSxCbi5pc0xlbmd0aD1YYSxCbi5pc01hcD1lbCxCbi5pc01hdGNoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10fHxrcihlLHQsbGkodCkpfSxCbi5pc01hdGNoV2l0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOm8sa3IoZSx0LGxpKHQpLG4pfSxCbi5pc05hTj1mdW5jdGlvbihlKXtyZXR1cm4gdGwoZSkmJmUhPStlfSxCbi5pc05hdGl2ZT1mdW5jdGlvbihlKXtpZih5aShlKSl0aHJvdyBuZXcgYmUoXCJVbnN1cHBvcnRlZCBjb3JlLWpzIHVzZS4gVHJ5IGh0dHBzOi8vbnBtcy5pby9zZWFyY2g/cT1wb255ZmlsbC5cIik7cmV0dXJuIFJyKGUpfSxCbi5pc05pbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZX0sQm4uaXNOdWxsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZX0sQm4uaXNOdW1iZXI9dGwsQm4uaXNPYmplY3Q9SmEsQm4uaXNPYmplY3RMaWtlPVFhLEJuLmlzUGxhaW5PYmplY3Q9bmwsQm4uaXNSZWdFeHA9cmwsQm4uaXNTYWZlSW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4gS2EoZSkmJmU+PS05MDA3MTk5MjU0NzQwOTkxJiZlPD1mfSxCbi5pc1NldD1vbCxCbi5pc1N0cmluZz1pbCxCbi5pc1N5bWJvbD1hbCxCbi5pc1R5cGVkQXJyYXk9bGwsQm4uaXNVbmRlZmluZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1vfSxCbi5pc1dlYWtNYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIFFhKGUpJiZmaShlKT09a30sQm4uaXNXZWFrU2V0PWZ1bmN0aW9uKGUpe3JldHVybiBRYShlKSYmXCJbb2JqZWN0IFdlYWtTZXRdXCI9PXhyKGUpfSxCbi5qb2luPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/XCJcIjpVdC5jYWxsKGUsdCl9LEJuLmtlYmFiQ2FzZT1ObCxCbi5sYXN0PXFpLEJuLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIGk9cjtyZXR1cm4gbiE9PW8mJihpPShpPWRsKG4pKTwwP2duKHIraSwwKTp2bihpLHItMSkpLHQ9PXQ/ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uKzE7ci0tOylpZihlW3JdPT09dClyZXR1cm4gcjtyZXR1cm4gcn0oZSx0LGkpOlZ0KGUsJHQsaSwhMCl9LEJuLmxvd2VyQ2FzZT1GbCxCbi5sb3dlckZpcnN0PVVsLEJuLmx0PXNsLEJuLmx0ZT1jbCxCbi5tYXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2RyKGUsdHMsX3IpOm99LEJuLm1heEJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2RyKGUsaWkodCwyKSxfcik6b30sQm4ubWVhbj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoZSx0cyl9LEJuLm1lYW5CeT1mdW5jdGlvbihlLHQpe3JldHVybiBOdChlLGlpKHQsMikpfSxCbi5taW49ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2RyKGUsdHMsQXIpOm99LEJuLm1pbkJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2RyKGUsaWkodCwyKSxBcik6b30sQm4uc3R1YkFycmF5PXBzLEJuLnN0dWJGYWxzZT1ocyxCbi5zdHViT2JqZWN0PWZ1bmN0aW9uKCl7cmV0dXJue319LEJuLnN0dWJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIlwifSxCbi5zdHViVHJ1ZT1mdW5jdGlvbigpe3JldHVybiEwfSxCbi5tdWx0aXBseT13cyxCbi5udGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/RHIoZSxkbCh0KSk6b30sQm4ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBmdC5fPT09dGhpcyYmKGZ0Ll89VmUpLHRoaXN9LEJuLm5vb3A9YXMsQm4ubm93PU9hLEJuLnBhZD1mdW5jdGlvbihlLHQsbil7ZT12bChlKTt2YXIgcj0odD1kbCh0KSk/Y24oZSk6MDtpZighdHx8cj49dClyZXR1cm4gZTt2YXIgbz0odC1yKS8yO3JldHVybiAkbyhwdChvKSxuKStlKyRvKGR0KG8pLG4pfSxCbi5wYWRFbmQ9ZnVuY3Rpb24oZSx0LG4pe2U9dmwoZSk7dmFyIHI9KHQ9ZGwodCkpP2NuKGUpOjA7cmV0dXJuIHQmJnI8dD9lKyRvKHQtcixuKTplfSxCbi5wYWRTdGFydD1mdW5jdGlvbihlLHQsbil7ZT12bChlKTt2YXIgcj0odD1kbCh0KSk/Y24oZSk6MDtyZXR1cm4gdCYmcjx0PyRvKHQtcixuKStlOmV9LEJuLnBhcnNlSW50PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnx8bnVsbD09dD90PTA6dCYmKHQ9K3QpLENuKHZsKGUpLnJlcGxhY2UocmUsXCJcIiksdHx8MCl9LEJuLnJhbmRvbT1mdW5jdGlvbihlLHQsbil7aWYobiYmXCJib29sZWFuXCIhPXR5cGVvZiBuJiZ2aShlLHQsbikmJih0PW49byksbj09PW8mJihcImJvb2xlYW5cIj09dHlwZW9mIHQ/KG49dCx0PW8pOlwiYm9vbGVhblwiPT10eXBlb2YgZSYmKG49ZSxlPW8pKSxlPT09byYmdD09PW8/KGU9MCx0PTEpOihlPWZsKGUpLHQ9PT1vPyh0PWUsZT0wKTp0PWZsKHQpKSxlPnQpe3ZhciByPWU7ZT10LHQ9cn1pZihufHxlJTF8fHQlMSl7dmFyIGk9eW4oKTtyZXR1cm4gdm4oZStpKih0LWUrbHQoXCIxZS1cIisoKGkrXCJcIikubGVuZ3RoLTEpKSksdCl9cmV0dXJuIFVyKGUsdCl9LEJuLnJlZHVjZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmEoZSk/SXQ6V3Qsbz1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIHIoZSxpaSh0LDQpLG4sbyxjcil9LEJuLnJlZHVjZVJpZ2h0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1OYShlKT9BdDpXdCxvPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gcihlLGlpKHQsNCksbixvLHVyKX0sQm4ucmVwZWF0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD0obj92aShlLHQsbik6dD09PW8pPzE6ZGwodCksV3IodmwoZSksdCl9LEJuLnJlcGxhY2U9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMsdD12bChlWzBdKTtyZXR1cm4gZS5sZW5ndGg8Mz90OnQucmVwbGFjZShlWzFdLGVbMl0pfSxCbi5yZXN1bHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPS0xLGk9KHQ9dm8odCxlKSkubGVuZ3RoO2ZvcihpfHwoaT0xLGU9byk7KytyPGk7KXt2YXIgYT1udWxsPT1lP286ZVtUaSh0W3JdKV07YT09PW8mJihyPWksYT1uKSxlPVlhKGEpP2EuY2FsbChlKTphfXJldHVybiBlfSxCbi5yb3VuZD1icyxCbi5ydW5JbkNvbnRleHQ9ZSxCbi5zYW1wbGU9ZnVuY3Rpb24oZSl7cmV0dXJuKE5hKGUpP3FuOkdyKShlKX0sQm4uc2l6ZT1mdW5jdGlvbihlKXtpZihudWxsPT1lKXJldHVybiAwO2lmKFVhKGUpKXJldHVybiBpbChlKT9jbihlKTplLmxlbmd0aDt2YXIgdD1maShlKTtyZXR1cm4gdD09eHx8dD09Uz9lLnNpemU6SXIoZSkubGVuZ3RofSxCbi5zbmFrZUNhc2U9V2wsQm4uc29tZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmEoZSk/VHQ6ZW87cmV0dXJuIG4mJnZpKGUsdCxuKSYmKHQ9bykscihlLGlpKHQsMykpfSxCbi5zb3J0ZWRJbmRleD1mdW5jdGlvbihlLHQpe3JldHVybiB0byhlLHQpfSxCbi5zb3J0ZWRJbmRleEJ5PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbm8oZSx0LGlpKG4sMikpfSxCbi5zb3J0ZWRJbmRleE9mPWZ1bmN0aW9uKGUsdCl7dmFyIG49bnVsbD09ZT8wOmUubGVuZ3RoO2lmKG4pe3ZhciByPXRvKGUsdCk7aWYocjxuJiZWYShlW3JdLHQpKXJldHVybiByfXJldHVybi0xfSxCbi5zb3J0ZWRMYXN0SW5kZXg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdG8oZSx0LCEwKX0sQm4uc29ydGVkTGFzdEluZGV4Qnk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBubyhlLHQsaWkobiwyKSwhMCl9LEJuLnNvcnRlZExhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9ZSYmZS5sZW5ndGgpe3ZhciBuPXRvKGUsdCwhMCktMTtpZihWYShlW25dLHQpKXJldHVybiBufXJldHVybi0xfSxCbi5zdGFydENhc2U9emwsQm4uc3RhcnRzV2l0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9dmwoZSksbj1udWxsPT1uPzA6b3IoZGwobiksMCxlLmxlbmd0aCksdD1pbyh0KSxlLnNsaWNlKG4sbit0Lmxlbmd0aCk9PXR9LEJuLnN1YnRyYWN0PXhzLEJuLnN1bT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/enQoZSx0cyk6MH0sQm4uc3VtQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/enQoZSxpaSh0LDIpKTowfSxCbi50ZW1wbGF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9Qm4udGVtcGxhdGVTZXR0aW5ncztuJiZ2aShlLHQsbikmJih0PW8pLGU9dmwoZSksdD15bCh7fSx0LHIsWW8pO3ZhciBpLGEsbD15bCh7fSx0LmltcG9ydHMsci5pbXBvcnRzLFlvKSxzPU1sKGwpLGM9S3QobCxzKSx1PTAsZj10LmludGVycG9sYXRlfHx5ZSxkPVwiX19wICs9ICdcIixwPUxlKCh0LmVzY2FwZXx8eWUpLnNvdXJjZStcInxcIitmLnNvdXJjZStcInxcIisoZj09PVg/ZmU6eWUpLnNvdXJjZStcInxcIisodC5ldmFsdWF0ZXx8eWUpLnNvdXJjZStcInwkXCIsXCJnXCIpLGg9XCIvLyMgc291cmNlVVJMPVwiKyhJZS5jYWxsKHQsXCJzb3VyY2VVUkxcIik/KHQuc291cmNlVVJMK1wiXCIpLnJlcGxhY2UoL1xccy9nLFwiIFwiKTpcImxvZGFzaC50ZW1wbGF0ZVNvdXJjZXNbXCIrICsrcnQrXCJdXCIpK1wiXFxuXCI7ZS5yZXBsYWNlKHAsKGZ1bmN0aW9uKHQsbixyLG8sbCxzKXtyZXR1cm4gcnx8KHI9byksZCs9ZS5zbGljZSh1LHMpLnJlcGxhY2Uod2Usbm4pLG4mJihpPSEwLGQrPVwiJyArXFxuX19lKFwiK24rXCIpICtcXG4nXCIpLGwmJihhPSEwLGQrPVwiJztcXG5cIitsK1wiO1xcbl9fcCArPSAnXCIpLHImJihkKz1cIicgK1xcbigoX190ID0gKFwiK3IrXCIpKSA9PSBudWxsID8gJycgOiBfX3QpICtcXG4nXCIpLHU9cyt0Lmxlbmd0aCx0fSkpLGQrPVwiJztcXG5cIjt2YXIgZz1JZS5jYWxsKHQsXCJ2YXJpYWJsZVwiKSYmdC52YXJpYWJsZTtpZihnKXtpZihjZS50ZXN0KGcpKXRocm93IG5ldyBiZShcIkludmFsaWQgYHZhcmlhYmxlYCBvcHRpb24gcGFzc2VkIGludG8gYF8udGVtcGxhdGVgXCIpfWVsc2UgZD1cIndpdGggKG9iaikge1xcblwiK2QrXCJcXG59XFxuXCI7ZD0oYT9kLnJlcGxhY2UoTixcIlwiKTpkKS5yZXBsYWNlKEYsXCIkMVwiKS5yZXBsYWNlKFUsXCIkMTtcIiksZD1cImZ1bmN0aW9uKFwiKyhnfHxcIm9ialwiKStcIikge1xcblwiKyhnP1wiXCI6XCJvYmogfHwgKG9iaiA9IHt9KTtcXG5cIikrXCJ2YXIgX190LCBfX3AgPSAnJ1wiKyhpP1wiLCBfX2UgPSBfLmVzY2FwZVwiOlwiXCIpKyhhP1wiLCBfX2ogPSBBcnJheS5wcm90b3R5cGUuam9pbjtcXG5mdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH1cXG5cIjpcIjtcXG5cIikrZCtcInJldHVybiBfX3BcXG59XCI7dmFyIHY9S2woKGZ1bmN0aW9uKCl7cmV0dXJuIHhlKHMsaCtcInJldHVybiBcIitkKS5hcHBseShvLGMpfSkpO2lmKHYuc291cmNlPWQscWEodikpdGhyb3cgdjtyZXR1cm4gdn0sQm4udGltZXM9ZnVuY3Rpb24oZSx0KXtpZigoZT1kbChlKSk8MXx8ZT5mKXJldHVybltdO3ZhciBuPXAscj12bihlLHApO3Q9aWkodCksZS09cDtmb3IodmFyIG89R3Qocix0KTsrK248ZTspdChuKTtyZXR1cm4gb30sQm4udG9GaW5pdGU9ZmwsQm4udG9JbnRlZ2VyPWRsLEJuLnRvTGVuZ3RoPXBsLEJuLnRvTG93ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHZsKGUpLnRvTG93ZXJDYXNlKCl9LEJuLnRvTnVtYmVyPWhsLEJuLnRvU2FmZUludGVnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/b3IoZGwoZSksLTkwMDcxOTkyNTQ3NDA5OTEsZik6MD09PWU/ZTowfSxCbi50b1N0cmluZz12bCxCbi50b1VwcGVyPWZ1bmN0aW9uKGUpe3JldHVybiB2bChlKS50b1VwcGVyQ2FzZSgpfSxCbi50cmltPWZ1bmN0aW9uKGUsdCxuKXtpZigoZT12bChlKSkmJihufHx0PT09bykpcmV0dXJuIHF0KGUpO2lmKCFlfHwhKHQ9aW8odCkpKXJldHVybiBlO3ZhciByPXVuKGUpLGk9dW4odCk7cmV0dXJuIENvKHIsSnQocixpKSxRdChyLGkpKzEpLmpvaW4oXCJcIil9LEJuLnRyaW1FbmQ9ZnVuY3Rpb24oZSx0LG4pe2lmKChlPXZsKGUpKSYmKG58fHQ9PT1vKSlyZXR1cm4gZS5zbGljZSgwLGZuKGUpKzEpO2lmKCFlfHwhKHQ9aW8odCkpKXJldHVybiBlO3ZhciByPXVuKGUpO3JldHVybiBDbyhyLDAsUXQocix1bih0KSkrMSkuam9pbihcIlwiKX0sQm4udHJpbVN0YXJ0PWZ1bmN0aW9uKGUsdCxuKXtpZigoZT12bChlKSkmJihufHx0PT09bykpcmV0dXJuIGUucmVwbGFjZShyZSxcIlwiKTtpZighZXx8ISh0PWlvKHQpKSlyZXR1cm4gZTt2YXIgcj11bihlKTtyZXR1cm4gQ28ocixKdChyLHVuKHQpKSkuam9pbihcIlwiKX0sQm4udHJ1bmNhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj0zMCxyPVwiLi4uXCI7aWYoSmEodCkpe3ZhciBpPVwic2VwYXJhdG9yXCJpbiB0P3Quc2VwYXJhdG9yOmk7bj1cImxlbmd0aFwiaW4gdD9kbCh0Lmxlbmd0aCk6bixyPVwib21pc3Npb25cImluIHQ/aW8odC5vbWlzc2lvbik6cn12YXIgYT0oZT12bChlKSkubGVuZ3RoO2lmKHJuKGUpKXt2YXIgbD11bihlKTthPWwubGVuZ3RofWlmKG4+PWEpcmV0dXJuIGU7dmFyIHM9bi1jbihyKTtpZihzPDEpcmV0dXJuIHI7dmFyIGM9bD9DbyhsLDAscykuam9pbihcIlwiKTplLnNsaWNlKDAscyk7aWYoaT09PW8pcmV0dXJuIGMrcjtpZihsJiYocys9Yy5sZW5ndGgtcykscmwoaSkpe2lmKGUuc2xpY2Uocykuc2VhcmNoKGkpKXt2YXIgdSxmPWM7Zm9yKGkuZ2xvYmFsfHwoaT1MZShpLnNvdXJjZSx2bChkZS5leGVjKGkpKStcImdcIikpLGkubGFzdEluZGV4PTA7dT1pLmV4ZWMoZik7KXZhciBkPXUuaW5kZXg7Yz1jLnNsaWNlKDAsZD09PW8/czpkKX19ZWxzZSBpZihlLmluZGV4T2YoaW8oaSkscykhPXMpe3ZhciBwPWMubGFzdEluZGV4T2YoaSk7cD4tMSYmKGM9Yy5zbGljZSgwLHApKX1yZXR1cm4gYytyfSxCbi51bmVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4oZT12bChlKSkmJkcudGVzdChlKT9lLnJlcGxhY2UoVyxkbik6ZX0sQm4udW5pcXVlSWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9KytBZTtyZXR1cm4gdmwoZSkrdH0sQm4udXBwZXJDYXNlPUdsLEJuLnVwcGVyRmlyc3Q9cWwsQm4uZWFjaD12YSxCbi5lYWNoUmlnaHQ9bWEsQm4uZmlyc3Q9VWksaXMoQm4sKGdzPXt9LG1yKEJuLChmdW5jdGlvbihlLHQpe0llLmNhbGwoQm4ucHJvdG90eXBlLHQpfHwoZ3NbdF09ZSl9KSksZ3MpLHtjaGFpbjohMX0pLEJuLlZFUlNJT049XCI0LjE3LjIxXCIsTHQoW1wiYmluZFwiLFwiYmluZEtleVwiLFwiY3VycnlcIixcImN1cnJ5UmlnaHRcIixcInBhcnRpYWxcIixcInBhcnRpYWxSaWdodFwiXSwoZnVuY3Rpb24oZSl7Qm5bZV0ucGxhY2Vob2xkZXI9Qm59KSksTHQoW1wiZHJvcFwiLFwidGFrZVwiXSwoZnVuY3Rpb24oZSx0KXskbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24obil7bj1uPT09bz8xOmduKGRsKG4pLDApO3ZhciByPXRoaXMuX19maWx0ZXJlZF9fJiYhdD9uZXcgJG4odGhpcyk6dGhpcy5jbG9uZSgpO3JldHVybiByLl9fZmlsdGVyZWRfXz9yLl9fdGFrZUNvdW50X189dm4obixyLl9fdGFrZUNvdW50X18pOnIuX192aWV3c19fLnB1c2goe3NpemU6dm4obixwKSx0eXBlOmUrKHIuX19kaXJfXzwwP1wiUmlnaHRcIjpcIlwiKX0pLHJ9LCRuLnByb3RvdHlwZVtlK1wiUmlnaHRcIl09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpW2VdKHQpLnJldmVyc2UoKX19KSksTHQoW1wiZmlsdGVyXCIsXCJtYXBcIixcInRha2VXaGlsZVwiXSwoZnVuY3Rpb24oZSx0KXt2YXIgbj10KzEscj0xPT1ufHwzPT1uOyRuLnByb3RvdHlwZVtlXT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNsb25lKCk7cmV0dXJuIHQuX19pdGVyYXRlZXNfXy5wdXNoKHtpdGVyYXRlZTppaShlLDMpLHR5cGU6bn0pLHQuX19maWx0ZXJlZF9fPXQuX19maWx0ZXJlZF9ffHxyLHR9fSkpLEx0KFtcImhlYWRcIixcImxhc3RcIl0sKGZ1bmN0aW9uKGUsdCl7dmFyIG49XCJ0YWtlXCIrKHQ/XCJSaWdodFwiOlwiXCIpOyRuLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW25dKDEpLnZhbHVlKClbMF19fSkpLEx0KFtcImluaXRpYWxcIixcInRhaWxcIl0sKGZ1bmN0aW9uKGUsdCl7dmFyIG49XCJkcm9wXCIrKHQ/XCJcIjpcIlJpZ2h0XCIpOyRuLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZmlsdGVyZWRfXz9uZXcgJG4odGhpcyk6dGhpc1tuXSgxKX19KSksJG4ucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIodHMpfSwkbi5wcm90b3R5cGUuZmluZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWx0ZXIoZSkuaGVhZCgpfSwkbi5wcm90b3R5cGUuZmluZExhc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQoZSl9LCRuLnByb3RvdHlwZS5pbnZva2VNYXA9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9uZXcgJG4odGhpcyk6dGhpcy5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBTcihuLGUsdCl9KSl9KSksJG4ucHJvdG90eXBlLnJlamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWx0ZXIoSWEoaWkoZSkpKX0sJG4ucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7ZT1kbChlKTt2YXIgbj10aGlzO3JldHVybiBuLl9fZmlsdGVyZWRfXyYmKGU+MHx8dDwwKT9uZXcgJG4obik6KGU8MD9uPW4udGFrZVJpZ2h0KC1lKTplJiYobj1uLmRyb3AoZSkpLHQhPT1vJiYobj0odD1kbCh0KSk8MD9uLmRyb3BSaWdodCgtdCk6bi50YWtlKHQtZSkpLG4pfSwkbi5wcm90b3R5cGUudGFrZVJpZ2h0V2hpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLnRha2VXaGlsZShlKS5yZXZlcnNlKCl9LCRuLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFrZShwKX0sbXIoJG4ucHJvdG90eXBlLChmdW5jdGlvbihlLHQpe3ZhciBuPS9eKD86ZmlsdGVyfGZpbmR8bWFwfHJlamVjdCl8V2hpbGUkLy50ZXN0KHQpLHI9L14oPzpoZWFkfGxhc3QpJC8udGVzdCh0KSxpPUJuW3I/XCJ0YWtlXCIrKFwibGFzdFwiPT10P1wiUmlnaHRcIjpcIlwiKTp0XSxhPXJ8fC9eZmluZC8udGVzdCh0KTtpJiYoQm4ucHJvdG90eXBlW3RdPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX3dyYXBwZWRfXyxsPXI/WzFdOmFyZ3VtZW50cyxzPXQgaW5zdGFuY2VvZiAkbixjPWxbMF0sdT1zfHxOYSh0KSxmPWZ1bmN0aW9uKGUpe3ZhciB0PWkuYXBwbHkoQm4sUHQoW2VdLGwpKTtyZXR1cm4gciYmZD90WzBdOnR9O3UmJm4mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGMmJjEhPWMubGVuZ3RoJiYocz11PSExKTt2YXIgZD10aGlzLl9fY2hhaW5fXyxwPSEhdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgsaD1hJiYhZCxnPXMmJiFwO2lmKCFhJiZ1KXt0PWc/dDpuZXcgJG4odGhpcyk7dmFyIHY9ZS5hcHBseSh0LGwpO3JldHVybiB2Ll9fYWN0aW9uc19fLnB1c2goe2Z1bmM6ZmEsYXJnczpbZl0sdGhpc0FyZzpvfSksbmV3IFpuKHYsZCl9cmV0dXJuIGgmJmc/ZS5hcHBseSh0aGlzLGwpOih2PXRoaXMudGhydShmKSxoP3I/di52YWx1ZSgpWzBdOnYudmFsdWUoKTp2KX0pfSkpLEx0KFtcInBvcFwiLFwicHVzaFwiLFwic2hpZnRcIixcInNvcnRcIixcInNwbGljZVwiLFwidW5zaGlmdFwiXSwoZnVuY3Rpb24oZSl7dmFyIHQ9amVbZV0sbj0vXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QoZSk/XCJ0YXBcIjpcInRocnVcIixyPS9eKD86cG9wfHNoaWZ0KSQvLnRlc3QoZSk7Qm4ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzO2lmKHImJiF0aGlzLl9fY2hhaW5fXyl7dmFyIG89dGhpcy52YWx1ZSgpO3JldHVybiB0LmFwcGx5KE5hKG8pP286W10sZSl9cmV0dXJuIHRoaXNbbl0oKGZ1bmN0aW9uKG4pe3JldHVybiB0LmFwcGx5KE5hKG4pP246W10sZSl9KSl9fSkpLG1yKCRuLnByb3RvdHlwZSwoZnVuY3Rpb24oZSx0KXt2YXIgbj1Cblt0XTtpZihuKXt2YXIgcj1uLm5hbWUrXCJcIjtJZS5jYWxsKGpuLHIpfHwoam5bcl09W10pLGpuW3JdLnB1c2goe25hbWU6dCxmdW5jOm59KX19KSksam5bQm8obywyKS5uYW1lXT1be25hbWU6XCJ3cmFwcGVyXCIsZnVuYzpvfV0sJG4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGU9bmV3ICRuKHRoaXMuX193cmFwcGVkX18pO3JldHVybiBlLl9fYWN0aW9uc19fPUVvKHRoaXMuX19hY3Rpb25zX18pLGUuX19kaXJfXz10aGlzLl9fZGlyX18sZS5fX2ZpbHRlcmVkX189dGhpcy5fX2ZpbHRlcmVkX18sZS5fX2l0ZXJhdGVlc19fPUVvKHRoaXMuX19pdGVyYXRlZXNfXyksZS5fX3Rha2VDb3VudF9fPXRoaXMuX190YWtlQ291bnRfXyxlLl9fdmlld3NfXz1Fbyh0aGlzLl9fdmlld3NfXyksZX0sJG4ucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24oKXtpZih0aGlzLl9fZmlsdGVyZWRfXyl7dmFyIGU9bmV3ICRuKHRoaXMpO2UuX19kaXJfXz0tMSxlLl9fZmlsdGVyZWRfXz0hMH1lbHNlKGU9dGhpcy5jbG9uZSgpKS5fX2Rpcl9fKj0tMTtyZXR1cm4gZX0sJG4ucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX3dyYXBwZWRfXy52YWx1ZSgpLHQ9dGhpcy5fX2Rpcl9fLG49TmEoZSkscj10PDAsbz1uP2UubGVuZ3RoOjAsaT1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPS0xLG89bi5sZW5ndGg7KytyPG87KXt2YXIgaT1uW3JdLGE9aS5zaXplO3N3aXRjaChpLnR5cGUpe2Nhc2VcImRyb3BcIjplKz1hO2JyZWFrO2Nhc2VcImRyb3BSaWdodFwiOnQtPWE7YnJlYWs7Y2FzZVwidGFrZVwiOnQ9dm4odCxlK2EpO2JyZWFrO2Nhc2VcInRha2VSaWdodFwiOmU9Z24oZSx0LWEpfX1yZXR1cm57c3RhcnQ6ZSxlbmQ6dH19KDAsbyx0aGlzLl9fdmlld3NfXyksYT1pLnN0YXJ0LGw9aS5lbmQscz1sLWEsYz1yP2w6YS0xLHU9dGhpcy5fX2l0ZXJhdGVlc19fLGY9dS5sZW5ndGgsZD0wLHA9dm4ocyx0aGlzLl9fdGFrZUNvdW50X18pO2lmKCFufHwhciYmbz09cyYmcD09cylyZXR1cm4gdW8oZSx0aGlzLl9fYWN0aW9uc19fKTt2YXIgaD1bXTtlOmZvcig7cy0tJiZkPHA7KXtmb3IodmFyIGc9LTEsdj1lW2MrPXRdOysrZzxmOyl7dmFyIG09dVtnXSxDPW0uaXRlcmF0ZWUseT1tLnR5cGUsdz1DKHYpO2lmKDI9PXkpdj13O2Vsc2UgaWYoIXcpe2lmKDE9PXkpY29udGludWUgZTticmVhayBlfX1oW2QrK109dn1yZXR1cm4gaH0sQm4ucHJvdG90eXBlLmF0PWRhLEJuLnByb3RvdHlwZS5jaGFpbj1mdW5jdGlvbigpe3JldHVybiB1YSh0aGlzKX0sQm4ucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbigpe3JldHVybiBuZXcgWm4odGhpcy52YWx1ZSgpLHRoaXMuX19jaGFpbl9fKX0sQm4ucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt0aGlzLl9fdmFsdWVzX189PT1vJiYodGhpcy5fX3ZhbHVlc19fPXVsKHRoaXMudmFsdWUoKSkpO3ZhciBlPXRoaXMuX19pbmRleF9fPj10aGlzLl9fdmFsdWVzX18ubGVuZ3RoO3JldHVybntkb25lOmUsdmFsdWU6ZT9vOnRoaXMuX192YWx1ZXNfX1t0aGlzLl9faW5kZXhfXysrXX19LEJuLnByb3RvdHlwZS5wbGFudD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj10aGlzO24gaW5zdGFuY2VvZiBEbjspe3ZhciByPUJpKG4pO3IuX19pbmRleF9fPTAsci5fX3ZhbHVlc19fPW8sdD9pLl9fd3JhcHBlZF9fPXI6dD1yO3ZhciBpPXI7bj1uLl9fd3JhcHBlZF9ffXJldHVybiBpLl9fd3JhcHBlZF9fPWUsdH0sQm4ucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fd3JhcHBlZF9fO2lmKGUgaW5zdGFuY2VvZiAkbil7dmFyIHQ9ZTtyZXR1cm4gdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgmJih0PW5ldyAkbih0aGlzKSksKHQ9dC5yZXZlcnNlKCkpLl9fYWN0aW9uc19fLnB1c2goe2Z1bmM6ZmEsYXJnczpbSmldLHRoaXNBcmc6b30pLG5ldyBabih0LHRoaXMuX19jaGFpbl9fKX1yZXR1cm4gdGhpcy50aHJ1KEppKX0sQm4ucHJvdG90eXBlLnRvSlNPTj1Cbi5wcm90b3R5cGUudmFsdWVPZj1Cbi5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdW8odGhpcy5fX3dyYXBwZWRfXyx0aGlzLl9fYWN0aW9uc19fKX0sQm4ucHJvdG90eXBlLmZpcnN0PUJuLnByb3RvdHlwZS5oZWFkLFllJiYoQm4ucHJvdG90eXBlW1llXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksQm59KCk7ZnQuXz1wbiwocj1mdW5jdGlvbigpe3JldHVybiBwbn0uY2FsbCh0LG4sdCxlKSk9PT1vfHwoZS5leHBvcnRzPXIpfS5jYWxsKHRoaXMpfSw3NDE4OmU9Pnt2YXIgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxyPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciBlPW5ldyBTdHJpbmcoXCJhYmNcIik7aWYoZVs1XT1cImRlXCIsXCI1XCI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKVswXSlyZXR1cm4hMTtmb3IodmFyIHQ9e30sbj0wO248MTA7bisrKXRbXCJfXCIrU3RyaW5nLmZyb21DaGFyQ29kZShuKV09bjtpZihcIjAxMjM0NTY3ODlcIiE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSkuam9pbihcIlwiKSlyZXR1cm4hMTt2YXIgcj17fTtyZXR1cm5cImFiY2RlZmdoaWprbG1ub3BxcnN0XCIuc3BsaXQoXCJcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cltlXT1lfSkpLFwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIj09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30scikpLmpvaW4oXCJcIil9Y2F0Y2goZSl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24oZSxvKXtmb3IodmFyIGksYSxsPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBPYmplY3QoZSl9KGUpLHM9MTtzPGFyZ3VtZW50cy5sZW5ndGg7cysrKXtmb3IodmFyIGMgaW4gaT1PYmplY3QoYXJndW1lbnRzW3NdKSluLmNhbGwoaSxjKSYmKGxbY109aVtjXSk7aWYodCl7YT10KGkpO2Zvcih2YXIgdT0wO3U8YS5sZW5ndGg7dSsrKXIuY2FsbChpLGFbdV0pJiYobFthW3VdXT1pW2FbdV1dKX19cmV0dXJuIGx9fSw5Mjk0OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1uKDY1NSksbz1uKDQzOTQpLGk9bigzNTczKSxhPW4oNDgzOSk7dmFyIGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX0oYSkscz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIE1hdGgubWluKE1hdGgubWF4KG4sZSksdCl9LGM9LjAwMSx1PS4wMSxmPTEwLGQ9LjA1LHA9MSxoPTEyO2Z1bmN0aW9uIGcoZSx0KXtyZXR1cm4gZSpNYXRoLnNxcnQoMS10KnQpfXZhciB2PVtcImR1cmF0aW9uXCIsXCJib3VuY2VcIl0sbT1bXCJzdGlmZm5lc3NcIixcImRhbXBpbmdcIixcIm1hc3NcIl07ZnVuY3Rpb24gQyhlLHQpe3JldHVybiB0LnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT1lW3RdfSkpfWZ1bmN0aW9uIHkoZSl7dmFyIHQ9ZS5mcm9tLG49dm9pZCAwPT09dD8wOnQsaT1lLnRvLGE9dm9pZCAwPT09aT8xOmksbD1lLnJlc3RTcGVlZCx5PXZvaWQgMD09PWw/MjpsLGI9ZS5yZXN0RGVsdGEseD1yLl9fcmVzdChlLFtcImZyb21cIixcInRvXCIsXCJyZXN0U3BlZWRcIixcInJlc3REZWx0YVwiXSksXz17ZG9uZTohMSx2YWx1ZTpufSxPPWZ1bmN0aW9uKGUpe3ZhciB0PXIuX19hc3NpZ24oe3ZlbG9jaXR5OjAsc3RpZmZuZXNzOjEwMCxkYW1waW5nOjEwLG1hc3M6MSxpc1Jlc29sdmVkRnJvbUR1cmF0aW9uOiExfSxlKTtpZighQyhlLG0pJiZDKGUsdikpe3ZhciBuPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lLmR1cmF0aW9uLGk9dm9pZCAwPT09cj84MDA6cixhPWUuYm91bmNlLGw9dm9pZCAwPT09YT8uMjU6YSx2PWUudmVsb2NpdHksbT12b2lkIDA9PT12PzA6dixDPWUubWFzcyx5PXZvaWQgMD09PUM/MTpDO28ud2FybmluZyhpPD0xZTMqZixcIlNwcmluZyBkdXJhdGlvbiBtdXN0IGJlIDEwIHNlY29uZHMgb3IgbGVzc1wiKTt2YXIgdz0xLWw7dz1zKGQscCx3KSxpPXModSxmLGkvMWUzKSx3PDE/KHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSp3LG49dCppLHI9dC1tLG89ZyhlLHcpLGE9TWF0aC5leHAoLW4pO3JldHVybiBjLXIvbyphfSxuPWZ1bmN0aW9uKGUpe3ZhciBuPWUqdyppLHI9biptK20sbz1NYXRoLnBvdyh3LDIpKk1hdGgucG93KGUsMikqaSxhPU1hdGguZXhwKC1uKSxsPWcoTWF0aC5wb3coZSwyKSx3KTtyZXR1cm4oLXQoZSkrYz4wPy0xOjEpKigoci1vKSphKS9sfSk6KHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZXhwKC1lKmkpKigoZS1tKSppKzEpLWN9LG49ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZXhwKC1lKmkpKihpKmkqKG0tZSkpfSk7dmFyIGI9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uLG89MTtvPGg7bysrKXItPWUocikvdChyKTtyZXR1cm4gcn0odCxuLDUvaSk7aWYoaSo9MWUzLGlzTmFOKGIpKXJldHVybntzdGlmZm5lc3M6MTAwLGRhbXBpbmc6MTAsZHVyYXRpb246aX07dmFyIHg9TWF0aC5wb3coYiwyKSp5O3JldHVybntzdGlmZm5lc3M6eCxkYW1waW5nOjIqdypNYXRoLnNxcnQoeSp4KSxkdXJhdGlvbjppfX0oZSk7KHQ9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdCksbikse3ZlbG9jaXR5OjAsbWFzczoxfSkpLmlzUmVzb2x2ZWRGcm9tRHVyYXRpb249ITB9cmV0dXJuIHR9KHgpLEw9Ty5zdGlmZm5lc3MsRT1PLmRhbXBpbmcsUz1PLm1hc3Msaj1PLnZlbG9jaXR5LE09Ty5kdXJhdGlvbixrPU8uaXNSZXNvbHZlZEZyb21EdXJhdGlvbixSPXcsUD13O2Z1bmN0aW9uIEkoKXt2YXIgZT1qPy1qLzFlMzowLHQ9YS1uLHI9RS8oMipNYXRoLnNxcnQoTCpTKSksbz1NYXRoLnNxcnQoTC9TKS8xZTM7aWYobnVsbCE9Ynx8KGI9TWF0aC5hYnMoYS1uKTw9MT8uMDE6LjQpLHI8MSl7dmFyIGk9ZyhvLHIpO1I9ZnVuY3Rpb24obil7dmFyIGw9TWF0aC5leHAoLXIqbypuKTtyZXR1cm4gYS1sKigoZStyKm8qdCkvaSpNYXRoLnNpbihpKm4pK3QqTWF0aC5jb3MoaSpuKSl9LFA9ZnVuY3Rpb24obil7dmFyIGE9TWF0aC5leHAoLXIqbypuKTtyZXR1cm4gcipvKmEqKE1hdGguc2luKGkqbikqKGUrcipvKnQpL2krdCpNYXRoLmNvcyhpKm4pKS1hKihNYXRoLmNvcyhpKm4pKihlK3Iqbyp0KS1pKnQqTWF0aC5zaW4oaSpuKSl9fWVsc2UgaWYoMT09PXIpUj1mdW5jdGlvbihuKXtyZXR1cm4gYS1NYXRoLmV4cCgtbypuKSoodCsoZStvKnQpKm4pfTtlbHNle3ZhciBsPW8qTWF0aC5zcXJ0KHIqci0xKTtSPWZ1bmN0aW9uKG4pe3ZhciBpPU1hdGguZXhwKC1yKm8qbikscz1NYXRoLm1pbihsKm4sMzAwKTtyZXR1cm4gYS1pKigoZStyKm8qdCkqTWF0aC5zaW5oKHMpK2wqdCpNYXRoLmNvc2gocykpL2x9fX1yZXR1cm4gSSgpLHtuZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PVIoZSk7aWYoaylfLmRvbmU9ZT49TTtlbHNle3ZhciBuPTFlMypQKGUpLHI9TWF0aC5hYnMobik8PXksbz1NYXRoLmFicyhhLXQpPD1iO18uZG9uZT1yJiZvfXJldHVybiBfLnZhbHVlPV8uZG9uZT9hOnQsX30sZmxpcFRhcmdldDpmdW5jdGlvbigpe3ZhciBlO2o9LWosbj0oZT1bYSxuXSlbMF0sYT1lWzFdLEkoKX19fXkubmVlZHNJbnRlcnBvbGF0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwic3RyaW5nXCI9PXR5cGVvZiB0fTt2YXIgdz1mdW5jdGlvbihlKXtyZXR1cm4gMH0sYj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC1lO3JldHVybiAwPT09cj8xOihuLWUpL3J9LHg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybi1uKmUrbip0K2V9LF89ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUqZSxvPXQqdDtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgubWF4KDAsbiooby1yKStyKSl9LE89W2kuaGV4LGkucmdiYSxpLmhzbGFdLEw9ZnVuY3Rpb24oZSl7cmV0dXJuIE8uZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGVzdChlKX0pKX0sRT1mdW5jdGlvbihlKXtyZXR1cm5cIidcIitlK1wiJyBpcyBub3QgYW4gYW5pbWF0YWJsZSBjb2xvci4gVXNlIHRoZSBlcXVpdmFsZW50IGNvbG9yIGNvZGUgaW5zdGVhZC5cIn0sUz1mdW5jdGlvbihlLHQpe3ZhciBuPUwoZSksYT1MKHQpO28uaW52YXJpYW50KCEhbixFKGUpKSxvLmludmFyaWFudCghIWEsRSh0KSksby5pbnZhcmlhbnQobi50cmFuc2Zvcm09PT1hLnRyYW5zZm9ybSxcIkJvdGggY29sb3JzIG11c3QgYmUgaGV4L1JHQkEsIE9SIGJvdGggbXVzdCBiZSBIU0xBLlwiKTt2YXIgbD1uLnBhcnNlKGUpLHM9YS5wYXJzZSh0KSxjPXIuX19hc3NpZ24oe30sbCksdT1uPT09aS5oc2xhP3g6XztyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIGMpXCJhbHBoYVwiIT09dCYmKGNbdF09dShsW3RdLHNbdF0sZSkpO3JldHVybiBjLmFscGhhPXgobC5hbHBoYSxzLmFscGhhLGUpLG4udHJhbnNmb3JtKGMpfX0saj17eDowLHk6MCx6OjB9LE09ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGV9LGs9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQoZShuKSl9fSxSPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO3JldHVybiBlLnJlZHVjZShrKX07ZnVuY3Rpb24gUChlLHQpe3JldHVybiBNKGUpP2Z1bmN0aW9uKG4pe3JldHVybiB4KGUsdCxuKX06aS5jb2xvci50ZXN0KGUpP1MoZSx0KTpIKGUsdCl9dmFyIEk9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yLl9fc3ByZWFkQXJyYXkoW10sZSksbz1uLmxlbmd0aCxpPWUubWFwKChmdW5jdGlvbihlLG4pe3JldHVybiBQKGUsdFtuXSl9KSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8bzt0Kyspblt0XT1pW3RdKGUpO3JldHVybiBufX0sQT1mdW5jdGlvbihlLHQpe3ZhciBuPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxlKSx0KSxvPXt9O2Zvcih2YXIgaSBpbiBuKXZvaWQgMCE9PWVbaV0mJnZvaWQgMCE9PXRbaV0mJihvW2ldPVAoZVtpXSx0W2ldKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBvKW5bdF09b1t0XShlKTtyZXR1cm4gbn19O2Z1bmN0aW9uIFQoZSl7Zm9yKHZhciB0PWkuY29tcGxleC5wYXJzZShlKSxuPXQubGVuZ3RoLHI9MCxvPTAsYT0wLGw9MDtsPG47bCsrKXJ8fFwibnVtYmVyXCI9PXR5cGVvZiB0W2xdP3IrKzp2b2lkIDAhPT10W2xdLmh1ZT9hKys6bysrO3JldHVybntwYXJzZWQ6dCxudW1OdW1iZXJzOnIsbnVtUkdCOm8sbnVtSFNMOmF9fXZhciBIPWZ1bmN0aW9uKGUsdCl7dmFyIG49aS5jb21wbGV4LmNyZWF0ZVRyYW5zZm9ybWVyKHQpLHI9VChlKSxhPVQodCk7cmV0dXJuIG8uaW52YXJpYW50KHIubnVtSFNMPT09YS5udW1IU0wmJnIubnVtUkdCPT09YS5udW1SR0ImJnIubnVtTnVtYmVycz49YS5udW1OdW1iZXJzLFwiQ29tcGxleCB2YWx1ZXMgJ1wiK2UrXCInIGFuZCAnXCIrdCtcIicgdG9vIGRpZmZlcmVudCB0byBtaXguIEVuc3VyZSBhbGwgY29sb3JzIGFyZSBvZiB0aGUgc2FtZSB0eXBlLlwiKSxSKEkoci5wYXJzZWQsYS5wYXJzZWQpLG4pfSxCPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB4KGUsdCxuKX19O2Z1bmN0aW9uIFYoZSx0LG4pe3ZhciByPXZvaWQgMD09PW4/e306bixhPXIuY2xhbXAsbD12b2lkIDA9PT1hfHxhLGM9ci5lYXNlLHU9ci5taXhlcixmPWUubGVuZ3RoO28uaW52YXJpYW50KGY9PT10Lmxlbmd0aCxcIkJvdGggaW5wdXQgYW5kIG91dHB1dCByYW5nZXMgbXVzdCBiZSB0aGUgc2FtZSBsZW5ndGhcIiksby5pbnZhcmlhbnQoIWN8fCFBcnJheS5pc0FycmF5KGMpfHxjLmxlbmd0aD09PWYtMSxcIkFycmF5IG9mIGVhc2luZyBmdW5jdGlvbnMgbXVzdCBiZSBvZiBsZW5ndGggYGlucHV0Lmxlbmd0aCAtIDFgLCBhcyBpdCBhcHBsaWVzIHRvIHRoZSB0cmFuc2l0aW9ucyAqKmJldHdlZW4qKiB0aGUgZGVmaW5lZCB2YWx1ZXMuXCIpLGVbMF0+ZVtmLTFdJiYoZT1bXS5jb25jYXQoZSksdD1bXS5jb25jYXQodCksZS5yZXZlcnNlKCksdC5yZXZlcnNlKCkpO3ZhciBkPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHIsbz1bXSxhPW58fChcIm51bWJlclwiPT10eXBlb2Yocj1lWzBdKT9COlwic3RyaW5nXCI9PXR5cGVvZiByP2kuY29sb3IudGVzdChyKT9TOkg6QXJyYXkuaXNBcnJheShyKT9JOlwib2JqZWN0XCI9PXR5cGVvZiByP0E6dm9pZCAwKSxsPWUubGVuZ3RoLTEscz0wO3M8bDtzKyspe3ZhciBjPWEoZVtzXSxlW3MrMV0pO2lmKHQpe3ZhciB1PUFycmF5LmlzQXJyYXkodCk/dFtzXTp0O2M9Uih1LGMpfW8ucHVzaChjKX1yZXR1cm4gb30odCxjLHUpLHA9Mj09PWY/ZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzBdLHI9ZVsxXSxvPXRbMF07cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBvKGIobixyLGUpKX19KGUsZCk6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPW4tMTtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIGk9MCxhPSExO2lmKG88PWVbMF0/YT0hMDpvPj1lW3JdJiYoaT1yLTEsYT0hMCksIWEpe2Zvcih2YXIgbD0xO2w8biYmIShlW2xdPm98fGw9PT1yKTtsKyspO2k9bC0xfXZhciBzPWIoZVtpXSxlW2krMV0sbyk7cmV0dXJuIHRbaV0ocyl9fShlLGQpO3JldHVybiBsP2Z1bmN0aW9uKHQpe3JldHVybiBwKHMoZVswXSxlW2YtMV0sdCkpfTpwfXZhciBEPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gMS1lKDEtdCl9fSxaPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDw9LjU/ZSgyKnQpLzI6KDItZSgyKigxLXQpKSkvMn19LCQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LGUpfX0sTj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQqdCooKGUrMSkqdC1lKX19LEY9ZnVuY3Rpb24oZSl7dmFyIHQ9TihlKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuKGUqPTIpPDE/LjUqdChlKTouNSooMi1NYXRoLnBvdygyLC0xMCooZS0xKSkpfX0sVT1mdW5jdGlvbihlKXtyZXR1cm4gZX0sVz0kKDIpLHo9RChXKSxHPVooVykscT1mdW5jdGlvbihlKXtyZXR1cm4gMS1NYXRoLnNpbihNYXRoLmFjb3MoZSkpfSxZPUQocSksSz1aKFkpLFg9TigxLjUyNSksSj1EKFgpLFE9WihYKSxlZT1GKDEuNTI1KSx0ZT1mdW5jdGlvbihlKXtpZigxPT09ZXx8MD09PWUpcmV0dXJuIGU7dmFyIHQ9ZSplO3JldHVybiBlPC4zNjM2MzYzNjM2MzYzNjM2NT83LjU2MjUqdDplPC43MjcyNzI3MjcyNzI3MjczPzkuMDc1KnQtOS45KmUrMy40OmU8Ljk/MTIuMDY2NDgxOTk0NDU5ODMzKnQtMTkuNjM1NDU3MDYzNzExOTEqZSs4Ljg5ODA2MDk0MTgyODI1NToxMC44KmUqZS0yMC41MiplKzEwLjcyfSxuZT1EKHRlKTtmdW5jdGlvbiByZShlLHQpe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gdHx8R30pKS5zcGxpY2UoMCxlLmxlbmd0aC0xKX1mdW5jdGlvbiBvZShlKXt2YXIgdD1lLmZyb20sbj12b2lkIDA9PT10PzA6dCxyPWUudG8sbz12b2lkIDA9PT1yPzE6cixpPWUuZWFzZSxhPWUub2Zmc2V0LGw9ZS5kdXJhdGlvbixzPXZvaWQgMD09PWw/MzAwOmwsYz17ZG9uZTohMSx2YWx1ZTpufSx1PUFycmF5LmlzQXJyYXkobyk/bzpbbixvXSxmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZSp0fSkpfShhJiZhLmxlbmd0aD09PXUubGVuZ3RoP2E6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGUubWFwKChmdW5jdGlvbihlLG4pe3JldHVybiAwIT09bj9uLyh0LTEpOjB9KSl9KHUpLHMpO2Z1bmN0aW9uIGQoKXtyZXR1cm4gVihmLHUse2Vhc2U6QXJyYXkuaXNBcnJheShpKT9pOnJlKHUsaSl9KX12YXIgcD1kKCk7cmV0dXJue25leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGMudmFsdWU9cChlKSxjLmRvbmU9ZT49cyxjfSxmbGlwVGFyZ2V0OmZ1bmN0aW9uKCl7dS5yZXZlcnNlKCkscD1kKCl9fX1mdW5jdGlvbiBpZShlKXt2YXIgdD1lLnZlbG9jaXR5LG49dm9pZCAwPT09dD8wOnQscj1lLmZyb20sbz12b2lkIDA9PT1yPzA6cixpPWUucG93ZXIsYT12b2lkIDA9PT1pPy44OmksbD1lLnRpbWVDb25zdGFudCxzPXZvaWQgMD09PWw/MzUwOmwsYz1lLnJlc3REZWx0YSx1PXZvaWQgMD09PWM/LjU6YyxmPWUubW9kaWZ5VGFyZ2V0LGQ9e2RvbmU6ITEsdmFsdWU6b30scD1hKm4saD1vK3AsZz12b2lkIDA9PT1mP2g6ZihoKTtyZXR1cm4gZyE9PWgmJihwPWctbykse25leHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9LXAqTWF0aC5leHAoLWUvcyk7cmV0dXJuIGQuZG9uZT0hKHQ+dXx8dDwtdSksZC52YWx1ZT1kLmRvbmU/ZzpnK3QsZH0sZmxpcFRhcmdldDpmdW5jdGlvbigpe319fXZhciBhZT17a2V5ZnJhbWVzOm9lLHNwcmluZzp5LGRlY2F5OmllfTtmdW5jdGlvbiBsZShlLHQsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTApLGUtdC1ufXZhciBzZT1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbih0KXt2YXIgbj10LmRlbHRhO3JldHVybiBlKG4pfTtyZXR1cm57c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5kZWZhdWx0LnVwZGF0ZSh0LCEwKX0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBhLmNhbmNlbFN5bmMudXBkYXRlKHQpfX19O2Z1bmN0aW9uIGNlKGUpe3ZhciB0LG4sbyxpLGEsbD1lLmZyb20scz1lLmF1dG9wbGF5LGM9dm9pZCAwPT09c3x8cyx1PWUuZHJpdmVyLGY9dm9pZCAwPT09dT9zZTp1LGQ9ZS5lbGFwc2VkLHA9dm9pZCAwPT09ZD8wOmQsaD1lLnJlcGVhdCxnPXZvaWQgMD09PWg/MDpoLHY9ZS5yZXBlYXRUeXBlLG09dm9pZCAwPT09dj9cImxvb3BcIjp2LEM9ZS5yZXBlYXREZWxheSx3PXZvaWQgMD09PUM/MDpDLGI9ZS5vblBsYXkseD1lLm9uU3RvcCxfPWUub25Db21wbGV0ZSxPPWUub25SZXBlYXQsTD1lLm9uVXBkYXRlLEU9ci5fX3Jlc3QoZSxbXCJmcm9tXCIsXCJhdXRvcGxheVwiLFwiZHJpdmVyXCIsXCJlbGFwc2VkXCIsXCJyZXBlYXRcIixcInJlcGVhdFR5cGVcIixcInJlcGVhdERlbGF5XCIsXCJvblBsYXlcIixcIm9uU3RvcFwiLFwib25Db21wbGV0ZVwiLFwib25SZXBlYXRcIixcIm9uVXBkYXRlXCJdKSxTPUUudG8saj0wLE09RS5kdXJhdGlvbixrPSExLFI9ITAsUD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUudG8pKXJldHVybiBvZTtpZihhZVtlLnR5cGVdKXJldHVybiBhZVtlLnR5cGVdO3ZhciB0PW5ldyBTZXQoT2JqZWN0LmtleXMoZSkpO3JldHVybiB0LmhhcyhcImVhc2VcIil8fHQuaGFzKFwiZHVyYXRpb25cIikmJiF0LmhhcyhcImRhbXBpbmdSYXRpb1wiKT9vZTp0LmhhcyhcImRhbXBpbmdSYXRpb1wiKXx8dC5oYXMoXCJzdGlmZm5lc3NcIil8fHQuaGFzKFwibWFzc1wiKXx8dC5oYXMoXCJkYW1waW5nXCIpfHx0LmhhcyhcInJlc3RTcGVlZFwiKXx8dC5oYXMoXCJyZXN0RGVsdGFcIik/eTpvZX0oRSk7KG51bGw9PT0obj0odD1QKS5uZWVkc0ludGVycG9sYXRpb24pfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmNhbGwodCxsLFMpKSYmKGE9VihbMCwxMDBdLFtsLFNdLHtjbGFtcDohMX0pLGw9MCxTPTEwMCk7dmFyIEk9UChyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sRSkse2Zyb206bCx0bzpTfSkpO3JldHVybiBjJiYobnVsbD09Ynx8YigpLChvPWYoKGZ1bmN0aW9uKGUpe2lmKFJ8fChlPS1lKSxwKz1lLCFrKXt2YXIgdD1JLm5leHQoTWF0aC5tYXgoMCxwKSk7aT10LnZhbHVlLGEmJihpPWEoaSkpLGs9Uj90LmRvbmU6cDw9MH1udWxsPT1MfHxMKGkpLGsmJigwPT09aiYmKG51bGwhPU18fChNPXApKSxqPGc/ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHI/ZT49dCtuOmU8PS1ufShwLE0sdyxSKSYmKGorKyxcInJldmVyc2VcIj09PW0/cD1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09ciYmKHI9ITApLHI/bGUodCstZSx0LG4pOnQtKGUtdCkrbn0ocCxNLHcsUj1qJTI9PTApOihwPWxlKHAsTSx3KSxcIm1pcnJvclwiPT09bSYmSS5mbGlwVGFyZ2V0KCkpLGs9ITEsTyYmTygpKTooby5zdG9wKCksXyYmXygpKSl9KSkpLnN0YXJ0KCkpLHtzdG9wOmZ1bmN0aW9uKCl7bnVsbD09eHx8eCgpLG8uc3RvcCgpfX19ZnVuY3Rpb24gdWUoZSx0KXtyZXR1cm4gdD9lKigxZTMvdCk6MH12YXIgZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIDE4MCplL01hdGguUEl9LGRlPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxwZT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ZGUpLGZ1bmN0aW9uKHQsbixyKXt2YXIgbz1uLXIsaT0tKDAtdCsxKSooMC1lKE1hdGguYWJzKG8pKSk7cmV0dXJuIG88PTA/bitpOm4taX19LGhlPXBlKCksZ2U9cGUoTWF0aC5zcXJ0KSx2ZT1mdW5jdGlvbihlKXtyZXR1cm4gZSpNYXRoLlBJLzE4MH0sbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaGFzT3duUHJvcGVydHkoXCJ4XCIpJiZlLmhhc093blByb3BlcnR5KFwieVwiKX0sQ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG1lKGUpJiZlLmhhc093blByb3BlcnR5KFwielwiKX0seWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5hYnMoZS10KX0sd2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MiksdD1NYXRoLnBvdygxMCx0KSxNYXRoLnJvdW5kKGUqdCkvdH0sYmU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHZvaWQgMD09PXImJihyPTApLHdlKGUrbioodC1lKS9NYXRoLm1heChyLG4pKX0seGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMS0zKnQrMyplfSxfZT1mdW5jdGlvbihlLHQpe3JldHVybiAzKnQtNiplfSxPZT1mdW5jdGlvbihlKXtyZXR1cm4gMyplfSxMZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuKCh4ZSh0LG4pKmUrX2UodCxuKSkqZStPZSh0KSkqZX0sRWU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAzKnhlKHQsbikqZSplKzIqX2UodCxuKSplK09lKHQpfSxTZT0uMTt0LmFuZ2xlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PWopLGZlKE1hdGguYXRhbjIodC55LWUueSx0LngtZS54KSl9LHQuYW5pbWF0ZT1jZSx0LmFudGljaXBhdGU9ZWUsdC5hcHBseU9mZnNldD1mdW5jdGlvbihlLHQpe3ZhciBuPSEwO3JldHVybiB2b2lkIDA9PT10JiYodD1lLG49ITEpLGZ1bmN0aW9uKHIpe3JldHVybiBuP3ItZSt0OihlPXIsbj0hMCx0KX19LHQuYXR0cmFjdD1oZSx0LmF0dHJhY3RFeHBvPWdlLHQuYmFja0luPVgsdC5iYWNrSW5PdXQ9USx0LmJhY2tPdXQ9Six0LmJvdW5jZUluPW5lLHQuYm91bmNlSW5PdXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU8LjU/LjUqKDEtdGUoMS0yKmUpKTouNSp0ZSgyKmUtMSkrLjV9LHQuYm91bmNlT3V0PXRlLHQuY2lyY0luPXEsdC5jaXJjSW5PdXQ9Syx0LmNpcmNPdXQ9WSx0LmNsYW1wPXMsdC5jcmVhdGVBbnRpY2lwYXRlPUYsdC5jcmVhdGVBdHRyYWN0b3I9cGUsdC5jcmVhdGVCYWNrSW49Tix0LmNyZWF0ZUV4cG9Jbj0kLHQuY3ViaWNCZXppZXI9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT09PXQmJm49PT1yKXJldHVybiBVO2Zvcih2YXIgbz1uZXcgRmxvYXQzMkFycmF5KDExKSxpPTA7aTwxMTsrK2kpb1tpXT1MZShpKlNlLGUsbik7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiAwPT09aXx8MT09PWk/aTpMZShmdW5jdGlvbih0KXtmb3IodmFyIHI9MCxpPTE7MTAhPT1pJiZvW2ldPD10OysraSlyKz1TZTstLWk7dmFyIGE9cisodC1vW2ldKS8ob1tpKzFdLW9baV0pKlNlLGw9RWUoYSxlLG4pO3JldHVybiBsPj0uMDAxP2Z1bmN0aW9uKGUsdCxuLHIpe2Zvcih2YXIgbz0wO288ODsrK28pe3ZhciBpPUVlKHQsbixyKTtpZigwPT09aSlyZXR1cm4gdDt0LT0oTGUodCxuLHIpLWUpL2l9cmV0dXJuIHR9KHQsYSxlLG4pOjA9PT1sP2E6ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgaSxhLGw9MDtkb3soaT1MZShhPXQrKG4tdCkvMixyLG8pLWUpPjA/bj1hOnQ9YX13aGlsZShNYXRoLmFicyhpKT4xZS03JiYrK2w8MTApO3JldHVybiBhfSh0LHIscitTZSxlLG4pfShpKSx0LHIpfX0sdC5kZWNheT1pZSx0LmRlZ3JlZXNUb1JhZGlhbnM9dmUsdC5kaXN0YW5jZT1mdW5jdGlvbihlLHQpe2lmKE0oZSkmJk0odCkpcmV0dXJuIHllKGUsdCk7aWYobWUoZSkmJm1lKHQpKXt2YXIgbj15ZShlLngsdC54KSxyPXllKGUueSx0LnkpLG89Q2UoZSkmJkNlKHQpP3llKGUueix0LnopOjA7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhuLDIpK01hdGgucG93KHIsMikrTWF0aC5wb3cobywyKSl9fSx0LmVhc2VJbj1XLHQuZWFzZUluT3V0PUcsdC5lYXNlT3V0PXosdC5pbmVydGlhPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5mcm9tLG89dm9pZCAwPT09bj8wOm4saT1lLnZlbG9jaXR5LGw9dm9pZCAwPT09aT8wOmkscz1lLm1pbixjPWUubWF4LHU9ZS5wb3dlcixmPXZvaWQgMD09PXU/Ljg6dSxkPWUudGltZUNvbnN0YW50LHA9dm9pZCAwPT09ZD83NTA6ZCxoPWUuYm91bmNlU3RpZmZuZXNzLGc9dm9pZCAwPT09aD81MDA6aCx2PWUuYm91bmNlRGFtcGluZyxtPXZvaWQgMD09PXY/MTA6dixDPWUucmVzdERlbHRhLHk9dm9pZCAwPT09Qz8xOkMsdz1lLm1vZGlmeVRhcmdldCxiPWUuZHJpdmVyLHg9ZS5vblVwZGF0ZSxfPWUub25Db21wbGV0ZTtmdW5jdGlvbiBPKGUpe3JldHVybiB2b2lkIDAhPT1zJiZlPHN8fHZvaWQgMCE9PWMmJmU+Y31mdW5jdGlvbiBMKGUpe3JldHVybiB2b2lkIDA9PT1zP2M6dm9pZCAwPT09Y3x8TWF0aC5hYnMocy1lKTxNYXRoLmFicyhjLWUpP3M6Y31mdW5jdGlvbiBFKGUpe251bGw9PXR8fHQuc3RvcCgpLHQ9Y2Uoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGUpLHtkcml2ZXI6YixvblVwZGF0ZTpmdW5jdGlvbih0KXt2YXIgbjtudWxsPT14fHx4KHQpLG51bGw9PT0obj1lLm9uVXBkYXRlKXx8dm9pZCAwPT09bnx8bi5jYWxsKGUsdCl9LG9uQ29tcGxldGU6X30pKX1mdW5jdGlvbiBTKGUpe0Uoci5fX2Fzc2lnbih7dHlwZTpcInNwcmluZ1wiLHN0aWZmbmVzczpnLGRhbXBpbmc6bSxyZXN0RGVsdGE6eX0sZSkpfWlmKE8obykpUyh7ZnJvbTpvLHZlbG9jaXR5OmwsdG86TChvKX0pO2Vsc2V7dmFyIGo9ZipsK287dm9pZCAwIT09dyYmKGo9dyhqKSk7dmFyIE0sayxSPUwoaiksUD1SPT09cz8tMToxO0Uoe3R5cGU6XCJkZWNheVwiLGZyb206byx2ZWxvY2l0eTpsLHRpbWVDb25zdGFudDpwLHBvd2VyOmYscmVzdERlbHRhOnksbW9kaWZ5VGFyZ2V0Oncsb25VcGRhdGU6TyhqKT9mdW5jdGlvbihlKXtNPWssaz1lLGw9dWUoZS1NLGEuZ2V0RnJhbWVEYXRhKCkuZGVsdGEpLCgxPT09UCYmZT5SfHwtMT09PVAmJmU8UikmJlMoe2Zyb206ZSx0bzpSLHZlbG9jaXR5Omx9KX06dm9pZCAwfSl9cmV0dXJue3N0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dC5zdG9wKCl9fX0sdC5pbnRlcnBvbGF0ZT1WLHQuaXNQb2ludD1tZSx0LmlzUG9pbnQzRD1DZSx0LmtleWZyYW1lcz1vZSx0LmxpbmVhcj1VLHQubWlycm9yRWFzaW5nPVosdC5taXg9eCx0Lm1peENvbG9yPVMsdC5taXhDb21wbGV4PUgsdC5waXBlPVIsdC5wb2ludEZyb21WZWN0b3I9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXZlKHQpLHt4Om4qTWF0aC5jb3ModCkrZS54LHk6bipNYXRoLnNpbih0KStlLnl9fSx0LnByb2dyZXNzPWIsdC5yYWRpYW5zVG9EZWdyZWVzPWZlLHQucmV2ZXJzZUVhc2luZz1ELHQuc21vb3RoPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPTUwKTt2YXIgdD0wLG49MDtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG89YS5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXAsaT1vIT09bj9vLW46MCxsPWk/YmUodCxyLGksZSk6dDtyZXR1cm4gbj1vLHQ9bCxsfX0sdC5zbW9vdGhGcmFtZT1iZSx0LnNuYXA9ZnVuY3Rpb24oZSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQvZSkqZX07dmFyIHQ9MCxuPWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbz1NYXRoLmFicyhlWzBdLXIpO2Zvcih0PTE7dDxuO3QrKyl7dmFyIGk9ZVt0XSxhPU1hdGguYWJzKGktcik7aWYoMD09PWEpcmV0dXJuIGk7aWYoYT5vKXJldHVybiBlW3QtMV07aWYodD09PW4tMSlyZXR1cm4gaTtvPWF9fX0sdC5zcHJpbmc9eSx0LnN0ZXBzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PVwiZW5kXCIpLGZ1bmN0aW9uKG4pe3ZhciByPShuPVwiZW5kXCI9PT10P01hdGgubWluKG4sLjk5OSk6TWF0aC5tYXgobiwuMDAxKSkqZSxvPVwiZW5kXCI9PT10P01hdGguZmxvb3Iocik6TWF0aC5jZWlsKHIpO3JldHVybiBzKDAsMSxvL2UpfX0sdC50b0RlY2ltYWw9d2UsdC52ZWxvY2l0eVBlckZyYW1lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUvKDFlMy90KX0sdC52ZWxvY2l0eVBlclNlY29uZD11ZSx0LndyYXA9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQtZTtyZXR1cm4oKG4tZSklcityKSVyK2V9fSwyNzAzOihlLHQsbik9Pnt2YXIgcj1uKDQxNCk7ZnVuY3Rpb24gbygpe31mdW5jdGlvbiBpKCl7fWkucmVzZXRXYXJuaW5nQ2FjaGU9byxlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLG8saSxhKXtpZihhIT09cil7dmFyIGw9bmV3IEVycm9yKFwiQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlc1wiKTt0aHJvdyBsLm5hbWU9XCJJbnZhcmlhbnQgVmlvbGF0aW9uXCIsbH19ZnVuY3Rpb24gdCgpe3JldHVybiBlfWUuaXNSZXF1aXJlZD1lO3ZhciBuPXthcnJheTplLGJpZ2ludDplLGJvb2w6ZSxmdW5jOmUsbnVtYmVyOmUsb2JqZWN0OmUsc3RyaW5nOmUsc3ltYm9sOmUsYW55OmUsYXJyYXlPZjp0LGVsZW1lbnQ6ZSxlbGVtZW50VHlwZTplLGluc3RhbmNlT2Y6dCxub2RlOmUsb2JqZWN0T2Y6dCxvbmVPZjp0LG9uZU9mVHlwZTp0LHNoYXBlOnQsZXhhY3Q6dCxjaGVja1Byb3BUeXBlczppLHJlc2V0V2FybmluZ0NhY2hlOm99O3JldHVybiBuLlByb3BUeXBlcz1uLG59fSw1Njk3OihlLHQsbik9PntlLmV4cG9ydHM9bigyNzAzKSgpfSw0MTQ6ZT0+e2UuZXhwb3J0cz1cIlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEXCJ9LDcyOTI6KGUsdCxuKT0+e24ucih0KSxuLmQodCx7Q2FsZW5kYXI6KCk9PkpuLENlbnR1cnlWaWV3OigpPT5rdCxEZWNhZGVWaWV3OigpPT5OdCxNb250aFZpZXc6KCk9PlNuLE5hdmlnYXRpb246KCk9Pk5lLFllYXJWaWV3OigpPT50bixkZWZhdWx0OigpPT50cn0pO3ZhciByPW4oNjY4OSksbz1uLm4ociksaT1uKDU2OTcpLGE9bi5uKGkpO2Z1bmN0aW9uIGwoZSl7dmFyIHQsbixyPVwiXCI7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwibnVtYmVyXCI9PXR5cGVvZiBlKXIrPWU7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgZSlpZihBcnJheS5pc0FycmF5KGUpKWZvcih0PTA7dDxlLmxlbmd0aDt0KyspZVt0XSYmKG49bChlW3RdKSkmJihyJiYocis9XCIgXCIpLHIrPW4pO2Vsc2UgZm9yKHQgaW4gZSllW3RdJiYociYmKHIrPVwiIFwiKSxyKz10KTtyZXR1cm4gcn1jb25zdCBzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQsbj0wLHI9XCJcIjtuPGFyZ3VtZW50cy5sZW5ndGg7KShlPWFyZ3VtZW50c1tuKytdKSYmKHQ9bChlKSkmJihyJiYocis9XCIgXCIpLHIrPXQpO3JldHVybiByfTt2YXIgYz1uKDc3MyksdT1uLm4oYyk7ZnVuY3Rpb24gZihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9dmFyIGQ9dSgpKChmdW5jdGlvbihlKXt2YXIgdCxuPXZvaWQgMD09PWU/e306ZSxyPW4udXNlRmFsbGJhY2tMb2NhbGUsbz12b2lkIDA9PT1yfHxyLGk9bi5mYWxsYmFja0xvY2FsZSxhPXZvaWQgMD09PWk/XCJlbi1VU1wiOmksbD1bXTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXt2YXIgcz13aW5kb3cubmF2aWdhdG9yO2w9bC5jb25jYXQocy5sYW5ndWFnZXMscy5sYW5ndWFnZSxzLnVzZXJMYW5ndWFnZSxzLmJyb3dzZXJMYW5ndWFnZSxzLnN5c3RlbUxhbmd1YWdlKX1yZXR1cm4gbyYmbC5wdXNoKGEpLGZ1bmN0aW9uKGUpe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7aWYoIWV8fC0xPT09ZS5pbmRleE9mKFwiLVwiKXx8ZS50b0xvd2VyQ2FzZSgpIT09ZSlyZXR1cm4gZTt2YXIgdD1lLnNwbGl0KFwiLVwiKTtyZXR1cm4gdFswXStcIi1cIit0WzFdLnRvVXBwZXJDYXNlKCl9KSl9KCh0PWwpLmZpbHRlcigoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZSYmdC5pbmRleE9mKGUpPT09bn0pKSl9KSxmKSxwPXUoKSgoZnVuY3Rpb24oZSl7cmV0dXJuIGQoZSlbMF18fG51bGx9KSxmKTtjb25zdCBoPXA7ZnVuY3Rpb24gZyhlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIsbyl7dm9pZCAwPT09byYmKG89bik7dmFyIGk9ZShyKStvO3JldHVybiB0KGkpfX1mdW5jdGlvbiB2KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbmV3IERhdGUoZSh0KS5nZXRUaW1lKCktMSl9fWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuW2UobiksdChuKV19fWZ1bmN0aW9uIEMoZSl7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGUuZ2V0RnVsbFllYXIoKTtpZihcIm51bWJlclwiPT10eXBlb2YgZSlyZXR1cm4gZTt2YXIgdD1wYXJzZUludChlLDEwKTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmIWlzTmFOKHQpKXJldHVybiB0O3Rocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgeWVhciBmcm9tIGRhdGU6IFwiLmNvbmNhdChlLFwiLlwiKSl9ZnVuY3Rpb24geShlKXtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gZS5nZXRNb250aCgpO3Rocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgbW9udGggZnJvbSBkYXRlOiBcIi5jb25jYXQoZSxcIi5cIikpfWZ1bmN0aW9uIHcoZSl7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGUuZ2V0RGF0ZSgpO3Rocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgeWVhciBmcm9tIGRhdGU6IFwiLmNvbmNhdChlLFwiLlwiKSl9ZnVuY3Rpb24gYihlKXt2YXIgdD1DKGUpLG49dCsoMS10KSUxMDAscj1uZXcgRGF0ZTtyZXR1cm4gci5zZXRGdWxsWWVhcihuLDAsMSksci5zZXRIb3VycygwLDAsMCwwKSxyfXZhciB4PWcoQyxiLC0xMDApLF89ZyhDLGIsMTAwKSxPPXYoXyksTD1nKEMsTywtMTAwKSxFPShnKEMsTywxMDApLG0oYixPKSk7ZnVuY3Rpb24gUyhlKXt2YXIgdD1DKGUpLG49dCsoMS10KSUxMCxyPW5ldyBEYXRlO3JldHVybiByLnNldEZ1bGxZZWFyKG4sMCwxKSxyLnNldEhvdXJzKDAsMCwwLDApLHJ9dmFyIGo9ZyhDLFMsLTEwKSxNPWcoQyxTLDEwKSxrPXYoTSksUj1nKEMsaywtMTApLFA9KGcoQyxrLDEwKSxtKFMsaykpO2Z1bmN0aW9uIEkoZSl7dmFyIHQ9QyhlKSxuPW5ldyBEYXRlO3JldHVybiBuLnNldEZ1bGxZZWFyKHQsMCwxKSxuLnNldEhvdXJzKDAsMCwwLDApLG59dmFyIEE9ZyhDLEksLTEpLFQ9ZyhDLEksMSksSD12KFQpLEI9ZyhDLEgsLTEpLFY9KGcoQyxILDEpLG0oSSxIKSk7ZnVuY3Rpb24gRChlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZvaWQgMD09PXImJihyPXQpO3ZhciBvPUMobiksaT15KG4pK3IsYT1uZXcgRGF0ZTtyZXR1cm4gYS5zZXRGdWxsWWVhcihvLGksMSksYS5zZXRIb3VycygwLDAsMCwwKSxlKGEpfX1mdW5jdGlvbiBaKGUpe3ZhciB0PUMoZSksbj15KGUpLHI9bmV3IERhdGU7cmV0dXJuIHIuc2V0RnVsbFllYXIodCxuLDEpLHIuc2V0SG91cnMoMCwwLDAsMCkscn12YXIgJD1EKFosLTEpLE49RChaLDEpLEY9dihOKSxVPUQoRiwtMSksVz0oRChGLDEpLG0oWixGKSk7ZnVuY3Rpb24geihlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZvaWQgMD09PXImJihyPXQpO3ZhciBvPUMobiksaT15KG4pLGE9dyhuKStyLGw9bmV3IERhdGU7cmV0dXJuIGwuc2V0RnVsbFllYXIobyxpLGEpLGwuc2V0SG91cnMoMCwwLDAsMCksZShsKX19ZnVuY3Rpb24gRyhlKXt2YXIgdD1DKGUpLG49eShlKSxyPXcoZSksbz1uZXcgRGF0ZTtyZXR1cm4gby5zZXRGdWxsWWVhcih0LG4sciksby5zZXRIb3VycygwLDAsMCwwKSxvfXooRywtMSk7dmFyIHEsWT12KHooRywxKSksSz0oeihZLC0xKSx6KFksMSksbShHLFkpKTtmdW5jdGlvbiBYKGUpe3JldHVybiB3KEYoZSkpfWZ1bmN0aW9uIEooZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBRKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX12YXIgZWUsdGU9e0FSQUJJQzpcIkFyYWJpY1wiLEhFQlJFVzpcIkhlYnJld1wiLElTT184NjAxOlwiSVNPIDg2MDFcIixVUzpcIlVTXCJ9LG5lPShRKHE9e30sdGUuVVMsW1wiZW4tQ0FcIixcImVuLVVTXCIsXCJlcy1BUlwiLFwiZXMtQk9cIixcImVzLUNMXCIsXCJlcy1DT1wiLFwiZXMtQ1JcIixcImVzLURPXCIsXCJlcy1FQ1wiLFwiZXMtR1RcIixcImVzLUhOXCIsXCJlcy1NWFwiLFwiZXMtTklcIixcImVzLVBBXCIsXCJlcy1QRVwiLFwiZXMtUFJcIixcImVzLVNWXCIsXCJlcy1WRVwiLFwicHQtQlJcIl0pLFEocSx0ZS5BUkFCSUMsW1wiYXJcIixcImFyLUFFXCIsXCJhci1CSFwiLFwiYXItRFpcIixcImFyLUVHXCIsXCJhci1JUVwiLFwiYXItSk9cIixcImFyLUtXXCIsXCJhci1MWVwiLFwiYXItT01cIixcImFyLVFBXCIsXCJhci1TQVwiLFwiYXItU0RcIixcImFyLVNZXCIsXCJhci1ZRVwiLFwiZHZcIixcImR2LU1WXCIsXCJwc1wiLFwicHMtQVJcIl0pLFEocSx0ZS5IRUJSRVcsW1wiaGVcIixcImhlLUlMXCJdKSxxKSxyZT0oZWU9QXJyYXkoNyksZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gSihlKX0oZWUpfHxmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlZSl8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIEooZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuXCJPYmplY3RcIj09PW4mJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW58fFwiU2V0XCI9PT1uP0FycmF5LmZyb20oZSk6XCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP0ooZSx0KTp2b2lkIDB9fShlZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0pKSxvZT1uZXcgTWFwO2Z1bmN0aW9uIGllKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcj10fHxoKCk7b2UuaGFzKHIpfHxvZS5zZXQocixuZXcgTWFwKTt2YXIgbz1vZS5nZXQocik7cmV0dXJuIG8uaGFzKGUpfHxvLnNldChlLG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHIsZSkuZm9ybWF0KSxvLmdldChlKShuKX19KGUpKHQsZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGUoZSk7cmV0dXJuIG5ldyBEYXRlKHQuc2V0SG91cnMoMTIpKX0obikpfX1pZSh7ZGF5OlwibnVtZXJpY1wiLG1vbnRoOlwibnVtZXJpY1wiLHllYXI6XCJudW1lcmljXCJ9KTt2YXIgYWU9aWUoe2RheTpcIm51bWVyaWNcIn0pLGxlPWllKHtkYXk6XCJudW1lcmljXCIsbW9udGg6XCJsb25nXCIseWVhcjpcIm51bWVyaWNcIn0pLHNlPWllKHttb250aDpcImxvbmdcIn0pLGNlPWllKHttb250aDpcImxvbmdcIix5ZWFyOlwibnVtZXJpY1wifSksdWU9aWUoe3dlZWtkYXk6XCJzaG9ydFwifSksZmU9aWUoe3dlZWtkYXk6XCJsb25nXCJ9KSxkZT1pZSh7eWVhcjpcIm51bWVyaWNcIn0pLHBlPXJlWzBdLGhlPXJlWzVdLGdlPXJlWzZdO2Z1bmN0aW9uIHZlKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0ZS5JU09fODYwMSxuPWUuZ2V0RGF5KCk7c3dpdGNoKHQpe2Nhc2UgdGUuSVNPXzg2MDE6cmV0dXJuKG4rNiklNztjYXNlIHRlLkFSQUJJQzpyZXR1cm4obisxKSU3O2Nhc2UgdGUuSEVCUkVXOmNhc2UgdGUuVVM6cmV0dXJuIG47ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBjYWxlbmRhciB0eXBlLlwiKX19ZnVuY3Rpb24gbWUoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRlLklTT184NjAxLG49QyhlKSxyPXkoZSksbz1lLmdldERhdGUoKS12ZShlLHQpO3JldHVybiBuZXcgRGF0ZShuLHIsbyl9ZnVuY3Rpb24gQ2UoZSx0KXtzd2l0Y2goZSl7Y2FzZVwiY2VudHVyeVwiOnJldHVybiBiKHQpO2Nhc2VcImRlY2FkZVwiOnJldHVybiBTKHQpO2Nhc2VcInllYXJcIjpyZXR1cm4gSSh0KTtjYXNlXCJtb250aFwiOnJldHVybiBaKHQpO2Nhc2VcImRheVwiOnJldHVybiBHKHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fWZ1bmN0aW9uIHllKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4gXyh0KTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gTSh0KTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIFQodCk7Y2FzZVwibW9udGhcIjpyZXR1cm4gTih0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX12YXIgd2U9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIGoodCwtMTAwKTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIEEodCwtMTApO2Nhc2VcIm1vbnRoXCI6cmV0dXJuICQodCwtMTIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fSxiZT1mdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gTSh0LDEwMCk7Y2FzZVwieWVhclwiOnJldHVybiBUKHQsMTApO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIE4odCwxMik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19O2Z1bmN0aW9uIHhlKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4gTyh0KTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gayh0KTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIEgodCk7Y2FzZVwibW9udGhcIjpyZXR1cm4gRih0KTtjYXNlXCJkYXlcIjpyZXR1cm4gWSh0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX12YXIgX2U9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIFIodCwtMTAwKTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIEIodCwtMTApO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIFUodCwtMTIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fTtmdW5jdGlvbiBPZShlLHQpe3N3aXRjaChlKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIEUodCk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIFAodCk7Y2FzZVwieWVhclwiOnJldHVybiBWKHQpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIFcodCk7Y2FzZVwiZGF5XCI6cmV0dXJuIEsodCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19ZnVuY3Rpb24gTGUoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmRlO3JldHVybihhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCkubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSkpLmpvaW4oXCIg4oCTIFwiKX1mdW5jdGlvbiBFZShlLHQsbil7cmV0dXJuIExlKGUsdCxQKG4pKX1mdW5jdGlvbiBTZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGUuSVNPXzg2MDEsbj1lLmdldERheSgpO3N3aXRjaCh0KXtjYXNlIHRlLkFSQUJJQzpjYXNlIHRlLkhFQlJFVzpyZXR1cm4gbj09PWhlfHxuPT09Z2U7Y2FzZSB0ZS5JU09fODYwMTpjYXNlIHRlLlVTOnJldHVybiBuPT09Z2V8fG49PT1wZTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGNhbGVuZGFyIHR5cGUuXCIpfX1mdW5jdGlvbiBqZShlKXtyZXR1cm4gamU9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0samUoZSl9dmFyIE1lPU9iamVjdC52YWx1ZXModGUpLGtlPVtcImNlbnR1cnlcIixcImRlY2FkZVwiLFwieWVhclwiLFwibW9udGhcIl0sUmU9YSgpLm9uZU9mKE1lKSxQZT1hKCkub25lT2ZUeXBlKFthKCkuc3RyaW5nLGEoKS5hcnJheU9mKGEoKS5zdHJpbmcpXSksSWU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWVbdF07aWYoIXIpcmV0dXJuIG51bGw7aWYoIShyIGluc3RhbmNlb2YgRGF0ZSkpcmV0dXJuIG5ldyBFcnJvcihcIkludmFsaWQgcHJvcCBgXCIuY29uY2F0KHQsXCJgIG9mIHR5cGUgYFwiKS5jb25jYXQoamUociksXCJgIHN1cHBsaWVkIHRvIGBcIikuY29uY2F0KG4sXCJgLCBleHBlY3RlZCBpbnN0YW5jZSBvZiBgRGF0ZWAuXCIpKTt2YXIgbz1lLm1heERhdGU7cmV0dXJuIG8mJnI+bz9uZXcgRXJyb3IoXCJJbnZhbGlkIHByb3AgYFwiLmNvbmNhdCh0LFwiYCBvZiB0eXBlIGBcIikuY29uY2F0KGplKHIpLFwiYCBzdXBwbGllZCB0byBgXCIpLmNvbmNhdChuLFwiYCwgbWluRGF0ZSBjYW5ub3QgYmUgbGFyZ2VyIHRoYW4gbWF4RGF0ZS5cIikpOm51bGx9LEFlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lW3RdO2lmKCFyKXJldHVybiBudWxsO2lmKCEociBpbnN0YW5jZW9mIERhdGUpKXJldHVybiBuZXcgRXJyb3IoXCJJbnZhbGlkIHByb3AgYFwiLmNvbmNhdCh0LFwiYCBvZiB0eXBlIGBcIikuY29uY2F0KGplKHIpLFwiYCBzdXBwbGllZCB0byBgXCIpLmNvbmNhdChuLFwiYCwgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgYERhdGVgLlwiKSk7dmFyIG89ZS5taW5EYXRlO3JldHVybiBvJiZyPG8/bmV3IEVycm9yKFwiSW52YWxpZCBwcm9wIGBcIi5jb25jYXQodCxcImAgb2YgdHlwZSBgXCIpLmNvbmNhdChqZShyKSxcImAgc3VwcGxpZWQgdG8gYFwiKS5jb25jYXQobixcImAsIG1heERhdGUgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiBtaW5EYXRlLlwiKSk6bnVsbH0sVGU9YSgpLm9uZU9mVHlwZShbYSgpLmZ1bmMsYSgpLnNoYXBlKHtjdXJyZW50OmEoKS5hbnl9KV0pLEhlPWEoKS5vbmVPZlR5cGUoW2EoKS5pbnN0YW5jZU9mKERhdGUpLGEoKS5hcnJheU9mKGEoKS5pbnN0YW5jZU9mKERhdGUpKV0pLEJlPWEoKS5hcnJheU9mKGEoKS5vbmVPZihrZSkpLFZlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lW3RdLG89ZS52aWV3c3x8a2U7cmV0dXJuIHZvaWQgMCE9PXImJi0xPT09by5pbmRleE9mKHIpP25ldyBFcnJvcihcIkludmFsaWQgcHJvcCBgXCIuY29uY2F0KHQsXCJgIG9mIHZhbHVlIGBcIikuY29uY2F0KHIsXCJgIHN1cHBsaWVkIHRvIGBcIikuY29uY2F0KG4sXCJgLCBleHBlY3RlZCBvbmUgb2YgW1wiKS5jb25jYXQoby5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybidcIicuY29uY2F0KGUsJ1wiJyl9KSkuam9pbihcIiwgXCIpLFwiXS5cIikpOm51bGx9O1ZlLmlzUmVxdWlyZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWVbdF07cmV0dXJuIHI/VmUoZSx0LG4pOm5ldyBFcnJvcihcIlRoZSBwcm9wIGBcIi5jb25jYXQodCxcImAgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluIGBcIikuY29uY2F0KG4sXCJgLCBidXQgaXRzIHZhbHVlIGlzIGBcIikuY29uY2F0KHIsXCJgLlwiKSl9O3ZhciBEZT17YWN0aXZlU3RhcnREYXRlOmEoKS5pbnN0YW5jZU9mKERhdGUpLmlzUmVxdWlyZWQsaG92ZXI6YSgpLmluc3RhbmNlT2YoRGF0ZSksbG9jYWxlOmEoKS5zdHJpbmcsbWF4RGF0ZTpBZSxtaW5EYXRlOkllLG9uQ2xpY2s6YSgpLmZ1bmMsb25Nb3VzZU92ZXI6YSgpLmZ1bmMsdGlsZUNsYXNzTmFtZTphKCkub25lT2ZUeXBlKFthKCkuZnVuYyxQZV0pLHRpbGVDb250ZW50OmEoKS5vbmVPZlR5cGUoW2EoKS5mdW5jLGEoKS5ub2RlXSksdmFsdWU6SGUsdmFsdWVUeXBlOmEoKS5zdHJpbmd9LFplPXthY3RpdmVTdGFydERhdGU6YSgpLmluc3RhbmNlT2YoRGF0ZSkuaXNSZXF1aXJlZCxjbGFzc2VzOmEoKS5hcnJheU9mKGEoKS5zdHJpbmcpLmlzUmVxdWlyZWQsZGF0ZTphKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGxvY2FsZTphKCkuc3RyaW5nLG1heERhdGU6QWUsbWluRGF0ZTpJZSxvbkNsaWNrOmEoKS5mdW5jLG9uTW91c2VPdmVyOmEoKS5mdW5jLHN0eWxlOmEoKS5vYmplY3RPZihhKCkub25lT2ZUeXBlKFthKCkuc3RyaW5nLGEoKS5udW1iZXJdKSksdGlsZUNsYXNzTmFtZTphKCkub25lT2ZUeXBlKFthKCkuZnVuYyxQZV0pLHRpbGVDb250ZW50OmEoKS5vbmVPZlR5cGUoW2EoKS5mdW5jLGEoKS5ub2RlXSksdGlsZURpc2FibGVkOmEoKS5mdW5jfSwkZT1cInJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uXCI7ZnVuY3Rpb24gTmUoZSl7dmFyIHQsbj1lLmFjdGl2ZVN0YXJ0RGF0ZSxyPWUuZHJpbGxVcCxpPWUuZm9ybWF0TW9udGhZZWFyLGE9dm9pZCAwPT09aT9jZTppLGw9ZS5mb3JtYXRZZWFyLHM9dm9pZCAwPT09bD9kZTpsLGM9ZS5sb2NhbGUsdT1lLm1heERhdGUsZj1lLm1pbkRhdGUsZD1lLm5hdmlnYXRpb25BcmlhTGFiZWwsaD12b2lkIDA9PT1kP1wiXCI6ZCxnPWUubmF2aWdhdGlvbkFyaWFMaXZlLHY9ZS5uYXZpZ2F0aW9uTGFiZWwsbT1lLm5leHQyQXJpYUxhYmVsLEM9dm9pZCAwPT09bT9cIlwiOm0seT1lLm5leHQyTGFiZWwsdz12b2lkIDA9PT15P1wiwrtcIjp5LGI9ZS5uZXh0QXJpYUxhYmVsLF89dm9pZCAwPT09Yj9cIlwiOmIsTz1lLm5leHRMYWJlbCxTPXZvaWQgMD09PU8/XCLigLpcIjpPLE09ZS5wcmV2MkFyaWFMYWJlbCxrPXZvaWQgMD09PU0/XCJcIjpNLFA9ZS5wcmV2MkxhYmVsLEk9dm9pZCAwPT09UD9cIsKrXCI6UCxUPWUucHJldkFyaWFMYWJlbCxIPXZvaWQgMD09PVQ/XCJcIjpULFY9ZS5wcmV2TGFiZWwsRD12b2lkIDA9PT1WP1wi4oC5XCI6VixaPWUuc2V0QWN0aXZlU3RhcnREYXRlLE49ZS5zaG93RG91YmxlVmlldyxGPWUudmlldyxXPWUudmlld3MuaW5kZXhPZihGKT4wLHo9XCJjZW50dXJ5XCIhPT1GLEc9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiY2VudHVyeVwiOnJldHVybiB4KHQpO2Nhc2VcImRlY2FkZVwiOnJldHVybiBqKHQpO2Nhc2VcInllYXJcIjpyZXR1cm4gQSh0KTtjYXNlXCJtb250aFwiOnJldHVybiAkKHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fShGLG4pLHE9eiYmd2UoRixuKSxZPXllKEYsbiksSz16JiZiZShGLG4pLFg9ZnVuY3Rpb24oKXtpZihHLmdldEZ1bGxZZWFyKCk8MClyZXR1cm4hMDt2YXIgZT1mdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIEwodCk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIFIodCk7Y2FzZVwieWVhclwiOnJldHVybiBCKHQpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIFUodCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19KEYsbik7cmV0dXJuIGYmJmY+PWV9KCksSj16JiZmdW5jdGlvbigpe2lmKHEuZ2V0RnVsbFllYXIoKTwwKXJldHVybiEwO3ZhciBlPV9lKEYsbik7cmV0dXJuIGYmJmY+PWV9KCksUT11JiZ1PFksZWU9eiYmdSYmdTxLO2Z1bmN0aW9uIHRlKGUpe3ZhciB0PWZ1bmN0aW9uKCl7c3dpdGNoKEYpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiBMZShlLHQsRShuKSl9KGMscyxlKTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gRWUoYyxzLGUpO2Nhc2VcInllYXJcIjpyZXR1cm4gcyhjLGUpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIGEoYyxlKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdmlldzogXCIuY29uY2F0KEYsXCIuXCIpKX19KCk7cmV0dXJuIHY/dih7ZGF0ZTplLGxhYmVsOnQsbG9jYWxlOmN8fHAoKSx2aWV3OkZ9KTp0fXJldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6JGV9LG51bGwhPT1JJiZ6JiZvKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHtcImFyaWEtbGFiZWxcIjprLGNsYXNzTmFtZTpcIlwiLmNvbmNhdCgkZSxcIl9fYXJyb3cgXCIpLmNvbmNhdCgkZSxcIl9fcHJldjItYnV0dG9uXCIpLGRpc2FibGVkOkosb25DbGljazpmdW5jdGlvbigpe1oocSxcInByZXYyXCIpfSx0eXBlOlwiYnV0dG9uXCJ9LEkpLG51bGwhPT1EJiZvKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHtcImFyaWEtbGFiZWxcIjpILGNsYXNzTmFtZTpcIlwiLmNvbmNhdCgkZSxcIl9fYXJyb3cgXCIpLmNvbmNhdCgkZSxcIl9fcHJldi1idXR0b25cIiksZGlzYWJsZWQ6WCxvbkNsaWNrOmZ1bmN0aW9uKCl7WihHLFwicHJldlwiKX0sdHlwZTpcImJ1dHRvblwifSxEKSwodD1cIlwiLmNvbmNhdCgkZSxcIl9fbGFiZWxcIiksbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6aCxcImFyaWEtbGl2ZVwiOmcsY2xhc3NOYW1lOnQsZGlzYWJsZWQ6IVcsb25DbGljazpyLHN0eWxlOntmbGV4R3JvdzoxfSx0eXBlOlwiYnV0dG9uXCJ9LG8oKS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJcIi5jb25jYXQodCxcIl9fbGFiZWxUZXh0IFwiKS5jb25jYXQodCxcIl9fbGFiZWxUZXh0LS1mcm9tXCIpfSx0ZShuKSksTiYmbygpLmNyZWF0ZUVsZW1lbnQobygpLkZyYWdtZW50LG51bGwsbygpLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpcIlwiLmNvbmNhdCh0LFwiX19kaXZpZGVyXCIpfSxcIiDigJMgXCIpLG8oKS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJcIi5jb25jYXQodCxcIl9fbGFiZWxUZXh0IFwiKS5jb25jYXQodCxcIl9fbGFiZWxUZXh0LS10b1wiKX0sdGUoWSkpKSkpLG51bGwhPT1TJiZvKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHtcImFyaWEtbGFiZWxcIjpfLGNsYXNzTmFtZTpcIlwiLmNvbmNhdCgkZSxcIl9fYXJyb3cgXCIpLmNvbmNhdCgkZSxcIl9fbmV4dC1idXR0b25cIiksZGlzYWJsZWQ6USxvbkNsaWNrOmZ1bmN0aW9uKCl7WihZLFwibmV4dFwiKX0sdHlwZTpcImJ1dHRvblwifSxTKSxudWxsIT09dyYmeiYmbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6QyxjbGFzc05hbWU6XCJcIi5jb25jYXQoJGUsXCJfX2Fycm93IFwiKS5jb25jYXQoJGUsXCJfX25leHQyLWJ1dHRvblwiKSxkaXNhYmxlZDplZSxvbkNsaWNrOmZ1bmN0aW9uKCl7WihLLFwibmV4dDJcIil9LHR5cGU6XCJidXR0b25cIn0sdykpfU5lLnByb3BUeXBlcz17YWN0aXZlU3RhcnREYXRlOmEoKS5pbnN0YW5jZU9mKERhdGUpLmlzUmVxdWlyZWQsZHJpbGxVcDphKCkuZnVuYy5pc1JlcXVpcmVkLGZvcm1hdE1vbnRoWWVhcjphKCkuZnVuYyxmb3JtYXRZZWFyOmEoKS5mdW5jLGxvY2FsZTphKCkuc3RyaW5nLG1heERhdGU6YSgpLmluc3RhbmNlT2YoRGF0ZSksbWluRGF0ZTphKCkuaW5zdGFuY2VPZihEYXRlKSxuYXZpZ2F0aW9uQXJpYUxhYmVsOmEoKS5zdHJpbmcsbmF2aWdhdGlvbkFyaWFMaXZlOmEoKS5zdHJpbmcsbmF2aWdhdGlvbkxhYmVsOmEoKS5mdW5jLG5leHQyQXJpYUxhYmVsOmEoKS5zdHJpbmcsbmV4dDJMYWJlbDphKCkubm9kZSxuZXh0QXJpYUxhYmVsOmEoKS5zdHJpbmcsbmV4dExhYmVsOmEoKS5ub2RlLHByZXYyQXJpYUxhYmVsOmEoKS5zdHJpbmcscHJldjJMYWJlbDphKCkubm9kZSxwcmV2QXJpYUxhYmVsOmEoKS5zdHJpbmcscHJldkxhYmVsOmEoKS5ub2RlLHNldEFjdGl2ZVN0YXJ0RGF0ZTphKCkuZnVuYy5pc1JlcXVpcmVkLHNob3dEb3VibGVWaWV3OmEoKS5ib29sLHZpZXc6VmUuaXNSZXF1aXJlZCx2aWV3czpCZS5pc1JlcXVpcmVkfTt2YXIgRmU9W1wiY2hpbGRyZW5cIixcImNsYXNzTmFtZVwiLFwiZGlyZWN0aW9uXCIsXCJjb3VudFwiLFwib2Zmc2V0XCIsXCJzdHlsZVwiLFwid3JhcFwiXTtmdW5jdGlvbiBVZSgpe3JldHVybiBVZT1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LFVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBXZShlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gemUoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/V2UoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtHZShlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6V2UoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gR2UoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIHFlKGUpe3JldHVyblwiXCIuY29uY2F0KGUsXCIlXCIpfWZ1bmN0aW9uIFllKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmNsYXNzTmFtZSxyPWUuZGlyZWN0aW9uLGk9ZS5jb3VudCxhPWUub2Zmc2V0LGw9ZS5zdHlsZSxzPWUud3JhcCxjPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxpPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxGZSk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsVWUoe2NsYXNzTmFtZTpuLHN0eWxlOnplKHtkaXNwbGF5OlwiZmxleFwiLGZsZXhEaXJlY3Rpb246cixmbGV4V3JhcDpzP1wid3JhcFwiOlwibm8td3JhcFwifSxsKX0sYyksbygpLkNoaWxkcmVuLm1hcCh0LChmdW5jdGlvbihlLHQpe3JldHVybiBvKCkuY2xvbmVFbGVtZW50KGUsemUoemUoe30sZS5wcm9wcykse30se3N0eWxlOntmbGV4QmFzaXM6cWUoMTAwL2kpLGZsZXhTaHJpbms6MCxmbGV4R3JvdzowLG92ZXJmbG93OlwiaGlkZGVuXCIsbWFyZ2luTGVmdDphJiYwPT09dD9xZSgxMDAqYS9pKTpudWxsfX0pKX0pKSl9ZnVuY3Rpb24gS2UoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIFhlKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIFhlKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVyblwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bj9BcnJheS5mcm9tKGUpOlwiQXJndW1lbnRzXCI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9YZShlLHQpOnZvaWQgMH19KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIFhlKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gSmUoZSx0KXtyZXR1cm4gdFswXTw9ZSYmdFsxXT49ZX1mdW5jdGlvbiBRZShlLHQpe3JldHVybiBKZShlWzBdLHQpfHxKZShlWzFdLHQpfWZ1bmN0aW9uIGV0KGUsdCxuKXt2YXIgcj1bXTtpZihRZSh0LGUpKXtyLnB1c2gobik7dmFyIG89SmUoZVswXSx0KSxpPUplKGVbMV0sdCk7byYmci5wdXNoKFwiXCIuY29uY2F0KG4sXCJTdGFydFwiKSksaSYmci5wdXNoKFwiXCIuY29uY2F0KG4sXCJFbmRcIikpLG8mJmkmJnIucHVzaChcIlwiLmNvbmNhdChuLFwiQm90aEVuZHNcIikpfXJldHVybiByfWZ1bmN0aW9uIHR0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS52YWx1ZSxuPWUudmFsdWVUeXBlLHI9ZS5kYXRlLG89ZS5kYXRlVHlwZSxpPWUuaG92ZXIsYT1cInJlYWN0LWNhbGVuZGFyX190aWxlXCIsbD1bYV07aWYoIXIpcmV0dXJuIGw7aWYoIUFycmF5LmlzQXJyYXkocikmJiFvKXRocm93IG5ldyBFcnJvcihcImdldFRpbGVDbGFzc2VzKCk6IFVuYWJsZSB0byBnZXQgdGlsZSBhY3Rpdml0eSBjbGFzc2VzIGJlY2F1c2Ugb25lIG9yIG1vcmUgcmVxdWlyZWQgYXJndW1lbnRzIHdlcmUgbm90IHBhc3NlZC5cIik7dmFyIHM9bmV3IERhdGUsYz1BcnJheS5pc0FycmF5KHIpP3I6T2UobyxyKTtpZihKZShzLGMpJiZsLnB1c2goXCJcIi5jb25jYXQoYSxcIi0tbm93XCIpKSwhdClyZXR1cm4gbDtpZighQXJyYXkuaXNBcnJheSh0KSYmIW4pdGhyb3cgbmV3IEVycm9yKFwiZ2V0VGlsZUNsYXNzZXMoKTogVW5hYmxlIHRvIGdldCB0aWxlIGFjdGl2aXR5IGNsYXNzZXMgYmVjYXVzZSBvbmUgb3IgbW9yZSByZXF1aXJlZCBhcmd1bWVudHMgd2VyZSBub3QgcGFzc2VkLlwiKTt2YXIgdSxmLGQ9QXJyYXkuaXNBcnJheSh0KT90Ok9lKG4sdCk7Zj1jLCh1PWQpWzBdPD1mWzBdJiZ1WzFdPj1mWzFdP2wucHVzaChcIlwiLmNvbmNhdChhLFwiLS1hY3RpdmVcIikpOlFlKGQsYykmJmwucHVzaChcIlwiLmNvbmNhdChhLFwiLS1oYXNBY3RpdmVcIikpO3ZhciBwPWV0KGQsYyxcIlwiLmNvbmNhdChhLFwiLS1yYW5nZVwiKSk7bC5wdXNoLmFwcGx5KGwsS2UocCkpO3ZhciBoPVtdLmNvbmNhdCh0KTtpZihpJiYxPT09aC5sZW5ndGgpe3ZhciBnPWV0KGk+ZFswXT9bZFswXSxpXTpbaSxkWzBdXSxjLFwiXCIuY29uY2F0KGEsXCItLWhvdmVyXCIpKTtsLnB1c2guYXBwbHkobCxLZShnKSl9cmV0dXJuIGx9WWUucHJvcFR5cGVzPXtjaGlsZHJlbjphKCkubm9kZSxjbGFzc05hbWU6YSgpLnN0cmluZyxjb3VudDphKCkubnVtYmVyLmlzUmVxdWlyZWQsZGlyZWN0aW9uOmEoKS5zdHJpbmcsb2Zmc2V0OmEoKS5udW1iZXIsc3R5bGU6YSgpLm9iamVjdE9mKGEoKS5vbmVPZlR5cGUoW2EoKS5zdHJpbmcsYSgpLm51bWJlcl0pKSx3cmFwOmEoKS5ib29sfTt2YXIgbnQ9W1wiY2xhc3NOYW1lXCIsXCJjb3VudFwiLFwiZGF0ZVRyYW5zZm9ybVwiLFwiZGF0ZVR5cGVcIixcImVuZFwiLFwiaG92ZXJcIixcIm9mZnNldFwiLFwic3RhcnRcIixcInN0ZXBcIixcInRpbGVcIixcInZhbHVlXCIsXCJ2YWx1ZVR5cGVcIl07ZnVuY3Rpb24gcnQoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIG90KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP3J0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7aXQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOnJ0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIGl0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBhdCgpe3JldHVybiBhdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGF0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBsdChlKXtmb3IodmFyIHQ9ZS5jbGFzc05hbWUsbj1lLmNvdW50LHI9dm9pZCAwPT09bj8zOm4saT1lLmRhdGVUcmFuc2Zvcm0sYT1lLmRhdGVUeXBlLGw9ZS5lbmQscz1lLmhvdmVyLGM9ZS5vZmZzZXQsdT1lLnN0YXJ0LGY9ZS5zdGVwLGQ9dm9pZCAwPT09Zj8xOmYscD1lLnRpbGUsaD1lLnZhbHVlLGc9ZS52YWx1ZVR5cGUsdj1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30saT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsbnQpLG09W10sQz11O0M8PWw7Qys9ZCl7dmFyIHk9aShDKTttLnB1c2gobygpLmNyZWF0ZUVsZW1lbnQocCxhdCh7a2V5OnkuZ2V0VGltZSgpLGNsYXNzZXM6dHQoe3ZhbHVlOmgsdmFsdWVUeXBlOmcsZGF0ZTp5LGRhdGVUeXBlOmEsaG92ZXI6c30pLGRhdGU6eSxwb2ludDpDfSx2KSkpfXJldHVybiBvKCkuY3JlYXRlRWxlbWVudChZZSx7Y2xhc3NOYW1lOnQsY291bnQ6cixvZmZzZXQ6Yyx3cmFwOiEwfSxtKX1mdW5jdGlvbiBzdChlKXtyZXR1cm4gc3Q9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0sc3QoZSl9ZnVuY3Rpb24gY3QoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIHV0KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP2N0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7Z3QoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOmN0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIGZ0KGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1mdW5jdGlvbiBkdChlLHQpe3JldHVybiBkdD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGR0KGUsdCl9ZnVuY3Rpb24gcHQoZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIGV9ZnVuY3Rpb24gaHQoZSl7cmV0dXJuIGh0PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxodChlKX1mdW5jdGlvbiBndChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gdnQoZSx0KXtyZXR1cm4gZSYmIXR8fCFlJiZ0fHxlJiZ0JiZlLmdldFRpbWUoKSE9PXQuZ2V0VGltZSgpfWZ1bmN0aW9uIG10KGUsdCl7dmFyIG49ZS5hY3RpdmVTdGFydERhdGUscj1lLmRhdGUsbz1lLnZpZXc7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KHthY3RpdmVTdGFydERhdGU6bixkYXRlOnIsdmlldzpvfSk6dH1sdC5wcm9wVHlwZXM9b3Qob3Qoe30sRGUpLHt9LHthY3RpdmVTdGFydERhdGU6YSgpLmluc3RhbmNlT2YoRGF0ZSksY291bnQ6YSgpLm51bWJlcixkYXRlVHJhbnNmb3JtOmEoKS5mdW5jLmlzUmVxdWlyZWQsZGF0ZVR5cGU6YSgpLnN0cmluZyxvZmZzZXQ6YSgpLm51bWJlcixzdGVwOmEoKS5udW1iZXIsdGlsZTphKCkuZnVuYy5pc1JlcXVpcmVkfSk7dmFyIEN0PWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KSx0JiZkdChlLHQpfShjLGUpO3ZhciB0LG4scixpLGEsbD0oaT1jLGE9ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9aHQoaSk7aWYoYSl7dmFyIG49aHQodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxuKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKFwib2JqZWN0XCI9PT1zdCh0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7cmV0dXJuIHB0KGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gYygpe3ZhciBlOyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsYyk7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07cmV0dXJuIGd0KHB0KGU9bC5jYWxsLmFwcGx5KGwsW3RoaXNdLmNvbmNhdChuKSkpLFwic3RhdGVcIix7fSksZX1yZXR1cm4gdD1jLHI9W3trZXk6XCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWUuYWN0aXZlU3RhcnREYXRlLHI9ZS50aWxlQ2xhc3NOYW1lLG89ZS50aWxlQ29udGVudCxpPXt9O3JldHVybihyIT09dC50aWxlQ2xhc3NOYW1lUHJvcHN8fHZ0KG4sdC5hY3RpdmVTdGFydERhdGVQcm9wcykpJiYoaS50aWxlQ2xhc3NOYW1lPW10KGUsciksaS50aWxlQ2xhc3NOYW1lUHJvcHM9ciksKG8hPT10LnRpbGVDb250ZW50UHJvcHN8fHZ0KG4sdC5hY3RpdmVTdGFydERhdGVQcm9wcykpJiYoaS50aWxlQ29udGVudD1tdChlLG8pLGkudGlsZUNvbnRlbnRQcm9wcz1vKSxpLmFjdGl2ZVN0YXJ0RGF0ZVByb3BzPW4saX19XSwobj1be2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuYWN0aXZlU3RhcnREYXRlLG49ZS5jaGlsZHJlbixyPWUuY2xhc3NlcyxpPWUuZGF0ZSxhPWUuZm9ybWF0QWJicixsPWUubG9jYWxlLGM9ZS5tYXhEYXRlLHU9ZS5tYXhEYXRlVHJhbnNmb3JtLGY9ZS5taW5EYXRlLGQ9ZS5taW5EYXRlVHJhbnNmb3JtLHA9ZS5vbkNsaWNrLGg9ZS5vbk1vdXNlT3ZlcixnPWUuc3R5bGUsdj1lLnRpbGVEaXNhYmxlZCxtPWUudmlldyxDPXRoaXMuc3RhdGUseT1DLnRpbGVDbGFzc05hbWUsdz1DLnRpbGVDb250ZW50O3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHtjbGFzc05hbWU6cyhyLHkpLGRpc2FibGVkOmYmJmQoZik+aXx8YyYmdShjKTxpfHx2JiZ2KHthY3RpdmVTdGFydERhdGU6dCxkYXRlOmksdmlldzptfSksb25DbGljazpwJiZmdW5jdGlvbihlKXtyZXR1cm4gcChpLGUpfSxvbkZvY3VzOmgmJmZ1bmN0aW9uKCl7cmV0dXJuIGgoaSl9LG9uTW91c2VPdmVyOmgmJmZ1bmN0aW9uKCl7cmV0dXJuIGgoaSl9LHN0eWxlOmcsdHlwZTpcImJ1dHRvblwifSxhP28oKS5jcmVhdGVFbGVtZW50KFwiYWJiclwiLHtcImFyaWEtbGFiZWxcIjphKGwsaSl9LG4pOm4sdyl9fV0pJiZmdCh0LnByb3RvdHlwZSxuKSxyJiZmdCh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksY30oci5Db21wb25lbnQpO0N0LnByb3BUeXBlcz11dCh1dCh7fSxaZSkse30se2NoaWxkcmVuOmEoKS5ub2RlLmlzUmVxdWlyZWQsZm9ybWF0QWJicjphKCkuZnVuYyxtYXhEYXRlVHJhbnNmb3JtOmEoKS5mdW5jLmlzUmVxdWlyZWQsbWluRGF0ZVRyYW5zZm9ybTphKCkuZnVuYy5pc1JlcXVpcmVkfSk7dmFyIHl0PVtcImNsYXNzZXNcIixcImZvcm1hdFllYXJcIl07ZnVuY3Rpb24gd3QoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIGJ0KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP3d0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7eHQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOnd0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIHh0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBfdCgpe3JldHVybiBfdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LF90LmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgT3Q9XCJyZWFjdC1jYWxlbmRhcl9fY2VudHVyeS12aWV3X19kZWNhZGVzX19kZWNhZGVcIjtmdW5jdGlvbiBMdChlKXt2YXIgdD1lLmNsYXNzZXMsbj1lLmZvcm1hdFllYXIscj12b2lkIDA9PT1uP2RlOm4saT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30saT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUseXQpLGE9aS5kYXRlLGw9aS5sb2NhbGU7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KEN0LF90KHt9LGkse2NsYXNzZXM6W10uY29uY2F0KHQsT3QpLG1heERhdGVUcmFuc2Zvcm06ayxtaW5EYXRlVHJhbnNmb3JtOlMsdmlldzpcImNlbnR1cnlcIn0pLEVlKGwscixhKSl9ZnVuY3Rpb24gRXQoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIFN0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBqdCgpe3JldHVybiBqdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBNdChlKXt2YXIgdD1DKGIoZS5hY3RpdmVTdGFydERhdGUpKSxuPXQrOTk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KGx0LGp0KHt9LGUse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19jZW50dXJ5LXZpZXdfX2RlY2FkZXNcIixkYXRlVHJhbnNmb3JtOlMsZGF0ZVR5cGU6XCJkZWNhZGVcIixlbmQ6bixzdGFydDp0LHN0ZXA6MTAsdGlsZTpMdH0pKX1mdW5jdGlvbiBrdChlKXtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX2NlbnR1cnktdmlld1wifSxvKCkuY3JlYXRlRWxlbWVudChNdCxlKSl9THQucHJvcFR5cGVzPWJ0KGJ0KHt9LFplKSx7fSx7Zm9ybWF0WWVhcjphKCkuZnVuY30pLE10LnByb3BUeXBlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9FdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe1N0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpFdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX0oe30sRGUpO3ZhciBSdD1bXCJjbGFzc2VzXCIsXCJmb3JtYXRZZWFyXCJdO2Z1bmN0aW9uIFB0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBJdChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9QdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe0F0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpQdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBBdChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gVHQoKXtyZXR1cm4gVHQ9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxUdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIEh0PVwicmVhY3QtY2FsZW5kYXJfX2RlY2FkZS12aWV3X195ZWFyc19feWVhclwiO2Z1bmN0aW9uIEJ0KGUpe3ZhciB0PWUuY2xhc3NlcyxuPWUuZm9ybWF0WWVhcixyPXZvaWQgMD09PW4/ZGU6bixpPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxpPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxSdCksYT1pLmRhdGUsbD1pLmxvY2FsZTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoQ3QsVHQoe30saSx7Y2xhc3NlczpbXS5jb25jYXQodCxIdCksbWF4RGF0ZVRyYW5zZm9ybTpILG1pbkRhdGVUcmFuc2Zvcm06SSx2aWV3OlwiZGVjYWRlXCJ9KSxyKGwsYSkpfWZ1bmN0aW9uIFZ0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBEdChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gWnQoKXtyZXR1cm4gWnQ9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxadC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gJHQoZSl7dmFyIHQ9QyhTKGUuYWN0aXZlU3RhcnREYXRlKSksbj10Kzk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KGx0LFp0KHt9LGUse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19kZWNhZGUtdmlld19feWVhcnNcIixkYXRlVHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBEYXRlO3JldHVybiB0LnNldEZ1bGxZZWFyKGUsMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApLHR9LGRhdGVUeXBlOlwieWVhclwiLGVuZDpuLHN0YXJ0OnQsdGlsZTpCdH0pKX1mdW5jdGlvbiBOdChlKXtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX2RlY2FkZS12aWV3XCJ9LG8oKS5jcmVhdGVFbGVtZW50KCR0LGUpKX1CdC5wcm9wVHlwZXM9SXQoSXQoe30sWmUpLHt9LHtmb3JtYXRZZWFyOmEoKS5mdW5jfSksJHQucHJvcFR5cGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1Z0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7RHQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlZ0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfSh7fSxEZSk7dmFyIEZ0PVtcImNsYXNzZXNcIixcImZvcm1hdE1vbnRoXCIsXCJmb3JtYXRNb250aFllYXJcIl07ZnVuY3Rpb24gVXQoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIFd0KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1V0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7enQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlV0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIHp0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBHdCgpe3JldHVybiBHdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LEd0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgcXQ9XCJyZWFjdC1jYWxlbmRhcl9feWVhci12aWV3X19tb250aHNfX21vbnRoXCI7ZnVuY3Rpb24gWXQoZSl7dmFyIHQ9ZS5jbGFzc2VzLG49ZS5mb3JtYXRNb250aCxyPXZvaWQgMD09PW4/c2U6bixpPWUuZm9ybWF0TW9udGhZZWFyLGE9dm9pZCAwPT09aT9jZTppLGw9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGk9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLEZ0KSxzPWwuZGF0ZSxjPWwubG9jYWxlO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChDdCxHdCh7fSxsLHtjbGFzc2VzOltdLmNvbmNhdCh0LHF0KSxmb3JtYXRBYmJyOmEsbWF4RGF0ZVRyYW5zZm9ybTpGLG1pbkRhdGVUcmFuc2Zvcm06Wix2aWV3OlwieWVhclwifSkscihjLHMpKX1mdW5jdGlvbiBLdChlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gWHQoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/S3QoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtKdChlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6S3QoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gSnQoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIFF0KCl7cmV0dXJuIFF0PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sUXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGVuKGUpe3ZhciB0PUMoZS5hY3RpdmVTdGFydERhdGUpO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChsdCxRdCh7fSxlLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9feWVhci12aWV3X19tb250aHNcIixkYXRlVHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3ZhciBuPW5ldyBEYXRlO3JldHVybiBuLnNldEZ1bGxZZWFyKHQsZSwxKSxuLnNldEhvdXJzKDAsMCwwLDApLG59LGRhdGVUeXBlOlwibW9udGhcIixlbmQ6MTEsc3RhcnQ6MCx0aWxlOll0fSkpfWZ1bmN0aW9uIHRuKGUpe3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9feWVhci12aWV3XCJ9LG8oKS5jcmVhdGVFbGVtZW50KGVuLGUpKX1ZdC5wcm9wVHlwZXM9V3QoV3Qoe30sWmUpLHt9LHtmb3JtYXRNb250aDphKCkuZnVuYyxmb3JtYXRNb250aFllYXI6YSgpLmZ1bmN9KSxlbi5wcm9wVHlwZXM9WHQoWHQoe30sRGUpLHt9LHtsb2NhbGU6YSgpLnN0cmluZ30pO3ZhciBubj1bXCJmb3JtYXREYXlcIixcImZvcm1hdExvbmdEYXRlXCIsXCJjYWxlbmRhclR5cGVcIixcImNsYXNzZXNcIixcImN1cnJlbnRNb250aEluZGV4XCJdO2Z1bmN0aW9uIHJuKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9ybihPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe2FuKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpybihPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBhbihlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gbG4oKXtyZXR1cm4gbG49T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxsbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIHNuPVwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX2RheXNfX2RheVwiO2Z1bmN0aW9uIGNuKGUpe3ZhciB0PWUuZm9ybWF0RGF5LG49dm9pZCAwPT09dD9hZTp0LHI9ZS5mb3JtYXRMb25nRGF0ZSxpPXZvaWQgMD09PXI/bGU6cixhPWUuY2FsZW5kYXJUeXBlLGw9ZS5jbGFzc2VzLHM9ZS5jdXJyZW50TW9udGhJbmRleCxjPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxpPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxubiksdT1jLmRhdGUsZj1jLmxvY2FsZTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoQ3QsbG4oe30sYyx7Y2xhc3NlczpbXS5jb25jYXQobCxzbixTZSh1LGEpP1wiXCIuY29uY2F0KHNuLFwiLS13ZWVrZW5kXCIpOm51bGwsdS5nZXRNb250aCgpIT09cz9cIlwiLmNvbmNhdChzbixcIi0tbmVpZ2hib3JpbmdNb250aFwiKTpudWxsKSxmb3JtYXRBYmJyOmksbWF4RGF0ZVRyYW5zZm9ybTpZLG1pbkRhdGVUcmFuc2Zvcm06Ryx2aWV3OlwibW9udGhcIn0pLG4oZix1KSl9Y24ucHJvcFR5cGVzPW9uKG9uKHt9LFplKSx7fSx7Y3VycmVudE1vbnRoSW5kZXg6YSgpLm51bWJlci5pc1JlcXVpcmVkLGZvcm1hdERheTphKCkuZnVuYyxmb3JtYXRMb25nRGF0ZTphKCkuZnVuY30pO3ZhciB1bj1bXCJzaG93Rml4ZWROdW1iZXJPZldlZWtzXCIsXCJzaG93TmVpZ2hib3JpbmdNb250aFwiXTtmdW5jdGlvbiBmbihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gZG4oZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIHBuKCl7cmV0dXJuIHBuPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0scG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGhuKGUpe3ZhciB0PWUuYWN0aXZlU3RhcnREYXRlLG49ZS5jYWxlbmRhclR5cGUscj1lLnNob3dGaXhlZE51bWJlck9mV2Vla3MsaT1lLnNob3dOZWlnaGJvcmluZ01vbnRoLGE9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGk9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLHVuKSxsPUModCkscz15KHQpLGM9cnx8aSx1PXZlKHQsbiksZj1jPzA6dSxkPTErKGM/LXU6MCkscD1mdW5jdGlvbigpe2lmKHIpcmV0dXJuIGQrNDItMTt2YXIgZT1YKHQpO2lmKGkpe3ZhciBvPW5ldyBEYXRlO3JldHVybiBvLnNldEZ1bGxZZWFyKGwscyxlKSxvLnNldEhvdXJzKDAsMCwwLDApLGUrKDctdmUobyxuKS0xKX1yZXR1cm4gZX0oKTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQobHQscG4oe30sYSx7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX2RheXNcIixjb3VudDo3LGN1cnJlbnRNb250aEluZGV4OnMsZGF0ZVRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgRGF0ZTtyZXR1cm4gdC5zZXRGdWxsWWVhcihsLHMsZSksdC5zZXRIb3VycygwLDAsMCwwKSx0fSxkYXRlVHlwZTpcImRheVwiLGVuZDpwLG9mZnNldDpmLHN0YXJ0OmQsdGlsZTpjbn0pKX1obi5wcm9wVHlwZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/Zm4oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtkbihlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6Zm4oT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9KHtjYWxlbmRhclR5cGU6UmUuaXNSZXF1aXJlZCxzaG93Rml4ZWROdW1iZXJPZldlZWtzOmEoKS5ib29sLHNob3dOZWlnaGJvcmluZ01vbnRoOmEoKS5ib29sfSxEZSk7dmFyIGduPVwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtkYXlzXCIsdm49XCJcIi5jb25jYXQoZ24sXCJfX3dlZWtkYXlcIik7ZnVuY3Rpb24gbW4oZSl7Zm9yKHZhciB0PWUuY2FsZW5kYXJUeXBlLG49ZS5mb3JtYXRTaG9ydFdlZWtkYXkscj12b2lkIDA9PT1uP3VlOm4saT1lLmZvcm1hdFdlZWtkYXksYT12b2lkIDA9PT1pP2ZlOmksbD1lLmxvY2FsZSxjPWUub25Nb3VzZUxlYXZlLHU9WihuZXcgRGF0ZSksZj1DKHUpLGQ9eSh1KSxwPVtdLGg9MTtoPD03O2grPTEpe3ZhciBnPW5ldyBEYXRlKGYsZCxoLXZlKHUsdCkpLHY9YShsLGcpO3AucHVzaChvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtrZXk6aCxjbGFzc05hbWU6cyh2bixTZShnLHQpJiZcIlwiLmNvbmNhdCh2bixcIi0td2Vla2VuZFwiKSl9LG8oKS5jcmVhdGVFbGVtZW50KFwiYWJiclwiLHtcImFyaWEtbGFiZWxcIjp2LHRpdGxlOnZ9LHIobCxnKS5yZXBsYWNlKFwiLlwiLFwiXCIpKSkpfXJldHVybiBvKCkuY3JlYXRlRWxlbWVudChZZSx7Y2xhc3NOYW1lOmduLGNvdW50Ojcsb25Gb2N1czpjLG9uTW91c2VPdmVyOmN9LHApfW1uLnByb3BUeXBlcz17Y2FsZW5kYXJUeXBlOlJlLmlzUmVxdWlyZWQsZm9ybWF0U2hvcnRXZWVrZGF5OmEoKS5mdW5jLGZvcm1hdFdlZWtkYXk6YSgpLmZ1bmMsbG9jYWxlOmEoKS5zdHJpbmcsb25Nb3VzZUxlYXZlOmEoKS5mdW5jfTt2YXIgQ249W1wiZGF0ZVwiLFwib25DbGlja1dlZWtOdW1iZXJcIixcIndlZWtOdW1iZXJcIl07ZnVuY3Rpb24geW4oKXtyZXR1cm4geW49T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSx5bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gd24oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIGJuKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX12YXIgeG49XCJyZWFjdC1jYWxlbmRhcl9fdGlsZVwiO2Z1bmN0aW9uIF9uKGUpe3ZhciB0PWUuZGF0ZSxuPWUub25DbGlja1dlZWtOdW1iZXIscj1lLndlZWtOdW1iZXIsaT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30saT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsQ24pLGE9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/d24oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtibihlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6d24oT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9KHtjbGFzc05hbWU6eG59LGkpLGw9bygpLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsbnVsbCxyKTtyZXR1cm4gbj9vKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHluKHt9LGEse29uQ2xpY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIG4ocix0LGUpfSx0eXBlOlwiYnV0dG9uXCJ9KSxsKTpvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLGEsbCl9ZnVuY3Rpb24gT24oZSl7dmFyIHQ9ZS5hY3RpdmVTdGFydERhdGUsbj1lLmNhbGVuZGFyVHlwZSxyPWUub25DbGlja1dlZWtOdW1iZXIsaT1lLm9uTW91c2VMZWF2ZSxhPWUuc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrcyxsPWZ1bmN0aW9uKCl7aWYoYSlyZXR1cm4gNjt2YXIgZT1YKHQpLSg3LXZlKHQsbikpO3JldHVybiAxK01hdGguY2VpbChlLzcpfSgpLHM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9Qyh0KSxyPXkodCksbz13KHQpLGk9W10sYT0wO2E8bDthKz0xKWkucHVzaChtZShuZXcgRGF0ZShlLHIsbys3KmEpLG4pKTtyZXR1cm4gaX0oKSxjPXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGUuSVNPXzg2MDEscj1uPT09dGUuVVM/dGUuVVM6dGUuSVNPXzg2MDEsbz1tZShlLG4pLGk9QyhlKSsxO2Rve3Q9bWUobmV3IERhdGUoaSwwLHI9PT10ZS5JU09fODYwMT80OjEpLG4pLGktPTF9d2hpbGUoZTx0KTtyZXR1cm4gTWF0aC5yb3VuZCgoby10KS82MDQ4ZTUpKzF9KGUsbil9KSk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFllLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9fbW9udGgtdmlld19fd2Vla051bWJlcnNcIixjb3VudDpsLGRpcmVjdGlvbjpcImNvbHVtblwiLG9uRm9jdXM6aSxvbk1vdXNlT3ZlcjppLHN0eWxlOntmbGV4QmFzaXM6XCJjYWxjKDEwMCUgKiAoMSAvIDgpXCIsZmxleFNocmluazowfX0sYy5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KF9uLHtrZXk6ZSxkYXRlOnNbdF0sb25DbGlja1dlZWtOdW1iZXI6cix3ZWVrTnVtYmVyOmV9KX0pKSl9X24ucHJvcFR5cGVzPXtkYXRlOmEoKS5pbnN0YW5jZU9mKERhdGUpLmlzUmVxdWlyZWQsb25DbGlja1dlZWtOdW1iZXI6YSgpLmZ1bmMsd2Vla051bWJlcjphKCkubm9kZS5pc1JlcXVpcmVkfSxPbi5wcm9wVHlwZXM9e2FjdGl2ZVN0YXJ0RGF0ZTphKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGNhbGVuZGFyVHlwZTpSZS5pc1JlcXVpcmVkLG9uQ2xpY2tXZWVrTnVtYmVyOmEoKS5mdW5jLG9uTW91c2VMZWF2ZTphKCkuZnVuYyxzaG93Rml4ZWROdW1iZXJPZldlZWtzOmEoKS5ib29sfTt2YXIgTG49W1wiY2FsZW5kYXJUeXBlXCIsXCJmb3JtYXRTaG9ydFdlZWtkYXlcIixcImZvcm1hdFdlZWtkYXlcIixcIm9uQ2xpY2tXZWVrTnVtYmVyXCIsXCJzaG93V2Vla051bWJlcnNcIl07ZnVuY3Rpb24gRW4oKXtyZXR1cm4gRW49T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxFbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gU24oZSl7dmFyIHQ9ZS5hY3RpdmVTdGFydERhdGUsbj1lLmxvY2FsZSxyPWUub25Nb3VzZUxlYXZlLGk9ZS5zaG93Rml4ZWROdW1iZXJPZldlZWtzLGE9ZS5jYWxlbmRhclR5cGUsbD12b2lkIDA9PT1hP2Z1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhuZSkuZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuIG5lW3RdLmluY2x1ZGVzKGUpfSkpfHx0ZS5JU09fODYwMX0obik6YSxjPWUuZm9ybWF0U2hvcnRXZWVrZGF5LHU9ZS5mb3JtYXRXZWVrZGF5LGY9ZS5vbkNsaWNrV2Vla051bWJlcixkPWUuc2hvd1dlZWtOdW1iZXJzLHA9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGk9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLExuKSxoPVwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdcIjtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOnMoaCxkP1wiXCIuY29uY2F0KGgsXCItLXdlZWtOdW1iZXJzXCIpOlwiXCIpfSxvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtzdHlsZTp7ZGlzcGxheTpcImZsZXhcIixhbGlnbkl0ZW1zOlwiZmxleC1lbmRcIn19LGQ/bygpLmNyZWF0ZUVsZW1lbnQoT24se2FjdGl2ZVN0YXJ0RGF0ZTp0LGNhbGVuZGFyVHlwZTpsLG9uQ2xpY2tXZWVrTnVtYmVyOmYsb25Nb3VzZUxlYXZlOnIsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczppfSk6bnVsbCxvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtzdHlsZTp7ZmxleEdyb3c6MSx3aWR0aDpcIjEwMCVcIn19LG8oKS5jcmVhdGVFbGVtZW50KG1uLHtjYWxlbmRhclR5cGU6bCxmb3JtYXRTaG9ydFdlZWtkYXk6Yyxmb3JtYXRXZWVrZGF5OnUsbG9jYWxlOm4sb25Nb3VzZUxlYXZlOnJ9KSxvKCkuY3JlYXRlRWxlbWVudChobixFbih7Y2FsZW5kYXJUeXBlOmx9LHApKSkpKX1Tbi5wcm9wVHlwZXM9e2FjdGl2ZVN0YXJ0RGF0ZTphKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGNhbGVuZGFyVHlwZTpSZSxmb3JtYXRTaG9ydFdlZWtkYXk6YSgpLmZ1bmMsZm9ybWF0V2Vla2RheTphKCkuZnVuYyxsb2NhbGU6YSgpLnN0cmluZyxvbkNsaWNrV2Vla051bWJlcjphKCkuZnVuYyxvbk1vdXNlTGVhdmU6YSgpLmZ1bmMsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczphKCkuYm9vbCxzaG93V2Vla051bWJlcnM6YSgpLmJvb2x9O3ZhciBqbj1bXCJhY3RpdmVTdGFydERhdGVcIixcImRlZmF1bHRBY3RpdmVTdGFydERhdGVcIixcImRlZmF1bHRWYWx1ZVwiLFwiZGVmYXVsdFZpZXdcIixcIm1heERldGFpbFwiLFwibWluRGV0YWlsXCIsXCJ2YWx1ZVwiLFwidmlld1wiXTtmdW5jdGlvbiBNbigpe3JldHVybiBNbj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LE1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBrbihlKXtyZXR1cm4ga249XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0sa24oZSl9ZnVuY3Rpb24gUm4oZSx0KXtyZXR1cm4gUm49T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxSbihlLHQpfWZ1bmN0aW9uIFBuKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiBlfWZ1bmN0aW9uIEluKGUpe3JldHVybiBJbj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sSW4oZSl9ZnVuY3Rpb24gQW4oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIFRuKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP0FuKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7SG4oZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOkFuKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIEhuKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBCbihlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfXZhciBWbj1uZXcgRGF0ZTtWbi5zZXRGdWxsWWVhcigxLDAsMSksVm4uc2V0SG91cnMoMCwwLDAsMCk7dmFyIERuPW5ldyBEYXRlKDg2NGUxMyksWm49XCJyZWFjdC1jYWxlbmRhclwiLCRuPVtcImNlbnR1cnlcIixcImRlY2FkZVwiLFwieWVhclwiLFwibW9udGhcIl0sTm49W10uY29uY2F0KGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBCbihlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVtcIkBAaXRlcmF0b3JcIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBCbihlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm5cIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4/QXJyYXkuZnJvbShlKTpcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/Qm4oZSx0KTp2b2lkIDB9fShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX0oJG4uc2xpY2UoMSkpLFtcImRheVwiXSk7ZnVuY3Rpb24gRm4oZSx0KXtyZXR1cm4gJG4uc2xpY2UoJG4uaW5kZXhPZihlKSwkbi5pbmRleE9mKHQpKzEpfWZ1bmN0aW9uIFVuKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybi0xIT09Rm4odCxuKS5pbmRleE9mKGUpfShlLHQsbik/ZTpufWZ1bmN0aW9uIFduKGUpe3JldHVybiBOblskbi5pbmRleE9mKGUpXX1mdW5jdGlvbiB6bihlLHQpe3ZhciBuPWUudmFsdWUscj1lLm1pbkRhdGUsbz1lLm1heERhdGUsaT1lLm1heERldGFpbCxhPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuIG51bGw7dmFyIG49QXJyYXkuaXNBcnJheShlKSYmMj09PWUubGVuZ3RoP2VbdF06ZTtpZighbilyZXR1cm4gbnVsbDt2YXIgcj1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERhdGU/ZTpuZXcgRGF0ZShlKX0obik7aWYoaXNOYU4oci5nZXRUaW1lKCkpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZGF0ZTogXCIuY29uY2F0KGUpKTtyZXR1cm4gcn0obix0KTtpZighYSlyZXR1cm4gbnVsbDt2YXIgbD1XbihpKTtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZ0PmU/dDpuJiZuPGU/bjplfShbQ2UseGVdW3RdKGwsYSkscixvKX12YXIgR249ZnVuY3Rpb24oZSl7cmV0dXJuIHpuKGUsMCl9LHFuPWZ1bmN0aW9uKGUpe3JldHVybiB6bihlLDEpfSxZbj1mdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlO3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6W0duLHFuXS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0KGUpfSkpfTtmdW5jdGlvbiBLbihlKXt2YXIgdD1lLm1heERhdGUsbj1lLm1heERldGFpbCxyPWUubWluRGF0ZSxvPWUubWluRGV0YWlsLGk9ZS52YWx1ZTtyZXR1cm4gQ2UoVW4oZS52aWV3LG8sbiksR24oe3ZhbHVlOmksbWluRGF0ZTpyLG1heERhdGU6dCxtYXhEZXRhaWw6bn0pfHxuZXcgRGF0ZSl9dmFyIFhuPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYxPT09W10uY29uY2F0KGUpLmxlbmd0aH0sSm49ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcInByb3RvdHlwZVwiLHt3cml0YWJsZTohMX0pLHQmJlJuKGUsdCl9KGwsZSk7dmFyIHQsbixyLGksYT0ocj1sLGk9ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9SW4ocik7aWYoaSl7dmFyIG49SW4odGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxuKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKFwib2JqZWN0XCI9PT1rbih0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7cmV0dXJuIFBuKGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gbCgpe3ZhciBlOyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsbCk7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07cmV0dXJuIEhuKFBuKGU9YS5jYWxsLmFwcGx5KGEsW3RoaXNdLmNvbmNhdChuKSkpLFwic3RhdGVcIix7YWN0aXZlU3RhcnREYXRlOmUucHJvcHMuZGVmYXVsdEFjdGl2ZVN0YXJ0RGF0ZSx2YWx1ZTplLnByb3BzLmRlZmF1bHRWYWx1ZSx2aWV3OmUucHJvcHMuZGVmYXVsdFZpZXd9KSxIbihQbihlKSxcInNldFN0YXRlQW5kQ2FsbENhbGxiYWNrc1wiLChmdW5jdGlvbih0LG4scil7dmFyIG89UG4oZSksaT1vLmFjdGl2ZVN0YXJ0RGF0ZSxhPW8udmlldyxsPWUucHJvcHMscz1sLmFsbG93UGFydGlhbFJhbmdlLGM9bC5vbkFjdGl2ZVN0YXJ0RGF0ZUNoYW5nZSx1PWwub25DaGFuZ2UsZj1sLm9uVmlld0NoYW5nZSxkPWwuc2VsZWN0UmFuZ2UscD17YWN0aXZlU3RhcnREYXRlOmksdmlldzphfTtlLnNldFN0YXRlKHQsKGZ1bmN0aW9uKCl7dmFyIG89e2FjdGlvbjp0LmFjdGlvbixhY3RpdmVTdGFydERhdGU6dC5hY3RpdmVTdGFydERhdGV8fGUuYWN0aXZlU3RhcnREYXRlLHZhbHVlOnQudmFsdWV8fGUudmFsdWUsdmlldzp0LnZpZXd8fGUudmlld307ZnVuY3Rpb24gaShlKXtyZXR1cm4gZSBpbiB0JiYoa24odFtlXSkhPT1rbihwW2VdKXx8KHRbZV1pbnN0YW5jZW9mIERhdGU/dFtlXS5nZXRUaW1lKCkhPT1wW2VdLmdldFRpbWUoKTp0W2VdIT09cFtlXSkpfWkoXCJhY3RpdmVTdGFydERhdGVcIikmJmMmJmMobyksaShcInZpZXdcIikmJmYmJmYobyksaShcInZhbHVlXCIpJiZ1JiYoZCYmWG4odC52YWx1ZSk/cyYmdShbdC52YWx1ZV0sbik6dSh0LnZhbHVlLG4pKSxyJiZyKG8pfSkpfSkpLEhuKFBuKGUpLFwic2V0QWN0aXZlU3RhcnREYXRlXCIsKGZ1bmN0aW9uKHQsbil7ZS5zZXRTdGF0ZUFuZENhbGxDYWxsYmFja3Moe2FjdGlvbjpuLGFjdGl2ZVN0YXJ0RGF0ZTp0fSl9KSksSG4oUG4oZSksXCJkcmlsbERvd25cIiwoZnVuY3Rpb24odCxuKXtpZihlLmRyaWxsRG93bkF2YWlsYWJsZSl7ZS5vbkNsaWNrVGlsZSh0LG4pO3ZhciByPVBuKGUpLG89ci52aWV3LGk9ci52aWV3cyxhPWUucHJvcHMub25EcmlsbERvd24sbD1pW2kuaW5kZXhPZihvKSsxXTtlLnNldFN0YXRlQW5kQ2FsbENhbGxiYWNrcyh7YWN0aW9uOlwiZHJpbGxEb3duXCIsYWN0aXZlU3RhcnREYXRlOnQsdmlldzpsfSx2b2lkIDAsYSl9fSkpLEhuKFBuKGUpLFwiZHJpbGxVcFwiLChmdW5jdGlvbigpe2lmKGUuZHJpbGxVcEF2YWlsYWJsZSl7dmFyIHQ9UG4oZSksbj10LmFjdGl2ZVN0YXJ0RGF0ZSxyPXQudmlldyxvPXQudmlld3MsaT1lLnByb3BzLm9uRHJpbGxVcCxhPW9bby5pbmRleE9mKHIpLTFdLGw9Q2UoYSxuKTtlLnNldFN0YXRlQW5kQ2FsbENhbGxiYWNrcyh7YWN0aW9uOlwiZHJpbGxVcFwiLGFjdGl2ZVN0YXJ0RGF0ZTpsLHZpZXc6YX0sdm9pZCAwLGkpfX0pKSxIbihQbihlKSxcIm9uQ2hhbmdlXCIsKGZ1bmN0aW9uKHQsbil7dmFyIHI9UG4oZSkudmFsdWUsbz1lLnByb3BzLGk9by5nb1RvUmFuZ2VTdGFydE9uU2VsZWN0LGE9by5zZWxlY3RSYW5nZTtlLm9uQ2xpY2tUaWxlKHQsbik7dmFyIGwscyxjLHU9YSYmIVhuKHIpO2lmKGEpe3ZhciBmPVBuKGUpLnZhbHVlVHlwZTtsPXU/Q2UoZix0KTpbQ2Uocz1mLChjPVtyLHRdLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pKSlbMF0pLHhlKHMsY1sxXSldfWVsc2UgbD1lLmdldFByb2Nlc3NlZFZhbHVlKHQpO3ZhciBkPSFhfHx1fHxpP0tuKFRuKFRuKHt9LGUucHJvcHMpLHt9LHt2YWx1ZTpsfSkpOm51bGw7bi5wZXJzaXN0KCksZS5zZXRTdGF0ZUFuZENhbGxDYWxsYmFja3Moe2FjdGlvbjpcIm9uQ2hhbmdlXCIsYWN0aXZlU3RhcnREYXRlOmQsdmFsdWU6bH0sbil9KSksSG4oUG4oZSksXCJvbkNsaWNrVGlsZVwiLChmdW5jdGlvbih0LG4pe3ZhciByPVBuKGUpLnZpZXcsbz1lLnByb3BzLGk9by5vbkNsaWNrRGF5LGE9by5vbkNsaWNrRGVjYWRlLGw9by5vbkNsaWNrTW9udGgscz1vLm9uQ2xpY2tZZWFyLGM9ZnVuY3Rpb24oKXtzd2l0Y2gocil7Y2FzZVwiY2VudHVyeVwiOnJldHVybiBhO2Nhc2VcImRlY2FkZVwiOnJldHVybiBzO2Nhc2VcInllYXJcIjpyZXR1cm4gbDtjYXNlXCJtb250aFwiOnJldHVybiBpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB2aWV3OiBcIi5jb25jYXQocixcIi5cIikpfX0oKTtjJiZjKHQsbil9KSksSG4oUG4oZSksXCJvbk1vdXNlT3ZlclwiLChmdW5jdGlvbih0KXtlLnNldFN0YXRlKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ob3ZlciYmZS5ob3Zlci5nZXRUaW1lKCk9PT10LmdldFRpbWUoKT9udWxsOntob3Zlcjp0fX0pKX0pKSxIbihQbihlKSxcIm9uTW91c2VMZWF2ZVwiLChmdW5jdGlvbigpe2Uuc2V0U3RhdGUoe2hvdmVyOm51bGx9KX0pKSxlfXJldHVybiB0PWwsbj1be2tleTpcImFjdGl2ZVN0YXJ0RGF0ZVwiLGdldDpmdW5jdGlvbigpe3ZhciBlLHQsbixyLG8saSxhLGwscyxjLHUsZixkPXRoaXMucHJvcHMuYWN0aXZlU3RhcnREYXRlLHA9dGhpcy5zdGF0ZS5hY3RpdmVTdGFydERhdGU7cmV0dXJuIGR8fHB8fCh0PShlPXRoaXMucHJvcHMpLmFjdGl2ZVN0YXJ0RGF0ZSxuPWUuZGVmYXVsdEFjdGl2ZVN0YXJ0RGF0ZSxyPWUuZGVmYXVsdFZhbHVlLG89ZS5kZWZhdWx0VmlldyxpPWUubWF4RGV0YWlsLGE9ZS5taW5EZXRhaWwsbD1lLnZhbHVlLHM9ZS52aWV3LGM9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGk9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLGpuKSx1PVVuKHMsYSxpKSwoZj10fHxuKT9DZSh1LGYpOktuKFRuKHttYXhEZXRhaWw6aSxtaW5EZXRhaWw6YSx2YWx1ZTpsfHxyLHZpZXc6c3x8b30sYykpKX19LHtrZXk6XCJ2YWx1ZVwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnNlbGVjdFJhbmdlLG49ZS52YWx1ZSxyPXRoaXMuc3RhdGUudmFsdWU7cmV0dXJuIHQmJlhuKHIpP3I6dm9pZCAwIT09bj9uOnJ9fSx7a2V5OlwidmFsdWVUeXBlXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFduKHRoaXMucHJvcHMubWF4RGV0YWlsKX19LHtrZXk6XCJ2aWV3XCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUubWluRGV0YWlsLG49ZS5tYXhEZXRhaWwscj1lLnZpZXcsbz10aGlzLnN0YXRlLnZpZXc7cmV0dXJuIFVuKHJ8fG8sdCxuKX19LHtrZXk6XCJ2aWV3c1wiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHM7cmV0dXJuIEZuKGUubWluRGV0YWlsLGUubWF4RGV0YWlsKX19LHtrZXk6XCJob3ZlclwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuc2VsZWN0UmFuZ2UsdD10aGlzLnN0YXRlLmhvdmVyO3JldHVybiBlP3Q6bnVsbH19LHtrZXk6XCJkcmlsbERvd25BdmFpbGFibGVcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnZpZXcsdD10aGlzLnZpZXdzO3JldHVybiB0LmluZGV4T2YoZSk8dC5sZW5ndGgtMX19LHtrZXk6XCJkcmlsbFVwQXZhaWxhYmxlXCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52aWV3O3JldHVybiB0aGlzLnZpZXdzLmluZGV4T2YoZSk+MH19LHtrZXk6XCJnZXRQcm9jZXNzZWRWYWx1ZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMsbj10Lm1pbkRhdGUscj10Lm1heERhdGUsbz10Lm1heERldGFpbCxpPXQucmV0dXJuVmFsdWU7cmV0dXJuIGZ1bmN0aW9uKCl7c3dpdGNoKGkpe2Nhc2VcInN0YXJ0XCI6cmV0dXJuIEduO2Nhc2VcImVuZFwiOnJldHVybiBxbjtjYXNlXCJyYW5nZVwiOnJldHVybiBZbjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmV0dXJuVmFsdWUuXCIpfX0oKSh7dmFsdWU6ZSxtaW5EYXRlOm4sbWF4RGF0ZTpyLG1heERldGFpbDpvfSl9fSx7a2V5OlwicmVuZGVyQ29udGVudFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYWN0aXZlU3RhcnREYXRlLG49dGhpcy5vbk1vdXNlT3ZlcixyPXRoaXMudmFsdWVUeXBlLGk9dGhpcy52YWx1ZSxhPXRoaXMudmlldyxsPXRoaXMucHJvcHMscz1sLmNhbGVuZGFyVHlwZSxjPWwubG9jYWxlLHU9bC5tYXhEYXRlLGY9bC5taW5EYXRlLGQ9bC5zZWxlY3RSYW5nZSxwPWwudGlsZUNsYXNzTmFtZSxoPWwudGlsZUNvbnRlbnQsZz1sLnRpbGVEaXNhYmxlZCx2PXRoaXMuaG92ZXIsbT17YWN0aXZlU3RhcnREYXRlOmU/eWUoYSx0KTpDZShhLHQpLGhvdmVyOnYsbG9jYWxlOmMsbWF4RGF0ZTp1LG1pbkRhdGU6ZixvbkNsaWNrOnRoaXMuZHJpbGxEb3duQXZhaWxhYmxlP3RoaXMuZHJpbGxEb3duOnRoaXMub25DaGFuZ2Usb25Nb3VzZU92ZXI6ZD9uOm51bGwsdGlsZUNsYXNzTmFtZTpwLHRpbGVDb250ZW50OmgsdGlsZURpc2FibGVkOmcsdmFsdWU6aSx2YWx1ZVR5cGU6cn07c3dpdGNoKGEpe2Nhc2VcImNlbnR1cnlcIjp2YXIgQz10aGlzLnByb3BzLmZvcm1hdFllYXI7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KGt0LE1uKHtmb3JtYXRZZWFyOkN9LG0pKTtjYXNlXCJkZWNhZGVcIjp2YXIgeT10aGlzLnByb3BzLmZvcm1hdFllYXI7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KE50LE1uKHtmb3JtYXRZZWFyOnl9LG0pKTtjYXNlXCJ5ZWFyXCI6dmFyIHc9dGhpcy5wcm9wcyxiPXcuZm9ybWF0TW9udGgseD13LmZvcm1hdE1vbnRoWWVhcjtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQodG4sTW4oe2Zvcm1hdE1vbnRoOmIsZm9ybWF0TW9udGhZZWFyOnh9LG0pKTtjYXNlXCJtb250aFwiOnZhciBfPXRoaXMucHJvcHMsTz1fLmZvcm1hdERheSxMPV8uZm9ybWF0TG9uZ0RhdGUsRT1fLmZvcm1hdFNob3J0V2Vla2RheSxTPV8uZm9ybWF0V2Vla2RheSxqPV8ub25DbGlja1dlZWtOdW1iZXIsTT1fLnNob3dEb3VibGVWaWV3LGs9Xy5zaG93Rml4ZWROdW1iZXJPZldlZWtzLFI9Xy5zaG93TmVpZ2hib3JpbmdNb250aCxQPV8uc2hvd1dlZWtOdW1iZXJzLEk9dGhpcy5vbk1vdXNlTGVhdmU7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFNuLE1uKHtjYWxlbmRhclR5cGU6cyxmb3JtYXREYXk6Tyxmb3JtYXRMb25nRGF0ZTpMLGZvcm1hdFNob3J0V2Vla2RheTpFLGZvcm1hdFdlZWtkYXk6UyxvbkNsaWNrV2Vla051bWJlcjpqLG9uTW91c2VMZWF2ZTpkP0k6bnVsbCxzaG93Rml4ZWROdW1iZXJPZldlZWtzOnZvaWQgMCE9PWs/azpNLHNob3dOZWlnaGJvcmluZ01vbnRoOlIsc2hvd1dlZWtOdW1iZXJzOlB9LG0pKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdmlldzogXCIuY29uY2F0KGEsXCIuXCIpKX19fSx7a2V5OlwicmVuZGVyTmF2aWdhdGlvblwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMucHJvcHMuc2hvd05hdmlnYXRpb24pcmV0dXJuIG51bGw7dmFyIGU9dGhpcy5hY3RpdmVTdGFydERhdGUsdD10aGlzLnZpZXcsbj10aGlzLnZpZXdzLHI9dGhpcy5wcm9wcyxpPXIuZm9ybWF0TW9udGhZZWFyLGE9ci5mb3JtYXRZZWFyLGw9ci5sb2NhbGUscz1yLm1heERhdGUsYz1yLm1pbkRhdGUsdT1yLm5hdmlnYXRpb25BcmlhTGFiZWwsZj1yLm5hdmlnYXRpb25BcmlhTGl2ZSxkPXIubmF2aWdhdGlvbkxhYmVsLHA9ci5uZXh0MkFyaWFMYWJlbCxoPXIubmV4dDJMYWJlbCxnPXIubmV4dEFyaWFMYWJlbCx2PXIubmV4dExhYmVsLG09ci5wcmV2MkFyaWFMYWJlbCxDPXIucHJldjJMYWJlbCx5PXIucHJldkFyaWFMYWJlbCx3PXIucHJldkxhYmVsLGI9ci5zaG93RG91YmxlVmlldztyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoTmUse2FjdGl2ZVN0YXJ0RGF0ZTplLGRyaWxsVXA6dGhpcy5kcmlsbFVwLGZvcm1hdE1vbnRoWWVhcjppLGZvcm1hdFllYXI6YSxsb2NhbGU6bCxtYXhEYXRlOnMsbWluRGF0ZTpjLG5hdmlnYXRpb25BcmlhTGFiZWw6dSxuYXZpZ2F0aW9uQXJpYUxpdmU6ZixuYXZpZ2F0aW9uTGFiZWw6ZCxuZXh0MkFyaWFMYWJlbDpwLG5leHQyTGFiZWw6aCxuZXh0QXJpYUxhYmVsOmcsbmV4dExhYmVsOnYscHJldjJBcmlhTGFiZWw6bSxwcmV2MkxhYmVsOkMscHJldkFyaWFMYWJlbDp5LHByZXZMYWJlbDp3LHNldEFjdGl2ZVN0YXJ0RGF0ZTp0aGlzLnNldEFjdGl2ZVN0YXJ0RGF0ZSxzaG93RG91YmxlVmlldzpiLHZpZXc6dCx2aWV3czpufSl9fSx7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jbGFzc05hbWUsbj1lLmlucHV0UmVmLHI9ZS5zZWxlY3RSYW5nZSxpPWUuc2hvd0RvdWJsZVZpZXcsYT10aGlzLm9uTW91c2VMZWF2ZSxsPXRoaXMudmFsdWUsYz1bXS5jb25jYXQobCk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpzKFpuLHImJjE9PT1jLmxlbmd0aCYmXCJcIi5jb25jYXQoWm4sXCItLXNlbGVjdFJhbmdlXCIpLGkmJlwiXCIuY29uY2F0KFpuLFwiLS1kb3VibGVWaWV3XCIpLHQpLHJlZjpufSx0aGlzLnJlbmRlck5hdmlnYXRpb24oKSxvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJcIi5jb25jYXQoWm4sXCJfX3ZpZXdDb250YWluZXJcIiksb25CbHVyOnI/YTpudWxsLG9uTW91c2VMZWF2ZTpyP2E6bnVsbH0sdGhpcy5yZW5kZXJDb250ZW50KCksaSYmdGhpcy5yZW5kZXJDb250ZW50KCEwKSkpfX1dLG4mJmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX0odC5wcm90b3R5cGUsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KSxsfShyLkNvbXBvbmVudCk7Sm4uZGVmYXVsdFByb3BzPXtnb1RvUmFuZ2VTdGFydE9uU2VsZWN0OiEwLG1heERhdGU6RG4sbWF4RGV0YWlsOlwibW9udGhcIixtaW5EYXRlOlZuLG1pbkRldGFpbDpcImNlbnR1cnlcIixyZXR1cm5WYWx1ZTpcInN0YXJ0XCIsc2hvd05hdmlnYXRpb246ITAsc2hvd05laWdoYm9yaW5nTW9udGg6ITB9O3ZhciBRbj1hKCkuaW5zdGFuY2VPZihEYXRlKSxlcj1hKCkub25lT2ZUeXBlKFthKCkuc3RyaW5nLEhlXSk7Sm4ucHJvcFR5cGVzPXthY3RpdmVTdGFydERhdGU6UW4sYWxsb3dQYXJ0aWFsUmFuZ2U6YSgpLmJvb2wsY2FsZW5kYXJUeXBlOlJlLGNsYXNzTmFtZTpQZSxkZWZhdWx0QWN0aXZlU3RhcnREYXRlOlFuLGRlZmF1bHRWYWx1ZTplcixkZWZhdWx0VmlldzpWZSxmb3JtYXREYXk6YSgpLmZ1bmMsZm9ybWF0TG9uZ0RhdGU6YSgpLmZ1bmMsZm9ybWF0TW9udGg6YSgpLmZ1bmMsZm9ybWF0TW9udGhZZWFyOmEoKS5mdW5jLGZvcm1hdFNob3J0V2Vla2RheTphKCkuZnVuYyxmb3JtYXRXZWVrZGF5OmEoKS5mdW5jLGZvcm1hdFllYXI6YSgpLmZ1bmMsZ29Ub1JhbmdlU3RhcnRPblNlbGVjdDphKCkuYm9vbCxpbnB1dFJlZjpUZSxsb2NhbGU6YSgpLnN0cmluZyxtYXhEYXRlOkFlLG1heERldGFpbDphKCkub25lT2YoJG4pLG1pbkRhdGU6SWUsbWluRGV0YWlsOmEoKS5vbmVPZigkbiksbmF2aWdhdGlvbkFyaWFMYWJlbDphKCkuc3RyaW5nLG5hdmlnYXRpb25BcmlhTGl2ZTphKCkub25lT2YoW1wib2ZmXCIsXCJwb2xpdGVcIixcImFzc2VydGl2ZVwiXSksbmF2aWdhdGlvbkxhYmVsOmEoKS5mdW5jLG5leHQyQXJpYUxhYmVsOmEoKS5zdHJpbmcsbmV4dDJMYWJlbDphKCkubm9kZSxuZXh0QXJpYUxhYmVsOmEoKS5zdHJpbmcsbmV4dExhYmVsOmEoKS5ub2RlLG9uQWN0aXZlU3RhcnREYXRlQ2hhbmdlOmEoKS5mdW5jLG9uQ2hhbmdlOmEoKS5mdW5jLG9uQ2xpY2tEYXk6YSgpLmZ1bmMsb25DbGlja0RlY2FkZTphKCkuZnVuYyxvbkNsaWNrTW9udGg6YSgpLmZ1bmMsb25DbGlja1dlZWtOdW1iZXI6YSgpLmZ1bmMsb25DbGlja1llYXI6YSgpLmZ1bmMsb25EcmlsbERvd246YSgpLmZ1bmMsb25EcmlsbFVwOmEoKS5mdW5jLG9uVmlld0NoYW5nZTphKCkuZnVuYyxwcmV2MkFyaWFMYWJlbDphKCkuc3RyaW5nLHByZXYyTGFiZWw6YSgpLm5vZGUscHJldkFyaWFMYWJlbDphKCkuc3RyaW5nLHByZXZMYWJlbDphKCkubm9kZSxyZXR1cm5WYWx1ZTphKCkub25lT2YoW1wic3RhcnRcIixcImVuZFwiLFwicmFuZ2VcIl0pLHNlbGVjdFJhbmdlOmEoKS5ib29sLHNob3dEb3VibGVWaWV3OmEoKS5ib29sLHNob3dGaXhlZE51bWJlck9mV2Vla3M6YSgpLmJvb2wsc2hvd05hdmlnYXRpb246YSgpLmJvb2wsc2hvd05laWdoYm9yaW5nTW9udGg6YSgpLmJvb2wsc2hvd1dlZWtOdW1iZXJzOmEoKS5ib29sLHRpbGVDbGFzc05hbWU6YSgpLm9uZU9mVHlwZShbYSgpLmZ1bmMsUGVdKSx0aWxlQ29udGVudDphKCkub25lT2ZUeXBlKFthKCkuZnVuYyxhKCkubm9kZV0pLHRpbGVEaXNhYmxlZDphKCkuZnVuYyx2YWx1ZTplcix2aWV3OlZlfTtjb25zdCB0cj1Kbn0sNTI1MTooZSx0LG4pPT57big3NDE4KTt2YXIgcj1uKDY2ODkpLG89NjAxMDM7aWYodC5GcmFnbWVudD02MDEwNyxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciBpPVN5bWJvbC5mb3I7bz1pKFwicmVhY3QuZWxlbWVudFwiKSx0LkZyYWdtZW50PWkoXCJyZWFjdC5mcmFnbWVudFwiKX12YXIgYT1yLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0Q3VycmVudE93bmVyLGw9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxzPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gYyhlLHQsbil7dmFyIHIsaT17fSxjPW51bGwsdT1udWxsO2ZvcihyIGluIHZvaWQgMCE9PW4mJihjPVwiXCIrbiksdm9pZCAwIT09dC5rZXkmJihjPVwiXCIrdC5rZXkpLHZvaWQgMCE9PXQucmVmJiYodT10LnJlZiksdClsLmNhbGwodCxyKSYmIXMuaGFzT3duUHJvcGVydHkocikmJihpW3JdPXRbcl0pO2lmKGUmJmUuZGVmYXVsdFByb3BzKWZvcihyIGluIHQ9ZS5kZWZhdWx0UHJvcHMpdm9pZCAwPT09aVtyXSYmKGlbcl09dFtyXSk7cmV0dXJueyQkdHlwZW9mOm8sdHlwZTplLGtleTpjLHJlZjp1LHByb3BzOmksX293bmVyOmEuY3VycmVudH19dC5qc3g9Yyx0LmpzeHM9Y30sNTg5MzooZSx0LG4pPT57ZS5leHBvcnRzPW4oNTI1MSl9LDM1NzM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPW4oNjU1KSxvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLm1heChNYXRoLm1pbihuLHQpLGUpfX0saT1mdW5jdGlvbihlKXtyZXR1cm4gZSUxP051bWJlcihlLnRvRml4ZWQoNSkpOmV9LGE9LygtKT8oW1xcZF0qXFwuP1tcXGRdKSsvZyxsPS8oI1swLTlhLWZdezZ9fCNbMC05YS1mXXszfXwjKD86WzAtOWEtZl17Mn0pezIsNH18KHJnYnxoc2wpYT9cXCgoLT9bXFxkXFwuXSslP1ssXFxzXSspezIsM31cXHMqXFwvKlxccypbXFxkXFwuXSslP1xcKSkvZ2kscz0vXigjWzAtOWEtZl17M318Iyg/OlswLTlhLWZdezJ9KXsyLDR9fChyZ2J8aHNsKWE/XFwoKC0/W1xcZFxcLl0rJT9bLFxcc10rKXsyLDN9XFxzKlxcLypcXHMqW1xcZFxcLl0rJT9cXCkpJC9pO2Z1bmN0aW9uIGMoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV9dmFyIHU9e3Rlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGV9LHBhcnNlOnBhcnNlRmxvYXQsdHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3JldHVybiBlfX0sZj1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdSkse3RyYW5zZm9ybTpvKDAsMSl9KSxkPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSx1KSx7ZGVmYXVsdDoxfSkscD1mdW5jdGlvbihlKXtyZXR1cm57dGVzdDpmdW5jdGlvbih0KXtyZXR1cm4gYyh0KSYmdC5lbmRzV2l0aChlKSYmMT09PXQuc3BsaXQoXCIgXCIpLmxlbmd0aH0scGFyc2U6cGFyc2VGbG9hdCx0cmFuc2Zvcm06ZnVuY3Rpb24odCl7cmV0dXJuXCJcIit0K2V9fX0saD1wKFwiZGVnXCIpLGc9cChcIiVcIiksdj1wKFwicHhcIiksbT1wKFwidmhcIiksQz1wKFwidndcIikseT1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sZykse3BhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBnLnBhcnNlKGUpLzEwMH0sdHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3JldHVybiBnLnRyYW5zZm9ybSgxMDAqZSl9fSksdz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gQm9vbGVhbihjKG4pJiZzLnRlc3QobikmJm4uc3RhcnRzV2l0aChlKXx8dCYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sdCkpfX0sYj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBvO2lmKCFjKHIpKXJldHVybiByO3ZhciBpPXIubWF0Y2goYSksbD1pWzBdLHM9aVsxXSx1PWlbMl0sZj1pWzNdO3JldHVybihvPXt9KVtlXT1wYXJzZUZsb2F0KGwpLG9bdF09cGFyc2VGbG9hdChzKSxvW25dPXBhcnNlRmxvYXQodSksby5hbHBoYT12b2lkIDAhPT1mP3BhcnNlRmxvYXQoZik6MSxvfX0seD17dGVzdDp3KFwiaHNsXCIsXCJodWVcIikscGFyc2U6YihcImh1ZVwiLFwic2F0dXJhdGlvblwiLFwibGlnaHRuZXNzXCIpLHRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgdD1lLmh1ZSxuPWUuc2F0dXJhdGlvbixyPWUubGlnaHRuZXNzLG89ZS5hbHBoYSxhPXZvaWQgMD09PW8/MTpvO3JldHVyblwiaHNsYShcIitNYXRoLnJvdW5kKHQpK1wiLCBcIitnLnRyYW5zZm9ybShpKG4pKStcIiwgXCIrZy50cmFuc2Zvcm0oaShyKSkrXCIsIFwiK2koZi50cmFuc2Zvcm0oYSkpK1wiKVwifX0sXz1vKDAsMjU1KSxPPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSx1KSx7dHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKF8oZSkpfX0pLEw9e3Rlc3Q6dyhcInJnYlwiLFwicmVkXCIpLHBhcnNlOmIoXCJyZWRcIixcImdyZWVuXCIsXCJibHVlXCIpLHRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgdD1lLnJlZCxuPWUuZ3JlZW4scj1lLmJsdWUsbz1lLmFscGhhLGE9dm9pZCAwPT09bz8xOm87cmV0dXJuXCJyZ2JhKFwiK08udHJhbnNmb3JtKHQpK1wiLCBcIitPLnRyYW5zZm9ybShuKStcIiwgXCIrTy50cmFuc2Zvcm0ocikrXCIsIFwiK2koZi50cmFuc2Zvcm0oYSkpK1wiKVwifX0sRT17dGVzdDp3KFwiI1wiKSxwYXJzZTpmdW5jdGlvbihlKXt2YXIgdD1cIlwiLG49XCJcIixyPVwiXCIsbz1cIlwiO3JldHVybiBlLmxlbmd0aD41Pyh0PWUuc3Vic3RyKDEsMiksbj1lLnN1YnN0cigzLDIpLHI9ZS5zdWJzdHIoNSwyKSxvPWUuc3Vic3RyKDcsMikpOih0PWUuc3Vic3RyKDEsMSksbj1lLnN1YnN0cigyLDEpLHI9ZS5zdWJzdHIoMywxKSxvPWUuc3Vic3RyKDQsMSksdCs9dCxuKz1uLHIrPXIsbys9bykse3JlZDpwYXJzZUludCh0LDE2KSxncmVlbjpwYXJzZUludChuLDE2KSxibHVlOnBhcnNlSW50KHIsMTYpLGFscGhhOm8/cGFyc2VJbnQobywxNikvMjU1OjF9fSx0cmFuc2Zvcm06TC50cmFuc2Zvcm19LFM9e3Rlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIEwudGVzdChlKXx8RS50ZXN0KGUpfHx4LnRlc3QoZSl9LHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBMLnRlc3QoZSk/TC5wYXJzZShlKTp4LnRlc3QoZSk/eC5wYXJzZShlKTpFLnBhcnNlKGUpfSx0cmFuc2Zvcm06ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSk/ZTplLmhhc093blByb3BlcnR5KFwicmVkXCIpP0wudHJhbnNmb3JtKGUpOngudHJhbnNmb3JtKGUpfX0saj1cIiR7Y31cIixNPVwiJHtufVwiO2Z1bmN0aW9uIGsoZSl7dmFyIHQ9W10sbj0wLHI9ZS5tYXRjaChsKTtyJiYobj1yLmxlbmd0aCxlPWUucmVwbGFjZShsLGopLHQucHVzaC5hcHBseSh0LHIubWFwKFMucGFyc2UpKSk7dmFyIG89ZS5tYXRjaChhKTtyZXR1cm4gbyYmKGU9ZS5yZXBsYWNlKGEsTSksdC5wdXNoLmFwcGx5KHQsby5tYXAodS5wYXJzZSkpKSx7dmFsdWVzOnQsbnVtQ29sb3JzOm4sdG9rZW5pc2VkOmV9fWZ1bmN0aW9uIFIoZSl7cmV0dXJuIGsoZSkudmFsdWVzfWZ1bmN0aW9uIFAoZSl7dmFyIHQ9ayhlKSxuPXQudmFsdWVzLHI9dC5udW1Db2xvcnMsbz10LnRva2VuaXNlZCxhPW4ubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9byxuPTA7bjxhO24rKyl0PXQucmVwbGFjZShuPHI/ajpNLG48cj9TLnRyYW5zZm9ybShlW25dKTppKGVbbl0pKTtyZXR1cm4gdH19dmFyIEk9ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/MDplfSxBPXt0ZXN0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scixvO3JldHVybiBpc05hTihlKSYmYyhlKSYmKG51bGwhPT0obj1udWxsPT09KHQ9ZS5tYXRjaChhKSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubGVuZ3RoKSYmdm9pZCAwIT09bj9uOjApKyhudWxsIT09KG89bnVsbD09PShyPWUubWF0Y2gobCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmxlbmd0aCkmJnZvaWQgMCE9PW8/bzowKT4wfSxwYXJzZTpSLGNyZWF0ZVRyYW5zZm9ybWVyOlAsZ2V0QW5pbWF0YWJsZU5vbmU6ZnVuY3Rpb24oZSl7dmFyIHQ9UihlKTtyZXR1cm4gUChlKSh0Lm1hcChJKSl9fSxUPW5ldyBTZXQoW1wiYnJpZ2h0bmVzc1wiLFwiY29udHJhc3RcIixcInNhdHVyYXRlXCIsXCJvcGFjaXR5XCJdKTtmdW5jdGlvbiBIKGUpe3ZhciB0PWUuc2xpY2UoMCwtMSkuc3BsaXQoXCIoXCIpLG49dFswXSxyPXRbMV07aWYoXCJkcm9wLXNoYWRvd1wiPT09bilyZXR1cm4gZTt2YXIgbz0oci5tYXRjaChhKXx8W10pWzBdO2lmKCFvKXJldHVybiBlO3ZhciBpPXIucmVwbGFjZShvLFwiXCIpLGw9VC5oYXMobik/MTowO3JldHVybiBvIT09ciYmKGwqPTEwMCksbitcIihcIitsK2krXCIpXCJ9dmFyIEI9LyhbYS16LV0qKVxcKC4qP1xcKS9nLFY9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LEEpLHtnZXRBbmltYXRhYmxlTm9uZTpmdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKEIpO3JldHVybiB0P3QubWFwKEgpLmpvaW4oXCIgXCIpOmV9fSk7dC5hbHBoYT1mLHQuY29sb3I9Uyx0LmNvbXBsZXg9QSx0LmRlZ3JlZXM9aCx0LmZpbHRlcj1WLHQuaGV4PUUsdC5oc2xhPXgsdC5udW1iZXI9dSx0LnBlcmNlbnQ9Zyx0LnByb2dyZXNzUGVyY2VudGFnZT15LHQucHg9dix0LnJnYlVuaXQ9Tyx0LnJnYmE9TCx0LnNjYWxlPWQsdC52aD1tLHQudnc9Q30sODM4ODooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtmb2N1c2FibGU6KCk9PncsaXNGb2N1c2FibGU6KCk9Pl8saXNUYWJiYWJsZTooKT0+Yix0YWJiYWJsZTooKT0+eX0pO3ZhciByPVtcImlucHV0Om5vdChbaW5lcnRdKVwiLFwic2VsZWN0Om5vdChbaW5lcnRdKVwiLFwidGV4dGFyZWE6bm90KFtpbmVydF0pXCIsXCJhW2hyZWZdOm5vdChbaW5lcnRdKVwiLFwiYnV0dG9uOm5vdChbaW5lcnRdKVwiLFwiW3RhYmluZGV4XTpub3Qoc2xvdCk6bm90KFtpbmVydF0pXCIsXCJhdWRpb1tjb250cm9sc106bm90KFtpbmVydF0pXCIsXCJ2aWRlb1tjb250cm9sc106bm90KFtpbmVydF0pXCIsJ1tjb250ZW50ZWRpdGFibGVdOm5vdChbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0pOm5vdChbaW5lcnRdKScsXCJkZXRhaWxzPnN1bW1hcnk6Zmlyc3Qtb2YtdHlwZTpub3QoW2luZXJ0XSlcIixcImRldGFpbHM6bm90KFtpbmVydF0pXCJdLG89ci5qb2luKFwiLFwiKSxpPVwidW5kZWZpbmVkXCI9PXR5cGVvZiBFbGVtZW50LGE9aT9mdW5jdGlvbigpe306RWxlbWVudC5wcm90b3R5cGUubWF0Y2hlc3x8RWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3J8fEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvcixsPSFpJiZFbGVtZW50LnByb3RvdHlwZS5nZXRSb290Tm9kZT9mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbnVsbD09ZXx8bnVsbD09PSh0PWUuZ2V0Um9vdE5vZGUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNhbGwoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplLm93bmVyRG9jdW1lbnR9LHM9ZnVuY3Rpb24gZSh0LG4pe3ZhciByO3ZvaWQgMD09PW4mJihuPSEwKTt2YXIgbz1udWxsPT10fHxudWxsPT09KHI9dC5nZXRBdHRyaWJ1dGUpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmNhbGwodCxcImluZXJ0XCIpO3JldHVyblwiXCI9PT1vfHxcInRydWVcIj09PW98fG4mJnQmJmUodC5wYXJlbnROb2RlKX0sYz1mdW5jdGlvbihlLHQsbil7aWYocyhlKSlyZXR1cm5bXTt2YXIgcj1BcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoZS5xdWVyeVNlbGVjdG9yQWxsKG8pKTtyZXR1cm4gdCYmYS5jYWxsKGUsbykmJnIudW5zaGlmdChlKSxyLmZpbHRlcihuKX0sdT1mdW5jdGlvbiBlKHQsbixyKXtmb3IodmFyIGk9W10sbD1BcnJheS5mcm9tKHQpO2wubGVuZ3RoOyl7dmFyIGM9bC5zaGlmdCgpO2lmKCFzKGMsITEpKWlmKFwiU0xPVFwiPT09Yy50YWdOYW1lKXt2YXIgdT1jLmFzc2lnbmVkRWxlbWVudHMoKSxmPWUodS5sZW5ndGg/dTpjLmNoaWxkcmVuLCEwLHIpO3IuZmxhdHRlbj9pLnB1c2guYXBwbHkoaSxmKTppLnB1c2goe3Njb3BlUGFyZW50OmMsY2FuZGlkYXRlczpmfSl9ZWxzZXthLmNhbGwoYyxvKSYmci5maWx0ZXIoYykmJihufHwhdC5pbmNsdWRlcyhjKSkmJmkucHVzaChjKTt2YXIgZD1jLnNoYWRvd1Jvb3R8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHIuZ2V0U2hhZG93Um9vdCYmci5nZXRTaGFkb3dSb290KGMpLHA9IXMoZCwhMSkmJighci5zaGFkb3dSb290RmlsdGVyfHxyLnNoYWRvd1Jvb3RGaWx0ZXIoYykpO2lmKGQmJnApe3ZhciBoPWUoITA9PT1kP2MuY2hpbGRyZW46ZC5jaGlsZHJlbiwhMCxyKTtyLmZsYXR0ZW4/aS5wdXNoLmFwcGx5KGksaCk6aS5wdXNoKHtzY29wZVBhcmVudDpjLGNhbmRpZGF0ZXM6aH0pfWVsc2UgbC51bnNoaWZ0LmFwcGx5KGwsYy5jaGlsZHJlbil9fXJldHVybiBpfSxmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudGFiSW5kZXg8MCYmKHR8fC9eKEFVRElPfFZJREVPfERFVEFJTFMpJC8udGVzdChlLnRhZ05hbWUpfHxmdW5jdGlvbihlKXt2YXIgdCxuPW51bGw9PWV8fG51bGw9PT0odD1lLmdldEF0dHJpYnV0ZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuY2FsbChlLFwiY29udGVudGVkaXRhYmxlXCIpO3JldHVyblwiXCI9PT1ufHxcInRydWVcIj09PW59KGUpKSYmaXNOYU4ocGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKSwxMCkpPzA6ZS50YWJJbmRleH0sZD1mdW5jdGlvbihlLHQpe3JldHVybiBlLnRhYkluZGV4PT09dC50YWJJbmRleD9lLmRvY3VtZW50T3JkZXItdC5kb2N1bWVudE9yZGVyOmUudGFiSW5kZXgtdC50YWJJbmRleH0scD1mdW5jdGlvbihlKXtyZXR1cm5cIklOUFVUXCI9PT1lLnRhZ05hbWV9LGg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXQud2lkdGgscj10LmhlaWdodDtyZXR1cm4gMD09PW4mJjA9PT1yfSxnPWZ1bmN0aW9uKGUsdCl7cmV0dXJuISh0LmRpc2FibGVkfHxzKHQpfHxmdW5jdGlvbihlKXtyZXR1cm4gcChlKSYmXCJoaWRkZW5cIj09PWUudHlwZX0odCl8fGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5kaXNwbGF5Q2hlY2sscj10LmdldFNoYWRvd1Jvb3Q7aWYoXCJoaWRkZW5cIj09PWdldENvbXB1dGVkU3R5bGUoZSkudmlzaWJpbGl0eSlyZXR1cm4hMDt2YXIgbz1hLmNhbGwoZSxcImRldGFpbHM+c3VtbWFyeTpmaXJzdC1vZi10eXBlXCIpP2UucGFyZW50RWxlbWVudDplO2lmKGEuY2FsbChvLFwiZGV0YWlsczpub3QoW29wZW5dKSAqXCIpKXJldHVybiEwO2lmKG4mJlwiZnVsbFwiIT09biYmXCJsZWdhY3ktZnVsbFwiIT09bil7aWYoXCJub24temVyby1hcmVhXCI9PT1uKXJldHVybiBoKGUpfWVsc2V7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygcil7Zm9yKHZhciBpPWU7ZTspe3ZhciBzPWUucGFyZW50RWxlbWVudCxjPWwoZSk7aWYocyYmIXMuc2hhZG93Um9vdCYmITA9PT1yKHMpKXJldHVybiBoKGUpO2U9ZS5hc3NpZ25lZFNsb3Q/ZS5hc3NpZ25lZFNsb3Q6c3x8Yz09PWUub3duZXJEb2N1bWVudD9zOmMuaG9zdH1lPWl9aWYoZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8saT1lJiZsKGUpLGE9bnVsbD09PSh0PWkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmhvc3Qscz0hMTtpZihpJiZpIT09ZSlmb3Iocz0hIShudWxsIT09KG49YSkmJnZvaWQgMCE9PW4mJm51bGwhPT0ocj1uLm93bmVyRG9jdW1lbnQpJiZ2b2lkIDAhPT1yJiZyLmNvbnRhaW5zKGEpfHxudWxsIT1lJiZudWxsIT09KG89ZS5vd25lckRvY3VtZW50KSYmdm9pZCAwIT09byYmby5jb250YWlucyhlKSk7IXMmJmE7KXt2YXIgYyx1LGY7cz0hKG51bGw9PT0odT1hPW51bGw9PT0oYz1pPWwoYSkpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLmhvc3QpfHx2b2lkIDA9PT11fHxudWxsPT09KGY9dS5vd25lckRvY3VtZW50KXx8dm9pZCAwPT09Znx8IWYuY29udGFpbnMoYSkpfXJldHVybiBzfShlKSlyZXR1cm4hZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aDtpZihcImxlZ2FjeS1mdWxsXCIhPT1uKXJldHVybiEwfXJldHVybiExfSh0LGUpfHxmdW5jdGlvbihlKXtyZXR1cm5cIkRFVEFJTFNcIj09PWUudGFnTmFtZSYmQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGUuY2hpbGRyZW4pLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVyblwiU1VNTUFSWVwiPT09ZS50YWdOYW1lfSkpfSh0KXx8ZnVuY3Rpb24oZSl7aWYoL14oSU5QVVR8QlVUVE9OfFNFTEVDVHxURVhUQVJFQSkkLy50ZXN0KGUudGFnTmFtZSkpZm9yKHZhciB0PWUucGFyZW50RWxlbWVudDt0Oyl7aWYoXCJGSUVMRFNFVFwiPT09dC50YWdOYW1lJiZ0LmRpc2FibGVkKXtmb3IodmFyIG49MDtuPHQuY2hpbGRyZW4ubGVuZ3RoO24rKyl7dmFyIHI9dC5jaGlsZHJlbi5pdGVtKG4pO2lmKFwiTEVHRU5EXCI9PT1yLnRhZ05hbWUpcmV0dXJuISFhLmNhbGwodCxcImZpZWxkc2V0W2Rpc2FibGVkXSAqXCIpfHwhci5jb250YWlucyhlKX1yZXR1cm4hMH10PXQucGFyZW50RWxlbWVudH1yZXR1cm4hMX0odCkpfSx2PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIShmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHAoZSkmJlwicmFkaW9cIj09PWUudHlwZX0oZSkmJiFmdW5jdGlvbihlKXtpZighZS5uYW1lKXJldHVybiEwO3ZhciB0LG49ZS5mb3JtfHxsKGUpLHI9ZnVuY3Rpb24oZSl7cmV0dXJuIG4ucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cInJhZGlvXCJdW25hbWU9XCInK2UrJ1wiXScpfTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cuQ1NTJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cuQ1NTLmVzY2FwZSl0PXIod2luZG93LkNTUy5lc2NhcGUoZS5uYW1lKSk7ZWxzZSB0cnl7dD1yKGUubmFtZSl9Y2F0Y2goZSl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJMb29rcyBsaWtlIHlvdSBoYXZlIGEgcmFkaW8gYnV0dG9uIHdpdGggYSBuYW1lIGF0dHJpYnV0ZSBjb250YWluaW5nIGludmFsaWQgQ1NTIHNlbGVjdG9yIGNoYXJhY3RlcnMgYW5kIG5lZWQgdGhlIENTUy5lc2NhcGUgcG9seWZpbGw6ICVzXCIsZS5tZXNzYWdlKSwhMX12YXIgbz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKGVbbl0uY2hlY2tlZCYmZVtuXS5mb3JtPT09dClyZXR1cm4gZVtuXX0odCxlLmZvcm0pO3JldHVybiFvfHxvPT09ZX0oZSl9KHQpfHxmKHQpPDB8fCFnKGUsdCkpfSxtPWZ1bmN0aW9uKGUpe3ZhciB0PXBhcnNlSW50KGUuZ2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiksMTApO3JldHVybiEhKGlzTmFOKHQpfHx0Pj0wKX0sQz1mdW5jdGlvbiBlKHQpe3ZhciBuPVtdLHI9W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxvKXt2YXIgaT0hIXQuc2NvcGVQYXJlbnQsYT1pP3Quc2NvcGVQYXJlbnQ6dCxsPWYoYSxpKSxzPWk/ZSh0LmNhbmRpZGF0ZXMpOmE7MD09PWw/aT9uLnB1c2guYXBwbHkobixzKTpuLnB1c2goYSk6ci5wdXNoKHtkb2N1bWVudE9yZGVyOm8sdGFiSW5kZXg6bCxpdGVtOnQsaXNTY29wZTppLGNvbnRlbnQ6c30pfSkpLHIuc29ydChkKS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuaXNTY29wZT9lLnB1c2guYXBwbHkoZSx0LmNvbnRlbnQpOmUucHVzaCh0LmNvbnRlbnQpLGV9KSxbXSkuY29uY2F0KG4pfSx5PWZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG49KHQ9dHx8e30pLmdldFNoYWRvd1Jvb3Q/dShbZV0sdC5pbmNsdWRlQ29udGFpbmVyLHtmaWx0ZXI6di5iaW5kKG51bGwsdCksZmxhdHRlbjohMSxnZXRTaGFkb3dSb290OnQuZ2V0U2hhZG93Um9vdCxzaGFkb3dSb290RmlsdGVyOm19KTpjKGUsdC5pbmNsdWRlQ29udGFpbmVyLHYuYmluZChudWxsLHQpKSxDKG4pfSx3PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ9dHx8e30pLmdldFNoYWRvd1Jvb3Q/dShbZV0sdC5pbmNsdWRlQ29udGFpbmVyLHtmaWx0ZXI6Zy5iaW5kKG51bGwsdCksZmxhdHRlbjohMCxnZXRTaGFkb3dSb290OnQuZ2V0U2hhZG93Um9vdH0pOmMoZSx0LmluY2x1ZGVDb250YWluZXIsZy5iaW5kKG51bGwsdCkpfSxiPWZ1bmN0aW9uKGUsdCl7aWYodD10fHx7fSwhZSl0aHJvdyBuZXcgRXJyb3IoXCJObyBub2RlIHByb3ZpZGVkXCIpO3JldHVybiExIT09YS5jYWxsKGUsbykmJnYodCxlKX0seD1yLmNvbmNhdChcImlmcmFtZVwiKS5qb2luKFwiLFwiKSxfPWZ1bmN0aW9uKGUsdCl7aWYodD10fHx7fSwhZSl0aHJvdyBuZXcgRXJyb3IoXCJObyBub2RlIHByb3ZpZGVkXCIpO3JldHVybiExIT09YS5jYWxsKGUseCkmJmcodCxlKX19LDk4Mjg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRm9udHM9dm9pZCAwO2NvbnN0IG89cihuKDQ2NjgpKSxpPXIobig2MDM2KSksYT1yKG4oNTk0MSkpLGw9cihuKDI4MTMpKTt0LkZvbnRzPXtyZWd1bGFyOm8uZGVmYXVsdCxpdGFsaWM6aS5kZWZhdWx0LHNlbWlCb2xkOmEuZGVmYXVsdCxzZW1pQm9sZEl0YWxpYzpsLmRlZmF1bHR9fSw2MjE4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5ODI4KSx0KX0sNDI0OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJ1dHRvblRleHRPbmx5PXQuQnV0dG9uU2Vjb25kYXJ5PXQuQnV0dG9uUHJpbWFyeT10LkJ1dHRvbj12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGE9byhuKDc1MTgpKSxsPW4oMTMzNSkscz1uKDk1MDcpLGM9big2MTI2KTt0LkJ1dHRvbj1lPT57dmFye2xhYmVsOnQsY2hpbGRyZW46bixzaXplOm89XCJiYXNlXCIsc2hhcGU6YT1cInNxdWFyZVwiLGtpbmQ6bD1cInByaW1hcnlcIixsYXlvdXQ6cz1cImZpdFwiLGhyZWY6Y309ZSxkPXIoZSxbXCJsYWJlbFwiLFwiY2hpbGRyZW5cIixcInNpemVcIixcInNoYXBlXCIsXCJraW5kXCIsXCJsYXlvdXRcIixcImhyZWZcIl0pO3JldHVybigwLGkuanN4KSh1LE9iamVjdC5hc3NpZ24oe2FzOmM/XCJhXCI6XCJidXR0b25cIixzaXplOm8sc2hhcGU6YSxraW5kOmwsbGF5b3V0OnN9LGQse2NoaWxkcmVuOnQ/KDAsaS5qc3gpKGYsT2JqZWN0LmFzc2lnbih7YWxpZ25JdGVtczpcImNlbnRlclwiLGp1c3RpZnlDb250ZW50OlwiY2VudGVyXCJ9LHtjaGlsZHJlbjp0fSkpOm59KSl9O2NvbnN0IHU9YS5kZWZhdWx0LmJ1dHRvbmBcbiAgLyogRGVmYXVsdCB2YWx1ZXMgdGhhdCBnZXQgb3ZlcnJpZGRlbiBieSB2YXJpYW50cyAqL1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRCYWNrZ3JvdW5kfTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0QmFja2dyb3VuZH07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5VGV4dH07XG5cbiAgLyogSW5qZWN0IHZhcmlhbnRzICovXG4gICR7KDAscy5nZXRWYXJpYW50Q1NTKShjLnZhcmlhbnRzLGMuVmFyaWFudC5zaXplKX1cbiAgJHsoMCxzLmdldFZhcmlhbnRDU1MpKGMudmFyaWFudHMsYy5WYXJpYW50LnNoYXBlKX1cbiAgJHsoMCxzLmdldFZhcmlhbnRDU1MpKGMudmFyaWFudHMsYy5WYXJpYW50LmtpbmQpfVxuICAkeygwLHMuZ2V0VmFyaWFudENTUykoYy52YXJpYW50cyxjLlZhcmlhbnQubGF5b3V0KX1cblxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgb3V0bGluZTogbm9uZTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LnVpfTtcbiAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ib2xkfTtcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbik7XG5cbiAgJjpub3QoOmRpc2FibGVkKSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgJjpkaXNhYmxlZCxcbiAgJjphY3RpdmU6ZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0UGxhY2Vob2xkZXJ9O1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIH1cbmAsZj0oMCxhLmRlZmF1bHQpKGwuQm94KWBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4LnhzbWFsbH1gfTtcbmA7dC5CdXR0b25QcmltYXJ5PWU9PigwLGkuanN4KSh0LkJ1dHRvbixPYmplY3QuYXNzaWduKHt9LGUse2tpbmQ6XCJwcmltYXJ5XCJ9KSksdC5CdXR0b25TZWNvbmRhcnk9ZT0+KDAsaS5qc3gpKHQuQnV0dG9uLE9iamVjdC5hc3NpZ24oe30sZSx7a2luZDpcInNlY29uZGFyeVwifSkpLHQuQnV0dG9uVGV4dE9ubHk9ZT0+KDAsaS5qc3gpKHQuQnV0dG9uLE9iamVjdC5hc3NpZ24oe30sZSx7a2luZDpcInRleHRPbmx5XCJ9KSl9LDYxMjY6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudmFyaWFudHM9dC5CdXR0b25TaGFwZT10LkJ1dHRvbkxheW91dD10LkJ1dHRvblNpemU9dC5CdXR0b25LaW5kPXQuVmFyaWFudD12b2lkIDA7Y29uc3Qgcj1uKDc1MTgpO3QuVmFyaWFudD17c2hhcGU6XCJzaGFwZVwiLHNpemU6XCJzaXplXCIsa2luZDpcImtpbmRcIixsYXlvdXQ6XCJsYXlvdXRcIn0sdC5CdXR0b25LaW5kPXtwcmltYXJ5OlwicHJpbWFyeVwiLHNlY29uZGFyeTpcInNlY29uZGFyeVwiLHRleHRPbmx5OlwidGV4dE9ubHlcIn0sdC5CdXR0b25TaXplPXtzbWFsbDpcInNtYWxsXCIsYmFzZTpcImJhc2VcIixsYXJnZTpcImxhcmdlXCJ9LHQuQnV0dG9uTGF5b3V0PXtmaXQ6XCJmaXRcIixmdWxsOlwiZnVsbFwifSx0LkJ1dHRvblNoYXBlPXtzcXVhcmU6XCJzcXVhcmVcIixwaWxsOlwicGlsbFwifSx0LnZhcmlhbnRzPXtbdC5WYXJpYW50LnNpemVdOntbdC5CdXR0b25TaXplLmJhc2VdOnIuY3NzYFxuICAgICAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gJHtlLnB4LmxhcmdlfWB9O1xuICAgICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICAgIGAsW3QuQnV0dG9uU2l6ZS5zbWFsbF06ci5jc3NgXG4gICAgICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnhzbWFsbH0gJHtlLnB4LmJhc2V9YH07XG4gICAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuc21hbGx9O1xuICAgIGAsW3QuQnV0dG9uU2l6ZS5sYXJnZV06ci5jc3NgXG4gICAgICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LmJhc2V9ICR7ZS5weC54bGFyZ2V9YH07XG4gICAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUubGFyZ2V9O1xuICAgIGB9LFt0LlZhcmlhbnQuc2hhcGVdOntbdC5CdXR0b25TaGFwZS5zcXVhcmVdOnIuY3NzYFxuICAgICAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICAgIGAsW3QuQnV0dG9uU2hhcGUucGlsbF06ci5jc3NgXG4gICAgICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5waWxsfTtcbiAgICBgfSxbdC5WYXJpYW50LmxheW91dF06e1t0LkJ1dHRvbkxheW91dC5maXRdOnIuY3NzYFxuICAgICAgd2lkdGg6IGZpdC1jb250ZW50O1xuICAgIGAsW3QuQnV0dG9uTGF5b3V0LmZ1bGxdOnIuY3NzYFxuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgYH0sW3QuVmFyaWFudC5raW5kXTp7W3QuQnV0dG9uS2luZC5wcmltYXJ5XTpyLmNzc2BcbiAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnl9O1xuICAgICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlIb3Zlcn07XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeUFjdGl2ZX07XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlGb2N1c2VkfTtcbiAgICAgIH1cbiAgICBgLFt0LkJ1dHRvbktpbmQuc2Vjb25kYXJ5XTpyLmNzc2BcbiAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeX07XG4gICAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeX07XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kU2Vjb25kYXJ5VGV4dH07XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRTZWNvbmRhcnlIb3Zlcn07XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kU2Vjb25kYXJ5QWN0aXZlfTtcbiAgICAgIH1cblxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kU2Vjb25kYXJ5Rm9jdXNlZH07XG4gICAgICB9XG4gICAgYCxbdC5CdXR0b25LaW5kLnRleHRPbmx5XTpyLmNzc2BcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIG9wYWNpdHk6IDAuODtcbiAgICAgIH1cblxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gICAgICB9XG4gICAgYH19fSw0MTMwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig0MjQ5KSx0KSxvKG4oNjEyNiksdCl9LDM5MTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2FyZENvbnRhaW5lcj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9cihuKDc1MTgpKSxhPW4oOTUwNyksbD1uKDEzMzUpO3QuQ2FyZENvbnRhaW5lcj1lPT4oMCxvLmpzeCkocyxPYmplY3QuYXNzaWduKHtzdHlsZTp7bWF4SGVpZ2h0OmUubWF4SGVpZ2h0LG92ZXJmbG93WTpcImF1dG9cIn0saWQ6XCJjYXJkLWNvbnRhaW5lclwiLFwiZGF0YS10ZXN0aWRcIjpcImNhcmQtY29udGFpbmVyXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoYyx7Y2hpbGRyZW46ZS5jaGlsZHJlbn0pfSkpO2NvbnN0IHM9KDAsaS5kZWZhdWx0KShsLkJveClgXG4gIGRpc3BsYXk6IGJsb2NrO1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDN9O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ1fTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfVxuICAgICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9IDBweDtcbiAgd2lkdGg6IDEwMCU7XG4gICR7YS5NaXhpbnMuc2Nyb2xsYmFyLmJhc2V9O1xuICBnYXA6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG5gLGM9aS5kZWZhdWx0LmRpdmBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH0gJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH0gMHB4XG4gICAgJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgd2lkdGg6IDEwMCU7XG5gfSwxMjQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29sbGFwc2libGVDYXJkU3RhdGVsZXNzPXQuQ29sbGFwc2libGVDYXJkPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1uKDY2ODkpLGE9cihuKDc1MTgpKSxsPW4oMzEzNikscz1uKDk2MzQpLGM9bigxMzM1KSx1PW4oMzkxMSksZj1uKDc3NjkpLGQ9big5NTA3KTt0LkNvbGxhcHNpYmxlQ2FyZD0oMCxpLmZvcndhcmRSZWYpKCgoZSxuKT0+e2NvbnN0W3IsYV09KDAsaS51c2VTdGF0ZSkoZS5leHBhbmRlZHx8ITEpO3JldHVybigwLG8uanN4KSh0LkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzcyxPYmplY3QuYXNzaWduKHt9LGUse3JlZjpuLGV4cGFuZGVkOnIsb25FeHBhbmQ6ZT0+YSghZSl9KSl9KSksdC5Db2xsYXBzaWJsZUNhcmQuZGlzcGxheU5hbWU9XCJDb2xsYXBzaWJsZUNhcmRcIix0LkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzcz0oMCxpLmZvcndhcmRSZWYpKCgoZSx0KT0+e3ZhciBuLHI7cmV0dXJuKDAsby5qc3hzKShwLE9iamVjdC5hc3NpZ24oe1wiZGF0YS10ZXN0aWRcIjpcImNvbGxhcHNpYmxlLWNhcmRcIn0se2NoaWxkcmVuOlsoMCxvLmpzeHMpKGcsT2JqZWN0LmFzc2lnbih7XCJhcmlhLWV4cGFuZGVkXCI6ZS5leHBhbmRlZCxcImRhdGEtdGVzdGlkXCI6XCJoZWFkaW5nLWNvbnRhaW5lclwiLHJlZjp0LHpJbmRleDpudWxsPT09KG49ZS5oZWFkZXJTZXR0aW5ncyl8fHZvaWQgMD09PW4/dm9pZCAwOm4uekluZGV4LGZpeGVkSGVhZGVyOm51bGw9PT0ocj1lLmhlYWRlclNldHRpbmdzKXx8dm9pZCAwPT09cj92b2lkIDA6ci5maXhlZEhlYWRlcixvbkNsaWNrOigpPT5lLm9uRXhwYW5kKGUuZXhwYW5kZWQpLHRhYkluZGV4OjAsb25LZXlEb3duOnQ9Pntzd2l0Y2godC5jb2RlKXtjYXNlXCJFbnRlclwiOmNhc2VcIlNwYWNlXCI6dC5wcmV2ZW50RGVmYXVsdCgpLGUub25FeHBhbmQoZS5leHBhbmRlZCl9fX0se2NoaWxkcmVuOlsoMCxvLmpzeCkoaCx7Y2hpbGRyZW46ZS50aXRsZX0pLCgwLG8uanN4cykoXCJkaXZcIixPYmplY3QuYXNzaWduKHtpZDpcImljb24tY29udGFpbmVyXCJ9LHtjaGlsZHJlbjpbdm9pZCAwIT09ZS5iYWRnZVRleHQmJigwLG8uanN4KShsLkJhZGdlLHtjb3VudDplLmJhZGdlVGV4dCxpZDpcImNvbGxhcHNpYmxlLWNhcmQtaGVhZGluZy1iYWRnZVwiLFwiZGF0YS10ZXN0aWRcIjpcImNvbGxhcHNpYmxlLWNhcmQtaGVhZGluZy1iYWRnZVwifSksKDAsby5qc3gpKHMuSWNvbix7aWNvbjplLmV4cGFuZGVkP1wiQ2hldnJvblVwSWNvblwiOlwiQ2hldnJvbkRvd25JY29uXCJ9KV19KSldfSkpLGUuZXhwYW5kZWQmJigwLG8uanN4KSh1LkNhcmRDb250YWluZXIsT2JqZWN0LmFzc2lnbih7bWF4SGVpZ2h0OmUubWF4SGVpZ2h0fHxcIm5vbmVcIn0se2NoaWxkcmVuOigwLG8uanN4KShcImRpdlwiLHtjaGlsZHJlbjplLmNoaWxkcmVufSl9KSldfSkpfSkpLHQuQ29sbGFwc2libGVDYXJkU3RhdGVsZXNzLmRpc3BsYXlOYW1lPVwiQ29sbGFwc2libGVDYXJkU3RhdGVsZXNzXCI7Y29uc3QgcD1hLmRlZmF1bHQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDEwMCU7XG5gLGg9KDAsYS5kZWZhdWx0KShmLlRleHQpYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgJHtkLk1peGlucy50ZXh0T3ZlcmZsb3d9O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuYCxnPSgwLGEuZGVmYXVsdCkoYy5Cb3gpYFxuICBwb3NpdGlvbjogJHsoe2ZpeGVkSGVhZGVyOmV9KT0+ZT9cInN0aWNreVwiOlwicmVsYXRpdmVcIn07XG4gIHRvcDogJHsoe2ZpeGVkSGVhZGVyOmV9KT0+ZT8wOnZvaWQgMH07XG4gIHotaW5kZXg6ICR7KHt6SW5kZXg6ZX0pPT5lfTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQzfTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNX07XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDV9O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBnYXA6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQuaGVhZGluZ307XG4gIG91dGxpbmU6IG5vbmU7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuICB3aWR0aDogMTAwJTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAjaWNvbi1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgfVxuXG4gICNjb2xsYXBzaWJsZS1jYXJkLWhlYWRpbmctYmFkZ2Uge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnl9O1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgfVxuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMn07XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNX07XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNX07XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJvcmRlck5ldXRyYWx9O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYm9yZGVyTmV1dHJhbH07XG4gIH1cbmB9LDc0MDE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDEyNCksdCl9LDkzMTg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ3VzdG9tQ29udGV4dE1lbnU9dC5DT05URVhUX01FTlVfQU5JTUFUSU9OX0RVUkFUSU9OPXQuUFJJT1JfQ09OVEVYVF9NRU5VX0NMQVNTPXQuQkFTRV9DT05URVhUX01FTlU9dC5BQ1RJVkVfQ09OVEVYVF9NRU5VX0NMQVNTPXQuQ09OVEVYVF9NRU5VX0ZSQU1FX0lEPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1uKDY2ODkpLGE9cihuKDc1MTgpKSxsPW4oNzY0MSkscz1uKDEzMzUpLGM9big5MzA2KSx1PW4oNzMzNiksZj1uKDQ3MjUpLGQ9big0NzQwKSxwPW4oNjQ0OSk7dC5DT05URVhUX01FTlVfRlJBTUVfSUQ9XCJjb250ZXh0X21lbnVfZnJhbWVcIix0LkFDVElWRV9DT05URVhUX01FTlVfQ0xBU1M9XCJhY3RpdmVfY29udGV4dF9tZW51XCIsdC5CQVNFX0NPTlRFWFRfTUVOVT1cImJhc2VfY29udGV4dF9tZW51XCIsdC5QUklPUl9DT05URVhUX01FTlVfQ0xBU1M9XCJwcmV2aW91c19jb250ZXh0X21lbnVcIix0LkNPTlRFWFRfTUVOVV9BTklNQVRJT05fRFVSQVRJT049MjAwLHQuQ3VzdG9tQ29udGV4dE1lbnU9KHttZW51VGVtcGxhdGU6ZSxvbkNsaWNrOm4saWNvbjpyLG9uTWVudVJlc2l6ZTphLG9uQ29udGV4dE1lbnVSZWFkeTpzLGlzV2luZG93czp2PSEwfSk9Pnt2YXIgbTtjb25zdCBDPSgwLGkudXNlUmVmKShudWxsKSxbeSx3XT0oMCxpLnVzZVN0YXRlKSghMSksW2IseF09KDAsaS51c2VTdGF0ZSkoe3dpZHRoOjE2MCxoZWlnaHQ6MTYwfSksW18sT109KDAsaS51c2VTdGF0ZSkoMCksW0wsRV09KDAsaS51c2VTdGF0ZSkoW10pLFtTLGpdPSgwLGkudXNlU3RhdGUpKCksW00sa109KDAsaS51c2VTdGF0ZSkoW10pLFtSLFBdPSgwLGkudXNlU3RhdGUpKGUubWFwKChlPT5lLmxhYmVsfHxcIlwiKSkpLFtJLEFdPSgwLGkudXNlU3RhdGUpKC0xKTsoMCxpLnVzZUVmZmVjdCkoKCgpPT57UChlLm1hcCgoZT0+ZS5sYWJlbHx8XCJcIikpKSxBKFIuZmluZEluZGV4KChlPT5lPT09UykpKX0pLFtlXSk7Y29uc3R7d2lkdGg6VCxoZWlnaHQ6SH09KDAsYy51c2VSZXNpemVDb250ZXh0TWVudSkoUykse2hhbmRsZU5hdmlnYXRlVG9TdWJtZW51OkIsaGFuZGxlTmF2aWdhdGVCYWNrVG9QYXJlbnQ6VixoYW5kbGVOYXZpZ2F0ZVRvQmFzZTpEfT0oMCxmLnVzZUNvbnRleHRNZW51TmF2aWdhdGlvbikoXyxPLE0sayxTLGoseCxBLEwsYSk7cmV0dXJuKDAsaS51c2VFZmZlY3QpKCgoKT0+e0UoKDAsdS5nZXRNZW51TmF2aWdhdGlvbk9yZGVyKShlKSksaih0LkJBU0VfQ09OVEVYVF9NRU5VKSxrKFtdKSx4KHt3aWR0aDpULGhlaWdodDpIfSl9KSxbZV0pLCgwLGQudXNlQ29udGV4dE1lbnVLZXlib2FyZE5hdmlnYXRpb24pKG51bGw9PT0obT1MLmZpbmQoKGU9PmUucGFyZW50TGFiZWw9PT1TKSkpfHx2b2lkIDA9PT1tP3ZvaWQgMDptLm1lbnVUZW1wbGF0ZSxNLFMsSSxBLG4sQixWLEQpLCgwLGkudXNlRWZmZWN0KSgoKCk9PntDLmN1cnJlbnQmJih5fHwocyYmcygpLHcoITApKSl9KSxbQy5jdXJyZW50XSksKDAsby5qc3gpKGgsT2JqZWN0LmFzc2lnbih7aWQ6dC5DT05URVhUX01FTlVfRlJBTUVfSUQsdHJhbnNpdGlvblNwZWVkOl8saXNXaW5kb3dzOnZ9LHtjaGlsZHJlbjpMLm1hcCgoKHtwYXJlbnRMYWJlbDplLG1lbnVUZW1wbGF0ZTppfSk9PigwLG8uanN4KShcImRpdlwiLE9iamVjdC5hc3NpZ24oe3JlZjplPT09Uz9DOnZvaWQgMH0se2NoaWxkcmVuOigwLG8uanN4cykoZyxPYmplY3QuYXNzaWduKHtjbGFzc05hbWU6KDAsdS5nZXRDbGFzc05hbWUpKGUsUyxNKSxhY3RpdmVNZW51V2lkdGg6Yi53aWR0aCx0cmFuc2l0aW9uU3BlZWQ6XyxpZDplfSx7Y2hpbGRyZW46W2UhPT10LkJBU0VfQ09OVEVYVF9NRU5VPygwLG8uanN4KShsLkN1c3RvbUNvbnRleHRNZW51SXRlbSx7dHlwZTpcInN1Ym1lbnVIZWFkZXJcIixsYWJlbDplLG9uQmFjazooKT0+VihlLFwiY2xpY2tcIiksb25DbG9zZTpELHNob3dTaG91bGRIb21lQnV0dG9uOk0uc2xpY2UoMikuaW5jbHVkZXMoZSl8fE0ubGVuZ3RoPj0yJiZTPT09ZSxzZWxlY3RlZDotMT09PUl9LGAke2V9LXN1Ym1lbnUtaGVhZGVyYCk6ciYmKDAsby5qc3gpKHAuUm9vdE1lbnVIZWFkZXIse2ljb246cn0pLGkubWFwKCgodCxyKT0+KDAsby5qc3gpKGwuQ3VzdG9tQ29udGV4dE1lbnVJdGVtLE9iamVjdC5hc3NpZ24oe29uQ2xpY2s6KCk9Pnt0Lmhhc1N1Yk1lbnU/Qih0LmxhYmVsfHxcIlwiKTpuKHQuZGF0YSksQSgtMil9fSx0LHtzdWJtZW51OnQuaGFzU3ViTWVudSxzZWxlY3RlZDpJPT09cn0pLGAke2V9LSR7dC5sYWJlbH0tJHtyfWApKSldfSkpfSksZSkpKX0pKX07Y29uc3QgaD1hLmRlZmF1bHQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1pbi13aWR0aDogZml0LWNvbnRlbnQ7XG4gIG1pbi1oZWlnaHQ6IGZpdC1jb250ZW50O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMX07XG4gIHRyYW5zaXRpb246ICR7KHt0cmFuc2l0aW9uU3BlZWQ6ZX0pPT5gYWxsICR7ZX1tcyBsaW5lYXJgfTtcbiAgYm9yZGVyOiAkeyh7dGhlbWU6ZX0pPT5gMXB4IHNvbGlkICR7ZS5wYWxldHRlLmJhY2tncm91bmQyfWB9O1xuICBib3JkZXItcmFkaXVzOiAkeyh7aXNXaW5kb3dzOmV9KT0+IWUmJlwiMTBweFwifTtcbmAsZz0oMCxhLmRlZmF1bHQpKHMuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMX07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9IDAgJHtlLnB4LnNtYWxsfSAwYH07XG5cbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKCR7KHthY3RpdmVNZW51V2lkdGg6ZX0pPT5gJHtlfXB4YH0pO1xuICB0cmFuc2l0aW9uOiAkeyh7dHJhbnNpdGlvblNwZWVkOmV9KT0+YGFsbCAke2V9bXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuNTgsIDEpYH07XG4gIG9wYWNpdHk6IDAlO1xuXG4gICYuYWN0aXZlX2NvbnRleHRfbWVudSB7XG4gICAgdHJhbnNmb3JtOiB1bnNldDtcbiAgICBvcGFjaXR5OiAxMDAlO1xuICB9XG5cbiAgJi5wcmV2aW91c19jb250ZXh0X21lbnUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XG4gICAgb3BhY2l0eTogMCU7XG4gIH1cbmB9LDc2NDE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ3VzdG9tQ29udGV4dE1lbnVJdGVtPXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1uKDM2MDApLGk9bigyMDgwKSxhPW4oOTA2OCksbD17bm9ybWFsOmkuTm9ybWFsQ3VzdG9tQ29udGV4dE1lbnVJdGVtLGNoZWNrYm94OmkuTm9ybWFsQ3VzdG9tQ29udGV4dE1lbnVJdGVtLHN1Ym1lbnU6aS5Ob3JtYWxDdXN0b21Db250ZXh0TWVudUl0ZW0sc2VwYXJhdG9yOm8uU2VwYXJhdG9yQ3VzdG9tQ29udGV4dE1lbnVJdGVtLHN1Ym1lbnVIZWFkZXI6YS5TdWJtZW51SGVhZGVyQ3VzdG9tQ29udGV4dE1lbnVJdGVtfTt0LkN1c3RvbUNvbnRleHRNZW51SXRlbT0oe3R5cGU6ZT1cIm5vcm1hbFwiLGljb246dCxsYWJlbDpuLGVuYWJsZWQ6bz0hMCxjaGVja2VkOmksc3VibWVudTphLHNob3dTaG91bGRIb21lQnV0dG9uOnMsb25DbGljazpjLG9uQ2xvc2U6dSxvbkJhY2s6ZixzZWxlY3RlZDpkfSk9Pntjb25zdCBwPWxbZV07bGV0IGg7c3dpdGNoKGUpe2Nhc2VcIm5vcm1hbFwiOmNhc2VcImNoZWNrYm94XCI6aD17dHlwZTplLGxhYmVsOm4saWNvbjp0LGVuYWJsZWQ6byxjaGVja2VkOmksc2VsZWN0ZWQ6ZH07YnJlYWs7Y2FzZVwic3VibWVudVwiOmg9e2xhYmVsOm4sZW5hYmxlZDpvLGNoZWNrZWQ6aSxzdWJtZW51OmEsc2VsZWN0ZWQ6ZH07YnJlYWs7Y2FzZVwic3VibWVudUhlYWRlclwiOmg9e2xhYmVsOm4sc2hvd1Nob3VsZEhvbWVCdXR0b246cyxvbkNsb3NlOnUsb25CYWNrOmYsc2VsZWN0ZWQ6ZH07YnJlYWs7Y2FzZVwic2VwYXJhdG9yXCI6aD17fX1yZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKHAsT2JqZWN0LmFzc2lnbih7fSxoLHtrZXk6bixvbkNsaWNrOmN9KSl9fSwyMDgwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk5vcm1hbEN1c3RvbUNvbnRleHRNZW51SXRlbT12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9cihuKDc1MTgpKSxhPW4oMTMzNSksbD1uKDc3NjkpLHM9big5NjM0KTt0Lk5vcm1hbEN1c3RvbUNvbnRleHRNZW51SXRlbT0oe3R5cGU6ZSxsYWJlbDp0LGVuYWJsZWQ6bj0hMCxjaGVja2VkOnIsc3VibWVudTppLG9uQ2xpY2s6YSxzZWxlY3RlZDpsfSk9PigwLG8uanN4KShjLHtjaGlsZHJlbjooMCxvLmpzeHMpKHUsT2JqZWN0LmFzc2lnbih7b25DbGljazpuP2E6dm9pZCAwLGVuYWJsZWQ6bi50b1N0cmluZygpLHNlbGVjdGVkOmx9LHtjaGlsZHJlbjpbXCJjaGVja2JveFwiPT09ZSYmKDAsby5qc3gpKGYsT2JqZWN0LmFzc2lnbih7c2lkZTpcImxlZnRcIn0se2NoaWxkcmVuOigwLG8uanN4KShkLHtpY29uOlwiQ2hlY2tJY29uXCIsZW5hYmxlZDpuLnRvU3RyaW5nKCksY2hlY2tlZDpyfSl9KSksKDAsby5qc3gpKGgsT2JqZWN0LmFzc2lnbih7c2l6ZTpcImJhc2VcIix3ZWlnaHQ6XCJub3JtYWxcIixlbmFibGVkOm59LHtjaGlsZHJlbjp0fSkpLGkmJigwLG8uanN4KShmLE9iamVjdC5hc3NpZ24oe3NpZGU6XCJyaWdodFwifSx7Y2hpbGRyZW46KDAsby5qc3gpKHAse2ljb246XCJDaGV2cm9uUmlnaHRJY29uXCIsZW5hYmxlZDpuLnRvU3RyaW5nKCl9KX0pKV19KSl9KTtjb25zdCBjPSgwLGkuZGVmYXVsdCkoYS5Cb3gpYFxuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4LnNtYWxsfSAwICR7ZS5weC5zbWFsbH1gfTtcbmAsdT0oMCxpLmRlZmF1bHQpKGEuQm94KWBcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMjhweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplLHNlbGVjdGVkOnQsZW5hYmxlZDpufSk9PlwiZmFsc2VcIiE9PW4mJnQ/ZS5wYWxldHRlLmJhY2tncm91bmQzOlwidHJhbnNwYXJlbnRcIn07XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmUsZW5hYmxlZDp0fSk9PlwiZmFsc2VcIiE9PXQ/ZS5wYWxldHRlLmJhY2tncm91bmQzOlwidHJhbnNwYXJlbnRcIn07XG4gIH1cbmAsZj0oMCxpLmRlZmF1bHQpKGEuQm94KWBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmUsc2lkZTp0fSk9PlwicmlnaHRcIj09PXQ/YDAgJHtlLnB4LnNtYWxsfSAwIDBgOmAwIDAgMCAke2UucHguc21hbGx9YH07XG4gIG1hcmdpbi1sZWZ0OiAkeyh7c2lkZTplfSk9PlwicmlnaHRcIj09PWU/XCJhdXRvXCI6MH07XG5gLGQ9KDAsaS5kZWZhdWx0KShzLkljb24pYFxuICBzdmcgcGF0aCB7XG4gICAgZmlsbDogJHsoe3RoZW1lOmUsZW5hYmxlZDp0LGNoZWNrZWQ6bn0pPT5cInRydWVcIj09PXQ/bj9lLnBhbGV0dGUudGV4dERlZmF1bHQ6XCJ0cmFuc3BhcmVudFwiOmUucGFsZXR0ZS50ZXh0SW5hY3RpdmV9O1xuICAgIHN0cm9rZS13aWR0aDogMS4yNTtcbiAgfVxuYCxwPSgwLGkuZGVmYXVsdCkocy5JY29uKWBcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG5cbiAgc3ZnIHBhdGgge1xuICAgIGZpbGw6ICR7KHt0aGVtZTplLGVuYWJsZWQ6dH0pPT5cInRydWVcIj09PXQ/ZS5wYWxldHRlLnRleHREZWZhdWx0OmUucGFsZXR0ZS50ZXh0SW5hY3RpdmV9O1xuICAgIHN0cm9rZS13aWR0aDogMS4yNTtcbiAgfVxuYCxoPSgwLGkuZGVmYXVsdCkobC5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplLGVuYWJsZWQ6dH0pPT50P2UucGFsZXR0ZS50ZXh0RGVmYXVsdDplLnBhbGV0dGUudGV4dEluYWN0aXZlfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4Lnh4eGxhcmdlfSAwICR7ZS5weC5zbWFsbH1gfTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuYH0sNjQ0OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Sb290TWVudUhlYWRlcj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9cihuKDc1MTgpKSxhPW4oMTMzNSksbD1uKDM2MDApO3QuUm9vdE1lbnVIZWFkZXI9KHtpY29uOmV9KT0+KDAsby5qc3hzKShvLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsby5qc3gpKHMse2NoaWxkcmVuOmV9KSwoMCxvLmpzeCkobC5TZXBhcmF0b3JDdXN0b21Db250ZXh0TWVudUl0ZW0se30pXX0pO2NvbnN0IHM9KDAsaS5kZWZhdWx0KShhLkJveClgXG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDI4cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gMCAwIDAgJHtlLnB4LmxhcmdlfWB9O1xuYH0sMzYwMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TZXBhcmF0b3JDdXN0b21Db250ZXh0TWVudUl0ZW09dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPW4oMTMzNSksYT1yKG4oNzUxOCkpO3QuU2VwYXJhdG9yQ3VzdG9tQ29udGV4dE1lbnVJdGVtPSgpPT4oMCxvLmpzeCkobCxPYmplY3QuYXNzaWduKHtcImRhdGEtdGVzdGlkXCI6XCJjdXN0b20tY29udGV4dC1tZW51LXNlcGFyYXRvclwifSx7Y2hpbGRyZW46KDAsby5qc3gpKHMse30pfSkpO2NvbnN0IGw9KDAsYS5kZWZhdWx0KShpLkJveClgXG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfSAwO1xuYCxzPWEuZGVmYXVsdC5ocmBcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMXB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMn07XG5gfSw5MDY4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlN1Ym1lbnVIZWFkZXJDdXN0b21Db250ZXh0TWVudUl0ZW09dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPW4oNjY4OSksYT1yKG4oNzUxOCkpLGw9big5NjM0KSxzPW4oNzc2OSksYz1uKDEzMzUpLHU9bigzNjAwKTt0LlN1Ym1lbnVIZWFkZXJDdXN0b21Db250ZXh0TWVudUl0ZW09KHtsYWJlbDplLHNob3dTaG91bGRIb21lQnV0dG9uOnQsb25DbG9zZTpuLG9uQmFjazpyLHNlbGVjdGVkOmF9KT0+e2NvbnN0IGw9KDAsaS51c2VDYWxsYmFjaykoKGU9PntlLnN0b3BQcm9wYWdhdGlvbigpLG51bGw9PXJ8fHIoKX0pLFtyXSkscz0oMCxpLnVzZUNhbGxiYWNrKSgoZT0+e2Uuc3RvcFByb3BhZ2F0aW9uKCksbnVsbD09bnx8bigpfSksW25dKTtyZXR1cm4oMCxvLmpzeHMpKG8uRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxvLmpzeHMpKGYse2NoaWxkcmVuOlsoMCxvLmpzeCkoZCxPYmplY3QuYXNzaWduKHtzaWRlOlwibGVmdFwiLHNlbGVjdGVkOmF9LHtjaGlsZHJlbjooMCxvLmpzeCkocCx7aWNvbjpcIkFycm93TGVmdEljb25cIixvbkNsaWNrOmwsaWQ6XCJiYWNrLWljb25cIixzZWxlY3RlZDphfSl9KSksKDAsby5qc3gpKGgsT2JqZWN0LmFzc2lnbih7c2l6ZTpcImJhc2VcIix3ZWlnaHQ6XCJub3JtYWxcIn0se2NoaWxkcmVuOmV9KSksdCYmKDAsby5qc3gpKGQsT2JqZWN0LmFzc2lnbih7c2lkZTpcInJpZ2h0XCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoZyx7aWNvbjpcIkNyb3NzMUljb25cIixvbkNsaWNrOnMsaWQ6XCJjbG9zZS1pY29uXCJ9KX0pKV19KSwoMCxvLmpzeCkodS5TZXBhcmF0b3JDdXN0b21Db250ZXh0TWVudUl0ZW0se30pXX0pfTtjb25zdCBmPSgwLGEuZGVmYXVsdCkoYy5Cb3gpYFxuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAyOHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4LnNtYWxsfSAwICR7ZS5weC5zbWFsbH1gfTtcbmAsZD0oMCxhLmRlZmF1bHQpKGMuQm94KWBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmUsc2lkZTp0fSk9PlwicmlnaHRcIj09PXQ/YDAgJHtlLnB4LnNtYWxsfSAwIDBgOmAwIDAgMCAke2UucHguc21hbGx9YH07XG4gIG1hcmdpbi1sZWZ0OiAkeyh7c2lkZTplfSk9PlwicmlnaHRcIj09PWU/XCJhdXRvXCI6MH07XG5gLHA9KDAsYS5kZWZhdWx0KShsLkljb24pYFxuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHtzZWxlY3RlZDplLHRoZW1lOnR9KT0+ZT90LnBhbGV0dGUuYmFja2dyb3VuZDM6XCJ0cmFuc3BhcmVudFwifTtcbiAgY29sb3I6ICR7KHt0aGVtZTplLHNlbGVjdGVkOnR9KT0+dD9lLnBhbGV0dGUudGV4dERlZmF1bHQ6ZS5wYWxldHRlLnRleHRIZWxwfTtcbiAgc3Ryb2tlLXdpZHRoOiAxLjI1O1xuXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICB9XG5gLGg9KDAsYS5kZWZhdWx0KShzLlRleHQpYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRIZWxwfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4Lnh4eGxhcmdlfSAwICR7ZS5weC5zbWFsbH1gfTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuYCxnPSgwLGEuZGVmYXVsdCkobC5JY29uKWBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBzdHJva2Utd2lkdGg6IDEuMjU7XG5cbiAgJjpob3ZlciB7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gIH1cbmB9LDk1MDE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDkzMTgpLHQpfSw0NzQwOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUNvbnRleHRNZW51S2V5Ym9hcmROYXZpZ2F0aW9uPXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1uKDkzMTgpO3QudXNlQ29udGV4dE1lbnVLZXlib2FyZE5hdmlnYXRpb249KGUsdCxuLGksYSxsLHMsYyx1KT0+e2NvbnN0IGY9dD0+e3ZhciBuLHIsbztyZXR1cm5cInNlcGFyYXRvclwiPT09KG51bGw9PT0obj1lW3RdKXx8dm9pZCAwPT09bj92b2lkIDA6bi50eXBlKXx8ITE9PT0obnVsbD09PShyPWVbdF0pfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmVuYWJsZWQpfHwhMT09PShudWxsPT09KG89ZVt0XSl8fHZvaWQgMD09PW8/dm9pZCAwOm8udmlzaWJsZSl9LGQ9KDAsci51c2VDYWxsYmFjaykoKCgpPT57YSgodD0+e2xldCBuPXQ7ZG97aWYobj09PShudWxsPT1lP3ZvaWQgMDplLmxlbmd0aCktMSlicmVhaztuKz0xfXdoaWxlKGYobikpO3JldHVybiBmKG4pP3Q6bn0pKX0pLFthLGVdKSxwPSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+e2EoKGU9PntsZXQgdD1lO2Rve2lmKG49PT1vLkJBU0VfQ09OVEVYVF9NRU5VJiYwPT09dHx8LTE9PT10KWJyZWFrO3QtPTF9d2hpbGUoZih0KSk7cmV0dXJuIHR9KSl9KSxbYSxlXSksaD0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9PnthKG49PT1vLkJBU0VfQ09OVEVYVF9NRU5VPzA6LTEpfSksW2Esbl0pLGc9KDAsci51c2VDYWxsYmFjaykoKCgpPT57YSgodD0+e2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+PXQ7bi0tKWlmKCFmKG4pKXJldHVybiBuO3JldHVybiB0fSkpfSksW251bGw9PWU/dm9pZCAwOmUubGVuZ3RoLGFdKSx2PSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+e3ZhciB0LHI7aWYobnVsbD09PSh0PWVbaV0pfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmhhc1N1Yk1lbnUpcygobnVsbD09PShyPWVbaV0pfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmxhYmVsKXx8XCJcIik7ZWxzZXtpZigtMT09PWkpcmV0dXJuIHZvaWQgYyhuLFwia2V5Ym9hcmRcIik7bChlW2ldLmRhdGEpfWEoLTEpfSksW2EsbCxzLGUsaSxjLG5dKSxtPSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+e3ZhciB0LG47KG51bGw9PT0odD1lW2ldKXx8dm9pZCAwPT09dD92b2lkIDA6dC5oYXNTdWJNZW51KSYmKHMoKG51bGw9PT0obj1lW2ldKXx8dm9pZCAwPT09bj92b2lkIDA6bi5sYWJlbCl8fFwiXCIpLGEoLTEpKX0pLFthLHMsZSxpXSksQz0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9PnsodC5zbGljZSgxKS5pbmNsdWRlcyhuKXx8KG51bGw9PXQ/dm9pZCAwOnQubGVuZ3RoKT49MSkmJmMobixcImtleWJvYXJkXCIpfSksW2MsdCxuXSkseT0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9Pnt0LnNsaWNlKDIpLmluY2x1ZGVzKG4pfHwobnVsbD09dD92b2lkIDA6dC5sZW5ndGgpPj0yP3UoKTpsKHt0eXBlOlwiY2xvc2VcIn0pfSksW3UsdCxuXSk7KDAsci51c2VFZmZlY3QpKCgoKT0+e2NvbnN0IGU9ZT0+e3N3aXRjaChlLmtleSl7Y2FzZVwiQXJyb3dEb3duXCI6ZCgpO2JyZWFrO2Nhc2VcIkFycm93VXBcIjpwKCk7YnJlYWs7Y2FzZVwiSG9tZVwiOmNhc2VcIlBhZ2VVcFwiOmgoKTticmVhaztjYXNlXCJFbmRcIjpjYXNlXCJQYWdlRG93blwiOmcoKTticmVhaztjYXNlXCJFbnRlclwiOnYoKTticmVhaztjYXNlXCJBcnJvd1JpZ2h0XCI6bSgpO2JyZWFrO2Nhc2VcIkFycm93TGVmdFwiOkMoKTticmVhaztjYXNlXCJFc2NhcGVcIjp5KCl9fTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixlKSwoKT0+e2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZSl9fSksW2QscCxoLGcsdixtLEMseV0pfX0sNDcyNTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VDb250ZXh0TWVudU5hdmlnYXRpb249dm9pZCAwO2NvbnN0IHI9big2Njg5KSxvPW4oOTMxOCk7dC51c2VDb250ZXh0TWVudU5hdmlnYXRpb249KGUsdCxuLGksYSxsLHMsYyx1LGYpPT57Y29uc3QgZD0oMCxyLnVzZUNhbGxiYWNrKSgoZT0+e2NvbnN0IHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSksbj1udWxsPT10P3ZvaWQgMDp0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybntoZWlnaHQ6KG51bGw9PW4/dm9pZCAwOm4uaGVpZ2h0KXx8MCx3aWR0aDoobnVsbD09bj92b2lkIDA6bi53aWR0aCl8fDB9fSksW10pO3JldHVybntoYW5kbGVOYXZpZ2F0ZVRvU3VibWVudTooMCxyLnVzZUNhbGxiYWNrKSgocj0+e2NvbnN0e2hlaWdodDpjLHdpZHRoOnV9PWQocik7ZiYmZihjLHUpLGV8fHQoby5DT05URVhUX01FTlVfQU5JTUFUSU9OX0RVUkFUSU9OKSxzKHt3aWR0aDp1LGhlaWdodDpjfSksbChyKSxpKFsuLi5uLGFdKX0pLFthLG4saSxmLHQsZF0pLGhhbmRsZU5hdmlnYXRlQmFja1RvUGFyZW50OigwLHIudXNlQ2FsbGJhY2spKCgoZSx0PVwiY2xpY2tcIik9PntpZihmKXtjb25zdCBlPTE9PT1uLmxlbmd0aD9vLkJBU0VfQ09OVEVYVF9NRU5VOm5bbi5sZW5ndGgtMV0se2hlaWdodDp0LHdpZHRoOnJ9PWQoZSk7Zih0LHIpfWNvbnN0IHI9bixhPXIucG9wKCkscz11LmZpbmQoKGU9PmUucGFyZW50TGFiZWw9PT1hKSk7bChhKSxpKHIpLGMoXCJrZXlib2FyZFwiPT09dD8obnVsbD09cz92b2lkIDA6cy5tZW51VGVtcGxhdGUuZmluZEluZGV4KCh0PT50LmxhYmVsPT09ZSkpKXx8MDotMSl9KSxbbixpLGMsZCxmLHVdKSxoYW5kbGVOYXZpZ2F0ZVRvQmFzZTooMCxyLnVzZUNhbGxiYWNrKSgoKCk9PntpZihmKXtjb25zdHtoZWlnaHQ6ZSx3aWR0aDp0fT1kKG8uQkFTRV9DT05URVhUX01FTlUpO2YoZSx0KX1sKG8uQkFTRV9DT05URVhUX01FTlUpLGkoW10pLGMoLTEpfSksW2wsaSxjLGQsZl0pfX19LDkzMDY6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlUmVzaXplQ29udGV4dE1lbnU9dm9pZCAwO2NvbnN0IHI9big2Njg5KSxvPW4oOTMxOCk7dC51c2VSZXNpemVDb250ZXh0TWVudT1lPT57Y29uc3RbdCxuXT0oMCxyLnVzZVN0YXRlKSh7aGVpZ2h0OjE2MCx3aWR0aDoxNjB9KTtyZXR1cm4oMCxyLnVzZUVmZmVjdCkoKCgpPT57Y29uc3QgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSxyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG8uQ09OVEVYVF9NRU5VX0ZSQU1FX0lEKTtpZighdClyZXR1cm47Y29uc3QgaT1uZXcgUmVzaXplT2JzZXJ2ZXIoKGU9Pntmb3IoY29uc3QgdCBvZiBlKXtjb25zdHt3aWR0aDplLGhlaWdodDpvfT10LnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyJiYoci5zdHlsZS5oZWlnaHQ9YCR7b31weGAsci5zdHlsZS53aWR0aD1gJHtlfXB4YCxuKHt3aWR0aDplLGhlaWdodDpvfSkpfX0pKTtyZXR1cm4gaS5vYnNlcnZlKHQpLCgpPT57aS51bm9ic2VydmUodCl9fSksW2VdKSx0fX0sNzMzNjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5nZXRNZW51TmF2aWdhdGlvbk9yZGVyPXQuZ2V0Q2xhc3NOYW1lPXZvaWQgMDtjb25zdCByPW4oOTMxOCk7dC5nZXRDbGFzc05hbWU9KGUsdCxuKT0+dD09PWU/ci5BQ1RJVkVfQ09OVEVYVF9NRU5VX0NMQVNTOm4uaW5jbHVkZXMoZSk/ci5QUklPUl9DT05URVhUX01FTlVfQ0xBU1M6XCJcIix0LmdldE1lbnVOYXZpZ2F0aW9uT3JkZXI9ZT0+e2lmKCFlKXJldHVybltdO2NvbnN0IHQ9W3twYXJlbnRMYWJlbDpyLkJBU0VfQ09OVEVYVF9NRU5VLHRlbXBsYXRlOmV9XSxuPVtdO2Zvcig7dC5sZW5ndGg7KXtjb25zdHt0ZW1wbGF0ZTplLHBhcmVudExhYmVsOnJ9PXQucG9wKCk7ZS5mb3JFYWNoKCgoe3N1Ym1lbnU6bixsYWJlbDpyfSxvKT0+e24mJih0LnB1c2goe3BhcmVudExhYmVsOnJ8fFwiXCIsdGVtcGxhdGU6bn0pLGRlbGV0ZSBlW29dLnN1Ym1lbnUsZVtvXS5oYXNTdWJNZW51PSEwKX0pKSxuLnB1c2goe3BhcmVudExhYmVsOnIsbWVudVRlbXBsYXRlOmV9KX1yZXR1cm4gbn19LDk2NDQ6KGUsdCk9Pnt2YXIgbjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkV4cGFuZERpcmVjdGlvbj12b2lkIDAsKG49dC5FeHBhbmREaXJlY3Rpb258fCh0LkV4cGFuZERpcmVjdGlvbj17fSkpW24uVXA9MF09XCJVcFwiLG5bbi5Eb3duPTFdPVwiRG93blwifSw0MDIxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkV4cGFuZGFibGVCdXR0b249dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPW4oNjY4OSksYT1uKDQxMzApLGw9cihuKDc1MTgpKSxzPW4oOTYzNCksYz1uKDkxNDEpLHU9bigzMDMwKSxmPW4oMTMzNSksZD1uKDk2NDQpO3QuRXhwYW5kYWJsZUJ1dHRvbj1lPT57dmFyIHQsbixyLGwscyxwO2NvbnN0W3csYl09KDAsaS51c2VTdGF0ZSkoe3Nob3c6ITEscmVxdWVzdGVkQnlDb2xsYXBzZTohMX0pLHg9e3NpemU6ZS5zaXplLGtpbmQ6ZS5raW5kLGRpc2FibGVkOmUuZGlzYWJsZWQsdGFiSW5kZXg6ZS50YWJJbmRleH0sXz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse3NoYXBlOmEuQnV0dG9uU2hhcGUuc3F1YXJlLFwiYXJpYS1sYWJlbFwiOm51bGwhPT0odD1lW1wiYXJpYS1sYWJlbFwiXSkmJnZvaWQgMCE9PXQ/dDpgUHJpbWFyeSBCdXR0b24gJHtlLnRpdGxlfWB9KSxPPW51bGwhPT0obj1lLmV4cGFuZERpcmVjdGlvbikmJnZvaWQgMCE9PW4/bjpkLkV4cGFuZERpcmVjdGlvbi5Eb3duO3JldHVybigwLGkudXNlRWZmZWN0KSgoKCk9PntpZighdy5yZXF1ZXN0ZWRCeUNvbGxhcHNlKXJldHVybjtjb25zdCBlPXNldFRpbWVvdXQoKCgpPT5iKHtyZXF1ZXN0ZWRCeUNvbGxhcHNlOiExLHNob3c6ITF9KSksMjAwKTtyZXR1cm4oKT0+Y2xlYXJUaW1lb3V0KGUpfSksW3cucmVxdWVzdGVkQnlDb2xsYXBzZV0pLCgwLG8uanN4cykoeSx7Y2hpbGRyZW46WygwLG8uanN4cykoQyx7Y2hpbGRyZW46WygwLG8uanN4KShnLE9iamVjdC5hc3NpZ24oe30sXyx7Y2hpbGRyZW46KDAsby5qc3gpKHYse2NoaWxkcmVuOm51bGwhPT0ocj1lLmNoaWxkcmVuKSYmdm9pZCAwIT09cj9yOl8udGl0bGV9KX0pKSxlLnNlY29uZGFyeUJ1dHRvbnMmJmUuc2Vjb25kYXJ5QnV0dG9ucy5sZW5ndGg+MCYmKDAsby5qc3gpKGYuQm94LE9iamVjdC5hc3NpZ24oe2lkOlwiZHJvcGRvd24tY29udGFpbmVyXCJ9LHtjaGlsZHJlbjooMCxvLmpzeHMpKG0sT2JqZWN0LmFzc2lnbih7fSx4LHtyb2xlOlwiY29tYm9ib3hcIixvbkNsaWNrOigpPT57dy5yZXF1ZXN0ZWRCeUNvbGxhcHNlfHxiKHtyZXF1ZXN0ZWRCeUNvbGxhcHNlOiExLHNob3c6IXcuc2hvd30pfSxcImFyaWEtbGFiZWxcIjpcIkV4cGFuZCBTZWNvbmRhcnkgQnV0dG9ucyBQYW5lbFwiLFwiYXJpYS1leHBhbmRlZFwiOncuc2hvd30se2NoaWxkcmVuOltPPT09ZC5FeHBhbmREaXJlY3Rpb24uRG93biYmKDAsby5qc3gpKGgse2tpbmQ6bnVsbCE9PShsPWUua2luZCkmJnZvaWQgMCE9PWw/bDphLkJ1dHRvbktpbmQucHJpbWFyeSxpY29uOlwiQ2FyZXREb3duSWNvblwifSksTz09PWQuRXhwYW5kRGlyZWN0aW9uLlVwJiYoMCxvLmpzeCkoaCx7a2luZDpudWxsIT09KHM9ZS5raW5kKSYmdm9pZCAwIT09cz9zOmEuQnV0dG9uS2luZC5wcmltYXJ5LGljb246XCJDYXJldFVwSWNvblwifSldfSkpfSkpXX0pLGUuc2Vjb25kYXJ5QnV0dG9ucyYmZS5zZWNvbmRhcnlCdXR0b25zLmxlbmd0aD4wJiYoMCxvLmpzeCkoYy5BbmltYXRlUHJlc2VuY2Use2NoaWxkcmVuOncuc2hvdyYmKDAsby5qc3gpKHUuRXhwYW5kYWJsZVBhbmVsLHtleHBhbmREaXJlY3Rpb246TyxzZWNvbmRhcnlCdXR0b25zOm51bGwhPT0ocD1lLnNlY29uZGFyeUJ1dHRvbnMpJiZ2b2lkIDAhPT1wP3A6W10sc3RyZXRjaDplLnN0cmV0Y2hFeHBhbmRhYmxlUGFuZWwsY2xvc2VQYW5lbE9uU2Vjb25kYXJ5QnV0dG9uQ2xpY2s6ZS5jbG9zZVBhbmVsT25TZWNvbmRhcnlCdXR0b25DbGljayxvbkNvbGxhcHNlUmVxdWVzdDooKT0+Yih7c2hvdzohMSxyZXF1ZXN0ZWRCeUNvbGxhcHNlOiEwfSksYnV0dG9uU2l6ZTplLnNpemUsZG9jdW1lbnQ6ZS5kb2N1bWVudH0pfSldfSl9O2NvbnN0IHA9e1thLkJ1dHRvbktpbmQucHJpbWFyeV06ZT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeVRleHQsW2EuQnV0dG9uS2luZC5zZWNvbmRhcnldOmU9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeVRleHQsW2EuQnV0dG9uS2luZC50ZXh0T25seV06ZT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fSxoPSgwLGwuZGVmYXVsdCkocy5JY29uKWBcbiAgc3ZnIHBhdGgge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZSxraW5kOnR9KT0+cFt0XShlKX07XG4gIH1cbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC51aX07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQuYm9sZH07XG5gLGc9KDAsbC5kZWZhdWx0KShhLkJ1dHRvbilgXG4gIG1hcmdpbi1yaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuYCx2PSgwLGwuZGVmYXVsdCkoZi5Cb3gpYFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgZGlzcGxheTogYmxvY2s7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5gLG09KDAsbC5kZWZhdWx0KShhLkJ1dHRvbilgXG4gIHdpZHRoOiAke2U9PmUudGhlbWUucHgueHhsYXJnZX07XG4gIHBhZGRpbmc6IDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuYCxDPWwuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gLHk9bC5kZWZhdWx0LmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5gfSwyMTI4OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnNldHVwRXhwYW5kYWJsZVBhbmVsPXZvaWQgMDtjb25zdCByPW4oOTY0NCk7dC5zZXR1cEV4cGFuZGFibGVQYW5lbD0oZSx0LG49ITEpPT57aWYoIWV8fDA9PT1lLmNoaWxkTm9kZXMubGVuZ3RoKXJldHVybjtjb25zdCBvPWUucGFyZW50RWxlbWVudCxpPW51bGw9PW8/dm9pZCAwOm8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFpKXJldHVybjtjb25zdCBsPWEuaGVpZ2h0LHM9YS53aWR0aDw9aS53aWR0aHx8bj9hLndpZHRoOmkud2lkdGgsYz1pLngrcz5kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRofHxzPGkud2lkdGg7ZS5zdHlsZS53aWR0aD1gJHtzfXB4YCxlLnN0eWxlLm9wYWNpdHk9XCIxXCIsYz9lLnN0eWxlLnJpZ2h0PVwiMHB4XCI6ZS5zdHlsZS5sZWZ0PVwiMHB4XCIsdD09PXIuRXhwYW5kRGlyZWN0aW9uLkRvd24mJihlLnN0eWxlLnRvcD1gJHtpLmhlaWdodH1weGApLHQ9PT1yLkV4cGFuZERpcmVjdGlvbi5VcCYmKGUuc3R5bGUudG9wPS0xKmwrXCJweFwiKX19LDMwMzA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRXhwYW5kYWJsZVBhbmVsPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1yKG4oNzUxOCkpLGE9big5MTQxKSxsPW4oNDEzMCkscz1uKDEzMzUpLGM9bigyMTI4KSx1PXIobig0NDgzKSksZj17dHlwZTpcInNwcmluZ1wiLGR1cmF0aW9uOi4yLGJvdW5jZTouMjV9O3QuRXhwYW5kYWJsZVBhbmVsPWU9Pnt2YXIgdDtjb25zdCBuPWAke2UucGFuZWxJZH0tZXhwYW5kYWJsZS1wYW5lbGA7cmV0dXJuKDAsby5qc3gpKHUuZGVmYXVsdCxPYmplY3QuYXNzaWduKHtmb2N1c1RyYXBPcHRpb25zOntmYWxsYmFja0ZvY3VzOmAjJHtufWAsY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXM6ITAsb25EZWFjdGl2YXRlOmUub25Db2xsYXBzZVJlcXVlc3QsaW5pdGlhbEZvY3VzOiExLGRvY3VtZW50OmUuZG9jdW1lbnQscmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6ITF9fSx7Y2hpbGRyZW46KDAsby5qc3gpKGgsT2JqZWN0LmFzc2lnbih7cmVmOnQ9PigwLGMuc2V0dXBFeHBhbmRhYmxlUGFuZWwpKHQsZS5leHBhbmREaXJlY3Rpb24sZS5zdHJldGNoKSx0YWJJbmRleDowLGlkOm4saW5pdGlhbDpcImluaXRpYWxcIixleGl0OlwiaGlkZGVuXCIsYnV0dG9uU2l6ZTpudWxsIT09KHQ9ZS5idXR0b25TaXplKSYmdm9pZCAwIT09dD90OmwuQnV0dG9uU2l6ZS5iYXNlLGFuaW1hdGU6XCJ2aXNpYmxlXCIscm9sZTpcIm1lbnVcIix0cmFuc2l0aW9uOmYsb25Nb3VzZU92ZXI6KCk9Pnt2YXIgZTtyZXR1cm4gbnVsbD09PShlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmJsdXIoKX19LHtjaGlsZHJlbjplLnNlY29uZGFyeUJ1dHRvbnMubWFwKCgodCxuKT0+KDAsby5qc3gpKGwuQnV0dG9uLE9iamVjdC5hc3NpZ24oe2NsYXNzTmFtZTpcIm1lbnUtaXRlbVwiLHRhYkluZGV4Om4rMSx0aXRsZTp0LnRpdGxlLHJvbGU6XCJtZW51aXRlbVwiLHNpemU6ZS5idXR0b25TaXplLGRpc2FibGVkOnQuZGlzYWJsZWQsa2luZDpcInRleHRPbmx5XCIsb25DbGljazpuPT4oKHQsbik9PntlLmNsb3NlUGFuZWxPblNlY29uZGFyeUJ1dHRvbkNsaWNrPyhuLm9uQ2xpY2sodCksZS5vbkNvbGxhcHNlUmVxdWVzdCgpKTpuLm9uQ2xpY2sodCwoKCk9PmUub25Db2xsYXBzZVJlcXVlc3QoKSkpfSkobix0KSxcImFyaWEtbGFiZWxcIjp0LnRpdGxlfSx7Y2hpbGRyZW46KDAsby5qc3gpKGQsT2JqZWN0LmFzc2lnbih7XCJhcmlhLWxhYmVsXCI6dC50aXRsZX0se2NoaWxkcmVuOnQudGl0bGV9KSl9KSxuKSkpfSksXCJleHBhbmRhYmxlUGFuZWxcIil9KSl9O2NvbnN0IGQ9KDAsaS5kZWZhdWx0KShzLkJveClgXG4gIHBhZGRpbmctYm90dG9tOiAxcHg7XG4gIHBhZGRpbmctdG9wOiAxcHg7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBkaXNwbGF5OiBibG9jaztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbmAscD17W2wuQnV0dG9uU2l6ZS5zbWFsbF06ZT0+ZS5weC5zbWFsbCxbbC5CdXR0b25TaXplLmJhc2VdOmU9PmUucHguYmFzZSxbbC5CdXR0b25TaXplLmxhcmdlXTplPT5lLnB4LmxhcmdlfSxoPSgwLGkuZGVmYXVsdCkoYS5tb3Rpb24uZGl2KWBcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBvcGFjaXR5OiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogJHtlPT5lLnRoZW1lLnB4Lnh4eGxhcmdlfTtcbiAgbWF4LXdpZHRoOiBtYXgtY29udGVudDtcbiAgbWluLXdpZHRoOiA4MHB4O1xuICBiYWNrZ3JvdW5kOiAke2U9PmUudGhlbWUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGJveC1zaGFkb3c6ICR7ZT0+ZS50aGVtZS5zaGFkb3cuYmFzZX07XG4gIGhlaWdodDogbWF4LWNvbnRlbnQ7XG4gIHotaW5kZXg6IDEwMDtcblxuICAubWVudS1pdGVtIHtcbiAgICBib3JkZXItcmFkaXVzOiB1bnNldDtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGJvcmRlcjogdHJhbnNwYXJlbnQ7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgb3ZlcmZsb3c6IGNsaXA7XG4gICAgJiA+ICoge1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG4gICAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ub3JtYWx9O1xuICAgIHBhZGRpbmctdG9wOiAkeyh7dGhlbWU6ZSxidXR0b25TaXplOnR9KT0+cFt0XShlKX07XG4gICAgcGFkZGluZy1ib3R0b206ICR7KHt0aGVtZTplLGJ1dHRvblNpemU6dH0pPT5wW3RdKGUpfTtcbiAgICBwYWRkaW5nLWxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuXG4gICAgOmZpcnN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gICAgfVxuXG4gICAgOmxhc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgICB9XG5cbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIge1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBiYWNrZ3JvdW5kOiAke2U9PmUudGhlbWUucGFsZXR0ZS5iYWNrZ3JvdW5kMn07XG4gICAgfVxuXG4gICAgJjpkaXNhYmxlZCxcbiAgICAmOmFjdGl2ZTpkaXNhYmxlZCB7XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRJbmFjdGl2ZX07XG4gICAgICBiYWNrZ3JvdW5kOiAke2U9PmUudGhlbWUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gICAgICBvcGFjaXR5OiB1bnNldDtcbiAgICB9XG4gIH1cbmB9LDQ5MjU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDQwMjEpLHQpLG8obig5NjQ0KSx0KX0sMjYwOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNTk3MSksdCl9LDU5NzE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Ub2dnbGU9dm9pZCAwO2NvbnN0IGk9big1ODkzKSxhPW4oNjY4OSksbD1vKG4oNzUxOCkpLHM9big4NTEwKSxjPW4oMTMzNSksdT1uKDE5NDQpO3QuVG9nZ2xlPWU9Pnt2YXJ7aWQ6dCxsYWJlbDpuLG9uQ2hhbmdlOm8sbGFiZWxTaWRlOmw9XCJyaWdodFwiLHR5cGU6cz1cImNoZWNrYm94XCIsaGVscGVyVGV4dDpjfT1lLGc9cihlLFtcImlkXCIsXCJsYWJlbFwiLFwib25DaGFuZ2VcIixcImxhYmVsU2lkZVwiLFwidHlwZVwiLFwiaGVscGVyVGV4dFwiXSk7Y29uc3RbdixtXT0oMCxhLnVzZVN0YXRlKShnLmNoZWNrZWQpO3JldHVybigwLGEudXNlRWZmZWN0KSgoKCk9PnttKGcuY2hlY2tlZCl9KSxbZy5jaGVja2VkXSksKDAsaS5qc3hzKShmLE9iamVjdC5hc3NpZ24oe2xhYmVsU2lkZTpsfSx7Y2hpbGRyZW46WyhufHxjKSYmKDAsaS5qc3gpKHUuTGFiZWwse2h0bWxGb3I6dCx0ZXh0Om4saGVscGVyVGV4dDpjfSksKDAsaS5qc3hzKShkLE9iamVjdC5hc3NpZ24oe2lzQ2hlY2tlZDp2fSx7Y2hpbGRyZW46WygwLGkuanN4KShoLE9iamVjdC5hc3NpZ24oe30sZyx7aWQ6dCx0eXBlOnMsb25DaGFuZ2U6ZT0+e20oZS50YXJnZXQuY2hlY2tlZCksbnVsbD09b3x8byhlKX19KSksKDAsaS5qc3gpKHAse3RhYkluZGV4Oi0xLFwiYXJpYS1oaWRkZW5cIjpcInRydWVcIixpc0NoZWNrZWQ6dn0pXX0pKV19KSl9O2NvbnN0IGY9bC5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhsYXJnZX07XG4gIGZsZXgtZGlyZWN0aW9uOiAkeyh7bGFiZWxTaWRlOmV9KT0+XCJsZWZ0XCI9PT1lP1wicm93XCI6XCJyb3ctcmV2ZXJzZVwifTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgueGxhcmdlfTtcbmAsZD0oMCxsLmRlZmF1bHQpKGMuQm94KWBcbiAgLS1weC10b2dnbGU6ICR7KHt0aGVtZTplfSk9PmUucHgueGxhcmdlfTtcbiAgLS1weC1rbm9iOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiB2YXIoLS1weC10b2dnbGUpO1xuICB3aWR0aDogY2FsYygyICogdmFyKC0tcHgtdG9nZ2xlKSk7XG4gIGJvcmRlcjogMXB4IHNvbGlkXG4gICAgJHsoe2lzQ2hlY2tlZDplLHRoZW1lOnR9KT0+ZT90LnBhbGV0dGUuYnJhbmRQcmltYXJ5OnQucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIGJvcmRlci1yYWRpdXM6IGNhbGMoMC41ICogdmFyKC0tcHgtdG9nZ2xlKSk7XG5cbiAgYmFja2dyb3VuZDogJHsoe2lzQ2hlY2tlZDplLHRoZW1lOnR9KT0+ZT90LnBhbGV0dGUuYnJhbmRQcmltYXJ5OnQucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uKSxcbiAgICBib3JkZXItY29sb3IgdmFyKC0tLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbik7XG5cbiAgJjpmb2N1cy13aXRoaW4ge1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gIH1cbmAscD1sLmRlZmF1bHQuYnV0dG9uYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiB2YXIoLS1weC1rbm9iKTtcbiAgaGVpZ2h0OiB2YXIoLS1weC1rbm9iKTtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGJhY2tncm91bmQ6ICR7KHtpc0NoZWNrZWQ6ZSx0aGVtZTp0fSk9PmU/dC5wYWxldHRlLmJyYW5kUHJpbWFyeVRleHQ6dC5wYWxldHRlLmlucHV0Q29sb3J9O1xuICBib3JkZXI6IG5vbmU7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHRyYW5zaXRpb246IGxlZnQgdmFyKC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uKSwgYmFja2dyb3VuZCB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTsgLyogQWxsb3cgcGFzcy10aHJ1IGZvciBuYXRpdmUgaW5wdXQgKi9cbmAsaD0oMCxsLmRlZmF1bHQpKHMuUmF3SW5wdXQpYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb3BhY2l0eTogMDtcbiAgYm9yZGVyOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICBhcHBlYXJhbmNlOiBub25lO1xuICBkaXNwbGF5OiBibG9jaztcblxuICAmOmNoZWNrZWQgKyAke3B9IHtcbiAgICBsZWZ0OiBjYWxjKDEwMCUgLSAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfSk7XG4gIH1cbiAgJjpkaXNhYmxlZCArICR7cH0ge1xuICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgfVxuICAmOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cbmB9LDUzMDA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CYWRnZT12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGE9byhuKDc1MTgpKSxsPW4oMTMzNSkscz1uKDM4NzcpO3QuQmFkZ2U9ZT0+e3Zhcntjb3VudDp0PTAsbWF4Om59PWUsbz1yKGUsW1wiY291bnRcIixcIm1heFwiXSk7bGV0IGE9dC50b1N0cmluZygpO3JldHVybiBuJiZ0Pm4mJihhPWAke259K2ApLCgwLGkuanN4KShjLE9iamVjdC5hc3NpZ24oe30sbyx7Y2hpbGRyZW46YX0pKX07Y29uc3QgYz0oMCxhLmRlZmF1bHQpKGwuQm94KWBcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnN0YXR1c0NyaXRpY2FsfTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMucGlsbH07XG4gIGNvbG9yOiAke3MuQ29sb3Iud2hpdGV9O1xuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuc21hbGx9O1xuICBtaW4td2lkdGg6ICR7KHt0aGVtZTplfSk9PmUucHgueGxhcmdlfTtcbiAgcGFkZGluZzogMnB4IDZweDtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBib3gtc2hhZG93OiAkeyh7dGhlbWU6ZX0pPT5lLnNoYWRvdy5iYXNlfTtcbmB9LDMxMzY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDUzMDApLHQpfSw2ODk1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksaT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fSxhPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LGw9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DYWxlbmRhcj12b2lkIDA7Y29uc3Qgcz1uKDU4OTMpLGM9big2Njg5KSx1PWwobig3NTE4KSksZj1uKDcyOTIpLGQ9big0MTMwKSxwPW4oMTMzNSksaD1pKG4oNTI5OSkpO3QuQ2FsZW5kYXI9ZT0+e3Zhcnt2YWx1ZTp0LG9uQ2hhbmdlOm4sb25EaXNtaXNzOnJ9PWUsbz1hKGUsW1widmFsdWVcIixcIm9uQ2hhbmdlXCIsXCJvbkRpc21pc3NcIl0pO2NvbnN0W2ldPSgwLGMudXNlU3RhdGUpKHQpLFtsLHVdPSgwLGMudXNlU3RhdGUpKHQpLGQ9KDAsYy51c2VDYWxsYmFjaykoKGU9Pnt1KGUpLG51bGw9PW58fG4oZSl9KSxbXSkscD0oMCxjLnVzZUNhbGxiYWNrKSgoKCk9PntkKGkpLG51bGw9PXJ8fHIoKX0pLFtdKTtyZXR1cm4oMCxzLmpzeHMpKG0sT2JqZWN0LmFzc2lnbih7XCJkYXRhLXRlc3RpZFwiOlwicmVhY3QtY2FsZW5kYXJcIn0se2NoaWxkcmVuOlsoMCxzLmpzeCkoZi5DYWxlbmRhcixPYmplY3QuYXNzaWduKHt2YWx1ZTpsLG9uQ2hhbmdlOmQsY2FsZW5kYXJUeXBlOlwiVVNcIixkZWZhdWx0VmlldzpcIm1vbnRoXCIsbWluRGV0YWlsOlwieWVhclwiLG5leHQyTGFiZWw6bnVsbCxwcmV2MkxhYmVsOm51bGwsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczohMH0sbykpLCgwLHMuanN4cykoZyx7Y2hpbGRyZW46WygwLHMuanN4KSh2LHtcImRhdGEtdGVzdGlkXCI6XCJjYWxlbmRhci1jYW5jZWwtYnV0dG9uXCIsXCJhcmlhLWxhYmVsXCI6XCJjYW5jZWwtYnV0dG9uXCIsbGFiZWw6XCJDYW5jZWxcIixzaXplOlwiYmFzZVwiLGtpbmQ6XCJ0ZXh0T25seVwiLG9uQ2xpY2s6cH0pLCgwLHMuanN4KSh2LHtcImRhdGEtdGVzdGlkXCI6XCJjYWxlbmRhci1hcHBseS1idXR0b25cIixcImFyaWEtbGFiZWxcIjpcImFwcGx5LWJ1dHRvblwiLGxhYmVsOlwiQXBwbHlcIixzaXplOlwiYmFzZVwiLGtpbmQ6XCJwcmltYXJ5XCIsb25DbGljazpyfSldfSldfSkpfTtjb25zdCBnPSgwLHUuZGVmYXVsdCkocC5Cb3gpYFxuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gMHB4YH07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIG1hcmdpbi1yaWdodDogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH1gfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgYm9yZGVyLXRvcDogbm9uZTtcbmAsdj0oMCx1LmRlZmF1bHQpKGQuQnV0dG9uKWBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gJHtlLnB4LnNtYWxsfWB9O1xuICBtYXJnaW4tcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9YH07XG5gLG09KDAsdS5kZWZhdWx0KShwLkJveClgXG4gICR7aH07XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAucmVhY3QtY2FsZW5kYXIge1xuICAgIG1pbi13aWR0aDogMjMwcHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fTtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gICAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fSAhaW1wb3J0YW50O1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb25fX2Fycm93IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmxhcmdlfTtcblxuICAgIDpkaXNhYmxlZCB7XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICAgIH1cbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbl9fbGFiZWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH0gIWltcG9ydGFudDtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX3ZpZXdDb250YWluZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH0gIWltcG9ydGFudDtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Q29sb3J9O1xuICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fbW9udGgtdmlld19fd2Vla2RheXMge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcblxuICAgIGFiYnIge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fdGlsZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH0gIWltcG9ydGFudDtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgICBhc3BlY3QtcmF0aW86IDEvMTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICA6ZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SW5hY3RpdmV9O1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcblxuICAgICAgOmhvdmVyIHtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIDpob3ZlciB7XG4gICAgICBib3JkZXI6IDJweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICAgIH1cblxuICAgIDpmb2N1cyB7XG4gICAgICBib3JkZXI6IDJweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICAgIH1cbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tbm93IHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fSAhaW1wb3J0YW50O1xuICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICB9XG5cbiAgLnJlYWN0LWNhbGVuZGFyX190aWxlLS1hY3RpdmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnl9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlUZXh0fTtcbiAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcblxuICAgIDpmb2N1cyB7XG4gICAgICBib3JkZXI6IDJweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICAgICAgYm9yZGVyLXJhZGl1czogMTAwcHg7XG4gICAgfVxuICB9XG5gfSw5NzM0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig2ODk1KSx0KX0sMTYyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRyb3Bkb3duQnV0dG9uPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1uKDI3OSksYT1uKDcyNjEpLGw9big5NjM0KSxzPW4oNjY4OSksYz1yKG4oNzUxOCkpLHU9bigxMzM1KSxmPW4oOTUwNyksZD1uKDE5NDQpO3QuRHJvcGRvd25CdXR0b249KDAscy5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXIgbixyLGwscyxjO3JldHVybigwLG8uanN4KShoLHtjaGlsZHJlbjooMCxvLmpzeHMpKHAse2NoaWxkcmVuOlsoZS5sYWJlbHx8ZS5oZWxwZXJUZXh0KSYmKDAsby5qc3gpKGQuTGFiZWwse3RleHQ6ZS5sYWJlbCxoZWxwZXJUZXh0OmUuaGVscGVyVGV4dCxodG1sRm9yOmUubmFtZX0pLCgwLG8uanN4cykodixPYmplY3QuYXNzaWduKHtyb2xlOlwiY29tYm94Ym94XCIscmVmOnQsbmFtZTplLm5hbWUsdGFiSW5kZXg6ZS50YWJJbmRleCxcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOmUuYWN0aXZlRGVzY2VuZGFudCxzdGF0dXM6ZS5zdGF0dXMsXCJhcmlhLWV4cGFuZGVkXCI6ZS5leHBhbmRlZCxcImFyaWEtaGFzcG9wdXBcIjpcImxpc3Rib3hcIixcImFyaWEtY29udHJvbHNcIjpcImRyb3Bkb3duLWxpc3Rib3hcIixvbkNsaWNrOigpPT5lLmhhbmRsZUNsaWNrKCksYXM6XCJidXR0b25cIixcImRhdGEtdGVzdGlkXCI6XCJkcm9wZG93bi1idXR0b25cIix0aXRsZTpudWxsIT09KHI9bnVsbD09PShuPWUuc2VsZWN0ZWQpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnRpdGxlKSYmdm9pZCAwIT09cj9yOmUucGxhY2Vob2xkZXJ9LHtjaGlsZHJlbjpbKG51bGw9PT0obD1lLnNlbGVjdGVkKXx8dm9pZCAwPT09bD92b2lkIDA6bC5pY29uVXJsKSYmKDAsby5qc3gpKGkuQnV0dG9uSW1hZ2Use3NyYzplLnNlbGVjdGVkLmljb25Vcmx9KSwoMCxvLmpzeCkoYS5PcHRpb25UaXRsZSxPYmplY3QuYXNzaWduKHtcImFyaWEtbGl2ZVwiOlwicG9saXRlXCIsXCJkYXRhLXRlc3RpZFwiOlwic2VsZWN0ZWQtb3B0aW9uXCJ9LHtjaGlsZHJlbjpudWxsIT09KGM9bnVsbD09PShzPWUuc2VsZWN0ZWQpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnRpdGxlKSYmdm9pZCAwIT09Yz9jOmUucGxhY2Vob2xkZXJ9KSksKDAsby5qc3gpKGcse3N0YXR1czplLnN0YXR1cyxpY29uOmUuZXhwYW5kZWQ/XCJDaGV2cm9uVXBJY29uXCI6XCJDaGV2cm9uRG93bkljb25cIn0pXX0pKV19KX0pfSkpLHQuRHJvcGRvd25CdXR0b24uZGlzcGxheU5hbWU9XCJEcm9wZG93bkJ1dHRvblwiO2NvbnN0IHA9KDAsYy5kZWZhdWx0KSh1LkJveClgXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIHdpZHRoOiAxMDAlO1xuYCxoPSgwLGMuZGVmYXVsdCkodS5Cb3gpYFxuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIHdpZHRoOiAxMDAlO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbmAsZz0oMCxjLmRlZmF1bHQpKGwuSWNvbilgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxmLmdldFN0YXR1c0NvbG9yKShlLHQsXCJ0ZXh0RGVmYXVsdFwiKX07XG5gLHY9KDAsYy5kZWZhdWx0KSh1LkJveClgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEJhY2tncm91bmR9O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsZi5nZXRTdGF0dXNDb2xvcikoZSx0LFwiaW5wdXRCb3JkZXJcIil9O1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ib2xkfTtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LnVpfTtcbiAgb3V0bGluZTogbm9uZTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gJHtlLnB4LnNtYWxsfWB9O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbik7XG4gIHdpZHRoOiAxMDAlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICR7bC5JY29ufSB7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIH1cblxuICAmOmZvY3VzLXdpdGhpbiB7XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRGb2N1c2VkfTtcbiAgfVxuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IDA7XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxmLmdldFN0YXR1c0NvbG9yKShlLHQsXCJpbnB1dEZvY3VzZWRcIil9O1xuICB9XG5gfSw2MDYyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRyb3Bkb3duTWVudT12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9big2Njg5KSxhPW4oMTMzNSksbD1yKG4oNzUxOCkpLHM9big3MjYxKSxjPW4oMjc5KSx1PW4oMzQ3KSxmPW4oMTYyKTt0LkRyb3Bkb3duTWVudT0oMCxpLmZvcndhcmRSZWYpKCgoe2xhYmVsOmUsb3B0aW9uczp0PVtbXV0scGxhY2Vob2xkZXI6bj1cIlNlbGVjdCBhbiBvcHRpb25cIixzZWxlY3RlZDpyLG9uT3B0aW9uSG92ZXI6bCxvbkNoYW5nZTpoLHJlbmRlckxhYmVsOmcsZml0Q29udGVudDp2fSxtKT0+e2lmKHImJiEoKGUsdCk9PmUuc29tZSgoZT0+ZS5zb21lKChlPT5lLnZhbHVlPT09dC52YWx1ZSkpKSkpKHQscikpdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VsZWN0ZWQgb3B0aW9uICR7ci52YWx1ZX0gaXMgbm90IHByZXNlbnQgaW4gdGhlIG9wdGlvbnMgYXJyYXlgKTtjb25zdFtDLHldPSgwLGkudXNlU3RhdGUpKCExKTsoMCxpLnVzZUVmZmVjdCkoKCgpPT57MT09PXRbMF0ubGVuZ3RoJiZ3KCExKX0pLFt0XSk7Y29uc3Qgdz1lPT57eShudWxsIT1lP2U6IUMpfSx7Zm9jdXNlZE9wdGlvbjpiLGhhbmRsZUtleURvd246eH09KDAsdS51c2VEcm9wZG93bktleWJvYXJkTmF2aWdhdGlvbikodCxyLEMsdyxoKTtyZXR1cm4oMCxvLmpzeCkoZCxPYmplY3QuYXNzaWduKHtyZWY6bSxmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsb25CbHVyOmU9PntlLmN1cnJlbnRUYXJnZXQuY29udGFpbnMoZS5yZWxhdGVkVGFyZ2V0KXx8eSghMSl9LG9uS2V5RG93bjp4fSx7Y2hpbGRyZW46KDAsby5qc3hzKShhLkJveCxPYmplY3QuYXNzaWduKHtnYXA6XCJzbWFsbFwiLGZsZXhEaXJlY3Rpb246XCJjb2x1bW5cIixzdHlsZTp7d2lkdGg6XCIxMDAlXCJ9fSx7Y2hpbGRyZW46W2UmJigwLG8uanN4KShcImxhYmVsXCIsT2JqZWN0LmFzc2lnbih7aHRtbEZvcjpcImRyb3Bkb3duLWJ1dHRvblwifSx7Y2hpbGRyZW46KDAsby5qc3gpKHMuT3B0aW9uVGl0bGUse2NoaWxkcmVuOmV9KX0pKSwoMCxvLmpzeHMpKHAse2NoaWxkcmVuOltnPygwLG8uanN4KShpLkZyYWdtZW50LHtjaGlsZHJlbjpnKHJ8fHt0aXRsZTpuLHZhbHVlOm51bGx9LEMsdyxiKX0sYHJlbmRlci1sYWJlbC0ke3J9YCk6KDAsby5qc3gpKGYuRHJvcGRvd25CdXR0b24se3RhYkluZGV4OjAsYWN0aXZlRGVzY2VuZGFudDpgbWVudS1vcHRpb24tJHtudWxsPT1iP3ZvaWQgMDpiLnZhbHVlfWAsZXhwYW5kZWQ6QyYmdFswXS5sZW5ndGg+MSxoYW5kbGVDbGljazooKT0+dygpLHNlbGVjdGVkOnIscGxhY2Vob2xkZXI6bn0pLHQubGVuZ3RoJiZ0WzBdLmxlbmd0aD4xJiZDJiYoMCxvLmpzeCkoYy5NZW51LHttZW51SWQ6XCJkcm9wZG93bi1saXN0Ym94XCIsb3B0aW9uczp0LHNlbGVjdGVkOnIsaGFuZGxlRXhwYW5kTWVudTp3LG9uT3B0aW9uSG92ZXI6bCxvbkNoYW5nZTpoLGZpdENvbnRlbnQ6dixmb2N1c2VkT3B0aW9uOmIsYWJzb2x1dGVQb3NpdGlvbjohMH0pXX0pXX0pKX0pKX0pKSx0LkRyb3Bkb3duTWVudS5kaXNwbGF5TmFtZT1cIkRyb3Bkb3duTWVudVwiO2NvbnN0IGQ9KDAsbC5kZWZhdWx0KShhLkJveClgXG4gIHVzZXItc2VsZWN0OiBub25lO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gLHA9KDAsbC5kZWZhdWx0KShhLkJveClgYH0sNjAyNjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNjA2MiksdCksbyhuKDI3OSksdCksbyhuKDE2MiksdCl9LDI3OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CdXR0b25JbWFnZT10Lk1lbnU9dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPXIobig2Njg5KSksYT1yKG4oNzUxOCkpLGw9big5NjM0KSxzPW4oMTMzNSksYz1uKDcyNjEpO3QuTWVudT0oe29wdGlvbnM6ZSxzZWxlY3RlZDpuLG1lbnVJZDpyLGhhbmRsZUV4cGFuZE1lbnU6YSxvbk9wdGlvbkhvdmVyOmwsb25DaGFuZ2U6cyx3aWR0aDpnLGhlaWdodDp2LGhlYWRlcjptLGZvY3VzZWRPcHRpb246QyxhYnNvbHV0ZVBvc2l0aW9uOnksZml0Q29udGVudDp3fSk9Pntjb25zdCBiPWU9PntudWxsPT1sfHxsKGUpfTtyZXR1cm4oMCxvLmpzeHMpKHUsT2JqZWN0LmFzc2lnbih7cm9sZTpcImxpc3Rib3hcIixmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsb25Nb3VzZUxlYXZlOigpPT57YihudWxsKX0sXCJkYXRhLXRlc3RpZFwiOlwibWVudVwiLGlkOnIsd2lkdGg6ZyxoZWlnaHQ6dixhYnNvbHV0ZVBvc2l0aW9uOnksZml0Q29udGVudDp3fSx7Y2hpbGRyZW46W20mJigwLG8uanN4cykoaS5kZWZhdWx0LkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsby5qc3gpKGQse2NoaWxkcmVuOigwLG8uanN4KShjLk9wdGlvblRpdGxlLHtjaGlsZHJlbjptfSl9KSwoMCxvLmpzeCkoaCx7fSldfSksZS5tYXAoKChlLHIpPT4oMCxvLmpzeHMpKGkuZGVmYXVsdC5GcmFnbWVudCx7Y2hpbGRyZW46WzAhPT1yJiYoMCxvLmpzeCkoaCx7fSksZS5tYXAoKChlLHIpPT4oMCxvLmpzeHMpKGYsT2JqZWN0LmFzc2lnbih7cm9sZTpcIm9wdGlvblwiLGlzRm9jdXNlZDoobnVsbD09Qz92b2lkIDA6Qy52YWx1ZSk9PT1lLnZhbHVlLFwiYXJpYS1zZWxlY3RlZFwiOihudWxsPT1uP3ZvaWQgMDpuLnZhbHVlKT09PWUudmFsdWUsYWxpZ25JdGVtczpcImNlbnRlclwiLGFzOlwiYnV0dG9uXCIsXCJkYXRhLXRlc3RpZFwiOmBtZW51LW9wdGlvbi0ke3J9YCxpZDpgbWVudS1vcHRpb24tJHtlLnZhbHVlfWAsdGl0bGU6ZS50aXRsZSxvbkNsaWNrOigpPT57ZS5vdmVycmlkZU9uQ2xpY2s/ZS5vdmVycmlkZU9uQ2xpY2soZSk6cyhlKSxudWxsPT1hfHxhKCl9LG9uTW91c2VPdmVyOigpPT5iKGUudmFsdWUpfSx7Y2hpbGRyZW46WyhudWxsPT1lP3ZvaWQgMDplLmljb25VcmwpJiYoMCxvLmpzeCkodC5CdXR0b25JbWFnZSx7c3JjOmUuaWNvblVybCxzdHlsZTp7bWFyZ2luUmlnaHQ6XCI4cHhcIn19KSwoMCxvLmpzeCkoYy5PcHRpb25UaXRsZSx7Y2hpbGRyZW46ZS50aXRsZX0pLChudWxsPT1uP3ZvaWQgMDpuLnZhbHVlKT09PWUudmFsdWU/KDAsby5qc3gpKHAse2ljb246XCJDaGVja0ljb25cIn0pOigwLG8uanN4KShwLHtjaGlsZHJlbjooMCxvLmpzeCkoby5GcmFnbWVudCx7fSl9KV19KSxyKSkpXX0scikpKV19KSl9O2NvbnN0IHU9KDAsYS5kZWZhdWx0KShzLkJveClgXG4gIHdpZHRoOiAkeyh7d2lkdGg6ZSxmaXRDb250ZW50OnR9KT0+ZXx8KHQ/XCJmaXQtY29udGVudFwiOlwiMTAwJVwiKX07XG4gIG1heC1oZWlnaHQ6ICR7KHtoZWlnaHQ6ZX0pPT5udWxsIT1lP2U6XCJmaXQtY29udGVudFwifTtcbiAgdG9wOiAkeyh7dGhlbWU6ZX0pPT5gY2FsYygxMDAlICsgJHtlLnB4LnhzbWFsbH0pYH07XG4gIGJveC1zaGFkb3c6IDBweCA0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICB6LWluZGV4OiAxMDtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0QmFja2dyb3VuZH07XG4gIHBvc2l0aW9uOiAkeyh7YWJzb2x1dGVQb3NpdGlvbjplfSk9PmU/XCJhYnNvbHV0ZVwiOlwiaW5pdGlhbFwifTtcbmAsZj0oMCxhLmRlZmF1bHQpKHMuQm94KWBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYm9yZGVyOiAkeyh7aXNGb2N1c2VkOmUsdGhlbWU6dH0pPT5lP2AxcHggc29saWQgJHt0LnBhbGV0dGUuYm9yZGVyTmV1dHJhbH1gOlwiMXB4IHNvbGlkIHRyYW5zcGFyZW50XCJ9O1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgb3V0bGluZTogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5zbWFsbH1gfTtcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQyfTtcbiAgfVxuYCxkPSgwLGEuZGVmYXVsdCkocy5Cb3gpYFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5zbWFsbH1gfTtcbmAscD0oMCxhLmRlZmF1bHQpKGwuSWNvbilgXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuYCxoPSgwLGEuZGVmYXVsdCkocy5Cb3gpYFxuICBib3JkZXItdG9wOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0QmFja2dyb3VuZH07XG5gO3QuQnV0dG9uSW1hZ2U9YS5kZWZhdWx0LmltZ2BcbiAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnhsYXJnZX07XG4gIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnhsYXJnZX07XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbmB9LDcyNjE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VUb29sdGlwPXQuaXNFbGVtZW50T3ZlcmZsb3duPXQuT3B0aW9uVGl0bGU9dm9pZCAwO2NvbnN0IGk9big1ODkzKSxhPW4oNjY4OSksbD1uKDc3NjkpLHM9big5NTA3KSxjPW8obig3NTE4KSk7dC5PcHRpb25UaXRsZT1lPT57dmFye2NoaWxkcmVuOm59PWUsbz1yKGUsW1wiY2hpbGRyZW5cIl0pO3JldHVybigwLGkuanN4KSh1LE9iamVjdC5hc3NpZ24oe3JlZjooMCx0LnVzZVRvb2x0aXApKG4pfSxvLHtjaGlsZHJlbjooMCxpLmpzeCkoXCJkaXZcIix7Y2hpbGRyZW46bn0pfSkpfTtjb25zdCB1PSgwLGMuZGVmYXVsdCkobC5UZXh0KWBcbiAgJHtzLk1peGlucy50ZXh0T3ZlcmZsb3d9O1xuICBtYXJnaW4tbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuYDtmdW5jdGlvbiBmKGUpe3JldHVybiBlLnNjcm9sbEhlaWdodD5lLmNsaWVudEhlaWdodHx8ZS5zY3JvbGxXaWR0aD5lLmNsaWVudFdpZHRofXQuaXNFbGVtZW50T3ZlcmZsb3duPWYsdC51c2VUb29sdGlwPWU9PigwLGEudXNlQ2FsbGJhY2spKCh0PT57dCYmZSYmZih0KSYmKHQudGl0bGU9ZSl9KSxbXSl9LDcwMDY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5JY29uPXZvaWQgMDtjb25zdCBpPW4oNTg5MyksYT1vKG4oNzUxOCkpLGw9bigxMzM1KSxzPW4oOTUwNyksYz1uKDM0NzEpLHU9big5NjY5KTt0Lkljb249KDAsYS5kZWZhdWx0KSgoZT0+e3Zhcnt0YWJJbmRleDp0LGljb246bixjaGlsZHJlbjpvLHNpemU6YT1cImJhc2VcIixjb250YWluZXJTaXplOmwsXCJkYXRhLXRlc3RpZFwiOnN9PWUsYz1yKGUsW1widGFiSW5kZXhcIixcImljb25cIixcImNoaWxkcmVuXCIsXCJzaXplXCIsXCJjb250YWluZXJTaXplXCIsXCJkYXRhLXRlc3RpZFwiXSk7cmV0dXJuKDAsaS5qc3gpKGQsT2JqZWN0LmFzc2lnbih7fSxjLHtpY29uU2l6ZTphLGNvbnRhaW5lclNpemU6bHx8YSxqdXN0aWZ5Q29udGVudDpcImNlbnRlclwiLGFsaWduSXRlbXM6XCJjZW50ZXJcIixcImRhdGEtdGVzdGlkXCI6cyx0YWJJbmRleDp0fSx7Y2hpbGRyZW46bj8oMCxpLmpzeCkoZixPYmplY3QuYXNzaWduKHthcmlhTGFiZWw6Y1tcImFyaWEtbGFiZWxcIl0saWNvbjpufSxjKSk6b30pKX0pKWBgO2NvbnN0IGY9KDAsYS5kZWZhdWx0KSgoZT0+e3ZhcntpY29uOnQsYXJpYUxhYmVsOm59PWUsbz1yKGUsW1wiaWNvblwiLFwiYXJpYUxhYmVsXCJdKTtjb25zdCBhPWMuSWNvblNldFt0XTtyZXR1cm4oMCxpLmpzeCkoYSxPYmplY3QuYXNzaWduKHtyb2xlOlwiaW1nXCIsXCJhcmlhLWxhYmVsXCI6bn0sbykpfSkpYGAsZD0oMCxhLmRlZmF1bHQpKGwuQm94KWBcbiAgLyoqXG4gICAqIDEuIEluaXRpYWxpemUgbG9jYWwgdmFyaWFibGVzIHdpdGggcmVhc29uYWJsZSBkZWZhdWx0c1xuICAgKi9cbiAgLS1weC1kZWZhdWx0OiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLmJhc2V9O1xuXG4gIC8qKlxuICAgKiAyLiBJbmplY3QgdmFyaWFudHMgLS0gPyBXaGF0IGFyZSBWYXJpYW50c1xuICAgKi9cbiAgJHsoMCxzLmdldFZhcmlhbnRDU1MpKHUudmFyaWFudHMsdS5WYXJpYW50LmNvbnRhaW5lclNpemUpfVxuICAkeygwLHMuZ2V0VmFyaWFudENTUykodS52YXJpYW50cyx1LlZhcmlhbnQuaWNvblNpemUpfVxuXG4gIHdpZHRoOiB2YXIoLS1weC1jb250YWluZXIsIHZhcigtLXB4LWRlZmF1bHQpKTtcbiAgaGVpZ2h0OiB2YXIoLS1weC1jb250YWluZXIsIHZhcigtLXB4LWRlZmF1bHQpKTtcblxuICAvKiBTVkcgQXNzZXQgKi9cbiAgJiA+ICosXG4gICR7Zn0ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiB2YXIoLS1weC1pY29uLCB2YXIoLS1weC1kZWZhdWx0KSk7XG4gICAgaGVpZ2h0OiB2YXIoLS1weC1pY29uLCB2YXIoLS1weC1kZWZhdWx0KSk7XG4gICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcbiAgfVxuYH0sOTY2OTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC52YXJpYW50cz10LlZhcmlhbnQ9dm9pZCAwO2NvbnN0IHI9big3NTE4KTt0LlZhcmlhbnQ9e2ljb25TaXplOlwiaWNvblNpemVcIixjb250YWluZXJTaXplOlwiY29udGFpbmVyU2l6ZVwifSx0LnZhcmlhbnRzPXtbdC5WYXJpYW50Lmljb25TaXplXTp7eHNtYWxsOnIuY3NzYFxuICAgICAgLS1weC1pY29uOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnhzbWFsbH07XG4gICAgYCxzbWFsbDpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5zbWFsbH07XG4gICAgYCxiYXNlOnIuY3NzYFxuICAgICAgLS1weC1pY29uOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLmJhc2V9O1xuICAgIGAsbGFyZ2U6ci5jc3NgXG4gICAgICAtLXB4LWljb246ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUubGFyZ2V9O1xuICAgIGAseGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1pY29uOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnhsYXJnZX07XG4gICAgYCx4eGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1pY29uOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnh4bGFyZ2V9O1xuICAgIGAseHh4bGFyZ2U6ci5jc3NgXG4gICAgICAtLXB4LWljb246ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUueHh4bGFyZ2V9O1xuICAgIGB9LFt0LlZhcmlhbnQuY29udGFpbmVyU2l6ZV06e3hzbWFsbDpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnhzbWFsbH07XG4gICAgYCxzbWFsbDpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnNtYWxsfTtcbiAgICBgLGJhc2U6ci5jc3NgXG4gICAgICAtLXB4LWNvbnRhaW5lcjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5iYXNlfTtcbiAgICBgLGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1jb250YWluZXI6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUubGFyZ2V9O1xuICAgIGAseGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1jb250YWluZXI6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUueGxhcmdlfTtcbiAgICBgLHh4bGFyZ2U6ci5jc3NgXG4gICAgICAtLXB4LWNvbnRhaW5lcjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54eGxhcmdlfTtcbiAgICBgLHh4eGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1jb250YWluZXI6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUueHh4bGFyZ2V9O1xuICAgIGB9fX0sOTYzNDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNzAwNiksdCl9LDkyODU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQmVsbEZpbGxlZEljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkJlbGxGaWxsZWRJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeHMpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIyMFwiLGhlaWdodDpcIjIwXCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjpbKDAsby5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTEyIDJDMTEuMjI5NiAyIDEwLjU4NDUgMi41ODM3OSAxMC41MDc4IDMuMzUwNDFDMTAuNDk1MiAzLjQ3Njc3IDEwLjQwNTcgMy41ODE1NyAxMC4yODQ2IDMuNjE5NzFDOC4wNjU1NCA0LjMxODUxIDYuNDIyMzggNi4zMzc5NiA2LjMwMDMzIDguNzc4OTNMNi4xMjM4MiAxMi4zMDkxQzYuMDk5MzYgMTIuNzk4MiA1LjgxMzMxIDEzLjIzNjIgNS4zNzUzIDEzLjQ1NTJMNC42MDczOSAxMy44MzkyQzQuMTQ3NjEgMTQuMDY5MSAzLjg1NzE4IDE0LjUzOSAzLjg1NzE4IDE1LjA1MzFWMTYuMjVDMy44NTcxOCAxNi42MjQ4IDQuMTYwOTggMTYuOTI4NiA0LjUzNTc1IDE2LjkyODZIMTkuNDY0M0MxOS44MzkxIDE2LjkyODYgMjAuMTQyOSAxNi42MjQ4IDIwLjE0MjkgMTYuMjVWMTUuMDUzMUMyMC4xNDI5IDE0LjUzOSAxOS44NTI1IDE0LjA2OTEgMTkuMzkyNyAxMy44MzkyTDE4LjYyNDcgMTMuNDU1MkMxOC4xODY3IDEzLjIzNjIgMTcuOTAwNiAxMi43OTgyIDE3Ljg3NjIgMTIuMzA5MUwxNy42OTk3IDguNzc4OTNDMTcuNTc3NiA2LjMzNzk2IDE1LjkzNDQgNC4zMTg1MSAxMy43MTU0IDMuNjE5NzJDMTMuNTk0MiAzLjU4MTU3IDEzLjUwNDggMy40NzY3OCAxMy40OTIyIDMuMzUwNDFDMTMuNDE1NSAyLjU4MzggMTIuNzcwNCAyIDEyIDJaXCIsZmlsbDp0fSksKDAsby5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTkuMjg1NzEgMTguMjg1N0M5LjI4NTcxIDE5Ljc4NDggMTAuNTAwOSAyMSAxMiAyMUMxMy40OTkxIDIxIDE0LjcxNDMgMTkuNzg0OCAxNC43MTQzIDE4LjI4NTdMOS4yODU3MSAxOC4yODU3WlwiLGZpbGw6dH0pXX0pKX19LDQ3MTg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQmVsbEljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkJlbGxJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk03LjQ3MzA2IDEuMjI5NDNDNi41MTkzIDEuMjI5NDMgNS44NzI5MSAxLjk4Mzk5IDUuNjUzNzEgMi43MjY5N0M1LjY1MjA3IDIuNzI5MzIgNS42NDkyMSAyLjczMzAzIDUuNjQ0ODUgMi43Mzc1NkM1LjYzOTIgMi43NDM0MiA1LjYzMjY0IDIuNzQ4OTYgNS42MjU5OSAyLjc1MzU1QzUuNjE5MjYgMi43NTgxOSA1LjYxNDUyIDIuNzYwNCA1LjYxMyAyLjc2MTAyTDUuNjEyNjUgMi43NjExN0M1LjA1MDg4IDIuOTkyNTEgNC4zOTE5MyAzLjM2MDIyIDMuODc2OTcgNC4wMzM1N0MzLjM1ODE1IDQuNzExOTYgMy4wMTk0OSA1LjY1NTcxIDMuMDE5NDUgNi45Nzc0OUw1LjY1MzcxIDIuNzI2OTdMMy4wMTk0NSA2Ljk3Nzc2QzMuMDE4NjYgOC4zMDE2NSAyLjg3ODcxIDkuMDMxMyAyLjY3MDkxIDkuNTM0MzlDMi40ODg3OSA5Ljk3NTMxIDIuMjQ4ODkgMTAuMjY1OCAxLjkxMiAxMC42NzM4TDEuOTExODUgMTAuNjc0QzEuODYyNjMgMTAuNzMzNiAxLjgxMTM1IDEwLjc5NTcgMS43NTc4NyAxMC44NjEyQzEuMTQ5MjMgMTEuNjA2IDEuNzI3MjkgMTIuNjQxOSAyLjY1OTg2IDEyLjY0MTlINS4wOTAxOUM1LjIxMTkxIDEyLjk4IDUuNDA3MjYgMTMuMjkwNiA1LjY2NjE4IDEzLjU0OTVDNi4xMjgyNyAxNC4wMTE2IDYuNzU0OTkgMTQuMjcxMiA3LjQwODQ4IDE0LjI3MTJDOC4wNjE5NyAxNC4yNzEyIDguNjg4NyAxNC4wMTE2IDkuMTUwNzggMTMuNTQ5NUM5LjQwOTcxIDEzLjI5MDYgOS42MDUwNSAxMi45OCA5LjcyNjc4IDEyLjY0MTlIMTIuMjg5NEMxMy4yMjM0IDEyLjY0MTkgMTMuNzkyIDExLjYwMDggMTMuMTg4NCAxMC44NjEzTDEzLjE4ODMgMTAuODYxMkMxMy4xMzQ4IDEwLjc5NTcgMTMuMDgzNSAxMC43MzM2IDEzLjAzNDIgMTAuNjc0QzEyLjY5NzMgMTAuMjY1OSAxMi40NTc0IDkuOTc1NCAxMi4yNzU1IDkuNTM0NTFDMTIuMDY3OCA5LjAzMTQ3IDExLjkyODIgOC4zMDE4MiAxMS45MjgyIDYuOTc3NzZDMTEuOTI4MiA1LjY1Njg4IDExLjU4OTEgNC43MTI5OSAxMS4wNzAzIDQuMDM0MzNDMTAuNTU1MyAzLjM2MDc1IDkuODk2NTIgMi45OTIzNCA5LjMzNDk5IDIuNzYxMTVMOS4zMzQ2NyAyLjc2MTAyQzkuMzM0MDkgMi43NjA3OSA5LjMyOTgyIDIuNzU4ODggOS4zMjMxMyAyLjc1NDI0QzkuMzE2NTUgMi43NDk2NyA5LjMwOTgxIDIuNzQzOTQgOS4zMDM4MiAyLjczNzdDOS4yOTg3NSAyLjczMjQxIDkuMjk1NDUgMi43MjgwMyA5LjI5MzYzIDIuNzI1MzFDOS4wNzI2NCAxLjk4Mzc4IDguNDI2OTEgMS4yMjk0MyA3LjQ3MzA2IDEuMjI5NDNaTTguNjg2NTQgMTIuNjQxOUg2LjEzMDQyQzYuMTg3NiAxMi43Mjk1IDYuMjU0MDMgMTIuODExNSA2LjMyOTEgMTIuODg2NkM2LjYxNTM3IDEzLjE3MjkgNy4wMDM2MyAxMy4zMzM3IDcuNDA4NDggMTMuMzMzN0M3LjgxMzMzIDEzLjMzMzcgOC4yMDE2IDEzLjE3MjkgOC40ODc4NyAxMi44ODY2QzguNTYyOTMgMTIuODExNSA4LjYyOTM3IDEyLjcyOTUgOC42ODY1NCAxMi42NDE5Wk02LjU1MTQ1IDIuOTk3MTZDNi42OTU3MSAyLjUwMDg1IDcuMDcxMjEgMi4xNjY5MyA3LjQ3MzA2IDIuMTY2OTNDNy44NzQ5MiAyLjE2NjkzIDguMjUwNSAyLjUwMDYxIDguMzk2NiAyLjk5Nzg1TDguMzk2OTUgMi45OTkwNEM4LjQ4NDk5IDMuMjk1NzUgOC43Mjg0MyAzLjUyNTM4IDguOTc4MDkgMy42MjgwNkM5LjQ1NjI1IDMuODI0OTIgOS45NDg5NCA0LjExMTE5IDEwLjMyNTUgNC42MDM3M0MxMC42OTgyIDUuMDkxMTkgMTAuOTkwNyA1LjgyNDg2IDEwLjk5MDcgNi45Nzc3NkMxMC45OTA3IDguMzU1MDYgMTEuMTMzNyA5LjIyNTUgMTEuNDA4OSA5Ljg5MjE3QzExLjY0ODMgMTAuNDcyMyAxMS45ODIzIDEwLjg3NDkgMTIuMzE2NyAxMS4yNzhDMTIuMzY1MyAxMS4zMzY2IDEyLjQxMzkgMTEuMzk1MSAxMi40NjIyIDExLjQ1NDJDMTIuNTAxNiAxMS41MDI1IDEyLjUwNDYgMTEuNTU1MiAxMi40NzkzIDExLjYwNUMxMi40NTUzIDExLjY1MjQgMTIuMzk5NiAxMS43MDQ0IDEyLjI4OTQgMTEuNzA0NEgyLjY1OTg2QzIuNTQ2MDQgMTEuNzA0NCAyLjQ4OTU1IDExLjY1MDkgMi40NjU4OCAxMS42MDQ1QzIuNDQxMTkgMTEuNTU2MiAyLjQ0MzI1IDExLjUwNCAyLjQ4MzggMTEuNDU0NEwyLjQ4MzgzIDExLjQ1NDRDMi41MzIxNSAxMS4zOTUyIDIuNTgwNzUgMTEuMzM2NiAyLjYyOTM0IDExLjI3ODFMMi42Mjk0NiAxMS4yNzc5QzIuOTYzODkgMTAuODc0OCAzLjI5Nzg1IDEwLjQ3MjMgMy41Mzc0IDkuODkyMjlDMy44MTI3MyA5LjIyNTcxIDMuOTU2MTUgOC4zNTUzMyAzLjk1Njk1IDYuOTc4MDNWNi45Nzc3NkMzLjk1Njk1IDUuODIzNDEgNC4yNDkyOCA1LjA4OTk5IDQuNjIxNjUgNC42MDMwOUM0Ljk5NzkyIDQuMTExMSA1LjQ5MDQ0IDMuODI1MzcgNS45Njk2MyAzLjYyODA1QzYuMjE2NjEgMy41MjY0NSA2LjQ2MjU3IDMuMzAwMDIgNi41NTExMSAyLjk5ODMzTDYuNTUxNDUgMi45OTcxNlpcIixmaWxsOnQscm9sZTpcImltZ1wifSl9KSl9fSw4MjY1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJyb2tlbkxpbmtJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5Ccm9rZW5MaW5rSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMzJcIixoZWlnaHQ6XCIzMlwiLHZpZXdCb3g6XCIwIDAgMzIgMzJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46WygwLG8uanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk02LjMzMzUgMy43MDAyQzYuMDU3MzUgMy43MDAyIDUuODMzNSAzLjkyNDA1IDUuODMzNSA0LjIwMDJWMjcuODAwMkM1LjgzMzUgMjguMDc2MyA2LjA1NzM1IDI4LjMwMDIgNi4zMzM1IDI4LjMwMDJIMjUuNjY2OEMyNS45NDMgMjguMzAwMiAyNi4xNjY4IDI4LjA3NjMgMjYuMTY2OCAyNy44MDAyVjEyLjIzMzVIMTguMTMzNUMxNy44NTc0IDEyLjIzMzUgMTcuNjMzNSAxMi4wMDk3IDE3LjYzMzUgMTEuNzMzNVYzLjcwMDJINi4zMzM1Wk0xOC42MzM1IDQuNDA3M0wyNS40NTk3IDExLjIzMzVIMTguNjMzNVY0LjQwNzNaTTQuODMzNSA0LjIwMDJDNC44MzM1IDMuMzcxNzcgNS41MDUwNyAyLjcwMDIgNi4zMzM1IDIuNzAwMkgxOC4xMzM1QzE4LjI2NjEgMi43MDAyIDE4LjM5MzMgMi43NTI4NyAxOC40ODcgMi44NDY2NEwyNy4wMjA0IDExLjM4QzI3LjExNDEgMTEuNDczNyAyNy4xNjY4IDExLjYwMDkgMjcuMTY2OCAxMS43MzM1VjI3LjgwMDJDMjcuMTY2OCAyOC42Mjg2IDI2LjQ5NTMgMjkuMzAwMiAyNS42NjY4IDI5LjMwMDJINi4zMzM1QzUuNTA1MDcgMjkuMzAwMiA0LjgzMzUgMjguNjI4NiA0LjgzMzUgMjcuODAwMlY0LjIwMDJaXCIsZmlsbDp0fSksKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTE0LjI0OCAyMS45MDg0VjIxLjg0MDlDMTQuMjUyOCAyMS40MDA2IDE0LjI5NjYgMjEuMDUwMiAxNC4zNzk0IDIwLjc4OThDMTQuNDY0NyAyMC41Mjk0IDE0LjU4NTQgMjAuMzE4NyAxNC43NDE3IDIwLjE1NzdDMTQuODk3OSAxOS45OTY3IDE1LjA4NjEgMTkuODQ5OSAxNS4zMDYzIDE5LjcxNzNDMTUuNDQ4MyAxOS42Mjc0IDE1LjU3NjIgMTkuNTI2OCAxNS42ODk4IDE5LjQxNTVDMTUuODAzNCAxOS4zMDQyIDE1Ljg5MzQgMTkuMTc2NCAxNS45NTk3IDE5LjAzMkMxNi4wMjYgMTguODg3NSAxNi4wNTkxIDE4LjcyNzcgMTYuMDU5MSAxOC41NTI2QzE2LjA1OTEgMTguMzQxOSAxNi4wMDk0IDE4LjE1OTYgMTUuOTEgMTguMDA1N0MxNS44MTA1IDE3Ljg1MTggMTUuNjc4IDE3LjczMzQgMTUuNTEyMyAxNy42NTA2QzE1LjM0ODkgMTcuNTY1MyAxNS4xNjY2IDE3LjUyMjcgMTQuOTY1NCAxNy41MjI3QzE0Ljc4MzEgMTcuNTIyNyAxNC42MDkxIDE3LjU2MDYgMTQuNDQzNCAxNy42MzY0QzE0LjI3NzYgMTcuNzEyMSAxNC4xNDAzIDE3LjgzMDUgMTQuMDMxNCAxNy45OTE1QzEzLjkyMjUgMTguMTUwMSAxMy44NTk4IDE4LjM1NDkgMTMuODQzMiAxOC42MDU4SDEyLjc2MzdDMTIuNzgwMiAxOC4xNzk3IDEyLjg4OCAxNy44MTk4IDEzLjA4NjggMTcuNTI2M0MxMy4yODU3IDE3LjIzMDQgMTMuNTQ4NSAxNy4wMDY2IDEzLjg3NTIgMTYuODU1MUMxNC4yMDQyIDE2LjcwMzYgMTQuNTY3NiAxNi42Mjc4IDE0Ljk2NTQgMTYuNjI3OEMxNS40MDEgMTYuNjI3OCAxNS43ODIxIDE2LjcwOTUgMTYuMTA4OCAxNi44NzI5QzE2LjQzNTUgMTcuMDMzOSAxNi42ODg5IDE3LjI1OTkgMTYuODY4OCAxNy41NTExQzE3LjA1MTEgMTcuODQgMTcuMTQyMiAxOC4xNzczIDE3LjE0MjIgMTguNTYzMkMxNy4xNDIyIDE4LjgyODQgMTcuMTAwOCAxOS4wNjc1IDE3LjAxNzkgMTkuMjgwNUMxNi45MzUxIDE5LjQ5MTIgMTYuODE2NyAxOS42Nzk1IDE2LjY2MjggMTkuODQ1MkMxNi41MTEzIDIwLjAxMDkgMTYuMzI5IDIwLjE1NzcgMTYuMTE1OSAyMC4yODU1QzE1LjkxNDcgMjAuNDExIDE1Ljc1MTQgMjAuNTQxMiAxNS42MjU5IDIwLjY3NjFDMTUuNTAyOCAyMC44MTExIDE1LjQxMjggMjAuOTcwOSAxNS4zNTYgMjEuMTU1NUMxNS4yOTkyIDIxLjM0MDIgMTUuMjY4NCAyMS41Njg3IDE1LjI2MzcgMjEuODQwOVYyMS45MDg0SDE0LjI0OFpNMTQuNzg0MyAyNC4wNjc1QzE0LjU5MDEgMjQuMDY3NSAxNC40MjMyIDIzLjk5ODggMTQuMjgzNiAyMy44NjE1QzE0LjE0MzkgMjMuNzIxOCAxNC4wNzQgMjMuNTUzNyAxNC4wNzQgMjMuMzU3MkMxNC4wNzQgMjMuMTYzMSAxNC4xNDM5IDIyLjk5NzQgMTQuMjgzNiAyMi44NjAxQzE0LjQyMzIgMjIuNzIwNCAxNC41OTAxIDIyLjY1MDYgMTQuNzg0MyAyMi42NTA2QzE0Ljk3NiAyMi42NTA2IDE1LjE0MTcgMjIuNzIwNCAxNS4yODE0IDIyLjg2MDFDMTUuNDIzNSAyMi45OTc0IDE1LjQ5NDUgMjMuMTYzMSAxNS40OTQ1IDIzLjM1NzJDMTUuNDk0NSAyMy40ODc1IDE1LjQ2MTQgMjMuNjA3IDE1LjM5NTEgMjMuNzE1OUMxNS4zMzExIDIzLjgyMjQgMTUuMjQ1OSAyMy45MDc3IDE1LjEzOTQgMjMuOTcxNkMxNS4wMzI4IDI0LjAzNTUgMTQuOTE0NSAyNC4wNjc1IDE0Ljc4NDMgMjQuMDY3NVpcIixmaWxsOnR9KV19KSl9fSw2NDQ3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNoZXZyb25Eb3duSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQ2hldnJvbkRvd25JY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIyNFwiLGhlaWdodDpcIjI0XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk01LjA1MjgyIDkuODg3MDdDNS4zMzYxMiA5LjU4NDg5IDUuODEwNzUgOS41Njk1OCA2LjExMjkzIDkuODUyODdMMTIgMTUuMzcyTDE3Ljg4NyA5Ljg1Mjg3QzE4LjE4OTIgOS41Njk1OCAxOC42NjM4IDkuNTg0ODkgMTguOTQ3MSA5Ljg4NzA3QzE5LjIzMDQgMTAuMTg5MyAxOS4yMTUxIDEwLjY2MzkgMTguOTEyOSAxMC45NDcyTDEyLjUxMjkgMTYuOTQ3MkMxMi4yMjQ0IDE3LjIxNzYgMTEuNzc1NSAxNy4yMTc2IDExLjQ4NyAxNi45NDcyTDUuMDg3MDIgMTAuOTQ3MkM0Ljc4NDg0IDEwLjY2MzkgNC43Njk1MiAxMC4xODkzIDUuMDUyODIgOS44ODcwN1pcIixmaWxsOnR9LG4pKX0pKX19LDIxNDc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2hldnJvbkxlZnRJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5DaGV2cm9uTGVmdEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3htbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix3aWR0aDpcIjI0XCIsaGVpZ2h0OlwiMjRcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsZmlsbDpcIm5vbmVcIn0se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIixPYmplY3QuYXNzaWduKHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTE0LjExMjcgNS4wNTI3MkMxNC40MTQ5IDUuMzM2MDEgMTQuNDMwMiA1LjgxMDY0IDE0LjE0NjkgNi4xMTI4Mkw4LjYyNzg0IDExLjk5OTlMMTQuMTQ2OSAxNy44ODY5QzE0LjQzMDIgMTguMTg5MSAxNC40MTQ5IDE4LjY2MzcgMTQuMTEyNyAxOC45NDdDMTMuODEwNiAxOS4yMzAzIDEzLjMzNTkgMTkuMjE1IDEzLjA1MjYgMTguOTEyOEw3LjA1MjY0IDEyLjUxMjhDNi43ODIxOCAxMi4yMjQzIDYuNzgyMTggMTEuNzc1NCA3LjA1MjY0IDExLjQ4NjlMMTMuMDUyNiA1LjA4NjkxQzEzLjMzNTkgNC43ODQ3MyAxMy44MTA2IDQuNzY5NDIgMTQuMTEyNyA1LjA1MjcyWlwiLGZpbGw6dH0sbikpfSkpfX0sMjQwMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGV2cm9uUmlnaHRJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5DaGV2cm9uUmlnaHRJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIyNFwiLGhlaWdodDpcIjI0XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk05Ljg4NzYyIDUuMDUyNTZDMTAuMTg5OCA0Ljc2OTI2IDEwLjY2NDQgNC43ODQ1NyAxMC45NDc3IDUuMDg2NzZMMTYuOTQ3NyAxMS40ODY4QzE3LjIxODIgMTEuNzc1MyAxNy4yMTgyIDEyLjIyNDIgMTYuOTQ3NyAxMi41MTI3TDEwLjk0NzcgMTguOTEyN0MxMC42NjQ0IDE5LjIxNDkgMTAuMTg5OCAxOS4yMzAyIDkuODg3NjIgMTguOTQ2OUM5LjU4NTQzIDE4LjY2MzYgOS41NzAxMiAxOC4xODg5IDkuODUzNDIgMTcuODg2OEwxNS4zNzI1IDExLjk5OTdMOS44NTM0MiA2LjExMjY3QzkuNTcwMTIgNS44MTA0OSA5LjU4NTQ0IDUuMzM1ODYgOS44ODc2MiA1LjA1MjU2WlwiLGZpbGw6dH0sbikpfSkpfX0sNDgyNTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGV2cm9uVXBJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5DaGV2cm9uVXBJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIyNFwiLGhlaWdodDpcIjI0XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk01LjA1Mjg1IDE0LjExMjlDNS4zMzYxNSAxNC40MTUxIDUuODEwNzggMTQuNDMwNCA2LjExMjk2IDE0LjE0NzFMMTIgOC42MjgwMkwxNy44ODcgMTQuMTQ3MUMxOC4xODkyIDE0LjQzMDQgMTguNjYzOSAxNC40MTUxIDE4Ljk0NzIgMTQuMTEyOUMxOS4yMzA1IDEzLjgxMDcgMTkuMjE1MSAxMy4zMzYxIDE4LjkxMyAxMy4wNTI4TDEyLjUxMyA3LjA1MjgyQzEyLjIyNDUgNi43ODIzNiAxMS43NzU1IDYuNzgyMzYgMTEuNDg3MSA3LjA1MjgyTDUuMDg3MDUgMTMuMDUyOEM0Ljc4NDg3IDEzLjMzNjEgNC43Njk1NiAxMy44MTA3IDUuMDUyODUgMTQuMTEyOVpcIixmaWxsOnR9LG4pKX0pKX19LDEyODE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRXhjbGFtYXRpb25DaXJjbGVkRmlsbGVkSWNvbj12b2lkIDA7Y29uc3Qgcj1uKDU4OTMpO3QuRXhjbGFtYXRpb25DaXJjbGVkRmlsbGVkSWNvbj1lPT4oMCxyLmpzeHMpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE3XCIsdmlld0JveDpcIjAgMCAxNiAxN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlLHtjaGlsZHJlbjpbKDAsci5qc3gpKFwicGF0aFwiLHtkOlwiTTcuOTk5ODggMTUuMzMxN0MxMS43NzI5IDE1LjMzMTcgMTQuODMxNiAxMi4yNzMxIDE0LjgzMTYgOC41MDAwN0MxNC44MzE2IDQuNzI3MDQgMTEuNzcyOSAxLjY2ODQgNy45OTk4OCAxLjY2ODRDNC4yMjY4NiAxLjY2ODQgMS4xNjgyMSA0LjcyNzA0IDEuMTY4MjEgOC41MDAwN0MxLjE2ODIxIDEyLjI3MzEgNC4yMjY4NiAxNS4zMzE3IDcuOTk5ODggMTUuMzMxN1pcIixmaWxsOlwicmVkXCJ9KSwoMCxyLmpzeCkoXCJtYXNrXCIsT2JqZWN0LmFzc2lnbih7aWQ6XCJwYXRoLTItaW5zaWRlLTFfNl8yNjIwMzNcIixmaWxsOlwid2hpdGVcIn0se2NoaWxkcmVuOigwLHIuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk03Ljk5OTkzIDQuMzczODRDNy41NzUyNSA0LjM3Mzg0IDcuMjM1NjQgNC43MjY3NiA3LjI1MTk2IDUuMTUxMTNMNy40MjI5NiA5LjU5NzA2QzcuNDM0ODkgOS45MDcwOCA3LjY4OTY4IDEwLjE1MjMgNy45OTk5MyAxMC4xNTIzQzguMzEwMTkgMTAuMTUyMyA4LjU2NDk4IDkuOTA3MDggOC41NzY5IDkuNTk3MDZMOC43NDc5IDUuMTUxMTNDOC43NjQyMiA0LjcyNjc2IDguNDI0NjEgNC4zNzM4NCA3Ljk5OTkzIDQuMzczODRaTTcuOTk5OTMgMTIuNjQwNkM4LjQ2MDIyIDEyLjY0MDYgOC44MzMzNSAxMi4yNjc1IDguODMzMzUgMTEuODA3MkM4LjgzMzM1IDExLjM0NjkgOC40NjAyMiAxMC45NzM4IDcuOTk5OTMgMTAuOTczOEM3LjUzOTY0IDEwLjk3MzggNy4xNjY1IDExLjM0NjkgNy4xNjY1IDExLjgwNzJDNy4xNjY1IDEyLjI2NzUgNy41Mzk2NCAxMi42NDA2IDcuOTk5OTMgMTIuNjQwNlpcIn0pfSkpLCgwLHIuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk03Ljk5OTkzIDQuMzczODRDNy41NzUyNSA0LjM3Mzg0IDcuMjM1NjQgNC43MjY3NiA3LjI1MTk2IDUuMTUxMTNMNy40MjI5NiA5LjU5NzA2QzcuNDM0ODkgOS45MDcwOCA3LjY4OTY4IDEwLjE1MjMgNy45OTk5MyAxMC4xNTIzQzguMzEwMTkgMTAuMTUyMyA4LjU2NDk4IDkuOTA3MDggOC41NzY5IDkuNTk3MDZMOC43NDc5IDUuMTUxMTNDOC43NjQyMiA0LjcyNjc2IDguNDI0NjEgNC4zNzM4NCA3Ljk5OTkzIDQuMzczODRaTTcuOTk5OTMgMTIuNjQwNkM4LjQ2MDIyIDEyLjY0MDYgOC44MzMzNSAxMi4yNjc1IDguODMzMzUgMTEuODA3MkM4LjgzMzM1IDExLjM0NjkgOC40NjAyMiAxMC45NzM4IDcuOTk5OTMgMTAuOTczOEM3LjUzOTY0IDEwLjk3MzggNy4xNjY1IDExLjM0NjkgNy4xNjY1IDExLjgwNzJDNy4xNjY1IDEyLjI2NzUgNy41Mzk2NCAxMi42NDA2IDcuOTk5OTMgMTIuNjQwNlpcIixmaWxsOlwid2hpdGVcIn0pLCgwLHIuanN4KShcInBhdGhcIix7ZDpcIk03LjI1MTk2IDUuMTUxMTNMNS42NDg3NCA1LjIxMjc5TDUuNjQ4NzQgNS4yMTI3OUw3LjI1MTk2IDUuMTUxMTNaTTcuNDIyOTYgOS41OTcwNkw5LjAyNjE4IDkuNTM1NEw5LjAyNjE4IDkuNTM1NEw3LjQyMjk2IDkuNTk3MDZaTTguNTc2OSA5LjU5NzA2TDEwLjE4MDEgOS42NTg3Mkw4LjU3NjkgOS41OTcwNlpNOC43NDc5IDUuMTUxMTNMMTAuMzUxMSA1LjIxMjc5TDEwLjM1MTEgNS4yMTI3OUw4Ljc0NzkgNS4xNTExM1pNOC44NTUxOSA1LjA4OTQ3QzguODczODUgNS41NzQ3IDguNDg1NTMgNS45NzgyNSA3Ljk5OTkzIDUuOTc4MjVWMi43Njk0M0M2LjY2NDk4IDIuNzY5NDMgNS41OTc0NCAzLjg3ODgyIDUuNjQ4NzQgNS4yMTI3OUw4Ljg1NTE5IDUuMDg5NDdaTTkuMDI2MTggOS41MzU0TDguODU1MTkgNS4wODk0N0w1LjY0ODc0IDUuMjEyNzlMNS44MTk3NCA5LjY1ODcyTDkuMDI2MTggOS41MzU0Wk03Ljk5OTkzIDguNTQ3ODZDOC41NTE3NyA4LjU0Nzg2IDkuMDA0OTggOC45ODM5NiA5LjAyNjE4IDkuNTM1NEw1LjgxOTc0IDkuNjU4NzJDNS44NjQ4IDEwLjgzMDIgNi44Mjc1OCAxMS43NTY3IDcuOTk5OTMgMTEuNzU2N1Y4LjU0Nzg2Wk02Ljk3MzY4IDkuNTM1NEM2Ljk5NDg5IDguOTgzOTYgNy40NDgwOSA4LjU0Nzg2IDcuOTk5OTMgOC41NDc4NlYxMS43NTY3QzkuMTcyMjggMTEuNzU2NyAxMC4xMzUxIDEwLjgzMDIgMTAuMTgwMSA5LjY1ODcyTDYuOTczNjggOS41MzU0Wk03LjE0NDY4IDUuMDg5NDdMNi45NzM2OCA5LjUzNTRMMTAuMTgwMSA5LjY1ODcyTDEwLjM1MTEgNS4yMTI3OUw3LjE0NDY4IDUuMDg5NDdaTTcuOTk5OTMgNS45NzgyNUM3LjUxNDM0IDUuOTc4MjUgNy4xMjYwMiA1LjU3NDcgNy4xNDQ2OCA1LjA4OTQ3TDEwLjM1MTEgNS4yMTI3OUMxMC40MDI0IDMuODc4ODIgOS4zMzQ4OSAyLjc2OTQzIDcuOTk5OTMgMi43Njk0M1Y1Ljk3ODI1Wk03LjIyODk1IDExLjgwNzJDNy4yMjg5NSAxMS4zODE0IDcuNTc0MTMgMTEuMDM2MiA3Ljk5OTkzIDExLjAzNjJWMTQuMjQ1QzkuMzQ2MzEgMTQuMjQ1IDEwLjQzNzggMTMuMTUzNiAxMC40Mzc4IDExLjgwNzJINy4yMjg5NVpNNy45OTk5MyAxMi41NzgyQzcuNTc0MTMgMTIuNTc4MiA3LjIyODk1IDEyLjIzMyA3LjIyODk1IDExLjgwNzJIMTAuNDM3OEMxMC40Mzc4IDEwLjQ2MDggOS4zNDYzMSA5LjM2OTM3IDcuOTk5OTMgOS4zNjkzN1YxMi41NzgyWk04Ljc3MDkxIDExLjgwNzJDOC43NzA5MSAxMi4yMzMgOC40MjU3MyAxMi41NzgyIDcuOTk5OTMgMTIuNTc4MlY5LjM2OTM3QzYuNjUzNTUgOS4zNjkzNyA1LjU2MjEgMTAuNDYwOCA1LjU2MjEgMTEuODA3Mkg4Ljc3MDkxWk03Ljk5OTkzIDExLjAzNjJDOC40MjU3MyAxMS4wMzYyIDguNzcwOTEgMTEuMzgxNCA4Ljc3MDkxIDExLjgwNzJINS41NjIxQzUuNTYyMSAxMy4xNTM2IDYuNjUzNTUgMTQuMjQ1IDcuOTk5OTMgMTQuMjQ1VjExLjAzNjJaXCIsZmlsbDpcIndoaXRlXCIsbWFzazpcInVybCgjcGF0aC0yLWluc2lkZS0xXzZfMjYyMDMzKVwifSldfSkpfSw3NDI5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZpbGxlZENpcmNsZUljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkZpbGxlZENpcmNsZUljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwiZ1wiLE9iamVjdC5hc3NpZ24oe2lkOlwiLlNsb3RcIn0se2NoaWxkcmVuOigwLG8uanN4KShcImNpcmNsZVwiLHtpZDpcIkVsbGlwc2UgMVwiLGN4OlwiOFwiLGN5OlwiOFwiLHI6XCI4XCIsZmlsbDp0fSl9KSl9KSl9fSw2Nzk1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZpbHRlckljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkZpbHRlckljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTJcIixoZWlnaHQ6XCI3XCIsdmlld0JveDpcIjAgMCAxMiA3XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk00IDYuNUM0IDYuMzY3MzkgNC4wNTI2OCA2LjI0MDIxIDQuMTQ2NDUgNi4xNDY0NUM0LjI0MDIxIDYuMDUyNjggNC4zNjczOSA2IDQuNSA2SDcuNUM3LjYzMjYxIDYgNy43NTk3OSA2LjA1MjY4IDcuODUzNTUgNi4xNDY0NUM3Ljk0NzMyIDYuMjQwMjEgOCA2LjM2NzM5IDggNi41QzggNi42MzI2MSA3Ljk0NzMyIDYuNzU5NzkgNy44NTM1NSA2Ljg1MzU1QzcuNzU5NzkgNi45NDczMiA3LjYzMjYxIDcgNy41IDdINC41QzQuMzY3MzkgNyA0LjI0MDIxIDYuOTQ3MzIgNC4xNDY0NSA2Ljg1MzU1QzQuMDUyNjggNi43NTk3OSA0IDYuNjMyNjEgNCA2LjVaTTIgMy41QzIgMy4zNjczOSAyLjA1MjY4IDMuMjQwMjEgMi4xNDY0NSAzLjE0NjQ1QzIuMjQwMjEgMy4wNTI2OCAyLjM2NzM5IDMgMi41IDNIOS41QzkuNjMyNjEgMyA5Ljc1OTc5IDMuMDUyNjggOS44NTM1NSAzLjE0NjQ1QzkuOTQ3MzIgMy4yNDAyMSAxMCAzLjM2NzM5IDEwIDMuNUMxMCAzLjYzMjYxIDkuOTQ3MzIgMy43NTk3OSA5Ljg1MzU1IDMuODUzNTVDOS43NTk3OSAzLjk0NzMyIDkuNjMyNjEgNCA5LjUgNEgyLjVDMi4zNjczOSA0IDIuMjQwMjEgMy45NDczMiAyLjE0NjQ1IDMuODUzNTVDMi4wNTI2OCAzLjc1OTc5IDIgMy42MzI2MSAyIDMuNVpNMCAwLjVDMCAwLjM2NzM5MiAwLjA1MjY3ODUgMC4yNDAyMTUgMC4xNDY0NDcgMC4xNDY0NDdDMC4yNDAyMTUgMC4wNTI2Nzg1IDAuMzY3MzkyIDAgMC41IDBIMTEuNUMxMS42MzI2IDAgMTEuNzU5OCAwLjA1MjY3ODUgMTEuODUzNiAwLjE0NjQ0N0MxMS45NDczIDAuMjQwMjE1IDEyIDAuMzY3MzkyIDEyIDAuNUMxMiAwLjYzMjYwOCAxMS45NDczIDAuNzU5Nzg1IDExLjg1MzYgMC44NTM1NTNDMTEuNzU5OCAwLjk0NzMyMSAxMS42MzI2IDEgMTEuNSAxSDAuNUMwLjM2NzM5MiAxIDAuMjQwMjE1IDAuOTQ3MzIxIDAuMTQ2NDQ3IDAuODUzNTUzQzAuMDUyNjc4NSAwLjc1OTc4NSAwIDAuNjMyNjA4IDAgMC41WlwiLGZpbGw6dH0pfSkpfX0sMTE3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZsb3BweURpc2tJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5GbG9wcHlEaXNrSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxMlwiLGhlaWdodDpcIjEyXCIsdmlld0JveDpcIjAgMCAxMiAxMlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMS44NzUgMi4xODc1QzEuODc1IDIuMTUyOTggMS45MDI5OCAyLjEyNSAxLjkzNzUgMi4xMjVIOC4yMzAzOUM4LjI0Njk3IDIuMTI1IDguMjYyODcgMi4xMzE1OCA4LjI3NDU5IDIuMTQzMzFMOS45ODE2OSAzLjg1MDQxQzkuOTkzNDEgMy44NjIxMyAxMCAzLjg3ODAzIDEwIDMuODk0NjFWMTAuMTg3NUMxMCAxMC4yMjIgOS45NzIwMiAxMC4yNSA5LjkzNzUgMTAuMjVIMS45Mzc1QzEuOTAyOTggMTAuMjUgMS44NzUgMTAuMjIyIDEuODc1IDEwLjE4NzVWMi4xODc1Wk0xLjkzNzUgMS4yNUMxLjQxOTczIDEuMjUgMSAxLjY2OTczIDEgMi4xODc1VjEwLjE4NzVDMSAxMC43MDUzIDEuNDE5NzMgMTEuMTI1IDEuOTM3NSAxMS4xMjVIOS45Mzc1QzEwLjQ1NTMgMTEuMTI1IDEwLjg3NSAxMC43MDUzIDEwLjg3NSAxMC4xODc1VjMuODk0NjFDMTAuODc1IDMuNjQ1OTcgMTAuNzc2MiAzLjQwNzUxIDEwLjYwMDQgMy4yMzE2OUw4Ljg5MzMxIDEuNTI0NTlDOC43MTc0OSAxLjM0ODc3IDguNDc5MDMgMS4yNSA4LjIzMDM5IDEuMjVIMS45Mzc1Wk0yLjg0OTI0IDMuNDA4MUMyLjg0OTI0IDMuMjM3NTQgMi45ODc1MSAzLjA5OTI3IDMuMTU4MDcgMy4wOTkyN0g3LjQ4MTZDNy42NTIxNSAzLjA5OTI3IDcuNzkwNDIgMy4yMzc1NCA3Ljc5MDQyIDMuNDA4MVY0LjY0MzM5QzcuNzkwNDIgNC44MTM5NSA3LjY1MjE1IDQuOTUyMjEgNy40ODE2IDQuOTUyMjFIMy4xNTgwN0MyLjk4NzUxIDQuOTUyMjEgMi44NDkyNCA0LjgxMzk1IDIuODQ5MjQgNC42NDMzOVYzLjQwODFaTTQuNTM2OCA2LjYzOTc3QzQuODI2MzggNi4zNTAxOSA1LjIxOTEzIDYuMTg3NTEgNS42Mjg2NSA2LjE4NzUxQzYuMDM4MTggNi4xODc1MSA2LjQzMDkzIDYuMzUwMTkgNi43MjA1MSA2LjYzOTc3QzcuMDEwMDkgNi45MjkzNSA3LjE3Mjc3IDcuMzIyMSA3LjE3Mjc3IDcuNzMxNjNDNy4xNzI3NyA4LjE0MTE1IDcuMDEwMDkgOC41MzM5IDYuNzIwNTEgOC44MjM0OEM2LjQzMDkzIDkuMTEzMDYgNi4wMzgxOCA5LjI3NTc0IDUuNjI4NjUgOS4yNzU3NEM1LjIxOTEzIDkuMjc1NzQgNC44MjYzOCA5LjExMzA2IDQuNTM2OCA4LjgyMzQ4QzQuMjQ3MjIgOC41MzM5IDQuMDg0NTQgOC4xNDExNSA0LjA4NDU0IDcuNzMxNjNDNC4wODQ1NCA3LjMyMjEgNC4yNDcyMiA2LjkyOTM1IDQuNTM2OCA2LjYzOTc3WlwiLGZpbGw6dCxyb2xlOlwiaW1nXCJ9KX0pKX19LDUyOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GcmFnbWVudHNJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5GcmFnbWVudHNJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjIwXCIsaGVpZ2h0OlwiMjBcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk04LjgwMDAxIDQuODAwMDJINC44MDAwMUMzLjkxNzYxIDQuODAwMDIgMy4yMDAwMSA1LjUxNzYyIDMuMjAwMDEgNi40MDAwMlYxMC40QzMuMjAwMDEgMTEuMjgyNCAzLjkxNzYxIDEyIDQuODAwMDEgMTJIOC44MDAwMUM5LjY4MjQxIDEyIDEwLjQgMTEuMjgyNCAxMC40IDEwLjRWNi40MDAwMkMxMC40IDUuNTE3NjIgOS42ODI0MSA0LjgwMDAyIDguODAwMDEgNC44MDAwMlpNMjAuMzU5MiA2LjQ2ODgyTDE3LjUzMTIgMy42NDAwMkMxNi45MDggMy4wMTYwMiAxNS44OTIgMy4wMTYwMiAxNS4yNjg4IDMuNjQwMDJMMTIuNDQwOCA2LjQ2ODgyQzExLjgxNjggNy4wOTI4MiAxMS44MTY4IDguMTA3MjIgMTIuNDQwOCA4LjczMTIyTDE1LjI2ODggMTEuNTZDMTUuNTgwOCAxMS44NzIgMTUuOTkwNCAxMi4wMjggMTYuNCAxMi4wMjhDMTYuODA5NiAxMi4wMjggMTcuMjE5MiAxMS44NzIgMTcuNTMxMiAxMS41NkwyMC4zNTkyIDguNzMxMjJDMjAuOTgzMiA4LjEwNzIyIDIwLjk4MzIgNy4wOTI4MiAyMC4zNTkyIDYuNDY4ODJaTTguODAwMDEgMTMuNkg0LjgwMDAxQzMuOTE3NjEgMTMuNiAzLjIwMDAxIDE0LjMxNzYgMy4yMDAwMSAxNS4yVjE5LjJDMy4yMDAwMSAyMC4wODI0IDMuOTE3NjEgMjAuOCA0LjgwMDAxIDIwLjhIOC44MDAwMUM5LjY4MjQxIDIwLjggMTAuNCAyMC4wODI0IDEwLjQgMTkuMlYxNS4yQzEwLjQgMTQuMzE3NiA5LjY4MjQxIDEzLjYgOC44MDAwMSAxMy42Wk0xNy42IDEzLjZIMTMuNkMxMi43MTc2IDEzLjYgMTIgMTQuMzE3NiAxMiAxNS4yVjE5LjJDMTIgMjAuMDgyNCAxMi43MTc2IDIwLjggMTMuNiAyMC44SDE3LjZDMTguNDgyNCAyMC44IDE5LjIgMjAuMDgyNCAxOS4yIDE5LjJWMTUuMkMxOS4yIDE0LjMxNzYgMTguNDgyNCAxMy42IDE3LjYgMTMuNlpcIixmaWxsOnR9KX0pKX19LDc3ODg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGlnaHRCdWxiRmlsbGVkSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuTGlnaHRCdWxiRmlsbGVkSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTBcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTAgMTJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46WygwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xLjgzIDEuMzEwMDhDMi4yNDQwOSAwLjg5MTY2NyAyLjczNzY4IDAuNTYwMzA3IDMuMjgxNzQgMC4zMzU1MDRDMy44MjU4MSAwLjExMDcwMSA0LjQwOTM0IC0wLjAwMzAwMzMzIDQuOTk4IDAuMDAxMDgyOTFDNi4xODYyOCAtMC4wMDMxMDc4NSA3LjMyOTA1IDAuNDU3NzMzIDguMTgyIDEuMjg1MDhDOC41OTg4MSAxLjY4NzE5IDguOTMwNDYgMi4xNjkwMyA5LjE1NzIzIDIuNzAxOTRDOS4zODQgMy4yMzQ4NSA5LjUwMTI1IDMuODA3OTMgOS41MDIgNC4zODcwOEM5LjUwMiA1LjY4MDA4IDguOTE3IDYuODMwMDggNy44ODMgNy44MjUwOEw3LjU3NyA5LjAwMDA4SDIuNDY2TDIuMjM2IDguMDM3MDhDMS4xNTQgNi45MDcwOCAwLjU1NiA1LjgxOTA4IDAuNSA0LjU4MjA4VjQuNTQ0MDhDMC41NCAzLjI0ODA4IDEuMDMzIDIuMTIxMDggMS44MzEgMS4zMTEwOEwxLjgzIDEuMzEwMDhaXCIsZmlsbDp0fSksKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTIuNzA0MSAxMEwyLjkzNzEgMTAuOTc4TDIuOTQ1MSAxMUMzLjA0NTEgMTEuMjk3IDMuMjM3MSAxMS41NDQgMy40NzkxIDExLjcxN0MzLjczMDEgMTEuODk3IDQuMDM3MSAxMS45OTkgNC4zNjExIDExLjk5OUg0LjM2MzFMNS43NDYxIDExLjk5NUw1Ljc2NzEgMTEuOTkzQzYuMDc1ODcgMTEuOTY2OSA2LjM2OTEzIDExLjg0NjUgNi42MDcxIDExLjY0OEM2LjgzODEgMTEuNDU0IDcuMDEzMSAxMS4xODggNy4wODcxIDEwLjg3NEw3LjMxNjEgMTBIMi43MDQxVjEwWlwiLGZpbGw6dH0pXX0pKX19LDM3MDM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGlnaHRCdWxiT3V0bGluZWRJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5MaWdodEJ1bGJPdXRsaW5lZEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTBcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTAgMTJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTQuOTk3NjYgMC4wMDEwMDE0OUMzLjc2ODY2IDAuMDAxMDAxNDkgMi42NDc2NiAwLjQ4MjAwMiAxLjgyOTY2IDEuMzExQzEuMDMxNjYgMi4xMjEgMC41Mzk2NTcgMy4yNDggMC40OTk2NTcgNC41NDRMMC40OTg2NTcgNC41NjNWNC41ODNDMC41NTU2NTcgNS44MTkgMS4xNTM2NiA2LjkwNyAyLjIzNTY2IDguMDM3TDIuOTM3NjYgMTAuOTc4TDIuOTQ0NjYgMTFDMy4wNDQ2NiAxMS4yOTcgMy4yMzY2NiAxMS41NDQgMy40Nzg2NiAxMS43MTdDMy43Mjk2NiAxMS44OTcgNC4wMzY2NiAxMS45OTkgNC4zNjE2NiAxMS45OTlMNS43NDU2NiAxMS45OTVMNS43NjY2NiAxMS45OTNDNi4wNzU0MiAxMS45NjY5IDYuMzY4NjkgMTEuODQ2NSA2LjYwNjY2IDExLjY0OEM2LjgzNzY2IDExLjQ1NCA3LjAxMjY2IDExLjE4OCA3LjA4NjY2IDEwLjg3NEw3Ljg4MjY2IDcuODI0QzguOTE2NjYgNi44MyA5LjUwMDY2IDUuNjggOS41MDA2NiA0LjM4N0M5LjQ5OTkxIDMuODA3ODUgOS4zODI2NiAzLjIzNDc3IDkuMTU1ODkgMi43MDE4NkM4LjkyOTEyIDIuMTY4OTUgOC41OTc0NiAxLjY4NzExIDguMTgwNjYgMS4yODVDNy4zMjc5NiAwLjQ1Nzg5NCA2LjE4NTU5IC0wLjAwMjkyNzg4IDQuOTk3NjYgMC4wMDEwMDE0OVpNMi41NDI2NiAyLjAxM0MyLjg2MzQ0IDEuNjg4NzEgMy4yNDU5NiAxLjQzMTk4IDMuNjY3NjIgMS4yNThDNC4wODkyOCAxLjA4NDAxIDQuNTQxNTMgMC45OTYyODMgNC45OTc2NiAxQzUuOTI1MTQgMC45OTU3ODQgNi44MTc0NCAxLjM1NDcxIDcuNDgzNjYgMkM3LjgwNDcxIDIuMzA5MDQgOC4wNjAyMyAyLjY3OTU3IDguMjM0OTYgMy4wODk1MUM4LjQwOTY5IDMuNDk5NDUgOC41MDAwNSAzLjk0MDM4IDguNTAwNjYgNC4zODZDOC41MDA2NiA1LjM3NyA4LjA0NzY2IDYuMzEyIDcuMDk2NjYgNy4xOTFMNi45ODg2NiA3LjI5MUw2LjU0MjY2IDlIMy40OTM2NkwzLjE0NDY2IDcuNTM2TDMuMDQ3NjYgNy40MzZDMS45OTk2NiA2LjM3MiAxLjU0NzY2IDUuNDggMS40OTg2NiA0LjU1N0MxLjUzNjY2IDMuNTA5IDEuOTMyNjYgMi42MzIgMi41NDI2NiAyLjAxNFYyLjAxM1pNMy43MzI2NiAxMEg2LjI4MjY2TDYuMTE3NjYgMTAuNjI3TDYuMTE0NjYgMTAuNjRDNi4wOTIxMSAxMC43MzQyIDYuMDM5NDQgMTAuODE4NSA1Ljk2NDY2IDEwLjg4QzUuODg4NzMgMTAuOTQzNSA1Ljc5NTk1IDEwLjk4MzQgNS42OTc2NiAxMC45OTVMNC4zNjA2NiAxMUM0LjI1MzIxIDExLjAwMDMgNC4xNDgzMyAxMC45NjcxIDQuMDYwNjYgMTAuOTA1QzMuOTg3NyAxMC44NTM2IDMuOTMxMzkgMTAuNzgyIDMuODk4NjYgMTAuNjk5TDMuNzMxNjYgMTBIMy43MzI2NlpcIixmaWxsOnR9KX0pKX19LDgzMTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTG9ja2VkQ2xvc2VkRmlsbGVkSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuTG9ja2VkQ2xvc2VkRmlsbGVkSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNNS4wMDAwMyA0LjYzNjIzQzUuMDAwMDMgMy43NjA1MiA1LjI0MjIyIDMuMTA1NjEgNS42NDMyNyAyLjY3Mzc4QzYuMDM5MzggMi4yNDcyNyA2LjY0NTg1IDEuOTc4NTIgNy41MDE0MyAxLjk3ODUyQzguMzU3NDggMS45Nzg1MiA4Ljk2MzA5IDIuMjQ2NzMgOS4zNTgyNyAyLjY3MjNDOS43NTg0MSAzLjEwMzIxIDEwIDMuNzU3MjkgMTAgNC42MzM0NlY2LjUwMDIxSDExVjQuNjMzNDZDMTEgMy41NzkxNyAxMC43MDc2IDIuNjU1NzggMTAuMDkxMSAxLjk5MTgzQzkuNDY5NTUgMS4zMjI1NCA4LjU3NTg2IDAuOTc4NTE2IDcuNTAxNDMgMC45Nzg1MTZDNi40MjY3OCAwLjk3ODUxNiA1LjUzMjU1IDEuMzIzNSA0LjkxMDUyIDEuOTkzMjhDNC4yOTM0MiAyLjY1Nzc1IDQuMDAwMDMgMy41ODE2OSA0LjAwMDAzIDQuNjM2MjNWNi41MDAyMUg1LjAwMDAzVjQuNjM2MjNaTTMgNi41MDAyMUMyLjcyMzg2IDYuNTAwMjEgMi41IDYuNzI0MDcgMi41IDcuMDAwMjFWMTMuMDAwMkMyLjUgMTMuMjc2NCAyLjcyMzg2IDEzLjUwMDIgMyAxMy41MDAySDEyQzEyLjI3NjEgMTMuNTAwMiAxMi41IDEzLjI3NjQgMTIuNSAxMy4wMDAyVjcuMDAwMjFDMTIuNSA2LjcyNDA3IDEyLjI3NjEgNi41MDAyMSAxMiA2LjUwMDIxSDNaXCIsZmlsbDp0LHJvbGU6XCJpbWdcIn0pfSkpfX0sNTcyOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5NaW5pbWl6ZUljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0Lk1pbmltaXplSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMi4xNjYwMiAxMkMyLjE2NjAyIDExLjcyMzkgMi4zODk4NyAxMS41IDIuNjY2MDIgMTEuNUgxMy4zMzI3QzEzLjYwODggMTEuNSAxMy44MzI3IDExLjcyMzkgMTMuODMyNyAxMkMxMy44MzI3IDEyLjI3NjEgMTMuNjA4OCAxMi41IDEzLjMzMjcgMTIuNUgyLjY2NjAyQzIuMzg5ODcgMTIuNSAyLjE2NjAyIDEyLjI3NjEgMi4xNjYwMiAxMlpcIixmaWxsOnQscm9sZTpcImltZ1wifSl9KSl9fSwzNzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuT3BlbkZpbkljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0Lk9wZW5GaW5JY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xNC4yNjg1IDUuNzM5MTZDMTQuMTc4NSA1LjY0OTA2IDE0LjA4MTcgNS41NjU5MiAxMy45NzkgNS40OTA0N0wxMy45NDEyIDUuNDY0MjlDMTMuOTE5NiA1LjQ0OTE5IDEzLjg5ODQgNS40MzM1OCAxMy44NzYzIDUuNDE4OThDMTMuODU0MSA1LjQwNDM4IDEzLjgyODQgNS4zODg3OCAxMy44MDQ4IDUuMzc0MThMMTMuNzcxNSA1LjM1MzU0QzEzLjc0MTggNS4zMzU5MiAxMy43MTE2IDUuMzE5MyAxMy42ODE0IDUuMzAzMTlMMTMuNjYzOCA1LjI5MzYzQzEzLjMwNjUgNS4xMDYxOCAxMi45MDkxIDUuMDA4MDcgMTIuNTA1NyA1LjAwNzY4QzExLjg0MTcgNS4wMDcxNSAxMS4yMDUyIDQuNzQyOTEgMTAuNzM2MiA0LjI3MzFDMTAuMjY3MSAzLjgwMzMgMTAuMDA0IDMuMTY2NDIgMTAuMDA0NiAyLjUwMjYyQzEwLjAwNjUgMS40OTIyMiA5LjM5OTMzIDAuNTgwMjE5IDguNDY2MzQgMC4xOTE5MTFDNy41MzMzNSAtMC4xOTYzOTcgNi40NTgyNiAwLjAxNTQ2NiA1Ljc0MjQ0IDAuNzI4NzAxQzUuMDI2NjEgMS40NDE5NCA0LjgxMTAzIDIuNTE2MDcgNS4xOTYyMSAzLjQ1MDJDNS41ODE0IDQuMzg0MzMgNi40OTE1IDQuOTk0NDcgNy41MDIxIDQuOTk2MUM4LjE2NjAzIDQuOTk2NjQgOC44MDI1NiA1LjI2MDg4IDkuMjcxNjEgNS43MzA2OEM5Ljc0MDY2IDYuMjAwNDkgMTAuMDAzOCA2LjgzNzM2IDEwLjAwMzEgNy41MDExN0MxMC4wMDI2IDguMTY0OTcgOS43MzgzIDguODAxMzcgOS4yNjg0IDkuMjcwMzJDOC43OTg1IDkuNzM5MjggOC4xNjE1IDEwLjAwMjQgNy40OTc1NiAxMC4wMDE3QzYuODM0MTMgMTAuMDAyMiA2LjE5NzcyIDkuNzM4OTQgNS43Mjg2NSA5LjI2OTg3QzUuMjU5NTggOC44MDA4IDQuOTk2MzYgOC4xNjQ0NyA0Ljk5NzAzIDcuNTAxMTdDNC45OTcwMyA2LjEyMTU1IDMuODc4NDEgNS4wMDMxNSAyLjQ5ODUyIDUuMDAzMTVDMS4xMTg2MiA1LjAwMzE1IDAgNi4xMjE1NSAwIDcuNTAxMTdDMCA4Ljg4MDc4IDEuMTE4NjIgOS45OTkxOCAyLjQ5ODUyIDkuOTk5MThDMy44Nzg0MSA5Ljk5OTE4IDQuOTk3MDMgMTEuMTE3NiA0Ljk5NzAzIDEyLjQ5NzJDNC45OTcwMyAxMy44Nzk1IDYuMTE3OCAxNSA3LjUwMDMzIDE1QzguODgyODcgMTUgMTAuMDAzNiAxMy44Nzk1IDEwLjAwMzYgMTIuNDk3MkMxMC4wMDM2IDExLjExNzYgMTEuMTIyMyA5Ljk5OTE4IDEyLjUwMjEgOS45OTkxOEMxMi45NDgyIDkuOTk5NDggMTMuMzg2MiA5Ljg4MDIyIDEzLjc3MDUgOS42NTM4M0MxMy44MDM4IDkuNjM0MiAxMy44MzY1IDkuNjEzNTYgMTMuODcxMiA5LjU5MjQxTDEzLjg3ODMgOS41ODc4OEMxMy45MDg1IDkuNTY3NzUgMTMuOTM4NyA5LjU0NjYgMTMuOTY3OSA5LjUyNTQ2TDEzLjk4MSA5LjUxNjRDMTQuMDA3MiA5LjQ5NzI3IDE0LjAzMTQgOS40NzY2MiAxNC4wNTkxIDkuNDU1OThMMTQuMDgxMiA5LjQzODg3QzE0LjEwNTQgOS40MTkyMyAxNC4xMjg2IDkuMzk4NTkgMTQuMTUyMiA5LjM3Nzk1TDE0LjE3NzkgOS4zNTU4QzE0LjIwODEgOS4zMjg2MiAxNC4yMzc4IDkuMzAwNDIgMTQuMjY3IDkuMjcxMjNMMTQuMjcxNiA5LjI2NzJDMTQuMzc5NCA5LjE1ODg3IDE0LjQ3NzIgOS4wNDA5MSAxNC41NjM2IDguOTE0OEMxNC41ODI0IDguODg3NjEgMTQuNjAwNSA4Ljg2MDA5IDE0LjYxOCA4LjgzMjIzQzE1LjIzNyA3Ljg0NTg0IDE1LjA5MiA2LjU2MjY3IDE0LjI2ODUgNS43MzkxNlpcIixmaWxsOnQscm9sZTpcImltZ1wifSl9KSl9fSw5OTQwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlBhZ2VJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5QYWdlSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNFwiLGhlaWdodDpcIjE4XCIsdmlld0JveDpcIjAgMCAxNCAxOFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMTEuOTk5NyAwLjY2Njk5MkgxLjk5OTY3QzEuMDgwNTEgMC42NjY5OTIgMC4zMzMwMDggMS40MTQ0OSAwLjMzMzAwOCAyLjMzMzY2VjE1LjY2N0MwLjMzMzAwOCAxNi41ODYyIDEuMDgwNTEgMTcuMzMzNyAxLjk5OTY3IDE3LjMzMzdIMTEuOTk5N0MxMi45MTg4IDE3LjMzMzcgMTMuNjY2MyAxNi41ODYyIDEzLjY2NjMgMTUuNjY3VjIuMzMzNjZDMTMuNjY2MyAxLjQxNDQ5IDEyLjkxODggMC42NjY5OTIgMTEuOTk5NyAwLjY2Njk5MlpNNy40MTYzNCA4LjE2Njk5SDMuMjQ5NjdDMy4wMTk2NyA4LjE2Njk5IDIuODMzMDEgNy45ODAzMyAyLjgzMzAxIDcuNzUwMzNWNi45MTY5OUMyLjgzMzAxIDYuNjg2OTkgMy4wMTk2NyA2LjUwMDMzIDMuMjQ5NjcgNi41MDAzM0g3LjQxNjM0QzcuNjQ2MzQgNi41MDAzMyA3LjgzMzAxIDYuNjg2OTkgNy44MzMwMSA2LjkxNjk5VjcuNzUwMzNDNy44MzMwMSA3Ljk4MDMzIDcuNjQ2MzQgOC4xNjY5OSA3LjQxNjM0IDguMTY2OTlaTTEwLjc0OTcgNC44MzM2NkgzLjI0OTY3QzMuMDE5NjcgNC44MzM2NiAyLjgzMzAxIDQuNjQ2OTkgMi44MzMwMSA0LjQxNjk5VjMuNTgzNjZDMi44MzMwMSAzLjM1MzY2IDMuMDE5NjcgMy4xNjY5OSAzLjI0OTY3IDMuMTY2OTlIMTAuNzQ5N0MxMC45Nzk3IDMuMTY2OTkgMTEuMTY2MyAzLjM1MzY2IDExLjE2NjMgMy41ODM2NlY0LjQxNjk5QzExLjE2NjMgNC42NDY5OSAxMC45Nzk3IDQuODMzNjYgMTAuNzQ5NyA0LjgzMzY2WlwiLGZpbGw6dH0pfSkpfX0sMTAwMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5SZWREb3RJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5SZWREb3RJY29uPWU9Pnt2YXIgdD1yKGUsW10pO3JldHVybigwLG8uanN4cykoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjhcIixoZWlnaHQ6XCI4XCIsdmlld0JveDpcIjAgMCA4IDhcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sdCx7Y2hpbGRyZW46WygwLG8uanN4KShcInJlY3RcIix7eDpcIjAuNVwiLHk6XCIwLjVcIix3aWR0aDpcIjdcIixoZWlnaHQ6XCI3XCIscng6XCIzLjVcIixmaWxsOlwiI0MyMTMxM1wifSksKDAsby5qc3gpKFwicmVjdFwiLHt4OlwiMC41XCIseTpcIjAuNVwiLHdpZHRoOlwiN1wiLGhlaWdodDpcIjdcIixyeDpcIjMuNVwiLHN0cm9rZTpcIiNGMUYwRjFcIn0pXX0pKX19LDE1Mzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU3RhY2tJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5TdGFja0ljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMjBcIixoZWlnaHQ6XCIyMFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTE0LjIxNzggMy4wMDA5MkMxNC4xNTA0IDMuMDA1MTQgMTQuMDgzOSAzLjAxODQ0IDE0LjAyIDMuMDQwNDdMMy41MTk4NiA2LjQyODdDMy4zNjg2NCA2LjQ3NzQzIDMuMjM2ODEgNi41NzI5MSAzLjE0MzM1IDYuNzAxMzhDMy4wNDk4OSA2LjgyOTg2IDIuOTk5NjQgNi45ODQ2OSAyLjk5OTgzIDcuMTQzNTZWMTUuNzU0QzIuOTk4NDMgMTUuODUzNCAzLjAxNjc5IDE1Ljk1MjEgMy4wNTM4NSAxNi4wNDQzQzMuMDkwOTEgMTYuMTM2NiAzLjE0NTkzIDE2LjIyMDUgMy4yMTU3MSAxNi4yOTEzQzMuMjg1NSAxNi4zNjIxIDMuMzY4NjUgMTYuNDE4MyAzLjQ2MDM1IDE2LjQ1NjZDMy41NTIwNCAxNi40OTUgMy42NTA0NSAxNi41MTQ3IDMuNzQ5ODQgMTYuNTE0N0MzLjg0OTI0IDE2LjUxNDcgMy45NDc2NCAxNi40OTUgNC4wMzkzNCAxNi40NTY2QzQuMTMxMDMgMTYuNDE4MyA0LjIxNDE5IDE2LjM2MjEgNC4yODM5NyAxNi4yOTEzQzQuMzUzNzUgMTYuMjIwNSA0LjQwODc4IDE2LjEzNjYgNC40NDU4NCAxNi4wNDQzQzQuNDgyOSAxNS45NTIxIDQuNTAxMjYgMTUuODUzNCA0LjQ5OTg1IDE1Ljc1NFY3LjY4ODQ5TDE0LjQ4IDQuNDY3MjVDMTQuNjQ5IDQuNDE1MjkgMTQuNzk0MiA0LjMwNTMyIDE0Ljg5IDQuMTU2NzRDMTQuOTg1OCA0LjAwODE1IDE1LjAyNiAzLjgzMDUgMTUuMDAzNiAzLjY1NTE0QzE0Ljk4MTIgMy40Nzk3NyAxNC44OTc1IDMuMzE3OTcgMTQuNzY3NCAzLjE5ODI3QzE0LjYzNzMgMy4wNzg1NyAxNC40NjkxIDMuMDA4NjggMTQuMjkyNSAzLjAwMDkyQzE0LjI2NzYgMi45OTk2NyAxNC4yNDI3IDIuOTk5NjcgMTQuMjE3OCAzLjAwMDkyWk0xNy4yMTc4IDUuMjUwOTVDMTcuMTUwNCA1LjI1NTE3IDE3LjA4MzkgNS4yNjg0OCAxNy4wMjAxIDUuMjkwNUw2LjUxOTkgOC42Nzg3NEM2LjM2ODY5IDguNzI3NDYgNi4yMzY4NSA4LjgyMjk0IDYuMTQzMzkgOC45NTE0MkM2LjA0OTkzIDkuMDc5ODkgNS45OTk2OCA5LjIzNDcyIDUuOTk5ODggOS4zOTM1OVYxOC4wMDQxQzUuOTk4NDcgMTguMTAzNSA2LjAxNjgzIDE4LjIwMjEgNi4wNTM4OSAxOC4yOTQ0QzYuMDkwOTUgMTguMzg2NiA2LjE0NTk3IDE4LjQ3MDUgNi4yMTU3NiAxOC41NDEzQzYuMjg1NTQgMTguNjEyMSA2LjM2ODcgMTguNjY4MyA2LjQ2MDM5IDE4LjcwNjZDNi41NTIwOSAxOC43NDUgNi42NTA0OSAxOC43NjQ4IDYuNzQ5ODkgMTguNzY0OEM2Ljg0OTI4IDE4Ljc2NDggNi45NDc2OSAxOC43NDUgNy4wMzkzOCAxOC43MDY2QzcuMTMxMDggMTguNjY4MyA3LjIxNDIzIDE4LjYxMjEgNy4yODQwMiAxOC41NDEzQzcuMzUzOCAxOC40NzA1IDcuNDA4ODIgMTguMzg2NiA3LjQ0NTg4IDE4LjI5NDRDNy40ODI5NCAxOC4yMDIxIDcuNTAxMyAxOC4xMDM1IDcuNDk5OSAxOC4wMDQxVjkuOTM4NTJMMTcuNDggNi43MTcyOEMxNy42NDkgNi42NjUzMyAxNy43OTQyIDYuNTU1MzUgMTcuODkgNi40MDY3N0MxNy45ODU4IDYuMjU4MTggMTguMDI2MSA2LjA4MDU0IDE4LjAwMzYgNS45MDUxN0MxNy45ODEyIDUuNzI5ODEgMTcuODk3NiA1LjU2OCAxNy43Njc1IDUuNDQ4M0MxNy42Mzc0IDUuMzI4NjEgMTcuNDY5MSA1LjI1ODcxIDE3LjI5MjUgNS4yNTA5NUMxNy4yNjc2IDUuMjQ5NzEgMTcuMjQyNyA1LjI0OTcxIDE3LjIxNzggNS4yNTA5NVpNMjAuMTkzIDcuNTA1MzhDMjAuMTM0NCA3LjUwOTgyIDIwLjA3NTggNy41MjE5NyAyMC4wMTg2IDcuNTQwNTNMOS41MTg0OCAxMC45Mjg4QzkuMjA5NDggMTEuMDI5MyA4Ljk5OTkyIDExLjMxODEgOC45OTk5MiAxMS42NDM2VjIwLjI1NDFDOC45OTk5MiAyMC40OTc5IDkuMTE4MjkgMjAuNzI2MiA5LjMxNzggMjAuODY2NEM5LjQ0NjA1IDIwLjk1NzIgOS41OTY5MyAyMS4wMDQxIDkuNzQ5OTMgMjEuMDA0MUM5LjgzNDY4IDIxLjAwNDEgOS45MjAxNCAyMC45ODk0IDEwLjAwMTkgMjAuOTYwMkwyMC41MDIgMTcuMjEwMUMyMC44MDA2IDE3LjEwNDQgMjEuMDAwMSAxNi44MjEzIDIxLjAwMDEgMTYuNTA0VjguMjUzOTJDMjEuMDAwMSA4LjAxNDY3IDIwLjg4NTMgNy43ODkyMiAyMC42OTEgNy42NDc0N0MyMC41NDU5IDcuNTQxNzIgMjAuMzY4OCA3LjQ5MjA1IDIwLjE5MyA3LjUwNTM4WlwiLGZpbGw6dH0pfSkpfX0sNDAyMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TdG9yZWZyb250SWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuU3RvcmVmcm9udEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMjBcIixoZWlnaHQ6XCIyMFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTUgM0M0LjQ0OCAzIDQgMy40NDggNCA0QzQgNC41NTIgNC40NDggNSA1IDVIMTlDMTkuNTUyIDUgMjAgNC41NTIgMjAgNEMyMCAzLjQ0OCAxOS41NTIgMyAxOSAzSDVaTTQuNjE3MTkgN0M0LjIzODE5IDcgMy44OTM2MSA3LjIxMzczIDMuNzI0NjEgNy41NTI3M0wyLjEwNTQ3IDEwLjc4OTFDMi4wMzU0NyAxMC45MjgxIDIgMTEuMDgxMyAyIDExLjIzNjNWMTJDMiAxMi41NTIgMi40NDggMTMgMyAxM1YxOUMzIDIwLjEwNSAzLjg5NSAyMSA1IDIxSDE5QzIwLjEwNSAyMSAyMSAyMC4xMDUgMjEgMTlWMTNDMjEuNTUyIDEzIDIyIDEyLjU1MiAyMiAxMlYxMS4yMzYzQzIyIDExLjA4MTMgMjEuOTY0NSAxMC45MjgxIDIxLjg5NDUgMTAuNzg5MUwyMC4yNzU0IDcuNTUyNzNDMjAuMTA2NCA3LjIxMzczIDE5Ljc2MTggNyAxOS4zODI4IDdINC42MTcxOVpNNiAxM0gxOEMxOC41NTIgMTMgMTkgMTMuNDQ4IDE5IDE0VjE4QzE5IDE4LjU1MiAxOC41NTIgMTkgMTggMTlINkM1LjQ0OCAxOSA1IDE4LjU1MiA1IDE4VjE0QzUgMTMuNDQ4IDUuNDQ4IDEzIDYgMTNaXCIsZmlsbDp0fSl9KSl9fSw3OTM3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LldvcmtzcGFjZUljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LldvcmtzcGFjZUljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4cykoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIscm9sZTpcImltZ1wifSxuLHtjaGlsZHJlbjpbKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTYuNzM4MTEgMi44MTI1SDMuNTMxMzdDMy4xMzQ0MiAyLjgxMjUgMi44MTI2MiAzLjEzNDMgMi44MTI2MiAzLjUzMTI1VjcuNTEyMDRDMi44MTI2MiA3LjkwOSAzLjEzNDQyIDguMjMwNzkgMy41MzEzNyA4LjIzMDc5SDYuNzM4MTFDNy4xMzUwNiA4LjIzMDc5IDcuNDU2ODYgNy45MDkgNy40NTY4NiA3LjUxMjA0VjMuNTMxMjVDNy40NTY4NiAzLjEzNDMgNy4xMzUwNiAyLjgxMjUgNi43MzgxMSAyLjgxMjVaXCIsZmlsbDp0fSksKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTEyLjE1NjUgNi4yNjc1OEg4Ljk0OTcxQzguNzUxMjMgNi4yNjc1OCA4LjU5MDMzIDYuNDI4NDggOC41OTAzMyA2LjYyNjk2VjExLjM4MThDOC41OTAzMyAxMS41ODAzIDguNzUxMjMgMTEuNzQxMiA4Ljk0OTcxIDExLjc0MTJIMTIuMTU2NUMxMi4zNTQ5IDExLjc0MTIgMTIuNTE1OCAxMS41ODAzIDEyLjUxNTggMTEuMzgxOFY2LjYyNjk2QzEyLjUxNTggNi40Mjg0OCAxMi4zNTQ5IDYuMjY3NTggMTIuMTU2NSA2LjI2NzU4WlwiLHN0cm9rZTp0LHN0cm9rZVdpZHRoOlwiMC43MTg3NTNcIn0pLCgwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xMi4xNTY0IDIuODEyNUg4Ljk0OTcxQzguNTUyNzUgMi44MTI1IDguMjMwOTYgMy4xMzQzIDguMjMwOTYgMy41MzEyNVY0LjQxNTg3QzguMjMwOTYgNC44MTI4MyA4LjU1Mjc1IDUuMTM0NjMgOC45NDk3MSA1LjEzNDYzSDEyLjE1NjRDMTIuNTUzNCA1LjEzNDYzIDEyLjg3NTIgNC44MTI4MyAxMi44NzUyIDQuNDE1ODdWMy41MzEyNUMxMi44NzUyIDMuMTM0MyAxMi41NTM0IDIuODEyNSAxMi4xNTY0IDIuODEyNVpcIixmaWxsOnR9KSwoMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNNi43Mzc5OCA5LjAwNDg4SDMuNTMxMjVDMy4xMzQzIDkuMDA0ODggMi44MTI1IDkuMzI2NjggMi44MTI1IDkuNzIzNjRWMTEuMzgyM0MyLjgxMjUgMTEuNzc5MyAzLjEzNDMgMTIuMTAxMSAzLjUzMTI1IDEyLjEwMTFINi43Mzc5OEM3LjEzNDk0IDEyLjEwMTEgNy40NTY3NCAxMS43NzkzIDcuNDU2NzQgMTEuMzgyM1Y5LjcyMzY0QzcuNDU2NzQgOS4zMjY2OCA3LjEzNDk0IDkuMDA0ODggNi43Mzc5OCA5LjAwNDg4WlwiLGZpbGw6dH0pXX0pKX19LDI3NzI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDM3OSksdCksbyhuKDQ3MTgpLHQpLG8obig3OTM3KSx0KSxvKG4oODMxMSksdCksbyhuKDU3MjkpLHQpLG8obig3Nzg4KSx0KSxvKG4oMzcwMyksdCksbyhuKDY3OTUpLHQpLG8obig4MjY1KSx0KSxvKG4oMTE3KSx0KSxvKG4oMTUzOSksdCksbyhuKDkyODUpLHQpLG8obig0MDIwKSx0KSxvKG4oNTI5KSx0KSxvKG4oMjQwMiksdCksbyhuKDIxNDcpLHQpLG8obig0ODI1KSx0KSxvKG4oNjQ0NyksdCksbyhuKDEyODEpLHQpLG8obig3NDI5KSx0KSxvKG4oOTk0MCksdCksbyhuKDEwMDIpLHQpfSwzMTE3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuSWNvbldpdGhCYWRnZT12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGE9byhuKDc1MTgpKSxsPW4oNzAwNikscz1uKDMxMzYpLGM9bigxMzM1KTt0Lkljb25XaXRoQmFkZ2U9ZT0+e3Zhcntjb3VudDp0PTAsbWF4Om59PWUsbz1yKGUsW1wiY291bnRcIixcIm1heFwiXSk7cmV0dXJuKDAsaS5qc3hzKSh1LHtjaGlsZHJlbjpbKDAsaS5qc3gpKGwuSWNvbixPYmplY3QuYXNzaWduKHt9LG8pKSx0PjAmJigwLGkuanN4KShmLHtjb3VudDp0LG1heDpufSldfSl9O2NvbnN0IHU9KDAsYS5kZWZhdWx0KShjLkJveClgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmAsZj0oMCxhLmRlZmF1bHQpKHMuQmFkZ2UpYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRyYW5zZm9ybTogc2NhbGUoNzAlKTtcbiAgcmlnaHQ6IC0keyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICB0b3A6IC0keyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmB9LDE0NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMzExNyksdCl9LDE5NDQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGFiZWw9dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPXIobig3NTE4KSksYT1uKDEzMzUpLGw9big3NzY5KSxzPW4oOTYzNCk7dC5MYWJlbD0oe2ljb246ZSx0ZXh0OnQsaGVscGVyVGV4dDpuLGh0bWxGb3I6cixpbmxpbmU6aX0pPT4oMCxvLmpzeHMpKGQsT2JqZWN0LmFzc2lnbih7aW5saW5lOml9LHtjaGlsZHJlbjpbKDAsby5qc3hzKShcImRpdlwiLE9iamVjdC5hc3NpZ24oe3N0eWxlOntkaXNwbGF5OlwiZmxleFwifX0se2NoaWxkcmVuOltcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UoKTplPygwLG8uanN4KShmLHtpY29uOmV9KTpudWxsLCgwLG8uanN4KSh1LE9iamVjdC5hc3NpZ24oe2FzOlwibGFiZWxcIixodG1sRm9yOnIsd2VpZ2h0OlwiYm9sZFwifSx7Y2hpbGRyZW46dH0pKV19KSksbiYmKDAsby5qc3gpKGMse2NoaWxkcmVuOm59KV19KSk7Y29uc3QgYz0oMCxpLmRlZmF1bHQpKGwuVGV4dClgXG4gIHNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuYCx1PSgwLGkuZGVmYXVsdCkobC5UZXh0KWBcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuYCxmPSgwLGkuZGVmYXVsdCkocy5JY29uKWBcbiAgbWFyZ2luLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH07XG4gIG1pbi13aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5zbWFsbH07XG4gIG1pbi1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuc21hbGx9O1xuICBhbGlnbi1zZWxmOiBjZW50ZXI7XG5gLGQ9KDAsaS5kZWZhdWx0KShhLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbi1ib3R0b206ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuXG4gICR7KHtpbmxpbmU6ZSx0aGVtZTp0fSk9PmUmJmBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgICAgbWFyZ2luLWxlZnQ6ICR7dC5weC5zbWFsbH07XFxuICAgICBmb250LXdlaWdodDogJHt0LmZvbnRXZWlnaHQubm9ybWFsfTtcXG4gIGB9XG5gfSw5MjM5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig4Mjc1KSx0KSxvKG4oNjkzKSx0KX0sODI3NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxvYWRlcj12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGE9byhuKDc1MTgpKSxsPW4oOTYzNCk7dC5Mb2FkZXI9KDAsYS5kZWZhdWx0KSgoZT0+e3ZhciB0PXIoZSxbXSk7cmV0dXJuKDAsaS5qc3gpKGwuSWNvbixPYmplY3QuYXNzaWduKHt9LHQse2NoaWxkcmVuOigwLGkuanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTAwJVwiLGhlaWdodDpcIjEwMCVcIix2aWV3Qm94OlwiMCAwIDM4IDM4XCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwifSx7Y2hpbGRyZW46KDAsaS5qc3gpKFwiZ1wiLE9iamVjdC5hc3NpZ24oe2ZpbGw6XCJub25lXCIsZmlsbFJ1bGU6XCJldmVub2RkXCJ9LHtjaGlsZHJlbjooMCxpLmpzeHMpKFwiZ1wiLE9iamVjdC5hc3NpZ24oe3RyYW5zZm9ybTpcInRyYW5zbGF0ZSgxIDEpXCIsc3Ryb2tlV2lkdGg6XCIyXCJ9LHtjaGlsZHJlbjpbKDAsaS5qc3gpKFwiY2lyY2xlXCIse3N0cm9rZU9wYWNpdHk6XCIuNVwiLGN4OlwiMThcIixjeTpcIjE4XCIscjpcIjE4XCJ9KSwoMCxpLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZDpcIk0zNiAxOGMwLTkuOTQtOC4wNi0xOC0xOC0xOFwifSx7Y2hpbGRyZW46KDAsaS5qc3gpKFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDE4IDE4XCIsdG86XCIzNjAgMTggMThcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifSl9KSldfSkpfSkpfSkpfSkpfSkpYGB9LDY5MzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGk9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH0sYT10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk9wZW5maW5Mb2FkZXI9dm9pZCAwO2NvbnN0IGw9big1ODkzKSxzPWkobig3NTE4KSksYz1uKDk2MzQpO3QuT3BlbmZpbkxvYWRlcj0oMCxzLmRlZmF1bHQpKChlPT57dmFyIHQ9YShlLFtdKTtyZXR1cm4oMCxsLmpzeCkoYy5JY29uLE9iamVjdC5hc3NpZ24oe30sdCx7Y2hpbGRyZW46KDAsbC5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTAwJVwiLGhlaWdodDpcIjEwMCVcIix2aWV3Qm94OlwiMCAwIDE4IDE4XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LHtjaGlsZHJlbjpbKDAsbC5qc3gpKHUse2Q6XCJcXG4gICAgICAgICAgICBNIDE3LjEyMjIgNi44ODdcXG4gICAgICAgICAgICBDIDE3LjAxNDEgNi43Nzg4NyAxNi44OTggNi42NzkxMSAxNi43NzQ4IDYuNTg4NTZcXG4gICAgICAgICAgICBMIDE2LjcyOTUgNi41NTcxNVxcbiAgICAgICAgICAgIEMgMTYuNzAzNSA2LjUzOTAzIDE2LjY3ODEgNi41MjAzIDE2LjY1MTUgNi41MDI3OFxcbiAgICAgICAgICAgIEMgMTYuNjI1IDYuNDg1MjYgMTYuNTk0MSA2LjQ2NjUzIDE2LjU2NTcgNi40NDkwMVxcbiAgICAgICAgICAgIEwgMTYuNTI1OSA2LjQyNDI0XFxuICAgICAgICAgICAgQyAxNi40OTAyIDYuNDAzMSAxNi40NTQgNi4zODMxNiAxNi40MTc3IDYuMzYzODNcXG4gICAgICAgICAgICBMIDE2LjM5NjYgNi4zNTIzNlxcbiAgICAgICAgICAgIEMgMTUuOTY3OCA2LjEyNzQyIDE1LjQ5MSA2LjAwOTY4IDE1LjAwNjggNi4wMDkyMlxcbiAgICAgICAgICAgIEMgMTQuMjEwMSA2LjAwODU4IDEzLjQ0NjMgNS42OTE0OSAxMi44ODM0IDUuMTI3NzJcXG4gICAgICAgICAgICBDIDEyLjMyMDUgNC41NjM5NSAxMi4wMDQ4IDMuNzk5NzEgMTIuMDA1NiAzLjAwMzE0XFxuICAgICAgICAgICAgQyAxMi4wMDc4IDEuNzkwNjYgMTEuMjc5MiAwLjY5NjI2MyAxMC4xNTk2IDAuMjMwMjkzXFxuICAgICAgICAgICAgQyA5LjA0MDAyIC0wLjIzNTY3NiA3Ljc0OTkyIDAuMDE4NTU5MiA2Ljg5MDkzIDAuODc0NDQxXFxuICAgICAgICAgICAgQyA2LjAzMTk0IDEuNzMwMzIgNS43NzMyMyAzLjAxOTI4IDYuMjM1NDYgNC4xNDAyNFxcbiAgICAgICAgICAgIEMgNi42OTc2OCA1LjI2MTE5IDcuNzg5OCA1Ljk5MzM3IDkuMDAyNTEgNS45OTUzMlxcbiAgICAgICAgICAgIEMgOS43OTkyNCA1Ljk5NTk2IDEwLjU2MzEgNi4zMTMwNSAxMS4xMjU5IDYuODc2ODJcXG4gICAgICAgICAgICBDIDExLjY4ODggNy40NDA1OSAxMi4wMDQ2IDguMjA0ODQgMTIuMDAzOCA5LjAwMTRcXG4gICAgICAgICAgICBDIDEyLjAwMzEgOS43OTc5NyAxMS42ODYgMTAuNTYxNiAxMS4xMjIxIDExLjEyNDRcXG4gICAgICAgICAgICBDIDEwLjU1ODIgMTEuNjg3MSA5Ljc5MzggMTIuMDAyOCA4Ljk5NzA4IDEyLjAwMlxcbiAgICAgICAgICAgIEMgOC4yMDA5NiAxMi4wMDI3IDcuNDM3MjcgMTEuNjg2NyA2Ljg3NDM4IDExLjEyMzhcXG4gICAgICAgICAgICBDIDYuMzExNSAxMC41NjEgNS45OTU2NCA5Ljc5NzM2IDUuOTk2NDQgOS4wMDE0XFxuICAgICAgICAgICAgQyA1Ljk5NjQ0IDcuMzQ1ODYgNC42NTQwOSA2LjAwMzc4IDIuOTk4MjIgNi4wMDM3OFxcbiAgICAgICAgICAgIEMgMS4zNDIzNSA2LjAwMzc4IDAgNy4zNDU4NiAwIDkuMDAxNFxcbiAgICAgICAgICAgIEMgMCAxMC42NTY5IDEuMzQyMzUgMTEuOTk5IDIuOTk4MjIgMTEuOTk5XFxuICAgICAgICAgICAgQyA0LjY1NDA5IDExLjk5OSA1Ljk5NjQ0IDEzLjM0MTEgNS45OTY0NCAxNC45OTY2XFxuICAgICAgICAgICAgQyA1Ljk5NjQ0IDE2LjY1NTMgNy4zNDEzNiAxOCA5LjAwMDQgMThcXG4gICAgICAgICAgICBDIDEwLjY1OTQgMTggMTIuMDA0NCAxNi42NTUzIDEyLjAwNDQgMTQuOTk2NlxcbiAgICAgICAgICAgIEMgMTIuMDA0NCAxMy4zNDExIDEzLjM0NjcgMTEuOTk5IDE1LjAwMjYgMTEuOTk5XFxuICAgICAgICAgICAgQyAxNS41Mzc5IDExLjk5OTQgMTYuMDYzNSAxMS44NTYzIDE2LjUyNDcgMTEuNTg0NlxcbiAgICAgICAgICAgIEMgMTYuNTY0NSAxMS41NjEgMTYuNjAzOCAxMS41MzYzIDE2LjY0NTUgMTEuNTEwOVxcbiAgICAgICAgICAgIEwgMTYuNjU0IDExLjUwNTVcXG4gICAgICAgICAgICBDIDE2LjY5MDIgMTEuNDgxMyAxNi43MjY1IDExLjQ1NTkgMTYuNzYxNSAxMS40MzA1XFxuICAgICAgICAgICAgTCAxNi43NzcyIDExLjQxOTdcXG4gICAgICAgICAgICBDIDE2LjgwODYgMTEuMzk2NyAxNi44Mzc2IDExLjM3MiAxNi44NzA5IDExLjM0NzJcXG4gICAgICAgICAgICBMIDE2Ljg5NzUgMTEuMzI2NlxcbiAgICAgICAgICAgIEMgMTYuOTI2NSAxMS4zMDMxIDE2Ljk1NDMgMTEuMjc4MyAxNi45ODI3IDExLjI1MzVcXG4gICAgICAgICAgICBMIDE3LjAxMzUgMTEuMjI3XFxuICAgICAgICAgICAgQyAxNy4wNDk3IDExLjE5NDMgMTcuMDg1NCAxMS4xNjA1IDE3LjEyMDQgMTEuMTI1NVxcbiAgICAgICAgICAgIEwgMTcuMTI1OSAxMS4xMjA2XFxuICAgICAgICAgICAgQyAxNy4yNTUzIDEwLjk5MDYgMTcuMzcyNiAxMC44NDkxIDE3LjQ3NjMgMTAuNjk3OFxcbiAgICAgICAgICAgIEMgMTcuNDk4OSAxMC42NjUxIDE3LjUyMDYgMTAuNjMyMSAxNy41NDE2IDEwLjU5ODdcXG4gICAgICAgICAgICBDIDE4LjI4NDMgOS40MTUgMTguMTEwNCA3Ljg3NTIgMTcuMTIyMiA2Ljg4N1pcXG4gICAgICAgICAgICBcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KSwoMCxsLmpzeCkoZix7Y3g6XCI5XCIsY3k6XCIzXCIscjpcIjIuOVwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixhbmdsZTowfSksKDAsbC5qc3gpKGYse2N4OlwiMTVcIixjeTpcIjlcIixyOlwiMi43NVwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixhbmdsZTotOTB9KSwoMCxsLmpzeCkoZix7Y3g6XCI5XCIsY3k6XCIxNVwiLHI6XCIyLjVcIixmaWxsOlwiY3VycmVudENvbG9yXCIsYW5nbGU6LTE4MH0pLCgwLGwuanN4KShmLHtjeDpcIjNcIixjeTpcIjlcIixyOlwiMi4yNVwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixhbmdsZTotMjcwfSldfSkpfSkpfSkpYGA7Y29uc3QgdT1zLmRlZmF1bHQucGF0aGBcbiAgQGtleWZyYW1lcyBsb2dvQW5pbWF0aW9uIHtcbiAgICAwJSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICAyNSUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgMzUlIHtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICAgIDYwJSB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgICA3NSUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgMTAwJSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgfVxuXG4gIGFuaW1hdGlvbjogbG9nb0FuaW1hdGlvbiAycyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmAsZj1zLmRlZmF1bHQuY2lyY2xlYFxuICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XG4gIGFuaW1hdGlvbjogJHsoe2FuZ2xlOmV9KT0+KGU9PnMua2V5ZnJhbWVzYFxuICAgIDAlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gICAgMjUlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgMzAlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNTAlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKCR7ZX1kZWcpO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNzAlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0zNjBkZWcpO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNzUlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0zNjBkZWcpO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gICAgMTAwJSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMzYwZGVnKTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuYCkoZSl9IDJzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYH0sNzAzMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5WYWxpZGF0aW9uRXJyb3I9dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPXIobig3NTE4KSksYT1uKDc3NjkpLGw9big5NjM0KTt0LlZhbGlkYXRpb25FcnJvcj0oe2NoaWxkcmVuOmV9KT0+KDAsby5qc3hzKShzLHtjaGlsZHJlbjpbKDAsby5qc3gpKGwuSWNvbix7aWNvbjpcIkV4Y2xhbWF0aW9uQ2lyY2xlZEZpbGxlZEljb25cIn0pLCgwLG8uanN4KShjLHtjaGlsZHJlbjplfSldfSk7Y29uc3Qgcz1pLmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW4tdG9wOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmAsYz0oMCxpLmRlZmF1bHQpKGEuVGV4dClgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuYH0sMzU4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU3R5bGVkSW5wdXRGaWVsZD10LkJhc2VJbnB1dD12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGE9big2Njg5KSxsPW8obig3NTE4KSkscz1uKDEzMzUpLGM9big5NTA3KSx1PW4oNzc2OSksZj1uKDcwMzApLGQ9bigxOTQ0KTt0LkJhc2VJbnB1dD0oMCxhLmZvcndhcmRSZWYpKCgoZSxuKT0+e3ZhcntjbGFzc05hbWU6byxyZW5kZXJJbnB1dDphLG1lc3NhZ2U6bCxsYWJlbDpzLHN0YXR1czpjLG5hbWU6dSxpY29uOnYsdHlwZTptPVwidGV4dFwiLGhlbHBlclRleHQ6QyxwbGFjZWhvbGRlcjp5fT1lLHc9cihlLFtcImNsYXNzTmFtZVwiLFwicmVuZGVySW5wdXRcIixcIm1lc3NhZ2VcIixcImxhYmVsXCIsXCJzdGF0dXNcIixcIm5hbWVcIixcImljb25cIixcInR5cGVcIixcImhlbHBlclRleHRcIixcInBsYWNlaG9sZGVyXCJdKTtjb25zdCBiPVwiY2hlY2tib3hcIj09PW18fFwicmFkaW9cIj09PW07cmV0dXJuKDAsaS5qc3hzKShnLE9iamVjdC5hc3NpZ24oe2ZsZXhEaXJlY3Rpb246XCJjb2x1bW5cIixhbGlnbkl0ZW1zOlwiZmxleC1zdGFydFwifSx7Y2hpbGRyZW46WygwLGkuanN4cykocCxPYmplY3QuYXNzaWduKHtpbmxpbmU6Yn0se2NoaWxkcmVuOlshIXMmJigwLGkuanN4KShkLkxhYmVsLHtpbmxpbmU6YixpY29uOnYsdGV4dDpzLGhlbHBlclRleHQ6QyxodG1sRm9yOnV9KSwhIWEmJmEoT2JqZWN0LmFzc2lnbih7bmFtZTp1LHN0YXR1czpjLHR5cGU6bX0sdykpLCFhJiYoMCxpLmpzeCkodC5TdHlsZWRJbnB1dEZpZWxkLE9iamVjdC5hc3NpZ24oe2NsYXNzTmFtZTpvLG5hbWU6dSxwbGFjZWhvbGRlcjp5LHN0YXR1czpjLHR5cGU6bX0sdyx7cmVmOm59KSldfSkpLGwmJihcImNyaXRpY2FsXCI9PT1jPygwLGkuanN4KShmLlZhbGlkYXRpb25FcnJvcix7Y2hpbGRyZW46bH0pOigwLGkuanN4KShoLE9iamVjdC5hc3NpZ24oe3N0YXR1czpjfSx7Y2hpbGRyZW46bH0pKSldfSkpfSkpLHQuQmFzZUlucHV0LmRpc3BsYXlOYW1lPVwiQmFzZUlucHV0XCI7Y29uc3QgcD0oMCxsLmRlZmF1bHQpKHMuQm94KWBcbiAgYWxpZ24taXRlbXM6ICR7KHtpbmxpbmU6ZX0pPT5lP1wiY2VudGVyXCI6XCJmbGV4LXN0YXJ0XCJ9O1xuICBmbGV4LWRpcmVjdGlvbjogJHsoe2lubGluZTplfSk9PmU/XCJyb3ctcmV2ZXJzZVwiOlwiY29sdW1uXCJ9O1xuICBqdXN0aWZ5LWNvbnRlbnQ6ICR7KHtpbmxpbmU6ZX0pPT5lP1wiZmxleC1lbmRcIjpcImZsZXgtc3RhcnRcIn07XG4gIHdpZHRoOiAxMDAlO1xuYCxoPSgwLGwuZGVmYXVsdCkodS5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplLHN0YXR1czp0fSk9PigwLGMuZ2V0U3RhdHVzQ29sb3IpKGUsdCxcInRleHRIZWxwXCIpfTtcbmAsZz0oMCxsLmRlZmF1bHQpKHMuQm94KWBcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbmA7dC5TdHlsZWRJbnB1dEZpZWxkPWwuZGVmYXVsdC5pbnB1dGBcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxjLmdldFN0YXR1c0NvbG9yKShlLHQsYy5QYWxldHRlLmlucHV0Qm9yZGVyKX07XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgYm94LXNoYWRvdzogJHsoe3RoZW1lOmV9KT0+ZS5zaGFkb3cuYmFzZX07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRDb2xvcn07XG4gIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gJHtlLnB4LmJhc2V9YH07XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuICB3aWR0aDogMTAwJTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsYy5nZXRTdGF0dXNDb2xvcikoZSx0LGMuUGFsZXR0ZS5pbnB1dEZvY3VzZWQpfTtcbiAgfVxuXG4gICY6ZGlzYWJsZWQge1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIH1cblxuICAmOmRpc2FibGVkOjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgaGFjayB0byBpbnZlcnQgdGhlIGNhbGVuZGFyIGljb24uIFRoaXMgb25seSB3b3JrcyBpbiBkYXJrIG1vZGUuXG4gICAqIFVudGlsIGVpdGhlciBsaWdodCBtb2RlIGlzIGEgdGhpbmcgb3Igd2UgZ2V0IGEgZGF0ZXRpbWUgcGlja2VyIGRlc2lnbiwgdGhpcyB3aWxsIGRvLlxuICAgKi9cblxuICA6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7XG4gICAgZmlsdGVyOiBpbnZlcnQoMSk7XG4gIH1cbmB9LDg4Nzg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDM1OCksdCl9LDE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9KSxpPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZyKHQsZSxuKTtyZXR1cm4gbyh0LGUpLHR9LGE9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbD10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNoZWNrYm94PXZvaWQgMDtjb25zdCBzPW4oNTg5MyksYz1pKG4oNjY4OSkpLHU9bChuKDc1MTgpKSxmPW4oODg3OCksZD1uKDk2MzQpLHA9big5NTA3KTt0LkNoZWNrYm94PWMuZm9yd2FyZFJlZigoKGUsdCk9Pnt2YXJ7c3RhdHVzOm59PWUscj1hKGUsW1wic3RhdHVzXCJdKTtyZXR1cm4oMCxzLmpzeCkoZi5CYXNlSW5wdXQsT2JqZWN0LmFzc2lnbih7fSxyLHt0eXBlOlwiY2hlY2tib3hcIixzdGF0dXM6bixyZW5kZXJJbnB1dDplPT57dmFyIHI9YShlLFtdKTtyZXR1cm4oMCxzLmpzeHMpKGgse2NoaWxkcmVuOlsoMCxzLmpzeCkobSxPYmplY3QuYXNzaWduKHtyZWY6dCxpZDpyLm5hbWUsdHlwZTpcImNoZWNrYm94XCJ9LHIpKSwoMCxzLmpzeCkoZyxPYmplY3QuYXNzaWduKHtzdGF0dXM6bn0se2NoaWxkcmVuOigwLHMuanN4KSh2LHt9KX0pKV19KX19KSl9KSksdC5DaGVja2JveC5kaXNwbGF5TmFtZT1cIkNoZWNrYm94XCI7Y29uc3QgaD11LmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmAsZz11LmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxwLmdldFN0YXR1c0NvbG9yKShlLHQsXCJ0ZXh0RGVmYXVsdFwiKX07XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5gLHY9KDAsdS5kZWZhdWx0KShkLkljb24pLmF0dHJzKHtpY29uOlwiQ2hlY2tJY29uXCIsc2l6ZTpcInNtYWxsXCJ9KWBcbiAgb3BhY2l0eTogMDtcbmAsbT11LmRlZmF1bHQuaW5wdXRgXG4gIG9wYWNpdHk6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICY6Y2hlY2tlZCArICR7ZytcIiBcIit2fSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gICY6aG92ZXIgKyAke2d9IHtcbiAgICBib3gtc2hhZG93OiAwIDAgMXB4IDFweCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRGb2N1c2VkfTtcbiAgfVxuXG4gICY6Zm9jdXMgKyAke2d9IHtcbiAgICBib3gtc2hhZG93OiAwIDAgMXB4IDFweCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRGb2N1c2VkfTtcbiAgfVxuXG4gICY6ZGlzYWJsZWQge1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIH1cblxuICAmOmRpc2FibGVkICsgJHtnfSB7XG4gICAgb3BhY2l0eTogMC41O1xuICB9XG5gfSw4MDUxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigxKSx0KX0sOTAyMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGk9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGVja2JveEdyb3VwPXZvaWQgMDtjb25zdCBhPW4oNTg5MyksbD1pKG4oNjY4OSkpLHM9aShuKDc1MTgpKSxjPW4oMTMzNSksdT1uKDc3NjkpLGY9big4MDUxKSxkPW4oNzAzMCk7dC5DaGVja2JveEdyb3VwPSh7ZGlzYWJsZWQ6ZSxnYXA6dD1cInNtYWxsXCIsaGVscGVyVGV4dDpuLGxhYmVsOnIsbWVzc2FnZTpvLGNoaWxkcmVuOmksdmFsaWRhdGlvbkVycm9yTWVzc2FnZTpzLHZhbHVlczpjLG9uQ2hhbmdlOnV9KT0+e2NvbnN0W3ksd109bC51c2VTdGF0ZShudWxsIT1jP2M6W10pLGI9ZT0+e2NvbnN0IHQ9ZS50YXJnZXQudmFsdWUsbj15LmluY2x1ZGVzKHQpP3kuZmlsdGVyKChlPT5lIT09dCkpOlsuLi55LHRdO3cobiksdSYmdShuKX07cmV0dXJuKDAsYS5qc3hzKSh2LHtjaGlsZHJlbjpbciYmKDAsYS5qc3hzKShwLHtjaGlsZHJlbjpbKDAsYS5qc3gpKGgsT2JqZWN0LmFzc2lnbih7d2VpZ2h0OlwiYm9sZFwifSx7Y2hpbGRyZW46cn0pKSxuJiYoMCxhLmpzeCkoZyx7Y2hpbGRyZW46bn0pXX0pLCgwLGEuanN4KShtLE9iamVjdC5hc3NpZ24oe2dhcDp0fSx7Y2hpbGRyZW46bC5DaGlsZHJlbi5tYXAoaSwodD0+e2NvbnN0IG49dDtyZXR1cm4gbi50eXBlPT09Zi5DaGVja2JveD9sLmNsb25lRWxlbWVudChuLHtkaXNhYmxlZDplLG9uQ2hhbmdlOmIsY2hlY2tlZDp5LmluY2x1ZGVzKG4ucHJvcHMudmFsdWUpfSk6bn0pKX0pKSwheS5sZW5ndGgmJnMmJigwLGEuanN4KShkLlZhbGlkYXRpb25FcnJvcix7Y2hpbGRyZW46c30pLG8/KDAsYS5qc3gpKEMsT2JqZWN0LmFzc2lnbih7ZGlzYWJsZWQ6ZX0se2NoaWxkcmVuOm99KSk6bnVsbF19KX07Y29uc3QgcD0oMCxzLmRlZmF1bHQpKGMuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWFyZ2luLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5gLGg9KDAscy5kZWZhdWx0KSh1LlRleHQpYFxuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbmAsZz0oMCxzLmRlZmF1bHQpKHUuVGV4dClgXG4gIHNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuYCx2PSgwLHMuZGVmYXVsdCkoYy5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogbWF4LWNvbnRlbnQ7XG5gLG09KDAscy5kZWZhdWx0KShjLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xuYCxDPSgwLHMuZGVmYXVsdCkodS5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyfTtcbiAgbWFyZ2luLXRvcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcblxuICAkeyh7ZGlzYWJsZWQ6ZX0pPT5lJiZzLmNzc2BcbiAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gICAgYH1cbmB9LDQxNjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDkwMjIpLHQpfSw5MzY4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRGF0ZUlucHV0PXZvaWQgMDtjb25zdCBpPW4oNTg5MyksYT1uKDY2ODkpLGw9byhuKDc1MTgpKSxzPW4oOTYzNCksYz1uKDEzMzUpLHU9big4ODc4KTt0LkRhdGVJbnB1dD0oMCxhLmZvcndhcmRSZWYpKCgoZSx0KT0+e3Zhcnt2YWx1ZTpuPVwiXCIsdHlwZTpvPVwiZGF0ZVwiLGV4cGFuZGVkOmw9ITEsb25DaGFuZ2U6c309ZSxjPXIoZSxbXCJ2YWx1ZVwiLFwidHlwZVwiLFwiZXhwYW5kZWRcIixcIm9uQ2hhbmdlXCJdKTtjb25zdFtkLHBdPSgwLGEudXNlU3RhdGUpKG4pO3JldHVybigwLGEudXNlRWZmZWN0KSgoKCk9PnAobikpLFtdKSwoMCxpLmpzeCkodS5CYXNlSW5wdXQsT2JqZWN0LmFzc2lnbih7dHlwZTpvfSxjLHtyZW5kZXJJbnB1dDplPT57dmFyIG49cihlLFtdKTtyZXR1cm4oMCxpLmpzeCkoZixPYmplY3QuYXNzaWduKHtyZWY6dCx0eXBlOm8sb25DaGFuZ2U6ZT0+e2NvbnN0e3ZhbHVlOnR9PWUudGFyZ2V0O3QmJnAodCksbnVsbD09c3x8cyhlKX0sdmFsdWU6ZCxleHBhbmRlZDpsfSxuKSl9fSkpfSkpLHQuRGF0ZUlucHV0LmRpc3BsYXlOYW1lPVwiRGF0ZUlucHV0XCI7Y29uc3QgZj0oMCxhLmZvcndhcmRSZWYpKCgoZSx0KT0+e3Zhcnt0eXBlOm4sZXhwYW5kZWQ6byxvbkV4cGFuZDphfT1lLGw9cihlLFtcInR5cGVcIixcImV4cGFuZGVkXCIsXCJvbkV4cGFuZFwiXSk7cmV0dXJuKDAsaS5qc3hzKShkLHtjaGlsZHJlbjpbKDAsaS5qc3gpKGgse2NoaWxkcmVuOigwLGkuanN4KShzLkljb24se2ljb246XCJ0aW1lXCI9PT1uP1wiQ2xvY2tJY29uXCI6XCJDYWxlbmRhckljb25cIn0pfSksKDAsaS5qc3gpKHYsT2JqZWN0LmFzc2lnbih7cmVmOnQsdHlwZTpuLG9uS2V5RG93bjplPT57XCIgXCI9PT1lLmtleSYmZS5wcmV2ZW50RGVmYXVsdCgpfX0sbCkpLCgwLGkuanN4KShnLE9iamVjdC5hc3NpZ24oe2ZsZXhEaXJlY3Rpb246XCJjb2x1bW5cIixkaXNhYmxlZDpsLmRpc2FibGVkLG9uQ2xpY2s6YX0se2NoaWxkcmVuOigwLGkuanN4KShzLkljb24se2ljb246bz9cIkNoZXZyb25VcEljb25cIjpcIkNoZXZyb25Eb3duSWNvblwifSl9KSldfSl9KSk7Zi5kaXNwbGF5TmFtZT1cIlN0eWxlZERhdGVJbnB1dFwiO2NvbnN0IGQ9bC5kZWZhdWx0LmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIHdpZHRoOiAxMDAlO1xuYCxwPSgwLGwuZGVmYXVsdCkoYy5Cb3gpYFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDFweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpO1xuYCxoPSgwLGwuZGVmYXVsdCkocClgXG4gIGxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbmAsZz0oMCxsLmRlZmF1bHQpKHApYFxuICByaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIHBvaW50ZXItZXZlbnRzOiAkeyh7ZGlzYWJsZWQ6ZX0pPT5lP1wibm9uZVwiOnZvaWQgMH07XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgcGFkZGluZy1sZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmAsdj0oMCxsLmRlZmF1bHQpKHUuU3R5bGVkSW5wdXRGaWVsZClgXG4gIGFwcGVhcmFuY2U6IHRleHRmaWVsZDtcbiAgcGFkZGluZy1yaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC54eHhsYXJnZX07XG4gIHBhZGRpbmctbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC54eHhsYXJnZX07XG4gIDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3Ige1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgfVxuYH0sOTY1NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTM2OCksdCl9LDE5Nzg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDY4ODQpLHQpfSw2ODg0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTnVtYmVySW5wdXQ9dC5EaXJlY3Rpb249dm9pZCAwO2NvbnN0IGk9big1ODkzKSxhPW4oNjY4OSksbD1vKG4oNzUxOCkpLHM9big5NjM0KSxjPW4oMTMzNSksdT1uKDg4NzgpO3ZhciBmOyFmdW5jdGlvbihlKXtlW2UuVXA9MV09XCJVcFwiLGVbZS5Eb3duPS0xXT1cIkRvd25cIn0oZj10LkRpcmVjdGlvbnx8KHQuRGlyZWN0aW9uPXt9KSksdC5OdW1iZXJJbnB1dD0oMCxhLmZvcndhcmRSZWYpKCgoZSx0KT0+e3ZhcnttaW46bixtYXg6byxzdGVwOmE9MSxvblRha2VTdGVwOmwsdmFsdWU6c309ZSxjPXIoZSxbXCJtaW5cIixcIm1heFwiLFwic3RlcFwiLFwib25UYWtlU3RlcFwiLFwidmFsdWVcIl0pO3JldHVybigwLGkuanN4KSh1LkJhc2VJbnB1dCxPYmplY3QuYXNzaWduKHt0eXBlOlwibnVtYmVyXCJ9LGMse3JlbmRlcklucHV0OmU9Pnt2YXIgdT1yKGUsW10pO3JldHVybigwLGkuanN4KShkLE9iamVjdC5hc3NpZ24oe3ByZXBlbmRJY29uOmMucHJlcGVuZEljb24scHJlcGVuZFN0cmluZzpjLnByZXBlbmRTdHJpbmcscmVmOnQsb25JbmNyZW1lbnQ6KCk9PmwmJmwoZi5VcCxhKSxvbkRlY3JlbWVudDooKT0+bCYmbChmLkRvd24sYSksbWluOm4sbWF4Om8sc3RlcDphfSx1LHtwbGFjZWhvbGRlcjpjLnBsYWNlaG9sZGVyLHZhbHVlOnMsXCJhcmlhLXZhbHVlbm93XCI6cyxcImFyaWEtdmFsdWVtaW5cIjpuLFwiYXJpYS12YWx1ZW1heFwiOm99KSl9fSkpfSkpLHQuTnVtYmVySW5wdXQuZGlzcGxheU5hbWU9XCJOdW1iZXJJbnB1dFwiO2NvbnN0IGQ9KDAsYS5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXJ7b25JbmNyZW1lbnQ6bixvbkRlY3JlbWVudDpvLHByZXBlbmRJY29uOmwscHJlcGVuZFN0cmluZzpjfT1lLHU9cihlLFtcIm9uSW5jcmVtZW50XCIsXCJvbkRlY3JlbWVudFwiLFwicHJlcGVuZEljb25cIixcInByZXBlbmRTdHJpbmdcIl0pO2NvbnN0IGY9KGUsdCk9PntcIkVudGVyXCIhPT1lLmtleSYmXCIgXCIhPT1lLmtleXx8KGUucHJldmVudERlZmF1bHQoKSx0P24oKTpvKCkpfSxkPSgwLGEudXNlUmVmKShudWxsKSxbQyx5XT0oMCxhLnVzZVN0YXRlKSgwKTtyZXR1cm4oMCxhLnVzZUVmZmVjdCkoKCgpPT57ZC5jdXJyZW50P3koZC5jdXJyZW50Lm9mZnNldFdpZHRoKTp5KDApfSksW2QuY3VycmVudCxsLGNdKSwoMCxpLmpzeHMpKHAse2NoaWxkcmVuOlsoISFsfHwhIWMpJiYoMCxpLmpzeHMpKGgsT2JqZWN0LmFzc2lnbih7aGFzSWNvbjohIWwscmVmOmQsYWxpZ25JdGVtczpcImNlbnRlclwiLGp1c3RpZnlDb250ZW50OlwiY2VudGVyXCJ9LHtjaGlsZHJlbjpbbCYmKDAsaS5qc3gpKHMuSWNvbix7aWNvbjpsLHNpemU6XCJiYXNlXCJ9KSxjJiYhbCYmY119KSksKDAsaS5qc3gpKG0sT2JqZWN0LmFzc2lnbih7cHJlcGVuZENvbnRhaW5lcldpZHRoOkMscmVmOnR9LHUpKSwoMCxpLmpzeHMpKGcsT2JqZWN0LmFzc2lnbih7ZmxleERpcmVjdGlvbjpcImNvbHVtblwiLGRpc2FibGVkOnUuZGlzYWJsZWR9LHtjaGlsZHJlbjpbKDAsaS5qc3gpKHYsT2JqZWN0LmFzc2lnbih7b25DbGljazpuLG9uS2V5RG93bjplPT5mKGUsITApLGRpc2FibGVkOnUuZGlzYWJsZWQsXCJhcmlhLWxhYmVsXCI6XCJJbmNyZW1lbnQgdmFsdWVcIix0YWJJbmRleDowfSx7Y2hpbGRyZW46KDAsaS5qc3gpKHMuSWNvbix7aWNvbjpcIlRyaWFuZ2xlVXBJY29uXCJ9KX0pKSwoMCxpLmpzeCkodixPYmplY3QuYXNzaWduKHtvbktleURvd246ZT0+ZihlKSxvbkNsaWNrOm8sXCJhcmlhLWxhYmVsXCI6XCJEZWNyZW1lbnQgdmFsdWVcIixkaXNhYmxlZDp1LmRpc2FibGVkLHRhYkluZGV4OjB9LHtjaGlsZHJlbjooMCxpLmpzeCkocy5JY29uLHtpY29uOlwiVHJpYW5nbGVEb3duSWNvblwifSl9KSldfSkpXX0pfSkpO2QuZGlzcGxheU5hbWU9XCJTdHlsZWROdW1iZXJJbnB1dFwiO2NvbnN0IHA9bC5kZWZhdWx0LmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIHdpZHRoOiAxMDAlO1xuYCxoPSgwLGwuZGVmYXVsdCkoYy5Cb3gpYFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDFweDtcbiAgdG9wOiAxcHg7XG4gIHdpZHRoOiAkeyh7dGhlbWU6ZSxoYXNJY29uOnR9KT0+dD9lLnB4Lnh4bGFyZ2U6XCJmaXQtY29udGVudFwifTtcbiAgcGFkZGluZzogMCAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpO1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnJhZGl1cy5zbWFsbH0gMCAwICR7ZS5yYWRpdXMuc21hbGx9YH07XG5gLGc9KDAsbC5kZWZhdWx0KShjLkJveClgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDFweDtcbiAgdG9wOiAxcHg7XG4gIGdhcDogMXB4O1xuICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDJweCk7XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5yYWRpdXMuc21hbGx9ICR7ZS5yYWRpdXMuc21hbGx9IDBgfTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICBwb2ludGVyLWV2ZW50czogJHsoe2Rpc2FibGVkOmV9KT0+ZT9cIm5vbmVcIjp2b2lkIDB9O1xuYCx2PSgwLGwuZGVmYXVsdCkoYy5Cb3gpYFxuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIHBhZGRpbmc6IDAgJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgaGVpZ2h0OiA1MCU7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gIGNvbG9yOiAkeyh7ZGlzYWJsZWQ6ZSx0aGVtZTp0fSk9PmU/dC5wYWxldHRlLnRleHRIZWxwOnQucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gIH1cblxuICAmOmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Q29sb3J9O1xuICB9XG5gLG09KDAsbC5kZWZhdWx0KSh1LlN0eWxlZElucHV0RmllbGQpYFxuICBhcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIHBhZGRpbmctbGVmdDogJHsoe3ByZXBlbmRDb250YWluZXJXaWR0aDplfSk9PmAke2UrMTB9cHhgfTtcblxuICA6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gIDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gIH1cbmB9LDUyMTU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDIyNTUpLHQpfSwyMjU1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksaT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJhZGlvR3JvdXA9dm9pZCAwO2NvbnN0IGE9big1ODkzKSxsPWkobig2Njg5KSkscz1pKG4oNzUxOCkpLGM9bigxMzM1KSx1PW4oNzc2OSksZj1uKDI1NjUpLGQ9big3MDMwKTt0LlJhZGlvR3JvdXA9KHtkaXJlY3Rpb246ZT1cImNvbHVtblwiLGxhYmVsOnQsZGlzYWJsZWQ6bixsYWJlbFNpZGU6cj1cInJpZ2h0XCIsZ2FwOm89XCJzbWFsbFwiLG1lc3NhZ2U6aSxoZWxwZXJUZXh0OnMsbmFtZTpjLGNoaWxkcmVuOnUsdmFsaWRhdGlvbkVycm9yTWVzc2FnZTp5LG9uQ2hhbmdlOncsdmFsdWU6Yn0pPT57Y29uc3RbeCxfXT1sLnVzZVN0YXRlKGIpLE89ZT0+e18oZS50YXJnZXQudmFsdWUpLHcmJncoZSl9O3JldHVybiBsLnVzZUVmZmVjdCgoKCk9PntfKGIpfSksW2JdKSwoMCxhLmpzeHMpKGgse2NoaWxkcmVuOlsoMCxhLmpzeHMpKHAse2NoaWxkcmVuOlsoMCxhLmpzeCkoQyxPYmplY3QuYXNzaWduKHt3ZWlnaHQ6XCJib2xkXCJ9LHtjaGlsZHJlbjp0fSkpLHMmJigwLGEuanN4KShnLHtjaGlsZHJlbjpzfSldfSksKDAsYS5qc3gpKHYsT2JqZWN0LmFzc2lnbih7ZGlyZWN0aW9uOmUsbGFiZWxTaWRlOnIsZ2FwOm99LHtjaGlsZHJlbjpsLkNoaWxkcmVuLm1hcCh1LChlPT57Y29uc3QgdD1lO3JldHVybiB0LnR5cGU9PT1mLlJhZGlvSW5wdXQ/bC5jbG9uZUVsZW1lbnQodCx7bmFtZTpjLGxhYmVsU2lkZTpyLGRpc2FibGVkOm4sb25DaGFuZ2U6TyxjaGVja2VkOnQucHJvcHMudmFsdWU9PT14fSk6dH0pKX0pKSwheCYmeSYmKDAsYS5qc3gpKGQuVmFsaWRhdGlvbkVycm9yLHtjaGlsZHJlbjp5fSksaT8oMCxhLmpzeCkobSxPYmplY3QuYXNzaWduKHtkaXNhYmxlZDpufSx7Y2hpbGRyZW46aX0pKTpudWxsXX0pfTtjb25zdCBwPSgwLHMuZGVmYXVsdCkoYy5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtYXJnaW4tYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmAsaD0oMCxzLmRlZmF1bHQpKGMuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IG1heC1jb250ZW50O1xuYCxnPSgwLHMuZGVmYXVsdCkodS5UZXh0KWBcbiAgc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG5gLHY9KDAscy5kZWZhdWx0KShjLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiAke2U9PmUuZGlyZWN0aW9ufTtcbiAgYWxpZ24taXRlbXM6ICR7ZT0+e3N3aXRjaChlLmxhYmVsU2lkZSl7Y2FzZVwibGVmdFwiOnJldHVyblwiZW5kXCI7Y2FzZVwicmlnaHRcIjpyZXR1cm5cInN0YXJ0XCI7ZGVmYXVsdDpyZXR1cm5cImNlbnRlclwifX19O1xuICB3aWR0aDogZml0LWNvbnRlbnQ7XG5gLG09KDAscy5kZWZhdWx0KSh1LlRleHQpYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0UGxhY2Vob2xkZXJ9O1xuICBtYXJnaW4tdG9wOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuXG4gICR7KHtkaXNhYmxlZDplfSk9PmUmJnMuY3NzYFxuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICBgfVxuYCxDPSgwLHMuZGVmYXVsdCkodS5UZXh0KWBcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG5gfSwzNjQxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigyNTY1KSx0KX0sMjU2NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGk9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH0sYT10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJhZGlvSW5wdXQ9dm9pZCAwO2NvbnN0IGw9big1ODkzKSxzPW4oNzc2OSksYz1pKG4oNjY4OSkpLHU9aShuKDc1MTgpKSxmPW4oMTMzNSksZD1uKDk2MzQpO3QuUmFkaW9JbnB1dD1jLmZvcndhcmRSZWYoKChlLHQpPT57dmFye2Rpc2FibGVkOm4saWQ6cixsYWJlbDpvLGxhYmVsU2lkZTppLGljb246c309ZSxjPWEoZSxbXCJkaXNhYmxlZFwiLFwiaWRcIixcImxhYmVsXCIsXCJsYWJlbFNpZGVcIixcImljb25cIl0pO3JldHVybigwLGwuanN4KShwLHtjaGlsZHJlbjooMCxsLmpzeHMpKHYsT2JqZWN0LmFzc2lnbih7YXM6XCJsYWJlbFwiLGh0bWxGb3I6cixsYWJlbFNpZGU6aSxkaXNhYmxlZDpufSx7Y2hpbGRyZW46WygwLGwuanN4KShnLE9iamVjdC5hc3NpZ24oe3JlZjp0LHR5cGU6XCJyYWRpb1wiLGRpc2FibGVkOm59LGMpKSwoMCxsLmpzeCkoaCx7fSksISFzJiYoMCxsLmpzeCkoZC5JY29uLHtpY29uOnN9KSxvfHxcIlwiXX0pKX0pfSkpLHQuUmFkaW9JbnB1dC5kaXNwbGF5TmFtZT1cIlJhZGlvSW5wdXRcIjtjb25zdCBwPSgwLHUuZGVmYXVsdCkoZi5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuYCxoPXUuZGVmYXVsdC5kaXZgXG4gIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG5cbiAgaW5wdXQ6Y2hlY2tlZCB+ICY6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbjogMnB4IDFweCAwcHggMnB4O1xuICAgIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICB9XG5cbiAgaW5wdXQ6ZGlzYWJsZWQgfiAmIHtcbiAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgfVxuXG4gIGlucHV0OmRpc2FibGVkIH4gJjphZnRlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICB9XG5gLGc9dS5kZWZhdWx0LmlucHV0YFxuICBvcGFjaXR5OiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAmOmRpc2FibGVkIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gIH1cbmAsdj0oMCx1LmRlZmF1bHQpKHMuVGV4dClgXG4gIHdpZHRoOiBmaXQtY29udGVudDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZmxleC1kaXJlY3Rpb246ICR7KHtsYWJlbFNpZGU6ZX0pPT57c3dpdGNoKGV8fFwicmlnaHRcIil7Y2FzZVwibGVmdFwiOnJldHVyblwicm93LXJldmVyc2VcIjtjYXNlXCJyaWdodFwiOnJldHVyblwicm93XCI7Y2FzZVwidG9wXCI6cmV0dXJuXCJjb2x1bW4tcmV2ZXJzZVwiO2Nhc2VcImJvdHRvbVwiOnJldHVyblwiY29sdW1uXCJ9fX07XG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAkeyh7ZGlzYWJsZWQ6ZX0pPT5lP3UuY3NzYFxuICAgICAgICAgICYge1xuICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gICAgICAgIGA6bnVsbH1cbmB9LDg1MTA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDcwNjgpLHQpfSw3MDY4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJhd0lucHV0PXZvaWQgMDtjb25zdCBvPXIobig3NTE4KSk7dC5SYXdJbnB1dD1vLmRlZmF1bHQuaW5wdXRgYCx0LlJhd0lucHV0LmRpc3BsYXlOYW1lPVwiUmF3SW5wdXRcIn0sMzExOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNzk5KSx0KX0sNzk5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlRleHRBcmVhPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1uKDY2ODkpLGE9cihuKDc1MTgpKSxsPW4oOTUwNykscz1uKDk1MDcpLGM9bigxMzM1KSx1PW4oMTk0NCk7dC5UZXh0QXJlYT0oMCxpLmZvcndhcmRSZWYpKCgoZSx0KT0+KDAsby5qc3gpKGQsT2JqZWN0LmFzc2lnbih7ZmxleERpcmVjdGlvbjpcImNvbHVtblwiLGFsaWduSXRlbXM6XCJmbGV4LXN0YXJ0XCJ9LHtjaGlsZHJlbjooMCxvLmpzeHMpKGYse2NoaWxkcmVuOlshIWUubGFiZWwmJigwLG8uanN4KSh1LkxhYmVsLHt0ZXh0OmUubGFiZWwsaHRtbEZvcjplLm5hbWUsaGVscGVyVGV4dDplLmhlbHBlclRleHR9KSwoMCxvLmpzeCkocCxPYmplY3QuYXNzaWduKHtyZWY6dH0sZSx7b25DaGFuZ2U6ZS5vbkNoYW5nZX0pKV19KX0pKSkpLHQuVGV4dEFyZWEuZGlzcGxheU5hbWU9XCJUZXh0QXJlYVwiO2NvbnN0IGY9KDAsYS5kZWZhdWx0KShjLkJveClgXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIHdpZHRoOiAxMDAlO1xuYCxkPSgwLGEuZGVmYXVsdCkoYy5Cb3gpYFxuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIHVzZXItc2VsZWN0OiBub25lO1xuYCxwPWEuZGVmYXVsdC50ZXh0YXJlYWBcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Qm9yZGVyfTtcbiAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxzLmdldFN0YXR1c0NvbG9yKShlLHQsXCJpbnB1dEJvcmRlclwiKX07XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgd2lkdGg6IDEwMCU7XG4gIHJlc2l6ZTogbm9uZTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgJHtsLk1peGlucy5zY3JvbGxiYXIuc21hbGx9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Q29sb3J9O1xuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQudGV4dH07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQubm9ybWFsfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH0gJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH0gMHB4ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IDA7XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxzLmdldFN0YXR1c0NvbG9yKShlLHQsXCJpbnB1dEZvY3VzZWRcIil9O1xuICB9XG5cbiAgJjpkaXNhYmxlZDo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gIH1cbmB9LDg5NTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDIzNTIpLHQpfSwyMzUyOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlRleHRJbnB1dD12b2lkIDA7Y29uc3Qgcj1uKDU4OTMpLG89big2Njg5KSxpPW4oODg3OCk7dC5UZXh0SW5wdXQ9KDAsby5mb3J3YXJkUmVmKSgoKGUsdCk9PigwLHIuanN4KShpLkJhc2VJbnB1dCxPYmplY3QuYXNzaWduKHtyZWY6dCx0eXBlOlwidGV4dFwifSxlKSkpKSx0LlRleHRJbnB1dC5kaXNwbGF5TmFtZT1cIlRleHRJbnB1dFwifSwzMzM5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJveD12b2lkIDA7Y29uc3Qgbz1yKG4oNzUxOCkpLGk9big4NzMyKSxhPW4oNTQ1OSksbD17MTphLlBhbGV0dGUuYmFja2dyb3VuZDEsMjphLlBhbGV0dGUuYmFja2dyb3VuZDIsMzphLlBhbGV0dGUuYmFja2dyb3VuZDMsNDphLlBhbGV0dGUuYmFja2dyb3VuZDQsNTphLlBhbGV0dGUuYmFja2dyb3VuZDUsNjphLlBhbGV0dGUuYmFja2dyb3VuZDZ9O3QuQm94PW8uZGVmYXVsdC5kaXZgXG4gIC8qKlxuICAgKiBTdHlsZSBTY3JvbGxiYXIgZm9yIEJveGVzIHdpdGggb3ZlcmZsb3dcbiAgICovXG4gICR7aS5NaXhpbnMuc2Nyb2xsYmFyLmJhc2V9XG5cbiAgZGlzcGxheTogJHsoe2Rpc3BsYXk6ZT1cImZsZXhcIn0pPT5lfTtcbiAgZmxleC1kaXJlY3Rpb246ICR7KHtmbGV4RGlyZWN0aW9uOmU9XCJyb3dcIn0pPT5lfTtcbiAgZmxleC13cmFwOiAkeyh7ZmxleFdyYXA6ZT1cIm5vd3JhcFwifSk9PmV9O1xuICBhbGlnbi1pdGVtczogJHsoe2FsaWduSXRlbXM6ZX0pPT5lfTtcbiAganVzdGlmeS1jb250ZW50OiAkeyh7anVzdGlmeUNvbnRlbnQ6ZX0pPT5lfTtcbiAgZ2FwOiAkeyh7dGhlbWU6ZSxnYXA6dH0pPT50JiZlLnB4W3RdfTtcbiAgYWxpZ24tc2VsZjogJHsoe2FsaWduU2VsZjplfSk9PmV9O1xuICBmbGV4LWJhc2lzOiAkeyh7ZmxleEJhc2lzOmV9KT0+ZX07XG4gIGZsZXgtZ3JvdzogJHsoe2ZsZXhHcm93OmV9KT0+ZX07XG4gIGZsZXgtc2hyaW5rOiAkeyh7ZmxleFNocmluazplfSk9PmV9O1xuICBvcmRlcjogJHsoe29yZGVyOmV9KT0+ZX07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplLHBhZGRpbmc6dH0pPT50JiZlLnB4W3RdfTtcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmUsYmFja2dyb3VuZDp0fSk9PnQmJmUucGFsZXR0ZVtsW3RdXX07XG5gLHQuQm94LmRpc3BsYXlOYW1lPVwiQm94XCJ9LDEzMzU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDMzMzkpLHQpfSw2NzEwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRGVmaW5pdGlvbkxpc3Q9dm9pZCAwO2NvbnN0IGk9big1ODkzKSxhPW8obig3NTE4KSk7dC5EZWZpbml0aW9uTGlzdD1lPT57dmFye2RlZmluaXRpb25zOnR9PWUsbj1yKGUsW1wiZGVmaW5pdGlvbnNcIl0pO3JldHVybigwLGkuanN4KShzLE9iamVjdC5hc3NpZ24oe30sbix7cm9sZTpcImxpc3RcIn0se2NoaWxkcmVuOihBcnJheS5pc0FycmF5KHQpP3Q6QXJyYXkuZnJvbSh0KSkubWFwKCgoW2UsdF0sbik9PigwLGkuanN4cykobCxPYmplY3QuYXNzaWduKHtyb2xlOlwibGlzdGl0ZW1cIn0se2NoaWxkcmVuOlsoMCxpLmpzeCkoYyxPYmplY3QuYXNzaWduKHtpZDpgdGVybSR7bn1gfSx7Y2hpbGRyZW46ZX0pKSwoMCxpLmpzeCkodSxPYmplY3QuYXNzaWduKHtcImFyaWEtbGFiZWxsZWRieVwiOmB0ZXJtJHtufWB9LHtjaGlsZHJlbjp0fSkpXX0pLGAke2V9LSR7bn1gKSkpfSkpfTtjb25zdCBsPWEuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDNmcjtcbmAscz1hLmRlZmF1bHQuZGxgXG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4LmxhcmdlfWB9O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfSAke2UucHguYmFzZX1gfTtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbmAsYz1hLmRlZmF1bHQuZHRgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuc21hbGx9O1xuICBmb250LXdlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5mb250V2VpZ2h0Lm5vcm1hbH07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBwYWRkaW5nLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5gLHU9YS5kZWZhdWx0LmRkYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLnNtYWxsfTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHBhZGRpbmctYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmB9LDUzNzc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDY3MTApLHQpfSw5NDMxOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lkdsb2JhbFN0eWxlcz12b2lkIDA7Y29uc3Qgcj1uKDc1MTgpLG89big1NzUpLGk9big5NTA3KSxhPW4oNjIxOCk7dC5HbG9iYWxTdHlsZXM9ci5jcmVhdGVHbG9iYWxTdHlsZWBcbiAgLyoqIC0+IERlZmluZSBHbG9iYWwgQ1NTIFZhcnMgKi9cbiAgOnJvb3Qge1xuICAgIC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uOiAkeyh7dGhlbWU6ZX0pPT5lLnRyYW5zaXRpb24uYmFzZX07XG5cbiAgICBmb250LWZhbWlseTogJHsoe3RoZW1lOmV9KT0+ZS5mb250RmFtaWx5fTtcbiAgICAvKiBNYXAgb3ZlciB0aGUgcGFsZXR0ZSBrZXlzIGFuZCBjcmVhdGUgdmFyaWFibGVzIG91dCBvZiB0aGVtICovXG4gICAgJHtvLmdldFJvb3RDc3NWYXJzfVxuICB9XG5cbiAgLyoqIC0+IEBmb250LWZhY2UgRGVjbGFyYXRpb24gKi9cbiAgJHsoMCxpLmNyZWF0ZUZvbnRGYWNlQ3NzKShhLkZvbnRzKX1cblxuICAvKiogLT4gTWljcm8gUmVzZXQgKi9cbiAgKiB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICAvKipcbiAgICAgKiBQcmV2ZW50IGJyb3dzZXIgYXV0by13ZWlnaHRpbmdcbiAgICAgKiBAbGluayBodHRwczovL2Nzcy10cmlja3MuY29tL2FsbWFuYWMvcHJvcGVydGllcy9mL2ZvbnQtc3ludGhlc2lzL1xuICAgICAqL1xuICAgIGZvbnQtc3ludGhlc2lzOiBub25lO1xuICB9XG5cbiAgLyoqIC0+IEFwcGx5IEdsb2JhbCBTdHlsZXMgKi9cblxuICBib2R5LFxuICA6cm9vdCB7XG4gICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQxfTtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBmb250LWZhbWlseTogJHsoe3RoZW1lOmV9KT0+ZS5mb250RmFtaWx5fTtcbiAgICBmb250LXdlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5mb250V2VpZ2h0Lm5vcm1hbH07XG4gICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICAgIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQudGV4dH07XG4gIH1cblxuICA6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0UGxhY2Vob2xkZXJ9O1xuICB9XG5cbiAgLyoqIC0+IFJlZHVjZWQgTW90aW9uIChBY2Nlc3NpYmlsaXR5KSAqL1xuICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pIHtcbiAgICA6cm9vdCB7XG4gICAgICAtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbjogJHsoe3RoZW1lOmV9KT0+ZS50cmFuc2l0aW9uLm5vbmV9O1xuICAgIH1cbiAgfVxuYH0sMTA2OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTQzMSksdCl9LDEzMTA6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sOTUwNzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTYzOCksdCksbyhuKDQyMCksdCl9LDk5ODQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZ2V0TW9zdFJlYWRhYmxlPXQuZGFya2VuQ29sb3I9dC5saWdodGVuQ29sb3I9dm9pZCAwO2NvbnN0IG89cihuKDgyMDcpKTt0LmxpZ2h0ZW5Db2xvcj0oZSx0KT0+aShlLFwibGlnaHRlblwiLHQpLHQuZGFya2VuQ29sb3I9KGUsdCk9PmkoZSxcImRhcmtlblwiLHQpO2NvbnN0IGk9KGUsdCxuKT0+e2lmKG4mJihuPDB8fG4+MTAwKSl0aHJvdyBuZXcgRXJyb3IoYCR7bn0gbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEwMGApO3JldHVybigwLG8uZGVmYXVsdCkoZSlbdF0obikudG9TdHJpbmcoKX07dC5nZXRNb3N0UmVhZGFibGU9KGUsdCk9Pm8uZGVmYXVsdC5tb3N0UmVhZGFibGUoZSx0KS50b0hleFN0cmluZygpfSwzNDcxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksaT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lkljb25TaXplPXQuSWNvblNldD10LlRyYW5zaXRpb249dC5MaW5lSGVpZ2h0PXQuRm9udFdlaWdodD10LkZvbnRTaXplPXQuRm9udEZhbWlseT10LlNoYWRvdz10LlJhZGl1cz10LlVuaXRQeD10LlVuaXQ9dC5TaXplTmFtZT10LlNpemU9dC5Db2xvcj12b2lkIDA7Y29uc3QgYT1pKG4oMTUyMSkpLGw9aShuKDI3NzIpKTt0LkNvbG9yPXt3aGl0ZTpcIiNGRkZGRkZcIixsaWdodEdyYXkxOlwiI0ZBRkJGRVwiLGxpZ2h0R3JheTI6XCIjRjNGNUY4XCIsbGlnaHRHcmF5MzpcIiNFQ0VFRjFcIixsaWdodEdyYXk0OlwiI0REREZFNFwiLGxpZ2h0R3JheTU6XCIjQzlDQkQyXCIsbmV1dHJhbEdyYXk6XCIjN0Q4MDhBXCIsbmV1dHJhbEdyYXk4MDpcInJnYmEoMTI1LDEyOCwxMzgsMC44KVwiLHNpbHZlckdyYXk6XCIjQzBDMUMyXCIsZGFya0dyYXkxOlwiIzUzNTY1RlwiLGRhcmtHcmF5MjpcIiMzODNBNDBcIixkYXJrR3JheTM6XCIjMkYzMTM2XCIsZGFya0dyYXk0OlwiIzI0MjYyQlwiLGRhcmtHcmF5NTpcIiMxRTFGMjNcIixkYXJrR3JheTY6XCIjMTExMjE0XCIsb3BlbkZpbkRhcmtlc3Q6XCIjM0QzOUNEXCIsb3BlbkZpbkRhcmtlcjpcIiM0NjQyRTBcIixvcGVuRmluOlwiIzUwNENGRlwiLG9wZW5GaW5MaWdodDpcIiM1MjU0RkJcIixvcGVuRmluTGlnaHRlcjpcIiM1QzVFRkVcIixvcGVuRmluTGlnaHRlc3Q6XCIjNjg2NEZGXCIsZnVuY3Rpb25hbDE6XCIjMjA3NzM1XCIsZnVuY3Rpb25hbDI6XCIjNDZDOEYxXCIsZnVuY3Rpb25hbDM6XCIjMEE3NkQzXCIsZnVuY3Rpb25hbDQ6XCIjNkNBREU1XCIsZnVuY3Rpb25hbDU6XCIjMEE3NkQzXCIsZnVuY3Rpb25hbDY6XCIjODgyQkZFXCIsZnVuY3Rpb25hbDc6XCIjRjMxODE4XCIsZnVuY3Rpb25hbDg6XCIjQzkzNDAwXCIsZnVuY3Rpb25hbDk6XCIjRkY1RTYwXCIsZnVuY3Rpb25hbDEwOlwiI0Y0OEYwMFwiLHB1cnBsZTpcIiM4QzYxRkZcIixsaWdodGJsdWU6XCIjMzZDM0ZFXCIsYXF1YTpcIiMwMENDODhcIix5ZWxsb3c6XCIjRkZFQjAwXCIsc2FsbW9uOlwiI0ZGOEM0Q1wiLHBpbms6XCIjRkY1RTYwXCIsbGlnaHRwaW5rOlwiI0ZGOEZCOFwiLHdoaXRlMDA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMClcIix3aGl0ZTEwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjEpXCIsd2hpdGUyMDpcInJnYmEoMjU1LDI1NSwyNTUsMC4yKVwiLHdoaXRlMzA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMylcIix3aGl0ZTQwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjQpXCIsd2hpdGU1MDpcInJnYmEoMjU1LDI1NSwyNTUsMC41KVwiLHdoaXRlNjA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNilcIix3aGl0ZTcwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjcpXCIsd2hpdGU4MDpcInJnYmEoMjU1LDI1NSwyNTUsMC44KVwiLHdoaXRlOTA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuOSlcIixibGFjazAwOlwicmdiYSgwLDAsMCwwLjApXCIsYmxhY2sxMDpcInJnYmEoMCwwLDAsMC4xKVwiLGJsYWNrMjA6XCJyZ2JhKDAsMCwwLDAuMilcIixibGFjazMwOlwicmdiYSgwLDAsMCwwLjMpXCIsYmxhY2s0MDpcInJnYmEoMCwwLDAsMC40KVwiLGJsYWNrNTA6XCJyZ2JhKDAsMCwwLDAuNSlcIixibGFjazYwOlwicmdiYSgwLDAsMCwwLjYpXCIsYmxhY2s3MDpcInJnYmEoMCwwLDAsMC43KVwiLGJsYWNrODA6XCJyZ2JhKDAsMCwwLDAuOClcIixibGFjazkwOlwicmdiYSgwLDAsMCwwLjkpXCIsdHJhbnNwYXJlbnQ6XCJ0cmFuc3BhcmVudFwifSx0LlNpemU9e3hzbWFsbDpcInhzbWFsbFwiLHNtYWxsOlwic21hbGxcIixiYXNlOlwiYmFzZVwiLGxhcmdlOlwibGFyZ2VcIix4bGFyZ2U6XCJ4bGFyZ2VcIix4eGxhcmdlOlwieHhsYXJnZVwiLHh4eGxhcmdlOlwieHh4bGFyZ2VcIix4eHh4bGFyZ2U6XCJ4eHh4bGFyZ2VcIn0sdC5TaXplTmFtZT17W3QuU2l6ZS54c21hbGxdOlwiRXh0cmEgU21hbGxcIixbdC5TaXplLnNtYWxsXTpcIlNtYWxsXCIsW3QuU2l6ZS5iYXNlXTpcIkJhc2VcIixbdC5TaXplLmxhcmdlXTpcIkxhcmdlXCIsW3QuU2l6ZS54bGFyZ2VdOlwiRXh0cmEgTGFyZ2VcIixbdC5TaXplLnh4bGFyZ2VdOlwiMlggTGFyZ2VcIixbdC5TaXplLnh4eGxhcmdlXTpcIjNYIExhcmdlXCIsW3QuU2l6ZS54eHh4bGFyZ2VdOlwiNFggTGFyZ2VcIn0sdC5Vbml0PXtbdC5TaXplLnhzbWFsbF06NCxbdC5TaXplLnNtYWxsXTo4LFt0LlNpemUuYmFzZV06MTIsW3QuU2l6ZS5sYXJnZV06MTYsW3QuU2l6ZS54bGFyZ2VdOjIwLFt0LlNpemUueHhsYXJnZV06MjQsW3QuU2l6ZS54eHhsYXJnZV06MzIsW3QuU2l6ZS54eHh4bGFyZ2VdOjQ4fSx0LlVuaXRQeD17W3QuU2l6ZS54c21hbGxdOlwiNHB4XCIsW3QuU2l6ZS5zbWFsbF06XCI4cHhcIixbdC5TaXplLmJhc2VdOlwiMTJweFwiLFt0LlNpemUubGFyZ2VdOlwiMTZweFwiLFt0LlNpemUueGxhcmdlXTpcIjIwcHhcIixbdC5TaXplLnh4bGFyZ2VdOlwiMjRweFwiLFt0LlNpemUueHh4bGFyZ2VdOlwiMzJweFwiLFt0LlNpemUueHh4eGxhcmdlXTpcIjQ4cHhcIn0sdC5SYWRpdXM9e1t0LlNpemUueHNtYWxsXTpcIjJweFwiLFt0LlNpemUuc21hbGxdOlwiNHB4XCIsW3QuU2l6ZS5iYXNlXTpcIjhweFwiLFt0LlNpemUubGFyZ2VdOlwiMjRweFwiLHBpbGw6XCIxMDB2aFwiLHJvdW5kOlwiNTAlXCIsbm9uZTpcIjBcIn0sdC5TaGFkb3c9e1t0LlNpemUuYmFzZV06XCIwIDRweCA0cHggcmdiYSgwLCAwLCAwLCAwLjI1KVwifSx0LkZvbnRGYW1pbHk9W1wiSW50ZXJcIixcInN5c3RlbS11aVwiLFwiQmxpbmtNYWNTeXN0ZW1Gb250XCIsXCJTZWdvZSBVSVwiLFwiUm9ib3RvXCIsXCJPeHlnZW4tU2Fuc1wiLFwiVWJ1bnR1XCIsXCJDYW50YXJlbGxcIixcIkhlbHZldGljYSBOZXVlXCIsXCJzYW5zLXNlcmlmXCJdLmpvaW4oXCIsXCIpLHQuRm9udFNpemU9e1t0LlNpemUueHNtYWxsXTpcIjhweFwiLFt0LlNpemUuc21hbGxdOlwiMTBweFwiLFt0LlNpemUuYmFzZV06XCIxMnB4XCIsW3QuU2l6ZS5sYXJnZV06XCIxNHB4XCIsW3QuU2l6ZS54bGFyZ2VdOlwiMTZweFwiLFt0LlNpemUueHhsYXJnZV06XCIxOHB4XCIsW3QuU2l6ZS54eHhsYXJnZV06XCIyMHB4XCIsW3QuU2l6ZS54eHh4bGFyZ2VdOlwiNDBweFwifSx0LkZvbnRXZWlnaHQ9e25vcm1hbDo0MDAsYm9sZDo2MDB9LHQuTGluZUhlaWdodD17dWk6MSxoZWFkaW5nOjEuMix0ZXh0OjEuNX0sdC5UcmFuc2l0aW9uPXtiYXNlOlwiMjAwbXMgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSlcIixub25lOlwiMG1zXCJ9LHQuSWNvblNldD1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSksbCksdC5JY29uU2l6ZT17W3QuU2l6ZS54c21hbGxdOnQuVW5pdFB4LnNtYWxsLFt0LlNpemUuc21hbGxdOnQuVW5pdFB4LmJhc2UsW3QuU2l6ZS5iYXNlXTpcIjE1cHhcIixbdC5TaXplLmxhcmdlXTp0LlVuaXRQeC54bGFyZ2UsW3QuU2l6ZS54bGFyZ2VdOnQuVW5pdFB4Lnh4bGFyZ2UsW3QuU2l6ZS54eGxhcmdlXTp0LlVuaXRQeC54eHhsYXJnZSxbdC5TaXplLnh4eGxhcmdlXTp0LlVuaXRQeC54eHh4bGFyZ2V9fSw5MjcyOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmNyZWF0ZUZvbnRGYWNlQ3NzPXZvaWQgMDtjb25zdCByPW4oNzUxOCksbz1uKDM0NzEpO3QuY3JlYXRlRm9udEZhY2VDc3M9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuY3NzYFxuICAgICR7ZS5yZWd1bGFyJiZyLmNzc2BcbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgICAgICAgc3JjOiB1cmwoJHtlLnJlZ3VsYXJ9KSBmb3JtYXQoJ3dvZmYyJyk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAke28uRm9udFdlaWdodC5ub3JtYWx9O1xuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgIGZvbnQtZGlzcGxheTogZmFsbGJhY2s7XG4gICAgICB9XG4gICAgYH1cbiAgICAke2UuaXRhbGljJiZyLmNzc2BcbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgICAgICAgc3JjOiB1cmwoJHtlLml0YWxpY30pIGZvcm1hdCgnd29mZjInKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6ICR7by5Gb250V2VpZ2h0Lm5vcm1hbH07XG4gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgICAgZm9udC1kaXNwbGF5OiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICBgfVxuICAgICR7ZS5zZW1pQm9sZCYmci5jc3NgXG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gICAgICAgIHNyYzogdXJsKCR7ZS5zZW1pQm9sZH0pIGZvcm1hdCgnd29mZjInKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6ICR7by5Gb250V2VpZ2h0LmJvbGR9O1xuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgIGZvbnQtZGlzcGxheTogZmFsbGJhY2s7XG4gICAgICB9XG4gICAgYH1cbiAgICAke2Uuc2VtaUJvbGRJdGFsaWMmJnIuY3NzYFxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICAgICAgICBzcmM6IHVybCgke2Uuc2VtaUJvbGRJdGFsaWN9KSBmb3JtYXQoJ3dvZmYyJyk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAke28uRm9udFdlaWdodC5ib2xkfTtcbiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICBmb250LWRpc3BsYXk6IGZhbGxiYWNrO1xuICAgICAgfVxuICAgIGB9XG4gIGB9fSw2NzE0OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmNyZWF0ZVRoZW1lPXZvaWQgMDtjb25zdCByPW4oMzQ3MSksbz1uKDk5ODQpLGk9big1NDU5KSxhPXtmb250RmFtaWx5OnIuRm9udEZhbWlseSxmb250U2l6ZTpyLkZvbnRTaXplLGZvbnRXZWlnaHQ6ci5Gb250V2VpZ2h0LGxpbmVIZWlnaHQ6ci5MaW5lSGVpZ2h0LGljb25TaXplOnIuSWNvblNpemUscmFkaXVzOnIuUmFkaXVzLHNoYWRvdzpyLlNoYWRvdyx0cmFuc2l0aW9uOnIuVHJhbnNpdGlvbix1bml0OnIuVW5pdCxweDpyLlVuaXRQeH0sbD0oZSx0KT0+KHtbYCR7ZX1BY3RpdmVgXTooMCxvLmRhcmtlbkNvbG9yKSh0LDIpLFtgJHtlfUhvdmVyYF06KDAsby5saWdodGVuQ29sb3IpKHQsNSksW2Ake2V9Rm9jdXNlZGBdOigwLG8uZ2V0TW9zdFJlYWRhYmxlKSh0LFtyLkNvbG9yLndoaXRlLHIuQ29sb3IuZGFya0dyYXk1XSksW2Ake2V9VGV4dGBdOigwLG8uZ2V0TW9zdFJlYWRhYmxlKSh0LFtyLkNvbG9yLndoaXRlLHIuQ29sb3IuZGFya0dyYXk1XSl9KTt0LmNyZWF0ZVRoZW1lPWU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7cGFsZXR0ZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSxsKGkuUGFsZXR0ZS5icmFuZFByaW1hcnksZS5icmFuZFByaW1hcnkpKSxsKGkuUGFsZXR0ZS5icmFuZFNlY29uZGFyeSxlLmJyYW5kU2Vjb25kYXJ5KSl9KX0sNTc1OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlNVUFBPUlRFRF9MQU5HVUFHRVM9dC5nZXRTdGF0dXNDb2xvcj10LmdldFJvb3RDc3NWYXJzPXQuZ2V0VmFyaWFudENTUz12b2lkIDA7Y29uc3Qgcj1uKDU0NTkpO3QuZ2V0VmFyaWFudENTUz0oZSx0KT0+bj0+ZVt0XVtuW3RdXSx0LmdldFJvb3RDc3NWYXJzPSh7dGhlbWU6ZX0pPT5PYmplY3Qua2V5cyhyLlBhbGV0dGUpLm1hcCgodD0+YC0tb3BlbmZpbi11aS0ke3R9OiAke2UucGFsZXR0ZVt0XX07YCkpLmpvaW4oXCJcXG5cIiksdC5nZXRTdGF0dXNDb2xvcj0oZSx0LG4pPT57c3dpdGNoKHQpe2Nhc2VcImFjdGl2ZVwiOnJldHVybiBlLnBhbGV0dGUuc3RhdHVzQWN0aXZlO2Nhc2VcImNyaXRpY2FsXCI6cmV0dXJuIGUucGFsZXR0ZS5zdGF0dXNDcml0aWNhbDtjYXNlXCJ3YXJuaW5nXCI6cmV0dXJuIGUucGFsZXR0ZS5zdGF0dXNXYXJuaW5nO2Nhc2VcInN1Y2Nlc3NcIjpyZXR1cm4gZS5wYWxldHRlLnN0YXR1c1N1Y2Nlc3M7ZGVmYXVsdDpyZXR1cm4gbj9lLnBhbGV0dGVbbl06XCJpbmhlcml0XCJ9fSx0LlNVUFBPUlRFRF9MQU5HVUFHRVM9W1wiZW4tVVNcIixcImphLUpQXCIsXCJ6aC1DTlwiLFwia28tS1JcIixcInJ1LVJVXCIsXCJkZS1ERVwiLFwiemgtSGFudFwiXX0sOTYzODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTk4NCksdCksbyhuKDM0NzEpLHQpLG8obig5MjcyKSx0KSxvKG4oNjcxNCksdCksbyhuKDU3NSksdCksbyhuKDE0NDEpLHQpLG8obig4NzMyKSx0KSxvKG4oNTQ1OSksdCksbyhuKDUzMTcpLHQpfSwxNDQxOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LDg3MzI6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTWl4aW5zPXZvaWQgMDtjb25zdCByPW4oMzQ3MSksbz1uKDc1MTgpLGk9by5jc3NgXG4gIHVzZXItc2VsZWN0OiBub25lO1xuYCxhPW8uY3NzYFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbmAsbD1vLmNzc2BcbiAgJjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgIHdpZHRoOiB2YXIoLS1zY3JvbGxiYXJTaXplLCAke3IuVW5pdFB4LnhzbWFsbH0pO1xuICAgIGhlaWdodDogdmFyKC0tc2Nyb2xsYmFyU2l6ZSwgJHtyLlVuaXRQeC54c21hbGx9KTtcbiAgfVxuXG4gICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgICBiYWNrZ3JvdW5kOiAke3IuQ29sb3IubmV1dHJhbEdyYXk4MH07XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2Nyb2xsYmFyU2l6ZSwgJHtyLlVuaXRQeC54c21hbGx9KTtcbiAgICBvcGFjaXR5OiAwLjg7XG4gIH1cblxuICAmOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgYmFja2dyb3VuZDogJHtyLkNvbG9yLndoaXRlODB9O1xuICAgIHdpZHRoOiB2YXIoLS1zY3JvbGxiYXJTaXplLCAke3IuVW5pdFB4LnhzbWFsbH0pO1xuICAgIGhlaWdodDogdmFyKC0tc2Nyb2xsYmFyU2l6ZSwgJHtyLlVuaXRQeC54c21hbGx9KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1zY3JvbGxiYXJTaXplLCAke3IuVW5pdFB4LnhzbWFsbH0pO1xuICAgIG9wYWNpdHk6IDAuODtcbiAgfVxuYCxzPW8uY3NzYFxuICAtLXNjcm9sbGJhclNpemU6IDJweDtcbiAgJHtsfTtcbmAsYz1vLmNzc2BcbiAgLXdlYmtpdC1hcHAtcmVnaW9uOiBkcmFnO1xuYCx1PW8uY3NzYFxuICAtd2Via2l0LWFwcC1yZWdpb246IG5vLWRyYWc7XG5gO3QuTWl4aW5zPXtub1NlbGVjdDppLHRleHRPdmVyZmxvdzphLHNjcm9sbGJhcjp7W3IuU2l6ZS5iYXNlXTpsLFtyLlNpemUuc21hbGxdOnN9LGFwcFJlZ2lvbjp7ZHJhZzpjLG5vRHJhZzp1fX19LDU0NTk6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlBhbGV0dGU9dm9pZCAwLHQuUGFsZXR0ZT17YmFja2dyb3VuZDE6XCJiYWNrZ3JvdW5kMVwiLGJhY2tncm91bmQyOlwiYmFja2dyb3VuZDJcIixiYWNrZ3JvdW5kMzpcImJhY2tncm91bmQzXCIsYmFja2dyb3VuZDQ6XCJiYWNrZ3JvdW5kNFwiLGJhY2tncm91bmQ1OlwiYmFja2dyb3VuZDVcIixiYWNrZ3JvdW5kNjpcImJhY2tncm91bmQ2XCIsYnJhbmRQcmltYXJ5OlwiYnJhbmRQcmltYXJ5XCIsYnJhbmRTZWNvbmRhcnk6XCJicmFuZFNlY29uZGFyeVwiLGJyYW5kUHJpbWFyeUFjdGl2ZTpcImJyYW5kUHJpbWFyeUFjdGl2ZVwiLGJyYW5kUHJpbWFyeUhvdmVyOlwiYnJhbmRQcmltYXJ5SG92ZXJcIixicmFuZFByaW1hcnlGb2N1c2VkOlwiYnJhbmRQcmltYXJ5Rm9jdXNlZFwiLGJyYW5kUHJpbWFyeVRleHQ6XCJicmFuZFByaW1hcnlUZXh0XCIsYnJhbmRTZWNvbmRhcnlBY3RpdmU6XCJicmFuZFNlY29uZGFyeUFjdGl2ZVwiLGJyYW5kU2Vjb25kYXJ5SG92ZXI6XCJicmFuZFNlY29uZGFyeUhvdmVyXCIsYnJhbmRTZWNvbmRhcnlGb2N1c2VkOlwiYnJhbmRTZWNvbmRhcnlGb2N1c2VkXCIsYnJhbmRTZWNvbmRhcnlUZXh0OlwiYnJhbmRTZWNvbmRhcnlUZXh0XCIsaW5wdXRCYWNrZ3JvdW5kOlwiaW5wdXRCYWNrZ3JvdW5kXCIsaW5wdXRDb2xvcjpcImlucHV0Q29sb3JcIixpbnB1dFBsYWNlaG9sZGVyOlwiaW5wdXRQbGFjZWhvbGRlclwiLGlucHV0RGlzYWJsZWQ6XCJpbnB1dERpc2FibGVkXCIsaW5wdXRGb2N1c2VkOlwiaW5wdXRGb2N1c2VkXCIsaW5wdXRCb3JkZXI6XCJpbnB1dEJvcmRlclwiLHN0YXR1c1N1Y2Nlc3M6XCJzdGF0dXNTdWNjZXNzXCIsc3RhdHVzV2FybmluZzpcInN0YXR1c1dhcm5pbmdcIixzdGF0dXNDcml0aWNhbDpcInN0YXR1c0NyaXRpY2FsXCIsc3RhdHVzQWN0aXZlOlwic3RhdHVzQWN0aXZlXCIsdGV4dERlZmF1bHQ6XCJ0ZXh0RGVmYXVsdFwiLHRleHRIZWxwOlwidGV4dEhlbHBcIix0ZXh0SW5hY3RpdmU6XCJ0ZXh0SW5hY3RpdmVcIixib3JkZXJOZXV0cmFsOlwiYm9yZGVyTmV1dHJhbFwiLGNvbnRlbnRCYWNrZ3JvdW5kMTpcImNvbnRlbnRCYWNrZ3JvdW5kMVwiLGNvbnRlbnRCYWNrZ3JvdW5kMjpcImNvbnRlbnRCYWNrZ3JvdW5kMlwiLGNvbnRlbnRCYWNrZ3JvdW5kMzpcImNvbnRlbnRCYWNrZ3JvdW5kM1wiLGNvbnRlbnRCYWNrZ3JvdW5kNDpcImNvbnRlbnRCYWNrZ3JvdW5kNFwiLGNvbnRlbnRCYWNrZ3JvdW5kNTpcImNvbnRlbnRCYWNrZ3JvdW5kNVwiLGxpbmtEZWZhdWx0OlwibGlua0RlZmF1bHRcIixsaW5rSG92ZXI6XCJsaW5rSG92ZXJcIn19LDUzMTc6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sNDI2NjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTQ4MyksdCl9LDk0ODM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuT3BlbkZpbkRhcmtUaGVtZT10Lk9wZW5GaW5MaWdodFRoZW1lPXZvaWQgMDtjb25zdCByPW4oNTQ1OSksbz1uKDM0NzEpLGk9big2NzE0KSxhPXtbci5QYWxldHRlLmJyYW5kUHJpbWFyeV06by5Db2xvci5vcGVuRmluLFtyLlBhbGV0dGUuc3RhdHVzU3VjY2Vzc106by5Db2xvci5mdW5jdGlvbmFsMSxbci5QYWxldHRlLnN0YXR1c1dhcm5pbmddOm8uQ29sb3IuZnVuY3Rpb25hbDEwLFtyLlBhbGV0dGUuc3RhdHVzQ3JpdGljYWxdOm8uQ29sb3IuZnVuY3Rpb25hbDcsW3IuUGFsZXR0ZS5zdGF0dXNBY3RpdmVdOm8uQ29sb3IuZnVuY3Rpb25hbDMsW3IuUGFsZXR0ZS5ib3JkZXJOZXV0cmFsXTpvLkNvbG9yLnNpbHZlckdyYXksW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDFdOm8uQ29sb3Iub3BlbkZpbixbci5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kMl06XCIjMDAwMDAwXCIsW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDNdOlwiIzAwMDAwMFwiLFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQ0XTpcIiMwMDAwMDBcIixbci5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kNV06XCIjMDAwMDAwXCIsW3IuUGFsZXR0ZS5saW5rRGVmYXVsdF06by5Db2xvci5mdW5jdGlvbmFsNCxbci5QYWxldHRlLmxpbmtIb3Zlcl06by5Db2xvci5mdW5jdGlvbmFsNX07dC5PcGVuRmluTGlnaHRUaGVtZT0oMCxpLmNyZWF0ZVRoZW1lKShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse1tyLlBhbGV0dGUuYmFja2dyb3VuZDFdOm8uQ29sb3Iud2hpdGUsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kMl06by5Db2xvci5saWdodEdyYXkxLFtyLlBhbGV0dGUuYmFja2dyb3VuZDNdOm8uQ29sb3IubGlnaHRHcmF5Mixbci5QYWxldHRlLmJhY2tncm91bmQ0XTpvLkNvbG9yLmxpZ2h0R3JheTMsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNV06by5Db2xvci5saWdodEdyYXkzLFtyLlBhbGV0dGUuYmFja2dyb3VuZDZdOm8uQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLmJyYW5kU2Vjb25kYXJ5XTpvLkNvbG9yLmxpZ2h0R3JheTQsW3IuUGFsZXR0ZS5pbnB1dEJhY2tncm91bmRdOm8uQ29sb3IubGlnaHRHcmF5Myxbci5QYWxldHRlLmlucHV0Q29sb3JdOm8uQ29sb3IuZGFya0dyYXk1LFtyLlBhbGV0dGUuaW5wdXRQbGFjZWhvbGRlcl06by5Db2xvci5kYXJrR3JheTIsW3IuUGFsZXR0ZS5pbnB1dERpc2FibGVkXTpvLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUuaW5wdXRGb2N1c2VkXTpvLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS5pbnB1dEJvcmRlcl06by5Db2xvci5uZXV0cmFsR3JheSxbci5QYWxldHRlLnRleHREZWZhdWx0XTpvLkNvbG9yLmRhcmtHcmF5NSxbci5QYWxldHRlLnRleHRIZWxwXTpvLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUudGV4dEluYWN0aXZlXTpvLkNvbG9yLm5ldXRyYWxHcmF5fSkpLHQuT3BlbkZpbkRhcmtUaGVtZT0oMCxpLmNyZWF0ZVRoZW1lKShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse1tyLlBhbGV0dGUuYmFja2dyb3VuZDFdOm8uQ29sb3IuZGFya0dyYXk2LFtyLlBhbGV0dGUuYmFja2dyb3VuZDJdOm8uQ29sb3IuZGFya0dyYXk1LFtyLlBhbGV0dGUuYmFja2dyb3VuZDNdOm8uQ29sb3IuZGFya0dyYXk0LFtyLlBhbGV0dGUuYmFja2dyb3VuZDRdOm8uQ29sb3IuZGFya0dyYXkzLFtyLlBhbGV0dGUuYmFja2dyb3VuZDVdOm8uQ29sb3IuZGFya0dyYXkyLFtyLlBhbGV0dGUuYmFja2dyb3VuZDZdOm8uQ29sb3IuZGFya0dyYXkxLFtyLlBhbGV0dGUuYnJhbmRTZWNvbmRhcnldOm8uQ29sb3IuZGFya0dyYXkyLFtyLlBhbGV0dGUuaW5wdXRCYWNrZ3JvdW5kXTpvLkNvbG9yLmRhcmtHcmF5MSxbci5QYWxldHRlLmlucHV0Q29sb3JdOm8uQ29sb3Iud2hpdGUsW3IuUGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyXTpvLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS5pbnB1dERpc2FibGVkXTpvLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUuaW5wdXRGb2N1c2VkXTpvLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS5pbnB1dEJvcmRlcl06by5Db2xvci5uZXV0cmFsR3JheSxbci5QYWxldHRlLnRleHREZWZhdWx0XTpvLkNvbG9yLndoaXRlLFtyLlBhbGV0dGUudGV4dEhlbHBdOm8uQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLnRleHRJbmFjdGl2ZV06by5Db2xvci5uZXV0cmFsR3JheX0pKX0sNDIwOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlRoZW1lUHJvdmlkZXI9dm9pZCAwO2NvbnN0IHI9big1ODkzKSxvPW4oNzUxOCksaT1uKDMxOTApLGE9big3MDg4KSxsPW4oMTA2OSk7dC5UaGVtZVByb3ZpZGVyPSh7Y2hpbGRyZW46ZSx0aGVtZXM6dCxzY2hlbWU6bj1pLkNvbG9yU2NoZW1lLnN5c3RlbX0pPT57Y29uc3Qgcz0oMCxhLnVzZVRoZW1lKSh7dGhlbWVzOnQsc2NoZW1lOm59KTtyZXR1cm4oMCxyLmpzeCkoby5UaGVtZVByb3ZpZGVyLE9iamVjdC5hc3NpZ24oe3RoZW1lOnN9LHtjaGlsZHJlbjooMCxyLmpzeHMpKHIuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxyLmpzeCkobC5HbG9iYWxTdHlsZXMse30pLGVdfSl9KSl9fSwzODc3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigxMDY5KSx0KSxvKG4oMTMxMCksdCksbyhuKDk1MDcpLHQpfSw5NzU4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbnRhY3RTdGF0dXNJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1yKG4oNzUxOCkpLGE9bigxMzMzKSxsPXthdmFpbGFibGU6KDAsby5qc3gpKGEuQ2hlY2tTVkcse30pLGF3YXk6KDAsby5qc3gpKGEuQnVzeVNWRyx7fSksXCJkby1ub3QtZGlzdHVyYlwiOigwLG8uanN4KShhLkRvTm90RGlzdHVyYlNWRyx7fSksb2ZmbGluZTooMCxvLmpzeCkoYS5PZmZsaW5lU1ZHLHt9KSxidXN5Om51bGx9O3QuQ29udGFjdFN0YXR1c0ljb249KHtvbmxpbmVTdGF0dXM6ZX0pPT5lPygwLG8uanN4KShzLE9iamVjdC5hc3NpZ24oe29ubGluZVN0YXR1czplfSx7Y2hpbGRyZW46bFtlXXx8bnVsbH0pKTpudWxsO2NvbnN0IHM9aS5kZWZhdWx0LmRpdmBcbiAgYm9yZGVyOiAxLjZweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDF9O1xuXG4gIGJhY2tncm91bmQ6ICR7KHtvbmxpbmVTdGF0dXM6ZX0pPT5cImJ1c3lcIj09PWU/XCIjQzIxMzEzXCI6XCJ3aGl0ZVwifTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuXG4gIGhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG4gIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDc4Ljk1JTtcbiAgcmlnaHQ6IC03LjAyJTtcbiAgdG9wOiA3Ny4xMiU7XG4gIGJvdHRvbTogLTQuMjQlO1xuYH0sMTMzMzooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5PZmZsaW5lU1ZHPXQuRG9Ob3REaXN0dXJiU1ZHPXQuQnVzeVNWRz10LkNoZWNrU1ZHPXZvaWQgMDtjb25zdCByPW4oNTg5Myk7dC5DaGVja1NWRz0oKT0+KDAsci5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSx7Y2hpbGRyZW46KDAsci5qc3gpKFwicGF0aFwiLHtkOlwiTTggMEM4LjczNDM4IDAgOS40NDAxIDAuMDk2MzU0MiAxMC4xMTcyIDAuMjg5MDYzQzEwLjc5NDMgMC40ODE3NzEgMTEuNDI5NyAwLjc1MjYwNCAxMi4wMjM0IDEuMTAxNTZDMTIuNjE3MiAxLjQ1MDUyIDEzLjE1NjMgMS44Njk3OSAxMy42NDA2IDIuMzU5MzhDMTQuMTMwMiAyLjg0Mzc1IDE0LjU0OTUgMy4zODI4MSAxNC44OTg0IDMuOTc2NTZDMTUuMjQ3NCA0LjU3MDMxIDE1LjUxODIgNS4yMDU3MyAxNS43MTA5IDUuODgyODFDMTUuOTAzNiA2LjU1OTkgMTYgNy4yNjU2MyAxNiA4QzE2IDguNzI5MTcgMTUuOTAzNiA5LjQzNDkgMTUuNzEwOSAxMC4xMTcyQzE1LjUxODIgMTAuNzk0MyAxNS4yNDc0IDExLjQyOTcgMTQuODk4NCAxMi4wMjM0QzE0LjU0OTUgMTIuNjE3MiAxNC4xMzAyIDEzLjE1ODkgMTMuNjQwNiAxMy42NDg0QzEzLjE1NjMgMTQuMTMyOCAxMi42MTcyIDE0LjU0OTUgMTIuMDIzNCAxNC44OTg0QzExLjQyOTcgMTUuMjQ3NCAxMC43OTE3IDE1LjUxODIgMTAuMTA5NCAxNS43MTA5QzkuNDMyMjkgMTUuOTAzNiA4LjcyOTE3IDE2IDggMTZDNy4yNzA4MyAxNiA2LjU2NTEgMTUuOTAzNiA1Ljg4MjgxIDE1LjcxMDlDNS4yMDU3MyAxNS41MTgyIDQuNTcwMzEgMTUuMjQ3NCAzLjk3NjU2IDE0Ljg5ODRDMy4zODI4MSAxNC41NDk1IDIuODQxMTUgMTQuMTMyOCAyLjM1MTU2IDEzLjY0ODRDMS44NjcxOSAxMy4xNTg5IDEuNDUwNTIgMTIuNjE3MiAxLjEwMTU2IDEyLjAyMzRDMC43NTI2MDQgMTEuNDI5NyAwLjQ4MTc3MSAxMC43OTQzIDAuMjg5MDYzIDEwLjExNzJDMC4wOTYzNTQyIDkuNDM0OSAwIDguNzI5MTcgMCA4QzAgNy4yNzA4MyAwLjA5NjM1NDIgNi41Njc3MSAwLjI4OTA2MyA1Ljg5MDYzQzAuNDgxNzcxIDUuMjA4MzMgMC43NTI2MDQgNC41NzAzMSAxLjEwMTU2IDMuOTc2NTZDMS40NTA1MiAzLjM4MjgxIDEuODY3MTkgMi44NDM3NSAyLjM1MTU2IDIuMzU5MzhDMi44NDExNSAxLjg2OTc5IDMuMzgyODEgMS40NTA1MiAzLjk3NjU2IDEuMTAxNTZDNC41NzAzMSAwLjc1MjYwNCA1LjIwNTczIDAuNDgxNzcxIDUuODgyODEgMC4yODkwNjNDNi41NjUxIDAuMDk2MzU0MiA3LjI3MDgzIDAgOCAwWk0xMC42MzI4IDUuNjg3NUMxMC40MjQ1IDUuNjg3NSAxMC4yNDc0IDUuNzYwNDIgMTAuMTAxNiA1LjkwNjI1TDcuMjczNDQgOC43NUw2LjI2NTYzIDcuNzVDNi4xMTk3OSA3LjYwNDE3IDUuOTQ1MzEgNy41MzEyNSA1Ljc0MjE5IDcuNTMxMjVDNS42NDMyMyA3LjUzMTI1IDUuNTQ5NDggNy41NTIwOCA1LjQ2MDk0IDcuNTkzNzVDNS4zNzI0IDcuNjM1NDIgNS4yOTE2NyA3LjY5MjcxIDUuMjE4NzUgNy43NjU2M0M1LjE1MTA0IDcuODMzMzMgNS4wOTYzNSA3LjkxMTQ2IDUuMDU0NjkgOEM1LjAxMzAyIDguMDg4NTQgNC45OTIxOSA4LjE4MjI5IDQuOTkyMTkgOC4yODEyNUM0Ljk5MjE5IDguNDg5NTggNS4wNjUxIDguNjY2NjcgNS4yMTA5NCA4LjgxMjVMNi43NDIxOSAxMC4zNDM4QzYuODg4MDIgMTAuNDg5NiA3LjA2NTEgMTAuNTYyNSA3LjI3MzQ0IDEwLjU2MjVDNy40ODE3NyAxMC41NjI1IDcuNjU4ODUgMTAuNDg5NiA3LjgwNDY5IDEwLjM0MzhMMTEuMTY0MSA2Ljk2ODc1QzExLjMwOTkgNi44MjI5MiAxMS4zODI4IDYuNjQ1ODMgMTEuMzgyOCA2LjQzNzVDMTEuMzgyOCA2LjMzODU0IDExLjM2MiA2LjI0NDc5IDExLjMyMDMgNi4xNTYyNUMxMS4yNzg2IDYuMDY3NzEgMTEuMjIxNCA1Ljk4OTU4IDExLjE0ODQgNS45MjE4OEMxMS4wODA3IDUuODQ4OTYgMTEuMDAyNiA1Ljc5MTY3IDEwLjkxNDEgNS43NUMxMC44MjU1IDUuNzA4MzMgMTAuNzMxOCA1LjY4NzUgMTAuNjMyOCA1LjY4NzVaXCIsZmlsbDpcIiMyMDc3MzVcIn0pfSkpLHQuQnVzeVNWRz0oKT0+KDAsci5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE3XCIsdmlld0JveDpcIjAgMCAxNiAxN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSx7Y2hpbGRyZW46KDAsci5qc3gpKFwicGF0aFwiLHtkOlwiTTggMC43OTAyMzdDOC43MzQzOCAwLjc5MDIzNyA5LjQ0MDEgMC44ODY1OTIgMTAuMTE3MiAxLjA3OTNDMTAuNzk0MyAxLjI3MjAxIDExLjQyOTcgMS41NDI4NCAxMi4wMjM0IDEuODkxOEMxMi42MTcyIDIuMjQwNzYgMTMuMTU2MyAyLjY2MDAzIDEzLjY0MDYgMy4xNDk2MUMxNC4xMzAyIDMuNjMzOTkgMTQuNTQ5NSA0LjE3MzA1IDE0Ljg5ODQgNC43NjY4QzE1LjI0NzQgNS4zNjA1NSAxNS41MTgyIDUuOTk1OTcgMTUuNzEwOSA2LjY3MzA1QzE1LjkwMzYgNy4zNTAxMyAxNiA4LjA1NTg2IDE2IDguNzkwMjRDMTYgOS41MTk0IDE1LjkwMzYgMTAuMjI1MSAxNS43MTA5IDEwLjkwNzRDMTUuNTE4MiAxMS41ODQ1IDE1LjI0NzQgMTIuMjE5OSAxNC44OTg0IDEyLjgxMzdDMTQuNTQ5NSAxMy40MDc0IDE0LjEzMDIgMTMuOTQ5MSAxMy42NDA2IDE0LjQzODdDMTMuMTU2MyAxNC45MjMxIDEyLjYxNzIgMTUuMzM5NyAxMi4wMjM0IDE1LjY4ODdDMTEuNDI5NyAxNi4wMzc2IDEwLjc5MTcgMTYuMzA4NSAxMC4xMDk0IDE2LjUwMTJDOS40MzIyOSAxNi42OTM5IDguNzI5MTcgMTYuNzkwMiA4IDE2Ljc5MDJDNy4yNzA4MyAxNi43OTAyIDYuNTY1MSAxNi42OTM5IDUuODgyODEgMTYuNTAxMkM1LjIwNTczIDE2LjMwODUgNC41NzAzMSAxNi4wMzc2IDMuOTc2NTYgMTUuNjg4N0MzLjM4MjgxIDE1LjMzOTcgMi44NDExNSAxNC45MjMxIDIuMzUxNTYgMTQuNDM4N0MxLjg2NzE5IDEzLjk0OTEgMS40NTA1MiAxMy40MDc0IDEuMTAxNTYgMTIuODEzN0MwLjc1MjYwNCAxMi4yMTk5IDAuNDgxNzcxIDExLjU4NDUgMC4yODkwNjMgMTAuOTA3NEMwLjA5NjM1NDIgMTAuMjI1MSAwIDkuNTE5NCAwIDguNzkwMjRDMCA4LjA2MTA3IDAuMDk2MzU0MiA3LjM1Nzk1IDAuMjg5MDYzIDYuNjgwODZDMC40ODE3NzEgNS45OTg1NyAwLjc1MjYwNCA1LjM2MDU1IDEuMTAxNTYgNC43NjY4QzEuNDUwNTIgNC4xNzMwNSAxLjg2NzE5IDMuNjMzOTkgMi4zNTE1NiAzLjE0OTYxQzIuODQxMTUgMi42NjAwMyAzLjM4MjgxIDIuMjQwNzYgMy45NzY1NiAxLjg5MThDNC41NzAzMSAxLjU0Mjg0IDUuMjA1NzMgMS4yNzIwMSA1Ljg4MjgxIDEuMDc5M0M2LjU2NTEgMC44ODY1OTIgNy4yNzA4MyAwLjc5MDIzNyA4IDAuNzkwMjM3Wk03LjMyMDMxIDQuMDQ4MDVDNy4yMTA5NCA0LjA0ODA1IDcuMTA2NzcgNC4wNzE0OSA3LjAwNzgxIDQuMTE4MzZDNi45MTQwNiA0LjE2MDAzIDYuODI4MTMgNC4yMTk5MiA2Ljc1IDQuMjk4MDVDNi42NzcwOCA0LjM3MDk3IDYuNjE3MTkgNC40NTY5IDYuNTcwMzEgNC41NTU4NkM2LjUyODY1IDQuNjQ5NjEgNi41MDc4MSA0Ljc1MTE3IDYuNTA3ODEgNC44NjA1NVY5LjE5NjQ5QzYuNTA3ODEgOS4zMDU4NiA2LjUyODY1IDkuNDEyNjMgNi41NzAzMSA5LjUxNjhDNi42MTE5OCA5LjYyMDk3IDYuNjcxODggOS43MTIxMSA2Ljc1IDkuNzkwMjRMOS4xODc1IDEyLjIxMjFDOS4zNDg5NiAxMi4zNzM2IDkuNTQxNjcgMTIuNDU0MyA5Ljc2NTYzIDEyLjQ1NDNDOS44NzUgMTIuNDU0MyA5Ljk3OTE3IDEyLjQzMzUgMTAuMDc4MSAxMi4zOTE4QzEwLjE3NzEgMTIuMzQ0OSAxMC4yNjMgMTIuMjg1IDEwLjMzNTkgMTIuMjEyMUMxMC40MDg5IDEyLjEzNCAxMC40NjYxIDEyLjA0NTQgMTAuNTA3OCAxMS45NDY1QzEwLjU1NDcgMTEuODQ3NSAxMC41NzgxIDExLjc0MzQgMTAuNTc4MSAxMS42MzRDMTAuNTc4MSAxMS41Mjk4IDEwLjU1NDcgMTEuNDI4MyAxMC41MDc4IDExLjMyOTNDMTAuNDY2MSAxMS4yMjUxIDEwLjQwODkgMTEuMTM2NiAxMC4zMzU5IDExLjA2MzdMOC4xMzI4MSA4Ljg3NjE4VjQuODYwNTVDOC4xMzI4MSA0Ljc1MTE3IDguMTA5MzggNC42NDcwMSA4LjA2MjUgNC41NDgwNUM4LjAyMDgzIDQuNDQ5MDkgNy45NjM1NCA0LjM2MzE1IDcuODkwNjMgNC4yOTAyNEM3LjgxNzcxIDQuMjE3MzIgNy43MzE3NyA0LjE2MDAzIDcuNjMyODEgNC4xMTgzNkM3LjUzMzg1IDQuMDcxNDkgNy40Mjk2OSA0LjA0ODA1IDcuMzIwMzEgNC4wNDgwNVpcIixmaWxsOlwiI0ZFOUY0RFwifSl9KSksdC5Eb05vdERpc3R1cmJTVkc9KCk9PigwLHIuanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxN1wiLHZpZXdCb3g6XCIwIDAgMTYgMTdcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0se2NoaWxkcmVuOigwLHIuanN4KShcInBhdGhcIix7ZDpcIk04IDAuNTkwMjU2QzguNzM0MzggMC41OTAyNTYgOS40NDAxIDAuNjg2NjEgMTAuMTE3MiAwLjg3OTMxOEMxMC43OTQzIDEuMDcyMDMgMTEuNDI5NyAxLjM0Mjg2IDEyLjAyMzQgMS42OTE4MkMxMi42MTcyIDIuMDQwNzggMTMuMTU2MiAyLjQ2MDA1IDEzLjY0MDYgMi45NDk2M0MxNC4xMzAyIDMuNDM0MDEgMTQuNTQ5NSAzLjk3MzA3IDE0Ljg5ODQgNC41NjY4MkMxNS4yNDc0IDUuMTYwNTcgMTUuNTE4MiA1Ljc5NTk4IDE1LjcxMDkgNi40NzMwN0MxNS45MDM2IDcuMTUwMTUgMTYgNy44NTU4OCAxNiA4LjU5MDI2QzE2IDkuMzE5NDIgMTUuOTAzNiAxMC4wMjUyIDE1LjcxMDkgMTAuNzA3NEMxNS41MTgyIDExLjM4NDUgMTUuMjQ3NCAxMi4wMTk5IDE0Ljg5ODQgMTIuNjEzN0MxNC41NDk1IDEzLjIwNzQgMTQuMTMwMiAxMy43NDkxIDEzLjY0MDYgMTQuMjM4N0MxMy4xNTYyIDE0LjcyMzEgMTIuNjE3MiAxNS4xMzk3IDEyLjAyMzQgMTUuNDg4N0MxMS40Mjk3IDE1LjgzNzcgMTAuNzkxNyAxNi4xMDg1IDEwLjEwOTQgMTYuMzAxMkM5LjQzMjI5IDE2LjQ5MzkgOC43MjkxNyAxNi41OTAzIDggMTYuNTkwM0M3LjI3MDgzIDE2LjU5MDMgNi41NjUxIDE2LjQ5MzkgNS44ODI4MSAxNi4zMDEyQzUuMjA1NzMgMTYuMTA4NSA0LjU3MDMxIDE1LjgzNzcgMy45NzY1NiAxNS40ODg3QzMuMzgyODEgMTUuMTM5NyAyLjg0MTE1IDE0LjcyMzEgMi4zNTE1NiAxNC4yMzg3QzEuODY3MTkgMTMuNzQ5MSAxLjQ1MDUyIDEzLjIwNzQgMS4xMDE1NiAxMi42MTM3QzAuNzUyNjA0IDEyLjAxOTkgMC40ODE3NzEgMTEuMzg0NSAwLjI4OTA2MiAxMC43MDc0QzAuMDk2MzU0MiAxMC4wMjUyIDAgOS4zMTk0MiAwIDguNTkwMjZDMCA3Ljg2MTA5IDAuMDk2MzU0MiA3LjE1Nzk2IDAuMjg5MDYyIDYuNDgwODhDMC40ODE3NzEgNS43OTg1OSAwLjc1MjYwNCA1LjE2MDU3IDEuMTAxNTYgNC41NjY4MkMxLjQ1MDUyIDMuOTczMDcgMS44NjcxOSAzLjQzNDAxIDIuMzUxNTYgMi45NDk2M0MyLjg0MTE1IDIuNDYwMDUgMy4zODI4MSAyLjA0MDc4IDMuOTc2NTYgMS42OTE4MkM0LjU3MDMxIDEuMzQyODYgNS4yMDU3MyAxLjA3MjAzIDUuODgyODEgMC44NzkzMThDNi41NjUxIDAuNjg2NjEgNy4yNzA4MyAwLjU5MDI1NiA4IDAuNTkwMjU2Wk01LjQ3NjU2IDcuNzQ2NTFDNS4zNjcxOSA3Ljc0NjUxIDUuMjYwNDIgNy43Njk5NCA1LjE1NjI1IDcuODE2ODJDNS4wNTcyOSA3Ljg2MzY5IDQuOTY4NzUgNy45MjYxOSA0Ljg5MDYyIDguMDA0MzJDNC44MTI1IDguMDgyNDQgNC43NSA4LjE3MzU5IDQuNzAzMTIgOC4yNzc3NkM0LjY1NjI1IDguMzc2NzEgNC42MzI4MSA4LjQ4MDg4IDQuNjMyODEgOC41OTAyNkM0LjYzMjgxIDguNjk5NjMgNC42NTYyNSA4LjgwNjQgNC43MDMxMiA4LjkxMDU3QzQuNzUgOS4wMDk1MyA0LjgxMjUgOS4wOTgwNyA0Ljg5MDYyIDkuMTc2MTlDNC45Njg3NSA5LjI1NDMyIDUuMDU3MjkgOS4zMTY4MiA1LjE1NjI1IDkuMzYzNjlDNS4yNjA0MiA5LjQxMDU3IDUuMzY3MTkgOS40MzQwMSA1LjQ3NjU2IDkuNDM0MDFIMTAuNTIzNEMxMC42MzI4IDkuNDM0MDEgMTAuNzM3IDkuNDEwNTcgMTAuODM1OSA5LjM2MzY5QzEwLjk0MDEgOS4zMTY4MiAxMS4wMzEyIDkuMjU0MzIgMTEuMTA5NCA5LjE3NjE5QzExLjE4NzUgOS4wOTgwNyAxMS4yNSA5LjAwOTUzIDExLjI5NjkgOC45MTA1N0MxMS4zNDM4IDguODA2NCAxMS4zNjcyIDguNjk5NjMgMTEuMzY3MiA4LjU5MDI2QzExLjM2NzIgOC40ODA4OCAxMS4zNDM4IDguMzc2NzEgMTEuMjk2OSA4LjI3Nzc2QzExLjI1IDguMTczNTkgMTEuMTg3NSA4LjA4MjQ0IDExLjEwOTQgOC4wMDQzMkMxMS4wMzEyIDcuOTI2MTkgMTAuOTQwMSA3Ljg2MzY5IDEwLjgzNTkgNy44MTY4MkMxMC43MzcgNy43Njk5NCAxMC42MzI4IDcuNzQ2NTEgMTAuNTIzNCA3Ljc0NjUxSDUuNDc2NTZaXCIsZmlsbDpcIiNDMjEzMTNcIn0pfSkpLHQuT2ZmbGluZVNWRz0oKT0+KDAsci5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE3XCIsdmlld0JveDpcIjAgMCAxNiAxN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSx7Y2hpbGRyZW46KDAsci5qc3gpKFwicGF0aFwiLHtkOlwiTTggMC45OTAyNTJDOC43MzQzOCAwLjk5MDI1MiA5LjQ0MDEgMS4wODY2MSAxMC4xMTcyIDEuMjc5MzFDMTAuNzk0MyAxLjQ3MjAyIDExLjQyOTcgMS43NDI4NiAxMi4wMjM0IDIuMDkxODFDMTIuNjE3MiAyLjQ0MDc3IDEzLjE1NjIgMi44NjAwNCAxMy42NDA2IDMuMzQ5NjNDMTQuMTMwMiAzLjgzNCAxNC41NDk1IDQuMzczMDYgMTQuODk4NCA0Ljk2NjgxQzE1LjI0NzQgNS41NjA1NiAxNS41MTgyIDYuMTk1OTggMTUuNzEwOSA2Ljg3MzA2QzE1LjkwMzYgNy41NTAxNSAxNiA4LjI1NTg4IDE2IDguOTkwMjVDMTYgOS43MTk0MiAxNS45MDM2IDEwLjQyNTEgMTUuNzEwOSAxMS4xMDc0QzE1LjUxODIgMTEuNzg0NSAxNS4yNDc0IDEyLjQxOTkgMTQuODk4NCAxMy4wMTM3QzE0LjU0OTUgMTMuNjA3NCAxNC4xMzAyIDE0LjE0OTEgMTMuNjQwNiAxNC42Mzg3QzEzLjE1NjIgMTUuMTIzMSAxMi42MTcyIDE1LjUzOTcgMTIuMDIzNCAxNS44ODg3QzExLjQyOTcgMTYuMjM3NiAxMC43OTE3IDE2LjUwODUgMTAuMTA5NCAxNi43MDEyQzkuNDMyMjkgMTYuODkzOSA4LjcyOTE3IDE2Ljk5MDMgOCAxNi45OTAzQzcuMjcwODMgMTYuOTkwMyA2LjU2NTEgMTYuODkzOSA1Ljg4MjgxIDE2LjcwMTJDNS4yMDU3MyAxNi41MDg1IDQuNTcwMzEgMTYuMjM3NiAzLjk3NjU2IDE1Ljg4ODdDMy4zODI4MSAxNS41Mzk3IDIuODQxMTUgMTUuMTIzMSAyLjM1MTU2IDE0LjYzODdDMS44NjcxOSAxNC4xNDkxIDEuNDUwNTIgMTMuNjA3NCAxLjEwMTU2IDEzLjAxMzdDMC43NTI2MDQgMTIuNDE5OSAwLjQ4MTc3MSAxMS43ODQ1IDAuMjg5MDYyIDExLjEwNzRDMC4wOTYzNTQyIDEwLjQyNTEgMCA5LjcxOTQyIDAgOC45OTAyNUMwIDguMjYxMDkgMC4wOTYzNTQyIDcuNTU3OTYgMC4yODkwNjIgNi44ODA4OEMwLjQ4MTc3MSA2LjE5ODU5IDAuNzUyNjA0IDUuNTYwNTYgMS4xMDE1NiA0Ljk2NjgxQzEuNDUwNTIgNC4zNzMwNiAxLjg2NzE5IDMuODM0IDIuMzUxNTYgMy4zNDk2M0MyLjg0MTE1IDIuODYwMDQgMy4zODI4MSAyLjQ0MDc3IDMuOTc2NTYgMi4wOTE4MUM0LjU3MDMxIDEuNzQyODYgNS4yMDU3MyAxLjQ3MjAyIDUuODgyODEgMS4yNzkzMUM2LjU2NTEgMS4wODY2MSA3LjI3MDgzIDAuOTkwMjUyIDggMC45OTAyNTJaTTggMi42Nzc3NUM3LjQyMTg4IDIuNjc3NzUgNi44NjQ1OCAyLjc1MzI3IDYuMzI4MTIgMi45MDQzMUM1Ljc5MTY3IDMuMDU1MzYgNS4yODkwNiAzLjI2ODkgNC44MjAzMSAzLjU0NDk0QzQuMzUxNTYgMy44MjA5OCAzLjkyNDQ4IDQuMTUxNzEgMy41MzkwNiA0LjUzNzEzQzMuMTU4ODUgNC45MTczNCAyLjgzMDczIDUuMzQxODEgMi41NTQ2OSA1LjgxMDU2QzIuMjc4NjUgNi4yNzkzMSAyLjA2NTEgNi43ODE5MiAxLjkxNDA2IDcuMzE4MzhDMS43NjMwMiA3Ljg1NDg0IDEuNjg3NSA4LjQxMjEzIDEuNjg3NSA4Ljk5MDI1QzEuNjg3NSA5LjU2ODM4IDEuNzYzMDIgMTAuMTI1NyAxLjkxNDA2IDEwLjY2MjFDMi4wNjUxIDExLjE5ODYgMi4yNzg2NSAxMS43MDEyIDIuNTU0NjkgMTIuMTY5OUMyLjgzMDczIDEyLjYzODcgMy4xNTg4NSAxMy4wNjU4IDMuNTM5MDYgMTMuNDUxMkMzLjkyNDQ4IDEzLjgzMTQgNC4zNTE1NiAxNC4xNTk1IDQuODIwMzEgMTQuNDM1NkM1LjI4OTA2IDE0LjcxMTYgNS43OTE2NyAxNC45MjUxIDYuMzI4MTIgMTUuMDc2MkM2Ljg2NDU4IDE1LjIyNzIgNy40MjE4OCAxNS4zMDI4IDggMTUuMzAyOEM4LjU3ODEyIDE1LjMwMjggOS4xMzU0MiAxNS4yMjcyIDkuNjcxODggMTUuMDc2MkMxMC4yMDgzIDE0LjkyNTEgMTAuNzEwOSAxNC43MTE2IDExLjE3OTcgMTQuNDM1NkMxMS42NDg0IDE0LjE1OTUgMTIuMDcyOSAxMy44MzE0IDEyLjQ1MzEgMTMuNDUxMkMxMi44Mzg1IDEzLjA2NTggMTMuMTY5MyAxMi42Mzg3IDEzLjQ0NTMgMTIuMTY5OUMxMy43MjE0IDExLjcwMTIgMTMuOTM0OSAxMS4xOTg2IDE0LjA4NTkgMTAuNjYyMUMxNC4yMzcgMTAuMTI1NyAxNC4zMTI1IDkuNTY4MzggMTQuMzEyNSA4Ljk5MDI1QzE0LjMxMjUgOC40MTIxMyAxNC4yMzcgNy44NTQ4NCAxNC4wODU5IDcuMzE4MzhDMTMuOTM0OSA2Ljc4MTkyIDEzLjcyMTQgNi4yNzkzMSAxMy40NDUzIDUuODEwNTZDMTMuMTY5MyA1LjM0MTgxIDEyLjgzODUgNC45MTczNCAxMi40NTMxIDQuNTM3MTNDMTIuMDcyOSA0LjE1MTcxIDExLjY0ODQgMy44MjA5OCAxMS4xNzk3IDMuNTQ0OTRDMTAuNzEwOSAzLjI2ODkgMTAuMjA4MyAzLjA1NTM2IDkuNjcxODggMi45MDQzMUM5LjEzNTQyIDIuNzUzMjcgOC41NzgxMiAyLjY3Nzc1IDggMi42Nzc3NVpcIixmaWxsOlwiIzk3OTc5N1wifSl9KSl9LDM0Mjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9KSxpPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZyKHQsZSxuKTtyZXR1cm4gbyh0LGUpLHR9LGE9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbD10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbnRhY3RDYXJkPXZvaWQgMDtjb25zdCBzPW4oNTg5MyksYz1pKG4oNjY4OSkpLHU9bChuKDc1MTgpKSxmPW4oNTM3NyksZD1uKDc0NDQpLHA9big5NzU4KSxoPW4oODgzMik7dC5Db250YWN0Q2FyZD1lPT57dmFye25hbWU6dCx0aXRsZTpuLHBob3RvVXJsOnIsdXNlSW5pdGlhbHM6bz0hMSxkZXRhaWxzOmksb25saW5lU3RhdHVzOmx9PWUsdT1hKGUsW1wibmFtZVwiLFwidGl0bGVcIixcInBob3RvVXJsXCIsXCJ1c2VJbml0aWFsc1wiLFwiZGV0YWlsc1wiLFwib25saW5lU3RhdHVzXCJdKTtjb25zdCBmPXJ8fG8sRT0oMCxjLnVzZU1lbW8pKCgoKT0+KDAsZC5nZXRJbml0aWFscykodCkpLFt0XSksUz0oMCxjLnVzZU1lbW8pKCgoKT0+KDAsaC5nZW5lcmF0ZUNvbG9yRnJvbVN0cmluZykodCkpLFt0XSksaj0oMCxjLmNyZWF0ZVJlZikoKTtyZXR1cm4oMCxjLnVzZUVmZmVjdCkoKCgpPT57dmFyIGU7bnVsbD09PShlPWouY3VycmVudCl8fHZvaWQgMD09PWV8fGUuc2Nyb2xsVG8oMCwwKX0pKSwoMCxzLmpzeHMpKGcsT2JqZWN0LmFzc2lnbih7fSx1LHtjaGlsZHJlbjpbKDAscy5qc3hzKSh2LHtjaGlsZHJlbjpbZiYmKDAscy5qc3hzKShtLE9iamVjdC5hc3NpZ24oe2ljb25Db2xvcjpTfSx7Y2hpbGRyZW46W3I/KDAscy5qc3gpKHkse2FsdDpuLHNyYzpyfSk6KDAscy5qc3gpKEMse2NoaWxkcmVuOkV9KSwoMCxzLmpzeCkocC5Db250YWN0U3RhdHVzSWNvbix7b25saW5lU3RhdHVzOmx9KV19KSksKDAscy5qc3hzKSh3LHtjaGlsZHJlbjpbKDAscy5qc3hzKShiLHtjaGlsZHJlbjpbXCIgXCIsdCxcIiBcIl19KSxuJiYoMCxzLmpzeHMpKHgse2NoaWxkcmVuOltcIiBcIixuLFwiIFwiXX0pXX0pXX0pLCgwLHMuanN4KShPLHt9KSwoMCxzLmpzeCkoXyxPYmplY3QuYXNzaWduKHtyZWY6an0se2NoaWxkcmVuOihudWxsPT1pP3ZvaWQgMDppLmxlbmd0aCk+MD9pLm1hcCgoKGUsbik9PigwLHMuanN4cykoYy5kZWZhdWx0LkZyYWdtZW50LHtjaGlsZHJlbjpbKDAscy5qc3gpKEwse2RlZmluaXRpb25zOmV9KSxuPGkubGVuZ3RoLTEmJigwLHMuanN4KShPLHtwYWRkaW5nOiEwfSldfSxgJHt0fS1kZXRhaWxzLSR7bn1gKSkpOigwLHMuanN4KShcInBcIix7Y2hpbGRyZW46XCJObyBpbmZvcm1hdGlvbiBhdmFpbGFibGUuXCJ9KX0pKV19KSl9O2NvbnN0IGc9dS5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiAxMDAlO1xuYCx2PXUuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmctYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbmAsbT11LmRlZmF1bHQuZGl2YFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2U9PmUuaWNvbkNvbG9yfTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICBoZWlnaHQ6IDYwcHg7XG4gIHdpZHRoOiA2MHB4O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmAsQz11LmRlZmF1bHQuc3BhbmBcbiAgZm9udC1zaXplOiAyNHB4O1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuYCx5PXUuZGVmYXVsdC5pbWdgXG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgb2JqZWN0LWZpdDogY292ZXI7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuYCx3PXUuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgbWluLXdpZHRoOiAwO1xuICBtYXJnaW4tbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbmAsYj11LmRlZmF1bHQuc3BhbmBcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmxhcmdlfTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwYWRkaW5nLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICBmb250LXdlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5mb250V2VpZ2h0LmJvbGR9O1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbmAseD11LmRlZmF1bHQuc3BhbmBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwYWRkaW5nLWJvdHRvbTogMnB4O1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbmAsXz11LmRlZmF1bHQuZGl2YFxuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIGZsZXg6IDE7XG4gIG1hcmdpbi10b3A6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICBtYXJnaW4tYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBwYWRkaW5nLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuYCxPPXUuZGVmYXVsdC5kaXZgXG4gIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICBtYXJnaW4tYm90dG9tOiAkeyh7dGhlbWU6ZSxwYWRkaW5nOnR9KT0+dCYmZS5weC5iYXNlfTtcbmAsTD0oMCx1LmRlZmF1bHQpKGYuRGVmaW5pdGlvbkxpc3QpYFxuICBkdCB7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgfVxuXG4gIGRkIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cbmB9LDMxODg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDM0MjkpLHQpfSw3NDQ0OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5nZXRJbml0aWFscz12b2lkIDAsdC5nZXRJbml0aWFscz1lPT57Y29uc3QgdD1lLnRyaW0oKSxuPXQubGFzdEluZGV4T2YoXCIgXCIpO3JldHVybiBuPi0xP1t0LmNoYXJBdCgwKSx0LmNoYXJBdChuKzEpXS5qb2luKFwiXCIpOnQuc2xpY2UoMCwyKX19LDE5OTY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5INj10Lkg1PXQuSDQ9dC5IMz10LkgyPXQuSDE9dC5IZWFkaW5nPXQuZGVmYXVsdFNpemU9dm9pZCAwO2NvbnN0IGk9big1ODkzKSxhPW8obig3NTE4KSksbD1uKDM0NzEpLHM9big3NzY5KTt0LmRlZmF1bHRTaXplPXtoMTpsLlNpemUueHh4bGFyZ2UsaDI6bC5TaXplLnh4bGFyZ2UsaDM6bC5TaXplLnhsYXJnZSxoNDpsLlNpemUubGFyZ2UsaDU6bC5TaXplLmJhc2UsaDY6bC5TaXplLnNtYWxsfSx0LkhlYWRpbmc9ZT0+e3ZhcntsZXZlbDpuPTEsY2xhc3NOYW1lOm99PWUsYT1yKGUsW1wibGV2ZWxcIixcImNsYXNzTmFtZVwiXSk7Y29uc3QgbD1gaCR7bn1gO3JldHVybigwLGkuanN4KShjLE9iamVjdC5hc3NpZ24oe2NsYXNzTmFtZTpvLGFzOmwsc2l6ZTp0LmRlZmF1bHRTaXplW2xdLHdlaWdodDpcImJvbGRcIn0sYSkpfTtjb25zdCBjPSgwLGEuZGVmYXVsdCkocy5UZXh0KWBcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC5oZWFkaW5nfTtcbmA7dC5IMT0oMCxhLmRlZmF1bHQpKHQuSGVhZGluZykuYXR0cnMoKGU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bGV2ZWw6MX0pKSlgYCx0LkgyPSgwLGEuZGVmYXVsdCkodC5IZWFkaW5nKS5hdHRycygoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtsZXZlbDoyfSkpKWBgLHQuSDM9KDAsYS5kZWZhdWx0KSh0LkhlYWRpbmcpLmF0dHJzKChlPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2xldmVsOjN9KSkpYGAsdC5IND0oMCxhLmRlZmF1bHQpKHQuSGVhZGluZykuYXR0cnMoKGU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bGV2ZWw6NH0pKSlgYCx0Lkg1PSgwLGEuZGVmYXVsdCkodC5IZWFkaW5nKS5hdHRycygoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtsZXZlbDo1fSkpKWBgLHQuSDY9KDAsYS5kZWZhdWx0KSh0LkhlYWRpbmcpLmF0dHJzKChlPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2xldmVsOjZ9KSkpYGB9LDcwNjM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDE5OTYpLHQpfSw3NzY5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig1NDMxKSx0KX0sNTQzMTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5UZXh0PXZvaWQgMDtjb25zdCBvPXIobig3NTE4KSk7dC5UZXh0PW8uZGVmYXVsdC5zcGFuYFxuICBjb2xvcjogJHsoe3RoZW1lOmUsY29sb3I6dD1cInRleHREZWZhdWx0XCJ9KT0+ZS5wYWxldHRlW3RdfTtcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZSxzaXplOnQ9XCJiYXNlXCJ9KT0+ZS5mb250U2l6ZVt0XX07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZSx3ZWlnaHQ6dD1cIm5vcm1hbFwifSk9PmUuZm9udFdlaWdodFt0XX07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQudGV4dH07XG5gLHQuVGV4dC5kaXNwbGF5TmFtZT1cIlRleHRcIn0sMzE5MDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VDb2xvclNjaGVtZT10LkNvbG9yU2NoZW1lPXZvaWQgMDtjb25zdCByPW4oNjY4OSk7dC5Db2xvclNjaGVtZT17ZGFyazpcImRhcmtcIixsaWdodDpcImxpZ2h0XCIsc3lzdGVtOlwic3lzdGVtXCJ9LHQudXNlQ29sb3JTY2hlbWU9KHtjb2xvclNjaGVtZTplLGZhbGxiYWNrU2NoZW1lOm49dC5Db2xvclNjaGVtZS5saWdodH0pPT57Y29uc3RbaSxhXT0oMCxyLnVzZVN0YXRlKShlJiZlIT09dC5Db2xvclNjaGVtZS5zeXN0ZW0/ZTpuKSxsPXQ9PnthKG8odCxlfHxuKSl9O3JldHVybigwLHIudXNlRWZmZWN0KSgoKCk9Pntjb25zdCB0PXdpbmRvdy5tYXRjaE1lZGlhKFwiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKVwiKTtyZXR1cm4gYShvKHQsZXx8bikpLHQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLGwpLCgpPT50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixsKX0pLFtlLGldKSxpfTtjb25zdCBvPShlLG4pPT5uPT09dC5Db2xvclNjaGVtZS5zeXN0ZW0/ZS5tYXRjaGVzP3QuQ29sb3JTY2hlbWUuZGFyazp0LkNvbG9yU2NoZW1lLmxpZ2h0Om59LDM0NzooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VEcm9wZG93bktleWJvYXJkTmF2aWdhdGlvbj12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpO3QudXNlRHJvcGRvd25LZXlib2FyZE5hdmlnYXRpb249KGUsdCxuLG8saSk9Pntjb25zdFthLGxdPSgwLHIudXNlU3RhdGUpKDApLFtzLGNdPSgwLHIudXNlU3RhdGUpKFwiXCIpO2xldCB1O2lmKCgwLHIudXNlRWZmZWN0KSgoKCk9PntpZih0JiYhbil7Y29uc3Qgbj1lLmZsYXQoKS5maW5kSW5kZXgoKGU9PmUudmFsdWU9PT10LnZhbHVlKSk7bj49MCYmbChuKX19KSxbZSx0LG5dKSwoMCxyLnVzZUVmZmVjdCkoKCgpPT57bnx8YyhcIlwiKX0pLFtuXSksKDAsci51c2VFZmZlY3QpKCgoKT0+e2lmKHMpe2NvbnN0IHQ9ZS5mbGF0KCkuZmluZEluZGV4KChlPT5lLnRpdGxlLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChzLnRvTG93ZXJDYXNlKCkpKSk7dD49MCYmbCh0KX19KSxbZSxzXSksZVswXS5sZW5ndGg+MCYmZS5mbGF0KCkubGVuZ3RoPmEpe2NvbnN0W3Qsbl09W01hdGguZmxvb3IoYS9lWzBdLmxlbmd0aCksYSVlWzBdLmxlbmd0aF07dT1lW3RdW25dfXJldHVybigwLHIudXNlRWZmZWN0KSgoKCk9Pntjb25zdCBlPXNldFRpbWVvdXQoKCgpPT57YyhcIlwiKX0pLDUwMCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dChlKX0pLFtzXSkse2ZvY3VzZWRPcHRpb246dSxoYW5kbGVLZXlEb3duOnQ9Pntzd2l0Y2godC5jb2RlKXtjYXNlXCJBcnJvd1VwXCI6dC5wcmV2ZW50RGVmYXVsdCgpLGE+MCYmbChhLTEpO2JyZWFrO2Nhc2VcIkFycm93RG93blwiOnQucHJldmVudERlZmF1bHQoKSxhPGUuZmxhdCgpLmxlbmd0aC0xJiZsKGErMSk7YnJlYWs7Y2FzZVwiRW50ZXJcIjpjYXNlXCJTcGFjZVwiOnQucHJldmVudERlZmF1bHQoKSxuPygobnVsbD09dT92b2lkIDA6dS5vdmVycmlkZU9uQ2xpY2spP3Uub3ZlcnJpZGVPbkNsaWNrKCk6aShudWxsIT11P3U6ZVswXVswXSksbygpKTpvKCk7YnJlYWs7Y2FzZVwiRXNjYXBlXCI6dC5wcmV2ZW50RGVmYXVsdCgpLG8oITEpO2JyZWFrO2RlZmF1bHQ6L15bYS16MC05XSQvaS50ZXN0KHQua2V5KSYmYygoZT0+ZSt0LmtleSkpfX19fX0sNDQ4MTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VMYXlvdXRNZWRpYVF1ZXJ5PXQudXNlTWVkaWFRdWVyeT12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpLG89ZT0+dD0+e2NvbnN0W24sb109KDAsci51c2VTdGF0ZSkoITEpO3JldHVybiBlKCgoKT0+e2NvbnN0IGU9d2luZG93Lm1hdGNoTWVkaWEodCk7aWYoZSl7ZS5tYXRjaGVzIT09biYmbyhlLm1hdGNoZXMpO2NvbnN0IHQ9KCk9Pm8oZS5tYXRjaGVzKSxyPSgpPT5lLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIix0KTtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsdCkscn19KSxbbix0XSksbn07dC51c2VNZWRpYVF1ZXJ5PW8oci51c2VFZmZlY3QpLHQudXNlTGF5b3V0TWVkaWFRdWVyeT1vKHIudXNlTGF5b3V0RWZmZWN0KX0sMjc3NjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VQcmV2aW91cz12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpO3QudXNlUHJldmlvdXM9ZT0+e2NvbnN0IHQ9KDAsci51c2VSZWYpKCk7cmV0dXJuKDAsci51c2VFZmZlY3QpKCgoKT0+e3QuY3VycmVudD1lfSksW2VdKSx0LmN1cnJlbnR9fSw3MDg4OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVRoZW1lPXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1uKDQyNjYpLGk9bigzMTkwKSxhPW4oOTUwNyksbD1uKDY0ODYpLHM9e1tpLkNvbG9yU2NoZW1lLmRhcmtdOm8uT3BlbkZpbkRhcmtUaGVtZSxbaS5Db2xvclNjaGVtZS5saWdodF06by5PcGVuRmluTGlnaHRUaGVtZX07dC51c2VUaGVtZT0oe3RoZW1lczplLHNjaGVtZTp0fSk9PntsZXQgbj17fTtjb25zdCBvPSgwLGkudXNlQ29sb3JTY2hlbWUpKHtjb2xvclNjaGVtZTp0fSk7dHJ5e249KDAsci51c2VNZW1vKSgoKCk9PigoZSx0KT0+e2NvbnN0IG49bnVsbD09dD92b2lkIDA6dFtlXTtsZXQgcj1PYmplY3QuYXNzaWduKHt9LHNbZV0pO3JldHVybiBuJiZuLnBhbGV0dGUmJihyPSgwLGwubWVyZ2UpKHIsbiwoMCxhLmNyZWF0ZVRoZW1lKShuLnBhbGV0dGUpKSkscn0pKG8sZSkpLFtlLG9dKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfXJldHVybiBufX0sMzQxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig0MTMwKSx0KSxvKG4oNzQwMSksdCksbyhuKDk1MDEpLHQpLG8obig0OTI1KSx0KSxvKG4oMjYwOSksdCksbyhuKDMxMzYpLHQpLG8obig5NzM0KSx0KSxvKG4oNjAyNiksdCksbyhuKDk2MzQpLHQpLG8obigxNDQpLHQpLG8obig5MjM5KSx0KSxvKG4oODg3OCksdCksbyhuKDg1MTApLHQpLG8obig4OTUxKSx0KSxvKG4oMTk3OCksdCksbyhuKDgwNTEpLHQpLG8obig0MTY5KSx0KSxvKG4oMzY0MSksdCksbyhuKDUyMTUpLHQpLG8obig5NjU0KSx0KSxvKG4oMzExOSksdCksbyhuKDEzMzUpLHQpLG8obig1Mzc3KSx0KSxvKG4oMzg3NyksdCksbyhuKDMxODgpLHQpLG8obig3MDYzKSx0KSxvKG4oNzc2OSksdCksbyhuKDMxOTApLHQpLG8obig0NDgxKSx0KSxvKG4oMjc3NiksdCksbyhuKDM0NyksdCksbyhuKDQ5OTEpLHQpLG8obig4ODMyKSx0KSxvKG4oNzAzMCksdCksbyhuKDYyMTgpLHQpfSw4ODMyOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5nZW5lcmF0ZUNvbG9yRnJvbVN0cmluZz12b2lkIDAsdC5nZW5lcmF0ZUNvbG9yRnJvbVN0cmluZz1mdW5jdGlvbihlPVwiXCIsdD03MCxuPTUwKXtsZXQgcj0wO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXI9ZS5jaGFyQ29kZUF0KHQpKygocjw8NSktciksciY9cjtyZXR1cm5gaHNsKCR7ciUzNjB9LCAke3R9JSwgJHtufSUpYH19LDQ5OTE6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LndoZW5GaW49dm9pZCAwLHQud2hlbkZpbj1mdW5jdGlvbihlLHQpe2NvbnN0IG49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGZpbj9lOnQ7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uKCk6bn19LDY1NTooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtfX2Fzc2lnbjooKT0+aSxfX2FzeW5jRGVsZWdhdG9yOigpPT5MLF9fYXN5bmNHZW5lcmF0b3I6KCk9Pk8sX19hc3luY1ZhbHVlczooKT0+RSxfX2F3YWl0OigpPT5fLF9fYXdhaXRlcjooKT0+aCxfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0OigpPT5SLF9fY2xhc3NQcml2YXRlRmllbGRJbjooKT0+SSxfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0OigpPT5QLF9fY3JlYXRlQmluZGluZzooKT0+dixfX2RlY29yYXRlOigpPT5sLF9fZXNEZWNvcmF0ZTooKT0+YyxfX2V4cG9ydFN0YXI6KCk9Pm0sX19leHRlbmRzOigpPT5vLF9fZ2VuZXJhdG9yOigpPT5nLF9faW1wb3J0RGVmYXVsdDooKT0+ayxfX2ltcG9ydFN0YXI6KCk9Pk0sX19tYWtlVGVtcGxhdGVPYmplY3Q6KCk9PlMsX19tZXRhZGF0YTooKT0+cCxfX3BhcmFtOigpPT5zLF9fcHJvcEtleTooKT0+ZixfX3JlYWQ6KCk9PnksX19yZXN0OigpPT5hLF9fcnVuSW5pdGlhbGl6ZXJzOigpPT51LF9fc2V0RnVuY3Rpb25OYW1lOigpPT5kLF9fc3ByZWFkOigpPT53LF9fc3ByZWFkQXJyYXk6KCk9PngsX19zcHJlYWRBcnJheXM6KCk9PmIsX192YWx1ZXM6KCk9PkN9KTt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybiByPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX0scihlLHQpfTtmdW5jdGlvbiBvKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIrU3RyaW5nKHQpK1wiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1yKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfXZhciBpPWZ1bmN0aW9uKCl7cmV0dXJuIGk9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbbl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZnVuY3Rpb24gYShlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59ZnVuY3Rpb24gbChlLHQsbixyKXt2YXIgbyxpPWFyZ3VtZW50cy5sZW5ndGgsYT1pPDM/dDpudWxsPT09cj9yPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTpyO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKWE9UmVmbGVjdC5kZWNvcmF0ZShlLHQsbixyKTtlbHNlIGZvcih2YXIgbD1lLmxlbmd0aC0xO2w+PTA7bC0tKShvPWVbbF0pJiYoYT0oaTwzP28oYSk6aT4zP28odCxuLGEpOm8odCxuKSl8fGEpO3JldHVybiBpPjMmJmEmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4sYSksYX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dChuLHIsZSl9fWZ1bmN0aW9uIGMoZSx0LG4scixvLGkpe2Z1bmN0aW9uIGEoZSl7aWYodm9pZCAwIT09ZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7cmV0dXJuIGV9Zm9yKHZhciBsLHM9ci5raW5kLGM9XCJnZXR0ZXJcIj09PXM/XCJnZXRcIjpcInNldHRlclwiPT09cz9cInNldFwiOlwidmFsdWVcIix1PSF0JiZlP3Iuc3RhdGljP2U6ZS5wcm90b3R5cGU6bnVsbCxmPXR8fCh1P09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodSxyLm5hbWUpOnt9KSxkPSExLHA9bi5sZW5ndGgtMTtwPj0wO3AtLSl7dmFyIGg9e307Zm9yKHZhciBnIGluIHIpaFtnXT1cImFjY2Vzc1wiPT09Zz97fTpyW2ddO2Zvcih2YXIgZyBpbiByLmFjY2VzcyloLmFjY2Vzc1tnXT1yLmFjY2Vzc1tnXTtoLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKGUpe2lmKGQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTtpLnB1c2goYShlfHxudWxsKSl9O3ZhciB2PSgwLG5bcF0pKFwiYWNjZXNzb3JcIj09PXM/e2dldDpmLmdldCxzZXQ6Zi5zZXR9OmZbY10saCk7aWYoXCJhY2Nlc3NvclwiPT09cyl7aWYodm9pZCAwPT09diljb250aW51ZTtpZihudWxsPT09dnx8XCJvYmplY3RcIiE9dHlwZW9mIHYpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTsobD1hKHYuZ2V0KSkmJihmLmdldD1sKSwobD1hKHYuc2V0KSkmJihmLnNldD1sKSwobD1hKHYuaW5pdCkpJiZvLnB1c2gobCl9ZWxzZShsPWEodikpJiYoXCJmaWVsZFwiPT09cz9vLnB1c2gobCk6ZltjXT1sKX11JiZPYmplY3QuZGVmaW5lUHJvcGVydHkodSxyLm5hbWUsZiksZD0hMH1mdW5jdGlvbiB1KGUsdCxuKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLG89MDtvPHQubGVuZ3RoO28rKyluPXI/dFtvXS5jYWxsKGUsbik6dFtvXS5jYWxsKGUpO3JldHVybiByP246dm9pZCAwfWZ1bmN0aW9uIGYoZSl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIGU/ZTpcIlwiLmNvbmNhdChlKX1mdW5jdGlvbiBkKGUsdCxuKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdCYmKHQ9dC5kZXNjcmlwdGlvbj9cIltcIi5jb25jYXQodC5kZXNjcmlwdGlvbixcIl1cIik6XCJcIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJuYW1lXCIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpuP1wiXCIuY29uY2F0KG4sXCIgXCIsdCk6dH0pfWZ1bmN0aW9uIHAoZSx0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSlyZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShlLHQpfWZ1bmN0aW9uIGgoZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKG8saSl7ZnVuY3Rpb24gYShlKXt0cnl7cyhyLm5leHQoZSkpfWNhdGNoKGUpe2koZSl9fWZ1bmN0aW9uIGwoZSl7dHJ5e3Moci50aHJvdyhlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gcyhlKXt2YXIgdDtlLmRvbmU/byhlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYSxsKX1zKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9ZnVuY3Rpb24gZyhlLHQpe3ZhciBuLHIsbyxpLGE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmb1swXSl0aHJvdyBvWzFdO3JldHVybiBvWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGk9e25leHQ6bCgwKSx0aHJvdzpsKDEpLHJldHVybjpsKDIpfSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihpW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGk7ZnVuY3Rpb24gbChsKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKGwpe2lmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7Zm9yKDtpJiYoaT0wLGxbMF0mJihhPTApKSxhOyl0cnl7aWYobj0xLHImJihvPTImbFswXT9yLnJldHVybjpsWzBdP3IudGhyb3d8fCgobz1yLnJldHVybikmJm8uY2FsbChyKSwwKTpyLm5leHQpJiYhKG89by5jYWxsKHIsbFsxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKHI9MCxvJiYobD1bMiZsWzBdLG8udmFsdWVdKSxsWzBdKXtjYXNlIDA6Y2FzZSAxOm89bDticmVhaztjYXNlIDQ6cmV0dXJuIGEubGFiZWwrKyx7dmFsdWU6bFsxXSxkb25lOiExfTtjYXNlIDU6YS5sYWJlbCsrLHI9bFsxXSxsPVswXTtjb250aW51ZTtjYXNlIDc6bD1hLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChvPShvPWEudHJ5cykubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pfHw2IT09bFswXSYmMiE9PWxbMF0pKXthPTA7Y29udGludWV9aWYoMz09PWxbMF0mJighb3x8bFsxXT5vWzBdJiZsWzFdPG9bM10pKXthLmxhYmVsPWxbMV07YnJlYWt9aWYoNj09PWxbMF0mJmEubGFiZWw8b1sxXSl7YS5sYWJlbD1vWzFdLG89bDticmVha31pZihvJiZhLmxhYmVsPG9bMl0pe2EubGFiZWw9b1syXSxhLm9wcy5wdXNoKGwpO2JyZWFrfW9bMl0mJmEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZX1sPXQuY2FsbChlLGEpfWNhdGNoKGUpe2w9WzYsZV0scj0wfWZpbmFsbHl7bj1vPTB9aWYoNSZsWzBdKXRocm93IGxbMV07cmV0dXJue3ZhbHVlOmxbMF0/bFsxXTp2b2lkIDAsZG9uZTohMH19KFtsLHNdKX19fXZhciB2PU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX07ZnVuY3Rpb24gbShlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHYodCxlLG4pfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3Isbj10JiZlW3RdLHI9MDtpZihuKXJldHVybiBuLmNhbGwoZSk7aWYoZSYmXCJudW1iZXJcIj09dHlwZW9mIGUubGVuZ3RoKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGUmJnI+PWUubGVuZ3RoJiYoZT12b2lkIDApLHt2YWx1ZTplJiZlW3IrK10sZG9uZTohZX19fTt0aHJvdyBuZXcgVHlwZUVycm9yKHQ/XCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiOlwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKX1mdW5jdGlvbiB5KGUsdCl7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIGU7dmFyIHIsbyxpPW4uY2FsbChlKSxhPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT10fHx0LS0gPjApJiYhKHI9aS5uZXh0KCkpLmRvbmU7KWEucHVzaChyLnZhbHVlKX1jYXRjaChlKXtvPXtlcnJvcjplfX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYobj1pLnJldHVybikmJm4uY2FsbChpKX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIGF9ZnVuY3Rpb24gdygpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllPWUuY29uY2F0KHkoYXJndW1lbnRzW3RdKSk7cmV0dXJuIGV9ZnVuY3Rpb24gYigpe2Zvcih2YXIgZT0wLHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGg7dDxuO3QrKyllKz1hcmd1bWVudHNbdF0ubGVuZ3RoO3ZhciByPUFycmF5KGUpLG89MDtmb3IodD0wO3Q8bjt0KyspZm9yKHZhciBpPWFyZ3VtZW50c1t0XSxhPTAsbD1pLmxlbmd0aDthPGw7YSsrLG8rKylyW29dPWlbYV07cmV0dXJuIHJ9ZnVuY3Rpb24geChlLHQsbil7aWYobnx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciByLG89MCxpPXQubGVuZ3RoO288aTtvKyspIXImJm8gaW4gdHx8KHJ8fChyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsMCxvKSkscltvXT10W29dKTtyZXR1cm4gZS5jb25jYXQocnx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpfWZ1bmN0aW9uIF8oZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfPyh0aGlzLnY9ZSx0aGlzKTpuZXcgXyhlKX1mdW5jdGlvbiBPKGUsdCxuKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTt2YXIgcixvPW4uYXBwbHkoZSx0fHxbXSksaT1bXTtyZXR1cm4gcj17fSxhKFwibmV4dFwiKSxhKFwidGhyb3dcIiksYShcInJldHVyblwiKSxyW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxyO2Z1bmN0aW9uIGEoZSl7b1tlXSYmKHJbZV09ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLHIpe2kucHVzaChbZSx0LG4scl0pPjF8fGwoZSx0KX0pKX0pfWZ1bmN0aW9uIGwoZSx0KXt0cnl7KG49b1tlXSh0KSkudmFsdWUgaW5zdGFuY2VvZiBfP1Byb21pc2UucmVzb2x2ZShuLnZhbHVlLnYpLnRoZW4ocyxjKTp1KGlbMF1bMl0sbil9Y2F0Y2goZSl7dShpWzBdWzNdLGUpfXZhciBufWZ1bmN0aW9uIHMoZSl7bChcIm5leHRcIixlKX1mdW5jdGlvbiBjKGUpe2woXCJ0aHJvd1wiLGUpfWZ1bmN0aW9uIHUoZSx0KXtlKHQpLGkuc2hpZnQoKSxpLmxlbmd0aCYmbChpWzBdWzBdLGlbMF1bMV0pfX1mdW5jdGlvbiBMKGUpe3ZhciB0LG47cmV0dXJuIHQ9e30scihcIm5leHRcIikscihcInRocm93XCIsKGZ1bmN0aW9uKGUpe3Rocm93IGV9KSkscihcInJldHVyblwiKSx0W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdDtmdW5jdGlvbiByKHIsbyl7dFtyXT1lW3JdP2Z1bmN0aW9uKHQpe3JldHVybihuPSFuKT97dmFsdWU6XyhlW3JdKHQpKSxkb25lOiExfTpvP28odCk6dH06b319ZnVuY3Rpb24gRShlKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTt2YXIgdCxuPWVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdO3JldHVybiBuP24uY2FsbChlKTooZT1DKGUpLHQ9e30scihcIm5leHRcIikscihcInRocm93XCIpLHIoXCJyZXR1cm5cIiksdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdCk7ZnVuY3Rpb24gcihuKXt0W25dPWVbbl0mJmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixvKXshZnVuY3Rpb24oZSx0LG4scil7UHJvbWlzZS5yZXNvbHZlKHIpLnRoZW4oKGZ1bmN0aW9uKHQpe2Uoe3ZhbHVlOnQsZG9uZTpufSl9KSx0KX0ocixvLCh0PWVbbl0odCkpLmRvbmUsdC52YWx1ZSl9KSl9fX1mdW5jdGlvbiBTKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcInJhd1wiLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfXZhciBqPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9O2Z1bmN0aW9uIE0oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdih0LGUsbik7cmV0dXJuIGoodCxlKSx0fWZ1bmN0aW9uIGsoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIFIoZSx0LG4scil7aWYoXCJhXCI9PT1uJiYhcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZSE9PXR8fCFyOiF0LmhhcyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO3JldHVyblwibVwiPT09bj9yOlwiYVwiPT09bj9yLmNhbGwoZSk6cj9yLnZhbHVlOnQuZ2V0KGUpfWZ1bmN0aW9uIFAoZSx0LG4scixvKXtpZihcIm1cIj09PXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtpZihcImFcIj09PXImJiFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD9lIT09dHx8IW86IXQuaGFzKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtyZXR1cm5cImFcIj09PXI/by5jYWxsKGUsbik6bz9vLnZhbHVlPW46dC5zZXQoZSxuKSxufWZ1bmN0aW9uIEkoZSx0KXtpZihudWxsPT09dHx8XCJvYmplY3RcIiE9dHlwZW9mIHQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/dD09PWU6ZS5oYXModCl9fSw2MDM2OmU9PntlLmV4cG9ydHM9XCJodHRwczovL2Nkbi5vcGVuZmluLmNvL3VpLWxpYnJhcnkvZm9udHMvSW50ZXItSXRhbGljLndvZmYyXCJ9LDQ2Njg6ZT0+e2UuZXhwb3J0cz1cImh0dHBzOi8vY2RuLm9wZW5maW4uY28vdWktbGlicmFyeS9mb250cy9JbnRlci1SZWd1bGFyLndvZmYyXCJ9LDU5NDE6ZT0+e2UuZXhwb3J0cz1cImh0dHBzOi8vY2RuLm9wZW5maW4uY28vdWktbGlicmFyeS9mb250cy9JbnRlci1TZW1pQm9sZC53b2ZmMlwifSwyODEzOmU9PntlLmV4cG9ydHM9XCJodHRwczovL2Nkbi5vcGVuZmluLmNvL3VpLWxpYnJhcnkvZm9udHMvSW50ZXItU2VtaUJvbGRJdGFsaWMud29mZjJcIn0sNjY4OTplPT57ZS5leHBvcnRzPW4oNzM3OCl9LDc1MTg6ZT0+e2UuZXhwb3J0cz1uKDI5MjEpfSw4MjA3OmZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cmV0dXJuKGU9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0pKHQpfXZhciB0PS9eXFxzKy8sbj0vXFxzKyQvO2Z1bmN0aW9uIHIobyxpKXtpZihpPWl8fHt9LChvPW98fFwiXCIpaW5zdGFuY2VvZiByKXJldHVybiBvO2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBuZXcgcihvLGkpO3ZhciBhPWZ1bmN0aW9uKHIpe3ZhciBvLGksYSxsPXtyOjAsZzowLGI6MH0scz0xLGM9bnVsbCx1PW51bGwsZj1udWxsLGQ9ITEscD0hMTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgciYmKHI9ZnVuY3Rpb24oZSl7ZT1lLnJlcGxhY2UodCxcIlwiKS5yZXBsYWNlKG4sXCJcIikudG9Mb3dlckNhc2UoKTt2YXIgcixvPSExO2lmKHdbZV0pZT13W2VdLG89ITA7ZWxzZSBpZihcInRyYW5zcGFyZW50XCI9PWUpcmV0dXJue3I6MCxnOjAsYjowLGE6MCxmb3JtYXQ6XCJuYW1lXCJ9O3JldHVybihyPUkucmdiLmV4ZWMoZSkpP3tyOnJbMV0sZzpyWzJdLGI6clszXX06KHI9SS5yZ2JhLmV4ZWMoZSkpP3tyOnJbMV0sZzpyWzJdLGI6clszXSxhOnJbNF19OihyPUkuaHNsLmV4ZWMoZSkpP3toOnJbMV0sczpyWzJdLGw6clszXX06KHI9SS5oc2xhLmV4ZWMoZSkpP3toOnJbMV0sczpyWzJdLGw6clszXSxhOnJbNF19OihyPUkuaHN2LmV4ZWMoZSkpP3toOnJbMV0sczpyWzJdLHY6clszXX06KHI9SS5oc3ZhLmV4ZWMoZSkpP3toOnJbMV0sczpyWzJdLHY6clszXSxhOnJbNF19OihyPUkuaGV4OC5leGVjKGUpKT97cjpMKHJbMV0pLGc6TChyWzJdKSxiOkwoclszXSksYTpNKHJbNF0pLGZvcm1hdDpvP1wibmFtZVwiOlwiaGV4OFwifToocj1JLmhleDYuZXhlYyhlKSk/e3I6TChyWzFdKSxnOkwoclsyXSksYjpMKHJbM10pLGZvcm1hdDpvP1wibmFtZVwiOlwiaGV4XCJ9OihyPUkuaGV4NC5leGVjKGUpKT97cjpMKHJbMV0rXCJcIityWzFdKSxnOkwoclsyXStcIlwiK3JbMl0pLGI6TChyWzNdK1wiXCIrclszXSksYTpNKHJbNF0rXCJcIityWzRdKSxmb3JtYXQ6bz9cIm5hbWVcIjpcImhleDhcIn06ISEocj1JLmhleDMuZXhlYyhlKSkmJntyOkwoclsxXStcIlwiK3JbMV0pLGc6TChyWzJdK1wiXCIrclsyXSksYjpMKHJbM10rXCJcIityWzNdKSxmb3JtYXQ6bz9cIm5hbWVcIjpcImhleFwifX0ocikpLFwib2JqZWN0XCI9PWUocikmJihBKHIucikmJkEoci5nKSYmQShyLmIpPyhvPXIucixpPXIuZyxhPXIuYixsPXtyOjI1NSpfKG8sMjU1KSxnOjI1NSpfKGksMjU1KSxiOjI1NSpfKGEsMjU1KX0sZD0hMCxwPVwiJVwiPT09U3RyaW5nKHIucikuc3Vic3RyKC0xKT9cInByZ2JcIjpcInJnYlwiKTpBKHIuaCkmJkEoci5zKSYmQShyLnYpPyhjPVMoci5zKSx1PVMoci52KSxsPWZ1bmN0aW9uKGUsdCxuKXtlPTYqXyhlLDM2MCksdD1fKHQsMTAwKSxuPV8obiwxMDApO3ZhciByPU1hdGguZmxvb3IoZSksbz1lLXIsaT1uKigxLXQpLGE9biooMS1vKnQpLGw9biooMS0oMS1vKSp0KSxzPXIlNjtyZXR1cm57cjoyNTUqW24sYSxpLGksbCxuXVtzXSxnOjI1NSpbbCxuLG4sYSxpLGldW3NdLGI6MjU1KltpLGksbCxuLG4sYV1bc119fShyLmgsYyx1KSxkPSEwLHA9XCJoc3ZcIik6QShyLmgpJiZBKHIucykmJkEoci5sKSYmKGM9UyhyLnMpLGY9UyhyLmwpLGw9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8saTtmdW5jdGlvbiBhKGUsdCxuKXtyZXR1cm4gbjwwJiYobis9MSksbj4xJiYobi09MSksbjwxLzY/ZSs2Kih0LWUpKm46bjwuNT90Om48Mi8zP2UrKHQtZSkqKDIvMy1uKSo2OmV9aWYoZT1fKGUsMzYwKSx0PV8odCwxMDApLG49XyhuLDEwMCksMD09PXQpcj1vPWk9bjtlbHNle3ZhciBsPW48LjU/biooMSt0KTpuK3Qtbip0LHM9MipuLWw7cj1hKHMsbCxlKzEvMyksbz1hKHMsbCxlKSxpPWEocyxsLGUtMS8zKX1yZXR1cm57cjoyNTUqcixnOjI1NSpvLGI6MjU1Kml9fShyLmgsYyxmKSxkPSEwLHA9XCJoc2xcIiksci5oYXNPd25Qcm9wZXJ0eShcImFcIikmJihzPXIuYSkpLHM9eChzKSx7b2s6ZCxmb3JtYXQ6ci5mb3JtYXR8fHAscjpNYXRoLm1pbigyNTUsTWF0aC5tYXgobC5yLDApKSxnOk1hdGgubWluKDI1NSxNYXRoLm1heChsLmcsMCkpLGI6TWF0aC5taW4oMjU1LE1hdGgubWF4KGwuYiwwKSksYTpzfX0obyk7dGhpcy5fb3JpZ2luYWxJbnB1dD1vLHRoaXMuX3I9YS5yLHRoaXMuX2c9YS5nLHRoaXMuX2I9YS5iLHRoaXMuX2E9YS5hLHRoaXMuX3JvdW5kQT1NYXRoLnJvdW5kKDEwMCp0aGlzLl9hKS8xMDAsdGhpcy5fZm9ybWF0PWkuZm9ybWF0fHxhLmZvcm1hdCx0aGlzLl9ncmFkaWVudFR5cGU9aS5ncmFkaWVudFR5cGUsdGhpcy5fcjwxJiYodGhpcy5fcj1NYXRoLnJvdW5kKHRoaXMuX3IpKSx0aGlzLl9nPDEmJih0aGlzLl9nPU1hdGgucm91bmQodGhpcy5fZykpLHRoaXMuX2I8MSYmKHRoaXMuX2I9TWF0aC5yb3VuZCh0aGlzLl9iKSksdGhpcy5fb2s9YS5va31mdW5jdGlvbiBvKGUsdCxuKXtlPV8oZSwyNTUpLHQ9Xyh0LDI1NSksbj1fKG4sMjU1KTt2YXIgcixvLGk9TWF0aC5tYXgoZSx0LG4pLGE9TWF0aC5taW4oZSx0LG4pLGw9KGkrYSkvMjtpZihpPT1hKXI9bz0wO2Vsc2V7dmFyIHM9aS1hO3N3aXRjaChvPWw+LjU/cy8oMi1pLWEpOnMvKGkrYSksaSl7Y2FzZSBlOnI9KHQtbikvcysodDxuPzY6MCk7YnJlYWs7Y2FzZSB0OnI9KG4tZSkvcysyO2JyZWFrO2Nhc2UgbjpyPShlLXQpL3MrNH1yLz02fXJldHVybntoOnIsczpvLGx9fWZ1bmN0aW9uIGkoZSx0LG4pe2U9XyhlLDI1NSksdD1fKHQsMjU1KSxuPV8obiwyNTUpO3ZhciByLG8saT1NYXRoLm1heChlLHQsbiksYT1NYXRoLm1pbihlLHQsbiksbD1pLHM9aS1hO2lmKG89MD09PWk/MDpzL2ksaT09YSlyPTA7ZWxzZXtzd2l0Y2goaSl7Y2FzZSBlOnI9KHQtbikvcysodDxuPzY6MCk7YnJlYWs7Y2FzZSB0OnI9KG4tZSkvcysyO2JyZWFrO2Nhc2UgbjpyPShlLXQpL3MrNH1yLz02fXJldHVybntoOnIsczpvLHY6bH19ZnVuY3Rpb24gYShlLHQsbixyKXt2YXIgbz1bRShNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KSksRShNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KSksRShNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KSldO3JldHVybiByJiZvWzBdLmNoYXJBdCgwKT09b1swXS5jaGFyQXQoMSkmJm9bMV0uY2hhckF0KDApPT1vWzFdLmNoYXJBdCgxKSYmb1syXS5jaGFyQXQoMCk9PW9bMl0uY2hhckF0KDEpP29bMF0uY2hhckF0KDApK29bMV0uY2hhckF0KDApK29bMl0uY2hhckF0KDApOm8uam9pbihcIlwiKX1mdW5jdGlvbiBsKGUsdCxuLHIpe3JldHVybltFKGoocikpLEUoTWF0aC5yb3VuZChlKS50b1N0cmluZygxNikpLEUoTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikpLEUoTWF0aC5yb3VuZChuKS50b1N0cmluZygxNikpXS5qb2luKFwiXCIpfWZ1bmN0aW9uIHMoZSx0KXt0PTA9PT10PzA6dHx8MTA7dmFyIG49cihlKS50b0hzbCgpO3JldHVybiBuLnMtPXQvMTAwLG4ucz1PKG4ucykscihuKX1mdW5jdGlvbiBjKGUsdCl7dD0wPT09dD8wOnR8fDEwO3ZhciBuPXIoZSkudG9Ic2woKTtyZXR1cm4gbi5zKz10LzEwMCxuLnM9TyhuLnMpLHIobil9ZnVuY3Rpb24gdShlKXtyZXR1cm4gcihlKS5kZXNhdHVyYXRlKDEwMCl9ZnVuY3Rpb24gZihlLHQpe3Q9MD09PXQ/MDp0fHwxMDt2YXIgbj1yKGUpLnRvSHNsKCk7cmV0dXJuIG4ubCs9dC8xMDAsbi5sPU8obi5sKSxyKG4pfWZ1bmN0aW9uIGQoZSx0KXt0PTA9PT10PzA6dHx8MTA7dmFyIG49cihlKS50b1JnYigpO3JldHVybiBuLnI9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsbi5yLU1hdGgucm91bmQoLXQvMTAwKjI1NSkpKSxuLmc9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsbi5nLU1hdGgucm91bmQoLXQvMTAwKjI1NSkpKSxuLmI9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsbi5iLU1hdGgucm91bmQoLXQvMTAwKjI1NSkpKSxyKG4pfWZ1bmN0aW9uIHAoZSx0KXt0PTA9PT10PzA6dHx8MTA7dmFyIG49cihlKS50b0hzbCgpO3JldHVybiBuLmwtPXQvMTAwLG4ubD1PKG4ubCkscihuKX1mdW5jdGlvbiBoKGUsdCl7dmFyIG49cihlKS50b0hzbCgpLG89KG4uaCt0KSUzNjA7cmV0dXJuIG4uaD1vPDA/MzYwK286byxyKG4pfWZ1bmN0aW9uIGcoZSl7dmFyIHQ9cihlKS50b0hzbCgpO3JldHVybiB0Lmg9KHQuaCsxODApJTM2MCxyKHQpfWZ1bmN0aW9uIHYoZSx0KXtpZihpc05hTih0KXx8dDw9MCl0aHJvdyBuZXcgRXJyb3IoXCJBcmd1bWVudCB0byBwb2x5YWQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclwiKTtmb3IodmFyIG49cihlKS50b0hzbCgpLG89W3IoZSldLGk9MzYwL3QsYT0xO2E8dDthKyspby5wdXNoKHIoe2g6KG4uaCthKmkpJTM2MCxzOm4ucyxsOm4ubH0pKTtyZXR1cm4gb31mdW5jdGlvbiBtKGUpe3ZhciB0PXIoZSkudG9Ic2woKSxuPXQuaDtyZXR1cm5bcihlKSxyKHtoOihuKzcyKSUzNjAsczp0LnMsbDp0Lmx9KSxyKHtoOihuKzIxNiklMzYwLHM6dC5zLGw6dC5sfSldfWZ1bmN0aW9uIEMoZSx0LG4pe3Q9dHx8NixuPW58fDMwO3ZhciBvPXIoZSkudG9Ic2woKSxpPTM2MC9uLGE9W3IoZSldO2ZvcihvLmg9KG8uaC0oaSp0Pj4xKSs3MjApJTM2MDstLXQ7KW8uaD0oby5oK2kpJTM2MCxhLnB1c2gocihvKSk7cmV0dXJuIGF9ZnVuY3Rpb24geShlLHQpe3Q9dHx8Njtmb3IodmFyIG49cihlKS50b0hzdigpLG89bi5oLGk9bi5zLGE9bi52LGw9W10scz0xL3Q7dC0tOylsLnB1c2gocih7aDpvLHM6aSx2OmF9KSksYT0oYStzKSUxO3JldHVybiBsfXIucHJvdG90eXBlPXtpc0Rhcms6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCcmlnaHRuZXNzKCk8MTI4fSxpc0xpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNEYXJrKCl9LGlzVmFsaWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb2t9LGdldE9yaWdpbmFsSW5wdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxJbnB1dH0sZ2V0Rm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Zvcm1hdH0sZ2V0QWxwaGE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYX0sZ2V0QnJpZ2h0bmVzczpmdW5jdGlvbigpe3ZhciBlPXRoaXMudG9SZ2IoKTtyZXR1cm4oMjk5KmUucis1ODcqZS5nKzExNCplLmIpLzFlM30sZ2V0THVtaW5hbmNlOmZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI9dGhpcy50b1JnYigpO3JldHVybiBlPXIuci8yNTUsdD1yLmcvMjU1LG49ci5iLzI1NSwuMjEyNiooZTw9LjAzOTI4P2UvMTIuOTI6TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KSkrLjcxNTIqKHQ8PS4wMzkyOD90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCkpKy4wNzIyKihuPD0uMDM5Mjg/bi8xMi45MjpNYXRoLnBvdygobisuMDU1KS8xLjA1NSwyLjQpKX0sc2V0QWxwaGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2E9eChlKSx0aGlzLl9yb3VuZEE9TWF0aC5yb3VuZCgxMDAqdGhpcy5fYSkvMTAwLHRoaXN9LHRvSHN2OmZ1bmN0aW9uKCl7dmFyIGU9aSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKmUuaCxzOmUucyx2OmUudixhOnRoaXMuX2F9fSx0b0hzdlN0cmluZzpmdW5jdGlvbigpe3ZhciBlPWkodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLHQ9TWF0aC5yb3VuZCgzNjAqZS5oKSxuPU1hdGgucm91bmQoMTAwKmUucykscj1NYXRoLnJvdW5kKDEwMCplLnYpO3JldHVybiAxPT10aGlzLl9hP1wiaHN2KFwiK3QrXCIsIFwiK24rXCIlLCBcIityK1wiJSlcIjpcImhzdmEoXCIrdCtcIiwgXCIrbitcIiUsIFwiK3IrXCIlLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvSHNsOmZ1bmN0aW9uKCl7dmFyIGU9byh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKmUuaCxzOmUucyxsOmUubCxhOnRoaXMuX2F9fSx0b0hzbFN0cmluZzpmdW5jdGlvbigpe3ZhciBlPW8odGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLHQ9TWF0aC5yb3VuZCgzNjAqZS5oKSxuPU1hdGgucm91bmQoMTAwKmUucykscj1NYXRoLnJvdW5kKDEwMCplLmwpO3JldHVybiAxPT10aGlzLl9hP1wiaHNsKFwiK3QrXCIsIFwiK24rXCIlLCBcIityK1wiJSlcIjpcImhzbGEoXCIrdCtcIiwgXCIrbitcIiUsIFwiK3IrXCIlLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvSGV4OmZ1bmN0aW9uKGUpe3JldHVybiBhKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLGUpfSx0b0hleFN0cmluZzpmdW5jdGlvbihlKXtyZXR1cm5cIiNcIit0aGlzLnRvSGV4KGUpfSx0b0hleDg6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGk9W0UoTWF0aC5yb3VuZChlKS50b1N0cmluZygxNikpLEUoTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikpLEUoTWF0aC5yb3VuZChuKS50b1N0cmluZygxNikpLEUoaihyKSldO3JldHVybiBvJiZpWzBdLmNoYXJBdCgwKT09aVswXS5jaGFyQXQoMSkmJmlbMV0uY2hhckF0KDApPT1pWzFdLmNoYXJBdCgxKSYmaVsyXS5jaGFyQXQoMCk9PWlbMl0uY2hhckF0KDEpJiZpWzNdLmNoYXJBdCgwKT09aVszXS5jaGFyQXQoMSk/aVswXS5jaGFyQXQoMCkraVsxXS5jaGFyQXQoMCkraVsyXS5jaGFyQXQoMCkraVszXS5jaGFyQXQoMCk6aS5qb2luKFwiXCIpfSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0aGlzLl9hLGUpfSx0b0hleDhTdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuXCIjXCIrdGhpcy50b0hleDgoZSl9LHRvUmdiOmZ1bmN0aW9uKCl7cmV0dXJue3I6TWF0aC5yb3VuZCh0aGlzLl9yKSxnOk1hdGgucm91bmQodGhpcy5fZyksYjpNYXRoLnJvdW5kKHRoaXMuX2IpLGE6dGhpcy5fYX19LHRvUmdiU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PXRoaXMuX2E/XCJyZ2IoXCIrTWF0aC5yb3VuZCh0aGlzLl9yKStcIiwgXCIrTWF0aC5yb3VuZCh0aGlzLl9nKStcIiwgXCIrTWF0aC5yb3VuZCh0aGlzLl9iKStcIilcIjpcInJnYmEoXCIrTWF0aC5yb3VuZCh0aGlzLl9yKStcIiwgXCIrTWF0aC5yb3VuZCh0aGlzLl9nKStcIiwgXCIrTWF0aC5yb3VuZCh0aGlzLl9iKStcIiwgXCIrdGhpcy5fcm91bmRBK1wiKVwifSx0b1BlcmNlbnRhZ2VSZ2I6ZnVuY3Rpb24oKXtyZXR1cm57cjpNYXRoLnJvdW5kKDEwMCpfKHRoaXMuX3IsMjU1KSkrXCIlXCIsZzpNYXRoLnJvdW5kKDEwMCpfKHRoaXMuX2csMjU1KSkrXCIlXCIsYjpNYXRoLnJvdW5kKDEwMCpfKHRoaXMuX2IsMjU1KSkrXCIlXCIsYTp0aGlzLl9hfX0sdG9QZXJjZW50YWdlUmdiU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PXRoaXMuX2E/XCJyZ2IoXCIrTWF0aC5yb3VuZCgxMDAqXyh0aGlzLl9yLDI1NSkpK1wiJSwgXCIrTWF0aC5yb3VuZCgxMDAqXyh0aGlzLl9nLDI1NSkpK1wiJSwgXCIrTWF0aC5yb3VuZCgxMDAqXyh0aGlzLl9iLDI1NSkpK1wiJSlcIjpcInJnYmEoXCIrTWF0aC5yb3VuZCgxMDAqXyh0aGlzLl9yLDI1NSkpK1wiJSwgXCIrTWF0aC5yb3VuZCgxMDAqXyh0aGlzLl9nLDI1NSkpK1wiJSwgXCIrTWF0aC5yb3VuZCgxMDAqXyh0aGlzLl9iLDI1NSkpK1wiJSwgXCIrdGhpcy5fcm91bmRBK1wiKVwifSx0b05hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuX2E/XCJ0cmFuc3BhcmVudFwiOiEodGhpcy5fYTwxKSYmKGJbYSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiwhMCldfHwhMSl9LHRvRmlsdGVyOmZ1bmN0aW9uKGUpe3ZhciB0PVwiI1wiK2wodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdGhpcy5fYSksbj10LG89dGhpcy5fZ3JhZGllbnRUeXBlP1wiR3JhZGllbnRUeXBlID0gMSwgXCI6XCJcIjtpZihlKXt2YXIgaT1yKGUpO249XCIjXCIrbChpLl9yLGkuX2csaS5fYixpLl9hKX1yZXR1cm5cInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChcIitvK1wic3RhcnRDb2xvcnN0cj1cIit0K1wiLGVuZENvbG9yc3RyPVwiK24rXCIpXCJ9LHRvU3RyaW5nOmZ1bmN0aW9uKGUpe3ZhciB0PSEhZTtlPWV8fHRoaXMuX2Zvcm1hdDt2YXIgbj0hMSxyPXRoaXMuX2E8MSYmdGhpcy5fYT49MDtyZXR1cm4gdHx8IXJ8fFwiaGV4XCIhPT1lJiZcImhleDZcIiE9PWUmJlwiaGV4M1wiIT09ZSYmXCJoZXg0XCIhPT1lJiZcImhleDhcIiE9PWUmJlwibmFtZVwiIT09ZT8oXCJyZ2JcIj09PWUmJihuPXRoaXMudG9SZ2JTdHJpbmcoKSksXCJwcmdiXCI9PT1lJiYobj10aGlzLnRvUGVyY2VudGFnZVJnYlN0cmluZygpKSxcImhleFwiIT09ZSYmXCJoZXg2XCIhPT1lfHwobj10aGlzLnRvSGV4U3RyaW5nKCkpLFwiaGV4M1wiPT09ZSYmKG49dGhpcy50b0hleFN0cmluZyghMCkpLFwiaGV4NFwiPT09ZSYmKG49dGhpcy50b0hleDhTdHJpbmcoITApKSxcImhleDhcIj09PWUmJihuPXRoaXMudG9IZXg4U3RyaW5nKCkpLFwibmFtZVwiPT09ZSYmKG49dGhpcy50b05hbWUoKSksXCJoc2xcIj09PWUmJihuPXRoaXMudG9Ic2xTdHJpbmcoKSksXCJoc3ZcIj09PWUmJihuPXRoaXMudG9Ic3ZTdHJpbmcoKSksbnx8dGhpcy50b0hleFN0cmluZygpKTpcIm5hbWVcIj09PWUmJjA9PT10aGlzLl9hP3RoaXMudG9OYW1lKCk6dGhpcy50b1JnYlN0cmluZygpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiByKHRoaXMudG9TdHJpbmcoKSl9LF9hcHBseU1vZGlmaWNhdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuPWUuYXBwbHkobnVsbCxbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwodCkpKTtyZXR1cm4gdGhpcy5fcj1uLl9yLHRoaXMuX2c9bi5fZyx0aGlzLl9iPW4uX2IsdGhpcy5zZXRBbHBoYShuLl9hKSx0aGlzfSxsaWdodGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGYsYXJndW1lbnRzKX0sYnJpZ2h0ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZCxhcmd1bWVudHMpfSxkYXJrZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24ocCxhcmd1bWVudHMpfSxkZXNhdHVyYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHMsYXJndW1lbnRzKX0sc2F0dXJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oYyxhcmd1bWVudHMpfSxncmV5c2NhbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24odSxhcmd1bWVudHMpfSxzcGluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGgsYXJndW1lbnRzKX0sX2FwcGx5Q29tYmluYXRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5hcHBseShudWxsLFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbCh0KSkpfSxhbmFsb2dvdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihDLGFyZ3VtZW50cyl9LGNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihnLGFyZ3VtZW50cyl9LG1vbm9jaHJvbWF0aWM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbih5LGFyZ3VtZW50cyl9LHNwbGl0Y29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKG0sYXJndW1lbnRzKX0sdHJpYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbih2LFszXSl9LHRldHJhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHYsWzRdKX19LHIuZnJvbVJhdGlvPWZ1bmN0aW9uKHQsbil7aWYoXCJvYmplY3RcIj09ZSh0KSl7dmFyIG89e307Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKG9baV09XCJhXCI9PT1pP3RbaV06Uyh0W2ldKSk7dD1vfXJldHVybiByKHQsbil9LHIuZXF1YWxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuISghZXx8IXQpJiZyKGUpLnRvUmdiU3RyaW5nKCk9PXIodCkudG9SZ2JTdHJpbmcoKX0sci5yYW5kb209ZnVuY3Rpb24oKXtyZXR1cm4gci5mcm9tUmF0aW8oe3I6TWF0aC5yYW5kb20oKSxnOk1hdGgucmFuZG9tKCksYjpNYXRoLnJhbmRvbSgpfSl9LHIubWl4PWZ1bmN0aW9uKGUsdCxuKXtuPTA9PT1uPzA6bnx8NTA7dmFyIG89cihlKS50b1JnYigpLGk9cih0KS50b1JnYigpLGE9bi8xMDA7cmV0dXJuIHIoe3I6KGkuci1vLnIpKmErby5yLGc6KGkuZy1vLmcpKmErby5nLGI6KGkuYi1vLmIpKmErby5iLGE6KGkuYS1vLmEpKmErby5hfSl9LHIucmVhZGFiaWxpdHk9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yKGUpLG89cih0KTtyZXR1cm4oTWF0aC5tYXgobi5nZXRMdW1pbmFuY2UoKSxvLmdldEx1bWluYW5jZSgpKSsuMDUpLyhNYXRoLm1pbihuLmdldEx1bWluYW5jZSgpLG8uZ2V0THVtaW5hbmNlKCkpKy4wNSl9LHIuaXNSZWFkYWJsZT1mdW5jdGlvbihlLHQsbil7dmFyIG8saSxhLGwscyxjPXIucmVhZGFiaWxpdHkoZSx0KTtzd2l0Y2goaT0hMSwoYT1uLFwiQUFcIiE9PShsPSgoYT1hfHx7bGV2ZWw6XCJBQVwiLHNpemU6XCJzbWFsbFwifSkubGV2ZWx8fFwiQUFcIikudG9VcHBlckNhc2UoKSkmJlwiQUFBXCIhPT1sJiYobD1cIkFBXCIpLFwic21hbGxcIiE9PShzPShhLnNpemV8fFwic21hbGxcIikudG9Mb3dlckNhc2UoKSkmJlwibGFyZ2VcIiE9PXMmJihzPVwic21hbGxcIiksbz17bGV2ZWw6bCxzaXplOnN9KS5sZXZlbCtvLnNpemUpe2Nhc2VcIkFBc21hbGxcIjpjYXNlXCJBQUFsYXJnZVwiOmk9Yz49NC41O2JyZWFrO2Nhc2VcIkFBbGFyZ2VcIjppPWM+PTM7YnJlYWs7Y2FzZVwiQUFBc21hbGxcIjppPWM+PTd9cmV0dXJuIGl9LHIubW9zdFJlYWRhYmxlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbyxpLGEsbCxzPW51bGwsYz0wO2k9KG49bnx8e30pLmluY2x1ZGVGYWxsYmFja0NvbG9ycyxhPW4ubGV2ZWwsbD1uLnNpemU7Zm9yKHZhciB1PTA7dTx0Lmxlbmd0aDt1KyspKG89ci5yZWFkYWJpbGl0eShlLHRbdV0pKT5jJiYoYz1vLHM9cih0W3VdKSk7cmV0dXJuIHIuaXNSZWFkYWJsZShlLHMse2xldmVsOmEsc2l6ZTpsfSl8fCFpP3M6KG4uaW5jbHVkZUZhbGxiYWNrQ29sb3JzPSExLHIubW9zdFJlYWRhYmxlKGUsW1wiI2ZmZlwiLFwiIzAwMFwiXSxuKSl9O3ZhciB3PXIubmFtZXM9e2FsaWNlYmx1ZTpcImYwZjhmZlwiLGFudGlxdWV3aGl0ZTpcImZhZWJkN1wiLGFxdWE6XCIwZmZcIixhcXVhbWFyaW5lOlwiN2ZmZmQ0XCIsYXp1cmU6XCJmMGZmZmZcIixiZWlnZTpcImY1ZjVkY1wiLGJpc3F1ZTpcImZmZTRjNFwiLGJsYWNrOlwiMDAwXCIsYmxhbmNoZWRhbG1vbmQ6XCJmZmViY2RcIixibHVlOlwiMDBmXCIsYmx1ZXZpb2xldDpcIjhhMmJlMlwiLGJyb3duOlwiYTUyYTJhXCIsYnVybHl3b29kOlwiZGViODg3XCIsYnVybnRzaWVubmE6XCJlYTdlNWRcIixjYWRldGJsdWU6XCI1ZjllYTBcIixjaGFydHJldXNlOlwiN2ZmZjAwXCIsY2hvY29sYXRlOlwiZDI2OTFlXCIsY29yYWw6XCJmZjdmNTBcIixjb3JuZmxvd2VyYmx1ZTpcIjY0OTVlZFwiLGNvcm5zaWxrOlwiZmZmOGRjXCIsY3JpbXNvbjpcImRjMTQzY1wiLGN5YW46XCIwZmZcIixkYXJrYmx1ZTpcIjAwMDA4YlwiLGRhcmtjeWFuOlwiMDA4YjhiXCIsZGFya2dvbGRlbnJvZDpcImI4ODYwYlwiLGRhcmtncmF5OlwiYTlhOWE5XCIsZGFya2dyZWVuOlwiMDA2NDAwXCIsZGFya2dyZXk6XCJhOWE5YTlcIixkYXJra2hha2k6XCJiZGI3NmJcIixkYXJrbWFnZW50YTpcIjhiMDA4YlwiLGRhcmtvbGl2ZWdyZWVuOlwiNTU2YjJmXCIsZGFya29yYW5nZTpcImZmOGMwMFwiLGRhcmtvcmNoaWQ6XCI5OTMyY2NcIixkYXJrcmVkOlwiOGIwMDAwXCIsZGFya3NhbG1vbjpcImU5OTY3YVwiLGRhcmtzZWFncmVlbjpcIjhmYmM4ZlwiLGRhcmtzbGF0ZWJsdWU6XCI0ODNkOGJcIixkYXJrc2xhdGVncmF5OlwiMmY0ZjRmXCIsZGFya3NsYXRlZ3JleTpcIjJmNGY0ZlwiLGRhcmt0dXJxdW9pc2U6XCIwMGNlZDFcIixkYXJrdmlvbGV0OlwiOTQwMGQzXCIsZGVlcHBpbms6XCJmZjE0OTNcIixkZWVwc2t5Ymx1ZTpcIjAwYmZmZlwiLGRpbWdyYXk6XCI2OTY5NjlcIixkaW1ncmV5OlwiNjk2OTY5XCIsZG9kZ2VyYmx1ZTpcIjFlOTBmZlwiLGZpcmVicmljazpcImIyMjIyMlwiLGZsb3JhbHdoaXRlOlwiZmZmYWYwXCIsZm9yZXN0Z3JlZW46XCIyMjhiMjJcIixmdWNoc2lhOlwiZjBmXCIsZ2FpbnNib3JvOlwiZGNkY2RjXCIsZ2hvc3R3aGl0ZTpcImY4ZjhmZlwiLGdvbGQ6XCJmZmQ3MDBcIixnb2xkZW5yb2Q6XCJkYWE1MjBcIixncmF5OlwiODA4MDgwXCIsZ3JlZW46XCIwMDgwMDBcIixncmVlbnllbGxvdzpcImFkZmYyZlwiLGdyZXk6XCI4MDgwODBcIixob25leWRldzpcImYwZmZmMFwiLGhvdHBpbms6XCJmZjY5YjRcIixpbmRpYW5yZWQ6XCJjZDVjNWNcIixpbmRpZ286XCI0YjAwODJcIixpdm9yeTpcImZmZmZmMFwiLGtoYWtpOlwiZjBlNjhjXCIsbGF2ZW5kZXI6XCJlNmU2ZmFcIixsYXZlbmRlcmJsdXNoOlwiZmZmMGY1XCIsbGF3bmdyZWVuOlwiN2NmYzAwXCIsbGVtb25jaGlmZm9uOlwiZmZmYWNkXCIsbGlnaHRibHVlOlwiYWRkOGU2XCIsbGlnaHRjb3JhbDpcImYwODA4MFwiLGxpZ2h0Y3lhbjpcImUwZmZmZlwiLGxpZ2h0Z29sZGVucm9keWVsbG93OlwiZmFmYWQyXCIsbGlnaHRncmF5OlwiZDNkM2QzXCIsbGlnaHRncmVlbjpcIjkwZWU5MFwiLGxpZ2h0Z3JleTpcImQzZDNkM1wiLGxpZ2h0cGluazpcImZmYjZjMVwiLGxpZ2h0c2FsbW9uOlwiZmZhMDdhXCIsbGlnaHRzZWFncmVlbjpcIjIwYjJhYVwiLGxpZ2h0c2t5Ymx1ZTpcIjg3Y2VmYVwiLGxpZ2h0c2xhdGVncmF5OlwiNzg5XCIsbGlnaHRzbGF0ZWdyZXk6XCI3ODlcIixsaWdodHN0ZWVsYmx1ZTpcImIwYzRkZVwiLGxpZ2h0eWVsbG93OlwiZmZmZmUwXCIsbGltZTpcIjBmMFwiLGxpbWVncmVlbjpcIjMyY2QzMlwiLGxpbmVuOlwiZmFmMGU2XCIsbWFnZW50YTpcImYwZlwiLG1hcm9vbjpcIjgwMDAwMFwiLG1lZGl1bWFxdWFtYXJpbmU6XCI2NmNkYWFcIixtZWRpdW1ibHVlOlwiMDAwMGNkXCIsbWVkaXVtb3JjaGlkOlwiYmE1NWQzXCIsbWVkaXVtcHVycGxlOlwiOTM3MGRiXCIsbWVkaXVtc2VhZ3JlZW46XCIzY2IzNzFcIixtZWRpdW1zbGF0ZWJsdWU6XCI3YjY4ZWVcIixtZWRpdW1zcHJpbmdncmVlbjpcIjAwZmE5YVwiLG1lZGl1bXR1cnF1b2lzZTpcIjQ4ZDFjY1wiLG1lZGl1bXZpb2xldHJlZDpcImM3MTU4NVwiLG1pZG5pZ2h0Ymx1ZTpcIjE5MTk3MFwiLG1pbnRjcmVhbTpcImY1ZmZmYVwiLG1pc3R5cm9zZTpcImZmZTRlMVwiLG1vY2Nhc2luOlwiZmZlNGI1XCIsbmF2YWpvd2hpdGU6XCJmZmRlYWRcIixuYXZ5OlwiMDAwMDgwXCIsb2xkbGFjZTpcImZkZjVlNlwiLG9saXZlOlwiODA4MDAwXCIsb2xpdmVkcmFiOlwiNmI4ZTIzXCIsb3JhbmdlOlwiZmZhNTAwXCIsb3JhbmdlcmVkOlwiZmY0NTAwXCIsb3JjaGlkOlwiZGE3MGQ2XCIscGFsZWdvbGRlbnJvZDpcImVlZThhYVwiLHBhbGVncmVlbjpcIjk4ZmI5OFwiLHBhbGV0dXJxdW9pc2U6XCJhZmVlZWVcIixwYWxldmlvbGV0cmVkOlwiZGI3MDkzXCIscGFwYXlhd2hpcDpcImZmZWZkNVwiLHBlYWNocHVmZjpcImZmZGFiOVwiLHBlcnU6XCJjZDg1M2ZcIixwaW5rOlwiZmZjMGNiXCIscGx1bTpcImRkYTBkZFwiLHBvd2RlcmJsdWU6XCJiMGUwZTZcIixwdXJwbGU6XCI4MDAwODBcIixyZWJlY2NhcHVycGxlOlwiNjYzMzk5XCIscmVkOlwiZjAwXCIscm9zeWJyb3duOlwiYmM4ZjhmXCIscm95YWxibHVlOlwiNDE2OWUxXCIsc2FkZGxlYnJvd246XCI4YjQ1MTNcIixzYWxtb246XCJmYTgwNzJcIixzYW5keWJyb3duOlwiZjRhNDYwXCIsc2VhZ3JlZW46XCIyZThiNTdcIixzZWFzaGVsbDpcImZmZjVlZVwiLHNpZW5uYTpcImEwNTIyZFwiLHNpbHZlcjpcImMwYzBjMFwiLHNreWJsdWU6XCI4N2NlZWJcIixzbGF0ZWJsdWU6XCI2YTVhY2RcIixzbGF0ZWdyYXk6XCI3MDgwOTBcIixzbGF0ZWdyZXk6XCI3MDgwOTBcIixzbm93OlwiZmZmYWZhXCIsc3ByaW5nZ3JlZW46XCIwMGZmN2ZcIixzdGVlbGJsdWU6XCI0NjgyYjRcIix0YW46XCJkMmI0OGNcIix0ZWFsOlwiMDA4MDgwXCIsdGhpc3RsZTpcImQ4YmZkOFwiLHRvbWF0bzpcImZmNjM0N1wiLHR1cnF1b2lzZTpcIjQwZTBkMFwiLHZpb2xldDpcImVlODJlZVwiLHdoZWF0OlwiZjVkZWIzXCIsd2hpdGU6XCJmZmZcIix3aGl0ZXNtb2tlOlwiZjVmNWY1XCIseWVsbG93OlwiZmYwXCIseWVsbG93Z3JlZW46XCI5YWNkMzJcIn0sYj1yLmhleE5hbWVzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJih0W2Vbbl1dPW4pO3JldHVybiB0fSh3KTtmdW5jdGlvbiB4KGUpe3JldHVybiBlPXBhcnNlRmxvYXQoZSksKGlzTmFOKGUpfHxlPDB8fGU+MSkmJihlPTEpLGV9ZnVuY3Rpb24gXyhlLHQpeyhmdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmLTEhPWUuaW5kZXhPZihcIi5cIikmJjE9PT1wYXJzZUZsb2F0KGUpfSkoZSkmJihlPVwiMTAwJVwiKTt2YXIgbj1mdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmLTEhPWUuaW5kZXhPZihcIiVcIil9KGUpO3JldHVybiBlPU1hdGgubWluKHQsTWF0aC5tYXgoMCxwYXJzZUZsb2F0KGUpKSksbiYmKGU9cGFyc2VJbnQoZSp0LDEwKS8xMDApLE1hdGguYWJzKGUtdCk8MWUtNj8xOmUldC9wYXJzZUZsb2F0KHQpfWZ1bmN0aW9uIE8oZSl7cmV0dXJuIE1hdGgubWluKDEsTWF0aC5tYXgoMCxlKSl9ZnVuY3Rpb24gTChlKXtyZXR1cm4gcGFyc2VJbnQoZSwxNil9ZnVuY3Rpb24gRShlKXtyZXR1cm4gMT09ZS5sZW5ndGg/XCIwXCIrZTpcIlwiK2V9ZnVuY3Rpb24gUyhlKXtyZXR1cm4gZTw9MSYmKGU9MTAwKmUrXCIlXCIpLGV9ZnVuY3Rpb24gaihlKXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqcGFyc2VGbG9hdChlKSkudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIEwoZSkvMjU1fXZhciBrLFIsUCxJPShSPVwiW1xcXFxzfFxcXFwoXSsoXCIrKGs9XCIoPzpbLVxcXFwrXT9cXFxcZCpcXFxcLlxcXFxkKyU/KXwoPzpbLVxcXFwrXT9cXFxcZCslPylcIikrXCIpWyx8XFxcXHNdKyhcIitrK1wiKVssfFxcXFxzXSsoXCIraytcIilcXFxccypcXFxcKT9cIixQPVwiW1xcXFxzfFxcXFwoXSsoXCIraytcIilbLHxcXFxcc10rKFwiK2srXCIpWyx8XFxcXHNdKyhcIitrK1wiKVssfFxcXFxzXSsoXCIraytcIilcXFxccypcXFxcKT9cIix7Q1NTX1VOSVQ6bmV3IFJlZ0V4cChrKSxyZ2I6bmV3IFJlZ0V4cChcInJnYlwiK1IpLHJnYmE6bmV3IFJlZ0V4cChcInJnYmFcIitQKSxoc2w6bmV3IFJlZ0V4cChcImhzbFwiK1IpLGhzbGE6bmV3IFJlZ0V4cChcImhzbGFcIitQKSxoc3Y6bmV3IFJlZ0V4cChcImhzdlwiK1IpLGhzdmE6bmV3IFJlZ0V4cChcImhzdmFcIitQKSxoZXgzOi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg2Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkLyxoZXg0Oi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4ODovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvfSk7ZnVuY3Rpb24gQShlKXtyZXR1cm4hIUkuQ1NTX1VOSVQuZXhlYyhlKX1yZXR1cm4gcn0oKX19LG89e307ZnVuY3Rpb24gaShlKXt2YXIgdD1vW2VdO2lmKHZvaWQgMCE9PXQpcmV0dXJuIHQuZXhwb3J0czt2YXIgbj1vW2VdPXtpZDplLGxvYWRlZDohMSxleHBvcnRzOnt9fTtyZXR1cm4gcltlXS5jYWxsKG4uZXhwb3J0cyxuLG4uZXhwb3J0cyxpKSxuLmxvYWRlZD0hMCxuLmV4cG9ydHN9aS5uPWU9Pnt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/KCk9PmUuZGVmYXVsdDooKT0+ZTtyZXR1cm4gaS5kKHQse2E6dH0pLHR9LGkuZD0oZSx0KT0+e2Zvcih2YXIgbiBpbiB0KWkubyh0LG4pJiYhaS5vKGUsbikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0saS5nPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksaS5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxpLnI9ZT0+e1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LGkubm1kPWU9PihlLnBhdGhzPVtdLGUuY2hpbGRyZW58fChlLmNoaWxkcmVuPVtdKSxlKTt2YXIgYT1pKDM0MSksbD10O2Zvcih2YXIgcyBpbiBhKWxbc109YVtzXTthLl9fZXNNb2R1bGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSwzMTk4OihlLHQsbik9Pnt2YXIgcj1OYU4sbz1cIltvYmplY3QgU3ltYm9sXVwiLGk9L15cXHMrfFxccyskL2csYT0vXlstK10weFswLTlhLWZdKyQvaSxsPS9eMGJbMDFdKyQvaSxzPS9eMG9bMC03XSskL2ksYz1wYXJzZUludCx1PVwib2JqZWN0XCI9PXR5cGVvZiBuLmcmJm4uZyYmbi5nLk9iamVjdD09PU9iamVjdCYmbi5nLGY9XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGQ9dXx8Znx8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpLHA9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxoPU1hdGgubWF4LGc9TWF0aC5taW4sdj1mdW5jdGlvbigpe3JldHVybiBkLkRhdGUubm93KCl9O2Z1bmN0aW9uIG0oZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuISFlJiYoXCJvYmplY3RcIj09dHx8XCJmdW5jdGlvblwiPT10KX1mdW5jdGlvbiBDKGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiBlO2lmKGZ1bmN0aW9uKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfHxmdW5jdGlvbihlKXtyZXR1cm4hIWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfShlKSYmcC5jYWxsKGUpPT1vfShlKSlyZXR1cm4gcjtpZihtKGUpKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnZhbHVlT2Y/ZS52YWx1ZU9mKCk6ZTtlPW0odCk/dCtcIlwiOnR9aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuIDA9PT1lP2U6K2U7ZT1lLnJlcGxhY2UoaSxcIlwiKTt2YXIgbj1sLnRlc3QoZSk7cmV0dXJuIG58fHMudGVzdChlKT9jKGUuc2xpY2UoMiksbj8yOjgpOmEudGVzdChlKT9yOitlfWUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIHIsbyxpLGEsbCxzLGM9MCx1PSExLGY9ITEsZD0hMDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIGZ1bmN0aW9uXCIpO2Z1bmN0aW9uIHAodCl7dmFyIG49cixpPW87cmV0dXJuIHI9bz12b2lkIDAsYz10LGE9ZS5hcHBseShpLG4pfWZ1bmN0aW9uIHkoZSl7dmFyIG49ZS1zO3JldHVybiB2b2lkIDA9PT1zfHxuPj10fHxuPDB8fGYmJmUtYz49aX1mdW5jdGlvbiB3KCl7dmFyIGU9digpO2lmKHkoZSkpcmV0dXJuIGIoZSk7bD1zZXRUaW1lb3V0KHcsZnVuY3Rpb24oZSl7dmFyIG49dC0oZS1zKTtyZXR1cm4gZj9nKG4saS0oZS1jKSk6bn0oZSkpfWZ1bmN0aW9uIGIoZSl7cmV0dXJuIGw9dm9pZCAwLGQmJnI/cChlKToocj1vPXZvaWQgMCxhKX1mdW5jdGlvbiB4KCl7dmFyIGU9digpLG49eShlKTtpZihyPWFyZ3VtZW50cyxvPXRoaXMscz1lLG4pe2lmKHZvaWQgMD09PWwpcmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBjPWUsbD1zZXRUaW1lb3V0KHcsdCksdT9wKGUpOmF9KHMpO2lmKGYpcmV0dXJuIGw9c2V0VGltZW91dCh3LHQpLHAocyl9cmV0dXJuIHZvaWQgMD09PWwmJihsPXNldFRpbWVvdXQodyx0KSksYX1yZXR1cm4gdD1DKHQpfHwwLG0obikmJih1PSEhbi5sZWFkaW5nLGk9KGY9XCJtYXhXYWl0XCJpbiBuKT9oKEMobi5tYXhXYWl0KXx8MCx0KTppLGQ9XCJ0cmFpbGluZ1wiaW4gbj8hIW4udHJhaWxpbmc6ZCkseC5jYW5jZWw9ZnVuY3Rpb24oKXt2b2lkIDAhPT1sJiZjbGVhclRpbWVvdXQobCksYz0wLHI9cz1vPWw9dm9pZCAwfSx4LmZsdXNoPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PWw/YTpiKHYoKSl9LHh9fSwyNTI1OmU9PntcInVzZSBzdHJpY3RcIjt2YXIgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxyPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciBlPW5ldyBTdHJpbmcoXCJhYmNcIik7aWYoZVs1XT1cImRlXCIsXCI1XCI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKVswXSlyZXR1cm4hMTtmb3IodmFyIHQ9e30sbj0wO248MTA7bisrKXRbXCJfXCIrU3RyaW5nLmZyb21DaGFyQ29kZShuKV09bjtpZihcIjAxMjM0NTY3ODlcIiE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSkuam9pbihcIlwiKSlyZXR1cm4hMTt2YXIgcj17fTtyZXR1cm5cImFiY2RlZmdoaWprbG1ub3BxcnN0XCIuc3BsaXQoXCJcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cltlXT1lfSkpLFwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIj09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30scikpLmpvaW4oXCJcIil9Y2F0Y2goZSl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24oZSxvKXtmb3IodmFyIGksYSxsPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBPYmplY3QoZSl9KGUpLHM9MTtzPGFyZ3VtZW50cy5sZW5ndGg7cysrKXtmb3IodmFyIGMgaW4gaT1PYmplY3QoYXJndW1lbnRzW3NdKSluLmNhbGwoaSxjKSYmKGxbY109aVtjXSk7aWYodCl7YT10KGkpO2Zvcih2YXIgdT0wO3U8YS5sZW5ndGg7dSsrKXIuY2FsbChpLGFbdV0pJiYobFthW3VdXT1pW2FbdV1dKX19cmV0dXJuIGx9fSw4NzAyOihlLHQpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLHI9bj9TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTo2MDEwMyxvPW4/U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKTo2MDEwNixpPW4/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LGE9bj9TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik6NjAxMDgsbD1uP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTo2MDExNCxzPW4/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LGM9bj9TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTo2MDExMCx1PW4/U3ltYm9sLmZvcihcInJlYWN0LmFzeW5jX21vZGVcIik6NjAxMTEsZj1uP1N5bWJvbC5mb3IoXCJyZWFjdC5jb25jdXJyZW50X21vZGVcIik6NjAxMTEsZD1uP1N5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTo2MDExMixwPW4/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpOjYwMTEzLGg9bj9TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKTo2MDEyMCxnPW4/U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIik6NjAxMTUsdj1uP1N5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpOjYwMTE2LG09bj9TeW1ib2wuZm9yKFwicmVhY3QuYmxvY2tcIik6NjAxMjEsQz1uP1N5bWJvbC5mb3IoXCJyZWFjdC5mdW5kYW1lbnRhbFwiKTo2MDExNyx5PW4/U3ltYm9sLmZvcihcInJlYWN0LnJlc3BvbmRlclwiKTo2MDExOCx3PW4/U3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpOjYwMTE5O2Z1bmN0aW9uIGIoZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lKXt2YXIgdD1lLiQkdHlwZW9mO3N3aXRjaCh0KXtjYXNlIHI6c3dpdGNoKGU9ZS50eXBlKXtjYXNlIHU6Y2FzZSBmOmNhc2UgaTpjYXNlIGw6Y2FzZSBhOmNhc2UgcDpyZXR1cm4gZTtkZWZhdWx0OnN3aXRjaChlPWUmJmUuJCR0eXBlb2Ype2Nhc2UgYzpjYXNlIGQ6Y2FzZSB2OmNhc2UgZzpjYXNlIHM6cmV0dXJuIGU7ZGVmYXVsdDpyZXR1cm4gdH19Y2FzZSBvOnJldHVybiB0fX19ZnVuY3Rpb24geChlKXtyZXR1cm4gYihlKT09PWZ9dC5Gb3J3YXJkUmVmPWQsdC5pc1ZhbGlkRWxlbWVudFR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGV8fGU9PT1pfHxlPT09Znx8ZT09PWx8fGU9PT1hfHxlPT09cHx8ZT09PWh8fFwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmKGUuJCR0eXBlb2Y9PT12fHxlLiQkdHlwZW9mPT09Z3x8ZS4kJHR5cGVvZj09PXN8fGUuJCR0eXBlb2Y9PT1jfHxlLiQkdHlwZW9mPT09ZHx8ZS4kJHR5cGVvZj09PUN8fGUuJCR0eXBlb2Y9PT15fHxlLiQkdHlwZW9mPT09d3x8ZS4kJHR5cGVvZj09PW0pfX0sOTE4NTooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPW4oODcwMil9LDE1MzU6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByPW4oMjUyNSksbz02MDEwMyxpPTYwMTA2O3QuRnJhZ21lbnQ9NjAxMDcsdC5TdHJpY3RNb2RlPTYwMTA4LHQuUHJvZmlsZXI9NjAxMTQ7dmFyIGE9NjAxMDksbD02MDExMCxzPTYwMTEyO3QuU3VzcGVuc2U9NjAxMTM7dmFyIGM9NjAxMTUsdT02MDExNjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciBmPVN5bWJvbC5mb3I7bz1mKFwicmVhY3QuZWxlbWVudFwiKSxpPWYoXCJyZWFjdC5wb3J0YWxcIiksdC5GcmFnbWVudD1mKFwicmVhY3QuZnJhZ21lbnRcIiksdC5TdHJpY3RNb2RlPWYoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSx0LlByb2ZpbGVyPWYoXCJyZWFjdC5wcm9maWxlclwiKSxhPWYoXCJyZWFjdC5wcm92aWRlclwiKSxsPWYoXCJyZWFjdC5jb250ZXh0XCIpLHM9ZihcInJlYWN0LmZvcndhcmRfcmVmXCIpLHQuU3VzcGVuc2U9ZihcInJlYWN0LnN1c3BlbnNlXCIpLGM9ZihcInJlYWN0Lm1lbW9cIiksdT1mKFwicmVhY3QubGF6eVwiKX12YXIgZD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBwKGUpe2Zvcih2YXIgdD1cImh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PVwiK2Usbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdCs9XCImYXJnc1tdPVwiK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbbl0pO3JldHVyblwiTWluaWZpZWQgUmVhY3QgZXJyb3IgI1wiK2UrXCI7IHZpc2l0IFwiK3QrXCIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLlwifXZhciBoPXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fSxnPXt9O2Z1bmN0aW9uIHYoZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9Zyx0aGlzLnVwZGF0ZXI9bnx8aH1mdW5jdGlvbiBtKCl7fWZ1bmN0aW9uIEMoZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9Zyx0aGlzLnVwZGF0ZXI9bnx8aH12LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9LHYucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPWUpdGhyb3cgRXJyb3IocCg4NSkpO3RoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxlLHQsXCJzZXRTdGF0ZVwiKX0sdi5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLGUsXCJmb3JjZVVwZGF0ZVwiKX0sbS5wcm90b3R5cGU9di5wcm90b3R5cGU7dmFyIHk9Qy5wcm90b3R5cGU9bmV3IG07eS5jb25zdHJ1Y3Rvcj1DLHIoeSx2LnByb3RvdHlwZSkseS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgdz17Y3VycmVudDpudWxsfSxiPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkseD17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O2Z1bmN0aW9uIF8oZSx0LG4pe3ZhciByLGk9e30sYT1udWxsLGw9bnVsbDtpZihudWxsIT10KWZvcihyIGluIHZvaWQgMCE9PXQucmVmJiYobD10LnJlZiksdm9pZCAwIT09dC5rZXkmJihhPVwiXCIrdC5rZXkpLHQpYi5jYWxsKHQscikmJiF4Lmhhc093blByb3BlcnR5KHIpJiYoaVtyXT10W3JdKTt2YXIgcz1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PXMpaS5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxzKXtmb3IodmFyIGM9QXJyYXkocyksdT0wO3U8czt1KyspY1t1XT1hcmd1bWVudHNbdSsyXTtpLmNoaWxkcmVuPWN9aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKHIgaW4gcz1lLmRlZmF1bHRQcm9wcyl2b2lkIDA9PT1pW3JdJiYoaVtyXT1zW3JdKTtyZXR1cm57JCR0eXBlb2Y6byx0eXBlOmUsa2V5OmEscmVmOmwscHJvcHM6aSxfb3duZXI6dy5jdXJyZW50fX1mdW5jdGlvbiBPKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmZS4kJHR5cGVvZj09PW99dmFyIEw9L1xcLysvZztmdW5jdGlvbiBFKGUsdCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZudWxsIT1lLmtleT9mdW5jdGlvbihlKXt2YXIgdD17XCI9XCI6XCI9MFwiLFwiOlwiOlwiPTJcIn07cmV0dXJuXCIkXCIrZS5yZXBsYWNlKC9bPTpdL2csKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpfShcIlwiK2Uua2V5KTp0LnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBTKGUsdCxuLHIsYSl7dmFyIGw9dHlwZW9mIGU7XCJ1bmRlZmluZWRcIiE9PWwmJlwiYm9vbGVhblwiIT09bHx8KGU9bnVsbCk7dmFyIHM9ITE7aWYobnVsbD09PWUpcz0hMDtlbHNlIHN3aXRjaChsKXtjYXNlXCJzdHJpbmdcIjpjYXNlXCJudW1iZXJcIjpzPSEwO2JyZWFrO2Nhc2VcIm9iamVjdFwiOnN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIG86Y2FzZSBpOnM9ITB9fWlmKHMpcmV0dXJuIGE9YShzPWUpLGU9XCJcIj09PXI/XCIuXCIrRShzLDApOnIsQXJyYXkuaXNBcnJheShhKT8obj1cIlwiLG51bGwhPWUmJihuPWUucmVwbGFjZShMLFwiJCYvXCIpK1wiL1wiKSxTKGEsdCxuLFwiXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpKTpudWxsIT1hJiYoTyhhKSYmKGE9ZnVuY3Rpb24oZSx0KXtyZXR1cm57JCR0eXBlb2Y6byx0eXBlOmUudHlwZSxrZXk6dCxyZWY6ZS5yZWYscHJvcHM6ZS5wcm9wcyxfb3duZXI6ZS5fb3duZXJ9fShhLG4rKCFhLmtleXx8cyYmcy5rZXk9PT1hLmtleT9cIlwiOihcIlwiK2Eua2V5KS5yZXBsYWNlKEwsXCIkJi9cIikrXCIvXCIpK2UpKSx0LnB1c2goYSkpLDE7aWYocz0wLHI9XCJcIj09PXI/XCIuXCI6citcIjpcIixBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgYz0wO2M8ZS5sZW5ndGg7YysrKXt2YXIgdT1yK0UobD1lW2NdLGMpO3MrPVMobCx0LG4sdSxhKX1lbHNlIGlmKHU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfHxcIm9iamVjdFwiIT10eXBlb2YgZT9udWxsOlwiZnVuY3Rpb25cIj09dHlwZW9mKGU9ZCYmZVtkXXx8ZVtcIkBAaXRlcmF0b3JcIl0pP2U6bnVsbH0oZSksXCJmdW5jdGlvblwiPT10eXBlb2YgdSlmb3IoZT11LmNhbGwoZSksYz0wOyEobD1lLm5leHQoKSkuZG9uZTspcys9UyhsPWwudmFsdWUsdCxuLHU9citFKGwsYysrKSxhKTtlbHNlIGlmKFwib2JqZWN0XCI9PT1sKXRocm93IHQ9XCJcIitlLEVycm9yKHAoMzEsXCJbb2JqZWN0IE9iamVjdF1cIj09PXQ/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhlKS5qb2luKFwiLCBcIikrXCJ9XCI6dCkpO3JldHVybiBzfWZ1bmN0aW9uIGooZSx0LG4pe2lmKG51bGw9PWUpcmV0dXJuIGU7dmFyIHI9W10sbz0wO3JldHVybiBTKGUscixcIlwiLFwiXCIsKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwobixlLG8rKyl9KSkscn1mdW5jdGlvbiBNKGUpe2lmKC0xPT09ZS5fc3RhdHVzKXt2YXIgdD1lLl9yZXN1bHQ7dD10KCksZS5fc3RhdHVzPTAsZS5fcmVzdWx0PXQsdC50aGVuKChmdW5jdGlvbih0KXswPT09ZS5fc3RhdHVzJiYodD10LmRlZmF1bHQsZS5fc3RhdHVzPTEsZS5fcmVzdWx0PXQpfSksKGZ1bmN0aW9uKHQpezA9PT1lLl9zdGF0dXMmJihlLl9zdGF0dXM9MixlLl9yZXN1bHQ9dCl9KSl9aWYoMT09PWUuX3N0YXR1cylyZXR1cm4gZS5fcmVzdWx0O3Rocm93IGUuX3Jlc3VsdH12YXIgaz17Y3VycmVudDpudWxsfTtmdW5jdGlvbiBSKCl7dmFyIGU9ay5jdXJyZW50O2lmKG51bGw9PT1lKXRocm93IEVycm9yKHAoMzIxKSk7cmV0dXJuIGV9dmFyIFA9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6ayxSZWFjdEN1cnJlbnRCYXRjaENvbmZpZzp7dHJhbnNpdGlvbjowfSxSZWFjdEN1cnJlbnRPd25lcjp3LElzU29tZVJlbmRlcmVyQWN0aW5nOntjdXJyZW50OiExfSxhc3NpZ246cn07dC5DaGlsZHJlbj17bWFwOmosZm9yRWFjaDpmdW5jdGlvbihlLHQsbil7aihlLChmdW5jdGlvbigpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksbil9LGNvdW50OmZ1bmN0aW9uKGUpe3ZhciB0PTA7cmV0dXJuIGooZSwoZnVuY3Rpb24oKXt0Kyt9KSksdH0sdG9BcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gaihlLChmdW5jdGlvbihlKXtyZXR1cm4gZX0pKXx8W119LG9ubHk6ZnVuY3Rpb24oZSl7aWYoIU8oZSkpdGhyb3cgRXJyb3IocCgxNDMpKTtyZXR1cm4gZX19LHQuQ29tcG9uZW50PXYsdC5QdXJlQ29tcG9uZW50PUMsdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD1QLHQuY2xvbmVFbGVtZW50PWZ1bmN0aW9uKGUsdCxuKXtpZihudWxsPT1lKXRocm93IEVycm9yKHAoMjY3LGUpKTt2YXIgaT1yKHt9LGUucHJvcHMpLGE9ZS5rZXksbD1lLnJlZixzPWUuX293bmVyO2lmKG51bGwhPXQpe2lmKHZvaWQgMCE9PXQucmVmJiYobD10LnJlZixzPXcuY3VycmVudCksdm9pZCAwIT09dC5rZXkmJihhPVwiXCIrdC5rZXkpLGUudHlwZSYmZS50eXBlLmRlZmF1bHRQcm9wcyl2YXIgYz1lLnR5cGUuZGVmYXVsdFByb3BzO2Zvcih1IGluIHQpYi5jYWxsKHQsdSkmJiF4Lmhhc093blByb3BlcnR5KHUpJiYoaVt1XT12b2lkIDA9PT10W3VdJiZ2b2lkIDAhPT1jP2NbdV06dFt1XSl9dmFyIHU9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT11KWkuY2hpbGRyZW49bjtlbHNlIGlmKDE8dSl7Yz1BcnJheSh1KTtmb3IodmFyIGY9MDtmPHU7ZisrKWNbZl09YXJndW1lbnRzW2YrMl07aS5jaGlsZHJlbj1jfXJldHVybnskJHR5cGVvZjpvLHR5cGU6ZS50eXBlLGtleTphLHJlZjpsLHByb3BzOmksX293bmVyOnN9fSx0LmNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9bnVsbCksKGU9eyQkdHlwZW9mOmwsX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOnQsX2N1cnJlbnRWYWx1ZTplLF9jdXJyZW50VmFsdWUyOmUsX3RocmVhZENvdW50OjAsUHJvdmlkZXI6bnVsbCxDb25zdW1lcjpudWxsfSkuUHJvdmlkZXI9eyQkdHlwZW9mOmEsX2NvbnRleHQ6ZX0sZS5Db25zdW1lcj1lfSx0LmNyZWF0ZUVsZW1lbnQ9Xyx0LmNyZWF0ZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9Xy5iaW5kKG51bGwsZSk7cmV0dXJuIHQudHlwZT1lLHR9LHQuY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19LHQuZm9yd2FyZFJlZj1mdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6cyxyZW5kZXI6ZX19LHQuaXNWYWxpZEVsZW1lbnQ9Tyx0Lmxhenk9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOnUsX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDplfSxfaW5pdDpNfX0sdC5tZW1vPWZ1bmN0aW9uKGUsdCl7cmV0dXJueyQkdHlwZW9mOmMsdHlwZTplLGNvbXBhcmU6dm9pZCAwPT09dD9udWxsOnR9fSx0LnVzZUNhbGxiYWNrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFIoKS51c2VDYWxsYmFjayhlLHQpfSx0LnVzZUNvbnRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUigpLnVzZUNvbnRleHQoZSx0KX0sdC51c2VEZWJ1Z1ZhbHVlPWZ1bmN0aW9uKCl7fSx0LnVzZUVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBSKCkudXNlRWZmZWN0KGUsdCl9LHQudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFIoKS51c2VJbXBlcmF0aXZlSGFuZGxlKGUsdCxuKX0sdC51c2VMYXlvdXRFZmZlY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUigpLnVzZUxheW91dEVmZmVjdChlLHQpfSx0LnVzZU1lbW89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUigpLnVzZU1lbW8oZSx0KX0sdC51c2VSZWR1Y2VyPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUigpLnVzZVJlZHVjZXIoZSx0LG4pfSx0LnVzZVJlZj1mdW5jdGlvbihlKXtyZXR1cm4gUigpLnVzZVJlZihlKX0sdC51c2VTdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gUigpLnVzZVN0YXRlKGUpfSx0LnZlcnNpb249XCIxNy4wLjJcIn0sNzM3ODooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPW4oMTUzNSl9LDI5MjE6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24ucih0KSxuLmQodCx7U2VydmVyU3R5bGVTaGVldDooKT0+cHQsU3R5bGVTaGVldENvbnN1bWVyOigpPT5ndCxTdHlsZVNoZWV0Q29udGV4dDooKT0+aHQsU3R5bGVTaGVldE1hbmFnZXI6KCk9PnZ0LFRoZW1lQ29uc3VtZXI6KCk9PmZ0LFRoZW1lQ29udGV4dDooKT0+dXQsVGhlbWVQcm92aWRlcjooKT0+ZHQsX19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0hBVU5URURfQllfU1BPT0tZX0dIT1NUUzooKT0+RXQsY3JlYXRlR2xvYmFsU3R5bGU6KCk9Pnh0LGNzczooKT0+QmUsZGVmYXVsdDooKT0+U3QsaXNTdHlsZWRDb21wb25lbnQ6KCk9Pk4sa2V5ZnJhbWVzOigpPT5PdCx3aXRoVGhlbWU6KCk9Pkx0fSk7dmFyIHI9bigxOTQ2KSxvPW4ubihyKSxpPW4oNTI0NiksYT1uLm4oaSksbD1uKDczNzgpO2NvbnN0IHM9e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OjEsYm9yZGVySW1hZ2VPdXRzZXQ6MSxib3JkZXJJbWFnZVNsaWNlOjEsYm9yZGVySW1hZ2VXaWR0aDoxLGJveEZsZXg6MSxib3hGbGV4R3JvdXA6MSxib3hPcmRpbmFsR3JvdXA6MSxjb2x1bW5Db3VudDoxLGNvbHVtbnM6MSxmbGV4OjEsZmxleEdyb3c6MSxmbGV4UG9zaXRpdmU6MSxmbGV4U2hyaW5rOjEsZmxleE5lZ2F0aXZlOjEsZmxleE9yZGVyOjEsZ3JpZFJvdzoxLGdyaWRSb3dFbmQ6MSxncmlkUm93U3BhbjoxLGdyaWRSb3dTdGFydDoxLGdyaWRDb2x1bW46MSxncmlkQ29sdW1uRW5kOjEsZ3JpZENvbHVtblNwYW46MSxncmlkQ29sdW1uU3RhcnQ6MSxtc0dyaWRSb3c6MSxtc0dyaWRSb3dTcGFuOjEsbXNHcmlkQ29sdW1uOjEsbXNHcmlkQ29sdW1uU3BhbjoxLGZvbnRXZWlnaHQ6MSxsaW5lSGVpZ2h0OjEsb3BhY2l0eToxLG9yZGVyOjEsb3JwaGFuczoxLHRhYlNpemU6MSx3aWRvd3M6MSx6SW5kZXg6MSx6b29tOjEsV2Via2l0TGluZUNsYW1wOjEsZmlsbE9wYWNpdHk6MSxmbG9vZE9wYWNpdHk6MSxzdG9wT3BhY2l0eToxLHN0cm9rZURhc2hhcnJheToxLHN0cm9rZURhc2hvZmZzZXQ6MSxzdHJva2VNaXRlcmxpbWl0OjEsc3Ryb2tlT3BhY2l0eToxLHN0cm9rZVdpZHRoOjF9O3ZhciBjPW4oOTE4NSksdT1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZlIT1lfTtmdW5jdGlvbiBmKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihyPWVbbl0sbz10W25dLCEocj09PW98fHUocikmJnUobykpKXJldHVybiExO3ZhciByLG87cmV0dXJuITB9Y29uc3QgZD1mdW5jdGlvbihlLHQpe3ZhciBuO3ZvaWQgMD09PXQmJih0PWYpO3ZhciByLG89W10saT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGE9W10sbD0wO2w8YXJndW1lbnRzLmxlbmd0aDtsKyspYVtsXT1hcmd1bWVudHNbbF07cmV0dXJuIGkmJm49PT10aGlzJiZ0KGEsbyl8fChyPWUuYXBwbHkodGhpcyxhKSxpPSEwLG49dGhpcyxvPWEpLHJ9fTt2YXIgcD0vXigoY2hpbGRyZW58ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUx8a2V5fHJlZnxhdXRvRm9jdXN8ZGVmYXVsdFZhbHVlfGRlZmF1bHRDaGVja2VkfGlubmVySFRNTHxzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmd8c3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nfHZhbHVlTGlua3xhY2NlcHR8YWNjZXB0Q2hhcnNldHxhY2Nlc3NLZXl8YWN0aW9ufGFsbG93fGFsbG93VXNlck1lZGlhfGFsbG93UGF5bWVudFJlcXVlc3R8YWxsb3dGdWxsU2NyZWVufGFsbG93VHJhbnNwYXJlbmN5fGFsdHxhc3luY3xhdXRvQ29tcGxldGV8YXV0b1BsYXl8Y2FwdHVyZXxjZWxsUGFkZGluZ3xjZWxsU3BhY2luZ3xjaGFsbGVuZ2V8Y2hhclNldHxjaGVja2VkfGNpdGV8Y2xhc3NJRHxjbGFzc05hbWV8Y29sc3xjb2xTcGFufGNvbnRlbnR8Y29udGVudEVkaXRhYmxlfGNvbnRleHRNZW51fGNvbnRyb2xzfGNvbnRyb2xzTGlzdHxjb29yZHN8Y3Jvc3NPcmlnaW58ZGF0YXxkYXRlVGltZXxkZWNvZGluZ3xkZWZhdWx0fGRlZmVyfGRpcnxkaXNhYmxlZHxkaXNhYmxlUGljdHVyZUluUGljdHVyZXxkb3dubG9hZHxkcmFnZ2FibGV8ZW5jVHlwZXxmb3JtfGZvcm1BY3Rpb258Zm9ybUVuY1R5cGV8Zm9ybU1ldGhvZHxmb3JtTm9WYWxpZGF0ZXxmb3JtVGFyZ2V0fGZyYW1lQm9yZGVyfGhlYWRlcnN8aGVpZ2h0fGhpZGRlbnxoaWdofGhyZWZ8aHJlZkxhbmd8aHRtbEZvcnxodHRwRXF1aXZ8aWR8aW5wdXRNb2RlfGludGVncml0eXxpc3xrZXlQYXJhbXN8a2V5VHlwZXxraW5kfGxhYmVsfGxhbmd8bGlzdHxsb2FkaW5nfGxvb3B8bG93fG1hcmdpbkhlaWdodHxtYXJnaW5XaWR0aHxtYXh8bWF4TGVuZ3RofG1lZGlhfG1lZGlhR3JvdXB8bWV0aG9kfG1pbnxtaW5MZW5ndGh8bXVsdGlwbGV8bXV0ZWR8bmFtZXxub25jZXxub1ZhbGlkYXRlfG9wZW58b3B0aW11bXxwYXR0ZXJufHBsYWNlaG9sZGVyfHBsYXlzSW5saW5lfHBvc3RlcnxwcmVsb2FkfHByb2ZpbGV8cmFkaW9Hcm91cHxyZWFkT25seXxyZWZlcnJlclBvbGljeXxyZWx8cmVxdWlyZWR8cmV2ZXJzZWR8cm9sZXxyb3dzfHJvd1NwYW58c2FuZGJveHxzY29wZXxzY29wZWR8c2Nyb2xsaW5nfHNlYW1sZXNzfHNlbGVjdGVkfHNoYXBlfHNpemV8c2l6ZXN8c2xvdHxzcGFufHNwZWxsQ2hlY2t8c3JjfHNyY0RvY3xzcmNMYW5nfHNyY1NldHxzdGFydHxzdGVwfHN0eWxlfHN1bW1hcnl8dGFiSW5kZXh8dGFyZ2V0fHRpdGxlfHR5cGV8dXNlTWFwfHZhbHVlfHdpZHRofHdtb2RlfHdyYXB8YWJvdXR8ZGF0YXR5cGV8aW5saXN0fHByZWZpeHxwcm9wZXJ0eXxyZXNvdXJjZXx0eXBlb2Z8dm9jYWJ8YXV0b0NhcGl0YWxpemV8YXV0b0NvcnJlY3R8YXV0b1NhdmV8Y29sb3J8aW5lcnR8aXRlbVByb3B8aXRlbVNjb3BlfGl0ZW1UeXBlfGl0ZW1JRHxpdGVtUmVmfG9ufHJlc3VsdHN8c2VjdXJpdHl8dW5zZWxlY3RhYmxlfGFjY2VudEhlaWdodHxhY2N1bXVsYXRlfGFkZGl0aXZlfGFsaWdubWVudEJhc2VsaW5lfGFsbG93UmVvcmRlcnxhbHBoYWJldGljfGFtcGxpdHVkZXxhcmFiaWNGb3JtfGFzY2VudHxhdHRyaWJ1dGVOYW1lfGF0dHJpYnV0ZVR5cGV8YXV0b1JldmVyc2V8YXppbXV0aHxiYXNlRnJlcXVlbmN5fGJhc2VsaW5lU2hpZnR8YmFzZVByb2ZpbGV8YmJveHxiZWdpbnxiaWFzfGJ5fGNhbGNNb2RlfGNhcEhlaWdodHxjbGlwfGNsaXBQYXRoVW5pdHN8Y2xpcFBhdGh8Y2xpcFJ1bGV8Y29sb3JJbnRlcnBvbGF0aW9ufGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnN8Y29sb3JQcm9maWxlfGNvbG9yUmVuZGVyaW5nfGNvbnRlbnRTY3JpcHRUeXBlfGNvbnRlbnRTdHlsZVR5cGV8Y3Vyc29yfGN4fGN5fGR8ZGVjZWxlcmF0ZXxkZXNjZW50fGRpZmZ1c2VDb25zdGFudHxkaXJlY3Rpb258ZGlzcGxheXxkaXZpc29yfGRvbWluYW50QmFzZWxpbmV8ZHVyfGR4fGR5fGVkZ2VNb2RlfGVsZXZhdGlvbnxlbmFibGVCYWNrZ3JvdW5kfGVuZHxleHBvbmVudHxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkfGZpbGx8ZmlsbE9wYWNpdHl8ZmlsbFJ1bGV8ZmlsdGVyfGZpbHRlclJlc3xmaWx0ZXJVbml0c3xmbG9vZENvbG9yfGZsb29kT3BhY2l0eXxmb2N1c2FibGV8Zm9udEZhbWlseXxmb250U2l6ZXxmb250U2l6ZUFkanVzdHxmb250U3RyZXRjaHxmb250U3R5bGV8Zm9udFZhcmlhbnR8Zm9udFdlaWdodHxmb3JtYXR8ZnJvbXxmcnxmeHxmeXxnMXxnMnxnbHlwaE5hbWV8Z2x5cGhPcmllbnRhdGlvbkhvcml6b250YWx8Z2x5cGhPcmllbnRhdGlvblZlcnRpY2FsfGdseXBoUmVmfGdyYWRpZW50VHJhbnNmb3JtfGdyYWRpZW50VW5pdHN8aGFuZ2luZ3xob3JpekFkdlh8aG9yaXpPcmlnaW5YfGlkZW9ncmFwaGljfGltYWdlUmVuZGVyaW5nfGlufGluMnxpbnRlcmNlcHR8a3xrMXxrMnxrM3xrNHxrZXJuZWxNYXRyaXh8a2VybmVsVW5pdExlbmd0aHxrZXJuaW5nfGtleVBvaW50c3xrZXlTcGxpbmVzfGtleVRpbWVzfGxlbmd0aEFkanVzdHxsZXR0ZXJTcGFjaW5nfGxpZ2h0aW5nQ29sb3J8bGltaXRpbmdDb25lQW5nbGV8bG9jYWx8bWFya2VyRW5kfG1hcmtlck1pZHxtYXJrZXJTdGFydHxtYXJrZXJIZWlnaHR8bWFya2VyVW5pdHN8bWFya2VyV2lkdGh8bWFza3xtYXNrQ29udGVudFVuaXRzfG1hc2tVbml0c3xtYXRoZW1hdGljYWx8bW9kZXxudW1PY3RhdmVzfG9mZnNldHxvcGFjaXR5fG9wZXJhdG9yfG9yZGVyfG9yaWVudHxvcmllbnRhdGlvbnxvcmlnaW58b3ZlcmZsb3d8b3ZlcmxpbmVQb3NpdGlvbnxvdmVybGluZVRoaWNrbmVzc3xwYW5vc2UxfHBhaW50T3JkZXJ8cGF0aExlbmd0aHxwYXR0ZXJuQ29udGVudFVuaXRzfHBhdHRlcm5UcmFuc2Zvcm18cGF0dGVyblVuaXRzfHBvaW50ZXJFdmVudHN8cG9pbnRzfHBvaW50c0F0WHxwb2ludHNBdFl8cG9pbnRzQXRafHByZXNlcnZlQWxwaGF8cHJlc2VydmVBc3BlY3RSYXRpb3xwcmltaXRpdmVVbml0c3xyfHJhZGl1c3xyZWZYfHJlZll8cmVuZGVyaW5nSW50ZW50fHJlcGVhdENvdW50fHJlcGVhdER1cnxyZXF1aXJlZEV4dGVuc2lvbnN8cmVxdWlyZWRGZWF0dXJlc3xyZXN0YXJ0fHJlc3VsdHxyb3RhdGV8cnh8cnl8c2NhbGV8c2VlZHxzaGFwZVJlbmRlcmluZ3xzbG9wZXxzcGFjaW5nfHNwZWN1bGFyQ29uc3RhbnR8c3BlY3VsYXJFeHBvbmVudHxzcGVlZHxzcHJlYWRNZXRob2R8c3RhcnRPZmZzZXR8c3RkRGV2aWF0aW9ufHN0ZW1ofHN0ZW12fHN0aXRjaFRpbGVzfHN0b3BDb2xvcnxzdG9wT3BhY2l0eXxzdHJpa2V0aHJvdWdoUG9zaXRpb258c3RyaWtldGhyb3VnaFRoaWNrbmVzc3xzdHJpbmd8c3Ryb2tlfHN0cm9rZURhc2hhcnJheXxzdHJva2VEYXNob2Zmc2V0fHN0cm9rZUxpbmVjYXB8c3Ryb2tlTGluZWpvaW58c3Ryb2tlTWl0ZXJsaW1pdHxzdHJva2VPcGFjaXR5fHN0cm9rZVdpZHRofHN1cmZhY2VTY2FsZXxzeXN0ZW1MYW5ndWFnZXx0YWJsZVZhbHVlc3x0YXJnZXRYfHRhcmdldFl8dGV4dEFuY2hvcnx0ZXh0RGVjb3JhdGlvbnx0ZXh0UmVuZGVyaW5nfHRleHRMZW5ndGh8dG98dHJhbnNmb3JtfHUxfHUyfHVuZGVybGluZVBvc2l0aW9ufHVuZGVybGluZVRoaWNrbmVzc3x1bmljb2RlfHVuaWNvZGVCaWRpfHVuaWNvZGVSYW5nZXx1bml0c1BlckVtfHZBbHBoYWJldGljfHZIYW5naW5nfHZJZGVvZ3JhcGhpY3x2TWF0aGVtYXRpY2FsfHZhbHVlc3x2ZWN0b3JFZmZlY3R8dmVyc2lvbnx2ZXJ0QWR2WXx2ZXJ0T3JpZ2luWHx2ZXJ0T3JpZ2luWXx2aWV3Qm94fHZpZXdUYXJnZXR8dmlzaWJpbGl0eXx3aWR0aHN8d29yZFNwYWNpbmd8d3JpdGluZ01vZGV8eHx4SGVpZ2h0fHgxfHgyfHhDaGFubmVsU2VsZWN0b3J8eGxpbmtBY3R1YXRlfHhsaW5rQXJjcm9sZXx4bGlua0hyZWZ8eGxpbmtSb2xlfHhsaW5rU2hvd3x4bGlua1RpdGxlfHhsaW5rVHlwZXx4bWxCYXNlfHhtbG5zfHhtbG5zWGxpbmt8eG1sTGFuZ3x4bWxTcGFjZXx5fHkxfHkyfHlDaGFubmVsU2VsZWN0b3J8enx6b29tQW5kUGFufGZvcnxjbGFzc3xhdXRvZm9jdXMpfCgoW0RkXVtBYV1bVHRdW0FhXXxbQWFdW1JyXVtJaV1bQWFdfHgpLS4qKSkkLztjb25zdCBoPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwPT09dFtuXSYmKHRbbl09ZShuKSksdFtuXX19KChmdW5jdGlvbihlKXtyZXR1cm4gcC50ZXN0KGUpfHwxMTE9PT1lLmNoYXJDb2RlQXQoMCkmJjExMD09PWUuY2hhckNvZGVBdCgxKSYmZS5jaGFyQ29kZUF0KDIpPDkxfSkpO2Z1bmN0aW9uIGcoZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKX1mdW5jdGlvbiB2KGUpe3JldHVyblwiVW5kZWZpbmVkXCI9PT1nKGUpfWZ1bmN0aW9uIG0oZSl7cmV0dXJuXCJOdWxsXCI9PT1nKGUpfWZ1bmN0aW9uIEMoZSl7cmV0dXJuXCJPYmplY3RcIj09PWcoZSkmJihlLmNvbnN0cnVjdG9yPT09T2JqZWN0JiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1PYmplY3QucHJvdG90eXBlKX1mdW5jdGlvbiB5KGUpe3JldHVyblwiQXJyYXlcIj09PWcoZSl9ZnVuY3Rpb24gdyhlKXtyZXR1cm5cIlN5bWJvbFwiPT09ZyhlKX12YXIgYix4LF8sTyxMO2I9bSx4PXY7ZnVuY3Rpb24gRSgpe2Zvcih2YXIgZT0wLHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGg7dDxuO3QrKyllKz1hcmd1bWVudHNbdF0ubGVuZ3RoO3ZhciByPUFycmF5KGUpLG89MDtmb3IodD0wO3Q8bjt0KyspZm9yKHZhciBpPWFyZ3VtZW50c1t0XSxhPTAsbD1pLmxlbmd0aDthPGw7YSsrLG8rKylyW29dPWlbYV07cmV0dXJuIHJ9ZnVuY3Rpb24gUyhlLHQsbixyKXt2YXIgbz1yLnByb3BlcnR5SXNFbnVtZXJhYmxlKHQpP1wiZW51bWVyYWJsZVwiOlwibm9uZW51bWVyYWJsZVwiO1wiZW51bWVyYWJsZVwiPT09byYmKGVbdF09biksXCJub25lbnVtZXJhYmxlXCI9PT1vJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9ZnVuY3Rpb24gaihlLHQsbil7aWYoIUModCkpcmV0dXJuIG4mJnkobikmJm4uZm9yRWFjaCgoZnVuY3Rpb24obil7dD1uKGUsdCl9KSksdDt2YXIgcj17fTtDKGUpJiYocj1FKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSkpLnJlZHVjZSgoZnVuY3Rpb24obixyKXt2YXIgbz1lW3JdO3JldHVybighdyhyKSYmIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmluY2x1ZGVzKHIpfHx3KHIpJiYhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5pbmNsdWRlcyhyKSkmJlMobixyLG8sZSksbn0pLHt9KSk7cmV0dXJuIEUoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCksT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KSkucmVkdWNlKChmdW5jdGlvbihyLG8pe3ZhciBpPXRbb10sYT1DKGUpP2Vbb106dm9pZCAwO3JldHVybiBuJiZ5KG4pJiZuLmZvckVhY2goKGZ1bmN0aW9uKGUpe2k9ZShhLGkpfSkpLHZvaWQgMCE9PWEmJkMoaSkmJihpPWooYSxpLG4pKSxTKHIsbyxpLHQpLHJ9KSxyKX1jb25zdCBNPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3ZhciByPW51bGwsbz1lO3JldHVybiBDKGUpJiZlLmV4dGVuc2lvbnMmJjE9PT1PYmplY3Qua2V5cyhlKS5sZW5ndGgmJihvPXt9LHI9ZS5leHRlbnNpb25zKSx0LnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gaihlLHQscil9KSxvKX07dmFyIGs9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W2VbMF1dLHI9MCxvPXQubGVuZ3RoO3I8bztyKz0xKW4ucHVzaCh0W3JdLGVbcisxXSk7cmV0dXJuIG59LFI9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0sUD1mdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9LEk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxBPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LFQ9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX0sSD1mdW5jdGlvbihlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hdHx8XCJvYmplY3RcIiE9dHlwZW9mIHQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQ/ZTp0fSxCPWZ1bmN0aW9uKGUpe3JldHVyblwib2JqZWN0XCI9PT0odm9pZCAwPT09ZT9cInVuZGVmaW5lZFwiOlIoZSkpJiZlLmNvbnN0cnVjdG9yPT09T2JqZWN0fSxWPU9iamVjdC5mcmVlemUoW10pLEQ9T2JqZWN0LmZyZWV6ZSh7fSk7ZnVuY3Rpb24gWihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlfWZ1bmN0aW9uICQoZSl7cmV0dXJuIGUuZGlzcGxheU5hbWV8fGUubmFtZXx8XCJDb21wb25lbnRcIn1mdW5jdGlvbiBOKGUpe3JldHVybiBlJiZcInN0cmluZ1wiPT10eXBlb2YgZS5zdHlsZWRDb21wb25lbnRJZH12YXIgRj1cInVuZGVmaW5lZFwiIT10eXBlb2YgcHJvY2VzcyYmKHByb2Nlc3MuZW52LlJFQUNUX0FQUF9TQ19BVFRSfHxwcm9jZXNzLmVudi5TQ19BVFRSKXx8XCJkYXRhLXN0eWxlZFwiLFU9XCJkYXRhLXN0eWxlZC12ZXJzaW9uXCIsVz1cImRhdGEtc3R5bGVkLXN0cmVhbWVkXCIsej1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZcIkhUTUxFbGVtZW50XCJpbiB3aW5kb3csRz1cImJvb2xlYW5cIj09dHlwZW9mIFNDX0RJU0FCTEVfU1BFRURZJiZTQ19ESVNBQkxFX1NQRUVEWXx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHByb2Nlc3MmJihwcm9jZXNzLmVudi5SRUFDVF9BUFBfU0NfRElTQUJMRV9TUEVFRFl8fHByb2Nlc3MuZW52LlNDX0RJU0FCTEVfU1BFRURZKXx8ITEscT17fTt2YXIgWT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe1AodGhpcyx0KTtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxvPUFycmF5KHI+MT9yLTE6MCksaT0xO2k8cjtpKyspb1tpLTFdPWFyZ3VtZW50c1tpXTt2YXIgYT1IKHRoaXMsZS5jYWxsKHRoaXMsXCJBbiBlcnJvciBvY2N1cnJlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdHlsZWQtY29tcG9uZW50cy9zdHlsZWQtY29tcG9uZW50cy9ibG9iL21hc3Rlci9wYWNrYWdlcy9zdHlsZWQtY29tcG9uZW50cy9zcmMvdXRpbHMvZXJyb3JzLm1kI1wiK24rXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIrKG8ubGVuZ3RoPjA/XCIgQWRkaXRpb25hbCBhcmd1bWVudHM6IFwiK28uam9pbihcIiwgXCIpOlwiXCIpKSk7cmV0dXJuIEgoYSl9cmV0dXJuIFQodCxlKSx0fShFcnJvciksSz0vXlteXFxTXFxuXSo/XFwvXFwqIHNjLWNvbXBvbmVudC1pZDpcXHMqKFxcUyspXFxzK1xcKlxcLy9nbSxYPWZ1bmN0aW9uKGUpe3ZhciB0PVwiXCIrKGV8fFwiXCIpLG49W107cmV0dXJuIHQucmVwbGFjZShLLChmdW5jdGlvbihlLHQscil7cmV0dXJuIG4ucHVzaCh7Y29tcG9uZW50SWQ6dCxtYXRjaEluZGV4OnJ9KSxlfSkpLG4ubWFwKChmdW5jdGlvbihlLHIpe3ZhciBvPWUuY29tcG9uZW50SWQsaT1lLm1hdGNoSW5kZXgsYT1uW3IrMV07cmV0dXJue2NvbXBvbmVudElkOm8sY3NzRnJvbURPTTphP3Quc2xpY2UoaSxhLm1hdGNoSW5kZXgpOnQuc2xpY2UoaSl9fSkpfSxKPS9eXFxzKlxcL1xcLy4qJC9nbSxRPW5ldyhvKCkpKHtnbG9iYWw6ITEsY2FzY2FkZTohMCxrZXlmcmFtZTohMSxwcmVmaXg6ITEsY29tcHJlc3M6ITEsc2VtaWNvbG9uOiEwfSksZWU9bmV3KG8oKSkoe2dsb2JhbDohMSxjYXNjYWRlOiEwLGtleWZyYW1lOiExLHByZWZpeDohMCxjb21wcmVzczohMSxzZW1pY29sb246ITF9KSx0ZT1bXSxuZT1mdW5jdGlvbihlKXtpZigtMj09PWUpe3ZhciB0PXRlO3JldHVybiB0ZT1bXSx0fX0scmU9YSgpKChmdW5jdGlvbihlKXt0ZS5wdXNoKGUpfSkpLG9lPXZvaWQgMCxpZT12b2lkIDAsYWU9dm9pZCAwLGxlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD4wJiYtMSE9PW4uc2xpY2UoMCx0KS5pbmRleE9mKGllKSYmbi5zbGljZSh0LWllLmxlbmd0aCx0KSE9PWllP1wiLlwiK29lOmV9O2VlLnVzZShbZnVuY3Rpb24oZSx0LG4pezI9PT1lJiZuLmxlbmd0aCYmblswXS5sYXN0SW5kZXhPZihpZSk+MCYmKG5bMF09blswXS5yZXBsYWNlKGFlLGxlKSl9LHJlLG5lXSksUS51c2UoW3JlLG5lXSk7dmFyIHNlPWZ1bmN0aW9uKGUpe3JldHVybiBRKFwiXCIsZSl9O2Z1bmN0aW9uIGNlKGUsdCxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106XCImXCIsbz1lLmpvaW4oXCJcIikucmVwbGFjZShKLFwiXCIpLGk9dCYmbj9uK1wiIFwiK3QrXCIgeyBcIitvK1wiIH1cIjpvO3JldHVybiBvZT1yLGllPXQsYWU9bmV3IFJlZ0V4cChcIlxcXFxcIitpZStcIlxcXFxiXCIsXCJnXCIpLGVlKG58fCF0P1wiXCI6dCxpKX12YXIgdWU9ZnVuY3Rpb24oKXtyZXR1cm4gbi5uY30sZmU9ZnVuY3Rpb24oZSx0LG4pe24mJigoZVt0XXx8KGVbdF09T2JqZWN0LmNyZWF0ZShudWxsKSkpW25dPSEwKX0sZGU9ZnVuY3Rpb24oZSx0KXtlW3RdPU9iamVjdC5jcmVhdGUobnVsbCl9LHBlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiB2b2lkIDAhPT1lW3RdJiZlW3RdW25dfX0saGU9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIjtmb3IodmFyIG4gaW4gZSl0Kz1PYmplY3Qua2V5cyhlW25dKS5qb2luKFwiIFwiKStcIiBcIjtyZXR1cm4gdC50cmltKCl9LGdlPWZ1bmN0aW9uKGUpe2lmKGUuc2hlZXQpcmV0dXJuIGUuc2hlZXQ7Zm9yKHZhciB0PWUub3duZXJEb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGgsbj0wO248dDtuKz0xKXt2YXIgcj1lLm93bmVyRG9jdW1lbnQuc3R5bGVTaGVldHNbbl07aWYoci5vd25lck5vZGU9PT1lKXJldHVybiByfXRocm93IG5ldyBZKDEwKX0sdmU9ZnVuY3Rpb24oZSx0LG4pe2lmKCF0KXJldHVybiExO3ZhciByPWUuY3NzUnVsZXMubGVuZ3RoO3RyeXtlLmluc2VydFJ1bGUodCxuPD1yP246cil9Y2F0Y2goZSl7cmV0dXJuITF9cmV0dXJuITB9LG1lPWZ1bmN0aW9uKGUpe3JldHVyblwiXFxuLyogc2MtY29tcG9uZW50LWlkOiBcIitlK1wiICovXFxuXCJ9LENlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj0wO3I8PXQ7cis9MSluKz1lW3JdO3JldHVybiBufSx5ZT1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj11ZSgpO3JldHVyblwiPHN0eWxlIFwiK1tyJiYnbm9uY2U9XCInK3IrJ1wiJyxGKyc9XCInK2hlKHQpKydcIicsVSsnPVwiNC40LjFcIicsbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpK1wiPlwiK2UoKStcIjwvc3R5bGU+XCJ9fSx3ZT1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuLHI9KChuPXt9KVtGXT1oZSh0KSxuW1VdPVwiNC40LjFcIixuKSxvPXVlKCk7cmV0dXJuIG8mJihyLm5vbmNlPW8pLGwuY3JlYXRlRWxlbWVudChcInN0eWxlXCIsQSh7fSxyLHtkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOmUoKX19KSl9fSxiZT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoZSl9fSx4ZT1mdW5jdGlvbihlLHQpe3JldHVybiBlLmNyZWF0ZVRleHROb2RlKG1lKHQpKX0sX2U9ZnVuY3Rpb24gZSh0LG4pe3ZhciByPXZvaWQgMD09PXQ/T2JqZWN0LmNyZWF0ZShudWxsKTp0LG89dm9pZCAwPT09bj9PYmplY3QuY3JlYXRlKG51bGwpOm4saT1mdW5jdGlvbihlKXt2YXIgdD1vW2VdO3JldHVybiB2b2lkIDAhPT10P3Q6b1tlXT1bXCJcIl19LGE9ZnVuY3Rpb24oKXt2YXIgZT1cIlwiO2Zvcih2YXIgdCBpbiBvKXt2YXIgbj1vW3RdWzBdO24mJihlKz1tZSh0KStuKX1yZXR1cm4gZX0sbD17Y2xvbmU6ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgbiBpbiBlKXRbbl09QSh7fSxlW25dKTtyZXR1cm4gdH0ociksbj1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgaSBpbiBvKW5baV09W29baV1bMF1dO3JldHVybiBlKHQsbil9LGNzczphLGdldElkczpiZShvKSxoYXNOYW1lRm9ySWQ6cGUociksaW5zZXJ0TWFya2VyOmksaW5zZXJ0UnVsZXM6ZnVuY3Rpb24oZSx0LG4pe2koZSlbMF0rPXQuam9pbihcIiBcIiksZmUocixlLG4pfSxyZW1vdmVSdWxlczpmdW5jdGlvbihlKXt2YXIgdD1vW2VdO3ZvaWQgMCE9PXQmJih0WzBdPVwiXCIsZGUocixlKSl9LHNlYWxlZDohMSxzdHlsZVRhZzpudWxsLHRvRWxlbWVudDp3ZShhLHIpLHRvSFRNTDp5ZShhLHIpfTtyZXR1cm4gbH0sT2U9ZnVuY3Rpb24oZSx0LG4scixvKXtpZih6JiYhbil7dmFyIGk9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWRvY3VtZW50O2U/cj1lLm93bmVyRG9jdW1lbnQ6dCYmKHI9dC5vd25lckRvY3VtZW50KTt2YXIgbz1yLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtvLnNldEF0dHJpYnV0ZShGLFwiXCIpLG8uc2V0QXR0cmlidXRlKFUsXCI0LjQuMVwiKTt2YXIgaT11ZSgpO2lmKGkmJm8uc2V0QXR0cmlidXRlKFwibm9uY2VcIixpKSxvLmFwcGVuZENoaWxkKHIuY3JlYXRlVGV4dE5vZGUoXCJcIikpLGUmJiF0KWUuYXBwZW5kQ2hpbGQobyk7ZWxzZXtpZighdHx8IWV8fCF0LnBhcmVudE5vZGUpdGhyb3cgbmV3IFkoNik7dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLG4/dDp0Lm5leHRTaWJsaW5nKX1yZXR1cm4gb30oZSx0LHIpO3JldHVybiBHP2Z1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPU9iamVjdC5jcmVhdGUobnVsbCksbz12b2lkIDAhPT10LGk9ITEsYT1mdW5jdGlvbih0KXt2YXIgbz1yW3RdO3JldHVybiB2b2lkIDAhPT1vP286KHJbdF09eGUoZS5vd25lckRvY3VtZW50LHQpLGUuYXBwZW5kQ2hpbGQoclt0XSksblt0XT1PYmplY3QuY3JlYXRlKG51bGwpLHJbdF0pfSxsPWZ1bmN0aW9uKCl7dmFyIGU9XCJcIjtmb3IodmFyIHQgaW4gcillKz1yW3RdLmRhdGE7cmV0dXJuIGV9O3JldHVybntjbG9uZTpmdW5jdGlvbigpe3Rocm93IG5ldyBZKDUpfSxjc3M6bCxnZXRJZHM6YmUociksaGFzTmFtZUZvcklkOnBlKG4pLGluc2VydE1hcmtlcjphLGluc2VydFJ1bGVzOmZ1bmN0aW9uKGUscixsKXtmb3IodmFyIHM9YShlKSxjPVtdLHU9ci5sZW5ndGgsZj0wO2Y8dTtmKz0xKXt2YXIgZD1yW2ZdLHA9bztpZihwJiYtMSE9PWQuaW5kZXhPZihcIkBpbXBvcnRcIikpYy5wdXNoKGQpO2Vsc2V7cD0hMTt2YXIgaD1mPT09dS0xP1wiXCI6XCIgXCI7cy5hcHBlbmREYXRhKFwiXCIrZCtoKX19ZmUobixlLGwpLG8mJmMubGVuZ3RoPjAmJihpPSEwLHQoKS5pbnNlcnRSdWxlcyhlK1wiLWltcG9ydFwiLGMpKX0scmVtb3ZlUnVsZXM6ZnVuY3Rpb24oYSl7dmFyIGw9clthXTtpZih2b2lkIDAhPT1sKXt2YXIgcz14ZShlLm93bmVyRG9jdW1lbnQsYSk7ZS5yZXBsYWNlQ2hpbGQocyxsKSxyW2FdPXMsZGUobixhKSxvJiZpJiZ0KCkucmVtb3ZlUnVsZXMoYStcIi1pbXBvcnRcIil9fSxzZWFsZWQ6ITEsc3R5bGVUYWc6ZSx0b0VsZW1lbnQ6d2UobCxuKSx0b0hUTUw6eWUobCxuKX19KGksbyk6ZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxvPVtdLGk9dm9pZCAwIT09dCxhPSExLGw9ZnVuY3Rpb24oZSl7dmFyIHQ9cltlXTtyZXR1cm4gdm9pZCAwIT09dD90OihyW2VdPW8ubGVuZ3RoLG8ucHVzaCgwKSxkZShuLGUpLHJbZV0pfSxzPWZ1bmN0aW9uKCl7dmFyIHQ9Z2UoZSkuY3NzUnVsZXMsbj1cIlwiO2Zvcih2YXIgaSBpbiByKXtuKz1tZShpKTtmb3IodmFyIGE9cltpXSxsPUNlKG8sYSkscz1sLW9bYV07czxsO3MrPTEpe3ZhciBjPXRbc107dm9pZCAwIT09YyYmKG4rPWMuY3NzVGV4dCl9fXJldHVybiBufTtyZXR1cm57Y2xvbmU6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgWSg1KX0sY3NzOnMsZ2V0SWRzOmJlKHIpLGhhc05hbWVGb3JJZDpwZShuKSxpbnNlcnRNYXJrZXI6bCxpbnNlcnRSdWxlczpmdW5jdGlvbihyLHMsYyl7Zm9yKHZhciB1PWwociksZj1nZShlKSxkPUNlKG8sdSkscD0wLGg9W10sZz1zLmxlbmd0aCx2PTA7djxnO3YrPTEpe3ZhciBtPXNbdl0sQz1pO0MmJi0xIT09bS5pbmRleE9mKFwiQGltcG9ydFwiKT9oLnB1c2gobSk6dmUoZixtLGQrcCkmJihDPSExLHArPTEpfWkmJmgubGVuZ3RoPjAmJihhPSEwLHQoKS5pbnNlcnRSdWxlcyhyK1wiLWltcG9ydFwiLGgpKSxvW3VdKz1wLGZlKG4scixjKX0scmVtb3ZlUnVsZXM6ZnVuY3Rpb24obCl7dmFyIHM9cltsXTtpZih2b2lkIDAhPT1zJiYhMSE9PWUuaXNDb25uZWN0ZWQpe3ZhciBjPW9bc107IWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9dC1uLG89dDtvPnI7by09MSllLmRlbGV0ZVJ1bGUobyl9KGdlKGUpLENlKG8scyktMSxjKSxvW3NdPTAsZGUobixsKSxpJiZhJiZ0KCkucmVtb3ZlUnVsZXMobCtcIi1pbXBvcnRcIil9fSxzZWFsZWQ6ITEsc3R5bGVUYWc6ZSx0b0VsZW1lbnQ6d2UocyxuKSx0b0hUTUw6eWUocyxuKX19KGksbyl9cmV0dXJuIF9lKCl9LExlPS9cXHMrLyxFZT12b2lkIDA7RWU9ej9HPzQwOjFlMzotMTt2YXIgU2U9MCxqZT12b2lkIDAsTWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp6P2RvY3VtZW50LmhlYWQ6bnVsbCxyPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07UCh0aGlzLGUpLHRoaXMuZ2V0SW1wb3J0UnVsZVRhZz1mdW5jdGlvbigpe3ZhciBlPXQuaW1wb3J0UnVsZVRhZztpZih2b2lkIDAhPT1lKXJldHVybiBlO3ZhciBuPXQudGFnc1swXTtyZXR1cm4gdC5pbXBvcnRSdWxlVGFnPU9lKHQudGFyZ2V0LG4/bi5zdHlsZVRhZzpudWxsLHQuZm9yY2VTZXJ2ZXIsITApfSxTZSs9MSx0aGlzLmlkPVNlLHRoaXMuZm9yY2VTZXJ2ZXI9cix0aGlzLnRhcmdldD1yP251bGw6bix0aGlzLnRhZ01hcD17fSx0aGlzLmRlZmVycmVkPXt9LHRoaXMucmVoeWRyYXRlZE5hbWVzPXt9LHRoaXMuaWdub3JlUmVoeWRyYXRlZE5hbWVzPXt9LHRoaXMudGFncz1bXSx0aGlzLmNhcGFjaXR5PTEsdGhpcy5jbG9uZXM9W119cmV0dXJuIGUucHJvdG90eXBlLnJlaHlkcmF0ZT1mdW5jdGlvbigpe2lmKCF6fHx0aGlzLmZvcmNlU2VydmVyKXJldHVybiB0aGlzO3ZhciBlPVtdLHQ9W10sbj0hMSxyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtcIitGK1wiXVtcIitVKyc9XCI0LjQuMVwiXScpLG89ci5sZW5ndGg7aWYoIW8pcmV0dXJuIHRoaXM7Zm9yKHZhciBpPTA7aTxvO2krPTEpe3ZhciBhPXJbaV07bnx8KG49ISFhLmdldEF0dHJpYnV0ZShXKSk7Zm9yKHZhciBsLHM9KGEuZ2V0QXR0cmlidXRlKEYpfHxcIlwiKS50cmltKCkuc3BsaXQoTGUpLGM9cy5sZW5ndGgsdT0wO3U8Yzt1Kz0xKWw9c1t1XSx0aGlzLnJlaHlkcmF0ZWROYW1lc1tsXT0hMDt0LnB1c2guYXBwbHkodCxYKGEudGV4dENvbnRlbnQpKSxlLnB1c2goYSl9dmFyIGY9dC5sZW5ndGg7aWYoIWYpcmV0dXJuIHRoaXM7dmFyIGQ9dGhpcy5tYWtlVGFnKG51bGwpOyFmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsbz1uLmxlbmd0aDtyPG87cis9MSl7dmFyIGk9bltyXSxhPWkuY29tcG9uZW50SWQsbD1pLmNzc0Zyb21ET00scz1zZShsKTtlLmluc2VydFJ1bGVzKGEscyl9Zm9yKHZhciBjPTAsdT10Lmxlbmd0aDtjPHU7Yys9MSl7dmFyIGY9dFtjXTtmLnBhcmVudE5vZGUmJmYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmKX19KGQsZSx0KSx0aGlzLmNhcGFjaXR5PU1hdGgubWF4KDEsRWUtZiksdGhpcy50YWdzLnB1c2goZCk7Zm9yKHZhciBwPTA7cDxmO3ArPTEpdGhpcy50YWdNYXBbdFtwXS5jb21wb25lbnRJZF09ZDtyZXR1cm4gdGhpc30sZS5yZXNldD1mdW5jdGlvbigpe2plPW5ldyBlKHZvaWQgMCxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKS5yZWh5ZHJhdGUoKX0sZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZSh0aGlzLnRhcmdldCx0aGlzLmZvcmNlU2VydmVyKTtyZXR1cm4gdGhpcy5jbG9uZXMucHVzaCh0KSx0LnRhZ3M9dGhpcy50YWdzLm1hcCgoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPWUuZ2V0SWRzKCkscj1lLmNsb25lKCksbz0wO288bi5sZW5ndGg7bys9MSl0LnRhZ01hcFtuW29dXT1yO3JldHVybiByfSkpLHQucmVoeWRyYXRlZE5hbWVzPUEoe30sdGhpcy5yZWh5ZHJhdGVkTmFtZXMpLHQuZGVmZXJyZWQ9QSh7fSx0aGlzLmRlZmVycmVkKSx0fSxlLnByb3RvdHlwZS5zZWFsQWxsVGFncz1mdW5jdGlvbigpe3RoaXMuY2FwYWNpdHk9MSx0aGlzLnRhZ3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5zZWFsZWQ9ITB9KSl9LGUucHJvdG90eXBlLm1ha2VUYWc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZT9lLnN0eWxlVGFnOm51bGw7cmV0dXJuIE9lKHRoaXMudGFyZ2V0LHQsdGhpcy5mb3JjZVNlcnZlciwhMSx0aGlzLmdldEltcG9ydFJ1bGVUYWcpfSxlLnByb3RvdHlwZS5nZXRUYWdGb3JJZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnRhZ01hcFtlXTtpZih2b2lkIDAhPT10JiYhdC5zZWFsZWQpcmV0dXJuIHQ7dmFyIG49dGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGgtMV07cmV0dXJuIHRoaXMuY2FwYWNpdHktPTEsMD09PXRoaXMuY2FwYWNpdHkmJih0aGlzLmNhcGFjaXR5PUVlLG49dGhpcy5tYWtlVGFnKG4pLHRoaXMudGFncy5wdXNoKG4pKSx0aGlzLnRhZ01hcFtlXT1ufSxlLnByb3RvdHlwZS5oYXNJZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy50YWdNYXBbZV19LGUucHJvdG90eXBlLmhhc05hbWVGb3JJZD1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXRoaXMuaWdub3JlUmVoeWRyYXRlZE5hbWVzW2VdJiZ0aGlzLnJlaHlkcmF0ZWROYW1lc1t0XSlyZXR1cm4hMDt2YXIgbj10aGlzLnRhZ01hcFtlXTtyZXR1cm4gdm9pZCAwIT09biYmbi5oYXNOYW1lRm9ySWQoZSx0KX0sZS5wcm90b3R5cGUuZGVmZXJyZWRJbmplY3Q9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10aGlzLnRhZ01hcFtlXSl7Zm9yKHZhciBuPXRoaXMuY2xvbmVzLHI9MDtyPG4ubGVuZ3RoO3IrPTEpbltyXS5kZWZlcnJlZEluamVjdChlLHQpO3RoaXMuZ2V0VGFnRm9ySWQoZSkuaW5zZXJ0TWFya2VyKGUpLHRoaXMuZGVmZXJyZWRbZV09dH19LGUucHJvdG90eXBlLmluamVjdD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPXRoaXMuY2xvbmVzLG89MDtvPHIubGVuZ3RoO28rPTEpcltvXS5pbmplY3QoZSx0LG4pO3ZhciBpPXRoaXMuZ2V0VGFnRm9ySWQoZSk7aWYodm9pZCAwIT09dGhpcy5kZWZlcnJlZFtlXSl7dmFyIGE9dGhpcy5kZWZlcnJlZFtlXS5jb25jYXQodCk7aS5pbnNlcnRSdWxlcyhlLGEsbiksdGhpcy5kZWZlcnJlZFtlXT12b2lkIDB9ZWxzZSBpLmluc2VydFJ1bGVzKGUsdCxuKX0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudGFnTWFwW2VdO2lmKHZvaWQgMCE9PXQpe2Zvcih2YXIgbj10aGlzLmNsb25lcyxyPTA7cjxuLmxlbmd0aDtyKz0xKW5bcl0ucmVtb3ZlKGUpO3QucmVtb3ZlUnVsZXMoZSksdGhpcy5pZ25vcmVSZWh5ZHJhdGVkTmFtZXNbZV09ITAsdGhpcy5kZWZlcnJlZFtlXT12b2lkIDB9fSxlLnByb3RvdHlwZS50b0hUTUw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YWdzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9IVE1MKCl9KSkuam9pbihcIlwiKX0sZS5wcm90b3R5cGUudG9SZWFjdEVsZW1lbnRzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5pZDtyZXR1cm4gdGhpcy50YWdzLm1hcCgoZnVuY3Rpb24odCxuKXt2YXIgcj1cInNjLVwiK2UrXCItXCIrbjtyZXR1cm4oMCxsLmNsb25lRWxlbWVudCkodC50b0VsZW1lbnQoKSx7a2V5OnJ9KX0pKX0sSShlLG51bGwsW3trZXk6XCJtYXN0ZXJcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gamV8fChqZT0obmV3IGUpLnJlaHlkcmF0ZSgpKX19LHtrZXk6XCJpbnN0YW5jZVwiLGdldDpmdW5jdGlvbigpe3JldHVybiBlLm1hc3Rlcn19XSksZX0oKSxrZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXt2YXIgcj10aGlzO1AodGhpcyxlKSx0aGlzLmluamVjdD1mdW5jdGlvbihlKXtlLmhhc05hbWVGb3JJZChyLmlkLHIubmFtZSl8fGUuaW5qZWN0KHIuaWQsci5ydWxlcyxyLm5hbWUpfSx0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IFkoMTIsU3RyaW5nKHIubmFtZSkpfSx0aGlzLm5hbWU9dCx0aGlzLnJ1bGVzPW4sdGhpcy5pZD1cInNjLWtleWZyYW1lcy1cIit0fXJldHVybiBlLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZX0sZX0oKSxSZT0vKFtBLVpdKS9nLFBlPS9ebXMtLztmdW5jdGlvbiBJZShlKXtyZXR1cm4gZS5yZXBsYWNlKFJlLFwiLSQxXCIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShQZSxcIi1tcy1cIil9dmFyIEFlPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfHwhMT09PWV8fFwiXCI9PT1lfSxUZT1mdW5jdGlvbiBlKHQsbil7dmFyIHI9W107cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe2lmKCFBZSh0W25dKSl7aWYoQih0W25dKSlyZXR1cm4gci5wdXNoLmFwcGx5KHIsZSh0W25dLG4pKSxyO2lmKFoodFtuXSkpcmV0dXJuIHIucHVzaChJZShuKStcIjpcIix0W25dLFwiO1wiKSxyO3IucHVzaChJZShuKStcIjogXCIrKG89biwobnVsbD09KGk9dFtuXSl8fFwiYm9vbGVhblwiPT10eXBlb2YgaXx8XCJcIj09PWk/XCJcIjpcIm51bWJlclwiIT10eXBlb2YgaXx8MD09PWl8fG8gaW4gcz9TdHJpbmcoaSkudHJpbSgpOmkrXCJweFwiKStcIjtcIikpfXZhciBvLGk7cmV0dXJuIHJ9KSksbj9bbitcIiB7XCJdLmNvbmNhdChyLFtcIn1cIl0pOnJ9O2Z1bmN0aW9uIEhlKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHIsbz1bXSxpPTAsYT1lLmxlbmd0aDtpPGE7aSs9MSludWxsIT09KHI9SGUoZVtpXSx0LG4pKSYmKEFycmF5LmlzQXJyYXkocik/by5wdXNoLmFwcGx5KG8scik6by5wdXNoKHIpKTtyZXR1cm4gb31yZXR1cm4gQWUoZSk/bnVsbDpOKGUpP1wiLlwiK2Uuc3R5bGVkQ29tcG9uZW50SWQ6WihlKT9cImZ1bmN0aW9uXCIhPXR5cGVvZihsPWUpfHxsLnByb3RvdHlwZSYmbC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudHx8IXQ/ZTpIZShlKHQpLHQsbik6ZSBpbnN0YW5jZW9mIGtlP24/KGUuaW5qZWN0KG4pLGUuZ2V0TmFtZSgpKTplOkIoZSk/VGUoZSk6ZS50b1N0cmluZygpO3ZhciBsfWZ1bmN0aW9uIEJlKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3JldHVybiBaKGUpfHxCKGUpP0hlKGsoVixbZV0uY29uY2F0KG4pKSk6SGUoayhlLG4pKX1mdW5jdGlvbiBWZShlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpEO2lmKCEoMCxjLmlzVmFsaWRFbGVtZW50VHlwZSkodCkpdGhyb3cgbmV3IFkoMSxTdHJpbmcodCkpO3ZhciByPWZ1bmN0aW9uKCl7cmV0dXJuIGUodCxuLEJlLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX07cmV0dXJuIHIud2l0aENvbmZpZz1mdW5jdGlvbihyKXtyZXR1cm4gVmUoZSx0LEEoe30sbixyKSl9LHIuYXR0cnM9ZnVuY3Rpb24ocil7cmV0dXJuIFZlKGUsdCxBKHt9LG4se2F0dHJzOkFycmF5LnByb3RvdHlwZS5jb25jYXQobi5hdHRycyxyKS5maWx0ZXIoQm9vbGVhbil9KSl9LHJ9ZnVuY3Rpb24gRGUoZSl7Zm9yKHZhciB0LG49MHxlLmxlbmd0aCxyPTB8bixvPTA7bj49NDspdD0xNTQwNDgzNDc3Kig2NTUzNSYodD0yNTUmZS5jaGFyQ29kZUF0KG8pfCgyNTUmZS5jaGFyQ29kZUF0KCsrbykpPDw4fCgyNTUmZS5jaGFyQ29kZUF0KCsrbykpPDwxNnwoMjU1JmUuY2hhckNvZGVBdCgrK28pKTw8MjQpKSsoKDE1NDA0ODM0NzcqKHQ+Pj4xNikmNjU1MzUpPDwxNikscj0xNTQwNDgzNDc3Kig2NTUzNSZyKSsoKDE1NDA0ODM0NzcqKHI+Pj4xNikmNjU1MzUpPDwxNileKHQ9MTU0MDQ4MzQ3NyooNjU1MzUmKHRePXQ+Pj4yNCkpKygoMTU0MDQ4MzQ3NyoodD4+PjE2KSY2NTUzNSk8PDE2KSksbi09NCwrK287c3dpdGNoKG4pe2Nhc2UgMzpyXj0oMjU1JmUuY2hhckNvZGVBdChvKzIpKTw8MTY7Y2FzZSAyOnJePSgyNTUmZS5jaGFyQ29kZUF0KG8rMSkpPDw4O2Nhc2UgMTpyPTE1NDA0ODM0NzcqKDY1NTM1JihyXj0yNTUmZS5jaGFyQ29kZUF0KG8pKSkrKCgxNTQwNDgzNDc3KihyPj4+MTYpJjY1NTM1KTw8MTYpfXJldHVybigocj0xNTQwNDgzNDc3Kig2NTUzNSYocl49cj4+PjEzKSkrKCgxNTQwNDgzNDc3KihyPj4+MTYpJjY1NTM1KTw8MTYpKV5yPj4+MTUpPj4+MH12YXIgWmU9NTIsJGU9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZSsoZT4yNT8zOTo5NykpfTtmdW5jdGlvbiBOZShlKXt2YXIgdD1cIlwiLG49dm9pZCAwO2ZvcihuPWU7bj5aZTtuPU1hdGguZmxvb3Iobi9aZSkpdD0kZShuJVplKSt0O3JldHVybiAkZShuJVplKSt0fWZ1bmN0aW9uIEZlKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKz0xKXt2YXIgcj1lW25dO2lmKEFycmF5LmlzQXJyYXkocikmJiFGZShyLHQpKXJldHVybiExO2lmKFoocikmJiFOKHIpKXJldHVybiExfXJldHVybiF0LnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBaKGUpfHxmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSlpZihaKGVbdF0pKXJldHVybiEwO3JldHVybiExfShlKX0pKX12YXIgVWUsV2U9ZnVuY3Rpb24oZSl7cmV0dXJuIE5lKERlKGUpKX0semU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbixyKXtQKHRoaXMsZSksdGhpcy5ydWxlcz10LHRoaXMuaXNTdGF0aWM9RmUodCxuKSx0aGlzLmNvbXBvbmVudElkPXIsTWUubWFzdGVyLmhhc0lkKHIpfHxNZS5tYXN0ZXIuZGVmZXJyZWRJbmplY3QocixbXSl9cmV0dXJuIGUucHJvdG90eXBlLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5pc1N0YXRpYyxyPXRoaXMuY29tcG9uZW50SWQsbz10aGlzLmxhc3RDbGFzc05hbWU7aWYoeiYmbiYmXCJzdHJpbmdcIj09dHlwZW9mIG8mJnQuaGFzTmFtZUZvcklkKHIsbykpcmV0dXJuIG87dmFyIGk9SGUodGhpcy5ydWxlcyxlLHQpLGE9V2UodGhpcy5jb21wb25lbnRJZCtpLmpvaW4oXCJcIikpO3JldHVybiB0Lmhhc05hbWVGb3JJZChyLGEpfHx0LmluamVjdCh0aGlzLmNvbXBvbmVudElkLGNlKGksXCIuXCIrYSx2b2lkIDAsciksYSksdGhpcy5sYXN0Q2xhc3NOYW1lPWEsYX0sZS5nZW5lcmF0ZU5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFdlKGUpfSxlfSgpLEdlPWZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOkQscj0hIW4mJmUudGhlbWU9PT1uLnRoZW1lO3JldHVybiBlLnRoZW1lJiYhcj9lLnRoZW1lOnR8fG4udGhlbWV9LHFlPS9bW1xcXS4jKiQ+PCt+PXxeOigpLFwiJ2AtXSsvZyxZZT0vKF4tfC0kKS9nO2Z1bmN0aW9uIEtlKGUpe3JldHVybiBlLnJlcGxhY2UocWUsXCItXCIpLnJlcGxhY2UoWWUsXCJcIil9ZnVuY3Rpb24gWGUoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJiEwfXZhciBKZT17Y2hpbGRDb250ZXh0VHlwZXM6ITAsY29udGV4dFR5cGVzOiEwLGRlZmF1bHRQcm9wczohMCxkaXNwbGF5TmFtZTohMCxnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6ITAscHJvcFR5cGVzOiEwLHR5cGU6ITB9LFFlPXtuYW1lOiEwLGxlbmd0aDohMCxwcm90b3R5cGU6ITAsY2FsbGVyOiEwLGNhbGxlZTohMCxhcmd1bWVudHM6ITAsYXJpdHk6ITB9LGV0PSgoVWU9e30pW2MuRm9yd2FyZFJlZl09eyQkdHlwZW9mOiEwLHJlbmRlcjohMH0sVWUpLHR0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxudD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxydD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLG90PXZvaWQgMD09PXJ0P2Z1bmN0aW9uKCl7cmV0dXJuW119OnJ0LGl0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsYXQ9T2JqZWN0LmdldFByb3RvdHlwZU9mLGx0PU9iamVjdC5wcm90b3R5cGUsc3Q9QXJyYXkucHJvdG90eXBlO2Z1bmN0aW9uIGN0KGUsdCxuKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl7dmFyIHI9YXQodCk7ciYmciE9PWx0JiZjdChlLHIsbik7Zm9yKHZhciBvPXN0LmNvbmNhdChudCh0KSxvdCh0KSksaT1ldFtlLiQkdHlwZW9mXXx8SmUsYT1ldFt0LiQkdHlwZW9mXXx8SmUsbD1vLmxlbmd0aCxzPXZvaWQgMCxjPXZvaWQgMDtsLS07KWlmKGM9b1tsXSwhKFFlW2NdfHxuJiZuW2NdfHxhJiZhW2NdfHxpJiZpW2NdKSYmKHM9aXQodCxjKSkpdHJ5e3R0KGUsYyxzKX1jYXRjaChlKXt9cmV0dXJuIGV9cmV0dXJuIGV9dmFyIHV0PSgwLGwuY3JlYXRlQ29udGV4dCkoKSxmdD11dC5Db25zdW1lcixkdD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe1AodGhpcyx0KTt2YXIgcj1IKHRoaXMsZS5jYWxsKHRoaXMsbikpO3JldHVybiByLmdldENvbnRleHQ9ZChyLmdldENvbnRleHQuYmluZChyKSksci5yZW5kZXJJbm5lcj1yLnJlbmRlcklubmVyLmJpbmQocikscn1yZXR1cm4gVCh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuP2wuY3JlYXRlRWxlbWVudCh1dC5Db25zdW1lcixudWxsLHRoaXMucmVuZGVySW5uZXIpOm51bGx9LHQucHJvdG90eXBlLnJlbmRlcklubmVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0Q29udGV4dCh0aGlzLnByb3BzLnRoZW1lLGUpO3JldHVybiBsLmNyZWF0ZUVsZW1lbnQodXQuUHJvdmlkZXIse3ZhbHVlOnR9LHRoaXMucHJvcHMuY2hpbGRyZW4pfSx0LnByb3RvdHlwZS5nZXRUaGVtZT1mdW5jdGlvbihlLHQpe2lmKFooZSkpcmV0dXJuIGUodCk7aWYobnVsbD09PWV8fEFycmF5LmlzQXJyYXkoZSl8fFwib2JqZWN0XCIhPT0odm9pZCAwPT09ZT9cInVuZGVmaW5lZFwiOlIoZSkpKXRocm93IG5ldyBZKDgpO3JldHVybiBBKHt9LHQsZSl9LHQucHJvdG90eXBlLmdldENvbnRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5nZXRUaGVtZShlLHQpfSx0fShsLkNvbXBvbmVudCkscHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7UCh0aGlzLGUpLHRoaXMubWFzdGVyU2hlZXQ9TWUubWFzdGVyLHRoaXMuaW5zdGFuY2U9dGhpcy5tYXN0ZXJTaGVldC5jbG9uZSgpLHRoaXMuc2VhbGVkPSExfXJldHVybiBlLnByb3RvdHlwZS5zZWFsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc2VhbGVkKXt2YXIgZT10aGlzLm1hc3RlclNoZWV0LmNsb25lcy5pbmRleE9mKHRoaXMuaW5zdGFuY2UpO3RoaXMubWFzdGVyU2hlZXQuY2xvbmVzLnNwbGljZShlLDEpLHRoaXMuc2VhbGVkPSEwfX0sZS5wcm90b3R5cGUuY29sbGVjdFN0eWxlcz1mdW5jdGlvbihlKXtpZih0aGlzLnNlYWxlZCl0aHJvdyBuZXcgWSgyKTtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KHZ0LHtzaGVldDp0aGlzLmluc3RhbmNlfSxlKX0sZS5wcm90b3R5cGUuZ2V0U3R5bGVUYWdzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VhbCgpLHRoaXMuaW5zdGFuY2UudG9IVE1MKCl9LGUucHJvdG90eXBlLmdldFN0eWxlRWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlYWwoKSx0aGlzLmluc3RhbmNlLnRvUmVhY3RFbGVtZW50cygpfSxlLnByb3RvdHlwZS5pbnRlcmxlYXZlV2l0aE5vZGVTdHJlYW09ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IFkoMyl9LGV9KCksaHQ9KDAsbC5jcmVhdGVDb250ZXh0KSgpLGd0PWh0LkNvbnN1bWVyLHZ0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7UCh0aGlzLHQpO3ZhciByPUgodGhpcyxlLmNhbGwodGhpcyxuKSk7cmV0dXJuIHIuZ2V0Q29udGV4dD1kKHIuZ2V0Q29udGV4dCkscn1yZXR1cm4gVCh0LGUpLHQucHJvdG90eXBlLmdldENvbnRleHQ9ZnVuY3Rpb24oZSx0KXtpZihlKXJldHVybiBlO2lmKHQpcmV0dXJuIG5ldyBNZSh0KTt0aHJvdyBuZXcgWSg0KX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2hpbGRyZW4sbj1lLnNoZWV0LHI9ZS50YXJnZXQ7cmV0dXJuIGwuY3JlYXRlRWxlbWVudChodC5Qcm92aWRlcix7dmFsdWU6dGhpcy5nZXRDb250ZXh0KG4scil9LHQpfSx0fShsLkNvbXBvbmVudCksbXQ9e307dmFyIEN0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtQKHRoaXMsdCk7dmFyIG49SCh0aGlzLGUuY2FsbCh0aGlzKSk7cmV0dXJuIG4uYXR0cnM9e30sbi5yZW5kZXJPdXRlcj1uLnJlbmRlck91dGVyLmJpbmQobiksbi5yZW5kZXJJbm5lcj1uLnJlbmRlcklubmVyLmJpbmQobiksbn1yZXR1cm4gVCh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBsLmNyZWF0ZUVsZW1lbnQoZ3QsbnVsbCx0aGlzLnJlbmRlck91dGVyKX0sdC5wcm90b3R5cGUucmVuZGVyT3V0ZXI9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06TWUubWFzdGVyO3JldHVybiB0aGlzLnN0eWxlU2hlZXQ9ZSx0aGlzLnByb3BzLmZvcndhcmRlZENvbXBvbmVudC5jb21wb25lbnRTdHlsZS5pc1N0YXRpYz90aGlzLnJlbmRlcklubmVyKCk6bC5jcmVhdGVFbGVtZW50KGZ0LG51bGwsdGhpcy5yZW5kZXJJbm5lcil9LHQucHJvdG90eXBlLnJlbmRlcklubmVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMuZm9yd2FyZGVkQ29tcG9uZW50LG49dC5jb21wb25lbnRTdHlsZSxyPXQuZGVmYXVsdFByb3BzLG89KHQuZGlzcGxheU5hbWUsdC5mb2xkZWRDb21wb25lbnRJZHMpLGk9dC5zdHlsZWRDb21wb25lbnRJZCxhPXQudGFyZ2V0LHM9dm9pZCAwO3M9bi5pc1N0YXRpYz90aGlzLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKEQsdGhpcy5wcm9wcyk6dGhpcy5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcyhHZSh0aGlzLnByb3BzLGUscil8fEQsdGhpcy5wcm9wcyk7dmFyIGM9dGhpcy5wcm9wcy5hc3x8dGhpcy5hdHRycy5hc3x8YSx1PVhlKGMpLGY9e30sZD1BKHt9LHRoaXMucHJvcHMsdGhpcy5hdHRycykscD12b2lkIDA7Zm9yKHAgaW4gZClcImZvcndhcmRlZENvbXBvbmVudFwiIT09cCYmXCJhc1wiIT09cCYmKFwiZm9yd2FyZGVkUmVmXCI9PT1wP2YucmVmPWRbcF06XCJmb3J3YXJkZWRBc1wiPT09cD9mLmFzPWRbcF06dSYmIWgocCl8fChmW3BdPWRbcF0pKTtyZXR1cm4gdGhpcy5wcm9wcy5zdHlsZSYmdGhpcy5hdHRycy5zdHlsZSYmKGYuc3R5bGU9QSh7fSx0aGlzLmF0dHJzLnN0eWxlLHRoaXMucHJvcHMuc3R5bGUpKSxmLmNsYXNzTmFtZT1BcnJheS5wcm90b3R5cGUuY29uY2F0KG8saSxzIT09aT9zOm51bGwsdGhpcy5wcm9wcy5jbGFzc05hbWUsdGhpcy5hdHRycy5jbGFzc05hbWUpLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSwoMCxsLmNyZWF0ZUVsZW1lbnQpKGMsZil9LHQucHJvdG90eXBlLmJ1aWxkRXhlY3V0aW9uQ29udGV4dD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxvPUEoe30sdCx7dGhlbWU6ZX0pO3JldHVybiBuLmxlbmd0aD8odGhpcy5hdHRycz17fSxuLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0LG49ZSxpPSExLGE9dm9pZCAwLGw9dm9pZCAwO2ZvcihsIGluIFoobikmJihuPW4obyksaT0hMCksbilhPW5bbF0saXx8IVooYSl8fCh0PWEpJiZ0LnByb3RvdHlwZSYmdC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudHx8TihhKXx8KGE9YShvKSksci5hdHRyc1tsXT1hLG9bbF09YX0pKSxvKTpvfSx0LnByb3RvdHlwZS5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcz1mdW5jdGlvbihlLHQpe3ZhciBuPXQuZm9yd2FyZGVkQ29tcG9uZW50LHI9bi5hdHRycyxvPW4uY29tcG9uZW50U3R5bGU7bi53YXJuVG9vTWFueUNsYXNzZXM7cmV0dXJuIG8uaXNTdGF0aWMmJiFyLmxlbmd0aD9vLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKEQsdGhpcy5zdHlsZVNoZWV0KTpvLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKHRoaXMuYnVpbGRFeGVjdXRpb25Db250ZXh0KGUsdCxyKSx0aGlzLnN0eWxlU2hlZXQpfSx0fShsLkNvbXBvbmVudCk7ZnVuY3Rpb24geXQoZSx0LG4pe3ZhciByPU4oZSksbz0hWGUoZSksaT10LmRpc3BsYXlOYW1lLGE9dm9pZCAwPT09aT9mdW5jdGlvbihlKXtyZXR1cm4gWGUoZSk/XCJzdHlsZWQuXCIrZTpcIlN0eWxlZChcIiskKGUpK1wiKVwifShlKTppLHM9dC5jb21wb25lbnRJZCxjPXZvaWQgMD09PXM/ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVwic3RyaW5nXCIhPXR5cGVvZiB0P1wic2NcIjpLZSh0KSxvPShtdFtyXXx8MCkrMTttdFtyXT1vO3ZhciBpPXIrXCItXCIrZS5nZW5lcmF0ZU5hbWUocitvKTtyZXR1cm4gbj9uK1wiLVwiK2k6aX0oemUsdC5kaXNwbGF5TmFtZSx0LnBhcmVudENvbXBvbmVudElkKTpzLHU9dC5QYXJlbnRDb21wb25lbnQsZj12b2lkIDA9PT11P0N0OnUsZD10LmF0dHJzLHA9dm9pZCAwPT09ZD9WOmQsaD10LmRpc3BsYXlOYW1lJiZ0LmNvbXBvbmVudElkP0tlKHQuZGlzcGxheU5hbWUpK1wiLVwiK3QuY29tcG9uZW50SWQ6dC5jb21wb25lbnRJZHx8YyxnPXImJmUuYXR0cnM/QXJyYXkucHJvdG90eXBlLmNvbmNhdChlLmF0dHJzLHApLmZpbHRlcihCb29sZWFuKTpwLHY9bmV3IHplKHI/ZS5jb21wb25lbnRTdHlsZS5ydWxlcy5jb25jYXQobik6bixnLGgpLG09dm9pZCAwLEM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KGYsQSh7fSxlLHtmb3J3YXJkZWRDb21wb25lbnQ6bSxmb3J3YXJkZWRSZWY6dH0pKX07cmV0dXJuIEMuZGlzcGxheU5hbWU9YSwobT1sLmZvcndhcmRSZWYoQykpLmRpc3BsYXlOYW1lPWEsbS5hdHRycz1nLG0uY29tcG9uZW50U3R5bGU9dixtLmZvbGRlZENvbXBvbmVudElkcz1yP0FycmF5LnByb3RvdHlwZS5jb25jYXQoZS5mb2xkZWRDb21wb25lbnRJZHMsZS5zdHlsZWRDb21wb25lbnRJZCk6VixtLnN0eWxlZENvbXBvbmVudElkPWgsbS50YXJnZXQ9cj9lLnRhcmdldDplLG0ud2l0aENvbXBvbmVudD1mdW5jdGlvbihlKXt2YXIgcj10LmNvbXBvbmVudElkLG89ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn0odCxbXCJjb21wb25lbnRJZFwiXSksaT1yJiZyK1wiLVwiKyhYZShlKT9lOktlKCQoZSkpKTtyZXR1cm4geXQoZSxBKHt9LG8se2F0dHJzOmcsY29tcG9uZW50SWQ6aSxQYXJlbnRDb21wb25lbnQ6Zn0pLG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxcImRlZmF1bHRQcm9wc1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9sZGVkRGVmYXVsdFByb3BzfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZm9sZGVkRGVmYXVsdFByb3BzPXI/TShlLmRlZmF1bHRQcm9wcyx0KTp0fX0pLG0udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIi5cIittLnN0eWxlZENvbXBvbmVudElkfSxvJiZjdChtLGUse2F0dHJzOiEwLGNvbXBvbmVudFN0eWxlOiEwLGRpc3BsYXlOYW1lOiEwLGZvbGRlZENvbXBvbmVudElkczohMCxzdHlsZWRDb21wb25lbnRJZDohMCx0YXJnZXQ6ITAsd2l0aENvbXBvbmVudDohMH0pLG19dmFyIHd0PWZ1bmN0aW9uKGUpe3JldHVybiBWZSh5dCxlKX07W1wiYVwiLFwiYWJiclwiLFwiYWRkcmVzc1wiLFwiYXJlYVwiLFwiYXJ0aWNsZVwiLFwiYXNpZGVcIixcImF1ZGlvXCIsXCJiXCIsXCJiYXNlXCIsXCJiZGlcIixcImJkb1wiLFwiYmlnXCIsXCJibG9ja3F1b3RlXCIsXCJib2R5XCIsXCJiclwiLFwiYnV0dG9uXCIsXCJjYW52YXNcIixcImNhcHRpb25cIixcImNpdGVcIixcImNvZGVcIixcImNvbFwiLFwiY29sZ3JvdXBcIixcImRhdGFcIixcImRhdGFsaXN0XCIsXCJkZFwiLFwiZGVsXCIsXCJkZXRhaWxzXCIsXCJkZm5cIixcImRpYWxvZ1wiLFwiZGl2XCIsXCJkbFwiLFwiZHRcIixcImVtXCIsXCJlbWJlZFwiLFwiZmllbGRzZXRcIixcImZpZ2NhcHRpb25cIixcImZpZ3VyZVwiLFwiZm9vdGVyXCIsXCJmb3JtXCIsXCJoMVwiLFwiaDJcIixcImgzXCIsXCJoNFwiLFwiaDVcIixcImg2XCIsXCJoZWFkXCIsXCJoZWFkZXJcIixcImhncm91cFwiLFwiaHJcIixcImh0bWxcIixcImlcIixcImlmcmFtZVwiLFwiaW1nXCIsXCJpbnB1dFwiLFwiaW5zXCIsXCJrYmRcIixcImtleWdlblwiLFwibGFiZWxcIixcImxlZ2VuZFwiLFwibGlcIixcImxpbmtcIixcIm1haW5cIixcIm1hcFwiLFwibWFya1wiLFwibWFycXVlZVwiLFwibWVudVwiLFwibWVudWl0ZW1cIixcIm1ldGFcIixcIm1ldGVyXCIsXCJuYXZcIixcIm5vc2NyaXB0XCIsXCJvYmplY3RcIixcIm9sXCIsXCJvcHRncm91cFwiLFwib3B0aW9uXCIsXCJvdXRwdXRcIixcInBcIixcInBhcmFtXCIsXCJwaWN0dXJlXCIsXCJwcmVcIixcInByb2dyZXNzXCIsXCJxXCIsXCJycFwiLFwicnRcIixcInJ1YnlcIixcInNcIixcInNhbXBcIixcInNjcmlwdFwiLFwic2VjdGlvblwiLFwic2VsZWN0XCIsXCJzbWFsbFwiLFwic291cmNlXCIsXCJzcGFuXCIsXCJzdHJvbmdcIixcInN0eWxlXCIsXCJzdWJcIixcInN1bW1hcnlcIixcInN1cFwiLFwidGFibGVcIixcInRib2R5XCIsXCJ0ZFwiLFwidGV4dGFyZWFcIixcInRmb290XCIsXCJ0aFwiLFwidGhlYWRcIixcInRpbWVcIixcInRpdGxlXCIsXCJ0clwiLFwidHJhY2tcIixcInVcIixcInVsXCIsXCJ2YXJcIixcInZpZGVvXCIsXCJ3YnJcIixcImNpcmNsZVwiLFwiY2xpcFBhdGhcIixcImRlZnNcIixcImVsbGlwc2VcIixcImZvcmVpZ25PYmplY3RcIixcImdcIixcImltYWdlXCIsXCJsaW5lXCIsXCJsaW5lYXJHcmFkaWVudFwiLFwibWFya2VyXCIsXCJtYXNrXCIsXCJwYXRoXCIsXCJwYXR0ZXJuXCIsXCJwb2x5Z29uXCIsXCJwb2x5bGluZVwiLFwicmFkaWFsR3JhZGllbnRcIixcInJlY3RcIixcInN0b3BcIixcInN2Z1wiLFwidGV4dFwiLFwidHNwYW5cIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7d3RbZV09d3QoZSl9KSk7dmFyIGJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4pe1AodGhpcyxlKSx0aGlzLnJ1bGVzPXQsdGhpcy5jb21wb25lbnRJZD1uLHRoaXMuaXNTdGF0aWM9RmUodCxWKSxNZS5tYXN0ZXIuaGFzSWQobil8fE1lLm1hc3Rlci5kZWZlcnJlZEluamVjdChuLFtdKX1yZXR1cm4gZS5wcm90b3R5cGUuY3JlYXRlU3R5bGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49Y2UoSGUodGhpcy5ydWxlcyxlLHQpLFwiXCIpO3QuaW5qZWN0KHRoaXMuY29tcG9uZW50SWQsbil9LGUucHJvdG90eXBlLnJlbW92ZVN0eWxlcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbXBvbmVudElkO2UuaGFzSWQodCkmJmUucmVtb3ZlKHQpfSxlLnByb3RvdHlwZS5yZW5kZXJTdHlsZXM9ZnVuY3Rpb24oZSx0KXt0aGlzLnJlbW92ZVN0eWxlcyh0KSx0aGlzLmNyZWF0ZVN0eWxlcyhlLHQpfSxlfSgpO2Z1bmN0aW9uIHh0KGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3ZhciBvPUJlLmFwcGx5KHZvaWQgMCxbZV0uY29uY2F0KG4pKSxpPVwic2MtZ2xvYmFsLVwiK0RlKEpTT04uc3RyaW5naWZ5KG8pKSxhPW5ldyBidChvLGkpLHM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtQKHRoaXMsdCk7dmFyIHI9SCh0aGlzLGUuY2FsbCh0aGlzLG4pKSxvPXIuY29uc3RydWN0b3IsaT1vLmdsb2JhbFN0eWxlLGE9by5zdHlsZWRDb21wb25lbnRJZDtyZXR1cm4geiYmKHdpbmRvdy5zY0NHU0hNUkNhY2hlW2FdPSh3aW5kb3cuc2NDR1NITVJDYWNoZVthXXx8MCkrMSksci5zdGF0ZT17Z2xvYmFsU3R5bGU6aSxzdHlsZWRDb21wb25lbnRJZDphfSxyfXJldHVybiBUKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt3aW5kb3cuc2NDR1NITVJDYWNoZVt0aGlzLnN0YXRlLnN0eWxlZENvbXBvbmVudElkXSYmKHdpbmRvdy5zY0NHU0hNUkNhY2hlW3RoaXMuc3RhdGUuc3R5bGVkQ29tcG9uZW50SWRdLT0xKSwwPT09d2luZG93LnNjQ0dTSE1SQ2FjaGVbdGhpcy5zdGF0ZS5zdHlsZWRDb21wb25lbnRJZF0mJnRoaXMuc3RhdGUuZ2xvYmFsU3R5bGUucmVtb3ZlU3R5bGVzKHRoaXMuc3R5bGVTaGVldCl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGwuY3JlYXRlRWxlbWVudChndCxudWxsLChmdW5jdGlvbih0KXtlLnN0eWxlU2hlZXQ9dHx8TWUubWFzdGVyO3ZhciBuPWUuc3RhdGUuZ2xvYmFsU3R5bGU7cmV0dXJuIG4uaXNTdGF0aWM/KG4ucmVuZGVyU3R5bGVzKHEsZS5zdHlsZVNoZWV0KSxudWxsKTpsLmNyZWF0ZUVsZW1lbnQoZnQsbnVsbCwoZnVuY3Rpb24odCl7dmFyIHI9ZS5jb25zdHJ1Y3Rvci5kZWZhdWx0UHJvcHMsbz1BKHt9LGUucHJvcHMpO3JldHVybiB2b2lkIDAhPT10JiYoby50aGVtZT1HZShlLnByb3BzLHQscikpLG4ucmVuZGVyU3R5bGVzKG8sZS5zdHlsZVNoZWV0KSxudWxsfSkpfSkpfSx0fShsLkNvbXBvbmVudCk7cmV0dXJuIHMuZ2xvYmFsU3R5bGU9YSxzLnN0eWxlZENvbXBvbmVudElkPWksc316JiYod2luZG93LnNjQ0dTSE1SQ2FjaGU9e30pO3ZhciBfdD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cXHN8XFxcXG4vZyxcIlwiKX07ZnVuY3Rpb24gT3QoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07dmFyIG89QmUuYXBwbHkodm9pZCAwLFtlXS5jb25jYXQobikpLGk9TmUoRGUoX3QoSlNPTi5zdHJpbmdpZnkobykpKSk7cmV0dXJuIG5ldyBrZShpLGNlKG8saSxcIkBrZXlmcmFtZXNcIikpfXZhciBMdD1mdW5jdGlvbihlKXt2YXIgdD1sLmZvcndhcmRSZWYoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGwuY3JlYXRlRWxlbWVudChmdCxudWxsLChmdW5jdGlvbihyKXt2YXIgbz1lLmRlZmF1bHRQcm9wcyxpPUdlKHQscixvKTtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KGUsQSh7fSx0LHt0aGVtZTppLHJlZjpufSkpfSkpfSkpO3JldHVybiBjdCh0LGUpLHQuZGlzcGxheU5hbWU9XCJXaXRoVGhlbWUoXCIrJChlKStcIilcIix0fSxFdD17U3R5bGVTaGVldDpNZX07Y29uc3QgU3Q9d3R9LDUyNDY6ZT0+e2UuZXhwb3J0cz1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1cIi8qfCovXCIsbj10K1wifVwiO2Z1bmN0aW9uIHIodCl7aWYodCl0cnl7ZSh0K1wifVwiKX1jYXRjaChlKXt9fXJldHVybiBmdW5jdGlvbihvLGksYSxsLHMsYyx1LGYsZCxwKXtzd2l0Y2gobyl7Y2FzZSAxOmlmKDA9PT1kJiY2ND09PWkuY2hhckNvZGVBdCgwKSlyZXR1cm4gZShpK1wiO1wiKSxcIlwiO2JyZWFrO2Nhc2UgMjppZigwPT09ZilyZXR1cm4gaSt0O2JyZWFrO2Nhc2UgMzpzd2l0Y2goZil7Y2FzZSAxMDI6Y2FzZSAxMTI6cmV0dXJuIGUoYVswXStpKSxcIlwiO2RlZmF1bHQ6cmV0dXJuIGkrKDA9PT1wP3Q6XCJcIil9Y2FzZS0yOmkuc3BsaXQobikuZm9yRWFjaChyKX19fX0oKX0sMTk0NjplPT57ZS5leHBvcnRzPWZ1bmN0aW9uIGUodCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49L15cXDArL2cscj0vW1xcMFxcclxcZl0vZyxvPS86ICovZyxpPS96b298Z3JhLyxhPS8oWyw6IF0pKHRyYW5zZm9ybSkvZyxsPS8sK1xccyooPyFbXihdKlspXSkvZyxzPS8gK1xccyooPyFbXihdKlspXSkvZyxjPS8gKltcXDBdICovZyx1PS8sXFxyKz8vZyxmPS8oW1xcdFxcclxcbiBdKSpcXGY/Ji9nLGQ9LzpnbG9iYWxcXCgoKD86W15cXChcXClcXFtcXF1dKnxcXFsuKlxcXXxcXChbXlxcKFxcKV0qXFwpKSopXFwpL2cscD0vXFxXKy9nLGg9L0Aoa1xcdyspXFxzKihcXFMqKVxccyovLGc9Lzo6KHBsYWNlKS9nLHY9LzoocmVhZC1vbmx5KS9nLG09L1xccysoPz1be1xcXTs9Oj5dKS9nLEM9LyhbW309Oj5dKVxccysvZyx5PS8oXFx7W157XSs/KTsoPz1cXH0pL2csdz0vXFxzezIsfS9nLGI9LyhbXlxcKF0pKDorKSAqL2cseD0vW3N2aF1cXHcrLVt0YmxyXXsyfS8sXz0vXFwoXFxzKiguKilcXHMqXFwpL2csTz0vKFtcXHNcXFNdKj8pOy9nLEw9Ly1zZWxmfGZsZXgtL2csRT0vW15dKj8oOltycF1bZWxdYVtcXHctXSspW15dKi8sUz0vc3RyZXRjaHw6XFxzKlxcdytcXC0oPzpjb250ZXxhdmFpbCkvLGo9LyhbXi1dKShpbWFnZS1zZXRcXCgpLyxNPVwiLXdlYmtpdC1cIixrPVwiLW1vei1cIixSPVwiLW1zLVwiLFA9NTksST0xMjUsQT0xMjMsVD00MCxIPTQxLEI9OTEsVj05MyxEPTEwLFo9MTMsJD05LE49NjQsRj0zMixVPTM4LFc9NDUsej05NSxHPTQyLHE9NDQsWT01OCxLPTM5LFg9MzQsSj00NyxRPTYyLGVlPTQzLHRlPTEyNixuZT0wLHJlPTEyLG9lPTExLGllPTEwNyxhZT0xMDksbGU9MTE1LHNlPTExMixjZT0xMTEsdWU9MTA1LGZlPTk5LGRlPTEwMCxwZT0xMTIsaGU9MSxnZT0xLHZlPTAsbWU9MSxDZT0xLHllPTEsd2U9MCxiZT0wLHhlPTAsX2U9W10sT2U9W10sTGU9MCxFZT1udWxsLFNlPS0yLGplPS0xLE1lPTAsa2U9MSxSZT0yLFBlPTMsSWU9MCxBZT0xLFRlPVwiXCIsSGU9XCJcIixCZT1cIlwiO2Z1bmN0aW9uIFZlKGUsdCxvLGksYSl7Zm9yKHZhciBsLHMsdT0wLGY9MCxkPTAscD0wLG09MCxDPTAseT0wLHc9MCx4PTAsTz0wLEw9MCxFPTAsUz0wLGo9MCx6PTAsd2U9MCxPZT0wLEVlPTAsU2U9MCxqZT1vLmxlbmd0aCxaZT1qZS0xLHplPVwiXCIsR2U9XCJcIixxZT1cIlwiLFllPVwiXCIsS2U9XCJcIixYZT1cIlwiO3o8amU7KXtpZih5PW8uY2hhckNvZGVBdCh6KSx6PT09WmUmJmYrcCtkK3UhPT0wJiYoMCE9PWYmJih5PWY9PT1KP0Q6SikscD1kPXU9MCxqZSsrLFplKyspLGYrcCtkK3U9PT0wKXtpZih6PT09WmUmJih3ZT4wJiYoR2U9R2UucmVwbGFjZShyLFwiXCIpKSxHZS50cmltKCkubGVuZ3RoPjApKXtzd2l0Y2goeSl7Y2FzZSBGOmNhc2UgJDpjYXNlIFA6Y2FzZSBaOmNhc2UgRDpicmVhaztkZWZhdWx0OkdlKz1vLmNoYXJBdCh6KX15PVB9aWYoMT09PU9lKXN3aXRjaCh5KXtjYXNlIEE6Y2FzZSBJOmNhc2UgUDpjYXNlIFg6Y2FzZSBLOmNhc2UgVDpjYXNlIEg6Y2FzZSBxOk9lPTA7Y2FzZSAkOmNhc2UgWjpjYXNlIEQ6Y2FzZSBGOmJyZWFrO2RlZmF1bHQ6Zm9yKE9lPTAsU2U9eixtPXksei0tLHk9UDtTZTxqZTspc3dpdGNoKG8uY2hhckNvZGVBdChTZSsrKSl7Y2FzZSBEOmNhc2UgWjpjYXNlIFA6Kyt6LHk9bSxTZT1qZTticmVhaztjYXNlIFk6d2U+MCYmKCsreix5PW0pO2Nhc2UgQTpTZT1qZX19c3dpdGNoKHkpe2Nhc2UgQTpmb3IobT0oR2U9R2UudHJpbSgpKS5jaGFyQ29kZUF0KDApLEw9MSxTZT0rK3o7ejxqZTspe3N3aXRjaCh5PW8uY2hhckNvZGVBdCh6KSl7Y2FzZSBBOkwrKzticmVhaztjYXNlIEk6TC0tO2JyZWFrO2Nhc2UgSjpzd2l0Y2goQz1vLmNoYXJDb2RlQXQoeisxKSl7Y2FzZSBHOmNhc2UgSjp6PVdlKEMseixaZSxvKX1icmVhaztjYXNlIEI6eSsrO2Nhc2UgVDp5Kys7Y2FzZSBYOmNhc2UgSzpmb3IoO3orKzxaZSYmby5jaGFyQ29kZUF0KHopIT09eTspO31pZigwPT09TClicmVhazt6Kyt9aWYocWU9by5zdWJzdHJpbmcoU2UseiksbT09PW5lJiYobT0oR2U9R2UucmVwbGFjZShuLFwiXCIpLnRyaW0oKSkuY2hhckNvZGVBdCgwKSksbT09PU4pe3N3aXRjaCh3ZT4wJiYoR2U9R2UucmVwbGFjZShyLFwiXCIpKSxDPUdlLmNoYXJDb2RlQXQoMSkpe2Nhc2UgZGU6Y2FzZSBhZTpjYXNlIGxlOmNhc2UgVzpsPXQ7YnJlYWs7ZGVmYXVsdDpsPV9lfWlmKFNlPShxZT1WZSh0LGwscWUsQyxhKzEpKS5sZW5ndGgseGU+MCYmMD09PVNlJiYoU2U9R2UubGVuZ3RoKSxMZT4wJiYobD1EZShfZSxHZSxFZSkscz1VZShQZSxxZSxsLHQsZ2UsaGUsU2UsQyxhLGkpLEdlPWwuam9pbihcIlwiKSx2b2lkIDAhPT1zJiYwPT09KFNlPShxZT1zLnRyaW0oKSkubGVuZ3RoKSYmKEM9MCxxZT1cIlwiKSksU2U+MClzd2l0Y2goQyl7Y2FzZSBsZTpHZT1HZS5yZXBsYWNlKF8sRmUpO2Nhc2UgZGU6Y2FzZSBhZTpjYXNlIFc6cWU9R2UrXCJ7XCIrcWUrXCJ9XCI7YnJlYWs7Y2FzZSBpZTpxZT0oR2U9R2UucmVwbGFjZShoLFwiJDEgJDJcIisoQWU+MD9UZTpcIlwiKSkpK1wie1wiK3FlK1wifVwiLHFlPTE9PT1DZXx8Mj09PUNlJiZOZShcIkBcIitxZSwzKT9cIkBcIitNK3FlK1wiQFwiK3FlOlwiQFwiK3FlO2JyZWFrO2RlZmF1bHQ6cWU9R2UrcWUsaT09PXBlJiYoWWUrPXFlLHFlPVwiXCIpfWVsc2UgcWU9XCJcIn1lbHNlIHFlPVZlKHQsRGUodCxHZSxFZSkscWUsaSxhKzEpO0tlKz1xZSxFPTAsT2U9MCxqPTAsd2U9MCxFZT0wLFM9MCxHZT1cIlwiLHFlPVwiXCIseT1vLmNoYXJDb2RlQXQoKyt6KTticmVhaztjYXNlIEk6Y2FzZSBQOmlmKChTZT0oR2U9KHdlPjA/R2UucmVwbGFjZShyLFwiXCIpOkdlKS50cmltKCkpLmxlbmd0aCk+MSlzd2l0Y2goMD09PWomJigobT1HZS5jaGFyQ29kZUF0KDApKT09PVd8fG0+OTYmJm08MTIzKSYmKFNlPShHZT1HZS5yZXBsYWNlKFwiIFwiLFwiOlwiKSkubGVuZ3RoKSxMZT4wJiZ2b2lkIDAhPT0ocz1VZShrZSxHZSx0LGUsZ2UsaGUsWWUubGVuZ3RoLGksYSxpKSkmJjA9PT0oU2U9KEdlPXMudHJpbSgpKS5sZW5ndGgpJiYoR2U9XCJcXDBcXDBcIiksbT1HZS5jaGFyQ29kZUF0KDApLEM9R2UuY2hhckNvZGVBdCgxKSxtKXtjYXNlIG5lOmJyZWFrO2Nhc2UgTjppZihDPT09dWV8fEM9PT1mZSl7WGUrPUdlK28uY2hhckF0KHopO2JyZWFrfWRlZmF1bHQ6aWYoR2UuY2hhckNvZGVBdChTZS0xKT09PVkpYnJlYWs7WWUrPSRlKEdlLG0sQyxHZS5jaGFyQ29kZUF0KDIpKX1FPTAsT2U9MCxqPTAsd2U9MCxFZT0wLEdlPVwiXCIseT1vLmNoYXJDb2RlQXQoKyt6KX19c3dpdGNoKHkpe2Nhc2UgWjpjYXNlIEQ6aWYoZitwK2QrdStiZT09PTApc3dpdGNoKE8pe2Nhc2UgSDpjYXNlIEs6Y2FzZSBYOmNhc2UgTjpjYXNlIHRlOmNhc2UgUTpjYXNlIEc6Y2FzZSBlZTpjYXNlIEo6Y2FzZSBXOmNhc2UgWTpjYXNlIHE6Y2FzZSBQOmNhc2UgQTpjYXNlIEk6YnJlYWs7ZGVmYXVsdDpqPjAmJihPZT0xKX1mPT09Sj9mPTA6bWUrRT09PTAmJmkhPT1pZSYmR2UubGVuZ3RoPjAmJih3ZT0xLEdlKz1cIlxcMFwiKSxMZSpJZT4wJiZVZShNZSxHZSx0LGUsZ2UsaGUsWWUubGVuZ3RoLGksYSxpKSxoZT0xLGdlKys7YnJlYWs7Y2FzZSBQOmNhc2UgSTppZihmK3ArZCt1PT09MCl7aGUrKzticmVha31kZWZhdWx0OnN3aXRjaChoZSsrLHplPW8uY2hhckF0KHopLHkpe2Nhc2UgJDpjYXNlIEY6aWYocCt1K2Y9PT0wKXN3aXRjaCh3KXtjYXNlIHE6Y2FzZSBZOmNhc2UgJDpjYXNlIEY6emU9XCJcIjticmVhaztkZWZhdWx0OnkhPT1GJiYoemU9XCIgXCIpfWJyZWFrO2Nhc2UgbmU6emU9XCJcXFxcMFwiO2JyZWFrO2Nhc2UgcmU6emU9XCJcXFxcZlwiO2JyZWFrO2Nhc2Ugb2U6emU9XCJcXFxcdlwiO2JyZWFrO2Nhc2UgVTpwK2YrdT09PTAmJm1lPjAmJihFZT0xLHdlPTEsemU9XCJcXGZcIit6ZSk7YnJlYWs7Y2FzZSAxMDg6aWYocCtmK3UrdmU9PT0wJiZqPjApc3dpdGNoKHotail7Y2FzZSAyOnc9PT1zZSYmby5jaGFyQ29kZUF0KHotMyk9PT1ZJiYodmU9dyk7Y2FzZSA4Ong9PT1jZSYmKHZlPXgpfWJyZWFrO2Nhc2UgWTpwK2YrdT09PTAmJihqPXopO2JyZWFrO2Nhc2UgcTpmK2QrcCt1PT09MCYmKHdlPTEsemUrPVwiXFxyXCIpO2JyZWFrO2Nhc2UgWDpjYXNlIEs6MD09PWYmJihwPXA9PT15PzA6MD09PXA/eTpwKTticmVhaztjYXNlIEI6cCtmK2Q9PT0wJiZ1Kys7YnJlYWs7Y2FzZSBWOnArZitkPT09MCYmdS0tO2JyZWFrO2Nhc2UgSDpwK2YrdT09PTAmJmQtLTticmVhaztjYXNlIFQ6cCtmK3U9PT0wJiYoMD09PUUmJigyKncrMyp4PT01MzN8fChMPTAsRT0xKSksZCsrKTticmVhaztjYXNlIE46ZitkK3ArdStqK1M9PT0wJiYoUz0xKTticmVhaztjYXNlIEc6Y2FzZSBKOmlmKHArdStkPjApYnJlYWs7c3dpdGNoKGYpe2Nhc2UgMDpzd2l0Y2goMip5KzMqby5jaGFyQ29kZUF0KHorMSkpe2Nhc2UgMjM1OmY9SjticmVhaztjYXNlIDIyMDpTZT16LGY9R31icmVhaztjYXNlIEc6eT09PUomJnc9PT1HJiZTZSsyIT09eiYmKDMzPT09by5jaGFyQ29kZUF0KFNlKzIpJiYoWWUrPW8uc3Vic3RyaW5nKFNlLHorMSkpLHplPVwiXCIsZj0wKX19aWYoMD09PWYpe2lmKG1lK3ArdStTPT09MCYmaSE9PWllJiZ5IT09UClzd2l0Y2goeSl7Y2FzZSBxOmNhc2UgdGU6Y2FzZSBROmNhc2UgZWU6Y2FzZSBIOmNhc2UgVDppZigwPT09RSl7c3dpdGNoKHcpe2Nhc2UgJDpjYXNlIEY6Y2FzZSBEOmNhc2UgWjp6ZSs9XCJcXDBcIjticmVhaztkZWZhdWx0OnplPVwiXFwwXCIremUrKHk9PT1xP1wiXCI6XCJcXDBcIil9d2U9MX1lbHNlIHN3aXRjaCh5KXtjYXNlIFQ6ais3PT09eiYmMTA4PT09dyYmKGo9MCksRT0rK0w7YnJlYWs7Y2FzZSBIOjA9PShFPS0tTCkmJih3ZT0xLHplKz1cIlxcMFwiKX1icmVhaztjYXNlICQ6Y2FzZSBGOnN3aXRjaCh3KXtjYXNlIG5lOmNhc2UgQTpjYXNlIEk6Y2FzZSBQOmNhc2UgcTpjYXNlIHJlOmNhc2UgJDpjYXNlIEY6Y2FzZSBEOmNhc2UgWjpicmVhaztkZWZhdWx0OjA9PT1FJiYod2U9MSx6ZSs9XCJcXDBcIil9fUdlKz16ZSx5IT09RiYmeSE9PSQmJihPPXkpfX14PXcsdz15LHorK31pZihTZT1ZZS5sZW5ndGgseGU+MCYmMD09PVNlJiYwPT09S2UubGVuZ3RoJiYwPT09dFswXS5sZW5ndGg9PTAmJihpIT09YWV8fDE9PT10Lmxlbmd0aCYmKG1lPjA/SGU6QmUpPT09dFswXSkmJihTZT10LmpvaW4oXCIsXCIpLmxlbmd0aCsyKSxTZT4wKXtpZihsPTA9PT1tZSYmaSE9PWllP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLG89MCxpPWUubGVuZ3RoLGE9QXJyYXkoaSk7bzxpOysrbyl7Zm9yKHZhciBsPWVbb10uc3BsaXQoYykscz1cIlwiLHU9MCxmPTAsZD0wLHA9MCxoPWwubGVuZ3RoO3U8aDsrK3UpaWYoISgwPT09KGY9KG49bFt1XSkubGVuZ3RoKSYmaD4xKSl7aWYoZD1zLmNoYXJDb2RlQXQocy5sZW5ndGgtMSkscD1uLmNoYXJDb2RlQXQoMCksdD1cIlwiLDAhPT11KXN3aXRjaChkKXtjYXNlIEc6Y2FzZSB0ZTpjYXNlIFE6Y2FzZSBlZTpjYXNlIEY6Y2FzZSBUOmJyZWFrO2RlZmF1bHQ6dD1cIiBcIn1zd2l0Y2gocCl7Y2FzZSBVOm49dCtIZTtjYXNlIHRlOmNhc2UgUTpjYXNlIGVlOmNhc2UgRjpjYXNlIEg6Y2FzZSBUOmJyZWFrO2Nhc2UgQjpuPXQrbitIZTticmVhaztjYXNlIFk6c3dpdGNoKDIqbi5jaGFyQ29kZUF0KDEpKzMqbi5jaGFyQ29kZUF0KDIpKXtjYXNlIDUzMDppZih5ZT4wKXtuPXQrbi5zdWJzdHJpbmcoOCxmLTEpO2JyZWFrfWRlZmF1bHQ6KHU8MXx8bFt1LTFdLmxlbmd0aDwxKSYmKG49dCtIZStuKX1icmVhaztjYXNlIHE6dD1cIlwiO2RlZmF1bHQ6bj1mPjEmJm4uaW5kZXhPZihcIjpcIik+MD90K24ucmVwbGFjZShiLFwiJDFcIitIZStcIiQyXCIpOnQrbitIZX1zKz1ufWFbb109cy5yZXBsYWNlKHIsXCJcIikudHJpbSgpfXJldHVybiBhfSh0KTp0LExlPjAmJnZvaWQgMCE9PShzPVVlKFJlLFllLGwsZSxnZSxoZSxTZSxpLGEsaSkpJiYwPT09KFllPXMpLmxlbmd0aClyZXR1cm4gWGUrWWUrS2U7aWYoWWU9bC5qb2luKFwiLFwiKStcIntcIitZZStcIn1cIixDZSp2ZSE9MCl7c3dpdGNoKDIhPT1DZXx8TmUoWWUsMil8fCh2ZT0wKSx2ZSl7Y2FzZSBjZTpZZT1ZZS5yZXBsYWNlKHYsXCI6XCIraytcIiQxXCIpK1llO2JyZWFrO2Nhc2Ugc2U6WWU9WWUucmVwbGFjZShnLFwiOjpcIitNK1wiaW5wdXQtJDFcIikrWWUucmVwbGFjZShnLFwiOjpcIitrK1wiJDFcIikrWWUucmVwbGFjZShnLFwiOlwiK1IrXCJpbnB1dC0kMVwiKStZZX12ZT0wfX1yZXR1cm4gWGUrWWUrS2V9ZnVuY3Rpb24gRGUoZSx0LG4pe3ZhciByPXQudHJpbSgpLnNwbGl0KHUpLG89cixpPXIubGVuZ3RoLGE9ZS5sZW5ndGg7c3dpdGNoKGEpe2Nhc2UgMDpjYXNlIDE6Zm9yKHZhciBsPTAscz0wPT09YT9cIlwiOmVbMF0rXCIgXCI7bDxpOysrbClvW2xdPVplKHMsb1tsXSxuLGEpLnRyaW0oKTticmVhaztkZWZhdWx0Omw9MDt2YXIgYz0wO2ZvcihvPVtdO2w8aTsrK2wpZm9yKHZhciBmPTA7ZjxhOysrZilvW2MrK109WmUoZVtmXStcIiBcIixyW2xdLG4sYSkudHJpbSgpfXJldHVybiBvfWZ1bmN0aW9uIFplKGUsdCxuLHIpe3ZhciBvPXQsaT1vLmNoYXJDb2RlQXQoMCk7c3dpdGNoKGk8MzMmJihpPShvPW8udHJpbSgpKS5jaGFyQ29kZUF0KDApKSxpKXtjYXNlIFU6c3dpdGNoKG1lK3Ipe2Nhc2UgMDpjYXNlIDE6aWYoMD09PWUudHJpbSgpLmxlbmd0aClicmVhaztkZWZhdWx0OnJldHVybiBvLnJlcGxhY2UoZixcIiQxXCIrZS50cmltKCkpfWJyZWFrO2Nhc2UgWTppZigxMDMhPT1vLmNoYXJDb2RlQXQoMSkpcmV0dXJuIGUudHJpbSgpK28ucmVwbGFjZShmLFwiJDFcIitlLnRyaW0oKSk7aWYoeWU+MCYmbWU+MClyZXR1cm4gby5yZXBsYWNlKGQsXCIkMVwiKS5yZXBsYWNlKGYsXCIkMVwiK0JlKTtkZWZhdWx0OmlmKG4qbWU+MCYmby5pbmRleE9mKFwiXFxmXCIpPjApcmV0dXJuIG8ucmVwbGFjZShmLChlLmNoYXJDb2RlQXQoMCk9PT1ZP1wiXCI6XCIkMVwiKStlLnRyaW0oKSl9cmV0dXJuIGUrb31mdW5jdGlvbiAkZShlLHQsbixyKXt2YXIgYyx1PTAsZj1lK1wiO1wiLGQ9Mip0KzMqbis0KnI7aWYoOTQ0PT09ZClyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj1lLmluZGV4T2YoXCI6XCIsOSkrMSxyPWUuc3Vic3RyaW5nKDAsbikudHJpbSgpLG89ZS5zdWJzdHJpbmcobix0LTEpLnRyaW0oKTtzd2l0Y2goZS5jaGFyQ29kZUF0KDkpKkFlKXtjYXNlIDA6YnJlYWs7Y2FzZSBXOmlmKDExMCE9PWUuY2hhckNvZGVBdCgxMCkpYnJlYWs7ZGVmYXVsdDp2YXIgaT1vLnNwbGl0KChvPVwiXCIsbCkpLGE9MDtmb3Iobj0wLHQ9aS5sZW5ndGg7YTx0O249MCwrK2Epe2Zvcih2YXIgYz1pW2FdLHU9Yy5zcGxpdChzKTtjPXVbbl07KXt2YXIgZj1jLmNoYXJDb2RlQXQoMCk7aWYoMT09PUFlJiYoZj5OJiZmPDkwfHxmPjk2JiZmPDEyM3x8Zj09PXp8fGY9PT1XJiZjLmNoYXJDb2RlQXQoMSkhPT1XKSYmaXNOYU4ocGFyc2VGbG9hdChjKSkrKC0xIT09Yy5pbmRleE9mKFwiKFwiKSk9PT0xKXN3aXRjaChjKXtjYXNlXCJpbmZpbml0ZVwiOmNhc2VcImFsdGVybmF0ZVwiOmNhc2VcImJhY2t3YXJkc1wiOmNhc2VcInJ1bm5pbmdcIjpjYXNlXCJub3JtYWxcIjpjYXNlXCJmb3J3YXJkc1wiOmNhc2VcImJvdGhcIjpjYXNlXCJub25lXCI6Y2FzZVwibGluZWFyXCI6Y2FzZVwiZWFzZVwiOmNhc2VcImVhc2UtaW5cIjpjYXNlXCJlYXNlLW91dFwiOmNhc2VcImVhc2UtaW4tb3V0XCI6Y2FzZVwicGF1c2VkXCI6Y2FzZVwicmV2ZXJzZVwiOmNhc2VcImFsdGVybmF0ZS1yZXZlcnNlXCI6Y2FzZVwiaW5oZXJpdFwiOmNhc2VcImluaXRpYWxcIjpjYXNlXCJ1bnNldFwiOmNhc2VcInN0ZXAtc3RhcnRcIjpjYXNlXCJzdGVwLWVuZFwiOmJyZWFrO2RlZmF1bHQ6Yys9VGV9dVtuKytdPWN9bys9KDA9PT1hP1wiXCI6XCIsXCIpK3Uuam9pbihcIiBcIil9fXJldHVybiBvPXIrbytcIjtcIiwxPT09Q2V8fDI9PT1DZSYmTmUobywxKT9NK28rbzpvfShmKTtpZigwPT09Q2V8fDI9PT1DZSYmIU5lKGYsMSkpcmV0dXJuIGY7c3dpdGNoKGQpe2Nhc2UgMTAxNTpyZXR1cm4gOTc9PT1mLmNoYXJDb2RlQXQoMTApP00rZitmOmY7Y2FzZSA5NTE6cmV0dXJuIDExNj09PWYuY2hhckNvZGVBdCgzKT9NK2YrZjpmO2Nhc2UgOTYzOnJldHVybiAxMTA9PT1mLmNoYXJDb2RlQXQoNSk/TStmK2Y6ZjtjYXNlIDEwMDk6aWYoMTAwIT09Zi5jaGFyQ29kZUF0KDQpKWJyZWFrO2Nhc2UgOTY5OmNhc2UgOTQyOnJldHVybiBNK2YrZjtjYXNlIDk3ODpyZXR1cm4gTStmK2srZitmO2Nhc2UgMTAxOTpjYXNlIDk4MzpyZXR1cm4gTStmK2srZitSK2YrZjtjYXNlIDg4MzpyZXR1cm4gZi5jaGFyQ29kZUF0KDgpPT09Vz9NK2YrZjpmLmluZGV4T2YoXCJpbWFnZS1zZXQoXCIsMTEpPjA/Zi5yZXBsYWNlKGosXCIkMVwiK00rXCIkMlwiKStmOmY7Y2FzZSA5MzI6aWYoZi5jaGFyQ29kZUF0KDQpPT09Vylzd2l0Y2goZi5jaGFyQ29kZUF0KDUpKXtjYXNlIDEwMzpyZXR1cm4gTStcImJveC1cIitmLnJlcGxhY2UoXCItZ3Jvd1wiLFwiXCIpK00rZitSK2YucmVwbGFjZShcImdyb3dcIixcInBvc2l0aXZlXCIpK2Y7Y2FzZSAxMTU6cmV0dXJuIE0rZitSK2YucmVwbGFjZShcInNocmlua1wiLFwibmVnYXRpdmVcIikrZjtjYXNlIDk4OnJldHVybiBNK2YrUitmLnJlcGxhY2UoXCJiYXNpc1wiLFwicHJlZmVycmVkLXNpemVcIikrZn1yZXR1cm4gTStmK1IrZitmO2Nhc2UgOTY0OnJldHVybiBNK2YrUitcImZsZXgtXCIrZitmO2Nhc2UgMTAyMzppZig5OSE9PWYuY2hhckNvZGVBdCg4KSlicmVhaztyZXR1cm4gYz1mLnN1YnN0cmluZyhmLmluZGV4T2YoXCI6XCIsMTUpKS5yZXBsYWNlKFwiZmxleC1cIixcIlwiKS5yZXBsYWNlKFwic3BhY2UtYmV0d2VlblwiLFwianVzdGlmeVwiKSxNK1wiYm94LXBhY2tcIitjK00rZitSK1wiZmxleC1wYWNrXCIrYytmO2Nhc2UgMTAwNTpyZXR1cm4gaS50ZXN0KGYpP2YucmVwbGFjZShvLFwiOlwiK00pK2YucmVwbGFjZShvLFwiOlwiK2spK2Y6ZjtjYXNlIDFlMzpzd2l0Y2godT0oYz1mLnN1YnN0cmluZygxMykudHJpbSgpKS5pbmRleE9mKFwiLVwiKSsxLGMuY2hhckNvZGVBdCgwKStjLmNoYXJDb2RlQXQodSkpe2Nhc2UgMjI2OmM9Zi5yZXBsYWNlKHgsXCJ0YlwiKTticmVhaztjYXNlIDIzMjpjPWYucmVwbGFjZSh4LFwidGItcmxcIik7YnJlYWs7Y2FzZSAyMjA6Yz1mLnJlcGxhY2UoeCxcImxyXCIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIGZ9cmV0dXJuIE0rZitSK2MrZjtjYXNlIDEwMTc6aWYoLTE9PT1mLmluZGV4T2YoXCJzdGlja3lcIiw5KSlyZXR1cm4gZjtjYXNlIDk3NTpzd2l0Y2godT0oZj1lKS5sZW5ndGgtMTAsZD0oYz0oMzM9PT1mLmNoYXJDb2RlQXQodSk/Zi5zdWJzdHJpbmcoMCx1KTpmKS5zdWJzdHJpbmcoZS5pbmRleE9mKFwiOlwiLDcpKzEpLnRyaW0oKSkuY2hhckNvZGVBdCgwKSsoMHxjLmNoYXJDb2RlQXQoNykpKXtjYXNlIDIwMzppZihjLmNoYXJDb2RlQXQoOCk8MTExKWJyZWFrO2Nhc2UgMTE1OmY9Zi5yZXBsYWNlKGMsTStjKStcIjtcIitmO2JyZWFrO2Nhc2UgMjA3OmNhc2UgMTAyOmY9Zi5yZXBsYWNlKGMsTSsoZD4xMDI/XCJpbmxpbmUtXCI6XCJcIikrXCJib3hcIikrXCI7XCIrZi5yZXBsYWNlKGMsTStjKStcIjtcIitmLnJlcGxhY2UoYyxSK2MrXCJib3hcIikrXCI7XCIrZn1yZXR1cm4gZitcIjtcIjtjYXNlIDkzODppZihmLmNoYXJDb2RlQXQoNSk9PT1XKXN3aXRjaChmLmNoYXJDb2RlQXQoNikpe2Nhc2UgMTA1OnJldHVybiBjPWYucmVwbGFjZShcIi1pdGVtc1wiLFwiXCIpLE0rZitNK1wiYm94LVwiK2MrUitcImZsZXgtXCIrYytmO2Nhc2UgMTE1OnJldHVybiBNK2YrUitcImZsZXgtaXRlbS1cIitmLnJlcGxhY2UoTCxcIlwiKStmO2RlZmF1bHQ6cmV0dXJuIE0rZitSK1wiZmxleC1saW5lLXBhY2tcIitmLnJlcGxhY2UoXCJhbGlnbi1jb250ZW50XCIsXCJcIikucmVwbGFjZShMLFwiXCIpK2Z9YnJlYWs7Y2FzZSA5NzM6Y2FzZSA5ODk6aWYoZi5jaGFyQ29kZUF0KDMpIT09V3x8MTIyPT09Zi5jaGFyQ29kZUF0KDQpKWJyZWFrO2Nhc2UgOTMxOmNhc2UgOTUzOmlmKCEwPT09Uy50ZXN0KGUpKXJldHVybiAxMTU9PT0oYz1lLnN1YnN0cmluZyhlLmluZGV4T2YoXCI6XCIpKzEpKS5jaGFyQ29kZUF0KDApPyRlKGUucmVwbGFjZShcInN0cmV0Y2hcIixcImZpbGwtYXZhaWxhYmxlXCIpLHQsbixyKS5yZXBsYWNlKFwiOmZpbGwtYXZhaWxhYmxlXCIsXCI6c3RyZXRjaFwiKTpmLnJlcGxhY2UoYyxNK2MpK2YucmVwbGFjZShjLGsrYy5yZXBsYWNlKFwiZmlsbC1cIixcIlwiKSkrZjticmVhaztjYXNlIDk2MjppZihmPU0rZisoMTAyPT09Zi5jaGFyQ29kZUF0KDUpP1IrZjpcIlwiKStmLG4rcj09PTIxMSYmMTA1PT09Zi5jaGFyQ29kZUF0KDEzKSYmZi5pbmRleE9mKFwidHJhbnNmb3JtXCIsMTApPjApcmV0dXJuIGYuc3Vic3RyaW5nKDAsZi5pbmRleE9mKFwiO1wiLDI3KSsxKS5yZXBsYWNlKGEsXCIkMVwiK00rXCIkMlwiKStmfXJldHVybiBmfWZ1bmN0aW9uIE5lKGUsdCl7dmFyIG49ZS5pbmRleE9mKDE9PT10P1wiOlwiOlwie1wiKSxyPWUuc3Vic3RyaW5nKDAsMyE9PXQ/bjoxMCksbz1lLnN1YnN0cmluZyhuKzEsZS5sZW5ndGgtMSk7cmV0dXJuIEVlKDIhPT10P3I6ci5yZXBsYWNlKEUsXCIkMVwiKSxvLHQpfWZ1bmN0aW9uIEZlKGUsdCl7dmFyIG49JGUodCx0LmNoYXJDb2RlQXQoMCksdC5jaGFyQ29kZUF0KDEpLHQuY2hhckNvZGVBdCgyKSk7cmV0dXJuIG4hPT10K1wiO1wiP24ucmVwbGFjZShPLFwiIG9yICgkMSlcIikuc3Vic3RyaW5nKDQpOlwiKFwiK3QrXCIpXCJ9ZnVuY3Rpb24gVWUoZSx0LG4scixvLGksYSxsLHMsYyl7Zm9yKHZhciB1LGY9MCxkPXQ7ZjxMZTsrK2Ypc3dpdGNoKHU9T2VbZl0uY2FsbChHZSxlLGQsbixyLG8saSxhLGwscyxjKSl7Y2FzZSB2b2lkIDA6Y2FzZSExOmNhc2UhMDpjYXNlIG51bGw6YnJlYWs7ZGVmYXVsdDpkPXV9aWYoZCE9PXQpcmV0dXJuIGR9ZnVuY3Rpb24gV2UoZSx0LG4scil7Zm9yKHZhciBvPXQrMTtvPG47KytvKXN3aXRjaChyLmNoYXJDb2RlQXQobykpe2Nhc2UgSjppZihlPT09RyYmci5jaGFyQ29kZUF0KG8tMSk9PT1HJiZ0KzIhPT1vKXJldHVybiBvKzE7YnJlYWs7Y2FzZSBEOmlmKGU9PT1KKXJldHVybiBvKzF9cmV0dXJuIG99ZnVuY3Rpb24gemUoZSl7Zm9yKHZhciB0IGluIGUpe3ZhciBuPWVbdF07c3dpdGNoKHQpe2Nhc2VcImtleWZyYW1lXCI6QWU9MHxuO2JyZWFrO2Nhc2VcImdsb2JhbFwiOnllPTB8bjticmVhaztjYXNlXCJjYXNjYWRlXCI6bWU9MHxuO2JyZWFrO2Nhc2VcImNvbXByZXNzXCI6d2U9MHxuO2JyZWFrO2Nhc2VcInNlbWljb2xvblwiOmJlPTB8bjticmVhaztjYXNlXCJwcmVzZXJ2ZVwiOnhlPTB8bjticmVhaztjYXNlXCJwcmVmaXhcIjpFZT1udWxsLG4/XCJmdW5jdGlvblwiIT10eXBlb2Ygbj9DZT0xOihDZT0yLEVlPW4pOkNlPTB9fXJldHVybiB6ZX1mdW5jdGlvbiBHZSh0LG4pe2lmKHZvaWQgMCE9PXRoaXMmJnRoaXMuY29uc3RydWN0b3I9PT1HZSlyZXR1cm4gZSh0KTt2YXIgbz10LGk9by5jaGFyQ29kZUF0KDApO2k8MzMmJihpPShvPW8udHJpbSgpKS5jaGFyQ29kZUF0KDApKSxBZT4wJiYoVGU9by5yZXBsYWNlKHAsaT09PUI/XCJcIjpcIi1cIikpLGk9MSwxPT09bWU/QmU9bzpIZT1vO3ZhciBhLGw9W0JlXTtMZT4wJiZ2b2lkIDAhPT0oYT1VZShqZSxuLGwsbCxnZSxoZSwwLDAsMCwwKSkmJlwic3RyaW5nXCI9PXR5cGVvZiBhJiYobj1hKTt2YXIgcz1WZShfZSxsLG4sMCwwKTtyZXR1cm4gTGU+MCYmdm9pZCAwIT09KGE9VWUoU2UscyxsLGwsZ2UsaGUscy5sZW5ndGgsMCwwLDApKSYmXCJzdHJpbmdcIiE9dHlwZW9mKHM9YSkmJihpPTApLFRlPVwiXCIsQmU9XCJcIixIZT1cIlwiLHZlPTAsZ2U9MSxoZT0xLHdlKmk9PTA/czpzLnJlcGxhY2UocixcIlwiKS5yZXBsYWNlKG0sXCJcIikucmVwbGFjZShDLFwiJDFcIikucmVwbGFjZSh5LFwiJDFcIikucmVwbGFjZSh3LFwiIFwiKX1yZXR1cm4gR2UudXNlPWZ1bmN0aW9uIGUodCl7c3dpdGNoKHQpe2Nhc2Ugdm9pZCAwOmNhc2UgbnVsbDpMZT1PZS5sZW5ndGg9MDticmVhaztkZWZhdWx0OmlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpT2VbTGUrK109dDtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiB0KWZvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyOysrbillKHRbbl0pO2Vsc2UgSWU9MHwhIXR9cmV0dXJuIGV9LEdlLnNldD16ZSx2b2lkIDAhPT10JiZ6ZSh0KSxHZX0obnVsbCl9LDM5MjY6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHthOigpPT52fSk7dmFyIHI9big2Njc4KSxvPW4oNTQzOCksaT1uKDcxMDApLGE9bigxMjEpLGw9big3Mjc4KSxzPW4oOTYxMCk7dmFyIGM9bigxMTI3KTtjb25zdCB1PSgwLG4oOTExNykuWikoYCR7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGZpbiYmZmluPy5tZS5pZGVudGl0eS51dWlkfS1lbnRlcnByaXNlLWJvb2ttYXJrc2ApO3ZhciBmPW4oODYzNik7Y29uc3QgZD1lPT4oe2lkZW50aXR5OmUsb3BlbmZpbldpbmRvdzpmaW4uV2luZG93LndyYXBTeW5jKGUpLF9ib29rbWFya3M6e19jcmVhdGVCb29rbWFya05vZGU6YXN5bmMgZT0+KGFzeW5jIGU9Pihhd2FpdCB1KCkpLmRpc3BhdGNoKGMuYiQuQ3JlYXRlQm9va21hcmtOb2RlLGUpKShlKSxfZ2V0Qm9va21hcmtOb2RlOmFzeW5jIGU9Pihhc3luYyBlPT4oYXdhaXQgdSgpKS5kaXNwYXRjaChjLmIkLkdldEJvb2ttYXJrTm9kZSxlKSkoZSksX3NlYXJjaEJvb2ttYXJrTm9kZXM6YXN5bmMgZT0+KGFzeW5jIGU9Pihhd2FpdCB1KCkpLmRpc3BhdGNoKGMuYiQuU2VhcmNoQm9va21hcmtOb2RlcyxlKSkoZSksX3VwZGF0ZUJvb2ttYXJrTm9kZTphc3luYyBlPT4oYXN5bmMgZT0+KGF3YWl0IHUoKSkuZGlzcGF0Y2goYy5iJC5VcGRhdGVCb29rbWFya05vZGUsZSkpKGUpLF9kZWxldGVCb29rbWFya05vZGU6YXN5bmMgZT0+KGFzeW5jIGU9Pihhd2FpdCB1KCkpLmRpc3BhdGNoKGMuYiQuRGVsZXRlQm9va21hcmtOb2RlLGUpKShlKX0sZ2V0UGFnZXM6YXN5bmMoKT0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uR2V0UGFnZXNGb3JXaW5kb3csZSksZ2V0UGFnZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5HZXRQYWdlRm9yV2luZG93LHtpZGVudGl0eTplLHBhZ2VJZDp0fSksYWRkUGFnZTphc3luYyB0PT4oMCxmLmFBKSgpLkJyb3dzZXIud3JhcFN5bmMoZSkuX2FkZFBhZ2UodCksX2FkZFBhZ2U6YXN5bmModCxuKT0+e2NvbnN0IHI9YXdhaXQoMCxvLnhwKShlKSxpPXtpZGVudGl0eTplLHBhZ2U6dCxpbnNlcnRpb25JbmRleDpuPy5pbmRleH07cmV0dXJuIHIuZGlzcGF0Y2goby5mbi5BZGRQYWdlLGkpfSxyZW1vdmVQYWdlOmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLkRldGFjaFBhZ2VzRnJvbVdpbmRvdyx7aWRlbnRpdHk6ZSxwYWdlSWRzOlt0XX0pLHJlcGFyZW50UGFnZTphc3luYyB0PT4oMCxmLmFBKSgpLkJyb3dzZXIud3JhcFN5bmMoZSkuX3JlcGFyZW50UGFnZSh0KSxfcmVwYXJlbnRQYWdlOmFzeW5jIHQ9Pntjb25zdHtwYWdlSWQ6bn09dCxyPWF3YWl0KDAsby54cCkoZSksaT0oYXdhaXQgci5kaXNwYXRjaChvLmZuLkdldEFsbEF0dGFjaGVkUGFnZXMsdm9pZCAwKSkuZmluZCgoKHtwYWdlSWQ6ZX0pPT5lPT09bikpO2lmKCFpKXRocm93IG5ldyBFcnJvcihgUmVwYXJlbnQgUGFnZSBFcnJvcjogVGFyZ2V0IHBhZ2Ugd2l0aCBwYWdlSWQgJHtufSBub3QgZm91bmRgKTtpLm11bHRpSW5zdGFuY2VWaWV3QmVoYXZpb3I9XCJyZXBhcmVudFwiO2NvbnN0IGE9e2lkZW50aXR5OmUscGFnZXM6W2ldLGluc2VydGlvbkluZGV4OnQuaW5kZXh9O3JldHVybiByLmRpc3BhdGNoKG8uZm4uQXR0YWNoUGFnZXNUb1dpbmRvdyxhKX0sc2V0QWN0aXZlUGFnZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5TZXRBY3RpdmVQYWdlLHtpZGVudGl0eTplLHBhZ2VJZDp0fSksdXBkYXRlUGFnZTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCgwLG8ueHApKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaChvLmZuLlVwZGF0ZVBhZ2VGb3JXaW5kb3csdCl9LHJlb3JkZXJQYWdlczphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCgwLG8ueHApKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaChvLmZuLlJlb3JkZXJQYWdlc0ZvcldpbmRvdyx0KX0sX29wZW5HbG9iYWxDb250ZXh0TWVudTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCgwLG8ueHApKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaChvLmZuLk9wZW5HbG9iYWxDb250ZXh0TWVudUludGVybmFsLHQpfSxyZXBsYWNlVG9vbGJhck9wdGlvbnM6YXN5bmMgdD0+e2F3YWl0KDAsby54cCkoZSk7Y29uc3Qgbj1maW4uV2luZG93LndyYXBTeW5jKGUpO2F3YWl0IG4udXBkYXRlT3B0aW9ucyh7d29ya3NwYWNlUGxhdGZvcm06e3Rvb2xiYXJPcHRpb25zOnR9fSl9LHJlcGxhY2VXaW5kb3dTdGF0ZUJ1dHRvbk9wdGlvbnM6YXN5bmMgdD0+e2F3YWl0KDAsby54cCkoZSk7Y29uc3Qgbj1maW4uV2luZG93LndyYXBTeW5jKGUpO2F3YWl0IG4udXBkYXRlT3B0aW9ucyh7d29ya3NwYWNlUGxhdGZvcm06e3dpbmRvd1N0YXRlQnV0dG9uT3B0aW9uczp0fX0pfSx1cGRhdGVCcm93c2VyV2luZG93VGl0bGU6YXN5bmMgdD0+e2NvbnN0IG49ZmluLldpbmRvdy53cmFwU3luYyhlKTtcInN0cmluZ1wiIT10eXBlb2YgdD9hd2FpdCBuLnVwZGF0ZU9wdGlvbnMoe3dvcmtzcGFjZVBsYXRmb3JtOnt0aXRsZTp0fX0pOmNvbnNvbGUud2FybihcIlR5cGUgc3RyaW5nIGZvciB3aW5kb3cgdGl0bGUgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBXaW5kb3dUaXRsZSB0eXBlIGluc3RlYWRcIix0KX0sX29wZW5WaWV3VGFiQ29udGV4dE1lbnU6YXN5bmMgdD0+e2NvbnN0IG49YXdhaXQoMCxvLnhwKShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goby5mbi5PcGVuVmlld1RhYkNvbnRleHRNZW51SW50ZXJuYWwsdCl9LF9vcGVuUGFnZVRhYkNvbnRleHRNZW51OmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0KDAsby54cCkoZSk7cmV0dXJuIHQuaWRlbnRpdHk9ZSxuLmRpc3BhdGNoKG8uZm4uT3BlblBhZ2VUYWJDb250ZXh0TWVudUludGVybmFsLHQpfSxfb3BlblNhdmVNb2RhbDphc3luYyB0PT57YXdhaXQoMCxvLnhwKShlKTtyZXR1cm4oYXdhaXQoMCxjLkRtKShlKSkuZGlzcGF0Y2goYy55ei5PcGVuU2F2ZU1vZGFsSW50ZXJuYWwsdCl9LF9vcGVuU2F2ZUJ1dHRvbkNvbnRleHRNZW51OmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0KDAsby54cCkoZSk7cmV0dXJuIHQuaWRlbnRpdHk9ZSxuLmRpc3BhdGNoKG8uZm4uT3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsLHQpfSxfYWRkRGVmYXVsdFBhZ2U6YXN5bmMgdD0+e2NvbnN0IG49YXdhaXQoMCxvLnhwKShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goby5mbi5BZGREZWZhdWx0UGFnZSx0KX0sX3RyYWNrUmVtb3ZlZFRhYjphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5UcmFja1JlbW92ZWRUYWJJbnRlcm5hbCx0KSxfcmVzdG9yZVJlbW92ZWRUYWI6YXN5bmMgdD0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uUmVzdG9yZVJlbW92ZWRUYWJJbnRlcm5hbCx0KSxfdHJhY2tWaXNpdGVkU2l0ZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5UcmFja1Zpc2l0ZWRTaXRlSW50ZXJuYWwsdCksX2dldFJlY2VudGx5VmlzaXRlZFNpdGVzOmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLkdldFJlY2VudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWwsdCksX2dldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXM6YXN5bmMgdD0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uR2V0RnJlcXVlbnRseVZpc2l0ZWRTaXRlc0ludGVybmFsLHQpLF9zZWFyY2hTaXRlczphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5TZWFyY2hTaXRlc0ludGVybmFsLHtpZGVudGl0eTplLHJlcTp0fSksX2dldEN1cmF0ZWRDb250ZW50OmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLkdldEN1cmF0ZWRDb250ZW50SW50ZXJuYWwse2lkZW50aXR5OmUscmVxOnR9KSxfaGFuZGxlUmVxdWVzdE5hdmlnYXRpb246YXN5bmMgdD0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uSGFuZGxlUmVxdWVzdE5hdmlnYXRpb25JbnRlcm5hbCx0KX0pLHA9ZT0+e2NvbnN0IHQ9ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpO3JldHVybnt3cmFwU3luYzplPT5kKGUpLGNyZWF0ZVdpbmRvdzphc3luYyBuPT57Y29uc3Qgcj0oKCk9Pntjb25zdCBlPWBicm93c2VyLXdpbmRvdy1zdGFydHVwLSR7KDAscy5IKSgpfWA7cmV0dXJuIGwuWi5tYXJrU3RhcnQoZSksZX0pKCk7KGU9PntmaW4uQXBwbGljYXRpb24ud3JhcFN5bmMoe3V1aWQ6ZmluLm1lLmlkZW50aXR5LnV1aWR9KS5vbmNlKFwid2luZG93LXNob3duXCIsKCgpPT57bC5aLm1hcmtBbmRNZWFzdXJlKFwiYnJvd3Nlci13aW5kb3ctc2hvd25cIixlKX0pKX0pKHIpLGF3YWl0KDAsby54cCkoZSk7Y29uc3QgaT1hd2FpdCB0LmNyZWF0ZVdpbmRvdyhuKTtyZXR1cm4oZT0+e2wuWi5tYXJrQW5kTWVhc3VyZShcImJyb3dzZXItd2luZG93LXN0YXJ0ZWRcIixlKX0pKHIpLGQoaS5pZGVudGl0eSl9LGdldEFsbEF0dGFjaGVkUGFnZXM6YXN5bmMoKT0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uR2V0QWxsQXR0YWNoZWRQYWdlcyx2b2lkIDApLGdldEFsbFdpbmRvd3M6YXN5bmMoKT0+e2F3YWl0KDAsby54cCkoZSk7cmV0dXJuKGF3YWl0KDAsYS5HUCkoKSkubWFwKChlPT5kKGUuaWRlbnRpdHkpKSl9LGdldFVuaXF1ZVBhZ2VUaXRsZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5HZXRVbmlxdWVQYWdlVGl0bGUsdCksZ2V0TGFzdEZvY3VzZWRXaW5kb3c6YXN5bmMoKT0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uR2V0TGFzdEZvY3VzZWRCcm93c2VyV2luZG93LHZvaWQgMCl9fSxoPWU9Pih7Y3JlYXRlUGFnZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5DcmVhdGVTYXZlZFBhZ2VJbnRlcm5hbCx0KSxkZWxldGVQYWdlOmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLkRlbGV0ZVNhdmVkUGFnZUludGVybmFsLHQpLHVwZGF0ZVBhZ2U6YXN5bmMgdD0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uVXBkYXRlU2F2ZWRQYWdlSW50ZXJuYWwsdCksZ2V0UGFnZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5HZXRTYXZlZFBhZ2UsdCksZ2V0UGFnZXM6YXN5bmMgdD0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uR2V0U2F2ZWRQYWdlcyx0KSxzYXZlUGFnZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5TYXZlUGFnZSx0KSxjcmVhdGVXb3Jrc3BhY2U6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uQ3JlYXRlU2F2ZWRXb3Jrc3BhY2UsdCksZGVsZXRlV29ya3NwYWNlOmFzeW5jIHQ9Pntjb25zdCBuPXYoKSxyPWF3YWl0IG4uZ2V0Q3VycmVudFdvcmtzcGFjZSgpO2lmKHIud29ya3NwYWNlSWQ9PT10KXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGRlbGV0ZSBjdXJyZW50IGFjdGl2ZSB3b3Jrc3BhY2UgJHtyLnRpdGxlfWApO3JldHVybihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLkRlbGV0ZVNhdmVkV29ya3NwYWNlLHQpfSx1cGRhdGVXb3Jrc3BhY2U6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uVXBkYXRlU2F2ZWRXb3Jrc3BhY2UsdCksZ2V0V29ya3NwYWNlOmFzeW5jIHQ9Pihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLkdldFNhdmVkV29ya3NwYWNlLHQpLGdldFdvcmtzcGFjZXM6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uR2V0U2F2ZWRXb3Jrc3BhY2VzLHQpLHNhdmVXb3Jrc3BhY2U6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uU2F2ZVdvcmtzcGFjZSx0KSxnZXREb2NrUHJvdmlkZXJDb25maWc6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uR2V0RG9ja1Byb3ZpZGVyQ29uZmlnLHQpLHNhdmVEb2NrUHJvdmlkZXJDb25maWc6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uU2F2ZURvY2tQcm92aWRlckNvbmZpZyx0KX0pO3ZhciBnPW4oNzA1KTtjb25zdCB2PSgpPT4oZT0+e2NvbnN0IHQ9ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpO2xldCBuO3JldHVybiBPYmplY3QuYXNzaWduKHQse2FwcGx5U25hcHNob3Q6YXN5bmModCxuKT0+e2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0JiYhdD8ud2luZG93cyl0aHJvdyBuZXcgRXJyb3IoXCJOb3QgYSB2YWxpZCBicm93c2VyIHNuYXBzaG90XCIpO3JldHVybiBmaW4uUGxhdGZvcm0ud3JhcFN5bmMoZSkuYXBwbHlTbmFwc2hvdCh0LG4pfSxnZXRTbmFwc2hvdDooKT0+ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmdldFNuYXBzaG90KCkudGhlbigoZT0+ZSkpLGdldFZpZXdTbmFwc2hvdDp0PT5maW4uUGxhdGZvcm0ud3JhcFN5bmMoZSkuZ2V0Vmlld1NuYXBzaG90KHQpLGNyZWF0ZVZpZXc6KHQsbixyKT0+ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmNyZWF0ZVZpZXcodCxuLHIpLGxhdW5jaEFwcDphc3luYyB0PT4oY29uc29sZS53YXJuKFwibGF1bmNoQXBwIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgY3JlYXRlVmlldyAtIGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuZmluLmNvL29mLWRvY3MvZG9jcy9wbGF0Zm9ybS1nZXR0aW5nLXN0YXJ0ZWQjYWRkLWEtdmlldy10by1hbi1leGlzdGluZy13aW5kb3cgb3IgIGNyZWF0ZVdpbmRvdyAtIGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuZmluLmNvL29mLWRvY3MvZG9jcy9wbGF0Zm9ybS1nZXR0aW5nLXN0YXJ0ZWQjY3JlYXRlLWEtcGxhdGZvcm0td2luZG93IGluc3RlYWQuXCIpLHQudGFyZ2V0fHwodC50YXJnZXQ9e3V1aWQ6ci5BQixuYW1lOnIub0MsZW50aXR5VHlwZTpyLkNMfHxcInVua25vd25cIn0pLChhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLkxhdW5jaEFwcCx0KSksX2ludm9rZUN1c3RvbUFjdGlvbjphc3luYyh0LG4pPT57Y29uc3Qgcj1hd2FpdCgwLG8uajcpKGUpLGE9e2FjdGlvbklkOnQscGF5bG9hZDp7Li4ubixjYWxsZXJUeXBlOm4uY2FsbGVyVHlwZXx8aS4kZy5BUEl9fTtyZXR1cm4gci5kaXNwYXRjaChvLmZuLkludm9rZUN1c3RvbUFjdGlvbkludGVybmFsLGEpfSxfcmVxdWVzdFF1aXRQbGF0Zm9ybURpYWxvZzphc3luYyB0PT4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5SZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nSW50ZXJuYWwsdCksZ2V0Q3VycmVudFdvcmtzcGFjZTphc3luYygpPT4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5HZXRDdXJyZW50V29ya3NwYWNlLHZvaWQgMCksYXBwbHlXb3Jrc3BhY2U6YXN5bmModCxuKT0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uQXBwbHlXb3Jrc3BhY2Usey4uLnQsb3B0aW9uczpufSksc2V0QWN0aXZlV29ya3NwYWNlOmFzeW5jIHQ9Pihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLlNldEFjdGl2ZVdvcmtzcGFjZSx0KSxnZXRMYW5ndWFnZTphc3luYygpPT4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5HZXRMYW5ndWFnZSksX2dldExhbmd1YWdlUmVzb3VyY2VzOmFzeW5jKCk9Pihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLkdldExhbmd1YWdlUmVzb3VyY2VzSW50ZXJuYWwpLHNldExhbmd1YWdlOmFzeW5jIHQ9Pihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLlNldExhbmd1YWdlLHQpLF9yYWlzZUFuYWx5dGljczphc3luYyB0PT57aWYobnx8KG49YXdhaXQoMCxvLkhoKShlKSksXCJvYmplY3RcIj09dHlwZW9mIG4mJm4/LmFuYWx5dGljcz8uaXNTdXBwb3J0ZWQpcmV0dXJuKGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uQW5hbHl0aWNzLHQpO2UudXVpZH0sZ2V0Tm90aWZpY2F0aW9uc0NvbmZpZzphc3luYygpPT4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5HZXROb3RpZmljYXRpb25zQ29uZmlnKSxfcmVmcmVzaEJvb2ttYXJrc0ludGVybmFsOmFzeW5jKCk9Pihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLlJlZnJlc2hCb29rbWFya3NJbnRlcm5hbCksVGhlbWU6KDAsZy5QMCkoZSksQnJvd3NlcjpwKGUpLFN0b3JhZ2U6aChlKX0pfSkoZmluLm1lLmlkZW50aXR5KX0sNzA1OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7UDA6KCk9PmF9KTtuKDgwNjEpLG4oNDcyOCksbig2MDA1KSxuKDEyMSksbigxMTI3KTt2YXIgcj1uKDkxMTcpO3ZhciBvOyFmdW5jdGlvbihlKXtlLlVwZGF0ZVBsYXRmb3JtVGhlbWVTY2hlbWU9XCJ1cGRhdGUtcGxhdGZvcm0tdGhlbWUtc2NoZW1lXCJ9KG98fChvPXt9KSk7KDAsci5aKShcIm9mLXdvcmtzcGFjZS1ub3RpZmljYXRpb25zLXN5bmNcIik7big1MTUwKTt2YXIgaT1uKDU0MzgpO2NvbnN0IGE9ZT0+KHtnZXRUaGVtZXM6YXN5bmMoKT0+KGF3YWl0KDAsaS5qNykoZSkpLmRpc3BhdGNoKGkuZm4uR2V0VGhlbWVzLHZvaWQgMCksc2V0U2VsZWN0ZWRTY2hlbWU6YXN5bmMgdD0+KGF3YWl0KDAsaS5qNykoZSkpLmRpc3BhdGNoKGkuZm4uU2V0U2VsZWN0ZWRTY2hlbWUsdCksZ2V0U2VsZWN0ZWRTY2hlbWU6YXN5bmMoKT0+KGF3YWl0KDAsaS5qNykoZSkpLmRpc3BhdGNoKGkuZm4uR2V0U2VsZWN0ZWRTY2hlbWUsdm9pZCAwKX0pfSw4NjM2OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7YUE6KCk9PnEuYX0pO24oNzEwMCksbig4NDIzKTt2YXIgcj1uKDY2NzgpLG89KG4oNjUzMiksbig3Mzc4KSk7dmFyIGk9big1ODA2KTt2YXIgYT1uKDYwMDUpLGw9bigxMjEpO24oODMxMSksbigyMzA0KTtPYmplY3QuY3JlYXRlKG51bGwpOygwLG8uY3JlYXRlQ29udGV4dCkoKTtjb25zdCBzPXt0eXBlOlwibG9nZ2VyXCIsbG9nKGUpe3RoaXMub3V0cHV0KFwibG9nXCIsZSl9LHdhcm4oZSl7dGhpcy5vdXRwdXQoXCJ3YXJuXCIsZSl9LGVycm9yKGUpe3RoaXMub3V0cHV0KFwiZXJyb3JcIixlKX0sb3V0cHV0KGUsdCl7Y29uc29sZSYmY29uc29sZVtlXSYmY29uc29sZVtlXS5hcHBseShjb25zb2xlLHQpfX07Y2xhc3MgY3tjb25zdHJ1Y3RvcihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307dGhpcy5pbml0KGUsdCl9aW5pdChlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307dGhpcy5wcmVmaXg9dC5wcmVmaXh8fFwiaTE4bmV4dDpcIix0aGlzLmxvZ2dlcj1lfHxzLHRoaXMub3B0aW9ucz10LHRoaXMuZGVidWc9dC5kZWJ1Z31sb2coKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gdGhpcy5mb3J3YXJkKHQsXCJsb2dcIixcIlwiLCEwKX13YXJuKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHRoaXMuZm9yd2FyZCh0LFwid2FyblwiLFwiXCIsITApfWVycm9yKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHRoaXMuZm9yd2FyZCh0LFwiZXJyb3JcIixcIlwiKX1kZXByZWNhdGUoKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gdGhpcy5mb3J3YXJkKHQsXCJ3YXJuXCIsXCJXQVJOSU5HIERFUFJFQ0FURUQ6IFwiLCEwKX1mb3J3YXJkKGUsdCxuLHIpe3JldHVybiByJiYhdGhpcy5kZWJ1Zz9udWxsOihcInN0cmluZ1wiPT10eXBlb2YgZVswXSYmKGVbMF09YCR7bn0ke3RoaXMucHJlZml4fSAke2VbMF19YCksdGhpcy5sb2dnZXJbdF0oZSkpfWNyZWF0ZShlKXtyZXR1cm4gbmV3IGModGhpcy5sb2dnZXIse3ByZWZpeDpgJHt0aGlzLnByZWZpeH06JHtlfTpgLC4uLnRoaXMub3B0aW9uc30pfWNsb25lKGUpe3JldHVybihlPWV8fHRoaXMub3B0aW9ucykucHJlZml4PWUucHJlZml4fHx0aGlzLnByZWZpeCxuZXcgYyh0aGlzLmxvZ2dlcixlKX19dmFyIHU9bmV3IGM7Y2xhc3MgZntjb25zdHJ1Y3Rvcigpe3RoaXMub2JzZXJ2ZXJzPXt9fW9uKGUsdCl7cmV0dXJuIGUuc3BsaXQoXCIgXCIpLmZvckVhY2goKGU9Pnt0aGlzLm9ic2VydmVyc1tlXXx8KHRoaXMub2JzZXJ2ZXJzW2VdPW5ldyBNYXApO2NvbnN0IG49dGhpcy5vYnNlcnZlcnNbZV0uZ2V0KHQpfHwwO3RoaXMub2JzZXJ2ZXJzW2VdLnNldCh0LG4rMSl9KSksdGhpc31vZmYoZSx0KXt0aGlzLm9ic2VydmVyc1tlXSYmKHQ/dGhpcy5vYnNlcnZlcnNbZV0uZGVsZXRlKHQpOmRlbGV0ZSB0aGlzLm9ic2VydmVyc1tlXSl9ZW1pdChlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07aWYodGhpcy5vYnNlcnZlcnNbZV0pe0FycmF5LmZyb20odGhpcy5vYnNlcnZlcnNbZV0uZW50cmllcygpKS5mb3JFYWNoKChlPT57bGV0W3Qscl09ZTtmb3IobGV0IGU9MDtlPHI7ZSsrKXQoLi4ubil9KSl9aWYodGhpcy5vYnNlcnZlcnNbXCIqXCJdKXtBcnJheS5mcm9tKHRoaXMub2JzZXJ2ZXJzW1wiKlwiXS5lbnRyaWVzKCkpLmZvckVhY2goKHQ9PntsZXRbcixvXT10O2ZvcihsZXQgdD0wO3Q8bzt0Kyspci5hcHBseShyLFtlLC4uLm5dKX0pKX19fWZ1bmN0aW9uIGQoKXtsZXQgZSx0O2NvbnN0IG49bmV3IFByb21pc2UoKChuLHIpPT57ZT1uLHQ9cn0pKTtyZXR1cm4gbi5yZXNvbHZlPWUsbi5yZWplY3Q9dCxufWZ1bmN0aW9uIHAoZSl7cmV0dXJuIG51bGw9PWU/XCJcIjpcIlwiK2V9Y29uc3QgaD0vIyMjL2c7ZnVuY3Rpb24gZyhlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5pbmRleE9mKFwiIyMjXCIpPi0xP2UucmVwbGFjZShoLFwiLlwiKTplfWZ1bmN0aW9uIG8oKXtyZXR1cm4hZXx8XCJzdHJpbmdcIj09dHlwZW9mIGV9Y29uc3QgaT1cInN0cmluZ1wiIT10eXBlb2YgdD90OnQuc3BsaXQoXCIuXCIpO2xldCBhPTA7Zm9yKDthPGkubGVuZ3RoLTE7KXtpZihvKCkpcmV0dXJue307Y29uc3QgdD1yKGlbYV0pOyFlW3RdJiZuJiYoZVt0XT1uZXcgbiksZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KT9lW3RdOnt9LCsrYX1yZXR1cm4gbygpP3t9OntvYmo6ZSxrOnIoaVthXSl9fWZ1bmN0aW9uIHYoZSx0LG4pe2NvbnN0e29iajpyLGs6b309ZyhlLHQsT2JqZWN0KTtpZih2b2lkIDAhPT1yfHwxPT09dC5sZW5ndGgpcmV0dXJuIHZvaWQocltvXT1uKTtsZXQgaT10W3QubGVuZ3RoLTFdLGE9dC5zbGljZSgwLHQubGVuZ3RoLTEpLGw9ZyhlLGEsT2JqZWN0KTtmb3IoO3ZvaWQgMD09PWwub2JqJiZhLmxlbmd0aDspaT1gJHthW2EubGVuZ3RoLTFdfS4ke2l9YCxhPWEuc2xpY2UoMCxhLmxlbmd0aC0xKSxsPWcoZSxhLE9iamVjdCksbCYmbC5vYmomJnZvaWQgMCE9PWwub2JqW2Ake2wua30uJHtpfWBdJiYobC5vYmo9dm9pZCAwKTtsLm9ialtgJHtsLmt9LiR7aX1gXT1ufWZ1bmN0aW9uIG0oZSx0KXtjb25zdHtvYmo6bixrOnJ9PWcoZSx0KTtpZihuKXJldHVybiBuW3JdfWZ1bmN0aW9uIEMoZSx0LG4pe2Zvcihjb25zdCByIGluIHQpXCJfX3Byb3RvX19cIiE9PXImJlwiY29uc3RydWN0b3JcIiE9PXImJihyIGluIGU/XCJzdHJpbmdcIj09dHlwZW9mIGVbcl18fGVbcl1pbnN0YW5jZW9mIFN0cmluZ3x8XCJzdHJpbmdcIj09dHlwZW9mIHRbcl18fHRbcl1pbnN0YW5jZW9mIFN0cmluZz9uJiYoZVtyXT10W3JdKTpDKGVbcl0sdFtyXSxuKTplW3JdPXRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIHkoZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xcLVxcW1xcXVxcL1xce1xcfVxcKFxcKVxcKlxcK1xcP1xcLlxcXFxcXF5cXCRcXHxdL2csXCJcXFxcJCZcIil9dmFyIHc9e1wiJlwiOlwiJmFtcDtcIixcIjxcIjpcIiZsdDtcIixcIj5cIjpcIiZndDtcIiwnXCInOlwiJnF1b3Q7XCIsXCInXCI6XCImIzM5O1wiLFwiL1wiOlwiJiN4MkY7XCJ9O2Z1bmN0aW9uIGIoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/ZS5yZXBsYWNlKC9bJjw+XCInXFwvXS9nLChlPT53W2VdKSk6ZX1jb25zdCB4PVtcIiBcIixcIixcIixcIj9cIixcIiFcIixcIjtcIl0sXz1uZXcgY2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5jYXBhY2l0eT1lLHRoaXMucmVnRXhwTWFwPW5ldyBNYXAsdGhpcy5yZWdFeHBRdWV1ZT1bXX1nZXRSZWdFeHAoZSl7Y29uc3QgdD10aGlzLnJlZ0V4cE1hcC5nZXQoZSk7aWYodm9pZCAwIT09dClyZXR1cm4gdDtjb25zdCBuPW5ldyBSZWdFeHAoZSk7cmV0dXJuIHRoaXMucmVnRXhwUXVldWUubGVuZ3RoPT09dGhpcy5jYXBhY2l0eSYmdGhpcy5yZWdFeHBNYXAuZGVsZXRlKHRoaXMucmVnRXhwUXVldWUuc2hpZnQoKSksdGhpcy5yZWdFeHBNYXAuc2V0KGUsbiksdGhpcy5yZWdFeHBRdWV1ZS5wdXNoKGUpLG59fSgyMCk7ZnVuY3Rpb24gTyhlLHQpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpcIi5cIjtpZighZSlyZXR1cm47aWYoZVt0XSlyZXR1cm4gZVt0XTtjb25zdCByPXQuc3BsaXQobik7bGV0IG89ZTtmb3IobGV0IGU9MDtlPHIubGVuZ3RoOyl7aWYoIW98fFwib2JqZWN0XCIhPXR5cGVvZiBvKXJldHVybjtsZXQgdCxpPVwiXCI7Zm9yKGxldCBhPWU7YTxyLmxlbmd0aDsrK2EpaWYoYSE9PWUmJihpKz1uKSxpKz1yW2FdLHQ9b1tpXSx2b2lkIDAhPT10KXtpZihbXCJzdHJpbmdcIixcIm51bWJlclwiLFwiYm9vbGVhblwiXS5pbmRleE9mKHR5cGVvZiB0KT4tMSYmYTxyLmxlbmd0aC0xKWNvbnRpbnVlO2UrPWEtZSsxO2JyZWFrfW89dH1yZXR1cm4gb31mdW5jdGlvbiBMKGUpe3JldHVybiBlJiZlLmluZGV4T2YoXCJfXCIpPjA/ZS5yZXBsYWNlKFwiX1wiLFwiLVwiKTplfWNsYXNzIEUgZXh0ZW5kcyBme2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7bnM6W1widHJhbnNsYXRpb25cIl0sZGVmYXVsdE5TOlwidHJhbnNsYXRpb25cIn07c3VwZXIoKSx0aGlzLmRhdGE9ZXx8e30sdGhpcy5vcHRpb25zPXQsdm9pZCAwPT09dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciYmKHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I9XCIuXCIpLHZvaWQgMD09PXRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlJiYodGhpcy5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmU9ITApfWFkZE5hbWVzcGFjZXMoZSl7dGhpcy5vcHRpb25zLm5zLmluZGV4T2YoZSk8MCYmdGhpcy5vcHRpb25zLm5zLnB1c2goZSl9cmVtb3ZlTmFtZXNwYWNlcyhlKXtjb25zdCB0PXRoaXMub3B0aW9ucy5ucy5pbmRleE9mKGUpO3Q+LTEmJnRoaXMub3B0aW9ucy5ucy5zcGxpY2UodCwxKX1nZXRSZXNvdXJjZShlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O2NvbnN0IG89dm9pZCAwIT09ci5rZXlTZXBhcmF0b3I/ci5rZXlTZXBhcmF0b3I6dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcixpPXZvaWQgMCE9PXIuaWdub3JlSlNPTlN0cnVjdHVyZT9yLmlnbm9yZUpTT05TdHJ1Y3R1cmU6dGhpcy5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmU7bGV0IGE7ZS5pbmRleE9mKFwiLlwiKT4tMT9hPWUuc3BsaXQoXCIuXCIpOihhPVtlLHRdLG4mJihBcnJheS5pc0FycmF5KG4pP2EucHVzaCguLi5uKTpcInN0cmluZ1wiPT10eXBlb2YgbiYmbz9hLnB1c2goLi4ubi5zcGxpdChvKSk6YS5wdXNoKG4pKSk7Y29uc3QgbD1tKHRoaXMuZGF0YSxhKTtyZXR1cm4hbCYmIXQmJiFuJiZlLmluZGV4T2YoXCIuXCIpPi0xJiYoZT1hWzBdLHQ9YVsxXSxuPWEuc2xpY2UoMikuam9pbihcIi5cIikpLGx8fCFpfHxcInN0cmluZ1wiIT10eXBlb2Ygbj9sOk8odGhpcy5kYXRhJiZ0aGlzLmRhdGFbZV0mJnRoaXMuZGF0YVtlXVt0XSxuLG8pfWFkZFJlc291cmNlKGUsdCxuLHIpe2xldCBvPWFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdP2FyZ3VtZW50c1s0XTp7c2lsZW50OiExfTtjb25zdCBpPXZvaWQgMCE9PW8ua2V5U2VwYXJhdG9yP28ua2V5U2VwYXJhdG9yOnRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I7bGV0IGE9W2UsdF07biYmKGE9YS5jb25jYXQoaT9uLnNwbGl0KGkpOm4pKSxlLmluZGV4T2YoXCIuXCIpPi0xJiYoYT1lLnNwbGl0KFwiLlwiKSxyPXQsdD1hWzFdKSx0aGlzLmFkZE5hbWVzcGFjZXModCksdih0aGlzLmRhdGEsYSxyKSxvLnNpbGVudHx8dGhpcy5lbWl0KFwiYWRkZWRcIixlLHQsbixyKX1hZGRSZXNvdXJjZXMoZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7c2lsZW50OiExfTtmb3IoY29uc3QgciBpbiBuKVwic3RyaW5nXCIhPXR5cGVvZiBuW3JdJiZcIltvYmplY3QgQXJyYXldXCIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KG5bcl0pfHx0aGlzLmFkZFJlc291cmNlKGUsdCxyLG5bcl0se3NpbGVudDohMH0pO3Iuc2lsZW50fHx0aGlzLmVtaXQoXCJhZGRlZFwiLGUsdCxuKX1hZGRSZXNvdXJjZUJ1bmRsZShlLHQsbixyLG8pe2xldCBpPWFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdP2FyZ3VtZW50c1s1XTp7c2lsZW50OiExfSxhPVtlLHRdO2UuaW5kZXhPZihcIi5cIik+LTEmJihhPWUuc3BsaXQoXCIuXCIpLHI9bixuPXQsdD1hWzFdKSx0aGlzLmFkZE5hbWVzcGFjZXModCk7bGV0IGw9bSh0aGlzLmRhdGEsYSl8fHt9O3I/QyhsLG4sbyk6bD17Li4ubCwuLi5ufSx2KHRoaXMuZGF0YSxhLGwpLGkuc2lsZW50fHx0aGlzLmVtaXQoXCJhZGRlZFwiLGUsdCxuKX1yZW1vdmVSZXNvdXJjZUJ1bmRsZShlLHQpe3RoaXMuaGFzUmVzb3VyY2VCdW5kbGUoZSx0KSYmZGVsZXRlIHRoaXMuZGF0YVtlXVt0XSx0aGlzLnJlbW92ZU5hbWVzcGFjZXModCksdGhpcy5lbWl0KFwicmVtb3ZlZFwiLGUsdCl9aGFzUmVzb3VyY2VCdW5kbGUoZSx0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5nZXRSZXNvdXJjZShlLHQpfWdldFJlc291cmNlQnVuZGxlKGUsdCl7cmV0dXJuIHR8fCh0PXRoaXMub3B0aW9ucy5kZWZhdWx0TlMpLFwidjFcIj09PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJP3suLi50aGlzLmdldFJlc291cmNlKGUsdCl9OnRoaXMuZ2V0UmVzb3VyY2UoZSx0KX1nZXREYXRhQnlMYW5ndWFnZShlKXtyZXR1cm4gdGhpcy5kYXRhW2VdfWhhc0xhbmd1YWdlU29tZVRyYW5zbGF0aW9ucyhlKXtjb25zdCB0PXRoaXMuZ2V0RGF0YUJ5TGFuZ3VhZ2UoZSk7cmV0dXJuISEodCYmT2JqZWN0LmtleXModCl8fFtdKS5maW5kKChlPT50W2VdJiZPYmplY3Qua2V5cyh0W2VdKS5sZW5ndGg+MCkpfXRvSlNPTigpe3JldHVybiB0aGlzLmRhdGF9fXZhciBTPXtwcm9jZXNzb3JzOnt9LGFkZFBvc3RQcm9jZXNzb3IoZSl7dGhpcy5wcm9jZXNzb3JzW2UubmFtZV09ZX0saGFuZGxlKGUsdCxuLHIsbyl7cmV0dXJuIGUuZm9yRWFjaCgoZT0+e3RoaXMucHJvY2Vzc29yc1tlXSYmKHQ9dGhpcy5wcm9jZXNzb3JzW2VdLnByb2Nlc3ModCxuLHIsbykpfSkpLHR9fTtjb25zdCBqPXt9O2NsYXNzIE0gZXh0ZW5kcyBme2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtzdXBlcigpLGZ1bmN0aW9uKGUsdCxuKXtlLmZvckVhY2goKGU9Pnt0W2VdJiYobltlXT10W2VdKX0pKX0oW1wicmVzb3VyY2VTdG9yZVwiLFwibGFuZ3VhZ2VVdGlsc1wiLFwicGx1cmFsUmVzb2x2ZXJcIixcImludGVycG9sYXRvclwiLFwiYmFja2VuZENvbm5lY3RvclwiLFwiaTE4bkZvcm1hdFwiLFwidXRpbHNcIl0sZSx0aGlzKSx0aGlzLm9wdGlvbnM9dCx2b2lkIDA9PT10aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yJiYodGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcj1cIi5cIiksdGhpcy5sb2dnZXI9dS5jcmVhdGUoXCJ0cmFuc2xhdG9yXCIpfWNoYW5nZUxhbmd1YWdlKGUpe2UmJih0aGlzLmxhbmd1YWdlPWUpfWV4aXN0cyhlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2ludGVycG9sYXRpb246e319O2lmKG51bGw9PWUpcmV0dXJuITE7Y29uc3Qgbj10aGlzLnJlc29sdmUoZSx0KTtyZXR1cm4gbiYmdm9pZCAwIT09bi5yZXN9ZXh0cmFjdEZyb21LZXkoZSx0KXtsZXQgbj12b2lkIDAhPT10Lm5zU2VwYXJhdG9yP3QubnNTZXBhcmF0b3I6dGhpcy5vcHRpb25zLm5zU2VwYXJhdG9yO3ZvaWQgMD09PW4mJihuPVwiOlwiKTtjb25zdCByPXZvaWQgMCE9PXQua2V5U2VwYXJhdG9yP3Qua2V5U2VwYXJhdG9yOnRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I7bGV0IG89dC5uc3x8dGhpcy5vcHRpb25zLmRlZmF1bHROU3x8W107Y29uc3QgaT1uJiZlLmluZGV4T2Yobik+LTEsYT0hKHRoaXMub3B0aW9ucy51c2VyRGVmaW5lZEtleVNlcGFyYXRvcnx8dC5rZXlTZXBhcmF0b3J8fHRoaXMub3B0aW9ucy51c2VyRGVmaW5lZE5zU2VwYXJhdG9yfHx0Lm5zU2VwYXJhdG9yfHxmdW5jdGlvbihlLHQsbil7dD10fHxcIlwiLG49bnx8XCJcIjtjb25zdCByPXguZmlsdGVyKChlPT50LmluZGV4T2YoZSk8MCYmbi5pbmRleE9mKGUpPDApKTtpZigwPT09ci5sZW5ndGgpcmV0dXJuITA7Y29uc3Qgbz1fLmdldFJlZ0V4cChgKCR7ci5tYXAoKGU9PlwiP1wiPT09ZT9cIlxcXFw/XCI6ZSkpLmpvaW4oXCJ8XCIpfSlgKTtsZXQgaT0hby50ZXN0KGUpO2lmKCFpKXtjb25zdCB0PWUuaW5kZXhPZihuKTt0PjAmJiFvLnRlc3QoZS5zdWJzdHJpbmcoMCx0KSkmJihpPSEwKX1yZXR1cm4gaX0oZSxuLHIpKTtpZihpJiYhYSl7Y29uc3QgdD1lLm1hdGNoKHRoaXMuaW50ZXJwb2xhdG9yLm5lc3RpbmdSZWdleHApO2lmKHQmJnQubGVuZ3RoPjApcmV0dXJue2tleTplLG5hbWVzcGFjZXM6b307Y29uc3QgaT1lLnNwbGl0KG4pOyhuIT09cnx8bj09PXImJnRoaXMub3B0aW9ucy5ucy5pbmRleE9mKGlbMF0pPi0xKSYmKG89aS5zaGlmdCgpKSxlPWkuam9pbihyKX1yZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgbyYmKG89W29dKSx7a2V5OmUsbmFtZXNwYWNlczpvfX10cmFuc2xhdGUoZSx0LG4pe2lmKFwib2JqZWN0XCIhPXR5cGVvZiB0JiZ0aGlzLm9wdGlvbnMub3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXImJih0PXRoaXMub3B0aW9ucy5vdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlcihhcmd1bWVudHMpKSxcIm9iamVjdFwiPT10eXBlb2YgdCYmKHQ9ey4uLnR9KSx0fHwodD17fSksbnVsbD09ZSlyZXR1cm5cIlwiO0FycmF5LmlzQXJyYXkoZSl8fChlPVtTdHJpbmcoZSldKTtjb25zdCByPXZvaWQgMCE9PXQucmV0dXJuRGV0YWlscz90LnJldHVybkRldGFpbHM6dGhpcy5vcHRpb25zLnJldHVybkRldGFpbHMsbz12b2lkIDAhPT10LmtleVNlcGFyYXRvcj90LmtleVNlcGFyYXRvcjp0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yLHtrZXk6aSxuYW1lc3BhY2VzOmF9PXRoaXMuZXh0cmFjdEZyb21LZXkoZVtlLmxlbmd0aC0xXSx0KSxsPWFbYS5sZW5ndGgtMV0scz10LmxuZ3x8dGhpcy5sYW5ndWFnZSxjPXQuYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGV8fHRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb0NJTW9kZTtpZihzJiZcImNpbW9kZVwiPT09cy50b0xvd2VyQ2FzZSgpKXtpZihjKXtjb25zdCBlPXQubnNTZXBhcmF0b3J8fHRoaXMub3B0aW9ucy5uc1NlcGFyYXRvcjtyZXR1cm4gcj97cmVzOmAke2x9JHtlfSR7aX1gLHVzZWRLZXk6aSxleGFjdFVzZWRLZXk6aSx1c2VkTG5nOnMsdXNlZE5TOmwsdXNlZFBhcmFtczp0aGlzLmdldFVzZWRQYXJhbXNEZXRhaWxzKHQpfTpgJHtsfSR7ZX0ke2l9YH1yZXR1cm4gcj97cmVzOmksdXNlZEtleTppLGV4YWN0VXNlZEtleTppLHVzZWRMbmc6cyx1c2VkTlM6bCx1c2VkUGFyYW1zOnRoaXMuZ2V0VXNlZFBhcmFtc0RldGFpbHModCl9Oml9Y29uc3QgdT10aGlzLnJlc29sdmUoZSx0KTtsZXQgZj11JiZ1LnJlcztjb25zdCBkPXUmJnUudXNlZEtleXx8aSxwPXUmJnUuZXhhY3RVc2VkS2V5fHxpLGg9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShmKSxnPXZvaWQgMCE9PXQuam9pbkFycmF5cz90LmpvaW5BcnJheXM6dGhpcy5vcHRpb25zLmpvaW5BcnJheXMsdj0hdGhpcy5pMThuRm9ybWF0fHx0aGlzLmkxOG5Gb3JtYXQuaGFuZGxlQXNPYmplY3Q7aWYodiYmZiYmKFwic3RyaW5nXCIhPXR5cGVvZiBmJiZcImJvb2xlYW5cIiE9dHlwZW9mIGYmJlwibnVtYmVyXCIhPXR5cGVvZiBmKSYmW1wiW29iamVjdCBOdW1iZXJdXCIsXCJbb2JqZWN0IEZ1bmN0aW9uXVwiLFwiW29iamVjdCBSZWdFeHBdXCJdLmluZGV4T2YoaCk8MCYmKFwic3RyaW5nXCIhPXR5cGVvZiBnfHxcIltvYmplY3QgQXJyYXldXCIhPT1oKSl7aWYoIXQucmV0dXJuT2JqZWN0cyYmIXRoaXMub3B0aW9ucy5yZXR1cm5PYmplY3RzKXt0aGlzLm9wdGlvbnMucmV0dXJuZWRPYmplY3RIYW5kbGVyfHx0aGlzLmxvZ2dlci53YXJuKFwiYWNjZXNzaW5nIGFuIG9iamVjdCAtIGJ1dCByZXR1cm5PYmplY3RzIG9wdGlvbnMgaXMgbm90IGVuYWJsZWQhXCIpO2NvbnN0IGU9dGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlcj90aGlzLm9wdGlvbnMucmV0dXJuZWRPYmplY3RIYW5kbGVyKGQsZix7Li4udCxuczphfSk6YGtleSAnJHtpfSAoJHt0aGlzLmxhbmd1YWdlfSknIHJldHVybmVkIGFuIG9iamVjdCBpbnN0ZWFkIG9mIHN0cmluZy5gO3JldHVybiByPyh1LnJlcz1lLHUudXNlZFBhcmFtcz10aGlzLmdldFVzZWRQYXJhbXNEZXRhaWxzKHQpLHUpOmV9aWYobyl7Y29uc3QgZT1cIltvYmplY3QgQXJyYXldXCI9PT1oLG49ZT9bXTp7fSxyPWU/cDpkO2Zvcihjb25zdCBlIGluIGYpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsZSkpe2NvbnN0IGk9YCR7cn0ke299JHtlfWA7bltlXT10aGlzLnRyYW5zbGF0ZShpLHsuLi50LGpvaW5BcnJheXM6ITEsbnM6YX0pLG5bZV09PT1pJiYobltlXT1mW2VdKX1mPW59fWVsc2UgaWYodiYmXCJzdHJpbmdcIj09dHlwZW9mIGcmJlwiW29iamVjdCBBcnJheV1cIj09PWgpZj1mLmpvaW4oZyksZiYmKGY9dGhpcy5leHRlbmRUcmFuc2xhdGlvbihmLGUsdCxuKSk7ZWxzZXtsZXQgcj0hMSxhPSExO2NvbnN0IGM9dm9pZCAwIT09dC5jb3VudCYmXCJzdHJpbmdcIiE9dHlwZW9mIHQuY291bnQsZD1NLmhhc0RlZmF1bHRWYWx1ZSh0KSxwPWM/dGhpcy5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXgocyx0LmNvdW50LHQpOlwiXCIsaD10Lm9yZGluYWwmJmM/dGhpcy5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXgocyx0LmNvdW50LHtvcmRpbmFsOiExfSk6XCJcIixnPWMmJiF0Lm9yZGluYWwmJjA9PT10LmNvdW50JiZ0aGlzLnBsdXJhbFJlc29sdmVyLnNob3VsZFVzZUludGxBcGkoKSx2PWcmJnRbYGRlZmF1bHRWYWx1ZSR7dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcn16ZXJvYF18fHRbYGRlZmF1bHRWYWx1ZSR7cH1gXXx8dFtgZGVmYXVsdFZhbHVlJHtofWBdfHx0LmRlZmF1bHRWYWx1ZTshdGhpcy5pc1ZhbGlkTG9va3VwKGYpJiZkJiYocj0hMCxmPXYpLHRoaXMuaXNWYWxpZExvb2t1cChmKXx8KGE9ITAsZj1pKTtjb25zdCBtPSh0Lm1pc3NpbmdLZXlOb1ZhbHVlRmFsbGJhY2tUb0tleXx8dGhpcy5vcHRpb25zLm1pc3NpbmdLZXlOb1ZhbHVlRmFsbGJhY2tUb0tleSkmJmE/dm9pZCAwOmYsQz1kJiZ2IT09ZiYmdGhpcy5vcHRpb25zLnVwZGF0ZU1pc3Npbmc7aWYoYXx8cnx8Qyl7aWYodGhpcy5sb2dnZXIubG9nKEM/XCJ1cGRhdGVLZXlcIjpcIm1pc3NpbmdLZXlcIixzLGwsaSxDP3Y6Ziksbyl7Y29uc3QgZT10aGlzLnJlc29sdmUoaSx7Li4udCxrZXlTZXBhcmF0b3I6ITF9KTtlJiZlLnJlcyYmdGhpcy5sb2dnZXIud2FybihcIlNlZW1zIHRoZSBsb2FkZWQgdHJhbnNsYXRpb25zIHdlcmUgaW4gZmxhdCBKU09OIGZvcm1hdCBpbnN0ZWFkIG9mIG5lc3RlZC4gRWl0aGVyIHNldCBrZXlTZXBhcmF0b3I6IGZhbHNlIG9uIGluaXQgb3IgbWFrZSBzdXJlIHlvdXIgdHJhbnNsYXRpb25zIGFyZSBwdWJsaXNoZWQgaW4gbmVzdGVkIGZvcm1hdC5cIil9bGV0IGU9W107Y29uc3Qgbj10aGlzLmxhbmd1YWdlVXRpbHMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcsdC5sbmd8fHRoaXMubGFuZ3VhZ2UpO2lmKFwiZmFsbGJhY2tcIj09PXRoaXMub3B0aW9ucy5zYXZlTWlzc2luZ1RvJiZuJiZuWzBdKWZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKWUucHVzaChuW3RdKTtlbHNlXCJhbGxcIj09PXRoaXMub3B0aW9ucy5zYXZlTWlzc2luZ1RvP2U9dGhpcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeSh0LmxuZ3x8dGhpcy5sYW5ndWFnZSk6ZS5wdXNoKHQubG5nfHx0aGlzLmxhbmd1YWdlKTtjb25zdCByPShlLG4scik9Pntjb25zdCBvPWQmJnIhPT1mP3I6bTt0aGlzLm9wdGlvbnMubWlzc2luZ0tleUhhbmRsZXI/dGhpcy5vcHRpb25zLm1pc3NpbmdLZXlIYW5kbGVyKGUsbCxuLG8sQyx0KTp0aGlzLmJhY2tlbmRDb25uZWN0b3ImJnRoaXMuYmFja2VuZENvbm5lY3Rvci5zYXZlTWlzc2luZyYmdGhpcy5iYWNrZW5kQ29ubmVjdG9yLnNhdmVNaXNzaW5nKGUsbCxuLG8sQyx0KSx0aGlzLmVtaXQoXCJtaXNzaW5nS2V5XCIsZSxsLG4sZil9O3RoaXMub3B0aW9ucy5zYXZlTWlzc2luZyYmKHRoaXMub3B0aW9ucy5zYXZlTWlzc2luZ1BsdXJhbHMmJmM/ZS5mb3JFYWNoKChlPT57Y29uc3Qgbj10aGlzLnBsdXJhbFJlc29sdmVyLmdldFN1ZmZpeGVzKGUsdCk7ZyYmdFtgZGVmYXVsdFZhbHVlJHt0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yfXplcm9gXSYmbi5pbmRleE9mKGAke3RoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3J9emVyb2ApPDAmJm4ucHVzaChgJHt0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yfXplcm9gKSxuLmZvckVhY2goKG49PntyKFtlXSxpK24sdFtgZGVmYXVsdFZhbHVlJHtufWBdfHx2KX0pKX0pKTpyKGUsaSx2KSl9Zj10aGlzLmV4dGVuZFRyYW5zbGF0aW9uKGYsZSx0LHUsbiksYSYmZj09PWkmJnRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb01pc3NpbmdLZXkmJihmPWAke2x9OiR7aX1gKSwoYXx8cikmJnRoaXMub3B0aW9ucy5wYXJzZU1pc3NpbmdLZXlIYW5kbGVyJiYoZj1cInYxXCIhPT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQST90aGlzLm9wdGlvbnMucGFyc2VNaXNzaW5nS2V5SGFuZGxlcih0aGlzLm9wdGlvbnMuYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5P2Ake2x9OiR7aX1gOmkscj9mOnZvaWQgMCk6dGhpcy5vcHRpb25zLnBhcnNlTWlzc2luZ0tleUhhbmRsZXIoZikpfXJldHVybiByPyh1LnJlcz1mLHUudXNlZFBhcmFtcz10aGlzLmdldFVzZWRQYXJhbXNEZXRhaWxzKHQpLHUpOmZ9ZXh0ZW5kVHJhbnNsYXRpb24oZSx0LG4scixvKXt2YXIgaT10aGlzO2lmKHRoaXMuaTE4bkZvcm1hdCYmdGhpcy5pMThuRm9ybWF0LnBhcnNlKWU9dGhpcy5pMThuRm9ybWF0LnBhcnNlKGUsey4uLnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMsLi4ubn0sbi5sbmd8fHRoaXMubGFuZ3VhZ2V8fHIudXNlZExuZyxyLnVzZWROUyxyLnVzZWRLZXkse3Jlc29sdmVkOnJ9KTtlbHNlIGlmKCFuLnNraXBJbnRlcnBvbGF0aW9uKXtuLmludGVycG9sYXRpb24mJnRoaXMuaW50ZXJwb2xhdG9yLmluaXQoey4uLm4saW50ZXJwb2xhdGlvbjp7Li4udGhpcy5vcHRpb25zLmludGVycG9sYXRpb24sLi4ubi5pbnRlcnBvbGF0aW9ufX0pO2NvbnN0IGE9XCJzdHJpbmdcIj09dHlwZW9mIGUmJihuJiZuLmludGVycG9sYXRpb24mJnZvaWQgMCE9PW4uaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM/bi5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlczp0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXMpO2xldCBsO2lmKGEpe2NvbnN0IHQ9ZS5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTtsPXQmJnQubGVuZ3RofWxldCBzPW4ucmVwbGFjZSYmXCJzdHJpbmdcIiE9dHlwZW9mIG4ucmVwbGFjZT9uLnJlcGxhY2U6bjtpZih0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzJiYocz17Li4udGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcywuLi5zfSksZT10aGlzLmludGVycG9sYXRvci5pbnRlcnBvbGF0ZShlLHMsbi5sbmd8fHRoaXMubGFuZ3VhZ2UsbiksYSl7Y29uc3QgdD1lLm1hdGNoKHRoaXMuaW50ZXJwb2xhdG9yLm5lc3RpbmdSZWdleHApO2w8KHQmJnQubGVuZ3RoKSYmKG4ubmVzdD0hMSl9IW4ubG5nJiZcInYxXCIhPT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQSSYmciYmci5yZXMmJihuLmxuZz1yLnVzZWRMbmcpLCExIT09bi5uZXN0JiYoZT10aGlzLmludGVycG9sYXRvci5uZXN0KGUsKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksYT0wO2E8ZTthKyspclthXT1hcmd1bWVudHNbYV07cmV0dXJuIG8mJm9bMF09PT1yWzBdJiYhbi5jb250ZXh0PyhpLmxvZ2dlci53YXJuKGBJdCBzZWVtcyB5b3UgYXJlIG5lc3RpbmcgcmVjdXJzaXZlbHkga2V5OiAke3JbMF19IGluIGtleTogJHt0WzBdfWApLG51bGwpOmkudHJhbnNsYXRlKC4uLnIsdCl9KSxuKSksbi5pbnRlcnBvbGF0aW9uJiZ0aGlzLmludGVycG9sYXRvci5yZXNldCgpfWNvbnN0IGE9bi5wb3N0UHJvY2Vzc3x8dGhpcy5vcHRpb25zLnBvc3RQcm9jZXNzLGw9XCJzdHJpbmdcIj09dHlwZW9mIGE/W2FdOmE7cmV0dXJuIG51bGwhPWUmJmwmJmwubGVuZ3RoJiYhMSE9PW4uYXBwbHlQb3N0UHJvY2Vzc29yJiYoZT1TLmhhbmRsZShsLGUsdCx0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5wb3N0UHJvY2Vzc1Bhc3NSZXNvbHZlZD97aTE4blJlc29sdmVkOnsuLi5yLHVzZWRQYXJhbXM6dGhpcy5nZXRVc2VkUGFyYW1zRGV0YWlscyhuKX0sLi4ubn06bix0aGlzKSksZX1yZXNvbHZlKGUpe2xldCB0LG4scixvLGksYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtlXSksZS5mb3JFYWNoKChlPT57aWYodGhpcy5pc1ZhbGlkTG9va3VwKHQpKXJldHVybjtjb25zdCBsPXRoaXMuZXh0cmFjdEZyb21LZXkoZSxhKSxzPWwua2V5O249cztsZXQgYz1sLm5hbWVzcGFjZXM7dGhpcy5vcHRpb25zLmZhbGxiYWNrTlMmJihjPWMuY29uY2F0KHRoaXMub3B0aW9ucy5mYWxsYmFja05TKSk7Y29uc3QgdT12b2lkIDAhPT1hLmNvdW50JiZcInN0cmluZ1wiIT10eXBlb2YgYS5jb3VudCxmPXUmJiFhLm9yZGluYWwmJjA9PT1hLmNvdW50JiZ0aGlzLnBsdXJhbFJlc29sdmVyLnNob3VsZFVzZUludGxBcGkoKSxkPXZvaWQgMCE9PWEuY29udGV4dCYmKFwic3RyaW5nXCI9PXR5cGVvZiBhLmNvbnRleHR8fFwibnVtYmVyXCI9PXR5cGVvZiBhLmNvbnRleHQpJiZcIlwiIT09YS5jb250ZXh0LHA9YS5sbmdzP2EubG5nczp0aGlzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGEubG5nfHx0aGlzLmxhbmd1YWdlLGEuZmFsbGJhY2tMbmcpO2MuZm9yRWFjaCgoZT0+e3RoaXMuaXNWYWxpZExvb2t1cCh0KXx8KGk9ZSwhaltgJHtwWzBdfS0ke2V9YF0mJnRoaXMudXRpbHMmJnRoaXMudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlJiYhdGhpcy51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UoaSkmJihqW2Ake3BbMF19LSR7ZX1gXT0hMCx0aGlzLmxvZ2dlci53YXJuKGBrZXkgXCIke259XCIgZm9yIGxhbmd1YWdlcyBcIiR7cC5qb2luKFwiLCBcIil9XCIgd29uJ3QgZ2V0IHJlc29sdmVkIGFzIG5hbWVzcGFjZSBcIiR7aX1cIiB3YXMgbm90IHlldCBsb2FkZWRgLFwiVGhpcyBtZWFucyBzb21ldGhpbmcgSVMgV1JPTkcgaW4geW91ciBzZXR1cC4gWW91IGFjY2VzcyB0aGUgdCBmdW5jdGlvbiBiZWZvcmUgaTE4bmV4dC5pbml0IC8gaTE4bmV4dC5sb2FkTmFtZXNwYWNlIC8gaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSB3YXMgZG9uZS4gV2FpdCBmb3IgdGhlIGNhbGxiYWNrIG9yIFByb21pc2UgdG8gcmVzb2x2ZSBiZWZvcmUgYWNjZXNzaW5nIGl0ISEhXCIpKSxwLmZvckVhY2goKG49PntpZih0aGlzLmlzVmFsaWRMb29rdXAodCkpcmV0dXJuO289bjtjb25zdCBpPVtzXTtpZih0aGlzLmkxOG5Gb3JtYXQmJnRoaXMuaTE4bkZvcm1hdC5hZGRMb29rdXBLZXlzKXRoaXMuaTE4bkZvcm1hdC5hZGRMb29rdXBLZXlzKGkscyxuLGUsYSk7ZWxzZXtsZXQgZTt1JiYoZT10aGlzLnBsdXJhbFJlc29sdmVyLmdldFN1ZmZpeChuLGEuY291bnQsYSkpO2NvbnN0IHQ9YCR7dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcn16ZXJvYCxyPWAke3RoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3J9b3JkaW5hbCR7dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcn1gO2lmKHUmJihpLnB1c2gocytlKSxhLm9yZGluYWwmJjA9PT1lLmluZGV4T2YocikmJmkucHVzaChzK2UucmVwbGFjZShyLHRoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3IpKSxmJiZpLnB1c2gocyt0KSksZCl7Y29uc3Qgbj1gJHtzfSR7dGhpcy5vcHRpb25zLmNvbnRleHRTZXBhcmF0b3J9JHthLmNvbnRleHR9YDtpLnB1c2gobiksdSYmKGkucHVzaChuK2UpLGEub3JkaW5hbCYmMD09PWUuaW5kZXhPZihyKSYmaS5wdXNoKG4rZS5yZXBsYWNlKHIsdGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcikpLGYmJmkucHVzaChuK3QpKX19bGV0IGw7Zm9yKDtsPWkucG9wKCk7KXRoaXMuaXNWYWxpZExvb2t1cCh0KXx8KHI9bCx0PXRoaXMuZ2V0UmVzb3VyY2UobixlLGwsYSkpfSkpKX0pKX0pKSx7cmVzOnQsdXNlZEtleTpuLGV4YWN0VXNlZEtleTpyLHVzZWRMbmc6byx1c2VkTlM6aX19aXNWYWxpZExvb2t1cChlKXtyZXR1cm4hKHZvaWQgMD09PWV8fCF0aGlzLm9wdGlvbnMucmV0dXJuTnVsbCYmbnVsbD09PWV8fCF0aGlzLm9wdGlvbnMucmV0dXJuRW1wdHlTdHJpbmcmJlwiXCI9PT1lKX1nZXRSZXNvdXJjZShlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O3JldHVybiB0aGlzLmkxOG5Gb3JtYXQmJnRoaXMuaTE4bkZvcm1hdC5nZXRSZXNvdXJjZT90aGlzLmkxOG5Gb3JtYXQuZ2V0UmVzb3VyY2UoZSx0LG4scik6dGhpcy5yZXNvdXJjZVN0b3JlLmdldFJlc291cmNlKGUsdCxuLHIpfWdldFVzZWRQYXJhbXNEZXRhaWxzKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2NvbnN0IHQ9W1wiZGVmYXVsdFZhbHVlXCIsXCJvcmRpbmFsXCIsXCJjb250ZXh0XCIsXCJyZXBsYWNlXCIsXCJsbmdcIixcImxuZ3NcIixcImZhbGxiYWNrTG5nXCIsXCJuc1wiLFwia2V5U2VwYXJhdG9yXCIsXCJuc1NlcGFyYXRvclwiLFwicmV0dXJuT2JqZWN0c1wiLFwicmV0dXJuRGV0YWlsc1wiLFwiam9pbkFycmF5c1wiLFwicG9zdFByb2Nlc3NcIixcImludGVycG9sYXRpb25cIl0sbj1lLnJlcGxhY2UmJlwic3RyaW5nXCIhPXR5cGVvZiBlLnJlcGxhY2U7bGV0IHI9bj9lLnJlcGxhY2U6ZTtpZihuJiZ2b2lkIDAhPT1lLmNvdW50JiYoci5jb3VudD1lLmNvdW50KSx0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzJiYocj17Li4udGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcywuLi5yfSksIW4pe3I9ey4uLnJ9O2Zvcihjb25zdCBlIG9mIHQpZGVsZXRlIHJbZV19cmV0dXJuIHJ9c3RhdGljIGhhc0RlZmF1bHRWYWx1ZShlKXtjb25zdCB0PVwiZGVmYXVsdFZhbHVlXCI7Zm9yKGNvbnN0IG4gaW4gZSlpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdD09PW4uc3Vic3RyaW5nKDAsMTIpJiZ2b2lkIDAhPT1lW25dKXJldHVybiEwO3JldHVybiExfX1mdW5jdGlvbiBrKGUpe3JldHVybiBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSl9Y2xhc3MgUntjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZSx0aGlzLnN1cHBvcnRlZExuZ3M9dGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3N8fCExLHRoaXMubG9nZ2VyPXUuY3JlYXRlKFwibGFuZ3VhZ2VVdGlsc1wiKX1nZXRTY3JpcHRQYXJ0RnJvbUNvZGUoZSl7aWYoIShlPUwoZSkpfHxlLmluZGV4T2YoXCItXCIpPDApcmV0dXJuIG51bGw7Y29uc3QgdD1lLnNwbGl0KFwiLVwiKTtyZXR1cm4gMj09PXQubGVuZ3RoP251bGw6KHQucG9wKCksXCJ4XCI9PT10W3QubGVuZ3RoLTFdLnRvTG93ZXJDYXNlKCk/bnVsbDp0aGlzLmZvcm1hdExhbmd1YWdlQ29kZSh0LmpvaW4oXCItXCIpKSl9Z2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSl7aWYoIShlPUwoZSkpfHxlLmluZGV4T2YoXCItXCIpPDApcmV0dXJuIGU7Y29uc3QgdD1lLnNwbGl0KFwiLVwiKTtyZXR1cm4gdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUodFswXSl9Zm9ybWF0TGFuZ3VhZ2VDb2RlKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiZlLmluZGV4T2YoXCItXCIpPi0xKXtjb25zdCB0PVtcImhhbnNcIixcImhhbnRcIixcImxhdG5cIixcImN5cmxcIixcImNhbnNcIixcIm1vbmdcIixcImFyYWJcIl07bGV0IG49ZS5zcGxpdChcIi1cIik7cmV0dXJuIHRoaXMub3B0aW9ucy5sb3dlckNhc2VMbmc/bj1uLm1hcCgoZT0+ZS50b0xvd2VyQ2FzZSgpKSk6Mj09PW4ubGVuZ3RoPyhuWzBdPW5bMF0udG9Mb3dlckNhc2UoKSxuWzFdPW5bMV0udG9VcHBlckNhc2UoKSx0LmluZGV4T2YoblsxXS50b0xvd2VyQ2FzZSgpKT4tMSYmKG5bMV09ayhuWzFdLnRvTG93ZXJDYXNlKCkpKSk6Mz09PW4ubGVuZ3RoJiYoblswXT1uWzBdLnRvTG93ZXJDYXNlKCksMj09PW5bMV0ubGVuZ3RoJiYoblsxXT1uWzFdLnRvVXBwZXJDYXNlKCkpLFwic2duXCIhPT1uWzBdJiYyPT09blsyXS5sZW5ndGgmJihuWzJdPW5bMl0udG9VcHBlckNhc2UoKSksdC5pbmRleE9mKG5bMV0udG9Mb3dlckNhc2UoKSk+LTEmJihuWzFdPWsoblsxXS50b0xvd2VyQ2FzZSgpKSksdC5pbmRleE9mKG5bMl0udG9Mb3dlckNhc2UoKSk+LTEmJihuWzJdPWsoblsyXS50b0xvd2VyQ2FzZSgpKSkpLG4uam9pbihcIi1cIil9cmV0dXJuIHRoaXMub3B0aW9ucy5jbGVhbkNvZGV8fHRoaXMub3B0aW9ucy5sb3dlckNhc2VMbmc/ZS50b0xvd2VyQ2FzZSgpOmV9aXNTdXBwb3J0ZWRDb2RlKGUpe3JldHVybihcImxhbmd1YWdlT25seVwiPT09dGhpcy5vcHRpb25zLmxvYWR8fHRoaXMub3B0aW9ucy5ub25FeHBsaWNpdFN1cHBvcnRlZExuZ3MpJiYoZT10aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpKSwhdGhpcy5zdXBwb3J0ZWRMbmdzfHwhdGhpcy5zdXBwb3J0ZWRMbmdzLmxlbmd0aHx8dGhpcy5zdXBwb3J0ZWRMbmdzLmluZGV4T2YoZSk+LTF9Z2V0QmVzdE1hdGNoRnJvbUNvZGVzKGUpe2lmKCFlKXJldHVybiBudWxsO2xldCB0O3JldHVybiBlLmZvckVhY2goKGU9PntpZih0KXJldHVybjtjb25zdCBuPXRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGUpO3RoaXMub3B0aW9ucy5zdXBwb3J0ZWRMbmdzJiYhdGhpcy5pc1N1cHBvcnRlZENvZGUobil8fCh0PW4pfSkpLCF0JiZ0aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncyYmZS5mb3JFYWNoKChlPT57aWYodClyZXR1cm47Y29uc3Qgbj10aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpO2lmKHRoaXMuaXNTdXBwb3J0ZWRDb2RlKG4pKXJldHVybiB0PW47dD10aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncy5maW5kKChlPT5lPT09bj9lOmUuaW5kZXhPZihcIi1cIik8MCYmbi5pbmRleE9mKFwiLVwiKTwwP3ZvaWQgMDowPT09ZS5pbmRleE9mKG4pP2U6dm9pZCAwKSl9KSksdHx8KHQ9dGhpcy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZylbMF0pLHR9Z2V0RmFsbGJhY2tDb2RlcyhlLHQpe2lmKCFlKXJldHVybltdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihlPWUodCkpLFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1bZV0pLFwiW29iamVjdCBBcnJheV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkoZSkpcmV0dXJuIGU7aWYoIXQpcmV0dXJuIGUuZGVmYXVsdHx8W107bGV0IG49ZVt0XTtyZXR1cm4gbnx8KG49ZVt0aGlzLmdldFNjcmlwdFBhcnRGcm9tQ29kZSh0KV0pLG58fChuPWVbdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUodCldKSxufHwobj1lW3RoaXMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUodCldKSxufHwobj1lLmRlZmF1bHQpLG58fFtdfXRvUmVzb2x2ZUhpZXJhcmNoeShlLHQpe2NvbnN0IG49dGhpcy5nZXRGYWxsYmFja0NvZGVzKHR8fHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZ3x8W10sZSkscj1bXSxvPWU9PntlJiYodGhpcy5pc1N1cHBvcnRlZENvZGUoZSk/ci5wdXNoKGUpOnRoaXMubG9nZ2VyLndhcm4oYHJlamVjdGluZyBsYW5ndWFnZSBjb2RlIG5vdCBmb3VuZCBpbiBzdXBwb3J0ZWRMbmdzOiAke2V9YCkpfTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmKGUuaW5kZXhPZihcIi1cIik+LTF8fGUuaW5kZXhPZihcIl9cIik+LTEpPyhcImxhbmd1YWdlT25seVwiIT09dGhpcy5vcHRpb25zLmxvYWQmJm8odGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoZSkpLFwibGFuZ3VhZ2VPbmx5XCIhPT10aGlzLm9wdGlvbnMubG9hZCYmXCJjdXJyZW50T25seVwiIT09dGhpcy5vcHRpb25zLmxvYWQmJm8odGhpcy5nZXRTY3JpcHRQYXJ0RnJvbUNvZGUoZSkpLFwiY3VycmVudE9ubHlcIiE9PXRoaXMub3B0aW9ucy5sb2FkJiZvKHRoaXMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSkpKTpcInN0cmluZ1wiPT10eXBlb2YgZSYmbyh0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShlKSksbi5mb3JFYWNoKChlPT57ci5pbmRleE9mKGUpPDAmJm8odGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoZSkpfSkpLHJ9fWxldCBQPVt7bG5nczpbXCJhY2hcIixcImFrXCIsXCJhbVwiLFwiYXJuXCIsXCJiclwiLFwiZmlsXCIsXCJndW5cIixcImxuXCIsXCJtZmVcIixcIm1nXCIsXCJtaVwiLFwib2NcIixcInB0XCIsXCJwdC1CUlwiLFwidGdcIixcInRsXCIsXCJ0aVwiLFwidHJcIixcInV6XCIsXCJ3YVwiXSxucjpbMSwyXSxmYzoxfSx7bG5nczpbXCJhZlwiLFwiYW5cIixcImFzdFwiLFwiYXpcIixcImJnXCIsXCJiblwiLFwiY2FcIixcImRhXCIsXCJkZVwiLFwiZGV2XCIsXCJlbFwiLFwiZW5cIixcImVvXCIsXCJlc1wiLFwiZXRcIixcImV1XCIsXCJmaVwiLFwiZm9cIixcImZ1clwiLFwiZnlcIixcImdsXCIsXCJndVwiLFwiaGFcIixcImhpXCIsXCJodVwiLFwiaHlcIixcImlhXCIsXCJpdFwiLFwia2tcIixcImtuXCIsXCJrdVwiLFwibGJcIixcIm1haVwiLFwibWxcIixcIm1uXCIsXCJtclwiLFwibmFoXCIsXCJuYXBcIixcIm5iXCIsXCJuZVwiLFwibmxcIixcIm5uXCIsXCJub1wiLFwibnNvXCIsXCJwYVwiLFwicGFwXCIsXCJwbXNcIixcInBzXCIsXCJwdC1QVFwiLFwicm1cIixcInNjb1wiLFwic2VcIixcInNpXCIsXCJzb1wiLFwic29uXCIsXCJzcVwiLFwic3ZcIixcInN3XCIsXCJ0YVwiLFwidGVcIixcInRrXCIsXCJ1clwiLFwieW9cIl0sbnI6WzEsMl0sZmM6Mn0se2xuZ3M6W1wiYXlcIixcImJvXCIsXCJjZ2dcIixcImZhXCIsXCJodFwiLFwiaWRcIixcImphXCIsXCJqYm9cIixcImthXCIsXCJrbVwiLFwia29cIixcImt5XCIsXCJsb1wiLFwibXNcIixcInNhaFwiLFwic3VcIixcInRoXCIsXCJ0dFwiLFwidWdcIixcInZpXCIsXCJ3b1wiLFwiemhcIl0sbnI6WzFdLGZjOjN9LHtsbmdzOltcImJlXCIsXCJic1wiLFwiY25yXCIsXCJkelwiLFwiaHJcIixcInJ1XCIsXCJzclwiLFwidWtcIl0sbnI6WzEsMiw1XSxmYzo0fSx7bG5nczpbXCJhclwiXSxucjpbMCwxLDIsMywxMSwxMDBdLGZjOjV9LHtsbmdzOltcImNzXCIsXCJza1wiXSxucjpbMSwyLDVdLGZjOjZ9LHtsbmdzOltcImNzYlwiLFwicGxcIl0sbnI6WzEsMiw1XSxmYzo3fSx7bG5nczpbXCJjeVwiXSxucjpbMSwyLDMsOF0sZmM6OH0se2xuZ3M6W1wiZnJcIl0sbnI6WzEsMl0sZmM6OX0se2xuZ3M6W1wiZ2FcIl0sbnI6WzEsMiwzLDcsMTFdLGZjOjEwfSx7bG5nczpbXCJnZFwiXSxucjpbMSwyLDMsMjBdLGZjOjExfSx7bG5nczpbXCJpc1wiXSxucjpbMSwyXSxmYzoxMn0se2xuZ3M6W1wianZcIl0sbnI6WzAsMV0sZmM6MTN9LHtsbmdzOltcImt3XCJdLG5yOlsxLDIsMyw0XSxmYzoxNH0se2xuZ3M6W1wibHRcIl0sbnI6WzEsMiwxMF0sZmM6MTV9LHtsbmdzOltcImx2XCJdLG5yOlsxLDIsMF0sZmM6MTZ9LHtsbmdzOltcIm1rXCJdLG5yOlsxLDJdLGZjOjE3fSx7bG5nczpbXCJtbmtcIl0sbnI6WzAsMSwyXSxmYzoxOH0se2xuZ3M6W1wibXRcIl0sbnI6WzEsMiwxMSwyMF0sZmM6MTl9LHtsbmdzOltcIm9yXCJdLG5yOlsyLDFdLGZjOjJ9LHtsbmdzOltcInJvXCJdLG5yOlsxLDIsMjBdLGZjOjIwfSx7bG5nczpbXCJzbFwiXSxucjpbNSwxLDIsM10sZmM6MjF9LHtsbmdzOltcImhlXCIsXCJpd1wiXSxucjpbMSwyLDIwLDIxXSxmYzoyMn1dLEk9ezE6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlPjEpfSwyOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMSE9ZSl9LDM6ZnVuY3Rpb24oZSl7cmV0dXJuIDB9LDQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlJTEwPT0xJiZlJTEwMCE9MTE/MDplJTEwPj0yJiZlJTEwPD00JiYoZSUxMDA8MTB8fGUlMTAwPj0yMCk/MToyKX0sNTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDA9PWU/MDoxPT1lPzE6Mj09ZT8yOmUlMTAwPj0zJiZlJTEwMDw9MTA/MzplJTEwMD49MTE/NDo1KX0sNjpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDplPj0yJiZlPD00PzE6Mil9LDc6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6ZSUxMD49MiYmZSUxMDw9NCYmKGUlMTAwPDEwfHxlJTEwMD49MjApPzE6Mil9LDg6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOjghPWUmJjExIT1lPzI6Myl9LDk6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlPj0yKX0sMTA6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOmU8Nz8yOmU8MTE/Mzo0KX0sMTE6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lfHwxMT09ZT8wOjI9PWV8fDEyPT1lPzE6ZT4yJiZlPDIwPzI6Myl9LDEyOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMCE9MXx8ZSUxMDA9PTExKX0sMTM6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigwIT09ZSl9LDE0OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMT09ZT8wOjI9PWU/MTozPT1lPzI6Myl9LDE1OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMD09MSYmZSUxMDAhPTExPzA6ZSUxMD49MiYmKGUlMTAwPDEwfHxlJTEwMD49MjApPzE6Mil9LDE2OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMD09MSYmZSUxMDAhPTExPzA6MCE9PWU/MToyKX0sMTc6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lfHxlJTEwPT0xJiZlJTEwMCE9MTE/MDoxKX0sMTg6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigwPT1lPzA6MT09ZT8xOjIpfSwxOTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDowPT1lfHxlJTEwMD4xJiZlJTEwMDwxMT8xOmUlMTAwPjEwJiZlJTEwMDwyMD8yOjMpfSwyMDpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDowPT1lfHxlJTEwMD4wJiZlJTEwMDwyMD8xOjIpfSwyMTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGUlMTAwPT0xPzE6ZSUxMDA9PTI/MjplJTEwMD09M3x8ZSUxMDA9PTQ/MzowKX0sMjI6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOihlPDB8fGU+MTApJiZlJTEwPT0wPzI6Myl9fTtjb25zdCBBPVtcInYxXCIsXCJ2MlwiLFwidjNcIl0sVD1bXCJ2NFwiXSxIPXt6ZXJvOjAsb25lOjEsdHdvOjIsZmV3OjMsbWFueTo0LG90aGVyOjV9O2NsYXNzIEJ7Y29uc3RydWN0b3IoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3RoaXMubGFuZ3VhZ2VVdGlscz1lLHRoaXMub3B0aW9ucz10LHRoaXMubG9nZ2VyPXUuY3JlYXRlKFwicGx1cmFsUmVzb2x2ZXJcIiksdGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OJiYhVC5pbmNsdWRlcyh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04pfHxcInVuZGVmaW5lZFwiIT10eXBlb2YgSW50bCYmSW50bC5QbHVyYWxSdWxlc3x8KHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTj1cInYzXCIsdGhpcy5sb2dnZXIuZXJyb3IoXCJZb3VyIGVudmlyb25tZW50IHNlZW1zIG5vdCB0byBiZSBJbnRsIEFQSSBjb21wYXRpYmxlLCB1c2UgYW4gSW50bC5QbHVyYWxSdWxlcyBwb2x5ZmlsbC4gV2lsbCBmYWxsYmFjayB0byB0aGUgY29tcGF0aWJpbGl0eUpTT04gdjMgZm9ybWF0IGhhbmRsaW5nLlwiKSksdGhpcy5ydWxlcz1mdW5jdGlvbigpe2NvbnN0IGU9e307cmV0dXJuIFAuZm9yRWFjaCgodD0+e3QubG5ncy5mb3JFYWNoKChuPT57ZVtuXT17bnVtYmVyczp0Lm5yLHBsdXJhbHM6SVt0LmZjXX19KSl9KSksZX0oKX1hZGRSdWxlKGUsdCl7dGhpcy5ydWxlc1tlXT10fWdldFJ1bGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKHRoaXMuc2hvdWxkVXNlSW50bEFwaSgpKXRyeXtyZXR1cm4gbmV3IEludGwuUGx1cmFsUnVsZXMoTChcImRldlwiPT09ZT9cImVuXCI6ZSkse3R5cGU6dC5vcmRpbmFsP1wib3JkaW5hbFwiOlwiY2FyZGluYWxcIn0pfWNhdGNoKGUpe3JldHVybn1yZXR1cm4gdGhpcy5ydWxlc1tlXXx8dGhpcy5ydWxlc1t0aGlzLmxhbmd1YWdlVXRpbHMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSldfW5lZWRzUGx1cmFsKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtjb25zdCBuPXRoaXMuZ2V0UnVsZShlLHQpO3JldHVybiB0aGlzLnNob3VsZFVzZUludGxBcGkoKT9uJiZuLnJlc29sdmVkT3B0aW9ucygpLnBsdXJhbENhdGVnb3JpZXMubGVuZ3RoPjE6biYmbi5udW1iZXJzLmxlbmd0aD4xfWdldFBsdXJhbEZvcm1zT2ZLZXkoZSx0KXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307cmV0dXJuIHRoaXMuZ2V0U3VmZml4ZXMoZSxuKS5tYXAoKGU9PmAke3R9JHtlfWApKX1nZXRTdWZmaXhlcyhlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Y29uc3Qgbj10aGlzLmdldFJ1bGUoZSx0KTtyZXR1cm4gbj90aGlzLnNob3VsZFVzZUludGxBcGkoKT9uLnJlc29sdmVkT3B0aW9ucygpLnBsdXJhbENhdGVnb3JpZXMuc29ydCgoKGUsdCk9PkhbZV0tSFt0XSkpLm1hcCgoZT0+YCR7dGhpcy5vcHRpb25zLnByZXBlbmR9JHt0Lm9yZGluYWw/YG9yZGluYWwke3RoaXMub3B0aW9ucy5wcmVwZW5kfWA6XCJcIn0ke2V9YCkpOm4ubnVtYmVycy5tYXAoKG49PnRoaXMuZ2V0U3VmZml4KGUsbix0KSkpOltdfWdldFN1ZmZpeChlLHQpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdCByPXRoaXMuZ2V0UnVsZShlLG4pO3JldHVybiByP3RoaXMuc2hvdWxkVXNlSW50bEFwaSgpP2Ake3RoaXMub3B0aW9ucy5wcmVwZW5kfSR7bi5vcmRpbmFsP2BvcmRpbmFsJHt0aGlzLm9wdGlvbnMucHJlcGVuZH1gOlwiXCJ9JHtyLnNlbGVjdCh0KX1gOnRoaXMuZ2V0U3VmZml4UmV0cm9Db21wYXRpYmxlKHIsdCk6KHRoaXMubG9nZ2VyLndhcm4oYG5vIHBsdXJhbCBydWxlIGZvdW5kIGZvcjogJHtlfWApLFwiXCIpfWdldFN1ZmZpeFJldHJvQ29tcGF0aWJsZShlLHQpe2NvbnN0IG49ZS5ub0Ficz9lLnBsdXJhbHModCk6ZS5wbHVyYWxzKE1hdGguYWJzKHQpKTtsZXQgcj1lLm51bWJlcnNbbl07dGhpcy5vcHRpb25zLnNpbXBsaWZ5UGx1cmFsU3VmZml4JiYyPT09ZS5udW1iZXJzLmxlbmd0aCYmMT09PWUubnVtYmVyc1swXSYmKDI9PT1yP3I9XCJwbHVyYWxcIjoxPT09ciYmKHI9XCJcIikpO2NvbnN0IG89KCk9PnRoaXMub3B0aW9ucy5wcmVwZW5kJiZyLnRvU3RyaW5nKCk/dGhpcy5vcHRpb25zLnByZXBlbmQrci50b1N0cmluZygpOnIudG9TdHJpbmcoKTtyZXR1cm5cInYxXCI9PT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04/MT09PXI/XCJcIjpcIm51bWJlclwiPT10eXBlb2Ygcj9gX3BsdXJhbF8ke3IudG9TdHJpbmcoKX1gOm8oKTpcInYyXCI9PT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT058fHRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeCYmMj09PWUubnVtYmVycy5sZW5ndGgmJjE9PT1lLm51bWJlcnNbMF0/bygpOnRoaXMub3B0aW9ucy5wcmVwZW5kJiZuLnRvU3RyaW5nKCk/dGhpcy5vcHRpb25zLnByZXBlbmQrbi50b1N0cmluZygpOm4udG9TdHJpbmcoKX1zaG91bGRVc2VJbnRsQXBpKCl7cmV0dXJuIUEuaW5jbHVkZXModGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OKX19ZnVuY3Rpb24gVihlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOlwiLlwiLG89IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XSxpPWZ1bmN0aW9uKGUsdCxuKXtjb25zdCByPW0oZSxuKTtyZXR1cm4gdm9pZCAwIT09cj9yOm0odCxuKX0oZSx0LG4pO3JldHVybiFpJiZvJiZcInN0cmluZ1wiPT10eXBlb2YgbiYmKGk9TyhlLG4sciksdm9pZCAwPT09aSYmKGk9Tyh0LG4scikpKSxpfWNsYXNzIER7Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307dGhpcy5sb2dnZXI9dS5jcmVhdGUoXCJpbnRlcnBvbGF0b3JcIiksdGhpcy5vcHRpb25zPWUsdGhpcy5mb3JtYXQ9ZS5pbnRlcnBvbGF0aW9uJiZlLmludGVycG9sYXRpb24uZm9ybWF0fHwoZT0+ZSksdGhpcy5pbml0KGUpfWluaXQoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307ZS5pbnRlcnBvbGF0aW9ufHwoZS5pbnRlcnBvbGF0aW9uPXtlc2NhcGVWYWx1ZTohMH0pO2NvbnN0IHQ9ZS5pbnRlcnBvbGF0aW9uO3RoaXMuZXNjYXBlPXZvaWQgMCE9PXQuZXNjYXBlP3QuZXNjYXBlOmIsdGhpcy5lc2NhcGVWYWx1ZT12b2lkIDA9PT10LmVzY2FwZVZhbHVlfHx0LmVzY2FwZVZhbHVlLHRoaXMudXNlUmF3VmFsdWVUb0VzY2FwZT12b2lkIDAhPT10LnVzZVJhd1ZhbHVlVG9Fc2NhcGUmJnQudXNlUmF3VmFsdWVUb0VzY2FwZSx0aGlzLnByZWZpeD10LnByZWZpeD95KHQucHJlZml4KTp0LnByZWZpeEVzY2FwZWR8fFwie3tcIix0aGlzLnN1ZmZpeD10LnN1ZmZpeD95KHQuc3VmZml4KTp0LnN1ZmZpeEVzY2FwZWR8fFwifX1cIix0aGlzLmZvcm1hdFNlcGFyYXRvcj10LmZvcm1hdFNlcGFyYXRvcj90LmZvcm1hdFNlcGFyYXRvcjp0LmZvcm1hdFNlcGFyYXRvcnx8XCIsXCIsdGhpcy51bmVzY2FwZVByZWZpeD10LnVuZXNjYXBlU3VmZml4P1wiXCI6dC51bmVzY2FwZVByZWZpeHx8XCItXCIsdGhpcy51bmVzY2FwZVN1ZmZpeD10aGlzLnVuZXNjYXBlUHJlZml4P1wiXCI6dC51bmVzY2FwZVN1ZmZpeHx8XCJcIix0aGlzLm5lc3RpbmdQcmVmaXg9dC5uZXN0aW5nUHJlZml4P3kodC5uZXN0aW5nUHJlZml4KTp0Lm5lc3RpbmdQcmVmaXhFc2NhcGVkfHx5KFwiJHQoXCIpLHRoaXMubmVzdGluZ1N1ZmZpeD10Lm5lc3RpbmdTdWZmaXg/eSh0Lm5lc3RpbmdTdWZmaXgpOnQubmVzdGluZ1N1ZmZpeEVzY2FwZWR8fHkoXCIpXCIpLHRoaXMubmVzdGluZ09wdGlvbnNTZXBhcmF0b3I9dC5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcj90Lm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yOnQubmVzdGluZ09wdGlvbnNTZXBhcmF0b3J8fFwiLFwiLHRoaXMubWF4UmVwbGFjZXM9dC5tYXhSZXBsYWNlcz90Lm1heFJlcGxhY2VzOjFlMyx0aGlzLmFsd2F5c0Zvcm1hdD12b2lkIDAhPT10LmFsd2F5c0Zvcm1hdCYmdC5hbHdheXNGb3JtYXQsdGhpcy5yZXNldFJlZ0V4cCgpfXJlc2V0KCl7dGhpcy5vcHRpb25zJiZ0aGlzLmluaXQodGhpcy5vcHRpb25zKX1yZXNldFJlZ0V4cCgpe2NvbnN0IGU9KGUsdCk9PmUmJmUuc291cmNlPT09dD8oZS5sYXN0SW5kZXg9MCxlKTpuZXcgUmVnRXhwKHQsXCJnXCIpO3RoaXMucmVnZXhwPWUodGhpcy5yZWdleHAsYCR7dGhpcy5wcmVmaXh9KC4rPykke3RoaXMuc3VmZml4fWApLHRoaXMucmVnZXhwVW5lc2NhcGU9ZSh0aGlzLnJlZ2V4cFVuZXNjYXBlLGAke3RoaXMucHJlZml4fSR7dGhpcy51bmVzY2FwZVByZWZpeH0oLis/KSR7dGhpcy51bmVzY2FwZVN1ZmZpeH0ke3RoaXMuc3VmZml4fWApLHRoaXMubmVzdGluZ1JlZ2V4cD1lKHRoaXMubmVzdGluZ1JlZ2V4cCxgJHt0aGlzLm5lc3RpbmdQcmVmaXh9KC4rPykke3RoaXMubmVzdGluZ1N1ZmZpeH1gKX1pbnRlcnBvbGF0ZShlLHQsbixyKXtsZXQgbyxpLGE7Y29uc3QgbD10aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uJiZ0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzfHx7fTtmdW5jdGlvbiBzKGUpe3JldHVybiBlLnJlcGxhY2UoL1xcJC9nLFwiJCQkJFwiKX1jb25zdCBjPWU9PntpZihlLmluZGV4T2YodGhpcy5mb3JtYXRTZXBhcmF0b3IpPDApe2NvbnN0IG89Vih0LGwsZSx0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yLHRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlKTtyZXR1cm4gdGhpcy5hbHdheXNGb3JtYXQ/dGhpcy5mb3JtYXQobyx2b2lkIDAsbix7Li4uciwuLi50LGludGVycG9sYXRpb25rZXk6ZX0pOm99Y29uc3Qgbz1lLnNwbGl0KHRoaXMuZm9ybWF0U2VwYXJhdG9yKSxpPW8uc2hpZnQoKS50cmltKCksYT1vLmpvaW4odGhpcy5mb3JtYXRTZXBhcmF0b3IpLnRyaW0oKTtyZXR1cm4gdGhpcy5mb3JtYXQoVih0LGwsaSx0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yLHRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlKSxhLG4sey4uLnIsLi4udCxpbnRlcnBvbGF0aW9ua2V5Oml9KX07dGhpcy5yZXNldFJlZ0V4cCgpO2NvbnN0IHU9ciYmci5taXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXJ8fHRoaXMub3B0aW9ucy5taXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXIsZj1yJiZyLmludGVycG9sYXRpb24mJnZvaWQgMCE9PXIuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM/ci5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlczp0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM7cmV0dXJuW3tyZWdleDp0aGlzLnJlZ2V4cFVuZXNjYXBlLHNhZmVWYWx1ZTplPT5zKGUpfSx7cmVnZXg6dGhpcy5yZWdleHAsc2FmZVZhbHVlOmU9PnRoaXMuZXNjYXBlVmFsdWU/cyh0aGlzLmVzY2FwZShlKSk6cyhlKX1dLmZvckVhY2goKHQ9Pntmb3IoYT0wO289dC5yZWdleC5leGVjKGUpOyl7Y29uc3Qgbj1vWzFdLnRyaW0oKTtpZihpPWMobiksdm9pZCAwPT09aSlpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB1KXtjb25zdCB0PXUoZSxvLHIpO2k9XCJzdHJpbmdcIj09dHlwZW9mIHQ/dDpcIlwifWVsc2UgaWYociYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikpaT1cIlwiO2Vsc2V7aWYoZil7aT1vWzBdO2NvbnRpbnVlfXRoaXMubG9nZ2VyLndhcm4oYG1pc3NlZCB0byBwYXNzIGluIHZhcmlhYmxlICR7bn0gZm9yIGludGVycG9sYXRpbmcgJHtlfWApLGk9XCJcIn1lbHNlXCJzdHJpbmdcIj09dHlwZW9mIGl8fHRoaXMudXNlUmF3VmFsdWVUb0VzY2FwZXx8KGk9cChpKSk7Y29uc3QgbD10LnNhZmVWYWx1ZShpKTtpZihlPWUucmVwbGFjZShvWzBdLGwpLGY/KHQucmVnZXgubGFzdEluZGV4Kz1pLmxlbmd0aCx0LnJlZ2V4Lmxhc3RJbmRleC09b1swXS5sZW5ndGgpOnQucmVnZXgubGFzdEluZGV4PTAsYSsrLGE+PXRoaXMubWF4UmVwbGFjZXMpYnJlYWt9fSkpLGV9bmVzdChlLHQpe2xldCBuLHIsbyxpPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtmdW5jdGlvbiBhKGUsdCl7Y29uc3Qgbj10aGlzLm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yO2lmKGUuaW5kZXhPZihuKTwwKXJldHVybiBlO2NvbnN0IHI9ZS5zcGxpdChuZXcgUmVnRXhwKGAke259WyBdKntgKSk7bGV0IGk9YHske3JbMV19YDtlPXJbMF0saT10aGlzLmludGVycG9sYXRlKGksbyk7Y29uc3QgYT1pLm1hdGNoKC8nL2cpLGw9aS5tYXRjaCgvXCIvZyk7KGEmJmEubGVuZ3RoJTI9PTAmJiFsfHxsLmxlbmd0aCUyIT0wKSYmKGk9aS5yZXBsYWNlKC8nL2csJ1wiJykpO3RyeXtvPUpTT04ucGFyc2UoaSksdCYmKG89ey4uLnQsLi4ub30pfWNhdGNoKHQpe3JldHVybiB0aGlzLmxvZ2dlci53YXJuKGBmYWlsZWQgcGFyc2luZyBvcHRpb25zIHN0cmluZyBpbiBuZXN0aW5nIGZvciBrZXkgJHtlfWAsdCksYCR7ZX0ke259JHtpfWB9cmV0dXJuIGRlbGV0ZSBvLmRlZmF1bHRWYWx1ZSxlfWZvcig7bj10aGlzLm5lc3RpbmdSZWdleHAuZXhlYyhlKTspe2xldCBsPVtdO289ey4uLml9LG89by5yZXBsYWNlJiZcInN0cmluZ1wiIT10eXBlb2Ygby5yZXBsYWNlP28ucmVwbGFjZTpvLG8uYXBwbHlQb3N0UHJvY2Vzc29yPSExLGRlbGV0ZSBvLmRlZmF1bHRWYWx1ZTtsZXQgcz0hMTtpZigtMSE9PW5bMF0uaW5kZXhPZih0aGlzLmZvcm1hdFNlcGFyYXRvcikmJiEvey4qfS8udGVzdChuWzFdKSl7Y29uc3QgZT1uWzFdLnNwbGl0KHRoaXMuZm9ybWF0U2VwYXJhdG9yKS5tYXAoKGU9PmUudHJpbSgpKSk7blsxXT1lLnNoaWZ0KCksbD1lLHM9ITB9aWYocj10KGEuY2FsbCh0aGlzLG5bMV0udHJpbSgpLG8pLG8pLHImJm5bMF09PT1lJiZcInN0cmluZ1wiIT10eXBlb2YgcilyZXR1cm4gcjtcInN0cmluZ1wiIT10eXBlb2YgciYmKHI9cChyKSkscnx8KHRoaXMubG9nZ2VyLndhcm4oYG1pc3NlZCB0byByZXNvbHZlICR7blsxXX0gZm9yIG5lc3RpbmcgJHtlfWApLHI9XCJcIikscyYmKHI9bC5yZWR1Y2UoKChlLHQpPT50aGlzLmZvcm1hdChlLHQsaS5sbmcsey4uLmksaW50ZXJwb2xhdGlvbmtleTpuWzFdLnRyaW0oKX0pKSxyLnRyaW0oKSkpLGU9ZS5yZXBsYWNlKG5bMF0sciksdGhpcy5yZWdleHAubGFzdEluZGV4PTB9cmV0dXJuIGV9fWZ1bmN0aW9uIFooZSl7Y29uc3QgdD17fTtyZXR1cm4gZnVuY3Rpb24obixyLG8pe2NvbnN0IGk9citKU09OLnN0cmluZ2lmeShvKTtsZXQgYT10W2ldO3JldHVybiBhfHwoYT1lKEwociksbyksdFtpXT1hKSxhKG4pfX1jbGFzcyAke2NvbnN0cnVjdG9yKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3RoaXMubG9nZ2VyPXUuY3JlYXRlKFwiZm9ybWF0dGVyXCIpLHRoaXMub3B0aW9ucz1lLHRoaXMuZm9ybWF0cz17bnVtYmVyOlooKChlLHQpPT57Y29uc3Qgbj1uZXcgSW50bC5OdW1iZXJGb3JtYXQoZSx7Li4udH0pO3JldHVybiBlPT5uLmZvcm1hdChlKX0pKSxjdXJyZW5jeTpaKCgoZSx0KT0+e2NvbnN0IG49bmV3IEludGwuTnVtYmVyRm9ybWF0KGUsey4uLnQsc3R5bGU6XCJjdXJyZW5jeVwifSk7cmV0dXJuIGU9Pm4uZm9ybWF0KGUpfSkpLGRhdGV0aW1lOlooKChlLHQpPT57Y29uc3Qgbj1uZXcgSW50bC5EYXRlVGltZUZvcm1hdChlLHsuLi50fSk7cmV0dXJuIGU9Pm4uZm9ybWF0KGUpfSkpLHJlbGF0aXZldGltZTpaKCgoZSx0KT0+e2NvbnN0IG49bmV3IEludGwuUmVsYXRpdmVUaW1lRm9ybWF0KGUsey4uLnR9KTtyZXR1cm4gZT0+bi5mb3JtYXQoZSx0LnJhbmdlfHxcImRheVwiKX0pKSxsaXN0OlooKChlLHQpPT57Y29uc3Qgbj1uZXcgSW50bC5MaXN0Rm9ybWF0KGUsey4uLnR9KTtyZXR1cm4gZT0+bi5mb3JtYXQoZSl9KSl9LHRoaXMuaW5pdChlKX1pbml0KGUpe2NvbnN0IHQ9KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7aW50ZXJwb2xhdGlvbjp7fX0pLmludGVycG9sYXRpb247dGhpcy5mb3JtYXRTZXBhcmF0b3I9dC5mb3JtYXRTZXBhcmF0b3I/dC5mb3JtYXRTZXBhcmF0b3I6dC5mb3JtYXRTZXBhcmF0b3J8fFwiLFwifWFkZChlLHQpe3RoaXMuZm9ybWF0c1tlLnRvTG93ZXJDYXNlKCkudHJpbSgpXT10fWFkZENhY2hlZChlLHQpe3RoaXMuZm9ybWF0c1tlLnRvTG93ZXJDYXNlKCkudHJpbSgpXT1aKHQpfWZvcm1hdChlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O3JldHVybiB0LnNwbGl0KHRoaXMuZm9ybWF0U2VwYXJhdG9yKS5yZWR1Y2UoKChlLHQpPT57Y29uc3R7Zm9ybWF0TmFtZTpvLGZvcm1hdE9wdGlvbnM6aX09ZnVuY3Rpb24oZSl7bGV0IHQ9ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtjb25zdCBuPXt9O2lmKGUuaW5kZXhPZihcIihcIik+LTEpe2NvbnN0IHI9ZS5zcGxpdChcIihcIik7dD1yWzBdLnRvTG93ZXJDYXNlKCkudHJpbSgpO2NvbnN0IG89clsxXS5zdWJzdHJpbmcoMCxyWzFdLmxlbmd0aC0xKTtcImN1cnJlbmN5XCI9PT10JiZvLmluZGV4T2YoXCI6XCIpPDA/bi5jdXJyZW5jeXx8KG4uY3VycmVuY3k9by50cmltKCkpOlwicmVsYXRpdmV0aW1lXCI9PT10JiZvLmluZGV4T2YoXCI6XCIpPDA/bi5yYW5nZXx8KG4ucmFuZ2U9by50cmltKCkpOm8uc3BsaXQoXCI7XCIpLmZvckVhY2goKGU9PntpZighZSlyZXR1cm47Y29uc3RbdCwuLi5yXT1lLnNwbGl0KFwiOlwiKSxvPXIuam9pbihcIjpcIikudHJpbSgpLnJlcGxhY2UoL14nK3wnKyQvZyxcIlwiKTtuW3QudHJpbSgpXXx8KG5bdC50cmltKCldPW8pLFwiZmFsc2VcIj09PW8mJihuW3QudHJpbSgpXT0hMSksXCJ0cnVlXCI9PT1vJiYoblt0LnRyaW0oKV09ITApLGlzTmFOKG8pfHwoblt0LnRyaW0oKV09cGFyc2VJbnQobywxMCkpfSkpfXJldHVybntmb3JtYXROYW1lOnQsZm9ybWF0T3B0aW9uczpufX0odCk7aWYodGhpcy5mb3JtYXRzW29dKXtsZXQgdD1lO3RyeXtjb25zdCBhPXImJnIuZm9ybWF0UGFyYW1zJiZyLmZvcm1hdFBhcmFtc1tyLmludGVycG9sYXRpb25rZXldfHx7fSxsPWEubG9jYWxlfHxhLmxuZ3x8ci5sb2NhbGV8fHIubG5nfHxuO3Q9dGhpcy5mb3JtYXRzW29dKGUsbCx7Li4uaSwuLi5yLC4uLmF9KX1jYXRjaChlKXt0aGlzLmxvZ2dlci53YXJuKGUpfXJldHVybiB0fXJldHVybiB0aGlzLmxvZ2dlci53YXJuKGB0aGVyZSB3YXMgbm8gZm9ybWF0IGZ1bmN0aW9uIGZvciAke299YCksZX0pLGUpfX1jbGFzcyBOIGV4dGVuZHMgZntjb25zdHJ1Y3RvcihlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O3N1cGVyKCksdGhpcy5iYWNrZW5kPWUsdGhpcy5zdG9yZT10LHRoaXMuc2VydmljZXM9bix0aGlzLmxhbmd1YWdlVXRpbHM9bi5sYW5ndWFnZVV0aWxzLHRoaXMub3B0aW9ucz1yLHRoaXMubG9nZ2VyPXUuY3JlYXRlKFwiYmFja2VuZENvbm5lY3RvclwiKSx0aGlzLndhaXRpbmdSZWFkcz1bXSx0aGlzLm1heFBhcmFsbGVsUmVhZHM9ci5tYXhQYXJhbGxlbFJlYWRzfHwxMCx0aGlzLnJlYWRpbmdDYWxscz0wLHRoaXMubWF4UmV0cmllcz1yLm1heFJldHJpZXM+PTA/ci5tYXhSZXRyaWVzOjUsdGhpcy5yZXRyeVRpbWVvdXQ9ci5yZXRyeVRpbWVvdXQ+PTE/ci5yZXRyeVRpbWVvdXQ6MzUwLHRoaXMuc3RhdGU9e30sdGhpcy5xdWV1ZT1bXSx0aGlzLmJhY2tlbmQmJnRoaXMuYmFja2VuZC5pbml0JiZ0aGlzLmJhY2tlbmQuaW5pdChuLHIuYmFja2VuZCxyKX1xdWV1ZUxvYWQoZSx0LG4scil7Y29uc3Qgbz17fSxpPXt9LGE9e30sbD17fTtyZXR1cm4gZS5mb3JFYWNoKChlPT57bGV0IHI9ITA7dC5mb3JFYWNoKCh0PT57Y29uc3QgYT1gJHtlfXwke3R9YDshbi5yZWxvYWQmJnRoaXMuc3RvcmUuaGFzUmVzb3VyY2VCdW5kbGUoZSx0KT90aGlzLnN0YXRlW2FdPTI6dGhpcy5zdGF0ZVthXTwwfHwoMT09PXRoaXMuc3RhdGVbYV0/dm9pZCAwPT09aVthXSYmKGlbYV09ITApOih0aGlzLnN0YXRlW2FdPTEscj0hMSx2b2lkIDA9PT1pW2FdJiYoaVthXT0hMCksdm9pZCAwPT09b1thXSYmKG9bYV09ITApLHZvaWQgMD09PWxbdF0mJihsW3RdPSEwKSkpfSkpLHJ8fChhW2VdPSEwKX0pKSwoT2JqZWN0LmtleXMobykubGVuZ3RofHxPYmplY3Qua2V5cyhpKS5sZW5ndGgpJiZ0aGlzLnF1ZXVlLnB1c2goe3BlbmRpbmc6aSxwZW5kaW5nQ291bnQ6T2JqZWN0LmtleXMoaSkubGVuZ3RoLGxvYWRlZDp7fSxlcnJvcnM6W10sY2FsbGJhY2s6cn0pLHt0b0xvYWQ6T2JqZWN0LmtleXMobykscGVuZGluZzpPYmplY3Qua2V5cyhpKSx0b0xvYWRMYW5ndWFnZXM6T2JqZWN0LmtleXMoYSksdG9Mb2FkTmFtZXNwYWNlczpPYmplY3Qua2V5cyhsKX19bG9hZGVkKGUsdCxuKXtjb25zdCByPWUuc3BsaXQoXCJ8XCIpLG89clswXSxpPXJbMV07dCYmdGhpcy5lbWl0KFwiZmFpbGVkTG9hZGluZ1wiLG8saSx0KSxuJiZ0aGlzLnN0b3JlLmFkZFJlc291cmNlQnVuZGxlKG8saSxuKSx0aGlzLnN0YXRlW2VdPXQ/LTE6Mjtjb25zdCBhPXt9O3RoaXMucXVldWUuZm9yRWFjaCgobj0+eyFmdW5jdGlvbihlLHQsbixyKXtjb25zdHtvYmo6byxrOml9PWcoZSx0LE9iamVjdCk7b1tpXT1vW2ldfHxbXSxyJiYob1tpXT1vW2ldLmNvbmNhdChuKSkscnx8b1tpXS5wdXNoKG4pfShuLmxvYWRlZCxbb10saSksZnVuY3Rpb24oZSx0KXt2b2lkIDAhPT1lLnBlbmRpbmdbdF0mJihkZWxldGUgZS5wZW5kaW5nW3RdLGUucGVuZGluZ0NvdW50LS0pfShuLGUpLHQmJm4uZXJyb3JzLnB1c2godCksMCE9PW4ucGVuZGluZ0NvdW50fHxuLmRvbmV8fChPYmplY3Qua2V5cyhuLmxvYWRlZCkuZm9yRWFjaCgoZT0+e2FbZV18fChhW2VdPXt9KTtjb25zdCB0PW4ubG9hZGVkW2VdO3QubGVuZ3RoJiZ0LmZvckVhY2goKHQ9Pnt2b2lkIDA9PT1hW2VdW3RdJiYoYVtlXVt0XT0hMCl9KSl9KSksbi5kb25lPSEwLG4uZXJyb3JzLmxlbmd0aD9uLmNhbGxiYWNrKG4uZXJyb3JzKTpuLmNhbGxiYWNrKCkpfSkpLHRoaXMuZW1pdChcImxvYWRlZFwiLGEpLHRoaXMucXVldWU9dGhpcy5xdWV1ZS5maWx0ZXIoKGU9PiFlLmRvbmUpKX1yZWFkKGUsdCxuKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MCxvPWFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdP2FyZ3VtZW50c1s0XTp0aGlzLnJldHJ5VGltZW91dCxpPWFyZ3VtZW50cy5sZW5ndGg+NT9hcmd1bWVudHNbNV06dm9pZCAwO2lmKCFlLmxlbmd0aClyZXR1cm4gaShudWxsLHt9KTtpZih0aGlzLnJlYWRpbmdDYWxscz49dGhpcy5tYXhQYXJhbGxlbFJlYWRzKXJldHVybiB2b2lkIHRoaXMud2FpdGluZ1JlYWRzLnB1c2goe2xuZzplLG5zOnQsZmNOYW1lOm4sdHJpZWQ6cix3YWl0Om8sY2FsbGJhY2s6aX0pO3RoaXMucmVhZGluZ0NhbGxzKys7Y29uc3QgYT0oYSxsKT0+e2lmKHRoaXMucmVhZGluZ0NhbGxzLS0sdGhpcy53YWl0aW5nUmVhZHMubGVuZ3RoPjApe2NvbnN0IGU9dGhpcy53YWl0aW5nUmVhZHMuc2hpZnQoKTt0aGlzLnJlYWQoZS5sbmcsZS5ucyxlLmZjTmFtZSxlLnRyaWVkLGUud2FpdCxlLmNhbGxiYWNrKX1hJiZsJiZyPHRoaXMubWF4UmV0cmllcz9zZXRUaW1lb3V0KCgoKT0+e3RoaXMucmVhZC5jYWxsKHRoaXMsZSx0LG4scisxLDIqbyxpKX0pLG8pOmkoYSxsKX0sbD10aGlzLmJhY2tlbmRbbl0uYmluZCh0aGlzLmJhY2tlbmQpO2lmKDIhPT1sLmxlbmd0aClyZXR1cm4gbChlLHQsYSk7dHJ5e2NvbnN0IG49bChlLHQpO24mJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4udGhlbj9uLnRoZW4oKGU9PmEobnVsbCxlKSkpLmNhdGNoKGEpOmEobnVsbCxuKX1jYXRjaChlKXthKGUpfX1wcmVwYXJlTG9hZGluZyhlLHQpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fSxyPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO2lmKCF0aGlzLmJhY2tlbmQpcmV0dXJuIHRoaXMubG9nZ2VyLndhcm4oXCJObyBiYWNrZW5kIHdhcyBhZGRlZCB2aWEgaTE4bmV4dC51c2UuIFdpbGwgbm90IGxvYWQgcmVzb3VyY2VzLlwiKSxyJiZyKCk7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPXRoaXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkoZSkpLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1bdF0pO2NvbnN0IG89dGhpcy5xdWV1ZUxvYWQoZSx0LG4scik7aWYoIW8udG9Mb2FkLmxlbmd0aClyZXR1cm4gby5wZW5kaW5nLmxlbmd0aHx8cigpLG51bGw7by50b0xvYWQuZm9yRWFjaCgoZT0+e3RoaXMubG9hZE9uZShlKX0pKX1sb2FkKGUsdCxuKXt0aGlzLnByZXBhcmVMb2FkaW5nKGUsdCx7fSxuKX1yZWxvYWQoZSx0LG4pe3RoaXMucHJlcGFyZUxvYWRpbmcoZSx0LHtyZWxvYWQ6ITB9LG4pfWxvYWRPbmUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOlwiXCI7Y29uc3Qgbj1lLnNwbGl0KFwifFwiKSxyPW5bMF0sbz1uWzFdO3RoaXMucmVhZChyLG8sXCJyZWFkXCIsdm9pZCAwLHZvaWQgMCwoKG4saSk9PntuJiZ0aGlzLmxvZ2dlci53YXJuKGAke3R9bG9hZGluZyBuYW1lc3BhY2UgJHtvfSBmb3IgbGFuZ3VhZ2UgJHtyfSBmYWlsZWRgLG4pLCFuJiZpJiZ0aGlzLmxvZ2dlci5sb2coYCR7dH1sb2FkZWQgbmFtZXNwYWNlICR7b30gZm9yIGxhbmd1YWdlICR7cn1gLGkpLHRoaXMubG9hZGVkKGUsbixpKX0pKX1zYXZlTWlzc2luZyhlLHQsbixyLG8pe2xldCBpPWFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdP2FyZ3VtZW50c1s1XTp7fSxhPWFyZ3VtZW50cy5sZW5ndGg+NiYmdm9pZCAwIT09YXJndW1lbnRzWzZdP2FyZ3VtZW50c1s2XTooKT0+e307aWYodGhpcy5zZXJ2aWNlcy51dGlscyYmdGhpcy5zZXJ2aWNlcy51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UmJiF0aGlzLnNlcnZpY2VzLnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSh0KSl0aGlzLmxvZ2dlci53YXJuKGBkaWQgbm90IHNhdmUga2V5IFwiJHtufVwiIGFzIHRoZSBuYW1lc3BhY2UgXCIke3R9XCIgd2FzIG5vdCB5ZXQgbG9hZGVkYCxcIlRoaXMgbWVhbnMgc29tZXRoaW5nIElTIFdST05HIGluIHlvdXIgc2V0dXAuIFlvdSBhY2Nlc3MgdGhlIHQgZnVuY3Rpb24gYmVmb3JlIGkxOG5leHQuaW5pdCAvIGkxOG5leHQubG9hZE5hbWVzcGFjZSAvIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2Ugd2FzIGRvbmUuIFdhaXQgZm9yIHRoZSBjYWxsYmFjayBvciBQcm9taXNlIHRvIHJlc29sdmUgYmVmb3JlIGFjY2Vzc2luZyBpdCEhIVwiKTtlbHNlIGlmKG51bGwhPW4mJlwiXCIhPT1uKXtpZih0aGlzLmJhY2tlbmQmJnRoaXMuYmFja2VuZC5jcmVhdGUpe2NvbnN0IGw9ey4uLmksaXNVcGRhdGU6b30scz10aGlzLmJhY2tlbmQuY3JlYXRlLmJpbmQodGhpcy5iYWNrZW5kKTtpZihzLmxlbmd0aDw2KXRyeXtsZXQgbztvPTU9PT1zLmxlbmd0aD9zKGUsdCxuLHIsbCk6cyhlLHQsbixyKSxvJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBvLnRoZW4/by50aGVuKChlPT5hKG51bGwsZSkpKS5jYXRjaChhKTphKG51bGwsbyl9Y2F0Y2goZSl7YShlKX1lbHNlIHMoZSx0LG4scixhLGwpfWUmJmVbMF0mJnRoaXMuc3RvcmUuYWRkUmVzb3VyY2UoZVswXSx0LG4scil9fX1mdW5jdGlvbiBGKCl7cmV0dXJue2RlYnVnOiExLGluaXRJbW1lZGlhdGU6ITAsbnM6W1widHJhbnNsYXRpb25cIl0sZGVmYXVsdE5TOltcInRyYW5zbGF0aW9uXCJdLGZhbGxiYWNrTG5nOltcImRldlwiXSxmYWxsYmFja05TOiExLHN1cHBvcnRlZExuZ3M6ITEsbm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzOiExLGxvYWQ6XCJhbGxcIixwcmVsb2FkOiExLHNpbXBsaWZ5UGx1cmFsU3VmZml4OiEwLGtleVNlcGFyYXRvcjpcIi5cIixuc1NlcGFyYXRvcjpcIjpcIixwbHVyYWxTZXBhcmF0b3I6XCJfXCIsY29udGV4dFNlcGFyYXRvcjpcIl9cIixwYXJ0aWFsQnVuZGxlZExhbmd1YWdlczohMSxzYXZlTWlzc2luZzohMSx1cGRhdGVNaXNzaW5nOiExLHNhdmVNaXNzaW5nVG86XCJmYWxsYmFja1wiLHNhdmVNaXNzaW5nUGx1cmFsczohMCxtaXNzaW5nS2V5SGFuZGxlcjohMSxtaXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXI6ITEscG9zdFByb2Nlc3M6ITEscG9zdFByb2Nlc3NQYXNzUmVzb2x2ZWQ6ITEscmV0dXJuTnVsbDohMSxyZXR1cm5FbXB0eVN0cmluZzohMCxyZXR1cm5PYmplY3RzOiExLGpvaW5BcnJheXM6ITEscmV0dXJuZWRPYmplY3RIYW5kbGVyOiExLHBhcnNlTWlzc2luZ0tleUhhbmRsZXI6ITEsYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5OiExLGFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlOiExLG92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyOmZ1bmN0aW9uKGUpe2xldCB0PXt9O2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlWzFdJiYodD1lWzFdKSxcInN0cmluZ1wiPT10eXBlb2YgZVsxXSYmKHQuZGVmYXVsdFZhbHVlPWVbMV0pLFwic3RyaW5nXCI9PXR5cGVvZiBlWzJdJiYodC50RGVzY3JpcHRpb249ZVsyXSksXCJvYmplY3RcIj09dHlwZW9mIGVbMl18fFwib2JqZWN0XCI9PXR5cGVvZiBlWzNdKXtjb25zdCBuPWVbM118fGVbMl07T2JqZWN0LmtleXMobikuZm9yRWFjaCgoZT0+e3RbZV09bltlXX0pKX1yZXR1cm4gdH0saW50ZXJwb2xhdGlvbjp7ZXNjYXBlVmFsdWU6ITAsZm9ybWF0OmU9PmUscHJlZml4Olwie3tcIixzdWZmaXg6XCJ9fVwiLGZvcm1hdFNlcGFyYXRvcjpcIixcIix1bmVzY2FwZVByZWZpeDpcIi1cIixuZXN0aW5nUHJlZml4OlwiJHQoXCIsbmVzdGluZ1N1ZmZpeDpcIilcIixuZXN0aW5nT3B0aW9uc1NlcGFyYXRvcjpcIixcIixtYXhSZXBsYWNlczoxZTMsc2tpcE9uVmFyaWFibGVzOiEwfX19ZnVuY3Rpb24gVShlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZS5ucyYmKGUubnM9W2UubnNdKSxcInN0cmluZ1wiPT10eXBlb2YgZS5mYWxsYmFja0xuZyYmKGUuZmFsbGJhY2tMbmc9W2UuZmFsbGJhY2tMbmddKSxcInN0cmluZ1wiPT10eXBlb2YgZS5mYWxsYmFja05TJiYoZS5mYWxsYmFja05TPVtlLmZhbGxiYWNrTlNdKSxlLnN1cHBvcnRlZExuZ3MmJmUuc3VwcG9ydGVkTG5ncy5pbmRleE9mKFwiY2ltb2RlXCIpPDAmJihlLnN1cHBvcnRlZExuZ3M9ZS5zdXBwb3J0ZWRMbmdzLmNvbmNhdChbXCJjaW1vZGVcIl0pKSxlfWZ1bmN0aW9uIFcoKXt9Y2xhc3MgeiBleHRlbmRzIGZ7Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDt2YXIgbjtpZihzdXBlcigpLHRoaXMub3B0aW9ucz1VKGUpLHRoaXMuc2VydmljZXM9e30sdGhpcy5sb2dnZXI9dSx0aGlzLm1vZHVsZXM9e2V4dGVybmFsOltdfSxuPXRoaXMsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pKS5mb3JFYWNoKChlPT57XCJmdW5jdGlvblwiPT10eXBlb2YgbltlXSYmKG5bZV09bltlXS5iaW5kKG4pKX0pKSx0JiYhdGhpcy5pc0luaXRpYWxpemVkJiYhZS5pc0Nsb25lKXtpZighdGhpcy5vcHRpb25zLmluaXRJbW1lZGlhdGUpcmV0dXJuIHRoaXMuaW5pdChlLHQpLHRoaXM7c2V0VGltZW91dCgoKCk9Pnt0aGlzLmluaXQoZSx0KX0pLDApfX1pbml0KCl7dmFyIGU9dGhpcztsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sbj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYobj10LHQ9e30pLCF0LmRlZmF1bHROUyYmITEhPT10LmRlZmF1bHROUyYmdC5ucyYmKFwic3RyaW5nXCI9PXR5cGVvZiB0Lm5zP3QuZGVmYXVsdE5TPXQubnM6dC5ucy5pbmRleE9mKFwidHJhbnNsYXRpb25cIik8MCYmKHQuZGVmYXVsdE5TPXQubnNbMF0pKTtjb25zdCByPUYoKTtmdW5jdGlvbiBvKGUpe3JldHVybiBlP1wiZnVuY3Rpb25cIj09dHlwZW9mIGU/bmV3IGU6ZTpudWxsfWlmKHRoaXMub3B0aW9ucz17Li4uciwuLi50aGlzLm9wdGlvbnMsLi4uVSh0KX0sXCJ2MVwiIT09dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkmJih0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbj17Li4uci5pbnRlcnBvbGF0aW9uLC4uLnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9ufSksdm9pZCAwIT09dC5rZXlTZXBhcmF0b3ImJih0aGlzLm9wdGlvbnMudXNlckRlZmluZWRLZXlTZXBhcmF0b3I9dC5rZXlTZXBhcmF0b3IpLHZvaWQgMCE9PXQubnNTZXBhcmF0b3ImJih0aGlzLm9wdGlvbnMudXNlckRlZmluZWROc1NlcGFyYXRvcj10Lm5zU2VwYXJhdG9yKSwhdGhpcy5vcHRpb25zLmlzQ2xvbmUpe2xldCB0O3RoaXMubW9kdWxlcy5sb2dnZXI/dS5pbml0KG8odGhpcy5tb2R1bGVzLmxvZ2dlciksdGhpcy5vcHRpb25zKTp1LmluaXQobnVsbCx0aGlzLm9wdGlvbnMpLHRoaXMubW9kdWxlcy5mb3JtYXR0ZXI/dD10aGlzLm1vZHVsZXMuZm9ybWF0dGVyOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBJbnRsJiYodD0kKTtjb25zdCBuPW5ldyBSKHRoaXMub3B0aW9ucyk7dGhpcy5zdG9yZT1uZXcgRSh0aGlzLm9wdGlvbnMucmVzb3VyY2VzLHRoaXMub3B0aW9ucyk7Y29uc3QgaT10aGlzLnNlcnZpY2VzO2kubG9nZ2VyPXUsaS5yZXNvdXJjZVN0b3JlPXRoaXMuc3RvcmUsaS5sYW5ndWFnZVV0aWxzPW4saS5wbHVyYWxSZXNvbHZlcj1uZXcgQihuLHtwcmVwZW5kOnRoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3IsY29tcGF0aWJpbGl0eUpTT046dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OLHNpbXBsaWZ5UGx1cmFsU3VmZml4OnRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeH0pLCF0fHx0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQmJnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdCE9PXIuaW50ZXJwb2xhdGlvbi5mb3JtYXR8fChpLmZvcm1hdHRlcj1vKHQpLGkuZm9ybWF0dGVyLmluaXQoaSx0aGlzLm9wdGlvbnMpLHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdD1pLmZvcm1hdHRlci5mb3JtYXQuYmluZChpLmZvcm1hdHRlcikpLGkuaW50ZXJwb2xhdG9yPW5ldyBEKHRoaXMub3B0aW9ucyksaS51dGlscz17aGFzTG9hZGVkTmFtZXNwYWNlOnRoaXMuaGFzTG9hZGVkTmFtZXNwYWNlLmJpbmQodGhpcyl9LGkuYmFja2VuZENvbm5lY3Rvcj1uZXcgTihvKHRoaXMubW9kdWxlcy5iYWNrZW5kKSxpLnJlc291cmNlU3RvcmUsaSx0aGlzLm9wdGlvbnMpLGkuYmFja2VuZENvbm5lY3Rvci5vbihcIipcIiwoZnVuY3Rpb24odCl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4xP24tMTowKSxvPTE7bzxuO28rKylyW28tMV09YXJndW1lbnRzW29dO2UuZW1pdCh0LC4uLnIpfSkpLHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yJiYoaS5sYW5ndWFnZURldGVjdG9yPW8odGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3IpLGkubGFuZ3VhZ2VEZXRlY3Rvci5pbml0JiZpLmxhbmd1YWdlRGV0ZWN0b3IuaW5pdChpLHRoaXMub3B0aW9ucy5kZXRlY3Rpb24sdGhpcy5vcHRpb25zKSksdGhpcy5tb2R1bGVzLmkxOG5Gb3JtYXQmJihpLmkxOG5Gb3JtYXQ9byh0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdCksaS5pMThuRm9ybWF0LmluaXQmJmkuaTE4bkZvcm1hdC5pbml0KHRoaXMpKSx0aGlzLnRyYW5zbGF0b3I9bmV3IE0odGhpcy5zZXJ2aWNlcyx0aGlzLm9wdGlvbnMpLHRoaXMudHJhbnNsYXRvci5vbihcIipcIiwoZnVuY3Rpb24odCl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4xP24tMTowKSxvPTE7bzxuO28rKylyW28tMV09YXJndW1lbnRzW29dO2UuZW1pdCh0LC4uLnIpfSkpLHRoaXMubW9kdWxlcy5leHRlcm5hbC5mb3JFYWNoKChlPT57ZS5pbml0JiZlLmluaXQodGhpcyl9KSl9aWYodGhpcy5mb3JtYXQ9dGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZm9ybWF0LG58fChuPVcpLHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyYmIXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciYmIXRoaXMub3B0aW9ucy5sbmcpe2NvbnN0IGU9dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nKTtlLmxlbmd0aD4wJiZcImRldlwiIT09ZVswXSYmKHRoaXMub3B0aW9ucy5sbmc9ZVswXSl9dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yfHx0aGlzLm9wdGlvbnMubG5nfHx0aGlzLmxvZ2dlci53YXJuKFwiaW5pdDogbm8gbGFuZ3VhZ2VEZXRlY3RvciBpcyB1c2VkIGFuZCBubyBsbmcgaXMgZGVmaW5lZFwiKTtbXCJnZXRSZXNvdXJjZVwiLFwiaGFzUmVzb3VyY2VCdW5kbGVcIixcImdldFJlc291cmNlQnVuZGxlXCIsXCJnZXREYXRhQnlMYW5ndWFnZVwiXS5mb3JFYWNoKCh0PT57dGhpc1t0XT1mdW5jdGlvbigpe3JldHVybiBlLnN0b3JlW3RdKC4uLmFyZ3VtZW50cyl9fSkpO1tcImFkZFJlc291cmNlXCIsXCJhZGRSZXNvdXJjZXNcIixcImFkZFJlc291cmNlQnVuZGxlXCIsXCJyZW1vdmVSZXNvdXJjZUJ1bmRsZVwiXS5mb3JFYWNoKCh0PT57dGhpc1t0XT1mdW5jdGlvbigpe3JldHVybiBlLnN0b3JlW3RdKC4uLmFyZ3VtZW50cyksZX19KSk7Y29uc3QgaT1kKCksYT0oKT0+e2NvbnN0IGU9KGUsdCk9Pnt0aGlzLmlzSW5pdGlhbGl6ZWQmJiF0aGlzLmluaXRpYWxpemVkU3RvcmVPbmNlJiZ0aGlzLmxvZ2dlci53YXJuKFwiaW5pdDogaTE4bmV4dCBpcyBhbHJlYWR5IGluaXRpYWxpemVkLiBZb3Ugc2hvdWxkIGNhbGwgaW5pdCBqdXN0IG9uY2UhXCIpLHRoaXMuaXNJbml0aWFsaXplZD0hMCx0aGlzLm9wdGlvbnMuaXNDbG9uZXx8dGhpcy5sb2dnZXIubG9nKFwiaW5pdGlhbGl6ZWRcIix0aGlzLm9wdGlvbnMpLHRoaXMuZW1pdChcImluaXRpYWxpemVkXCIsdGhpcy5vcHRpb25zKSxpLnJlc29sdmUodCksbihlLHQpfTtpZih0aGlzLmxhbmd1YWdlcyYmXCJ2MVwiIT09dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkmJiF0aGlzLmlzSW5pdGlhbGl6ZWQpcmV0dXJuIGUobnVsbCx0aGlzLnQuYmluZCh0aGlzKSk7dGhpcy5jaGFuZ2VMYW5ndWFnZSh0aGlzLm9wdGlvbnMubG5nLGUpfTtyZXR1cm4gdGhpcy5vcHRpb25zLnJlc291cmNlc3x8IXRoaXMub3B0aW9ucy5pbml0SW1tZWRpYXRlP2EoKTpzZXRUaW1lb3V0KGEsMCksaX1sb2FkUmVzb3VyY2VzKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpXO2NvbnN0IG49XCJzdHJpbmdcIj09dHlwZW9mIGU/ZTp0aGlzLmxhbmd1YWdlO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJih0PWUpLCF0aGlzLm9wdGlvbnMucmVzb3VyY2VzfHx0aGlzLm9wdGlvbnMucGFydGlhbEJ1bmRsZWRMYW5ndWFnZXMpe2lmKG4mJlwiY2ltb2RlXCI9PT1uLnRvTG93ZXJDYXNlKCkmJighdGhpcy5vcHRpb25zLnByZWxvYWR8fDA9PT10aGlzLm9wdGlvbnMucHJlbG9hZC5sZW5ndGgpKXJldHVybiB0KCk7Y29uc3QgZT1bXSxyPXQ9PntpZighdClyZXR1cm47aWYoXCJjaW1vZGVcIj09PXQpcmV0dXJuO3RoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkodCkuZm9yRWFjaCgodD0+e1wiY2ltb2RlXCIhPT10JiZlLmluZGV4T2YodCk8MCYmZS5wdXNoKHQpfSkpfTtpZihuKXIobik7ZWxzZXt0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpLmZvckVhY2goKGU9PnIoZSkpKX10aGlzLm9wdGlvbnMucHJlbG9hZCYmdGhpcy5vcHRpb25zLnByZWxvYWQuZm9yRWFjaCgoZT0+cihlKSkpLHRoaXMuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5sb2FkKGUsdGhpcy5vcHRpb25zLm5zLChlPT57ZXx8dGhpcy5yZXNvbHZlZExhbmd1YWdlfHwhdGhpcy5sYW5ndWFnZXx8dGhpcy5zZXRSZXNvbHZlZExhbmd1YWdlKHRoaXMubGFuZ3VhZ2UpLHQoZSl9KSl9ZWxzZSB0KG51bGwpfXJlbG9hZFJlc291cmNlcyhlLHQsbil7Y29uc3Qgcj1kKCk7cmV0dXJuIGV8fChlPXRoaXMubGFuZ3VhZ2VzKSx0fHwodD10aGlzLm9wdGlvbnMubnMpLG58fChuPVcpLHRoaXMuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5yZWxvYWQoZSx0LChlPT57ci5yZXNvbHZlKCksbihlKX0pKSxyfXVzZShlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJZb3UgYXJlIHBhc3NpbmcgYW4gdW5kZWZpbmVkIG1vZHVsZSEgUGxlYXNlIGNoZWNrIHRoZSBvYmplY3QgeW91IGFyZSBwYXNzaW5nIHRvIGkxOG5leHQudXNlKClcIik7aWYoIWUudHlwZSl0aHJvdyBuZXcgRXJyb3IoXCJZb3UgYXJlIHBhc3NpbmcgYSB3cm9uZyBtb2R1bGUhIFBsZWFzZSBjaGVjayB0aGUgb2JqZWN0IHlvdSBhcmUgcGFzc2luZyB0byBpMThuZXh0LnVzZSgpXCIpO3JldHVyblwiYmFja2VuZFwiPT09ZS50eXBlJiYodGhpcy5tb2R1bGVzLmJhY2tlbmQ9ZSksKFwibG9nZ2VyXCI9PT1lLnR5cGV8fGUubG9nJiZlLndhcm4mJmUuZXJyb3IpJiYodGhpcy5tb2R1bGVzLmxvZ2dlcj1lKSxcImxhbmd1YWdlRGV0ZWN0b3JcIj09PWUudHlwZSYmKHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yPWUpLFwiaTE4bkZvcm1hdFwiPT09ZS50eXBlJiYodGhpcy5tb2R1bGVzLmkxOG5Gb3JtYXQ9ZSksXCJwb3N0UHJvY2Vzc29yXCI9PT1lLnR5cGUmJlMuYWRkUG9zdFByb2Nlc3NvcihlKSxcImZvcm1hdHRlclwiPT09ZS50eXBlJiYodGhpcy5tb2R1bGVzLmZvcm1hdHRlcj1lKSxcIjNyZFBhcnR5XCI9PT1lLnR5cGUmJnRoaXMubW9kdWxlcy5leHRlcm5hbC5wdXNoKGUpLHRoaXN9c2V0UmVzb2x2ZWRMYW5ndWFnZShlKXtpZihlJiZ0aGlzLmxhbmd1YWdlcyYmIShbXCJjaW1vZGVcIixcImRldlwiXS5pbmRleE9mKGUpPi0xKSlmb3IobGV0IGU9MDtlPHRoaXMubGFuZ3VhZ2VzLmxlbmd0aDtlKyspe2NvbnN0IHQ9dGhpcy5sYW5ndWFnZXNbZV07aWYoIShbXCJjaW1vZGVcIixcImRldlwiXS5pbmRleE9mKHQpPi0xKSYmdGhpcy5zdG9yZS5oYXNMYW5ndWFnZVNvbWVUcmFuc2xhdGlvbnModCkpe3RoaXMucmVzb2x2ZWRMYW5ndWFnZT10O2JyZWFrfX19Y2hhbmdlTGFuZ3VhZ2UoZSx0KXt2YXIgbj10aGlzO3RoaXMuaXNMYW5ndWFnZUNoYW5naW5nVG89ZTtjb25zdCByPWQoKTt0aGlzLmVtaXQoXCJsYW5ndWFnZUNoYW5naW5nXCIsZSk7Y29uc3Qgbz1lPT57dGhpcy5sYW5ndWFnZT1lLHRoaXMubGFuZ3VhZ2VzPXRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkoZSksdGhpcy5yZXNvbHZlZExhbmd1YWdlPXZvaWQgMCx0aGlzLnNldFJlc29sdmVkTGFuZ3VhZ2UoZSl9LGk9KGUsaSk9PntpPyhvKGkpLHRoaXMudHJhbnNsYXRvci5jaGFuZ2VMYW5ndWFnZShpKSx0aGlzLmlzTGFuZ3VhZ2VDaGFuZ2luZ1RvPXZvaWQgMCx0aGlzLmVtaXQoXCJsYW5ndWFnZUNoYW5nZWRcIixpKSx0aGlzLmxvZ2dlci5sb2coXCJsYW5ndWFnZUNoYW5nZWRcIixpKSk6dGhpcy5pc0xhbmd1YWdlQ2hhbmdpbmdUbz12b2lkIDAsci5yZXNvbHZlKChmdW5jdGlvbigpe3JldHVybiBuLnQoLi4uYXJndW1lbnRzKX0pKSx0JiZ0KGUsKGZ1bmN0aW9uKCl7cmV0dXJuIG4udCguLi5hcmd1bWVudHMpfSkpfSxhPXQ9PntlfHx0fHwhdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yfHwodD1bXSk7Y29uc3Qgbj1cInN0cmluZ1wiPT10eXBlb2YgdD90OnRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5nZXRCZXN0TWF0Y2hGcm9tQ29kZXModCk7biYmKHRoaXMubGFuZ3VhZ2V8fG8obiksdGhpcy50cmFuc2xhdG9yLmxhbmd1YWdlfHx0aGlzLnRyYW5zbGF0b3IuY2hhbmdlTGFuZ3VhZ2UobiksdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yJiZ0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuY2FjaGVVc2VyTGFuZ3VhZ2UmJnRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5jYWNoZVVzZXJMYW5ndWFnZShuKSksdGhpcy5sb2FkUmVzb3VyY2VzKG4sKGU9PntpKGUsbil9KSl9O3JldHVybiBlfHwhdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yfHx0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuYXN5bmM/IWUmJnRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciYmdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmFzeW5jPzA9PT10aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0Lmxlbmd0aD90aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0KCkudGhlbihhKTp0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0KGEpOmEoZSk6YSh0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0KCkpLHJ9Z2V0Rml4ZWRUKGUsdCxuKXt2YXIgcj10aGlzO2NvbnN0IG89ZnVuY3Rpb24oZSx0KXtsZXQgaTtpZihcIm9iamVjdFwiIT10eXBlb2YgdCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYT4yP2EtMjowKSxzPTI7czxhO3MrKylsW3MtMl09YXJndW1lbnRzW3NdO2k9ci5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyKFtlLHRdLmNvbmNhdChsKSl9ZWxzZSBpPXsuLi50fTtpLmxuZz1pLmxuZ3x8by5sbmcsaS5sbmdzPWkubG5nc3x8by5sbmdzLGkubnM9aS5uc3x8by5ucyxpLmtleVByZWZpeD1pLmtleVByZWZpeHx8bnx8by5rZXlQcmVmaXg7Y29uc3QgYz1yLm9wdGlvbnMua2V5U2VwYXJhdG9yfHxcIi5cIjtsZXQgdTtyZXR1cm4gdT1pLmtleVByZWZpeCYmQXJyYXkuaXNBcnJheShlKT9lLm1hcCgoZT0+YCR7aS5rZXlQcmVmaXh9JHtjfSR7ZX1gKSk6aS5rZXlQcmVmaXg/YCR7aS5rZXlQcmVmaXh9JHtjfSR7ZX1gOmUsci50KHUsaSl9O3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP28ubG5nPWU6by5sbmdzPWUsby5ucz10LG8ua2V5UHJlZml4PW4sb310KCl7cmV0dXJuIHRoaXMudHJhbnNsYXRvciYmdGhpcy50cmFuc2xhdG9yLnRyYW5zbGF0ZSguLi5hcmd1bWVudHMpfWV4aXN0cygpe3JldHVybiB0aGlzLnRyYW5zbGF0b3ImJnRoaXMudHJhbnNsYXRvci5leGlzdHMoLi4uYXJndW1lbnRzKX1zZXREZWZhdWx0TmFtZXNwYWNlKGUpe3RoaXMub3B0aW9ucy5kZWZhdWx0TlM9ZX1oYXNMb2FkZWROYW1lc3BhY2UoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCF0aGlzLmlzSW5pdGlhbGl6ZWQpcmV0dXJuIHRoaXMubG9nZ2VyLndhcm4oXCJoYXNMb2FkZWROYW1lc3BhY2U6IGkxOG5leHQgd2FzIG5vdCBpbml0aWFsaXplZFwiLHRoaXMubGFuZ3VhZ2VzKSwhMTtpZighdGhpcy5sYW5ndWFnZXN8fCF0aGlzLmxhbmd1YWdlcy5sZW5ndGgpcmV0dXJuIHRoaXMubG9nZ2VyLndhcm4oXCJoYXNMb2FkZWROYW1lc3BhY2U6IGkxOG4ubGFuZ3VhZ2VzIHdlcmUgdW5kZWZpbmVkIG9yIGVtcHR5XCIsdGhpcy5sYW5ndWFnZXMpLCExO2NvbnN0IG49dC5sbmd8fHRoaXMucmVzb2x2ZWRMYW5ndWFnZXx8dGhpcy5sYW5ndWFnZXNbMF0scj0hIXRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nLG89dGhpcy5sYW5ndWFnZXNbdGhpcy5sYW5ndWFnZXMubGVuZ3RoLTFdO2lmKFwiY2ltb2RlXCI9PT1uLnRvTG93ZXJDYXNlKCkpcmV0dXJuITA7Y29uc3QgaT0oZSx0KT0+e2NvbnN0IG49dGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLnN0YXRlW2Ake2V9fCR7dH1gXTtyZXR1cm4tMT09PW58fDI9PT1ufTtpZih0LnByZWNoZWNrKXtjb25zdCBlPXQucHJlY2hlY2sodGhpcyxpKTtpZih2b2lkIDAhPT1lKXJldHVybiBlfXJldHVybiEhdGhpcy5oYXNSZXNvdXJjZUJ1bmRsZShuLGUpfHwoISh0aGlzLnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IuYmFja2VuZCYmKCF0aGlzLm9wdGlvbnMucmVzb3VyY2VzfHx0aGlzLm9wdGlvbnMucGFydGlhbEJ1bmRsZWRMYW5ndWFnZXMpKXx8ISghaShuLGUpfHxyJiYhaShvLGUpKSl9bG9hZE5hbWVzcGFjZXMoZSx0KXtjb25zdCBuPWQoKTtyZXR1cm4gdGhpcy5vcHRpb25zLm5zPyhcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W2VdKSxlLmZvckVhY2goKGU9Pnt0aGlzLm9wdGlvbnMubnMuaW5kZXhPZihlKTwwJiZ0aGlzLm9wdGlvbnMubnMucHVzaChlKX0pKSx0aGlzLmxvYWRSZXNvdXJjZXMoKGU9PntuLnJlc29sdmUoKSx0JiZ0KGUpfSkpLG4pOih0JiZ0KCksUHJvbWlzZS5yZXNvbHZlKCkpfWxvYWRMYW5ndWFnZXMoZSx0KXtjb25zdCBuPWQoKTtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W2VdKTtjb25zdCByPXRoaXMub3B0aW9ucy5wcmVsb2FkfHxbXSxvPWUuZmlsdGVyKChlPT5yLmluZGV4T2YoZSk8MCkpO3JldHVybiBvLmxlbmd0aD8odGhpcy5vcHRpb25zLnByZWxvYWQ9ci5jb25jYXQobyksdGhpcy5sb2FkUmVzb3VyY2VzKChlPT57bi5yZXNvbHZlKCksdCYmdChlKX0pKSxuKToodCYmdCgpLFByb21pc2UucmVzb2x2ZSgpKX1kaXIoZSl7aWYoZXx8KGU9dGhpcy5yZXNvbHZlZExhbmd1YWdlfHwodGhpcy5sYW5ndWFnZXMmJnRoaXMubGFuZ3VhZ2VzLmxlbmd0aD4wP3RoaXMubGFuZ3VhZ2VzWzBdOnRoaXMubGFuZ3VhZ2UpKSwhZSlyZXR1cm5cInJ0bFwiO2NvbnN0IHQ9dGhpcy5zZXJ2aWNlcyYmdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzfHxuZXcgUihGKCkpO3JldHVybltcImFyXCIsXCJzaHVcIixcInNxclwiLFwic3NoXCIsXCJ4YWFcIixcInloZFwiLFwieXVkXCIsXCJhYW9cIixcImFiaFwiLFwiYWJ2XCIsXCJhY21cIixcImFjcVwiLFwiYWN3XCIsXCJhY3hcIixcImFjeVwiLFwiYWRmXCIsXCJhZHNcIixcImFlYlwiLFwiYWVjXCIsXCJhZmJcIixcImFqcFwiLFwiYXBjXCIsXCJhcGRcIixcImFyYlwiLFwiYXJxXCIsXCJhcnNcIixcImFyeVwiLFwiYXJ6XCIsXCJhdXpcIixcImF2bFwiLFwiYXloXCIsXCJheWxcIixcImF5blwiLFwiYXlwXCIsXCJiYnpcIixcInBnYVwiLFwiaGVcIixcIml3XCIsXCJwc1wiLFwicGJ0XCIsXCJwYnVcIixcInBzdFwiLFwicHJwXCIsXCJwcmRcIixcInVnXCIsXCJ1clwiLFwieWRkXCIsXCJ5ZHNcIixcInlpaFwiLFwiamlcIixcInlpXCIsXCJoYm9cIixcIm1lblwiLFwieG1uXCIsXCJmYVwiLFwianByXCIsXCJwZW9cIixcInBlc1wiLFwicHJzXCIsXCJkdlwiLFwic2FtXCIsXCJja2JcIl0uaW5kZXhPZih0LmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpKT4tMXx8ZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCItYXJhYlwiKT4xP1wicnRsXCI6XCJsdHJcIn1zdGF0aWMgY3JlYXRlSW5zdGFuY2UoKXtyZXR1cm4gbmV3IHooYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX1jbG9uZUluc3RhbmNlKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOlc7Y29uc3Qgbj1lLmZvcmtSZXNvdXJjZVN0b3JlO24mJmRlbGV0ZSBlLmZvcmtSZXNvdXJjZVN0b3JlO2NvbnN0IHI9ey4uLnRoaXMub3B0aW9ucywuLi5lLGlzQ2xvbmU6ITB9LG89bmV3IHoocik7dm9pZCAwPT09ZS5kZWJ1ZyYmdm9pZCAwPT09ZS5wcmVmaXh8fChvLmxvZ2dlcj1vLmxvZ2dlci5jbG9uZShlKSk7cmV0dXJuW1wic3RvcmVcIixcInNlcnZpY2VzXCIsXCJsYW5ndWFnZVwiXS5mb3JFYWNoKChlPT57b1tlXT10aGlzW2VdfSkpLG8uc2VydmljZXM9ey4uLnRoaXMuc2VydmljZXN9LG8uc2VydmljZXMudXRpbHM9e2hhc0xvYWRlZE5hbWVzcGFjZTpvLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKG8pfSxuJiYoby5zdG9yZT1uZXcgRSh0aGlzLnN0b3JlLmRhdGEsciksby5zZXJ2aWNlcy5yZXNvdXJjZVN0b3JlPW8uc3RvcmUpLG8udHJhbnNsYXRvcj1uZXcgTShvLnNlcnZpY2VzLHIpLG8udHJhbnNsYXRvci5vbihcIipcIiwoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO28uZW1pdChlLC4uLm4pfSkpLG8uaW5pdChyLHQpLG8udHJhbnNsYXRvci5vcHRpb25zPXIsby50cmFuc2xhdG9yLmJhY2tlbmRDb25uZWN0b3Iuc2VydmljZXMudXRpbHM9e2hhc0xvYWRlZE5hbWVzcGFjZTpvLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKG8pfSxvfXRvSlNPTigpe3JldHVybntvcHRpb25zOnRoaXMub3B0aW9ucyxzdG9yZTp0aGlzLnN0b3JlLGxhbmd1YWdlOnRoaXMubGFuZ3VhZ2UsbGFuZ3VhZ2VzOnRoaXMubGFuZ3VhZ2VzLHJlc29sdmVkTGFuZ3VhZ2U6dGhpcy5yZXNvbHZlZExhbmd1YWdlfX19Y29uc3QgRz16LmNyZWF0ZUluc3RhbmNlKCk7Ry5jcmVhdGVJbnN0YW5jZT16LmNyZWF0ZUluc3RhbmNlO0cuY3JlYXRlSW5zdGFuY2UsRy5kaXIsRy5pbml0LEcubG9hZFJlc291cmNlcyxHLnJlbG9hZFJlc291cmNlcyxHLnVzZSxHLmNoYW5nZUxhbmd1YWdlLEcuZ2V0Rml4ZWRULEcudCxHLmV4aXN0cyxHLnNldERlZmF1bHROYW1lc3BhY2UsRy5oYXNMb2FkZWROYW1lc3BhY2UsRy5sb2FkTmFtZXNwYWNlcyxHLmxvYWRMYW5ndWFnZXM7Ry50O24oMzQyMCksbigxMTI3KTtuKDU0MzgpO3ZhciBxPW4oMzkyNik7bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5xdWV1ZT1bXSx0aGlzLmxvY2tlZD0hMX1sb2NrKCl7cmV0dXJuIG5ldyBQcm9taXNlKChlPT57dGhpcy5sb2NrZWQ/dGhpcy5xdWV1ZS5wdXNoKGUpOih0aGlzLmxvY2tlZD0hMCxlKCkpfSkpfXVubG9jaygpe2lmKHRoaXMucXVldWUubGVuZ3RoPjApe2NvbnN0IGU9dGhpcy5xdWV1ZS5zaGlmdCgpO2UmJmUoKX1lbHNlIHRoaXMubG9ja2VkPSExfX07bmV3IE1hcDt2YXIgWTshZnVuY3Rpb24oZSl7ZS5FUlJPUj1cImVycm9yXCIsZS5TVUNDRVNTPVwic3VjY2Vzc1wiLGUuSU5GTz1cImluZm9cIn0oWXx8KFk9e30pKTtjb25zdCBLPSgoZSx0KT0+e2NvbnN0IG49ZTtyZXR1cm4gbi53b3Jrc3BhY2VQbGF0Zm9ybXx8KG4ud29ya3NwYWNlUGxhdGZvcm09e30pLG4ud29ya3NwYWNlUGxhdGZvcm0uX2ludGVybmFsRGVmZXJTaG93T3B0aW9ucz17c2V0QXNGb3JlZ3JvdW5kOiEhdCxkZWZlclNob3dFbmFibGVkOiEwLGF1dG9TaG93Om4ud29ya3NwYWNlUGxhdGZvcm0/Ll9pbnRlcm5hbEF1dG9TaG93fHxuLndvcmtzcGFjZVBsYXRmb3JtPy5faW50ZXJuYWxEZWZlclNob3dPcHRpb25zPy5hdXRvU2hvd3x8dm9pZCAwPT09bi5hdXRvU2hvd3x8bi5hdXRvU2hvd30sbi5hdXRvU2hvdz0hMSxufSkoe2Fsd2F5c09uVG9wOiEwLGF1dG9TaG93OiExLGZyYW1lOiExLHJlc2l6YWJsZTohMSxzaG93VGFza2Jhckljb246ITF9KTt2YXIgWDshZnVuY3Rpb24oZSl7ZS5Mb2NrZWQ9XCJMb2NrQ2xvc2VkSWNvblwiLGUuVW5sb2NrZWQ9XCJMb2NrT3BlbjFJY29uXCJ9KFh8fChYPXt9KSk7IWZ1bmN0aW9uKGU9Syl7Y29uc3QgdD1uZXcgTWFwfSgpO3ZhciBKPW4oODA2MSksUT1uKDQ3MjgpO24oNjY1MCk7Y29uc3QgZWU9KGUsdD0wKT0+e2xldCBuLHIsbz0hMTtjb25zdCBpPWFzeW5jIHI9Pntjb25zdCBhPWF3YWl0IGUoLi4ucik7aWYobyl7YXdhaXQgbmV3IFByb21pc2UoKGU9PnNldFRpbWVvdXQoZSx0KSkpO2NvbnN0IGU9bjtyZXR1cm4gbj12b2lkIDAsbz0hMSxpKGUpfXJldHVybiBhfTtyZXR1cm4oLi4uZSk9PihyPyhvPSEwLG49ZSk6cj1pKGUpLmNhdGNoKChlPT57dGhyb3cgY29uc29sZS5lcnJvcihcIm1ha2VEZWJvdW5jZWRGdW5jXCIsZSksZX0pKS5maW5hbGx5KCgoKT0+e3I9dm9pZCAwfSkpLHIpfTtmdW5jdGlvbiB0ZShlLHQpe3JldHVybiBhc3luYyhuLC4uLnIpPT57ZS5oYXMobikmJmUuZ2V0KG4pLmZvckVhY2goKGU9PmUoLi4ucikpKSx0JiZhd2FpdCB0KHtldmVudDpuLHBheWxvYWQ6cn0pfX1mdW5jdGlvbiBuZShlLHQpe3JldHVybiB0JiZ0KCh0PT57Y29uc3R7ZXZlbnQ6bixwYXlsb2FkOnJ9PXQ7ZS5oYXMobikmJmUuZ2V0KG4pLmZvckVhY2goKGU9PmUoLi4ucikpKX0pKSwodCxuKT0+e2UuaGFzKHQpfHxlLnNldCh0LG5ldyBTZXQpLGUuZ2V0KHQpLmFkZChuKX19ZnVuY3Rpb24gcmUoZSl7cmV0dXJuKHQsbik9PntlLmhhcyh0KXx8ZS5zZXQodCxuZXcgU2V0KTtjb25zdCByPWUuZ2V0KHQpLG89KC4uLmUpPT57biguLi5lKSxyLmRlbGV0ZShvKX07ci5hZGQobyl9fWZ1bmN0aW9uIG9lKGUpe3JldHVybih0LG4pPT57ZS5oYXModCkmJmUuZ2V0KHQpLmRlbGV0ZShuKX19bigxMDY1KTtsLklBLkJyb3dzZXJNZW51OyhmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dGUodCwodD0+ci5zUyYmZmluLkludGVyQXBwbGljYXRpb25CdXMucHVibGlzaChlLHQpKSksbmUodCwodD0+ci5zUyYmZmluLkludGVyQXBwbGljYXRpb25CdXMuc3Vic2NyaWJlKHt1dWlkOmZpbi5tZS51dWlkfSxlLHQpKSksb2UodCkscmUodCl9KShcIndpbmRvdy5tZW51XCIpLGVlKCgoKT0+KDAsaS5EOSkoKS5nZXRDaGlsZFdpbmRvd3MoKSksNTAwKTtuZXcgTWFwO3ZhciBpZT1uKDMxOTgpO24ubihpZSkoKSgoYXN5bmMoKT0+e2NvbnN0IGU9YXdhaXQgZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkuQXBwbGljYXRpb24uZ2V0Q2hpbGRXaW5kb3dzKCk7bGV0IHQsbj0hMTtmb3IoY29uc3QgciBvZiBlKWlmKHIuaWRlbnRpdHkubmFtZT09PWwuSUEuQnJvd3Nlck1lbnV8fHIuaWRlbnRpdHkubmFtZT09PWwuSUEuQnJvd3NlclNhdmVNZW51P3Q9cjphd2FpdCgwLGwuQikoci5pZGVudGl0eSkmJihuPSEwKSxuKWJyZWFrOyFuJiZ0JiZ0LmNsb3NlKCl9KSwxMDAse2xlYWRpbmc6ITEsdHJhaWxpbmc6ITB9KTt2YXIgYWU7IWZ1bmN0aW9uKGUpe2UuTGFiZWw9XCJub3JtYWxcIixlLlNlcGFyYXRvcj1cInNlcGFyYXRvclwiLGUuU3VibWVudT1cInN1Ym1lbnVcIixlLkNoZWNrYm94PVwiY2hlY2tib3hcIn0oYWV8fChhZT17fSkpO2FlLlNlcGFyYXRvcjt2YXIgbGU7IWZ1bmN0aW9uKGUpe2UuU2F2ZT1cIlNhdmVcIixlLlNhdmVBcz1cIlNhdmVBc1wifShsZXx8KGxlPXt9KSk7dmFyIHNlOyFmdW5jdGlvbihlKXtlLkdsb2JhbE1lbnU9XCJnbG9iYWwtbWVudVwiLGUuQ29udGV4dE1lbnU9XCJjb250ZXh0LW1lbnVcIixlLlJlbmFtZVN1cGVydGFiPVwicmVuYW1lLXN1cGVydGFiXCIsZS5BZGRFZGl0Qm9va21hcms9XCJhZGQtZWRpdC1ib29rbWFya1wiLGUuRHJvcGRvd25NZW51PVwiZHJvcGRvd24tbWVudVwifShzZXx8KHNlPXt9KSk7big1OTEyKTtmdW5jdGlvbiBjZShlKXtyZXR1cm4gbmV3IFByb21pc2UoKCh0LG4pPT57ZS5vbmNvbXBsZXRlPWUub25zdWNjZXNzPSgpPT50KGUucmVzdWx0KSxlLm9uYWJvcnQ9ZS5vbmVycm9yPSgpPT5uKGUuZXJyb3IpfSkpfWZ1bmN0aW9uIHVlKGUsdCl7Y29uc3Qgbj1pbmRleGVkREIub3BlbihlKTtuLm9udXBncmFkZW5lZWRlZD0oKT0+bi5yZXN1bHQuY3JlYXRlT2JqZWN0U3RvcmUodCk7Y29uc3Qgcj1jZShuKTtyZXR1cm4oZSxuKT0+ci50aGVuKChyPT5uKHIudHJhbnNhY3Rpb24odCxlKS5vYmplY3RTdG9yZSh0KSkpKX1sZXQgZmU7ZnVuY3Rpb24gZGUoKXtyZXR1cm4gZmV8fChmZT11ZShcImtleXZhbC1zdG9yZVwiLFwia2V5dmFsXCIpKSxmZX1mdW5jdGlvbiBwZShlLHQpe3JldHVybiBlLm9wZW5DdXJzb3IoKS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt0aGlzLnJlc3VsdCYmKHQodGhpcy5yZXN1bHQpLHRoaXMucmVzdWx0LmNvbnRpbnVlKCkpfSxjZShlLnRyYW5zYWN0aW9uKX1jb25zdCBoZT1hc3luYyhlLHQsbik9Pntjb25zdCByPVEuclYoSi5aLkhhc01vdmVkU3RvcmUpLG89cj9KU09OLnBhcnNlKHIpOnt9O2lmKG8mJm9bbl0pcmV0dXJuO29bbl09ITAsUS5MUyhKLlouSGFzTW92ZWRTdG9yZSxKU09OLnN0cmluZ2lmeShvKSk7Y29uc3QgaT1hd2FpdCBmdW5jdGlvbihlPWRlKCkpe3JldHVybiBlKFwicmVhZG9ubHlcIiwodD0+e2lmKHQuZ2V0QWxsJiZ0LmdldEFsbEtleXMpcmV0dXJuIFByb21pc2UuYWxsKFtjZSh0LmdldEFsbEtleXMoKSksY2UodC5nZXRBbGwoKSldKS50aGVuKCgoW2UsdF0pPT5lLm1hcCgoKGUsbik9PltlLHRbbl1dKSkpKTtjb25zdCBuPVtdO3JldHVybiBlKFwicmVhZG9ubHlcIiwoZT0+cGUoZSwoZT0+bi5wdXNoKFtlLmtleSxlLnZhbHVlXSkpKS50aGVuKCgoKT0+bikpKSl9KSl9KGUpO2F3YWl0IGZ1bmN0aW9uKGUsdD1kZSgpKXtyZXR1cm4gdChcInJlYWR3cml0ZVwiLCh0PT4oZS5mb3JFYWNoKChlPT50LnB1dChlWzFdLGVbMF0pKSksY2UodC50cmFuc2FjdGlvbikpKSl9KGksdCl9LGdlPShlLHQpPT51ZShlK1wiLVwiK2Zpbi5tZS51dWlkLHQpLHZlPShlLHQpPT57Y29uc3Qgbj1nZShlLHQpLHI9dWUoZSx0KTtyZXR1cm4gaGUocixuLGUpLG59O3IuX1YmJnIuc1MmJnZlKFwib3BlbmZpbi1ob21lLXBhZ2VzXCIsXCJwYWdlc1wiKTtyLl9WJiZyLnNTJiZnZShcIm9wZW5maW4tZW50ZXJwcmlzZS10YWItaGlzdG9yeVwiLFwicmVtb3ZlZC10YWItc3RhY2tcIiksci5fViYmci5zUyYmZ2UoXCJvcGVuZmluLWVudGVycHJpc2Utc2l0ZS1oaXN0b3J5XCIsXCJ2aXNpdGVkLXNpdGVzXCIpO24oMTY0Nik7dmFyIG1lOyFmdW5jdGlvbihlKXtlW2UuQm90dG9tTGVmdD0wXT1cIkJvdHRvbUxlZnRcIixlW2UuQm90dG9tUmlnaHQ9MV09XCJCb3R0b21SaWdodFwiLGVbZS5DZW50ZXI9Ml09XCJDZW50ZXJcIn0obWV8fChtZT17fSkpO3IuX1YmJnIuc1MmJmdlKFwiZG9jay1wcm92aWRlci1jb25maWdzXCIsXCJkb2NrLXByb3ZpZGVyLWNvbmZpZ3NcIik7big3MDUpO3IuX1YmJnIuc1MmJnZlKFwib3BlbmZpbi13b3Jrc3BhY2UtcGxhdGZvcm0td29ya3NwYWNlc1wiLFwid29ya3NwYWNlc1wiKTtuKDY0OTUpO3IucngsYS5aUC5Ccm93c2VyLGwuR2kudXVpZCxsLklBLkJyb3dzZXJBZGRyZXNzU2VhcmNoUHJlZml4O24oNzA5OCksbig3NTY0KSxuKDkxMTcpfSw3MDk4OihlLHQsbik9PntcInVzZSBzdHJpY3RcIn0sNzEwMDooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQseyRnOigpPT5wfSk7dmFyIHIsbyxpLGEsbCxzLGMsdSxmLGQscCxoO24oNzU2NCksbig2NDk1KSxuKDUzMDQpOyFmdW5jdGlvbihlKXtlLlVybENoYW5nZT1cIlVSTF9DSEFOR0VcIixlLlZpZXdBZGRlZD1cIlZJRVdfQURERURcIixlLlZpZXdSZW1vdmVkPVwiVklFV19SRU1PVkVEXCIsZS5QYWdlQ29udGV4dEFkZGVkPVwiUEFHRV9DT05URVhUX0FEREVEXCIsZS5QYWdlQ29udGV4dFJlbW92ZWQ9XCJQQUdFX0NPTlRFWFRfUkVNT1ZFRFwifShyfHwocj17fSkpLGZ1bmN0aW9uKGUpe2UuTmV3V2luZG93PVwiTmV3V2luZG93XCIsZS5OZXdQYWdlPVwiTmV3UGFnZVwiLGUuU2F2ZVBhZ2U9XCJTYXZlUGFnZVwiLGUuU2F2ZVBhZ2VBcz1cIlNhdmVQYWdlQXNcIixlLlByaW50PVwiUHJpbnRcIixlLlByaW50QWxsPVwiUHJpbnRBbGxcIixlLlByaW50U2NyZWVuPVwiUHJpbnRTY3JlZW5cIixlLkNsb3NlV2luZG93PVwiQ2xvc2VXaW5kb3dcIixlLlJlc3RvcmVDaGFuZ2VzPVwiUmVzdG9yZUNoYW5nZXNcIixlLlNhdmVXb3Jrc3BhY2U9XCJTYXZlV29ya3NwYWNlXCIsZS5TYXZlV29ya3NwYWNlQXM9XCJTYXZlV29ya3NwYWNlQXNcIixlLlJlbmFtZVdvcmtzcGFjZT1cIlJlbmFtZVdvcmtzcGFjZVwiLGUuU3dpdGNoV29ya3NwYWNlPVwiU3dpdGNoV29ya3NwYWNlXCIsZS5EZWxldGVXb3Jrc3BhY2U9XCJEZWxldGVXb3Jrc3BhY2VcIixlLkRvd25sb2Fkcz1cIkRvd25sb2Fkc1wiLGUuT3BlblN0b3JlZnJvbnQ9XCJPcGVuU3RvcmVmcm9udFwiLGUuQXBwZWFyYW5jZT1cIkFwcGVhcmFuY2VcIixlLlF1aXQ9XCJRdWl0XCIsZS5DdXN0b209XCJDdXN0b21cIn0ob3x8KG89e30pKSxmdW5jdGlvbihlKXtlLkxpZ2h0PVwibGlnaHRcIixlLkRhcms9XCJkYXJrXCIsZS5TeXN0ZW09XCJzeXN0ZW1cIn0oaXx8KGk9e30pKSxmdW5jdGlvbihlKXtlLkNsb3NlPVwiQ2xvc2VcIixlLkR1cGxpY2F0ZT1cIkR1cGxpY2F0ZVwiLGUuUmVuYW1lPVwiUmVuYW1lXCIsZS5TYXZlPVwiU2F2ZVwiLGUuU2F2ZUFzPVwiU2F2ZSBBc1wiLGUuTmV3UGFnZT1cIk5ldyBQYWdlXCIsZS5EZWxldGVQYWdlPVwiRGVsZXRlIFBhZ2VcIixlLlNhdmVXb3Jrc3BhY2VBcz1cIlNhdmVXb3Jrc3BhY2VBc1wiLGUuUmVmcmVzaD1cIlJlZnJlc2hcIixlLkNsb3NlT3RoZXJzPVwiQ2xvc2Ugb3RoZXJzXCIsZS5EZWxldGU9XCJEZWxldGVcIixlLkN1c3RvbT1cIkN1c3RvbVwifShhfHwoYT17fSkpLGZ1bmN0aW9uKGUpe2UuTG9jaz1cIkxvY2tcIixlLlNob3dIaWRlVGFicz1cIlNob3dIaWRlVGFic1wiLGUuQWRkVG9DaGFuZWw9XCJBZGRUb0NoYW5uZWxcIixlLlByaW50PVwiUHJpbnRcIixlLlBpbj1cIlBpblwifShsfHwobD17fSkpLGZ1bmN0aW9uKGUpe2UuRWRpdE5hbWU9XCJFZGl0IE5hbWVcIixlLk1vdmU9XCJNb3ZlXCIsZS5EZWxldGU9XCJEZWxldGVcIn0oc3x8KHM9e30pKSxmdW5jdGlvbihlKXtlLk5ld1ZpZXc9XCJOZXdWaWV3XCIsZS5EdXBsaWNhdGVWaWV3cz1cIkR1cGxpY2F0ZVZpZXdcIixlLk9wZW5XaXRoRGVmYXVsdEJyb3dzZXI9XCJPcGVuV2l0aERlZmF1bHRCcm93c2VyXCIsZS5SZWxvYWRWaWV3cz1cIlJlbG9hZFRhYlwiLGUuQ2xvc2VWaWV3cz1cIkNsb3NlVGFiXCIsZS5BZGRUb0NoYW5uZWw9XCJBZGRUb0NoYW5uZWxcIixlLlJlbW92ZUZyb21DaGFubmVsPVwiUmVtb3ZlRnJvbUNoYW5uZWxcIixlLkJhY2s9XCJCYWNrXCIsZS5Gb3J3YXJkPVwiRm9yd2FyZFwiLGUuUHJpbnQ9XCJQcmludFwiLGUuUHJpbnRBbGw9XCJQcmludEFsbFwiLGUuUHJpbnRTY3JlZW49XCJQcmludFNjcmVlblwiLGUuQ3VzdG9tPVwiQ3VzdG9tXCJ9KGN8fChjPXt9KSksZnVuY3Rpb24oZSl7ZS5TaG93SGlkZVRhYnM9XCJTaG93SGlkZVRhYnNcIixlLkNvbG9yTGlua2luZz1cIkNvbG9yTGlua2luZ1wiLGUuUHJlc2V0TGF5b3V0cz1cIlByZXNldExheW91dHNcIixlLkxvY2tVbmxvY2tQYWdlPVwiTG9ja1VubG9ja1BhZ2VcIixlLlNhdmVNZW51PVwiU2F2ZU1lbnVcIixlLlNhdmVQYWdlPVwiU2F2ZVBhZ2VcIixlLk1pbmltaXNlPVwiTWluaW1pc2VcIixlLk1heGltaXNlPVwiTWF4aW1pc2VcIixlLkNsb3NlPVwiQ2xvc2VcIixlLkN1c3RvbT1cIkN1c3RvbVwifSh1fHwodT17fSkpLGZ1bmN0aW9uKGUpe2UuU2F2ZVBhZ2U9XCJTYXZlUGFnZVwiLGUuU2F2ZVdvcmtzcGFjZT1cIlNhdmVXb3Jrc3BhY2VcIixlLlNhdmVQYWdlQXM9XCJTYXZlUGFnZUFzXCIsZS5TYXZlV29ya3NwYWNlQXM9XCJTYXZlV29ya3NwYWNlQXNcIixlLkN1c3RvbT1cIkN1c3RvbVwifShmfHwoZj17fSkpLGZ1bmN0aW9uKGUpe2UuQnJvd3Nlcj1cImJyb3dzZXJcIixlLlBsYXRmb3JtPVwicGxhdGZvcm1cIn0oZHx8KGQ9e30pKSxmdW5jdGlvbihlKXtlLkN1c3RvbUJ1dHRvbj1cIkN1c3RvbUJ1dHRvblwiLGUuU3RvcmVDdXN0b21CdXR0b249XCJTdG9yZUN1c3RvbUJ1dHRvblwiLGUuQ3VzdG9tRHJvcGRvd25JdGVtPVwiQ3VzdG9tRHJvcGRvd25JdGVtXCIsZS5HbG9iYWxDb250ZXh0TWVudT1cIkdsb2JhbENvbnRleHRNZW51XCIsZS5WaWV3VGFiQ29udGV4dE1lbnU9XCJWaWV3VGFiQ29udGV4dE1lbnVcIixlLlBhZ2VUYWJDb250ZXh0TWVudT1cIlBhZ2VUYWJDb250ZXh0TWVudVwiLGUuU2F2ZUJ1dHRvbkNvbnRleHRNZW51PVwiU2F2ZUJ1dHRvbkNvbnRleHRNZW51XCIsZS5BUEk9XCJBUElcIn0ocHx8KHA9e30pKSxmdW5jdGlvbihlKXtlLlNBVkVfUEFHRT1cIlNBVkVfUEFHRVwiLGUuU0FWRV9XT1JLU1BBQ0U9XCJTQVZFX1dPUktTUEFDRVwiLGUuU0FWRV9QQUdFX0FTPVwiU0FWRV9QQUdFX0FTXCIsZS5TQVZFX1dPUktTUEFDRV9BUz1cIlNBVkVfV09SS1NQQUNFX0FTXCIsZS5SRU5BTUVfUEFHRT1cIlJFTkFNRV9QQUdFXCIsZS5SRU5BTUVfV09SS1NQQUNFPVwiUkVOQU1FX1dPUktTUEFDRVwifShofHwoaD17fSkpfSwyNjkzOihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7RTooKT0+aX0pO3ZhciByPW4oNTgwNiksbz1uKDcyNzgpO2NvbnN0IGk9KGUsdCk9PntvLloubWFya1N0YXJ0KGAke2V9LXJlZ2lzdHJhdGlvbmApLCgwLHIuVFopKCkub25jZShcInN0YXJ0ZWRcIiwoKCk9Pm8uWi5tYXJrQW5kTWVhc3VyZShcIndvcmtzcGFjZS1hcHAtc3RhcnRlZFwiLGAke2V9LXJlZ2lzdHJhdGlvbmApKSk7Y29uc3Qgbj1maW4uV2luZG93LndyYXBTeW5jKHQpO24ub25jZShcImluaXRpYWxpemVkXCIsKCgpPT5vLloubWFya0FuZE1lYXN1cmUoYCR7ZX0td2luZG93LWluaXRpYWxpemVkYCxgJHtlfS1yZWdpc3RyYXRpb25gKSkpLG4ub25jZShcInNob3duXCIsKCgpPT57by5aLm1hcmtBbmRNZWFzdXJlKGAke2V9LXNob3dgLGAke2V9LXJlZ2lzdHJhdGlvbmApfSkpfX0sMzI2MTooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5yKHQpLG4uZCh0LHtDTElBY3Rpb246KCk9Pl8uUHQsQ0xJRmlsdGVyT3B0aW9uVHlwZTooKT0+Xy5lbCxDTElUZW1wbGF0ZTooKT0+Xy55VyxkZXJlZ2lzdGVyOigpPT5FLGhpZGU6KCk9PmoscmVnaXN0ZXI6KCk9Pkwsc2hvdzooKT0+U30pO3ZhciByPW4oNjY3OCksbz1uKDcyNzgpLGk9big2NTMyKSxhPW4oMTIxKTtjb25zdCBsPXtyZW1vdGVQcm92aWRlckRhdGFTdHJlYW1JZDpcIjBcIixyZW1vdGVDbGllbnRTZWFyY2hTdHJlYW1JZDpcIjFcIixyZW1vdGVQcm92aWRlclJlZ2lzdHJhdGlvblN0cmVhbUlkOlwiMlwiLHJlbW90ZVByb3ZpZGVyRGVyZWdpc3RyYXRpb25TdHJlYW1JZDpcIjNcIixyZW1vdGVQcm92aWRlckluZm9TdHJlYW1JZDpcIjRcIixyZW1vdGVQcm92aWRlckRpc3BhdGNoU3RyZWFtSWQ6XCI1XCIscmVtb3RlU2VhcmNoQ2xvc2VTdHJlYW1JZDpcIjZcIn07dmFyIHM9big1MTUwKSxjPW4oNTQzOCksdT1uKDMyNjQpO3ZhciBmPW4oNzA0Nik7Y29uc3QgZD0oKT0+e307ZnVuY3Rpb24gcChlKXtjb25zdCB0PXt9O2xldCBuPVtdO2xldCByPVtdO2xldCBvPW51bGw7bGV0IGk9Zi53MS5Jbml0aWFsO3QuZ2V0U3RhdHVzPSgpPT5pLHQuZ2V0UmVzdWx0QnVmZmVyPSgpPT5uLHQuc2V0UmVzdWx0QnVmZmVyPWU9PntuPWUsbj8ubGVuZ3RoJiZ0Lm9uQ2hhbmdlKCl9LHQuZ2V0UmV2b2tlZEJ1ZmZlcj0oKT0+cix0LnNldFJldm9rZWRCdWZmZXI9ZT0+e3I9ZSxyPy5sZW5ndGgmJnQub25DaGFuZ2UoKX0sdC5zZXRVcGRhdGVkQ29udGV4dD1lPT57bz1lLG51bGwhPT1vJiZ0Lm9uQ2hhbmdlKCl9LHQuZ2V0VXBkYXRlZENvbnRleHQ9KCk9Pm8sdC5vbkNoYW5nZT1kO2NvbnN0IGE9e307cmV0dXJuIHQucmVzPWEsYS5jbG9zZT0oKT0+e2khPT1mLncxLkNsb3NlJiYoaT1mLncxLkNsb3NlLHQub25DaGFuZ2UoKSl9LGEub3Blbj0oKT0+e2khPT1mLncxLk9wZW4mJihpPWYudzEuT3Blbix0Lm9uQ2hhbmdlKCkpfSxhLnJlc3BvbmQ9bj0+e2NvbnN0IHI9ZnVuY3Rpb24oZT1bXSx0PVtdLG49XCJhc2NlbmRpbmdcIil7Y29uc3Qgcj1bXSxvPW5ldyBNYXA7dC5mb3JFYWNoKChlPT57aWYoZS5rZXkpcmV0dXJuIG8uc2V0KGUua2V5LGUpO3IucHVzaChlKX0pKTtsZXQgaT1lLm1hcCgoZT0+e2lmKGUua2V5KXtjb25zdCB0PW8uZ2V0KGUua2V5KTtpZih0KXJldHVybiBvLmRlbGV0ZShlLmtleSksdH1yZXR1cm4gZX0pKTtyZXR1cm4gaS5wdXNoKC4uLm8udmFsdWVzKCksLi4uciksaT1cImFzY2VuZGluZ1wiPT09bj9pLnNvcnQoKChlLHQpPT4oZT8uc2NvcmU/PzEvMCktKHQ/LnNjb3JlPz8xLzApKSk6aS5zb3J0KCgoZSx0KT0+KHQ/LnNjb3JlPz8xLzApLShlPy5zY29yZT8/MS8wKSkpLGl9KHQuZ2V0UmVzdWx0QnVmZmVyKCksbixlKTt0LnNldFJlc3VsdEJ1ZmZlcihyKX0sYS5yZXZva2U9KC4uLmUpPT57Y29uc3Qgbj1uZXcgU2V0KGUpLHI9dC5nZXRSZXN1bHRCdWZmZXIoKS5maWx0ZXIoKCh7a2V5OmV9KT0+e2NvbnN0IHQ9bi5oYXMoZSk7cmV0dXJuIHQmJm4uZGVsZXRlKGUpLCF0fSkpO3Quc2V0UmVzdWx0QnVmZmVyKHIpLG4uc2l6ZSYmKHQuZ2V0UmV2b2tlZEJ1ZmZlcigpLmZvckVhY2goKGU9Pm4uYWRkKGUpKSksdC5zZXRSZXZva2VkQnVmZmVyKFsuLi5uXSkpfSxhLnVwZGF0ZUNvbnRleHQ9ZT0+e3Quc2V0VXBkYXRlZENvbnRleHQoZSl9LHR9Y29uc3QgaD1uZXcgTWFwLGc9MTAwO2FzeW5jIGZ1bmN0aW9uIHYoZSl7Y29uc3R7aWQ6dCxwcm92aWRlcklkOm59PWUscj13LmdldFByb3ZpZGVyT3JGYWlsKG4pO2xldCBvPWguZ2V0KHQpO298fChvPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1uZXcgU2V0O2xldCByPSExO3JldHVybntjbG9zZTooKT0+e3I9ITA7Zm9yKGNvbnN0IGUgb2YgbillKCl9LHJlcTp7aWQ6ZSwuLi50LGNvbnRleHQ6dD8uY29udGV4dHx8e30sb25DbG9zZTplPT57bi5hZGQoZSksciYmZSgpfSxyZW1vdmVMaXN0ZW5lcjplPT57bi5kZWxldGUoZSl9fX19KHQsZSksaC5zZXQodCxvKSk7Y29uc3QgaT1wKCksYT0oKT0+e2NvbnN0IGU9aS5nZXRSZXN1bHRCdWZmZXIoKTtpLnNldFJlc3VsdEJ1ZmZlcihbXSk7Y29uc3Qgcj1pLmdldFJldm9rZWRCdWZmZXIoKTtpLnNldFJldm9rZWRCdWZmZXIoW10pO2NvbnN0IG89aS5nZXRVcGRhdGVkQ29udGV4dCgpO2kuc2V0VXBkYXRlZENvbnRleHQobnVsbCk7Y29uc3QgYT1pLmdldFN0YXR1cygpOyFhc3luYyBmdW5jdGlvbihlKXsoYXdhaXQoMCxzLlZEKSgpKS5kaXNwYXRjaChsLnJlbW90ZVByb3ZpZGVyRGF0YVN0cmVhbUlkLGUpfSh7aWQ6dCxwcm92aWRlcklkOm4scmVzdWx0czplLHJldm9rZWQ6cixzdGF0dXM6YSxjb250ZXh0Om99KX07bGV0IGM9ITAsdT0hMTtpLm9uQ2hhbmdlPSgpPT57aWYoYylyZXR1cm4gYz0hMSx2b2lkIGEoKTt1fHwodT0hMCxzZXRUaW1lb3V0KCgoKT0+e3U9ITEsYSgpfSksZykpfTt0cnl7Y29uc3R7cmVzdWx0czplLGNvbnRleHQ6YX09YXdhaXQgci5vblVzZXJJbnB1dChvLnJlcSxpLnJlcyksbD1pLmdldFN0YXR1cygpO3JldHVybntpZDp0LHByb3ZpZGVySWQ6bixzdGF0dXM6bCxyZXN1bHRzOmUsY29udGV4dDphfX1jYXRjaChlKXtyZXR1cm4gY29uc29sZS5lcnJvcihgT3BlbkZpbi9Xb3Jrc3BhY2UvSG9tZS4gVW5jYXVnaHQgZXhjZXB0aW9uIGluIHNlYXJjaCBwcm92aWRlciAke259IGZvciBzZWFyY2ggJHt0fWAsXCJUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNlYXJjaCBwcm92aWRlci5cIixlKSx7aWQ6dCxwcm92aWRlcklkOm4sZXJyb3I6ZT8ubWVzc2FnZX19fWFzeW5jIGZ1bmN0aW9uIG0oKXtmb3IoY29uc3R7cmVxOmUsY2xvc2U6dH1vZiBoLnZhbHVlcygpKXQoKSxoLmRlbGV0ZShlLmlkKX1hc3luYyBmdW5jdGlvbiBDKGUsdCl7Y29uc3Qgbj13LmdldFByb3ZpZGVyT3JGYWlsKGUucHJvdmlkZXJJZCk7cmV0dXJuIGUucmVzdWx0LmRpc3BhdGNoZXJJZGVudGl0eT10LG4ub25SZXN1bHREaXNwYXRjaD8uKGUucmVzdWx0KX1mdW5jdGlvbiB5KGUpe2NvbnN0IHQ9aC5nZXQoZS5pZCk7dD8uY2xvc2UoKSxoLmRlbGV0ZShlLmlkKX1jb25zdCB3PW5ldyB1LmxUKFwiaG9tZVwiKSxiPWFzeW5jIGU9Pnthd2FpdCgwLHMuYUIpKCk7IShcInNraXBQbGF0Zm9ybUluaXRDaGVja1wiaW4gZSYmITA9PT1lLnNraXBQbGF0Zm9ybUluaXRDaGVjaykmJmF3YWl0KDAsYy5IaCkoZmluLm1lLmlkZW50aXR5KTt3LmFzc2VydE5vdEFscmVhZHlSZWdpc3RlcmVkKGUuaWQpLHcuc2V0UHJvdmlkZXIoZSk7Y29uc3QgdD1hd2FpdCgwLHMuVkQpKCk7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuaG9tZUNoYW5uZWxBY3Rpb25zUmVnaXN0ZXJlZHx8KGUuaG9tZUNoYW5uZWxBY3Rpb25zUmVnaXN0ZXJlZD0hMCxlLnJlZ2lzdGVyKGwucmVtb3RlUHJvdmlkZXJEYXRhU3RyZWFtSWQsdiksZS5yZWdpc3RlcihsLnJlbW90ZVNlYXJjaENsb3NlU3RyZWFtSWQseSksZS5yZWdpc3RlcihsLnJlbW90ZVByb3ZpZGVyRGlzcGF0Y2hTdHJlYW1JZCxDKSxlLmFkZERpc2Nvbm5lY3Rpb25MaXN0ZW5lcihtKSl9KHQpLHQuZGlzcGF0Y2gobC5yZW1vdGVQcm92aWRlclJlZ2lzdHJhdGlvblN0cmVhbUlkLHtpZDplLmlkLHRpdGxlOmUudGl0bGUsaWNvbjplLmljb24sY2xpZW50QVBJVmVyc2lvbjpyLnUwLGlkZW50aXR5OmZpbi5tZS5pZGVudGl0eSxzY29yZU9yZGVyOmUuc2NvcmVPcmRlcixjb21tYW5kQ29kZTplLmNvbW1hbmRDb2RlLGRlc2NyaXB0aW9uOmUuZGVzY3JpcHRpb24saGlkZGVuOmUuaGlkZGVuLGxpc3RUaXRsZTplLmxpc3RUaXRsZSxpbnB1dFBsYWNlaG9sZGVyOmUuaW5wdXRQbGFjZWhvbGRlcixsb2dvVXJsOmUubG9nb1VybCxkaXNwYXRjaEZvY3VzRXZlbnRzOmUuZGlzcGF0Y2hGb2N1c0V2ZW50c30pfTt2YXIgeD1uKDI2OTMpLF89bigzNzU4KTtsZXQgTztjb25zdCBMPWFzeW5jIGU9PntpZighZS5pY29uKXRocm93IG5ldyBFcnJvcihgJHtlLmlkfSBwcm92aWRlciBuZWVkcyB0byBoYXZlIGljb24gcHJvcGVydHkgZGVmaW5lZC5gKTsoMCx4LkUpKFwiaG9tZVwiLGEuT0kpO2NvbnN0IHQ9YXdhaXQgYihlKTtyZXR1cm4gTz1uZXcgUHJvbWlzZSgoKG4sYSk9Pnt0cnl7KDAsaS5jaykoe2FsbG93ZWQ6ITAsY29tcG9uZW50VmVyc2lvbjp0Py53b3Jrc3BhY2VWZXJzaW9ufSksci51MCxuKHsuLi50LGNsaWVudEFQSVZlcnNpb246ci51MCxzZXRTZWFyY2hRdWVyeTphc3luYyB0PT4oYXdhaXQoMCxzLnhaKSgpKS5kaXNwYXRjaChcInNldC1zZWFyY2gtcXVlcnlcIix7cXVlcnk6dCxwcm92aWRlcklEOmUuaWR9KX0pfWNhdGNoKGUpeygwLGkuY2spKHthbGxvd2VkOiExLHJlamVjdGlvbkNvZGU6ZSBpbnN0YW5jZW9mIEVycm9yP2UubWVzc2FnZTpcInVua25vd25cIn0pLGEoZSl9ZmluYWxseXtvLloubWFya0VuZEFuZE1lYXN1cmUoXCJob21lLXJlZ2lzdHJhdGlvblwiKX19KSksT30sRT1hc3luYyBlPT57dy5kZWxldGVQcm92aWRlcihlKTtjb25zdCB0PWF3YWl0KDAscy5WRCkoKTthd2FpdCB0LmRpc3BhdGNoKGwucmVtb3RlUHJvdmlkZXJEZXJlZ2lzdHJhdGlvblN0cmVhbUlkLGUpfTthc3luYyBmdW5jdGlvbiBTKCl7by5aLm1hcmtTdGFydChcImhvbWUtc2hvd1wiKSxhd2FpdCBPO2NvbnN0IGU9YXdhaXQoMCxzLnhaKSgpO2F3YWl0IGUuZGlzcGF0Y2goXCJzaG93LWhvbWVcIix2b2lkIDApfWFzeW5jIGZ1bmN0aW9uIGooKXthd2FpdCBPO2NvbnN0IGU9YXdhaXQoMCxzLnhaKSgpO2F3YWl0IGUuZGlzcGF0Y2goXCJoaWRlLWhvbWVcIix2b2lkIDApfX0sMzI2NDooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse2xUOigpPT5kfSk7dmFyIHI9L1xcYig/OmFuP2Q/fGFbc3RdfGJlY2F1c2V8YnV0fGJ5fGVufGZvcnxpW2ZuXXxuZWl0aGVyfG5vcnxvW2Zucl18b25seXxvdmVyfHBlcnxzb3xzb21lfHRoYVt0bl18dGhlfHRvfHVwfHVwb258dnM/XFwuP3x2ZXJzdXN8dmlhfHdoZW58d2l0aHx3aXRob3V0fHlldClcXGIvaSxvPS9bXlxcczrigJPigJQtXSt8Li9nLGk9L1xccy8sYT0vLig/PVtBLVpdfFxcLi4pLyxsPS9bQS1aYS16MC05XFx1MDBDMC1cXHUwMEZGXS87ZnVuY3Rpb24gcyhlKXtmb3IodmFyIHQsbj1cIlwiO251bGwhPT0odD1vLmV4ZWMoZSkpOyl7dmFyIHM9dFswXSxjPXQuaW5kZXg7YS50ZXN0KHMpfHxyLnRlc3QocykmJjAhPT1jJiZjK3MubGVuZ3RoIT09ZS5sZW5ndGh8fFwiOlwiPT09ZS5jaGFyQXQoYytzLmxlbmd0aCkmJiFpLnRlc3QoZS5jaGFyQXQoYytzLmxlbmd0aCsxKSk/bis9czpuKz1zLnJlcGxhY2UobCwoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9VcHBlckNhc2UoKX0pKX1yZXR1cm4gbn1jbGFzcyBjIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0KXtjb25zdCBuPXMoZSk7c3VwZXIoYCR7bn0gUHJvdmlkZXIuICR7bn0gUHJvdmlkZXIke3Q/YCB3aXRoIGlkICR7dH1gOlwiXCJ9IGlzIG5vdCBjdXJyZW50bHkgcmVnaXN0ZXJlZC5gKX19Y2xhc3MgdSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCl7Y29uc3Qgbj1zKGUpO3N1cGVyKGAke259IFByb3ZpZGVyLiAke259IFByb3ZpZGVyJHt0P2Agd2l0aCBpZCAke3R9YDpcIlwifSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuIENhbGwgXFxgZGVyZWdpc3RlclxcYCBiZWZvcmUgcmVnaXN0ZXJpbmcgYWdhaW4uYCl9fWNsYXNzIGYgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlLHQpe2NvbnN0IG49cyhlKTtzdXBlcihgRmFpbGVkIHRvIGdldCAke259IFByb3ZpZGVyLiAke259IFByb3ZpZGVyIHdpdGggaWQgJHt0fSBpcyBub3QgY3VycmVudGx5IHJlZ2lzdGVyZWQuYCl9fWNsYXNzIGR7Y29uc3RydWN0b3IoZSl7dGhpcy5wcm92aWRlcnNNYXA9bmV3IE1hcCx0aGlzLnByb3ZpZGVyVHlwZT1lfWFzc2VydE5vdEFscmVhZHlSZWdpc3RlcmVkKGUpe2lmKHRoaXMuaGFzUHJvdmlkZXIoZSkpdGhyb3cgbmV3IHUodGhpcy5wcm92aWRlclR5cGUsZSl9YXNzZXJ0UmVnaXN0ZXJlZChlKXtpZighdGhpcy5oYXNQcm92aWRlcihlKSl0aHJvdyBuZXcgYyh0aGlzLnByb3ZpZGVyVHlwZSxlKX1nZXRQcm92aWRlcihlKXtyZXR1cm4gdGhpcy5wcm92aWRlcnNNYXAuZ2V0KGUpfWhhc1Byb3ZpZGVyKGUpe3JldHVybiB0aGlzLnByb3ZpZGVyc01hcC5oYXMoZSl9c2V0UHJvdmlkZXIoZSl7dGhpcy5wcm92aWRlcnNNYXAuc2V0KGUuaWQsZSl9ZGVsZXRlUHJvdmlkZXIoZSl7dGhpcy5wcm92aWRlcnNNYXAuZGVsZXRlKGUpfWdldFByb3ZpZGVyT3JGYWlsKGUpe2NvbnN0IHQ9dGhpcy5nZXRQcm92aWRlcihlKTtpZighdCl0aHJvdyBuZXcgZih0aGlzLnByb3ZpZGVyVHlwZSxlKTtyZXR1cm4gdH1jbGVhclByb3ZpZGVycygpe3RoaXMucHJvdmlkZXJzTWFwLmNsZWFyKCl9fX0sMTIyMjooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIHIsbyxpO24uZCh0LHtwOigpPT5vLHc6KCk9Pml9KSxmdW5jdGlvbihlKXtlLkZldGNoaW5nPVwiZmV0Y2hpbmdcIixlLkZldGNoZWQ9XCJmZXRjaGVkXCIsZS5Db21wbGV0ZT1cImNvbXBsZXRlXCJ9KHJ8fChyPXt9KSksZnVuY3Rpb24oZSl7ZS5Vc2VyQWN0aW9uPVwidXNlci1hY3Rpb25cIixlLkZvY3VzQ2hhbmdlPVwiZm9jdXMtY2hhbmdlXCIsZS5SZWxvYWQ9XCJyZWxvYWRcIn0ob3x8KG89e30pKSxmdW5jdGlvbihlKXtlLkFjdGl2ZT1cImFjdGl2ZVwiLGUuRGVmYXVsdD1cImRlZmF1bHRcIn0oaXx8KGk9e30pKX0sNzQyNzooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIHI7bi5kKHQse3Y6KCk9PnJ9KSxmdW5jdGlvbihlKXtlLkFjdGlvbkJ1dHRvbj1cIkFjdGlvbkJ1dHRvblwiLGUuRHJvcGRvd25CdXR0b249XCJEcm9wZG93bkJ1dHRvblwifShyfHwocj17fSkpfSwzNzU4OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjt2YXIgcixvLGk7bi5kKHQse1B0OigpPT5yLGVsOigpPT5pLHlXOigpPT5vfSksZnVuY3Rpb24oZSl7ZS5TdWdnZXN0aW9uPVwic3VnZ2VzdGlvblwifShyfHwocj17fSkpLGZ1bmN0aW9uKGUpe2UuQ29udGFjdD1cIkNvbnRhY3RcIixlLkN1c3RvbT1cIkN1c3RvbVwiLGUuTGlzdD1cIkxpc3RcIixlLlBsYWluPVwiUGxhaW5cIixlLlNpbXBsZVRleHQ9XCJTaW1wbGVUZXh0XCIsZS5Mb2FkaW5nPVwiTG9hZGluZ1wiLGUuRXJyb3I9XCJFcnJvclwifShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe2UuTXVsdGlTZWxlY3Q9XCJNdWx0aVNlbGVjdFwifShpfHwoaT17fSkpfSw3NTY0OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuKDEyMjIpLG4oMzc1OCksbig2MTE0KSxuKDIxMDkpLG4oNzQyNyl9LDYxMTQ6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByLG87bi5kKHQse0w6KCk9PnIsVDooKT0+b30pLGZ1bmN0aW9uKGUpe2UuU25hcHNob3Q9XCJzbmFwc2hvdFwiLGUuTWFuaWZlc3Q9XCJtYW5pZmVzdFwiLGUuVmlldz1cInZpZXdcIixlLkV4dGVybmFsPVwiZXh0ZXJuYWxcIn0ocnx8KHI9e30pKSxmdW5jdGlvbihlKXtlLkxhbmRpbmdQYWdlPVwibGFuZGluZ1BhZ2VcIixlLkFwcEdyaWQ9XCJhcHBHcmlkXCJ9KG98fChvPXt9KSl9LDIxMDk6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtHbzooKT0+byxaSjooKT0+YSxiSTooKT0+aSxwNjooKT0+cn0pO2NvbnN0IHI9e0NvbnRhaW5lcjpcIkNvbnRhaW5lclwiLEJ1dHRvbjpcIkJ1dHRvblwiLFNwbGl0QnV0dG9uOlwiU3BsaXRCdXR0b25cIn0sbz17VGV4dDpcIlRleHRcIixJbWFnZTpcIkltYWdlXCIsTGlzdDpcIkxpc3RcIn0saT17Li4uciwuLi5vfTt2YXIgYTshZnVuY3Rpb24oZSl7ZS5QcmltYXJ5PVwicHJpbWFyeVwiLGUuU2Vjb25kYXJ5PVwic2Vjb25kYXJ5XCIsZS5UZXh0T25seT1cInRleHRPbmx5XCJ9KGF8fChhPXt9KSl9LDI1Mjg6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24ucih0KSxuLmQodCx7QXBwTWFuaWZlc3RUeXBlOigpPT5pLkwsU3RvcmVmcm9udFRlbXBsYXRlOigpPT5pLlQsZGVyZWdpc3RlcjooKT0+QyxoaWRlOigpPT55LHJlZ2lzdGVyOigpPT5tLHNob3c6KCk9Pnd9KTt2YXIgcj1uKDY1MzIpLG89big1MTUwKSxpPW4oNjExNCksYT1uKDY2NzgpLGw9big3Mjc4KSxzPW4oMTIxKSxjPW4oNTQzOCksdT1uKDMyNjQpO2xldCBmPSExO2FzeW5jIGZ1bmN0aW9uIGQoZSx0LG4pe2NvbnN0IHI9YXdhaXQoMCxvLkRtKSgpO3RyeXtyZXR1cm4gYXdhaXQgci5kaXNwYXRjaChlLmFjdGlvbixlLnBheWxvYWQpfWNhdGNoKG8pe2lmKG8gaW5zdGFuY2VvZiBFcnJvciYmLTEhPT1vLnRvU3RyaW5nKCkuaW5kZXhPZihlLmFjdGlvbikpcmV0dXJuIGZ8fGNvbnNvbGUud2FybihcIllvdSBhcmUgdXNpbmcgYSBuZXdlciB2ZXJzaW9uIG9mIHRoZSBXb3Jrc3BhY2UgY2xpZW50IGxpYnJhcnkgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50bHkgcnVubmluZyB3b3Jrc3BhY2UgcHJvdmlkZXIuIFBsZWFzZSB1cGdyYWRlIHRoZSBXb3Jrc3BhY2UgdG8gdmVyc2lvbiA5LjAgb3IgbGF0ZXIuXCIpLGY9ITAsYXdhaXQgci5kaXNwYXRjaCh0LmFjdGlvbix0LnBheWxvYWQpLG47dGhyb3cgb319Y29uc3QgcD1uZXcgdS5sVChcInN0b3JlZnJvbnRcIiksaD1hc3luYyBlPT57YXdhaXQoMCxjLkhoKShmaW4ubWUuaWRlbnRpdHkpO2NvbnN0IHQ9YXdhaXQoMCxvLnhaKSgpO3JldHVybiBwLmFzc2VydE5vdEFscmVhZHlSZWdpc3RlcmVkKGUuaWQpLHAuc2V0UHJvdmlkZXIoZSksKGU9PntlLnN0b3JlZnJvbnRDaGFubmVsQWN0aW9uc1JlZ2lzdGVyZWR8fChlLnN0b3JlZnJvbnRDaGFubmVsQWN0aW9uc1JlZ2lzdGVyZWQ9ITAsZS5yZWdpc3RlcihcImdldC1zdG9yZWZyb250LXByb3ZpZGVyLWFwcHNcIiwoZT0+cC5nZXRQcm92aWRlck9yRmFpbChlKS5nZXRBcHBzKCkpKSxlLnJlZ2lzdGVyKFwiZ2V0LXN0b3JlZnJvbnQtcHJvdmlkZXItZm9vdGVyXCIsKGU9PnAuZ2V0UHJvdmlkZXJPckZhaWwoZSkuZ2V0Rm9vdGVyKCkpKSxlLnJlZ2lzdGVyKFwiZ2V0LXN0b3JlZnJvbnQtcHJvdmlkZXItbGFuZGluZy1wYWdlXCIsKGU9PnAuZ2V0UHJvdmlkZXJPckZhaWwoZSkuZ2V0TGFuZGluZ1BhZ2UoKSkpLGUucmVnaXN0ZXIoXCJnZXQtc3RvcmVmcm9udC1wcm92aWRlci1uYXZpZ2F0aW9uXCIsKGU9PnAuZ2V0UHJvdmlkZXJPckZhaWwoZSkuZ2V0TmF2aWdhdGlvbigpKSksZS5yZWdpc3RlcihcImxhdW5jaC1zdG9yZWZyb250LXByb3ZpZGVyLWFwcFwiLCgoe2lkOmUsYXBwOnR9KT0+cC5nZXRQcm92aWRlck9yRmFpbChlKS5sYXVuY2hBcHAodCkpKSl9KSh0KSxlLmNsaWVudEFQSVZlcnNpb249YS51MCxkKHthY3Rpb246XCJyZWdpc3Rlci1wcm92aWRlclwiLHBheWxvYWQ6e3Byb3ZpZGVyVHlwZTpcInN0b3JlZnJvbnRcIixpbmZvOmV9fSx7YWN0aW9uOlwicmVnaXN0ZXItc3RvcmVmcm9udC1wcm92aWRlclwiLHBheWxvYWQ6ZX0se3dvcmtzcGFjZVZlcnNpb246XCJ1bmtub3duXCJ9KX07dmFyIGc9bigyNjkzKTtsZXQgdjtjb25zdCBtPWFzeW5jIGU9PnsoMCxnLkUpKFwic3RvcmVcIixzLm5kKTtjb25zdCB0PWF3YWl0IGgoZSk7cmV0dXJuIHY9bmV3IFByb21pc2UoKChuLGkpPT57dHJ5eygwLHIuZDkpKHthbGxvd2VkOiEwLGNvbXBvbmVudFZlcnNpb246dD8ud29ya3NwYWNlVmVyc2lvbn0pLGEudTAsbih7Y2xpZW50QVBJVmVyc2lvbjphLnUwLHdvcmtzcGFjZVZlcnNpb246dD8ud29ya3NwYWNlVmVyc2lvbj8/XCJcIix1cGRhdGVBcHBDYXJkQnV0dG9uczphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCgwLG8uWGwpKCk7YXdhaXQgbi5kaXNwYXRjaChcInVwZGF0ZS1hcHAtY2FyZC1idXR0b24tY29uZmlnXCIsey4uLnQsaWQ6ZS5pZCx0aXRsZTplLnRpdGxlLGljb246ZS5pY29uLHBsYXRmb3JtSWRlbnRpdHk6ZmluLm1lLmlkZW50aXR5fSl9fSl9Y2F0Y2goZSl7KDAsci5kOSkoe2FsbG93ZWQ6ITEscmVqZWN0aW9uQ29kZTplIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOlwidW5rbm93blwifSksaShlKX1maW5hbGx5e2wuWi5tYXJrRW5kQW5kTWVhc3VyZShcInN0b3JlLXJlZ2lzdHJhdGlvblwiKX19KSksdn0sQz1hc3luYyBlPT4oYXdhaXQgdixwLmFzc2VydFJlZ2lzdGVyZWQoZSkscC5kZWxldGVQcm92aWRlcihlKSxhd2FpdCgwLG8uYUIpKCksZCh7YWN0aW9uOlwiZGVyZWdpc3Rlci1wcm92aWRlclwiLHBheWxvYWQ6e3Byb3ZpZGVyVHlwZTpcInN0b3JlZnJvbnRcIixpZDplfX0se2FjdGlvbjpcImRlcmVnaXN0ZXItc3RvcmVmcm9udC1wcm92aWRlclwiLHBheWxvYWQ6ZX0pKSx5PWFzeW5jKCk9Pihhd2FpdCB2LGF3YWl0KDAsby5hQikoKSxkKHthY3Rpb246XCJoaWRlLXByb3ZpZGVyLXdpbmRvd1wiLHBheWxvYWQ6e3Byb3ZpZGVyVHlwZTpcInN0b3JlZnJvbnRcIn19LHthY3Rpb246XCJoaWRlLXN0b3JlZnJvbnRcIn0pKSx3PWFzeW5jKCk9PihsLloubWFya1N0YXJ0KFwic3RvcmUtc2hvd1wiKSxhd2FpdCB2LGF3YWl0KDAsby5hQikoKSxkKHthY3Rpb246XCJzaG93LXByb3ZpZGVyLXdpbmRvd1wiLHBheWxvYWQ6e3Byb3ZpZGVyVHlwZTpcInN0b3JlZnJvbnRcIn19LHthY3Rpb246XCJzaG93LXN0b3JlZnJvbnRcIn0pKX0sMzQyMDooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1ZSOigpPT5jLGhkOigpPT5sfSk7dmFyIHI9big4MzExKSxvPW4oNTkxMiksaT1uKDk2MTApLGE9big1MTUwKTthc3luYyBmdW5jdGlvbiBsKCl7cmV0dXJuKGF3YWl0KDAsYS5EbSkoKSkuZGlzcGF0Y2goXCJnZXQtbGVnYWN5LXBhZ2VzXCIsdm9pZCAwKX1jb25zdCBzPWFzeW5jIGU9Pih7Li4uZSxsYXlvdXREZXRhaWxzOnttYWNoaW5lSWQ6YXdhaXQoMCxvLiR3KSgpLG1hY2hpbmVOYW1lOigwLG8uWDUpKCl9fSksYz1hc3luYyBlPT57Y29uc3QgdD1hd2FpdChhc3luYyhlLHQpPT4oe3BhZ2VJZDooMCxpLkgpKCksdGl0bGU6ZSxsYXlvdXQ6YXdhaXQgcyh0KSxpc1JlYWRPbmx5OiExfSkpKGUudGl0bGUsKDAsci5kRykoZS5sYXlvdXQpKTtyZXR1cm4gZS5wYW5lbHMmJih0LnBhbmVscz1lLnBhbmVscy5tYXAoKGU9Pih7Li4uZSx2aWV3T3B0aW9uczooMCxyLlpTKShlLnZpZXdPcHRpb25zKX0pKSkpLHsuLi5lLC4uLnR9fX0sNjQ5NTooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIHI7IWZ1bmN0aW9uKGUpe2UuTGVmdD1cIkxlZnRcIixlLlJpZ2h0PVwiUmlnaHRcIixlLlRvcD1cIlRvcFwiLGUuQm90dG9tPVwiQm90dG9tXCJ9KHJ8fChyPXt9KSl9LDExMjc6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtEbTooKT0+YSxiJDooKT0+dSx5ejooKT0+Zn0pO3ZhciByPW4oOTExNyk7bigxMjEpO2NvbnN0IG89KGUsdCk9PnQ/YCR7dH0tJHtlLnV1aWR9LSR7ZS5uYW1lfWA6YF9fYnJvd3Nlcl93aW5kb3dfXy0ke2UudXVpZH0tJHtlLm5hbWV9YCxpPW5ldyBNYXAsYT0oZSx0KT0+e2NvbnN0IG49byhlLHQpO3JldHVybiBpLmhhcyhuKXx8aS5zZXQobiwoMCxyLlopKG4pKSxpLmdldChuKSgpfTt2YXIgbCxzLGMsdTshZnVuY3Rpb24oZSl7ZS5DbG9zZUJyb3dzZXJXaW5kb3c9XCJjbG9zZS1icm93c2VyLXdpbmRvd1wiLGUuUXVpdFBsYXRmb3JtPVwicXVpdC1wbGF0Zm9ybVwiLGUuQ2xvc2VQYWdlPVwiY2xvc2UtcGFnZVwiLGUuQWRkVG9DaGFubmVsPVwiYWRkLXRvLWNoYW5uZWxcIixlLlJlbW92ZUZyb21DaGFubmVsPVwicmVtb3ZlLWZyb20tY2hhbm5lbFwiLGUuT3BlblNhdmVNb2RhbEludGVybmFsPVwib3Blbi1zYXZlLW1vZGFsLWludGVybmFsXCIsZS5EdXBsaWNhdGVQYWdlPVwiZHVwbGljYXRlLXBhZ2VcIixlLlNldFNlbGVjdGVkU2NoZW1lPVwic2V0LXNlbGVjdGVkLXNjaGVtZVwiLGUuU2hvd0Jyb3dzZXJJbmRpY2F0b3I9XCJzaG93LWJyb3dzZXItaW5kaWNhdG9yXCIsZS5TZXRTZWxlY3RlZExhbmd1YWdlPVwic2V0LXNlbGVjdGVkLWxhbmd1YWdlXCIsZS5SZWZyZXNoQm9va21hcmtzSW50ZXJuYWw9XCJyZWZyZXNoLWJvb2ttYXJrc1wifShsfHwobD17fSkpLGZ1bmN0aW9uKGUpe2UuR2V0UGFnZXM9XCJnZXQtcGFnZXNcIixlLkdldEFjdGl2ZVBhZ2VGb3JXaW5kb3c9XCJnZXQtYWN0aXZlLXBhZ2UtZm9yLXdpbmRvd1wiLGUuQXR0YWNoUGFnZXNUb1dpbmRvdz1cImF0dGFjaC1wYWdlcy10by13aW5kb3dcIixlLkRldGFjaFBhZ2VzRnJvbVdpbmRvdz1cImRldGFjaC1wYWdlcy1mcm9tLXdpbmRvd1wiLGUuU2V0QWN0aXZlUGFnZUZvcldpbmRvdz1cInNldC1hY3RpdmUtcGFnZS1mb3Itd2luZG93XCIsZS5SZW5hbWVQYWdlPVwicmVuYW1lLXBhZ2VcIixlLlJlb3JkZXJQYWdlc0ZvcldpbmRvdz1cInJlb3JkZXItcGFnZXMtZm9yLXdpbmRvd1wiLGUuVXBkYXRlUGFnZUZvcldpbmRvdz1cInVwZGF0ZS1wYWdlLWZvci13aW5kb3dcIixlLlVwZGF0ZVBhZ2VzV2luZG93T3B0aW9ucz1cInVwZGF0ZS1wYWdlcy13aW5kb3ctb3B0aW9uc1wiLGUuSXNEZXRhY2hpbmdQYWdlcz1cImlzLWRldGFjaGluZy1wYWdlc1wiLGUuSXNBY3RpdmVQYWdlQ2hhbmdpbmc9XCJpcy1hY3RpdmUtcGFnZS1jaGFuZ2luZ1wifShzfHwocz17fSkpLGZ1bmN0aW9uKGUpe2UuR2V0QXBwcz1cImdldC1hcHBzXCIsZS5HZXRDdXJhdGVkQ29udGVudD1cImdldC1jdXJhdGVkLWNvbnRlbnRcIixlLkdldFJlY2VudGx5VmlzaXRlZD1cImdldC1yZWNlbnRseS12aXNpdGVkXCJ9KGN8fChjPXt9KSksZnVuY3Rpb24oZSl7ZS5DcmVhdGVCb29rbWFya05vZGU9XCJjcmVhdGUtYm9va21hcmstbm9kZVwiLGUuR2V0Qm9va21hcmtOb2RlPVwiZ2V0LWJvb2ttYXJrLW5vZGVcIixlLlNlYXJjaEJvb2ttYXJrTm9kZXM9XCJzZWFyY2gtYm9va21hcmstbm9kZXNcIixlLlVwZGF0ZUJvb2ttYXJrTm9kZT1cInVwZGF0ZS1ib29rbWFyay1ub2RlXCIsZS5EZWxldGVCb29rbWFya05vZGU9XCJkZWxldGUtYm9va21hcmstbm9kZVwifSh1fHwodT17fSkpO2NvbnN0IGY9ey4uLmwsLi4uc319LDU0Mzg6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByO24uZCh0LHtIaDooKT0+aSxmbjooKT0+cixqNzooKT0+YSx4cDooKT0+bH0pLGZ1bmN0aW9uKGUpe2UuTGF1bmNoQXBwPVwibGF1bmNoQXBwXCIsZS5TYXZlUGFnZT1cInNhdmVQYWdlXCIsZS5HZXRTYXZlZFBhZ2U9XCJnZXRTYXZlZFBhZ2VcIixlLkNyZWF0ZVNhdmVkUGFnZT1cImNyZWF0ZVNhdmVkUGFnZVwiLGUuVXBkYXRlU2F2ZWRQYWdlPVwidXBkYXRlU2F2ZWRQYWdlXCIsZS5EZWxldGVTYXZlZFBhZ2U9XCJkZWxldGVTYXZlZFBhZ2VcIixlLkdldFNhdmVkUGFnZXM9XCJnZXRTYXZlZFBhZ2VzXCIsZS5DcmVhdGVTYXZlZFBhZ2VJbnRlcm5hbD1cImNyZWF0ZVNhdmVkUGFnZUludGVybmFsXCIsZS5VcGRhdGVTYXZlZFBhZ2VJbnRlcm5hbD1cInVwZGF0ZVNhdmVkUGFnZUludGVybmFsXCIsZS5EZWxldGVTYXZlZFBhZ2VJbnRlcm5hbD1cImRlbGV0ZVNhdmVkUGFnZUludGVybmFsXCIsZS5VcGRhdGVQYWdlRm9yV2luZG93PVwidXBkYXRlUGFnZUZvcldpbmRvd1wiLGUuQXR0YWNoUGFnZXNUb1dpbmRvdz1cImF0dGFjaFBhZ2VzVG9XaW5kb3dcIixlLkRldGFjaFBhZ2VzRnJvbVdpbmRvdz1cImRldGFjaFBhZ2VzRnJvbVdpbmRvd1wiLGUuUmVvcmRlclBhZ2VzRm9yV2luZG93PVwicmVvcmRlclBhZ2VzRm9yV2luZG93XCIsZS5TZXRBY3RpdmVQYWdlPVwic2V0QWN0aXZlUGFnZVwiLGUuQWRkUGFnZT1cImFkZFBhZ2VcIixlLkFkZERlZmF1bHRQYWdlPVwiYWRkRGVmYXVsdFBhZ2VcIixlLkdldEFsbEF0dGFjaGVkUGFnZXM9XCJnZXRBbGxBdHRhY2hlZFBhZ2VzXCIsZS5HZXRBY3RpdmVQYWdlSWRGb3JXaW5kb3c9XCJnZXRBY3RpdmVQYWdlSWRGb3JXaW5kb3dcIixlLkdldFBhZ2VzRm9yV2luZG93PVwiZ2V0UGFnZXNGb3JXaW5kb3dcIixlLkdldFBhZ2VGb3JXaW5kb3c9XCJnZXRQYWdlRm9yV2luZG93XCIsZS5HZXRTYXZlZFBhZ2VNZXRhZGF0YT1cImdldFNhdmVkUGFnZU1ldGFkYXRhXCIsZS5HZXRVbmlxdWVQYWdlVGl0bGU9XCJnZXRVbmlxdWVQYWdlVGl0bGVcIixlLkdldExhc3RGb2N1c2VkQnJvd3NlcldpbmRvdz1cImdldExhc3RGb2N1c2VkQnJvd3NlcldpbmRvd1wiLGUuR2V0VGhlbWVzPVwiZ2V0VGhlbWVzXCIsZS5HZXRTZWxlY3RlZFNjaGVtZT1cImdldFNlbGVjdGVkU2NoZW1lXCIsZS5TZXRTZWxlY3RlZFNjaGVtZT1cInNldFNlbGVjdGVkU2NoZW1lXCIsZS5PcGVuR2xvYmFsQ29udGV4dE1lbnVJbnRlcm5hbD1cIm9wZW5HbG9iYWxDb250ZXh0TWVudUludGVybmFsXCIsZS5PcGVuVmlld1RhYkNvbnRleHRNZW51SW50ZXJuYWw9XCJvcGVuVmlld1RhYkNvbnRleHRNZW51SW50ZXJuYWxcIixlLk9wZW5QYWdlVGFiQ29udGV4dE1lbnVJbnRlcm5hbD1cIm9wZW5QYWdlVGFiQ29udGV4dE1lbnVJbnRlcm5hbFwiLGUuT3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsPVwib3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsXCIsZS5JbnZva2VDdXN0b21BY3Rpb25JbnRlcm5hbD1cImludm9rZUN1c3RvbUFjdGlvbkludGVybmFsXCIsZS5SZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nSW50ZXJuYWw9XCJyZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nSW50ZXJuYWxcIixlLkdldFNhdmVkV29ya3NwYWNlPVwiZ2V0U2F2ZWRXb3Jrc3BhY2VcIixlLkNyZWF0ZVNhdmVkV29ya3NwYWNlPVwiY3JlYXRlU2F2ZWRXb3Jrc3BhY2VcIixlLlVwZGF0ZVNhdmVkV29ya3NwYWNlPVwidXBkYXRlU2F2ZWRXb3Jrc3BhY2VcIixlLkRlbGV0ZVNhdmVkV29ya3NwYWNlPVwiZGVsZXRlU2F2ZWRXb3Jrc3BhY2VcIixlLkdldFNhdmVkV29ya3NwYWNlcz1cImdldFNhdmVkV29ya3NwYWNlc1wiLGUuU2F2ZVdvcmtzcGFjZT1cInNhdmVXb3Jrc3BhY2VcIixlLkdldEN1cnJlbnRXb3Jrc3BhY2U9XCJnZXRDdXJyZW50V29ya3NwYWNlXCIsZS5BcHBseVdvcmtzcGFjZT1cImFwcGx5V29ya3NwYWNlXCIsZS5TZXRBY3RpdmVXb3Jrc3BhY2U9XCJzZXRBY3RpdmVXb3Jrc3BhY2VcIixlLklzQnJvd3NlckluaXRpYWxpemVkPVwiaXNCcm93c2VySW5pdGlhbGl6ZWRcIixlLkFuYWx5dGljcz1cImFuYWx5dGljc0ludGVybmFsXCIsZS5HZXRMYW5ndWFnZT1cImdldExhbmd1YWdlXCIsZS5HZXRMYW5ndWFnZVJlc291cmNlc0ludGVybmFsPVwiZ2V0TGFuZ3VhZ2VSZXNvdXJjZXNJbnRlcm5hbFwiLGUuU2V0TGFuZ3VhZ2U9XCJzZXRMYW5ndWFnZVwiLGUuR2V0RG9ja1Byb3ZpZGVyQ29uZmlnPVwiZ2V0RG9ja1Byb3ZpZGVyQ29uZmlnXCIsZS5TYXZlRG9ja1Byb3ZpZGVyQ29uZmlnPVwic2F2ZURvY2tQcm92aWRlckNvbmZpZ1wiLGUuSGFuZGxlU2F2ZU1vZGFsT25QYWdlQ2xvc2U9XCJoYW5kbGVTYXZlTW9kYWxPblBhZ2VDbG9zZVwiLGUuU2hvdWxkUGFnZUNsb3NlPVwic2hvdWxkUGFnZUNsb3NlXCIsZS5TaG91bGRXaW5kb3dDbG9zZT1cInNob3VsZFdpbmRvd0Nsb3NlXCIsZS5Db3B5UGFnZT1cImNvcHlQYWdlXCIsZS5IYW5kbGVQYWdlQ2hhbmdlcz1cImhhbmRsZVBhZ2VDaGFuZ2VzXCIsZS5NYXJrVW5zYXZlZFBhZ2VzQXNTYXZlZEludGVybmFsPVwibWFya1Vuc2F2ZWRQYWdlc0FzU2F2ZWRJbnRlcm5hbFwiLGUuVHJhY2tSZW1vdmVkVGFiSW50ZXJuYWw9XCJ0cmFja1JlbW92ZWRUYWJJbnRlcm5hbFwiLGUuUmVzdG9yZVJlbW92ZWRUYWJJbnRlcm5hbD1cInJlc3RvcmVSZW1vdmVkVGFiSW50ZXJuYWxcIixlLlRyYWNrVmlzaXRlZFNpdGVJbnRlcm5hbD1cInRyYWNrVmlzaXRlZFNpdGVJbnRlcm5hbFwiLGUuR2V0UmVjZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbD1cImdldFJlY2VudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWxcIixlLkdldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbD1cImdldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbFwiLGUuU2VhcmNoU2l0ZXNJbnRlcm5hbD1cInNlYXJjaFNpdGVzSW50ZXJuYWxcIixlLkdldEN1cmF0ZWRDb250ZW50SW50ZXJuYWw9XCJnZXRDdXJhdGVkQ29udGVudEludGVybmFsXCIsZS5IYW5kbGVSZXF1ZXN0TmF2aWdhdGlvbkludGVybmFsPVwiaGFuZGxlUmVxdWVzdE5hdmlnYXRpb25JbnRlcm5hbFwiLGUuUmVmcmVzaEJvb2ttYXJrc0ludGVybmFsPVwicmVmcmVzaEJvb2ttYXJrc0ludGVybmFsXCIsZS5HZXROb3RpZmljYXRpb25zQ29uZmlnPVwiZ2V0Tm90aWZpY2F0aW9uc0NvbmZpZ1wifShyfHwocj17fSkpO2NvbnN0IG89YXN5bmMgZT0+ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmdldENsaWVudCgpLGk9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgbyhlKSxuPVwiVGFyZ2V0IGlzIG5vdCBhIFdvcmtzcGFjZSBQbGF0Zm9ybS4gVGFyZ2V0IG11c3QgY2FsbCBXb3Jrc3BhY2VQbGF0Zm9ybS5pbml0XCI7bGV0IHI7dHJ5e3I9YXdhaXQgdC5kaXNwYXRjaChcImlzV29ya3NwYWNlUGxhdGZvcm1cIil9Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKG4pfWlmKFwiYm9vbGVhblwiPT10eXBlb2YgciYmcilyZXR1cm4gY29uc29sZS53YXJuKFwiWW91IGFyZSB1c2luZyBhbiBvbGRlciB2ZXJzaW9uIG9mIHRoZSB3b3Jrc3BhY2UgcGxhdGZvcm0uIFBsZWFzZSB1cGRhdGUgeW91ciB3b3Jrc3BhY2UgcGxhdGZvcm0uXCIpLHI7aWYoXCJvYmplY3RcIj09dHlwZW9mIHImJnIuaXNXb3Jrc3BhY2VQbGF0Zm9ybSlyZXR1cm4gcjt0aHJvdyBuZXcgRXJyb3Iobil9LGE9YXN5bmMgZT0+KGF3YWl0IGkoZSksbyhlKSksbD1hc3luYyBlPT57Y29uc3QgdD1hd2FpdCBpKGUpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0JiYhMCE9PXQ/LmlzQnJvd3NlckluaXRpYWxpemVkKXRocm93IG5ldyBFcnJvcihcIlRhcmdldCBpcyBub3QgYSBCcm93c2VyLWVuYWJsZWQgV29ya3NwYWNlIFBsYXRmb3JtLlwiKTtyZXR1cm4gbyhlKX19LDUxNTA6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtEbTooKT0+cyxWRDooKT0+dSxYbDooKT0+cCxhQjooKT0+ZCx4WjooKT0+aH0pO3ZhciByPW4oOTExNyksbz1uKDY2NzgpLGk9bigxMjEpLGE9big3MDQ2KTtjb25zdCBsPSgwLHIuWikoXCJfX29mX3dvcmtzcGFjZV9wcm90b2NvbF9fXCIpLHM9bCxjPWwsdT0oMCxyLlopKGEuUXgpLGY9ZT0+e2NvbnN0IHQ9bmV3IFVSTChlKTtyZXR1cm4gdC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwiaXNMYXVuY2hlZFZpYUxpYlwiLFwidHJ1ZVwiKSx0LnRvU3RyaW5nKCl9LGQ9YXN5bmMoKT0+e2lmKCFhd2FpdCgwLGkuSlYpKGkuaVcpKXtpZihvLlpLfHwtMT09PW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIldpblwiKSlyZXR1cm4gdm9pZCBhd2FpdCBmaW4uQXBwbGljYXRpb24uc3RhcnRGcm9tTWFuaWZlc3QoZihvLmFXKSk7YXdhaXQgZmluLlN5c3RlbS5vcGVuVXJsV2l0aEJyb3dzZXIoZihvLkdYKSl9fSxwPWFzeW5jKCk9Pihhd2FpdCBkKCkscygpKSxoPWFzeW5jKCk9Pihhd2FpdCBkKCksYygpKX0sNzA0NjooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1F4OigpPT5yLHcxOigpPT5pfSk7Y29uc3Qgcj1cIl9fc2VhcmNoLW9wZW5maW4tYnJvd3Nlci1ob21lLXRvcGljX19cIjt2YXIgbyxpOyFmdW5jdGlvbihlKXtlLkZldGNoaW5nPVwiZmV0Y2hpbmdcIixlLkZldGNoZWQ9XCJmZXRjaGVkXCIsZS5Db21wbGV0ZT1cImNvbXBsZXRlXCJ9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkluaXRpYWw9MF09XCJJbml0aWFsXCIsZVtlLk9wZW49MV09XCJPcGVuXCIsZVtlLkNsb3NlPTJdPVwiQ2xvc2VcIn0oaXx8KGk9e30pKX0sMTY0NjooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse2U6KCk9Pm99KTt2YXIgcj1uKDg0MjMpO2NvbnN0IG89ZT0+e2NvbnN0IHQ9ZmluLlBsYXRmb3JtLkxheW91dC53cmFwU3luYyhlKTtyZXR1cm57c2hvdzphc3luYygpPT57Y29uc3Qgbj1hd2FpdCB0LmdldENvbmZpZygpLHtzZXR0aW5nczpvLGRpbWVuc2lvbnM6aX09bixhPWF3YWl0KDAsci5ZUSkoZSk7YXdhaXQgdC5yZXBsYWNlKHsuLi5uLHNldHRpbmdzOnsuLi5vLGhhc0hlYWRlcnM6ITAscmVvcmRlckVuYWJsZWQ6ITB9LGRpbWVuc2lvbnM6ey4uLmksaGVhZGVySGVpZ2h0OmE/Mjg6MzB9fSl9LGhpZGU6YXN5bmMgZT0+e2NvbnN0IG49YXdhaXQgdC5nZXRDb25maWcoKSx7c2V0dGluZ3M6cixkaW1lbnNpb25zOm99PWF3YWl0IG47YXdhaXQgdC5yZXBsYWNlKHsuLi5uLHNldHRpbmdzOnsuLi5yLGhhc0hlYWRlcnM6ITEscmVvcmRlckVuYWJsZWQ6ZT8uc2V0dGluZ3M/LnJlb3JkZXJFbmFibGVkPz8hMX0sZGltZW5zaW9uczp7Li4ubyxoZWFkZXJIZWlnaHQ6MH19KX0saXNTaG93aW5nVGFiczphc3luYygpPT57dHJ5e2NvbnN0IGU9YXdhaXQgdC5nZXRDb25maWcoKSx7c2V0dGluZ3M6bn09YXdhaXQgZTtyZXR1cm4gbi5oYXNIZWFkZXJzfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLmVycm9yKFwiZmFpbGVkIHRvIGdldCBsYXlvdXQgY29uZmlnOiBcIixlKSwhMH19fX19LDEwNjU6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByPW4oNTMwNCk7bigxMjEpLG4oODYzNiksbig3MTAwKSxuKDUxNTApLG4oNTQzOCk7Y29uc3Qgbz17W3IuUGFsZXR0ZS5icmFuZFByaW1hcnldOlwiIzBBNzZEM1wiLFtyLlBhbGV0dGUuc3RhdHVzU3VjY2Vzc106ci5Db2xvci5mdW5jdGlvbmFsMSxbci5QYWxldHRlLnN0YXR1c1dhcm5pbmddOnIuQ29sb3IuZnVuY3Rpb25hbDEwLFtyLlBhbGV0dGUuc3RhdHVzQ3JpdGljYWxdOnIuQ29sb3IuZnVuY3Rpb25hbDcsW3IuUGFsZXR0ZS5zdGF0dXNBY3RpdmVdOnIuQ29sb3IuZnVuY3Rpb25hbDMsW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDFdOlwiIzBBNzZEM1wiLFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQyXTpcIiMwMDAwMDBcIixbci5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kM106XCIjMDAwMDAwXCIsW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDRdOlwiIzAwMDAwMFwiLFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQ1XTpcIiMwMDAwMDBcIn0saT17Li4ubyxbci5QYWxldHRlLmJhY2tncm91bmQxXTpyLkNvbG9yLndoaXRlLFtyLlBhbGV0dGUuYmFja2dyb3VuZDJdOnIuQ29sb3IubGlnaHRHcmF5MSxbci5QYWxldHRlLmJhY2tncm91bmQzXTpyLkNvbG9yLmxpZ2h0R3JheTIsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNF06ci5Db2xvci5saWdodEdyYXkzLFtyLlBhbGV0dGUuYmFja2dyb3VuZDVdOnIuQ29sb3IubGlnaHRHcmF5NCxbci5QYWxldHRlLmJhY2tncm91bmQ2XTpyLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS5icmFuZFNlY29uZGFyeV06ci5Db2xvci5saWdodEdyYXk0LFtyLlBhbGV0dGUuaW5wdXRCYWNrZ3JvdW5kXTpyLkNvbG9yLmxpZ2h0R3JheTMsW3IuUGFsZXR0ZS5pbnB1dENvbG9yXTpyLkNvbG9yLmRhcmtHcmF5NSxbci5QYWxldHRlLmlucHV0UGxhY2Vob2xkZXJdOnIuQ29sb3IuZGFya0dyYXkyLFtyLlBhbGV0dGUuaW5wdXREaXNhYmxlZF06ci5Db2xvci5uZXV0cmFsR3JheSxbci5QYWxldHRlLmlucHV0Rm9jdXNlZF06ci5Db2xvci5saWdodEdyYXk1LFtyLlBhbGV0dGUuaW5wdXRCb3JkZXJdOnIuQ29sb3IubmV1dHJhbEdyYXksW3IuUGFsZXR0ZS50ZXh0RGVmYXVsdF06ci5Db2xvci5kYXJrR3JheTUsW3IuUGFsZXR0ZS50ZXh0SGVscF06ci5Db2xvci5kYXJrR3JheTMsW3IuUGFsZXR0ZS50ZXh0SW5hY3RpdmVdOnIuQ29sb3IubmV1dHJhbEdyYXl9LGE9ey4uLm8sW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kMV06ci5Db2xvci5kYXJrR3JheTYsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kMl06ci5Db2xvci5kYXJrR3JheTUsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kM106ci5Db2xvci5kYXJrR3JheTQsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNF06ci5Db2xvci5kYXJrR3JheTMsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNV06ci5Db2xvci5kYXJrR3JheTIsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNl06ci5Db2xvci5kYXJrR3JheTEsW3IuUGFsZXR0ZS5icmFuZFNlY29uZGFyeV06ci5Db2xvci5kYXJrR3JheTIsW3IuUGFsZXR0ZS5pbnB1dEJhY2tncm91bmRdOnIuQ29sb3IuZGFya0dyYXkxLFtyLlBhbGV0dGUuaW5wdXRDb2xvcl06ci5Db2xvci53aGl0ZSxbci5QYWxldHRlLmlucHV0UGxhY2Vob2xkZXJdOnIuQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLmlucHV0RGlzYWJsZWRdOnIuQ29sb3IubmV1dHJhbEdyYXksW3IuUGFsZXR0ZS5pbnB1dEZvY3VzZWRdOnIuQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLmlucHV0Qm9yZGVyXTpyLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUudGV4dERlZmF1bHRdOnIuQ29sb3Iud2hpdGUsW3IuUGFsZXR0ZS50ZXh0SGVscF06ci5Db2xvci5saWdodEdyYXk1LFtyLlBhbGV0dGUudGV4dEluYWN0aXZlXTpyLkNvbG9yLm5ldXRyYWxHcmF5fTtyLkNvbG9yLmxpZ2h0R3JheTQsci5Db2xvci5kYXJrR3JheTUsci5Db2xvci5kYXJrR3JheTIsci5Db2xvci5kYXJrR3JheTV9LDU4MDY6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtEOTooKT0+YyxUWjooKT0+dSxxOTooKT0+cn0pO3ZhciByLG8saT1uKDY2NzgpOyFmdW5jdGlvbihlKXtlLldvcmtzcGFjZT1cIm9wZW5maW4td29ya3NwYWNlXCIsZS5PbGRXb3Jrc3BhY2U9XCJvcGVuZmluLWJyb3dzZXJcIn0ocnx8KHI9e30pKSxmdW5jdGlvbihlKXtlLkZpblByb3RvY29sPVwiZmluLXByb3RvY29sXCJ9KG98fChvPXt9KSk7Y29uc3QgYT17dXVpZDppLkFCfSxsPXt1dWlkOnIuV29ya3NwYWNlfSxzPWU9PntpZighaS5zUyl0aHJvdyBuZXcgRXJyb3IoXCJnZXRBcHBsaWNhdGlvbiBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbiBPcGVuRmluIGVudi4gQXZvaWQgdXNpbmcgdGhpcyBkdXJpbmcgcHJlLXJlbmRlcmluZy5cIik7cmV0dXJuIGZpbi5BcHBsaWNhdGlvbi53cmFwU3luYyhlKX0sYz0oKT0+cyhhKSx1PSgpPT5zKGwpfSw5MTE3OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7WjooKT0+aX0pO3ZhciByPW4oNjY3OCk7Y29uc3Qgbz1yLkF4JiZcImNvbXBsZXRlXCIhPT1kb2N1bWVudC5yZWFkeVN0YXRlJiZuZXcgUHJvbWlzZSgoZT0+ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInJlYWR5c3RhdGVjaGFuZ2VcIiwoKCk9PntcImNvbXBsZXRlXCI9PT1kb2N1bWVudC5yZWFkeVN0YXRlJiZlKCl9KSkpKTtmdW5jdGlvbiBpKGUpe2xldCB0O2NvbnN0IG49bmV3IFNldDtyZXR1cm4oKT0+e2lmKCFyLnNTKXRocm93IG5ldyBFcnJvcihcImdldENoYW5uZWxDbGllbnQgY2Fubm90IGJlIHVzZWQgb3V0c2lkZSBhbiBPcGVuRmluIGVudi4gQXZvaWQgdXNpbmcgdGhpcyBtZXRob2QgZHVyaW5nIHByZS1yZW5kZXJpbmcuXCIpO3JldHVybiB0fHwodD0oYXN5bmMoKT0+e2F3YWl0IG87Y29uc3QgaT17Y2xpZW50QVBJVmVyc2lvbjpyLnUwfSxhPWF3YWl0IGZpbi5JbnRlckFwcGxpY2F0aW9uQnVzLkNoYW5uZWwuY29ubmVjdChlLHtwYXlsb2FkOml9KTtyZXR1cm4gYS5vbkRpc2Nvbm5lY3Rpb24oKGFzeW5jKCk9PntuLmZvckVhY2goKGU9PmUoKSkpLG4uY2xlYXIoKSxjb25zb2xlLndhcm4oYGRpc2Nvbm5lY3RlZCBmcm9tIGNoYW5uZWwgcHJvdmlkZXIgJHtlfWApLHQ9dm9pZCAwfSkpLGF9KSgpLnRoZW4oKGU9PihlLmFkZERpc2Nvbm5lY3Rpb25MaXN0ZW5lcj1lPT57bi5hZGQoZSl9LGUpKSkuY2F0Y2goKG49Pnt0aHJvdyB0PXZvaWQgMCxuZXcgRXJyb3IoYGZhaWxlZCB0byBjb25uZWN0IHRvIGNoYW5uZWwgcHJvdmlkZXIgJHtlfTogJHtufWApfSkpKSx0fX19LDg0MjM6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtZUTooKT0+cn0pO24oNjAwNSksbigxMjEpO2NvbnN0IHI9YXN5bmMgZT0+e2NvbnN0IHQ9ZT9maW4uV2luZG93LndyYXBTeW5jKGUpOmZpbi5XaW5kb3cuZ2V0Q3VycmVudFN5bmMoKSxuPWF3YWl0IHQuZ2V0T3B0aW9ucygpO3JldHVybiBuLndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlJiZcImVudGVycHJpc2VcIj09PW4ud29ya3NwYWNlUGxhdGZvcm0ud2luZG93VHlwZX19LDY2Nzg6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByO24uZCh0LHtBQjooKT0+cyxBeDooKT0+aSxDTDooKT0+dSxHWDooKT0+ZCxaSzooKT0+ZixfVjooKT0+YSxhVzooKT0+cCxvQzooKT0+YyxyeDooKT0+ZyxzUzooKT0+byx1MDooKT0+dn0pLGZ1bmN0aW9uKGUpe2UuTG9jYWw9XCJsb2NhbFwiLGUuRGV2PVwiZGV2XCIsZS5TdGFnaW5nPVwic3RhZ2luZ1wiLGUuUHJvZD1cInByb2RcIn0ocnx8KHI9e30pKTtjb25zdCBvPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBmaW4saT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHByb2Nlc3N8fHByb2Nlc3MuZW52LFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpLGE9aSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGluZGV4ZWREQixsPWk/d2luZG93Lm9yaWdpbjpyLkxvY2FsLHM9byYmZmluLm1lLnV1aWQsYz1vJiZmaW4ubWUubmFtZSx1PW8mJmZpbi5tZS5lbnRpdHlUeXBlLGY9XCJwcm9kXCI9PT1yLkxvY2FsLGQ9KHIuRGV2LHIuU3RhZ2luZyxyLlByb2QsXCJmaW5zOi8vc3lzdGVtLWFwcHMvd29ya3NwYWNlXCIpLHA9XCJodHRwczovL3dvcmtzcGFjZS5vcGVuZmluLmNvL3dvcmtzcGFjZS8yMC4wLjUvYXBwLmpzb25cIixoPWU9PmUuc3RhcnRzV2l0aChcImh0dHA6Ly9cIil8fGUuc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpP2U6bCtlLGc9KGgoXCJodHRwczovL3dvcmtzcGFjZS5vcGVuZmluLmNvL3dvcmtzcGFjZS8yMC4wLjVcIiksaChcImh0dHBzOi8vd29ya3NwYWNlLm9wZW5maW4uY28vd29ya3NwYWNlLzIwLjAuNVwiKSksdj0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFdPUktTUEFDRV9ET0NTX1BMQVRGT1JNX1VSTCYmaChXT1JLU1BBQ0VfRE9DU19QTEFURk9STV9VUkwpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBXT1JLU1BBQ0VfRE9DU19DTElFTlRfVVJMJiZoKFdPUktTUEFDRV9ET0NTX0NMSUVOVF9VUkwpLFwiMjAuMC41XCIpO1widW5kZWZpbmVkXCIhPXR5cGVvZiBXT1JLU1BBQ0VfQlVJTERfU0hBJiZXT1JLU1BBQ0VfQlVJTERfU0hBfSw4MzExOihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7WlM6KCk9PnUsZEc6KCk9PmZ9KTt2YXIgcj1uKDMxOTgpLG89bi5uKHIpLGk9KG4oNjY3OCksbigzNDIwKSksYT1uKDE2NDYpLGw9bigzOTI2KSxzPShuKDcwOTgpLG4oMTIxKSk7Y29uc3QgYz0oZSx0KT0+ZS5jb250ZW50P3suLi5lLGNvbnRlbnQ6ZS5jb250ZW50Lm1hcCgoZT0+YyhlLHQpKSl9OnsuLi5lLGNvbXBvbmVudFN0YXRlOnQoZS5jb21wb25lbnRTdGF0ZSl9LHU9ZT0+KHsuLi5lLG5hbWU6dm9pZCAwfSksZj1lPT57Y29uc3QgdD17Li4uZX07cmV0dXJuIGModCx1KX0sZD1lPT57Y29uc3QgdD1bXTtyZXR1cm4oZSYmQXJyYXkuaXNBcnJheShlKT9lOltdKS5mb3JFYWNoKChlPT57aWYoXCJjb21wb25lbnRcIj09PWUudHlwZSlyZXR1cm4gdC5wdXNoKGUuY29tcG9uZW50U3RhdGUpO2NvbnN0IG49ZChlLmNvbnRlbnQpO3QucHVzaCguLi5uKX0pKSx0fTtuZXcgTWFwLG5ldyBNYXA7bygpKChhc3luYyBlPT57dHJ5e2NvbnN0IHQ9YXdhaXQoYXN5bmMgZT0+ZmluLlBsYXRmb3JtLkxheW91dC53cmFwU3luYyh7Li4uZmluLm1lLmlkZW50aXR5LGxheW91dE5hbWU6ZX0pLmdldENvbmZpZygpKShlLmxheW91dENvbnRhaW5lcktleSksbj10LmNvbnRlbnQ/ZCh0LmNvbnRlbnQpOltdLHI9bi5sZW5ndGg7cj4xPyhlPT57XCJtdWx0aVZpZXdcIiE9PWUuYXR0YWNoZWRQYWdlVHlwZSYmKDAsbC5hKSgpLkJyb3dzZXIud3JhcFN5bmMocy5HaSkudXBkYXRlUGFnZSh7cGFnZUlkOmUucGFnZUlkLHBhZ2U6e3NpbmdsZVZpZXdOYW1lOm51bGwsYXR0YWNoZWRQYWdlVHlwZTpcIm11bHRpVmlld1wifX0pfSkoZSk6MT09PXImJihhc3luYyhlLHQpPT57Y29uc3Qgbj0oMCxsLmEpKCkuQnJvd3Nlci53cmFwU3luYyhzLkdpKTtpZihcInNpbmdsZVZpZXdcIiE9PWUuYXR0YWNoZWRQYWdlVHlwZSl7Y29uc3Qgcj1hd2FpdCgwLGkuVlIpKGUpLG89YXdhaXQoMCxsLmEpKCkuQnJvd3Nlci5nZXRVbmlxdWVQYWdlVGl0bGUoKTtkZWxldGUgci5sYXlvdXQ7Y29uc3QgYT17Li4ucixzaW5nbGVWaWV3TmFtZTp0LHRpdGxlOm8saGFzVW5zYXZlZENoYW5nZXM6ITEsYXR0YWNoZWRQYWdlVHlwZTpcInNpbmdsZVZpZXdcIn07YXdhaXQgbi51cGRhdGVQYWdlKHtwYWdlSWQ6ZS5wYWdlSWQscGFnZTphfSl9fSkoZSxuWzBdLm5hbWUpLGF3YWl0KGFzeW5jKGUsdCk9Pntjb25zdCBuPSgwLGEuZSkoey4uLnMuR2ksbGF5b3V0TmFtZTplLmxheW91dENvbnRhaW5lcktleX0pLHI9YXdhaXQgbi5pc1Nob3dpbmdUYWJzKCk7dD4xP3J8fGF3YWl0IG4uc2hvdygpOjE9PT10JiZyJiZhd2FpdCBuLmhpZGUoe3NldHRpbmdzOntyZW9yZGVyRW5hYmxlZDohMH19KX0pKGUscil9Y2F0Y2goZSl7fX0pLDUwLHtsZWFkaW5nOiExLHRyYWlsaW5nOiEwfSl9LDgwNjE6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByO24uZCh0LHtaOigpPT5vfSksZnVuY3Rpb24oZSl7ZS5DdXJyZW50V29ya3NwYWNlSWQ9XCJjdXJyZW50V29ya3NwYWNlSWRcIixlLkxhc3RGb2N1c2VkQnJvd3NlcldpbmRvdz1cImxhc3RGb2N1c2VkQnJvd3NlcldpbmRvd1wiLGUuTWFjaGluZU5hbWU9XCJtYWNoaW5lTmFtZVwiLGUuTmV3VGFiUGFnZUxheW91dD1cIk5ld1RhYlBhZ2VMYXlvdXRcIixlLk5ld1RhYlBhZ2VTb3J0PVwiTmV3VGFiUGFnZVNvcnRcIixlLkRvY2tQb3NpdGlvbj1cIkRvY2tQb3NpdGlvblwiLGUuU2VsZWN0ZWRDb2xvclNjaGVtZT1cIlNlbGVjdGVkQ29sb3JTY2hlbWVcIixlLkhhc01vdmVkU3RvcmU9XCJIYXNNb3ZlZFN0b3JlXCIsZS5QYWdlRHJhZ1N0YXRlPVwiQnJvd3NlclBhZ2VEcmFnU3RhdGVcIn0ocnx8KHI9e30pKTtjb25zdCBvPXJ9LDQ3Mjg6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtMUzooKT0+byxyVjooKT0+aX0pO3ZhciByPW4oNjY3OCk7Y29uc3Qgbz0oZSx0KT0+e2xvY2FsU3RvcmFnZS5zZXRJdGVtKGAke3IuQUJ9LSR7ZX1gLHQpfSxpPWU9PmxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke3IuQUJ9LSR7ZX1gKX0sNzI3ODooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1o6KCk9Pm99KTtjb25zdCByPVwib2Ytd29ya3NwYWNlLVwiO2NvbnN0IG89bmV3IGNsYXNze21hcmsoZSl7cGVyZm9ybWFuY2UubWFyayhgJHtyfSR7ZX1gKX1tYXJrU3RhcnQoZSl7cGVyZm9ybWFuY2UubWFyayhgJHtyfSR7ZX0tc3RhcnRgKX1tYXJrRW5kKGUpe3BlcmZvcm1hbmNlLm1hcmsoYCR7cn0ke2V9LWVuZGApfW1hcmtFbmRBbmRNZWFzdXJlKGUpe3BlcmZvcm1hbmNlLm1hcmsoYCR7cn0ke2V9LWVuZGApO3RyeXtyZXR1cm4gcGVyZm9ybWFuY2UubWVhc3VyZShgJHtyfSR7ZX1gLGAke3J9JHtlfS1zdGFydGAsYCR7cn0ke2V9LWVuZGApfWNhdGNoKGUpezB9fW1hcmtBbmRNZWFzdXJlKGUsdCl7cGVyZm9ybWFuY2UubWFyayhgJHtyfSR7ZX1gKTt0cnl7cmV0dXJuIHBlcmZvcm1hbmNlLm1lYXN1cmUoYCR7cn0ke2V9LW1lYXN1cmVgLGAke3J9JHt0fS1zdGFydGAsYCR7cn0ke2V9YCl9Y2F0Y2goZSl7MH19cmVwb3J0V29ya3NwYWNlUGVyZm9ybWFuY2VFbnRyaWVzKCl7cmV0dXJuIHBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUoXCJtZWFzdXJlXCIpLmZpbHRlcigoZT0+ZS5uYW1lLnN0YXJ0c1dpdGgocikpKX1yZXBvcnRXb3Jrc3BhY2VQZXJmb3JtYW5jZSgpe3JldHVybiB0aGlzLnJlcG9ydFdvcmtzcGFjZVBlcmZvcm1hbmNlRW50cmllcygpLm1hcCgoZT0+KHtuYW1lOmUubmFtZS5yZXBsYWNlKGAke3J9YCxcIlwiKS5yZXBsYWNlKFwiLW1lYXN1cmVcIixcIlwiKSxkdXJhdGlvbjplLmR1cmF0aW9ufSkpKX19fSw2MDA1OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjt2YXIgcjtuLmQodCx7WlA6KCk9PmwsZGU6KCk9Pml9KSxmdW5jdGlvbihlKXtlLkhvbWU9XCIvaG9tZS9cIixlLkhvbWVTZWFyY2g9XCIvaG9tZS8/ZGVlcGxpbms9c2VhcmNoXCIsZS5Ib21lUGFnZXNSZW5hbWU9XCIvaG9tZS9wYWdlcy9yZW5hbWUvXCIsZS5Eb2NrPVwiL2RvY2svXCIsZS5Ccm93c2VyPVwiL2Jyb3dzZXIvXCIsZS5Ccm93c2VyUG9wdXBNZW51PVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9cIixlLlByb3ZpZGVyPVwiL3Byb3ZpZGVyL1wiLGUuQnJvd3NlclBvcHVwTWVudVNhdmVNb2RhbD1cIi9icm93c2VyL3BvcHVwLW1lbnUvc2F2ZS1tb2RhbC9cIixlLkJyb3dzZXJQb3B1cE1lbnVMYXlvdXRzPVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9sYXlvdXRzL2xheW91dHMvXCIsZS5Ccm93c2VyUG9wdXBNZW51Q29sb3JMaW5raW5nPVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9jb2xvci1saW5raW5nL2NvbG9yLWxpbmtpbmcvXCIsZS5Ccm93c2VySW5kaWNhdG9yPVwiL2Jyb3dzZXIvaW5kaWNhdG9yL1wiLGUuQnJvd3NlclBvcHVwTWVudUFkZHJlc3NTZWFyY2hSZXN1bHRzVmlldz1cIi9icm93c2VyL3BvcHVwLW1lbnUvYWRkcmVzcy1zZWFyY2gtcmVzdWx0cy12aWV3L1wiLGUuUmVzcG9uc2VNb2RhbD1cIi9icm93c2VyL3BvcHVwLW1lbnUvcmVzcG9uc2UtbW9kYWwvXCIsZS5DbG9zZUNvbmZpcm1hdGlvbk1vZGFsPVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9jbG9zZS1jb25maXJtYXRpb24tbW9kYWwvXCIsZS5Eb2NzPVwiL3Byb3ZpZGVyL2RvY3MvXCIsZS5TdG9yZWZyb250PVwiL3N0b3JlZnJvbnQvXCIsZS5EZXByZWNhdGVkQWxlcnQ9XCIvcHJvdmlkZXIvZGVwcmVjYXRlZC1hbGVydC9cIixlLkFuYWx5dGljcz1cIi9wcm92aWRlci9hbmFseXRpY3MvXCIsZS5FbnRlcnByaXNlQnJvd3Nlcj1cIi9icm93c2VyL2VudGVycHJpc2UvXCIsZS5FbnRlcnByaXNlQ29udGV4dE1lbnU9XCIvYnJvd3Nlci9lbnRlcnByaXNlL2NvbnRleHQtbWVudS9cIixlLkVudGVycHJpc2VCb29rbWFya0RpYWxvZz1cIi9icm93c2VyL2VudGVycHJpc2UvYm9va21hcmstZGlhbG9nL1wiLGUuRHJvcGRvd25NZW51PVwiL2Jyb3dzZXIvZW50ZXJwcmlzZS9kcm9wZG93bi1tZW51L1wifShyfHwocj17fSkpO2NvbnN0IG89XCIvbWljcm9zb2Z0LTM2NS1pbnRlZ3JhdGlvbi1hc3NldHMvXCIsaT17SWNvbk9wZW5GaW5Mb2dvOlwiL2ljb25zL29wZW5maW5sb2dvLnN2Z1wiLEljb25GaWx0ZXI6XCIvaWNvbnMvZmlsdGVyLnN2Z1wiLExpZ2h0U3RvcmVmcm9udDpcIi9pY29ucy9zdG9yZS1pY29uLWxpZ2h0LnBuZ1wiLERhcmtTdG9yZWZyb250OlwiL2ljb25zL3N0b3JlLWljb24tZGFyay5wbmdcIixDYWxsSWNvbkxpZ2h0OlwiL2ljb25zL2NhbGwtaWNvbi1saWdodC5zdmdcIixDYWxsSWNvbkRhcms6XCIvaWNvbnMvY2FsbC1pY29uLWRhcmsuc3ZnXCIsQ2hhdEljb25MaWdodDpcIi9pY29ucy9jaGF0LWljb24tbGlnaHQuc3ZnXCIsQ2hhdEljb25EYXJrOlwiL2ljb25zL2NoYXQtaWNvbi1kYXJrLnN2Z1wiLE1lc3NhZ2VJY29uTGlnaHQ6XCIvaWNvbnMvbWVzc2FnZS1pY29uLWxpZ2h0LnN2Z1wiLE1lc3NhZ2VJY29uRGFyazpcIi9pY29ucy9tZXNzYWdlLWljb24tZGFyay5zdmdcIixNaWNyb3NvZnQzNjVBc3NldHM6e01pY3Jvc29mdDM2NURvY3VtZW50SWNvbjpgJHtvfW1pY3Jvc29mdC0zNjUtZG9jdW1lbnQtaWNvbi5zdmdgLE1pY3Jvc29mdDM2NUV4Y2VsSWNvbjpgJHtvfW1pY3Jvc29mdC0zNjUtZXhjZWwtaWNvbi5zdmdgLE1pY3Jvc29mdDM2NVBvd2VycG9pbnRJY29uOmAke299bWljcm9zb2Z0LTM2NS1wb3dlcnBvaW50LWljb24uc3ZnYCxNaWNyb3NvZnQzNjVPdXRsb29rSWNvbjpgJHtvfW1pY3Jvc29mdC0zNjUtb3V0bG9vay1pY29uLnN2Z2AsTWljcm9zb2Z0MzY1VGVhbXNJY29uOmAke299bWljcm9zb2Z0LTM2NS10ZWFtcy1pY29uLnN2Z2AsTWljcm9zb2Z0MzY1SWNvbjpgJHtvfW1pY3Jvc29mdC0zNjUtaWNvbi5zdmdgLFBERkZpbGVJY29uOmAke299cGRmLWZpbGUtaWNvbi5zdmdgfSxEb2NrSWNvbkxpZ2h0OlwiL2ljb25zL2RvY2staWNvbi1saWdodC5wbmdcIixEb2NrSWNvbkRhcms6XCIvaWNvbnMvZG9jay1pY29uLWRhcmsucG5nXCJ9O3ZhciBhOyFmdW5jdGlvbihlKXtlLlNlYXJjaD1cInNlYXJjaFwifShhfHwoYT17fSkpO2NvbnN0IGw9cn0sNjY1MDooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse0szOigpPT5pfSk7dmFyIHI7big2Njc4KTshZnVuY3Rpb24oZSl7ZS5Ib21lPVwiL2hvbWVcIixlLkJyb3dzZXI9XCIvYnJvd3NlclwiLGUuUHJvdmlkZXI9XCIvcHJvdmlkZXJcIixlLlN0b3JlZnJvbnQ9XCIvc3RvcmVmcm9udFwiLGUuRG9jaz1cIi9kb2NrXCJ9KHJ8fChyPXt9KSk7Y29uc3Qgbz1cIi93b3Jrc3BhY2UvMjAuMC41XCI7ZnVuY3Rpb24gaShlKXtyZXR1cm4gbytlfX0sNTkxMjooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQseyR3OigpPT5hLFg1OigpPT5vfSk7big4MzExKTt2YXIgcj1uKDgwNjEpO2Z1bmN0aW9uIG8oKXtyZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oci5aLk1hY2hpbmVOYW1lKT8/XCJ1bmtub3duXCJ9bGV0IGk7YXN5bmMgZnVuY3Rpb24gYSgpe3JldHVybiBpfHwoaT1hd2FpdCBmaW4uU3lzdGVtLmdldE1hY2hpbmVJZCgpKSxpfX0sNjUzMjooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1duOigpPT5jLGNrOigpPT5sLGQ5OigpPT5zfSk7dmFyIHIsbz1uKDY2NzgpLGk9bigxMjEpO24oODYzNik7IWZ1bmN0aW9uKGUpe2UuQnJvd3Nlcj1cIkJyb3dzZXJcIixlLkRvY2s9XCJEb2NrXCIsZS5Ib21lPVwiSG9tZVwiLGUuTm90aWZpY2F0aW9uPVwiTm90aWZpY2F0aW9uXCIsZS5TdG9yZWZyb250PVwiU3RvcmVmcm9udFwiLGUuUGxhdGZvcm09XCJQbGF0Zm9ybVwiLGUuVGhlbWluZz1cIlRoZW1pbmdcIixlLk1pY3JvZmxvdz1cIk1pY3JvZmxvd1wifShyfHwocj17fSkpO2NvbnN0IGE9YXN5bmMoZSx0LG49XCJ3b3Jrc3BhY2UtbGljZW5zaW5nXCIpPT57Y29uc3Qgcj17YXBpVmVyc2lvbjp0LmFwaVZlcnNpb258fG8udTAsY29tcG9uZW50TmFtZTplLGNvbXBvbmVudFZlcnNpb246dC5jb21wb25lbnRWZXJzaW9ufHxvLnUwLGFsbG93ZWQ6dC5hbGxvd2VkLHJlamVjdGlvbkNvZGU6dC5yZWplY3Rpb25Db2RlfTtmaW4uU3lzdGVtLnJlZ2lzdGVyVXNhZ2Uoe3R5cGU6bixkYXRhOnJ9KX07Y29uc3QgbD1lPT57aS5PSS51dWlkPT09aS5HaS51dWlkJiZpLk9JLm5hbWU9PT1pLkdpLm5hbWV8fGEoci5Ib21lLGUpfSxzPWU9PnthKHIuU3RvcmVmcm9udCxlKX0sYz1lPT57YShyLkRvY2ssZSl9O25ldyBNYXB9LDk2MTA6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIoKXtyZXR1cm4gdm9pZCAwIT09dHlwZW9mIGNyeXB0byYmXCJyYW5kb21VVUlEXCJpbiBjcnlwdG8mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGNyeXB0by5yYW5kb21VVUlEP2NyeXB0by5yYW5kb21VVUlEKCk6XCIxMDAwMDAwMC0xMDAwLTQwMDAtODAwMC0xMDAwMDAwMDAwMDBcIi5yZXBsYWNlKC9bMDE4XS9nLChlPT4oZV5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSYxNT4+ZS80KS50b1N0cmluZygxNikpKX1uLmQodCx7SDooKT0+cn0pfSwxMjE6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtCOigpPT5kLEdQOigpPT5wLEdpOigpPT5sLElBOigpPT5yLEpWOigpPT5oLE9JOigpPT5zLFpKOigpPT5jLGlXOigpPT5mLG5kOigpPT51fSk7dmFyIHIsbz1uKDU4MDYpLGk9big2Njc4KTshZnVuY3Rpb24oZSl7ZS5Ib21lPVwib3BlbmZpbi1ob21lXCIsZS5Eb2NrPVwib3BlbmZpbi1kb2NrXCIsZS5TdG9yZWZyb250PVwib3BlbmZpbi1zdG9yZWZyb250XCIsZS5Ib21lSW50ZXJuYWw9XCJvcGVuZmluLWhvbWUtaW50ZXJuYWxcIixlLkJyb3dzZXJNZW51PVwib3BlbmZpbi1icm93c2VyLW1lbnVcIixlLkJyb3dzZXJTYXZlTWVudT1cIm9wZW5maW4tYnJvd3Nlci1zYXZlLW1lbnVcIixlLkJyb3dzZXJJbmRpY2F0b3I9XCJvcGVuZmluLWJyb3dzZXItaW5kaWNhdG9yXCIsZS5Ccm93c2VyV2luZG93PVwiaW50ZXJuYWwtZ2VuZXJhdGVkLXdpbmRvd1wiLGUuQ2xhc3NpY1dpbmRvdz1cImludGVybmFsLWdlbmVyYXRlZC1jbGFzc2ljLXdpbmRvd1wiLGUuRW50ZXJwcmlzZUNvbnRleHRNZW51PVwib3BlbmZpbi1lbnRlcnByaXNlLWNvbnRleHQtbWVudVwiLGUuQnJvd3NlckFkZHJlc3NTZWFyY2hQcmVmaXg9XCJvcGVuZmluLWJyb3dzZXItbWVudS1hZGRyZXNzLXNlYXJjaC1cIixlLkVudGVycHJpc2VCb29rbWFya0RpYWxvZ1dpbmRvdz1cIm9wZW5maW4tZW50ZXJwcmlzZS1ib29rbWFyay1kaWFsb2dcIixlLkRyb3Bkb3duTWVudT1cIm9wZW5maW4tZW50ZXJwcmlzZS1kcm9wZG93bi1tZW51XCJ9KHJ8fChyPXt9KSk7ZnVuY3Rpb24gYShlKXtpZighaS5zUyl0aHJvdyBuZXcgRXJyb3IoXCJnZXRPRldpbmRvdyBjYW4gb25seSBiZSB1c2VkIGluIGFuIE9wZW5GaW4gZW52LiBBdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kIGR1cmluZyBwcmUtcmVuZGVyaW5nLlwiKTtyZXR1cm4gZmluLldpbmRvdy53cmFwU3luYyhlKX1jb25zdCBsPXtuYW1lOmkub0MsdXVpZDppLkFCfTtjb25zdCBzPXtuYW1lOnIuSG9tZSx1dWlkOm8ucTkuV29ya3NwYWNlfSxjPXtuYW1lOnIuRG9jayx1dWlkOm8ucTkuV29ya3NwYWNlfSx1PXtuYW1lOnIuU3RvcmVmcm9udCx1dWlkOm8ucTkuV29ya3NwYWNlfSxmPXtuYW1lOm8ucTkuV29ya3NwYWNlLHV1aWQ6by5xOS5Xb3Jrc3BhY2V9O2NvbnN0IGQ9YXN5bmMgZT0+e3RyeXtjb25zdCB0PWF3YWl0IGZpbi5XaW5kb3cud3JhcFN5bmMoe25hbWU6ZS5uYW1lLHV1aWQ6ZS51dWlkPz9maW4ubWUudXVpZH0pLmdldE9wdGlvbnMoKTtyZXR1cm4oXCJicm93c2VyXCI9PT10LndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlfHxcImVudGVycHJpc2VcIj09PXQud29ya3NwYWNlUGxhdGZvcm0/LndpbmRvd1R5cGUpJiZ0LndvcmtzcGFjZVBsYXRmb3JtPy5wYWdlc31jYXRjaChlKXtyZXR1cm4gY29uc29sZS53YXJuKFwiaXNCcm93c2VyV2luZG93IGVycm9yOiBcIixlKSwhMX19O2FzeW5jIGZ1bmN0aW9uIHAoKXtjb25zdCBlPWF3YWl0IGZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpLmdldENoaWxkV2luZG93cygpLHQ9YXdhaXQgUHJvbWlzZS5hbGwoZS5tYXAoKGFzeW5jIGU9PmQoZS5pZGVudGl0eSkpKSk7cmV0dXJuIGUuZmlsdGVyKCgoZSxuKT0+dFtuXSkpfWNvbnN0IGg9ZT0+YShlKS5nZXRPcHRpb25zKCkudGhlbigoKCk9PiEwKSkuY2F0Y2goKCgpPT4hMSkpfSwyMzA0OmU9PntlLmV4cG9ydHM9e2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsZW1iZWQ6ITAsaHI6ITAsaW1nOiEwLGlucHV0OiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfX19LHQ9e307ZnVuY3Rpb24gbihyKXt2YXIgbz10W3JdO2lmKHZvaWQgMCE9PW8pcmV0dXJuIG8uZXhwb3J0czt2YXIgaT10W3JdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVtyXShpLGkuZXhwb3J0cyxuKSxpLmV4cG9ydHN9bi5uPWU9Pnt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/KCk9PmUuZGVmYXVsdDooKT0+ZTtyZXR1cm4gbi5kKHQse2E6dH0pLHR9LG4uZD0oZSx0KT0+e2Zvcih2YXIgciBpbiB0KW4ubyh0LHIpJiYhbi5vKGUscikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse2VudW1lcmFibGU6ITAsZ2V0OnRbcl19KX0sbi5nPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksbi5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxuLnI9ZT0+e1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LG4ubmM9dm9pZCAwO3ZhciByPXt9OygoKT0+e1widXNlIHN0cmljdFwiO24ucihyKSxuLmQocix7QWN0aW9uVHJpZ2dlcjooKT0+R2UucCxBcHBNYW5pZmVzdFR5cGU6KCk9PlllLkwsQnV0dG9uU3R5bGU6KCk9PnFlLlpKLENMSUFjdGlvbjooKT0+JC5QdCxDTElGaWx0ZXJPcHRpb25UeXBlOigpPT4kLmVsLENMSVRlbXBsYXRlOigpPT4kLnlXLENvbnRhaW5lclRlbXBsYXRlRnJhZ21lbnROYW1lczooKT0+cWUucDYsRG9jazooKT0+ZSxEb2NrQnV0dG9uTmFtZXM6KCk9PmQudixIb21lOigpPT5fLEludGVncmF0aW9uczooKT0+dCxMZWdhY3k6KCk9Pm8sUHJlc2VudGF0aW9uVGVtcGxhdGVGcmFnbWVudE5hbWVzOigpPT5xZS5HbyxTZWFyY2hUYWdCYWNrZ3JvdW5kOigpPT5HZS53LFN0b3JlZnJvbnQ6KCk9PnplLFN0b3JlZnJvbnRUZW1wbGF0ZTooKT0+WWUuVCxUZW1wbGF0ZUZyYWdtZW50VHlwZXM6KCk9PnFlLmJJfSk7dmFyIGU9e307bi5yKGUpLG4uZChlLHtEb2NrQnV0dG9uTmFtZXM6KCk9PmQudixkZXJlZ2lzdGVyOigpPT5tLG1pbmltaXplOigpPT5DLHJlZ2lzdGVyOigpPT52LHNob3c6KCk9Pnl9KTt2YXIgdD17fTtuLnIodCksbi5kKHQse01pY3Jvc29mdDM2NVdvcmtmbG93SW50ZWdyYXRpb246KCk9Pk5lfSk7dmFyIG89e307bi5yKG8pLG4uZChvLHtnZXRQYWdlczooKT0+VWUsZ2V0V29ya3NwYWNlczooKT0+V2V9KTt2YXIgaT1uKDY2NzgpLGE9big3Mjc4KSxsPW4oNjUzMikscz1uKDEyMSksYz1uKDUxNTApLHU9big1NDM4KTt2YXIgZj1uKDI2OTMpLGQ9big3NDI3KTtsZXQgcCxoO2NvbnN0IGc9KGU9W10pPT57Y29uc3QgdD1lLmZpbHRlcigoZT0+ISFlLmlkKSkubWFwKChlPT5lLmlkKSk7aWYobmV3IFNldCh0KS5zaXplIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiRG9jayBwcm92aWRlciBidXR0b25zIG11c3QgaGF2ZSB1bmlxdWUgaWRlbnRpZmllcnMgaWYgc3BlY2lmaWVkLlwiKX0sdj1hc3luYyBlPT57KDAsZi5FKShcImRvY2tcIixzLlpKKTtjb25zdCB0PWF3YWl0KGFzeW5jIGU9Pnthd2FpdCgwLHUuSGgpKGZpbi5tZS5pZGVudGl0eSk7Y29uc3QgdD1hd2FpdCgwLGMueFopKCk7aWYoaCl0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciB1c2luZyBgRG9jay5yZWdpc3RlcmAuIEEgRG9jayBwcm92aWRlciBmb3IgdGhpcyBXb3Jrc3BhY2UgUGxhdGZvcm0gaXMgYWxyZWFkeSByZWdpc3RlcmVkLiBDYWxsIGBEb2NrLmRlcmVnaXN0ZXJgIGJlZm9yZSBjYWxsaW5nIGBEb2NrLnJlZ2lzdGVyYCBhZ2Fpbi5cIik7cmV0dXJuIGg9ZSxlLmNsaWVudEFQSVZlcnNpb249aS51MCx0LmRpc3BhdGNoKFwicmVnaXN0ZXItcHJvdmlkZXJcIix7cHJvdmlkZXJUeXBlOlwiZG9ja1wiLGluZm86ZX0pfSkoZSk7cmV0dXJuIHA9bmV3IFByb21pc2UoKChuLHIpPT57dHJ5eyhlPT57ZS53b3Jrc3BhY2VDb21wb25lbnRzJiYhQXJyYXkuaXNBcnJheShlLndvcmtzcGFjZUNvbXBvbmVudHMpJiZjb25zb2xlLndhcm4oXCJVc2luZyB0aGUgYFdvcmtzcGFjZUNvbXBvbmVudEJ1dHRvbk9wdGlvbnNgIHR5cGUgdG8gY29uZmlndXJlIHRoZSBXb3Jrc3BhY2UgQ29tcG9uZW50cyBCdXR0b25zIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYFdvcmtzcGFjZUJ1dHRvbnNDb25maWdgIGluc3RlYWQuXCIpfSkoZSksZyhlLmJ1dHRvbnMpLCgwLGwuV24pKHthbGxvd2VkOiEwLGNvbXBvbmVudFZlcnNpb246dD8ud29ya3NwYWNlVmVyc2lvbn0pLGkudTAsbih7Y2xpZW50QVBJVmVyc2lvbjppLnUwLHdvcmtzcGFjZVZlcnNpb246dD8ud29ya3NwYWNlVmVyc2lvbj8/XCJcIix1cGRhdGVEb2NrUHJvdmlkZXJDb25maWc6YXN5bmMgdD0+e2lmKCFoKXRocm93IG5ldyBFcnJvcihcIkVycm9yIHVzaW5nIGBEb2NrLnVwZGF0ZURvY2tQcm92aWRlckNvbmZpZ2AuIERvY2sgcHJvdmlkZXIgaXMgbm90IHJlZ2lzdGVyZWQuIE1ha2Ugc3VyZSB0byBjYWxsIGBEb2NrLnJlZ2lzdGVyYCBmaXJzdC5cIik7Zyh0LmJ1dHRvbnMpO2NvbnN0IG49YXdhaXQoMCxjLnhaKSgpO2F3YWl0IG4uZGlzcGF0Y2goXCJ1cGRhdGUtcHJvdmlkZXJcIix7cHJvdmlkZXJUeXBlOlwiZG9ja1wiLHByb3ZpZGVyOnsuLi5lLHdvcmtzcGFjZUNvbXBvbmVudHM6dC53b3Jrc3BhY2VDb21wb25lbnRzLGJ1dHRvbnM6dC5idXR0b25zLHRpdGxlOnQudGl0bGUsaWNvbjp0Lmljb24sZGlzYWJsZVVzZXJSZWFycmFuZ2VtZW50OnQuZGlzYWJsZVVzZXJSZWFycmFuZ2VtZW50LGlkOmUuaWR9fSl9fSl9Y2F0Y2goZSl7KDAsbC5Xbikoe2FsbG93ZWQ6ITEscmVqZWN0aW9uQ29kZTplIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOlwidW5rbm93blwifSkscihlKSxwPXZvaWQgMH1maW5hbGx5e2EuWi5tYXJrRW5kQW5kTWVhc3VyZShcImRvY2stcmVnaXN0cmF0aW9uXCIpfX0pKSxwfSxtPWFzeW5jKCk9PntpZihhd2FpdCBwLCFoKXRocm93IG5ldyBFcnJvcihcIkVycm9yIHVzaW5nIGBEb2NrLmRlcmVnaXN0ZXJgLiBEb2NrIHByb3ZpZGVyIGlzIG5vdCByZWdpc3RlcmVkLiBDYWxsIGBEb2NrLnJlZ2lzdGVyYCBiZWZvcmUgY2FsbGluZyBgRG9jay5kZXJlZ2lzdGVyYC5cIik7Y29uc3QgZT1hd2FpdCgwLGMueFopKCk7YXdhaXQgZS5kaXNwYXRjaChcImRlcmVnaXN0ZXItcHJvdmlkZXJcIix7cHJvdmlkZXJUeXBlOlwiZG9ja1wiLGlkOmguaWR9KSxoPXZvaWQgMCxwPXZvaWQgMH0sQz1hc3luYygpPT57YXdhaXQgcCxhd2FpdCgwLGMuYUIpKCksYXdhaXQoYXN5bmMgZT0+KGF3YWl0KDAsYy5EbSkoKSkuZGlzcGF0Y2goXCJoaWRlLXByb3ZpZGVyLXdpbmRvd1wiLHtwcm92aWRlclR5cGU6ZX0pKShcImRvY2tcIil9LHk9YXN5bmMoKT0+e2EuWi5tYXJrU3RhcnQoXCJkb2NrLXNob3dcIiksYXdhaXQgcCxhd2FpdCgwLGMuYUIpKCksYXdhaXQoYXN5bmMgZT0+KGF3YWl0KDAsYy5EbSkoKSkuZGlzcGF0Y2goXCJzaG93LXByb3ZpZGVyLXdpbmRvd1wiLHtwcm92aWRlclR5cGU6ZX0pKShcImRvY2tcIil9O3ZhciB3LGIseCxfPW4oMzI2MSksTz1mdW5jdGlvbihlLHQsbixyLG8pe2lmKFwibVwiPT09cil0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO2lmKFwiYVwiPT09ciYmIW8pdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2UhPT10fHwhbzohdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO3JldHVyblwiYVwiPT09cj9vLmNhbGwoZSxuKTpvP28udmFsdWU9bjp0LnNldChlLG4pLG59LEw9ZnVuY3Rpb24oZSx0LG4scil7aWYoXCJhXCI9PT1uJiYhcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZSE9PXR8fCFyOiF0LmhhcyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO3JldHVyblwibVwiPT09bj9yOlwiYVwiPT09bj9yLmNhbGwoZSk6cj9yLnZhbHVlOnQuZ2V0KGUpfTt3PW5ldyBXZWFrTWFwLGI9bmV3IFdlYWtNYXAseD1uZXcgV2Vha01hcDtjb25zdCBFPWNsYXNze2NvbnN0cnVjdG9yKGUpe3cuc2V0KHRoaXMsdm9pZCAwKSxiLnNldCh0aGlzLHZvaWQgMCkseC5zZXQodGhpcyx2b2lkIDApLE8odGhpcyx3LGUsXCJmXCIpLE8odGhpcyxiLG5ldyBNYXAsXCJmXCIpLE8odGhpcyx4LFtdLFwiZlwiKX1nZXQoZSl7aWYoTCh0aGlzLGIsXCJmXCIpLmhhcyhlKSlyZXR1cm4gdGhpcy51cGRhdGVRdWV1ZShlKSxMKHRoaXMsYixcImZcIikuZ2V0KGUpfWhhcyhlKXtyZXR1cm4gTCh0aGlzLGIsXCJmXCIpLmhhcyhlKX1wdXQoZSx0KXtpZihMKHRoaXMsYixcImZcIikuaGFzKGUpKUwodGhpcyxiLFwiZlwiKS5zZXQoZSx0KSx0aGlzLnVwZGF0ZVF1ZXVlKGUpO2Vsc2V7aWYoTCh0aGlzLHgsXCJmXCIpLmxlbmd0aD09PUwodGhpcyx3LFwiZlwiKSl7Y29uc3QgZT1MKHRoaXMseCxcImZcIikuc2hpZnQoKTtlJiZMKHRoaXMsYixcImZcIikuZGVsZXRlKGUpfUwodGhpcyxiLFwiZlwiKS5zZXQoZSx0KSxMKHRoaXMseCxcImZcIikucHVzaChlKX19dXBkYXRlUXVldWUoZSl7Y29uc3QgdD1MKHRoaXMseCxcImZcIikuaW5kZXhPZihlKTstMSE9PXQmJihMKHRoaXMseCxcImZcIikuc3BsaWNlKHQsMSksTCh0aGlzLHgsXCJmXCIpLnB1c2goZSkpfX07ZnVuY3Rpb24gUyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJiFBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIGooZSwuLi50KXtpZighdC5sZW5ndGgpcmV0dXJuIGU7Y29uc3Qgbj10LnNoaWZ0KCk7cmV0dXJuIFMoZSkmJlMobikmJk9iamVjdC5lbnRyaWVzKG4pLmZvckVhY2goKChbdCxuXSk9PntpZihTKG4pKXJldHVybiBlW3RdfHwoZVt0XT17fSksaihlW3RdLG4pO2VbdF09bn0pKSxqKGUsLi4udCl9dmFyIE0sayxSLFAsSSxBPW4oNjAwNSksVD1uKDY2NTApLEg9ZnVuY3Rpb24oZSx0LG4scixvKXtpZihcIm1cIj09PXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtpZihcImFcIj09PXImJiFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD9lIT09dHx8IW86IXQuaGFzKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtyZXR1cm5cImFcIj09PXI/by5jYWxsKGUsbik6bz9vLnZhbHVlPW46dC5zZXQoZSxuKSxufSxCPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKFwiYVwiPT09biYmIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2UhPT10fHwhcjohdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtyZXR1cm5cIm1cIj09PW4/cjpcImFcIj09PW4/ci5jYWxsKGUpOnI/ci52YWx1ZTp0LmdldChlKX07az1uZXcgV2Vha01hcCxSPW5ldyBXZWFrTWFwLFA9bmV3IFdlYWtNYXAsTT1uZXcgV2Vha1NldCxJPWZ1bmN0aW9uKCl7Y29uc3QgZT1BcnJheS5mcm9tKEIodGhpcyxrLFwiZlwiKS5lbnRyaWVzKCkpLnJlZHVjZSgoKGUsdCk9PiFlfHx0WzFdLnRpbWVzdGFtcDxlWzFdLnRpbWVzdGFtcD90OmUpLG51bGwpO3JldHVybiBlP2VbMF06bnVsbH07Y29uc3QgVj1jbGFzc3tjb25zdHJ1Y3RvcihlPTNlNSx0PTEwMCl7TS5hZGQodGhpcyksay5zZXQodGhpcyx2b2lkIDApLFIuc2V0KHRoaXMsdm9pZCAwKSxQLnNldCh0aGlzLHZvaWQgMCksSCh0aGlzLGssbmV3IE1hcCxcImZcIiksSCh0aGlzLFIsZSxcImZcIiksSCh0aGlzLFAsdCxcImZcIil9Z2V0KGUpe2NvbnN0IHQ9Qih0aGlzLGssXCJmXCIpLmdldChlKTtpZighdClyZXR1cm4gbnVsbDtyZXR1cm4gRGF0ZS5ub3coKS10LnRpbWVzdGFtcDxCKHRoaXMsUixcImZcIik/dC52YWx1ZTooQih0aGlzLGssXCJmXCIpLmRlbGV0ZShlKSxudWxsKX1wdXQoZSx0KXtpZihCKHRoaXMsayxcImZcIikuc2l6ZT49Qih0aGlzLFAsXCJmXCIpKXtjb25zdCBlPUIodGhpcyxNLFwibVwiLEkpLmNhbGwodGhpcyk7bnVsbCE9ZSYmQih0aGlzLGssXCJmXCIpLmRlbGV0ZShlKX1CKHRoaXMsayxcImZcIikuc2V0KGUse3ZhbHVlOnQsdGltZXN0YW1wOkRhdGUubm93KCl9KX1yZW1vdmUoZSl7Qih0aGlzLGssXCJmXCIpLmRlbGV0ZShlKX1jbGVhcigpe0IodGhpcyxrLFwiZlwiKS5jbGVhcigpfX07dmFyIEQsWj1uKDk2MTApLCQ9bigzNzU4KSxOPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKFwiYVwiPT09biYmIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2UhPT10fHwhcjohdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtyZXR1cm5cIm1cIj09PW4/cjpcImFcIj09PW4/ci5jYWxsKGUpOnI/ci52YWx1ZTp0LmdldChlKX07Y29uc3QgRj17fTtjbGFzcyBVe2NvbnN0cnVjdG9yKGUpe0Quc2V0KHRoaXMsbmV3IFNldCksdGhpcy5faW5pdGlhbGl6ZVdvcmtmbG93cz1hc3luYyhlPXRoaXMuY29uZmlnKT0+e2NvbnN0e3dvcmtmbG93czp0fT1lO2Zvcihjb25zdCBlIGluIHQpe2lmKCF0W2VdLmRpc2FibGVBdXRvSW5pdGlhbGl6ZSl0cnl7Tih0aGlzLEQsXCJmXCIpLmhhcyhlKT9jb25zb2xlLndhcm4oYFdvcmtmbG93ICR7ZX0gYWxyZWFkeSBpbml0aWFsaXplZC5gKTooTih0aGlzLEQsXCJmXCIpLmFkZChlKSxhd2FpdCB0aGlzLmluaXRpYWxpemVXb3JrZmxvdyhlKSl9Y2F0Y2godCl7Tih0aGlzLEQsXCJmXCIpLmRlbGV0ZShlKSxjb25zb2xlLmVycm9yKGBFcnJvciByZWdpc3RlcmluZyAke2V9OmAsdCl9fX07Y29uc3QgdD1qKHt9LEYsZSk7dGhpcy5jb25maWc9dH1hc3luYyBpbml0aWFsaXplV29ya2Zsb3coZSl7Tih0aGlzLEQsXCJmXCIpLmFkZChlKX19RD1uZXcgV2Vha01hcDt2YXIgVz17ODc2OmU9Pntjb25zdHtBYm9ydENvbnRyb2xsZXI6dCxBYm9ydFNpZ25hbDpufT1cInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMDtlLmV4cG9ydHM9dCxlLmV4cG9ydHMuQWJvcnRTaWduYWw9bixlLmV4cG9ydHMuZGVmYXVsdD10fSw2MDooZSx0KT0+e3QuYnl0ZUxlbmd0aD1mdW5jdGlvbihlKXt2YXIgdD1sKGUpLG49dFswXSxyPXRbMV07cmV0dXJuIDMqKG4rcikvNC1yfSx0LnRvQnl0ZUFycmF5PWZ1bmN0aW9uKGUpe3ZhciB0LG4saT1sKGUpLGE9aVswXSxzPWlbMV0sYz1uZXcgbyhmdW5jdGlvbihlLHQsbil7cmV0dXJuIDMqKHQrbikvNC1ufSgwLGEscykpLHU9MCxmPXM+MD9hLTQ6YTtmb3Iobj0wO248ZjtuKz00KXQ9cltlLmNoYXJDb2RlQXQobildPDwxOHxyW2UuY2hhckNvZGVBdChuKzEpXTw8MTJ8cltlLmNoYXJDb2RlQXQobisyKV08PDZ8cltlLmNoYXJDb2RlQXQobiszKV0sY1t1KytdPXQ+PjE2JjI1NSxjW3UrK109dD4+OCYyNTUsY1t1KytdPTI1NSZ0O3JldHVybiAyPT09cyYmKHQ9cltlLmNoYXJDb2RlQXQobildPDwyfHJbZS5jaGFyQ29kZUF0KG4rMSldPj40LGNbdSsrXT0yNTUmdCksMT09PXMmJih0PXJbZS5jaGFyQ29kZUF0KG4pXTw8MTB8cltlLmNoYXJDb2RlQXQobisxKV08PDR8cltlLmNoYXJDb2RlQXQobisyKV0+PjIsY1t1KytdPXQ+PjgmMjU1LGNbdSsrXT0yNTUmdCksY30sdC5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWUubGVuZ3RoLG89ciUzLGk9W10sYT0xNjM4MyxsPTAsYz1yLW87bDxjO2wrPWEpaS5wdXNoKHMoZSxsLGwrYT5jP2M6bCthKSk7cmV0dXJuIDE9PT1vPyh0PWVbci0xXSxpLnB1c2goblt0Pj4yXStuW3Q8PDQmNjNdK1wiPT1cIikpOjI9PT1vJiYodD0oZVtyLTJdPDw4KStlW3ItMV0saS5wdXNoKG5bdD4+MTBdK25bdD4+NCY2M10rblt0PDwyJjYzXStcIj1cIikpLGkuam9pbihcIlwiKX07Zm9yKHZhciBuPVtdLHI9W10sbz1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LGk9XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIsYT0wO2E8NjQ7KythKW5bYV09aVthXSxyW2kuY2hhckNvZGVBdChhKV09YTtmdW5jdGlvbiBsKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQlND4wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDRcIik7dmFyIG49ZS5pbmRleE9mKFwiPVwiKTtyZXR1cm4tMT09PW4mJihuPXQpLFtuLG49PT10PzA6NC1uJTRdfWZ1bmN0aW9uIHMoZSx0LHIpe2Zvcih2YXIgbyxpLGE9W10sbD10O2w8cjtsKz0zKW89KGVbbF08PDE2JjE2NzExNjgwKSsoZVtsKzFdPDw4JjY1MjgwKSsoMjU1JmVbbCsyXSksYS5wdXNoKG5bKGk9byk+PjE4JjYzXStuW2k+PjEyJjYzXStuW2k+PjYmNjNdK25bNjMmaV0pO3JldHVybiBhLmpvaW4oXCJcIil9cltcIi1cIi5jaGFyQ29kZUF0KDApXT02MixyW1wiX1wiLmNoYXJDb2RlQXQoMCldPTYzfSw0ODU6KGUsdCxuKT0+e2NvbnN0IHI9big2MCksbz1uKDIxNSksaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcihcIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tXCIpOm51bGw7dC5CdWZmZXI9cyx0LlNsb3dCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLHMuYWxsb2MoK2UpfSx0LklOU1BFQ1RfTUFYX0JZVEVTPTUwO2NvbnN0IGE9MjE0NzQ4MzY0NztmdW5jdGlvbiBsKGUpe2lmKGU+YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJytlKydcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKTtjb25zdCB0PW5ldyBVaW50OEFycmF5KGUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YodCxzLnByb3RvdHlwZSksdH1mdW5jdGlvbiBzKGUsdCxuKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gZihlKX1yZXR1cm4gYyhlLHQsbil9ZnVuY3Rpb24gYyhlLHQsbil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJlwiXCIhPT10fHwodD1cInV0ZjhcIiksIXMuaXNFbmNvZGluZyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrdCk7Y29uc3Qgbj0wfGcoZSx0KTtsZXQgcj1sKG4pO2NvbnN0IG89ci53cml0ZShlLHQpO3JldHVybiBvIT09biYmKHI9ci5zbGljZSgwLG8pKSxyfShlLHQpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhlKSlyZXR1cm4gZnVuY3Rpb24oZSl7aWYoWShlLFVpbnQ4QXJyYXkpKXtjb25zdCB0PW5ldyBVaW50OEFycmF5KGUpO3JldHVybiBwKHQuYnVmZmVyLHQuYnl0ZU9mZnNldCx0LmJ5dGVMZW5ndGgpfXJldHVybiBkKGUpfShlKTtpZihudWxsPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSBcIit0eXBlb2YgZSk7aWYoWShlLEFycmF5QnVmZmVyKXx8ZSYmWShlLmJ1ZmZlcixBcnJheUJ1ZmZlcikpcmV0dXJuIHAoZSx0LG4pO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciYmKFkoZSxTaGFyZWRBcnJheUJ1ZmZlcil8fGUmJlkoZS5idWZmZXIsU2hhcmVkQXJyYXlCdWZmZXIpKSlyZXR1cm4gcChlLHQsbik7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtjb25zdCByPWUudmFsdWVPZiYmZS52YWx1ZU9mKCk7aWYobnVsbCE9ciYmciE9PWUpcmV0dXJuIHMuZnJvbShyLHQsbik7Y29uc3Qgbz1mdW5jdGlvbihlKXtpZihzLmlzQnVmZmVyKGUpKXtjb25zdCB0PTB8aChlLmxlbmd0aCksbj1sKHQpO3JldHVybiAwPT09bi5sZW5ndGh8fGUuY29weShuLDAsMCx0KSxufXJldHVybiB2b2lkIDAhPT1lLmxlbmd0aD9cIm51bWJlclwiIT10eXBlb2YgZS5sZW5ndGh8fEsoZS5sZW5ndGgpP2woMCk6ZChlKTpcIkJ1ZmZlclwiPT09ZS50eXBlJiZBcnJheS5pc0FycmF5KGUuZGF0YSk/ZChlLmRhdGEpOnZvaWQgMH0oZSk7aWYobylyZXR1cm4gbztpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGVbU3ltYm9sLnRvUHJpbWl0aXZlXSlyZXR1cm4gcy5mcm9tKGVbU3ltYm9sLnRvUHJpbWl0aXZlXShcInN0cmluZ1wiKSx0LG4pO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSBcIit0eXBlb2YgZSl9ZnVuY3Rpb24gdShlKXtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInK2UrJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIHUoZSksbChlPDA/MDowfGgoZSkpfWZ1bmN0aW9uIGQoZSl7Y29uc3QgdD1lLmxlbmd0aDwwPzA6MHxoKGUubGVuZ3RoKSxuPWwodCk7Zm9yKGxldCByPTA7cjx0O3IrPTEpbltyXT0yNTUmZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBwKGUsdCxuKXtpZih0PDB8fGUuYnl0ZUxlbmd0aDx0KXRocm93IG5ldyBSYW5nZUVycm9yKCdcIm9mZnNldFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKGUuYnl0ZUxlbmd0aDx0KyhufHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJsZW5ndGhcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtsZXQgcjtyZXR1cm4gcj12b2lkIDA9PT10JiZ2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KGUpOnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkoZSx0KTpuZXcgVWludDhBcnJheShlLHQsbiksT2JqZWN0LnNldFByb3RvdHlwZU9mKHIscy5wcm90b3R5cGUpLHJ9ZnVuY3Rpb24gaChlKXtpZihlPj1hKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweFwiK2EudG9TdHJpbmcoMTYpK1wiIGJ5dGVzXCIpO3JldHVybiAwfGV9ZnVuY3Rpb24gZyhlLHQpe2lmKHMuaXNCdWZmZXIoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8WShlLEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoO2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGUpO2NvbnN0IG49ZS5sZW5ndGgscj1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFyJiYwPT09bilyZXR1cm4gMDtsZXQgbz0hMTtmb3IoOzspc3dpdGNoKHQpe2Nhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIG47Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIHooZSkubGVuZ3RoO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiAyKm47Y2FzZVwiaGV4XCI6cmV0dXJuIG4+Pj4xO2Nhc2VcImJhc2U2NFwiOnJldHVybiBHKGUpLmxlbmd0aDtkZWZhdWx0OmlmKG8pcmV0dXJuIHI/LTE6eihlKS5sZW5ndGg7dD0oXCJcIit0KS50b0xvd2VyQ2FzZSgpLG89ITB9fWZ1bmN0aW9uIHYoZSx0LG4pe2xldCByPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVyblwiXCI7aWYoKHZvaWQgMD09PW58fG4+dGhpcy5sZW5ndGgpJiYobj10aGlzLmxlbmd0aCksbjw9MClyZXR1cm5cIlwiO2lmKChuPj4+PTApPD0odD4+Pj0wKSlyZXR1cm5cIlwiO2ZvcihlfHwoZT1cInV0ZjhcIik7Oylzd2l0Y2goZSl7Y2FzZVwiaGV4XCI6cmV0dXJuIGsodGhpcyx0LG4pO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBFKHRoaXMsdCxuKTtjYXNlXCJhc2NpaVwiOnJldHVybiBqKHRoaXMsdCxuKTtjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gTSh0aGlzLHQsbik7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIEwodGhpcyx0LG4pO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiBSKHRoaXMsdCxuKTtkZWZhdWx0OmlmKHIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2UpO2U9KGUrXCJcIikudG9Mb3dlckNhc2UoKSxyPSEwfX1mdW5jdGlvbiBtKGUsdCxuKXtjb25zdCByPWVbdF07ZVt0XT1lW25dLGVbbl09cn1mdW5jdGlvbiBDKGUsdCxuLHIsbyl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuPyhyPW4sbj0wKTpuPjIxNDc0ODM2NDc/bj0yMTQ3NDgzNjQ3Om48LTIxNDc0ODM2NDgmJihuPS0yMTQ3NDgzNjQ4KSxLKG49K24pJiYobj1vPzA6ZS5sZW5ndGgtMSksbjwwJiYobj1lLmxlbmd0aCtuKSxuPj1lLmxlbmd0aCl7aWYobylyZXR1cm4tMTtuPWUubGVuZ3RoLTF9ZWxzZSBpZihuPDApe2lmKCFvKXJldHVybi0xO249MH1pZihcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9cy5mcm9tKHQscikpLHMuaXNCdWZmZXIodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTp5KGUsdCxuLHIsbyk7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpcmV0dXJuIHQmPTI1NSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP28/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxuKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxuKTp5KGUsW3RdLG4scixvKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyXCIpfWZ1bmN0aW9uIHkoZSx0LG4scixvKXtsZXQgaSxhPTEsbD1lLmxlbmd0aCxzPXQubGVuZ3RoO2lmKHZvaWQgMCE9PXImJihcInVjczJcIj09PShyPVN0cmluZyhyKS50b0xvd2VyQ2FzZSgpKXx8XCJ1Y3MtMlwiPT09cnx8XCJ1dGYxNmxlXCI9PT1yfHxcInV0Zi0xNmxlXCI9PT1yKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTthPTIsbC89MixzLz0yLG4vPTJ9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiAxPT09YT9lW3RdOmUucmVhZFVJbnQxNkJFKHQqYSl9aWYobyl7bGV0IHI9LTE7Zm9yKGk9bjtpPGw7aSsrKWlmKGMoZSxpKT09PWModCwtMT09PXI/MDppLXIpKXtpZigtMT09PXImJihyPWkpLGktcisxPT09cylyZXR1cm4gciphfWVsc2UtMSE9PXImJihpLT1pLXIpLHI9LTF9ZWxzZSBmb3IobitzPmwmJihuPWwtcyksaT1uO2k+PTA7aS0tKXtsZXQgbj0hMDtmb3IobGV0IHI9MDtyPHM7cisrKWlmKGMoZSxpK3IpIT09Yyh0LHIpKXtuPSExO2JyZWFrfWlmKG4pcmV0dXJuIGl9cmV0dXJuLTF9ZnVuY3Rpb24gdyhlLHQsbixyKXtuPU51bWJlcihuKXx8MDtjb25zdCBvPWUubGVuZ3RoLW47cj8ocj1OdW1iZXIocikpPm8mJihyPW8pOnI9bztjb25zdCBpPXQubGVuZ3RoO2xldCBhO2ZvcihyPmkvMiYmKHI9aS8yKSxhPTA7YTxyOysrYSl7Y29uc3Qgcj1wYXJzZUludCh0LnN1YnN0cigyKmEsMiksMTYpO2lmKEsocikpcmV0dXJuIGE7ZVtuK2FdPXJ9cmV0dXJuIGF9ZnVuY3Rpb24gYihlLHQsbixyKXtyZXR1cm4gcSh6KHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIHgoZSx0LG4scil7cmV0dXJuIHEoZnVuY3Rpb24oZSl7Y29uc3QgdD1bXTtmb3IobGV0IG49MDtuPGUubGVuZ3RoOysrbil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChuKSk7cmV0dXJuIHR9KHQpLGUsbixyKX1mdW5jdGlvbiBfKGUsdCxuLHIpe3JldHVybiBxKEcodCksZSxuLHIpfWZ1bmN0aW9uIE8oZSx0LG4scil7cmV0dXJuIHEoZnVuY3Rpb24oZSx0KXtsZXQgbixyLG87Y29uc3QgaT1bXTtmb3IobGV0IGE9MDthPGUubGVuZ3RoJiYhKCh0LT0yKTwwKTsrK2Epbj1lLmNoYXJDb2RlQXQoYSkscj1uPj44LG89biUyNTYsaS5wdXNoKG8pLGkucHVzaChyKTtyZXR1cm4gaX0odCxlLmxlbmd0aC1uKSxlLG4scil9ZnVuY3Rpb24gTChlLHQsbil7cmV0dXJuIDA9PT10JiZuPT09ZS5sZW5ndGg/ci5mcm9tQnl0ZUFycmF5KGUpOnIuZnJvbUJ5dGVBcnJheShlLnNsaWNlKHQsbikpfWZ1bmN0aW9uIEUoZSx0LG4pe249TWF0aC5taW4oZS5sZW5ndGgsbik7Y29uc3Qgcj1bXTtsZXQgbz10O2Zvcig7bzxuOyl7Y29uc3QgdD1lW29dO2xldCBpPW51bGwsYT10PjIzOT80OnQ+MjIzPzM6dD4xOTE/MjoxO2lmKG8rYTw9bil7bGV0IG4scixsLHM7c3dpdGNoKGEpe2Nhc2UgMTp0PDEyOCYmKGk9dCk7YnJlYWs7Y2FzZSAyOm49ZVtvKzFdLDEyOD09KDE5MiZuKSYmKHM9KDMxJnQpPDw2fDYzJm4scz4xMjcmJihpPXMpKTticmVhaztjYXNlIDM6bj1lW28rMV0scj1lW28rMl0sMTI4PT0oMTkyJm4pJiYxMjg9PSgxOTImcikmJihzPSgxNSZ0KTw8MTJ8KDYzJm4pPDw2fDYzJnIscz4yMDQ3JiYoczw1NTI5Nnx8cz41NzM0MykmJihpPXMpKTticmVhaztjYXNlIDQ6bj1lW28rMV0scj1lW28rMl0sbD1lW28rM10sMTI4PT0oMTkyJm4pJiYxMjg9PSgxOTImcikmJjEyOD09KDE5MiZsKSYmKHM9KDE1JnQpPDwxOHwoNjMmbik8PDEyfCg2MyZyKTw8Nnw2MyZsLHM+NjU1MzUmJnM8MTExNDExMiYmKGk9cykpfX1udWxsPT09aT8oaT02NTUzMyxhPTEpOmk+NjU1MzUmJihpLT02NTUzNixyLnB1c2goaT4+PjEwJjEwMjN8NTUyOTYpLGk9NTYzMjB8MTAyMyZpKSxyLnB1c2goaSksbys9YX1yZXR1cm4gZnVuY3Rpb24oZSl7Y29uc3QgdD1lLmxlbmd0aDtpZih0PD1TKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTtsZXQgbj1cIlwiLHI9MDtmb3IoO3I8dDspbis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShyLHIrPVMpKTtyZXR1cm4gbn0ocil9dC5rTWF4TGVuZ3RoPWEscy5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uKCl7dHJ5e2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkoMSksdD17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih0LFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KSw0Mj09PWUuZm9vKCl9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLHMuVFlQRURfQVJSQVlfU1VQUE9SVHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIGNvbnNvbGV8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGNvbnNvbGUuZXJyb3J8fGNvbnNvbGUuZXJyb3IoXCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC5cIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMucHJvdG90eXBlLFwicGFyZW50XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYocy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMucHJvdG90eXBlLFwib2Zmc2V0XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYocy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLHMucG9vbFNpemU9ODE5MixzLmZyb209ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBjKGUsdCxuKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mKHMucHJvdG90eXBlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YocyxVaW50OEFycmF5KSxzLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB1KGUpLGU8PTA/bChlKTp2b2lkIDAhPT10P1wic3RyaW5nXCI9PXR5cGVvZiBuP2woZSkuZmlsbCh0LG4pOmwoZSkuZmlsbCh0KTpsKGUpfShlLHQsbil9LHMuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSl9LHMuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBmKGUpfSxzLmlzQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiYhMD09PWUuX2lzQnVmZmVyJiZlIT09cy5wcm90b3R5cGV9LHMuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKFkoZSxVaW50OEFycmF5KSYmKGU9cy5mcm9tKGUsZS5vZmZzZXQsZS5ieXRlTGVuZ3RoKSksWSh0LFVpbnQ4QXJyYXkpJiYodD1zLmZyb20odCx0Lm9mZnNldCx0LmJ5dGVMZW5ndGgpKSwhcy5pc0J1ZmZlcihlKXx8IXMuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiYnVmMVwiLCBcImJ1ZjJcIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKGU9PT10KXJldHVybiAwO2xldCBuPWUubGVuZ3RoLHI9dC5sZW5ndGg7Zm9yKGxldCBvPTAsaT1NYXRoLm1pbihuLHIpO288aTsrK28paWYoZVtvXSE9PXRbb10pe249ZVtvXSxyPXRbb107YnJlYWt9cmV0dXJuIG48cj8tMTpyPG4/MTowfSxzLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxzLmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gcy5hbGxvYygwKTtsZXQgbjtpZih2b2lkIDA9PT10KWZvcih0PTAsbj0wO248ZS5sZW5ndGg7KytuKXQrPWVbbl0ubGVuZ3RoO2NvbnN0IHI9cy5hbGxvY1Vuc2FmZSh0KTtsZXQgbz0wO2ZvcihuPTA7bjxlLmxlbmd0aDsrK24pe2xldCB0PWVbbl07aWYoWSh0LFVpbnQ4QXJyYXkpKW8rdC5sZW5ndGg+ci5sZW5ndGg/KHMuaXNCdWZmZXIodCl8fCh0PXMuZnJvbSh0KSksdC5jb3B5KHIsbykpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKHIsdCxvKTtlbHNle2lmKCFzLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO3QuY29weShyLG8pfW8rPXQubGVuZ3RofXJldHVybiByfSxzLmJ5dGVMZW5ndGg9ZyxzLnByb3RvdHlwZS5faXNCdWZmZXI9ITAscy5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLmxlbmd0aDtpZihlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0c1wiKTtmb3IobGV0IHQ9MDt0PGU7dCs9MiltKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXtjb25zdCBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzXCIpO2ZvcihsZXQgdD0wO3Q8ZTt0Kz00KW0odGhpcyx0LHQrMyksbSh0aGlzLHQrMSx0KzIpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXtjb25zdCBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzXCIpO2ZvcihsZXQgdD0wO3Q8ZTt0Kz04KW0odGhpcyx0LHQrNyksbSh0aGlzLHQrMSx0KzYpLG0odGhpcyx0KzIsdCs1KSxtKHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LHMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLmxlbmd0aDtyZXR1cm4gMD09PWU/XCJcIjowPT09YXJndW1lbnRzLmxlbmd0aD9FKHRoaXMsMCxlKTp2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0scy5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9cy5wcm90b3R5cGUudG9TdHJpbmcscy5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCFzLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO3JldHVybiB0aGlzPT09ZXx8MD09PXMuY29tcGFyZSh0aGlzLGUpfSxzLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7bGV0IGU9XCJcIjtjb25zdCBuPXQuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIGU9dGhpcy50b1N0cmluZyhcImhleFwiLDAsbikucmVwbGFjZSgvKC57Mn0pL2csXCIkMSBcIikudHJpbSgpLHRoaXMubGVuZ3RoPm4mJihlKz1cIiAuLi4gXCIpLFwiPEJ1ZmZlciBcIitlK1wiPlwifSxpJiYocy5wcm90b3R5cGVbaV09cy5wcm90b3R5cGUuaW5zcGVjdCkscy5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlLHQsbixyLG8pe2lmKFkoZSxVaW50OEFycmF5KSYmKGU9cy5mcm9tKGUsZS5vZmZzZXQsZS5ieXRlTGVuZ3RoKSksIXMuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidGFyZ2V0XCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBlKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PW8mJihvPXRoaXMubGVuZ3RoKSx0PDB8fG4+ZS5sZW5ndGh8fHI8MHx8bz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm91dCBvZiByYW5nZSBpbmRleFwiKTtpZihyPj1vJiZ0Pj1uKXJldHVybiAwO2lmKHI+PW8pcmV0dXJuLTE7aWYodD49bilyZXR1cm4gMTtpZih0aGlzPT09ZSlyZXR1cm4gMDtsZXQgaT0obz4+Pj0wKS0ocj4+Pj0wKSxhPShuPj4+PTApLSh0Pj4+PTApO2NvbnN0IGw9TWF0aC5taW4oaSxhKSxjPXRoaXMuc2xpY2UocixvKSx1PWUuc2xpY2UodCxuKTtmb3IobGV0IGU9MDtlPGw7KytlKWlmKGNbZV0hPT11W2VdKXtpPWNbZV0sYT11W2VdO2JyZWFrfXJldHVybiBpPGE/LTE6YTxpPzE6MH0scy5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGUsdCxuKX0scy5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIEModGhpcyxlLHQsbiwhMCl9LHMucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gQyh0aGlzLGUsdCxuLCExKX0scy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LG4scil7aWYodm9pZCAwPT09dClyPVwidXRmOFwiLG49dGhpcy5sZW5ndGgsdD0wO2Vsc2UgaWYodm9pZCAwPT09biYmXCJzdHJpbmdcIj09dHlwZW9mIHQpcj10LG49dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcihcIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkXCIpO3Q+Pj49MCxpc0Zpbml0ZShuKT8obj4+Pj0wLHZvaWQgMD09PXImJihyPVwidXRmOFwiKSk6KHI9bixuPXZvaWQgMCl9Y29uc3Qgbz10aGlzLmxlbmd0aC10O2lmKCh2b2lkIDA9PT1ufHxuPm8pJiYobj1vKSxlLmxlbmd0aD4wJiYobjwwfHx0PDApfHx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHNcIik7cnx8KHI9XCJ1dGY4XCIpO2xldCBpPSExO2Zvcig7Oylzd2l0Y2gocil7Y2FzZVwiaGV4XCI6cmV0dXJuIHcodGhpcyxlLHQsbik7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIGIodGhpcyxlLHQsbik7Y2FzZVwiYXNjaWlcIjpjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4geCh0aGlzLGUsdCxuKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gXyh0aGlzLGUsdCxuKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gTyh0aGlzLGUsdCxuKTtkZWZhdWx0OmlmKGkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK3IpO3I9KFwiXCIrcikudG9Mb3dlckNhc2UoKSxpPSEwfX0scy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJCdWZmZXJcIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2NvbnN0IFM9NDA5NjtmdW5jdGlvbiBqKGUsdCxuKXtsZXQgcj1cIlwiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKGxldCBvPXQ7bzxuOysrbylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZlW29dKTtyZXR1cm4gcn1mdW5jdGlvbiBNKGUsdCxuKXtsZXQgcj1cIlwiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKGxldCBvPXQ7bzxuOysrbylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbb10pO3JldHVybiByfWZ1bmN0aW9uIGsoZSx0LG4pe2NvbnN0IHI9ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIW58fG48MHx8bj5yKSYmKG49cik7bGV0IG89XCJcIjtmb3IobGV0IHI9dDtyPG47KytyKW8rPVhbZVtyXV07cmV0dXJuIG99ZnVuY3Rpb24gUihlLHQsbil7Y29uc3Qgcj1lLnNsaWNlKHQsbik7bGV0IG89XCJcIjtmb3IobGV0IGU9MDtlPHIubGVuZ3RoLTE7ZSs9MilvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHJbZV0rMjU2KnJbZSsxXSk7cmV0dXJuIG99ZnVuY3Rpb24gUChlLHQsbil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvZmZzZXQgaXMgbm90IHVpbnRcIik7aWYoZSt0Pm4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoXCIpfWZ1bmN0aW9uIEkoZSx0LG4scixvLGkpe2lmKCFzLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+b3x8dDxpKXRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBBKGUsdCxuLHIsbyl7Tih0LHIsbyxlLG4sNyk7bGV0IGk9TnVtYmVyKHQmQmlnSW50KDQyOTQ5NjcyOTUpKTtlW24rK109aSxpPj49OCxlW24rK109aSxpPj49OCxlW24rK109aSxpPj49OCxlW24rK109aTtsZXQgYT1OdW1iZXIodD4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiBlW24rK109YSxhPj49OCxlW24rK109YSxhPj49OCxlW24rK109YSxhPj49OCxlW24rK109YSxufWZ1bmN0aW9uIFQoZSx0LG4scixvKXtOKHQscixvLGUsbiw3KTtsZXQgaT1OdW1iZXIodCZCaWdJbnQoNDI5NDk2NzI5NSkpO2Vbbis3XT1pLGk+Pj04LGVbbis2XT1pLGk+Pj04LGVbbis1XT1pLGk+Pj04LGVbbis0XT1pO2xldCBhPU51bWJlcih0Pj5CaWdJbnQoMzIpJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7cmV0dXJuIGVbbiszXT1hLGE+Pj04LGVbbisyXT1hLGE+Pj04LGVbbisxXT1hLGE+Pj04LGVbbl09YSxuKzh9ZnVuY3Rpb24gSChlLHQsbixyLG8saSl7aWYobityPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBCKGUsdCxuLHIsaSl7cmV0dXJuIHQ9K3Qsbj4+Pj0wLGl8fEgoZSwwLG4sNCksby53cml0ZShlLHQsbixyLDIzLDQpLG4rNH1mdW5jdGlvbiBWKGUsdCxuLHIsaSl7cmV0dXJuIHQ9K3Qsbj4+Pj0wLGl8fEgoZSwwLG4sOCksby53cml0ZShlLHQsbixyLDUyLDgpLG4rOH1zLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe2NvbnN0IG49dGhpcy5sZW5ndGg7KGU9fn5lKTwwPyhlKz1uKTwwJiYoZT0wKTplPm4mJihlPW4pLCh0PXZvaWQgMD09PXQ/bjp+fnQpPDA/KHQrPW4pPDAmJih0PTApOnQ+biYmKHQ9biksdDxlJiYodD1lKTtjb25zdCByPXRoaXMuc3ViYXJyYXkoZSx0KTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHIscy5wcm90b3R5cGUpLHJ9LHMucHJvdG90eXBlLnJlYWRVaW50TEU9cy5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQsbil7ZT4+Pj0wLHQ+Pj49MCxufHxQKGUsdCx0aGlzLmxlbmd0aCk7bGV0IHI9dGhpc1tlXSxvPTEsaT0wO2Zvcig7KytpPHQmJihvKj0yNTYpOylyKz10aGlzW2UraV0qbztyZXR1cm4gcn0scy5wcm90b3R5cGUucmVhZFVpbnRCRT1zLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGUsdCxuKXtlPj4+PTAsdD4+Pj0wLG58fFAoZSx0LHRoaXMubGVuZ3RoKTtsZXQgcj10aGlzW2UrLS10XSxvPTE7Zm9yKDt0PjAmJihvKj0yNTYpOylyKz10aGlzW2UrLS10XSpvO3JldHVybiByfSxzLnByb3RvdHlwZS5yZWFkVWludDg9cy5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxQKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0scy5wcm90b3R5cGUucmVhZFVpbnQxNkxFPXMucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8UChlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxzLnByb3RvdHlwZS5yZWFkVWludDE2QkU9cy5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxQKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LHMucHJvdG90eXBlLnJlYWRVaW50MzJMRT1zLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxzLnByb3RvdHlwZS5yZWFkVWludDMyQkU9cy5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxQKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0scy5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NExFPUooKGZ1bmN0aW9uKGUpe0YoZT4+Pj0wLFwib2Zmc2V0XCIpO2NvbnN0IHQ9dGhpc1tlXSxuPXRoaXNbZSs3XTt2b2lkIDAhPT10JiZ2b2lkIDAhPT1ufHxVKGUsdGhpcy5sZW5ndGgtOCk7Y29uc3Qgcj10KzI1Nip0aGlzWysrZV0rNjU1MzYqdGhpc1srK2VdK3RoaXNbKytlXSoyKioyNCxvPXRoaXNbKytlXSsyNTYqdGhpc1srK2VdKzY1NTM2KnRoaXNbKytlXStuKjIqKjI0O3JldHVybiBCaWdJbnQocikrKEJpZ0ludChvKTw8QmlnSW50KDMyKSl9KSkscy5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NEJFPUooKGZ1bmN0aW9uKGUpe0YoZT4+Pj0wLFwib2Zmc2V0XCIpO2NvbnN0IHQ9dGhpc1tlXSxuPXRoaXNbZSs3XTt2b2lkIDAhPT10JiZ2b2lkIDAhPT1ufHxVKGUsdGhpcy5sZW5ndGgtOCk7Y29uc3Qgcj10KjIqKjI0KzY1NTM2KnRoaXNbKytlXSsyNTYqdGhpc1srK2VdK3RoaXNbKytlXSxvPXRoaXNbKytlXSoyKioyNCs2NTUzNip0aGlzWysrZV0rMjU2KnRoaXNbKytlXStuO3JldHVybihCaWdJbnQocik8PEJpZ0ludCgzMikpK0JpZ0ludChvKX0pKSxzLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LG4pe2U+Pj49MCx0Pj4+PTAsbnx8UChlLHQsdGhpcy5sZW5ndGgpO2xldCByPXRoaXNbZV0sbz0xLGk9MDtmb3IoOysraTx0JiYobyo9MjU2KTspcis9dGhpc1tlK2ldKm87cmV0dXJuIG8qPTEyOCxyPj1vJiYoci09TWF0aC5wb3coMiw4KnQpKSxyfSxzLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oZSx0LG4pe2U+Pj49MCx0Pj4+PTAsbnx8UChlLHQsdGhpcy5sZW5ndGgpO2xldCByPXQsbz0xLGk9dGhpc1tlKy0tcl07Zm9yKDtyPjAmJihvKj0yNTYpOylpKz10aGlzW2UrLS1yXSpvO3JldHVybiBvKj0xMjgsaT49byYmKGktPU1hdGgucG93KDIsOCp0KSksaX0scy5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tlXT8tMSooMjU1LXRoaXNbZV0rMSk6dGhpc1tlXX0scy5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXtlPj4+PTAsdHx8UChlLDIsdGhpcy5sZW5ndGgpO2NvbnN0IG49dGhpc1tlXXx0aGlzW2UrMV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LHMucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7ZT4+Pj0wLHR8fFAoZSwyLHRoaXMubGVuZ3RoKTtjb25zdCBuPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxzLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8UChlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0scy5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdPDwyNHx0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM119LHMucHJvdG90eXBlLnJlYWRCaWdJbnQ2NExFPUooKGZ1bmN0aW9uKGUpe0YoZT4+Pj0wLFwib2Zmc2V0XCIpO2NvbnN0IHQ9dGhpc1tlXSxuPXRoaXNbZSs3XTt2b2lkIDAhPT10JiZ2b2lkIDAhPT1ufHxVKGUsdGhpcy5sZW5ndGgtOCk7Y29uc3Qgcj10aGlzW2UrNF0rMjU2KnRoaXNbZSs1XSs2NTUzNip0aGlzW2UrNl0rKG48PDI0KTtyZXR1cm4oQmlnSW50KHIpPDxCaWdJbnQoMzIpKStCaWdJbnQodCsyNTYqdGhpc1srK2VdKzY1NTM2KnRoaXNbKytlXSt0aGlzWysrZV0qMioqMjQpfSkpLHMucHJvdG90eXBlLnJlYWRCaWdJbnQ2NEJFPUooKGZ1bmN0aW9uKGUpe0YoZT4+Pj0wLFwib2Zmc2V0XCIpO2NvbnN0IHQ9dGhpc1tlXSxuPXRoaXNbZSs3XTt2b2lkIDAhPT10JiZ2b2lkIDAhPT1ufHxVKGUsdGhpcy5sZW5ndGgtOCk7Y29uc3Qgcj0odDw8MjQpKzY1NTM2KnRoaXNbKytlXSsyNTYqdGhpc1srK2VdK3RoaXNbKytlXTtyZXR1cm4oQmlnSW50KHIpPDxCaWdJbnQoMzIpKStCaWdJbnQodGhpc1srK2VdKjIqKjI0KzY1NTM2KnRoaXNbKytlXSsyNTYqdGhpc1srK2VdK24pfSkpLHMucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxQKGUsNCx0aGlzLmxlbmd0aCksby5yZWFkKHRoaXMsZSwhMCwyMyw0KX0scy5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSw0LHRoaXMubGVuZ3RoKSxvLnJlYWQodGhpcyxlLCExLDIzLDQpfSxzLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSw4LHRoaXMubGVuZ3RoKSxvLnJlYWQodGhpcyxlLCEwLDUyLDgpfSxzLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSw4LHRoaXMubGVuZ3RoKSxvLnJlYWQodGhpcyxlLCExLDUyLDgpfSxzLnByb3RvdHlwZS53cml0ZVVpbnRMRT1zLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXtlPStlLHQ+Pj49MCxuPj4+PTAscnx8SSh0aGlzLGUsdCxuLE1hdGgucG93KDIsOCpuKS0xLDApO2xldCBvPTEsaT0wO2Zvcih0aGlzW3RdPTI1NSZlOysraTxuJiYobyo9MjU2KTspdGhpc1t0K2ldPWUvbyYyNTU7cmV0dXJuIHQrbn0scy5wcm90b3R5cGUud3JpdGVVaW50QkU9cy5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LG4scil7ZT0rZSx0Pj4+PTAsbj4+Pj0wLHJ8fEkodGhpcyxlLHQsbixNYXRoLnBvdygyLDgqbiktMSwwKTtsZXQgbz1uLTEsaT0xO2Zvcih0aGlzW3Qrb109MjU1JmU7LS1vPj0wJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrbn0scy5wcm90b3R5cGUud3JpdGVVaW50OD1zLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCwxLDI1NSwwKSx0aGlzW3RdPTI1NSZlLHQrMX0scy5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1zLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCwyLDY1NTM1LDApLHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHQrMn0scy5wcm90b3R5cGUud3JpdGVVaW50MTZCRT1zLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCwyLDY1NTM1LDApLHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlLHQrMn0scy5wcm90b3R5cGUud3JpdGVVaW50MzJMRT1zLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksdGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlLHQrNH0scy5wcm90b3R5cGUud3JpdGVVaW50MzJCRT1zLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksdGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlLHQrNH0scy5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRMRT1KKChmdW5jdGlvbihlLHQ9MCl7cmV0dXJuIEEodGhpcyxlLHQsQmlnSW50KDApLEJpZ0ludChcIjB4ZmZmZmZmZmZmZmZmZmZmZlwiKSl9KSkscy5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRCRT1KKChmdW5jdGlvbihlLHQ9MCl7cmV0dXJuIFQodGhpcyxlLHQsQmlnSW50KDApLEJpZ0ludChcIjB4ZmZmZmZmZmZmZmZmZmZmZlwiKSl9KSkscy5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHQ+Pj49MCwhcil7Y29uc3Qgcj1NYXRoLnBvdygyLDgqbi0xKTtJKHRoaXMsZSx0LG4sci0xLC1yKX1sZXQgbz0wLGk9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPG4mJihpKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9pPj4wKS1hJjI1NTtyZXR1cm4gdCtufSxzLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9K2UsdD4+Pj0wLCFyKXtjb25zdCByPU1hdGgucG93KDIsOCpuLTEpO0kodGhpcyxlLHQsbixyLTEsLXIpfWxldCBvPW4tMSxpPTEsYT0wO2Zvcih0aGlzW3Qrb109MjU1JmU7LS1vPj0wJiYoaSo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvKzFdJiYoYT0xKSx0aGlzW3Qrb109KGUvaT4+MCktYSYyNTU7cmV0dXJuIHQrbn0scy5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCwxLDEyNywtMTI4KSxlPDAmJihlPTI1NStlKzEpLHRoaXNbdF09MjU1JmUsdCsxfSxzLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHQ+Pj49MCxufHxJKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSx0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0KzJ9LHMucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdD4+Pj0wLG58fEkodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlLHQrMn0scy5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzNdPWU+Pj4yNCx0KzR9LHMucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdD4+Pj0wLG58fEkodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSx0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUsdCs0fSxzLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEU9SigoZnVuY3Rpb24oZSx0PTApe3JldHVybiBBKHRoaXMsZSx0LC1CaWdJbnQoXCIweDgwMDAwMDAwMDAwMDAwMDBcIiksQmlnSW50KFwiMHg3ZmZmZmZmZmZmZmZmZmZmXCIpKX0pKSxzLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0QkU9SigoZnVuY3Rpb24oZSx0PTApe3JldHVybiBUKHRoaXMsZSx0LC1CaWdJbnQoXCIweDgwMDAwMDAwMDAwMDAwMDBcIiksQmlnSW50KFwiMHg3ZmZmZmZmZmZmZmZmZmZmXCIpKX0pKSxzLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBCKHRoaXMsZSx0LCEwLG4pfSxzLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBCKHRoaXMsZSx0LCExLG4pfSxzLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gVih0aGlzLGUsdCwhMCxuKX0scy5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFYodGhpcyxlLHQsITEsbil9LHMucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LG4scil7aWYoIXMuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlclwiKTtpZihufHwobj0wKSxyfHwwPT09cnx8KHI9dGhpcy5sZW5ndGgpLHQ+PWUubGVuZ3RoJiYodD1lLmxlbmd0aCksdHx8KHQ9MCkscj4wJiZyPG4mJihyPW4pLHI9PT1uKXJldHVybiAwO2lmKDA9PT1lLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHNcIik7aWYobjwwfHxuPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kc1wiKTtyPnRoaXMubGVuZ3RoJiYocj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxyLW4mJihyPWUubGVuZ3RoLXQrbik7Y29uc3Qgbz1yLW47cmV0dXJuIHRoaXM9PT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluP3RoaXMuY29weVdpdGhpbih0LG4scik6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZSx0aGlzLnN1YmFycmF5KG4sciksdCksb30scy5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQsbixyKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQ/KHI9dCx0PTAsbj10aGlzLmxlbmd0aCk6XCJzdHJpbmdcIj09dHlwZW9mIG4mJihyPW4sbj10aGlzLmxlbmd0aCksdm9pZCAwIT09ciYmXCJzdHJpbmdcIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmdcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHImJiFzLmlzRW5jb2RpbmcocikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK3IpO2lmKDE9PT1lLmxlbmd0aCl7Y29uc3QgdD1lLmNoYXJDb2RlQXQoMCk7KFwidXRmOFwiPT09ciYmdDwxMjh8fFwibGF0aW4xXCI9PT1yKSYmKGU9dCl9fWVsc2VcIm51bWJlclwiPT10eXBlb2YgZT9lJj0yNTU6XCJib29sZWFuXCI9PXR5cGVvZiBlJiYoZT1OdW1iZXIoZSkpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk91dCBvZiByYW5nZSBpbmRleFwiKTtpZihuPD10KXJldHVybiB0aGlzO2xldCBvO2lmKHQ+Pj49MCxuPXZvaWQgMD09PW4/dGhpcy5sZW5ndGg6bj4+PjAsZXx8KGU9MCksXCJudW1iZXJcIj09dHlwZW9mIGUpZm9yKG89dDtvPG47KytvKXRoaXNbb109ZTtlbHNle2NvbnN0IGk9cy5pc0J1ZmZlcihlKT9lOnMuZnJvbShlLHIpLGE9aS5sZW5ndGg7aWYoMD09PWEpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlIFwiJytlKydcIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCBcInZhbHVlXCInKTtmb3Iobz0wO288bi10Oysrbyl0aGlzW28rdF09aVtvJWFdfXJldHVybiB0aGlzfTtjb25zdCBEPXt9O2Z1bmN0aW9uIFooZSx0LG4pe0RbZV09Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIm1lc3NhZ2VcIix7dmFsdWU6dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdGhpcy5uYW1lPWAke3RoaXMubmFtZX0gWyR7ZX1dYCx0aGlzLnN0YWNrLGRlbGV0ZSB0aGlzLm5hbWV9Z2V0IGNvZGUoKXtyZXR1cm4gZX1zZXQgY29kZShlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImNvZGVcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZSx3cml0YWJsZTohMH0pfXRvU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy5uYW1lfSBbJHtlfV06ICR7dGhpcy5tZXNzYWdlfWB9fX1mdW5jdGlvbiAkKGUpe2xldCB0PVwiXCIsbj1lLmxlbmd0aDtjb25zdCByPVwiLVwiPT09ZVswXT8xOjA7Zm9yKDtuPj1yKzQ7bi09Myl0PWBfJHtlLnNsaWNlKG4tMyxuKX0ke3R9YDtyZXR1cm5gJHtlLnNsaWNlKDAsbil9JHt0fWB9ZnVuY3Rpb24gTihlLHQsbixyLG8saSl7aWYoZT5ufHxlPHQpe2NvbnN0IHI9XCJiaWdpbnRcIj09dHlwZW9mIHQ/XCJuXCI6XCJcIjtsZXQgbzt0aHJvdyBvPWk+Mz8wPT09dHx8dD09PUJpZ0ludCgwKT9gPj0gMCR7cn0gYW5kIDwgMiR7cn0gKiogJHs4KihpKzEpfSR7cn1gOmA+PSAtKDIke3J9ICoqICR7OCooaSsxKS0xfSR7cn0pIGFuZCA8IDIgKiogJHs4KihpKzEpLTF9JHtyfWA6YD49ICR7dH0ke3J9IGFuZCA8PSAke259JHtyfWAsbmV3IEQuRVJSX09VVF9PRl9SQU5HRShcInZhbHVlXCIsbyxlKX0hZnVuY3Rpb24oZSx0LG4pe0YodCxcIm9mZnNldFwiKSx2b2lkIDAhPT1lW3RdJiZ2b2lkIDAhPT1lW3Qrbl18fFUodCxlLmxlbmd0aC0obisxKSl9KHIsbyxpKX1mdW5jdGlvbiBGKGUsdCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEQuRVJSX0lOVkFMSURfQVJHX1RZUEUodCxcIm51bWJlclwiLGUpfWZ1bmN0aW9uIFUoZSx0LG4pe2lmKE1hdGguZmxvb3IoZSkhPT1lKXRocm93IEYoZSxuKSxuZXcgRC5FUlJfT1VUX09GX1JBTkdFKG58fFwib2Zmc2V0XCIsXCJhbiBpbnRlZ2VyXCIsZSk7aWYodDwwKXRocm93IG5ldyBELkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUzt0aHJvdyBuZXcgRC5FUlJfT1VUX09GX1JBTkdFKG58fFwib2Zmc2V0XCIsYD49ICR7bj8xOjB9IGFuZCA8PSAke3R9YCxlKX1aKFwiRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBlP2Ake2V9IGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kc2A6XCJBdHRlbXB0IHRvIGFjY2VzcyBtZW1vcnkgb3V0c2lkZSBidWZmZXIgYm91bmRzXCJ9KSxSYW5nZUVycm9yKSxaKFwiRVJSX0lOVkFMSURfQVJHX1RZUEVcIiwoZnVuY3Rpb24oZSx0KXtyZXR1cm5gVGhlIFwiJHtlfVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgdH1gfSksVHlwZUVycm9yKSxaKFwiRVJSX09VVF9PRl9SQU5HRVwiLChmdW5jdGlvbihlLHQsbil7bGV0IHI9YFRoZSB2YWx1ZSBvZiBcIiR7ZX1cIiBpcyBvdXQgb2YgcmFuZ2UuYCxvPW47cmV0dXJuIE51bWJlci5pc0ludGVnZXIobikmJk1hdGguYWJzKG4pPjIqKjMyP289JChTdHJpbmcobikpOlwiYmlnaW50XCI9PXR5cGVvZiBuJiYobz1TdHJpbmcobiksKG4+QmlnSW50KDIpKipCaWdJbnQoMzIpfHxuPC0oQmlnSW50KDIpKipCaWdJbnQoMzIpKSkmJihvPSQobykpLG8rPVwiblwiKSxyKz1gIEl0IG11c3QgYmUgJHt0fS4gUmVjZWl2ZWQgJHtvfWAscn0pLFJhbmdlRXJyb3IpO2NvbnN0IFc9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiB6KGUsdCl7bGV0IG47dD10fHwxLzA7Y29uc3Qgcj1lLmxlbmd0aDtsZXQgbz1udWxsO2NvbnN0IGk9W107Zm9yKGxldCBhPTA7YTxyOysrYSl7aWYobj1lLmNoYXJDb2RlQXQoYSksbj41NTI5NSYmbjw1NzM0NCl7aWYoIW8pe2lmKG4+NTYzMTkpeyh0LT0zKT4tMSYmaS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihhKzE9PT1yKXsodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9bz1uO2NvbnRpbnVlfWlmKG48NTYzMjApeyh0LT0zKT4tMSYmaS5wdXNoKDIzOSwxOTEsMTg5KSxvPW47Y29udGludWV9bj02NTUzNisoby01NTI5Njw8MTB8bi01NjMyMCl9ZWxzZSBvJiYodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSk7aWYobz1udWxsLG48MTI4KXtpZigodC09MSk8MClicmVhaztpLnB1c2gobil9ZWxzZSBpZihuPDIwNDgpe2lmKCh0LT0yKTwwKWJyZWFrO2kucHVzaChuPj42fDE5Miw2MyZufDEyOCl9ZWxzZSBpZihuPDY1NTM2KXtpZigodC09Myk8MClicmVhaztpLnB1c2gobj4+MTJ8MjI0LG4+PjYmNjN8MTI4LDYzJm58MTI4KX1lbHNle2lmKCEobjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvZGUgcG9pbnRcIik7aWYoKHQtPTQpPDApYnJlYWs7aS5wdXNoKG4+PjE4fDI0MCxuPj4xMiY2M3wxMjgsbj4+NiY2M3wxMjgsNjMmbnwxMjgpfX1yZXR1cm4gaX1mdW5jdGlvbiBHKGUpe3JldHVybiByLnRvQnl0ZUFycmF5KGZ1bmN0aW9uKGUpe2lmKChlPShlPWUuc3BsaXQoXCI9XCIpWzBdKS50cmltKCkucmVwbGFjZShXLFwiXCIpKS5sZW5ndGg8MilyZXR1cm5cIlwiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9XCI9XCI7cmV0dXJuIGV9KGUpKX1mdW5jdGlvbiBxKGUsdCxuLHIpe2xldCBvO2ZvcihvPTA7bzxyJiYhKG8rbj49dC5sZW5ndGh8fG8+PWUubGVuZ3RoKTsrK28pdFtvK25dPWVbb107cmV0dXJuIG99ZnVuY3Rpb24gWShlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgdHx8bnVsbCE9ZSYmbnVsbCE9ZS5jb25zdHJ1Y3RvciYmbnVsbCE9ZS5jb25zdHJ1Y3Rvci5uYW1lJiZlLmNvbnN0cnVjdG9yLm5hbWU9PT10Lm5hbWV9ZnVuY3Rpb24gSyhlKXtyZXR1cm4gZSE9ZX1jb25zdCBYPWZ1bmN0aW9uKCl7Y29uc3QgZT1cIjAxMjM0NTY3ODlhYmNkZWZcIix0PW5ldyBBcnJheSgyNTYpO2ZvcihsZXQgbj0wO248MTY7KytuKXtjb25zdCByPTE2Km47Zm9yKGxldCBvPTA7bzwxNjsrK28pdFtyK29dPWVbbl0rZVtvXX1yZXR1cm4gdH0oKTtmdW5jdGlvbiBKKGUpe3JldHVyblwidW5kZWZpbmVkXCI9PXR5cGVvZiBCaWdJbnQ/UTplfWZ1bmN0aW9uIFEoKXt0aHJvdyBuZXcgRXJyb3IoXCJCaWdJbnQgbm90IHN1cHBvcnRlZFwiKX19LDQ2NTplPT57dmFyIHQsbj1cIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51bGwscj1uJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLmFwcGx5P24uYXBwbHk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChlLHQsbil9O3Q9biYmXCJmdW5jdGlvblwiPT10eXBlb2Ygbi5vd25LZXlzP24ub3duS2V5czpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKSl9OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKX07dmFyIG89TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihlKXtyZXR1cm4gZSE9ZX07ZnVuY3Rpb24gaSgpe2kuaW5pdC5jYWxsKHRoaXMpfWUuZXhwb3J0cz1pLGUuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLHIpe2Z1bmN0aW9uIG8obil7ZS5yZW1vdmVMaXN0ZW5lcih0LGkpLHIobil9ZnVuY3Rpb24gaSgpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGUucmVtb3ZlTGlzdGVuZXImJmUucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLG8pLG4oW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX1nKGUsdCxpLHtvbmNlOiEwfSksXCJlcnJvclwiIT09dCYmZnVuY3Rpb24oZSx0LG4pe1wiZnVuY3Rpb25cIj09dHlwZW9mIGUub24mJmcoZSxcImVycm9yXCIsdCx7b25jZTohMH0pfShlLG8pfSkpfSxpLkV2ZW50RW1pdHRlcj1pLGkucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLGkucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLGkucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciBhPTEwO2Z1bmN0aW9uIGwoZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBlKX1mdW5jdGlvbiBzKGUpe3JldHVybiB2b2lkIDA9PT1lLl9tYXhMaXN0ZW5lcnM/aS5kZWZhdWx0TWF4TGlzdGVuZXJzOmUuX21heExpc3RlbmVyc31mdW5jdGlvbiBjKGUsdCxuLHIpe3ZhciBvLGksYSxjO2lmKGwobiksdm9pZCAwPT09KGk9ZS5fZXZlbnRzKT8oaT1lLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxlLl9ldmVudHNDb3VudD0wKToodm9pZCAwIT09aS5uZXdMaXN0ZW5lciYmKGUuZW1pdChcIm5ld0xpc3RlbmVyXCIsdCxuLmxpc3RlbmVyP24ubGlzdGVuZXI6biksaT1lLl9ldmVudHMpLGE9aVt0XSksdm9pZCAwPT09YSlhPWlbdF09biwrK2UuX2V2ZW50c0NvdW50O2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYT9hPWlbdF09cj9bbixhXTpbYSxuXTpyP2EudW5zaGlmdChuKTphLnB1c2gobiksKG89cyhlKSk+MCYmYS5sZW5ndGg+byYmIWEud2FybmVkKXthLndhcm5lZD0hMDt2YXIgdT1uZXcgRXJyb3IoXCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuIFwiK2EubGVuZ3RoK1wiIFwiK1N0cmluZyh0KStcIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0XCIpO3UubmFtZT1cIk1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZ1wiLHUuZW1pdHRlcj1lLHUudHlwZT10LHUuY291bnQ9YS5sZW5ndGgsYz11LGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKGMpfXJldHVybiBlfWZ1bmN0aW9uIHUoKXtpZighdGhpcy5maXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1bWVudHMpfWZ1bmN0aW9uIGYoZSx0LG4pe3ZhciByPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDplLHR5cGU6dCxsaXN0ZW5lcjpufSxvPXUuYmluZChyKTtyZXR1cm4gby5saXN0ZW5lcj1uLHIud3JhcEZuPW8sb31mdW5jdGlvbiBkKGUsdCxuKXt2YXIgcj1lLl9ldmVudHM7aWYodm9pZCAwPT09cilyZXR1cm5bXTt2YXIgbz1yW3RdO3JldHVybiB2b2lkIDA9PT1vP1tdOlwiZnVuY3Rpb25cIj09dHlwZW9mIG8/bj9bby5saXN0ZW5lcnx8b106W29dOm4/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBBcnJheShlLmxlbmd0aCksbj0wO248dC5sZW5ndGg7KytuKXRbbl09ZVtuXS5saXN0ZW5lcnx8ZVtuXTtyZXR1cm4gdH0obyk6aChvLG8ubGVuZ3RoKX1mdW5jdGlvbiBwKGUpe3ZhciB0PXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT10KXt2YXIgbj10W2VdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pcmV0dXJuIDE7aWYodm9pZCAwIT09bilyZXR1cm4gbi5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgbj1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3IpbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGcoZSx0LG4scil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5vbilyLm9uY2U/ZS5vbmNlKHQsbik6ZS5vbih0LG4pO2Vsc2V7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZS5hZGRFdmVudExpc3RlbmVyKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImVtaXR0ZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGUpO2UuYWRkRXZlbnRMaXN0ZW5lcih0LChmdW5jdGlvbiBvKGkpe3Iub25jZSYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbyksbihpKX0pKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KGksXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldDpmdW5jdGlvbihlKXtpZihcIm51bWJlclwiIT10eXBlb2YgZXx8ZTwwfHxvKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytlK1wiLlwiKTthPWV9fSksaS5pbml0PWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5fZXZlbnRzJiZ0aGlzLl9ldmVudHMhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0saS5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKGUpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlfHxlPDB8fG8oZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK2UrXCIuXCIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9ZSx0aGlzfSxpLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gcyh0aGlzKX0saS5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdC5wdXNoKGFyZ3VtZW50c1tuXSk7dmFyIG89XCJlcnJvclwiPT09ZSxpPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1pKW89byYmdm9pZCAwPT09aS5lcnJvcjtlbHNlIGlmKCFvKXJldHVybiExO2lmKG8pe3ZhciBhO2lmKHQubGVuZ3RoPjAmJihhPXRbMF0pLGEgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBhO3ZhciBsPW5ldyBFcnJvcihcIlVuaGFuZGxlZCBlcnJvci5cIisoYT9cIiAoXCIrYS5tZXNzYWdlK1wiKVwiOlwiXCIpKTt0aHJvdyBsLmNvbnRleHQ9YSxsfXZhciBzPWlbZV07aWYodm9pZCAwPT09cylyZXR1cm4hMTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBzKXIocyx0aGlzLHQpO2Vsc2V7dmFyIGM9cy5sZW5ndGgsdT1oKHMsYyk7Zm9yKG49MDtuPGM7KytuKXIodVtuXSx0aGlzLHQpfXJldHVybiEwfSxpLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3JldHVybiBjKHRoaXMsZSx0LCExKX0saS5wcm90b3R5cGUub249aS5wcm90b3R5cGUuYWRkTGlzdGVuZXIsaS5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGModGhpcyxlLHQsITApfSxpLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwodCksdGhpcy5vbihlLGYodGhpcyxlLHQpKSx0aGlzfSxpLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwodCksdGhpcy5wcmVwZW5kTGlzdGVuZXIoZSxmKHRoaXMsZSx0KSksdGhpc30saS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8saSxhO2lmKGwodCksdm9pZCAwPT09KHI9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT0obj1yW2VdKSlyZXR1cm4gdGhpcztpZihuPT09dHx8bi5saXN0ZW5lcj09PXQpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTooZGVsZXRlIHJbZV0sci5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIixlLG4ubGlzdGVuZXJ8fHQpKTtlbHNlIGlmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIG4pe2ZvcihvPS0xLGk9bi5sZW5ndGgtMTtpPj0wO2ktLSlpZihuW2ldPT09dHx8bltpXS5saXN0ZW5lcj09PXQpe2E9bltpXS5saXN0ZW5lcixvPWk7YnJlYWt9aWYobzwwKXJldHVybiB0aGlzOzA9PT1vP24uc2hpZnQoKTpmdW5jdGlvbihlLHQpe2Zvcig7dCsxPGUubGVuZ3RoO3QrKyllW3RdPWVbdCsxXTtlLnBvcCgpfShuLG8pLDE9PT1uLmxlbmd0aCYmKHJbZV09blswXSksdm9pZCAwIT09ci5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIixlLGF8fHQpfXJldHVybiB0aGlzfSxpLnByb3RvdHlwZS5vZmY9aS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIsaS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3ZhciB0LG4scjtpZih2b2lkIDA9PT0obj10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PW4ucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTp2b2lkIDAhPT1uW2VdJiYoMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTpkZWxldGUgbltlXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIG8saT1PYmplY3Qua2V5cyhuKTtmb3Iocj0wO3I8aS5sZW5ndGg7KytyKVwicmVtb3ZlTGlzdGVuZXJcIiE9PShvPWlbcl0pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhvKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJyZW1vdmVMaXN0ZW5lclwiKSx0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoXCJmdW5jdGlvblwiPT10eXBlb2YodD1uW2VdKSl0aGlzLnJlbW92ZUxpc3RlbmVyKGUsdCk7ZWxzZSBpZih2b2lkIDAhPT10KWZvcihyPXQubGVuZ3RoLTE7cj49MDtyLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihlLHRbcl0pO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGQodGhpcyxlLCEwKX0saS5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybiBkKHRoaXMsZSwhMSl9LGkubGlzdGVuZXJDb3VudD1mdW5jdGlvbihlLHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGUubGlzdGVuZXJDb3VudD9lLmxpc3RlbmVyQ291bnQodCk6cC5jYWxsKGUsdCl9LGkucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9cCxpLnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/dCh0aGlzLl9ldmVudHMpOltdfX0sMjE1OihlLHQpPT57dC5yZWFkPWZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGksYSxsPTgqby1yLTEscz0oMTw8bCktMSxjPXM+PjEsdT0tNyxmPW4/by0xOjAsZD1uPy0xOjEscD1lW3QrZl07Zm9yKGYrPWQsaT1wJigxPDwtdSktMSxwPj49LXUsdSs9bDt1PjA7aT0yNTYqaStlW3QrZl0sZis9ZCx1LT04KTtmb3IoYT1pJigxPDwtdSktMSxpPj49LXUsdSs9cjt1PjA7YT0yNTYqYStlW3QrZl0sZis9ZCx1LT04KTtpZigwPT09aSlpPTEtYztlbHNle2lmKGk9PT1zKXJldHVybiBhP05hTjoxLzAqKHA/LTE6MSk7YSs9TWF0aC5wb3coMixyKSxpLT1jfXJldHVybihwPy0xOjEpKmEqTWF0aC5wb3coMixpLXIpfSx0LndyaXRlPWZ1bmN0aW9uKGUsdCxuLHIsbyxpKXt2YXIgYSxsLHMsYz04Kmktby0xLHU9KDE8PGMpLTEsZj11Pj4xLGQ9MjM9PT1vP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxwPXI/MDppLTEsaD1yPzE6LTEsZz10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGw9aXNOYU4odCk/MTowLGE9dSk6KGE9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCoocz1NYXRoLnBvdygyLC1hKSk8MSYmKGEtLSxzKj0yKSwodCs9YStmPj0xP2QvczpkKk1hdGgucG93KDIsMS1mKSkqcz49MiYmKGErKyxzLz0yKSxhK2Y+PXU/KGw9MCxhPXUpOmErZj49MT8obD0odCpzLTEpKk1hdGgucG93KDIsbyksYSs9Zik6KGw9dCpNYXRoLnBvdygyLGYtMSkqTWF0aC5wb3coMixvKSxhPTApKTtvPj04O2VbbitwXT0yNTUmbCxwKz1oLGwvPTI1NixvLT04KTtmb3IoYT1hPDxvfGwsYys9bztjPjA7ZVtuK3BdPTI1NSZhLHArPWgsYS89MjU2LGMtPTgpO2VbbitwLWhdfD0xMjgqZ319LDk1MTpmdW5jdGlvbihlLHQsbil7dmFyIHI7ZT1uLm5tZChlKSxmdW5jdGlvbigpe3ZhciBvLGk9XCJFeHBlY3RlZCBhIGZ1bmN0aW9uXCIsYT1cIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX19cIixsPVwiX19sb2Rhc2hfcGxhY2Vob2xkZXJfX1wiLHM9MzIsYz0xMjgsdT0xLzAsZj05MDA3MTk5MjU0NzQwOTkxLGQ9TmFOLHA9NDI5NDk2NzI5NSxoPVtbXCJhcnlcIixjXSxbXCJiaW5kXCIsMV0sW1wiYmluZEtleVwiLDJdLFtcImN1cnJ5XCIsOF0sW1wiY3VycnlSaWdodFwiLDE2XSxbXCJmbGlwXCIsNTEyXSxbXCJwYXJ0aWFsXCIsc10sW1wicGFydGlhbFJpZ2h0XCIsNjRdLFtcInJlYXJnXCIsMjU2XV0sZz1cIltvYmplY3QgQXJndW1lbnRzXVwiLHY9XCJbb2JqZWN0IEFycmF5XVwiLG09XCJbb2JqZWN0IEJvb2xlYW5dXCIsQz1cIltvYmplY3QgRGF0ZV1cIix5PVwiW29iamVjdCBFcnJvcl1cIix3PVwiW29iamVjdCBGdW5jdGlvbl1cIixiPVwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIix4PVwiW29iamVjdCBNYXBdXCIsXz1cIltvYmplY3QgTnVtYmVyXVwiLE89XCJbb2JqZWN0IE9iamVjdF1cIixMPVwiW29iamVjdCBQcm9taXNlXVwiLEU9XCJbb2JqZWN0IFJlZ0V4cF1cIixTPVwiW29iamVjdCBTZXRdXCIsaj1cIltvYmplY3QgU3RyaW5nXVwiLE09XCJbb2JqZWN0IFN5bWJvbF1cIixrPVwiW29iamVjdCBXZWFrTWFwXVwiLFI9XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiLFA9XCJbb2JqZWN0IERhdGFWaWV3XVwiLEk9XCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIixBPVwiW29iamVjdCBGbG9hdDY0QXJyYXldXCIsVD1cIltvYmplY3QgSW50OEFycmF5XVwiLEg9XCJbb2JqZWN0IEludDE2QXJyYXldXCIsQj1cIltvYmplY3QgSW50MzJBcnJheV1cIixWPVwiW29iamVjdCBVaW50OEFycmF5XVwiLEQ9XCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiLFo9XCJbb2JqZWN0IFVpbnQxNkFycmF5XVwiLCQ9XCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiLE49L1xcYl9fcCBcXCs9ICcnOy9nLEY9L1xcYihfX3AgXFwrPSkgJycgXFwrL2csVT0vKF9fZVxcKC4qP1xcKXxcXGJfX3RcXCkpIFxcK1xcbicnOy9nLFc9LyYoPzphbXB8bHR8Z3R8cXVvdHwjMzkpOy9nLHo9L1smPD5cIiddL2csRz1SZWdFeHAoVy5zb3VyY2UpLHE9UmVnRXhwKHouc291cmNlKSxZPS88JS0oW1xcc1xcU10rPyklPi9nLEs9LzwlKFtcXHNcXFNdKz8pJT4vZyxYPS88JT0oW1xcc1xcU10rPyklPi9nLEo9L1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxRPS9eXFx3KiQvLGVlPS9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZyx0ZT0vW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csbmU9UmVnRXhwKHRlLnNvdXJjZSkscmU9L15cXHMrLyxvZT0vXFxzLyxpZT0vXFx7KD86XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAuK1xcXSBcXCpcXC8pP1xcbj8vLGFlPS9cXHtcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoICguKylcXF0gXFwqLyxsZT0vLD8gJiAvLHNlPS9bXlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceDdmXSsvZyxjZT0vWygpPSx7fVxcW1xcXVxcL1xcc10vLHVlPS9cXFxcKFxcXFwpPy9nLGZlPS9cXCRcXHsoW15cXFxcfV0qKD86XFxcXC5bXlxcXFx9XSopKilcXH0vZyxkZT0vXFx3KiQvLHBlPS9eWy0rXTB4WzAtOWEtZl0rJC9pLGhlPS9eMGJbMDFdKyQvaSxnZT0vXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvLHZlPS9eMG9bMC03XSskL2ksbWU9L14oPzowfFsxLTldXFxkKikkLyxDZT0vW1xceGMwLVxceGQ2XFx4ZDgtXFx4ZjZcXHhmOC1cXHhmZlxcdTAxMDAtXFx1MDE3Zl0vZyx5ZT0vKCReKS8sd2U9L1snXFxuXFxyXFx1MjAyOFxcdTIwMjlcXFxcXS9nLGJlPVwiXFxcXHVkODAwLVxcXFx1ZGZmZlwiLHhlPVwiXFxcXHUwMzAwLVxcXFx1MDM2ZlxcXFx1ZmUyMC1cXFxcdWZlMmZcXFxcdTIwZDAtXFxcXHUyMGZmXCIsX2U9XCJcXFxcdTI3MDAtXFxcXHUyN2JmXCIsT2U9XCJhLXpcXFxceGRmLVxcXFx4ZjZcXFxceGY4LVxcXFx4ZmZcIixMZT1cIkEtWlxcXFx4YzAtXFxcXHhkNlxcXFx4ZDgtXFxcXHhkZVwiLEVlPVwiXFxcXHVmZTBlXFxcXHVmZTBmXCIsU2U9XCJcXFxceGFjXFxcXHhiMVxcXFx4ZDdcXFxceGY3XFxcXHgwMC1cXFxceDJmXFxcXHgzYS1cXFxceDQwXFxcXHg1Yi1cXFxceDYwXFxcXHg3Yi1cXFxceGJmXFxcXHUyMDAwLVxcXFx1MjA2ZiBcXFxcdFxcXFx4MGJcXFxcZlxcXFx4YTBcXFxcdWZlZmZcXFxcblxcXFxyXFxcXHUyMDI4XFxcXHUyMDI5XFxcXHUxNjgwXFxcXHUxODBlXFxcXHUyMDAwXFxcXHUyMDAxXFxcXHUyMDAyXFxcXHUyMDAzXFxcXHUyMDA0XFxcXHUyMDA1XFxcXHUyMDA2XFxcXHUyMDA3XFxcXHUyMDA4XFxcXHUyMDA5XFxcXHUyMDBhXFxcXHUyMDJmXFxcXHUyMDVmXFxcXHUzMDAwXCIsamU9XCJbXCIrYmUrXCJdXCIsTWU9XCJbXCIrU2UrXCJdXCIsa2U9XCJbXCIreGUrXCJdXCIsUmU9XCJcXFxcZCtcIixQZT1cIltcIitfZStcIl1cIixJZT1cIltcIitPZStcIl1cIixBZT1cIlteXCIrYmUrU2UrUmUrX2UrT2UrTGUrXCJdXCIsVGU9XCJcXFxcdWQ4M2NbXFxcXHVkZmZiLVxcXFx1ZGZmZl1cIixIZT1cIlteXCIrYmUrXCJdXCIsQmU9XCIoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9XCIsVmU9XCJbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl1cIixEZT1cIltcIitMZStcIl1cIixaZT1cIlxcXFx1MjAwZFwiLCRlPVwiKD86XCIrSWUrXCJ8XCIrQWUrXCIpXCIsTmU9XCIoPzpcIitEZStcInxcIitBZStcIilcIixGZT1cIig/Olsn4oCZXSg/OmR8bGx8bXxyZXxzfHR8dmUpKT9cIixVZT1cIig/Olsn4oCZXSg/OkR8TEx8TXxSRXxTfFR8VkUpKT9cIixXZT1cIig/OlwiK2tlK1wifFwiK1RlK1wiKT9cIix6ZT1cIltcIitFZStcIl0/XCIsR2U9emUrV2UrXCIoPzpcIitaZStcIig/OlwiK1tIZSxCZSxWZV0uam9pbihcInxcIikrXCIpXCIremUrV2UrXCIpKlwiLHFlPVwiKD86XCIrW1BlLEJlLFZlXS5qb2luKFwifFwiKStcIilcIitHZSxZZT1cIig/OlwiK1tIZStrZStcIj9cIixrZSxCZSxWZSxqZV0uam9pbihcInxcIikrXCIpXCIsS2U9UmVnRXhwKFwiWyfigJldXCIsXCJnXCIpLFhlPVJlZ0V4cChrZSxcImdcIiksSmU9UmVnRXhwKFRlK1wiKD89XCIrVGUrXCIpfFwiK1llK0dlLFwiZ1wiKSxRZT1SZWdFeHAoW0RlK1wiP1wiK0llK1wiK1wiK0ZlK1wiKD89XCIrW01lLERlLFwiJFwiXS5qb2luKFwifFwiKStcIilcIixOZStcIitcIitVZStcIig/PVwiK1tNZSxEZSskZSxcIiRcIl0uam9pbihcInxcIikrXCIpXCIsRGUrXCI/XCIrJGUrXCIrXCIrRmUsRGUrXCIrXCIrVWUsXCJcXFxcZCooPzoxU1R8Mk5EfDNSRHwoPyFbMTIzXSlcXFxcZFRIKSg/PVxcXFxifFthLXpfXSlcIixcIlxcXFxkKig/OjFzdHwybmR8M3JkfCg/IVsxMjNdKVxcXFxkdGgpKD89XFxcXGJ8W0EtWl9dKVwiLFJlLHFlXS5qb2luKFwifFwiKSxcImdcIiksZXQ9UmVnRXhwKFwiW1wiK1plK2JlK3hlK0VlK1wiXVwiKSx0dD0vW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyxudD1bXCJBcnJheVwiLFwiQnVmZmVyXCIsXCJEYXRhVmlld1wiLFwiRGF0ZVwiLFwiRXJyb3JcIixcIkZsb2F0MzJBcnJheVwiLFwiRmxvYXQ2NEFycmF5XCIsXCJGdW5jdGlvblwiLFwiSW50OEFycmF5XCIsXCJJbnQxNkFycmF5XCIsXCJJbnQzMkFycmF5XCIsXCJNYXBcIixcIk1hdGhcIixcIk9iamVjdFwiLFwiUHJvbWlzZVwiLFwiUmVnRXhwXCIsXCJTZXRcIixcIlN0cmluZ1wiLFwiU3ltYm9sXCIsXCJUeXBlRXJyb3JcIixcIlVpbnQ4QXJyYXlcIixcIlVpbnQ4Q2xhbXBlZEFycmF5XCIsXCJVaW50MTZBcnJheVwiLFwiVWludDMyQXJyYXlcIixcIldlYWtNYXBcIixcIl9cIixcImNsZWFyVGltZW91dFwiLFwiaXNGaW5pdGVcIixcInBhcnNlSW50XCIsXCJzZXRUaW1lb3V0XCJdLHJ0PS0xLG90PXt9O290W0ldPW90W0FdPW90W1RdPW90W0hdPW90W0JdPW90W1ZdPW90W0RdPW90W1pdPW90WyRdPSEwLG90W2ddPW90W3ZdPW90W1JdPW90W21dPW90W1BdPW90W0NdPW90W3ldPW90W3ddPW90W3hdPW90W19dPW90W09dPW90W0VdPW90W1NdPW90W2pdPW90W2tdPSExO3ZhciBpdD17fTtpdFtnXT1pdFt2XT1pdFtSXT1pdFtQXT1pdFttXT1pdFtDXT1pdFtJXT1pdFtBXT1pdFtUXT1pdFtIXT1pdFtCXT1pdFt4XT1pdFtfXT1pdFtPXT1pdFtFXT1pdFtTXT1pdFtqXT1pdFtNXT1pdFtWXT1pdFtEXT1pdFtaXT1pdFskXT0hMCxpdFt5XT1pdFt3XT1pdFtrXT0hMTt2YXIgYXQ9e1wiXFxcXFwiOlwiXFxcXFwiLFwiJ1wiOlwiJ1wiLFwiXFxuXCI6XCJuXCIsXCJcXHJcIjpcInJcIixcIlxcdTIwMjhcIjpcInUyMDI4XCIsXCJcXHUyMDI5XCI6XCJ1MjAyOVwifSxsdD1wYXJzZUZsb2F0LHN0PXBhcnNlSW50LGN0PVwib2JqZWN0XCI9PXR5cGVvZiBuLmcmJm4uZyYmbi5nLk9iamVjdD09PU9iamVjdCYmbi5nLHV0PVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmdD1jdHx8dXR8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxkdD10JiYhdC5ub2RlVHlwZSYmdCxwdD1kdCYmZSYmIWUubm9kZVR5cGUmJmUsaHQ9cHQmJnB0LmV4cG9ydHM9PT1kdCxndD1odCYmY3QucHJvY2Vzcyx2dD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gcHQmJnB0LnJlcXVpcmUmJnB0LnJlcXVpcmUoXCJ1dGlsXCIpLnR5cGVzfHxndCYmZ3QuYmluZGluZyYmZ3QuYmluZGluZyhcInV0aWxcIil9Y2F0Y2goZSl7fX0oKSxtdD12dCYmdnQuaXNBcnJheUJ1ZmZlcixDdD12dCYmdnQuaXNEYXRlLHl0PXZ0JiZ2dC5pc01hcCx3dD12dCYmdnQuaXNSZWdFeHAsYnQ9dnQmJnZ0LmlzU2V0LHh0PXZ0JiZ2dC5pc1R5cGVkQXJyYXk7ZnVuY3Rpb24gX3QoZSx0LG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodCk7Y2FzZSAxOnJldHVybiBlLmNhbGwodCxuWzBdKTtjYXNlIDI6cmV0dXJuIGUuY2FsbCh0LG5bMF0sblsxXSk7Y2FzZSAzOnJldHVybiBlLmNhbGwodCxuWzBdLG5bMV0sblsyXSl9cmV0dXJuIGUuYXBwbHkodCxuKX1mdW5jdGlvbiBPdChlLHQsbixyKXtmb3IodmFyIG89LTEsaT1udWxsPT1lPzA6ZS5sZW5ndGg7KytvPGk7KXt2YXIgYT1lW29dO3QocixhLG4oYSksZSl9cmV0dXJuIHJ9ZnVuY3Rpb24gTHQoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7KytuPHImJiExIT09dChlW25dLG4sZSk7KTtyZXR1cm4gZX1mdW5jdGlvbiBFdChlLHQpe2Zvcih2YXIgbj1udWxsPT1lPzA6ZS5sZW5ndGg7bi0tJiYhMSE9PXQoZVtuXSxuLGUpOyk7cmV0dXJuIGV9ZnVuY3Rpb24gU3QoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7KytuPHI7KWlmKCF0KGVbbl0sbixlKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBqdChlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aCxvPTAsaT1bXTsrK248cjspe3ZhciBhPWVbbl07dChhLG4sZSkmJihpW28rK109YSl9cmV0dXJuIGl9ZnVuY3Rpb24gTXQoZSx0KXtyZXR1cm4hKG51bGw9PWV8fCFlLmxlbmd0aCkmJkR0KGUsdCwwKT4tMX1mdW5jdGlvbiBrdChlLHQsbil7Zm9yKHZhciByPS0xLG89bnVsbD09ZT8wOmUubGVuZ3RoOysrcjxvOylpZihuKHQsZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gUnQoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGgsbz1BcnJheShyKTsrK248cjspb1tuXT10KGVbbl0sbixlKTtyZXR1cm4gb31mdW5jdGlvbiBQdChlLHQpe2Zvcih2YXIgbj0tMSxyPXQubGVuZ3RoLG89ZS5sZW5ndGg7KytuPHI7KWVbbytuXT10W25dO3JldHVybiBlfWZ1bmN0aW9uIEl0KGUsdCxuLHIpe3ZhciBvPS0xLGk9bnVsbD09ZT8wOmUubGVuZ3RoO2ZvcihyJiZpJiYobj1lWysrb10pOysrbzxpOyluPXQobixlW29dLG8sZSk7cmV0dXJuIG59ZnVuY3Rpb24gQXQoZSx0LG4scil7dmFyIG89bnVsbD09ZT8wOmUubGVuZ3RoO2ZvcihyJiZvJiYobj1lWy0tb10pO28tLTspbj10KG4sZVtvXSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIFR0KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoOysrbjxyOylpZih0KGVbbl0sbixlKSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgSHQ9RnQoXCJsZW5ndGhcIik7ZnVuY3Rpb24gQnQoZSx0LG4pe3ZhciByO3JldHVybiBuKGUsKGZ1bmN0aW9uKGUsbixvKXtpZih0KGUsbixvKSlyZXR1cm4gcj1uLCExfSkpLHJ9ZnVuY3Rpb24gVnQoZSx0LG4scil7Zm9yKHZhciBvPWUubGVuZ3RoLGk9bisocj8xOi0xKTtyP2ktLTorK2k8bzspaWYodChlW2ldLGksZSkpcmV0dXJuIGk7cmV0dXJuLTF9ZnVuY3Rpb24gRHQoZSx0LG4pe3JldHVybiB0PT10P2Z1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bi0xLG89ZS5sZW5ndGg7KytyPG87KWlmKGVbcl09PT10KXJldHVybiByO3JldHVybi0xfShlLHQsbik6VnQoZSwkdCxuKX1mdW5jdGlvbiBadChlLHQsbixyKXtmb3IodmFyIG89bi0xLGk9ZS5sZW5ndGg7KytvPGk7KWlmKHIoZVtvXSx0KSlyZXR1cm4gbztyZXR1cm4tMX1mdW5jdGlvbiAkdChlKXtyZXR1cm4gZSE9ZX1mdW5jdGlvbiBOdChlLHQpe3ZhciBuPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gbj96dChlLHQpL246ZH1mdW5jdGlvbiBGdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bzp0W2VdfX1mdW5jdGlvbiBVdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PWU/bzplW3RdfX1mdW5jdGlvbiBXdChlLHQsbixyLG8pe3JldHVybiBvKGUsKGZ1bmN0aW9uKGUsbyxpKXtuPXI/KHI9ITEsZSk6dChuLGUsbyxpKX0pKSxufWZ1bmN0aW9uIHp0KGUsdCl7Zm9yKHZhciBuLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspe3ZhciBhPXQoZVtyXSk7YSE9PW8mJihuPW49PT1vP2E6bithKX1yZXR1cm4gbn1mdW5jdGlvbiBHdChlLHQpe2Zvcih2YXIgbj0tMSxyPUFycmF5KGUpOysrbjxlOylyW25dPXQobik7cmV0dXJuIHJ9ZnVuY3Rpb24gcXQoZSl7cmV0dXJuIGU/ZS5zbGljZSgwLGZuKGUpKzEpLnJlcGxhY2UocmUsXCJcIik6ZX1mdW5jdGlvbiBZdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCl9fWZ1bmN0aW9uIEt0KGUsdCl7cmV0dXJuIFJ0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkpfWZ1bmN0aW9uIFh0KGUsdCl7cmV0dXJuIGUuaGFzKHQpfWZ1bmN0aW9uIEp0KGUsdCl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGg7KytuPHImJkR0KHQsZVtuXSwwKT4tMTspO3JldHVybiBufWZ1bmN0aW9uIFF0KGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoO24tLSYmRHQodCxlW25dLDApPi0xOyk7cmV0dXJuIG59dmFyIGVuPVV0KHvDgDpcIkFcIizDgTpcIkFcIizDgjpcIkFcIizDgzpcIkFcIizDhDpcIkFcIizDhTpcIkFcIizDoDpcImFcIizDoTpcImFcIizDojpcImFcIizDozpcImFcIizDpDpcImFcIizDpTpcImFcIizDhzpcIkNcIizDpzpcImNcIizDkDpcIkRcIizDsDpcImRcIizDiDpcIkVcIizDiTpcIkVcIizDijpcIkVcIizDizpcIkVcIizDqDpcImVcIizDqTpcImVcIizDqjpcImVcIizDqzpcImVcIizDjDpcIklcIizDjTpcIklcIizDjjpcIklcIizDjzpcIklcIizDrDpcImlcIizDrTpcImlcIizDrjpcImlcIizDrzpcImlcIizDkTpcIk5cIizDsTpcIm5cIizDkjpcIk9cIizDkzpcIk9cIizDlDpcIk9cIizDlTpcIk9cIizDljpcIk9cIizDmDpcIk9cIizDsjpcIm9cIizDszpcIm9cIizDtDpcIm9cIizDtTpcIm9cIizDtjpcIm9cIizDuDpcIm9cIizDmTpcIlVcIizDmjpcIlVcIizDmzpcIlVcIizDnDpcIlVcIizDuTpcInVcIizDujpcInVcIizDuzpcInVcIizDvDpcInVcIizDnTpcIllcIizDvTpcInlcIizDvzpcInlcIizDhjpcIkFlXCIsw6Y6XCJhZVwiLMOeOlwiVGhcIizDvjpcInRoXCIsw586XCJzc1wiLMSAOlwiQVwiLMSCOlwiQVwiLMSEOlwiQVwiLMSBOlwiYVwiLMSDOlwiYVwiLMSFOlwiYVwiLMSGOlwiQ1wiLMSIOlwiQ1wiLMSKOlwiQ1wiLMSMOlwiQ1wiLMSHOlwiY1wiLMSJOlwiY1wiLMSLOlwiY1wiLMSNOlwiY1wiLMSOOlwiRFwiLMSQOlwiRFwiLMSPOlwiZFwiLMSROlwiZFwiLMSSOlwiRVwiLMSUOlwiRVwiLMSWOlwiRVwiLMSYOlwiRVwiLMSaOlwiRVwiLMSTOlwiZVwiLMSVOlwiZVwiLMSXOlwiZVwiLMSZOlwiZVwiLMSbOlwiZVwiLMScOlwiR1wiLMSeOlwiR1wiLMSgOlwiR1wiLMSiOlwiR1wiLMSdOlwiZ1wiLMSfOlwiZ1wiLMShOlwiZ1wiLMSjOlwiZ1wiLMSkOlwiSFwiLMSmOlwiSFwiLMSlOlwiaFwiLMSnOlwiaFwiLMSoOlwiSVwiLMSqOlwiSVwiLMSsOlwiSVwiLMSuOlwiSVwiLMSwOlwiSVwiLMSpOlwiaVwiLMSrOlwiaVwiLMStOlwiaVwiLMSvOlwiaVwiLMSxOlwiaVwiLMS0OlwiSlwiLMS1OlwialwiLMS2OlwiS1wiLMS3Olwia1wiLMS4Olwia1wiLMS5OlwiTFwiLMS7OlwiTFwiLMS9OlwiTFwiLMS/OlwiTFwiLMWBOlwiTFwiLMS6OlwibFwiLMS8OlwibFwiLMS+OlwibFwiLMWAOlwibFwiLMWCOlwibFwiLMWDOlwiTlwiLMWFOlwiTlwiLMWHOlwiTlwiLMWKOlwiTlwiLMWEOlwiblwiLMWGOlwiblwiLMWIOlwiblwiLMWLOlwiblwiLMWMOlwiT1wiLMWOOlwiT1wiLMWQOlwiT1wiLMWNOlwib1wiLMWPOlwib1wiLMWROlwib1wiLMWUOlwiUlwiLMWWOlwiUlwiLMWYOlwiUlwiLMWVOlwiclwiLMWXOlwiclwiLMWZOlwiclwiLMWaOlwiU1wiLMWcOlwiU1wiLMWeOlwiU1wiLMWgOlwiU1wiLMWbOlwic1wiLMWdOlwic1wiLMWfOlwic1wiLMWhOlwic1wiLMWiOlwiVFwiLMWkOlwiVFwiLMWmOlwiVFwiLMWjOlwidFwiLMWlOlwidFwiLMWnOlwidFwiLMWoOlwiVVwiLMWqOlwiVVwiLMWsOlwiVVwiLMWuOlwiVVwiLMWwOlwiVVwiLMWyOlwiVVwiLMWpOlwidVwiLMWrOlwidVwiLMWtOlwidVwiLMWvOlwidVwiLMWxOlwidVwiLMWzOlwidVwiLMW0OlwiV1wiLMW1Olwid1wiLMW2OlwiWVwiLMW3OlwieVwiLMW4OlwiWVwiLMW5OlwiWlwiLMW7OlwiWlwiLMW9OlwiWlwiLMW6OlwielwiLMW8OlwielwiLMW+OlwielwiLMSyOlwiSUpcIizEszpcImlqXCIsxZI6XCJPZVwiLMWTOlwib2VcIizFiTpcIiduXCIsxb86XCJzXCJ9KSx0bj1VdCh7XCImXCI6XCImYW1wO1wiLFwiPFwiOlwiJmx0O1wiLFwiPlwiOlwiJmd0O1wiLCdcIic6XCImcXVvdDtcIixcIidcIjpcIiYjMzk7XCJ9KTtmdW5jdGlvbiBubihlKXtyZXR1cm5cIlxcXFxcIithdFtlXX1mdW5jdGlvbiBybihlKXtyZXR1cm4gZXQudGVzdChlKX1mdW5jdGlvbiBvbihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtuWysrdF09W3IsZV19KSksbn1mdW5jdGlvbiBhbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZSh0KG4pKX19ZnVuY3Rpb24gbG4oZSx0KXtmb3IodmFyIG49LTEscj1lLmxlbmd0aCxvPTAsaT1bXTsrK248cjspe3ZhciBhPWVbbl07YSE9PXQmJmEhPT1sfHwoZVtuXT1sLGlbbysrXT1uKX1yZXR1cm4gaX1mdW5jdGlvbiBzbihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7blsrK3RdPWV9KSksbn1mdW5jdGlvbiBjbihlKXtyZXR1cm4gcm4oZSk/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PUplLmxhc3RJbmRleD0wO0plLnRlc3QoZSk7KSsrdDtyZXR1cm4gdH0oZSk6SHQoZSl9ZnVuY3Rpb24gdW4oZSl7cmV0dXJuIHJuKGUpP2Z1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKEplKXx8W119KGUpOmZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KFwiXCIpfShlKX1mdW5jdGlvbiBmbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7dC0tJiZvZS50ZXN0KGUuY2hhckF0KHQpKTspO3JldHVybiB0fXZhciBkbj1VdCh7XCImYW1wO1wiOlwiJlwiLFwiJmx0O1wiOlwiPFwiLFwiJmd0O1wiOlwiPlwiLFwiJnF1b3Q7XCI6J1wiJyxcIiYjMzk7XCI6XCInXCJ9KSxwbj1mdW5jdGlvbiBlKHQpe3ZhciBuLHI9KHQ9bnVsbD09dD9mdDpwbi5kZWZhdWx0cyhmdC5PYmplY3QoKSx0LHBuLnBpY2soZnQsbnQpKSkuQXJyYXksb2U9dC5EYXRlLGJlPXQuRXJyb3IseGU9dC5GdW5jdGlvbixfZT10Lk1hdGgsT2U9dC5PYmplY3QsTGU9dC5SZWdFeHAsRWU9dC5TdHJpbmcsU2U9dC5UeXBlRXJyb3IsamU9ci5wcm90b3R5cGUsTWU9eGUucHJvdG90eXBlLGtlPU9lLnByb3RvdHlwZSxSZT10W1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdLFBlPU1lLnRvU3RyaW5nLEllPWtlLmhhc093blByb3BlcnR5LEFlPTAsVGU9KG49L1teLl0rJC8uZXhlYyhSZSYmUmUua2V5cyYmUmUua2V5cy5JRV9QUk9UT3x8XCJcIikpP1wiU3ltYm9sKHNyYylfMS5cIituOlwiXCIsSGU9a2UudG9TdHJpbmcsQmU9UGUuY2FsbChPZSksVmU9ZnQuXyxEZT1MZShcIl5cIitQZS5jYWxsKEllKS5yZXBsYWNlKHRlLFwiXFxcXCQmXCIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csXCIkMS4qP1wiKStcIiRcIiksWmU9aHQ/dC5CdWZmZXI6bywkZT10LlN5bWJvbCxOZT10LlVpbnQ4QXJyYXksRmU9WmU/WmUuYWxsb2NVbnNhZmU6byxVZT1hbihPZS5nZXRQcm90b3R5cGVPZixPZSksV2U9T2UuY3JlYXRlLHplPWtlLnByb3BlcnR5SXNFbnVtZXJhYmxlLEdlPWplLnNwbGljZSxxZT0kZT8kZS5pc0NvbmNhdFNwcmVhZGFibGU6byxZZT0kZT8kZS5pdGVyYXRvcjpvLEplPSRlPyRlLnRvU3RyaW5nVGFnOm8sZXQ9ZnVuY3Rpb24oKXt0cnl7dmFyIGU9c2koT2UsXCJkZWZpbmVQcm9wZXJ0eVwiKTtyZXR1cm4gZSh7fSxcIlwiLHt9KSxlfWNhdGNoKGUpe319KCksYXQ9dC5jbGVhclRpbWVvdXQhPT1mdC5jbGVhclRpbWVvdXQmJnQuY2xlYXJUaW1lb3V0LGN0PW9lJiZvZS5ub3chPT1mdC5EYXRlLm5vdyYmb2Uubm93LHV0PXQuc2V0VGltZW91dCE9PWZ0LnNldFRpbWVvdXQmJnQuc2V0VGltZW91dCxkdD1fZS5jZWlsLHB0PV9lLmZsb29yLGd0PU9lLmdldE93blByb3BlcnR5U3ltYm9scyx2dD1aZT9aZS5pc0J1ZmZlcjpvLEh0PXQuaXNGaW5pdGUsVXQ9amUuam9pbixobj1hbihPZS5rZXlzLE9lKSxnbj1fZS5tYXgsdm49X2UubWluLG1uPW9lLm5vdyxDbj10LnBhcnNlSW50LHluPV9lLnJhbmRvbSx3bj1qZS5yZXZlcnNlLGJuPXNpKHQsXCJEYXRhVmlld1wiKSx4bj1zaSh0LFwiTWFwXCIpLF9uPXNpKHQsXCJQcm9taXNlXCIpLE9uPXNpKHQsXCJTZXRcIiksTG49c2kodCxcIldlYWtNYXBcIiksRW49c2koT2UsXCJjcmVhdGVcIiksU249TG4mJm5ldyBMbixqbj17fSxNbj1BaShibiksa249QWkoeG4pLFJuPUFpKF9uKSxQbj1BaShPbiksSW49QWkoTG4pLEFuPSRlPyRlLnByb3RvdHlwZTpvLFRuPUFuP0FuLnZhbHVlT2Y6byxIbj1Bbj9Bbi50b1N0cmluZzpvO2Z1bmN0aW9uIEJuKGUpe2lmKFhhKGUpJiYhWmEoZSkmJiEoZSBpbnN0YW5jZW9mICRuKSl7aWYoZSBpbnN0YW5jZW9mIFpuKXJldHVybiBlO2lmKEllLmNhbGwoZSxcIl9fd3JhcHBlZF9fXCIpKXJldHVybiBUaShlKX1yZXR1cm4gbmV3IFpuKGUpfXZhciBWbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCFLYSh0KSlyZXR1cm57fTtpZihXZSlyZXR1cm4gV2UodCk7ZS5wcm90b3R5cGU9dDt2YXIgbj1uZXcgZTtyZXR1cm4gZS5wcm90b3R5cGU9byxufX0oKTtmdW5jdGlvbiBEbigpe31mdW5jdGlvbiBabihlLHQpe3RoaXMuX193cmFwcGVkX189ZSx0aGlzLl9fYWN0aW9uc19fPVtdLHRoaXMuX19jaGFpbl9fPSEhdCx0aGlzLl9faW5kZXhfXz0wLHRoaXMuX192YWx1ZXNfXz1vfWZ1bmN0aW9uICRuKGUpe3RoaXMuX193cmFwcGVkX189ZSx0aGlzLl9fYWN0aW9uc19fPVtdLHRoaXMuX19kaXJfXz0xLHRoaXMuX19maWx0ZXJlZF9fPSExLHRoaXMuX19pdGVyYXRlZXNfXz1bXSx0aGlzLl9fdGFrZUNvdW50X189cCx0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBObihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBGbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBVbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBXbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgVW47Kyt0PG47KXRoaXMuYWRkKGVbdF0pfWZ1bmN0aW9uIHpuKGUpe3ZhciB0PXRoaXMuX19kYXRhX189bmV3IEZuKGUpO3RoaXMuc2l6ZT10LnNpemV9ZnVuY3Rpb24gR24oZSx0KXt2YXIgbj1aYShlKSxyPSFuJiZEYShlKSxvPSFuJiYhciYmVWEoZSksaT0hbiYmIXImJiFvJiZpbChlKSxhPW58fHJ8fG98fGksbD1hP0d0KGUubGVuZ3RoLEVlKTpbXSxzPWwubGVuZ3RoO2Zvcih2YXIgYyBpbiBlKSF0JiYhSWUuY2FsbChlLGMpfHxhJiYoXCJsZW5ndGhcIj09Y3x8byYmKFwib2Zmc2V0XCI9PWN8fFwicGFyZW50XCI9PWMpfHxpJiYoXCJidWZmZXJcIj09Y3x8XCJieXRlTGVuZ3RoXCI9PWN8fFwiYnl0ZU9mZnNldFwiPT1jKXx8Z2koYyxzKSl8fGwucHVzaChjKTtyZXR1cm4gbH1mdW5jdGlvbiBxbihlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gdD9lW1VyKDAsdC0xKV06b31mdW5jdGlvbiBZbihlLHQpe3JldHVybiBSaShFbyhlKSxvcih0LDAsZS5sZW5ndGgpKX1mdW5jdGlvbiBLbihlKXtyZXR1cm4gUmkoRW8oZSkpfWZ1bmN0aW9uIFhuKGUsdCxuKXsobiE9PW8mJiFIYShlW3RdLG4pfHxuPT09byYmISh0IGluIGUpKSYmbnIoZSx0LG4pfWZ1bmN0aW9uIEpuKGUsdCxuKXt2YXIgcj1lW3RdO0llLmNhbGwoZSx0KSYmSGEocixuKSYmKG4hPT1vfHx0IGluIGUpfHxucihlLHQsbil9ZnVuY3Rpb24gUW4oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7bi0tOylpZihIYShlW25dWzBdLHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIGVyKGUsdCxuLHIpe3JldHVybiBjcihlLChmdW5jdGlvbihlLG8saSl7dChyLGUsbihlKSxpKX0pKSxyfWZ1bmN0aW9uIHRyKGUsdCl7cmV0dXJuIGUmJlNvKHQsU2wodCksZSl9ZnVuY3Rpb24gbnIoZSx0LG4pe1wiX19wcm90b19fXCI9PXQmJmV0P2V0KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6bix3cml0YWJsZTohMH0pOmVbdF09bn1mdW5jdGlvbiBycihlLHQpe2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLGE9cihpKSxsPW51bGw9PWU7KytuPGk7KWFbbl09bD9vOnhsKGUsdFtuXSk7cmV0dXJuIGF9ZnVuY3Rpb24gb3IoZSx0LG4pe3JldHVybiBlPT1lJiYobiE9PW8mJihlPWU8PW4/ZTpuKSx0IT09byYmKGU9ZT49dD9lOnQpKSxlfWZ1bmN0aW9uIGlyKGUsdCxuLHIsaSxhKXt2YXIgbCxzPTEmdCxjPTImdCx1PTQmdDtpZihuJiYobD1pP24oZSxyLGksYSk6bihlKSksbCE9PW8pcmV0dXJuIGw7aWYoIUthKGUpKXJldHVybiBlO3ZhciBmPVphKGUpO2lmKGYpe2lmKGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj1uZXcgZS5jb25zdHJ1Y3Rvcih0KTtyZXR1cm4gdCYmXCJzdHJpbmdcIj09dHlwZW9mIGVbMF0mJkllLmNhbGwoZSxcImluZGV4XCIpJiYobi5pbmRleD1lLmluZGV4LG4uaW5wdXQ9ZS5pbnB1dCksbn0oZSksIXMpcmV0dXJuIEVvKGUsbCl9ZWxzZXt2YXIgZD1maShlKSxwPWQ9PXd8fGQ9PWI7aWYoVWEoZSkpcmV0dXJuIHdvKGUscyk7aWYoZD09T3x8ZD09Z3x8cCYmIWkpe2lmKGw9Y3x8cD97fTpwaShlKSwhcylyZXR1cm4gYz9mdW5jdGlvbihlLHQpe3JldHVybiBTbyhlLHVpKGUpLHQpfShlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJlNvKHQsamwodCksZSl9KGwsZSkpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFNvKGUsY2koZSksdCl9KGUsdHIobCxlKSl9ZWxzZXtpZighaXRbZF0pcmV0dXJuIGk/ZTp7fTtsPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvPWUuY29uc3RydWN0b3I7c3dpdGNoKHQpe2Nhc2UgUjpyZXR1cm4gYm8oZSk7Y2FzZSBtOmNhc2UgQzpyZXR1cm4gbmV3IG8oK2UpO2Nhc2UgUDpyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj10P2JvKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IobixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKX0oZSxuKTtjYXNlIEk6Y2FzZSBBOmNhc2UgVDpjYXNlIEg6Y2FzZSBCOmNhc2UgVjpjYXNlIEQ6Y2FzZSBaOmNhc2UgJDpyZXR1cm4geG8oZSxuKTtjYXNlIHg6cmV0dXJuIG5ldyBvO2Nhc2UgXzpjYXNlIGo6cmV0dXJuIG5ldyBvKGUpO2Nhc2UgRTpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5zb3VyY2UsZGUuZXhlYyhlKSk7cmV0dXJuIHQubGFzdEluZGV4PWUubGFzdEluZGV4LHR9KGUpO2Nhc2UgUzpyZXR1cm4gbmV3IG87Y2FzZSBNOnJldHVybiByPWUsVG4/T2UoVG4uY2FsbChyKSk6e319fShlLGQscyl9fWF8fChhPW5ldyB6bik7dmFyIGg9YS5nZXQoZSk7aWYoaClyZXR1cm4gaDthLnNldChlLGwpLG5sKGUpP2UuZm9yRWFjaCgoZnVuY3Rpb24ocil7bC5hZGQoaXIocix0LG4scixlLGEpKX0pKTpKYShlKSYmZS5mb3JFYWNoKChmdW5jdGlvbihyLG8pe2wuc2V0KG8saXIocix0LG4sbyxlLGEpKX0pKTt2YXIgdj1mP286KHU/Yz90aTplaTpjP2psOlNsKShlKTtyZXR1cm4gTHQodnx8ZSwoZnVuY3Rpb24ocixvKXt2JiYocj1lW289cl0pLEpuKGwsbyxpcihyLHQsbixvLGUsYSkpfSkpLGx9ZnVuY3Rpb24gYXIoZSx0LG4pe3ZhciByPW4ubGVuZ3RoO2lmKG51bGw9PWUpcmV0dXJuIXI7Zm9yKGU9T2UoZSk7ci0tOyl7dmFyIGk9bltyXSxhPXRbaV0sbD1lW2ldO2lmKGw9PT1vJiYhKGkgaW4gZSl8fCFhKGwpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGxyKGUsdCxuKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTtyZXR1cm4gU2koKGZ1bmN0aW9uKCl7ZS5hcHBseShvLG4pfSksdCl9ZnVuY3Rpb24gc3IoZSx0LG4scil7dmFyIG89LTEsaT1NdCxhPSEwLGw9ZS5sZW5ndGgscz1bXSxjPXQubGVuZ3RoO2lmKCFsKXJldHVybiBzO24mJih0PVJ0KHQsWXQobikpKSxyPyhpPWt0LGE9ITEpOnQubGVuZ3RoPj0yMDAmJihpPVh0LGE9ITEsdD1uZXcgV24odCkpO2U6Zm9yKDsrK288bDspe3ZhciB1PWVbb10sZj1udWxsPT1uP3U6bih1KTtpZih1PXJ8fDAhPT11P3U6MCxhJiZmPT1mKXtmb3IodmFyIGQ9YztkLS07KWlmKHRbZF09PT1mKWNvbnRpbnVlIGU7cy5wdXNoKHUpfWVsc2UgaSh0LGYscil8fHMucHVzaCh1KX1yZXR1cm4gc31Cbi50ZW1wbGF0ZVNldHRpbmdzPXtlc2NhcGU6WSxldmFsdWF0ZTpLLGludGVycG9sYXRlOlgsdmFyaWFibGU6XCJcIixpbXBvcnRzOntfOkJufX0sQm4ucHJvdG90eXBlPURuLnByb3RvdHlwZSxCbi5wcm90b3R5cGUuY29uc3RydWN0b3I9Qm4sWm4ucHJvdG90eXBlPVZuKERuLnByb3RvdHlwZSksWm4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPVpuLCRuLnByb3RvdHlwZT1WbihEbi5wcm90b3R5cGUpLCRuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0kbixObi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPUVuP0VuKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxObi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fSxObi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX187aWYoRW4pe3ZhciBuPXRbZV07cmV0dXJuIG49PT1hP286bn1yZXR1cm4gSWUuY2FsbCh0LGUpP3RbZV06b30sTm4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBFbj90W2VdIT09bzpJZS5jYWxsKHQsZSl9LE5uLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKGUpPzA6MSxuW2VdPUVuJiZ0PT09bz9hOnQsdGhpc30sRm4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sRm4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49UW4odCxlKTtyZXR1cm4hKG48MHx8KG49PXQubGVuZ3RoLTE/dC5wb3AoKTpHZS5jYWxsKHQsbiwxKSwtLXRoaXMuc2l6ZSwwKSl9LEZuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPVFuKHQsZSk7cmV0dXJuIG48MD9vOnRbbl1bMV19LEZuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIFFuKHRoaXMuX19kYXRhX18sZSk+LTF9LEZuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fLHI9UW4obixlKTtyZXR1cm4gcjwwPygrK3RoaXMuc2l6ZSxuLnB1c2goW2UsdF0pKTpuW3JdWzFdPXQsdGhpc30sVW4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgTm4sbWFwOm5ldyh4bnx8Rm4pLHN0cmluZzpuZXcgTm59fSxVbi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWFpKHRoaXMsZSkuZGVsZXRlKGUpO3JldHVybiB0aGlzLnNpemUtPXQ/MTowLHR9LFVuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFpKHRoaXMsZSkuZ2V0KGUpfSxVbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBhaSh0aGlzLGUpLmhhcyhlKX0sVW4ucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciBuPWFpKHRoaXMsZSkscj1uLnNpemU7cmV0dXJuIG4uc2V0KGUsdCksdGhpcy5zaXplKz1uLnNpemU9PXI/MDoxLHRoaXN9LFduLnByb3RvdHlwZS5hZGQ9V24ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KGUsYSksdGhpc30sV24ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9LHpuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189bmV3IEZuLHRoaXMuc2l6ZT0wfSx6bi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj10LmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplPXQuc2l6ZSxufSx6bi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChlKX0sem4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9LHpuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO2lmKG4gaW5zdGFuY2VvZiBGbil7dmFyIHI9bi5fX2RhdGFfXztpZigheG58fHIubGVuZ3RoPDE5OSlyZXR1cm4gci5wdXNoKFtlLHRdKSx0aGlzLnNpemU9KytuLnNpemUsdGhpcztuPXRoaXMuX19kYXRhX189bmV3IFVuKHIpfXJldHVybiBuLnNldChlLHQpLHRoaXMuc2l6ZT1uLnNpemUsdGhpc307dmFyIGNyPWtvKG1yKSx1cj1rbyhDciwhMCk7ZnVuY3Rpb24gZnIoZSx0KXt2YXIgbj0hMDtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLG8pe3JldHVybiBuPSEhdChlLHIsbyl9KSksbn1mdW5jdGlvbiBkcihlLHQsbil7Zm9yKHZhciByPS0xLGk9ZS5sZW5ndGg7KytyPGk7KXt2YXIgYT1lW3JdLGw9dChhKTtpZihudWxsIT1sJiYocz09PW8/bD09bCYmIW9sKGwpOm4obCxzKSkpdmFyIHM9bCxjPWF9cmV0dXJuIGN9ZnVuY3Rpb24gcHIoZSx0KXt2YXIgbj1bXTtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLG8pe3QoZSxyLG8pJiZuLnB1c2goZSl9KSksbn1mdW5jdGlvbiBocihlLHQsbixyLG8pe3ZhciBpPS0xLGE9ZS5sZW5ndGg7Zm9yKG58fChuPWhpKSxvfHwobz1bXSk7KytpPGE7KXt2YXIgbD1lW2ldO3Q+MCYmbihsKT90PjE/aHIobCx0LTEsbixyLG8pOlB0KG8sbCk6cnx8KG9bby5sZW5ndGhdPWwpfXJldHVybiBvfXZhciBncj1SbygpLHZyPVJvKCEwKTtmdW5jdGlvbiBtcihlLHQpe3JldHVybiBlJiZncihlLHQsU2wpfWZ1bmN0aW9uIENyKGUsdCl7cmV0dXJuIGUmJnZyKGUsdCxTbCl9ZnVuY3Rpb24geXIoZSx0KXtyZXR1cm4ganQodCwoZnVuY3Rpb24odCl7cmV0dXJuIEdhKGVbdF0pfSkpfWZ1bmN0aW9uIHdyKGUsdCl7Zm9yKHZhciBuPTAscj0odD12byh0LGUpKS5sZW5ndGg7bnVsbCE9ZSYmbjxyOyllPWVbSWkodFtuKytdKV07cmV0dXJuIG4mJm49PXI/ZTpvfWZ1bmN0aW9uIGJyKGUsdCxuKXt2YXIgcj10KGUpO3JldHVybiBaYShlKT9yOlB0KHIsbihlKSl9ZnVuY3Rpb24geHIoZSl7cmV0dXJuIG51bGw9PWU/ZT09PW8/XCJbb2JqZWN0IFVuZGVmaW5lZF1cIjpcIltvYmplY3QgTnVsbF1cIjpKZSYmSmUgaW4gT2UoZSk/ZnVuY3Rpb24oZSl7dmFyIHQ9SWUuY2FsbChlLEplKSxuPWVbSmVdO3RyeXtlW0plXT1vO3ZhciByPSEwfWNhdGNoKGUpe312YXIgaT1IZS5jYWxsKGUpO3JldHVybiByJiYodD9lW0plXT1uOmRlbGV0ZSBlW0plXSksaX0oZSk6ZnVuY3Rpb24oZSl7cmV0dXJuIEhlLmNhbGwoZSl9KGUpfWZ1bmN0aW9uIF9yKGUsdCl7cmV0dXJuIGU+dH1mdW5jdGlvbiBPcihlLHQpe3JldHVybiBudWxsIT1lJiZJZS5jYWxsKGUsdCl9ZnVuY3Rpb24gTHIoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmdCBpbiBPZShlKX1mdW5jdGlvbiBFcihlLHQsbil7Zm9yKHZhciBpPW4/a3Q6TXQsYT1lWzBdLmxlbmd0aCxsPWUubGVuZ3RoLHM9bCxjPXIobCksdT0xLzAsZj1bXTtzLS07KXt2YXIgZD1lW3NdO3MmJnQmJihkPVJ0KGQsWXQodCkpKSx1PXZuKGQubGVuZ3RoLHUpLGNbc109IW4mJih0fHxhPj0xMjAmJmQubGVuZ3RoPj0xMjApP25ldyBXbihzJiZkKTpvfWQ9ZVswXTt2YXIgcD0tMSxoPWNbMF07ZTpmb3IoOysrcDxhJiZmLmxlbmd0aDx1Oyl7dmFyIGc9ZFtwXSx2PXQ/dChnKTpnO2lmKGc9bnx8MCE9PWc/ZzowLCEoaD9YdChoLHYpOmkoZix2LG4pKSl7Zm9yKHM9bDstLXM7KXt2YXIgbT1jW3NdO2lmKCEobT9YdChtLHYpOmkoZVtzXSx2LG4pKSljb250aW51ZSBlfWgmJmgucHVzaCh2KSxmLnB1c2goZyl9fXJldHVybiBmfWZ1bmN0aW9uIFNyKGUsdCxuKXt2YXIgcj1udWxsPT0oZT1PaShlLHQ9dm8odCxlKSkpP2U6ZVtJaSh6aSh0KSldO3JldHVybiBudWxsPT1yP286X3QocixlLG4pfWZ1bmN0aW9uIGpyKGUpe3JldHVybiBYYShlKSYmeHIoZSk9PWd9ZnVuY3Rpb24gTXIoZSx0LG4scixpKXtyZXR1cm4gZT09PXR8fChudWxsPT1lfHxudWxsPT10fHwhWGEoZSkmJiFYYSh0KT9lIT1lJiZ0IT10OmZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2YXIgbD1aYShlKSxzPVphKHQpLGM9bD92OmZpKGUpLHU9cz92OmZpKHQpLGY9KGM9Yz09Zz9POmMpPT1PLGQ9KHU9dT09Zz9POnUpPT1PLHA9Yz09dTtpZihwJiZVYShlKSl7aWYoIVVhKHQpKXJldHVybiExO2w9ITAsZj0hMX1pZihwJiYhZilyZXR1cm4gYXx8KGE9bmV3IHpuKSxsfHxpbChlKT9KbyhlLHQsbixyLGksYSk6ZnVuY3Rpb24oZSx0LG4scixvLGksYSl7c3dpdGNoKG4pe2Nhc2UgUDppZihlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8ZS5ieXRlT2Zmc2V0IT10LmJ5dGVPZmZzZXQpcmV0dXJuITE7ZT1lLmJ1ZmZlcix0PXQuYnVmZmVyO2Nhc2UgUjpyZXR1cm4hKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHwhaShuZXcgTmUoZSksbmV3IE5lKHQpKSk7Y2FzZSBtOmNhc2UgQzpjYXNlIF86cmV0dXJuIEhhKCtlLCt0KTtjYXNlIHk6cmV0dXJuIGUubmFtZT09dC5uYW1lJiZlLm1lc3NhZ2U9PXQubWVzc2FnZTtjYXNlIEU6Y2FzZSBqOnJldHVybiBlPT10K1wiXCI7Y2FzZSB4OnZhciBsPW9uO2Nhc2UgUzp2YXIgcz0xJnI7aWYobHx8KGw9c24pLGUuc2l6ZSE9dC5zaXplJiYhcylyZXR1cm4hMTt2YXIgYz1hLmdldChlKTtpZihjKXJldHVybiBjPT10O3J8PTIsYS5zZXQoZSx0KTt2YXIgdT1KbyhsKGUpLGwodCkscixvLGksYSk7cmV0dXJuIGEuZGVsZXRlKGUpLHU7Y2FzZSBNOmlmKFRuKXJldHVybiBUbi5jYWxsKGUpPT1Ubi5jYWxsKHQpfXJldHVybiExfShlLHQsYyxuLHIsaSxhKTtpZighKDEmbikpe3ZhciBoPWYmJkllLmNhbGwoZSxcIl9fd3JhcHBlZF9fXCIpLHc9ZCYmSWUuY2FsbCh0LFwiX193cmFwcGVkX19cIik7aWYoaHx8dyl7dmFyIGI9aD9lLnZhbHVlKCk6ZSxMPXc/dC52YWx1ZSgpOnQ7cmV0dXJuIGF8fChhPW5ldyB6biksaShiLEwsbixyLGEpfX1yZXR1cm4hIXAmJihhfHwoYT1uZXcgem4pLGZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2YXIgbD0xJm4scz1laShlKSxjPXMubGVuZ3RoO2lmKGMhPWVpKHQpLmxlbmd0aCYmIWwpcmV0dXJuITE7Zm9yKHZhciB1PWM7dS0tOyl7dmFyIGY9c1t1XTtpZighKGw/ZiBpbiB0OkllLmNhbGwodCxmKSkpcmV0dXJuITF9dmFyIGQ9YS5nZXQoZSkscD1hLmdldCh0KTtpZihkJiZwKXJldHVybiBkPT10JiZwPT1lO3ZhciBoPSEwO2Euc2V0KGUsdCksYS5zZXQodCxlKTtmb3IodmFyIGc9bDsrK3U8Yzspe3ZhciB2PWVbZj1zW3VdXSxtPXRbZl07aWYocil2YXIgQz1sP3IobSx2LGYsdCxlLGEpOnIodixtLGYsZSx0LGEpO2lmKCEoQz09PW8/dj09PW18fGkodixtLG4scixhKTpDKSl7aD0hMTticmVha31nfHwoZz1cImNvbnN0cnVjdG9yXCI9PWYpfWlmKGgmJiFnKXt2YXIgeT1lLmNvbnN0cnVjdG9yLHc9dC5jb25zdHJ1Y3Rvcjt5PT13fHwhKFwiY29uc3RydWN0b3JcImluIGUpfHwhKFwiY29uc3RydWN0b3JcImluIHQpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB5JiZ5IGluc3RhbmNlb2YgeSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdyYmdyBpbnN0YW5jZW9mIHd8fChoPSExKX1yZXR1cm4gYS5kZWxldGUoZSksYS5kZWxldGUodCksaH0oZSx0LG4scixpLGEpKX0oZSx0LG4scixNcixpKSl9ZnVuY3Rpb24ga3IoZSx0LG4scil7dmFyIGk9bi5sZW5ndGgsYT1pLGw9IXI7aWYobnVsbD09ZSlyZXR1cm4hYTtmb3IoZT1PZShlKTtpLS07KXt2YXIgcz1uW2ldO2lmKGwmJnNbMl0/c1sxXSE9PWVbc1swXV06IShzWzBdaW4gZSkpcmV0dXJuITF9Zm9yKDsrK2k8YTspe3ZhciBjPShzPW5baV0pWzBdLHU9ZVtjXSxmPXNbMV07aWYobCYmc1syXSl7aWYodT09PW8mJiEoYyBpbiBlKSlyZXR1cm4hMX1lbHNle3ZhciBkPW5ldyB6bjtpZihyKXZhciBwPXIodSxmLGMsZSx0LGQpO2lmKCEocD09PW8/TXIoZix1LDMscixkKTpwKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gUnIoZSl7cmV0dXJuISghS2EoZSl8fCh0PWUsVGUmJlRlIGluIHQpKSYmKEdhKGUpP0RlOmdlKS50ZXN0KEFpKGUpKTt2YXIgdH1mdW5jdGlvbiBQcihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6bnVsbD09ZT9RbDpcIm9iamVjdFwiPT10eXBlb2YgZT9aYShlKT9CcihlWzBdLGVbMV0pOkhyKGUpOnNzKGUpfWZ1bmN0aW9uIElyKGUpe2lmKCF3aShlKSlyZXR1cm4gaG4oZSk7dmFyIHQ9W107Zm9yKHZhciBuIGluIE9lKGUpKUllLmNhbGwoZSxuKSYmXCJjb25zdHJ1Y3RvclwiIT1uJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gQXIoZSx0KXtyZXR1cm4gZTx0fWZ1bmN0aW9uIFRyKGUsdCl7dmFyIG49LTEsbz1OYShlKT9yKGUubGVuZ3RoKTpbXTtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLGkpe29bKytuXT10KGUscixpKX0pKSxvfWZ1bmN0aW9uIEhyKGUpe3ZhciB0PWxpKGUpO3JldHVybiAxPT10Lmxlbmd0aCYmdFswXVsyXT94aSh0WzBdWzBdLHRbMF1bMV0pOmZ1bmN0aW9uKG4pe3JldHVybiBuPT09ZXx8a3IobixlLHQpfX1mdW5jdGlvbiBCcihlLHQpe3JldHVybiBtaShlKSYmYmkodCk/eGkoSWkoZSksdCk6ZnVuY3Rpb24obil7dmFyIHI9eGwobixlKTtyZXR1cm4gcj09PW8mJnI9PT10P19sKG4sZSk6TXIodCxyLDMpfX1mdW5jdGlvbiBWcihlLHQsbixyLGkpe2UhPT10JiZncih0LChmdW5jdGlvbihhLGwpe2lmKGl8fChpPW5ldyB6biksS2EoYSkpIWZ1bmN0aW9uKGUsdCxuLHIsaSxhLGwpe3ZhciBzPUxpKGUsbiksYz1MaSh0LG4pLHU9bC5nZXQoYyk7aWYodSlYbihlLG4sdSk7ZWxzZXt2YXIgZj1hP2EocyxjLG4rXCJcIixlLHQsbCk6byxkPWY9PT1vO2lmKGQpe3ZhciBwPVphKGMpLGg9IXAmJlVhKGMpLGc9IXAmJiFoJiZpbChjKTtmPWMscHx8aHx8Zz9aYShzKT9mPXM6RmEocyk/Zj1FbyhzKTpoPyhkPSExLGY9d28oYywhMCkpOmc/KGQ9ITEsZj14byhjLCEwKSk6Zj1bXTplbChjKXx8RGEoYyk/KGY9cyxEYShzKT9mPXBsKHMpOkthKHMpJiYhR2Eocyl8fChmPXBpKGMpKSk6ZD0hMX1kJiYobC5zZXQoYyxmKSxpKGYsYyxyLGEsbCksbC5kZWxldGUoYykpLFhuKGUsbixmKX19KGUsdCxsLG4sVnIscixpKTtlbHNle3ZhciBzPXI/cihMaShlLGwpLGEsbCtcIlwiLGUsdCxpKTpvO3M9PT1vJiYocz1hKSxYbihlLGwscyl9fSksamwpfWZ1bmN0aW9uIERyKGUsdCl7dmFyIG49ZS5sZW5ndGg7aWYobilyZXR1cm4gZ2kodCs9dDwwP246MCxuKT9lW3RdOm99ZnVuY3Rpb24gWnIoZSx0LG4pe3Q9dC5sZW5ndGg/UnQodCwoZnVuY3Rpb24oZSl7cmV0dXJuIFphKGUpP2Z1bmN0aW9uKHQpe3JldHVybiB3cih0LDE9PT1lLmxlbmd0aD9lWzBdOmUpfTplfSkpOltRbF07dmFyIHI9LTE7dD1SdCh0LFl0KGlpKCkpKTt2YXIgbz1UcihlLChmdW5jdGlvbihlLG4sbyl7dmFyIGk9UnQodCwoZnVuY3Rpb24odCl7cmV0dXJuIHQoZSl9KSk7cmV0dXJue2NyaXRlcmlhOmksaW5kZXg6KytyLHZhbHVlOmV9fSkpO3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciBuPWUubGVuZ3RoO2ZvcihlLnNvcnQodCk7bi0tOyllW25dPWVbbl0udmFsdWU7cmV0dXJuIGV9KG8sKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9LTEsbz1lLmNyaXRlcmlhLGk9dC5jcml0ZXJpYSxhPW8ubGVuZ3RoLGw9bi5sZW5ndGg7KytyPGE7KXt2YXIgcz1fbyhvW3JdLGlbcl0pO2lmKHMpcmV0dXJuIHI+PWw/czpzKihcImRlc2NcIj09bltyXT8tMToxKX1yZXR1cm4gZS5pbmRleC10LmluZGV4fShlLHQsbil9KSl9ZnVuY3Rpb24gJHIoZSx0LG4pe2Zvcih2YXIgcj0tMSxvPXQubGVuZ3RoLGk9e307KytyPG87KXt2YXIgYT10W3JdLGw9d3IoZSxhKTtuKGwsYSkmJllyKGksdm8oYSxlKSxsKX1yZXR1cm4gaX1mdW5jdGlvbiBOcihlLHQsbixyKXt2YXIgbz1yP1p0OkR0LGk9LTEsYT10Lmxlbmd0aCxsPWU7Zm9yKGU9PT10JiYodD1Fbyh0KSksbiYmKGw9UnQoZSxZdChuKSkpOysraTxhOylmb3IodmFyIHM9MCxjPXRbaV0sdT1uP24oYyk6Yzsocz1vKGwsdSxzLHIpKT4tMTspbCE9PWUmJkdlLmNhbGwobCxzLDEpLEdlLmNhbGwoZSxzLDEpO3JldHVybiBlfWZ1bmN0aW9uIEZyKGUsdCl7Zm9yKHZhciBuPWU/dC5sZW5ndGg6MCxyPW4tMTtuLS07KXt2YXIgbz10W25dO2lmKG49PXJ8fG8hPT1pKXt2YXIgaT1vO2dpKG8pP0dlLmNhbGwoZSxvLDEpOmxvKGUsbyl9fXJldHVybiBlfWZ1bmN0aW9uIFVyKGUsdCl7cmV0dXJuIGUrcHQoeW4oKSoodC1lKzEpKX1mdW5jdGlvbiBXcihlLHQpe3ZhciBuPVwiXCI7aWYoIWV8fHQ8MXx8dD5mKXJldHVybiBuO2Rve3QlMiYmKG4rPWUpLCh0PXB0KHQvMikpJiYoZSs9ZSl9d2hpbGUodCk7cmV0dXJuIG59ZnVuY3Rpb24genIoZSx0KXtyZXR1cm4gamkoX2koZSx0LFFsKSxlK1wiXCIpfWZ1bmN0aW9uIEdyKGUpe3JldHVybiBxbihIbChlKSl9ZnVuY3Rpb24gcXIoZSx0KXt2YXIgbj1IbChlKTtyZXR1cm4gUmkobixvcih0LDAsbi5sZW5ndGgpKX1mdW5jdGlvbiBZcihlLHQsbixyKXtpZighS2EoZSkpcmV0dXJuIGU7Zm9yKHZhciBpPS0xLGE9KHQ9dm8odCxlKSkubGVuZ3RoLGw9YS0xLHM9ZTtudWxsIT1zJiYrK2k8YTspe3ZhciBjPUlpKHRbaV0pLHU9bjtpZihcIl9fcHJvdG9fX1wiPT09Y3x8XCJjb25zdHJ1Y3RvclwiPT09Y3x8XCJwcm90b3R5cGVcIj09PWMpcmV0dXJuIGU7aWYoaSE9bCl7dmFyIGY9c1tjXTsodT1yP3IoZixjLHMpOm8pPT09byYmKHU9S2EoZik/ZjpnaSh0W2krMV0pP1tdOnt9KX1KbihzLGMsdSkscz1zW2NdfXJldHVybiBlfXZhciBLcj1Tbj9mdW5jdGlvbihlLHQpe3JldHVybiBTbi5zZXQoZSx0KSxlfTpRbCxYcj1ldD9mdW5jdGlvbihlLHQpe3JldHVybiBldChlLFwidG9TdHJpbmdcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6S2wodCksd3JpdGFibGU6ITB9KX06UWw7ZnVuY3Rpb24gSnIoZSl7cmV0dXJuIFJpKEhsKGUpKX1mdW5jdGlvbiBRcihlLHQsbil7dmFyIG89LTEsaT1lLmxlbmd0aDt0PDAmJih0PS10Pmk/MDppK3QpLChuPW4+aT9pOm4pPDAmJihuKz1pKSxpPXQ+bj8wOm4tdD4+PjAsdD4+Pj0wO2Zvcih2YXIgYT1yKGkpOysrbzxpOylhW29dPWVbbyt0XTtyZXR1cm4gYX1mdW5jdGlvbiBlbyhlLHQpe3ZhciBuO3JldHVybiBjcihlLChmdW5jdGlvbihlLHIsbyl7cmV0dXJuIShuPXQoZSxyLG8pKX0pKSwhIW59ZnVuY3Rpb24gdG8oZSx0LG4pe3ZhciByPTAsbz1udWxsPT1lP3I6ZS5sZW5ndGg7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ9PXQmJm88PTIxNDc0ODM2NDcpe2Zvcig7cjxvOyl7dmFyIGk9citvPj4+MSxhPWVbaV07bnVsbCE9PWEmJiFvbChhKSYmKG4/YTw9dDphPHQpP3I9aSsxOm89aX1yZXR1cm4gb31yZXR1cm4gbm8oZSx0LFFsLG4pfWZ1bmN0aW9uIG5vKGUsdCxuLHIpe3ZhciBpPTAsYT1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoMD09PWEpcmV0dXJuIDA7Zm9yKHZhciBsPSh0PW4odCkpIT10LHM9bnVsbD09PXQsYz1vbCh0KSx1PXQ9PT1vO2k8YTspe3ZhciBmPXB0KChpK2EpLzIpLGQ9bihlW2ZdKSxwPWQhPT1vLGg9bnVsbD09PWQsZz1kPT1kLHY9b2woZCk7aWYobCl2YXIgbT1yfHxnO2Vsc2UgbT11P2cmJihyfHxwKTpzP2cmJnAmJihyfHwhaCk6Yz9nJiZwJiYhaCYmKHJ8fCF2KTohaCYmIXYmJihyP2Q8PXQ6ZDx0KTttP2k9ZisxOmE9Zn1yZXR1cm4gdm4oYSw0Mjk0OTY3Mjk0KX1mdW5jdGlvbiBybyhlLHQpe2Zvcih2YXIgbj0tMSxyPWUubGVuZ3RoLG89MCxpPVtdOysrbjxyOyl7dmFyIGE9ZVtuXSxsPXQ/dChhKTphO2lmKCFufHwhSGEobCxzKSl7dmFyIHM9bDtpW28rK109MD09PWE/MDphfX1yZXR1cm4gaX1mdW5jdGlvbiBvbyhlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZT9lOm9sKGUpP2Q6K2V9ZnVuY3Rpb24gaW8oZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoWmEoZSkpcmV0dXJuIFJ0KGUsaW8pK1wiXCI7aWYob2woZSkpcmV0dXJuIEhuP0huLmNhbGwoZSk6XCJcIjt2YXIgdD1lK1wiXCI7cmV0dXJuXCIwXCI9PXQmJjEvZT09LTEvMD9cIi0wXCI6dH1mdW5jdGlvbiBhbyhlLHQsbil7dmFyIHI9LTEsbz1NdCxpPWUubGVuZ3RoLGE9ITAsbD1bXSxzPWw7aWYobilhPSExLG89a3Q7ZWxzZSBpZihpPj0yMDApe3ZhciBjPXQ/bnVsbDp6byhlKTtpZihjKXJldHVybiBzbihjKTthPSExLG89WHQscz1uZXcgV259ZWxzZSBzPXQ/W106bDtlOmZvcig7KytyPGk7KXt2YXIgdT1lW3JdLGY9dD90KHUpOnU7aWYodT1ufHwwIT09dT91OjAsYSYmZj09Zil7Zm9yKHZhciBkPXMubGVuZ3RoO2QtLTspaWYoc1tkXT09PWYpY29udGludWUgZTt0JiZzLnB1c2goZiksbC5wdXNoKHUpfWVsc2UgbyhzLGYsbil8fChzIT09bCYmcy5wdXNoKGYpLGwucHVzaCh1KSl9cmV0dXJuIGx9ZnVuY3Rpb24gbG8oZSx0KXtyZXR1cm4gbnVsbD09KGU9T2koZSx0PXZvKHQsZSkpKXx8ZGVsZXRlIGVbSWkoemkodCkpXX1mdW5jdGlvbiBzbyhlLHQsbixyKXtyZXR1cm4gWXIoZSx0LG4od3IoZSx0KSkscil9ZnVuY3Rpb24gY28oZSx0LG4scil7Zm9yKHZhciBvPWUubGVuZ3RoLGk9cj9vOi0xOyhyP2ktLTorK2k8bykmJnQoZVtpXSxpLGUpOyk7cmV0dXJuIG4/UXIoZSxyPzA6aSxyP2krMTpvKTpRcihlLHI/aSsxOjAscj9vOmkpfWZ1bmN0aW9uIHVvKGUsdCl7dmFyIG49ZTtyZXR1cm4gbiBpbnN0YW5jZW9mICRuJiYobj1uLnZhbHVlKCkpLEl0KHQsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZnVuYy5hcHBseSh0LnRoaXNBcmcsUHQoW2VdLHQuYXJncykpfSksbil9ZnVuY3Rpb24gZm8oZSx0LG4pe3ZhciBvPWUubGVuZ3RoO2lmKG88MilyZXR1cm4gbz9hbyhlWzBdKTpbXTtmb3IodmFyIGk9LTEsYT1yKG8pOysraTxvOylmb3IodmFyIGw9ZVtpXSxzPS0xOysrczxvOylzIT1pJiYoYVtpXT1zcihhW2ldfHxsLGVbc10sdCxuKSk7cmV0dXJuIGFvKGhyKGEsMSksdCxuKX1mdW5jdGlvbiBwbyhlLHQsbil7Zm9yKHZhciByPS0xLGk9ZS5sZW5ndGgsYT10Lmxlbmd0aCxsPXt9OysrcjxpOyl7dmFyIHM9cjxhP3Rbcl06bztuKGwsZVtyXSxzKX1yZXR1cm4gbH1mdW5jdGlvbiBobyhlKXtyZXR1cm4gRmEoZSk/ZTpbXX1mdW5jdGlvbiBnbyhlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6UWx9ZnVuY3Rpb24gdm8oZSx0KXtyZXR1cm4gWmEoZSk/ZTptaShlLHQpP1tlXTpQaShobChlKSl9dmFyIG1vPXpyO2Z1bmN0aW9uIENvKGUsdCxuKXt2YXIgcj1lLmxlbmd0aDtyZXR1cm4gbj1uPT09bz9yOm4sIXQmJm4+PXI/ZTpRcihlLHQsbil9dmFyIHlvPWF0fHxmdW5jdGlvbihlKXtyZXR1cm4gZnQuY2xlYXJUaW1lb3V0KGUpfTtmdW5jdGlvbiB3byhlLHQpe2lmKHQpcmV0dXJuIGUuc2xpY2UoKTt2YXIgbj1lLmxlbmd0aCxyPUZlP0ZlKG4pOm5ldyBlLmNvbnN0cnVjdG9yKG4pO3JldHVybiBlLmNvcHkocikscn1mdW5jdGlvbiBibyhlKXt2YXIgdD1uZXcgZS5jb25zdHJ1Y3RvcihlLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgTmUodCkuc2V0KG5ldyBOZShlKSksdH1mdW5jdGlvbiB4byhlLHQpe3ZhciBuPXQ/Ym8oZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihuLGUuYnl0ZU9mZnNldCxlLmxlbmd0aCl9ZnVuY3Rpb24gX28oZSx0KXtpZihlIT09dCl7dmFyIG49ZSE9PW8scj1udWxsPT09ZSxpPWU9PWUsYT1vbChlKSxsPXQhPT1vLHM9bnVsbD09PXQsYz10PT10LHU9b2wodCk7aWYoIXMmJiF1JiYhYSYmZT50fHxhJiZsJiZjJiYhcyYmIXV8fHImJmwmJmN8fCFuJiZjfHwhaSlyZXR1cm4gMTtpZighciYmIWEmJiF1JiZlPHR8fHUmJm4mJmkmJiFyJiYhYXx8cyYmbiYmaXx8IWwmJml8fCFjKXJldHVybi0xfXJldHVybiAwfWZ1bmN0aW9uIE9vKGUsdCxuLG8pe2Zvcih2YXIgaT0tMSxhPWUubGVuZ3RoLGw9bi5sZW5ndGgscz0tMSxjPXQubGVuZ3RoLHU9Z24oYS1sLDApLGY9cihjK3UpLGQ9IW87KytzPGM7KWZbc109dFtzXTtmb3IoOysraTxsOykoZHx8aTxhKSYmKGZbbltpXV09ZVtpXSk7Zm9yKDt1LS07KWZbcysrXT1lW2krK107cmV0dXJuIGZ9ZnVuY3Rpb24gTG8oZSx0LG4sbyl7Zm9yKHZhciBpPS0xLGE9ZS5sZW5ndGgsbD0tMSxzPW4ubGVuZ3RoLGM9LTEsdT10Lmxlbmd0aCxmPWduKGEtcywwKSxkPXIoZit1KSxwPSFvOysraTxmOylkW2ldPWVbaV07Zm9yKHZhciBoPWk7KytjPHU7KWRbaCtjXT10W2NdO2Zvcig7KytsPHM7KShwfHxpPGEpJiYoZFtoK25bbF1dPWVbaSsrXSk7cmV0dXJuIGR9ZnVuY3Rpb24gRW8oZSx0KXt2YXIgbj0tMSxvPWUubGVuZ3RoO2Zvcih0fHwodD1yKG8pKTsrK248bzspdFtuXT1lW25dO3JldHVybiB0fWZ1bmN0aW9uIFNvKGUsdCxuLHIpe3ZhciBpPSFuO258fChuPXt9KTtmb3IodmFyIGE9LTEsbD10Lmxlbmd0aDsrK2E8bDspe3ZhciBzPXRbYV0sYz1yP3IobltzXSxlW3NdLHMsbixlKTpvO2M9PT1vJiYoYz1lW3NdKSxpP25yKG4scyxjKTpKbihuLHMsYyl9cmV0dXJuIG59ZnVuY3Rpb24gam8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2YXIgbz1aYShuKT9PdDplcixpPXQ/dCgpOnt9O3JldHVybiBvKG4sZSxpaShyLDIpLGkpfX1mdW5jdGlvbiBNbyhlKXtyZXR1cm4genIoKGZ1bmN0aW9uKHQsbil7dmFyIHI9LTEsaT1uLmxlbmd0aCxhPWk+MT9uW2ktMV06byxsPWk+Mj9uWzJdOm87Zm9yKGE9ZS5sZW5ndGg+MyYmXCJmdW5jdGlvblwiPT10eXBlb2YgYT8oaS0tLGEpOm8sbCYmdmkoblswXSxuWzFdLGwpJiYoYT1pPDM/bzphLGk9MSksdD1PZSh0KTsrK3I8aTspe3ZhciBzPW5bcl07cyYmZSh0LHMscixhKX1yZXR1cm4gdH0pKX1mdW5jdGlvbiBrbyhlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe2lmKG51bGw9PW4pcmV0dXJuIG47aWYoIU5hKG4pKXJldHVybiBlKG4scik7Zm9yKHZhciBvPW4ubGVuZ3RoLGk9dD9vOi0xLGE9T2Uobik7KHQ/aS0tOisraTxvKSYmITEhPT1yKGFbaV0saSxhKTspO3JldHVybiBufX1mdW5jdGlvbiBSbyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe2Zvcih2YXIgbz0tMSxpPU9lKHQpLGE9cih0KSxsPWEubGVuZ3RoO2wtLTspe3ZhciBzPWFbZT9sOisrb107aWYoITE9PT1uKGlbc10scyxpKSlicmVha31yZXR1cm4gdH19ZnVuY3Rpb24gUG8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXJuKHQ9aGwodCkpP3VuKHQpOm8scj1uP25bMF06dC5jaGFyQXQoMCksaT1uP0NvKG4sMSkuam9pbihcIlwiKTp0LnNsaWNlKDEpO3JldHVybiByW2VdKCkraX19ZnVuY3Rpb24gSW8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBJdChHbChEbCh0KS5yZXBsYWNlKEtlLFwiXCIpKSxlLFwiXCIpfX1mdW5jdGlvbiBBbyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHM7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBlO2Nhc2UgMTpyZXR1cm4gbmV3IGUodFswXSk7Y2FzZSAyOnJldHVybiBuZXcgZSh0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSk7Y2FzZSA1OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0pO2Nhc2UgNjpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0pO2Nhc2UgNzpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0sdFs2XSl9dmFyIG49Vm4oZS5wcm90b3R5cGUpLHI9ZS5hcHBseShuLHQpO3JldHVybiBLYShyKT9yOm59fWZ1bmN0aW9uIFRvKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7dmFyIGk9T2UodCk7aWYoIU5hKHQpKXt2YXIgYT1paShuLDMpO3Q9U2wodCksbj1mdW5jdGlvbihlKXtyZXR1cm4gYShpW2VdLGUsaSl9fXZhciBsPWUodCxuLHIpO3JldHVybiBsPi0xP2lbYT90W2xdOmxdOm99fWZ1bmN0aW9uIEhvKGUpe3JldHVybiBRbygoZnVuY3Rpb24odCl7dmFyIG49dC5sZW5ndGgscj1uLGE9Wm4ucHJvdG90eXBlLnRocnU7Zm9yKGUmJnQucmV2ZXJzZSgpO3ItLTspe3ZhciBsPXRbcl07aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgbCl0aHJvdyBuZXcgU2UoaSk7aWYoYSYmIXMmJlwid3JhcHBlclwiPT1yaShsKSl2YXIgcz1uZXcgWm4oW10sITApfWZvcihyPXM/cjpuOysrcjxuOyl7dmFyIGM9cmkobD10W3JdKSx1PVwid3JhcHBlclwiPT1jP25pKGwpOm87cz11JiZDaSh1WzBdKSYmNDI0PT11WzFdJiYhdVs0XS5sZW5ndGgmJjE9PXVbOV0/c1tyaSh1WzBdKV0uYXBwbHkocyx1WzNdKToxPT1sLmxlbmd0aCYmQ2kobCk/c1tjXSgpOnMudGhydShsKX1yZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMscj1lWzBdO2lmKHMmJjE9PWUubGVuZ3RoJiZaYShyKSlyZXR1cm4gcy5wbGFudChyKS52YWx1ZSgpO2Zvcih2YXIgbz0wLGk9bj90W29dLmFwcGx5KHRoaXMsZSk6cjsrK288bjspaT10W29dLmNhbGwodGhpcyxpKTtyZXR1cm4gaX19KSl9ZnVuY3Rpb24gQm8oZSx0LG4saSxhLGwscyx1LGYsZCl7dmFyIHA9dCZjLGg9MSZ0LGc9MiZ0LHY9MjQmdCxtPTUxMiZ0LEM9Zz9vOkFvKGUpO3JldHVybiBmdW5jdGlvbiBjKCl7Zm9yKHZhciB5PWFyZ3VtZW50cy5sZW5ndGgsdz1yKHkpLGI9eTtiLS07KXdbYl09YXJndW1lbnRzW2JdO2lmKHYpdmFyIHg9b2koYyksXz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aCxyPTA7bi0tOyllW25dPT09dCYmKytyO3JldHVybiByfSh3LHgpO2lmKGkmJih3PU9vKHcsaSxhLHYpKSxsJiYodz1Mbyh3LGwscyx2KSkseS09Xyx2JiZ5PGQpe3ZhciBPPWxuKHcseCk7cmV0dXJuIFVvKGUsdCxCbyxjLnBsYWNlaG9sZGVyLG4sdyxPLHUsZixkLXkpfXZhciBMPWg/bjp0aGlzLEU9Zz9MW2VdOmU7cmV0dXJuIHk9dy5sZW5ndGgsdT93PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9dm4odC5sZW5ndGgsbiksaT1FbyhlKTtyLS07KXt2YXIgYT10W3JdO2Vbcl09Z2koYSxuKT9pW2FdOm99cmV0dXJuIGV9KHcsdSk6bSYmeT4xJiZ3LnJldmVyc2UoKSxwJiZmPHkmJih3Lmxlbmd0aD1mKSx0aGlzJiZ0aGlzIT09ZnQmJnRoaXMgaW5zdGFuY2VvZiBjJiYoRT1DfHxBbyhFKSksRS5hcHBseShMLHcpfX1mdW5jdGlvbiBWbyhlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3JldHVybiBmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbXIoZSwoZnVuY3Rpb24oZSxvLGkpe3QocixuKGUpLG8saSl9KSkscn0obixlLHQocikse30pfX1mdW5jdGlvbiBEbyhlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBpO2lmKG49PT1vJiZyPT09bylyZXR1cm4gdDtpZihuIT09byYmKGk9biksciE9PW8pe2lmKGk9PT1vKXJldHVybiByO1wic3RyaW5nXCI9PXR5cGVvZiBufHxcInN0cmluZ1wiPT10eXBlb2Ygcj8obj1pbyhuKSxyPWlvKHIpKToobj1vbyhuKSxyPW9vKHIpKSxpPWUobixyKX1yZXR1cm4gaX19ZnVuY3Rpb24gWm8oZSl7cmV0dXJuIFFvKChmdW5jdGlvbih0KXtyZXR1cm4gdD1SdCh0LFl0KGlpKCkpKSx6cigoZnVuY3Rpb24obil7dmFyIHI9dGhpcztyZXR1cm4gZSh0LChmdW5jdGlvbihlKXtyZXR1cm4gX3QoZSxyLG4pfSkpfSkpfSkpfWZ1bmN0aW9uICRvKGUsdCl7dmFyIG49KHQ9dD09PW8/XCIgXCI6aW8odCkpLmxlbmd0aDtpZihuPDIpcmV0dXJuIG4/V3IodCxlKTp0O3ZhciByPVdyKHQsZHQoZS9jbih0KSkpO3JldHVybiBybih0KT9Dbyh1bihyKSwwLGUpLmpvaW4oXCJcIik6ci5zbGljZSgwLGUpfWZ1bmN0aW9uIE5vKGUpe3JldHVybiBmdW5jdGlvbih0LG4saSl7cmV0dXJuIGkmJlwibnVtYmVyXCIhPXR5cGVvZiBpJiZ2aSh0LG4saSkmJihuPWk9byksdD1jbCh0KSxuPT09bz8obj10LHQ9MCk6bj1jbChuKSxmdW5jdGlvbihlLHQsbixvKXtmb3IodmFyIGk9LTEsYT1nbihkdCgodC1lKS8obnx8MSkpLDApLGw9cihhKTthLS07KWxbbz9hOisraV09ZSxlKz1uO3JldHVybiBsfSh0LG4saT1pPT09bz90PG4/MTotMTpjbChpKSxlKX19ZnVuY3Rpb24gRm8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJlwic3RyaW5nXCI9PXR5cGVvZiBufHwodD1kbCh0KSxuPWRsKG4pKSxlKHQsbil9fWZ1bmN0aW9uIFVvKGUsdCxuLHIsaSxhLGwsYyx1LGYpe3ZhciBkPTgmdDt0fD1kP3M6NjQsNCYodCY9fihkPzY0OnMpKXx8KHQmPS00KTt2YXIgcD1bZSx0LGksZD9hOm8sZD9sOm8sZD9vOmEsZD9vOmwsYyx1LGZdLGg9bi5hcHBseShvLHApO3JldHVybiBDaShlKSYmRWkoaCxwKSxoLnBsYWNlaG9sZGVyPXIsTWkoaCxlLHQpfWZ1bmN0aW9uIFdvKGUpe3ZhciB0PV9lW2VdO3JldHVybiBmdW5jdGlvbihlLG4pe2lmKGU9ZGwoZSksKG49bnVsbD09bj8wOnZuKHVsKG4pLDI5MikpJiZIdChlKSl7dmFyIHI9KGhsKGUpK1wiZVwiKS5zcGxpdChcImVcIik7cmV0dXJuKygocj0oaGwodChyWzBdK1wiZVwiKygrclsxXStuKSkpK1wiZVwiKS5zcGxpdChcImVcIikpWzBdK1wiZVwiKygrclsxXS1uKSl9cmV0dXJuIHQoZSl9fXZhciB6bz1PbiYmMS9zbihuZXcgT24oWywtMF0pKVsxXT09dT9mdW5jdGlvbihlKXtyZXR1cm4gbmV3IE9uKGUpfTpvcztmdW5jdGlvbiBHbyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49ZmkodCk7cmV0dXJuIG49PXg/b24odCk6bj09Uz9mdW5jdGlvbihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7blsrK3RdPVtlLGVdfSkpLG59KHQpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFJ0KHQsKGZ1bmN0aW9uKHQpe3JldHVyblt0LGVbdF1dfSkpfSh0LGUodCkpfX1mdW5jdGlvbiBxbyhlLHQsbixhLHUsZixkLHApe3ZhciBoPTImdDtpZighaCYmXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgU2UoaSk7dmFyIGc9YT9hLmxlbmd0aDowO2lmKGd8fCh0Jj0tOTcsYT11PW8pLGQ9ZD09PW8/ZDpnbih1bChkKSwwKSxwPXA9PT1vP3A6dWwocCksZy09dT91Lmxlbmd0aDowLDY0JnQpe3ZhciB2PWEsbT11O2E9dT1vfXZhciBDPWg/bzpuaShlKSx5PVtlLHQsbixhLHUsdixtLGYsZCxwXTtpZihDJiZmdW5jdGlvbihlLHQpe3ZhciBuPWVbMV0scj10WzFdLG89bnxyLGk9bzwxMzEsYT1yPT1jJiY4PT1ufHxyPT1jJiYyNTY9PW4mJmVbN10ubGVuZ3RoPD10WzhdfHwzODQ9PXImJnRbN10ubGVuZ3RoPD10WzhdJiY4PT1uO2lmKCFpJiYhYSlyZXR1cm4gZTsxJnImJihlWzJdPXRbMl0sb3w9MSZuPzA6NCk7dmFyIHM9dFszXTtpZihzKXt2YXIgdT1lWzNdO2VbM109dT9Pbyh1LHMsdFs0XSk6cyxlWzRdPXU/bG4oZVszXSxsKTp0WzRdfShzPXRbNV0pJiYodT1lWzVdLGVbNV09dT9Mbyh1LHMsdFs2XSk6cyxlWzZdPXU/bG4oZVs1XSxsKTp0WzZdKSwocz10WzddKSYmKGVbN109cyksciZjJiYoZVs4XT1udWxsPT1lWzhdP3RbOF06dm4oZVs4XSx0WzhdKSksbnVsbD09ZVs5XSYmKGVbOV09dFs5XSksZVswXT10WzBdLGVbMV09b30oeSxDKSxlPXlbMF0sdD15WzFdLG49eVsyXSxhPXlbM10sdT15WzRdLCEocD15WzldPXlbOV09PT1vP2g/MDplLmxlbmd0aDpnbih5WzldLWcsMCkpJiYyNCZ0JiYodCY9LTI1KSx0JiYxIT10KXc9OD09dHx8MTY9PXQ/ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPUFvKGUpO3JldHVybiBmdW5jdGlvbiBhKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgscz1yKGwpLGM9bCx1PW9pKGEpO2MtLTspc1tjXT1hcmd1bWVudHNbY107dmFyIGY9bDwzJiZzWzBdIT09dSYmc1tsLTFdIT09dT9bXTpsbihzLHUpO3JldHVybihsLT1mLmxlbmd0aCk8bj9VbyhlLHQsQm8sYS5wbGFjZWhvbGRlcixvLHMsZixvLG8sbi1sKTpfdCh0aGlzJiZ0aGlzIT09ZnQmJnRoaXMgaW5zdGFuY2VvZiBhP2k6ZSx0aGlzLHMpfX0oZSx0LHApOnQhPXMmJjMzIT10fHx1Lmxlbmd0aD9Cby5hcHBseShvLHkpOmZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBpPTEmdCxhPUFvKGUpO3JldHVybiBmdW5jdGlvbiB0KCl7Zm9yKHZhciBsPS0xLHM9YXJndW1lbnRzLmxlbmd0aCxjPS0xLHU9by5sZW5ndGgsZj1yKHUrcyksZD10aGlzJiZ0aGlzIT09ZnQmJnRoaXMgaW5zdGFuY2VvZiB0P2E6ZTsrK2M8dTspZltjXT1vW2NdO2Zvcig7cy0tOylmW2MrK109YXJndW1lbnRzWysrbF07cmV0dXJuIF90KGQsaT9uOnRoaXMsZil9fShlLHQsbixhKTtlbHNlIHZhciB3PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0xJnQsbz1BbyhlKTtyZXR1cm4gZnVuY3Rpb24gdCgpe3JldHVybih0aGlzJiZ0aGlzIT09ZnQmJnRoaXMgaW5zdGFuY2VvZiB0P286ZSkuYXBwbHkocj9uOnRoaXMsYXJndW1lbnRzKX19KGUsdCxuKTtyZXR1cm4gTWkoKEM/S3I6RWkpKHcseSksZSx0KX1mdW5jdGlvbiBZbyhlLHQsbixyKXtyZXR1cm4gZT09PW98fEhhKGUsa2Vbbl0pJiYhSWUuY2FsbChyLG4pP3Q6ZX1mdW5jdGlvbiBLbyhlLHQsbixyLGksYSl7cmV0dXJuIEthKGUpJiZLYSh0KSYmKGEuc2V0KHQsZSksVnIoZSx0LG8sS28sYSksYS5kZWxldGUodCkpLGV9ZnVuY3Rpb24gWG8oZSl7cmV0dXJuIGVsKGUpP286ZX1mdW5jdGlvbiBKbyhlLHQsbixyLGksYSl7dmFyIGw9MSZuLHM9ZS5sZW5ndGgsYz10Lmxlbmd0aDtpZihzIT1jJiYhKGwmJmM+cykpcmV0dXJuITE7dmFyIHU9YS5nZXQoZSksZj1hLmdldCh0KTtpZih1JiZmKXJldHVybiB1PT10JiZmPT1lO3ZhciBkPS0xLHA9ITAsaD0yJm4/bmV3IFduOm87Zm9yKGEuc2V0KGUsdCksYS5zZXQodCxlKTsrK2Q8czspe3ZhciBnPWVbZF0sdj10W2RdO2lmKHIpdmFyIG09bD9yKHYsZyxkLHQsZSxhKTpyKGcsdixkLGUsdCxhKTtpZihtIT09byl7aWYobSljb250aW51ZTtwPSExO2JyZWFrfWlmKGgpe2lmKCFUdCh0LChmdW5jdGlvbihlLHQpe2lmKCFYdChoLHQpJiYoZz09PWV8fGkoZyxlLG4scixhKSkpcmV0dXJuIGgucHVzaCh0KX0pKSl7cD0hMTticmVha319ZWxzZSBpZihnIT09diYmIWkoZyx2LG4scixhKSl7cD0hMTticmVha319cmV0dXJuIGEuZGVsZXRlKGUpLGEuZGVsZXRlKHQpLHB9ZnVuY3Rpb24gUW8oZSl7cmV0dXJuIGppKF9pKGUsbywkaSksZStcIlwiKX1mdW5jdGlvbiBlaShlKXtyZXR1cm4gYnIoZSxTbCxjaSl9ZnVuY3Rpb24gdGkoZSl7cmV0dXJuIGJyKGUsamwsdWkpfXZhciBuaT1Tbj9mdW5jdGlvbihlKXtyZXR1cm4gU24uZ2V0KGUpfTpvcztmdW5jdGlvbiByaShlKXtmb3IodmFyIHQ9ZS5uYW1lK1wiXCIsbj1qblt0XSxyPUllLmNhbGwoam4sdCk/bi5sZW5ndGg6MDtyLS07KXt2YXIgbz1uW3JdLGk9by5mdW5jO2lmKG51bGw9PWl8fGk9PWUpcmV0dXJuIG8ubmFtZX1yZXR1cm4gdH1mdW5jdGlvbiBvaShlKXtyZXR1cm4oSWUuY2FsbChCbixcInBsYWNlaG9sZGVyXCIpP0JuOmUpLnBsYWNlaG9sZGVyfWZ1bmN0aW9uIGlpKCl7dmFyIGU9Qm4uaXRlcmF0ZWV8fGVzO3JldHVybiBlPWU9PT1lcz9QcjplLGFyZ3VtZW50cy5sZW5ndGg/ZShhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdKTplfWZ1bmN0aW9uIGFpKGUsdCl7dmFyIG4scixvPWUuX19kYXRhX187cmV0dXJuKFwic3RyaW5nXCI9PShyPXR5cGVvZihuPXQpKXx8XCJudW1iZXJcIj09cnx8XCJzeW1ib2xcIj09cnx8XCJib29sZWFuXCI9PXI/XCJfX3Byb3RvX19cIiE9PW46bnVsbD09PW4pP29bXCJzdHJpbmdcIj09dHlwZW9mIHQ/XCJzdHJpbmdcIjpcImhhc2hcIl06by5tYXB9ZnVuY3Rpb24gbGkoZSl7Zm9yKHZhciB0PVNsKGUpLG49dC5sZW5ndGg7bi0tOyl7dmFyIHI9dFtuXSxvPWVbcl07dFtuXT1bcixvLGJpKG8pXX1yZXR1cm4gdH1mdW5jdGlvbiBzaShlLHQpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/bzplW3RdfShlLHQpO3JldHVybiBScihuKT9uOm99dmFyIGNpPWd0P2Z1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOihlPU9lKGUpLGp0KGd0KGUpLChmdW5jdGlvbih0KXtyZXR1cm4gemUuY2FsbChlLHQpfSkpKX06ZnMsdWk9Z3Q/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdO2U7KVB0KHQsY2koZSkpLGU9VWUoZSk7cmV0dXJuIHR9OmZzLGZpPXhyO2Z1bmN0aW9uIGRpKGUsdCxuKXtmb3IodmFyIHI9LTEsbz0odD12byh0LGUpKS5sZW5ndGgsaT0hMTsrK3I8bzspe3ZhciBhPUlpKHRbcl0pO2lmKCEoaT1udWxsIT1lJiZuKGUsYSkpKWJyZWFrO2U9ZVthXX1yZXR1cm4gaXx8KytyIT1vP2k6ISEobz1udWxsPT1lPzA6ZS5sZW5ndGgpJiZZYShvKSYmZ2koYSxvKSYmKFphKGUpfHxEYShlKSl9ZnVuY3Rpb24gcGkoZSl7cmV0dXJuXCJmdW5jdGlvblwiIT10eXBlb2YgZS5jb25zdHJ1Y3Rvcnx8d2koZSk/e306Vm4oVWUoZSkpfWZ1bmN0aW9uIGhpKGUpe3JldHVybiBaYShlKXx8RGEoZSl8fCEhKHFlJiZlJiZlW3FlXSl9ZnVuY3Rpb24gZ2koZSx0KXt2YXIgbj10eXBlb2YgZTtyZXR1cm4hISh0PW51bGw9PXQ/Zjp0KSYmKFwibnVtYmVyXCI9PW58fFwic3ltYm9sXCIhPW4mJm1lLnRlc3QoZSkpJiZlPi0xJiZlJTE9PTAmJmU8dH1mdW5jdGlvbiB2aShlLHQsbil7aWYoIUthKG4pKXJldHVybiExO3ZhciByPXR5cGVvZiB0O3JldHVybiEhKFwibnVtYmVyXCI9PXI/TmEobikmJmdpKHQsbi5sZW5ndGgpOlwic3RyaW5nXCI9PXImJnQgaW4gbikmJkhhKG5bdF0sZSl9ZnVuY3Rpb24gbWkoZSx0KXtpZihaYShlKSlyZXR1cm4hMTt2YXIgbj10eXBlb2YgZTtyZXR1cm4hKFwibnVtYmVyXCIhPW4mJlwic3ltYm9sXCIhPW4mJlwiYm9vbGVhblwiIT1uJiZudWxsIT1lJiYhb2woZSkpfHxRLnRlc3QoZSl8fCFKLnRlc3QoZSl8fG51bGwhPXQmJmUgaW4gT2UodCl9ZnVuY3Rpb24gQ2koZSl7dmFyIHQ9cmkoZSksbj1Cblt0XTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBufHwhKHQgaW4gJG4ucHJvdG90eXBlKSlyZXR1cm4hMTtpZihlPT09bilyZXR1cm4hMDt2YXIgcj1uaShuKTtyZXR1cm4hIXImJmU9PT1yWzBdfShibiYmZmkobmV3IGJuKG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1QfHx4biYmZmkobmV3IHhuKSE9eHx8X24mJmZpKF9uLnJlc29sdmUoKSkhPUx8fE9uJiZmaShuZXcgT24pIT1TfHxMbiYmZmkobmV3IExuKSE9aykmJihmaT1mdW5jdGlvbihlKXt2YXIgdD14cihlKSxuPXQ9PU8/ZS5jb25zdHJ1Y3RvcjpvLHI9bj9BaShuKTpcIlwiO2lmKHIpc3dpdGNoKHIpe2Nhc2UgTW46cmV0dXJuIFA7Y2FzZSBrbjpyZXR1cm4geDtjYXNlIFJuOnJldHVybiBMO2Nhc2UgUG46cmV0dXJuIFM7Y2FzZSBJbjpyZXR1cm4ga31yZXR1cm4gdH0pO3ZhciB5aT1SZT9HYTpkcztmdW5jdGlvbiB3aShlKXt2YXIgdD1lJiZlLmNvbnN0cnVjdG9yO3JldHVybiBlPT09KFwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJnQucHJvdG90eXBlfHxrZSl9ZnVuY3Rpb24gYmkoZSl7cmV0dXJuIGU9PWUmJiFLYShlKX1mdW5jdGlvbiB4aShlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbnVsbCE9biYmbltlXT09PXQmJih0IT09b3x8ZSBpbiBPZShuKSl9fWZ1bmN0aW9uIF9pKGUsdCxuKXtyZXR1cm4gdD1nbih0PT09bz9lLmxlbmd0aC0xOnQsMCksZnVuY3Rpb24oKXtmb3IodmFyIG89YXJndW1lbnRzLGk9LTEsYT1nbihvLmxlbmd0aC10LDApLGw9cihhKTsrK2k8YTspbFtpXT1vW3QraV07aT0tMTtmb3IodmFyIHM9cih0KzEpOysraTx0OylzW2ldPW9baV07cmV0dXJuIHNbdF09bihsKSxfdChlLHRoaXMscyl9fWZ1bmN0aW9uIE9pKGUsdCl7cmV0dXJuIHQubGVuZ3RoPDI/ZTp3cihlLFFyKHQsMCwtMSkpfWZ1bmN0aW9uIExpKGUsdCl7aWYoKFwiY29uc3RydWN0b3JcIiE9PXR8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGVbdF0pJiZcIl9fcHJvdG9fX1wiIT10KXJldHVybiBlW3RdfXZhciBFaT1raShLciksU2k9dXR8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ0LnNldFRpbWVvdXQoZSx0KX0samk9a2koWHIpO2Z1bmN0aW9uIE1pKGUsdCxuKXt2YXIgcj10K1wiXCI7cmV0dXJuIGppKGUsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lmxlbmd0aDtpZighbilyZXR1cm4gZTt2YXIgcj1uLTE7cmV0dXJuIHRbcl09KG4+MT9cIiYgXCI6XCJcIikrdFtyXSx0PXQuam9pbihuPjI/XCIsIFwiOlwiIFwiKSxlLnJlcGxhY2UoaWUsXCJ7XFxuLyogW3dyYXBwZWQgd2l0aCBcIit0K1wiXSAqL1xcblwiKX0ocixmdW5jdGlvbihlLHQpe3JldHVybiBMdChoLChmdW5jdGlvbihuKXt2YXIgcj1cIl8uXCIrblswXTt0Jm5bMV0mJiFNdChlLHIpJiZlLnB1c2gocil9KSksZS5zb3J0KCl9KGZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goYWUpO3JldHVybiB0P3RbMV0uc3BsaXQobGUpOltdfShyKSxuKSkpfWZ1bmN0aW9uIGtpKGUpe3ZhciB0PTAsbj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciByPW1uKCksaT0xNi0oci1uKTtpZihuPXIsaT4wKXtpZigrK3Q+PTgwMClyZXR1cm4gYXJndW1lbnRzWzBdfWVsc2UgdD0wO3JldHVybiBlLmFwcGx5KG8sYXJndW1lbnRzKX19ZnVuY3Rpb24gUmkoZSx0KXt2YXIgbj0tMSxyPWUubGVuZ3RoLGk9ci0xO2Zvcih0PXQ9PT1vP3I6dDsrK248dDspe3ZhciBhPVVyKG4saSksbD1lW2FdO2VbYV09ZVtuXSxlW25dPWx9cmV0dXJuIGUubGVuZ3RoPXQsZX12YXIgUGk9ZnVuY3Rpb24oZSl7dmFyIHQ9a2EoKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiA0Nj09PWUuY2hhckNvZGVBdCgwKSYmdC5wdXNoKFwiXCIpLGUucmVwbGFjZShlZSwoZnVuY3Rpb24oZSxuLHIsbyl7dC5wdXNoKHI/by5yZXBsYWNlKHVlLFwiJDFcIik6bnx8ZSl9KSksdH0pLChmdW5jdGlvbihlKXtyZXR1cm4gNTAwPT09bi5zaXplJiZuLmNsZWFyKCksZX0pKSxuPXQuY2FjaGU7cmV0dXJuIHR9KCk7ZnVuY3Rpb24gSWkoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGV8fG9sKGUpKXJldHVybiBlO3ZhciB0PWUrXCJcIjtyZXR1cm5cIjBcIj09dCYmMS9lPT0tMS8wP1wiLTBcIjp0fWZ1bmN0aW9uIEFpKGUpe2lmKG51bGwhPWUpe3RyeXtyZXR1cm4gUGUuY2FsbChlKX1jYXRjaChlKXt9dHJ5e3JldHVybiBlK1wiXCJ9Y2F0Y2goZSl7fX1yZXR1cm5cIlwifWZ1bmN0aW9uIFRpKGUpe2lmKGUgaW5zdGFuY2VvZiAkbilyZXR1cm4gZS5jbG9uZSgpO3ZhciB0PW5ldyBabihlLl9fd3JhcHBlZF9fLGUuX19jaGFpbl9fKTtyZXR1cm4gdC5fX2FjdGlvbnNfXz1FbyhlLl9fYWN0aW9uc19fKSx0Ll9faW5kZXhfXz1lLl9faW5kZXhfXyx0Ll9fdmFsdWVzX189ZS5fX3ZhbHVlc19fLHR9dmFyIEhpPXpyKChmdW5jdGlvbihlLHQpe3JldHVybiBGYShlKT9zcihlLGhyKHQsMSxGYSwhMCkpOltdfSkpLEJpPXpyKChmdW5jdGlvbihlLHQpe3ZhciBuPXppKHQpO3JldHVybiBGYShuKSYmKG49byksRmEoZSk/c3IoZSxocih0LDEsRmEsITApLGlpKG4sMikpOltdfSkpLFZpPXpyKChmdW5jdGlvbihlLHQpe3ZhciBuPXppKHQpO3JldHVybiBGYShuKSYmKG49byksRmEoZSk/c3IoZSxocih0LDEsRmEsITApLG8sbik6W119KSk7ZnVuY3Rpb24gRGkoZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtpZighcilyZXR1cm4tMTt2YXIgbz1udWxsPT1uPzA6dWwobik7cmV0dXJuIG88MCYmKG89Z24ocitvLDApKSxWdChlLGlpKHQsMyksbyl9ZnVuY3Rpb24gWmkoZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtpZighcilyZXR1cm4tMTt2YXIgaT1yLTE7cmV0dXJuIG4hPT1vJiYoaT11bChuKSxpPW48MD9nbihyK2ksMCk6dm4oaSxyLTEpKSxWdChlLGlpKHQsMyksaSwhMCl9ZnVuY3Rpb24gJGkoZSl7cmV0dXJuIG51bGwhPWUmJmUubGVuZ3RoP2hyKGUsMSk6W119ZnVuY3Rpb24gTmkoZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2VbMF06b312YXIgRmk9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PVJ0KGUsaG8pO3JldHVybiB0Lmxlbmd0aCYmdFswXT09PWVbMF0/RXIodCk6W119KSksVWk9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PXppKGUpLG49UnQoZSxobyk7cmV0dXJuIHQ9PT16aShuKT90PW86bi5wb3AoKSxuLmxlbmd0aCYmblswXT09PWVbMF0/RXIobixpaSh0LDIpKTpbXX0pKSxXaT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9emkoZSksbj1SdChlLGhvKTtyZXR1cm4odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6bykmJm4ucG9wKCksbi5sZW5ndGgmJm5bMF09PT1lWzBdP0VyKG4sbyx0KTpbXX0pKTtmdW5jdGlvbiB6aShlKXt2YXIgdD1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHQ/ZVt0LTFdOm99dmFyIEdpPXpyKHFpKTtmdW5jdGlvbiBxaShlLHQpe3JldHVybiBlJiZlLmxlbmd0aCYmdCYmdC5sZW5ndGg/TnIoZSx0KTplfXZhciBZaT1RbygoZnVuY3Rpb24oZSx0KXt2YXIgbj1udWxsPT1lPzA6ZS5sZW5ndGgscj1ycihlLHQpO3JldHVybiBGcihlLFJ0KHQsKGZ1bmN0aW9uKGUpe3JldHVybiBnaShlLG4pPytlOmV9KSkuc29ydChfbykpLHJ9KSk7ZnVuY3Rpb24gS2koZSl7cmV0dXJuIG51bGw9PWU/ZTp3bi5jYWxsKGUpfXZhciBYaT16cigoZnVuY3Rpb24oZSl7cmV0dXJuIGFvKGhyKGUsMSxGYSwhMCkpfSkpLEppPXpyKChmdW5jdGlvbihlKXt2YXIgdD16aShlKTtyZXR1cm4gRmEodCkmJih0PW8pLGFvKGhyKGUsMSxGYSwhMCksaWkodCwyKSl9KSksUWk9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PXppKGUpO3JldHVybiB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvLGFvKGhyKGUsMSxGYSwhMCksbyx0KX0pKTtmdW5jdGlvbiBlYShlKXtpZighZXx8IWUubGVuZ3RoKXJldHVybltdO3ZhciB0PTA7cmV0dXJuIGU9anQoZSwoZnVuY3Rpb24oZSl7aWYoRmEoZSkpcmV0dXJuIHQ9Z24oZS5sZW5ndGgsdCksITB9KSksR3QodCwoZnVuY3Rpb24odCl7cmV0dXJuIFJ0KGUsRnQodCkpfSkpfWZ1bmN0aW9uIHRhKGUsdCl7aWYoIWV8fCFlLmxlbmd0aClyZXR1cm5bXTt2YXIgbj1lYShlKTtyZXR1cm4gbnVsbD09dD9uOlJ0KG4sKGZ1bmN0aW9uKGUpe3JldHVybiBfdCh0LG8sZSl9KSl9dmFyIG5hPXpyKChmdW5jdGlvbihlLHQpe3JldHVybiBGYShlKT9zcihlLHQpOltdfSkpLHJhPXpyKChmdW5jdGlvbihlKXtyZXR1cm4gZm8oanQoZSxGYSkpfSkpLG9hPXpyKChmdW5jdGlvbihlKXt2YXIgdD16aShlKTtyZXR1cm4gRmEodCkmJih0PW8pLGZvKGp0KGUsRmEpLGlpKHQsMikpfSkpLGlhPXpyKChmdW5jdGlvbihlKXt2YXIgdD16aShlKTtyZXR1cm4gdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byxmbyhqdChlLEZhKSxvLHQpfSkpLGFhPXpyKGVhKSxsYT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj10PjE/ZVt0LTFdOm87cmV0dXJuIG49XCJmdW5jdGlvblwiPT10eXBlb2Ygbj8oZS5wb3AoKSxuKTpvLHRhKGUsbil9KSk7ZnVuY3Rpb24gc2EoZSl7dmFyIHQ9Qm4oZSk7cmV0dXJuIHQuX19jaGFpbl9fPSEwLHR9ZnVuY3Rpb24gY2EoZSx0KXtyZXR1cm4gdChlKX12YXIgdWE9UW8oKGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49dD9lWzBdOjAscj10aGlzLl9fd3JhcHBlZF9fLGk9ZnVuY3Rpb24odCl7cmV0dXJuIHJyKHQsZSl9O3JldHVybiEodD4xfHx0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCkmJnIgaW5zdGFuY2VvZiAkbiYmZ2kobik/KChyPXIuc2xpY2UobiwrbisodD8xOjApKSkuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpjYSxhcmdzOltpXSx0aGlzQXJnOm99KSxuZXcgWm4ocix0aGlzLl9fY2hhaW5fXykudGhydSgoZnVuY3Rpb24oZSl7cmV0dXJuIHQmJiFlLmxlbmd0aCYmZS5wdXNoKG8pLGV9KSkpOnRoaXMudGhydShpKX0pKSxmYT1qbygoZnVuY3Rpb24oZSx0LG4pe0llLmNhbGwoZSxuKT8rK2Vbbl06bnIoZSxuLDEpfSkpLGRhPVRvKERpKSxwYT1UbyhaaSk7ZnVuY3Rpb24gaGEoZSx0KXtyZXR1cm4oWmEoZSk/THQ6Y3IpKGUsaWkodCwzKSl9ZnVuY3Rpb24gZ2EoZSx0KXtyZXR1cm4oWmEoZSk/RXQ6dXIpKGUsaWkodCwzKSl9dmFyIHZhPWpvKChmdW5jdGlvbihlLHQsbil7SWUuY2FsbChlLG4pP2Vbbl0ucHVzaCh0KTpucihlLG4sW3RdKX0pKSxtYT16cigoZnVuY3Rpb24oZSx0LG4pe3ZhciBvPS0xLGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdCxhPU5hKGUpP3IoZS5sZW5ndGgpOltdO3JldHVybiBjcihlLChmdW5jdGlvbihlKXthWysrb109aT9fdCh0LGUsbik6U3IoZSx0LG4pfSkpLGF9KSksQ2E9am8oKGZ1bmN0aW9uKGUsdCxuKXtucihlLG4sdCl9KSk7ZnVuY3Rpb24geWEoZSx0KXtyZXR1cm4oWmEoZSk/UnQ6VHIpKGUsaWkodCwzKSl9dmFyIHdhPWpvKChmdW5jdGlvbihlLHQsbil7ZVtuPzA6MV0ucHVzaCh0KX0pLChmdW5jdGlvbigpe3JldHVybltbXSxbXV19KSksYmE9enIoKGZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm5bXTt2YXIgbj10Lmxlbmd0aDtyZXR1cm4gbj4xJiZ2aShlLHRbMF0sdFsxXSk/dD1bXTpuPjImJnZpKHRbMF0sdFsxXSx0WzJdKSYmKHQ9W3RbMF1dKSxacihlLGhyKHQsMSksW10pfSkpLHhhPWN0fHxmdW5jdGlvbigpe3JldHVybiBmdC5EYXRlLm5vdygpfTtmdW5jdGlvbiBfYShlLHQsbil7cmV0dXJuIHQ9bj9vOnQsdD1lJiZudWxsPT10P2UubGVuZ3RoOnQscW8oZSxjLG8sbyxvLG8sdCl9ZnVuY3Rpb24gT2EoZSx0KXt2YXIgbjtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBTZShpKTtyZXR1cm4gZT11bChlKSxmdW5jdGlvbigpe3JldHVybi0tZT4wJiYobj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksZTw9MSYmKHQ9byksbn19dmFyIExhPXpyKChmdW5jdGlvbihlLHQsbil7dmFyIHI9MTtpZihuLmxlbmd0aCl7dmFyIG89bG4obixvaShMYSkpO3J8PXN9cmV0dXJuIHFvKGUscix0LG4sbyl9KSksRWE9enIoKGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0zO2lmKG4ubGVuZ3RoKXt2YXIgbz1sbihuLG9pKEVhKSk7cnw9c31yZXR1cm4gcW8odCxyLGUsbixvKX0pKTtmdW5jdGlvbiBTYShlLHQsbil7dmFyIHIsYSxsLHMsYyx1LGY9MCxkPSExLHA9ITEsaD0hMDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTtmdW5jdGlvbiBnKHQpe3ZhciBuPXIsaT1hO3JldHVybiByPWE9byxmPXQscz1lLmFwcGx5KGksbil9ZnVuY3Rpb24gdihlKXt2YXIgbj1lLXU7cmV0dXJuIHU9PT1vfHxuPj10fHxuPDB8fHAmJmUtZj49bH1mdW5jdGlvbiBtKCl7dmFyIGU9eGEoKTtpZih2KGUpKXJldHVybiBDKGUpO2M9U2kobSxmdW5jdGlvbihlKXt2YXIgbj10LShlLXUpO3JldHVybiBwP3ZuKG4sbC0oZS1mKSk6bn0oZSkpfWZ1bmN0aW9uIEMoZSl7cmV0dXJuIGM9byxoJiZyP2coZSk6KHI9YT1vLHMpfWZ1bmN0aW9uIHkoKXt2YXIgZT14YSgpLG49dihlKTtpZihyPWFyZ3VtZW50cyxhPXRoaXMsdT1lLG4pe2lmKGM9PT1vKXJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZj1lLGM9U2kobSx0KSxkP2coZSk6c30odSk7aWYocClyZXR1cm4geW8oYyksYz1TaShtLHQpLGcodSl9cmV0dXJuIGM9PT1vJiYoYz1TaShtLHQpKSxzfXJldHVybiB0PWRsKHQpfHwwLEthKG4pJiYoZD0hIW4ubGVhZGluZyxsPShwPVwibWF4V2FpdFwiaW4gbik/Z24oZGwobi5tYXhXYWl0KXx8MCx0KTpsLGg9XCJ0cmFpbGluZ1wiaW4gbj8hIW4udHJhaWxpbmc6aCkseS5jYW5jZWw9ZnVuY3Rpb24oKXtjIT09byYmeW8oYyksZj0wLHI9dT1hPWM9b30seS5mbHVzaD1mdW5jdGlvbigpe3JldHVybiBjPT09bz9zOkMoeGEoKSl9LHl9dmFyIGphPXpyKChmdW5jdGlvbihlLHQpe3JldHVybiBscihlLDEsdCl9KSksTWE9enIoKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbHIoZSxkbCh0KXx8MCxuKX0pKTtmdW5jdGlvbiBrYShlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGV8fG51bGwhPXQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFNlKGkpO3ZhciBuPWZ1bmN0aW9uKCl7dmFyIHI9YXJndW1lbnRzLG89dD90LmFwcGx5KHRoaXMscik6clswXSxpPW4uY2FjaGU7aWYoaS5oYXMobykpcmV0dXJuIGkuZ2V0KG8pO3ZhciBhPWUuYXBwbHkodGhpcyxyKTtyZXR1cm4gbi5jYWNoZT1pLnNldChvLGEpfHxpLGF9O3JldHVybiBuLmNhY2hlPW5ldyhrYS5DYWNoZXx8VW4pLG59ZnVuY3Rpb24gUmEoZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgU2UoaSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiFlLmNhbGwodGhpcyk7Y2FzZSAxOnJldHVybiFlLmNhbGwodGhpcyx0WzBdKTtjYXNlIDI6cmV0dXJuIWUuY2FsbCh0aGlzLHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiFlLmNhbGwodGhpcyx0WzBdLHRbMV0sdFsyXSl9cmV0dXJuIWUuYXBwbHkodGhpcyx0KX19a2EuQ2FjaGU9VW47dmFyIFBhPW1vKChmdW5jdGlvbihlLHQpe3ZhciBuPSh0PTE9PXQubGVuZ3RoJiZaYSh0WzBdKT9SdCh0WzBdLFl0KGlpKCkpKTpSdChocih0LDEpLFl0KGlpKCkpKSkubGVuZ3RoO3JldHVybiB6cigoZnVuY3Rpb24ocil7Zm9yKHZhciBvPS0xLGk9dm4oci5sZW5ndGgsbik7KytvPGk7KXJbb109dFtvXS5jYWxsKHRoaXMscltvXSk7cmV0dXJuIF90KGUsdGhpcyxyKX0pKX0pKSxJYT16cigoZnVuY3Rpb24oZSx0KXt2YXIgbj1sbih0LG9pKElhKSk7cmV0dXJuIHFvKGUscyxvLHQsbil9KSksQWE9enIoKGZ1bmN0aW9uKGUsdCl7dmFyIG49bG4odCxvaShBYSkpO3JldHVybiBxbyhlLDY0LG8sdCxuKX0pKSxUYT1RbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gcW8oZSwyNTYsbyxvLG8sdCl9KSk7ZnVuY3Rpb24gSGEoZSx0KXtyZXR1cm4gZT09PXR8fGUhPWUmJnQhPXR9dmFyIEJhPUZvKF9yKSxWYT1GbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT49dH0pKSxEYT1qcihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP2pyOmZ1bmN0aW9uKGUpe3JldHVybiBYYShlKSYmSWUuY2FsbChlLFwiY2FsbGVlXCIpJiYhemUuY2FsbChlLFwiY2FsbGVlXCIpfSxaYT1yLmlzQXJyYXksJGE9bXQ/WXQobXQpOmZ1bmN0aW9uKGUpe3JldHVybiBYYShlKSYmeHIoZSk9PVJ9O2Z1bmN0aW9uIE5hKGUpe3JldHVybiBudWxsIT1lJiZZYShlLmxlbmd0aCkmJiFHYShlKX1mdW5jdGlvbiBGYShlKXtyZXR1cm4gWGEoZSkmJk5hKGUpfXZhciBVYT12dHx8ZHMsV2E9Q3Q/WXQoQ3QpOmZ1bmN0aW9uKGUpe3JldHVybiBYYShlKSYmeHIoZSk9PUN9O2Z1bmN0aW9uIHphKGUpe2lmKCFYYShlKSlyZXR1cm4hMTt2YXIgdD14cihlKTtyZXR1cm4gdD09eXx8XCJbb2JqZWN0IERPTUV4Y2VwdGlvbl1cIj09dHx8XCJzdHJpbmdcIj09dHlwZW9mIGUubWVzc2FnZSYmXCJzdHJpbmdcIj09dHlwZW9mIGUubmFtZSYmIWVsKGUpfWZ1bmN0aW9uIEdhKGUpe2lmKCFLYShlKSlyZXR1cm4hMTt2YXIgdD14cihlKTtyZXR1cm4gdD09d3x8dD09Ynx8XCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dXCI9PXR8fFwiW29iamVjdCBQcm94eV1cIj09dH1mdW5jdGlvbiBxYShlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmZT09dWwoZSl9ZnVuY3Rpb24gWWEoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJmU+LTEmJmUlMT09MCYmZTw9Zn1mdW5jdGlvbiBLYShlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4gbnVsbCE9ZSYmKFwib2JqZWN0XCI9PXR8fFwiZnVuY3Rpb25cIj09dCl9ZnVuY3Rpb24gWGEoZSl7cmV0dXJuIG51bGwhPWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfXZhciBKYT15dD9ZdCh5dCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFhhKGUpJiZmaShlKT09eH07ZnVuY3Rpb24gUWEoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGV8fFhhKGUpJiZ4cihlKT09X31mdW5jdGlvbiBlbChlKXtpZighWGEoZSl8fHhyKGUpIT1PKXJldHVybiExO3ZhciB0PVVlKGUpO2lmKG51bGw9PT10KXJldHVybiEwO3ZhciBuPUllLmNhbGwodCxcImNvbnN0cnVjdG9yXCIpJiZ0LmNvbnN0cnVjdG9yO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJm4gaW5zdGFuY2VvZiBuJiZQZS5jYWxsKG4pPT1CZX12YXIgdGw9d3Q/WXQod3QpOmZ1bmN0aW9uKGUpe3JldHVybiBYYShlKSYmeHIoZSk9PUV9LG5sPWJ0P1l0KGJ0KTpmdW5jdGlvbihlKXtyZXR1cm4gWGEoZSkmJmZpKGUpPT1TfTtmdW5jdGlvbiBybChlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZXx8IVphKGUpJiZYYShlKSYmeHIoZSk9PWp9ZnVuY3Rpb24gb2woZSl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIGV8fFhhKGUpJiZ4cihlKT09TX12YXIgaWw9eHQ/WXQoeHQpOmZ1bmN0aW9uKGUpe3JldHVybiBYYShlKSYmWWEoZS5sZW5ndGgpJiYhIW90W3hyKGUpXX0sYWw9Rm8oQXIpLGxsPUZvKChmdW5jdGlvbihlLHQpe3JldHVybiBlPD10fSkpO2Z1bmN0aW9uIHNsKGUpe2lmKCFlKXJldHVybltdO2lmKE5hKGUpKXJldHVybiBybChlKT91bihlKTpFbyhlKTtpZihZZSYmZVtZZV0pcmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPVtdOyEodD1lLm5leHQoKSkuZG9uZTspbi5wdXNoKHQudmFsdWUpO3JldHVybiBufShlW1llXSgpKTt2YXIgdD1maShlKTtyZXR1cm4odD09eD9vbjp0PT1TP3NuOkhsKShlKX1mdW5jdGlvbiBjbChlKXtyZXR1cm4gZT8oZT1kbChlKSk9PT11fHxlPT09LTEvMD8xNzk3NjkzMTM0ODYyMzE1N2UyOTIqKGU8MD8tMToxKTplPT1lP2U6MDowPT09ZT9lOjB9ZnVuY3Rpb24gdWwoZSl7dmFyIHQ9Y2woZSksbj10JTE7cmV0dXJuIHQ9PXQ/bj90LW46dDowfWZ1bmN0aW9uIGZsKGUpe3JldHVybiBlP29yKHVsKGUpLDAscCk6MH1mdW5jdGlvbiBkbChlKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSlyZXR1cm4gZTtpZihvbChlKSlyZXR1cm4gZDtpZihLYShlKSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZS52YWx1ZU9mP2UudmFsdWVPZigpOmU7ZT1LYSh0KT90K1wiXCI6dH1pZihcInN0cmluZ1wiIT10eXBlb2YgZSlyZXR1cm4gMD09PWU/ZTorZTtlPXF0KGUpO3ZhciBuPWhlLnRlc3QoZSk7cmV0dXJuIG58fHZlLnRlc3QoZSk/c3QoZS5zbGljZSgyKSxuPzI6OCk6cGUudGVzdChlKT9kOitlfWZ1bmN0aW9uIHBsKGUpe3JldHVybiBTbyhlLGpsKGUpKX1mdW5jdGlvbiBobChlKXtyZXR1cm4gbnVsbD09ZT9cIlwiOmlvKGUpfXZhciBnbD1NbygoZnVuY3Rpb24oZSx0KXtpZih3aSh0KXx8TmEodCkpU28odCxTbCh0KSxlKTtlbHNlIGZvcih2YXIgbiBpbiB0KUllLmNhbGwodCxuKSYmSm4oZSxuLHRbbl0pfSkpLHZsPU1vKChmdW5jdGlvbihlLHQpe1NvKHQsamwodCksZSl9KSksbWw9TW8oKGZ1bmN0aW9uKGUsdCxuLHIpe1NvKHQsamwodCksZSxyKX0pKSxDbD1NbygoZnVuY3Rpb24oZSx0LG4scil7U28odCxTbCh0KSxlLHIpfSkpLHlsPVFvKHJyKSx3bD16cigoZnVuY3Rpb24oZSx0KXtlPU9lKGUpO3ZhciBuPS0xLHI9dC5sZW5ndGgsaT1yPjI/dFsyXTpvO2ZvcihpJiZ2aSh0WzBdLHRbMV0saSkmJihyPTEpOysrbjxyOylmb3IodmFyIGE9dFtuXSxsPWpsKGEpLHM9LTEsYz1sLmxlbmd0aDsrK3M8Yzspe3ZhciB1PWxbc10sZj1lW3VdOyhmPT09b3x8SGEoZixrZVt1XSkmJiFJZS5jYWxsKGUsdSkpJiYoZVt1XT1hW3VdKX1yZXR1cm4gZX0pKSxibD16cigoZnVuY3Rpb24oZSl7cmV0dXJuIGUucHVzaChvLEtvKSxfdChrbCxvLGUpfSkpO2Z1bmN0aW9uIHhsKGUsdCxuKXt2YXIgcj1udWxsPT1lP286d3IoZSx0KTtyZXR1cm4gcj09PW8/bjpyfWZ1bmN0aW9uIF9sKGUsdCl7cmV0dXJuIG51bGwhPWUmJmRpKGUsdCxMcil9dmFyIE9sPVZvKChmdW5jdGlvbihlLHQsbil7bnVsbCE9dCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdC50b1N0cmluZyYmKHQ9SGUuY2FsbCh0KSksZVt0XT1ufSksS2woUWwpKSxMbD1WbygoZnVuY3Rpb24oZSx0LG4pe251bGwhPXQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQudG9TdHJpbmcmJih0PUhlLmNhbGwodCkpLEllLmNhbGwoZSx0KT9lW3RdLnB1c2gobik6ZVt0XT1bbl19KSxpaSksRWw9enIoU3IpO2Z1bmN0aW9uIFNsKGUpe3JldHVybiBOYShlKT9HbihlKTpJcihlKX1mdW5jdGlvbiBqbChlKXtyZXR1cm4gTmEoZSk/R24oZSwhMCk6ZnVuY3Rpb24oZSl7aWYoIUthKGUpKXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1bXTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBPZShlKSl0LnB1c2gobik7cmV0dXJuIHR9KGUpO3ZhciB0PXdpKGUpLG49W107Zm9yKHZhciByIGluIGUpKFwiY29uc3RydWN0b3JcIiE9cnx8IXQmJkllLmNhbGwoZSxyKSkmJm4ucHVzaChyKTtyZXR1cm4gbn0oZSl9dmFyIE1sPU1vKChmdW5jdGlvbihlLHQsbil7VnIoZSx0LG4pfSkpLGtsPU1vKChmdW5jdGlvbihlLHQsbixyKXtWcihlLHQsbixyKX0pKSxSbD1RbygoZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtpZihudWxsPT1lKXJldHVybiBuO3ZhciByPSExO3Q9UnQodCwoZnVuY3Rpb24odCl7cmV0dXJuIHQ9dm8odCxlKSxyfHwocj10Lmxlbmd0aD4xKSx0fSkpLFNvKGUsdGkoZSksbiksciYmKG49aXIobiw3LFhvKSk7Zm9yKHZhciBvPXQubGVuZ3RoO28tLTspbG8obix0W29dKTtyZXR1cm4gbn0pKSxQbD1RbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT97fTpmdW5jdGlvbihlLHQpe3JldHVybiAkcihlLHQsKGZ1bmN0aW9uKHQsbil7cmV0dXJuIF9sKGUsbil9KSl9KGUsdCl9KSk7ZnVuY3Rpb24gSWwoZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuPVJ0KHRpKGUpLChmdW5jdGlvbihlKXtyZXR1cm5bZV19KSk7cmV0dXJuIHQ9aWkodCksJHIoZSxuLChmdW5jdGlvbihlLG4pe3JldHVybiB0KGUsblswXSl9KSl9dmFyIEFsPUdvKFNsKSxUbD1HbyhqbCk7ZnVuY3Rpb24gSGwoZSl7cmV0dXJuIG51bGw9PWU/W106S3QoZSxTbChlKSl9dmFyIEJsPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9dC50b0xvd2VyQ2FzZSgpLGUrKG4/VmwodCk6dCl9KSk7ZnVuY3Rpb24gVmwoZSl7cmV0dXJuIHpsKGhsKGUpLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIERsKGUpe3JldHVybihlPWhsKGUpKSYmZS5yZXBsYWNlKENlLGVuKS5yZXBsYWNlKFhlLFwiXCIpfXZhciBabD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiLVwiOlwiXCIpK3QudG9Mb3dlckNhc2UoKX0pKSwkbD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiIFwiOlwiXCIpK3QudG9Mb3dlckNhc2UoKX0pKSxObD1QbyhcInRvTG93ZXJDYXNlXCIpLEZsPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKG4/XCJfXCI6XCJcIikrdC50b0xvd2VyQ2FzZSgpfSkpLFVsPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKG4/XCIgXCI6XCJcIikremwodCl9KSksV2w9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIiBcIjpcIlwiKSt0LnRvVXBwZXJDYXNlKCl9KSksemw9UG8oXCJ0b1VwcGVyQ2FzZVwiKTtmdW5jdGlvbiBHbChlLHQsbil7cmV0dXJuIGU9aGwoZSksKHQ9bj9vOnQpPT09bz9mdW5jdGlvbihlKXtyZXR1cm4gdHQudGVzdChlKX0oZSk/ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2goUWUpfHxbXX0oZSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2goc2UpfHxbXX0oZSk6ZS5tYXRjaCh0KXx8W119dmFyIHFsPXpyKChmdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gX3QoZSxvLHQpfWNhdGNoKGUpe3JldHVybiB6YShlKT9lOm5ldyBiZShlKX19KSksWWw9UW8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIEx0KHQsKGZ1bmN0aW9uKHQpe3Q9SWkodCksbnIoZSx0LExhKGVbdF0sZSkpfSkpLGV9KSk7ZnVuY3Rpb24gS2woZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBYbD1IbygpLEpsPUhvKCEwKTtmdW5jdGlvbiBRbChlKXtyZXR1cm4gZX1mdW5jdGlvbiBlcyhlKXtyZXR1cm4gUHIoXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOmlyKGUsMSkpfXZhciB0cz16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIFNyKG4sZSx0KX19KSksbnM9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBTcihlLG4sdCl9fSkpO2Z1bmN0aW9uIHJzKGUsdCxuKXt2YXIgcj1TbCh0KSxvPXlyKHQscik7bnVsbCE9bnx8S2EodCkmJihvLmxlbmd0aHx8IXIubGVuZ3RoKXx8KG49dCx0PWUsZT10aGlzLG89eXIodCxTbCh0KSkpO3ZhciBpPSEoS2EobikmJlwiY2hhaW5cImluIG4mJiFuLmNoYWluKSxhPUdhKGUpO3JldHVybiBMdChvLChmdW5jdGlvbihuKXt2YXIgcj10W25dO2Vbbl09cixhJiYoZS5wcm90b3R5cGVbbl09ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fY2hhaW5fXztpZihpfHx0KXt2YXIgbj1lKHRoaXMuX193cmFwcGVkX18pO3JldHVybihuLl9fYWN0aW9uc19fPUVvKHRoaXMuX19hY3Rpb25zX18pKS5wdXNoKHtmdW5jOnIsYXJnczphcmd1bWVudHMsdGhpc0FyZzplfSksbi5fX2NoYWluX189dCxufXJldHVybiByLmFwcGx5KGUsUHQoW3RoaXMudmFsdWUoKV0sYXJndW1lbnRzKSl9KX0pKSxlfWZ1bmN0aW9uIG9zKCl7fXZhciBpcz1abyhSdCksYXM9Wm8oU3QpLGxzPVpvKFR0KTtmdW5jdGlvbiBzcyhlKXtyZXR1cm4gbWkoZSk/RnQoSWkoZSkpOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gd3IodCxlKX19KGUpfXZhciBjcz1ObygpLHVzPU5vKCEwKTtmdW5jdGlvbiBmcygpe3JldHVybltdfWZ1bmN0aW9uIGRzKCl7cmV0dXJuITF9dmFyIHBzLGhzPURvKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSwwKSxncz1XbyhcImNlaWxcIiksdnM9RG8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUvdH0pLDEpLG1zPVdvKFwiZmxvb3JcIiksQ3M9RG8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqdH0pLDEpLHlzPVdvKFwicm91bmRcIiksd3M9RG8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pLDApO3JldHVybiBCbi5hZnRlcj1mdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFNlKGkpO3JldHVybiBlPXVsKGUpLGZ1bmN0aW9uKCl7aWYoLS1lPDEpcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sQm4uYXJ5PV9hLEJuLmFzc2lnbj1nbCxCbi5hc3NpZ25Jbj12bCxCbi5hc3NpZ25JbldpdGg9bWwsQm4uYXNzaWduV2l0aD1DbCxCbi5hdD15bCxCbi5iZWZvcmU9T2EsQm4uYmluZD1MYSxCbi5iaW5kQWxsPVlsLEJuLmJpbmRLZXk9RWEsQm4uY2FzdEFycmF5PWZ1bmN0aW9uKCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW107dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBaYShlKT9lOltlXX0sQm4uY2hhaW49c2EsQm4uY2h1bms9ZnVuY3Rpb24oZSx0LG4pe3Q9KG4/dmkoZSx0LG4pOnQ9PT1vKT8xOmduKHVsKHQpLDApO3ZhciBpPW51bGw9PWU/MDplLmxlbmd0aDtpZighaXx8dDwxKXJldHVybltdO2Zvcih2YXIgYT0wLGw9MCxzPXIoZHQoaS90KSk7YTxpOylzW2wrK109UXIoZSxhLGErPXQpO3JldHVybiBzfSxCbi5jb21wYWN0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aCxyPTAsbz1bXTsrK3Q8bjspe3ZhciBpPWVbdF07aSYmKG9bcisrXT1pKX1yZXR1cm4gb30sQm4uY29uY2F0PWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDtpZighZSlyZXR1cm5bXTtmb3IodmFyIHQ9cihlLTEpLG49YXJndW1lbnRzWzBdLG89ZTtvLS07KXRbby0xXT1hcmd1bWVudHNbb107cmV0dXJuIFB0KFphKG4pP0VvKG4pOltuXSxocih0LDEpKX0sQm4uY29uZD1mdW5jdGlvbihlKXt2YXIgdD1udWxsPT1lPzA6ZS5sZW5ndGgsbj1paSgpO3JldHVybiBlPXQ/UnQoZSwoZnVuY3Rpb24oZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZVsxXSl0aHJvdyBuZXcgU2UoaSk7cmV0dXJuW24oZVswXSksZVsxXV19KSk6W10senIoKGZ1bmN0aW9uKG4pe2Zvcih2YXIgcj0tMTsrK3I8dDspe3ZhciBvPWVbcl07aWYoX3Qob1swXSx0aGlzLG4pKXJldHVybiBfdChvWzFdLHRoaXMsbil9fSkpfSxCbi5jb25mb3Jtcz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9U2woZSk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBhcihuLGUsdCl9fShpcihlLDEpKX0sQm4uY29uc3RhbnQ9S2wsQm4uY291bnRCeT1mYSxCbi5jcmVhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1WbihlKTtyZXR1cm4gbnVsbD09dD9uOnRyKG4sdCl9LEJuLmN1cnJ5PWZ1bmN0aW9uIGUodCxuLHIpe3ZhciBpPXFvKHQsOCxvLG8sbyxvLG8sbj1yP286bik7cmV0dXJuIGkucGxhY2Vob2xkZXI9ZS5wbGFjZWhvbGRlcixpfSxCbi5jdXJyeVJpZ2h0PWZ1bmN0aW9uIGUodCxuLHIpe3ZhciBpPXFvKHQsMTYsbyxvLG8sbyxvLG49cj9vOm4pO3JldHVybiBpLnBsYWNlaG9sZGVyPWUucGxhY2Vob2xkZXIsaX0sQm4uZGVib3VuY2U9U2EsQm4uZGVmYXVsdHM9d2wsQm4uZGVmYXVsdHNEZWVwPWJsLEJuLmRlZmVyPWphLEJuLmRlbGF5PU1hLEJuLmRpZmZlcmVuY2U9SGksQm4uZGlmZmVyZW5jZUJ5PUJpLEJuLmRpZmZlcmVuY2VXaXRoPVZpLEJuLmRyb3A9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gcj9RcihlLCh0PW58fHQ9PT1vPzE6dWwodCkpPDA/MDp0LHIpOltdfSxCbi5kcm9wUmlnaHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gcj9RcihlLDAsKHQ9ci0odD1ufHx0PT09bz8xOnVsKHQpKSk8MD8wOnQpOltdfSxCbi5kcm9wUmlnaHRXaGlsZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9jbyhlLGlpKHQsMyksITAsITApOltdfSxCbi5kcm9wV2hpbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/Y28oZSxpaSh0LDMpLCEwKTpbXX0sQm4uZmlsbD1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIGk/KG4mJlwibnVtYmVyXCIhPXR5cGVvZiBuJiZ2aShlLHQsbikmJihuPTAscj1pKSxmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1lLmxlbmd0aDtmb3IoKG49dWwobikpPDAmJihuPS1uPmk/MDppK24pLChyPXI9PT1vfHxyPmk/aTp1bChyKSk8MCYmKHIrPWkpLHI9bj5yPzA6Zmwocik7bjxyOyllW24rK109dDtyZXR1cm4gZX0oZSx0LG4scikpOltdfSxCbi5maWx0ZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oWmEoZSk/anQ6cHIpKGUsaWkodCwzKSl9LEJuLmZsYXRNYXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaHIoeWEoZSx0KSwxKX0sQm4uZmxhdE1hcERlZXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaHIoeWEoZSx0KSx1KX0sQm4uZmxhdE1hcERlcHRoPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPT09bz8xOnVsKG4pLGhyKHlhKGUsdCksbil9LEJuLmZsYXR0ZW49JGksQm4uZmxhdHRlbkRlZXA9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJmUubGVuZ3RoP2hyKGUsdSk6W119LEJuLmZsYXR0ZW5EZXB0aD1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsIT1lJiZlLmxlbmd0aD9ocihlLHQ9dD09PW8/MTp1bCh0KSk6W119LEJuLmZsaXA9ZnVuY3Rpb24oZSl7cmV0dXJuIHFvKGUsNTEyKX0sQm4uZmxvdz1YbCxCbi5mbG93UmlnaHQ9SmwsQm4uZnJvbVBhaXJzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aCxyPXt9OysrdDxuOyl7dmFyIG89ZVt0XTtyW29bMF1dPW9bMV19cmV0dXJuIHJ9LEJuLmZ1bmN0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9bXTp5cihlLFNsKGUpKX0sQm4uZnVuY3Rpb25zSW49ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/W106eXIoZSxqbChlKSl9LEJuLmdyb3VwQnk9dmEsQm4uaW5pdGlhbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZS5sZW5ndGg/UXIoZSwwLC0xKTpbXX0sQm4uaW50ZXJzZWN0aW9uPUZpLEJuLmludGVyc2VjdGlvbkJ5PVVpLEJuLmludGVyc2VjdGlvbldpdGg9V2ksQm4uaW52ZXJ0PU9sLEJuLmludmVydEJ5PUxsLEJuLmludm9rZU1hcD1tYSxCbi5pdGVyYXRlZT1lcyxCbi5rZXlCeT1DYSxCbi5rZXlzPVNsLEJuLmtleXNJbj1qbCxCbi5tYXA9eWEsQm4ubWFwS2V5cz1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O3JldHVybiB0PWlpKHQsMyksbXIoZSwoZnVuY3Rpb24oZSxyLG8pe25yKG4sdChlLHIsbyksZSl9KSksbn0sQm4ubWFwVmFsdWVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49e307cmV0dXJuIHQ9aWkodCwzKSxtcihlLChmdW5jdGlvbihlLHIsbyl7bnIobixyLHQoZSxyLG8pKX0pKSxufSxCbi5tYXRjaGVzPWZ1bmN0aW9uKGUpe3JldHVybiBIcihpcihlLDEpKX0sQm4ubWF0Y2hlc1Byb3BlcnR5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEJyKGUsaXIodCwxKSl9LEJuLm1lbW9pemU9a2EsQm4ubWVyZ2U9TWwsQm4ubWVyZ2VXaXRoPWtsLEJuLm1ldGhvZD10cyxCbi5tZXRob2RPZj1ucyxCbi5taXhpbj1ycyxCbi5uZWdhdGU9UmEsQm4ubnRoQXJnPWZ1bmN0aW9uKGUpe3JldHVybiBlPXVsKGUpLHpyKChmdW5jdGlvbih0KXtyZXR1cm4gRHIodCxlKX0pKX0sQm4ub21pdD1SbCxCbi5vbWl0Qnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSWwoZSxSYShpaSh0KSkpfSxCbi5vbmNlPWZ1bmN0aW9uKGUpe3JldHVybiBPYSgyLGUpfSxCbi5vcmRlckJ5PWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBudWxsPT1lP1tdOihaYSh0KXx8KHQ9bnVsbD09dD9bXTpbdF0pLFphKG49cj9vOm4pfHwobj1udWxsPT1uP1tdOltuXSksWnIoZSx0LG4pKX0sQm4ub3Zlcj1pcyxCbi5vdmVyQXJncz1QYSxCbi5vdmVyRXZlcnk9YXMsQm4ub3ZlclNvbWU9bHMsQm4ucGFydGlhbD1JYSxCbi5wYXJ0aWFsUmlnaHQ9QWEsQm4ucGFydGl0aW9uPXdhLEJuLnBpY2s9UGwsQm4ucGlja0J5PUlsLEJuLnByb3BlcnR5PXNzLEJuLnByb3BlcnR5T2Y9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT1lP286d3IoZSx0KX19LEJuLnB1bGw9R2ksQm4ucHVsbEFsbD1xaSxCbi5wdWxsQWxsQnk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlJiZlLmxlbmd0aCYmdCYmdC5sZW5ndGg/TnIoZSx0LGlpKG4sMikpOmV9LEJuLnB1bGxBbGxXaXRoPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSYmZS5sZW5ndGgmJnQmJnQubGVuZ3RoP05yKGUsdCxvLG4pOmV9LEJuLnB1bGxBdD1ZaSxCbi5yYW5nZT1jcyxCbi5yYW5nZVJpZ2h0PXVzLEJuLnJlYXJnPVRhLEJuLnJlamVjdD1mdW5jdGlvbihlLHQpe3JldHVybihaYShlKT9qdDpwcikoZSxSYShpaSh0LDMpKSl9LEJuLnJlbW92ZT1mdW5jdGlvbihlLHQpe3ZhciBuPVtdO2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuIG47dmFyIHI9LTEsbz1bXSxpPWUubGVuZ3RoO2Zvcih0PWlpKHQsMyk7KytyPGk7KXt2YXIgYT1lW3JdO3QoYSxyLGUpJiYobi5wdXNoKGEpLG8ucHVzaChyKSl9cmV0dXJuIEZyKGUsbyksbn0sQm4ucmVzdD1mdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFNlKGkpO3JldHVybiB6cihlLHQ9dD09PW8/dDp1bCh0KSl9LEJuLnJldmVyc2U9S2ksQm4uc2FtcGxlU2l6ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9KG4/dmkoZSx0LG4pOnQ9PT1vKT8xOnVsKHQpLChaYShlKT9ZbjpxcikoZSx0KX0sQm4uc2V0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09ZT9lOllyKGUsdCxuKX0sQm4uc2V0V2l0aD1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiByP3I6byxudWxsPT1lP2U6WXIoZSx0LG4scil9LEJuLnNodWZmbGU9ZnVuY3Rpb24oZSl7cmV0dXJuKFphKGUpP0tuOkpyKShlKX0sQm4uc2xpY2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gcj8obiYmXCJudW1iZXJcIiE9dHlwZW9mIG4mJnZpKGUsdCxuKT8odD0wLG49cik6KHQ9bnVsbD09dD8wOnVsKHQpLG49bj09PW8/cjp1bChuKSksUXIoZSx0LG4pKTpbXX0sQm4uc29ydEJ5PWJhLEJuLnNvcnRlZFVuaXE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP3JvKGUpOltdfSxCbi5zb3J0ZWRVbmlxQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/cm8oZSxpaSh0LDIpKTpbXX0sQm4uc3BsaXQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuJiZcIm51bWJlclwiIT10eXBlb2YgbiYmdmkoZSx0LG4pJiYodD1uPW8pLChuPW49PT1vP3A6bj4+PjApPyhlPWhsKGUpKSYmKFwic3RyaW5nXCI9PXR5cGVvZiB0fHxudWxsIT10JiYhdGwodCkpJiYhKHQ9aW8odCkpJiZybihlKT9Dbyh1bihlKSwwLG4pOmUuc3BsaXQodCxuKTpbXX0sQm4uc3ByZWFkPWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgU2UoaSk7cmV0dXJuIHQ9bnVsbD09dD8wOmduKHVsKHQpLDApLHpyKChmdW5jdGlvbihuKXt2YXIgcj1uW3RdLG89Q28obiwwLHQpO3JldHVybiByJiZQdChvLHIpLF90KGUsdGhpcyxvKX0pKX0sQm4udGFpbD1mdW5jdGlvbihlKXt2YXIgdD1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHQ/UXIoZSwxLHQpOltdfSxCbi50YWtlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSYmZS5sZW5ndGg/UXIoZSwwLCh0PW58fHQ9PT1vPzE6dWwodCkpPDA/MDp0KTpbXX0sQm4udGFrZVJpZ2h0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/UXIoZSwodD1yLSh0PW58fHQ9PT1vPzE6dWwodCkpKTwwPzA6dCxyKTpbXX0sQm4udGFrZVJpZ2h0V2hpbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/Y28oZSxpaSh0LDMpLCExLCEwKTpbXX0sQm4udGFrZVdoaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2NvKGUsaWkodCwzKSk6W119LEJuLnRhcD1mdW5jdGlvbihlLHQpe3JldHVybiB0KGUpLGV9LEJuLnRocm90dGxlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0hMCxvPSEwO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFNlKGkpO3JldHVybiBLYShuKSYmKHI9XCJsZWFkaW5nXCJpbiBuPyEhbi5sZWFkaW5nOnIsbz1cInRyYWlsaW5nXCJpbiBuPyEhbi50cmFpbGluZzpvKSxTYShlLHQse2xlYWRpbmc6cixtYXhXYWl0OnQsdHJhaWxpbmc6b30pfSxCbi50aHJ1PWNhLEJuLnRvQXJyYXk9c2wsQm4udG9QYWlycz1BbCxCbi50b1BhaXJzSW49VGwsQm4udG9QYXRoPWZ1bmN0aW9uKGUpe3JldHVybiBaYShlKT9SdChlLElpKTpvbChlKT9bZV06RW8oUGkoaGwoZSkpKX0sQm4udG9QbGFpbk9iamVjdD1wbCxCbi50cmFuc2Zvcm09ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVphKGUpLG89cnx8VWEoZSl8fGlsKGUpO2lmKHQ9aWkodCw0KSxudWxsPT1uKXt2YXIgaT1lJiZlLmNvbnN0cnVjdG9yO249bz9yP25ldyBpOltdOkthKGUpJiZHYShpKT9WbihVZShlKSk6e319cmV0dXJuKG8/THQ6bXIpKGUsKGZ1bmN0aW9uKGUscixvKXtyZXR1cm4gdChuLGUscixvKX0pKSxufSxCbi51bmFyeT1mdW5jdGlvbihlKXtyZXR1cm4gX2EoZSwxKX0sQm4udW5pb249WGksQm4udW5pb25CeT1KaSxCbi51bmlvbldpdGg9UWksQm4udW5pcT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/YW8oZSk6W119LEJuLnVuaXFCeT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9hbyhlLGlpKHQsMikpOltdfSxCbi51bmlxV2l0aD1mdW5jdGlvbihlLHQpe3JldHVybiB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvLGUmJmUubGVuZ3RoP2FvKGUsbyx0KTpbXX0sQm4udW5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZXx8bG8oZSx0KX0sQm4udW56aXA9ZWEsQm4udW56aXBXaXRoPXRhLEJuLnVwZGF0ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PWU/ZTpzbyhlLHQsZ28obikpfSxCbi51cGRhdGVXaXRoPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiByPVwiZnVuY3Rpb25cIj09dHlwZW9mIHI/cjpvLG51bGw9PWU/ZTpzbyhlLHQsZ28obikscil9LEJuLnZhbHVlcz1IbCxCbi52YWx1ZXNJbj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9bXTpLdChlLGpsKGUpKX0sQm4ud2l0aG91dD1uYSxCbi53b3Jkcz1HbCxCbi53cmFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIElhKGdvKHQpLGUpfSxCbi54b3I9cmEsQm4ueG9yQnk9b2EsQm4ueG9yV2l0aD1pYSxCbi56aXA9YWEsQm4uemlwT2JqZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHBvKGV8fFtdLHR8fFtdLEpuKX0sQm4uemlwT2JqZWN0RGVlcD1mdW5jdGlvbihlLHQpe3JldHVybiBwbyhlfHxbXSx0fHxbXSxZcil9LEJuLnppcFdpdGg9bGEsQm4uZW50cmllcz1BbCxCbi5lbnRyaWVzSW49VGwsQm4uZXh0ZW5kPXZsLEJuLmV4dGVuZFdpdGg9bWwscnMoQm4sQm4pLEJuLmFkZD1ocyxCbi5hdHRlbXB0PXFsLEJuLmNhbWVsQ2FzZT1CbCxCbi5jYXBpdGFsaXplPVZsLEJuLmNlaWw9Z3MsQm4uY2xhbXA9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPT09byYmKG49dCx0PW8pLG4hPT1vJiYobj0obj1kbChuKSk9PW4/bjowKSx0IT09byYmKHQ9KHQ9ZGwodCkpPT10P3Q6MCksb3IoZGwoZSksdCxuKX0sQm4uY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGlyKGUsNCl9LEJuLmNsb25lRGVlcD1mdW5jdGlvbihlKXtyZXR1cm4gaXIoZSw1KX0sQm4uY2xvbmVEZWVwV2l0aD1mdW5jdGlvbihlLHQpe3JldHVybiBpcihlLDUsdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byl9LEJuLmNsb25lV2l0aD1mdW5jdGlvbihlLHQpe3JldHVybiBpcihlLDQsdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byl9LEJuLmNvbmZvcm1zVG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09dHx8YXIoZSx0LFNsKHQpKX0sQm4uZGVidXJyPURsLEJuLmRlZmF1bHRUbz1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lfHxlIT1lP3Q6ZX0sQm4uZGl2aWRlPXZzLEJuLmVuZHNXaXRoPWZ1bmN0aW9uKGUsdCxuKXtlPWhsKGUpLHQ9aW8odCk7dmFyIHI9ZS5sZW5ndGgsaT1uPW49PT1vP3I6b3IodWwobiksMCxyKTtyZXR1cm4obi09dC5sZW5ndGgpPj0wJiZlLnNsaWNlKG4saSk9PXR9LEJuLmVxPUhhLEJuLmVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4oZT1obChlKSkmJnEudGVzdChlKT9lLnJlcGxhY2Uoeix0bik6ZX0sQm4uZXNjYXBlUmVnRXhwPWZ1bmN0aW9uKGUpe3JldHVybihlPWhsKGUpKSYmbmUudGVzdChlKT9lLnJlcGxhY2UodGUsXCJcXFxcJCZcIik6ZX0sQm4uZXZlcnk9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVphKGUpP1N0OmZyO3JldHVybiBuJiZ2aShlLHQsbikmJih0PW8pLHIoZSxpaSh0LDMpKX0sQm4uZmluZD1kYSxCbi5maW5kSW5kZXg9RGksQm4uZmluZEtleT1mdW5jdGlvbihlLHQpe3JldHVybiBCdChlLGlpKHQsMyksbXIpfSxCbi5maW5kTGFzdD1wYSxCbi5maW5kTGFzdEluZGV4PVppLEJuLmZpbmRMYXN0S2V5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEJ0KGUsaWkodCwzKSxDcil9LEJuLmZsb29yPW1zLEJuLmZvckVhY2g9aGEsQm4uZm9yRWFjaFJpZ2h0PWdhLEJuLmZvckluPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/ZTpncihlLGlpKHQsMyksamwpfSxCbi5mb3JJblJpZ2h0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/ZTp2cihlLGlpKHQsMyksamwpfSxCbi5mb3JPd249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmbXIoZSxpaSh0LDMpKX0sQm4uZm9yT3duUmlnaHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmQ3IoZSxpaSh0LDMpKX0sQm4uZ2V0PXhsLEJuLmd0PUJhLEJuLmd0ZT1WYSxCbi5oYXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbCE9ZSYmZGkoZSx0LE9yKX0sQm4uaGFzSW49X2wsQm4uaGVhZD1OaSxCbi5pZGVudGl0eT1RbCxCbi5pbmNsdWRlcz1mdW5jdGlvbihlLHQsbixyKXtlPU5hKGUpP2U6SGwoZSksbj1uJiYhcj91bChuKTowO3ZhciBvPWUubGVuZ3RoO3JldHVybiBuPDAmJihuPWduKG8rbiwwKSkscmwoZSk/bjw9byYmZS5pbmRleE9mKHQsbik+LTE6ISFvJiZEdChlLHQsbik+LTF9LEJuLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtpZighcilyZXR1cm4tMTt2YXIgbz1udWxsPT1uPzA6dWwobik7cmV0dXJuIG88MCYmKG89Z24ocitvLDApKSxEdChlLHQsbyl9LEJuLmluUmFuZ2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PWNsKHQpLG49PT1vPyhuPXQsdD0wKTpuPWNsKG4pLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT49dm4odCxuKSYmZTxnbih0LG4pfShlPWRsKGUpLHQsbil9LEJuLmludm9rZT1FbCxCbi5pc0FyZ3VtZW50cz1EYSxCbi5pc0FycmF5PVphLEJuLmlzQXJyYXlCdWZmZXI9JGEsQm4uaXNBcnJheUxpa2U9TmEsQm4uaXNBcnJheUxpa2VPYmplY3Q9RmEsQm4uaXNCb29sZWFuPWZ1bmN0aW9uKGUpe3JldHVybiEwPT09ZXx8ITE9PT1lfHxYYShlKSYmeHIoZSk9PW19LEJuLmlzQnVmZmVyPVVhLEJuLmlzRGF0ZT1XYSxCbi5pc0VsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFhhKGUpJiYxPT09ZS5ub2RlVHlwZSYmIWVsKGUpfSxCbi5pc0VtcHR5PWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpcmV0dXJuITA7aWYoTmEoZSkmJihaYShlKXx8XCJzdHJpbmdcIj09dHlwZW9mIGV8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuc3BsaWNlfHxVYShlKXx8aWwoZSl8fERhKGUpKSlyZXR1cm4hZS5sZW5ndGg7dmFyIHQ9ZmkoZSk7aWYodD09eHx8dD09UylyZXR1cm4hZS5zaXplO2lmKHdpKGUpKXJldHVybiFJcihlKS5sZW5ndGg7Zm9yKHZhciBuIGluIGUpaWYoSWUuY2FsbChlLG4pKXJldHVybiExO3JldHVybiEwfSxCbi5pc0VxdWFsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1yKGUsdCl9LEJuLmlzRXF1YWxXaXRoPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0obj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246byk/bihlLHQpOm87cmV0dXJuIHI9PT1vP01yKGUsdCxvLG4pOiEhcn0sQm4uaXNFcnJvcj16YSxCbi5pc0Zpbml0ZT1mdW5jdGlvbihlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmSHQoZSl9LEJuLmlzRnVuY3Rpb249R2EsQm4uaXNJbnRlZ2VyPXFhLEJuLmlzTGVuZ3RoPVlhLEJuLmlzTWFwPUphLEJuLmlzTWF0Y2g9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR8fGtyKGUsdCxsaSh0KSl9LEJuLmlzTWF0Y2hXaXRoPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246byxrcihlLHQsbGkodCksbil9LEJuLmlzTmFOPWZ1bmN0aW9uKGUpe3JldHVybiBRYShlKSYmZSE9K2V9LEJuLmlzTmF0aXZlPWZ1bmN0aW9uKGUpe2lmKHlpKGUpKXRocm93IG5ldyBiZShcIlVuc3VwcG9ydGVkIGNvcmUtanMgdXNlLiBUcnkgaHR0cHM6Ly9ucG1zLmlvL3NlYXJjaD9xPXBvbnlmaWxsLlwiKTtyZXR1cm4gUnIoZSl9LEJuLmlzTmlsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfSxCbi5pc051bGw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfSxCbi5pc051bWJlcj1RYSxCbi5pc09iamVjdD1LYSxCbi5pc09iamVjdExpa2U9WGEsQm4uaXNQbGFpbk9iamVjdD1lbCxCbi5pc1JlZ0V4cD10bCxCbi5pc1NhZmVJbnRlZ2VyPWZ1bmN0aW9uKGUpe3JldHVybiBxYShlKSYmZT49LTkwMDcxOTkyNTQ3NDA5OTEmJmU8PWZ9LEJuLmlzU2V0PW5sLEJuLmlzU3RyaW5nPXJsLEJuLmlzU3ltYm9sPW9sLEJuLmlzVHlwZWRBcnJheT1pbCxCbi5pc1VuZGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PW99LEJuLmlzV2Vha01hcD1mdW5jdGlvbihlKXtyZXR1cm4gWGEoZSkmJmZpKGUpPT1rfSxCbi5pc1dlYWtTZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFhhKGUpJiZcIltvYmplY3QgV2Vha1NldF1cIj09eHIoZSl9LEJuLmpvaW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT9cIlwiOlV0LmNhbGwoZSx0KX0sQm4ua2ViYWJDYXNlPVpsLEJuLmxhc3Q9emksQm4ubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtpZighcilyZXR1cm4tMTt2YXIgaT1yO3JldHVybiBuIT09byYmKGk9KGk9dWwobikpPDA/Z24ocitpLDApOnZuKGksci0xKSksdD09dD9mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW4rMTtyLS07KWlmKGVbcl09PT10KXJldHVybiByO3JldHVybiByfShlLHQsaSk6VnQoZSwkdCxpLCEwKX0sQm4ubG93ZXJDYXNlPSRsLEJuLmxvd2VyRmlyc3Q9TmwsQm4ubHQ9YWwsQm4ubHRlPWxsLEJuLm1heD1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/ZHIoZSxRbCxfcik6b30sQm4ubWF4Qnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/ZHIoZSxpaSh0LDIpLF9yKTpvfSxCbi5tZWFuPWZ1bmN0aW9uKGUpe3JldHVybiBOdChlLFFsKX0sQm4ubWVhbkJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE50KGUsaWkodCwyKSl9LEJuLm1pbj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/ZHIoZSxRbCxBcik6b30sQm4ubWluQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/ZHIoZSxpaSh0LDIpLEFyKTpvfSxCbi5zdHViQXJyYXk9ZnMsQm4uc3R1YkZhbHNlPWRzLEJuLnN0dWJPYmplY3Q9ZnVuY3Rpb24oKXtyZXR1cm57fX0sQm4uc3R1YlN0cmluZz1mdW5jdGlvbigpe3JldHVyblwiXCJ9LEJuLnN0dWJUcnVlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEJuLm11bHRpcGx5PUNzLEJuLm50aD1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9EcihlLHVsKHQpKTpvfSxCbi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGZ0Ll89PT10aGlzJiYoZnQuXz1WZSksdGhpc30sQm4ubm9vcD1vcyxCbi5ub3c9eGEsQm4ucGFkPWZ1bmN0aW9uKGUsdCxuKXtlPWhsKGUpO3ZhciByPSh0PXVsKHQpKT9jbihlKTowO2lmKCF0fHxyPj10KXJldHVybiBlO3ZhciBvPSh0LXIpLzI7cmV0dXJuICRvKHB0KG8pLG4pK2UrJG8oZHQobyksbil9LEJuLnBhZEVuZD1mdW5jdGlvbihlLHQsbil7ZT1obChlKTt2YXIgcj0odD11bCh0KSk/Y24oZSk6MDtyZXR1cm4gdCYmcjx0P2UrJG8odC1yLG4pOmV9LEJuLnBhZFN0YXJ0PWZ1bmN0aW9uKGUsdCxuKXtlPWhsKGUpO3ZhciByPSh0PXVsKHQpKT9jbihlKTowO3JldHVybiB0JiZyPHQ/JG8odC1yLG4pK2U6ZX0sQm4ucGFyc2VJbnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBufHxudWxsPT10P3Q9MDp0JiYodD0rdCksQ24oaGwoZSkucmVwbGFjZShyZSxcIlwiKSx0fHwwKX0sQm4ucmFuZG9tPWZ1bmN0aW9uKGUsdCxuKXtpZihuJiZcImJvb2xlYW5cIiE9dHlwZW9mIG4mJnZpKGUsdCxuKSYmKHQ9bj1vKSxuPT09byYmKFwiYm9vbGVhblwiPT10eXBlb2YgdD8obj10LHQ9byk6XCJib29sZWFuXCI9PXR5cGVvZiBlJiYobj1lLGU9bykpLGU9PT1vJiZ0PT09bz8oZT0wLHQ9MSk6KGU9Y2woZSksdD09PW8/KHQ9ZSxlPTApOnQ9Y2wodCkpLGU+dCl7dmFyIHI9ZTtlPXQsdD1yfWlmKG58fGUlMXx8dCUxKXt2YXIgaT15bigpO3JldHVybiB2bihlK2kqKHQtZStsdChcIjFlLVwiKygoaStcIlwiKS5sZW5ndGgtMSkpKSx0KX1yZXR1cm4gVXIoZSx0KX0sQm4ucmVkdWNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1aYShlKT9JdDpXdCxvPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gcihlLGlpKHQsNCksbixvLGNyKX0sQm4ucmVkdWNlUmlnaHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVphKGUpP0F0Old0LG89YXJndW1lbnRzLmxlbmd0aDwzO3JldHVybiByKGUsaWkodCw0KSxuLG8sdXIpfSxCbi5yZXBlYXQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PShuP3ZpKGUsdCxuKTp0PT09byk/MTp1bCh0KSxXcihobChlKSx0KX0sQm4ucmVwbGFjZT1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cyx0PWhsKGVbMF0pO3JldHVybiBlLmxlbmd0aDwzP3Q6dC5yZXBsYWNlKGVbMV0sZVsyXSl9LEJuLnJlc3VsdD1mdW5jdGlvbihlLHQsbil7dmFyIHI9LTEsaT0odD12byh0LGUpKS5sZW5ndGg7Zm9yKGl8fChpPTEsZT1vKTsrK3I8aTspe3ZhciBhPW51bGw9PWU/bzplW0lpKHRbcl0pXTthPT09byYmKHI9aSxhPW4pLGU9R2EoYSk/YS5jYWxsKGUpOmF9cmV0dXJuIGV9LEJuLnJvdW5kPXlzLEJuLnJ1bkluQ29udGV4dD1lLEJuLnNhbXBsZT1mdW5jdGlvbihlKXtyZXR1cm4oWmEoZSk/cW46R3IpKGUpfSxCbi5zaXplPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpcmV0dXJuIDA7aWYoTmEoZSkpcmV0dXJuIHJsKGUpP2NuKGUpOmUubGVuZ3RoO3ZhciB0PWZpKGUpO3JldHVybiB0PT14fHx0PT1TP2Uuc2l6ZTpJcihlKS5sZW5ndGh9LEJuLnNuYWtlQ2FzZT1GbCxCbi5zb21lPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1aYShlKT9UdDplbztyZXR1cm4gbiYmdmkoZSx0LG4pJiYodD1vKSxyKGUsaWkodCwzKSl9LEJuLnNvcnRlZEluZGV4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRvKGUsdCl9LEJuLnNvcnRlZEluZGV4Qnk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBubyhlLHQsaWkobiwyKSl9LEJuLnNvcnRlZEluZGV4T2Y9ZnVuY3Rpb24oZSx0KXt2YXIgbj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYobil7dmFyIHI9dG8oZSx0KTtpZihyPG4mJkhhKGVbcl0sdCkpcmV0dXJuIHJ9cmV0dXJuLTF9LEJuLnNvcnRlZExhc3RJbmRleD1mdW5jdGlvbihlLHQpe3JldHVybiB0byhlLHQsITApfSxCbi5zb3J0ZWRMYXN0SW5kZXhCeT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5vKGUsdCxpaShuLDIpLCEwKX0sQm4uc29ydGVkTGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT1lJiZlLmxlbmd0aCl7dmFyIG49dG8oZSx0LCEwKS0xO2lmKEhhKGVbbl0sdCkpcmV0dXJuIG59cmV0dXJuLTF9LEJuLnN0YXJ0Q2FzZT1VbCxCbi5zdGFydHNXaXRoPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT1obChlKSxuPW51bGw9PW4/MDpvcih1bChuKSwwLGUubGVuZ3RoKSx0PWlvKHQpLGUuc2xpY2UobixuK3QubGVuZ3RoKT09dH0sQm4uc3VidHJhY3Q9d3MsQm4uc3VtPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD96dChlLFFsKTowfSxCbi5zdW1CeT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD96dChlLGlpKHQsMikpOjB9LEJuLnRlbXBsYXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1Cbi50ZW1wbGF0ZVNldHRpbmdzO24mJnZpKGUsdCxuKSYmKHQ9byksZT1obChlKSx0PW1sKHt9LHQscixZbyk7dmFyIGksYSxsPW1sKHt9LHQuaW1wb3J0cyxyLmltcG9ydHMsWW8pLHM9U2wobCksYz1LdChsLHMpLHU9MCxmPXQuaW50ZXJwb2xhdGV8fHllLGQ9XCJfX3AgKz0gJ1wiLHA9TGUoKHQuZXNjYXBlfHx5ZSkuc291cmNlK1wifFwiK2Yuc291cmNlK1wifFwiKyhmPT09WD9mZTp5ZSkuc291cmNlK1wifFwiKyh0LmV2YWx1YXRlfHx5ZSkuc291cmNlK1wifCRcIixcImdcIiksaD1cIi8vIyBzb3VyY2VVUkw9XCIrKEllLmNhbGwodCxcInNvdXJjZVVSTFwiKT8odC5zb3VyY2VVUkwrXCJcIikucmVwbGFjZSgvXFxzL2csXCIgXCIpOlwibG9kYXNoLnRlbXBsYXRlU291cmNlc1tcIisgKytydCtcIl1cIikrXCJcXG5cIjtlLnJlcGxhY2UocCwoZnVuY3Rpb24odCxuLHIsbyxsLHMpe3JldHVybiByfHwocj1vKSxkKz1lLnNsaWNlKHUscykucmVwbGFjZSh3ZSxubiksbiYmKGk9ITAsZCs9XCInICtcXG5fX2UoXCIrbitcIikgK1xcbidcIiksbCYmKGE9ITAsZCs9XCInO1xcblwiK2wrXCI7XFxuX19wICs9ICdcIiksciYmKGQrPVwiJyArXFxuKChfX3QgPSAoXCIrcitcIikpID09IG51bGwgPyAnJyA6IF9fdCkgK1xcbidcIiksdT1zK3QubGVuZ3RoLHR9KSksZCs9XCInO1xcblwiO3ZhciBnPUllLmNhbGwodCxcInZhcmlhYmxlXCIpJiZ0LnZhcmlhYmxlO2lmKGcpe2lmKGNlLnRlc3QoZykpdGhyb3cgbmV3IGJlKFwiSW52YWxpZCBgdmFyaWFibGVgIG9wdGlvbiBwYXNzZWQgaW50byBgXy50ZW1wbGF0ZWBcIil9ZWxzZSBkPVwid2l0aCAob2JqKSB7XFxuXCIrZCtcIlxcbn1cXG5cIjtkPShhP2QucmVwbGFjZShOLFwiXCIpOmQpLnJlcGxhY2UoRixcIiQxXCIpLnJlcGxhY2UoVSxcIiQxO1wiKSxkPVwiZnVuY3Rpb24oXCIrKGd8fFwib2JqXCIpK1wiKSB7XFxuXCIrKGc/XCJcIjpcIm9iaiB8fCAob2JqID0ge30pO1xcblwiKStcInZhciBfX3QsIF9fcCA9ICcnXCIrKGk/XCIsIF9fZSA9IF8uZXNjYXBlXCI6XCJcIikrKGE/XCIsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xcbmZ1bmN0aW9uIHByaW50KCkgeyBfX3AgKz0gX19qLmNhbGwoYXJndW1lbnRzLCAnJykgfVxcblwiOlwiO1xcblwiKStkK1wicmV0dXJuIF9fcFxcbn1cIjt2YXIgdj1xbCgoZnVuY3Rpb24oKXtyZXR1cm4geGUocyxoK1wicmV0dXJuIFwiK2QpLmFwcGx5KG8sYyl9KSk7aWYodi5zb3VyY2U9ZCx6YSh2KSl0aHJvdyB2O3JldHVybiB2fSxCbi50aW1lcz1mdW5jdGlvbihlLHQpe2lmKChlPXVsKGUpKTwxfHxlPmYpcmV0dXJuW107dmFyIG49cCxyPXZuKGUscCk7dD1paSh0KSxlLT1wO2Zvcih2YXIgbz1HdChyLHQpOysrbjxlOyl0KG4pO3JldHVybiBvfSxCbi50b0Zpbml0ZT1jbCxCbi50b0ludGVnZXI9dWwsQm4udG9MZW5ndGg9ZmwsQm4udG9Mb3dlcj1mdW5jdGlvbihlKXtyZXR1cm4gaGwoZSkudG9Mb3dlckNhc2UoKX0sQm4udG9OdW1iZXI9ZGwsQm4udG9TYWZlSW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4gZT9vcih1bChlKSwtOTAwNzE5OTI1NDc0MDk5MSxmKTowPT09ZT9lOjB9LEJuLnRvU3RyaW5nPWhsLEJuLnRvVXBwZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGhsKGUpLnRvVXBwZXJDYXNlKCl9LEJuLnRyaW09ZnVuY3Rpb24oZSx0LG4pe2lmKChlPWhsKGUpKSYmKG58fHQ9PT1vKSlyZXR1cm4gcXQoZSk7aWYoIWV8fCEodD1pbyh0KSkpcmV0dXJuIGU7dmFyIHI9dW4oZSksaT11bih0KTtyZXR1cm4gQ28ocixKdChyLGkpLFF0KHIsaSkrMSkuam9pbihcIlwiKX0sQm4udHJpbUVuZD1mdW5jdGlvbihlLHQsbil7aWYoKGU9aGwoZSkpJiYobnx8dD09PW8pKXJldHVybiBlLnNsaWNlKDAsZm4oZSkrMSk7aWYoIWV8fCEodD1pbyh0KSkpcmV0dXJuIGU7dmFyIHI9dW4oZSk7cmV0dXJuIENvKHIsMCxRdChyLHVuKHQpKSsxKS5qb2luKFwiXCIpfSxCbi50cmltU3RhcnQ9ZnVuY3Rpb24oZSx0LG4pe2lmKChlPWhsKGUpKSYmKG58fHQ9PT1vKSlyZXR1cm4gZS5yZXBsYWNlKHJlLFwiXCIpO2lmKCFlfHwhKHQ9aW8odCkpKXJldHVybiBlO3ZhciByPXVuKGUpO3JldHVybiBDbyhyLEp0KHIsdW4odCkpKS5qb2luKFwiXCIpfSxCbi50cnVuY2F0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPTMwLHI9XCIuLi5cIjtpZihLYSh0KSl7dmFyIGk9XCJzZXBhcmF0b3JcImluIHQ/dC5zZXBhcmF0b3I6aTtuPVwibGVuZ3RoXCJpbiB0P3VsKHQubGVuZ3RoKTpuLHI9XCJvbWlzc2lvblwiaW4gdD9pbyh0Lm9taXNzaW9uKTpyfXZhciBhPShlPWhsKGUpKS5sZW5ndGg7aWYocm4oZSkpe3ZhciBsPXVuKGUpO2E9bC5sZW5ndGh9aWYobj49YSlyZXR1cm4gZTt2YXIgcz1uLWNuKHIpO2lmKHM8MSlyZXR1cm4gcjt2YXIgYz1sP0NvKGwsMCxzKS5qb2luKFwiXCIpOmUuc2xpY2UoMCxzKTtpZihpPT09bylyZXR1cm4gYytyO2lmKGwmJihzKz1jLmxlbmd0aC1zKSx0bChpKSl7aWYoZS5zbGljZShzKS5zZWFyY2goaSkpe3ZhciB1LGY9Yztmb3IoaS5nbG9iYWx8fChpPUxlKGkuc291cmNlLGhsKGRlLmV4ZWMoaSkpK1wiZ1wiKSksaS5sYXN0SW5kZXg9MDt1PWkuZXhlYyhmKTspdmFyIGQ9dS5pbmRleDtjPWMuc2xpY2UoMCxkPT09bz9zOmQpfX1lbHNlIGlmKGUuaW5kZXhPZihpbyhpKSxzKSE9cyl7dmFyIHA9Yy5sYXN0SW5kZXhPZihpKTtwPi0xJiYoYz1jLnNsaWNlKDAscCkpfXJldHVybiBjK3J9LEJuLnVuZXNjYXBlPWZ1bmN0aW9uKGUpe3JldHVybihlPWhsKGUpKSYmRy50ZXN0KGUpP2UucmVwbGFjZShXLGRuKTplfSxCbi51bmlxdWVJZD1mdW5jdGlvbihlKXt2YXIgdD0rK0FlO3JldHVybiBobChlKSt0fSxCbi51cHBlckNhc2U9V2wsQm4udXBwZXJGaXJzdD16bCxCbi5lYWNoPWhhLEJuLmVhY2hSaWdodD1nYSxCbi5maXJzdD1OaSxycyhCbiwocHM9e30sbXIoQm4sKGZ1bmN0aW9uKGUsdCl7SWUuY2FsbChCbi5wcm90b3R5cGUsdCl8fChwc1t0XT1lKX0pKSxwcykse2NoYWluOiExfSksQm4uVkVSU0lPTj1cIjQuMTcuMjFcIixMdChbXCJiaW5kXCIsXCJiaW5kS2V5XCIsXCJjdXJyeVwiLFwiY3VycnlSaWdodFwiLFwicGFydGlhbFwiLFwicGFydGlhbFJpZ2h0XCJdLChmdW5jdGlvbihlKXtCbltlXS5wbGFjZWhvbGRlcj1Cbn0pKSxMdChbXCJkcm9wXCIsXCJ0YWtlXCJdLChmdW5jdGlvbihlLHQpeyRuLnByb3RvdHlwZVtlXT1mdW5jdGlvbihuKXtuPW49PT1vPzE6Z24odWwobiksMCk7dmFyIHI9dGhpcy5fX2ZpbHRlcmVkX18mJiF0P25ldyAkbih0aGlzKTp0aGlzLmNsb25lKCk7cmV0dXJuIHIuX19maWx0ZXJlZF9fP3IuX190YWtlQ291bnRfXz12bihuLHIuX190YWtlQ291bnRfXyk6ci5fX3ZpZXdzX18ucHVzaCh7c2l6ZTp2bihuLHApLHR5cGU6ZSsoci5fX2Rpcl9fPDA/XCJSaWdodFwiOlwiXCIpfSkscn0sJG4ucHJvdG90eXBlW2UrXCJSaWdodFwiXT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXZlcnNlKClbZV0odCkucmV2ZXJzZSgpfX0pKSxMdChbXCJmaWx0ZXJcIixcIm1hcFwiLFwidGFrZVdoaWxlXCJdLChmdW5jdGlvbihlLHQpe3ZhciBuPXQrMSxyPTE9PW58fDM9PW47JG4ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gdC5fX2l0ZXJhdGVlc19fLnB1c2goe2l0ZXJhdGVlOmlpKGUsMyksdHlwZTpufSksdC5fX2ZpbHRlcmVkX189dC5fX2ZpbHRlcmVkX198fHIsdH19KSksTHQoW1wiaGVhZFwiLFwibGFzdFwiXSwoZnVuY3Rpb24oZSx0KXt2YXIgbj1cInRha2VcIisodD9cIlJpZ2h0XCI6XCJcIik7JG4ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbbl0oMSkudmFsdWUoKVswXX19KSksTHQoW1wiaW5pdGlhbFwiLFwidGFpbFwiXSwoZnVuY3Rpb24oZSx0KXt2YXIgbj1cImRyb3BcIisodD9cIlwiOlwiUmlnaHRcIik7JG4ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19maWx0ZXJlZF9fP25ldyAkbih0aGlzKTp0aGlzW25dKDEpfX0pKSwkbi5wcm90b3R5cGUuY29tcGFjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbHRlcihRbCl9LCRuLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZpbHRlcihlKS5oZWFkKCl9LCRuLnByb3RvdHlwZS5maW5kTGFzdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZXZlcnNlKCkuZmluZChlKX0sJG4ucHJvdG90eXBlLmludm9rZU1hcD16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP25ldyAkbih0aGlzKTp0aGlzLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIFNyKG4sZSx0KX0pKX0pKSwkbi5wcm90b3R5cGUucmVqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZpbHRlcihSYShpaShlKSkpfSwkbi5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXtlPXVsKGUpO3ZhciBuPXRoaXM7cmV0dXJuIG4uX19maWx0ZXJlZF9fJiYoZT4wfHx0PDApP25ldyAkbihuKTooZTwwP249bi50YWtlUmlnaHQoLWUpOmUmJihuPW4uZHJvcChlKSksdCE9PW8mJihuPSh0PXVsKHQpKTwwP24uZHJvcFJpZ2h0KC10KTpuLnRha2UodC1lKSksbil9LCRuLnByb3RvdHlwZS50YWtlUmlnaHRXaGlsZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZXZlcnNlKCkudGFrZVdoaWxlKGUpLnJldmVyc2UoKX0sJG4ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YWtlKHApfSxtcigkbi5wcm90b3R5cGUsKGZ1bmN0aW9uKGUsdCl7dmFyIG49L14oPzpmaWx0ZXJ8ZmluZHxtYXB8cmVqZWN0KXxXaGlsZSQvLnRlc3QodCkscj0vXig/OmhlYWR8bGFzdCkkLy50ZXN0KHQpLGk9Qm5bcj9cInRha2VcIisoXCJsYXN0XCI9PXQ/XCJSaWdodFwiOlwiXCIpOnRdLGE9cnx8L15maW5kLy50ZXN0KHQpO2kmJihCbi5wcm90b3R5cGVbdF09ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fd3JhcHBlZF9fLGw9cj9bMV06YXJndW1lbnRzLHM9dCBpbnN0YW5jZW9mICRuLGM9bFswXSx1PXN8fFphKHQpLGY9ZnVuY3Rpb24oZSl7dmFyIHQ9aS5hcHBseShCbixQdChbZV0sbCkpO3JldHVybiByJiZkP3RbMF06dH07dSYmbiYmXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmMSE9Yy5sZW5ndGgmJihzPXU9ITEpO3ZhciBkPXRoaXMuX19jaGFpbl9fLHA9ISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxoPWEmJiFkLGc9cyYmIXA7aWYoIWEmJnUpe3Q9Zz90Om5ldyAkbih0aGlzKTt2YXIgdj1lLmFwcGx5KHQsbCk7cmV0dXJuIHYuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpjYSxhcmdzOltmXSx0aGlzQXJnOm99KSxuZXcgWm4odixkKX1yZXR1cm4gaCYmZz9lLmFwcGx5KHRoaXMsbCk6KHY9dGhpcy50aHJ1KGYpLGg/cj92LnZhbHVlKClbMF06di52YWx1ZSgpOnYpfSl9KSksTHQoW1wicG9wXCIsXCJwdXNoXCIsXCJzaGlmdFwiLFwic29ydFwiLFwic3BsaWNlXCIsXCJ1bnNoaWZ0XCJdLChmdW5jdGlvbihlKXt2YXIgdD1qZVtlXSxuPS9eKD86cHVzaHxzb3J0fHVuc2hpZnQpJC8udGVzdChlKT9cInRhcFwiOlwidGhydVwiLHI9L14oPzpwb3B8c2hpZnQpJC8udGVzdChlKTtCbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7aWYociYmIXRoaXMuX19jaGFpbl9fKXt2YXIgbz10aGlzLnZhbHVlKCk7cmV0dXJuIHQuYXBwbHkoWmEobyk/bzpbXSxlKX1yZXR1cm4gdGhpc1tuXSgoZnVuY3Rpb24obil7cmV0dXJuIHQuYXBwbHkoWmEobik/bjpbXSxlKX0pKX19KSksbXIoJG4ucHJvdG90eXBlLChmdW5jdGlvbihlLHQpe3ZhciBuPUJuW3RdO2lmKG4pe3ZhciByPW4ubmFtZStcIlwiO0llLmNhbGwoam4scil8fChqbltyXT1bXSksam5bcl0ucHVzaCh7bmFtZTp0LGZ1bmM6bn0pfX0pKSxqbltCbyhvLDIpLm5hbWVdPVt7bmFtZTpcIndyYXBwZXJcIixmdW5jOm99XSwkbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgJG4odGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuIGUuX19hY3Rpb25zX189RW8odGhpcy5fX2FjdGlvbnNfXyksZS5fX2Rpcl9fPXRoaXMuX19kaXJfXyxlLl9fZmlsdGVyZWRfXz10aGlzLl9fZmlsdGVyZWRfXyxlLl9faXRlcmF0ZWVzX189RW8odGhpcy5fX2l0ZXJhdGVlc19fKSxlLl9fdGFrZUNvdW50X189dGhpcy5fX3Rha2VDb3VudF9fLGUuX192aWV3c19fPUVvKHRoaXMuX192aWV3c19fKSxlfSwkbi5wcm90b3R5cGUucmV2ZXJzZT1mdW5jdGlvbigpe2lmKHRoaXMuX19maWx0ZXJlZF9fKXt2YXIgZT1uZXcgJG4odGhpcyk7ZS5fX2Rpcl9fPS0xLGUuX19maWx0ZXJlZF9fPSEwfWVsc2UoZT10aGlzLmNsb25lKCkpLl9fZGlyX18qPS0xO3JldHVybiBlfSwkbi5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksdD10aGlzLl9fZGlyX18sbj1aYShlKSxyPXQ8MCxvPW4/ZS5sZW5ndGg6MCxpPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9LTEsbz1uLmxlbmd0aDsrK3I8bzspe3ZhciBpPW5bcl0sYT1pLnNpemU7c3dpdGNoKGkudHlwZSl7Y2FzZVwiZHJvcFwiOmUrPWE7YnJlYWs7Y2FzZVwiZHJvcFJpZ2h0XCI6dC09YTticmVhaztjYXNlXCJ0YWtlXCI6dD12bih0LGUrYSk7YnJlYWs7Y2FzZVwidGFrZVJpZ2h0XCI6ZT1nbihlLHQtYSl9fXJldHVybntzdGFydDplLGVuZDp0fX0oMCxvLHRoaXMuX192aWV3c19fKSxhPWkuc3RhcnQsbD1pLmVuZCxzPWwtYSxjPXI/bDphLTEsdT10aGlzLl9faXRlcmF0ZWVzX18sZj11Lmxlbmd0aCxkPTAscD12bihzLHRoaXMuX190YWtlQ291bnRfXyk7aWYoIW58fCFyJiZvPT1zJiZwPT1zKXJldHVybiB1byhlLHRoaXMuX19hY3Rpb25zX18pO3ZhciBoPVtdO2U6Zm9yKDtzLS0mJmQ8cDspe2Zvcih2YXIgZz0tMSx2PWVbYys9dF07KytnPGY7KXt2YXIgbT11W2ddLEM9bS5pdGVyYXRlZSx5PW0udHlwZSx3PUModik7aWYoMj09eSl2PXc7ZWxzZSBpZighdyl7aWYoMT09eSljb250aW51ZSBlO2JyZWFrIGV9fWhbZCsrXT12fXJldHVybiBofSxCbi5wcm90b3R5cGUuYXQ9dWEsQm4ucHJvdG90eXBlLmNoYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHNhKHRoaXMpfSxCbi5wcm90b3R5cGUuY29tbWl0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBabih0aGlzLnZhbHVlKCksdGhpcy5fX2NoYWluX18pfSxCbi5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3RoaXMuX192YWx1ZXNfXz09PW8mJih0aGlzLl9fdmFsdWVzX189c2wodGhpcy52YWx1ZSgpKSk7dmFyIGU9dGhpcy5fX2luZGV4X18+PXRoaXMuX192YWx1ZXNfXy5sZW5ndGg7cmV0dXJue2RvbmU6ZSx2YWx1ZTplP286dGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdfX0sQm4ucHJvdG90eXBlLnBsYW50PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPXRoaXM7biBpbnN0YW5jZW9mIERuOyl7dmFyIHI9VGkobik7ci5fX2luZGV4X189MCxyLl9fdmFsdWVzX189byx0P2kuX193cmFwcGVkX189cjp0PXI7dmFyIGk9cjtuPW4uX193cmFwcGVkX199cmV0dXJuIGkuX193cmFwcGVkX189ZSx0fSxCbi5wcm90b3R5cGUucmV2ZXJzZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX193cmFwcGVkX187aWYoZSBpbnN0YW5jZW9mICRuKXt2YXIgdD1lO3JldHVybiB0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCYmKHQ9bmV3ICRuKHRoaXMpKSwodD10LnJldmVyc2UoKSkuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpjYSxhcmdzOltLaV0sdGhpc0FyZzpvfSksbmV3IFpuKHQsdGhpcy5fX2NoYWluX18pfXJldHVybiB0aGlzLnRocnUoS2kpfSxCbi5wcm90b3R5cGUudG9KU09OPUJuLnByb3RvdHlwZS52YWx1ZU9mPUJuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3JldHVybiB1byh0aGlzLl9fd3JhcHBlZF9fLHRoaXMuX19hY3Rpb25zX18pfSxCbi5wcm90b3R5cGUuZmlyc3Q9Qm4ucHJvdG90eXBlLmhlYWQsWWUmJihCbi5wcm90b3R5cGVbWWVdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxCbn0oKTtmdC5fPXBuLChyPWZ1bmN0aW9uKCl7cmV0dXJuIHBufS5jYWxsKHQsbix0LGUpKT09PW98fChlLmV4cG9ydHM9cil9LmNhbGwodGhpcyl9LDMwMDooZSx0LG4pPT57dmFyIHIsbztlPW4ubm1kKGUpLGZ1bmN0aW9uKHQpe3QucnVubmluZ0luTm9kZUpTPWZ1bmN0aW9uKCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHByb2Nlc3MmJlwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzLnZlcnNpb25zJiZcInN0cmluZ1wiPT10eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlfSx0LnJ1bm5pbmdJbk1haW5Ob2RlSlNNb2R1bGU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5ydW5uaW5nSW5Ob2RlSlMoKSYmbi5jW24uc109PT1lfSx0LmNvbW1vbkpTQXZhaWxhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUuZXhwb3J0c30sdC5ydW5uaW5nSW5XZWJXb3JrZXI9ZnVuY3Rpb24oKXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2Ygd2luZG93JiZcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmXCJmdW5jdGlvblwiPT10eXBlb2Ygc2VsZi5hZGRFdmVudExpc3RlbmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBzZWxmLmNsb3NlfSx0LnJ1bm5pbmdJbk5vZGVDaGlsZFByb2Nlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdC5ydW5uaW5nSW5Ob2RlSlMoKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgcHJvY2Vzcy5zZW5kfSx0LnJ1bm5pbmdJbk51bGxPcmlnaW49ZnVuY3Rpb24oKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93LmxvY2F0aW9uJiZcIm9iamVjdFwiPT10eXBlb2YgZG9jdW1lbnQmJlwiaHR0cDpcIiE9PWRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sJiZcImh0dHBzOlwiIT09ZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2x9LHQud2ViV29ya2Vyc0F2YWlsYWJsZT1mdW5jdGlvbigpe3JldHVybiEoXCJmdW5jdGlvblwiIT10eXBlb2YgV29ya2VyfHx0LnJ1bm5pbmdJbk51bGxPcmlnaW4oKXx8dC5ydW5uaW5nSW5Ob2RlSlMoKXx8bmF2aWdhdG9yJiZuYXZpZ2F0b3IudXNlckFnZW50JiZuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJBbmRyb2lkIDQuM1wiKT49MCl9LHQubG9nPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpLFwib2JqZWN0XCI9PXR5cGVvZiBjb25zb2xlJiZ0JiZcIm9iamVjdFwiPT10eXBlb2YgZG9jdW1lbnQmJihkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9ZStcIjxici8+XCIpfSx0LmNyZWF0ZUVycm9yTWVzc2FnZT1mdW5jdGlvbihlLG4pe2lmKHZvaWQgMD09PW4mJihuPVwiVW5oYW5kbGVkIGV4Y2VwdGlvblwiKSxudWxsPT1lKXJldHVybiBuO2lmKG4rPVwiOiBcIixcIm9iamVjdFwiPT10eXBlb2YgZS5jb250ZW50KXtpZih0LnJ1bm5pbmdJbk5vZGVKUygpKXJldHVybiBuK2UuY29udGVudC5zdGFjazt2YXIgcj1KU09OLnN0cmluZ2lmeShlLmNvbnRlbnQpO3JldHVyblwie31cIiE9PXI/bityOm4rZS5jb250ZW50fXJldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlLmNvbnRlbnQ/bitlLmNvbnRlbnQ6bitlfSx0LnByaW50RXhjZXB0aW9uQW5kU3RhY2tUcmFjZVRvQ29uc29sZT1mdW5jdGlvbihlLG4pe3ZvaWQgMD09PW4mJihuPVwiVW5oYW5kbGVkIGV4Y2VwdGlvblwiKSx0LmxvZyh0LmNyZWF0ZUVycm9yTWVzc2FnZShlLG4pKX0sdC5nZXRHbG9iYWxPYmplY3Q9ZnVuY3Rpb24oKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2Ygbi5nP24uZzpcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93P3dpbmRvdzpcIm9iamVjdFwiPT10eXBlb2Ygc2VsZj9zZWxmOnt9fSx0LnRvU3RyaW5nPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsdC5jb21tb25KU0F2YWlsYWJsZSgpJiYoZS5leHBvcnRzPXQpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFVpbnQ4QXJyYXkmJjAhPT1uZXcgVWludDhBcnJheSgxKS5zdWJhcnJheSgxKS5ieXRlTGVuZ3RoKXt2YXIgdD1mdW5jdGlvbihlLHQpe3ZhciBuPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZTx0P3Q6ZT5uP246ZX07ZXw9MCx0fD0wLGFyZ3VtZW50cy5sZW5ndGg8MSYmKGU9MCksYXJndW1lbnRzLmxlbmd0aDwyJiYodD10aGlzLmxlbmd0aCksZTwwJiYoZT10aGlzLmxlbmd0aCtlKSx0PDAmJih0PXRoaXMubGVuZ3RoK3QpLGU9bihlLDAsdGhpcy5sZW5ndGgpO3ZhciByPSh0PW4odCwwLHRoaXMubGVuZ3RoKSktZTtyZXR1cm4gcjwwJiYocj0wKSxuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmJ1ZmZlcix0aGlzLmJ5dGVPZmZzZXQrZSp0aGlzLkJZVEVTX1BFUl9FTEVNRU5ULHIpfSxuPVtcIkludDhBcnJheVwiLFwiVWludDhBcnJheVwiLFwiVWludDhDbGFtcGVkQXJyYXlcIixcIkludDE2QXJyYXlcIixcIlVpbnQxNkFycmF5XCIsXCJJbnQzMkFycmF5XCIsXCJVaW50MzJBcnJheVwiLFwiRmxvYXQzMkFycmF5XCIsXCJGbG9hdDY0QXJyYXlcIl0scj12b2lkIDA7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdz9yPXdpbmRvdzpcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmKHI9c2VsZiksdm9pZCAwIT09cilmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKylyW25bb11dJiYocltuW29dXS5wcm90b3R5cGUuc3ViYXJyYXk9dCl9fShyfHwocj17fSkpLGZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5jb21wcmVzc0FzeW5jPWZ1bmN0aW9uKHQsbixyKXt2YXIgbz1uZXcgZS5UaW1lcixpPW5ldyBlLkNvbXByZXNzb3I7aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImNvbXByZXNzQXN5bmM6IE5vIGNhbGxiYWNrIGFyZ3VtZW50IGdpdmVuXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXQ9ZS5lbmNvZGVVVEY4KHQpO2Vsc2UgaWYobnVsbD09dHx8ISh0IGluc3RhbmNlb2YgVWludDhBcnJheSkpcmV0dXJuIHZvaWQgcih2b2lkIDAsbmV3IFR5cGVFcnJvcihcImNvbXByZXNzQXN5bmM6IEludmFsaWQgaW5wdXQgYXJndW1lbnQsIG9ubHkgJ3N0cmluZycgYW5kICdVaW50OEFycmF5JyBhcmUgc3VwcG9ydGVkXCIpKTt2YXIgYT1lLkFycmF5VG9vbHMuc3BsaXRCeXRlQXJyYXkodCxuLmJsb2NrU2l6ZSksbD1bXSxzPWZ1bmN0aW9uKHQpe2lmKHQ8YS5sZW5ndGgpe3ZhciBjPXZvaWQgMDt0cnl7Yz1pLmNvbXByZXNzQmxvY2soYVt0XSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcih2b2lkIDAsZSl9bC5wdXNoKGMpLG8uZ2V0RWxhcHNlZFRpbWUoKTw9MjA/cyh0KzEpOihlLmVucXVldWVJbW1lZGlhdGUoKGZ1bmN0aW9uKCl7cmV0dXJuIHModCsxKX0pKSxvLnJlc3RhcnQoKSl9ZWxzZXt2YXIgdT1lLkFycmF5VG9vbHMuY29uY2F0VWludDhBcnJheXMobCk7ZS5lbnF1ZXVlSW1tZWRpYXRlKChmdW5jdGlvbigpe3ZhciB0O3RyeXt0PWUuQ29tcHJlc3Npb25Db21tb24uZW5jb2RlQ29tcHJlc3NlZEJ5dGVzKHUsbi5vdXRwdXRFbmNvZGluZyl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcih2b2lkIDAsZSl9ZS5lbnF1ZXVlSW1tZWRpYXRlKChmdW5jdGlvbigpe3JldHVybiByKHQpfSkpfSkpfX07ZS5lbnF1ZXVlSW1tZWRpYXRlKChmdW5jdGlvbigpe3JldHVybiBzKDApfSkpfSx0LmNyZWF0ZUNvbXByZXNzaW9uU3RyZWFtPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGUuQ29tcHJlc3NvcixyPW5ldyhuKDk5KS5UcmFuc2Zvcm0pKHtkZWNvZGVTdHJpbmdzOiEwLGhpZ2hXYXRlck1hcms6NjU1MzZ9KTtyZXR1cm4gci5fdHJhbnNmb3JtPWZ1bmN0aW9uKG4sbyxpKXt2YXIgYTt0cnl7YT1lLkJ1ZmZlclRvb2xzLnVpbnQ4QXJyYXlUb0J1ZmZlcih0LmNvbXByZXNzQmxvY2soZS5CdWZmZXJUb29scy5idWZmZXJUb1VpbnQ4QXJyYXkobikpKX1jYXRjaChlKXtyZXR1cm4gdm9pZCByLmVtaXQoXCJlcnJvclwiLGUpfXIucHVzaChhKSxpKCl9LHJ9LHR9KCk7ZS5Bc3luY0NvbXByZXNzb3I9dH0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuZGVjb21wcmVzc0FzeW5jPWZ1bmN0aW9uKHQsbixyKXtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGVjb21wcmVzc0FzeW5jOiBObyBjYWxsYmFjayBhcmd1bWVudCBnaXZlblwiKTt2YXIgbz1uZXcgZS5UaW1lcjt0cnl7dD1lLkNvbXByZXNzaW9uQ29tbW9uLmRlY29kZUNvbXByZXNzZWRCeXRlcyh0LG4uaW5wdXRFbmNvZGluZyl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcih2b2lkIDAsZSl9dmFyIGk9bmV3IGUuRGVjb21wcmVzc29yLGE9ZS5BcnJheVRvb2xzLnNwbGl0Qnl0ZUFycmF5KHQsbi5ibG9ja1NpemUpLGw9W10scz1mdW5jdGlvbih0KXtpZih0PGEubGVuZ3RoKXt2YXIgYz12b2lkIDA7dHJ5e2M9aS5kZWNvbXByZXNzQmxvY2soYVt0XSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcih2b2lkIDAsZSl9bC5wdXNoKGMpLG8uZ2V0RWxhcHNlZFRpbWUoKTw9MjA/cyh0KzEpOihlLmVucXVldWVJbW1lZGlhdGUoKGZ1bmN0aW9uKCl7cmV0dXJuIHModCsxKX0pKSxvLnJlc3RhcnQoKSl9ZWxzZXt2YXIgdT1lLkFycmF5VG9vbHMuY29uY2F0VWludDhBcnJheXMobCk7ZS5lbnF1ZXVlSW1tZWRpYXRlKChmdW5jdGlvbigpe3ZhciB0O3RyeXt0PWUuQ29tcHJlc3Npb25Db21tb24uZW5jb2RlRGVjb21wcmVzc2VkQnl0ZXModSxuLm91dHB1dEVuY29kaW5nKX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKHZvaWQgMCxlKX1lLmVucXVldWVJbW1lZGlhdGUoKGZ1bmN0aW9uKCl7cmV0dXJuIHIodCl9KSl9KSl9fTtlLmVucXVldWVJbW1lZGlhdGUoKGZ1bmN0aW9uKCl7cmV0dXJuIHMoMCl9KSl9LHQuY3JlYXRlRGVjb21wcmVzc2lvblN0cmVhbT1mdW5jdGlvbigpe3ZhciB0PW5ldyBlLkRlY29tcHJlc3NvcixyPW5ldyhuKDk5KS5UcmFuc2Zvcm0pKHtkZWNvZGVTdHJpbmdzOiEwLGhpZ2hXYXRlck1hcms6NjU1MzZ9KTtyZXR1cm4gci5fdHJhbnNmb3JtPWZ1bmN0aW9uKG4sbyxpKXt2YXIgYTt0cnl7YT1lLkJ1ZmZlclRvb2xzLnVpbnQ4QXJyYXlUb0J1ZmZlcih0LmRlY29tcHJlc3NCbG9jayhlLkJ1ZmZlclRvb2xzLmJ1ZmZlclRvVWludDhBcnJheShuKSkpfWNhdGNoKGUpe3JldHVybiB2b2lkIHIuZW1pdChcImVycm9yXCIsZSl9ci5wdXNoKGEpLGkoKX0scn0sdH0oKTtlLkFzeW5jRGVjb21wcmVzc29yPXR9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7dmFyIHQ7IWZ1bmN0aW9uKHQpe3QuY29tcHJlc3NBc3luYz1mdW5jdGlvbihlLG4scil7aWYoXCJCeXRlQXJyYXlcIiE9bi5pbnB1dEVuY29kaW5nfHxlIGluc3RhbmNlb2YgVWludDhBcnJheSl7dmFyIG89e3Rva2VuOk1hdGgucmFuZG9tKCkudG9TdHJpbmcoKSx0eXBlOlwiY29tcHJlc3NcIixkYXRhOmUsaW5wdXRFbmNvZGluZzpuLmlucHV0RW5jb2Rpbmcsb3V0cHV0RW5jb2Rpbmc6bi5vdXRwdXRFbmNvZGluZ30saT1mdW5jdGlvbihlKXt2YXIgbj1lLmRhdGE7biYmbi50b2tlbj09by50b2tlbiYmKHQuZ2xvYmFsV29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsaSksXCJlcnJvclwiPT1uLnR5cGU/cih2b2lkIDAsbmV3IEVycm9yKG4uZXJyb3IpKTpyKG4uZGF0YSkpfTt0Lmdsb2JhbFdvcmtlci5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLGkpLHQuZ2xvYmFsV29ya2VyLnBvc3RNZXNzYWdlKG8sW10pfWVsc2Ugcih2b2lkIDAsbmV3IFR5cGVFcnJvcihcImNvbXByZXNzQXN5bmM6IGlucHV0IGlzIG5vdCBhIFVpbnQ4QXJyYXlcIikpfSx0LmRlY29tcHJlc3NBc3luYz1mdW5jdGlvbihlLG4scil7dmFyIG89e3Rva2VuOk1hdGgucmFuZG9tKCkudG9TdHJpbmcoKSx0eXBlOlwiZGVjb21wcmVzc1wiLGRhdGE6ZSxpbnB1dEVuY29kaW5nOm4uaW5wdXRFbmNvZGluZyxvdXRwdXRFbmNvZGluZzpuLm91dHB1dEVuY29kaW5nfSxpPWZ1bmN0aW9uKGUpe3ZhciBuPWUuZGF0YTtuJiZuLnRva2VuPT1vLnRva2VuJiYodC5nbG9iYWxXb3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIixpKSxcImVycm9yXCI9PW4udHlwZT9yKHZvaWQgMCxuZXcgRXJyb3Iobi5lcnJvcikpOnIobi5kYXRhKSl9O3QuZ2xvYmFsV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsaSksdC5nbG9iYWxXb3JrZXIucG9zdE1lc3NhZ2UobyxbXSl9LHQuaW5zdGFsbFdlYldvcmtlcklmTmVlZGVkPWZ1bmN0aW9uKCl7XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnZvaWQgMD09PXNlbGYuZG9jdW1lbnQmJm51bGwhPXNlbGYuYWRkRXZlbnRMaXN0ZW5lciYmKHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwoZnVuY3Rpb24odCl7dmFyIG49dC5kYXRhO2lmKFwiY29tcHJlc3NcIj09bi50eXBlKXt2YXIgcj12b2lkIDA7dHJ5e3I9ZS5jb21wcmVzcyhuLmRhdGEse291dHB1dEVuY29kaW5nOm4ub3V0cHV0RW5jb2Rpbmd9KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBzZWxmLnBvc3RNZXNzYWdlKHt0b2tlbjpuLnRva2VuLHR5cGU6XCJlcnJvclwiLGVycm9yOmUuY3JlYXRlRXJyb3JNZXNzYWdlKHQpfSxbXSl9KG89e3Rva2VuOm4udG9rZW4sdHlwZTpcImNvbXByZXNzaW9uUmVzdWx0XCIsZGF0YTpyLGVuY29kaW5nOm4ub3V0cHV0RW5jb2Rpbmd9KS5kYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSYmLTE9PT1uYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKFwiTVNJRSAxMFwiKT9zZWxmLnBvc3RNZXNzYWdlKG8sW28uZGF0YS5idWZmZXJdKTpzZWxmLnBvc3RNZXNzYWdlKG8sW10pfWVsc2UgaWYoXCJkZWNvbXByZXNzXCI9PW4udHlwZSl7dmFyIG8saT12b2lkIDA7dHJ5e2k9ZS5kZWNvbXByZXNzKG4uZGF0YSx7aW5wdXRFbmNvZGluZzpuLmlucHV0RW5jb2Rpbmcsb3V0cHV0RW5jb2Rpbmc6bi5vdXRwdXRFbmNvZGluZ30pfWNhdGNoKHQpe3JldHVybiB2b2lkIHNlbGYucG9zdE1lc3NhZ2Uoe3Rva2VuOm4udG9rZW4sdHlwZTpcImVycm9yXCIsZXJyb3I6ZS5jcmVhdGVFcnJvck1lc3NhZ2UodCl9LFtdKX0obz17dG9rZW46bi50b2tlbix0eXBlOlwiZGVjb21wcmVzc2lvblJlc3VsdFwiLGRhdGE6aSxlbmNvZGluZzpuLm91dHB1dEVuY29kaW5nfSkuZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJi0xPT09bmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZihcIk1TSUUgMTBcIik/c2VsZi5wb3N0TWVzc2FnZShvLFtvLmRhdGEuYnVmZmVyXSk6c2VsZi5wb3N0TWVzc2FnZShvLFtdKX19KSksc2VsZi5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwoZnVuY3Rpb24odCl7ZS5sb2coZS5jcmVhdGVFcnJvck1lc3NhZ2UodC5lcnJvcixcIlVuZXhwZWN0ZWQgTFpVVEY4IFdlYldvcmtlciBleGNlcHRpb25cIikpfSkpKX0sdC5jcmVhdGVHbG9iYWxXb3JrZXJJZk5lZWRlZD1mdW5jdGlvbigpe2lmKHQuZ2xvYmFsV29ya2VyKXJldHVybiEwO2lmKCFlLndlYldvcmtlcnNBdmFpbGFibGUoKSlyZXR1cm4hMTtpZighdC5zY3JpcHRVUkkmJlwib2JqZWN0XCI9PXR5cGVvZiBkb2N1bWVudCl7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsenV0ZjhcIik7bnVsbCE9biYmKHQuc2NyaXB0VVJJPW4uZ2V0QXR0cmlidXRlKFwic3JjXCIpfHx2b2lkIDApfXJldHVybiEhdC5zY3JpcHRVUkkmJih0Lmdsb2JhbFdvcmtlcj1uZXcgV29ya2VyKHQuc2NyaXB0VVJJKSwhMCl9LHQudGVybWluYXRlPWZ1bmN0aW9uKCl7dC5nbG9iYWxXb3JrZXImJih0Lmdsb2JhbFdvcmtlci50ZXJtaW5hdGUoKSx0Lmdsb2JhbFdvcmtlcj12b2lkIDApfX0odD1lLldlYldvcmtlcnx8KGUuV2ViV29ya2VyPXt9KSksdC5pbnN0YWxsV2ViV29ya2VySWZOZWVkZWQoKX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMuY29udGFpbmVyPWUsdGhpcy5zdGFydFBvc2l0aW9uPXQsdGhpcy5sZW5ndGg9bn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvbnRhaW5lclt0aGlzLnN0YXJ0UG9zaXRpb24rZV19LGUucHJvdG90eXBlLmdldEluUmV2ZXJzZWRPcmRlcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb250YWluZXJbdGhpcy5zdGFydFBvc2l0aW9uK3RoaXMubGVuZ3RoLTEtZV19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3RoaXMuY29udGFpbmVyW3RoaXMuc3RhcnRQb3NpdGlvbitlXT10fSxlfSgpO2UuQXJyYXlTZWdtZW50PXR9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe2UuY29weUVsZW1lbnRzPWZ1bmN0aW9uKGUsdCxuLHIsbyl7Zm9yKDtvLS07KW5bcisrXT1lW3QrK119LGUuemVyb0VsZW1lbnRzPWZ1bmN0aW9uKGUsdCxuKXtmb3IoO24tLTspZVt0KytdPTB9LGUuY291bnROb256ZXJvVmFsdWVzSW5BcnJheT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPTA7bjxlLmxlbmd0aDtuKyspZVtuXSYmdCsrO3JldHVybiB0fSxlLnRydW5jYXRlU3RhcnRpbmdFbGVtZW50cz1mdW5jdGlvbihlLHQpe2lmKGUubGVuZ3RoPD10KXRocm93IG5ldyBSYW5nZUVycm9yKFwidHJ1bmNhdGVTdGFydGluZ0VsZW1lbnRzOiBSZXF1ZXN0ZWQgbGVuZ3RoIHNob3VsZCBiZSBzbWFsbGVyIHRoYW4gYXJyYXkgbGVuZ3RoXCIpO2Zvcih2YXIgbj1lLmxlbmd0aC10LHI9MDtyPHQ7cisrKWVbcl09ZVtuK3JdO2UubGVuZ3RoPXR9LGUuZG91YmxlQnl0ZUFycmF5Q2FwYWNpdHk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoMiplLmxlbmd0aCk7cmV0dXJuIHQuc2V0KGUpLHR9LGUuY29uY2F0VWludDhBcnJheXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj0wLHI9ZTtuPHIubGVuZ3RoO24rKyl0Kz0ocz1yW25dKS5sZW5ndGg7Zm9yKHZhciBvPW5ldyBVaW50OEFycmF5KHQpLGk9MCxhPTAsbD1lO2E8bC5sZW5ndGg7YSsrKXt2YXIgcz1sW2FdO28uc2V0KHMsaSksaSs9cy5sZW5ndGh9cmV0dXJuIG99LGUuc3BsaXRCeXRlQXJyYXk9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W10scj0wO3I8ZS5sZW5ndGg7KXt2YXIgbz1NYXRoLm1pbih0LGUubGVuZ3RoLXIpO24ucHVzaChlLnN1YmFycmF5KHIscitvKSkscis9b31yZXR1cm4gbn19KGUuQXJyYXlUb29sc3x8KGUuQXJyYXlUb29scz17fSkpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlKXtlLmNvbnZlcnRUb1VpbnQ4QXJyYXlJZk5lZWRlZD1mdW5jdGlvbih0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBCdWZmZXImJkJ1ZmZlci5pc0J1ZmZlcih0KT9lLmJ1ZmZlclRvVWludDhBcnJheSh0KTp0fSxlLnVpbnQ4QXJyYXlUb0J1ZmZlcj1mdW5jdGlvbihlKXtpZihCdWZmZXIucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih0LEJ1ZmZlci5wcm90b3R5cGUpLHR9Zm9yKHZhciBuPWUubGVuZ3RoLHI9bmV3IEJ1ZmZlcihuKSxvPTA7bzxuO28rKylyW29dPWVbb107cmV0dXJuIHJ9LGUuYnVmZmVyVG9VaW50OEFycmF5PWZ1bmN0aW9uKGUpe2lmKEJ1ZmZlci5wcm90b3R5cGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBuZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKTtmb3IodmFyIHQ9ZS5sZW5ndGgsbj1uZXcgVWludDhBcnJheSh0KSxyPTA7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59fShlLkJ1ZmZlclRvb2xzfHwoZS5CdWZmZXJUb29scz17fSkpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0KXt0LmdldENyb3BwZWRCdWZmZXI9ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9MCk7dmFyIG89bmV3IFVpbnQ4QXJyYXkobityKTtyZXR1cm4gby5zZXQoZS5zdWJhcnJheSh0LHQrbikpLG99LHQuZ2V0Q3JvcHBlZEFuZEFwcGVuZGVkQnl0ZUFycmF5PWZ1bmN0aW9uKHQsbixyLG8pe3JldHVybiBlLkFycmF5VG9vbHMuY29uY2F0VWludDhBcnJheXMoW3Quc3ViYXJyYXkobixuK3IpLG9dKX0sdC5kZXRlY3RDb21wcmVzc2lvblNvdXJjZUVuY29kaW5nPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcImRldGVjdENvbXByZXNzaW9uU291cmNlRW5jb2Rpbmc6IGlucHV0IGlzIG51bGwgb3IgdW5kZWZpbmVkXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVyblwiU3RyaW5nXCI7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIEJ1ZmZlciYmQnVmZmVyLmlzQnVmZmVyKGUpKXJldHVyblwiQnl0ZUFycmF5XCI7dGhyb3cgbmV3IFR5cGVFcnJvcihcImRldGVjdENvbXByZXNzaW9uU291cmNlRW5jb2Rpbmc6IGlucHV0IG11c3QgYmUgb2YgdHlwZSAnc3RyaW5nJywgJ1VpbnQ4QXJyYXknIG9yICdCdWZmZXInXCIpfSx0LmVuY29kZUNvbXByZXNzZWRCeXRlcz1mdW5jdGlvbih0LG4pe3N3aXRjaChuKXtjYXNlXCJCeXRlQXJyYXlcIjpyZXR1cm4gdDtjYXNlXCJCdWZmZXJcIjpyZXR1cm4gZS5CdWZmZXJUb29scy51aW50OEFycmF5VG9CdWZmZXIodCk7Y2FzZVwiQmFzZTY0XCI6cmV0dXJuIGUuZW5jb2RlQmFzZTY0KHQpO2Nhc2VcIkJpbmFyeVN0cmluZ1wiOnJldHVybiBlLmVuY29kZUJpbmFyeVN0cmluZyh0KTtjYXNlXCJTdG9yYWdlQmluYXJ5U3RyaW5nXCI6cmV0dXJuIGUuZW5jb2RlU3RvcmFnZUJpbmFyeVN0cmluZyh0KTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoXCJlbmNvZGVDb21wcmVzc2VkQnl0ZXM6IGludmFsaWQgb3V0cHV0IGVuY29kaW5nIHJlcXVlc3RlZFwiKX19LHQuZGVjb2RlQ29tcHJlc3NlZEJ5dGVzPWZ1bmN0aW9uKHQsbil7aWYobnVsbD09bil0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGVjb2RlQ29tcHJlc3NlZERhdGE6IElucHV0IGlzIG51bGwgb3IgdW5kZWZpbmVkXCIpO3N3aXRjaChuKXtjYXNlXCJCeXRlQXJyYXlcIjpjYXNlXCJCdWZmZXJcIjp2YXIgcj1lLkJ1ZmZlclRvb2xzLmNvbnZlcnRUb1VpbnQ4QXJyYXlJZk5lZWRlZCh0KTtpZighKHIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGVjb2RlQ29tcHJlc3NlZERhdGE6ICdCeXRlQXJyYXknIG9yICdCdWZmZXInIGlucHV0IHR5cGUgd2FzIHNwZWNpZmllZCBidXQgaW5wdXQgaXMgbm90IGEgVWludDhBcnJheSBvciBCdWZmZXJcIik7cmV0dXJuIHI7Y2FzZVwiQmFzZTY0XCI6aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImRlY29kZUNvbXByZXNzZWREYXRhOiAnQmFzZTY0JyBpbnB1dCB0eXBlIHdhcyBzcGVjaWZpZWQgYnV0IGlucHV0IGlzIG5vdCBhIHN0cmluZ1wiKTtyZXR1cm4gZS5kZWNvZGVCYXNlNjQodCk7Y2FzZVwiQmluYXJ5U3RyaW5nXCI6aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImRlY29kZUNvbXByZXNzZWREYXRhOiAnQmluYXJ5U3RyaW5nJyBpbnB1dCB0eXBlIHdhcyBzcGVjaWZpZWQgYnV0IGlucHV0IGlzIG5vdCBhIHN0cmluZ1wiKTtyZXR1cm4gZS5kZWNvZGVCaW5hcnlTdHJpbmcodCk7Y2FzZVwiU3RvcmFnZUJpbmFyeVN0cmluZ1wiOmlmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJkZWNvZGVDb21wcmVzc2VkRGF0YTogJ1N0b3JhZ2VCaW5hcnlTdHJpbmcnIGlucHV0IHR5cGUgd2FzIHNwZWNpZmllZCBidXQgaW5wdXQgaXMgbm90IGEgc3RyaW5nXCIpO3JldHVybiBlLmRlY29kZVN0b3JhZ2VCaW5hcnlTdHJpbmcodCk7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGVjb2RlQ29tcHJlc3NlZERhdGE6IGludmFsaWQgaW5wdXQgZW5jb2RpbmcgcmVxdWVzdGVkOiAnXCIuY29uY2F0KG4sXCInXCIpKX19LHQuZW5jb2RlRGVjb21wcmVzc2VkQnl0ZXM9ZnVuY3Rpb24odCxuKXtzd2l0Y2gobil7Y2FzZVwiU3RyaW5nXCI6cmV0dXJuIGUuZGVjb2RlVVRGOCh0KTtjYXNlXCJCeXRlQXJyYXlcIjpyZXR1cm4gdDtjYXNlXCJCdWZmZXJcIjppZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBCdWZmZXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImVuY29kZURlY29tcHJlc3NlZEJ5dGVzOiBhICdCdWZmZXInIHR5cGUgd2FzIHNwZWNpZmllZCBidXQgaXMgbm90IHN1cHBvcnRlZCBhdCB0aGUgY3VycmVudCBlbnZpcm5tZW50XCIpO3JldHVybiBlLkJ1ZmZlclRvb2xzLnVpbnQ4QXJyYXlUb0J1ZmZlcih0KTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoXCJlbmNvZGVEZWNvbXByZXNzZWRCeXRlczogaW52YWxpZCBvdXRwdXQgZW5jb2RpbmcgcmVxdWVzdGVkXCIpfX19KGUuQ29tcHJlc3Npb25Db21tb258fChlLkNvbXByZXNzaW9uQ29tbW9uPXt9KSl9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7dmFyIHQ7IWZ1bmN0aW9uKHQpe3ZhciBuLHI9W107dC5lbnF1ZXVlSW1tZWRpYXRlPWZ1bmN0aW9uKGUpe3IucHVzaChlKSwxPT09ci5sZW5ndGgmJm4oKX0sdC5pbml0aWFsaXplU2NoZWR1bGVyPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxuPXI7dDxuLmxlbmd0aDt0Kyspe3ZhciBvPW5bdF07dHJ5e28uY2FsbCh2b2lkIDApfWNhdGNoKHQpe2UucHJpbnRFeGNlcHRpb25BbmRTdGFja1RyYWNlVG9Db25zb2xlKHQsXCJlbnF1ZXVlSW1tZWRpYXRlIGV4Y2VwdGlvblwiKX19ci5sZW5ndGg9MH07aWYoZS5ydW5uaW5nSW5Ob2RlSlMoKSluPWZ1bmN0aW9uKCl7cmV0dXJuIHNldEltbWVkaWF0ZSgoZnVuY3Rpb24oKXtyZXR1cm4gdCgpfSkpfTtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cucG9zdE1lc3NhZ2Upe3ZhciBvLGk9XCJlbnF1ZXVlSW1tZWRpYXRlLVwiK01hdGgucmFuZG9tKCkudG9TdHJpbmcoKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwoZnVuY3Rpb24oZSl7ZS5kYXRhPT09aSYmdCgpfSkpLG89ZS5ydW5uaW5nSW5OdWxsT3JpZ2luKCk/XCIqXCI6d2luZG93LmxvY2F0aW9uLmhyZWYsbj1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cucG9zdE1lc3NhZ2UoaSxvKX19ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCYmXCJmdW5jdGlvblwiPT10eXBlb2YgTWVzc2FnZVBvcnQpe3ZhciBhPW5ldyBNZXNzYWdlQ2hhbm5lbDthLnBvcnQxLm9ubWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiB0KCl9LG49ZnVuY3Rpb24oKXtyZXR1cm4gYS5wb3J0Mi5wb3N0TWVzc2FnZSgwKX19ZWxzZSBuPWZ1bmN0aW9uKCl7cmV0dXJuIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIHQoKX0pLDApfX0sdC5pbml0aWFsaXplU2NoZWR1bGVyKCl9KHQ9ZS5FdmVudExvb3B8fChlLkV2ZW50TG9vcD17fSkpLGUuZW5xdWV1ZUltbWVkaWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdC5lbnF1ZXVlSW1tZWRpYXRlKGUpfX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7ZS5vdmVycmlkZT1mdW5jdGlvbih0LG4pe3JldHVybiBlLmV4dGVuZCh0LG4pfSxlLmV4dGVuZD1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9iaiBpcyBudWxsIG9yIHVuZGVmaW5lZFwiKTtpZihcIm9iamVjdFwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwib2JqIGlzIG5vdCBhbiBvYmplY3RcIik7aWYobnVsbD09dCYmKHQ9e30pLFwib2JqZWN0XCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJuZXdQcm9wZXJ0aWVzIGlzIG5vdCBhbiBvYmplY3RcIik7aWYobnVsbCE9dClmb3IodmFyIG4gaW4gdCllW25dPXRbbl07cmV0dXJuIGV9fShlLk9iamVjdFRvb2xzfHwoZS5PYmplY3RUb29scz17fSkpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe2UuZ2V0UmFuZG9tSW50ZWdlckluUmFuZ2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZStNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKHQtZSkpfSxlLmdldFJhbmRvbVVURjE2U3RyaW5nT2ZMZW5ndGg9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPVwiXCIscj0wO3I8dDtyKyspe3ZhciBvPXZvaWQgMDtkb3tvPWUuZ2V0UmFuZG9tSW50ZWdlckluUmFuZ2UoMCwxMTE0MTEyKX13aGlsZShvPj01NTI5NiYmbzw9NTczNDMpO24rPWUuRW5jb2RpbmcuQ29kZVBvaW50LmRlY29kZVRvU3RyaW5nKG8pfXJldHVybiBufX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9MTAyNCksdGhpcy5vdXRwdXRCdWZmZXJDYXBhY2l0eT1lLHRoaXMub3V0cHV0UG9zaXRpb249MCx0aGlzLm91dHB1dFN0cmluZz1cIlwiLHRoaXMub3V0cHV0QnVmZmVyPW5ldyBVaW50MTZBcnJheSh0aGlzLm91dHB1dEJ1ZmZlckNhcGFjaXR5KX1yZXR1cm4gZS5wcm90b3R5cGUuYXBwZW5kQ2hhckNvZGU9ZnVuY3Rpb24oZSl7dGhpcy5vdXRwdXRCdWZmZXJbdGhpcy5vdXRwdXRQb3NpdGlvbisrXT1lLHRoaXMub3V0cHV0UG9zaXRpb249PT10aGlzLm91dHB1dEJ1ZmZlckNhcGFjaXR5JiZ0aGlzLmZsdXNoQnVmZmVyVG9PdXRwdXRTdHJpbmcoKX0sZS5wcm90b3R5cGUuYXBwZW5kQ2hhckNvZGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl0aGlzLmFwcGVuZENoYXJDb2RlKGVbdF0pfSxlLnByb3RvdHlwZS5hcHBlbmRTdHJpbmc9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXRoaXMuYXBwZW5kQ2hhckNvZGUoZS5jaGFyQ29kZUF0KHQpKX0sZS5wcm90b3R5cGUuYXBwZW5kQ29kZVBvaW50PWZ1bmN0aW9uKGUpe2lmKGU8PTY1NTM1KXRoaXMuYXBwZW5kQ2hhckNvZGUoZSk7ZWxzZXtpZighKGU8PTExMTQxMTEpKXRocm93IG5ldyBFcnJvcihcImFwcGVuZENvZGVQb2ludDogQSBjb2RlIHBvaW50IG9mIFwiLmNvbmNhdChlLFwiIGNhbm5vdCBiZSBlbmNvZGVkIGluIFVURi0xNlwiKSk7dGhpcy5hcHBlbmRDaGFyQ29kZSg1NTI5NisoZS02NTUzNj4+PjEwKSksdGhpcy5hcHBlbmRDaGFyQ29kZSg1NjMyMCsoZS02NTUzNiYxMDIzKSl9fSxlLnByb3RvdHlwZS5nZXRPdXRwdXRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mbHVzaEJ1ZmZlclRvT3V0cHV0U3RyaW5nKCksdGhpcy5vdXRwdXRTdHJpbmd9LGUucHJvdG90eXBlLmZsdXNoQnVmZmVyVG9PdXRwdXRTdHJpbmc9ZnVuY3Rpb24oKXt0aGlzLm91dHB1dFBvc2l0aW9uPT09dGhpcy5vdXRwdXRCdWZmZXJDYXBhY2l0eT90aGlzLm91dHB1dFN0cmluZys9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHRoaXMub3V0cHV0QnVmZmVyKTp0aGlzLm91dHB1dFN0cmluZys9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHRoaXMub3V0cHV0QnVmZmVyLnN1YmFycmF5KDAsdGhpcy5vdXRwdXRQb3NpdGlvbikpLHRoaXMub3V0cHV0UG9zaXRpb249MH0sZX0oKTtlLlN0cmluZ0J1aWxkZXI9dH0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLnJlc3RhcnQoKX1yZXR1cm4gdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMuc3RhcnRUaW1lPXQuZ2V0VGltZXN0YW1wKCl9LHQucHJvdG90eXBlLmdldEVsYXBzZWRUaW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2V0VGltZXN0YW1wKCktdGhpcy5zdGFydFRpbWV9LHQucHJvdG90eXBlLmdldEVsYXBzZWRUaW1lQW5kUmVzdGFydD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0RWxhcHNlZFRpbWUoKTtyZXR1cm4gdGhpcy5yZXN0YXJ0KCksZX0sdC5wcm90b3R5cGUubG9nQW5kUmVzdGFydD1mdW5jdGlvbih0LG4pe3ZvaWQgMD09PW4mJihuPSEwKTt2YXIgcj10aGlzLmdldEVsYXBzZWRUaW1lKCksbz1cIlwiLmNvbmNhdCh0LFwiOiBcIikuY29uY2F0KHIudG9GaXhlZCgzKSxcIm1zXCIpO3JldHVybiBlLmxvZyhvLG4pLHRoaXMucmVzdGFydCgpLHJ9LHQuZ2V0VGltZXN0YW1wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGltZXN0YW1wRnVuY3x8dGhpcy5jcmVhdGVHbG9iYWxUaW1lc3RhbXBGdW5jdGlvbigpLHRoaXMudGltZXN0YW1wRnVuYygpfSx0LmdldE1pY3Jvc2Vjb25kVGltZXN0YW1wPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IoMWUzKnQuZ2V0VGltZXN0YW1wKCkpfSx0LmNyZWF0ZUdsb2JhbFRpbWVzdGFtcEZ1bmN0aW9uPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHByb2Nlc3MmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHByb2Nlc3MuaHJ0aW1lKXt2YXIgZT0wO3RoaXMudGltZXN0YW1wRnVuYz1mdW5jdGlvbigpe3ZhciB0PXByb2Nlc3MuaHJ0aW1lKCksbj0xZTMqdFswXSt0WzFdLzFlNjtyZXR1cm4gZStufSxlPURhdGUubm93KCktdGhpcy50aW1lc3RhbXBGdW5jKCl9ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgY2hyb21lJiZjaHJvbWUuSW50ZXJ2YWwpe3ZhciB0PURhdGUubm93KCksbj1uZXcgY2hyb21lLkludGVydmFsO24uc3RhcnQoKSx0aGlzLnRpbWVzdGFtcEZ1bmM9ZnVuY3Rpb24oKXtyZXR1cm4gdCtuLm1pY3Jvc2Vjb25kcygpLzFlM319ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdyl7dmFyIHI9RGF0ZS5ub3coKS1wZXJmb3JtYW5jZS5ub3coKTt0aGlzLnRpbWVzdGFtcEZ1bmM9ZnVuY3Rpb24oKXtyZXR1cm4gcitwZXJmb3JtYW5jZS5ub3coKX19ZWxzZSBEYXRlLm5vdz90aGlzLnRpbWVzdGFtcEZ1bmM9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKX06dGhpcy50aW1lc3RhbXBGdW5jPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9fSx0fSgpO2UuVGltZXI9dH0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dm9pZCAwPT09dCYmKHQ9ITApLHRoaXMuTWluaW11bVNlcXVlbmNlTGVuZ3RoPTQsdGhpcy5NYXhpbXVtU2VxdWVuY2VMZW5ndGg9MzEsdGhpcy5NYXhpbXVtTWF0Y2hEaXN0YW5jZT0zMjc2Nyx0aGlzLlByZWZpeEhhc2hUYWJsZVNpemU9NjU1MzcsdGhpcy5pbnB1dEJ1ZmZlclN0cmVhbU9mZnNldD0xLHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFVpbnQzMkFycmF5P3RoaXMucHJlZml4SGFzaFRhYmxlPW5ldyBlLkNvbXByZXNzb3JDdXN0b21IYXNoVGFibGUodGhpcy5QcmVmaXhIYXNoVGFibGVTaXplKTp0aGlzLnByZWZpeEhhc2hUYWJsZT1uZXcgZS5Db21wcmVzc29yU2ltcGxlSGFzaFRhYmxlKHRoaXMuUHJlZml4SGFzaFRhYmxlU2l6ZSl9cmV0dXJuIHQucHJvdG90eXBlLmNvbXByZXNzQmxvY2s9ZnVuY3Rpb24odCl7aWYobnVsbD09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiY29tcHJlc3NCbG9jazogdW5kZWZpbmVkIG9yIG51bGwgaW5wdXQgcmVjZWl2ZWRcIik7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PWUuZW5jb2RlVVRGOCh0KSksdD1lLkJ1ZmZlclRvb2xzLmNvbnZlcnRUb1VpbnQ4QXJyYXlJZk5lZWRlZCh0KSx0aGlzLmNvbXByZXNzVXRmOEJsb2NrKHQpfSx0LnByb3RvdHlwZS5jb21wcmVzc1V0ZjhCbG9jaz1mdW5jdGlvbihlKXtpZighZXx8MD09ZS5sZW5ndGgpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO3ZhciB0PXRoaXMuY3JvcEFuZEFkZE5ld0J5dGVzVG9JbnB1dEJ1ZmZlcihlKSxuPXRoaXMuaW5wdXRCdWZmZXIscj10aGlzLmlucHV0QnVmZmVyLmxlbmd0aDt0aGlzLm91dHB1dEJ1ZmZlcj1uZXcgVWludDhBcnJheShlLmxlbmd0aCksdGhpcy5vdXRwdXRCdWZmZXJQb3NpdGlvbj0wO2Zvcih2YXIgbz0wLGk9dDtpPHI7aSsrKXt2YXIgYT1uW2ldLGw9aTxvO2lmKGk+ci10aGlzLk1pbmltdW1TZXF1ZW5jZUxlbmd0aClsfHx0aGlzLm91dHB1dFJhd0J5dGUoYSk7ZWxzZXt2YXIgcz10aGlzLmdldEJ1Y2tldEluZGV4Rm9yUHJlZml4KGkpO2lmKCFsKXt2YXIgYz10aGlzLmZpbmRMb25nZXN0TWF0Y2goaSxzKTtudWxsIT1jJiYodGhpcy5vdXRwdXRQb2ludGVyQnl0ZXMoYy5sZW5ndGgsYy5kaXN0YW5jZSksbz1pK2MubGVuZ3RoLGw9ITApfWx8fHRoaXMub3V0cHV0UmF3Qnl0ZShhKTt2YXIgdT10aGlzLmlucHV0QnVmZmVyU3RyZWFtT2Zmc2V0K2k7dGhpcy5wcmVmaXhIYXNoVGFibGUuYWRkVmFsdWVUb0J1Y2tldChzLHUpfX1yZXR1cm4gdGhpcy5vdXRwdXRCdWZmZXIuc3ViYXJyYXkoMCx0aGlzLm91dHB1dEJ1ZmZlclBvc2l0aW9uKX0sdC5wcm90b3R5cGUuZmluZExvbmdlc3RNYXRjaD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucHJlZml4SGFzaFRhYmxlLmdldEFycmF5U2VnbWVudEZvckJ1Y2tldEluZGV4KHQsdGhpcy5yZXVzYWJsZUFycmF5U2VnbWVudE9iamVjdCk7aWYobnVsbD09bilyZXR1cm4gbnVsbDtmb3IodmFyIHIsbz10aGlzLmlucHV0QnVmZmVyLGk9MCxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBsLHM9bi5nZXRJblJldmVyc2VkT3JkZXIoYSktdGhpcy5pbnB1dEJ1ZmZlclN0cmVhbU9mZnNldCxjPWUtcztpZihsPXZvaWQgMD09PXI/dGhpcy5NaW5pbXVtU2VxdWVuY2VMZW5ndGgtMTpyPDEyOCYmYz49MTI4P2krKGk+Pj4xKTppLGM+dGhpcy5NYXhpbXVtTWF0Y2hEaXN0YW5jZXx8bD49dGhpcy5NYXhpbXVtU2VxdWVuY2VMZW5ndGh8fGUrbD49by5sZW5ndGgpYnJlYWs7aWYob1tzK2xdPT09b1tlK2xdKWZvcih2YXIgdT0wOzt1Kyspe2lmKGUrdT09PW8ubGVuZ3RofHxvW3MrdV0hPT1vW2UrdV0pe3U+bCYmKHI9YyxpPXUpO2JyZWFrfWlmKHU9PT10aGlzLk1heGltdW1TZXF1ZW5jZUxlbmd0aClyZXR1cm57ZGlzdGFuY2U6YyxsZW5ndGg6dGhpcy5NYXhpbXVtU2VxdWVuY2VMZW5ndGh9fX1yZXR1cm4gdm9pZCAwIT09cj97ZGlzdGFuY2U6cixsZW5ndGg6aX06bnVsbH0sdC5wcm90b3R5cGUuZ2V0QnVja2V0SW5kZXhGb3JQcmVmaXg9ZnVuY3Rpb24oZSl7cmV0dXJuKDc4ODA1OTkqdGhpcy5pbnB1dEJ1ZmZlcltlXSszOTYwMSp0aGlzLmlucHV0QnVmZmVyW2UrMV0rMTk5KnRoaXMuaW5wdXRCdWZmZXJbZSsyXSt0aGlzLmlucHV0QnVmZmVyW2UrM10pJXRoaXMuUHJlZml4SGFzaFRhYmxlU2l6ZX0sdC5wcm90b3R5cGUub3V0cHV0UG9pbnRlckJ5dGVzPWZ1bmN0aW9uKGUsdCl7dDwxMjg/KHRoaXMub3V0cHV0UmF3Qnl0ZSgxOTJ8ZSksdGhpcy5vdXRwdXRSYXdCeXRlKHQpKToodGhpcy5vdXRwdXRSYXdCeXRlKDIyNHxlKSx0aGlzLm91dHB1dFJhd0J5dGUodD4+PjgpLHRoaXMub3V0cHV0UmF3Qnl0ZSgyNTUmdCkpfSx0LnByb3RvdHlwZS5vdXRwdXRSYXdCeXRlPWZ1bmN0aW9uKGUpe3RoaXMub3V0cHV0QnVmZmVyW3RoaXMub3V0cHV0QnVmZmVyUG9zaXRpb24rK109ZX0sdC5wcm90b3R5cGUuY3JvcEFuZEFkZE5ld0J5dGVzVG9JbnB1dEJ1ZmZlcj1mdW5jdGlvbih0KXtpZih2b2lkIDA9PT10aGlzLmlucHV0QnVmZmVyKXJldHVybiB0aGlzLmlucHV0QnVmZmVyPXQsMDt2YXIgbj1NYXRoLm1pbih0aGlzLmlucHV0QnVmZmVyLmxlbmd0aCx0aGlzLk1heGltdW1NYXRjaERpc3RhbmNlKSxyPXRoaXMuaW5wdXRCdWZmZXIubGVuZ3RoLW47cmV0dXJuIHRoaXMuaW5wdXRCdWZmZXI9ZS5Db21wcmVzc2lvbkNvbW1vbi5nZXRDcm9wcGVkQW5kQXBwZW5kZWRCeXRlQXJyYXkodGhpcy5pbnB1dEJ1ZmZlcixyLG4sdCksdGhpcy5pbnB1dEJ1ZmZlclN0cmVhbU9mZnNldCs9cixufSx0fSgpO2UuQ29tcHJlc3Nvcj10fShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt0aGlzLm1pbmltdW1CdWNrZXRDYXBhY2l0eT00LHRoaXMubWF4aW11bUJ1Y2tldENhcGFjaXR5PTY0LHRoaXMuYnVja2V0TG9jYXRvcnM9bmV3IFVpbnQzMkFycmF5KDIqZSksdGhpcy5zdG9yYWdlPW5ldyBVaW50MzJBcnJheSgyKmUpLHRoaXMuc3RvcmFnZUluZGV4PTF9cmV0dXJuIHQucHJvdG90eXBlLmFkZFZhbHVlVG9CdWNrZXQ9ZnVuY3Rpb24odCxuKXt0PDw9MSx0aGlzLnN0b3JhZ2VJbmRleD49dGhpcy5zdG9yYWdlLmxlbmd0aD4+PjEmJnRoaXMuY29tcGFjdCgpO3ZhciByLG89dGhpcy5idWNrZXRMb2NhdG9yc1t0XTtpZigwPT09bylvPXRoaXMuc3RvcmFnZUluZGV4LHI9MSx0aGlzLnN0b3JhZ2VbdGhpcy5zdG9yYWdlSW5kZXhdPW4sdGhpcy5zdG9yYWdlSW5kZXgrPXRoaXMubWluaW11bUJ1Y2tldENhcGFjaXR5O2Vsc2V7KHI9dGhpcy5idWNrZXRMb2NhdG9yc1t0KzFdKT09PXRoaXMubWF4aW11bUJ1Y2tldENhcGFjaXR5LTEmJihyPXRoaXMudHJ1bmNhdGVCdWNrZXRUb05ld2VyRWxlbWVudHMobyxyLHRoaXMubWF4aW11bUJ1Y2tldENhcGFjaXR5LzIpKTt2YXIgaT1vK3I7MD09PXRoaXMuc3RvcmFnZVtpXT8odGhpcy5zdG9yYWdlW2ldPW4saT09PXRoaXMuc3RvcmFnZUluZGV4JiYodGhpcy5zdG9yYWdlSW5kZXgrPXIpKTooZS5BcnJheVRvb2xzLmNvcHlFbGVtZW50cyh0aGlzLnN0b3JhZ2Usbyx0aGlzLnN0b3JhZ2UsdGhpcy5zdG9yYWdlSW5kZXgsciksbz10aGlzLnN0b3JhZ2VJbmRleCx0aGlzLnN0b3JhZ2VJbmRleCs9cix0aGlzLnN0b3JhZ2VbdGhpcy5zdG9yYWdlSW5kZXgrK109bix0aGlzLnN0b3JhZ2VJbmRleCs9cikscisrfXRoaXMuYnVja2V0TG9jYXRvcnNbdF09byx0aGlzLmJ1Y2tldExvY2F0b3JzW3QrMV09cn0sdC5wcm90b3R5cGUudHJ1bmNhdGVCdWNrZXRUb05ld2VyRWxlbWVudHM9ZnVuY3Rpb24odCxuLHIpe3ZhciBvPXQrbi1yO3JldHVybiBlLkFycmF5VG9vbHMuY29weUVsZW1lbnRzKHRoaXMuc3RvcmFnZSxvLHRoaXMuc3RvcmFnZSx0LHIpLGUuQXJyYXlUb29scy56ZXJvRWxlbWVudHModGhpcy5zdG9yYWdlLHQrcixuLXIpLHJ9LHQucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmJ1Y2tldExvY2F0b3JzLG49dGhpcy5zdG9yYWdlO3RoaXMuYnVja2V0TG9jYXRvcnM9bmV3IFVpbnQzMkFycmF5KHRoaXMuYnVja2V0TG9jYXRvcnMubGVuZ3RoKSx0aGlzLnN0b3JhZ2VJbmRleD0xO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cis9Mil7dmFyIG89dFtyKzFdOzAhPT1vJiYodGhpcy5idWNrZXRMb2NhdG9yc1tyXT10aGlzLnN0b3JhZ2VJbmRleCx0aGlzLmJ1Y2tldExvY2F0b3JzW3IrMV09byx0aGlzLnN0b3JhZ2VJbmRleCs9TWF0aC5tYXgoTWF0aC5taW4oMipvLHRoaXMubWF4aW11bUJ1Y2tldENhcGFjaXR5KSx0aGlzLm1pbmltdW1CdWNrZXRDYXBhY2l0eSkpfWZvcih0aGlzLnN0b3JhZ2U9bmV3IFVpbnQzMkFycmF5KDgqdGhpcy5zdG9yYWdlSW5kZXgpLHI9MDtyPHQubGVuZ3RoO3IrPTIpe3ZhciBpPXRbcl07aWYoMCE9PWkpe3ZhciBhPXRoaXMuYnVja2V0TG9jYXRvcnNbcl0sbD10aGlzLmJ1Y2tldExvY2F0b3JzW3IrMV07ZS5BcnJheVRvb2xzLmNvcHlFbGVtZW50cyhuLGksdGhpcy5zdG9yYWdlLGEsbCl9fX0sdC5wcm90b3R5cGUuZ2V0QXJyYXlTZWdtZW50Rm9yQnVja2V0SW5kZXg9ZnVuY3Rpb24odCxuKXt0PDw9MTt2YXIgcj10aGlzLmJ1Y2tldExvY2F0b3JzW3RdO3JldHVybiAwPT09cj9udWxsOih2b2lkIDA9PT1uJiYobj1uZXcgZS5BcnJheVNlZ21lbnQodGhpcy5zdG9yYWdlLHIsdGhpcy5idWNrZXRMb2NhdG9yc1t0KzFdKSksbil9LHQucHJvdG90eXBlLmdldFVzZWRCdWNrZXRDb3VudD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKGUuQXJyYXlUb29scy5jb3VudE5vbnplcm9WYWx1ZXNJbkFycmF5KHRoaXMuYnVja2V0TG9jYXRvcnMpLzIpfSx0LnByb3RvdHlwZS5nZXRUb3RhbEVsZW1lbnRDb3VudD1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9MDt0PHRoaXMuYnVja2V0TG9jYXRvcnMubGVuZ3RoO3QrPTIpZSs9dGhpcy5idWNrZXRMb2NhdG9yc1t0KzFdO3JldHVybiBlfSx0fSgpO2UuQ29tcHJlc3NvckN1c3RvbUhhc2hUYWJsZT10fShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt0aGlzLm1heGltdW1CdWNrZXRDYXBhY2l0eT02NCx0aGlzLmJ1Y2tldHM9bmV3IEFycmF5KGUpfXJldHVybiB0LnByb3RvdHlwZS5hZGRWYWx1ZVRvQnVja2V0PWZ1bmN0aW9uKHQsbil7dmFyIHI9dGhpcy5idWNrZXRzW3RdO3ZvaWQgMD09PXI/dGhpcy5idWNrZXRzW3RdPVtuXTooci5sZW5ndGg9PT10aGlzLm1heGltdW1CdWNrZXRDYXBhY2l0eS0xJiZlLkFycmF5VG9vbHMudHJ1bmNhdGVTdGFydGluZ0VsZW1lbnRzKHIsdGhpcy5tYXhpbXVtQnVja2V0Q2FwYWNpdHkvMiksci5wdXNoKG4pKX0sdC5wcm90b3R5cGUuZ2V0QXJyYXlTZWdtZW50Rm9yQnVja2V0SW5kZXg9ZnVuY3Rpb24odCxuKXt2YXIgcj10aGlzLmJ1Y2tldHNbdF07cmV0dXJuIHZvaWQgMD09PXI/bnVsbDoodm9pZCAwPT09biYmKG49bmV3IGUuQXJyYXlTZWdtZW50KHIsMCxyLmxlbmd0aCkpLG4pfSx0LnByb3RvdHlwZS5nZXRVc2VkQnVja2V0Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5BcnJheVRvb2xzLmNvdW50Tm9uemVyb1ZhbHVlc0luQXJyYXkodGhpcy5idWNrZXRzKX0sdC5wcm90b3R5cGUuZ2V0VG90YWxFbGVtZW50Q291bnQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PTA7dDx0aGlzLmJ1Y2tldHMubGVuZ3RoO3QrKyl2b2lkIDAhPT10aGlzLmJ1Y2tldHNbdF0mJihlKz10aGlzLmJ1Y2tldHNbdF0ubGVuZ3RoKTtyZXR1cm4gZX0sdH0oKTtlLkNvbXByZXNzb3JTaW1wbGVIYXNoVGFibGU9dH0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLk1heGltdW1NYXRjaERpc3RhbmNlPTMyNzY3LHRoaXMub3V0cHV0UG9zaXRpb249MH1yZXR1cm4gdC5wcm90b3R5cGUuZGVjb21wcmVzc0Jsb2NrVG9TdHJpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9ZS5CdWZmZXJUb29scy5jb252ZXJ0VG9VaW50OEFycmF5SWZOZWVkZWQodCksZS5kZWNvZGVVVEY4KHRoaXMuZGVjb21wcmVzc0Jsb2NrKHQpKX0sdC5wcm90b3R5cGUuZGVjb21wcmVzc0Jsb2NrPWZ1bmN0aW9uKHQpe3RoaXMuaW5wdXRCdWZmZXJSZW1haW5kZXImJih0PWUuQXJyYXlUb29scy5jb25jYXRVaW50OEFycmF5cyhbdGhpcy5pbnB1dEJ1ZmZlclJlbWFpbmRlcix0XSksdGhpcy5pbnB1dEJ1ZmZlclJlbWFpbmRlcj12b2lkIDApO2Zvcih2YXIgbj10aGlzLmNyb3BPdXRwdXRCdWZmZXJUb1dpbmRvd0FuZEluaXRpYWxpemUoTWF0aC5tYXgoNCp0Lmxlbmd0aCwxMDI0KSkscj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7dmFyIGk9dFtyXTtpZihpPj4+Nj09Myl7dmFyIGE9aT4+PjU7aWYocj09by0xfHxyPT1vLTImJjc9PWEpe3RoaXMuaW5wdXRCdWZmZXJSZW1haW5kZXI9dC5zdWJhcnJheShyKTticmVha31pZih0W3IrMV0+Pj43PT0xKXRoaXMub3V0cHV0Qnl0ZShpKTtlbHNle3ZhciBsPTMxJmkscz12b2lkIDA7Nj09YT8ocz10W3IrMV0scis9MSk6KHM9dFtyKzFdPDw4fHRbcisyXSxyKz0yKTtmb3IodmFyIGM9dGhpcy5vdXRwdXRQb3NpdGlvbi1zLHU9MDt1PGw7dSsrKXRoaXMub3V0cHV0Qnl0ZSh0aGlzLm91dHB1dEJ1ZmZlcltjK3VdKX19ZWxzZSB0aGlzLm91dHB1dEJ5dGUoaSl9cmV0dXJuIHRoaXMucm9sbEJhY2tJZk91dHB1dEJ1ZmZlckVuZHNXaXRoQVRydW5jYXRlZE11bHRpYnl0ZVNlcXVlbmNlKCksZS5Db21wcmVzc2lvbkNvbW1vbi5nZXRDcm9wcGVkQnVmZmVyKHRoaXMub3V0cHV0QnVmZmVyLG4sdGhpcy5vdXRwdXRQb3NpdGlvbi1uKX0sdC5wcm90b3R5cGUub3V0cHV0Qnl0ZT1mdW5jdGlvbih0KXt0aGlzLm91dHB1dFBvc2l0aW9uPT09dGhpcy5vdXRwdXRCdWZmZXIubGVuZ3RoJiYodGhpcy5vdXRwdXRCdWZmZXI9ZS5BcnJheVRvb2xzLmRvdWJsZUJ5dGVBcnJheUNhcGFjaXR5KHRoaXMub3V0cHV0QnVmZmVyKSksdGhpcy5vdXRwdXRCdWZmZXJbdGhpcy5vdXRwdXRQb3NpdGlvbisrXT10fSx0LnByb3RvdHlwZS5jcm9wT3V0cHV0QnVmZmVyVG9XaW5kb3dBbmRJbml0aWFsaXplPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLm91dHB1dEJ1ZmZlcilyZXR1cm4gdGhpcy5vdXRwdXRCdWZmZXI9bmV3IFVpbnQ4QXJyYXkodCksMDt2YXIgbj1NYXRoLm1pbih0aGlzLm91dHB1dFBvc2l0aW9uLHRoaXMuTWF4aW11bU1hdGNoRGlzdGFuY2UpO2lmKHRoaXMub3V0cHV0QnVmZmVyPWUuQ29tcHJlc3Npb25Db21tb24uZ2V0Q3JvcHBlZEJ1ZmZlcih0aGlzLm91dHB1dEJ1ZmZlcix0aGlzLm91dHB1dFBvc2l0aW9uLW4sbix0KSx0aGlzLm91dHB1dFBvc2l0aW9uPW4sdGhpcy5vdXRwdXRCdWZmZXJSZW1haW5kZXIpe2Zvcih2YXIgcj0wO3I8dGhpcy5vdXRwdXRCdWZmZXJSZW1haW5kZXIubGVuZ3RoO3IrKyl0aGlzLm91dHB1dEJ5dGUodGhpcy5vdXRwdXRCdWZmZXJSZW1haW5kZXJbcl0pO3RoaXMub3V0cHV0QnVmZmVyUmVtYWluZGVyPXZvaWQgMH1yZXR1cm4gbn0sdC5wcm90b3R5cGUucm9sbEJhY2tJZk91dHB1dEJ1ZmZlckVuZHNXaXRoQVRydW5jYXRlZE11bHRpYnl0ZVNlcXVlbmNlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTE7ZTw9NCYmdGhpcy5vdXRwdXRQb3NpdGlvbi1lPj0wO2UrKyl7dmFyIHQ9dGhpcy5vdXRwdXRCdWZmZXJbdGhpcy5vdXRwdXRQb3NpdGlvbi1lXTtpZihlPDQmJnQ+Pj4zPT0zMHx8ZTwzJiZ0Pj4+ND09MTR8fGU8MiYmdD4+PjU9PTYpcmV0dXJuIHRoaXMub3V0cHV0QnVmZmVyUmVtYWluZGVyPXRoaXMub3V0cHV0QnVmZmVyLnN1YmFycmF5KHRoaXMub3V0cHV0UG9zaXRpb24tZSx0aGlzLm91dHB1dFBvc2l0aW9uKSx2b2lkKHRoaXMub3V0cHV0UG9zaXRpb24tPWUpfX0sdH0oKTtlLkRlY29tcHJlc3Nvcj10fShvfHwobz17fSkpLGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0KXshZnVuY3Rpb24odCl7dmFyIG49bmV3IFVpbnQ4QXJyYXkoWzY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNDMsNDddKSxyPW5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsNjIsMjU1LDI1NSwyNTUsNjMsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsMjU1LDI1NSwyNTUsMCwyNTUsMjU1LDI1NSwwLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDI1NSwyNTUsMjU1LDI1NV0pO3QuZW5jb2RlPWZ1bmN0aW9uKG4pe3JldHVybiBuJiYwIT1uLmxlbmd0aD9lLnJ1bm5pbmdJbk5vZGVKUygpP2UuQnVmZmVyVG9vbHMudWludDhBcnJheVRvQnVmZmVyKG4pLnRvU3RyaW5nKFwiYmFzZTY0XCIpOnQuZW5jb2RlV2l0aEpTKG4pOlwiXCJ9LHQuZGVjb2RlPWZ1bmN0aW9uKG4pe3JldHVybiBuP2UucnVubmluZ0luTm9kZUpTKCk/ZS5CdWZmZXJUb29scy5idWZmZXJUb1VpbnQ4QXJyYXkoQnVmZmVyLmZyb20obixcImJhc2U2NFwiKSk6dC5kZWNvZGVXaXRoSlMobik6bmV3IFVpbnQ4QXJyYXkoMCl9LHQuZW5jb2RlV2l0aEpTPWZ1bmN0aW9uKHQscil7aWYodm9pZCAwPT09ciYmKHI9ITApLCF0fHwwPT10Lmxlbmd0aClyZXR1cm5cIlwiO2Zvcih2YXIgbyxpPW4sYT1uZXcgZS5TdHJpbmdCdWlsZGVyLGw9MCxzPXQubGVuZ3RoO2w8cztsKz0zKWw8PXMtMz8obz10W2xdPDwxNnx0W2wrMV08PDh8dFtsKzJdLGEuYXBwZW5kQ2hhckNvZGUoaVtvPj4+MTgmNjNdKSxhLmFwcGVuZENoYXJDb2RlKGlbbz4+PjEyJjYzXSksYS5hcHBlbmRDaGFyQ29kZShpW28+Pj42JjYzXSksYS5hcHBlbmRDaGFyQ29kZShpWzYzJm9dKSxvPTApOmw9PT1zLTI/KG89dFtsXTw8MTZ8dFtsKzFdPDw4LGEuYXBwZW5kQ2hhckNvZGUoaVtvPj4+MTgmNjNdKSxhLmFwcGVuZENoYXJDb2RlKGlbbz4+PjEyJjYzXSksYS5hcHBlbmRDaGFyQ29kZShpW28+Pj42JjYzXSksciYmYS5hcHBlbmRDaGFyQ29kZSg2MSkpOmw9PT1zLTEmJihvPXRbbF08PDE2LGEuYXBwZW5kQ2hhckNvZGUoaVtvPj4+MTgmNjNdKSxhLmFwcGVuZENoYXJDb2RlKGlbbz4+PjEyJjYzXSksciYmKGEuYXBwZW5kQ2hhckNvZGUoNjEpLGEuYXBwZW5kQ2hhckNvZGUoNjEpKSk7cmV0dXJuIGEuZ2V0T3V0cHV0U3RyaW5nKCl9LHQuZGVjb2RlV2l0aEpTPWZ1bmN0aW9uKGUsdCl7aWYoIWV8fDA9PWUubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgbj1lLmxlbmd0aCU0O2lmKDE9PT1uKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgQmFzZTY0IHN0cmluZzogbGVuZ3RoICUgNCA9PSAxXCIpOzI9PT1uP2UrPVwiPT1cIjozPT09biYmKGUrPVwiPVwiKSx0fHwodD1uZXcgVWludDhBcnJheShlLmxlbmd0aCkpO2Zvcih2YXIgbz0wLGk9ZS5sZW5ndGgsYT0wO2E8aTthKz00KXt2YXIgbD1yW2UuY2hhckNvZGVBdChhKV08PDE4fHJbZS5jaGFyQ29kZUF0KGErMSldPDwxMnxyW2UuY2hhckNvZGVBdChhKzIpXTw8NnxyW2UuY2hhckNvZGVBdChhKzMpXTt0W28rK109bD4+PjE2JjI1NSx0W28rK109bD4+PjgmMjU1LHRbbysrXT0yNTUmbH1yZXR1cm4gNjE9PWUuY2hhckNvZGVBdChpLTEpJiZvLS0sNjE9PWUuY2hhckNvZGVBdChpLTIpJiZvLS0sdC5zdWJhcnJheSgwLG8pfX0odC5CYXNlNjR8fCh0LkJhc2U2ND17fSkpfShlLkVuY29kaW5nfHwoZS5FbmNvZGluZz17fSkpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0KXshZnVuY3Rpb24odCl7dC5lbmNvZGU9ZnVuY3Rpb24odCl7aWYobnVsbD09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQmluYXJ5U3RyaW5nLmVuY29kZTogdW5kZWZpbmVkIG9yIG51bGwgaW5wdXQgcmVjZWl2ZWRcIik7aWYoMD09PXQubGVuZ3RoKXJldHVyblwiXCI7Zm9yKHZhciBuPXQubGVuZ3RoLHI9bmV3IGUuU3RyaW5nQnVpbGRlcixvPTAsaT0xLGE9MDthPG47YSs9Mil7dmFyIGw7bD1hPT1uLTE/dFthXTw8ODp0W2FdPDw4fHRbYSsxXSxyLmFwcGVuZENoYXJDb2RlKG88PDE2LWl8bD4+PmkpLG89bCYoMTw8aSktMSwxNT09PWk/KHIuYXBwZW5kQ2hhckNvZGUobyksbz0wLGk9MSk6aSs9MSxhPj1uLTImJnIuYXBwZW5kQ2hhckNvZGUobzw8MTYtaSl9cmV0dXJuIHIuYXBwZW5kQ2hhckNvZGUoMzI3Njh8biUyKSxyLmdldE91dHB1dFN0cmluZygpfSx0LmRlY29kZT1mdW5jdGlvbihlKXtpZihcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQmluYXJ5U3RyaW5nLmRlY29kZTogaW52YWxpZCBpbnB1dCB0eXBlXCIpO2lmKFwiXCI9PWUpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO2Zvcih2YXIgdD1uZXcgVWludDhBcnJheSgzKmUubGVuZ3RoKSxuPTAscj1mdW5jdGlvbihlKXt0W24rK109ZT4+PjgsdFtuKytdPTI1NSZlfSxvPTAsaT0wLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIGw9ZS5jaGFyQ29kZUF0KGEpO2w+PTMyNzY4PygzMjc2OT09bCYmbi0tLGk9MCk6KDA9PWk/bz1sOihyKG88PGl8bD4+PjE1LWkpLG89bCYoMTw8MTUtaSktMSksMTU9PWk/aT0wOmkrPTEpfXJldHVybiB0LnN1YmFycmF5KDAsbil9fSh0LkJpbmFyeVN0cmluZ3x8KHQuQmluYXJ5U3RyaW5nPXt9KSl9KGUuRW5jb2Rpbmd8fChlLkVuY29kaW5nPXt9KSl9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlKXtlLmVuY29kZUZyb21TdHJpbmc9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmNoYXJDb2RlQXQodCk7aWYobjw1NTI5Nnx8bj41NjMxOSlyZXR1cm4gbjt2YXIgcj1lLmNoYXJDb2RlQXQodCsxKTtpZihyPj01NjMyMCYmcjw9NTczNDMpcmV0dXJuIHItNTYzMjArKG4tNTUyOTY8PDEwKSs2NTUzNjt0aHJvdyBuZXcgRXJyb3IoXCJnZXRVbmljb2RlQ29kZVBvaW50OiBSZWNlaXZlZCBhIGxlYWQgc3Vycm9nYXRlIGNoYXJhY3RlciwgY2hhciBjb2RlIFwiLmNvbmNhdChuLFwiLCBmb2xsb3dlZCBieSBcIikuY29uY2F0KHIsXCIsIHdoaWNoIGlzIG5vdCBhIHRyYWlsaW5nIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIgY29kZS5cIikpfSxlLmRlY29kZVRvU3RyaW5nPWZ1bmN0aW9uKGUpe2lmKGU8PTY1NTM1KXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpO2lmKGU8PTExMTQxMTEpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKGUtNjU1MzY+Pj4xMCksNTYzMjArKGUtNjU1MzYmMTAyMykpO3Rocm93IG5ldyBFcnJvcihcImdldFN0cmluZ0Zyb21Vbmljb2RlQ29kZVBvaW50OiBBIGNvZGUgcG9pbnQgb2YgXCIuY29uY2F0KGUsXCIgY2Fubm90IGJlIGVuY29kZWQgaW4gVVRGLTE2XCIpKX19KGUuQ29kZVBvaW50fHwoZS5Db2RlUG9pbnQ9e30pKX0oZS5FbmNvZGluZ3x8KGUuRW5jb2Rpbmc9e30pKX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe3ZhciB0PVtcIjAwMFwiLFwiMDAxXCIsXCIwMDJcIixcIjAwM1wiLFwiMDA0XCIsXCIwMDVcIixcIjAwNlwiLFwiMDA3XCIsXCIwMDhcIixcIjAwOVwiLFwiMDEwXCIsXCIwMTFcIixcIjAxMlwiLFwiMDEzXCIsXCIwMTRcIixcIjAxNVwiLFwiMDE2XCIsXCIwMTdcIixcIjAxOFwiLFwiMDE5XCIsXCIwMjBcIixcIjAyMVwiLFwiMDIyXCIsXCIwMjNcIixcIjAyNFwiLFwiMDI1XCIsXCIwMjZcIixcIjAyN1wiLFwiMDI4XCIsXCIwMjlcIixcIjAzMFwiLFwiMDMxXCIsXCIwMzJcIixcIjAzM1wiLFwiMDM0XCIsXCIwMzVcIixcIjAzNlwiLFwiMDM3XCIsXCIwMzhcIixcIjAzOVwiLFwiMDQwXCIsXCIwNDFcIixcIjA0MlwiLFwiMDQzXCIsXCIwNDRcIixcIjA0NVwiLFwiMDQ2XCIsXCIwNDdcIixcIjA0OFwiLFwiMDQ5XCIsXCIwNTBcIixcIjA1MVwiLFwiMDUyXCIsXCIwNTNcIixcIjA1NFwiLFwiMDU1XCIsXCIwNTZcIixcIjA1N1wiLFwiMDU4XCIsXCIwNTlcIixcIjA2MFwiLFwiMDYxXCIsXCIwNjJcIixcIjA2M1wiLFwiMDY0XCIsXCIwNjVcIixcIjA2NlwiLFwiMDY3XCIsXCIwNjhcIixcIjA2OVwiLFwiMDcwXCIsXCIwNzFcIixcIjA3MlwiLFwiMDczXCIsXCIwNzRcIixcIjA3NVwiLFwiMDc2XCIsXCIwNzdcIixcIjA3OFwiLFwiMDc5XCIsXCIwODBcIixcIjA4MVwiLFwiMDgyXCIsXCIwODNcIixcIjA4NFwiLFwiMDg1XCIsXCIwODZcIixcIjA4N1wiLFwiMDg4XCIsXCIwODlcIixcIjA5MFwiLFwiMDkxXCIsXCIwOTJcIixcIjA5M1wiLFwiMDk0XCIsXCIwOTVcIixcIjA5NlwiLFwiMDk3XCIsXCIwOThcIixcIjA5OVwiLFwiMTAwXCIsXCIxMDFcIixcIjEwMlwiLFwiMTAzXCIsXCIxMDRcIixcIjEwNVwiLFwiMTA2XCIsXCIxMDdcIixcIjEwOFwiLFwiMTA5XCIsXCIxMTBcIixcIjExMVwiLFwiMTEyXCIsXCIxMTNcIixcIjExNFwiLFwiMTE1XCIsXCIxMTZcIixcIjExN1wiLFwiMTE4XCIsXCIxMTlcIixcIjEyMFwiLFwiMTIxXCIsXCIxMjJcIixcIjEyM1wiLFwiMTI0XCIsXCIxMjVcIixcIjEyNlwiLFwiMTI3XCIsXCIxMjhcIixcIjEyOVwiLFwiMTMwXCIsXCIxMzFcIixcIjEzMlwiLFwiMTMzXCIsXCIxMzRcIixcIjEzNVwiLFwiMTM2XCIsXCIxMzdcIixcIjEzOFwiLFwiMTM5XCIsXCIxNDBcIixcIjE0MVwiLFwiMTQyXCIsXCIxNDNcIixcIjE0NFwiLFwiMTQ1XCIsXCIxNDZcIixcIjE0N1wiLFwiMTQ4XCIsXCIxNDlcIixcIjE1MFwiLFwiMTUxXCIsXCIxNTJcIixcIjE1M1wiLFwiMTU0XCIsXCIxNTVcIixcIjE1NlwiLFwiMTU3XCIsXCIxNThcIixcIjE1OVwiLFwiMTYwXCIsXCIxNjFcIixcIjE2MlwiLFwiMTYzXCIsXCIxNjRcIixcIjE2NVwiLFwiMTY2XCIsXCIxNjdcIixcIjE2OFwiLFwiMTY5XCIsXCIxNzBcIixcIjE3MVwiLFwiMTcyXCIsXCIxNzNcIixcIjE3NFwiLFwiMTc1XCIsXCIxNzZcIixcIjE3N1wiLFwiMTc4XCIsXCIxNzlcIixcIjE4MFwiLFwiMTgxXCIsXCIxODJcIixcIjE4M1wiLFwiMTg0XCIsXCIxODVcIixcIjE4NlwiLFwiMTg3XCIsXCIxODhcIixcIjE4OVwiLFwiMTkwXCIsXCIxOTFcIixcIjE5MlwiLFwiMTkzXCIsXCIxOTRcIixcIjE5NVwiLFwiMTk2XCIsXCIxOTdcIixcIjE5OFwiLFwiMTk5XCIsXCIyMDBcIixcIjIwMVwiLFwiMjAyXCIsXCIyMDNcIixcIjIwNFwiLFwiMjA1XCIsXCIyMDZcIixcIjIwN1wiLFwiMjA4XCIsXCIyMDlcIixcIjIxMFwiLFwiMjExXCIsXCIyMTJcIixcIjIxM1wiLFwiMjE0XCIsXCIyMTVcIixcIjIxNlwiLFwiMjE3XCIsXCIyMThcIixcIjIxOVwiLFwiMjIwXCIsXCIyMjFcIixcIjIyMlwiLFwiMjIzXCIsXCIyMjRcIixcIjIyNVwiLFwiMjI2XCIsXCIyMjdcIixcIjIyOFwiLFwiMjI5XCIsXCIyMzBcIixcIjIzMVwiLFwiMjMyXCIsXCIyMzNcIixcIjIzNFwiLFwiMjM1XCIsXCIyMzZcIixcIjIzN1wiLFwiMjM4XCIsXCIyMzlcIixcIjI0MFwiLFwiMjQxXCIsXCIyNDJcIixcIjI0M1wiLFwiMjQ0XCIsXCIyNDVcIixcIjI0NlwiLFwiMjQ3XCIsXCIyNDhcIixcIjI0OVwiLFwiMjUwXCIsXCIyNTFcIixcIjI1MlwiLFwiMjUzXCIsXCIyNTRcIixcIjI1NVwiXTtlLmVuY29kZT1mdW5jdGlvbihlKXtmb3IodmFyIG49W10scj0wO3I8ZS5sZW5ndGg7cisrKW4ucHVzaCh0W2Vbcl1dKTtyZXR1cm4gbi5qb2luKFwiIFwiKX19KGUuRGVjaW1hbFN0cmluZ3x8KGUuRGVjaW1hbFN0cmluZz17fSkpfShlLkVuY29kaW5nfHwoZS5FbmNvZGluZz17fSkpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlKXshZnVuY3Rpb24odCl7dC5lbmNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGUuQmluYXJ5U3RyaW5nLmVuY29kZSh0KS5yZXBsYWNlKC9cXDAvZyxcIuiAglwiKX0sdC5kZWNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGUuQmluYXJ5U3RyaW5nLmRlY29kZSh0LnJlcGxhY2UoL1xcdTgwMDIvZyxcIlxcMFwiKSl9fShlLlN0b3JhZ2VCaW5hcnlTdHJpbmd8fChlLlN0b3JhZ2VCaW5hcnlTdHJpbmc9e30pKX0oZS5FbmNvZGluZ3x8KGUuRW5jb2Rpbmc9e30pKX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXshZnVuY3Rpb24odCl7IWZ1bmN0aW9uKG4pe3ZhciByLG87bi5lbmNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJjAhPXQubGVuZ3RoP2UucnVubmluZ0luTm9kZUpTKCk/ZS5CdWZmZXJUb29scy5idWZmZXJUb1VpbnQ4QXJyYXkoQnVmZmVyLmZyb20odCxcInV0ZjhcIikpOm4uY3JlYXRlTmF0aXZlVGV4dEVuY29kZXJBbmREZWNvZGVySWZBdmFpbGFibGUoKT9yLmVuY29kZSh0KTpuLmVuY29kZVdpdGhKUyh0KTpuZXcgVWludDhBcnJheSgwKX0sbi5kZWNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJjAhPXQubGVuZ3RoP2UucnVubmluZ0luTm9kZUpTKCk/ZS5CdWZmZXJUb29scy51aW50OEFycmF5VG9CdWZmZXIodCkudG9TdHJpbmcoXCJ1dGY4XCIpOm4uY3JlYXRlTmF0aXZlVGV4dEVuY29kZXJBbmREZWNvZGVySWZBdmFpbGFibGUoKT9vLmRlY29kZSh0KTpuLmRlY29kZVdpdGhKUyh0KTpcIlwifSxuLmVuY29kZVdpdGhKUz1mdW5jdGlvbihlLG4pe2lmKCFlfHwwPT1lLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7bnx8KG49bmV3IFVpbnQ4QXJyYXkoNCplLmxlbmd0aCkpO2Zvcih2YXIgcj0wLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGk9dC5Db2RlUG9pbnQuZW5jb2RlRnJvbVN0cmluZyhlLG8pO2lmKGk8PTEyNyluW3IrK109aTtlbHNlIGlmKGk8PTIwNDcpbltyKytdPTE5MnxpPj4+NixuW3IrK109MTI4fDYzJmk7ZWxzZSBpZihpPD02NTUzNSluW3IrK109MjI0fGk+Pj4xMixuW3IrK109MTI4fGk+Pj42JjYzLG5bcisrXT0xMjh8NjMmaTtlbHNle2lmKCEoaTw9MTExNDExMSkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBVVEYtMTYgc3RyaW5nOiBFbmNvdW50ZXJlZCBhIGNoYXJhY3RlciB1bnN1cHBvcnRlZCBieSBVVEYtOC8xNiAoUkZDIDM2MjkpXCIpO25bcisrXT0yNDB8aT4+PjE4LG5bcisrXT0xMjh8aT4+PjEyJjYzLG5bcisrXT0xMjh8aT4+PjYmNjMsbltyKytdPTEyOHw2MyZpLG8rK319cmV0dXJuIG4uc3ViYXJyYXkoMCxyKX0sbi5kZWNvZGVXaXRoSlM9ZnVuY3Rpb24odCxuLHIpe2lmKHZvaWQgMD09PW4mJihuPTApLCF0fHwwPT10Lmxlbmd0aClyZXR1cm5cIlwiO3ZvaWQgMD09PXImJihyPXQubGVuZ3RoKTtmb3IodmFyIG8saSxhPW5ldyBlLlN0cmluZ0J1aWxkZXIsbD1uLHM9cjtsPHM7KXtpZigoaT10W2xdKT4+Pjc9PTApbz1pLGwrPTE7ZWxzZSBpZihpPj4+NT09Nil7aWYobCsxPj1yKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgVVRGLTggc3RyZWFtOiBUcnVuY2F0ZWQgY29kZXBvaW50IHNlcXVlbmNlIGVuY291bnRlcmVkIGF0IHBvc2l0aW9uIFwiK2wpO289KDMxJmkpPDw2fDYzJnRbbCsxXSxsKz0yfWVsc2UgaWYoaT4+PjQ9PTE0KXtpZihsKzI+PXIpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBVVEYtOCBzdHJlYW06IFRydW5jYXRlZCBjb2RlcG9pbnQgc2VxdWVuY2UgZW5jb3VudGVyZWQgYXQgcG9zaXRpb24gXCIrbCk7bz0oMTUmaSk8PDEyfCg2MyZ0W2wrMV0pPDw2fDYzJnRbbCsyXSxsKz0zfWVsc2V7aWYoaT4+PjMhPTMwKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgVVRGLTggc3RyZWFtOiBBbiBpbnZhbGlkIGxlYWQgYnl0ZSB2YWx1ZSBlbmNvdW50ZXJlZCBhdCBwb3NpdGlvbiBcIitsKTtpZihsKzM+PXIpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBVVEYtOCBzdHJlYW06IFRydW5jYXRlZCBjb2RlcG9pbnQgc2VxdWVuY2UgZW5jb3VudGVyZWQgYXQgcG9zaXRpb24gXCIrbCk7bz0oNyZpKTw8MTh8KDYzJnRbbCsxXSk8PDEyfCg2MyZ0W2wrMl0pPDw2fDYzJnRbbCszXSxsKz00fWEuYXBwZW5kQ29kZVBvaW50KG8pfXJldHVybiBhLmdldE91dHB1dFN0cmluZygpfSxuLmNyZWF0ZU5hdGl2ZVRleHRFbmNvZGVyQW5kRGVjb2RlcklmQXZhaWxhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuISFyfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBUZXh0RW5jb2RlciYmKHI9bmV3IFRleHRFbmNvZGVyKFwidXRmLThcIiksbz1uZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiKSwhMCl9fSh0LlVURjh8fCh0LlVURjg9e30pKX0oZS5FbmNvZGluZ3x8KGUuRW5jb2Rpbmc9e30pKX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXtlLmNvbXByZXNzPWZ1bmN0aW9uKHQsbil7aWYodm9pZCAwPT09biYmKG49e30pLG51bGw9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImNvbXByZXNzOiB1bmRlZmluZWQgb3IgbnVsbCBpbnB1dCByZWNlaXZlZFwiKTt2YXIgcj1lLkNvbXByZXNzaW9uQ29tbW9uLmRldGVjdENvbXByZXNzaW9uU291cmNlRW5jb2RpbmcodCk7bj1lLk9iamVjdFRvb2xzLm92ZXJyaWRlKHtpbnB1dEVuY29kaW5nOnIsb3V0cHV0RW5jb2Rpbmc6XCJCeXRlQXJyYXlcIn0sbik7dmFyIG89KG5ldyBlLkNvbXByZXNzb3IpLmNvbXByZXNzQmxvY2sodCk7cmV0dXJuIGUuQ29tcHJlc3Npb25Db21tb24uZW5jb2RlQ29tcHJlc3NlZEJ5dGVzKG8sbi5vdXRwdXRFbmNvZGluZyl9LGUuZGVjb21wcmVzcz1mdW5jdGlvbih0LG4pe2lmKHZvaWQgMD09PW4mJihuPXt9KSxudWxsPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJkZWNvbXByZXNzOiB1bmRlZmluZWQgb3IgbnVsbCBpbnB1dCByZWNlaXZlZFwiKTtuPWUuT2JqZWN0VG9vbHMub3ZlcnJpZGUoe2lucHV0RW5jb2Rpbmc6XCJCeXRlQXJyYXlcIixvdXRwdXRFbmNvZGluZzpcIlN0cmluZ1wifSxuKTt2YXIgcj1lLkNvbXByZXNzaW9uQ29tbW9uLmRlY29kZUNvbXByZXNzZWRCeXRlcyh0LG4uaW5wdXRFbmNvZGluZyksbz0obmV3IGUuRGVjb21wcmVzc29yKS5kZWNvbXByZXNzQmxvY2socik7cmV0dXJuIGUuQ29tcHJlc3Npb25Db21tb24uZW5jb2RlRGVjb21wcmVzc2VkQnl0ZXMobyxuLm91dHB1dEVuY29kaW5nKX0sZS5jb21wcmVzc0FzeW5jPWZ1bmN0aW9uKHQsbixyKXt2YXIgbztudWxsPT1yJiYocj1mdW5jdGlvbigpe30pO3RyeXtvPWUuQ29tcHJlc3Npb25Db21tb24uZGV0ZWN0Q29tcHJlc3Npb25Tb3VyY2VFbmNvZGluZyh0KX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKHZvaWQgMCxlKX1uPWUuT2JqZWN0VG9vbHMub3ZlcnJpZGUoe2lucHV0RW5jb2Rpbmc6byxvdXRwdXRFbmNvZGluZzpcIkJ5dGVBcnJheVwiLHVzZVdlYldvcmtlcjohMCxibG9ja1NpemU6NjU1MzZ9LG4pLGUuZW5xdWV1ZUltbWVkaWF0ZSgoZnVuY3Rpb24oKXtuLnVzZVdlYldvcmtlciYmZS5XZWJXb3JrZXIuY3JlYXRlR2xvYmFsV29ya2VySWZOZWVkZWQoKT9lLldlYldvcmtlci5jb21wcmVzc0FzeW5jKHQsbixyKTplLkFzeW5jQ29tcHJlc3Nvci5jb21wcmVzc0FzeW5jKHQsbixyKX0pKX0sZS5kZWNvbXByZXNzQXN5bmM9ZnVuY3Rpb24odCxuLHIpe2lmKG51bGw9PXImJihyPWZ1bmN0aW9uKCl7fSksbnVsbCE9dCl7bj1lLk9iamVjdFRvb2xzLm92ZXJyaWRlKHtpbnB1dEVuY29kaW5nOlwiQnl0ZUFycmF5XCIsb3V0cHV0RW5jb2Rpbmc6XCJTdHJpbmdcIix1c2VXZWJXb3JrZXI6ITAsYmxvY2tTaXplOjY1NTM2fSxuKTt2YXIgbz1lLkJ1ZmZlclRvb2xzLmNvbnZlcnRUb1VpbnQ4QXJyYXlJZk5lZWRlZCh0KTtlLkV2ZW50TG9vcC5lbnF1ZXVlSW1tZWRpYXRlKChmdW5jdGlvbigpe24udXNlV2ViV29ya2VyJiZlLldlYldvcmtlci5jcmVhdGVHbG9iYWxXb3JrZXJJZk5lZWRlZCgpP2UuV2ViV29ya2VyLmRlY29tcHJlc3NBc3luYyhvLG4scik6ZS5Bc3luY0RlY29tcHJlc3Nvci5kZWNvbXByZXNzQXN5bmModCxuLHIpfSkpfWVsc2Ugcih2b2lkIDAsbmV3IFR5cGVFcnJvcihcImRlY29tcHJlc3NBc3luYzogdW5kZWZpbmVkIG9yIG51bGwgaW5wdXQgcmVjZWl2ZWRcIikpfSxlLmNyZWF0ZUNvbXByZXNzaW9uU3RyZWFtPWZ1bmN0aW9uKCl7cmV0dXJuIGUuQXN5bmNDb21wcmVzc29yLmNyZWF0ZUNvbXByZXNzaW9uU3RyZWFtKCl9LGUuY3JlYXRlRGVjb21wcmVzc2lvblN0cmVhbT1mdW5jdGlvbigpe3JldHVybiBlLkFzeW5jRGVjb21wcmVzc29yLmNyZWF0ZURlY29tcHJlc3Npb25TdHJlYW0oKX0sZS5lbmNvZGVVVEY4PWZ1bmN0aW9uKHQpe3JldHVybiBlLkVuY29kaW5nLlVURjguZW5jb2RlKHQpfSxlLmRlY29kZVVURjg9ZnVuY3Rpb24odCl7cmV0dXJuIGUuRW5jb2RpbmcuVVRGOC5kZWNvZGUodCl9LGUuZW5jb2RlQmFzZTY0PWZ1bmN0aW9uKHQpe3JldHVybiBlLkVuY29kaW5nLkJhc2U2NC5lbmNvZGUodCl9LGUuZGVjb2RlQmFzZTY0PWZ1bmN0aW9uKHQpe3JldHVybiBlLkVuY29kaW5nLkJhc2U2NC5kZWNvZGUodCl9LGUuZW5jb2RlQmluYXJ5U3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBlLkVuY29kaW5nLkJpbmFyeVN0cmluZy5lbmNvZGUodCl9LGUuZGVjb2RlQmluYXJ5U3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBlLkVuY29kaW5nLkJpbmFyeVN0cmluZy5kZWNvZGUodCl9LGUuZW5jb2RlU3RvcmFnZUJpbmFyeVN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gZS5FbmNvZGluZy5TdG9yYWdlQmluYXJ5U3RyaW5nLmVuY29kZSh0KX0sZS5kZWNvZGVTdG9yYWdlQmluYXJ5U3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBlLkVuY29kaW5nLlN0b3JhZ2VCaW5hcnlTdHJpbmcuZGVjb2RlKHQpfX0ob3x8KG89e30pKX0sMzc0OihlLHQsbik9Pntjb25zdHtBYm9ydEVycm9yOnIsY29kZXM6b309bigxNDEpLHtpc05vZGVTdHJlYW06aSxpc1dlYlN0cmVhbTphLGtDb250cm9sbGVyRXJyb3JGdW5jdGlvbjpsfT1uKDEzMikscz1uKDg2KSx7RVJSX0lOVkFMSURfQVJHX1RZUEU6Y309bztlLmV4cG9ydHMuYWRkQWJvcnRTaWduYWw9ZnVuY3Rpb24odCxuKXtpZigoKGUsdCk9PntpZihcIm9iamVjdFwiIT10eXBlb2YgZXx8IShcImFib3J0ZWRcImluIGUpKXRocm93IG5ldyBjKFwic2lnbmFsXCIsXCJBYm9ydFNpZ25hbFwiLGUpfSkodCksIWkobikmJiFhKG4pKXRocm93IG5ldyBjKFwic3RyZWFtXCIsW1wiUmVhZGFibGVTdHJlYW1cIixcIldyaXRhYmxlU3RyZWFtXCIsXCJTdHJlYW1cIl0sbik7cmV0dXJuIGUuZXhwb3J0cy5hZGRBYm9ydFNpZ25hbE5vVmFsaWRhdGUodCxuKX0sZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZT1mdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiBlfHwhKFwiYWJvcnRlZFwiaW4gZSkpcmV0dXJuIHQ7Y29uc3Qgbj1pKHQpPygpPT57dC5kZXN0cm95KG5ldyByKHZvaWQgMCx7Y2F1c2U6ZS5yZWFzb259KSl9OigpPT57dFtsXShuZXcgcih2b2lkIDAse2NhdXNlOmUucmVhc29ufSkpfTtyZXR1cm4gZS5hYm9ydGVkP24oKTooZS5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIixuKSxzKHQsKCgpPT5lLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLG4pKSkpLHR9fSw2MTY6KGUsdCxuKT0+e2NvbnN0e1N0cmluZ1Byb3RvdHlwZVNsaWNlOnIsU3ltYm9sSXRlcmF0b3I6byxUeXBlZEFycmF5UHJvdG90eXBlU2V0OmksVWludDhBcnJheTphfT1uKDE5MSkse0J1ZmZlcjpsfT1uKDQ4NSkse2luc3BlY3Q6c309big3NzUpO2UuZXhwb3J0cz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cHVzaChlKXtjb25zdCB0PXtkYXRhOmUsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PXQ6dGhpcy5oZWFkPXQsdGhpcy50YWlsPXQsKyt0aGlzLmxlbmd0aH11bnNoaWZ0KGUpe2NvbnN0IHQ9e2RhdGE6ZSxuZXh0OnRoaXMuaGVhZH07MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPXQpLHRoaXMuaGVhZD10LCsrdGhpcy5sZW5ndGh9c2hpZnQoKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuO2NvbnN0IGU9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIDE9PT10aGlzLmxlbmd0aD90aGlzLmhlYWQ9dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkPXRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsZX1jbGVhcigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfWpvaW4oZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVyblwiXCI7bGV0IHQ9dGhpcy5oZWFkLG49XCJcIit0LmRhdGE7Zm9yKDtudWxsIT09KHQ9dC5uZXh0KTspbis9ZSt0LmRhdGE7cmV0dXJuIG59Y29uY2F0KGUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gbC5hbGxvYygwKTtjb25zdCB0PWwuYWxsb2NVbnNhZmUoZT4+PjApO2xldCBuPXRoaXMuaGVhZCxyPTA7Zm9yKDtuOylpKHQsbi5kYXRhLHIpLHIrPW4uZGF0YS5sZW5ndGgsbj1uLm5leHQ7cmV0dXJuIHR9Y29uc3VtZShlLHQpe2NvbnN0IG49dGhpcy5oZWFkLmRhdGE7aWYoZTxuLmxlbmd0aCl7Y29uc3QgdD1uLnNsaWNlKDAsZSk7cmV0dXJuIHRoaXMuaGVhZC5kYXRhPW4uc2xpY2UoZSksdH1yZXR1cm4gZT09PW4ubGVuZ3RoP3RoaXMuc2hpZnQoKTp0P3RoaXMuX2dldFN0cmluZyhlKTp0aGlzLl9nZXRCdWZmZXIoZSl9Zmlyc3QoKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9KltvXSgpe2ZvcihsZXQgZT10aGlzLmhlYWQ7ZTtlPWUubmV4dCl5aWVsZCBlLmRhdGF9X2dldFN0cmluZyhlKXtsZXQgdD1cIlwiLG49dGhpcy5oZWFkLG89MDtkb3tjb25zdCBpPW4uZGF0YTtpZighKGU+aS5sZW5ndGgpKXtlPT09aS5sZW5ndGg/KHQrPWksKytvLG4ubmV4dD90aGlzLmhlYWQ9bi5uZXh0OnRoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCk6KHQrPXIoaSwwLGUpLHRoaXMuaGVhZD1uLG4uZGF0YT1yKGksZSkpO2JyZWFrfXQrPWksZS09aS5sZW5ndGgsKytvfXdoaWxlKG51bGwhPT0obj1uLm5leHQpKTtyZXR1cm4gdGhpcy5sZW5ndGgtPW8sdH1fZ2V0QnVmZmVyKGUpe2NvbnN0IHQ9bC5hbGxvY1Vuc2FmZShlKSxuPWU7bGV0IHI9dGhpcy5oZWFkLG89MDtkb3tjb25zdCBsPXIuZGF0YTtpZighKGU+bC5sZW5ndGgpKXtlPT09bC5sZW5ndGg/KGkodCxsLG4tZSksKytvLHIubmV4dD90aGlzLmhlYWQ9ci5uZXh0OnRoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCk6KGkodCxuZXcgYShsLmJ1ZmZlcixsLmJ5dGVPZmZzZXQsZSksbi1lKSx0aGlzLmhlYWQ9cixyLmRhdGE9bC5zbGljZShlKSk7YnJlYWt9aSh0LGwsbi1lKSxlLT1sLmxlbmd0aCwrK299d2hpbGUobnVsbCE9PShyPXIubmV4dCkpO3JldHVybiB0aGlzLmxlbmd0aC09byx0fVtTeW1ib2wuZm9yKFwibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b21cIildKGUsdCl7cmV0dXJuIHModGhpcyx7Li4udCxkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KX19fSw4MTg6KGUsdCxuKT0+e2NvbnN0e3BpcGVsaW5lOnJ9PW4oNzU0KSxvPW4oMTgyKSx7ZGVzdHJveWVyOml9PW4oMjMwKSx7aXNOb2RlU3RyZWFtOmEsaXNSZWFkYWJsZTpsLGlzV3JpdGFibGU6cyxpc1dlYlN0cmVhbTpjLGlzVHJhbnNmb3JtU3RyZWFtOnUsaXNXcml0YWJsZVN0cmVhbTpmLGlzUmVhZGFibGVTdHJlYW06ZH09bigxMzIpLHtBYm9ydEVycm9yOnAsY29kZXM6e0VSUl9JTlZBTElEX0FSR19WQUxVRTpoLEVSUl9NSVNTSU5HX0FSR1M6Z319PW4oMTQxKSx2PW4oODYpO2UuZXhwb3J0cz1mdW5jdGlvbiguLi5lKXtpZigwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IGcoXCJzdHJlYW1zXCIpO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gby5mcm9tKGVbMF0pO2NvbnN0IHQ9Wy4uLmVdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGVbMF0mJihlWzBdPW8uZnJvbShlWzBdKSksXCJmdW5jdGlvblwiPT10eXBlb2YgZVtlLmxlbmd0aC0xXSl7Y29uc3QgdD1lLmxlbmd0aC0xO2VbdF09by5mcm9tKGVbdF0pfWZvcihsZXQgbj0wO248ZS5sZW5ndGg7KytuKWlmKGEoZVtuXSl8fGMoZVtuXSkpe2lmKG48ZS5sZW5ndGgtMSYmIShsKGVbbl0pfHxkKGVbbl0pfHx1KGVbbl0pKSl0aHJvdyBuZXcgaChgc3RyZWFtc1ske259XWAsdFtuXSxcIm11c3QgYmUgcmVhZGFibGVcIik7aWYobj4wJiYhKHMoZVtuXSl8fGYoZVtuXSl8fHUoZVtuXSkpKXRocm93IG5ldyBoKGBzdHJlYW1zWyR7bn1dYCx0W25dLFwibXVzdCBiZSB3cml0YWJsZVwiKX1sZXQgbixtLEMseSx3O2NvbnN0IGI9ZVswXSx4PXIoZSwoZnVuY3Rpb24oZSl7Y29uc3QgdD15O3k9bnVsbCx0P3QoZSk6ZT93LmRlc3Ryb3koZSk6T3x8X3x8dy5kZXN0cm95KCl9KSksXz0hIShzKGIpfHxmKGIpfHx1KGIpKSxPPSEhKGwoeCl8fGQoeCl8fHUoeCkpO2lmKHc9bmV3IG8oe3dyaXRhYmxlT2JqZWN0TW9kZTohKG51bGw9PWJ8fCFiLndyaXRhYmxlT2JqZWN0TW9kZSkscmVhZGFibGVPYmplY3RNb2RlOiEobnVsbD09eHx8IXgud3JpdGFibGVPYmplY3RNb2RlKSx3cml0YWJsZTpfLHJlYWRhYmxlOk99KSxfKXtpZihhKGIpKXcuX3dyaXRlPWZ1bmN0aW9uKGUsdCxyKXtiLndyaXRlKGUsdCk/cigpOm49cn0sdy5fZmluYWw9ZnVuY3Rpb24oZSl7Yi5lbmQoKSxtPWV9LGIub24oXCJkcmFpblwiLChmdW5jdGlvbigpe2lmKG4pe2NvbnN0IGU9bjtuPW51bGwsZSgpfX0pKTtlbHNlIGlmKGMoYikpe2NvbnN0IGU9KHUoYik/Yi53cml0YWJsZTpiKS5nZXRXcml0ZXIoKTt3Ll93cml0ZT1hc3luYyBmdW5jdGlvbih0LG4scil7dHJ5e2F3YWl0IGUucmVhZHksZS53cml0ZSh0KS5jYXRjaCgoKCk9Pnt9KSkscigpfWNhdGNoKGUpe3IoZSl9fSx3Ll9maW5hbD1hc3luYyBmdW5jdGlvbih0KXt0cnl7YXdhaXQgZS5yZWFkeSxlLmNsb3NlKCkuY2F0Y2goKCgpPT57fSkpLG09dH1jYXRjaChlKXt0KGUpfX19Y29uc3QgZT11KHgpP3gucmVhZGFibGU6eDt2KGUsKCgpPT57aWYobSl7Y29uc3QgZT1tO209bnVsbCxlKCl9fSkpfWlmKE8paWYoYSh4KSl4Lm9uKFwicmVhZGFibGVcIiwoZnVuY3Rpb24oKXtpZihDKXtjb25zdCBlPUM7Qz1udWxsLGUoKX19KSkseC5vbihcImVuZFwiLChmdW5jdGlvbigpe3cucHVzaChudWxsKX0pKSx3Ll9yZWFkPWZ1bmN0aW9uKCl7Zm9yKDs7KXtjb25zdCBlPXgucmVhZCgpO2lmKG51bGw9PT1lKXJldHVybiB2b2lkKEM9dy5fcmVhZCk7aWYoIXcucHVzaChlKSlyZXR1cm59fTtlbHNlIGlmKGMoeCkpe2NvbnN0IGU9KHUoeCk/eC5yZWFkYWJsZTp4KS5nZXRSZWFkZXIoKTt3Ll9yZWFkPWFzeW5jIGZ1bmN0aW9uKCl7Zm9yKDs7KXRyeXtjb25zdHt2YWx1ZTp0LGRvbmU6bn09YXdhaXQgZS5yZWFkKCk7aWYoIXcucHVzaCh0KSlyZXR1cm47aWYobilyZXR1cm4gdm9pZCB3LnB1c2gobnVsbCl9Y2F0Y2h7cmV0dXJufX19cmV0dXJuIHcuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSx0KXtlfHxudWxsPT09eXx8KGU9bmV3IHApLEM9bnVsbCxuPW51bGwsbT1udWxsLG51bGw9PT15P3QoZSk6KHk9dCxhKHgpJiZpKHgsZSkpfSx3fX0sMjMwOihlLHQsbik9Pntjb25zdCByPW4oNTMzKSx7YWdncmVnYXRlVHdvRXJyb3JzOm8sY29kZXM6e0VSUl9NVUxUSVBMRV9DQUxMQkFDSzppfSxBYm9ydEVycm9yOmF9PW4oMTQxKSx7U3ltYm9sOmx9PW4oMTkxKSx7a0Rlc3Ryb3llZDpzLGlzRGVzdHJveWVkOmMsaXNGaW5pc2hlZDp1LGlzU2VydmVyUmVxdWVzdDpmfT1uKDEzMiksZD1sKFwia0Rlc3Ryb3lcIikscD1sKFwia0NvbnN0cnVjdFwiKTtmdW5jdGlvbiBoKGUsdCxuKXtlJiYoZS5zdGFjayx0JiYhdC5lcnJvcmVkJiYodC5lcnJvcmVkPWUpLG4mJiFuLmVycm9yZWQmJihuLmVycm9yZWQ9ZSkpfWZ1bmN0aW9uIGcoZSx0LG4pe2xldCBvPSExO2Z1bmN0aW9uIGkodCl7aWYobylyZXR1cm47bz0hMDtjb25zdCBpPWUuX3JlYWRhYmxlU3RhdGUsYT1lLl93cml0YWJsZVN0YXRlO2godCxhLGkpLGEmJihhLmNsb3NlZD0hMCksaSYmKGkuY2xvc2VkPSEwKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiZuKHQpLHQ/ci5uZXh0VGljayh2LGUsdCk6ci5uZXh0VGljayhtLGUpfXRyeXtlLl9kZXN0cm95KHR8fG51bGwsaSl9Y2F0Y2godCl7aSh0KX19ZnVuY3Rpb24gdihlLHQpe0MoZSx0KSxtKGUpfWZ1bmN0aW9uIG0oZSl7Y29uc3QgdD1lLl9yZWFkYWJsZVN0YXRlLG49ZS5fd3JpdGFibGVTdGF0ZTtuJiYobi5jbG9zZUVtaXR0ZWQ9ITApLHQmJih0LmNsb3NlRW1pdHRlZD0hMCksKG51bGwhPW4mJm4uZW1pdENsb3NlfHxudWxsIT10JiZ0LmVtaXRDbG9zZSkmJmUuZW1pdChcImNsb3NlXCIpfWZ1bmN0aW9uIEMoZSx0KXtjb25zdCBuPWUuX3JlYWRhYmxlU3RhdGUscj1lLl93cml0YWJsZVN0YXRlO251bGwhPXImJnIuZXJyb3JFbWl0dGVkfHxudWxsIT1uJiZuLmVycm9yRW1pdHRlZHx8KHImJihyLmVycm9yRW1pdHRlZD0hMCksbiYmKG4uZXJyb3JFbWl0dGVkPSEwKSxlLmVtaXQoXCJlcnJvclwiLHQpKX1mdW5jdGlvbiB5KGUsdCxuKXtjb25zdCBvPWUuX3JlYWRhYmxlU3RhdGUsaT1lLl93cml0YWJsZVN0YXRlO2lmKG51bGwhPWkmJmkuZGVzdHJveWVkfHxudWxsIT1vJiZvLmRlc3Ryb3llZClyZXR1cm4gdGhpcztudWxsIT1vJiZvLmF1dG9EZXN0cm95fHxudWxsIT1pJiZpLmF1dG9EZXN0cm95P2UuZGVzdHJveSh0KTp0JiYodC5zdGFjayxpJiYhaS5lcnJvcmVkJiYoaS5lcnJvcmVkPXQpLG8mJiFvLmVycm9yZWQmJihvLmVycm9yZWQ9dCksbj9yLm5leHRUaWNrKEMsZSx0KTpDKGUsdCkpfWZ1bmN0aW9uIHcoZSl7bGV0IHQ9ITE7ZnVuY3Rpb24gbihuKXtpZih0KXJldHVybiB2b2lkIHkoZSxudWxsIT1uP246bmV3IGkpO3Q9ITA7Y29uc3Qgbz1lLl9yZWFkYWJsZVN0YXRlLGE9ZS5fd3JpdGFibGVTdGF0ZSxsPWF8fG87byYmKG8uY29uc3RydWN0ZWQ9ITApLGEmJihhLmNvbnN0cnVjdGVkPSEwKSxsLmRlc3Ryb3llZD9lLmVtaXQoZCxuKTpuP3koZSxuLCEwKTpyLm5leHRUaWNrKGIsZSl9dHJ5e2UuX2NvbnN0cnVjdCgoZT0+e3IubmV4dFRpY2sobixlKX0pKX1jYXRjaChlKXtyLm5leHRUaWNrKG4sZSl9fWZ1bmN0aW9uIGIoZSl7ZS5lbWl0KHApfWZ1bmN0aW9uIHgoZSl7cmV0dXJuKG51bGw9PWU/dm9pZCAwOmUuc2V0SGVhZGVyKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5hYm9ydH1mdW5jdGlvbiBfKGUpe2UuZW1pdChcImNsb3NlXCIpfWZ1bmN0aW9uIE8oZSx0KXtlLmVtaXQoXCJlcnJvclwiLHQpLHIubmV4dFRpY2soXyxlKX1lLmV4cG9ydHM9e2NvbnN0cnVjdDpmdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUuX2NvbnN0cnVjdClyZXR1cm47Y29uc3Qgbj1lLl9yZWFkYWJsZVN0YXRlLG89ZS5fd3JpdGFibGVTdGF0ZTtuJiYobi5jb25zdHJ1Y3RlZD0hMSksbyYmKG8uY29uc3RydWN0ZWQ9ITEpLGUub25jZShwLHQpLGUubGlzdGVuZXJDb3VudChwKT4xfHxyLm5leHRUaWNrKHcsZSl9LGRlc3Ryb3llcjpmdW5jdGlvbihlLHQpe2UmJiFjKGUpJiYodHx8dShlKXx8KHQ9bmV3IGEpLGYoZSk/KGUuc29ja2V0PW51bGwsZS5kZXN0cm95KHQpKTp4KGUpP2UuYWJvcnQoKTp4KGUucmVxKT9lLnJlcS5hYm9ydCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZGVzdHJveT9lLmRlc3Ryb3kodCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZS5jbG9zZT9lLmNsb3NlKCk6dD9yLm5leHRUaWNrKE8sZSx0KTpyLm5leHRUaWNrKF8sZSksZS5kZXN0cm95ZWR8fChlW3NdPSEwKSl9LGRlc3Ryb3k6ZnVuY3Rpb24oZSx0KXtjb25zdCBuPXRoaXMuX3JlYWRhYmxlU3RhdGUscj10aGlzLl93cml0YWJsZVN0YXRlLGk9cnx8bjtyZXR1cm4gbnVsbCE9ciYmci5kZXN0cm95ZWR8fG51bGwhPW4mJm4uZGVzdHJveWVkPyhcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZ0KCksdGhpcyk6KGgoZSxyLG4pLHImJihyLmRlc3Ryb3llZD0hMCksbiYmKG4uZGVzdHJveWVkPSEwKSxpLmNvbnN0cnVjdGVkP2codGhpcyxlLHQpOnRoaXMub25jZShkLChmdW5jdGlvbihuKXtnKHRoaXMsbyhuLGUpLHQpfSkpLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24oKXtjb25zdCBlPXRoaXMuX3JlYWRhYmxlU3RhdGUsdD10aGlzLl93cml0YWJsZVN0YXRlO2UmJihlLmNvbnN0cnVjdGVkPSEwLGUuY2xvc2VkPSExLGUuY2xvc2VFbWl0dGVkPSExLGUuZGVzdHJveWVkPSExLGUuZXJyb3JlZD1udWxsLGUuZXJyb3JFbWl0dGVkPSExLGUucmVhZGluZz0hMSxlLmVuZGVkPSExPT09ZS5yZWFkYWJsZSxlLmVuZEVtaXR0ZWQ9ITE9PT1lLnJlYWRhYmxlKSx0JiYodC5jb25zdHJ1Y3RlZD0hMCx0LmRlc3Ryb3llZD0hMSx0LmNsb3NlZD0hMSx0LmNsb3NlRW1pdHRlZD0hMSx0LmVycm9yZWQ9bnVsbCx0LmVycm9yRW1pdHRlZD0hMSx0LmZpbmFsQ2FsbGVkPSExLHQucHJlZmluaXNoZWQ9ITEsdC5lbmRlZD0hMT09PXQud3JpdGFibGUsdC5lbmRpbmc9ITE9PT10LndyaXRhYmxlLHQuZmluaXNoZWQ9ITE9PT10LndyaXRhYmxlKX0sZXJyb3JPckRlc3Ryb3k6eX19LDE4MjooZSx0LG4pPT57Y29uc3R7T2JqZWN0RGVmaW5lUHJvcGVydGllczpyLE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcjpvLE9iamVjdEtleXM6aSxPYmplY3RTZXRQcm90b3R5cGVPZjphfT1uKDE5MSk7ZS5leHBvcnRzPWM7Y29uc3QgbD1uKDg1OCkscz1uKDM3Myk7YShjLnByb3RvdHlwZSxsLnByb3RvdHlwZSksYShjLGwpO3tjb25zdCBlPWkocy5wcm90b3R5cGUpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtjb25zdCBuPWVbdF07Yy5wcm90b3R5cGVbbl18fChjLnByb3RvdHlwZVtuXT1zLnByb3RvdHlwZVtuXSl9fWZ1bmN0aW9uIGMoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgYykpcmV0dXJuIG5ldyBjKGUpO2wuY2FsbCh0aGlzLGUpLHMuY2FsbCh0aGlzLGUpLGU/KHRoaXMuYWxsb3dIYWxmT3Blbj0hMSE9PWUuYWxsb3dIYWxmT3BlbiwhMT09PWUucmVhZGFibGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSEwKSwhMT09PWUud3JpdGFibGUmJih0aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSEwLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITAsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMCkpOnRoaXMuYWxsb3dIYWxmT3Blbj0hMH1sZXQgdSxmO2Z1bmN0aW9uIGQoKXtyZXR1cm4gdm9pZCAwPT09dSYmKHU9e30pLHV9cihjLnByb3RvdHlwZSx7d3JpdGFibGU6e19fcHJvdG9fXzpudWxsLC4uLm8ocy5wcm90b3R5cGUsXCJ3cml0YWJsZVwiKX0sd3JpdGFibGVIaWdoV2F0ZXJNYXJrOntfX3Byb3RvX186bnVsbCwuLi5vKHMucHJvdG90eXBlLFwid3JpdGFibGVIaWdoV2F0ZXJNYXJrXCIpfSx3cml0YWJsZU9iamVjdE1vZGU6e19fcHJvdG9fXzpudWxsLC4uLm8ocy5wcm90b3R5cGUsXCJ3cml0YWJsZU9iamVjdE1vZGVcIil9LHdyaXRhYmxlQnVmZmVyOntfX3Byb3RvX186bnVsbCwuLi5vKHMucHJvdG90eXBlLFwid3JpdGFibGVCdWZmZXJcIil9LHdyaXRhYmxlTGVuZ3RoOntfX3Byb3RvX186bnVsbCwuLi5vKHMucHJvdG90eXBlLFwid3JpdGFibGVMZW5ndGhcIil9LHdyaXRhYmxlRmluaXNoZWQ6e19fcHJvdG9fXzpudWxsLC4uLm8ocy5wcm90b3R5cGUsXCJ3cml0YWJsZUZpbmlzaGVkXCIpfSx3cml0YWJsZUNvcmtlZDp7X19wcm90b19fOm51bGwsLi4ubyhzLnByb3RvdHlwZSxcIndyaXRhYmxlQ29ya2VkXCIpfSx3cml0YWJsZUVuZGVkOntfX3Byb3RvX186bnVsbCwuLi5vKHMucHJvdG90eXBlLFwid3JpdGFibGVFbmRlZFwiKX0sd3JpdGFibGVOZWVkRHJhaW46e19fcHJvdG9fXzpudWxsLC4uLm8ocy5wcm90b3R5cGUsXCJ3cml0YWJsZU5lZWREcmFpblwiKX0sZGVzdHJveWVkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQoZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPWUsdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ZSl9fX0pLGMuZnJvbVdlYj1mdW5jdGlvbihlLHQpe3JldHVybiBkKCkubmV3U3RyZWFtRHVwbGV4RnJvbVJlYWRhYmxlV3JpdGFibGVQYWlyKGUsdCl9LGMudG9XZWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGQoKS5uZXdSZWFkYWJsZVdyaXRhYmxlUGFpckZyb21EdXBsZXgoZSl9LGMuZnJvbT1mdW5jdGlvbihlKXtyZXR1cm4gZnx8KGY9big3NDkpKSxmKGUsXCJib2R5XCIpfX0sNzQ5OihlLHQsbik9Pntjb25zdCByPW4oNTMzKSxvPW4oNDg1KSx7aXNSZWFkYWJsZTppLGlzV3JpdGFibGU6YSxpc0l0ZXJhYmxlOmwsaXNOb2RlU3RyZWFtOnMsaXNSZWFkYWJsZU5vZGVTdHJlYW06Yyxpc1dyaXRhYmxlTm9kZVN0cmVhbTp1LGlzRHVwbGV4Tm9kZVN0cmVhbTpmfT1uKDEzMiksZD1uKDg2KSx7QWJvcnRFcnJvcjpwLGNvZGVzOntFUlJfSU5WQUxJRF9BUkdfVFlQRTpoLEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRTpnfX09bigxNDEpLHtkZXN0cm95ZXI6dn09bigyMzApLG09bigxODIpLEM9big4NTgpLHtjcmVhdGVEZWZlcnJlZFByb21pc2U6eX09big3NzUpLHc9big5MTMpLGI9Z2xvYmFsVGhpcy5CbG9ifHxvLkJsb2IseD12b2lkIDAhPT1iP2Z1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgYn06ZnVuY3Rpb24oZSl7cmV0dXJuITF9LF89Z2xvYmFsVGhpcy5BYm9ydENvbnRyb2xsZXJ8fG4oODc2KS5BYm9ydENvbnRyb2xsZXIse0Z1bmN0aW9uUHJvdG90eXBlQ2FsbDpPfT1uKDE5MSk7Y2xhc3MgTCBleHRlbmRzIG17Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksITE9PT0obnVsbD09ZT92b2lkIDA6ZS5yZWFkYWJsZSkmJih0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSEwKSwhMT09PShudWxsPT1lP3ZvaWQgMDplLndyaXRhYmxlKSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUud3JpdGFibGU9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITAsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMCx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSEwKX19ZnVuY3Rpb24gRShlKXtjb25zdCB0PWUucmVhZGFibGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUucmVhZGFibGUucmVhZD9DLndyYXAoZS5yZWFkYWJsZSk6ZS5yZWFkYWJsZSxuPWUud3JpdGFibGU7bGV0IHIsbyxsLHMsYyx1PSEhaSh0KSxmPSEhYShuKTtmdW5jdGlvbiBoKGUpe2NvbnN0IHQ9cztzPW51bGwsdD90KGUpOmUmJmMuZGVzdHJveShlKX1yZXR1cm4gYz1uZXcgTCh7cmVhZGFibGVPYmplY3RNb2RlOiEobnVsbD09dHx8IXQucmVhZGFibGVPYmplY3RNb2RlKSx3cml0YWJsZU9iamVjdE1vZGU6IShudWxsPT1ufHwhbi53cml0YWJsZU9iamVjdE1vZGUpLHJlYWRhYmxlOnUsd3JpdGFibGU6Zn0pLGYmJihkKG4sKGU9PntmPSExLGUmJnYodCxlKSxoKGUpfSkpLGMuX3dyaXRlPWZ1bmN0aW9uKGUsdCxvKXtuLndyaXRlKGUsdCk/bygpOnI9b30sYy5fZmluYWw9ZnVuY3Rpb24oZSl7bi5lbmQoKSxvPWV9LG4ub24oXCJkcmFpblwiLChmdW5jdGlvbigpe2lmKHIpe2NvbnN0IGU9cjtyPW51bGwsZSgpfX0pKSxuLm9uKFwiZmluaXNoXCIsKGZ1bmN0aW9uKCl7aWYobyl7Y29uc3QgZT1vO289bnVsbCxlKCl9fSkpKSx1JiYoZCh0LChlPT57dT0hMSxlJiZ2KHQsZSksaChlKX0pKSx0Lm9uKFwicmVhZGFibGVcIiwoZnVuY3Rpb24oKXtpZihsKXtjb25zdCBlPWw7bD1udWxsLGUoKX19KSksdC5vbihcImVuZFwiLChmdW5jdGlvbigpe2MucHVzaChudWxsKX0pKSxjLl9yZWFkPWZ1bmN0aW9uKCl7Zm9yKDs7KXtjb25zdCBlPXQucmVhZCgpO2lmKG51bGw9PT1lKXJldHVybiB2b2lkKGw9Yy5fcmVhZCk7aWYoIWMucHVzaChlKSlyZXR1cm59fSksYy5fZGVzdHJveT1mdW5jdGlvbihlLGkpe2V8fG51bGw9PT1zfHwoZT1uZXcgcCksbD1udWxsLHI9bnVsbCxvPW51bGwsbnVsbD09PXM/aShlKToocz1pLHYobixlKSx2KHQsZSkpfSxjfWUuZXhwb3J0cz1mdW5jdGlvbiBlKHQsbil7aWYoZih0KSlyZXR1cm4gdDtpZihjKHQpKXJldHVybiBFKHtyZWFkYWJsZTp0fSk7aWYodSh0KSlyZXR1cm4gRSh7d3JpdGFibGU6dH0pO2lmKHModCkpcmV0dXJuIEUoe3dyaXRhYmxlOiExLHJlYWRhYmxlOiExfSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdCl7Y29uc3R7dmFsdWU6ZSx3cml0ZTpvLGZpbmFsOmksZGVzdHJveTphfT1mdW5jdGlvbihlKXtsZXR7cHJvbWlzZTp0LHJlc29sdmU6bn09eSgpO2NvbnN0IG89bmV3IF8saT1vLnNpZ25hbCxhPWUoYXN5bmMgZnVuY3Rpb24qKCl7Zm9yKDs7KXtjb25zdCBlPXQ7dD1udWxsO2NvbnN0e2NodW5rOm8sZG9uZTphLGNiOmx9PWF3YWl0IGU7aWYoci5uZXh0VGljayhsKSxhKXJldHVybjtpZihpLmFib3J0ZWQpdGhyb3cgbmV3IHAodm9pZCAwLHtjYXVzZTppLnJlYXNvbn0pOyh7cHJvbWlzZTp0LHJlc29sdmU6bn09eSgpKSx5aWVsZCBvfX0oKSx7c2lnbmFsOml9KTtyZXR1cm57dmFsdWU6YSx3cml0ZShlLHQscil7Y29uc3Qgbz1uO249bnVsbCxvKHtjaHVuazplLGRvbmU6ITEsY2I6cn0pfSxmaW5hbChlKXtjb25zdCB0PW47bj1udWxsLHQoe2RvbmU6ITAsY2I6ZX0pfSxkZXN0cm95KGUsdCl7by5hYm9ydCgpLHQoZSl9fX0odCk7aWYobChlKSlyZXR1cm4gdyhMLGUse29iamVjdE1vZGU6ITAsd3JpdGU6byxmaW5hbDppLGRlc3Ryb3k6YX0pO2NvbnN0IHM9bnVsbD09ZT92b2lkIDA6ZS50aGVuO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHMpe2xldCB0O2NvbnN0IG49TyhzLGUsKGU9PntpZihudWxsIT1lKXRocm93IG5ldyBnKFwibnVsbHlcIixcImJvZHlcIixlKX0pLChlPT57dih0LGUpfSkpO3JldHVybiB0PW5ldyBMKHtvYmplY3RNb2RlOiEwLHJlYWRhYmxlOiExLHdyaXRlOm8sZmluYWwoZSl7aSgoYXN5bmMoKT0+e3RyeXthd2FpdCBuLHIubmV4dFRpY2soZSxudWxsKX1jYXRjaCh0KXtyLm5leHRUaWNrKGUsdCl9fSkpfSxkZXN0cm95OmF9KX10aHJvdyBuZXcgZyhcIkl0ZXJhYmxlLCBBc3luY0l0ZXJhYmxlIG9yIEFzeW5jRnVuY3Rpb25cIixuLGUpfWlmKHgodCkpcmV0dXJuIGUodC5hcnJheUJ1ZmZlcigpKTtpZihsKHQpKXJldHVybiB3KEwsdCx7b2JqZWN0TW9kZTohMCx3cml0YWJsZTohMX0pO2lmKFwib2JqZWN0XCI9PXR5cGVvZihudWxsPT10P3ZvaWQgMDp0LndyaXRhYmxlKXx8XCJvYmplY3RcIj09dHlwZW9mKG51bGw9PXQ/dm9pZCAwOnQucmVhZGFibGUpKXJldHVybiBFKHtyZWFkYWJsZTpudWxsIT10JiZ0LnJlYWRhYmxlP2MobnVsbD09dD92b2lkIDA6dC5yZWFkYWJsZSk/bnVsbD09dD92b2lkIDA6dC5yZWFkYWJsZTplKHQucmVhZGFibGUpOnZvaWQgMCx3cml0YWJsZTpudWxsIT10JiZ0LndyaXRhYmxlP3UobnVsbD09dD92b2lkIDA6dC53cml0YWJsZSk/bnVsbD09dD92b2lkIDA6dC53cml0YWJsZTplKHQud3JpdGFibGUpOnZvaWQgMH0pO2NvbnN0IG89bnVsbD09dD92b2lkIDA6dC50aGVuO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG8pe2xldCBlO3JldHVybiBPKG8sdCwodD0+e251bGwhPXQmJmUucHVzaCh0KSxlLnB1c2gobnVsbCl9KSwodD0+e3YoZSx0KX0pKSxlPW5ldyBMKHtvYmplY3RNb2RlOiEwLHdyaXRhYmxlOiExLHJlYWQoKXt9fSl9dGhyb3cgbmV3IGgobixbXCJCbG9iXCIsXCJSZWFkYWJsZVN0cmVhbVwiLFwiV3JpdGFibGVTdHJlYW1cIixcIlN0cmVhbVwiLFwiSXRlcmFibGVcIixcIkFzeW5jSXRlcmFibGVcIixcIkZ1bmN0aW9uXCIsXCJ7IHJlYWRhYmxlLCB3cml0YWJsZSB9IHBhaXJcIixcIlByb21pc2VcIl0sdCl9fSw4NjooZSx0LG4pPT57Y29uc3Qgcj1uKDUzMykse0Fib3J0RXJyb3I6byxjb2RlczppfT1uKDE0MSkse0VSUl9JTlZBTElEX0FSR19UWVBFOmEsRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U6bH09aSx7a0VtcHR5T2JqZWN0OnMsb25jZTpjfT1uKDc3NSkse3ZhbGlkYXRlQWJvcnRTaWduYWw6dSx2YWxpZGF0ZUZ1bmN0aW9uOmYsdmFsaWRhdGVPYmplY3Q6ZCx2YWxpZGF0ZUJvb2xlYW46cH09big5MDQpLHtQcm9taXNlOmgsUHJvbWlzZVByb3RvdHlwZVRoZW46Z309bigxOTEpLHtpc0Nsb3NlZDp2LGlzUmVhZGFibGU6bSxpc1JlYWRhYmxlTm9kZVN0cmVhbTpDLGlzUmVhZGFibGVTdHJlYW06eSxpc1JlYWRhYmxlRmluaXNoZWQ6dyxpc1JlYWRhYmxlRXJyb3JlZDpiLGlzV3JpdGFibGU6eCxpc1dyaXRhYmxlTm9kZVN0cmVhbTpfLGlzV3JpdGFibGVTdHJlYW06Tyxpc1dyaXRhYmxlRmluaXNoZWQ6TCxpc1dyaXRhYmxlRXJyb3JlZDpFLGlzTm9kZVN0cmVhbTpTLHdpbGxFbWl0Q2xvc2U6aixrSXNDbG9zZWRQcm9taXNlOk19PW4oMTMyKSxrPSgpPT57fTtmdW5jdGlvbiBSKGUsdCxuKXt2YXIgaSxwO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoPyhuPXQsdD1zKTpudWxsPT10P3Q9czpkKHQsXCJvcHRpb25zXCIpLGYobixcImNhbGxiYWNrXCIpLHUodC5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKSxuPWMobikseShlKXx8TyhlKSlyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe2xldCBpPSExLGE9aztpZih0LnNpZ25hbClpZihhPSgpPT57aT0hMCxuLmNhbGwoZSxuZXcgbyh2b2lkIDAse2NhdXNlOnQuc2lnbmFsLnJlYXNvbn0pKX0sdC5zaWduYWwuYWJvcnRlZClyLm5leHRUaWNrKGEpO2Vsc2V7Y29uc3Qgcj1uO249YygoKC4uLm4pPT57dC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsYSksci5hcHBseShlLG4pfSkpLHQuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGEpfWNvbnN0IGw9KC4uLnQpPT57aXx8ci5uZXh0VGljaygoKCk9Pm4uYXBwbHkoZSx0KSkpfTtyZXR1cm4gZyhlW01dLnByb21pc2UsbCxsKSxrfShlLHQsbik7aWYoIVMoZSkpdGhyb3cgbmV3IGEoXCJzdHJlYW1cIixbXCJSZWFkYWJsZVN0cmVhbVwiLFwiV3JpdGFibGVTdHJlYW1cIixcIlN0cmVhbVwiXSxlKTtjb25zdCBoPW51bGwhPT0oaT10LnJlYWRhYmxlKSYmdm9pZCAwIT09aT9pOkMoZSksUj1udWxsIT09KHA9dC53cml0YWJsZSkmJnZvaWQgMCE9PXA/cDpfKGUpLFA9ZS5fd3JpdGFibGVTdGF0ZSxJPWUuX3JlYWRhYmxlU3RhdGUsQT0oKT0+e2Uud3JpdGFibGV8fEIoKX07bGV0IFQ9aihlKSYmQyhlKT09PWgmJl8oZSk9PT1SLEg9TChlLCExKTtjb25zdCBCPSgpPT57SD0hMCxlLmRlc3Ryb3llZCYmKFQ9ITEpLCghVHx8ZS5yZWFkYWJsZSYmIWgpJiYoaCYmIVZ8fG4uY2FsbChlKSl9O2xldCBWPXcoZSwhMSk7Y29uc3QgRD0oKT0+e1Y9ITAsZS5kZXN0cm95ZWQmJihUPSExKSwoIVR8fGUud3JpdGFibGUmJiFSKSYmKFImJiFIfHxuLmNhbGwoZSkpfSxaPXQ9PntuLmNhbGwoZSx0KX07bGV0ICQ9dihlKTtjb25zdCBOPSgpPT57JD0hMDtjb25zdCB0PUUoZSl8fGIoZSk7cmV0dXJuIHQmJlwiYm9vbGVhblwiIT10eXBlb2YgdD9uLmNhbGwoZSx0KTpoJiYhViYmQyhlLCEwKSYmIXcoZSwhMSk/bi5jYWxsKGUsbmV3IGwpOiFSfHxIfHxMKGUsITEpP3ZvaWQgbi5jYWxsKGUpOm4uY2FsbChlLG5ldyBsKX0sRj0oKT0+eyQ9ITA7Y29uc3QgdD1FKGUpfHxiKGUpO2lmKHQmJlwiYm9vbGVhblwiIT10eXBlb2YgdClyZXR1cm4gbi5jYWxsKGUsdCk7bi5jYWxsKGUpfSxVPSgpPT57ZS5yZXEub24oXCJmaW5pc2hcIixCKX07IWZ1bmN0aW9uKGUpe3JldHVybiBlLnNldEhlYWRlciYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5hYm9ydH0oZSk/UiYmIVAmJihlLm9uKFwiZW5kXCIsQSksZS5vbihcImNsb3NlXCIsQSkpOihlLm9uKFwiY29tcGxldGVcIixCKSxUfHxlLm9uKFwiYWJvcnRcIixOKSxlLnJlcT9VKCk6ZS5vbihcInJlcXVlc3RcIixVKSksVHx8XCJib29sZWFuXCIhPXR5cGVvZiBlLmFib3J0ZWR8fGUub24oXCJhYm9ydGVkXCIsTiksZS5vbihcImVuZFwiLEQpLGUub24oXCJmaW5pc2hcIixCKSwhMSE9PXQuZXJyb3ImJmUub24oXCJlcnJvclwiLFopLGUub24oXCJjbG9zZVwiLE4pLCQ/ci5uZXh0VGljayhOKTpudWxsIT1QJiZQLmVycm9yRW1pdHRlZHx8bnVsbCE9SSYmSS5lcnJvckVtaXR0ZWQ/VHx8ci5uZXh0VGljayhGKTooaHx8VCYmIW0oZSl8fCFIJiYhMSE9PXgoZSkpJiYoUnx8VCYmIXgoZSl8fCFWJiYhMSE9PW0oZSkpP0kmJmUucmVxJiZlLmFib3J0ZWQmJnIubmV4dFRpY2soRik6ci5uZXh0VGljayhGKTtjb25zdCBXPSgpPT57bj1rLGUucmVtb3ZlTGlzdGVuZXIoXCJhYm9ydGVkXCIsTiksZS5yZW1vdmVMaXN0ZW5lcihcImNvbXBsZXRlXCIsQiksZS5yZW1vdmVMaXN0ZW5lcihcImFib3J0XCIsTiksZS5yZW1vdmVMaXN0ZW5lcihcInJlcXVlc3RcIixVKSxlLnJlcSYmZS5yZXEucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIixCKSxlLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsQSksZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsQSksZS5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLEIpLGUucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixEKSxlLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixaKSxlLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixOKX07aWYodC5zaWduYWwmJiEkKXtjb25zdCBpPSgpPT57Y29uc3Qgcj1uO1coKSxyLmNhbGwoZSxuZXcgbyh2b2lkIDAse2NhdXNlOnQuc2lnbmFsLnJlYXNvbn0pKX07aWYodC5zaWduYWwuYWJvcnRlZClyLm5leHRUaWNrKGkpO2Vsc2V7Y29uc3Qgcj1uO249YygoKC4uLm4pPT57dC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsaSksci5hcHBseShlLG4pfSkpLHQuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGkpfX1yZXR1cm4gV31lLmV4cG9ydHM9UixlLmV4cG9ydHMuZmluaXNoZWQ9ZnVuY3Rpb24oZSx0KXt2YXIgbjtsZXQgcj0hMTtyZXR1cm4gbnVsbD09PXQmJih0PXMpLG51bGwhPT0obj10KSYmdm9pZCAwIT09biYmbi5jbGVhbnVwJiYocCh0LmNsZWFudXAsXCJjbGVhbnVwXCIpLHI9dC5jbGVhbnVwKSxuZXcgaCgoKG4sbyk9Pntjb25zdCBpPVIoZSx0LChlPT57ciYmaSgpLGU/byhlKTpuKCl9KSl9KSl9fSw5MTM6KGUsdCxuKT0+e2NvbnN0IHI9big1MzMpLHtQcm9taXNlUHJvdG90eXBlVGhlbjpvLFN5bWJvbEFzeW5jSXRlcmF0b3I6aSxTeW1ib2xJdGVyYXRvcjphfT1uKDE5MSkse0J1ZmZlcjpsfT1uKDQ4NSkse0VSUl9JTlZBTElEX0FSR19UWVBFOnMsRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUzpjfT1uKDE0MSkuY29kZXM7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtsZXQgdSxmO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgbClyZXR1cm4gbmV3IGUoe29iamVjdE1vZGU6ITAsLi4ubixyZWFkKCl7dGhpcy5wdXNoKHQpLHRoaXMucHVzaChudWxsKX19KTtpZih0JiZ0W2ldKWY9ITAsdT10W2ldKCk7ZWxzZXtpZighdHx8IXRbYV0pdGhyb3cgbmV3IHMoXCJpdGVyYWJsZVwiLFtcIkl0ZXJhYmxlXCJdLHQpO2Y9ITEsdT10W2FdKCl9Y29uc3QgZD1uZXcgZSh7b2JqZWN0TW9kZTohMCxoaWdoV2F0ZXJNYXJrOjEsLi4ubn0pO2xldCBwPSExO3JldHVybiBkLl9yZWFkPWZ1bmN0aW9uKCl7cHx8KHA9ITAsYXN5bmMgZnVuY3Rpb24oKXtmb3IoOzspe3RyeXtjb25zdHt2YWx1ZTplLGRvbmU6dH09Zj9hd2FpdCB1Lm5leHQoKTp1Lm5leHQoKTtpZih0KWQucHVzaChudWxsKTtlbHNle2NvbnN0IHQ9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS50aGVuP2F3YWl0IGU6ZTtpZihudWxsPT09dCl0aHJvdyBwPSExLG5ldyBjO2lmKGQucHVzaCh0KSljb250aW51ZTtwPSExfX1jYXRjaChlKXtkLmRlc3Ryb3koZSl9YnJlYWt9fSgpKX0sZC5fZGVzdHJveT1mdW5jdGlvbihlLHQpe28oYXN5bmMgZnVuY3Rpb24oZSl7Y29uc3QgdD1udWxsIT1lLG49XCJmdW5jdGlvblwiPT10eXBlb2YgdS50aHJvdztpZih0JiZuKXtjb25zdHt2YWx1ZTp0LGRvbmU6bn09YXdhaXQgdS50aHJvdyhlKTtpZihhd2FpdCB0LG4pcmV0dXJufWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHUucmV0dXJuKXtjb25zdHt2YWx1ZTplfT1hd2FpdCB1LnJldHVybigpO2F3YWl0IGV9fShlKSwoKCk9PnIubmV4dFRpY2sodCxlKSksKG49PnIubmV4dFRpY2sodCxufHxlKSkpfSxkfX0sMjAwOihlLHQsbik9Pntjb25zdHtBcnJheUlzQXJyYXk6cixPYmplY3RTZXRQcm90b3R5cGVPZjpvfT1uKDE5MSkse0V2ZW50RW1pdHRlcjppfT1uKDQ2NSk7ZnVuY3Rpb24gYShlKXtpLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBsKGUsdCxuKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gZS5wcmVwZW5kTGlzdGVuZXIodCxuKTtlLl9ldmVudHMmJmUuX2V2ZW50c1t0XT9yKGUuX2V2ZW50c1t0XSk/ZS5fZXZlbnRzW3RdLnVuc2hpZnQobik6ZS5fZXZlbnRzW3RdPVtuLGUuX2V2ZW50c1t0XV06ZS5vbih0LG4pfW8oYS5wcm90b3R5cGUsaS5wcm90b3R5cGUpLG8oYSxpKSxhLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj10aGlzO2Z1bmN0aW9uIHIodCl7ZS53cml0YWJsZSYmITE9PT1lLndyaXRlKHQpJiZuLnBhdXNlJiZuLnBhdXNlKCl9ZnVuY3Rpb24gbygpe24ucmVhZGFibGUmJm4ucmVzdW1lJiZuLnJlc3VtZSgpfW4ub24oXCJkYXRhXCIsciksZS5vbihcImRyYWluXCIsbyksZS5faXNTdGRpb3x8dCYmITE9PT10LmVuZHx8KG4ub24oXCJlbmRcIixzKSxuLm9uKFwiY2xvc2VcIixjKSk7bGV0IGE9ITE7ZnVuY3Rpb24gcygpe2F8fChhPSEwLGUuZW5kKCkpfWZ1bmN0aW9uIGMoKXthfHwoYT0hMCxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmRlc3Ryb3kmJmUuZGVzdHJveSgpKX1mdW5jdGlvbiB1KGUpe2YoKSwwPT09aS5saXN0ZW5lckNvdW50KHRoaXMsXCJlcnJvclwiKSYmdGhpcy5lbWl0KFwiZXJyb3JcIixlKX1mdW5jdGlvbiBmKCl7bi5yZW1vdmVMaXN0ZW5lcihcImRhdGFcIixyKSxlLnJlbW92ZUxpc3RlbmVyKFwiZHJhaW5cIixvKSxuLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIscyksbi5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsYyksbi5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsdSksZS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsdSksbi5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLGYpLG4ucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLGYpLGUucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLGYpfXJldHVybiBsKG4sXCJlcnJvclwiLHUpLGwoZSxcImVycm9yXCIsdSksbi5vbihcImVuZFwiLGYpLG4ub24oXCJjbG9zZVwiLGYpLGUub24oXCJjbG9zZVwiLGYpLGUuZW1pdChcInBpcGVcIixuKSxlfSxlLmV4cG9ydHM9e1N0cmVhbTphLHByZXBlbmRMaXN0ZW5lcjpsfX0sNTU0OihlLHQsbik9Pntjb25zdCByPWdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyfHxuKDg3NikuQWJvcnRDb250cm9sbGVyLHtjb2Rlczp7RVJSX0lOVkFMSURfQVJHX1ZBTFVFOm8sRVJSX0lOVkFMSURfQVJHX1RZUEU6aSxFUlJfTUlTU0lOR19BUkdTOmEsRVJSX09VVF9PRl9SQU5HRTpsfSxBYm9ydEVycm9yOnN9PW4oMTQxKSx7dmFsaWRhdGVBYm9ydFNpZ25hbDpjLHZhbGlkYXRlSW50ZWdlcjp1LHZhbGlkYXRlT2JqZWN0OmZ9PW4oOTA0KSxkPW4oMTkxKS5TeW1ib2woXCJrV2Vha1wiKSx7ZmluaXNoZWQ6cH09big4NiksaD1uKDgxOCkse2FkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZTpnfT1uKDM3NCkse2lzV3JpdGFibGU6dixpc05vZGVTdHJlYW06bX09bigxMzIpLHtBcnJheVByb3RvdHlwZVB1c2g6QyxNYXRoRmxvb3I6eSxOdW1iZXI6dyxOdW1iZXJJc05hTjpiLFByb21pc2U6eCxQcm9taXNlUmVqZWN0Ol8sUHJvbWlzZVByb3RvdHlwZVRoZW46TyxTeW1ib2w6TH09bigxOTEpLEU9TChcImtFbXB0eVwiKSxTPUwoXCJrRW9mXCIpO2Z1bmN0aW9uIGooZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBpKFwiZm5cIixbXCJGdW5jdGlvblwiLFwiQXN5bmNGdW5jdGlvblwiXSxlKTtudWxsIT10JiZmKHQsXCJvcHRpb25zXCIpLG51bGwhPShudWxsPT10P3ZvaWQgMDp0LnNpZ25hbCkmJmModC5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKTtsZXQgbj0xO3JldHVybiBudWxsIT0obnVsbD09dD92b2lkIDA6dC5jb25jdXJyZW5jeSkmJihuPXkodC5jb25jdXJyZW5jeSkpLHUobixcImNvbmN1cnJlbmN5XCIsMSksYXN5bmMgZnVuY3Rpb24qKCl7dmFyIG8saTtjb25zdCBhPW5ldyByLGw9dGhpcyxjPVtdLHU9YS5zaWduYWwsZj17c2lnbmFsOnV9LGQ9KCk9PmEuYWJvcnQoKTtsZXQgcCxoO251bGwhPXQmJm51bGwhPT0obz10LnNpZ25hbCkmJnZvaWQgMCE9PW8mJm8uYWJvcnRlZCYmZCgpLG51bGw9PXR8fG51bGw9PT0oaT10LnNpZ25hbCl8fHZvaWQgMD09PWl8fGkuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsZCk7bGV0IGc9ITE7ZnVuY3Rpb24gdigpe2c9ITB9IWFzeW5jIGZ1bmN0aW9uKCl7dHJ5e2ZvciBhd2FpdChsZXQgdCBvZiBsKXt2YXIgcjtpZihnKXJldHVybjtpZih1LmFib3J0ZWQpdGhyb3cgbmV3IHM7dHJ5e3Q9ZSh0LGYpfWNhdGNoKGUpe3Q9XyhlKX10IT09RSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mKG51bGw9PT0ocj10KXx8dm9pZCAwPT09cj92b2lkIDA6ci5jYXRjaCkmJnQuY2F0Y2godiksYy5wdXNoKHQpLHAmJihwKCkscD1udWxsKSwhZyYmYy5sZW5ndGgmJmMubGVuZ3RoPj1uJiZhd2FpdCBuZXcgeCgoZT0+e2g9ZX0pKSl9Yy5wdXNoKFMpfWNhdGNoKGUpe2NvbnN0IHQ9XyhlKTtPKHQsdm9pZCAwLHYpLGMucHVzaCh0KX1maW5hbGx5e3ZhciBvO2c9ITAscCYmKHAoKSxwPW51bGwpLG51bGw9PXR8fG51bGw9PT0obz10LnNpZ25hbCl8fHZvaWQgMD09PW98fG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsZCl9fSgpO3RyeXtmb3IoOzspe2Zvcig7Yy5sZW5ndGg+MDspe2NvbnN0IGU9YXdhaXQgY1swXTtpZihlPT09UylyZXR1cm47aWYodS5hYm9ydGVkKXRocm93IG5ldyBzO2UhPT1FJiYoeWllbGQgZSksYy5zaGlmdCgpLGgmJihoKCksaD1udWxsKX1hd2FpdCBuZXcgeCgoZT0+e3A9ZX0pKX19ZmluYWxseXthLmFib3J0KCksZz0hMCxoJiYoaCgpLGg9bnVsbCl9fS5jYWxsKHRoaXMpfWFzeW5jIGZ1bmN0aW9uIE0oZSx0PXZvaWQgMCl7Zm9yIGF3YWl0KGNvbnN0IG4gb2Ygay5jYWxsKHRoaXMsZSx0KSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBrKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgaShcImZuXCIsW1wiRnVuY3Rpb25cIixcIkFzeW5jRnVuY3Rpb25cIl0sZSk7cmV0dXJuIGouY2FsbCh0aGlzLChhc3luYyBmdW5jdGlvbih0LG4pe3JldHVybiBhd2FpdCBlKHQsbik/dDpFfSksdCl9Y2xhc3MgUiBleHRlbmRzIGF7Y29uc3RydWN0b3IoKXtzdXBlcihcInJlZHVjZVwiKSx0aGlzLm1lc3NhZ2U9XCJSZWR1Y2Ugb2YgYW4gZW1wdHkgc3RyZWFtIHJlcXVpcmVzIGFuIGluaXRpYWwgdmFsdWVcIn19ZnVuY3Rpb24gUChlKXtpZihlPXcoZSksYihlKSlyZXR1cm4gMDtpZihlPDApdGhyb3cgbmV3IGwoXCJudW1iZXJcIixcIj49IDBcIixlKTtyZXR1cm4gZX1lLmV4cG9ydHMuc3RyZWFtUmV0dXJuaW5nT3BlcmF0b3JzPXthc0luZGV4ZWRQYWlyczpmdW5jdGlvbihlPXZvaWQgMCl7cmV0dXJuIG51bGwhPWUmJmYoZSxcIm9wdGlvbnNcIiksbnVsbCE9KG51bGw9PWU/dm9pZCAwOmUuc2lnbmFsKSYmYyhlLnNpZ25hbCxcIm9wdGlvbnMuc2lnbmFsXCIpLGFzeW5jIGZ1bmN0aW9uKigpe2xldCB0PTA7Zm9yIGF3YWl0KGNvbnN0IHIgb2YgdGhpcyl7dmFyIG47aWYobnVsbCE9ZSYmbnVsbCE9PShuPWUuc2lnbmFsKSYmdm9pZCAwIT09biYmbi5hYm9ydGVkKXRocm93IG5ldyBzKHtjYXVzZTplLnNpZ25hbC5yZWFzb259KTt5aWVsZFt0Kysscl19fS5jYWxsKHRoaXMpfSxkcm9wOmZ1bmN0aW9uKGUsdD12b2lkIDApe3JldHVybiBudWxsIT10JiZmKHQsXCJvcHRpb25zXCIpLG51bGwhPShudWxsPT10P3ZvaWQgMDp0LnNpZ25hbCkmJmModC5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKSxlPVAoZSksYXN5bmMgZnVuY3Rpb24qKCl7dmFyIG47aWYobnVsbCE9dCYmbnVsbCE9PShuPXQuc2lnbmFsKSYmdm9pZCAwIT09biYmbi5hYm9ydGVkKXRocm93IG5ldyBzO2ZvciBhd2FpdChjb25zdCBuIG9mIHRoaXMpe3ZhciByO2lmKG51bGwhPXQmJm51bGwhPT0ocj10LnNpZ25hbCkmJnZvaWQgMCE9PXImJnIuYWJvcnRlZCl0aHJvdyBuZXcgcztlLS08PTAmJih5aWVsZCBuKX19LmNhbGwodGhpcyl9LGZpbHRlcjprLGZsYXRNYXA6ZnVuY3Rpb24oZSx0KXtjb25zdCBuPWouY2FsbCh0aGlzLGUsdCk7cmV0dXJuIGFzeW5jIGZ1bmN0aW9uKigpe2ZvciBhd2FpdChjb25zdCBlIG9mIG4peWllbGQqZX0uY2FsbCh0aGlzKX0sbWFwOmosdGFrZTpmdW5jdGlvbihlLHQ9dm9pZCAwKXtyZXR1cm4gbnVsbCE9dCYmZih0LFwib3B0aW9uc1wiKSxudWxsIT0obnVsbD09dD92b2lkIDA6dC5zaWduYWwpJiZjKHQuc2lnbmFsLFwib3B0aW9ucy5zaWduYWxcIiksZT1QKGUpLGFzeW5jIGZ1bmN0aW9uKigpe3ZhciBuO2lmKG51bGwhPXQmJm51bGwhPT0obj10LnNpZ25hbCkmJnZvaWQgMCE9PW4mJm4uYWJvcnRlZCl0aHJvdyBuZXcgcztmb3IgYXdhaXQoY29uc3QgbiBvZiB0aGlzKXt2YXIgcjtpZihudWxsIT10JiZudWxsIT09KHI9dC5zaWduYWwpJiZ2b2lkIDAhPT1yJiZyLmFib3J0ZWQpdGhyb3cgbmV3IHM7aWYoIShlLS0gPjApKXJldHVybjt5aWVsZCBufX0uY2FsbCh0aGlzKX0sY29tcG9zZTpmdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJmYodCxcIm9wdGlvbnNcIiksbnVsbCE9KG51bGw9PXQ/dm9pZCAwOnQuc2lnbmFsKSYmYyh0LnNpZ25hbCxcIm9wdGlvbnMuc2lnbmFsXCIpLG0oZSkmJiF2KGUpKXRocm93IG5ldyBvKFwic3RyZWFtXCIsZSxcIm11c3QgYmUgd3JpdGFibGVcIik7Y29uc3Qgbj1oKHRoaXMsZSk7cmV0dXJuIG51bGwhPXQmJnQuc2lnbmFsJiZnKHQuc2lnbmFsLG4pLG59fSxlLmV4cG9ydHMucHJvbWlzZVJldHVybmluZ09wZXJhdG9ycz17ZXZlcnk6YXN5bmMgZnVuY3Rpb24oZSx0PXZvaWQgMCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgaShcImZuXCIsW1wiRnVuY3Rpb25cIixcIkFzeW5jRnVuY3Rpb25cIl0sZSk7cmV0dXJuIWF3YWl0IE0uY2FsbCh0aGlzLChhc3luYyguLi50KT0+IWF3YWl0IGUoLi4udCkpLHQpfSxmb3JFYWNoOmFzeW5jIGZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgaShcImZuXCIsW1wiRnVuY3Rpb25cIixcIkFzeW5jRnVuY3Rpb25cIl0sZSk7Zm9yIGF3YWl0KGNvbnN0IG4gb2Ygai5jYWxsKHRoaXMsKGFzeW5jIGZ1bmN0aW9uKHQsbil7cmV0dXJuIGF3YWl0IGUodCxuKSxFfSksdCkpO30scmVkdWNlOmFzeW5jIGZ1bmN0aW9uKGUsdCxuKXt2YXIgbztpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBpKFwicmVkdWNlclwiLFtcIkZ1bmN0aW9uXCIsXCJBc3luY0Z1bmN0aW9uXCJdLGUpO251bGwhPW4mJmYobixcIm9wdGlvbnNcIiksbnVsbCE9KG51bGw9PW4/dm9pZCAwOm4uc2lnbmFsKSYmYyhuLnNpZ25hbCxcIm9wdGlvbnMuc2lnbmFsXCIpO2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MTtpZihudWxsIT1uJiZudWxsIT09KG89bi5zaWduYWwpJiZ2b2lkIDAhPT1vJiZvLmFib3J0ZWQpe2NvbnN0IGU9bmV3IHModm9pZCAwLHtjYXVzZTpuLnNpZ25hbC5yZWFzb259KTt0aHJvdyB0aGlzLm9uY2UoXCJlcnJvclwiLCgoKT0+e30pKSxhd2FpdCBwKHRoaXMuZGVzdHJveShlKSksZX1jb25zdCBsPW5ldyByLHU9bC5zaWduYWw7aWYobnVsbCE9biYmbi5zaWduYWwpe2NvbnN0IGU9e29uY2U6ITAsW2RdOnRoaXN9O24uc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCgoKT0+bC5hYm9ydCgpKSxlKX1sZXQgaD0hMTt0cnl7Zm9yIGF3YWl0KGNvbnN0IHIgb2YgdGhpcyl7dmFyIGc7aWYoaD0hMCxudWxsIT1uJiZudWxsIT09KGc9bi5zaWduYWwpJiZ2b2lkIDAhPT1nJiZnLmFib3J0ZWQpdGhyb3cgbmV3IHM7YT90PWF3YWl0IGUodCxyLHtzaWduYWw6dX0pOih0PXIsYT0hMCl9aWYoIWgmJiFhKXRocm93IG5ldyBSfWZpbmFsbHl7bC5hYm9ydCgpfXJldHVybiB0fSx0b0FycmF5OmFzeW5jIGZ1bmN0aW9uKGUpe251bGwhPWUmJmYoZSxcIm9wdGlvbnNcIiksbnVsbCE9KG51bGw9PWU/dm9pZCAwOmUuc2lnbmFsKSYmYyhlLnNpZ25hbCxcIm9wdGlvbnMuc2lnbmFsXCIpO2NvbnN0IHQ9W107Zm9yIGF3YWl0KGNvbnN0IHIgb2YgdGhpcyl7dmFyIG47aWYobnVsbCE9ZSYmbnVsbCE9PShuPWUuc2lnbmFsKSYmdm9pZCAwIT09biYmbi5hYm9ydGVkKXRocm93IG5ldyBzKHZvaWQgMCx7Y2F1c2U6ZS5zaWduYWwucmVhc29ufSk7Qyh0LHIpfXJldHVybiB0fSxzb21lOk0sZmluZDphc3luYyBmdW5jdGlvbihlLHQpe2ZvciBhd2FpdChjb25zdCBuIG9mIGsuY2FsbCh0aGlzLGUsdCkpcmV0dXJuIG59fX0sNDY3OihlLHQsbik9Pntjb25zdHtPYmplY3RTZXRQcm90b3R5cGVPZjpyfT1uKDE5MSk7ZS5leHBvcnRzPWk7Y29uc3Qgbz1uKDIxMCk7ZnVuY3Rpb24gaShlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBpKSlyZXR1cm4gbmV3IGkoZSk7by5jYWxsKHRoaXMsZSl9cihpLnByb3RvdHlwZSxvLnByb3RvdHlwZSkscihpLG8pLGkucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oZSx0LG4pe24obnVsbCxlKX19LDc1NDooZSx0LG4pPT57Y29uc3Qgcj1uKDUzMykse0FycmF5SXNBcnJheTpvLFByb21pc2U6aSxTeW1ib2xBc3luY0l0ZXJhdG9yOmF9PW4oMTkxKSxsPW4oODYpLHtvbmNlOnN9PW4oNzc1KSxjPW4oMjMwKSx1PW4oMTgyKSx7YWdncmVnYXRlVHdvRXJyb3JzOmYsY29kZXM6e0VSUl9JTlZBTElEX0FSR19UWVBFOmQsRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFOnAsRVJSX01JU1NJTkdfQVJHUzpoLEVSUl9TVFJFQU1fREVTVFJPWUVEOmcsRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U6dn0sQWJvcnRFcnJvcjptfT1uKDE0MSkse3ZhbGlkYXRlRnVuY3Rpb246Qyx2YWxpZGF0ZUFib3J0U2lnbmFsOnl9PW4oOTA0KSx7aXNJdGVyYWJsZTp3LGlzUmVhZGFibGU6Yixpc1JlYWRhYmxlTm9kZVN0cmVhbTp4LGlzTm9kZVN0cmVhbTpfLGlzVHJhbnNmb3JtU3RyZWFtOk8saXNXZWJTdHJlYW06TCxpc1JlYWRhYmxlU3RyZWFtOkUsaXNSZWFkYWJsZUVuZGVkOlN9PW4oMTMyKSxqPWdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyfHxuKDg3NikuQWJvcnRDb250cm9sbGVyO2xldCBNLGs7ZnVuY3Rpb24gUihlLHQsbil7bGV0IHI9ITE7cmV0dXJuIGUub24oXCJjbG9zZVwiLCgoKT0+e3I9ITB9KSkse2Rlc3Ryb3k6dD0+e3J8fChyPSEwLGMuZGVzdHJveWVyKGUsdHx8bmV3IGcoXCJwaXBlXCIpKSl9LGNsZWFudXA6bChlLHtyZWFkYWJsZTp0LHdyaXRhYmxlOm59LChlPT57cj0hZX0pKX19ZnVuY3Rpb24gUChlKXtpZih3KGUpKXJldHVybiBlO2lmKHgoZSkpcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKihlKXtrfHwoaz1uKDg1OCkpLHlpZWxkKmsucHJvdG90eXBlW2FdLmNhbGwoZSl9KGUpO3Rocm93IG5ldyBkKFwidmFsXCIsW1wiUmVhZGFibGVcIixcIkl0ZXJhYmxlXCIsXCJBc3luY0l0ZXJhYmxlXCJdLGUpfWFzeW5jIGZ1bmN0aW9uIEkoZSx0LG4se2VuZDpyfSl7bGV0IG8sYT1udWxsO2NvbnN0IHM9ZT0+e2lmKGUmJihvPWUpLGEpe2NvbnN0IGU9YTthPW51bGwsZSgpfX0sYz0oKT0+bmV3IGkoKChlLHQpPT57bz90KG8pOmE9KCk9PntvP3Qobyk6ZSgpfX0pKTt0Lm9uKFwiZHJhaW5cIixzKTtjb25zdCB1PWwodCx7cmVhZGFibGU6ITF9LHMpO3RyeXt0LndyaXRhYmxlTmVlZERyYWluJiZhd2FpdCBjKCk7Zm9yIGF3YWl0KGNvbnN0IG4gb2YgZSl0LndyaXRlKG4pfHxhd2FpdCBjKCk7ciYmdC5lbmQoKSxhd2FpdCBjKCksbigpfWNhdGNoKGUpe24obyE9PWU/ZihvLGUpOmUpfWZpbmFsbHl7dSgpLHQub2ZmKFwiZHJhaW5cIixzKX19YXN5bmMgZnVuY3Rpb24gQShlLHQsbix7ZW5kOnJ9KXtPKHQpJiYodD10LndyaXRhYmxlKTtjb25zdCBvPXQuZ2V0V3JpdGVyKCk7dHJ5e2ZvciBhd2FpdChjb25zdCB0IG9mIGUpYXdhaXQgby5yZWFkeSxvLndyaXRlKHQpLmNhdGNoKCgoKT0+e30pKTthd2FpdCBvLnJlYWR5LHImJmF3YWl0IG8uY2xvc2UoKSxuKCl9Y2F0Y2goZSl7dHJ5e2F3YWl0IG8uYWJvcnQoZSksbihlKX1jYXRjaChlKXtuKGUpfX19ZnVuY3Rpb24gVChlLHQsaSl7aWYoMT09PWUubGVuZ3RoJiZvKGVbMF0pJiYoZT1lWzBdKSxlLmxlbmd0aDwyKXRocm93IG5ldyBoKFwic3RyZWFtc1wiKTtjb25zdCBhPW5ldyBqLGw9YS5zaWduYWwscz1udWxsPT1pP3ZvaWQgMDppLnNpZ25hbCxjPVtdO2Z1bmN0aW9uIGYoKXtCKG5ldyBtKX1sZXQgZyx2O3kocyxcIm9wdGlvbnMuc2lnbmFsXCIpLG51bGw9PXN8fHMuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsZik7Y29uc3QgQz1bXTtsZXQgUyxrPTA7ZnVuY3Rpb24gVChlKXtCKGUsMD09LS1rKX1mdW5jdGlvbiBCKGUsbil7aWYoIWV8fGcmJlwiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0VcIiE9PWcuY29kZXx8KGc9ZSksZ3x8bil7Zm9yKDtDLmxlbmd0aDspQy5zaGlmdCgpKGcpO251bGw9PXN8fHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsZiksYS5hYm9ydCgpLG4mJihnfHxjLmZvckVhY2goKGU9PmUoKSkpLHIubmV4dFRpY2sodCxnLHYpKX19Zm9yKGxldCBaPTA7WjxlLmxlbmd0aDtaKyspe2NvbnN0ICQ9ZVtaXSxOPVo8ZS5sZW5ndGgtMSxGPVo+MCxVPU58fCExIT09KG51bGw9PWk/dm9pZCAwOmkuZW5kKSxXPVo9PT1lLmxlbmd0aC0xO2lmKF8oJCkpe2lmKFUpe2NvbnN0e2Rlc3Ryb3k6RyxjbGVhbnVwOnF9PVIoJCxOLEYpO0MucHVzaChHKSxiKCQpJiZXJiZjLnB1c2gocSl9ZnVuY3Rpb24geihlKXtlJiZcIkFib3J0RXJyb3JcIiE9PWUubmFtZSYmXCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRVwiIT09ZS5jb2RlJiZUKGUpfSQub24oXCJlcnJvclwiLHopLGIoJCkmJlcmJmMucHVzaCgoKCk9PnskLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIix6KX0pKX1pZigwPT09WilpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiAkKXtpZihTPSQoe3NpZ25hbDpsfSksIXcoUykpdGhyb3cgbmV3IHAoXCJJdGVyYWJsZSwgQXN5bmNJdGVyYWJsZSBvciBTdHJlYW1cIixcInNvdXJjZVwiLFMpfWVsc2UgUz13KCQpfHx4KCQpfHxPKCQpPyQ6dS5mcm9tKCQpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgJCl7dmFyIFY7aWYoUz1PKFMpP1AobnVsbD09PShWPVMpfHx2b2lkIDA9PT1WP3ZvaWQgMDpWLnJlYWRhYmxlKTpQKFMpLFM9JChTLHtzaWduYWw6bH0pLE4pe2lmKCF3KFMsITApKXRocm93IG5ldyBwKFwiQXN5bmNJdGVyYWJsZVwiLGB0cmFuc2Zvcm1bJHtaLTF9XWAsUyl9ZWxzZXt2YXIgRDtNfHwoTT1uKDQ2NykpO2NvbnN0IFk9bmV3IE0oe29iamVjdE1vZGU6ITB9KSxLPW51bGw9PT0oRD1TKXx8dm9pZCAwPT09RD92b2lkIDA6RC50aGVuO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIEspaysrLEsuY2FsbChTLChlPT57dj1lLG51bGwhPWUmJlkud3JpdGUoZSksVSYmWS5lbmQoKSxyLm5leHRUaWNrKFQpfSksKGU9PntZLmRlc3Ryb3koZSksci5uZXh0VGljayhULGUpfSkpO2Vsc2UgaWYodyhTLCEwKSlrKyssSShTLFksVCx7ZW5kOlV9KTtlbHNle2lmKCFFKFMpJiYhTyhTKSl0aHJvdyBuZXcgcChcIkFzeW5jSXRlcmFibGUgb3IgUHJvbWlzZVwiLFwiZGVzdGluYXRpb25cIixTKTt7Y29uc3QgUT1TLnJlYWRhYmxlfHxTO2srKyxJKFEsWSxULHtlbmQ6VX0pfX1TPVk7Y29uc3R7ZGVzdHJveTpYLGNsZWFudXA6Sn09UihTLCExLCEwKTtDLnB1c2goWCksVyYmYy5wdXNoKEopfX1lbHNlIGlmKF8oJCkpe2lmKHgoUykpe2srPTI7Y29uc3QgZWU9SChTLCQsVCx7ZW5kOlV9KTtiKCQpJiZXJiZjLnB1c2goZWUpfWVsc2UgaWYoTyhTKXx8RShTKSl7Y29uc3QgdGU9Uy5yZWFkYWJsZXx8UztrKyssSSh0ZSwkLFQse2VuZDpVfSl9ZWxzZXtpZighdyhTKSl0aHJvdyBuZXcgZChcInZhbFwiLFtcIlJlYWRhYmxlXCIsXCJJdGVyYWJsZVwiLFwiQXN5bmNJdGVyYWJsZVwiLFwiUmVhZGFibGVTdHJlYW1cIixcIlRyYW5zZm9ybVN0cmVhbVwiXSxTKTtrKyssSShTLCQsVCx7ZW5kOlV9KX1TPSR9ZWxzZSBpZihMKCQpKXtpZih4KFMpKWsrKyxBKFAoUyksJCxULHtlbmQ6VX0pO2Vsc2UgaWYoRShTKXx8dyhTKSlrKyssQShTLCQsVCx7ZW5kOlV9KTtlbHNle2lmKCFPKFMpKXRocm93IG5ldyBkKFwidmFsXCIsW1wiUmVhZGFibGVcIixcIkl0ZXJhYmxlXCIsXCJBc3luY0l0ZXJhYmxlXCIsXCJSZWFkYWJsZVN0cmVhbVwiLFwiVHJhbnNmb3JtU3RyZWFtXCJdLFMpO2srKyxBKFMucmVhZGFibGUsJCxULHtlbmQ6VX0pfVM9JH1lbHNlIFM9dS5mcm9tKCQpfXJldHVybihudWxsIT1sJiZsLmFib3J0ZWR8fG51bGwhPXMmJnMuYWJvcnRlZCkmJnIubmV4dFRpY2soZiksU31mdW5jdGlvbiBIKGUsdCxuLHtlbmQ6b30pe2xldCBpPSExO2lmKHQub24oXCJjbG9zZVwiLCgoKT0+e2l8fG4obmV3IHYpfSkpLGUucGlwZSh0LHtlbmQ6ITF9KSxvKXtmdW5jdGlvbiBhKCl7aT0hMCx0LmVuZCgpfVMoZSk/ci5uZXh0VGljayhhKTplLm9uY2UoXCJlbmRcIixhKX1lbHNlIG4oKTtyZXR1cm4gbChlLHtyZWFkYWJsZTohMCx3cml0YWJsZTohMX0sKHQ9Pntjb25zdCByPWUuX3JlYWRhYmxlU3RhdGU7dCYmXCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRVwiPT09dC5jb2RlJiZyJiZyLmVuZGVkJiYhci5lcnJvcmVkJiYhci5lcnJvckVtaXR0ZWQ/ZS5vbmNlKFwiZW5kXCIsbikub25jZShcImVycm9yXCIsbik6bih0KX0pKSxsKHQse3JlYWRhYmxlOiExLHdyaXRhYmxlOiEwfSxuKX1lLmV4cG9ydHM9e3BpcGVsaW5lSW1wbDpULHBpcGVsaW5lOmZ1bmN0aW9uKC4uLmUpe3JldHVybiBUKGUscyhmdW5jdGlvbihlKXtyZXR1cm4gQyhlW2UubGVuZ3RoLTFdLFwic3RyZWFtc1tzdHJlYW0ubGVuZ3RoIC0gMV1cIiksZS5wb3AoKX0oZSkpKX19fSw4NTg6KGUsdCxuKT0+e2NvbnN0IHI9big1MzMpLHtBcnJheVByb3RvdHlwZUluZGV4T2Y6byxOdW1iZXJJc0ludGVnZXI6aSxOdW1iZXJJc05hTjphLE51bWJlclBhcnNlSW50OmwsT2JqZWN0RGVmaW5lUHJvcGVydGllczpzLE9iamVjdEtleXM6YyxPYmplY3RTZXRQcm90b3R5cGVPZjp1LFByb21pc2U6ZixTYWZlU2V0OmQsU3ltYm9sQXN5bmNJdGVyYXRvcjpwLFN5bWJvbDpofT1uKDE5MSk7ZS5leHBvcnRzPUQsRC5SZWFkYWJsZVN0YXRlPVY7Y29uc3R7RXZlbnRFbWl0dGVyOmd9PW4oNDY1KSx7U3RyZWFtOnYscHJlcGVuZExpc3RlbmVyOm19PW4oMjAwKSx7QnVmZmVyOkN9PW4oNDg1KSx7YWRkQWJvcnRTaWduYWw6eX09bigzNzQpLHc9big4Nik7bGV0IGI9big3NzUpLmRlYnVnbG9nKFwic3RyZWFtXCIsKGU9PntiPWV9KSk7Y29uc3QgeD1uKDYxNiksXz1uKDIzMCkse2dldEhpZ2hXYXRlck1hcms6TyxnZXREZWZhdWx0SGlnaFdhdGVyTWFyazpMfT1uKDQ5OCkse2FnZ3JlZ2F0ZVR3b0Vycm9yczpFLGNvZGVzOntFUlJfSU5WQUxJRF9BUkdfVFlQRTpTLEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEOmosRVJSX09VVF9PRl9SQU5HRTpNLEVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0Y6ayxFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UOlJ9fT1uKDE0MSkse3ZhbGlkYXRlT2JqZWN0OlB9PW4oOTA0KSxJPWgoXCJrUGF1c2VkXCIpLHtTdHJpbmdEZWNvZGVyOkF9PW4oNDY0KSxUPW4oOTEzKTt1KEQucHJvdG90eXBlLHYucHJvdG90eXBlKSx1KEQsdik7Y29uc3QgSD0oKT0+e30se2Vycm9yT3JEZXN0cm95OkJ9PV87ZnVuY3Rpb24gVihlLHQscil7XCJib29sZWFuXCIhPXR5cGVvZiByJiYocj10IGluc3RhbmNlb2YgbigxODIpKSx0aGlzLm9iamVjdE1vZGU9ISghZXx8IWUub2JqZWN0TW9kZSksciYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEoIWV8fCFlLnJlYWRhYmxlT2JqZWN0TW9kZSkpLHRoaXMuaGlnaFdhdGVyTWFyaz1lP08odGhpcyxlLFwicmVhZGFibGVIaWdoV2F0ZXJNYXJrXCIscik6TCghMSksdGhpcy5idWZmZXI9bmV3IHgsdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPVtdLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLmNvbnN0cnVjdGVkPSEwLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXNbSV09bnVsbCx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmVtaXRDbG9zZT0hZXx8ITEhPT1lLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSFlfHwhMSE9PWUuYXV0b0Rlc3Ryb3ksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5lcnJvcmVkPW51bGwsdGhpcy5jbG9zZWQ9ITEsdGhpcy5jbG9zZUVtaXR0ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9ZSYmZS5kZWZhdWx0RW5jb2Rpbmd8fFwidXRmOFwiLHRoaXMuYXdhaXREcmFpbldyaXRlcnM9bnVsbCx0aGlzLm11bHRpQXdhaXREcmFpbj0hMSx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGF0YUVtaXR0ZWQ9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLGUmJmUuZW5jb2RpbmcmJih0aGlzLmRlY29kZXI9bmV3IEEoZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1lLmVuY29kaW5nKX1mdW5jdGlvbiBEKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEQpKXJldHVybiBuZXcgRChlKTtjb25zdCB0PXRoaXMgaW5zdGFuY2VvZiBuKDE4Mik7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgVihlLHRoaXMsdCksZSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUucmVhZCYmKHRoaXMuX3JlYWQ9ZS5yZWFkKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PWUuZGVzdHJveSksXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jb25zdHJ1Y3QmJih0aGlzLl9jb25zdHJ1Y3Q9ZS5jb25zdHJ1Y3QpLGUuc2lnbmFsJiYhdCYmeShlLnNpZ25hbCx0aGlzKSksdi5jYWxsKHRoaXMsZSksXy5jb25zdHJ1Y3QodGhpcywoKCk9Pnt0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZSYmVyh0aGlzLHRoaXMuX3JlYWRhYmxlU3RhdGUpfSkpfWZ1bmN0aW9uIFooZSx0LG4scil7YihcInJlYWRhYmxlQWRkQ2h1bmtcIix0KTtjb25zdCBvPWUuX3JlYWRhYmxlU3RhdGU7bGV0IGk7aWYoby5vYmplY3RNb2RlfHwoXCJzdHJpbmdcIj09dHlwZW9mIHQ/KG49bnx8by5kZWZhdWx0RW5jb2Rpbmcsby5lbmNvZGluZyE9PW4mJihyJiZvLmVuY29kaW5nP3Q9Qy5mcm9tKHQsbikudG9TdHJpbmcoby5lbmNvZGluZyk6KHQ9Qy5mcm9tKHQsbiksbj1cIlwiKSkpOnQgaW5zdGFuY2VvZiBDP249XCJcIjp2Ll9pc1VpbnQ4QXJyYXkodCk/KHQ9di5fdWludDhBcnJheVRvQnVmZmVyKHQpLG49XCJcIik6bnVsbCE9dCYmKGk9bmV3IFMoXCJjaHVua1wiLFtcInN0cmluZ1wiLFwiQnVmZmVyXCIsXCJVaW50OEFycmF5XCJdLHQpKSksaSlCKGUsaSk7ZWxzZSBpZihudWxsPT09dClvLnJlYWRpbmc9ITEsZnVuY3Rpb24oZSx0KXtpZihiKFwib25Fb2ZDaHVua1wiKSwhdC5lbmRlZCl7aWYodC5kZWNvZGVyKXtjb25zdCBlPXQuZGVjb2Rlci5lbmQoKTtlJiZlLmxlbmd0aCYmKHQuYnVmZmVyLnB1c2goZSksdC5sZW5ndGgrPXQub2JqZWN0TW9kZT8xOmUubGVuZ3RoKX10LmVuZGVkPSEwLHQuc3luYz9GKGUpOih0Lm5lZWRSZWFkYWJsZT0hMSx0LmVtaXR0ZWRSZWFkYWJsZT0hMCxVKGUpKX19KGUsbyk7ZWxzZSBpZihvLm9iamVjdE1vZGV8fHQmJnQubGVuZ3RoPjApaWYocilpZihvLmVuZEVtaXR0ZWQpQihlLG5ldyBSKTtlbHNle2lmKG8uZGVzdHJveWVkfHxvLmVycm9yZWQpcmV0dXJuITE7JChlLG8sdCwhMCl9ZWxzZSBpZihvLmVuZGVkKUIoZSxuZXcgayk7ZWxzZXtpZihvLmRlc3Ryb3llZHx8by5lcnJvcmVkKXJldHVybiExO28ucmVhZGluZz0hMSxvLmRlY29kZXImJiFuPyh0PW8uZGVjb2Rlci53cml0ZSh0KSxvLm9iamVjdE1vZGV8fDAhPT10Lmxlbmd0aD8kKGUsbyx0LCExKTpXKGUsbykpOiQoZSxvLHQsITEpfWVsc2Ugcnx8KG8ucmVhZGluZz0hMSxXKGUsbykpO3JldHVybiFvLmVuZGVkJiYoby5sZW5ndGg8by5oaWdoV2F0ZXJNYXJrfHwwPT09by5sZW5ndGgpfWZ1bmN0aW9uICQoZSx0LG4scil7dC5mbG93aW5nJiYwPT09dC5sZW5ndGgmJiF0LnN5bmMmJmUubGlzdGVuZXJDb3VudChcImRhdGFcIik+MD8odC5tdWx0aUF3YWl0RHJhaW4/dC5hd2FpdERyYWluV3JpdGVycy5jbGVhcigpOnQuYXdhaXREcmFpbldyaXRlcnM9bnVsbCx0LmRhdGFFbWl0dGVkPSEwLGUuZW1pdChcImRhdGFcIixuKSk6KHQubGVuZ3RoKz10Lm9iamVjdE1vZGU/MTpuLmxlbmd0aCxyP3QuYnVmZmVyLnVuc2hpZnQobik6dC5idWZmZXIucHVzaChuKSx0Lm5lZWRSZWFkYWJsZSYmRihlKSksVyhlLHQpfWZ1bmN0aW9uIE4oZSx0KXtyZXR1cm4gZTw9MHx8MD09PXQubGVuZ3RoJiZ0LmVuZGVkPzA6dC5vYmplY3RNb2RlPzE6YShlKT90LmZsb3dpbmcmJnQubGVuZ3RoP3QuYnVmZmVyLmZpcnN0KCkubGVuZ3RoOnQubGVuZ3RoOmU8PXQubGVuZ3RoP2U6dC5lbmRlZD90Lmxlbmd0aDowfWZ1bmN0aW9uIEYoZSl7Y29uc3QgdD1lLl9yZWFkYWJsZVN0YXRlO2IoXCJlbWl0UmVhZGFibGVcIix0Lm5lZWRSZWFkYWJsZSx0LmVtaXR0ZWRSZWFkYWJsZSksdC5uZWVkUmVhZGFibGU9ITEsdC5lbWl0dGVkUmVhZGFibGV8fChiKFwiZW1pdFJlYWRhYmxlXCIsdC5mbG93aW5nKSx0LmVtaXR0ZWRSZWFkYWJsZT0hMCxyLm5leHRUaWNrKFUsZSkpfWZ1bmN0aW9uIFUoZSl7Y29uc3QgdD1lLl9yZWFkYWJsZVN0YXRlO2IoXCJlbWl0UmVhZGFibGVfXCIsdC5kZXN0cm95ZWQsdC5sZW5ndGgsdC5lbmRlZCksdC5kZXN0cm95ZWR8fHQuZXJyb3JlZHx8IXQubGVuZ3RoJiYhdC5lbmRlZHx8KGUuZW1pdChcInJlYWRhYmxlXCIpLHQuZW1pdHRlZFJlYWRhYmxlPSExKSx0Lm5lZWRSZWFkYWJsZT0hdC5mbG93aW5nJiYhdC5lbmRlZCYmdC5sZW5ndGg8PXQuaGlnaFdhdGVyTWFyayxLKGUpfWZ1bmN0aW9uIFcoZSx0KXshdC5yZWFkaW5nTW9yZSYmdC5jb25zdHJ1Y3RlZCYmKHQucmVhZGluZ01vcmU9ITAsci5uZXh0VGljayh6LGUsdCkpfWZ1bmN0aW9uIHooZSx0KXtmb3IoOyF0LnJlYWRpbmcmJiF0LmVuZGVkJiYodC5sZW5ndGg8dC5oaWdoV2F0ZXJNYXJrfHx0LmZsb3dpbmcmJjA9PT10Lmxlbmd0aCk7KXtjb25zdCBuPXQubGVuZ3RoO2lmKGIoXCJtYXliZVJlYWRNb3JlIHJlYWQgMFwiKSxlLnJlYWQoMCksbj09PXQubGVuZ3RoKWJyZWFrfXQucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gRyhlKXtjb25zdCB0PWUuX3JlYWRhYmxlU3RhdGU7dC5yZWFkYWJsZUxpc3RlbmluZz1lLmxpc3RlbmVyQ291bnQoXCJyZWFkYWJsZVwiKT4wLHQucmVzdW1lU2NoZWR1bGVkJiYhMT09PXRbSV0/dC5mbG93aW5nPSEwOmUubGlzdGVuZXJDb3VudChcImRhdGFcIik+MD9lLnJlc3VtZSgpOnQucmVhZGFibGVMaXN0ZW5pbmd8fCh0LmZsb3dpbmc9bnVsbCl9ZnVuY3Rpb24gcShlKXtiKFwicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwXCIpLGUucmVhZCgwKX1mdW5jdGlvbiBZKGUsdCl7YihcInJlc3VtZVwiLHQucmVhZGluZyksdC5yZWFkaW5nfHxlLnJlYWQoMCksdC5yZXN1bWVTY2hlZHVsZWQ9ITEsZS5lbWl0KFwicmVzdW1lXCIpLEsoZSksdC5mbG93aW5nJiYhdC5yZWFkaW5nJiZlLnJlYWQoMCl9ZnVuY3Rpb24gSyhlKXtjb25zdCB0PWUuX3JlYWRhYmxlU3RhdGU7Zm9yKGIoXCJmbG93XCIsdC5mbG93aW5nKTt0LmZsb3dpbmcmJm51bGwhPT1lLnJlYWQoKTspO31mdW5jdGlvbiBYKGUsdCl7XCJmdW5jdGlvblwiIT10eXBlb2YgZS5yZWFkJiYoZT1ELndyYXAoZSx7b2JqZWN0TW9kZTohMH0pKTtjb25zdCBuPWFzeW5jIGZ1bmN0aW9uKihlLHQpe2xldCBuLHI9SDtmdW5jdGlvbiBvKHQpe3RoaXM9PT1lPyhyKCkscj1IKTpyPXR9ZS5vbihcInJlYWRhYmxlXCIsbyk7Y29uc3QgaT13KGUse3dyaXRhYmxlOiExfSwoZT0+e249ZT9FKG4sZSk6bnVsbCxyKCkscj1IfSkpO3RyeXtmb3IoOzspe2NvbnN0IHQ9ZS5kZXN0cm95ZWQ/bnVsbDplLnJlYWQoKTtpZihudWxsIT09dCl5aWVsZCB0O2Vsc2V7aWYobil0aHJvdyBuO2lmKG51bGw9PT1uKXJldHVybjthd2FpdCBuZXcgZihvKX19fWNhdGNoKGUpe3Rocm93IG49RShuLGUpLG59ZmluYWxseXshbiYmITE9PT0obnVsbD09dD92b2lkIDA6dC5kZXN0cm95T25SZXR1cm4pfHx2b2lkIDAhPT1uJiYhZS5fcmVhZGFibGVTdGF0ZS5hdXRvRGVzdHJveT8oZS5vZmYoXCJyZWFkYWJsZVwiLG8pLGkoKSk6Xy5kZXN0cm95ZXIoZSxudWxsKX19KGUsdCk7cmV0dXJuIG4uc3RyZWFtPWUsbn1mdW5jdGlvbiBKKGUsdCl7aWYoMD09PXQubGVuZ3RoKXJldHVybiBudWxsO2xldCBuO3JldHVybiB0Lm9iamVjdE1vZGU/bj10LmJ1ZmZlci5zaGlmdCgpOiFlfHxlPj10Lmxlbmd0aD8obj10LmRlY29kZXI/dC5idWZmZXIuam9pbihcIlwiKToxPT09dC5idWZmZXIubGVuZ3RoP3QuYnVmZmVyLmZpcnN0KCk6dC5idWZmZXIuY29uY2F0KHQubGVuZ3RoKSx0LmJ1ZmZlci5jbGVhcigpKTpuPXQuYnVmZmVyLmNvbnN1bWUoZSx0LmRlY29kZXIpLG59ZnVuY3Rpb24gUShlKXtjb25zdCB0PWUuX3JlYWRhYmxlU3RhdGU7YihcImVuZFJlYWRhYmxlXCIsdC5lbmRFbWl0dGVkKSx0LmVuZEVtaXR0ZWR8fCh0LmVuZGVkPSEwLHIubmV4dFRpY2soZWUsdCxlKSl9ZnVuY3Rpb24gZWUoZSx0KXtpZihiKFwiZW5kUmVhZGFibGVOVFwiLGUuZW5kRW1pdHRlZCxlLmxlbmd0aCksIWUuZXJyb3JlZCYmIWUuY2xvc2VFbWl0dGVkJiYhZS5lbmRFbWl0dGVkJiYwPT09ZS5sZW5ndGgpaWYoZS5lbmRFbWl0dGVkPSEwLHQuZW1pdChcImVuZFwiKSx0LndyaXRhYmxlJiYhMT09PXQuYWxsb3dIYWxmT3BlbilyLm5leHRUaWNrKHRlLHQpO2Vsc2UgaWYoZS5hdXRvRGVzdHJveSl7Y29uc3QgZT10Ll93cml0YWJsZVN0YXRlOyghZXx8ZS5hdXRvRGVzdHJveSYmKGUuZmluaXNoZWR8fCExPT09ZS53cml0YWJsZSkpJiZ0LmRlc3Ryb3koKX19ZnVuY3Rpb24gdGUoZSl7ZS53cml0YWJsZSYmIWUud3JpdGFibGVFbmRlZCYmIWUuZGVzdHJveWVkJiZlLmVuZCgpfWxldCBuZTtmdW5jdGlvbiByZSgpe3JldHVybiB2b2lkIDA9PT1uZSYmKG5lPXt9KSxuZX1ELnByb3RvdHlwZS5kZXN0cm95PV8uZGVzdHJveSxELnByb3RvdHlwZS5fdW5kZXN0cm95PV8udW5kZXN0cm95LEQucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGUsdCl7dChlKX0sRC5wcm90b3R5cGVbZy5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sXT1mdW5jdGlvbihlKXt0aGlzLmRlc3Ryb3koZSl9LEQucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gWih0aGlzLGUsdCwhMSl9LEQucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gWih0aGlzLGUsdCwhMCl9LEQucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiEwPT09ZVtJXXx8ITE9PT1lLmZsb3dpbmd9LEQucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IEEoZSk7dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPXQsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz10aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIuZW5jb2Rpbmc7Y29uc3Qgbj10aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcjtsZXQgcj1cIlwiO2Zvcihjb25zdCBlIG9mIG4pcis9dC53cml0ZShlKTtyZXR1cm4gbi5jbGVhcigpLFwiXCIhPT1yJiZuLnB1c2gociksdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg9ci5sZW5ndGgsdGhpc30sRC5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihlKXtiKFwicmVhZFwiLGUpLHZvaWQgMD09PWU/ZT1OYU46aShlKXx8KGU9bChlLDEwKSk7Y29uc3QgdD10aGlzLl9yZWFkYWJsZVN0YXRlLG49ZTtpZihlPnQuaGlnaFdhdGVyTWFyayYmKHQuaGlnaFdhdGVyTWFyaz1mdW5jdGlvbihlKXtpZihlPjEwNzM3NDE4MjQpdGhyb3cgbmV3IE0oXCJzaXplXCIsXCI8PSAxR2lCXCIsZSk7cmV0dXJuIGUtLSxlfD1lPj4+MSxlfD1lPj4+MixlfD1lPj4+NCxlfD1lPj4+OCxlfD1lPj4+MTYsKytlfShlKSksMCE9PWUmJih0LmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PWUmJnQubmVlZFJlYWRhYmxlJiYoKDAhPT10LmhpZ2hXYXRlck1hcms/dC5sZW5ndGg+PXQuaGlnaFdhdGVyTWFyazp0Lmxlbmd0aD4wKXx8dC5lbmRlZCkpcmV0dXJuIGIoXCJyZWFkOiBlbWl0UmVhZGFibGVcIix0Lmxlbmd0aCx0LmVuZGVkKSwwPT09dC5sZW5ndGgmJnQuZW5kZWQ/USh0aGlzKTpGKHRoaXMpLG51bGw7aWYoMD09PShlPU4oZSx0KSkmJnQuZW5kZWQpcmV0dXJuIDA9PT10Lmxlbmd0aCYmUSh0aGlzKSxudWxsO2xldCByLG89dC5uZWVkUmVhZGFibGU7aWYoYihcIm5lZWQgcmVhZGFibGVcIixvKSwoMD09PXQubGVuZ3RofHx0Lmxlbmd0aC1lPHQuaGlnaFdhdGVyTWFyaykmJihvPSEwLGIoXCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFya1wiLG8pKSx0LmVuZGVkfHx0LnJlYWRpbmd8fHQuZGVzdHJveWVkfHx0LmVycm9yZWR8fCF0LmNvbnN0cnVjdGVkKW89ITEsYihcInJlYWRpbmcsIGVuZGVkIG9yIGNvbnN0cnVjdGluZ1wiLG8pO2Vsc2UgaWYobyl7YihcImRvIHJlYWRcIiksdC5yZWFkaW5nPSEwLHQuc3luYz0hMCwwPT09dC5sZW5ndGgmJih0Lm5lZWRSZWFkYWJsZT0hMCk7dHJ5e3RoaXMuX3JlYWQodC5oaWdoV2F0ZXJNYXJrKX1jYXRjaChlKXtCKHRoaXMsZSl9dC5zeW5jPSExLHQucmVhZGluZ3x8KGU9TihuLHQpKX1yZXR1cm4gcj1lPjA/SihlLHQpOm51bGwsbnVsbD09PXI/KHQubmVlZFJlYWRhYmxlPXQubGVuZ3RoPD10LmhpZ2hXYXRlck1hcmssZT0wKToodC5sZW5ndGgtPWUsdC5tdWx0aUF3YWl0RHJhaW4/dC5hd2FpdERyYWluV3JpdGVycy5jbGVhcigpOnQuYXdhaXREcmFpbldyaXRlcnM9bnVsbCksMD09PXQubGVuZ3RoJiYodC5lbmRlZHx8KHQubmVlZFJlYWRhYmxlPSEwKSxuIT09ZSYmdC5lbmRlZCYmUSh0aGlzKSksbnVsbD09PXJ8fHQuZXJyb3JFbWl0dGVkfHx0LmNsb3NlRW1pdHRlZHx8KHQuZGF0YUVtaXR0ZWQ9ITAsdGhpcy5lbWl0KFwiZGF0YVwiLHIpKSxyfSxELnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihlKXt0aHJvdyBuZXcgaihcIl9yZWFkKClcIil9LEQucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPXRoaXMsbz10aGlzLl9yZWFkYWJsZVN0YXRlOzE9PT1vLnBpcGVzLmxlbmd0aCYmKG8ubXVsdGlBd2FpdERyYWlufHwoby5tdWx0aUF3YWl0RHJhaW49ITAsby5hd2FpdERyYWluV3JpdGVycz1uZXcgZChvLmF3YWl0RHJhaW5Xcml0ZXJzP1tvLmF3YWl0RHJhaW5Xcml0ZXJzXTpbXSkpKSxvLnBpcGVzLnB1c2goZSksYihcInBpcGUgY291bnQ9JWQgb3B0cz0lalwiLG8ucGlwZXMubGVuZ3RoLHQpO2NvbnN0IGk9dCYmITE9PT10LmVuZHx8ZT09PXIuc3Rkb3V0fHxlPT09ci5zdGRlcnI/ZzphO2Z1bmN0aW9uIGEoKXtiKFwib25lbmRcIiksZS5lbmQoKX1sZXQgbDtvLmVuZEVtaXR0ZWQ/ci5uZXh0VGljayhpKTpuLm9uY2UoXCJlbmRcIixpKSxlLm9uKFwidW5waXBlXCIsKGZ1bmN0aW9uIHQocixpKXtiKFwib251bnBpcGVcIikscj09PW4mJmkmJiExPT09aS5oYXNVbnBpcGVkJiYoaS5oYXNVbnBpcGVkPSEwLGIoXCJjbGVhbnVwXCIpLGUucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLHApLGUucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIixoKSxsJiZlLnJlbW92ZUxpc3RlbmVyKFwiZHJhaW5cIixsKSxlLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixmKSxlLnJlbW92ZUxpc3RlbmVyKFwidW5waXBlXCIsdCksbi5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLGEpLG4ucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixnKSxuLnJlbW92ZUxpc3RlbmVyKFwiZGF0YVwiLHUpLHM9ITAsbCYmby5hd2FpdERyYWluV3JpdGVycyYmKCFlLl93cml0YWJsZVN0YXRlfHxlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbikmJmwoKSl9KSk7bGV0IHM9ITE7ZnVuY3Rpb24gYygpe3N8fCgxPT09by5waXBlcy5sZW5ndGgmJm8ucGlwZXNbMF09PT1lPyhiKFwiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlXCIsMCksby5hd2FpdERyYWluV3JpdGVycz1lLG8ubXVsdGlBd2FpdERyYWluPSExKTpvLnBpcGVzLmxlbmd0aD4xJiZvLnBpcGVzLmluY2x1ZGVzKGUpJiYoYihcImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZVwiLG8uYXdhaXREcmFpbldyaXRlcnMuc2l6ZSksby5hd2FpdERyYWluV3JpdGVycy5hZGQoZSkpLG4ucGF1c2UoKSksbHx8KGw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtjb25zdCBuPWUuX3JlYWRhYmxlU3RhdGU7bi5hd2FpdERyYWluV3JpdGVycz09PXQ/KGIoXCJwaXBlT25EcmFpblwiLDEpLG4uYXdhaXREcmFpbldyaXRlcnM9bnVsbCk6bi5tdWx0aUF3YWl0RHJhaW4mJihiKFwicGlwZU9uRHJhaW5cIixuLmF3YWl0RHJhaW5Xcml0ZXJzLnNpemUpLG4uYXdhaXREcmFpbldyaXRlcnMuZGVsZXRlKHQpKSxuLmF3YWl0RHJhaW5Xcml0ZXJzJiYwIT09bi5hd2FpdERyYWluV3JpdGVycy5zaXplfHwhZS5saXN0ZW5lckNvdW50KFwiZGF0YVwiKXx8ZS5yZXN1bWUoKX19KG4sZSksZS5vbihcImRyYWluXCIsbCkpfWZ1bmN0aW9uIHUodCl7YihcIm9uZGF0YVwiKTtjb25zdCBuPWUud3JpdGUodCk7YihcImRlc3Qud3JpdGVcIixuKSwhMT09PW4mJmMoKX1mdW5jdGlvbiBmKHQpe2lmKGIoXCJvbmVycm9yXCIsdCksZygpLGUucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLGYpLDA9PT1lLmxpc3RlbmVyQ291bnQoXCJlcnJvclwiKSl7Y29uc3Qgbj1lLl93cml0YWJsZVN0YXRlfHxlLl9yZWFkYWJsZVN0YXRlO24mJiFuLmVycm9yRW1pdHRlZD9CKGUsdCk6ZS5lbWl0KFwiZXJyb3JcIix0KX19ZnVuY3Rpb24gcCgpe2UucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIixoKSxnKCl9ZnVuY3Rpb24gaCgpe2IoXCJvbmZpbmlzaFwiKSxlLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixwKSxnKCl9ZnVuY3Rpb24gZygpe2IoXCJ1bnBpcGVcIiksbi51bnBpcGUoZSl9cmV0dXJuIG4ub24oXCJkYXRhXCIsdSksbShlLFwiZXJyb3JcIixmKSxlLm9uY2UoXCJjbG9zZVwiLHApLGUub25jZShcImZpbmlzaFwiLGgpLGUuZW1pdChcInBpcGVcIixuKSwhMD09PWUud3JpdGFibGVOZWVkRHJhaW4/by5mbG93aW5nJiZjKCk6by5mbG93aW5nfHwoYihcInBpcGUgcmVzdW1lXCIpLG4ucmVzdW1lKCkpLGV9LEQucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihlKXtjb25zdCB0PXRoaXMuX3JlYWRhYmxlU3RhdGU7aWYoMD09PXQucGlwZXMubGVuZ3RoKXJldHVybiB0aGlzO2lmKCFlKXtjb25zdCBlPXQucGlwZXM7dC5waXBlcz1bXSx0aGlzLnBhdXNlKCk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5lbWl0KFwidW5waXBlXCIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfWNvbnN0IG49byh0LnBpcGVzLGUpO3JldHVybi0xPT09bnx8KHQucGlwZXMuc3BsaWNlKG4sMSksMD09PXQucGlwZXMubGVuZ3RoJiZ0aGlzLnBhdXNlKCksZS5lbWl0KFwidW5waXBlXCIsdGhpcyx7aGFzVW5waXBlZDohMX0pKSx0aGlzfSxELnByb3RvdHlwZS5vbj1mdW5jdGlvbihlLHQpe2NvbnN0IG49di5wcm90b3R5cGUub24uY2FsbCh0aGlzLGUsdCksbz10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVyblwiZGF0YVwiPT09ZT8oby5yZWFkYWJsZUxpc3RlbmluZz10aGlzLmxpc3RlbmVyQ291bnQoXCJyZWFkYWJsZVwiKT4wLCExIT09by5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpKTpcInJlYWRhYmxlXCI9PT1lJiYoby5lbmRFbWl0dGVkfHxvLnJlYWRhYmxlTGlzdGVuaW5nfHwoby5yZWFkYWJsZUxpc3RlbmluZz1vLm5lZWRSZWFkYWJsZT0hMCxvLmZsb3dpbmc9ITEsby5lbWl0dGVkUmVhZGFibGU9ITEsYihcIm9uIHJlYWRhYmxlXCIsby5sZW5ndGgsby5yZWFkaW5nKSxvLmxlbmd0aD9GKHRoaXMpOm8ucmVhZGluZ3x8ci5uZXh0VGljayhxLHRoaXMpKSksbn0sRC5wcm90b3R5cGUuYWRkTGlzdGVuZXI9RC5wcm90b3R5cGUub24sRC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPXYucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyxlLHQpO3JldHVyblwicmVhZGFibGVcIj09PWUmJnIubmV4dFRpY2soRyx0aGlzKSxufSxELnByb3RvdHlwZS5vZmY9RC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIsRC5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9di5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm5cInJlYWRhYmxlXCIhPT1lJiZ2b2lkIDAhPT1lfHxyLm5leHRUaWNrKEcsdGhpcyksdH0sRC5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBlLmZsb3dpbmd8fChiKFwicmVzdW1lXCIpLGUuZmxvd2luZz0hZS5yZWFkYWJsZUxpc3RlbmluZyxmdW5jdGlvbihlLHQpe3QucmVzdW1lU2NoZWR1bGVkfHwodC5yZXN1bWVTY2hlZHVsZWQ9ITAsci5uZXh0VGljayhZLGUsdCkpfSh0aGlzLGUpKSxlW0ldPSExLHRoaXN9LEQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIGIoXCJjYWxsIHBhdXNlIGZsb3dpbmc9JWpcIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoYihcInBhdXNlXCIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoXCJwYXVzZVwiKSksdGhpcy5fcmVhZGFibGVTdGF0ZVtJXT0hMCx0aGlzfSxELnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKGUpe2xldCB0PSExO2Uub24oXCJkYXRhXCIsKG49PnshdGhpcy5wdXNoKG4pJiZlLnBhdXNlJiYodD0hMCxlLnBhdXNlKCkpfSkpLGUub24oXCJlbmRcIiwoKCk9Pnt0aGlzLnB1c2gobnVsbCl9KSksZS5vbihcImVycm9yXCIsKGU9PntCKHRoaXMsZSl9KSksZS5vbihcImNsb3NlXCIsKCgpPT57dGhpcy5kZXN0cm95KCl9KSksZS5vbihcImRlc3Ryb3lcIiwoKCk9Pnt0aGlzLmRlc3Ryb3koKX0pKSx0aGlzLl9yZWFkPSgpPT57dCYmZS5yZXN1bWUmJih0PSExLGUucmVzdW1lKCkpfTtjb25zdCBuPWMoZSk7Zm9yKGxldCB0PTE7dDxuLmxlbmd0aDt0Kyspe2NvbnN0IHI9blt0XTt2b2lkIDA9PT10aGlzW3JdJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlW3JdJiYodGhpc1tyXT1lW3JdLmJpbmQoZSkpfXJldHVybiB0aGlzfSxELnByb3RvdHlwZVtwXT1mdW5jdGlvbigpe3JldHVybiBYKHRoaXMpfSxELnByb3RvdHlwZS5pdGVyYXRvcj1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmUChlLFwib3B0aW9uc1wiKSxYKHRoaXMsZSl9LHMoRC5wcm90b3R5cGUse3JlYWRhYmxlOntfX3Byb3RvX186bnVsbCxnZXQoKXtjb25zdCBlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuISghZXx8ITE9PT1lLnJlYWRhYmxlfHxlLmRlc3Ryb3llZHx8ZS5lcnJvckVtaXR0ZWR8fGUuZW5kRW1pdHRlZCl9LHNldChlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkYWJsZT0hIWUpfX0scmVhZGFibGVEaWRSZWFkOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkfX0scmVhZGFibGVBYm9ydGVkOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiEoITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlfHwhdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJiF0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yZWR8fHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCl9fSxyZWFkYWJsZUhpZ2hXYXRlck1hcms6e19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319LHJlYWRhYmxlQnVmZmVyOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcn19LHJlYWRhYmxlRmxvd2luZzp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz1lKX19LHJlYWRhYmxlTGVuZ3RoOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19LHJlYWRhYmxlT2JqZWN0TW9kZTp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4hIXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUub2JqZWN0TW9kZX19LHJlYWRhYmxlRW5jb2Rpbmc6e19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGU/dGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZzpudWxsfX0sZXJyb3JlZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZT90aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQ6bnVsbH19LGNsb3NlZDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuISF0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmNsb3NlZH19LGRlc3Ryb3llZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4hIXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQoZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPWUpfX0scmVhZGFibGVFbmRlZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4hIXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZH19fSkscyhWLnByb3RvdHlwZSx7cGlwZXNDb3VudDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHRoaXMucGlwZXMubGVuZ3RofX0scGF1c2VkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4hMSE9PXRoaXNbSV19LHNldChlKXt0aGlzW0ldPSEhZX19fSksRC5fZnJvbUxpc3Q9SixELmZyb209ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVChELGUsdCl9LEQuZnJvbVdlYj1mdW5jdGlvbihlLHQpe3JldHVybiByZSgpLm5ld1N0cmVhbVJlYWRhYmxlRnJvbVJlYWRhYmxlU3RyZWFtKGUsdCl9LEQudG9XZWI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcmUoKS5uZXdSZWFkYWJsZVN0cmVhbUZyb21TdHJlYW1SZWFkYWJsZShlLHQpfSxELndyYXA9ZnVuY3Rpb24oZSx0KXt2YXIgbixyO3JldHVybiBuZXcgRCh7b2JqZWN0TW9kZTpudWxsPT09KG49bnVsbCE9PShyPWUucmVhZGFibGVPYmplY3RNb2RlKSYmdm9pZCAwIT09cj9yOmUub2JqZWN0TW9kZSl8fHZvaWQgMD09PW58fG4sLi4udCxkZXN0cm95KHQsbil7Xy5kZXN0cm95ZXIoZSx0KSxuKHQpfX0pLndyYXAoZSl9fSw0OTg6KGUsdCxuKT0+e2NvbnN0e01hdGhGbG9vcjpyLE51bWJlcklzSW50ZWdlcjpvfT1uKDE5MSkse0VSUl9JTlZBTElEX0FSR19WQUxVRTppfT1uKDE0MSkuY29kZXM7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZT8xNjoxNjM4NH1lLmV4cG9ydHM9e2dldEhpZ2hXYXRlck1hcms6ZnVuY3Rpb24oZSx0LG4sbCl7Y29uc3Qgcz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGwhPWUuaGlnaFdhdGVyTWFyaz9lLmhpZ2hXYXRlck1hcms6dD9lW25dOm51bGx9KHQsbCxuKTtpZihudWxsIT1zKXtpZighbyhzKXx8czwwKXRocm93IG5ldyBpKGw/YG9wdGlvbnMuJHtufWA6XCJvcHRpb25zLmhpZ2hXYXRlck1hcmtcIixzKTtyZXR1cm4gcihzKX1yZXR1cm4gYShlLm9iamVjdE1vZGUpfSxnZXREZWZhdWx0SGlnaFdhdGVyTWFyazphfX0sMjEwOihlLHQsbik9Pntjb25zdHtPYmplY3RTZXRQcm90b3R5cGVPZjpyLFN5bWJvbDpvfT1uKDE5MSk7ZS5leHBvcnRzPWM7Y29uc3R7RVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQ6aX09bigxNDEpLmNvZGVzLGE9bigxODIpLHtnZXRIaWdoV2F0ZXJNYXJrOmx9PW4oNDk4KTtyKGMucHJvdG90eXBlLGEucHJvdG90eXBlKSxyKGMsYSk7Y29uc3Qgcz1vKFwia0NhbGxiYWNrXCIpO2Z1bmN0aW9uIGMoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgYykpcmV0dXJuIG5ldyBjKGUpO2NvbnN0IHQ9ZT9sKHRoaXMsZSxcInJlYWRhYmxlSGlnaFdhdGVyTWFya1wiLCEwKTpudWxsOzA9PT10JiYoZT17Li4uZSxoaWdoV2F0ZXJNYXJrOm51bGwscmVhZGFibGVIaWdoV2F0ZXJNYXJrOnQsd3JpdGFibGVIaWdoV2F0ZXJNYXJrOmUud3JpdGFibGVIaWdoV2F0ZXJNYXJrfHwwfSksYS5jYWxsKHRoaXMsZSksdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLHRoaXNbc109bnVsbCxlJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09ZS50cmFuc2Zvcm0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZmx1c2gmJih0aGlzLl9mbHVzaD1lLmZsdXNoKSksdGhpcy5vbihcInByZWZpbmlzaFwiLGYpfWZ1bmN0aW9uIHUoZSl7XCJmdW5jdGlvblwiIT10eXBlb2YgdGhpcy5fZmx1c2h8fHRoaXMuZGVzdHJveWVkPyh0aGlzLnB1c2gobnVsbCksZSYmZSgpKTp0aGlzLl9mbHVzaCgoKHQsbik9Pnt0P2U/ZSh0KTp0aGlzLmRlc3Ryb3kodCk6KG51bGwhPW4mJnRoaXMucHVzaChuKSx0aGlzLnB1c2gobnVsbCksZSYmZSgpKX0pKX1mdW5jdGlvbiBmKCl7dGhpcy5fZmluYWwhPT11JiZ1LmNhbGwodGhpcyl9Yy5wcm90b3R5cGUuX2ZpbmFsPXUsYy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihlLHQsbil7dGhyb3cgbmV3IGkoXCJfdHJhbnNmb3JtKClcIil9LGMucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihlLHQsbil7Y29uc3Qgcj10aGlzLl9yZWFkYWJsZVN0YXRlLG89dGhpcy5fd3JpdGFibGVTdGF0ZSxpPXIubGVuZ3RoO3RoaXMuX3RyYW5zZm9ybShlLHQsKChlLHQpPT57ZT9uKGUpOihudWxsIT10JiZ0aGlzLnB1c2godCksby5lbmRlZHx8aT09PXIubGVuZ3RofHxyLmxlbmd0aDxyLmhpZ2hXYXRlck1hcms/bigpOnRoaXNbc109bil9KSl9LGMucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKCl7aWYodGhpc1tzXSl7Y29uc3QgZT10aGlzW3NdO3RoaXNbc109bnVsbCxlKCl9fX0sMTMyOihlLHQsbik9Pntjb25zdHtTeW1ib2w6cixTeW1ib2xBc3luY0l0ZXJhdG9yOm8sU3ltYm9sSXRlcmF0b3I6aSxTeW1ib2xGb3I6YX09bigxOTEpLGw9cihcImtEZXN0cm95ZWRcIikscz1yKFwia0lzRXJyb3JlZFwiKSxjPXIoXCJrSXNSZWFkYWJsZVwiKSx1PXIoXCJrSXNEaXN0dXJiZWRcIiksZj1hKFwibm9kZWpzLndlYnN0cmVhbS5pc0Nsb3NlZFByb21pc2VcIiksZD1hKFwibm9kZWpzLndlYnN0cmVhbS5jb250cm9sbGVyRXJyb3JGdW5jdGlvblwiKTtmdW5jdGlvbiBwKGUsdD0hMSl7dmFyIG47cmV0dXJuISghZXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5waXBlfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLm9ufHx0JiYoXCJmdW5jdGlvblwiIT10eXBlb2YgZS5wYXVzZXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5yZXN1bWUpfHxlLl93cml0YWJsZVN0YXRlJiYhMT09PShudWxsPT09KG49ZS5fcmVhZGFibGVTdGF0ZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4ucmVhZGFibGUpfHxlLl93cml0YWJsZVN0YXRlJiYhZS5fcmVhZGFibGVTdGF0ZSl9ZnVuY3Rpb24gaChlKXt2YXIgdDtyZXR1cm4hKCFlfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLndyaXRlfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLm9ufHxlLl9yZWFkYWJsZVN0YXRlJiYhMT09PShudWxsPT09KHQ9ZS5fd3JpdGFibGVTdGF0ZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQud3JpdGFibGUpKX1mdW5jdGlvbiBnKGUpe3JldHVybiBlJiYoZS5fcmVhZGFibGVTdGF0ZXx8ZS5fd3JpdGFibGVTdGF0ZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZS53cml0ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5vbnx8XCJmdW5jdGlvblwiPT10eXBlb2YgZS5waXBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLm9uKX1mdW5jdGlvbiB2KGUpe3JldHVybiEoIWV8fGcoZSl8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUucGlwZVRocm91Z2h8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUuZ2V0UmVhZGVyfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLmNhbmNlbCl9ZnVuY3Rpb24gbShlKXtyZXR1cm4hKCFlfHxnKGUpfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLmdldFdyaXRlcnx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5hYm9ydCl9ZnVuY3Rpb24gQyhlKXtyZXR1cm4hKCFlfHxnKGUpfHxcIm9iamVjdFwiIT10eXBlb2YgZS5yZWFkYWJsZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUud3JpdGFibGUpfWZ1bmN0aW9uIHkoZSl7aWYoIWcoZSkpcmV0dXJuIG51bGw7Y29uc3QgdD1lLl93cml0YWJsZVN0YXRlLG49ZS5fcmVhZGFibGVTdGF0ZSxyPXR8fG47cmV0dXJuISEoZS5kZXN0cm95ZWR8fGVbbF18fG51bGwhPXImJnIuZGVzdHJveWVkKX1mdW5jdGlvbiB3KGUpe2lmKCFoKGUpKXJldHVybiBudWxsO2lmKCEwPT09ZS53cml0YWJsZUVuZGVkKXJldHVybiEwO2NvbnN0IHQ9ZS5fd3JpdGFibGVTdGF0ZTtyZXR1cm4obnVsbD09dHx8IXQuZXJyb3JlZCkmJihcImJvb2xlYW5cIiE9dHlwZW9mKG51bGw9PXQ/dm9pZCAwOnQuZW5kZWQpP251bGw6dC5lbmRlZCl9ZnVuY3Rpb24gYihlLHQpe2lmKCFwKGUpKXJldHVybiBudWxsO2NvbnN0IG49ZS5fcmVhZGFibGVTdGF0ZTtyZXR1cm4obnVsbD09bnx8IW4uZXJyb3JlZCkmJihcImJvb2xlYW5cIiE9dHlwZW9mKG51bGw9PW4/dm9pZCAwOm4uZW5kRW1pdHRlZCk/bnVsbDohIShuLmVuZEVtaXR0ZWR8fCExPT09dCYmITA9PT1uLmVuZGVkJiYwPT09bi5sZW5ndGgpKX1mdW5jdGlvbiB4KGUpe3JldHVybiBlJiZudWxsIT1lW2NdP2VbY106XCJib29sZWFuXCIhPXR5cGVvZihudWxsPT1lP3ZvaWQgMDplLnJlYWRhYmxlKT9udWxsOiF5KGUpJiZwKGUpJiZlLnJlYWRhYmxlJiYhYihlKX1mdW5jdGlvbiBfKGUpe3JldHVyblwiYm9vbGVhblwiIT10eXBlb2YobnVsbD09ZT92b2lkIDA6ZS53cml0YWJsZSk/bnVsbDoheShlKSYmaChlKSYmZS53cml0YWJsZSYmIXcoZSl9ZnVuY3Rpb24gTyhlKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGUuX2Nsb3NlZCYmXCJib29sZWFuXCI9PXR5cGVvZiBlLl9kZWZhdWx0S2VlcEFsaXZlJiZcImJvb2xlYW5cIj09dHlwZW9mIGUuX3JlbW92ZWRDb25uZWN0aW9uJiZcImJvb2xlYW5cIj09dHlwZW9mIGUuX3JlbW92ZWRDb250TGVufWZ1bmN0aW9uIEwoZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlLl9zZW50MTAwJiZPKGUpfWUuZXhwb3J0cz17a0Rlc3Ryb3llZDpsLGlzRGlzdHVyYmVkOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiEoIWV8fCEobnVsbCE9PSh0PWVbdV0pJiZ2b2lkIDAhPT10P3Q6ZS5yZWFkYWJsZURpZFJlYWR8fGUucmVhZGFibGVBYm9ydGVkKSl9LGtJc0Rpc3R1cmJlZDp1LGlzRXJyb3JlZDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxpLGEsbCxjLHUsZjtyZXR1cm4hKCFlfHwhKG51bGwhPT0odD1udWxsIT09KG49bnVsbCE9PShyPW51bGwhPT0obz1udWxsIT09KGk9bnVsbCE9PShhPWVbc10pJiZ2b2lkIDAhPT1hP2E6ZS5yZWFkYWJsZUVycm9yZWQpJiZ2b2lkIDAhPT1pP2k6ZS53cml0YWJsZUVycm9yZWQpJiZ2b2lkIDAhPT1vP286bnVsbD09PShsPWUuX3JlYWRhYmxlU3RhdGUpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmVycm9yRW1pdHRlZCkmJnZvaWQgMCE9PXI/cjpudWxsPT09KGM9ZS5fd3JpdGFibGVTdGF0ZSl8fHZvaWQgMD09PWM/dm9pZCAwOmMuZXJyb3JFbWl0dGVkKSYmdm9pZCAwIT09bj9uOm51bGw9PT0odT1lLl9yZWFkYWJsZVN0YXRlKXx8dm9pZCAwPT09dT92b2lkIDA6dS5lcnJvcmVkKSYmdm9pZCAwIT09dD90Om51bGw9PT0oZj1lLl93cml0YWJsZVN0YXRlKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5lcnJvcmVkKSl9LGtJc0Vycm9yZWQ6cyxpc1JlYWRhYmxlOngsa0lzUmVhZGFibGU6YyxrSXNDbG9zZWRQcm9taXNlOmYsa0NvbnRyb2xsZXJFcnJvckZ1bmN0aW9uOmQsaXNDbG9zZWQ6ZnVuY3Rpb24oZSl7aWYoIWcoZSkpcmV0dXJuIG51bGw7aWYoXCJib29sZWFuXCI9PXR5cGVvZiBlLmNsb3NlZClyZXR1cm4gZS5jbG9zZWQ7Y29uc3QgdD1lLl93cml0YWJsZVN0YXRlLG49ZS5fcmVhZGFibGVTdGF0ZTtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mKG51bGw9PXQ/dm9pZCAwOnQuY2xvc2VkKXx8XCJib29sZWFuXCI9PXR5cGVvZihudWxsPT1uP3ZvaWQgMDpuLmNsb3NlZCk/KG51bGw9PXQ/dm9pZCAwOnQuY2xvc2VkKXx8KG51bGw9PW4/dm9pZCAwOm4uY2xvc2VkKTpcImJvb2xlYW5cIj09dHlwZW9mIGUuX2Nsb3NlZCYmTyhlKT9lLl9jbG9zZWQ6bnVsbH0saXNEZXN0cm95ZWQ6eSxpc0R1cGxleE5vZGVTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5waXBlfHwhZS5fcmVhZGFibGVTdGF0ZXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5vbnx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS53cml0ZSl9LGlzRmluaXNoZWQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyhlKT8hKCF5KGUpJiYoITEhPT0obnVsbD09dD92b2lkIDA6dC5yZWFkYWJsZSkmJngoZSl8fCExIT09KG51bGw9PXQ/dm9pZCAwOnQud3JpdGFibGUpJiZfKGUpKSk6bnVsbH0saXNJdGVyYWJsZTpmdW5jdGlvbihlLHQpe3JldHVybiBudWxsIT1lJiYoITA9PT10P1wiZnVuY3Rpb25cIj09dHlwZW9mIGVbb106ITE9PT10P1wiZnVuY3Rpb25cIj09dHlwZW9mIGVbaV06XCJmdW5jdGlvblwiPT10eXBlb2YgZVtvXXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZVtpXSl9LGlzUmVhZGFibGVOb2RlU3RyZWFtOnAsaXNSZWFkYWJsZVN0cmVhbTp2LGlzUmVhZGFibGVFbmRlZDpmdW5jdGlvbihlKXtpZighcChlKSlyZXR1cm4gbnVsbDtpZighMD09PWUucmVhZGFibGVFbmRlZClyZXR1cm4hMDtjb25zdCB0PWUuX3JlYWRhYmxlU3RhdGU7cmV0dXJuISghdHx8dC5lcnJvcmVkKSYmKFwiYm9vbGVhblwiIT10eXBlb2YobnVsbD09dD92b2lkIDA6dC5lbmRlZCk/bnVsbDp0LmVuZGVkKX0saXNSZWFkYWJsZUZpbmlzaGVkOmIsaXNSZWFkYWJsZUVycm9yZWQ6ZnVuY3Rpb24oZSl7dmFyIHQsbjtyZXR1cm4gZyhlKT9lLnJlYWRhYmxlRXJyb3JlZD9lLnJlYWRhYmxlRXJyb3JlZDpudWxsIT09KHQ9bnVsbD09PShuPWUuX3JlYWRhYmxlU3RhdGUpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmVycm9yZWQpJiZ2b2lkIDAhPT10P3Q6bnVsbDpudWxsfSxpc05vZGVTdHJlYW06Zyxpc1dlYlN0cmVhbTpmdW5jdGlvbihlKXtyZXR1cm4gdihlKXx8bShlKXx8QyhlKX0saXNXcml0YWJsZTpfLGlzV3JpdGFibGVOb2RlU3RyZWFtOmgsaXNXcml0YWJsZVN0cmVhbTptLGlzV3JpdGFibGVFbmRlZDp3LGlzV3JpdGFibGVGaW5pc2hlZDpmdW5jdGlvbihlLHQpe2lmKCFoKGUpKXJldHVybiBudWxsO2lmKCEwPT09ZS53cml0YWJsZUZpbmlzaGVkKXJldHVybiEwO2NvbnN0IG49ZS5fd3JpdGFibGVTdGF0ZTtyZXR1cm4obnVsbD09bnx8IW4uZXJyb3JlZCkmJihcImJvb2xlYW5cIiE9dHlwZW9mKG51bGw9PW4/dm9pZCAwOm4uZmluaXNoZWQpP251bGw6ISEobi5maW5pc2hlZHx8ITE9PT10JiYhMD09PW4uZW5kZWQmJjA9PT1uLmxlbmd0aCkpfSxpc1dyaXRhYmxlRXJyb3JlZDpmdW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiBnKGUpP2Uud3JpdGFibGVFcnJvcmVkP2Uud3JpdGFibGVFcnJvcmVkOm51bGwhPT0odD1udWxsPT09KG49ZS5fd3JpdGFibGVTdGF0ZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZXJyb3JlZCkmJnZvaWQgMCE9PXQ/dDpudWxsOm51bGx9LGlzU2VydmVyUmVxdWVzdDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGUuX2NvbnN1bWluZyYmXCJib29sZWFuXCI9PXR5cGVvZiBlLl9kdW1wZWQmJnZvaWQgMD09PShudWxsPT09KHQ9ZS5yZXEpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LnVwZ3JhZGVPckNvbm5lY3QpfSxpc1NlcnZlclJlc3BvbnNlOkwsd2lsbEVtaXRDbG9zZTpmdW5jdGlvbihlKXtpZighZyhlKSlyZXR1cm4gbnVsbDtjb25zdCB0PWUuX3dyaXRhYmxlU3RhdGUsbj1lLl9yZWFkYWJsZVN0YXRlLHI9dHx8bjtyZXR1cm4hciYmTChlKXx8ISEociYmci5hdXRvRGVzdHJveSYmci5lbWl0Q2xvc2UmJiExPT09ci5jbG9zZWQpfSxpc1RyYW5zZm9ybVN0cmVhbTpDfX0sMzczOihlLHQsbik9Pntjb25zdCByPW4oNTMzKSx7QXJyYXlQcm90b3R5cGVTbGljZTpvLEVycm9yOmksRnVuY3Rpb25Qcm90b3R5cGVTeW1ib2xIYXNJbnN0YW5jZTphLE9iamVjdERlZmluZVByb3BlcnR5OmwsT2JqZWN0RGVmaW5lUHJvcGVydGllczpzLE9iamVjdFNldFByb3RvdHlwZU9mOmMsU3RyaW5nUHJvdG90eXBlVG9Mb3dlckNhc2U6dSxTeW1ib2w6ZixTeW1ib2xIYXNJbnN0YW5jZTpkfT1uKDE5MSk7ZS5leHBvcnRzPUEsQS5Xcml0YWJsZVN0YXRlPVA7Y29uc3R7RXZlbnRFbWl0dGVyOnB9PW4oNDY1KSxoPW4oMjAwKS5TdHJlYW0se0J1ZmZlcjpnfT1uKDQ4NSksdj1uKDIzMCkse2FkZEFib3J0U2lnbmFsOm19PW4oMzc0KSx7Z2V0SGlnaFdhdGVyTWFyazpDLGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrOnl9PW4oNDk4KSx7RVJSX0lOVkFMSURfQVJHX1RZUEU6dyxFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRDpiLEVSUl9NVUxUSVBMRV9DQUxMQkFDSzp4LEVSUl9TVFJFQU1fQ0FOTk9UX1BJUEU6XyxFUlJfU1RSRUFNX0RFU1RST1lFRDpPLEVSUl9TVFJFQU1fQUxSRUFEWV9GSU5JU0hFRDpMLEVSUl9TVFJFQU1fTlVMTF9WQUxVRVM6RSxFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORDpTLEVSUl9VTktOT1dOX0VOQ09ESU5HOmp9PW4oMTQxKS5jb2Rlcyx7ZXJyb3JPckRlc3Ryb3k6TX09djtmdW5jdGlvbiBrKCl7fWMoQS5wcm90b3R5cGUsaC5wcm90b3R5cGUpLGMoQSxoKTtjb25zdCBSPWYoXCJrT25GaW5pc2hlZFwiKTtmdW5jdGlvbiBQKGUsdCxyKXtcImJvb2xlYW5cIiE9dHlwZW9mIHImJihyPXQgaW5zdGFuY2VvZiBuKDE4MikpLHRoaXMub2JqZWN0TW9kZT0hKCFlfHwhZS5vYmplY3RNb2RlKSxyJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISghZXx8IWUud3JpdGFibGVPYmplY3RNb2RlKSksdGhpcy5oaWdoV2F0ZXJNYXJrPWU/Qyh0aGlzLGUsXCJ3cml0YWJsZUhpZ2hXYXRlck1hcmtcIixyKTp5KCExKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMTtjb25zdCBvPSEoIWV8fCExIT09ZS5kZWNvZGVTdHJpbmdzKTt0aGlzLmRlY29kZVN0cmluZ3M9IW8sdGhpcy5kZWZhdWx0RW5jb2Rpbmc9ZSYmZS5kZWZhdWx0RW5jb2Rpbmd8fFwidXRmOFwiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9Vi5iaW5kKHZvaWQgMCx0KSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5hZnRlcldyaXRlVGlja0luZm89bnVsbCxJKHRoaXMpLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5jb25zdHJ1Y3RlZD0hMCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuZW1pdENsb3NlPSFlfHwhMSE9PWUuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9IWV8fCExIT09ZS5hdXRvRGVzdHJveSx0aGlzLmVycm9yZWQ9bnVsbCx0aGlzLmNsb3NlZD0hMSx0aGlzLmNsb3NlRW1pdHRlZD0hMSx0aGlzW1JdPVtdfWZ1bmN0aW9uIEkoZSl7ZS5idWZmZXJlZD1bXSxlLmJ1ZmZlcmVkSW5kZXg9MCxlLmFsbEJ1ZmZlcnM9ITAsZS5hbGxOb29wPSEwfWZ1bmN0aW9uIEEoZSl7Y29uc3QgdD10aGlzIGluc3RhbmNlb2YgbigxODIpO2lmKCF0JiYhYShBLHRoaXMpKXJldHVybiBuZXcgQShlKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBQKGUsdGhpcyx0KSxlJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS53cml0ZSYmKHRoaXMuX3dyaXRlPWUud3JpdGUpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUud3JpdGV2JiYodGhpcy5fd3JpdGV2PWUud3JpdGV2KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PWUuZGVzdHJveSksXCJmdW5jdGlvblwiPT10eXBlb2YgZS5maW5hbCYmKHRoaXMuX2ZpbmFsPWUuZmluYWwpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY29uc3RydWN0JiYodGhpcy5fY29uc3RydWN0PWUuY29uc3RydWN0KSxlLnNpZ25hbCYmbShlLnNpZ25hbCx0aGlzKSksaC5jYWxsKHRoaXMsZSksdi5jb25zdHJ1Y3QodGhpcywoKCk9Pntjb25zdCBlPXRoaXMuX3dyaXRhYmxlU3RhdGU7ZS53cml0aW5nfHxOKHRoaXMsZSksVSh0aGlzLGUpfSkpfWZ1bmN0aW9uIFQoZSx0LG4sbyl7Y29uc3QgaT1lLl93cml0YWJsZVN0YXRlO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pbz1uLG49aS5kZWZhdWx0RW5jb2Rpbmc7ZWxzZXtpZihuKXtpZihcImJ1ZmZlclwiIT09biYmIWcuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgaihuKX1lbHNlIG49aS5kZWZhdWx0RW5jb2Rpbmc7XCJmdW5jdGlvblwiIT10eXBlb2YgbyYmKG89ayl9aWYobnVsbD09PXQpdGhyb3cgbmV3IEU7aWYoIWkub2JqZWN0TW9kZSlpZihcInN0cmluZ1wiPT10eXBlb2YgdCkhMSE9PWkuZGVjb2RlU3RyaW5ncyYmKHQ9Zy5mcm9tKHQsbiksbj1cImJ1ZmZlclwiKTtlbHNlIGlmKHQgaW5zdGFuY2VvZiBnKW49XCJidWZmZXJcIjtlbHNle2lmKCFoLl9pc1VpbnQ4QXJyYXkodCkpdGhyb3cgbmV3IHcoXCJjaHVua1wiLFtcInN0cmluZ1wiLFwiQnVmZmVyXCIsXCJVaW50OEFycmF5XCJdLHQpO3Q9aC5fdWludDhBcnJheVRvQnVmZmVyKHQpLG49XCJidWZmZXJcIn1sZXQgYTtyZXR1cm4gaS5lbmRpbmc/YT1uZXcgUzppLmRlc3Ryb3llZCYmKGE9bmV3IE8oXCJ3cml0ZVwiKSksYT8oci5uZXh0VGljayhvLGEpLE0oZSxhLCEwKSxhKTooaS5wZW5kaW5nY2IrKyxmdW5jdGlvbihlLHQsbixyLG8pe2NvbnN0IGk9dC5vYmplY3RNb2RlPzE6bi5sZW5ndGg7dC5sZW5ndGgrPWk7Y29uc3QgYT10Lmxlbmd0aDx0LmhpZ2hXYXRlck1hcms7cmV0dXJuIGF8fCh0Lm5lZWREcmFpbj0hMCksdC53cml0aW5nfHx0LmNvcmtlZHx8dC5lcnJvcmVkfHwhdC5jb25zdHJ1Y3RlZD8odC5idWZmZXJlZC5wdXNoKHtjaHVuazpuLGVuY29kaW5nOnIsY2FsbGJhY2s6b30pLHQuYWxsQnVmZmVycyYmXCJidWZmZXJcIiE9PXImJih0LmFsbEJ1ZmZlcnM9ITEpLHQuYWxsTm9vcCYmbyE9PWsmJih0LmFsbE5vb3A9ITEpKToodC53cml0ZWxlbj1pLHQud3JpdGVjYj1vLHQud3JpdGluZz0hMCx0LnN5bmM9ITAsZS5fd3JpdGUobixyLHQub253cml0ZSksdC5zeW5jPSExKSxhJiYhdC5lcnJvcmVkJiYhdC5kZXN0cm95ZWR9KGUsaSx0LG4sbykpfWZ1bmN0aW9uIEgoZSx0LG4scixvLGksYSl7dC53cml0ZWxlbj1yLHQud3JpdGVjYj1hLHQud3JpdGluZz0hMCx0LnN5bmM9ITAsdC5kZXN0cm95ZWQ/dC5vbndyaXRlKG5ldyBPKFwid3JpdGVcIikpOm4/ZS5fd3JpdGV2KG8sdC5vbndyaXRlKTplLl93cml0ZShvLGksdC5vbndyaXRlKSx0LnN5bmM9ITF9ZnVuY3Rpb24gQihlLHQsbixyKXstLXQucGVuZGluZ2NiLHIobiksJCh0KSxNKGUsbil9ZnVuY3Rpb24gVihlLHQpe2NvbnN0IG49ZS5fd3JpdGFibGVTdGF0ZSxvPW4uc3luYyxpPW4ud3JpdGVjYjtcImZ1bmN0aW9uXCI9PXR5cGVvZiBpPyhuLndyaXRpbmc9ITEsbi53cml0ZWNiPW51bGwsbi5sZW5ndGgtPW4ud3JpdGVsZW4sbi53cml0ZWxlbj0wLHQ/KHQuc3RhY2ssbi5lcnJvcmVkfHwobi5lcnJvcmVkPXQpLGUuX3JlYWRhYmxlU3RhdGUmJiFlLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQmJihlLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQ9dCksbz9yLm5leHRUaWNrKEIsZSxuLHQsaSk6QihlLG4sdCxpKSk6KG4uYnVmZmVyZWQubGVuZ3RoPm4uYnVmZmVyZWRJbmRleCYmTihlLG4pLG8/bnVsbCE9PW4uYWZ0ZXJXcml0ZVRpY2tJbmZvJiZuLmFmdGVyV3JpdGVUaWNrSW5mby5jYj09PWk/bi5hZnRlcldyaXRlVGlja0luZm8uY291bnQrKzoobi5hZnRlcldyaXRlVGlja0luZm89e2NvdW50OjEsY2I6aSxzdHJlYW06ZSxzdGF0ZTpufSxyLm5leHRUaWNrKEQsbi5hZnRlcldyaXRlVGlja0luZm8pKTpaKGUsbiwxLGkpKSk6TShlLG5ldyB4KX1mdW5jdGlvbiBEKHtzdHJlYW06ZSxzdGF0ZTp0LGNvdW50Om4sY2I6cn0pe3JldHVybiB0LmFmdGVyV3JpdGVUaWNrSW5mbz1udWxsLFooZSx0LG4scil9ZnVuY3Rpb24gWihlLHQsbixyKXtmb3IoIXQuZW5kaW5nJiYhZS5kZXN0cm95ZWQmJjA9PT10Lmxlbmd0aCYmdC5uZWVkRHJhaW4mJih0Lm5lZWREcmFpbj0hMSxlLmVtaXQoXCJkcmFpblwiKSk7bi0tID4wOyl0LnBlbmRpbmdjYi0tLHIoKTt0LmRlc3Ryb3llZCYmJCh0KSxVKGUsdCl9ZnVuY3Rpb24gJChlKXtpZihlLndyaXRpbmcpcmV0dXJuO2ZvcihsZXQgbj1lLmJ1ZmZlcmVkSW5kZXg7bjxlLmJ1ZmZlcmVkLmxlbmd0aDsrK24pe3ZhciB0O2NvbnN0e2NodW5rOnIsY2FsbGJhY2s6b309ZS5idWZmZXJlZFtuXSxpPWUub2JqZWN0TW9kZT8xOnIubGVuZ3RoO2UubGVuZ3RoLT1pLG8obnVsbCE9PSh0PWUuZXJyb3JlZCkmJnZvaWQgMCE9PXQ/dDpuZXcgTyhcIndyaXRlXCIpKX1jb25zdCBuPWVbUl0uc3BsaWNlKDApO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcjtuW3RdKG51bGwhPT0ocj1lLmVycm9yZWQpJiZ2b2lkIDAhPT1yP3I6bmV3IE8oXCJlbmRcIikpfUkoZSl9ZnVuY3Rpb24gTihlLHQpe2lmKHQuY29ya2VkfHx0LmJ1ZmZlclByb2Nlc3Npbmd8fHQuZGVzdHJveWVkfHwhdC5jb25zdHJ1Y3RlZClyZXR1cm47Y29uc3R7YnVmZmVyZWQ6bixidWZmZXJlZEluZGV4OnIsb2JqZWN0TW9kZTppfT10LGE9bi5sZW5ndGgtcjtpZighYSlyZXR1cm47bGV0IGw9cjtpZih0LmJ1ZmZlclByb2Nlc3Npbmc9ITAsYT4xJiZlLl93cml0ZXYpe3QucGVuZGluZ2NiLT1hLTE7Y29uc3Qgcj10LmFsbE5vb3A/azplPT57Zm9yKGxldCB0PWw7dDxuLmxlbmd0aDsrK3Qpblt0XS5jYWxsYmFjayhlKX0saT10LmFsbE5vb3AmJjA9PT1sP246byhuLGwpO2kuYWxsQnVmZmVycz10LmFsbEJ1ZmZlcnMsSChlLHQsITAsdC5sZW5ndGgsaSxcIlwiLHIpLEkodCl9ZWxzZXtkb3tjb25zdHtjaHVuazpyLGVuY29kaW5nOm8sY2FsbGJhY2s6YX09bltsXTtuW2wrK109bnVsbCxIKGUsdCwhMSxpPzE6ci5sZW5ndGgscixvLGEpfXdoaWxlKGw8bi5sZW5ndGgmJiF0LndyaXRpbmcpO2w9PT1uLmxlbmd0aD9JKHQpOmw+MjU2PyhuLnNwbGljZSgwLGwpLHQuYnVmZmVyZWRJbmRleD0wKTp0LmJ1ZmZlcmVkSW5kZXg9bH10LmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gRihlKXtyZXR1cm4gZS5lbmRpbmcmJiFlLmRlc3Ryb3llZCYmZS5jb25zdHJ1Y3RlZCYmMD09PWUubGVuZ3RoJiYhZS5lcnJvcmVkJiYwPT09ZS5idWZmZXJlZC5sZW5ndGgmJiFlLmZpbmlzaGVkJiYhZS53cml0aW5nJiYhZS5lcnJvckVtaXR0ZWQmJiFlLmNsb3NlRW1pdHRlZH1mdW5jdGlvbiBVKGUsdCxuKXtGKHQpJiYoZnVuY3Rpb24oZSx0KXt0LnByZWZpbmlzaGVkfHx0LmZpbmFsQ2FsbGVkfHwoXCJmdW5jdGlvblwiIT10eXBlb2YgZS5fZmluYWx8fHQuZGVzdHJveWVkPyh0LnByZWZpbmlzaGVkPSEwLGUuZW1pdChcInByZWZpbmlzaFwiKSk6KHQuZmluYWxDYWxsZWQ9ITAsZnVuY3Rpb24oZSx0KXtsZXQgbj0hMTtmdW5jdGlvbiBvKG8pe2lmKG4pTShlLG51bGwhPW8/bzp4KCkpO2Vsc2UgaWYobj0hMCx0LnBlbmRpbmdjYi0tLG8pe2NvbnN0IG49dFtSXS5zcGxpY2UoMCk7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspbltlXShvKTtNKGUsbyx0LnN5bmMpfWVsc2UgRih0KSYmKHQucHJlZmluaXNoZWQ9ITAsZS5lbWl0KFwicHJlZmluaXNoXCIpLHQucGVuZGluZ2NiKyssci5uZXh0VGljayhXLGUsdCkpfXQuc3luYz0hMCx0LnBlbmRpbmdjYisrO3RyeXtlLl9maW5hbChvKX1jYXRjaChlKXtvKGUpfXQuc3luYz0hMX0oZSx0KSkpfShlLHQpLDA9PT10LnBlbmRpbmdjYiYmKG4/KHQucGVuZGluZ2NiKyssci5uZXh0VGljaygoKGUsdCk9PntGKHQpP1coZSx0KTp0LnBlbmRpbmdjYi0tfSksZSx0KSk6Rih0KSYmKHQucGVuZGluZ2NiKyssVyhlLHQpKSkpfWZ1bmN0aW9uIFcoZSx0KXt0LnBlbmRpbmdjYi0tLHQuZmluaXNoZWQ9ITA7Y29uc3Qgbj10W1JdLnNwbGljZSgwKTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyluW2VdKCk7aWYoZS5lbWl0KFwiZmluaXNoXCIpLHQuYXV0b0Rlc3Ryb3kpe2NvbnN0IHQ9ZS5fcmVhZGFibGVTdGF0ZTsoIXR8fHQuYXV0b0Rlc3Ryb3kmJih0LmVuZEVtaXR0ZWR8fCExPT09dC5yZWFkYWJsZSkpJiZlLmRlc3Ryb3koKX19UC5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5idWZmZXJlZCx0aGlzLmJ1ZmZlcmVkSW5kZXgpfSxsKFAucHJvdG90eXBlLFwiYnVmZmVyZWRSZXF1ZXN0Q291bnRcIix7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHRoaXMuYnVmZmVyZWQubGVuZ3RoLXRoaXMuYnVmZmVyZWRJbmRleH19KSxsKEEsZCx7X19wcm90b19fOm51bGwsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuISFhKHRoaXMsZSl8fHRoaXM9PT1BJiZlJiZlLl93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgUH19KSxBLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7TSh0aGlzLG5ldyBfKX0sQS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiEwPT09VCh0aGlzLGUsdCxuKX0sQS5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LEEucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe2NvbnN0IGU9dGhpcy5fd3JpdGFibGVTdGF0ZTtlLmNvcmtlZCYmKGUuY29ya2VkLS0sZS53cml0aW5nfHxOKHRoaXMsZSkpfSxBLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24oZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPXUoZSkpLCFnLmlzRW5jb2RpbmcoZSkpdGhyb3cgbmV3IGooZSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPWUsdGhpc30sQS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGUsdCxuKXtpZighdGhpcy5fd3JpdGV2KXRocm93IG5ldyBiKFwiX3dyaXRlKClcIik7dGhpcy5fd3JpdGV2KFt7Y2h1bms6ZSxlbmNvZGluZzp0fV0sbil9LEEucHJvdG90eXBlLl93cml0ZXY9bnVsbCxBLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oZSx0LG4pe2NvbnN0IG89dGhpcy5fd3JpdGFibGVTdGF0ZTtsZXQgYTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlPyhuPWUsZT1udWxsLHQ9bnVsbCk6XCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKG49dCx0PW51bGwpLG51bGwhPWUpe2NvbnN0IG49VCh0aGlzLGUsdCk7biBpbnN0YW5jZW9mIGkmJihhPW4pfXJldHVybiBvLmNvcmtlZCYmKG8uY29ya2VkPTEsdGhpcy51bmNvcmsoKSksYXx8KG8uZXJyb3JlZHx8by5lbmRpbmc/by5maW5pc2hlZD9hPW5ldyBMKFwiZW5kXCIpOm8uZGVzdHJveWVkJiYoYT1uZXcgTyhcImVuZFwiKSk6KG8uZW5kaW5nPSEwLFUodGhpcyxvLCEwKSxvLmVuZGVkPSEwKSksXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKGF8fG8uZmluaXNoZWQ/ci5uZXh0VGljayhuLGEpOm9bUl0ucHVzaChuKSksdGhpc30scyhBLnByb3RvdHlwZSx7Y2xvc2VkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4hIXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuY2xvc2VkfX0sZGVzdHJveWVkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4hIXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQoZSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPWUpfX0sd3JpdGFibGU6e19fcHJvdG9fXzpudWxsLGdldCgpe2NvbnN0IGU9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4hKCFlfHwhMT09PWUud3JpdGFibGV8fGUuZGVzdHJveWVkfHxlLmVycm9yZWR8fGUuZW5kaW5nfHxlLmVuZGVkKX0sc2V0KGUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlPSEhZSl9fSx3cml0YWJsZUZpbmlzaGVkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4hIXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWR9fSx3cml0YWJsZU9iamVjdE1vZGU6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiEhdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5vYmplY3RNb2RlfX0sd3JpdGFibGVCdWZmZXI6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0sd3JpdGFibGVFbmRlZDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuISF0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZ319LHdyaXRhYmxlTmVlZERyYWluOntfX3Byb3RvX186bnVsbCxnZXQoKXtjb25zdCBlPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuISFlJiYhZS5kZXN0cm95ZWQmJiFlLmVuZGluZyYmZS5uZWVkRHJhaW59fSx3cml0YWJsZUhpZ2hXYXRlck1hcms6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSx3cml0YWJsZUNvcmtlZDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQ6MH19LHdyaXRhYmxlTGVuZ3RoOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSxlcnJvcmVkOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JlZDpudWxsfX0sd3JpdGFibGVBYm9ydGVkOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiEoITE9PT10aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlfHwhdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQmJiF0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQpfX19KTtjb25zdCB6PXYuZGVzdHJveTtsZXQgRztmdW5jdGlvbiBxKCl7cmV0dXJuIHZvaWQgMD09PUcmJihHPXt9KSxHfUEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuIW4uZGVzdHJveWVkJiYobi5idWZmZXJlZEluZGV4PG4uYnVmZmVyZWQubGVuZ3RofHxuW1JdLmxlbmd0aCkmJnIubmV4dFRpY2soJCxuKSx6LmNhbGwodGhpcyxlLHQpLHRoaXN9LEEucHJvdG90eXBlLl91bmRlc3Ryb3k9di51bmRlc3Ryb3ksQS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSx0KXt0KGUpfSxBLnByb3RvdHlwZVtwLmNhcHR1cmVSZWplY3Rpb25TeW1ib2xdPWZ1bmN0aW9uKGUpe3RoaXMuZGVzdHJveShlKX0sQS5mcm9tV2ViPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHEoKS5uZXdTdHJlYW1Xcml0YWJsZUZyb21Xcml0YWJsZVN0cmVhbShlLHQpfSxBLnRvV2ViPWZ1bmN0aW9uKGUpe3JldHVybiBxKCkubmV3V3JpdGFibGVTdHJlYW1Gcm9tU3RyZWFtV3JpdGFibGUoZSl9fSw5MDQ6KGUsdCxuKT0+e2NvbnN0e0FycmF5SXNBcnJheTpyLEFycmF5UHJvdG90eXBlSW5jbHVkZXM6byxBcnJheVByb3RvdHlwZUpvaW46aSxBcnJheVByb3RvdHlwZU1hcDphLE51bWJlcklzSW50ZWdlcjpsLE51bWJlcklzTmFOOnMsTnVtYmVyTUFYX1NBRkVfSU5URUdFUjpjLE51bWJlck1JTl9TQUZFX0lOVEVHRVI6dSxOdW1iZXJQYXJzZUludDpmLE9iamVjdFByb3RvdHlwZUhhc093blByb3BlcnR5OmQsUmVnRXhwUHJvdG90eXBlRXhlYzpwLFN0cmluZzpoLFN0cmluZ1Byb3RvdHlwZVRvVXBwZXJDYXNlOmcsU3RyaW5nUHJvdG90eXBlVHJpbTp2fT1uKDE5MSkse2hpZGVTdGFja0ZyYW1lczptLGNvZGVzOntFUlJfU09DS0VUX0JBRF9QT1JUOkMsRVJSX0lOVkFMSURfQVJHX1RZUEU6eSxFUlJfSU5WQUxJRF9BUkdfVkFMVUU6dyxFUlJfT1VUX09GX1JBTkdFOmIsRVJSX1VOS05PV05fU0lHTkFMOnh9fT1uKDE0MSkse25vcm1hbGl6ZUVuY29kaW5nOl99PW4oNzc1KSx7aXNBc3luY0Z1bmN0aW9uOk8saXNBcnJheUJ1ZmZlclZpZXc6TH09big3NzUpLnR5cGVzLEU9e30sUz0vXlswLTddKyQvLGo9bSgoKGUsdCxuPXUscj1jKT0+e2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyB5KHQsXCJudW1iZXJcIixlKTtpZighbChlKSl0aHJvdyBuZXcgYih0LFwiYW4gaW50ZWdlclwiLGUpO2lmKGU8bnx8ZT5yKXRocm93IG5ldyBiKHQsYD49ICR7bn0gJiYgPD0gJHtyfWAsZSl9KSksTT1tKCgoZSx0LG49LTIxNDc0ODM2NDgscj0yMTQ3NDgzNjQ3KT0+e2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyB5KHQsXCJudW1iZXJcIixlKTtpZighbChlKSl0aHJvdyBuZXcgYih0LFwiYW4gaW50ZWdlclwiLGUpO2lmKGU8bnx8ZT5yKXRocm93IG5ldyBiKHQsYD49ICR7bn0gJiYgPD0gJHtyfWAsZSl9KSksaz1tKCgoZSx0LG49ITEpPT57aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHkodCxcIm51bWJlclwiLGUpO2lmKCFsKGUpKXRocm93IG5ldyBiKHQsXCJhbiBpbnRlZ2VyXCIsZSk7Y29uc3Qgcj1uPzE6MCxvPTQyOTQ5NjcyOTU7aWYoZTxyfHxlPm8pdGhyb3cgbmV3IGIodCxgPj0gJHtyfSAmJiA8PSAke299YCxlKX0pKTtmdW5jdGlvbiBSKGUsdCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHkodCxcInN0cmluZ1wiLGUpfWNvbnN0IFA9bSgoKGUsdCxuKT0+e2lmKCFvKG4sZSkpe2NvbnN0IHI9aShhKG4sKGU9Plwic3RyaW5nXCI9PXR5cGVvZiBlP2AnJHtlfSdgOmgoZSkpKSxcIiwgXCIpO3Rocm93IG5ldyB3KHQsZSxcIm11c3QgYmUgb25lIG9mOiBcIityKX19KSk7ZnVuY3Rpb24gSShlLHQpe2lmKFwiYm9vbGVhblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgeSh0LFwiYm9vbGVhblwiLGUpfWZ1bmN0aW9uIEEoZSx0LG4pe3JldHVybiBudWxsIT1lJiZkKGUsdCk/ZVt0XTpufWNvbnN0IFQ9bSgoKGUsdCxuPW51bGwpPT57Y29uc3Qgbz1BKG4sXCJhbGxvd0FycmF5XCIsITEpLGk9QShuLFwiYWxsb3dGdW5jdGlvblwiLCExKTtpZighQShuLFwibnVsbGFibGVcIiwhMSkmJm51bGw9PT1lfHwhbyYmcihlKXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJighaXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZSkpdGhyb3cgbmV3IHkodCxcIk9iamVjdFwiLGUpfSkpLEg9bSgoKGUsdCk9PntpZihudWxsIT1lJiZcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgeSh0LFwiYSBkaWN0aW9uYXJ5XCIsZSl9KSksQj1tKCgoZSx0LG49MCk9PntpZighcihlKSl0aHJvdyBuZXcgeSh0LFwiQXJyYXlcIixlKTtpZihlLmxlbmd0aDxuKXRocm93IG5ldyB3KHQsZSxgbXVzdCBiZSBsb25nZXIgdGhhbiAke259YCl9KSksVj1tKCgoZSx0PVwiYnVmZmVyXCIpPT57aWYoIUwoZSkpdGhyb3cgbmV3IHkodCxbXCJCdWZmZXJcIixcIlR5cGVkQXJyYXlcIixcIkRhdGFWaWV3XCJdLGUpfSkpLEQ9bSgoKGUsdCk9PntpZih2b2lkIDAhPT1lJiYobnVsbD09PWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlfHwhKFwiYWJvcnRlZFwiaW4gZSkpKXRocm93IG5ldyB5KHQsXCJBYm9ydFNpZ25hbFwiLGUpfSkpLFo9bSgoKGUsdCk9PntpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyB5KHQsXCJGdW5jdGlvblwiLGUpfSkpLCQ9bSgoKGUsdCk9PntpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlfHxPKGUpKXRocm93IG5ldyB5KHQsXCJGdW5jdGlvblwiLGUpfSkpLE49bSgoKGUsdCk9PntpZih2b2lkIDAhPT1lKXRocm93IG5ldyB5KHQsXCJ1bmRlZmluZWRcIixlKX0pKSxGPS9eKD86PFtePl0qPikoPzpcXHMqO1xccypbXjtcIlxcc10rKD86PShcIik/W147XCJcXHNdKlxcMSk/KSokLztmdW5jdGlvbiBVKGUsdCl7aWYodm9pZCAwPT09ZXx8IXAoRixlKSl0aHJvdyBuZXcgdyh0LGUsJ211c3QgYmUgYW4gYXJyYXkgb3Igc3RyaW5nIG9mIGZvcm1hdCBcIjwvc3R5bGVzLmNzcz47IHJlbD1wcmVsb2FkOyBhcz1zdHlsZVwiJyl9ZS5leHBvcnRzPXtpc0ludDMyOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09KDB8ZSl9LGlzVWludDMyOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09ZT4+PjB9LHBhcnNlRmlsZU1vZGU6ZnVuY3Rpb24oZSx0LG4pe2lmKHZvaWQgMD09PWUmJihlPW4pLFwic3RyaW5nXCI9PXR5cGVvZiBlKXtpZihudWxsPT09cChTLGUpKXRocm93IG5ldyB3KHQsZSxcIm11c3QgYmUgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBvciBhbiBvY3RhbCBzdHJpbmdcIik7ZT1mKGUsOCl9cmV0dXJuIGsoZSx0KSxlfSx2YWxpZGF0ZUFycmF5OkIsdmFsaWRhdGVTdHJpbmdBcnJheTpmdW5jdGlvbihlLHQpe0IoZSx0KTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKylSKGVbbl0sYCR7dH1bJHtufV1gKX0sdmFsaWRhdGVCb29sZWFuQXJyYXk6ZnVuY3Rpb24oZSx0KXtCKGUsdCk7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspSShlW25dLGAke3R9WyR7bn1dYCl9LHZhbGlkYXRlQm9vbGVhbjpJLHZhbGlkYXRlQnVmZmVyOlYsdmFsaWRhdGVEaWN0aW9uYXJ5OkgsdmFsaWRhdGVFbmNvZGluZzpmdW5jdGlvbihlLHQpe2NvbnN0IG49Xyh0KSxyPWUubGVuZ3RoO2lmKFwiaGV4XCI9PT1uJiZyJTIhPTApdGhyb3cgbmV3IHcoXCJlbmNvZGluZ1wiLHQsYGlzIGludmFsaWQgZm9yIGRhdGEgb2YgbGVuZ3RoICR7cn1gKX0sdmFsaWRhdGVGdW5jdGlvbjpaLHZhbGlkYXRlSW50MzI6TSx2YWxpZGF0ZUludGVnZXI6aix2YWxpZGF0ZU51bWJlcjpmdW5jdGlvbihlLHQsbj12b2lkIDAscil7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHkodCxcIm51bWJlclwiLGUpO2lmKG51bGwhPW4mJmU8bnx8bnVsbCE9ciYmZT5yfHwobnVsbCE9bnx8bnVsbCE9cikmJnMoZSkpdGhyb3cgbmV3IGIodCxgJHtudWxsIT1uP2A+PSAke259YDpcIlwifSR7bnVsbCE9biYmbnVsbCE9cj9cIiAmJiBcIjpcIlwifSR7bnVsbCE9cj9gPD0gJHtyfWA6XCJcIn1gLGUpfSx2YWxpZGF0ZU9iamVjdDpULHZhbGlkYXRlT25lT2Y6UCx2YWxpZGF0ZVBsYWluRnVuY3Rpb246JCx2YWxpZGF0ZVBvcnQ6ZnVuY3Rpb24oZSx0PVwiUG9ydFwiLG49ITApe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlJiZcInN0cmluZ1wiIT10eXBlb2YgZXx8XCJzdHJpbmdcIj09dHlwZW9mIGUmJjA9PT12KGUpLmxlbmd0aHx8K2UhPStlPj4+MHx8ZT42NTUzNXx8MD09PWUmJiFuKXRocm93IG5ldyBDKHQsZSxuKTtyZXR1cm4gMHxlfSx2YWxpZGF0ZVNpZ25hbE5hbWU6ZnVuY3Rpb24oZSx0PVwic2lnbmFsXCIpe2lmKFIoZSx0KSx2b2lkIDA9PT1FW2VdKXtpZih2b2lkIDAhPT1FW2coZSldKXRocm93IG5ldyB4KGUrXCIgKHNpZ25hbHMgbXVzdCB1c2UgYWxsIGNhcGl0YWwgbGV0dGVycylcIik7dGhyb3cgbmV3IHgoZSl9fSx2YWxpZGF0ZVN0cmluZzpSLHZhbGlkYXRlVWludDMyOmssdmFsaWRhdGVVbmRlZmluZWQ6Tix2YWxpZGF0ZVVuaW9uOmZ1bmN0aW9uKGUsdCxuKXtpZighbyhuLGUpKXRocm93IG5ldyB5KHQsYCgnJHtpKG4sXCJ8XCIpfScpYCxlKX0sdmFsaWRhdGVBYm9ydFNpZ25hbDpELHZhbGlkYXRlTGlua0hlYWRlclZhbHVlOmZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBVKGUsXCJoaW50c1wiKSxlO2lmKHIoZSkpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IG49XCJcIjtpZigwPT09dClyZXR1cm4gbjtmb3IobGV0IHI9MDtyPHQ7cisrKXtjb25zdCBvPWVbcl07VShvLFwiaGludHNcIiksbis9byxyIT09dC0xJiYobis9XCIsIFwiKX1yZXR1cm4gbn10aHJvdyBuZXcgdyhcImhpbnRzXCIsZSwnbXVzdCBiZSBhbiBhcnJheSBvciBzdHJpbmcgb2YgZm9ybWF0IFwiPC9zdHlsZXMuY3NzPjsgcmVsPXByZWxvYWQ7IGFzPXN0eWxlXCInKX19fSw5OTooZSx0LG4pPT57Y29uc3Qgcj1uKDI5Miksbz1uKDc2MCksaT1yLlJlYWRhYmxlLmRlc3Ryb3k7ZS5leHBvcnRzPXIuUmVhZGFibGUsZS5leHBvcnRzLl91aW50OEFycmF5VG9CdWZmZXI9ci5fdWludDhBcnJheVRvQnVmZmVyLGUuZXhwb3J0cy5faXNVaW50OEFycmF5PXIuX2lzVWludDhBcnJheSxlLmV4cG9ydHMuaXNEaXN0dXJiZWQ9ci5pc0Rpc3R1cmJlZCxlLmV4cG9ydHMuaXNFcnJvcmVkPXIuaXNFcnJvcmVkLGUuZXhwb3J0cy5pc1JlYWRhYmxlPXIuaXNSZWFkYWJsZSxlLmV4cG9ydHMuUmVhZGFibGU9ci5SZWFkYWJsZSxlLmV4cG9ydHMuV3JpdGFibGU9ci5Xcml0YWJsZSxlLmV4cG9ydHMuRHVwbGV4PXIuRHVwbGV4LGUuZXhwb3J0cy5UcmFuc2Zvcm09ci5UcmFuc2Zvcm0sZS5leHBvcnRzLlBhc3NUaHJvdWdoPXIuUGFzc1Rocm91Z2gsZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsPXIuYWRkQWJvcnRTaWduYWwsZS5leHBvcnRzLmZpbmlzaGVkPXIuZmluaXNoZWQsZS5leHBvcnRzLmRlc3Ryb3k9ci5kZXN0cm95LGUuZXhwb3J0cy5kZXN0cm95PWksZS5leHBvcnRzLnBpcGVsaW5lPXIucGlwZWxpbmUsZS5leHBvcnRzLmNvbXBvc2U9ci5jb21wb3NlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwicHJvbWlzZXNcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OigpPT5vfSksZS5leHBvcnRzLlN0cmVhbT1yLlN0cmVhbSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHN9LDE0MTooZSx0LG4pPT57Y29uc3R7Zm9ybWF0OnIsaW5zcGVjdDpvLEFnZ3JlZ2F0ZUVycm9yOml9PW4oNzc1KSxhPWdsb2JhbFRoaXMuQWdncmVnYXRlRXJyb3J8fGksbD1TeW1ib2woXCJrSXNOb2RlRXJyb3JcIikscz1bXCJzdHJpbmdcIixcImZ1bmN0aW9uXCIsXCJudW1iZXJcIixcIm9iamVjdFwiLFwiRnVuY3Rpb25cIixcIk9iamVjdFwiLFwiYm9vbGVhblwiLFwiYmlnaW50XCIsXCJzeW1ib2xcIl0sYz0vXihbQS1aXVthLXowLTldKikrJC8sdT17fTtmdW5jdGlvbiBmKGUsdCl7aWYoIWUpdGhyb3cgbmV3IHUuRVJSX0lOVEVSTkFMX0FTU0VSVElPTih0KX1mdW5jdGlvbiBkKGUpe2xldCB0PVwiXCIsbj1lLmxlbmd0aDtjb25zdCByPVwiLVwiPT09ZVswXT8xOjA7Zm9yKDtuPj1yKzQ7bi09Myl0PWBfJHtlLnNsaWNlKG4tMyxuKX0ke3R9YDtyZXR1cm5gJHtlLnNsaWNlKDAsbil9JHt0fWB9ZnVuY3Rpb24gcChlLHQsbil7bnx8KG49RXJyb3IpO2NsYXNzIG8gZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLm4pe3N1cGVyKGZ1bmN0aW9uKGUsdCxuKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXJldHVybiBmKHQubGVuZ3RoPD1uLmxlbmd0aCxgQ29kZTogJHtlfTsgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBsZW5ndGggKCR7bi5sZW5ndGh9KSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgb25lcyAoJHt0Lmxlbmd0aH0pLmApLHQoLi4ubik7Y29uc3Qgbz0odC5tYXRjaCgvJVtkZmlqb09zXS9nKXx8W10pLmxlbmd0aDtyZXR1cm4gZihvPT09bi5sZW5ndGgsYENvZGU6ICR7ZX07IFRoZSBwcm92aWRlZCBhcmd1bWVudHMgbGVuZ3RoICgke24ubGVuZ3RofSkgZG9lcyBub3QgbWF0Y2ggdGhlIHJlcXVpcmVkIG9uZXMgKCR7b30pLmApLDA9PT1uLmxlbmd0aD90OnIodCwuLi5uKX0oZSx0LG4pKX10b1N0cmluZygpe3JldHVybmAke3RoaXMubmFtZX0gWyR7ZX1dOiAke3RoaXMubWVzc2FnZX1gfX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhvLnByb3RvdHlwZSx7bmFtZTp7dmFsdWU6bi5uYW1lLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSx0b1N0cmluZzp7dmFsdWUoKXtyZXR1cm5gJHt0aGlzLm5hbWV9IFske2V9XTogJHt0aGlzLm1lc3NhZ2V9YH0sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9fSksby5wcm90b3R5cGUuY29kZT1lLG8ucHJvdG90eXBlW2xdPSEwLHVbZV09b31mdW5jdGlvbiBoKGUpe2NvbnN0IHQ9XCJfX25vZGVfaW50ZXJuYWxfXCIrZS5uYW1lO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIm5hbWVcIix7dmFsdWU6dH0pLGV9Y2xhc3MgZyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGU9XCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkXCIsdD12b2lkIDApe2lmKHZvaWQgMCE9PXQmJlwib2JqZWN0XCIhPXR5cGVvZiB0KXRocm93IG5ldyB1LkVSUl9JTlZBTElEX0FSR19UWVBFKFwib3B0aW9uc1wiLFwiT2JqZWN0XCIsdCk7c3VwZXIoZSx0KSx0aGlzLmNvZGU9XCJBQk9SVF9FUlJcIix0aGlzLm5hbWU9XCJBYm9ydEVycm9yXCJ9fXAoXCJFUlJfQVNTRVJUSU9OXCIsXCIlc1wiLEVycm9yKSxwKFwiRVJSX0lOVkFMSURfQVJHX1RZUEVcIiwoKGUsdCxuKT0+e2YoXCJzdHJpbmdcIj09dHlwZW9mIGUsXCInbmFtZScgbXVzdCBiZSBhIHN0cmluZ1wiKSxBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO2xldCByPVwiVGhlIFwiO2UuZW5kc1dpdGgoXCIgYXJndW1lbnRcIik/cis9YCR7ZX0gYDpyKz1gXCIke2V9XCIgJHtlLmluY2x1ZGVzKFwiLlwiKT9cInByb3BlcnR5XCI6XCJhcmd1bWVudFwifSBgLHIrPVwibXVzdCBiZSBcIjtjb25zdCBpPVtdLGE9W10sbD1bXTtmb3IoY29uc3QgZSBvZiB0KWYoXCJzdHJpbmdcIj09dHlwZW9mIGUsXCJBbGwgZXhwZWN0ZWQgZW50cmllcyBoYXZlIHRvIGJlIG9mIHR5cGUgc3RyaW5nXCIpLHMuaW5jbHVkZXMoZSk/aS5wdXNoKGUudG9Mb3dlckNhc2UoKSk6Yy50ZXN0KGUpP2EucHVzaChlKTooZihcIm9iamVjdFwiIT09ZSwnVGhlIHZhbHVlIFwib2JqZWN0XCIgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgXCJPYmplY3RcIicpLGwucHVzaChlKSk7aWYoYS5sZW5ndGg+MCl7Y29uc3QgZT1pLmluZGV4T2YoXCJvYmplY3RcIik7LTEhPT1lJiYoaS5zcGxpY2UoaSxlLDEpLGEucHVzaChcIk9iamVjdFwiKSl9aWYoaS5sZW5ndGg+MCl7c3dpdGNoKGkubGVuZ3RoKXtjYXNlIDE6cis9YG9mIHR5cGUgJHtpWzBdfWA7YnJlYWs7Y2FzZSAyOnIrPWBvbmUgb2YgdHlwZSAke2lbMF19IG9yICR7aVsxXX1gO2JyZWFrO2RlZmF1bHQ6e2NvbnN0IGU9aS5wb3AoKTtyKz1gb25lIG9mIHR5cGUgJHtpLmpvaW4oXCIsIFwiKX0sIG9yICR7ZX1gfX0oYS5sZW5ndGg+MHx8bC5sZW5ndGg+MCkmJihyKz1cIiBvciBcIil9aWYoYS5sZW5ndGg+MCl7c3dpdGNoKGEubGVuZ3RoKXtjYXNlIDE6cis9YGFuIGluc3RhbmNlIG9mICR7YVswXX1gO2JyZWFrO2Nhc2UgMjpyKz1gYW4gaW5zdGFuY2Ugb2YgJHthWzBdfSBvciAke2FbMV19YDticmVhaztkZWZhdWx0Ontjb25zdCBlPWEucG9wKCk7cis9YGFuIGluc3RhbmNlIG9mICR7YS5qb2luKFwiLCBcIil9LCBvciAke2V9YH19bC5sZW5ndGg+MCYmKHIrPVwiIG9yIFwiKX1zd2l0Y2gobC5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6bFswXS50b0xvd2VyQ2FzZSgpIT09bFswXSYmKHIrPVwiYW4gXCIpLHIrPWAke2xbMF19YDticmVhaztjYXNlIDI6cis9YG9uZSBvZiAke2xbMF19IG9yICR7bFsxXX1gO2JyZWFrO2RlZmF1bHQ6e2NvbnN0IGU9bC5wb3AoKTtyKz1gb25lIG9mICR7bC5qb2luKFwiLCBcIil9LCBvciAke2V9YH19aWYobnVsbD09bilyKz1gLiBSZWNlaXZlZCAke259YDtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJm4ubmFtZSlyKz1gLiBSZWNlaXZlZCBmdW5jdGlvbiAke24ubmFtZX1gO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIG4pe3ZhciB1O251bGwhPT0odT1uLmNvbnN0cnVjdG9yKSYmdm9pZCAwIT09dSYmdS5uYW1lP3IrPWAuIFJlY2VpdmVkIGFuIGluc3RhbmNlIG9mICR7bi5jb25zdHJ1Y3Rvci5uYW1lfWA6cis9YC4gUmVjZWl2ZWQgJHtvKG4se2RlcHRoOi0xfSl9YH1lbHNle2xldCBlPW8obix7Y29sb3JzOiExfSk7ZS5sZW5ndGg+MjUmJihlPWAke2Uuc2xpY2UoMCwyNSl9Li4uYCkscis9YC4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBufSAoJHtlfSlgfXJldHVybiByfSksVHlwZUVycm9yKSxwKFwiRVJSX0lOVkFMSURfQVJHX1ZBTFVFXCIsKChlLHQsbj1cImlzIGludmFsaWRcIik9PntsZXQgcj1vKHQpO3JldHVybiByLmxlbmd0aD4xMjgmJihyPXIuc2xpY2UoMCwxMjgpK1wiLi4uXCIpLGBUaGUgJHtlLmluY2x1ZGVzKFwiLlwiKT9cInByb3BlcnR5XCI6XCJhcmd1bWVudFwifSAnJHtlfScgJHtufS4gUmVjZWl2ZWQgJHtyfWB9KSxUeXBlRXJyb3IpLHAoXCJFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUVcIiwoKGUsdCxuKT0+e3ZhciByO3JldHVybmBFeHBlY3RlZCAke2V9IHRvIGJlIHJldHVybmVkIGZyb20gdGhlIFwiJHt0fVwiIGZ1bmN0aW9uIGJ1dCBnb3QgJHtudWxsIT1uJiZudWxsIT09KHI9bi5jb25zdHJ1Y3RvcikmJnZvaWQgMCE9PXImJnIubmFtZT9gaW5zdGFuY2Ugb2YgJHtuLmNvbnN0cnVjdG9yLm5hbWV9YDpcInR5cGUgXCIrdHlwZW9mIG59LmB9KSxUeXBlRXJyb3IpLHAoXCJFUlJfTUlTU0lOR19BUkdTXCIsKCguLi5lKT0+e2xldCB0O2YoZS5sZW5ndGg+MCxcIkF0IGxlYXN0IG9uZSBhcmcgbmVlZHMgdG8gYmUgc3BlY2lmaWVkXCIpO2NvbnN0IG49ZS5sZW5ndGg7c3dpdGNoKGU9KEFycmF5LmlzQXJyYXkoZSk/ZTpbZV0pLm1hcCgoZT0+YFwiJHtlfVwiYCkpLmpvaW4oXCIgb3IgXCIpLG4pe2Nhc2UgMTp0Kz1gVGhlICR7ZVswXX0gYXJndW1lbnRgO2JyZWFrO2Nhc2UgMjp0Kz1gVGhlICR7ZVswXX0gYW5kICR7ZVsxXX0gYXJndW1lbnRzYDticmVhaztkZWZhdWx0Ontjb25zdCBuPWUucG9wKCk7dCs9YFRoZSAke2Uuam9pbihcIiwgXCIpfSwgYW5kICR7bn0gYXJndW1lbnRzYH19cmV0dXJuYCR7dH0gbXVzdCBiZSBzcGVjaWZpZWRgfSksVHlwZUVycm9yKSxwKFwiRVJSX09VVF9PRl9SQU5HRVwiLCgoZSx0LG4pPT57bGV0IHI7cmV0dXJuIGYodCwnTWlzc2luZyBcInJhbmdlXCIgYXJndW1lbnQnKSxOdW1iZXIuaXNJbnRlZ2VyKG4pJiZNYXRoLmFicyhuKT4yKiozMj9yPWQoU3RyaW5nKG4pKTpcImJpZ2ludFwiPT10eXBlb2Ygbj8ocj1TdHJpbmcobiksKG4+Mm4qKjMybnx8bjwtKDJuKiozMm4pKSYmKHI9ZChyKSkscis9XCJuXCIpOnI9byhuKSxgVGhlIHZhbHVlIG9mIFwiJHtlfVwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSAke3R9LiBSZWNlaXZlZCAke3J9YH0pLFJhbmdlRXJyb3IpLHAoXCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0tcIixcIkNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lc1wiLEVycm9yKSxwKFwiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URURcIixcIlRoZSAlcyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkXCIsRXJyb3IpLHAoXCJFUlJfU1RSRUFNX0FMUkVBRFlfRklOSVNIRURcIixcIkNhbm5vdCBjYWxsICVzIGFmdGVyIGEgc3RyZWFtIHdhcyBmaW5pc2hlZFwiLEVycm9yKSxwKFwiRVJSX1NUUkVBTV9DQU5OT1RfUElQRVwiLFwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZVwiLEVycm9yKSxwKFwiRVJSX1NUUkVBTV9ERVNUUk9ZRURcIixcIkNhbm5vdCBjYWxsICVzIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWRcIixFcnJvcikscChcIkVSUl9TVFJFQU1fTlVMTF9WQUxVRVNcIixcIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtXCIsVHlwZUVycm9yKSxwKFwiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0VcIixcIlByZW1hdHVyZSBjbG9zZVwiLEVycm9yKSxwKFwiRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRlwiLFwic3RyZWFtLnB1c2goKSBhZnRlciBFT0ZcIixFcnJvcikscChcIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlRcIixcInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50XCIsRXJyb3IpLHAoXCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORFwiLFwid3JpdGUgYWZ0ZXIgZW5kXCIsRXJyb3IpLHAoXCJFUlJfVU5LTk9XTl9FTkNPRElOR1wiLFwiVW5rbm93biBlbmNvZGluZzogJXNcIixUeXBlRXJyb3IpLGUuZXhwb3J0cz17QWJvcnRFcnJvcjpnLGFnZ3JlZ2F0ZVR3b0Vycm9yczpoKChmdW5jdGlvbihlLHQpe2lmKGUmJnQmJmUhPT10KXtpZihBcnJheS5pc0FycmF5KHQuZXJyb3JzKSlyZXR1cm4gdC5lcnJvcnMucHVzaChlKSx0O2NvbnN0IG49bmV3IGEoW3QsZV0sdC5tZXNzYWdlKTtyZXR1cm4gbi5jb2RlPXQuY29kZSxufXJldHVybiBlfHx0fSkpLGhpZGVTdGFja0ZyYW1lczpoLGNvZGVzOnV9fSwxOTE6ZT0+e2UuZXhwb3J0cz17QXJyYXlJc0FycmF5OmU9PkFycmF5LmlzQXJyYXkoZSksQXJyYXlQcm90b3R5cGVJbmNsdWRlczooZSx0KT0+ZS5pbmNsdWRlcyh0KSxBcnJheVByb3RvdHlwZUluZGV4T2Y6KGUsdCk9PmUuaW5kZXhPZih0KSxBcnJheVByb3RvdHlwZUpvaW46KGUsdCk9PmUuam9pbih0KSxBcnJheVByb3RvdHlwZU1hcDooZSx0KT0+ZS5tYXAodCksQXJyYXlQcm90b3R5cGVQb3A6KGUsdCk9PmUucG9wKHQpLEFycmF5UHJvdG90eXBlUHVzaDooZSx0KT0+ZS5wdXNoKHQpLEFycmF5UHJvdG90eXBlU2xpY2U6KGUsdCxuKT0+ZS5zbGljZSh0LG4pLEVycm9yLEZ1bmN0aW9uUHJvdG90eXBlQ2FsbDooZSx0LC4uLm4pPT5lLmNhbGwodCwuLi5uKSxGdW5jdGlvblByb3RvdHlwZVN5bWJvbEhhc0luc3RhbmNlOihlLHQpPT5GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXS5jYWxsKGUsdCksTWF0aEZsb29yOk1hdGguZmxvb3IsTnVtYmVyLE51bWJlcklzSW50ZWdlcjpOdW1iZXIuaXNJbnRlZ2VyLE51bWJlcklzTmFOOk51bWJlci5pc05hTixOdW1iZXJNQVhfU0FGRV9JTlRFR0VSOk51bWJlci5NQVhfU0FGRV9JTlRFR0VSLE51bWJlck1JTl9TQUZFX0lOVEVHRVI6TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsTnVtYmVyUGFyc2VJbnQ6TnVtYmVyLnBhcnNlSW50LE9iamVjdERlZmluZVByb3BlcnRpZXM6KGUsdCk9Pk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsdCksT2JqZWN0RGVmaW5lUHJvcGVydHk6KGUsdCxuKT0+T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxuKSxPYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6KGUsdCk9Pk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KSxPYmplY3RLZXlzOmU9Pk9iamVjdC5rZXlzKGUpLE9iamVjdFNldFByb3RvdHlwZU9mOihlLHQpPT5PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KSxQcm9taXNlLFByb21pc2VQcm90b3R5cGVDYXRjaDooZSx0KT0+ZS5jYXRjaCh0KSxQcm9taXNlUHJvdG90eXBlVGhlbjooZSx0LG4pPT5lLnRoZW4odCxuKSxQcm9taXNlUmVqZWN0OmU9PlByb21pc2UucmVqZWN0KGUpLFJlZmxlY3RBcHBseTpSZWZsZWN0LmFwcGx5LFJlZ0V4cFByb3RvdHlwZVRlc3Q6KGUsdCk9PmUudGVzdCh0KSxTYWZlU2V0OlNldCxTdHJpbmcsU3RyaW5nUHJvdG90eXBlU2xpY2U6KGUsdCxuKT0+ZS5zbGljZSh0LG4pLFN0cmluZ1Byb3RvdHlwZVRvTG93ZXJDYXNlOmU9PmUudG9Mb3dlckNhc2UoKSxTdHJpbmdQcm90b3R5cGVUb1VwcGVyQ2FzZTplPT5lLnRvVXBwZXJDYXNlKCksU3RyaW5nUHJvdG90eXBlVHJpbTplPT5lLnRyaW0oKSxTeW1ib2wsU3ltYm9sRm9yOlN5bWJvbC5mb3IsU3ltYm9sQXN5bmNJdGVyYXRvcjpTeW1ib2wuYXN5bmNJdGVyYXRvcixTeW1ib2xIYXNJbnN0YW5jZTpTeW1ib2wuaGFzSW5zdGFuY2UsU3ltYm9sSXRlcmF0b3I6U3ltYm9sLml0ZXJhdG9yLFR5cGVkQXJyYXlQcm90b3R5cGVTZXQ6KGUsdCxuKT0+ZS5zZXQodCxuKSxVaW50OEFycmF5fX0sNzc1OihlLHQsbik9Pntjb25zdCByPW4oNDg1KSxvPU9iamVjdC5nZXRQcm90b3R5cGVPZigoYXN5bmMgZnVuY3Rpb24oKXt9KSkuY29uc3RydWN0b3IsaT1nbG9iYWxUaGlzLkJsb2J8fHIuQmxvYixhPXZvaWQgMCE9PWk/ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBpfTpmdW5jdGlvbihlKXtyZXR1cm4hMX07Y2xhc3MgbCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBpbnB1dCB0byBiZSBhbiBBcnJheSwgZ290IFwiK3R5cGVvZiBlKTtsZXQgdD1cIlwiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPWAgICAgJHtlW25dLnN0YWNrfVxcbmA7c3VwZXIodCksdGhpcy5uYW1lPVwiQWdncmVnYXRlRXJyb3JcIix0aGlzLmVycm9ycz1lfX1lLmV4cG9ydHM9e0FnZ3JlZ2F0ZUVycm9yOmwsa0VtcHR5T2JqZWN0Ok9iamVjdC5mcmVlemUoe30pLG9uY2UoZSl7bGV0IHQ9ITE7cmV0dXJuIGZ1bmN0aW9uKC4uLm4pe3R8fCh0PSEwLGUuYXBwbHkodGhpcyxuKSl9fSxjcmVhdGVEZWZlcnJlZFByb21pc2U6ZnVuY3Rpb24oKXtsZXQgZSx0O3JldHVybntwcm9taXNlOm5ldyBQcm9taXNlKCgobixyKT0+e2U9bix0PXJ9KSkscmVzb2x2ZTplLHJlamVjdDp0fX0scHJvbWlzaWZ5OmU9Pm5ldyBQcm9taXNlKCgodCxuKT0+e2UoKChlLC4uLnIpPT5lP24oZSk6dCguLi5yKSkpfSkpLGRlYnVnbG9nOigpPT5mdW5jdGlvbigpe30sZm9ybWF0OihlLC4uLnQpPT5lLnJlcGxhY2UoLyUoW3NkaWZqXSkvZywoZnVuY3Rpb24oLi4uW2Usbl0pe2NvbnN0IHI9dC5zaGlmdCgpO3JldHVyblwiZlwiPT09bj9yLnRvRml4ZWQoNik6XCJqXCI9PT1uP0pTT04uc3RyaW5naWZ5KHIpOlwic1wiPT09biYmXCJvYmplY3RcIj09dHlwZW9mIHI/YCR7ci5jb25zdHJ1Y3RvciE9PU9iamVjdD9yLmNvbnN0cnVjdG9yLm5hbWU6XCJcIn0ge31gLnRyaW0oKTpyLnRvU3RyaW5nKCl9KSksaW5zcGVjdChlKXtzd2l0Y2godHlwZW9mIGUpe2Nhc2VcInN0cmluZ1wiOmlmKGUuaW5jbHVkZXMoXCInXCIpKXtpZighZS5pbmNsdWRlcygnXCInKSlyZXR1cm5gXCIke2V9XCJgO2lmKCFlLmluY2x1ZGVzKFwiYFwiKSYmIWUuaW5jbHVkZXMoXCIke1wiKSlyZXR1cm5gXFxgJHtlfVxcYGB9cmV0dXJuYCcke2V9J2A7Y2FzZVwibnVtYmVyXCI6cmV0dXJuIGlzTmFOKGUpP1wiTmFOXCI6T2JqZWN0LmlzKGUsLTApP1N0cmluZyhlKTplO2Nhc2VcImJpZ2ludFwiOnJldHVybmAke1N0cmluZyhlKX1uYDtjYXNlXCJib29sZWFuXCI6Y2FzZVwidW5kZWZpbmVkXCI6cmV0dXJuIFN0cmluZyhlKTtjYXNlXCJvYmplY3RcIjpyZXR1cm5cInt9XCJ9fSx0eXBlczp7aXNBc3luY0Z1bmN0aW9uOmU9PmUgaW5zdGFuY2VvZiBvLGlzQXJyYXlCdWZmZXJWaWV3OmU9PkFycmF5QnVmZmVyLmlzVmlldyhlKX0saXNCbG9iOmF9LGUuZXhwb3J0cy5wcm9taXNpZnkuY3VzdG9tPVN5bWJvbC5mb3IoXCJub2RlanMudXRpbC5wcm9taXNpZnkuY3VzdG9tXCIpfSwyOTI6KGUsdCxuKT0+e2NvbnN0e0J1ZmZlcjpyfT1uKDQ4NSkse09iamVjdERlZmluZVByb3BlcnR5Om8sT2JqZWN0S2V5czppLFJlZmxlY3RBcHBseTphfT1uKDE5MSkse3Byb21pc2lmeTp7Y3VzdG9tOmx9fT1uKDc3NSkse3N0cmVhbVJldHVybmluZ09wZXJhdG9yczpzLHByb21pc2VSZXR1cm5pbmdPcGVyYXRvcnM6Y309big1NTQpLHtjb2Rlczp7RVJSX0lMTEVHQUxfQ09OU1RSVUNUT1I6dX19PW4oMTQxKSxmPW4oODE4KSx7cGlwZWxpbmU6ZH09big3NTQpLHtkZXN0cm95ZXI6cH09bigyMzApLGg9big4NiksZz1uKDc2MCksdj1uKDEzMiksbT1lLmV4cG9ydHM9bigyMDApLlN0cmVhbTttLmlzRGlzdHVyYmVkPXYuaXNEaXN0dXJiZWQsbS5pc0Vycm9yZWQ9di5pc0Vycm9yZWQsbS5pc1JlYWRhYmxlPXYuaXNSZWFkYWJsZSxtLlJlYWRhYmxlPW4oODU4KTtmb3IoY29uc3QgeSBvZiBpKHMpKXtjb25zdCB3PXNbeV07ZnVuY3Rpb24gYiguLi5lKXtpZihuZXcudGFyZ2V0KXRocm93IHUoKTtyZXR1cm4gbS5SZWFkYWJsZS5mcm9tKGEodyx0aGlzLGUpKX1vKGIsXCJuYW1lXCIse19fcHJvdG9fXzpudWxsLHZhbHVlOncubmFtZX0pLG8oYixcImxlbmd0aFwiLHtfX3Byb3RvX186bnVsbCx2YWx1ZTp3Lmxlbmd0aH0pLG8obS5SZWFkYWJsZS5wcm90b3R5cGUseSx7X19wcm90b19fOm51bGwsdmFsdWU6YixlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWZvcihjb25zdCB4IG9mIGkoYykpe2NvbnN0IF89Y1t4XTtmdW5jdGlvbiBPKC4uLmUpe2lmKG5ldy50YXJnZXQpdGhyb3cgdSgpO3JldHVybiBhKF8sdGhpcyxlKX1vKE8sXCJuYW1lXCIse19fcHJvdG9fXzpudWxsLHZhbHVlOl8ubmFtZX0pLG8oTyxcImxlbmd0aFwiLHtfX3Byb3RvX186bnVsbCx2YWx1ZTpfLmxlbmd0aH0pLG8obS5SZWFkYWJsZS5wcm90b3R5cGUseCx7X19wcm90b19fOm51bGwsdmFsdWU6TyxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfW0uV3JpdGFibGU9bigzNzMpLG0uRHVwbGV4PW4oMTgyKSxtLlRyYW5zZm9ybT1uKDIxMCksbS5QYXNzVGhyb3VnaD1uKDQ2NyksbS5waXBlbGluZT1kO2NvbnN0e2FkZEFib3J0U2lnbmFsOkN9PW4oMzc0KTttLmFkZEFib3J0U2lnbmFsPUMsbS5maW5pc2hlZD1oLG0uZGVzdHJveT1wLG0uY29tcG9zZT1mLG8obSxcInByb21pc2VzXCIse19fcHJvdG9fXzpudWxsLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDooKT0+Z30pLG8oZCxsLHtfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiEwLGdldDooKT0+Zy5waXBlbGluZX0pLG8oaCxsLHtfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiEwLGdldDooKT0+Zy5maW5pc2hlZH0pLG0uU3RyZWFtPW0sbS5faXNVaW50OEFycmF5PWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgVWludDhBcnJheX0sbS5fdWludDhBcnJheVRvQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiByLmZyb20oZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCl9fSw3NjA6KGUsdCxuKT0+e2NvbnN0e0FycmF5UHJvdG90eXBlUG9wOnIsUHJvbWlzZTpvfT1uKDE5MSkse2lzSXRlcmFibGU6aSxpc05vZGVTdHJlYW06YSxpc1dlYlN0cmVhbTpsfT1uKDEzMikse3BpcGVsaW5lSW1wbDpzfT1uKDc1NCkse2ZpbmlzaGVkOmN9PW4oODYpO24oOTEpLGUuZXhwb3J0cz17ZmluaXNoZWQ6YyxwaXBlbGluZTpmdW5jdGlvbiguLi5lKXtyZXR1cm4gbmV3IG8oKCh0LG4pPT57bGV0IG8sYztjb25zdCB1PWVbZS5sZW5ndGgtMV07aWYodSYmXCJvYmplY3RcIj09dHlwZW9mIHUmJiFhKHUpJiYhaSh1KSYmIWwodSkpe2NvbnN0IHQ9cihlKTtvPXQuc2lnbmFsLGM9dC5lbmR9cyhlLCgoZSxyKT0+e2U/bihlKTp0KHIpfSkse3NpZ25hbDpvLGVuZDpjfSl9KSl9fX0sNTMzOmU9Pnt2YXIgdCxuLHI9ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIG8oKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIGkoKXt0aHJvdyBuZXcgRXJyb3IoXCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gYShlKXtpZih0PT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKCh0PT09b3x8IXQpJiZzZXRUaW1lb3V0KXJldHVybiB0PXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gdChlLDApfWNhdGNoKG4pe3RyeXtyZXR1cm4gdC5jYWxsKG51bGwsZSwwKX1jYXRjaChuKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSwwKX19fSFmdW5jdGlvbigpe3RyeXt0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpvfWNhdGNoKGUpe3Q9b310cnl7bj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0Oml9Y2F0Y2goZSl7bj1pfX0oKTt2YXIgbCxzPVtdLGM9ITEsdT0tMTtmdW5jdGlvbiBmKCl7YyYmbCYmKGM9ITEsbC5sZW5ndGg/cz1sLmNvbmNhdChzKTp1PS0xLHMubGVuZ3RoJiZkKCkpfWZ1bmN0aW9uIGQoKXtpZighYyl7dmFyIGU9YShmKTtjPSEwO2Zvcih2YXIgdD1zLmxlbmd0aDt0Oyl7Zm9yKGw9cyxzPVtdOysrdTx0OylsJiZsW3VdLnJ1bigpO3U9LTEsdD1zLmxlbmd0aH1sPW51bGwsYz0hMSxmdW5jdGlvbihlKXtpZihuPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoZSk7aWYoKG49PT1pfHwhbikmJmNsZWFyVGltZW91dClyZXR1cm4gbj1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXtyZXR1cm4gbihlKX1jYXRjaCh0KXt0cnl7cmV0dXJuIG4uY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBuLmNhbGwodGhpcyxlKX19fShlKX19ZnVuY3Rpb24gcChlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fWZ1bmN0aW9uIGgoKXt9ci5uZXh0VGljaz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3MucHVzaChuZXcgcChlLHQpKSwxIT09cy5sZW5ndGh8fGN8fGEoZCl9LHAucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LHIudGl0bGU9XCJicm93c2VyXCIsci5icm93c2VyPSEwLHIuZW52PXt9LHIuYXJndj1bXSxyLnZlcnNpb249XCJcIixyLnZlcnNpb25zPXt9LHIub249aCxyLmFkZExpc3RlbmVyPWgsci5vbmNlPWgsci5vZmY9aCxyLnJlbW92ZUxpc3RlbmVyPWgsci5yZW1vdmVBbGxMaXN0ZW5lcnM9aCxyLmVtaXQ9aCxyLnByZXBlbmRMaXN0ZW5lcj1oLHIucHJlcGVuZE9uY2VMaXN0ZW5lcj1oLHIubGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybltdfSxyLmJpbmRpbmc9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWRcIil9LHIuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuXCIvXCJ9LHIuY2hkaXI9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkXCIpfSxyLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSwzNzc6KGUsdCxuKT0+e3ZhciByPW4oNDg1KSxvPXIuQnVmZmVyO2Z1bmN0aW9uIGkoZSx0KXtmb3IodmFyIG4gaW4gZSl0W25dPWVbbl19ZnVuY3Rpb24gYShlLHQsbil7cmV0dXJuIG8oZSx0LG4pfW8uZnJvbSYmby5hbGxvYyYmby5hbGxvY1Vuc2FmZSYmby5hbGxvY1Vuc2FmZVNsb3c/ZS5leHBvcnRzPXI6KGkocix0KSx0LkJ1ZmZlcj1hKSxpKG8sYSksYS5mcm9tPWZ1bmN0aW9uKGUsdCxuKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXJcIik7cmV0dXJuIG8oZSx0LG4pfSxhLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlclwiKTt2YXIgcj1vKGUpO3JldHVybiB2b2lkIDAhPT10P1wic3RyaW5nXCI9PXR5cGVvZiBuP3IuZmlsbCh0LG4pOnIuZmlsbCh0KTpyLmZpbGwoMCkscn0sYS5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlclwiKTtyZXR1cm4gbyhlKX0sYS5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXJcIik7cmV0dXJuIHIuU2xvd0J1ZmZlcihlKX19LDQ2NDooZSx0LG4pPT57dmFyIHI9bigzNzcpLkJ1ZmZlcixvPXIuaXNFbmNvZGluZ3x8ZnVuY3Rpb24oZSl7c3dpdGNoKChlPVwiXCIrZSkmJmUudG9Mb3dlckNhc2UoKSl7Y2FzZVwiaGV4XCI6Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6Y2FzZVwiYXNjaWlcIjpjYXNlXCJiaW5hcnlcIjpjYXNlXCJiYXNlNjRcIjpjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpjYXNlXCJyYXdcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX07ZnVuY3Rpb24gaShlKXt2YXIgdDtzd2l0Y2godGhpcy5lbmNvZGluZz1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlKXtpZighZSlyZXR1cm5cInV0ZjhcIjtmb3IodmFyIHQ7Oylzd2l0Y2goZSl7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuXCJ1dGY4XCI7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuXCJ1dGYxNmxlXCI7Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuXCJsYXRpbjFcIjtjYXNlXCJiYXNlNjRcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImhleFwiOnJldHVybiBlO2RlZmF1bHQ6aWYodClyZXR1cm47ZT0oXCJcIitlKS50b0xvd2VyQ2FzZSgpLHQ9ITB9fShlKTtpZihcInN0cmluZ1wiIT10eXBlb2YgdCYmKHIuaXNFbmNvZGluZz09PW98fCFvKGUpKSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIitlKTtyZXR1cm4gdHx8ZX0oZSksdGhpcy5lbmNvZGluZyl7Y2FzZVwidXRmMTZsZVwiOnRoaXMudGV4dD1zLHRoaXMuZW5kPWMsdD00O2JyZWFrO2Nhc2VcInV0ZjhcIjp0aGlzLmZpbGxMYXN0PWwsdD00O2JyZWFrO2Nhc2VcImJhc2U2NFwiOnRoaXMudGV4dD11LHRoaXMuZW5kPWYsdD0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9ZCx2b2lkKHRoaXMuZW5kPXApfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9ci5hbGxvY1Vuc2FmZSh0KX1mdW5jdGlvbiBhKGUpe3JldHVybiBlPD0xMjc/MDplPj41PT02PzI6ZT4+ND09MTQ/MzplPj4zPT0zMD80OmU+PjY9PTI/LTE6LTJ9ZnVuY3Rpb24gbChlKXt2YXIgdD10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLG49ZnVuY3Rpb24oZSx0LG4pe2lmKDEyOCE9KDE5MiZ0WzBdKSlyZXR1cm4gZS5sYXN0TmVlZD0wLFwi77+9XCI7aWYoZS5sYXN0TmVlZD4xJiZ0Lmxlbmd0aD4xKXtpZigxMjghPSgxOTImdFsxXSkpcmV0dXJuIGUubGFzdE5lZWQ9MSxcIu+/vVwiO2lmKGUubGFzdE5lZWQ+MiYmdC5sZW5ndGg+MiYmMTI4IT0oMTkyJnRbMl0pKXJldHVybiBlLmxhc3ROZWVkPTIsXCLvv71cIn19KHRoaXMsZSk7cmV0dXJuIHZvaWQgMCE9PW4/bjp0aGlzLmxhc3ROZWVkPD1lLmxlbmd0aD8oZS5jb3B5KHRoaXMubGFzdENoYXIsdCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KGUuY29weSh0aGlzLmxhc3RDaGFyLHQsMCxlLmxlbmd0aCksdm9pZCh0aGlzLmxhc3ROZWVkLT1lLmxlbmd0aCkpfWZ1bmN0aW9uIHMoZSx0KXtpZigoZS5sZW5ndGgtdCklMj09MCl7dmFyIG49ZS50b1N0cmluZyhcInV0ZjE2bGVcIix0KTtpZihuKXt2YXIgcj1uLmNoYXJDb2RlQXQobi5sZW5ndGgtMSk7aWYocj49NTUyOTYmJnI8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPWVbZS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1lW2UubGVuZ3RoLTFdLG4uc2xpY2UoMCwtMSl9cmV0dXJuIG59cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09ZVtlLmxlbmd0aC0xXSxlLnRvU3RyaW5nKFwidXRmMTZsZVwiLHQsZS5sZW5ndGgtMSl9ZnVuY3Rpb24gYyhlKXt2YXIgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOlwiXCI7aWYodGhpcy5sYXN0TmVlZCl7dmFyIG49dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZDtyZXR1cm4gdCt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKFwidXRmMTZsZVwiLDAsbil9cmV0dXJuIHR9ZnVuY3Rpb24gdShlLHQpe3ZhciBuPShlLmxlbmd0aC10KSUzO3JldHVybiAwPT09bj9lLnRvU3RyaW5nKFwiYmFzZTY0XCIsdCk6KHRoaXMubGFzdE5lZWQ9My1uLHRoaXMubGFzdFRvdGFsPTMsMT09PW4/dGhpcy5sYXN0Q2hhclswXT1lW2UubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPWVbZS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1lW2UubGVuZ3RoLTFdKSxlLnRvU3RyaW5nKFwiYmFzZTY0XCIsdCxlLmxlbmd0aC1uKSl9ZnVuY3Rpb24gZihlKXt2YXIgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOlwiXCI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dCt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKFwiYmFzZTY0XCIsMCwzLXRoaXMubGFzdE5lZWQpOnR9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBwKGUpe3JldHVybiBlJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOlwiXCJ9dC5TdHJpbmdEZWNvZGVyPWksaS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSl7aWYoMD09PWUubGVuZ3RoKXJldHVyblwiXCI7dmFyIHQsbjtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0odD10aGlzLmZpbGxMYXN0KGUpKSlyZXR1cm5cIlwiO249dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSBuPTA7cmV0dXJuIG48ZS5sZW5ndGg/dD90K3RoaXMudGV4dChlLG4pOnRoaXMudGV4dChlLG4pOnR8fFwiXCJ9LGkucHJvdG90eXBlLmVuZD1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOlwiXCI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dCtcIu+/vVwiOnR9LGkucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC5sZW5ndGgtMTtpZihyPG4pcmV0dXJuIDA7dmFyIG89YSh0W3JdKTtyZXR1cm4gbz49MD8obz4wJiYoZS5sYXN0TmVlZD1vLTEpLG8pOi0tcjxufHwtMj09PW8/MDoobz1hKHRbcl0pKT49MD8obz4wJiYoZS5sYXN0TmVlZD1vLTIpLG8pOi0tcjxufHwtMj09PW8/MDoobz1hKHRbcl0pKT49MD8obz4wJiYoMj09PW8/bz0wOmUubGFzdE5lZWQ9by0zKSxvKTowfSh0aGlzLGUsdCk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIGUudG9TdHJpbmcoXCJ1dGY4XCIsdCk7dGhpcy5sYXN0VG90YWw9bjt2YXIgcj1lLmxlbmd0aC0obi10aGlzLmxhc3ROZWVkKTtyZXR1cm4gZS5jb3B5KHRoaXMubGFzdENoYXIsMCxyKSxlLnRvU3RyaW5nKFwidXRmOFwiLHQscil9LGkucHJvdG90eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKGUpe2lmKHRoaXMubGFzdE5lZWQ8PWUubGVuZ3RoKXJldHVybiBlLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO2UuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCxlLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09ZS5sZW5ndGh9fSw1NDooZSx0LG4pPT57bi5kKHQse01TOigpPT5rLGNGOigpPT5SLEFLOigpPT5QLE1fOigpPT5JLGNYOigpPT5BLEJUOigpPT5yZSxfVzooKT0+SCxQZzooKT0+aGUsJGo6KCk9PnRlLFUkOigpPT5OLFU3OigpPT5GfSk7dmFyIHI9e2Q6KGUsdCk9Pntmb3IodmFyIG4gaW4gdClyLm8odCxuKSYmIXIubyhlLG4pJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiEwLGdldDp0W25dfSl9LG86KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxvPXt9O3IuZChvLHtNUzooKT0+aSxjRjooKT0+YSxBSzooKT0+cyxNXzooKT0+bCxjWDooKT0+YyxZZDooKT0+dixuajooKT0+dSxPNDooKT0+TSxfVzooKT0+ZixVJDooKT0+cCxVNzooKT0+aH0pO2NsYXNzIGkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlLHQpe3ZhciBuLHI7c3VwZXIoZT1udWxsIT09KG49bnVsbCE9ZT9lOm51bGw9PXQ/dm9pZCAwOnQubWVzc2FnZSkmJnZvaWQgMCE9PW4/bjpcIkFuIHVuZXhwZWN0ZWQgZXJyb3IgaGFzIG9jY3VycmVkXCIpLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdGhpcy5zdGFjaz0oZT90aGlzLnN0YWNrOm51bGwhPT0ocj1udWxsPT10P3ZvaWQgMDp0LnN0YWNrKSYmdm9pZCAwIT09cj9yOnRoaXMuc3RhY2spLnJlcGxhY2UoL14oXFx3KkVycm9yKS8sYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfWApfX1jbGFzcyBhIGV4dGVuZHMgaXtjb25zdHJ1Y3RvcihlLHQsbil7dmFyIHI7c3VwZXIoZT1udWxsIT09KHI9bnVsbCE9ZT9lOm51bGw9PW4/dm9pZCAwOm4ubWVzc2FnZSkmJnZvaWQgMCE9PXI/cjpcIkFuIGVycm9yIG9jY3VycmVkIHdoZW4gZXhlY3V0aW5nIHRoZSBBUEkgcmVxdWVzdFwiLG4pLHRoaXMuc3RhdHVzPXR9fWNsYXNzIGwgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUsdCl7dmFyIG47c3VwZXIoZT1udWxsIT09KG49bnVsbCE9ZT9lOm51bGw9PXQ/dm9pZCAwOnQubWVzc2FnZSkmJnZvaWQgMCE9PW4/bjpcIkFuIGF1dGhvcml6YXRpb24gZXJyb3Igb2NjdXJyZWRcIix0KX19Y2xhc3MgcyBleHRlbmRzIGl7Y29uc3RydWN0b3IoZSx0KXt2YXIgbjtzdXBlcihlPW51bGwhPT0obj1udWxsIT1lP2U6bnVsbD09dD92b2lkIDA6dC5tZXNzYWdlKSYmdm9pZCAwIT09bj9uOlwiVGhlIEFQSSByZXF1ZXN0IGZhaWxlZCBhcyB0aGUgYXV0aG9yaXphdGlvbiB0b2tlbnMgaGF2ZSBleHBpcmVkXCIsdCl9fWNsYXNzIGMgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUsdCl7dmFyIG47c3VwZXIoZT1udWxsIT09KG49bnVsbCE9ZT9lOm51bGw9PXQ/dm9pZCAwOnQubWVzc2FnZSkmJnZvaWQgMCE9PW4/bjpcIkFuIGluaXRpYWxpemF0aW9uIGVycm9yIG9jY3VycmVkXCIsdCl9fWNsYXNzIHUgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUsdCl7dmFyIG47c3VwZXIoZT1udWxsIT09KG49bnVsbCE9ZT9lOm51bGw9PXQ/dm9pZCAwOnQubWVzc2FnZSkmJnZvaWQgMCE9PW4/bjpcIlRoZSBtZXRob2QgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkXCIsdCl9fWNsYXNzIGYgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGU9bnVsbCE9ZT9lOlwiSW52YWxpZCBwYXJhbWV0ZXIgZGV0ZWN0ZWRcIil9fWNvbnN0IGQ9ZT0+e2xldCB0PWZpbi5JbnRlZ3JhdGlvbnM7dHx8KGZpbi5JbnRlZ3JhdGlvbnM9e30sdD1maW4uSW50ZWdyYXRpb25zKTtsZXQgbj10W2VdO3JldHVybiBufHwodFtlXT17fSxuPXRbZV0pLG59LHA9ZT0+e2QoZSkubG9nZ2luZ0VuYWJsZWQ9ITF9LGg9KGUsdD1cIjAuMC4wXCIpPT57ZChlKS5sb2dnaW5nRW5hYmxlZD0hMCxnKGUpfSxnPWU9PmBbQG9wZW5maW4vJHtlLnRvTG93ZXJDYXNlKCl9XWA7Y2xhc3Mgdntjb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWU9ZSx0aGlzLnByZWZpeD1nKGUpLHRoaXMuaXNMb2dnaW5nRW5hYmxlZD10aGlzLmlzTG9nZ2luZ0VuYWJsZWQuYmluZCh0aGlzKSx0aGlzLmxvZ0Vycm9yPXRoaXMubG9nRXJyb3IuYmluZCh0aGlzKSx0aGlzLmxvZ0luZm89dGhpcy5sb2dJbmZvLmJpbmQodGhpcyksdGhpcy5sb2dXYXJuaW5nPXRoaXMubG9nV2FybmluZy5iaW5kKHRoaXMpfWlzTG9nZ2luZ0VuYWJsZWQoKXtyZXR1cm4gZCh0aGlzLm5hbWUpLmxvZ2dpbmdFbmFibGVkfWxvZ0Vycm9yKGUpe3RoaXMuaXNMb2dnaW5nRW5hYmxlZCgpJiYoZS5pbm5lckVycm9yP2NvbnNvbGUuZXJyb3IodGhpcy5wcmVmaXgsZSxcIlxcblxcbihpbm5lcilcIixlLmlubmVyRXJyb3IpOmNvbnNvbGUuZXJyb3IodGhpcy5wcmVmaXgsZSkpfWxvZ0luZm8oLi4uZSl7dGhpcy5pc0xvZ2dpbmdFbmFibGVkKCkmJnRoaXMucHJlZml4fWxvZ1dhcm5pbmcoLi4uZSl7dGhpcy5pc0xvZ2dpbmdFbmFibGVkKCkmJmNvbnNvbGUud2Fybih0aGlzLnByZWZpeCwuLi5lKX19Y29uc3QgbT1cIm9hdXRoLWFwaS1hdXRoLWZsb3dcIixDPShlLHQsbixyLG8sYSxsLHMpPT5hc3luYyBjPT57Y29uc3QgdT1uZXcgVVJMKGMpO2lmKDAhPT11LmhyZWYudG9Mb3dlckNhc2UoKS5pbmRleE9mKG8udG9Mb3dlckNhc2UoKSkpcmV0dXJuITE7aWYod2luZG93LmNsZWFySW50ZXJ2YWwocyksd2luZG93LmNsZWFyVGltZW91dCh0KSx3aW5kb3cuY2xlYXJUaW1lb3V0KG4pLGUucmVtb3ZlQWxsTGlzdGVuZXJzKCksZS5jbG9zZSghMCksdS5zZWFyY2hQYXJhbXMuZ2V0KFwiZXJyb3JcIikpe2NvbnN0IGU9bmV3IGkoXCJBdXRob3JpemF0aW9uIGVycm9yXCIpO3JldHVybiBlLmRhdGE9dS50b1N0cmluZygpLGwoZSksITB9aWYodS5zZWFyY2hQYXJhbXMuZ2V0KFwic3RhdGVcIikhPT1yKXtjb25zdCBlPW5ldyBpKFwiU3RhdGUgbWlzbWF0Y2hcIik7cmV0dXJuIGUuZGF0YT11LnRvU3RyaW5nKCksbChlKSwhMH1jb25zdCBmPXUuc2VhcmNoUGFyYW1zLmdldChcImNvZGVcIik7aWYoIWYpe2NvbnN0IGU9bmV3IGkoXCJBdXRob3JpemF0aW9uIGNvZGUgbWlzc2luZ1wiKTtyZXR1cm4gZS5kYXRhPXUudG9TdHJpbmcoKSxsKGUpLCEwfXJldHVybiBhKGYpLCEwfSx5PShlLHQsbixyKT0+YXN5bmMobyxhKT0+e2xldCBsO2NvbnN0IHM9d2luZG93LnNldFRpbWVvdXQoKCgpPT57d2luZG93LmNsZWFySW50ZXJ2YWwobCksd2luZG93LmNsZWFyVGltZW91dChzKSxlLnJlbW92ZUFsbExpc3RlbmVycygpLGUuY2xvc2UoITApLGEobmV3IGkoXCJBdXRob3JpemF0aW9uIHRpbWVkIG91dFwiKSl9KSwzZTUpO2UuYWRkTGlzdGVuZXIoXCJjbG9zaW5nXCIsKGFzeW5jKCk9PntyLmxvZ0luZm8oXCJVc2VyIGNsb3NlZCBhdXRoIHdpbmRvd1wiKSx3aW5kb3cuY2xlYXJJbnRlcnZhbChsKSx3aW5kb3cuY2xlYXJUaW1lb3V0KHMpLGUucmVtb3ZlQWxsTGlzdGVuZXJzKCksYShuZXcgaShcIkZhaWxlZCB0byBjb21wbGV0ZSBhdXRob3JpemF0aW9uIGNvZGUgZmxvd1wiKSl9KSk7Y29uc3QgYz13aW5kb3cuc2V0VGltZW91dCgoYXN5bmMoKT0+e3RyeXthd2FpdCBlLmlzU2hvd2luZygpfHwoci5sb2dJbmZvKFwiU2hvd2luZyBhdXRoIHdpbmRvd1wiKSxhd2FpdCBlLnNob3coITApLGF3YWl0IGUuZm9jdXMoKSl9Y2F0Y2goZSl7ci5sb2dXYXJuaW5nKFwiVW5hYmxlIHRvIHNob3cgYXV0aCB3aW5kb3dcIil9fSksMmUzKSx7dmVyc2lvbjp1fT1hd2FpdCBmaW4uU3lzdGVtLmdldFJ1bnRpbWVJbmZvKCk7cGFyc2VJbnQodS5zcGxpdChcIi5cIilbMF0sMTApPj0zMD9hd2FpdCBDKGUscyxjLHQsbixvLGEpKChhd2FpdCBlLmdldEluZm8oKSkudXJsKXx8YXdhaXQgZS5hZGRMaXN0ZW5lcihcInVybC1jaGFuZ2VkXCIsKGk9PntyLmxvZ0luZm8oXCJBdXRoIHdpbmRvdyBuYXZpZ2F0ZWQgdG9cIixpLnVybCksQyhlLHMsYyx0LG4sbyxhKShpLnVybCl9KSk6bD13aW5kb3cuc2V0SW50ZXJ2YWwoKCgpPT4oYXN5bmMoZSx0LG4scixvLGEsbCxzKT0+e2xldCBjO3RyeXtjPWF3YWl0IGUuZ2V0SW5mbygpfWNhdGNoKGUpe3JldHVybiB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0KSx3aW5kb3cuY2xlYXJUaW1lb3V0KG4pLHdpbmRvdy5jbGVhclRpbWVvdXQocikscyhuZXcgaShcIkNvdWxkIG5vdCBsb2NhdGUgYXV0aCB3aW5kb3dcIikpLCExfXJldHVybiBDKGUsbixyLG8sYSxsLHMsdCkoYy51cmwpfSkoZSxsLHMsYyx0LG4sbyxhKSksNTAwKX0sdz0oKT0+e2xldCBlLHQsbixyO2NvbnN0IG89YXN5bmModCxuPSExKT0+e2NvbnN0e2NvbW1hbmQ6cixkYXRhOmEsaWQ6bH09dCxzPXtjb21tYW5kOnIsaWQ6bH07dHJ5e2lmKCFlKXRocm93IG5ldyBFcnJvcihcIkFjY2VzcyB0b2tlbiBub3QgZm91bmRcIik7Y29uc3R7YXBpUmVxdWVzdFVybDpyLGRhdGE6bCxoZWFkZXJzOmMsaHR0cE1ldGhvZDp1LGluY2x1ZGVBdXRob3JpemF0aW9uOmZ9PWEsZD1hd2FpdChhc3luYyh0LG4scixvLGkpPT57dmFyIGEsbDtjb25zdCBzPU9iamVjdC5hc3NpZ24oe0FjY2VwdDpcImFwcGxpY2F0aW9uL2pzb25cIn0sbyk7XCJQQVRDSFwiIT09biYmXCJQT1NUXCIhPT1uJiZcIlBVVFwiIT09bnx8L2NvbnRlbnQtdHlwZS9pLnRlc3QoT2JqZWN0LmtleXMocykuam9pbihcIixcIikpfHwoc1tcIkNvbnRlbnQtVHlwZVwiXT1cImFwcGxpY2F0aW9uL2pzb25cIiksaSYmKHMuQXV0aG9yaXphdGlvbj1gQmVhcmVyICR7ZX1gKTtjb25zdCBjPWF3YWl0IGZldGNoKHQse2JvZHk6XCJvYmplY3RcIj09dHlwZW9mIHI/SlNPTi5zdHJpbmdpZnkocik6cixoZWFkZXJzOnMsbWV0aG9kOm59KTtpZighYy5vayl7Y29uc3QgZT17bWVzc2FnZTpcIkZhaWxlZCB0byBleGVjdXRlIEFQSSByZXF1ZXN0XCJ9O3JldHVybihudWxsPT09KGE9Yy5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaW5jbHVkZXMoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSYmKGUuZGF0YT1hd2FpdCBjLmpzb24oKSksW2Muc3RhdHVzLHZvaWQgMCx2b2lkIDAsZV19bGV0IHU7Y29uc3QgZj1udWxsIT09KGw9Yy5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKSkmJnZvaWQgMCE9PWw/bDpcIlwiO3N3aXRjaCghMCl7Y2FzZSFmOmJyZWFrO2Nhc2UvXmFwcGxpY2F0aW9uXFwvKFxcdytcXCspP2pzb24vaS50ZXN0KGYpOnU9YXdhaXQgYy5qc29uKCk7YnJlYWs7Y2FzZS9ebXVsdGlwYXJ0XFwvZm9ybS0/ZGF0YXxeYXBwbGljYXRpb25cXC94LT93d3ctP2Zvcm0tP3VybGVuY29kZWQvaS50ZXN0KGYpOnU9YXdhaXQgYy5mb3JtRGF0YSgpO2JyZWFrO2Nhc2UvXmFwcGxpY2F0aW9uXFwvKChbXi9dKyk/eG1sfHZuZFxcLm9wZW54bWxmb3JtYXRzKXxedGV4dFxcL3xeaW1hZ2VcXC9zdmcvaS50ZXN0KGYpOnU9YXdhaXQgYy50ZXh0KCk7YnJlYWs7ZGVmYXVsdDp1PWF3YWl0IGMuYXJyYXlCdWZmZXIoKX1yZXR1cm5bYy5zdGF0dXMsdSxmLHZvaWQgMF19KShyLHUsbCxjLGYpLFtwLGgsZyx2XT1kO2lmKHMuc3RhdHVzPXAsdil7aWYoIW4mJjQwMT09PXApe2NvbnN0W2Usbl09YXdhaXQgaSgpO3JldHVybiBuPyhzLnN0YXR1cz1lLHMuZXJyb3I9bixzKTphd2FpdCBvKHQsITApfXMuZXJyb3I9dn1lbHNlIGgmJihzLmRhdGE9aCxzLnR5cGU9Zyl9Y2F0Y2goZSl7ZSBpbnN0YW5jZW9mIEVycm9yP3MuZXJyb3I9e21lc3NhZ2U6ZS5tZXNzYWdlfTpzLmVycm9yPXttZXNzYWdlOlwiRmFpbGVkIHRvIGV4ZWN1dGUgQVBJIHJlcXVlc3RcIn19cmV0dXJuIFByb21pc2UucmVzb2x2ZShzKX0saT1hc3luYygpPT57dmFyIG87aWYoIW4pdGhyb3cgbmV3IEVycm9yKFwiQXV0aG9yaXphdGlvbiBzZXJ2ZXIgbWV0YWRhdGEgbm90IHNldFwiKTtpZighdCl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgSUQgbm90IHNldFwiKTtjb25zdCBpPWBncmFudF90eXBlPXJlZnJlc2hfdG9rZW4mY2xpZW50X2lkPSR7dH0mcmVmcmVzaF90b2tlbj0ke3J9YCxhPWF3YWl0IGZldGNoKG4udG9rZW5fZW5kcG9pbnQse2JvZHk6aSxoZWFkZXJzOntBY2NlcHQ6XCJhcHBsaWNhdGlvbi9qc29uXCIsXCJDb250ZW50LVR5cGVcIjpcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwifSxtZXRob2Q6XCJQT1NUXCJ9KTtpZighYS5vayl7Y29uc3QgZT17bWVzc2FnZTpcIkZhaWxlZCB0byByZWZyZXNoIGFjY2VzcyB0b2tlblwifTtyZXR1cm4obnVsbD09PShvPWEuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIikpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmluY2x1ZGVzKFwiYXBwbGljYXRpb24vanNvblwiKSkmJihlLmRhdGE9YXdhaXQgYS5qc29uKCkpLFthLnN0YXR1cyxlXX1jb25zdCBsPWF3YWl0IGEuanNvbigpO3JldHVybiBlPWwuYWNjZXNzX3Rva2VuLFthLnN0YXR1c119O3NlbGYub25tZXNzYWdlPWFzeW5jIGk9Pntjb25zdHtjb21tYW5kOmEsaWQ6bH09aS5kYXRhO2xldCBzPXtjb21tYW5kOmEsaWQ6bH07c3dpdGNoKGEpe2Nhc2VcIkFQSV9SRVFVRVNUXCI6cz1hd2FpdCBvKGkuZGF0YSk7YnJlYWs7Y2FzZVwiQ09ERV9FWENIQU5HRVwiOnM9YXdhaXQoYXN5bmMgbz0+e3ZhciBpO2NvbnN0e2NvbW1hbmQ6YSxkYXRhOmwsaWQ6c309byxjPXtjb21tYW5kOmEsaWQ6c307dHJ5e2lmKCFuKXRocm93IG5ldyBFcnJvcihcIkF1dGhvcml6YXRpb24gc2VydmVyIG1ldGFkYXRhIG5vdCBzZXRcIik7aWYoIXQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IElEIG5vdCBzZXRcIik7Y29uc3R7Y29kZTpvLGNvZGVWZXJpZmllcjphLHJlZGlyZWN0VXJpOnN9PWwsdT1gZ3JhbnRfdHlwZT1hdXRob3JpemF0aW9uX2NvZGUmY2xpZW50X2lkPSR7dH0mY29kZT0ke299JmNvZGVfdmVyaWZpZXI9JHthfSZyZWRpcmVjdF91cmk9JHtzfWAsZj1hd2FpdCBmZXRjaChuLnRva2VuX2VuZHBvaW50LHtib2R5OnUsaGVhZGVyczp7QWNjZXB0OlwiYXBwbGljYXRpb24vanNvblwiLFwiQ29udGVudC1UeXBlXCI6XCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIn0sbWV0aG9kOlwiUE9TVFwifSk7aWYoZi5vayl7Y29uc3QgdD1hd2FpdCBmLmpzb24oKTtlPXQuYWNjZXNzX3Rva2VuLHI9dC5yZWZyZXNoX3Rva2VufWVsc2V7Y29uc3QgZT17bWVzc2FnZTpcIkZhaWxlZCB0byByZXRyaWV2ZSB0b2tlbnNcIn07KG51bGw9PT0oaT1mLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpKXx8dm9pZCAwPT09aT92b2lkIDA6aS5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL2pzb25cIikpJiYoZS5kYXRhPWF3YWl0IGYuanNvbigpKSxjLmVycm9yPWV9fWNhdGNoKGUpe2UgaW5zdGFuY2VvZiBFcnJvcj9jLmVycm9yPXttZXNzYWdlOmUubWVzc2FnZX06Yy5lcnJvcj17bWVzc2FnZTpcIkZhaWxlZCB0byByZXRyaWV2ZSB0b2tlbnNcIn19cmV0dXJuIFByb21pc2UucmVzb2x2ZShjKX0pKGkuZGF0YSk7YnJlYWs7Y2FzZVwiRVhQSVJFX1RPS0VOU1wiOnM9YXdhaXQoYXN5bmMgdD0+e3ZhciBvO2NvbnN0e2NvbW1hbmQ6aSxleHBpcmVBY2Nlc3NUb2tlbk9ubHk6YSxpZDpsfT10LHM9e2NvbW1hbmQ6aSxpZDpsfTt0cnl7aWYoIWEmJiFyKXRocm93IG5ldyBFcnJvcihcIlJlZnJlc2ggdG9rZW4gbm90IGZvdW5kXCIpO2lmKCFuKXRocm93IG5ldyBFcnJvcihcIkF1dGhvcml6YXRpb24gc2VydmVyIG1ldGFkYXRhIG5vdCBzZXRcIik7aWYoIW4ucmV2b2NhdGlvbl9lbmRwb2ludCl0aHJvdyBuZXcgRXJyb3IoXCJSZXZvY2F0aW9uIGVuZHBvaW50IG1pc3NpbmcgaW4gYXV0aG9yaXphdGlvbiBzZXJ2ZXIgbWV0YWRhdGFcIik7Y29uc3QgdD1hP2U6cixpPWF3YWl0IGZldGNoKGAke24ucmV2b2NhdGlvbl9lbmRwb2ludH0/dG9rZW49JHt0fWAse2hlYWRlcnM6e0FjY2VwdDpcImFwcGxpY2F0aW9uL2pzb25cIn19KTtpZighaS5vayl7Y29uc3QgZT17bWVzc2FnZTpcIkZhaWxlZCB0byByZXZva2UgdG9rZW5zXCJ9OyhudWxsPT09KG89aS5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKSl8fHZvaWQgMD09PW8/dm9pZCAwOm8uaW5jbHVkZXMoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSYmKGUuZGF0YT1hd2FpdCBpLmpzb24oKSkscy5lcnJvcj1lfX1jYXRjaChlKXtlIGluc3RhbmNlb2YgRXJyb3I/cy5lcnJvcj17bWVzc2FnZTplLm1lc3NhZ2V9OnMuZXJyb3I9e21lc3NhZ2U6XCJGYWlsZWQgdG8gcmV2b2tlIHRva2Vuc1wifX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHMpfSkoaS5kYXRhKTticmVhaztjYXNlXCJJTklUXCI6cz1hd2FpdChhc3luYyBlPT57Y29uc3R7Y29tbWFuZDpyLGRhdGE6byxpZDppfT1lLGE9e2NvbW1hbmQ6cixpZDppfTtyZXR1cm4gdD1vLmNsaWVudElkLG49by5tZXRhZGF0YSxQcm9taXNlLnJlc29sdmUoYSl9KShpLmRhdGEpO2JyZWFrO2RlZmF1bHQ6cy5lcnJvcj1uZXcgRXJyb3IoYFVuZXhwZWN0ZWQgb2F1dGggd29ya2VyIGNvbW1hbmQ6ICR7YX1gKX1zZWxmLnBvc3RNZXNzYWdlKHMpfX07dmFyIGI7IWZ1bmN0aW9uKGUpe2UuQXBpUmVxdWVzdD1cIkFQSV9SRVFVRVNUXCIsZS5Db2RlRXhjaGFuZ2U9XCJDT0RFX0VYQ0hBTkdFXCIsZS5FeHBpcmVUb2tlbnM9XCJFWFBJUkVfVE9LRU5TXCIsZS5Jbml0PVwiSU5JVFwifShifHwoYj17fSkpO2NvbnN0IHg9W10sXz1lPT57eC5wdXNoKGUpfSxPPShlLHQpPT4obixyLG8pPT5uZXcgUHJvbWlzZSgoKGksYSk9Pntjb25zdCBsPXtjb21tYW5kOmIuQ29kZUV4Y2hhbmdlLGRhdGE6e2NvZGU6bixjb2RlVmVyaWZpZXI6cixyZWRpcmVjdFVyaTpvfSxpZDpEYXRlLm5vdygpLnRvU3RyaW5nKCl9LHtjb21tYW5kOnMsaWQ6Y309bDtfKHtjb21tYW5kOnMsaWQ6YyxyZWplY3Q6YSxyZXNvbHZlOml9KSxlLnBvc3RNZXNzYWdlKGwpLHQubG9nSW5mbyhcIldvcmtlciByZXF1ZXN0IHNlbnRcIixsKX0pKSxMPShlLHQsbik9PihyLG8saSxhLGwpPT5uZXcgUHJvbWlzZSgoKHMsYyk9Pntjb25zdCB1PXtjb21tYW5kOmIuQXBpUmVxdWVzdCxkYXRhOnthcGlSZXF1ZXN0VXJsOnIsY2xpZW50SWQ6ZSxkYXRhOmksaGVhZGVyczphLGh0dHBNZXRob2Q6byxpbmNsdWRlQXV0aG9yaXphdGlvbjpsfSxpZDpEYXRlLm5vdygpLnRvU3RyaW5nKCl9LHtjb21tYW5kOmYsaWQ6ZH09dTtfKHtjb21tYW5kOmYsaWQ6ZCxyZWplY3Q6YyxyZXNvbHZlOnN9KSx0LnBvc3RNZXNzYWdlKHUpLG4ubG9nSW5mbyhcIldvcmtlciByZXF1ZXN0IHNlbnRcIix1KX0pKSxFPShlLHQpPT5uPT5uZXcgUHJvbWlzZSgoKHIsbyk9Pntjb25zdCBpPXtjb21tYW5kOmIuRXhwaXJlVG9rZW5zLGV4cGlyZUFjY2Vzc1Rva2VuT25seTpuLGlkOkRhdGUubm93KCkudG9TdHJpbmcoKX0se2NvbW1hbmQ6YSxpZDpsfT1pO18oe2NvbW1hbmQ6YSxpZDpsLHJlamVjdDpvLHJlc29sdmU6cn0pLGUucG9zdE1lc3NhZ2UoaSksdC5sb2dJbmZvKFwiV29ya2VyIHJlcXVlc3Qgc2VudFwiLGkpfSkpLFM9KGUsdCk9Pntjb25zdCBuPXguZmluZEluZGV4KChuPT5uLmNvbW1hbmQ9PT10JiZuLmlkPT09ZSkpO24+PTAmJnguc3BsaWNlKG4sMSl9LGo9KGUsdCk9PmFzeW5jKCk9Pnt0cnl7YXdhaXQgRShlLHQpKCExKX1jYXRjaChlKXt0LmxvZ1dhcm5pbmcoZS5tZXNzYWdlKX1lLnRlcm1pbmF0ZSgpLHQubG9nSW5mbyhcIldvcmtlciB0ZXJtaW5hdGVkXCIpfTtjbGFzcyBNe2dldCBhcGlPcmlnaW4oKXtyZXR1cm4gdGhpcy5fYXBpT3JpZ2lufWdldCBjbGllbnRJZCgpe3JldHVybiB0aGlzLl9jbGllbnRJZH1nZXQgbG9nZ2VyKCl7cmV0dXJuIHRoaXMuX2xvZ2dlcn1nZXQgbWV0YWRhdGEoKXtyZXR1cm4gdGhpcy5fbWV0YWRhdGF9Z2V0IHdvcmtlcigpe3JldHVybiB0aGlzLl93b3JrZXJ9Y29uc3RydWN0b3IoZSx0LG4scixvKXtpZih0aGlzLmV4ZWN1dGVBcGlSZXF1ZXN0PWFzeW5jKGUsdD1cIkdFVFwiLG4scixvPSEwLGk9ITEpPT57dGhpcy5fbG9nZ2VyLmxvZ0luZm8oXCJFeGVjdXRlQXBpUmVxdWVzdCBzdGFydGVkXCIsZSx0LG4scik7dHJ5e2NvbnN0IGk9YXdhaXQoKGUsdCk9PmFzeW5jKG4scixvLGksbCk9Pnt0cnl7cmV0dXJuIGF3YWl0IHQuZXhlY3V0ZUFwaVJlcXVlc3QoYCR7ZX0ke259YCxyLG8saSxsKX1jYXRjaChlKXtsZXQgdDtjb25zdHtkYXRhOm4sbWVzc2FnZTpyLHN0YXR1czpvfT1lO3Rocm93IHQ9ZSBpbnN0YW5jZW9mIEVycm9yP25ldyBhKHIsbyk6XCJGYWlsZWQgdG8gcmVmcmVzaCBhY2Nlc3MgdG9rZW5cIj09PXI/bmV3IHMocik6bmV3IGEocixvKSx0LmRhdGE9bix0fX0pKHRoaXMuX2FwaU9yaWdpbix0aGlzLl93b3JrZXIpKGUsdCxuLHIsbyk7cmV0dXJuIHRoaXMuX2xvZ2dlci5sb2dJbmZvKFwiRXhlY3V0ZUFwaVJlcXVlc3QgY29tcGxldGVkXCIsaSksaX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgYSl7Y29uc3R7ZGF0YTp0LG1lc3NhZ2U6bixuYW1lOnIsc3RhY2s6b309ZSxpPXRoaXMuZ2V0RXJyb3JNZXNzYWdlRnJvbVNlcnZlclJlc3BvbnNlKHQpO2kmJihlLm1lc3NhZ2U9aSxlLnN0YWNrPW51bGw9PW8/dm9pZCAwOm8ucmVwbGFjZShgJHtyfTogJHtufWAsYCR7cn06ICR7aX1gKSl9dGhyb3cgaSYmdGhpcy5sb2dnZXIubG9nRXJyb3IoZSksZX19LCEoZSYmdCYmbiYmciYmbykpdGhyb3cgbmV3IGMoXCJQcm92aWRlciBoYXMgbm90IGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGNhbGwgaW5pdCB0byBjcmVhdGUgbmV3IGluc3RhbmNlcylcIik7dGhpcy5fYXBpT3JpZ2luPWUsdGhpcy5fY2xpZW50SWQ9dCx0aGlzLl9tZXRhZGF0YT1uLHRoaXMuX3dvcmtlcj1yLHRoaXMuX2xvZ2dlcj1vLHRoaXMuYXV0aG9yaXplPXRoaXMuYXV0aG9yaXplLmJpbmQodGhpcyksdGhpcy5jbG9zZT10aGlzLmNsb3NlLmJpbmQodGhpcyksdGhpcy5leGVjdXRlQXBpUmVxdWVzdD10aGlzLmV4ZWN1dGVBcGlSZXF1ZXN0LmJpbmQodGhpcyksdGhpcy5leHBpcmVUb2tlbnM9dGhpcy5leHBpcmVUb2tlbnMuYmluZCh0aGlzKSx0aGlzLmdldEVycm9yTWVzc2FnZUZyb21TZXJ2ZXJSZXNwb25zZT10aGlzLmdldEVycm9yTWVzc2FnZUZyb21TZXJ2ZXJSZXNwb25zZS5iaW5kKHRoaXMpfWFzeW5jIGF1dGhvcml6ZShlLHQsbil7aWYodGhpcy5fbG9nZ2VyLmxvZ0luZm8oXCJBdXRob3JpemUgc3RhcnRlZFwiLGUsdCxuKSwhdGhpcy5fbWV0YWRhdGF8fCF0aGlzLl9jbGllbnRJZHx8IXRoaXMuX3dvcmtlcil0aHJvdyBuZXcgYyhcIlByb3ZpZGVyIGhhcyBub3QgYmVlbiBwcm9wZXJseSBpbml0aWFsaXplZCAoY2FsbCBpbml0IHRvIGNyZWF0ZSBuZXcgaW5zdGFuY2VzKVwiKTt0cnl7YXdhaXQocj10aGlzLl9tZXRhZGF0YSxvPXRoaXMuX2NsaWVudElkLGE9dGhpcy5fd29ya2VyLHM9dGhpcy5fbG9nZ2VyLGFzeW5jKGUsdCxuKT0+e2NvbnN0e2F1dGhvcml6YXRpb25fZW5kcG9pbnQ6aX09cixsPWZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpLGM9KGF3YWl0IGwuZ2V0Q2hpbGRXaW5kb3dzKCkpLmZpbmQoKGU9PmUuaWRlbnRpdHkubmFtZT09PW0pKTtjJiZhd2FpdCBjLmNsb3NlKCEwKTtjb25zdCB1PShuZXcgRGF0ZSkuZ2V0VGltZSgpLnRvU3RyaW5nKCksZj0oKCk9Pntjb25zdCBlPW5ldyBVaW50MzJBcnJheSg2NCk7cmV0dXJuIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGUpLEFycmF5LmZyb20oZSwoZT0+YDAke2UudG9TdHJpbmcoMTYpfWAuc2xpY2UoLTIpKSkuam9pbihcIlwiKX0pKCksZD0oYXdhaXQoYXN5bmMgZT0+e2NvbnN0IHQ9KG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKGUpLG49YXdhaXQgd2luZG93LmNyeXB0by5zdWJ0bGUuZGlnZXN0KFwiU0hBLTI1NlwiLHQpLHI9YXdhaXQoZT0+bmV3IFByb21pc2UoKCh0LG4pPT57dHJ5e2NvbnN0IHI9bmV3IEJsb2IoW2VdKSxvPW5ldyBGaWxlUmVhZGVyO28ub25sb2FkPWU9Pnt2YXIgcixvO2NvbnN0IGk9bnVsbD09PShyPWUudGFyZ2V0KXx8dm9pZCAwPT09cj92b2lkIDA6ci5yZXN1bHQ7aWYoaSl7Y29uc3RbLGVdPUFycmF5LmZyb20obnVsbCE9PShvPWkubWF0Y2goL2Jhc2U2NCwoLiopJC9pKSkmJnZvaWQgMCE9PW8/bzpbXSk7dChudWxsIT1lP2U6XCJcIil9bihuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVtcHR5IHJlc3VsdFwiKSl9LG8ucmVhZEFzRGF0YVVSTChyKX1jYXRjaChlKXtuKGUpfX0pKSkobik7cmV0dXJuIHIucmVwbGFjZSgvXFwrL2csXCItXCIpLnJlcGxhY2UoL1xcLy9nLFwiX1wiKX0pKGYpKS5yZXBsYWNlKC89KyQvLFwiXCIpO2xldCBwPVwiXCI7dCYmKHA9XCImXCIscCs9T2JqZWN0LmVudHJpZXModCkubWFwKChlPT5gJHtlbmNvZGVVUklDb21wb25lbnQoZVswXSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGVbMV0pfWApKS5qb2luKFwiJlwiKSk7Y29uc3QgaD1gJHtpfT9jbGllbnRfaWQ9JHtlbmNvZGVVUklDb21wb25lbnQobyl9JnJlZGlyZWN0X3VyaT0ke2VuY29kZVVSSUNvbXBvbmVudChlKX0mcmVzcG9uc2VfdHlwZT1jb2RlJnN0YXRlPSR7dX0mY29kZV9jaGFsbGVuZ2U9JHtkfSZjb2RlX2NoYWxsZW5nZV9tZXRob2Q9UzI1NiR7cH1gLGc9bnVsbCE9bj9uOnt9LHtkZWZhdWx0SGVpZ2h0OnYsZGVmYXVsdFdpZHRoOkN9PWcsdz1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59KGcsW1wiZGVmYXVsdEhlaWdodFwiLFwiZGVmYXVsdFdpZHRoXCJdKTtzLmxvZ0luZm8oXCJTdGFydGluZyBPQXV0aCBmbG93XCIsaCk7Y29uc3QgYj1hd2FpdCBmaW4uV2luZG93LmNyZWF0ZShPYmplY3QuYXNzaWduKHthbHdheXNPblRvcDohMCxtYXhpbWl6YWJsZTohMSxtaW5pbWl6YWJsZTohMSxhdXRvU2hvdzohMSxkZWZhdWx0Q2VudGVyZWQ6ITAsZGVmYXVsdEhlaWdodDpudWxsIT12P3Y6NzAwLGRlZmF1bHRXaWR0aDpudWxsIT1DP0M6NjAwLGluY2x1ZGVJblNuYXBzaG90czohMSxuYW1lOm0scmVzaXphYmxlOiExLHNhdmVXaW5kb3dTdGF0ZTohMSxzaG93VGFza2Jhckljb246ITEsdXJsOmh9LHcpKSx4PWF3YWl0IG5ldyBQcm9taXNlKHkoYix1LGUscykpO3MubG9nSW5mbyhcIlJlY2VpdmVkIGF1dGhvcml6YXRpb24gY29kZVwiKSxhd2FpdCBhLmV4Y2hhbmdlQ29kZUZvclRva2Vucyh4LGYsZSkscy5sb2dJbmZvKFwiUmVjZWl2ZWQgdG9rZW5zXCIpfSkoZSx0LG4pLHRoaXMuX2xvZ2dlci5sb2dJbmZvKFwiQXV0aG9yaXplIGNvbXBsZXRlZFwiKX1jYXRjaChlKXtsZXQgdDtpZihlIGluc3RhbmNlb2YgaSl7Y29uc3R7ZGF0YTpufT1lLHI9dGhpcy5nZXRFcnJvck1lc3NhZ2VGcm9tU2VydmVyUmVzcG9uc2Uobik7dD1uZXcgbChyLGUpLHQuZGF0YT1ufWVsc2UgdD1uZXcgbCh2b2lkIDAsZSk7dGhyb3cgdGhpcy5sb2dnZXIubG9nRXJyb3IodCksdH12YXIgcixvLGEsc31hc3luYyBjbG9zZSgpe3ZhciBlO3RoaXMuX2xvZ2dlci5sb2dJbmZvKFwiQ2xvc2Ugc3RhcnRlZFwiKTt0cnl7YXdhaXQobnVsbD09PShlPXRoaXMuX3dvcmtlcil8fHZvaWQgMD09PWU/dm9pZCAwOmUudGVybWluYXRlKCkpLHRoaXMuX3dvcmtlcj12b2lkIDAsdGhpcy5fYXBpT3JpZ2luPXZvaWQgMCx0aGlzLl9jbGllbnRJZD12b2lkIDAsdGhpcy5fbWV0YWRhdGE9dm9pZCAwLHRoaXMuX2xvZ2dlci5sb2dJbmZvKFwiQ2xvc2UgY29tcGxldGVkXCIpfWNhdGNoKGUpe2NvbnN0IHQ9bmV3IGkodm9pZCAwLGUpO3Rocm93IHRoaXMuX2xvZ2dlci5sb2dFcnJvcih0KSx0fX1hc3luYyBleHBpcmVUb2tlbnMoZT0hMSl7dmFyIHQ7dGhpcy5fbG9nZ2VyLmxvZ0luZm8oXCJFeHBpcmVUb2tlbnMgc3RhcnRlZFwiKTt0cnl7YXdhaXQobnVsbD09PSh0PXRoaXMuX3dvcmtlcil8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZXhwaXJlVG9rZW5zKGUpKSx0aGlzLl9sb2dnZXIubG9nSW5mbyhcIkV4cGlyZVRva2VucyBjb21wbGV0ZWRcIil9Y2F0Y2goZSl7Y29uc3QgdD1uZXcgaSh2b2lkIDAsZSk7dGhyb3cgdGhpcy5fbG9nZ2VyLmxvZ0Vycm9yKHQpLHR9fWdldEVycm9yTWVzc2FnZUZyb21TZXJ2ZXJSZXNwb25zZShlKXtlJiZ0aGlzLl9sb2dnZXIubG9nV2FybmluZyhlKX1zdGF0aWMgYXN5bmMgaW5pdChlLHQsbixyLC4uLm8pe2NvbnN0IGE9bmV3IHYocik7bGV0IGw7YS5sb2dJbmZvKFwiSW5pdCBzdGFydGVkXCIsZSx0LG4pO3RyeXtsPW5ldyBVUkwodCl9Y2F0Y2goZSl7Y29uc3QgdD1uZXcgZihcIlVuZXhwZWN0ZWQgaW52YWxpZCBBUEkgb3JpZ2luXCIpO3Rocm93IGEubG9nRXJyb3IodCksdH10cnl7Y29uc3QgdD1hd2FpdChhc3luYyBlPT57bGV0IHQ7dHJ5e3Q9bmV3IFVSTChlKX1jYXRjaChlKXt0aHJvdyBuZXcgZihcIlVuZXhwZWN0ZWQgaW52YWxpZCBtZXRhZGF0YSBVUkxcIil9Y29uc3Qgbj1hd2FpdCBmZXRjaCh0LHtoZWFkZXJzOntBY2NlcHQ6XCJhcHBsaWNhdGlvbi9qc29uXCJ9fSk7aWYoIW4ub2spdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJldHJpZXZlIGF1dGhvcml6YXRpb24gc2VydmVyIG1ldGFkYXRhXCIpO2NvbnN0IHI9YXdhaXQgbi5qc29uKCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBlbXB0eSBhdXRob3JpemF0aW9uIHNlcnZlciBtZXRhZGF0YSByZXNwb25zZVwiKTtpZighci5yZXNwb25zZV90eXBlc19zdXBwb3J0ZWQuZmluZCgoZT0+XCJjb2RlXCI9PT1lLnRvTG93ZXJDYXNlKCkpKSl0aHJvdyBuZXcgRXJyb3IoXCJBdXRob3JpemF0aW9uIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmVzcG9uc2UgdHlwZVwiKTtyZXR1cm4gcn0pKGUpLHI9YXdhaXQoYXN5bmMoZSx0LG4pPT57Y29uc3Qgcj1uZXcgQmxvYihbYCgke3d9KSgpYF0se3R5cGU6XCJ0ZXh0L2phdmFzY3JpcHRcIn0pLG89VVJMLmNyZWF0ZU9iamVjdFVSTChyKSxpPW5ldyBXb3JrZXIobyk7cmV0dXJuIGkub25tZXNzYWdlPShlPT50PT57ZS5sb2dJbmZvKFwiV29ya2VyIHJlc3BvbnNlIHJlY2VpdmVkXCIsdC5kYXRhKTtjb25zdCBuPXQuZGF0YSx7Y29tbWFuZDpyLGVycm9yOm8saWQ6aX09bixhPWZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0obixbXCJjb21tYW5kXCIsXCJlcnJvclwiLFwiaWRcIl0pLGw9KChlLHQpPT54LmZpbmQoKG49Pm4uY29tbWFuZD09PXQmJm4uaWQ9PT1lKSkpKGkscik7bD8obz8oXCJzdGF0dXNcImluIGEmJnZvaWQgMCE9PWEuc3RhdHVzJiYoby5zdGF0dXM9YS5zdGF0dXMpLGwucmVqZWN0KG8pKTpsLnJlc29sdmUoYSksUyhpLHIpKTplLmxvZ0Vycm9yKG5ldyBFcnJvcihcIlVuYWJsZSB0byBsb2NhdGUgYXdhaXRlZCByZXF1ZXN0XCIpKX0pKG4pLGF3YWl0KChlLHQsbixyKT0+bmV3IFByb21pc2UoKChvLGkpPT57Y29uc3QgYT17Y29tbWFuZDpiLkluaXQsZGF0YTp7Y2xpZW50SWQ6dCxtZXRhZGF0YTplfSxpZDpEYXRlLm5vdygpLnRvU3RyaW5nKCl9LHtjb21tYW5kOmwsaWQ6c309YTtfKHtjb21tYW5kOmwsaWQ6cyxyZWplY3Q6aSxyZXNvbHZlOm99KSxuLnBvc3RNZXNzYWdlKGEpLHIubG9nSW5mbyhcIldvcmtlciByZXF1ZXN0IHNlbnRcIixhKX0pKSkoZSx0LGksbikse2V4Y2hhbmdlQ29kZUZvclRva2VuczpPKGksbiksZXhlY3V0ZUFwaVJlcXVlc3Q6TCh0LGksbiksZXhwaXJlVG9rZW5zOkUoaSxuKSx0ZXJtaW5hdGU6aihpLG4pfX0pKHQsbixhKTtyZXR1cm4gYS5sb2dJbmZvKFwiSW5pdCBjb21wbGV0ZWRcIix0KSxuZXcgTShsLm9yaWdpbixuLHQscixhKX1jYXRjaChlKXtsZXQgdDt0aHJvdyB0PWUgaW5zdGFuY2VvZiBpP2U6bmV3IGModm9pZCAwLGUpLGEubG9nRXJyb3IodCksdH19fXZhciBrPW8uTVMsUj1vLmNGLFA9by5BSyxJPW8uTV8sQT1vLmNYLFQ9by5PNCxIPW8uX1csQj1vLlUkLFY9by5VNyxEPW4oOTUxKTtjb25zdCBaPVwiMS4wLjFcIiwkPVwiTWljcm9zb2Z0MzY1XCIsTj0oKT0+e0IoJCl9LEY9KCk9PntWKCQsWil9O1widW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJihcInVuZGVmaW5lZFwiPT10eXBlb2YgZmluJiZPYmplY3QuYXNzaWduKHdpbmRvdyx7ZmluOnt9fSksT2JqZWN0LmFzc2lnbihmaW4se0ludGVncmF0aW9uczp7TWljcm9zb2Z0MzY1OntlbmFibGVMb2dnaW5nOkYsZGlzYWJsZUxvZ2dpbmc6Tn19fSkpO2NvbnN0IFU9ZT0+YXN5bmModCxuLHIsbyxpKT0+e3ZhciBhO3JldHVybiB0PShhPXQpLnN0YXJ0c1dpdGgoXCIvXCIpP2E6YC8ke2F9YCxlLmV4ZWN1dGVBcGlSZXF1ZXN0KHQsbixyLG8saSwhMCl9LFc9YXN5bmMoZSx0LG49W10pPT57Y29uc3Qgcj1bXCJpZFwiLFwidXNlclByaW5jaXBhbE5hbWVcIixcInVzZXJUeXBlXCIsLi4ubl0uam9pbihcIixcIiksbz1hd2FpdChhc3luYyhlLHQ9W10pPT57aWYoIShudWxsPT10P3ZvaWQgMDp0Lmxlbmd0aCkpcmV0dXJuW107Y29uc3Qgbj1bXTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrPTIwKXtjb25zdCBvPXtyZXF1ZXN0czp0LnNsaWNlKHIscisyMCkubWFwKChlPT4oZS5pZD1jcnlwdG8ucmFuZG9tVVVJRCgpLGUpKSl9O24ucHVzaChlLmV4ZWN1dGVBcGlSZXF1ZXN0KFwiL3YxLjAvJGJhdGNoXCIsXCJQT1NUXCIsbykpfWNvbnN0IHI9KGF3YWl0IFByb21pc2UuYWxsKG4pKS5mbGF0TWFwKChlPT5lLmRhdGEucmVzcG9uc2VzKSk7cmV0dXJuIHQubWFwKChlPT57dmFyIHQ7cmV0dXJuIG51bGw9PT0odD1yLmZpbmQoKHQ9PnQuaWQ9PT1lLmlkKSkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmJvZHl9KSl9KShlLHQubWFwKChlPT4oe21ldGhvZDpcIkdFVFwiLHVybDpgL3VzZXJzPyRmaWx0ZXI9bWFpbCBlcSAnJHtlbmNvZGVVUklDb21wb25lbnQoZSl9JyYkc2VsZWN0PSR7cn1gfSkpKSksaT1vLm1hcCgoZT0+e3ZhciB0O3JldHVybiBudWxsPT09KHQ9ZS52YWx1ZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnRbMF19KSk7cmV0dXJuIGUubG9nZ2VyLmxvZ0luZm8oXCJSZXNvbHZlZCB1c2VycyBmcm9tIGVtYWlsIGFkZHJlc3Nlc1wiLGksdCksaX07dmFyIHo9bigzMDApO2NvbnN0IEc9ZT0+ZS5tYXAoKGU9PmU/e2lkOmUudXNlclByaW5jaXBhbE5hbWUsZW1haWxBZGRyZXNzOmUubWFpbCxuYW1lOmUuZGlzcGxheU5hbWV9OnZvaWQgMCkpLHE9YXN5bmMoZSx0KT0+e3RyeXthd2FpdCBmaW4uU3lzdGVtLnJlZ2lzdGVyVXNhZ2Uoe3R5cGU6XCJpbnRlZ3JhdGlvbi1mZWF0dXJlXCIsZGF0YTp7YXBpVmVyc2lvbjpaLGNvbXBvbmVudE5hbWU6ZX19KX1jYXRjaChuKXt0LmxvZ1dhcm5pbmcoYFVuYWJsZSB0byByZWdpc3RlciB1c2FnZSBmb3IgZmVhdHVyZSAke2V9OiAke251bGw9PW4/dm9pZCAwOm4ubWVzc2FnZX1gKX19LFk9ZT0+e2xldCB0PWU7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5maWx0ZXIoQm9vbGVhbikubWFwKFkpOihcIm9iamVjdFwiPT10eXBlb2YgZSYmKHQ9T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoKFssZV0pPT52b2lkIDAhPT0obnVsbCE9ZT9lOnZvaWQgMCkpKS5tYXAoKChbZSx0XSk9PltlLFkodCldKSkpKSx0KX0sSz1lPT4vI0VYVCNALy50ZXN0KGUudXNlclByaW5jaXBhbE5hbWUpO3ZhciBYOyFmdW5jdGlvbihlKXtlLk1TMzY1PVwiTVMtMzY1XCIsZS5UZWFtcz1cIk1TLVRFQU1TXCJ9KFh8fChYPXt9KSk7Y2xhc3MgSiBleHRlbmRzIFR7Z2V0IGN1cnJlbnRVc2VyKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRVc2VyfWdldCByZWRpcmVjdFVyaSgpe3JldHVybiB0aGlzLl9yZWRpcmVjdFVyaX1nZXQgcGVybWlzc2lvbnMoKXtyZXR1cm4gdGhpcy5fcGVybWlzc2lvbnN9Z2V0IHRlbmFudElkKCl7cmV0dXJuIHRoaXMuX3RlbmFudElkfWNvbnN0cnVjdG9yKGUsdCxuLHIsbyxpLGEsbCl7c3VwZXIoZSx0LGksYSxsKSx0aGlzLl9wZXJtaXNzaW9ucz1vLHRoaXMuX3JlZGlyZWN0VXJpPXIsdGhpcy5fdGVuYW50SWQ9bixxKFguTVMzNjUsbCl9YXN5bmMgYXV0aG9yaXplKGUsdCxuKXthd2FpdCBzdXBlci5hdXRob3JpemUoZSx0LG4pO2NvbnN0IHI9YXdhaXQoYXN5bmMgZT0+e2NvbnN0e2RhdGE6dH09YXdhaXQgZS5leGVjdXRlQXBpUmVxdWVzdChcIi92MS4wL21lXCIpO3JldHVybiB0fSkodGhpcyk7dGhpcy5fY3VycmVudFVzZXI9cn1nZXRFcnJvck1lc3NhZ2VGcm9tU2VydmVyUmVzcG9uc2UoZSl7dmFyIHQsbixyO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXRyeXtyZXR1cm4gbnVsbD09PShuPW51bGw9PT0odD1uZXcgVVJMKGUpLnNlYXJjaFBhcmFtcy5nZXQoXCJlcnJvcl9kZXNjcmlwdGlvblwiKSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuc3BsaXQoL1xcclxcbi8pKXx8dm9pZCAwPT09bj92b2lkIDA6blswXX1jYXRjaChlKXtyZXR1cm59cmV0dXJuIG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLmVycm9yKXx8dm9pZCAwPT09cj92b2lkIDA6ci5tZXNzYWdlfXN0YXRpYyBhc3luYyBpbml0KGUsdCxuLHIsbyxpLGEpe2NvbnN0IGw9YXdhaXQgc3VwZXIuaW5pdChlLHQsbixyKTtyZXR1cm4gbmV3IEoodCxuLG8saSxhLG51bGw9PWw/dm9pZCAwOmwubWV0YWRhdGEsbnVsbD09bD92b2lkIDA6bC53b3JrZXIsbnVsbD09bD92b2lkIDA6bC5sb2dnZXIpfX1jb25zdCBRPVtcIlVzZXIuUmVhZEJhc2ljLkFsbFwiLFwiVGVhbS5SZWFkQmFzaWMuQWxsXCIsXCJDaGFubmVsLlJlYWRCYXNpYy5BbGxcIixcIkNoYW5uZWxNZXNzYWdlLlNlbmRcIixcIkNoYXQuQ3JlYXRlXCIsXCJDaGF0TWVzc2FnZS5TZW5kXCIsXCJvZmZsaW5lX2FjY2Vzc1wiXTtsZXQgZWU7Y29uc3QgdGU9YXN5bmMoZSx0LG4scj1bXSxvLGkpPT57YXdhaXQgbmUoZSx0LG4scik7Y29uc3QgYT1PYmplY3QuYXNzaWduKHtzY29wZTpbLi4uUSwuLi5yXS5qb2luKFwiIFwiKX0sbyksbD1PYmplY3QuYXNzaWduKHtkZWZhdWx0SGVpZ2h0OjYwMCxkZWZhdWx0V2lkdGg6NTUwfSxpKTtyZXR1cm4gYXdhaXQgZWUuYXV0aG9yaXplKG4sYSxsKSx7Y2xpZW50SWQ6ZSxjdXJyZW50VXNlcjplZS5jdXJyZW50VXNlcixkaXNjb25uZWN0OmVlLmNsb3NlLGV4ZWN1dGVBcGlSZXF1ZXN0OlUoZWUpLHByb3ZpZGVyOmVlLHRlbmFudElkOnR9fSxuZT1hc3luYyhlLHQsbixyKT0+e2lmKCFlKXRocm93IG5ldyBIKFwiSW52YWxpZCBjbGllbnQgSURcIik7aWYoIXQpdGhyb3cgbmV3IEgoXCJJbnZhbGlkIHRlbmFudCBJRFwiKTtpZighbil0aHJvdyBuZXcgSChcIkludmFsaWQgcmVkaXJlY3QgVVJJXCIpO2NvbnN0IG89YGh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbS8ke3R9L3YyLjAvLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb25gOyghZWV8fGVlLmNsaWVudElkIT09ZXx8ZWUudGVuYW50SWQhPT10fHxlZS5yZWRpcmVjdFVyaSE9PW58fCgwLEQueG9yKShlZS5wZXJtaXNzaW9ucyxyKS5sZW5ndGg+MCkmJihlZT1hd2FpdCBKLmluaXQobyxcImh0dHBzOi8vZ3JhcGgubWljcm9zb2Z0LmNvbVwiLGUsJCx0LG4scikpfTtjbGFzcyByZSBleHRlbmRzIGt7Y29uc3RydWN0b3IoZSx0KXt2YXIgbjtzdXBlcihlPW51bGwhPT0obj1udWxsIT1lP2U6bnVsbD09dD92b2lkIDA6dC5tZXNzYWdlKSYmdm9pZCAwIT09bj9uOlwiQW4gaW50ZXJvcCBlcnJvciBvY2N1cnJlZFwiLHQpfX12YXIgb2UsaWUsYWUsbGUsc2UsY2U7IWZ1bmN0aW9uKGUpe2UuQXBwTm90Rm91bmQ9XCJBcHBOb3RGb3VuZFwiLGUuRXJyb3JPbkxhdW5jaD1cIkVycm9yT25MYXVuY2hcIixlLkFwcFRpbWVvdXQ9XCJBcHBUaW1lb3V0XCIsZS5SZXNvbHZlclVuYXZhaWxhYmxlPVwiUmVzb2x2ZXJVbmF2YWlsYWJsZVwifShvZXx8KG9lPXt9KSksZnVuY3Rpb24oZSl7ZS5Ob0FwcHNGb3VuZD1cIk5vQXBwc0ZvdW5kXCIsZS5SZXNvbHZlclVuYXZhaWxhYmxlPVwiUmVzb2x2ZXJVbmF2YWlsYWJsZVwiLGUuUmVzb2x2ZXJUaW1lb3V0PVwiUmVzb2x2ZXJUaW1lb3V0XCJ9KGllfHwoaWU9e30pKSxmdW5jdGlvbihlKXtlLk5vQ2hhbm5lbEZvdW5kPVwiTm9DaGFubmVsRm91bmRcIixlLkFjY2Vzc0RlbmllZD1cIkFjY2Vzc0RlbmllZFwiLGUuQ3JlYXRpb25GYWlsZWQ9XCJDcmVhdGlvbkZhaWxlZFwifShhZXx8KGFlPXt9KSksbGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj1PYmplY3QucHJvdG90eXBlLHI9bi5oYXNPd25Qcm9wZXJ0eSxvPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1vLml0ZXJhdG9yfHxcIkBAaXRlcmF0b3JcIixhPW8uYXN5bmNJdGVyYXRvcnx8XCJAQGFzeW5jSXRlcmF0b3JcIixsPW8udG9TdHJpbmdUYWd8fFwiQEB0b1N0cmluZ1RhZ1wiO2Z1bmN0aW9uIHMoZSx0LG4pe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7cyh7fSxcIlwiKX1jYXRjaChlKXtzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZVt0XT1ufX1mdW5jdGlvbiBjKGUsdCxuLHIpe3ZhciBvPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2Ygdj90OnYsaT1PYmplY3QuY3JlYXRlKG8ucHJvdG90eXBlKSxhPW5ldyBqKHJ8fFtdKTtyZXR1cm4gaS5faW52b2tlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mO3JldHVybiBmdW5jdGlvbihvLGkpe2lmKHI9PT1wKXRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7aWYocj09PWgpe2lmKFwidGhyb3dcIj09PW8pdGhyb3cgaTtyZXR1cm4gaygpfWZvcihuLm1ldGhvZD1vLG4uYXJnPWk7Oyl7dmFyIGE9bi5kZWxlZ2F0ZTtpZihhKXt2YXIgbD1MKGEsbik7aWYobCl7aWYobD09PWcpY29udGludWU7cmV0dXJuIGx9fWlmKFwibmV4dFwiPT09bi5tZXRob2Qpbi5zZW50PW4uX3NlbnQ9bi5hcmc7ZWxzZSBpZihcInRocm93XCI9PT1uLm1ldGhvZCl7aWYocj09PWYpdGhyb3cgcj1oLG4uYXJnO24uZGlzcGF0Y2hFeGNlcHRpb24obi5hcmcpfWVsc2VcInJldHVyblwiPT09bi5tZXRob2QmJm4uYWJydXB0KFwicmV0dXJuXCIsbi5hcmcpO3I9cDt2YXIgcz11KGUsdCxuKTtpZihcIm5vcm1hbFwiPT09cy50eXBlKXtpZihyPW4uZG9uZT9oOmQscy5hcmc9PT1nKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpzLmFyZyxkb25lOm4uZG9uZX19XCJ0aHJvd1wiPT09cy50eXBlJiYocj1oLG4ubWV0aG9kPVwidGhyb3dcIixuLmFyZz1zLmFyZyl9fX0oZSxuLGEpLGl9ZnVuY3Rpb24gdShlLHQsbil7dHJ5e3JldHVybnt0eXBlOlwibm9ybWFsXCIsYXJnOmUuY2FsbCh0LG4pfX1jYXRjaChlKXtyZXR1cm57dHlwZTpcInRocm93XCIsYXJnOmV9fX1lLndyYXA9Yzt2YXIgZj1cInN1c3BlbmRlZFN0YXJ0XCIsZD1cInN1c3BlbmRlZFlpZWxkXCIscD1cImV4ZWN1dGluZ1wiLGg9XCJjb21wbGV0ZWRcIixnPXt9O2Z1bmN0aW9uIHYoKXt9ZnVuY3Rpb24gbSgpe31mdW5jdGlvbiBDKCl7fXZhciB5PXt9O3lbaV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dmFyIHc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9dyYmdyh3KE0oW10pKSk7YiYmYiE9PW4mJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgeD1DLnByb3RvdHlwZT12LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIF8oZSl7W1wibmV4dFwiLFwidGhyb3dcIixcInJldHVyblwiXS5mb3JFYWNoKChmdW5jdGlvbih0KXtzKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIE8oZSx0KXtmdW5jdGlvbiBuKG8saSxhLGwpe3ZhciBzPXUoZVtvXSxlLGkpO2lmKFwidGhyb3dcIiE9PXMudHlwZSl7dmFyIGM9cy5hcmcsZj1jLnZhbHVlO3JldHVybiBmJiZcIm9iamVjdFwiPT10eXBlb2YgZiYmci5jYWxsKGYsXCJfX2F3YWl0XCIpP3QucmVzb2x2ZShmLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe24oXCJuZXh0XCIsZSxhLGwpfSksKGZ1bmN0aW9uKGUpe24oXCJ0aHJvd1wiLGUsYSxsKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7Yy52YWx1ZT1lLGEoYyl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIG4oXCJ0aHJvd1wiLGUsYSxsKX0pKX1sKHMuYXJnKX12YXIgbzt0aGlzLl9pbnZva2U9ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBpKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG8pe24oZSxyLHQsbyl9KSl9cmV0dXJuIG89bz9vLnRoZW4oaSxpKTppKCl9fWZ1bmN0aW9uIEwoZSxuKXt2YXIgcj1lLml0ZXJhdG9yW24ubWV0aG9kXTtpZihyPT09dCl7aWYobi5kZWxlZ2F0ZT1udWxsLFwidGhyb3dcIj09PW4ubWV0aG9kKXtpZihlLml0ZXJhdG9yLnJldHVybiYmKG4ubWV0aG9kPVwicmV0dXJuXCIsbi5hcmc9dCxMKGUsbiksXCJ0aHJvd1wiPT09bi5tZXRob2QpKXJldHVybiBnO24ubWV0aG9kPVwidGhyb3dcIixuLmFyZz1uZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKX1yZXR1cm4gZ312YXIgbz11KHIsZS5pdGVyYXRvcixuLmFyZyk7aWYoXCJ0aHJvd1wiPT09by50eXBlKXJldHVybiBuLm1ldGhvZD1cInRocm93XCIsbi5hcmc9by5hcmcsbi5kZWxlZ2F0ZT1udWxsLGc7dmFyIGk9by5hcmc7cmV0dXJuIGk/aS5kb25lPyhuW2UucmVzdWx0TmFtZV09aS52YWx1ZSxuLm5leHQ9ZS5uZXh0TG9jLFwicmV0dXJuXCIhPT1uLm1ldGhvZCYmKG4ubWV0aG9kPVwibmV4dFwiLG4uYXJnPXQpLG4uZGVsZWdhdGU9bnVsbCxnKTppOihuLm1ldGhvZD1cInRocm93XCIsbi5hcmc9bmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpLG4uZGVsZWdhdGU9bnVsbCxnKX1mdW5jdGlvbiBFKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIFMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9XCJub3JtYWxcIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gaihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6XCJyb290XCJ9XSxlLmZvckVhY2goRSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBNKGUpe2lmKGUpe3ZhciBuPWVbaV07aWYobilyZXR1cm4gbi5jYWxsKGUpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbz0tMSxhPWZ1bmN0aW9uIG4oKXtmb3IoOysrbzxlLmxlbmd0aDspaWYoci5jYWxsKGUsbykpcmV0dXJuIG4udmFsdWU9ZVtvXSxuLmRvbmU9ITEsbjtyZXR1cm4gbi52YWx1ZT10LG4uZG9uZT0hMCxufTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0Omt9fWZ1bmN0aW9uIGsoKXtyZXR1cm57dmFsdWU6dCxkb25lOiEwfX1yZXR1cm4gbS5wcm90b3R5cGU9eC5jb25zdHJ1Y3Rvcj1DLEMuY29uc3RydWN0b3I9bSxtLmRpc3BsYXlOYW1lPXMoQyxsLFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PW18fFwiR2VuZXJhdG9yRnVuY3Rpb25cIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsQyk6KGUuX19wcm90b19fPUMscyhlLGwsXCJHZW5lcmF0b3JGdW5jdGlvblwiKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4KSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxfKE8ucHJvdG90eXBlKSxPLnByb3RvdHlwZVthXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLkFzeW5jSXRlcmF0b3I9TyxlLmFzeW5jPWZ1bmN0aW9uKHQsbixyLG8saSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIGE9bmV3IE8oYyh0LG4scixvKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG4pP2E6YS5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOmEubmV4dCgpfSkpfSxfKHgpLHMoeCxsLFwiR2VuZXJhdG9yXCIpLHhbaV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30seC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiW29iamVjdCBHZW5lcmF0b3JdXCJ9LGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIG4gaW4gZSl0LnB1c2gobik7cmV0dXJuIHQucmV2ZXJzZSgpLGZ1bmN0aW9uIG4oKXtmb3IoO3QubGVuZ3RoOyl7dmFyIHI9dC5wb3AoKTtpZihyIGluIGUpcmV0dXJuIG4udmFsdWU9cixuLmRvbmU9ITEsbn1yZXR1cm4gbi5kb25lPSEwLG59fSxlLnZhbHVlcz1NLGoucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpqLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXQsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD1cIm5leHRcIix0aGlzLmFyZz10LHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKFMpLCFlKWZvcih2YXIgbiBpbiB0aGlzKVwidFwiPT09bi5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLG4pJiYhaXNOYU4oK24uc2xpY2UoMSkpJiYodGhpc1tuXT10KX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZihcInRocm93XCI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIG49dGhpcztmdW5jdGlvbiBvKHIsbyl7cmV0dXJuIGwudHlwZT1cInRocm93XCIsbC5hcmc9ZSxuLm5leHQ9cixvJiYobi5tZXRob2Q9XCJuZXh0XCIsbi5hcmc9dCksISFvfWZvcih2YXIgaT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBhPXRoaXMudHJ5RW50cmllc1tpXSxsPWEuY29tcGxldGlvbjtpZihcInJvb3RcIj09PWEudHJ5TG9jKXJldHVybiBvKFwiZW5kXCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLFwiY2F0Y2hMb2NcIiksYz1yLmNhbGwoYSxcImZpbmFsbHlMb2NcIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG8oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbyhhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG8oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBvKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBvPXRoaXMudHJ5RW50cmllc1tuXTtpZihvLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwobyxcImZpbmFsbHlMb2NcIikmJnRoaXMucHJldjxvLmZpbmFsbHlMb2Mpe3ZhciBpPW87YnJlYWt9fWkmJihcImJyZWFrXCI9PT1lfHxcImNvbnRpbnVlXCI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIGE9aT9pLmNvbXBsZXRpb246e307cmV0dXJuIGEudHlwZT1lLGEuYXJnPXQsaT8odGhpcy5tZXRob2Q9XCJuZXh0XCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxnKTp0aGlzLmNvbXBsZXRlKGEpfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKFwidGhyb3dcIj09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm5cImJyZWFrXCI9PT1lLnR5cGV8fFwiY29udGludWVcIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6XCJyZXR1cm5cIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPVwicmV0dXJuXCIsdGhpcy5uZXh0PVwiZW5kXCIpOlwibm9ybWFsXCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZ30sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciBuPXRoaXMudHJ5RW50cmllc1t0XTtpZihuLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKG4uY29tcGxldGlvbixuLmFmdGVyTG9jKSxTKG4pLGd9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgbj10aGlzLnRyeUVudHJpZXNbdF07aWYobi50cnlMb2M9PT1lKXt2YXIgcj1uLmNvbXBsZXRpb247aWYoXCJ0aHJvd1wiPT09ci50eXBlKXt2YXIgbz1yLmFyZztTKG4pfXJldHVybiBvfX10aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpNKGUpLHJlc3VsdE5hbWU6bixuZXh0TG9jOnJ9LFwibmV4dFwiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz10KSxnfX0sZX0oZS5leHBvcnRzKTt0cnl7cmVnZW5lcmF0b3JSdW50aW1lPXR9Y2F0Y2goZSl7RnVuY3Rpb24oXCJyXCIsXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHQpfX0sbGUoe2V4cG9ydHM6e319KSxmdW5jdGlvbihlKXtlLkNvbnRhY3Q9XCJmZGMzLmNvbnRhY3RcIixlLkNvbnRhY3RMaXN0PVwiZmRjMy5jb250YWN0TGlzdFwiLGUuQ291bnRyeT1cImZkYzMuY291bnRyeVwiLGUuSW5zdHJ1bWVudD1cImZkYzMuaW5zdHJ1bWVudFwiLGUuT3JnYW5pemF0aW9uPVwiZmRjMy5vcmdhbml6YXRpb25cIixlLlBvcnRmb2xpbz1cImZkYzMucG9ydGZvbGlvXCIsZS5Qb3NpdGlvbj1cImZkYzMucG9zaXRpb25cIn0oc2V8fChzZT17fSkpLGZ1bmN0aW9uKGUpe2UuU3RhcnRDYWxsPVwiU3RhcnRDYWxsXCIsZS5TdGFydENoYXQ9XCJTdGFydENoYXRcIixlLlZpZXdDaGFydD1cIlZpZXdDaGFydFwiLGUuVmlld0NvbnRhY3Q9XCJWaWV3Q29udGFjdFwiLGUuVmlld1F1b3RlPVwiVmlld1F1b3RlXCIsZS5WaWV3TmV3cz1cIlZpZXdOZXdzXCIsZS5WaWV3SW5zdHJ1bWVudD1cIlZpZXdJbnN0cnVtZW50XCIsZS5WaWV3QW5hbHlzaXM9XCJWaWV3QW5hbHlzaXNcIn0oY2V8fChjZT17fSkpO2NvbnN0IHVlPVwib2ZtczM2NWFjdGlvblwiLGZlPWU9PmU/XCJtc3RlYW1zOlwiOlwiaHR0cHM6Ly90ZWFtcy5taWNyb3NvZnQuY29tXCIsZGU9YXN5bmMgZT0+e2NvbnN0IHQ9bnVsbD09ZT92b2lkIDA6ZVt1ZV07aWYodCl0cnl7Y29uc3QgZT0oZT0+e2NvbnN0IHQ9KDAsei5kZWNvbXByZXNzKShlLHtpbnB1dEVuY29kaW5nOlwiQmFzZTY0XCIsb3V0cHV0RW5jb2Rpbmc6XCJTdHJpbmdcIn0pO3JldHVybiBKU09OLnBhcnNlKHQpfSkodCkse2NvbnRleHQ6bixpbnRlbnQ6cn09ZSxvPXtjb250ZXh0Om4sbmFtZTpyfTtyZXR1cm4gYXdhaXQgZmluLm1lLmludGVyb3AuZmlyZUludGVudChvKSxvfWNhdGNoKGUpe2NvbnN0IHQ9ZS5tZXNzYWdlO3Rocm93IG5ldyBrKFwiRmFpbGVkIHRvIGRlY29tcHJlc3Mgc2hhcmUgcGF5bG9hZFwiKyh0P2AgKCR7dH0pYDpcIlwiKSxlKX19LHBlPWFzeW5jKGUsdCxuKT0+e2NvbnN0IHI9YXdhaXQoYXN5bmMoZSx0LG49W10pPT57dHJ5e2NvbnN0IHI9W1wiaWRcIiwuLi5uXS5qb2luKFwiLFwiKSx7ZGF0YTpvfT1hd2FpdCBlLmV4ZWN1dGVBcGlSZXF1ZXN0KGAvdjEuMC90ZWFtcy8ke2VuY29kZVVSSUNvbXBvbmVudCh0KX0/JHNlbGVjdD0ke3J9YCk7cmV0dXJuIG99Y2F0Y2goZSl7aWYoNDA0IT09ZS5zdGF0dXMpdGhyb3cgZX19KShlLHQsW1wiZGlzcGxheU5hbWVcIl0pO2lmKCFyKXJldHVybjtsZXQgbztpZihlLmxvZ2dlci5sb2dJbmZvKFwiUmVzb2x2ZWQgdGVhbVwiLHIpLG4pe2lmKG89YXdhaXQoYXN5bmMoZSx0LG4scj1bXSk9Pnt0cnl7Y29uc3Qgbz1bXCJpZFwiLC4uLnJdLmpvaW4oXCIsXCIpLHtkYXRhOml9PWF3YWl0IGUuZXhlY3V0ZUFwaVJlcXVlc3QoYC92MS4wL3RlYW1zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG4pfS9jaGFubmVscy8ke2VuY29kZVVSSUNvbXBvbmVudCh0KX0/JHNlbGVjdD0ke299YCk7cmV0dXJuIGl9Y2F0Y2goZSl7aWYoNDA0IT09ZS5zdGF0dXMpdGhyb3cgZX19KShlLG4sdCxbXCJkaXNwbGF5TmFtZVwiXSksIW8pcmV0dXJuIHZvaWQgZS5sb2dnZXIubG9nV2FybmluZyhgQ291bGQgbm90IHJlc29sdmUgY2hhbm5lbCBmcm9tIGlkICR7bn1gKX1lbHNle2UubG9nZ2VyLmxvZ0luZm8oXCJObyBjaGFubmVsIGlkIHN1cHBsaWVkLCB1c2luZyBwcmltYXJ5IGNoYW5uZWxcIik7Y29uc3R7ZGF0YTpufT1hd2FpdCBlLmV4ZWN1dGVBcGlSZXF1ZXN0KGAvdjEuMC90ZWFtcy8ke2VuY29kZVVSSUNvbXBvbmVudCh0KX0vcHJpbWFyeUNoYW5uZWw/JHNlbGVjdD1kaXNwbGF5TmFtZSxpZGApO289bn1jb25zdCBpPXtjaGFubmVsSWQ6by5pZCxjaGFubmVsTmFtZTpvLmRpc3BsYXlOYW1lLHRlYW1JZDpyLmlkLHRlYW1OYW1lOnIuZGlzcGxheU5hbWV9O3JldHVybiBlLmxvZ2dlci5sb2dJbmZvKFwiUmVzb2x2ZWQgdGVhbSBjaGFubmVsXCIsdCxuLGkpLGl9O2NsYXNzIGhle2NvbnN0cnVjdG9yKGUsdD0hMCl7dGhpcy5sb2dnZXI9ZS5wcm92aWRlci5sb2dnZXIsdGhpcy5wcm92aWRlcj1lLnByb3ZpZGVyLHRoaXMudXNlTXNUZWFtc1Byb3RvY29sPXQsdGhpcy5yZWdpc3RlckludGVudEhhbmRsZXJzPXRoaXMucmVnaXN0ZXJJbnRlbnRIYW5kbGVycy5iaW5kKHRoaXMpLHRoaXMuc2hhcmU9dGhpcy5zaGFyZS5iaW5kKHRoaXMpLHRoaXMuc3RhcnRDYWxsPXRoaXMuc3RhcnRDYWxsLmJpbmQodGhpcyksdGhpcy5zdGFydENoYXQ9dGhpcy5zdGFydENoYXQuYmluZCh0aGlzKSx0aGlzLmVuYWJsZVNoYXJlUGF5bG9hZEhhbmRsZXIoKSxxKFguVGVhbXMsdGhpcy5sb2dnZXIpfWFzeW5jIGVuYWJsZVNoYXJlUGF5bG9hZEhhbmRsZXIoKXtjb25zdHtpbml0aWFsT3B0aW9uczplfT1hd2FpdCBmaW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudFN5bmMoKS5nZXRJbmZvKCkse3VzZXJBcHBDb25maWdBcmdzOnR9PWUsbj1hd2FpdCBkZSh0KTtuJiZ0aGlzLmxvZ2dlci5sb2dJbmZvKFwiRmlyaW5nIGludGVudFwiLG4pLGZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpLmFkZExpc3RlbmVyKFwicnVuLXJlcXVlc3RlZFwiLChhc3luYyBlPT57dHJ5e2NvbnN0IHQ9YXdhaXQgZGUoZS51c2VyQXBwQ29uZmlnQXJncyk7dCYmdGhpcy5sb2dnZXIubG9nSW5mbyhcIkZpcmluZyBpbnRlbnRcIix0KX1jYXRjaChlKXt0aGlzLmxvZ2dlci5sb2dFcnJvcihlKX19KSl9YXN5bmMgb3BlblVybChlKXt0aGlzLmxvZ2dlci5sb2dJbmZvKFwib3BlblVybCBzdGFydGVkXCIsZSk7dHJ5e2NvbnN0IHQ9dGhpcy51c2VNc1RlYW1zUHJvdG9jb2w/ZS5yZXBsYWNlKC9eaHR0cHM6XFwvXFwvdGVhbXMubWljcm9zb2Z0LmNvbVxcLy9pLFwibXN0ZWFtczpcIik6ZTt0aGlzLmxvZ2dlci5sb2dJbmZvKFwiT3BlbmluZyB1cmxcIix0KSxhd2FpdCBmaW4uU3lzdGVtLm9wZW5VcmxXaXRoQnJvd3Nlcih0KSx0aGlzLmxvZ2dlci5sb2dJbmZvKFwib3BlblVybCBjb21wbGV0ZWRcIil9Y2F0Y2goZSl7dGhyb3cgdGhpcy5sb2dnZXIubG9nRXJyb3IoZSksZX19YXN5bmMgcmVnaXN0ZXJJbnRlbnRIYW5kbGVycygpe2lmKHRoaXMubG9nZ2VyLmxvZ0luZm8oXCJyZWdpc3RlckludGVudEhhbmRsZXJzIHN0YXJ0ZWRcIiksdGhpcy51bnN1YnNjcmliZUludGVudEhhbmRsZXJzKXJldHVybnt1bnN1YnNjcmliZTp0aGlzLnVuc3Vic2NyaWJlSW50ZW50SGFuZGxlcnN9O3RyeXthd2FpdCBmaW4ubWUuaW50ZXJvcC5nZXRDb250ZXh0R3JvdXBzKCk7Y29uc3QgZT1hd2FpdCBmaW4ubWUuaW50ZXJvcC5yZWdpc3RlckludGVudEhhbmRsZXIoKGFzeW5jIGU9Pnt0cnl7YXdhaXQoKGUsdCk9PmFzeW5jIG49Pnt2YXIgcixvLGksYTtpZihlLmxvZ2dlci5sb2dJbmZvKFwiaGFuZGxlU3RhcnRDYWxsSW50ZW50IHN0YXJ0ZWRcIixuKSwobnVsbD09PShyPW4ubmFtZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIudG9Mb3dlckNhc2UoKSkhPT1jZS5TdGFydENhbGwudG9Mb3dlckNhc2UoKSl0aHJvdyBuZXcgayhgVW5leHBlY3RlZCBpbnRlbnQgdHlwZTogJHtuLm5hbWV9YCk7Y29uc3R7Y29udGV4dDpsfT1uO2lmKChudWxsPT09KG89bC50eXBlKXx8dm9pZCAwPT09bz92b2lkIDA6by50b0xvd2VyQ2FzZSgpKSE9PXNlLkNvbnRhY3QudG9Mb3dlckNhc2UoKSYmKG51bGw9PT0oaT1sLnR5cGUpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnRvTG93ZXJDYXNlKCkpIT09c2UuQ29udGFjdExpc3QudG9Mb3dlckNhc2UoKSl0aHJvdyBuZXcgayhgVW5leHBlY3RlZCBjb250ZXh0IHR5cGU6ICR7bC50eXBlfWApO2NvbnN0IHM9KG51bGw9PT0oYT1sLnR5cGUpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnRvTG93ZXJDYXNlKCkpPT09c2UuQ29udGFjdExpc3QudG9Mb3dlckNhc2UoKT9sLmNvbnRhY3RzLm1hcCgoZT0+ZS5pZC5lbWFpbCkpLmZpbHRlcihCb29sZWFuKTpbbC5pZC5lbWFpbF0sYz1hd2FpdCB0KHMpO2UubG9nZ2VyLmxvZ0luZm8oXCJoYW5kbGVTdGFydENhbGxJbnRlbnQgY29tcGxldGVkXCIsYyl9KSh0aGlzLnByb3ZpZGVyLHRoaXMuc3RhcnRDYWxsKShlKX1jYXRjaChlKXt0aHJvdyB0aGlzLmxvZ2dlci5sb2dFcnJvcihlKSxlfX0pLFwiU3RhcnRDYWxsXCIpLHQ9YXdhaXQgZmluLm1lLmludGVyb3AucmVnaXN0ZXJJbnRlbnRIYW5kbGVyKChhc3luYyBlPT57dHJ5e2F3YWl0KChlLHQpPT5hc3luYyBuPT57dmFyIHIsbyxpLGE7aWYoZS5sb2dnZXIubG9nSW5mbyhcImhhbmRsZVN0YXJ0Q2hhdEludGVudCBzdGFydGVkXCIsbiksKG51bGw9PT0ocj1uLm5hbWUpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnRvTG93ZXJDYXNlKCkpIT09Y2UuU3RhcnRDaGF0LnRvTG93ZXJDYXNlKCkpdGhyb3cgbmV3IGsoYFVuZXhwZWN0ZWQgaW50ZW50IHR5cGU6ICR7bi5uYW1lfWApO2NvbnN0e2NvbnRleHQ6bH09bjtpZigobnVsbD09PShvPWwudHlwZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8udG9Mb3dlckNhc2UoKSkhPT1zZS5Db250YWN0LnRvTG93ZXJDYXNlKCkmJihudWxsPT09KGk9bC50eXBlKXx8dm9pZCAwPT09aT92b2lkIDA6aS50b0xvd2VyQ2FzZSgpKSE9PXNlLkNvbnRhY3RMaXN0LnRvTG93ZXJDYXNlKCkpdGhyb3cgbmV3IGsoYFVuZXhwZWN0ZWQgY29udGV4dCB0eXBlOiAke2wudHlwZX1gKTtjb25zdCBzPShudWxsPT09KGE9bC50eXBlKXx8dm9pZCAwPT09YT92b2lkIDA6YS50b0xvd2VyQ2FzZSgpKT09PXNlLkNvbnRhY3RMaXN0LnRvTG93ZXJDYXNlKCk/bC5jb250YWN0cy5tYXAoKGU9PmUuaWQuZW1haWwpKS5maWx0ZXIoQm9vbGVhbik6W2wuaWQuZW1haWxdLGM9YXdhaXQgdCh7ZW1haWxBZGRyZXNzZXM6cyx0b3BpY05hbWU6bC5uYW1lfSk7ZS5sb2dnZXIubG9nSW5mbyhcImhhbmRsZVN0YXJ0Q2hhdEludGVudCBjb21wbGV0ZWRcIixjKX0pKHRoaXMucHJvdmlkZXIsdGhpcy5zdGFydENoYXQpKGUpfWNhdGNoKGUpe3Rocm93IHRoaXMubG9nZ2VyLmxvZ0Vycm9yKGUpLGV9fSksXCJTdGFydENoYXRcIik7cmV0dXJuIHRoaXMudW5zdWJzY3JpYmVJbnRlbnRIYW5kbGVycz1hc3luYygpPT57dGhpcy5sb2dnZXIubG9nSW5mbyhcInVuc3Vic2NyaWJlSW50ZW50SGFuZGxlcnMgc3RhcnRlZFwiKSxhd2FpdCBlLnVuc3Vic2NyaWJlKCksYXdhaXQgdC51bnN1YnNjcmliZSgpLHRoaXMudW5zdWJzY3JpYmVJbnRlbnRIYW5kbGVycz12b2lkIDAsdGhpcy5sb2dnZXIubG9nSW5mbyhcInVuc3Vic2NyaWJlSW50ZW50SGFuZGxlcnMgY29tcGxldGVkXCIpfSx0aGlzLmxvZ2dlci5sb2dJbmZvKFwicmVnaXN0ZXJJbnRlbnRIYW5kbGVycyBjb21wbGV0ZWRcIikse3Vuc3Vic2NyaWJlOnRoaXMudW5zdWJzY3JpYmVJbnRlbnRIYW5kbGVyc319Y2F0Y2goZSl7Y29uc3QgdD1uZXcgcmUoZS5tZXNzYWdlKTt0aHJvdyB0aGlzLmxvZ2dlci5sb2dFcnJvcih0KSx0fX1hc3luYyBzaGFyZShlKXt2YXIgdCxuLHIsbzt0aGlzLmxvZ2dlci5sb2dJbmZvKFwic2hhcmUgc3RhcnRlZFwiLGUpO3RyeXtpZighZS50YXJnZXQpdGhyb3cgbmV3IEgoXCJUYXJnZXQgbm90IHByb3ZpZGVkXCIpO2lmKChudWxsPT09KHQ9ZS5jb250ZXh0KXx8dm9pZCAwPT09dD92b2lkIDA6dC50eXBlLnRvTG93ZXJDYXNlKCkpIT09c2UuSW5zdHJ1bWVudC50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyBIKFwiVW5zdXBwb3J0ZWQgY29udGV4dCB0eXBlXCIpO2lmKCEobnVsbD09PShyPW51bGw9PT0obj1lLmNvbnRleHQpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmlkKXx8dm9pZCAwPT09cj92b2lkIDA6ci50aWNrZXIpKXRocm93IG5ldyBIKFwiVGlja2VyIG5vdCBwcm92aWRlZFwiKTtpZighZS5jaGFydEltYWdlJiZudWxsPT1lLnByaWNlQ3VycmVudCl0aHJvdyBuZXcgSChcIkN1cnJlbnQgcHJpY2Ugbm90IHByb3ZpZGVkXCIpO2NvbnN0IGk9bnVsbD09PShvPWUuc2hvd01lc3NhZ2UpfHx2b2lkIDA9PT1vfHxvLGE9YXdhaXQoYXN5bmMoZSx0KT0+e3ZhciBuLHIsbyxpO2NvbnN0e2NoYXJ0SW1hZ2U6YSxjb250ZXh0Omx9PXQse3ByaWNlQ3VycmVudDpzLHByaWNlSGlnaDpjLHByaWNlTG93OnUscHJpY2VPcGVuOmZ9PXQsZD0obnVsbD09PShyPW51bGw9PT0obj1sLmlkKXx8dm9pZCAwPT09bj92b2lkIDA6bi50aWNrZXIpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnRyaW0oKSl8fHZvaWQgMCxwPShudWxsPT09KG89bC5uYW1lKXx8dm9pZCAwPT09bz92b2lkIDA6by50cmltKCkpfHx2b2lkIDA7bGV0IGgsZyx2LG0sQyx5O2lmKG51bGwhPXQudGltZXN0YW1wfHwhYSl0cnl7aD1uZXcgRGF0ZShudWxsIT09KGk9dC50aW1lc3RhbXApJiZ2b2lkIDAhPT1pP2k6RGF0ZS5ub3coKSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cXC5cXGQrWiQvLFwiKzAwOjAwXCIpfWNhdGNoKG4pe2UubG9nZ2VyLmxvZ1dhcm5pbmcoXCJJbnZhbGlkIHRpbWVzdGFtcFwiLHQudGltZXN0YW1wKX1pZihudWxsIT1zJiZudWxsIT1mJiYoZz1zLWYsdj1nL2YqMTAwLEM9Zz4wP1wi4payXCI6ZzwwP1wi4pa8XCI6XCLil49cIixtPWc+MD9cIkdvb2RcIjpnPDA/XCJBdHRlbnRpb25cIjpcIldhcm5pbmdcIiksYSl7aWYoIS9eaW1hZ2VcXC8oZ2lmfGpwKGV8ZT9nKXxwbmcpJC9pLnRlc3QoYS50eXBlKSl0aHJvdyBuZXcgSChcIkNoYXJ0IGltYWdlIE1JTUUgdHlwZSBub3Qgc3VwcG9ydGVkXCIpO3RyeXt5PWF3YWl0KGFzeW5jIGU9Pm5ldyBQcm9taXNlKCgodCxuKT0+e2NvbnN0IHI9bmV3IEZpbGVSZWFkZXI7ci5vbmxvYWRlbmQ9KCk9PnQoci5yZXN1bHQpLHIub25lcnJvcj0oKT0+bihuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY29udmVydCBibG9iIHRvIGJhc2U2NFwiKSksci5yZWFkQXNEYXRhVVJMKGUpfSkpKShhKX1jYXRjaChlKXt0aHJvdyBuZXcgayhcIkZhaWxlZCB0byBjb252ZXJ0IGJsb2IgdG8gYmFzZTY0XCIsZSl9fWNvbnN0IHc9KGF3YWl0IGZpbi5TeXN0ZW0uZ2V0UnVudGltZUluZm8oKSkubWFuaWZlc3RVcmwsYj0oeD17Y29udGV4dDpsLGludGVudDphP2NlLlZpZXdDaGFydDpjZS5WaWV3SW5zdHJ1bWVudCx2ZXJzaW9uOlp9LCgwLHouY29tcHJlc3MpKEpTT04uc3RyaW5naWZ5KHgpLHtvdXRwdXRFbmNvZGluZzpcIkJhc2U2NFwifSkpO3ZhciB4O2NvbnN0IF89YCR7d30/JCQke3VlfT0ke2VuY29kZVVSSUNvbXBvbmVudChiKX1gLE89YGh0dHBzOi8vc3RhcnQub3BlbmZpbi5jby8/bWFuaWZlc3Q9JHtlbmNvZGVVUklDb21wb25lbnQoXyl9YCxMPXskc2NoZW1hOlwiaHR0cDovL2FkYXB0aXZlY2FyZHMuaW8vc2NoZW1hcy9hZGFwdGl2ZS1jYXJkLmpzb25cIix0eXBlOlwiQWRhcHRpdmVDYXJkXCIsdmVyc2lvbjpcIjEuNFwiLGJvZHk6W3t0eXBlOlwiQ29sdW1uU2V0XCIsY29sdW1uczpbe3R5cGU6XCJDb2x1bW5cIix3aWR0aDpcInN0cmV0Y2hcIixpdGVtczpbe3R5cGU6XCJDb250YWluZXJcIixpdGVtczpbe3R5cGU6XCJUZXh0QmxvY2tcIix0ZXh0Om51bGwhPXA/cDpkLnRvVXBwZXJDYXNlKCksd3JhcDohMCxzaXplOlwiTGFyZ2VcIixzcGFjaW5nOlwiTm9uZVwifSxwJiZ7dHlwZTpcIlRleHRCbG9ja1wiLHRleHQ6ZC50b1VwcGVyQ2FzZSgpLGlzU3VidGxlOiEwLHdyYXA6ITAsc3BhY2luZzpcIk5vbmVcIn0saCYme3R5cGU6XCJUZXh0QmxvY2tcIix0ZXh0OmB7e0RBVEUoJHtofSwgU0hPUlQpfX0ge3tUSU1FKCR7aH0pfX1gLHdyYXA6ITAsc2l6ZTpcIlNtYWxsXCJ9XX1dfSxudWxsIT1zJiYheSYme3R5cGU6XCJDb2x1bW5cIix3aWR0aDpcInN0cmV0Y2hcIixpdGVtczpbe3R5cGU6XCJUZXh0QmxvY2tcIix0ZXh0OnMudG9GaXhlZCgyKSxzaXplOlwiRXh0cmFMYXJnZVwiLHdyYXA6ITAsaG9yaXpvbnRhbEFsaWdubWVudDpcIlJpZ2h0XCJ9LG51bGwhPWcmJm51bGwhPXYmJnt0eXBlOlwiVGV4dEJsb2NrXCIsdGV4dDpgJHtDfSAke2cudG9GaXhlZCgyKX0gKCR7di50b0ZpeGVkKDIpfSUpYCxjb2xvcjptLHNwYWNpbmc6XCJOb25lXCIsd3JhcDohMCxob3Jpem9udGFsQWxpZ25tZW50OlwiUmlnaHRcIn0sKG51bGwhPWZ8fG51bGwhPWN8fG51bGwhPXUpJiZ7dHlwZTpcIkNvbnRhaW5lclwiLGhvcml6b250YWxBbGlnbm1lbnQ6XCJSaWdodFwiLGl0ZW1zOlt7dHlwZTpcIkNvbHVtblNldFwiLGNvbHVtbnM6W3t0eXBlOlwiQ29sdW1uXCIsd2lkdGg6XCJzdHJldGNoXCIsaXRlbXM6W251bGwhPWYmJnt0eXBlOlwiVGV4dEJsb2NrXCIsdGV4dDpcIk9wZW5cIix3cmFwOiEwLGhvcml6b250YWxBbGlnbm1lbnQ6XCJSaWdodFwiLHNpemU6XCJTbWFsbFwiLHdlaWdodDpcIkJvbGRlclwiLHNwYWNpbmc6XCJOb25lXCJ9LG51bGwhPWMmJnt0eXBlOlwiVGV4dEJsb2NrXCIsdGV4dDpcIkhpZ2hcIix3cmFwOiEwLHNwYWNpbmc6XCJOb25lXCIsaG9yaXpvbnRhbEFsaWdubWVudDpcIlJpZ2h0XCIsc2l6ZTpcIlNtYWxsXCIsd2VpZ2h0OlwiQm9sZGVyXCJ9LG51bGwhPXUmJnt0eXBlOlwiVGV4dEJsb2NrXCIsdGV4dDpcIkxvd1wiLHdyYXA6ITAsc3BhY2luZzpcIk5vbmVcIixob3Jpem9udGFsQWxpZ25tZW50OlwiUmlnaHRcIixzaXplOlwiU21hbGxcIix3ZWlnaHQ6XCJCb2xkZXJcIn1dfSx7dHlwZTpcIkNvbHVtblwiLHdpZHRoOlwiYXV0b1wiLGl0ZW1zOltudWxsIT1mJiZ7dHlwZTpcIlRleHRCbG9ja1wiLHRleHQ6Zi50b0ZpeGVkKDIpLHdyYXA6ITAsc3BhY2luZzpcIk5vbmVcIixob3Jpem9udGFsQWxpZ25tZW50OlwiUmlnaHRcIixzaXplOlwiU21hbGxcIn0sbnVsbCE9YyYme3R5cGU6XCJUZXh0QmxvY2tcIix0ZXh0OmMudG9GaXhlZCgyKSx3cmFwOiEwLHNwYWNpbmc6XCJOb25lXCIsaG9yaXpvbnRhbEFsaWdubWVudDpcIlJpZ2h0XCIsc2l6ZTpcIlNtYWxsXCJ9LG51bGwhPXUmJnt0eXBlOlwiVGV4dEJsb2NrXCIsdGV4dDp1LnRvRml4ZWQoMiksd3JhcDohMCxzcGFjaW5nOlwiTm9uZVwiLGhvcml6b250YWxBbGlnbm1lbnQ6XCJSaWdodFwiLHNpemU6XCJTbWFsbFwifV19XX1dLHNwYWNpbmc6XCJTbWFsbFwifV19XX0seSYme3R5cGU6XCJJbWFnZVwiLHVybDpcIi4uL2hvc3RlZENvbnRlbnRzLzEvJHZhbHVlXCIsc3BhY2luZzpcIlNtYWxsXCJ9LHt0eXBlOlwiQWN0aW9uU2V0XCIsYWN0aW9uczpbe3R5cGU6XCJBY3Rpb24uT3BlblVybFwiLHVybDpPLHRpdGxlOlwiT3BlblwifV19XX0sRT17YXR0YWNobWVudHM6W3tpZDpcIjFcIixjb250ZW50VHlwZTpcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5hZGFwdGl2ZVwiLGNvbnRlbnQ6SlNPTi5zdHJpbmdpZnkoWShMKSl9XSxib2R5Ontjb250ZW50VHlwZTpcImh0bWxcIixjb250ZW50Oic8YXR0YWNobWVudCBpZD1cIjFcIj48L2F0dGFjaG1lbnQ+J30sc3VtbWFyeTpcIlRlc3Qgc3VtbWFyeVwifTtpZih5KXtjb25zdFssZSx0XT1bLi4ueS5tYXRjaCgvXmRhdGE6KFteO10rKTtiYXNlNjQsKC4rKSQvaSldO0UuaG9zdGVkQ29udGVudHM9W3tcIkBtaWNyb3NvZnQuZ3JhcGgudGVtcG9yYXJ5SWRcIjpcIjFcIixjb250ZW50Qnl0ZXM6dCxjb250ZW50VHlwZTplfV19cmV0dXJuIEV9KSh0aGlzLnByb3ZpZGVyLGUpO2xldCBsO2lmKEFycmF5LmlzQXJyYXkoZS50YXJnZXQpKXtjb25zdHt0YXJnZXQ6dH09ZSxuPWF3YWl0IFcodGhpcy5wcm92aWRlcix0LFtcImRpc3BsYXlOYW1lXCIsXCJtYWlsXCJdKSxyPW4uZmlsdGVyKEJvb2xlYW4pO2lmKCFyLmxlbmd0aClyZXR1cm4gdGhpcy5sb2dnZXIubG9nV2FybmluZyhcIkNvdWxkIG5vdCByZXNvbHZlIGFueSB2YWxpZCB1c2VycyBmcm9tIGVtYWlsIGFkZHJlc3Nlc1wiLHQpLHQubWFwKCgoKT0+e30pKTtjb25zdHtpZDpvLHdlYlVybDpzfT1hd2FpdChhc3luYyhlLHQpPT57Y29uc3Qgbj17Y2hhdFR5cGU6dC5sZW5ndGg+Mj9cImdyb3VwXCI6XCJvbmVPbk9uZVwiLG1lbWJlcnM6dC5tYXAoKHQ9Pih7XCJAb2RhdGEudHlwZVwiOlwiI21pY3Jvc29mdC5ncmFwaC5hYWRVc2VyQ29udmVyc2F0aW9uTWVtYmVyXCIscm9sZXM6Syh0KT9bXCJndWVzdFwiXTpbXCJvd25lclwiXSxcInVzZXJAb2RhdGEuYmluZFwiOmAke2UuYXBpT3JpZ2lufS92MS4wL3VzZXJzKCcke3QuaWR9JylgfSkpKX0se2RhdGE6cn09YXdhaXQgZS5leGVjdXRlQXBpUmVxdWVzdChcIi92MS4wL2NoYXRzXCIsXCJQT1NUXCIsbik7cmV0dXJuIHJ9KSh0aGlzLnByb3ZpZGVyLFt0aGlzLnByb3ZpZGVyLmN1cnJlbnRVc2VyLC4uLnJdKSx7ZGF0YTpjfT1hd2FpdCB0aGlzLnByb3ZpZGVyLmV4ZWN1dGVBcGlSZXF1ZXN0KGAvdjEuMC9jaGF0cy8ke2VuY29kZVVSSUNvbXBvbmVudChvKX0vbWVzc2FnZXNgLFwiUE9TVFwiLGEpO3RoaXMubG9nZ2VyLmxvZ0luZm8oXCJTZW50IGNoYXQgbWVzc2FnZVwiLGMpLGkmJmF3YWl0IHRoaXMub3BlblVybChzKSxsPUcobil9ZWxzZXtjb25zdHt0YXJnZXQ6dH09ZSxuPWF3YWl0IHBlKHRoaXMucHJvdmlkZXIsdC50ZWFtSWQsdC5jaGFubmVsSWQpO2lmKCFuKXJldHVybiB2b2lkIHRoaXMubG9nZ2VyLmxvZ1dhcm5pbmcoXCJDb3VsZCBub3QgcmVzb2x2ZSB0ZWFtL2NoYW5uZWxcIix0LnRlYW1JZCx0LmNoYW5uZWxJZCk7Y29uc3R7Y2hhbm5lbElkOnIsdGVhbUlkOm99PW4se2RhdGE6c309YXdhaXQgdGhpcy5wcm92aWRlci5leGVjdXRlQXBpUmVxdWVzdChgL3YxLjAvdGVhbXMvJHtlbmNvZGVVUklDb21wb25lbnQobyl9L2NoYW5uZWxzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHIpfS9tZXNzYWdlc2AsXCJQT1NUXCIsYSk7dGhpcy5sb2dnZXIubG9nSW5mbyhcIlNlbnQgY2hhdCBtZXNzYWdlXCIscyksaSYmYXdhaXQgdGhpcy5vcGVuVXJsKHMud2ViVXJsKSxsPW59cmV0dXJuIHRoaXMubG9nZ2VyLmxvZ0luZm8oXCJzaGFyZSBjb21wbGV0ZWRcIixsKSxsfWNhdGNoKGUpe3Rocm93IHRoaXMubG9nZ2VyLmxvZ0Vycm9yKGUpLGV9fWFzeW5jIHN0YXJ0Q2FsbChlPVtdLHQ9ITEpe3RoaXMubG9nZ2VyLmxvZ0luZm8oXCJzdGFydENhbGwgc3RhcnRlZFwiLGUpO3RyeXtsZXQgbj1gJHtmZSh0aGlzLnVzZU1zVGVhbXNQcm90b2NvbCl9L2wvY2FsbC8wLzA/YDtjb25zdCByPWF3YWl0IFcodGhpcy5wcm92aWRlcixlLFtcImRpc3BsYXlOYW1lXCIsXCJtYWlsXCJdKSxvPXIuZmlsdGVyKEJvb2xlYW4pLm1hcCgoZT0+ZW5jb2RlVVJJQ29tcG9uZW50KGUudXNlclByaW5jaXBhbE5hbWUpKSk7aWYoIW8ubGVuZ3RoKXJldHVybiB0aGlzLmxvZ2dlci5sb2dXYXJuaW5nKFwiQ291bGQgbm90IHJlc29sdmUgYW55IHZhbGlkIHVzZXJzIGZyb20gc3VwcGxpZWQgZW1haWxzXCIsZSksZS5tYXAoKCgpPT57fSkpO24rPWB1c2Vycz0ke28uam9pbihcIixcIil9JndpdGhWaWRlbz0ke3R9YCx0aGlzLmxvZ2dlci5sb2dJbmZvKFwiT3BlbmluZyBUZWFtc1wiLG4pLGF3YWl0IGZpbi5TeXN0ZW0ub3BlblVybFdpdGhCcm93c2VyKG4pO2NvbnN0IGk9RyhyKTtyZXR1cm4gdGhpcy5sb2dnZXIubG9nSW5mbyhcInN0YXJ0Q2FsbCBjb21wbGV0ZWRcIixpKSxpfWNhdGNoKGUpe3Rocm93IHRoaXMubG9nZ2VyLmxvZ0Vycm9yKGUpLGV9fWFzeW5jIHN0YXJ0Q2hhdChlKXt0aGlzLmxvZ2dlci5sb2dJbmZvKFwic3RhcnRDaGF0IHN0YXJ0ZWRcIixlKTt0cnl7bGV0IHQsbjtpZihcInRlYW1JZFwiaW4gZSl7Y29uc3R7dGVhbUlkOnIsY2hhbm5lbElkOm99PWUsaT1hd2FpdCBwZSh0aGlzLnByb3ZpZGVyLHIsbyk7aWYoIWkpcmV0dXJuIHZvaWQgdGhpcy5sb2dnZXIubG9nV2FybmluZyhcIkNvdWxkIG5vdCByZXNvbHZlIHRlYW0vY2hhbm5lbFwiLHIsbyk7dD1gJHtmZSh0aGlzLnVzZU1zVGVhbXNQcm90b2NvbCl9L2wvY2hhbm5lbC8ke2VuY29kZVVSSUNvbXBvbmVudChpLmNoYW5uZWxJZCl9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGkuY2hhbm5lbE5hbWUpfT9ncm91cElkPSR7aS50ZWFtSWR9JnRlbmFudElkPSR7dGhpcy5wcm92aWRlci50ZW5hbnRJZH1gLG49aX1lbHNle2NvbnN0e2VtYWlsQWRkcmVzc2VzOnIsbWVzc2FnZTpvLHRvcGljTmFtZTppfT1lO3Q9YCR7ZmUodGhpcy51c2VNc1RlYW1zUHJvdG9jb2wpfS9sL2NoYXQvMC8wP2A7Y29uc3QgYT1hd2FpdCBXKHRoaXMucHJvdmlkZXIscixbXCJkaXNwbGF5TmFtZVwiLFwibWFpbFwiXSksbD1hLmZpbHRlcihCb29sZWFuKS5tYXAoKGU9PmVuY29kZVVSSUNvbXBvbmVudChlLnVzZXJQcmluY2lwYWxOYW1lKSkpO2lmKCFsLmxlbmd0aClyZXR1cm4gdGhpcy5sb2dnZXIubG9nV2FybmluZyhcIkNvdWxkIG5vdCByZXNvbHZlIGFueSB2YWxpZCB1c2VycyBmcm9tIGVtYWlsIGFkZHJlc3Nlc1wiLHIpLHIubWFwKCgoKT0+e30pKTt0Kz1gdXNlcnM9JHtsLmpvaW4oXCIsXCIpfWAsaSYmKHQrPWAmdG9waWNOYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGkpfWApLG8mJih0Kz1gJm1lc3NhZ2U9JHtlbmNvZGVVUklDb21wb25lbnQobyl9YCksbj1HKGEpfXJldHVybiB0aGlzLmxvZ2dlci5sb2dJbmZvKFwiT3BlbmluZyBUZWFtc1wiLHQpLGF3YWl0IGZpbi5TeXN0ZW0ub3BlblVybFdpdGhCcm93c2VyKHQpLHRoaXMubG9nZ2VyLmxvZ0luZm8oXCJzdGFydENoYXQgY29tcGxldGVkXCIsbiksbn1jYXRjaChlKXt0aHJvdyB0aGlzLmxvZ2dlci5sb2dFcnJvcihlKSxlfX19fSw5MTooKT0+e319LHo9e307ZnVuY3Rpb24gRyhlKXt2YXIgdD16W2VdO2lmKHZvaWQgMCE9PXQpcmV0dXJuIHQuZXhwb3J0czt2YXIgbj16W2VdPXtpZDplLGxvYWRlZDohMSxleHBvcnRzOnt9fTtyZXR1cm4gV1tlXS5jYWxsKG4uZXhwb3J0cyxuLG4uZXhwb3J0cyxHKSxuLmxvYWRlZD0hMCxuLmV4cG9ydHN9Ry5jPXosRy5kPShlLHQpPT57Zm9yKHZhciBuIGluIHQpRy5vKHQsbikmJiFHLm8oZSxuKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSxHLmc9ZnVuY3Rpb24oKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2goZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxHLm89KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpLEcubm1kPWU9PihlLnBhdGhzPVtdLGUuY2hpbGRyZW58fChlLmNoaWxkcmVuPVtdKSxlKTt2YXIgcT1HKEcucz01NCksWT0ocS5NUyxxLmNGLHEuQUspLEs9KHEuTV8scS5jWCxxLkJULHEuX1cscS5QZyksWD1xLiRqLEo9KHEuVSQscS5VNyk7bGV0IFE9MDtjb25zdCBlZT17Y2hhdE1lc3NhZ2U6XCJDaGF0IE1lc3NhZ2VcIixldmVudDpcIkV2ZW50XCIsbWVzc2FnZTpcIkVtYWlsXCIsZHJpdmU6XCJEb2N1bWVudFwiLGNvbnRhY3Q6XCJDb250YWN0XCIsdXNlcjpcIlVzZXJcIixsaXN0OlwiTGlzdFwifSx0ZT17cGRmOlwiUERGXCIsZG9jeDpcIldvcmRcIixwcHR4OlwiUG93ZXJQb2ludFwiLHhsc3g6XCJFeGNlbFwiLG9uZW5vdGU6XCJPbmVOb3RlXCJ9LG5lPXtjaGF0TWVzc2FnZTpbXCJDaGF0LlJlYWRcIixcIkNoYW5uZWxNZXNzYWdlLlJlYWQuQWxsXCJdLGxpc3Q6W1wiU2l0ZXMuUmVhZC5BbGxcIl0sZXZlbnQ6W1wiQ2FsZW5kYXJzLlJlYWRcIl0sbWVzc2FnZTpbXCJNYWlsLlJlYWRXcml0ZS5TaGFyZWRcIl0sY29udGFjdDpbXCJDb250YWN0cy5SZWFkLlNoYXJlZFwiLFwiTWFpbC5SZWFkV3JpdGUuU2hhcmVkXCJdLHVzZXI6W1wiVXNlci5SZWFkLkFsbFwiLFwiUHJlc2VuY2UuUmVhZC5BbGxcIl19LHJlPVwiTUlDUk9TT0ZUXzM2NV9TRUFSQ0hfVFlQRV9GSUxURVJcIixvZT1cIk1JQ1JPU09GVF8zNjVfU0VBUkNIX0ZJTEVfVFlQRV9GSUxURVJcIixpZT1cIk1JQ1JPU09GVF8zNjVfU0VBUkNIX0RFUEFSVE1FTlRfRklMVEVSXCIsYWU9XCJNSUNST1NPRlRfMzY1X1NFQVJDSF9KT0JfVElUTEVfRklMVEVSXCIsbGU9XCJUZWFtcyBDYWxsXCIsc2U9XCJUZWFtcyBDaGF0XCIsY2U9XCJFbWFpbFwiLHVlPShlLHQpPT57Y29uc3Qgbj1bXSxyPXtpdGVtOmUuY29udGV4dC5zZWxlY3RlZEZpbHRlcnM/LmZpbmQoKGU9PmUuaWQ9PT1yZSkpLGRvY3VtZW50VHlwZTplLmNvbnRleHQuc2VsZWN0ZWRGaWx0ZXJzPy5maW5kKChlPT5lLmlkPT09b2UpKX0sbz1be3ZhbHVlOlwiRG9jdW1lbnRcIixpc1NlbGVjdGVkOiEhci5pdGVtPy5vcHRpb25zPy5maW5kKCgoe3ZhbHVlOmV9KT0+XCJGaWxlXCI9PT1lKSk/LmlzU2VsZWN0ZWR9LHt2YWx1ZTpcIkNvbnRhY3RcIixpc1NlbGVjdGVkOiEhci5pdGVtPy5vcHRpb25zPy5maW5kKCgoe3ZhbHVlOmV9KT0+XCJDb250YWN0XCI9PT1lKSk/LmlzU2VsZWN0ZWR9LHt2YWx1ZTpcIkNoYXQgTWVzc2FnZVwiLGlzU2VsZWN0ZWQ6ISFyLml0ZW0/Lm9wdGlvbnM/LmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkNoYXQgTWVzc2FnZVwiPT09ZSkpPy5pc1NlbGVjdGVkfSx7dmFsdWU6XCJFbWFpbFwiLGlzU2VsZWN0ZWQ6ISFyLml0ZW0/Lm9wdGlvbnM/LmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkVtYWlsXCI9PT1lKSk/LmlzU2VsZWN0ZWR9LHt2YWx1ZTpcIkV2ZW50XCIsaXNTZWxlY3RlZDohIXIuaXRlbT8ub3B0aW9ucz8uZmluZCgoKHt2YWx1ZTplfSk9PlwiRXZlbnRcIj09PWUpKT8uaXNTZWxlY3RlZH0se3ZhbHVlOlwiTGlzdFwiLGlzU2VsZWN0ZWQ6ISFyLml0ZW0/Lm9wdGlvbnM/LmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkxpc3RcIj09PWUpKT8uaXNTZWxlY3RlZH1dO3JldHVybiBuLnB1c2goe2lkOnJlLHRpdGxlOlwiVHlwZVwiLHR5cGU6JC5lbC5NdWx0aVNlbGVjdCxvcHRpb25zOm8uZmlsdGVyKChlPT50LmhhcyhlLnZhbHVlKSkpfSksXCJEb2N1bWVudFwiPT09ci5pdGVtPy5vcHRpb25zPy5maWx0ZXIoKGU9PmUuaXNTZWxlY3RlZCkpPy5bMF0udmFsdWUmJm4ucHVzaCh7aWQ6b2UsdGl0bGU6XCJGaWxlIFR5cGVcIix0eXBlOiQuZWwuTXVsdGlTZWxlY3Qsb3B0aW9uczpPYmplY3QuZW50cmllcyh0ZSkubWFwKCgoWyxlXSk9Pih7dmFsdWU6ZSxpc1NlbGVjdGVkOiEhci5kb2N1bWVudFR5cGU/Lm9wdGlvbnM/LmZpbHRlcigoZT0+ZS5pc1NlbGVjdGVkKSk/LmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkZpbGVcIj09PWUpKT8uaXNTZWxlY3RlZH0pKSl9KSxufSxmZT0oZSx0KT0+e2NvbnN0IG49dC5jb250ZXh0LnNlbGVjdGVkRmlsdGVycz8uZmluZCgoZT0+ZS5pZD09PXJlKSk/Lm9wdGlvbnM7aWYoIUFycmF5LmlzQXJyYXkobil8fCFuLmZpbmQoKGU9PlwiQ29udGFjdFwiPT09ZS52YWx1ZXx8XCJVc2VyXCI9PT1lLnZhbHVlKSk/LmlzU2VsZWN0ZWQpcmV0dXJuW107Y29uc3R7ZGVwYXJ0bWVudDpyLGpvYlRpdGxlOm99PWUucmVkdWNlKCgoZSx0KT0+KHQuZGVwYXJ0bWVudCYmZS5kZXBhcnRtZW50LmFkZCh0LmRlcGFydG1lbnQpLHQuam9iVGl0bGUmJmUuam9iVGl0bGUuYWRkKHQuam9iVGl0bGUpLGUpKSx7ZGVwYXJ0bWVudDpuZXcgU2V0LGpvYlRpdGxlOm5ldyBTZXR9KSxpPXQuY29udGV4dC5zZWxlY3RlZEZpbHRlcnM/LmZpbmQoKGU9PmUuaWQ9PT1pZSkpLGE9QXJyYXkuZnJvbShyKS5tYXAoKGU9Pih7dmFsdWU6ZSxpc1NlbGVjdGVkOiEhaT8ub3B0aW9ucz8uZmluZCgoKHt2YWx1ZTp0fSk9PnQ9PT1lKSk/LmlzU2VsZWN0ZWR9KSkpLGw9dC5jb250ZXh0LnNlbGVjdGVkRmlsdGVycz8uZmluZCgoZT0+ZS5pZD09PWllKSkscz1BcnJheS5mcm9tKG8pLm1hcCgoZT0+KHt2YWx1ZTplLGlzU2VsZWN0ZWQ6ISFsPy5vcHRpb25zPy5maW5kKCgoe3ZhbHVlOnR9KT0+dD09PWUpKT8uaXNTZWxlY3RlZH0pKSk7cmV0dXJuW3tpZDppZSx0aXRsZTpcIkRlcGFydG1lbnRcIix0eXBlOiQuZWwuTXVsdGlTZWxlY3Qsb3B0aW9uczphfSx7aWQ6YWUsdGl0bGU6XCJKb2IgVGl0bGVcIix0eXBlOiQuZWwuTXVsdGlTZWxlY3Qsb3B0aW9uczpzfV19LGRlPWU9Pntjb25zdCB0PWUuY29udGV4dC5zZWxlY3RlZEZpbHRlcnM/LmZpbmQoKGU9PmUuaWQ9PT1pZSkpLG49QXJyYXkuaXNBcnJheSh0Py5vcHRpb25zKT90Lm9wdGlvbnMuZmlsdGVyKChlPT5lLmlzU2VsZWN0ZWQpKS5tYXAoKGU9PmUudmFsdWUpKTpbXSxyPWUuY29udGV4dC5zZWxlY3RlZEZpbHRlcnM/LmZpbmQoKGU9PmUuaWQ9PT1hZSkpLG89QXJyYXkuaXNBcnJheShyPy5vcHRpb25zKT9yLm9wdGlvbnMuZmlsdGVyKChlPT5lLmlzU2VsZWN0ZWQpKS5tYXAoKGU9PmUudmFsdWUpKTpbXTtyZXR1cm57ZGVwYXJ0bWVudDpuLGpvYlRpdGxlOm99fSxwZT0oZSx0KT0+e2NvbnN0e2RlcGFydG1lbnQ6bixqb2JUaXRsZTpyfT10O3JldHVybiBlLmZpbHRlcigoZT0+KCFuLmxlbmd0aHx8bi5pbmNsdWRlcyhlLmRlcGFydG1lbnQpKSYmKCFyLmxlbmd0aHx8ci5pbmNsdWRlcyhlLmpvYlRpdGxlKSkpKX0saGU9ZT0+e2NvbnN0IHQ9QXJyYXkuaXNBcnJheShlLmNvbnRleHQuc2VsZWN0ZWRGaWx0ZXJzPy5maW5kKChlPT5lLmlkPT09b2UpKT8ub3B0aW9ucyk/ZS5jb250ZXh0LnNlbGVjdGVkRmlsdGVycy5maW5kKChlPT5lLmlkPT09b2UpKT8ub3B0aW9uczpbXTtyZXR1cm57ZmlsdGVyRmlsZXM6dCYmdC5zb21lKCgoe2lzU2VsZWN0ZWQ6ZX0pPT5lKSksc2hvd1dvcmQ6dC5maW5kKCgoe3ZhbHVlOmV9KT0+XCJXb3JkXCI9PT1lKSk/LmlzU2VsZWN0ZWQsc2hvd0V4Y2VsOnQuZmluZCgoKHt2YWx1ZTplfSk9PlwiRXhjZWxcIj09PWUpKT8uaXNTZWxlY3RlZCxzaG93UG93ZXJQb2ludDp0LmZpbmQoKCh7dmFsdWU6ZX0pPT5cIlBvd2VyUG9pbnRcIj09PWUpKT8uaXNTZWxlY3RlZCxzaG93UERGOnQuZmluZCgoKHt2YWx1ZTplfSk9PlwiUERGXCI9PT1lKSk/LmlzU2VsZWN0ZWQsc2hvd09uZU5vdGU6dC5maW5kKCgoe3ZhbHVlOmV9KT0+XCJPbmVOb3RlXCI9PT1lKSk/LmlzU2VsZWN0ZWR9fSxnZT0oZSx0KT0+e2NvbnN0IG49W107cmV0dXJuIHQuc2hvd1dvcmQmJm4ucHVzaChcIi5kb2N4XCIpLHQuc2hvd0V4Y2VsJiZuLnB1c2goXCIueGxzeFwiKSx0LnNob3dQb3dlclBvaW50JiZuLnB1c2goXCIucHB0eFwiKSx0LnNob3dQREYmJm4ucHVzaChcIi5wZGZcIiksdC5zaG93T25lTm90ZSYmbi5wdXNoKFwiLm9uZVwiKSxlLmZpbHRlcigoZT0+e2lmKGUuZmlsZSl7Y29uc3QgdD1lLm5hbWUuc3Vic3RyaW5nKGUubmFtZS5sYXN0SW5kZXhPZihcIi5cIikpO3JldHVybiBuLmluY2x1ZGVzKHQpfXJldHVybiExfSkpfSx2ZT0oZT1cIlwiKT0+e3N3aXRjaChlLnNwbGl0KFwiLlwiKS5wb3AoKT8udG9Mb3dlckNhc2UoKT8/XCJcIil7Y2FzZVwiZG9jeFwiOmNhc2VcImRvY1wiOnJldHVyblwiTWljcm9zb2Z0IFdvcmRcIjtjYXNlXCJ4bHN4XCI6Y2FzZVwieGxzXCI6cmV0dXJuXCJNaWNyb3NvZnQgRXhjZWxcIjtjYXNlXCJwcHR4XCI6Y2FzZVwicHB0XCI6cmV0dXJuXCJNaWNyb3NvZnQgUG93ZXJQb2ludFwiO2Nhc2VcInBkZlwiOnJldHVyblwiUERGXCI7Y2FzZVwicG5nXCI6Y2FzZVwianBnXCI6Y2FzZVwianBlZ1wiOmNhc2VcImdpZlwiOnJldHVyblwiSW1hZ2VcIjtjYXNlXCJ0eHRcIjpyZXR1cm5cIlRleHRcIjtkZWZhdWx0OnJldHVyblwiRmlsZVwifX0sbWU9KGU9XCJcIik9Pntzd2l0Y2goZS5zcGxpdChcIi5cIikucG9wKCk/LnRvTG93ZXJDYXNlKCk/P1wiXCIpe2Nhc2VcImRvY3hcIjpjYXNlXCJkb2NcIjpyZXR1cm4oMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVEb2N1bWVudEljb24pO2Nhc2VcInhsc3hcIjpjYXNlXCJ4bHNcIjpyZXR1cm4oMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVFeGNlbEljb24pO2Nhc2VcInBwdHhcIjpjYXNlXCJwcHRcIjpyZXR1cm4oMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVQb3dlcnBvaW50SWNvbik7Y2FzZVwicGRmXCI6cmV0dXJuKDAsVC5LMykoQS5kZS5NaWNyb3NvZnQzNjVBc3NldHMuUERGRmlsZUljb24pO2RlZmF1bHQ6cmV0dXJufX0sQ2U9ZT0+ZS5yZXBsYWNlKC9cXCsvZyxcIl9cIikucmVwbGFjZSgvXFwvL2csXCItXCIpO3ZhciB5ZSx3ZSxiZSx4ZSxfZSxPZSxMZSxFZSxTZSxqZSxNZSxrZSxSZSxQZSxJZSxBZSxUZSxIZSxCZSxWZSxEZSxaZT1mdW5jdGlvbihlLHQsbixyKXtpZihcImFcIj09PW4mJiFyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD9lIT09dHx8IXI6IXQuaGFzKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7cmV0dXJuXCJtXCI9PT1uP3I6XCJhXCI9PT1uP3IuY2FsbChlKTpyP3IudmFsdWU6dC5nZXQoZSl9LCRlPWZ1bmN0aW9uKGUsdCxuLHIsbyl7aWYoXCJtXCI9PT1yKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7aWYoXCJhXCI9PT1yJiYhbyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZSE9PXR8fCFvOiF0LmhhcyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7cmV0dXJuXCJhXCI9PT1yP28uY2FsbChlLG4pOm8/by52YWx1ZT1uOnQuc2V0KGUsbiksbn07Y2xhc3MgTmUgZXh0ZW5kcyBVe2NvbnN0cnVjdG9yKGUpe2NvbnN0IHQ9aih7fSx7d29ya2Zsb3dzOntzZWFyY2g6KFErPTEse2hvbWVQcm92aWRlcjp7ZGVzY3JpcHRpb246XCJNaWNyb3NvZnQgMzY1IHNlYXJjaCByZXN1bHRzIHByb3ZpZGVyXCIsaWQ6YE1TMzY1LSR7ZmluLm1lLmlkZW50aXR5LnV1aWR9LSR7UX1gLGxvZ29Vcmw6KDAsVC5LMykoQS5kZS5NaWNyb3NvZnQzNjVBc3NldHMuTWljcm9zb2Z0MzY1SWNvbiksaWNvbjooMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVJY29uKSx0aXRsZTpcIk1pY3Jvc29mdCAzNjUgU2VhcmNoXCIsaW5wdXRQbGFjZWhvbGRlcjpcIldoYXQgd291bGQgeW91IGxpa2UgdG8gc2VhcmNoIGluIE1pY3Jvc29mdCAzNjUgdG9kYXk/XCIsZGlzcGF0Y2hGb2N1c0V2ZW50czohMH0sbWljcm9zb2Z0RW50aXR5VHlwZUNvbmZpZzp7bWVzc2FnZTohMCxjaGF0TWVzc2FnZTohMCxkcml2ZTohMCxldmVudDohMCx1c2VyOiEwLGNvbnRhY3Q6ITAsbGlzdDohMH0sdXNlVGVhbXNEZWVwTGluazohMH0pfX0sZSk7c3VwZXIodCkseWUuYWRkKHRoaXMpLHdlLnNldCh0aGlzLHZvaWQgMCksdGhpcy53b3JrZmxvd0ludGVncmF0aW9uTmFtZT1cIk1pY3Jvc29mdCAzNjVcIixiZS5zZXQodGhpcyx2b2lkIDApLHhlLnNldCh0aGlzLHZvaWQgMCksX2Uuc2V0KHRoaXMsMSksT2Uuc2V0KHRoaXMsbmV3IFNldCksTGUuc2V0KHRoaXMsbmV3IEUoMTAwKSksRWUuc2V0KHRoaXMsbmV3IFYoNmU0KSksdGhpcy5jb25uZWN0PWFzeW5jKGU9dGhpcy5jb25maWcuY29ubmVjdCk9Pntjb25zdHtjbGllbnRJZDp0LHRlbmFudElkOm4scmVkaXJlY3RVcmk6cn09ZSxvPXRoaXMuY29uZmlnLndvcmtmbG93cz8uc2VhcmNoP09iamVjdC5lbnRyaWVzKHRoaXMuY29uZmlnLndvcmtmbG93cz8uc2VhcmNoPy5taWNyb3NvZnRFbnRpdHlUeXBlQ29uZmlnPz97fSkuZmlsdGVyKCgoW2UsdF0pPT50KSkubWFwKCgoW2VdKT0+bmVbZV0pKS5maWx0ZXIoKGU9PnZvaWQgMCE9PWUpKS5mbGF0KCk6W107dGhpcy5jb25maWcuY29ubmVjdD1lLCRlKHRoaXMsd2UsYXdhaXQgWCh0LG4scixbLi4ubmV3IFNldChvKV0pLFwiZlwiKX0sU2Uuc2V0KHRoaXMsKCgpPT57aWYoIVplKHRoaXMsd2UsXCJmXCIpKXRocm93IG5ldyBFcnJvcihcIk1pY3Jvc29mdDM2NVdvcmtmbG93SW50ZWdyYXRpb24gbm90IGNvbm5lY3RlZFwiKTtyZXR1cm4gWmUodGhpcyx3ZSxcImZcIil9KSksUGUuc2V0KHRoaXMsKGFzeW5jIGU9PntpZigkZSh0aGlzLHhlLGUsXCJmXCIpLGUuZGF0YT8uaXRlbT8uaWQpe2NvbnN0IHQ9WmUodGhpcyxFZSxcImZcIikuZ2V0KGUuZGF0YS5pdGVtLmlkKTtpZih0KXJldHVybiB2b2lkIFplKHRoaXMsYmUsXCJmXCIpLnJlc3BvbmQoW3RdKX1pZihcInVzZXJcIj09PWUuZGF0YT8udHlwZSlaZSh0aGlzLEJlLFwiZlwiKS5jYWxsKHRoaXMsZSl9KSksSWUuc2V0KHRoaXMsKGFzeW5jIGU9Pnthd2FpdCBmaW4uUGxhdGZvcm0uZ2V0Q3VycmVudFN5bmMoKS5jcmVhdGVXaW5kb3coe2xheW91dDp7Y29udGVudDpbe3R5cGU6XCJzdGFja1wiLGNvbnRlbnQ6W3t0eXBlOlwiY29tcG9uZW50XCIsY29tcG9uZW50TmFtZTpcInZpZXdcIixjb21wb25lbnRTdGF0ZTp7dXJsOmV9fV19XX0sd29ya3NwYWNlUGxhdGZvcm06dm9pZCAwfSl9KSksQWUuc2V0KHRoaXMsKGFzeW5jIGU9PntpZihlLmRhdGEuaXRlbS5jaGFubmVsSWRlbnRpdHkudGVhbUlkKXtjb25zdCB0PW5ldyBVUkwoYG1zdGVhbXM6L2wvY2hhbm5lbC8ke2UuZGF0YS5pdGVtLmNoYW5uZWxJZGVudGl0eS5jaGFubmVsSWR9LyR7ZS5kYXRhLml0ZW0uaWR9YCk7cmV0dXJuITE9PT10aGlzLmNvbmZpZy53b3JrZmxvd3M/LnNlYXJjaD8udXNlVGVhbXNEZWVwTGluayYmKHQucHJvdG9jb2w9XCJodHRwczpcIiksdC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwiY29udGV4dFwiLEpTT04uc3RyaW5naWZ5KHtjb250ZXh0VHlwZTpcImNoYW5uZWxcIn0pKSx2b2lkIGF3YWl0IGZpbi5TeXN0ZW0ub3BlblVybFdpdGhCcm93c2VyKHQudG9TdHJpbmcoKSl9Y29uc3QgdD1uZXcgVVJMKGBtc3RlYW1zOi9sL21lc3NhZ2UvJHtlLmRhdGEuaXRlbS5jaGF0SWR9LyR7ZS5kYXRhLml0ZW0uaWR9YCk7ITE9PT10aGlzLmNvbmZpZy53b3JrZmxvd3M/LnNlYXJjaD8udXNlVGVhbXNEZWVwTGluayYmKHQucHJvdG9jb2w9XCJodHRwczpcIiksdC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwiY29udGV4dFwiLEpTT04uc3RyaW5naWZ5KHtjb250ZXh0VHlwZTpcImNoYXRcIn0pKSxhd2FpdCBmaW4uU3lzdGVtLm9wZW5VcmxXaXRoQnJvd3Nlcih0LnRvU3RyaW5nKCkpfSkpLFRlLnNldCh0aGlzLChhc3luYyBlPT57c3dpdGNoKGUuYWN0aW9uLm5hbWUpe2Nhc2UgbGU6e2NvbnN0IHQ9bmV3IEsoWmUodGhpcyxTZSxcImZcIikuY2FsbCh0aGlzKSx0aGlzLmNvbmZpZy53b3JrZmxvd3M/LnNlYXJjaD8udXNlVGVhbXNEZWVwTGluayk7WmUodGhpcyx5ZSxcIm1cIixqZSkuY2FsbCh0aGlzLCgoKT0+dC5zdGFydENhbGwoW2UuZGF0YS5pdGVtLm1haWxdKSkpO2JyZWFrfWNhc2UgY2U6e2NvbnN0IHQ9YXdhaXQgdGhpcy5leGVjdXRlQXBpUmVxdWVzdChcIi92MS4wL21lL21lc3NhZ2VzXCIsXCJQT1NUXCIse3RvUmVjaXBpZW50czpbe2VtYWlsQWRkcmVzczp7YWRkcmVzczplLmRhdGEuaXRlbS5tYWlsfX1dfSk7bGV0IG49dC5kYXRhLndlYkxpbms7Y29uc3Qgcj1uZXcgVVJMKHQuZGF0YS53ZWJMaW5rKTtpZihcIi9vd2EvXCI9PT1yLnBhdGhuYW1lKXtjb25zdCBlPXIuc2VhcmNoLnNsaWNlKDEpLnNwbGl0KFwiJlwiKS5yZWR1Y2UoKChlLHQpPT57Y29uc3RbbixyXT10LnNwbGl0KFwiPVwiKTtyZXR1cm4gZVtuXT1yLGV9KSx7fSk7aWYoZS5JdGVtSUQpe2NvbnN0IHQ9ZS5JdGVtSUQ7bj1gJHtyLm9yaWdpbn0vbWFpbC9kZWVwbGluay9jb21wb3NlLyR7dH0/SXRlbUlEPSR7dH0mZXh2c3VybD0xYH19YXdhaXQgZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkuY3JlYXRlVmlldyh7dXJsOm59KTticmVha31jYXNlIHNlOntjb25zdCB0PVplKHRoaXMsU2UsXCJmXCIpLmNhbGwodGhpcyksbj1uZXcgSyh0LHRoaXMuY29uZmlnLndvcmtmbG93cz8uc2VhcmNoPy51c2VUZWFtc0RlZXBMaW5rKTtaZSh0aGlzLHllLFwibVwiLGplKS5jYWxsKHRoaXMsKCgpPT5uLnN0YXJ0Q2hhdCh7ZW1haWxBZGRyZXNzZXM6W3QuY3VycmVudFVzZXIubWFpbCxlLmRhdGEuaXRlbS5tYWlsXX0pKSk7YnJlYWt9ZGVmYXVsdDpjb25zb2xlLndhcm4oXCJVbmhhbmRsZWQgdXNlciBhY3Rpb24gZm9yIHJlc3VsdDpcIixlLGBVbmtub3duIGFjdGlvbiBcIiR7ZS5hY3Rpb24ubmFtZX1cImApfX0pKSxIZS5zZXQodGhpcywoYXN5bmMgZT0+e3N3aXRjaChlLmRhdGEudHlwZSl7Y2FzZVwiZHJpdmVJdGVtXCI6WmUodGhpcyxJZSxcImZcIikuY2FsbCh0aGlzLGUuZGF0YS5pdGVtLndlYlVybCk7YnJlYWs7Y2FzZVwiZXZlbnRcIjp7Y29uc3QgdD1lLmRhdGEuaXRlbSxuPWF3YWl0IHRoaXMuZXhlY3V0ZUFwaVJlcXVlc3QoYC92MS4wL21lL2V2ZW50cy8ke3QuaWR9YCk7WmUodGhpcyxJZSxcImZcIikuY2FsbCh0aGlzLG4uZGF0YS53ZWJMaW5rKTticmVha31jYXNlXCJjaGF0TWVzc2FnZVwiOlplKHRoaXMsQWUsXCJmXCIpLmNhbGwodGhpcyxlKTticmVhaztjYXNlXCJtZXNzYWdlXCI6WmUodGhpcyxJZSxcImZcIikuY2FsbCh0aGlzLGUuZGF0YS5pdGVtLndlYkxpbmspO2JyZWFrO2Nhc2VcImxpc3RcIjp7Y29uc3QgdD1lLmRhdGEuaXRlbSxuPWF3YWl0IHRoaXMuZXhlY3V0ZUFwaVJlcXVlc3QoYC92MS4wL3NpdGVzLyR7dC5wYXJlbnRSZWZlcmVuY2U/LnNpdGVJZH0vbGlzdHMvJHt0LmlkfWApO1plKHRoaXMsSWUsXCJmXCIpLmNhbGwodGhpcyxuLmRhdGEud2ViVXJsKTticmVha31jYXNlXCJ1c2VyXCI6WmUodGhpcyxUZSxcImZcIikuY2FsbCh0aGlzLGUpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKFwiVW5oYW5kbGVkIHVzZXIgYWN0aW9uIGZvciByZXN1bHQ6XCIsZSxgVW5rbm93biByZXN1bHQgdHlwZSBcIiR7ZS5kYXRhLnR5cGV9XCJgKX19KSksQmUuc2V0KHRoaXMsKGFzeW5jIGU9PntsZXQgdCxuO2NvbnN0IHI9W10sbz1lLmRhdGEuaXRlbTtaZSh0aGlzLExlLFwiZlwiKS5oYXMoby5pZCk/dD1aZSh0aGlzLExlLFwiZlwiKS5nZXQoby5pZCk6ci5wdXNoKHtpZDpcImNvbnRhY3RQaG90b1wiLG1ldGhvZDpcIkdFVFwiLHVybDpgL3VzZXJzLyR7ZS5kYXRhLml0ZW0uaWR9L3Bob3RvLyR2YWx1ZWAsaGVhZGVyczp7Q29uc2lzdGVuY3lMZXZlbDpcImV2ZW50dWFsXCJ9fSksci5wdXNoKHtpZDpcInByZXNlbmNlXCIsbWV0aG9kOlwiR0VUXCIsdXJsOmAvdXNlcnMvJHtlLmRhdGEuaXRlbS5pZH0vcHJlc2VuY2VgfSk7dHJ5e2NvbnN0IGU9YXdhaXQgWmUodGhpcyx5ZSxcIm1cIixNZSkuY2FsbCh0aGlzLHIpLGE9ZS5kYXRhPy5yZXNwb25zZXMuZmluZCgoZT0+XCJjb250YWN0UGhvdG9cIj09PWUuaWQpKTthJiYyMDAhPT1hLnN0YXR1cyYmY29uc29sZS53YXJuKFwiRXJyb3IgZmV0Y2hpbmcgdXNlciBwaG90b1wiLGEpLGE/LmJvZHkmJjIwMD09PWE/LnN0YXR1cyYmKHQ9YGRhdGE6aW1hZ2UvanBlZztiYXNlNjQsJHthLmJvZHl9YCxaZSh0aGlzLExlLFwiZlwiKS5wdXQoby5pZCx0KSk7Y29uc3QgbD1lLmRhdGE/LnJlc3BvbnNlcy5maW5kKChlPT5cInByZXNlbmNlXCI9PT1lLmlkKSk7MjAwIT09bC5zdGF0dXMmJmNvbnNvbGUud2FybihcIkVycm9yIGZldGNoaW5nIHVzZXIgcHJlc2VuY2VcIixsKSxsPy5ib2R5JiYyMDA9PT1sLnN0YXR1cyYmKGk9bC5ib2R5LG49e2F2YWlsYWJsZTpcImF2YWlsYWJsZVwiLGF2YWlsYWJsZWlkbGU6XCJhdmFpbGFibGVcIixhd2F5OlwiYXdheVwiLGJlcmlnaHRiYWNrOlwiYXdheVwiLGJ1c3k6XCJidXN5XCIsYnVzeWlkbGU6XCJidXN5XCIsZG9ub3RkaXN0dXJiOlwiZG8tbm90LWRpc3R1cmJcIixvZmZsaW5lOlwib2ZmbGluZVwiLHByZXNlbmNldW5rbm93bjpcIm9mZmxpbmVcIn1baS5hdmFpbGFiaWxpdHk/LnRvTG93ZXJDYXNlKCldKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgdXNlciBkYXRhXCIsZSl9dmFyIGk7Y29uc3QgYT1bW1wiRGVwYXJ0bWVudFwiLG8uZGVwYXJ0bWVudHx8XCJOL0FcIl0sW1wiRW1haWxcIixvLm1haWx8fFwiTi9BXCJdLFtcIldvcmsgUGhvbmVcIixvLmJ1c2luZXNzUGhvbmVzPy5bMF18fFwiTi9BXCJdLFtcIk1vYmlsZVwiLG8ubW9iaWxlUGhvbmV8fFwiTi9BXCJdLFtcIkxvY2F0aW9uXCIsby5vZmZpY2VMb2NhdGlvbnx8XCJOL0FcIl1dLGw9ey4uLmUsdGVtcGxhdGU6JC55Vy5Db250YWN0LHRlbXBsYXRlQ29udGVudDp7bmFtZTplLmRhdGEuaXRlbS5kaXNwbGF5TmFtZSx0aXRsZTplLmRhdGEuaXRlbS5qb2JUaXRsZSxkZXRhaWxzOlthXSxwaG90b1VybDp0LG9ubGluZVN0YXR1czpuLGJ1dHRvbnM6W3t0eXBlOlwiYnV0dG9uXCIsaWNvbjp7bGlnaHQ6KDAsVC5LMykoQS5kZS5DYWxsSWNvbkxpZ2h0KSxkYXJrOigwLFQuSzMpKEEuZGUuQ2FsbEljb25EYXJrKX0sdG9vbHRpcDpcIlRlYW1zIENhbGxcIixhY3Rpb246bGV9LHt0eXBlOlwiYnV0dG9uXCIsaWNvbjp7bGlnaHQ6KDAsVC5LMykoQS5kZS5DaGF0SWNvbkxpZ2h0KSxkYXJrOigwLFQuSzMpKEEuZGUuQ2hhdEljb25EYXJrKX0sdG9vbHRpcDpcIkNoYXRcIixhY3Rpb246c2V9LHt0eXBlOlwiYnV0dG9uXCIsaWNvbjp7bGlnaHQ6KDAsVC5LMykoQS5kZS5NZXNzYWdlSWNvbkxpZ2h0KSxkYXJrOigwLFQuSzMpKEEuZGUuTWVzc2FnZUljb25EYXJrKX0sdG9vbHRpcDpcIkUtbWFpbFwiLGFjdGlvbjpjZX1dfX07WmUodGhpcyxFZSxcImZcIikucHV0KGUuZGF0YS5pdGVtLmlkLGwpLFplKHRoaXMsYmUsXCJmXCIpLnJlc3BvbmQoW2xdKX0pKSxWZS5zZXQodGhpcywoYXN5bmMoZSx0KT0+e2lmKFplKHRoaXMsYmUsXCJmXCIpJiZaZSh0aGlzLGJlLFwiZlwiKS5jbG9zZSgpLCRlKHRoaXMsYmUsdCxcImZcIiksWmUodGhpcyxiZSxcImZcIikub3BlbigpLGUucXVlcnkubGVuZ3RoPFplKHRoaXMsX2UsXCJmXCIpKXJldHVybntyZXN1bHRzOltdfTtjb25zdCBuPWVuY29kZVVSSUNvbXBvbmVudChlLnF1ZXJ5KSxyPVtdLG89KChlLHQpPT57Y29uc3Qgbj1BcnJheS5pc0FycmF5KGUuY29udGV4dC5zZWxlY3RlZEZpbHRlcnM/LmZpbmQoKGU9PmUuaWQ9PT1yZSkpPy5vcHRpb25zKT9lLmNvbnRleHQuc2VsZWN0ZWRGaWx0ZXJzLmZpbmQoKGU9PmUuaWQ9PT1yZSkpPy5vcHRpb25zOltdLHI9bi5ldmVyeSgoKHtpc1NlbGVjdGVkOmV9KT0+IWUpKTtyZXR1cm57c2hvd0RvY3VtZW50czp0LmhhcyhcIkRvY3VtZW50XCIpJiYocnx8ISFuLmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkRvY3VtZW50XCI9PT1lKSk/LmlzU2VsZWN0ZWQpLHNob3dDb250YWN0czp0LmhhcyhcIkNvbnRhY3RcIikmJihyfHwhIW4uZmluZCgoKHt2YWx1ZTplfSk9PlwiQ29udGFjdFwiPT09ZSkpPy5pc1NlbGVjdGVkKSxzaG93Q2hhdE1lc3NhZ2VzOnQuaGFzKFwiQ2hhdCBNZXNzYWdlXCIpJiYocnx8ISFuLmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkNoYXQgTWVzc2FnZVwiPT09ZSkpPy5pc1NlbGVjdGVkKSxzaG93TWVzc2FnZXM6dC5oYXMoXCJFbWFpbFwiKSYmKHJ8fCEhbi5maW5kKCgoe3ZhbHVlOmV9KT0+XCJFbWFpbFwiPT09ZSkpPy5pc1NlbGVjdGVkKSxzaG93RXZlbnRzOnQuaGFzKFwiRXZlbnRcIikmJihyfHwhIW4uZmluZCgoKHt2YWx1ZTplfSk9PlwiRXZlbnRcIj09PWUpKT8uaXNTZWxlY3RlZCksc2hvd0xpc3RzOnQuaGFzKFwiTGlzdFwiKSYmKHJ8fCEhbi5maW5kKCgoe3ZhbHVlOmV9KT0+XCJMaXN0XCI9PT1lKSk/LmlzU2VsZWN0ZWQpfX0pKGUsWmUodGhpcyxPZSxcImZcIikpO2lmKG8uc2hvd0RvY3VtZW50cyl7Y29uc3QgZT1gJyR7bn0nYDtyLnB1c2goe2lkOlwiZHJpdmVJdGVtXCIsbWV0aG9kOlwiR0VUXCIsdXJsOmAvbWUvZHJpdmUvcm9vdC9zZWFyY2gocT0ke2VuY29kZVVSSUNvbXBvbmVudChlKX0pYCxoZWFkZXJzOntDb25zaXN0ZW5jeUxldmVsOlwiZXZlbnR1YWxcIn19KX1pZihvLnNob3dFdmVudHMmJnIucHVzaCh7aWQ6XCJldmVudFwiLHVybDpcIi9zZWFyY2gvcXVlcnlcIixtZXRob2Q6XCJQT1NUXCIsYm9keTp7cmVxdWVzdHM6W3tlbnRpdHlUeXBlczpbXCJldmVudFwiXSxxdWVyeTp7cXVlcnlTdHJpbmc6ZS5xdWVyeX0sZnJvbTowLHNpemU6MTB9XX0saGVhZGVyczp7XCJDb250ZW50LVR5cGVcIjpcImFwcGxpY2F0aW9uL2pzb25cIn19KSxvLnNob3dDb250YWN0cyl7Y29uc3QgdD1gXCIke2UucXVlcnl9XCJgO3IucHVzaCh7aWQ6XCJjb250YWN0XCIsbWV0aG9kOlwiR0VUXCIsdXJsOmAvbWUvY29udGFjdHM/JHNlYXJjaD0ke2VuY29kZVVSSUNvbXBvbmVudCh0KX0mJHRvcD0xMGB9KTtjb25zdCBuPVtcImRpc3BsYXlOYW1lXCIsXCJnaXZlbk5hbWVcIixcInN1cm5hbWVcIl0ubWFwKCh0PT5gXCIke3R9OiR7ZS5xdWVyeX1cImApKS5qb2luKFwiIE9SIFwiKTtyLnB1c2goe2lkOlwidXNlclwiLG1ldGhvZDpcIkdFVFwiLHVybDpgL3VzZXJzPyRzZWFyY2g9JHtlbmNvZGVVUklDb21wb25lbnQobil9JiR0b3A9MTAmJHNlbGVjdD1pZCxkaXNwbGF5TmFtZSxkZXBhcnRtZW50LG1haWwsYnVzaW5lc3NQaG9uZXMsbW9iaWxlUGhvbmUsb2ZmaWNlTG9jYXRpb24sam9iVGl0bGVgLGhlYWRlcnM6e0NvbnNpc3RlbmN5TGV2ZWw6XCJldmVudHVhbFwifX0pfWlmKG8uc2hvd01lc3NhZ2VzJiZyLnB1c2goe2lkOlwibWVzc2FnZVwiLG1ldGhvZDpcIkdFVFwiLHVybDpgL21lL21lc3NhZ2VzPyRzZWxlY3Q9c2VuZGVyLHN1YmplY3QsYm9keVByZXZpZXcscmVjZWl2ZWREYXRlVGltZSx3ZWJMaW5rJiRzZWFyY2g9JHtlbmNvZGVVUklDb21wb25lbnQoYFwiJHtlLnF1ZXJ5fVwiYCl9JiR0b3A9MTBgfSksby5zaG93Q2hhdE1lc3NhZ2VzJiZyLnB1c2goe2lkOlwiY2hhdE1lc3NhZ2VcIix1cmw6XCIvc2VhcmNoL3F1ZXJ5XCIsbWV0aG9kOlwiUE9TVFwiLGJvZHk6e3JlcXVlc3RzOlt7ZW50aXR5VHlwZXM6W1wiY2hhdE1lc3NhZ2VcIl0scXVlcnk6e3F1ZXJ5U3RyaW5nOmUucXVlcnl9LGZyb206MCxzaXplOjEwfV19LGhlYWRlcnM6e1wiQ29udGVudC1UeXBlXCI6XCJhcHBsaWNhdGlvbi9qc29uXCJ9fSksby5zaG93TGlzdHMmJnIucHVzaCh7aWQ6XCJsaXN0XCIsdXJsOlwiL3NlYXJjaC9xdWVyeVwiLG1ldGhvZDpcIlBPU1RcIixib2R5OntyZXF1ZXN0czpbe2VudGl0eVR5cGVzOltcImxpc3RcIl0scXVlcnk6e3F1ZXJ5U3RyaW5nOmUucXVlcnl9LGZyb206MCxzaXplOjEwfV19LGhlYWRlcnM6e1wiQ29udGVudC1UeXBlXCI6XCJhcHBsaWNhdGlvbi9qc29uXCJ9fSksMD09PXIubGVuZ3RoKXJldHVybntyZXN1bHRzOltdfTtjb25zdHtyZXN1bHRzOmksZmlsdGVyczphfT1hd2FpdCBaZSh0aGlzLHllLFwibVwiLGtlKS5jYWxsKHRoaXMscixlKTtyZXR1cm4gaS5maW5kKChlPT5lLmtleT09PVplKHRoaXMseGUsXCJmXCIpPy5rZXkpKT8udGVtcGxhdGU9PT0kLnlXLkxvYWRpbmcmJlplKHRoaXMsUGUsXCJmXCIpLmNhbGwodGhpcyxaZSh0aGlzLHhlLFwiZlwiKSkse3Jlc3VsdHM6aSxjb250ZXh0OntmaWx0ZXJzOmF9fX0pKSxEZS5zZXQodGhpcywoYXN5bmMgZT0+e3N3aXRjaChlLmFjdGlvbi50cmlnZ2VyKXtjYXNlIEdlLnAuRm9jdXNDaGFuZ2U6WmUodGhpcyxQZSxcImZcIikuY2FsbCh0aGlzLGUpO2JyZWFrO2Nhc2UgR2UucC5Vc2VyQWN0aW9uOlplKHRoaXMsSGUsXCJmXCIpLmNhbGwodGhpcyxlKTticmVhaztjYXNlIEdlLnAuUmVsb2FkOmJyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKGBVbmtub3duIGFjdGlvbiB0cmlnZ2VyOiAke2UuYWN0aW9uLnRyaWdnZXJ9YCl9fSkpLHRoaXMuaW5pdGlhbGl6ZVdvcmtmbG93PWFzeW5jIGU9PntpZihcInNlYXJjaFwiIT09ZSl0aHJvdyBuZXcgRXJyb3IoYEF0dGVtcHRlZCB0byBpbml0aWFsaXplIHVua25vd24gd29ya2Zsb3c6ICR7ZX1gKTthd2FpdCBfLnJlZ2lzdGVyKHsuLi50aGlzLmNvbmZpZy53b3JrZmxvd3Muc2VhcmNoLmhvbWVQcm92aWRlcixvblVzZXJJbnB1dDpaZSh0aGlzLFZlLFwiZlwiKSxvblJlc3VsdERpc3BhdGNoOlplKHRoaXMsRGUsXCJmXCIpfSksSigpLGF3YWl0IHRoaXMuY29ubmVjdCgpLHN1cGVyLmluaXRpYWxpemVXb3JrZmxvdyhlKX0sT2JqZWN0LmVudHJpZXModC53b3JrZmxvd3M/LnNlYXJjaD8ubWljcm9zb2Z0RW50aXR5VHlwZUNvbmZpZ3x8e30pLmZpbHRlcigoKFtlLHRdKT0+dCkpLmZvckVhY2goKChbZV0pPT57WmUodGhpcyxPZSxcImZcIikuYWRkKGVlW2VdKX0pKX1hc3luYyBleGVjdXRlQXBpUmVxdWVzdCguLi5lKXtyZXR1cm4gWmUodGhpcyx5ZSxcIm1cIixqZSkuY2FsbCh0aGlzLCgoKT0+WmUodGhpcyxTZSxcImZcIikuY2FsbCh0aGlzKS5leGVjdXRlQXBpUmVxdWVzdCguLi5lKSkpfX13ZT1uZXcgV2Vha01hcCxiZT1uZXcgV2Vha01hcCx4ZT1uZXcgV2Vha01hcCxfZT1uZXcgV2Vha01hcCxPZT1uZXcgV2Vha01hcCxMZT1uZXcgV2Vha01hcCxFZT1uZXcgV2Vha01hcCxTZT1uZXcgV2Vha01hcCxQZT1uZXcgV2Vha01hcCxJZT1uZXcgV2Vha01hcCxBZT1uZXcgV2Vha01hcCxUZT1uZXcgV2Vha01hcCxIZT1uZXcgV2Vha01hcCxCZT1uZXcgV2Vha01hcCxWZT1uZXcgV2Vha01hcCxEZT1uZXcgV2Vha01hcCx5ZT1uZXcgV2Vha1NldCxqZT1hc3luYyBmdW5jdGlvbihlKXt0cnl7cmV0dXJuIGF3YWl0IGUoKX1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2YgWSlyZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0KCksZSgpO3Rocm93IHR9fSxNZT1hc3luYyBmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5leGVjdXRlQXBpUmVxdWVzdChcIi92MS4wLyRiYXRjaFwiLFwiUE9TVFwiLHtyZXF1ZXN0czplfSl9LGtlPWFzeW5jIGZ1bmN0aW9uKGUsdCl7dHJ5e2NvbnN0IG49YXdhaXQgWmUodGhpcyx5ZSxcIm1cIixNZSkuY2FsbCh0aGlzLGUpLHI9Wy4uLnVlKHQsWmUodGhpcyxPZSxcImZcIikpLC4uLmZlKG4uZGF0YS5yZXNwb25zZXMuZmluZCgoZT0+XCJ1c2VyXCI9PT1lLmlkKSk/LmJvZHk/LnZhbHVlfHxbXSx0KV07cmV0dXJue2ZpbHRlcnM6cixyZXN1bHRzOlplKHRoaXMseWUsXCJtXCIsUmUpLmNhbGwodGhpcyxuLHQpfX1jYXRjaChlKXtyZXR1cm4gY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIGV4ZWN1dGUgQmF0Y2ggQVBJIHJlcXVlc3Q6IFwiLGUpLHtmaWx0ZXJzOltdLHJlc3VsdHM6W3trZXk6KDAsWi5IKSgpLHRpdGxlOlwiRXJyb3IgRmV0Y2hpbmcgU2VhcmNoIFJlc3VsdHNcIixkZXNjcmlwdGlvbjpcIlwiLGFjdGlvbnM6W10sdGVtcGxhdGU6JC55Vy5FcnJvcix0ZW1wbGF0ZUNvbnRlbnQ6YEZhaWxlZCB0byBleGVjdXRlIEJhdGNoIEFQSSByZXF1ZXN0OiAke0pTT04uc3RyaW5naWZ5KGUpfWB9XX19fSxSZT1mdW5jdGlvbihlLHQpe2xldCBuPVtdO2Zvcihjb25zdCByIG9mIGUuZGF0YS5yZXNwb25zZXMpaWYoMjAwPT09ci5zdGF0dXMpc3dpdGNoKHIuaWQpe2Nhc2VcImRyaXZlSXRlbVwiOntjb25zdCBlPWhlKHQpLG89ZS5maWx0ZXJGaWxlcz9nZShyLmJvZHkudmFsdWUsZSk6ci5ib2R5LnZhbHVlO24ucHVzaCguLi4ob3x8W10pLm1hcCgoZT0+KHtrZXk6ZS5pZD8/KDAsWi5IKSgpLHRpdGxlOmUubmFtZT8/XCJcIixkZXNjcmlwdGlvbjplLmZpbGU/Lm1pbWVUeXBlPz9cIlwiLGxhYmVsOnZlKGUubmFtZSksaWNvbjptZShlLm5hbWUpLGRhdGE6e3R5cGU6XCJkcml2ZUl0ZW1cIixpdGVtOmV9LGFjdGlvbnM6W3tuYW1lOlwiTGF1bmNoXCJ9XSx0ZW1wbGF0ZTokLnlXLlBsYWluLHRlbXBsYXRlQ29udGVudDp2b2lkIDB9KSkpKTticmVha31jYXNlXCJldmVudFwiOm4ucHVzaCguLi5yLmJvZHk/LnZhbHVlPy5bMF0/LmhpdHNDb250YWluZXJzPy5bMF0/LmhpdHM/LmZpbHRlcigoZT0+ZS5yZXNvdXJjZS5zdWJqZWN0KSkubWFwKChlPT57Y29uc3QgdD1lLnJlc291cmNlLG49Q2UoZS5oaXRJZCk7cmV0dXJue2tleTpuLHRpdGxlOnQuc3ViamVjdD8/XCJcIixsYWJlbDpcIkNhbGVuZGFyIEV2ZW50XCIsaWNvbjooMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVPdXRsb29rSWNvbiksYWN0aW9uczpbe25hbWU6XCJMYXVuY2hcIn1dLGRhdGE6e3R5cGU6XCJldmVudFwiLGl0ZW06ey4uLnQsaWQ6bn19LHRlbXBsYXRlOiQueVcuUGxhaW4sdGVtcGxhdGVDb250ZW50OnZvaWQgMH19KSl8fFtdKTticmVhaztjYXNlXCJjb250YWN0XCI6e2NvbnN0IGU9ZGUodCksbz1wZShyLmJvZHkudmFsdWV8fFtdLGUpO24ucHVzaCguLi4ob3x8W10pLm1hcCgoZT0+KHtrZXk6ZS5pZD8/KDAsWi5IKSgpLHRpdGxlOmUuZGlzcGxheU5hbWU/P1wiXCIsbGFiZWw6XCJPdXRsb29rIGNvbnRhY3RcIixpY29uOigwLFQuSzMpKEEuZGUuTWljcm9zb2Z0MzY1QXNzZXRzLk1pY3Jvc29mdDM2NU91dGxvb2tJY29uKSxhY3Rpb25zOltdLGRhdGE6e3R5cGU6XCJjb250YWN0XCIsaXRlbTplfSx0ZW1wbGF0ZTokLnlXLlBsYWluLHRlbXBsYXRlQ29udGVudDp2b2lkIDB9KSkpKTticmVha31jYXNlXCJ1c2VyXCI6e2NvbnN0IGU9ZGUodCksbz1wZShyLmJvZHkudmFsdWV8fFtdLGUpO24ucHVzaCguLi4ob3x8W10pLm1hcCgoZT0+KHtrZXk6ZS5pZD8/KDAsWi5IKSgpLHRpdGxlOmUuZGlzcGxheU5hbWU/P1wiXCIsbGFiZWw6XCJUZWFtcyBjb250YWN0XCIsaWNvbjooMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVUZWFtc0ljb24pLGFjdGlvbnM6W10sZGF0YTp7dHlwZTpcInVzZXJcIixpdGVtOmV9LHRlbXBsYXRlOiQueVcuTG9hZGluZyx0ZW1wbGF0ZUNvbnRlbnQ6dm9pZCAwfSkpKSk7YnJlYWt9Y2FzZVwibWVzc2FnZVwiOm4ucHVzaCguLi4oci5ib2R5LnZhbHVlfHxbXSkubWFwKChlPT4oe2tleTplLmlkPz8oMCxaLkgpKCksdGl0bGU6YCR7ZS5zdWJqZWN0Pz9cIlVudGl0bGVkIE1lc3NhZ2VcIn0ke2UuaXNEcmFmdD9cIiAoRHJhZnQpXCI6XCJcIn1gLGxhYmVsOlwiRW1haWxcIixpY29uOigwLFQuSzMpKEEuZGUuTWljcm9zb2Z0MzY1QXNzZXRzLk1pY3Jvc29mdDM2NU91dGxvb2tJY29uKSxhY3Rpb25zOltdLGRhdGE6e3R5cGU6XCJtZXNzYWdlXCIsaXRlbTplfSx0ZW1wbGF0ZTokLnlXLlBsYWluLHRlbXBsYXRlQ29udGVudDp2b2lkIDB9KSkpKTticmVhaztjYXNlXCJjaGF0TWVzc2FnZVwiOm4ucHVzaCguLi5yLmJvZHk/LnZhbHVlPy5bMF0/LmhpdHNDb250YWluZXJzPy5bMF0/LmhpdHM/Lm1hcCgoZT0+e2NvbnN0IHQ9ZS5yZXNvdXJjZTtyZXR1cm57a2V5OnQuaWQ/PygwLFouSCkoKSx0aXRsZTplLnN1bW1hcnk/P1wiVW50aXRsZWQgTWVzc2FnZVwiLGxhYmVsOlwiQ2hhdFwiLGljb246KDAsVC5LMykoQS5kZS5NaWNyb3NvZnQzNjVBc3NldHMuTWljcm9zb2Z0MzY1VGVhbXNJY29uKSxhY3Rpb25zOltdLGRhdGE6e3R5cGU6XCJjaGF0TWVzc2FnZVwiLGl0ZW06dH0sdGVtcGxhdGU6JC55Vy5QbGFpbix0ZW1wbGF0ZUNvbnRlbnQ6dm9pZCAwfX0pKXx8W10pO2JyZWFrO2Nhc2VcImxpc3RcIjpuLnB1c2goLi4uci5ib2R5Py52YWx1ZT8uWzBdPy5oaXRzQ29udGFpbmVycz8uWzBdPy5oaXRzPy5tYXAoKGU9Pntjb25zdCB0PWUucmVzb3VyY2Usbj1DZShlLmhpdElkKTtyZXR1cm57a2V5Om4sdGl0bGU6dC5kaXNwbGF5TmFtZT8/XCJVbnRpdGxlZCBMaXN0XCIsbGFiZWw6XCJMaXN0XCIsYWN0aW9uczpbe25hbWU6XCJMYXVuY2hcIn1dLGRhdGE6e3R5cGU6XCJsaXN0XCIsaXRlbTp7Li4udCxpZDpufX0sdGVtcGxhdGU6JC55Vy5QbGFpbix0ZW1wbGF0ZUNvbnRlbnQ6dm9pZCAwfX0pKXx8W10pO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKGBVbmtub3duIGJhdGNoIHJlc3BvbnNlIGlkOiAke3IuaWR9YCxyLmJvZHkpfWVsc2UgY29uc29sZS53YXJuKFwiQmF0Y2ggQVBJIHJlcXVlc3QgZmFpbGVkOiBcIixyKTtyZXR1cm4gbj1uLm1hcCgoZT0+e2lmKCFlLmRhdGE/Lml0ZW0/LmlkKXJldHVybiBlO2NvbnN0IHQ9WmUodGhpcyxFZSxcImZcIikuZ2V0KGUuZGF0YS5pdGVtLmlkKTtyZXR1cm4gdD97Li4uZSx0ZW1wbGF0ZTp0LnRlbXBsYXRlLHRlbXBsYXRlQ29udGVudDp0LnRlbXBsYXRlQ29udGVudH06ZX0pKSxuLnNvcnQoKChlLHQpPT5lLnRpdGxlPnQudGl0bGU/MTotMSkpfTt2YXIgRmU9bigzNDIwKTtjb25zdCBVZT0oKT0+RmUuaGQoKSxXZT0oKT0+KGFzeW5jKCk9Pihhd2FpdCgwLGMuRG0pKCkpLmRpc3BhdGNoKFwiZ2V0LWxlZ2FjeS13b3Jrc3BhY2VzXCIsdm9pZCAwKSkoKTt2YXIgemU9bigyNTI4KSxHZT1uKDEyMjIpLHFlPW4oMjEwOSksWWU9big2MTE0KX0pKCksbW9kdWxlLmV4cG9ydHM9cn0pKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFWaWV3O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0O1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdlYWtNYXA7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TWFwO1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBhbiBBU0NJSSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXNjaWlUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnNwbGl0KCcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc2NpaVRvQXJyYXk7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNBcmd1bWVudHM7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1R5cGVkQXJyYXk7XG4iLCJ2YXIgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5cztcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsInZhciBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udmFsdWVzYCBhbmQgYF8udmFsdWVzSW5gIHdoaWNoIGNyZWF0ZXMgYW5cbiAqIGFycmF5IG9mIGBvYmplY3RgIHByb3BlcnR5IHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eSBuYW1lc1xuICogb2YgYHByb3BzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIGdldCB2YWx1ZXMgZm9yLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlVmFsdWVzKG9iamVjdCwgcHJvcHMpIHtcbiAgcmV0dXJuIGFycmF5TWFwKHByb3BzLCBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gb2JqZWN0W2tleV07XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VWYWx1ZXM7XG4iLCIvKipcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5QXJyYXk7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3JlSnNEYXRhO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSYXdUYWc7XG4iLCJ2YXIgRGF0YVZpZXcgPSByZXF1aXJlKCcuL19EYXRhVmlldycpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIFByb21pc2UgPSByZXF1aXJlKCcuL19Qcm9taXNlJyksXG4gICAgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgV2Vha01hcCA9IHJlcXVpcmUoJy4vX1dlYWtNYXAnKSxcbiAgICBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cbnZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXG4gICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcbiAgICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcbiAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4vKipcbiAqIEdldHMgdGhlIGB0b1N0cmluZ1RhZ2Agb2YgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG52YXIgZ2V0VGFnID0gYmFzZUdldFRhZztcblxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxuaWYgKChEYXRhVmlldyAmJiBnZXRUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnKSB8fFxuICAgIChNYXAgJiYgZ2V0VGFnKG5ldyBNYXApICE9IG1hcFRhZykgfHxcbiAgICAoUHJvbWlzZSAmJiBnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XG4gICAgKFNldCAmJiBnZXRUYWcobmV3IFNldCkgIT0gc2V0VGFnKSB8fFxuICAgIChXZWFrTWFwICYmIGdldFRhZyhuZXcgV2Vha01hcCkgIT0gd2Vha01hcFRhZykpIHtcbiAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUdldFRhZyh2YWx1ZSksXG4gICAgICAgIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUuY29uc3RydWN0b3IgOiB1bmRlZmluZWQsXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gdG9Tb3VyY2UoQ3RvcikgOiAnJztcblxuICAgIGlmIChjdG9yU3RyaW5nKSB7XG4gICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHtcbiAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xuICAgICAgICBjYXNlIHByb21pc2VDdG9yU3RyaW5nOiByZXR1cm4gcHJvbWlzZVRhZztcbiAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRUYWc7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRWYWx1ZTtcbiIsIi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc1pXSiA9ICdcXFxcdTIwMGQnO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB3aXRoIFt6ZXJvLXdpZHRoIGpvaW5lcnMgb3IgY29kZSBwb2ludHMgZnJvbSB0aGUgYXN0cmFsIHBsYW5lc10oaHR0cDovL2Vldi5lZS9ibG9nLzIwMTUvMDkvMTIvZGFyay1jb3JuZXJzLW9mLXVuaWNvZGUvKS4gKi9cbnZhciByZUhhc1VuaWNvZGUgPSBSZWdFeHAoJ1snICsgcnNaV0ogKyByc0FzdHJhbFJhbmdlICArIHJzQ29tYm9SYW5nZSArIHJzVmFyUmFuZ2UgKyAnXScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBVbmljb2RlIHN5bWJvbHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGEgc3ltYm9sIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1VuaWNvZGUoc3RyaW5nKSB7XG4gIHJldHVybiByZUhhc1VuaWNvZGUudGVzdChzdHJpbmcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1VuaWNvZGU7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUHJvdG90eXBlO1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgaXRlcmF0b3JgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gaXRlcmF0b3IgVGhlIGl0ZXJhdG9yIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gaXRlcmF0b3JUb0FycmF5KGl0ZXJhdG9yKSB7XG4gIHZhciBkYXRhLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgd2hpbGUgKCEoZGF0YSA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgIHJlc3VsdC5wdXNoKGRhdGEudmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXRlcmF0b3JUb0FycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBUb0FycmF5O1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzO1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbm9kZVV0aWw7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJBcmc7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBzZXRgIHRvIGFuIGFycmF5IG9mIGl0cyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXQgVGhlIHNldCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvQXJyYXk7XG4iLCJ2YXIgYXNjaWlUb0FycmF5ID0gcmVxdWlyZSgnLi9fYXNjaWlUb0FycmF5JyksXG4gICAgaGFzVW5pY29kZSA9IHJlcXVpcmUoJy4vX2hhc1VuaWNvZGUnKSxcbiAgICB1bmljb2RlVG9BcnJheSA9IHJlcXVpcmUoJy4vX3VuaWNvZGVUb0FycmF5Jyk7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYW4gYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1RvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBoYXNVbmljb2RlKHN0cmluZylcbiAgICA/IHVuaWNvZGVUb0FycmF5KHN0cmluZylcbiAgICA6IGFzY2lpVG9BcnJheShzdHJpbmcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1RvQXJyYXk7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLCIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBc3RyYWwgPSAnWycgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xudmFyIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgIHJzU3ltYm9sID0gJyg/OicgKyBbcnNOb25Bc3RyYWwgKyByc0NvbWJvICsgJz8nLCByc0NvbWJvLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyLCByc0FzdHJhbF0uam9pbignfCcpICsgJyknO1xuXG4vKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xudmFyIHJlVW5pY29kZSA9IFJlZ0V4cChyc0ZpdHogKyAnKD89JyArIHJzRml0eiArICcpfCcgKyByc1N5bWJvbCArIHJzU2VxLCAnZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gdW5pY29kZVRvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlKSB8fCBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1bmljb2RlVG9BcnJheTtcbiIsInZhciBiYXNlSXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL19iYXNlSXNBcmd1bWVudHMnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FyZ3VtZW50cztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpLFxuICAgIHN0dWJGYWxzZSA9IHJlcXVpcmUoJy4vc3R1YkZhbHNlJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0J1ZmZlcjtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb247XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzdHJpbmcsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N0cmluZygnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N0cmluZygxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHxcbiAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmluZztcbiIsInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gKi9cbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJGYWxzZTtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc1N0cmluZyA9IHJlcXVpcmUoJy4vaXNTdHJpbmcnKSxcbiAgICBpdGVyYXRvclRvQXJyYXkgPSByZXF1aXJlKCcuL19pdGVyYXRvclRvQXJyYXknKSxcbiAgICBtYXBUb0FycmF5ID0gcmVxdWlyZSgnLi9fbWFwVG9BcnJheScpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5JyksXG4gICAgc3RyaW5nVG9BcnJheSA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvQXJyYXknKSxcbiAgICB2YWx1ZXMgPSByZXF1aXJlKCcuL3ZhbHVlcycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bUl0ZXJhdG9yID0gU3ltYm9sID8gU3ltYm9sLml0ZXJhdG9yIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0FycmF5KHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiBfLnRvQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gKlxuICogXy50b0FycmF5KDEpO1xuICogLy8gPT4gW11cbiAqXG4gKiBfLnRvQXJyYXkobnVsbCk7XG4gKiAvLyA9PiBbXVxuICovXG5mdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSkge1xuICAgIHJldHVybiBpc1N0cmluZyh2YWx1ZSkgPyBzdHJpbmdUb0FycmF5KHZhbHVlKSA6IGNvcHlBcnJheSh2YWx1ZSk7XG4gIH1cbiAgaWYgKHN5bUl0ZXJhdG9yICYmIHZhbHVlW3N5bUl0ZXJhdG9yXSkge1xuICAgIHJldHVybiBpdGVyYXRvclRvQXJyYXkodmFsdWVbc3ltSXRlcmF0b3JdKCkpO1xuICB9XG4gIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpLFxuICAgICAgZnVuYyA9IHRhZyA9PSBtYXBUYWcgPyBtYXBUb0FycmF5IDogKHRhZyA9PSBzZXRUYWcgPyBzZXRUb0FycmF5IDogdmFsdWVzKTtcblxuICByZXR1cm4gZnVuYyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9BcnJheTtcbiIsInZhciBiYXNlVmFsdWVzID0gcmVxdWlyZSgnLi9fYmFzZVZhbHVlcycpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHkgdmFsdWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLnZhbHVlcyhuZXcgRm9vKTtcbiAqIC8vID0+IFsxLCAyXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8udmFsdWVzKCdoaScpO1xuICogLy8gPT4gWydoJywgJ2knXVxuICovXG5mdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZVZhbHVlcyhvYmplY3QsIGtleXMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmFsdWVzO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9lbW9qaScpOyIsIi8qanNsaW50IG5vZGU6IHRydWUqL1xudmFyIHRvQXJyYXkgPSByZXF1aXJlKCdsb2Rhc2gvdG9BcnJheScpO1xudmFyIGVtb2ppQnlOYW1lID0gcmVxdWlyZSgnLi9lbW9qaS5qc29uJyk7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIHJlZ2V4IHRvIHBhcnNlIGVtb2ppIGluIGEgc3RyaW5nIC0gZmluZHMgZW1vamksIGUuZy4gOmNvZmZlZTpcbiAqL1xudmFyIGVtb2ppTmFtZVJlZ2V4ID0gLzooW2EtekEtWjAtOV9cXC1cXCtdKyk6L2c7XG5cbi8qKlxuICogcmVnZXggdG8gdHJpbSB3aGl0ZXNwYWNlXG4gKiB1c2UgaW5zdGVhZCBvZiBTdHJpbmcucHJvdG90eXBlLnRyaW0oKSBmb3IgSUU4IHN1cHBvcnRcbiAqL1xudmFyIHRyaW1TcGFjZVJlZ2V4ID0gL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG4vKipcbiAqIFJlbW92ZXMgY29sb25zIG9uIGVpdGhlciBzaWRlXG4gKiBvZiB0aGUgc3RyaW5nIGlmIHByZXNlbnRcbiAqIEBwYXJhbSAge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHN0cmlwQ29sb25zIChzdHIpIHtcbiAgdmFyIGNvbG9uSW5kZXggPSBzdHIuaW5kZXhPZignOicpO1xuICBpZiAoY29sb25JbmRleCA+IC0xKSB7XG4gICAgLy8gOmVtb2ppOiAoaHR0cDovL3d3dy5lbW9qaS1jaGVhdC1zaGVldC5jb20vKVxuICAgIGlmIChjb2xvbkluZGV4ID09PSBzdHIubGVuZ3RoIC0gMSkge1xuICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBjb2xvbkluZGV4KTtcbiAgICAgIHJldHVybiBzdHJpcENvbG9ucyhzdHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBzdHIuc3Vic3RyKGNvbG9uSW5kZXggKyAxKTtcbiAgICAgIHJldHVybiBzdHJpcENvbG9ucyhzdHIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogQWRkcyBjb2xvbnMgdG8gZWl0aGVyIHNpZGVcbiAqIG9mIHRoZSBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gd3JhcENvbG9ucyAoc3RyKSB7XG4gIHJldHVybiAodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgJiYgc3RyLmxlbmd0aCA+IDApID8gJzonICsgc3RyICsgJzonIDogc3RyO1xufVxuXG4vKipcbiAqIEVuc3VyZSB0aGF0IHRoZSB3b3JkIGlzIHdyYXBwZWQgaW4gY29sb25zXG4gKiBieSBvbmx5IGFkZGluZyB0aGVtLCBpZiB0aGV5IGFyZSBub3QgdGhlcmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVuc3VyZUNvbG9ucyAoc3RyKSB7XG4gIHJldHVybiAodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgJiYgc3RyWzBdICE9PSAnOicpID8gd3JhcENvbG9ucyhzdHIpIDogc3RyO1xufVxuXG4vLyBOb24gc3BhY2luZyBtYXJrLCBzb21lIGVtb3RpY29ucyBoYXZlIHRoZW0uIEl0J3MgdGhlICdWYXJpYW50IEZvcm0nLFxuLy8gd2hpY2ggcHJvdmlkZXMgbW9yZSBpbmZvcm1hdGlvbiBzbyB0aGF0IGVtb3RpY29ucyBjYW4gYmUgcmVuZGVyZWQgYXNcbi8vIG1vcmUgY29sb3JmdWwgZ3JhcGhpY3MuIEZFMEUgaXMgYSB1bmljb2RlIHRleHQgdmVyc2lvbiwgd2hlcmUgYXMgRkUwRlxuLy8gc2hvdWxkIGJlIHJlbmRlcmVkIGFzIGEgZ3JhcGhpY2FsIHZlcnNpb24uIFRoZSBjb2RlIGdyYWNlZnVsbHkgZGVncmFkZXMuXG52YXIgTk9OX1NQQUNJTkdfTUFSSyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoNjUwMzkpOyAvLyA2NTAzOSAtICfvuI8nIC0gMHhGRTBGO1xudmFyIG5vblNwYWNpbmdSZWdleCA9IG5ldyBSZWdFeHAoTk9OX1NQQUNJTkdfTUFSSywgJ2cnKVxuXG4vLyBSZW1vdmUgdGhlIG5vbi1zcGFjaW5nLW1hcmsgZnJvbSB0aGUgY29kZSwgbmV2ZXIgc2VuZCBhIHN0cmlwcGVkIHZlcnNpb25cbi8vIHRvIHRoZSBjbGllbnQsIGFzIGl0IGtpbGxzIGdyYXBoaWNhbCBlbW90aWNvbnMuXG5mdW5jdGlvbiBzdHJpcE5TQiAoY29kZSkge1xuICByZXR1cm4gY29kZS5yZXBsYWNlKG5vblNwYWNpbmdSZWdleCwgJycpO1xufTtcblxuLy8gUmV2ZXJzZWQgaGFzaCB0YWJsZSwgd2hlcmUgYXMgZW1vamlCeU5hbWUgY29udGFpbnMgYSB7IGhlYXJ0OiAn4p2kJyB9XG4vLyBkaWN0aW9uYXJ5IGVtb2ppQnlDb2RlIGNvbnRhaW5zIHsg4p2kOiAnaGVhcnQnIH0uIFRoZSBjb2RlcyBhcmUgbm9ybWFsaXplZFxuLy8gdG8gdGhlIHRleHQgdmVyc2lvbi5cbnZhciBlbW9qaUJ5Q29kZSA9IE9iamVjdC5rZXlzKGVtb2ppQnlOYW1lKS5yZWR1Y2UoZnVuY3Rpb24oaCxrKSB7XG4gIGhbc3RyaXBOU0IoZW1vamlCeU5hbWVba10pXSA9IGs7XG4gIHJldHVybiBoO1xufSwge30pO1xuXG4vKipcbiAqIEVtb2ppIG5hbWVzcGFjZVxuICovXG52YXIgRW1vamkgPSB7XG4gIGVtb2ppOiBlbW9qaUJ5TmFtZSxcbn07XG5cbi8qKlxuICogZ2V0IGVtb2ppIGNvZGUgZnJvbSBuYW1lLiByZXR1cm4gZW1vamkgY29kZSBiYWNrIGlmIGNvZGUgaXMgcGFzc2VkIGluLlxuICogQHBhcmFtICB7c3RyaW5nfSBlbW9qaVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5FbW9qaS5fZ2V0ID0gZnVuY3Rpb24gX2dldCAoZW1vamkpIHtcbiAgaWYgKGVtb2ppQnlDb2RlW3N0cmlwTlNCKGVtb2ppKV0pIHtcbiAgICByZXR1cm4gZW1vamk7XG4gIH0gZWxzZSBpZiAoZW1vamlCeU5hbWUuaGFzT3duUHJvcGVydHkoZW1vamkpKSB7XG4gICAgcmV0dXJuIGVtb2ppQnlOYW1lW2Vtb2ppXTtcbiAgfVxuXG4gIHJldHVybiBlbnN1cmVDb2xvbnMoZW1vamkpO1xufTtcblxuLyoqXG4gKiBnZXQgZW1vamkgY29kZSBmcm9tIDplbW9qaTogc3RyaW5nIG9yIG5hbWVcbiAqIEBwYXJhbSAge3N0cmluZ30gZW1vamlcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuRW1vamkuZ2V0ID0gZnVuY3Rpb24gZ2V0IChlbW9qaSkge1xuICBlbW9qaSA9IHN0cmlwQ29sb25zKGVtb2ppKTtcblxuICByZXR1cm4gRW1vamkuX2dldChlbW9qaSk7XG59O1xuXG4vKipcbiAqIGZpbmQgdGhlIGVtb2ppIGJ5IGVpdGhlciBjb2RlIG9yIG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lT3JDb2RlIFRoZSBlbW9qaSB0byBmaW5kLCBlaXRoZXIgYGNvZmZlZWAsIGA6Y29mZmVlOmAgb3IgYOKYlWA7XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbkVtb2ppLmZpbmQgPSBmdW5jdGlvbiBmaW5kIChuYW1lT3JDb2RlKSB7XG4gIHJldHVybiBFbW9qaS5maW5kQnlOYW1lKG5hbWVPckNvZGUpIHx8IEVtb2ppLmZpbmRCeUNvZGUobmFtZU9yQ29kZSk7XG59O1xuXG4vKipcbiAqIGZpbmQgdGhlIGVtb2ppIGJ5IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBlbW9qaSB0byBmaW5kIGVpdGhlciBgY29mZmVlYCBvciBgOmNvZmZlZTpgO1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5FbW9qaS5maW5kQnlOYW1lID0gZnVuY3Rpb24gZmluZEJ5TmFtZSAobmFtZSkge1xuICB2YXIgc3RyaXBwZWQgPSBzdHJpcENvbG9ucyhuYW1lKTtcbiAgdmFyIGVtb2ppID0gZW1vamlCeU5hbWVbc3RyaXBwZWRdO1xuXG4gIHJldHVybiBlbW9qaSA/ICh7IGVtb2ppOiBlbW9qaSwga2V5OiBzdHJpcHBlZCB9KSA6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogZmluZCB0aGUgZW1vamkgYnkgY29kZSAoZW1vamkpXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZSBUaGUgZW1vamkgdG8gZmluZDsgZm9yIGV4YW1wbGUgYOKYlWAgb3IgYOKYlGBcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuRW1vamkuZmluZEJ5Q29kZSA9IGZ1bmN0aW9uIGZpbmRCeUNvZGUgKGNvZGUpIHtcbiAgdmFyIHN0cmlwcGVkID0gc3RyaXBOU0IoY29kZSk7XG4gIHZhciBuYW1lID0gZW1vamlCeUNvZGVbc3RyaXBwZWRdO1xuXG4gIC8vIGxvb2t1cCBlbW9qaSB0byBlbnN1cmUgdGhlIFZhcmlhbnQgRm9ybSBpcyByZXR1cm5lZFxuICByZXR1cm4gbmFtZSA/ICh7IGVtb2ppOiBlbW9qaUJ5TmFtZVtuYW1lXSwga2V5OiBuYW1lIH0pIDogdW5kZWZpbmVkO1xufTtcblxuXG4vKipcbiAqIENoZWNrIGlmIGFuIGVtb2ppIGlzIGtub3duIGJ5IHRoaXMgbGlicmFyeVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVPckNvZGUgVGhlIGVtb2ppIHRvIHZhbGlkYXRlLCBlaXRoZXIgYGNvZmZlZWAsIGA6Y29mZmVlOmAgb3IgYOKYlWA7XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbkVtb2ppLmhhc0Vtb2ppID0gZnVuY3Rpb24gaGFzRW1vamkgKG5hbWVPckNvZGUpIHtcbiAgcmV0dXJuIEVtb2ppLmhhc0Vtb2ppQnlOYW1lKG5hbWVPckNvZGUpIHx8IEVtb2ppLmhhc0Vtb2ppQnlDb2RlKG5hbWVPckNvZGUpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBhbiBlbW9qaSB3aXRoIGdpdmVuIG5hbWUgaXMga25vd24gYnkgdGhpcyBsaWJyYXJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgZW1vamkgdG8gdmFsaWRhdGUgZWl0aGVyIGBjb2ZmZWVgIG9yIGA6Y29mZmVlOmA7XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbkVtb2ppLmhhc0Vtb2ppQnlOYW1lID0gZnVuY3Rpb24gaGFzRW1vamlCeU5hbWUgKG5hbWUpIHtcbiAgdmFyIHJlc3VsdCA9IEVtb2ppLmZpbmRCeU5hbWUobmFtZSk7XG4gIHJldHVybiAhIXJlc3VsdCAmJiByZXN1bHQua2V5ID09PSBzdHJpcENvbG9ucyhuYW1lKTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBnaXZlbiBlbW9qaSBpcyBrbm93biBieSB0aGlzIGxpYnJhcnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIFRoZSBlbW9qaSB0byB2YWxpZGF0ZTsgZm9yIGV4YW1wbGUgYOKYlWAgb3IgYOKYlGBcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuRW1vamkuaGFzRW1vamlCeUNvZGUgPSBmdW5jdGlvbiBoYXNFbW9qaUJ5Q29kZSAoY29kZSkge1xuICB2YXIgcmVzdWx0ID0gRW1vamkuZmluZEJ5Q29kZShjb2RlKTtcbiAgcmV0dXJuICEhcmVzdWx0ICYmIHN0cmlwTlNCKHJlc3VsdC5lbW9qaSkgPT09IHN0cmlwTlNCKGNvZGUpO1xufTtcblxuLyoqXG4gKiBnZXQgZW1vamkgbmFtZSBmcm9tIGNvZGVcbiAqIEBwYXJhbSAge3N0cmluZ30gZW1vamlcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluY2x1ZGVDb2xvbnMgc2hvdWxkIHRoZSByZXN1bHQgaW5jbHVkZSB0aGUgOjpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuRW1vamkud2hpY2ggPSBmdW5jdGlvbiB3aGljaCAoZW1vamlfY29kZSwgaW5jbHVkZUNvbG9ucykge1xuICB2YXIgY29kZSA9IHN0cmlwTlNCKGVtb2ppX2NvZGUpO1xuICB2YXIgd29yZCA9IGVtb2ppQnlDb2RlW2NvZGVdO1xuXG4gIHJldHVybiBpbmNsdWRlQ29sb25zID8gd3JhcENvbG9ucyh3b3JkKSA6IHdvcmQ7XG59O1xuXG4vKipcbiAqIGVtb2ppZnkgYSBzdHJpbmcgKHJlcGxhY2UgOmVtb2ppOiB3aXRoIGFuIGVtb2ppKVxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSAge2Z1bmN0aW9ufSBvbl9taXNzaW5nIChnZXRzIGVtb2ppIG5hbWUgd2l0aG91dCA6OiBhbmQgcmV0dXJucyBhIHByb3BlciBlbW9qaSBpZiBubyBlbW9qaSB3YXMgZm91bmQpXG4gKiBAcGFyYW0gIHtmdW5jdGlvbn0gZm9ybWF0ICh3cmFwIHRoZSByZXR1cm5lZCBlbW9qaSBpbiBhIGN1c3RvbSBlbGVtZW50KVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5FbW9qaS5lbW9qaWZ5ID0gZnVuY3Rpb24gZW1vamlmeSAoc3RyLCBvbl9taXNzaW5nLCBmb3JtYXQpIHtcbiAgaWYgKCFzdHIpIHJldHVybiAnJztcblxuICByZXR1cm4gc3RyLnNwbGl0KGVtb2ppTmFtZVJlZ2V4KSAvLyBwYXJzZSBlbW9qaSB2aWEgcmVnZXhcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gcGFyc2VFbW9qaShzLCBpKSB7XG4gICAgICAgICAgICAgIC8vIGV2ZXJ5IHNlY29uZCBlbGVtZW50IGlzIGFuIGVtb2ppLCBlLmcuIFwidGVzdCA6ZmFzdF9mb3J3YXJkOlwiIC0+IFsgXCJ0ZXN0IFwiLCBcImZhc3RfZm9yd2FyZFwiIF1cbiAgICAgICAgICAgICAgaWYgKGkgJSAyID09PSAwKSByZXR1cm4gcztcbiAgICAgICAgICAgICAgdmFyIGVtb2ppID0gRW1vamkuX2dldChzKTtcbiAgICAgICAgICAgICAgdmFyIGlzTWlzc2luZyA9IGVtb2ppLmluZGV4T2YoJzonKSA+IC0xO1xuXG4gICAgICAgICAgICAgIGlmIChpc01pc3NpbmcgJiYgdHlwZW9mIG9uX21pc3NpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb25fbWlzc2luZyhzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghaXNNaXNzaW5nICYmIHR5cGVvZiBmb3JtYXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0KGVtb2ppLCBzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBlbW9qaTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignJykgLy8gY29udmVydCBiYWNrIHRvIHN0cmluZ1xuICA7XG59O1xuXG4vKipcbiAqIHJldHVybiBhIHJhbmRvbSBlbW9qaVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5FbW9qaS5yYW5kb20gPSBmdW5jdGlvbiByYW5kb20gKCkge1xuICB2YXIgZW1vamlLZXlzID0gT2JqZWN0LmtleXMoZW1vamlCeU5hbWUpO1xuICB2YXIgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBlbW9qaUtleXMubGVuZ3RoKTtcbiAgdmFyIGtleSA9IGVtb2ppS2V5c1tyYW5kb21JbmRleF07XG4gIHZhciBlbW9qaSA9IEVtb2ppLl9nZXQoa2V5KTtcbiAgcmV0dXJuIHsga2V5OiBrZXksIGVtb2ppOiBlbW9qaSB9O1xufVxuXG4vKipcbiAqICByZXR1cm4gYW4gY29sbGVjdGlvbiBvZiBwb3RlbnRpYWwgZW1vamkgbWF0Y2hlc1xuICogIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqICBAcmV0dXJuIHtBcnJheS48T2JqZWN0Pn1cbiAqL1xuRW1vamkuc2VhcmNoID0gZnVuY3Rpb24gc2VhcmNoIChzdHIpIHtcbiAgdmFyIGVtb2ppS2V5cyA9IE9iamVjdC5rZXlzKGVtb2ppQnlOYW1lKTtcbiAgdmFyIG1hdGNoZXIgPSBzdHJpcENvbG9ucyhzdHIpXG4gIHZhciBtYXRjaGluZ0tleXMgPSBlbW9qaUtleXMuZmlsdGVyKGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBrZXkudG9TdHJpbmcoKS5pbmRleE9mKG1hdGNoZXIpID09PSAwO1xuICB9KTtcbiAgcmV0dXJuIG1hdGNoaW5nS2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleToga2V5LFxuICAgICAgZW1vamk6IEVtb2ppLl9nZXQoa2V5KSxcbiAgICB9O1xuICB9KTtcbn1cblxuLyoqXG4gKiB1bmVtb2ppZnkgYSBzdHJpbmcgKHJlcGxhY2UgZW1vamkgd2l0aCA6ZW1vamk6KVxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuRW1vamkudW5lbW9qaWZ5ID0gZnVuY3Rpb24gdW5lbW9qaWZ5IChzdHIpIHtcbiAgaWYgKCFzdHIpIHJldHVybiAnJztcbiAgdmFyIHdvcmRzID0gdG9BcnJheShzdHIpO1xuXG4gIHJldHVybiB3b3Jkcy5tYXAoZnVuY3Rpb24od29yZCkge1xuICAgIHJldHVybiBFbW9qaS53aGljaCh3b3JkLCB0cnVlKSB8fCB3b3JkO1xuICB9KS5qb2luKCcnKTtcbn07XG5cbi8qKlxuICogcmVwbGFjZSBlbW9qaXMgd2l0aCByZXBsYWNlbWVudCB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtmdW5jdGlvbnxzdHJpbmd9IHRoZSBzdHJpbmcgb3IgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmVwbGFjZSB0aGUgZW1vamkgd2l0aFxuICogQHBhcmFtIHtib29sZWFufSBzaG91bGQgdHJhaWxpbmcgd2hpdGVzcGFjZXMgYmUgY2xlYW5lZD8gRGVmYXVsdHMgZmFsc2VcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuRW1vamkucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2UgKHN0ciwgcmVwbGFjZW1lbnQsIGNsZWFuU3BhY2VzKSB7XG4gIGlmICghc3RyKSByZXR1cm4gJyc7XG5cbiAgdmFyIHJlcGxhY2UgPSB0eXBlb2YgcmVwbGFjZW1lbnQgPT09ICdmdW5jdGlvbicgPyByZXBsYWNlbWVudCA6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVwbGFjZW1lbnQ7IH07XG4gIHZhciB3b3JkcyA9IHRvQXJyYXkoc3RyKTtcblxuICB2YXIgcmVwbGFjZWQgPSB3b3Jkcy5tYXAoZnVuY3Rpb24od29yZCwgaWR4KSB7XG4gICAgdmFyIGVtb2ppID0gRW1vamkuZmluZEJ5Q29kZSh3b3JkKTtcblxuICAgIGlmIChlbW9qaSAmJiBjbGVhblNwYWNlcyAmJiB3b3Jkc1tpZHggKyAxXSA9PT0gJyAnKSB7XG4gICAgICB3b3Jkc1tpZHggKyAxXSA9ICcnO1xuICAgIH1cblxuICAgIHJldHVybiBlbW9qaSA/IHJlcGxhY2UoZW1vamkpIDogd29yZDtcbiAgfSkuam9pbignJyk7XG5cbiAgcmV0dXJuIGNsZWFuU3BhY2VzID8gcmVwbGFjZWQucmVwbGFjZSh0cmltU3BhY2VSZWdleCwgJycpIDogcmVwbGFjZWQ7XG59O1xuXG5cbi8qKlxuICogcmVtb3ZlIGFsbCBlbW9qaXMgZnJvbSBhIHN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5FbW9qaS5zdHJpcCA9IGZ1bmN0aW9uIHN0cmlwIChzdHIpIHtcbiAgcmV0dXJuIEVtb2ppLnJlcGxhY2Uoc3RyLCAnJywgdHJ1ZSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVtb2ppO1xuIiwiaW1wb3J0IHtcblx0Q0xJVGVtcGxhdGUsXG5cdEhvbWUsXG5cdHR5cGUgSG9tZURpc3BhdGNoZWRTZWFyY2hSZXN1bHQsXG5cdHR5cGUgSG9tZVByb3ZpZGVyLFxuXHR0eXBlIEhvbWVSZWdpc3RyYXRpb24sXG5cdHR5cGUgSG9tZVNlYXJjaExpc3RlbmVyUmVxdWVzdCxcblx0dHlwZSBIb21lU2VhcmNoTGlzdGVuZXJSZXNwb25zZSxcblx0dHlwZSBIb21lU2VhcmNoUmVzcG9uc2Vcbn0gZnJvbSBcIkBvcGVuZmluL3dvcmtzcGFjZVwiO1xuaW1wb3J0IHsgZ2V0SGVscFNlYXJjaEVudHJpZXMsIGdldFNlYXJjaFJlc3VsdHMsIGluaXRpYWxpemVTb3VyY2VzLCBpdGVtU2VsZWN0aW9uIH0gZnJvbSBcIi4vc291cmNlc1wiO1xuXG4vKipcbiAqIFJlZ2lzdGVyIHdpdGggdGhlIGhvbWUgY29tcG9uZW50LlxuICogQHBhcmFtIGlkIFRoZSBpZCB0byByZWdpc3RlciB0aGUgcHJvdmlkZXIgd2l0aC5cbiAqIEBwYXJhbSB0aXRsZSBUaGUgdGl0bGUgdG8gdXNlIGZvciB0aGUgaG9tZSByZWdpc3RyYXRpb24uXG4gKiBAcGFyYW0gaWNvbiBUaGUgaWNvbiB0byB1c2UgZm9yIHRoZSBob21lIHJlZ2lzdHJhdGlvbi5cbiAqIEByZXR1cm5zIFRoZSByZWdpc3RyYXRpb24gZGV0YWlscyBmb3IgaG9tZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZ2lzdGVyKGlkOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIGljb246IHN0cmluZyk6IFByb21pc2U8SG9tZVJlZ2lzdHJhdGlvbj4ge1xuXHRjb25zb2xlLmxvZyhcIkluaXRpYWxpemluZyBob21lLlwiKTtcblxuXHRsZXQgbGFzdFJlc3BvbnNlOiBIb21lU2VhcmNoTGlzdGVuZXJSZXNwb25zZTtcblxuXHQvKipcblx0ICogVGhlIGNhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHVzZXIgdHlwZXMgaW4gdGhlIGhvbWUgcXVlcnkuXG5cdCAqIEBwYXJhbSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCBmcm9tIHRoZSBob21lIGNvbXBvbmVudC5cblx0ICogQHBhcmFtIHJlc3BvbnNlIFRoZSByZXNwb25zZSB0byB1c2UgZm9yIGFzeW5jIHVwZGF0ZXMuXG5cdCAqIEByZXR1cm5zIFRoZSByZXN1bHRzIHRvIGRpc3BsYXkgaW4gaG9tZS5cblx0ICovXG5cdGFzeW5jIGZ1bmN0aW9uIG9uVXNlcklucHV0KFxuXHRcdHJlcXVlc3Q6IEhvbWVTZWFyY2hMaXN0ZW5lclJlcXVlc3QsXG5cdFx0cmVzcG9uc2U6IEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlXG5cdCk6IFByb21pc2U8SG9tZVNlYXJjaFJlc3BvbnNlPiB7XG5cdFx0Y29uc3QgcXVlcnlMb3dlciA9IHJlcXVlc3QucXVlcnkudG9Mb3dlckNhc2UoKTtcblxuXHRcdC8vIElmIHRoZSBxdWVyeSBzdGFydHMgd2l0aCBhID8gdHJlYXQgdGhpcyBhcyBhIGhlbHAgcmVxdWVzdFxuXHRcdC8vIHNvIHdlIGRvbid0IGhhdmUgYW55IGFkZGl0aW9uYWwgZW50cmllcyB0byBzaG93XG5cdFx0aWYgKHF1ZXJ5TG93ZXIuc3RhcnRzV2l0aChcIj9cIikpIHtcblx0XHRcdHJldHVybiB7IHJlc3VsdHM6IGF3YWl0IGdldEhlbHBTZWFyY2hFbnRyaWVzKCkgfTtcblx0XHR9XG5cblx0XHRpZiAobGFzdFJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGxhc3RSZXNwb25zZS5jbG9zZSgpO1xuXHRcdH1cblx0XHRsYXN0UmVzcG9uc2UgPSByZXNwb25zZTtcblx0XHRsYXN0UmVzcG9uc2Uub3BlbigpO1xuXG5cdFx0aWYgKHF1ZXJ5TG93ZXIuc3RhcnRzV2l0aChcIi9sb2FkaW5nXCIpKSB7XG5cdFx0XHQvLyBFeGFtcGxlIGNvbW1hbmQgc2hvd2luZyB0aGUgZGVmYXVsdCBsb2FkaW5nIHRlbXBsYXRlXG5cdFx0XHQvLyBTZWxlY3RpbmcgdGhlIHRlbXBsYXRlIHdpbGwgc2hvdyBhIGxvYWRlZCBwYWdlXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRyZXN1bHRzOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0a2V5OiBcImxvYWRpbmctMDAwMVwiLFxuXHRcdFx0XHRcdFx0dGl0bGU6IFwiRXhhbXBsZSBsb2FkaW5nIGluZGljYXRvclwiLFxuXHRcdFx0XHRcdFx0bGFiZWw6IFwiSW5mb3JtYXRpb25cIixcblx0XHRcdFx0XHRcdGFjdGlvbnM6IFtdLFxuXHRcdFx0XHRcdFx0ZGF0YToge30sXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZTogQ0xJVGVtcGxhdGUuTG9hZGluZyxcblx0XHRcdFx0XHRcdHRlbXBsYXRlQ29udGVudDogXCJcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XVxuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKHF1ZXJ5TG93ZXIuc3RhcnRzV2l0aChcIi9lcnJvclwiKSkge1xuXHRcdFx0Ly8gRXhhbXBsZSBjb21tYW5kIHNob3dpbmcgdGhlIGRlZmF1bHQgZXJyb3IgdGVtcGxhdGVcblx0XHRcdC8vIFNlbGVjdGluZyBvciByZWxvYWRpbmcgdGhlIHRlbXBsYXRlIHdpbGwgc2hvdyBhIGxvYWRlZCBwYWdlXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRyZXN1bHRzOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0a2V5OiBcImVycm9yLTAwMDFcIixcblx0XHRcdFx0XHRcdHRpdGxlOiBcIkV4YW1wbGUgZXJyb3IgaW5kaWNhdG9yXCIsXG5cdFx0XHRcdFx0XHRsYWJlbDogXCJJbmZvcm1hdGlvblwiLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogW10sXG5cdFx0XHRcdFx0XHRkYXRhOiB7fSxcblx0XHRcdFx0XHRcdHRlbXBsYXRlOiBDTElUZW1wbGF0ZS5FcnJvcixcblx0XHRcdFx0XHRcdHRlbXBsYXRlQ29udGVudDogXCJcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZ2V0U2VhcmNoUmVzdWx0cyhyZXF1ZXN0LnF1ZXJ5LCBbXSwgbGFzdFJlc3BvbnNlLCB7XG5cdFx0XHRpc1N1Z2dlc3Rpb246IHJlcXVlc3QuY29udGV4dD8uaXNTdWdnZXN0aW9uID8/IGZhbHNlXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGNhbGxiYWNrIGZpcmVkIHdoZW4gYSBzZWxlY3Rpb24gaXMgbWFkZSBpbiBob21lLlxuXHQgKiBAcGFyYW0gcmVzdWx0IFRoZSBpdGVtIHRoYXQgd2FzIHNlbGVjdGVkIGluIGhvbWUuXG5cdCAqL1xuXHRhc3luYyBmdW5jdGlvbiBvblNlbGVjdGlvbihyZXN1bHQ6IEhvbWVEaXNwYXRjaGVkU2VhcmNoUmVzdWx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHJlc3VsdC5kYXRhICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGxldCBoYW5kbGVkID0gZmFsc2U7XG5cdFx0XHRpZiAocmVzdWx0LmFjdGlvbi50cmlnZ2VyID09PSBcInVzZXItYWN0aW9uXCIgJiYgcmVzdWx0LmtleSA9PT0gXCJsb2FkaW5nLTAwMDFcIikge1xuXHRcdFx0XHRsYXN0UmVzcG9uc2UucmV2b2tlKFwibG9hZGluZy0wMDAxXCIpO1xuXHRcdFx0XHRsYXN0UmVzcG9uc2UucmVzcG9uZChbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0a2V5OiBcImNvbnRlbnQtMDAwMVwiLFxuXHRcdFx0XHRcdFx0dGl0bGU6IFwiRXhhbXBsZSBDb250ZW50XCIsXG5cdFx0XHRcdFx0XHRsYWJlbDogXCJJbmZvcm1hdGlvblwiLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogW10sXG5cdFx0XHRcdFx0XHRkYXRhOiB7fSxcblx0XHRcdFx0XHRcdHRlbXBsYXRlOiBDTElUZW1wbGF0ZS5TaW1wbGVUZXh0LFxuXHRcdFx0XHRcdFx0dGVtcGxhdGVDb250ZW50OiBcIlJlc3VsdCBsb2FkZWRcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XSk7XG5cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0cmVzdWx0LmtleSA9PT0gXCJlcnJvci0wMDAxXCIgJiZcblx0XHRcdFx0KHJlc3VsdC5hY3Rpb24udHJpZ2dlciA9PT0gXCJ1c2VyLWFjdGlvblwiIHx8IHJlc3VsdC5hY3Rpb24udHJpZ2dlciA9PT0gXCJyZWxvYWRcIilcblx0XHRcdCkge1xuXHRcdFx0XHRsYXN0UmVzcG9uc2UucmV2b2tlKFwiZXJyb3ItMDAwMVwiKTtcblx0XHRcdFx0bGFzdFJlc3BvbnNlLnJlc3BvbmQoW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGtleTogXCJjb250ZW50LTAwMDFcIixcblx0XHRcdFx0XHRcdHRpdGxlOiBcIkV4YW1wbGUgQ29udGVudFwiLFxuXHRcdFx0XHRcdFx0bGFiZWw6IFwiSW5mb3JtYXRpb25cIixcblx0XHRcdFx0XHRcdGFjdGlvbnM6IFtdLFxuXHRcdFx0XHRcdFx0ZGF0YToge30sXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZTogQ0xJVGVtcGxhdGUuU2ltcGxlVGV4dCxcblx0XHRcdFx0XHRcdHRlbXBsYXRlQ29udGVudDogXCJSZXN1bHQgbG9hZGVkXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0pO1xuXHRcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAocmVzdWx0LmFjdGlvbi50cmlnZ2VyID09PSBcInVzZXItYWN0aW9uXCIgJiYgcmVzdWx0LmtleSA9PT0gXCJjb250ZW50LTAwMDFcIikge1xuXHRcdFx0XHRsYXN0UmVzcG9uc2UucmV2b2tlKFwiY29udGVudC0wMDAxXCIpO1xuXHRcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGlmICghaGFuZGxlZCkge1xuXHRcdFx0XHRhd2FpdCBpdGVtU2VsZWN0aW9uKHJlc3VsdCwgbGFzdFJlc3BvbnNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBJbXBvcnRhbnQgdG8gbm90ZSB3ZSBlbmFibGUgdGhlIGRpc3BhdGNoRm9jdXNFdmVudHMgZmxhZ1xuXHQvLyB3aGljaCBtZWFucyB3ZSByZWNlaXZlIGBmb2N1cy1jaGFuZ2VgIGV2ZW50cyBpbiB0aGUgb25TZWxlY3Rpb25cblx0Ly8gY2FsbGJhY2sgYWxsb3dpbmcgdXMgdG8gbGF6eSBsb2FkIGEgdGVtcGxhdGVcblx0Y29uc3QgaG9tZVByb3ZpZGVyOiBIb21lUHJvdmlkZXIgPSB7XG5cdFx0aWQsXG5cdFx0dGl0bGUsXG5cdFx0aWNvbixcblx0XHRvblVzZXJJbnB1dCxcblx0XHRvblJlc3VsdERpc3BhdGNoOiBvblNlbGVjdGlvbixcblx0XHRkaXNwYXRjaEZvY3VzRXZlbnRzOiB0cnVlXG5cdH07XG5cblx0Y29uc3QgaG9tZVJlZ2lzdHJhdGlvbiA9IGF3YWl0IEhvbWUucmVnaXN0ZXIoaG9tZVByb3ZpZGVyKTtcblx0Y29uc29sZS5sb2coXCJIb21lIGNvbmZpZ3VyZWQuXCIpO1xuXHRjb25zb2xlLmxvZyhob21lUmVnaXN0cmF0aW9uKTtcblxuXHQvLyBJbml0aWFsaXplIGFsbCB0aGUgZGF0YSBzb3VyY2VzXG5cdGF3YWl0IGluaXRpYWxpemVTb3VyY2VzKGhvbWVSZWdpc3RyYXRpb24pO1xuXG5cdHJldHVybiBob21lUmVnaXN0cmF0aW9uO1xufVxuIiwiaW1wb3J0IHR5cGUge1xuXHRDTElGaWx0ZXIsXG5cdEhvbWVEaXNwYXRjaGVkU2VhcmNoUmVzdWx0LFxuXHRIb21lUmVnaXN0cmF0aW9uLFxuXHRIb21lU2VhcmNoTGlzdGVuZXJSZXNwb25zZSxcblx0SG9tZVNlYXJjaFJlc3BvbnNlLFxuXHRIb21lU2VhcmNoUmVzdWx0XG59IGZyb20gXCJAb3BlbmZpbi93b3Jrc3BhY2VcIjtcbmltcG9ydCB0eXBlIHsgSVNvdXJjZSwgSVNvdXJjZURlZmluaXRpb24gfSBmcm9tIFwiLi9zaGFwZXNcIjtcbmltcG9ydCB7IEFzeW5jQ29udGFjdHNTb3VyY2UgfSBmcm9tIFwiLi9zb3VyY2VzL2FzeW5jLWNvbnRhY3RzL2FzeW5jLWNvbnRhY3RzLXNvdXJjZVwiO1xuaW1wb3J0IHsgRW1vamlTb3VyY2UgfSBmcm9tIFwiLi9zb3VyY2VzL2Vtb2ppL2Vtb2ppLXNvdXJjZVwiO1xuaW1wb3J0IHsgUXVvdGVTb3VyY2UgfSBmcm9tIFwiLi9zb3VyY2VzL3F1b3RlL3F1b3RlLXNvdXJjZVwiO1xuaW1wb3J0IHsgU3VnZ2VzdGlvblNvdXJjZSB9IGZyb20gXCIuL3NvdXJjZXMvc3VnZ2VzdGlvbnMvc3VnZ2VzdGlvbi1zb3VyY2VcIjtcbmltcG9ydCB7IFRlbXBsYXRlVHlwZXNTb3VyY2UgfSBmcm9tIFwiLi9zb3VyY2VzL3RlbXBsYXRlLXR5cGVzL3RlbXBsYXRlLXR5cGVzLXNvdXJjZVwiO1xuaW1wb3J0IHsgVHJlZUlubGluZVNvdXJjZSB9IGZyb20gXCIuL3NvdXJjZXMvdHJlZS1pbmxpbmUvdHJlZS1pbmxpbmUtc291cmNlXCI7XG5pbXBvcnQgeyBUcmVlUXVlcnlTb3VyY2UgfSBmcm9tIFwiLi9zb3VyY2VzL3RyZWUtcXVlcnkvdHJlZS1xdWVyeS1zb3VyY2VcIjtcblxuLy8gQ29uZmlndXJhdGlvbiBmb3IgYWxsIHRoZSBkYXRhIHNvdXJjZXMuXG5jb25zdCBTT1VSQ0VTOiB7XG5cdGRlZmluaXRpb246IElTb3VyY2VEZWZpbml0aW9uO1xuXHRpbnN0YW5jZTogSVNvdXJjZTtcbn1bXSA9IFtcblx0e1xuXHRcdGRlZmluaXRpb246IHtcblx0XHRcdGlkOiBcInF1b3RlXCIsXG5cdFx0XHRkYXRhOiB7XG5cdFx0XHRcdHJvb3RVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2RhdGEvcXVvdGVzL1wiXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRpbnN0YW5jZTogbmV3IFF1b3RlU291cmNlKClcblx0fSxcblx0e1xuXHRcdGRlZmluaXRpb246IHtcblx0XHRcdGlkOiBcImVtb2ppXCIsXG5cdFx0XHRkYXRhOiB7XG5cdFx0XHRcdHJvb3RVcmw6IFwiXCJcblx0XHRcdH1cblx0XHR9LFxuXHRcdGluc3RhbmNlOiBuZXcgRW1vamlTb3VyY2UoKVxuXHR9LFxuXHR7XG5cdFx0ZGVmaW5pdGlvbjoge1xuXHRcdFx0aWQ6IFwiYXN5bmNcIixcblx0XHRcdGRhdGE6IHtcblx0XHRcdFx0cm9vdFVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODAvZGF0YS9jb250YWN0cy9cIlxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0aW5zdGFuY2U6IG5ldyBBc3luY0NvbnRhY3RzU291cmNlKClcblx0fSxcblx0e1xuXHRcdGRlZmluaXRpb246IHtcblx0XHRcdGlkOiBcInRyZWUtcXVlcnlcIixcblx0XHRcdGRhdGE6IHtcblx0XHRcdFx0cm9vdFVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODAvZGF0YS9vcmdhbml6YXRpb25zL1wiXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRpbnN0YW5jZTogbmV3IFRyZWVRdWVyeVNvdXJjZSgpXG5cdH0sXG5cdHtcblx0XHRkZWZpbml0aW9uOiB7XG5cdFx0XHRpZDogXCJ0cmVlLWlubGluZVwiLFxuXHRcdFx0ZGF0YToge1xuXHRcdFx0XHRyb290VXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9kYXRhL29yZ2FuaXphdGlvbnMvXCJcblx0XHRcdH1cblx0XHR9LFxuXHRcdGluc3RhbmNlOiBuZXcgVHJlZUlubGluZVNvdXJjZSgpXG5cdH0sXG5cdHtcblx0XHRkZWZpbml0aW9uOiB7XG5cdFx0XHRpZDogXCJzdWdnZXN0aW9uc1wiXG5cdFx0fSxcblx0XHRpbnN0YW5jZTogbmV3IFN1Z2dlc3Rpb25Tb3VyY2UoKVxuXHR9LFxuXHR7XG5cdFx0ZGVmaW5pdGlvbjoge1xuXHRcdFx0aWQ6IFwidGVtcGxhdGUtdHlwZXNcIlxuXHRcdH0sXG5cdFx0aW5zdGFuY2U6IG5ldyBUZW1wbGF0ZVR5cGVzU291cmNlKClcblx0fVxuXTtcblxuLyoqXG4gKiBJbml0aWFsaXplIHRoZSBzb3VyY2VzLlxuICogQHBhcmFtIGhvbWVSZWdpc3RyYXRpb24gVGhlIGhvbWUgcmVnaXN0cmF0aW9uIHRvIHVzZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRpYWxpemVTb3VyY2VzKGhvbWVSZWdpc3RyYXRpb246IEhvbWVSZWdpc3RyYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcblx0Zm9yIChjb25zdCBzb3VyY2Ugb2YgU09VUkNFUykge1xuXHRcdGF3YWl0IHNvdXJjZS5pbnN0YW5jZS5pbml0aWFsaXplKHNvdXJjZS5kZWZpbml0aW9uLCAoKSA9PiB7fSwge1xuXHRcdFx0c2V0U2VhcmNoUXVlcnk6IGFzeW5jIChxdWVyeTogc3RyaW5nKSA9PiBob21lUmVnaXN0cmF0aW9uLnNldFNlYXJjaFF1ZXJ5KHF1ZXJ5KSxcblx0XHRcdG9wZW5Vcmw6IGFzeW5jICh1cmw6IHN0cmluZykgPT4gZmluLlN5c3RlbS5vcGVuVXJsV2l0aEJyb3dzZXIodXJsKVxuXHRcdH0pO1xuXHR9XG59XG5cbi8qKlxuICogR2V0IHRoZSBoZWxwIHNlYXJjaCByZXN1bHRzIGJ5IGl0ZXJhdGluZyB0aGUgbGlzdCBvZiBzb3VyY2VzLlxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgaGVscCBlbnRyaWVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0SGVscFNlYXJjaEVudHJpZXMoKTogUHJvbWlzZTxIb21lU2VhcmNoUmVzdWx0W10+IHtcblx0bGV0IGhlbHBSZXN1bHRzOiBIb21lU2VhcmNoUmVzdWx0W10gPSBbXTtcblxuXHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgU09VUkNFUykge1xuXHRcdGhlbHBSZXN1bHRzID0gaGVscFJlc3VsdHMuY29uY2F0KGF3YWl0IGVsZW1lbnQuaW5zdGFuY2UuZ2V0SGVscFNlYXJjaEVudHJpZXMoKSk7XG5cdH1cblxuXHRyZXR1cm4gaGVscFJlc3VsdHM7XG59XG5cbi8qKlxuICogR2V0IHRoZSBzZWFyY2ggcmVzdWx0cyBieSBpdGVyYXRpbmcgdGhlIGxpc3Qgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBxdWVyeSBUaGUgcXVlcnkgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSBmaWx0ZXJzIFRoZSBmaWx0ZXJzIHRvIGFwcGx5LlxuICogQHBhcmFtIGxhc3RSZXNwb25zZSBUaGUgbGFzdCBzZWFyY2ggcmVzcG9uc2UgdXNlZCBmb3IgdXBkYXRpbmcgZXhpc3RpbmcgcmVzdWx0cy5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSBnZXQgc2VhcmNoIHJlc3VsdHMuXG4gKiBAcGFyYW0gb3B0aW9ucy5pc1N1Z2dlc3Rpb24gSXMgdGhlIHF1ZXJ5IGEgc3VnZ2VzdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHNlYXJjaCByZXN1bHRzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2VhcmNoUmVzdWx0cyhcblx0cXVlcnk6IHN0cmluZyxcblx0ZmlsdGVyczogQ0xJRmlsdGVyW10sXG5cdGxhc3RSZXNwb25zZTogSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2UsXG5cdG9wdGlvbnM6IHtcblx0XHRpc1N1Z2dlc3Rpb246IGJvb2xlYW47XG5cdH1cbik6IFByb21pc2U8SG9tZVNlYXJjaFJlc3BvbnNlPiB7XG5cdGNvbnN0IHJlc3BvbnNlOiBIb21lU2VhcmNoUmVzcG9uc2UgPSB7XG5cdFx0cmVzdWx0czogW11cblx0fTtcblxuXHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgU09VUkNFUykge1xuXHRcdGNvbnN0IHNlYXJjaFJlc3BvbnNlID0gYXdhaXQgZWxlbWVudC5pbnN0YW5jZS5nZXRTZWFyY2hSZXN1bHRzKHF1ZXJ5LCBmaWx0ZXJzLCBsYXN0UmVzcG9uc2UsIHtcblx0XHRcdGlzU3VnZ2VzdGlvbjogb3B0aW9ucy5pc1N1Z2dlc3Rpb25cblx0XHR9KTtcblx0XHRyZXNwb25zZS5yZXN1bHRzID0gcmVzcG9uc2UucmVzdWx0cy5jb25jYXQoc2VhcmNoUmVzcG9uc2UucmVzdWx0cyk7XG5cdH1cblxuXHRyZXR1cm4gcmVzcG9uc2U7XG59XG5cbi8qKlxuICogQW4gZW50cnkgaGFzIGJlZW4gc2VsZWN0ZWQsIHNvIGxvb2t1cCB0aGUgcHJvdmlkZXJJZCBpbiB0aGUgZGF0YSBhbmRcbiAqIHBhc3MgdGhlIHJlc3VsdCBkYXRhIHRvIGl0LlxuICogQHBhcmFtIHJlc3VsdCBUaGUgZGlzcGF0Y2hlZCByZXN1bHQuXG4gKiBAcGFyYW0gbGFzdFJlc3BvbnNlIFRoZSBsYXN0IHJlc3BvbnNlLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgaXRlbSB3YXMgaGFuZGxlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGl0ZW1TZWxlY3Rpb24oXG5cdHJlc3VsdDogSG9tZURpc3BhdGNoZWRTZWFyY2hSZXN1bHQsXG5cdGxhc3RSZXNwb25zZTogSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2Vcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRsZXQgcmVzID0gZmFsc2U7XG5cblx0Y29uc3QgZm91bmRJbmRleCA9IFNPVVJDRVMuZmluZEluZGV4KChzb3VyY2UpID0+IHNvdXJjZS5kZWZpbml0aW9uLmlkID09PSByZXN1bHQuZGF0YT8ucHJvdmlkZXJJZCk7XG5cdGlmIChmb3VuZEluZGV4ID49IDApIHtcblx0XHRyZXMgPSBhd2FpdCBTT1VSQ0VTW2ZvdW5kSW5kZXhdLmluc3RhbmNlLml0ZW1TZWxlY3Rpb24ocmVzdWx0LCBsYXN0UmVzcG9uc2UpO1xuXHR9XG5cblx0cmV0dXJuIHJlcztcbn1cbiIsImltcG9ydCB7XG5cdENMSVRlbXBsYXRlLFxuXHR0eXBlIENMSUZpbHRlcixcblx0dHlwZSBIb21lRGlzcGF0Y2hlZFNlYXJjaFJlc3VsdCxcblx0dHlwZSBIb21lU2VhcmNoTGlzdGVuZXJSZXNwb25zZSxcblx0dHlwZSBIb21lU2VhcmNoUmVzcG9uc2UsXG5cdHR5cGUgSG9tZVNlYXJjaFJlc3VsdCxcblx0dHlwZSBMaXN0UGFpcnNcbn0gZnJvbSBcIkBvcGVuZmluL3dvcmtzcGFjZVwiO1xuaW1wb3J0IHR5cGUgeyBBc3luY1NldHRpbmdzLCBDb250YWN0LCBDb250YWN0RnVsbCwgQ29udGFjdHNSZXN1bHQgfSBmcm9tIFwiLi9zaGFwZXNcIjtcblxuLyoqXG4gKiBJbXBsZW1lbnQgdGhlIHNvdXJjZSBmb3IgYXN5bmMgY29udGFjdCByZXN1bHRzLlxuICovXG5leHBvcnQgY2xhc3MgQXN5bmNDb250YWN0c1NvdXJjZSB7XG5cdC8qKlxuXHQgKiBUaGUga2V5IHRvIHVzZSBmb3IgYSBhc3luYyByZXN1bHQuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX0FTWU5DX1BST1ZJREVSX0RFVEFJTFNfQUNUSU9OID0gXCJBc3luYyBEZXRhaWxzXCI7XG5cblx0LyoqXG5cdCAqIFRoZSBoZWxwZXJzIGZvciB0aGUgc291cmNlLlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgX2hlbHBlcnM6IHsgb3BlblVybDogKHVybDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+IH0gfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFRoZSBkZWZpbml0aW9uIGZvciB0aGUgc291cmNlLlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgX2RlZmluaXRpb246IHsgaWQ6IHN0cmluZzsgZGF0YT86IEFzeW5jU2V0dGluZ3MgfSB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogVGhlIHNldHRpbmdzIGZvciB0aGUgc291cmNlLlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgX3NldHRpbmdzOiBBc3luY1NldHRpbmdzIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplIHRoZSBtb2R1bGUuXG5cdCAqIEBwYXJhbSBkZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBtb2R1bGUgZnJvbSBjb25maWd1cmF0aW9uIGluY2x1ZGUgY3VzdG9tIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSBkZWZpbml0aW9uLmlkIFRoZSBpZCBmb3IgdGhlIG1vZHVsZS5cblx0ICogQHBhcmFtIGRlZmluaXRpb24uZGF0YSBUaGUgY3VzdG9tIGRhdGEgZm9yIHRoZSBtb2R1bGUuXG5cdCAqIEBwYXJhbSBsb2dnZXJDcmVhdG9yIEZvciBsb2dnaW5nIGVudHJpZXMuXG5cdCAqIEBwYXJhbSBoZWxwZXJzIEhlbHBlciBtZXRob2RzIGZyb20gdGhlIHBsYXRmb3JtLlxuXHQgKiBAcGFyYW0gaGVscGVycy5vcGVuVXJsIE1ldGhvZCBmb3Igb3BlbmluZyBhIHVybC5cblx0ICogQHJldHVybnMgTm90aGluZy5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBpbml0aWFsaXplKFxuXHRcdGRlZmluaXRpb246IHsgaWQ6IHN0cmluZzsgZGF0YT86IEFzeW5jU2V0dGluZ3MgfSxcblx0XHRsb2dnZXJDcmVhdG9yOiAoKSA9PiB2b2lkLFxuXHRcdGhlbHBlcnM6IHsgb3BlblVybDogKHVybDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+IH1cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5fZGVmaW5pdGlvbiA9IGRlZmluaXRpb247XG5cdFx0dGhpcy5fc2V0dGluZ3MgPSBkZWZpbml0aW9uLmRhdGE7XG5cdFx0dGhpcy5faGVscGVycyA9IGhlbHBlcnM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGEgbGlzdCBvZiB0aGUgc3RhdGljIGhlbHAgZW50cmllcy5cblx0ICogQHJldHVybnMgVGhlIGxpc3Qgb2YgaGVscCBlbnRyaWVzLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGdldEhlbHBTZWFyY2hFbnRyaWVzKCk6IFByb21pc2U8SG9tZVNlYXJjaFJlc3VsdFtdPiB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0a2V5OiBgJHt0aGlzLl9kZWZpbml0aW9uPy5pZH0taGVscDFgLFxuXHRcdFx0XHR0aXRsZTogXCIvY29udGFjdHMtc3luY1wiLFxuXHRcdFx0XHRsYWJlbDogXCJIZWxwXCIsXG5cdFx0XHRcdGFjdGlvbnM6IFtdLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0cHJvdmlkZXJJZDogdGhpcy5fZGVmaW5pdGlvbj8uaWQsXG5cdFx0XHRcdFx0cG9wdWxhdGVRdWVyeTogXCIvY29udGFjdHMtc3luYyBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZW1wbGF0ZTogQ0xJVGVtcGxhdGUuQ3VzdG9tLFxuXHRcdFx0XHR0ZW1wbGF0ZUNvbnRlbnQ6IHtcblx0XHRcdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRcdFx0XHRzdHlsZTogeyBkaXNwbGF5OiBcImZsZXhcIiwgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIiwgcGFkZGluZzogXCIxMHB4XCIgfSxcblx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIlRleHRcIixcblx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcInRpdGxlXCIsXG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbG9yOiBcIiNGRkZGRkZcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZvbnRTaXplOiBcIjE2cHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWFyZ2luQm90dG9tOiBcIjEwcHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGJvcmRlckJvdHRvbTogXCIxcHggc29saWQgIzUzNTY1RlwiXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcImRlc2MtMFwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIHBhZGRpbmc6IFwiNnB4IDBweFwiIH0gfSxcblx0XHRcdFx0XHRcdFx0eyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJkZXNjLTFcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBwYWRkaW5nOiBcIjZweCAwcHhcIiB9IH0sXG5cdFx0XHRcdFx0XHRcdHsgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwiZGVzYy0yXCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiwgcGFkZGluZzogXCI2cHggMHB4XCIgfSB9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJDb250YWluZXJcIixcblx0XHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGlzcGxheTogXCJmbGV4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0cGFkZGluZzogXCIxMHB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXJnaW5Ub3A6IFwiNnB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IFwiIzUzNTY1RlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sb3I6IFwiI0ZGRkZGRlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Ym9yZGVyUmFkaXVzOiBcIjVweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0b3ZlcmZsb3c6IFwiYXV0b1wiXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbjogW1xuXHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIlRleHRcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YUtleTogXCJsaW5lLTBcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBmb250RmFtaWx5OiBcIm1vbm9zcGFjZVwiLCB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwiIH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRcdHRpdGxlOiBcIi9jb250YWN0cy1zeW5jXCIsXG5cdFx0XHRcdFx0XHRcImRlc2MtMFwiOiBcIlRoZSBjb250YWN0cy1zeW5jIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBhIGNvbnRhY3QuXCIsXG5cdFx0XHRcdFx0XHRcImRlc2MtMVwiOlxuXHRcdFx0XHRcdFx0XHRcIkl0IGRlbW9uc3RyYXRlcyBob3cgYSBsb25nIHJ1bm5pbmcgcmV0cmlldmFsIHdvdWxkIGhhdmUgdG8gd2FpdCBmb3IgdGhlIHJlc3BvbnNlIGJlZm9yZSBhbnl0aGluZyBpcyBkaXNwbGF5LlwiLFxuXHRcdFx0XHRcdFx0XCJkZXNjLTJcIjogXCJGb3IgZXhhbXBsZSB0byBzZWFyY2ggZm9yIGEgY29udGFjdCBjb250YWluaW5nIHRoZSBsZXR0ZXIgYS5cIixcblx0XHRcdFx0XHRcdFwibGluZS0wXCI6IFwiL2NvbnRhY3RzLXN5bmMgYVwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRrZXk6IGAke3RoaXMuX2RlZmluaXRpb24/LmlkfS1oZWxwMmAsXG5cdFx0XHRcdHRpdGxlOiBcIi9jb250YWN0cy1wYXJ0aWFsXCIsXG5cdFx0XHRcdGxhYmVsOiBcIkhlbHBcIixcblx0XHRcdFx0YWN0aW9uczogW10sXG5cdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRwcm92aWRlcklkOiB0aGlzLl9kZWZpbml0aW9uPy5pZCxcblx0XHRcdFx0XHRwb3B1bGF0ZVF1ZXJ5OiBcIi9jb250YWN0cy1wYXJ0aWFsIFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbXBsYXRlOiBDTElUZW1wbGF0ZS5DdXN0b20sXG5cdFx0XHRcdHRlbXBsYXRlQ29udGVudDoge1xuXHRcdFx0XHRcdGxheW91dDoge1xuXHRcdFx0XHRcdFx0dHlwZTogXCJDb250YWluZXJcIixcblx0XHRcdFx0XHRcdHN0eWxlOiB7IGRpc3BsYXk6IFwiZmxleFwiLCBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLCBwYWRkaW5nOiBcIjEwcHhcIiB9LFxuXHRcdFx0XHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwidGl0bGVcIixcblx0XHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29sb3I6IFwiI0ZGRkZGRlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9udFNpemU6IFwiMTZweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9udFdlaWdodDogXCJib2xkXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXJnaW5Cb3R0b206IFwiMTBweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Ym9yZGVyQm90dG9tOiBcIjFweCBzb2xpZCAjNTM1NjVGXCJcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHsgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwiZGVzYy0wXCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiwgcGFkZGluZzogXCI2cHggMHB4XCIgfSB9LFxuXHRcdFx0XHRcdFx0XHR7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcImRlc2MtMVwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIHBhZGRpbmc6IFwiNnB4IDBweFwiIH0gfSxcblx0XHRcdFx0XHRcdFx0eyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJkZXNjLTJcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBwYWRkaW5nOiBcIjZweCAwcHhcIiB9IH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5OiBcImZsZXhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRwYWRkaW5nOiBcIjEwcHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdG1hcmdpblRvcDogXCI2cHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCIjNTM1NjVGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRib3JkZXJSYWRpdXM6IFwiNXB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRvdmVyZmxvdzogXCJhdXRvXCJcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcImxpbmUtMFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIGZvbnRGYW1pbHk6IFwibW9ub3NwYWNlXCIsIHdoaXRlU3BhY2U6IFwibm93cmFwXCIgfVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0dGl0bGU6IFwiL2NvbnRhY3RzLXBhcnRpYWxcIixcblx0XHRcdFx0XHRcdFwiZGVzYy0wXCI6IFwiVGhlIGNvbnRhY3RzLXBhcnRpYWwgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBzZWFyY2ggZm9yIGEgY29udGFjdC5cIixcblx0XHRcdFx0XHRcdFwiZGVzYy0xXCI6XG5cdFx0XHRcdFx0XHRcdFwiSXQgZGVtb25zdHJhdGVzIGhvdyB3ZSB3b3VsZCBkaXNwbGF5IHJlc3VsdHMgaW5zdGFudGx5IHdoaWxlIGFzeW5jaHJvbm91c2x5IHJldHJpZXZpbmcgYWxsIHRoZSByZXN1bHRzLlwiLFxuXHRcdFx0XHRcdFx0XCJkZXNjLTJcIjogXCJGb3IgZXhhbXBsZSB0byBzZWFyY2ggZm9yIGEgY29udGFjdCBjb250YWluaW5nIHRoZSBsZXR0ZXIgYS5cIixcblx0XHRcdFx0XHRcdFwibGluZS0wXCI6IFwiL2NvbnRhY3RzLXBhcnRpYWwgYVwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRrZXk6IGAke3RoaXMuX2RlZmluaXRpb24/LmlkfS1oZWxwM2AsXG5cdFx0XHRcdHRpdGxlOiBcIi9jb250YWN0c1wiLFxuXHRcdFx0XHRsYWJlbDogXCJIZWxwXCIsXG5cdFx0XHRcdGFjdGlvbnM6IFtdLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0cHJvdmlkZXJJZDogdGhpcy5fZGVmaW5pdGlvbj8uaWQsXG5cdFx0XHRcdFx0cG9wdWxhdGVRdWVyeTogXCIvY29udGFjdHMgXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0dGVtcGxhdGU6IENMSVRlbXBsYXRlLkN1c3RvbSxcblx0XHRcdFx0dGVtcGxhdGVDb250ZW50OiB7XG5cdFx0XHRcdFx0bGF5b3V0OiB7XG5cdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0c3R5bGU6IHsgZGlzcGxheTogXCJmbGV4XCIsIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsIHBhZGRpbmc6IFwiMTBweFwiIH0sXG5cdFx0XHRcdFx0XHRjaGlsZHJlbjogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUtleTogXCJ0aXRsZVwiLFxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRmb250U2l6ZTogXCIxNnB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRmb250V2VpZ2h0OiBcImJvbGRcIixcblx0XHRcdFx0XHRcdFx0XHRcdG1hcmdpbkJvdHRvbTogXCIxMHB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRib3JkZXJCb3R0b206IFwiMXB4IHNvbGlkICM1MzU2NUZcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0eyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJkZXNjLTBcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBwYWRkaW5nOiBcIjZweCAwcHhcIiB9IH0sXG5cdFx0XHRcdFx0XHRcdHsgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwiZGVzYy0xXCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiwgcGFkZGluZzogXCI2cHggMHB4XCIgfSB9LFxuXHRcdFx0XHRcdFx0XHR7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcImRlc2MtMlwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIHBhZGRpbmc6IFwiNnB4IDBweFwiIH0gfSxcblx0XHRcdFx0XHRcdFx0eyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJkZXNjLTNcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBwYWRkaW5nOiBcIjZweCAwcHhcIiB9IH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5OiBcImZsZXhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRwYWRkaW5nOiBcIjEwcHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdG1hcmdpblRvcDogXCI2cHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCIjNTM1NjVGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRib3JkZXJSYWRpdXM6IFwiNXB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRvdmVyZmxvdzogXCJhdXRvXCJcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcImxpbmUtMFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIGZvbnRGYW1pbHk6IFwibW9ub3NwYWNlXCIsIHdoaXRlU3BhY2U6IFwibm93cmFwXCIgfVxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwibGluZS0xXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiwgZm9udEZhbWlseTogXCJtb25vc3BhY2VcIiwgd2hpdGVTcGFjZTogXCJub3dyYXBcIiB9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0XHR0aXRsZTogXCIvY29udGFjdHNcIixcblx0XHRcdFx0XHRcdFwiZGVzYy0wXCI6IFwiVGhlIGNvbnRhY3RzIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBhIGNvbnRhY3QuXCIsXG5cdFx0XHRcdFx0XHRcImRlc2MtMVwiOlxuXHRcdFx0XHRcdFx0XHRcIkl0IGRlbW9uc3RyYXRlcyBob3cgd2Ugd291bGQgZGlzcGxheSByZXN1bHRzIGluc3RhbnRseSBhbmQgb25seSByZXRyaWV2ZSBmdWxsIGRhdGEgb24gZW50cnkgc2VsZWN0aW9uLlwiLFxuXHRcdFx0XHRcdFx0XCJkZXNjLTJcIjogXCJDb250YWN0cyBzdGFydGluZyB3aXRoIEUgd2lsbCBzaG93IGVycm9yIG9uIGZpcnN0IGxvYWQuXCIsXG5cdFx0XHRcdFx0XHRcImRlc2MtM1wiOiBcIkZvciBleGFtcGxlIHRvIHNlYXJjaCBmb3IgYSBjb250YWN0IGNvbnRhaW5pbmcgdGhlIGxldHRlciBhLlwiLFxuXHRcdFx0XHRcdFx0XCJsaW5lLTBcIjogXCIvY29udGFjdHMgYVwiLFxuXHRcdFx0XHRcdFx0XCJsaW5lLTFcIjogXCIvY29udGFjdHMgZVwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSBsaXN0IG9mIHNlYXJjaCByZXN1bHRzIGJhc2VkIG9uIHRoZSBxdWVyeSBhbmQgZmlsdGVycy5cblx0ICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSB0byBzZWFyY2ggZm9yLlxuXHQgKiBAcGFyYW0gZmlsdGVycyBUaGUgZmlsdGVycyB0byBhcHBseS5cblx0ICogQHBhcmFtIGxhc3RSZXNwb25zZSBUaGUgbGFzdCBzZWFyY2ggcmVzcG9uc2UgdXNlZCBmb3IgdXBkYXRpbmcgZXhpc3RpbmcgcmVzdWx0cy5cblx0ICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIGdldCBzZWFyY2ggcmVzdWx0cy5cblx0ICogQHBhcmFtIG9wdGlvbnMuaXNTdWdnZXN0aW9uIElzIHRoZSBxdWVyeSBhIHN1Z2dlc3Rpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHJlc3VsdHMgYW5kIG5ldyBmaWx0ZXJzLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGdldFNlYXJjaFJlc3VsdHMoXG5cdFx0cXVlcnk6IHN0cmluZyxcblx0XHRmaWx0ZXJzOiBDTElGaWx0ZXJbXSxcblx0XHRsYXN0UmVzcG9uc2U6IEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlLFxuXHRcdG9wdGlvbnM6IHtcblx0XHRcdGlzU3VnZ2VzdGlvbjogYm9vbGVhbjtcblx0XHR9XG5cdCk6IFByb21pc2U8SG9tZVNlYXJjaFJlc3BvbnNlPiB7XG5cdFx0Y29uc3QgcmVzdWx0czogSG9tZVNlYXJjaFJlc3VsdFtdID0gW107XG5cblx0XHRpZiAocXVlcnkuc3RhcnRzV2l0aChcIi9jb250YWN0cy1zeW5jIFwiKSkge1xuXHRcdFx0YXdhaXQgdGhpcy5jb250YWN0c1N5bmMocXVlcnkuc2xpY2UoMTUpLCByZXN1bHRzKTtcblx0XHR9IGVsc2UgaWYgKHF1ZXJ5LnN0YXJ0c1dpdGgoXCIvY29udGFjdHMtcGFydGlhbCBcIikpIHtcblx0XHRcdGF3YWl0IHRoaXMuY29udGFjdHNQYXJ0aWFsKHF1ZXJ5LnNsaWNlKDE4KSwgcmVzdWx0cywgbGFzdFJlc3BvbnNlKTtcblx0XHR9IGVsc2UgaWYgKHF1ZXJ5LnN0YXJ0c1dpdGgoXCIvY29udGFjdHMgXCIpKSB7XG5cdFx0XHRhd2FpdCB0aGlzLmNvbnRhY3RzQXN5bmMocXVlcnkuc2xpY2UoMTApLCByZXN1bHRzLCBsYXN0UmVzcG9uc2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRyZXN1bHRzXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbiBlbnRyeSBoYXMgYmVlbiBzZWxlY3RlZC5cblx0ICogQHBhcmFtIHJlc3VsdCBUaGUgZGlzcGF0Y2hlZCByZXN1bHQuXG5cdCAqIEBwYXJhbSBsYXN0UmVzcG9uc2UgVGhlIGxhc3QgcmVzcG9uc2UuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGl0ZW0gd2FzIGhhbmRsZWQuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgaXRlbVNlbGVjdGlvbihcblx0XHRyZXN1bHQ6IEhvbWVEaXNwYXRjaGVkU2VhcmNoUmVzdWx0LFxuXHRcdGxhc3RSZXNwb25zZTogSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2Vcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3QgZGF0YTogeyB1cmw/OiBzdHJpbmcgfSA9IHJlc3VsdC5kYXRhO1xuXG5cdFx0aWYgKFxuXHRcdFx0cmVzdWx0LmFjdGlvbi50cmlnZ2VyID09PSBcInVzZXItYWN0aW9uXCIgJiZcblx0XHRcdHJlc3VsdC5hY3Rpb24ubmFtZSA9PT0gQXN5bmNDb250YWN0c1NvdXJjZS5fQVNZTkNfUFJPVklERVJfREVUQUlMU19BQ1RJT04gJiZcblx0XHRcdHRoaXMuX2hlbHBlcnM/Lm9wZW5VcmwgJiZcblx0XHRcdGRhdGEudXJsXG5cdFx0KSB7XG5cdFx0XHRhd2FpdCB0aGlzLl9oZWxwZXJzPy5vcGVuVXJsKGRhdGEudXJsKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHQocmVzdWx0LmFjdGlvbi50cmlnZ2VyID09PSBcImZvY3VzLWNoYW5nZVwiICYmIHJlc3VsdC5kYXRhPy5zdGF0ZSA9PT0gXCJsb2FkaW5nXCIpIHx8XG5cdFx0XHQocmVzdWx0LmFjdGlvbi50cmlnZ2VyID09PSBcInJlbG9hZFwiICYmIHJlc3VsdC5kYXRhPy5zdGF0ZSA9PT0gXCJlcnJvclwiKVxuXHRcdCkge1xuXHRcdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbnRhY3RSZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke3RoaXMuX3NldHRpbmdzPy5yb290VXJsfSR7cmVzdWx0LmRhdGEuY29udGFjdC5pZH0uanNvbmApO1xuXG5cdFx0XHRcdGNvbnN0IGNvbnRhY3RGdWxsOiBDb250YWN0RnVsbCA9IGF3YWl0IGNvbnRhY3RSZXNwb25zZS5qc29uKCk7XG5cblx0XHRcdFx0bGFzdFJlc3BvbnNlLnJlc3BvbmQoW3RoaXMuY3JlYXRlUmVzdWx0KGNvbnRhY3RGdWxsKV0pO1xuXHRcdFx0fSwgMCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSBjb250YWN0cyBpbiBhIHN5bmNocm9ub3VzIG1hbm5lci5cblx0ICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSB0byBzZWFyY2ggZm9yXG5cdCAqIEBwYXJhbSByZXN1bHRzIFRoZSByZXN1bHQgbGlzdCB0byBwb3B1bGF0ZS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgY29udGFjdHNTeW5jKHF1ZXJ5OiBzdHJpbmcsIHJlc3VsdHM6IEhvbWVTZWFyY2hSZXN1bHRbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHdpbGRjYXJkID0gcXVlcnkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAod2lsZGNhcmQubGVuZ3RoID4gMCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHt0aGlzLl9zZXR0aW5ncz8ucm9vdFVybH1pbmRleC5qc29uYCk7XG5cblx0XHRcdFx0Y29uc3QganNvbjogQ29udGFjdHNSZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBjb250YWN0IG9mIGpzb24uZGF0YSkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGNvbnRhY3QuZmlyc3ROYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMod2lsZGNhcmQpIHx8XG5cdFx0XHRcdFx0XHRjb250YWN0Lmxhc3ROYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMod2lsZGNhcmQpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBjb250YWN0UmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHt0aGlzLl9zZXR0aW5ncz8ucm9vdFVybH0ke2NvbnRhY3QuaWR9Lmpzb25gKTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgY29udGFjdEZ1bGw6IENvbnRhY3RGdWxsID0gYXdhaXQgY29udGFjdFJlc3BvbnNlLmpzb24oKTtcblxuXHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKHRoaXMuY3JlYXRlUmVzdWx0KGNvbnRhY3RGdWxsKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgY29udGFjdHMgaW4gYSBwYXJ0aWFsbHkgYXN5bmNocm9ub3VzIG1hbm5lci5cblx0ICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSB0byBzZWFyY2ggZm9yXG5cdCAqIEBwYXJhbSByZXN1bHRzIFRoZSByZXN1bHQgbGlzdCB0byBwb3B1bGF0ZS5cblx0ICogQHBhcmFtIGxhc3RSZXNwb25zZSBUaGUgbGFzdCByZXNwb25zZSB0byB1c2UgZm9yIHVwZGF0aW5nIHJlc3VsdHMuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNvbnRhY3RzUGFydGlhbChcblx0XHRxdWVyeTogc3RyaW5nLFxuXHRcdHJlc3VsdHM6IEhvbWVTZWFyY2hSZXN1bHRbXSxcblx0XHRsYXN0UmVzcG9uc2U6IEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHdpbGRjYXJkID0gcXVlcnkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAod2lsZGNhcmQubGVuZ3RoID4gMCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHt0aGlzLl9zZXR0aW5ncz8ucm9vdFVybH1pbmRleC5qc29uYCk7XG5cblx0XHRcdFx0Y29uc3QganNvbjogQ29udGFjdHNSZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cdFx0XHRcdGNvbnN0IGZpbmFsQ29udGFjdHM6IENvbnRhY3RbXSA9IFtdO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgY29udGFjdCBvZiBqc29uLmRhdGEpIHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRjb250YWN0LmZpcnN0TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHdpbGRjYXJkKSB8fFxuXHRcdFx0XHRcdFx0Y29udGFjdC5sYXN0TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHdpbGRjYXJkKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0ZmluYWxDb250YWN0cy5wdXNoKGNvbnRhY3QpO1xuXHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKHRoaXMuY3JlYXRlUmVzdWx0KGNvbnRhY3QpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGNvbnRhY3Qgb2YgZmluYWxDb250YWN0cykge1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udGFjdFJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7dGhpcy5fc2V0dGluZ3M/LnJvb3RVcmx9JHtjb250YWN0LmlkfS5qc29uYCk7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGNvbnRhY3RGdWxsOiBDb250YWN0RnVsbCA9IGF3YWl0IGNvbnRhY3RSZXNwb25zZS5qc29uKCk7XG5cblx0XHRcdFx0XHRcdGxhc3RSZXNwb25zZS5yZXNwb25kKFt0aGlzLmNyZWF0ZVJlc3VsdChjb250YWN0RnVsbCldKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIGNvbnRhY3RzIGluIGFuIGFzeW5jaHJvbm91cyBtYW5uZXIuXG5cdCAqIEBwYXJhbSBxdWVyeSBUaGUgcXVlcnkgdG8gc2VhcmNoIGZvclxuXHQgKiBAcGFyYW0gcmVzdWx0cyBUaGUgcmVzdWx0IGxpc3QgdG8gcG9wdWxhdGUuXG5cdCAqIEBwYXJhbSBsYXN0UmVzcG9uc2UgVGhlIGxhc3QgcmVzcG9uc2UgdG8gdXNlIGZvciB1cGRhdGluZyByZXN1bHRzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBjb250YWN0c0FzeW5jKFxuXHRcdHF1ZXJ5OiBzdHJpbmcsXG5cdFx0cmVzdWx0czogSG9tZVNlYXJjaFJlc3VsdFtdLFxuXHRcdGxhc3RSZXNwb25zZTogSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2Vcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgd2lsZGNhcmQgPSBxdWVyeS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuXHRcdGlmICh3aWxkY2FyZC5sZW5ndGggPiAwKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke3RoaXMuX3NldHRpbmdzPy5yb290VXJsfWluZGV4Lmpzb25gKTtcblxuXHRcdFx0XHRjb25zdCBqc29uOiBDb250YWN0c1Jlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbnRhY3Qgb2YganNvbi5kYXRhKSB7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0Y29udGFjdC5maXJzdE5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh3aWxkY2FyZCkgfHxcblx0XHRcdFx0XHRcdGNvbnRhY3QubGFzdE5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh3aWxkY2FyZClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdC8vIElmIGEgY29udGFjdCBzdGFydHMgd2l0aCBFIHNob3cgaXQgaW4gZXJyb3JlZCBzdGF0ZVxuXHRcdFx0XHRcdFx0aWYgKGNvbnRhY3QuZmlyc3ROYW1lLnN0YXJ0c1dpdGgoXCJFXCIpKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCh0aGlzLmNyZWF0ZVJlc3VsdEVycm9yZWQoY29udGFjdCkpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKHRoaXMuY3JlYXRlUmVzdWx0TG9hZGluZyhjb250YWN0KSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYSBzZWFyY2ggcmVzdWx0LlxuXHQgKiBAcGFyYW0gY29udGFjdCBUaGUgY29udGFjdC5cblx0ICogQHJldHVybnMgVGhlIHNlYXJjaCByZXN1bHQuXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZVJlc3VsdChjb250YWN0OiBQYXJ0aWFsPENvbnRhY3RGdWxsPik6IEhvbWVTZWFyY2hSZXN1bHQge1xuXHRcdGNvbnN0IGZ1bGxOYW1lID0gYCR7Y29udGFjdC5maXJzdE5hbWV9ICR7Y29udGFjdC5sYXN0TmFtZX1gO1xuXHRcdGNvbnN0IGRldGFpbHM6IExpc3RQYWlyc1tdID0gW107XG5cdFx0aWYgKGNvbnRhY3QuZW1haWwpIHtcblx0XHRcdGRldGFpbHMucHVzaChbW1wiRS1tYWlsXCIsIGNvbnRhY3QuZW1haWxdXSk7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRrZXk6IGBjb250YWN0LSR7Y29udGFjdC5pZH1gLFxuXHRcdFx0dGl0bGU6IGZ1bGxOYW1lLFxuXHRcdFx0bGFiZWw6IFwiSW5mb3JtYXRpb25cIixcblx0XHRcdGFjdGlvbnM6IFtdLFxuXHRcdFx0ZGF0YToge1xuXHRcdFx0XHRwcm92aWRlcklkOiB0aGlzLl9kZWZpbml0aW9uPy5pZCxcblx0XHRcdFx0Y29udGFjdFxuXHRcdFx0fSxcblx0XHRcdHRlbXBsYXRlOiBDTElUZW1wbGF0ZS5Db250YWN0LFxuXHRcdFx0dGVtcGxhdGVDb250ZW50OiB7XG5cdFx0XHRcdG5hbWU6IGZ1bGxOYW1lLFxuXHRcdFx0XHRkZXRhaWxzXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYSBzZWFyY2ggcmVzdWx0IGluIGxvYWRpbmcgc3RhdGUuXG5cdCAqIEBwYXJhbSBjb250YWN0IFRoZSBjb250YWN0LlxuXHQgKiBAcmV0dXJucyBUaGUgc2VhcmNoIHJlc3VsdC5cblx0ICovXG5cdHByaXZhdGUgY3JlYXRlUmVzdWx0TG9hZGluZyhjb250YWN0OiBDb250YWN0KTogSG9tZVNlYXJjaFJlc3VsdCB7XG5cdFx0Y29uc3QgZnVsbE5hbWUgPSBgJHtjb250YWN0LmZpcnN0TmFtZX0gJHtjb250YWN0Lmxhc3ROYW1lfWA7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGtleTogYGNvbnRhY3QtJHtjb250YWN0LmlkfWAsXG5cdFx0XHR0aXRsZTogZnVsbE5hbWUsXG5cdFx0XHRsYWJlbDogXCJJbmZvcm1hdGlvblwiLFxuXHRcdFx0YWN0aW9uczogW10sXG5cdFx0XHRkYXRhOiB7XG5cdFx0XHRcdHByb3ZpZGVySWQ6IHRoaXMuX2RlZmluaXRpb24/LmlkLFxuXHRcdFx0XHRjb250YWN0LFxuXHRcdFx0XHRzdGF0ZTogXCJsb2FkaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR0ZW1wbGF0ZTogQ0xJVGVtcGxhdGUuTG9hZGluZyxcblx0XHRcdHRlbXBsYXRlQ29udGVudDogXCJcIlxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIGEgc2VhcmNoIHJlc3VsdCBpbiBlcnJvcmVkIHN0YXRlLlxuXHQgKiBAcGFyYW0gY29udGFjdCBUaGUgY29udGFjdC5cblx0ICogQHJldHVybnMgVGhlIHNlYXJjaCByZXN1bHQuXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZVJlc3VsdEVycm9yZWQoY29udGFjdDogQ29udGFjdCk6IEhvbWVTZWFyY2hSZXN1bHQge1xuXHRcdGNvbnN0IGZ1bGxOYW1lID0gYCR7Y29udGFjdC5maXJzdE5hbWV9ICR7Y29udGFjdC5sYXN0TmFtZX1gO1xuXHRcdHJldHVybiB7XG5cdFx0XHRrZXk6IGBjb250YWN0LSR7Y29udGFjdC5pZH1gLFxuXHRcdFx0dGl0bGU6IGZ1bGxOYW1lLFxuXHRcdFx0bGFiZWw6IFwiSW5mb3JtYXRpb25cIixcblx0XHRcdGFjdGlvbnM6IFtdLFxuXHRcdFx0ZGF0YToge1xuXHRcdFx0XHRwcm92aWRlcklkOiB0aGlzLl9kZWZpbml0aW9uPy5pZCxcblx0XHRcdFx0Y29udGFjdCxcblx0XHRcdFx0c3RhdGU6IFwiZXJyb3JcIlxuXHRcdFx0fSxcblx0XHRcdHRlbXBsYXRlOiBDTElUZW1wbGF0ZS5FcnJvcixcblx0XHRcdHRlbXBsYXRlQ29udGVudDogXCJVbmFibGUgdG8gbG9hZCBkYXRhXCJcblx0XHR9O1xuXHR9XG59XG4iLCJpbXBvcnQge1xuXHRCdXR0b25TdHlsZSxcblx0Q0xJVGVtcGxhdGUsXG5cdHR5cGUgVGVtcGxhdGVGcmFnbWVudCxcblx0dHlwZSBDTElGaWx0ZXIsXG5cdHR5cGUgSG9tZURpc3BhdGNoZWRTZWFyY2hSZXN1bHQsXG5cdHR5cGUgSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2UsXG5cdHR5cGUgSG9tZVNlYXJjaFJlc3BvbnNlLFxuXHR0eXBlIEhvbWVTZWFyY2hSZXN1bHRcbn0gZnJvbSBcIkBvcGVuZmluL3dvcmtzcGFjZVwiO1xuaW1wb3J0ICogYXMgZW1vamkgZnJvbSBcIm5vZGUtZW1vamlcIjtcblxuLyoqXG4gKiBJbXBsZW1lbnQgdGhlIHNvdXJjZSBmb3IgRW1vamlzLlxuICovXG5leHBvcnQgY2xhc3MgRW1vamlTb3VyY2Uge1xuXHQvKipcblx0ICogVGhlIGtleSB0byB1c2UgZm9yIGEgZW1vamkgcmVzdWx0LlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9FTU9KSV9QUk9WSURFUl9ERVRBSUxTX0FDVElPTiA9IFwiRW1vamkgRGV0YWlsc1wiO1xuXG5cdC8qKlxuXHQgKiBUaGUga2V5IHRvIHVzZSBmb3IgYSBlbW9qaSBjb3B5IGtleSBhY3Rpb24uXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX0VNT0pJX1BST1ZJREVSX0NPUFlfS0VZX0FDVElPTiA9IFwiQ29weSBLZXlcIjtcblxuXHQvKipcblx0ICogVGhlIGtleSB0byB1c2UgZm9yIGEgZW1vamkgY29weSBrZXkgYWN0aW9uLlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9FTU9KSV9QUk9WSURFUl9DT1BZX0VNT0pJX0FDVElPTiA9IFwiQ29weSBFbW9qaVwiO1xuXG5cdC8qKlxuXHQgKiBUaGUgaGVscGVycyBmb3IgdGhlIHNvdXJjZS5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIF9oZWxwZXJzOiB7IG9wZW5Vcmw6ICh1cmw6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPiB9IHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgc2V0dGluZ3MgZm9yIHRoZSBzb3VyY2UuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJpdmF0ZSBfZGVmaW5pdGlvbjogeyBpZDogc3RyaW5nOyBkYXRhPzogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplIHRoZSBtb2R1bGUuXG5cdCAqIEBwYXJhbSBkZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBtb2R1bGUgZnJvbSBjb25maWd1cmF0aW9uIGluY2x1ZGUgY3VzdG9tIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSBkZWZpbml0aW9uLmlkIFRoZSBpZCBmb3IgdGhlIG1vZHVsZS5cblx0ICogQHBhcmFtIGRlZmluaXRpb24uZGF0YSBUaGUgY3VzdG9tIGRhdGEgZm9yIHRoZSBtb2R1bGUuXG5cdCAqIEBwYXJhbSBsb2dnZXJDcmVhdG9yIEZvciBsb2dnaW5nIGVudHJpZXMuXG5cdCAqIEBwYXJhbSBoZWxwZXJzIEhlbHBlciBtZXRob2RzIGZyb20gdGhlIHBsYXRmb3JtLlxuXHQgKiBAcGFyYW0gaGVscGVycy5vcGVuVXJsIE1ldGhvZCBmb3Igb3BlbmluZyBhIHVybC5cblx0ICogQHJldHVybnMgTm90aGluZy5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBpbml0aWFsaXplKFxuXHRcdGRlZmluaXRpb246IHtcblx0XHRcdGlkOiBzdHJpbmc7XG5cdFx0XHRkYXRhPzogdW5rbm93bjtcblx0XHR9LFxuXHRcdGxvZ2dlckNyZWF0b3I6ICgpID0+IHZvaWQsXG5cdFx0aGVscGVyczogeyBvcGVuVXJsOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD4gfVxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLl9kZWZpbml0aW9uID0gZGVmaW5pdGlvbjtcblx0XHR0aGlzLl9oZWxwZXJzID0gaGVscGVycztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSBsaXN0IG9mIHRoZSBzdGF0aWMgaGVscCBlbnRyaWVzLlxuXHQgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBoZWxwIGVudHJpZXMuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0SGVscFNlYXJjaEVudHJpZXMoKTogUHJvbWlzZTxIb21lU2VhcmNoUmVzdWx0W10+IHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRrZXk6IGAke3RoaXMuX2RlZmluaXRpb24/LmlkfS1oZWxwYCxcblx0XHRcdFx0dGl0bGU6IFwiL2Vtb2ppXCIsXG5cdFx0XHRcdGxhYmVsOiBcIkhlbHBcIixcblx0XHRcdFx0YWN0aW9uczogW10sXG5cdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRwcm92aWRlcklkOiB0aGlzLl9kZWZpbml0aW9uPy5pZCxcblx0XHRcdFx0XHRwb3B1bGF0ZVF1ZXJ5OiBcIi9lbW9qaSBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZW1wbGF0ZTogQ0xJVGVtcGxhdGUuQ3VzdG9tLFxuXHRcdFx0XHR0ZW1wbGF0ZUNvbnRlbnQ6IHtcblx0XHRcdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRcdFx0XHRzdHlsZTogeyBkaXNwbGF5OiBcImZsZXhcIiwgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIiwgcGFkZGluZzogXCIxMHB4XCIgfSxcblx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIlRleHRcIixcblx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcInRpdGxlXCIsXG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbG9yOiBcIiNGRkZGRkZcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZvbnRTaXplOiBcIjE2cHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWFyZ2luQm90dG9tOiBcIjEwcHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGJvcmRlckJvdHRvbTogXCIxcHggc29saWQgIzUzNTY1RlwiXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcImRlc2MtMFwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIHBhZGRpbmc6IFwiNnB4IDBweFwiIH0gfSxcblx0XHRcdFx0XHRcdFx0eyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJkZXNjLTFcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBwYWRkaW5nOiBcIjZweCAwcHhcIiB9IH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5OiBcImZsZXhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRwYWRkaW5nOiBcIjEwcHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdG1hcmdpblRvcDogXCI2cHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCIjNTM1NjVGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRib3JkZXJSYWRpdXM6IFwiNXB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRvdmVyZmxvdzogXCJhdXRvXCJcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcImxpbmUtMFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIGZvbnRGYW1pbHk6IFwibW9ub3NwYWNlXCIsIHdoaXRlU3BhY2U6IFwibm93cmFwXCIgfVxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwibGluZS0xXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiwgZm9udEZhbWlseTogXCJtb25vc3BhY2VcIiwgd2hpdGVTcGFjZTogXCJub3dyYXBcIiB9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0XHR0aXRsZTogXCIvZW1vamlcIixcblx0XHRcdFx0XHRcdFwiZGVzYy0wXCI6IFwiVGhlIGVtb2ppIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBlbW9qaXMgYnkgbmFtZS5cIixcblx0XHRcdFx0XHRcdFwiZGVzYy0xXCI6IFwiRm9yIGV4YW1wbGUgdG8gc2VhcmNoIGZvciBlbW9qaXMgd2hpY2ggaW5jbHVkZSBgd29tYW5gIG9yIGBtYW5gIGluIHRoZWlyIG5hbWUuXCIsXG5cdFx0XHRcdFx0XHRcImxpbmUtMFwiOiBcIi9lbW9qaSB3b21hblwiLFxuXHRcdFx0XHRcdFx0XCJsaW5lLTFcIjogXCIvZW1vamkgbWFuXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIGxpc3Qgb2Ygc2VhcmNoIHJlc3VsdHMgYmFzZWQgb24gdGhlIHF1ZXJ5IGFuZCBmaWx0ZXJzLlxuXHQgKiBAcGFyYW0gcXVlcnkgVGhlIHF1ZXJ5IHRvIHNlYXJjaCBmb3IuXG5cdCAqIEBwYXJhbSBmaWx0ZXJzIFRoZSBmaWx0ZXJzIHRvIGFwcGx5LlxuXHQgKiBAcGFyYW0gbGFzdFJlc3BvbnNlIFRoZSBsYXN0IHNlYXJjaCByZXNwb25zZSB1c2VkIGZvciB1cGRhdGluZyBleGlzdGluZyByZXN1bHRzLlxuXHQgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgZ2V0IHNlYXJjaCByZXN1bHRzLlxuXHQgKiBAcGFyYW0gb3B0aW9ucy5pc1N1Z2dlc3Rpb24gSXMgdGhlIHF1ZXJ5IGEgc3VnZ2VzdGlvbi5cblx0ICogQHJldHVybnMgVGhlIGxpc3Qgb2YgcmVzdWx0cyBhbmQgbmV3IGZpbHRlcnMuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0U2VhcmNoUmVzdWx0cyhcblx0XHRxdWVyeTogc3RyaW5nLFxuXHRcdGZpbHRlcnM6IENMSUZpbHRlcltdLFxuXHRcdGxhc3RSZXNwb25zZTogSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2UsXG5cdFx0b3B0aW9uczoge1xuXHRcdFx0aXNTdWdnZXN0aW9uOiBib29sZWFuO1xuXHRcdH1cblx0KTogUHJvbWlzZTxIb21lU2VhcmNoUmVzcG9uc2U+IHtcblx0XHRjb25zdCByZXN1bHRzOiBIb21lU2VhcmNoUmVzdWx0W10gPSBbXTtcblxuXHRcdGlmIChxdWVyeS5zdGFydHNXaXRoKFwiL2Vtb2ppIFwiKSkge1xuXHRcdFx0bGV0IGtleSA9IHF1ZXJ5LnNsaWNlKDcpO1xuXG5cdFx0XHRpZiAoa2V5Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0a2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdFx0Ly8gRmluZCBleGFjdCBtYXRjaCBmaXJzdCBpZiB0aGVyZSBpcyBvbmVcblx0XHRcdFx0Y29uc3QgbWF0Y2hFbW9qaSA9IGVtb2ppLmdldChrZXkpO1xuXHRcdFx0XHRpZiAobWF0Y2hFbW9qaSAmJiAhbWF0Y2hFbW9qaS5zdGFydHNXaXRoKFwiOlwiKSkge1xuXHRcdFx0XHRcdHJlc3VsdHMucHVzaChhd2FpdCB0aGlzLmNyZWF0ZVJlc3VsdChrZXksIG1hdGNoRW1vamkpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZpbmQgYWxsIG90aGVyIHBvdGVudGlhbCBtYXRjaGVzXG5cdFx0XHRcdGNvbnN0IHNlYXJjaFJlc3VsdCA9IGVtb2ppLnNlYXJjaChrZXkpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcmVzdWx0IG9mIHNlYXJjaFJlc3VsdCkge1xuXHRcdFx0XHRcdGlmIChyZXN1bHQuZW1vamkgIT09IG1hdGNoRW1vamkpIHtcblx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaChhd2FpdCB0aGlzLmNyZWF0ZVJlc3VsdChyZXN1bHQua2V5LCByZXN1bHQuZW1vamkpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0cmVzdWx0c1xuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQW4gZW50cnkgaGFzIGJlZW4gc2VsZWN0ZWQuXG5cdCAqIEBwYXJhbSByZXN1bHQgVGhlIGRpc3BhdGNoZWQgcmVzdWx0LlxuXHQgKiBAcGFyYW0gbGFzdFJlc3BvbnNlIFRoZSBsYXN0IHJlc3BvbnNlLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBpdGVtIHdhcyBoYW5kbGVkLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGl0ZW1TZWxlY3Rpb24oXG5cdFx0cmVzdWx0OiBIb21lRGlzcGF0Y2hlZFNlYXJjaFJlc3VsdCxcblx0XHRsYXN0UmVzcG9uc2U6IEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmIChyZXN1bHQuYWN0aW9uLnRyaWdnZXIgPT09IFwidXNlci1hY3Rpb25cIikge1xuXHRcdFx0aWYgKHJlc3VsdC5hY3Rpb24ubmFtZSA9PT0gRW1vamlTb3VyY2UuX0VNT0pJX1BST1ZJREVSX0NPUFlfRU1PSklfQUNUSU9OICYmIHJlc3VsdC5kYXRhLmVtb2ppKSB7XG5cdFx0XHRcdGF3YWl0IGZpbi5DbGlwYm9hcmQud3JpdGVUZXh0KHsgZGF0YTogcmVzdWx0LmRhdGEuZW1vamkgfSk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChyZXN1bHQuYWN0aW9uLm5hbWUgPT09IEVtb2ppU291cmNlLl9FTU9KSV9QUk9WSURFUl9DT1BZX0tFWV9BQ1RJT04gJiYgcmVzdWx0LmRhdGEua2V5KSB7XG5cdFx0XHRcdGF3YWl0IGZpbi5DbGlwYm9hcmQud3JpdGVUZXh0KHsgZGF0YTogcmVzdWx0LmRhdGEua2V5IH0pO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdHJlc3VsdC5hY3Rpb24ubmFtZSA9PT0gRW1vamlTb3VyY2UuX0VNT0pJX1BST1ZJREVSX0RFVEFJTFNfQUNUSU9OICYmXG5cdFx0XHRcdHRoaXMuX2hlbHBlcnM/Lm9wZW5VcmwgJiZcblx0XHRcdFx0cmVzdWx0LmRhdGEudXJsXG5cdFx0XHQpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5faGVscGVycz8ub3BlblVybChyZXN1bHQuZGF0YS51cmwgYXMgc3RyaW5nKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZSBhIHNlYXJjaCByZXN1bHQuXG5cdCAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgdGhlIGVtb2ppLlxuXHQgKiBAcGFyYW0gc3ltYm9sIFRoZSBlbW9qaSBzeW1ib2wuXG5cdCAqIEByZXR1cm5zIFRoZSBzZWFyY2ggcmVzdWx0LlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBjcmVhdGVSZXN1bHQoa2V5OiBzdHJpbmcsIHN5bWJvbDogc3RyaW5nKTogUHJvbWlzZTxIb21lU2VhcmNoUmVzdWx0PiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGtleTogYGVtb2ppLSR7a2V5fWAsXG5cdFx0XHR0aXRsZToga2V5LFxuXHRcdFx0bGFiZWw6IFwiSW5mb3JtYXRpb25cIixcblx0XHRcdGFjdGlvbnM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IEVtb2ppU291cmNlLl9FTU9KSV9QUk9WSURFUl9DT1BZX0VNT0pJX0FDVElPTixcblx0XHRcdFx0XHRob3RrZXk6IFwiQ21kT3JDdHJsK0NcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogRW1vamlTb3VyY2UuX0VNT0pJX1BST1ZJREVSX0RFVEFJTFNfQUNUSU9OLFxuXHRcdFx0XHRcdGhvdGtleTogXCJFbnRlclwiXG5cdFx0XHRcdH1cblx0XHRcdF0sXG5cdFx0XHRkYXRhOiB7XG5cdFx0XHRcdHByb3ZpZGVySWQ6IHRoaXMuX2RlZmluaXRpb24/LmlkLFxuXHRcdFx0XHRrZXksXG5cdFx0XHRcdGVtb2ppOiBzeW1ib2wsXG5cdFx0XHRcdHVybDogYGh0dHBzOi8vZW1vamlwZWRpYS5vcmcvJHtrZXkucmVwbGFjZSgvXy9nLCBcIi1cIil9L2Bcblx0XHRcdH0sXG5cdFx0XHR0ZW1wbGF0ZTogQ0xJVGVtcGxhdGUuQ3VzdG9tLFxuXHRcdFx0dGVtcGxhdGVDb250ZW50OiB7XG5cdFx0XHRcdGxheW91dDogYXdhaXQgdGhpcy5nZXRFbW9qaVRlbXBsYXRlKCksXG5cdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHR0aXRsZTogYEVtb2ppICR7a2V5fWAsXG5cdFx0XHRcdFx0Y29weUtleVRpdGxlOiBcIkNvcHkgS2V5XCIsXG5cdFx0XHRcdFx0a2V5LFxuXHRcdFx0XHRcdGNvcHlFbW9qaVRpdGxlOiBcIkNvcHkgRW1vamlcIixcblx0XHRcdFx0XHRlbW9qaTogc3ltYm9sLFxuXHRcdFx0XHRcdGRldGFpbHNUaXRsZTogXCJGdXJ0aGVyIERldGFpbHNcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgdGhlIGRpc3BsYXkgdGVtcGxhdGUuXG5cdCAqIEByZXR1cm5zIFRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGVtb2ppLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRFbW9qaVRlbXBsYXRlKCk6IFByb21pc2U8VGVtcGxhdGVGcmFnbWVudD4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0c3R5bGU6IHsgZGlzcGxheTogXCJmbGV4XCIsIGZsZXg6IFwiMVwiLCBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLCBwYWRkaW5nOiBcIjEwcHhcIiB9LFxuXHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRcdFx0c3R5bGU6IHsgZGlzcGxheTogXCJmbGV4XCIsIGZsZXg6IFwiMVwiLCBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiIH0sXG5cdFx0XHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwidGl0bGVcIixcblx0XHRcdFx0XHRcdFx0c3R5bGU6IHtcblx0XHRcdFx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0XHRcdFx0Zm9udFNpemU6IFwiMTZweFwiLFxuXHRcdFx0XHRcdFx0XHRcdGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuXHRcdFx0XHRcdFx0XHRcdG1hcmdpbkJvdHRvbTogXCIxMHB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyQm90dG9tOiBcIjFweCBzb2xpZCAjNTM1NjVGXCIsXG5cdFx0XHRcdFx0XHRcdFx0d2hpdGVTcGFjZTogXCJub3dyYXBcIixcblx0XHRcdFx0XHRcdFx0XHR0ZXh0T3ZlcmZsb3c6IFwiZWxsaXBzaXNcIixcblx0XHRcdFx0XHRcdFx0XHRvdmVyZmxvdzogXCJoaWRkZW5cIlxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdGRpc3BsYXk6IFwiZmxleFwiLFxuXHRcdFx0XHRcdFx0XHRcdGZsZXhEaXJlY3Rpb246IFwicm93XCIsXG5cdFx0XHRcdFx0XHRcdFx0anVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwiLFxuXHRcdFx0XHRcdFx0XHRcdGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG5cdFx0XHRcdFx0XHRcdFx0Z2FwOiBcIjEwcHhcIixcblx0XHRcdFx0XHRcdFx0XHRtYXJnaW5Cb3R0b206IFwiMTBweFwiXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcImtleVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBjb2xvcjogXCIjRkZGRkZGXCIsIHdvcmRCcmVhazogXCJicmVhay1hbGxcIiB9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkJ1dHRvblwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uU3R5bGU6IEJ1dHRvblN0eWxlLlNlY29uZGFyeSxcblx0XHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbeyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJjb3B5S2V5VGl0bGVcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiIH0gfV0sXG5cdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb246IEVtb2ppU291cmNlLl9FTU9KSV9QUk9WSURFUl9DT1BZX0tFWV9BQ1RJT04sXG5cdFx0XHRcdFx0XHRcdFx0XHRzdHlsZTogeyBib3JkZXI6IFwiMXB4IHNvbGlkICNGRkZGRkZcIiwgZm9udFNpemU6IFwiMTJweFwiIH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0ZGlzcGxheTogXCJmbGV4XCIsXG5cdFx0XHRcdFx0XHRcdFx0ZmxleERpcmVjdGlvbjogXCJyb3dcIixcblx0XHRcdFx0XHRcdFx0XHRqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCIsXG5cdFx0XHRcdFx0XHRcdFx0YWxpZ25JdGVtczogXCJjZW50ZXJcIixcblx0XHRcdFx0XHRcdFx0XHRnYXA6IFwiMTBweFwiLFxuXHRcdFx0XHRcdFx0XHRcdG1hcmdpbkJvdHRvbTogXCIxMHB4XCJcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0XHRcdFx0XHR7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcImVtb2ppXCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjMycHhcIiwgY29sb3I6IFwiI0ZGRkZGRlwiIH0gfSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkJ1dHRvblwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uU3R5bGU6IEJ1dHRvblN0eWxlLlNlY29uZGFyeSxcblx0XHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbeyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJjb3B5RW1vamlUaXRsZVwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIgfSB9XSxcblx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogRW1vamlTb3VyY2UuX0VNT0pJX1BST1ZJREVSX0NPUFlfRU1PSklfQUNUSU9OLFxuXHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHsgYm9yZGVyOiBcIjFweCBzb2xpZCAjRkZGRkZGXCIsIGZvbnRTaXplOiBcIjEycHhcIiB9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogXCJDb250YWluZXJcIixcblx0XHRcdFx0XHRzdHlsZTogeyBkaXNwbGF5OiBcImZsZXhcIiwgZmxleERpcmVjdGlvbjogXCJyb3dcIiwganVzdGlmeUNvbnRlbnQ6IFwiZmxleC1lbmRcIiB9LFxuXHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiQnV0dG9uXCIsXG5cdFx0XHRcdFx0XHRcdGJ1dHRvblN0eWxlOiBCdXR0b25TdHlsZS5QcmltYXJ5LFxuXHRcdFx0XHRcdFx0XHRjaGlsZHJlbjogW3sgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwiZGV0YWlsc1RpdGxlXCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiB9IH1dLFxuXHRcdFx0XHRcdFx0XHRhY3Rpb246IEVtb2ppU291cmNlLl9FTU9KSV9QUk9WSURFUl9ERVRBSUxTX0FDVElPTixcblx0XHRcdFx0XHRcdFx0c3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiIH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHR9XG59XG4iLCJpbXBvcnQge1xuXHRDTElUZW1wbGF0ZSxcblx0dHlwZSBDTElGaWx0ZXIsXG5cdHR5cGUgSG9tZURpc3BhdGNoZWRTZWFyY2hSZXN1bHQsXG5cdHR5cGUgSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2UsXG5cdHR5cGUgSG9tZVNlYXJjaFJlc3BvbnNlLFxuXHR0eXBlIEhvbWVTZWFyY2hSZXN1bHQsXG5cdEJ1dHRvblN0eWxlXG59IGZyb20gXCJAb3BlbmZpbi93b3Jrc3BhY2VcIjtcbmltcG9ydCB7XG5cdENhdGVnb3J5U2NhbGUsXG5cdENoYXJ0LFxuXHRGaWxsZXIsXG5cdExpbmVhclNjYWxlLFxuXHRMaW5lQ29udHJvbGxlcixcblx0TGluZUVsZW1lbnQsXG5cdFBvaW50RWxlbWVudCxcblx0VGltZVNjYWxlXG59IGZyb20gXCJjaGFydC5qc1wiO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCB0eXBlIHsgUXVvdGVSZXN1bHQsIFF1b3RlU2V0dGluZ3MgfSBmcm9tIFwiLi9zaGFwZXNcIjtcblxuLyoqXG4gKiBJbXBsZW1lbnQgdGhlIHNvdXJjZSBmb3IgUXVvdGVzLlxuICovXG5leHBvcnQgY2xhc3MgUXVvdGVTb3VyY2Uge1xuXHQvKipcblx0ICogVGhlIGtleSB0byB1c2UgZm9yIGEgcXVvdGUgcmVzdWx0LlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9RVU9URV9QUk9WSURFUl9ERVRBSUxTX0FDVElPTiA9IFwiUXVvdGUgRGV0YWlsc1wiO1xuXG5cdC8qKlxuXHQgKiBUaGUgaGVscGVycyBmb3IgdGhlIHNvdXJjZS5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIF9oZWxwZXJzOiB7IG9wZW5Vcmw6ICh1cmw6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPiB9IHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgc2V0dGluZ3MgZm9yIHRoZSBzb3VyY2UuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJpdmF0ZSBfZGVmaW5pdGlvbjogeyBpZDogc3RyaW5nOyBkYXRhPzogUXVvdGVTZXR0aW5ncyB9IHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgc2V0dGluZ3MgZm9yIHRoZSBzb3VyY2UuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJpdmF0ZSBfc2V0dGluZ3M6IFF1b3RlU2V0dGluZ3MgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemUgdGhlIG1vZHVsZS5cblx0ICogQHBhcmFtIGRlZmluaXRpb24gVGhlIGRlZmluaXRpb24gb2YgdGhlIG1vZHVsZSBmcm9tIGNvbmZpZ3VyYXRpb24gaW5jbHVkZSBjdXN0b20gb3B0aW9ucy5cblx0ICogQHBhcmFtIGRlZmluaXRpb24uaWQgVGhlIGlkIGZvciB0aGUgbW9kdWxlLlxuXHQgKiBAcGFyYW0gZGVmaW5pdGlvbi5kYXRhIFRoZSBjdXN0b20gZGF0YSBmb3IgdGhlIG1vZHVsZS5cblx0ICogQHBhcmFtIGxvZ2dlckNyZWF0b3IgRm9yIGxvZ2dpbmcgZW50cmllcy5cblx0ICogQHBhcmFtIGhlbHBlcnMgSGVscGVyIG1ldGhvZHMgZnJvbSB0aGUgcGxhdGZvcm0uXG5cdCAqIEBwYXJhbSBoZWxwZXJzLm9wZW5VcmwgTWV0aG9kIGZvciBvcGVuaW5nIGEgdXJsLlxuXHQgKiBAcmV0dXJucyBOb3RoaW5nLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGluaXRpYWxpemUoXG5cdFx0ZGVmaW5pdGlvbjogeyBpZDogc3RyaW5nOyBkYXRhPzogUXVvdGVTZXR0aW5ncyB9LFxuXHRcdGxvZ2dlckNyZWF0b3I6ICgpID0+IHZvaWQsXG5cdFx0aGVscGVyczogeyBvcGVuVXJsOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD4gfVxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLl9kZWZpbml0aW9uID0gZGVmaW5pdGlvbjtcblx0XHR0aGlzLl9zZXR0aW5ncyA9IGRlZmluaXRpb24uZGF0YTtcblx0XHR0aGlzLl9oZWxwZXJzID0gaGVscGVycztcblxuXHRcdENoYXJ0LnJlZ2lzdGVyKExpbmVDb250cm9sbGVyLCBDYXRlZ29yeVNjYWxlLCBMaW5lYXJTY2FsZSwgTGluZUVsZW1lbnQsIFBvaW50RWxlbWVudCwgVGltZVNjYWxlLCBGaWxsZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIGxpc3Qgb2YgdGhlIHN0YXRpYyBoZWxwIGVudHJpZXMuXG5cdCAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIGhlbHAgZW50cmllcy5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBnZXRIZWxwU2VhcmNoRW50cmllcygpOiBQcm9taXNlPEhvbWVTZWFyY2hSZXN1bHRbXT4ge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGtleTogYCR7dGhpcy5fZGVmaW5pdGlvbj8uaWR9LWhlbHBgLFxuXHRcdFx0XHR0aXRsZTogXCIvcXVvdGVcIixcblx0XHRcdFx0bGFiZWw6IFwiSGVscFwiLFxuXHRcdFx0XHRhY3Rpb25zOiBbXSxcblx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdHByb3ZpZGVySWQ6IHRoaXMuX2RlZmluaXRpb24/LmlkLFxuXHRcdFx0XHRcdHBvcHVsYXRlUXVlcnk6IFwiL3F1b3RlIFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbXBsYXRlOiBDTElUZW1wbGF0ZS5DdXN0b20sXG5cdFx0XHRcdHRlbXBsYXRlQ29udGVudDoge1xuXHRcdFx0XHRcdGxheW91dDoge1xuXHRcdFx0XHRcdFx0dHlwZTogXCJDb250YWluZXJcIixcblx0XHRcdFx0XHRcdHN0eWxlOiB7IGRpc3BsYXk6IFwiZmxleFwiLCBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLCBwYWRkaW5nOiBcIjEwcHhcIiB9LFxuXHRcdFx0XHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwidGl0bGVcIixcblx0XHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29sb3I6IFwiI0ZGRkZGRlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9udFNpemU6IFwiMTZweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9udFdlaWdodDogXCJib2xkXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXJnaW5Cb3R0b206IFwiMTBweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Ym9yZGVyQm90dG9tOiBcIjFweCBzb2xpZCAjNTM1NjVGXCJcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHsgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwiZGVzYy0wXCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiwgcGFkZGluZzogXCI2cHggMHB4XCIgfSB9LFxuXHRcdFx0XHRcdFx0XHR7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcImRlc2MtMVwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIHBhZGRpbmc6IFwiNnB4IDBweFwiIH0gfSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHtcblx0XHRcdFx0XHRcdFx0XHRcdGRpc3BsYXk6IFwiZmxleFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIixcblx0XHRcdFx0XHRcdFx0XHRcdHBhZGRpbmc6IFwiMTBweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWFyZ2luVG9wOiBcIjZweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiBcIiM1MzU2NUZcIixcblx0XHRcdFx0XHRcdFx0XHRcdGNvbG9yOiBcIiNGRkZGRkZcIixcblx0XHRcdFx0XHRcdFx0XHRcdGJvcmRlclJhZGl1czogXCI1cHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdG92ZXJmbG93OiBcImF1dG9cIlxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwibGluZS0wXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiwgZm9udEZhbWlseTogXCJtb25vc3BhY2VcIiwgd2hpdGVTcGFjZTogXCJub3dyYXBcIiB9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0XHR0aXRsZTogXCIvcXVvdGVcIixcblx0XHRcdFx0XHRcdFwiZGVzYy0wXCI6IFwiVGhlIHF1b3RlIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBkZXRhaWxzIG9mIGFuIGluc3RydW1lbnQuXCIsXG5cdFx0XHRcdFx0XHRcImRlc2MtMVwiOiBcIkZvciBleGFtcGxlIHRvIHNlYXJjaCBmb3IgTWljcm9zb2Z0IGluc3RydW1lbnQuXCIsXG5cdFx0XHRcdFx0XHRcImxpbmUtMFwiOiBcIi9xdW90ZSBNU0ZUXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIGxpc3Qgb2Ygc2VhcmNoIHJlc3VsdHMgYmFzZWQgb24gdGhlIHF1ZXJ5IGFuZCBmaWx0ZXJzLlxuXHQgKiBAcGFyYW0gcXVlcnkgVGhlIHF1ZXJ5IHRvIHNlYXJjaCBmb3IuXG5cdCAqIEBwYXJhbSBmaWx0ZXJzIFRoZSBmaWx0ZXJzIHRvIGFwcGx5LlxuXHQgKiBAcGFyYW0gbGFzdFJlc3BvbnNlIFRoZSBsYXN0IHNlYXJjaCByZXNwb25zZSB1c2VkIGZvciB1cGRhdGluZyBleGlzdGluZyByZXN1bHRzLlxuXHQgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgZ2V0IHNlYXJjaCByZXN1bHRzLlxuXHQgKiBAcGFyYW0gb3B0aW9ucy5pc1N1Z2dlc3Rpb24gSXMgdGhlIHF1ZXJ5IGEgc3VnZ2VzdGlvbi5cblx0ICogQHJldHVybnMgVGhlIGxpc3Qgb2YgcmVzdWx0cyBhbmQgbmV3IGZpbHRlcnMuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0U2VhcmNoUmVzdWx0cyhcblx0XHRxdWVyeTogc3RyaW5nLFxuXHRcdGZpbHRlcnM6IENMSUZpbHRlcltdLFxuXHRcdGxhc3RSZXNwb25zZTogSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2UsXG5cdFx0b3B0aW9uczoge1xuXHRcdFx0aXNTdWdnZXN0aW9uOiBib29sZWFuO1xuXHRcdH1cblx0KTogUHJvbWlzZTxIb21lU2VhcmNoUmVzcG9uc2U+IHtcblx0XHRjb25zdCByZXN1bHRzID0gW107XG5cblx0XHRpZiAocXVlcnkuc3RhcnRzV2l0aChcIi9xdW90ZSBcIikgJiYgdGhpcy5fc2V0dGluZ3M/LnJvb3RVcmwpIHtcblx0XHRcdGxldCBzeW1ib2wgPSBxdWVyeS5zbGljZSg3KTtcblxuXHRcdFx0aWYgKHN5bWJvbC5sZW5ndGggPiAwICYmIC9eW2Etel0rJC9pLnRlc3Qoc3ltYm9sKSkge1xuXHRcdFx0XHRzeW1ib2wgPSBzeW1ib2wudG9VcHBlckNhc2UoKTtcblxuXHRcdFx0XHRjb25zdCBub3cgPSBEYXRlVGltZS5ub3coKTtcblxuXHRcdFx0XHRjb25zdCBxdW90ZURhdGEgPSBhd2FpdCB0aGlzLmdldFF1b3RlRGF0YShcblx0XHRcdFx0XHRzeW1ib2wsXG5cdFx0XHRcdFx0bm93Lm1pbnVzKHsgbW9udGhzOiAxIH0pLnRvRm9ybWF0KFwieXl5eS1MTC1kZFwiKSxcblx0XHRcdFx0XHRub3cudG9Gb3JtYXQoXCJ5eXl5LUxMLWRkXCIpXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0bGV0IHByaWNlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGxldCBjb21wYW55OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGxldCBkYXRhOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH1bXSB8IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRpZiAocXVvdGVEYXRhPy5kYXRhPy5sYXN0U2FsZVByaWNlKSB7XG5cdFx0XHRcdFx0cHJpY2UgPSBxdW90ZURhdGEuZGF0YS5sYXN0U2FsZVByaWNlO1xuXHRcdFx0XHRcdGNvbXBhbnkgPSBxdW90ZURhdGEuZGF0YS5jb21wYW55O1xuXHRcdFx0XHRcdGRhdGEgPSBxdW90ZURhdGEuZGF0YS5jaGFydDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChwcmljZSAhPT0gdW5kZWZpbmVkICYmIGRhdGEgIT09IHVuZGVmaW5lZCAmJiBjb21wYW55ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjb25zdCBncmFwaEltYWdlID0gYXdhaXQgdGhpcy5yZW5kZXJHcmFwaChkYXRhKTtcblxuXHRcdFx0XHRcdGNvbnN0IHF1b3RlUmVzdWx0OiBIb21lU2VhcmNoUmVzdWx0ID0ge1xuXHRcdFx0XHRcdFx0a2V5OiBgcXVvdGUtJHtzeW1ib2x9YCxcblx0XHRcdFx0XHRcdHRpdGxlOiBzeW1ib2wsXG5cdFx0XHRcdFx0XHRsYWJlbDogXCJJbmZvcm1hdGlvblwiLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogUXVvdGVTb3VyY2UuX1FVT1RFX1BST1ZJREVSX0RFVEFJTFNfQUNUSU9OLFxuXHRcdFx0XHRcdFx0XHRcdGhvdGtleTogXCJFbnRlclwiXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0XHRcdHByb3ZpZGVySWQ6IHRoaXMuX2RlZmluaXRpb24/LmlkLFxuXHRcdFx0XHRcdFx0XHR1cmw6IGBodHRwczovL3d3dy5uYXNkYXEuY29tL21hcmtldC1hY3Rpdml0eS9zdG9ja3MvJHtzeW1ib2wudG9Mb3dlckNhc2UoKX1gXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dGVtcGxhdGU6IENMSVRlbXBsYXRlLkN1c3RvbSxcblx0XHRcdFx0XHRcdHRlbXBsYXRlQ29udGVudDoge1xuXHRcdFx0XHRcdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7IGRpc3BsYXk6IFwiZmxleFwiLCBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLCBwYWRkaW5nOiBcIjEwcHhcIiB9LFxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7IGRpc3BsYXk6IFwiZmxleFwiLCBmbGV4RGlyZWN0aW9uOiBcInJvd1wiLCBqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCIgfSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcInN5bWJvbFwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxOHB4XCIsIGZvbnRXZWlnaHQ6IFwiYm9sZFwiIH0gfSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcInByaWNlXCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjE4cHhcIiB9IH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwiY29tcGFueVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIGNvbG9yOiBcIiNGRkZGRkZcIiwgbWFyZ2luOiBcIjVweCAwcHhcIiB9XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpc3BsYXk6IFwiZmxleFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiBcImJsYWNrXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ym9yZGVyUmFkaXVzOiBcIjVweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhZGRpbmc6IFwiNXB4XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46IFt7IHR5cGU6IFwiSW1hZ2VcIiwgZGF0YUtleTogXCJncmFwaFwiLCBhbHRlcm5hdGl2ZVRleHQ6IFwiSGlzdG9yeVwiLCBzdHlsZToge30gfV1cblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlzcGxheTogXCJmbGV4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmxleERpcmVjdGlvbjogXCJyb3dcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqdXN0aWZ5Q29udGVudDogXCJmbGV4LWVuZFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhZGRpbmdUb3A6IFwiMTBweFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJCdXR0b25cIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJ1dHRvblN0eWxlOiBCdXR0b25TdHlsZS5QcmltYXJ5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46IFt7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcImRldGFpbHNUaXRsZVwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIgfSB9XSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogUXVvdGVTb3VyY2UuX1FVT1RFX1BST1ZJREVSX0RFVEFJTFNfQUNUSU9OLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRcdFx0XHRzeW1ib2wsXG5cdFx0XHRcdFx0XHRcdFx0cHJpY2VUaXRsZTogXCJQcmljZVwiLFxuXHRcdFx0XHRcdFx0XHRcdHByaWNlOiBgJHtwcmljZX1gLFxuXHRcdFx0XHRcdFx0XHRcdGNvbXBhbnksXG5cdFx0XHRcdFx0XHRcdFx0Z3JhcGg6IGdyYXBoSW1hZ2UsXG5cdFx0XHRcdFx0XHRcdFx0ZGV0YWlsc1RpdGxlOiBcIkRldGFpbHNcIlxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRyZXN1bHRzLnB1c2gocXVvdGVSZXN1bHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHJlc3VsdHNcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFuIGVudHJ5IGhhcyBiZWVuIHNlbGVjdGVkLlxuXHQgKiBAcGFyYW0gcmVzdWx0IFRoZSBkaXNwYXRjaGVkIHJlc3VsdC5cblx0ICogQHBhcmFtIGxhc3RSZXNwb25zZSBUaGUgbGFzdCByZXNwb25zZS5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgaXRlbSB3YXMgaGFuZGxlZC5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBpdGVtU2VsZWN0aW9uKFxuXHRcdHJlc3VsdDogSG9tZURpc3BhdGNoZWRTZWFyY2hSZXN1bHQsXG5cdFx0bGFzdFJlc3BvbnNlOiBIb21lU2VhcmNoTGlzdGVuZXJSZXNwb25zZVxuXHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRpZiAoXG5cdFx0XHRyZXN1bHQuYWN0aW9uLnRyaWdnZXIgPT09IFwidXNlci1hY3Rpb25cIiAmJlxuXHRcdFx0cmVzdWx0LmFjdGlvbi5uYW1lID09PSBRdW90ZVNvdXJjZS5fUVVPVEVfUFJPVklERVJfREVUQUlMU19BQ1RJT04gJiZcblx0XHRcdHRoaXMuX2hlbHBlcnM/Lm9wZW5VcmwgJiZcblx0XHRcdHJlc3VsdC5kYXRhLnVybFxuXHRcdCkge1xuXHRcdFx0YXdhaXQgdGhpcy5faGVscGVycy5vcGVuVXJsKHJlc3VsdC5kYXRhLnVybCBhcyBzdHJpbmcpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcXVvdGUgZGF0YSBmcm9tIHRoZSBhcGkuXG5cdCAqIEBwYXJhbSBzeW1ib2wgVGhlIHN5bWJvbCB0byBnZXQuXG5cdCAqIEBwYXJhbSBmcm9tIFRoZSBkYXRlIGZyb20uXG5cdCAqIEBwYXJhbSB0byBUaGUgZGF0ZSB0by5cblx0ICogQHJldHVybnMgVGhlIHJlc3VsdCBkYXRhLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRRdW90ZURhdGEoc3ltYm9sOiBzdHJpbmcsIGZyb206IHN0cmluZywgdG86IHN0cmluZyk6IFByb21pc2U8UXVvdGVSZXN1bHQgfCB1bmRlZmluZWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc3ltYm9sVXJsID0gYCR7dGhpcy5fc2V0dGluZ3M/LnJvb3RVcmx9JHtzeW1ib2x9Lmpzb25gO1xuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChzeW1ib2xVcmwpO1xuXG5cdFx0XHRjb25zdCBqc29uOiBRdW90ZVJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuXHRcdFx0cmV0dXJuIGpzb247XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKGVycik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlbmRlciB0aGUgZGF0YSBhcyBhIGdyYXBoLlxuXHQgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byByZW5kZXIuXG5cdCAqIEByZXR1cm5zIFRoZSBncmFwaCBhcyBhIGJhc2U2NCBlbmNvZGVkIGltYWdlLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyByZW5kZXJHcmFwaChkYXRhOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH1bXSk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcblx0XHRjYW52YXMud2lkdGggPSAyNTA7XG5cdFx0Y2FudmFzLmhlaWdodCA9IDExMDtcblx0XHRjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuXG5cdFx0aWYgKGN0eCkge1xuXHRcdFx0Y29uc3QgY2hhcnQgPSBuZXcgQ2hhcnQoY3R4LCB7XG5cdFx0XHRcdHR5cGU6IFwibGluZVwiLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0bGFiZWxzOiBkYXRhLm1hcCgoZCkgPT4gZC54KSxcblx0XHRcdFx0XHRkYXRhc2V0czogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRmaWxsOiBcIm9yaWdpblwiLFxuXHRcdFx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IFwiZ3JlZW5cIixcblx0XHRcdFx0XHRcdFx0cmFkaXVzOiAwLFxuXHRcdFx0XHRcdFx0XHRkYXRhXG5cdFx0XHRcdFx0XHR9IGFzIG5ldmVyXG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0YW5pbWF0aW9uOiBmYWxzZSxcblx0XHRcdFx0XHRyZXNwb25zaXZlOiBmYWxzZSxcblx0XHRcdFx0XHRzY2FsZXM6IHtcblx0XHRcdFx0XHRcdHg6IHtcblx0XHRcdFx0XHRcdFx0ZGlzcGxheTogZmFsc2Vcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHBsdWdpbnM6IHtcblx0XHRcdFx0XHRcdGxlZ2VuZDoge1xuXHRcdFx0XHRcdFx0XHRkaXNwbGF5OiBmYWxzZVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjaGFydC51cGRhdGUoKTtcblx0XHRcdHJldHVybiBjaGFydC50b0Jhc2U2NEltYWdlKFwiaW1hZ2UvanBlZ1wiLCAxKTtcblx0XHR9XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdENMSUFjdGlvbixcblx0Q0xJVGVtcGxhdGUsXG5cdHR5cGUgQ0xJRmlsdGVyLFxuXHR0eXBlIEhvbWVEaXNwYXRjaGVkU2VhcmNoUmVzdWx0LFxuXHR0eXBlIEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlLFxuXHR0eXBlIEhvbWVTZWFyY2hSZXNwb25zZSxcblx0dHlwZSBIb21lU2VhcmNoUmVzdWx0XG59IGZyb20gXCJAb3BlbmZpbi93b3Jrc3BhY2VcIjtcblxuLyoqXG4gKiBJbXBsZW1lbnQgdGhlIHNvdXJjZSBmb3IgU3VnZ2VzdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdWdnZXN0aW9uU291cmNlIHtcblx0LyoqXG5cdCAqIFRoZSBoZWxwZXJzIGZvciB0aGUgc291cmNlLlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgX2hlbHBlcnM6IHsgb3BlblVybDogKHVybDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+IH0gfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFRoZSBzZXR0aW5ncyBmb3IgdGhlIHNvdXJjZS5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIF9kZWZpbml0aW9uOiB7IGlkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZSB0aGUgbW9kdWxlLlxuXHQgKiBAcGFyYW0gZGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgbW9kdWxlIGZyb20gY29uZmlndXJhdGlvbiBpbmNsdWRlIGN1c3RvbSBvcHRpb25zLlxuXHQgKiBAcGFyYW0gZGVmaW5pdGlvbi5pZCBUaGUgaWQgZm9yIHRoZSBtb2R1bGUuXG5cdCAqIEBwYXJhbSBkZWZpbml0aW9uLmRhdGEgVGhlIGN1c3RvbSBkYXRhIGZvciB0aGUgbW9kdWxlLlxuXHQgKiBAcGFyYW0gbG9nZ2VyQ3JlYXRvciBGb3IgbG9nZ2luZyBlbnRyaWVzLlxuXHQgKiBAcGFyYW0gaGVscGVycyBIZWxwZXIgbWV0aG9kcyBmcm9tIHRoZSBwbGF0Zm9ybS5cblx0ICogQHBhcmFtIGhlbHBlcnMub3BlblVybCBNZXRob2QgZm9yIG9wZW5pbmcgYSB1cmwuXG5cdCAqIEByZXR1cm5zIE5vdGhpbmcuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgaW5pdGlhbGl6ZShcblx0XHRkZWZpbml0aW9uOiB7XG5cdFx0XHRpZDogc3RyaW5nO1xuXHRcdFx0ZGF0YT86IHVua25vd247XG5cdFx0fSxcblx0XHRsb2dnZXJDcmVhdG9yOiAoKSA9PiB2b2lkLFxuXHRcdGhlbHBlcnM6IHsgb3BlblVybDogKHVybDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+IH1cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5fZGVmaW5pdGlvbiA9IGRlZmluaXRpb247XG5cdFx0dGhpcy5faGVscGVycyA9IGhlbHBlcnM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGEgbGlzdCBvZiB0aGUgc3RhdGljIGhlbHAgZW50cmllcy5cblx0ICogQHJldHVybnMgVGhlIGxpc3Qgb2YgaGVscCBlbnRyaWVzLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGdldEhlbHBTZWFyY2hFbnRyaWVzKCk6IFByb21pc2U8SG9tZVNlYXJjaFJlc3VsdFtdPiB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIGxpc3Qgb2Ygc2VhcmNoIHJlc3VsdHMgYmFzZWQgb24gdGhlIHF1ZXJ5IGFuZCBmaWx0ZXJzLlxuXHQgKiBAcGFyYW0gcXVlcnkgVGhlIHF1ZXJ5IHRvIHNlYXJjaCBmb3IuXG5cdCAqIEBwYXJhbSBmaWx0ZXJzIFRoZSBmaWx0ZXJzIHRvIGFwcGx5LlxuXHQgKiBAcGFyYW0gbGFzdFJlc3BvbnNlIFRoZSBsYXN0IHNlYXJjaCByZXNwb25zZSB1c2VkIGZvciB1cGRhdGluZyBleGlzdGluZyByZXN1bHRzLlxuXHQgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgZ2V0IHNlYXJjaCByZXN1bHRzLlxuXHQgKiBAcGFyYW0gb3B0aW9ucy5pc1N1Z2dlc3Rpb24gSXMgdGhlIHF1ZXJ5IGEgc3VnZ2VzdGlvbi5cblx0ICogQHJldHVybnMgVGhlIGxpc3Qgb2YgcmVzdWx0cyBhbmQgbmV3IGZpbHRlcnMuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0U2VhcmNoUmVzdWx0cyhcblx0XHRxdWVyeTogc3RyaW5nLFxuXHRcdGZpbHRlcnM6IENMSUZpbHRlcltdLFxuXHRcdGxhc3RSZXNwb25zZTogSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2UsXG5cdFx0b3B0aW9uczoge1xuXHRcdFx0aXNTdWdnZXN0aW9uOiBib29sZWFuO1xuXHRcdH1cblx0KTogUHJvbWlzZTxIb21lU2VhcmNoUmVzcG9uc2U+IHtcblx0XHRjb25zdCByZXN1bHRzOiBIb21lU2VhcmNoUmVzdWx0W10gPSBbXTtcblxuXHRcdGlmICghb3B0aW9ucy5pc1N1Z2dlc3Rpb24gJiYgcXVlcnkuc3RhcnRzV2l0aChcImRlc3NlcnRzXCIpKSB7XG5cdFx0XHRyZXN1bHRzLnB1c2goe1xuXHRcdFx0XHR0aXRsZTogXCJDYWtlc1wiLFxuXHRcdFx0XHRrZXk6IFwiY2FrZXNcIixcblx0XHRcdFx0YWN0aW9uczogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG5hbWU6IENMSUFjdGlvbi5TdWdnZXN0aW9uLFxuXHRcdFx0XHRcdFx0cXVlcnk6IFwiY2FrZXNcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XSxcblx0XHRcdFx0dGVtcGxhdGU6IENMSVRlbXBsYXRlLlBsYWluLFxuXHRcdFx0XHR0ZW1wbGF0ZUNvbnRlbnQ6IHVuZGVmaW5lZFxuXHRcdFx0fSk7XG5cdFx0XHRyZXN1bHRzLnB1c2goe1xuXHRcdFx0XHR0aXRsZTogXCJJY2UgQ3JlYW1cIixcblx0XHRcdFx0a2V5OiBcImljZS1jcmVhbVwiLFxuXHRcdFx0XHRhY3Rpb25zOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bmFtZTogQ0xJQWN0aW9uLlN1Z2dlc3Rpb24sXG5cdFx0XHRcdFx0XHRxdWVyeTogXCJpY2UtY3JlYW1cIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XSxcblx0XHRcdFx0dGVtcGxhdGU6IENMSVRlbXBsYXRlLlBsYWluLFxuXHRcdFx0XHR0ZW1wbGF0ZUNvbnRlbnQ6IHVuZGVmaW5lZFxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChvcHRpb25zLmlzU3VnZ2VzdGlvbikge1xuXHRcdFx0aWYgKHF1ZXJ5ID09PSBcImNha2VzXCIpIHtcblx0XHRcdFx0cmVzdWx0cy5wdXNoKHtcblx0XHRcdFx0XHR0aXRsZTogXCJDYWtlc1wiLFxuXHRcdFx0XHRcdGtleTogXCJjYWtlc1wiLFxuXHRcdFx0XHRcdGFjdGlvbnM6IFtdLFxuXHRcdFx0XHRcdHRlbXBsYXRlOiBDTElUZW1wbGF0ZS5TaW1wbGVUZXh0LFxuXHRcdFx0XHRcdHRlbXBsYXRlQ29udGVudDogXCJBIHNlbGVjdGlvbiBvZiBjYWtlc1wiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChxdWVyeSA9PT0gXCJpY2UtY3JlYW1cIikge1xuXHRcdFx0XHRyZXN1bHRzLnB1c2goe1xuXHRcdFx0XHRcdHRpdGxlOiBcIkljZSBDcmVhbVwiLFxuXHRcdFx0XHRcdGtleTogXCJpY2UtY3JlYW1cIixcblx0XHRcdFx0XHRhY3Rpb25zOiBbXSxcblx0XHRcdFx0XHR0ZW1wbGF0ZTogQ0xJVGVtcGxhdGUuU2ltcGxlVGV4dCxcblx0XHRcdFx0XHR0ZW1wbGF0ZUNvbnRlbnQ6IFwiQSBzZWxlY3Rpb24gb2YgaWNlIGNyZWFtXCJcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHJlc3VsdHNcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFuIGVudHJ5IGhhcyBiZWVuIHNlbGVjdGVkLlxuXHQgKiBAcGFyYW0gcmVzdWx0IFRoZSBkaXNwYXRjaGVkIHJlc3VsdC5cblx0ICogQHBhcmFtIGxhc3RSZXNwb25zZSBUaGUgbGFzdCByZXNwb25zZS5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgaXRlbSB3YXMgaGFuZGxlZC5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBpdGVtU2VsZWN0aW9uKFxuXHRcdHJlc3VsdDogSG9tZURpc3BhdGNoZWRTZWFyY2hSZXN1bHQsXG5cdFx0bGFzdFJlc3BvbnNlOiBIb21lU2VhcmNoTGlzdGVuZXJSZXNwb25zZVxuXHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRpZiAocmVzdWx0LmFjdGlvbi50cmlnZ2VyID09PSBcInVzZXItYWN0aW9uXCIpIHtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdEJ1dHRvblN0eWxlLFxuXHRDTElUZW1wbGF0ZSxcblx0dHlwZSBDTElGaWx0ZXIsXG5cdHR5cGUgSG9tZURpc3BhdGNoZWRTZWFyY2hSZXN1bHQsXG5cdHR5cGUgSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2UsXG5cdHR5cGUgSG9tZVNlYXJjaFJlc3BvbnNlLFxuXHR0eXBlIEhvbWVTZWFyY2hSZXN1bHRcbn0gZnJvbSBcIkBvcGVuZmluL3dvcmtzcGFjZVwiO1xuXG4vKipcbiAqIEltcGxlbWVudCB0aGUgc291cmNlIGZvciBleGFtcGxlIG9mIHRlbXBsYXRlIHR5cGVzLlxuICovXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVUeXBlc1NvdXJjZSB7XG5cdC8qKlxuXHQgKiBUaGUgaGVscGVycyBmb3IgdGhlIHNvdXJjZS5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIF9oZWxwZXJzOiB7IG9wZW5Vcmw6ICh1cmw6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPiB9IHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgc2V0dGluZ3MgZm9yIHRoZSBzb3VyY2UuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJpdmF0ZSBfZGVmaW5pdGlvbjogeyBpZDogc3RyaW5nOyBkYXRhPzogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplIHRoZSBtb2R1bGUuXG5cdCAqIEBwYXJhbSBkZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBtb2R1bGUgZnJvbSBjb25maWd1cmF0aW9uIGluY2x1ZGUgY3VzdG9tIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSBkZWZpbml0aW9uLmlkIFRoZSBpZCBmb3IgdGhlIG1vZHVsZS5cblx0ICogQHBhcmFtIGRlZmluaXRpb24uZGF0YSBUaGUgY3VzdG9tIGRhdGEgZm9yIHRoZSBtb2R1bGUuXG5cdCAqIEBwYXJhbSBsb2dnZXJDcmVhdG9yIEZvciBsb2dnaW5nIGVudHJpZXMuXG5cdCAqIEBwYXJhbSBoZWxwZXJzIEhlbHBlciBtZXRob2RzIGZyb20gdGhlIHBsYXRmb3JtLlxuXHQgKiBAcGFyYW0gaGVscGVycy5vcGVuVXJsIE1ldGhvZCBmb3Igb3BlbmluZyBhIHVybC5cblx0ICogQHJldHVybnMgTm90aGluZy5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBpbml0aWFsaXplKFxuXHRcdGRlZmluaXRpb246IHtcblx0XHRcdGlkOiBzdHJpbmc7XG5cdFx0XHRkYXRhPzogdW5rbm93bjtcblx0XHR9LFxuXHRcdGxvZ2dlckNyZWF0b3I6ICgpID0+IHZvaWQsXG5cdFx0aGVscGVyczogeyBvcGVuVXJsOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD4gfVxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLl9kZWZpbml0aW9uID0gZGVmaW5pdGlvbjtcblx0XHR0aGlzLl9oZWxwZXJzID0gaGVscGVycztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSBsaXN0IG9mIHRoZSBzdGF0aWMgaGVscCBlbnRyaWVzLlxuXHQgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBoZWxwIGVudHJpZXMuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0SGVscFNlYXJjaEVudHJpZXMoKTogUHJvbWlzZTxIb21lU2VhcmNoUmVzdWx0W10+IHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRrZXk6IGAke3RoaXMuX2RlZmluaXRpb24/LmlkfS1oZWxwYCxcblx0XHRcdFx0dGl0bGU6IFwiL3RlbXBsYXRlc1wiLFxuXHRcdFx0XHRsYWJlbDogXCJIZWxwXCIsXG5cdFx0XHRcdGFjdGlvbnM6IFtdLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0cHJvdmlkZXJJZDogdGhpcy5fZGVmaW5pdGlvbj8uaWQsXG5cdFx0XHRcdFx0cG9wdWxhdGVRdWVyeTogXCIvdGVtcGxhdGVzXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0dGVtcGxhdGU6IENMSVRlbXBsYXRlLkN1c3RvbSxcblx0XHRcdFx0dGVtcGxhdGVDb250ZW50OiB7XG5cdFx0XHRcdFx0bGF5b3V0OiB7XG5cdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0c3R5bGU6IHsgZGlzcGxheTogXCJmbGV4XCIsIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsIHBhZGRpbmc6IFwiMTBweFwiIH0sXG5cdFx0XHRcdFx0XHRjaGlsZHJlbjogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUtleTogXCJ0aXRsZVwiLFxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRmb250U2l6ZTogXCIxNnB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRmb250V2VpZ2h0OiBcImJvbGRcIixcblx0XHRcdFx0XHRcdFx0XHRcdG1hcmdpbkJvdHRvbTogXCIxMHB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRib3JkZXJCb3R0b206IFwiMXB4IHNvbGlkICM1MzU2NUZcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0eyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJkZXNjLTBcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBwYWRkaW5nOiBcIjZweCAwcHhcIiB9IH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5OiBcImZsZXhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRwYWRkaW5nOiBcIjEwcHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdG1hcmdpblRvcDogXCI2cHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCIjNTM1NjVGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRib3JkZXJSYWRpdXM6IFwiNXB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRvdmVyZmxvdzogXCJhdXRvXCJcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcImxpbmUtMFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIGZvbnRGYW1pbHk6IFwibW9ub3NwYWNlXCIsIHdoaXRlU3BhY2U6IFwibm93cmFwXCIgfVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0dGl0bGU6IFwiL3RlbXBsYXRlc1wiLFxuXHRcdFx0XHRcdFx0XCJkZXNjLTBcIjogXCJUaGUgdGVtcGxhdGVzIGNvbW1hbmQgc2hvd3MgYSB0ZW1wbGF0ZSB3aXRoIGFsbCB0aGUgZGlmZmVyZW50IHRlbXBsYXRlIGNvbnRlbnQgdHlwZXMuXCIsXG5cdFx0XHRcdFx0XHRcImxpbmUtMFwiOiBcIi90ZW1wbGF0ZXNcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF07XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGEgbGlzdCBvZiBzZWFyY2ggcmVzdWx0cyBiYXNlZCBvbiB0aGUgcXVlcnkgYW5kIGZpbHRlcnMuXG5cdCAqIEBwYXJhbSBxdWVyeSBUaGUgcXVlcnkgdG8gc2VhcmNoIGZvci5cblx0ICogQHBhcmFtIGZpbHRlcnMgVGhlIGZpbHRlcnMgdG8gYXBwbHkuXG5cdCAqIEBwYXJhbSBsYXN0UmVzcG9uc2UgVGhlIGxhc3Qgc2VhcmNoIHJlc3BvbnNlIHVzZWQgZm9yIHVwZGF0aW5nIGV4aXN0aW5nIHJlc3VsdHMuXG5cdCAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSBnZXQgc2VhcmNoIHJlc3VsdHMuXG5cdCAqIEBwYXJhbSBvcHRpb25zLmlzU3VnZ2VzdGlvbiBJcyB0aGUgcXVlcnkgYSBzdWdnZXN0aW9uLlxuXHQgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiByZXN1bHRzIGFuZCBuZXcgZmlsdGVycy5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBnZXRTZWFyY2hSZXN1bHRzKFxuXHRcdHF1ZXJ5OiBzdHJpbmcsXG5cdFx0ZmlsdGVyczogQ0xJRmlsdGVyW10sXG5cdFx0bGFzdFJlc3BvbnNlOiBIb21lU2VhcmNoTGlzdGVuZXJSZXNwb25zZSxcblx0XHRvcHRpb25zOiB7XG5cdFx0XHRpc1N1Z2dlc3Rpb246IGJvb2xlYW47XG5cdFx0fVxuXHQpOiBQcm9taXNlPEhvbWVTZWFyY2hSZXNwb25zZT4ge1xuXHRcdGNvbnN0IHJlc3VsdHM6IEhvbWVTZWFyY2hSZXN1bHRbXSA9IFtdO1xuXG5cdFx0aWYgKHF1ZXJ5LnN0YXJ0c1dpdGgoXCIvdGVtcGxhdGVzXCIpKSB7XG5cdFx0XHRyZXN1bHRzLnB1c2goe1xuXHRcdFx0XHRrZXk6IFwidGVtcGxhdGVzLWV4YW1wbGVcIixcblx0XHRcdFx0dGl0bGU6IFwiVGVtcGxhdGVzIEV4YW1wbGVcIixcblx0XHRcdFx0bGFiZWw6IFwiSW5mb3JtYXRpb25cIixcblx0XHRcdFx0YWN0aW9uczogW10sXG5cdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRwcm92aWRlcklkOiB0aGlzLl9kZWZpbml0aW9uPy5pZFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZW1wbGF0ZTogQ0xJVGVtcGxhdGUuQ3VzdG9tLFxuXHRcdFx0XHR0ZW1wbGF0ZUNvbnRlbnQ6IHtcblx0XHRcdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRcdFx0XHRzdHlsZTogeyBkaXNwbGF5OiBcImZsZXhcIiwgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIiwgZ2FwOiBcIjEwcHhcIiwgcGFkZGluZzogXCIxMHB4XCIgfSxcblx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIlRleHRcIixcblx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcInRleHRDb250ZW50XCIsXG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbG9yOiBcIiNGRkZGRkZcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZvbnRTaXplOiBcIjE0cHhcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiSW1hZ2VcIixcblx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcImltYWdlQ29udGVudFwiLFxuXHRcdFx0XHRcdFx0XHRcdGFsdGVybmF0aXZlVGV4dDogXCJUaGlzIGlzIGFsdGVybmF0aXZlIHRleHRcIixcblx0XHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg6IFwiMzJweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBcIjMycHhcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiTGlzdFwiLFxuXHRcdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwibGlzdENvbnRlbnRcIlxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJDb250YWluZXJcIixcblx0XHRcdFx0XHRcdFx0XHRzdHlsZTogeyBkaXNwbGF5OiBcImZsZXhcIiwgZmxleERpcmVjdGlvbjogXCJyb3dcIiwgZ2FwOiBcIjVweFwiIH0sXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJCdXR0b25cIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uU3R5bGU6IEJ1dHRvblN0eWxlLlByaW1hcnksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcImJ1dHRvblByaW1hcnlDb250ZW50XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogXCJidXR0b24tcHJpbWFyeS1hY3Rpb25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJCdXR0b25cIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uU3R5bGU6IEJ1dHRvblN0eWxlLlNlY29uZGFyeSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIlRleHRcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwiYnV0dG9uU2Vjb25kYXJ5Q29udGVudFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb246IFwiYnV0dG9uLXNlY29uZGFyeS1hY3Rpb25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJCdXR0b25cIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uU3R5bGU6IEJ1dHRvblN0eWxlLlRleHRPbmx5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbjogW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YUtleTogXCJidXR0b25UZXh0T25seUNvbnRlbnRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uOiBcImJ1dHRvbi10ZXh0LW9ubHktYWN0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIlNwbGl0QnV0dG9uXCIsXG5cdFx0XHRcdFx0XHRcdFx0YnV0dG9uU3R5bGU6IEJ1dHRvblN0eWxlLlByaW1hcnksXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUtleTogXCJidXR0b25TcGxpdDFDb250ZW50XCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0dGV4dENvbnRlbnQ6IFwiVGhpcyBpcyB0ZXh0IGNvbnRlbnRcIixcblx0XHRcdFx0XHRcdGltYWdlQ29udGVudDogXCJodHRwczovL2Nkbi5vcGVuZmluLmNvL3dvcmtzcGFjZS8yMC4wLjUvaWNvbnMvZGVmYXVsdEZhdmljb24uc3ZnXCIsXG5cdFx0XHRcdFx0XHRsaXN0Q29udGVudDogW1xuXHRcdFx0XHRcdFx0XHRbXCJMYWJlbCAxXCIsIFwiVmFsdWUgMVwiXSxcblx0XHRcdFx0XHRcdFx0W1wiTGFiZWwgMlwiLCBcIlZhbHVlIDJcIl1cblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRidXR0b25QcmltYXJ5Q29udGVudDogXCJQcmltYXJ5XCIsXG5cdFx0XHRcdFx0XHRidXR0b25TZWNvbmRhcnlDb250ZW50OiBcIlNlY29uZGFyeVwiLFxuXHRcdFx0XHRcdFx0YnV0dG9uVGV4dE9ubHlDb250ZW50OiBcIlRleHQgT25seVwiLFxuXHRcdFx0XHRcdFx0YnV0dG9uU3BsaXQxQ29udGVudDoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogXCJTcGxpdCBCdXR0b24gMVwiLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiBcIkNsaWNrIG1lXCIsXG5cdFx0XHRcdFx0XHRcdGFjdGlvbjogXCJzcGxpdC1wcmltYXJ5LWFjdGlvblwiLFxuXHRcdFx0XHRcdFx0XHRvcHRpb25zOiBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IFwiTWVudSBPcHRpb24gMVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dG9vbHRpcDogXCJNZW51IE9wdGlvbiAxIFRvb2x0aXBcIixcblx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogXCJzcGxpdC1hY3Rpb24tMVwiXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogXCJNZW51IE9wdGlvbiAyXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwOiBcIk1lbnUgT3B0aW9uIDIgVG9vbHRpcFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uOiBcInNwbGl0LWFjdGlvbi0yXCJcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRyZXN1bHRzXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbiBlbnRyeSBoYXMgYmVlbiBzZWxlY3RlZC5cblx0ICogQHBhcmFtIHJlc3VsdCBUaGUgZGlzcGF0Y2hlZCByZXN1bHQuXG5cdCAqIEBwYXJhbSBsYXN0UmVzcG9uc2UgVGhlIGxhc3QgcmVzcG9uc2UuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGl0ZW0gd2FzIGhhbmRsZWQuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgaXRlbVNlbGVjdGlvbihcblx0XHRyZXN1bHQ6IEhvbWVEaXNwYXRjaGVkU2VhcmNoUmVzdWx0LFxuXHRcdGxhc3RSZXNwb25zZTogSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2Vcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0aWYgKHJlc3VsdC5hY3Rpb24udHJpZ2dlciA9PT0gXCJ1c2VyLWFjdGlvblwiKSB7XG5cdFx0XHRpZiAocmVzdWx0LmFjdGlvbi5uYW1lID09PSBcImJ1dHRvbi1wcmltYXJ5LWFjdGlvblwiKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiQnV0dG9uIFByaW1hcnkgQ2xpY2tlZFwiKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKHJlc3VsdC5hY3Rpb24ubmFtZSA9PT0gXCJidXR0b24tc2Vjb25kYXJ5LWFjdGlvblwiKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiQnV0dG9uIFNlY29uZGFyeSBDbGlja2VkXCIpO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAocmVzdWx0LmFjdGlvbi5uYW1lID09PSBcImJ1dHRvbi10ZXh0LW9ubHktYWN0aW9uXCIpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coXCJCdXR0b24gVGV4dCBPbmx5IENsaWNrZWRcIik7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChyZXN1bHQuYWN0aW9uLm5hbWUgPT09IFwic3BsaXQtcHJpbWFyeS1hY3Rpb25cIikge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhcIlNwbGl0IFByaW1hcnkgQWN0aW9uXCIpO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAocmVzdWx0LmFjdGlvbi5uYW1lID09PSBcInNwbGl0LWFjdGlvbi0xXCIpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coXCJTcGxpdCBBY3Rpb24gMVwiKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKHJlc3VsdC5hY3Rpb24ubmFtZSA9PT0gXCJzcGxpdC1hY3Rpb24tMlwiKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiU3BsaXQgQWN0aW9uIDJcIik7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuIiwiaW1wb3J0IHtcblx0Q0xJVGVtcGxhdGUsXG5cdHR5cGUgQ0xJRmlsdGVyLFxuXHR0eXBlIEhvbWVEaXNwYXRjaGVkU2VhcmNoUmVzdWx0LFxuXHR0eXBlIEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlLFxuXHR0eXBlIEhvbWVTZWFyY2hSZXNwb25zZSxcblx0dHlwZSBIb21lU2VhcmNoUmVzdWx0LFxuXHR0eXBlIFRlbXBsYXRlRnJhZ21lbnQsXG5cdEJ1dHRvblN0eWxlXG59IGZyb20gXCJAb3BlbmZpbi93b3Jrc3BhY2VcIjtcbmltcG9ydCB0eXBlIHtcblx0RW50aXR5RGVwYXJ0bWVudCxcblx0RW50aXR5SXRlbSxcblx0RW50aXR5TWVtYmVyLFxuXHRFbnRpdHlPcmdhbml6YXRpb24sXG5cdFRyZWVJbmxpbmVTZXR0aW5nc1xufSBmcm9tIFwiLi9zaGFwZXNcIjtcblxuLyoqXG4gKiBJbXBsZW1lbnQgdGhlIHNvdXJjZSBmb3IgVHJlZSBzdHJ1Y3R1cmVkIGRhdGEuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmVlSW5saW5lU291cmNlIHtcblx0LyoqXG5cdCAqIFRoZSBrZXkgdG8gdXNlIGZvciBhIGRldGFpbHMgcmVzdWx0LlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9ERVRBSUxTX0FDVElPTiA9IFwiRGV0YWlsc1wiO1xuXG5cdC8qKlxuXHQgKiBUaGUga2V5IHRvIHVzZSBmb3IgYSBiYWNrIHJlc3VsdC5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIHN0YXRpYyByZWFkb25seSBfQkFDS19BQ1RJT04gPSBcIkJhY2tcIjtcblxuXHQvKipcblx0ICogVGhlIHNldHRpbmdzIGZvciB0aGUgc291cmNlLlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgX2RlZmluaXRpb246IHsgaWQ6IHN0cmluZzsgZGF0YT86IFRyZWVJbmxpbmVTZXR0aW5ncyB9IHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgb3JnYW5pemF0aW9uIGRhdGEuXG5cdCAqL1xuXHRwcml2YXRlIF9vcmdEYXRhPzogRW50aXR5T3JnYW5pemF0aW9uW107XG5cblx0LyoqXG5cdCAqIFRoZSBsYXN0IHJlc3VsdHM7XG5cdCAqL1xuXHRwcml2YXRlIF9sYXN0UmVzdWx0cz86IEhvbWVTZWFyY2hSZXN1bHRbXTtcblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZSB0aGUgbW9kdWxlLlxuXHQgKiBAcGFyYW0gZGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgbW9kdWxlIGZyb20gY29uZmlndXJhdGlvbiBpbmNsdWRlIGN1c3RvbSBvcHRpb25zLlxuXHQgKiBAcGFyYW0gZGVmaW5pdGlvbi5pZCBUaGUgaWQgZm9yIHRoZSBtb2R1bGUuXG5cdCAqIEBwYXJhbSBkZWZpbml0aW9uLmRhdGEgVGhlIGN1c3RvbSBkYXRhIGZvciB0aGUgbW9kdWxlLlxuXHQgKiBAcGFyYW0gbG9nZ2VyQ3JlYXRvciBGb3IgbG9nZ2luZyBlbnRyaWVzLlxuXHQgKiBAcmV0dXJucyBOb3RoaW5nLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGluaXRpYWxpemUoXG5cdFx0ZGVmaW5pdGlvbjogeyBpZDogc3RyaW5nOyBkYXRhPzogVHJlZUlubGluZVNldHRpbmdzIH0sXG5cdFx0bG9nZ2VyQ3JlYXRvcjogKCkgPT4gdm9pZFxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLl9kZWZpbml0aW9uID0gZGVmaW5pdGlvbjtcblxuXHRcdGNvbnN0IG9yZ1Jlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7ZGVmaW5pdGlvbi5kYXRhPy5yb290VXJsfW9yZ2FuaXphdGlvbnMtaW5saW5lLmpzb25gKTtcblx0XHR0aGlzLl9vcmdEYXRhID0gYXdhaXQgb3JnUmVzcG9uc2UuanNvbigpO1xuXHRcdHRoaXMuX2xhc3RSZXN1bHRzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGEgbGlzdCBvZiB0aGUgc3RhdGljIGhlbHAgZW50cmllcy5cblx0ICogQHJldHVybnMgVGhlIGxpc3Qgb2YgaGVscCBlbnRyaWVzLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGdldEhlbHBTZWFyY2hFbnRyaWVzKCk6IFByb21pc2U8SG9tZVNlYXJjaFJlc3VsdFtdPiB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0a2V5OiBgJHt0aGlzLl9kZWZpbml0aW9uPy5pZH0taGVscGAsXG5cdFx0XHRcdHRpdGxlOiBcIi90cmVlLWlubGluZVwiLFxuXHRcdFx0XHRsYWJlbDogXCJIZWxwXCIsXG5cdFx0XHRcdGFjdGlvbnM6IFtdLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0cHJvdmlkZXJJZDogdGhpcy5fZGVmaW5pdGlvbj8uaWRcblx0XHRcdFx0fSxcblx0XHRcdFx0dGVtcGxhdGU6IENMSVRlbXBsYXRlLkN1c3RvbSxcblx0XHRcdFx0dGVtcGxhdGVDb250ZW50OiB7XG5cdFx0XHRcdFx0bGF5b3V0OiB7XG5cdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0c3R5bGU6IHsgZGlzcGxheTogXCJmbGV4XCIsIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsIHBhZGRpbmc6IFwiMTBweFwiIH0sXG5cdFx0XHRcdFx0XHRjaGlsZHJlbjogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUtleTogXCJ0aXRsZVwiLFxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRmb250U2l6ZTogXCIxNnB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRmb250V2VpZ2h0OiBcImJvbGRcIixcblx0XHRcdFx0XHRcdFx0XHRcdG1hcmdpbkJvdHRvbTogXCIxMHB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRib3JkZXJCb3R0b206IFwiMXB4IHNvbGlkICM1MzU2NUZcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0eyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJkZXNjLTBcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBwYWRkaW5nOiBcIjZweCAwcHhcIiB9IH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5OiBcImZsZXhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRwYWRkaW5nOiBcIjEwcHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdG1hcmdpblRvcDogXCI2cHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCIjNTM1NjVGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRib3JkZXJSYWRpdXM6IFwiNXB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRvdmVyZmxvdzogXCJhdXRvXCJcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcImxpbmUtMFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIGZvbnRGYW1pbHk6IFwibW9ub3NwYWNlXCIsIHdoaXRlU3BhY2U6IFwibm93cmFwXCIgfVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0dGl0bGU6IFwiL3RyZWUtaW5saW5lXCIsXG5cdFx0XHRcdFx0XHRcImRlc2MtMFwiOiBcIlN0YXJ0IHR5cGluZyB0aGUgbmFtZSBvZiBhbiBvcmdhbml6YXRpb24gdG8gZmluZCB0aGUgZGF0YS5cIixcblx0XHRcdFx0XHRcdFwibGluZS0wXCI6IFwiZG9ja1wiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSBsaXN0IG9mIHNlYXJjaCByZXN1bHRzIGJhc2VkIG9uIHRoZSBxdWVyeSBhbmQgZmlsdGVycy5cblx0ICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSB0byBzZWFyY2ggZm9yLlxuXHQgKiBAcGFyYW0gZmlsdGVycyBUaGUgZmlsdGVycyB0byBhcHBseS5cblx0ICogQHBhcmFtIGxhc3RSZXNwb25zZSBUaGUgbGFzdCBzZWFyY2ggcmVzcG9uc2UgdXNlZCBmb3IgdXBkYXRpbmcgZXhpc3RpbmcgcmVzdWx0cy5cblx0ICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIGdldCBzZWFyY2ggcmVzdWx0cy5cblx0ICogQHBhcmFtIG9wdGlvbnMuaXNTdWdnZXN0aW9uIElzIHRoZSBxdWVyeSBhIHN1Z2dlc3Rpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHJlc3VsdHMgYW5kIG5ldyBmaWx0ZXJzLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGdldFNlYXJjaFJlc3VsdHMoXG5cdFx0cXVlcnk6IHN0cmluZyxcblx0XHRmaWx0ZXJzOiBDTElGaWx0ZXJbXSxcblx0XHRsYXN0UmVzcG9uc2U6IEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlLFxuXHRcdG9wdGlvbnM6IHtcblx0XHRcdGlzU3VnZ2VzdGlvbjogYm9vbGVhbjtcblx0XHR9XG5cdCk6IFByb21pc2U8SG9tZVNlYXJjaFJlc3BvbnNlPiB7XG5cdFx0dGhpcy5fbGFzdFJlc3VsdHMgPSBbXTtcblxuXHRcdGlmIChxdWVyeS5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBxdWVyeU9yZyA9IG5ldyBSZWdFeHAocXVlcnksIFwiaVwiKTtcblx0XHRcdGNvbnN0IG1hdGNoaW5nT3JnczogRW50aXR5T3JnYW5pemF0aW9uW10gfCB1bmRlZmluZWQgPSB0aGlzLl9vcmdEYXRhPy5maWx0ZXIoXG5cdFx0XHRcdChvKSA9PiBxdWVyeU9yZy50ZXN0KG8uaWQpIHx8IHF1ZXJ5T3JnLnRlc3Qoby5uYW1lKVxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKG1hdGNoaW5nT3Jncykge1xuXHRcdFx0XHR0aGlzLl9sYXN0UmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKG1hdGNoaW5nT3Jncy5tYXAoYXN5bmMgKG8pID0+IHRoaXMuY3JlYXRlUmVzdWx0KG8sIFtdKSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRyZXN1bHRzOiB0aGlzLl9sYXN0UmVzdWx0c1xuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQW4gZW50cnkgaGFzIGJlZW4gc2VsZWN0ZWQuXG5cdCAqIEBwYXJhbSByZXN1bHQgVGhlIGRpc3BhdGNoZWQgcmVzdWx0LlxuXHQgKiBAcGFyYW0gbGFzdFJlc3BvbnNlIFRoZSBsYXN0IHJlc3BvbnNlLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBpdGVtIHdhcyBoYW5kbGVkLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGl0ZW1TZWxlY3Rpb24oXG5cdFx0cmVzdWx0OiBIb21lRGlzcGF0Y2hlZFNlYXJjaFJlc3VsdCxcblx0XHRsYXN0UmVzcG9uc2U6IEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmIChyZXN1bHQuYWN0aW9uLnRyaWdnZXIgPT09IFwidXNlci1hY3Rpb25cIiAmJiByZXN1bHQuYWN0aW9uLm5hbWUgPT09IFRyZWVJbmxpbmVTb3VyY2UuX0RFVEFJTFNfQUNUSU9OKSB7XG5cdFx0XHRjb25zdCBlbnRpdHk6IEVudGl0eUl0ZW0gPSByZXN1bHQuZGF0YS5lbnRpdHk7XG5cblx0XHRcdGxldCByZXN1bHRzOiBIb21lU2VhcmNoUmVzdWx0W10gfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoZW50aXR5Py50eXBlID09PSBcIm9yZ2FuaXphdGlvblwiKSB7XG5cdFx0XHRcdGNvbnN0IG9yZyA9IGVudGl0eSBhcyBFbnRpdHlPcmdhbml6YXRpb247XG5cdFx0XHRcdHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRvcmcuZGVwYXJ0bWVudHMubWFwKGFzeW5jIChkKSA9PiB0aGlzLmNyZWF0ZVJlc3VsdChkLCB0aGlzLl9sYXN0UmVzdWx0cykpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKGVudGl0eT8udHlwZSA9PT0gXCJkZXBhcnRtZW50XCIpIHtcblx0XHRcdFx0Y29uc3QgZGVwID0gZW50aXR5IGFzIEVudGl0eURlcGFydG1lbnQ7XG5cdFx0XHRcdHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChkZXAubWVtYmVycy5tYXAoYXN5bmMgKG0pID0+IHRoaXMuY3JlYXRlUmVzdWx0KG0sIHRoaXMuX2xhc3RSZXN1bHRzKSkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmVzdWx0cykge1xuXHRcdFx0XHRpZiAodGhpcy5fbGFzdFJlc3VsdHMpIHtcblx0XHRcdFx0XHRsYXN0UmVzcG9uc2UucmV2b2tlKC4uLnRoaXMuX2xhc3RSZXN1bHRzLm1hcCgocikgPT4gci5rZXkpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsYXN0UmVzcG9uc2UucmVzcG9uZChyZXN1bHRzKTtcblx0XHRcdFx0dGhpcy5fbGFzdFJlc3VsdHMgPSByZXN1bHRzO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0cmVzdWx0LmFjdGlvbi50cmlnZ2VyID09PSBcInVzZXItYWN0aW9uXCIgJiZcblx0XHRcdHJlc3VsdC5hY3Rpb24ubmFtZSA9PT0gVHJlZUlubGluZVNvdXJjZS5fQkFDS19BQ1RJT05cblx0XHQpIHtcblx0XHRcdGNvbnN0IHBhcmVudFJlc3VsdHM6IEhvbWVTZWFyY2hSZXN1bHRbXSA9IHJlc3VsdC5kYXRhLnBhcmVudFJlc3VsdHM7XG5cblx0XHRcdGlmIChwYXJlbnRSZXN1bHRzKSB7XG5cdFx0XHRcdGlmICh0aGlzLl9sYXN0UmVzdWx0cykge1xuXHRcdFx0XHRcdGxhc3RSZXNwb25zZS5yZXZva2UoLi4udGhpcy5fbGFzdFJlc3VsdHMubWFwKChyKSA9PiByLmtleSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxhc3RSZXNwb25zZS5yZXNwb25kKHBhcmVudFJlc3VsdHMpO1xuXHRcdFx0XHR0aGlzLl9sYXN0UmVzdWx0cyA9IHBhcmVudFJlc3VsdHM7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIGEgc2VhcmNoIHJlc3VsdC5cblx0ICogQHBhcmFtIGVudGl0eSBUaGUgZW50aXR5IGZvciB0aGUgaXRlbS5cblx0ICogQHBhcmFtIHBhcmVudFJlc3VsdHMgVGhlIHBhcmVudCByZXN1bHRzLlxuXHQgKiBAcmV0dXJucyBUaGUgc2VhcmNoIHJlc3VsdC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgY3JlYXRlUmVzdWx0KFxuXHRcdGVudGl0eTogRW50aXR5SXRlbSxcblx0XHRwYXJlbnRSZXN1bHRzPzogSG9tZVNlYXJjaFJlc3VsdFtdXG5cdCk6IFByb21pc2U8SG9tZVNlYXJjaFJlc3VsdD4ge1xuXHRcdGNvbnN0IGRhdGE6IHsgW2lkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcblx0XHRcdHRpdGxlOiBlbnRpdHkubmFtZSxcblx0XHRcdG5hdmlnYXRlQmFja0FjdGlvbjogXCJCYWNrXCJcblx0XHR9O1xuXG5cdFx0Y29uc3QgY2hpbGRyZW46IFRlbXBsYXRlRnJhZ21lbnRbXSA9IFtcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdGRhdGFLZXk6IFwidGl0bGVcIixcblx0XHRcdFx0c3R5bGU6IHtcblx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0Zm9udFNpemU6IFwiMTZweFwiLFxuXHRcdFx0XHRcdGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuXHRcdFx0XHRcdG1hcmdpbkJvdHRvbTogXCIxMHB4XCIsXG5cdFx0XHRcdFx0Ym9yZGVyQm90dG9tOiBcIjFweCBzb2xpZCAjNTM1NjVGXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF07XG5cblx0XHRjb25zdCBtYWluQ29udGVudDogVGVtcGxhdGVGcmFnbWVudFtdID0gW107XG5cdFx0aWYgKGVudGl0eS50eXBlID09PSBcIm9yZ2FuaXphdGlvblwiKSB7XG5cdFx0XHRtYWluQ29udGVudC5wdXNoKHsgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwiY2hpbGRDb3VudFwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxNHB4XCIgfSB9KTtcblx0XHRcdGRhdGEuY2hpbGRDb3VudCA9IGBEZXBhcnRtZW50czogJHsoZW50aXR5IGFzIEVudGl0eU9yZ2FuaXphdGlvbikuZGVwYXJ0bWVudHMubGVuZ3RoLnRvU3RyaW5nKCl9YDtcblx0XHRcdGRhdGEubmF2aWdhdGVBY3Rpb24gPSBcIkRlcGFydG1lbnRzXCI7XG5cdFx0XHRkZWxldGUgZGF0YS5uYXZpZ2F0ZUJhY2tBY3Rpb247XG5cdFx0fSBlbHNlIGlmIChlbnRpdHkudHlwZSA9PT0gXCJkZXBhcnRtZW50XCIpIHtcblx0XHRcdG1haW5Db250ZW50LnB1c2goeyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJjaGlsZENvdW50XCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjE0cHhcIiB9IH0pO1xuXHRcdFx0ZGF0YS5jaGlsZENvdW50ID0gYE1lbWJlcnM6ICR7KGVudGl0eSBhcyBFbnRpdHlEZXBhcnRtZW50KS5tZW1iZXJzLmxlbmd0aC50b1N0cmluZygpfWA7XG5cdFx0XHRkYXRhLm5hdmlnYXRlQWN0aW9uID0gXCJNZW1iZXJzXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGEucm9sZSA9IGBSb2xlOiAkeyhlbnRpdHkgYXMgRW50aXR5TWVtYmVyKS5yb2xlfWA7XG5cdFx0XHRtYWluQ29udGVudC5wdXNoKHsgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwicm9sZVwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxNHB4XCIgfSB9KTtcblx0XHR9XG5cblx0XHRjaGlsZHJlbi5wdXNoKHtcblx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRzdHlsZTogeyBkaXNwbGF5OiBcImZsZXhcIiwgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIiwgZmxleDogMSB9LFxuXHRcdFx0Y2hpbGRyZW46IG1haW5Db250ZW50XG5cdFx0fSk7XG5cblx0XHRjb25zdCBidXR0b25zOiBUZW1wbGF0ZUZyYWdtZW50W10gPSBbXTtcblx0XHRpZiAoZGF0YS5uYXZpZ2F0ZUJhY2tBY3Rpb24pIHtcblx0XHRcdGJ1dHRvbnMucHVzaCh7XG5cdFx0XHRcdHR5cGU6IFwiQnV0dG9uXCIsXG5cdFx0XHRcdGJ1dHRvblN0eWxlOiBCdXR0b25TdHlsZS5QcmltYXJ5LFxuXHRcdFx0XHRjaGlsZHJlbjogW3sgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwibmF2aWdhdGVCYWNrQWN0aW9uXCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiB9IH1dLFxuXHRcdFx0XHRhY3Rpb246IFRyZWVJbmxpbmVTb3VyY2UuX0JBQ0tfQUNUSU9OLFxuXHRcdFx0XHRzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIgfVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKGRhdGEubmF2aWdhdGVBY3Rpb24pIHtcblx0XHRcdGJ1dHRvbnMucHVzaCh7XG5cdFx0XHRcdHR5cGU6IFwiQnV0dG9uXCIsXG5cdFx0XHRcdGJ1dHRvblN0eWxlOiBCdXR0b25TdHlsZS5QcmltYXJ5LFxuXHRcdFx0XHRjaGlsZHJlbjogW3sgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwibmF2aWdhdGVBY3Rpb25cIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiIH0gfV0sXG5cdFx0XHRcdGFjdGlvbjogVHJlZUlubGluZVNvdXJjZS5fREVUQUlMU19BQ1RJT04sXG5cdFx0XHRcdHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiB9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRjaGlsZHJlbi5wdXNoKHtcblx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRzdHlsZTogeyBkaXNwbGF5OiBcImZsZXhcIiwgZmxleERpcmVjdGlvbjogXCJyb3dcIiwganVzdGlmeUNvbnRlbnQ6IFwiZmxleC1lbmRcIiwgZ2FwOiBcIjEwcHhcIiB9LFxuXHRcdFx0Y2hpbGRyZW46IGJ1dHRvbnNcblx0XHR9KTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRrZXk6IGB0cmVlLSR7ZW50aXR5LmlkfWAsXG5cdFx0XHR0aXRsZTogZW50aXR5Lm5hbWUsXG5cdFx0XHRsYWJlbDogZW50aXR5LnR5cGUsXG5cdFx0XHRhY3Rpb25zOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBUcmVlSW5saW5lU291cmNlLl9ERVRBSUxTX0FDVElPTixcblx0XHRcdFx0XHRob3RrZXk6IFwiRW50ZXJcIlxuXHRcdFx0XHR9XG5cdFx0XHRdLFxuXHRcdFx0ZGF0YToge1xuXHRcdFx0XHRwcm92aWRlcklkOiB0aGlzLl9kZWZpbml0aW9uPy5pZCxcblx0XHRcdFx0ZW50aXR5LFxuXHRcdFx0XHRwYXJlbnRSZXN1bHRzXG5cdFx0XHR9LFxuXHRcdFx0dGVtcGxhdGU6IENMSVRlbXBsYXRlLkN1c3RvbSxcblx0XHRcdHRlbXBsYXRlQ29udGVudDoge1xuXHRcdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdHN0eWxlOiB7IGRpc3BsYXk6IFwiZmxleFwiLCBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLCBmbGV4OiAxLCBwYWRkaW5nOiBcIjEwcHhcIiB9LFxuXHRcdFx0XHRcdGNoaWxkcmVuXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGRhdGFcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59XG4iLCJpbXBvcnQge1xuXHRDTElUZW1wbGF0ZSxcblx0dHlwZSBDTElGaWx0ZXIsXG5cdHR5cGUgSG9tZURpc3BhdGNoZWRTZWFyY2hSZXN1bHQsXG5cdHR5cGUgSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2UsXG5cdHR5cGUgSG9tZVNlYXJjaFJlc3BvbnNlLFxuXHR0eXBlIEhvbWVTZWFyY2hSZXN1bHQsXG5cdHR5cGUgVGVtcGxhdGVGcmFnbWVudCxcblx0QnV0dG9uU3R5bGVcbn0gZnJvbSBcIkBvcGVuZmluL3dvcmtzcGFjZVwiO1xuaW1wb3J0IHR5cGUge1xuXHRFbnRpdHlEZXBhcnRtZW50LFxuXHRFbnRpdHlJdGVtLFxuXHRFbnRpdHlNZW1iZXIsXG5cdEVudGl0eU9yZ2FuaXphdGlvbixcblx0VHJlZVF1ZXJ5U2V0dGluZ3Ncbn0gZnJvbSBcIi4vc2hhcGVzXCI7XG5cbi8qKlxuICogSW1wbGVtZW50IHRoZSBzb3VyY2UgZm9yIFRyZWUgc3RydWN0dXJlZCBkYXRhLlxuICovXG5leHBvcnQgY2xhc3MgVHJlZVF1ZXJ5U291cmNlIHtcblx0LyoqXG5cdCAqIFRoZSBrZXkgdG8gdXNlIGZvciBhIGRldGFpbHMgcmVzdWx0LlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9ERVRBSUxTX0FDVElPTiA9IFwiRGV0YWlsc1wiO1xuXG5cdC8qKlxuXHQgKiBUaGUga2V5IHRvIHVzZSBmb3IgYSBiYWNrIHJlc3VsdC5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIHN0YXRpYyByZWFkb25seSBfQkFDS19BQ1RJT04gPSBcIkJhY2tcIjtcblxuXHQvKipcblx0ICogVGhlIGhlbHBlcnMgZm9yIHRoZSBzb3VyY2UuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJpdmF0ZSBfaGVscGVyczogeyBzZXRTZWFyY2hRdWVyeTogKHF1ZXJ5OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD4gfSB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogVGhlIHNldHRpbmdzIGZvciB0aGUgc291cmNlLlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgX2RlZmluaXRpb246IHsgaWQ6IHN0cmluZzsgZGF0YT86IFRyZWVRdWVyeVNldHRpbmdzIH0gfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFRoZSBvcmdhbml6YXRpb24gZGF0YS5cblx0ICovXG5cdHByaXZhdGUgX29yZ0RhdGE/OiBFbnRpdHlPcmdhbml6YXRpb25bXTtcblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZSB0aGUgbW9kdWxlLlxuXHQgKiBAcGFyYW0gZGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgbW9kdWxlIGZyb20gY29uZmlndXJhdGlvbiBpbmNsdWRlIGN1c3RvbSBvcHRpb25zLlxuXHQgKiBAcGFyYW0gZGVmaW5pdGlvbi5pZCBUaGUgaWQgZm9yIHRoZSBtb2R1bGUuXG5cdCAqIEBwYXJhbSBkZWZpbml0aW9uLmRhdGEgVGhlIGN1c3RvbSBkYXRhIGZvciB0aGUgbW9kdWxlLlxuXHQgKiBAcGFyYW0gbG9nZ2VyQ3JlYXRvciBGb3IgbG9nZ2luZyBlbnRyaWVzLlxuXHQgKiBAcGFyYW0gaGVscGVycyBIZWxwZXIgbWV0aG9kcyBmb3IgdGhlIG1vZHVsZSB0byBpbnRlcmFjdCB3aXRoIHRoZSBhcHBsaWNhdGlvbiBjb3JlLlxuXHQgKiBAcGFyYW0gaGVscGVycy5zZXRTZWFyY2hRdWVyeSBNZXRob2QgZm9yIHJlcG9wdWxhdGluZyB0aGUgc2VhcmNoIHF1ZXJ5LlxuXHQgKiBAcmV0dXJucyBOb3RoaW5nLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGluaXRpYWxpemUoXG5cdFx0ZGVmaW5pdGlvbjogeyBpZDogc3RyaW5nOyBkYXRhPzogVHJlZVF1ZXJ5U2V0dGluZ3MgfSxcblx0XHRsb2dnZXJDcmVhdG9yOiAoKSA9PiB2b2lkLFxuXHRcdGhlbHBlcnM6IHtcblx0XHRcdHNldFNlYXJjaFF1ZXJ5OiAocXVlcnk6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcblx0XHR9XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRoaXMuX2RlZmluaXRpb24gPSBkZWZpbml0aW9uO1xuXHRcdHRoaXMuX2hlbHBlcnMgPSBoZWxwZXJzO1xuXG5cdFx0Y29uc3Qgb3JnUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtkZWZpbml0aW9uLmRhdGE/LnJvb3RVcmx9b3JnYW5pemF0aW9ucy1xdWVyeS5qc29uYCk7XG5cdFx0dGhpcy5fb3JnRGF0YSA9IGF3YWl0IG9yZ1Jlc3BvbnNlLmpzb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSBsaXN0IG9mIHRoZSBzdGF0aWMgaGVscCBlbnRyaWVzLlxuXHQgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBoZWxwIGVudHJpZXMuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0SGVscFNlYXJjaEVudHJpZXMoKTogUHJvbWlzZTxIb21lU2VhcmNoUmVzdWx0W10+IHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRrZXk6IGAke3RoaXMuX2RlZmluaXRpb24/LmlkfS1oZWxwYCxcblx0XHRcdFx0dGl0bGU6IFwiL3RyZWUtcXVlcnlcIixcblx0XHRcdFx0bGFiZWw6IFwiSGVscFwiLFxuXHRcdFx0XHRhY3Rpb25zOiBbXSxcblx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdHByb3ZpZGVySWQ6IHRoaXMuX2RlZmluaXRpb24/LmlkXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbXBsYXRlOiBDTElUZW1wbGF0ZS5DdXN0b20sXG5cdFx0XHRcdHRlbXBsYXRlQ29udGVudDoge1xuXHRcdFx0XHRcdGxheW91dDoge1xuXHRcdFx0XHRcdFx0dHlwZTogXCJDb250YWluZXJcIixcblx0XHRcdFx0XHRcdHN0eWxlOiB7IGRpc3BsYXk6IFwiZmxleFwiLCBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLCBwYWRkaW5nOiBcIjEwcHhcIiB9LFxuXHRcdFx0XHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwidGl0bGVcIixcblx0XHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29sb3I6IFwiI0ZGRkZGRlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9udFNpemU6IFwiMTZweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9udFdlaWdodDogXCJib2xkXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXJnaW5Cb3R0b206IFwiMTBweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Ym9yZGVyQm90dG9tOiBcIjFweCBzb2xpZCAjNTM1NjVGXCJcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHsgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwiZGVzYy0wXCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiwgcGFkZGluZzogXCI2cHggMHB4XCIgfSB9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJDb250YWluZXJcIixcblx0XHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGlzcGxheTogXCJmbGV4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0cGFkZGluZzogXCIxMHB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXJnaW5Ub3A6IFwiNnB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IFwiIzUzNTY1RlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sb3I6IFwiI0ZGRkZGRlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Ym9yZGVyUmFkaXVzOiBcIjVweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0b3ZlcmZsb3c6IFwiYXV0b1wiXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbjogW1xuXHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIlRleHRcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YUtleTogXCJsaW5lLTBcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBmb250RmFtaWx5OiBcIm1vbm9zcGFjZVwiLCB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwiIH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRcdHRpdGxlOiBcIi90cmVlLXF1ZXJ5XCIsXG5cdFx0XHRcdFx0XHRcImRlc2MtMFwiOiBcIlN0YXJ0IHR5cGluZyB0aGUgbmFtZSBvZiBhbiBvcmdhbml6YXRpb24gdG8gZmluZCB0aGUgZGF0YS5cIixcblx0XHRcdFx0XHRcdFwibGluZS0wXCI6IFwiYWNtZVwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSBsaXN0IG9mIHNlYXJjaCByZXN1bHRzIGJhc2VkIG9uIHRoZSBxdWVyeSBhbmQgZmlsdGVycy5cblx0ICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSB0byBzZWFyY2ggZm9yLlxuXHQgKiBAcGFyYW0gZmlsdGVycyBUaGUgZmlsdGVycyB0byBhcHBseS5cblx0ICogQHBhcmFtIGxhc3RSZXNwb25zZSBUaGUgbGFzdCBzZWFyY2ggcmVzcG9uc2UgdXNlZCBmb3IgdXBkYXRpbmcgZXhpc3RpbmcgcmVzdWx0cy5cblx0ICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIGdldCBzZWFyY2ggcmVzdWx0cy5cblx0ICogQHBhcmFtIG9wdGlvbnMuaXNTdWdnZXN0aW9uIElzIHRoZSBxdWVyeSBhIHN1Z2dlc3Rpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHJlc3VsdHMgYW5kIG5ldyBmaWx0ZXJzLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGdldFNlYXJjaFJlc3VsdHMoXG5cdFx0cXVlcnk6IHN0cmluZyxcblx0XHRmaWx0ZXJzOiBDTElGaWx0ZXJbXSxcblx0XHRsYXN0UmVzcG9uc2U6IEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlLFxuXHRcdG9wdGlvbnM6IHtcblx0XHRcdGlzU3VnZ2VzdGlvbjogYm9vbGVhbjtcblx0XHR9XG5cdCk6IFByb21pc2U8SG9tZVNlYXJjaFJlc3BvbnNlPiB7XG5cdFx0bGV0IHJlc3VsdHM6IEhvbWVTZWFyY2hSZXN1bHRbXSA9IFtdO1xuXG5cdFx0aWYgKHF1ZXJ5Lmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IHBhcnRzID0gcXVlcnkuc3BsaXQoXCIvXCIpO1xuXG5cdFx0XHRjb25zdCBxdWVyeU9yZyA9IG5ldyBSZWdFeHAocGFydHNbMF0sIFwiaVwiKTtcblx0XHRcdGNvbnN0IG1hdGNoaW5nT3JnczogRW50aXR5T3JnYW5pemF0aW9uW10gfCB1bmRlZmluZWQgPSB0aGlzLl9vcmdEYXRhPy5maWx0ZXIoXG5cdFx0XHRcdChvKSA9PiBxdWVyeU9yZy50ZXN0KG8uaWQpIHx8IHF1ZXJ5T3JnLnRlc3Qoby5uYW1lKVxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKG1hdGNoaW5nT3Jncykge1xuXHRcdFx0XHRpZiAocGFydHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0cmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKG1hdGNoaW5nT3Jncy5tYXAoYXN5bmMgKG8pID0+IHRoaXMuY3JlYXRlUmVzdWx0KG8sIFtvLm5hbWUsIFwiXCJdLCBcIlwiKSkpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHBhcnRzLmxlbmd0aCA+PSAyKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IHF1ZXJ5RGVwID0gbmV3IFJlZ0V4cChwYXJ0c1sxXSwgXCJpXCIpO1xuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBvcmcgb2YgbWF0Y2hpbmdPcmdzKSB7XG5cdFx0XHRcdFx0XHRcdGxldCBkZXBzOiBFbnRpdHlEZXBhcnRtZW50W10gPSBvcmcuZGVwYXJ0bWVudHM7XG5cdFx0XHRcdFx0XHRcdGlmIChwYXJ0c1sxXS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGVwcyA9IGRlcHMuZmlsdGVyKChkKSA9PiBxdWVyeURlcC50ZXN0KGQuaWQpIHx8IHF1ZXJ5RGVwLnRlc3QoZC5uYW1lKSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAocGFydHMubGVuZ3RoID09PSAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KFxuXHRcdFx0XHRcdFx0XHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlcHMubWFwKGFzeW5jIChkKSA9PiB0aGlzLmNyZWF0ZVJlc3VsdChkLCBbb3JnLm5hbWUsIGQubmFtZSwgXCJcIl0sIG9yZy5uYW1lKSlcblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHF1ZXJ5TWVtID0gbmV3IFJlZ0V4cChwYXJ0c1syXSwgXCJpXCIpO1xuXG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBkZXAgb2YgZGVwcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IG1lbXM6IEVudGl0eU1lbWJlcltdID0gZGVwLm1lbWJlcnM7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocGFydHNbMl0ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRtZW1zID0gbWVtcy5maWx0ZXIoKG0pID0+IHF1ZXJ5TWVtLnRlc3QobS5pZCkgfHwgcXVlcnlNZW0udGVzdChtLm5hbWUpKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZW1zLm1hcChhc3luYyAobSkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuY3JlYXRlUmVzdWx0KG0sIFtvcmcubmFtZSwgZGVwLm5hbWUsIG0ubmFtZV0sIGAke29yZy5uYW1lfS9gKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0cmVzdWx0c1xuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQW4gZW50cnkgaGFzIGJlZW4gc2VsZWN0ZWQuXG5cdCAqIEBwYXJhbSByZXN1bHQgVGhlIGRpc3BhdGNoZWQgcmVzdWx0LlxuXHQgKiBAcGFyYW0gbGFzdFJlc3BvbnNlIFRoZSBsYXN0IHJlc3BvbnNlLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBpdGVtIHdhcyBoYW5kbGVkLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGl0ZW1TZWxlY3Rpb24oXG5cdFx0cmVzdWx0OiBIb21lRGlzcGF0Y2hlZFNlYXJjaFJlc3VsdCxcblx0XHRsYXN0UmVzcG9uc2U6IEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmIChcblx0XHRcdHJlc3VsdC5hY3Rpb24udHJpZ2dlciA9PT0gXCJ1c2VyLWFjdGlvblwiICYmXG5cdFx0XHRyZXN1bHQuYWN0aW9uLm5hbWUgPT09IFRyZWVRdWVyeVNvdXJjZS5fREVUQUlMU19BQ1RJT04gJiZcblx0XHRcdHRoaXMuX2hlbHBlcnM/LnNldFNlYXJjaFF1ZXJ5XG5cdFx0KSB7XG5cdFx0XHRjb25zdCBwYXRoOiBzdHJpbmdbXSA9IHJlc3VsdC5kYXRhLnBhdGg7XG5cblx0XHRcdGF3YWl0IHRoaXMuX2hlbHBlcnMuc2V0U2VhcmNoUXVlcnkocGF0aC5qb2luKFwiL1wiKSk7XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRyZXN1bHQuYWN0aW9uLnRyaWdnZXIgPT09IFwidXNlci1hY3Rpb25cIiAmJlxuXHRcdFx0cmVzdWx0LmFjdGlvbi5uYW1lID09PSBUcmVlUXVlcnlTb3VyY2UuX0JBQ0tfQUNUSU9OICYmXG5cdFx0XHR0aGlzLl9oZWxwZXJzPy5zZXRTZWFyY2hRdWVyeVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgcXVlcnk6IHN0cmluZyA9IHJlc3VsdC5kYXRhLnF1ZXJ5O1xuXG5cdFx0XHRhd2FpdCB0aGlzLl9oZWxwZXJzLnNldFNlYXJjaFF1ZXJ5KHF1ZXJ5KTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYSBzZWFyY2ggcmVzdWx0LlxuXHQgKiBAcGFyYW0gZW50aXR5IFRoZSBlbnRpdHkgZm9yIHRoZSBpdGVtLlxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBpdGVtLlxuXHQgKiBAcGFyYW0gcXVlcnkgVGhlIG9yaWdpbmFsIHF1ZXJ5LlxuXHQgKiBAcmV0dXJucyBUaGUgc2VhcmNoIHJlc3VsdC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgY3JlYXRlUmVzdWx0KGVudGl0eTogRW50aXR5SXRlbSwgcGF0aDogc3RyaW5nW10sIHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPEhvbWVTZWFyY2hSZXN1bHQ+IHtcblx0XHRjb25zdCBkYXRhOiB7IFtpZDogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG5cdFx0XHR0aXRsZTogZW50aXR5Lm5hbWUsXG5cdFx0XHRuYXZpZ2F0ZUJhY2tBY3Rpb246IFwiQmFja1wiXG5cdFx0fTtcblxuXHRcdGNvbnN0IGNoaWxkcmVuOiBUZW1wbGF0ZUZyYWdtZW50W10gPSBbXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRkYXRhS2V5OiBcInRpdGxlXCIsXG5cdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0Y29sb3I6IFwiI0ZGRkZGRlwiLFxuXHRcdFx0XHRcdGZvbnRTaXplOiBcIjE2cHhcIixcblx0XHRcdFx0XHRmb250V2VpZ2h0OiBcImJvbGRcIixcblx0XHRcdFx0XHRtYXJnaW5Cb3R0b206IFwiMTBweFwiLFxuXHRcdFx0XHRcdGJvcmRlckJvdHRvbTogXCIxcHggc29saWQgIzUzNTY1RlwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdO1xuXG5cdFx0Y29uc3QgbWFpbkNvbnRlbnQ6IFRlbXBsYXRlRnJhZ21lbnRbXSA9IFtdO1xuXHRcdGlmIChlbnRpdHkudHlwZSA9PT0gXCJvcmdhbml6YXRpb25cIikge1xuXHRcdFx0bWFpbkNvbnRlbnQucHVzaCh7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcImNoaWxkQ291bnRcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTRweFwiIH0gfSk7XG5cdFx0XHRkYXRhLmNoaWxkQ291bnQgPSBgRGVwYXJ0bWVudHM6ICR7KGVudGl0eSBhcyBFbnRpdHlPcmdhbml6YXRpb24pLmRlcGFydG1lbnRzLmxlbmd0aC50b1N0cmluZygpfWA7XG5cdFx0XHRkYXRhLm5hdmlnYXRlQWN0aW9uID0gXCJEZXBhcnRtZW50c1wiO1xuXHRcdFx0ZGVsZXRlIGRhdGEubmF2aWdhdGVCYWNrQWN0aW9uO1xuXHRcdH0gZWxzZSBpZiAoZW50aXR5LnR5cGUgPT09IFwiZGVwYXJ0bWVudFwiKSB7XG5cdFx0XHRtYWluQ29udGVudC5wdXNoKHsgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwiY2hpbGRDb3VudFwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxNHB4XCIgfSB9KTtcblx0XHRcdGRhdGEuY2hpbGRDb3VudCA9IGBNZW1iZXJzOiAkeyhlbnRpdHkgYXMgRW50aXR5RGVwYXJ0bWVudCkubWVtYmVycy5sZW5ndGgudG9TdHJpbmcoKX1gO1xuXHRcdFx0ZGF0YS5uYXZpZ2F0ZUFjdGlvbiA9IFwiTWVtYmVyc1wiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhLnJvbGUgPSBgUm9sZTogJHsoZW50aXR5IGFzIEVudGl0eU1lbWJlcikucm9sZX1gO1xuXHRcdFx0bWFpbkNvbnRlbnQucHVzaCh7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcInJvbGVcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTRweFwiIH0gfSk7XG5cdFx0fVxuXG5cdFx0Y2hpbGRyZW4ucHVzaCh7XG5cdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0c3R5bGU6IHsgZGlzcGxheTogXCJmbGV4XCIsIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsIGZsZXg6IDEgfSxcblx0XHRcdGNoaWxkcmVuOiBtYWluQ29udGVudFxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgYnV0dG9uczogVGVtcGxhdGVGcmFnbWVudFtdID0gW107XG5cdFx0aWYgKGRhdGEubmF2aWdhdGVCYWNrQWN0aW9uKSB7XG5cdFx0XHRidXR0b25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBcIkJ1dHRvblwiLFxuXHRcdFx0XHRidXR0b25TdHlsZTogQnV0dG9uU3R5bGUuUHJpbWFyeSxcblx0XHRcdFx0Y2hpbGRyZW46IFt7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcIm5hdmlnYXRlQmFja0FjdGlvblwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIgfSB9XSxcblx0XHRcdFx0YWN0aW9uOiBUcmVlUXVlcnlTb3VyY2UuX0JBQ0tfQUNUSU9OLFxuXHRcdFx0XHRzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIgfVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKGRhdGEubmF2aWdhdGVBY3Rpb24pIHtcblx0XHRcdGJ1dHRvbnMucHVzaCh7XG5cdFx0XHRcdHR5cGU6IFwiQnV0dG9uXCIsXG5cdFx0XHRcdGJ1dHRvblN0eWxlOiBCdXR0b25TdHlsZS5QcmltYXJ5LFxuXHRcdFx0XHRjaGlsZHJlbjogW3sgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwibmF2aWdhdGVBY3Rpb25cIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiIH0gfV0sXG5cdFx0XHRcdGFjdGlvbjogVHJlZVF1ZXJ5U291cmNlLl9ERVRBSUxTX0FDVElPTixcblx0XHRcdFx0c3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiIH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGNoaWxkcmVuLnB1c2goe1xuXHRcdFx0dHlwZTogXCJDb250YWluZXJcIixcblx0XHRcdHN0eWxlOiB7IGRpc3BsYXk6IFwiZmxleFwiLCBmbGV4RGlyZWN0aW9uOiBcInJvd1wiLCBqdXN0aWZ5Q29udGVudDogXCJmbGV4LWVuZFwiLCBnYXA6IFwiMTBweFwiIH0sXG5cdFx0XHRjaGlsZHJlbjogYnV0dG9uc1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGtleTogYHRyZWUtJHtlbnRpdHkuaWR9YCxcblx0XHRcdHRpdGxlOiBlbnRpdHkubmFtZSxcblx0XHRcdGxhYmVsOiBlbnRpdHkudHlwZSxcblx0XHRcdGFjdGlvbnM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IFRyZWVRdWVyeVNvdXJjZS5fREVUQUlMU19BQ1RJT04sXG5cdFx0XHRcdFx0aG90a2V5OiBcIkVudGVyXCJcblx0XHRcdFx0fVxuXHRcdFx0XSxcblx0XHRcdGRhdGE6IHtcblx0XHRcdFx0cHJvdmlkZXJJZDogdGhpcy5fZGVmaW5pdGlvbj8uaWQsXG5cdFx0XHRcdGVudGl0eSxcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0cXVlcnlcblx0XHRcdH0sXG5cdFx0XHR0ZW1wbGF0ZTogQ0xJVGVtcGxhdGUuQ3VzdG9tLFxuXHRcdFx0dGVtcGxhdGVDb250ZW50OiB7XG5cdFx0XHRcdGxheW91dDoge1xuXHRcdFx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRcdFx0c3R5bGU6IHsgZGlzcGxheTogXCJmbGV4XCIsIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsIGZsZXg6IFwiMVwiLCBwYWRkaW5nOiBcIjEwcHhcIiB9LFxuXHRcdFx0XHRcdGNoaWxkcmVuXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGRhdGFcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59XG4iLCIvKiFcbiAqIEBrdXJrbGUvY29sb3IgdjAuMy4yXG4gKiBodHRwczovL2dpdGh1Yi5jb20va3Vya2xlL2NvbG9yI3JlYWRtZVxuICogKGMpIDIwMjMgSnVra2EgS3Vya2VsYVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlXG4gKi9cbmZ1bmN0aW9uIHJvdW5kKHYpIHtcbiAgcmV0dXJuIHYgKyAwLjUgfCAwO1xufVxuY29uc3QgbGltID0gKHYsIGwsIGgpID0+IE1hdGgubWF4KE1hdGgubWluKHYsIGgpLCBsKTtcbmZ1bmN0aW9uIHAyYih2KSB7XG4gIHJldHVybiBsaW0ocm91bmQodiAqIDIuNTUpLCAwLCAyNTUpO1xufVxuZnVuY3Rpb24gYjJwKHYpIHtcbiAgcmV0dXJuIGxpbShyb3VuZCh2IC8gMi41NSksIDAsIDEwMCk7XG59XG5mdW5jdGlvbiBuMmIodikge1xuICByZXR1cm4gbGltKHJvdW5kKHYgKiAyNTUpLCAwLCAyNTUpO1xufVxuZnVuY3Rpb24gYjJuKHYpIHtcbiAgcmV0dXJuIGxpbShyb3VuZCh2IC8gMi41NSkgLyAxMDAsIDAsIDEpO1xufVxuZnVuY3Rpb24gbjJwKHYpIHtcbiAgcmV0dXJuIGxpbShyb3VuZCh2ICogMTAwKSwgMCwgMTAwKTtcbn1cblxuY29uc3QgbWFwJDEgPSB7MDogMCwgMTogMSwgMjogMiwgMzogMywgNDogNCwgNTogNSwgNjogNiwgNzogNywgODogOCwgOTogOSwgQTogMTAsIEI6IDExLCBDOiAxMiwgRDogMTMsIEU6IDE0LCBGOiAxNSwgYTogMTAsIGI6IDExLCBjOiAxMiwgZDogMTMsIGU6IDE0LCBmOiAxNX07XG5jb25zdCBoZXggPSBbLi4uJzAxMjM0NTY3ODlBQkNERUYnXTtcbmNvbnN0IGgxID0gYiA9PiBoZXhbYiAmIDB4Rl07XG5jb25zdCBoMiA9IGIgPT4gaGV4WyhiICYgMHhGMCkgPj4gNF0gKyBoZXhbYiAmIDB4Rl07XG5jb25zdCBlcSA9IGIgPT4gKChiICYgMHhGMCkgPj4gNCkgPT09IChiICYgMHhGKTtcbmNvbnN0IGlzU2hvcnQgPSB2ID0+IGVxKHYucikgJiYgZXEodi5nKSAmJiBlcSh2LmIpICYmIGVxKHYuYSk7XG5mdW5jdGlvbiBoZXhQYXJzZShzdHIpIHtcbiAgdmFyIGxlbiA9IHN0ci5sZW5ndGg7XG4gIHZhciByZXQ7XG4gIGlmIChzdHJbMF0gPT09ICcjJykge1xuICAgIGlmIChsZW4gPT09IDQgfHwgbGVuID09PSA1KSB7XG4gICAgICByZXQgPSB7XG4gICAgICAgIHI6IDI1NSAmIG1hcCQxW3N0clsxXV0gKiAxNyxcbiAgICAgICAgZzogMjU1ICYgbWFwJDFbc3RyWzJdXSAqIDE3LFxuICAgICAgICBiOiAyNTUgJiBtYXAkMVtzdHJbM11dICogMTcsXG4gICAgICAgIGE6IGxlbiA9PT0gNSA/IG1hcCQxW3N0cls0XV0gKiAxNyA6IDI1NVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGxlbiA9PT0gNyB8fCBsZW4gPT09IDkpIHtcbiAgICAgIHJldCA9IHtcbiAgICAgICAgcjogbWFwJDFbc3RyWzFdXSA8PCA0IHwgbWFwJDFbc3RyWzJdXSxcbiAgICAgICAgZzogbWFwJDFbc3RyWzNdXSA8PCA0IHwgbWFwJDFbc3RyWzRdXSxcbiAgICAgICAgYjogbWFwJDFbc3RyWzVdXSA8PCA0IHwgbWFwJDFbc3RyWzZdXSxcbiAgICAgICAgYTogbGVuID09PSA5ID8gKG1hcCQxW3N0cls3XV0gPDwgNCB8IG1hcCQxW3N0cls4XV0pIDogMjU1XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuY29uc3QgYWxwaGEgPSAoYSwgZikgPT4gYSA8IDI1NSA/IGYoYSkgOiAnJztcbmZ1bmN0aW9uIGhleFN0cmluZyh2KSB7XG4gIHZhciBmID0gaXNTaG9ydCh2KSA/IGgxIDogaDI7XG4gIHJldHVybiB2XG4gICAgPyAnIycgKyBmKHYucikgKyBmKHYuZykgKyBmKHYuYikgKyBhbHBoYSh2LmEsIGYpXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IEhVRV9SRSA9IC9eKGhzbGE/fGh3Ynxoc3YpXFwoXFxzKihbLSsuZVxcZF0rKSg/OmRlZyk/W1xccyxdKyhbLSsuZVxcZF0rKSVbXFxzLF0rKFstKy5lXFxkXSspJSg/OltcXHMsXSsoWy0rLmVcXGRdKykoJSk/KT9cXHMqXFwpJC87XG5mdW5jdGlvbiBoc2wycmdibihoLCBzLCBsKSB7XG4gIGNvbnN0IGEgPSBzICogTWF0aC5taW4obCwgMSAtIGwpO1xuICBjb25zdCBmID0gKG4sIGsgPSAobiArIGggLyAzMCkgJSAxMikgPT4gbCAtIGEgKiBNYXRoLm1heChNYXRoLm1pbihrIC0gMywgOSAtIGssIDEpLCAtMSk7XG4gIHJldHVybiBbZigwKSwgZig4KSwgZig0KV07XG59XG5mdW5jdGlvbiBoc3YycmdibihoLCBzLCB2KSB7XG4gIGNvbnN0IGYgPSAobiwgayA9IChuICsgaCAvIDYwKSAlIDYpID0+IHYgLSB2ICogcyAqIE1hdGgubWF4KE1hdGgubWluKGssIDQgLSBrLCAxKSwgMCk7XG4gIHJldHVybiBbZig1KSwgZigzKSwgZigxKV07XG59XG5mdW5jdGlvbiBod2IycmdibihoLCB3LCBiKSB7XG4gIGNvbnN0IHJnYiA9IGhzbDJyZ2JuKGgsIDEsIDAuNSk7XG4gIGxldCBpO1xuICBpZiAodyArIGIgPiAxKSB7XG4gICAgaSA9IDEgLyAodyArIGIpO1xuICAgIHcgKj0gaTtcbiAgICBiICo9IGk7XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xuICAgIHJnYltpXSAqPSAxIC0gdyAtIGI7XG4gICAgcmdiW2ldICs9IHc7XG4gIH1cbiAgcmV0dXJuIHJnYjtcbn1cbmZ1bmN0aW9uIGh1ZVZhbHVlKHIsIGcsIGIsIGQsIG1heCkge1xuICBpZiAociA9PT0gbWF4KSB7XG4gICAgcmV0dXJuICgoZyAtIGIpIC8gZCkgKyAoZyA8IGIgPyA2IDogMCk7XG4gIH1cbiAgaWYgKGcgPT09IG1heCkge1xuICAgIHJldHVybiAoYiAtIHIpIC8gZCArIDI7XG4gIH1cbiAgcmV0dXJuIChyIC0gZykgLyBkICsgNDtcbn1cbmZ1bmN0aW9uIHJnYjJoc2wodikge1xuICBjb25zdCByYW5nZSA9IDI1NTtcbiAgY29uc3QgciA9IHYuciAvIHJhbmdlO1xuICBjb25zdCBnID0gdi5nIC8gcmFuZ2U7XG4gIGNvbnN0IGIgPSB2LmIgLyByYW5nZTtcbiAgY29uc3QgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG4gIGNvbnN0IG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuICBjb25zdCBsID0gKG1heCArIG1pbikgLyAyO1xuICBsZXQgaCwgcywgZDtcbiAgaWYgKG1heCAhPT0gbWluKSB7XG4gICAgZCA9IG1heCAtIG1pbjtcbiAgICBzID0gbCA+IDAuNSA/IGQgLyAoMiAtIG1heCAtIG1pbikgOiBkIC8gKG1heCArIG1pbik7XG4gICAgaCA9IGh1ZVZhbHVlKHIsIGcsIGIsIGQsIG1heCk7XG4gICAgaCA9IGggKiA2MCArIDAuNTtcbiAgfVxuICByZXR1cm4gW2ggfCAwLCBzIHx8IDAsIGxdO1xufVxuZnVuY3Rpb24gY2FsbG4oZiwgYSwgYiwgYykge1xuICByZXR1cm4gKFxuICAgIEFycmF5LmlzQXJyYXkoYSlcbiAgICAgID8gZihhWzBdLCBhWzFdLCBhWzJdKVxuICAgICAgOiBmKGEsIGIsIGMpXG4gICkubWFwKG4yYik7XG59XG5mdW5jdGlvbiBoc2wycmdiKGgsIHMsIGwpIHtcbiAgcmV0dXJuIGNhbGxuKGhzbDJyZ2JuLCBoLCBzLCBsKTtcbn1cbmZ1bmN0aW9uIGh3YjJyZ2IoaCwgdywgYikge1xuICByZXR1cm4gY2FsbG4oaHdiMnJnYm4sIGgsIHcsIGIpO1xufVxuZnVuY3Rpb24gaHN2MnJnYihoLCBzLCB2KSB7XG4gIHJldHVybiBjYWxsbihoc3YycmdibiwgaCwgcywgdik7XG59XG5mdW5jdGlvbiBodWUoaCkge1xuICByZXR1cm4gKGggJSAzNjAgKyAzNjApICUgMzYwO1xufVxuZnVuY3Rpb24gaHVlUGFyc2Uoc3RyKSB7XG4gIGNvbnN0IG0gPSBIVUVfUkUuZXhlYyhzdHIpO1xuICBsZXQgYSA9IDI1NTtcbiAgbGV0IHY7XG4gIGlmICghbSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobVs1XSAhPT0gdikge1xuICAgIGEgPSBtWzZdID8gcDJiKCttWzVdKSA6IG4yYigrbVs1XSk7XG4gIH1cbiAgY29uc3QgaCA9IGh1ZSgrbVsyXSk7XG4gIGNvbnN0IHAxID0gK21bM10gLyAxMDA7XG4gIGNvbnN0IHAyID0gK21bNF0gLyAxMDA7XG4gIGlmIChtWzFdID09PSAnaHdiJykge1xuICAgIHYgPSBod2IycmdiKGgsIHAxLCBwMik7XG4gIH0gZWxzZSBpZiAobVsxXSA9PT0gJ2hzdicpIHtcbiAgICB2ID0gaHN2MnJnYihoLCBwMSwgcDIpO1xuICB9IGVsc2Uge1xuICAgIHYgPSBoc2wycmdiKGgsIHAxLCBwMik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICByOiB2WzBdLFxuICAgIGc6IHZbMV0sXG4gICAgYjogdlsyXSxcbiAgICBhOiBhXG4gIH07XG59XG5mdW5jdGlvbiByb3RhdGUodiwgZGVnKSB7XG4gIHZhciBoID0gcmdiMmhzbCh2KTtcbiAgaFswXSA9IGh1ZShoWzBdICsgZGVnKTtcbiAgaCA9IGhzbDJyZ2IoaCk7XG4gIHYuciA9IGhbMF07XG4gIHYuZyA9IGhbMV07XG4gIHYuYiA9IGhbMl07XG59XG5mdW5jdGlvbiBoc2xTdHJpbmcodikge1xuICBpZiAoIXYpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgYSA9IHJnYjJoc2wodik7XG4gIGNvbnN0IGggPSBhWzBdO1xuICBjb25zdCBzID0gbjJwKGFbMV0pO1xuICBjb25zdCBsID0gbjJwKGFbMl0pO1xuICByZXR1cm4gdi5hIDwgMjU1XG4gICAgPyBgaHNsYSgke2h9LCAke3N9JSwgJHtsfSUsICR7YjJuKHYuYSl9KWBcbiAgICA6IGBoc2woJHtofSwgJHtzfSUsICR7bH0lKWA7XG59XG5cbmNvbnN0IG1hcCA9IHtcbiAgeDogJ2RhcmsnLFxuICBaOiAnbGlnaHQnLFxuICBZOiAncmUnLFxuICBYOiAnYmx1JyxcbiAgVzogJ2dyJyxcbiAgVjogJ21lZGl1bScsXG4gIFU6ICdzbGF0ZScsXG4gIEE6ICdlZScsXG4gIFQ6ICdvbCcsXG4gIFM6ICdvcicsXG4gIEI6ICdyYScsXG4gIEM6ICdsYXRlZycsXG4gIEQ6ICdpZ2h0cycsXG4gIFI6ICdpbicsXG4gIFE6ICd0dXJxdW9pcycsXG4gIEU6ICdoaScsXG4gIFA6ICdybycsXG4gIE86ICdhbCcsXG4gIE46ICdsZScsXG4gIE06ICdkZScsXG4gIEw6ICd5ZWxsbycsXG4gIEY6ICdlbicsXG4gIEs6ICdjaCcsXG4gIEc6ICdhcmtzJyxcbiAgSDogJ2VhJyxcbiAgSTogJ2lnaHRnJyxcbiAgSjogJ3doJ1xufTtcbmNvbnN0IG5hbWVzJDEgPSB7XG4gIE9pY2VYZTogJ2YwZjhmZicsXG4gIGFudGlxdWV3RXRlOiAnZmFlYmQ3JyxcbiAgYXF1YTogJ2ZmZmYnLFxuICBhcXVhbWFyUmU6ICc3ZmZmZDQnLFxuICBhenVZOiAnZjBmZmZmJyxcbiAgYmVpZ2U6ICdmNWY1ZGMnLFxuICBiaXNxdWU6ICdmZmU0YzQnLFxuICBibGFjazogJzAnLFxuICBibGFuS2VkT21vbmQ6ICdmZmViY2QnLFxuICBYZTogJ2ZmJyxcbiAgWGV2aVRldDogJzhhMmJlMicsXG4gIGJQd246ICdhNTJhMmEnLFxuICBidXJseXdvb2Q6ICdkZWI4ODcnLFxuICBjYU10WGU6ICc1ZjllYTAnLFxuICBLYXJ0WXVzZTogJzdmZmYwMCcsXG4gIEtvY1RhdGU6ICdkMjY5MWUnLFxuICBjU086ICdmZjdmNTAnLFxuICBjU25mbG93ZXJYZTogJzY0OTVlZCcsXG4gIGNTbnNpbGs6ICdmZmY4ZGMnLFxuICBjcmltc29uOiAnZGMxNDNjJyxcbiAgY3lhbjogJ2ZmZmYnLFxuICB4WGU6ICc4YicsXG4gIHhjeWFuOiAnOGI4YicsXG4gIHhnVE1uUGQ6ICdiODg2MGInLFxuICB4V2F5OiAnYTlhOWE5JyxcbiAgeGdZRjogJzY0MDAnLFxuICB4Z1l5OiAnYTlhOWE5JyxcbiAgeGtoYWtpOiAnYmRiNzZiJyxcbiAgeG1hZ0Z0YTogJzhiMDA4YicsXG4gIHhUaXZlZ1lGOiAnNTU2YjJmJyxcbiAgeFNhbmdlOiAnZmY4YzAwJyxcbiAgeFNjRWQ6ICc5OTMyY2MnLFxuICB4WWQ6ICc4YjAwMDAnLFxuICB4c09tb246ICdlOTk2N2EnLFxuICB4c0hnWUY6ICc4ZmJjOGYnLFxuICB4VVhlOiAnNDgzZDhiJyxcbiAgeFVXYXk6ICcyZjRmNGYnLFxuICB4VWdZeTogJzJmNGY0ZicsXG4gIHhRZTogJ2NlZDEnLFxuICB4dmlUZXQ6ICc5NDAwZDMnLFxuICBkQXBwUms6ICdmZjE0OTMnLFxuICBkQXBza3lYZTogJ2JmZmYnLFxuICBkaW1XYXk6ICc2OTY5NjknLFxuICBkaW1nWXk6ICc2OTY5NjknLFxuICBkb2RnZXJYZTogJzFlOTBmZicsXG4gIGZpWWJyaWNrOiAnYjIyMjIyJyxcbiAgZmxTT3dFdGU6ICdmZmZhZjAnLFxuICBmb1lzdFdBbjogJzIyOGIyMicsXG4gIGZ1S3NpYTogJ2ZmMDBmZicsXG4gIGdhUnNiU286ICdkY2RjZGMnLFxuICBnaG9zdHdFdGU6ICdmOGY4ZmYnLFxuICBnVGQ6ICdmZmQ3MDAnLFxuICBnVE1uUGQ6ICdkYWE1MjAnLFxuICBXYXk6ICc4MDgwODAnLFxuICBnWUY6ICc4MDAwJyxcbiAgZ1lGTHc6ICdhZGZmMmYnLFxuICBnWXk6ICc4MDgwODAnLFxuICBob25leU13OiAnZjBmZmYwJyxcbiAgaG90cFJrOiAnZmY2OWI0JyxcbiAgUmRpYW5ZZDogJ2NkNWM1YycsXG4gIFJkaWdvOiAnNGIwMDgyJyxcbiAgaXZTeTogJ2ZmZmZmMCcsXG4gIGtoYWtpOiAnZjBlNjhjJyxcbiAgbGF2Rk1yOiAnZTZlNmZhJyxcbiAgbGF2Rk1yWHNoOiAnZmZmMGY1JyxcbiAgbGF3bmdZRjogJzdjZmMwMCcsXG4gIE5tb25jRWZmb246ICdmZmZhY2QnLFxuICBaWGU6ICdhZGQ4ZTYnLFxuICBaY1NPOiAnZjA4MDgwJyxcbiAgWmN5YW46ICdlMGZmZmYnLFxuICBaZ1RNblBkTHc6ICdmYWZhZDInLFxuICBaV2F5OiAnZDNkM2QzJyxcbiAgWmdZRjogJzkwZWU5MCcsXG4gIFpnWXk6ICdkM2QzZDMnLFxuICBacFJrOiAnZmZiNmMxJyxcbiAgWnNPbW9uOiAnZmZhMDdhJyxcbiAgWnNIZ1lGOiAnMjBiMmFhJyxcbiAgWnNreVhlOiAnODdjZWZhJyxcbiAgWlVXYXk6ICc3Nzg4OTknLFxuICBaVWdZeTogJzc3ODg5OScsXG4gIFpzdEFsWGU6ICdiMGM0ZGUnLFxuICBaTHc6ICdmZmZmZTAnLFxuICBsaW1lOiAnZmYwMCcsXG4gIGxpbWVnWUY6ICczMmNkMzInLFxuICBsUkY6ICdmYWYwZTYnLFxuICBtYWdGdGE6ICdmZjAwZmYnLFxuICBtYVBvbjogJzgwMDAwMCcsXG4gIFZhcXVhbWFyUmU6ICc2NmNkYWEnLFxuICBWWGU6ICdjZCcsXG4gIFZTY0VkOiAnYmE1NWQzJyxcbiAgVnB1cnBOOiAnOTM3MGRiJyxcbiAgVnNIZ1lGOiAnM2NiMzcxJyxcbiAgVlVYZTogJzdiNjhlZScsXG4gIFZzcHJSZ2dZRjogJ2ZhOWEnLFxuICBWUWU6ICc0OGQxY2MnLFxuICBWdmlUZXRZZDogJ2M3MTU4NScsXG4gIG1pZG5pZ2h0WGU6ICcxOTE5NzAnLFxuICBtUnRjWWFtOiAnZjVmZmZhJyxcbiAgbWlzdHlQc2U6ICdmZmU0ZTEnLFxuICBtb2NjYXNSOiAnZmZlNGI1JyxcbiAgbmF2YWpvd0V0ZTogJ2ZmZGVhZCcsXG4gIG5hdnk6ICc4MCcsXG4gIFRkbGFjZTogJ2ZkZjVlNicsXG4gIFRpdmU6ICc4MDgwMDAnLFxuICBUaXZlZEJiOiAnNmI4ZTIzJyxcbiAgU2FuZ2U6ICdmZmE1MDAnLFxuICBTYW5nZVlkOiAnZmY0NTAwJyxcbiAgU2NFZDogJ2RhNzBkNicsXG4gIHBPZWdUTW5QZDogJ2VlZThhYScsXG4gIHBPZWdZRjogJzk4ZmI5OCcsXG4gIHBPZVFlOiAnYWZlZWVlJyxcbiAgcE9ldmlUZXRZZDogJ2RiNzA5MycsXG4gIHBhcGF5YXdFcDogJ2ZmZWZkNScsXG4gIHBIS3B1ZmY6ICdmZmRhYjknLFxuICBwZXJ1OiAnY2Q4NTNmJyxcbiAgcFJrOiAnZmZjMGNiJyxcbiAgcGx1bTogJ2RkYTBkZCcsXG4gIHBvd01yWGU6ICdiMGUwZTYnLFxuICBwdXJwTjogJzgwMDA4MCcsXG4gIFliZWNjYXB1cnBOOiAnNjYzMzk5JyxcbiAgWWQ6ICdmZjAwMDAnLFxuICBQc3licm93bjogJ2JjOGY4ZicsXG4gIFB5T1hlOiAnNDE2OWUxJyxcbiAgc2FkZE5iUHduOiAnOGI0NTEzJyxcbiAgc09tb246ICdmYTgwNzInLFxuICBzYW5keWJQd246ICdmNGE0NjAnLFxuICBzSGdZRjogJzJlOGI1NycsXG4gIHNIc2hlbGw6ICdmZmY1ZWUnLFxuICBzaUZuYTogJ2EwNTIyZCcsXG4gIHNpbHZlcjogJ2MwYzBjMCcsXG4gIHNreVhlOiAnODdjZWViJyxcbiAgVVhlOiAnNmE1YWNkJyxcbiAgVVdheTogJzcwODA5MCcsXG4gIFVnWXk6ICc3MDgwOTAnLFxuICBzbm93OiAnZmZmYWZhJyxcbiAgc3ByUmdnWUY6ICdmZjdmJyxcbiAgc3RBbFhlOiAnNDY4MmI0JyxcbiAgdGFuOiAnZDJiNDhjJyxcbiAgdGVPOiAnODA4MCcsXG4gIHRFc3ROOiAnZDhiZmQ4JyxcbiAgdG9tYXRvOiAnZmY2MzQ3JyxcbiAgUWU6ICc0MGUwZDAnLFxuICB2aVRldDogJ2VlODJlZScsXG4gIEpIdDogJ2Y1ZGViMycsXG4gIHdFdGU6ICdmZmZmZmYnLFxuICB3RXRlc21va2U6ICdmNWY1ZjUnLFxuICBMdzogJ2ZmZmYwMCcsXG4gIEx3Z1lGOiAnOWFjZDMyJ1xufTtcbmZ1bmN0aW9uIHVucGFjaygpIHtcbiAgY29uc3QgdW5wYWNrZWQgPSB7fTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5hbWVzJDEpO1xuICBjb25zdCB0a2V5cyA9IE9iamVjdC5rZXlzKG1hcCk7XG4gIGxldCBpLCBqLCBrLCBvaywgbms7XG4gIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgb2sgPSBuayA9IGtleXNbaV07XG4gICAgZm9yIChqID0gMDsgaiA8IHRrZXlzLmxlbmd0aDsgaisrKSB7XG4gICAgICBrID0gdGtleXNbal07XG4gICAgICBuayA9IG5rLnJlcGxhY2UoaywgbWFwW2tdKTtcbiAgICB9XG4gICAgayA9IHBhcnNlSW50KG5hbWVzJDFbb2tdLCAxNik7XG4gICAgdW5wYWNrZWRbbmtdID0gW2sgPj4gMTYgJiAweEZGLCBrID4+IDggJiAweEZGLCBrICYgMHhGRl07XG4gIH1cbiAgcmV0dXJuIHVucGFja2VkO1xufVxuXG5sZXQgbmFtZXM7XG5mdW5jdGlvbiBuYW1lUGFyc2Uoc3RyKSB7XG4gIGlmICghbmFtZXMpIHtcbiAgICBuYW1lcyA9IHVucGFjaygpO1xuICAgIG5hbWVzLnRyYW5zcGFyZW50ID0gWzAsIDAsIDAsIDBdO1xuICB9XG4gIGNvbnN0IGEgPSBuYW1lc1tzdHIudG9Mb3dlckNhc2UoKV07XG4gIHJldHVybiBhICYmIHtcbiAgICByOiBhWzBdLFxuICAgIGc6IGFbMV0sXG4gICAgYjogYVsyXSxcbiAgICBhOiBhLmxlbmd0aCA9PT0gNCA/IGFbM10gOiAyNTVcbiAgfTtcbn1cblxuY29uc3QgUkdCX1JFID0gL15yZ2JhP1xcKFxccyooWy0rLlxcZF0rKSglKT9bXFxzLF0rKFstKy5lXFxkXSspKCUpP1tcXHMsXSsoWy0rLmVcXGRdKykoJSk/KD86W1xccywvXSsoWy0rLmVcXGRdKykoJSk/KT9cXHMqXFwpJC87XG5mdW5jdGlvbiByZ2JQYXJzZShzdHIpIHtcbiAgY29uc3QgbSA9IFJHQl9SRS5leGVjKHN0cik7XG4gIGxldCBhID0gMjU1O1xuICBsZXQgciwgZywgYjtcbiAgaWYgKCFtKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChtWzddICE9PSByKSB7XG4gICAgY29uc3QgdiA9ICttWzddO1xuICAgIGEgPSBtWzhdID8gcDJiKHYpIDogbGltKHYgKiAyNTUsIDAsIDI1NSk7XG4gIH1cbiAgciA9ICttWzFdO1xuICBnID0gK21bM107XG4gIGIgPSArbVs1XTtcbiAgciA9IDI1NSAmIChtWzJdID8gcDJiKHIpIDogbGltKHIsIDAsIDI1NSkpO1xuICBnID0gMjU1ICYgKG1bNF0gPyBwMmIoZykgOiBsaW0oZywgMCwgMjU1KSk7XG4gIGIgPSAyNTUgJiAobVs2XSA/IHAyYihiKSA6IGxpbShiLCAwLCAyNTUpKTtcbiAgcmV0dXJuIHtcbiAgICByOiByLFxuICAgIGc6IGcsXG4gICAgYjogYixcbiAgICBhOiBhXG4gIH07XG59XG5mdW5jdGlvbiByZ2JTdHJpbmcodikge1xuICByZXR1cm4gdiAmJiAoXG4gICAgdi5hIDwgMjU1XG4gICAgICA/IGByZ2JhKCR7di5yfSwgJHt2Lmd9LCAke3YuYn0sICR7YjJuKHYuYSl9KWBcbiAgICAgIDogYHJnYigke3Yucn0sICR7di5nfSwgJHt2LmJ9KWBcbiAgKTtcbn1cblxuY29uc3QgdG8gPSB2ID0+IHYgPD0gMC4wMDMxMzA4ID8gdiAqIDEyLjkyIDogTWF0aC5wb3codiwgMS4wIC8gMi40KSAqIDEuMDU1IC0gMC4wNTU7XG5jb25zdCBmcm9tID0gdiA9PiB2IDw9IDAuMDQwNDUgPyB2IC8gMTIuOTIgOiBNYXRoLnBvdygodiArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuZnVuY3Rpb24gaW50ZXJwb2xhdGUocmdiMSwgcmdiMiwgdCkge1xuICBjb25zdCByID0gZnJvbShiMm4ocmdiMS5yKSk7XG4gIGNvbnN0IGcgPSBmcm9tKGIybihyZ2IxLmcpKTtcbiAgY29uc3QgYiA9IGZyb20oYjJuKHJnYjEuYikpO1xuICByZXR1cm4ge1xuICAgIHI6IG4yYih0byhyICsgdCAqIChmcm9tKGIybihyZ2IyLnIpKSAtIHIpKSksXG4gICAgZzogbjJiKHRvKGcgKyB0ICogKGZyb20oYjJuKHJnYjIuZykpIC0gZykpKSxcbiAgICBiOiBuMmIodG8oYiArIHQgKiAoZnJvbShiMm4ocmdiMi5iKSkgLSBiKSkpLFxuICAgIGE6IHJnYjEuYSArIHQgKiAocmdiMi5hIC0gcmdiMS5hKVxuICB9O1xufVxuXG5mdW5jdGlvbiBtb2RIU0wodiwgaSwgcmF0aW8pIHtcbiAgaWYgKHYpIHtcbiAgICBsZXQgdG1wID0gcmdiMmhzbCh2KTtcbiAgICB0bXBbaV0gPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0bXBbaV0gKyB0bXBbaV0gKiByYXRpbywgaSA9PT0gMCA/IDM2MCA6IDEpKTtcbiAgICB0bXAgPSBoc2wycmdiKHRtcCk7XG4gICAgdi5yID0gdG1wWzBdO1xuICAgIHYuZyA9IHRtcFsxXTtcbiAgICB2LmIgPSB0bXBbMl07XG4gIH1cbn1cbmZ1bmN0aW9uIGNsb25lKHYsIHByb3RvKSB7XG4gIHJldHVybiB2ID8gT2JqZWN0LmFzc2lnbihwcm90byB8fCB7fSwgdikgOiB2O1xufVxuZnVuY3Rpb24gZnJvbU9iamVjdChpbnB1dCkge1xuICB2YXIgdiA9IHtyOiAwLCBnOiAwLCBiOiAwLCBhOiAyNTV9O1xuICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICBpZiAoaW5wdXQubGVuZ3RoID49IDMpIHtcbiAgICAgIHYgPSB7cjogaW5wdXRbMF0sIGc6IGlucHV0WzFdLCBiOiBpbnB1dFsyXSwgYTogMjU1fTtcbiAgICAgIGlmIChpbnB1dC5sZW5ndGggPiAzKSB7XG4gICAgICAgIHYuYSA9IG4yYihpbnB1dFszXSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHYgPSBjbG9uZShpbnB1dCwge3I6IDAsIGc6IDAsIGI6IDAsIGE6IDF9KTtcbiAgICB2LmEgPSBuMmIodi5hKTtcbiAgfVxuICByZXR1cm4gdjtcbn1cbmZ1bmN0aW9uIGZ1bmN0aW9uUGFyc2Uoc3RyKSB7XG4gIGlmIChzdHIuY2hhckF0KDApID09PSAncicpIHtcbiAgICByZXR1cm4gcmdiUGFyc2Uoc3RyKTtcbiAgfVxuICByZXR1cm4gaHVlUGFyc2Uoc3RyKTtcbn1cbmNsYXNzIENvbG9yIHtcbiAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBDb2xvcikge1xuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIGlucHV0O1xuICAgIGxldCB2O1xuICAgIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgdiA9IGZyb21PYmplY3QoaW5wdXQpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHYgPSBoZXhQYXJzZShpbnB1dCkgfHwgbmFtZVBhcnNlKGlucHV0KSB8fCBmdW5jdGlvblBhcnNlKGlucHV0KTtcbiAgICB9XG4gICAgdGhpcy5fcmdiID0gdjtcbiAgICB0aGlzLl92YWxpZCA9ICEhdjtcbiAgfVxuICBnZXQgdmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkO1xuICB9XG4gIGdldCByZ2IoKSB7XG4gICAgdmFyIHYgPSBjbG9uZSh0aGlzLl9yZ2IpO1xuICAgIGlmICh2KSB7XG4gICAgICB2LmEgPSBiMm4odi5hKTtcbiAgICB9XG4gICAgcmV0dXJuIHY7XG4gIH1cbiAgc2V0IHJnYihvYmopIHtcbiAgICB0aGlzLl9yZ2IgPSBmcm9tT2JqZWN0KG9iaik7XG4gIH1cbiAgcmdiU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl92YWxpZCA/IHJnYlN0cmluZyh0aGlzLl9yZ2IpIDogdW5kZWZpbmVkO1xuICB9XG4gIGhleFN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWQgPyBoZXhTdHJpbmcodGhpcy5fcmdiKSA6IHVuZGVmaW5lZDtcbiAgfVxuICBoc2xTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkID8gaHNsU3RyaW5nKHRoaXMuX3JnYikgOiB1bmRlZmluZWQ7XG4gIH1cbiAgbWl4KGNvbG9yLCB3ZWlnaHQpIHtcbiAgICBpZiAoY29sb3IpIHtcbiAgICAgIGNvbnN0IGMxID0gdGhpcy5yZ2I7XG4gICAgICBjb25zdCBjMiA9IGNvbG9yLnJnYjtcbiAgICAgIGxldCB3MjtcbiAgICAgIGNvbnN0IHAgPSB3ZWlnaHQgPT09IHcyID8gMC41IDogd2VpZ2h0O1xuICAgICAgY29uc3QgdyA9IDIgKiBwIC0gMTtcbiAgICAgIGNvbnN0IGEgPSBjMS5hIC0gYzIuYTtcbiAgICAgIGNvbnN0IHcxID0gKCh3ICogYSA9PT0gLTEgPyB3IDogKHcgKyBhKSAvICgxICsgdyAqIGEpKSArIDEpIC8gMi4wO1xuICAgICAgdzIgPSAxIC0gdzE7XG4gICAgICBjMS5yID0gMHhGRiAmIHcxICogYzEuciArIHcyICogYzIuciArIDAuNTtcbiAgICAgIGMxLmcgPSAweEZGICYgdzEgKiBjMS5nICsgdzIgKiBjMi5nICsgMC41O1xuICAgICAgYzEuYiA9IDB4RkYgJiB3MSAqIGMxLmIgKyB3MiAqIGMyLmIgKyAwLjU7XG4gICAgICBjMS5hID0gcCAqIGMxLmEgKyAoMSAtIHApICogYzIuYTtcbiAgICAgIHRoaXMucmdiID0gYzE7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGludGVycG9sYXRlKGNvbG9yLCB0KSB7XG4gICAgaWYgKGNvbG9yKSB7XG4gICAgICB0aGlzLl9yZ2IgPSBpbnRlcnBvbGF0ZSh0aGlzLl9yZ2IsIGNvbG9yLl9yZ2IsIHQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IENvbG9yKHRoaXMucmdiKTtcbiAgfVxuICBhbHBoYShhKSB7XG4gICAgdGhpcy5fcmdiLmEgPSBuMmIoYSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgY2xlYXJlcihyYXRpbykge1xuICAgIGNvbnN0IHJnYiA9IHRoaXMuX3JnYjtcbiAgICByZ2IuYSAqPSAxIC0gcmF0aW87XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZ3JleXNjYWxlKCkge1xuICAgIGNvbnN0IHJnYiA9IHRoaXMuX3JnYjtcbiAgICBjb25zdCB2YWwgPSByb3VuZChyZ2IuciAqIDAuMyArIHJnYi5nICogMC41OSArIHJnYi5iICogMC4xMSk7XG4gICAgcmdiLnIgPSByZ2IuZyA9IHJnYi5iID0gdmFsO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIG9wYXF1ZXIocmF0aW8pIHtcbiAgICBjb25zdCByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgcmdiLmEgKj0gMSArIHJhdGlvO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIG5lZ2F0ZSgpIHtcbiAgICBjb25zdCB2ID0gdGhpcy5fcmdiO1xuICAgIHYuciA9IDI1NSAtIHYucjtcbiAgICB2LmcgPSAyNTUgLSB2Lmc7XG4gICAgdi5iID0gMjU1IC0gdi5iO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGxpZ2h0ZW4ocmF0aW8pIHtcbiAgICBtb2RIU0wodGhpcy5fcmdiLCAyLCByYXRpbyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZGFya2VuKHJhdGlvKSB7XG4gICAgbW9kSFNMKHRoaXMuX3JnYiwgMiwgLXJhdGlvKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBzYXR1cmF0ZShyYXRpbykge1xuICAgIG1vZEhTTCh0aGlzLl9yZ2IsIDEsIHJhdGlvKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBkZXNhdHVyYXRlKHJhdGlvKSB7XG4gICAgbW9kSFNMKHRoaXMuX3JnYiwgMSwgLXJhdGlvKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICByb3RhdGUoZGVnKSB7XG4gICAgcm90YXRlKHRoaXMuX3JnYiwgZGVnKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5mdW5jdGlvbiBpbmRleF9lc20oaW5wdXQpIHtcbiAgcmV0dXJuIG5ldyBDb2xvcihpbnB1dCk7XG59XG5cbmV4cG9ydCB7IENvbG9yLCBiMm4sIGIycCwgaW5kZXhfZXNtIGFzIGRlZmF1bHQsIGhleFBhcnNlLCBoZXhTdHJpbmcsIGhzbDJyZ2IsIGhzbFN0cmluZywgaHN2MnJnYiwgaHVlUGFyc2UsIGh3YjJyZ2IsIGxpbSwgbjJiLCBuMnAsIG5hbWVQYXJzZSwgcDJiLCByZ2IyaHNsLCByZ2JQYXJzZSwgcmdiU3RyaW5nLCByb3RhdGUsIHJvdW5kIH07XG4iLCIvKiFcbiAqIENoYXJ0LmpzIHY0LjQuNlxuICogaHR0cHM6Ly93d3cuY2hhcnRqcy5vcmdcbiAqIChjKSAyMDI0IENoYXJ0LmpzIENvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlXG4gKi9cbmltcG9ydCB7IHIgYXMgcmVxdWVzdEFuaW1GcmFtZSwgYSBhcyByZXNvbHZlLCBlIGFzIGVmZmVjdHMsIGMgYXMgY29sb3IsIGkgYXMgaXNPYmplY3QsIGQgYXMgZGVmYXVsdHMsIGIgYXMgaXNBcnJheSwgdiBhcyB2YWx1ZU9yRGVmYXVsdCwgdSBhcyB1bmxpc3RlbkFycmF5RXZlbnRzLCBsIGFzIGxpc3RlbkFycmF5RXZlbnRzLCBmIGFzIHJlc29sdmVPYmplY3RLZXksIGcgYXMgaXNOdW1iZXJGaW5pdGUsIGggYXMgZGVmaW5lZCwgcyBhcyBzaWduLCBqIGFzIGNyZWF0ZUNvbnRleHQsIGsgYXMgaXNOdWxsT3JVbmRlZiwgXyBhcyBfYXJyYXlVbmlxdWUsIHQgYXMgdG9SYWRpYW5zLCBtIGFzIHRvUGVyY2VudGFnZSwgbiBhcyB0b0RpbWVuc2lvbiwgVCBhcyBUQVUsIG8gYXMgZm9ybWF0TnVtYmVyLCBwIGFzIF9hbmdsZUJldHdlZW4sIEggYXMgSEFMRl9QSSwgUCBhcyBQSSwgcSBhcyBfZ2V0U3RhcnRBbmRDb3VudE9mVmlzaWJsZVBvaW50cywgdyBhcyBfc2NhbGVSYW5nZXNDaGFuZ2VkLCB4IGFzIGlzTnVtYmVyLCB5IGFzIF9wYXJzZU9iamVjdERhdGFSYWRpYWxTY2FsZSwgeiBhcyBnZXRSZWxhdGl2ZVBvc2l0aW9uLCBBIGFzIF9ybG9va3VwQnlLZXksIEIgYXMgX2xvb2t1cEJ5S2V5LCBDIGFzIF9pc1BvaW50SW5BcmVhLCBEIGFzIGdldEFuZ2xlRnJvbVBvaW50LCBFIGFzIHRvUGFkZGluZywgRiBhcyBlYWNoLCBHIGFzIGdldE1heGltdW1TaXplLCBJIGFzIF9nZXRQYXJlbnROb2RlLCBKIGFzIHJlYWRVc2VkU2l6ZSwgSyBhcyBzdXBwb3J0c0V2ZW50TGlzdGVuZXJPcHRpb25zLCBMIGFzIHRocm90dGxlZCwgTSBhcyBfaXNEb21TdXBwb3J0ZWQsIE4gYXMgX2ZhY3Rvcml6ZSwgTyBhcyBmaW5pdGVPckRlZmF1bHQsIFEgYXMgY2FsbGJhY2ssIFIgYXMgX2FkZEdyYWNlLCBTIGFzIF9saW1pdFZhbHVlLCBVIGFzIHRvRGVncmVlcywgViBhcyBfbWVhc3VyZVRleHQsIFcgYXMgX2ludDE2UmFuZ2UsIFggYXMgX2FsaWduUGl4ZWwsIFkgYXMgY2xpcEFyZWEsIFogYXMgcmVuZGVyVGV4dCwgJCBhcyB1bmNsaXBBcmVhLCBhMCBhcyB0b0ZvbnQsIGExIGFzIF90b0xlZnRSaWdodENlbnRlciwgYTIgYXMgX2FsaWduU3RhcnRFbmQsIGEzIGFzIG92ZXJyaWRlcywgYTQgYXMgbWVyZ2UsIGE1IGFzIF9jYXBpdGFsaXplLCBhNiBhcyBkZXNjcmlwdG9ycywgYTcgYXMgaXNGdW5jdGlvbiwgYTggYXMgX2F0dGFjaENvbnRleHQsIGE5IGFzIF9jcmVhdGVSZXNvbHZlciwgYWEgYXMgX2Rlc2NyaXB0b3JzLCBhYiBhcyBtZXJnZUlmLCBhYyBhcyB1aWQsIGFkIGFzIGRlYm91bmNlLCBhZSBhcyByZXRpbmFTY2FsZSwgYWYgYXMgY2xlYXJDYW52YXMsIGFnIGFzIHNldHNFcXVhbCwgYWggYXMgX2VsZW1lbnRzRXF1YWwsIGFpIGFzIF9pc0NsaWNrRXZlbnQsIGFqIGFzIF9pc0JldHdlZW4sIGFrIGFzIF9yZWFkVmFsdWVUb1Byb3BzLCBhbCBhcyBfdXBkYXRlQmV6aWVyQ29udHJvbFBvaW50cywgYW0gYXMgX2NvbXB1dGVTZWdtZW50cywgYW4gYXMgX2JvdW5kU2VnbWVudHMsIGFvIGFzIF9zdGVwcGVkSW50ZXJwb2xhdGlvbiwgYXAgYXMgX2JlemllckludGVycG9sYXRpb24sIGFxIGFzIF9wb2ludEluTGluZSwgYXIgYXMgX3N0ZXBwZWRMaW5lVG8sIGFzIGFzIF9iZXppZXJDdXJ2ZVRvLCBhdCBhcyBkcmF3UG9pbnQsIGF1IGFzIGFkZFJvdW5kZWRSZWN0UGF0aCwgYXYgYXMgdG9UUkJMLCBhdyBhcyB0b1RSQkxDb3JuZXJzLCBheCBhcyBfYm91bmRTZWdtZW50LCBheSBhcyBfbm9ybWFsaXplQW5nbGUsIGF6IGFzIGdldFJ0bEFkYXB0ZXIsIGFBIGFzIG92ZXJyaWRlVGV4dERpcmVjdGlvbiwgYUIgYXMgX3RleHRYLCBhQyBhcyByZXN0b3JlVGV4dERpcmVjdGlvbiwgYUQgYXMgZHJhd1BvaW50TGVnZW5kLCBhRSBhcyBkaXN0YW5jZUJldHdlZW5Qb2ludHMsIGFGIGFzIG5vb3AsIGFHIGFzIF9zZXRNaW5BbmRNYXhCeUtleSwgYUggYXMgbmljZU51bSwgYUkgYXMgYWxtb3N0V2hvbGUsIGFKIGFzIGFsbW9zdEVxdWFscywgYUsgYXMgX2RlY2ltYWxQbGFjZXMsIGFMIGFzIFRpY2tzLCBhTSBhcyBsb2cxMCwgYU4gYXMgX2xvbmdlc3RUZXh0LCBhTyBhcyBfZmlsdGVyQmV0d2VlbiwgYVAgYXMgX2xvb2t1cCB9IGZyb20gJy4vY2h1bmtzL2hlbHBlcnMuc2VnbWVudC5qcyc7XG5pbXBvcnQgJ0BrdXJrbGUvY29sb3InO1xuXG5jbGFzcyBBbmltYXRvciB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5fcmVxdWVzdCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2NoYXJ0cyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5fcnVubmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9sYXN0RGF0ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gX25vdGlmeShjaGFydCwgYW5pbXMsIGRhdGUsIHR5cGUpIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gYW5pbXMubGlzdGVuZXJzW3R5cGVdO1xuICAgICAgICBjb25zdCBudW1TdGVwcyA9IGFuaW1zLmR1cmF0aW9uO1xuICAgICAgICBjYWxsYmFja3MuZm9yRWFjaCgoZm4pPT5mbih7XG4gICAgICAgICAgICAgICAgY2hhcnQsXG4gICAgICAgICAgICAgICAgaW5pdGlhbDogYW5pbXMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgICBudW1TdGVwcyxcbiAgICAgICAgICAgICAgICBjdXJyZW50U3RlcDogTWF0aC5taW4oZGF0ZSAtIGFuaW1zLnN0YXJ0LCBudW1TdGVwcylcbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG4gX3JlZnJlc2goKSB7XG4gICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcnVubmluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3QgPSByZXF1ZXN0QW5pbUZyYW1lLmNhbGwod2luZG93LCAoKT0+e1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh0aGlzLl9ydW5uaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gX3VwZGF0ZShkYXRlID0gRGF0ZS5ub3coKSkge1xuICAgICAgICBsZXQgcmVtYWluaW5nID0gMDtcbiAgICAgICAgdGhpcy5fY2hhcnRzLmZvckVhY2goKGFuaW1zLCBjaGFydCk9PntcbiAgICAgICAgICAgIGlmICghYW5pbXMucnVubmluZyB8fCAhYW5pbXMuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBhbmltcy5pdGVtcztcbiAgICAgICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGxldCBkcmF3ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgaXRlbTtcbiAgICAgICAgICAgIGZvcig7IGkgPj0gMDsgLS1pKXtcbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uX2FjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5fdG90YWwgPiBhbmltcy5kdXJhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5pbXMuZHVyYXRpb24gPSBpdGVtLl90b3RhbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpdGVtLnRpY2soZGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGRyYXcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zW2ldID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnBvcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkcmF3KSB7XG4gICAgICAgICAgICAgICAgY2hhcnQuZHJhdygpO1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmeShjaGFydCwgYW5pbXMsIGRhdGUsICdwcm9ncmVzcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBhbmltcy5ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZ5KGNoYXJ0LCBhbmltcywgZGF0ZSwgJ2NvbXBsZXRlJyk7XG4gICAgICAgICAgICAgICAgYW5pbXMuaW5pdGlhbCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVtYWluaW5nICs9IGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2xhc3REYXRlID0gZGF0ZTtcbiAgICAgICAgaWYgKHJlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fcnVubmluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuIF9nZXRBbmltcyhjaGFydCkge1xuICAgICAgICBjb25zdCBjaGFydHMgPSB0aGlzLl9jaGFydHM7XG4gICAgICAgIGxldCBhbmltcyA9IGNoYXJ0cy5nZXQoY2hhcnQpO1xuICAgICAgICBpZiAoIWFuaW1zKSB7XG4gICAgICAgICAgICBhbmltcyA9IHtcbiAgICAgICAgICAgICAgICBydW5uaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbml0aWFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiBbXSxcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IFtdLFxuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2hhcnRzLnNldChjaGFydCwgYW5pbXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbmltcztcbiAgICB9XG4gbGlzdGVuKGNoYXJ0LCBldmVudCwgY2IpIHtcbiAgICAgICAgdGhpcy5fZ2V0QW5pbXMoY2hhcnQpLmxpc3RlbmVyc1tldmVudF0ucHVzaChjYik7XG4gICAgfVxuIGFkZChjaGFydCwgaXRlbXMpIHtcbiAgICAgICAgaWYgKCFpdGVtcyB8fCAhaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZ2V0QW5pbXMoY2hhcnQpLml0ZW1zLnB1c2goLi4uaXRlbXMpO1xuICAgIH1cbiBoYXMoY2hhcnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEFuaW1zKGNoYXJ0KS5pdGVtcy5sZW5ndGggPiAwO1xuICAgIH1cbiBzdGFydChjaGFydCkge1xuICAgICAgICBjb25zdCBhbmltcyA9IHRoaXMuX2NoYXJ0cy5nZXQoY2hhcnQpO1xuICAgICAgICBpZiAoIWFuaW1zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYW5pbXMucnVubmluZyA9IHRydWU7XG4gICAgICAgIGFuaW1zLnN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgYW5pbXMuZHVyYXRpb24gPSBhbmltcy5pdGVtcy5yZWR1Y2UoKGFjYywgY3VyKT0+TWF0aC5tYXgoYWNjLCBjdXIuX2R1cmF0aW9uKSwgMCk7XG4gICAgICAgIHRoaXMuX3JlZnJlc2goKTtcbiAgICB9XG4gICAgcnVubmluZyhjaGFydCkge1xuICAgICAgICBpZiAoIXRoaXMuX3J1bm5pbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbmltcyA9IHRoaXMuX2NoYXJ0cy5nZXQoY2hhcnQpO1xuICAgICAgICBpZiAoIWFuaW1zIHx8ICFhbmltcy5ydW5uaW5nIHx8ICFhbmltcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gc3RvcChjaGFydCkge1xuICAgICAgICBjb25zdCBhbmltcyA9IHRoaXMuX2NoYXJ0cy5nZXQoY2hhcnQpO1xuICAgICAgICBpZiAoIWFuaW1zIHx8ICFhbmltcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtcyA9IGFuaW1zLml0ZW1zO1xuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgIGZvcig7IGkgPj0gMDsgLS1pKXtcbiAgICAgICAgICAgIGl0ZW1zW2ldLmNhbmNlbCgpO1xuICAgICAgICB9XG4gICAgICAgIGFuaW1zLml0ZW1zID0gW107XG4gICAgICAgIHRoaXMuX25vdGlmeShjaGFydCwgYW5pbXMsIERhdGUubm93KCksICdjb21wbGV0ZScpO1xuICAgIH1cbiByZW1vdmUoY2hhcnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoYXJ0cy5kZWxldGUoY2hhcnQpO1xuICAgIH1cbn1cbnZhciBhbmltYXRvciA9IC8qICNfX1BVUkVfXyAqLyBuZXcgQW5pbWF0b3IoKTtcblxuY29uc3QgdHJhbnNwYXJlbnQgPSAndHJhbnNwYXJlbnQnO1xuY29uc3QgaW50ZXJwb2xhdG9ycyA9IHtcbiAgICBib29sZWFuIChmcm9tLCB0bywgZmFjdG9yKSB7XG4gICAgICAgIHJldHVybiBmYWN0b3IgPiAwLjUgPyB0byA6IGZyb207XG4gICAgfSxcbiBjb2xvciAoZnJvbSwgdG8sIGZhY3Rvcikge1xuICAgICAgICBjb25zdCBjMCA9IGNvbG9yKGZyb20gfHwgdHJhbnNwYXJlbnQpO1xuICAgICAgICBjb25zdCBjMSA9IGMwLnZhbGlkICYmIGNvbG9yKHRvIHx8IHRyYW5zcGFyZW50KTtcbiAgICAgICAgcmV0dXJuIGMxICYmIGMxLnZhbGlkID8gYzEubWl4KGMwLCBmYWN0b3IpLmhleFN0cmluZygpIDogdG87XG4gICAgfSxcbiAgICBudW1iZXIgKGZyb20sIHRvLCBmYWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZyb20gKyAodG8gLSBmcm9tKSAqIGZhY3RvcjtcbiAgICB9XG59O1xuY2xhc3MgQW5pbWF0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihjZmcsIHRhcmdldCwgcHJvcCwgdG8pe1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0YXJnZXRbcHJvcF07XG4gICAgICAgIHRvID0gcmVzb2x2ZShbXG4gICAgICAgICAgICBjZmcudG8sXG4gICAgICAgICAgICB0byxcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIGNmZy5mcm9tXG4gICAgICAgIF0pO1xuICAgICAgICBjb25zdCBmcm9tID0gcmVzb2x2ZShbXG4gICAgICAgICAgICBjZmcuZnJvbSxcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIHRvXG4gICAgICAgIF0pO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9mbiA9IGNmZy5mbiB8fCBpbnRlcnBvbGF0b3JzW2NmZy50eXBlIHx8IHR5cGVvZiBmcm9tXTtcbiAgICAgICAgdGhpcy5fZWFzaW5nID0gZWZmZWN0c1tjZmcuZWFzaW5nXSB8fCBlZmZlY3RzLmxpbmVhcjtcbiAgICAgICAgdGhpcy5fc3RhcnQgPSBNYXRoLmZsb29yKERhdGUubm93KCkgKyAoY2ZnLmRlbGF5IHx8IDApKTtcbiAgICAgICAgdGhpcy5fZHVyYXRpb24gPSB0aGlzLl90b3RhbCA9IE1hdGguZmxvb3IoY2ZnLmR1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fbG9vcCA9ICEhY2ZnLmxvb3A7XG4gICAgICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldDtcbiAgICAgICAgdGhpcy5fcHJvcCA9IHByb3A7XG4gICAgICAgIHRoaXMuX2Zyb20gPSBmcm9tO1xuICAgICAgICB0aGlzLl90byA9IHRvO1xuICAgICAgICB0aGlzLl9wcm9taXNlcyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgYWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH1cbiAgICB1cGRhdGUoY2ZnLCB0bywgZGF0ZSkge1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5fdGFyZ2V0W3RoaXMuX3Byb3BdO1xuICAgICAgICAgICAgY29uc3QgZWxhcHNlZCA9IGRhdGUgLSB0aGlzLl9zdGFydDtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbiA9IHRoaXMuX2R1cmF0aW9uIC0gZWxhcHNlZDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0ID0gZGF0ZTtcbiAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9uID0gTWF0aC5mbG9vcihNYXRoLm1heChyZW1haW4sIGNmZy5kdXJhdGlvbikpO1xuICAgICAgICAgICAgdGhpcy5fdG90YWwgKz0gZWxhcHNlZDtcbiAgICAgICAgICAgIHRoaXMuX2xvb3AgPSAhIWNmZy5sb29wO1xuICAgICAgICAgICAgdGhpcy5fdG8gPSByZXNvbHZlKFtcbiAgICAgICAgICAgICAgICBjZmcudG8sXG4gICAgICAgICAgICAgICAgdG8sXG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIGNmZy5mcm9tXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIHRoaXMuX2Zyb20gPSByZXNvbHZlKFtcbiAgICAgICAgICAgICAgICBjZmcuZnJvbSxcbiAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUsXG4gICAgICAgICAgICAgICAgdG9cbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhbmNlbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy50aWNrKERhdGUubm93KCkpO1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRpY2soZGF0ZSkge1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gZGF0ZSAtIHRoaXMuX3N0YXJ0O1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMuX2R1cmF0aW9uO1xuICAgICAgICBjb25zdCBwcm9wID0gdGhpcy5fcHJvcDtcbiAgICAgICAgY29uc3QgZnJvbSA9IHRoaXMuX2Zyb207XG4gICAgICAgIGNvbnN0IGxvb3AgPSB0aGlzLl9sb29wO1xuICAgICAgICBjb25zdCB0byA9IHRoaXMuX3RvO1xuICAgICAgICBsZXQgZmFjdG9yO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmcm9tICE9PSB0byAmJiAobG9vcCB8fCBlbGFwc2VkIDwgZHVyYXRpb24pO1xuICAgICAgICBpZiAoIXRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5fdGFyZ2V0W3Byb3BdID0gdG87XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkodHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsYXBzZWQgPCAwKSB7XG4gICAgICAgICAgICB0aGlzLl90YXJnZXRbcHJvcF0gPSBmcm9tO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZhY3RvciA9IGVsYXBzZWQgLyBkdXJhdGlvbiAlIDI7XG4gICAgICAgIGZhY3RvciA9IGxvb3AgJiYgZmFjdG9yID4gMSA/IDIgLSBmYWN0b3IgOiBmYWN0b3I7XG4gICAgICAgIGZhY3RvciA9IHRoaXMuX2Vhc2luZyhNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBmYWN0b3IpKSk7XG4gICAgICAgIHRoaXMuX3RhcmdldFtwcm9wXSA9IHRoaXMuX2ZuKGZyb20sIHRvLCBmYWN0b3IpO1xuICAgIH1cbiAgICB3YWl0KCkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IHRoaXMuX3Byb21pc2VzIHx8ICh0aGlzLl9wcm9taXNlcyA9IFtdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaik9PntcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goe1xuICAgICAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgICAgICByZWpcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX25vdGlmeShyZXNvbHZlZCkge1xuICAgICAgICBjb25zdCBtZXRob2QgPSByZXNvbHZlZCA/ICdyZXMnIDogJ3Jlaic7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gdGhpcy5fcHJvbWlzZXMgfHwgW107XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBwcm9taXNlcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBwcm9taXNlc1tpXVttZXRob2RdKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFuaW1hdGlvbnMge1xuICAgIGNvbnN0cnVjdG9yKGNoYXJ0LCBjb25maWcpe1xuICAgICAgICB0aGlzLl9jaGFydCA9IGNoYXJ0O1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyZShjb25maWcpO1xuICAgIH1cbiAgICBjb25maWd1cmUoY29uZmlnKSB7XG4gICAgICAgIGlmICghaXNPYmplY3QoY29uZmlnKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbk9wdGlvbnMgPSBPYmplY3Qua2V5cyhkZWZhdWx0cy5hbmltYXRpb24pO1xuICAgICAgICBjb25zdCBhbmltYXRlZFByb3BzID0gdGhpcy5fcHJvcGVydGllcztcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY29uZmlnKS5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgICAgICBjb25zdCBjZmcgPSBjb25maWdba2V5XTtcbiAgICAgICAgICAgIGlmICghaXNPYmplY3QoY2ZnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBhbmltYXRpb25PcHRpb25zKXtcbiAgICAgICAgICAgICAgICByZXNvbHZlZFtvcHRpb25dID0gY2ZnW29wdGlvbl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAoaXNBcnJheShjZmcucHJvcGVydGllcykgJiYgY2ZnLnByb3BlcnRpZXMgfHwgW1xuICAgICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgXSkuZm9yRWFjaCgocHJvcCk9PntcbiAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0ga2V5IHx8ICFhbmltYXRlZFByb3BzLmhhcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRlZFByb3BzLnNldChwcm9wLCByZXNvbHZlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiBfYW5pbWF0ZU9wdGlvbnModGFyZ2V0LCB2YWx1ZXMpIHtcbiAgICAgICAgY29uc3QgbmV3T3B0aW9ucyA9IHZhbHVlcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gcmVzb2x2ZVRhcmdldE9wdGlvbnModGFyZ2V0LCBuZXdPcHRpb25zKTtcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW5pbWF0aW9ucyA9IHRoaXMuX2NyZWF0ZUFuaW1hdGlvbnMob3B0aW9ucywgbmV3T3B0aW9ucyk7XG4gICAgICAgIGlmIChuZXdPcHRpb25zLiRzaGFyZWQpIHtcbiAgICAgICAgICAgIGF3YWl0QWxsKHRhcmdldC5vcHRpb25zLiRhbmltYXRpb25zLCBuZXdPcHRpb25zKS50aGVuKCgpPT57XG4gICAgICAgICAgICAgICAgdGFyZ2V0Lm9wdGlvbnMgPSBuZXdPcHRpb25zO1xuICAgICAgICAgICAgfSwgKCk9PntcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbmltYXRpb25zO1xuICAgIH1cbiBfY3JlYXRlQW5pbWF0aW9ucyh0YXJnZXQsIHZhbHVlcykge1xuICAgICAgICBjb25zdCBhbmltYXRlZFByb3BzID0gdGhpcy5fcHJvcGVydGllcztcbiAgICAgICAgY29uc3QgYW5pbWF0aW9ucyA9IFtdO1xuICAgICAgICBjb25zdCBydW5uaW5nID0gdGFyZ2V0LiRhbmltYXRpb25zIHx8ICh0YXJnZXQuJGFuaW1hdGlvbnMgPSB7fSk7XG4gICAgICAgIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXModmFsdWVzKTtcbiAgICAgICAgY29uc3QgZGF0ZSA9IERhdGUubm93KCk7XG4gICAgICAgIGxldCBpO1xuICAgICAgICBmb3IoaSA9IHByb3BzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKXtcbiAgICAgICAgICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICAgICAgICAgIGlmIChwcm9wLmNoYXJBdCgwKSA9PT0gJyQnKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ29wdGlvbnMnKSB7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5wdXNoKC4uLnRoaXMuX2FuaW1hdGVPcHRpb25zKHRhcmdldCwgdmFsdWVzKSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1twcm9wXTtcbiAgICAgICAgICAgIGxldCBhbmltYXRpb24gPSBydW5uaW5nW3Byb3BdO1xuICAgICAgICAgICAgY29uc3QgY2ZnID0gYW5pbWF0ZWRQcm9wcy5nZXQocHJvcCk7XG4gICAgICAgICAgICBpZiAoYW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNmZyAmJiBhbmltYXRpb24uYWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLnVwZGF0ZShjZmcsIHZhbHVlLCBkYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY2ZnIHx8ICFjZmcuZHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJ1bm5pbmdbcHJvcF0gPSBhbmltYXRpb24gPSBuZXcgQW5pbWF0aW9uKGNmZywgdGFyZ2V0LCBwcm9wLCB2YWx1ZSk7XG4gICAgICAgICAgICBhbmltYXRpb25zLnB1c2goYW5pbWF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYW5pbWF0aW9ucztcbiAgICB9XG4gdXBkYXRlKHRhcmdldCwgdmFsdWVzKSB7XG4gICAgICAgIGlmICh0aGlzLl9wcm9wZXJ0aWVzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCB2YWx1ZXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbnMgPSB0aGlzLl9jcmVhdGVBbmltYXRpb25zKHRhcmdldCwgdmFsdWVzKTtcbiAgICAgICAgaWYgKGFuaW1hdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBhbmltYXRvci5hZGQodGhpcy5fY2hhcnQsIGFuaW1hdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBhd2FpdEFsbChhbmltYXRpb25zLCBwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgcnVubmluZyA9IFtdO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKTtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIGNvbnN0IGFuaW0gPSBhbmltYXRpb25zW2tleXNbaV1dO1xuICAgICAgICBpZiAoYW5pbSAmJiBhbmltLmFjdGl2ZSgpKSB7XG4gICAgICAgICAgICBydW5uaW5nLnB1c2goYW5pbS53YWl0KCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLmFsbChydW5uaW5nKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVUYXJnZXRPcHRpb25zKHRhcmdldCwgbmV3T3B0aW9ucykge1xuICAgIGlmICghbmV3T3B0aW9ucykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBvcHRpb25zID0gdGFyZ2V0Lm9wdGlvbnM7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHRhcmdldC5vcHRpb25zID0gbmV3T3B0aW9ucztcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy4kc2hhcmVkKSB7XG4gICAgICAgIHRhcmdldC5vcHRpb25zID0gb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgICAgICRzaGFyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgJGFuaW1hdGlvbnM6IHt9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gc2NhbGVDbGlwKHNjYWxlLCBhbGxvd2VkT3ZlcmZsb3cpIHtcbiAgICBjb25zdCBvcHRzID0gc2NhbGUgJiYgc2NhbGUub3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCByZXZlcnNlID0gb3B0cy5yZXZlcnNlO1xuICAgIGNvbnN0IG1pbiA9IG9wdHMubWluID09PSB1bmRlZmluZWQgPyBhbGxvd2VkT3ZlcmZsb3cgOiAwO1xuICAgIGNvbnN0IG1heCA9IG9wdHMubWF4ID09PSB1bmRlZmluZWQgPyBhbGxvd2VkT3ZlcmZsb3cgOiAwO1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiByZXZlcnNlID8gbWF4IDogbWluLFxuICAgICAgICBlbmQ6IHJldmVyc2UgPyBtaW4gOiBtYXhcbiAgICB9O1xufVxuZnVuY3Rpb24gZGVmYXVsdENsaXAoeFNjYWxlLCB5U2NhbGUsIGFsbG93ZWRPdmVyZmxvdykge1xuICAgIGlmIChhbGxvd2VkT3ZlcmZsb3cgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgeCA9IHNjYWxlQ2xpcCh4U2NhbGUsIGFsbG93ZWRPdmVyZmxvdyk7XG4gICAgY29uc3QgeSA9IHNjYWxlQ2xpcCh5U2NhbGUsIGFsbG93ZWRPdmVyZmxvdyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG9wOiB5LmVuZCxcbiAgICAgICAgcmlnaHQ6IHguZW5kLFxuICAgICAgICBib3R0b206IHkuc3RhcnQsXG4gICAgICAgIGxlZnQ6IHguc3RhcnRcbiAgICB9O1xufVxuZnVuY3Rpb24gdG9DbGlwKHZhbHVlKSB7XG4gICAgbGV0IHQsIHIsIGIsIGw7XG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICB0ID0gdmFsdWUudG9wO1xuICAgICAgICByID0gdmFsdWUucmlnaHQ7XG4gICAgICAgIGIgPSB2YWx1ZS5ib3R0b207XG4gICAgICAgIGwgPSB2YWx1ZS5sZWZ0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHQgPSByID0gYiA9IGwgPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG9wOiB0LFxuICAgICAgICByaWdodDogcixcbiAgICAgICAgYm90dG9tOiBiLFxuICAgICAgICBsZWZ0OiBsLFxuICAgICAgICBkaXNhYmxlZDogdmFsdWUgPT09IGZhbHNlXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldFNvcnRlZERhdGFzZXRJbmRpY2VzKGNoYXJ0LCBmaWx0ZXJWaXNpYmxlKSB7XG4gICAgY29uc3Qga2V5cyA9IFtdO1xuICAgIGNvbnN0IG1ldGFzZXRzID0gY2hhcnQuX2dldFNvcnRlZERhdGFzZXRNZXRhcyhmaWx0ZXJWaXNpYmxlKTtcbiAgICBsZXQgaSwgaWxlbjtcbiAgICBmb3IoaSA9IDAsIGlsZW4gPSBtZXRhc2V0cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICBrZXlzLnB1c2gobWV0YXNldHNbaV0uaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5cztcbn1cbmZ1bmN0aW9uIGFwcGx5U3RhY2soc3RhY2ssIHZhbHVlLCBkc0luZGV4LCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBrZXlzID0gc3RhY2sua2V5cztcbiAgICBjb25zdCBzaW5nbGVNb2RlID0gb3B0aW9ucy5tb2RlID09PSAnc2luZ2xlJztcbiAgICBsZXQgaSwgaWxlbiwgZGF0YXNldEluZGV4LCBvdGhlclZhbHVlO1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgIGZvcihpID0gMCwgaWxlbiA9IGtleXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgZGF0YXNldEluZGV4ID0gK2tleXNbaV07XG4gICAgICAgIGlmIChkYXRhc2V0SW5kZXggPT09IGRzSW5kZXgpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgb3RoZXJWYWx1ZSA9IHN0YWNrLnZhbHVlc1tkYXRhc2V0SW5kZXhdO1xuICAgICAgICBpZiAoaXNOdW1iZXJGaW5pdGUob3RoZXJWYWx1ZSkgJiYgKHNpbmdsZU1vZGUgfHwgdmFsdWUgPT09IDAgfHwgc2lnbih2YWx1ZSkgPT09IHNpZ24ob3RoZXJWYWx1ZSkpKSB7XG4gICAgICAgICAgICB2YWx1ZSArPSBvdGhlclZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghZm91bmQgJiYgIW9wdGlvbnMuYWxsKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBjb252ZXJ0T2JqZWN0RGF0YVRvQXJyYXkoZGF0YSwgbWV0YSkge1xuICAgIGNvbnN0IHsgaVNjYWxlICwgdlNjYWxlICB9ID0gbWV0YTtcbiAgICBjb25zdCBpQXhpc0tleSA9IGlTY2FsZS5heGlzID09PSAneCcgPyAneCcgOiAneSc7XG4gICAgY29uc3QgdkF4aXNLZXkgPSB2U2NhbGUuYXhpcyA9PT0gJ3gnID8gJ3gnIDogJ3knO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgICBjb25zdCBhZGF0YSA9IG5ldyBBcnJheShrZXlzLmxlbmd0aCk7XG4gICAgbGV0IGksIGlsZW4sIGtleTtcbiAgICBmb3IoaSA9IDAsIGlsZW4gPSBrZXlzLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgIGFkYXRhW2ldID0ge1xuICAgICAgICAgICAgW2lBeGlzS2V5XToga2V5LFxuICAgICAgICAgICAgW3ZBeGlzS2V5XTogZGF0YVtrZXldXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBhZGF0YTtcbn1cbmZ1bmN0aW9uIGlzU3RhY2tlZChzY2FsZSwgbWV0YSkge1xuICAgIGNvbnN0IHN0YWNrZWQgPSBzY2FsZSAmJiBzY2FsZS5vcHRpb25zLnN0YWNrZWQ7XG4gICAgcmV0dXJuIHN0YWNrZWQgfHwgc3RhY2tlZCA9PT0gdW5kZWZpbmVkICYmIG1ldGEuc3RhY2sgIT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldFN0YWNrS2V5KGluZGV4U2NhbGUsIHZhbHVlU2NhbGUsIG1ldGEpIHtcbiAgICByZXR1cm4gYCR7aW5kZXhTY2FsZS5pZH0uJHt2YWx1ZVNjYWxlLmlkfS4ke21ldGEuc3RhY2sgfHwgbWV0YS50eXBlfWA7XG59XG5mdW5jdGlvbiBnZXRVc2VyQm91bmRzKHNjYWxlKSB7XG4gICAgY29uc3QgeyBtaW4gLCBtYXggLCBtaW5EZWZpbmVkICwgbWF4RGVmaW5lZCAgfSA9IHNjYWxlLmdldFVzZXJCb3VuZHMoKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBtaW46IG1pbkRlZmluZWQgPyBtaW4gOiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksXG4gICAgICAgIG1heDogbWF4RGVmaW5lZCA/IG1heCA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxuICAgIH07XG59XG5mdW5jdGlvbiBnZXRPckNyZWF0ZVN0YWNrKHN0YWNrcywgc3RhY2tLZXksIGluZGV4VmFsdWUpIHtcbiAgICBjb25zdCBzdWJTdGFjayA9IHN0YWNrc1tzdGFja0tleV0gfHwgKHN0YWNrc1tzdGFja0tleV0gPSB7fSk7XG4gICAgcmV0dXJuIHN1YlN0YWNrW2luZGV4VmFsdWVdIHx8IChzdWJTdGFja1tpbmRleFZhbHVlXSA9IHt9KTtcbn1cbmZ1bmN0aW9uIGdldExhc3RJbmRleEluU3RhY2soc3RhY2ssIHZTY2FsZSwgcG9zaXRpdmUsIHR5cGUpIHtcbiAgICBmb3IgKGNvbnN0IG1ldGEgb2YgdlNjYWxlLmdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKHR5cGUpLnJldmVyc2UoKSl7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gc3RhY2tbbWV0YS5pbmRleF07XG4gICAgICAgIGlmIChwb3NpdGl2ZSAmJiB2YWx1ZSA+IDAgfHwgIXBvc2l0aXZlICYmIHZhbHVlIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIG1ldGEuaW5kZXg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiB1cGRhdGVTdGFja3MoY29udHJvbGxlciwgcGFyc2VkKSB7XG4gICAgY29uc3QgeyBjaGFydCAsIF9jYWNoZWRNZXRhOiBtZXRhICB9ID0gY29udHJvbGxlcjtcbiAgICBjb25zdCBzdGFja3MgPSBjaGFydC5fc3RhY2tzIHx8IChjaGFydC5fc3RhY2tzID0ge30pO1xuICAgIGNvbnN0IHsgaVNjYWxlICwgdlNjYWxlICwgaW5kZXg6IGRhdGFzZXRJbmRleCAgfSA9IG1ldGE7XG4gICAgY29uc3QgaUF4aXMgPSBpU2NhbGUuYXhpcztcbiAgICBjb25zdCB2QXhpcyA9IHZTY2FsZS5heGlzO1xuICAgIGNvbnN0IGtleSA9IGdldFN0YWNrS2V5KGlTY2FsZSwgdlNjYWxlLCBtZXRhKTtcbiAgICBjb25zdCBpbGVuID0gcGFyc2VkLmxlbmd0aDtcbiAgICBsZXQgc3RhY2s7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBwYXJzZWRbaV07XG4gICAgICAgIGNvbnN0IHsgW2lBeGlzXTogaW5kZXggLCBbdkF4aXNdOiB2YWx1ZSAgfSA9IGl0ZW07XG4gICAgICAgIGNvbnN0IGl0ZW1TdGFja3MgPSBpdGVtLl9zdGFja3MgfHwgKGl0ZW0uX3N0YWNrcyA9IHt9KTtcbiAgICAgICAgc3RhY2sgPSBpdGVtU3RhY2tzW3ZBeGlzXSA9IGdldE9yQ3JlYXRlU3RhY2soc3RhY2tzLCBrZXksIGluZGV4KTtcbiAgICAgICAgc3RhY2tbZGF0YXNldEluZGV4XSA9IHZhbHVlO1xuICAgICAgICBzdGFjay5fdG9wID0gZ2V0TGFzdEluZGV4SW5TdGFjayhzdGFjaywgdlNjYWxlLCB0cnVlLCBtZXRhLnR5cGUpO1xuICAgICAgICBzdGFjay5fYm90dG9tID0gZ2V0TGFzdEluZGV4SW5TdGFjayhzdGFjaywgdlNjYWxlLCBmYWxzZSwgbWV0YS50eXBlKTtcbiAgICAgICAgY29uc3QgdmlzdWFsVmFsdWVzID0gc3RhY2suX3Zpc3VhbFZhbHVlcyB8fCAoc3RhY2suX3Zpc3VhbFZhbHVlcyA9IHt9KTtcbiAgICAgICAgdmlzdWFsVmFsdWVzW2RhdGFzZXRJbmRleF0gPSB2YWx1ZTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRGaXJzdFNjYWxlSWQoY2hhcnQsIGF4aXMpIHtcbiAgICBjb25zdCBzY2FsZXMgPSBjaGFydC5zY2FsZXM7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNjYWxlcykuZmlsdGVyKChrZXkpPT5zY2FsZXNba2V5XS5heGlzID09PSBheGlzKS5zaGlmdCgpO1xufVxuZnVuY3Rpb24gY3JlYXRlRGF0YXNldENvbnRleHQocGFyZW50LCBpbmRleCkge1xuICAgIHJldHVybiBjcmVhdGVDb250ZXh0KHBhcmVudCwge1xuICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICBkYXRhc2V0OiB1bmRlZmluZWQsXG4gICAgICAgIGRhdGFzZXRJbmRleDogaW5kZXgsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBtb2RlOiAnZGVmYXVsdCcsXG4gICAgICAgIHR5cGU6ICdkYXRhc2V0J1xuICAgIH0pO1xufVxuZnVuY3Rpb24gY3JlYXRlRGF0YUNvbnRleHQocGFyZW50LCBpbmRleCwgZWxlbWVudCkge1xuICAgIHJldHVybiBjcmVhdGVDb250ZXh0KHBhcmVudCwge1xuICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICBkYXRhSW5kZXg6IGluZGV4LFxuICAgICAgICBwYXJzZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgcmF3OiB1bmRlZmluZWQsXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBtb2RlOiAnZGVmYXVsdCcsXG4gICAgICAgIHR5cGU6ICdkYXRhJ1xuICAgIH0pO1xufVxuZnVuY3Rpb24gY2xlYXJTdGFja3MobWV0YSwgaXRlbXMpIHtcbiAgICBjb25zdCBkYXRhc2V0SW5kZXggPSBtZXRhLmNvbnRyb2xsZXIuaW5kZXg7XG4gICAgY29uc3QgYXhpcyA9IG1ldGEudlNjYWxlICYmIG1ldGEudlNjYWxlLmF4aXM7XG4gICAgaWYgKCFheGlzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXRlbXMgPSBpdGVtcyB8fCBtZXRhLl9wYXJzZWQ7XG4gICAgZm9yIChjb25zdCBwYXJzZWQgb2YgaXRlbXMpe1xuICAgICAgICBjb25zdCBzdGFja3MgPSBwYXJzZWQuX3N0YWNrcztcbiAgICAgICAgaWYgKCFzdGFja3MgfHwgc3RhY2tzW2F4aXNdID09PSB1bmRlZmluZWQgfHwgc3RhY2tzW2F4aXNdW2RhdGFzZXRJbmRleF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBzdGFja3NbYXhpc11bZGF0YXNldEluZGV4XTtcbiAgICAgICAgaWYgKHN0YWNrc1theGlzXS5fdmlzdWFsVmFsdWVzICE9PSB1bmRlZmluZWQgJiYgc3RhY2tzW2F4aXNdLl92aXN1YWxWYWx1ZXNbZGF0YXNldEluZGV4XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkZWxldGUgc3RhY2tzW2F4aXNdLl92aXN1YWxWYWx1ZXNbZGF0YXNldEluZGV4XTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmNvbnN0IGlzRGlyZWN0VXBkYXRlTW9kZSA9IChtb2RlKT0+bW9kZSA9PT0gJ3Jlc2V0JyB8fCBtb2RlID09PSAnbm9uZSc7XG5jb25zdCBjbG9uZUlmTm90U2hhcmVkID0gKGNhY2hlZCwgc2hhcmVkKT0+c2hhcmVkID8gY2FjaGVkIDogT2JqZWN0LmFzc2lnbih7fSwgY2FjaGVkKTtcbmNvbnN0IGNyZWF0ZVN0YWNrID0gKGNhblN0YWNrLCBtZXRhLCBjaGFydCk9PmNhblN0YWNrICYmICFtZXRhLmhpZGRlbiAmJiBtZXRhLl9zdGFja2VkICYmIHtcbiAgICAgICAga2V5czogZ2V0U29ydGVkRGF0YXNldEluZGljZXMoY2hhcnQsIHRydWUpLFxuICAgICAgICB2YWx1ZXM6IG51bGxcbiAgICB9O1xuY2xhc3MgRGF0YXNldENvbnRyb2xsZXIge1xuIHN0YXRpYyBkZWZhdWx0cyA9IHt9O1xuIHN0YXRpYyBkYXRhc2V0RWxlbWVudFR5cGUgPSBudWxsO1xuIHN0YXRpYyBkYXRhRWxlbWVudFR5cGUgPSBudWxsO1xuIGNvbnN0cnVjdG9yKGNoYXJ0LCBkYXRhc2V0SW5kZXgpe1xuICAgICAgICB0aGlzLmNoYXJ0ID0gY2hhcnQ7XG4gICAgICAgIHRoaXMuX2N0eCA9IGNoYXJ0LmN0eDtcbiAgICAgICAgdGhpcy5pbmRleCA9IGRhdGFzZXRJbmRleDtcbiAgICAgICAgdGhpcy5fY2FjaGVkRGF0YU9wdHMgPSB7fTtcbiAgICAgICAgdGhpcy5fY2FjaGVkTWV0YSA9IHRoaXMuZ2V0TWV0YSgpO1xuICAgICAgICB0aGlzLl90eXBlID0gdGhpcy5fY2FjaGVkTWV0YS50eXBlO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLl9wYXJzaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2RhdGEgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX29iamVjdERhdGEgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3NoYXJlZE9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2RyYXdTdGFydCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fZHJhd0NvdW50ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmVuYWJsZU9wdGlvblNoYXJpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdXBwb3J0c0RlY2ltYXRpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy4kY29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fc3luY0xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5kYXRhc2V0RWxlbWVudFR5cGUgPSBuZXcudGFyZ2V0LmRhdGFzZXRFbGVtZW50VHlwZTtcbiAgICAgICAgdGhpcy5kYXRhRWxlbWVudFR5cGUgPSBuZXcudGFyZ2V0LmRhdGFFbGVtZW50VHlwZTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgfVxuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyZSgpO1xuICAgICAgICB0aGlzLmxpbmtTY2FsZXMoKTtcbiAgICAgICAgbWV0YS5fc3RhY2tlZCA9IGlzU3RhY2tlZChtZXRhLnZTY2FsZSwgbWV0YSk7XG4gICAgICAgIHRoaXMuYWRkRWxlbWVudHMoKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5maWxsICYmICF0aGlzLmNoYXJ0LmlzUGx1Z2luRW5hYmxlZCgnZmlsbGVyJykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlRyaWVkIHRvIHVzZSB0aGUgJ2ZpbGwnIG9wdGlvbiB3aXRob3V0IHRoZSAnRmlsbGVyJyBwbHVnaW4gZW5hYmxlZC4gUGxlYXNlIGltcG9ydCBhbmQgcmVnaXN0ZXIgdGhlICdGaWxsZXInIHBsdWdpbiBhbmQgbWFrZSBzdXJlIGl0IGlzIG5vdCBkaXNhYmxlZCBpbiB0aGUgb3B0aW9uc1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVJbmRleChkYXRhc2V0SW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXggIT09IGRhdGFzZXRJbmRleCkge1xuICAgICAgICAgICAgY2xlYXJTdGFja3ModGhpcy5fY2FjaGVkTWV0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmRleCA9IGRhdGFzZXRJbmRleDtcbiAgICB9XG4gICAgbGlua1NjYWxlcygpIHtcbiAgICAgICAgY29uc3QgY2hhcnQgPSB0aGlzLmNoYXJ0O1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgZGF0YXNldCA9IHRoaXMuZ2V0RGF0YXNldCgpO1xuICAgICAgICBjb25zdCBjaG9vc2VJZCA9IChheGlzLCB4LCB5LCByKT0+YXhpcyA9PT0gJ3gnID8geCA6IGF4aXMgPT09ICdyJyA/IHIgOiB5O1xuICAgICAgICBjb25zdCB4aWQgPSBtZXRhLnhBeGlzSUQgPSB2YWx1ZU9yRGVmYXVsdChkYXRhc2V0LnhBeGlzSUQsIGdldEZpcnN0U2NhbGVJZChjaGFydCwgJ3gnKSk7XG4gICAgICAgIGNvbnN0IHlpZCA9IG1ldGEueUF4aXNJRCA9IHZhbHVlT3JEZWZhdWx0KGRhdGFzZXQueUF4aXNJRCwgZ2V0Rmlyc3RTY2FsZUlkKGNoYXJ0LCAneScpKTtcbiAgICAgICAgY29uc3QgcmlkID0gbWV0YS5yQXhpc0lEID0gdmFsdWVPckRlZmF1bHQoZGF0YXNldC5yQXhpc0lELCBnZXRGaXJzdFNjYWxlSWQoY2hhcnQsICdyJykpO1xuICAgICAgICBjb25zdCBpbmRleEF4aXMgPSBtZXRhLmluZGV4QXhpcztcbiAgICAgICAgY29uc3QgaWlkID0gbWV0YS5pQXhpc0lEID0gY2hvb3NlSWQoaW5kZXhBeGlzLCB4aWQsIHlpZCwgcmlkKTtcbiAgICAgICAgY29uc3QgdmlkID0gbWV0YS52QXhpc0lEID0gY2hvb3NlSWQoaW5kZXhBeGlzLCB5aWQsIHhpZCwgcmlkKTtcbiAgICAgICAgbWV0YS54U2NhbGUgPSB0aGlzLmdldFNjYWxlRm9ySWQoeGlkKTtcbiAgICAgICAgbWV0YS55U2NhbGUgPSB0aGlzLmdldFNjYWxlRm9ySWQoeWlkKTtcbiAgICAgICAgbWV0YS5yU2NhbGUgPSB0aGlzLmdldFNjYWxlRm9ySWQocmlkKTtcbiAgICAgICAgbWV0YS5pU2NhbGUgPSB0aGlzLmdldFNjYWxlRm9ySWQoaWlkKTtcbiAgICAgICAgbWV0YS52U2NhbGUgPSB0aGlzLmdldFNjYWxlRm9ySWQodmlkKTtcbiAgICB9XG4gICAgZ2V0RGF0YXNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1t0aGlzLmluZGV4XTtcbiAgICB9XG4gICAgZ2V0TWV0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhcnQuZ2V0RGF0YXNldE1ldGEodGhpcy5pbmRleCk7XG4gICAgfVxuIGdldFNjYWxlRm9ySWQoc2NhbGVJRCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFydC5zY2FsZXNbc2NhbGVJRF07XG4gICAgfVxuIF9nZXRPdGhlclNjYWxlKHNjYWxlKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICByZXR1cm4gc2NhbGUgPT09IG1ldGEuaVNjYWxlID8gbWV0YS52U2NhbGUgOiBtZXRhLmlTY2FsZTtcbiAgICB9XG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgncmVzZXQnKTtcbiAgICB9XG4gX2Rlc3Ryb3koKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBpZiAodGhpcy5fZGF0YSkge1xuICAgICAgICAgICAgdW5saXN0ZW5BcnJheUV2ZW50cyh0aGlzLl9kYXRhLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YS5fc3RhY2tlZCkge1xuICAgICAgICAgICAgY2xlYXJTdGFja3MobWV0YSk7XG4gICAgICAgIH1cbiAgICB9XG4gX2RhdGFDaGVjaygpIHtcbiAgICAgICAgY29uc3QgZGF0YXNldCA9IHRoaXMuZ2V0RGF0YXNldCgpO1xuICAgICAgICBjb25zdCBkYXRhID0gZGF0YXNldC5kYXRhIHx8IChkYXRhc2V0LmRhdGEgPSBbXSk7XG4gICAgICAgIGNvbnN0IF9kYXRhID0gdGhpcy5fZGF0YTtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBjb252ZXJ0T2JqZWN0RGF0YVRvQXJyYXkoZGF0YSwgbWV0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoX2RhdGEgIT09IGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgICAgIHVubGlzdGVuQXJyYXlFdmVudHMoX2RhdGEsIHRoaXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICAgICAgICAgIGNsZWFyU3RhY2tzKG1ldGEpO1xuICAgICAgICAgICAgICAgIG1ldGEuX3BhcnNlZCA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEgJiYgT2JqZWN0LmlzRXh0ZW5zaWJsZShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGxpc3RlbkFycmF5RXZlbnRzKGRhdGEsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fc3luY0xpc3QgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZEVsZW1lbnRzKCkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgdGhpcy5fZGF0YUNoZWNrKCk7XG4gICAgICAgIGlmICh0aGlzLmRhdGFzZXRFbGVtZW50VHlwZSkge1xuICAgICAgICAgICAgbWV0YS5kYXRhc2V0ID0gbmV3IHRoaXMuZGF0YXNldEVsZW1lbnRUeXBlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYnVpbGRPclVwZGF0ZUVsZW1lbnRzKHJlc2V0TmV3RWxlbWVudHMpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIGNvbnN0IGRhdGFzZXQgPSB0aGlzLmdldERhdGFzZXQoKTtcbiAgICAgICAgbGV0IHN0YWNrQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9kYXRhQ2hlY2soKTtcbiAgICAgICAgY29uc3Qgb2xkU3RhY2tlZCA9IG1ldGEuX3N0YWNrZWQ7XG4gICAgICAgIG1ldGEuX3N0YWNrZWQgPSBpc1N0YWNrZWQobWV0YS52U2NhbGUsIG1ldGEpO1xuICAgICAgICBpZiAobWV0YS5zdGFjayAhPT0gZGF0YXNldC5zdGFjaykge1xuICAgICAgICAgICAgc3RhY2tDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNsZWFyU3RhY2tzKG1ldGEpO1xuICAgICAgICAgICAgbWV0YS5zdGFjayA9IGRhdGFzZXQuc3RhY2s7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVzeW5jRWxlbWVudHMocmVzZXROZXdFbGVtZW50cyk7XG4gICAgICAgIGlmIChzdGFja0NoYW5nZWQgfHwgb2xkU3RhY2tlZCAhPT0gbWV0YS5fc3RhY2tlZCkge1xuICAgICAgICAgICAgdXBkYXRlU3RhY2tzKHRoaXMsIG1ldGEuX3BhcnNlZCk7XG4gICAgICAgICAgICBtZXRhLl9zdGFja2VkID0gaXNTdGFja2VkKG1ldGEudlNjYWxlLCBtZXRhKTtcbiAgICAgICAgfVxuICAgIH1cbiBjb25maWd1cmUoKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY2hhcnQuY29uZmlnO1xuICAgICAgICBjb25zdCBzY29wZUtleXMgPSBjb25maWcuZGF0YXNldFNjb3BlS2V5cyh0aGlzLl90eXBlKTtcbiAgICAgICAgY29uc3Qgc2NvcGVzID0gY29uZmlnLmdldE9wdGlvblNjb3Blcyh0aGlzLmdldERhdGFzZXQoKSwgc2NvcGVLZXlzLCB0cnVlKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gY29uZmlnLmNyZWF0ZVJlc29sdmVyKHNjb3BlcywgdGhpcy5nZXRDb250ZXh0KCkpO1xuICAgICAgICB0aGlzLl9wYXJzaW5nID0gdGhpcy5vcHRpb25zLnBhcnNpbmc7XG4gICAgICAgIHRoaXMuX2NhY2hlZERhdGFPcHRzID0ge307XG4gICAgfVxuIHBhcnNlKHN0YXJ0LCBjb3VudCkge1xuICAgICAgICBjb25zdCB7IF9jYWNoZWRNZXRhOiBtZXRhICwgX2RhdGE6IGRhdGEgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IGlTY2FsZSAsIF9zdGFja2VkICB9ID0gbWV0YTtcbiAgICAgICAgY29uc3QgaUF4aXMgPSBpU2NhbGUuYXhpcztcbiAgICAgICAgbGV0IHNvcnRlZCA9IHN0YXJ0ID09PSAwICYmIGNvdW50ID09PSBkYXRhLmxlbmd0aCA/IHRydWUgOiBtZXRhLl9zb3J0ZWQ7XG4gICAgICAgIGxldCBwcmV2ID0gc3RhcnQgPiAwICYmIG1ldGEuX3BhcnNlZFtzdGFydCAtIDFdO1xuICAgICAgICBsZXQgaSwgY3VyLCBwYXJzZWQ7XG4gICAgICAgIGlmICh0aGlzLl9wYXJzaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgbWV0YS5fcGFyc2VkID0gZGF0YTtcbiAgICAgICAgICAgIG1ldGEuX3NvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICBwYXJzZWQgPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzQXJyYXkoZGF0YVtzdGFydF0pKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkID0gdGhpcy5wYXJzZUFycmF5RGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkYXRhW3N0YXJ0XSkpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWQgPSB0aGlzLnBhcnNlT2JqZWN0RGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJzZWQgPSB0aGlzLnBhcnNlUHJpbWl0aXZlRGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaXNOb3RJbk9yZGVyQ29tcGFyZWRUb1ByZXYgPSAoKT0+Y3VyW2lBeGlzXSA9PT0gbnVsbCB8fCBwcmV2ICYmIGN1cltpQXhpc10gPCBwcmV2W2lBeGlzXTtcbiAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IGNvdW50OyArK2kpe1xuICAgICAgICAgICAgICAgIG1ldGEuX3BhcnNlZFtpICsgc3RhcnRdID0gY3VyID0gcGFyc2VkW2ldO1xuICAgICAgICAgICAgICAgIGlmIChzb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm90SW5PcmRlckNvbXBhcmVkVG9QcmV2KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHByZXYgPSBjdXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWV0YS5fc29ydGVkID0gc29ydGVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfc3RhY2tlZCkge1xuICAgICAgICAgICAgdXBkYXRlU3RhY2tzKHRoaXMsIHBhcnNlZCk7XG4gICAgICAgIH1cbiAgICB9XG4gcGFyc2VQcmltaXRpdmVEYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgICAgICBjb25zdCB7IGlTY2FsZSAsIHZTY2FsZSAgfSA9IG1ldGE7XG4gICAgICAgIGNvbnN0IGlBeGlzID0gaVNjYWxlLmF4aXM7XG4gICAgICAgIGNvbnN0IHZBeGlzID0gdlNjYWxlLmF4aXM7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IGlTY2FsZS5nZXRMYWJlbHMoKTtcbiAgICAgICAgY29uc3Qgc2luZ2xlU2NhbGUgPSBpU2NhbGUgPT09IHZTY2FsZTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gbmV3IEFycmF5KGNvdW50KTtcbiAgICAgICAgbGV0IGksIGlsZW4sIGluZGV4O1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSBjb3VudDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBpbmRleCA9IGkgKyBzdGFydDtcbiAgICAgICAgICAgIHBhcnNlZFtpXSA9IHtcbiAgICAgICAgICAgICAgICBbaUF4aXNdOiBzaW5nbGVTY2FsZSB8fCBpU2NhbGUucGFyc2UobGFiZWxzW2luZGV4XSwgaW5kZXgpLFxuICAgICAgICAgICAgICAgIFt2QXhpc106IHZTY2FsZS5wYXJzZShkYXRhW2luZGV4XSwgaW5kZXgpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfVxuIHBhcnNlQXJyYXlEYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgICAgICBjb25zdCB7IHhTY2FsZSAsIHlTY2FsZSAgfSA9IG1ldGE7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgICAgIGxldCBpLCBpbGVuLCBpbmRleCwgaXRlbTtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gY291bnQ7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgaW5kZXggPSBpICsgc3RhcnQ7XG4gICAgICAgICAgICBpdGVtID0gZGF0YVtpbmRleF07XG4gICAgICAgICAgICBwYXJzZWRbaV0gPSB7XG4gICAgICAgICAgICAgICAgeDogeFNjYWxlLnBhcnNlKGl0ZW1bMF0sIGluZGV4KSxcbiAgICAgICAgICAgICAgICB5OiB5U2NhbGUucGFyc2UoaXRlbVsxXSwgaW5kZXgpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfVxuIHBhcnNlT2JqZWN0RGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpIHtcbiAgICAgICAgY29uc3QgeyB4U2NhbGUgLCB5U2NhbGUgIH0gPSBtZXRhO1xuICAgICAgICBjb25zdCB7IHhBeGlzS2V5ID0neCcgLCB5QXhpc0tleSA9J3knICB9ID0gdGhpcy5fcGFyc2luZztcbiAgICAgICAgY29uc3QgcGFyc2VkID0gbmV3IEFycmF5KGNvdW50KTtcbiAgICAgICAgbGV0IGksIGlsZW4sIGluZGV4LCBpdGVtO1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSBjb3VudDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBpbmRleCA9IGkgKyBzdGFydDtcbiAgICAgICAgICAgIGl0ZW0gPSBkYXRhW2luZGV4XTtcbiAgICAgICAgICAgIHBhcnNlZFtpXSA9IHtcbiAgICAgICAgICAgICAgICB4OiB4U2NhbGUucGFyc2UocmVzb2x2ZU9iamVjdEtleShpdGVtLCB4QXhpc0tleSksIGluZGV4KSxcbiAgICAgICAgICAgICAgICB5OiB5U2NhbGUucGFyc2UocmVzb2x2ZU9iamVjdEtleShpdGVtLCB5QXhpc0tleSksIGluZGV4KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH1cbiBnZXRQYXJzZWQoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZE1ldGEuX3BhcnNlZFtpbmRleF07XG4gICAgfVxuIGdldERhdGFFbGVtZW50KGluZGV4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRNZXRhLmRhdGFbaW5kZXhdO1xuICAgIH1cbiBhcHBseVN0YWNrKHNjYWxlLCBwYXJzZWQsIG1vZGUpIHtcbiAgICAgICAgY29uc3QgY2hhcnQgPSB0aGlzLmNoYXJ0O1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZWRbc2NhbGUuYXhpc107XG4gICAgICAgIGNvbnN0IHN0YWNrID0ge1xuICAgICAgICAgICAga2V5czogZ2V0U29ydGVkRGF0YXNldEluZGljZXMoY2hhcnQsIHRydWUpLFxuICAgICAgICAgICAgdmFsdWVzOiBwYXJzZWQuX3N0YWNrc1tzY2FsZS5heGlzXS5fdmlzdWFsVmFsdWVzXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhcHBseVN0YWNrKHN0YWNrLCB2YWx1ZSwgbWV0YS5pbmRleCwge1xuICAgICAgICAgICAgbW9kZVxuICAgICAgICB9KTtcbiAgICB9XG4gdXBkYXRlUmFuZ2VGcm9tUGFyc2VkKHJhbmdlLCBzY2FsZSwgcGFyc2VkLCBzdGFjaykge1xuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHBhcnNlZFtzY2FsZS5heGlzXTtcbiAgICAgICAgbGV0IHZhbHVlID0gcGFyc2VkVmFsdWUgPT09IG51bGwgPyBOYU4gOiBwYXJzZWRWYWx1ZTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gc3RhY2sgJiYgcGFyc2VkLl9zdGFja3Nbc2NhbGUuYXhpc107XG4gICAgICAgIGlmIChzdGFjayAmJiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIHN0YWNrLnZhbHVlcyA9IHZhbHVlcztcbiAgICAgICAgICAgIHZhbHVlID0gYXBwbHlTdGFjayhzdGFjaywgcGFyc2VkVmFsdWUsIHRoaXMuX2NhY2hlZE1ldGEuaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJhbmdlLm1pbiA9IE1hdGgubWluKHJhbmdlLm1pbiwgdmFsdWUpO1xuICAgICAgICByYW5nZS5tYXggPSBNYXRoLm1heChyYW5nZS5tYXgsIHZhbHVlKTtcbiAgICB9XG4gZ2V0TWluTWF4KHNjYWxlLCBjYW5TdGFjaykge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgX3BhcnNlZCA9IG1ldGEuX3BhcnNlZDtcbiAgICAgICAgY29uc3Qgc29ydGVkID0gbWV0YS5fc29ydGVkICYmIHNjYWxlID09PSBtZXRhLmlTY2FsZTtcbiAgICAgICAgY29uc3QgaWxlbiA9IF9wYXJzZWQubGVuZ3RoO1xuICAgICAgICBjb25zdCBvdGhlclNjYWxlID0gdGhpcy5fZ2V0T3RoZXJTY2FsZShzY2FsZSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY3JlYXRlU3RhY2soY2FuU3RhY2ssIG1ldGEsIHRoaXMuY2hhcnQpO1xuICAgICAgICBjb25zdCByYW5nZSA9IHtcbiAgICAgICAgICAgIG1pbjogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgICAgICAgbWF4OiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyBtaW46IG90aGVyTWluICwgbWF4OiBvdGhlck1heCAgfSA9IGdldFVzZXJCb3VuZHMob3RoZXJTY2FsZSk7XG4gICAgICAgIGxldCBpLCBwYXJzZWQ7XG4gICAgICAgIGZ1bmN0aW9uIF9za2lwKCkge1xuICAgICAgICAgICAgcGFyc2VkID0gX3BhcnNlZFtpXTtcbiAgICAgICAgICAgIGNvbnN0IG90aGVyVmFsdWUgPSBwYXJzZWRbb3RoZXJTY2FsZS5heGlzXTtcbiAgICAgICAgICAgIHJldHVybiAhaXNOdW1iZXJGaW5pdGUocGFyc2VkW3NjYWxlLmF4aXNdKSB8fCBvdGhlck1pbiA+IG90aGVyVmFsdWUgfHwgb3RoZXJNYXggPCBvdGhlclZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGZvcihpID0gMDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBpZiAoX3NraXAoKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVSYW5nZUZyb21QYXJzZWQocmFuZ2UsIHNjYWxlLCBwYXJzZWQsIHN0YWNrKTtcbiAgICAgICAgICAgIGlmIChzb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc29ydGVkKSB7XG4gICAgICAgICAgICBmb3IoaSA9IGlsZW4gLSAxOyBpID49IDA7IC0taSl7XG4gICAgICAgICAgICAgICAgaWYgKF9za2lwKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUmFuZ2VGcm9tUGFyc2VkKHJhbmdlLCBzY2FsZSwgcGFyc2VkLCBzdGFjayk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH1cbiAgICBnZXRBbGxQYXJzZWRWYWx1ZXMoc2NhbGUpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5fY2FjaGVkTWV0YS5fcGFyc2VkO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgbGV0IGksIGlsZW4sIHZhbHVlO1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSBwYXJzZWQubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VkW2ldW3NjYWxlLmF4aXNdO1xuICAgICAgICAgICAgaWYgKGlzTnVtYmVyRmluaXRlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cbiBnZXRNYXhPdmVyZmxvdygpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiBnZXRMYWJlbEFuZFZhbHVlKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBpU2NhbGUgPSBtZXRhLmlTY2FsZTtcbiAgICAgICAgY29uc3QgdlNjYWxlID0gbWV0YS52U2NhbGU7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuZ2V0UGFyc2VkKGluZGV4KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhYmVsOiBpU2NhbGUgPyAnJyArIGlTY2FsZS5nZXRMYWJlbEZvclZhbHVlKHBhcnNlZFtpU2NhbGUuYXhpc10pIDogJycsXG4gICAgICAgICAgICB2YWx1ZTogdlNjYWxlID8gJycgKyB2U2NhbGUuZ2V0TGFiZWxGb3JWYWx1ZShwYXJzZWRbdlNjYWxlLmF4aXNdKSA6ICcnXG4gICAgICAgIH07XG4gICAgfVxuIF91cGRhdGUobW9kZSkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgdGhpcy51cGRhdGUobW9kZSB8fCAnZGVmYXVsdCcpO1xuICAgICAgICBtZXRhLl9jbGlwID0gdG9DbGlwKHZhbHVlT3JEZWZhdWx0KHRoaXMub3B0aW9ucy5jbGlwLCBkZWZhdWx0Q2xpcChtZXRhLnhTY2FsZSwgbWV0YS55U2NhbGUsIHRoaXMuZ2V0TWF4T3ZlcmZsb3coKSkpKTtcbiAgICB9XG4gdXBkYXRlKG1vZGUpIHt9XG4gICAgZHJhdygpIHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fY3R4O1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IG1ldGEuZGF0YSB8fCBbXTtcbiAgICAgICAgY29uc3QgYXJlYSA9IGNoYXJ0LmNoYXJ0QXJlYTtcbiAgICAgICAgY29uc3QgYWN0aXZlID0gW107XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5fZHJhd1N0YXJ0IHx8IDA7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy5fZHJhd0NvdW50IHx8IGVsZW1lbnRzLmxlbmd0aCAtIHN0YXJ0O1xuICAgICAgICBjb25zdCBkcmF3QWN0aXZlRWxlbWVudHNPblRvcCA9IHRoaXMub3B0aW9ucy5kcmF3QWN0aXZlRWxlbWVudHNPblRvcDtcbiAgICAgICAgbGV0IGk7XG4gICAgICAgIGlmIChtZXRhLmRhdGFzZXQpIHtcbiAgICAgICAgICAgIG1ldGEuZGF0YXNldC5kcmF3KGN0eCwgYXJlYSwgc3RhcnQsIGNvdW50KTtcbiAgICAgICAgfVxuICAgICAgICBmb3IoaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3VudDsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tpXTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmhpZGRlbikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuYWN0aXZlICYmIGRyYXdBY3RpdmVFbGVtZW50c09uVG9wKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuZHJhdyhjdHgsIGFyZWEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvcihpID0gMDsgaSA8IGFjdGl2ZS5sZW5ndGg7ICsraSl7XG4gICAgICAgICAgICBhY3RpdmVbaV0uZHJhdyhjdHgsIGFyZWEpO1xuICAgICAgICB9XG4gICAgfVxuIGdldFN0eWxlKGluZGV4LCBhY3RpdmUpIHtcbiAgICAgICAgY29uc3QgbW9kZSA9IGFjdGl2ZSA/ICdhY3RpdmUnIDogJ2RlZmF1bHQnO1xuICAgICAgICByZXR1cm4gaW5kZXggPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9jYWNoZWRNZXRhLmRhdGFzZXQgPyB0aGlzLnJlc29sdmVEYXRhc2V0RWxlbWVudE9wdGlvbnMobW9kZSkgOiB0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaW5kZXggfHwgMCwgbW9kZSk7XG4gICAgfVxuIGdldENvbnRleHQoaW5kZXgsIGFjdGl2ZSwgbW9kZSkge1xuICAgICAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5nZXREYXRhc2V0KCk7XG4gICAgICAgIGxldCBjb250ZXh0O1xuICAgICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMuX2NhY2hlZE1ldGEuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9jYWNoZWRNZXRhLmRhdGFbaW5kZXhdO1xuICAgICAgICAgICAgY29udGV4dCA9IGVsZW1lbnQuJGNvbnRleHQgfHwgKGVsZW1lbnQuJGNvbnRleHQgPSBjcmVhdGVEYXRhQ29udGV4dCh0aGlzLmdldENvbnRleHQoKSwgaW5kZXgsIGVsZW1lbnQpKTtcbiAgICAgICAgICAgIGNvbnRleHQucGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaW5kZXgpO1xuICAgICAgICAgICAgY29udGV4dC5yYXcgPSBkYXRhc2V0LmRhdGFbaW5kZXhdO1xuICAgICAgICAgICAgY29udGV4dC5pbmRleCA9IGNvbnRleHQuZGF0YUluZGV4ID0gaW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gdGhpcy4kY29udGV4dCB8fCAodGhpcy4kY29udGV4dCA9IGNyZWF0ZURhdGFzZXRDb250ZXh0KHRoaXMuY2hhcnQuZ2V0Q29udGV4dCgpLCB0aGlzLmluZGV4KSk7XG4gICAgICAgICAgICBjb250ZXh0LmRhdGFzZXQgPSBkYXRhc2V0O1xuICAgICAgICAgICAgY29udGV4dC5pbmRleCA9IGNvbnRleHQuZGF0YXNldEluZGV4ID0gdGhpcy5pbmRleDtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LmFjdGl2ZSA9ICEhYWN0aXZlO1xuICAgICAgICBjb250ZXh0Lm1vZGUgPSBtb2RlO1xuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG4gcmVzb2x2ZURhdGFzZXRFbGVtZW50T3B0aW9ucyhtb2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlRWxlbWVudE9wdGlvbnModGhpcy5kYXRhc2V0RWxlbWVudFR5cGUuaWQsIG1vZGUpO1xuICAgIH1cbiByZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGluZGV4LCBtb2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlRWxlbWVudE9wdGlvbnModGhpcy5kYXRhRWxlbWVudFR5cGUuaWQsIG1vZGUsIGluZGV4KTtcbiAgICB9XG4gX3Jlc29sdmVFbGVtZW50T3B0aW9ucyhlbGVtZW50VHlwZSwgbW9kZSA9ICdkZWZhdWx0JywgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlID0gbW9kZSA9PT0gJ2FjdGl2ZSc7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy5fY2FjaGVkRGF0YU9wdHM7XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gZWxlbWVudFR5cGUgKyAnLScgKyBtb2RlO1xuICAgICAgICBjb25zdCBjYWNoZWQgPSBjYWNoZVtjYWNoZUtleV07XG4gICAgICAgIGNvbnN0IHNoYXJpbmcgPSB0aGlzLmVuYWJsZU9wdGlvblNoYXJpbmcgJiYgZGVmaW5lZChpbmRleCk7XG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9uZUlmTm90U2hhcmVkKGNhY2hlZCwgc2hhcmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jaGFydC5jb25maWc7XG4gICAgICAgIGNvbnN0IHNjb3BlS2V5cyA9IGNvbmZpZy5kYXRhc2V0RWxlbWVudFNjb3BlS2V5cyh0aGlzLl90eXBlLCBlbGVtZW50VHlwZSk7XG4gICAgICAgIGNvbnN0IHByZWZpeGVzID0gYWN0aXZlID8gW1xuICAgICAgICAgICAgYCR7ZWxlbWVudFR5cGV9SG92ZXJgLFxuICAgICAgICAgICAgJ2hvdmVyJyxcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlLFxuICAgICAgICAgICAgJydcbiAgICAgICAgXSA6IFtcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlLFxuICAgICAgICAgICAgJydcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3Qgc2NvcGVzID0gY29uZmlnLmdldE9wdGlvblNjb3Blcyh0aGlzLmdldERhdGFzZXQoKSwgc2NvcGVLZXlzKTtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0cy5lbGVtZW50c1tlbGVtZW50VHlwZV0pO1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gKCk9PnRoaXMuZ2V0Q29udGV4dChpbmRleCwgYWN0aXZlLCBtb2RlKTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gY29uZmlnLnJlc29sdmVOYW1lZE9wdGlvbnMoc2NvcGVzLCBuYW1lcywgY29udGV4dCwgcHJlZml4ZXMpO1xuICAgICAgICBpZiAodmFsdWVzLiRzaGFyZWQpIHtcbiAgICAgICAgICAgIHZhbHVlcy4kc2hhcmVkID0gc2hhcmluZztcbiAgICAgICAgICAgIGNhY2hlW2NhY2hlS2V5XSA9IE9iamVjdC5mcmVlemUoY2xvbmVJZk5vdFNoYXJlZCh2YWx1ZXMsIHNoYXJpbmcpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cbiBfcmVzb2x2ZUFuaW1hdGlvbnMoaW5kZXgsIHRyYW5zaXRpb24sIGFjdGl2ZSkge1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy5fY2FjaGVkRGF0YU9wdHM7XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gYGFuaW1hdGlvbi0ke3RyYW5zaXRpb259YDtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gY2FjaGVbY2FjaGVLZXldO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvcHRpb25zO1xuICAgICAgICBpZiAoY2hhcnQub3B0aW9ucy5hbmltYXRpb24gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNoYXJ0LmNvbmZpZztcbiAgICAgICAgICAgIGNvbnN0IHNjb3BlS2V5cyA9IGNvbmZpZy5kYXRhc2V0QW5pbWF0aW9uU2NvcGVLZXlzKHRoaXMuX3R5cGUsIHRyYW5zaXRpb24pO1xuICAgICAgICAgICAgY29uc3Qgc2NvcGVzID0gY29uZmlnLmdldE9wdGlvblNjb3Blcyh0aGlzLmdldERhdGFzZXQoKSwgc2NvcGVLZXlzKTtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBjb25maWcuY3JlYXRlUmVzb2x2ZXIoc2NvcGVzLCB0aGlzLmdldENvbnRleHQoaW5kZXgsIGFjdGl2ZSwgdHJhbnNpdGlvbikpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbnMgPSBuZXcgQW5pbWF0aW9ucyhjaGFydCwgb3B0aW9ucyAmJiBvcHRpb25zLmFuaW1hdGlvbnMpO1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLl9jYWNoZWFibGUpIHtcbiAgICAgICAgICAgIGNhY2hlW2NhY2hlS2V5XSA9IE9iamVjdC5mcmVlemUoYW5pbWF0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFuaW1hdGlvbnM7XG4gICAgfVxuIGdldFNoYXJlZE9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICBpZiAoIW9wdGlvbnMuJHNoYXJlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zaGFyZWRPcHRpb25zIHx8ICh0aGlzLl9zaGFyZWRPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucykpO1xuICAgIH1cbiBpbmNsdWRlT3B0aW9ucyhtb2RlLCBzaGFyZWRPcHRpb25zKSB7XG4gICAgICAgIHJldHVybiAhc2hhcmVkT3B0aW9ucyB8fCBpc0RpcmVjdFVwZGF0ZU1vZGUobW9kZSkgfHwgdGhpcy5jaGFydC5fYW5pbWF0aW9uc0Rpc2FibGVkO1xuICAgIH1cbiBfZ2V0U2hhcmVkT3B0aW9ucyhzdGFydCwgbW9kZSkge1xuICAgICAgICBjb25zdCBmaXJzdE9wdHMgPSB0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoc3RhcnQsIG1vZGUpO1xuICAgICAgICBjb25zdCBwcmV2aW91c2x5U2hhcmVkT3B0aW9ucyA9IHRoaXMuX3NoYXJlZE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHNoYXJlZE9wdGlvbnMgPSB0aGlzLmdldFNoYXJlZE9wdGlvbnMoZmlyc3RPcHRzKTtcbiAgICAgICAgY29uc3QgaW5jbHVkZU9wdGlvbnMgPSB0aGlzLmluY2x1ZGVPcHRpb25zKG1vZGUsIHNoYXJlZE9wdGlvbnMpIHx8IHNoYXJlZE9wdGlvbnMgIT09IHByZXZpb3VzbHlTaGFyZWRPcHRpb25zO1xuICAgICAgICB0aGlzLnVwZGF0ZVNoYXJlZE9wdGlvbnMoc2hhcmVkT3B0aW9ucywgbW9kZSwgZmlyc3RPcHRzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNoYXJlZE9wdGlvbnMsXG4gICAgICAgICAgICBpbmNsdWRlT3B0aW9uc1xuICAgICAgICB9O1xuICAgIH1cbiB1cGRhdGVFbGVtZW50KGVsZW1lbnQsIGluZGV4LCBwcm9wZXJ0aWVzLCBtb2RlKSB7XG4gICAgICAgIGlmIChpc0RpcmVjdFVwZGF0ZU1vZGUobW9kZSkpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudCwgcHJvcGVydGllcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlQW5pbWF0aW9ucyhpbmRleCwgbW9kZSkudXBkYXRlKGVsZW1lbnQsIHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgfVxuIHVwZGF0ZVNoYXJlZE9wdGlvbnMoc2hhcmVkT3B0aW9ucywgbW9kZSwgbmV3T3B0aW9ucykge1xuICAgICAgICBpZiAoc2hhcmVkT3B0aW9ucyAmJiAhaXNEaXJlY3RVcGRhdGVNb2RlKG1vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlQW5pbWF0aW9ucyh1bmRlZmluZWQsIG1vZGUpLnVwZGF0ZShzaGFyZWRPcHRpb25zLCBuZXdPcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiBfc2V0U3R5bGUoZWxlbWVudCwgaW5kZXgsIG1vZGUsIGFjdGl2ZSkge1xuICAgICAgICBlbGVtZW50LmFjdGl2ZSA9IGFjdGl2ZTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0U3R5bGUoaW5kZXgsIGFjdGl2ZSk7XG4gICAgICAgIHRoaXMuX3Jlc29sdmVBbmltYXRpb25zKGluZGV4LCBtb2RlLCBhY3RpdmUpLnVwZGF0ZShlbGVtZW50LCB7XG4gICAgICAgICAgICBvcHRpb25zOiAhYWN0aXZlICYmIHRoaXMuZ2V0U2hhcmVkT3B0aW9ucyhvcHRpb25zKSB8fCBvcHRpb25zXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZW1vdmVIb3ZlclN0eWxlKGVsZW1lbnQsIGRhdGFzZXRJbmRleCwgaW5kZXgpIHtcbiAgICAgICAgdGhpcy5fc2V0U3R5bGUoZWxlbWVudCwgaW5kZXgsICdhY3RpdmUnLCBmYWxzZSk7XG4gICAgfVxuICAgIHNldEhvdmVyU3R5bGUoZWxlbWVudCwgZGF0YXNldEluZGV4LCBpbmRleCkge1xuICAgICAgICB0aGlzLl9zZXRTdHlsZShlbGVtZW50LCBpbmRleCwgJ2FjdGl2ZScsIHRydWUpO1xuICAgIH1cbiBfcmVtb3ZlRGF0YXNldEhvdmVyU3R5bGUoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9jYWNoZWRNZXRhLmRhdGFzZXQ7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRTdHlsZShlbGVtZW50LCB1bmRlZmluZWQsICdhY3RpdmUnLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gX3NldERhdGFzZXRIb3ZlclN0eWxlKCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fY2FjaGVkTWV0YS5kYXRhc2V0O1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5fc2V0U3R5bGUoZWxlbWVudCwgdW5kZWZpbmVkLCAnYWN0aXZlJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gX3Jlc3luY0VsZW1lbnRzKHJlc2V0TmV3RWxlbWVudHMpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5fY2FjaGVkTWV0YS5kYXRhO1xuICAgICAgICBmb3IgKGNvbnN0IFttZXRob2QsIGFyZzEsIGFyZzJdIG9mIHRoaXMuX3N5bmNMaXN0KXtcbiAgICAgICAgICAgIHRoaXNbbWV0aG9kXShhcmcxLCBhcmcyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zeW5jTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBudW1NZXRhID0gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICBjb25zdCBudW1EYXRhID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gTWF0aC5taW4obnVtRGF0YSwgbnVtTWV0YSk7XG4gICAgICAgIGlmIChjb3VudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJzZSgwLCBjb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG51bURhdGEgPiBudW1NZXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnNlcnRFbGVtZW50cyhudW1NZXRhLCBudW1EYXRhIC0gbnVtTWV0YSwgcmVzZXROZXdFbGVtZW50cyk7XG4gICAgICAgIH0gZWxzZSBpZiAobnVtRGF0YSA8IG51bU1ldGEpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUVsZW1lbnRzKG51bURhdGEsIG51bU1ldGEgLSBudW1EYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbiBfaW5zZXJ0RWxlbWVudHMoc3RhcnQsIGNvdW50LCByZXNldE5ld0VsZW1lbnRzID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgZGF0YSA9IG1ldGEuZGF0YTtcbiAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBjb3VudDtcbiAgICAgICAgbGV0IGk7XG4gICAgICAgIGNvbnN0IG1vdmUgPSAoYXJyKT0+e1xuICAgICAgICAgICAgYXJyLmxlbmd0aCArPSBjb3VudDtcbiAgICAgICAgICAgIGZvcihpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gZW5kOyBpLS0pe1xuICAgICAgICAgICAgICAgIGFycltpXSA9IGFycltpIC0gY291bnRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtb3ZlKGRhdGEpO1xuICAgICAgICBmb3IoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpe1xuICAgICAgICAgICAgZGF0YVtpXSA9IG5ldyB0aGlzLmRhdGFFbGVtZW50VHlwZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9wYXJzaW5nKSB7XG4gICAgICAgICAgICBtb3ZlKG1ldGEuX3BhcnNlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYXJzZShzdGFydCwgY291bnQpO1xuICAgICAgICBpZiAocmVzZXROZXdFbGVtZW50cykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50cyhkYXRhLCBzdGFydCwgY291bnQsICdyZXNldCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZUVsZW1lbnRzKGVsZW1lbnQsIHN0YXJ0LCBjb3VudCwgbW9kZSkge31cbiBfcmVtb3ZlRWxlbWVudHMoc3RhcnQsIGNvdW50KSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBpZiAodGhpcy5fcGFyc2luZykge1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZCA9IG1ldGEuX3BhcnNlZC5zcGxpY2Uoc3RhcnQsIGNvdW50KTtcbiAgICAgICAgICAgIGlmIChtZXRhLl9zdGFja2VkKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJTdGFja3MobWV0YSwgcmVtb3ZlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbWV0YS5kYXRhLnNwbGljZShzdGFydCwgY291bnQpO1xuICAgIH1cbiBfc3luYyhhcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLl9wYXJzaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9zeW5jTGlzdC5wdXNoKGFyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgW21ldGhvZCwgYXJnMSwgYXJnMl0gPSBhcmdzO1xuICAgICAgICAgICAgdGhpc1ttZXRob2RdKGFyZzEsIGFyZzIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhcnQuX2RhdGFDaGFuZ2VzLnB1c2goW1xuICAgICAgICAgICAgdGhpcy5pbmRleCxcbiAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIF9vbkRhdGFQdXNoKCkge1xuICAgICAgICBjb25zdCBjb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHRoaXMuX3N5bmMoW1xuICAgICAgICAgICAgJ19pbnNlcnRFbGVtZW50cycsXG4gICAgICAgICAgICB0aGlzLmdldERhdGFzZXQoKS5kYXRhLmxlbmd0aCAtIGNvdW50LFxuICAgICAgICAgICAgY291bnRcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIF9vbkRhdGFQb3AoKSB7XG4gICAgICAgIHRoaXMuX3N5bmMoW1xuICAgICAgICAgICAgJ19yZW1vdmVFbGVtZW50cycsXG4gICAgICAgICAgICB0aGlzLl9jYWNoZWRNZXRhLmRhdGEubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIF9vbkRhdGFTaGlmdCgpIHtcbiAgICAgICAgdGhpcy5fc3luYyhbXG4gICAgICAgICAgICAnX3JlbW92ZUVsZW1lbnRzJyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAxXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBfb25EYXRhU3BsaWNlKHN0YXJ0LCBjb3VudCkge1xuICAgICAgICBpZiAoY291bnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N5bmMoW1xuICAgICAgICAgICAgICAgICdfcmVtb3ZlRWxlbWVudHMnLFxuICAgICAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgICAgIGNvdW50XG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuICAgICAgICBpZiAobmV3Q291bnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N5bmMoW1xuICAgICAgICAgICAgICAgICdfaW5zZXJ0RWxlbWVudHMnLFxuICAgICAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgICAgIG5ld0NvdW50XG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfb25EYXRhVW5zaGlmdCgpIHtcbiAgICAgICAgdGhpcy5fc3luYyhbXG4gICAgICAgICAgICAnX2luc2VydEVsZW1lbnRzJyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoXG4gICAgICAgIF0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0QWxsU2NhbGVWYWx1ZXMoc2NhbGUsIHR5cGUpIHtcbiAgICBpZiAoIXNjYWxlLl9jYWNoZS4kYmFyKSB7XG4gICAgICAgIGNvbnN0IHZpc2libGVNZXRhcyA9IHNjYWxlLmdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKHR5cGUpO1xuICAgICAgICBsZXQgdmFsdWVzID0gW107XG4gICAgICAgIGZvcihsZXQgaSA9IDAsIGlsZW4gPSB2aXNpYmxlTWV0YXMubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKXtcbiAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQodmlzaWJsZU1ldGFzW2ldLmNvbnRyb2xsZXIuZ2V0QWxsUGFyc2VkVmFsdWVzKHNjYWxlKSk7XG4gICAgICAgIH1cbiAgICAgICAgc2NhbGUuX2NhY2hlLiRiYXIgPSBfYXJyYXlVbmlxdWUodmFsdWVzLnNvcnQoKGEsIGIpPT5hIC0gYikpO1xuICAgIH1cbiAgICByZXR1cm4gc2NhbGUuX2NhY2hlLiRiYXI7XG59XG4gZnVuY3Rpb24gY29tcHV0ZU1pblNhbXBsZVNpemUobWV0YSkge1xuICAgIGNvbnN0IHNjYWxlID0gbWV0YS5pU2NhbGU7XG4gICAgY29uc3QgdmFsdWVzID0gZ2V0QWxsU2NhbGVWYWx1ZXMoc2NhbGUsIG1ldGEudHlwZSk7XG4gICAgbGV0IG1pbiA9IHNjYWxlLl9sZW5ndGg7XG4gICAgbGV0IGksIGlsZW4sIGN1cnIsIHByZXY7XG4gICAgY29uc3QgdXBkYXRlTWluQW5kUHJldiA9ICgpPT57XG4gICAgICAgIGlmIChjdXJyID09PSAzMjc2NyB8fCBjdXJyID09PSAtMzI3NjgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmaW5lZChwcmV2KSkge1xuICAgICAgICAgICAgbWluID0gTWF0aC5taW4obWluLCBNYXRoLmFicyhjdXJyIC0gcHJldikgfHwgbWluKTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2ID0gY3VycjtcbiAgICB9O1xuICAgIGZvcihpID0gMCwgaWxlbiA9IHZhbHVlcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICBjdXJyID0gc2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZXNbaV0pO1xuICAgICAgICB1cGRhdGVNaW5BbmRQcmV2KCk7XG4gICAgfVxuICAgIHByZXYgPSB1bmRlZmluZWQ7XG4gICAgZm9yKGkgPSAwLCBpbGVuID0gc2NhbGUudGlja3MubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgY3VyciA9IHNjYWxlLmdldFBpeGVsRm9yVGljayhpKTtcbiAgICAgICAgdXBkYXRlTWluQW5kUHJldigpO1xuICAgIH1cbiAgICByZXR1cm4gbWluO1xufVxuIGZ1bmN0aW9uIGNvbXB1dGVGaXRDYXRlZ29yeVRyYWl0cyhpbmRleCwgcnVsZXIsIG9wdGlvbnMsIHN0YWNrQ291bnQpIHtcbiAgICBjb25zdCB0aGlja25lc3MgPSBvcHRpb25zLmJhclRoaWNrbmVzcztcbiAgICBsZXQgc2l6ZSwgcmF0aW87XG4gICAgaWYgKGlzTnVsbE9yVW5kZWYodGhpY2tuZXNzKSkge1xuICAgICAgICBzaXplID0gcnVsZXIubWluICogb3B0aW9ucy5jYXRlZ29yeVBlcmNlbnRhZ2U7XG4gICAgICAgIHJhdGlvID0gb3B0aW9ucy5iYXJQZXJjZW50YWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNpemUgPSB0aGlja25lc3MgKiBzdGFja0NvdW50O1xuICAgICAgICByYXRpbyA9IDE7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGNodW5rOiBzaXplIC8gc3RhY2tDb3VudCxcbiAgICAgICAgcmF0aW8sXG4gICAgICAgIHN0YXJ0OiBydWxlci5waXhlbHNbaW5kZXhdIC0gc2l6ZSAvIDJcbiAgICB9O1xufVxuIGZ1bmN0aW9uIGNvbXB1dGVGbGV4Q2F0ZWdvcnlUcmFpdHMoaW5kZXgsIHJ1bGVyLCBvcHRpb25zLCBzdGFja0NvdW50KSB7XG4gICAgY29uc3QgcGl4ZWxzID0gcnVsZXIucGl4ZWxzO1xuICAgIGNvbnN0IGN1cnIgPSBwaXhlbHNbaW5kZXhdO1xuICAgIGxldCBwcmV2ID0gaW5kZXggPiAwID8gcGl4ZWxzW2luZGV4IC0gMV0gOiBudWxsO1xuICAgIGxldCBuZXh0ID0gaW5kZXggPCBwaXhlbHMubGVuZ3RoIC0gMSA/IHBpeGVsc1tpbmRleCArIDFdIDogbnVsbDtcbiAgICBjb25zdCBwZXJjZW50ID0gb3B0aW9ucy5jYXRlZ29yeVBlcmNlbnRhZ2U7XG4gICAgaWYgKHByZXYgPT09IG51bGwpIHtcbiAgICAgICAgcHJldiA9IGN1cnIgLSAobmV4dCA9PT0gbnVsbCA/IHJ1bGVyLmVuZCAtIHJ1bGVyLnN0YXJ0IDogbmV4dCAtIGN1cnIpO1xuICAgIH1cbiAgICBpZiAobmV4dCA9PT0gbnVsbCkge1xuICAgICAgICBuZXh0ID0gY3VyciArIGN1cnIgLSBwcmV2O1xuICAgIH1cbiAgICBjb25zdCBzdGFydCA9IGN1cnIgLSAoY3VyciAtIE1hdGgubWluKHByZXYsIG5leHQpKSAvIDIgKiBwZXJjZW50O1xuICAgIGNvbnN0IHNpemUgPSBNYXRoLmFicyhuZXh0IC0gcHJldikgLyAyICogcGVyY2VudDtcbiAgICByZXR1cm4ge1xuICAgICAgICBjaHVuazogc2l6ZSAvIHN0YWNrQ291bnQsXG4gICAgICAgIHJhdGlvOiBvcHRpb25zLmJhclBlcmNlbnRhZ2UsXG4gICAgICAgIHN0YXJ0XG4gICAgfTtcbn1cbmZ1bmN0aW9uIHBhcnNlRmxvYXRCYXIoZW50cnksIGl0ZW0sIHZTY2FsZSwgaSkge1xuICAgIGNvbnN0IHN0YXJ0VmFsdWUgPSB2U2NhbGUucGFyc2UoZW50cnlbMF0sIGkpO1xuICAgIGNvbnN0IGVuZFZhbHVlID0gdlNjYWxlLnBhcnNlKGVudHJ5WzFdLCBpKTtcbiAgICBjb25zdCBtaW4gPSBNYXRoLm1pbihzdGFydFZhbHVlLCBlbmRWYWx1ZSk7XG4gICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoc3RhcnRWYWx1ZSwgZW5kVmFsdWUpO1xuICAgIGxldCBiYXJTdGFydCA9IG1pbjtcbiAgICBsZXQgYmFyRW5kID0gbWF4O1xuICAgIGlmIChNYXRoLmFicyhtaW4pID4gTWF0aC5hYnMobWF4KSkge1xuICAgICAgICBiYXJTdGFydCA9IG1heDtcbiAgICAgICAgYmFyRW5kID0gbWluO1xuICAgIH1cbiAgICBpdGVtW3ZTY2FsZS5heGlzXSA9IGJhckVuZDtcbiAgICBpdGVtLl9jdXN0b20gPSB7XG4gICAgICAgIGJhclN0YXJ0LFxuICAgICAgICBiYXJFbmQsXG4gICAgICAgIHN0YXJ0OiBzdGFydFZhbHVlLFxuICAgICAgICBlbmQ6IGVuZFZhbHVlLFxuICAgICAgICBtaW4sXG4gICAgICAgIG1heFxuICAgIH07XG59XG5mdW5jdGlvbiBwYXJzZVZhbHVlKGVudHJ5LCBpdGVtLCB2U2NhbGUsIGkpIHtcbiAgICBpZiAoaXNBcnJheShlbnRyeSkpIHtcbiAgICAgICAgcGFyc2VGbG9hdEJhcihlbnRyeSwgaXRlbSwgdlNjYWxlLCBpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtW3ZTY2FsZS5heGlzXSA9IHZTY2FsZS5wYXJzZShlbnRyeSwgaSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtO1xufVxuZnVuY3Rpb24gcGFyc2VBcnJheU9yUHJpbWl0aXZlKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgIGNvbnN0IGlTY2FsZSA9IG1ldGEuaVNjYWxlO1xuICAgIGNvbnN0IHZTY2FsZSA9IG1ldGEudlNjYWxlO1xuICAgIGNvbnN0IGxhYmVscyA9IGlTY2FsZS5nZXRMYWJlbHMoKTtcbiAgICBjb25zdCBzaW5nbGVTY2FsZSA9IGlTY2FsZSA9PT0gdlNjYWxlO1xuICAgIGNvbnN0IHBhcnNlZCA9IFtdO1xuICAgIGxldCBpLCBpbGVuLCBpdGVtLCBlbnRyeTtcbiAgICBmb3IoaSA9IHN0YXJ0LCBpbGVuID0gc3RhcnQgKyBjb3VudDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIGVudHJ5ID0gZGF0YVtpXTtcbiAgICAgICAgaXRlbSA9IHt9O1xuICAgICAgICBpdGVtW2lTY2FsZS5heGlzXSA9IHNpbmdsZVNjYWxlIHx8IGlTY2FsZS5wYXJzZShsYWJlbHNbaV0sIGkpO1xuICAgICAgICBwYXJzZWQucHVzaChwYXJzZVZhbHVlKGVudHJ5LCBpdGVtLCB2U2NhbGUsIGkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbn1cbmZ1bmN0aW9uIGlzRmxvYXRCYXIoY3VzdG9tKSB7XG4gICAgcmV0dXJuIGN1c3RvbSAmJiBjdXN0b20uYmFyU3RhcnQgIT09IHVuZGVmaW5lZCAmJiBjdXN0b20uYmFyRW5kICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBiYXJTaWduKHNpemUsIHZTY2FsZSwgYWN0dWFsQmFzZSkge1xuICAgIGlmIChzaXplICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBzaWduKHNpemUpO1xuICAgIH1cbiAgICByZXR1cm4gKHZTY2FsZS5pc0hvcml6b250YWwoKSA/IDEgOiAtMSkgKiAodlNjYWxlLm1pbiA+PSBhY3R1YWxCYXNlID8gMSA6IC0xKTtcbn1cbmZ1bmN0aW9uIGJvcmRlclByb3BzKHByb3BlcnRpZXMpIHtcbiAgICBsZXQgcmV2ZXJzZSwgc3RhcnQsIGVuZCwgdG9wLCBib3R0b207XG4gICAgaWYgKHByb3BlcnRpZXMuaG9yaXpvbnRhbCkge1xuICAgICAgICByZXZlcnNlID0gcHJvcGVydGllcy5iYXNlID4gcHJvcGVydGllcy54O1xuICAgICAgICBzdGFydCA9ICdsZWZ0JztcbiAgICAgICAgZW5kID0gJ3JpZ2h0JztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXZlcnNlID0gcHJvcGVydGllcy5iYXNlIDwgcHJvcGVydGllcy55O1xuICAgICAgICBzdGFydCA9ICdib3R0b20nO1xuICAgICAgICBlbmQgPSAndG9wJztcbiAgICB9XG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgICAgdG9wID0gJ2VuZCc7XG4gICAgICAgIGJvdHRvbSA9ICdzdGFydCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdG9wID0gJ3N0YXJ0JztcbiAgICAgICAgYm90dG9tID0gJ2VuZCc7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBlbmQsXG4gICAgICAgIHJldmVyc2UsXG4gICAgICAgIHRvcCxcbiAgICAgICAgYm90dG9tXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHNldEJvcmRlclNraXBwZWQocHJvcGVydGllcywgb3B0aW9ucywgc3RhY2ssIGluZGV4KSB7XG4gICAgbGV0IGVkZ2UgPSBvcHRpb25zLmJvcmRlclNraXBwZWQ7XG4gICAgY29uc3QgcmVzID0ge307XG4gICAgaWYgKCFlZGdlKSB7XG4gICAgICAgIHByb3BlcnRpZXMuYm9yZGVyU2tpcHBlZCA9IHJlcztcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZWRnZSA9PT0gdHJ1ZSkge1xuICAgICAgICBwcm9wZXJ0aWVzLmJvcmRlclNraXBwZWQgPSB7XG4gICAgICAgICAgICB0b3A6IHRydWUsXG4gICAgICAgICAgICByaWdodDogdHJ1ZSxcbiAgICAgICAgICAgIGJvdHRvbTogdHJ1ZSxcbiAgICAgICAgICAgIGxlZnQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IHN0YXJ0ICwgZW5kICwgcmV2ZXJzZSAsIHRvcCAsIGJvdHRvbSAgfSA9IGJvcmRlclByb3BzKHByb3BlcnRpZXMpO1xuICAgIGlmIChlZGdlID09PSAnbWlkZGxlJyAmJiBzdGFjaykge1xuICAgICAgICBwcm9wZXJ0aWVzLmVuYWJsZUJvcmRlclJhZGl1cyA9IHRydWU7XG4gICAgICAgIGlmICgoc3RhY2suX3RvcCB8fCAwKSA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgIGVkZ2UgPSB0b3A7XG4gICAgICAgIH0gZWxzZSBpZiAoKHN0YWNrLl9ib3R0b20gfHwgMCkgPT09IGluZGV4KSB7XG4gICAgICAgICAgICBlZGdlID0gYm90dG9tO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzW3BhcnNlRWRnZShib3R0b20sIHN0YXJ0LCBlbmQsIHJldmVyc2UpXSA9IHRydWU7XG4gICAgICAgICAgICBlZGdlID0gdG9wO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlc1twYXJzZUVkZ2UoZWRnZSwgc3RhcnQsIGVuZCwgcmV2ZXJzZSldID0gdHJ1ZTtcbiAgICBwcm9wZXJ0aWVzLmJvcmRlclNraXBwZWQgPSByZXM7XG59XG5mdW5jdGlvbiBwYXJzZUVkZ2UoZWRnZSwgYSwgYiwgcmV2ZXJzZSkge1xuICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICAgIGVkZ2UgPSBzd2FwKGVkZ2UsIGEsIGIpO1xuICAgICAgICBlZGdlID0gc3RhcnRFbmQoZWRnZSwgYiwgYSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZWRnZSA9IHN0YXJ0RW5kKGVkZ2UsIGEsIGIpO1xuICAgIH1cbiAgICByZXR1cm4gZWRnZTtcbn1cbmZ1bmN0aW9uIHN3YXAob3JpZywgdjEsIHYyKSB7XG4gICAgcmV0dXJuIG9yaWcgPT09IHYxID8gdjIgOiBvcmlnID09PSB2MiA/IHYxIDogb3JpZztcbn1cbmZ1bmN0aW9uIHN0YXJ0RW5kKHYsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gdiA9PT0gJ3N0YXJ0JyA/IHN0YXJ0IDogdiA9PT0gJ2VuZCcgPyBlbmQgOiB2O1xufVxuZnVuY3Rpb24gc2V0SW5mbGF0ZUFtb3VudChwcm9wZXJ0aWVzLCB7IGluZmxhdGVBbW91bnQgIH0sIHJhdGlvKSB7XG4gICAgcHJvcGVydGllcy5pbmZsYXRlQW1vdW50ID0gaW5mbGF0ZUFtb3VudCA9PT0gJ2F1dG8nID8gcmF0aW8gPT09IDEgPyAwLjMzIDogMCA6IGluZmxhdGVBbW91bnQ7XG59XG5jbGFzcyBCYXJDb250cm9sbGVyIGV4dGVuZHMgRGF0YXNldENvbnRyb2xsZXIge1xuICAgIHN0YXRpYyBpZCA9ICdiYXInO1xuIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICAgICAgZGF0YXNldEVsZW1lbnRUeXBlOiBmYWxzZSxcbiAgICAgICAgZGF0YUVsZW1lbnRUeXBlOiAnYmFyJyxcbiAgICAgICAgY2F0ZWdvcnlQZXJjZW50YWdlOiAwLjgsXG4gICAgICAgIGJhclBlcmNlbnRhZ2U6IDAuOSxcbiAgICAgICAgZ3JvdXBlZDogdHJ1ZSxcbiAgICAgICAgYW5pbWF0aW9uczoge1xuICAgICAgICAgICAgbnVtYmVyczoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgJ3gnLFxuICAgICAgICAgICAgICAgICAgICAneScsXG4gICAgICAgICAgICAgICAgICAgICdiYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICAgICAgICAgJ2hlaWdodCdcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuIHN0YXRpYyBvdmVycmlkZXMgPSB7XG4gICAgICAgIHNjYWxlczoge1xuICAgICAgICAgICAgX2luZGV4Xzoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdjYXRlZ29yeScsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGdyaWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF92YWx1ZV86IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZWFyJyxcbiAgICAgICAgICAgICAgICBiZWdpbkF0WmVybzogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiBwYXJzZVByaW1pdGl2ZURhdGEobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KSB7XG4gICAgICAgIHJldHVybiBwYXJzZUFycmF5T3JQcmltaXRpdmUobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KTtcbiAgICB9XG4gcGFyc2VBcnJheURhdGEobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KSB7XG4gICAgICAgIHJldHVybiBwYXJzZUFycmF5T3JQcmltaXRpdmUobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KTtcbiAgICB9XG4gcGFyc2VPYmplY3REYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgICAgICBjb25zdCB7IGlTY2FsZSAsIHZTY2FsZSAgfSA9IG1ldGE7XG4gICAgICAgIGNvbnN0IHsgeEF4aXNLZXkgPSd4JyAsIHlBeGlzS2V5ID0neScgIH0gPSB0aGlzLl9wYXJzaW5nO1xuICAgICAgICBjb25zdCBpQXhpc0tleSA9IGlTY2FsZS5heGlzID09PSAneCcgPyB4QXhpc0tleSA6IHlBeGlzS2V5O1xuICAgICAgICBjb25zdCB2QXhpc0tleSA9IHZTY2FsZS5heGlzID09PSAneCcgPyB4QXhpc0tleSA6IHlBeGlzS2V5O1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBbXTtcbiAgICAgICAgbGV0IGksIGlsZW4sIGl0ZW0sIG9iajtcbiAgICAgICAgZm9yKGkgPSBzdGFydCwgaWxlbiA9IHN0YXJ0ICsgY291bnQ7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgb2JqID0gZGF0YVtpXTtcbiAgICAgICAgICAgIGl0ZW0gPSB7fTtcbiAgICAgICAgICAgIGl0ZW1baVNjYWxlLmF4aXNdID0gaVNjYWxlLnBhcnNlKHJlc29sdmVPYmplY3RLZXkob2JqLCBpQXhpc0tleSksIGkpO1xuICAgICAgICAgICAgcGFyc2VkLnB1c2gocGFyc2VWYWx1ZShyZXNvbHZlT2JqZWN0S2V5KG9iaiwgdkF4aXNLZXkpLCBpdGVtLCB2U2NhbGUsIGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH1cbiB1cGRhdGVSYW5nZUZyb21QYXJzZWQocmFuZ2UsIHNjYWxlLCBwYXJzZWQsIHN0YWNrKSB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZVJhbmdlRnJvbVBhcnNlZChyYW5nZSwgc2NhbGUsIHBhcnNlZCwgc3RhY2spO1xuICAgICAgICBjb25zdCBjdXN0b20gPSBwYXJzZWQuX2N1c3RvbTtcbiAgICAgICAgaWYgKGN1c3RvbSAmJiBzY2FsZSA9PT0gdGhpcy5fY2FjaGVkTWV0YS52U2NhbGUpIHtcbiAgICAgICAgICAgIHJhbmdlLm1pbiA9IE1hdGgubWluKHJhbmdlLm1pbiwgY3VzdG9tLm1pbik7XG4gICAgICAgICAgICByYW5nZS5tYXggPSBNYXRoLm1heChyYW5nZS5tYXgsIGN1c3RvbS5tYXgpO1xuICAgICAgICB9XG4gICAgfVxuIGdldE1heE92ZXJmbG93KCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gZ2V0TGFiZWxBbmRWYWx1ZShpbmRleCkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgeyBpU2NhbGUgLCB2U2NhbGUgIH0gPSBtZXRhO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLmdldFBhcnNlZChpbmRleCk7XG4gICAgICAgIGNvbnN0IGN1c3RvbSA9IHBhcnNlZC5fY3VzdG9tO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzRmxvYXRCYXIoY3VzdG9tKSA/ICdbJyArIGN1c3RvbS5zdGFydCArICcsICcgKyBjdXN0b20uZW5kICsgJ10nIDogJycgKyB2U2NhbGUuZ2V0TGFiZWxGb3JWYWx1ZShwYXJzZWRbdlNjYWxlLmF4aXNdKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhYmVsOiAnJyArIGlTY2FsZS5nZXRMYWJlbEZvclZhbHVlKHBhcnNlZFtpU2NhbGUuYXhpc10pLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgdGhpcy5lbmFibGVPcHRpb25TaGFyaW5nID0gdHJ1ZTtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgbWV0YS5zdGFjayA9IHRoaXMuZ2V0RGF0YXNldCgpLnN0YWNrO1xuICAgIH1cbiAgICB1cGRhdGUobW9kZSkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50cyhtZXRhLmRhdGEsIDAsIG1ldGEuZGF0YS5sZW5ndGgsIG1vZGUpO1xuICAgIH1cbiAgICB1cGRhdGVFbGVtZW50cyhiYXJzLCBzdGFydCwgY291bnQsIG1vZGUpIHtcbiAgICAgICAgY29uc3QgcmVzZXQgPSBtb2RlID09PSAncmVzZXQnO1xuICAgICAgICBjb25zdCB7IGluZGV4ICwgX2NhY2hlZE1ldGE6IHsgdlNjYWxlICB9ICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgYmFzZSA9IHZTY2FsZS5nZXRCYXNlUGl4ZWwoKTtcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbCA9IHZTY2FsZS5pc0hvcml6b250YWwoKTtcbiAgICAgICAgY29uc3QgcnVsZXIgPSB0aGlzLl9nZXRSdWxlcigpO1xuICAgICAgICBjb25zdCB7IHNoYXJlZE9wdGlvbnMgLCBpbmNsdWRlT3B0aW9ucyAgfSA9IHRoaXMuX2dldFNoYXJlZE9wdGlvbnMoc3RhcnQsIG1vZGUpO1xuICAgICAgICBmb3IobGV0IGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgY291bnQ7IGkrKyl7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLmdldFBhcnNlZChpKTtcbiAgICAgICAgICAgIGNvbnN0IHZwaXhlbHMgPSByZXNldCB8fCBpc051bGxPclVuZGVmKHBhcnNlZFt2U2NhbGUuYXhpc10pID8ge1xuICAgICAgICAgICAgICAgIGJhc2UsXG4gICAgICAgICAgICAgICAgaGVhZDogYmFzZVxuICAgICAgICAgICAgfSA6IHRoaXMuX2NhbGN1bGF0ZUJhclZhbHVlUGl4ZWxzKGkpO1xuICAgICAgICAgICAgY29uc3QgaXBpeGVscyA9IHRoaXMuX2NhbGN1bGF0ZUJhckluZGV4UGl4ZWxzKGksIHJ1bGVyKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YWNrID0gKHBhcnNlZC5fc3RhY2tzIHx8IHt9KVt2U2NhbGUuYXhpc107XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICAgIGhvcml6b250YWwsXG4gICAgICAgICAgICAgICAgYmFzZTogdnBpeGVscy5iYXNlLFxuICAgICAgICAgICAgICAgIGVuYWJsZUJvcmRlclJhZGl1czogIXN0YWNrIHx8IGlzRmxvYXRCYXIocGFyc2VkLl9jdXN0b20pIHx8IGluZGV4ID09PSBzdGFjay5fdG9wIHx8IGluZGV4ID09PSBzdGFjay5fYm90dG9tLFxuICAgICAgICAgICAgICAgIHg6IGhvcml6b250YWwgPyB2cGl4ZWxzLmhlYWQgOiBpcGl4ZWxzLmNlbnRlcixcbiAgICAgICAgICAgICAgICB5OiBob3Jpem9udGFsID8gaXBpeGVscy5jZW50ZXIgOiB2cGl4ZWxzLmhlYWQsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBob3Jpem9udGFsID8gaXBpeGVscy5zaXplIDogTWF0aC5hYnModnBpeGVscy5zaXplKSxcbiAgICAgICAgICAgICAgICB3aWR0aDogaG9yaXpvbnRhbCA/IE1hdGguYWJzKHZwaXhlbHMuc2l6ZSkgOiBpcGl4ZWxzLnNpemVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaW5jbHVkZU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLm9wdGlvbnMgPSBzaGFyZWRPcHRpb25zIHx8IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpLCBiYXJzW2ldLmFjdGl2ZSA/ICdhY3RpdmUnIDogbW9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gcHJvcGVydGllcy5vcHRpb25zIHx8IGJhcnNbaV0ub3B0aW9ucztcbiAgICAgICAgICAgIHNldEJvcmRlclNraXBwZWQocHJvcGVydGllcywgb3B0aW9ucywgc3RhY2ssIGluZGV4KTtcbiAgICAgICAgICAgIHNldEluZmxhdGVBbW91bnQocHJvcGVydGllcywgb3B0aW9ucywgcnVsZXIucmF0aW8pO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50KGJhcnNbaV0sIGksIHByb3BlcnRpZXMsIG1vZGUpO1xuICAgICAgICB9XG4gICAgfVxuIF9nZXRTdGFja3MobGFzdCwgZGF0YUluZGV4KSB7XG4gICAgICAgIGNvbnN0IHsgaVNjYWxlICB9ID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgbWV0YXNldHMgPSBpU2NhbGUuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXModGhpcy5fdHlwZSkuZmlsdGVyKChtZXRhKT0+bWV0YS5jb250cm9sbGVyLm9wdGlvbnMuZ3JvdXBlZCk7XG4gICAgICAgIGNvbnN0IHN0YWNrZWQgPSBpU2NhbGUub3B0aW9ucy5zdGFja2VkO1xuICAgICAgICBjb25zdCBzdGFja3MgPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudFBhcnNlZCA9IHRoaXMuX2NhY2hlZE1ldGEuY29udHJvbGxlci5nZXRQYXJzZWQoZGF0YUluZGV4KTtcbiAgICAgICAgY29uc3QgaVNjYWxlVmFsdWUgPSBjdXJyZW50UGFyc2VkICYmIGN1cnJlbnRQYXJzZWRbaVNjYWxlLmF4aXNdO1xuICAgICAgICBjb25zdCBza2lwTnVsbCA9IChtZXRhKT0+e1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gbWV0YS5fcGFyc2VkLmZpbmQoKGl0ZW0pPT5pdGVtW2lTY2FsZS5heGlzXSA9PT0gaVNjYWxlVmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgdmFsID0gcGFyc2VkICYmIHBhcnNlZFttZXRhLnZTY2FsZS5heGlzXTtcbiAgICAgICAgICAgIGlmIChpc051bGxPclVuZGVmKHZhbCkgfHwgaXNOYU4odmFsKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IG1ldGEgb2YgbWV0YXNldHMpe1xuICAgICAgICAgICAgaWYgKGRhdGFJbmRleCAhPT0gdW5kZWZpbmVkICYmIHNraXBOdWxsKG1ldGEpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhY2tlZCA9PT0gZmFsc2UgfHwgc3RhY2tzLmluZGV4T2YobWV0YS5zdGFjaykgPT09IC0xIHx8IHN0YWNrZWQgPT09IHVuZGVmaW5lZCAmJiBtZXRhLnN0YWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzdGFja3MucHVzaChtZXRhLnN0YWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXRhLmluZGV4ID09PSBsYXN0KSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGFja3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBzdGFja3MucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGFja3M7XG4gICAgfVxuIF9nZXRTdGFja0NvdW50KGluZGV4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRTdGFja3ModW5kZWZpbmVkLCBpbmRleCkubGVuZ3RoO1xuICAgIH1cbiBfZ2V0U3RhY2tJbmRleChkYXRhc2V0SW5kZXgsIG5hbWUsIGRhdGFJbmRleCkge1xuICAgICAgICBjb25zdCBzdGFja3MgPSB0aGlzLl9nZXRTdGFja3MoZGF0YXNldEluZGV4LCBkYXRhSW5kZXgpO1xuICAgICAgICBjb25zdCBpbmRleCA9IG5hbWUgIT09IHVuZGVmaW5lZCA/IHN0YWNrcy5pbmRleE9mKG5hbWUpIDogLTE7XG4gICAgICAgIHJldHVybiBpbmRleCA9PT0gLTEgPyBzdGFja3MubGVuZ3RoIC0gMSA6IGluZGV4O1xuICAgIH1cbiBfZ2V0UnVsZXIoKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBpU2NhbGUgPSBtZXRhLmlTY2FsZTtcbiAgICAgICAgY29uc3QgcGl4ZWxzID0gW107XG4gICAgICAgIGxldCBpLCBpbGVuO1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSBtZXRhLmRhdGEubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIHBpeGVscy5wdXNoKGlTY2FsZS5nZXRQaXhlbEZvclZhbHVlKHRoaXMuZ2V0UGFyc2VkKGkpW2lTY2FsZS5heGlzXSwgaSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJhclRoaWNrbmVzcyA9IG9wdHMuYmFyVGhpY2tuZXNzO1xuICAgICAgICBjb25zdCBtaW4gPSBiYXJUaGlja25lc3MgfHwgY29tcHV0ZU1pblNhbXBsZVNpemUobWV0YSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICBwaXhlbHMsXG4gICAgICAgICAgICBzdGFydDogaVNjYWxlLl9zdGFydFBpeGVsLFxuICAgICAgICAgICAgZW5kOiBpU2NhbGUuX2VuZFBpeGVsLFxuICAgICAgICAgICAgc3RhY2tDb3VudDogdGhpcy5fZ2V0U3RhY2tDb3VudCgpLFxuICAgICAgICAgICAgc2NhbGU6IGlTY2FsZSxcbiAgICAgICAgICAgIGdyb3VwZWQ6IG9wdHMuZ3JvdXBlZCxcbiAgICAgICAgICAgIHJhdGlvOiBiYXJUaGlja25lc3MgPyAxIDogb3B0cy5jYXRlZ29yeVBlcmNlbnRhZ2UgKiBvcHRzLmJhclBlcmNlbnRhZ2VcbiAgICAgICAgfTtcbiAgICB9XG4gX2NhbGN1bGF0ZUJhclZhbHVlUGl4ZWxzKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IHsgX2NhY2hlZE1ldGE6IHsgdlNjYWxlICwgX3N0YWNrZWQgLCBpbmRleDogZGF0YXNldEluZGV4ICB9ICwgb3B0aW9uczogeyBiYXNlOiBiYXNlVmFsdWUgLCBtaW5CYXJMZW5ndGggIH0gIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBhY3R1YWxCYXNlID0gYmFzZVZhbHVlIHx8IDA7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuZ2V0UGFyc2VkKGluZGV4KTtcbiAgICAgICAgY29uc3QgY3VzdG9tID0gcGFyc2VkLl9jdXN0b207XG4gICAgICAgIGNvbnN0IGZsb2F0aW5nID0gaXNGbG9hdEJhcihjdXN0b20pO1xuICAgICAgICBsZXQgdmFsdWUgPSBwYXJzZWRbdlNjYWxlLmF4aXNdO1xuICAgICAgICBsZXQgc3RhcnQgPSAwO1xuICAgICAgICBsZXQgbGVuZ3RoID0gX3N0YWNrZWQgPyB0aGlzLmFwcGx5U3RhY2sodlNjYWxlLCBwYXJzZWQsIF9zdGFja2VkKSA6IHZhbHVlO1xuICAgICAgICBsZXQgaGVhZCwgc2l6ZTtcbiAgICAgICAgaWYgKGxlbmd0aCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gbGVuZ3RoIC0gdmFsdWU7XG4gICAgICAgICAgICBsZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmxvYXRpbmcpIHtcbiAgICAgICAgICAgIHZhbHVlID0gY3VzdG9tLmJhclN0YXJ0O1xuICAgICAgICAgICAgbGVuZ3RoID0gY3VzdG9tLmJhckVuZCAtIGN1c3RvbS5iYXJTdGFydDtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gMCAmJiBzaWduKHZhbHVlKSAhPT0gc2lnbihjdXN0b20uYmFyRW5kKSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJ0ICs9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0VmFsdWUgPSAhaXNOdWxsT3JVbmRlZihiYXNlVmFsdWUpICYmICFmbG9hdGluZyA/IGJhc2VWYWx1ZSA6IHN0YXJ0O1xuICAgICAgICBsZXQgYmFzZSA9IHZTY2FsZS5nZXRQaXhlbEZvclZhbHVlKHN0YXJ0VmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5jaGFydC5nZXREYXRhVmlzaWJpbGl0eShpbmRleCkpIHtcbiAgICAgICAgICAgIGhlYWQgPSB2U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShzdGFydCArIGxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoZWFkID0gYmFzZTtcbiAgICAgICAgfVxuICAgICAgICBzaXplID0gaGVhZCAtIGJhc2U7XG4gICAgICAgIGlmIChNYXRoLmFicyhzaXplKSA8IG1pbkJhckxlbmd0aCkge1xuICAgICAgICAgICAgc2l6ZSA9IGJhclNpZ24oc2l6ZSwgdlNjYWxlLCBhY3R1YWxCYXNlKSAqIG1pbkJhckxlbmd0aDtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gYWN0dWFsQmFzZSkge1xuICAgICAgICAgICAgICAgIGJhc2UgLT0gc2l6ZSAvIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdGFydFBpeGVsID0gdlNjYWxlLmdldFBpeGVsRm9yRGVjaW1hbCgwKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZFBpeGVsID0gdlNjYWxlLmdldFBpeGVsRm9yRGVjaW1hbCgxKTtcbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKHN0YXJ0UGl4ZWwsIGVuZFBpeGVsKTtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KHN0YXJ0UGl4ZWwsIGVuZFBpeGVsKTtcbiAgICAgICAgICAgIGJhc2UgPSBNYXRoLm1heChNYXRoLm1pbihiYXNlLCBtYXgpLCBtaW4pO1xuICAgICAgICAgICAgaGVhZCA9IGJhc2UgKyBzaXplO1xuICAgICAgICAgICAgaWYgKF9zdGFja2VkICYmICFmbG9hdGluZykge1xuICAgICAgICAgICAgICAgIHBhcnNlZC5fc3RhY2tzW3ZTY2FsZS5heGlzXS5fdmlzdWFsVmFsdWVzW2RhdGFzZXRJbmRleF0gPSB2U2NhbGUuZ2V0VmFsdWVGb3JQaXhlbChoZWFkKSAtIHZTY2FsZS5nZXRWYWx1ZUZvclBpeGVsKGJhc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChiYXNlID09PSB2U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShhY3R1YWxCYXNlKSkge1xuICAgICAgICAgICAgY29uc3QgaGFsZkdyaWQgPSBzaWduKHNpemUpICogdlNjYWxlLmdldExpbmVXaWR0aEZvclZhbHVlKGFjdHVhbEJhc2UpIC8gMjtcbiAgICAgICAgICAgIGJhc2UgKz0gaGFsZkdyaWQ7XG4gICAgICAgICAgICBzaXplIC09IGhhbGZHcmlkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaXplLFxuICAgICAgICAgICAgYmFzZSxcbiAgICAgICAgICAgIGhlYWQsXG4gICAgICAgICAgICBjZW50ZXI6IGhlYWQgKyBzaXplIC8gMlxuICAgICAgICB9O1xuICAgIH1cbiBfY2FsY3VsYXRlQmFySW5kZXhQaXhlbHMoaW5kZXgsIHJ1bGVyKSB7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gcnVsZXIuc2NhbGU7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHNraXBOdWxsID0gb3B0aW9ucy5za2lwTnVsbDtcbiAgICAgICAgY29uc3QgbWF4QmFyVGhpY2tuZXNzID0gdmFsdWVPckRlZmF1bHQob3B0aW9ucy5tYXhCYXJUaGlja25lc3MsIEluZmluaXR5KTtcbiAgICAgICAgbGV0IGNlbnRlciwgc2l6ZTtcbiAgICAgICAgaWYgKHJ1bGVyLmdyb3VwZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YWNrQ291bnQgPSBza2lwTnVsbCA/IHRoaXMuX2dldFN0YWNrQ291bnQoaW5kZXgpIDogcnVsZXIuc3RhY2tDb3VudDtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gb3B0aW9ucy5iYXJUaGlja25lc3MgPT09ICdmbGV4JyA/IGNvbXB1dGVGbGV4Q2F0ZWdvcnlUcmFpdHMoaW5kZXgsIHJ1bGVyLCBvcHRpb25zLCBzdGFja0NvdW50KSA6IGNvbXB1dGVGaXRDYXRlZ29yeVRyYWl0cyhpbmRleCwgcnVsZXIsIG9wdGlvbnMsIHN0YWNrQ291bnQpO1xuICAgICAgICAgICAgY29uc3Qgc3RhY2tJbmRleCA9IHRoaXMuX2dldFN0YWNrSW5kZXgodGhpcy5pbmRleCwgdGhpcy5fY2FjaGVkTWV0YS5zdGFjaywgc2tpcE51bGwgPyBpbmRleCA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBjZW50ZXIgPSByYW5nZS5zdGFydCArIHJhbmdlLmNodW5rICogc3RhY2tJbmRleCArIHJhbmdlLmNodW5rIC8gMjtcbiAgICAgICAgICAgIHNpemUgPSBNYXRoLm1pbihtYXhCYXJUaGlja25lc3MsIHJhbmdlLmNodW5rICogcmFuZ2UucmF0aW8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2VudGVyID0gc2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZSh0aGlzLmdldFBhcnNlZChpbmRleClbc2NhbGUuYXhpc10sIGluZGV4KTtcbiAgICAgICAgICAgIHNpemUgPSBNYXRoLm1pbihtYXhCYXJUaGlja25lc3MsIHJ1bGVyLm1pbiAqIHJ1bGVyLnJhdGlvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYmFzZTogY2VudGVyIC0gc2l6ZSAvIDIsXG4gICAgICAgICAgICBoZWFkOiBjZW50ZXIgKyBzaXplIC8gMixcbiAgICAgICAgICAgIGNlbnRlcixcbiAgICAgICAgICAgIHNpemVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZHJhdygpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIGNvbnN0IHZTY2FsZSA9IG1ldGEudlNjYWxlO1xuICAgICAgICBjb25zdCByZWN0cyA9IG1ldGEuZGF0YTtcbiAgICAgICAgY29uc3QgaWxlbiA9IHJlY3RzLmxlbmd0aDtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmb3IoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldFBhcnNlZChpKVt2U2NhbGUuYXhpc10gIT09IG51bGwgJiYgIXJlY3RzW2ldLmhpZGRlbikge1xuICAgICAgICAgICAgICAgIHJlY3RzW2ldLmRyYXcodGhpcy5fY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQnViYmxlQ29udHJvbGxlciBleHRlbmRzIERhdGFzZXRDb250cm9sbGVyIHtcbiAgICBzdGF0aWMgaWQgPSAnYnViYmxlJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGRhdGFzZXRFbGVtZW50VHlwZTogZmFsc2UsXG4gICAgICAgIGRhdGFFbGVtZW50VHlwZTogJ3BvaW50JyxcbiAgICAgICAgYW5pbWF0aW9uczoge1xuICAgICAgICAgICAgbnVtYmVyczoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgJ3gnLFxuICAgICAgICAgICAgICAgICAgICAneScsXG4gICAgICAgICAgICAgICAgICAgICdib3JkZXJXaWR0aCcsXG4gICAgICAgICAgICAgICAgICAgICdyYWRpdXMnXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiBzdGF0aWMgb3ZlcnJpZGVzID0ge1xuICAgICAgICBzY2FsZXM6IHtcbiAgICAgICAgICAgIHg6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZWFyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHk6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZWFyJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICB0aGlzLmVuYWJsZU9wdGlvblNoYXJpbmcgPSB0cnVlO1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgfVxuIHBhcnNlUHJpbWl0aXZlRGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gc3VwZXIucGFyc2VQcmltaXRpdmVEYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCk7XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBwYXJzZWQubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgcGFyc2VkW2ldLl9jdXN0b20gPSB0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaSArIHN0YXJ0KS5yYWRpdXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gcGFyc2VBcnJheURhdGEobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHN1cGVyLnBhcnNlQXJyYXlEYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCk7XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBwYXJzZWQubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGRhdGFbc3RhcnQgKyBpXTtcbiAgICAgICAgICAgIHBhcnNlZFtpXS5fY3VzdG9tID0gdmFsdWVPckRlZmF1bHQoaXRlbVsyXSwgdGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGkgKyBzdGFydCkucmFkaXVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH1cbiBwYXJzZU9iamVjdERhdGEobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHN1cGVyLnBhcnNlT2JqZWN0RGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpO1xuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgcGFyc2VkLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhW3N0YXJ0ICsgaV07XG4gICAgICAgICAgICBwYXJzZWRbaV0uX2N1c3RvbSA9IHZhbHVlT3JEZWZhdWx0KGl0ZW0gJiYgaXRlbS5yICYmICtpdGVtLnIsIHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpICsgc3RhcnQpLnJhZGl1cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gZ2V0TWF4T3ZlcmZsb3coKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9jYWNoZWRNZXRhLmRhdGE7XG4gICAgICAgIGxldCBtYXggPSAwO1xuICAgICAgICBmb3IobGV0IGkgPSBkYXRhLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKXtcbiAgICAgICAgICAgIG1heCA9IE1hdGgubWF4KG1heCwgZGF0YVtpXS5zaXplKHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpKSkgLyAyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4ID4gMCAmJiBtYXg7XG4gICAgfVxuIGdldExhYmVsQW5kVmFsdWUoaW5kZXgpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuY2hhcnQuZGF0YS5sYWJlbHMgfHwgW107XG4gICAgICAgIGNvbnN0IHsgeFNjYWxlICwgeVNjYWxlICB9ID0gbWV0YTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaW5kZXgpO1xuICAgICAgICBjb25zdCB4ID0geFNjYWxlLmdldExhYmVsRm9yVmFsdWUocGFyc2VkLngpO1xuICAgICAgICBjb25zdCB5ID0geVNjYWxlLmdldExhYmVsRm9yVmFsdWUocGFyc2VkLnkpO1xuICAgICAgICBjb25zdCByID0gcGFyc2VkLl9jdXN0b207XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYWJlbDogbGFiZWxzW2luZGV4XSB8fCAnJyxcbiAgICAgICAgICAgIHZhbHVlOiAnKCcgKyB4ICsgJywgJyArIHkgKyAociA/ICcsICcgKyByIDogJycpICsgJyknXG4gICAgICAgIH07XG4gICAgfVxuICAgIHVwZGF0ZShtb2RlKSB7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IHRoaXMuX2NhY2hlZE1ldGEuZGF0YTtcbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50cyhwb2ludHMsIDAsIHBvaW50cy5sZW5ndGgsIG1vZGUpO1xuICAgIH1cbiAgICB1cGRhdGVFbGVtZW50cyhwb2ludHMsIHN0YXJ0LCBjb3VudCwgbW9kZSkge1xuICAgICAgICBjb25zdCByZXNldCA9IG1vZGUgPT09ICdyZXNldCc7XG4gICAgICAgIGNvbnN0IHsgaVNjYWxlICwgdlNjYWxlICB9ID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgeyBzaGFyZWRPcHRpb25zICwgaW5jbHVkZU9wdGlvbnMgIH0gPSB0aGlzLl9nZXRTaGFyZWRPcHRpb25zKHN0YXJ0LCBtb2RlKTtcbiAgICAgICAgY29uc3QgaUF4aXMgPSBpU2NhbGUuYXhpcztcbiAgICAgICAgY29uc3QgdkF4aXMgPSB2U2NhbGUuYXhpcztcbiAgICAgICAgZm9yKGxldCBpID0gc3RhcnQ7IGkgPCBzdGFydCArIGNvdW50OyBpKyspe1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSAhcmVzZXQgJiYgdGhpcy5nZXRQYXJzZWQoaSk7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICBjb25zdCBpUGl4ZWwgPSBwcm9wZXJ0aWVzW2lBeGlzXSA9IHJlc2V0ID8gaVNjYWxlLmdldFBpeGVsRm9yRGVjaW1hbCgwLjUpIDogaVNjYWxlLmdldFBpeGVsRm9yVmFsdWUocGFyc2VkW2lBeGlzXSk7XG4gICAgICAgICAgICBjb25zdCB2UGl4ZWwgPSBwcm9wZXJ0aWVzW3ZBeGlzXSA9IHJlc2V0ID8gdlNjYWxlLmdldEJhc2VQaXhlbCgpIDogdlNjYWxlLmdldFBpeGVsRm9yVmFsdWUocGFyc2VkW3ZBeGlzXSk7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLnNraXAgPSBpc05hTihpUGl4ZWwpIHx8IGlzTmFOKHZQaXhlbCk7XG4gICAgICAgICAgICBpZiAoaW5jbHVkZU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLm9wdGlvbnMgPSBzaGFyZWRPcHRpb25zIHx8IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpLCBwb2ludC5hY3RpdmUgPyAnYWN0aXZlJyA6IG1vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChyZXNldCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLm9wdGlvbnMucmFkaXVzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQocG9pbnQsIGksIHByb3BlcnRpZXMsIG1vZGUpO1xuICAgICAgICB9XG4gICAgfVxuIHJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaW5kZXgsIG1vZGUpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaW5kZXgpO1xuICAgICAgICBsZXQgdmFsdWVzID0gc3VwZXIucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpbmRleCwgbW9kZSk7XG4gICAgICAgIGlmICh2YWx1ZXMuJHNoYXJlZCkge1xuICAgICAgICAgICAgdmFsdWVzID0gT2JqZWN0LmFzc2lnbih7fSwgdmFsdWVzLCB7XG4gICAgICAgICAgICAgICAgJHNoYXJlZDogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhZGl1cyA9IHZhbHVlcy5yYWRpdXM7XG4gICAgICAgIGlmIChtb2RlICE9PSAnYWN0aXZlJykge1xuICAgICAgICAgICAgdmFsdWVzLnJhZGl1cyA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWVzLnJhZGl1cyArPSB2YWx1ZU9yRGVmYXVsdChwYXJzZWQgJiYgcGFyc2VkLl9jdXN0b20sIHJhZGl1cyk7XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRSYXRpb0FuZE9mZnNldChyb3RhdGlvbiwgY2lyY3VtZmVyZW5jZSwgY3V0b3V0KSB7XG4gICAgbGV0IHJhdGlvWCA9IDE7XG4gICAgbGV0IHJhdGlvWSA9IDE7XG4gICAgbGV0IG9mZnNldFggPSAwO1xuICAgIGxldCBvZmZzZXRZID0gMDtcbiAgICBpZiAoY2lyY3VtZmVyZW5jZSA8IFRBVSkge1xuICAgICAgICBjb25zdCBzdGFydEFuZ2xlID0gcm90YXRpb247XG4gICAgICAgIGNvbnN0IGVuZEFuZ2xlID0gc3RhcnRBbmdsZSArIGNpcmN1bWZlcmVuY2U7XG4gICAgICAgIGNvbnN0IHN0YXJ0WCA9IE1hdGguY29zKHN0YXJ0QW5nbGUpO1xuICAgICAgICBjb25zdCBzdGFydFkgPSBNYXRoLnNpbihzdGFydEFuZ2xlKTtcbiAgICAgICAgY29uc3QgZW5kWCA9IE1hdGguY29zKGVuZEFuZ2xlKTtcbiAgICAgICAgY29uc3QgZW5kWSA9IE1hdGguc2luKGVuZEFuZ2xlKTtcbiAgICAgICAgY29uc3QgY2FsY01heCA9IChhbmdsZSwgYSwgYik9Pl9hbmdsZUJldHdlZW4oYW5nbGUsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCB0cnVlKSA/IDEgOiBNYXRoLm1heChhLCBhICogY3V0b3V0LCBiLCBiICogY3V0b3V0KTtcbiAgICAgICAgY29uc3QgY2FsY01pbiA9IChhbmdsZSwgYSwgYik9Pl9hbmdsZUJldHdlZW4oYW5nbGUsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCB0cnVlKSA/IC0xIDogTWF0aC5taW4oYSwgYSAqIGN1dG91dCwgYiwgYiAqIGN1dG91dCk7XG4gICAgICAgIGNvbnN0IG1heFggPSBjYWxjTWF4KDAsIHN0YXJ0WCwgZW5kWCk7XG4gICAgICAgIGNvbnN0IG1heFkgPSBjYWxjTWF4KEhBTEZfUEksIHN0YXJ0WSwgZW5kWSk7XG4gICAgICAgIGNvbnN0IG1pblggPSBjYWxjTWluKFBJLCBzdGFydFgsIGVuZFgpO1xuICAgICAgICBjb25zdCBtaW5ZID0gY2FsY01pbihQSSArIEhBTEZfUEksIHN0YXJ0WSwgZW5kWSk7XG4gICAgICAgIHJhdGlvWCA9IChtYXhYIC0gbWluWCkgLyAyO1xuICAgICAgICByYXRpb1kgPSAobWF4WSAtIG1pblkpIC8gMjtcbiAgICAgICAgb2Zmc2V0WCA9IC0obWF4WCArIG1pblgpIC8gMjtcbiAgICAgICAgb2Zmc2V0WSA9IC0obWF4WSArIG1pblkpIC8gMjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmF0aW9YLFxuICAgICAgICByYXRpb1ksXG4gICAgICAgIG9mZnNldFgsXG4gICAgICAgIG9mZnNldFlcbiAgICB9O1xufVxuY2xhc3MgRG91Z2hudXRDb250cm9sbGVyIGV4dGVuZHMgRGF0YXNldENvbnRyb2xsZXIge1xuICAgIHN0YXRpYyBpZCA9ICdkb3VnaG51dCc7XG4gc3RhdGljIGRlZmF1bHRzID0ge1xuICAgICAgICBkYXRhc2V0RWxlbWVudFR5cGU6IGZhbHNlLFxuICAgICAgICBkYXRhRWxlbWVudFR5cGU6ICdhcmMnLFxuICAgICAgICBhbmltYXRpb246IHtcbiAgICAgICAgICAgIGFuaW1hdGVSb3RhdGU6IHRydWUsXG4gICAgICAgICAgICBhbmltYXRlU2NhbGU6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIGFuaW1hdGlvbnM6IHtcbiAgICAgICAgICAgIG51bWJlcnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICdjaXJjdW1mZXJlbmNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VuZEFuZ2xlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2lubmVyUmFkaXVzJyxcbiAgICAgICAgICAgICAgICAgICAgJ291dGVyUmFkaXVzJyxcbiAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0QW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICAneCcsXG4gICAgICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAgICAgJ29mZnNldCcsXG4gICAgICAgICAgICAgICAgICAgICdib3JkZXJXaWR0aCcsXG4gICAgICAgICAgICAgICAgICAgICdzcGFjaW5nJ1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3V0b3V0OiAnNTAlJyxcbiAgICAgICAgcm90YXRpb246IDAsXG4gICAgICAgIGNpcmN1bWZlcmVuY2U6IDM2MCxcbiAgICAgICAgcmFkaXVzOiAnMTAwJScsXG4gICAgICAgIHNwYWNpbmc6IDAsXG4gICAgICAgIGluZGV4QXhpczogJ3InXG4gICAgfTtcbiAgICBzdGF0aWMgZGVzY3JpcHRvcnMgPSB7XG4gICAgICAgIF9zY3JpcHRhYmxlOiAobmFtZSk9Pm5hbWUgIT09ICdzcGFjaW5nJyxcbiAgICAgICAgX2luZGV4YWJsZTogKG5hbWUpPT5uYW1lICE9PSAnc3BhY2luZycgJiYgIW5hbWUuc3RhcnRzV2l0aCgnYm9yZGVyRGFzaCcpICYmICFuYW1lLnN0YXJ0c1dpdGgoJ2hvdmVyQm9yZGVyRGFzaCcpXG4gICAgfTtcbiBzdGF0aWMgb3ZlcnJpZGVzID0ge1xuICAgICAgICBhc3BlY3RSYXRpbzogMSxcbiAgICAgICAgcGx1Z2luczoge1xuICAgICAgICAgICAgbGVnZW5kOiB7XG4gICAgICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlTGFiZWxzIChjaGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGNoYXJ0LmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5sYWJlbHMubGVuZ3RoICYmIGRhdGEuZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBsYWJlbHM6IHsgcG9pbnRTdHlsZSAsIGNvbG9yICB9ICB9ID0gY2hhcnQubGVnZW5kLm9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEubGFiZWxzLm1hcCgobGFiZWwsIGkpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YSgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBtZXRhLmNvbnRyb2xsZXIuZ2V0U3R5bGUoaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBsYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogc3R5bGUuYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlU3R5bGU6IHN0eWxlLmJvcmRlckNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udENvbG9yOiBjb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVXaWR0aDogc3R5bGUuYm9yZGVyV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludFN0eWxlOiBwb2ludFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiAhY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkoaSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbkNsaWNrIChlLCBsZWdlbmRJdGVtLCBsZWdlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmNoYXJ0LnRvZ2dsZURhdGFWaXNpYmlsaXR5KGxlZ2VuZEl0ZW0uaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBsZWdlbmQuY2hhcnQudXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdHJ1Y3RvcihjaGFydCwgZGF0YXNldEluZGV4KXtcbiAgICAgICAgc3VwZXIoY2hhcnQsIGRhdGFzZXRJbmRleCk7XG4gICAgICAgIHRoaXMuZW5hYmxlT3B0aW9uU2hhcmluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuaW5uZXJSYWRpdXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMub3V0ZXJSYWRpdXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMub2Zmc2V0WCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5vZmZzZXRZID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsaW5rU2NhbGVzKCkge31cbiBwYXJzZShzdGFydCwgY291bnQpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0RGF0YXNldCgpLmRhdGE7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBpZiAodGhpcy5fcGFyc2luZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG1ldGEuX3BhcnNlZCA9IGRhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZ2V0dGVyID0gKGkpPT4rZGF0YVtpXTtcbiAgICAgICAgICAgIGlmIChpc09iamVjdChkYXRhW3N0YXJ0XSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGtleSA9J3ZhbHVlJyAgfSA9IHRoaXMuX3BhcnNpbmc7XG4gICAgICAgICAgICAgICAgZ2V0dGVyID0gKGkpPT4rcmVzb2x2ZU9iamVjdEtleShkYXRhW2ldLCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGksIGlsZW47XG4gICAgICAgICAgICBmb3IoaSA9IHN0YXJ0LCBpbGVuID0gc3RhcnQgKyBjb3VudDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICAgICAgbWV0YS5fcGFyc2VkW2ldID0gZ2V0dGVyKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuIF9nZXRSb3RhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRvUmFkaWFucyh0aGlzLm9wdGlvbnMucm90YXRpb24gLSA5MCk7XG4gICAgfVxuIF9nZXRDaXJjdW1mZXJlbmNlKCkge1xuICAgICAgICByZXR1cm4gdG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jaXJjdW1mZXJlbmNlKTtcbiAgICB9XG4gX2dldFJvdGF0aW9uRXh0ZW50cygpIHtcbiAgICAgICAgbGV0IG1pbiA9IFRBVTtcbiAgICAgICAgbGV0IG1heCA9IC1UQVU7XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMubGVuZ3RoOyArK2kpe1xuICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnQuaXNEYXRhc2V0VmlzaWJsZShpKSAmJiB0aGlzLmNoYXJ0LmdldERhdGFzZXRNZXRhKGkpLnR5cGUgPT09IHRoaXMuX3R5cGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gdGhpcy5jaGFydC5nZXREYXRhc2V0TWV0YShpKS5jb250cm9sbGVyO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdGF0aW9uID0gY29udHJvbGxlci5fZ2V0Um90YXRpb24oKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaXJjdW1mZXJlbmNlID0gY29udHJvbGxlci5fZ2V0Q2lyY3VtZmVyZW5jZSgpO1xuICAgICAgICAgICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgcm90YXRpb24pO1xuICAgICAgICAgICAgICAgIG1heCA9IE1hdGgubWF4KG1heCwgcm90YXRpb24gKyBjaXJjdW1mZXJlbmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcm90YXRpb246IG1pbixcbiAgICAgICAgICAgIGNpcmN1bWZlcmVuY2U6IG1heCAtIG1pblxuICAgICAgICB9O1xuICAgIH1cbiB1cGRhdGUobW9kZSkge1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IHsgY2hhcnRBcmVhICB9ID0gY2hhcnQ7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBhcmNzID0gbWV0YS5kYXRhO1xuICAgICAgICBjb25zdCBzcGFjaW5nID0gdGhpcy5nZXRNYXhCb3JkZXJXaWR0aCgpICsgdGhpcy5nZXRNYXhPZmZzZXQoYXJjcykgKyB0aGlzLm9wdGlvbnMuc3BhY2luZztcbiAgICAgICAgY29uc3QgbWF4U2l6ZSA9IE1hdGgubWF4KChNYXRoLm1pbihjaGFydEFyZWEud2lkdGgsIGNoYXJ0QXJlYS5oZWlnaHQpIC0gc3BhY2luZykgLyAyLCAwKTtcbiAgICAgICAgY29uc3QgY3V0b3V0ID0gTWF0aC5taW4odG9QZXJjZW50YWdlKHRoaXMub3B0aW9ucy5jdXRvdXQsIG1heFNpemUpLCAxKTtcbiAgICAgICAgY29uc3QgY2hhcnRXZWlnaHQgPSB0aGlzLl9nZXRSaW5nV2VpZ2h0KHRoaXMuaW5kZXgpO1xuICAgICAgICBjb25zdCB7IGNpcmN1bWZlcmVuY2UgLCByb3RhdGlvbiAgfSA9IHRoaXMuX2dldFJvdGF0aW9uRXh0ZW50cygpO1xuICAgICAgICBjb25zdCB7IHJhdGlvWCAsIHJhdGlvWSAsIG9mZnNldFggLCBvZmZzZXRZICB9ID0gZ2V0UmF0aW9BbmRPZmZzZXQocm90YXRpb24sIGNpcmN1bWZlcmVuY2UsIGN1dG91dCk7XG4gICAgICAgIGNvbnN0IG1heFdpZHRoID0gKGNoYXJ0QXJlYS53aWR0aCAtIHNwYWNpbmcpIC8gcmF0aW9YO1xuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSAoY2hhcnRBcmVhLmhlaWdodCAtIHNwYWNpbmcpIC8gcmF0aW9ZO1xuICAgICAgICBjb25zdCBtYXhSYWRpdXMgPSBNYXRoLm1heChNYXRoLm1pbihtYXhXaWR0aCwgbWF4SGVpZ2h0KSAvIDIsIDApO1xuICAgICAgICBjb25zdCBvdXRlclJhZGl1cyA9IHRvRGltZW5zaW9uKHRoaXMub3B0aW9ucy5yYWRpdXMsIG1heFJhZGl1cyk7XG4gICAgICAgIGNvbnN0IGlubmVyUmFkaXVzID0gTWF0aC5tYXgob3V0ZXJSYWRpdXMgKiBjdXRvdXQsIDApO1xuICAgICAgICBjb25zdCByYWRpdXNMZW5ndGggPSAob3V0ZXJSYWRpdXMgLSBpbm5lclJhZGl1cykgLyB0aGlzLl9nZXRWaXNpYmxlRGF0YXNldFdlaWdodFRvdGFsKCk7XG4gICAgICAgIHRoaXMub2Zmc2V0WCA9IG9mZnNldFggKiBvdXRlclJhZGl1cztcbiAgICAgICAgdGhpcy5vZmZzZXRZID0gb2Zmc2V0WSAqIG91dGVyUmFkaXVzO1xuICAgICAgICBtZXRhLnRvdGFsID0gdGhpcy5jYWxjdWxhdGVUb3RhbCgpO1xuICAgICAgICB0aGlzLm91dGVyUmFkaXVzID0gb3V0ZXJSYWRpdXMgLSByYWRpdXNMZW5ndGggKiB0aGlzLl9nZXRSaW5nV2VpZ2h0T2Zmc2V0KHRoaXMuaW5kZXgpO1xuICAgICAgICB0aGlzLmlubmVyUmFkaXVzID0gTWF0aC5tYXgodGhpcy5vdXRlclJhZGl1cyAtIHJhZGl1c0xlbmd0aCAqIGNoYXJ0V2VpZ2h0LCAwKTtcbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50cyhhcmNzLCAwLCBhcmNzLmxlbmd0aCwgbW9kZSk7XG4gICAgfVxuIF9jaXJjdW1mZXJlbmNlKGksIHJlc2V0KSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBjaXJjdW1mZXJlbmNlID0gdGhpcy5fZ2V0Q2lyY3VtZmVyZW5jZSgpO1xuICAgICAgICBpZiAocmVzZXQgJiYgb3B0cy5hbmltYXRpb24uYW5pbWF0ZVJvdGF0ZSB8fCAhdGhpcy5jaGFydC5nZXREYXRhVmlzaWJpbGl0eShpKSB8fCBtZXRhLl9wYXJzZWRbaV0gPT09IG51bGwgfHwgbWV0YS5kYXRhW2ldLmhpZGRlbikge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlQ2lyY3VtZmVyZW5jZShtZXRhLl9wYXJzZWRbaV0gKiBjaXJjdW1mZXJlbmNlIC8gVEFVKTtcbiAgICB9XG4gICAgdXBkYXRlRWxlbWVudHMoYXJjcywgc3RhcnQsIGNvdW50LCBtb2RlKSB7XG4gICAgICAgIGNvbnN0IHJlc2V0ID0gbW9kZSA9PT0gJ3Jlc2V0JztcbiAgICAgICAgY29uc3QgY2hhcnQgPSB0aGlzLmNoYXJ0O1xuICAgICAgICBjb25zdCBjaGFydEFyZWEgPSBjaGFydC5jaGFydEFyZWE7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBjaGFydC5vcHRpb25zO1xuICAgICAgICBjb25zdCBhbmltYXRpb25PcHRzID0gb3B0cy5hbmltYXRpb247XG4gICAgICAgIGNvbnN0IGNlbnRlclggPSAoY2hhcnRBcmVhLmxlZnQgKyBjaGFydEFyZWEucmlnaHQpIC8gMjtcbiAgICAgICAgY29uc3QgY2VudGVyWSA9IChjaGFydEFyZWEudG9wICsgY2hhcnRBcmVhLmJvdHRvbSkgLyAyO1xuICAgICAgICBjb25zdCBhbmltYXRlU2NhbGUgPSByZXNldCAmJiBhbmltYXRpb25PcHRzLmFuaW1hdGVTY2FsZTtcbiAgICAgICAgY29uc3QgaW5uZXJSYWRpdXMgPSBhbmltYXRlU2NhbGUgPyAwIDogdGhpcy5pbm5lclJhZGl1cztcbiAgICAgICAgY29uc3Qgb3V0ZXJSYWRpdXMgPSBhbmltYXRlU2NhbGUgPyAwIDogdGhpcy5vdXRlclJhZGl1cztcbiAgICAgICAgY29uc3QgeyBzaGFyZWRPcHRpb25zICwgaW5jbHVkZU9wdGlvbnMgIH0gPSB0aGlzLl9nZXRTaGFyZWRPcHRpb25zKHN0YXJ0LCBtb2RlKTtcbiAgICAgICAgbGV0IHN0YXJ0QW5nbGUgPSB0aGlzLl9nZXRSb3RhdGlvbigpO1xuICAgICAgICBsZXQgaTtcbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgc3RhcnQ7ICsraSl7XG4gICAgICAgICAgICBzdGFydEFuZ2xlICs9IHRoaXMuX2NpcmN1bWZlcmVuY2UoaSwgcmVzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGZvcihpID0gc3RhcnQ7IGkgPCBzdGFydCArIGNvdW50OyArK2kpe1xuICAgICAgICAgICAgY29uc3QgY2lyY3VtZmVyZW5jZSA9IHRoaXMuX2NpcmN1bWZlcmVuY2UoaSwgcmVzZXQpO1xuICAgICAgICAgICAgY29uc3QgYXJjID0gYXJjc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgeDogY2VudGVyWCArIHRoaXMub2Zmc2V0WCxcbiAgICAgICAgICAgICAgICB5OiBjZW50ZXJZICsgdGhpcy5vZmZzZXRZLFxuICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsXG4gICAgICAgICAgICAgICAgZW5kQW5nbGU6IHN0YXJ0QW5nbGUgKyBjaXJjdW1mZXJlbmNlLFxuICAgICAgICAgICAgICAgIGNpcmN1bWZlcmVuY2UsXG4gICAgICAgICAgICAgICAgb3V0ZXJSYWRpdXMsXG4gICAgICAgICAgICAgICAgaW5uZXJSYWRpdXNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaW5jbHVkZU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLm9wdGlvbnMgPSBzaGFyZWRPcHRpb25zIHx8IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpLCBhcmMuYWN0aXZlID8gJ2FjdGl2ZScgOiBtb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJ0QW5nbGUgKz0gY2lyY3VtZmVyZW5jZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRWxlbWVudChhcmMsIGksIHByb3BlcnRpZXMsIG1vZGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhbGN1bGF0ZVRvdGFsKCkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgbWV0YURhdGEgPSBtZXRhLmRhdGE7XG4gICAgICAgIGxldCB0b3RhbCA9IDA7XG4gICAgICAgIGxldCBpO1xuICAgICAgICBmb3IoaSA9IDA7IGkgPCBtZXRhRGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1ldGEuX3BhcnNlZFtpXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiAhaXNOYU4odmFsdWUpICYmIHRoaXMuY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkoaSkgJiYgIW1ldGFEYXRhW2ldLmhpZGRlbikge1xuICAgICAgICAgICAgICAgIHRvdGFsICs9IE1hdGguYWJzKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG90YWw7XG4gICAgfVxuICAgIGNhbGN1bGF0ZUNpcmN1bWZlcmVuY2UodmFsdWUpIHtcbiAgICAgICAgY29uc3QgdG90YWwgPSB0aGlzLl9jYWNoZWRNZXRhLnRvdGFsO1xuICAgICAgICBpZiAodG90YWwgPiAwICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBUQVUgKiAoTWF0aC5hYnModmFsdWUpIC8gdG90YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBnZXRMYWJlbEFuZFZhbHVlKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IGNoYXJ0LmRhdGEubGFiZWxzIHx8IFtdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGZvcm1hdE51bWJlcihtZXRhLl9wYXJzZWRbaW5kZXhdLCBjaGFydC5vcHRpb25zLmxvY2FsZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYWJlbDogbGFiZWxzW2luZGV4XSB8fCAnJyxcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldE1heEJvcmRlcldpZHRoKGFyY3MpIHtcbiAgICAgICAgbGV0IG1heCA9IDA7XG4gICAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgICAgbGV0IGksIGlsZW4sIG1ldGEsIGNvbnRyb2xsZXIsIG9wdGlvbnM7XG4gICAgICAgIGlmICghYXJjcykge1xuICAgICAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gY2hhcnQuZGF0YS5kYXRhc2V0cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgICAgIGlmIChjaGFydC5pc0RhdGFzZXRWaXNpYmxlKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpKTtcbiAgICAgICAgICAgICAgICAgICAgYXJjcyA9IG1ldGEuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlciA9IG1ldGEuY29udHJvbGxlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghYXJjcykge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gYXJjcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgb3B0aW9ucyA9IGNvbnRyb2xsZXIucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJvcmRlckFsaWduICE9PSAnaW5uZXInKSB7XG4gICAgICAgICAgICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCBvcHRpb25zLmJvcmRlcldpZHRoIHx8IDAsIG9wdGlvbnMuaG92ZXJCb3JkZXJXaWR0aCB8fCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4O1xuICAgIH1cbiAgICBnZXRNYXhPZmZzZXQoYXJjcykge1xuICAgICAgICBsZXQgbWF4ID0gMDtcbiAgICAgICAgZm9yKGxldCBpID0gMCwgaWxlbiA9IGFyY3MubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaSk7XG4gICAgICAgICAgICBtYXggPSBNYXRoLm1heChtYXgsIG9wdGlvbnMub2Zmc2V0IHx8IDAsIG9wdGlvbnMuaG92ZXJPZmZzZXQgfHwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICB9XG4gX2dldFJpbmdXZWlnaHRPZmZzZXQoZGF0YXNldEluZGV4KSB7XG4gICAgICAgIGxldCByaW5nV2VpZ2h0T2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGRhdGFzZXRJbmRleDsgKytpKXtcbiAgICAgICAgICAgIGlmICh0aGlzLmNoYXJ0LmlzRGF0YXNldFZpc2libGUoaSkpIHtcbiAgICAgICAgICAgICAgICByaW5nV2VpZ2h0T2Zmc2V0ICs9IHRoaXMuX2dldFJpbmdXZWlnaHQoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJpbmdXZWlnaHRPZmZzZXQ7XG4gICAgfVxuIF9nZXRSaW5nV2VpZ2h0KGRhdGFzZXRJbmRleCkge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgodmFsdWVPckRlZmF1bHQodGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0ud2VpZ2h0LCAxKSwgMCk7XG4gICAgfVxuIF9nZXRWaXNpYmxlRGF0YXNldFdlaWdodFRvdGFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0UmluZ1dlaWdodE9mZnNldCh0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMubGVuZ3RoKSB8fCAxO1xuICAgIH1cbn1cblxuY2xhc3MgTGluZUNvbnRyb2xsZXIgZXh0ZW5kcyBEYXRhc2V0Q29udHJvbGxlciB7XG4gICAgc3RhdGljIGlkID0gJ2xpbmUnO1xuIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICAgICAgZGF0YXNldEVsZW1lbnRUeXBlOiAnbGluZScsXG4gICAgICAgIGRhdGFFbGVtZW50VHlwZTogJ3BvaW50JyxcbiAgICAgICAgc2hvd0xpbmU6IHRydWUsXG4gICAgICAgIHNwYW5HYXBzOiBmYWxzZVxuICAgIH07XG4gc3RhdGljIG92ZXJyaWRlcyA9IHtcbiAgICAgICAgc2NhbGVzOiB7XG4gICAgICAgICAgICBfaW5kZXhfOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2NhdGVnb3J5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF92YWx1ZV86IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZWFyJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICB0aGlzLmVuYWJsZU9wdGlvblNoYXJpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnN1cHBvcnRzRGVjaW1hdGlvbiA9IHRydWU7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICB9XG4gICAgdXBkYXRlKG1vZGUpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIGNvbnN0IHsgZGF0YXNldDogbGluZSAsIGRhdGE6IHBvaW50cyA9IFtdICwgX2RhdGFzZXQgIH0gPSBtZXRhO1xuICAgICAgICBjb25zdCBhbmltYXRpb25zRGlzYWJsZWQgPSB0aGlzLmNoYXJ0Ll9hbmltYXRpb25zRGlzYWJsZWQ7XG4gICAgICAgIGxldCB7IHN0YXJ0ICwgY291bnQgIH0gPSBfZ2V0U3RhcnRBbmRDb3VudE9mVmlzaWJsZVBvaW50cyhtZXRhLCBwb2ludHMsIGFuaW1hdGlvbnNEaXNhYmxlZCk7XG4gICAgICAgIHRoaXMuX2RyYXdTdGFydCA9IHN0YXJ0O1xuICAgICAgICB0aGlzLl9kcmF3Q291bnQgPSBjb3VudDtcbiAgICAgICAgaWYgKF9zY2FsZVJhbmdlc0NoYW5nZWQobWV0YSkpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgICAgIGNvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBsaW5lLl9jaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGxpbmUuX2RhdGFzZXRJbmRleCA9IHRoaXMuaW5kZXg7XG4gICAgICAgIGxpbmUuX2RlY2ltYXRlZCA9ICEhX2RhdGFzZXQuX2RlY2ltYXRlZDtcbiAgICAgICAgbGluZS5wb2ludHMgPSBwb2ludHM7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnJlc29sdmVEYXRhc2V0RWxlbWVudE9wdGlvbnMobW9kZSk7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLnNob3dMaW5lKSB7XG4gICAgICAgICAgICBvcHRpb25zLmJvcmRlcldpZHRoID0gMDtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnNlZ21lbnQgPSB0aGlzLm9wdGlvbnMuc2VnbWVudDtcbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50KGxpbmUsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgYW5pbWF0ZWQ6ICFhbmltYXRpb25zRGlzYWJsZWQsXG4gICAgICAgICAgICBvcHRpb25zXG4gICAgICAgIH0sIG1vZGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRzKHBvaW50cywgc3RhcnQsIGNvdW50LCBtb2RlKTtcbiAgICB9XG4gICAgdXBkYXRlRWxlbWVudHMocG9pbnRzLCBzdGFydCwgY291bnQsIG1vZGUpIHtcbiAgICAgICAgY29uc3QgcmVzZXQgPSBtb2RlID09PSAncmVzZXQnO1xuICAgICAgICBjb25zdCB7IGlTY2FsZSAsIHZTY2FsZSAsIF9zdGFja2VkICwgX2RhdGFzZXQgIH0gPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCB7IHNoYXJlZE9wdGlvbnMgLCBpbmNsdWRlT3B0aW9ucyAgfSA9IHRoaXMuX2dldFNoYXJlZE9wdGlvbnMoc3RhcnQsIG1vZGUpO1xuICAgICAgICBjb25zdCBpQXhpcyA9IGlTY2FsZS5heGlzO1xuICAgICAgICBjb25zdCB2QXhpcyA9IHZTY2FsZS5heGlzO1xuICAgICAgICBjb25zdCB7IHNwYW5HYXBzICwgc2VnbWVudCAgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgbWF4R2FwTGVuZ3RoID0gaXNOdW1iZXIoc3BhbkdhcHMpID8gc3BhbkdhcHMgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIGNvbnN0IGRpcmVjdFVwZGF0ZSA9IHRoaXMuY2hhcnQuX2FuaW1hdGlvbnNEaXNhYmxlZCB8fCByZXNldCB8fCBtb2RlID09PSAnbm9uZSc7XG4gICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgY291bnQ7XG4gICAgICAgIGNvbnN0IHBvaW50c0NvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICAgICAgbGV0IHByZXZQYXJzZWQgPSBzdGFydCA+IDAgJiYgdGhpcy5nZXRQYXJzZWQoc3RhcnQgLSAxKTtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHBvaW50c0NvdW50OyArK2kpe1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gZGlyZWN0VXBkYXRlID8gcG9pbnQgOiB7fTtcbiAgICAgICAgICAgIGlmIChpIDwgc3RhcnQgfHwgaSA+PSBlbmQpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnNraXAgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaSk7XG4gICAgICAgICAgICBjb25zdCBudWxsRGF0YSA9IGlzTnVsbE9yVW5kZWYocGFyc2VkW3ZBeGlzXSk7XG4gICAgICAgICAgICBjb25zdCBpUGl4ZWwgPSBwcm9wZXJ0aWVzW2lBeGlzXSA9IGlTY2FsZS5nZXRQaXhlbEZvclZhbHVlKHBhcnNlZFtpQXhpc10sIGkpO1xuICAgICAgICAgICAgY29uc3QgdlBpeGVsID0gcHJvcGVydGllc1t2QXhpc10gPSByZXNldCB8fCBudWxsRGF0YSA/IHZTY2FsZS5nZXRCYXNlUGl4ZWwoKSA6IHZTY2FsZS5nZXRQaXhlbEZvclZhbHVlKF9zdGFja2VkID8gdGhpcy5hcHBseVN0YWNrKHZTY2FsZSwgcGFyc2VkLCBfc3RhY2tlZCkgOiBwYXJzZWRbdkF4aXNdLCBpKTtcbiAgICAgICAgICAgIHByb3BlcnRpZXMuc2tpcCA9IGlzTmFOKGlQaXhlbCkgfHwgaXNOYU4odlBpeGVsKSB8fCBudWxsRGF0YTtcbiAgICAgICAgICAgIHByb3BlcnRpZXMuc3RvcCA9IGkgPiAwICYmIE1hdGguYWJzKHBhcnNlZFtpQXhpc10gLSBwcmV2UGFyc2VkW2lBeGlzXSkgPiBtYXhHYXBMZW5ndGg7XG4gICAgICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucGFyc2VkID0gcGFyc2VkO1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucmF3ID0gX2RhdGFzZXQuZGF0YVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbmNsdWRlT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMub3B0aW9ucyA9IHNoYXJlZE9wdGlvbnMgfHwgdGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGksIHBvaW50LmFjdGl2ZSA/ICdhY3RpdmUnIDogbW9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWRpcmVjdFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRWxlbWVudChwb2ludCwgaSwgcHJvcGVydGllcywgbW9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2UGFyc2VkID0gcGFyc2VkO1xuICAgICAgICB9XG4gICAgfVxuIGdldE1heE92ZXJmbG93KCkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgZGF0YXNldCA9IG1ldGEuZGF0YXNldDtcbiAgICAgICAgY29uc3QgYm9yZGVyID0gZGF0YXNldC5vcHRpb25zICYmIGRhdGFzZXQub3B0aW9ucy5ib3JkZXJXaWR0aCB8fCAwO1xuICAgICAgICBjb25zdCBkYXRhID0gbWV0YS5kYXRhIHx8IFtdO1xuICAgICAgICBpZiAoIWRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gYm9yZGVyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpcnN0UG9pbnQgPSBkYXRhWzBdLnNpemUodGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKDApKTtcbiAgICAgICAgY29uc3QgbGFzdFBvaW50ID0gZGF0YVtkYXRhLmxlbmd0aCAtIDFdLnNpemUodGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGRhdGEubGVuZ3RoIC0gMSkpO1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoYm9yZGVyLCBmaXJzdFBvaW50LCBsYXN0UG9pbnQpIC8gMjtcbiAgICB9XG4gICAgZHJhdygpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIG1ldGEuZGF0YXNldC51cGRhdGVDb250cm9sUG9pbnRzKHRoaXMuY2hhcnQuY2hhcnRBcmVhLCBtZXRhLmlTY2FsZS5heGlzKTtcbiAgICAgICAgc3VwZXIuZHJhdygpO1xuICAgIH1cbn1cblxuY2xhc3MgUG9sYXJBcmVhQ29udHJvbGxlciBleHRlbmRzIERhdGFzZXRDb250cm9sbGVyIHtcbiAgICBzdGF0aWMgaWQgPSAncG9sYXJBcmVhJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGRhdGFFbGVtZW50VHlwZTogJ2FyYycsXG4gICAgICAgIGFuaW1hdGlvbjoge1xuICAgICAgICAgICAgYW5pbWF0ZVJvdGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGFuaW1hdGVTY2FsZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBhbmltYXRpb25zOiB7XG4gICAgICAgICAgICBudW1iZXJzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAneCcsXG4gICAgICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0QW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICAnZW5kQW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICAnaW5uZXJSYWRpdXMnLFxuICAgICAgICAgICAgICAgICAgICAnb3V0ZXJSYWRpdXMnXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBpbmRleEF4aXM6ICdyJyxcbiAgICAgICAgc3RhcnRBbmdsZTogMFxuICAgIH07XG4gc3RhdGljIG92ZXJyaWRlcyA9IHtcbiAgICAgICAgYXNwZWN0UmF0aW86IDEsXG4gICAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgICAgIGxlZ2VuZDoge1xuICAgICAgICAgICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUxhYmVscyAoY2hhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBjaGFydC5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEubGFiZWxzLmxlbmd0aCAmJiBkYXRhLmRhdGFzZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGFiZWxzOiB7IHBvaW50U3R5bGUgLCBjb2xvciAgfSAgfSA9IGNoYXJ0LmxlZ2VuZC5vcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmxhYmVscy5tYXAoKGxhYmVsLCBpKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gbWV0YS5jb250cm9sbGVyLmdldFN0eWxlKGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogbGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IHN0eWxlLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVN0eWxlOiBzdHlsZS5ib3JkZXJDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRDb2xvcjogY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lV2lkdGg6IHN0eWxlLmJvcmRlcldpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRTdHlsZTogcG9pbnRTdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbjogIWNoYXJ0LmdldERhdGFWaXNpYmlsaXR5KGkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25DbGljayAoZSwgbGVnZW5kSXRlbSwgbGVnZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5jaGFydC50b2dnbGVEYXRhVmlzaWJpbGl0eShsZWdlbmRJdGVtLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmNoYXJ0LnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2NhbGVzOiB7XG4gICAgICAgICAgICByOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3JhZGlhbExpbmVhcicsXG4gICAgICAgICAgICAgICAgYW5nbGVMaW5lczoge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmVnaW5BdFplcm86IHRydWUsXG4gICAgICAgICAgICAgICAgZ3JpZDoge1xuICAgICAgICAgICAgICAgICAgICBjaXJjdWxhcjogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcG9pbnRMYWJlbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGU6IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3RydWN0b3IoY2hhcnQsIGRhdGFzZXRJbmRleCl7XG4gICAgICAgIHN1cGVyKGNoYXJ0LCBkYXRhc2V0SW5kZXgpO1xuICAgICAgICB0aGlzLmlubmVyUmFkaXVzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm91dGVyUmFkaXVzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXRMYWJlbEFuZFZhbHVlKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IGNoYXJ0LmRhdGEubGFiZWxzIHx8IFtdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGZvcm1hdE51bWJlcihtZXRhLl9wYXJzZWRbaW5kZXhdLnIsIGNoYXJ0Lm9wdGlvbnMubG9jYWxlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhYmVsOiBsYWJlbHNbaW5kZXhdIHx8ICcnLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcGFyc2VPYmplY3REYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgICAgICByZXR1cm4gX3BhcnNlT2JqZWN0RGF0YVJhZGlhbFNjYWxlLmJpbmQodGhpcykobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KTtcbiAgICB9XG4gICAgdXBkYXRlKG1vZGUpIHtcbiAgICAgICAgY29uc3QgYXJjcyA9IHRoaXMuX2NhY2hlZE1ldGEuZGF0YTtcbiAgICAgICAgdGhpcy5fdXBkYXRlUmFkaXVzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudHMoYXJjcywgMCwgYXJjcy5sZW5ndGgsIG1vZGUpO1xuICAgIH1cbiBnZXRNaW5NYXgoKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCByYW5nZSA9IHtcbiAgICAgICAgICAgIG1pbjogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgICAgICAgbWF4OiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICAgICAgfTtcbiAgICAgICAgbWV0YS5kYXRhLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KT0+e1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaW5kZXgpLnI7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHBhcnNlZCkgJiYgdGhpcy5jaGFydC5nZXREYXRhVmlzaWJpbGl0eShpbmRleCkpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkIDwgcmFuZ2UubWluKSB7XG4gICAgICAgICAgICAgICAgICAgIHJhbmdlLm1pbiA9IHBhcnNlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZCA+IHJhbmdlLm1heCkge1xuICAgICAgICAgICAgICAgICAgICByYW5nZS5tYXggPSBwYXJzZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH1cbiBfdXBkYXRlUmFkaXVzKCkge1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IGNoYXJ0QXJlYSA9IGNoYXJ0LmNoYXJ0QXJlYTtcbiAgICAgICAgY29uc3Qgb3B0cyA9IGNoYXJ0Lm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IG1pblNpemUgPSBNYXRoLm1pbihjaGFydEFyZWEucmlnaHQgLSBjaGFydEFyZWEubGVmdCwgY2hhcnRBcmVhLmJvdHRvbSAtIGNoYXJ0QXJlYS50b3ApO1xuICAgICAgICBjb25zdCBvdXRlclJhZGl1cyA9IE1hdGgubWF4KG1pblNpemUgLyAyLCAwKTtcbiAgICAgICAgY29uc3QgaW5uZXJSYWRpdXMgPSBNYXRoLm1heChvcHRzLmN1dG91dFBlcmNlbnRhZ2UgPyBvdXRlclJhZGl1cyAvIDEwMCAqIG9wdHMuY3V0b3V0UGVyY2VudGFnZSA6IDEsIDApO1xuICAgICAgICBjb25zdCByYWRpdXNMZW5ndGggPSAob3V0ZXJSYWRpdXMgLSBpbm5lclJhZGl1cykgLyBjaGFydC5nZXRWaXNpYmxlRGF0YXNldENvdW50KCk7XG4gICAgICAgIHRoaXMub3V0ZXJSYWRpdXMgPSBvdXRlclJhZGl1cyAtIHJhZGl1c0xlbmd0aCAqIHRoaXMuaW5kZXg7XG4gICAgICAgIHRoaXMuaW5uZXJSYWRpdXMgPSB0aGlzLm91dGVyUmFkaXVzIC0gcmFkaXVzTGVuZ3RoO1xuICAgIH1cbiAgICB1cGRhdGVFbGVtZW50cyhhcmNzLCBzdGFydCwgY291bnQsIG1vZGUpIHtcbiAgICAgICAgY29uc3QgcmVzZXQgPSBtb2RlID09PSAncmVzZXQnO1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBjaGFydC5vcHRpb25zO1xuICAgICAgICBjb25zdCBhbmltYXRpb25PcHRzID0gb3B0cy5hbmltYXRpb247XG4gICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5fY2FjaGVkTWV0YS5yU2NhbGU7XG4gICAgICAgIGNvbnN0IGNlbnRlclggPSBzY2FsZS54Q2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXJZID0gc2NhbGUueUNlbnRlcjtcbiAgICAgICAgY29uc3QgZGF0YXNldFN0YXJ0QW5nbGUgPSBzY2FsZS5nZXRJbmRleEFuZ2xlKDApIC0gMC41ICogUEk7XG4gICAgICAgIGxldCBhbmdsZSA9IGRhdGFzZXRTdGFydEFuZ2xlO1xuICAgICAgICBsZXQgaTtcbiAgICAgICAgY29uc3QgZGVmYXVsdEFuZ2xlID0gMzYwIC8gdGhpcy5jb3VudFZpc2libGVFbGVtZW50cygpO1xuICAgICAgICBmb3IoaSA9IDA7IGkgPCBzdGFydDsgKytpKXtcbiAgICAgICAgICAgIGFuZ2xlICs9IHRoaXMuX2NvbXB1dGVBbmdsZShpLCBtb2RlLCBkZWZhdWx0QW5nbGUpO1xuICAgICAgICB9XG4gICAgICAgIGZvcihpID0gc3RhcnQ7IGkgPCBzdGFydCArIGNvdW50OyBpKyspe1xuICAgICAgICAgICAgY29uc3QgYXJjID0gYXJjc1tpXTtcbiAgICAgICAgICAgIGxldCBzdGFydEFuZ2xlID0gYW5nbGU7XG4gICAgICAgICAgICBsZXQgZW5kQW5nbGUgPSBhbmdsZSArIHRoaXMuX2NvbXB1dGVBbmdsZShpLCBtb2RlLCBkZWZhdWx0QW5nbGUpO1xuICAgICAgICAgICAgbGV0IG91dGVyUmFkaXVzID0gY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkoaSkgPyBzY2FsZS5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSh0aGlzLmdldFBhcnNlZChpKS5yKSA6IDA7XG4gICAgICAgICAgICBhbmdsZSA9IGVuZEFuZ2xlO1xuICAgICAgICAgICAgaWYgKHJlc2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFuaW1hdGlvbk9wdHMuYW5pbWF0ZVNjYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dGVyUmFkaXVzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFuaW1hdGlvbk9wdHMuYW5pbWF0ZVJvdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydEFuZ2xlID0gZW5kQW5nbGUgPSBkYXRhc2V0U3RhcnRBbmdsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICAgIHg6IGNlbnRlclgsXG4gICAgICAgICAgICAgICAgeTogY2VudGVyWSxcbiAgICAgICAgICAgICAgICBpbm5lclJhZGl1czogMCxcbiAgICAgICAgICAgICAgICBvdXRlclJhZGl1cyxcbiAgICAgICAgICAgICAgICBzdGFydEFuZ2xlLFxuICAgICAgICAgICAgICAgIGVuZEFuZ2xlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpLCBhcmMuYWN0aXZlID8gJ2FjdGl2ZScgOiBtb2RlKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRWxlbWVudChhcmMsIGksIHByb3BlcnRpZXMsIG1vZGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvdW50VmlzaWJsZUVsZW1lbnRzKCkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgbWV0YS5kYXRhLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KT0+e1xuICAgICAgICAgICAgaWYgKCFpc05hTih0aGlzLmdldFBhcnNlZChpbmRleCkucikgJiYgdGhpcy5jaGFydC5nZXREYXRhVmlzaWJpbGl0eShpbmRleCkpIHtcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH1cbiBfY29tcHV0ZUFuZ2xlKGluZGV4LCBtb2RlLCBkZWZhdWx0QW5nbGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkoaW5kZXgpID8gdG9SYWRpYW5zKHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpbmRleCwgbW9kZSkuYW5nbGUgfHwgZGVmYXVsdEFuZ2xlKSA6IDA7XG4gICAgfVxufVxuXG5jbGFzcyBQaWVDb250cm9sbGVyIGV4dGVuZHMgRG91Z2hudXRDb250cm9sbGVyIHtcbiAgICBzdGF0aWMgaWQgPSAncGllJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGN1dG91dDogMCxcbiAgICAgICAgcm90YXRpb246IDAsXG4gICAgICAgIGNpcmN1bWZlcmVuY2U6IDM2MCxcbiAgICAgICAgcmFkaXVzOiAnMTAwJSdcbiAgICB9O1xufVxuXG5jbGFzcyBSYWRhckNvbnRyb2xsZXIgZXh0ZW5kcyBEYXRhc2V0Q29udHJvbGxlciB7XG4gICAgc3RhdGljIGlkID0gJ3JhZGFyJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGRhdGFzZXRFbGVtZW50VHlwZTogJ2xpbmUnLFxuICAgICAgICBkYXRhRWxlbWVudFR5cGU6ICdwb2ludCcsXG4gICAgICAgIGluZGV4QXhpczogJ3InLFxuICAgICAgICBzaG93TGluZTogdHJ1ZSxcbiAgICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgICAgIGxpbmU6IHtcbiAgICAgICAgICAgICAgICBmaWxsOiAnc3RhcnQnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuIHN0YXRpYyBvdmVycmlkZXMgPSB7XG4gICAgICAgIGFzcGVjdFJhdGlvOiAxLFxuICAgICAgICBzY2FsZXM6IHtcbiAgICAgICAgICAgIHI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAncmFkaWFsTGluZWFyJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiBnZXRMYWJlbEFuZFZhbHVlKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IHZTY2FsZSA9IHRoaXMuX2NhY2hlZE1ldGEudlNjYWxlO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLmdldFBhcnNlZChpbmRleCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYWJlbDogdlNjYWxlLmdldExhYmVscygpW2luZGV4XSxcbiAgICAgICAgICAgIHZhbHVlOiAnJyArIHZTY2FsZS5nZXRMYWJlbEZvclZhbHVlKHBhcnNlZFt2U2NhbGUuYXhpc10pXG4gICAgICAgIH07XG4gICAgfVxuICAgIHBhcnNlT2JqZWN0RGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9wYXJzZU9iamVjdERhdGFSYWRpYWxTY2FsZS5iaW5kKHRoaXMpKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCk7XG4gICAgfVxuICAgIHVwZGF0ZShtb2RlKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBsaW5lID0gbWV0YS5kYXRhc2V0O1xuICAgICAgICBjb25zdCBwb2ludHMgPSBtZXRhLmRhdGEgfHwgW107XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IG1ldGEuaVNjYWxlLmdldExhYmVscygpO1xuICAgICAgICBsaW5lLnBvaW50cyA9IHBvaW50cztcbiAgICAgICAgaWYgKG1vZGUgIT09ICdyZXNpemUnKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5yZXNvbHZlRGF0YXNldEVsZW1lbnRPcHRpb25zKG1vZGUpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc2hvd0xpbmUpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmJvcmRlcldpZHRoID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgX2xvb3A6IHRydWUsXG4gICAgICAgICAgICAgICAgX2Z1bGxMb29wOiBsYWJlbHMubGVuZ3RoID09PSBwb2ludHMubGVuZ3RoLFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQobGluZSwgdW5kZWZpbmVkLCBwcm9wZXJ0aWVzLCBtb2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRzKHBvaW50cywgMCwgcG9pbnRzLmxlbmd0aCwgbW9kZSk7XG4gICAgfVxuICAgIHVwZGF0ZUVsZW1lbnRzKHBvaW50cywgc3RhcnQsIGNvdW50LCBtb2RlKSB7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5fY2FjaGVkTWV0YS5yU2NhbGU7XG4gICAgICAgIGNvbnN0IHJlc2V0ID0gbW9kZSA9PT0gJ3Jlc2V0JztcbiAgICAgICAgZm9yKGxldCBpID0gc3RhcnQ7IGkgPCBzdGFydCArIGNvdW50OyBpKyspe1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGksIHBvaW50LmFjdGl2ZSA/ICdhY3RpdmUnIDogbW9kZSk7XG4gICAgICAgICAgICBjb25zdCBwb2ludFBvc2l0aW9uID0gc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKGksIHRoaXMuZ2V0UGFyc2VkKGkpLnIpO1xuICAgICAgICAgICAgY29uc3QgeCA9IHJlc2V0ID8gc2NhbGUueENlbnRlciA6IHBvaW50UG9zaXRpb24ueDtcbiAgICAgICAgICAgIGNvbnN0IHkgPSByZXNldCA/IHNjYWxlLnlDZW50ZXIgOiBwb2ludFBvc2l0aW9uLnk7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgeSxcbiAgICAgICAgICAgICAgICBhbmdsZTogcG9pbnRQb3NpdGlvbi5hbmdsZSxcbiAgICAgICAgICAgICAgICBza2lwOiBpc05hTih4KSB8fCBpc05hTih5KSxcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50KHBvaW50LCBpLCBwcm9wZXJ0aWVzLCBtb2RlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU2NhdHRlckNvbnRyb2xsZXIgZXh0ZW5kcyBEYXRhc2V0Q29udHJvbGxlciB7XG4gICAgc3RhdGljIGlkID0gJ3NjYXR0ZXInO1xuIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICAgICAgZGF0YXNldEVsZW1lbnRUeXBlOiBmYWxzZSxcbiAgICAgICAgZGF0YUVsZW1lbnRUeXBlOiAncG9pbnQnLFxuICAgICAgICBzaG93TGluZTogZmFsc2UsXG4gICAgICAgIGZpbGw6IGZhbHNlXG4gICAgfTtcbiBzdGF0aWMgb3ZlcnJpZGVzID0ge1xuICAgICAgICBpbnRlcmFjdGlvbjoge1xuICAgICAgICAgICAgbW9kZTogJ3BvaW50J1xuICAgICAgICB9LFxuICAgICAgICBzY2FsZXM6IHtcbiAgICAgICAgICAgIHg6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZWFyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHk6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZWFyJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiBnZXRMYWJlbEFuZFZhbHVlKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmNoYXJ0LmRhdGEubGFiZWxzIHx8IFtdO1xuICAgICAgICBjb25zdCB7IHhTY2FsZSAsIHlTY2FsZSAgfSA9IG1ldGE7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuZ2V0UGFyc2VkKGluZGV4KTtcbiAgICAgICAgY29uc3QgeCA9IHhTY2FsZS5nZXRMYWJlbEZvclZhbHVlKHBhcnNlZC54KTtcbiAgICAgICAgY29uc3QgeSA9IHlTY2FsZS5nZXRMYWJlbEZvclZhbHVlKHBhcnNlZC55KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhYmVsOiBsYWJlbHNbaW5kZXhdIHx8ICcnLFxuICAgICAgICAgICAgdmFsdWU6ICcoJyArIHggKyAnLCAnICsgeSArICcpJ1xuICAgICAgICB9O1xuICAgIH1cbiAgICB1cGRhdGUobW9kZSkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgeyBkYXRhOiBwb2ludHMgPSBbXSAgfSA9IG1ldGE7XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbnNEaXNhYmxlZCA9IHRoaXMuY2hhcnQuX2FuaW1hdGlvbnNEaXNhYmxlZDtcbiAgICAgICAgbGV0IHsgc3RhcnQgLCBjb3VudCAgfSA9IF9nZXRTdGFydEFuZENvdW50T2ZWaXNpYmxlUG9pbnRzKG1ldGEsIHBvaW50cywgYW5pbWF0aW9uc0Rpc2FibGVkKTtcbiAgICAgICAgdGhpcy5fZHJhd1N0YXJ0ID0gc3RhcnQ7XG4gICAgICAgIHRoaXMuX2RyYXdDb3VudCA9IGNvdW50O1xuICAgICAgICBpZiAoX3NjYWxlUmFuZ2VzQ2hhbmdlZChtZXRhKSkge1xuICAgICAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgICAgICAgY291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0xpbmUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhc2V0RWxlbWVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEVsZW1lbnRzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IGRhdGFzZXQ6IGxpbmUgLCBfZGF0YXNldCAgfSA9IG1ldGE7XG4gICAgICAgICAgICBsaW5lLl9jaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgICAgICBsaW5lLl9kYXRhc2V0SW5kZXggPSB0aGlzLmluZGV4O1xuICAgICAgICAgICAgbGluZS5fZGVjaW1hdGVkID0gISFfZGF0YXNldC5fZGVjaW1hdGVkO1xuICAgICAgICAgICAgbGluZS5wb2ludHMgPSBwb2ludHM7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5yZXNvbHZlRGF0YXNldEVsZW1lbnRPcHRpb25zKG1vZGUpO1xuICAgICAgICAgICAgb3B0aW9ucy5zZWdtZW50ID0gdGhpcy5vcHRpb25zLnNlZ21lbnQ7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQobGluZSwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICAgICAgYW5pbWF0ZWQ6ICFhbmltYXRpb25zRGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgfSwgbW9kZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhc2V0RWxlbWVudFR5cGUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBtZXRhLmRhdGFzZXQ7XG4gICAgICAgICAgICB0aGlzLmRhdGFzZXRFbGVtZW50VHlwZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudHMocG9pbnRzLCBzdGFydCwgY291bnQsIG1vZGUpO1xuICAgIH1cbiAgICBhZGRFbGVtZW50cygpIHtcbiAgICAgICAgY29uc3QgeyBzaG93TGluZSAgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgaWYgKCF0aGlzLmRhdGFzZXRFbGVtZW50VHlwZSAmJiBzaG93TGluZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhc2V0RWxlbWVudFR5cGUgPSB0aGlzLmNoYXJ0LnJlZ2lzdHJ5LmdldEVsZW1lbnQoJ2xpbmUnKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5hZGRFbGVtZW50cygpO1xuICAgIH1cbiAgICB1cGRhdGVFbGVtZW50cyhwb2ludHMsIHN0YXJ0LCBjb3VudCwgbW9kZSkge1xuICAgICAgICBjb25zdCByZXNldCA9IG1vZGUgPT09ICdyZXNldCc7XG4gICAgICAgIGNvbnN0IHsgaVNjYWxlICwgdlNjYWxlICwgX3N0YWNrZWQgLCBfZGF0YXNldCAgfSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIGNvbnN0IGZpcnN0T3B0cyA9IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhzdGFydCwgbW9kZSk7XG4gICAgICAgIGNvbnN0IHNoYXJlZE9wdGlvbnMgPSB0aGlzLmdldFNoYXJlZE9wdGlvbnMoZmlyc3RPcHRzKTtcbiAgICAgICAgY29uc3QgaW5jbHVkZU9wdGlvbnMgPSB0aGlzLmluY2x1ZGVPcHRpb25zKG1vZGUsIHNoYXJlZE9wdGlvbnMpO1xuICAgICAgICBjb25zdCBpQXhpcyA9IGlTY2FsZS5heGlzO1xuICAgICAgICBjb25zdCB2QXhpcyA9IHZTY2FsZS5heGlzO1xuICAgICAgICBjb25zdCB7IHNwYW5HYXBzICwgc2VnbWVudCAgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgbWF4R2FwTGVuZ3RoID0gaXNOdW1iZXIoc3BhbkdhcHMpID8gc3BhbkdhcHMgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIGNvbnN0IGRpcmVjdFVwZGF0ZSA9IHRoaXMuY2hhcnQuX2FuaW1hdGlvbnNEaXNhYmxlZCB8fCByZXNldCB8fCBtb2RlID09PSAnbm9uZSc7XG4gICAgICAgIGxldCBwcmV2UGFyc2VkID0gc3RhcnQgPiAwICYmIHRoaXMuZ2V0UGFyc2VkKHN0YXJ0IC0gMSk7XG4gICAgICAgIGZvcihsZXQgaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3VudDsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaSk7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gZGlyZWN0VXBkYXRlID8gcG9pbnQgOiB7fTtcbiAgICAgICAgICAgIGNvbnN0IG51bGxEYXRhID0gaXNOdWxsT3JVbmRlZihwYXJzZWRbdkF4aXNdKTtcbiAgICAgICAgICAgIGNvbnN0IGlQaXhlbCA9IHByb3BlcnRpZXNbaUF4aXNdID0gaVNjYWxlLmdldFBpeGVsRm9yVmFsdWUocGFyc2VkW2lBeGlzXSwgaSk7XG4gICAgICAgICAgICBjb25zdCB2UGl4ZWwgPSBwcm9wZXJ0aWVzW3ZBeGlzXSA9IHJlc2V0IHx8IG51bGxEYXRhID8gdlNjYWxlLmdldEJhc2VQaXhlbCgpIDogdlNjYWxlLmdldFBpeGVsRm9yVmFsdWUoX3N0YWNrZWQgPyB0aGlzLmFwcGx5U3RhY2sodlNjYWxlLCBwYXJzZWQsIF9zdGFja2VkKSA6IHBhcnNlZFt2QXhpc10sIGkpO1xuICAgICAgICAgICAgcHJvcGVydGllcy5za2lwID0gaXNOYU4oaVBpeGVsKSB8fCBpc05hTih2UGl4ZWwpIHx8IG51bGxEYXRhO1xuICAgICAgICAgICAgcHJvcGVydGllcy5zdG9wID0gaSA+IDAgJiYgTWF0aC5hYnMocGFyc2VkW2lBeGlzXSAtIHByZXZQYXJzZWRbaUF4aXNdKSA+IG1heEdhcExlbmd0aDtcbiAgICAgICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydGllcy5wYXJzZWQgPSBwYXJzZWQ7XG4gICAgICAgICAgICAgICAgcHJvcGVydGllcy5yYXcgPSBfZGF0YXNldC5kYXRhW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluY2x1ZGVPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydGllcy5vcHRpb25zID0gc2hhcmVkT3B0aW9ucyB8fCB0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaSwgcG9pbnQuYWN0aXZlID8gJ2FjdGl2ZScgOiBtb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZGlyZWN0VXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50KHBvaW50LCBpLCBwcm9wZXJ0aWVzLCBtb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZXZQYXJzZWQgPSBwYXJzZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVTaGFyZWRPcHRpb25zKHNoYXJlZE9wdGlvbnMsIG1vZGUsIGZpcnN0T3B0cyk7XG4gICAgfVxuIGdldE1heE92ZXJmbG93KCkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgZGF0YSA9IG1ldGEuZGF0YSB8fCBbXTtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc2hvd0xpbmUpIHtcbiAgICAgICAgICAgIGxldCBtYXggPSAwO1xuICAgICAgICAgICAgZm9yKGxldCBpID0gZGF0YS5sZW5ndGggLSAxOyBpID49IDA7IC0taSl7XG4gICAgICAgICAgICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCBkYXRhW2ldLnNpemUodGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGkpKSAvIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1heCA+IDAgJiYgbWF4O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGFzZXQgPSBtZXRhLmRhdGFzZXQ7XG4gICAgICAgIGNvbnN0IGJvcmRlciA9IGRhdGFzZXQub3B0aW9ucyAmJiBkYXRhc2V0Lm9wdGlvbnMuYm9yZGVyV2lkdGggfHwgMDtcbiAgICAgICAgaWYgKCFkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGJvcmRlcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdFBvaW50ID0gZGF0YVswXS5zaXplKHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucygwKSk7XG4gICAgICAgIGNvbnN0IGxhc3RQb2ludCA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXS5zaXplKHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhkYXRhLmxlbmd0aCAtIDEpKTtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KGJvcmRlciwgZmlyc3RQb2ludCwgbGFzdFBvaW50KSAvIDI7XG4gICAgfVxufVxuXG52YXIgY29udHJvbGxlcnMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG5fX3Byb3RvX186IG51bGwsXG5CYXJDb250cm9sbGVyOiBCYXJDb250cm9sbGVyLFxuQnViYmxlQ29udHJvbGxlcjogQnViYmxlQ29udHJvbGxlcixcbkRvdWdobnV0Q29udHJvbGxlcjogRG91Z2hudXRDb250cm9sbGVyLFxuTGluZUNvbnRyb2xsZXI6IExpbmVDb250cm9sbGVyLFxuUGllQ29udHJvbGxlcjogUGllQ29udHJvbGxlcixcblBvbGFyQXJlYUNvbnRyb2xsZXI6IFBvbGFyQXJlYUNvbnRyb2xsZXIsXG5SYWRhckNvbnRyb2xsZXI6IFJhZGFyQ29udHJvbGxlcixcblNjYXR0ZXJDb250cm9sbGVyOiBTY2F0dGVyQ29udHJvbGxlclxufSk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBDaGFydC5fYWRhcHRlcnNcbiAqIEBzaW5jZSAyLjguMFxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBhYnN0cmFjdCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZDogQ2hlY2sgdGhhdCBhIGNvbXBsZXRlIGRhdGUgYWRhcHRlciBpcyBwcm92aWRlZC4nKTtcbn1cbi8qKlxuICogRGF0ZSBhZGFwdGVyIChjdXJyZW50IHVzZWQgYnkgdGhlIHRpbWUgc2NhbGUpXG4gKiBAbmFtZXNwYWNlIENoYXJ0Ll9hZGFwdGVycy5fZGF0ZVxuICogQG1lbWJlcm9mIENoYXJ0Ll9hZGFwdGVyc1xuICogQHByaXZhdGVcbiAqLyBjbGFzcyBEYXRlQWRhcHRlckJhc2Uge1xuICAgIC8qKlxuICAgKiBPdmVycmlkZSBkZWZhdWx0IGRhdGUgYWRhcHRlciBtZXRob2RzLlxuICAgKiBBY2NlcHRzIHR5cGUgcGFyYW1ldGVyIHRvIGRlZmluZSBvcHRpb25zIHR5cGUuXG4gICAqIEBleGFtcGxlXG4gICAqIENoYXJ0Ll9hZGFwdGVycy5fZGF0ZS5vdmVycmlkZTx7bXlBZGFwdGVyT3B0aW9uOiBzdHJpbmd9Pih7XG4gICAqICAgaW5pdCgpIHtcbiAgICogICAgIGNvbnNvbGUubG9nKHRoaXMub3B0aW9ucy5teUFkYXB0ZXJPcHRpb24pO1xuICAgKiAgIH1cbiAgICogfSlcbiAgICovIHN0YXRpYyBvdmVycmlkZShtZW1iZXJzKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oRGF0ZUFkYXB0ZXJCYXNlLnByb3RvdHlwZSwgbWVtYmVycyk7XG4gICAgfVxuICAgIG9wdGlvbnM7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyl7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICBpbml0KCkge31cbiAgICBmb3JtYXRzKCkge1xuICAgICAgICByZXR1cm4gYWJzdHJhY3QoKTtcbiAgICB9XG4gICAgcGFyc2UoKSB7XG4gICAgICAgIHJldHVybiBhYnN0cmFjdCgpO1xuICAgIH1cbiAgICBmb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiBhYnN0cmFjdCgpO1xuICAgIH1cbiAgICBhZGQoKSB7XG4gICAgICAgIHJldHVybiBhYnN0cmFjdCgpO1xuICAgIH1cbiAgICBkaWZmKCkge1xuICAgICAgICByZXR1cm4gYWJzdHJhY3QoKTtcbiAgICB9XG4gICAgc3RhcnRPZigpIHtcbiAgICAgICAgcmV0dXJuIGFic3RyYWN0KCk7XG4gICAgfVxuICAgIGVuZE9mKCkge1xuICAgICAgICByZXR1cm4gYWJzdHJhY3QoKTtcbiAgICB9XG59XG52YXIgYWRhcHRlcnMgPSB7XG4gICAgX2RhdGU6IERhdGVBZGFwdGVyQmFzZVxufTtcblxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoKG1ldGFzZXQsIGF4aXMsIHZhbHVlLCBpbnRlcnNlY3QpIHtcbiAgICBjb25zdCB7IGNvbnRyb2xsZXIgLCBkYXRhICwgX3NvcnRlZCAgfSA9IG1ldGFzZXQ7XG4gICAgY29uc3QgaVNjYWxlID0gY29udHJvbGxlci5fY2FjaGVkTWV0YS5pU2NhbGU7XG4gICAgaWYgKGlTY2FsZSAmJiBheGlzID09PSBpU2NhbGUuYXhpcyAmJiBheGlzICE9PSAncicgJiYgX3NvcnRlZCAmJiBkYXRhLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBsb29rdXBNZXRob2QgPSBpU2NhbGUuX3JldmVyc2VQaXhlbHMgPyBfcmxvb2t1cEJ5S2V5IDogX2xvb2t1cEJ5S2V5O1xuICAgICAgICBpZiAoIWludGVyc2VjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvb2t1cE1ldGhvZChkYXRhLCBheGlzLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udHJvbGxlci5fc2hhcmVkT3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZWwgPSBkYXRhWzBdO1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0eXBlb2YgZWwuZ2V0UmFuZ2UgPT09ICdmdW5jdGlvbicgJiYgZWwuZ2V0UmFuZ2UoYXhpcyk7XG4gICAgICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IGxvb2t1cE1ldGhvZChkYXRhLCBheGlzLCB2YWx1ZSAtIHJhbmdlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBsb29rdXBNZXRob2QoZGF0YSwgYXhpcywgdmFsdWUgKyByYW5nZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbG86IHN0YXJ0LmxvLFxuICAgICAgICAgICAgICAgICAgICBoaTogZW5kLmhpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBsbzogMCxcbiAgICAgICAgaGk6IGRhdGEubGVuZ3RoIC0gMVxuICAgIH07XG59XG4gZnVuY3Rpb24gZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zKGNoYXJ0LCBheGlzLCBwb3NpdGlvbiwgaGFuZGxlciwgaW50ZXJzZWN0KSB7XG4gICAgY29uc3QgbWV0YXNldHMgPSBjaGFydC5nZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzKCk7XG4gICAgY29uc3QgdmFsdWUgPSBwb3NpdGlvbltheGlzXTtcbiAgICBmb3IobGV0IGkgPSAwLCBpbGVuID0gbWV0YXNldHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgY29uc3QgeyBpbmRleCAsIGRhdGEgIH0gPSBtZXRhc2V0c1tpXTtcbiAgICAgICAgY29uc3QgeyBsbyAsIGhpICB9ID0gYmluYXJ5U2VhcmNoKG1ldGFzZXRzW2ldLCBheGlzLCB2YWx1ZSwgaW50ZXJzZWN0KTtcbiAgICAgICAgZm9yKGxldCBqID0gbG87IGogPD0gaGk7ICsrail7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZGF0YVtqXTtcbiAgICAgICAgICAgIGlmICghZWxlbWVudC5za2lwKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlcihlbGVtZW50LCBpbmRleCwgaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4gZnVuY3Rpb24gZ2V0RGlzdGFuY2VNZXRyaWNGb3JBeGlzKGF4aXMpIHtcbiAgICBjb25zdCB1c2VYID0gYXhpcy5pbmRleE9mKCd4JykgIT09IC0xO1xuICAgIGNvbnN0IHVzZVkgPSBheGlzLmluZGV4T2YoJ3knKSAhPT0gLTE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHB0MSwgcHQyKSB7XG4gICAgICAgIGNvbnN0IGRlbHRhWCA9IHVzZVggPyBNYXRoLmFicyhwdDEueCAtIHB0Mi54KSA6IDA7XG4gICAgICAgIGNvbnN0IGRlbHRhWSA9IHVzZVkgPyBNYXRoLmFicyhwdDEueSAtIHB0Mi55KSA6IDA7XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coZGVsdGFYLCAyKSArIE1hdGgucG93KGRlbHRhWSwgMikpO1xuICAgIH07XG59XG4gZnVuY3Rpb24gZ2V0SW50ZXJzZWN0SXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKSB7XG4gICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICBpZiAoIWluY2x1ZGVJbnZpc2libGUgJiYgIWNoYXJ0LmlzUG9pbnRJbkFyZWEocG9zaXRpb24pKSB7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG4gICAgY29uc3QgZXZhbHVhdGlvbkZ1bmMgPSBmdW5jdGlvbihlbGVtZW50LCBkYXRhc2V0SW5kZXgsIGluZGV4KSB7XG4gICAgICAgIGlmICghaW5jbHVkZUludmlzaWJsZSAmJiAhX2lzUG9pbnRJbkFyZWEoZWxlbWVudCwgY2hhcnQuY2hhcnRBcmVhLCAwKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LmluUmFuZ2UocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdXNlRmluYWxQb3NpdGlvbikpIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgZGF0YXNldEluZGV4LFxuICAgICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zKGNoYXJ0LCBheGlzLCBwb3NpdGlvbiwgZXZhbHVhdGlvbkZ1bmMsIHRydWUpO1xuICAgIHJldHVybiBpdGVtcztcbn1cbiBmdW5jdGlvbiBnZXROZWFyZXN0UmFkaWFsSXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgbGV0IGl0ZW1zID0gW107XG4gICAgZnVuY3Rpb24gZXZhbHVhdGlvbkZ1bmMoZWxlbWVudCwgZGF0YXNldEluZGV4LCBpbmRleCkge1xuICAgICAgICBjb25zdCB7IHN0YXJ0QW5nbGUgLCBlbmRBbmdsZSAgfSA9IGVsZW1lbnQuZ2V0UHJvcHMoW1xuICAgICAgICAgICAgJ3N0YXJ0QW5nbGUnLFxuICAgICAgICAgICAgJ2VuZEFuZ2xlJ1xuICAgICAgICBdLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgeyBhbmdsZSAgfSA9IGdldEFuZ2xlRnJvbVBvaW50KGVsZW1lbnQsIHtcbiAgICAgICAgICAgIHg6IHBvc2l0aW9uLngsXG4gICAgICAgICAgICB5OiBwb3NpdGlvbi55XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoX2FuZ2xlQmV0d2VlbihhbmdsZSwgc3RhcnRBbmdsZSwgZW5kQW5nbGUpKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgIGRhdGFzZXRJbmRleCxcbiAgICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zKGNoYXJ0LCBheGlzLCBwb3NpdGlvbiwgZXZhbHVhdGlvbkZ1bmMpO1xuICAgIHJldHVybiBpdGVtcztcbn1cbiBmdW5jdGlvbiBnZXROZWFyZXN0Q2FydGVzaWFuSXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCBpbnRlcnNlY3QsIHVzZUZpbmFsUG9zaXRpb24sIGluY2x1ZGVJbnZpc2libGUpIHtcbiAgICBsZXQgaXRlbXMgPSBbXTtcbiAgICBjb25zdCBkaXN0YW5jZU1ldHJpYyA9IGdldERpc3RhbmNlTWV0cmljRm9yQXhpcyhheGlzKTtcbiAgICBsZXQgbWluRGlzdGFuY2UgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgZnVuY3Rpb24gZXZhbHVhdGlvbkZ1bmMoZWxlbWVudCwgZGF0YXNldEluZGV4LCBpbmRleCkge1xuICAgICAgICBjb25zdCBpblJhbmdlID0gZWxlbWVudC5pblJhbmdlKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgICAgICBpZiAoaW50ZXJzZWN0ICYmICFpblJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2VudGVyID0gZWxlbWVudC5nZXRDZW50ZXJQb2ludCh1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgcG9pbnRJbkFyZWEgPSAhIWluY2x1ZGVJbnZpc2libGUgfHwgY2hhcnQuaXNQb2ludEluQXJlYShjZW50ZXIpO1xuICAgICAgICBpZiAoIXBvaW50SW5BcmVhICYmICFpblJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZU1ldHJpYyhwb3NpdGlvbiwgY2VudGVyKTtcbiAgICAgICAgaWYgKGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHtcbiAgICAgICAgICAgIGl0ZW1zID0gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICB9IGVsc2UgaWYgKGRpc3RhbmNlID09PSBtaW5EaXN0YW5jZSkge1xuICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICBkYXRhc2V0SW5kZXgsXG4gICAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV2YWx1YXRlSW50ZXJhY3Rpb25JdGVtcyhjaGFydCwgYXhpcywgcG9zaXRpb24sIGV2YWx1YXRpb25GdW5jKTtcbiAgICByZXR1cm4gaXRlbXM7XG59XG4gZnVuY3Rpb24gZ2V0TmVhcmVzdEl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgYXhpcywgaW50ZXJzZWN0LCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKSB7XG4gICAgaWYgKCFpbmNsdWRlSW52aXNpYmxlICYmICFjaGFydC5pc1BvaW50SW5BcmVhKHBvc2l0aW9uKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiBheGlzID09PSAncicgJiYgIWludGVyc2VjdCA/IGdldE5lYXJlc3RSYWRpYWxJdGVtcyhjaGFydCwgcG9zaXRpb24sIGF4aXMsIHVzZUZpbmFsUG9zaXRpb24pIDogZ2V0TmVhcmVzdENhcnRlc2lhbkl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgYXhpcywgaW50ZXJzZWN0LCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKTtcbn1cbiBmdW5jdGlvbiBnZXRBeGlzSXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCBpbnRlcnNlY3QsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgIGNvbnN0IHJhbmdlTWV0aG9kID0gYXhpcyA9PT0gJ3gnID8gJ2luWFJhbmdlJyA6ICdpbllSYW5nZSc7XG4gICAgbGV0IGludGVyc2VjdHNJdGVtID0gZmFsc2U7XG4gICAgZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zKGNoYXJ0LCBheGlzLCBwb3NpdGlvbiwgKGVsZW1lbnQsIGRhdGFzZXRJbmRleCwgaW5kZXgpPT57XG4gICAgICAgIGlmIChlbGVtZW50W3JhbmdlTWV0aG9kXSAmJiBlbGVtZW50W3JhbmdlTWV0aG9kXShwb3NpdGlvbltheGlzXSwgdXNlRmluYWxQb3NpdGlvbikpIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgZGF0YXNldEluZGV4LFxuICAgICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGludGVyc2VjdHNJdGVtID0gaW50ZXJzZWN0c0l0ZW0gfHwgZWxlbWVudC5pblJhbmdlKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGludGVyc2VjdCAmJiAhaW50ZXJzZWN0c0l0ZW0pIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG59XG4gdmFyIEludGVyYWN0aW9uID0ge1xuICAgIGV2YWx1YXRlSW50ZXJhY3Rpb25JdGVtcyxcbiAgICBtb2Rlczoge1xuIGluZGV4IChjaGFydCwgZSwgb3B0aW9ucywgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRSZWxhdGl2ZVBvc2l0aW9uKGUsIGNoYXJ0KTtcbiAgICAgICAgICAgIGNvbnN0IGF4aXMgPSBvcHRpb25zLmF4aXMgfHwgJ3gnO1xuICAgICAgICAgICAgY29uc3QgaW5jbHVkZUludmlzaWJsZSA9IG9wdGlvbnMuaW5jbHVkZUludmlzaWJsZSB8fCBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gb3B0aW9ucy5pbnRlcnNlY3QgPyBnZXRJbnRlcnNlY3RJdGVtcyhjaGFydCwgcG9zaXRpb24sIGF4aXMsIHVzZUZpbmFsUG9zaXRpb24sIGluY2x1ZGVJbnZpc2libGUpIDogZ2V0TmVhcmVzdEl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgYXhpcywgZmFsc2UsIHVzZUZpbmFsUG9zaXRpb24sIGluY2x1ZGVJbnZpc2libGUpO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBbXTtcbiAgICAgICAgICAgIGlmICghaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hhcnQuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpLmZvckVhY2goKG1ldGEpPT57XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtc1swXS5pbmRleDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gbWV0YS5kYXRhW2luZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCAmJiAhZWxlbWVudC5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXRJbmRleDogbWV0YS5pbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgICAgICB9LFxuIGRhdGFzZXQgKGNoYXJ0LCBlLCBvcHRpb25zLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGdldFJlbGF0aXZlUG9zaXRpb24oZSwgY2hhcnQpO1xuICAgICAgICAgICAgY29uc3QgYXhpcyA9IG9wdGlvbnMuYXhpcyB8fCAneHknO1xuICAgICAgICAgICAgY29uc3QgaW5jbHVkZUludmlzaWJsZSA9IG9wdGlvbnMuaW5jbHVkZUludmlzaWJsZSB8fCBmYWxzZTtcbiAgICAgICAgICAgIGxldCBpdGVtcyA9IG9wdGlvbnMuaW50ZXJzZWN0ID8gZ2V0SW50ZXJzZWN0SXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKSA6IGdldE5lYXJlc3RJdGVtcyhjaGFydCwgcG9zaXRpb24sIGF4aXMsIGZhbHNlLCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKTtcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YXNldEluZGV4ID0gaXRlbXNbMF0uZGF0YXNldEluZGV4O1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpLmRhdGE7XG4gICAgICAgICAgICAgICAgaXRlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSl7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZGF0YVtpXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfSxcbiBwb2ludCAoY2hhcnQsIGUsIG9wdGlvbnMsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihlLCBjaGFydCk7XG4gICAgICAgICAgICBjb25zdCBheGlzID0gb3B0aW9ucy5heGlzIHx8ICd4eSc7XG4gICAgICAgICAgICBjb25zdCBpbmNsdWRlSW52aXNpYmxlID0gb3B0aW9ucy5pbmNsdWRlSW52aXNpYmxlIHx8IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGdldEludGVyc2VjdEl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgYXhpcywgdXNlRmluYWxQb3NpdGlvbiwgaW5jbHVkZUludmlzaWJsZSk7XG4gICAgICAgIH0sXG4gbmVhcmVzdCAoY2hhcnQsIGUsIG9wdGlvbnMsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihlLCBjaGFydCk7XG4gICAgICAgICAgICBjb25zdCBheGlzID0gb3B0aW9ucy5heGlzIHx8ICd4eSc7XG4gICAgICAgICAgICBjb25zdCBpbmNsdWRlSW52aXNpYmxlID0gb3B0aW9ucy5pbmNsdWRlSW52aXNpYmxlIHx8IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGdldE5lYXJlc3RJdGVtcyhjaGFydCwgcG9zaXRpb24sIGF4aXMsIG9wdGlvbnMuaW50ZXJzZWN0LCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKTtcbiAgICAgICAgfSxcbiB4IChjaGFydCwgZSwgb3B0aW9ucywgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRSZWxhdGl2ZVBvc2l0aW9uKGUsIGNoYXJ0KTtcbiAgICAgICAgICAgIHJldHVybiBnZXRBeGlzSXRlbXMoY2hhcnQsIHBvc2l0aW9uLCAneCcsIG9wdGlvbnMuaW50ZXJzZWN0LCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgfSxcbiB5IChjaGFydCwgZSwgb3B0aW9ucywgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRSZWxhdGl2ZVBvc2l0aW9uKGUsIGNoYXJ0KTtcbiAgICAgICAgICAgIHJldHVybiBnZXRBeGlzSXRlbXMoY2hhcnQsIHBvc2l0aW9uLCAneScsIG9wdGlvbnMuaW50ZXJzZWN0LCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmNvbnN0IFNUQVRJQ19QT1NJVElPTlMgPSBbXG4gICAgJ2xlZnQnLFxuICAgICd0b3AnLFxuICAgICdyaWdodCcsXG4gICAgJ2JvdHRvbSdcbl07XG5mdW5jdGlvbiBmaWx0ZXJCeVBvc2l0aW9uKGFycmF5LCBwb3NpdGlvbikge1xuICAgIHJldHVybiBhcnJheS5maWx0ZXIoKHYpPT52LnBvcyA9PT0gcG9zaXRpb24pO1xufVxuZnVuY3Rpb24gZmlsdGVyRHluYW1pY1Bvc2l0aW9uQnlBeGlzKGFycmF5LCBheGlzKSB7XG4gICAgcmV0dXJuIGFycmF5LmZpbHRlcigodik9PlNUQVRJQ19QT1NJVElPTlMuaW5kZXhPZih2LnBvcykgPT09IC0xICYmIHYuYm94LmF4aXMgPT09IGF4aXMpO1xufVxuZnVuY3Rpb24gc29ydEJ5V2VpZ2h0KGFycmF5LCByZXZlcnNlKSB7XG4gICAgcmV0dXJuIGFycmF5LnNvcnQoKGEsIGIpPT57XG4gICAgICAgIGNvbnN0IHYwID0gcmV2ZXJzZSA/IGIgOiBhO1xuICAgICAgICBjb25zdCB2MSA9IHJldmVyc2UgPyBhIDogYjtcbiAgICAgICAgcmV0dXJuIHYwLndlaWdodCA9PT0gdjEud2VpZ2h0ID8gdjAuaW5kZXggLSB2MS5pbmRleCA6IHYwLndlaWdodCAtIHYxLndlaWdodDtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHdyYXBCb3hlcyhib3hlcykge1xuICAgIGNvbnN0IGxheW91dEJveGVzID0gW107XG4gICAgbGV0IGksIGlsZW4sIGJveCwgcG9zLCBzdGFjaywgc3RhY2tXZWlnaHQ7XG4gICAgZm9yKGkgPSAwLCBpbGVuID0gKGJveGVzIHx8IFtdKS5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICBib3ggPSBib3hlc1tpXTtcbiAgICAgICAgKHsgcG9zaXRpb246IHBvcyAsIG9wdGlvbnM6IHsgc3RhY2sgLCBzdGFja1dlaWdodCA9MSAgfSAgfSA9IGJveCk7XG4gICAgICAgIGxheW91dEJveGVzLnB1c2goe1xuICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICBib3gsXG4gICAgICAgICAgICBwb3MsXG4gICAgICAgICAgICBob3Jpem9udGFsOiBib3guaXNIb3Jpem9udGFsKCksXG4gICAgICAgICAgICB3ZWlnaHQ6IGJveC53ZWlnaHQsXG4gICAgICAgICAgICBzdGFjazogc3RhY2sgJiYgcG9zICsgc3RhY2ssXG4gICAgICAgICAgICBzdGFja1dlaWdodFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxheW91dEJveGVzO1xufVxuZnVuY3Rpb24gYnVpbGRTdGFja3MobGF5b3V0cykge1xuICAgIGNvbnN0IHN0YWNrcyA9IHt9O1xuICAgIGZvciAoY29uc3Qgd3JhcCBvZiBsYXlvdXRzKXtcbiAgICAgICAgY29uc3QgeyBzdGFjayAsIHBvcyAsIHN0YWNrV2VpZ2h0ICB9ID0gd3JhcDtcbiAgICAgICAgaWYgKCFzdGFjayB8fCAhU1RBVElDX1BPU0lUSU9OUy5pbmNsdWRlcyhwb3MpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBfc3RhY2sgPSBzdGFja3Nbc3RhY2tdIHx8IChzdGFja3Nbc3RhY2tdID0ge1xuICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgICBwbGFjZWQ6IDAsXG4gICAgICAgICAgICB3ZWlnaHQ6IDAsXG4gICAgICAgICAgICBzaXplOiAwXG4gICAgICAgIH0pO1xuICAgICAgICBfc3RhY2suY291bnQrKztcbiAgICAgICAgX3N0YWNrLndlaWdodCArPSBzdGFja1dlaWdodDtcbiAgICB9XG4gICAgcmV0dXJuIHN0YWNrcztcbn1cbiBmdW5jdGlvbiBzZXRMYXlvdXREaW1zKGxheW91dHMsIHBhcmFtcykge1xuICAgIGNvbnN0IHN0YWNrcyA9IGJ1aWxkU3RhY2tzKGxheW91dHMpO1xuICAgIGNvbnN0IHsgdkJveE1heFdpZHRoICwgaEJveE1heEhlaWdodCAgfSA9IHBhcmFtcztcbiAgICBsZXQgaSwgaWxlbiwgbGF5b3V0O1xuICAgIGZvcihpID0gMCwgaWxlbiA9IGxheW91dHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgbGF5b3V0ID0gbGF5b3V0c1tpXTtcbiAgICAgICAgY29uc3QgeyBmdWxsU2l6ZSAgfSA9IGxheW91dC5ib3g7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gc3RhY2tzW2xheW91dC5zdGFja107XG4gICAgICAgIGNvbnN0IGZhY3RvciA9IHN0YWNrICYmIGxheW91dC5zdGFja1dlaWdodCAvIHN0YWNrLndlaWdodDtcbiAgICAgICAgaWYgKGxheW91dC5ob3Jpem9udGFsKSB7XG4gICAgICAgICAgICBsYXlvdXQud2lkdGggPSBmYWN0b3IgPyBmYWN0b3IgKiB2Qm94TWF4V2lkdGggOiBmdWxsU2l6ZSAmJiBwYXJhbXMuYXZhaWxhYmxlV2lkdGg7XG4gICAgICAgICAgICBsYXlvdXQuaGVpZ2h0ID0gaEJveE1heEhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxheW91dC53aWR0aCA9IHZCb3hNYXhXaWR0aDtcbiAgICAgICAgICAgIGxheW91dC5oZWlnaHQgPSBmYWN0b3IgPyBmYWN0b3IgKiBoQm94TWF4SGVpZ2h0IDogZnVsbFNpemUgJiYgcGFyYW1zLmF2YWlsYWJsZUhlaWdodDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RhY2tzO1xufVxuZnVuY3Rpb24gYnVpbGRMYXlvdXRCb3hlcyhib3hlcykge1xuICAgIGNvbnN0IGxheW91dEJveGVzID0gd3JhcEJveGVzKGJveGVzKTtcbiAgICBjb25zdCBmdWxsU2l6ZSA9IHNvcnRCeVdlaWdodChsYXlvdXRCb3hlcy5maWx0ZXIoKHdyYXApPT53cmFwLmJveC5mdWxsU2l6ZSksIHRydWUpO1xuICAgIGNvbnN0IGxlZnQgPSBzb3J0QnlXZWlnaHQoZmlsdGVyQnlQb3NpdGlvbihsYXlvdXRCb3hlcywgJ2xlZnQnKSwgdHJ1ZSk7XG4gICAgY29uc3QgcmlnaHQgPSBzb3J0QnlXZWlnaHQoZmlsdGVyQnlQb3NpdGlvbihsYXlvdXRCb3hlcywgJ3JpZ2h0JykpO1xuICAgIGNvbnN0IHRvcCA9IHNvcnRCeVdlaWdodChmaWx0ZXJCeVBvc2l0aW9uKGxheW91dEJveGVzLCAndG9wJyksIHRydWUpO1xuICAgIGNvbnN0IGJvdHRvbSA9IHNvcnRCeVdlaWdodChmaWx0ZXJCeVBvc2l0aW9uKGxheW91dEJveGVzLCAnYm90dG9tJykpO1xuICAgIGNvbnN0IGNlbnRlckhvcml6b250YWwgPSBmaWx0ZXJEeW5hbWljUG9zaXRpb25CeUF4aXMobGF5b3V0Qm94ZXMsICd4Jyk7XG4gICAgY29uc3QgY2VudGVyVmVydGljYWwgPSBmaWx0ZXJEeW5hbWljUG9zaXRpb25CeUF4aXMobGF5b3V0Qm94ZXMsICd5Jyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZnVsbFNpemUsXG4gICAgICAgIGxlZnRBbmRUb3A6IGxlZnQuY29uY2F0KHRvcCksXG4gICAgICAgIHJpZ2h0QW5kQm90dG9tOiByaWdodC5jb25jYXQoY2VudGVyVmVydGljYWwpLmNvbmNhdChib3R0b20pLmNvbmNhdChjZW50ZXJIb3Jpem9udGFsKSxcbiAgICAgICAgY2hhcnRBcmVhOiBmaWx0ZXJCeVBvc2l0aW9uKGxheW91dEJveGVzLCAnY2hhcnRBcmVhJyksXG4gICAgICAgIHZlcnRpY2FsOiBsZWZ0LmNvbmNhdChyaWdodCkuY29uY2F0KGNlbnRlclZlcnRpY2FsKSxcbiAgICAgICAgaG9yaXpvbnRhbDogdG9wLmNvbmNhdChib3R0b20pLmNvbmNhdChjZW50ZXJIb3Jpem9udGFsKVxuICAgIH07XG59XG5mdW5jdGlvbiBnZXRDb21iaW5lZE1heChtYXhQYWRkaW5nLCBjaGFydEFyZWEsIGEsIGIpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgobWF4UGFkZGluZ1thXSwgY2hhcnRBcmVhW2FdKSArIE1hdGgubWF4KG1heFBhZGRpbmdbYl0sIGNoYXJ0QXJlYVtiXSk7XG59XG5mdW5jdGlvbiB1cGRhdGVNYXhQYWRkaW5nKG1heFBhZGRpbmcsIGJveFBhZGRpbmcpIHtcbiAgICBtYXhQYWRkaW5nLnRvcCA9IE1hdGgubWF4KG1heFBhZGRpbmcudG9wLCBib3hQYWRkaW5nLnRvcCk7XG4gICAgbWF4UGFkZGluZy5sZWZ0ID0gTWF0aC5tYXgobWF4UGFkZGluZy5sZWZ0LCBib3hQYWRkaW5nLmxlZnQpO1xuICAgIG1heFBhZGRpbmcuYm90dG9tID0gTWF0aC5tYXgobWF4UGFkZGluZy5ib3R0b20sIGJveFBhZGRpbmcuYm90dG9tKTtcbiAgICBtYXhQYWRkaW5nLnJpZ2h0ID0gTWF0aC5tYXgobWF4UGFkZGluZy5yaWdodCwgYm94UGFkZGluZy5yaWdodCk7XG59XG5mdW5jdGlvbiB1cGRhdGVEaW1zKGNoYXJ0QXJlYSwgcGFyYW1zLCBsYXlvdXQsIHN0YWNrcykge1xuICAgIGNvbnN0IHsgcG9zICwgYm94ICB9ID0gbGF5b3V0O1xuICAgIGNvbnN0IG1heFBhZGRpbmcgPSBjaGFydEFyZWEubWF4UGFkZGluZztcbiAgICBpZiAoIWlzT2JqZWN0KHBvcykpIHtcbiAgICAgICAgaWYgKGxheW91dC5zaXplKSB7XG4gICAgICAgICAgICBjaGFydEFyZWFbcG9zXSAtPSBsYXlvdXQuc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFjayA9IHN0YWNrc1tsYXlvdXQuc3RhY2tdIHx8IHtcbiAgICAgICAgICAgIHNpemU6IDAsXG4gICAgICAgICAgICBjb3VudDogMVxuICAgICAgICB9O1xuICAgICAgICBzdGFjay5zaXplID0gTWF0aC5tYXgoc3RhY2suc2l6ZSwgbGF5b3V0Lmhvcml6b250YWwgPyBib3guaGVpZ2h0IDogYm94LndpZHRoKTtcbiAgICAgICAgbGF5b3V0LnNpemUgPSBzdGFjay5zaXplIC8gc3RhY2suY291bnQ7XG4gICAgICAgIGNoYXJ0QXJlYVtwb3NdICs9IGxheW91dC5zaXplO1xuICAgIH1cbiAgICBpZiAoYm94LmdldFBhZGRpbmcpIHtcbiAgICAgICAgdXBkYXRlTWF4UGFkZGluZyhtYXhQYWRkaW5nLCBib3guZ2V0UGFkZGluZygpKTtcbiAgICB9XG4gICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLm1heCgwLCBwYXJhbXMub3V0ZXJXaWR0aCAtIGdldENvbWJpbmVkTWF4KG1heFBhZGRpbmcsIGNoYXJ0QXJlYSwgJ2xlZnQnLCAncmlnaHQnKSk7XG4gICAgY29uc3QgbmV3SGVpZ2h0ID0gTWF0aC5tYXgoMCwgcGFyYW1zLm91dGVySGVpZ2h0IC0gZ2V0Q29tYmluZWRNYXgobWF4UGFkZGluZywgY2hhcnRBcmVhLCAndG9wJywgJ2JvdHRvbScpKTtcbiAgICBjb25zdCB3aWR0aENoYW5nZWQgPSBuZXdXaWR0aCAhPT0gY2hhcnRBcmVhLnc7XG4gICAgY29uc3QgaGVpZ2h0Q2hhbmdlZCA9IG5ld0hlaWdodCAhPT0gY2hhcnRBcmVhLmg7XG4gICAgY2hhcnRBcmVhLncgPSBuZXdXaWR0aDtcbiAgICBjaGFydEFyZWEuaCA9IG5ld0hlaWdodDtcbiAgICByZXR1cm4gbGF5b3V0Lmhvcml6b250YWwgPyB7XG4gICAgICAgIHNhbWU6IHdpZHRoQ2hhbmdlZCxcbiAgICAgICAgb3RoZXI6IGhlaWdodENoYW5nZWRcbiAgICB9IDoge1xuICAgICAgICBzYW1lOiBoZWlnaHRDaGFuZ2VkLFxuICAgICAgICBvdGhlcjogd2lkdGhDaGFuZ2VkXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGhhbmRsZU1heFBhZGRpbmcoY2hhcnRBcmVhKSB7XG4gICAgY29uc3QgbWF4UGFkZGluZyA9IGNoYXJ0QXJlYS5tYXhQYWRkaW5nO1xuICAgIGZ1bmN0aW9uIHVwZGF0ZVBvcyhwb3MpIHtcbiAgICAgICAgY29uc3QgY2hhbmdlID0gTWF0aC5tYXgobWF4UGFkZGluZ1twb3NdIC0gY2hhcnRBcmVhW3Bvc10sIDApO1xuICAgICAgICBjaGFydEFyZWFbcG9zXSArPSBjaGFuZ2U7XG4gICAgICAgIHJldHVybiBjaGFuZ2U7XG4gICAgfVxuICAgIGNoYXJ0QXJlYS55ICs9IHVwZGF0ZVBvcygndG9wJyk7XG4gICAgY2hhcnRBcmVhLnggKz0gdXBkYXRlUG9zKCdsZWZ0Jyk7XG4gICAgdXBkYXRlUG9zKCdyaWdodCcpO1xuICAgIHVwZGF0ZVBvcygnYm90dG9tJyk7XG59XG5mdW5jdGlvbiBnZXRNYXJnaW5zKGhvcml6b250YWwsIGNoYXJ0QXJlYSkge1xuICAgIGNvbnN0IG1heFBhZGRpbmcgPSBjaGFydEFyZWEubWF4UGFkZGluZztcbiAgICBmdW5jdGlvbiBtYXJnaW5Gb3JQb3NpdGlvbnMocG9zaXRpb25zKSB7XG4gICAgICAgIGNvbnN0IG1hcmdpbiA9IHtcbiAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgIGJvdHRvbTogMFxuICAgICAgICB9O1xuICAgICAgICBwb3NpdGlvbnMuZm9yRWFjaCgocG9zKT0+e1xuICAgICAgICAgICAgbWFyZ2luW3Bvc10gPSBNYXRoLm1heChjaGFydEFyZWFbcG9zXSwgbWF4UGFkZGluZ1twb3NdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtYXJnaW47XG4gICAgfVxuICAgIHJldHVybiBob3Jpem9udGFsID8gbWFyZ2luRm9yUG9zaXRpb25zKFtcbiAgICAgICAgJ2xlZnQnLFxuICAgICAgICAncmlnaHQnXG4gICAgXSkgOiBtYXJnaW5Gb3JQb3NpdGlvbnMoW1xuICAgICAgICAndG9wJyxcbiAgICAgICAgJ2JvdHRvbSdcbiAgICBdKTtcbn1cbmZ1bmN0aW9uIGZpdEJveGVzKGJveGVzLCBjaGFydEFyZWEsIHBhcmFtcywgc3RhY2tzKSB7XG4gICAgY29uc3QgcmVmaXRCb3hlcyA9IFtdO1xuICAgIGxldCBpLCBpbGVuLCBsYXlvdXQsIGJveCwgcmVmaXQsIGNoYW5nZWQ7XG4gICAgZm9yKGkgPSAwLCBpbGVuID0gYm94ZXMubGVuZ3RoLCByZWZpdCA9IDA7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICBsYXlvdXQgPSBib3hlc1tpXTtcbiAgICAgICAgYm94ID0gbGF5b3V0LmJveDtcbiAgICAgICAgYm94LnVwZGF0ZShsYXlvdXQud2lkdGggfHwgY2hhcnRBcmVhLncsIGxheW91dC5oZWlnaHQgfHwgY2hhcnRBcmVhLmgsIGdldE1hcmdpbnMobGF5b3V0Lmhvcml6b250YWwsIGNoYXJ0QXJlYSkpO1xuICAgICAgICBjb25zdCB7IHNhbWUgLCBvdGhlciAgfSA9IHVwZGF0ZURpbXMoY2hhcnRBcmVhLCBwYXJhbXMsIGxheW91dCwgc3RhY2tzKTtcbiAgICAgICAgcmVmaXQgfD0gc2FtZSAmJiByZWZpdEJveGVzLmxlbmd0aDtcbiAgICAgICAgY2hhbmdlZCA9IGNoYW5nZWQgfHwgb3RoZXI7XG4gICAgICAgIGlmICghYm94LmZ1bGxTaXplKSB7XG4gICAgICAgICAgICByZWZpdEJveGVzLnB1c2gobGF5b3V0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVmaXQgJiYgZml0Qm94ZXMocmVmaXRCb3hlcywgY2hhcnRBcmVhLCBwYXJhbXMsIHN0YWNrcykgfHwgY2hhbmdlZDtcbn1cbmZ1bmN0aW9uIHNldEJveERpbXMoYm94LCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBib3gudG9wID0gdG9wO1xuICAgIGJveC5sZWZ0ID0gbGVmdDtcbiAgICBib3gucmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gICAgYm94LmJvdHRvbSA9IHRvcCArIGhlaWdodDtcbiAgICBib3gud2lkdGggPSB3aWR0aDtcbiAgICBib3guaGVpZ2h0ID0gaGVpZ2h0O1xufVxuZnVuY3Rpb24gcGxhY2VCb3hlcyhib3hlcywgY2hhcnRBcmVhLCBwYXJhbXMsIHN0YWNrcykge1xuICAgIGNvbnN0IHVzZXJQYWRkaW5nID0gcGFyYW1zLnBhZGRpbmc7XG4gICAgbGV0IHsgeCAsIHkgIH0gPSBjaGFydEFyZWE7XG4gICAgZm9yIChjb25zdCBsYXlvdXQgb2YgYm94ZXMpe1xuICAgICAgICBjb25zdCBib3ggPSBsYXlvdXQuYm94O1xuICAgICAgICBjb25zdCBzdGFjayA9IHN0YWNrc1tsYXlvdXQuc3RhY2tdIHx8IHtcbiAgICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgICAgcGxhY2VkOiAwLFxuICAgICAgICAgICAgd2VpZ2h0OiAxXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHdlaWdodCA9IGxheW91dC5zdGFja1dlaWdodCAvIHN0YWNrLndlaWdodCB8fCAxO1xuICAgICAgICBpZiAobGF5b3V0Lmhvcml6b250YWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gY2hhcnRBcmVhLncgKiB3ZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBzdGFjay5zaXplIHx8IGJveC5oZWlnaHQ7XG4gICAgICAgICAgICBpZiAoZGVmaW5lZChzdGFjay5zdGFydCkpIHtcbiAgICAgICAgICAgICAgICB5ID0gc3RhY2suc3RhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYm94LmZ1bGxTaXplKSB7XG4gICAgICAgICAgICAgICAgc2V0Qm94RGltcyhib3gsIHVzZXJQYWRkaW5nLmxlZnQsIHksIHBhcmFtcy5vdXRlcldpZHRoIC0gdXNlclBhZGRpbmcucmlnaHQgLSB1c2VyUGFkZGluZy5sZWZ0LCBoZWlnaHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRCb3hEaW1zKGJveCwgY2hhcnRBcmVhLmxlZnQgKyBzdGFjay5wbGFjZWQsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2suc3RhcnQgPSB5O1xuICAgICAgICAgICAgc3RhY2sucGxhY2VkICs9IHdpZHRoO1xuICAgICAgICAgICAgeSA9IGJveC5ib3R0b207XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBjaGFydEFyZWEuaCAqIHdlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gc3RhY2suc2l6ZSB8fCBib3gud2lkdGg7XG4gICAgICAgICAgICBpZiAoZGVmaW5lZChzdGFjay5zdGFydCkpIHtcbiAgICAgICAgICAgICAgICB4ID0gc3RhY2suc3RhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYm94LmZ1bGxTaXplKSB7XG4gICAgICAgICAgICAgICAgc2V0Qm94RGltcyhib3gsIHgsIHVzZXJQYWRkaW5nLnRvcCwgd2lkdGgsIHBhcmFtcy5vdXRlckhlaWdodCAtIHVzZXJQYWRkaW5nLmJvdHRvbSAtIHVzZXJQYWRkaW5nLnRvcCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldEJveERpbXMoYm94LCB4LCBjaGFydEFyZWEudG9wICsgc3RhY2sucGxhY2VkLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnN0YXJ0ID0geDtcbiAgICAgICAgICAgIHN0YWNrLnBsYWNlZCArPSBoZWlnaHQ7XG4gICAgICAgICAgICB4ID0gYm94LnJpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoYXJ0QXJlYS54ID0geDtcbiAgICBjaGFydEFyZWEueSA9IHk7XG59XG52YXIgbGF5b3V0cyA9IHtcbiBhZGRCb3ggKGNoYXJ0LCBpdGVtKSB7XG4gICAgICAgIGlmICghY2hhcnQuYm94ZXMpIHtcbiAgICAgICAgICAgIGNoYXJ0LmJveGVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaXRlbS5mdWxsU2l6ZSA9IGl0ZW0uZnVsbFNpemUgfHwgZmFsc2U7XG4gICAgICAgIGl0ZW0ucG9zaXRpb24gPSBpdGVtLnBvc2l0aW9uIHx8ICd0b3AnO1xuICAgICAgICBpdGVtLndlaWdodCA9IGl0ZW0ud2VpZ2h0IHx8IDA7XG4gICAgICAgIGl0ZW0uX2xheWVycyA9IGl0ZW0uX2xheWVycyB8fCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB6OiAwLFxuICAgICAgICAgICAgICAgICAgICBkcmF3IChjaGFydEFyZWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZHJhdyhjaGFydEFyZWEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfTtcbiAgICAgICAgY2hhcnQuYm94ZXMucHVzaChpdGVtKTtcbiAgICB9LFxuIHJlbW92ZUJveCAoY2hhcnQsIGxheW91dEl0ZW0pIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBjaGFydC5ib3hlcyA/IGNoYXJ0LmJveGVzLmluZGV4T2YobGF5b3V0SXRlbSkgOiAtMTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgY2hhcnQuYm94ZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH0sXG4gY29uZmlndXJlIChjaGFydCwgaXRlbSwgb3B0aW9ucykge1xuICAgICAgICBpdGVtLmZ1bGxTaXplID0gb3B0aW9ucy5mdWxsU2l6ZTtcbiAgICAgICAgaXRlbS5wb3NpdGlvbiA9IG9wdGlvbnMucG9zaXRpb247XG4gICAgICAgIGl0ZW0ud2VpZ2h0ID0gb3B0aW9ucy53ZWlnaHQ7XG4gICAgfSxcbiB1cGRhdGUgKGNoYXJ0LCB3aWR0aCwgaGVpZ2h0LCBtaW5QYWRkaW5nKSB7XG4gICAgICAgIGlmICghY2hhcnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWRkaW5nID0gdG9QYWRkaW5nKGNoYXJ0Lm9wdGlvbnMubGF5b3V0LnBhZGRpbmcpO1xuICAgICAgICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IE1hdGgubWF4KHdpZHRoIC0gcGFkZGluZy53aWR0aCwgMCk7XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZUhlaWdodCA9IE1hdGgubWF4KGhlaWdodCAtIHBhZGRpbmcuaGVpZ2h0LCAwKTtcbiAgICAgICAgY29uc3QgYm94ZXMgPSBidWlsZExheW91dEJveGVzKGNoYXJ0LmJveGVzKTtcbiAgICAgICAgY29uc3QgdmVydGljYWxCb3hlcyA9IGJveGVzLnZlcnRpY2FsO1xuICAgICAgICBjb25zdCBob3Jpem9udGFsQm94ZXMgPSBib3hlcy5ob3Jpem9udGFsO1xuICAgICAgICBlYWNoKGNoYXJ0LmJveGVzLCAoYm94KT0+e1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBib3guYmVmb3JlTGF5b3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYm94LmJlZm9yZUxheW91dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdmlzaWJsZVZlcnRpY2FsQm94Q291bnQgPSB2ZXJ0aWNhbEJveGVzLnJlZHVjZSgodG90YWwsIHdyYXApPT53cmFwLmJveC5vcHRpb25zICYmIHdyYXAuYm94Lm9wdGlvbnMuZGlzcGxheSA9PT0gZmFsc2UgPyB0b3RhbCA6IHRvdGFsICsgMSwgMCkgfHwgMTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgICAgICBvdXRlcldpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgIG91dGVySGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgICBwYWRkaW5nLFxuICAgICAgICAgICAgYXZhaWxhYmxlV2lkdGgsXG4gICAgICAgICAgICBhdmFpbGFibGVIZWlnaHQsXG4gICAgICAgICAgICB2Qm94TWF4V2lkdGg6IGF2YWlsYWJsZVdpZHRoIC8gMiAvIHZpc2libGVWZXJ0aWNhbEJveENvdW50LFxuICAgICAgICAgICAgaEJveE1heEhlaWdodDogYXZhaWxhYmxlSGVpZ2h0IC8gMlxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbWF4UGFkZGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHBhZGRpbmcpO1xuICAgICAgICB1cGRhdGVNYXhQYWRkaW5nKG1heFBhZGRpbmcsIHRvUGFkZGluZyhtaW5QYWRkaW5nKSk7XG4gICAgICAgIGNvbnN0IGNoYXJ0QXJlYSA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgbWF4UGFkZGluZyxcbiAgICAgICAgICAgIHc6IGF2YWlsYWJsZVdpZHRoLFxuICAgICAgICAgICAgaDogYXZhaWxhYmxlSGVpZ2h0LFxuICAgICAgICAgICAgeDogcGFkZGluZy5sZWZ0LFxuICAgICAgICAgICAgeTogcGFkZGluZy50b3BcbiAgICAgICAgfSwgcGFkZGluZyk7XG4gICAgICAgIGNvbnN0IHN0YWNrcyA9IHNldExheW91dERpbXModmVydGljYWxCb3hlcy5jb25jYXQoaG9yaXpvbnRhbEJveGVzKSwgcGFyYW1zKTtcbiAgICAgICAgZml0Qm94ZXMoYm94ZXMuZnVsbFNpemUsIGNoYXJ0QXJlYSwgcGFyYW1zLCBzdGFja3MpO1xuICAgICAgICBmaXRCb3hlcyh2ZXJ0aWNhbEJveGVzLCBjaGFydEFyZWEsIHBhcmFtcywgc3RhY2tzKTtcbiAgICAgICAgaWYgKGZpdEJveGVzKGhvcml6b250YWxCb3hlcywgY2hhcnRBcmVhLCBwYXJhbXMsIHN0YWNrcykpIHtcbiAgICAgICAgICAgIGZpdEJveGVzKHZlcnRpY2FsQm94ZXMsIGNoYXJ0QXJlYSwgcGFyYW1zLCBzdGFja3MpO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZU1heFBhZGRpbmcoY2hhcnRBcmVhKTtcbiAgICAgICAgcGxhY2VCb3hlcyhib3hlcy5sZWZ0QW5kVG9wLCBjaGFydEFyZWEsIHBhcmFtcywgc3RhY2tzKTtcbiAgICAgICAgY2hhcnRBcmVhLnggKz0gY2hhcnRBcmVhLnc7XG4gICAgICAgIGNoYXJ0QXJlYS55ICs9IGNoYXJ0QXJlYS5oO1xuICAgICAgICBwbGFjZUJveGVzKGJveGVzLnJpZ2h0QW5kQm90dG9tLCBjaGFydEFyZWEsIHBhcmFtcywgc3RhY2tzKTtcbiAgICAgICAgY2hhcnQuY2hhcnRBcmVhID0ge1xuICAgICAgICAgICAgbGVmdDogY2hhcnRBcmVhLmxlZnQsXG4gICAgICAgICAgICB0b3A6IGNoYXJ0QXJlYS50b3AsXG4gICAgICAgICAgICByaWdodDogY2hhcnRBcmVhLmxlZnQgKyBjaGFydEFyZWEudyxcbiAgICAgICAgICAgIGJvdHRvbTogY2hhcnRBcmVhLnRvcCArIGNoYXJ0QXJlYS5oLFxuICAgICAgICAgICAgaGVpZ2h0OiBjaGFydEFyZWEuaCxcbiAgICAgICAgICAgIHdpZHRoOiBjaGFydEFyZWEud1xuICAgICAgICB9O1xuICAgICAgICBlYWNoKGJveGVzLmNoYXJ0QXJlYSwgKGxheW91dCk9PntcbiAgICAgICAgICAgIGNvbnN0IGJveCA9IGxheW91dC5ib3g7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGJveCwgY2hhcnQuY2hhcnRBcmVhKTtcbiAgICAgICAgICAgIGJveC51cGRhdGUoY2hhcnRBcmVhLncsIGNoYXJ0QXJlYS5oLCB7XG4gICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgYm90dG9tOiAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuY2xhc3MgQmFzZVBsYXRmb3JtIHtcbiBhY3F1aXJlQ29udGV4dChjYW52YXMsIGFzcGVjdFJhdGlvKSB7fVxuIHJlbGVhc2VDb250ZXh0KGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiBhZGRFdmVudExpc3RlbmVyKGNoYXJ0LCB0eXBlLCBsaXN0ZW5lcikge31cbiByZW1vdmVFdmVudExpc3RlbmVyKGNoYXJ0LCB0eXBlLCBsaXN0ZW5lcikge31cbiBnZXREZXZpY2VQaXhlbFJhdGlvKCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gZ2V0TWF4aW11bVNpemUoZWxlbWVudCwgd2lkdGgsIGhlaWdodCwgYXNwZWN0UmF0aW8pIHtcbiAgICAgICAgd2lkdGggPSBNYXRoLm1heCgwLCB3aWR0aCB8fCBlbGVtZW50LndpZHRoKTtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IGVsZW1lbnQuaGVpZ2h0O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIGFzcGVjdFJhdGlvID8gTWF0aC5mbG9vcih3aWR0aCAvIGFzcGVjdFJhdGlvKSA6IGhlaWdodClcbiAgICAgICAgfTtcbiAgICB9XG4gaXNBdHRhY2hlZChjYW52YXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuIHVwZGF0ZUNvbmZpZyhjb25maWcpIHtcbiAgICB9XG59XG5cbmNsYXNzIEJhc2ljUGxhdGZvcm0gZXh0ZW5kcyBCYXNlUGxhdGZvcm0ge1xuICAgIGFjcXVpcmVDb250ZXh0KGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gJiYgaXRlbS5nZXRDb250ZXh0ICYmIGl0ZW0uZ2V0Q29udGV4dCgnMmQnKSB8fCBudWxsO1xuICAgIH1cbiAgICB1cGRhdGVDb25maWcoY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5vcHRpb25zLmFuaW1hdGlvbiA9IGZhbHNlO1xuICAgIH1cbn1cblxuY29uc3QgRVhQQU5ET19LRVkgPSAnJGNoYXJ0anMnO1xuIGNvbnN0IEVWRU5UX1RZUEVTID0ge1xuICAgIHRvdWNoc3RhcnQ6ICdtb3VzZWRvd24nLFxuICAgIHRvdWNobW92ZTogJ21vdXNlbW92ZScsXG4gICAgdG91Y2hlbmQ6ICdtb3VzZXVwJyxcbiAgICBwb2ludGVyZW50ZXI6ICdtb3VzZWVudGVyJyxcbiAgICBwb2ludGVyZG93bjogJ21vdXNlZG93bicsXG4gICAgcG9pbnRlcm1vdmU6ICdtb3VzZW1vdmUnLFxuICAgIHBvaW50ZXJ1cDogJ21vdXNldXAnLFxuICAgIHBvaW50ZXJsZWF2ZTogJ21vdXNlb3V0JyxcbiAgICBwb2ludGVyb3V0OiAnbW91c2VvdXQnXG59O1xuY29uc3QgaXNOdWxsT3JFbXB0eSA9ICh2YWx1ZSk9PnZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJztcbiBmdW5jdGlvbiBpbml0Q2FudmFzKGNhbnZhcywgYXNwZWN0UmF0aW8pIHtcbiAgICBjb25zdCBzdHlsZSA9IGNhbnZhcy5zdHlsZTtcbiAgICBjb25zdCByZW5kZXJIZWlnaHQgPSBjYW52YXMuZ2V0QXR0cmlidXRlKCdoZWlnaHQnKTtcbiAgICBjb25zdCByZW5kZXJXaWR0aCA9IGNhbnZhcy5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyk7XG4gICAgY2FudmFzW0VYUEFORE9fS0VZXSA9IHtcbiAgICAgICAgaW5pdGlhbDoge1xuICAgICAgICAgICAgaGVpZ2h0OiByZW5kZXJIZWlnaHQsXG4gICAgICAgICAgICB3aWR0aDogcmVuZGVyV2lkdGgsXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IHN0eWxlLmRpc3BsYXksXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBzdHlsZS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHN0eWxlLndpZHRoXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHN0eWxlLmRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5IHx8ICdibG9jayc7XG4gICAgc3R5bGUuYm94U2l6aW5nID0gc3R5bGUuYm94U2l6aW5nIHx8ICdib3JkZXItYm94JztcbiAgICBpZiAoaXNOdWxsT3JFbXB0eShyZW5kZXJXaWR0aCkpIHtcbiAgICAgICAgY29uc3QgZGlzcGxheVdpZHRoID0gcmVhZFVzZWRTaXplKGNhbnZhcywgJ3dpZHRoJyk7XG4gICAgICAgIGlmIChkaXNwbGF5V2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gZGlzcGxheVdpZHRoO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc051bGxPckVtcHR5KHJlbmRlckhlaWdodCkpIHtcbiAgICAgICAgaWYgKGNhbnZhcy5zdHlsZS5oZWlnaHQgPT09ICcnKSB7XG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gY2FudmFzLndpZHRoIC8gKGFzcGVjdFJhdGlvIHx8IDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGlzcGxheUhlaWdodCA9IHJlYWRVc2VkU2l6ZShjYW52YXMsICdoZWlnaHQnKTtcbiAgICAgICAgICAgIGlmIChkaXNwbGF5SGVpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gZGlzcGxheUhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2FudmFzO1xufVxuY29uc3QgZXZlbnRMaXN0ZW5lck9wdGlvbnMgPSBzdXBwb3J0c0V2ZW50TGlzdGVuZXJPcHRpb25zID8ge1xuICAgIHBhc3NpdmU6IHRydWVcbn0gOiBmYWxzZTtcbmZ1bmN0aW9uIGFkZExpc3RlbmVyKG5vZGUsIHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBldmVudExpc3RlbmVyT3B0aW9ucyk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoY2hhcnQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgaWYgKGNoYXJ0ICYmIGNoYXJ0LmNhbnZhcykge1xuICAgICAgICBjaGFydC5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgZXZlbnRMaXN0ZW5lck9wdGlvbnMpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGZyb21OYXRpdmVFdmVudChldmVudCwgY2hhcnQpIHtcbiAgICBjb25zdCB0eXBlID0gRVZFTlRfVFlQRVNbZXZlbnQudHlwZV0gfHwgZXZlbnQudHlwZTtcbiAgICBjb25zdCB7IHggLCB5ICB9ID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihldmVudCwgY2hhcnQpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIGNoYXJ0LFxuICAgICAgICBuYXRpdmU6IGV2ZW50LFxuICAgICAgICB4OiB4ICE9PSB1bmRlZmluZWQgPyB4IDogbnVsbCxcbiAgICAgICAgeTogeSAhPT0gdW5kZWZpbmVkID8geSA6IG51bGxcbiAgICB9O1xufVxuZnVuY3Rpb24gbm9kZUxpc3RDb250YWlucyhub2RlTGlzdCwgY2FudmFzKSB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVMaXN0KXtcbiAgICAgICAgaWYgKG5vZGUgPT09IGNhbnZhcyB8fCBub2RlLmNvbnRhaW5zKGNhbnZhcykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlQXR0YWNoT2JzZXJ2ZXIoY2hhcnQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgY29uc3QgY2FudmFzID0gY2hhcnQuY2FudmFzO1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpPT57XG4gICAgICAgIGxldCB0cmlnZ2VyID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcyl7XG4gICAgICAgICAgICB0cmlnZ2VyID0gdHJpZ2dlciB8fCBub2RlTGlzdENvbnRhaW5zKGVudHJ5LmFkZGVkTm9kZXMsIGNhbnZhcyk7XG4gICAgICAgICAgICB0cmlnZ2VyID0gdHJpZ2dlciAmJiAhbm9kZUxpc3RDb250YWlucyhlbnRyeS5yZW1vdmVkTm9kZXMsIGNhbnZhcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyaWdnZXIpIHtcbiAgICAgICAgICAgIGxpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7XG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBvYnNlcnZlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZURldGFjaE9ic2VydmVyKGNoYXJ0LCB0eXBlLCBsaXN0ZW5lcikge1xuICAgIGNvbnN0IGNhbnZhcyA9IGNoYXJ0LmNhbnZhcztcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChlbnRyaWVzKT0+e1xuICAgICAgICBsZXQgdHJpZ2dlciA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpe1xuICAgICAgICAgICAgdHJpZ2dlciA9IHRyaWdnZXIgfHwgbm9kZUxpc3RDb250YWlucyhlbnRyeS5yZW1vdmVkTm9kZXMsIGNhbnZhcyk7XG4gICAgICAgICAgICB0cmlnZ2VyID0gdHJpZ2dlciAmJiAhbm9kZUxpc3RDb250YWlucyhlbnRyeS5hZGRlZE5vZGVzLCBjYW52YXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcigpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwge1xuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gb2JzZXJ2ZXI7XG59XG5jb25zdCBkcnBMaXN0ZW5pbmdDaGFydHMgPSBuZXcgTWFwKCk7XG5sZXQgb2xkRGV2aWNlUGl4ZWxSYXRpbyA9IDA7XG5mdW5jdGlvbiBvbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICBjb25zdCBkcHIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICBpZiAoZHByID09PSBvbGREZXZpY2VQaXhlbFJhdGlvKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgb2xkRGV2aWNlUGl4ZWxSYXRpbyA9IGRwcjtcbiAgICBkcnBMaXN0ZW5pbmdDaGFydHMuZm9yRWFjaCgocmVzaXplLCBjaGFydCk9PntcbiAgICAgICAgaWYgKGNoYXJ0LmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvICE9PSBkcHIpIHtcbiAgICAgICAgICAgIHJlc2l6ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBsaXN0ZW5EZXZpY2VQaXhlbFJhdGlvQ2hhbmdlcyhjaGFydCwgcmVzaXplKSB7XG4gICAgaWYgKCFkcnBMaXN0ZW5pbmdDaGFydHMuc2l6ZSkge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25XaW5kb3dSZXNpemUpO1xuICAgIH1cbiAgICBkcnBMaXN0ZW5pbmdDaGFydHMuc2V0KGNoYXJ0LCByZXNpemUpO1xufVxuZnVuY3Rpb24gdW5saXN0ZW5EZXZpY2VQaXhlbFJhdGlvQ2hhbmdlcyhjaGFydCkge1xuICAgIGRycExpc3RlbmluZ0NoYXJ0cy5kZWxldGUoY2hhcnQpO1xuICAgIGlmICghZHJwTGlzdGVuaW5nQ2hhcnRzLnNpemUpIHtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uV2luZG93UmVzaXplKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVSZXNpemVPYnNlcnZlcihjaGFydCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgICBjb25zdCBjYW52YXMgPSBjaGFydC5jYW52YXM7XG4gICAgY29uc3QgY29udGFpbmVyID0gY2FudmFzICYmIF9nZXRQYXJlbnROb2RlKGNhbnZhcyk7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXNpemUgPSB0aHJvdHRsZWQoKHdpZHRoLCBoZWlnaHQpPT57XG4gICAgICAgIGNvbnN0IHcgPSBjb250YWluZXIuY2xpZW50V2lkdGg7XG4gICAgICAgIGxpc3RlbmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBpZiAodyA8IGNvbnRhaW5lci5jbGllbnRXaWR0aCkge1xuICAgICAgICAgICAgbGlzdGVuZXIoKTtcbiAgICAgICAgfVxuICAgIH0sIHdpbmRvdyk7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpPT57XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1swXTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBlbnRyeS5jb250ZW50UmVjdC53aWR0aDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gZW50cnkuY29udGVudFJlY3QuaGVpZ2h0O1xuICAgICAgICBpZiAod2lkdGggPT09IDAgJiYgaGVpZ2h0ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoY29udGFpbmVyKTtcbiAgICBsaXN0ZW5EZXZpY2VQaXhlbFJhdGlvQ2hhbmdlcyhjaGFydCwgcmVzaXplKTtcbiAgICByZXR1cm4gb2JzZXJ2ZXI7XG59XG5mdW5jdGlvbiByZWxlYXNlT2JzZXJ2ZXIoY2hhcnQsIHR5cGUsIG9ic2VydmVyKSB7XG4gICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdyZXNpemUnKSB7XG4gICAgICAgIHVubGlzdGVuRGV2aWNlUGl4ZWxSYXRpb0NoYW5nZXMoY2hhcnQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVByb3h5QW5kTGlzdGVuKGNoYXJ0LCB0eXBlLCBsaXN0ZW5lcikge1xuICAgIGNvbnN0IGNhbnZhcyA9IGNoYXJ0LmNhbnZhcztcbiAgICBjb25zdCBwcm94eSA9IHRocm90dGxlZCgoZXZlbnQpPT57XG4gICAgICAgIGlmIChjaGFydC5jdHggIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxpc3RlbmVyKGZyb21OYXRpdmVFdmVudChldmVudCwgY2hhcnQpKTtcbiAgICAgICAgfVxuICAgIH0sIGNoYXJ0KTtcbiAgICBhZGRMaXN0ZW5lcihjYW52YXMsIHR5cGUsIHByb3h5KTtcbiAgICByZXR1cm4gcHJveHk7XG59XG4gY2xhc3MgRG9tUGxhdGZvcm0gZXh0ZW5kcyBCYXNlUGxhdGZvcm0ge1xuIGFjcXVpcmVDb250ZXh0KGNhbnZhcywgYXNwZWN0UmF0aW8pIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcyAmJiBjYW52YXMuZ2V0Q29udGV4dCAmJiBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5jYW52YXMgPT09IGNhbnZhcykge1xuICAgICAgICAgICAgaW5pdENhbnZhcyhjYW52YXMsIGFzcGVjdFJhdGlvKTtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiByZWxlYXNlQ29udGV4dChjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IGNvbnRleHQuY2FudmFzO1xuICAgICAgICBpZiAoIWNhbnZhc1tFWFBBTkRPX0tFWV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbml0aWFsID0gY2FudmFzW0VYUEFORE9fS0VZXS5pbml0aWFsO1xuICAgICAgICBbXG4gICAgICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgICAgICd3aWR0aCdcbiAgICAgICAgXS5mb3JFYWNoKChwcm9wKT0+e1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbml0aWFsW3Byb3BdO1xuICAgICAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWYodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY2FudmFzLnJlbW92ZUF0dHJpYnV0ZShwcm9wKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FudmFzLnNldEF0dHJpYnV0ZShwcm9wLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzdHlsZSA9IGluaXRpYWwuc3R5bGUgfHwge307XG4gICAgICAgIE9iamVjdC5rZXlzKHN0eWxlKS5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgICAgICBjYW52YXMuc3R5bGVba2V5XSA9IHN0eWxlW2tleV07XG4gICAgICAgIH0pO1xuICAgICAgICBjYW52YXMud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgICAgIGRlbGV0ZSBjYW52YXNbRVhQQU5ET19LRVldO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gYWRkRXZlbnRMaXN0ZW5lcihjaGFydCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGNoYXJ0LCB0eXBlKTtcbiAgICAgICAgY29uc3QgcHJveGllcyA9IGNoYXJ0LiRwcm94aWVzIHx8IChjaGFydC4kcHJveGllcyA9IHt9KTtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSB7XG4gICAgICAgICAgICBhdHRhY2g6IGNyZWF0ZUF0dGFjaE9ic2VydmVyLFxuICAgICAgICAgICAgZGV0YWNoOiBjcmVhdGVEZXRhY2hPYnNlcnZlcixcbiAgICAgICAgICAgIHJlc2l6ZTogY3JlYXRlUmVzaXplT2JzZXJ2ZXJcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IGhhbmRsZXJzW3R5cGVdIHx8IGNyZWF0ZVByb3h5QW5kTGlzdGVuO1xuICAgICAgICBwcm94aWVzW3R5cGVdID0gaGFuZGxlcihjaGFydCwgdHlwZSwgbGlzdGVuZXIpO1xuICAgIH1cbiByZW1vdmVFdmVudExpc3RlbmVyKGNoYXJ0LCB0eXBlKSB7XG4gICAgICAgIGNvbnN0IHByb3hpZXMgPSBjaGFydC4kcHJveGllcyB8fCAoY2hhcnQuJHByb3hpZXMgPSB7fSk7XG4gICAgICAgIGNvbnN0IHByb3h5ID0gcHJveGllc1t0eXBlXTtcbiAgICAgICAgaWYgKCFwcm94eSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0ge1xuICAgICAgICAgICAgYXR0YWNoOiByZWxlYXNlT2JzZXJ2ZXIsXG4gICAgICAgICAgICBkZXRhY2g6IHJlbGVhc2VPYnNlcnZlcixcbiAgICAgICAgICAgIHJlc2l6ZTogcmVsZWFzZU9ic2VydmVyXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBoYW5kbGVyc1t0eXBlXSB8fCByZW1vdmVMaXN0ZW5lcjtcbiAgICAgICAgaGFuZGxlcihjaGFydCwgdHlwZSwgcHJveHkpO1xuICAgICAgICBwcm94aWVzW3R5cGVdID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXREZXZpY2VQaXhlbFJhdGlvKCkge1xuICAgICAgICByZXR1cm4gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gICAgfVxuIGdldE1heGltdW1TaXplKGNhbnZhcywgd2lkdGgsIGhlaWdodCwgYXNwZWN0UmF0aW8pIHtcbiAgICAgICAgcmV0dXJuIGdldE1heGltdW1TaXplKGNhbnZhcywgd2lkdGgsIGhlaWdodCwgYXNwZWN0UmF0aW8pO1xuICAgIH1cbiBpc0F0dGFjaGVkKGNhbnZhcykge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBjYW52YXMgJiYgX2dldFBhcmVudE5vZGUoY2FudmFzKTtcbiAgICAgICAgcmV0dXJuICEhKGNvbnRhaW5lciAmJiBjb250YWluZXIuaXNDb25uZWN0ZWQpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gX2RldGVjdFBsYXRmb3JtKGNhbnZhcykge1xuICAgIGlmICghX2lzRG9tU3VwcG9ydGVkKCkgfHwgdHlwZW9mIE9mZnNjcmVlbkNhbnZhcyAhPT0gJ3VuZGVmaW5lZCcgJiYgY2FudmFzIGluc3RhbmNlb2YgT2Zmc2NyZWVuQ2FudmFzKSB7XG4gICAgICAgIHJldHVybiBCYXNpY1BsYXRmb3JtO1xuICAgIH1cbiAgICByZXR1cm4gRG9tUGxhdGZvcm07XG59XG5cbmNsYXNzIEVsZW1lbnQge1xuICAgIHN0YXRpYyBkZWZhdWx0cyA9IHt9O1xuICAgIHN0YXRpYyBkZWZhdWx0Um91dGVzID0gdW5kZWZpbmVkO1xuICAgIHg7XG4gICAgeTtcbiAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICBvcHRpb25zO1xuICAgICRhbmltYXRpb25zO1xuICAgIHRvb2x0aXBQb3NpdGlvbih1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgIH0gPSB0aGlzLmdldFByb3BzKFtcbiAgICAgICAgICAgICd4JyxcbiAgICAgICAgICAgICd5J1xuICAgICAgICBdLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5XG4gICAgICAgIH07XG4gICAgfVxuICAgIGhhc1ZhbHVlKCkge1xuICAgICAgICByZXR1cm4gaXNOdW1iZXIodGhpcy54KSAmJiBpc051bWJlcih0aGlzLnkpO1xuICAgIH1cbiAgICBnZXRQcm9wcyhwcm9wcywgZmluYWwpIHtcbiAgICAgICAgY29uc3QgYW5pbXMgPSB0aGlzLiRhbmltYXRpb25zO1xuICAgICAgICBpZiAoIWZpbmFsIHx8ICFhbmltcykge1xuICAgICAgICAgICAgLy8gbGV0J3Mgbm90IGNyZWF0ZSBhbiBvYmplY3QsIGlmIG5vdCBuZWVkZWRcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldCA9IHt9O1xuICAgICAgICBwcm9wcy5mb3JFYWNoKChwcm9wKT0+e1xuICAgICAgICAgICAgcmV0W3Byb3BdID0gYW5pbXNbcHJvcF0gJiYgYW5pbXNbcHJvcF0uYWN0aXZlKCkgPyBhbmltc1twcm9wXS5fdG8gOiB0aGlzW3Byb3BdO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGF1dG9Ta2lwKHNjYWxlLCB0aWNrcykge1xuICAgIGNvbnN0IHRpY2tPcHRzID0gc2NhbGUub3B0aW9ucy50aWNrcztcbiAgICBjb25zdCBkZXRlcm1pbmVkTWF4VGlja3MgPSBkZXRlcm1pbmVNYXhUaWNrcyhzY2FsZSk7XG4gICAgY29uc3QgdGlja3NMaW1pdCA9IE1hdGgubWluKHRpY2tPcHRzLm1heFRpY2tzTGltaXQgfHwgZGV0ZXJtaW5lZE1heFRpY2tzLCBkZXRlcm1pbmVkTWF4VGlja3MpO1xuICAgIGNvbnN0IG1ham9ySW5kaWNlcyA9IHRpY2tPcHRzLm1ham9yLmVuYWJsZWQgPyBnZXRNYWpvckluZGljZXModGlja3MpIDogW107XG4gICAgY29uc3QgbnVtTWFqb3JJbmRpY2VzID0gbWFqb3JJbmRpY2VzLmxlbmd0aDtcbiAgICBjb25zdCBmaXJzdCA9IG1ham9ySW5kaWNlc1swXTtcbiAgICBjb25zdCBsYXN0ID0gbWFqb3JJbmRpY2VzW251bU1ham9ySW5kaWNlcyAtIDFdO1xuICAgIGNvbnN0IG5ld1RpY2tzID0gW107XG4gICAgaWYgKG51bU1ham9ySW5kaWNlcyA+IHRpY2tzTGltaXQpIHtcbiAgICAgICAgc2tpcE1ham9ycyh0aWNrcywgbmV3VGlja3MsIG1ham9ySW5kaWNlcywgbnVtTWFqb3JJbmRpY2VzIC8gdGlja3NMaW1pdCk7XG4gICAgICAgIHJldHVybiBuZXdUaWNrcztcbiAgICB9XG4gICAgY29uc3Qgc3BhY2luZyA9IGNhbGN1bGF0ZVNwYWNpbmcobWFqb3JJbmRpY2VzLCB0aWNrcywgdGlja3NMaW1pdCk7XG4gICAgaWYgKG51bU1ham9ySW5kaWNlcyA+IDApIHtcbiAgICAgICAgbGV0IGksIGlsZW47XG4gICAgICAgIGNvbnN0IGF2Z01ham9yU3BhY2luZyA9IG51bU1ham9ySW5kaWNlcyA+IDEgPyBNYXRoLnJvdW5kKChsYXN0IC0gZmlyc3QpIC8gKG51bU1ham9ySW5kaWNlcyAtIDEpKSA6IG51bGw7XG4gICAgICAgIHNraXAodGlja3MsIG5ld1RpY2tzLCBzcGFjaW5nLCBpc051bGxPclVuZGVmKGF2Z01ham9yU3BhY2luZykgPyAwIDogZmlyc3QgLSBhdmdNYWpvclNwYWNpbmcsIGZpcnN0KTtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gbnVtTWFqb3JJbmRpY2VzIC0gMTsgaSA8IGlsZW47IGkrKyl7XG4gICAgICAgICAgICBza2lwKHRpY2tzLCBuZXdUaWNrcywgc3BhY2luZywgbWFqb3JJbmRpY2VzW2ldLCBtYWpvckluZGljZXNbaSArIDFdKTtcbiAgICAgICAgfVxuICAgICAgICBza2lwKHRpY2tzLCBuZXdUaWNrcywgc3BhY2luZywgbGFzdCwgaXNOdWxsT3JVbmRlZihhdmdNYWpvclNwYWNpbmcpID8gdGlja3MubGVuZ3RoIDogbGFzdCArIGF2Z01ham9yU3BhY2luZyk7XG4gICAgICAgIHJldHVybiBuZXdUaWNrcztcbiAgICB9XG4gICAgc2tpcCh0aWNrcywgbmV3VGlja3MsIHNwYWNpbmcpO1xuICAgIHJldHVybiBuZXdUaWNrcztcbn1cbmZ1bmN0aW9uIGRldGVybWluZU1heFRpY2tzKHNjYWxlKSB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gc2NhbGUub3B0aW9ucy5vZmZzZXQ7XG4gICAgY29uc3QgdGlja0xlbmd0aCA9IHNjYWxlLl90aWNrU2l6ZSgpO1xuICAgIGNvbnN0IG1heFNjYWxlID0gc2NhbGUuX2xlbmd0aCAvIHRpY2tMZW5ndGggKyAob2Zmc2V0ID8gMCA6IDEpO1xuICAgIGNvbnN0IG1heENoYXJ0ID0gc2NhbGUuX21heExlbmd0aCAvIHRpY2tMZW5ndGg7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5taW4obWF4U2NhbGUsIG1heENoYXJ0KSk7XG59XG4gZnVuY3Rpb24gY2FsY3VsYXRlU3BhY2luZyhtYWpvckluZGljZXMsIHRpY2tzLCB0aWNrc0xpbWl0KSB7XG4gICAgY29uc3QgZXZlbk1ham9yU3BhY2luZyA9IGdldEV2ZW5TcGFjaW5nKG1ham9ySW5kaWNlcyk7XG4gICAgY29uc3Qgc3BhY2luZyA9IHRpY2tzLmxlbmd0aCAvIHRpY2tzTGltaXQ7XG4gICAgaWYgKCFldmVuTWFqb3JTcGFjaW5nKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChzcGFjaW5nLCAxKTtcbiAgICB9XG4gICAgY29uc3QgZmFjdG9ycyA9IF9mYWN0b3JpemUoZXZlbk1ham9yU3BhY2luZyk7XG4gICAgZm9yKGxldCBpID0gMCwgaWxlbiA9IGZhY3RvcnMubGVuZ3RoIC0gMTsgaSA8IGlsZW47IGkrKyl7XG4gICAgICAgIGNvbnN0IGZhY3RvciA9IGZhY3RvcnNbaV07XG4gICAgICAgIGlmIChmYWN0b3IgPiBzcGFjaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFjdG9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBNYXRoLm1heChzcGFjaW5nLCAxKTtcbn1cbiBmdW5jdGlvbiBnZXRNYWpvckluZGljZXModGlja3MpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBsZXQgaSwgaWxlbjtcbiAgICBmb3IoaSA9IDAsIGlsZW4gPSB0aWNrcy5sZW5ndGg7IGkgPCBpbGVuOyBpKyspe1xuICAgICAgICBpZiAodGlja3NbaV0ubWFqb3IpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4gZnVuY3Rpb24gc2tpcE1ham9ycyh0aWNrcywgbmV3VGlja3MsIG1ham9ySW5kaWNlcywgc3BhY2luZykge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgbGV0IG5leHQgPSBtYWpvckluZGljZXNbMF07XG4gICAgbGV0IGk7XG4gICAgc3BhY2luZyA9IE1hdGguY2VpbChzcGFjaW5nKTtcbiAgICBmb3IoaSA9IDA7IGkgPCB0aWNrcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIGlmIChpID09PSBuZXh0KSB7XG4gICAgICAgICAgICBuZXdUaWNrcy5wdXNoKHRpY2tzW2ldKTtcbiAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICBuZXh0ID0gbWFqb3JJbmRpY2VzW2NvdW50ICogc3BhY2luZ107XG4gICAgICAgIH1cbiAgICB9XG59XG4gZnVuY3Rpb24gc2tpcCh0aWNrcywgbmV3VGlja3MsIHNwYWNpbmcsIG1ham9yU3RhcnQsIG1ham9yRW5kKSB7XG4gICAgY29uc3Qgc3RhcnQgPSB2YWx1ZU9yRGVmYXVsdChtYWpvclN0YXJ0LCAwKTtcbiAgICBjb25zdCBlbmQgPSBNYXRoLm1pbih2YWx1ZU9yRGVmYXVsdChtYWpvckVuZCwgdGlja3MubGVuZ3RoKSwgdGlja3MubGVuZ3RoKTtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGxldCBsZW5ndGgsIGksIG5leHQ7XG4gICAgc3BhY2luZyA9IE1hdGguY2VpbChzcGFjaW5nKTtcbiAgICBpZiAobWFqb3JFbmQpIHtcbiAgICAgICAgbGVuZ3RoID0gbWFqb3JFbmQgLSBtYWpvclN0YXJ0O1xuICAgICAgICBzcGFjaW5nID0gbGVuZ3RoIC8gTWF0aC5mbG9vcihsZW5ndGggLyBzcGFjaW5nKTtcbiAgICB9XG4gICAgbmV4dCA9IHN0YXJ0O1xuICAgIHdoaWxlKG5leHQgPCAwKXtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgbmV4dCA9IE1hdGgucm91bmQoc3RhcnQgKyBjb3VudCAqIHNwYWNpbmcpO1xuICAgIH1cbiAgICBmb3IoaSA9IE1hdGgubWF4KHN0YXJ0LCAwKTsgaSA8IGVuZDsgaSsrKXtcbiAgICAgICAgaWYgKGkgPT09IG5leHQpIHtcbiAgICAgICAgICAgIG5ld1RpY2tzLnB1c2godGlja3NbaV0pO1xuICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgIG5leHQgPSBNYXRoLnJvdW5kKHN0YXJ0ICsgY291bnQgKiBzcGFjaW5nKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiBmdW5jdGlvbiBnZXRFdmVuU3BhY2luZyhhcnIpIHtcbiAgICBjb25zdCBsZW4gPSBhcnIubGVuZ3RoO1xuICAgIGxldCBpLCBkaWZmO1xuICAgIGlmIChsZW4gPCAyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yKGRpZmYgPSBhcnJbMF0sIGkgPSAxOyBpIDwgbGVuOyArK2kpe1xuICAgICAgICBpZiAoYXJyW2ldIC0gYXJyW2kgLSAxXSAhPT0gZGlmZikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkaWZmO1xufVxuXG5jb25zdCByZXZlcnNlQWxpZ24gPSAoYWxpZ24pPT5hbGlnbiA9PT0gJ2xlZnQnID8gJ3JpZ2h0JyA6IGFsaWduID09PSAncmlnaHQnID8gJ2xlZnQnIDogYWxpZ247XG5jb25zdCBvZmZzZXRGcm9tRWRnZSA9IChzY2FsZSwgZWRnZSwgb2Zmc2V0KT0+ZWRnZSA9PT0gJ3RvcCcgfHwgZWRnZSA9PT0gJ2xlZnQnID8gc2NhbGVbZWRnZV0gKyBvZmZzZXQgOiBzY2FsZVtlZGdlXSAtIG9mZnNldDtcbmNvbnN0IGdldFRpY2tzTGltaXQgPSAodGlja3NMZW5ndGgsIG1heFRpY2tzTGltaXQpPT5NYXRoLm1pbihtYXhUaWNrc0xpbWl0IHx8IHRpY2tzTGVuZ3RoLCB0aWNrc0xlbmd0aCk7XG4gZnVuY3Rpb24gc2FtcGxlKGFyciwgbnVtSXRlbXMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCBpbmNyZW1lbnQgPSBhcnIubGVuZ3RoIC8gbnVtSXRlbXM7XG4gICAgY29uc3QgbGVuID0gYXJyLmxlbmd0aDtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yKDsgaSA8IGxlbjsgaSArPSBpbmNyZW1lbnQpe1xuICAgICAgICByZXN1bHQucHVzaChhcnJbTWF0aC5mbG9vcihpKV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIGZ1bmN0aW9uIGdldFBpeGVsRm9yR3JpZExpbmUoc2NhbGUsIGluZGV4LCBvZmZzZXRHcmlkTGluZXMpIHtcbiAgICBjb25zdCBsZW5ndGggPSBzY2FsZS50aWNrcy5sZW5ndGg7XG4gICAgY29uc3QgdmFsaWRJbmRleCA9IE1hdGgubWluKGluZGV4LCBsZW5ndGggLSAxKTtcbiAgICBjb25zdCBzdGFydCA9IHNjYWxlLl9zdGFydFBpeGVsO1xuICAgIGNvbnN0IGVuZCA9IHNjYWxlLl9lbmRQaXhlbDtcbiAgICBjb25zdCBlcHNpbG9uID0gMWUtNjtcbiAgICBsZXQgbGluZVZhbHVlID0gc2NhbGUuZ2V0UGl4ZWxGb3JUaWNrKHZhbGlkSW5kZXgpO1xuICAgIGxldCBvZmZzZXQ7XG4gICAgaWYgKG9mZnNldEdyaWRMaW5lcykge1xuICAgICAgICBpZiAobGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBNYXRoLm1heChsaW5lVmFsdWUgLSBzdGFydCwgZW5kIC0gbGluZVZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gKHNjYWxlLmdldFBpeGVsRm9yVGljaygxKSAtIGxpbmVWYWx1ZSkgLyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2Zmc2V0ID0gKGxpbmVWYWx1ZSAtIHNjYWxlLmdldFBpeGVsRm9yVGljayh2YWxpZEluZGV4IC0gMSkpIC8gMjtcbiAgICAgICAgfVxuICAgICAgICBsaW5lVmFsdWUgKz0gdmFsaWRJbmRleCA8IGluZGV4ID8gb2Zmc2V0IDogLW9mZnNldDtcbiAgICAgICAgaWYgKGxpbmVWYWx1ZSA8IHN0YXJ0IC0gZXBzaWxvbiB8fCBsaW5lVmFsdWUgPiBlbmQgKyBlcHNpbG9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxpbmVWYWx1ZTtcbn1cbiBmdW5jdGlvbiBnYXJiYWdlQ29sbGVjdChjYWNoZXMsIGxlbmd0aCkge1xuICAgIGVhY2goY2FjaGVzLCAoY2FjaGUpPT57XG4gICAgICAgIGNvbnN0IGdjID0gY2FjaGUuZ2M7XG4gICAgICAgIGNvbnN0IGdjTGVuID0gZ2MubGVuZ3RoIC8gMjtcbiAgICAgICAgbGV0IGk7XG4gICAgICAgIGlmIChnY0xlbiA+IGxlbmd0aCkge1xuICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgZ2NMZW47ICsraSl7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hlLmRhdGFbZ2NbaV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2Muc3BsaWNlKDAsIGdjTGVuKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIGZ1bmN0aW9uIGdldFRpY2tNYXJrTGVuZ3RoKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5kcmF3VGlja3MgPyBvcHRpb25zLnRpY2tMZW5ndGggOiAwO1xufVxuIGZ1bmN0aW9uIGdldFRpdGxlSGVpZ2h0KG9wdGlvbnMsIGZhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRpb25zLmRpc3BsYXkpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0IGZvbnQgPSB0b0ZvbnQob3B0aW9ucy5mb250LCBmYWxsYmFjayk7XG4gICAgY29uc3QgcGFkZGluZyA9IHRvUGFkZGluZyhvcHRpb25zLnBhZGRpbmcpO1xuICAgIGNvbnN0IGxpbmVzID0gaXNBcnJheShvcHRpb25zLnRleHQpID8gb3B0aW9ucy50ZXh0Lmxlbmd0aCA6IDE7XG4gICAgcmV0dXJuIGxpbmVzICogZm9udC5saW5lSGVpZ2h0ICsgcGFkZGluZy5oZWlnaHQ7XG59XG5mdW5jdGlvbiBjcmVhdGVTY2FsZUNvbnRleHQocGFyZW50LCBzY2FsZSkge1xuICAgIHJldHVybiBjcmVhdGVDb250ZXh0KHBhcmVudCwge1xuICAgICAgICBzY2FsZSxcbiAgICAgICAgdHlwZTogJ3NjYWxlJ1xuICAgIH0pO1xufVxuZnVuY3Rpb24gY3JlYXRlVGlja0NvbnRleHQocGFyZW50LCBpbmRleCwgdGljaykge1xuICAgIHJldHVybiBjcmVhdGVDb250ZXh0KHBhcmVudCwge1xuICAgICAgICB0aWNrLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgdHlwZTogJ3RpY2snXG4gICAgfSk7XG59XG5mdW5jdGlvbiB0aXRsZUFsaWduKGFsaWduLCBwb3NpdGlvbiwgcmV2ZXJzZSkge1xuICAgICBsZXQgcmV0ID0gX3RvTGVmdFJpZ2h0Q2VudGVyKGFsaWduKTtcbiAgICBpZiAocmV2ZXJzZSAmJiBwb3NpdGlvbiAhPT0gJ3JpZ2h0JyB8fCAhcmV2ZXJzZSAmJiBwb3NpdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICByZXQgPSByZXZlcnNlQWxpZ24ocmV0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cbmZ1bmN0aW9uIHRpdGxlQXJncyhzY2FsZSwgb2Zmc2V0LCBwb3NpdGlvbiwgYWxpZ24pIHtcbiAgICBjb25zdCB7IHRvcCAsIGxlZnQgLCBib3R0b20gLCByaWdodCAsIGNoYXJ0ICB9ID0gc2NhbGU7XG4gICAgY29uc3QgeyBjaGFydEFyZWEgLCBzY2FsZXMgIH0gPSBjaGFydDtcbiAgICBsZXQgcm90YXRpb24gPSAwO1xuICAgIGxldCBtYXhXaWR0aCwgdGl0bGVYLCB0aXRsZVk7XG4gICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgIGlmIChzY2FsZS5pc0hvcml6b250YWwoKSkge1xuICAgICAgICB0aXRsZVggPSBfYWxpZ25TdGFydEVuZChhbGlnbiwgbGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoaXNPYmplY3QocG9zaXRpb24pKSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbkF4aXNJRCA9IE9iamVjdC5rZXlzKHBvc2l0aW9uKVswXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcG9zaXRpb25bcG9zaXRpb25BeGlzSURdO1xuICAgICAgICAgICAgdGl0bGVZID0gc2NhbGVzW3Bvc2l0aW9uQXhpc0lEXS5nZXRQaXhlbEZvclZhbHVlKHZhbHVlKSArIGhlaWdodCAtIG9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgIHRpdGxlWSA9IChjaGFydEFyZWEuYm90dG9tICsgY2hhcnRBcmVhLnRvcCkgLyAyICsgaGVpZ2h0IC0gb2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGl0bGVZID0gb2Zmc2V0RnJvbUVkZ2Uoc2NhbGUsIHBvc2l0aW9uLCBvZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIG1heFdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc09iamVjdChwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uQXhpc0lEID0gT2JqZWN0LmtleXMocG9zaXRpb24pWzBdO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwb3NpdGlvbltwb3NpdGlvbkF4aXNJRF07XG4gICAgICAgICAgICB0aXRsZVggPSBzY2FsZXNbcG9zaXRpb25BeGlzSURdLmdldFBpeGVsRm9yVmFsdWUodmFsdWUpIC0gd2lkdGggKyBvZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICB0aXRsZVggPSAoY2hhcnRBcmVhLmxlZnQgKyBjaGFydEFyZWEucmlnaHQpIC8gMiAtIHdpZHRoICsgb2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGl0bGVYID0gb2Zmc2V0RnJvbUVkZ2Uoc2NhbGUsIHBvc2l0aW9uLCBvZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIHRpdGxlWSA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCBib3R0b20sIHRvcCk7XG4gICAgICAgIHJvdGF0aW9uID0gcG9zaXRpb24gPT09ICdsZWZ0JyA/IC1IQUxGX1BJIDogSEFMRl9QSTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdGl0bGVYLFxuICAgICAgICB0aXRsZVksXG4gICAgICAgIG1heFdpZHRoLFxuICAgICAgICByb3RhdGlvblxuICAgIH07XG59XG5jbGFzcyBTY2FsZSBleHRlbmRzIEVsZW1lbnQge1xuICAgIGNvbnN0cnVjdG9yKGNmZyl7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgICB0aGlzLmlkID0gY2ZnLmlkO1xuICAgICAgICAgdGhpcy50eXBlID0gY2ZnLnR5cGU7XG4gICAgICAgICB0aGlzLm9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLmN0eCA9IGNmZy5jdHg7XG4gICAgICAgICB0aGlzLmNoYXJ0ID0gY2ZnLmNoYXJ0O1xuICAgICAgICAgdGhpcy50b3AgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLmJvdHRvbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMubGVmdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMucmlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLndpZHRoID0gdW5kZWZpbmVkO1xuICAgICAgICAgdGhpcy5oZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX21hcmdpbnMgPSB7XG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICBib3R0b206IDBcbiAgICAgICAgfTtcbiAgICAgICAgIHRoaXMubWF4V2lkdGggPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLm1heEhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMucGFkZGluZ1RvcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMucGFkZGluZ0JvdHRvbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMucGFkZGluZ0xlZnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLnBhZGRpbmdSaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMuYXhpcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMubGFiZWxSb3RhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5taW4gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubWF4ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9yYW5nZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMudGlja3MgPSBbXTtcbiAgICAgICAgIHRoaXMuX2dyaWRMaW5lSXRlbXMgPSBudWxsO1xuICAgICAgICAgdGhpcy5fbGFiZWxJdGVtcyA9IG51bGw7XG4gICAgICAgICB0aGlzLl9sYWJlbFNpemVzID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5fbWF4TGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5fbG9uZ2VzdFRleHRDYWNoZSA9IHt9O1xuICAgICAgICAgdGhpcy5fc3RhcnRQaXhlbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMuX2VuZFBpeGVsID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9yZXZlcnNlUGl4ZWxzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3VzZXJNYXggPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3VzZXJNaW4gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3N1Z2dlc3RlZE1heCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fc3VnZ2VzdGVkTWluID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl90aWNrc0xlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuX2JvcmRlclZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5fY2FjaGUgPSB7fTtcbiAgICAgICAgdGhpcy5fZGF0YUxpbWl0c0NhY2hlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLiRjb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiBpbml0KG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucy5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgICAgICAgdGhpcy5heGlzID0gb3B0aW9ucy5heGlzO1xuICAgICAgICB0aGlzLl91c2VyTWluID0gdGhpcy5wYXJzZShvcHRpb25zLm1pbik7XG4gICAgICAgIHRoaXMuX3VzZXJNYXggPSB0aGlzLnBhcnNlKG9wdGlvbnMubWF4KTtcbiAgICAgICAgdGhpcy5fc3VnZ2VzdGVkTWluID0gdGhpcy5wYXJzZShvcHRpb25zLnN1Z2dlc3RlZE1pbik7XG4gICAgICAgIHRoaXMuX3N1Z2dlc3RlZE1heCA9IHRoaXMucGFyc2Uob3B0aW9ucy5zdWdnZXN0ZWRNYXgpO1xuICAgIH1cbiBwYXJzZShyYXcsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiByYXc7XG4gICAgfVxuIGdldFVzZXJCb3VuZHMoKSB7XG4gICAgICAgIGxldCB7IF91c2VyTWluICwgX3VzZXJNYXggLCBfc3VnZ2VzdGVkTWluICwgX3N1Z2dlc3RlZE1heCAgfSA9IHRoaXM7XG4gICAgICAgIF91c2VyTWluID0gZmluaXRlT3JEZWZhdWx0KF91c2VyTWluLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBfdXNlck1heCA9IGZpbml0ZU9yRGVmYXVsdChfdXNlck1heCwgTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKTtcbiAgICAgICAgX3N1Z2dlc3RlZE1pbiA9IGZpbml0ZU9yRGVmYXVsdChfc3VnZ2VzdGVkTWluLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBfc3VnZ2VzdGVkTWF4ID0gZmluaXRlT3JEZWZhdWx0KF9zdWdnZXN0ZWRNYXgsIE51bWJlci5ORUdBVElWRV9JTkZJTklUWSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtaW46IGZpbml0ZU9yRGVmYXVsdChfdXNlck1pbiwgX3N1Z2dlc3RlZE1pbiksXG4gICAgICAgICAgICBtYXg6IGZpbml0ZU9yRGVmYXVsdChfdXNlck1heCwgX3N1Z2dlc3RlZE1heCksXG4gICAgICAgICAgICBtaW5EZWZpbmVkOiBpc051bWJlckZpbml0ZShfdXNlck1pbiksXG4gICAgICAgICAgICBtYXhEZWZpbmVkOiBpc051bWJlckZpbml0ZShfdXNlck1heClcbiAgICAgICAgfTtcbiAgICB9XG4gZ2V0TWluTWF4KGNhblN0YWNrKSB7XG4gICAgICAgIGxldCB7IG1pbiAsIG1heCAsIG1pbkRlZmluZWQgLCBtYXhEZWZpbmVkICB9ID0gdGhpcy5nZXRVc2VyQm91bmRzKCk7XG4gICAgICAgIGxldCByYW5nZTtcbiAgICAgICAgaWYgKG1pbkRlZmluZWQgJiYgbWF4RGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICAgICAgbWF4XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldGFzID0gdGhpcy5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcygpO1xuICAgICAgICBmb3IobGV0IGkgPSAwLCBpbGVuID0gbWV0YXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIHJhbmdlID0gbWV0YXNbaV0uY29udHJvbGxlci5nZXRNaW5NYXgodGhpcywgY2FuU3RhY2spO1xuICAgICAgICAgICAgaWYgKCFtaW5EZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbWluID0gTWF0aC5taW4obWluLCByYW5nZS5taW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFtYXhEZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCByYW5nZS5tYXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG1pbiA9IG1heERlZmluZWQgJiYgbWluID4gbWF4ID8gbWF4IDogbWluO1xuICAgICAgICBtYXggPSBtaW5EZWZpbmVkICYmIG1pbiA+IG1heCA/IG1pbiA6IG1heDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1pbjogZmluaXRlT3JEZWZhdWx0KG1pbiwgZmluaXRlT3JEZWZhdWx0KG1heCwgbWluKSksXG4gICAgICAgICAgICBtYXg6IGZpbml0ZU9yRGVmYXVsdChtYXgsIGZpbml0ZU9yRGVmYXVsdChtaW4sIG1heCkpXG4gICAgICAgIH07XG4gICAgfVxuIGdldFBhZGRpbmcoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsZWZ0OiB0aGlzLnBhZGRpbmdMZWZ0IHx8IDAsXG4gICAgICAgICAgICB0b3A6IHRoaXMucGFkZGluZ1RvcCB8fCAwLFxuICAgICAgICAgICAgcmlnaHQ6IHRoaXMucGFkZGluZ1JpZ2h0IHx8IDAsXG4gICAgICAgICAgICBib3R0b206IHRoaXMucGFkZGluZ0JvdHRvbSB8fCAwXG4gICAgICAgIH07XG4gICAgfVxuIGdldFRpY2tzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aWNrcztcbiAgICB9XG4gZ2V0TGFiZWxzKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5jaGFydC5kYXRhO1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVscyB8fCAodGhpcy5pc0hvcml6b250YWwoKSA/IGRhdGEueExhYmVscyA6IGRhdGEueUxhYmVscykgfHwgZGF0YS5sYWJlbHMgfHwgW107XG4gICAgfVxuIGdldExhYmVsSXRlbXMoY2hhcnRBcmVhID0gdGhpcy5jaGFydC5jaGFydEFyZWEpIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLl9sYWJlbEl0ZW1zIHx8ICh0aGlzLl9sYWJlbEl0ZW1zID0gdGhpcy5fY29tcHV0ZUxhYmVsSXRlbXMoY2hhcnRBcmVhKSk7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG4gICAgYmVmb3JlTGF5b3V0KCkge1xuICAgICAgICB0aGlzLl9jYWNoZSA9IHt9O1xuICAgICAgICB0aGlzLl9kYXRhTGltaXRzQ2FjaGVkID0gZmFsc2U7XG4gICAgfVxuICAgIGJlZm9yZVVwZGF0ZSgpIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZVVwZGF0ZSwgW1xuICAgICAgICAgICAgdGhpc1xuICAgICAgICBdKTtcbiAgICB9XG4gdXBkYXRlKG1heFdpZHRoLCBtYXhIZWlnaHQsIG1hcmdpbnMpIHtcbiAgICAgICAgY29uc3QgeyBiZWdpbkF0WmVybyAsIGdyYWNlICwgdGlja3M6IHRpY2tPcHRzICB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBzYW1wbGVTaXplID0gdGlja09wdHMuc2FtcGxlU2l6ZTtcbiAgICAgICAgdGhpcy5iZWZvcmVVcGRhdGUoKTtcbiAgICAgICAgdGhpcy5tYXhXaWR0aCA9IG1heFdpZHRoO1xuICAgICAgICB0aGlzLm1heEhlaWdodCA9IG1heEhlaWdodDtcbiAgICAgICAgdGhpcy5fbWFyZ2lucyA9IG1hcmdpbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgIGJvdHRvbTogMFxuICAgICAgICB9LCBtYXJnaW5zKTtcbiAgICAgICAgdGhpcy50aWNrcyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2xhYmVsU2l6ZXMgPSBudWxsO1xuICAgICAgICB0aGlzLl9ncmlkTGluZUl0ZW1zID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbGFiZWxJdGVtcyA9IG51bGw7XG4gICAgICAgIHRoaXMuYmVmb3JlU2V0RGltZW5zaW9ucygpO1xuICAgICAgICB0aGlzLnNldERpbWVuc2lvbnMoKTtcbiAgICAgICAgdGhpcy5hZnRlclNldERpbWVuc2lvbnMoKTtcbiAgICAgICAgdGhpcy5fbWF4TGVuZ3RoID0gdGhpcy5pc0hvcml6b250YWwoKSA/IHRoaXMud2lkdGggKyBtYXJnaW5zLmxlZnQgKyBtYXJnaW5zLnJpZ2h0IDogdGhpcy5oZWlnaHQgKyBtYXJnaW5zLnRvcCArIG1hcmdpbnMuYm90dG9tO1xuICAgICAgICBpZiAoIXRoaXMuX2RhdGFMaW1pdHNDYWNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYmVmb3JlRGF0YUxpbWl0cygpO1xuICAgICAgICAgICAgdGhpcy5kZXRlcm1pbmVEYXRhTGltaXRzKCk7XG4gICAgICAgICAgICB0aGlzLmFmdGVyRGF0YUxpbWl0cygpO1xuICAgICAgICAgICAgdGhpcy5fcmFuZ2UgPSBfYWRkR3JhY2UodGhpcywgZ3JhY2UsIGJlZ2luQXRaZXJvKTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFMaW1pdHNDYWNoZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmVmb3JlQnVpbGRUaWNrcygpO1xuICAgICAgICB0aGlzLnRpY2tzID0gdGhpcy5idWlsZFRpY2tzKCkgfHwgW107XG4gICAgICAgIHRoaXMuYWZ0ZXJCdWlsZFRpY2tzKCk7XG4gICAgICAgIGNvbnN0IHNhbXBsaW5nRW5hYmxlZCA9IHNhbXBsZVNpemUgPCB0aGlzLnRpY2tzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5fY29udmVydFRpY2tzVG9MYWJlbHMoc2FtcGxpbmdFbmFibGVkID8gc2FtcGxlKHRoaXMudGlja3MsIHNhbXBsZVNpemUpIDogdGhpcy50aWNrcyk7XG4gICAgICAgIHRoaXMuY29uZmlndXJlKCk7XG4gICAgICAgIHRoaXMuYmVmb3JlQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKTtcbiAgICAgICAgdGhpcy5hZnRlckNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKTtcbiAgICAgICAgaWYgKHRpY2tPcHRzLmRpc3BsYXkgJiYgKHRpY2tPcHRzLmF1dG9Ta2lwIHx8IHRpY2tPcHRzLnNvdXJjZSA9PT0gJ2F1dG8nKSkge1xuICAgICAgICAgICAgdGhpcy50aWNrcyA9IGF1dG9Ta2lwKHRoaXMsIHRoaXMudGlja3MpO1xuICAgICAgICAgICAgdGhpcy5fbGFiZWxTaXplcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmFmdGVyQXV0b1NraXAoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2FtcGxpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9jb252ZXJ0VGlja3NUb0xhYmVscyh0aGlzLnRpY2tzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJlZm9yZUZpdCgpO1xuICAgICAgICB0aGlzLmZpdCgpO1xuICAgICAgICB0aGlzLmFmdGVyRml0KCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJVcGRhdGUoKTtcbiAgICB9XG4gY29uZmlndXJlKCkge1xuICAgICAgICBsZXQgcmV2ZXJzZVBpeGVscyA9IHRoaXMub3B0aW9ucy5yZXZlcnNlO1xuICAgICAgICBsZXQgc3RhcnRQaXhlbCwgZW5kUGl4ZWw7XG4gICAgICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgICBzdGFydFBpeGVsID0gdGhpcy5sZWZ0O1xuICAgICAgICAgICAgZW5kUGl4ZWwgPSB0aGlzLnJpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhcnRQaXhlbCA9IHRoaXMudG9wO1xuICAgICAgICAgICAgZW5kUGl4ZWwgPSB0aGlzLmJvdHRvbTtcbiAgICAgICAgICAgIHJldmVyc2VQaXhlbHMgPSAhcmV2ZXJzZVBpeGVscztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zdGFydFBpeGVsID0gc3RhcnRQaXhlbDtcbiAgICAgICAgdGhpcy5fZW5kUGl4ZWwgPSBlbmRQaXhlbDtcbiAgICAgICAgdGhpcy5fcmV2ZXJzZVBpeGVscyA9IHJldmVyc2VQaXhlbHM7XG4gICAgICAgIHRoaXMuX2xlbmd0aCA9IGVuZFBpeGVsIC0gc3RhcnRQaXhlbDtcbiAgICAgICAgdGhpcy5fYWxpZ25Ub1BpeGVscyA9IHRoaXMub3B0aW9ucy5hbGlnblRvUGl4ZWxzO1xuICAgIH1cbiAgICBhZnRlclVwZGF0ZSgpIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5vcHRpb25zLmFmdGVyVXBkYXRlLCBbXG4gICAgICAgICAgICB0aGlzXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBiZWZvcmVTZXREaW1lbnNpb25zKCkge1xuICAgICAgICBjYWxsYmFjayh0aGlzLm9wdGlvbnMuYmVmb3JlU2V0RGltZW5zaW9ucywgW1xuICAgICAgICAgICAgdGhpc1xuICAgICAgICBdKTtcbiAgICB9XG4gICAgc2V0RGltZW5zaW9ucygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLm1heFdpZHRoO1xuICAgICAgICAgICAgdGhpcy5sZWZ0ID0gMDtcbiAgICAgICAgICAgIHRoaXMucmlnaHQgPSB0aGlzLndpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLm1heEhlaWdodDtcbiAgICAgICAgICAgIHRoaXMudG9wID0gMDtcbiAgICAgICAgICAgIHRoaXMuYm90dG9tID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYWRkaW5nTGVmdCA9IDA7XG4gICAgICAgIHRoaXMucGFkZGluZ1RvcCA9IDA7XG4gICAgICAgIHRoaXMucGFkZGluZ1JpZ2h0ID0gMDtcbiAgICAgICAgdGhpcy5wYWRkaW5nQm90dG9tID0gMDtcbiAgICB9XG4gICAgYWZ0ZXJTZXREaW1lbnNpb25zKCkge1xuICAgICAgICBjYWxsYmFjayh0aGlzLm9wdGlvbnMuYWZ0ZXJTZXREaW1lbnNpb25zLCBbXG4gICAgICAgICAgICB0aGlzXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBfY2FsbEhvb2tzKG5hbWUpIHtcbiAgICAgICAgdGhpcy5jaGFydC5ub3RpZnlQbHVnaW5zKG5hbWUsIHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5vcHRpb25zW25hbWVdLCBbXG4gICAgICAgICAgICB0aGlzXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBiZWZvcmVEYXRhTGltaXRzKCkge1xuICAgICAgICB0aGlzLl9jYWxsSG9va3MoJ2JlZm9yZURhdGFMaW1pdHMnKTtcbiAgICB9XG4gICAgZGV0ZXJtaW5lRGF0YUxpbWl0cygpIHt9XG4gICAgYWZ0ZXJEYXRhTGltaXRzKCkge1xuICAgICAgICB0aGlzLl9jYWxsSG9va3MoJ2FmdGVyRGF0YUxpbWl0cycpO1xuICAgIH1cbiAgICBiZWZvcmVCdWlsZFRpY2tzKCkge1xuICAgICAgICB0aGlzLl9jYWxsSG9va3MoJ2JlZm9yZUJ1aWxkVGlja3MnKTtcbiAgICB9XG4gYnVpbGRUaWNrcygpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBhZnRlckJ1aWxkVGlja3MoKSB7XG4gICAgICAgIHRoaXMuX2NhbGxIb29rcygnYWZ0ZXJCdWlsZFRpY2tzJyk7XG4gICAgfVxuICAgIGJlZm9yZVRpY2tUb0xhYmVsQ29udmVyc2lvbigpIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZVRpY2tUb0xhYmVsQ29udmVyc2lvbiwgW1xuICAgICAgICAgICAgdGhpc1xuICAgICAgICBdKTtcbiAgICB9XG4gZ2VuZXJhdGVUaWNrTGFiZWxzKHRpY2tzKSB7XG4gICAgICAgIGNvbnN0IHRpY2tPcHRzID0gdGhpcy5vcHRpb25zLnRpY2tzO1xuICAgICAgICBsZXQgaSwgaWxlbiwgdGljaztcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gdGlja3MubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKXtcbiAgICAgICAgICAgIHRpY2sgPSB0aWNrc1tpXTtcbiAgICAgICAgICAgIHRpY2subGFiZWwgPSBjYWxsYmFjayh0aWNrT3B0cy5jYWxsYmFjaywgW1xuICAgICAgICAgICAgICAgIHRpY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICB0aWNrc1xuICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb24oKSB7XG4gICAgICAgIGNhbGxiYWNrKHRoaXMub3B0aW9ucy5hZnRlclRpY2tUb0xhYmVsQ29udmVyc2lvbiwgW1xuICAgICAgICAgICAgdGhpc1xuICAgICAgICBdKTtcbiAgICB9XG4gICAgYmVmb3JlQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZUNhbGN1bGF0ZUxhYmVsUm90YXRpb24sIFtcbiAgICAgICAgICAgIHRoaXNcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHRpY2tPcHRzID0gb3B0aW9ucy50aWNrcztcbiAgICAgICAgY29uc3QgbnVtVGlja3MgPSBnZXRUaWNrc0xpbWl0KHRoaXMudGlja3MubGVuZ3RoLCBvcHRpb25zLnRpY2tzLm1heFRpY2tzTGltaXQpO1xuICAgICAgICBjb25zdCBtaW5Sb3RhdGlvbiA9IHRpY2tPcHRzLm1pblJvdGF0aW9uIHx8IDA7XG4gICAgICAgIGNvbnN0IG1heFJvdGF0aW9uID0gdGlja09wdHMubWF4Um90YXRpb247XG4gICAgICAgIGxldCBsYWJlbFJvdGF0aW9uID0gbWluUm90YXRpb247XG4gICAgICAgIGxldCB0aWNrV2lkdGgsIG1heEhlaWdodCwgbWF4TGFiZWxEaWFnb25hbDtcbiAgICAgICAgaWYgKCF0aGlzLl9pc1Zpc2libGUoKSB8fCAhdGlja09wdHMuZGlzcGxheSB8fCBtaW5Sb3RhdGlvbiA+PSBtYXhSb3RhdGlvbiB8fCBudW1UaWNrcyA8PSAxIHx8ICF0aGlzLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgICB0aGlzLmxhYmVsUm90YXRpb24gPSBtaW5Sb3RhdGlvbjtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYWJlbFNpemVzID0gdGhpcy5fZ2V0TGFiZWxTaXplcygpO1xuICAgICAgICBjb25zdCBtYXhMYWJlbFdpZHRoID0gbGFiZWxTaXplcy53aWRlc3Qud2lkdGg7XG4gICAgICAgIGNvbnN0IG1heExhYmVsSGVpZ2h0ID0gbGFiZWxTaXplcy5oaWdoZXN0LmhlaWdodDtcbiAgICAgICAgY29uc3QgbWF4V2lkdGggPSBfbGltaXRWYWx1ZSh0aGlzLmNoYXJ0LndpZHRoIC0gbWF4TGFiZWxXaWR0aCwgMCwgdGhpcy5tYXhXaWR0aCk7XG4gICAgICAgIHRpY2tXaWR0aCA9IG9wdGlvbnMub2Zmc2V0ID8gdGhpcy5tYXhXaWR0aCAvIG51bVRpY2tzIDogbWF4V2lkdGggLyAobnVtVGlja3MgLSAxKTtcbiAgICAgICAgaWYgKG1heExhYmVsV2lkdGggKyA2ID4gdGlja1dpZHRoKSB7XG4gICAgICAgICAgICB0aWNrV2lkdGggPSBtYXhXaWR0aCAvIChudW1UaWNrcyAtIChvcHRpb25zLm9mZnNldCA/IDAuNSA6IDEpKTtcbiAgICAgICAgICAgIG1heEhlaWdodCA9IHRoaXMubWF4SGVpZ2h0IC0gZ2V0VGlja01hcmtMZW5ndGgob3B0aW9ucy5ncmlkKSAtIHRpY2tPcHRzLnBhZGRpbmcgLSBnZXRUaXRsZUhlaWdodChvcHRpb25zLnRpdGxlLCB0aGlzLmNoYXJ0Lm9wdGlvbnMuZm9udCk7XG4gICAgICAgICAgICBtYXhMYWJlbERpYWdvbmFsID0gTWF0aC5zcXJ0KG1heExhYmVsV2lkdGggKiBtYXhMYWJlbFdpZHRoICsgbWF4TGFiZWxIZWlnaHQgKiBtYXhMYWJlbEhlaWdodCk7XG4gICAgICAgICAgICBsYWJlbFJvdGF0aW9uID0gdG9EZWdyZWVzKE1hdGgubWluKE1hdGguYXNpbihfbGltaXRWYWx1ZSgobGFiZWxTaXplcy5oaWdoZXN0LmhlaWdodCArIDYpIC8gdGlja1dpZHRoLCAtMSwgMSkpLCBNYXRoLmFzaW4oX2xpbWl0VmFsdWUobWF4SGVpZ2h0IC8gbWF4TGFiZWxEaWFnb25hbCwgLTEsIDEpKSAtIE1hdGguYXNpbihfbGltaXRWYWx1ZShtYXhMYWJlbEhlaWdodCAvIG1heExhYmVsRGlhZ29uYWwsIC0xLCAxKSkpKTtcbiAgICAgICAgICAgIGxhYmVsUm90YXRpb24gPSBNYXRoLm1heChtaW5Sb3RhdGlvbiwgTWF0aC5taW4obWF4Um90YXRpb24sIGxhYmVsUm90YXRpb24pKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxhYmVsUm90YXRpb24gPSBsYWJlbFJvdGF0aW9uO1xuICAgIH1cbiAgICBhZnRlckNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKSB7XG4gICAgICAgIGNhbGxiYWNrKHRoaXMub3B0aW9ucy5hZnRlckNhbGN1bGF0ZUxhYmVsUm90YXRpb24sIFtcbiAgICAgICAgICAgIHRoaXNcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGFmdGVyQXV0b1NraXAoKSB7fVxuICAgIGJlZm9yZUZpdCgpIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZUZpdCwgW1xuICAgICAgICAgICAgdGhpc1xuICAgICAgICBdKTtcbiAgICB9XG4gICAgZml0KCkge1xuICAgICAgICBjb25zdCBtaW5TaXplID0ge1xuICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICBoZWlnaHQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyBjaGFydCAsIG9wdGlvbnM6IHsgdGlja3M6IHRpY2tPcHRzICwgdGl0bGU6IHRpdGxlT3B0cyAsIGdyaWQ6IGdyaWRPcHRzICB9ICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgZGlzcGxheSA9IHRoaXMuX2lzVmlzaWJsZSgpO1xuICAgICAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLmlzSG9yaXpvbnRhbCgpO1xuICAgICAgICBpZiAoZGlzcGxheSkge1xuICAgICAgICAgICAgY29uc3QgdGl0bGVIZWlnaHQgPSBnZXRUaXRsZUhlaWdodCh0aXRsZU9wdHMsIGNoYXJ0Lm9wdGlvbnMuZm9udCk7XG4gICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgbWluU2l6ZS53aWR0aCA9IHRoaXMubWF4V2lkdGg7XG4gICAgICAgICAgICAgICAgbWluU2l6ZS5oZWlnaHQgPSBnZXRUaWNrTWFya0xlbmd0aChncmlkT3B0cykgKyB0aXRsZUhlaWdodDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWluU2l6ZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodDtcbiAgICAgICAgICAgICAgICBtaW5TaXplLndpZHRoID0gZ2V0VGlja01hcmtMZW5ndGgoZ3JpZE9wdHMpICsgdGl0bGVIZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGlja09wdHMuZGlzcGxheSAmJiB0aGlzLnRpY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZmlyc3QgLCBsYXN0ICwgd2lkZXN0ICwgaGlnaGVzdCAgfSA9IHRoaXMuX2dldExhYmVsU2l6ZXMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWNrUGFkZGluZyA9IHRpY2tPcHRzLnBhZGRpbmcgKiAyO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFuZ2xlUmFkaWFucyA9IHRvUmFkaWFucyh0aGlzLmxhYmVsUm90YXRpb24pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvcyA9IE1hdGguY29zKGFuZ2xlUmFkaWFucyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2luID0gTWF0aC5zaW4oYW5nbGVSYWRpYW5zKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsSGVpZ2h0ID0gdGlja09wdHMubWlycm9yID8gMCA6IHNpbiAqIHdpZGVzdC53aWR0aCArIGNvcyAqIGhpZ2hlc3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBtaW5TaXplLmhlaWdodCA9IE1hdGgubWluKHRoaXMubWF4SGVpZ2h0LCBtaW5TaXplLmhlaWdodCArIGxhYmVsSGVpZ2h0ICsgdGlja1BhZGRpbmcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsV2lkdGggPSB0aWNrT3B0cy5taXJyb3IgPyAwIDogY29zICogd2lkZXN0LndpZHRoICsgc2luICogaGlnaGVzdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIG1pblNpemUud2lkdGggPSBNYXRoLm1pbih0aGlzLm1heFdpZHRoLCBtaW5TaXplLndpZHRoICsgbGFiZWxXaWR0aCArIHRpY2tQYWRkaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlUGFkZGluZyhmaXJzdCwgbGFzdCwgc2luLCBjb3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2hhbmRsZU1hcmdpbnMoKTtcbiAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuX2xlbmd0aCA9IGNoYXJ0LndpZHRoIC0gdGhpcy5fbWFyZ2lucy5sZWZ0IC0gdGhpcy5fbWFyZ2lucy5yaWdodDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gbWluU2l6ZS5oZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndpZHRoID0gbWluU2l6ZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5fbGVuZ3RoID0gY2hhcnQuaGVpZ2h0IC0gdGhpcy5fbWFyZ2lucy50b3AgLSB0aGlzLl9tYXJnaW5zLmJvdHRvbTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfY2FsY3VsYXRlUGFkZGluZyhmaXJzdCwgbGFzdCwgc2luLCBjb3MpIHtcbiAgICAgICAgY29uc3QgeyB0aWNrczogeyBhbGlnbiAsIHBhZGRpbmcgIH0gLCBwb3NpdGlvbiAgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgaXNSb3RhdGVkID0gdGhpcy5sYWJlbFJvdGF0aW9uICE9PSAwO1xuICAgICAgICBjb25zdCBsYWJlbHNCZWxvd1RpY2tzID0gcG9zaXRpb24gIT09ICd0b3AnICYmIHRoaXMuYXhpcyA9PT0gJ3gnO1xuICAgICAgICBpZiAodGhpcy5pc0hvcml6b250YWwoKSkge1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0TGVmdCA9IHRoaXMuZ2V0UGl4ZWxGb3JUaWNrKDApIC0gdGhpcy5sZWZ0O1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0UmlnaHQgPSB0aGlzLnJpZ2h0IC0gdGhpcy5nZXRQaXhlbEZvclRpY2sodGhpcy50aWNrcy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIGxldCBwYWRkaW5nTGVmdCA9IDA7XG4gICAgICAgICAgICBsZXQgcGFkZGluZ1JpZ2h0ID0gMDtcbiAgICAgICAgICAgIGlmIChpc1JvdGF0ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAobGFiZWxzQmVsb3dUaWNrcykge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdCA9IGNvcyAqIGZpcnN0LndpZHRoO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQgPSBzaW4gKiBsYXN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdCA9IHNpbiAqIGZpcnN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZ1JpZ2h0ID0gY29zICogbGFzdC53aWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFsaWduID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ1JpZ2h0ID0gbGFzdC53aWR0aDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxpZ24gPT09ICdlbmQnKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQgPSBmaXJzdC53aWR0aDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxpZ24gIT09ICdpbm5lcicpIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdCA9IGZpcnN0LndpZHRoIC8gMjtcbiAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQgPSBsYXN0LndpZHRoIC8gMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFkZGluZ0xlZnQgPSBNYXRoLm1heCgocGFkZGluZ0xlZnQgLSBvZmZzZXRMZWZ0ICsgcGFkZGluZykgKiB0aGlzLndpZHRoIC8gKHRoaXMud2lkdGggLSBvZmZzZXRMZWZ0KSwgMCk7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmdSaWdodCA9IE1hdGgubWF4KChwYWRkaW5nUmlnaHQgLSBvZmZzZXRSaWdodCArIHBhZGRpbmcpICogdGhpcy53aWR0aCAvICh0aGlzLndpZHRoIC0gb2Zmc2V0UmlnaHQpLCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBwYWRkaW5nVG9wID0gbGFzdC5oZWlnaHQgLyAyO1xuICAgICAgICAgICAgbGV0IHBhZGRpbmdCb3R0b20gPSBmaXJzdC5oZWlnaHQgLyAyO1xuICAgICAgICAgICAgaWYgKGFsaWduID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ1RvcCA9IDA7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0JvdHRvbSA9IGZpcnN0LmhlaWdodDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxpZ24gPT09ICdlbmQnKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ1RvcCA9IGxhc3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHBhZGRpbmdCb3R0b20gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYWRkaW5nVG9wID0gcGFkZGluZ1RvcCArIHBhZGRpbmc7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmdCb3R0b20gPSBwYWRkaW5nQm90dG9tICsgcGFkZGluZztcbiAgICAgICAgfVxuICAgIH1cbiBfaGFuZGxlTWFyZ2lucygpIHtcbiAgICAgICAgaWYgKHRoaXMuX21hcmdpbnMpIHtcbiAgICAgICAgICAgIHRoaXMuX21hcmdpbnMubGVmdCA9IE1hdGgubWF4KHRoaXMucGFkZGluZ0xlZnQsIHRoaXMuX21hcmdpbnMubGVmdCk7XG4gICAgICAgICAgICB0aGlzLl9tYXJnaW5zLnRvcCA9IE1hdGgubWF4KHRoaXMucGFkZGluZ1RvcCwgdGhpcy5fbWFyZ2lucy50b3ApO1xuICAgICAgICAgICAgdGhpcy5fbWFyZ2lucy5yaWdodCA9IE1hdGgubWF4KHRoaXMucGFkZGluZ1JpZ2h0LCB0aGlzLl9tYXJnaW5zLnJpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuX21hcmdpbnMuYm90dG9tID0gTWF0aC5tYXgodGhpcy5wYWRkaW5nQm90dG9tLCB0aGlzLl9tYXJnaW5zLmJvdHRvbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWZ0ZXJGaXQoKSB7XG4gICAgICAgIGNhbGxiYWNrKHRoaXMub3B0aW9ucy5hZnRlckZpdCwgW1xuICAgICAgICAgICAgdGhpc1xuICAgICAgICBdKTtcbiAgICB9XG4gaXNIb3Jpem9udGFsKCkge1xuICAgICAgICBjb25zdCB7IGF4aXMgLCBwb3NpdGlvbiAgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbScgfHwgYXhpcyA9PT0gJ3gnO1xuICAgIH1cbiBpc0Z1bGxTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZ1bGxTaXplO1xuICAgIH1cbiBfY29udmVydFRpY2tzVG9MYWJlbHModGlja3MpIHtcbiAgICAgICAgdGhpcy5iZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24oKTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVRpY2tMYWJlbHModGlja3MpO1xuICAgICAgICBsZXQgaSwgaWxlbjtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gdGlja3MubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKXtcbiAgICAgICAgICAgIGlmIChpc051bGxPclVuZGVmKHRpY2tzW2ldLmxhYmVsKSkge1xuICAgICAgICAgICAgICAgIHRpY2tzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICBpbGVuLS07XG4gICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb24oKTtcbiAgICB9XG4gX2dldExhYmVsU2l6ZXMoKSB7XG4gICAgICAgIGxldCBsYWJlbFNpemVzID0gdGhpcy5fbGFiZWxTaXplcztcbiAgICAgICAgaWYgKCFsYWJlbFNpemVzKSB7XG4gICAgICAgICAgICBjb25zdCBzYW1wbGVTaXplID0gdGhpcy5vcHRpb25zLnRpY2tzLnNhbXBsZVNpemU7XG4gICAgICAgICAgICBsZXQgdGlja3MgPSB0aGlzLnRpY2tzO1xuICAgICAgICAgICAgaWYgKHNhbXBsZVNpemUgPCB0aWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aWNrcyA9IHNhbXBsZSh0aWNrcywgc2FtcGxlU2l6ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9sYWJlbFNpemVzID0gbGFiZWxTaXplcyA9IHRoaXMuX2NvbXB1dGVMYWJlbFNpemVzKHRpY2tzLCB0aWNrcy5sZW5ndGgsIHRoaXMub3B0aW9ucy50aWNrcy5tYXhUaWNrc0xpbWl0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFiZWxTaXplcztcbiAgICB9XG4gX2NvbXB1dGVMYWJlbFNpemVzKHRpY2tzLCBsZW5ndGgsIG1heFRpY2tzTGltaXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggLCBfbG9uZ2VzdFRleHRDYWNoZTogY2FjaGVzICB9ID0gdGhpcztcbiAgICAgICAgY29uc3Qgd2lkdGhzID0gW107XG4gICAgICAgIGNvbnN0IGhlaWdodHMgPSBbXTtcbiAgICAgICAgY29uc3QgaW5jcmVtZW50ID0gTWF0aC5mbG9vcihsZW5ndGggLyBnZXRUaWNrc0xpbWl0KGxlbmd0aCwgbWF4VGlja3NMaW1pdCkpO1xuICAgICAgICBsZXQgd2lkZXN0TGFiZWxTaXplID0gMDtcbiAgICAgICAgbGV0IGhpZ2hlc3RMYWJlbFNpemUgPSAwO1xuICAgICAgICBsZXQgaSwgaiwgamxlbiwgbGFiZWwsIHRpY2tGb250LCBmb250U3RyaW5nLCBjYWNoZSwgbGluZUhlaWdodCwgd2lkdGgsIGhlaWdodCwgbmVzdGVkTGFiZWw7XG4gICAgICAgIGZvcihpID0gMDsgaSA8IGxlbmd0aDsgaSArPSBpbmNyZW1lbnQpe1xuICAgICAgICAgICAgbGFiZWwgPSB0aWNrc1tpXS5sYWJlbDtcbiAgICAgICAgICAgIHRpY2tGb250ID0gdGhpcy5fcmVzb2x2ZVRpY2tGb250T3B0aW9ucyhpKTtcbiAgICAgICAgICAgIGN0eC5mb250ID0gZm9udFN0cmluZyA9IHRpY2tGb250LnN0cmluZztcbiAgICAgICAgICAgIGNhY2hlID0gY2FjaGVzW2ZvbnRTdHJpbmddID0gY2FjaGVzW2ZvbnRTdHJpbmddIHx8IHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICAgICAgICBnYzogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gdGlja0ZvbnQubGluZUhlaWdodDtcbiAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIGlmICghaXNOdWxsT3JVbmRlZihsYWJlbCkgJiYgIWlzQXJyYXkobGFiZWwpKSB7XG4gICAgICAgICAgICAgICAgd2lkdGggPSBfbWVhc3VyZVRleHQoY3R4LCBjYWNoZS5kYXRhLCBjYWNoZS5nYywgd2lkdGgsIGxhYmVsKTtcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBsaW5lSGVpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGxhYmVsKSkge1xuICAgICAgICAgICAgICAgIGZvcihqID0gMCwgamxlbiA9IGxhYmVsLmxlbmd0aDsgaiA8IGpsZW47ICsrail7XG4gICAgICAgICAgICAgICAgICAgIG5lc3RlZExhYmVsID0gIGxhYmVsW2pdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYobmVzdGVkTGFiZWwpICYmICFpc0FycmF5KG5lc3RlZExhYmVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBfbWVhc3VyZVRleHQoY3R4LCBjYWNoZS5kYXRhLCBjYWNoZS5nYywgd2lkdGgsIG5lc3RlZExhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCArPSBsaW5lSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2lkdGhzLnB1c2god2lkdGgpO1xuICAgICAgICAgICAgaGVpZ2h0cy5wdXNoKGhlaWdodCk7XG4gICAgICAgICAgICB3aWRlc3RMYWJlbFNpemUgPSBNYXRoLm1heCh3aWR0aCwgd2lkZXN0TGFiZWxTaXplKTtcbiAgICAgICAgICAgIGhpZ2hlc3RMYWJlbFNpemUgPSBNYXRoLm1heChoZWlnaHQsIGhpZ2hlc3RMYWJlbFNpemUpO1xuICAgICAgICB9XG4gICAgICAgIGdhcmJhZ2VDb2xsZWN0KGNhY2hlcywgbGVuZ3RoKTtcbiAgICAgICAgY29uc3Qgd2lkZXN0ID0gd2lkdGhzLmluZGV4T2Yod2lkZXN0TGFiZWxTaXplKTtcbiAgICAgICAgY29uc3QgaGlnaGVzdCA9IGhlaWdodHMuaW5kZXhPZihoaWdoZXN0TGFiZWxTaXplKTtcbiAgICAgICAgY29uc3QgdmFsdWVBdCA9IChpZHgpPT4oe1xuICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aHNbaWR4XSB8fCAwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0c1tpZHhdIHx8IDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmlyc3Q6IHZhbHVlQXQoMCksXG4gICAgICAgICAgICBsYXN0OiB2YWx1ZUF0KGxlbmd0aCAtIDEpLFxuICAgICAgICAgICAgd2lkZXN0OiB2YWx1ZUF0KHdpZGVzdCksXG4gICAgICAgICAgICBoaWdoZXN0OiB2YWx1ZUF0KGhpZ2hlc3QpLFxuICAgICAgICAgICAgd2lkdGhzLFxuICAgICAgICAgICAgaGVpZ2h0c1xuICAgICAgICB9O1xuICAgIH1cbiBnZXRMYWJlbEZvclZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gZ2V0VmFsdWVGb3JQaXhlbChwaXhlbCkge31cbiBnZXRQaXhlbEZvclRpY2soaW5kZXgpIHtcbiAgICAgICAgY29uc3QgdGlja3MgPSB0aGlzLnRpY2tzO1xuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gdGlja3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0aWNrc1tpbmRleF0udmFsdWUpO1xuICAgIH1cbiBnZXRQaXhlbEZvckRlY2ltYWwoZGVjaW1hbCkge1xuICAgICAgICBpZiAodGhpcy5fcmV2ZXJzZVBpeGVscykge1xuICAgICAgICAgICAgZGVjaW1hbCA9IDEgLSBkZWNpbWFsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBpeGVsID0gdGhpcy5fc3RhcnRQaXhlbCArIGRlY2ltYWwgKiB0aGlzLl9sZW5ndGg7XG4gICAgICAgIHJldHVybiBfaW50MTZSYW5nZSh0aGlzLl9hbGlnblRvUGl4ZWxzID8gX2FsaWduUGl4ZWwodGhpcy5jaGFydCwgcGl4ZWwsIDApIDogcGl4ZWwpO1xuICAgIH1cbiBnZXREZWNpbWFsRm9yUGl4ZWwocGl4ZWwpIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbCA9IChwaXhlbCAtIHRoaXMuX3N0YXJ0UGl4ZWwpIC8gdGhpcy5fbGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmV2ZXJzZVBpeGVscyA/IDEgLSBkZWNpbWFsIDogZGVjaW1hbDtcbiAgICB9XG4gZ2V0QmFzZVBpeGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQaXhlbEZvclZhbHVlKHRoaXMuZ2V0QmFzZVZhbHVlKCkpO1xuICAgIH1cbiBnZXRCYXNlVmFsdWUoKSB7XG4gICAgICAgIGNvbnN0IHsgbWluICwgbWF4ICB9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG1pbiA8IDAgJiYgbWF4IDwgMCA/IG1heCA6IG1pbiA+IDAgJiYgbWF4ID4gMCA/IG1pbiA6IDA7XG4gICAgfVxuIGdldENvbnRleHQoaW5kZXgpIHtcbiAgICAgICAgY29uc3QgdGlja3MgPSB0aGlzLnRpY2tzIHx8IFtdO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRpY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgdGljayA9IHRpY2tzW2luZGV4XTtcbiAgICAgICAgICAgIHJldHVybiB0aWNrLiRjb250ZXh0IHx8ICh0aWNrLiRjb250ZXh0ID0gY3JlYXRlVGlja0NvbnRleHQodGhpcy5nZXRDb250ZXh0KCksIGluZGV4LCB0aWNrKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuJGNvbnRleHQgfHwgKHRoaXMuJGNvbnRleHQgPSBjcmVhdGVTY2FsZUNvbnRleHQodGhpcy5jaGFydC5nZXRDb250ZXh0KCksIHRoaXMpKTtcbiAgICB9XG4gX3RpY2tTaXplKCkge1xuICAgICAgICBjb25zdCBvcHRpb25UaWNrcyA9IHRoaXMub3B0aW9ucy50aWNrcztcbiAgICAgICAgY29uc3Qgcm90ID0gdG9SYWRpYW5zKHRoaXMubGFiZWxSb3RhdGlvbik7XG4gICAgICAgIGNvbnN0IGNvcyA9IE1hdGguYWJzKE1hdGguY29zKHJvdCkpO1xuICAgICAgICBjb25zdCBzaW4gPSBNYXRoLmFicyhNYXRoLnNpbihyb3QpKTtcbiAgICAgICAgY29uc3QgbGFiZWxTaXplcyA9IHRoaXMuX2dldExhYmVsU2l6ZXMoKTtcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IG9wdGlvblRpY2tzLmF1dG9Ta2lwUGFkZGluZyB8fCAwO1xuICAgICAgICBjb25zdCB3ID0gbGFiZWxTaXplcyA/IGxhYmVsU2l6ZXMud2lkZXN0LndpZHRoICsgcGFkZGluZyA6IDA7XG4gICAgICAgIGNvbnN0IGggPSBsYWJlbFNpemVzID8gbGFiZWxTaXplcy5oaWdoZXN0LmhlaWdodCArIHBhZGRpbmcgOiAwO1xuICAgICAgICByZXR1cm4gdGhpcy5pc0hvcml6b250YWwoKSA/IGggKiBjb3MgPiB3ICogc2luID8gdyAvIGNvcyA6IGggLyBzaW4gOiBoICogc2luIDwgdyAqIGNvcyA/IGggLyBjb3MgOiB3IC8gc2luO1xuICAgIH1cbiBfaXNWaXNpYmxlKCkge1xuICAgICAgICBjb25zdCBkaXNwbGF5ID0gdGhpcy5vcHRpb25zLmRpc3BsYXk7XG4gICAgICAgIGlmIChkaXNwbGF5ICE9PSAnYXV0bycpIHtcbiAgICAgICAgICAgIHJldHVybiAhIWRpc3BsYXk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMoKS5sZW5ndGggPiAwO1xuICAgIH1cbiBfY29tcHV0ZUdyaWRMaW5lSXRlbXMoY2hhcnRBcmVhKSB7XG4gICAgICAgIGNvbnN0IGF4aXMgPSB0aGlzLmF4aXM7XG4gICAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgeyBncmlkICwgcG9zaXRpb24gLCBib3JkZXIgIH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBncmlkLm9mZnNldDtcbiAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gdGhpcy5pc0hvcml6b250YWwoKTtcbiAgICAgICAgY29uc3QgdGlja3MgPSB0aGlzLnRpY2tzO1xuICAgICAgICBjb25zdCB0aWNrc0xlbmd0aCA9IHRpY2tzLmxlbmd0aCArIChvZmZzZXQgPyAxIDogMCk7XG4gICAgICAgIGNvbnN0IHRsID0gZ2V0VGlja01hcmtMZW5ndGgoZ3JpZCk7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGNvbnN0IGJvcmRlck9wdHMgPSBib3JkZXIuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoKSk7XG4gICAgICAgIGNvbnN0IGF4aXNXaWR0aCA9IGJvcmRlck9wdHMuZGlzcGxheSA/IGJvcmRlck9wdHMud2lkdGggOiAwO1xuICAgICAgICBjb25zdCBheGlzSGFsZldpZHRoID0gYXhpc1dpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgYWxpZ25Cb3JkZXJWYWx1ZSA9IGZ1bmN0aW9uKHBpeGVsKSB7XG4gICAgICAgICAgICByZXR1cm4gX2FsaWduUGl4ZWwoY2hhcnQsIHBpeGVsLCBheGlzV2lkdGgpO1xuICAgICAgICB9O1xuICAgICAgICBsZXQgYm9yZGVyVmFsdWUsIGksIGxpbmVWYWx1ZSwgYWxpZ25lZExpbmVWYWx1ZTtcbiAgICAgICAgbGV0IHR4MSwgdHkxLCB0eDIsIHR5MiwgeDEsIHkxLCB4MiwgeTI7XG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgIGJvcmRlclZhbHVlID0gYWxpZ25Cb3JkZXJWYWx1ZSh0aGlzLmJvdHRvbSk7XG4gICAgICAgICAgICB0eTEgPSB0aGlzLmJvdHRvbSAtIHRsO1xuICAgICAgICAgICAgdHkyID0gYm9yZGVyVmFsdWUgLSBheGlzSGFsZldpZHRoO1xuICAgICAgICAgICAgeTEgPSBhbGlnbkJvcmRlclZhbHVlKGNoYXJ0QXJlYS50b3ApICsgYXhpc0hhbGZXaWR0aDtcbiAgICAgICAgICAgIHkyID0gY2hhcnRBcmVhLmJvdHRvbTtcbiAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgIGJvcmRlclZhbHVlID0gYWxpZ25Cb3JkZXJWYWx1ZSh0aGlzLnRvcCk7XG4gICAgICAgICAgICB5MSA9IGNoYXJ0QXJlYS50b3A7XG4gICAgICAgICAgICB5MiA9IGFsaWduQm9yZGVyVmFsdWUoY2hhcnRBcmVhLmJvdHRvbSkgLSBheGlzSGFsZldpZHRoO1xuICAgICAgICAgICAgdHkxID0gYm9yZGVyVmFsdWUgKyBheGlzSGFsZldpZHRoO1xuICAgICAgICAgICAgdHkyID0gdGhpcy50b3AgKyB0bDtcbiAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICBib3JkZXJWYWx1ZSA9IGFsaWduQm9yZGVyVmFsdWUodGhpcy5yaWdodCk7XG4gICAgICAgICAgICB0eDEgPSB0aGlzLnJpZ2h0IC0gdGw7XG4gICAgICAgICAgICB0eDIgPSBib3JkZXJWYWx1ZSAtIGF4aXNIYWxmV2lkdGg7XG4gICAgICAgICAgICB4MSA9IGFsaWduQm9yZGVyVmFsdWUoY2hhcnRBcmVhLmxlZnQpICsgYXhpc0hhbGZXaWR0aDtcbiAgICAgICAgICAgIHgyID0gY2hhcnRBcmVhLnJpZ2h0O1xuICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICBib3JkZXJWYWx1ZSA9IGFsaWduQm9yZGVyVmFsdWUodGhpcy5sZWZ0KTtcbiAgICAgICAgICAgIHgxID0gY2hhcnRBcmVhLmxlZnQ7XG4gICAgICAgICAgICB4MiA9IGFsaWduQm9yZGVyVmFsdWUoY2hhcnRBcmVhLnJpZ2h0KSAtIGF4aXNIYWxmV2lkdGg7XG4gICAgICAgICAgICB0eDEgPSBib3JkZXJWYWx1ZSArIGF4aXNIYWxmV2lkdGg7XG4gICAgICAgICAgICB0eDIgPSB0aGlzLmxlZnQgKyB0bDtcbiAgICAgICAgfSBlbHNlIGlmIChheGlzID09PSAneCcpIHtcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICBib3JkZXJWYWx1ZSA9IGFsaWduQm9yZGVyVmFsdWUoKGNoYXJ0QXJlYS50b3AgKyBjaGFydEFyZWEuYm90dG9tKSAvIDIgKyAwLjUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChwb3NpdGlvbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbkF4aXNJRCA9IE9iamVjdC5rZXlzKHBvc2l0aW9uKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBvc2l0aW9uW3Bvc2l0aW9uQXhpc0lEXTtcbiAgICAgICAgICAgICAgICBib3JkZXJWYWx1ZSA9IGFsaWduQm9yZGVyVmFsdWUodGhpcy5jaGFydC5zY2FsZXNbcG9zaXRpb25BeGlzSURdLmdldFBpeGVsRm9yVmFsdWUodmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHkxID0gY2hhcnRBcmVhLnRvcDtcbiAgICAgICAgICAgIHkyID0gY2hhcnRBcmVhLmJvdHRvbTtcbiAgICAgICAgICAgIHR5MSA9IGJvcmRlclZhbHVlICsgYXhpc0hhbGZXaWR0aDtcbiAgICAgICAgICAgIHR5MiA9IHR5MSArIHRsO1xuICAgICAgICB9IGVsc2UgaWYgKGF4aXMgPT09ICd5Jykge1xuICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgICAgIGJvcmRlclZhbHVlID0gYWxpZ25Cb3JkZXJWYWx1ZSgoY2hhcnRBcmVhLmxlZnQgKyBjaGFydEFyZWEucmlnaHQpIC8gMik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uQXhpc0lEID0gT2JqZWN0LmtleXMocG9zaXRpb24pWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcG9zaXRpb25bcG9zaXRpb25BeGlzSURdO1xuICAgICAgICAgICAgICAgIGJvcmRlclZhbHVlID0gYWxpZ25Cb3JkZXJWYWx1ZSh0aGlzLmNoYXJ0LnNjYWxlc1twb3NpdGlvbkF4aXNJRF0uZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHgxID0gYm9yZGVyVmFsdWUgLSBheGlzSGFsZldpZHRoO1xuICAgICAgICAgICAgdHgyID0gdHgxIC0gdGw7XG4gICAgICAgICAgICB4MSA9IGNoYXJ0QXJlYS5sZWZ0O1xuICAgICAgICAgICAgeDIgPSBjaGFydEFyZWEucmlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGltaXQgPSB2YWx1ZU9yRGVmYXVsdChvcHRpb25zLnRpY2tzLm1heFRpY2tzTGltaXQsIHRpY2tzTGVuZ3RoKTtcbiAgICAgICAgY29uc3Qgc3RlcCA9IE1hdGgubWF4KDEsIE1hdGguY2VpbCh0aWNrc0xlbmd0aCAvIGxpbWl0KSk7XG4gICAgICAgIGZvcihpID0gMDsgaSA8IHRpY2tzTGVuZ3RoOyBpICs9IHN0ZXApe1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dChpKTtcbiAgICAgICAgICAgIGNvbnN0IG9wdHNBdEluZGV4ID0gZ3JpZC5zZXRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgICAgICAgY29uc3Qgb3B0c0F0SW5kZXhCb3JkZXIgPSBib3JkZXIuc2V0Q29udGV4dChjb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVXaWR0aCA9IG9wdHNBdEluZGV4LmxpbmVXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVDb2xvciA9IG9wdHNBdEluZGV4LmNvbG9yO1xuICAgICAgICAgICAgY29uc3QgYm9yZGVyRGFzaCA9IG9wdHNBdEluZGV4Qm9yZGVyLmRhc2ggfHwgW107XG4gICAgICAgICAgICBjb25zdCBib3JkZXJEYXNoT2Zmc2V0ID0gb3B0c0F0SW5kZXhCb3JkZXIuZGFzaE9mZnNldDtcbiAgICAgICAgICAgIGNvbnN0IHRpY2tXaWR0aCA9IG9wdHNBdEluZGV4LnRpY2tXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHRpY2tDb2xvciA9IG9wdHNBdEluZGV4LnRpY2tDb2xvcjtcbiAgICAgICAgICAgIGNvbnN0IHRpY2tCb3JkZXJEYXNoID0gb3B0c0F0SW5kZXgudGlja0JvcmRlckRhc2ggfHwgW107XG4gICAgICAgICAgICBjb25zdCB0aWNrQm9yZGVyRGFzaE9mZnNldCA9IG9wdHNBdEluZGV4LnRpY2tCb3JkZXJEYXNoT2Zmc2V0O1xuICAgICAgICAgICAgbGluZVZhbHVlID0gZ2V0UGl4ZWxGb3JHcmlkTGluZSh0aGlzLCBpLCBvZmZzZXQpO1xuICAgICAgICAgICAgaWYgKGxpbmVWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbGlnbmVkTGluZVZhbHVlID0gX2FsaWduUGl4ZWwoY2hhcnQsIGxpbmVWYWx1ZSwgbGluZVdpZHRoKTtcbiAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAgICAgICB0eDEgPSB0eDIgPSB4MSA9IHgyID0gYWxpZ25lZExpbmVWYWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHkxID0gdHkyID0geTEgPSB5MiA9IGFsaWduZWRMaW5lVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eDEsXG4gICAgICAgICAgICAgICAgdHkxLFxuICAgICAgICAgICAgICAgIHR4MixcbiAgICAgICAgICAgICAgICB0eTIsXG4gICAgICAgICAgICAgICAgeDEsXG4gICAgICAgICAgICAgICAgeTEsXG4gICAgICAgICAgICAgICAgeDIsXG4gICAgICAgICAgICAgICAgeTIsXG4gICAgICAgICAgICAgICAgd2lkdGg6IGxpbmVXaWR0aCxcbiAgICAgICAgICAgICAgICBjb2xvcjogbGluZUNvbG9yLFxuICAgICAgICAgICAgICAgIGJvcmRlckRhc2gsXG4gICAgICAgICAgICAgICAgYm9yZGVyRGFzaE9mZnNldCxcbiAgICAgICAgICAgICAgICB0aWNrV2lkdGgsXG4gICAgICAgICAgICAgICAgdGlja0NvbG9yLFxuICAgICAgICAgICAgICAgIHRpY2tCb3JkZXJEYXNoLFxuICAgICAgICAgICAgICAgIHRpY2tCb3JkZXJEYXNoT2Zmc2V0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90aWNrc0xlbmd0aCA9IHRpY2tzTGVuZ3RoO1xuICAgICAgICB0aGlzLl9ib3JkZXJWYWx1ZSA9IGJvcmRlclZhbHVlO1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuIF9jb21wdXRlTGFiZWxJdGVtcyhjaGFydEFyZWEpIHtcbiAgICAgICAgY29uc3QgYXhpcyA9IHRoaXMuYXhpcztcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgeyBwb3NpdGlvbiAsIHRpY2tzOiBvcHRpb25UaWNrcyAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IHRoaXMuaXNIb3Jpem9udGFsKCk7XG4gICAgICAgIGNvbnN0IHRpY2tzID0gdGhpcy50aWNrcztcbiAgICAgICAgY29uc3QgeyBhbGlnbiAsIGNyb3NzQWxpZ24gLCBwYWRkaW5nICwgbWlycm9yICB9ID0gb3B0aW9uVGlja3M7XG4gICAgICAgIGNvbnN0IHRsID0gZ2V0VGlja01hcmtMZW5ndGgob3B0aW9ucy5ncmlkKTtcbiAgICAgICAgY29uc3QgdGlja0FuZFBhZGRpbmcgPSB0bCArIHBhZGRpbmc7XG4gICAgICAgIGNvbnN0IGhUaWNrQW5kUGFkZGluZyA9IG1pcnJvciA/IC1wYWRkaW5nIDogdGlja0FuZFBhZGRpbmc7XG4gICAgICAgIGNvbnN0IHJvdGF0aW9uID0gLXRvUmFkaWFucyh0aGlzLmxhYmVsUm90YXRpb24pO1xuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICBsZXQgaSwgaWxlbiwgdGljaywgbGFiZWwsIHgsIHksIHRleHRBbGlnbiwgcGl4ZWwsIGZvbnQsIGxpbmVIZWlnaHQsIGxpbmVDb3VudCwgdGV4dE9mZnNldDtcbiAgICAgICAgbGV0IHRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuICAgICAgICBpZiAocG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgICAgICB5ID0gdGhpcy5ib3R0b20gLSBoVGlja0FuZFBhZGRpbmc7XG4gICAgICAgICAgICB0ZXh0QWxpZ24gPSB0aGlzLl9nZXRYQXhpc0xhYmVsQWxpZ25tZW50KCk7XG4gICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgICB5ID0gdGhpcy50b3AgKyBoVGlja0FuZFBhZGRpbmc7XG4gICAgICAgICAgICB0ZXh0QWxpZ24gPSB0aGlzLl9nZXRYQXhpc0xhYmVsQWxpZ25tZW50KCk7XG4gICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gdGhpcy5fZ2V0WUF4aXNMYWJlbEFsaWdubWVudCh0bCk7XG4gICAgICAgICAgICB0ZXh0QWxpZ24gPSByZXQudGV4dEFsaWduO1xuICAgICAgICAgICAgeCA9IHJldC54O1xuICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICBjb25zdCByZXQgPSB0aGlzLl9nZXRZQXhpc0xhYmVsQWxpZ25tZW50KHRsKTtcbiAgICAgICAgICAgIHRleHRBbGlnbiA9IHJldC50ZXh0QWxpZ247XG4gICAgICAgICAgICB4ID0gcmV0Lng7XG4gICAgICAgIH0gZWxzZSBpZiAoYXhpcyA9PT0gJ3gnKSB7XG4gICAgICAgICAgICBpZiAocG9zaXRpb24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICAgICAgeSA9IChjaGFydEFyZWEudG9wICsgY2hhcnRBcmVhLmJvdHRvbSkgLyAyICsgdGlja0FuZFBhZGRpbmc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uQXhpc0lEID0gT2JqZWN0LmtleXMocG9zaXRpb24pWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcG9zaXRpb25bcG9zaXRpb25BeGlzSURdO1xuICAgICAgICAgICAgICAgIHkgPSB0aGlzLmNoYXJ0LnNjYWxlc1twb3NpdGlvbkF4aXNJRF0uZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZSkgKyB0aWNrQW5kUGFkZGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRleHRBbGlnbiA9IHRoaXMuX2dldFhBeGlzTGFiZWxBbGlnbm1lbnQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChheGlzID09PSAneScpIHtcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICB4ID0gKGNoYXJ0QXJlYS5sZWZ0ICsgY2hhcnRBcmVhLnJpZ2h0KSAvIDIgLSB0aWNrQW5kUGFkZGluZztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QocG9zaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb25BeGlzSUQgPSBPYmplY3Qua2V5cyhwb3NpdGlvbilbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwb3NpdGlvbltwb3NpdGlvbkF4aXNJRF07XG4gICAgICAgICAgICAgICAgeCA9IHRoaXMuY2hhcnQuc2NhbGVzW3Bvc2l0aW9uQXhpc0lEXS5nZXRQaXhlbEZvclZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRleHRBbGlnbiA9IHRoaXMuX2dldFlBeGlzTGFiZWxBbGlnbm1lbnQodGwpLnRleHRBbGlnbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXhpcyA9PT0gJ3knKSB7XG4gICAgICAgICAgICBpZiAoYWxpZ24gPT09ICdzdGFydCcpIHtcbiAgICAgICAgICAgICAgICB0ZXh0QmFzZWxpbmUgPSAndG9wJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxpZ24gPT09ICdlbmQnKSB7XG4gICAgICAgICAgICAgICAgdGV4dEJhc2VsaW5lID0gJ2JvdHRvbSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFiZWxTaXplcyA9IHRoaXMuX2dldExhYmVsU2l6ZXMoKTtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gdGlja3MubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIHRpY2sgPSB0aWNrc1tpXTtcbiAgICAgICAgICAgIGxhYmVsID0gdGljay5sYWJlbDtcbiAgICAgICAgICAgIGNvbnN0IG9wdHNBdEluZGV4ID0gb3B0aW9uVGlja3Muc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoaSkpO1xuICAgICAgICAgICAgcGl4ZWwgPSB0aGlzLmdldFBpeGVsRm9yVGljayhpKSArIG9wdGlvblRpY2tzLmxhYmVsT2Zmc2V0O1xuICAgICAgICAgICAgZm9udCA9IHRoaXMuX3Jlc29sdmVUaWNrRm9udE9wdGlvbnMoaSk7XG4gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gZm9udC5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgbGluZUNvdW50ID0gaXNBcnJheShsYWJlbCkgPyBsYWJlbC5sZW5ndGggOiAxO1xuICAgICAgICAgICAgY29uc3QgaGFsZkNvdW50ID0gbGluZUNvdW50IC8gMjtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gb3B0c0F0SW5kZXguY29sb3I7XG4gICAgICAgICAgICBjb25zdCBzdHJva2VDb2xvciA9IG9wdHNBdEluZGV4LnRleHRTdHJva2VDb2xvcjtcbiAgICAgICAgICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gb3B0c0F0SW5kZXgudGV4dFN0cm9rZVdpZHRoO1xuICAgICAgICAgICAgbGV0IHRpY2tUZXh0QWxpZ24gPSB0ZXh0QWxpZ247XG4gICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgeCA9IHBpeGVsO1xuICAgICAgICAgICAgICAgIGlmICh0ZXh0QWxpZ24gPT09ICdpbm5lcicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IGlsZW4gLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aWNrVGV4dEFsaWduID0gIXRoaXMub3B0aW9ucy5yZXZlcnNlID8gJ3JpZ2h0JyA6ICdsZWZ0JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aWNrVGV4dEFsaWduID0gIXRoaXMub3B0aW9ucy5yZXZlcnNlID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tUZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjcm9zc0FsaWduID09PSAnbmVhcicgfHwgcm90YXRpb24gIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQgPSAtbGluZUNvdW50ICogbGluZUhlaWdodCArIGxpbmVIZWlnaHQgLyAyO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNyb3NzQWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0ID0gLWxhYmVsU2l6ZXMuaGlnaGVzdC5oZWlnaHQgLyAyIC0gaGFsZkNvdW50ICogbGluZUhlaWdodCArIGxpbmVIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0ID0gLWxhYmVsU2l6ZXMuaGlnaGVzdC5oZWlnaHQgKyBsaW5lSGVpZ2h0IC8gMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjcm9zc0FsaWduID09PSAnbmVhcicgfHwgcm90YXRpb24gIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQgPSBsaW5lSGVpZ2h0IC8gMjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjcm9zc0FsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE9mZnNldCA9IGxhYmVsU2l6ZXMuaGlnaGVzdC5oZWlnaHQgLyAyIC0gaGFsZkNvdW50ICogbGluZUhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQgPSBsYWJlbFNpemVzLmhpZ2hlc3QuaGVpZ2h0IC0gbGluZUNvdW50ICogbGluZUhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobWlycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQgKj0gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyb3RhdGlvbiAhPT0gMCAmJiAhb3B0c0F0SW5kZXguc2hvd0xhYmVsQmFja2Ryb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgeCArPSBsaW5lSGVpZ2h0IC8gMiAqIE1hdGguc2luKHJvdGF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHkgPSBwaXhlbDtcbiAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0ID0gKDEgLSBsaW5lQ291bnQpICogbGluZUhlaWdodCAvIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgYmFja2Ryb3A7XG4gICAgICAgICAgICBpZiAob3B0c0F0SW5kZXguc2hvd0xhYmVsQmFja2Ryb3ApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbFBhZGRpbmcgPSB0b1BhZGRpbmcob3B0c0F0SW5kZXguYmFja2Ryb3BQYWRkaW5nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBsYWJlbFNpemVzLmhlaWdodHNbaV07XG4gICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBsYWJlbFNpemVzLndpZHRoc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgdG9wID0gdGV4dE9mZnNldCAtIGxhYmVsUGFkZGluZy50b3A7XG4gICAgICAgICAgICAgICAgbGV0IGxlZnQgPSAwIC0gbGFiZWxQYWRkaW5nLmxlZnQ7XG4gICAgICAgICAgICAgICAgc3dpdGNoKHRleHRCYXNlbGluZSl7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3AgLT0gaGVpZ2h0IC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wIC09IGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzd2l0Y2godGV4dEFsaWduKXtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgLT0gd2lkdGggLyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgLT0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5uZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IGlsZW4gLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCAtPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0IC09IHdpZHRoIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBiYWNrZHJvcCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGggKyBsYWJlbFBhZGRpbmcud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0ICsgbGFiZWxQYWRkaW5nLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IG9wdHNBdEluZGV4LmJhY2tkcm9wQ29sb3JcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgZm9udCxcbiAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0LFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgcm90YXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogdGlja1RleHRBbGlnbixcbiAgICAgICAgICAgICAgICAgICAgdGV4dEJhc2VsaW5lLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgYmFja2Ryb3BcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIF9nZXRYQXhpc0xhYmVsQWxpZ25tZW50KCkge1xuICAgICAgICBjb25zdCB7IHBvc2l0aW9uICwgdGlja3MgIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHJvdGF0aW9uID0gLXRvUmFkaWFucyh0aGlzLmxhYmVsUm90YXRpb24pO1xuICAgICAgICBpZiAocm90YXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiA9PT0gJ3RvcCcgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgICBpZiAodGlja3MuYWxpZ24gPT09ICdzdGFydCcpIHtcbiAgICAgICAgICAgIGFsaWduID0gJ2xlZnQnO1xuICAgICAgICB9IGVsc2UgaWYgKHRpY2tzLmFsaWduID09PSAnZW5kJykge1xuICAgICAgICAgICAgYWxpZ24gPSAncmlnaHQnO1xuICAgICAgICB9IGVsc2UgaWYgKHRpY2tzLmFsaWduID09PSAnaW5uZXInKSB7XG4gICAgICAgICAgICBhbGlnbiA9ICdpbm5lcic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFsaWduO1xuICAgIH1cbiAgICBfZ2V0WUF4aXNMYWJlbEFsaWdubWVudCh0bCkge1xuICAgICAgICBjb25zdCB7IHBvc2l0aW9uICwgdGlja3M6IHsgY3Jvc3NBbGlnbiAsIG1pcnJvciAsIHBhZGRpbmcgIH0gIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGxhYmVsU2l6ZXMgPSB0aGlzLl9nZXRMYWJlbFNpemVzKCk7XG4gICAgICAgIGNvbnN0IHRpY2tBbmRQYWRkaW5nID0gdGwgKyBwYWRkaW5nO1xuICAgICAgICBjb25zdCB3aWRlc3QgPSBsYWJlbFNpemVzLndpZGVzdC53aWR0aDtcbiAgICAgICAgbGV0IHRleHRBbGlnbjtcbiAgICAgICAgbGV0IHg7XG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICBpZiAobWlycm9yKSB7XG4gICAgICAgICAgICAgICAgeCA9IHRoaXMucmlnaHQgKyBwYWRkaW5nO1xuICAgICAgICAgICAgICAgIGlmIChjcm9zc0FsaWduID09PSAnbmVhcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduID0gJ2xlZnQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgICAgICAgICAgICAgIHggKz0gd2lkZXN0IC8gMjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24gPSAncmlnaHQnO1xuICAgICAgICAgICAgICAgICAgICB4ICs9IHdpZGVzdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHggPSB0aGlzLnJpZ2h0IC0gdGlja0FuZFBhZGRpbmc7XG4gICAgICAgICAgICAgICAgaWYgKGNyb3NzQWxpZ24gPT09ICduZWFyJykge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24gPSAncmlnaHQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgICAgICAgICAgICAgIHggLT0gd2lkZXN0IC8gMjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24gPSAnbGVmdCc7XG4gICAgICAgICAgICAgICAgICAgIHggPSB0aGlzLmxlZnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICBpZiAobWlycm9yKSB7XG4gICAgICAgICAgICAgICAgeCA9IHRoaXMubGVmdCArIHBhZGRpbmc7XG4gICAgICAgICAgICAgICAgaWYgKGNyb3NzQWxpZ24gPT09ICduZWFyJykge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24gPSAncmlnaHQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgICAgICAgICAgICAgIHggLT0gd2lkZXN0IC8gMjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24gPSAnbGVmdCc7XG4gICAgICAgICAgICAgICAgICAgIHggLT0gd2lkZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgeCA9IHRoaXMubGVmdCArIHRpY2tBbmRQYWRkaW5nO1xuICAgICAgICAgICAgICAgIGlmIChjcm9zc0FsaWduID09PSAnbmVhcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduID0gJ2xlZnQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgICAgICAgICAgICAgIHggKz0gd2lkZXN0IC8gMjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24gPSAncmlnaHQnO1xuICAgICAgICAgICAgICAgICAgICB4ID0gdGhpcy5yaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZXh0QWxpZ24gPSAncmlnaHQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0QWxpZ24sXG4gICAgICAgICAgICB4XG4gICAgICAgIH07XG4gICAgfVxuIF9jb21wdXRlTGFiZWxBcmVhKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRpY2tzLm1pcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLm9wdGlvbnMucG9zaXRpb247XG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ2xlZnQnIHx8IHBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLmxlZnQsXG4gICAgICAgICAgICAgICAgYm90dG9tOiBjaGFydC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgcmlnaHQ6IHRoaXMucmlnaHRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdG9wOiB0aGlzLnRvcCxcbiAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgIGJvdHRvbTogdGhpcy5ib3R0b20sXG4gICAgICAgICAgICAgICAgcmlnaHQ6IGNoYXJ0LndpZHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuIGRyYXdCYWNrZ3JvdW5kKCkge1xuICAgICAgICBjb25zdCB7IGN0eCAsIG9wdGlvbnM6IHsgYmFja2dyb3VuZENvbG9yICB9ICwgbGVmdCAsIHRvcCAsIHdpZHRoICwgaGVpZ2h0ICB9ID0gdGhpcztcbiAgICAgICAgaWYgKGJhY2tncm91bmRDb2xvcikge1xuICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgICAgICBjdHguZmlsbFJlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0TGluZVdpZHRoRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMub3B0aW9ucy5ncmlkO1xuICAgICAgICBpZiAoIXRoaXMuX2lzVmlzaWJsZSgpIHx8ICFncmlkLmRpc3BsYXkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRpY2tzID0gdGhpcy50aWNrcztcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aWNrcy5maW5kSW5kZXgoKHQpPT50LnZhbHVlID09PSB2YWx1ZSk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRzID0gZ3JpZC5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dChpbmRleCkpO1xuICAgICAgICAgICAgcmV0dXJuIG9wdHMubGluZVdpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiBkcmF3R3JpZChjaGFydEFyZWEpIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMub3B0aW9ucy5ncmlkO1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLl9ncmlkTGluZUl0ZW1zIHx8ICh0aGlzLl9ncmlkTGluZUl0ZW1zID0gdGhpcy5fY29tcHV0ZUdyaWRMaW5lSXRlbXMoY2hhcnRBcmVhKSk7XG4gICAgICAgIGxldCBpLCBpbGVuO1xuICAgICAgICBjb25zdCBkcmF3TGluZSA9IChwMSwgcDIsIHN0eWxlKT0+e1xuICAgICAgICAgICAgaWYgKCFzdHlsZS53aWR0aCB8fCAhc3R5bGUuY29sb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IHN0eWxlLndpZHRoO1xuICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3R5bGUuY29sb3I7XG4gICAgICAgICAgICBjdHguc2V0TGluZURhc2goc3R5bGUuYm9yZGVyRGFzaCB8fCBbXSk7XG4gICAgICAgICAgICBjdHgubGluZURhc2hPZmZzZXQgPSBzdHlsZS5ib3JkZXJEYXNoT2Zmc2V0O1xuICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY3R4Lm1vdmVUbyhwMS54LCBwMS55KTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8ocDIueCwgcDIueSk7XG4gICAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoZ3JpZC5kaXNwbGF5KSB7XG4gICAgICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JpZC5kcmF3T25DaGFydEFyZWEpIHtcbiAgICAgICAgICAgICAgICAgICAgZHJhd0xpbmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogaXRlbS54MSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGl0ZW0ueTFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogaXRlbS54MixcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGl0ZW0ueTJcbiAgICAgICAgICAgICAgICAgICAgfSwgaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChncmlkLmRyYXdUaWNrcykge1xuICAgICAgICAgICAgICAgICAgICBkcmF3TGluZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBpdGVtLnR4MSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGl0ZW0udHkxXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGl0ZW0udHgyLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogaXRlbS50eTJcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGl0ZW0udGlja0NvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGl0ZW0udGlja1dpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyRGFzaDogaXRlbS50aWNrQm9yZGVyRGFzaCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckRhc2hPZmZzZXQ6IGl0ZW0udGlja0JvcmRlckRhc2hPZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuIGRyYXdCb3JkZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgY2hhcnQgLCBjdHggLCBvcHRpb25zOiB7IGJvcmRlciAsIGdyaWQgIH0gIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBib3JkZXJPcHRzID0gYm9yZGVyLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpO1xuICAgICAgICBjb25zdCBheGlzV2lkdGggPSBib3JkZXIuZGlzcGxheSA/IGJvcmRlck9wdHMud2lkdGggOiAwO1xuICAgICAgICBpZiAoIWF4aXNXaWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3RMaW5lV2lkdGggPSBncmlkLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KDApKS5saW5lV2lkdGg7XG4gICAgICAgIGNvbnN0IGJvcmRlclZhbHVlID0gdGhpcy5fYm9yZGVyVmFsdWU7XG4gICAgICAgIGxldCB4MSwgeDIsIHkxLCB5MjtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICAgIHgxID0gX2FsaWduUGl4ZWwoY2hhcnQsIHRoaXMubGVmdCwgYXhpc1dpZHRoKSAtIGF4aXNXaWR0aCAvIDI7XG4gICAgICAgICAgICB4MiA9IF9hbGlnblBpeGVsKGNoYXJ0LCB0aGlzLnJpZ2h0LCBsYXN0TGluZVdpZHRoKSArIGxhc3RMaW5lV2lkdGggLyAyO1xuICAgICAgICAgICAgeTEgPSB5MiA9IGJvcmRlclZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeTEgPSBfYWxpZ25QaXhlbChjaGFydCwgdGhpcy50b3AsIGF4aXNXaWR0aCkgLSBheGlzV2lkdGggLyAyO1xuICAgICAgICAgICAgeTIgPSBfYWxpZ25QaXhlbChjaGFydCwgdGhpcy5ib3R0b20sIGxhc3RMaW5lV2lkdGgpICsgbGFzdExpbmVXaWR0aCAvIDI7XG4gICAgICAgICAgICB4MSA9IHgyID0gYm9yZGVyVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGJvcmRlck9wdHMud2lkdGg7XG4gICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGJvcmRlck9wdHMuY29sb3I7XG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgY3R4Lm1vdmVUbyh4MSwgeTEpO1xuICAgICAgICBjdHgubGluZVRvKHgyLCB5Mik7XG4gICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICB9XG4gZHJhd0xhYmVscyhjaGFydEFyZWEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uVGlja3MgPSB0aGlzLm9wdGlvbnMudGlja3M7XG4gICAgICAgIGlmICghb3B0aW9uVGlja3MuZGlzcGxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICBjb25zdCBhcmVhID0gdGhpcy5fY29tcHV0ZUxhYmVsQXJlYSgpO1xuICAgICAgICBpZiAoYXJlYSkge1xuICAgICAgICAgICAgY2xpcEFyZWEoY3R4LCBhcmVhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0TGFiZWxJdGVtcyhjaGFydEFyZWEpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpe1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyVGV4dE9wdGlvbnMgPSBpdGVtLm9wdGlvbnM7XG4gICAgICAgICAgICBjb25zdCB0aWNrRm9udCA9IGl0ZW0uZm9udDtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbS5sYWJlbDtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBpdGVtLnRleHRPZmZzZXQ7XG4gICAgICAgICAgICByZW5kZXJUZXh0KGN0eCwgbGFiZWwsIDAsIHksIHRpY2tGb250LCByZW5kZXJUZXh0T3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZWEpIHtcbiAgICAgICAgICAgIHVuY2xpcEFyZWEoY3R4KTtcbiAgICAgICAgfVxuICAgIH1cbiBkcmF3VGl0bGUoKSB7XG4gICAgICAgIGNvbnN0IHsgY3R4ICwgb3B0aW9uczogeyBwb3NpdGlvbiAsIHRpdGxlICwgcmV2ZXJzZSAgfSAgfSA9IHRoaXM7XG4gICAgICAgIGlmICghdGl0bGUuZGlzcGxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvbnQgPSB0b0ZvbnQodGl0bGUuZm9udCk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSB0b1BhZGRpbmcodGl0bGUucGFkZGluZyk7XG4gICAgICAgIGNvbnN0IGFsaWduID0gdGl0bGUuYWxpZ247XG4gICAgICAgIGxldCBvZmZzZXQgPSBmb250LmxpbmVIZWlnaHQgLyAyO1xuICAgICAgICBpZiAocG9zaXRpb24gPT09ICdib3R0b20nIHx8IHBvc2l0aW9uID09PSAnY2VudGVyJyB8fCBpc09iamVjdChwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIG9mZnNldCArPSBwYWRkaW5nLmJvdHRvbTtcbiAgICAgICAgICAgIGlmIChpc0FycmF5KHRpdGxlLnRleHQpKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGZvbnQubGluZUhlaWdodCAqICh0aXRsZS50ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2Zmc2V0ICs9IHBhZGRpbmcudG9wO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgdGl0bGVYICwgdGl0bGVZICwgbWF4V2lkdGggLCByb3RhdGlvbiAgfSA9IHRpdGxlQXJncyh0aGlzLCBvZmZzZXQsIHBvc2l0aW9uLCBhbGlnbik7XG4gICAgICAgIHJlbmRlclRleHQoY3R4LCB0aXRsZS50ZXh0LCAwLCAwLCBmb250LCB7XG4gICAgICAgICAgICBjb2xvcjogdGl0bGUuY29sb3IsXG4gICAgICAgICAgICBtYXhXaWR0aCxcbiAgICAgICAgICAgIHJvdGF0aW9uLFxuICAgICAgICAgICAgdGV4dEFsaWduOiB0aXRsZUFsaWduKGFsaWduLCBwb3NpdGlvbiwgcmV2ZXJzZSksXG4gICAgICAgICAgICB0ZXh0QmFzZWxpbmU6ICdtaWRkbGUnLFxuICAgICAgICAgICAgdHJhbnNsYXRpb246IFtcbiAgICAgICAgICAgICAgICB0aXRsZVgsXG4gICAgICAgICAgICAgICAgdGl0bGVZXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkcmF3KGNoYXJ0QXJlYSkge1xuICAgICAgICBpZiAoIXRoaXMuX2lzVmlzaWJsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kcmF3QmFja2dyb3VuZCgpO1xuICAgICAgICB0aGlzLmRyYXdHcmlkKGNoYXJ0QXJlYSk7XG4gICAgICAgIHRoaXMuZHJhd0JvcmRlcigpO1xuICAgICAgICB0aGlzLmRyYXdUaXRsZSgpO1xuICAgICAgICB0aGlzLmRyYXdMYWJlbHMoY2hhcnRBcmVhKTtcbiAgICB9XG4gX2xheWVycygpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgdHogPSBvcHRzLnRpY2tzICYmIG9wdHMudGlja3MueiB8fCAwO1xuICAgICAgICBjb25zdCBneiA9IHZhbHVlT3JEZWZhdWx0KG9wdHMuZ3JpZCAmJiBvcHRzLmdyaWQueiwgLTEpO1xuICAgICAgICBjb25zdCBieiA9IHZhbHVlT3JEZWZhdWx0KG9wdHMuYm9yZGVyICYmIG9wdHMuYm9yZGVyLnosIDApO1xuICAgICAgICBpZiAoIXRoaXMuX2lzVmlzaWJsZSgpIHx8IHRoaXMuZHJhdyAhPT0gU2NhbGUucHJvdG90eXBlLmRyYXcpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB6OiB0eixcbiAgICAgICAgICAgICAgICAgICAgZHJhdzogKGNoYXJ0QXJlYSk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhdyhjaGFydEFyZWEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHo6IGd6LFxuICAgICAgICAgICAgICAgIGRyYXc6IChjaGFydEFyZWEpPT57XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd0JhY2tncm91bmQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3R3JpZChjaGFydEFyZWEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdUaXRsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgejogYnosXG4gICAgICAgICAgICAgICAgZHJhdzogKCk9PntcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3Qm9yZGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB6OiB0eixcbiAgICAgICAgICAgICAgICBkcmF3OiAoY2hhcnRBcmVhKT0+e1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdMYWJlbHMoY2hhcnRBcmVhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgfVxuIGdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKHR5cGUpIHtcbiAgICAgICAgY29uc3QgbWV0YXMgPSB0aGlzLmNoYXJ0LmdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMoKTtcbiAgICAgICAgY29uc3QgYXhpc0lEID0gdGhpcy5heGlzICsgJ0F4aXNJRCc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBsZXQgaSwgaWxlbjtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gbWV0YXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IG1ldGEgPSBtZXRhc1tpXTtcbiAgICAgICAgICAgIGlmIChtZXRhW2F4aXNJRF0gPT09IHRoaXMuaWQgJiYgKCF0eXBlIHx8IG1ldGEudHlwZSA9PT0gdHlwZSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChtZXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiBfcmVzb2x2ZVRpY2tGb250T3B0aW9ucyhpbmRleCkge1xuICAgICAgICBjb25zdCBvcHRzID0gdGhpcy5vcHRpb25zLnRpY2tzLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KGluZGV4KSk7XG4gICAgICAgIHJldHVybiB0b0ZvbnQob3B0cy5mb250KTtcbiAgICB9XG4gX21heERpZ2l0cygpIHtcbiAgICAgICAgY29uc3QgZm9udFNpemUgPSB0aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKDApLmxpbmVIZWlnaHQ7XG4gICAgICAgIHJldHVybiAodGhpcy5pc0hvcml6b250YWwoKSA/IHRoaXMud2lkdGggOiB0aGlzLmhlaWdodCkgLyBmb250U2l6ZTtcbiAgICB9XG59XG5cbmNsYXNzIFR5cGVkUmVnaXN0cnkge1xuICAgIGNvbnN0cnVjdG9yKHR5cGUsIHNjb3BlLCBvdmVycmlkZSl7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICAgICAgdGhpcy5vdmVycmlkZSA9IG92ZXJyaWRlO1xuICAgICAgICB0aGlzLml0ZW1zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG4gICAgaXNGb3JUeXBlKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZi5jYWxsKHRoaXMudHlwZS5wcm90b3R5cGUsIHR5cGUucHJvdG90eXBlKTtcbiAgICB9XG4gcmVnaXN0ZXIoaXRlbSkge1xuICAgICAgICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihpdGVtKTtcbiAgICAgICAgbGV0IHBhcmVudFNjb3BlO1xuICAgICAgICBpZiAoaXNJQ2hhcnRDb21wb25lbnQocHJvdG8pKSB7XG4gICAgICAgICAgICBwYXJlbnRTY29wZSA9IHRoaXMucmVnaXN0ZXIocHJvdG8pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICAgICAgY29uc3QgaWQgPSBpdGVtLmlkO1xuICAgICAgICBjb25zdCBzY29wZSA9IHRoaXMuc2NvcGUgKyAnLicgKyBpZDtcbiAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjbGFzcyBkb2VzIG5vdCBoYXZlIGlkOiAnICsgaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkIGluIGl0ZW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NvcGU7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbXNbaWRdID0gaXRlbTtcbiAgICAgICAgcmVnaXN0ZXJEZWZhdWx0cyhpdGVtLCBzY29wZSwgcGFyZW50U2NvcGUpO1xuICAgICAgICBpZiAodGhpcy5vdmVycmlkZSkge1xuICAgICAgICAgICAgZGVmYXVsdHMub3ZlcnJpZGUoaXRlbS5pZCwgaXRlbS5vdmVycmlkZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY29wZTtcbiAgICB9XG4gZ2V0KGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zW2lkXTtcbiAgICB9XG4gdW5yZWdpc3RlcihpdGVtKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICAgICAgY29uc3QgaWQgPSBpdGVtLmlkO1xuICAgICAgICBjb25zdCBzY29wZSA9IHRoaXMuc2NvcGU7XG4gICAgICAgIGlmIChpZCBpbiBpdGVtcykge1xuICAgICAgICAgICAgZGVsZXRlIGl0ZW1zW2lkXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NvcGUgJiYgaWQgaW4gZGVmYXVsdHNbc2NvcGVdKSB7XG4gICAgICAgICAgICBkZWxldGUgZGVmYXVsdHNbc2NvcGVdW2lkXTtcbiAgICAgICAgICAgIGlmICh0aGlzLm92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG92ZXJyaWRlc1tpZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiByZWdpc3RlckRlZmF1bHRzKGl0ZW0sIHNjb3BlLCBwYXJlbnRTY29wZSkge1xuICAgIGNvbnN0IGl0ZW1EZWZhdWx0cyA9IG1lcmdlKE9iamVjdC5jcmVhdGUobnVsbCksIFtcbiAgICAgICAgcGFyZW50U2NvcGUgPyBkZWZhdWx0cy5nZXQocGFyZW50U2NvcGUpIDoge30sXG4gICAgICAgIGRlZmF1bHRzLmdldChzY29wZSksXG4gICAgICAgIGl0ZW0uZGVmYXVsdHNcbiAgICBdKTtcbiAgICBkZWZhdWx0cy5zZXQoc2NvcGUsIGl0ZW1EZWZhdWx0cyk7XG4gICAgaWYgKGl0ZW0uZGVmYXVsdFJvdXRlcykge1xuICAgICAgICByb3V0ZURlZmF1bHRzKHNjb3BlLCBpdGVtLmRlZmF1bHRSb3V0ZXMpO1xuICAgIH1cbiAgICBpZiAoaXRlbS5kZXNjcmlwdG9ycykge1xuICAgICAgICBkZWZhdWx0cy5kZXNjcmliZShzY29wZSwgaXRlbS5kZXNjcmlwdG9ycyk7XG4gICAgfVxufVxuZnVuY3Rpb24gcm91dGVEZWZhdWx0cyhzY29wZSwgcm91dGVzKSB7XG4gICAgT2JqZWN0LmtleXMocm91dGVzKS5mb3JFYWNoKChwcm9wZXJ0eSk9PntcbiAgICAgICAgY29uc3QgcHJvcGVydHlQYXJ0cyA9IHByb3BlcnR5LnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IHNvdXJjZU5hbWUgPSBwcm9wZXJ0eVBhcnRzLnBvcCgpO1xuICAgICAgICBjb25zdCBzb3VyY2VTY29wZSA9IFtcbiAgICAgICAgICAgIHNjb3BlXG4gICAgICAgIF0uY29uY2F0KHByb3BlcnR5UGFydHMpLmpvaW4oJy4nKTtcbiAgICAgICAgY29uc3QgcGFydHMgPSByb3V0ZXNbcHJvcGVydHldLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWUgPSBwYXJ0cy5wb3AoKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0U2NvcGUgPSBwYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgIGRlZmF1bHRzLnJvdXRlKHNvdXJjZVNjb3BlLCBzb3VyY2VOYW1lLCB0YXJnZXRTY29wZSwgdGFyZ2V0TmFtZSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBpc0lDaGFydENvbXBvbmVudChwcm90bykge1xuICAgIHJldHVybiAnaWQnIGluIHByb3RvICYmICdkZWZhdWx0cycgaW4gcHJvdG87XG59XG5cbmNsYXNzIFJlZ2lzdHJ5IHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzID0gbmV3IFR5cGVkUmVnaXN0cnkoRGF0YXNldENvbnRyb2xsZXIsICdkYXRhc2V0cycsIHRydWUpO1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0gbmV3IFR5cGVkUmVnaXN0cnkoRWxlbWVudCwgJ2VsZW1lbnRzJyk7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG5ldyBUeXBlZFJlZ2lzdHJ5KE9iamVjdCwgJ3BsdWdpbnMnKTtcbiAgICAgICAgdGhpcy5zY2FsZXMgPSBuZXcgVHlwZWRSZWdpc3RyeShTY2FsZSwgJ3NjYWxlcycpO1xuICAgICAgICB0aGlzLl90eXBlZFJlZ2lzdHJpZXMgPSBbXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzLFxuICAgICAgICAgICAgdGhpcy5zY2FsZXMsXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzXG4gICAgICAgIF07XG4gICAgfVxuIGFkZCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VhY2goJ3JlZ2lzdGVyJywgYXJncyk7XG4gICAgfVxuICAgIHJlbW92ZSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VhY2goJ3VucmVnaXN0ZXInLCBhcmdzKTtcbiAgICB9XG4gYWRkQ29udHJvbGxlcnMoLi4uYXJncykge1xuICAgICAgICB0aGlzLl9lYWNoKCdyZWdpc3RlcicsIGFyZ3MsIHRoaXMuY29udHJvbGxlcnMpO1xuICAgIH1cbiBhZGRFbGVtZW50cyguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VhY2goJ3JlZ2lzdGVyJywgYXJncywgdGhpcy5lbGVtZW50cyk7XG4gICAgfVxuIGFkZFBsdWdpbnMoLi4uYXJncykge1xuICAgICAgICB0aGlzLl9lYWNoKCdyZWdpc3RlcicsIGFyZ3MsIHRoaXMucGx1Z2lucyk7XG4gICAgfVxuIGFkZFNjYWxlcyguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VhY2goJ3JlZ2lzdGVyJywgYXJncywgdGhpcy5zY2FsZXMpO1xuICAgIH1cbiBnZXRDb250cm9sbGVyKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXQoaWQsIHRoaXMuY29udHJvbGxlcnMsICdjb250cm9sbGVyJyk7XG4gICAgfVxuIGdldEVsZW1lbnQoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldChpZCwgdGhpcy5lbGVtZW50cywgJ2VsZW1lbnQnKTtcbiAgICB9XG4gZ2V0UGx1Z2luKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXQoaWQsIHRoaXMucGx1Z2lucywgJ3BsdWdpbicpO1xuICAgIH1cbiBnZXRTY2FsZShpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0KGlkLCB0aGlzLnNjYWxlcywgJ3NjYWxlJyk7XG4gICAgfVxuIHJlbW92ZUNvbnRyb2xsZXJzKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5fZWFjaCgndW5yZWdpc3RlcicsIGFyZ3MsIHRoaXMuY29udHJvbGxlcnMpO1xuICAgIH1cbiByZW1vdmVFbGVtZW50cyguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VhY2goJ3VucmVnaXN0ZXInLCBhcmdzLCB0aGlzLmVsZW1lbnRzKTtcbiAgICB9XG4gcmVtb3ZlUGx1Z2lucyguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VhY2goJ3VucmVnaXN0ZXInLCBhcmdzLCB0aGlzLnBsdWdpbnMpO1xuICAgIH1cbiByZW1vdmVTY2FsZXMoLi4uYXJncykge1xuICAgICAgICB0aGlzLl9lYWNoKCd1bnJlZ2lzdGVyJywgYXJncywgdGhpcy5zY2FsZXMpO1xuICAgIH1cbiBfZWFjaChtZXRob2QsIGFyZ3MsIHR5cGVkUmVnaXN0cnkpIHtcbiAgICAgICAgW1xuICAgICAgICAgICAgLi4uYXJnc1xuICAgICAgICBdLmZvckVhY2goKGFyZyk9PntcbiAgICAgICAgICAgIGNvbnN0IHJlZyA9IHR5cGVkUmVnaXN0cnkgfHwgdGhpcy5fZ2V0UmVnaXN0cnlGb3JUeXBlKGFyZyk7XG4gICAgICAgICAgICBpZiAodHlwZWRSZWdpc3RyeSB8fCByZWcuaXNGb3JUeXBlKGFyZykgfHwgcmVnID09PSB0aGlzLnBsdWdpbnMgJiYgYXJnLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXhlYyhtZXRob2QsIHJlZywgYXJnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWFjaChhcmcsIChpdGVtKT0+e1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtUmVnID0gdHlwZWRSZWdpc3RyeSB8fCB0aGlzLl9nZXRSZWdpc3RyeUZvclR5cGUoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2V4ZWMobWV0aG9kLCBpdGVtUmVnLCBpdGVtKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuIF9leGVjKG1ldGhvZCwgcmVnaXN0cnksIGNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBjYW1lbE1ldGhvZCA9IF9jYXBpdGFsaXplKG1ldGhvZCk7XG4gICAgICAgIGNhbGxiYWNrKGNvbXBvbmVudFsnYmVmb3JlJyArIGNhbWVsTWV0aG9kXSwgW10sIGNvbXBvbmVudCk7XG4gICAgICAgIHJlZ2lzdHJ5W21ldGhvZF0oY29tcG9uZW50KTtcbiAgICAgICAgY2FsbGJhY2soY29tcG9uZW50WydhZnRlcicgKyBjYW1lbE1ldGhvZF0sIFtdLCBjb21wb25lbnQpO1xuICAgIH1cbiBfZ2V0UmVnaXN0cnlGb3JUeXBlKHR5cGUpIHtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRoaXMuX3R5cGVkUmVnaXN0cmllcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBjb25zdCByZWcgPSB0aGlzLl90eXBlZFJlZ2lzdHJpZXNbaV07XG4gICAgICAgICAgICBpZiAocmVnLmlzRm9yVHlwZSh0eXBlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGx1Z2lucztcbiAgICB9XG4gX2dldChpZCwgdHlwZWRSZWdpc3RyeSwgdHlwZSkge1xuICAgICAgICBjb25zdCBpdGVtID0gdHlwZWRSZWdpc3RyeS5nZXQoaWQpO1xuICAgICAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGlkICsgJ1wiIGlzIG5vdCBhIHJlZ2lzdGVyZWQgJyArIHR5cGUgKyAnLicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbn1cbnZhciByZWdpc3RyeSA9IC8qICNfX1BVUkVfXyAqLyBuZXcgUmVnaXN0cnkoKTtcblxuY2xhc3MgUGx1Z2luU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5faW5pdCA9IFtdO1xuICAgIH1cbiBub3RpZnkoY2hhcnQsIGhvb2ssIGFyZ3MsIGZpbHRlcikge1xuICAgICAgICBpZiAoaG9vayA9PT0gJ2JlZm9yZUluaXQnKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0ID0gdGhpcy5fY3JlYXRlRGVzY3JpcHRvcnMoY2hhcnQsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5fbm90aWZ5KHRoaXMuX2luaXQsIGNoYXJ0LCAnaW5zdGFsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3JzID0gZmlsdGVyID8gdGhpcy5fZGVzY3JpcHRvcnMoY2hhcnQpLmZpbHRlcihmaWx0ZXIpIDogdGhpcy5fZGVzY3JpcHRvcnMoY2hhcnQpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9ub3RpZnkoZGVzY3JpcHRvcnMsIGNoYXJ0LCBob29rLCBhcmdzKTtcbiAgICAgICAgaWYgKGhvb2sgPT09ICdhZnRlckRlc3Ryb3knKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkoZGVzY3JpcHRvcnMsIGNoYXJ0LCAnc3RvcCcpO1xuICAgICAgICAgICAgdGhpcy5fbm90aWZ5KHRoaXMuX2luaXQsIGNoYXJ0LCAndW5pbnN0YWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gX25vdGlmeShkZXNjcmlwdG9ycywgY2hhcnQsIGhvb2ssIGFyZ3MpIHtcbiAgICAgICAgYXJncyA9IGFyZ3MgfHwge307XG4gICAgICAgIGZvciAoY29uc3QgZGVzY3JpcHRvciBvZiBkZXNjcmlwdG9ycyl7XG4gICAgICAgICAgICBjb25zdCBwbHVnaW4gPSBkZXNjcmlwdG9yLnBsdWdpbjtcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IHBsdWdpbltob29rXTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IFtcbiAgICAgICAgICAgICAgICBjaGFydCxcbiAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iub3B0aW9uc1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayhtZXRob2QsIHBhcmFtcywgcGx1Z2luKSA9PT0gZmFsc2UgJiYgYXJncy5jYW5jZWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpbnZhbGlkYXRlKCkge1xuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYodGhpcy5fY2FjaGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9vbGRDYWNoZSA9IHRoaXMuX2NhY2hlO1xuICAgICAgICAgICAgdGhpcy5fY2FjaGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gX2Rlc2NyaXB0b3JzKGNoYXJ0KSB7XG4gICAgICAgIGlmICh0aGlzLl9jYWNoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3JzID0gdGhpcy5fY2FjaGUgPSB0aGlzLl9jcmVhdGVEZXNjcmlwdG9ycyhjaGFydCk7XG4gICAgICAgIHRoaXMuX25vdGlmeVN0YXRlQ2hhbmdlcyhjaGFydCk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9ycztcbiAgICB9XG4gICAgX2NyZWF0ZURlc2NyaXB0b3JzKGNoYXJ0LCBhbGwpIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gY2hhcnQgJiYgY2hhcnQuY29uZmlnO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdmFsdWVPckRlZmF1bHQoY29uZmlnLm9wdGlvbnMgJiYgY29uZmlnLm9wdGlvbnMucGx1Z2lucywge30pO1xuICAgICAgICBjb25zdCBwbHVnaW5zID0gYWxsUGx1Z2lucyhjb25maWcpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucyA9PT0gZmFsc2UgJiYgIWFsbCA/IFtdIDogY3JlYXRlRGVzY3JpcHRvcnMoY2hhcnQsIHBsdWdpbnMsIG9wdGlvbnMsIGFsbCk7XG4gICAgfVxuIF9ub3RpZnlTdGF0ZUNoYW5nZXMoY2hhcnQpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNEZXNjcmlwdG9ycyA9IHRoaXMuX29sZENhY2hlIHx8IFtdO1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9ycyA9IHRoaXMuX2NhY2hlO1xuICAgICAgICBjb25zdCBkaWZmID0gKGEsIGIpPT5hLmZpbHRlcigoeCk9PiFiLnNvbWUoKHkpPT54LnBsdWdpbi5pZCA9PT0geS5wbHVnaW4uaWQpKTtcbiAgICAgICAgdGhpcy5fbm90aWZ5KGRpZmYocHJldmlvdXNEZXNjcmlwdG9ycywgZGVzY3JpcHRvcnMpLCBjaGFydCwgJ3N0b3AnKTtcbiAgICAgICAgdGhpcy5fbm90aWZ5KGRpZmYoZGVzY3JpcHRvcnMsIHByZXZpb3VzRGVzY3JpcHRvcnMpLCBjaGFydCwgJ3N0YXJ0Jyk7XG4gICAgfVxufVxuIGZ1bmN0aW9uIGFsbFBsdWdpbnMoY29uZmlnKSB7XG4gICAgY29uc3QgbG9jYWxJZHMgPSB7fTtcbiAgICBjb25zdCBwbHVnaW5zID0gW107XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJlZ2lzdHJ5LnBsdWdpbnMuaXRlbXMpO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgcGx1Z2lucy5wdXNoKHJlZ2lzdHJ5LmdldFBsdWdpbihrZXlzW2ldKSk7XG4gICAgfVxuICAgIGNvbnN0IGxvY2FsID0gY29uZmlnLnBsdWdpbnMgfHwgW107XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGxvY2FsLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gbG9jYWxbaV07XG4gICAgICAgIGlmIChwbHVnaW5zLmluZGV4T2YocGx1Z2luKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHBsdWdpbnMucHVzaChwbHVnaW4pO1xuICAgICAgICAgICAgbG9jYWxJZHNbcGx1Z2luLmlkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcGx1Z2lucyxcbiAgICAgICAgbG9jYWxJZHNcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0T3B0cyhvcHRpb25zLCBhbGwpIHtcbiAgICBpZiAoIWFsbCAmJiBvcHRpb25zID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbn1cbmZ1bmN0aW9uIGNyZWF0ZURlc2NyaXB0b3JzKGNoYXJ0LCB7IHBsdWdpbnMgLCBsb2NhbElkcyAgfSwgb3B0aW9ucywgYWxsKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgY29uc3QgY29udGV4dCA9IGNoYXJ0LmdldENvbnRleHQoKTtcbiAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBwbHVnaW5zKXtcbiAgICAgICAgY29uc3QgaWQgPSBwbHVnaW4uaWQ7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBnZXRPcHRzKG9wdGlvbnNbaWRdLCBhbGwpO1xuICAgICAgICBpZiAob3B0cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgcGx1Z2luLFxuICAgICAgICAgICAgb3B0aW9uczogcGx1Z2luT3B0cyhjaGFydC5jb25maWcsIHtcbiAgICAgICAgICAgICAgICBwbHVnaW4sXG4gICAgICAgICAgICAgICAgbG9jYWw6IGxvY2FsSWRzW2lkXVxuICAgICAgICAgICAgfSwgb3B0cywgY29udGV4dClcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBwbHVnaW5PcHRzKGNvbmZpZywgeyBwbHVnaW4gLCBsb2NhbCAgfSwgb3B0cywgY29udGV4dCkge1xuICAgIGNvbnN0IGtleXMgPSBjb25maWcucGx1Z2luU2NvcGVLZXlzKHBsdWdpbik7XG4gICAgY29uc3Qgc2NvcGVzID0gY29uZmlnLmdldE9wdGlvblNjb3BlcyhvcHRzLCBrZXlzKTtcbiAgICBpZiAobG9jYWwgJiYgcGx1Z2luLmRlZmF1bHRzKSB7XG4gICAgICAgIHNjb3Blcy5wdXNoKHBsdWdpbi5kZWZhdWx0cyk7XG4gICAgfVxuICAgIHJldHVybiBjb25maWcuY3JlYXRlUmVzb2x2ZXIoc2NvcGVzLCBjb250ZXh0LCBbXG4gICAgICAgICcnXG4gICAgXSwge1xuICAgICAgICBzY3JpcHRhYmxlOiBmYWxzZSxcbiAgICAgICAgaW5kZXhhYmxlOiBmYWxzZSxcbiAgICAgICAgYWxsS2V5czogdHJ1ZVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRJbmRleEF4aXModHlwZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRhdGFzZXREZWZhdWx0cyA9IGRlZmF1bHRzLmRhdGFzZXRzW3R5cGVdIHx8IHt9O1xuICAgIGNvbnN0IGRhdGFzZXRPcHRpb25zID0gKG9wdGlvbnMuZGF0YXNldHMgfHwge30pW3R5cGVdIHx8IHt9O1xuICAgIHJldHVybiBkYXRhc2V0T3B0aW9ucy5pbmRleEF4aXMgfHwgb3B0aW9ucy5pbmRleEF4aXMgfHwgZGF0YXNldERlZmF1bHRzLmluZGV4QXhpcyB8fCAneCc7XG59XG5mdW5jdGlvbiBnZXRBeGlzRnJvbURlZmF1bHRTY2FsZUlEKGlkLCBpbmRleEF4aXMpIHtcbiAgICBsZXQgYXhpcyA9IGlkO1xuICAgIGlmIChpZCA9PT0gJ19pbmRleF8nKSB7XG4gICAgICAgIGF4aXMgPSBpbmRleEF4aXM7XG4gICAgfSBlbHNlIGlmIChpZCA9PT0gJ192YWx1ZV8nKSB7XG4gICAgICAgIGF4aXMgPSBpbmRleEF4aXMgPT09ICd4JyA/ICd5JyA6ICd4JztcbiAgICB9XG4gICAgcmV0dXJuIGF4aXM7XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0U2NhbGVJREZyb21BeGlzKGF4aXMsIGluZGV4QXhpcykge1xuICAgIHJldHVybiBheGlzID09PSBpbmRleEF4aXMgPyAnX2luZGV4XycgOiAnX3ZhbHVlXyc7XG59XG5mdW5jdGlvbiBpZE1hdGNoZXNBeGlzKGlkKSB7XG4gICAgaWYgKGlkID09PSAneCcgfHwgaWQgPT09ICd5JyB8fCBpZCA9PT0gJ3InKSB7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG59XG5mdW5jdGlvbiBheGlzRnJvbVBvc2l0aW9uKHBvc2l0aW9uKSB7XG4gICAgaWYgKHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgcmV0dXJuICd4JztcbiAgICB9XG4gICAgaWYgKHBvc2l0aW9uID09PSAnbGVmdCcgfHwgcG9zaXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgcmV0dXJuICd5JztcbiAgICB9XG59XG5mdW5jdGlvbiBkZXRlcm1pbmVBeGlzKGlkLCAuLi5zY2FsZU9wdGlvbnMpIHtcbiAgICBpZiAoaWRNYXRjaGVzQXhpcyhpZCkpIHtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IG9wdHMgb2Ygc2NhbGVPcHRpb25zKXtcbiAgICAgICAgY29uc3QgYXhpcyA9IG9wdHMuYXhpcyB8fCBheGlzRnJvbVBvc2l0aW9uKG9wdHMucG9zaXRpb24pIHx8IGlkLmxlbmd0aCA+IDEgJiYgaWRNYXRjaGVzQXhpcyhpZFswXS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKGF4aXMpIHtcbiAgICAgICAgICAgIHJldHVybiBheGlzO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGRldGVybWluZSB0eXBlIG9mICcke2lkfScgYXhpcy4gUGxlYXNlIHByb3ZpZGUgJ2F4aXMnIG9yICdwb3NpdGlvbicgb3B0aW9uLmApO1xufVxuZnVuY3Rpb24gZ2V0QXhpc0Zyb21EYXRhc2V0KGlkLCBheGlzLCBkYXRhc2V0KSB7XG4gICAgaWYgKGRhdGFzZXRbYXhpcyArICdBeGlzSUQnXSA9PT0gaWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF4aXNcbiAgICAgICAgfTtcbiAgICB9XG59XG5mdW5jdGlvbiByZXRyaWV2ZUF4aXNGcm9tRGF0YXNldHMoaWQsIGNvbmZpZykge1xuICAgIGlmIChjb25maWcuZGF0YSAmJiBjb25maWcuZGF0YS5kYXRhc2V0cykge1xuICAgICAgICBjb25zdCBib3VuZERzID0gY29uZmlnLmRhdGEuZGF0YXNldHMuZmlsdGVyKChkKT0+ZC54QXhpc0lEID09PSBpZCB8fCBkLnlBeGlzSUQgPT09IGlkKTtcbiAgICAgICAgaWYgKGJvdW5kRHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QXhpc0Zyb21EYXRhc2V0KGlkLCAneCcsIGJvdW5kRHNbMF0pIHx8IGdldEF4aXNGcm9tRGF0YXNldChpZCwgJ3knLCBib3VuZERzWzBdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge307XG59XG5mdW5jdGlvbiBtZXJnZVNjYWxlQ29uZmlnKGNvbmZpZywgb3B0aW9ucykge1xuICAgIGNvbnN0IGNoYXJ0RGVmYXVsdHMgPSBvdmVycmlkZXNbY29uZmlnLnR5cGVdIHx8IHtcbiAgICAgICAgc2NhbGVzOiB7fVxuICAgIH07XG4gICAgY29uc3QgY29uZmlnU2NhbGVzID0gb3B0aW9ucy5zY2FsZXMgfHwge307XG4gICAgY29uc3QgY2hhcnRJbmRleEF4aXMgPSBnZXRJbmRleEF4aXMoY29uZmlnLnR5cGUsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHNjYWxlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgT2JqZWN0LmtleXMoY29uZmlnU2NhbGVzKS5mb3JFYWNoKChpZCk9PntcbiAgICAgICAgY29uc3Qgc2NhbGVDb25mID0gY29uZmlnU2NhbGVzW2lkXTtcbiAgICAgICAgaWYgKCFpc09iamVjdChzY2FsZUNvbmYpKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uc29sZS5lcnJvcihgSW52YWxpZCBzY2FsZSBjb25maWd1cmF0aW9uIGZvciBzY2FsZTogJHtpZH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NhbGVDb25mLl9wcm94eSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUud2FybihgSWdub3JpbmcgcmVzb2x2ZXIgcGFzc2VkIGFzIG9wdGlvbnMgZm9yIHNjYWxlOiAke2lkfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF4aXMgPSBkZXRlcm1pbmVBeGlzKGlkLCBzY2FsZUNvbmYsIHJldHJpZXZlQXhpc0Zyb21EYXRhc2V0cyhpZCwgY29uZmlnKSwgZGVmYXVsdHMuc2NhbGVzW3NjYWxlQ29uZi50eXBlXSk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRJZCA9IGdldERlZmF1bHRTY2FsZUlERnJvbUF4aXMoYXhpcywgY2hhcnRJbmRleEF4aXMpO1xuICAgICAgICBjb25zdCBkZWZhdWx0U2NhbGVPcHRpb25zID0gY2hhcnREZWZhdWx0cy5zY2FsZXMgfHwge307XG4gICAgICAgIHNjYWxlc1tpZF0gPSBtZXJnZUlmKE9iamVjdC5jcmVhdGUobnVsbCksIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBheGlzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2NhbGVDb25mLFxuICAgICAgICAgICAgZGVmYXVsdFNjYWxlT3B0aW9uc1theGlzXSxcbiAgICAgICAgICAgIGRlZmF1bHRTY2FsZU9wdGlvbnNbZGVmYXVsdElkXVxuICAgICAgICBdKTtcbiAgICB9KTtcbiAgICBjb25maWcuZGF0YS5kYXRhc2V0cy5mb3JFYWNoKChkYXRhc2V0KT0+e1xuICAgICAgICBjb25zdCB0eXBlID0gZGF0YXNldC50eXBlIHx8IGNvbmZpZy50eXBlO1xuICAgICAgICBjb25zdCBpbmRleEF4aXMgPSBkYXRhc2V0LmluZGV4QXhpcyB8fCBnZXRJbmRleEF4aXModHlwZSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRhdGFzZXREZWZhdWx0cyA9IG92ZXJyaWRlc1t0eXBlXSB8fCB7fTtcbiAgICAgICAgY29uc3QgZGVmYXVsdFNjYWxlT3B0aW9ucyA9IGRhdGFzZXREZWZhdWx0cy5zY2FsZXMgfHwge307XG4gICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRTY2FsZU9wdGlvbnMpLmZvckVhY2goKGRlZmF1bHRJRCk9PntcbiAgICAgICAgICAgIGNvbnN0IGF4aXMgPSBnZXRBeGlzRnJvbURlZmF1bHRTY2FsZUlEKGRlZmF1bHRJRCwgaW5kZXhBeGlzKTtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gZGF0YXNldFtheGlzICsgJ0F4aXNJRCddIHx8IGF4aXM7XG4gICAgICAgICAgICBzY2FsZXNbaWRdID0gc2NhbGVzW2lkXSB8fCBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgbWVyZ2VJZihzY2FsZXNbaWRdLCBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBheGlzXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb25maWdTY2FsZXNbaWRdLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRTY2FsZU9wdGlvbnNbZGVmYXVsdElEXVxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIE9iamVjdC5rZXlzKHNjYWxlcykuZm9yRWFjaCgoa2V5KT0+e1xuICAgICAgICBjb25zdCBzY2FsZSA9IHNjYWxlc1trZXldO1xuICAgICAgICBtZXJnZUlmKHNjYWxlLCBbXG4gICAgICAgICAgICBkZWZhdWx0cy5zY2FsZXNbc2NhbGUudHlwZV0sXG4gICAgICAgICAgICBkZWZhdWx0cy5zY2FsZVxuICAgICAgICBdKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2NhbGVzO1xufVxuZnVuY3Rpb24gaW5pdE9wdGlvbnMoY29uZmlnKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbmZpZy5vcHRpb25zIHx8IChjb25maWcub3B0aW9ucyA9IHt9KTtcbiAgICBvcHRpb25zLnBsdWdpbnMgPSB2YWx1ZU9yRGVmYXVsdChvcHRpb25zLnBsdWdpbnMsIHt9KTtcbiAgICBvcHRpb25zLnNjYWxlcyA9IG1lcmdlU2NhbGVDb25maWcoY29uZmlnLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIGluaXREYXRhKGRhdGEpIHtcbiAgICBkYXRhID0gZGF0YSB8fCB7fTtcbiAgICBkYXRhLmRhdGFzZXRzID0gZGF0YS5kYXRhc2V0cyB8fCBbXTtcbiAgICBkYXRhLmxhYmVscyA9IGRhdGEubGFiZWxzIHx8IFtdO1xuICAgIHJldHVybiBkYXRhO1xufVxuZnVuY3Rpb24gaW5pdENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgY29uZmlnLmRhdGEgPSBpbml0RGF0YShjb25maWcuZGF0YSk7XG4gICAgaW5pdE9wdGlvbnMoY29uZmlnKTtcbiAgICByZXR1cm4gY29uZmlnO1xufVxuY29uc3Qga2V5Q2FjaGUgPSBuZXcgTWFwKCk7XG5jb25zdCBrZXlzQ2FjaGVkID0gbmV3IFNldCgpO1xuZnVuY3Rpb24gY2FjaGVkS2V5cyhjYWNoZUtleSwgZ2VuZXJhdGUpIHtcbiAgICBsZXQga2V5cyA9IGtleUNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgaWYgKCFrZXlzKSB7XG4gICAgICAgIGtleXMgPSBnZW5lcmF0ZSgpO1xuICAgICAgICBrZXlDYWNoZS5zZXQoY2FjaGVLZXksIGtleXMpO1xuICAgICAgICBrZXlzQ2FjaGVkLmFkZChrZXlzKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG59XG5jb25zdCBhZGRJZkZvdW5kID0gKHNldCwgb2JqLCBrZXkpPT57XG4gICAgY29uc3Qgb3B0cyA9IHJlc29sdmVPYmplY3RLZXkob2JqLCBrZXkpO1xuICAgIGlmIChvcHRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2V0LmFkZChvcHRzKTtcbiAgICB9XG59O1xuY2xhc3MgQ29uZmlnIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcpe1xuICAgICAgICB0aGlzLl9jb25maWcgPSBpbml0Q29uZmlnKGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX3Njb3BlQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuX3Jlc29sdmVyQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGdldCBwbGF0Zm9ybSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5wbGF0Zm9ybTtcbiAgICB9XG4gICAgZ2V0IHR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcudHlwZTtcbiAgICB9XG4gICAgc2V0IHR5cGUodHlwZSkge1xuICAgICAgICB0aGlzLl9jb25maWcudHlwZSA9IHR5cGU7XG4gICAgfVxuICAgIGdldCBkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmRhdGE7XG4gICAgfVxuICAgIHNldCBkYXRhKGRhdGEpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnLmRhdGEgPSBpbml0RGF0YShkYXRhKTtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcub3B0aW9ucztcbiAgICB9XG4gICAgc2V0IG9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICB0aGlzLl9jb25maWcub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIGdldCBwbHVnaW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLnBsdWdpbnM7XG4gICAgfVxuICAgIHVwZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5fY29uZmlnO1xuICAgICAgICB0aGlzLmNsZWFyQ2FjaGUoKTtcbiAgICAgICAgaW5pdE9wdGlvbnMoY29uZmlnKTtcbiAgICB9XG4gICAgY2xlYXJDYWNoZSgpIHtcbiAgICAgICAgdGhpcy5fc2NvcGVDYWNoZS5jbGVhcigpO1xuICAgICAgICB0aGlzLl9yZXNvbHZlckNhY2hlLmNsZWFyKCk7XG4gICAgfVxuIGRhdGFzZXRTY29wZUtleXMoZGF0YXNldFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZEtleXMoZGF0YXNldFR5cGUsICgpPT5bXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBgZGF0YXNldHMuJHtkYXRhc2V0VHlwZX1gLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIF0pO1xuICAgIH1cbiBkYXRhc2V0QW5pbWF0aW9uU2NvcGVLZXlzKGRhdGFzZXRUeXBlLCB0cmFuc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWRLZXlzKGAke2RhdGFzZXRUeXBlfS50cmFuc2l0aW9uLiR7dHJhbnNpdGlvbn1gLCAoKT0+W1xuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgYGRhdGFzZXRzLiR7ZGF0YXNldFR5cGV9LnRyYW5zaXRpb25zLiR7dHJhbnNpdGlvbn1gLFxuICAgICAgICAgICAgICAgICAgICBgdHJhbnNpdGlvbnMuJHt0cmFuc2l0aW9ufWBcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgYGRhdGFzZXRzLiR7ZGF0YXNldFR5cGV9YCxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICBdKTtcbiAgICB9XG4gZGF0YXNldEVsZW1lbnRTY29wZUtleXMoZGF0YXNldFR5cGUsIGVsZW1lbnRUeXBlKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWRLZXlzKGAke2RhdGFzZXRUeXBlfS0ke2VsZW1lbnRUeXBlfWAsICgpPT5bXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBgZGF0YXNldHMuJHtkYXRhc2V0VHlwZX0uZWxlbWVudHMuJHtlbGVtZW50VHlwZX1gLFxuICAgICAgICAgICAgICAgICAgICBgZGF0YXNldHMuJHtkYXRhc2V0VHlwZX1gLFxuICAgICAgICAgICAgICAgICAgICBgZWxlbWVudHMuJHtlbGVtZW50VHlwZX1gLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIF0pO1xuICAgIH1cbiBwbHVnaW5TY29wZUtleXMocGx1Z2luKSB7XG4gICAgICAgIGNvbnN0IGlkID0gcGx1Z2luLmlkO1xuICAgICAgICBjb25zdCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICByZXR1cm4gY2FjaGVkS2V5cyhgJHt0eXBlfS1wbHVnaW4tJHtpZH1gLCAoKT0+W1xuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgYHBsdWdpbnMuJHtpZH1gLFxuICAgICAgICAgICAgICAgICAgICAuLi5wbHVnaW4uYWRkaXRpb25hbE9wdGlvblNjb3BlcyB8fCBbXVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIF0pO1xuICAgIH1cbiBfY2FjaGVkU2NvcGVzKG1haW5TY29wZSwgcmVzZXRDYWNoZSkge1xuICAgICAgICBjb25zdCBfc2NvcGVDYWNoZSA9IHRoaXMuX3Njb3BlQ2FjaGU7XG4gICAgICAgIGxldCBjYWNoZSA9IF9zY29wZUNhY2hlLmdldChtYWluU2NvcGUpO1xuICAgICAgICBpZiAoIWNhY2hlIHx8IHJlc2V0Q2FjaGUpIHtcbiAgICAgICAgICAgIGNhY2hlID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgX3Njb3BlQ2FjaGUuc2V0KG1haW5TY29wZSwgY2FjaGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWNoZTtcbiAgICB9XG4gZ2V0T3B0aW9uU2NvcGVzKG1haW5TY29wZSwga2V5TGlzdHMsIHJlc2V0Q2FjaGUpIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25zICwgdHlwZSAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy5fY2FjaGVkU2NvcGVzKG1haW5TY29wZSwgcmVzZXRDYWNoZSk7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChrZXlMaXN0cyk7XG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NvcGVzID0gbmV3IFNldCgpO1xuICAgICAgICBrZXlMaXN0cy5mb3JFYWNoKChrZXlzKT0+e1xuICAgICAgICAgICAgaWYgKG1haW5TY29wZSkge1xuICAgICAgICAgICAgICAgIHNjb3Blcy5hZGQobWFpblNjb3BlKTtcbiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goKGtleSk9PmFkZElmRm91bmQoc2NvcGVzLCBtYWluU2NvcGUsIGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpPT5hZGRJZkZvdW5kKHNjb3Blcywgb3B0aW9ucywga2V5KSk7XG4gICAgICAgICAgICBrZXlzLmZvckVhY2goKGtleSk9PmFkZElmRm91bmQoc2NvcGVzLCBvdmVycmlkZXNbdHlwZV0gfHwge30sIGtleSkpO1xuICAgICAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpPT5hZGRJZkZvdW5kKHNjb3BlcywgZGVmYXVsdHMsIGtleSkpO1xuICAgICAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpPT5hZGRJZkZvdW5kKHNjb3BlcywgZGVzY3JpcHRvcnMsIGtleSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYXJyYXkgPSBBcnJheS5mcm9tKHNjb3Blcyk7XG4gICAgICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGFycmF5LnB1c2goT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleXNDYWNoZWQuaGFzKGtleUxpc3RzKSkge1xuICAgICAgICAgICAgY2FjaGUuc2V0KGtleUxpc3RzLCBhcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cbiBjaGFydE9wdGlvblNjb3BlcygpIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25zICwgdHlwZSAgfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgb3ZlcnJpZGVzW3R5cGVdIHx8IHt9LFxuICAgICAgICAgICAgZGVmYXVsdHMuZGF0YXNldHNbdHlwZV0gfHwge30sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlZmF1bHRzLFxuICAgICAgICAgICAgZGVzY3JpcHRvcnNcbiAgICAgICAgXTtcbiAgICB9XG4gcmVzb2x2ZU5hbWVkT3B0aW9ucyhzY29wZXMsIG5hbWVzLCBjb250ZXh0LCBwcmVmaXhlcyA9IFtcbiAgICAgICAgJydcbiAgICBdKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICRzaGFyZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXNvbHZlciAsIHN1YlByZWZpeGVzICB9ID0gZ2V0UmVzb2x2ZXIodGhpcy5fcmVzb2x2ZXJDYWNoZSwgc2NvcGVzLCBwcmVmaXhlcyk7XG4gICAgICAgIGxldCBvcHRpb25zID0gcmVzb2x2ZXI7XG4gICAgICAgIGlmIChuZWVkQ29udGV4dChyZXNvbHZlciwgbmFtZXMpKSB7XG4gICAgICAgICAgICByZXN1bHQuJHNoYXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29udGV4dCA9IGlzRnVuY3Rpb24oY29udGV4dCkgPyBjb250ZXh0KCkgOiBjb250ZXh0O1xuICAgICAgICAgICAgY29uc3Qgc3ViUmVzb2x2ZXIgPSB0aGlzLmNyZWF0ZVJlc29sdmVyKHNjb3BlcywgY29udGV4dCwgc3ViUHJlZml4ZXMpO1xuICAgICAgICAgICAgb3B0aW9ucyA9IF9hdHRhY2hDb250ZXh0KHJlc29sdmVyLCBjb250ZXh0LCBzdWJSZXNvbHZlcik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIG5hbWVzKXtcbiAgICAgICAgICAgIHJlc3VsdFtwcm9wXSA9IG9wdGlvbnNbcHJvcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gY3JlYXRlUmVzb2x2ZXIoc2NvcGVzLCBjb250ZXh0LCBwcmVmaXhlcyA9IFtcbiAgICAgICAgJydcbiAgICBdLCBkZXNjcmlwdG9yRGVmYXVsdHMpIHtcbiAgICAgICAgY29uc3QgeyByZXNvbHZlciAgfSA9IGdldFJlc29sdmVyKHRoaXMuX3Jlc29sdmVyQ2FjaGUsIHNjb3BlcywgcHJlZml4ZXMpO1xuICAgICAgICByZXR1cm4gaXNPYmplY3QoY29udGV4dCkgPyBfYXR0YWNoQ29udGV4dChyZXNvbHZlciwgY29udGV4dCwgdW5kZWZpbmVkLCBkZXNjcmlwdG9yRGVmYXVsdHMpIDogcmVzb2x2ZXI7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UmVzb2x2ZXIocmVzb2x2ZXJDYWNoZSwgc2NvcGVzLCBwcmVmaXhlcykge1xuICAgIGxldCBjYWNoZSA9IHJlc29sdmVyQ2FjaGUuZ2V0KHNjb3Blcyk7XG4gICAgaWYgKCFjYWNoZSkge1xuICAgICAgICBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgcmVzb2x2ZXJDYWNoZS5zZXQoc2NvcGVzLCBjYWNoZSk7XG4gICAgfVxuICAgIGNvbnN0IGNhY2hlS2V5ID0gcHJlZml4ZXMuam9pbigpO1xuICAgIGxldCBjYWNoZWQgPSBjYWNoZS5nZXQoY2FjaGVLZXkpO1xuICAgIGlmICghY2FjaGVkKSB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVyID0gX2NyZWF0ZVJlc29sdmVyKHNjb3BlcywgcHJlZml4ZXMpO1xuICAgICAgICBjYWNoZWQgPSB7XG4gICAgICAgICAgICByZXNvbHZlcixcbiAgICAgICAgICAgIHN1YlByZWZpeGVzOiBwcmVmaXhlcy5maWx0ZXIoKHApPT4hcC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdob3ZlcicpKVxuICAgICAgICB9O1xuICAgICAgICBjYWNoZS5zZXQoY2FjaGVLZXksIGNhY2hlZCk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZWQ7XG59XG5jb25zdCBoYXNGdW5jdGlvbiA9ICh2YWx1ZSk9PmlzT2JqZWN0KHZhbHVlKSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZSkuc29tZSgoa2V5KT0+aXNGdW5jdGlvbih2YWx1ZVtrZXldKSk7XG5mdW5jdGlvbiBuZWVkQ29udGV4dChwcm94eSwgbmFtZXMpIHtcbiAgICBjb25zdCB7IGlzU2NyaXB0YWJsZSAsIGlzSW5kZXhhYmxlICB9ID0gX2Rlc2NyaXB0b3JzKHByb3h5KTtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgbmFtZXMpe1xuICAgICAgICBjb25zdCBzY3JpcHRhYmxlID0gaXNTY3JpcHRhYmxlKHByb3ApO1xuICAgICAgICBjb25zdCBpbmRleGFibGUgPSBpc0luZGV4YWJsZShwcm9wKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAoaW5kZXhhYmxlIHx8IHNjcmlwdGFibGUpICYmIHByb3h5W3Byb3BdO1xuICAgICAgICBpZiAoc2NyaXB0YWJsZSAmJiAoaXNGdW5jdGlvbih2YWx1ZSkgfHwgaGFzRnVuY3Rpb24odmFsdWUpKSB8fCBpbmRleGFibGUgJiYgaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxudmFyIHZlcnNpb24gPSBcIjQuNC42XCI7XG5cbmNvbnN0IEtOT1dOX1BPU0lUSU9OUyA9IFtcbiAgICAndG9wJyxcbiAgICAnYm90dG9tJyxcbiAgICAnbGVmdCcsXG4gICAgJ3JpZ2h0JyxcbiAgICAnY2hhcnRBcmVhJ1xuXTtcbmZ1bmN0aW9uIHBvc2l0aW9uSXNIb3Jpem9udGFsKHBvc2l0aW9uLCBheGlzKSB7XG4gICAgcmV0dXJuIHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbScgfHwgS05PV05fUE9TSVRJT05TLmluZGV4T2YocG9zaXRpb24pID09PSAtMSAmJiBheGlzID09PSAneCc7XG59XG5mdW5jdGlvbiBjb21wYXJlMkxldmVsKGwxLCBsMikge1xuICAgIHJldHVybiBmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgIHJldHVybiBhW2wxXSA9PT0gYltsMV0gPyBhW2wyXSAtIGJbbDJdIDogYVtsMV0gLSBiW2wxXTtcbiAgICB9O1xufVxuZnVuY3Rpb24gb25BbmltYXRpb25zQ29tcGxldGUoY29udGV4dCkge1xuICAgIGNvbnN0IGNoYXJ0ID0gY29udGV4dC5jaGFydDtcbiAgICBjb25zdCBhbmltYXRpb25PcHRpb25zID0gY2hhcnQub3B0aW9ucy5hbmltYXRpb247XG4gICAgY2hhcnQubm90aWZ5UGx1Z2lucygnYWZ0ZXJSZW5kZXInKTtcbiAgICBjYWxsYmFjayhhbmltYXRpb25PcHRpb25zICYmIGFuaW1hdGlvbk9wdGlvbnMub25Db21wbGV0ZSwgW1xuICAgICAgICBjb250ZXh0XG4gICAgXSwgY2hhcnQpO1xufVxuZnVuY3Rpb24gb25BbmltYXRpb25Qcm9ncmVzcyhjb250ZXh0KSB7XG4gICAgY29uc3QgY2hhcnQgPSBjb250ZXh0LmNoYXJ0O1xuICAgIGNvbnN0IGFuaW1hdGlvbk9wdGlvbnMgPSBjaGFydC5vcHRpb25zLmFuaW1hdGlvbjtcbiAgICBjYWxsYmFjayhhbmltYXRpb25PcHRpb25zICYmIGFuaW1hdGlvbk9wdGlvbnMub25Qcm9ncmVzcywgW1xuICAgICAgICBjb250ZXh0XG4gICAgXSwgY2hhcnQpO1xufVxuIGZ1bmN0aW9uIGdldENhbnZhcyhpdGVtKSB7XG4gICAgaWYgKF9pc0RvbVN1cHBvcnRlZCgpICYmIHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICBpdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaXRlbSk7XG4gICAgfSBlbHNlIGlmIChpdGVtICYmIGl0ZW0ubGVuZ3RoKSB7XG4gICAgICAgIGl0ZW0gPSBpdGVtWzBdO1xuICAgIH1cbiAgICBpZiAoaXRlbSAmJiBpdGVtLmNhbnZhcykge1xuICAgICAgICBpdGVtID0gaXRlbS5jYW52YXM7XG4gICAgfVxuICAgIHJldHVybiBpdGVtO1xufVxuY29uc3QgaW5zdGFuY2VzID0ge307XG5jb25zdCBnZXRDaGFydCA9IChrZXkpPT57XG4gICAgY29uc3QgY2FudmFzID0gZ2V0Q2FudmFzKGtleSk7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoaW5zdGFuY2VzKS5maWx0ZXIoKGMpPT5jLmNhbnZhcyA9PT0gY2FudmFzKS5wb3AoKTtcbn07XG5mdW5jdGlvbiBtb3ZlTnVtZXJpY0tleXMob2JqLCBzdGFydCwgbW92ZSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpe1xuICAgICAgICBjb25zdCBpbnRLZXkgPSAra2V5O1xuICAgICAgICBpZiAoaW50S2V5ID49IHN0YXJ0KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgICAgICAgICAgaWYgKG1vdmUgPiAwIHx8IGludEtleSA+IHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgb2JqW2ludEtleSArIG1vdmVdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4gZnVuY3Rpb24gZGV0ZXJtaW5lTGFzdEV2ZW50KGUsIGxhc3RFdmVudCwgaW5DaGFydEFyZWEsIGlzQ2xpY2spIHtcbiAgICBpZiAoIWluQ2hhcnRBcmVhIHx8IGUudHlwZSA9PT0gJ21vdXNlb3V0Jykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGlzQ2xpY2spIHtcbiAgICAgICAgcmV0dXJuIGxhc3RFdmVudDtcbiAgICB9XG4gICAgcmV0dXJuIGU7XG59XG5mdW5jdGlvbiBnZXRTaXplRm9yQXJlYShzY2FsZSwgY2hhcnRBcmVhLCBmaWVsZCkge1xuICAgIHJldHVybiBzY2FsZS5vcHRpb25zLmNsaXAgPyBzY2FsZVtmaWVsZF0gOiBjaGFydEFyZWFbZmllbGRdO1xufVxuZnVuY3Rpb24gZ2V0RGF0YXNldEFyZWEobWV0YSwgY2hhcnRBcmVhKSB7XG4gICAgY29uc3QgeyB4U2NhbGUgLCB5U2NhbGUgIH0gPSBtZXRhO1xuICAgIGlmICh4U2NhbGUgJiYgeVNjYWxlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsZWZ0OiBnZXRTaXplRm9yQXJlYSh4U2NhbGUsIGNoYXJ0QXJlYSwgJ2xlZnQnKSxcbiAgICAgICAgICAgIHJpZ2h0OiBnZXRTaXplRm9yQXJlYSh4U2NhbGUsIGNoYXJ0QXJlYSwgJ3JpZ2h0JyksXG4gICAgICAgICAgICB0b3A6IGdldFNpemVGb3JBcmVhKHlTY2FsZSwgY2hhcnRBcmVhLCAndG9wJyksXG4gICAgICAgICAgICBib3R0b206IGdldFNpemVGb3JBcmVhKHlTY2FsZSwgY2hhcnRBcmVhLCAnYm90dG9tJylcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGNoYXJ0QXJlYTtcbn1cbmNsYXNzIENoYXJ0IHtcbiAgICBzdGF0aWMgZGVmYXVsdHMgPSBkZWZhdWx0cztcbiAgICBzdGF0aWMgaW5zdGFuY2VzID0gaW5zdGFuY2VzO1xuICAgIHN0YXRpYyBvdmVycmlkZXMgPSBvdmVycmlkZXM7XG4gICAgc3RhdGljIHJlZ2lzdHJ5ID0gcmVnaXN0cnk7XG4gICAgc3RhdGljIHZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIHN0YXRpYyBnZXRDaGFydCA9IGdldENoYXJ0O1xuICAgIHN0YXRpYyByZWdpc3RlciguLi5pdGVtcykge1xuICAgICAgICByZWdpc3RyeS5hZGQoLi4uaXRlbXMpO1xuICAgICAgICBpbnZhbGlkYXRlUGx1Z2lucygpO1xuICAgIH1cbiAgICBzdGF0aWMgdW5yZWdpc3RlciguLi5pdGVtcykge1xuICAgICAgICByZWdpc3RyeS5yZW1vdmUoLi4uaXRlbXMpO1xuICAgICAgICBpbnZhbGlkYXRlUGx1Z2lucygpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpdGVtLCB1c2VyQ29uZmlnKXtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcgPSBuZXcgQ29uZmlnKHVzZXJDb25maWcpO1xuICAgICAgICBjb25zdCBpbml0aWFsQ2FudmFzID0gZ2V0Q2FudmFzKGl0ZW0pO1xuICAgICAgICBjb25zdCBleGlzdGluZ0NoYXJ0ID0gZ2V0Q2hhcnQoaW5pdGlhbENhbnZhcyk7XG4gICAgICAgIGlmIChleGlzdGluZ0NoYXJ0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbnZhcyBpcyBhbHJlYWR5IGluIHVzZS4gQ2hhcnQgd2l0aCBJRCBcXCcnICsgZXhpc3RpbmdDaGFydC5pZCArICdcXCcnICsgJyBtdXN0IGJlIGRlc3Ryb3llZCBiZWZvcmUgdGhlIGNhbnZhcyB3aXRoIElEIFxcJycgKyBleGlzdGluZ0NoYXJ0LmNhbnZhcy5pZCArICdcXCcgY2FuIGJlIHJldXNlZC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0gY29uZmlnLmNyZWF0ZVJlc29sdmVyKGNvbmZpZy5jaGFydE9wdGlvblNjb3BlcygpLCB0aGlzLmdldENvbnRleHQoKSk7XG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBuZXcgKGNvbmZpZy5wbGF0Zm9ybSB8fCBfZGV0ZWN0UGxhdGZvcm0oaW5pdGlhbENhbnZhcykpKCk7XG4gICAgICAgIHRoaXMucGxhdGZvcm0udXBkYXRlQ29uZmlnKGNvbmZpZyk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnBsYXRmb3JtLmFjcXVpcmVDb250ZXh0KGluaXRpYWxDYW52YXMsIG9wdGlvbnMuYXNwZWN0UmF0aW8pO1xuICAgICAgICBjb25zdCBjYW52YXMgPSBjb250ZXh0ICYmIGNvbnRleHQuY2FudmFzO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBjYW52YXMgJiYgY2FudmFzLmhlaWdodDtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBjYW52YXMgJiYgY2FudmFzLndpZHRoO1xuICAgICAgICB0aGlzLmlkID0gdWlkKCk7XG4gICAgICAgIHRoaXMuY3R4ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy5jYW52YXMgPSBjYW52YXM7XG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLl9hc3BlY3RSYXRpbyA9IHRoaXMuYXNwZWN0UmF0aW87XG4gICAgICAgIHRoaXMuX2xheWVycyA9IFtdO1xuICAgICAgICB0aGlzLl9tZXRhc2V0cyA9IFtdO1xuICAgICAgICB0aGlzLl9zdGFja3MgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYm94ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jaGFydEFyZWEgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IFtdO1xuICAgICAgICB0aGlzLl9sYXN0RXZlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xuICAgICAgICAgdGhpcy5fcmVzcG9uc2l2ZUxpc3RlbmVycyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fc29ydGVkTWV0YXNldHMgPSBbXTtcbiAgICAgICAgdGhpcy5zY2FsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fcGx1Z2lucyA9IG5ldyBQbHVnaW5TZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMuJHByb3hpZXMgPSB7fTtcbiAgICAgICAgdGhpcy5faGlkZGVuSW5kaWNlcyA9IHt9O1xuICAgICAgICB0aGlzLmF0dGFjaGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy4kY29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fZG9SZXNpemUgPSBkZWJvdW5jZSgobW9kZSk9PnRoaXMudXBkYXRlKG1vZGUpLCBvcHRpb25zLnJlc2l6ZURlbGF5IHx8IDApO1xuICAgICAgICB0aGlzLl9kYXRhQ2hhbmdlcyA9IFtdO1xuICAgICAgICBpbnN0YW5jZXNbdGhpcy5pZF0gPSB0aGlzO1xuICAgICAgICBpZiAoIWNvbnRleHQgfHwgIWNhbnZhcykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgY2hhcnQ6IGNhbid0IGFjcXVpcmUgY29udGV4dCBmcm9tIHRoZSBnaXZlbiBpdGVtXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGFuaW1hdG9yLmxpc3Rlbih0aGlzLCAnY29tcGxldGUnLCBvbkFuaW1hdGlvbnNDb21wbGV0ZSk7XG4gICAgICAgIGFuaW1hdG9yLmxpc3Rlbih0aGlzLCAncHJvZ3Jlc3MnLCBvbkFuaW1hdGlvblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZSgpO1xuICAgICAgICBpZiAodGhpcy5hdHRhY2hlZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgYXNwZWN0UmF0aW8oKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uczogeyBhc3BlY3RSYXRpbyAsIG1haW50YWluQXNwZWN0UmF0aW8gIH0gLCB3aWR0aCAsIGhlaWdodCAsIF9hc3BlY3RSYXRpbyAgfSA9IHRoaXM7XG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZihhc3BlY3RSYXRpbykpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3BlY3RSYXRpbztcbiAgICAgICAgfVxuICAgICAgICBpZiAobWFpbnRhaW5Bc3BlY3RSYXRpbyAmJiBfYXNwZWN0UmF0aW8pIHtcbiAgICAgICAgICAgIHJldHVybiBfYXNwZWN0UmF0aW87XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhlaWdodCA/IHdpZHRoIC8gaGVpZ2h0IDogbnVsbDtcbiAgICB9XG4gICAgZ2V0IGRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhO1xuICAgIH1cbiAgICBzZXQgZGF0YShkYXRhKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmRhdGEgPSBkYXRhO1xuICAgIH1cbiAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gICAgfVxuICAgIHNldCBvcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIGdldCByZWdpc3RyeSgpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5O1xuICAgIH1cbiBfaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdiZWZvcmVJbml0Jyk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNpemUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldGluYVNjYWxlKHRoaXMsIHRoaXMub3B0aW9ucy5kZXZpY2VQaXhlbFJhdGlvKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJpbmRFdmVudHMoKTtcbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckluaXQnKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNsZWFyKCkge1xuICAgICAgICBjbGVhckNhbnZhcyh0aGlzLmNhbnZhcywgdGhpcy5jdHgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgYW5pbWF0b3Iuc3RvcCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuIHJlc2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIGlmICghYW5pbWF0b3IucnVubmluZyh0aGlzKSkge1xuICAgICAgICAgICAgdGhpcy5fcmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVzaXplQmVmb3JlRHJhdyA9IHtcbiAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3Jlc2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuY2FudmFzO1xuICAgICAgICBjb25zdCBhc3BlY3RSYXRpbyA9IG9wdGlvbnMubWFpbnRhaW5Bc3BlY3RSYXRpbyAmJiB0aGlzLmFzcGVjdFJhdGlvO1xuICAgICAgICBjb25zdCBuZXdTaXplID0gdGhpcy5wbGF0Zm9ybS5nZXRNYXhpbXVtU2l6ZShjYW52YXMsIHdpZHRoLCBoZWlnaHQsIGFzcGVjdFJhdGlvKTtcbiAgICAgICAgY29uc3QgbmV3UmF0aW8gPSBvcHRpb25zLmRldmljZVBpeGVsUmF0aW8gfHwgdGhpcy5wbGF0Zm9ybS5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XG4gICAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLndpZHRoID8gJ3Jlc2l6ZScgOiAnYXR0YWNoJztcbiAgICAgICAgdGhpcy53aWR0aCA9IG5ld1NpemUud2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gbmV3U2l6ZS5oZWlnaHQ7XG4gICAgICAgIHRoaXMuX2FzcGVjdFJhdGlvID0gdGhpcy5hc3BlY3RSYXRpbztcbiAgICAgICAgaWYgKCFyZXRpbmFTY2FsZSh0aGlzLCBuZXdSYXRpbywgdHJ1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vdGlmeVBsdWdpbnMoJ3Jlc2l6ZScsIHtcbiAgICAgICAgICAgIHNpemU6IG5ld1NpemVcbiAgICAgICAgfSk7XG4gICAgICAgIGNhbGxiYWNrKG9wdGlvbnMub25SZXNpemUsIFtcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBuZXdTaXplXG4gICAgICAgIF0sIHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5hdHRhY2hlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RvUmVzaXplKG1vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbnN1cmVTY2FsZXNIYXZlSURzKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBzY2FsZXNPcHRpb25zID0gb3B0aW9ucy5zY2FsZXMgfHwge307XG4gICAgICAgIGVhY2goc2NhbGVzT3B0aW9ucywgKGF4aXNPcHRpb25zLCBheGlzSUQpPT57XG4gICAgICAgICAgICBheGlzT3B0aW9ucy5pZCA9IGF4aXNJRDtcbiAgICAgICAgfSk7XG4gICAgfVxuIGJ1aWxkT3JVcGRhdGVTY2FsZXMoKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHNjYWxlT3B0cyA9IG9wdGlvbnMuc2NhbGVzO1xuICAgICAgICBjb25zdCBzY2FsZXMgPSB0aGlzLnNjYWxlcztcbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IE9iamVjdC5rZXlzKHNjYWxlcykucmVkdWNlKChvYmosIGlkKT0+e1xuICAgICAgICAgICAgb2JqW2lkXSA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfSwge30pO1xuICAgICAgICBsZXQgaXRlbXMgPSBbXTtcbiAgICAgICAgaWYgKHNjYWxlT3B0cykge1xuICAgICAgICAgICAgaXRlbXMgPSBpdGVtcy5jb25jYXQoT2JqZWN0LmtleXMoc2NhbGVPcHRzKS5tYXAoKGlkKT0+e1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlT3B0aW9ucyA9IHNjYWxlT3B0c1tpZF07XG4gICAgICAgICAgICAgICAgY29uc3QgYXhpcyA9IGRldGVybWluZUF4aXMoaWQsIHNjYWxlT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNSYWRpYWwgPSBheGlzID09PSAncic7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gYXhpcyA9PT0gJ3gnO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHNjYWxlT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgZHBvc2l0aW9uOiBpc1JhZGlhbCA/ICdjaGFydEFyZWEnIDogaXNIb3Jpem9udGFsID8gJ2JvdHRvbScgOiAnbGVmdCcsXG4gICAgICAgICAgICAgICAgICAgIGR0eXBlOiBpc1JhZGlhbCA/ICdyYWRpYWxMaW5lYXInIDogaXNIb3Jpem9udGFsID8gJ2NhdGVnb3J5JyA6ICdsaW5lYXInXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBlYWNoKGl0ZW1zLCAoaXRlbSk9PntcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlT3B0aW9ucyA9IGl0ZW0ub3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGlkID0gc2NhbGVPcHRpb25zLmlkO1xuICAgICAgICAgICAgY29uc3QgYXhpcyA9IGRldGVybWluZUF4aXMoaWQsIHNjYWxlT3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBzY2FsZVR5cGUgPSB2YWx1ZU9yRGVmYXVsdChzY2FsZU9wdGlvbnMudHlwZSwgaXRlbS5kdHlwZSk7XG4gICAgICAgICAgICBpZiAoc2NhbGVPcHRpb25zLnBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb25Jc0hvcml6b250YWwoc2NhbGVPcHRpb25zLnBvc2l0aW9uLCBheGlzKSAhPT0gcG9zaXRpb25Jc0hvcml6b250YWwoaXRlbS5kcG9zaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgc2NhbGVPcHRpb25zLnBvc2l0aW9uID0gaXRlbS5kcG9zaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVkW2lkXSA9IHRydWU7XG4gICAgICAgICAgICBsZXQgc2NhbGUgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGlkIGluIHNjYWxlcyAmJiBzY2FsZXNbaWRdLnR5cGUgPT09IHNjYWxlVHlwZSkge1xuICAgICAgICAgICAgICAgIHNjYWxlID0gc2NhbGVzW2lkXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NhbGVDbGFzcyA9IHJlZ2lzdHJ5LmdldFNjYWxlKHNjYWxlVHlwZSk7XG4gICAgICAgICAgICAgICAgc2NhbGUgPSBuZXcgc2NhbGVDbGFzcyh7XG4gICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBzY2FsZVR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGN0eDogdGhpcy5jdHgsXG4gICAgICAgICAgICAgICAgICAgIGNoYXJ0OiB0aGlzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc2NhbGVzW3NjYWxlLmlkXSA9IHNjYWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2NhbGUuaW5pdChzY2FsZU9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaCh1cGRhdGVkLCAoaGFzVXBkYXRlZCwgaWQpPT57XG4gICAgICAgICAgICBpZiAoIWhhc1VwZGF0ZWQpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgc2NhbGVzW2lkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2goc2NhbGVzLCAoc2NhbGUpPT57XG4gICAgICAgICAgICBsYXlvdXRzLmNvbmZpZ3VyZSh0aGlzLCBzY2FsZSwgc2NhbGUub3B0aW9ucyk7XG4gICAgICAgICAgICBsYXlvdXRzLmFkZEJveCh0aGlzLCBzY2FsZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiBfdXBkYXRlTWV0YXNldHMoKSB7XG4gICAgICAgIGNvbnN0IG1ldGFzZXRzID0gdGhpcy5fbWV0YXNldHM7XG4gICAgICAgIGNvbnN0IG51bURhdGEgPSB0aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoO1xuICAgICAgICBjb25zdCBudW1NZXRhID0gbWV0YXNldHMubGVuZ3RoO1xuICAgICAgICBtZXRhc2V0cy5zb3J0KChhLCBiKT0+YS5pbmRleCAtIGIuaW5kZXgpO1xuICAgICAgICBpZiAobnVtTWV0YSA+IG51bURhdGEpIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IG51bURhdGE7IGkgPCBudW1NZXRhOyArK2kpe1xuICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lEYXRhc2V0TWV0YShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1ldGFzZXRzLnNwbGljZShudW1EYXRhLCBudW1NZXRhIC0gbnVtRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc29ydGVkTWV0YXNldHMgPSBtZXRhc2V0cy5zbGljZSgwKS5zb3J0KGNvbXBhcmUyTGV2ZWwoJ29yZGVyJywgJ2luZGV4JykpO1xuICAgIH1cbiBfcmVtb3ZlVW5yZWZlcmVuY2VkTWV0YXNldHMoKSB7XG4gICAgICAgIGNvbnN0IHsgX21ldGFzZXRzOiBtZXRhc2V0cyAsIGRhdGE6IHsgZGF0YXNldHMgIH0gIH0gPSB0aGlzO1xuICAgICAgICBpZiAobWV0YXNldHMubGVuZ3RoID4gZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fc3RhY2tzO1xuICAgICAgICB9XG4gICAgICAgIG1ldGFzZXRzLmZvckVhY2goKG1ldGEsIGluZGV4KT0+e1xuICAgICAgICAgICAgaWYgKGRhdGFzZXRzLmZpbHRlcigoeCk9PnggPT09IG1ldGEuX2RhdGFzZXQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lEYXRhc2V0TWV0YShpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBidWlsZE9yVXBkYXRlQ29udHJvbGxlcnMoKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbnRyb2xsZXJzID0gW107XG4gICAgICAgIGNvbnN0IGRhdGFzZXRzID0gdGhpcy5kYXRhLmRhdGFzZXRzO1xuICAgICAgICBsZXQgaSwgaWxlbjtcbiAgICAgICAgdGhpcy5fcmVtb3ZlVW5yZWZlcmVuY2VkTWV0YXNldHMoKTtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gZGF0YXNldHMubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKXtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tpXTtcbiAgICAgICAgICAgIGxldCBtZXRhID0gdGhpcy5nZXREYXRhc2V0TWV0YShpKTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBkYXRhc2V0LnR5cGUgfHwgdGhpcy5jb25maWcudHlwZTtcbiAgICAgICAgICAgIGlmIChtZXRhLnR5cGUgJiYgbWV0YS50eXBlICE9PSB0eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVzdHJveURhdGFzZXRNZXRhKGkpO1xuICAgICAgICAgICAgICAgIG1ldGEgPSB0aGlzLmdldERhdGFzZXRNZXRhKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWV0YS50eXBlID0gdHlwZTtcbiAgICAgICAgICAgIG1ldGEuaW5kZXhBeGlzID0gZGF0YXNldC5pbmRleEF4aXMgfHwgZ2V0SW5kZXhBeGlzKHR5cGUsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgICBtZXRhLm9yZGVyID0gZGF0YXNldC5vcmRlciB8fCAwO1xuICAgICAgICAgICAgbWV0YS5pbmRleCA9IGk7XG4gICAgICAgICAgICBtZXRhLmxhYmVsID0gJycgKyBkYXRhc2V0LmxhYmVsO1xuICAgICAgICAgICAgbWV0YS52aXNpYmxlID0gdGhpcy5pc0RhdGFzZXRWaXNpYmxlKGkpO1xuICAgICAgICAgICAgaWYgKG1ldGEuY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIG1ldGEuY29udHJvbGxlci51cGRhdGVJbmRleChpKTtcbiAgICAgICAgICAgICAgICBtZXRhLmNvbnRyb2xsZXIubGlua1NjYWxlcygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBDb250cm9sbGVyQ2xhc3MgPSByZWdpc3RyeS5nZXRDb250cm9sbGVyKHR5cGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YXNldEVsZW1lbnRUeXBlICwgZGF0YUVsZW1lbnRUeXBlICB9ID0gZGVmYXVsdHMuZGF0YXNldHNbdHlwZV07XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihDb250cm9sbGVyQ2xhc3MsIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUVsZW1lbnRUeXBlOiByZWdpc3RyeS5nZXRFbGVtZW50KGRhdGFFbGVtZW50VHlwZSksXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXRFbGVtZW50VHlwZTogZGF0YXNldEVsZW1lbnRUeXBlICYmIHJlZ2lzdHJ5LmdldEVsZW1lbnQoZGF0YXNldEVsZW1lbnRUeXBlKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG1ldGEuY29udHJvbGxlciA9IG5ldyBDb250cm9sbGVyQ2xhc3ModGhpcywgaSk7XG4gICAgICAgICAgICAgICAgbmV3Q29udHJvbGxlcnMucHVzaChtZXRhLmNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3VwZGF0ZU1ldGFzZXRzKCk7XG4gICAgICAgIHJldHVybiBuZXdDb250cm9sbGVycztcbiAgICB9XG4gX3Jlc2V0RWxlbWVudHMoKSB7XG4gICAgICAgIGVhY2godGhpcy5kYXRhLmRhdGFzZXRzLCAoZGF0YXNldCwgZGF0YXNldEluZGV4KT0+e1xuICAgICAgICAgICAgdGhpcy5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpLmNvbnRyb2xsZXIucmVzZXQoKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfVxuIHJlc2V0KCkge1xuICAgICAgICB0aGlzLl9yZXNldEVsZW1lbnRzKCk7XG4gICAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygncmVzZXQnKTtcbiAgICB9XG4gICAgdXBkYXRlKG1vZGUpIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgICAgIGNvbmZpZy51cGRhdGUoKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX29wdGlvbnMgPSBjb25maWcuY3JlYXRlUmVzb2x2ZXIoY29uZmlnLmNoYXJ0T3B0aW9uU2NvcGVzKCksIHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgICAgICAgY29uc3QgYW5pbXNEaXNhYmxlZCA9IHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCA9ICFvcHRpb25zLmFuaW1hdGlvbjtcbiAgICAgICAgdGhpcy5fdXBkYXRlU2NhbGVzKCk7XG4gICAgICAgIHRoaXMuX2NoZWNrRXZlbnRCaW5kaW5ncygpO1xuICAgICAgICB0aGlzLl91cGRhdGVIaWRkZW5JbmRpY2VzKCk7XG4gICAgICAgIHRoaXMuX3BsdWdpbnMuaW52YWxpZGF0ZSgpO1xuICAgICAgICBpZiAodGhpcy5ub3RpZnlQbHVnaW5zKCdiZWZvcmVVcGRhdGUnLCB7XG4gICAgICAgICAgICBtb2RlLFxuICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgICB9KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdDb250cm9sbGVycyA9IHRoaXMuYnVpbGRPclVwZGF0ZUNvbnRyb2xsZXJzKCk7XG4gICAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRWxlbWVudHNVcGRhdGUnKTtcbiAgICAgICAgbGV0IG1pblBhZGRpbmcgPSAwO1xuICAgICAgICBmb3IobGV0IGkgPSAwLCBpbGVuID0gdGhpcy5kYXRhLmRhdGFzZXRzLmxlbmd0aDsgaSA8IGlsZW47IGkrKyl7XG4gICAgICAgICAgICBjb25zdCB7IGNvbnRyb2xsZXIgIH0gPSB0aGlzLmdldERhdGFzZXRNZXRhKGkpO1xuICAgICAgICAgICAgY29uc3QgcmVzZXQgPSAhYW5pbXNEaXNhYmxlZCAmJiBuZXdDb250cm9sbGVycy5pbmRleE9mKGNvbnRyb2xsZXIpID09PSAtMTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuYnVpbGRPclVwZGF0ZUVsZW1lbnRzKHJlc2V0KTtcbiAgICAgICAgICAgIG1pblBhZGRpbmcgPSBNYXRoLm1heCgrY29udHJvbGxlci5nZXRNYXhPdmVyZmxvdygpLCBtaW5QYWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBtaW5QYWRkaW5nID0gdGhpcy5fbWluUGFkZGluZyA9IG9wdGlvbnMubGF5b3V0LmF1dG9QYWRkaW5nID8gbWluUGFkZGluZyA6IDA7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxheW91dChtaW5QYWRkaW5nKTtcbiAgICAgICAgaWYgKCFhbmltc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICBlYWNoKG5ld0NvbnRyb2xsZXJzLCAoY29udHJvbGxlcik9PntcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnJlc2V0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cGRhdGVEYXRhc2V0cyhtb2RlKTtcbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlclVwZGF0ZScsIHtcbiAgICAgICAgICAgIG1vZGVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2xheWVycy5zb3J0KGNvbXBhcmUyTGV2ZWwoJ3onLCAnX2lkeCcpKTtcbiAgICAgICAgY29uc3QgeyBfYWN0aXZlICwgX2xhc3RFdmVudCAgfSA9IHRoaXM7XG4gICAgICAgIGlmIChfbGFzdEV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9ldmVudEhhbmRsZXIoX2xhc3RFdmVudCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoX2FjdGl2ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhvdmVyU3R5bGVzKF9hY3RpdmUsIF9hY3RpdmUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuIF91cGRhdGVTY2FsZXMoKSB7XG4gICAgICAgIGVhY2godGhpcy5zY2FsZXMsIChzY2FsZSk9PntcbiAgICAgICAgICAgIGxheW91dHMucmVtb3ZlQm94KHRoaXMsIHNjYWxlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZW5zdXJlU2NhbGVzSGF2ZUlEcygpO1xuICAgICAgICB0aGlzLmJ1aWxkT3JVcGRhdGVTY2FsZXMoKTtcbiAgICB9XG4gX2NoZWNrRXZlbnRCaW5kaW5ncygpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgZXhpc3RpbmdFdmVudHMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKHRoaXMuX2xpc3RlbmVycykpO1xuICAgICAgICBjb25zdCBuZXdFdmVudHMgPSBuZXcgU2V0KG9wdGlvbnMuZXZlbnRzKTtcbiAgICAgICAgaWYgKCFzZXRzRXF1YWwoZXhpc3RpbmdFdmVudHMsIG5ld0V2ZW50cykgfHwgISF0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzICE9PSBvcHRpb25zLnJlc3BvbnNpdmUpIHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRXZlbnRzKCk7XG4gICAgICAgICAgICB0aGlzLmJpbmRFdmVudHMoKTtcbiAgICAgICAgfVxuICAgIH1cbiBfdXBkYXRlSGlkZGVuSW5kaWNlcygpIHtcbiAgICAgICAgY29uc3QgeyBfaGlkZGVuSW5kaWNlcyAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLl9nZXRVbmlmb3JtRGF0YUNoYW5nZXMoKSB8fCBbXTtcbiAgICAgICAgZm9yIChjb25zdCB7IG1ldGhvZCAsIHN0YXJ0ICwgY291bnQgIH0gb2YgY2hhbmdlcyl7XG4gICAgICAgICAgICBjb25zdCBtb3ZlID0gbWV0aG9kID09PSAnX3JlbW92ZUVsZW1lbnRzJyA/IC1jb3VudCA6IGNvdW50O1xuICAgICAgICAgICAgbW92ZU51bWVyaWNLZXlzKF9oaWRkZW5JbmRpY2VzLCBzdGFydCwgbW92ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gX2dldFVuaWZvcm1EYXRhQ2hhbmdlcygpIHtcbiAgICAgICAgY29uc3QgX2RhdGFDaGFuZ2VzID0gdGhpcy5fZGF0YUNoYW5nZXM7XG4gICAgICAgIGlmICghX2RhdGFDaGFuZ2VzIHx8ICFfZGF0YUNoYW5nZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGF0YUNoYW5nZXMgPSBbXTtcbiAgICAgICAgY29uc3QgZGF0YXNldENvdW50ID0gdGhpcy5kYXRhLmRhdGFzZXRzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbWFrZVNldCA9IChpZHgpPT5uZXcgU2V0KF9kYXRhQ2hhbmdlcy5maWx0ZXIoKGMpPT5jWzBdID09PSBpZHgpLm1hcCgoYywgaSk9PmkgKyAnLCcgKyBjLnNwbGljZSgxKS5qb2luKCcsJykpKTtcbiAgICAgICAgY29uc3QgY2hhbmdlU2V0ID0gbWFrZVNldCgwKTtcbiAgICAgICAgZm9yKGxldCBpID0gMTsgaSA8IGRhdGFzZXRDb3VudDsgaSsrKXtcbiAgICAgICAgICAgIGlmICghc2V0c0VxdWFsKGNoYW5nZVNldCwgbWFrZVNldChpKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oY2hhbmdlU2V0KS5tYXAoKGMpPT5jLnNwbGl0KCcsJykpLm1hcCgoYSk9Pih7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBhWzFdLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiArYVsyXSxcbiAgICAgICAgICAgICAgICBjb3VudDogK2FbM11cbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG4gX3VwZGF0ZUxheW91dChtaW5QYWRkaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLm5vdGlmeVBsdWdpbnMoJ2JlZm9yZUxheW91dCcsIHtcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgICAgfSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGF5b3V0cy51cGRhdGUodGhpcywgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG1pblBhZGRpbmcpO1xuICAgICAgICBjb25zdCBhcmVhID0gdGhpcy5jaGFydEFyZWE7XG4gICAgICAgIGNvbnN0IG5vQXJlYSA9IGFyZWEud2lkdGggPD0gMCB8fCBhcmVhLmhlaWdodCA8PSAwO1xuICAgICAgICB0aGlzLl9sYXllcnMgPSBbXTtcbiAgICAgICAgZWFjaCh0aGlzLmJveGVzLCAoYm94KT0+e1xuICAgICAgICAgICAgaWYgKG5vQXJlYSAmJiBib3gucG9zaXRpb24gPT09ICdjaGFydEFyZWEnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJveC5jb25maWd1cmUpIHtcbiAgICAgICAgICAgICAgICBib3guY29uZmlndXJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9sYXllcnMucHVzaCguLi5ib3guX2xheWVycygpKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIHRoaXMuX2xheWVycy5mb3JFYWNoKChpdGVtLCBpbmRleCk9PntcbiAgICAgICAgICAgIGl0ZW0uX2lkeCA9IGluZGV4O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckxheW91dCcpO1xuICAgIH1cbiBfdXBkYXRlRGF0YXNldHMobW9kZSkge1xuICAgICAgICBpZiAodGhpcy5ub3RpZnlQbHVnaW5zKCdiZWZvcmVEYXRhc2V0c1VwZGF0ZScsIHtcbiAgICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgICAgIH0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvcihsZXQgaSA9IDAsIGlsZW4gPSB0aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YXNldE1ldGEoaSkuY29udHJvbGxlci5jb25maWd1cmUoKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IobGV0IGkgPSAwLCBpbGVuID0gdGhpcy5kYXRhLmRhdGFzZXRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVEYXRhc2V0KGksIGlzRnVuY3Rpb24obW9kZSkgPyBtb2RlKHtcbiAgICAgICAgICAgICAgICBkYXRhc2V0SW5kZXg6IGlcbiAgICAgICAgICAgIH0pIDogbW9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckRhdGFzZXRzVXBkYXRlJywge1xuICAgICAgICAgICAgbW9kZVxuICAgICAgICB9KTtcbiAgICB9XG4gX3VwZGF0ZURhdGFzZXQoaW5kZXgsIG1vZGUpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuZ2V0RGF0YXNldE1ldGEoaW5kZXgpO1xuICAgICAgICBjb25zdCBhcmdzID0ge1xuICAgICAgICAgICAgbWV0YSxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgbW9kZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRGF0YXNldFVwZGF0ZScsIGFyZ3MpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG1ldGEuY29udHJvbGxlci5fdXBkYXRlKG1vZGUpO1xuICAgICAgICBhcmdzLmNhbmNlbGFibGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckRhdGFzZXRVcGRhdGUnLCBhcmdzKTtcbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBpZiAodGhpcy5ub3RpZnlQbHVnaW5zKCdiZWZvcmVSZW5kZXInLCB7XG4gICAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgICAgIH0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbmltYXRvci5oYXModGhpcykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaGVkICYmICFhbmltYXRvci5ydW5uaW5nKHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgYW5pbWF0b3Iuc3RhcnQodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgICAgIG9uQW5pbWF0aW9uc0NvbXBsZXRlKHtcbiAgICAgICAgICAgICAgICBjaGFydDogdGhpc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZHJhdygpIHtcbiAgICAgICAgbGV0IGk7XG4gICAgICAgIGlmICh0aGlzLl9yZXNpemVCZWZvcmVEcmF3KSB7XG4gICAgICAgICAgICBjb25zdCB7IHdpZHRoICwgaGVpZ2h0ICB9ID0gdGhpcy5fcmVzaXplQmVmb3JlRHJhdztcbiAgICAgICAgICAgIHRoaXMuX3Jlc2l6ZUJlZm9yZURyYXcgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fcmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRHJhdycsIHtcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgICAgfSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGF5ZXJzID0gdGhpcy5fbGF5ZXJzO1xuICAgICAgICBmb3IoaSA9IDA7IGkgPCBsYXllcnMubGVuZ3RoICYmIGxheWVyc1tpXS56IDw9IDA7ICsraSl7XG4gICAgICAgICAgICBsYXllcnNbaV0uZHJhdyh0aGlzLmNoYXJ0QXJlYSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZHJhd0RhdGFzZXRzKCk7XG4gICAgICAgIGZvcig7IGkgPCBsYXllcnMubGVuZ3RoOyArK2kpe1xuICAgICAgICAgICAgbGF5ZXJzW2ldLmRyYXcodGhpcy5jaGFydEFyZWEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYWZ0ZXJEcmF3Jyk7XG4gICAgfVxuIF9nZXRTb3J0ZWREYXRhc2V0TWV0YXMoZmlsdGVyVmlzaWJsZSkge1xuICAgICAgICBjb25zdCBtZXRhc2V0cyA9IHRoaXMuX3NvcnRlZE1ldGFzZXRzO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IGksIGlsZW47XG4gICAgICAgIGZvcihpID0gMCwgaWxlbiA9IG1ldGFzZXRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBjb25zdCBtZXRhID0gbWV0YXNldHNbaV07XG4gICAgICAgICAgICBpZiAoIWZpbHRlclZpc2libGUgfHwgbWV0YS52aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobWV0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFNvcnRlZERhdGFzZXRNZXRhcyh0cnVlKTtcbiAgICB9XG4gX2RyYXdEYXRhc2V0cygpIHtcbiAgICAgICAgaWYgKHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRGF0YXNldHNEcmF3Jywge1xuICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgICB9KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXRhc2V0cyA9IHRoaXMuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpO1xuICAgICAgICBmb3IobGV0IGkgPSBtZXRhc2V0cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSl7XG4gICAgICAgICAgICB0aGlzLl9kcmF3RGF0YXNldChtZXRhc2V0c1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckRhdGFzZXRzRHJhdycpO1xuICAgIH1cbiBfZHJhd0RhdGFzZXQobWV0YSkge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgY29uc3QgY2xpcCA9IG1ldGEuX2NsaXA7XG4gICAgICAgIGNvbnN0IHVzZUNsaXAgPSAhY2xpcC5kaXNhYmxlZDtcbiAgICAgICAgY29uc3QgYXJlYSA9IGdldERhdGFzZXRBcmVhKG1ldGEsIHRoaXMuY2hhcnRBcmVhKTtcbiAgICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgICAgIG1ldGEsXG4gICAgICAgICAgICBpbmRleDogbWV0YS5pbmRleCxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRGF0YXNldERyYXcnLCBhcmdzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXNlQ2xpcCkge1xuICAgICAgICAgICAgY2xpcEFyZWEoY3R4LCB7XG4gICAgICAgICAgICAgICAgbGVmdDogY2xpcC5sZWZ0ID09PSBmYWxzZSA/IDAgOiBhcmVhLmxlZnQgLSBjbGlwLmxlZnQsXG4gICAgICAgICAgICAgICAgcmlnaHQ6IGNsaXAucmlnaHQgPT09IGZhbHNlID8gdGhpcy53aWR0aCA6IGFyZWEucmlnaHQgKyBjbGlwLnJpZ2h0LFxuICAgICAgICAgICAgICAgIHRvcDogY2xpcC50b3AgPT09IGZhbHNlID8gMCA6IGFyZWEudG9wIC0gY2xpcC50b3AsXG4gICAgICAgICAgICAgICAgYm90dG9tOiBjbGlwLmJvdHRvbSA9PT0gZmFsc2UgPyB0aGlzLmhlaWdodCA6IGFyZWEuYm90dG9tICsgY2xpcC5ib3R0b21cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG1ldGEuY29udHJvbGxlci5kcmF3KCk7XG4gICAgICAgIGlmICh1c2VDbGlwKSB7XG4gICAgICAgICAgICB1bmNsaXBBcmVhKGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgYXJncy5jYW5jZWxhYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYWZ0ZXJEYXRhc2V0RHJhdycsIGFyZ3MpO1xuICAgIH1cbiBpc1BvaW50SW5BcmVhKHBvaW50KSB7XG4gICAgICAgIHJldHVybiBfaXNQb2ludEluQXJlYShwb2ludCwgdGhpcy5jaGFydEFyZWEsIHRoaXMuX21pblBhZGRpbmcpO1xuICAgIH1cbiAgICBnZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlKGUsIG1vZGUsIG9wdGlvbnMsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgbWV0aG9kID0gSW50ZXJhY3Rpb24ubW9kZXNbbW9kZV07XG4gICAgICAgIGlmICh0eXBlb2YgbWV0aG9kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gbWV0aG9kKHRoaXMsIGUsIG9wdGlvbnMsIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KSB7XG4gICAgICAgIGNvbnN0IGRhdGFzZXQgPSB0aGlzLmRhdGEuZGF0YXNldHNbZGF0YXNldEluZGV4XTtcbiAgICAgICAgY29uc3QgbWV0YXNldHMgPSB0aGlzLl9tZXRhc2V0cztcbiAgICAgICAgbGV0IG1ldGEgPSBtZXRhc2V0cy5maWx0ZXIoKHgpPT54ICYmIHguX2RhdGFzZXQgPT09IGRhdGFzZXQpLnBvcCgpO1xuICAgICAgICBpZiAoIW1ldGEpIHtcbiAgICAgICAgICAgIG1ldGEgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgICAgICAgICBkYXRhOiBbXSxcbiAgICAgICAgICAgICAgICBkYXRhc2V0OiBudWxsLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiBudWxsLFxuICAgICAgICAgICAgICAgIHhBeGlzSUQ6IG51bGwsXG4gICAgICAgICAgICAgICAgeUF4aXNJRDogbnVsbCxcbiAgICAgICAgICAgICAgICBvcmRlcjogZGF0YXNldCAmJiBkYXRhc2V0Lm9yZGVyIHx8IDAsXG4gICAgICAgICAgICAgICAgaW5kZXg6IGRhdGFzZXRJbmRleCxcbiAgICAgICAgICAgICAgICBfZGF0YXNldDogZGF0YXNldCxcbiAgICAgICAgICAgICAgICBfcGFyc2VkOiBbXSxcbiAgICAgICAgICAgICAgICBfc29ydGVkOiBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1ldGFzZXRzLnB1c2gobWV0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ldGE7XG4gICAgfVxuICAgIGdldENvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRjb250ZXh0IHx8ICh0aGlzLiRjb250ZXh0ID0gY3JlYXRlQ29udGV4dChudWxsLCB7XG4gICAgICAgICAgICBjaGFydDogdGhpcyxcbiAgICAgICAgICAgIHR5cGU6ICdjaGFydCdcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBnZXRWaXNpYmxlRGF0YXNldENvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzKCkubGVuZ3RoO1xuICAgIH1cbiAgICBpc0RhdGFzZXRWaXNpYmxlKGRhdGFzZXRJbmRleCkge1xuICAgICAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF07XG4gICAgICAgIGlmICghZGF0YXNldCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCk7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbWV0YS5oaWRkZW4gPT09ICdib29sZWFuJyA/ICFtZXRhLmhpZGRlbiA6ICFkYXRhc2V0LmhpZGRlbjtcbiAgICB9XG4gICAgc2V0RGF0YXNldFZpc2liaWxpdHkoZGF0YXNldEluZGV4LCB2aXNpYmxlKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCk7XG4gICAgICAgIG1ldGEuaGlkZGVuID0gIXZpc2libGU7XG4gICAgfVxuICAgIHRvZ2dsZURhdGFWaXNpYmlsaXR5KGluZGV4KSB7XG4gICAgICAgIHRoaXMuX2hpZGRlbkluZGljZXNbaW5kZXhdID0gIXRoaXMuX2hpZGRlbkluZGljZXNbaW5kZXhdO1xuICAgIH1cbiAgICBnZXREYXRhVmlzaWJpbGl0eShpbmRleCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuX2hpZGRlbkluZGljZXNbaW5kZXhdO1xuICAgIH1cbiBfdXBkYXRlVmlzaWJpbGl0eShkYXRhc2V0SW5kZXgsIGRhdGFJbmRleCwgdmlzaWJsZSkge1xuICAgICAgICBjb25zdCBtb2RlID0gdmlzaWJsZSA/ICdzaG93JyA6ICdoaWRlJztcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KTtcbiAgICAgICAgY29uc3QgYW5pbXMgPSBtZXRhLmNvbnRyb2xsZXIuX3Jlc29sdmVBbmltYXRpb25zKHVuZGVmaW5lZCwgbW9kZSk7XG4gICAgICAgIGlmIChkZWZpbmVkKGRhdGFJbmRleCkpIHtcbiAgICAgICAgICAgIG1ldGEuZGF0YVtkYXRhSW5kZXhdLmhpZGRlbiA9ICF2aXNpYmxlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YXNldFZpc2liaWxpdHkoZGF0YXNldEluZGV4LCB2aXNpYmxlKTtcbiAgICAgICAgICAgIGFuaW1zLnVwZGF0ZShtZXRhLCB7XG4gICAgICAgICAgICAgICAgdmlzaWJsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgoY3R4KT0+Y3R4LmRhdGFzZXRJbmRleCA9PT0gZGF0YXNldEluZGV4ID8gbW9kZSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGlkZShkYXRhc2V0SW5kZXgsIGRhdGFJbmRleCkge1xuICAgICAgICB0aGlzLl91cGRhdGVWaXNpYmlsaXR5KGRhdGFzZXRJbmRleCwgZGF0YUluZGV4LCBmYWxzZSk7XG4gICAgfVxuICAgIHNob3coZGF0YXNldEluZGV4LCBkYXRhSW5kZXgpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlzaWJpbGl0eShkYXRhc2V0SW5kZXgsIGRhdGFJbmRleCwgdHJ1ZSk7XG4gICAgfVxuIF9kZXN0cm95RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9tZXRhc2V0c1tkYXRhc2V0SW5kZXhdO1xuICAgICAgICBpZiAobWV0YSAmJiBtZXRhLmNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIG1ldGEuY29udHJvbGxlci5fZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9tZXRhc2V0c1tkYXRhc2V0SW5kZXhdO1xuICAgIH1cbiAgICBfc3RvcCgpIHtcbiAgICAgICAgbGV0IGksIGlsZW47XG4gICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICBhbmltYXRvci5yZW1vdmUodGhpcyk7XG4gICAgICAgIGZvcihpID0gMCwgaWxlbiA9IHRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgdGhpcy5fZGVzdHJveURhdGFzZXRNZXRhKGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRGVzdHJveScpO1xuICAgICAgICBjb25zdCB7IGNhbnZhcyAsIGN0eCAgfSA9IHRoaXM7XG4gICAgICAgIHRoaXMuX3N0b3AoKTtcbiAgICAgICAgdGhpcy5jb25maWcuY2xlYXJDYWNoZSgpO1xuICAgICAgICBpZiAoY2FudmFzKSB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEV2ZW50cygpO1xuICAgICAgICAgICAgY2xlYXJDYW52YXMoY2FudmFzLCBjdHgpO1xuICAgICAgICAgICAgdGhpcy5wbGF0Zm9ybS5yZWxlYXNlQ29udGV4dChjdHgpO1xuICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5jdHggPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBpbnN0YW5jZXNbdGhpcy5pZF07XG4gICAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYWZ0ZXJEZXN0cm95Jyk7XG4gICAgfVxuICAgIHRvQmFzZTY0SW1hZ2UoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMudG9EYXRhVVJMKC4uLmFyZ3MpO1xuICAgIH1cbiBiaW5kRXZlbnRzKCkge1xuICAgICAgICB0aGlzLmJpbmRVc2VyRXZlbnRzKCk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZSkge1xuICAgICAgICAgICAgdGhpcy5iaW5kUmVzcG9uc2l2ZUV2ZW50cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hdHRhY2hlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gYmluZFVzZXJFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycztcbiAgICAgICAgY29uc3QgcGxhdGZvcm0gPSB0aGlzLnBsYXRmb3JtO1xuICAgICAgICBjb25zdCBfYWRkID0gKHR5cGUsIGxpc3RlbmVyKT0+e1xuICAgICAgICAgICAgcGxhdGZvcm0uYWRkRXZlbnRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICBsaXN0ZW5lcnNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAoZSwgeCwgeSk9PntcbiAgICAgICAgICAgIGUub2Zmc2V0WCA9IHg7XG4gICAgICAgICAgICBlLm9mZnNldFkgPSB5O1xuICAgICAgICAgICAgdGhpcy5fZXZlbnRIYW5kbGVyKGUpO1xuICAgICAgICB9O1xuICAgICAgICBlYWNoKHRoaXMub3B0aW9ucy5ldmVudHMsICh0eXBlKT0+X2FkZCh0eXBlLCBsaXN0ZW5lcikpO1xuICAgIH1cbiBiaW5kUmVzcG9uc2l2ZUV2ZW50cygpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5fcmVzcG9uc2l2ZUxpc3RlbmVycztcbiAgICAgICAgY29uc3QgcGxhdGZvcm0gPSB0aGlzLnBsYXRmb3JtO1xuICAgICAgICBjb25zdCBfYWRkID0gKHR5cGUsIGxpc3RlbmVyKT0+e1xuICAgICAgICAgICAgcGxhdGZvcm0uYWRkRXZlbnRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICBsaXN0ZW5lcnNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgX3JlbW92ZSA9ICh0eXBlLCBsaXN0ZW5lcik9PntcbiAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbdHlwZV0pIHtcbiAgICAgICAgICAgICAgICBwbGF0Zm9ybS5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbGlzdGVuZXJzW3R5cGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsaXN0ZW5lciA9ICh3aWR0aCwgaGVpZ2h0KT0+e1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FudmFzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGxldCBkZXRhY2hlZDtcbiAgICAgICAgY29uc3QgYXR0YWNoZWQgPSAoKT0+e1xuICAgICAgICAgICAgX3JlbW92ZSgnYXR0YWNoJywgYXR0YWNoZWQpO1xuICAgICAgICAgICAgdGhpcy5hdHRhY2hlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZSgpO1xuICAgICAgICAgICAgX2FkZCgncmVzaXplJywgbGlzdGVuZXIpO1xuICAgICAgICAgICAgX2FkZCgnZGV0YWNoJywgZGV0YWNoZWQpO1xuICAgICAgICB9O1xuICAgICAgICBkZXRhY2hlZCA9ICgpPT57XG4gICAgICAgICAgICB0aGlzLmF0dGFjaGVkID0gZmFsc2U7XG4gICAgICAgICAgICBfcmVtb3ZlKCdyZXNpemUnLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICB0aGlzLl9zdG9wKCk7XG4gICAgICAgICAgICB0aGlzLl9yZXNpemUoMCwgMCk7XG4gICAgICAgICAgICBfYWRkKCdhdHRhY2gnLCBhdHRhY2hlZCk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChwbGF0Zm9ybS5pc0F0dGFjaGVkKHRoaXMuY2FudmFzKSkge1xuICAgICAgICAgICAgYXR0YWNoZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRldGFjaGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG4gdW5iaW5kRXZlbnRzKCkge1xuICAgICAgICBlYWNoKHRoaXMuX2xpc3RlbmVycywgKGxpc3RlbmVyLCB0eXBlKT0+e1xuICAgICAgICAgICAgdGhpcy5wbGF0Zm9ybS5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xuICAgICAgICBlYWNoKHRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnMsIChsaXN0ZW5lciwgdHlwZSk9PntcbiAgICAgICAgICAgIHRoaXMucGxhdGZvcm0ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lcik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB1cGRhdGVIb3ZlclN0eWxlKGl0ZW1zLCBtb2RlLCBlbmFibGVkKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGVuYWJsZWQgPyAnc2V0JyA6ICdyZW1vdmUnO1xuICAgICAgICBsZXQgbWV0YSwgaXRlbSwgaSwgaWxlbjtcbiAgICAgICAgaWYgKG1vZGUgPT09ICdkYXRhc2V0Jykge1xuICAgICAgICAgICAgbWV0YSA9IHRoaXMuZ2V0RGF0YXNldE1ldGEoaXRlbXNbMF0uZGF0YXNldEluZGV4KTtcbiAgICAgICAgICAgIG1ldGEuY29udHJvbGxlclsnXycgKyBwcmVmaXggKyAnRGF0YXNldEhvdmVyU3R5bGUnXSgpO1xuICAgICAgICB9XG4gICAgICAgIGZvcihpID0gMCwgaWxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gaXRlbSAmJiB0aGlzLmdldERhdGFzZXRNZXRhKGl0ZW0uZGF0YXNldEluZGV4KS5jb250cm9sbGVyO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyW3ByZWZpeCArICdIb3ZlclN0eWxlJ10oaXRlbS5lbGVtZW50LCBpdGVtLmRhdGFzZXRJbmRleCwgaXRlbS5pbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gZ2V0QWN0aXZlRWxlbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmUgfHwgW107XG4gICAgfVxuIHNldEFjdGl2ZUVsZW1lbnRzKGFjdGl2ZUVsZW1lbnRzKSB7XG4gICAgICAgIGNvbnN0IGxhc3RBY3RpdmUgPSB0aGlzLl9hY3RpdmUgfHwgW107XG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9IGFjdGl2ZUVsZW1lbnRzLm1hcCgoeyBkYXRhc2V0SW5kZXggLCBpbmRleCAgfSk9PntcbiAgICAgICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCk7XG4gICAgICAgICAgICBpZiAoIW1ldGEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGRhdGFzZXQgZm91bmQgYXQgaW5kZXggJyArIGRhdGFzZXRJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGFzZXRJbmRleCxcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBtZXRhLmRhdGFbaW5kZXhdLFxuICAgICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9ICFfZWxlbWVudHNFcXVhbChhY3RpdmUsIGxhc3RBY3RpdmUpO1xuICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlID0gYWN0aXZlO1xuICAgICAgICAgICAgdGhpcy5fbGFzdEV2ZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhvdmVyU3R5bGVzKGFjdGl2ZSwgbGFzdEFjdGl2ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gbm90aWZ5UGx1Z2lucyhob29rLCBhcmdzLCBmaWx0ZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsdWdpbnMubm90aWZ5KHRoaXMsIGhvb2ssIGFyZ3MsIGZpbHRlcik7XG4gICAgfVxuIGlzUGx1Z2luRW5hYmxlZChwbHVnaW5JZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGx1Z2lucy5fY2FjaGUuZmlsdGVyKChwKT0+cC5wbHVnaW4uaWQgPT09IHBsdWdpbklkKS5sZW5ndGggPT09IDE7XG4gICAgfVxuIF91cGRhdGVIb3ZlclN0eWxlcyhhY3RpdmUsIGxhc3RBY3RpdmUsIHJlcGxheSkge1xuICAgICAgICBjb25zdCBob3Zlck9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuaG92ZXI7XG4gICAgICAgIGNvbnN0IGRpZmYgPSAoYSwgYik9PmEuZmlsdGVyKCh4KT0+IWIuc29tZSgoeSk9PnguZGF0YXNldEluZGV4ID09PSB5LmRhdGFzZXRJbmRleCAmJiB4LmluZGV4ID09PSB5LmluZGV4KSk7XG4gICAgICAgIGNvbnN0IGRlYWN0aXZhdGVkID0gZGlmZihsYXN0QWN0aXZlLCBhY3RpdmUpO1xuICAgICAgICBjb25zdCBhY3RpdmF0ZWQgPSByZXBsYXkgPyBhY3RpdmUgOiBkaWZmKGFjdGl2ZSwgbGFzdEFjdGl2ZSk7XG4gICAgICAgIGlmIChkZWFjdGl2YXRlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSG92ZXJTdHlsZShkZWFjdGl2YXRlZCwgaG92ZXJPcHRpb25zLm1vZGUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aXZhdGVkLmxlbmd0aCAmJiBob3Zlck9wdGlvbnMubW9kZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVIb3ZlclN0eWxlKGFjdGl2YXRlZCwgaG92ZXJPcHRpb25zLm1vZGUsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuIF9ldmVudEhhbmRsZXIoZSwgcmVwbGF5KSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICAgICAgICBldmVudDogZSxcbiAgICAgICAgICAgIHJlcGxheSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgICAgICBpbkNoYXJ0QXJlYTogdGhpcy5pc1BvaW50SW5BcmVhKGUpXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGV2ZW50RmlsdGVyID0gKHBsdWdpbik9PihwbHVnaW4ub3B0aW9ucy5ldmVudHMgfHwgdGhpcy5vcHRpb25zLmV2ZW50cykuaW5jbHVkZXMoZS5uYXRpdmUudHlwZSk7XG4gICAgICAgIGlmICh0aGlzLm5vdGlmeVBsdWdpbnMoJ2JlZm9yZUV2ZW50JywgYXJncywgZXZlbnRGaWx0ZXIpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLl9oYW5kbGVFdmVudChlLCByZXBsYXksIGFyZ3MuaW5DaGFydEFyZWEpO1xuICAgICAgICBhcmdzLmNhbmNlbGFibGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckV2ZW50JywgYXJncywgZXZlbnRGaWx0ZXIpO1xuICAgICAgICBpZiAoY2hhbmdlZCB8fCBhcmdzLmNoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuIF9oYW5kbGVFdmVudChlLCByZXBsYXksIGluQ2hhcnRBcmVhKSB7XG4gICAgICAgIGNvbnN0IHsgX2FjdGl2ZTogbGFzdEFjdGl2ZSA9IFtdICwgb3B0aW9ucyAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHVzZUZpbmFsUG9zaXRpb24gPSByZXBsYXk7XG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuX2dldEFjdGl2ZUVsZW1lbnRzKGUsIGxhc3RBY3RpdmUsIGluQ2hhcnRBcmVhLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgaXNDbGljayA9IF9pc0NsaWNrRXZlbnQoZSk7XG4gICAgICAgIGNvbnN0IGxhc3RFdmVudCA9IGRldGVybWluZUxhc3RFdmVudChlLCB0aGlzLl9sYXN0RXZlbnQsIGluQ2hhcnRBcmVhLCBpc0NsaWNrKTtcbiAgICAgICAgaWYgKGluQ2hhcnRBcmVhKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXN0RXZlbnQgPSBudWxsO1xuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucy5vbkhvdmVyLCBbXG4gICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICBhY3RpdmUsXG4gICAgICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgICAgICBpZiAoaXNDbGljaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMub25DbGljaywgW1xuICAgICAgICAgICAgICAgICAgICBlLFxuICAgICAgICAgICAgICAgICAgICBhY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICAgICBdLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGFuZ2VkID0gIV9lbGVtZW50c0VxdWFsKGFjdGl2ZSwgbGFzdEFjdGl2ZSk7XG4gICAgICAgIGlmIChjaGFuZ2VkIHx8IHJlcGxheSkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlID0gYWN0aXZlO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlSG92ZXJTdHlsZXMoYWN0aXZlLCBsYXN0QWN0aXZlLCByZXBsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xhc3RFdmVudCA9IGxhc3RFdmVudDtcbiAgICAgICAgcmV0dXJuIGNoYW5nZWQ7XG4gICAgfVxuIF9nZXRBY3RpdmVFbGVtZW50cyhlLCBsYXN0QWN0aXZlLCBpbkNoYXJ0QXJlYSwgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICBpZiAoZS50eXBlID09PSAnbW91c2VvdXQnKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbkNoYXJ0QXJlYSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RBY3RpdmU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaG92ZXJPcHRpb25zID0gdGhpcy5vcHRpb25zLmhvdmVyO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlKGUsIGhvdmVyT3B0aW9ucy5tb2RlLCBob3Zlck9wdGlvbnMsIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGludmFsaWRhdGVQbHVnaW5zKCkge1xuICAgIHJldHVybiBlYWNoKENoYXJ0Lmluc3RhbmNlcywgKGNoYXJ0KT0+Y2hhcnQuX3BsdWdpbnMuaW52YWxpZGF0ZSgpKTtcbn1cblxuZnVuY3Rpb24gY2xpcEFyYyhjdHgsIGVsZW1lbnQsIGVuZEFuZ2xlKSB7XG4gICAgY29uc3QgeyBzdGFydEFuZ2xlICwgcGl4ZWxNYXJnaW4gLCB4ICwgeSAsIG91dGVyUmFkaXVzICwgaW5uZXJSYWRpdXMgIH0gPSBlbGVtZW50O1xuICAgIGxldCBhbmdsZU1hcmdpbiA9IHBpeGVsTWFyZ2luIC8gb3V0ZXJSYWRpdXM7XG4gICAgLy8gRHJhdyBhbiBpbm5lciBib3JkZXIgYnkgY2xpcHBpbmcgdGhlIGFyYyBhbmQgZHJhd2luZyBhIGRvdWJsZS13aWR0aCBib3JkZXJcbiAgICAvLyBFbmxhcmdlIHRoZSBjbGlwcGluZyBhcmMgYnkgMC4zMyBwaXhlbHMgdG8gZWxpbWluYXRlIGdsaXRjaGVzIGJldHdlZW4gYm9yZGVyc1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHguYXJjKHgsIHksIG91dGVyUmFkaXVzLCBzdGFydEFuZ2xlIC0gYW5nbGVNYXJnaW4sIGVuZEFuZ2xlICsgYW5nbGVNYXJnaW4pO1xuICAgIGlmIChpbm5lclJhZGl1cyA+IHBpeGVsTWFyZ2luKSB7XG4gICAgICAgIGFuZ2xlTWFyZ2luID0gcGl4ZWxNYXJnaW4gLyBpbm5lclJhZGl1cztcbiAgICAgICAgY3R4LmFyYyh4LCB5LCBpbm5lclJhZGl1cywgZW5kQW5nbGUgKyBhbmdsZU1hcmdpbiwgc3RhcnRBbmdsZSAtIGFuZ2xlTWFyZ2luLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjdHguYXJjKHgsIHksIHBpeGVsTWFyZ2luLCBlbmRBbmdsZSArIEhBTEZfUEksIHN0YXJ0QW5nbGUgLSBIQUxGX1BJKTtcbiAgICB9XG4gICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgIGN0eC5jbGlwKCk7XG59XG5mdW5jdGlvbiB0b1JhZGl1c0Nvcm5lcnModmFsdWUpIHtcbiAgICByZXR1cm4gX3JlYWRWYWx1ZVRvUHJvcHModmFsdWUsIFtcbiAgICAgICAgJ291dGVyU3RhcnQnLFxuICAgICAgICAnb3V0ZXJFbmQnLFxuICAgICAgICAnaW5uZXJTdGFydCcsXG4gICAgICAgICdpbm5lckVuZCdcbiAgICBdKTtcbn1cbi8qKlxuICogUGFyc2UgYm9yZGVyIHJhZGl1cyBmcm9tIHRoZSBwcm92aWRlZCBvcHRpb25zXG4gKi8gZnVuY3Rpb24gcGFyc2VCb3JkZXJSYWRpdXMkMShhcmMsIGlubmVyUmFkaXVzLCBvdXRlclJhZGl1cywgYW5nbGVEZWx0YSkge1xuICAgIGNvbnN0IG8gPSB0b1JhZGl1c0Nvcm5lcnMoYXJjLm9wdGlvbnMuYm9yZGVyUmFkaXVzKTtcbiAgICBjb25zdCBoYWxmVGhpY2tuZXNzID0gKG91dGVyUmFkaXVzIC0gaW5uZXJSYWRpdXMpIC8gMjtcbiAgICBjb25zdCBpbm5lckxpbWl0ID0gTWF0aC5taW4oaGFsZlRoaWNrbmVzcywgYW5nbGVEZWx0YSAqIGlubmVyUmFkaXVzIC8gMik7XG4gICAgLy8gT3V0ZXIgbGltaXRzIGFyZSBjb21wbGljYXRlZC4gV2Ugd2FudCB0byBjb21wdXRlIHRoZSBhdmFpbGFibGUgYW5ndWxhciBkaXN0YW5jZSBhdFxuICAgIC8vIGEgcmFkaXVzIG9mIG91dGVyUmFkaXVzIC0gYm9yZGVyUmFkaXVzIGJlY2F1c2UgZm9yIHNtYWxsIGFuZ3VsYXIgZGlzdGFuY2VzLCB0aGlzIHRlcm0gbGltaXRzLlxuICAgIC8vIFdlIGNvbXB1dGUgYXQgciA9IG91dGVyUmFkaXVzIC0gYm9yZGVyUmFkaXVzIGJlY2F1c2UgdGhpcyBjaXJjbGUgZGVmaW5lcyB0aGUgY2VudGVyIG9mIHRoZSBib3JkZXIgY29ybmVycy5cbiAgICAvL1xuICAgIC8vIElmIHRoZSBib3JkZXJSYWRpdXMgaXMgbGFyZ2UsIHRoYXQgdmFsdWUgY2FuIGJlY29tZSBuZWdhdGl2ZS5cbiAgICAvLyBUaGlzIGNhdXNlcyB0aGUgb3V0ZXIgYm9yZGVycyB0byBsb3NlIHRoZWlyIHJhZGl1cyBlbnRpcmVseSwgd2hpY2ggaXMgcmF0aGVyIHVuZXhwZWN0ZWQuIFRvIHNvbHZlIHRoYXQsIGlmIGJvcmRlclJhZGl1cyA+IG91dGVyUmFkaXVzXG4gICAgLy8gd2Uga25vdyB0aGF0IHRoZSB0aGlja25lc3MgdGVybSB3aWxsIGRvbWluYXRlIGFuZCBjb21wdXRlIHRoZSBsaW1pdHMgYXQgdGhhdCBwb2ludFxuICAgIGNvbnN0IGNvbXB1dGVPdXRlckxpbWl0ID0gKHZhbCk9PntcbiAgICAgICAgY29uc3Qgb3V0ZXJBcmNMaW1pdCA9IChvdXRlclJhZGl1cyAtIE1hdGgubWluKGhhbGZUaGlja25lc3MsIHZhbCkpICogYW5nbGVEZWx0YSAvIDI7XG4gICAgICAgIHJldHVybiBfbGltaXRWYWx1ZSh2YWwsIDAsIE1hdGgubWluKGhhbGZUaGlja25lc3MsIG91dGVyQXJjTGltaXQpKTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIG91dGVyU3RhcnQ6IGNvbXB1dGVPdXRlckxpbWl0KG8ub3V0ZXJTdGFydCksXG4gICAgICAgIG91dGVyRW5kOiBjb21wdXRlT3V0ZXJMaW1pdChvLm91dGVyRW5kKSxcbiAgICAgICAgaW5uZXJTdGFydDogX2xpbWl0VmFsdWUoby5pbm5lclN0YXJ0LCAwLCBpbm5lckxpbWl0KSxcbiAgICAgICAgaW5uZXJFbmQ6IF9saW1pdFZhbHVlKG8uaW5uZXJFbmQsIDAsIGlubmVyTGltaXQpXG4gICAgfTtcbn1cbi8qKlxuICogQ29udmVydCAociwg8J2cgykgdG8gKHgsIHkpXG4gKi8gZnVuY3Rpb24gclRoZXRhVG9YWShyLCB0aGV0YSwgeCwgeSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHggKyByICogTWF0aC5jb3ModGhldGEpLFxuICAgICAgICB5OiB5ICsgciAqIE1hdGguc2luKHRoZXRhKVxuICAgIH07XG59XG4vKipcbiAqIFBhdGggdGhlIGFyYywgcmVzcGVjdGluZyBib3JkZXIgcmFkaXVzIGJ5IHNlcGFyYXRpbmcgaW50byBsZWZ0IGFuZCByaWdodCBoYWx2ZXMuXG4gKlxuICogICBTdGFydCAgICAgIEVuZFxuICpcbiAqICAgIDEtLS0+YS0tLT4yICAgIE91dGVyXG4gKiAgIC8gICAgICAgICAgIFxcXG4gKiAgIDggICAgICAgICAgIDNcbiAqICAgfCAgICAgICAgICAgfFxuICogICB8ICAgICAgICAgICB8XG4gKiAgIDcgICAgICAgICAgIDRcbiAqICAgXFwgICAgICAgICAgIC9cbiAqICAgIDY8LS0tYjwtLS01ICAgIElubmVyXG4gKi8gZnVuY3Rpb24gcGF0aEFyYyhjdHgsIGVsZW1lbnQsIG9mZnNldCwgc3BhY2luZywgZW5kLCBjaXJjdWxhcikge1xuICAgIGNvbnN0IHsgeCAsIHkgLCBzdGFydEFuZ2xlOiBzdGFydCAsIHBpeGVsTWFyZ2luICwgaW5uZXJSYWRpdXM6IGlubmVyUiAgfSA9IGVsZW1lbnQ7XG4gICAgY29uc3Qgb3V0ZXJSYWRpdXMgPSBNYXRoLm1heChlbGVtZW50Lm91dGVyUmFkaXVzICsgc3BhY2luZyArIG9mZnNldCAtIHBpeGVsTWFyZ2luLCAwKTtcbiAgICBjb25zdCBpbm5lclJhZGl1cyA9IGlubmVyUiA+IDAgPyBpbm5lclIgKyBzcGFjaW5nICsgb2Zmc2V0ICsgcGl4ZWxNYXJnaW4gOiAwO1xuICAgIGxldCBzcGFjaW5nT2Zmc2V0ID0gMDtcbiAgICBjb25zdCBhbHBoYSA9IGVuZCAtIHN0YXJ0O1xuICAgIGlmIChzcGFjaW5nKSB7XG4gICAgICAgIC8vIFdoZW4gc3BhY2luZyBpcyBwcmVzZW50LCBpdCBpcyB0aGUgc2FtZSBmb3IgYWxsIGl0ZW1zXG4gICAgICAgIC8vIFNvIHdlIGFkanVzdCB0aGUgc3RhcnQgYW5kIGVuZCBhbmdsZSBvZiB0aGUgYXJjIHN1Y2ggdGhhdFxuICAgICAgICAvLyB0aGUgZGlzdGFuY2UgaXMgdGhlIHNhbWUgYXMgaXQgd291bGQgYmUgd2l0aG91dCB0aGUgc3BhY2luZ1xuICAgICAgICBjb25zdCBub1NwYWNpbmdJbm5lclJhZGl1cyA9IGlubmVyUiA+IDAgPyBpbm5lclIgLSBzcGFjaW5nIDogMDtcbiAgICAgICAgY29uc3Qgbm9TcGFjaW5nT3V0ZXJSYWRpdXMgPSBvdXRlclJhZGl1cyA+IDAgPyBvdXRlclJhZGl1cyAtIHNwYWNpbmcgOiAwO1xuICAgICAgICBjb25zdCBhdk5vZ1NwYWNpbmdSYWRpdXMgPSAobm9TcGFjaW5nSW5uZXJSYWRpdXMgKyBub1NwYWNpbmdPdXRlclJhZGl1cykgLyAyO1xuICAgICAgICBjb25zdCBhZGp1c3RlZEFuZ2xlID0gYXZOb2dTcGFjaW5nUmFkaXVzICE9PSAwID8gYWxwaGEgKiBhdk5vZ1NwYWNpbmdSYWRpdXMgLyAoYXZOb2dTcGFjaW5nUmFkaXVzICsgc3BhY2luZykgOiBhbHBoYTtcbiAgICAgICAgc3BhY2luZ09mZnNldCA9IChhbHBoYSAtIGFkanVzdGVkQW5nbGUpIC8gMjtcbiAgICB9XG4gICAgY29uc3QgYmV0YSA9IE1hdGgubWF4KDAuMDAxLCBhbHBoYSAqIG91dGVyUmFkaXVzIC0gb2Zmc2V0IC8gUEkpIC8gb3V0ZXJSYWRpdXM7XG4gICAgY29uc3QgYW5nbGVPZmZzZXQgPSAoYWxwaGEgLSBiZXRhKSAvIDI7XG4gICAgY29uc3Qgc3RhcnRBbmdsZSA9IHN0YXJ0ICsgYW5nbGVPZmZzZXQgKyBzcGFjaW5nT2Zmc2V0O1xuICAgIGNvbnN0IGVuZEFuZ2xlID0gZW5kIC0gYW5nbGVPZmZzZXQgLSBzcGFjaW5nT2Zmc2V0O1xuICAgIGNvbnN0IHsgb3V0ZXJTdGFydCAsIG91dGVyRW5kICwgaW5uZXJTdGFydCAsIGlubmVyRW5kICB9ID0gcGFyc2VCb3JkZXJSYWRpdXMkMShlbGVtZW50LCBpbm5lclJhZGl1cywgb3V0ZXJSYWRpdXMsIGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gICAgY29uc3Qgb3V0ZXJTdGFydEFkanVzdGVkUmFkaXVzID0gb3V0ZXJSYWRpdXMgLSBvdXRlclN0YXJ0O1xuICAgIGNvbnN0IG91dGVyRW5kQWRqdXN0ZWRSYWRpdXMgPSBvdXRlclJhZGl1cyAtIG91dGVyRW5kO1xuICAgIGNvbnN0IG91dGVyU3RhcnRBZGp1c3RlZEFuZ2xlID0gc3RhcnRBbmdsZSArIG91dGVyU3RhcnQgLyBvdXRlclN0YXJ0QWRqdXN0ZWRSYWRpdXM7XG4gICAgY29uc3Qgb3V0ZXJFbmRBZGp1c3RlZEFuZ2xlID0gZW5kQW5nbGUgLSBvdXRlckVuZCAvIG91dGVyRW5kQWRqdXN0ZWRSYWRpdXM7XG4gICAgY29uc3QgaW5uZXJTdGFydEFkanVzdGVkUmFkaXVzID0gaW5uZXJSYWRpdXMgKyBpbm5lclN0YXJ0O1xuICAgIGNvbnN0IGlubmVyRW5kQWRqdXN0ZWRSYWRpdXMgPSBpbm5lclJhZGl1cyArIGlubmVyRW5kO1xuICAgIGNvbnN0IGlubmVyU3RhcnRBZGp1c3RlZEFuZ2xlID0gc3RhcnRBbmdsZSArIGlubmVyU3RhcnQgLyBpbm5lclN0YXJ0QWRqdXN0ZWRSYWRpdXM7XG4gICAgY29uc3QgaW5uZXJFbmRBZGp1c3RlZEFuZ2xlID0gZW5kQW5nbGUgLSBpbm5lckVuZCAvIGlubmVyRW5kQWRqdXN0ZWRSYWRpdXM7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGlmIChjaXJjdWxhcikge1xuICAgICAgICAvLyBUaGUgZmlyc3QgYXJjIHNlZ21lbnRzIGZyb20gcG9pbnQgMSB0byBwb2ludCBhIHRvIHBvaW50IDJcbiAgICAgICAgY29uc3Qgb3V0ZXJNaWRBZGp1c3RlZEFuZ2xlID0gKG91dGVyU3RhcnRBZGp1c3RlZEFuZ2xlICsgb3V0ZXJFbmRBZGp1c3RlZEFuZ2xlKSAvIDI7XG4gICAgICAgIGN0eC5hcmMoeCwgeSwgb3V0ZXJSYWRpdXMsIG91dGVyU3RhcnRBZGp1c3RlZEFuZ2xlLCBvdXRlck1pZEFkanVzdGVkQW5nbGUpO1xuICAgICAgICBjdHguYXJjKHgsIHksIG91dGVyUmFkaXVzLCBvdXRlck1pZEFkanVzdGVkQW5nbGUsIG91dGVyRW5kQWRqdXN0ZWRBbmdsZSk7XG4gICAgICAgIC8vIFRoZSBjb3JuZXIgc2VnbWVudCBmcm9tIHBvaW50IDIgdG8gcG9pbnQgM1xuICAgICAgICBpZiAob3V0ZXJFbmQgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBwQ2VudGVyID0gclRoZXRhVG9YWShvdXRlckVuZEFkanVzdGVkUmFkaXVzLCBvdXRlckVuZEFkanVzdGVkQW5nbGUsIHgsIHkpO1xuICAgICAgICAgICAgY3R4LmFyYyhwQ2VudGVyLngsIHBDZW50ZXIueSwgb3V0ZXJFbmQsIG91dGVyRW5kQWRqdXN0ZWRBbmdsZSwgZW5kQW5nbGUgKyBIQUxGX1BJKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgbGluZSBmcm9tIHBvaW50IDMgdG8gcG9pbnQgNFxuICAgICAgICBjb25zdCBwNCA9IHJUaGV0YVRvWFkoaW5uZXJFbmRBZGp1c3RlZFJhZGl1cywgZW5kQW5nbGUsIHgsIHkpO1xuICAgICAgICBjdHgubGluZVRvKHA0LngsIHA0LnkpO1xuICAgICAgICAvLyBUaGUgY29ybmVyIHNlZ21lbnQgZnJvbSBwb2ludCA0IHRvIHBvaW50IDVcbiAgICAgICAgaWYgKGlubmVyRW5kID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcENlbnRlciA9IHJUaGV0YVRvWFkoaW5uZXJFbmRBZGp1c3RlZFJhZGl1cywgaW5uZXJFbmRBZGp1c3RlZEFuZ2xlLCB4LCB5KTtcbiAgICAgICAgICAgIGN0eC5hcmMocENlbnRlci54LCBwQ2VudGVyLnksIGlubmVyRW5kLCBlbmRBbmdsZSArIEhBTEZfUEksIGlubmVyRW5kQWRqdXN0ZWRBbmdsZSArIE1hdGguUEkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBpbm5lciBhcmMgZnJvbSBwb2ludCA1IHRvIHBvaW50IGIgdG8gcG9pbnQgNlxuICAgICAgICBjb25zdCBpbm5lck1pZEFkanVzdGVkQW5nbGUgPSAoZW5kQW5nbGUgLSBpbm5lckVuZCAvIGlubmVyUmFkaXVzICsgKHN0YXJ0QW5nbGUgKyBpbm5lclN0YXJ0IC8gaW5uZXJSYWRpdXMpKSAvIDI7XG4gICAgICAgIGN0eC5hcmMoeCwgeSwgaW5uZXJSYWRpdXMsIGVuZEFuZ2xlIC0gaW5uZXJFbmQgLyBpbm5lclJhZGl1cywgaW5uZXJNaWRBZGp1c3RlZEFuZ2xlLCB0cnVlKTtcbiAgICAgICAgY3R4LmFyYyh4LCB5LCBpbm5lclJhZGl1cywgaW5uZXJNaWRBZGp1c3RlZEFuZ2xlLCBzdGFydEFuZ2xlICsgaW5uZXJTdGFydCAvIGlubmVyUmFkaXVzLCB0cnVlKTtcbiAgICAgICAgLy8gVGhlIGNvcm5lciBzZWdtZW50IGZyb20gcG9pbnQgNiB0byBwb2ludCA3XG4gICAgICAgIGlmIChpbm5lclN0YXJ0ID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcENlbnRlciA9IHJUaGV0YVRvWFkoaW5uZXJTdGFydEFkanVzdGVkUmFkaXVzLCBpbm5lclN0YXJ0QWRqdXN0ZWRBbmdsZSwgeCwgeSk7XG4gICAgICAgICAgICBjdHguYXJjKHBDZW50ZXIueCwgcENlbnRlci55LCBpbm5lclN0YXJ0LCBpbm5lclN0YXJ0QWRqdXN0ZWRBbmdsZSArIE1hdGguUEksIHN0YXJ0QW5nbGUgLSBIQUxGX1BJKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgbGluZSBmcm9tIHBvaW50IDcgdG8gcG9pbnQgOFxuICAgICAgICBjb25zdCBwOCA9IHJUaGV0YVRvWFkob3V0ZXJTdGFydEFkanVzdGVkUmFkaXVzLCBzdGFydEFuZ2xlLCB4LCB5KTtcbiAgICAgICAgY3R4LmxpbmVUbyhwOC54LCBwOC55KTtcbiAgICAgICAgLy8gVGhlIGNvcm5lciBzZWdtZW50IGZyb20gcG9pbnQgOCB0byBwb2ludCAxXG4gICAgICAgIGlmIChvdXRlclN0YXJ0ID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcENlbnRlciA9IHJUaGV0YVRvWFkob3V0ZXJTdGFydEFkanVzdGVkUmFkaXVzLCBvdXRlclN0YXJ0QWRqdXN0ZWRBbmdsZSwgeCwgeSk7XG4gICAgICAgICAgICBjdHguYXJjKHBDZW50ZXIueCwgcENlbnRlci55LCBvdXRlclN0YXJ0LCBzdGFydEFuZ2xlIC0gSEFMRl9QSSwgb3V0ZXJTdGFydEFkanVzdGVkQW5nbGUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgY29uc3Qgb3V0ZXJTdGFydFggPSBNYXRoLmNvcyhvdXRlclN0YXJ0QWRqdXN0ZWRBbmdsZSkgKiBvdXRlclJhZGl1cyArIHg7XG4gICAgICAgIGNvbnN0IG91dGVyU3RhcnRZID0gTWF0aC5zaW4ob3V0ZXJTdGFydEFkanVzdGVkQW5nbGUpICogb3V0ZXJSYWRpdXMgKyB5O1xuICAgICAgICBjdHgubGluZVRvKG91dGVyU3RhcnRYLCBvdXRlclN0YXJ0WSk7XG4gICAgICAgIGNvbnN0IG91dGVyRW5kWCA9IE1hdGguY29zKG91dGVyRW5kQWRqdXN0ZWRBbmdsZSkgKiBvdXRlclJhZGl1cyArIHg7XG4gICAgICAgIGNvbnN0IG91dGVyRW5kWSA9IE1hdGguc2luKG91dGVyRW5kQWRqdXN0ZWRBbmdsZSkgKiBvdXRlclJhZGl1cyArIHk7XG4gICAgICAgIGN0eC5saW5lVG8ob3V0ZXJFbmRYLCBvdXRlckVuZFkpO1xuICAgIH1cbiAgICBjdHguY2xvc2VQYXRoKCk7XG59XG5mdW5jdGlvbiBkcmF3QXJjKGN0eCwgZWxlbWVudCwgb2Zmc2V0LCBzcGFjaW5nLCBjaXJjdWxhcikge1xuICAgIGNvbnN0IHsgZnVsbENpcmNsZXMgLCBzdGFydEFuZ2xlICwgY2lyY3VtZmVyZW5jZSAgfSA9IGVsZW1lbnQ7XG4gICAgbGV0IGVuZEFuZ2xlID0gZWxlbWVudC5lbmRBbmdsZTtcbiAgICBpZiAoZnVsbENpcmNsZXMpIHtcbiAgICAgICAgcGF0aEFyYyhjdHgsIGVsZW1lbnQsIG9mZnNldCwgc3BhY2luZywgZW5kQW5nbGUsIGNpcmN1bGFyKTtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGZ1bGxDaXJjbGVzOyArK2kpe1xuICAgICAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzTmFOKGNpcmN1bWZlcmVuY2UpKSB7XG4gICAgICAgICAgICBlbmRBbmdsZSA9IHN0YXJ0QW5nbGUgKyAoY2lyY3VtZmVyZW5jZSAlIFRBVSB8fCBUQVUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBhdGhBcmMoY3R4LCBlbGVtZW50LCBvZmZzZXQsIHNwYWNpbmcsIGVuZEFuZ2xlLCBjaXJjdWxhcik7XG4gICAgY3R4LmZpbGwoKTtcbiAgICByZXR1cm4gZW5kQW5nbGU7XG59XG5mdW5jdGlvbiBkcmF3Qm9yZGVyKGN0eCwgZWxlbWVudCwgb2Zmc2V0LCBzcGFjaW5nLCBjaXJjdWxhcikge1xuICAgIGNvbnN0IHsgZnVsbENpcmNsZXMgLCBzdGFydEFuZ2xlICwgY2lyY3VtZmVyZW5jZSAsIG9wdGlvbnMgIH0gPSBlbGVtZW50O1xuICAgIGNvbnN0IHsgYm9yZGVyV2lkdGggLCBib3JkZXJKb2luU3R5bGUgLCBib3JkZXJEYXNoICwgYm9yZGVyRGFzaE9mZnNldCAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgaW5uZXIgPSBvcHRpb25zLmJvcmRlckFsaWduID09PSAnaW5uZXInO1xuICAgIGlmICghYm9yZGVyV2lkdGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdHguc2V0TGluZURhc2goYm9yZGVyRGFzaCB8fCBbXSk7XG4gICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gYm9yZGVyRGFzaE9mZnNldDtcbiAgICBpZiAoaW5uZXIpIHtcbiAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGJvcmRlcldpZHRoICogMjtcbiAgICAgICAgY3R4LmxpbmVKb2luID0gYm9yZGVySm9pblN0eWxlIHx8ICdyb3VuZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGJvcmRlcldpZHRoO1xuICAgICAgICBjdHgubGluZUpvaW4gPSBib3JkZXJKb2luU3R5bGUgfHwgJ2JldmVsJztcbiAgICB9XG4gICAgbGV0IGVuZEFuZ2xlID0gZWxlbWVudC5lbmRBbmdsZTtcbiAgICBpZiAoZnVsbENpcmNsZXMpIHtcbiAgICAgICAgcGF0aEFyYyhjdHgsIGVsZW1lbnQsIG9mZnNldCwgc3BhY2luZywgZW5kQW5nbGUsIGNpcmN1bGFyKTtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGZ1bGxDaXJjbGVzOyArK2kpe1xuICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNOYU4oY2lyY3VtZmVyZW5jZSkpIHtcbiAgICAgICAgICAgIGVuZEFuZ2xlID0gc3RhcnRBbmdsZSArIChjaXJjdW1mZXJlbmNlICUgVEFVIHx8IFRBVSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlubmVyKSB7XG4gICAgICAgIGNsaXBBcmMoY3R4LCBlbGVtZW50LCBlbmRBbmdsZSk7XG4gICAgfVxuICAgIGlmICghZnVsbENpcmNsZXMpIHtcbiAgICAgICAgcGF0aEFyYyhjdHgsIGVsZW1lbnQsIG9mZnNldCwgc3BhY2luZywgZW5kQW5nbGUsIGNpcmN1bGFyKTtcbiAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgIH1cbn1cbmNsYXNzIEFyY0VsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBzdGF0aWMgaWQgPSAnYXJjJztcbiAgICBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGJvcmRlckFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmJyxcbiAgICAgICAgYm9yZGVyRGFzaDogW10sXG4gICAgICAgIGJvcmRlckRhc2hPZmZzZXQ6IDAsXG4gICAgICAgIGJvcmRlckpvaW5TdHlsZTogdW5kZWZpbmVkLFxuICAgICAgICBib3JkZXJSYWRpdXM6IDAsXG4gICAgICAgIGJvcmRlcldpZHRoOiAyLFxuICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgIHNwYWNpbmc6IDAsXG4gICAgICAgIGFuZ2xlOiB1bmRlZmluZWQsXG4gICAgICAgIGNpcmN1bGFyOiB0cnVlXG4gICAgfTtcbiAgICBzdGF0aWMgZGVmYXVsdFJvdXRlcyA9IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnYmFja2dyb3VuZENvbG9yJ1xuICAgIH07XG4gICAgc3RhdGljIGRlc2NyaXB0b3JzID0ge1xuICAgICAgICBfc2NyaXB0YWJsZTogdHJ1ZSxcbiAgICAgICAgX2luZGV4YWJsZTogKG5hbWUpPT5uYW1lICE9PSAnYm9yZGVyRGFzaCdcbiAgICB9O1xuICAgIGNpcmN1bWZlcmVuY2U7XG4gICAgZW5kQW5nbGU7XG4gICAgZnVsbENpcmNsZXM7XG4gICAgaW5uZXJSYWRpdXM7XG4gICAgb3V0ZXJSYWRpdXM7XG4gICAgcGl4ZWxNYXJnaW47XG4gICAgc3RhcnRBbmdsZTtcbiAgICBjb25zdHJ1Y3RvcihjZmcpe1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY2lyY3VtZmVyZW5jZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5zdGFydEFuZ2xlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmVuZEFuZ2xlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmlubmVyUmFkaXVzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm91dGVyUmFkaXVzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnBpeGVsTWFyZ2luID0gMDtcbiAgICAgICAgdGhpcy5mdWxsQ2lyY2xlcyA9IDA7XG4gICAgICAgIGlmIChjZmcpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgY2ZnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpblJhbmdlKGNoYXJ0WCwgY2hhcnRZLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gdGhpcy5nZXRQcm9wcyhbXG4gICAgICAgICAgICAneCcsXG4gICAgICAgICAgICAneSdcbiAgICAgICAgXSwgdXNlRmluYWxQb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IHsgYW5nbGUgLCBkaXN0YW5jZSAgfSA9IGdldEFuZ2xlRnJvbVBvaW50KHBvaW50LCB7XG4gICAgICAgICAgICB4OiBjaGFydFgsXG4gICAgICAgICAgICB5OiBjaGFydFlcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRBbmdsZSAsIGVuZEFuZ2xlICwgaW5uZXJSYWRpdXMgLCBvdXRlclJhZGl1cyAsIGNpcmN1bWZlcmVuY2UgIH0gPSB0aGlzLmdldFByb3BzKFtcbiAgICAgICAgICAgICdzdGFydEFuZ2xlJyxcbiAgICAgICAgICAgICdlbmRBbmdsZScsXG4gICAgICAgICAgICAnaW5uZXJSYWRpdXMnLFxuICAgICAgICAgICAgJ291dGVyUmFkaXVzJyxcbiAgICAgICAgICAgICdjaXJjdW1mZXJlbmNlJ1xuICAgICAgICBdLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgckFkanVzdCA9ICh0aGlzLm9wdGlvbnMuc3BhY2luZyArIHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aCkgLyAyO1xuICAgICAgICBjb25zdCBfY2lyY3VtZmVyZW5jZSA9IHZhbHVlT3JEZWZhdWx0KGNpcmN1bWZlcmVuY2UsIGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gICAgICAgIGNvbnN0IG5vblplcm9CZXR3ZWVuID0gX2FuZ2xlQmV0d2VlbihhbmdsZSwgc3RhcnRBbmdsZSwgZW5kQW5nbGUpICYmIHN0YXJ0QW5nbGUgIT09IGVuZEFuZ2xlO1xuICAgICAgICBjb25zdCBiZXR3ZWVuQW5nbGVzID0gX2NpcmN1bWZlcmVuY2UgPj0gVEFVIHx8IG5vblplcm9CZXR3ZWVuO1xuICAgICAgICBjb25zdCB3aXRoaW5SYWRpdXMgPSBfaXNCZXR3ZWVuKGRpc3RhbmNlLCBpbm5lclJhZGl1cyArIHJBZGp1c3QsIG91dGVyUmFkaXVzICsgckFkanVzdCk7XG4gICAgICAgIHJldHVybiBiZXR3ZWVuQW5nbGVzICYmIHdpdGhpblJhZGl1cztcbiAgICB9XG4gICAgZ2V0Q2VudGVyUG9pbnQodXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICBjb25zdCB7IHggLCB5ICwgc3RhcnRBbmdsZSAsIGVuZEFuZ2xlICwgaW5uZXJSYWRpdXMgLCBvdXRlclJhZGl1cyAgfSA9IHRoaXMuZ2V0UHJvcHMoW1xuICAgICAgICAgICAgJ3gnLFxuICAgICAgICAgICAgJ3knLFxuICAgICAgICAgICAgJ3N0YXJ0QW5nbGUnLFxuICAgICAgICAgICAgJ2VuZEFuZ2xlJyxcbiAgICAgICAgICAgICdpbm5lclJhZGl1cycsXG4gICAgICAgICAgICAnb3V0ZXJSYWRpdXMnXG4gICAgICAgIF0sIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgICAgICBjb25zdCB7IG9mZnNldCAsIHNwYWNpbmcgIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGhhbGZBbmdsZSA9IChzdGFydEFuZ2xlICsgZW5kQW5nbGUpIC8gMjtcbiAgICAgICAgY29uc3QgaGFsZlJhZGl1cyA9IChpbm5lclJhZGl1cyArIG91dGVyUmFkaXVzICsgc3BhY2luZyArIG9mZnNldCkgLyAyO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogeCArIE1hdGguY29zKGhhbGZBbmdsZSkgKiBoYWxmUmFkaXVzLFxuICAgICAgICAgICAgeTogeSArIE1hdGguc2luKGhhbGZBbmdsZSkgKiBoYWxmUmFkaXVzXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRvb2x0aXBQb3NpdGlvbih1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENlbnRlclBvaW50KHVzZUZpbmFsUG9zaXRpb24pO1xuICAgIH1cbiAgICBkcmF3KGN0eCkge1xuICAgICAgICBjb25zdCB7IG9wdGlvbnMgLCBjaXJjdW1mZXJlbmNlICB9ID0gdGhpcztcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gKG9wdGlvbnMub2Zmc2V0IHx8IDApIC8gNDtcbiAgICAgICAgY29uc3Qgc3BhY2luZyA9IChvcHRpb25zLnNwYWNpbmcgfHwgMCkgLyAyO1xuICAgICAgICBjb25zdCBjaXJjdWxhciA9IG9wdGlvbnMuY2lyY3VsYXI7XG4gICAgICAgIHRoaXMucGl4ZWxNYXJnaW4gPSBvcHRpb25zLmJvcmRlckFsaWduID09PSAnaW5uZXInID8gMC4zMyA6IDA7XG4gICAgICAgIHRoaXMuZnVsbENpcmNsZXMgPSBjaXJjdW1mZXJlbmNlID4gVEFVID8gTWF0aC5mbG9vcihjaXJjdW1mZXJlbmNlIC8gVEFVKSA6IDA7XG4gICAgICAgIGlmIChjaXJjdW1mZXJlbmNlID09PSAwIHx8IHRoaXMuaW5uZXJSYWRpdXMgPCAwIHx8IHRoaXMub3V0ZXJSYWRpdXMgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgY29uc3QgaGFsZkFuZ2xlID0gKHRoaXMuc3RhcnRBbmdsZSArIHRoaXMuZW5kQW5nbGUpIC8gMjtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZShNYXRoLmNvcyhoYWxmQW5nbGUpICogb2Zmc2V0LCBNYXRoLnNpbihoYWxmQW5nbGUpICogb2Zmc2V0KTtcbiAgICAgICAgY29uc3QgZml4ID0gMSAtIE1hdGguc2luKE1hdGgubWluKFBJLCBjaXJjdW1mZXJlbmNlIHx8IDApKTtcbiAgICAgICAgY29uc3QgcmFkaXVzT2Zmc2V0ID0gb2Zmc2V0ICogZml4O1xuICAgICAgICBjdHguZmlsbFN0eWxlID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IG9wdGlvbnMuYm9yZGVyQ29sb3I7XG4gICAgICAgIGRyYXdBcmMoY3R4LCB0aGlzLCByYWRpdXNPZmZzZXQsIHNwYWNpbmcsIGNpcmN1bGFyKTtcbiAgICAgICAgZHJhd0JvcmRlcihjdHgsIHRoaXMsIHJhZGl1c09mZnNldCwgc3BhY2luZywgY2lyY3VsYXIpO1xuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2V0U3R5bGUoY3R4LCBvcHRpb25zLCBzdHlsZSA9IG9wdGlvbnMpIHtcbiAgICBjdHgubGluZUNhcCA9IHZhbHVlT3JEZWZhdWx0KHN0eWxlLmJvcmRlckNhcFN0eWxlLCBvcHRpb25zLmJvcmRlckNhcFN0eWxlKTtcbiAgICBjdHguc2V0TGluZURhc2godmFsdWVPckRlZmF1bHQoc3R5bGUuYm9yZGVyRGFzaCwgb3B0aW9ucy5ib3JkZXJEYXNoKSk7XG4gICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gdmFsdWVPckRlZmF1bHQoc3R5bGUuYm9yZGVyRGFzaE9mZnNldCwgb3B0aW9ucy5ib3JkZXJEYXNoT2Zmc2V0KTtcbiAgICBjdHgubGluZUpvaW4gPSB2YWx1ZU9yRGVmYXVsdChzdHlsZS5ib3JkZXJKb2luU3R5bGUsIG9wdGlvbnMuYm9yZGVySm9pblN0eWxlKTtcbiAgICBjdHgubGluZVdpZHRoID0gdmFsdWVPckRlZmF1bHQoc3R5bGUuYm9yZGVyV2lkdGgsIG9wdGlvbnMuYm9yZGVyV2lkdGgpO1xuICAgIGN0eC5zdHJva2VTdHlsZSA9IHZhbHVlT3JEZWZhdWx0KHN0eWxlLmJvcmRlckNvbG9yLCBvcHRpb25zLmJvcmRlckNvbG9yKTtcbn1cbmZ1bmN0aW9uIGxpbmVUbyhjdHgsIHByZXZpb3VzLCB0YXJnZXQpIHtcbiAgICBjdHgubGluZVRvKHRhcmdldC54LCB0YXJnZXQueSk7XG59XG4gZnVuY3Rpb24gZ2V0TGluZU1ldGhvZChvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuc3RlcHBlZCkge1xuICAgICAgICByZXR1cm4gX3N0ZXBwZWRMaW5lVG87XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRlbnNpb24gfHwgb3B0aW9ucy5jdWJpY0ludGVycG9sYXRpb25Nb2RlID09PSAnbW9ub3RvbmUnKSB7XG4gICAgICAgIHJldHVybiBfYmV6aWVyQ3VydmVUbztcbiAgICB9XG4gICAgcmV0dXJuIGxpbmVUbztcbn1cbmZ1bmN0aW9uIHBhdGhWYXJzKHBvaW50cywgc2VnbWVudCwgcGFyYW1zID0ge30pIHtcbiAgICBjb25zdCBjb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gICAgY29uc3QgeyBzdGFydDogcGFyYW1zU3RhcnQgPSAwICwgZW5kOiBwYXJhbXNFbmQgPSBjb3VudCAtIDEgIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgeyBzdGFydDogc2VnbWVudFN0YXJ0ICwgZW5kOiBzZWdtZW50RW5kICB9ID0gc2VnbWVudDtcbiAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KHBhcmFtc1N0YXJ0LCBzZWdtZW50U3RhcnQpO1xuICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKHBhcmFtc0VuZCwgc2VnbWVudEVuZCk7XG4gICAgY29uc3Qgb3V0c2lkZSA9IHBhcmFtc1N0YXJ0IDwgc2VnbWVudFN0YXJ0ICYmIHBhcmFtc0VuZCA8IHNlZ21lbnRTdGFydCB8fCBwYXJhbXNTdGFydCA+IHNlZ21lbnRFbmQgJiYgcGFyYW1zRW5kID4gc2VnbWVudEVuZDtcbiAgICByZXR1cm4ge1xuICAgICAgICBjb3VudCxcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGxvb3A6IHNlZ21lbnQubG9vcCxcbiAgICAgICAgaWxlbjogZW5kIDwgc3RhcnQgJiYgIW91dHNpZGUgPyBjb3VudCArIGVuZCAtIHN0YXJ0IDogZW5kIC0gc3RhcnRcbiAgICB9O1xufVxuIGZ1bmN0aW9uIHBhdGhTZWdtZW50KGN0eCwgbGluZSwgc2VnbWVudCwgcGFyYW1zKSB7XG4gICAgY29uc3QgeyBwb2ludHMgLCBvcHRpb25zICB9ID0gbGluZTtcbiAgICBjb25zdCB7IGNvdW50ICwgc3RhcnQgLCBsb29wICwgaWxlbiAgfSA9IHBhdGhWYXJzKHBvaW50cywgc2VnbWVudCwgcGFyYW1zKTtcbiAgICBjb25zdCBsaW5lTWV0aG9kID0gZ2V0TGluZU1ldGhvZChvcHRpb25zKTtcbiAgICBsZXQgeyBtb3ZlID10cnVlICwgcmV2ZXJzZSAgfSA9IHBhcmFtcyB8fCB7fTtcbiAgICBsZXQgaSwgcG9pbnQsIHByZXY7XG4gICAgZm9yKGkgPSAwOyBpIDw9IGlsZW47ICsraSl7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzWyhzdGFydCArIChyZXZlcnNlID8gaWxlbiAtIGkgOiBpKSkgJSBjb3VudF07XG4gICAgICAgIGlmIChwb2ludC5za2lwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmIChtb3ZlKSB7XG4gICAgICAgICAgICBjdHgubW92ZVRvKHBvaW50LngsIHBvaW50LnkpO1xuICAgICAgICAgICAgbW92ZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGluZU1ldGhvZChjdHgsIHByZXYsIHBvaW50LCByZXZlcnNlLCBvcHRpb25zLnN0ZXBwZWQpO1xuICAgICAgICB9XG4gICAgICAgIHByZXYgPSBwb2ludDtcbiAgICB9XG4gICAgaWYgKGxvb3ApIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbKHN0YXJ0ICsgKHJldmVyc2UgPyBpbGVuIDogMCkpICUgY291bnRdO1xuICAgICAgICBsaW5lTWV0aG9kKGN0eCwgcHJldiwgcG9pbnQsIHJldmVyc2UsIG9wdGlvbnMuc3RlcHBlZCk7XG4gICAgfVxuICAgIHJldHVybiAhIWxvb3A7XG59XG4gZnVuY3Rpb24gZmFzdFBhdGhTZWdtZW50KGN0eCwgbGluZSwgc2VnbWVudCwgcGFyYW1zKSB7XG4gICAgY29uc3QgcG9pbnRzID0gbGluZS5wb2ludHM7XG4gICAgY29uc3QgeyBjb3VudCAsIHN0YXJ0ICwgaWxlbiAgfSA9IHBhdGhWYXJzKHBvaW50cywgc2VnbWVudCwgcGFyYW1zKTtcbiAgICBjb25zdCB7IG1vdmUgPXRydWUgLCByZXZlcnNlICB9ID0gcGFyYW1zIHx8IHt9O1xuICAgIGxldCBhdmdYID0gMDtcbiAgICBsZXQgY291bnRYID0gMDtcbiAgICBsZXQgaSwgcG9pbnQsIHByZXZYLCBtaW5ZLCBtYXhZLCBsYXN0WTtcbiAgICBjb25zdCBwb2ludEluZGV4ID0gKGluZGV4KT0+KHN0YXJ0ICsgKHJldmVyc2UgPyBpbGVuIC0gaW5kZXggOiBpbmRleCkpICUgY291bnQ7XG4gICAgY29uc3QgZHJhd1ggPSAoKT0+e1xuICAgICAgICBpZiAobWluWSAhPT0gbWF4WSkge1xuICAgICAgICAgICAgY3R4LmxpbmVUbyhhdmdYLCBtYXhZKTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oYXZnWCwgbWluWSk7XG4gICAgICAgICAgICBjdHgubGluZVRvKGF2Z1gsIGxhc3RZKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgaWYgKG1vdmUpIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbcG9pbnRJbmRleCgwKV07XG4gICAgICAgIGN0eC5tb3ZlVG8ocG9pbnQueCwgcG9pbnQueSk7XG4gICAgfVxuICAgIGZvcihpID0gMDsgaSA8PSBpbGVuOyArK2kpe1xuICAgICAgICBwb2ludCA9IHBvaW50c1twb2ludEluZGV4KGkpXTtcbiAgICAgICAgaWYgKHBvaW50LnNraXApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHggPSBwb2ludC54O1xuICAgICAgICBjb25zdCB5ID0gcG9pbnQueTtcbiAgICAgICAgY29uc3QgdHJ1bmNYID0geCB8IDA7XG4gICAgICAgIGlmICh0cnVuY1ggPT09IHByZXZYKSB7XG4gICAgICAgICAgICBpZiAoeSA8IG1pblkpIHtcbiAgICAgICAgICAgICAgICBtaW5ZID0geTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeSA+IG1heFkpIHtcbiAgICAgICAgICAgICAgICBtYXhZID0geTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF2Z1ggPSAoY291bnRYICogYXZnWCArIHgpIC8gKytjb3VudFg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkcmF3WCgpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4LCB5KTtcbiAgICAgICAgICAgIHByZXZYID0gdHJ1bmNYO1xuICAgICAgICAgICAgY291bnRYID0gMDtcbiAgICAgICAgICAgIG1pblkgPSBtYXhZID0geTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0WSA9IHk7XG4gICAgfVxuICAgIGRyYXdYKCk7XG59XG4gZnVuY3Rpb24gX2dldFNlZ21lbnRNZXRob2QobGluZSkge1xuICAgIGNvbnN0IG9wdHMgPSBsaW5lLm9wdGlvbnM7XG4gICAgY29uc3QgYm9yZGVyRGFzaCA9IG9wdHMuYm9yZGVyRGFzaCAmJiBvcHRzLmJvcmRlckRhc2gubGVuZ3RoO1xuICAgIGNvbnN0IHVzZUZhc3RQYXRoID0gIWxpbmUuX2RlY2ltYXRlZCAmJiAhbGluZS5fbG9vcCAmJiAhb3B0cy50ZW5zaW9uICYmIG9wdHMuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZSAhPT0gJ21vbm90b25lJyAmJiAhb3B0cy5zdGVwcGVkICYmICFib3JkZXJEYXNoO1xuICAgIHJldHVybiB1c2VGYXN0UGF0aCA/IGZhc3RQYXRoU2VnbWVudCA6IHBhdGhTZWdtZW50O1xufVxuIGZ1bmN0aW9uIF9nZXRJbnRlcnBvbGF0aW9uTWV0aG9kKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5zdGVwcGVkKSB7XG4gICAgICAgIHJldHVybiBfc3RlcHBlZEludGVycG9sYXRpb247XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRlbnNpb24gfHwgb3B0aW9ucy5jdWJpY0ludGVycG9sYXRpb25Nb2RlID09PSAnbW9ub3RvbmUnKSB7XG4gICAgICAgIHJldHVybiBfYmV6aWVySW50ZXJwb2xhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIF9wb2ludEluTGluZTtcbn1cbmZ1bmN0aW9uIHN0cm9rZVBhdGhXaXRoQ2FjaGUoY3R4LCBsaW5lLCBzdGFydCwgY291bnQpIHtcbiAgICBsZXQgcGF0aCA9IGxpbmUuX3BhdGg7XG4gICAgaWYgKCFwYXRoKSB7XG4gICAgICAgIHBhdGggPSBsaW5lLl9wYXRoID0gbmV3IFBhdGgyRCgpO1xuICAgICAgICBpZiAobGluZS5wYXRoKHBhdGgsIHN0YXJ0LCBjb3VudCkpIHtcbiAgICAgICAgICAgIHBhdGguY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0U3R5bGUoY3R4LCBsaW5lLm9wdGlvbnMpO1xuICAgIGN0eC5zdHJva2UocGF0aCk7XG59XG5mdW5jdGlvbiBzdHJva2VQYXRoRGlyZWN0KGN0eCwgbGluZSwgc3RhcnQsIGNvdW50KSB7XG4gICAgY29uc3QgeyBzZWdtZW50cyAsIG9wdGlvbnMgIH0gPSBsaW5lO1xuICAgIGNvbnN0IHNlZ21lbnRNZXRob2QgPSBfZ2V0U2VnbWVudE1ldGhvZChsaW5lKTtcbiAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygc2VnbWVudHMpe1xuICAgICAgICBzZXRTdHlsZShjdHgsIG9wdGlvbnMsIHNlZ21lbnQuc3R5bGUpO1xuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGlmIChzZWdtZW50TWV0aG9kKGN0eCwgbGluZSwgc2VnbWVudCwge1xuICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IHN0YXJ0ICsgY291bnQgLSAxXG4gICAgICAgIH0pKSB7XG4gICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgIH1cbn1cbmNvbnN0IHVzZVBhdGgyRCA9IHR5cGVvZiBQYXRoMkQgPT09ICdmdW5jdGlvbic7XG5mdW5jdGlvbiBkcmF3KGN0eCwgbGluZSwgc3RhcnQsIGNvdW50KSB7XG4gICAgaWYgKHVzZVBhdGgyRCAmJiAhbGluZS5vcHRpb25zLnNlZ21lbnQpIHtcbiAgICAgICAgc3Ryb2tlUGF0aFdpdGhDYWNoZShjdHgsIGxpbmUsIHN0YXJ0LCBjb3VudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3Ryb2tlUGF0aERpcmVjdChjdHgsIGxpbmUsIHN0YXJ0LCBjb3VudCk7XG4gICAgfVxufVxuY2xhc3MgTGluZUVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBzdGF0aWMgaWQgPSAnbGluZSc7XG4gc3RhdGljIGRlZmF1bHRzID0ge1xuICAgICAgICBib3JkZXJDYXBTdHlsZTogJ2J1dHQnLFxuICAgICAgICBib3JkZXJEYXNoOiBbXSxcbiAgICAgICAgYm9yZGVyRGFzaE9mZnNldDogMCxcbiAgICAgICAgYm9yZGVySm9pblN0eWxlOiAnbWl0ZXInLFxuICAgICAgICBib3JkZXJXaWR0aDogMyxcbiAgICAgICAgY2FwQmV6aWVyUG9pbnRzOiB0cnVlLFxuICAgICAgICBjdWJpY0ludGVycG9sYXRpb25Nb2RlOiAnZGVmYXVsdCcsXG4gICAgICAgIGZpbGw6IGZhbHNlLFxuICAgICAgICBzcGFuR2FwczogZmFsc2UsXG4gICAgICAgIHN0ZXBwZWQ6IGZhbHNlLFxuICAgICAgICB0ZW5zaW9uOiAwXG4gICAgfTtcbiBzdGF0aWMgZGVmYXVsdFJvdXRlcyA9IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnYmFja2dyb3VuZENvbG9yJyxcbiAgICAgICAgYm9yZGVyQ29sb3I6ICdib3JkZXJDb2xvcidcbiAgICB9O1xuICAgIHN0YXRpYyBkZXNjcmlwdG9ycyA9IHtcbiAgICAgICAgX3NjcmlwdGFibGU6IHRydWUsXG4gICAgICAgIF9pbmRleGFibGU6IChuYW1lKT0+bmFtZSAhPT0gJ2JvcmRlckRhc2gnICYmIG5hbWUgIT09ICdmaWxsJ1xuICAgIH07XG4gICAgY29uc3RydWN0b3IoY2ZnKXtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hbmltYXRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fY2hhcnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2xvb3AgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2Z1bGxMb29wID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9wYXRoID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9wb2ludHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3NlZ21lbnRzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9kZWNpbWF0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcG9pbnRzVXBkYXRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9kYXRhc2V0SW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChjZmcpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgY2ZnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVDb250cm9sUG9pbnRzKGNoYXJ0QXJlYSwgaW5kZXhBeGlzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmICgob3B0aW9ucy50ZW5zaW9uIHx8IG9wdGlvbnMuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZSA9PT0gJ21vbm90b25lJykgJiYgIW9wdGlvbnMuc3RlcHBlZCAmJiAhdGhpcy5fcG9pbnRzVXBkYXRlZCkge1xuICAgICAgICAgICAgY29uc3QgbG9vcCA9IG9wdGlvbnMuc3BhbkdhcHMgPyB0aGlzLl9sb29wIDogdGhpcy5fZnVsbExvb3A7XG4gICAgICAgICAgICBfdXBkYXRlQmV6aWVyQ29udHJvbFBvaW50cyh0aGlzLl9wb2ludHMsIG9wdGlvbnMsIGNoYXJ0QXJlYSwgbG9vcCwgaW5kZXhBeGlzKTtcbiAgICAgICAgICAgIHRoaXMuX3BvaW50c1VwZGF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldCBwb2ludHMocG9pbnRzKSB7XG4gICAgICAgIHRoaXMuX3BvaW50cyA9IHBvaW50cztcbiAgICAgICAgZGVsZXRlIHRoaXMuX3NlZ21lbnRzO1xuICAgICAgICBkZWxldGUgdGhpcy5fcGF0aDtcbiAgICAgICAgdGhpcy5fcG9pbnRzVXBkYXRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBnZXQgcG9pbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9pbnRzO1xuICAgIH1cbiAgICBnZXQgc2VnbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWdtZW50cyB8fCAodGhpcy5fc2VnbWVudHMgPSBfY29tcHV0ZVNlZ21lbnRzKHRoaXMsIHRoaXMub3B0aW9ucy5zZWdtZW50KSk7XG4gICAgfVxuIGZpcnN0KCkge1xuICAgICAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuc2VnbWVudHM7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IHRoaXMucG9pbnRzO1xuICAgICAgICByZXR1cm4gc2VnbWVudHMubGVuZ3RoICYmIHBvaW50c1tzZWdtZW50c1swXS5zdGFydF07XG4gICAgfVxuIGxhc3QoKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gdGhpcy5zZWdtZW50cztcbiAgICAgICAgY29uc3QgcG9pbnRzID0gdGhpcy5wb2ludHM7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gc2VnbWVudHMubGVuZ3RoO1xuICAgICAgICByZXR1cm4gY291bnQgJiYgcG9pbnRzW3NlZ21lbnRzW2NvdW50IC0gMV0uZW5kXTtcbiAgICB9XG4gaW50ZXJwb2xhdGUocG9pbnQsIHByb3BlcnR5KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcG9pbnRbcHJvcGVydHldO1xuICAgICAgICBjb25zdCBwb2ludHMgPSB0aGlzLnBvaW50cztcbiAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBfYm91bmRTZWdtZW50cyh0aGlzLCB7XG4gICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgIHN0YXJ0OiB2YWx1ZSxcbiAgICAgICAgICAgIGVuZDogdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghc2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGNvbnN0IF9pbnRlcnBvbGF0ZSA9IF9nZXRJbnRlcnBvbGF0aW9uTWV0aG9kKG9wdGlvbnMpO1xuICAgICAgICBsZXQgaSwgaWxlbjtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gc2VnbWVudHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnQgLCBlbmQgIH0gPSBzZWdtZW50c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHAxID0gcG9pbnRzW3N0YXJ0XTtcbiAgICAgICAgICAgIGNvbnN0IHAyID0gcG9pbnRzW2VuZF07XG4gICAgICAgICAgICBpZiAocDEgPT09IHAyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocDEpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdCA9IE1hdGguYWJzKCh2YWx1ZSAtIHAxW3Byb3BlcnR5XSkgLyAocDJbcHJvcGVydHldIC0gcDFbcHJvcGVydHldKSk7XG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0ZWQgPSBfaW50ZXJwb2xhdGUocDEsIHAyLCB0LCBvcHRpb25zLnN0ZXBwZWQpO1xuICAgICAgICAgICAgaW50ZXJwb2xhdGVkW3Byb3BlcnR5XSA9IHBvaW50W3Byb3BlcnR5XTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGludGVycG9sYXRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDEgPyByZXN1bHRbMF0gOiByZXN1bHQ7XG4gICAgfVxuIHBhdGhTZWdtZW50KGN0eCwgc2VnbWVudCwgcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRNZXRob2QgPSBfZ2V0U2VnbWVudE1ldGhvZCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHNlZ21lbnRNZXRob2QoY3R4LCB0aGlzLCBzZWdtZW50LCBwYXJhbXMpO1xuICAgIH1cbiBwYXRoKGN0eCwgc3RhcnQsIGNvdW50KSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gdGhpcy5zZWdtZW50cztcbiAgICAgICAgY29uc3Qgc2VnbWVudE1ldGhvZCA9IF9nZXRTZWdtZW50TWV0aG9kKHRoaXMpO1xuICAgICAgICBsZXQgbG9vcCA9IHRoaXMuX2xvb3A7XG4gICAgICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDtcbiAgICAgICAgY291bnQgPSBjb3VudCB8fCB0aGlzLnBvaW50cy5sZW5ndGggLSBzdGFydDtcbiAgICAgICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKXtcbiAgICAgICAgICAgIGxvb3AgJj0gc2VnbWVudE1ldGhvZChjdHgsIHRoaXMsIHNlZ21lbnQsIHtcbiAgICAgICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgICAgICBlbmQ6IHN0YXJ0ICsgY291bnQgLSAxXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISFsb29wO1xuICAgIH1cbiBkcmF3KGN0eCwgY2hhcnRBcmVhLCBzdGFydCwgY291bnQpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gdGhpcy5wb2ludHMgfHwgW107XG4gICAgICAgIGlmIChwb2ludHMubGVuZ3RoICYmIG9wdGlvbnMuYm9yZGVyV2lkdGgpIHtcbiAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICBkcmF3KGN0eCwgdGhpcywgc3RhcnQsIGNvdW50KTtcbiAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3BvaW50c1VwZGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3BhdGggPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGluUmFuZ2UkMShlbCwgcG9zLCBheGlzLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGVsLm9wdGlvbnM7XG4gICAgY29uc3QgeyBbYXhpc106IHZhbHVlICB9ID0gZWwuZ2V0UHJvcHMoW1xuICAgICAgICBheGlzXG4gICAgXSwgdXNlRmluYWxQb3NpdGlvbik7XG4gICAgcmV0dXJuIE1hdGguYWJzKHBvcyAtIHZhbHVlKSA8IG9wdGlvbnMucmFkaXVzICsgb3B0aW9ucy5oaXRSYWRpdXM7XG59XG5jbGFzcyBQb2ludEVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBzdGF0aWMgaWQgPSAncG9pbnQnO1xuICAgIHBhcnNlZDtcbiAgICBza2lwO1xuICAgIHN0b3A7XG4gICAgLyoqXG4gICAqIEB0eXBlIHthbnl9XG4gICAqLyBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgICBoaXRSYWRpdXM6IDEsXG4gICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6IDEsXG4gICAgICAgIGhvdmVyUmFkaXVzOiA0LFxuICAgICAgICBwb2ludFN0eWxlOiAnY2lyY2xlJyxcbiAgICAgICAgcmFkaXVzOiAzLFxuICAgICAgICByb3RhdGlvbjogMFxuICAgIH07XG4gICAgLyoqXG4gICAqIEB0eXBlIHthbnl9XG4gICAqLyBzdGF0aWMgZGVmYXVsdFJvdXRlcyA9IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnYmFja2dyb3VuZENvbG9yJyxcbiAgICAgICAgYm9yZGVyQ29sb3I6ICdib3JkZXJDb2xvcidcbiAgICB9O1xuICAgIGNvbnN0cnVjdG9yKGNmZyl7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wYXJzZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuc2tpcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5zdG9wID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoY2ZnKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGNmZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5SYW5nZShtb3VzZVgsIG1vdXNlWSwgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gdGhpcy5nZXRQcm9wcyhbXG4gICAgICAgICAgICAneCcsXG4gICAgICAgICAgICAneSdcbiAgICAgICAgXSwgdXNlRmluYWxQb3NpdGlvbik7XG4gICAgICAgIHJldHVybiBNYXRoLnBvdyhtb3VzZVggLSB4LCAyKSArIE1hdGgucG93KG1vdXNlWSAtIHksIDIpIDwgTWF0aC5wb3cob3B0aW9ucy5oaXRSYWRpdXMgKyBvcHRpb25zLnJhZGl1cywgMik7XG4gICAgfVxuICAgIGluWFJhbmdlKG1vdXNlWCwgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICByZXR1cm4gaW5SYW5nZSQxKHRoaXMsIG1vdXNlWCwgJ3gnLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICB9XG4gICAgaW5ZUmFuZ2UobW91c2VZLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBpblJhbmdlJDEodGhpcywgbW91c2VZLCAneScsIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgIH1cbiAgICBnZXRDZW50ZXJQb2ludCh1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgIH0gPSB0aGlzLmdldFByb3BzKFtcbiAgICAgICAgICAgICd4JyxcbiAgICAgICAgICAgICd5J1xuICAgICAgICBdLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5XG4gICAgICAgIH07XG4gICAgfVxuICAgIHNpemUob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB0aGlzLm9wdGlvbnMgfHwge307XG4gICAgICAgIGxldCByYWRpdXMgPSBvcHRpb25zLnJhZGl1cyB8fCAwO1xuICAgICAgICByYWRpdXMgPSBNYXRoLm1heChyYWRpdXMsIHJhZGl1cyAmJiBvcHRpb25zLmhvdmVyUmFkaXVzIHx8IDApO1xuICAgICAgICBjb25zdCBib3JkZXJXaWR0aCA9IHJhZGl1cyAmJiBvcHRpb25zLmJvcmRlcldpZHRoIHx8IDA7XG4gICAgICAgIHJldHVybiAocmFkaXVzICsgYm9yZGVyV2lkdGgpICogMjtcbiAgICB9XG4gICAgZHJhdyhjdHgsIGFyZWEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgaWYgKHRoaXMuc2tpcCB8fCBvcHRpb25zLnJhZGl1cyA8IDAuMSB8fCAhX2lzUG9pbnRJbkFyZWEodGhpcywgYXJlYSwgdGhpcy5zaXplKG9wdGlvbnMpIC8gMikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBvcHRpb25zLmJvcmRlckNvbG9yO1xuICAgICAgICBjdHgubGluZVdpZHRoID0gb3B0aW9ucy5ib3JkZXJXaWR0aDtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdGlvbnMuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICBkcmF3UG9pbnQoY3R4LCBvcHRpb25zLCB0aGlzLngsIHRoaXMueSk7XG4gICAgfVxuICAgIGdldFJhbmdlKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zIHx8IHt9O1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEZhbGxiYWNrcyBzaG91bGQgbmV2ZXIgYmUgaGl0IGluIHByYWN0aWNlXG4gICAgICAgIHJldHVybiBvcHRpb25zLnJhZGl1cyArIG9wdGlvbnMuaGl0UmFkaXVzO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0QmFyQm91bmRzKGJhciwgdXNlRmluYWxQb3NpdGlvbikge1xuICAgIGNvbnN0IHsgeCAsIHkgLCBiYXNlICwgd2lkdGggLCBoZWlnaHQgIH0gPSAgYmFyLmdldFByb3BzKFtcbiAgICAgICAgJ3gnLFxuICAgICAgICAneScsXG4gICAgICAgICdiYXNlJyxcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgJ2hlaWdodCdcbiAgICBdLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICBsZXQgbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBoYWxmO1xuICAgIGlmIChiYXIuaG9yaXpvbnRhbCkge1xuICAgICAgICBoYWxmID0gaGVpZ2h0IC8gMjtcbiAgICAgICAgbGVmdCA9IE1hdGgubWluKHgsIGJhc2UpO1xuICAgICAgICByaWdodCA9IE1hdGgubWF4KHgsIGJhc2UpO1xuICAgICAgICB0b3AgPSB5IC0gaGFsZjtcbiAgICAgICAgYm90dG9tID0geSArIGhhbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaGFsZiA9IHdpZHRoIC8gMjtcbiAgICAgICAgbGVmdCA9IHggLSBoYWxmO1xuICAgICAgICByaWdodCA9IHggKyBoYWxmO1xuICAgICAgICB0b3AgPSBNYXRoLm1pbih5LCBiYXNlKTtcbiAgICAgICAgYm90dG9tID0gTWF0aC5tYXgoeSwgYmFzZSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQsXG4gICAgICAgIHRvcCxcbiAgICAgICAgcmlnaHQsXG4gICAgICAgIGJvdHRvbVxuICAgIH07XG59XG5mdW5jdGlvbiBza2lwT3JMaW1pdChza2lwLCB2YWx1ZSwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gc2tpcCA/IDAgOiBfbGltaXRWYWx1ZSh2YWx1ZSwgbWluLCBtYXgpO1xufVxuZnVuY3Rpb24gcGFyc2VCb3JkZXJXaWR0aChiYXIsIG1heFcsIG1heEgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGJhci5vcHRpb25zLmJvcmRlcldpZHRoO1xuICAgIGNvbnN0IHNraXAgPSBiYXIuYm9yZGVyU2tpcHBlZDtcbiAgICBjb25zdCBvID0gdG9UUkJMKHZhbHVlKTtcbiAgICByZXR1cm4ge1xuICAgICAgICB0OiBza2lwT3JMaW1pdChza2lwLnRvcCwgby50b3AsIDAsIG1heEgpLFxuICAgICAgICByOiBza2lwT3JMaW1pdChza2lwLnJpZ2h0LCBvLnJpZ2h0LCAwLCBtYXhXKSxcbiAgICAgICAgYjogc2tpcE9yTGltaXQoc2tpcC5ib3R0b20sIG8uYm90dG9tLCAwLCBtYXhIKSxcbiAgICAgICAgbDogc2tpcE9yTGltaXQoc2tpcC5sZWZ0LCBvLmxlZnQsIDAsIG1heFcpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHBhcnNlQm9yZGVyUmFkaXVzKGJhciwgbWF4VywgbWF4SCkge1xuICAgIGNvbnN0IHsgZW5hYmxlQm9yZGVyUmFkaXVzICB9ID0gYmFyLmdldFByb3BzKFtcbiAgICAgICAgJ2VuYWJsZUJvcmRlclJhZGl1cydcbiAgICBdKTtcbiAgICBjb25zdCB2YWx1ZSA9IGJhci5vcHRpb25zLmJvcmRlclJhZGl1cztcbiAgICBjb25zdCBvID0gdG9UUkJMQ29ybmVycyh2YWx1ZSk7XG4gICAgY29uc3QgbWF4UiA9IE1hdGgubWluKG1heFcsIG1heEgpO1xuICAgIGNvbnN0IHNraXAgPSBiYXIuYm9yZGVyU2tpcHBlZDtcbiAgICBjb25zdCBlbmFibGVCb3JkZXIgPSBlbmFibGVCb3JkZXJSYWRpdXMgfHwgaXNPYmplY3QodmFsdWUpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHRvcExlZnQ6IHNraXBPckxpbWl0KCFlbmFibGVCb3JkZXIgfHwgc2tpcC50b3AgfHwgc2tpcC5sZWZ0LCBvLnRvcExlZnQsIDAsIG1heFIpLFxuICAgICAgICB0b3BSaWdodDogc2tpcE9yTGltaXQoIWVuYWJsZUJvcmRlciB8fCBza2lwLnRvcCB8fCBza2lwLnJpZ2h0LCBvLnRvcFJpZ2h0LCAwLCBtYXhSKSxcbiAgICAgICAgYm90dG9tTGVmdDogc2tpcE9yTGltaXQoIWVuYWJsZUJvcmRlciB8fCBza2lwLmJvdHRvbSB8fCBza2lwLmxlZnQsIG8uYm90dG9tTGVmdCwgMCwgbWF4UiksXG4gICAgICAgIGJvdHRvbVJpZ2h0OiBza2lwT3JMaW1pdCghZW5hYmxlQm9yZGVyIHx8IHNraXAuYm90dG9tIHx8IHNraXAucmlnaHQsIG8uYm90dG9tUmlnaHQsIDAsIG1heFIpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJvdW5kaW5nUmVjdHMoYmFyKSB7XG4gICAgY29uc3QgYm91bmRzID0gZ2V0QmFyQm91bmRzKGJhcik7XG4gICAgY29uc3Qgd2lkdGggPSBib3VuZHMucmlnaHQgLSBib3VuZHMubGVmdDtcbiAgICBjb25zdCBoZWlnaHQgPSBib3VuZHMuYm90dG9tIC0gYm91bmRzLnRvcDtcbiAgICBjb25zdCBib3JkZXIgPSBwYXJzZUJvcmRlcldpZHRoKGJhciwgd2lkdGggLyAyLCBoZWlnaHQgLyAyKTtcbiAgICBjb25zdCByYWRpdXMgPSBwYXJzZUJvcmRlclJhZGl1cyhiYXIsIHdpZHRoIC8gMiwgaGVpZ2h0IC8gMik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb3V0ZXI6IHtcbiAgICAgICAgICAgIHg6IGJvdW5kcy5sZWZ0LFxuICAgICAgICAgICAgeTogYm91bmRzLnRvcCxcbiAgICAgICAgICAgIHc6IHdpZHRoLFxuICAgICAgICAgICAgaDogaGVpZ2h0LFxuICAgICAgICAgICAgcmFkaXVzXG4gICAgICAgIH0sXG4gICAgICAgIGlubmVyOiB7XG4gICAgICAgICAgICB4OiBib3VuZHMubGVmdCArIGJvcmRlci5sLFxuICAgICAgICAgICAgeTogYm91bmRzLnRvcCArIGJvcmRlci50LFxuICAgICAgICAgICAgdzogd2lkdGggLSBib3JkZXIubCAtIGJvcmRlci5yLFxuICAgICAgICAgICAgaDogaGVpZ2h0IC0gYm9yZGVyLnQgLSBib3JkZXIuYixcbiAgICAgICAgICAgIHJhZGl1czoge1xuICAgICAgICAgICAgICAgIHRvcExlZnQ6IE1hdGgubWF4KDAsIHJhZGl1cy50b3BMZWZ0IC0gTWF0aC5tYXgoYm9yZGVyLnQsIGJvcmRlci5sKSksXG4gICAgICAgICAgICAgICAgdG9wUmlnaHQ6IE1hdGgubWF4KDAsIHJhZGl1cy50b3BSaWdodCAtIE1hdGgubWF4KGJvcmRlci50LCBib3JkZXIucikpLFxuICAgICAgICAgICAgICAgIGJvdHRvbUxlZnQ6IE1hdGgubWF4KDAsIHJhZGl1cy5ib3R0b21MZWZ0IC0gTWF0aC5tYXgoYm9yZGVyLmIsIGJvcmRlci5sKSksXG4gICAgICAgICAgICAgICAgYm90dG9tUmlnaHQ6IE1hdGgubWF4KDAsIHJhZGl1cy5ib3R0b21SaWdodCAtIE1hdGgubWF4KGJvcmRlci5iLCBib3JkZXIucikpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gaW5SYW5nZShiYXIsIHgsIHksIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICBjb25zdCBza2lwWCA9IHggPT09IG51bGw7XG4gICAgY29uc3Qgc2tpcFkgPSB5ID09PSBudWxsO1xuICAgIGNvbnN0IHNraXBCb3RoID0gc2tpcFggJiYgc2tpcFk7XG4gICAgY29uc3QgYm91bmRzID0gYmFyICYmICFza2lwQm90aCAmJiBnZXRCYXJCb3VuZHMoYmFyLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICByZXR1cm4gYm91bmRzICYmIChza2lwWCB8fCBfaXNCZXR3ZWVuKHgsIGJvdW5kcy5sZWZ0LCBib3VuZHMucmlnaHQpKSAmJiAoc2tpcFkgfHwgX2lzQmV0d2Vlbih5LCBib3VuZHMudG9wLCBib3VuZHMuYm90dG9tKSk7XG59XG5mdW5jdGlvbiBoYXNSYWRpdXMocmFkaXVzKSB7XG4gICAgcmV0dXJuIHJhZGl1cy50b3BMZWZ0IHx8IHJhZGl1cy50b3BSaWdodCB8fCByYWRpdXMuYm90dG9tTGVmdCB8fCByYWRpdXMuYm90dG9tUmlnaHQ7XG59XG4gZnVuY3Rpb24gYWRkTm9ybWFsUmVjdFBhdGgoY3R4LCByZWN0KSB7XG4gICAgY3R4LnJlY3QocmVjdC54LCByZWN0LnksIHJlY3QudywgcmVjdC5oKTtcbn1cbmZ1bmN0aW9uIGluZmxhdGVSZWN0KHJlY3QsIGFtb3VudCwgcmVmUmVjdCA9IHt9KSB7XG4gICAgY29uc3QgeCA9IHJlY3QueCAhPT0gcmVmUmVjdC54ID8gLWFtb3VudCA6IDA7XG4gICAgY29uc3QgeSA9IHJlY3QueSAhPT0gcmVmUmVjdC55ID8gLWFtb3VudCA6IDA7XG4gICAgY29uc3QgdyA9IChyZWN0LnggKyByZWN0LncgIT09IHJlZlJlY3QueCArIHJlZlJlY3QudyA/IGFtb3VudCA6IDApIC0geDtcbiAgICBjb25zdCBoID0gKHJlY3QueSArIHJlY3QuaCAhPT0gcmVmUmVjdC55ICsgcmVmUmVjdC5oID8gYW1vdW50IDogMCkgLSB5O1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJlY3QueCArIHgsXG4gICAgICAgIHk6IHJlY3QueSArIHksXG4gICAgICAgIHc6IHJlY3QudyArIHcsXG4gICAgICAgIGg6IHJlY3QuaCArIGgsXG4gICAgICAgIHJhZGl1czogcmVjdC5yYWRpdXNcbiAgICB9O1xufVxuY2xhc3MgQmFyRWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICAgIHN0YXRpYyBpZCA9ICdiYXInO1xuIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICAgICAgYm9yZGVyU2tpcHBlZDogJ3N0YXJ0JyxcbiAgICAgICAgYm9yZGVyV2lkdGg6IDAsXG4gICAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgICAgaW5mbGF0ZUFtb3VudDogJ2F1dG8nLFxuICAgICAgICBwb2ludFN0eWxlOiB1bmRlZmluZWRcbiAgICB9O1xuIHN0YXRpYyBkZWZhdWx0Um91dGVzID0ge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICAgICAgICBib3JkZXJDb2xvcjogJ2JvcmRlckNvbG9yJ1xuICAgIH07XG4gICAgY29uc3RydWN0b3IoY2ZnKXtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmhvcml6b250YWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYmFzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy53aWR0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuaW5mbGF0ZUFtb3VudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGNmZykge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBjZmcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRyYXcoY3R4KSB7XG4gICAgICAgIGNvbnN0IHsgaW5mbGF0ZUFtb3VudCAsIG9wdGlvbnM6IHsgYm9yZGVyQ29sb3IgLCBiYWNrZ3JvdW5kQ29sb3IgIH0gIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IGlubmVyICwgb3V0ZXIgIH0gPSBib3VuZGluZ1JlY3RzKHRoaXMpO1xuICAgICAgICBjb25zdCBhZGRSZWN0UGF0aCA9IGhhc1JhZGl1cyhvdXRlci5yYWRpdXMpID8gYWRkUm91bmRlZFJlY3RQYXRoIDogYWRkTm9ybWFsUmVjdFBhdGg7XG4gICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgIGlmIChvdXRlci53ICE9PSBpbm5lci53IHx8IG91dGVyLmggIT09IGlubmVyLmgpIHtcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGFkZFJlY3RQYXRoKGN0eCwgaW5mbGF0ZVJlY3Qob3V0ZXIsIGluZmxhdGVBbW91bnQsIGlubmVyKSk7XG4gICAgICAgICAgICBjdHguY2xpcCgpO1xuICAgICAgICAgICAgYWRkUmVjdFBhdGgoY3R4LCBpbmZsYXRlUmVjdChpbm5lciwgLWluZmxhdGVBbW91bnQsIG91dGVyKSk7XG4gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gYm9yZGVyQ29sb3I7XG4gICAgICAgICAgICBjdHguZmlsbCgnZXZlbm9kZCcpO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgYWRkUmVjdFBhdGgoY3R4LCBpbmZsYXRlUmVjdChpbm5lciwgaW5mbGF0ZUFtb3VudCkpO1xuICAgICAgICBjdHguZmlsbFN0eWxlID0gYmFja2dyb3VuZENvbG9yO1xuICAgICAgICBjdHguZmlsbCgpO1xuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgIH1cbiAgICBpblJhbmdlKG1vdXNlWCwgbW91c2VZLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBpblJhbmdlKHRoaXMsIG1vdXNlWCwgbW91c2VZLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICB9XG4gICAgaW5YUmFuZ2UobW91c2VYLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBpblJhbmdlKHRoaXMsIG1vdXNlWCwgbnVsbCwgdXNlRmluYWxQb3NpdGlvbik7XG4gICAgfVxuICAgIGluWVJhbmdlKG1vdXNlWSwgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICByZXR1cm4gaW5SYW5nZSh0aGlzLCBudWxsLCBtb3VzZVksIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgIH1cbiAgICBnZXRDZW50ZXJQb2ludCh1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgLCBiYXNlICwgaG9yaXpvbnRhbCAgfSA9ICB0aGlzLmdldFByb3BzKFtcbiAgICAgICAgICAgICd4JyxcbiAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICdiYXNlJyxcbiAgICAgICAgICAgICdob3Jpem9udGFsJ1xuICAgICAgICBdLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IGhvcml6b250YWwgPyAoeCArIGJhc2UpIC8gMiA6IHgsXG4gICAgICAgICAgICB5OiBob3Jpem9udGFsID8geSA6ICh5ICsgYmFzZSkgLyAyXG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldFJhbmdlKGF4aXMpIHtcbiAgICAgICAgcmV0dXJuIGF4aXMgPT09ICd4JyA/IHRoaXMud2lkdGggLyAyIDogdGhpcy5oZWlnaHQgLyAyO1xuICAgIH1cbn1cblxudmFyIGVsZW1lbnRzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuX19wcm90b19fOiBudWxsLFxuQXJjRWxlbWVudDogQXJjRWxlbWVudCxcbkJhckVsZW1lbnQ6IEJhckVsZW1lbnQsXG5MaW5lRWxlbWVudDogTGluZUVsZW1lbnQsXG5Qb2ludEVsZW1lbnQ6IFBvaW50RWxlbWVudFxufSk7XG5cbmNvbnN0IEJPUkRFUl9DT0xPUlMgPSBbXG4gICAgJ3JnYig1NCwgMTYyLCAyMzUpJyxcbiAgICAncmdiKDI1NSwgOTksIDEzMiknLFxuICAgICdyZ2IoMjU1LCAxNTksIDY0KScsXG4gICAgJ3JnYigyNTUsIDIwNSwgODYpJyxcbiAgICAncmdiKDc1LCAxOTIsIDE5MiknLFxuICAgICdyZ2IoMTUzLCAxMDIsIDI1NSknLFxuICAgICdyZ2IoMjAxLCAyMDMsIDIwNyknIC8vIGdyZXlcbl07XG4vLyBCb3JkZXIgY29sb3JzIHdpdGggNTAlIHRyYW5zcGFyZW5jeVxuY29uc3QgQkFDS0dST1VORF9DT0xPUlMgPSAvKiAjX19QVVJFX18gKi8gQk9SREVSX0NPTE9SUy5tYXAoKGNvbG9yKT0+Y29sb3IucmVwbGFjZSgncmdiKCcsICdyZ2JhKCcpLnJlcGxhY2UoJyknLCAnLCAwLjUpJykpO1xuZnVuY3Rpb24gZ2V0Qm9yZGVyQ29sb3IoaSkge1xuICAgIHJldHVybiBCT1JERVJfQ09MT1JTW2kgJSBCT1JERVJfQ09MT1JTLmxlbmd0aF07XG59XG5mdW5jdGlvbiBnZXRCYWNrZ3JvdW5kQ29sb3IoaSkge1xuICAgIHJldHVybiBCQUNLR1JPVU5EX0NPTE9SU1tpICUgQkFDS0dST1VORF9DT0xPUlMubGVuZ3RoXTtcbn1cbmZ1bmN0aW9uIGNvbG9yaXplRGVmYXVsdERhdGFzZXQoZGF0YXNldCwgaSkge1xuICAgIGRhdGFzZXQuYm9yZGVyQ29sb3IgPSBnZXRCb3JkZXJDb2xvcihpKTtcbiAgICBkYXRhc2V0LmJhY2tncm91bmRDb2xvciA9IGdldEJhY2tncm91bmRDb2xvcihpKTtcbiAgICByZXR1cm4gKytpO1xufVxuZnVuY3Rpb24gY29sb3JpemVEb3VnaG51dERhdGFzZXQoZGF0YXNldCwgaSkge1xuICAgIGRhdGFzZXQuYmFja2dyb3VuZENvbG9yID0gZGF0YXNldC5kYXRhLm1hcCgoKT0+Z2V0Qm9yZGVyQ29sb3IoaSsrKSk7XG4gICAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBjb2xvcml6ZVBvbGFyQXJlYURhdGFzZXQoZGF0YXNldCwgaSkge1xuICAgIGRhdGFzZXQuYmFja2dyb3VuZENvbG9yID0gZGF0YXNldC5kYXRhLm1hcCgoKT0+Z2V0QmFja2dyb3VuZENvbG9yKGkrKykpO1xuICAgIHJldHVybiBpO1xufVxuZnVuY3Rpb24gZ2V0Q29sb3JpemVyKGNoYXJ0KSB7XG4gICAgbGV0IGkgPSAwO1xuICAgIHJldHVybiAoZGF0YXNldCwgZGF0YXNldEluZGV4KT0+e1xuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KS5jb250cm9sbGVyO1xuICAgICAgICBpZiAoY29udHJvbGxlciBpbnN0YW5jZW9mIERvdWdobnV0Q29udHJvbGxlcikge1xuICAgICAgICAgICAgaSA9IGNvbG9yaXplRG91Z2hudXREYXRhc2V0KGRhdGFzZXQsIGkpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2xsZXIgaW5zdGFuY2VvZiBQb2xhckFyZWFDb250cm9sbGVyKSB7XG4gICAgICAgICAgICBpID0gY29sb3JpemVQb2xhckFyZWFEYXRhc2V0KGRhdGFzZXQsIGkpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGkgPSBjb2xvcml6ZURlZmF1bHREYXRhc2V0KGRhdGFzZXQsIGkpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNvbnRhaW5zQ29sb3JzRGVmaW5pdGlvbnMoZGVzY3JpcHRvcnMpIHtcbiAgICBsZXQgaztcbiAgICBmb3IoayBpbiBkZXNjcmlwdG9ycyl7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yc1trXS5ib3JkZXJDb2xvciB8fCBkZXNjcmlwdG9yc1trXS5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNvbnRhaW5zQ29sb3JzRGVmaW5pdGlvbihkZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIGRlc2NyaXB0b3IgJiYgKGRlc2NyaXB0b3IuYm9yZGVyQ29sb3IgfHwgZGVzY3JpcHRvci5iYWNrZ3JvdW5kQ29sb3IpO1xufVxuZnVuY3Rpb24gY29udGFpbnNEZWZhdWx0Q29sb3JzRGVmZW5pdGlvbnMoKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRzLmJvcmRlckNvbG9yICE9PSAncmdiYSgwLDAsMCwwLjEpJyB8fCBkZWZhdWx0cy5iYWNrZ3JvdW5kQ29sb3IgIT09ICdyZ2JhKDAsMCwwLDAuMSknO1xufVxudmFyIHBsdWdpbl9jb2xvcnMgPSB7XG4gICAgaWQ6ICdjb2xvcnMnLFxuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGZvcmNlT3ZlcnJpZGU6IGZhbHNlXG4gICAgfSxcbiAgICBiZWZvcmVMYXlvdXQgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBpZiAoIW9wdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZGF0YTogeyBkYXRhc2V0cyAgfSAsIG9wdGlvbnM6IGNoYXJ0T3B0aW9ucyAgfSA9IGNoYXJ0LmNvbmZpZztcbiAgICAgICAgY29uc3QgeyBlbGVtZW50cyAgfSA9IGNoYXJ0T3B0aW9ucztcbiAgICAgICAgY29uc3QgY29udGFpbnNDb2xvckRlZmVuaXRpb24gPSBjb250YWluc0NvbG9yc0RlZmluaXRpb25zKGRhdGFzZXRzKSB8fCBjb250YWluc0NvbG9yc0RlZmluaXRpb24oY2hhcnRPcHRpb25zKSB8fCBlbGVtZW50cyAmJiBjb250YWluc0NvbG9yc0RlZmluaXRpb25zKGVsZW1lbnRzKSB8fCBjb250YWluc0RlZmF1bHRDb2xvcnNEZWZlbml0aW9ucygpO1xuICAgICAgICBpZiAoIW9wdGlvbnMuZm9yY2VPdmVycmlkZSAmJiBjb250YWluc0NvbG9yRGVmZW5pdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbG9yaXplciA9IGdldENvbG9yaXplcihjaGFydCk7XG4gICAgICAgIGRhdGFzZXRzLmZvckVhY2goY29sb3JpemVyKTtcbiAgICB9XG59O1xuXG5mdW5jdGlvbiBsdHRiRGVjaW1hdGlvbihkYXRhLCBzdGFydCwgY291bnQsIGF2YWlsYWJsZVdpZHRoLCBvcHRpb25zKSB7XG4gY29uc3Qgc2FtcGxlcyA9IG9wdGlvbnMuc2FtcGxlcyB8fCBhdmFpbGFibGVXaWR0aDtcbiAgICBpZiAoc2FtcGxlcyA+PSBjb3VudCkge1xuICAgICAgICByZXR1cm4gZGF0YS5zbGljZShzdGFydCwgc3RhcnQgKyBjb3VudCk7XG4gICAgfVxuICAgIGNvbnN0IGRlY2ltYXRlZCA9IFtdO1xuICAgIGNvbnN0IGJ1Y2tldFdpZHRoID0gKGNvdW50IC0gMikgLyAoc2FtcGxlcyAtIDIpO1xuICAgIGxldCBzYW1wbGVkSW5kZXggPSAwO1xuICAgIGNvbnN0IGVuZEluZGV4ID0gc3RhcnQgKyBjb3VudCAtIDE7XG4gICAgbGV0IGEgPSBzdGFydDtcbiAgICBsZXQgaSwgbWF4QXJlYVBvaW50LCBtYXhBcmVhLCBhcmVhLCBuZXh0QTtcbiAgICBkZWNpbWF0ZWRbc2FtcGxlZEluZGV4KytdID0gZGF0YVthXTtcbiAgICBmb3IoaSA9IDA7IGkgPCBzYW1wbGVzIC0gMjsgaSsrKXtcbiAgICAgICAgbGV0IGF2Z1ggPSAwO1xuICAgICAgICBsZXQgYXZnWSA9IDA7XG4gICAgICAgIGxldCBqO1xuICAgICAgICBjb25zdCBhdmdSYW5nZVN0YXJ0ID0gTWF0aC5mbG9vcigoaSArIDEpICogYnVja2V0V2lkdGgpICsgMSArIHN0YXJ0O1xuICAgICAgICBjb25zdCBhdmdSYW5nZUVuZCA9IE1hdGgubWluKE1hdGguZmxvb3IoKGkgKyAyKSAqIGJ1Y2tldFdpZHRoKSArIDEsIGNvdW50KSArIHN0YXJ0O1xuICAgICAgICBjb25zdCBhdmdSYW5nZUxlbmd0aCA9IGF2Z1JhbmdlRW5kIC0gYXZnUmFuZ2VTdGFydDtcbiAgICAgICAgZm9yKGogPSBhdmdSYW5nZVN0YXJ0OyBqIDwgYXZnUmFuZ2VFbmQ7IGorKyl7XG4gICAgICAgICAgICBhdmdYICs9IGRhdGFbal0ueDtcbiAgICAgICAgICAgIGF2Z1kgKz0gZGF0YVtqXS55O1xuICAgICAgICB9XG4gICAgICAgIGF2Z1ggLz0gYXZnUmFuZ2VMZW5ndGg7XG4gICAgICAgIGF2Z1kgLz0gYXZnUmFuZ2VMZW5ndGg7XG4gICAgICAgIGNvbnN0IHJhbmdlT2ZmcyA9IE1hdGguZmxvb3IoaSAqIGJ1Y2tldFdpZHRoKSArIDEgKyBzdGFydDtcbiAgICAgICAgY29uc3QgcmFuZ2VUbyA9IE1hdGgubWluKE1hdGguZmxvb3IoKGkgKyAxKSAqIGJ1Y2tldFdpZHRoKSArIDEsIGNvdW50KSArIHN0YXJ0O1xuICAgICAgICBjb25zdCB7IHg6IHBvaW50QXggLCB5OiBwb2ludEF5ICB9ID0gZGF0YVthXTtcbiAgICAgICAgbWF4QXJlYSA9IGFyZWEgPSAtMTtcbiAgICAgICAgZm9yKGogPSByYW5nZU9mZnM7IGogPCByYW5nZVRvOyBqKyspe1xuICAgICAgICAgICAgYXJlYSA9IDAuNSAqIE1hdGguYWJzKChwb2ludEF4IC0gYXZnWCkgKiAoZGF0YVtqXS55IC0gcG9pbnRBeSkgLSAocG9pbnRBeCAtIGRhdGFbal0ueCkgKiAoYXZnWSAtIHBvaW50QXkpKTtcbiAgICAgICAgICAgIGlmIChhcmVhID4gbWF4QXJlYSkge1xuICAgICAgICAgICAgICAgIG1heEFyZWEgPSBhcmVhO1xuICAgICAgICAgICAgICAgIG1heEFyZWFQb2ludCA9IGRhdGFbal07XG4gICAgICAgICAgICAgICAgbmV4dEEgPSBqO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlY2ltYXRlZFtzYW1wbGVkSW5kZXgrK10gPSBtYXhBcmVhUG9pbnQ7XG4gICAgICAgIGEgPSBuZXh0QTtcbiAgICB9XG4gICAgZGVjaW1hdGVkW3NhbXBsZWRJbmRleCsrXSA9IGRhdGFbZW5kSW5kZXhdO1xuICAgIHJldHVybiBkZWNpbWF0ZWQ7XG59XG5mdW5jdGlvbiBtaW5NYXhEZWNpbWF0aW9uKGRhdGEsIHN0YXJ0LCBjb3VudCwgYXZhaWxhYmxlV2lkdGgpIHtcbiAgICBsZXQgYXZnWCA9IDA7XG4gICAgbGV0IGNvdW50WCA9IDA7XG4gICAgbGV0IGksIHBvaW50LCB4LCB5LCBwcmV2WCwgbWluSW5kZXgsIG1heEluZGV4LCBzdGFydEluZGV4LCBtaW5ZLCBtYXhZO1xuICAgIGNvbnN0IGRlY2ltYXRlZCA9IFtdO1xuICAgIGNvbnN0IGVuZEluZGV4ID0gc3RhcnQgKyBjb3VudCAtIDE7XG4gICAgY29uc3QgeE1pbiA9IGRhdGFbc3RhcnRdLng7XG4gICAgY29uc3QgeE1heCA9IGRhdGFbZW5kSW5kZXhdLng7XG4gICAgY29uc3QgZHggPSB4TWF4IC0geE1pbjtcbiAgICBmb3IoaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3VudDsgKytpKXtcbiAgICAgICAgcG9pbnQgPSBkYXRhW2ldO1xuICAgICAgICB4ID0gKHBvaW50LnggLSB4TWluKSAvIGR4ICogYXZhaWxhYmxlV2lkdGg7XG4gICAgICAgIHkgPSBwb2ludC55O1xuICAgICAgICBjb25zdCB0cnVuY1ggPSB4IHwgMDtcbiAgICAgICAgaWYgKHRydW5jWCA9PT0gcHJldlgpIHtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkge1xuICAgICAgICAgICAgICAgIG1pblkgPSB5O1xuICAgICAgICAgICAgICAgIG1pbkluZGV4ID0gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeSA+IG1heFkpIHtcbiAgICAgICAgICAgICAgICBtYXhZID0geTtcbiAgICAgICAgICAgICAgICBtYXhJbmRleCA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhdmdYID0gKGNvdW50WCAqIGF2Z1ggKyBwb2ludC54KSAvICsrY291bnRYO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gaSAtIDE7XG4gICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYobWluSW5kZXgpICYmICFpc051bGxPclVuZGVmKG1heEluZGV4KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVybWVkaWF0ZUluZGV4MSA9IE1hdGgubWluKG1pbkluZGV4LCBtYXhJbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRlSW5kZXgyID0gTWF0aC5tYXgobWluSW5kZXgsIG1heEluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJtZWRpYXRlSW5kZXgxICE9PSBzdGFydEluZGV4ICYmIGludGVybWVkaWF0ZUluZGV4MSAhPT0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYXRlZC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRhdGFbaW50ZXJtZWRpYXRlSW5kZXgxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGF2Z1hcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbnRlcm1lZGlhdGVJbmRleDIgIT09IHN0YXJ0SW5kZXggJiYgaW50ZXJtZWRpYXRlSW5kZXgyICE9PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hdGVkLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZGF0YVtpbnRlcm1lZGlhdGVJbmRleDJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDogYXZnWFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaSA+IDAgJiYgbGFzdEluZGV4ICE9PSBzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgZGVjaW1hdGVkLnB1c2goZGF0YVtsYXN0SW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlY2ltYXRlZC5wdXNoKHBvaW50KTtcbiAgICAgICAgICAgIHByZXZYID0gdHJ1bmNYO1xuICAgICAgICAgICAgY291bnRYID0gMDtcbiAgICAgICAgICAgIG1pblkgPSBtYXhZID0geTtcbiAgICAgICAgICAgIG1pbkluZGV4ID0gbWF4SW5kZXggPSBzdGFydEluZGV4ID0gaTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVjaW1hdGVkO1xufVxuZnVuY3Rpb24gY2xlYW5EZWNpbWF0ZWREYXRhc2V0KGRhdGFzZXQpIHtcbiAgICBpZiAoZGF0YXNldC5fZGVjaW1hdGVkKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBkYXRhc2V0Ll9kYXRhO1xuICAgICAgICBkZWxldGUgZGF0YXNldC5fZGVjaW1hdGVkO1xuICAgICAgICBkZWxldGUgZGF0YXNldC5fZGF0YTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRhdGFzZXQsICdkYXRhJywge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IGRhdGFcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gY2xlYW5EZWNpbWF0ZWREYXRhKGNoYXJ0KSB7XG4gICAgY2hhcnQuZGF0YS5kYXRhc2V0cy5mb3JFYWNoKChkYXRhc2V0KT0+e1xuICAgICAgICBjbGVhbkRlY2ltYXRlZERhdGFzZXQoZGF0YXNldCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBnZXRTdGFydEFuZENvdW50T2ZWaXNpYmxlUG9pbnRzU2ltcGxpZmllZChtZXRhLCBwb2ludHMpIHtcbiAgICBjb25zdCBwb2ludENvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICBsZXQgc3RhcnQgPSAwO1xuICAgIGxldCBjb3VudDtcbiAgICBjb25zdCB7IGlTY2FsZSAgfSA9IG1ldGE7XG4gICAgY29uc3QgeyBtaW4gLCBtYXggLCBtaW5EZWZpbmVkICwgbWF4RGVmaW5lZCAgfSA9IGlTY2FsZS5nZXRVc2VyQm91bmRzKCk7XG4gICAgaWYgKG1pbkRlZmluZWQpIHtcbiAgICAgICAgc3RhcnQgPSBfbGltaXRWYWx1ZShfbG9va3VwQnlLZXkocG9pbnRzLCBpU2NhbGUuYXhpcywgbWluKS5sbywgMCwgcG9pbnRDb3VudCAtIDEpO1xuICAgIH1cbiAgICBpZiAobWF4RGVmaW5lZCkge1xuICAgICAgICBjb3VudCA9IF9saW1pdFZhbHVlKF9sb29rdXBCeUtleShwb2ludHMsIGlTY2FsZS5heGlzLCBtYXgpLmhpICsgMSwgc3RhcnQsIHBvaW50Q291bnQpIC0gc3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY291bnQgPSBwb2ludENvdW50IC0gc3RhcnQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBjb3VudFxuICAgIH07XG59XG52YXIgcGx1Z2luX2RlY2ltYXRpb24gPSB7XG4gICAgaWQ6ICdkZWNpbWF0aW9uJyxcbiAgICBkZWZhdWx0czoge1xuICAgICAgICBhbGdvcml0aG06ICdtaW4tbWF4JyxcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICB9LFxuICAgIGJlZm9yZUVsZW1lbnRzVXBkYXRlOiAoY2hhcnQsIGFyZ3MsIG9wdGlvbnMpPT57XG4gICAgICAgIGlmICghb3B0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICBjbGVhbkRlY2ltYXRlZERhdGEoY2hhcnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gY2hhcnQud2lkdGg7XG4gICAgICAgIGNoYXJ0LmRhdGEuZGF0YXNldHMuZm9yRWFjaCgoZGF0YXNldCwgZGF0YXNldEluZGV4KT0+e1xuICAgICAgICAgICAgY29uc3QgeyBfZGF0YSAsIGluZGV4QXhpcyAgfSA9IGRhdGFzZXQ7XG4gICAgICAgICAgICBjb25zdCBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBfZGF0YSB8fCBkYXRhc2V0LmRhdGE7XG4gICAgICAgICAgICBpZiAocmVzb2x2ZShbXG4gICAgICAgICAgICAgICAgaW5kZXhBeGlzLFxuICAgICAgICAgICAgICAgIGNoYXJ0Lm9wdGlvbnMuaW5kZXhBeGlzXG4gICAgICAgICAgICBdKSA9PT0gJ3knKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFtZXRhLmNvbnRyb2xsZXIuc3VwcG9ydHNEZWNpbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeEF4aXMgPSBjaGFydC5zY2FsZXNbbWV0YS54QXhpc0lEXTtcbiAgICAgICAgICAgIGlmICh4QXhpcy50eXBlICE9PSAnbGluZWFyJyAmJiB4QXhpcy50eXBlICE9PSAndGltZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhcnQub3B0aW9ucy5wYXJzaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHsgc3RhcnQgLCBjb3VudCAgfSA9IGdldFN0YXJ0QW5kQ291bnRPZlZpc2libGVQb2ludHNTaW1wbGlmaWVkKG1ldGEsIGRhdGEpO1xuICAgICAgICAgICAgY29uc3QgdGhyZXNob2xkID0gb3B0aW9ucy50aHJlc2hvbGQgfHwgNCAqIGF2YWlsYWJsZVdpZHRoO1xuICAgICAgICAgICAgaWYgKGNvdW50IDw9IHRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgIGNsZWFuRGVjaW1hdGVkRGF0YXNldChkYXRhc2V0KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZihfZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhc2V0Ll9kYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YXNldC5kYXRhO1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkYXRhc2V0LCAnZGF0YScsIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlY2ltYXRlZDtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhID0gZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGRlY2ltYXRlZDtcbiAgICAgICAgICAgIHN3aXRjaChvcHRpb25zLmFsZ29yaXRobSl7XG4gICAgICAgICAgICAgICAgY2FzZSAnbHR0Yic6XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYXRlZCA9IGx0dGJEZWNpbWF0aW9uKGRhdGEsIHN0YXJ0LCBjb3VudCwgYXZhaWxhYmxlV2lkdGgsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtaW4tbWF4JzpcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hdGVkID0gbWluTWF4RGVjaW1hdGlvbihkYXRhLCBzdGFydCwgY291bnQsIGF2YWlsYWJsZVdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBkZWNpbWF0aW9uIGFsZ29yaXRobSAnJHtvcHRpb25zLmFsZ29yaXRobX0nYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhc2V0Ll9kZWNpbWF0ZWQgPSBkZWNpbWF0ZWQ7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZGVzdHJveSAoY2hhcnQpIHtcbiAgICAgICAgY2xlYW5EZWNpbWF0ZWREYXRhKGNoYXJ0KTtcbiAgICB9XG59O1xuXG5mdW5jdGlvbiBfc2VnbWVudHMobGluZSwgdGFyZ2V0LCBwcm9wZXJ0eSkge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gbGluZS5zZWdtZW50cztcbiAgICBjb25zdCBwb2ludHMgPSBsaW5lLnBvaW50cztcbiAgICBjb25zdCB0cG9pbnRzID0gdGFyZ2V0LnBvaW50cztcbiAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cyl7XG4gICAgICAgIGxldCB7IHN0YXJ0ICwgZW5kICB9ID0gc2VnbWVudDtcbiAgICAgICAgZW5kID0gX2ZpbmRTZWdtZW50RW5kKHN0YXJ0LCBlbmQsIHBvaW50cyk7XG4gICAgICAgIGNvbnN0IGJvdW5kcyA9IF9nZXRCb3VuZHMocHJvcGVydHksIHBvaW50c1tzdGFydF0sIHBvaW50c1tlbmRdLCBzZWdtZW50Lmxvb3ApO1xuICAgICAgICBpZiAoIXRhcmdldC5zZWdtZW50cykge1xuICAgICAgICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgICAgICAgICAgc291cmNlOiBzZWdtZW50LFxuICAgICAgICAgICAgICAgIHRhcmdldDogYm91bmRzLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiBwb2ludHNbc3RhcnRdLFxuICAgICAgICAgICAgICAgIGVuZDogcG9pbnRzW2VuZF1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0U2VnbWVudHMgPSBfYm91bmRTZWdtZW50cyh0YXJnZXQsIGJvdW5kcyk7XG4gICAgICAgIGZvciAoY29uc3QgdGd0IG9mIHRhcmdldFNlZ21lbnRzKXtcbiAgICAgICAgICAgIGNvbnN0IHN1YkJvdW5kcyA9IF9nZXRCb3VuZHMocHJvcGVydHksIHRwb2ludHNbdGd0LnN0YXJ0XSwgdHBvaW50c1t0Z3QuZW5kXSwgdGd0Lmxvb3ApO1xuICAgICAgICAgICAgY29uc3QgZmlsbFNvdXJjZXMgPSBfYm91bmRTZWdtZW50KHNlZ21lbnQsIHBvaW50cywgc3ViQm91bmRzKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmlsbFNvdXJjZSBvZiBmaWxsU291cmNlcyl7XG4gICAgICAgICAgICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogZmlsbFNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0Z3QsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbcHJvcGVydHldOiBfZ2V0RWRnZShib3VuZHMsIHN1YkJvdW5kcywgJ3N0YXJ0JywgTWF0aC5tYXgpXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BlcnR5XTogX2dldEVkZ2UoYm91bmRzLCBzdWJCb3VuZHMsICdlbmQnLCBNYXRoLm1pbilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXJ0cztcbn1cbmZ1bmN0aW9uIF9nZXRCb3VuZHMocHJvcGVydHksIGZpcnN0LCBsYXN0LCBsb29wKSB7XG4gICAgaWYgKGxvb3ApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgc3RhcnQgPSBmaXJzdFtwcm9wZXJ0eV07XG4gICAgbGV0IGVuZCA9IGxhc3RbcHJvcGVydHldO1xuICAgIGlmIChwcm9wZXJ0eSA9PT0gJ2FuZ2xlJykge1xuICAgICAgICBzdGFydCA9IF9ub3JtYWxpemVBbmdsZShzdGFydCk7XG4gICAgICAgIGVuZCA9IF9ub3JtYWxpemVBbmdsZShlbmQpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGVuZFxuICAgIH07XG59XG5mdW5jdGlvbiBfcG9pbnRzRnJvbVNlZ21lbnRzKGJvdW5kYXJ5LCBsaW5lKSB7XG4gICAgY29uc3QgeyB4ID1udWxsICwgeSA9bnVsbCAgfSA9IGJvdW5kYXJ5IHx8IHt9O1xuICAgIGNvbnN0IGxpbmVQb2ludHMgPSBsaW5lLnBvaW50cztcbiAgICBjb25zdCBwb2ludHMgPSBbXTtcbiAgICBsaW5lLnNlZ21lbnRzLmZvckVhY2goKHsgc3RhcnQgLCBlbmQgIH0pPT57XG4gICAgICAgIGVuZCA9IF9maW5kU2VnbWVudEVuZChzdGFydCwgZW5kLCBsaW5lUG9pbnRzKTtcbiAgICAgICAgY29uc3QgZmlyc3QgPSBsaW5lUG9pbnRzW3N0YXJ0XTtcbiAgICAgICAgY29uc3QgbGFzdCA9IGxpbmVQb2ludHNbZW5kXTtcbiAgICAgICAgaWYgKHkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICB4OiBmaXJzdC54LFxuICAgICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgIHg6IGxhc3QueCxcbiAgICAgICAgICAgICAgICB5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICB5OiBmaXJzdC55XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgIHk6IGxhc3QueVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcG9pbnRzO1xufVxuZnVuY3Rpb24gX2ZpbmRTZWdtZW50RW5kKHN0YXJ0LCBlbmQsIHBvaW50cykge1xuICAgIGZvcig7IGVuZCA+IHN0YXJ0OyBlbmQtLSl7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gcG9pbnRzW2VuZF07XG4gICAgICAgIGlmICghaXNOYU4ocG9pbnQueCkgJiYgIWlzTmFOKHBvaW50LnkpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZW5kO1xufVxuZnVuY3Rpb24gX2dldEVkZ2UoYSwgYiwgcHJvcCwgZm4pIHtcbiAgICBpZiAoYSAmJiBiKSB7XG4gICAgICAgIHJldHVybiBmbihhW3Byb3BdLCBiW3Byb3BdKTtcbiAgICB9XG4gICAgcmV0dXJuIGEgPyBhW3Byb3BdIDogYiA/IGJbcHJvcF0gOiAwO1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlQm91bmRhcnlMaW5lKGJvdW5kYXJ5LCBsaW5lKSB7XG4gICAgbGV0IHBvaW50cyA9IFtdO1xuICAgIGxldCBfbG9vcCA9IGZhbHNlO1xuICAgIGlmIChpc0FycmF5KGJvdW5kYXJ5KSkge1xuICAgICAgICBfbG9vcCA9IHRydWU7XG4gICAgICAgIHBvaW50cyA9IGJvdW5kYXJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHBvaW50cyA9IF9wb2ludHNGcm9tU2VnbWVudHMoYm91bmRhcnksIGxpbmUpO1xuICAgIH1cbiAgICByZXR1cm4gcG9pbnRzLmxlbmd0aCA/IG5ldyBMaW5lRWxlbWVudCh7XG4gICAgICAgIHBvaW50cyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgdGVuc2lvbjogMFxuICAgICAgICB9LFxuICAgICAgICBfbG9vcCxcbiAgICAgICAgX2Z1bGxMb29wOiBfbG9vcFxuICAgIH0pIDogbnVsbDtcbn1cbmZ1bmN0aW9uIF9zaG91bGRBcHBseUZpbGwoc291cmNlKSB7XG4gICAgcmV0dXJuIHNvdXJjZSAmJiBzb3VyY2UuZmlsbCAhPT0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIF9yZXNvbHZlVGFyZ2V0KHNvdXJjZXMsIGluZGV4LCBwcm9wYWdhdGUpIHtcbiAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICBsZXQgZmlsbCA9IHNvdXJjZS5maWxsO1xuICAgIGNvbnN0IHZpc2l0ZWQgPSBbXG4gICAgICAgIGluZGV4XG4gICAgXTtcbiAgICBsZXQgdGFyZ2V0O1xuICAgIGlmICghcHJvcGFnYXRlKSB7XG4gICAgICAgIHJldHVybiBmaWxsO1xuICAgIH1cbiAgICB3aGlsZShmaWxsICE9PSBmYWxzZSAmJiB2aXNpdGVkLmluZGV4T2YoZmlsbCkgPT09IC0xKXtcbiAgICAgICAgaWYgKCFpc051bWJlckZpbml0ZShmaWxsKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbGw7XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0ID0gc291cmNlc1tmaWxsXTtcbiAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0LnZpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWxsO1xuICAgICAgICB9XG4gICAgICAgIHZpc2l0ZWQucHVzaChmaWxsKTtcbiAgICAgICAgZmlsbCA9IHRhcmdldC5maWxsO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG4gZnVuY3Rpb24gX2RlY29kZUZpbGwobGluZSwgaW5kZXgsIGNvdW50KSB7XG4gICAgIGNvbnN0IGZpbGwgPSBwYXJzZUZpbGxPcHRpb24obGluZSk7XG4gICAgaWYgKGlzT2JqZWN0KGZpbGwpKSB7XG4gICAgICAgIHJldHVybiBpc05hTihmaWxsLnZhbHVlKSA/IGZhbHNlIDogZmlsbDtcbiAgICB9XG4gICAgbGV0IHRhcmdldCA9IHBhcnNlRmxvYXQoZmlsbCk7XG4gICAgaWYgKGlzTnVtYmVyRmluaXRlKHRhcmdldCkgJiYgTWF0aC5mbG9vcih0YXJnZXQpID09PSB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZVRhcmdldEluZGV4KGZpbGxbMF0sIGluZGV4LCB0YXJnZXQsIGNvdW50KTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgICAgJ29yaWdpbicsXG4gICAgICAgICdzdGFydCcsXG4gICAgICAgICdlbmQnLFxuICAgICAgICAnc3RhY2snLFxuICAgICAgICAnc2hhcGUnXG4gICAgXS5pbmRleE9mKGZpbGwpID49IDAgJiYgZmlsbDtcbn1cbmZ1bmN0aW9uIGRlY29kZVRhcmdldEluZGV4KGZpcnN0Q2gsIGluZGV4LCB0YXJnZXQsIGNvdW50KSB7XG4gICAgaWYgKGZpcnN0Q2ggPT09ICctJyB8fCBmaXJzdENoID09PSAnKycpIHtcbiAgICAgICAgdGFyZ2V0ID0gaW5kZXggKyB0YXJnZXQ7XG4gICAgfVxuICAgIGlmICh0YXJnZXQgPT09IGluZGV4IHx8IHRhcmdldCA8IDAgfHwgdGFyZ2V0ID49IGNvdW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbiBmdW5jdGlvbiBfZ2V0VGFyZ2V0UGl4ZWwoZmlsbCwgc2NhbGUpIHtcbiAgICBsZXQgcGl4ZWwgPSBudWxsO1xuICAgIGlmIChmaWxsID09PSAnc3RhcnQnKSB7XG4gICAgICAgIHBpeGVsID0gc2NhbGUuYm90dG9tO1xuICAgIH0gZWxzZSBpZiAoZmlsbCA9PT0gJ2VuZCcpIHtcbiAgICAgICAgcGl4ZWwgPSBzY2FsZS50b3A7XG4gICAgfSBlbHNlIGlmIChpc09iamVjdChmaWxsKSkge1xuICAgICAgICBwaXhlbCA9IHNjYWxlLmdldFBpeGVsRm9yVmFsdWUoZmlsbC52YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChzY2FsZS5nZXRCYXNlUGl4ZWwpIHtcbiAgICAgICAgcGl4ZWwgPSBzY2FsZS5nZXRCYXNlUGl4ZWwoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBpeGVsO1xufVxuIGZ1bmN0aW9uIF9nZXRUYXJnZXRWYWx1ZShmaWxsLCBzY2FsZSwgc3RhcnRWYWx1ZSkge1xuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAoZmlsbCA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICB2YWx1ZSA9IHN0YXJ0VmFsdWU7XG4gICAgfSBlbHNlIGlmIChmaWxsID09PSAnZW5kJykge1xuICAgICAgICB2YWx1ZSA9IHNjYWxlLm9wdGlvbnMucmV2ZXJzZSA/IHNjYWxlLm1pbiA6IHNjYWxlLm1heDtcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGZpbGwpKSB7XG4gICAgICAgIHZhbHVlID0gZmlsbC52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IHNjYWxlLmdldEJhc2VWYWx1ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG4gZnVuY3Rpb24gcGFyc2VGaWxsT3B0aW9uKGxpbmUpIHtcbiAgICBjb25zdCBvcHRpb25zID0gbGluZS5vcHRpb25zO1xuICAgIGNvbnN0IGZpbGxPcHRpb24gPSBvcHRpb25zLmZpbGw7XG4gICAgbGV0IGZpbGwgPSB2YWx1ZU9yRGVmYXVsdChmaWxsT3B0aW9uICYmIGZpbGxPcHRpb24udGFyZ2V0LCBmaWxsT3B0aW9uKTtcbiAgICBpZiAoZmlsbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZpbGwgPSAhIW9wdGlvbnMuYmFja2dyb3VuZENvbG9yO1xuICAgIH1cbiAgICBpZiAoZmlsbCA9PT0gZmFsc2UgfHwgZmlsbCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChmaWxsID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiAnb3JpZ2luJztcbiAgICB9XG4gICAgcmV0dXJuIGZpbGw7XG59XG5cbmZ1bmN0aW9uIF9idWlsZFN0YWNrTGluZShzb3VyY2UpIHtcbiAgICBjb25zdCB7IHNjYWxlICwgaW5kZXggLCBsaW5lICB9ID0gc291cmNlO1xuICAgIGNvbnN0IHBvaW50cyA9IFtdO1xuICAgIGNvbnN0IHNlZ21lbnRzID0gbGluZS5zZWdtZW50cztcbiAgICBjb25zdCBzb3VyY2VQb2ludHMgPSBsaW5lLnBvaW50cztcbiAgICBjb25zdCBsaW5lc0JlbG93ID0gZ2V0TGluZXNCZWxvdyhzY2FsZSwgaW5kZXgpO1xuICAgIGxpbmVzQmVsb3cucHVzaChfY3JlYXRlQm91bmRhcnlMaW5lKHtcbiAgICAgICAgeDogbnVsbCxcbiAgICAgICAgeTogc2NhbGUuYm90dG9tXG4gICAgfSwgbGluZSkpO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50c1tpXTtcbiAgICAgICAgZm9yKGxldCBqID0gc2VnbWVudC5zdGFydDsgaiA8PSBzZWdtZW50LmVuZDsgaisrKXtcbiAgICAgICAgICAgIGFkZFBvaW50c0JlbG93KHBvaW50cywgc291cmNlUG9pbnRzW2pdLCBsaW5lc0JlbG93KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IExpbmVFbGVtZW50KHtcbiAgICAgICAgcG9pbnRzLFxuICAgICAgICBvcHRpb25zOiB7fVxuICAgIH0pO1xufVxuIGZ1bmN0aW9uIGdldExpbmVzQmVsb3coc2NhbGUsIGluZGV4KSB7XG4gICAgY29uc3QgYmVsb3cgPSBbXTtcbiAgICBjb25zdCBtZXRhcyA9IHNjYWxlLmdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKCdsaW5lJyk7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IG1ldGFzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgY29uc3QgbWV0YSA9IG1ldGFzW2ldO1xuICAgICAgICBpZiAobWV0YS5pbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWV0YS5oaWRkZW4pIHtcbiAgICAgICAgICAgIGJlbG93LnVuc2hpZnQobWV0YS5kYXRhc2V0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmVsb3c7XG59XG4gZnVuY3Rpb24gYWRkUG9pbnRzQmVsb3cocG9pbnRzLCBzb3VyY2VQb2ludCwgbGluZXNCZWxvdykge1xuICAgIGNvbnN0IHBvc3Rwb25lZCA9IFtdO1xuICAgIGZvcihsZXQgaiA9IDA7IGogPCBsaW5lc0JlbG93Lmxlbmd0aDsgaisrKXtcbiAgICAgICAgY29uc3QgbGluZSA9IGxpbmVzQmVsb3dbal07XG4gICAgICAgIGNvbnN0IHsgZmlyc3QgLCBsYXN0ICwgcG9pbnQgIH0gPSBmaW5kUG9pbnQobGluZSwgc291cmNlUG9pbnQsICd4Jyk7XG4gICAgICAgIGlmICghcG9pbnQgfHwgZmlyc3QgJiYgbGFzdCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgICBwb3N0cG9uZWQudW5zaGlmdChwb2ludCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb2ludHMucHVzaChwb2ludCk7XG4gICAgICAgICAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBwb2ludHMucHVzaCguLi5wb3N0cG9uZWQpO1xufVxuIGZ1bmN0aW9uIGZpbmRQb2ludChsaW5lLCBzb3VyY2VQb2ludCwgcHJvcGVydHkpIHtcbiAgICBjb25zdCBwb2ludCA9IGxpbmUuaW50ZXJwb2xhdGUoc291cmNlUG9pbnQsIHByb3BlcnR5KTtcbiAgICBpZiAoIXBvaW50KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcG9pbnRWYWx1ZSA9IHBvaW50W3Byb3BlcnR5XTtcbiAgICBjb25zdCBzZWdtZW50cyA9IGxpbmUuc2VnbWVudHM7XG4gICAgY29uc3QgbGluZVBvaW50cyA9IGxpbmUucG9pbnRzO1xuICAgIGxldCBmaXJzdCA9IGZhbHNlO1xuICAgIGxldCBsYXN0ID0gZmFsc2U7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IHNlZ21lbnRzW2ldO1xuICAgICAgICBjb25zdCBmaXJzdFZhbHVlID0gbGluZVBvaW50c1tzZWdtZW50LnN0YXJ0XVtwcm9wZXJ0eV07XG4gICAgICAgIGNvbnN0IGxhc3RWYWx1ZSA9IGxpbmVQb2ludHNbc2VnbWVudC5lbmRdW3Byb3BlcnR5XTtcbiAgICAgICAgaWYgKF9pc0JldHdlZW4ocG9pbnRWYWx1ZSwgZmlyc3RWYWx1ZSwgbGFzdFZhbHVlKSkge1xuICAgICAgICAgICAgZmlyc3QgPSBwb2ludFZhbHVlID09PSBmaXJzdFZhbHVlO1xuICAgICAgICAgICAgbGFzdCA9IHBvaW50VmFsdWUgPT09IGxhc3RWYWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGZpcnN0LFxuICAgICAgICBsYXN0LFxuICAgICAgICBwb2ludFxuICAgIH07XG59XG5cbmNsYXNzIHNpbXBsZUFyYyB7XG4gICAgY29uc3RydWN0b3Iob3B0cyl7XG4gICAgICAgIHRoaXMueCA9IG9wdHMueDtcbiAgICAgICAgdGhpcy55ID0gb3B0cy55O1xuICAgICAgICB0aGlzLnJhZGl1cyA9IG9wdHMucmFkaXVzO1xuICAgIH1cbiAgICBwYXRoU2VnbWVudChjdHgsIGJvdW5kcywgb3B0cykge1xuICAgICAgICBjb25zdCB7IHggLCB5ICwgcmFkaXVzICB9ID0gdGhpcztcbiAgICAgICAgYm91bmRzID0gYm91bmRzIHx8IHtcbiAgICAgICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICAgICAgZW5kOiBUQVVcbiAgICAgICAgfTtcbiAgICAgICAgY3R4LmFyYyh4LCB5LCByYWRpdXMsIGJvdW5kcy5lbmQsIGJvdW5kcy5zdGFydCwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiAhb3B0cy5ib3VuZHM7XG4gICAgfVxuICAgIGludGVycG9sYXRlKHBvaW50KSB7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgLCByYWRpdXMgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBhbmdsZSA9IHBvaW50LmFuZ2xlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogeCArIE1hdGguY29zKGFuZ2xlKSAqIHJhZGl1cyxcbiAgICAgICAgICAgIHk6IHkgKyBNYXRoLnNpbihhbmdsZSkgKiByYWRpdXMsXG4gICAgICAgICAgICBhbmdsZVxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gX2dldFRhcmdldChzb3VyY2UpIHtcbiAgICBjb25zdCB7IGNoYXJ0ICwgZmlsbCAsIGxpbmUgIH0gPSBzb3VyY2U7XG4gICAgaWYgKGlzTnVtYmVyRmluaXRlKGZpbGwpKSB7XG4gICAgICAgIHJldHVybiBnZXRMaW5lQnlJbmRleChjaGFydCwgZmlsbCk7XG4gICAgfVxuICAgIGlmIChmaWxsID09PSAnc3RhY2snKSB7XG4gICAgICAgIHJldHVybiBfYnVpbGRTdGFja0xpbmUoc291cmNlKTtcbiAgICB9XG4gICAgaWYgKGZpbGwgPT09ICdzaGFwZScpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGJvdW5kYXJ5ID0gY29tcHV0ZUJvdW5kYXJ5KHNvdXJjZSk7XG4gICAgaWYgKGJvdW5kYXJ5IGluc3RhbmNlb2Ygc2ltcGxlQXJjKSB7XG4gICAgICAgIHJldHVybiBib3VuZGFyeTtcbiAgICB9XG4gICAgcmV0dXJuIF9jcmVhdGVCb3VuZGFyeUxpbmUoYm91bmRhcnksIGxpbmUpO1xufVxuIGZ1bmN0aW9uIGdldExpbmVCeUluZGV4KGNoYXJ0LCBpbmRleCkge1xuICAgIGNvbnN0IG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpbmRleCk7XG4gICAgY29uc3QgdmlzaWJsZSA9IG1ldGEgJiYgY2hhcnQuaXNEYXRhc2V0VmlzaWJsZShpbmRleCk7XG4gICAgcmV0dXJuIHZpc2libGUgPyBtZXRhLmRhdGFzZXQgOiBudWxsO1xufVxuZnVuY3Rpb24gY29tcHV0ZUJvdW5kYXJ5KHNvdXJjZSkge1xuICAgIGNvbnN0IHNjYWxlID0gc291cmNlLnNjYWxlIHx8IHt9O1xuICAgIGlmIChzY2FsZS5nZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbXB1dGVDaXJjdWxhckJvdW5kYXJ5KHNvdXJjZSk7XG4gICAgfVxuICAgIHJldHVybiBjb21wdXRlTGluZWFyQm91bmRhcnkoc291cmNlKTtcbn1cbmZ1bmN0aW9uIGNvbXB1dGVMaW5lYXJCb3VuZGFyeShzb3VyY2UpIHtcbiAgICBjb25zdCB7IHNjYWxlID17fSAsIGZpbGwgIH0gPSBzb3VyY2U7XG4gICAgY29uc3QgcGl4ZWwgPSBfZ2V0VGFyZ2V0UGl4ZWwoZmlsbCwgc2NhbGUpO1xuICAgIGlmIChpc051bWJlckZpbml0ZShwaXhlbCkpIHtcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbCA9IHNjYWxlLmlzSG9yaXpvbnRhbCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogaG9yaXpvbnRhbCA/IHBpeGVsIDogbnVsbCxcbiAgICAgICAgICAgIHk6IGhvcml6b250YWwgPyBudWxsIDogcGl4ZWxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBjb21wdXRlQ2lyY3VsYXJCb3VuZGFyeShzb3VyY2UpIHtcbiAgICBjb25zdCB7IHNjYWxlICwgZmlsbCAgfSA9IHNvdXJjZTtcbiAgICBjb25zdCBvcHRpb25zID0gc2NhbGUub3B0aW9ucztcbiAgICBjb25zdCBsZW5ndGggPSBzY2FsZS5nZXRMYWJlbHMoKS5sZW5ndGg7XG4gICAgY29uc3Qgc3RhcnQgPSBvcHRpb25zLnJldmVyc2UgPyBzY2FsZS5tYXggOiBzY2FsZS5taW47XG4gICAgY29uc3QgdmFsdWUgPSBfZ2V0VGFyZ2V0VmFsdWUoZmlsbCwgc2NhbGUsIHN0YXJ0KTtcbiAgICBjb25zdCB0YXJnZXQgPSBbXTtcbiAgICBpZiAob3B0aW9ucy5ncmlkLmNpcmN1bGFyKSB7XG4gICAgICAgIGNvbnN0IGNlbnRlciA9IHNjYWxlLmdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZSgwLCBzdGFydCk7XG4gICAgICAgIHJldHVybiBuZXcgc2ltcGxlQXJjKHtcbiAgICAgICAgICAgIHg6IGNlbnRlci54LFxuICAgICAgICAgICAgeTogY2VudGVyLnksXG4gICAgICAgICAgICByYWRpdXM6IHNjYWxlLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHZhbHVlKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKXtcbiAgICAgICAgdGFyZ2V0LnB1c2goc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKGksIHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9kcmF3ZmlsbChjdHgsIHNvdXJjZSwgYXJlYSkge1xuICAgIGNvbnN0IHRhcmdldCA9IF9nZXRUYXJnZXQoc291cmNlKTtcbiAgICBjb25zdCB7IGxpbmUgLCBzY2FsZSAsIGF4aXMgIH0gPSBzb3VyY2U7XG4gICAgY29uc3QgbGluZU9wdHMgPSBsaW5lLm9wdGlvbnM7XG4gICAgY29uc3QgZmlsbE9wdGlvbiA9IGxpbmVPcHRzLmZpbGw7XG4gICAgY29uc3QgY29sb3IgPSBsaW5lT3B0cy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgY29uc3QgeyBhYm92ZSA9Y29sb3IgLCBiZWxvdyA9Y29sb3IgIH0gPSBmaWxsT3B0aW9uIHx8IHt9O1xuICAgIGlmICh0YXJnZXQgJiYgbGluZS5wb2ludHMubGVuZ3RoKSB7XG4gICAgICAgIGNsaXBBcmVhKGN0eCwgYXJlYSk7XG4gICAgICAgIGRvRmlsbChjdHgsIHtcbiAgICAgICAgICAgIGxpbmUsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBhYm92ZSxcbiAgICAgICAgICAgIGJlbG93LFxuICAgICAgICAgICAgYXJlYSxcbiAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgYXhpc1xuICAgICAgICB9KTtcbiAgICAgICAgdW5jbGlwQXJlYShjdHgpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRvRmlsbChjdHgsIGNmZykge1xuICAgIGNvbnN0IHsgbGluZSAsIHRhcmdldCAsIGFib3ZlICwgYmVsb3cgLCBhcmVhICwgc2NhbGUgIH0gPSBjZmc7XG4gICAgY29uc3QgcHJvcGVydHkgPSBsaW5lLl9sb29wID8gJ2FuZ2xlJyA6IGNmZy5heGlzO1xuICAgIGN0eC5zYXZlKCk7XG4gICAgaWYgKHByb3BlcnR5ID09PSAneCcgJiYgYmVsb3cgIT09IGFib3ZlKSB7XG4gICAgICAgIGNsaXBWZXJ0aWNhbChjdHgsIHRhcmdldCwgYXJlYS50b3ApO1xuICAgICAgICBmaWxsKGN0eCwge1xuICAgICAgICAgICAgbGluZSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIGNvbG9yOiBhYm92ZSxcbiAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgcHJvcGVydHlcbiAgICAgICAgfSk7XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgIGNsaXBWZXJ0aWNhbChjdHgsIHRhcmdldCwgYXJlYS5ib3R0b20pO1xuICAgIH1cbiAgICBmaWxsKGN0eCwge1xuICAgICAgICBsaW5lLFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIGNvbG9yOiBiZWxvdyxcbiAgICAgICAgc2NhbGUsXG4gICAgICAgIHByb3BlcnR5XG4gICAgfSk7XG4gICAgY3R4LnJlc3RvcmUoKTtcbn1cbmZ1bmN0aW9uIGNsaXBWZXJ0aWNhbChjdHgsIHRhcmdldCwgY2xpcFkpIHtcbiAgICBjb25zdCB7IHNlZ21lbnRzICwgcG9pbnRzICB9ID0gdGFyZ2V0O1xuICAgIGxldCBmaXJzdCA9IHRydWU7XG4gICAgbGV0IGxpbmVMb29wID0gZmFsc2U7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cyl7XG4gICAgICAgIGNvbnN0IHsgc3RhcnQgLCBlbmQgIH0gPSBzZWdtZW50O1xuICAgICAgICBjb25zdCBmaXJzdFBvaW50ID0gcG9pbnRzW3N0YXJ0XTtcbiAgICAgICAgY29uc3QgbGFzdFBvaW50ID0gcG9pbnRzW19maW5kU2VnbWVudEVuZChzdGFydCwgZW5kLCBwb2ludHMpXTtcbiAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgICBjdHgubW92ZVRvKGZpcnN0UG9pbnQueCwgZmlyc3RQb2ludC55KTtcbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdHgubGluZVRvKGZpcnN0UG9pbnQueCwgY2xpcFkpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyhmaXJzdFBvaW50LngsIGZpcnN0UG9pbnQueSk7XG4gICAgICAgIH1cbiAgICAgICAgbGluZUxvb3AgPSAhIXRhcmdldC5wYXRoU2VnbWVudChjdHgsIHNlZ21lbnQsIHtcbiAgICAgICAgICAgIG1vdmU6IGxpbmVMb29wXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobGluZUxvb3ApIHtcbiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN0eC5saW5lVG8obGFzdFBvaW50LngsIGNsaXBZKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjdHgubGluZVRvKHRhcmdldC5maXJzdCgpLngsIGNsaXBZKTtcbiAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgY3R4LmNsaXAoKTtcbn1cbmZ1bmN0aW9uIGZpbGwoY3R4LCBjZmcpIHtcbiAgICBjb25zdCB7IGxpbmUgLCB0YXJnZXQgLCBwcm9wZXJ0eSAsIGNvbG9yICwgc2NhbGUgIH0gPSBjZmc7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBfc2VnbWVudHMobGluZSwgdGFyZ2V0LCBwcm9wZXJ0eSk7XG4gICAgZm9yIChjb25zdCB7IHNvdXJjZTogc3JjICwgdGFyZ2V0OiB0Z3QgLCBzdGFydCAsIGVuZCAgfSBvZiBzZWdtZW50cyl7XG4gICAgICAgIGNvbnN0IHsgc3R5bGU6IHsgYmFja2dyb3VuZENvbG9yID1jb2xvciAgfSA9IHt9ICB9ID0gc3JjO1xuICAgICAgICBjb25zdCBub3RTaGFwZSA9IHRhcmdldCAhPT0gdHJ1ZTtcbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgY2xpcEJvdW5kcyhjdHgsIHNjYWxlLCBub3RTaGFwZSAmJiBfZ2V0Qm91bmRzKHByb3BlcnR5LCBzdGFydCwgZW5kKSk7XG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgY29uc3QgbGluZUxvb3AgPSAhIWxpbmUucGF0aFNlZ21lbnQoY3R4LCBzcmMpO1xuICAgICAgICBsZXQgbG9vcDtcbiAgICAgICAgaWYgKG5vdFNoYXBlKSB7XG4gICAgICAgICAgICBpZiAobGluZUxvb3ApIHtcbiAgICAgICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGludGVycG9sYXRlZExpbmVUbyhjdHgsIHRhcmdldCwgZW5kLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRMb29wID0gISF0YXJnZXQucGF0aFNlZ21lbnQoY3R4LCB0Z3QsIHtcbiAgICAgICAgICAgICAgICBtb3ZlOiBsaW5lTG9vcCxcbiAgICAgICAgICAgICAgICByZXZlcnNlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvb3AgPSBsaW5lTG9vcCAmJiB0YXJnZXRMb29wO1xuICAgICAgICAgICAgaWYgKCFsb29wKSB7XG4gICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVkTGluZVRvKGN0eCwgdGFyZ2V0LCBzdGFydCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgY3R4LmZpbGwobG9vcCA/ICdldmVub2RkJyA6ICdub256ZXJvJyk7XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gY2xpcEJvdW5kcyhjdHgsIHNjYWxlLCBib3VuZHMpIHtcbiAgICBjb25zdCB7IHRvcCAsIGJvdHRvbSAgfSA9IHNjYWxlLmNoYXJ0LmNoYXJ0QXJlYTtcbiAgICBjb25zdCB7IHByb3BlcnR5ICwgc3RhcnQgLCBlbmQgIH0gPSBib3VuZHMgfHwge307XG4gICAgaWYgKHByb3BlcnR5ID09PSAneCcpIHtcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBjdHgucmVjdChzdGFydCwgdG9wLCBlbmQgLSBzdGFydCwgYm90dG9tIC0gdG9wKTtcbiAgICAgICAgY3R4LmNsaXAoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbnRlcnBvbGF0ZWRMaW5lVG8oY3R4LCB0YXJnZXQsIHBvaW50LCBwcm9wZXJ0eSkge1xuICAgIGNvbnN0IGludGVycG9sYXRlZFBvaW50ID0gdGFyZ2V0LmludGVycG9sYXRlKHBvaW50LCBwcm9wZXJ0eSk7XG4gICAgaWYgKGludGVycG9sYXRlZFBvaW50KSB7XG4gICAgICAgIGN0eC5saW5lVG8oaW50ZXJwb2xhdGVkUG9pbnQueCwgaW50ZXJwb2xhdGVkUG9pbnQueSk7XG4gICAgfVxufVxuXG52YXIgaW5kZXggPSB7XG4gICAgaWQ6ICdmaWxsZXInLFxuICAgIGFmdGVyRGF0YXNldHNVcGRhdGUgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBjb3VudCA9IChjaGFydC5kYXRhLmRhdGFzZXRzIHx8IFtdKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHNvdXJjZXMgPSBbXTtcbiAgICAgICAgbGV0IG1ldGEsIGksIGxpbmUsIHNvdXJjZTtcbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgY291bnQ7ICsraSl7XG4gICAgICAgICAgICBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoaSk7XG4gICAgICAgICAgICBsaW5lID0gbWV0YS5kYXRhc2V0O1xuICAgICAgICAgICAgc291cmNlID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChsaW5lICYmIGxpbmUub3B0aW9ucyAmJiBsaW5lIGluc3RhbmNlb2YgTGluZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBzb3VyY2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGNoYXJ0LmlzRGF0YXNldFZpc2libGUoaSksXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBfZGVjb2RlRmlsbChsaW5lLCBpLCBjb3VudCksXG4gICAgICAgICAgICAgICAgICAgIGNoYXJ0LFxuICAgICAgICAgICAgICAgICAgICBheGlzOiBtZXRhLmNvbnRyb2xsZXIub3B0aW9ucy5pbmRleEF4aXMsXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlOiBtZXRhLnZTY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgbGluZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtZXRhLiRmaWxsZXIgPSBzb3VyY2U7XG4gICAgICAgICAgICBzb3VyY2VzLnB1c2goc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IoaSA9IDA7IGkgPCBjb3VudDsgKytpKXtcbiAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZXNbaV07XG4gICAgICAgICAgICBpZiAoIXNvdXJjZSB8fCBzb3VyY2UuZmlsbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNvdXJjZS5maWxsID0gX3Jlc29sdmVUYXJnZXQoc291cmNlcywgaSwgb3B0aW9ucy5wcm9wYWdhdGUpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBiZWZvcmVEcmF3IChjaGFydCwgX2FyZ3MsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZHJhdyA9IG9wdGlvbnMuZHJhd1RpbWUgPT09ICdiZWZvcmVEcmF3JztcbiAgICAgICAgY29uc3QgbWV0YXNldHMgPSBjaGFydC5nZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzKCk7XG4gICAgICAgIGNvbnN0IGFyZWEgPSBjaGFydC5jaGFydEFyZWE7XG4gICAgICAgIGZvcihsZXQgaSA9IG1ldGFzZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKXtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IG1ldGFzZXRzW2ldLiRmaWxsZXI7XG4gICAgICAgICAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc291cmNlLmxpbmUudXBkYXRlQ29udHJvbFBvaW50cyhhcmVhLCBzb3VyY2UuYXhpcyk7XG4gICAgICAgICAgICBpZiAoZHJhdyAmJiBzb3VyY2UuZmlsbCkge1xuICAgICAgICAgICAgICAgIF9kcmF3ZmlsbChjaGFydC5jdHgsIHNvdXJjZSwgYXJlYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGJlZm9yZURhdGFzZXRzRHJhdyAoY2hhcnQsIF9hcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmRyYXdUaW1lICE9PSAnYmVmb3JlRGF0YXNldHNEcmF3Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldGFzZXRzID0gY2hhcnQuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpO1xuICAgICAgICBmb3IobGV0IGkgPSBtZXRhc2V0cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSl7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBtZXRhc2V0c1tpXS4kZmlsbGVyO1xuICAgICAgICAgICAgaWYgKF9zaG91bGRBcHBseUZpbGwoc291cmNlKSkge1xuICAgICAgICAgICAgICAgIF9kcmF3ZmlsbChjaGFydC5jdHgsIHNvdXJjZSwgY2hhcnQuY2hhcnRBcmVhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgYmVmb3JlRGF0YXNldERyYXcgKGNoYXJ0LCBhcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGFyZ3MubWV0YS4kZmlsbGVyO1xuICAgICAgICBpZiAoIV9zaG91bGRBcHBseUZpbGwoc291cmNlKSB8fCBvcHRpb25zLmRyYXdUaW1lICE9PSAnYmVmb3JlRGF0YXNldERyYXcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgX2RyYXdmaWxsKGNoYXJ0LmN0eCwgc291cmNlLCBjaGFydC5jaGFydEFyZWEpO1xuICAgIH0sXG4gICAgZGVmYXVsdHM6IHtcbiAgICAgICAgcHJvcGFnYXRlOiB0cnVlLFxuICAgICAgICBkcmF3VGltZTogJ2JlZm9yZURhdGFzZXREcmF3J1xuICAgIH1cbn07XG5cbmNvbnN0IGdldEJveFNpemUgPSAobGFiZWxPcHRzLCBmb250U2l6ZSk9PntcbiAgICBsZXQgeyBib3hIZWlnaHQgPWZvbnRTaXplICwgYm94V2lkdGggPWZvbnRTaXplICB9ID0gbGFiZWxPcHRzO1xuICAgIGlmIChsYWJlbE9wdHMudXNlUG9pbnRTdHlsZSkge1xuICAgICAgICBib3hIZWlnaHQgPSBNYXRoLm1pbihib3hIZWlnaHQsIGZvbnRTaXplKTtcbiAgICAgICAgYm94V2lkdGggPSBsYWJlbE9wdHMucG9pbnRTdHlsZVdpZHRoIHx8IE1hdGgubWluKGJveFdpZHRoLCBmb250U2l6ZSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGJveFdpZHRoLFxuICAgICAgICBib3hIZWlnaHQsXG4gICAgICAgIGl0ZW1IZWlnaHQ6IE1hdGgubWF4KGZvbnRTaXplLCBib3hIZWlnaHQpXG4gICAgfTtcbn07XG5jb25zdCBpdGVtc0VxdWFsID0gKGEsIGIpPT5hICE9PSBudWxsICYmIGIgIT09IG51bGwgJiYgYS5kYXRhc2V0SW5kZXggPT09IGIuZGF0YXNldEluZGV4ICYmIGEuaW5kZXggPT09IGIuaW5kZXg7XG5jbGFzcyBMZWdlbmQgZXh0ZW5kcyBFbGVtZW50IHtcbiBjb25zdHJ1Y3Rvcihjb25maWcpe1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9hZGRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxlZ2VuZEhpdEJveGVzID0gW107XG4gdGhpcy5faG92ZXJlZEl0ZW0gPSBudWxsO1xuICAgICAgICB0aGlzLmRvdWdobnV0TW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNoYXJ0ID0gY29uZmlnLmNoYXJ0O1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBjb25maWcub3B0aW9ucztcbiAgICAgICAgdGhpcy5jdHggPSBjb25maWcuY3R4O1xuICAgICAgICB0aGlzLmxlZ2VuZEl0ZW1zID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmNvbHVtblNpemVzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmxpbmVXaWR0aHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm1heFdpZHRoID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnRvcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5ib3R0b20gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubGVmdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5yaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMud2lkdGggPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX21hcmdpbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucG9zaXRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMud2VpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmZ1bGxTaXplID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB1cGRhdGUobWF4V2lkdGgsIG1heEhlaWdodCwgbWFyZ2lucykge1xuICAgICAgICB0aGlzLm1heFdpZHRoID0gbWF4V2lkdGg7XG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gbWF4SGVpZ2h0O1xuICAgICAgICB0aGlzLl9tYXJnaW5zID0gbWFyZ2lucztcbiAgICAgICAgdGhpcy5zZXREaW1lbnNpb25zKCk7XG4gICAgICAgIHRoaXMuYnVpbGRMYWJlbHMoKTtcbiAgICAgICAgdGhpcy5maXQoKTtcbiAgICB9XG4gICAgc2V0RGltZW5zaW9ucygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLm1heFdpZHRoO1xuICAgICAgICAgICAgdGhpcy5sZWZ0ID0gdGhpcy5fbWFyZ2lucy5sZWZ0O1xuICAgICAgICAgICAgdGhpcy5yaWdodCA9IHRoaXMud2lkdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy50b3AgPSB0aGlzLl9tYXJnaW5zLnRvcDtcbiAgICAgICAgICAgIHRoaXMuYm90dG9tID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYnVpbGRMYWJlbHMoKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsT3B0cyA9IHRoaXMub3B0aW9ucy5sYWJlbHMgfHwge307XG4gICAgICAgIGxldCBsZWdlbmRJdGVtcyA9IGNhbGxiYWNrKGxhYmVsT3B0cy5nZW5lcmF0ZUxhYmVscywgW1xuICAgICAgICAgICAgdGhpcy5jaGFydFxuICAgICAgICBdLCB0aGlzKSB8fCBbXTtcbiAgICAgICAgaWYgKGxhYmVsT3B0cy5maWx0ZXIpIHtcbiAgICAgICAgICAgIGxlZ2VuZEl0ZW1zID0gbGVnZW5kSXRlbXMuZmlsdGVyKChpdGVtKT0+bGFiZWxPcHRzLmZpbHRlcihpdGVtLCB0aGlzLmNoYXJ0LmRhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGFiZWxPcHRzLnNvcnQpIHtcbiAgICAgICAgICAgIGxlZ2VuZEl0ZW1zID0gbGVnZW5kSXRlbXMuc29ydCgoYSwgYik9PmxhYmVsT3B0cy5zb3J0KGEsIGIsIHRoaXMuY2hhcnQuZGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmV2ZXJzZSkge1xuICAgICAgICAgICAgbGVnZW5kSXRlbXMucmV2ZXJzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGVnZW5kSXRlbXMgPSBsZWdlbmRJdGVtcztcbiAgICB9XG4gICAgZml0KCkge1xuICAgICAgICBjb25zdCB7IG9wdGlvbnMgLCBjdHggIH0gPSB0aGlzO1xuICAgICAgICBpZiAoIW9wdGlvbnMuZGlzcGxheSkge1xuICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuaGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYWJlbE9wdHMgPSBvcHRpb25zLmxhYmVscztcbiAgICAgICAgY29uc3QgbGFiZWxGb250ID0gdG9Gb250KGxhYmVsT3B0cy5mb250KTtcbiAgICAgICAgY29uc3QgZm9udFNpemUgPSBsYWJlbEZvbnQuc2l6ZTtcbiAgICAgICAgY29uc3QgdGl0bGVIZWlnaHQgPSB0aGlzLl9jb21wdXRlVGl0bGVIZWlnaHQoKTtcbiAgICAgICAgY29uc3QgeyBib3hXaWR0aCAsIGl0ZW1IZWlnaHQgIH0gPSBnZXRCb3hTaXplKGxhYmVsT3B0cywgZm9udFNpemUpO1xuICAgICAgICBsZXQgd2lkdGgsIGhlaWdodDtcbiAgICAgICAgY3R4LmZvbnQgPSBsYWJlbEZvbnQuc3RyaW5nO1xuICAgICAgICBpZiAodGhpcy5pc0hvcml6b250YWwoKSkge1xuICAgICAgICAgICAgd2lkdGggPSB0aGlzLm1heFdpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5fZml0Um93cyh0aXRsZUhlaWdodCwgZm9udFNpemUsIGJveFdpZHRoLCBpdGVtSGVpZ2h0KSArIDEwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQ7XG4gICAgICAgICAgICB3aWR0aCA9IHRoaXMuX2ZpdENvbHModGl0bGVIZWlnaHQsIGxhYmVsRm9udCwgYm94V2lkdGgsIGl0ZW1IZWlnaHQpICsgMTA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aWR0aCA9IE1hdGgubWluKHdpZHRoLCBvcHRpb25zLm1heFdpZHRoIHx8IHRoaXMubWF4V2lkdGgpO1xuICAgICAgICB0aGlzLmhlaWdodCA9IE1hdGgubWluKGhlaWdodCwgb3B0aW9ucy5tYXhIZWlnaHQgfHwgdGhpcy5tYXhIZWlnaHQpO1xuICAgIH1cbiBfZml0Um93cyh0aXRsZUhlaWdodCwgZm9udFNpemUsIGJveFdpZHRoLCBpdGVtSGVpZ2h0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4ICwgbWF4V2lkdGggLCBvcHRpb25zOiB7IGxhYmVsczogeyBwYWRkaW5nICB9ICB9ICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgaGl0Ym94ZXMgPSB0aGlzLmxlZ2VuZEhpdEJveGVzID0gW107XG4gICAgICAgIGNvbnN0IGxpbmVXaWR0aHMgPSB0aGlzLmxpbmVXaWR0aHMgPSBbXG4gICAgICAgICAgICAwXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBpdGVtSGVpZ2h0ICsgcGFkZGluZztcbiAgICAgICAgbGV0IHRvdGFsSGVpZ2h0ID0gdGl0bGVIZWlnaHQ7XG4gICAgICAgIGN0eC50ZXh0QWxpZ24gPSAnbGVmdCc7XG4gICAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcbiAgICAgICAgbGV0IHJvdyA9IC0xO1xuICAgICAgICBsZXQgdG9wID0gLWxpbmVIZWlnaHQ7XG4gICAgICAgIHRoaXMubGVnZW5kSXRlbXMuZm9yRWFjaCgobGVnZW5kSXRlbSwgaSk9PntcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IGJveFdpZHRoICsgZm9udFNpemUgLyAyICsgY3R4Lm1lYXN1cmVUZXh0KGxlZ2VuZEl0ZW0udGV4dCkud2lkdGg7XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCB8fCBsaW5lV2lkdGhzW2xpbmVXaWR0aHMubGVuZ3RoIC0gMV0gKyBpdGVtV2lkdGggKyAyICogcGFkZGluZyA+IG1heFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgdG90YWxIZWlnaHQgKz0gbGluZUhlaWdodDtcbiAgICAgICAgICAgICAgICBsaW5lV2lkdGhzW2xpbmVXaWR0aHMubGVuZ3RoIC0gKGkgPiAwID8gMCA6IDEpXSA9IDA7XG4gICAgICAgICAgICAgICAgdG9wICs9IGxpbmVIZWlnaHQ7XG4gICAgICAgICAgICAgICAgcm93Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoaXRib3hlc1tpXSA9IHtcbiAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgd2lkdGg6IGl0ZW1XaWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGl0ZW1IZWlnaHRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBsaW5lV2lkdGhzW2xpbmVXaWR0aHMubGVuZ3RoIC0gMV0gKz0gaXRlbVdpZHRoICsgcGFkZGluZztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0b3RhbEhlaWdodDtcbiAgICB9XG4gICAgX2ZpdENvbHModGl0bGVIZWlnaHQsIGxhYmVsRm9udCwgYm94V2lkdGgsIF9pdGVtSGVpZ2h0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4ICwgbWF4SGVpZ2h0ICwgb3B0aW9uczogeyBsYWJlbHM6IHsgcGFkZGluZyAgfSAgfSAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGhpdGJveGVzID0gdGhpcy5sZWdlbmRIaXRCb3hlcyA9IFtdO1xuICAgICAgICBjb25zdCBjb2x1bW5TaXplcyA9IHRoaXMuY29sdW1uU2l6ZXMgPSBbXTtcbiAgICAgICAgY29uc3QgaGVpZ2h0TGltaXQgPSBtYXhIZWlnaHQgLSB0aXRsZUhlaWdodDtcbiAgICAgICAgbGV0IHRvdGFsV2lkdGggPSBwYWRkaW5nO1xuICAgICAgICBsZXQgY3VycmVudENvbFdpZHRoID0gMDtcbiAgICAgICAgbGV0IGN1cnJlbnRDb2xIZWlnaHQgPSAwO1xuICAgICAgICBsZXQgbGVmdCA9IDA7XG4gICAgICAgIGxldCBjb2wgPSAwO1xuICAgICAgICB0aGlzLmxlZ2VuZEl0ZW1zLmZvckVhY2goKGxlZ2VuZEl0ZW0sIGkpPT57XG4gICAgICAgICAgICBjb25zdCB7IGl0ZW1XaWR0aCAsIGl0ZW1IZWlnaHQgIH0gPSBjYWxjdWxhdGVJdGVtU2l6ZShib3hXaWR0aCwgbGFiZWxGb250LCBjdHgsIGxlZ2VuZEl0ZW0sIF9pdGVtSGVpZ2h0KTtcbiAgICAgICAgICAgIGlmIChpID4gMCAmJiBjdXJyZW50Q29sSGVpZ2h0ICsgaXRlbUhlaWdodCArIDIgKiBwYWRkaW5nID4gaGVpZ2h0TGltaXQpIHtcbiAgICAgICAgICAgICAgICB0b3RhbFdpZHRoICs9IGN1cnJlbnRDb2xXaWR0aCArIHBhZGRpbmc7XG4gICAgICAgICAgICAgICAgY29sdW1uU2l6ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjdXJyZW50Q29sV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogY3VycmVudENvbEhlaWdodFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGxlZnQgKz0gY3VycmVudENvbFdpZHRoICsgcGFkZGluZztcbiAgICAgICAgICAgICAgICBjb2wrKztcbiAgICAgICAgICAgICAgICBjdXJyZW50Q29sV2lkdGggPSBjdXJyZW50Q29sSGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhpdGJveGVzW2ldID0ge1xuICAgICAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICAgICAgdG9wOiBjdXJyZW50Q29sSGVpZ2h0LFxuICAgICAgICAgICAgICAgIGNvbCxcbiAgICAgICAgICAgICAgICB3aWR0aDogaXRlbVdpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogaXRlbUhlaWdodFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGN1cnJlbnRDb2xXaWR0aCA9IE1hdGgubWF4KGN1cnJlbnRDb2xXaWR0aCwgaXRlbVdpZHRoKTtcbiAgICAgICAgICAgIGN1cnJlbnRDb2xIZWlnaHQgKz0gaXRlbUhlaWdodCArIHBhZGRpbmc7XG4gICAgICAgIH0pO1xuICAgICAgICB0b3RhbFdpZHRoICs9IGN1cnJlbnRDb2xXaWR0aDtcbiAgICAgICAgY29sdW1uU2l6ZXMucHVzaCh7XG4gICAgICAgICAgICB3aWR0aDogY3VycmVudENvbFdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBjdXJyZW50Q29sSGVpZ2h0XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdG90YWxXaWR0aDtcbiAgICB9XG4gICAgYWRqdXN0SGl0Qm94ZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLmRpc3BsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0aXRsZUhlaWdodCA9IHRoaXMuX2NvbXB1dGVUaXRsZUhlaWdodCgpO1xuICAgICAgICBjb25zdCB7IGxlZ2VuZEhpdEJveGVzOiBoaXRib3hlcyAsIG9wdGlvbnM6IHsgYWxpZ24gLCBsYWJlbHM6IHsgcGFkZGluZyAgfSAsIHJ0bCAgfSAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHJ0bEhlbHBlciA9IGdldFJ0bEFkYXB0ZXIocnRsLCB0aGlzLmxlZnQsIHRoaXMud2lkdGgpO1xuICAgICAgICBpZiAodGhpcy5pc0hvcml6b250YWwoKSkge1xuICAgICAgICAgICAgbGV0IHJvdyA9IDA7XG4gICAgICAgICAgICBsZXQgbGVmdCA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCB0aGlzLmxlZnQgKyBwYWRkaW5nLCB0aGlzLnJpZ2h0IC0gdGhpcy5saW5lV2lkdGhzW3Jvd10pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBoaXRib3ggb2YgaGl0Ym94ZXMpe1xuICAgICAgICAgICAgICAgIGlmIChyb3cgIT09IGhpdGJveC5yb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93ID0gaGl0Ym94LnJvdztcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCB0aGlzLmxlZnQgKyBwYWRkaW5nLCB0aGlzLnJpZ2h0IC0gdGhpcy5saW5lV2lkdGhzW3Jvd10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoaXRib3gudG9wICs9IHRoaXMudG9wICsgdGl0bGVIZWlnaHQgKyBwYWRkaW5nO1xuICAgICAgICAgICAgICAgIGhpdGJveC5sZWZ0ID0gcnRsSGVscGVyLmxlZnRGb3JMdHIocnRsSGVscGVyLngobGVmdCksIGhpdGJveC53aWR0aCk7XG4gICAgICAgICAgICAgICAgbGVmdCArPSBoaXRib3gud2lkdGggKyBwYWRkaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGNvbCA9IDA7XG4gICAgICAgICAgICBsZXQgdG9wID0gX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMudG9wICsgdGl0bGVIZWlnaHQgKyBwYWRkaW5nLCB0aGlzLmJvdHRvbSAtIHRoaXMuY29sdW1uU2l6ZXNbY29sXS5oZWlnaHQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBoaXRib3ggb2YgaGl0Ym94ZXMpe1xuICAgICAgICAgICAgICAgIGlmIChoaXRib3guY29sICE9PSBjb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sID0gaGl0Ym94LmNvbDtcbiAgICAgICAgICAgICAgICAgICAgdG9wID0gX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMudG9wICsgdGl0bGVIZWlnaHQgKyBwYWRkaW5nLCB0aGlzLmJvdHRvbSAtIHRoaXMuY29sdW1uU2l6ZXNbY29sXS5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoaXRib3gudG9wID0gdG9wO1xuICAgICAgICAgICAgICAgIGhpdGJveC5sZWZ0ICs9IHRoaXMubGVmdCArIHBhZGRpbmc7XG4gICAgICAgICAgICAgICAgaGl0Ym94LmxlZnQgPSBydGxIZWxwZXIubGVmdEZvckx0cihydGxIZWxwZXIueChoaXRib3gubGVmdCksIGhpdGJveC53aWR0aCk7XG4gICAgICAgICAgICAgICAgdG9wICs9IGhpdGJveC5oZWlnaHQgKyBwYWRkaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlzSG9yaXpvbnRhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wb3NpdGlvbiA9PT0gJ3RvcCcgfHwgdGhpcy5vcHRpb25zLnBvc2l0aW9uID09PSAnYm90dG9tJztcbiAgICB9XG4gICAgZHJhdygpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kaXNwbGF5KSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgICAgIGNsaXBBcmVhKGN0eCwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLl9kcmF3KCk7XG4gICAgICAgICAgICB1bmNsaXBBcmVhKGN0eCk7XG4gICAgICAgIH1cbiAgICB9XG4gX2RyYXcoKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uczogb3B0cyAsIGNvbHVtblNpemVzICwgbGluZVdpZHRocyAsIGN0eCAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgYWxpZ24gLCBsYWJlbHM6IGxhYmVsT3B0cyAgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb2xvciA9IGRlZmF1bHRzLmNvbG9yO1xuICAgICAgICBjb25zdCBydGxIZWxwZXIgPSBnZXRSdGxBZGFwdGVyKG9wdHMucnRsLCB0aGlzLmxlZnQsIHRoaXMud2lkdGgpO1xuICAgICAgICBjb25zdCBsYWJlbEZvbnQgPSB0b0ZvbnQobGFiZWxPcHRzLmZvbnQpO1xuICAgICAgICBjb25zdCB7IHBhZGRpbmcgIH0gPSBsYWJlbE9wdHM7XG4gICAgICAgIGNvbnN0IGZvbnRTaXplID0gbGFiZWxGb250LnNpemU7XG4gICAgICAgIGNvbnN0IGhhbGZGb250U2l6ZSA9IGZvbnRTaXplIC8gMjtcbiAgICAgICAgbGV0IGN1cnNvcjtcbiAgICAgICAgdGhpcy5kcmF3VGl0bGUoKTtcbiAgICAgICAgY3R4LnRleHRBbGlnbiA9IHJ0bEhlbHBlci50ZXh0QWxpZ24oJ2xlZnQnKTtcbiAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuICAgICAgICBjdHgubGluZVdpZHRoID0gMC41O1xuICAgICAgICBjdHguZm9udCA9IGxhYmVsRm9udC5zdHJpbmc7XG4gICAgICAgIGNvbnN0IHsgYm94V2lkdGggLCBib3hIZWlnaHQgLCBpdGVtSGVpZ2h0ICB9ID0gZ2V0Qm94U2l6ZShsYWJlbE9wdHMsIGZvbnRTaXplKTtcbiAgICAgICAgY29uc3QgZHJhd0xlZ2VuZEJveCA9IGZ1bmN0aW9uKHgsIHksIGxlZ2VuZEl0ZW0pIHtcbiAgICAgICAgICAgIGlmIChpc05hTihib3hXaWR0aCkgfHwgYm94V2lkdGggPD0gMCB8fCBpc05hTihib3hIZWlnaHQpIHx8IGJveEhlaWdodCA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgY29uc3QgbGluZVdpZHRoID0gdmFsdWVPckRlZmF1bHQobGVnZW5kSXRlbS5saW5lV2lkdGgsIDEpO1xuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHZhbHVlT3JEZWZhdWx0KGxlZ2VuZEl0ZW0uZmlsbFN0eWxlLCBkZWZhdWx0Q29sb3IpO1xuICAgICAgICAgICAgY3R4LmxpbmVDYXAgPSB2YWx1ZU9yRGVmYXVsdChsZWdlbmRJdGVtLmxpbmVDYXAsICdidXR0Jyk7XG4gICAgICAgICAgICBjdHgubGluZURhc2hPZmZzZXQgPSB2YWx1ZU9yRGVmYXVsdChsZWdlbmRJdGVtLmxpbmVEYXNoT2Zmc2V0LCAwKTtcbiAgICAgICAgICAgIGN0eC5saW5lSm9pbiA9IHZhbHVlT3JEZWZhdWx0KGxlZ2VuZEl0ZW0ubGluZUpvaW4sICdtaXRlcicpO1xuICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcbiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHZhbHVlT3JEZWZhdWx0KGxlZ2VuZEl0ZW0uc3Ryb2tlU3R5bGUsIGRlZmF1bHRDb2xvcik7XG4gICAgICAgICAgICBjdHguc2V0TGluZURhc2godmFsdWVPckRlZmF1bHQobGVnZW5kSXRlbS5saW5lRGFzaCwgW10pKTtcbiAgICAgICAgICAgIGlmIChsYWJlbE9wdHMudXNlUG9pbnRTdHlsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyYXdPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICByYWRpdXM6IGJveEhlaWdodCAqIE1hdGguU1FSVDIgLyAyLFxuICAgICAgICAgICAgICAgICAgICBwb2ludFN0eWxlOiBsZWdlbmRJdGVtLnBvaW50U3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uOiBsZWdlbmRJdGVtLnJvdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogbGluZVdpZHRoXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBjZW50ZXJYID0gcnRsSGVscGVyLnhQbHVzKHgsIGJveFdpZHRoIC8gMik7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VudGVyWSA9IHkgKyBoYWxmRm9udFNpemU7XG4gICAgICAgICAgICAgICAgZHJhd1BvaW50TGVnZW5kKGN0eCwgZHJhd09wdGlvbnMsIGNlbnRlclgsIGNlbnRlclksIGxhYmVsT3B0cy5wb2ludFN0eWxlV2lkdGggJiYgYm94V2lkdGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCB5Qm94VG9wID0geSArIE1hdGgubWF4KChmb250U2l6ZSAtIGJveEhlaWdodCkgLyAyLCAwKTtcbiAgICAgICAgICAgICAgICBjb25zdCB4Qm94TGVmdCA9IHJ0bEhlbHBlci5sZWZ0Rm9yTHRyKHgsIGJveFdpZHRoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBib3JkZXJSYWRpdXMgPSB0b1RSQkxDb3JuZXJzKGxlZ2VuZEl0ZW0uYm9yZGVyUmFkaXVzKTtcbiAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC52YWx1ZXMoYm9yZGVyUmFkaXVzKS5zb21lKCh2KT0+diAhPT0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkUm91bmRlZFJlY3RQYXRoKGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeEJveExlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5Qm94VG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgdzogYm94V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBoOiBib3hIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IGJvcmRlclJhZGl1c1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdHgucmVjdCh4Qm94TGVmdCwgeUJveFRvcCwgYm94V2lkdGgsIGJveEhlaWdodCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmVXaWR0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmlsbFRleHQgPSBmdW5jdGlvbih4LCB5LCBsZWdlbmRJdGVtKSB7XG4gICAgICAgICAgICByZW5kZXJUZXh0KGN0eCwgbGVnZW5kSXRlbS50ZXh0LCB4LCB5ICsgaXRlbUhlaWdodCAvIDIsIGxhYmVsRm9udCwge1xuICAgICAgICAgICAgICAgIHN0cmlrZXRocm91Z2g6IGxlZ2VuZEl0ZW0uaGlkZGVuLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogcnRsSGVscGVyLnRleHRBbGlnbihsZWdlbmRJdGVtLnRleHRBbGlnbilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLmlzSG9yaXpvbnRhbCgpO1xuICAgICAgICBjb25zdCB0aXRsZUhlaWdodCA9IHRoaXMuX2NvbXB1dGVUaXRsZUhlaWdodCgpO1xuICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgICAgeDogX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMubGVmdCArIHBhZGRpbmcsIHRoaXMucmlnaHQgLSBsaW5lV2lkdGhzWzBdKSxcbiAgICAgICAgICAgICAgICB5OiB0aGlzLnRvcCArIHBhZGRpbmcgKyB0aXRsZUhlaWdodCxcbiAgICAgICAgICAgICAgICBsaW5lOiAwXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICAgIHg6IHRoaXMubGVmdCArIHBhZGRpbmcsXG4gICAgICAgICAgICAgICAgeTogX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMudG9wICsgdGl0bGVIZWlnaHQgKyBwYWRkaW5nLCB0aGlzLmJvdHRvbSAtIGNvbHVtblNpemVzWzBdLmhlaWdodCksXG4gICAgICAgICAgICAgICAgbGluZTogMFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBvdmVycmlkZVRleHREaXJlY3Rpb24odGhpcy5jdHgsIG9wdHMudGV4dERpcmVjdGlvbik7XG4gICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBpdGVtSGVpZ2h0ICsgcGFkZGluZztcbiAgICAgICAgdGhpcy5sZWdlbmRJdGVtcy5mb3JFYWNoKChsZWdlbmRJdGVtLCBpKT0+e1xuICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gbGVnZW5kSXRlbS5mb250Q29sb3I7XG4gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gbGVnZW5kSXRlbS5mb250Q29sb3I7XG4gICAgICAgICAgICBjb25zdCB0ZXh0V2lkdGggPSBjdHgubWVhc3VyZVRleHQobGVnZW5kSXRlbS50ZXh0KS53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHRleHRBbGlnbiA9IHJ0bEhlbHBlci50ZXh0QWxpZ24obGVnZW5kSXRlbS50ZXh0QWxpZ24gfHwgKGxlZ2VuZEl0ZW0udGV4dEFsaWduID0gbGFiZWxPcHRzLnRleHRBbGlnbikpO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBib3hXaWR0aCArIGhhbGZGb250U2l6ZSArIHRleHRXaWR0aDtcbiAgICAgICAgICAgIGxldCB4ID0gY3Vyc29yLng7XG4gICAgICAgICAgICBsZXQgeSA9IGN1cnNvci55O1xuICAgICAgICAgICAgcnRsSGVscGVyLnNldFdpZHRoKHRoaXMud2lkdGgpO1xuICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiB4ICsgd2lkdGggKyBwYWRkaW5nID4gdGhpcy5yaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB5ID0gY3Vyc29yLnkgKz0gbGluZUhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yLmxpbmUrKztcbiAgICAgICAgICAgICAgICAgICAgeCA9IGN1cnNvci54ID0gX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMubGVmdCArIHBhZGRpbmcsIHRoaXMucmlnaHQgLSBsaW5lV2lkdGhzW2N1cnNvci5saW5lXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpID4gMCAmJiB5ICsgbGluZUhlaWdodCA+IHRoaXMuYm90dG9tKSB7XG4gICAgICAgICAgICAgICAgeCA9IGN1cnNvci54ID0geCArIGNvbHVtblNpemVzW2N1cnNvci5saW5lXS53aWR0aCArIHBhZGRpbmc7XG4gICAgICAgICAgICAgICAgY3Vyc29yLmxpbmUrKztcbiAgICAgICAgICAgICAgICB5ID0gY3Vyc29yLnkgPSBfYWxpZ25TdGFydEVuZChhbGlnbiwgdGhpcy50b3AgKyB0aXRsZUhlaWdodCArIHBhZGRpbmcsIHRoaXMuYm90dG9tIC0gY29sdW1uU2l6ZXNbY3Vyc29yLmxpbmVdLmhlaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZWFsWCA9IHJ0bEhlbHBlci54KHgpO1xuICAgICAgICAgICAgZHJhd0xlZ2VuZEJveChyZWFsWCwgeSwgbGVnZW5kSXRlbSk7XG4gICAgICAgICAgICB4ID0gX3RleHRYKHRleHRBbGlnbiwgeCArIGJveFdpZHRoICsgaGFsZkZvbnRTaXplLCBpc0hvcml6b250YWwgPyB4ICsgd2lkdGggOiB0aGlzLnJpZ2h0LCBvcHRzLnJ0bCk7XG4gICAgICAgICAgICBmaWxsVGV4dChydGxIZWxwZXIueCh4KSwgeSwgbGVnZW5kSXRlbSk7XG4gICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgY3Vyc29yLnggKz0gd2lkdGggKyBwYWRkaW5nO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGVnZW5kSXRlbS50ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbnRMaW5lSGVpZ2h0ID0gbGFiZWxGb250LmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICAgICAgY3Vyc29yLnkgKz0gY2FsY3VsYXRlTGVnZW5kSXRlbUhlaWdodChsZWdlbmRJdGVtLCBmb250TGluZUhlaWdodCkgKyBwYWRkaW5nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJzb3IueSArPSBsaW5lSGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdG9yZVRleHREaXJlY3Rpb24odGhpcy5jdHgsIG9wdHMudGV4dERpcmVjdGlvbik7XG4gICAgfVxuIGRyYXdUaXRsZSgpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgdGl0bGVPcHRzID0gb3B0cy50aXRsZTtcbiAgICAgICAgY29uc3QgdGl0bGVGb250ID0gdG9Gb250KHRpdGxlT3B0cy5mb250KTtcbiAgICAgICAgY29uc3QgdGl0bGVQYWRkaW5nID0gdG9QYWRkaW5nKHRpdGxlT3B0cy5wYWRkaW5nKTtcbiAgICAgICAgaWYgKCF0aXRsZU9wdHMuZGlzcGxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJ0bEhlbHBlciA9IGdldFJ0bEFkYXB0ZXIob3B0cy5ydGwsIHRoaXMubGVmdCwgdGhpcy53aWR0aCk7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRpdGxlT3B0cy5wb3NpdGlvbjtcbiAgICAgICAgY29uc3QgaGFsZkZvbnRTaXplID0gdGl0bGVGb250LnNpemUgLyAyO1xuICAgICAgICBjb25zdCB0b3BQYWRkaW5nUGx1c0hhbGZGb250U2l6ZSA9IHRpdGxlUGFkZGluZy50b3AgKyBoYWxmRm9udFNpemU7XG4gICAgICAgIGxldCB5O1xuICAgICAgICBsZXQgbGVmdCA9IHRoaXMubGVmdDtcbiAgICAgICAgbGV0IG1heFdpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICAgIG1heFdpZHRoID0gTWF0aC5tYXgoLi4udGhpcy5saW5lV2lkdGhzKTtcbiAgICAgICAgICAgIHkgPSB0aGlzLnRvcCArIHRvcFBhZGRpbmdQbHVzSGFsZkZvbnRTaXplO1xuICAgICAgICAgICAgbGVmdCA9IF9hbGlnblN0YXJ0RW5kKG9wdHMuYWxpZ24sIGxlZnQsIHRoaXMucmlnaHQgLSBtYXhXaWR0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLmNvbHVtblNpemVzLnJlZHVjZSgoYWNjLCBzaXplKT0+TWF0aC5tYXgoYWNjLCBzaXplLmhlaWdodCksIDApO1xuICAgICAgICAgICAgeSA9IHRvcFBhZGRpbmdQbHVzSGFsZkZvbnRTaXplICsgX2FsaWduU3RhcnRFbmQob3B0cy5hbGlnbiwgdGhpcy50b3AsIHRoaXMuYm90dG9tIC0gbWF4SGVpZ2h0IC0gb3B0cy5sYWJlbHMucGFkZGluZyAtIHRoaXMuX2NvbXB1dGVUaXRsZUhlaWdodCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4ID0gX2FsaWduU3RhcnRFbmQocG9zaXRpb24sIGxlZnQsIGxlZnQgKyBtYXhXaWR0aCk7XG4gICAgICAgIGN0eC50ZXh0QWxpZ24gPSBydGxIZWxwZXIudGV4dEFsaWduKF90b0xlZnRSaWdodENlbnRlcihwb3NpdGlvbikpO1xuICAgICAgICBjdHgudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7XG4gICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHRpdGxlT3B0cy5jb2xvcjtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRpdGxlT3B0cy5jb2xvcjtcbiAgICAgICAgY3R4LmZvbnQgPSB0aXRsZUZvbnQuc3RyaW5nO1xuICAgICAgICByZW5kZXJUZXh0KGN0eCwgdGl0bGVPcHRzLnRleHQsIHgsIHksIHRpdGxlRm9udCk7XG4gICAgfVxuIF9jb21wdXRlVGl0bGVIZWlnaHQoKSB7XG4gICAgICAgIGNvbnN0IHRpdGxlT3B0cyA9IHRoaXMub3B0aW9ucy50aXRsZTtcbiAgICAgICAgY29uc3QgdGl0bGVGb250ID0gdG9Gb250KHRpdGxlT3B0cy5mb250KTtcbiAgICAgICAgY29uc3QgdGl0bGVQYWRkaW5nID0gdG9QYWRkaW5nKHRpdGxlT3B0cy5wYWRkaW5nKTtcbiAgICAgICAgcmV0dXJuIHRpdGxlT3B0cy5kaXNwbGF5ID8gdGl0bGVGb250LmxpbmVIZWlnaHQgKyB0aXRsZVBhZGRpbmcuaGVpZ2h0IDogMDtcbiAgICB9XG4gX2dldExlZ2VuZEl0ZW1BdCh4LCB5KSB7XG4gICAgICAgIGxldCBpLCBoaXRCb3gsIGxoO1xuICAgICAgICBpZiAoX2lzQmV0d2Vlbih4LCB0aGlzLmxlZnQsIHRoaXMucmlnaHQpICYmIF9pc0JldHdlZW4oeSwgdGhpcy50b3AsIHRoaXMuYm90dG9tKSkge1xuICAgICAgICAgICAgbGggPSB0aGlzLmxlZ2VuZEhpdEJveGVzO1xuICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgbGgubGVuZ3RoOyArK2kpe1xuICAgICAgICAgICAgICAgIGhpdEJveCA9IGxoW2ldO1xuICAgICAgICAgICAgICAgIGlmIChfaXNCZXR3ZWVuKHgsIGhpdEJveC5sZWZ0LCBoaXRCb3gubGVmdCArIGhpdEJveC53aWR0aCkgJiYgX2lzQmV0d2Vlbih5LCBoaXRCb3gudG9wLCBoaXRCb3gudG9wICsgaGl0Qm94LmhlaWdodCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVnZW5kSXRlbXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiBoYW5kbGVFdmVudChlKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmICghaXNMaXN0ZW5lZChlLnR5cGUsIG9wdHMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaG92ZXJlZEl0ZW0gPSB0aGlzLl9nZXRMZWdlbmRJdGVtQXQoZS54LCBlLnkpO1xuICAgICAgICBpZiAoZS50eXBlID09PSAnbW91c2Vtb3ZlJyB8fCBlLnR5cGUgPT09ICdtb3VzZW91dCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5faG92ZXJlZEl0ZW07XG4gICAgICAgICAgICBjb25zdCBzYW1lSXRlbSA9IGl0ZW1zRXF1YWwocHJldmlvdXMsIGhvdmVyZWRJdGVtKTtcbiAgICAgICAgICAgIGlmIChwcmV2aW91cyAmJiAhc2FtZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhvcHRzLm9uTGVhdmUsIFtcbiAgICAgICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMsXG4gICAgICAgICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICAgICBdLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2hvdmVyZWRJdGVtID0gaG92ZXJlZEl0ZW07XG4gICAgICAgICAgICBpZiAoaG92ZXJlZEl0ZW0gJiYgIXNhbWVJdGVtKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sob3B0cy5vbkhvdmVyLCBbXG4gICAgICAgICAgICAgICAgICAgIGUsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyZWRJdGVtLFxuICAgICAgICAgICAgICAgICAgICB0aGlzXG4gICAgICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaG92ZXJlZEl0ZW0pIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdHMub25DbGljaywgW1xuICAgICAgICAgICAgICAgIGUsXG4gICAgICAgICAgICAgICAgaG92ZXJlZEl0ZW0sXG4gICAgICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVJdGVtU2l6ZShib3hXaWR0aCwgbGFiZWxGb250LCBjdHgsIGxlZ2VuZEl0ZW0sIF9pdGVtSGVpZ2h0KSB7XG4gICAgY29uc3QgaXRlbVdpZHRoID0gY2FsY3VsYXRlSXRlbVdpZHRoKGxlZ2VuZEl0ZW0sIGJveFdpZHRoLCBsYWJlbEZvbnQsIGN0eCk7XG4gICAgY29uc3QgaXRlbUhlaWdodCA9IGNhbGN1bGF0ZUl0ZW1IZWlnaHQoX2l0ZW1IZWlnaHQsIGxlZ2VuZEl0ZW0sIGxhYmVsRm9udC5saW5lSGVpZ2h0KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBpdGVtV2lkdGgsXG4gICAgICAgIGl0ZW1IZWlnaHRcbiAgICB9O1xufVxuZnVuY3Rpb24gY2FsY3VsYXRlSXRlbVdpZHRoKGxlZ2VuZEl0ZW0sIGJveFdpZHRoLCBsYWJlbEZvbnQsIGN0eCkge1xuICAgIGxldCBsZWdlbmRJdGVtVGV4dCA9IGxlZ2VuZEl0ZW0udGV4dDtcbiAgICBpZiAobGVnZW5kSXRlbVRleHQgJiYgdHlwZW9mIGxlZ2VuZEl0ZW1UZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICBsZWdlbmRJdGVtVGV4dCA9IGxlZ2VuZEl0ZW1UZXh0LnJlZHVjZSgoYSwgYik9PmEubGVuZ3RoID4gYi5sZW5ndGggPyBhIDogYik7XG4gICAgfVxuICAgIHJldHVybiBib3hXaWR0aCArIGxhYmVsRm9udC5zaXplIC8gMiArIGN0eC5tZWFzdXJlVGV4dChsZWdlbmRJdGVtVGV4dCkud2lkdGg7XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVJdGVtSGVpZ2h0KF9pdGVtSGVpZ2h0LCBsZWdlbmRJdGVtLCBmb250TGluZUhlaWdodCkge1xuICAgIGxldCBpdGVtSGVpZ2h0ID0gX2l0ZW1IZWlnaHQ7XG4gICAgaWYgKHR5cGVvZiBsZWdlbmRJdGVtLnRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGl0ZW1IZWlnaHQgPSBjYWxjdWxhdGVMZWdlbmRJdGVtSGVpZ2h0KGxlZ2VuZEl0ZW0sIGZvbnRMaW5lSGVpZ2h0KTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1IZWlnaHQ7XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVMZWdlbmRJdGVtSGVpZ2h0KGxlZ2VuZEl0ZW0sIGZvbnRMaW5lSGVpZ2h0KSB7XG4gICAgY29uc3QgbGFiZWxIZWlnaHQgPSBsZWdlbmRJdGVtLnRleHQgPyBsZWdlbmRJdGVtLnRleHQubGVuZ3RoIDogMDtcbiAgICByZXR1cm4gZm9udExpbmVIZWlnaHQgKiBsYWJlbEhlaWdodDtcbn1cbmZ1bmN0aW9uIGlzTGlzdGVuZWQodHlwZSwgb3B0cykge1xuICAgIGlmICgodHlwZSA9PT0gJ21vdXNlbW92ZScgfHwgdHlwZSA9PT0gJ21vdXNlb3V0JykgJiYgKG9wdHMub25Ib3ZlciB8fCBvcHRzLm9uTGVhdmUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAob3B0cy5vbkNsaWNrICYmICh0eXBlID09PSAnY2xpY2snIHx8IHR5cGUgPT09ICdtb3VzZXVwJykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbnZhciBwbHVnaW5fbGVnZW5kID0ge1xuICAgIGlkOiAnbGVnZW5kJyxcbiBfZWxlbWVudDogTGVnZW5kLFxuICAgIHN0YXJ0IChjaGFydCwgX2FyZ3MsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgbGVnZW5kID0gY2hhcnQubGVnZW5kID0gbmV3IExlZ2VuZCh7XG4gICAgICAgICAgICBjdHg6IGNoYXJ0LmN0eCxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBjaGFydFxuICAgICAgICB9KTtcbiAgICAgICAgbGF5b3V0cy5jb25maWd1cmUoY2hhcnQsIGxlZ2VuZCwgb3B0aW9ucyk7XG4gICAgICAgIGxheW91dHMuYWRkQm94KGNoYXJ0LCBsZWdlbmQpO1xuICAgIH0sXG4gICAgc3RvcCAoY2hhcnQpIHtcbiAgICAgICAgbGF5b3V0cy5yZW1vdmVCb3goY2hhcnQsIGNoYXJ0LmxlZ2VuZCk7XG4gICAgICAgIGRlbGV0ZSBjaGFydC5sZWdlbmQ7XG4gICAgfSxcbiAgICBiZWZvcmVVcGRhdGUgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBsZWdlbmQgPSBjaGFydC5sZWdlbmQ7XG4gICAgICAgIGxheW91dHMuY29uZmlndXJlKGNoYXJ0LCBsZWdlbmQsIG9wdGlvbnMpO1xuICAgICAgICBsZWdlbmQub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSxcbiAgICBhZnRlclVwZGF0ZSAoY2hhcnQpIHtcbiAgICAgICAgY29uc3QgbGVnZW5kID0gY2hhcnQubGVnZW5kO1xuICAgICAgICBsZWdlbmQuYnVpbGRMYWJlbHMoKTtcbiAgICAgICAgbGVnZW5kLmFkanVzdEhpdEJveGVzKCk7XG4gICAgfSxcbiAgICBhZnRlckV2ZW50IChjaGFydCwgYXJncykge1xuICAgICAgICBpZiAoIWFyZ3MucmVwbGF5KSB7XG4gICAgICAgICAgICBjaGFydC5sZWdlbmQuaGFuZGxlRXZlbnQoYXJncy5ldmVudCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgIHBvc2l0aW9uOiAndG9wJyxcbiAgICAgICAgYWxpZ246ICdjZW50ZXInLFxuICAgICAgICBmdWxsU2l6ZTogdHJ1ZSxcbiAgICAgICAgcmV2ZXJzZTogZmFsc2UsXG4gICAgICAgIHdlaWdodDogMTAwMCxcbiAgICAgICAgb25DbGljayAoZSwgbGVnZW5kSXRlbSwgbGVnZW5kKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGxlZ2VuZEl0ZW0uZGF0YXNldEluZGV4O1xuICAgICAgICAgICAgY29uc3QgY2kgPSBsZWdlbmQuY2hhcnQ7XG4gICAgICAgICAgICBpZiAoY2kuaXNEYXRhc2V0VmlzaWJsZShpbmRleCkpIHtcbiAgICAgICAgICAgICAgICBjaS5oaWRlKGluZGV4KTtcbiAgICAgICAgICAgICAgICBsZWdlbmRJdGVtLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNpLnNob3coaW5kZXgpO1xuICAgICAgICAgICAgICAgIGxlZ2VuZEl0ZW0uaGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uSG92ZXI6IG51bGwsXG4gICAgICAgIG9uTGVhdmU6IG51bGwsXG4gICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICAgY29sb3I6IChjdHgpPT5jdHguY2hhcnQub3B0aW9ucy5jb2xvcixcbiAgICAgICAgICAgIGJveFdpZHRoOiA0MCxcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwLFxuICAgICAgICAgICAgZ2VuZXJhdGVMYWJlbHMgKGNoYXJ0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YXNldHMgPSBjaGFydC5kYXRhLmRhdGFzZXRzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgbGFiZWxzOiB7IHVzZVBvaW50U3R5bGUgLCBwb2ludFN0eWxlICwgdGV4dEFsaWduICwgY29sb3IgLCB1c2VCb3JkZXJSYWRpdXMgLCBib3JkZXJSYWRpdXMgIH0gIH0gPSBjaGFydC5sZWdlbmQub3B0aW9ucztcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hhcnQuX2dldFNvcnRlZERhdGFzZXRNZXRhcygpLm1hcCgobWV0YSk9PntcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBtZXRhLmNvbnRyb2xsZXIuZ2V0U3R5bGUodXNlUG9pbnRTdHlsZSA/IDAgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBib3JkZXJXaWR0aCA9IHRvUGFkZGluZyhzdHlsZS5ib3JkZXJXaWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBkYXRhc2V0c1ttZXRhLmluZGV4XS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogc3R5bGUuYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udENvbG9yOiBjb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbjogIW1ldGEudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVDYXA6IHN0eWxlLmJvcmRlckNhcFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZURhc2g6IHN0eWxlLmJvcmRlckRhc2gsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lRGFzaE9mZnNldDogc3R5bGUuYm9yZGVyRGFzaE9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVKb2luOiBzdHlsZS5ib3JkZXJKb2luU3R5bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lV2lkdGg6IChib3JkZXJXaWR0aC53aWR0aCArIGJvcmRlcldpZHRoLmhlaWdodCkgLyA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlU3R5bGU6IHN0eWxlLmJvcmRlckNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRTdHlsZTogcG9pbnRTdHlsZSB8fCBzdHlsZS5wb2ludFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb246IHN0eWxlLnJvdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiB0ZXh0QWxpZ24gfHwgc3R5bGUudGV4dEFsaWduLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiB1c2VCb3JkZXJSYWRpdXMgJiYgKGJvcmRlclJhZGl1cyB8fCBzdHlsZS5ib3JkZXJSYWRpdXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldEluZGV4OiBtZXRhLmluZGV4XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICBjb2xvcjogKGN0eCk9PmN0eC5jaGFydC5vcHRpb25zLmNvbG9yLFxuICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICAgICAgICB0ZXh0OiAnJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkZXNjcmlwdG9yczoge1xuICAgICAgICBfc2NyaXB0YWJsZTogKG5hbWUpPT4hbmFtZS5zdGFydHNXaXRoKCdvbicpLFxuICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICAgIF9zY3JpcHRhYmxlOiAobmFtZSk9PiFbXG4gICAgICAgICAgICAgICAgICAgICdnZW5lcmF0ZUxhYmVscycsXG4gICAgICAgICAgICAgICAgICAgICdmaWx0ZXInLFxuICAgICAgICAgICAgICAgICAgICAnc29ydCdcbiAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKG5hbWUpXG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5jbGFzcyBUaXRsZSBleHRlbmRzIEVsZW1lbnQge1xuIGNvbnN0cnVjdG9yKGNvbmZpZyl7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY2hhcnQgPSBjb25maWcuY2hhcnQ7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IGNvbmZpZy5vcHRpb25zO1xuICAgICAgICB0aGlzLmN0eCA9IGNvbmZpZy5jdHg7XG4gICAgICAgIHRoaXMuX3BhZGRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMudG9wID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmJvdHRvbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5sZWZ0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnJpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLndpZHRoID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy53ZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZnVsbFNpemUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHVwZGF0ZShtYXhXaWR0aCwgbWF4SGVpZ2h0KSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIHRoaXMubGVmdCA9IDA7XG4gICAgICAgIHRoaXMudG9wID0gMDtcbiAgICAgICAgaWYgKCFvcHRzLmRpc3BsYXkpIHtcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLmhlaWdodCA9IHRoaXMucmlnaHQgPSB0aGlzLmJvdHRvbSA9IDA7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMucmlnaHQgPSBtYXhXaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmJvdHRvbSA9IG1heEhlaWdodDtcbiAgICAgICAgY29uc3QgbGluZUNvdW50ID0gaXNBcnJheShvcHRzLnRleHQpID8gb3B0cy50ZXh0Lmxlbmd0aCA6IDE7XG4gICAgICAgIHRoaXMuX3BhZGRpbmcgPSB0b1BhZGRpbmcob3B0cy5wYWRkaW5nKTtcbiAgICAgICAgY29uc3QgdGV4dFNpemUgPSBsaW5lQ291bnQgKiB0b0ZvbnQob3B0cy5mb250KS5saW5lSGVpZ2h0ICsgdGhpcy5fcGFkZGluZy5oZWlnaHQ7XG4gICAgICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRleHRTaXplO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRleHRTaXplO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzSG9yaXpvbnRhbCgpIHtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uO1xuICAgICAgICByZXR1cm4gcG9zID09PSAndG9wJyB8fCBwb3MgPT09ICdib3R0b20nO1xuICAgIH1cbiAgICBfZHJhd0FyZ3Mob2Zmc2V0KSB7XG4gICAgICAgIGNvbnN0IHsgdG9wICwgbGVmdCAsIGJvdHRvbSAsIHJpZ2h0ICwgb3B0aW9ucyAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGFsaWduID0gb3B0aW9ucy5hbGlnbjtcbiAgICAgICAgbGV0IHJvdGF0aW9uID0gMDtcbiAgICAgICAgbGV0IG1heFdpZHRoLCB0aXRsZVgsIHRpdGxlWTtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICAgIHRpdGxlWCA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCBsZWZ0LCByaWdodCk7XG4gICAgICAgICAgICB0aXRsZVkgPSB0b3AgKyBvZmZzZXQ7XG4gICAgICAgICAgICBtYXhXaWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnBvc2l0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgICAgICB0aXRsZVggPSBsZWZ0ICsgb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHRpdGxlWSA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCBib3R0b20sIHRvcCk7XG4gICAgICAgICAgICAgICAgcm90YXRpb24gPSBQSSAqIC0wLjU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRpdGxlWCA9IHJpZ2h0IC0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHRpdGxlWSA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCB0b3AsIGJvdHRvbSk7XG4gICAgICAgICAgICAgICAgcm90YXRpb24gPSBQSSAqIDAuNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1heFdpZHRoID0gYm90dG9tIC0gdG9wO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0aXRsZVgsXG4gICAgICAgICAgICB0aXRsZVksXG4gICAgICAgICAgICBtYXhXaWR0aCxcbiAgICAgICAgICAgIHJvdGF0aW9uXG4gICAgICAgIH07XG4gICAgfVxuICAgIGRyYXcoKSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICBjb25zdCBvcHRzID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBpZiAoIW9wdHMuZGlzcGxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvbnRPcHRzID0gdG9Gb250KG9wdHMuZm9udCk7XG4gICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBmb250T3B0cy5saW5lSGVpZ2h0O1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBsaW5lSGVpZ2h0IC8gMiArIHRoaXMuX3BhZGRpbmcudG9wO1xuICAgICAgICBjb25zdCB7IHRpdGxlWCAsIHRpdGxlWSAsIG1heFdpZHRoICwgcm90YXRpb24gIH0gPSB0aGlzLl9kcmF3QXJncyhvZmZzZXQpO1xuICAgICAgICByZW5kZXJUZXh0KGN0eCwgb3B0cy50ZXh0LCAwLCAwLCBmb250T3B0cywge1xuICAgICAgICAgICAgY29sb3I6IG9wdHMuY29sb3IsXG4gICAgICAgICAgICBtYXhXaWR0aCxcbiAgICAgICAgICAgIHJvdGF0aW9uLFxuICAgICAgICAgICAgdGV4dEFsaWduOiBfdG9MZWZ0UmlnaHRDZW50ZXIob3B0cy5hbGlnbiksXG4gICAgICAgICAgICB0ZXh0QmFzZWxpbmU6ICdtaWRkbGUnLFxuICAgICAgICAgICAgdHJhbnNsYXRpb246IFtcbiAgICAgICAgICAgICAgICB0aXRsZVgsXG4gICAgICAgICAgICAgICAgdGl0bGVZXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVRpdGxlKGNoYXJ0LCB0aXRsZU9wdHMpIHtcbiAgICBjb25zdCB0aXRsZSA9IG5ldyBUaXRsZSh7XG4gICAgICAgIGN0eDogY2hhcnQuY3R4LFxuICAgICAgICBvcHRpb25zOiB0aXRsZU9wdHMsXG4gICAgICAgIGNoYXJ0XG4gICAgfSk7XG4gICAgbGF5b3V0cy5jb25maWd1cmUoY2hhcnQsIHRpdGxlLCB0aXRsZU9wdHMpO1xuICAgIGxheW91dHMuYWRkQm94KGNoYXJ0LCB0aXRsZSk7XG4gICAgY2hhcnQudGl0bGVCbG9jayA9IHRpdGxlO1xufVxudmFyIHBsdWdpbl90aXRsZSA9IHtcbiAgICBpZDogJ3RpdGxlJyxcbiBfZWxlbWVudDogVGl0bGUsXG4gICAgc3RhcnQgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBjcmVhdGVUaXRsZShjaGFydCwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICBzdG9wIChjaGFydCkge1xuICAgICAgICBjb25zdCB0aXRsZUJsb2NrID0gY2hhcnQudGl0bGVCbG9jaztcbiAgICAgICAgbGF5b3V0cy5yZW1vdmVCb3goY2hhcnQsIHRpdGxlQmxvY2spO1xuICAgICAgICBkZWxldGUgY2hhcnQudGl0bGVCbG9jaztcbiAgICB9LFxuICAgIGJlZm9yZVVwZGF0ZSAoY2hhcnQsIF9hcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gY2hhcnQudGl0bGVCbG9jaztcbiAgICAgICAgbGF5b3V0cy5jb25maWd1cmUoY2hhcnQsIHRpdGxlLCBvcHRpb25zKTtcbiAgICAgICAgdGl0bGUub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSxcbiAgICBkZWZhdWx0czoge1xuICAgICAgICBhbGlnbjogJ2NlbnRlcicsXG4gICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICBmb250OiB7XG4gICAgICAgICAgICB3ZWlnaHQ6ICdib2xkJ1xuICAgICAgICB9LFxuICAgICAgICBmdWxsU2l6ZTogdHJ1ZSxcbiAgICAgICAgcGFkZGluZzogMTAsXG4gICAgICAgIHBvc2l0aW9uOiAndG9wJyxcbiAgICAgICAgdGV4dDogJycsXG4gICAgICAgIHdlaWdodDogMjAwMFxuICAgIH0sXG4gICAgZGVmYXVsdFJvdXRlczoge1xuICAgICAgICBjb2xvcjogJ2NvbG9yJ1xuICAgIH0sXG4gICAgZGVzY3JpcHRvcnM6IHtcbiAgICAgICAgX3NjcmlwdGFibGU6IHRydWUsXG4gICAgICAgIF9pbmRleGFibGU6IGZhbHNlXG4gICAgfVxufTtcblxuY29uc3QgbWFwID0gbmV3IFdlYWtNYXAoKTtcbnZhciBwbHVnaW5fc3VidGl0bGUgPSB7XG4gICAgaWQ6ICdzdWJ0aXRsZScsXG4gICAgc3RhcnQgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB0aXRsZSA9IG5ldyBUaXRsZSh7XG4gICAgICAgICAgICBjdHg6IGNoYXJ0LmN0eCxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBjaGFydFxuICAgICAgICB9KTtcbiAgICAgICAgbGF5b3V0cy5jb25maWd1cmUoY2hhcnQsIHRpdGxlLCBvcHRpb25zKTtcbiAgICAgICAgbGF5b3V0cy5hZGRCb3goY2hhcnQsIHRpdGxlKTtcbiAgICAgICAgbWFwLnNldChjaGFydCwgdGl0bGUpO1xuICAgIH0sXG4gICAgc3RvcCAoY2hhcnQpIHtcbiAgICAgICAgbGF5b3V0cy5yZW1vdmVCb3goY2hhcnQsIG1hcC5nZXQoY2hhcnQpKTtcbiAgICAgICAgbWFwLmRlbGV0ZShjaGFydCk7XG4gICAgfSxcbiAgICBiZWZvcmVVcGRhdGUgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB0aXRsZSA9IG1hcC5nZXQoY2hhcnQpO1xuICAgICAgICBsYXlvdXRzLmNvbmZpZ3VyZShjaGFydCwgdGl0bGUsIG9wdGlvbnMpO1xuICAgICAgICB0aXRsZS5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9LFxuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgIGZvbnQ6IHtcbiAgICAgICAgICAgIHdlaWdodDogJ25vcm1hbCdcbiAgICAgICAgfSxcbiAgICAgICAgZnVsbFNpemU6IHRydWUsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgIHBvc2l0aW9uOiAndG9wJyxcbiAgICAgICAgdGV4dDogJycsXG4gICAgICAgIHdlaWdodDogMTUwMFxuICAgIH0sXG4gICAgZGVmYXVsdFJvdXRlczoge1xuICAgICAgICBjb2xvcjogJ2NvbG9yJ1xuICAgIH0sXG4gICAgZGVzY3JpcHRvcnM6IHtcbiAgICAgICAgX3NjcmlwdGFibGU6IHRydWUsXG4gICAgICAgIF9pbmRleGFibGU6IGZhbHNlXG4gICAgfVxufTtcblxuY29uc3QgcG9zaXRpb25lcnMgPSB7XG4gYXZlcmFnZSAoaXRlbXMpIHtcbiAgICAgICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaSwgbGVuO1xuICAgICAgICBsZXQgeFNldCA9IG5ldyBTZXQoKTtcbiAgICAgICAgbGV0IHkgPSAwO1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBmb3IoaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IGVsID0gaXRlbXNbaV0uZWxlbWVudDtcbiAgICAgICAgICAgIGlmIChlbCAmJiBlbC5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zID0gZWwudG9vbHRpcFBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgeFNldC5hZGQocG9zLngpO1xuICAgICAgICAgICAgICAgIHkgKz0gcG9zLnk7XG4gICAgICAgICAgICAgICAgKytjb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY291bnQgPT09IDAgfHwgeFNldC5zaXplID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeEF2ZXJhZ2UgPSBbXG4gICAgICAgICAgICAuLi54U2V0XG4gICAgICAgIF0ucmVkdWNlKChhLCBiKT0+YSArIGIpIC8geFNldC5zaXplO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogeEF2ZXJhZ2UsXG4gICAgICAgICAgICB5OiB5IC8gY291bnRcbiAgICAgICAgfTtcbiAgICB9LFxuIG5lYXJlc3QgKGl0ZW1zLCBldmVudFBvc2l0aW9uKSB7XG4gICAgICAgIGlmICghaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHggPSBldmVudFBvc2l0aW9uLng7XG4gICAgICAgIGxldCB5ID0gZXZlbnRQb3NpdGlvbi55O1xuICAgICAgICBsZXQgbWluRGlzdGFuY2UgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIGxldCBpLCBsZW4sIG5lYXJlc3RFbGVtZW50O1xuICAgICAgICBmb3IoaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IGVsID0gaXRlbXNbaV0uZWxlbWVudDtcbiAgICAgICAgICAgIGlmIChlbCAmJiBlbC5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VudGVyID0gZWwuZ2V0Q2VudGVyUG9pbnQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRzKGV2ZW50UG9zaXRpb24sIGNlbnRlcik7XG4gICAgICAgICAgICAgICAgaWYgKGQgPCBtaW5EaXN0YW5jZSkge1xuICAgICAgICAgICAgICAgICAgICBtaW5EaXN0YW5jZSA9IGQ7XG4gICAgICAgICAgICAgICAgICAgIG5lYXJlc3RFbGVtZW50ID0gZWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChuZWFyZXN0RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgdHAgPSBuZWFyZXN0RWxlbWVudC50b29sdGlwUG9zaXRpb24oKTtcbiAgICAgICAgICAgIHggPSB0cC54O1xuICAgICAgICAgICAgeSA9IHRwLnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5XG4gICAgICAgIH07XG4gICAgfVxufTtcbmZ1bmN0aW9uIHB1c2hPckNvbmNhdChiYXNlLCB0b1B1c2gpIHtcbiAgICBpZiAodG9QdXNoKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHRvUHVzaCkpIHtcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGJhc2UsIHRvUHVzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiYXNlLnB1c2godG9QdXNoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbn1cbiBmdW5jdGlvbiBzcGxpdE5ld2xpbmVzKHN0cikge1xuICAgIGlmICgodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgfHwgc3RyIGluc3RhbmNlb2YgU3RyaW5nKSAmJiBzdHIuaW5kZXhPZignXFxuJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gc3RyLnNwbGl0KCdcXG4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn1cbiBmdW5jdGlvbiBjcmVhdGVUb29sdGlwSXRlbShjaGFydCwgaXRlbSkge1xuICAgIGNvbnN0IHsgZWxlbWVudCAsIGRhdGFzZXRJbmRleCAsIGluZGV4ICB9ID0gaXRlbTtcbiAgICBjb25zdCBjb250cm9sbGVyID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KS5jb250cm9sbGVyO1xuICAgIGNvbnN0IHsgbGFiZWwgLCB2YWx1ZSAgfSA9IGNvbnRyb2xsZXIuZ2V0TGFiZWxBbmRWYWx1ZShpbmRleCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2hhcnQsXG4gICAgICAgIGxhYmVsLFxuICAgICAgICBwYXJzZWQ6IGNvbnRyb2xsZXIuZ2V0UGFyc2VkKGluZGV4KSxcbiAgICAgICAgcmF3OiBjaGFydC5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0uZGF0YVtpbmRleF0sXG4gICAgICAgIGZvcm1hdHRlZFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZGF0YXNldDogY29udHJvbGxlci5nZXREYXRhc2V0KCksXG4gICAgICAgIGRhdGFJbmRleDogaW5kZXgsXG4gICAgICAgIGRhdGFzZXRJbmRleCxcbiAgICAgICAgZWxlbWVudFxuICAgIH07XG59XG4gZnVuY3Rpb24gZ2V0VG9vbHRpcFNpemUodG9vbHRpcCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGN0eCA9IHRvb2x0aXAuY2hhcnQuY3R4O1xuICAgIGNvbnN0IHsgYm9keSAsIGZvb3RlciAsIHRpdGxlICB9ID0gdG9vbHRpcDtcbiAgICBjb25zdCB7IGJveFdpZHRoICwgYm94SGVpZ2h0ICB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBib2R5Rm9udCA9IHRvRm9udChvcHRpb25zLmJvZHlGb250KTtcbiAgICBjb25zdCB0aXRsZUZvbnQgPSB0b0ZvbnQob3B0aW9ucy50aXRsZUZvbnQpO1xuICAgIGNvbnN0IGZvb3RlckZvbnQgPSB0b0ZvbnQob3B0aW9ucy5mb290ZXJGb250KTtcbiAgICBjb25zdCB0aXRsZUxpbmVDb3VudCA9IHRpdGxlLmxlbmd0aDtcbiAgICBjb25zdCBmb290ZXJMaW5lQ291bnQgPSBmb290ZXIubGVuZ3RoO1xuICAgIGNvbnN0IGJvZHlMaW5lSXRlbUNvdW50ID0gYm9keS5sZW5ndGg7XG4gICAgY29uc3QgcGFkZGluZyA9IHRvUGFkZGluZyhvcHRpb25zLnBhZGRpbmcpO1xuICAgIGxldCBoZWlnaHQgPSBwYWRkaW5nLmhlaWdodDtcbiAgICBsZXQgd2lkdGggPSAwO1xuICAgIGxldCBjb21iaW5lZEJvZHlMZW5ndGggPSBib2R5LnJlZHVjZSgoY291bnQsIGJvZHlJdGVtKT0+Y291bnQgKyBib2R5SXRlbS5iZWZvcmUubGVuZ3RoICsgYm9keUl0ZW0ubGluZXMubGVuZ3RoICsgYm9keUl0ZW0uYWZ0ZXIubGVuZ3RoLCAwKTtcbiAgICBjb21iaW5lZEJvZHlMZW5ndGggKz0gdG9vbHRpcC5iZWZvcmVCb2R5Lmxlbmd0aCArIHRvb2x0aXAuYWZ0ZXJCb2R5Lmxlbmd0aDtcbiAgICBpZiAodGl0bGVMaW5lQ291bnQpIHtcbiAgICAgICAgaGVpZ2h0ICs9IHRpdGxlTGluZUNvdW50ICogdGl0bGVGb250LmxpbmVIZWlnaHQgKyAodGl0bGVMaW5lQ291bnQgLSAxKSAqIG9wdGlvbnMudGl0bGVTcGFjaW5nICsgb3B0aW9ucy50aXRsZU1hcmdpbkJvdHRvbTtcbiAgICB9XG4gICAgaWYgKGNvbWJpbmVkQm9keUxlbmd0aCkge1xuICAgICAgICBjb25zdCBib2R5TGluZUhlaWdodCA9IG9wdGlvbnMuZGlzcGxheUNvbG9ycyA/IE1hdGgubWF4KGJveEhlaWdodCwgYm9keUZvbnQubGluZUhlaWdodCkgOiBib2R5Rm9udC5saW5lSGVpZ2h0O1xuICAgICAgICBoZWlnaHQgKz0gYm9keUxpbmVJdGVtQ291bnQgKiBib2R5TGluZUhlaWdodCArIChjb21iaW5lZEJvZHlMZW5ndGggLSBib2R5TGluZUl0ZW1Db3VudCkgKiBib2R5Rm9udC5saW5lSGVpZ2h0ICsgKGNvbWJpbmVkQm9keUxlbmd0aCAtIDEpICogb3B0aW9ucy5ib2R5U3BhY2luZztcbiAgICB9XG4gICAgaWYgKGZvb3RlckxpbmVDb3VudCkge1xuICAgICAgICBoZWlnaHQgKz0gb3B0aW9ucy5mb290ZXJNYXJnaW5Ub3AgKyBmb290ZXJMaW5lQ291bnQgKiBmb290ZXJGb250LmxpbmVIZWlnaHQgKyAoZm9vdGVyTGluZUNvdW50IC0gMSkgKiBvcHRpb25zLmZvb3RlclNwYWNpbmc7XG4gICAgfVxuICAgIGxldCB3aWR0aFBhZGRpbmcgPSAwO1xuICAgIGNvbnN0IG1heExpbmVXaWR0aCA9IGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgY3R4Lm1lYXN1cmVUZXh0KGxpbmUpLndpZHRoICsgd2lkdGhQYWRkaW5nKTtcbiAgICB9O1xuICAgIGN0eC5zYXZlKCk7XG4gICAgY3R4LmZvbnQgPSB0aXRsZUZvbnQuc3RyaW5nO1xuICAgIGVhY2godG9vbHRpcC50aXRsZSwgbWF4TGluZVdpZHRoKTtcbiAgICBjdHguZm9udCA9IGJvZHlGb250LnN0cmluZztcbiAgICBlYWNoKHRvb2x0aXAuYmVmb3JlQm9keS5jb25jYXQodG9vbHRpcC5hZnRlckJvZHkpLCBtYXhMaW5lV2lkdGgpO1xuICAgIHdpZHRoUGFkZGluZyA9IG9wdGlvbnMuZGlzcGxheUNvbG9ycyA/IGJveFdpZHRoICsgMiArIG9wdGlvbnMuYm94UGFkZGluZyA6IDA7XG4gICAgZWFjaChib2R5LCAoYm9keUl0ZW0pPT57XG4gICAgICAgIGVhY2goYm9keUl0ZW0uYmVmb3JlLCBtYXhMaW5lV2lkdGgpO1xuICAgICAgICBlYWNoKGJvZHlJdGVtLmxpbmVzLCBtYXhMaW5lV2lkdGgpO1xuICAgICAgICBlYWNoKGJvZHlJdGVtLmFmdGVyLCBtYXhMaW5lV2lkdGgpO1xuICAgIH0pO1xuICAgIHdpZHRoUGFkZGluZyA9IDA7XG4gICAgY3R4LmZvbnQgPSBmb290ZXJGb250LnN0cmluZztcbiAgICBlYWNoKHRvb2x0aXAuZm9vdGVyLCBtYXhMaW5lV2lkdGgpO1xuICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgd2lkdGggKz0gcGFkZGluZy53aWR0aDtcbiAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGRldGVybWluZVlBbGlnbihjaGFydCwgc2l6ZSkge1xuICAgIGNvbnN0IHsgeSAsIGhlaWdodCAgfSA9IHNpemU7XG4gICAgaWYgKHkgPCBoZWlnaHQgLyAyKSB7XG4gICAgICAgIHJldHVybiAndG9wJztcbiAgICB9IGVsc2UgaWYgKHkgPiBjaGFydC5oZWlnaHQgLSBoZWlnaHQgLyAyKSB7XG4gICAgICAgIHJldHVybiAnYm90dG9tJztcbiAgICB9XG4gICAgcmV0dXJuICdjZW50ZXInO1xufVxuZnVuY3Rpb24gZG9lc05vdEZpdFdpdGhBbGlnbih4QWxpZ24sIGNoYXJ0LCBvcHRpb25zLCBzaXplKSB7XG4gICAgY29uc3QgeyB4ICwgd2lkdGggIH0gPSBzaXplO1xuICAgIGNvbnN0IGNhcmV0ID0gb3B0aW9ucy5jYXJldFNpemUgKyBvcHRpb25zLmNhcmV0UGFkZGluZztcbiAgICBpZiAoeEFsaWduID09PSAnbGVmdCcgJiYgeCArIHdpZHRoICsgY2FyZXQgPiBjaGFydC53aWR0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHhBbGlnbiA9PT0gJ3JpZ2h0JyAmJiB4IC0gd2lkdGggLSBjYXJldCA8IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuZnVuY3Rpb24gZGV0ZXJtaW5lWEFsaWduKGNoYXJ0LCBvcHRpb25zLCBzaXplLCB5QWxpZ24pIHtcbiAgICBjb25zdCB7IHggLCB3aWR0aCAgfSA9IHNpemU7XG4gICAgY29uc3QgeyB3aWR0aDogY2hhcnRXaWR0aCAsIGNoYXJ0QXJlYTogeyBsZWZ0ICwgcmlnaHQgIH0gIH0gPSBjaGFydDtcbiAgICBsZXQgeEFsaWduID0gJ2NlbnRlcic7XG4gICAgaWYgKHlBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgeEFsaWduID0geCA8PSAobGVmdCArIHJpZ2h0KSAvIDIgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgIH0gZWxzZSBpZiAoeCA8PSB3aWR0aCAvIDIpIHtcbiAgICAgICAgeEFsaWduID0gJ2xlZnQnO1xuICAgIH0gZWxzZSBpZiAoeCA+PSBjaGFydFdpZHRoIC0gd2lkdGggLyAyKSB7XG4gICAgICAgIHhBbGlnbiA9ICdyaWdodCc7XG4gICAgfVxuICAgIGlmIChkb2VzTm90Rml0V2l0aEFsaWduKHhBbGlnbiwgY2hhcnQsIG9wdGlvbnMsIHNpemUpKSB7XG4gICAgICAgIHhBbGlnbiA9ICdjZW50ZXInO1xuICAgIH1cbiAgICByZXR1cm4geEFsaWduO1xufVxuIGZ1bmN0aW9uIGRldGVybWluZUFsaWdubWVudChjaGFydCwgb3B0aW9ucywgc2l6ZSkge1xuICAgIGNvbnN0IHlBbGlnbiA9IHNpemUueUFsaWduIHx8IG9wdGlvbnMueUFsaWduIHx8IGRldGVybWluZVlBbGlnbihjaGFydCwgc2l6ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeEFsaWduOiBzaXplLnhBbGlnbiB8fCBvcHRpb25zLnhBbGlnbiB8fCBkZXRlcm1pbmVYQWxpZ24oY2hhcnQsIG9wdGlvbnMsIHNpemUsIHlBbGlnbiksXG4gICAgICAgIHlBbGlnblxuICAgIH07XG59XG5mdW5jdGlvbiBhbGlnblgoc2l6ZSwgeEFsaWduKSB7XG4gICAgbGV0IHsgeCAsIHdpZHRoICB9ID0gc2l6ZTtcbiAgICBpZiAoeEFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICAgIHggLT0gd2lkdGg7XG4gICAgfSBlbHNlIGlmICh4QWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgIHggLT0gd2lkdGggLyAyO1xuICAgIH1cbiAgICByZXR1cm4geDtcbn1cbmZ1bmN0aW9uIGFsaWduWShzaXplLCB5QWxpZ24sIHBhZGRpbmdBbmRTaXplKSB7XG4gICAgbGV0IHsgeSAsIGhlaWdodCAgfSA9IHNpemU7XG4gICAgaWYgKHlBbGlnbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgeSArPSBwYWRkaW5nQW5kU2l6ZTtcbiAgICB9IGVsc2UgaWYgKHlBbGlnbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgeSAtPSBoZWlnaHQgKyBwYWRkaW5nQW5kU2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB5IC09IGhlaWdodCAvIDI7XG4gICAgfVxuICAgIHJldHVybiB5O1xufVxuIGZ1bmN0aW9uIGdldEJhY2tncm91bmRQb2ludChvcHRpb25zLCBzaXplLCBhbGlnbm1lbnQsIGNoYXJ0KSB7XG4gICAgY29uc3QgeyBjYXJldFNpemUgLCBjYXJldFBhZGRpbmcgLCBjb3JuZXJSYWRpdXMgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHsgeEFsaWduICwgeUFsaWduICB9ID0gYWxpZ25tZW50O1xuICAgIGNvbnN0IHBhZGRpbmdBbmRTaXplID0gY2FyZXRTaXplICsgY2FyZXRQYWRkaW5nO1xuICAgIGNvbnN0IHsgdG9wTGVmdCAsIHRvcFJpZ2h0ICwgYm90dG9tTGVmdCAsIGJvdHRvbVJpZ2h0ICB9ID0gdG9UUkJMQ29ybmVycyhjb3JuZXJSYWRpdXMpO1xuICAgIGxldCB4ID0gYWxpZ25YKHNpemUsIHhBbGlnbik7XG4gICAgY29uc3QgeSA9IGFsaWduWShzaXplLCB5QWxpZ24sIHBhZGRpbmdBbmRTaXplKTtcbiAgICBpZiAoeUFsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICBpZiAoeEFsaWduID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHggKz0gcGFkZGluZ0FuZFNpemU7XG4gICAgICAgIH0gZWxzZSBpZiAoeEFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICB4IC09IHBhZGRpbmdBbmRTaXplO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh4QWxpZ24gPT09ICdsZWZ0Jykge1xuICAgICAgICB4IC09IE1hdGgubWF4KHRvcExlZnQsIGJvdHRvbUxlZnQpICsgY2FyZXRTaXplO1xuICAgIH0gZWxzZSBpZiAoeEFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICAgIHggKz0gTWF0aC5tYXgodG9wUmlnaHQsIGJvdHRvbVJpZ2h0KSArIGNhcmV0U2l6ZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogX2xpbWl0VmFsdWUoeCwgMCwgY2hhcnQud2lkdGggLSBzaXplLndpZHRoKSxcbiAgICAgICAgeTogX2xpbWl0VmFsdWUoeSwgMCwgY2hhcnQuaGVpZ2h0IC0gc2l6ZS5oZWlnaHQpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldEFsaWduZWRYKHRvb2x0aXAsIGFsaWduLCBvcHRpb25zKSB7XG4gICAgY29uc3QgcGFkZGluZyA9IHRvUGFkZGluZyhvcHRpb25zLnBhZGRpbmcpO1xuICAgIHJldHVybiBhbGlnbiA9PT0gJ2NlbnRlcicgPyB0b29sdGlwLnggKyB0b29sdGlwLndpZHRoIC8gMiA6IGFsaWduID09PSAncmlnaHQnID8gdG9vbHRpcC54ICsgdG9vbHRpcC53aWR0aCAtIHBhZGRpbmcucmlnaHQgOiB0b29sdGlwLnggKyBwYWRkaW5nLmxlZnQ7XG59XG4gZnVuY3Rpb24gZ2V0QmVmb3JlQWZ0ZXJCb2R5TGluZXMoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gcHVzaE9yQ29uY2F0KFtdLCBzcGxpdE5ld2xpbmVzKGNhbGxiYWNrKSk7XG59XG5mdW5jdGlvbiBjcmVhdGVUb29sdGlwQ29udGV4dChwYXJlbnQsIHRvb2x0aXAsIHRvb2x0aXBJdGVtcykge1xuICAgIHJldHVybiBjcmVhdGVDb250ZXh0KHBhcmVudCwge1xuICAgICAgICB0b29sdGlwLFxuICAgICAgICB0b29sdGlwSXRlbXMsXG4gICAgICAgIHR5cGU6ICd0b29sdGlwJ1xuICAgIH0pO1xufVxuZnVuY3Rpb24gb3ZlcnJpZGVDYWxsYmFja3MoY2FsbGJhY2tzLCBjb250ZXh0KSB7XG4gICAgY29uc3Qgb3ZlcnJpZGUgPSBjb250ZXh0ICYmIGNvbnRleHQuZGF0YXNldCAmJiBjb250ZXh0LmRhdGFzZXQudG9vbHRpcCAmJiBjb250ZXh0LmRhdGFzZXQudG9vbHRpcC5jYWxsYmFja3M7XG4gICAgcmV0dXJuIG92ZXJyaWRlID8gY2FsbGJhY2tzLm92ZXJyaWRlKG92ZXJyaWRlKSA6IGNhbGxiYWNrcztcbn1cbmNvbnN0IGRlZmF1bHRDYWxsYmFja3MgPSB7XG4gICAgYmVmb3JlVGl0bGU6IG5vb3AsXG4gICAgdGl0bGUgKHRvb2x0aXBJdGVtcykge1xuICAgICAgICBpZiAodG9vbHRpcEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0b29sdGlwSXRlbXNbMF07XG4gICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBpdGVtLmNoYXJ0LmRhdGEubGFiZWxzO1xuICAgICAgICAgICAgY29uc3QgbGFiZWxDb3VudCA9IGxhYmVscyA/IGxhYmVscy5sZW5ndGggOiAwO1xuICAgICAgICAgICAgaWYgKHRoaXMgJiYgdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5tb2RlID09PSAnZGF0YXNldCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5kYXRhc2V0LmxhYmVsIHx8ICcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubGFiZWw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhYmVsQ291bnQgPiAwICYmIGl0ZW0uZGF0YUluZGV4IDwgbGFiZWxDb3VudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbHNbaXRlbS5kYXRhSW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9LFxuICAgIGFmdGVyVGl0bGU6IG5vb3AsXG4gICAgYmVmb3JlQm9keTogbm9vcCxcbiAgICBiZWZvcmVMYWJlbDogbm9vcCxcbiAgICBsYWJlbCAodG9vbHRpcEl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMgJiYgdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5tb2RlID09PSAnZGF0YXNldCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0b29sdGlwSXRlbS5sYWJlbCArICc6ICcgKyB0b29sdGlwSXRlbS5mb3JtYXR0ZWRWYWx1ZSB8fCB0b29sdGlwSXRlbS5mb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGFiZWwgPSB0b29sdGlwSXRlbS5kYXRhc2V0LmxhYmVsIHx8ICcnO1xuICAgICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgICAgIGxhYmVsICs9ICc6ICc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWUgPSB0b29sdGlwSXRlbS5mb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmKHZhbHVlKSkge1xuICAgICAgICAgICAgbGFiZWwgKz0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhYmVsO1xuICAgIH0sXG4gICAgbGFiZWxDb2xvciAodG9vbHRpcEl0ZW0pIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRvb2x0aXBJdGVtLmNoYXJ0LmdldERhdGFzZXRNZXRhKHRvb2x0aXBJdGVtLmRhdGFzZXRJbmRleCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBtZXRhLmNvbnRyb2xsZXIuZ2V0U3R5bGUodG9vbHRpcEl0ZW0uZGF0YUluZGV4KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiBvcHRpb25zLmJvcmRlckNvbG9yLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBvcHRpb25zLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgIGJvcmRlcldpZHRoOiBvcHRpb25zLmJvcmRlcldpZHRoLFxuICAgICAgICAgICAgYm9yZGVyRGFzaDogb3B0aW9ucy5ib3JkZXJEYXNoLFxuICAgICAgICAgICAgYm9yZGVyRGFzaE9mZnNldDogb3B0aW9ucy5ib3JkZXJEYXNoT2Zmc2V0LFxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAwXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBsYWJlbFRleHRDb2xvciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYm9keUNvbG9yO1xuICAgIH0sXG4gICAgbGFiZWxQb2ludFN0eWxlICh0b29sdGlwSXRlbSkge1xuICAgICAgICBjb25zdCBtZXRhID0gdG9vbHRpcEl0ZW0uY2hhcnQuZ2V0RGF0YXNldE1ldGEodG9vbHRpcEl0ZW0uZGF0YXNldEluZGV4KTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG1ldGEuY29udHJvbGxlci5nZXRTdHlsZSh0b29sdGlwSXRlbS5kYXRhSW5kZXgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9pbnRTdHlsZTogb3B0aW9ucy5wb2ludFN0eWxlLFxuICAgICAgICAgICAgcm90YXRpb246IG9wdGlvbnMucm90YXRpb25cbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGFmdGVyTGFiZWw6IG5vb3AsXG4gICAgYWZ0ZXJCb2R5OiBub29wLFxuICAgIGJlZm9yZUZvb3Rlcjogbm9vcCxcbiAgICBmb290ZXI6IG5vb3AsXG4gICAgYWZ0ZXJGb290ZXI6IG5vb3Bcbn07XG4gZnVuY3Rpb24gaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2soY2FsbGJhY2tzLCBuYW1lLCBjdHgsIGFyZykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGxiYWNrc1tuYW1lXS5jYWxsKGN0eCwgYXJnKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRDYWxsYmFja3NbbmFtZV0uY2FsbChjdHgsIGFyZyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5jbGFzcyBUb29sdGlwIGV4dGVuZHMgRWxlbWVudCB7XG4gc3RhdGljIHBvc2l0aW9uZXJzID0gcG9zaXRpb25lcnM7XG4gICAgY29uc3RydWN0b3IoY29uZmlnKXtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcGFjaXR5ID0gMDtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gW107XG4gICAgICAgIHRoaXMuX2V2ZW50UG9zaXRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3NpemUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2NhY2hlZEFuaW1hdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3Rvb2x0aXBJdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLiRhbmltYXRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLiRjb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmNoYXJ0ID0gY29uZmlnLmNoYXJ0O1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBjb25maWcub3B0aW9ucztcbiAgICAgICAgdGhpcy5kYXRhUG9pbnRzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnRpdGxlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmJlZm9yZUJvZHkgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYm9keSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5hZnRlckJvZHkgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZm9vdGVyID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnhBbGlnbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy55QWxpZ24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMueCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy55ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy53aWR0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jYXJldFggPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY2FyZXRZID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmxhYmVsQ29sb3JzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmxhYmVsUG9pbnRTdHlsZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubGFiZWxUZXh0Q29sb3JzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpbml0aWFsaXplKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5fY2FjaGVkQW5pbWF0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy4kY29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gX3Jlc29sdmVBbmltYXRpb25zKCkge1xuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLl9jYWNoZWRBbmltYXRpb25zO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG9wdGlvbnMuZW5hYmxlZCAmJiBjaGFydC5vcHRpb25zLmFuaW1hdGlvbiAmJiBvcHRpb25zLmFuaW1hdGlvbnM7XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbnMgPSBuZXcgQW5pbWF0aW9ucyh0aGlzLmNoYXJ0LCBvcHRzKTtcbiAgICAgICAgaWYgKG9wdHMuX2NhY2hlYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5fY2FjaGVkQW5pbWF0aW9ucyA9IE9iamVjdC5mcmVlemUoYW5pbWF0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFuaW1hdGlvbnM7XG4gICAgfVxuIGdldENvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRjb250ZXh0IHx8ICh0aGlzLiRjb250ZXh0ID0gY3JlYXRlVG9vbHRpcENvbnRleHQodGhpcy5jaGFydC5nZXRDb250ZXh0KCksIHRoaXMsIHRoaXMuX3Rvb2x0aXBJdGVtcykpO1xuICAgIH1cbiAgICBnZXRUaXRsZShjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzICB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgYmVmb3JlVGl0bGUgPSBpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayhjYWxsYmFja3MsICdiZWZvcmVUaXRsZScsIHRoaXMsIGNvbnRleHQpO1xuICAgICAgICBjb25zdCB0aXRsZSA9IGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKGNhbGxiYWNrcywgJ3RpdGxlJywgdGhpcywgY29udGV4dCk7XG4gICAgICAgIGNvbnN0IGFmdGVyVGl0bGUgPSBpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayhjYWxsYmFja3MsICdhZnRlclRpdGxlJywgdGhpcywgY29udGV4dCk7XG4gICAgICAgIGxldCBsaW5lcyA9IFtdO1xuICAgICAgICBsaW5lcyA9IHB1c2hPckNvbmNhdChsaW5lcywgc3BsaXROZXdsaW5lcyhiZWZvcmVUaXRsZSkpO1xuICAgICAgICBsaW5lcyA9IHB1c2hPckNvbmNhdChsaW5lcywgc3BsaXROZXdsaW5lcyh0aXRsZSkpO1xuICAgICAgICBsaW5lcyA9IHB1c2hPckNvbmNhdChsaW5lcywgc3BsaXROZXdsaW5lcyhhZnRlclRpdGxlKSk7XG4gICAgICAgIHJldHVybiBsaW5lcztcbiAgICB9XG4gICAgZ2V0QmVmb3JlQm9keSh0b29sdGlwSXRlbXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGdldEJlZm9yZUFmdGVyQm9keUxpbmVzKGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKG9wdGlvbnMuY2FsbGJhY2tzLCAnYmVmb3JlQm9keScsIHRoaXMsIHRvb2x0aXBJdGVtcykpO1xuICAgIH1cbiAgICBnZXRCb2R5KHRvb2x0aXBJdGVtcywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGJvZHlJdGVtcyA9IFtdO1xuICAgICAgICBlYWNoKHRvb2x0aXBJdGVtcywgKGNvbnRleHQpPT57XG4gICAgICAgICAgICBjb25zdCBib2R5SXRlbSA9IHtcbiAgICAgICAgICAgICAgICBiZWZvcmU6IFtdLFxuICAgICAgICAgICAgICAgIGxpbmVzOiBbXSxcbiAgICAgICAgICAgICAgICBhZnRlcjogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBzY29wZWQgPSBvdmVycmlkZUNhbGxiYWNrcyhjYWxsYmFja3MsIGNvbnRleHQpO1xuICAgICAgICAgICAgcHVzaE9yQ29uY2F0KGJvZHlJdGVtLmJlZm9yZSwgc3BsaXROZXdsaW5lcyhpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayhzY29wZWQsICdiZWZvcmVMYWJlbCcsIHRoaXMsIGNvbnRleHQpKSk7XG4gICAgICAgICAgICBwdXNoT3JDb25jYXQoYm9keUl0ZW0ubGluZXMsIGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKHNjb3BlZCwgJ2xhYmVsJywgdGhpcywgY29udGV4dCkpO1xuICAgICAgICAgICAgcHVzaE9yQ29uY2F0KGJvZHlJdGVtLmFmdGVyLCBzcGxpdE5ld2xpbmVzKGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKHNjb3BlZCwgJ2FmdGVyTGFiZWwnLCB0aGlzLCBjb250ZXh0KSkpO1xuICAgICAgICAgICAgYm9keUl0ZW1zLnB1c2goYm9keUl0ZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGJvZHlJdGVtcztcbiAgICB9XG4gICAgZ2V0QWZ0ZXJCb2R5KHRvb2x0aXBJdGVtcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gZ2V0QmVmb3JlQWZ0ZXJCb2R5TGluZXMoaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2sob3B0aW9ucy5jYWxsYmFja3MsICdhZnRlckJvZHknLCB0aGlzLCB0b29sdGlwSXRlbXMpKTtcbiAgICB9XG4gICAgZ2V0Rm9vdGVyKHRvb2x0aXBJdGVtcywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGJlZm9yZUZvb3RlciA9IGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKGNhbGxiYWNrcywgJ2JlZm9yZUZvb3RlcicsIHRoaXMsIHRvb2x0aXBJdGVtcyk7XG4gICAgICAgIGNvbnN0IGZvb3RlciA9IGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKGNhbGxiYWNrcywgJ2Zvb3RlcicsIHRoaXMsIHRvb2x0aXBJdGVtcyk7XG4gICAgICAgIGNvbnN0IGFmdGVyRm9vdGVyID0gaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2soY2FsbGJhY2tzLCAnYWZ0ZXJGb290ZXInLCB0aGlzLCB0b29sdGlwSXRlbXMpO1xuICAgICAgICBsZXQgbGluZXMgPSBbXTtcbiAgICAgICAgbGluZXMgPSBwdXNoT3JDb25jYXQobGluZXMsIHNwbGl0TmV3bGluZXMoYmVmb3JlRm9vdGVyKSk7XG4gICAgICAgIGxpbmVzID0gcHVzaE9yQ29uY2F0KGxpbmVzLCBzcGxpdE5ld2xpbmVzKGZvb3RlcikpO1xuICAgICAgICBsaW5lcyA9IHB1c2hPckNvbmNhdChsaW5lcywgc3BsaXROZXdsaW5lcyhhZnRlckZvb3RlcikpO1xuICAgICAgICByZXR1cm4gbGluZXM7XG4gICAgfVxuIF9jcmVhdGVJdGVtcyhvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuX2FjdGl2ZTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuY2hhcnQuZGF0YTtcbiAgICAgICAgY29uc3QgbGFiZWxDb2xvcnMgPSBbXTtcbiAgICAgICAgY29uc3QgbGFiZWxQb2ludFN0eWxlcyA9IFtdO1xuICAgICAgICBjb25zdCBsYWJlbFRleHRDb2xvcnMgPSBbXTtcbiAgICAgICAgbGV0IHRvb2x0aXBJdGVtcyA9IFtdO1xuICAgICAgICBsZXQgaSwgbGVuO1xuICAgICAgICBmb3IoaSA9IDAsIGxlbiA9IGFjdGl2ZS5sZW5ndGg7IGkgPCBsZW47ICsraSl7XG4gICAgICAgICAgICB0b29sdGlwSXRlbXMucHVzaChjcmVhdGVUb29sdGlwSXRlbSh0aGlzLmNoYXJ0LCBhY3RpdmVbaV0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRvb2x0aXBJdGVtcyA9IHRvb2x0aXBJdGVtcy5maWx0ZXIoKGVsZW1lbnQsIGluZGV4LCBhcnJheSk9Pm9wdGlvbnMuZmlsdGVyKGVsZW1lbnQsIGluZGV4LCBhcnJheSwgZGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLml0ZW1Tb3J0KSB7XG4gICAgICAgICAgICB0b29sdGlwSXRlbXMgPSB0b29sdGlwSXRlbXMuc29ydCgoYSwgYik9Pm9wdGlvbnMuaXRlbVNvcnQoYSwgYiwgZGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGVhY2godG9vbHRpcEl0ZW1zLCAoY29udGV4dCk9PntcbiAgICAgICAgICAgIGNvbnN0IHNjb3BlZCA9IG92ZXJyaWRlQ2FsbGJhY2tzKG9wdGlvbnMuY2FsbGJhY2tzLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGxhYmVsQ29sb3JzLnB1c2goaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2soc2NvcGVkLCAnbGFiZWxDb2xvcicsIHRoaXMsIGNvbnRleHQpKTtcbiAgICAgICAgICAgIGxhYmVsUG9pbnRTdHlsZXMucHVzaChpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayhzY29wZWQsICdsYWJlbFBvaW50U3R5bGUnLCB0aGlzLCBjb250ZXh0KSk7XG4gICAgICAgICAgICBsYWJlbFRleHRDb2xvcnMucHVzaChpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayhzY29wZWQsICdsYWJlbFRleHRDb2xvcicsIHRoaXMsIGNvbnRleHQpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubGFiZWxDb2xvcnMgPSBsYWJlbENvbG9ycztcbiAgICAgICAgdGhpcy5sYWJlbFBvaW50U3R5bGVzID0gbGFiZWxQb2ludFN0eWxlcztcbiAgICAgICAgdGhpcy5sYWJlbFRleHRDb2xvcnMgPSBsYWJlbFRleHRDb2xvcnM7XG4gICAgICAgIHRoaXMuZGF0YVBvaW50cyA9IHRvb2x0aXBJdGVtcztcbiAgICAgICAgcmV0dXJuIHRvb2x0aXBJdGVtcztcbiAgICB9XG4gICAgdXBkYXRlKGNoYW5nZWQsIHJlcGxheSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpO1xuICAgICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLl9hY3RpdmU7XG4gICAgICAgIGxldCBwcm9wZXJ0aWVzO1xuICAgICAgICBsZXQgdG9vbHRpcEl0ZW1zID0gW107XG4gICAgICAgIGlmICghYWN0aXZlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMub3BhY2l0eSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbmVyc1tvcHRpb25zLnBvc2l0aW9uXS5jYWxsKHRoaXMsIGFjdGl2ZSwgdGhpcy5fZXZlbnRQb3NpdGlvbik7XG4gICAgICAgICAgICB0b29sdGlwSXRlbXMgPSB0aGlzLl9jcmVhdGVJdGVtcyhvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMudGl0bGUgPSB0aGlzLmdldFRpdGxlKHRvb2x0aXBJdGVtcywgb3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLmJlZm9yZUJvZHkgPSB0aGlzLmdldEJlZm9yZUJvZHkodG9vbHRpcEl0ZW1zLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IHRoaXMuZ2V0Qm9keSh0b29sdGlwSXRlbXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5hZnRlckJvZHkgPSB0aGlzLmdldEFmdGVyQm9keSh0b29sdGlwSXRlbXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5mb290ZXIgPSB0aGlzLmdldEZvb3Rlcih0b29sdGlwSXRlbXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuX3NpemUgPSBnZXRUb29sdGlwU2l6ZSh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uQW5kU2l6ZSA9IE9iamVjdC5hc3NpZ24oe30sIHBvc2l0aW9uLCBzaXplKTtcbiAgICAgICAgICAgIGNvbnN0IGFsaWdubWVudCA9IGRldGVybWluZUFsaWdubWVudCh0aGlzLmNoYXJ0LCBvcHRpb25zLCBwb3NpdGlvbkFuZFNpemUpO1xuICAgICAgICAgICAgY29uc3QgYmFja2dyb3VuZFBvaW50ID0gZ2V0QmFja2dyb3VuZFBvaW50KG9wdGlvbnMsIHBvc2l0aW9uQW5kU2l6ZSwgYWxpZ25tZW50LCB0aGlzLmNoYXJ0KTtcbiAgICAgICAgICAgIHRoaXMueEFsaWduID0gYWxpZ25tZW50LnhBbGlnbjtcbiAgICAgICAgICAgIHRoaXMueUFsaWduID0gYWxpZ25tZW50LnlBbGlnbjtcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgICAgICB4OiBiYWNrZ3JvdW5kUG9pbnQueCxcbiAgICAgICAgICAgICAgICB5OiBiYWNrZ3JvdW5kUG9pbnQueSxcbiAgICAgICAgICAgICAgICB3aWR0aDogc2l6ZS53aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHNpemUuaGVpZ2h0LFxuICAgICAgICAgICAgICAgIGNhcmV0WDogcG9zaXRpb24ueCxcbiAgICAgICAgICAgICAgICBjYXJldFk6IHBvc2l0aW9uLnlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdG9vbHRpcEl0ZW1zID0gdG9vbHRpcEl0ZW1zO1xuICAgICAgICB0aGlzLiRjb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZUFuaW1hdGlvbnMoKS51cGRhdGUodGhpcywgcHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZWQgJiYgb3B0aW9ucy5leHRlcm5hbCkge1xuICAgICAgICAgICAgb3B0aW9ucy5leHRlcm5hbC5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgICAgICBjaGFydDogdGhpcy5jaGFydCxcbiAgICAgICAgICAgICAgICB0b29sdGlwOiB0aGlzLFxuICAgICAgICAgICAgICAgIHJlcGxheVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZHJhd0NhcmV0KHRvb2x0aXBQb2ludCwgY3R4LCBzaXplLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGNhcmV0UG9zaXRpb24gPSB0aGlzLmdldENhcmV0UG9zaXRpb24odG9vbHRpcFBvaW50LCBzaXplLCBvcHRpb25zKTtcbiAgICAgICAgY3R4LmxpbmVUbyhjYXJldFBvc2l0aW9uLngxLCBjYXJldFBvc2l0aW9uLnkxKTtcbiAgICAgICAgY3R4LmxpbmVUbyhjYXJldFBvc2l0aW9uLngyLCBjYXJldFBvc2l0aW9uLnkyKTtcbiAgICAgICAgY3R4LmxpbmVUbyhjYXJldFBvc2l0aW9uLngzLCBjYXJldFBvc2l0aW9uLnkzKTtcbiAgICB9XG4gICAgZ2V0Q2FyZXRQb3NpdGlvbih0b29sdGlwUG9pbnQsIHNpemUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyB4QWxpZ24gLCB5QWxpZ24gIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IGNhcmV0U2l6ZSAsIGNvcm5lclJhZGl1cyAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHsgdG9wTGVmdCAsIHRvcFJpZ2h0ICwgYm90dG9tTGVmdCAsIGJvdHRvbVJpZ2h0ICB9ID0gdG9UUkJMQ29ybmVycyhjb3JuZXJSYWRpdXMpO1xuICAgICAgICBjb25zdCB7IHg6IHB0WCAsIHk6IHB0WSAgfSA9IHRvb2x0aXBQb2ludDtcbiAgICAgICAgY29uc3QgeyB3aWR0aCAsIGhlaWdodCAgfSA9IHNpemU7XG4gICAgICAgIGxldCB4MSwgeDIsIHgzLCB5MSwgeTIsIHkzO1xuICAgICAgICBpZiAoeUFsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgeTIgPSBwdFkgKyBoZWlnaHQgLyAyO1xuICAgICAgICAgICAgaWYgKHhBbGlnbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICAgICAgeDEgPSBwdFg7XG4gICAgICAgICAgICAgICAgeDIgPSB4MSAtIGNhcmV0U2l6ZTtcbiAgICAgICAgICAgICAgICB5MSA9IHkyICsgY2FyZXRTaXplO1xuICAgICAgICAgICAgICAgIHkzID0geTIgLSBjYXJldFNpemU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHgxID0gcHRYICsgd2lkdGg7XG4gICAgICAgICAgICAgICAgeDIgPSB4MSArIGNhcmV0U2l6ZTtcbiAgICAgICAgICAgICAgICB5MSA9IHkyIC0gY2FyZXRTaXplO1xuICAgICAgICAgICAgICAgIHkzID0geTIgKyBjYXJldFNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4MyA9IHgxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHhBbGlnbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICAgICAgeDIgPSBwdFggKyBNYXRoLm1heCh0b3BMZWZ0LCBib3R0b21MZWZ0KSArIGNhcmV0U2l6ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeEFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICAgICAgeDIgPSBwdFggKyB3aWR0aCAtIE1hdGgubWF4KHRvcFJpZ2h0LCBib3R0b21SaWdodCkgLSBjYXJldFNpemU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHgyID0gdGhpcy5jYXJldFg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeUFsaWduID09PSAndG9wJykge1xuICAgICAgICAgICAgICAgIHkxID0gcHRZO1xuICAgICAgICAgICAgICAgIHkyID0geTEgLSBjYXJldFNpemU7XG4gICAgICAgICAgICAgICAgeDEgPSB4MiAtIGNhcmV0U2l6ZTtcbiAgICAgICAgICAgICAgICB4MyA9IHgyICsgY2FyZXRTaXplO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB5MSA9IHB0WSArIGhlaWdodDtcbiAgICAgICAgICAgICAgICB5MiA9IHkxICsgY2FyZXRTaXplO1xuICAgICAgICAgICAgICAgIHgxID0geDIgKyBjYXJldFNpemU7XG4gICAgICAgICAgICAgICAgeDMgPSB4MiAtIGNhcmV0U2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHkzID0geTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHgxLFxuICAgICAgICAgICAgeDIsXG4gICAgICAgICAgICB4MyxcbiAgICAgICAgICAgIHkxLFxuICAgICAgICAgICAgeTIsXG4gICAgICAgICAgICB5M1xuICAgICAgICB9O1xuICAgIH1cbiAgICBkcmF3VGl0bGUocHQsIGN0eCwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMudGl0bGU7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRpdGxlLmxlbmd0aDtcbiAgICAgICAgbGV0IHRpdGxlRm9udCwgdGl0bGVTcGFjaW5nLCBpO1xuICAgICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBydGxIZWxwZXIgPSBnZXRSdGxBZGFwdGVyKG9wdGlvbnMucnRsLCB0aGlzLngsIHRoaXMud2lkdGgpO1xuICAgICAgICAgICAgcHQueCA9IGdldEFsaWduZWRYKHRoaXMsIG9wdGlvbnMudGl0bGVBbGlnbiwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjdHgudGV4dEFsaWduID0gcnRsSGVscGVyLnRleHRBbGlnbihvcHRpb25zLnRpdGxlQWxpZ24pO1xuICAgICAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuICAgICAgICAgICAgdGl0bGVGb250ID0gdG9Gb250KG9wdGlvbnMudGl0bGVGb250KTtcbiAgICAgICAgICAgIHRpdGxlU3BhY2luZyA9IG9wdGlvbnMudGl0bGVTcGFjaW5nO1xuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdGlvbnMudGl0bGVDb2xvcjtcbiAgICAgICAgICAgIGN0eC5mb250ID0gdGl0bGVGb250LnN0cmluZztcbiAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IGxlbmd0aDsgKytpKXtcbiAgICAgICAgICAgICAgICBjdHguZmlsbFRleHQodGl0bGVbaV0sIHJ0bEhlbHBlci54KHB0LngpLCBwdC55ICsgdGl0bGVGb250LmxpbmVIZWlnaHQgLyAyKTtcbiAgICAgICAgICAgICAgICBwdC55ICs9IHRpdGxlRm9udC5saW5lSGVpZ2h0ICsgdGl0bGVTcGFjaW5nO1xuICAgICAgICAgICAgICAgIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHB0LnkgKz0gb3B0aW9ucy50aXRsZU1hcmdpbkJvdHRvbSAtIHRpdGxlU3BhY2luZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gX2RyYXdDb2xvckJveChjdHgsIHB0LCBpLCBydGxIZWxwZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgbGFiZWxDb2xvciA9IHRoaXMubGFiZWxDb2xvcnNbaV07XG4gICAgICAgIGNvbnN0IGxhYmVsUG9pbnRTdHlsZSA9IHRoaXMubGFiZWxQb2ludFN0eWxlc1tpXTtcbiAgICAgICAgY29uc3QgeyBib3hIZWlnaHQgLCBib3hXaWR0aCAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGJvZHlGb250ID0gdG9Gb250KG9wdGlvbnMuYm9keUZvbnQpO1xuICAgICAgICBjb25zdCBjb2xvclggPSBnZXRBbGlnbmVkWCh0aGlzLCAnbGVmdCcsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBydGxDb2xvclggPSBydGxIZWxwZXIueChjb2xvclgpO1xuICAgICAgICBjb25zdCB5T2ZmU2V0ID0gYm94SGVpZ2h0IDwgYm9keUZvbnQubGluZUhlaWdodCA/IChib2R5Rm9udC5saW5lSGVpZ2h0IC0gYm94SGVpZ2h0KSAvIDIgOiAwO1xuICAgICAgICBjb25zdCBjb2xvclkgPSBwdC55ICsgeU9mZlNldDtcbiAgICAgICAgaWYgKG9wdGlvbnMudXNlUG9pbnRTdHlsZSkge1xuICAgICAgICAgICAgY29uc3QgZHJhd09wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgcmFkaXVzOiBNYXRoLm1pbihib3hXaWR0aCwgYm94SGVpZ2h0KSAvIDIsXG4gICAgICAgICAgICAgICAgcG9pbnRTdHlsZTogbGFiZWxQb2ludFN0eWxlLnBvaW50U3R5bGUsXG4gICAgICAgICAgICAgICAgcm90YXRpb246IGxhYmVsUG9pbnRTdHlsZS5yb3RhdGlvbixcbiAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlclggPSBydGxIZWxwZXIubGVmdEZvckx0cihydGxDb2xvclgsIGJveFdpZHRoKSArIGJveFdpZHRoIC8gMjtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlclkgPSBjb2xvclkgKyBib3hIZWlnaHQgLyAyO1xuICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gb3B0aW9ucy5tdWx0aUtleUJhY2tncm91bmQ7XG4gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gb3B0aW9ucy5tdWx0aUtleUJhY2tncm91bmQ7XG4gICAgICAgICAgICBkcmF3UG9pbnQoY3R4LCBkcmF3T3B0aW9ucywgY2VudGVyWCwgY2VudGVyWSk7XG4gICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBsYWJlbENvbG9yLmJvcmRlckNvbG9yO1xuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGxhYmVsQ29sb3IuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICAgICAgZHJhd1BvaW50KGN0eCwgZHJhd09wdGlvbnMsIGNlbnRlclgsIGNlbnRlclkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGlzT2JqZWN0KGxhYmVsQ29sb3IuYm9yZGVyV2lkdGgpID8gTWF0aC5tYXgoLi4uT2JqZWN0LnZhbHVlcyhsYWJlbENvbG9yLmJvcmRlcldpZHRoKSkgOiBsYWJlbENvbG9yLmJvcmRlcldpZHRoIHx8IDE7XG4gICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBsYWJlbENvbG9yLmJvcmRlckNvbG9yO1xuICAgICAgICAgICAgY3R4LnNldExpbmVEYXNoKGxhYmVsQ29sb3IuYm9yZGVyRGFzaCB8fCBbXSk7XG4gICAgICAgICAgICBjdHgubGluZURhc2hPZmZzZXQgPSBsYWJlbENvbG9yLmJvcmRlckRhc2hPZmZzZXQgfHwgMDtcbiAgICAgICAgICAgIGNvbnN0IG91dGVyWCA9IHJ0bEhlbHBlci5sZWZ0Rm9yTHRyKHJ0bENvbG9yWCwgYm94V2lkdGgpO1xuICAgICAgICAgICAgY29uc3QgaW5uZXJYID0gcnRsSGVscGVyLmxlZnRGb3JMdHIocnRsSGVscGVyLnhQbHVzKHJ0bENvbG9yWCwgMSksIGJveFdpZHRoIC0gMik7XG4gICAgICAgICAgICBjb25zdCBib3JkZXJSYWRpdXMgPSB0b1RSQkxDb3JuZXJzKGxhYmVsQ29sb3IuYm9yZGVyUmFkaXVzKTtcbiAgICAgICAgICAgIGlmIChPYmplY3QudmFsdWVzKGJvcmRlclJhZGl1cykuc29tZSgodik9PnYgIT09IDApKSB7XG4gICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBvcHRpb25zLm11bHRpS2V5QmFja2dyb3VuZDtcbiAgICAgICAgICAgICAgICBhZGRSb3VuZGVkUmVjdFBhdGgoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIHg6IG91dGVyWCxcbiAgICAgICAgICAgICAgICAgICAgeTogY29sb3JZLFxuICAgICAgICAgICAgICAgICAgICB3OiBib3hXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaDogYm94SGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICByYWRpdXM6IGJvcmRlclJhZGl1c1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7XG4gICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBsYWJlbENvbG9yLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICAgICAgYWRkUm91bmRlZFJlY3RQYXRoKGN0eCwge1xuICAgICAgICAgICAgICAgICAgICB4OiBpbm5lclgsXG4gICAgICAgICAgICAgICAgICAgIHk6IGNvbG9yWSArIDEsXG4gICAgICAgICAgICAgICAgICAgIHc6IGJveFdpZHRoIC0gMixcbiAgICAgICAgICAgICAgICAgICAgaDogYm94SGVpZ2h0IC0gMixcbiAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBib3JkZXJSYWRpdXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjdHguZmlsbCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gb3B0aW9ucy5tdWx0aUtleUJhY2tncm91bmQ7XG4gICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KG91dGVyWCwgY29sb3JZLCBib3hXaWR0aCwgYm94SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlUmVjdChvdXRlclgsIGNvbG9yWSwgYm94V2lkdGgsIGJveEhlaWdodCk7XG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGxhYmVsQ29sb3IuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdChpbm5lclgsIGNvbG9yWSArIDEsIGJveFdpZHRoIC0gMiwgYm94SGVpZ2h0IC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMubGFiZWxUZXh0Q29sb3JzW2ldO1xuICAgIH1cbiAgICBkcmF3Qm9keShwdCwgY3R4LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgYm9keSAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgYm9keVNwYWNpbmcgLCBib2R5QWxpZ24gLCBkaXNwbGF5Q29sb3JzICwgYm94SGVpZ2h0ICwgYm94V2lkdGggLCBib3hQYWRkaW5nICB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgYm9keUZvbnQgPSB0b0ZvbnQob3B0aW9ucy5ib2R5Rm9udCk7XG4gICAgICAgIGxldCBib2R5TGluZUhlaWdodCA9IGJvZHlGb250LmxpbmVIZWlnaHQ7XG4gICAgICAgIGxldCB4TGluZVBhZGRpbmcgPSAwO1xuICAgICAgICBjb25zdCBydGxIZWxwZXIgPSBnZXRSdGxBZGFwdGVyKG9wdGlvbnMucnRsLCB0aGlzLngsIHRoaXMud2lkdGgpO1xuICAgICAgICBjb25zdCBmaWxsTGluZU9mVGV4dCA9IGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIGN0eC5maWxsVGV4dChsaW5lLCBydGxIZWxwZXIueChwdC54ICsgeExpbmVQYWRkaW5nKSwgcHQueSArIGJvZHlMaW5lSGVpZ2h0IC8gMik7XG4gICAgICAgICAgICBwdC55ICs9IGJvZHlMaW5lSGVpZ2h0ICsgYm9keVNwYWNpbmc7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGJvZHlBbGlnbkZvckNhbGN1bGF0aW9uID0gcnRsSGVscGVyLnRleHRBbGlnbihib2R5QWxpZ24pO1xuICAgICAgICBsZXQgYm9keUl0ZW0sIHRleHRDb2xvciwgbGluZXMsIGksIGosIGlsZW4sIGpsZW47XG4gICAgICAgIGN0eC50ZXh0QWxpZ24gPSBib2R5QWxpZ247XG4gICAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcbiAgICAgICAgY3R4LmZvbnQgPSBib2R5Rm9udC5zdHJpbmc7XG4gICAgICAgIHB0LnggPSBnZXRBbGlnbmVkWCh0aGlzLCBib2R5QWxpZ25Gb3JDYWxjdWxhdGlvbiwgb3B0aW9ucyk7XG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBvcHRpb25zLmJvZHlDb2xvcjtcbiAgICAgICAgZWFjaCh0aGlzLmJlZm9yZUJvZHksIGZpbGxMaW5lT2ZUZXh0KTtcbiAgICAgICAgeExpbmVQYWRkaW5nID0gZGlzcGxheUNvbG9ycyAmJiBib2R5QWxpZ25Gb3JDYWxjdWxhdGlvbiAhPT0gJ3JpZ2h0JyA/IGJvZHlBbGlnbiA9PT0gJ2NlbnRlcicgPyBib3hXaWR0aCAvIDIgKyBib3hQYWRkaW5nIDogYm94V2lkdGggKyAyICsgYm94UGFkZGluZyA6IDA7XG4gICAgICAgIGZvcihpID0gMCwgaWxlbiA9IGJvZHkubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIGJvZHlJdGVtID0gYm9keVtpXTtcbiAgICAgICAgICAgIHRleHRDb2xvciA9IHRoaXMubGFiZWxUZXh0Q29sb3JzW2ldO1xuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRleHRDb2xvcjtcbiAgICAgICAgICAgIGVhY2goYm9keUl0ZW0uYmVmb3JlLCBmaWxsTGluZU9mVGV4dCk7XG4gICAgICAgICAgICBsaW5lcyA9IGJvZHlJdGVtLmxpbmVzO1xuICAgICAgICAgICAgaWYgKGRpc3BsYXlDb2xvcnMgJiYgbGluZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHJhd0NvbG9yQm94KGN0eCwgcHQsIGksIHJ0bEhlbHBlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgYm9keUxpbmVIZWlnaHQgPSBNYXRoLm1heChib2R5Rm9udC5saW5lSGVpZ2h0LCBib3hIZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yKGogPSAwLCBqbGVuID0gbGluZXMubGVuZ3RoOyBqIDwgamxlbjsgKytqKXtcbiAgICAgICAgICAgICAgICBmaWxsTGluZU9mVGV4dChsaW5lc1tqXSk7XG4gICAgICAgICAgICAgICAgYm9keUxpbmVIZWlnaHQgPSBib2R5Rm9udC5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWFjaChib2R5SXRlbS5hZnRlciwgZmlsbExpbmVPZlRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHhMaW5lUGFkZGluZyA9IDA7XG4gICAgICAgIGJvZHlMaW5lSGVpZ2h0ID0gYm9keUZvbnQubGluZUhlaWdodDtcbiAgICAgICAgZWFjaCh0aGlzLmFmdGVyQm9keSwgZmlsbExpbmVPZlRleHQpO1xuICAgICAgICBwdC55IC09IGJvZHlTcGFjaW5nO1xuICAgIH1cbiAgICBkcmF3Rm9vdGVyKHB0LCBjdHgsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZm9vdGVyID0gdGhpcy5mb290ZXI7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGZvb3Rlci5sZW5ndGg7XG4gICAgICAgIGxldCBmb290ZXJGb250LCBpO1xuICAgICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBydGxIZWxwZXIgPSBnZXRSdGxBZGFwdGVyKG9wdGlvbnMucnRsLCB0aGlzLngsIHRoaXMud2lkdGgpO1xuICAgICAgICAgICAgcHQueCA9IGdldEFsaWduZWRYKHRoaXMsIG9wdGlvbnMuZm9vdGVyQWxpZ24sIG9wdGlvbnMpO1xuICAgICAgICAgICAgcHQueSArPSBvcHRpb25zLmZvb3Rlck1hcmdpblRvcDtcbiAgICAgICAgICAgIGN0eC50ZXh0QWxpZ24gPSBydGxIZWxwZXIudGV4dEFsaWduKG9wdGlvbnMuZm9vdGVyQWxpZ24pO1xuICAgICAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuICAgICAgICAgICAgZm9vdGVyRm9udCA9IHRvRm9udChvcHRpb25zLmZvb3RlckZvbnQpO1xuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdGlvbnMuZm9vdGVyQ29sb3I7XG4gICAgICAgICAgICBjdHguZm9udCA9IGZvb3RlckZvbnQuc3RyaW5nO1xuICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpe1xuICAgICAgICAgICAgICAgIGN0eC5maWxsVGV4dChmb290ZXJbaV0sIHJ0bEhlbHBlci54KHB0LngpLCBwdC55ICsgZm9vdGVyRm9udC5saW5lSGVpZ2h0IC8gMik7XG4gICAgICAgICAgICAgICAgcHQueSArPSBmb290ZXJGb250LmxpbmVIZWlnaHQgKyBvcHRpb25zLmZvb3RlclNwYWNpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZHJhd0JhY2tncm91bmQocHQsIGN0eCwgdG9vbHRpcFNpemUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyB4QWxpZ24gLCB5QWxpZ24gIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gcHQ7XG4gICAgICAgIGNvbnN0IHsgd2lkdGggLCBoZWlnaHQgIH0gPSB0b29sdGlwU2l6ZTtcbiAgICAgICAgY29uc3QgeyB0b3BMZWZ0ICwgdG9wUmlnaHQgLCBib3R0b21MZWZ0ICwgYm90dG9tUmlnaHQgIH0gPSB0b1RSQkxDb3JuZXJzKG9wdGlvbnMuY29ybmVyUmFkaXVzKTtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdGlvbnMuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBvcHRpb25zLmJvcmRlckNvbG9yO1xuICAgICAgICBjdHgubGluZVdpZHRoID0gb3B0aW9ucy5ib3JkZXJXaWR0aDtcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBjdHgubW92ZVRvKHggKyB0b3BMZWZ0LCB5KTtcbiAgICAgICAgaWYgKHlBbGlnbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0NhcmV0KHB0LCBjdHgsIHRvb2x0aXBTaXplLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBjdHgubGluZVRvKHggKyB3aWR0aCAtIHRvcFJpZ2h0LCB5KTtcbiAgICAgICAgY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCArIHdpZHRoLCB5LCB4ICsgd2lkdGgsIHkgKyB0b3BSaWdodCk7XG4gICAgICAgIGlmICh5QWxpZ24gPT09ICdjZW50ZXInICYmIHhBbGlnbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgdGhpcy5kcmF3Q2FyZXQocHQsIGN0eCwgdG9vbHRpcFNpemUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5saW5lVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gYm90dG9tUmlnaHQpO1xuICAgICAgICBjdHgucXVhZHJhdGljQ3VydmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCAtIGJvdHRvbVJpZ2h0LCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgaWYgKHlBbGlnbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0NhcmV0KHB0LCBjdHgsIHRvb2x0aXBTaXplLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBjdHgubGluZVRvKHggKyBib3R0b21MZWZ0LCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCwgeSArIGhlaWdodCwgeCwgeSArIGhlaWdodCAtIGJvdHRvbUxlZnQpO1xuICAgICAgICBpZiAoeUFsaWduID09PSAnY2VudGVyJyAmJiB4QWxpZ24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgdGhpcy5kcmF3Q2FyZXQocHQsIGN0eCwgdG9vbHRpcFNpemUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5saW5lVG8oeCwgeSArIHRvcExlZnQpO1xuICAgICAgICBjdHgucXVhZHJhdGljQ3VydmVUbyh4LCB5LCB4ICsgdG9wTGVmdCwgeSk7XG4gICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuYm9yZGVyV2lkdGggPiAwKSB7XG4gICAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gX3VwZGF0ZUFuaW1hdGlvblRhcmdldChvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgICAgY29uc3QgYW5pbXMgPSB0aGlzLiRhbmltYXRpb25zO1xuICAgICAgICBjb25zdCBhbmltWCA9IGFuaW1zICYmIGFuaW1zLng7XG4gICAgICAgIGNvbnN0IGFuaW1ZID0gYW5pbXMgJiYgYW5pbXMueTtcbiAgICAgICAgaWYgKGFuaW1YIHx8IGFuaW1ZKSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uZXJzW29wdGlvbnMucG9zaXRpb25dLmNhbGwodGhpcywgdGhpcy5fYWN0aXZlLCB0aGlzLl9ldmVudFBvc2l0aW9uKTtcbiAgICAgICAgICAgIGlmICghcG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzaXplID0gdGhpcy5fc2l6ZSA9IGdldFRvb2x0aXBTaXplKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb25BbmRTaXplID0gT2JqZWN0LmFzc2lnbih7fSwgcG9zaXRpb24sIHRoaXMuX3NpemUpO1xuICAgICAgICAgICAgY29uc3QgYWxpZ25tZW50ID0gZGV0ZXJtaW5lQWxpZ25tZW50KGNoYXJ0LCBvcHRpb25zLCBwb3NpdGlvbkFuZFNpemUpO1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBnZXRCYWNrZ3JvdW5kUG9pbnQob3B0aW9ucywgcG9zaXRpb25BbmRTaXplLCBhbGlnbm1lbnQsIGNoYXJ0KTtcbiAgICAgICAgICAgIGlmIChhbmltWC5fdG8gIT09IHBvaW50LnggfHwgYW5pbVkuX3RvICE9PSBwb2ludC55KSB7XG4gICAgICAgICAgICAgICAgdGhpcy54QWxpZ24gPSBhbGlnbm1lbnQueEFsaWduO1xuICAgICAgICAgICAgICAgIHRoaXMueUFsaWduID0gYWxpZ25tZW50LnlBbGlnbjtcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gc2l6ZS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuY2FyZXRYID0gcG9zaXRpb24ueDtcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmV0WSA9IHBvc2l0aW9uLnk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZUFuaW1hdGlvbnMoKS51cGRhdGUodGhpcywgcG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuIF93aWxsUmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLm9wYWNpdHk7XG4gICAgfVxuICAgIGRyYXcoY3R4KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoKSk7XG4gICAgICAgIGxldCBvcGFjaXR5ID0gdGhpcy5vcGFjaXR5O1xuICAgICAgICBpZiAoIW9wYWNpdHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cGRhdGVBbmltYXRpb25UYXJnZXQob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHRvb2x0aXBTaXplID0ge1xuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHB0ID0ge1xuICAgICAgICAgICAgeDogdGhpcy54LFxuICAgICAgICAgICAgeTogdGhpcy55XG4gICAgICAgIH07XG4gICAgICAgIG9wYWNpdHkgPSBNYXRoLmFicyhvcGFjaXR5KSA8IDFlLTMgPyAwIDogb3BhY2l0eTtcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IHRvUGFkZGluZyhvcHRpb25zLnBhZGRpbmcpO1xuICAgICAgICBjb25zdCBoYXNUb29sdGlwQ29udGVudCA9IHRoaXMudGl0bGUubGVuZ3RoIHx8IHRoaXMuYmVmb3JlQm9keS5sZW5ndGggfHwgdGhpcy5ib2R5Lmxlbmd0aCB8fCB0aGlzLmFmdGVyQm9keS5sZW5ndGggfHwgdGhpcy5mb290ZXIubGVuZ3RoO1xuICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVkICYmIGhhc1Rvb2x0aXBDb250ZW50KSB7XG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gb3BhY2l0eTtcbiAgICAgICAgICAgIHRoaXMuZHJhd0JhY2tncm91bmQocHQsIGN0eCwgdG9vbHRpcFNpemUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgb3ZlcnJpZGVUZXh0RGlyZWN0aW9uKGN0eCwgb3B0aW9ucy50ZXh0RGlyZWN0aW9uKTtcbiAgICAgICAgICAgIHB0LnkgKz0gcGFkZGluZy50b3A7XG4gICAgICAgICAgICB0aGlzLmRyYXdUaXRsZShwdCwgY3R4LCBvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuZHJhd0JvZHkocHQsIGN0eCwgb3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLmRyYXdGb290ZXIocHQsIGN0eCwgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXN0b3JlVGV4dERpcmVjdGlvbihjdHgsIG9wdGlvbnMudGV4dERpcmVjdGlvbik7XG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgfVxuIGdldEFjdGl2ZUVsZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlIHx8IFtdO1xuICAgIH1cbiBzZXRBY3RpdmVFbGVtZW50cyhhY3RpdmVFbGVtZW50cywgZXZlbnRQb3NpdGlvbikge1xuICAgICAgICBjb25zdCBsYXN0QWN0aXZlID0gdGhpcy5fYWN0aXZlO1xuICAgICAgICBjb25zdCBhY3RpdmUgPSBhY3RpdmVFbGVtZW50cy5tYXAoKHsgZGF0YXNldEluZGV4ICwgaW5kZXggIH0pPT57XG4gICAgICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5jaGFydC5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpO1xuICAgICAgICAgICAgaWYgKCFtZXRhKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmluZCBhIGRhdGFzZXQgYXQgaW5kZXggJyArIGRhdGFzZXRJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGFzZXRJbmRleCxcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBtZXRhLmRhdGFbaW5kZXhdLFxuICAgICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9ICFfZWxlbWVudHNFcXVhbChsYXN0QWN0aXZlLCBhY3RpdmUpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbkNoYW5nZWQgPSB0aGlzLl9wb3NpdGlvbkNoYW5nZWQoYWN0aXZlLCBldmVudFBvc2l0aW9uKTtcbiAgICAgICAgaWYgKGNoYW5nZWQgfHwgcG9zaXRpb25DaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmUgPSBhY3RpdmU7XG4gICAgICAgICAgICB0aGlzLl9ldmVudFBvc2l0aW9uID0gZXZlbnRQb3NpdGlvbjtcbiAgICAgICAgICAgIHRoaXMuX2lnbm9yZVJlcGxheUV2ZW50cyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cbiBoYW5kbGVFdmVudChlLCByZXBsYXksIGluQ2hhcnRBcmVhID0gdHJ1ZSkge1xuICAgICAgICBpZiAocmVwbGF5ICYmIHRoaXMuX2lnbm9yZVJlcGxheUV2ZW50cykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lnbm9yZVJlcGxheUV2ZW50cyA9IGZhbHNlO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBsYXN0QWN0aXZlID0gdGhpcy5fYWN0aXZlIHx8IFtdO1xuICAgICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLl9nZXRBY3RpdmVFbGVtZW50cyhlLCBsYXN0QWN0aXZlLCByZXBsYXksIGluQ2hhcnRBcmVhKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25DaGFuZ2VkID0gdGhpcy5fcG9zaXRpb25DaGFuZ2VkKGFjdGl2ZSwgZSk7XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSByZXBsYXkgfHwgIV9lbGVtZW50c0VxdWFsKGFjdGl2ZSwgbGFzdEFjdGl2ZSkgfHwgcG9zaXRpb25DaGFuZ2VkO1xuICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlID0gYWN0aXZlO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCB8fCBvcHRpb25zLmV4dGVybmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRQb3NpdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgeDogZS54LFxuICAgICAgICAgICAgICAgICAgICB5OiBlLnlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKHRydWUsIHJlcGxheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoYW5nZWQ7XG4gICAgfVxuIF9nZXRBY3RpdmVFbGVtZW50cyhlLCBsYXN0QWN0aXZlLCByZXBsYXksIGluQ2hhcnRBcmVhKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZW91dCcpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWluQ2hhcnRBcmVhKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdEFjdGl2ZS5maWx0ZXIoKGkpPT50aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbaS5kYXRhc2V0SW5kZXhdICYmIHRoaXMuY2hhcnQuZ2V0RGF0YXNldE1ldGEoaS5kYXRhc2V0SW5kZXgpLmNvbnRyb2xsZXIuZ2V0UGFyc2VkKGkuaW5kZXgpICE9PSB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuY2hhcnQuZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZShlLCBvcHRpb25zLm1vZGUsIG9wdGlvbnMsIHJlcGxheSk7XG4gICAgICAgIGlmIChvcHRpb25zLnJldmVyc2UpIHtcbiAgICAgICAgICAgIGFjdGl2ZS5yZXZlcnNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjdGl2ZTtcbiAgICB9XG4gX3Bvc2l0aW9uQ2hhbmdlZChhY3RpdmUsIGUpIHtcbiAgICAgICAgY29uc3QgeyBjYXJldFggLCBjYXJldFkgLCBvcHRpb25zICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbmVyc1tvcHRpb25zLnBvc2l0aW9uXS5jYWxsKHRoaXMsIGFjdGl2ZSwgZSk7XG4gICAgICAgIHJldHVybiBwb3NpdGlvbiAhPT0gZmFsc2UgJiYgKGNhcmV0WCAhPT0gcG9zaXRpb24ueCB8fCBjYXJldFkgIT09IHBvc2l0aW9uLnkpO1xuICAgIH1cbn1cbnZhciBwbHVnaW5fdG9vbHRpcCA9IHtcbiAgICBpZDogJ3Rvb2x0aXAnLFxuICAgIF9lbGVtZW50OiBUb29sdGlwLFxuICAgIHBvc2l0aW9uZXJzLFxuICAgIGFmdGVySW5pdCAoY2hhcnQsIF9hcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBjaGFydC50b29sdGlwID0gbmV3IFRvb2x0aXAoe1xuICAgICAgICAgICAgICAgIGNoYXJ0LFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBiZWZvcmVVcGRhdGUgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBpZiAoY2hhcnQudG9vbHRpcCkge1xuICAgICAgICAgICAgY2hhcnQudG9vbHRpcC5pbml0aWFsaXplKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICByZXNldCAoY2hhcnQsIF9hcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChjaGFydC50b29sdGlwKSB7XG4gICAgICAgICAgICBjaGFydC50b29sdGlwLmluaXRpYWxpemUob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFmdGVyRHJhdyAoY2hhcnQpIHtcbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IGNoYXJ0LnRvb2x0aXA7XG4gICAgICAgIGlmICh0b29sdGlwICYmIHRvb2x0aXAuX3dpbGxSZW5kZXIoKSkge1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgICAgICAgICB0b29sdGlwXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGNoYXJ0Lm5vdGlmeVBsdWdpbnMoJ2JlZm9yZVRvb2x0aXBEcmF3Jywge1xuICAgICAgICAgICAgICAgIC4uLmFyZ3MsXG4gICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9vbHRpcC5kcmF3KGNoYXJ0LmN0eCk7XG4gICAgICAgICAgICBjaGFydC5ub3RpZnlQbHVnaW5zKCdhZnRlclRvb2x0aXBEcmF3JywgYXJncyk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFmdGVyRXZlbnQgKGNoYXJ0LCBhcmdzKSB7XG4gICAgICAgIGlmIChjaGFydC50b29sdGlwKSB7XG4gICAgICAgICAgICBjb25zdCB1c2VGaW5hbFBvc2l0aW9uID0gYXJncy5yZXBsYXk7XG4gICAgICAgICAgICBpZiAoY2hhcnQudG9vbHRpcC5oYW5kbGVFdmVudChhcmdzLmV2ZW50LCB1c2VGaW5hbFBvc2l0aW9uLCBhcmdzLmluQ2hhcnRBcmVhKSkge1xuICAgICAgICAgICAgICAgIGFyZ3MuY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGV4dGVybmFsOiBudWxsLFxuICAgICAgICBwb3NpdGlvbjogJ2F2ZXJhZ2UnLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuOCknLFxuICAgICAgICB0aXRsZUNvbG9yOiAnI2ZmZicsXG4gICAgICAgIHRpdGxlRm9udDoge1xuICAgICAgICAgICAgd2VpZ2h0OiAnYm9sZCdcbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGVTcGFjaW5nOiAyLFxuICAgICAgICB0aXRsZU1hcmdpbkJvdHRvbTogNixcbiAgICAgICAgdGl0bGVBbGlnbjogJ2xlZnQnLFxuICAgICAgICBib2R5Q29sb3I6ICcjZmZmJyxcbiAgICAgICAgYm9keVNwYWNpbmc6IDIsXG4gICAgICAgIGJvZHlGb250OiB7fSxcbiAgICAgICAgYm9keUFsaWduOiAnbGVmdCcsXG4gICAgICAgIGZvb3RlckNvbG9yOiAnI2ZmZicsXG4gICAgICAgIGZvb3RlclNwYWNpbmc6IDIsXG4gICAgICAgIGZvb3Rlck1hcmdpblRvcDogNixcbiAgICAgICAgZm9vdGVyRm9udDoge1xuICAgICAgICAgICAgd2VpZ2h0OiAnYm9sZCdcbiAgICAgICAgfSxcbiAgICAgICAgZm9vdGVyQWxpZ246ICdsZWZ0JyxcbiAgICAgICAgcGFkZGluZzogNixcbiAgICAgICAgY2FyZXRQYWRkaW5nOiAyLFxuICAgICAgICBjYXJldFNpemU6IDUsXG4gICAgICAgIGNvcm5lclJhZGl1czogNixcbiAgICAgICAgYm94SGVpZ2h0OiAoY3R4LCBvcHRzKT0+b3B0cy5ib2R5Rm9udC5zaXplLFxuICAgICAgICBib3hXaWR0aDogKGN0eCwgb3B0cyk9Pm9wdHMuYm9keUZvbnQuc2l6ZSxcbiAgICAgICAgbXVsdGlLZXlCYWNrZ3JvdW5kOiAnI2ZmZicsXG4gICAgICAgIGRpc3BsYXlDb2xvcnM6IHRydWUsXG4gICAgICAgIGJveFBhZGRpbmc6IDAsXG4gICAgICAgIGJvcmRlckNvbG9yOiAncmdiYSgwLDAsMCwwKScsXG4gICAgICAgIGJvcmRlcldpZHRoOiAwLFxuICAgICAgICBhbmltYXRpb246IHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiA0MDAsXG4gICAgICAgICAgICBlYXNpbmc6ICdlYXNlT3V0UXVhcnQnXG4gICAgICAgIH0sXG4gICAgICAgIGFuaW1hdGlvbnM6IHtcbiAgICAgICAgICAgIG51bWJlcnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICd4JyxcbiAgICAgICAgICAgICAgICAgICAgJ3knLFxuICAgICAgICAgICAgICAgICAgICAnd2lkdGgnLFxuICAgICAgICAgICAgICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgJ2NhcmV0WCcsXG4gICAgICAgICAgICAgICAgICAgICdjYXJldFknXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9wYWNpdHk6IHtcbiAgICAgICAgICAgICAgICBlYXNpbmc6ICdsaW5lYXInLFxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAyMDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsbGJhY2tzOiBkZWZhdWx0Q2FsbGJhY2tzXG4gICAgfSxcbiAgICBkZWZhdWx0Um91dGVzOiB7XG4gICAgICAgIGJvZHlGb250OiAnZm9udCcsXG4gICAgICAgIGZvb3RlckZvbnQ6ICdmb250JyxcbiAgICAgICAgdGl0bGVGb250OiAnZm9udCdcbiAgICB9LFxuICAgIGRlc2NyaXB0b3JzOiB7XG4gICAgICAgIF9zY3JpcHRhYmxlOiAobmFtZSk9Pm5hbWUgIT09ICdmaWx0ZXInICYmIG5hbWUgIT09ICdpdGVtU29ydCcgJiYgbmFtZSAhPT0gJ2V4dGVybmFsJyxcbiAgICAgICAgX2luZGV4YWJsZTogZmFsc2UsXG4gICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgICAgX3NjcmlwdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgX2luZGV4YWJsZTogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgYW5pbWF0aW9uOiB7XG4gICAgICAgICAgICBfZmFsbGJhY2s6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIGFuaW1hdGlvbnM6IHtcbiAgICAgICAgICAgIF9mYWxsYmFjazogJ2FuaW1hdGlvbidcbiAgICAgICAgfVxuICAgIH0sXG4gICAgYWRkaXRpb25hbE9wdGlvblNjb3BlczogW1xuICAgICAgICAnaW50ZXJhY3Rpb24nXG4gICAgXVxufTtcblxudmFyIHBsdWdpbnMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG5fX3Byb3RvX186IG51bGwsXG5Db2xvcnM6IHBsdWdpbl9jb2xvcnMsXG5EZWNpbWF0aW9uOiBwbHVnaW5fZGVjaW1hdGlvbixcbkZpbGxlcjogaW5kZXgsXG5MZWdlbmQ6IHBsdWdpbl9sZWdlbmQsXG5TdWJUaXRsZTogcGx1Z2luX3N1YnRpdGxlLFxuVGl0bGU6IHBsdWdpbl90aXRsZSxcblRvb2x0aXA6IHBsdWdpbl90b29sdGlwXG59KTtcblxuY29uc3QgYWRkSWZTdHJpbmcgPSAobGFiZWxzLCByYXcsIGluZGV4LCBhZGRlZExhYmVscyk9PntcbiAgICBpZiAodHlwZW9mIHJhdyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaW5kZXggPSBsYWJlbHMucHVzaChyYXcpIC0gMTtcbiAgICAgICAgYWRkZWRMYWJlbHMudW5zaGlmdCh7XG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGxhYmVsOiByYXdcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChpc05hTihyYXcpKSB7XG4gICAgICAgIGluZGV4ID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xufTtcbmZ1bmN0aW9uIGZpbmRPckFkZExhYmVsKGxhYmVscywgcmF3LCBpbmRleCwgYWRkZWRMYWJlbHMpIHtcbiAgICBjb25zdCBmaXJzdCA9IGxhYmVscy5pbmRleE9mKHJhdyk7XG4gICAgaWYgKGZpcnN0ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gYWRkSWZTdHJpbmcobGFiZWxzLCByYXcsIGluZGV4LCBhZGRlZExhYmVscyk7XG4gICAgfVxuICAgIGNvbnN0IGxhc3QgPSBsYWJlbHMubGFzdEluZGV4T2YocmF3KTtcbiAgICByZXR1cm4gZmlyc3QgIT09IGxhc3QgPyBpbmRleCA6IGZpcnN0O1xufVxuY29uc3QgdmFsaWRJbmRleCA9IChpbmRleCwgbWF4KT0+aW5kZXggPT09IG51bGwgPyBudWxsIDogX2xpbWl0VmFsdWUoTWF0aC5yb3VuZChpbmRleCksIDAsIG1heCk7XG5mdW5jdGlvbiBfZ2V0TGFiZWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuZ2V0TGFiZWxzKCk7XG4gICAgaWYgKHZhbHVlID49IDAgJiYgdmFsdWUgPCBsYWJlbHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBsYWJlbHNbdmFsdWVdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5jbGFzcyBDYXRlZ29yeVNjYWxlIGV4dGVuZHMgU2NhbGUge1xuICAgIHN0YXRpYyBpZCA9ICdjYXRlZ29yeSc7XG4gc3RhdGljIGRlZmF1bHRzID0ge1xuICAgICAgICB0aWNrczoge1xuICAgICAgICAgICAgY2FsbGJhY2s6IF9nZXRMYWJlbEZvclZhbHVlXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0cnVjdG9yKGNmZyl7XG4gICAgICAgIHN1cGVyKGNmZyk7XG4gICAgICAgICB0aGlzLl9zdGFydFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl92YWx1ZVJhbmdlID0gMDtcbiAgICAgICAgdGhpcy5fYWRkZWRMYWJlbHMgPSBbXTtcbiAgICB9XG4gICAgaW5pdChzY2FsZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgYWRkZWQgPSB0aGlzLl9hZGRlZExhYmVscztcbiAgICAgICAgaWYgKGFkZGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBpbmRleCAsIGxhYmVsICB9IG9mIGFkZGVkKXtcbiAgICAgICAgICAgICAgICBpZiAobGFiZWxzW2luZGV4XSA9PT0gbGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fYWRkZWRMYWJlbHMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5pbml0KHNjYWxlT3B0aW9ucyk7XG4gICAgfVxuICAgIHBhcnNlKHJhdywgaW5kZXgpIHtcbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWYocmF3KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKTtcbiAgICAgICAgaW5kZXggPSBpc0Zpbml0ZShpbmRleCkgJiYgbGFiZWxzW2luZGV4XSA9PT0gcmF3ID8gaW5kZXggOiBmaW5kT3JBZGRMYWJlbChsYWJlbHMsIHJhdywgdmFsdWVPckRlZmF1bHQoaW5kZXgsIHJhdyksIHRoaXMuX2FkZGVkTGFiZWxzKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkSW5kZXgoaW5kZXgsIGxhYmVscy5sZW5ndGggLSAxKTtcbiAgICB9XG4gICAgZGV0ZXJtaW5lRGF0YUxpbWl0cygpIHtcbiAgICAgICAgY29uc3QgeyBtaW5EZWZpbmVkICwgbWF4RGVmaW5lZCAgfSA9IHRoaXMuZ2V0VXNlckJvdW5kcygpO1xuICAgICAgICBsZXQgeyBtaW4gLCBtYXggIH0gPSB0aGlzLmdldE1pbk1heCh0cnVlKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ib3VuZHMgPT09ICd0aWNrcycpIHtcbiAgICAgICAgICAgIGlmICghbWluRGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG1pbiA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW1heERlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBtYXggPSB0aGlzLmdldExhYmVscygpLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5taW4gPSBtaW47XG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xuICAgIH1cbiAgICBidWlsZFRpY2tzKCkge1xuICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbjtcbiAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXg7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMub3B0aW9ucy5vZmZzZXQ7XG4gICAgICAgIGNvbnN0IHRpY2tzID0gW107XG4gICAgICAgIGxldCBsYWJlbHMgPSB0aGlzLmdldExhYmVscygpO1xuICAgICAgICBsYWJlbHMgPSBtaW4gPT09IDAgJiYgbWF4ID09PSBsYWJlbHMubGVuZ3RoIC0gMSA/IGxhYmVscyA6IGxhYmVscy5zbGljZShtaW4sIG1heCArIDEpO1xuICAgICAgICB0aGlzLl92YWx1ZVJhbmdlID0gTWF0aC5tYXgobGFiZWxzLmxlbmd0aCAtIChvZmZzZXQgPyAwIDogMSksIDEpO1xuICAgICAgICB0aGlzLl9zdGFydFZhbHVlID0gdGhpcy5taW4gLSAob2Zmc2V0ID8gMC41IDogMCk7XG4gICAgICAgIGZvcihsZXQgdmFsdWUgPSBtaW47IHZhbHVlIDw9IG1heDsgdmFsdWUrKyl7XG4gICAgICAgICAgICB0aWNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRpY2tzO1xuICAgIH1cbiAgICBnZXRMYWJlbEZvclZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBfZ2V0TGFiZWxGb3JWYWx1ZS5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICB9XG4gY29uZmlndXJlKCkge1xuICAgICAgICBzdXBlci5jb25maWd1cmUoKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXZlcnNlUGl4ZWxzID0gIXRoaXMuX3JldmVyc2VQaXhlbHM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBOYU4gOiB0aGlzLmdldFBpeGVsRm9yRGVjaW1hbCgodmFsdWUgLSB0aGlzLl9zdGFydFZhbHVlKSAvIHRoaXMuX3ZhbHVlUmFuZ2UpO1xuICAgIH1cbiAgICBnZXRQaXhlbEZvclRpY2soaW5kZXgpIHtcbiAgICAgICAgY29uc3QgdGlja3MgPSB0aGlzLnRpY2tzO1xuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gdGlja3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0aWNrc1tpbmRleF0udmFsdWUpO1xuICAgIH1cbiAgICBnZXRWYWx1ZUZvclBpeGVsKHBpeGVsKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuX3N0YXJ0VmFsdWUgKyB0aGlzLmdldERlY2ltYWxGb3JQaXhlbChwaXhlbCkgKiB0aGlzLl92YWx1ZVJhbmdlKTtcbiAgICB9XG4gICAgZ2V0QmFzZVBpeGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib3R0b207XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVRpY2tzJDEoZ2VuZXJhdGlvbk9wdGlvbnMsIGRhdGFSYW5nZSkge1xuICAgIGNvbnN0IHRpY2tzID0gW107XG4gICAgY29uc3QgTUlOX1NQQUNJTkcgPSAxZS0xNDtcbiAgICBjb25zdCB7IGJvdW5kcyAsIHN0ZXAgLCBtaW4gLCBtYXggLCBwcmVjaXNpb24gLCBjb3VudCAsIG1heFRpY2tzICwgbWF4RGlnaXRzICwgaW5jbHVkZUJvdW5kcyAgfSA9IGdlbmVyYXRpb25PcHRpb25zO1xuICAgIGNvbnN0IHVuaXQgPSBzdGVwIHx8IDE7XG4gICAgY29uc3QgbWF4U3BhY2VzID0gbWF4VGlja3MgLSAxO1xuICAgIGNvbnN0IHsgbWluOiBybWluICwgbWF4OiBybWF4ICB9ID0gZGF0YVJhbmdlO1xuICAgIGNvbnN0IG1pbkRlZmluZWQgPSAhaXNOdWxsT3JVbmRlZihtaW4pO1xuICAgIGNvbnN0IG1heERlZmluZWQgPSAhaXNOdWxsT3JVbmRlZihtYXgpO1xuICAgIGNvbnN0IGNvdW50RGVmaW5lZCA9ICFpc051bGxPclVuZGVmKGNvdW50KTtcbiAgICBjb25zdCBtaW5TcGFjaW5nID0gKHJtYXggLSBybWluKSAvIChtYXhEaWdpdHMgKyAxKTtcbiAgICBsZXQgc3BhY2luZyA9IG5pY2VOdW0oKHJtYXggLSBybWluKSAvIG1heFNwYWNlcyAvIHVuaXQpICogdW5pdDtcbiAgICBsZXQgZmFjdG9yLCBuaWNlTWluLCBuaWNlTWF4LCBudW1TcGFjZXM7XG4gICAgaWYgKHNwYWNpbmcgPCBNSU5fU1BBQ0lORyAmJiAhbWluRGVmaW5lZCAmJiAhbWF4RGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBybWluXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBybWF4XG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgfVxuICAgIG51bVNwYWNlcyA9IE1hdGguY2VpbChybWF4IC8gc3BhY2luZykgLSBNYXRoLmZsb29yKHJtaW4gLyBzcGFjaW5nKTtcbiAgICBpZiAobnVtU3BhY2VzID4gbWF4U3BhY2VzKSB7XG4gICAgICAgIHNwYWNpbmcgPSBuaWNlTnVtKG51bVNwYWNlcyAqIHNwYWNpbmcgLyBtYXhTcGFjZXMgLyB1bml0KSAqIHVuaXQ7XG4gICAgfVxuICAgIGlmICghaXNOdWxsT3JVbmRlZihwcmVjaXNpb24pKSB7XG4gICAgICAgIGZhY3RvciA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24pO1xuICAgICAgICBzcGFjaW5nID0gTWF0aC5jZWlsKHNwYWNpbmcgKiBmYWN0b3IpIC8gZmFjdG9yO1xuICAgIH1cbiAgICBpZiAoYm91bmRzID09PSAndGlja3MnKSB7XG4gICAgICAgIG5pY2VNaW4gPSBNYXRoLmZsb29yKHJtaW4gLyBzcGFjaW5nKSAqIHNwYWNpbmc7XG4gICAgICAgIG5pY2VNYXggPSBNYXRoLmNlaWwocm1heCAvIHNwYWNpbmcpICogc3BhY2luZztcbiAgICB9IGVsc2Uge1xuICAgICAgICBuaWNlTWluID0gcm1pbjtcbiAgICAgICAgbmljZU1heCA9IHJtYXg7XG4gICAgfVxuICAgIGlmIChtaW5EZWZpbmVkICYmIG1heERlZmluZWQgJiYgc3RlcCAmJiBhbG1vc3RXaG9sZSgobWF4IC0gbWluKSAvIHN0ZXAsIHNwYWNpbmcgLyAxMDAwKSkge1xuICAgICAgICBudW1TcGFjZXMgPSBNYXRoLnJvdW5kKE1hdGgubWluKChtYXggLSBtaW4pIC8gc3BhY2luZywgbWF4VGlja3MpKTtcbiAgICAgICAgc3BhY2luZyA9IChtYXggLSBtaW4pIC8gbnVtU3BhY2VzO1xuICAgICAgICBuaWNlTWluID0gbWluO1xuICAgICAgICBuaWNlTWF4ID0gbWF4O1xuICAgIH0gZWxzZSBpZiAoY291bnREZWZpbmVkKSB7XG4gICAgICAgIG5pY2VNaW4gPSBtaW5EZWZpbmVkID8gbWluIDogbmljZU1pbjtcbiAgICAgICAgbmljZU1heCA9IG1heERlZmluZWQgPyBtYXggOiBuaWNlTWF4O1xuICAgICAgICBudW1TcGFjZXMgPSBjb3VudCAtIDE7XG4gICAgICAgIHNwYWNpbmcgPSAobmljZU1heCAtIG5pY2VNaW4pIC8gbnVtU3BhY2VzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG51bVNwYWNlcyA9IChuaWNlTWF4IC0gbmljZU1pbikgLyBzcGFjaW5nO1xuICAgICAgICBpZiAoYWxtb3N0RXF1YWxzKG51bVNwYWNlcywgTWF0aC5yb3VuZChudW1TcGFjZXMpLCBzcGFjaW5nIC8gMTAwMCkpIHtcbiAgICAgICAgICAgIG51bVNwYWNlcyA9IE1hdGgucm91bmQobnVtU3BhY2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG51bVNwYWNlcyA9IE1hdGguY2VpbChudW1TcGFjZXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGRlY2ltYWxQbGFjZXMgPSBNYXRoLm1heChfZGVjaW1hbFBsYWNlcyhzcGFjaW5nKSwgX2RlY2ltYWxQbGFjZXMobmljZU1pbikpO1xuICAgIGZhY3RvciA9IE1hdGgucG93KDEwLCBpc051bGxPclVuZGVmKHByZWNpc2lvbikgPyBkZWNpbWFsUGxhY2VzIDogcHJlY2lzaW9uKTtcbiAgICBuaWNlTWluID0gTWF0aC5yb3VuZChuaWNlTWluICogZmFjdG9yKSAvIGZhY3RvcjtcbiAgICBuaWNlTWF4ID0gTWF0aC5yb3VuZChuaWNlTWF4ICogZmFjdG9yKSAvIGZhY3RvcjtcbiAgICBsZXQgaiA9IDA7XG4gICAgaWYgKG1pbkRlZmluZWQpIHtcbiAgICAgICAgaWYgKGluY2x1ZGVCb3VuZHMgJiYgbmljZU1pbiAhPT0gbWluKSB7XG4gICAgICAgICAgICB0aWNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogbWluXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChuaWNlTWluIDwgbWluKSB7XG4gICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbW9zdEVxdWFscyhNYXRoLnJvdW5kKChuaWNlTWluICsgaiAqIHNwYWNpbmcpICogZmFjdG9yKSAvIGZhY3RvciwgbWluLCByZWxhdGl2ZUxhYmVsU2l6ZShtaW4sIG1pblNwYWNpbmcsIGdlbmVyYXRpb25PcHRpb25zKSkpIHtcbiAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmljZU1pbiA8IG1pbikge1xuICAgICAgICAgICAgaisrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvcig7IGogPCBudW1TcGFjZXM7ICsrail7XG4gICAgICAgIGNvbnN0IHRpY2tWYWx1ZSA9IE1hdGgucm91bmQoKG5pY2VNaW4gKyBqICogc3BhY2luZykgKiBmYWN0b3IpIC8gZmFjdG9yO1xuICAgICAgICBpZiAobWF4RGVmaW5lZCAmJiB0aWNrVmFsdWUgPiBtYXgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRpY2tzLnB1c2goe1xuICAgICAgICAgICAgdmFsdWU6IHRpY2tWYWx1ZVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKG1heERlZmluZWQgJiYgaW5jbHVkZUJvdW5kcyAmJiBuaWNlTWF4ICE9PSBtYXgpIHtcbiAgICAgICAgaWYgKHRpY2tzLmxlbmd0aCAmJiBhbG1vc3RFcXVhbHModGlja3NbdGlja3MubGVuZ3RoIC0gMV0udmFsdWUsIG1heCwgcmVsYXRpdmVMYWJlbFNpemUobWF4LCBtaW5TcGFjaW5nLCBnZW5lcmF0aW9uT3B0aW9ucykpKSB7XG4gICAgICAgICAgICB0aWNrc1t0aWNrcy5sZW5ndGggLSAxXS52YWx1ZSA9IG1heDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpY2tzLnB1c2goe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBtYXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICghbWF4RGVmaW5lZCB8fCBuaWNlTWF4ID09PSBtYXgpIHtcbiAgICAgICAgdGlja3MucHVzaCh7XG4gICAgICAgICAgICB2YWx1ZTogbmljZU1heFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRpY2tzO1xufVxuZnVuY3Rpb24gcmVsYXRpdmVMYWJlbFNpemUodmFsdWUsIG1pblNwYWNpbmcsIHsgaG9yaXpvbnRhbCAsIG1pblJvdGF0aW9uICB9KSB7XG4gICAgY29uc3QgcmFkID0gdG9SYWRpYW5zKG1pblJvdGF0aW9uKTtcbiAgICBjb25zdCByYXRpbyA9IChob3Jpem9udGFsID8gTWF0aC5zaW4ocmFkKSA6IE1hdGguY29zKHJhZCkpIHx8IDAuMDAxO1xuICAgIGNvbnN0IGxlbmd0aCA9IDAuNzUgKiBtaW5TcGFjaW5nICogKCcnICsgdmFsdWUpLmxlbmd0aDtcbiAgICByZXR1cm4gTWF0aC5taW4obWluU3BhY2luZyAvIHJhdGlvLCBsZW5ndGgpO1xufVxuY2xhc3MgTGluZWFyU2NhbGVCYXNlIGV4dGVuZHMgU2NhbGUge1xuICAgIGNvbnN0cnVjdG9yKGNmZyl7XG4gICAgICAgIHN1cGVyKGNmZyk7XG4gICAgICAgICB0aGlzLnN0YXJ0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgdGhpcy5lbmQgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLl9zdGFydFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgdGhpcy5fZW5kVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3ZhbHVlUmFuZ2UgPSAwO1xuICAgIH1cbiAgICBwYXJzZShyYXcsIGluZGV4KSB7XG4gICAgICAgIGlmIChpc051bGxPclVuZGVmKHJhdykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICgodHlwZW9mIHJhdyA9PT0gJ251bWJlcicgfHwgcmF3IGluc3RhbmNlb2YgTnVtYmVyKSAmJiAhaXNGaW5pdGUoK3JhdykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiArcmF3O1xuICAgIH1cbiAgICBoYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCkge1xuICAgICAgICBjb25zdCB7IGJlZ2luQXRaZXJvICB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCB7IG1pbkRlZmluZWQgLCBtYXhEZWZpbmVkICB9ID0gdGhpcy5nZXRVc2VyQm91bmRzKCk7XG4gICAgICAgIGxldCB7IG1pbiAsIG1heCAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHNldE1pbiA9ICh2KT0+bWluID0gbWluRGVmaW5lZCA/IG1pbiA6IHY7XG4gICAgICAgIGNvbnN0IHNldE1heCA9ICh2KT0+bWF4ID0gbWF4RGVmaW5lZCA/IG1heCA6IHY7XG4gICAgICAgIGlmIChiZWdpbkF0WmVybykge1xuICAgICAgICAgICAgY29uc3QgbWluU2lnbiA9IHNpZ24obWluKTtcbiAgICAgICAgICAgIGNvbnN0IG1heFNpZ24gPSBzaWduKG1heCk7XG4gICAgICAgICAgICBpZiAobWluU2lnbiA8IDAgJiYgbWF4U2lnbiA8IDApIHtcbiAgICAgICAgICAgICAgICBzZXRNYXgoMCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1pblNpZ24gPiAwICYmIG1heFNpZ24gPiAwKSB7XG4gICAgICAgICAgICAgICAgc2V0TWluKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtaW4gPT09IG1heCkge1xuICAgICAgICAgICAgbGV0IG9mZnNldCA9IG1heCA9PT0gMCA/IDEgOiBNYXRoLmFicyhtYXggKiAwLjA1KTtcbiAgICAgICAgICAgIHNldE1heChtYXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgaWYgKCFiZWdpbkF0WmVybykge1xuICAgICAgICAgICAgICAgIHNldE1pbihtaW4gLSBvZmZzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgICB0aGlzLm1heCA9IG1heDtcbiAgICB9XG4gICAgZ2V0VGlja0xpbWl0KCkge1xuICAgICAgICBjb25zdCB0aWNrT3B0cyA9IHRoaXMub3B0aW9ucy50aWNrcztcbiAgICAgICAgbGV0IHsgbWF4VGlja3NMaW1pdCAsIHN0ZXBTaXplICB9ID0gdGlja09wdHM7XG4gICAgICAgIGxldCBtYXhUaWNrcztcbiAgICAgICAgaWYgKHN0ZXBTaXplKSB7XG4gICAgICAgICAgICBtYXhUaWNrcyA9IE1hdGguY2VpbCh0aGlzLm1heCAvIHN0ZXBTaXplKSAtIE1hdGguZmxvb3IodGhpcy5taW4gLyBzdGVwU2l6ZSkgKyAxO1xuICAgICAgICAgICAgaWYgKG1heFRpY2tzID4gMTAwMCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybihgc2NhbGVzLiR7dGhpcy5pZH0udGlja3Muc3RlcFNpemU6ICR7c3RlcFNpemV9IHdvdWxkIHJlc3VsdCBnZW5lcmF0aW5nIHVwIHRvICR7bWF4VGlja3N9IHRpY2tzLiBMaW1pdGluZyB0byAxMDAwLmApO1xuICAgICAgICAgICAgICAgIG1heFRpY2tzID0gMTAwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1heFRpY2tzID0gdGhpcy5jb21wdXRlVGlja0xpbWl0KCk7XG4gICAgICAgICAgICBtYXhUaWNrc0xpbWl0ID0gbWF4VGlja3NMaW1pdCB8fCAxMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4VGlja3NMaW1pdCkge1xuICAgICAgICAgICAgbWF4VGlja3MgPSBNYXRoLm1pbihtYXhUaWNrc0xpbWl0LCBtYXhUaWNrcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heFRpY2tzO1xuICAgIH1cbiBjb21wdXRlVGlja0xpbWl0KCkge1xuICAgICAgICByZXR1cm4gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIH1cbiAgICBidWlsZFRpY2tzKCkge1xuICAgICAgICBjb25zdCBvcHRzID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCB0aWNrT3B0cyA9IG9wdHMudGlja3M7XG4gICAgICAgIGxldCBtYXhUaWNrcyA9IHRoaXMuZ2V0VGlja0xpbWl0KCk7XG4gICAgICAgIG1heFRpY2tzID0gTWF0aC5tYXgoMiwgbWF4VGlja3MpO1xuICAgICAgICBjb25zdCBudW1lcmljR2VuZXJhdG9yT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG1heFRpY2tzLFxuICAgICAgICAgICAgYm91bmRzOiBvcHRzLmJvdW5kcyxcbiAgICAgICAgICAgIG1pbjogb3B0cy5taW4sXG4gICAgICAgICAgICBtYXg6IG9wdHMubWF4LFxuICAgICAgICAgICAgcHJlY2lzaW9uOiB0aWNrT3B0cy5wcmVjaXNpb24sXG4gICAgICAgICAgICBzdGVwOiB0aWNrT3B0cy5zdGVwU2l6ZSxcbiAgICAgICAgICAgIGNvdW50OiB0aWNrT3B0cy5jb3VudCxcbiAgICAgICAgICAgIG1heERpZ2l0czogdGhpcy5fbWF4RGlnaXRzKCksXG4gICAgICAgICAgICBob3Jpem9udGFsOiB0aGlzLmlzSG9yaXpvbnRhbCgpLFxuICAgICAgICAgICAgbWluUm90YXRpb246IHRpY2tPcHRzLm1pblJvdGF0aW9uIHx8IDAsXG4gICAgICAgICAgICBpbmNsdWRlQm91bmRzOiB0aWNrT3B0cy5pbmNsdWRlQm91bmRzICE9PSBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBkYXRhUmFuZ2UgPSB0aGlzLl9yYW5nZSB8fCB0aGlzO1xuICAgICAgICBjb25zdCB0aWNrcyA9IGdlbmVyYXRlVGlja3MkMShudW1lcmljR2VuZXJhdG9yT3B0aW9ucywgZGF0YVJhbmdlKTtcbiAgICAgICAgaWYgKG9wdHMuYm91bmRzID09PSAndGlja3MnKSB7XG4gICAgICAgICAgICBfc2V0TWluQW5kTWF4QnlLZXkodGlja3MsIHRoaXMsICd2YWx1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLnJldmVyc2UpIHtcbiAgICAgICAgICAgIHRpY2tzLnJldmVyc2UoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLm1heDtcbiAgICAgICAgICAgIHRoaXMuZW5kID0gdGhpcy5taW47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ID0gdGhpcy5taW47XG4gICAgICAgICAgICB0aGlzLmVuZCA9IHRoaXMubWF4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aWNrcztcbiAgICB9XG4gY29uZmlndXJlKCkge1xuICAgICAgICBjb25zdCB0aWNrcyA9IHRoaXMudGlja3M7XG4gICAgICAgIGxldCBzdGFydCA9IHRoaXMubWluO1xuICAgICAgICBsZXQgZW5kID0gdGhpcy5tYXg7XG4gICAgICAgIHN1cGVyLmNvbmZpZ3VyZSgpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9mZnNldCAmJiB0aWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IChlbmQgLSBzdGFydCkgLyBNYXRoLm1heCh0aWNrcy5sZW5ndGggLSAxLCAxKSAvIDI7XG4gICAgICAgICAgICBzdGFydCAtPSBvZmZzZXQ7XG4gICAgICAgICAgICBlbmQgKz0gb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N0YXJ0VmFsdWUgPSBzdGFydDtcbiAgICAgICAgdGhpcy5fZW5kVmFsdWUgPSBlbmQ7XG4gICAgICAgIHRoaXMuX3ZhbHVlUmFuZ2UgPSBlbmQgLSBzdGFydDtcbiAgICB9XG4gICAgZ2V0TGFiZWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbHVlLCB0aGlzLmNoYXJ0Lm9wdGlvbnMubG9jYWxlLCB0aGlzLm9wdGlvbnMudGlja3MuZm9ybWF0KTtcbiAgICB9XG59XG5cbmNsYXNzIExpbmVhclNjYWxlIGV4dGVuZHMgTGluZWFyU2NhbGVCYXNlIHtcbiAgICBzdGF0aWMgaWQgPSAnbGluZWFyJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgICBjYWxsYmFjazogVGlja3MuZm9ybWF0dGVycy5udW1lcmljXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGRldGVybWluZURhdGFMaW1pdHMoKSB7XG4gICAgICAgIGNvbnN0IHsgbWluICwgbWF4ICB9ID0gdGhpcy5nZXRNaW5NYXgodHJ1ZSk7XG4gICAgICAgIHRoaXMubWluID0gaXNOdW1iZXJGaW5pdGUobWluKSA/IG1pbiA6IDA7XG4gICAgICAgIHRoaXMubWF4ID0gaXNOdW1iZXJGaW5pdGUobWF4KSA/IG1heCA6IDE7XG4gICAgICAgIHRoaXMuaGFuZGxlVGlja1JhbmdlT3B0aW9ucygpO1xuICAgIH1cbiBjb21wdXRlVGlja0xpbWl0KCkge1xuICAgICAgICBjb25zdCBob3Jpem9udGFsID0gdGhpcy5pc0hvcml6b250YWwoKTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gaG9yaXpvbnRhbCA/IHRoaXMud2lkdGggOiB0aGlzLmhlaWdodDtcbiAgICAgICAgY29uc3QgbWluUm90YXRpb24gPSB0b1JhZGlhbnModGhpcy5vcHRpb25zLnRpY2tzLm1pblJvdGF0aW9uKTtcbiAgICAgICAgY29uc3QgcmF0aW8gPSAoaG9yaXpvbnRhbCA/IE1hdGguc2luKG1pblJvdGF0aW9uKSA6IE1hdGguY29zKG1pblJvdGF0aW9uKSkgfHwgMC4wMDE7XG4gICAgICAgIGNvbnN0IHRpY2tGb250ID0gdGhpcy5fcmVzb2x2ZVRpY2tGb250T3B0aW9ucygwKTtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbChsZW5ndGggLyBNYXRoLm1pbig0MCwgdGlja0ZvbnQubGluZUhlaWdodCAvIHJhdGlvKSk7XG4gICAgfVxuICAgIGdldFBpeGVsRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gTmFOIDogdGhpcy5nZXRQaXhlbEZvckRlY2ltYWwoKHZhbHVlIC0gdGhpcy5fc3RhcnRWYWx1ZSkgLyB0aGlzLl92YWx1ZVJhbmdlKTtcbiAgICB9XG4gICAgZ2V0VmFsdWVGb3JQaXhlbChwaXhlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRWYWx1ZSArIHRoaXMuZ2V0RGVjaW1hbEZvclBpeGVsKHBpeGVsKSAqIHRoaXMuX3ZhbHVlUmFuZ2U7XG4gICAgfVxufVxuXG5jb25zdCBsb2cxMEZsb29yID0gKHYpPT5NYXRoLmZsb29yKGxvZzEwKHYpKTtcbmNvbnN0IGNoYW5nZUV4cG9uZW50ID0gKHYsIG0pPT5NYXRoLnBvdygxMCwgbG9nMTBGbG9vcih2KSArIG0pO1xuZnVuY3Rpb24gaXNNYWpvcih0aWNrVmFsKSB7XG4gICAgY29uc3QgcmVtYWluID0gdGlja1ZhbCAvIE1hdGgucG93KDEwLCBsb2cxMEZsb29yKHRpY2tWYWwpKTtcbiAgICByZXR1cm4gcmVtYWluID09PSAxO1xufVxuZnVuY3Rpb24gc3RlcHMobWluLCBtYXgsIHJhbmdlRXhwKSB7XG4gICAgY29uc3QgcmFuZ2VTdGVwID0gTWF0aC5wb3coMTAsIHJhbmdlRXhwKTtcbiAgICBjb25zdCBzdGFydCA9IE1hdGguZmxvb3IobWluIC8gcmFuZ2VTdGVwKTtcbiAgICBjb25zdCBlbmQgPSBNYXRoLmNlaWwobWF4IC8gcmFuZ2VTdGVwKTtcbiAgICByZXR1cm4gZW5kIC0gc3RhcnQ7XG59XG5mdW5jdGlvbiBzdGFydEV4cChtaW4sIG1heCkge1xuICAgIGNvbnN0IHJhbmdlID0gbWF4IC0gbWluO1xuICAgIGxldCByYW5nZUV4cCA9IGxvZzEwRmxvb3IocmFuZ2UpO1xuICAgIHdoaWxlKHN0ZXBzKG1pbiwgbWF4LCByYW5nZUV4cCkgPiAxMCl7XG4gICAgICAgIHJhbmdlRXhwKys7XG4gICAgfVxuICAgIHdoaWxlKHN0ZXBzKG1pbiwgbWF4LCByYW5nZUV4cCkgPCAxMCl7XG4gICAgICAgIHJhbmdlRXhwLS07XG4gICAgfVxuICAgIHJldHVybiBNYXRoLm1pbihyYW5nZUV4cCwgbG9nMTBGbG9vcihtaW4pKTtcbn1cbiBmdW5jdGlvbiBnZW5lcmF0ZVRpY2tzKGdlbmVyYXRpb25PcHRpb25zLCB7IG1pbiAsIG1heCAgfSkge1xuICAgIG1pbiA9IGZpbml0ZU9yRGVmYXVsdChnZW5lcmF0aW9uT3B0aW9ucy5taW4sIG1pbik7XG4gICAgY29uc3QgdGlja3MgPSBbXTtcbiAgICBjb25zdCBtaW5FeHAgPSBsb2cxMEZsb29yKG1pbik7XG4gICAgbGV0IGV4cCA9IHN0YXJ0RXhwKG1pbiwgbWF4KTtcbiAgICBsZXQgcHJlY2lzaW9uID0gZXhwIDwgMCA/IE1hdGgucG93KDEwLCBNYXRoLmFicyhleHApKSA6IDE7XG4gICAgY29uc3Qgc3RlcFNpemUgPSBNYXRoLnBvdygxMCwgZXhwKTtcbiAgICBjb25zdCBiYXNlID0gbWluRXhwID4gZXhwID8gTWF0aC5wb3coMTAsIG1pbkV4cCkgOiAwO1xuICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5yb3VuZCgobWluIC0gYmFzZSkgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uO1xuICAgIGNvbnN0IG9mZnNldCA9IE1hdGguZmxvb3IoKG1pbiAtIGJhc2UpIC8gc3RlcFNpemUgLyAxMCkgKiBzdGVwU2l6ZSAqIDEwO1xuICAgIGxldCBzaWduaWZpY2FuZCA9IE1hdGguZmxvb3IoKHN0YXJ0IC0gb2Zmc2V0KSAvIE1hdGgucG93KDEwLCBleHApKTtcbiAgICBsZXQgdmFsdWUgPSBmaW5pdGVPckRlZmF1bHQoZ2VuZXJhdGlvbk9wdGlvbnMubWluLCBNYXRoLnJvdW5kKChiYXNlICsgb2Zmc2V0ICsgc2lnbmlmaWNhbmQgKiBNYXRoLnBvdygxMCwgZXhwKSkgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uKTtcbiAgICB3aGlsZSh2YWx1ZSA8IG1heCl7XG4gICAgICAgIHRpY2tzLnB1c2goe1xuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBtYWpvcjogaXNNYWpvcih2YWx1ZSksXG4gICAgICAgICAgICBzaWduaWZpY2FuZFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHNpZ25pZmljYW5kID49IDEwKSB7XG4gICAgICAgICAgICBzaWduaWZpY2FuZCA9IHNpZ25pZmljYW5kIDwgMTUgPyAxNSA6IDIwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2lnbmlmaWNhbmQrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2lnbmlmaWNhbmQgPj0gMjApIHtcbiAgICAgICAgICAgIGV4cCsrO1xuICAgICAgICAgICAgc2lnbmlmaWNhbmQgPSAyO1xuICAgICAgICAgICAgcHJlY2lzaW9uID0gZXhwID49IDAgPyAxIDogcHJlY2lzaW9uO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCgoYmFzZSArIG9mZnNldCArIHNpZ25pZmljYW5kICogTWF0aC5wb3coMTAsIGV4cCkpICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbjtcbiAgICB9XG4gICAgY29uc3QgbGFzdFRpY2sgPSBmaW5pdGVPckRlZmF1bHQoZ2VuZXJhdGlvbk9wdGlvbnMubWF4LCB2YWx1ZSk7XG4gICAgdGlja3MucHVzaCh7XG4gICAgICAgIHZhbHVlOiBsYXN0VGljayxcbiAgICAgICAgbWFqb3I6IGlzTWFqb3IobGFzdFRpY2spLFxuICAgICAgICBzaWduaWZpY2FuZFxuICAgIH0pO1xuICAgIHJldHVybiB0aWNrcztcbn1cbmNsYXNzIExvZ2FyaXRobWljU2NhbGUgZXh0ZW5kcyBTY2FsZSB7XG4gICAgc3RhdGljIGlkID0gJ2xvZ2FyaXRobWljJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgICBjYWxsYmFjazogVGlja3MuZm9ybWF0dGVycy5sb2dhcml0aG1pYyxcbiAgICAgICAgICAgIG1ham9yOiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdHJ1Y3RvcihjZmcpe1xuICAgICAgICBzdXBlcihjZmcpO1xuICAgICAgICAgdGhpcy5zdGFydCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMuZW5kID0gdW5kZWZpbmVkO1xuICAgICAgICAgdGhpcy5fc3RhcnRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fdmFsdWVSYW5nZSA9IDA7XG4gICAgfVxuICAgIHBhcnNlKHJhdywgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBMaW5lYXJTY2FsZUJhc2UucHJvdG90eXBlLnBhcnNlLmFwcGx5KHRoaXMsIFtcbiAgICAgICAgICAgIHJhdyxcbiAgICAgICAgICAgIGluZGV4XG4gICAgICAgIF0pO1xuICAgICAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3plcm8gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOdW1iZXJGaW5pdGUodmFsdWUpICYmIHZhbHVlID4gMCA/IHZhbHVlIDogbnVsbDtcbiAgICB9XG4gICAgZGV0ZXJtaW5lRGF0YUxpbWl0cygpIHtcbiAgICAgICAgY29uc3QgeyBtaW4gLCBtYXggIH0gPSB0aGlzLmdldE1pbk1heCh0cnVlKTtcbiAgICAgICAgdGhpcy5taW4gPSBpc051bWJlckZpbml0ZShtaW4pID8gTWF0aC5tYXgoMCwgbWluKSA6IG51bGw7XG4gICAgICAgIHRoaXMubWF4ID0gaXNOdW1iZXJGaW5pdGUobWF4KSA/IE1hdGgubWF4KDAsIG1heCkgOiBudWxsO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJlZ2luQXRaZXJvKSB7XG4gICAgICAgICAgICB0aGlzLl96ZXJvID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5femVybyAmJiB0aGlzLm1pbiAhPT0gdGhpcy5fc3VnZ2VzdGVkTWluICYmICFpc051bWJlckZpbml0ZSh0aGlzLl91c2VyTWluKSkge1xuICAgICAgICAgICAgdGhpcy5taW4gPSBtaW4gPT09IGNoYW5nZUV4cG9uZW50KHRoaXMubWluLCAwKSA/IGNoYW5nZUV4cG9uZW50KHRoaXMubWluLCAtMSkgOiBjaGFuZ2VFeHBvbmVudCh0aGlzLm1pbiwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCk7XG4gICAgfVxuICAgIGhhbmRsZVRpY2tSYW5nZU9wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IHsgbWluRGVmaW5lZCAsIG1heERlZmluZWQgIH0gPSB0aGlzLmdldFVzZXJCb3VuZHMoKTtcbiAgICAgICAgbGV0IG1pbiA9IHRoaXMubWluO1xuICAgICAgICBsZXQgbWF4ID0gdGhpcy5tYXg7XG4gICAgICAgIGNvbnN0IHNldE1pbiA9ICh2KT0+bWluID0gbWluRGVmaW5lZCA/IG1pbiA6IHY7XG4gICAgICAgIGNvbnN0IHNldE1heCA9ICh2KT0+bWF4ID0gbWF4RGVmaW5lZCA/IG1heCA6IHY7XG4gICAgICAgIGlmIChtaW4gPT09IG1heCkge1xuICAgICAgICAgICAgaWYgKG1pbiA8PSAwKSB7XG4gICAgICAgICAgICAgICAgc2V0TWluKDEpO1xuICAgICAgICAgICAgICAgIHNldE1heCgxMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldE1pbihjaGFuZ2VFeHBvbmVudChtaW4sIC0xKSk7XG4gICAgICAgICAgICAgICAgc2V0TWF4KGNoYW5nZUV4cG9uZW50KG1heCwgKzEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWluIDw9IDApIHtcbiAgICAgICAgICAgIHNldE1pbihjaGFuZ2VFeHBvbmVudChtYXgsIC0xKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCA8PSAwKSB7XG4gICAgICAgICAgICBzZXRNYXgoY2hhbmdlRXhwb25lbnQobWluLCArMSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgICB0aGlzLm1heCA9IG1heDtcbiAgICB9XG4gICAgYnVpbGRUaWNrcygpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgZ2VuZXJhdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgICAgICBtaW46IHRoaXMuX3VzZXJNaW4sXG4gICAgICAgICAgICBtYXg6IHRoaXMuX3VzZXJNYXhcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdGlja3MgPSBnZW5lcmF0ZVRpY2tzKGdlbmVyYXRpb25PcHRpb25zLCB0aGlzKTtcbiAgICAgICAgaWYgKG9wdHMuYm91bmRzID09PSAndGlja3MnKSB7XG4gICAgICAgICAgICBfc2V0TWluQW5kTWF4QnlLZXkodGlja3MsIHRoaXMsICd2YWx1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLnJldmVyc2UpIHtcbiAgICAgICAgICAgIHRpY2tzLnJldmVyc2UoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLm1heDtcbiAgICAgICAgICAgIHRoaXMuZW5kID0gdGhpcy5taW47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ID0gdGhpcy5taW47XG4gICAgICAgICAgICB0aGlzLmVuZCA9IHRoaXMubWF4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aWNrcztcbiAgICB9XG4gZ2V0TGFiZWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/ICcwJyA6IGZvcm1hdE51bWJlcih2YWx1ZSwgdGhpcy5jaGFydC5vcHRpb25zLmxvY2FsZSwgdGhpcy5vcHRpb25zLnRpY2tzLmZvcm1hdCk7XG4gICAgfVxuIGNvbmZpZ3VyZSgpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLm1pbjtcbiAgICAgICAgc3VwZXIuY29uZmlndXJlKCk7XG4gICAgICAgIHRoaXMuX3N0YXJ0VmFsdWUgPSBsb2cxMChzdGFydCk7XG4gICAgICAgIHRoaXMuX3ZhbHVlUmFuZ2UgPSBsb2cxMCh0aGlzLm1heCkgLSBsb2cxMChzdGFydCk7XG4gICAgfVxuICAgIGdldFBpeGVsRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5taW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRQaXhlbEZvckRlY2ltYWwodmFsdWUgPT09IHRoaXMubWluID8gMCA6IChsb2cxMCh2YWx1ZSkgLSB0aGlzLl9zdGFydFZhbHVlKSAvIHRoaXMuX3ZhbHVlUmFuZ2UpO1xuICAgIH1cbiAgICBnZXRWYWx1ZUZvclBpeGVsKHBpeGVsKSB7XG4gICAgICAgIGNvbnN0IGRlY2ltYWwgPSB0aGlzLmdldERlY2ltYWxGb3JQaXhlbChwaXhlbCk7XG4gICAgICAgIHJldHVybiBNYXRoLnBvdygxMCwgdGhpcy5fc3RhcnRWYWx1ZSArIGRlY2ltYWwgKiB0aGlzLl92YWx1ZVJhbmdlKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldFRpY2tCYWNrZHJvcEhlaWdodChvcHRzKSB7XG4gICAgY29uc3QgdGlja09wdHMgPSBvcHRzLnRpY2tzO1xuICAgIGlmICh0aWNrT3B0cy5kaXNwbGF5ICYmIG9wdHMuZGlzcGxheSkge1xuICAgICAgICBjb25zdCBwYWRkaW5nID0gdG9QYWRkaW5nKHRpY2tPcHRzLmJhY2tkcm9wUGFkZGluZyk7XG4gICAgICAgIHJldHVybiB2YWx1ZU9yRGVmYXVsdCh0aWNrT3B0cy5mb250ICYmIHRpY2tPcHRzLmZvbnQuc2l6ZSwgZGVmYXVsdHMuZm9udC5zaXplKSArIHBhZGRpbmcuaGVpZ2h0O1xuICAgIH1cbiAgICByZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIG1lYXN1cmVMYWJlbFNpemUoY3R4LCBmb250LCBsYWJlbCkge1xuICAgIGxhYmVsID0gaXNBcnJheShsYWJlbCkgPyBsYWJlbCA6IFtcbiAgICAgICAgbGFiZWxcbiAgICBdO1xuICAgIHJldHVybiB7XG4gICAgICAgIHc6IF9sb25nZXN0VGV4dChjdHgsIGZvbnQuc3RyaW5nLCBsYWJlbCksXG4gICAgICAgIGg6IGxhYmVsLmxlbmd0aCAqIGZvbnQubGluZUhlaWdodFxuICAgIH07XG59XG5mdW5jdGlvbiBkZXRlcm1pbmVMaW1pdHMoYW5nbGUsIHBvcywgc2l6ZSwgbWluLCBtYXgpIHtcbiAgICBpZiAoYW5nbGUgPT09IG1pbiB8fCBhbmdsZSA9PT0gbWF4KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydDogcG9zIC0gc2l6ZSAvIDIsXG4gICAgICAgICAgICBlbmQ6IHBvcyArIHNpemUgLyAyXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmIChhbmdsZSA8IG1pbiB8fCBhbmdsZSA+IG1heCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhcnQ6IHBvcyAtIHNpemUsXG4gICAgICAgICAgICBlbmQ6IHBvc1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBzdGFydDogcG9zLFxuICAgICAgICBlbmQ6IHBvcyArIHNpemVcbiAgICB9O1xufVxuIGZ1bmN0aW9uIGZpdFdpdGhQb2ludExhYmVscyhzY2FsZSkge1xuICAgIGNvbnN0IG9yaWcgPSB7XG4gICAgICAgIGw6IHNjYWxlLmxlZnQgKyBzY2FsZS5fcGFkZGluZy5sZWZ0LFxuICAgICAgICByOiBzY2FsZS5yaWdodCAtIHNjYWxlLl9wYWRkaW5nLnJpZ2h0LFxuICAgICAgICB0OiBzY2FsZS50b3AgKyBzY2FsZS5fcGFkZGluZy50b3AsXG4gICAgICAgIGI6IHNjYWxlLmJvdHRvbSAtIHNjYWxlLl9wYWRkaW5nLmJvdHRvbVxuICAgIH07XG4gICAgY29uc3QgbGltaXRzID0gT2JqZWN0LmFzc2lnbih7fSwgb3JpZyk7XG4gICAgY29uc3QgbGFiZWxTaXplcyA9IFtdO1xuICAgIGNvbnN0IHBhZGRpbmcgPSBbXTtcbiAgICBjb25zdCB2YWx1ZUNvdW50ID0gc2NhbGUuX3BvaW50TGFiZWxzLmxlbmd0aDtcbiAgICBjb25zdCBwb2ludExhYmVsT3B0cyA9IHNjYWxlLm9wdGlvbnMucG9pbnRMYWJlbHM7XG4gICAgY29uc3QgYWRkaXRpb25hbEFuZ2xlID0gcG9pbnRMYWJlbE9wdHMuY2VudGVyUG9pbnRMYWJlbHMgPyBQSSAvIHZhbHVlQ291bnQgOiAwO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCB2YWx1ZUNvdW50OyBpKyspe1xuICAgICAgICBjb25zdCBvcHRzID0gcG9pbnRMYWJlbE9wdHMuc2V0Q29udGV4dChzY2FsZS5nZXRQb2ludExhYmVsQ29udGV4dChpKSk7XG4gICAgICAgIHBhZGRpbmdbaV0gPSBvcHRzLnBhZGRpbmc7XG4gICAgICAgIGNvbnN0IHBvaW50UG9zaXRpb24gPSBzY2FsZS5nZXRQb2ludFBvc2l0aW9uKGksIHNjYWxlLmRyYXdpbmdBcmVhICsgcGFkZGluZ1tpXSwgYWRkaXRpb25hbEFuZ2xlKTtcbiAgICAgICAgY29uc3QgcGxGb250ID0gdG9Gb250KG9wdHMuZm9udCk7XG4gICAgICAgIGNvbnN0IHRleHRTaXplID0gbWVhc3VyZUxhYmVsU2l6ZShzY2FsZS5jdHgsIHBsRm9udCwgc2NhbGUuX3BvaW50TGFiZWxzW2ldKTtcbiAgICAgICAgbGFiZWxTaXplc1tpXSA9IHRleHRTaXplO1xuICAgICAgICBjb25zdCBhbmdsZVJhZGlhbnMgPSBfbm9ybWFsaXplQW5nbGUoc2NhbGUuZ2V0SW5kZXhBbmdsZShpKSArIGFkZGl0aW9uYWxBbmdsZSk7XG4gICAgICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5yb3VuZCh0b0RlZ3JlZXMoYW5nbGVSYWRpYW5zKSk7XG4gICAgICAgIGNvbnN0IGhMaW1pdHMgPSBkZXRlcm1pbmVMaW1pdHMoYW5nbGUsIHBvaW50UG9zaXRpb24ueCwgdGV4dFNpemUudywgMCwgMTgwKTtcbiAgICAgICAgY29uc3QgdkxpbWl0cyA9IGRldGVybWluZUxpbWl0cyhhbmdsZSwgcG9pbnRQb3NpdGlvbi55LCB0ZXh0U2l6ZS5oLCA5MCwgMjcwKTtcbiAgICAgICAgdXBkYXRlTGltaXRzKGxpbWl0cywgb3JpZywgYW5nbGVSYWRpYW5zLCBoTGltaXRzLCB2TGltaXRzKTtcbiAgICB9XG4gICAgc2NhbGUuc2V0Q2VudGVyUG9pbnQob3JpZy5sIC0gbGltaXRzLmwsIGxpbWl0cy5yIC0gb3JpZy5yLCBvcmlnLnQgLSBsaW1pdHMudCwgbGltaXRzLmIgLSBvcmlnLmIpO1xuICAgIHNjYWxlLl9wb2ludExhYmVsSXRlbXMgPSBidWlsZFBvaW50TGFiZWxJdGVtcyhzY2FsZSwgbGFiZWxTaXplcywgcGFkZGluZyk7XG59XG5mdW5jdGlvbiB1cGRhdGVMaW1pdHMobGltaXRzLCBvcmlnLCBhbmdsZSwgaExpbWl0cywgdkxpbWl0cykge1xuICAgIGNvbnN0IHNpbiA9IE1hdGguYWJzKE1hdGguc2luKGFuZ2xlKSk7XG4gICAgY29uc3QgY29zID0gTWF0aC5hYnMoTWF0aC5jb3MoYW5nbGUpKTtcbiAgICBsZXQgeCA9IDA7XG4gICAgbGV0IHkgPSAwO1xuICAgIGlmIChoTGltaXRzLnN0YXJ0IDwgb3JpZy5sKSB7XG4gICAgICAgIHggPSAob3JpZy5sIC0gaExpbWl0cy5zdGFydCkgLyBzaW47XG4gICAgICAgIGxpbWl0cy5sID0gTWF0aC5taW4obGltaXRzLmwsIG9yaWcubCAtIHgpO1xuICAgIH0gZWxzZSBpZiAoaExpbWl0cy5lbmQgPiBvcmlnLnIpIHtcbiAgICAgICAgeCA9IChoTGltaXRzLmVuZCAtIG9yaWcucikgLyBzaW47XG4gICAgICAgIGxpbWl0cy5yID0gTWF0aC5tYXgobGltaXRzLnIsIG9yaWcuciArIHgpO1xuICAgIH1cbiAgICBpZiAodkxpbWl0cy5zdGFydCA8IG9yaWcudCkge1xuICAgICAgICB5ID0gKG9yaWcudCAtIHZMaW1pdHMuc3RhcnQpIC8gY29zO1xuICAgICAgICBsaW1pdHMudCA9IE1hdGgubWluKGxpbWl0cy50LCBvcmlnLnQgLSB5KTtcbiAgICB9IGVsc2UgaWYgKHZMaW1pdHMuZW5kID4gb3JpZy5iKSB7XG4gICAgICAgIHkgPSAodkxpbWl0cy5lbmQgLSBvcmlnLmIpIC8gY29zO1xuICAgICAgICBsaW1pdHMuYiA9IE1hdGgubWF4KGxpbWl0cy5iLCBvcmlnLmIgKyB5KTtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVQb2ludExhYmVsSXRlbShzY2FsZSwgaW5kZXgsIGl0ZW1PcHRzKSB7XG4gICAgY29uc3Qgb3V0ZXJEaXN0YW5jZSA9IHNjYWxlLmRyYXdpbmdBcmVhO1xuICAgIGNvbnN0IHsgZXh0cmEgLCBhZGRpdGlvbmFsQW5nbGUgLCBwYWRkaW5nICwgc2l6ZSAgfSA9IGl0ZW1PcHRzO1xuICAgIGNvbnN0IHBvaW50TGFiZWxQb3NpdGlvbiA9IHNjYWxlLmdldFBvaW50UG9zaXRpb24oaW5kZXgsIG91dGVyRGlzdGFuY2UgKyBleHRyYSArIHBhZGRpbmcsIGFkZGl0aW9uYWxBbmdsZSk7XG4gICAgY29uc3QgYW5nbGUgPSBNYXRoLnJvdW5kKHRvRGVncmVlcyhfbm9ybWFsaXplQW5nbGUocG9pbnRMYWJlbFBvc2l0aW9uLmFuZ2xlICsgSEFMRl9QSSkpKTtcbiAgICBjb25zdCB5ID0geUZvckFuZ2xlKHBvaW50TGFiZWxQb3NpdGlvbi55LCBzaXplLmgsIGFuZ2xlKTtcbiAgICBjb25zdCB0ZXh0QWxpZ24gPSBnZXRUZXh0QWxpZ25Gb3JBbmdsZShhbmdsZSk7XG4gICAgY29uc3QgbGVmdCA9IGxlZnRGb3JUZXh0QWxpZ24ocG9pbnRMYWJlbFBvc2l0aW9uLngsIHNpemUudywgdGV4dEFsaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICB4OiBwb2ludExhYmVsUG9zaXRpb24ueCxcbiAgICAgICAgeSxcbiAgICAgICAgdGV4dEFsaWduLFxuICAgICAgICBsZWZ0LFxuICAgICAgICB0b3A6IHksXG4gICAgICAgIHJpZ2h0OiBsZWZ0ICsgc2l6ZS53LFxuICAgICAgICBib3R0b206IHkgKyBzaXplLmhcbiAgICB9O1xufVxuZnVuY3Rpb24gaXNOb3RPdmVybGFwcGVkKGl0ZW0sIGFyZWEpIHtcbiAgICBpZiAoIWFyZWEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHsgbGVmdCAsIHRvcCAsIHJpZ2h0ICwgYm90dG9tICB9ID0gaXRlbTtcbiAgICBjb25zdCBhcGV4ZXNJbkFyZWEgPSBfaXNQb2ludEluQXJlYSh7XG4gICAgICAgIHg6IGxlZnQsXG4gICAgICAgIHk6IHRvcFxuICAgIH0sIGFyZWEpIHx8IF9pc1BvaW50SW5BcmVhKHtcbiAgICAgICAgeDogbGVmdCxcbiAgICAgICAgeTogYm90dG9tXG4gICAgfSwgYXJlYSkgfHwgX2lzUG9pbnRJbkFyZWEoe1xuICAgICAgICB4OiByaWdodCxcbiAgICAgICAgeTogdG9wXG4gICAgfSwgYXJlYSkgfHwgX2lzUG9pbnRJbkFyZWEoe1xuICAgICAgICB4OiByaWdodCxcbiAgICAgICAgeTogYm90dG9tXG4gICAgfSwgYXJlYSk7XG4gICAgcmV0dXJuICFhcGV4ZXNJbkFyZWE7XG59XG5mdW5jdGlvbiBidWlsZFBvaW50TGFiZWxJdGVtcyhzY2FsZSwgbGFiZWxTaXplcywgcGFkZGluZykge1xuICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgY29uc3QgdmFsdWVDb3VudCA9IHNjYWxlLl9wb2ludExhYmVscy5sZW5ndGg7XG4gICAgY29uc3Qgb3B0cyA9IHNjYWxlLm9wdGlvbnM7XG4gICAgY29uc3QgeyBjZW50ZXJQb2ludExhYmVscyAsIGRpc3BsYXkgIH0gPSBvcHRzLnBvaW50TGFiZWxzO1xuICAgIGNvbnN0IGl0ZW1PcHRzID0ge1xuICAgICAgICBleHRyYTogZ2V0VGlja0JhY2tkcm9wSGVpZ2h0KG9wdHMpIC8gMixcbiAgICAgICAgYWRkaXRpb25hbEFuZ2xlOiBjZW50ZXJQb2ludExhYmVscyA/IFBJIC8gdmFsdWVDb3VudCA6IDBcbiAgICB9O1xuICAgIGxldCBhcmVhO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCB2YWx1ZUNvdW50OyBpKyspe1xuICAgICAgICBpdGVtT3B0cy5wYWRkaW5nID0gcGFkZGluZ1tpXTtcbiAgICAgICAgaXRlbU9wdHMuc2l6ZSA9IGxhYmVsU2l6ZXNbaV07XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBjcmVhdGVQb2ludExhYmVsSXRlbShzY2FsZSwgaSwgaXRlbU9wdHMpO1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICBpZiAoZGlzcGxheSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICBpdGVtLnZpc2libGUgPSBpc05vdE92ZXJsYXBwZWQoaXRlbSwgYXJlYSk7XG4gICAgICAgICAgICBpZiAoaXRlbS52aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgYXJlYSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xufVxuZnVuY3Rpb24gZ2V0VGV4dEFsaWduRm9yQW5nbGUoYW5nbGUpIHtcbiAgICBpZiAoYW5nbGUgPT09IDAgfHwgYW5nbGUgPT09IDE4MCkge1xuICAgICAgICByZXR1cm4gJ2NlbnRlcic7XG4gICAgfSBlbHNlIGlmIChhbmdsZSA8IDE4MCkge1xuICAgICAgICByZXR1cm4gJ2xlZnQnO1xuICAgIH1cbiAgICByZXR1cm4gJ3JpZ2h0Jztcbn1cbmZ1bmN0aW9uIGxlZnRGb3JUZXh0QWxpZ24oeCwgdywgYWxpZ24pIHtcbiAgICBpZiAoYWxpZ24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgeCAtPSB3O1xuICAgIH0gZWxzZSBpZiAoYWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgIHggLT0gdyAvIDI7XG4gICAgfVxuICAgIHJldHVybiB4O1xufVxuZnVuY3Rpb24geUZvckFuZ2xlKHksIGgsIGFuZ2xlKSB7XG4gICAgaWYgKGFuZ2xlID09PSA5MCB8fCBhbmdsZSA9PT0gMjcwKSB7XG4gICAgICAgIHkgLT0gaCAvIDI7XG4gICAgfSBlbHNlIGlmIChhbmdsZSA+IDI3MCB8fCBhbmdsZSA8IDkwKSB7XG4gICAgICAgIHkgLT0gaDtcbiAgICB9XG4gICAgcmV0dXJuIHk7XG59XG5mdW5jdGlvbiBkcmF3UG9pbnRMYWJlbEJveChjdHgsIG9wdHMsIGl0ZW0pIHtcbiAgICBjb25zdCB7IGxlZnQgLCB0b3AgLCByaWdodCAsIGJvdHRvbSAgfSA9IGl0ZW07XG4gICAgY29uc3QgeyBiYWNrZHJvcENvbG9yICB9ID0gb3B0cztcbiAgICBpZiAoIWlzTnVsbE9yVW5kZWYoYmFja2Ryb3BDb2xvcikpIHtcbiAgICAgICAgY29uc3QgYm9yZGVyUmFkaXVzID0gdG9UUkJMQ29ybmVycyhvcHRzLmJvcmRlclJhZGl1cyk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSB0b1BhZGRpbmcob3B0cy5iYWNrZHJvcFBhZGRpbmcpO1xuICAgICAgICBjdHguZmlsbFN0eWxlID0gYmFja2Ryb3BDb2xvcjtcbiAgICAgICAgY29uc3QgYmFja2Ryb3BMZWZ0ID0gbGVmdCAtIHBhZGRpbmcubGVmdDtcbiAgICAgICAgY29uc3QgYmFja2Ryb3BUb3AgPSB0b3AgLSBwYWRkaW5nLnRvcDtcbiAgICAgICAgY29uc3QgYmFja2Ryb3BXaWR0aCA9IHJpZ2h0IC0gbGVmdCArIHBhZGRpbmcud2lkdGg7XG4gICAgICAgIGNvbnN0IGJhY2tkcm9wSGVpZ2h0ID0gYm90dG9tIC0gdG9wICsgcGFkZGluZy5oZWlnaHQ7XG4gICAgICAgIGlmIChPYmplY3QudmFsdWVzKGJvcmRlclJhZGl1cykuc29tZSgodik9PnYgIT09IDApKSB7XG4gICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBhZGRSb3VuZGVkUmVjdFBhdGgoY3R4LCB7XG4gICAgICAgICAgICAgICAgeDogYmFja2Ryb3BMZWZ0LFxuICAgICAgICAgICAgICAgIHk6IGJhY2tkcm9wVG9wLFxuICAgICAgICAgICAgICAgIHc6IGJhY2tkcm9wV2lkdGgsXG4gICAgICAgICAgICAgICAgaDogYmFja2Ryb3BIZWlnaHQsXG4gICAgICAgICAgICAgICAgcmFkaXVzOiBib3JkZXJSYWRpdXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN0eC5maWxsUmVjdChiYWNrZHJvcExlZnQsIGJhY2tkcm9wVG9wLCBiYWNrZHJvcFdpZHRoLCBiYWNrZHJvcEhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBkcmF3UG9pbnRMYWJlbHMoc2NhbGUsIGxhYmVsQ291bnQpIHtcbiAgICBjb25zdCB7IGN0eCAsIG9wdGlvbnM6IHsgcG9pbnRMYWJlbHMgIH0gIH0gPSBzY2FsZTtcbiAgICBmb3IobGV0IGkgPSBsYWJlbENvdW50IC0gMTsgaSA+PSAwOyBpLS0pe1xuICAgICAgICBjb25zdCBpdGVtID0gc2NhbGUuX3BvaW50TGFiZWxJdGVtc1tpXTtcbiAgICAgICAgaWYgKCFpdGVtLnZpc2libGUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdHNBdEluZGV4ID0gcG9pbnRMYWJlbHMuc2V0Q29udGV4dChzY2FsZS5nZXRQb2ludExhYmVsQ29udGV4dChpKSk7XG4gICAgICAgIGRyYXdQb2ludExhYmVsQm94KGN0eCwgb3B0c0F0SW5kZXgsIGl0ZW0pO1xuICAgICAgICBjb25zdCBwbEZvbnQgPSB0b0ZvbnQob3B0c0F0SW5kZXguZm9udCk7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgLCB0ZXh0QWxpZ24gIH0gPSBpdGVtO1xuICAgICAgICByZW5kZXJUZXh0KGN0eCwgc2NhbGUuX3BvaW50TGFiZWxzW2ldLCB4LCB5ICsgcGxGb250LmxpbmVIZWlnaHQgLyAyLCBwbEZvbnQsIHtcbiAgICAgICAgICAgIGNvbG9yOiBvcHRzQXRJbmRleC5jb2xvcixcbiAgICAgICAgICAgIHRleHRBbGlnbjogdGV4dEFsaWduLFxuICAgICAgICAgICAgdGV4dEJhc2VsaW5lOiAnbWlkZGxlJ1xuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBwYXRoUmFkaXVzTGluZShzY2FsZSwgcmFkaXVzLCBjaXJjdWxhciwgbGFiZWxDb3VudCkge1xuICAgIGNvbnN0IHsgY3R4ICB9ID0gc2NhbGU7XG4gICAgaWYgKGNpcmN1bGFyKSB7XG4gICAgICAgIGN0eC5hcmMoc2NhbGUueENlbnRlciwgc2NhbGUueUNlbnRlciwgcmFkaXVzLCAwLCBUQVUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwb2ludFBvc2l0aW9uID0gc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbigwLCByYWRpdXMpO1xuICAgICAgICBjdHgubW92ZVRvKHBvaW50UG9zaXRpb24ueCwgcG9pbnRQb3NpdGlvbi55KTtcbiAgICAgICAgZm9yKGxldCBpID0gMTsgaSA8IGxhYmVsQ291bnQ7IGkrKyl7XG4gICAgICAgICAgICBwb2ludFBvc2l0aW9uID0gc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbihpLCByYWRpdXMpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyhwb2ludFBvc2l0aW9uLngsIHBvaW50UG9zaXRpb24ueSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBkcmF3UmFkaXVzTGluZShzY2FsZSwgZ3JpZExpbmVPcHRzLCByYWRpdXMsIGxhYmVsQ291bnQsIGJvcmRlck9wdHMpIHtcbiAgICBjb25zdCBjdHggPSBzY2FsZS5jdHg7XG4gICAgY29uc3QgY2lyY3VsYXIgPSBncmlkTGluZU9wdHMuY2lyY3VsYXI7XG4gICAgY29uc3QgeyBjb2xvciAsIGxpbmVXaWR0aCAgfSA9IGdyaWRMaW5lT3B0cztcbiAgICBpZiAoIWNpcmN1bGFyICYmICFsYWJlbENvdW50IHx8ICFjb2xvciB8fCAhbGluZVdpZHRoIHx8IHJhZGl1cyA8IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuICAgIGN0eC5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG4gICAgY3R4LnNldExpbmVEYXNoKGJvcmRlck9wdHMuZGFzaCB8fCBbXSk7XG4gICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gYm9yZGVyT3B0cy5kYXNoT2Zmc2V0O1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBwYXRoUmFkaXVzTGluZShzY2FsZSwgcmFkaXVzLCBjaXJjdWxhciwgbGFiZWxDb3VudCk7XG4gICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgIGN0eC5zdHJva2UoKTtcbiAgICBjdHgucmVzdG9yZSgpO1xufVxuZnVuY3Rpb24gY3JlYXRlUG9pbnRMYWJlbENvbnRleHQocGFyZW50LCBpbmRleCwgbGFiZWwpIHtcbiAgICByZXR1cm4gY3JlYXRlQ29udGV4dChwYXJlbnQsIHtcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIGluZGV4LFxuICAgICAgICB0eXBlOiAncG9pbnRMYWJlbCdcbiAgICB9KTtcbn1cbmNsYXNzIFJhZGlhbExpbmVhclNjYWxlIGV4dGVuZHMgTGluZWFyU2NhbGVCYXNlIHtcbiAgICBzdGF0aWMgaWQgPSAncmFkaWFsTGluZWFyJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgIGFuaW1hdGU6IHRydWUsXG4gICAgICAgIHBvc2l0aW9uOiAnY2hhcnRBcmVhJyxcbiAgICAgICAgYW5nbGVMaW5lczoge1xuICAgICAgICAgICAgZGlzcGxheTogdHJ1ZSxcbiAgICAgICAgICAgIGxpbmVXaWR0aDogMSxcbiAgICAgICAgICAgIGJvcmRlckRhc2g6IFtdLFxuICAgICAgICAgICAgYm9yZGVyRGFzaE9mZnNldDogMC4wXG4gICAgICAgIH0sXG4gICAgICAgIGdyaWQ6IHtcbiAgICAgICAgICAgIGNpcmN1bGFyOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBzdGFydEFuZ2xlOiAwLFxuICAgICAgICB0aWNrczoge1xuICAgICAgICAgICAgc2hvd0xhYmVsQmFja2Ryb3A6IHRydWUsXG4gICAgICAgICAgICBjYWxsYmFjazogVGlja3MuZm9ybWF0dGVycy5udW1lcmljXG4gICAgICAgIH0sXG4gICAgICAgIHBvaW50TGFiZWxzOiB7XG4gICAgICAgICAgICBiYWNrZHJvcENvbG9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBiYWNrZHJvcFBhZGRpbmc6IDIsXG4gICAgICAgICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgICAgICAgZm9udDoge1xuICAgICAgICAgICAgICAgIHNpemU6IDEwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2sgKGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhYmVsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhZGRpbmc6IDUsXG4gICAgICAgICAgICBjZW50ZXJQb2ludExhYmVsczogZmFsc2VcbiAgICAgICAgfVxuICAgIH07XG4gICAgc3RhdGljIGRlZmF1bHRSb3V0ZXMgPSB7XG4gICAgICAgICdhbmdsZUxpbmVzLmNvbG9yJzogJ2JvcmRlckNvbG9yJyxcbiAgICAgICAgJ3BvaW50TGFiZWxzLmNvbG9yJzogJ2NvbG9yJyxcbiAgICAgICAgJ3RpY2tzLmNvbG9yJzogJ2NvbG9yJ1xuICAgIH07XG4gICAgc3RhdGljIGRlc2NyaXB0b3JzID0ge1xuICAgICAgICBhbmdsZUxpbmVzOiB7XG4gICAgICAgICAgICBfZmFsbGJhY2s6ICdncmlkJ1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdHJ1Y3RvcihjZmcpe1xuICAgICAgICBzdXBlcihjZmcpO1xuICAgICAgICAgdGhpcy54Q2VudGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgdGhpcy55Q2VudGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgdGhpcy5kcmF3aW5nQXJlYSA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMuX3BvaW50TGFiZWxzID0gW107XG4gICAgICAgIHRoaXMuX3BvaW50TGFiZWxJdGVtcyA9IFtdO1xuICAgIH1cbiAgICBzZXREaW1lbnNpb25zKCkge1xuICAgICAgICBjb25zdCBwYWRkaW5nID0gdGhpcy5fcGFkZGluZyA9IHRvUGFkZGluZyhnZXRUaWNrQmFja2Ryb3BIZWlnaHQodGhpcy5vcHRpb25zKSAvIDIpO1xuICAgICAgICBjb25zdCB3ID0gdGhpcy53aWR0aCA9IHRoaXMubWF4V2lkdGggLSBwYWRkaW5nLndpZHRoO1xuICAgICAgICBjb25zdCBoID0gdGhpcy5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCAtIHBhZGRpbmcuaGVpZ2h0O1xuICAgICAgICB0aGlzLnhDZW50ZXIgPSBNYXRoLmZsb29yKHRoaXMubGVmdCArIHcgLyAyICsgcGFkZGluZy5sZWZ0KTtcbiAgICAgICAgdGhpcy55Q2VudGVyID0gTWF0aC5mbG9vcih0aGlzLnRvcCArIGggLyAyICsgcGFkZGluZy50b3ApO1xuICAgICAgICB0aGlzLmRyYXdpbmdBcmVhID0gTWF0aC5mbG9vcihNYXRoLm1pbih3LCBoKSAvIDIpO1xuICAgIH1cbiAgICBkZXRlcm1pbmVEYXRhTGltaXRzKCkge1xuICAgICAgICBjb25zdCB7IG1pbiAsIG1heCAgfSA9IHRoaXMuZ2V0TWluTWF4KGZhbHNlKTtcbiAgICAgICAgdGhpcy5taW4gPSBpc051bWJlckZpbml0ZShtaW4pICYmICFpc05hTihtaW4pID8gbWluIDogMDtcbiAgICAgICAgdGhpcy5tYXggPSBpc051bWJlckZpbml0ZShtYXgpICYmICFpc05hTihtYXgpID8gbWF4IDogMDtcbiAgICAgICAgdGhpcy5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCk7XG4gICAgfVxuIGNvbXB1dGVUaWNrTGltaXQoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5kcmF3aW5nQXJlYSAvIGdldFRpY2tCYWNrZHJvcEhlaWdodCh0aGlzLm9wdGlvbnMpKTtcbiAgICB9XG4gICAgZ2VuZXJhdGVUaWNrTGFiZWxzKHRpY2tzKSB7XG4gICAgICAgIExpbmVhclNjYWxlQmFzZS5wcm90b3R5cGUuZ2VuZXJhdGVUaWNrTGFiZWxzLmNhbGwodGhpcywgdGlja3MpO1xuICAgICAgICB0aGlzLl9wb2ludExhYmVscyA9IHRoaXMuZ2V0TGFiZWxzKCkubWFwKCh2YWx1ZSwgaW5kZXgpPT57XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IGNhbGxiYWNrKHRoaXMub3B0aW9ucy5wb2ludExhYmVscy5jYWxsYmFjaywgW1xuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICBdLCB0aGlzKTtcbiAgICAgICAgICAgIHJldHVybiBsYWJlbCB8fCBsYWJlbCA9PT0gMCA/IGxhYmVsIDogJyc7XG4gICAgICAgIH0pLmZpbHRlcigodiwgaSk9PnRoaXMuY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkoaSkpO1xuICAgIH1cbiAgICBmaXQoKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmIChvcHRzLmRpc3BsYXkgJiYgb3B0cy5wb2ludExhYmVscy5kaXNwbGF5KSB7XG4gICAgICAgICAgICBmaXRXaXRoUG9pbnRMYWJlbHModGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldENlbnRlclBvaW50KDAsIDAsIDAsIDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldENlbnRlclBvaW50KGxlZnRNb3ZlbWVudCwgcmlnaHRNb3ZlbWVudCwgdG9wTW92ZW1lbnQsIGJvdHRvbU1vdmVtZW50KSB7XG4gICAgICAgIHRoaXMueENlbnRlciArPSBNYXRoLmZsb29yKChsZWZ0TW92ZW1lbnQgLSByaWdodE1vdmVtZW50KSAvIDIpO1xuICAgICAgICB0aGlzLnlDZW50ZXIgKz0gTWF0aC5mbG9vcigodG9wTW92ZW1lbnQgLSBib3R0b21Nb3ZlbWVudCkgLyAyKTtcbiAgICAgICAgdGhpcy5kcmF3aW5nQXJlYSAtPSBNYXRoLm1pbih0aGlzLmRyYXdpbmdBcmVhIC8gMiwgTWF0aC5tYXgobGVmdE1vdmVtZW50LCByaWdodE1vdmVtZW50LCB0b3BNb3ZlbWVudCwgYm90dG9tTW92ZW1lbnQpKTtcbiAgICB9XG4gICAgZ2V0SW5kZXhBbmdsZShpbmRleCkge1xuICAgICAgICBjb25zdCBhbmdsZU11bHRpcGxpZXIgPSBUQVUgLyAodGhpcy5fcG9pbnRMYWJlbHMubGVuZ3RoIHx8IDEpO1xuICAgICAgICBjb25zdCBzdGFydEFuZ2xlID0gdGhpcy5vcHRpb25zLnN0YXJ0QW5nbGUgfHwgMDtcbiAgICAgICAgcmV0dXJuIF9ub3JtYWxpemVBbmdsZShpbmRleCAqIGFuZ2xlTXVsdGlwbGllciArIHRvUmFkaWFucyhzdGFydEFuZ2xlKSk7XG4gICAgfVxuICAgIGdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGlmIChpc051bGxPclVuZGVmKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY2FsaW5nRmFjdG9yID0gdGhpcy5kcmF3aW5nQXJlYSAvICh0aGlzLm1heCAtIHRoaXMubWluKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZXZlcnNlKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMubWF4IC0gdmFsdWUpICogc2NhbGluZ0ZhY3RvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHZhbHVlIC0gdGhpcy5taW4pICogc2NhbGluZ0ZhY3RvcjtcbiAgICB9XG4gICAgZ2V0VmFsdWVGb3JEaXN0YW5jZUZyb21DZW50ZXIoZGlzdGFuY2UpIHtcbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWYoZGlzdGFuY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjYWxlZERpc3RhbmNlID0gZGlzdGFuY2UgLyAodGhpcy5kcmF3aW5nQXJlYSAvICh0aGlzLm1heCAtIHRoaXMubWluKSk7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmV2ZXJzZSA/IHRoaXMubWF4IC0gc2NhbGVkRGlzdGFuY2UgOiB0aGlzLm1pbiArIHNjYWxlZERpc3RhbmNlO1xuICAgIH1cbiAgICBnZXRQb2ludExhYmVsQ29udGV4dChpbmRleCkge1xuICAgICAgICBjb25zdCBwb2ludExhYmVscyA9IHRoaXMuX3BvaW50TGFiZWxzIHx8IFtdO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHBvaW50TGFiZWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcG9pbnRMYWJlbCA9IHBvaW50TGFiZWxzW2luZGV4XTtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVQb2ludExhYmVsQ29udGV4dCh0aGlzLmdldENvbnRleHQoKSwgaW5kZXgsIHBvaW50TGFiZWwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldFBvaW50UG9zaXRpb24oaW5kZXgsIGRpc3RhbmNlRnJvbUNlbnRlciwgYWRkaXRpb25hbEFuZ2xlID0gMCkge1xuICAgICAgICBjb25zdCBhbmdsZSA9IHRoaXMuZ2V0SW5kZXhBbmdsZShpbmRleCkgLSBIQUxGX1BJICsgYWRkaXRpb25hbEFuZ2xlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogTWF0aC5jb3MoYW5nbGUpICogZGlzdGFuY2VGcm9tQ2VudGVyICsgdGhpcy54Q2VudGVyLFxuICAgICAgICAgICAgeTogTWF0aC5zaW4oYW5nbGUpICogZGlzdGFuY2VGcm9tQ2VudGVyICsgdGhpcy55Q2VudGVyLFxuICAgICAgICAgICAgYW5nbGVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKGluZGV4LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQb2ludFBvc2l0aW9uKGluZGV4LCB0aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHZhbHVlKSk7XG4gICAgfVxuICAgIGdldEJhc2VQb3NpdGlvbihpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUoaW5kZXggfHwgMCwgdGhpcy5nZXRCYXNlVmFsdWUoKSk7XG4gICAgfVxuICAgIGdldFBvaW50TGFiZWxQb3NpdGlvbihpbmRleCkge1xuICAgICAgICBjb25zdCB7IGxlZnQgLCB0b3AgLCByaWdodCAsIGJvdHRvbSAgfSA9IHRoaXMuX3BvaW50TGFiZWxJdGVtc1tpbmRleF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICBib3R0b21cbiAgICAgICAgfTtcbiAgICB9XG4gZHJhd0JhY2tncm91bmQoKSB7XG4gICAgICAgIGNvbnN0IHsgYmFja2dyb3VuZENvbG9yICwgZ3JpZDogeyBjaXJjdWxhciAgfSAgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgaWYgKGJhY2tncm91bmRDb2xvcikge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgcGF0aFJhZGl1c0xpbmUodGhpcywgdGhpcy5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSh0aGlzLl9lbmRWYWx1ZSksIGNpcmN1bGFyLCB0aGlzLl9wb2ludExhYmVscy5sZW5ndGgpO1xuICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgICAgIGN0eC5maWxsKCk7XG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgfVxuIGRyYXdHcmlkKCkge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgeyBhbmdsZUxpbmVzICwgZ3JpZCAsIGJvcmRlciAgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IGxhYmVsQ291bnQgPSB0aGlzLl9wb2ludExhYmVscy5sZW5ndGg7XG4gICAgICAgIGxldCBpLCBvZmZzZXQsIHBvc2l0aW9uO1xuICAgICAgICBpZiAob3B0cy5wb2ludExhYmVscy5kaXNwbGF5KSB7XG4gICAgICAgICAgICBkcmF3UG9pbnRMYWJlbHModGhpcywgbGFiZWxDb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdyaWQuZGlzcGxheSkge1xuICAgICAgICAgICAgdGhpcy50aWNrcy5mb3JFYWNoKCh0aWNrLCBpbmRleCk9PntcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IDAgfHwgaW5kZXggPT09IDAgJiYgdGhpcy5taW4gPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHRoaXMuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUodGljay52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRzQXRJbmRleCA9IGdyaWQuc2V0Q29udGV4dChjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0c0F0SW5kZXhCb3JkZXIgPSBib3JkZXIuc2V0Q29udGV4dChjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgZHJhd1JhZGl1c0xpbmUodGhpcywgb3B0c0F0SW5kZXgsIG9mZnNldCwgbGFiZWxDb3VudCwgb3B0c0F0SW5kZXhCb3JkZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbmdsZUxpbmVzLmRpc3BsYXkpIHtcbiAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICBmb3IoaSA9IGxhYmVsQ291bnQgLSAxOyBpID49IDA7IGktLSl7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0c0F0SW5kZXggPSBhbmdsZUxpbmVzLnNldENvbnRleHQodGhpcy5nZXRQb2ludExhYmVsQ29udGV4dChpKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb2xvciAsIGxpbmVXaWR0aCAgfSA9IG9wdHNBdEluZGV4O1xuICAgICAgICAgICAgICAgIGlmICghbGluZVdpZHRoIHx8ICFjb2xvcikge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcbiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjtcbiAgICAgICAgICAgICAgICBjdHguc2V0TGluZURhc2gob3B0c0F0SW5kZXguYm9yZGVyRGFzaCk7XG4gICAgICAgICAgICAgICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gb3B0c0F0SW5kZXguYm9yZGVyRGFzaE9mZnNldDtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKG9wdHMucmV2ZXJzZSA/IHRoaXMubWluIDogdGhpcy5tYXgpO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5nZXRQb2ludFBvc2l0aW9uKGksIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8odGhpcy54Q2VudGVyLCB0aGlzLnlDZW50ZXIpO1xuICAgICAgICAgICAgICAgIGN0eC5saW5lVG8ocG9zaXRpb24ueCwgcG9zaXRpb24ueSk7XG4gICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiBkcmF3Qm9yZGVyKCkge31cbiBkcmF3TGFiZWxzKCkge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgdGlja09wdHMgPSBvcHRzLnRpY2tzO1xuICAgICAgICBpZiAoIXRpY2tPcHRzLmRpc3BsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydEFuZ2xlID0gdGhpcy5nZXRJbmRleEFuZ2xlKDApO1xuICAgICAgICBsZXQgb2Zmc2V0LCB3aWR0aDtcbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSh0aGlzLnhDZW50ZXIsIHRoaXMueUNlbnRlcik7XG4gICAgICAgIGN0eC5yb3RhdGUoc3RhcnRBbmdsZSk7XG4gICAgICAgIGN0eC50ZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuICAgICAgICB0aGlzLnRpY2tzLmZvckVhY2goKHRpY2ssIGluZGV4KT0+e1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwICYmIHRoaXMubWluID49IDAgJiYgIW9wdHMucmV2ZXJzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9wdHNBdEluZGV4ID0gdGlja09wdHMuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoaW5kZXgpKTtcbiAgICAgICAgICAgIGNvbnN0IHRpY2tGb250ID0gdG9Gb250KG9wdHNBdEluZGV4LmZvbnQpO1xuICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSh0aGlzLnRpY2tzW2luZGV4XS52YWx1ZSk7XG4gICAgICAgICAgICBpZiAob3B0c0F0SW5kZXguc2hvd0xhYmVsQmFja2Ryb3ApIHtcbiAgICAgICAgICAgICAgICBjdHguZm9udCA9IHRpY2tGb250LnN0cmluZztcbiAgICAgICAgICAgICAgICB3aWR0aCA9IGN0eC5tZWFzdXJlVGV4dCh0aWNrLmxhYmVsKS53aWR0aDtcbiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gb3B0c0F0SW5kZXguYmFja2Ryb3BDb2xvcjtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWRkaW5nID0gdG9QYWRkaW5nKG9wdHNBdEluZGV4LmJhY2tkcm9wUGFkZGluZyk7XG4gICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KC13aWR0aCAvIDIgLSBwYWRkaW5nLmxlZnQsIC1vZmZzZXQgLSB0aWNrRm9udC5zaXplIC8gMiAtIHBhZGRpbmcudG9wLCB3aWR0aCArIHBhZGRpbmcud2lkdGgsIHRpY2tGb250LnNpemUgKyBwYWRkaW5nLmhlaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW5kZXJUZXh0KGN0eCwgdGljay5sYWJlbCwgMCwgLW9mZnNldCwgdGlja0ZvbnQsIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogb3B0c0F0SW5kZXguY29sb3IsXG4gICAgICAgICAgICAgICAgc3Ryb2tlQ29sb3I6IG9wdHNBdEluZGV4LnRleHRTdHJva2VDb2xvcixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogb3B0c0F0SW5kZXgudGV4dFN0cm9rZVdpZHRoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfVxuIGRyYXdUaXRsZSgpIHt9XG59XG5cbmNvbnN0IElOVEVSVkFMUyA9IHtcbiAgICBtaWxsaXNlY29uZDoge1xuICAgICAgICBjb21tb246IHRydWUsXG4gICAgICAgIHNpemU6IDEsXG4gICAgICAgIHN0ZXBzOiAxMDAwXG4gICAgfSxcbiAgICBzZWNvbmQ6IHtcbiAgICAgICAgY29tbW9uOiB0cnVlLFxuICAgICAgICBzaXplOiAxMDAwLFxuICAgICAgICBzdGVwczogNjBcbiAgICB9LFxuICAgIG1pbnV0ZToge1xuICAgICAgICBjb21tb246IHRydWUsXG4gICAgICAgIHNpemU6IDYwMDAwLFxuICAgICAgICBzdGVwczogNjBcbiAgICB9LFxuICAgIGhvdXI6IHtcbiAgICAgICAgY29tbW9uOiB0cnVlLFxuICAgICAgICBzaXplOiAzNjAwMDAwLFxuICAgICAgICBzdGVwczogMjRcbiAgICB9LFxuICAgIGRheToge1xuICAgICAgICBjb21tb246IHRydWUsXG4gICAgICAgIHNpemU6IDg2NDAwMDAwLFxuICAgICAgICBzdGVwczogMzBcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgY29tbW9uOiBmYWxzZSxcbiAgICAgICAgc2l6ZTogNjA0ODAwMDAwLFxuICAgICAgICBzdGVwczogNFxuICAgIH0sXG4gICAgbW9udGg6IHtcbiAgICAgICAgY29tbW9uOiB0cnVlLFxuICAgICAgICBzaXplOiAyLjYyOGU5LFxuICAgICAgICBzdGVwczogMTJcbiAgICB9LFxuICAgIHF1YXJ0ZXI6IHtcbiAgICAgICAgY29tbW9uOiBmYWxzZSxcbiAgICAgICAgc2l6ZTogNy44ODRlOSxcbiAgICAgICAgc3RlcHM6IDRcbiAgICB9LFxuICAgIHllYXI6IHtcbiAgICAgICAgY29tbW9uOiB0cnVlLFxuICAgICAgICBzaXplOiAzLjE1NGUxMFxuICAgIH1cbn07XG4gY29uc3QgVU5JVFMgPSAgLyogI19fUFVSRV9fICovIE9iamVjdC5rZXlzKElOVEVSVkFMUyk7XG4gZnVuY3Rpb24gc29ydGVyKGEsIGIpIHtcbiAgICByZXR1cm4gYSAtIGI7XG59XG4gZnVuY3Rpb24gcGFyc2Uoc2NhbGUsIGlucHV0KSB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWYoaW5wdXQpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBhZGFwdGVyID0gc2NhbGUuX2FkYXB0ZXI7XG4gICAgY29uc3QgeyBwYXJzZXIgLCByb3VuZCAsIGlzb1dlZWtkYXkgIH0gPSBzY2FsZS5fcGFyc2VPcHRzO1xuICAgIGxldCB2YWx1ZSA9IGlucHV0O1xuICAgIGlmICh0eXBlb2YgcGFyc2VyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VyKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKCFpc051bWJlckZpbml0ZSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB0eXBlb2YgcGFyc2VyID09PSAnc3RyaW5nJyA/IGFkYXB0ZXIucGFyc2UodmFsdWUsICBwYXJzZXIpIDogYWRhcHRlci5wYXJzZSh2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHJvdW5kKSB7XG4gICAgICAgIHZhbHVlID0gcm91bmQgPT09ICd3ZWVrJyAmJiAoaXNOdW1iZXIoaXNvV2Vla2RheSkgfHwgaXNvV2Vla2RheSA9PT0gdHJ1ZSkgPyBhZGFwdGVyLnN0YXJ0T2YodmFsdWUsICdpc29XZWVrJywgaXNvV2Vla2RheSkgOiBhZGFwdGVyLnN0YXJ0T2YodmFsdWUsIHJvdW5kKTtcbiAgICB9XG4gICAgcmV0dXJuICt2YWx1ZTtcbn1cbiBmdW5jdGlvbiBkZXRlcm1pbmVVbml0Rm9yQXV0b1RpY2tzKG1pblVuaXQsIG1pbiwgbWF4LCBjYXBhY2l0eSkge1xuICAgIGNvbnN0IGlsZW4gPSBVTklUUy5sZW5ndGg7XG4gICAgZm9yKGxldCBpID0gVU5JVFMuaW5kZXhPZihtaW5Vbml0KTsgaSA8IGlsZW4gLSAxOyArK2kpe1xuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IElOVEVSVkFMU1tVTklUU1tpXV07XG4gICAgICAgIGNvbnN0IGZhY3RvciA9IGludGVydmFsLnN0ZXBzID8gaW50ZXJ2YWwuc3RlcHMgOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICAgICAgaWYgKGludGVydmFsLmNvbW1vbiAmJiBNYXRoLmNlaWwoKG1heCAtIG1pbikgLyAoZmFjdG9yICogaW50ZXJ2YWwuc2l6ZSkpIDw9IGNhcGFjaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gVU5JVFNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFVOSVRTW2lsZW4gLSAxXTtcbn1cbiBmdW5jdGlvbiBkZXRlcm1pbmVVbml0Rm9yRm9ybWF0dGluZyhzY2FsZSwgbnVtVGlja3MsIG1pblVuaXQsIG1pbiwgbWF4KSB7XG4gICAgZm9yKGxldCBpID0gVU5JVFMubGVuZ3RoIC0gMTsgaSA+PSBVTklUUy5pbmRleE9mKG1pblVuaXQpOyBpLS0pe1xuICAgICAgICBjb25zdCB1bml0ID0gVU5JVFNbaV07XG4gICAgICAgIGlmIChJTlRFUlZBTFNbdW5pdF0uY29tbW9uICYmIHNjYWxlLl9hZGFwdGVyLmRpZmYobWF4LCBtaW4sIHVuaXQpID49IG51bVRpY2tzIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuaXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFVOSVRTW21pblVuaXQgPyBVTklUUy5pbmRleE9mKG1pblVuaXQpIDogMF07XG59XG4gZnVuY3Rpb24gZGV0ZXJtaW5lTWFqb3JVbml0KHVuaXQpIHtcbiAgICBmb3IobGV0IGkgPSBVTklUUy5pbmRleE9mKHVuaXQpICsgMSwgaWxlbiA9IFVOSVRTLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIGlmIChJTlRFUlZBTFNbVU5JVFNbaV1dLmNvbW1vbikge1xuICAgICAgICAgICAgcmV0dXJuIFVOSVRTW2ldO1xuICAgICAgICB9XG4gICAgfVxufVxuIGZ1bmN0aW9uIGFkZFRpY2sodGlja3MsIHRpbWUsIHRpbWVzdGFtcHMpIHtcbiAgICBpZiAoIXRpbWVzdGFtcHMpIHtcbiAgICAgICAgdGlja3NbdGltZV0gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGltZXN0YW1wcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgeyBsbyAsIGhpICB9ID0gX2xvb2t1cCh0aW1lc3RhbXBzLCB0aW1lKTtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gdGltZXN0YW1wc1tsb10gPj0gdGltZSA/IHRpbWVzdGFtcHNbbG9dIDogdGltZXN0YW1wc1toaV07XG4gICAgICAgIHRpY2tzW3RpbWVzdGFtcF0gPSB0cnVlO1xuICAgIH1cbn1cbiBmdW5jdGlvbiBzZXRNYWpvclRpY2tzKHNjYWxlLCB0aWNrcywgbWFwLCBtYWpvclVuaXQpIHtcbiAgICBjb25zdCBhZGFwdGVyID0gc2NhbGUuX2FkYXB0ZXI7XG4gICAgY29uc3QgZmlyc3QgPSArYWRhcHRlci5zdGFydE9mKHRpY2tzWzBdLnZhbHVlLCBtYWpvclVuaXQpO1xuICAgIGNvbnN0IGxhc3QgPSB0aWNrc1t0aWNrcy5sZW5ndGggLSAxXS52YWx1ZTtcbiAgICBsZXQgbWFqb3IsIGluZGV4O1xuICAgIGZvcihtYWpvciA9IGZpcnN0OyBtYWpvciA8PSBsYXN0OyBtYWpvciA9ICthZGFwdGVyLmFkZChtYWpvciwgMSwgbWFqb3JVbml0KSl7XG4gICAgICAgIGluZGV4ID0gbWFwW21ham9yXTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRpY2tzW2luZGV4XS5tYWpvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRpY2tzO1xufVxuIGZ1bmN0aW9uIHRpY2tzRnJvbVRpbWVzdGFtcHMoc2NhbGUsIHZhbHVlcywgbWFqb3JVbml0KSB7XG4gICAgY29uc3QgdGlja3MgPSBbXTtcbiAgICAgY29uc3QgbWFwID0ge307XG4gICAgY29uc3QgaWxlbiA9IHZhbHVlcy5sZW5ndGg7XG4gICAgbGV0IGksIHZhbHVlO1xuICAgIGZvcihpID0gMDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIHZhbHVlID0gdmFsdWVzW2ldO1xuICAgICAgICBtYXBbdmFsdWVdID0gaTtcbiAgICAgICAgdGlja3MucHVzaCh7XG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIG1ham9yOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGlsZW4gPT09IDAgfHwgIW1ham9yVW5pdCA/IHRpY2tzIDogc2V0TWFqb3JUaWNrcyhzY2FsZSwgdGlja3MsIG1hcCwgbWFqb3JVbml0KTtcbn1cbmNsYXNzIFRpbWVTY2FsZSBleHRlbmRzIFNjYWxlIHtcbiAgICBzdGF0aWMgaWQgPSAndGltZSc7XG4gc3RhdGljIGRlZmF1bHRzID0ge1xuIGJvdW5kczogJ2RhdGEnLFxuICAgICAgICBhZGFwdGVyczoge30sXG4gICAgICAgIHRpbWU6IHtcbiAgICAgICAgICAgIHBhcnNlcjogZmFsc2UsXG4gICAgICAgICAgICB1bml0OiBmYWxzZSxcbiAgICAgICAgICAgIHJvdW5kOiBmYWxzZSxcbiAgICAgICAgICAgIGlzb1dlZWtkYXk6IGZhbHNlLFxuICAgICAgICAgICAgbWluVW5pdDogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgICAgIGRpc3BsYXlGb3JtYXRzOiB7fVxuICAgICAgICB9LFxuICAgICAgICB0aWNrczoge1xuIHNvdXJjZTogJ2F1dG8nLFxuICAgICAgICAgICAgY2FsbGJhY2s6IGZhbHNlLFxuICAgICAgICAgICAgbWFqb3I6IHtcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiBjb25zdHJ1Y3Rvcihwcm9wcyl7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgIHRoaXMuX2NhY2hlID0ge1xuICAgICAgICAgICAgZGF0YTogW10sXG4gICAgICAgICAgICBsYWJlbHM6IFtdLFxuICAgICAgICAgICAgYWxsOiBbXVxuICAgICAgICB9O1xuICAgICAgICAgdGhpcy5fdW5pdCA9ICdkYXknO1xuICAgICAgICAgdGhpcy5fbWFqb3JVbml0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9vZmZzZXRzID0ge307XG4gICAgICAgIHRoaXMuX25vcm1hbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFyc2VPcHRzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpbml0KHNjYWxlT3B0cywgb3B0cyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBzY2FsZU9wdHMudGltZSB8fCAoc2NhbGVPcHRzLnRpbWUgPSB7fSk7XG4gICAgICAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5fYWRhcHRlciA9IG5ldyBhZGFwdGVycy5fZGF0ZShzY2FsZU9wdHMuYWRhcHRlcnMuZGF0ZSk7XG4gICAgICAgIGFkYXB0ZXIuaW5pdChvcHRzKTtcbiAgICAgICAgbWVyZ2VJZih0aW1lLmRpc3BsYXlGb3JtYXRzLCBhZGFwdGVyLmZvcm1hdHMoKSk7XG4gICAgICAgIHRoaXMuX3BhcnNlT3B0cyA9IHtcbiAgICAgICAgICAgIHBhcnNlcjogdGltZS5wYXJzZXIsXG4gICAgICAgICAgICByb3VuZDogdGltZS5yb3VuZCxcbiAgICAgICAgICAgIGlzb1dlZWtkYXk6IHRpbWUuaXNvV2Vla2RheVxuICAgICAgICB9O1xuICAgICAgICBzdXBlci5pbml0KHNjYWxlT3B0cyk7XG4gICAgICAgIHRoaXMuX25vcm1hbGl6ZWQgPSBvcHRzLm5vcm1hbGl6ZWQ7XG4gICAgfVxuIHBhcnNlKHJhdywgaW5kZXgpIHtcbiAgICAgICAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2UodGhpcywgcmF3KTtcbiAgICB9XG4gICAgYmVmb3JlTGF5b3V0KCkge1xuICAgICAgICBzdXBlci5iZWZvcmVMYXlvdXQoKTtcbiAgICAgICAgdGhpcy5fY2FjaGUgPSB7XG4gICAgICAgICAgICBkYXRhOiBbXSxcbiAgICAgICAgICAgIGxhYmVsczogW10sXG4gICAgICAgICAgICBhbGw6IFtdXG4gICAgICAgIH07XG4gICAgfVxuICAgIGRldGVybWluZURhdGFMaW1pdHMoKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGFkYXB0ZXIgPSB0aGlzLl9hZGFwdGVyO1xuICAgICAgICBjb25zdCB1bml0ID0gb3B0aW9ucy50aW1lLnVuaXQgfHwgJ2RheSc7XG4gICAgICAgIGxldCB7IG1pbiAsIG1heCAsIG1pbkRlZmluZWQgLCBtYXhEZWZpbmVkICB9ID0gdGhpcy5nZXRVc2VyQm91bmRzKCk7XG4gZnVuY3Rpb24gX2FwcGx5Qm91bmRzKGJvdW5kcykge1xuICAgICAgICAgICAgaWYgKCFtaW5EZWZpbmVkICYmICFpc05hTihib3VuZHMubWluKSkge1xuICAgICAgICAgICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgYm91bmRzLm1pbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW1heERlZmluZWQgJiYgIWlzTmFOKGJvdW5kcy5tYXgpKSB7XG4gICAgICAgICAgICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCBib3VuZHMubWF4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1pbkRlZmluZWQgfHwgIW1heERlZmluZWQpIHtcbiAgICAgICAgICAgIF9hcHBseUJvdW5kcyh0aGlzLl9nZXRMYWJlbEJvdW5kcygpKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJvdW5kcyAhPT0gJ3RpY2tzJyB8fCBvcHRpb25zLnRpY2tzLnNvdXJjZSAhPT0gJ2xhYmVscycpIHtcbiAgICAgICAgICAgICAgICBfYXBwbHlCb3VuZHModGhpcy5nZXRNaW5NYXgoZmFsc2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBtaW4gPSBpc051bWJlckZpbml0ZShtaW4pICYmICFpc05hTihtaW4pID8gbWluIDogK2FkYXB0ZXIuc3RhcnRPZihEYXRlLm5vdygpLCB1bml0KTtcbiAgICAgICAgbWF4ID0gaXNOdW1iZXJGaW5pdGUobWF4KSAmJiAhaXNOYU4obWF4KSA/IG1heCA6ICthZGFwdGVyLmVuZE9mKERhdGUubm93KCksIHVuaXQpICsgMTtcbiAgICAgICAgdGhpcy5taW4gPSBNYXRoLm1pbihtaW4sIG1heCAtIDEpO1xuICAgICAgICB0aGlzLm1heCA9IE1hdGgubWF4KG1pbiArIDEsIG1heCk7XG4gICAgfVxuIF9nZXRMYWJlbEJvdW5kcygpIHtcbiAgICAgICAgY29uc3QgYXJyID0gdGhpcy5nZXRMYWJlbFRpbWVzdGFtcHMoKTtcbiAgICAgICAgbGV0IG1pbiA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgICAgbGV0IG1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICAgICAgaWYgKGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIG1pbiA9IGFyclswXTtcbiAgICAgICAgICAgIG1heCA9IGFyclthcnIubGVuZ3RoIC0gMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgIG1heFxuICAgICAgICB9O1xuICAgIH1cbiBidWlsZFRpY2tzKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCB0aW1lT3B0cyA9IG9wdGlvbnMudGltZTtcbiAgICAgICAgY29uc3QgdGlja09wdHMgPSBvcHRpb25zLnRpY2tzO1xuICAgICAgICBjb25zdCB0aW1lc3RhbXBzID0gdGlja09wdHMuc291cmNlID09PSAnbGFiZWxzJyA/IHRoaXMuZ2V0TGFiZWxUaW1lc3RhbXBzKCkgOiB0aGlzLl9nZW5lcmF0ZSgpO1xuICAgICAgICBpZiAob3B0aW9ucy5ib3VuZHMgPT09ICd0aWNrcycgJiYgdGltZXN0YW1wcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubWluID0gdGhpcy5fdXNlck1pbiB8fCB0aW1lc3RhbXBzWzBdO1xuICAgICAgICAgICAgdGhpcy5tYXggPSB0aGlzLl91c2VyTWF4IHx8IHRpbWVzdGFtcHNbdGltZXN0YW1wcy5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbjtcbiAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXg7XG4gICAgICAgIGNvbnN0IHRpY2tzID0gX2ZpbHRlckJldHdlZW4odGltZXN0YW1wcywgbWluLCBtYXgpO1xuICAgICAgICB0aGlzLl91bml0ID0gdGltZU9wdHMudW5pdCB8fCAodGlja09wdHMuYXV0b1NraXAgPyBkZXRlcm1pbmVVbml0Rm9yQXV0b1RpY2tzKHRpbWVPcHRzLm1pblVuaXQsIHRoaXMubWluLCB0aGlzLm1heCwgdGhpcy5fZ2V0TGFiZWxDYXBhY2l0eShtaW4pKSA6IGRldGVybWluZVVuaXRGb3JGb3JtYXR0aW5nKHRoaXMsIHRpY2tzLmxlbmd0aCwgdGltZU9wdHMubWluVW5pdCwgdGhpcy5taW4sIHRoaXMubWF4KSk7XG4gICAgICAgIHRoaXMuX21ham9yVW5pdCA9ICF0aWNrT3B0cy5tYWpvci5lbmFibGVkIHx8IHRoaXMuX3VuaXQgPT09ICd5ZWFyJyA/IHVuZGVmaW5lZCA6IGRldGVybWluZU1ham9yVW5pdCh0aGlzLl91bml0KTtcbiAgICAgICAgdGhpcy5pbml0T2Zmc2V0cyh0aW1lc3RhbXBzKTtcbiAgICAgICAgaWYgKG9wdGlvbnMucmV2ZXJzZSkge1xuICAgICAgICAgICAgdGlja3MucmV2ZXJzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aWNrc0Zyb21UaW1lc3RhbXBzKHRoaXMsIHRpY2tzLCB0aGlzLl9tYWpvclVuaXQpO1xuICAgIH1cbiAgICBhZnRlckF1dG9Ta2lwKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9mZnNldEFmdGVyQXV0b3NraXApIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdE9mZnNldHModGhpcy50aWNrcy5tYXAoKHRpY2spPT4rdGljay52YWx1ZSkpO1xuICAgICAgICB9XG4gICAgfVxuIGluaXRPZmZzZXRzKHRpbWVzdGFtcHMgPSBbXSkge1xuICAgICAgICBsZXQgc3RhcnQgPSAwO1xuICAgICAgICBsZXQgZW5kID0gMDtcbiAgICAgICAgbGV0IGZpcnN0LCBsYXN0O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9mZnNldCAmJiB0aW1lc3RhbXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgZmlyc3QgPSB0aGlzLmdldERlY2ltYWxGb3JWYWx1ZSh0aW1lc3RhbXBzWzBdKTtcbiAgICAgICAgICAgIGlmICh0aW1lc3RhbXBzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0ID0gMSAtIGZpcnN0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGFydCA9ICh0aGlzLmdldERlY2ltYWxGb3JWYWx1ZSh0aW1lc3RhbXBzWzFdKSAtIGZpcnN0KSAvIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0ID0gdGhpcy5nZXREZWNpbWFsRm9yVmFsdWUodGltZXN0YW1wc1t0aW1lc3RhbXBzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgIGlmICh0aW1lc3RhbXBzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVuZCA9IGxhc3Q7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVuZCA9IChsYXN0IC0gdGhpcy5nZXREZWNpbWFsRm9yVmFsdWUodGltZXN0YW1wc1t0aW1lc3RhbXBzLmxlbmd0aCAtIDJdKSkgLyAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gdGltZXN0YW1wcy5sZW5ndGggPCAzID8gMC41IDogMC4yNTtcbiAgICAgICAgc3RhcnQgPSBfbGltaXRWYWx1ZShzdGFydCwgMCwgbGltaXQpO1xuICAgICAgICBlbmQgPSBfbGltaXRWYWx1ZShlbmQsIDAsIGxpbWl0KTtcbiAgICAgICAgdGhpcy5fb2Zmc2V0cyA9IHtcbiAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgZW5kLFxuICAgICAgICAgICAgZmFjdG9yOiAxIC8gKHN0YXJ0ICsgMSArIGVuZClcbiAgICAgICAgfTtcbiAgICB9XG4gX2dlbmVyYXRlKCkge1xuICAgICAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5fYWRhcHRlcjtcbiAgICAgICAgY29uc3QgbWluID0gdGhpcy5taW47XG4gICAgICAgIGNvbnN0IG1heCA9IHRoaXMubWF4O1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCB0aW1lT3B0cyA9IG9wdGlvbnMudGltZTtcbiAgICAgICAgY29uc3QgbWlub3IgPSB0aW1lT3B0cy51bml0IHx8IGRldGVybWluZVVuaXRGb3JBdXRvVGlja3ModGltZU9wdHMubWluVW5pdCwgbWluLCBtYXgsIHRoaXMuX2dldExhYmVsQ2FwYWNpdHkobWluKSk7XG4gICAgICAgIGNvbnN0IHN0ZXBTaXplID0gdmFsdWVPckRlZmF1bHQob3B0aW9ucy50aWNrcy5zdGVwU2l6ZSwgMSk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBtaW5vciA9PT0gJ3dlZWsnID8gdGltZU9wdHMuaXNvV2Vla2RheSA6IGZhbHNlO1xuICAgICAgICBjb25zdCBoYXNXZWVrZGF5ID0gaXNOdW1iZXIod2Vla2RheSkgfHwgd2Vla2RheSA9PT0gdHJ1ZTtcbiAgICAgICAgY29uc3QgdGlja3MgPSB7fTtcbiAgICAgICAgbGV0IGZpcnN0ID0gbWluO1xuICAgICAgICBsZXQgdGltZSwgY291bnQ7XG4gICAgICAgIGlmIChoYXNXZWVrZGF5KSB7XG4gICAgICAgICAgICBmaXJzdCA9ICthZGFwdGVyLnN0YXJ0T2YoZmlyc3QsICdpc29XZWVrJywgd2Vla2RheSk7XG4gICAgICAgIH1cbiAgICAgICAgZmlyc3QgPSArYWRhcHRlci5zdGFydE9mKGZpcnN0LCBoYXNXZWVrZGF5ID8gJ2RheScgOiBtaW5vcik7XG4gICAgICAgIGlmIChhZGFwdGVyLmRpZmYobWF4LCBtaW4sIG1pbm9yKSA+IDEwMDAwMCAqIHN0ZXBTaXplKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWluICsgJyBhbmQgJyArIG1heCArICcgYXJlIHRvbyBmYXIgYXBhcnQgd2l0aCBzdGVwU2l6ZSBvZiAnICsgc3RlcFNpemUgKyAnICcgKyBtaW5vcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGltZXN0YW1wcyA9IG9wdGlvbnMudGlja3Muc291cmNlID09PSAnZGF0YScgJiYgdGhpcy5nZXREYXRhVGltZXN0YW1wcygpO1xuICAgICAgICBmb3IodGltZSA9IGZpcnN0LCBjb3VudCA9IDA7IHRpbWUgPCBtYXg7IHRpbWUgPSArYWRhcHRlci5hZGQodGltZSwgc3RlcFNpemUsIG1pbm9yKSwgY291bnQrKyl7XG4gICAgICAgICAgICBhZGRUaWNrKHRpY2tzLCB0aW1lLCB0aW1lc3RhbXBzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGltZSA9PT0gbWF4IHx8IG9wdGlvbnMuYm91bmRzID09PSAndGlja3MnIHx8IGNvdW50ID09PSAxKSB7XG4gICAgICAgICAgICBhZGRUaWNrKHRpY2tzLCB0aW1lLCB0aW1lc3RhbXBzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGlja3MpLnNvcnQoc29ydGVyKS5tYXAoKHgpPT4reCk7XG4gICAgfVxuIGdldExhYmVsRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgYWRhcHRlciA9IHRoaXMuX2FkYXB0ZXI7XG4gICAgICAgIGNvbnN0IHRpbWVPcHRzID0gdGhpcy5vcHRpb25zLnRpbWU7XG4gICAgICAgIGlmICh0aW1lT3B0cy50b29sdGlwRm9ybWF0KSB7XG4gICAgICAgICAgICByZXR1cm4gYWRhcHRlci5mb3JtYXQodmFsdWUsIHRpbWVPcHRzLnRvb2x0aXBGb3JtYXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhZGFwdGVyLmZvcm1hdCh2YWx1ZSwgdGltZU9wdHMuZGlzcGxheUZvcm1hdHMuZGF0ZXRpbWUpO1xuICAgIH1cbiBmb3JtYXQodmFsdWUsIGZvcm1hdCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBmb3JtYXRzID0gb3B0aW9ucy50aW1lLmRpc3BsYXlGb3JtYXRzO1xuICAgICAgICBjb25zdCB1bml0ID0gdGhpcy5fdW5pdDtcbiAgICAgICAgY29uc3QgZm10ID0gZm9ybWF0IHx8IGZvcm1hdHNbdW5pdF07XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGFwdGVyLmZvcm1hdCh2YWx1ZSwgZm10KTtcbiAgICB9XG4gX3RpY2tGb3JtYXRGdW5jdGlvbih0aW1lLCBpbmRleCwgdGlja3MsIGZvcm1hdCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBvcHRpb25zLnRpY2tzLmNhbGxiYWNrO1xuICAgICAgICBpZiAoZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZm9ybWF0dGVyLCBbXG4gICAgICAgICAgICAgICAgdGltZSxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICB0aWNrc1xuICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybWF0cyA9IG9wdGlvbnMudGltZS5kaXNwbGF5Rm9ybWF0cztcbiAgICAgICAgY29uc3QgdW5pdCA9IHRoaXMuX3VuaXQ7XG4gICAgICAgIGNvbnN0IG1ham9yVW5pdCA9IHRoaXMuX21ham9yVW5pdDtcbiAgICAgICAgY29uc3QgbWlub3JGb3JtYXQgPSB1bml0ICYmIGZvcm1hdHNbdW5pdF07XG4gICAgICAgIGNvbnN0IG1ham9yRm9ybWF0ID0gbWFqb3JVbml0ICYmIGZvcm1hdHNbbWFqb3JVbml0XTtcbiAgICAgICAgY29uc3QgdGljayA9IHRpY2tzW2luZGV4XTtcbiAgICAgICAgY29uc3QgbWFqb3IgPSBtYWpvclVuaXQgJiYgbWFqb3JGb3JtYXQgJiYgdGljayAmJiB0aWNrLm1ham9yO1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRhcHRlci5mb3JtYXQodGltZSwgZm9ybWF0IHx8IChtYWpvciA/IG1ham9yRm9ybWF0IDogbWlub3JGb3JtYXQpKTtcbiAgICB9XG4gZ2VuZXJhdGVUaWNrTGFiZWxzKHRpY2tzKSB7XG4gICAgICAgIGxldCBpLCBpbGVuLCB0aWNrO1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSB0aWNrcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgdGljayA9IHRpY2tzW2ldO1xuICAgICAgICAgICAgdGljay5sYWJlbCA9IHRoaXMuX3RpY2tGb3JtYXRGdW5jdGlvbih0aWNrLnZhbHVlLCBpLCB0aWNrcyk7XG4gICAgICAgIH1cbiAgICB9XG4gZ2V0RGVjaW1hbEZvclZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IE5hTiA6ICh2YWx1ZSAtIHRoaXMubWluKSAvICh0aGlzLm1heCAtIHRoaXMubWluKTtcbiAgICB9XG4gZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBvZmZzZXRzID0gdGhpcy5fb2Zmc2V0cztcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXREZWNpbWFsRm9yVmFsdWUodmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQaXhlbEZvckRlY2ltYWwoKG9mZnNldHMuc3RhcnQgKyBwb3MpICogb2Zmc2V0cy5mYWN0b3IpO1xuICAgIH1cbiBnZXRWYWx1ZUZvclBpeGVsKHBpeGVsKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldHMgPSB0aGlzLl9vZmZzZXRzO1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldERlY2ltYWxGb3JQaXhlbChwaXhlbCkgLyBvZmZzZXRzLmZhY3RvciAtIG9mZnNldHMuZW5kO1xuICAgICAgICByZXR1cm4gdGhpcy5taW4gKyBwb3MgKiAodGhpcy5tYXggLSB0aGlzLm1pbik7XG4gICAgfVxuIF9nZXRMYWJlbFNpemUobGFiZWwpIHtcbiAgICAgICAgY29uc3QgdGlja3NPcHRzID0gdGhpcy5vcHRpb25zLnRpY2tzO1xuICAgICAgICBjb25zdCB0aWNrTGFiZWxXaWR0aCA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KGxhYmVsKS53aWR0aDtcbiAgICAgICAgY29uc3QgYW5nbGUgPSB0b1JhZGlhbnModGhpcy5pc0hvcml6b250YWwoKSA/IHRpY2tzT3B0cy5tYXhSb3RhdGlvbiA6IHRpY2tzT3B0cy5taW5Sb3RhdGlvbik7XG4gICAgICAgIGNvbnN0IGNvc1JvdGF0aW9uID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICBjb25zdCBzaW5Sb3RhdGlvbiA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICAgICAgY29uc3QgdGlja0ZvbnRTaXplID0gdGhpcy5fcmVzb2x2ZVRpY2tGb250T3B0aW9ucygwKS5zaXplO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdzogdGlja0xhYmVsV2lkdGggKiBjb3NSb3RhdGlvbiArIHRpY2tGb250U2l6ZSAqIHNpblJvdGF0aW9uLFxuICAgICAgICAgICAgaDogdGlja0xhYmVsV2lkdGggKiBzaW5Sb3RhdGlvbiArIHRpY2tGb250U2l6ZSAqIGNvc1JvdGF0aW9uXG4gICAgICAgIH07XG4gICAgfVxuIF9nZXRMYWJlbENhcGFjaXR5KGV4YW1wbGVUaW1lKSB7XG4gICAgICAgIGNvbnN0IHRpbWVPcHRzID0gdGhpcy5vcHRpb25zLnRpbWU7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXRzID0gdGltZU9wdHMuZGlzcGxheUZvcm1hdHM7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IGRpc3BsYXlGb3JtYXRzW3RpbWVPcHRzLnVuaXRdIHx8IGRpc3BsYXlGb3JtYXRzLm1pbGxpc2Vjb25kO1xuICAgICAgICBjb25zdCBleGFtcGxlTGFiZWwgPSB0aGlzLl90aWNrRm9ybWF0RnVuY3Rpb24oZXhhbXBsZVRpbWUsIDAsIHRpY2tzRnJvbVRpbWVzdGFtcHModGhpcywgW1xuICAgICAgICAgICAgZXhhbXBsZVRpbWVcbiAgICAgICAgXSwgdGhpcy5fbWFqb3JVbml0KSwgZm9ybWF0KTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuX2dldExhYmVsU2l6ZShleGFtcGxlTGFiZWwpO1xuICAgICAgICBjb25zdCBjYXBhY2l0eSA9IE1hdGguZmxvb3IodGhpcy5pc0hvcml6b250YWwoKSA/IHRoaXMud2lkdGggLyBzaXplLncgOiB0aGlzLmhlaWdodCAvIHNpemUuaCkgLSAxO1xuICAgICAgICByZXR1cm4gY2FwYWNpdHkgPiAwID8gY2FwYWNpdHkgOiAxO1xuICAgIH1cbiBnZXREYXRhVGltZXN0YW1wcygpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcHMgPSB0aGlzLl9jYWNoZS5kYXRhIHx8IFtdO1xuICAgICAgICBsZXQgaSwgaWxlbjtcbiAgICAgICAgaWYgKHRpbWVzdGFtcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGltZXN0YW1wcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXRhcyA9IHRoaXMuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMoKTtcbiAgICAgICAgaWYgKHRoaXMuX25vcm1hbGl6ZWQgJiYgbWV0YXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGUuZGF0YSA9IG1ldGFzWzBdLmNvbnRyb2xsZXIuZ2V0QWxsUGFyc2VkVmFsdWVzKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGZvcihpID0gMCwgaWxlbiA9IG1ldGFzLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICB0aW1lc3RhbXBzID0gdGltZXN0YW1wcy5jb25jYXQobWV0YXNbaV0uY29udHJvbGxlci5nZXRBbGxQYXJzZWRWYWx1ZXModGhpcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZS5kYXRhID0gdGhpcy5ub3JtYWxpemUodGltZXN0YW1wcyk7XG4gICAgfVxuIGdldExhYmVsVGltZXN0YW1wcygpIHtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wcyA9IHRoaXMuX2NhY2hlLmxhYmVscyB8fCBbXTtcbiAgICAgICAgbGV0IGksIGlsZW47XG4gICAgICAgIGlmICh0aW1lc3RhbXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRpbWVzdGFtcHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKTtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gbGFiZWxzLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICB0aW1lc3RhbXBzLnB1c2gocGFyc2UodGhpcywgbGFiZWxzW2ldKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlLmxhYmVscyA9IHRoaXMuX25vcm1hbGl6ZWQgPyB0aW1lc3RhbXBzIDogdGhpcy5ub3JtYWxpemUodGltZXN0YW1wcyk7XG4gICAgfVxuIG5vcm1hbGl6ZSh2YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIF9hcnJheVVuaXF1ZSh2YWx1ZXMuc29ydChzb3J0ZXIpKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlKHRhYmxlLCB2YWwsIHJldmVyc2UpIHtcbiAgICBsZXQgbG8gPSAwO1xuICAgIGxldCBoaSA9IHRhYmxlLmxlbmd0aCAtIDE7XG4gICAgbGV0IHByZXZTb3VyY2UsIG5leHRTb3VyY2UsIHByZXZUYXJnZXQsIG5leHRUYXJnZXQ7XG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgICAgaWYgKHZhbCA+PSB0YWJsZVtsb10ucG9zICYmIHZhbCA8PSB0YWJsZVtoaV0ucG9zKSB7XG4gICAgICAgICAgICAoeyBsbyAsIGhpICB9ID0gX2xvb2t1cEJ5S2V5KHRhYmxlLCAncG9zJywgdmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgKHsgcG9zOiBwcmV2U291cmNlICwgdGltZTogcHJldlRhcmdldCAgfSA9IHRhYmxlW2xvXSk7XG4gICAgICAgICh7IHBvczogbmV4dFNvdXJjZSAsIHRpbWU6IG5leHRUYXJnZXQgIH0gPSB0YWJsZVtoaV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2YWwgPj0gdGFibGVbbG9dLnRpbWUgJiYgdmFsIDw9IHRhYmxlW2hpXS50aW1lKSB7XG4gICAgICAgICAgICAoeyBsbyAsIGhpICB9ID0gX2xvb2t1cEJ5S2V5KHRhYmxlLCAndGltZScsIHZhbCkpO1xuICAgICAgICB9XG4gICAgICAgICh7IHRpbWU6IHByZXZTb3VyY2UgLCBwb3M6IHByZXZUYXJnZXQgIH0gPSB0YWJsZVtsb10pO1xuICAgICAgICAoeyB0aW1lOiBuZXh0U291cmNlICwgcG9zOiBuZXh0VGFyZ2V0ICB9ID0gdGFibGVbaGldKTtcbiAgICB9XG4gICAgY29uc3Qgc3BhbiA9IG5leHRTb3VyY2UgLSBwcmV2U291cmNlO1xuICAgIHJldHVybiBzcGFuID8gcHJldlRhcmdldCArIChuZXh0VGFyZ2V0IC0gcHJldlRhcmdldCkgKiAodmFsIC0gcHJldlNvdXJjZSkgLyBzcGFuIDogcHJldlRhcmdldDtcbn1cbmNsYXNzIFRpbWVTZXJpZXNTY2FsZSBleHRlbmRzIFRpbWVTY2FsZSB7XG4gICAgc3RhdGljIGlkID0gJ3RpbWVzZXJpZXMnO1xuIHN0YXRpYyBkZWZhdWx0cyA9IFRpbWVTY2FsZS5kZWZhdWx0cztcbiBjb25zdHJ1Y3Rvcihwcm9wcyl7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgIHRoaXMuX3RhYmxlID0gW107XG4gICAgICAgICB0aGlzLl9taW5Qb3MgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLl90YWJsZVJhbmdlID0gdW5kZWZpbmVkO1xuICAgIH1cbiBpbml0T2Zmc2V0cygpIHtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wcyA9IHRoaXMuX2dldFRpbWVzdGFtcHNGb3JUYWJsZSgpO1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuX3RhYmxlID0gdGhpcy5idWlsZExvb2t1cFRhYmxlKHRpbWVzdGFtcHMpO1xuICAgICAgICB0aGlzLl9taW5Qb3MgPSBpbnRlcnBvbGF0ZSh0YWJsZSwgdGhpcy5taW4pO1xuICAgICAgICB0aGlzLl90YWJsZVJhbmdlID0gaW50ZXJwb2xhdGUodGFibGUsIHRoaXMubWF4KSAtIHRoaXMuX21pblBvcztcbiAgICAgICAgc3VwZXIuaW5pdE9mZnNldHModGltZXN0YW1wcyk7XG4gICAgfVxuIGJ1aWxkTG9va3VwVGFibGUodGltZXN0YW1wcykge1xuICAgICAgICBjb25zdCB7IG1pbiAsIG1heCAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGNvbnN0IHRhYmxlID0gW107XG4gICAgICAgIGxldCBpLCBpbGVuLCBwcmV2LCBjdXJyLCBuZXh0O1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSB0aW1lc3RhbXBzLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBjdXJyID0gdGltZXN0YW1wc1tpXTtcbiAgICAgICAgICAgIGlmIChjdXJyID49IG1pbiAmJiBjdXJyIDw9IG1heCkge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goY3Vycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aW1lOiBtaW4sXG4gICAgICAgICAgICAgICAgICAgIHBvczogMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aW1lOiBtYXgsXG4gICAgICAgICAgICAgICAgICAgIHBvczogMVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIG5leHQgPSBpdGVtc1tpICsgMV07XG4gICAgICAgICAgICBwcmV2ID0gaXRlbXNbaSAtIDFdO1xuICAgICAgICAgICAgY3VyciA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgaWYgKE1hdGgucm91bmQoKG5leHQgKyBwcmV2KSAvIDIpICE9PSBjdXJyKSB7XG4gICAgICAgICAgICAgICAgdGFibGUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHRpbWU6IGN1cnIsXG4gICAgICAgICAgICAgICAgICAgIHBvczogaSAvIChpbGVuIC0gMSlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFibGU7XG4gICAgfVxuIF9nZW5lcmF0ZSgpIHtcbiAgICAgICAgY29uc3QgbWluID0gdGhpcy5taW47XG4gICAgICAgIGNvbnN0IG1heCA9IHRoaXMubWF4O1xuICAgICAgICBsZXQgdGltZXN0YW1wcyA9IHN1cGVyLmdldERhdGFUaW1lc3RhbXBzKCk7XG4gICAgICAgIGlmICghdGltZXN0YW1wcy5pbmNsdWRlcyhtaW4pIHx8ICF0aW1lc3RhbXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGltZXN0YW1wcy5zcGxpY2UoMCwgMCwgbWluKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRpbWVzdGFtcHMuaW5jbHVkZXMobWF4KSB8fCB0aW1lc3RhbXBzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdGltZXN0YW1wcy5wdXNoKG1heCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRpbWVzdGFtcHMuc29ydCgoYSwgYik9PmEgLSBiKTtcbiAgICB9XG4gX2dldFRpbWVzdGFtcHNGb3JUYWJsZSgpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcHMgPSB0aGlzLl9jYWNoZS5hbGwgfHwgW107XG4gICAgICAgIGlmICh0aW1lc3RhbXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRpbWVzdGFtcHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0RGF0YVRpbWVzdGFtcHMoKTtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmdldExhYmVsVGltZXN0YW1wcygpO1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggJiYgbGFiZWwubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aW1lc3RhbXBzID0gdGhpcy5ub3JtYWxpemUoZGF0YS5jb25jYXQobGFiZWwpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpbWVzdGFtcHMgPSBkYXRhLmxlbmd0aCA/IGRhdGEgOiBsYWJlbDtcbiAgICAgICAgfVxuICAgICAgICB0aW1lc3RhbXBzID0gdGhpcy5fY2FjaGUuYWxsID0gdGltZXN0YW1wcztcbiAgICAgICAgcmV0dXJuIHRpbWVzdGFtcHM7XG4gICAgfVxuIGdldERlY2ltYWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gKGludGVycG9sYXRlKHRoaXMuX3RhYmxlLCB2YWx1ZSkgLSB0aGlzLl9taW5Qb3MpIC8gdGhpcy5fdGFibGVSYW5nZTtcbiAgICB9XG4gZ2V0VmFsdWVGb3JQaXhlbChwaXhlbCkge1xuICAgICAgICBjb25zdCBvZmZzZXRzID0gdGhpcy5fb2Zmc2V0cztcbiAgICAgICAgY29uc3QgZGVjaW1hbCA9IHRoaXMuZ2V0RGVjaW1hbEZvclBpeGVsKHBpeGVsKSAvIG9mZnNldHMuZmFjdG9yIC0gb2Zmc2V0cy5lbmQ7XG4gICAgICAgIHJldHVybiBpbnRlcnBvbGF0ZSh0aGlzLl90YWJsZSwgZGVjaW1hbCAqIHRoaXMuX3RhYmxlUmFuZ2UgKyB0aGlzLl9taW5Qb3MsIHRydWUpO1xuICAgIH1cbn1cblxudmFyIHNjYWxlcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbl9fcHJvdG9fXzogbnVsbCxcbkNhdGVnb3J5U2NhbGU6IENhdGVnb3J5U2NhbGUsXG5MaW5lYXJTY2FsZTogTGluZWFyU2NhbGUsXG5Mb2dhcml0aG1pY1NjYWxlOiBMb2dhcml0aG1pY1NjYWxlLFxuUmFkaWFsTGluZWFyU2NhbGU6IFJhZGlhbExpbmVhclNjYWxlLFxuVGltZVNjYWxlOiBUaW1lU2NhbGUsXG5UaW1lU2VyaWVzU2NhbGU6IFRpbWVTZXJpZXNTY2FsZVxufSk7XG5cbmNvbnN0IHJlZ2lzdGVyYWJsZXMgPSBbXG4gICAgY29udHJvbGxlcnMsXG4gICAgZWxlbWVudHMsXG4gICAgcGx1Z2lucyxcbiAgICBzY2FsZXNcbl07XG5cbmV4cG9ydCB7IEFuaW1hdGlvbiwgQW5pbWF0aW9ucywgQXJjRWxlbWVudCwgQmFyQ29udHJvbGxlciwgQmFyRWxlbWVudCwgQmFzZVBsYXRmb3JtLCBCYXNpY1BsYXRmb3JtLCBCdWJibGVDb250cm9sbGVyLCBDYXRlZ29yeVNjYWxlLCBDaGFydCwgcGx1Z2luX2NvbG9ycyBhcyBDb2xvcnMsIERhdGFzZXRDb250cm9sbGVyLCBwbHVnaW5fZGVjaW1hdGlvbiBhcyBEZWNpbWF0aW9uLCBEb21QbGF0Zm9ybSwgRG91Z2hudXRDb250cm9sbGVyLCBFbGVtZW50LCBpbmRleCBhcyBGaWxsZXIsIEludGVyYWN0aW9uLCBwbHVnaW5fbGVnZW5kIGFzIExlZ2VuZCwgTGluZUNvbnRyb2xsZXIsIExpbmVFbGVtZW50LCBMaW5lYXJTY2FsZSwgTG9nYXJpdGhtaWNTY2FsZSwgUGllQ29udHJvbGxlciwgUG9pbnRFbGVtZW50LCBQb2xhckFyZWFDb250cm9sbGVyLCBSYWRhckNvbnRyb2xsZXIsIFJhZGlhbExpbmVhclNjYWxlLCBTY2FsZSwgU2NhdHRlckNvbnRyb2xsZXIsIHBsdWdpbl9zdWJ0aXRsZSBhcyBTdWJUaXRsZSwgVGlja3MsIFRpbWVTY2FsZSwgVGltZVNlcmllc1NjYWxlLCBwbHVnaW5fdGl0bGUgYXMgVGl0bGUsIHBsdWdpbl90b29sdGlwIGFzIFRvb2x0aXAsIGFkYXB0ZXJzIGFzIF9hZGFwdGVycywgX2RldGVjdFBsYXRmb3JtLCBhbmltYXRvciwgY29udHJvbGxlcnMsIGRlZmF1bHRzLCBlbGVtZW50cywgbGF5b3V0cywgcGx1Z2lucywgcmVnaXN0ZXJhYmxlcywgcmVnaXN0cnksIHNjYWxlcyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2hhcnQuanMubWFwXG4iLCIvKiFcbiAqIENoYXJ0LmpzIHY0LjQuNlxuICogaHR0cHM6Ly93d3cuY2hhcnRqcy5vcmdcbiAqIChjKSAyMDI0IENoYXJ0LmpzIENvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlXG4gKi9cbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnQGt1cmtsZS9jb2xvcic7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBDaGFydC5oZWxwZXJzXG4gKi8gLyoqXG4gKiBBbiBlbXB0eSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgZm9yIG9wdGlvbmFsIGNhbGxiYWNrLlxuICovIGZ1bmN0aW9uIG5vb3AoKSB7XG4vKiBub29wICovIH1cbi8qKlxuICogUmV0dXJucyBhIHVuaXF1ZSBpZCwgc2VxdWVudGlhbGx5IGdlbmVyYXRlZCBmcm9tIGEgZ2xvYmFsIHZhcmlhYmxlLlxuICovIGNvbnN0IHVpZCA9ICgoKT0+e1xuICAgIGxldCBpZCA9IDA7XG4gICAgcmV0dXJuICgpPT5pZCsrO1xufSkoKTtcbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgbmVpdGhlciBudWxsIG5vciB1bmRlZmluZWQsIGVsc2UgcmV0dXJucyBmYWxzZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB0ZXN0LlxuICogQHNpbmNlIDIuNy4wXG4gKi8gZnVuY3Rpb24gaXNOdWxsT3JVbmRlZih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSAoaW5jbHVkaW5nIHR5cGVkIGFycmF5cyksIGVsc2UgcmV0dXJucyBmYWxzZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB0ZXN0LlxuICogQGZ1bmN0aW9uXG4gKi8gZnVuY3Rpb24gaXNBcnJheSh2YWx1ZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5ICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICBpZiAodHlwZS5zbGljZSgwLCA3KSA9PT0gJ1tvYmplY3QnICYmIHR5cGUuc2xpY2UoLTYpID09PSAnQXJyYXldJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QgKGV4Y2x1ZGluZyBudWxsKSwgZWxzZSByZXR1cm5zIGZhbHNlLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHRlc3QuXG4gKiBAc2luY2UgMi43LjBcbiAqLyBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgYSBmaW5pdGUgbnVtYmVyLCBlbHNlIHJldHVybnMgZmFsc2VcbiAqIEBwYXJhbSB2YWx1ZSAgLSBUaGUgdmFsdWUgdG8gdGVzdC5cbiAqLyBmdW5jdGlvbiBpc051bWJlckZpbml0ZSh2YWx1ZSkge1xuICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIE51bWJlcikgJiYgaXNGaW5pdGUoK3ZhbHVlKTtcbn1cbi8qKlxuICogUmV0dXJucyBgdmFsdWVgIGlmIGZpbml0ZSwgZWxzZSByZXR1cm5zIGBkZWZhdWx0VmFsdWVgLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHJldHVybiBpZiBkZWZpbmVkLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIFRoZSB2YWx1ZSB0byByZXR1cm4gaWYgYHZhbHVlYCBpcyBub3QgZmluaXRlLlxuICovIGZ1bmN0aW9uIGZpbml0ZU9yRGVmYXVsdCh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIGlzTnVtYmVyRmluaXRlKHZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufVxuLyoqXG4gKiBSZXR1cm5zIGB2YWx1ZWAgaWYgZGVmaW5lZCwgZWxzZSByZXR1cm5zIGBkZWZhdWx0VmFsdWVgLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHJldHVybiBpZiBkZWZpbmVkLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIFRoZSB2YWx1ZSB0byByZXR1cm4gaWYgYHZhbHVlYCBpcyB1bmRlZmluZWQuXG4gKi8gZnVuY3Rpb24gdmFsdWVPckRlZmF1bHQodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7XG59XG5jb25zdCB0b1BlcmNlbnRhZ2UgPSAodmFsdWUsIGRpbWVuc2lvbik9PnR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZW5kc1dpdGgoJyUnKSA/IHBhcnNlRmxvYXQodmFsdWUpIC8gMTAwIDogK3ZhbHVlIC8gZGltZW5zaW9uO1xuY29uc3QgdG9EaW1lbnNpb24gPSAodmFsdWUsIGRpbWVuc2lvbik9PnR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZW5kc1dpdGgoJyUnKSA/IHBhcnNlRmxvYXQodmFsdWUpIC8gMTAwICogZGltZW5zaW9uIDogK3ZhbHVlO1xuLyoqXG4gKiBDYWxscyBgZm5gIHdpdGggdGhlIGdpdmVuIGBhcmdzYCBpbiB0aGUgc2NvcGUgZGVmaW5lZCBieSBgdGhpc0FyZ2AgYW5kIHJldHVybnMgdGhlXG4gKiB2YWx1ZSByZXR1cm5lZCBieSBgZm5gLiBJZiBgZm5gIGlzIG5vdCBhIGZ1bmN0aW9uLCB0aGlzIG1ldGhvZCByZXR1cm5zIHVuZGVmaW5lZC5cbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsLlxuICogQHBhcmFtIGFyZ3MgLSBUaGUgYXJndW1lbnRzIHdpdGggd2hpY2ggYGZuYCBzaG91bGQgYmUgY2FsbGVkLlxuICogQHBhcmFtIFt0aGlzQXJnXSAtIFRoZSB2YWx1ZSBvZiBgdGhpc2AgcHJvdmlkZWQgZm9yIHRoZSBjYWxsIHRvIGBmbmAuXG4gKi8gZnVuY3Rpb24gY2FsbGJhY2soZm4sIGFyZ3MsIHRoaXNBcmcpIHtcbiAgICBpZiAoZm4gJiYgdHlwZW9mIGZuLmNhbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVhY2gobG9vcGFibGUsIGZuLCB0aGlzQXJnLCByZXZlcnNlKSB7XG4gICAgbGV0IGksIGxlbiwga2V5cztcbiAgICBpZiAoaXNBcnJheShsb29wYWJsZSkpIHtcbiAgICAgICAgbGVuID0gbG9vcGFibGUubGVuZ3RoO1xuICAgICAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgICAgICAgZm9yKGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSl7XG4gICAgICAgICAgICAgICAgZm4uY2FsbCh0aGlzQXJnLCBsb29wYWJsZVtpXSwgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBsZW47IGkrKyl7XG4gICAgICAgICAgICAgICAgZm4uY2FsbCh0aGlzQXJnLCBsb29wYWJsZVtpXSwgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGxvb3BhYmxlKSkge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMobG9vcGFibGUpO1xuICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgbGVuOyBpKyspe1xuICAgICAgICAgICAgZm4uY2FsbCh0aGlzQXJnLCBsb29wYWJsZVtrZXlzW2ldXSwga2V5c1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYGEwYCBhbmQgYGExYCBhcnJheXMgaGF2ZSB0aGUgc2FtZSBjb250ZW50LCBlbHNlIHJldHVybnMgZmFsc2UuXG4gKiBAcGFyYW0gYTAgLSBUaGUgYXJyYXkgdG8gY29tcGFyZVxuICogQHBhcmFtIGExIC0gVGhlIGFycmF5IHRvIGNvbXBhcmVcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2VsZW1lbnRzRXF1YWwoYTAsIGExKSB7XG4gICAgbGV0IGksIGlsZW4sIHYwLCB2MTtcbiAgICBpZiAoIWEwIHx8ICFhMSB8fCBhMC5sZW5ndGggIT09IGExLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvcihpID0gMCwgaWxlbiA9IGEwLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIHYwID0gYTBbaV07XG4gICAgICAgIHYxID0gYTFbaV07XG4gICAgICAgIGlmICh2MC5kYXRhc2V0SW5kZXggIT09IHYxLmRhdGFzZXRJbmRleCB8fCB2MC5pbmRleCAhPT0gdjEuaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogUmV0dXJucyBhIGRlZXAgY29weSBvZiBgc291cmNlYCB3aXRob3V0IGtlZXBpbmcgcmVmZXJlbmNlcyBvbiBvYmplY3RzIGFuZCBhcnJheXMuXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIHZhbHVlIHRvIGNsb25lLlxuICovIGZ1bmN0aW9uIGNsb25lKHNvdXJjZSkge1xuICAgIGlmIChpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5tYXAoY2xvbmUpO1xuICAgIH1cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgICAgICAgY29uc3Qga2xlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICBsZXQgayA9IDA7XG4gICAgICAgIGZvcig7IGsgPCBrbGVuOyArK2spe1xuICAgICAgICAgICAgdGFyZ2V0W2tleXNba11dID0gY2xvbmUoc291cmNlW2tleXNba11dKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xufVxuZnVuY3Rpb24gaXNWYWxpZEtleShrZXkpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnX19wcm90b19fJyxcbiAgICAgICAgJ3Byb3RvdHlwZScsXG4gICAgICAgICdjb25zdHJ1Y3RvcidcbiAgICBdLmluZGV4T2Yoa2V5KSA9PT0gLTE7XG59XG4vKipcbiAqIFRoZSBkZWZhdWx0IG1lcmdlciB3aGVuIENoYXJ0LmhlbHBlcnMubWVyZ2UgaXMgY2FsbGVkIHdpdGhvdXQgbWVyZ2VyIG9wdGlvbi5cbiAqIE5vdGUoU0IpOiBhbHNvIHVzZWQgYnkgbWVyZ2VDb25maWcgYW5kIG1lcmdlU2NhbGVDb25maWcgYXMgZmFsbGJhY2suXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9tZXJnZXIoa2V5LCB0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuICAgIGlmICghaXNWYWxpZEtleShrZXkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdHZhbCA9IHRhcmdldFtrZXldO1xuICAgIGNvbnN0IHN2YWwgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAoaXNPYmplY3QodHZhbCkgJiYgaXNPYmplY3Qoc3ZhbCkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICBtZXJnZSh0dmFsLCBzdmFsLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRba2V5XSA9IGNsb25lKHN2YWwpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgc291cmNlcyA9IGlzQXJyYXkoc291cmNlKSA/IHNvdXJjZSA6IFtcbiAgICAgICAgc291cmNlXG4gICAgXTtcbiAgICBjb25zdCBpbGVuID0gc291cmNlcy5sZW5ndGg7XG4gICAgaWYgKCFpc09iamVjdCh0YXJnZXQpKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IG1lcmdlciA9IG9wdGlvbnMubWVyZ2VyIHx8IF9tZXJnZXI7XG4gICAgbGV0IGN1cnJlbnQ7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIGN1cnJlbnQgPSBzb3VyY2VzW2ldO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGN1cnJlbnQpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY3VycmVudCk7XG4gICAgICAgIGZvcihsZXQgayA9IDAsIGtsZW4gPSBrZXlzLmxlbmd0aDsgayA8IGtsZW47ICsrayl7XG4gICAgICAgICAgICBtZXJnZXIoa2V5c1trXSwgdGFyZ2V0LCBjdXJyZW50LCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuZnVuY3Rpb24gbWVyZ2VJZih0YXJnZXQsIHNvdXJjZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICByZXR1cm4gbWVyZ2UodGFyZ2V0LCBzb3VyY2UsIHtcbiAgICAgICAgbWVyZ2VyOiBfbWVyZ2VySWZcbiAgICB9KTtcbn1cbi8qKlxuICogTWVyZ2VzIHNvdXJjZVtrZXldIGluIHRhcmdldFtrZXldIG9ubHkgaWYgdGFyZ2V0W2tleV0gaXMgdW5kZWZpbmVkLlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfbWVyZ2VySWYoa2V5LCB0YXJnZXQsIHNvdXJjZSkge1xuICAgIGlmICghaXNWYWxpZEtleShrZXkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdHZhbCA9IHRhcmdldFtrZXldO1xuICAgIGNvbnN0IHN2YWwgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAoaXNPYmplY3QodHZhbCkgJiYgaXNPYmplY3Qoc3ZhbCkpIHtcbiAgICAgICAgbWVyZ2VJZih0dmFsLCBzdmFsKTtcbiAgICB9IGVsc2UgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBrZXkpKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gY2xvbmUoc3ZhbCk7XG4gICAgfVxufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9kZXByZWNhdGVkKHNjb3BlLCB2YWx1ZSwgcHJldmlvdXMsIGN1cnJlbnQpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLndhcm4oc2NvcGUgKyAnOiBcIicgKyBwcmV2aW91cyArICdcIiBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIFwiJyArIGN1cnJlbnQgKyAnXCIgaW5zdGVhZCcpO1xuICAgIH1cbn1cbi8vIHJlc29sdmVPYmplY3RLZXkgcmVzb2x2ZXIgY2FjaGVcbmNvbnN0IGtleVJlc29sdmVycyA9IHtcbiAgICAvLyBDaGFydC5oZWxwZXJzLmNvcmUgcmVzb2x2ZU9iamVjdEtleSBzaG91bGQgcmVzb2x2ZSBlbXB0eSBrZXkgdG8gcm9vdCBvYmplY3RcbiAgICAnJzogKHYpPT52LFxuICAgIC8vIGRlZmF1bHQgcmVzb2x2ZXJzXG4gICAgeDogKG8pPT5vLngsXG4gICAgeTogKG8pPT5vLnlcbn07XG4vKipcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX3NwbGl0S2V5KGtleSkge1xuICAgIGNvbnN0IHBhcnRzID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgY29uc3Qga2V5cyA9IFtdO1xuICAgIGxldCB0bXAgPSAnJztcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpe1xuICAgICAgICB0bXAgKz0gcGFydDtcbiAgICAgICAgaWYgKHRtcC5lbmRzV2l0aCgnXFxcXCcpKSB7XG4gICAgICAgICAgICB0bXAgPSB0bXAuc2xpY2UoMCwgLTEpICsgJy4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAga2V5cy5wdXNoKHRtcCk7XG4gICAgICAgICAgICB0bXAgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ga2V5cztcbn1cbmZ1bmN0aW9uIF9nZXRLZXlSZXNvbHZlcihrZXkpIHtcbiAgICBjb25zdCBrZXlzID0gX3NwbGl0S2V5KGtleSk7XG4gICAgcmV0dXJuIChvYmopPT57XG4gICAgICAgIGZvciAoY29uc3QgayBvZiBrZXlzKXtcbiAgICAgICAgICAgIGlmIChrID09PSAnJykge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2JqID0gb2JqICYmIG9ialtrXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH07XG59XG5mdW5jdGlvbiByZXNvbHZlT2JqZWN0S2V5KG9iaiwga2V5KSB7XG4gICAgY29uc3QgcmVzb2x2ZXIgPSBrZXlSZXNvbHZlcnNba2V5XSB8fCAoa2V5UmVzb2x2ZXJzW2tleV0gPSBfZ2V0S2V5UmVzb2x2ZXIoa2V5KSk7XG4gICAgcmV0dXJuIHJlc29sdmVyKG9iaik7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2NhcGl0YWxpemUoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcbn1cbmNvbnN0IGRlZmluZWQgPSAodmFsdWUpPT50eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnO1xuY29uc3QgaXNGdW5jdGlvbiA9ICh2YWx1ZSk9PnR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbi8vIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zMTEyODg1NS9jb21wYXJpbmctZWNtYTYtc2V0cy1mb3ItZXF1YWxpdHkjMzExMjkzODRcbmNvbnN0IHNldHNFcXVhbCA9IChhLCBiKT0+e1xuICAgIGlmIChhLnNpemUgIT09IGIuc2l6ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBhKXtcbiAgICAgICAgaWYgKCFiLmhhcyhpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcbi8qKlxuICogQHBhcmFtIGUgLSBUaGUgZXZlbnRcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2lzQ2xpY2tFdmVudChlKSB7XG4gICAgcmV0dXJuIGUudHlwZSA9PT0gJ21vdXNldXAnIHx8IGUudHlwZSA9PT0gJ2NsaWNrJyB8fCBlLnR5cGUgPT09ICdjb250ZXh0bWVudSc7XG59XG5cbi8qKlxuICogQGFsaWFzIENoYXJ0LmhlbHBlcnMubWF0aFxuICogQG5hbWVzcGFjZVxuICovIGNvbnN0IFBJID0gTWF0aC5QSTtcbmNvbnN0IFRBVSA9IDIgKiBQSTtcbmNvbnN0IFBJVEFVID0gVEFVICsgUEk7XG5jb25zdCBJTkZJTklUWSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbmNvbnN0IFJBRF9QRVJfREVHID0gUEkgLyAxODA7XG5jb25zdCBIQUxGX1BJID0gUEkgLyAyO1xuY29uc3QgUVVBUlRFUl9QSSA9IFBJIC8gNDtcbmNvbnN0IFRXT19USElSRFNfUEkgPSBQSSAqIDIgLyAzO1xuY29uc3QgbG9nMTAgPSBNYXRoLmxvZzEwO1xuY29uc3Qgc2lnbiA9IE1hdGguc2lnbjtcbmZ1bmN0aW9uIGFsbW9zdEVxdWFscyh4LCB5LCBlcHNpbG9uKSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHggLSB5KSA8IGVwc2lsb247XG59XG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBuaWNlIG51bWJlciBhbGdvcml0aG0gdXNlZCBpbiBkZXRlcm1pbmluZyB3aGVyZSBheGlzIGxhYmVscyB3aWxsIGdvXG4gKi8gZnVuY3Rpb24gbmljZU51bShyYW5nZSkge1xuICAgIGNvbnN0IHJvdW5kZWRSYW5nZSA9IE1hdGgucm91bmQocmFuZ2UpO1xuICAgIHJhbmdlID0gYWxtb3N0RXF1YWxzKHJhbmdlLCByb3VuZGVkUmFuZ2UsIHJhbmdlIC8gMTAwMCkgPyByb3VuZGVkUmFuZ2UgOiByYW5nZTtcbiAgICBjb25zdCBuaWNlUmFuZ2UgPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihsb2cxMChyYW5nZSkpKTtcbiAgICBjb25zdCBmcmFjdGlvbiA9IHJhbmdlIC8gbmljZVJhbmdlO1xuICAgIGNvbnN0IG5pY2VGcmFjdGlvbiA9IGZyYWN0aW9uIDw9IDEgPyAxIDogZnJhY3Rpb24gPD0gMiA/IDIgOiBmcmFjdGlvbiA8PSA1ID8gNSA6IDEwO1xuICAgIHJldHVybiBuaWNlRnJhY3Rpb24gKiBuaWNlUmFuZ2U7XG59XG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgZmFjdG9ycyBzb3J0ZWQgZnJvbSAxIHRvIHNxcnQodmFsdWUpXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9mYWN0b3JpemUodmFsdWUpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCBzcXJ0ID0gTWF0aC5zcXJ0KHZhbHVlKTtcbiAgICBsZXQgaTtcbiAgICBmb3IoaSA9IDE7IGkgPCBzcXJ0OyBpKyspe1xuICAgICAgICBpZiAodmFsdWUgJSBpID09PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChpKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlIC8gaSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNxcnQgPT09IChzcXJ0IHwgMCkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goc3FydCk7XG4gICAgfVxuICAgIHJlc3VsdC5zb3J0KChhLCBiKT0+YSAtIGIpLnBvcCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBpc051bWJlcihuKSB7XG4gICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbn1cbmZ1bmN0aW9uIGFsbW9zdFdob2xlKHgsIGVwc2lsb24pIHtcbiAgICBjb25zdCByb3VuZGVkID0gTWF0aC5yb3VuZCh4KTtcbiAgICByZXR1cm4gcm91bmRlZCAtIGVwc2lsb24gPD0geCAmJiByb3VuZGVkICsgZXBzaWxvbiA+PSB4O1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9zZXRNaW5BbmRNYXhCeUtleShhcnJheSwgdGFyZ2V0LCBwcm9wZXJ0eSkge1xuICAgIGxldCBpLCBpbGVuLCB2YWx1ZTtcbiAgICBmb3IoaSA9IDAsIGlsZW4gPSBhcnJheS5sZW5ndGg7IGkgPCBpbGVuOyBpKyspe1xuICAgICAgICB2YWx1ZSA9IGFycmF5W2ldW3Byb3BlcnR5XTtcbiAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRhcmdldC5taW4gPSBNYXRoLm1pbih0YXJnZXQubWluLCB2YWx1ZSk7XG4gICAgICAgICAgICB0YXJnZXQubWF4ID0gTWF0aC5tYXgodGFyZ2V0Lm1heCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdG9SYWRpYW5zKGRlZ3JlZXMpIHtcbiAgICByZXR1cm4gZGVncmVlcyAqIChQSSAvIDE4MCk7XG59XG5mdW5jdGlvbiB0b0RlZ3JlZXMocmFkaWFucykge1xuICAgIHJldHVybiByYWRpYW5zICogKDE4MCAvIFBJKTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzXG4gKiBpLmUuIHRoZSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LCBvZiB0aGUgdmFsdWUgb2YgdGhpcyBOdW1iZXIuXG4gKiBAcGFyYW0geCAtIEEgbnVtYmVyLlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcy5cbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2RlY2ltYWxQbGFjZXMoeCkge1xuICAgIGlmICghaXNOdW1iZXJGaW5pdGUoeCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZSA9IDE7XG4gICAgbGV0IHAgPSAwO1xuICAgIHdoaWxlKE1hdGgucm91bmQoeCAqIGUpIC8gZSAhPT0geCl7XG4gICAgICAgIGUgKj0gMTA7XG4gICAgICAgIHArKztcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG4vLyBHZXRzIHRoZSBhbmdsZSBmcm9tIHZlcnRpY2FsIHVwcmlnaHQgdG8gdGhlIHBvaW50IGFib3V0IGEgY2VudHJlLlxuZnVuY3Rpb24gZ2V0QW5nbGVGcm9tUG9pbnQoY2VudHJlUG9pbnQsIGFuZ2xlUG9pbnQpIHtcbiAgICBjb25zdCBkaXN0YW5jZUZyb21YQ2VudGVyID0gYW5nbGVQb2ludC54IC0gY2VudHJlUG9pbnQueDtcbiAgICBjb25zdCBkaXN0YW5jZUZyb21ZQ2VudGVyID0gYW5nbGVQb2ludC55IC0gY2VudHJlUG9pbnQueTtcbiAgICBjb25zdCByYWRpYWxEaXN0YW5jZUZyb21DZW50ZXIgPSBNYXRoLnNxcnQoZGlzdGFuY2VGcm9tWENlbnRlciAqIGRpc3RhbmNlRnJvbVhDZW50ZXIgKyBkaXN0YW5jZUZyb21ZQ2VudGVyICogZGlzdGFuY2VGcm9tWUNlbnRlcik7XG4gICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMihkaXN0YW5jZUZyb21ZQ2VudGVyLCBkaXN0YW5jZUZyb21YQ2VudGVyKTtcbiAgICBpZiAoYW5nbGUgPCAtMC41ICogUEkpIHtcbiAgICAgICAgYW5nbGUgKz0gVEFVOyAvLyBtYWtlIHN1cmUgdGhlIHJldHVybmVkIGFuZ2xlIGlzIGluIHRoZSByYW5nZSBvZiAoLVBJLzIsIDNQSS8yXVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBhbmdsZSxcbiAgICAgICAgZGlzdGFuY2U6IHJhZGlhbERpc3RhbmNlRnJvbUNlbnRlclxuICAgIH07XG59XG5mdW5jdGlvbiBkaXN0YW5jZUJldHdlZW5Qb2ludHMocHQxLCBwdDIpIHtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHB0Mi54IC0gcHQxLngsIDIpICsgTWF0aC5wb3cocHQyLnkgLSBwdDEueSwgMikpO1xufVxuLyoqXG4gKiBTaG9ydGVzdCBkaXN0YW5jZSBiZXR3ZWVuIGFuZ2xlcywgaW4gZWl0aGVyIGRpcmVjdGlvbi5cbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2FuZ2xlRGlmZihhLCBiKSB7XG4gICAgcmV0dXJuIChhIC0gYiArIFBJVEFVKSAlIFRBVSAtIFBJO1xufVxuLyoqXG4gKiBOb3JtYWxpemUgYW5nbGUgdG8gYmUgYmV0d2VlbiAwIGFuZCAyKlBJXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9ub3JtYWxpemVBbmdsZShhKSB7XG4gICAgcmV0dXJuIChhICUgVEFVICsgVEFVKSAlIFRBVTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfYW5nbGVCZXR3ZWVuKGFuZ2xlLCBzdGFydCwgZW5kLCBzYW1lQW5nbGVJc0Z1bGxDaXJjbGUpIHtcbiAgICBjb25zdCBhID0gX25vcm1hbGl6ZUFuZ2xlKGFuZ2xlKTtcbiAgICBjb25zdCBzID0gX25vcm1hbGl6ZUFuZ2xlKHN0YXJ0KTtcbiAgICBjb25zdCBlID0gX25vcm1hbGl6ZUFuZ2xlKGVuZCk7XG4gICAgY29uc3QgYW5nbGVUb1N0YXJ0ID0gX25vcm1hbGl6ZUFuZ2xlKHMgLSBhKTtcbiAgICBjb25zdCBhbmdsZVRvRW5kID0gX25vcm1hbGl6ZUFuZ2xlKGUgLSBhKTtcbiAgICBjb25zdCBzdGFydFRvQW5nbGUgPSBfbm9ybWFsaXplQW5nbGUoYSAtIHMpO1xuICAgIGNvbnN0IGVuZFRvQW5nbGUgPSBfbm9ybWFsaXplQW5nbGUoYSAtIGUpO1xuICAgIHJldHVybiBhID09PSBzIHx8IGEgPT09IGUgfHwgc2FtZUFuZ2xlSXNGdWxsQ2lyY2xlICYmIHMgPT09IGUgfHwgYW5nbGVUb1N0YXJ0ID4gYW5nbGVUb0VuZCAmJiBzdGFydFRvQW5nbGUgPCBlbmRUb0FuZ2xlO1xufVxuLyoqXG4gKiBMaW1pdCBgdmFsdWVgIGJldHdlZW4gYG1pbmAgYW5kIGBtYXhgXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSBtaW5cbiAqIEBwYXJhbSBtYXhcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2xpbWl0VmFsdWUodmFsdWUsIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCB2YWx1ZSkpO1xufVxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2ludDE2UmFuZ2UodmFsdWUpIHtcbiAgICByZXR1cm4gX2xpbWl0VmFsdWUodmFsdWUsIC0zMjc2OCwgMzI3NjcpO1xufVxuLyoqXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSBzdGFydFxuICogQHBhcmFtIGVuZFxuICogQHBhcmFtIFtlcHNpbG9uXVxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfaXNCZXR3ZWVuKHZhbHVlLCBzdGFydCwgZW5kLCBlcHNpbG9uID0gMWUtNikge1xuICAgIHJldHVybiB2YWx1ZSA+PSBNYXRoLm1pbihzdGFydCwgZW5kKSAtIGVwc2lsb24gJiYgdmFsdWUgPD0gTWF0aC5tYXgoc3RhcnQsIGVuZCkgKyBlcHNpbG9uO1xufVxuXG5mdW5jdGlvbiBfbG9va3VwKHRhYmxlLCB2YWx1ZSwgY21wKSB7XG4gICAgY21wID0gY21wIHx8ICgoaW5kZXgpPT50YWJsZVtpbmRleF0gPCB2YWx1ZSk7XG4gICAgbGV0IGhpID0gdGFibGUubGVuZ3RoIC0gMTtcbiAgICBsZXQgbG8gPSAwO1xuICAgIGxldCBtaWQ7XG4gICAgd2hpbGUoaGkgLSBsbyA+IDEpe1xuICAgICAgICBtaWQgPSBsbyArIGhpID4+IDE7XG4gICAgICAgIGlmIChjbXAobWlkKSkge1xuICAgICAgICAgICAgbG8gPSBtaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoaSA9IG1pZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBsbyxcbiAgICAgICAgaGlcbiAgICB9O1xufVxuLyoqXG4gKiBCaW5hcnkgc2VhcmNoXG4gKiBAcGFyYW0gdGFibGUgLSB0aGUgdGFibGUgc2VhcmNoLiBtdXN0IGJlIHNvcnRlZCFcbiAqIEBwYXJhbSBrZXkgLSBwcm9wZXJ0eSBuYW1lIGZvciB0aGUgdmFsdWUgaW4gZWFjaCBlbnRyeVxuICogQHBhcmFtIHZhbHVlIC0gdmFsdWUgdG8gZmluZFxuICogQHBhcmFtIGxhc3QgLSBsb29rdXAgbGFzdCBpbmRleFxuICogQHByaXZhdGVcbiAqLyBjb25zdCBfbG9va3VwQnlLZXkgPSAodGFibGUsIGtleSwgdmFsdWUsIGxhc3QpPT5fbG9va3VwKHRhYmxlLCB2YWx1ZSwgbGFzdCA/IChpbmRleCk9PntcbiAgICAgICAgY29uc3QgdGkgPSB0YWJsZVtpbmRleF1ba2V5XTtcbiAgICAgICAgcmV0dXJuIHRpIDwgdmFsdWUgfHwgdGkgPT09IHZhbHVlICYmIHRhYmxlW2luZGV4ICsgMV1ba2V5XSA9PT0gdmFsdWU7XG4gICAgfSA6IChpbmRleCk9PnRhYmxlW2luZGV4XVtrZXldIDwgdmFsdWUpO1xuLyoqXG4gKiBSZXZlcnNlIGJpbmFyeSBzZWFyY2hcbiAqIEBwYXJhbSB0YWJsZSAtIHRoZSB0YWJsZSBzZWFyY2guIG11c3QgYmUgc29ydGVkIVxuICogQHBhcmFtIGtleSAtIHByb3BlcnR5IG5hbWUgZm9yIHRoZSB2YWx1ZSBpbiBlYWNoIGVudHJ5XG4gKiBAcGFyYW0gdmFsdWUgLSB2YWx1ZSB0byBmaW5kXG4gKiBAcHJpdmF0ZVxuICovIGNvbnN0IF9ybG9va3VwQnlLZXkgPSAodGFibGUsIGtleSwgdmFsdWUpPT5fbG9va3VwKHRhYmxlLCB2YWx1ZSwgKGluZGV4KT0+dGFibGVbaW5kZXhdW2tleV0gPj0gdmFsdWUpO1xuLyoqXG4gKiBSZXR1cm4gc3Vic2V0IG9mIGB2YWx1ZXNgIGJldHdlZW4gYG1pbmAgYW5kIGBtYXhgIGluY2x1c2l2ZS5cbiAqIFZhbHVlcyBhcmUgYXNzdW1lZCB0byBiZSBpbiBzb3J0ZWQgb3JkZXIuXG4gKiBAcGFyYW0gdmFsdWVzIC0gc29ydGVkIGFycmF5IG9mIHZhbHVlc1xuICogQHBhcmFtIG1pbiAtIG1pbiB2YWx1ZVxuICogQHBhcmFtIG1heCAtIG1heCB2YWx1ZVxuICovIGZ1bmN0aW9uIF9maWx0ZXJCZXR3ZWVuKHZhbHVlcywgbWluLCBtYXgpIHtcbiAgICBsZXQgc3RhcnQgPSAwO1xuICAgIGxldCBlbmQgPSB2YWx1ZXMubGVuZ3RoO1xuICAgIHdoaWxlKHN0YXJ0IDwgZW5kICYmIHZhbHVlc1tzdGFydF0gPCBtaW4pe1xuICAgICAgICBzdGFydCsrO1xuICAgIH1cbiAgICB3aGlsZShlbmQgPiBzdGFydCAmJiB2YWx1ZXNbZW5kIC0gMV0gPiBtYXgpe1xuICAgICAgICBlbmQtLTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXJ0ID4gMCB8fCBlbmQgPCB2YWx1ZXMubGVuZ3RoID8gdmFsdWVzLnNsaWNlKHN0YXJ0LCBlbmQpIDogdmFsdWVzO1xufVxuY29uc3QgYXJyYXlFdmVudHMgPSBbXG4gICAgJ3B1c2gnLFxuICAgICdwb3AnLFxuICAgICdzaGlmdCcsXG4gICAgJ3NwbGljZScsXG4gICAgJ3Vuc2hpZnQnXG5dO1xuZnVuY3Rpb24gbGlzdGVuQXJyYXlFdmVudHMoYXJyYXksIGxpc3RlbmVyKSB7XG4gICAgaWYgKGFycmF5Ll9jaGFydGpzKSB7XG4gICAgICAgIGFycmF5Ll9jaGFydGpzLmxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJyYXksICdfY2hhcnRqcycsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIGxpc3RlbmVyczogW1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyXG4gICAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBhcnJheUV2ZW50cy5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9ICdfb25EYXRhJyArIF9jYXBpdGFsaXplKGtleSk7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBhcnJheVtrZXldO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJyYXksIGtleSwge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZSAoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGJhc2UuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgYXJyYXkuX2NoYXJ0anMubGlzdGVuZXJzLmZvckVhY2goKG9iamVjdCk9PntcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3RbbWV0aG9kXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0W21ldGhvZF0oLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHVubGlzdGVuQXJyYXlFdmVudHMoYXJyYXksIGxpc3RlbmVyKSB7XG4gICAgY29uc3Qgc3R1YiA9IGFycmF5Ll9jaGFydGpzO1xuICAgIGlmICghc3R1Yikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxpc3RlbmVycyA9IHN0dWIubGlzdGVuZXJzO1xuICAgIGNvbnN0IGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFycmF5RXZlbnRzLmZvckVhY2goKGtleSk9PntcbiAgICAgICAgZGVsZXRlIGFycmF5W2tleV07XG4gICAgfSk7XG4gICAgZGVsZXRlIGFycmF5Ll9jaGFydGpzO1xufVxuLyoqXG4gKiBAcGFyYW0gaXRlbXNcbiAqLyBmdW5jdGlvbiBfYXJyYXlVbmlxdWUoaXRlbXMpIHtcbiAgICBjb25zdCBzZXQgPSBuZXcgU2V0KGl0ZW1zKTtcbiAgICBpZiAoc2V0LnNpemUgPT09IGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKHNldCk7XG59XG5cbmZ1bmN0aW9uIGZvbnRTdHJpbmcocGl4ZWxTaXplLCBmb250U3R5bGUsIGZvbnRGYW1pbHkpIHtcbiAgICByZXR1cm4gZm9udFN0eWxlICsgJyAnICsgcGl4ZWxTaXplICsgJ3B4ICcgKyBmb250RmFtaWx5O1xufVxuLyoqXG4qIFJlcXVlc3QgYW5pbWF0aW9uIHBvbHlmaWxsXG4qLyBjb25zdCByZXF1ZXN0QW5pbUZyYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xufSgpO1xuLyoqXG4gKiBUaHJvdHRsZXMgY2FsbGluZyBgZm5gIG9uY2UgcGVyIGFuaW1hdGlvbiBmcmFtZVxuICogTGF0ZXN0IGFyZ3VtZW50cyBhcmUgdXNlZCBvbiB0aGUgYWN0dWFsIGNhbGxcbiAqLyBmdW5jdGlvbiB0aHJvdHRsZWQoZm4sIHRoaXNBcmcpIHtcbiAgICBsZXQgYXJnc1RvVXNlID0gW107XG4gICAgbGV0IHRpY2tpbmcgPSBmYWxzZTtcbiAgICByZXR1cm4gZnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgICAvLyBTYXZlIHRoZSBhcmdzIGZvciB1c2UgbGF0ZXJcbiAgICAgICAgYXJnc1RvVXNlID0gYXJncztcbiAgICAgICAgaWYgKCF0aWNraW5nKSB7XG4gICAgICAgICAgICB0aWNraW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltRnJhbWUuY2FsbCh3aW5kb3csICgpPT57XG4gICAgICAgICAgICAgICAgdGlja2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3NUb1VzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59XG4vKipcbiAqIERlYm91bmNlcyBjYWxsaW5nIGBmbmAgZm9yIGBkZWxheWAgbXNcbiAqLyBmdW5jdGlvbiBkZWJvdW5jZShmbiwgZGVsYXkpIHtcbiAgICBsZXQgdGltZW91dDtcbiAgICByZXR1cm4gZnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgICBpZiAoZGVsYXkpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGZuLCBkZWxheSwgYXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVsYXk7XG4gICAgfTtcbn1cbi8qKlxuICogQ29udmVydHMgJ3N0YXJ0JyB0byAnbGVmdCcsICdlbmQnIHRvICdyaWdodCcgYW5kIG90aGVycyB0byAnY2VudGVyJ1xuICogQHByaXZhdGVcbiAqLyBjb25zdCBfdG9MZWZ0UmlnaHRDZW50ZXIgPSAoYWxpZ24pPT5hbGlnbiA9PT0gJ3N0YXJ0JyA/ICdsZWZ0JyA6IGFsaWduID09PSAnZW5kJyA/ICdyaWdodCcgOiAnY2VudGVyJztcbi8qKlxuICogUmV0dXJucyBgc3RhcnRgLCBgZW5kYCBvciBgKHN0YXJ0ICsgZW5kKSAvIDJgIGRlcGVuZGluZyBvbiBgYWxpZ25gLiBEZWZhdWx0cyB0byBgY2VudGVyYFxuICogQHByaXZhdGVcbiAqLyBjb25zdCBfYWxpZ25TdGFydEVuZCA9IChhbGlnbiwgc3RhcnQsIGVuZCk9PmFsaWduID09PSAnc3RhcnQnID8gc3RhcnQgOiBhbGlnbiA9PT0gJ2VuZCcgPyBlbmQgOiAoc3RhcnQgKyBlbmQpIC8gMjtcbi8qKlxuICogUmV0dXJucyBgbGVmdGAsIGByaWdodGAgb3IgYChsZWZ0ICsgcmlnaHQpIC8gMmAgZGVwZW5kaW5nIG9uIGBhbGlnbmAuIERlZmF1bHRzIHRvIGBsZWZ0YFxuICogQHByaXZhdGVcbiAqLyBjb25zdCBfdGV4dFggPSAoYWxpZ24sIGxlZnQsIHJpZ2h0LCBydGwpPT57XG4gICAgY29uc3QgY2hlY2sgPSBydGwgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgIHJldHVybiBhbGlnbiA9PT0gY2hlY2sgPyByaWdodCA6IGFsaWduID09PSAnY2VudGVyJyA/IChsZWZ0ICsgcmlnaHQpIC8gMiA6IGxlZnQ7XG59O1xuLyoqXG4gKiBSZXR1cm4gc3RhcnQgYW5kIGNvdW50IG9mIHZpc2libGUgcG9pbnRzLlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfZ2V0U3RhcnRBbmRDb3VudE9mVmlzaWJsZVBvaW50cyhtZXRhLCBwb2ludHMsIGFuaW1hdGlvbnNEaXNhYmxlZCkge1xuICAgIGNvbnN0IHBvaW50Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIGxldCBzdGFydCA9IDA7XG4gICAgbGV0IGNvdW50ID0gcG9pbnRDb3VudDtcbiAgICBpZiAobWV0YS5fc29ydGVkKSB7XG4gICAgICAgIGNvbnN0IHsgaVNjYWxlICwgX3BhcnNlZCAgfSA9IG1ldGE7XG4gICAgICAgIGNvbnN0IGF4aXMgPSBpU2NhbGUuYXhpcztcbiAgICAgICAgY29uc3QgeyBtaW4gLCBtYXggLCBtaW5EZWZpbmVkICwgbWF4RGVmaW5lZCAgfSA9IGlTY2FsZS5nZXRVc2VyQm91bmRzKCk7XG4gICAgICAgIGlmIChtaW5EZWZpbmVkKSB7XG4gICAgICAgICAgICBzdGFydCA9IF9saW1pdFZhbHVlKE1hdGgubWluKC8vIEB0cy1leHBlY3QtZXJyb3IgTmVlZCB0byB0eXBlIF9wYXJzZWRcbiAgICAgICAgICAgIF9sb29rdXBCeUtleShfcGFyc2VkLCBheGlzLCBtaW4pLmxvLCAvLyBAdHMtZXhwZWN0LWVycm9yIE5lZWQgdG8gZml4IHR5cGVzIG9uIF9sb29rdXBCeUtleVxuICAgICAgICAgICAgYW5pbWF0aW9uc0Rpc2FibGVkID8gcG9pbnRDb3VudCA6IF9sb29rdXBCeUtleShwb2ludHMsIGF4aXMsIGlTY2FsZS5nZXRQaXhlbEZvclZhbHVlKG1pbikpLmxvKSwgMCwgcG9pbnRDb3VudCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhEZWZpbmVkKSB7XG4gICAgICAgICAgICBjb3VudCA9IF9saW1pdFZhbHVlKE1hdGgubWF4KC8vIEB0cy1leHBlY3QtZXJyb3IgTmVlZCB0byB0eXBlIF9wYXJzZWRcbiAgICAgICAgICAgIF9sb29rdXBCeUtleShfcGFyc2VkLCBpU2NhbGUuYXhpcywgbWF4LCB0cnVlKS5oaSArIDEsIC8vIEB0cy1leHBlY3QtZXJyb3IgTmVlZCB0byBmaXggdHlwZXMgb24gX2xvb2t1cEJ5S2V5XG4gICAgICAgICAgICBhbmltYXRpb25zRGlzYWJsZWQgPyAwIDogX2xvb2t1cEJ5S2V5KHBvaW50cywgYXhpcywgaVNjYWxlLmdldFBpeGVsRm9yVmFsdWUobWF4KSwgdHJ1ZSkuaGkgKyAxKSwgc3RhcnQsIHBvaW50Q291bnQpIC0gc3RhcnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb3VudCA9IHBvaW50Q291bnQgLSBzdGFydDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBzdGFydCxcbiAgICAgICAgY291bnRcbiAgICB9O1xufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHNjYWxlIHJhbmdlcyBoYXZlIGNoYW5nZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gbWV0YSAtIGRhdGFzZXQgbWV0YS5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfc2NhbGVSYW5nZXNDaGFuZ2VkKG1ldGEpIHtcbiAgICBjb25zdCB7IHhTY2FsZSAsIHlTY2FsZSAsIF9zY2FsZVJhbmdlcyAgfSA9IG1ldGE7XG4gICAgY29uc3QgbmV3UmFuZ2VzID0ge1xuICAgICAgICB4bWluOiB4U2NhbGUubWluLFxuICAgICAgICB4bWF4OiB4U2NhbGUubWF4LFxuICAgICAgICB5bWluOiB5U2NhbGUubWluLFxuICAgICAgICB5bWF4OiB5U2NhbGUubWF4XG4gICAgfTtcbiAgICBpZiAoIV9zY2FsZVJhbmdlcykge1xuICAgICAgICBtZXRhLl9zY2FsZVJhbmdlcyA9IG5ld1JhbmdlcztcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGNoYW5nZWQgPSBfc2NhbGVSYW5nZXMueG1pbiAhPT0geFNjYWxlLm1pbiB8fCBfc2NhbGVSYW5nZXMueG1heCAhPT0geFNjYWxlLm1heCB8fCBfc2NhbGVSYW5nZXMueW1pbiAhPT0geVNjYWxlLm1pbiB8fCBfc2NhbGVSYW5nZXMueW1heCAhPT0geVNjYWxlLm1heDtcbiAgICBPYmplY3QuYXNzaWduKF9zY2FsZVJhbmdlcywgbmV3UmFuZ2VzKTtcbiAgICByZXR1cm4gY2hhbmdlZDtcbn1cblxuY29uc3QgYXRFZGdlID0gKHQpPT50ID09PSAwIHx8IHQgPT09IDE7XG5jb25zdCBlbGFzdGljSW4gPSAodCwgcywgcCk9Pi0oTWF0aC5wb3coMiwgMTAgKiAodCAtPSAxKSkgKiBNYXRoLnNpbigodCAtIHMpICogVEFVIC8gcCkpO1xuY29uc3QgZWxhc3RpY091dCA9ICh0LCBzLCBwKT0+TWF0aC5wb3coMiwgLTEwICogdCkgKiBNYXRoLnNpbigodCAtIHMpICogVEFVIC8gcCkgKyAxO1xuLyoqXG4gKiBFYXNpbmcgZnVuY3Rpb25zIGFkYXB0ZWQgZnJvbSBSb2JlcnQgUGVubmVyJ3MgZWFzaW5nIGVxdWF0aW9ucy5cbiAqIEBuYW1lc3BhY2UgQ2hhcnQuaGVscGVycy5lYXNpbmcuZWZmZWN0c1xuICogQHNlZSBodHRwOi8vd3d3LnJvYmVydHBlbm5lci5jb20vZWFzaW5nL1xuICovIGNvbnN0IGVmZmVjdHMgPSB7XG4gICAgbGluZWFyOiAodCk9PnQsXG4gICAgZWFzZUluUXVhZDogKHQpPT50ICogdCxcbiAgICBlYXNlT3V0UXVhZDogKHQpPT4tdCAqICh0IC0gMiksXG4gICAgZWFzZUluT3V0UXVhZDogKHQpPT4odCAvPSAwLjUpIDwgMSA/IDAuNSAqIHQgKiB0IDogLTAuNSAqICgtLXQgKiAodCAtIDIpIC0gMSksXG4gICAgZWFzZUluQ3ViaWM6ICh0KT0+dCAqIHQgKiB0LFxuICAgIGVhc2VPdXRDdWJpYzogKHQpPT4odCAtPSAxKSAqIHQgKiB0ICsgMSxcbiAgICBlYXNlSW5PdXRDdWJpYzogKHQpPT4odCAvPSAwLjUpIDwgMSA/IDAuNSAqIHQgKiB0ICogdCA6IDAuNSAqICgodCAtPSAyKSAqIHQgKiB0ICsgMiksXG4gICAgZWFzZUluUXVhcnQ6ICh0KT0+dCAqIHQgKiB0ICogdCxcbiAgICBlYXNlT3V0UXVhcnQ6ICh0KT0+LSgodCAtPSAxKSAqIHQgKiB0ICogdCAtIDEpLFxuICAgIGVhc2VJbk91dFF1YXJ0OiAodCk9Pih0IC89IDAuNSkgPCAxID8gMC41ICogdCAqIHQgKiB0ICogdCA6IC0wLjUgKiAoKHQgLT0gMikgKiB0ICogdCAqIHQgLSAyKSxcbiAgICBlYXNlSW5RdWludDogKHQpPT50ICogdCAqIHQgKiB0ICogdCxcbiAgICBlYXNlT3V0UXVpbnQ6ICh0KT0+KHQgLT0gMSkgKiB0ICogdCAqIHQgKiB0ICsgMSxcbiAgICBlYXNlSW5PdXRRdWludDogKHQpPT4odCAvPSAwLjUpIDwgMSA/IDAuNSAqIHQgKiB0ICogdCAqIHQgKiB0IDogMC41ICogKCh0IC09IDIpICogdCAqIHQgKiB0ICogdCArIDIpLFxuICAgIGVhc2VJblNpbmU6ICh0KT0+LU1hdGguY29zKHQgKiBIQUxGX1BJKSArIDEsXG4gICAgZWFzZU91dFNpbmU6ICh0KT0+TWF0aC5zaW4odCAqIEhBTEZfUEkpLFxuICAgIGVhc2VJbk91dFNpbmU6ICh0KT0+LTAuNSAqIChNYXRoLmNvcyhQSSAqIHQpIC0gMSksXG4gICAgZWFzZUluRXhwbzogKHQpPT50ID09PSAwID8gMCA6IE1hdGgucG93KDIsIDEwICogKHQgLSAxKSksXG4gICAgZWFzZU91dEV4cG86ICh0KT0+dCA9PT0gMSA/IDEgOiAtTWF0aC5wb3coMiwgLTEwICogdCkgKyAxLFxuICAgIGVhc2VJbk91dEV4cG86ICh0KT0+YXRFZGdlKHQpID8gdCA6IHQgPCAwLjUgPyAwLjUgKiBNYXRoLnBvdygyLCAxMCAqICh0ICogMiAtIDEpKSA6IDAuNSAqICgtTWF0aC5wb3coMiwgLTEwICogKHQgKiAyIC0gMSkpICsgMiksXG4gICAgZWFzZUluQ2lyYzogKHQpPT50ID49IDEgPyB0IDogLShNYXRoLnNxcnQoMSAtIHQgKiB0KSAtIDEpLFxuICAgIGVhc2VPdXRDaXJjOiAodCk9Pk1hdGguc3FydCgxIC0gKHQgLT0gMSkgKiB0KSxcbiAgICBlYXNlSW5PdXRDaXJjOiAodCk9Pih0IC89IDAuNSkgPCAxID8gLTAuNSAqIChNYXRoLnNxcnQoMSAtIHQgKiB0KSAtIDEpIDogMC41ICogKE1hdGguc3FydCgxIC0gKHQgLT0gMikgKiB0KSArIDEpLFxuICAgIGVhc2VJbkVsYXN0aWM6ICh0KT0+YXRFZGdlKHQpID8gdCA6IGVsYXN0aWNJbih0LCAwLjA3NSwgMC4zKSxcbiAgICBlYXNlT3V0RWxhc3RpYzogKHQpPT5hdEVkZ2UodCkgPyB0IDogZWxhc3RpY091dCh0LCAwLjA3NSwgMC4zKSxcbiAgICBlYXNlSW5PdXRFbGFzdGljICh0KSB7XG4gICAgICAgIGNvbnN0IHMgPSAwLjExMjU7XG4gICAgICAgIGNvbnN0IHAgPSAwLjQ1O1xuICAgICAgICByZXR1cm4gYXRFZGdlKHQpID8gdCA6IHQgPCAwLjUgPyAwLjUgKiBlbGFzdGljSW4odCAqIDIsIHMsIHApIDogMC41ICsgMC41ICogZWxhc3RpY091dCh0ICogMiAtIDEsIHMsIHApO1xuICAgIH0sXG4gICAgZWFzZUluQmFjayAodCkge1xuICAgICAgICBjb25zdCBzID0gMS43MDE1ODtcbiAgICAgICAgcmV0dXJuIHQgKiB0ICogKChzICsgMSkgKiB0IC0gcyk7XG4gICAgfSxcbiAgICBlYXNlT3V0QmFjayAodCkge1xuICAgICAgICBjb25zdCBzID0gMS43MDE1ODtcbiAgICAgICAgcmV0dXJuICh0IC09IDEpICogdCAqICgocyArIDEpICogdCArIHMpICsgMTtcbiAgICB9LFxuICAgIGVhc2VJbk91dEJhY2sgKHQpIHtcbiAgICAgICAgbGV0IHMgPSAxLjcwMTU4O1xuICAgICAgICBpZiAoKHQgLz0gMC41KSA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiAodCAqIHQgKiAoKChzICo9IDEuNTI1KSArIDEpICogdCAtIHMpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMC41ICogKCh0IC09IDIpICogdCAqICgoKHMgKj0gMS41MjUpICsgMSkgKiB0ICsgcykgKyAyKTtcbiAgICB9LFxuICAgIGVhc2VJbkJvdW5jZTogKHQpPT4xIC0gZWZmZWN0cy5lYXNlT3V0Qm91bmNlKDEgLSB0KSxcbiAgICBlYXNlT3V0Qm91bmNlICh0KSB7XG4gICAgICAgIGNvbnN0IG0gPSA3LjU2MjU7XG4gICAgICAgIGNvbnN0IGQgPSAyLjc1O1xuICAgICAgICBpZiAodCA8IDEgLyBkKSB7XG4gICAgICAgICAgICByZXR1cm4gbSAqIHQgKiB0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0IDwgMiAvIGQpIHtcbiAgICAgICAgICAgIHJldHVybiBtICogKHQgLT0gMS41IC8gZCkgKiB0ICsgMC43NTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodCA8IDIuNSAvIGQpIHtcbiAgICAgICAgICAgIHJldHVybiBtICogKHQgLT0gMi4yNSAvIGQpICogdCArIDAuOTM3NTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbSAqICh0IC09IDIuNjI1IC8gZCkgKiB0ICsgMC45ODQzNzU7XG4gICAgfSxcbiAgICBlYXNlSW5PdXRCb3VuY2U6ICh0KT0+dCA8IDAuNSA/IGVmZmVjdHMuZWFzZUluQm91bmNlKHQgKiAyKSAqIDAuNSA6IGVmZmVjdHMuZWFzZU91dEJvdW5jZSh0ICogMiAtIDEpICogMC41ICsgMC41XG59O1xuXG5mdW5jdGlvbiBpc1BhdHRlcm5PckdyYWRpZW50KHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnW29iamVjdCBDYW52YXNQYXR0ZXJuXScgfHwgdHlwZSA9PT0gJ1tvYmplY3QgQ2FudmFzR3JhZGllbnRdJztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gY29sb3IodmFsdWUpIHtcbiAgICByZXR1cm4gaXNQYXR0ZXJuT3JHcmFkaWVudCh2YWx1ZSkgPyB2YWx1ZSA6IG5ldyBDb2xvcih2YWx1ZSk7XG59XG5mdW5jdGlvbiBnZXRIb3ZlckNvbG9yKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzUGF0dGVybk9yR3JhZGllbnQodmFsdWUpID8gdmFsdWUgOiBuZXcgQ29sb3IodmFsdWUpLnNhdHVyYXRlKDAuNSkuZGFya2VuKDAuMSkuaGV4U3RyaW5nKCk7XG59XG5cbmNvbnN0IG51bWJlcnMgPSBbXG4gICAgJ3gnLFxuICAgICd5JyxcbiAgICAnYm9yZGVyV2lkdGgnLFxuICAgICdyYWRpdXMnLFxuICAgICd0ZW5zaW9uJ1xuXTtcbmNvbnN0IGNvbG9ycyA9IFtcbiAgICAnY29sb3InLFxuICAgICdib3JkZXJDb2xvcicsXG4gICAgJ2JhY2tncm91bmRDb2xvcidcbl07XG5mdW5jdGlvbiBhcHBseUFuaW1hdGlvbnNEZWZhdWx0cyhkZWZhdWx0cykge1xuICAgIGRlZmF1bHRzLnNldCgnYW5pbWF0aW9uJywge1xuICAgICAgICBkZWxheTogdW5kZWZpbmVkLFxuICAgICAgICBkdXJhdGlvbjogMTAwMCxcbiAgICAgICAgZWFzaW5nOiAnZWFzZU91dFF1YXJ0JyxcbiAgICAgICAgZm46IHVuZGVmaW5lZCxcbiAgICAgICAgZnJvbTogdW5kZWZpbmVkLFxuICAgICAgICBsb29wOiB1bmRlZmluZWQsXG4gICAgICAgIHRvOiB1bmRlZmluZWQsXG4gICAgICAgIHR5cGU6IHVuZGVmaW5lZFxuICAgIH0pO1xuICAgIGRlZmF1bHRzLmRlc2NyaWJlKCdhbmltYXRpb24nLCB7XG4gICAgICAgIF9mYWxsYmFjazogZmFsc2UsXG4gICAgICAgIF9pbmRleGFibGU6IGZhbHNlLFxuICAgICAgICBfc2NyaXB0YWJsZTogKG5hbWUpPT5uYW1lICE9PSAnb25Qcm9ncmVzcycgJiYgbmFtZSAhPT0gJ29uQ29tcGxldGUnICYmIG5hbWUgIT09ICdmbidcbiAgICB9KTtcbiAgICBkZWZhdWx0cy5zZXQoJ2FuaW1hdGlvbnMnLCB7XG4gICAgICAgIGNvbG9yczoge1xuICAgICAgICAgICAgdHlwZTogJ2NvbG9yJyxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IGNvbG9yc1xuICAgICAgICB9LFxuICAgICAgICBudW1iZXJzOiB7XG4gICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IG51bWJlcnNcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGRlZmF1bHRzLmRlc2NyaWJlKCdhbmltYXRpb25zJywge1xuICAgICAgICBfZmFsbGJhY2s6ICdhbmltYXRpb24nXG4gICAgfSk7XG4gICAgZGVmYXVsdHMuc2V0KCd0cmFuc2l0aW9ucycsIHtcbiAgICAgICAgYWN0aXZlOiB7XG4gICAgICAgICAgICBhbmltYXRpb246IHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogNDAwXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlc2l6ZToge1xuICAgICAgICAgICAgYW5pbWF0aW9uOiB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2hvdzoge1xuICAgICAgICAgICAgYW5pbWF0aW9uczoge1xuICAgICAgICAgICAgICAgIGNvbG9yczoge1xuICAgICAgICAgICAgICAgICAgICBmcm9tOiAndHJhbnNwYXJlbnQnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGhpZGU6IHtcbiAgICAgICAgICAgIGFuaW1hdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBjb2xvcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgdG86ICd0cmFuc3BhcmVudCdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHZpc2libGU6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgICAgICAgICBlYXNpbmc6ICdsaW5lYXInLFxuICAgICAgICAgICAgICAgICAgICBmbjogKHYpPT52IHwgMFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBhcHBseUxheW91dHNEZWZhdWx0cyhkZWZhdWx0cykge1xuICAgIGRlZmF1bHRzLnNldCgnbGF5b3V0Jywge1xuICAgICAgICBhdXRvUGFkZGluZzogdHJ1ZSxcbiAgICAgICAgcGFkZGluZzoge1xuICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgICBsZWZ0OiAwXG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuY29uc3QgaW50bENhY2hlID0gbmV3IE1hcCgpO1xuZnVuY3Rpb24gZ2V0TnVtYmVyRm9ybWF0KGxvY2FsZSwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gbG9jYWxlICsgSlNPTi5zdHJpbmdpZnkob3B0aW9ucyk7XG4gICAgbGV0IGZvcm1hdHRlciA9IGludGxDYWNoZS5nZXQoY2FjaGVLZXkpO1xuICAgIGlmICghZm9ybWF0dGVyKSB7XG4gICAgICAgIGZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NhbGUsIG9wdGlvbnMpO1xuICAgICAgICBpbnRsQ2FjaGUuc2V0KGNhY2hlS2V5LCBmb3JtYXR0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0dGVyO1xufVxuZnVuY3Rpb24gZm9ybWF0TnVtYmVyKG51bSwgbG9jYWxlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGdldE51bWJlckZvcm1hdChsb2NhbGUsIG9wdGlvbnMpLmZvcm1hdChudW0pO1xufVxuXG5jb25zdCBmb3JtYXR0ZXJzID0ge1xuIHZhbHVlcyAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpID8gIHZhbHVlIDogJycgKyB2YWx1ZTtcbiAgICB9LFxuIG51bWVyaWMgKHRpY2tWYWx1ZSwgaW5kZXgsIHRpY2tzKSB7XG4gICAgICAgIGlmICh0aWNrVmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5jaGFydC5vcHRpb25zLmxvY2FsZTtcbiAgICAgICAgbGV0IG5vdGF0aW9uO1xuICAgICAgICBsZXQgZGVsdGEgPSB0aWNrVmFsdWU7XG4gICAgICAgIGlmICh0aWNrcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBjb25zdCBtYXhUaWNrID0gTWF0aC5tYXgoTWF0aC5hYnModGlja3NbMF0udmFsdWUpLCBNYXRoLmFicyh0aWNrc1t0aWNrcy5sZW5ndGggLSAxXS52YWx1ZSkpO1xuICAgICAgICAgICAgaWYgKG1heFRpY2sgPCAxZS00IHx8IG1heFRpY2sgPiAxZSsxNSkge1xuICAgICAgICAgICAgICAgIG5vdGF0aW9uID0gJ3NjaWVudGlmaWMnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsdGEgPSBjYWxjdWxhdGVEZWx0YSh0aWNrVmFsdWUsIHRpY2tzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsb2dEZWx0YSA9IGxvZzEwKE1hdGguYWJzKGRlbHRhKSk7XG4gICAgICAgIGNvbnN0IG51bURlY2ltYWwgPSBpc05hTihsb2dEZWx0YSkgPyAxIDogTWF0aC5tYXgoTWF0aC5taW4oLTEgKiBNYXRoLmZsb29yKGxvZ0RlbHRhKSwgMjApLCAwKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG5vdGF0aW9uLFxuICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBudW1EZWNpbWFsLFxuICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBudW1EZWNpbWFsXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5hc3NpZ24ob3B0aW9ucywgdGhpcy5vcHRpb25zLnRpY2tzLmZvcm1hdCk7XG4gICAgICAgIHJldHVybiBmb3JtYXROdW1iZXIodGlja1ZhbHVlLCBsb2NhbGUsIG9wdGlvbnMpO1xuICAgIH0sXG4gbG9nYXJpdGhtaWMgKHRpY2tWYWx1ZSwgaW5kZXgsIHRpY2tzKSB7XG4gICAgICAgIGlmICh0aWNrVmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVtYWluID0gdGlja3NbaW5kZXhdLnNpZ25pZmljYW5kIHx8IHRpY2tWYWx1ZSAvIE1hdGgucG93KDEwLCBNYXRoLmZsb29yKGxvZzEwKHRpY2tWYWx1ZSkpKTtcbiAgICAgICAgaWYgKFtcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAyLFxuICAgICAgICAgICAgMyxcbiAgICAgICAgICAgIDUsXG4gICAgICAgICAgICAxMCxcbiAgICAgICAgICAgIDE1XG4gICAgICAgIF0uaW5jbHVkZXMocmVtYWluKSB8fCBpbmRleCA+IDAuOCAqIHRpY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlcnMubnVtZXJpYy5jYWxsKHRoaXMsIHRpY2tWYWx1ZSwgaW5kZXgsIHRpY2tzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxufTtcbmZ1bmN0aW9uIGNhbGN1bGF0ZURlbHRhKHRpY2tWYWx1ZSwgdGlja3MpIHtcbiAgICBsZXQgZGVsdGEgPSB0aWNrcy5sZW5ndGggPiAzID8gdGlja3NbMl0udmFsdWUgLSB0aWNrc1sxXS52YWx1ZSA6IHRpY2tzWzFdLnZhbHVlIC0gdGlja3NbMF0udmFsdWU7XG4gICAgaWYgKE1hdGguYWJzKGRlbHRhKSA+PSAxICYmIHRpY2tWYWx1ZSAhPT0gTWF0aC5mbG9vcih0aWNrVmFsdWUpKSB7XG4gICAgICAgIGRlbHRhID0gdGlja1ZhbHVlIC0gTWF0aC5mbG9vcih0aWNrVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gZGVsdGE7XG59XG4gdmFyIFRpY2tzID0ge1xuICAgIGZvcm1hdHRlcnNcbn07XG5cbmZ1bmN0aW9uIGFwcGx5U2NhbGVEZWZhdWx0cyhkZWZhdWx0cykge1xuICAgIGRlZmF1bHRzLnNldCgnc2NhbGUnLCB7XG4gICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgIG9mZnNldDogZmFsc2UsXG4gICAgICAgIHJldmVyc2U6IGZhbHNlLFxuICAgICAgICBiZWdpbkF0WmVybzogZmFsc2UsXG4gYm91bmRzOiAndGlja3MnLFxuICAgICAgICBjbGlwOiB0cnVlLFxuIGdyYWNlOiAwLFxuICAgICAgICBncmlkOiB7XG4gICAgICAgICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgICAgICAgbGluZVdpZHRoOiAxLFxuICAgICAgICAgICAgZHJhd09uQ2hhcnRBcmVhOiB0cnVlLFxuICAgICAgICAgICAgZHJhd1RpY2tzOiB0cnVlLFxuICAgICAgICAgICAgdGlja0xlbmd0aDogOCxcbiAgICAgICAgICAgIHRpY2tXaWR0aDogKF9jdHgsIG9wdGlvbnMpPT5vcHRpb25zLmxpbmVXaWR0aCxcbiAgICAgICAgICAgIHRpY2tDb2xvcjogKF9jdHgsIG9wdGlvbnMpPT5vcHRpb25zLmNvbG9yLFxuICAgICAgICAgICAgb2Zmc2V0OiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBib3JkZXI6IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgICAgICBkYXNoOiBbXSxcbiAgICAgICAgICAgIGRhc2hPZmZzZXQ6IDAuMCxcbiAgICAgICAgICAgIHdpZHRoOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgICAgIHRleHQ6ICcnLFxuICAgICAgICAgICAgcGFkZGluZzoge1xuICAgICAgICAgICAgICAgIHRvcDogNCxcbiAgICAgICAgICAgICAgICBib3R0b206IDRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGlja3M6IHtcbiAgICAgICAgICAgIG1pblJvdGF0aW9uOiAwLFxuICAgICAgICAgICAgbWF4Um90YXRpb246IDUwLFxuICAgICAgICAgICAgbWlycm9yOiBmYWxzZSxcbiAgICAgICAgICAgIHRleHRTdHJva2VXaWR0aDogMCxcbiAgICAgICAgICAgIHRleHRTdHJva2VDb2xvcjogJycsXG4gICAgICAgICAgICBwYWRkaW5nOiAzLFxuICAgICAgICAgICAgZGlzcGxheTogdHJ1ZSxcbiAgICAgICAgICAgIGF1dG9Ta2lwOiB0cnVlLFxuICAgICAgICAgICAgYXV0b1NraXBQYWRkaW5nOiAzLFxuICAgICAgICAgICAgbGFiZWxPZmZzZXQ6IDAsXG4gICAgICAgICAgICBjYWxsYmFjazogVGlja3MuZm9ybWF0dGVycy52YWx1ZXMsXG4gICAgICAgICAgICBtaW5vcjoge30sXG4gICAgICAgICAgICBtYWpvcjoge30sXG4gICAgICAgICAgICBhbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICBjcm9zc0FsaWduOiAnbmVhcicsXG4gICAgICAgICAgICBzaG93TGFiZWxCYWNrZHJvcDogZmFsc2UsXG4gICAgICAgICAgICBiYWNrZHJvcENvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KScsXG4gICAgICAgICAgICBiYWNrZHJvcFBhZGRpbmc6IDJcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGRlZmF1bHRzLnJvdXRlKCdzY2FsZS50aWNrcycsICdjb2xvcicsICcnLCAnY29sb3InKTtcbiAgICBkZWZhdWx0cy5yb3V0ZSgnc2NhbGUuZ3JpZCcsICdjb2xvcicsICcnLCAnYm9yZGVyQ29sb3InKTtcbiAgICBkZWZhdWx0cy5yb3V0ZSgnc2NhbGUuYm9yZGVyJywgJ2NvbG9yJywgJycsICdib3JkZXJDb2xvcicpO1xuICAgIGRlZmF1bHRzLnJvdXRlKCdzY2FsZS50aXRsZScsICdjb2xvcicsICcnLCAnY29sb3InKTtcbiAgICBkZWZhdWx0cy5kZXNjcmliZSgnc2NhbGUnLCB7XG4gICAgICAgIF9mYWxsYmFjazogZmFsc2UsXG4gICAgICAgIF9zY3JpcHRhYmxlOiAobmFtZSk9PiFuYW1lLnN0YXJ0c1dpdGgoJ2JlZm9yZScpICYmICFuYW1lLnN0YXJ0c1dpdGgoJ2FmdGVyJykgJiYgbmFtZSAhPT0gJ2NhbGxiYWNrJyAmJiBuYW1lICE9PSAncGFyc2VyJyxcbiAgICAgICAgX2luZGV4YWJsZTogKG5hbWUpPT5uYW1lICE9PSAnYm9yZGVyRGFzaCcgJiYgbmFtZSAhPT0gJ3RpY2tCb3JkZXJEYXNoJyAmJiBuYW1lICE9PSAnZGFzaCdcbiAgICB9KTtcbiAgICBkZWZhdWx0cy5kZXNjcmliZSgnc2NhbGVzJywge1xuICAgICAgICBfZmFsbGJhY2s6ICdzY2FsZSdcbiAgICB9KTtcbiAgICBkZWZhdWx0cy5kZXNjcmliZSgnc2NhbGUudGlja3MnLCB7XG4gICAgICAgIF9zY3JpcHRhYmxlOiAobmFtZSk9Pm5hbWUgIT09ICdiYWNrZHJvcFBhZGRpbmcnICYmIG5hbWUgIT09ICdjYWxsYmFjaycsXG4gICAgICAgIF9pbmRleGFibGU6IChuYW1lKT0+bmFtZSAhPT0gJ2JhY2tkcm9wUGFkZGluZydcbiAgICB9KTtcbn1cblxuY29uc3Qgb3ZlcnJpZGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBmdW5jdGlvbiBnZXRTY29wZSQxKG5vZGUsIGtleSkge1xuICAgIGlmICgha2V5KSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBjb25zdCBrZXlzID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgZm9yKGxldCBpID0gMCwgbiA9IGtleXMubGVuZ3RoOyBpIDwgbjsgKytpKXtcbiAgICAgICAgY29uc3QgayA9IGtleXNbaV07XG4gICAgICAgIG5vZGUgPSBub2RlW2tdIHx8IChub2RlW2tdID0gT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xufVxuZnVuY3Rpb24gc2V0KHJvb3QsIHNjb3BlLCB2YWx1ZXMpIHtcbiAgICBpZiAodHlwZW9mIHNjb3BlID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gbWVyZ2UoZ2V0U2NvcGUkMShyb290LCBzY29wZSksIHZhbHVlcyk7XG4gICAgfVxuICAgIHJldHVybiBtZXJnZShnZXRTY29wZSQxKHJvb3QsICcnKSwgc2NvcGUpO1xufVxuIGNsYXNzIERlZmF1bHRzIHtcbiAgICBjb25zdHJ1Y3RvcihfZGVzY3JpcHRvcnMsIF9hcHBsaWVycyl7XG4gICAgICAgIHRoaXMuYW5pbWF0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9ICdyZ2JhKDAsMCwwLDAuMSknO1xuICAgICAgICB0aGlzLmJvcmRlckNvbG9yID0gJ3JnYmEoMCwwLDAsMC4xKSc7XG4gICAgICAgIHRoaXMuY29sb3IgPSAnIzY2Nic7XG4gICAgICAgIHRoaXMuZGF0YXNldHMgPSB7fTtcbiAgICAgICAgdGhpcy5kZXZpY2VQaXhlbFJhdGlvID0gKGNvbnRleHQpPT5jb250ZXh0LmNoYXJ0LnBsYXRmb3JtLmdldERldmljZVBpeGVsUmF0aW8oKTtcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IHt9O1xuICAgICAgICB0aGlzLmV2ZW50cyA9IFtcbiAgICAgICAgICAgICdtb3VzZW1vdmUnLFxuICAgICAgICAgICAgJ21vdXNlb3V0JyxcbiAgICAgICAgICAgICdjbGljaycsXG4gICAgICAgICAgICAndG91Y2hzdGFydCcsXG4gICAgICAgICAgICAndG91Y2htb3ZlJ1xuICAgICAgICBdO1xuICAgICAgICB0aGlzLmZvbnQgPSB7XG4gICAgICAgICAgICBmYW1pbHk6IFwiJ0hlbHZldGljYSBOZXVlJywgJ0hlbHZldGljYScsICdBcmlhbCcsIHNhbnMtc2VyaWZcIixcbiAgICAgICAgICAgIHNpemU6IDEyLFxuICAgICAgICAgICAgc3R5bGU6ICdub3JtYWwnLFxuICAgICAgICAgICAgbGluZUhlaWdodDogMS4yLFxuICAgICAgICAgICAgd2VpZ2h0OiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaG92ZXIgPSB7fTtcbiAgICAgICAgdGhpcy5ob3ZlckJhY2tncm91bmRDb2xvciA9IChjdHgsIG9wdGlvbnMpPT5nZXRIb3ZlckNvbG9yKG9wdGlvbnMuYmFja2dyb3VuZENvbG9yKTtcbiAgICAgICAgdGhpcy5ob3ZlckJvcmRlckNvbG9yID0gKGN0eCwgb3B0aW9ucyk9PmdldEhvdmVyQ29sb3Iob3B0aW9ucy5ib3JkZXJDb2xvcik7XG4gICAgICAgIHRoaXMuaG92ZXJDb2xvciA9IChjdHgsIG9wdGlvbnMpPT5nZXRIb3ZlckNvbG9yKG9wdGlvbnMuY29sb3IpO1xuICAgICAgICB0aGlzLmluZGV4QXhpcyA9ICd4JztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbiA9IHtcbiAgICAgICAgICAgIG1vZGU6ICduZWFyZXN0JyxcbiAgICAgICAgICAgIGludGVyc2VjdDogdHJ1ZSxcbiAgICAgICAgICAgIGluY2x1ZGVJbnZpc2libGU6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubWFpbnRhaW5Bc3BlY3RSYXRpbyA9IHRydWU7XG4gICAgICAgIHRoaXMub25Ib3ZlciA9IG51bGw7XG4gICAgICAgIHRoaXMub25DbGljayA9IG51bGw7XG4gICAgICAgIHRoaXMucGFyc2luZyA9IHRydWU7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IHt9O1xuICAgICAgICB0aGlzLnJlc3BvbnNpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLnNjYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnNjYWxlcyA9IHt9O1xuICAgICAgICB0aGlzLnNob3dMaW5lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kcmF3QWN0aXZlRWxlbWVudHNPblRvcCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVzY3JpYmUoX2Rlc2NyaXB0b3JzKTtcbiAgICAgICAgdGhpcy5hcHBseShfYXBwbGllcnMpO1xuICAgIH1cbiBzZXQoc2NvcGUsIHZhbHVlcykge1xuICAgICAgICByZXR1cm4gc2V0KHRoaXMsIHNjb3BlLCB2YWx1ZXMpO1xuICAgIH1cbiBnZXQoc2NvcGUpIHtcbiAgICAgICAgcmV0dXJuIGdldFNjb3BlJDEodGhpcywgc2NvcGUpO1xuICAgIH1cbiBkZXNjcmliZShzY29wZSwgdmFsdWVzKSB7XG4gICAgICAgIHJldHVybiBzZXQoZGVzY3JpcHRvcnMsIHNjb3BlLCB2YWx1ZXMpO1xuICAgIH1cbiAgICBvdmVycmlkZShzY29wZSwgdmFsdWVzKSB7XG4gICAgICAgIHJldHVybiBzZXQob3ZlcnJpZGVzLCBzY29wZSwgdmFsdWVzKTtcbiAgICB9XG4gcm91dGUoc2NvcGUsIG5hbWUsIHRhcmdldFNjb3BlLCB0YXJnZXROYW1lKSB7XG4gICAgICAgIGNvbnN0IHNjb3BlT2JqZWN0ID0gZ2V0U2NvcGUkMSh0aGlzLCBzY29wZSk7XG4gICAgICAgIGNvbnN0IHRhcmdldFNjb3BlT2JqZWN0ID0gZ2V0U2NvcGUkMSh0aGlzLCB0YXJnZXRTY29wZSk7XG4gICAgICAgIGNvbnN0IHByaXZhdGVOYW1lID0gJ18nICsgbmFtZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc2NvcGVPYmplY3QsIHtcbiAgICAgICAgICAgIFtwcml2YXRlTmFtZV06IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogc2NvcGVPYmplY3RbbmFtZV0sXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbbmFtZV06IHtcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGdldCAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsID0gdGhpc1twcml2YXRlTmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHRhcmdldFNjb3BlT2JqZWN0W3RhcmdldE5hbWVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QobG9jYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGFyZ2V0LCBsb2NhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlT3JEZWZhdWx0KGxvY2FsLCB0YXJnZXQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0ICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW3ByaXZhdGVOYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFwcGx5KGFwcGxpZXJzKSB7XG4gICAgICAgIGFwcGxpZXJzLmZvckVhY2goKGFwcGx5KT0+YXBwbHkodGhpcykpO1xuICAgIH1cbn1cbnZhciBkZWZhdWx0cyA9IC8qICNfX1BVUkVfXyAqLyBuZXcgRGVmYXVsdHMoe1xuICAgIF9zY3JpcHRhYmxlOiAobmFtZSk9PiFuYW1lLnN0YXJ0c1dpdGgoJ29uJyksXG4gICAgX2luZGV4YWJsZTogKG5hbWUpPT5uYW1lICE9PSAnZXZlbnRzJyxcbiAgICBob3Zlcjoge1xuICAgICAgICBfZmFsbGJhY2s6ICdpbnRlcmFjdGlvbidcbiAgICB9LFxuICAgIGludGVyYWN0aW9uOiB7XG4gICAgICAgIF9zY3JpcHRhYmxlOiBmYWxzZSxcbiAgICAgICAgX2luZGV4YWJsZTogZmFsc2VcbiAgICB9XG59LCBbXG4gICAgYXBwbHlBbmltYXRpb25zRGVmYXVsdHMsXG4gICAgYXBwbHlMYXlvdXRzRGVmYXVsdHMsXG4gICAgYXBwbHlTY2FsZURlZmF1bHRzXG5dKTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gZm9udCBvYmplY3QgaW50byBhIENTUyBmb250IHN0cmluZy5cbiAqIEBwYXJhbSBmb250IC0gQSBmb250IG9iamVjdC5cbiAqIEByZXR1cm4gVGhlIENTUyBmb250IHN0cmluZy4gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mb250XG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIHRvRm9udFN0cmluZyhmb250KSB7XG4gICAgaWYgKCFmb250IHx8IGlzTnVsbE9yVW5kZWYoZm9udC5zaXplKSB8fCBpc051bGxPclVuZGVmKGZvbnQuZmFtaWx5KSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChmb250LnN0eWxlID8gZm9udC5zdHlsZSArICcgJyA6ICcnKSArIChmb250LndlaWdodCA/IGZvbnQud2VpZ2h0ICsgJyAnIDogJycpICsgZm9udC5zaXplICsgJ3B4ICcgKyBmb250LmZhbWlseTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfbWVhc3VyZVRleHQoY3R4LCBkYXRhLCBnYywgbG9uZ2VzdCwgc3RyaW5nKSB7XG4gICAgbGV0IHRleHRXaWR0aCA9IGRhdGFbc3RyaW5nXTtcbiAgICBpZiAoIXRleHRXaWR0aCkge1xuICAgICAgICB0ZXh0V2lkdGggPSBkYXRhW3N0cmluZ10gPSBjdHgubWVhc3VyZVRleHQoc3RyaW5nKS53aWR0aDtcbiAgICAgICAgZ2MucHVzaChzdHJpbmcpO1xuICAgIH1cbiAgICBpZiAodGV4dFdpZHRoID4gbG9uZ2VzdCkge1xuICAgICAgICBsb25nZXN0ID0gdGV4dFdpZHRoO1xuICAgIH1cbiAgICByZXR1cm4gbG9uZ2VzdDtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqLyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gX2xvbmdlc3RUZXh0KGN0eCwgZm9udCwgYXJyYXlPZlRoaW5ncywgY2FjaGUpIHtcbiAgICBjYWNoZSA9IGNhY2hlIHx8IHt9O1xuICAgIGxldCBkYXRhID0gY2FjaGUuZGF0YSA9IGNhY2hlLmRhdGEgfHwge307XG4gICAgbGV0IGdjID0gY2FjaGUuZ2FyYmFnZUNvbGxlY3QgPSBjYWNoZS5nYXJiYWdlQ29sbGVjdCB8fCBbXTtcbiAgICBpZiAoY2FjaGUuZm9udCAhPT0gZm9udCkge1xuICAgICAgICBkYXRhID0gY2FjaGUuZGF0YSA9IHt9O1xuICAgICAgICBnYyA9IGNhY2hlLmdhcmJhZ2VDb2xsZWN0ID0gW107XG4gICAgICAgIGNhY2hlLmZvbnQgPSBmb250O1xuICAgIH1cbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC5mb250ID0gZm9udDtcbiAgICBsZXQgbG9uZ2VzdCA9IDA7XG4gICAgY29uc3QgaWxlbiA9IGFycmF5T2ZUaGluZ3MubGVuZ3RoO1xuICAgIGxldCBpLCBqLCBqbGVuLCB0aGluZywgbmVzdGVkVGhpbmc7XG4gICAgZm9yKGkgPSAwOyBpIDwgaWxlbjsgaSsrKXtcbiAgICAgICAgdGhpbmcgPSBhcnJheU9mVGhpbmdzW2ldO1xuICAgICAgICAvLyBVbmRlZmluZWQgc3RyaW5ncyBhbmQgYXJyYXlzIHNob3VsZCBub3QgYmUgbWVhc3VyZWRcbiAgICAgICAgaWYgKHRoaW5nICE9PSB1bmRlZmluZWQgJiYgdGhpbmcgIT09IG51bGwgJiYgIWlzQXJyYXkodGhpbmcpKSB7XG4gICAgICAgICAgICBsb25nZXN0ID0gX21lYXN1cmVUZXh0KGN0eCwgZGF0YSwgZ2MsIGxvbmdlc3QsIHRoaW5nKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KHRoaW5nKSkge1xuICAgICAgICAgICAgLy8gaWYgaXQgaXMgYW4gYXJyYXkgbGV0cyBtZWFzdXJlIGVhY2ggZWxlbWVudFxuICAgICAgICAgICAgLy8gdG8gZG8gbWF5YmUgc2ltcGxpZnkgdGhpcyBmdW5jdGlvbiBhIGJpdCBzbyB3ZSBjYW4gZG8gdGhpcyBtb3JlIHJlY3Vyc2l2ZWx5P1xuICAgICAgICAgICAgZm9yKGogPSAwLCBqbGVuID0gdGhpbmcubGVuZ3RoOyBqIDwgamxlbjsgaisrKXtcbiAgICAgICAgICAgICAgICBuZXN0ZWRUaGluZyA9IHRoaW5nW2pdO1xuICAgICAgICAgICAgICAgIC8vIFVuZGVmaW5lZCBzdHJpbmdzIGFuZCBhcnJheXMgc2hvdWxkIG5vdCBiZSBtZWFzdXJlZFxuICAgICAgICAgICAgICAgIGlmIChuZXN0ZWRUaGluZyAhPT0gdW5kZWZpbmVkICYmIG5lc3RlZFRoaW5nICE9PSBudWxsICYmICFpc0FycmF5KG5lc3RlZFRoaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICBsb25nZXN0ID0gX21lYXN1cmVUZXh0KGN0eCwgZGF0YSwgZ2MsIGxvbmdlc3QsIG5lc3RlZFRoaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3R4LnJlc3RvcmUoKTtcbiAgICBjb25zdCBnY0xlbiA9IGdjLmxlbmd0aCAvIDI7XG4gICAgaWYgKGdjTGVuID4gYXJyYXlPZlRoaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgZ2NMZW47IGkrKyl7XG4gICAgICAgICAgICBkZWxldGUgZGF0YVtnY1tpXV07XG4gICAgICAgIH1cbiAgICAgICAgZ2Muc3BsaWNlKDAsIGdjTGVuKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvbmdlc3Q7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGFsaWduZWQgcGl4ZWwgdmFsdWUgdG8gYXZvaWQgYW50aS1hbGlhc2luZyBibHVyXG4gKiBAcGFyYW0gY2hhcnQgLSBUaGUgY2hhcnQgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGl4ZWwgLSBBIHBpeGVsIHZhbHVlLlxuICogQHBhcmFtIHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBlbGVtZW50LlxuICogQHJldHVybnMgVGhlIGFsaWduZWQgcGl4ZWwgdmFsdWUuXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9hbGlnblBpeGVsKGNoYXJ0LCBwaXhlbCwgd2lkdGgpIHtcbiAgICBjb25zdCBkZXZpY2VQaXhlbFJhdGlvID0gY2hhcnQuY3VycmVudERldmljZVBpeGVsUmF0aW87XG4gICAgY29uc3QgaGFsZldpZHRoID0gd2lkdGggIT09IDAgPyBNYXRoLm1heCh3aWR0aCAvIDIsIDAuNSkgOiAwO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKChwaXhlbCAtIGhhbGZXaWR0aCkgKiBkZXZpY2VQaXhlbFJhdGlvKSAvIGRldmljZVBpeGVsUmF0aW8gKyBoYWxmV2lkdGg7XG59XG4vKipcbiAqIENsZWFycyB0aGUgZW50aXJlIGNhbnZhcy5cbiAqLyBmdW5jdGlvbiBjbGVhckNhbnZhcyhjYW52YXMsIGN0eCkge1xuICAgIGlmICghY3R4ICYmICFjYW52YXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdHggPSBjdHggfHwgY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgY3R4LnNhdmUoKTtcbiAgICAvLyBjYW52YXMud2lkdGggYW5kIGNhbnZhcy5oZWlnaHQgZG8gbm90IGNvbnNpZGVyIHRoZSBjYW52YXMgdHJhbnNmb3JtLFxuICAgIC8vIHdoaWxlIGNsZWFyUmVjdCBkb2VzXG4gICAgY3R4LnJlc2V0VHJhbnNmb3JtKCk7XG4gICAgY3R4LmNsZWFyUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgIGN0eC5yZXN0b3JlKCk7XG59XG5mdW5jdGlvbiBkcmF3UG9pbnQoY3R4LCBvcHRpb25zLCB4LCB5KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgIGRyYXdQb2ludExlZ2VuZChjdHgsIG9wdGlvbnMsIHgsIHksIG51bGwpO1xufVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIGRyYXdQb2ludExlZ2VuZChjdHgsIG9wdGlvbnMsIHgsIHksIHcpIHtcbiAgICBsZXQgdHlwZSwgeE9mZnNldCwgeU9mZnNldCwgc2l6ZSwgY29ybmVyUmFkaXVzLCB3aWR0aCwgeE9mZnNldFcsIHlPZmZzZXRXO1xuICAgIGNvbnN0IHN0eWxlID0gb3B0aW9ucy5wb2ludFN0eWxlO1xuICAgIGNvbnN0IHJvdGF0aW9uID0gb3B0aW9ucy5yb3RhdGlvbjtcbiAgICBjb25zdCByYWRpdXMgPSBvcHRpb25zLnJhZGl1cztcbiAgICBsZXQgcmFkID0gKHJvdGF0aW9uIHx8IDApICogUkFEX1BFUl9ERUc7XG4gICAgaWYgKHN0eWxlICYmIHR5cGVvZiBzdHlsZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdHlwZSA9IHN0eWxlLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmICh0eXBlID09PSAnW29iamVjdCBIVE1MSW1hZ2VFbGVtZW50XScgfHwgdHlwZSA9PT0gJ1tvYmplY3QgSFRNTENhbnZhc0VsZW1lbnRdJykge1xuICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgIGN0eC50cmFuc2xhdGUoeCwgeSk7XG4gICAgICAgICAgICBjdHgucm90YXRlKHJhZCk7XG4gICAgICAgICAgICBjdHguZHJhd0ltYWdlKHN0eWxlLCAtc3R5bGUud2lkdGggLyAyLCAtc3R5bGUuaGVpZ2h0IC8gMiwgc3R5bGUud2lkdGgsIHN0eWxlLmhlaWdodCk7XG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc05hTihyYWRpdXMpIHx8IHJhZGl1cyA8PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIHN3aXRjaChzdHlsZSl7XG4gICAgICAgIC8vIERlZmF1bHQgaW5jbHVkZXMgY2lyY2xlXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodykge1xuICAgICAgICAgICAgICAgIGN0eC5lbGxpcHNlKHgsIHksIHcgLyAyLCByYWRpdXMsIDAsIDAsIFRBVSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN0eC5hcmMoeCwgeSwgcmFkaXVzLCAwLCBUQVUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RyaWFuZ2xlJzpcbiAgICAgICAgICAgIHdpZHRoID0gdyA/IHcgLyAyIDogcmFkaXVzO1xuICAgICAgICAgICAgY3R4Lm1vdmVUbyh4ICsgTWF0aC5zaW4ocmFkKSAqIHdpZHRoLCB5IC0gTWF0aC5jb3MocmFkKSAqIHJhZGl1cyk7XG4gICAgICAgICAgICByYWQgKz0gVFdPX1RISVJEU19QSTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIE1hdGguc2luKHJhZCkgKiB3aWR0aCwgeSAtIE1hdGguY29zKHJhZCkgKiByYWRpdXMpO1xuICAgICAgICAgICAgcmFkICs9IFRXT19USElSRFNfUEk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHggKyBNYXRoLnNpbihyYWQpICogd2lkdGgsIHkgLSBNYXRoLmNvcyhyYWQpICogcmFkaXVzKTtcbiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyZWN0Um91bmRlZCc6XG4gICAgICAgICAgICAvLyBOT1RFOiB0aGUgcm91bmRlZCByZWN0IGltcGxlbWVudGF0aW9uIGNoYW5nZWQgdG8gdXNlIGBhcmNgIGluc3RlYWQgb2ZcbiAgICAgICAgICAgIC8vIGBxdWFkcmF0aWNDdXJ2ZVRvYCBzaW5jZSBpdCBnZW5lcmF0ZXMgYmV0dGVyIHJlc3VsdHMgd2hlbiByZWN0IGlzXG4gICAgICAgICAgICAvLyBhbG1vc3QgYSBjaXJjbGUuIDAuNTE2IChpbnN0ZWFkIG9mIDAuNSkgcHJvZHVjZXMgcmVzdWx0cyB3aXRoIHZpc3VhbGx5XG4gICAgICAgICAgICAvLyBjbG9zZXIgcHJvcG9ydGlvbiB0byB0aGUgcHJldmlvdXMgaW1wbCBhbmQgaXQgaXMgaW5zY3JpYmVkIGluIHRoZVxuICAgICAgICAgICAgLy8gY2lyY2xlIHdpdGggYHJhZGl1c2AuIEZvciBtb3JlIGRldGFpbHMsIHNlZSB0aGUgZm9sbG93aW5nIFBSczpcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFydGpzL0NoYXJ0LmpzL2lzc3Vlcy81NTk3XG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvNTg1OFxuICAgICAgICAgICAgY29ybmVyUmFkaXVzID0gcmFkaXVzICogMC41MTY7XG4gICAgICAgICAgICBzaXplID0gcmFkaXVzIC0gY29ybmVyUmFkaXVzO1xuICAgICAgICAgICAgeE9mZnNldCA9IE1hdGguY29zKHJhZCArIFFVQVJURVJfUEkpICogc2l6ZTtcbiAgICAgICAgICAgIHhPZmZzZXRXID0gTWF0aC5jb3MocmFkICsgUVVBUlRFUl9QSSkgKiAodyA/IHcgLyAyIC0gY29ybmVyUmFkaXVzIDogc2l6ZSk7XG4gICAgICAgICAgICB5T2Zmc2V0ID0gTWF0aC5zaW4ocmFkICsgUVVBUlRFUl9QSSkgKiBzaXplO1xuICAgICAgICAgICAgeU9mZnNldFcgPSBNYXRoLnNpbihyYWQgKyBRVUFSVEVSX1BJKSAqICh3ID8gdyAvIDIgLSBjb3JuZXJSYWRpdXMgOiBzaXplKTtcbiAgICAgICAgICAgIGN0eC5hcmMoeCAtIHhPZmZzZXRXLCB5IC0geU9mZnNldCwgY29ybmVyUmFkaXVzLCByYWQgLSBQSSwgcmFkIC0gSEFMRl9QSSk7XG4gICAgICAgICAgICBjdHguYXJjKHggKyB5T2Zmc2V0VywgeSAtIHhPZmZzZXQsIGNvcm5lclJhZGl1cywgcmFkIC0gSEFMRl9QSSwgcmFkKTtcbiAgICAgICAgICAgIGN0eC5hcmMoeCArIHhPZmZzZXRXLCB5ICsgeU9mZnNldCwgY29ybmVyUmFkaXVzLCByYWQsIHJhZCArIEhBTEZfUEkpO1xuICAgICAgICAgICAgY3R4LmFyYyh4IC0geU9mZnNldFcsIHkgKyB4T2Zmc2V0LCBjb3JuZXJSYWRpdXMsIHJhZCArIEhBTEZfUEksIHJhZCArIFBJKTtcbiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyZWN0JzpcbiAgICAgICAgICAgIGlmICghcm90YXRpb24pIHtcbiAgICAgICAgICAgICAgICBzaXplID0gTWF0aC5TUVJUMV8yICogcmFkaXVzO1xuICAgICAgICAgICAgICAgIHdpZHRoID0gdyA/IHcgLyAyIDogc2l6ZTtcbiAgICAgICAgICAgICAgICBjdHgucmVjdCh4IC0gd2lkdGgsIHkgLSBzaXplLCAyICogd2lkdGgsIDIgKiBzaXplKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJhZCArPSBRVUFSVEVSX1BJO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovIGNhc2UgJ3JlY3RSb3QnOlxuICAgICAgICAgICAgeE9mZnNldFcgPSBNYXRoLmNvcyhyYWQpICogKHcgPyB3IC8gMiA6IHJhZGl1cyk7XG4gICAgICAgICAgICB4T2Zmc2V0ID0gTWF0aC5jb3MocmFkKSAqIHJhZGl1cztcbiAgICAgICAgICAgIHlPZmZzZXQgPSBNYXRoLnNpbihyYWQpICogcmFkaXVzO1xuICAgICAgICAgICAgeU9mZnNldFcgPSBNYXRoLnNpbihyYWQpICogKHcgPyB3IC8gMiA6IHJhZGl1cyk7XG4gICAgICAgICAgICBjdHgubW92ZVRvKHggLSB4T2Zmc2V0VywgeSAtIHlPZmZzZXQpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4ICsgeU9mZnNldFcsIHkgLSB4T2Zmc2V0KTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIHhPZmZzZXRXLCB5ICsgeU9mZnNldCk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHggLSB5T2Zmc2V0VywgeSArIHhPZmZzZXQpO1xuICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Nyb3NzUm90JzpcbiAgICAgICAgICAgIHJhZCArPSBRVUFSVEVSX1BJO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovIGNhc2UgJ2Nyb3NzJzpcbiAgICAgICAgICAgIHhPZmZzZXRXID0gTWF0aC5jb3MocmFkKSAqICh3ID8gdyAvIDIgOiByYWRpdXMpO1xuICAgICAgICAgICAgeE9mZnNldCA9IE1hdGguY29zKHJhZCkgKiByYWRpdXM7XG4gICAgICAgICAgICB5T2Zmc2V0ID0gTWF0aC5zaW4ocmFkKSAqIHJhZGl1cztcbiAgICAgICAgICAgIHlPZmZzZXRXID0gTWF0aC5zaW4ocmFkKSAqICh3ID8gdyAvIDIgOiByYWRpdXMpO1xuICAgICAgICAgICAgY3R4Lm1vdmVUbyh4IC0geE9mZnNldFcsIHkgLSB5T2Zmc2V0KTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIHhPZmZzZXRXLCB5ICsgeU9mZnNldCk7XG4gICAgICAgICAgICBjdHgubW92ZVRvKHggKyB5T2Zmc2V0VywgeSAtIHhPZmZzZXQpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4IC0geU9mZnNldFcsIHkgKyB4T2Zmc2V0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzdGFyJzpcbiAgICAgICAgICAgIHhPZmZzZXRXID0gTWF0aC5jb3MocmFkKSAqICh3ID8gdyAvIDIgOiByYWRpdXMpO1xuICAgICAgICAgICAgeE9mZnNldCA9IE1hdGguY29zKHJhZCkgKiByYWRpdXM7XG4gICAgICAgICAgICB5T2Zmc2V0ID0gTWF0aC5zaW4ocmFkKSAqIHJhZGl1cztcbiAgICAgICAgICAgIHlPZmZzZXRXID0gTWF0aC5zaW4ocmFkKSAqICh3ID8gdyAvIDIgOiByYWRpdXMpO1xuICAgICAgICAgICAgY3R4Lm1vdmVUbyh4IC0geE9mZnNldFcsIHkgLSB5T2Zmc2V0KTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIHhPZmZzZXRXLCB5ICsgeU9mZnNldCk7XG4gICAgICAgICAgICBjdHgubW92ZVRvKHggKyB5T2Zmc2V0VywgeSAtIHhPZmZzZXQpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4IC0geU9mZnNldFcsIHkgKyB4T2Zmc2V0KTtcbiAgICAgICAgICAgIHJhZCArPSBRVUFSVEVSX1BJO1xuICAgICAgICAgICAgeE9mZnNldFcgPSBNYXRoLmNvcyhyYWQpICogKHcgPyB3IC8gMiA6IHJhZGl1cyk7XG4gICAgICAgICAgICB4T2Zmc2V0ID0gTWF0aC5jb3MocmFkKSAqIHJhZGl1cztcbiAgICAgICAgICAgIHlPZmZzZXQgPSBNYXRoLnNpbihyYWQpICogcmFkaXVzO1xuICAgICAgICAgICAgeU9mZnNldFcgPSBNYXRoLnNpbihyYWQpICogKHcgPyB3IC8gMiA6IHJhZGl1cyk7XG4gICAgICAgICAgICBjdHgubW92ZVRvKHggLSB4T2Zmc2V0VywgeSAtIHlPZmZzZXQpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4ICsgeE9mZnNldFcsIHkgKyB5T2Zmc2V0KTtcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oeCArIHlPZmZzZXRXLCB5IC0geE9mZnNldCk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHggLSB5T2Zmc2V0VywgeSArIHhPZmZzZXQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2xpbmUnOlxuICAgICAgICAgICAgeE9mZnNldCA9IHcgPyB3IC8gMiA6IE1hdGguY29zKHJhZCkgKiByYWRpdXM7XG4gICAgICAgICAgICB5T2Zmc2V0ID0gTWF0aC5zaW4ocmFkKSAqIHJhZGl1cztcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oeCAtIHhPZmZzZXQsIHkgLSB5T2Zmc2V0KTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIHhPZmZzZXQsIHkgKyB5T2Zmc2V0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkYXNoJzpcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oeCwgeSk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHggKyBNYXRoLmNvcyhyYWQpICogKHcgPyB3IC8gMiA6IHJhZGl1cyksIHkgKyBNYXRoLnNpbihyYWQpICogcmFkaXVzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIGZhbHNlOlxuICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGN0eC5maWxsKCk7XG4gICAgaWYgKG9wdGlvbnMuYm9yZGVyV2lkdGggPiAwKSB7XG4gICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICB9XG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9pbnQgaXMgaW5zaWRlIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBwb2ludCAtIFRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0gYXJlYSAtIFRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBtYXJnaW4gLSBhbGxvd2VkIG1hcmdpblxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfaXNQb2ludEluQXJlYShwb2ludCwgYXJlYSwgbWFyZ2luKSB7XG4gICAgbWFyZ2luID0gbWFyZ2luIHx8IDAuNTsgLy8gbWFyZ2luIC0gZGVmYXVsdCBpcyB0byBtYXRjaCByb3VuZGVkIGRlY2ltYWxzXG4gICAgcmV0dXJuICFhcmVhIHx8IHBvaW50ICYmIHBvaW50LnggPiBhcmVhLmxlZnQgLSBtYXJnaW4gJiYgcG9pbnQueCA8IGFyZWEucmlnaHQgKyBtYXJnaW4gJiYgcG9pbnQueSA+IGFyZWEudG9wIC0gbWFyZ2luICYmIHBvaW50LnkgPCBhcmVhLmJvdHRvbSArIG1hcmdpbjtcbn1cbmZ1bmN0aW9uIGNsaXBBcmVhKGN0eCwgYXJlYSkge1xuICAgIGN0eC5zYXZlKCk7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGN0eC5yZWN0KGFyZWEubGVmdCwgYXJlYS50b3AsIGFyZWEucmlnaHQgLSBhcmVhLmxlZnQsIGFyZWEuYm90dG9tIC0gYXJlYS50b3ApO1xuICAgIGN0eC5jbGlwKCk7XG59XG5mdW5jdGlvbiB1bmNsaXBBcmVhKGN0eCkge1xuICAgIGN0eC5yZXN0b3JlKCk7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX3N0ZXBwZWRMaW5lVG8oY3R4LCBwcmV2aW91cywgdGFyZ2V0LCBmbGlwLCBtb2RlKSB7XG4gICAgaWYgKCFwcmV2aW91cykge1xuICAgICAgICByZXR1cm4gY3R4LmxpbmVUbyh0YXJnZXQueCwgdGFyZ2V0LnkpO1xuICAgIH1cbiAgICBpZiAobW9kZSA9PT0gJ21pZGRsZScpIHtcbiAgICAgICAgY29uc3QgbWlkcG9pbnQgPSAocHJldmlvdXMueCArIHRhcmdldC54KSAvIDIuMDtcbiAgICAgICAgY3R4LmxpbmVUbyhtaWRwb2ludCwgcHJldmlvdXMueSk7XG4gICAgICAgIGN0eC5saW5lVG8obWlkcG9pbnQsIHRhcmdldC55KTtcbiAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdhZnRlcicgIT09ICEhZmxpcCkge1xuICAgICAgICBjdHgubGluZVRvKHByZXZpb3VzLngsIHRhcmdldC55KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjdHgubGluZVRvKHRhcmdldC54LCBwcmV2aW91cy55KTtcbiAgICB9XG4gICAgY3R4LmxpbmVUbyh0YXJnZXQueCwgdGFyZ2V0LnkpO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9iZXppZXJDdXJ2ZVRvKGN0eCwgcHJldmlvdXMsIHRhcmdldCwgZmxpcCkge1xuICAgIGlmICghcHJldmlvdXMpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5saW5lVG8odGFyZ2V0LngsIHRhcmdldC55KTtcbiAgICB9XG4gICAgY3R4LmJlemllckN1cnZlVG8oZmxpcCA/IHByZXZpb3VzLmNwMXggOiBwcmV2aW91cy5jcDJ4LCBmbGlwID8gcHJldmlvdXMuY3AxeSA6IHByZXZpb3VzLmNwMnksIGZsaXAgPyB0YXJnZXQuY3AyeCA6IHRhcmdldC5jcDF4LCBmbGlwID8gdGFyZ2V0LmNwMnkgOiB0YXJnZXQuY3AxeSwgdGFyZ2V0LngsIHRhcmdldC55KTtcbn1cbmZ1bmN0aW9uIHNldFJlbmRlck9wdHMoY3R4LCBvcHRzKSB7XG4gICAgaWYgKG9wdHMudHJhbnNsYXRpb24pIHtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZShvcHRzLnRyYW5zbGF0aW9uWzBdLCBvcHRzLnRyYW5zbGF0aW9uWzFdKTtcbiAgICB9XG4gICAgaWYgKCFpc051bGxPclVuZGVmKG9wdHMucm90YXRpb24pKSB7XG4gICAgICAgIGN0eC5yb3RhdGUob3B0cy5yb3RhdGlvbik7XG4gICAgfVxuICAgIGlmIChvcHRzLmNvbG9yKSB7XG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBvcHRzLmNvbG9yO1xuICAgIH1cbiAgICBpZiAob3B0cy50ZXh0QWxpZ24pIHtcbiAgICAgICAgY3R4LnRleHRBbGlnbiA9IG9wdHMudGV4dEFsaWduO1xuICAgIH1cbiAgICBpZiAob3B0cy50ZXh0QmFzZWxpbmUpIHtcbiAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9IG9wdHMudGV4dEJhc2VsaW5lO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlY29yYXRlVGV4dChjdHgsIHgsIHksIGxpbmUsIG9wdHMpIHtcbiAgICBpZiAob3B0cy5zdHJpa2V0aHJvdWdoIHx8IG9wdHMudW5kZXJsaW5lKSB7XG4gICAgICAgIC8qKlxuICAgICAqIE5vdyB0aGF0IElFMTEgc3VwcG9ydCBoYXMgYmVlbiBkcm9wcGVkLCB3ZSBjYW4gdXNlIG1vcmVcbiAgICAgKiBvZiB0aGUgVGV4dE1ldHJpY3Mgb2JqZWN0LiBUaGUgYWN0dWFsIGJvdW5kaW5nIGJveGVzXG4gICAgICogYXJlIHVuZmxhZ2dlZCBpbiBDaHJvbWUsIEZpcmVmb3gsIEVkZ2UsIGFuZCBTYWZhcmkgc28gdGhleVxuICAgICAqIGNhbiBiZSBzYWZlbHkgdXNlZC5cbiAgICAgKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1RleHRNZXRyaWNzI0Jyb3dzZXJfY29tcGF0aWJpbGl0eVxuICAgICAqLyBjb25zdCBtZXRyaWNzID0gY3R4Lm1lYXN1cmVUZXh0KGxpbmUpO1xuICAgICAgICBjb25zdCBsZWZ0ID0geCAtIG1ldHJpY3MuYWN0dWFsQm91bmRpbmdCb3hMZWZ0O1xuICAgICAgICBjb25zdCByaWdodCA9IHggKyBtZXRyaWNzLmFjdHVhbEJvdW5kaW5nQm94UmlnaHQ7XG4gICAgICAgIGNvbnN0IHRvcCA9IHkgLSBtZXRyaWNzLmFjdHVhbEJvdW5kaW5nQm94QXNjZW50O1xuICAgICAgICBjb25zdCBib3R0b20gPSB5ICsgbWV0cmljcy5hY3R1YWxCb3VuZGluZ0JveERlc2NlbnQ7XG4gICAgICAgIGNvbnN0IHlEZWNvcmF0aW9uID0gb3B0cy5zdHJpa2V0aHJvdWdoID8gKHRvcCArIGJvdHRvbSkgLyAyIDogYm90dG9tO1xuICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBjdHguZmlsbFN0eWxlO1xuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGN0eC5saW5lV2lkdGggPSBvcHRzLmRlY29yYXRpb25XaWR0aCB8fCAyO1xuICAgICAgICBjdHgubW92ZVRvKGxlZnQsIHlEZWNvcmF0aW9uKTtcbiAgICAgICAgY3R4LmxpbmVUbyhyaWdodCwgeURlY29yYXRpb24pO1xuICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZHJhd0JhY2tkcm9wKGN0eCwgb3B0cykge1xuICAgIGNvbnN0IG9sZENvbG9yID0gY3R4LmZpbGxTdHlsZTtcbiAgICBjdHguZmlsbFN0eWxlID0gb3B0cy5jb2xvcjtcbiAgICBjdHguZmlsbFJlY3Qob3B0cy5sZWZ0LCBvcHRzLnRvcCwgb3B0cy53aWR0aCwgb3B0cy5oZWlnaHQpO1xuICAgIGN0eC5maWxsU3R5bGUgPSBvbGRDb2xvcjtcbn1cbi8qKlxuICogUmVuZGVyIHRleHQgb250byB0aGUgY2FudmFzXG4gKi8gZnVuY3Rpb24gcmVuZGVyVGV4dChjdHgsIHRleHQsIHgsIHksIGZvbnQsIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IGxpbmVzID0gaXNBcnJheSh0ZXh0KSA/IHRleHQgOiBbXG4gICAgICAgIHRleHRcbiAgICBdO1xuICAgIGNvbnN0IHN0cm9rZSA9IG9wdHMuc3Ryb2tlV2lkdGggPiAwICYmIG9wdHMuc3Ryb2tlQ29sb3IgIT09ICcnO1xuICAgIGxldCBpLCBsaW5lO1xuICAgIGN0eC5zYXZlKCk7XG4gICAgY3R4LmZvbnQgPSBmb250LnN0cmluZztcbiAgICBzZXRSZW5kZXJPcHRzKGN0eCwgb3B0cyk7XG4gICAgZm9yKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpe1xuICAgICAgICBsaW5lID0gbGluZXNbaV07XG4gICAgICAgIGlmIChvcHRzLmJhY2tkcm9wKSB7XG4gICAgICAgICAgICBkcmF3QmFja2Ryb3AoY3R4LCBvcHRzLmJhY2tkcm9wKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3Ryb2tlKSB7XG4gICAgICAgICAgICBpZiAob3B0cy5zdHJva2VDb2xvcikge1xuICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IG9wdHMuc3Ryb2tlQ29sb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYob3B0cy5zdHJva2VXaWR0aCkpIHtcbiAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gb3B0cy5zdHJva2VXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN0eC5zdHJva2VUZXh0KGxpbmUsIHgsIHksIG9wdHMubWF4V2lkdGgpO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5maWxsVGV4dChsaW5lLCB4LCB5LCBvcHRzLm1heFdpZHRoKTtcbiAgICAgICAgZGVjb3JhdGVUZXh0KGN0eCwgeCwgeSwgbGluZSwgb3B0cyk7XG4gICAgICAgIHkgKz0gTnVtYmVyKGZvbnQubGluZUhlaWdodCk7XG4gICAgfVxuICAgIGN0eC5yZXN0b3JlKCk7XG59XG4vKipcbiAqIEFkZCBhIHBhdGggb2YgYSByZWN0YW5nbGUgd2l0aCByb3VuZGVkIGNvcm5lcnMgdG8gdGhlIGN1cnJlbnQgc3ViLXBhdGhcbiAqIEBwYXJhbSBjdHggLSBDb250ZXh0XG4gKiBAcGFyYW0gcmVjdCAtIEJvdW5kaW5nIHJlY3RcbiAqLyBmdW5jdGlvbiBhZGRSb3VuZGVkUmVjdFBhdGgoY3R4LCByZWN0KSB7XG4gICAgY29uc3QgeyB4ICwgeSAsIHcgLCBoICwgcmFkaXVzICB9ID0gcmVjdDtcbiAgICAvLyB0b3AgbGVmdCBhcmNcbiAgICBjdHguYXJjKHggKyByYWRpdXMudG9wTGVmdCwgeSArIHJhZGl1cy50b3BMZWZ0LCByYWRpdXMudG9wTGVmdCwgMS41ICogUEksIFBJLCB0cnVlKTtcbiAgICAvLyBsaW5lIGZyb20gdG9wIGxlZnQgdG8gYm90dG9tIGxlZnRcbiAgICBjdHgubGluZVRvKHgsIHkgKyBoIC0gcmFkaXVzLmJvdHRvbUxlZnQpO1xuICAgIC8vIGJvdHRvbSBsZWZ0IGFyY1xuICAgIGN0eC5hcmMoeCArIHJhZGl1cy5ib3R0b21MZWZ0LCB5ICsgaCAtIHJhZGl1cy5ib3R0b21MZWZ0LCByYWRpdXMuYm90dG9tTGVmdCwgUEksIEhBTEZfUEksIHRydWUpO1xuICAgIC8vIGxpbmUgZnJvbSBib3R0b20gbGVmdCB0byBib3R0b20gcmlnaHRcbiAgICBjdHgubGluZVRvKHggKyB3IC0gcmFkaXVzLmJvdHRvbVJpZ2h0LCB5ICsgaCk7XG4gICAgLy8gYm90dG9tIHJpZ2h0IGFyY1xuICAgIGN0eC5hcmMoeCArIHcgLSByYWRpdXMuYm90dG9tUmlnaHQsIHkgKyBoIC0gcmFkaXVzLmJvdHRvbVJpZ2h0LCByYWRpdXMuYm90dG9tUmlnaHQsIEhBTEZfUEksIDAsIHRydWUpO1xuICAgIC8vIGxpbmUgZnJvbSBib3R0b20gcmlnaHQgdG8gdG9wIHJpZ2h0XG4gICAgY3R4LmxpbmVUbyh4ICsgdywgeSArIHJhZGl1cy50b3BSaWdodCk7XG4gICAgLy8gdG9wIHJpZ2h0IGFyY1xuICAgIGN0eC5hcmMoeCArIHcgLSByYWRpdXMudG9wUmlnaHQsIHkgKyByYWRpdXMudG9wUmlnaHQsIHJhZGl1cy50b3BSaWdodCwgMCwgLUhBTEZfUEksIHRydWUpO1xuICAgIC8vIGxpbmUgZnJvbSB0b3AgcmlnaHQgdG8gdG9wIGxlZnRcbiAgICBjdHgubGluZVRvKHggKyByYWRpdXMudG9wTGVmdCwgeSk7XG59XG5cbmNvbnN0IExJTkVfSEVJR0hUID0gL14obm9ybWFsfChcXGQrKD86XFwuXFxkKyk/KShweHxlbXwlKT8pJC87XG5jb25zdCBGT05UX1NUWUxFID0gL14obm9ybWFsfGl0YWxpY3xpbml0aWFsfGluaGVyaXR8dW5zZXR8KG9ibGlxdWUoIC0/WzAtOV0/WzAtOV1kZWcpPykpJC87XG4vKipcbiAqIEBhbGlhcyBDaGFydC5oZWxwZXJzLm9wdGlvbnNcbiAqIEBuYW1lc3BhY2VcbiAqLyAvKipcbiAqIENvbnZlcnRzIHRoZSBnaXZlbiBsaW5lIGhlaWdodCBgdmFsdWVgIGluIHBpeGVscyBmb3IgYSBzcGVjaWZpYyBmb250IGBzaXplYC5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBsaW5lSGVpZ2h0IHRvIHBhcnNlIChlZy4gMS42LCAnMTRweCcsICc3NSUnLCAnMS42ZW0nKS5cbiAqIEBwYXJhbSBzaXplIC0gVGhlIGZvbnQgc2l6ZSAoaW4gcGl4ZWxzKSB1c2VkIHRvIHJlc29sdmUgcmVsYXRpdmUgYHZhbHVlYC5cbiAqIEByZXR1cm5zIFRoZSBlZmZlY3RpdmUgbGluZSBoZWlnaHQgaW4gcGl4ZWxzIChzaXplICogMS4yIGlmIHZhbHVlIGlzIGludmFsaWQpLlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbGluZS1oZWlnaHRcbiAqIEBzaW5jZSAyLjcuMFxuICovIGZ1bmN0aW9uIHRvTGluZUhlaWdodCh2YWx1ZSwgc2l6ZSkge1xuICAgIGNvbnN0IG1hdGNoZXMgPSAoJycgKyB2YWx1ZSkubWF0Y2goTElORV9IRUlHSFQpO1xuICAgIGlmICghbWF0Y2hlcyB8fCBtYXRjaGVzWzFdID09PSAnbm9ybWFsJykge1xuICAgICAgICByZXR1cm4gc2l6ZSAqIDEuMjtcbiAgICB9XG4gICAgdmFsdWUgPSArbWF0Y2hlc1syXTtcbiAgICBzd2l0Y2gobWF0Y2hlc1szXSl7XG4gICAgICAgIGNhc2UgJ3B4JzpcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgY2FzZSAnJSc6XG4gICAgICAgICAgICB2YWx1ZSAvPSAxMDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHNpemUgKiB2YWx1ZTtcbn1cbmNvbnN0IG51bWJlck9yWmVybyA9ICh2KT0+K3YgfHwgMDtcbmZ1bmN0aW9uIF9yZWFkVmFsdWVUb1Byb3BzKHZhbHVlLCBwcm9wcykge1xuICAgIGNvbnN0IHJldCA9IHt9O1xuICAgIGNvbnN0IG9ialByb3BzID0gaXNPYmplY3QocHJvcHMpO1xuICAgIGNvbnN0IGtleXMgPSBvYmpQcm9wcyA/IE9iamVjdC5rZXlzKHByb3BzKSA6IHByb3BzO1xuICAgIGNvbnN0IHJlYWQgPSBpc09iamVjdCh2YWx1ZSkgPyBvYmpQcm9wcyA/IChwcm9wKT0+dmFsdWVPckRlZmF1bHQodmFsdWVbcHJvcF0sIHZhbHVlW3Byb3BzW3Byb3BdXSkgOiAocHJvcCk9PnZhbHVlW3Byb3BdIDogKCk9PnZhbHVlO1xuICAgIGZvciAoY29uc3QgcHJvcCBvZiBrZXlzKXtcbiAgICAgICAgcmV0W3Byb3BdID0gbnVtYmVyT3JaZXJvKHJlYWQocHJvcCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gdmFsdWUgaW50byBhIFRSQkwgb2JqZWN0LlxuICogQHBhcmFtIHZhbHVlIC0gSWYgYSBudW1iZXIsIHNldCB0aGUgdmFsdWUgdG8gYWxsIFRSQkwgY29tcG9uZW50LFxuICogIGVsc2UsIGlmIGFuIG9iamVjdCwgdXNlIGRlZmluZWQgcHJvcGVydGllcyBhbmQgc2V0cyB1bmRlZmluZWQgb25lcyB0byAwLlxuICogIHggLyB5IGFyZSBzaG9ydGhhbmRzIGZvciBzYW1lIHZhbHVlIGZvciBsZWZ0L3JpZ2h0IGFuZCB0b3AvYm90dG9tLlxuICogQHJldHVybnMgVGhlIHBhZGRpbmcgdmFsdWVzICh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpXG4gKiBAc2luY2UgMy4wLjBcbiAqLyBmdW5jdGlvbiB0b1RSQkwodmFsdWUpIHtcbiAgICByZXR1cm4gX3JlYWRWYWx1ZVRvUHJvcHModmFsdWUsIHtcbiAgICAgICAgdG9wOiAneScsXG4gICAgICAgIHJpZ2h0OiAneCcsXG4gICAgICAgIGJvdHRvbTogJ3knLFxuICAgICAgICBsZWZ0OiAneCdcbiAgICB9KTtcbn1cbi8qKlxuICogQ29udmVydHMgdGhlIGdpdmVuIHZhbHVlIGludG8gYSBUUkJMIGNvcm5lcnMgb2JqZWN0IChzaW1pbGFyIHdpdGggY3NzIGJvcmRlci1yYWRpdXMpLlxuICogQHBhcmFtIHZhbHVlIC0gSWYgYSBudW1iZXIsIHNldCB0aGUgdmFsdWUgdG8gYWxsIFRSQkwgY29ybmVyIGNvbXBvbmVudHMsXG4gKiAgZWxzZSwgaWYgYW4gb2JqZWN0LCB1c2UgZGVmaW5lZCBwcm9wZXJ0aWVzIGFuZCBzZXRzIHVuZGVmaW5lZCBvbmVzIHRvIDAuXG4gKiBAcmV0dXJucyBUaGUgVFJCTCBjb3JuZXIgdmFsdWVzICh0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpXG4gKiBAc2luY2UgMy4wLjBcbiAqLyBmdW5jdGlvbiB0b1RSQkxDb3JuZXJzKHZhbHVlKSB7XG4gICAgcmV0dXJuIF9yZWFkVmFsdWVUb1Byb3BzKHZhbHVlLCBbXG4gICAgICAgICd0b3BMZWZ0JyxcbiAgICAgICAgJ3RvcFJpZ2h0JyxcbiAgICAgICAgJ2JvdHRvbUxlZnQnLFxuICAgICAgICAnYm90dG9tUmlnaHQnXG4gICAgXSk7XG59XG4vKipcbiAqIENvbnZlcnRzIHRoZSBnaXZlbiB2YWx1ZSBpbnRvIGEgcGFkZGluZyBvYmplY3Qgd2l0aCBwcmUtY29tcHV0ZWQgd2lkdGgvaGVpZ2h0LlxuICogQHBhcmFtIHZhbHVlIC0gSWYgYSBudW1iZXIsIHNldCB0aGUgdmFsdWUgdG8gYWxsIFRSQkwgY29tcG9uZW50LFxuICogIGVsc2UsIGlmIGFuIG9iamVjdCwgdXNlIGRlZmluZWQgcHJvcGVydGllcyBhbmQgc2V0cyB1bmRlZmluZWQgb25lcyB0byAwLlxuICogIHggLyB5IGFyZSBzaG9ydGhhbmRzIGZvciBzYW1lIHZhbHVlIGZvciBsZWZ0L3JpZ2h0IGFuZCB0b3AvYm90dG9tLlxuICogQHJldHVybnMgVGhlIHBhZGRpbmcgdmFsdWVzICh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHdpZHRoLCBoZWlnaHQpXG4gKiBAc2luY2UgMi43LjBcbiAqLyBmdW5jdGlvbiB0b1BhZGRpbmcodmFsdWUpIHtcbiAgICBjb25zdCBvYmogPSB0b1RSQkwodmFsdWUpO1xuICAgIG9iai53aWR0aCA9IG9iai5sZWZ0ICsgb2JqLnJpZ2h0O1xuICAgIG9iai5oZWlnaHQgPSBvYmoudG9wICsgb2JqLmJvdHRvbTtcbiAgICByZXR1cm4gb2JqO1xufVxuLyoqXG4gKiBQYXJzZXMgZm9udCBvcHRpb25zIGFuZCByZXR1cm5zIHRoZSBmb250IG9iamVjdC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQSBvYmplY3QgdGhhdCBjb250YWlucyBmb250IG9wdGlvbnMgdG8gYmUgcGFyc2VkLlxuICogQHBhcmFtIGZhbGxiYWNrIC0gQSBvYmplY3QgdGhhdCBjb250YWlucyBmYWxsYmFjayBmb250IG9wdGlvbnMuXG4gKiBAcmV0dXJuIFRoZSBmb250IG9iamVjdC5cbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gdG9Gb250KG9wdGlvbnMsIGZhbGxiYWNrKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgZmFsbGJhY2sgPSBmYWxsYmFjayB8fCBkZWZhdWx0cy5mb250O1xuICAgIGxldCBzaXplID0gdmFsdWVPckRlZmF1bHQob3B0aW9ucy5zaXplLCBmYWxsYmFjay5zaXplKTtcbiAgICBpZiAodHlwZW9mIHNpemUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHNpemUgPSBwYXJzZUludChzaXplLCAxMCk7XG4gICAgfVxuICAgIGxldCBzdHlsZSA9IHZhbHVlT3JEZWZhdWx0KG9wdGlvbnMuc3R5bGUsIGZhbGxiYWNrLnN0eWxlKTtcbiAgICBpZiAoc3R5bGUgJiYgISgnJyArIHN0eWxlKS5tYXRjaChGT05UX1NUWUxFKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgZm9udCBzdHlsZSBzcGVjaWZpZWQ6IFwiJyArIHN0eWxlICsgJ1wiJyk7XG4gICAgICAgIHN0eWxlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBmb250ID0ge1xuICAgICAgICBmYW1pbHk6IHZhbHVlT3JEZWZhdWx0KG9wdGlvbnMuZmFtaWx5LCBmYWxsYmFjay5mYW1pbHkpLFxuICAgICAgICBsaW5lSGVpZ2h0OiB0b0xpbmVIZWlnaHQodmFsdWVPckRlZmF1bHQob3B0aW9ucy5saW5lSGVpZ2h0LCBmYWxsYmFjay5saW5lSGVpZ2h0KSwgc2l6ZSksXG4gICAgICAgIHNpemUsXG4gICAgICAgIHN0eWxlLFxuICAgICAgICB3ZWlnaHQ6IHZhbHVlT3JEZWZhdWx0KG9wdGlvbnMud2VpZ2h0LCBmYWxsYmFjay53ZWlnaHQpLFxuICAgICAgICBzdHJpbmc6ICcnXG4gICAgfTtcbiAgICBmb250LnN0cmluZyA9IHRvRm9udFN0cmluZyhmb250KTtcbiAgICByZXR1cm4gZm9udDtcbn1cbi8qKlxuICogRXZhbHVhdGVzIHRoZSBnaXZlbiBgaW5wdXRzYCBzZXF1ZW50aWFsbHkgYW5kIHJldHVybnMgdGhlIGZpcnN0IGRlZmluZWQgdmFsdWUuXG4gKiBAcGFyYW0gaW5wdXRzIC0gQW4gYXJyYXkgb2YgdmFsdWVzLCBmYWxsaW5nIGJhY2sgdG8gdGhlIGxhc3QgdmFsdWUuXG4gKiBAcGFyYW0gY29udGV4dCAtIElmIGRlZmluZWQgYW5kIHRoZSBjdXJyZW50IHZhbHVlIGlzIGEgZnVuY3Rpb24sIHRoZSB2YWx1ZVxuICogaXMgY2FsbGVkIHdpdGggYGNvbnRleHRgIGFzIGZpcnN0IGFyZ3VtZW50IGFuZCB0aGUgcmVzdWx0IGJlY29tZXMgdGhlIG5ldyBpbnB1dC5cbiAqIEBwYXJhbSBpbmRleCAtIElmIGRlZmluZWQgYW5kIHRoZSBjdXJyZW50IHZhbHVlIGlzIGFuIGFycmF5LCB0aGUgdmFsdWVcbiAqIGF0IGBpbmRleGAgYmVjb21lIHRoZSBuZXcgaW5wdXQuXG4gKiBAcGFyYW0gaW5mbyAtIG9iamVjdCB0byByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgcmVzb2x1dGlvbiBpblxuICogQHBhcmFtIGluZm8uY2FjaGVhYmxlIC0gV2lsbCBiZSBzZXQgdG8gYGZhbHNlYCBpZiBvcHRpb24gaXMgbm90IGNhY2hlYWJsZS5cbiAqIEBzaW5jZSAyLjcuMFxuICovIGZ1bmN0aW9uIHJlc29sdmUoaW5wdXRzLCBjb250ZXh0LCBpbmRleCwgaW5mbykge1xuICAgIGxldCBjYWNoZWFibGUgPSB0cnVlO1xuICAgIGxldCBpLCBpbGVuLCB2YWx1ZTtcbiAgICBmb3IoaSA9IDAsIGlsZW4gPSBpbnB1dHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgdmFsdWUgPSBpbnB1dHNbaV07XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGV4dCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZShjb250ZXh0KTtcbiAgICAgICAgICAgIGNhY2hlYWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlW2luZGV4ICUgdmFsdWUubGVuZ3RoXTtcbiAgICAgICAgICAgIGNhY2hlYWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoaW5mbyAmJiAhY2FjaGVhYmxlKSB7XG4gICAgICAgICAgICAgICAgaW5mby5jYWNoZWFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogQHBhcmFtIG1pbm1heFxuICogQHBhcmFtIGdyYWNlXG4gKiBAcGFyYW0gYmVnaW5BdFplcm9cbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2FkZEdyYWNlKG1pbm1heCwgZ3JhY2UsIGJlZ2luQXRaZXJvKSB7XG4gICAgY29uc3QgeyBtaW4gLCBtYXggIH0gPSBtaW5tYXg7XG4gICAgY29uc3QgY2hhbmdlID0gdG9EaW1lbnNpb24oZ3JhY2UsIChtYXggLSBtaW4pIC8gMik7XG4gICAgY29uc3Qga2VlcFplcm8gPSAodmFsdWUsIGFkZCk9PmJlZ2luQXRaZXJvICYmIHZhbHVlID09PSAwID8gMCA6IHZhbHVlICsgYWRkO1xuICAgIHJldHVybiB7XG4gICAgICAgIG1pbjoga2VlcFplcm8obWluLCAtTWF0aC5hYnMoY2hhbmdlKSksXG4gICAgICAgIG1heDoga2VlcFplcm8obWF4LCBjaGFuZ2UpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQocGFyZW50Q29udGV4dCwgY29udGV4dCkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUocGFyZW50Q29udGV4dCksIGNvbnRleHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBQcm94eSBmb3IgcmVzb2x2aW5nIHJhdyB2YWx1ZXMgZm9yIG9wdGlvbnMuXG4gKiBAcGFyYW0gc2NvcGVzIC0gVGhlIG9wdGlvbiBzY29wZXMgdG8gbG9vayBmb3IgdmFsdWVzLCBpbiByZXNvbHV0aW9uIG9yZGVyXG4gKiBAcGFyYW0gcHJlZml4ZXMgLSBUaGUgcHJlZml4ZXMgZm9yIHZhbHVlcywgaW4gcmVzb2x1dGlvbiBvcmRlci5cbiAqIEBwYXJhbSByb290U2NvcGVzIC0gVGhlIHJvb3Qgb3B0aW9uIHNjb3Blc1xuICogQHBhcmFtIGZhbGxiYWNrIC0gUGFyZW50IHNjb3BlcyBmYWxsYmFja1xuICogQHBhcmFtIGdldFRhcmdldCAtIGNhbGxiYWNrIGZvciBnZXR0aW5nIHRoZSB0YXJnZXQgZm9yIGNoYW5nZWQgdmFsdWVzXG4gKiBAcmV0dXJucyBQcm94eVxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfY3JlYXRlUmVzb2x2ZXIoc2NvcGVzLCBwcmVmaXhlcyA9IFtcbiAgICAnJ1xuXSwgcm9vdFNjb3BlcywgZmFsbGJhY2ssIGdldFRhcmdldCA9ICgpPT5zY29wZXNbMF0pIHtcbiAgICBjb25zdCBmaW5hbFJvb3RTY29wZXMgPSByb290U2NvcGVzIHx8IHNjb3BlcztcbiAgICBpZiAodHlwZW9mIGZhbGxiYWNrID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBmYWxsYmFjayA9IF9yZXNvbHZlKCdfZmFsbGJhY2snLCBzY29wZXMpO1xuICAgIH1cbiAgICBjb25zdCBjYWNoZSA9IHtcbiAgICAgICAgW1N5bWJvbC50b1N0cmluZ1RhZ106ICdPYmplY3QnLFxuICAgICAgICBfY2FjaGVhYmxlOiB0cnVlLFxuICAgICAgICBfc2NvcGVzOiBzY29wZXMsXG4gICAgICAgIF9yb290U2NvcGVzOiBmaW5hbFJvb3RTY29wZXMsXG4gICAgICAgIF9mYWxsYmFjazogZmFsbGJhY2ssXG4gICAgICAgIF9nZXRUYXJnZXQ6IGdldFRhcmdldCxcbiAgICAgICAgb3ZlcnJpZGU6IChzY29wZSk9Pl9jcmVhdGVSZXNvbHZlcihbXG4gICAgICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICAgICAgLi4uc2NvcGVzXG4gICAgICAgICAgICBdLCBwcmVmaXhlcywgZmluYWxSb290U2NvcGVzLCBmYWxsYmFjaylcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJveHkoY2FjaGUsIHtcbiAgICAgICAgLyoqXG4gICAgICogQSB0cmFwIGZvciB0aGUgZGVsZXRlIG9wZXJhdG9yLlxuICAgICAqLyBkZWxldGVQcm9wZXJ0eSAodGFyZ2V0LCBwcm9wKSB7XG4gICAgICAgICAgICBkZWxldGUgdGFyZ2V0W3Byb3BdOyAvLyByZW1vdmUgZnJvbSBjYWNoZVxuICAgICAgICAgICAgZGVsZXRlIHRhcmdldC5fa2V5czsgLy8gcmVtb3ZlIGNhY2hlZCBrZXlzXG4gICAgICAgICAgICBkZWxldGUgc2NvcGVzWzBdW3Byb3BdOyAvLyByZW1vdmUgZnJvbSB0b3AgbGV2ZWwgc2NvcGVcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgKiBBIHRyYXAgZm9yIGdldHRpbmcgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqLyBnZXQgKHRhcmdldCwgcHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIF9jYWNoZWQodGFyZ2V0LCBwcm9wLCAoKT0+X3Jlc29sdmVXaXRoUHJlZml4ZXMocHJvcCwgcHJlZml4ZXMsIHNjb3BlcywgdGFyZ2V0KSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAqIEEgdHJhcCBmb3IgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvci5cbiAgICAgKiBBbHNvIHVzZWQgYnkgT2JqZWN0Lmhhc093blByb3BlcnR5LlxuICAgICAqLyBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgKHRhcmdldCwgcHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldC5fc2NvcGVzWzBdLCBwcm9wKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICogQSB0cmFwIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YuXG4gICAgICovIGdldFByb3RvdHlwZU9mICgpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHNjb3Blc1swXSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAqIEEgdHJhcCBmb3IgdGhlIGluIG9wZXJhdG9yLlxuICAgICAqLyBoYXMgKHRhcmdldCwgcHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEtleXNGcm9tQWxsU2NvcGVzKHRhcmdldCkuaW5jbHVkZXMocHJvcCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAqIEEgdHJhcCBmb3IgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgYW5kIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMuXG4gICAgICovIG93bktleXMgKHRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEtleXNGcm9tQWxsU2NvcGVzKHRhcmdldCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAqIEEgdHJhcCBmb3Igc2V0dGluZyBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICovIHNldCAodGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qgc3RvcmFnZSA9IHRhcmdldC5fc3RvcmFnZSB8fCAodGFyZ2V0Ll9zdG9yYWdlID0gZ2V0VGFyZ2V0KCkpO1xuICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc3RvcmFnZVtwcm9wXSA9IHZhbHVlOyAvLyBzZXQgdG8gdG9wIGxldmVsIHNjb3BlICsgY2FjaGVcbiAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXQuX2tleXM7IC8vIHJlbW92ZSBjYWNoZWQga2V5c1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogUmV0dXJucyBhbiBQcm94eSBmb3IgcmVzb2x2aW5nIG9wdGlvbiB2YWx1ZXMgd2l0aCBjb250ZXh0LlxuICogQHBhcmFtIHByb3h5IC0gVGhlIFByb3h5IHJldHVybmVkIGJ5IGBfY3JlYXRlUmVzb2x2ZXJgXG4gKiBAcGFyYW0gY29udGV4dCAtIENvbnRleHQgb2JqZWN0IGZvciBzY3JpcHRhYmxlL2luZGV4YWJsZSBvcHRpb25zXG4gKiBAcGFyYW0gc3ViUHJveHkgLSBUaGUgcHJveHkgcHJvdmlkZWQgZm9yIHNjcmlwdGFibGUgb3B0aW9uc1xuICogQHBhcmFtIGRlc2NyaXB0b3JEZWZhdWx0cyAtIERlZmF1bHRzIGZvciBkZXNjcmlwdG9yc1xuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfYXR0YWNoQ29udGV4dChwcm94eSwgY29udGV4dCwgc3ViUHJveHksIGRlc2NyaXB0b3JEZWZhdWx0cykge1xuICAgIGNvbnN0IGNhY2hlID0ge1xuICAgICAgICBfY2FjaGVhYmxlOiBmYWxzZSxcbiAgICAgICAgX3Byb3h5OiBwcm94eSxcbiAgICAgICAgX2NvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgIF9zdWJQcm94eTogc3ViUHJveHksXG4gICAgICAgIF9zdGFjazogbmV3IFNldCgpLFxuICAgICAgICBfZGVzY3JpcHRvcnM6IF9kZXNjcmlwdG9ycyhwcm94eSwgZGVzY3JpcHRvckRlZmF1bHRzKSxcbiAgICAgICAgc2V0Q29udGV4dDogKGN0eCk9Pl9hdHRhY2hDb250ZXh0KHByb3h5LCBjdHgsIHN1YlByb3h5LCBkZXNjcmlwdG9yRGVmYXVsdHMpLFxuICAgICAgICBvdmVycmlkZTogKHNjb3BlKT0+X2F0dGFjaENvbnRleHQocHJveHkub3ZlcnJpZGUoc2NvcGUpLCBjb250ZXh0LCBzdWJQcm94eSwgZGVzY3JpcHRvckRlZmF1bHRzKVxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcm94eShjYWNoZSwge1xuICAgICAgICAvKipcbiAgICAgKiBBIHRyYXAgZm9yIHRoZSBkZWxldGUgb3BlcmF0b3IuXG4gICAgICovIGRlbGV0ZVByb3BlcnR5ICh0YXJnZXQsIHByb3ApIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXRbcHJvcF07IC8vIHJlbW92ZSBmcm9tIGNhY2hlXG4gICAgICAgICAgICBkZWxldGUgcHJveHlbcHJvcF07IC8vIHJlbW92ZSBmcm9tIHByb3h5XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICogQSB0cmFwIGZvciBnZXR0aW5nIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKi8gZ2V0ICh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gX2NhY2hlZCh0YXJnZXQsIHByb3AsICgpPT5fcmVzb2x2ZVdpdGhDb250ZXh0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICogQSB0cmFwIGZvciBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLlxuICAgICAqIEFsc28gdXNlZCBieSBPYmplY3QuaGFzT3duUHJvcGVydHkuXG4gICAgICovIGdldE93blByb3BlcnR5RGVzY3JpcHRvciAodGFyZ2V0LCBwcm9wKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0Ll9kZXNjcmlwdG9ycy5hbGxLZXlzID8gUmVmbGVjdC5oYXMocHJveHksIHByb3ApID8ge1xuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgICAgICB9IDogdW5kZWZpbmVkIDogUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJveHksIHByb3ApO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgKiBBIHRyYXAgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZi5cbiAgICAgKi8gZ2V0UHJvdG90eXBlT2YgKCkge1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YocHJveHkpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgKiBBIHRyYXAgZm9yIHRoZSBpbiBvcGVyYXRvci5cbiAgICAgKi8gaGFzICh0YXJnZXQsIHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0Lmhhcyhwcm94eSwgcHJvcCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAqIEEgdHJhcCBmb3IgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgYW5kIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMuXG4gICAgICovIG93bktleXMgKCkge1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3Qub3duS2V5cyhwcm94eSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAqIEEgdHJhcCBmb3Igc2V0dGluZyBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICovIHNldCAodGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgICAgICAgcHJveHlbcHJvcF0gPSB2YWx1ZTsgLy8gc2V0IHRvIHByb3h5XG4gICAgICAgICAgICBkZWxldGUgdGFyZ2V0W3Byb3BdOyAvLyByZW1vdmUgZnJvbSBjYWNoZVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfZGVzY3JpcHRvcnMocHJveHksIGRlZmF1bHRzID0ge1xuICAgIHNjcmlwdGFibGU6IHRydWUsXG4gICAgaW5kZXhhYmxlOiB0cnVlXG59KSB7XG4gICAgY29uc3QgeyBfc2NyaXB0YWJsZSA9ZGVmYXVsdHMuc2NyaXB0YWJsZSAsIF9pbmRleGFibGUgPWRlZmF1bHRzLmluZGV4YWJsZSAsIF9hbGxLZXlzID1kZWZhdWx0cy5hbGxLZXlzICB9ID0gcHJveHk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWxsS2V5czogX2FsbEtleXMsXG4gICAgICAgIHNjcmlwdGFibGU6IF9zY3JpcHRhYmxlLFxuICAgICAgICBpbmRleGFibGU6IF9pbmRleGFibGUsXG4gICAgICAgIGlzU2NyaXB0YWJsZTogaXNGdW5jdGlvbihfc2NyaXB0YWJsZSkgPyBfc2NyaXB0YWJsZSA6ICgpPT5fc2NyaXB0YWJsZSxcbiAgICAgICAgaXNJbmRleGFibGU6IGlzRnVuY3Rpb24oX2luZGV4YWJsZSkgPyBfaW5kZXhhYmxlIDogKCk9Pl9pbmRleGFibGVcbiAgICB9O1xufVxuY29uc3QgcmVhZEtleSA9IChwcmVmaXgsIG5hbWUpPT5wcmVmaXggPyBwcmVmaXggKyBfY2FwaXRhbGl6ZShuYW1lKSA6IG5hbWU7XG5jb25zdCBuZWVkc1N1YlJlc29sdmVyID0gKHByb3AsIHZhbHVlKT0+aXNPYmplY3QodmFsdWUpICYmIHByb3AgIT09ICdhZGFwdGVycycgJiYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgPT09IG51bGwgfHwgdmFsdWUuY29uc3RydWN0b3IgPT09IE9iamVjdCk7XG5mdW5jdGlvbiBfY2FjaGVkKHRhcmdldCwgcHJvcCwgcmVzb2x2ZSkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBwcm9wKSB8fCBwcm9wID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXRbcHJvcF07XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gcmVzb2x2ZSgpO1xuICAgIC8vIGNhY2hlIHRoZSByZXNvbHZlZCB2YWx1ZVxuICAgIHRhcmdldFtwcm9wXSA9IHZhbHVlO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIF9yZXNvbHZlV2l0aENvbnRleHQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuICAgIGNvbnN0IHsgX3Byb3h5ICwgX2NvbnRleHQgLCBfc3ViUHJveHkgLCBfZGVzY3JpcHRvcnM6IGRlc2NyaXB0b3JzICB9ID0gdGFyZ2V0O1xuICAgIGxldCB2YWx1ZSA9IF9wcm94eVtwcm9wXTsgLy8gcmVzb2x2ZSBmcm9tIHByb3h5XG4gICAgLy8gcmVzb2x2ZSB3aXRoIGNvbnRleHRcbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkgJiYgZGVzY3JpcHRvcnMuaXNTY3JpcHRhYmxlKHByb3ApKSB7XG4gICAgICAgIHZhbHVlID0gX3Jlc29sdmVTY3JpcHRhYmxlKHByb3AsIHZhbHVlLCB0YXJnZXQsIHJlY2VpdmVyKTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSA9IF9yZXNvbHZlQXJyYXkocHJvcCwgdmFsdWUsIHRhcmdldCwgZGVzY3JpcHRvcnMuaXNJbmRleGFibGUpO1xuICAgIH1cbiAgICBpZiAobmVlZHNTdWJSZXNvbHZlcihwcm9wLCB2YWx1ZSkpIHtcbiAgICAgICAgLy8gaWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzIGFuIG9iamVjdCwgY3JlYXRlIGEgc3ViIHJlc29sdmVyIGZvciBpdFxuICAgICAgICB2YWx1ZSA9IF9hdHRhY2hDb250ZXh0KHZhbHVlLCBfY29udGV4dCwgX3N1YlByb3h5ICYmIF9zdWJQcm94eVtwcm9wXSwgZGVzY3JpcHRvcnMpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBfcmVzb2x2ZVNjcmlwdGFibGUocHJvcCwgZ2V0VmFsdWUsIHRhcmdldCwgcmVjZWl2ZXIpIHtcbiAgICBjb25zdCB7IF9wcm94eSAsIF9jb250ZXh0ICwgX3N1YlByb3h5ICwgX3N0YWNrICB9ID0gdGFyZ2V0O1xuICAgIGlmIChfc3RhY2suaGFzKHByb3ApKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVjdXJzaW9uIGRldGVjdGVkOiAnICsgQXJyYXkuZnJvbShfc3RhY2spLmpvaW4oJy0+JykgKyAnLT4nICsgcHJvcCk7XG4gICAgfVxuICAgIF9zdGFjay5hZGQocHJvcCk7XG4gICAgbGV0IHZhbHVlID0gZ2V0VmFsdWUoX2NvbnRleHQsIF9zdWJQcm94eSB8fCByZWNlaXZlcik7XG4gICAgX3N0YWNrLmRlbGV0ZShwcm9wKTtcbiAgICBpZiAobmVlZHNTdWJSZXNvbHZlcihwcm9wLCB2YWx1ZSkpIHtcbiAgICAgICAgLy8gV2hlbiBzY3JpcHRhYmxlIG9wdGlvbiByZXR1cm5zIGFuIG9iamVjdCwgY3JlYXRlIGEgcmVzb2x2ZXIgb24gdGhhdC5cbiAgICAgICAgdmFsdWUgPSBjcmVhdGVTdWJSZXNvbHZlcihfcHJveHkuX3Njb3BlcywgX3Byb3h5LCBwcm9wLCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIF9yZXNvbHZlQXJyYXkocHJvcCwgdmFsdWUsIHRhcmdldCwgaXNJbmRleGFibGUpIHtcbiAgICBjb25zdCB7IF9wcm94eSAsIF9jb250ZXh0ICwgX3N1YlByb3h5ICwgX2Rlc2NyaXB0b3JzOiBkZXNjcmlwdG9ycyAgfSA9IHRhcmdldDtcbiAgICBpZiAodHlwZW9mIF9jb250ZXh0LmluZGV4ICE9PSAndW5kZWZpbmVkJyAmJiBpc0luZGV4YWJsZShwcm9wKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVbX2NvbnRleHQuaW5kZXggJSB2YWx1ZS5sZW5ndGhdO1xuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWVbMF0pKSB7XG4gICAgICAgIC8vIEFycmF5IG9mIG9iamVjdHMsIHJldHVybiBhcnJheSBvciByZXNvbHZlcnNcbiAgICAgICAgY29uc3QgYXJyID0gdmFsdWU7XG4gICAgICAgIGNvbnN0IHNjb3BlcyA9IF9wcm94eS5fc2NvcGVzLmZpbHRlcigocyk9PnMgIT09IGFycik7XG4gICAgICAgIHZhbHVlID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnIpe1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZXIgPSBjcmVhdGVTdWJSZXNvbHZlcihzY29wZXMsIF9wcm94eSwgcHJvcCwgaXRlbSk7XG4gICAgICAgICAgICB2YWx1ZS5wdXNoKF9hdHRhY2hDb250ZXh0KHJlc29sdmVyLCBfY29udGV4dCwgX3N1YlByb3h5ICYmIF9zdWJQcm94eVtwcm9wXSwgZGVzY3JpcHRvcnMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiByZXNvbHZlRmFsbGJhY2soZmFsbGJhY2ssIHByb3AsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oZmFsbGJhY2spID8gZmFsbGJhY2socHJvcCwgdmFsdWUpIDogZmFsbGJhY2s7XG59XG5jb25zdCBnZXRTY29wZSA9IChrZXksIHBhcmVudCk9PmtleSA9PT0gdHJ1ZSA/IHBhcmVudCA6IHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnID8gcmVzb2x2ZU9iamVjdEtleShwYXJlbnQsIGtleSkgOiB1bmRlZmluZWQ7XG5mdW5jdGlvbiBhZGRTY29wZXMoc2V0LCBwYXJlbnRTY29wZXMsIGtleSwgcGFyZW50RmFsbGJhY2ssIHZhbHVlKSB7XG4gICAgZm9yIChjb25zdCBwYXJlbnQgb2YgcGFyZW50U2NvcGVzKXtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZShrZXksIHBhcmVudCk7XG4gICAgICAgIGlmIChzY29wZSkge1xuICAgICAgICAgICAgc2V0LmFkZChzY29wZSk7XG4gICAgICAgICAgICBjb25zdCBmYWxsYmFjayA9IHJlc29sdmVGYWxsYmFjayhzY29wZS5fZmFsbGJhY2ssIGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmYWxsYmFjayAhPT0gJ3VuZGVmaW5lZCcgJiYgZmFsbGJhY2sgIT09IGtleSAmJiBmYWxsYmFjayAhPT0gcGFyZW50RmFsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAvLyBXaGVuIHdlIHJlYWNoIHRoZSBkZXNjcmlwdG9yIHRoYXQgZGVmaW5lcyBhIG5ldyBfZmFsbGJhY2ssIHJldHVybiB0aGF0LlxuICAgICAgICAgICAgICAgIC8vIFRoZSBmYWxsYmFjayB3aWxsIHJlc3VtZSB0byB0aGF0IG5ldyBzY29wZS5cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2NvcGUgPT09IGZhbHNlICYmIHR5cGVvZiBwYXJlbnRGYWxsYmFjayAhPT0gJ3VuZGVmaW5lZCcgJiYga2V5ICE9PSBwYXJlbnRGYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gYGZhbHNlYCByZXN1bHRzIHRvIGBmYWxzZWAsIHdoZW4gZmFsbGluZyBiYWNrIHRvIGRpZmZlcmVudCBrZXkuXG4gICAgICAgICAgICAvLyBGb3IgZXhhbXBsZSBgaW50ZXJhY3Rpb25gIGZyb20gYGhvdmVyYCBvciBgcGx1Z2lucy50b29sdGlwYCBhbmQgYGFuaW1hdGlvbmAgZnJvbSBgYW5pbWF0aW9uc2BcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVN1YlJlc29sdmVyKHBhcmVudFNjb3BlcywgcmVzb2x2ZXIsIHByb3AsIHZhbHVlKSB7XG4gICAgY29uc3Qgcm9vdFNjb3BlcyA9IHJlc29sdmVyLl9yb290U2NvcGVzO1xuICAgIGNvbnN0IGZhbGxiYWNrID0gcmVzb2x2ZUZhbGxiYWNrKHJlc29sdmVyLl9mYWxsYmFjaywgcHJvcCwgdmFsdWUpO1xuICAgIGNvbnN0IGFsbFNjb3BlcyA9IFtcbiAgICAgICAgLi4ucGFyZW50U2NvcGVzLFxuICAgICAgICAuLi5yb290U2NvcGVzXG4gICAgXTtcbiAgICBjb25zdCBzZXQgPSBuZXcgU2V0KCk7XG4gICAgc2V0LmFkZCh2YWx1ZSk7XG4gICAgbGV0IGtleSA9IGFkZFNjb3Blc0Zyb21LZXkoc2V0LCBhbGxTY29wZXMsIHByb3AsIGZhbGxiYWNrIHx8IHByb3AsIHZhbHVlKTtcbiAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBmYWxsYmFjayAhPT0gJ3VuZGVmaW5lZCcgJiYgZmFsbGJhY2sgIT09IHByb3ApIHtcbiAgICAgICAga2V5ID0gYWRkU2NvcGVzRnJvbUtleShzZXQsIGFsbFNjb3BlcywgZmFsbGJhY2ssIGtleSwgdmFsdWUpO1xuICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9jcmVhdGVSZXNvbHZlcihBcnJheS5mcm9tKHNldCksIFtcbiAgICAgICAgJydcbiAgICBdLCByb290U2NvcGVzLCBmYWxsYmFjaywgKCk9PnN1YkdldFRhcmdldChyZXNvbHZlciwgcHJvcCwgdmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGFkZFNjb3Blc0Zyb21LZXkoc2V0LCBhbGxTY29wZXMsIGtleSwgZmFsbGJhY2ssIGl0ZW0pIHtcbiAgICB3aGlsZShrZXkpe1xuICAgICAgICBrZXkgPSBhZGRTY29wZXMoc2V0LCBhbGxTY29wZXMsIGtleSwgZmFsbGJhY2ssIGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xufVxuZnVuY3Rpb24gc3ViR2V0VGFyZ2V0KHJlc29sdmVyLCBwcm9wLCB2YWx1ZSkge1xuICAgIGNvbnN0IHBhcmVudCA9IHJlc29sdmVyLl9nZXRUYXJnZXQoKTtcbiAgICBpZiAoIShwcm9wIGluIHBhcmVudCkpIHtcbiAgICAgICAgcGFyZW50W3Byb3BdID0ge307XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldCA9IHBhcmVudFtwcm9wXTtcbiAgICBpZiAoaXNBcnJheSh0YXJnZXQpICYmIGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAvLyBGb3IgYXJyYXkgb2Ygb2JqZWN0cywgdGhlIG9iamVjdCBpcyB1c2VkIHRvIHN0b3JlIHVwZGF0ZWQgdmFsdWVzXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldCB8fCB7fTtcbn1cbmZ1bmN0aW9uIF9yZXNvbHZlV2l0aFByZWZpeGVzKHByb3AsIHByZWZpeGVzLCBzY29wZXMsIHByb3h5KSB7XG4gICAgbGV0IHZhbHVlO1xuICAgIGZvciAoY29uc3QgcHJlZml4IG9mIHByZWZpeGVzKXtcbiAgICAgICAgdmFsdWUgPSBfcmVzb2x2ZShyZWFkS2V5KHByZWZpeCwgcHJvcCksIHNjb3Blcyk7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmVlZHNTdWJSZXNvbHZlcihwcm9wLCB2YWx1ZSkgPyBjcmVhdGVTdWJSZXNvbHZlcihzY29wZXMsIHByb3h5LCBwcm9wLCB2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIF9yZXNvbHZlKGtleSwgc2NvcGVzKSB7XG4gICAgZm9yIChjb25zdCBzY29wZSBvZiBzY29wZXMpe1xuICAgICAgICBpZiAoIXNjb3BlKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZSA9IHNjb3BlW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBnZXRLZXlzRnJvbUFsbFNjb3Blcyh0YXJnZXQpIHtcbiAgICBsZXQga2V5cyA9IHRhcmdldC5fa2V5cztcbiAgICBpZiAoIWtleXMpIHtcbiAgICAgICAga2V5cyA9IHRhcmdldC5fa2V5cyA9IHJlc29sdmVLZXlzRnJvbUFsbFNjb3Blcyh0YXJnZXQuX3Njb3Blcyk7XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUtleXNGcm9tQWxsU2NvcGVzKHNjb3Blcykge1xuICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoKTtcbiAgICBmb3IgKGNvbnN0IHNjb3BlIG9mIHNjb3Blcyl7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNjb3BlKS5maWx0ZXIoKGspPT4hay5zdGFydHNXaXRoKCdfJykpKXtcbiAgICAgICAgICAgIHNldC5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbShzZXQpO1xufVxuZnVuY3Rpb24gX3BhcnNlT2JqZWN0RGF0YVJhZGlhbFNjYWxlKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgIGNvbnN0IHsgaVNjYWxlICB9ID0gbWV0YTtcbiAgICBjb25zdCB7IGtleSA9J3InICB9ID0gdGhpcy5fcGFyc2luZztcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgIGxldCBpLCBpbGVuLCBpbmRleCwgaXRlbTtcbiAgICBmb3IoaSA9IDAsIGlsZW4gPSBjb3VudDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIGluZGV4ID0gaSArIHN0YXJ0O1xuICAgICAgICBpdGVtID0gZGF0YVtpbmRleF07XG4gICAgICAgIHBhcnNlZFtpXSA9IHtcbiAgICAgICAgICAgIHI6IGlTY2FsZS5wYXJzZShyZXNvbHZlT2JqZWN0S2V5KGl0ZW0sIGtleSksIGluZGV4KVxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xufVxuXG5jb25zdCBFUFNJTE9OID0gTnVtYmVyLkVQU0lMT04gfHwgMWUtMTQ7XG5jb25zdCBnZXRQb2ludCA9IChwb2ludHMsIGkpPT5pIDwgcG9pbnRzLmxlbmd0aCAmJiAhcG9pbnRzW2ldLnNraXAgJiYgcG9pbnRzW2ldO1xuY29uc3QgZ2V0VmFsdWVBeGlzID0gKGluZGV4QXhpcyk9PmluZGV4QXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xuZnVuY3Rpb24gc3BsaW5lQ3VydmUoZmlyc3RQb2ludCwgbWlkZGxlUG9pbnQsIGFmdGVyUG9pbnQsIHQpIHtcbiAgICAvLyBQcm9wcyB0byBSb2IgU3BlbmNlciBhdCBzY2FsZWQgaW5ub3ZhdGlvbiBmb3IgaGlzIHBvc3Qgb24gc3BsaW5pbmcgYmV0d2VlbiBwb2ludHNcbiAgICAvLyBodHRwOi8vc2NhbGVkaW5ub3ZhdGlvbi5jb20vYW5hbHl0aWNzL3NwbGluZXMvYWJvdXRTcGxpbmVzLmh0bWxcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYWxzbyByZXNwZWN0IFwic2tpcHBlZFwiIHBvaW50c1xuICAgIGNvbnN0IHByZXZpb3VzID0gZmlyc3RQb2ludC5za2lwID8gbWlkZGxlUG9pbnQgOiBmaXJzdFBvaW50O1xuICAgIGNvbnN0IGN1cnJlbnQgPSBtaWRkbGVQb2ludDtcbiAgICBjb25zdCBuZXh0ID0gYWZ0ZXJQb2ludC5za2lwID8gbWlkZGxlUG9pbnQgOiBhZnRlclBvaW50O1xuICAgIGNvbnN0IGQwMSA9IGRpc3RhbmNlQmV0d2VlblBvaW50cyhjdXJyZW50LCBwcmV2aW91cyk7XG4gICAgY29uc3QgZDEyID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRzKG5leHQsIGN1cnJlbnQpO1xuICAgIGxldCBzMDEgPSBkMDEgLyAoZDAxICsgZDEyKTtcbiAgICBsZXQgczEyID0gZDEyIC8gKGQwMSArIGQxMik7XG4gICAgLy8gSWYgYWxsIHBvaW50cyBhcmUgdGhlIHNhbWUsIHMwMSAmIHMwMiB3aWxsIGJlIGluZlxuICAgIHMwMSA9IGlzTmFOKHMwMSkgPyAwIDogczAxO1xuICAgIHMxMiA9IGlzTmFOKHMxMikgPyAwIDogczEyO1xuICAgIGNvbnN0IGZhID0gdCAqIHMwMTsgLy8gc2NhbGluZyBmYWN0b3IgZm9yIHRyaWFuZ2xlIFRhXG4gICAgY29uc3QgZmIgPSB0ICogczEyO1xuICAgIHJldHVybiB7XG4gICAgICAgIHByZXZpb3VzOiB7XG4gICAgICAgICAgICB4OiBjdXJyZW50LnggLSBmYSAqIChuZXh0LnggLSBwcmV2aW91cy54KSxcbiAgICAgICAgICAgIHk6IGN1cnJlbnQueSAtIGZhICogKG5leHQueSAtIHByZXZpb3VzLnkpXG4gICAgICAgIH0sXG4gICAgICAgIG5leHQ6IHtcbiAgICAgICAgICAgIHg6IGN1cnJlbnQueCArIGZiICogKG5leHQueCAtIHByZXZpb3VzLngpLFxuICAgICAgICAgICAgeTogY3VycmVudC55ICsgZmIgKiAobmV4dC55IC0gcHJldmlvdXMueSlcbiAgICAgICAgfVxuICAgIH07XG59XG4vKipcbiAqIEFkanVzdCB0YW5nZW50cyB0byBlbnN1cmUgbW9ub3RvbmljIHByb3BlcnRpZXNcbiAqLyBmdW5jdGlvbiBtb25vdG9uZUFkanVzdChwb2ludHMsIGRlbHRhSywgbUspIHtcbiAgICBjb25zdCBwb2ludHNMZW4gPSBwb2ludHMubGVuZ3RoO1xuICAgIGxldCBhbHBoYUssIGJldGFLLCB0YXVLLCBzcXVhcmVkTWFnbml0dWRlLCBwb2ludEN1cnJlbnQ7XG4gICAgbGV0IHBvaW50QWZ0ZXIgPSBnZXRQb2ludChwb2ludHMsIDApO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBwb2ludHNMZW4gLSAxOyArK2kpe1xuICAgICAgICBwb2ludEN1cnJlbnQgPSBwb2ludEFmdGVyO1xuICAgICAgICBwb2ludEFmdGVyID0gZ2V0UG9pbnQocG9pbnRzLCBpICsgMSk7XG4gICAgICAgIGlmICghcG9pbnRDdXJyZW50IHx8ICFwb2ludEFmdGVyKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxtb3N0RXF1YWxzKGRlbHRhS1tpXSwgMCwgRVBTSUxPTikpIHtcbiAgICAgICAgICAgIG1LW2ldID0gbUtbaSArIDFdID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGFscGhhSyA9IG1LW2ldIC8gZGVsdGFLW2ldO1xuICAgICAgICBiZXRhSyA9IG1LW2kgKyAxXSAvIGRlbHRhS1tpXTtcbiAgICAgICAgc3F1YXJlZE1hZ25pdHVkZSA9IE1hdGgucG93KGFscGhhSywgMikgKyBNYXRoLnBvdyhiZXRhSywgMik7XG4gICAgICAgIGlmIChzcXVhcmVkTWFnbml0dWRlIDw9IDkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRhdUsgPSAzIC8gTWF0aC5zcXJ0KHNxdWFyZWRNYWduaXR1ZGUpO1xuICAgICAgICBtS1tpXSA9IGFscGhhSyAqIHRhdUsgKiBkZWx0YUtbaV07XG4gICAgICAgIG1LW2kgKyAxXSA9IGJldGFLICogdGF1SyAqIGRlbHRhS1tpXTtcbiAgICB9XG59XG5mdW5jdGlvbiBtb25vdG9uZUNvbXB1dGUocG9pbnRzLCBtSywgaW5kZXhBeGlzID0gJ3gnKSB7XG4gICAgY29uc3QgdmFsdWVBeGlzID0gZ2V0VmFsdWVBeGlzKGluZGV4QXhpcyk7XG4gICAgY29uc3QgcG9pbnRzTGVuID0gcG9pbnRzLmxlbmd0aDtcbiAgICBsZXQgZGVsdGEsIHBvaW50QmVmb3JlLCBwb2ludEN1cnJlbnQ7XG4gICAgbGV0IHBvaW50QWZ0ZXIgPSBnZXRQb2ludChwb2ludHMsIDApO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBwb2ludHNMZW47ICsraSl7XG4gICAgICAgIHBvaW50QmVmb3JlID0gcG9pbnRDdXJyZW50O1xuICAgICAgICBwb2ludEN1cnJlbnQgPSBwb2ludEFmdGVyO1xuICAgICAgICBwb2ludEFmdGVyID0gZ2V0UG9pbnQocG9pbnRzLCBpICsgMSk7XG4gICAgICAgIGlmICghcG9pbnRDdXJyZW50KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpUGl4ZWwgPSBwb2ludEN1cnJlbnRbaW5kZXhBeGlzXTtcbiAgICAgICAgY29uc3QgdlBpeGVsID0gcG9pbnRDdXJyZW50W3ZhbHVlQXhpc107XG4gICAgICAgIGlmIChwb2ludEJlZm9yZSkge1xuICAgICAgICAgICAgZGVsdGEgPSAoaVBpeGVsIC0gcG9pbnRCZWZvcmVbaW5kZXhBeGlzXSkgLyAzO1xuICAgICAgICAgICAgcG9pbnRDdXJyZW50W2BjcDEke2luZGV4QXhpc31gXSA9IGlQaXhlbCAtIGRlbHRhO1xuICAgICAgICAgICAgcG9pbnRDdXJyZW50W2BjcDEke3ZhbHVlQXhpc31gXSA9IHZQaXhlbCAtIGRlbHRhICogbUtbaV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvaW50QWZ0ZXIpIHtcbiAgICAgICAgICAgIGRlbHRhID0gKHBvaW50QWZ0ZXJbaW5kZXhBeGlzXSAtIGlQaXhlbCkgLyAzO1xuICAgICAgICAgICAgcG9pbnRDdXJyZW50W2BjcDIke2luZGV4QXhpc31gXSA9IGlQaXhlbCArIGRlbHRhO1xuICAgICAgICAgICAgcG9pbnRDdXJyZW50W2BjcDIke3ZhbHVlQXhpc31gXSA9IHZQaXhlbCArIGRlbHRhICogbUtbaV07XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyBCw6l6aWVyIGNvbnRyb2wgcG9pbnRzIGluIGEgc2ltaWxhciB3YXkgdGhhbiB8c3BsaW5lQ3VydmV8LFxuICogYnV0IHByZXNlcnZlcyBtb25vdG9uaWNpdHkgb2YgdGhlIHByb3ZpZGVkIGRhdGEgYW5kIGVuc3VyZXMgbm8gbG9jYWwgZXh0cmVtdW1zIGFyZSBhZGRlZFxuICogYmV0d2VlbiB0aGUgZGF0YXNldCBkaXNjcmV0ZSBwb2ludHMgZHVlIHRvIHRoZSBpbnRlcnBvbGF0aW9uLlxuICogU2VlIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTW9ub3RvbmVfY3ViaWNfaW50ZXJwb2xhdGlvblxuICovIGZ1bmN0aW9uIHNwbGluZUN1cnZlTW9ub3RvbmUocG9pbnRzLCBpbmRleEF4aXMgPSAneCcpIHtcbiAgICBjb25zdCB2YWx1ZUF4aXMgPSBnZXRWYWx1ZUF4aXMoaW5kZXhBeGlzKTtcbiAgICBjb25zdCBwb2ludHNMZW4gPSBwb2ludHMubGVuZ3RoO1xuICAgIGNvbnN0IGRlbHRhSyA9IEFycmF5KHBvaW50c0xlbikuZmlsbCgwKTtcbiAgICBjb25zdCBtSyA9IEFycmF5KHBvaW50c0xlbik7XG4gICAgLy8gQ2FsY3VsYXRlIHNsb3BlcyAoZGVsdGFLKSBhbmQgaW5pdGlhbGl6ZSB0YW5nZW50cyAobUspXG4gICAgbGV0IGksIHBvaW50QmVmb3JlLCBwb2ludEN1cnJlbnQ7XG4gICAgbGV0IHBvaW50QWZ0ZXIgPSBnZXRQb2ludChwb2ludHMsIDApO1xuICAgIGZvcihpID0gMDsgaSA8IHBvaW50c0xlbjsgKytpKXtcbiAgICAgICAgcG9pbnRCZWZvcmUgPSBwb2ludEN1cnJlbnQ7XG4gICAgICAgIHBvaW50Q3VycmVudCA9IHBvaW50QWZ0ZXI7XG4gICAgICAgIHBvaW50QWZ0ZXIgPSBnZXRQb2ludChwb2ludHMsIGkgKyAxKTtcbiAgICAgICAgaWYgKCFwb2ludEN1cnJlbnQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb2ludEFmdGVyKSB7XG4gICAgICAgICAgICBjb25zdCBzbG9wZURlbHRhID0gcG9pbnRBZnRlcltpbmRleEF4aXNdIC0gcG9pbnRDdXJyZW50W2luZGV4QXhpc107XG4gICAgICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiB0d28gcG9pbnRzIHRoYXQgYXBwZWFyIGF0IHRoZSBzYW1lIHggcGl4ZWwsIHNsb3BlRGVsdGFYIGlzIDBcbiAgICAgICAgICAgIGRlbHRhS1tpXSA9IHNsb3BlRGVsdGEgIT09IDAgPyAocG9pbnRBZnRlclt2YWx1ZUF4aXNdIC0gcG9pbnRDdXJyZW50W3ZhbHVlQXhpc10pIC8gc2xvcGVEZWx0YSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgbUtbaV0gPSAhcG9pbnRCZWZvcmUgPyBkZWx0YUtbaV0gOiAhcG9pbnRBZnRlciA/IGRlbHRhS1tpIC0gMV0gOiBzaWduKGRlbHRhS1tpIC0gMV0pICE9PSBzaWduKGRlbHRhS1tpXSkgPyAwIDogKGRlbHRhS1tpIC0gMV0gKyBkZWx0YUtbaV0pIC8gMjtcbiAgICB9XG4gICAgbW9ub3RvbmVBZGp1c3QocG9pbnRzLCBkZWx0YUssIG1LKTtcbiAgICBtb25vdG9uZUNvbXB1dGUocG9pbnRzLCBtSywgaW5kZXhBeGlzKTtcbn1cbmZ1bmN0aW9uIGNhcENvbnRyb2xQb2ludChwdCwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4ocHQsIG1heCksIG1pbik7XG59XG5mdW5jdGlvbiBjYXBCZXppZXJQb2ludHMocG9pbnRzLCBhcmVhKSB7XG4gICAgbGV0IGksIGlsZW4sIHBvaW50LCBpbkFyZWEsIGluQXJlYVByZXY7XG4gICAgbGV0IGluQXJlYU5leHQgPSBfaXNQb2ludEluQXJlYShwb2ludHNbMF0sIGFyZWEpO1xuICAgIGZvcihpID0gMCwgaWxlbiA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICBpbkFyZWFQcmV2ID0gaW5BcmVhO1xuICAgICAgICBpbkFyZWEgPSBpbkFyZWFOZXh0O1xuICAgICAgICBpbkFyZWFOZXh0ID0gaSA8IGlsZW4gLSAxICYmIF9pc1BvaW50SW5BcmVhKHBvaW50c1tpICsgMV0sIGFyZWEpO1xuICAgICAgICBpZiAoIWluQXJlYSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGlmIChpbkFyZWFQcmV2KSB7XG4gICAgICAgICAgICBwb2ludC5jcDF4ID0gY2FwQ29udHJvbFBvaW50KHBvaW50LmNwMXgsIGFyZWEubGVmdCwgYXJlYS5yaWdodCk7XG4gICAgICAgICAgICBwb2ludC5jcDF5ID0gY2FwQ29udHJvbFBvaW50KHBvaW50LmNwMXksIGFyZWEudG9wLCBhcmVhLmJvdHRvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluQXJlYU5leHQpIHtcbiAgICAgICAgICAgIHBvaW50LmNwMnggPSBjYXBDb250cm9sUG9pbnQocG9pbnQuY3AyeCwgYXJlYS5sZWZ0LCBhcmVhLnJpZ2h0KTtcbiAgICAgICAgICAgIHBvaW50LmNwMnkgPSBjYXBDb250cm9sUG9pbnQocG9pbnQuY3AyeSwgYXJlYS50b3AsIGFyZWEuYm90dG9tKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfdXBkYXRlQmV6aWVyQ29udHJvbFBvaW50cyhwb2ludHMsIG9wdGlvbnMsIGFyZWEsIGxvb3AsIGluZGV4QXhpcykge1xuICAgIGxldCBpLCBpbGVuLCBwb2ludCwgY29udHJvbFBvaW50cztcbiAgICAvLyBPbmx5IGNvbnNpZGVyIHBvaW50cyB0aGF0IGFyZSBkcmF3biBpbiBjYXNlIHRoZSBzcGFuR2FwcyBvcHRpb24gaXMgdXNlZFxuICAgIGlmIChvcHRpb25zLnNwYW5HYXBzKSB7XG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5maWx0ZXIoKHB0KT0+IXB0LnNraXApO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5jdWJpY0ludGVycG9sYXRpb25Nb2RlID09PSAnbW9ub3RvbmUnKSB7XG4gICAgICAgIHNwbGluZUN1cnZlTW9ub3RvbmUocG9pbnRzLCBpbmRleEF4aXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwcmV2ID0gbG9vcCA/IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0gOiBwb2ludHNbMF07XG4gICAgICAgIGZvcihpID0gMCwgaWxlbiA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBjb250cm9sUG9pbnRzID0gc3BsaW5lQ3VydmUocHJldiwgcG9pbnQsIHBvaW50c1tNYXRoLm1pbihpICsgMSwgaWxlbiAtIChsb29wID8gMCA6IDEpKSAlIGlsZW5dLCBvcHRpb25zLnRlbnNpb24pO1xuICAgICAgICAgICAgcG9pbnQuY3AxeCA9IGNvbnRyb2xQb2ludHMucHJldmlvdXMueDtcbiAgICAgICAgICAgIHBvaW50LmNwMXkgPSBjb250cm9sUG9pbnRzLnByZXZpb3VzLnk7XG4gICAgICAgICAgICBwb2ludC5jcDJ4ID0gY29udHJvbFBvaW50cy5uZXh0Lng7XG4gICAgICAgICAgICBwb2ludC5jcDJ5ID0gY29udHJvbFBvaW50cy5uZXh0Lnk7XG4gICAgICAgICAgICBwcmV2ID0gcG9pbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY2FwQmV6aWVyUG9pbnRzKSB7XG4gICAgICAgIGNhcEJlemllclBvaW50cyhwb2ludHMsIGFyZWEpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBOb3RlOiB0eXBlZGVmcyBhcmUgYXV0by1leHBvcnRlZCwgc28gdXNlIGEgbWFkZS11cCBgZG9tYCBuYW1lc3BhY2Ugd2hlcmVcbiAqIG5lY2Vzc2FyeSB0byBhdm9pZCBkdXBsaWNhdGVzIHdpdGggYGV4cG9ydCAqIGZyb20gJy4vaGVscGVyc2A7IHNlZVxuICogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy80NjAxMVxuICogQHR5cGVkZWYgeyBpbXBvcnQoJy4uL2NvcmUvY29yZS5jb250cm9sbGVyLmpzJykuZGVmYXVsdCB9IGRvbS5DaGFydFxuICogQHR5cGVkZWYgeyBpbXBvcnQoJy4uLy4uL3R5cGVzJykuQ2hhcnRFdmVudCB9IENoYXJ0RXZlbnRcbiAqLyAvKipcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2lzRG9tU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9nZXRQYXJlbnROb2RlKGRvbU5vZGUpIHtcbiAgICBsZXQgcGFyZW50ID0gZG9tTm9kZS5wYXJlbnROb2RlO1xuICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IFNoYWRvd1Jvb3RdJykge1xuICAgICAgICBwYXJlbnQgPSBwYXJlbnQuaG9zdDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudDtcbn1cbi8qKlxuICogY29udmVydCBtYXgtd2lkdGgvbWF4LWhlaWdodCB2YWx1ZXMgdGhhdCBtYXkgYmUgcGVyY2VudGFnZXMgaW50byBhIG51bWJlclxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBwYXJzZU1heFN0eWxlKHN0eWxlVmFsdWUsIG5vZGUsIHBhcmVudFByb3BlcnR5KSB7XG4gICAgbGV0IHZhbHVlSW5QaXhlbHM7XG4gICAgaWYgKHR5cGVvZiBzdHlsZVZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZUluUGl4ZWxzID0gcGFyc2VJbnQoc3R5bGVWYWx1ZSwgMTApO1xuICAgICAgICBpZiAoc3R5bGVWYWx1ZS5pbmRleE9mKCclJykgIT09IC0xKSB7XG4gICAgICAgICAgICAvLyBwZXJjZW50YWdlICogc2l6ZSBpbiBkaW1lbnNpb25cbiAgICAgICAgICAgIHZhbHVlSW5QaXhlbHMgPSB2YWx1ZUluUGl4ZWxzIC8gMTAwICogbm9kZS5wYXJlbnROb2RlW3BhcmVudFByb3BlcnR5XTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlSW5QaXhlbHMgPSBzdHlsZVZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVJblBpeGVscztcbn1cbmNvbnN0IGdldENvbXB1dGVkU3R5bGUgPSAoZWxlbWVudCk9PmVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpO1xuZnVuY3Rpb24gZ2V0U3R5bGUoZWwsIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZWwpLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpO1xufVxuY29uc3QgcG9zaXRpb25zID0gW1xuICAgICd0b3AnLFxuICAgICdyaWdodCcsXG4gICAgJ2JvdHRvbScsXG4gICAgJ2xlZnQnXG5dO1xuZnVuY3Rpb24gZ2V0UG9zaXRpb25lZFN0eWxlKHN0eWxlcywgc3R5bGUsIHN1ZmZpeCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIHN1ZmZpeCA9IHN1ZmZpeCA/ICctJyArIHN1ZmZpeCA6ICcnO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCA0OyBpKyspe1xuICAgICAgICBjb25zdCBwb3MgPSBwb3NpdGlvbnNbaV07XG4gICAgICAgIHJlc3VsdFtwb3NdID0gcGFyc2VGbG9hdChzdHlsZXNbc3R5bGUgKyAnLScgKyBwb3MgKyBzdWZmaXhdKSB8fCAwO1xuICAgIH1cbiAgICByZXN1bHQud2lkdGggPSByZXN1bHQubGVmdCArIHJlc3VsdC5yaWdodDtcbiAgICByZXN1bHQuaGVpZ2h0ID0gcmVzdWx0LnRvcCArIHJlc3VsdC5ib3R0b207XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmNvbnN0IHVzZU9mZnNldFBvcyA9ICh4LCB5LCB0YXJnZXQpPT4oeCA+IDAgfHwgeSA+IDApICYmICghdGFyZ2V0IHx8ICF0YXJnZXQuc2hhZG93Um9vdCk7XG4vKipcbiAqIEBwYXJhbSBlXG4gKiBAcGFyYW0gY2FudmFzXG4gKiBAcmV0dXJucyBDYW52YXMgcG9zaXRpb25cbiAqLyBmdW5jdGlvbiBnZXRDYW52YXNQb3NpdGlvbihlLCBjYW52YXMpIHtcbiAgICBjb25zdCB0b3VjaGVzID0gZS50b3VjaGVzO1xuICAgIGNvbnN0IHNvdXJjZSA9IHRvdWNoZXMgJiYgdG91Y2hlcy5sZW5ndGggPyB0b3VjaGVzWzBdIDogZTtcbiAgICBjb25zdCB7IG9mZnNldFggLCBvZmZzZXRZICB9ID0gc291cmNlO1xuICAgIGxldCBib3ggPSBmYWxzZTtcbiAgICBsZXQgeCwgeTtcbiAgICBpZiAodXNlT2Zmc2V0UG9zKG9mZnNldFgsIG9mZnNldFksIGUudGFyZ2V0KSkge1xuICAgICAgICB4ID0gb2Zmc2V0WDtcbiAgICAgICAgeSA9IG9mZnNldFk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVjdCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgeCA9IHNvdXJjZS5jbGllbnRYIC0gcmVjdC5sZWZ0O1xuICAgICAgICB5ID0gc291cmNlLmNsaWVudFkgLSByZWN0LnRvcDtcbiAgICAgICAgYm94ID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgYm94XG4gICAgfTtcbn1cbi8qKlxuICogR2V0cyBhbiBldmVudCdzIHgsIHkgY29vcmRpbmF0ZXMsIHJlbGF0aXZlIHRvIHRoZSBjaGFydCBhcmVhXG4gKiBAcGFyYW0gZXZlbnRcbiAqIEBwYXJhbSBjaGFydFxuICogQHJldHVybnMgeCBhbmQgeSBjb29yZGluYXRlcyBvZiB0aGUgZXZlbnRcbiAqLyBmdW5jdGlvbiBnZXRSZWxhdGl2ZVBvc2l0aW9uKGV2ZW50LCBjaGFydCkge1xuICAgIGlmICgnbmF0aXZlJyBpbiBldmVudCkge1xuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfVxuICAgIGNvbnN0IHsgY2FudmFzICwgY3VycmVudERldmljZVBpeGVsUmF0aW8gIH0gPSBjaGFydDtcbiAgICBjb25zdCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoY2FudmFzKTtcbiAgICBjb25zdCBib3JkZXJCb3ggPSBzdHlsZS5ib3hTaXppbmcgPT09ICdib3JkZXItYm94JztcbiAgICBjb25zdCBwYWRkaW5ncyA9IGdldFBvc2l0aW9uZWRTdHlsZShzdHlsZSwgJ3BhZGRpbmcnKTtcbiAgICBjb25zdCBib3JkZXJzID0gZ2V0UG9zaXRpb25lZFN0eWxlKHN0eWxlLCAnYm9yZGVyJywgJ3dpZHRoJyk7XG4gICAgY29uc3QgeyB4ICwgeSAsIGJveCAgfSA9IGdldENhbnZhc1Bvc2l0aW9uKGV2ZW50LCBjYW52YXMpO1xuICAgIGNvbnN0IHhPZmZzZXQgPSBwYWRkaW5ncy5sZWZ0ICsgKGJveCAmJiBib3JkZXJzLmxlZnQpO1xuICAgIGNvbnN0IHlPZmZzZXQgPSBwYWRkaW5ncy50b3AgKyAoYm94ICYmIGJvcmRlcnMudG9wKTtcbiAgICBsZXQgeyB3aWR0aCAsIGhlaWdodCAgfSA9IGNoYXJ0O1xuICAgIGlmIChib3JkZXJCb3gpIHtcbiAgICAgICAgd2lkdGggLT0gcGFkZGluZ3Mud2lkdGggKyBib3JkZXJzLndpZHRoO1xuICAgICAgICBoZWlnaHQgLT0gcGFkZGluZ3MuaGVpZ2h0ICsgYm9yZGVycy5oZWlnaHQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHg6IE1hdGgucm91bmQoKHggLSB4T2Zmc2V0KSAvIHdpZHRoICogY2FudmFzLndpZHRoIC8gY3VycmVudERldmljZVBpeGVsUmF0aW8pLFxuICAgICAgICB5OiBNYXRoLnJvdW5kKCh5IC0geU9mZnNldCkgLyBoZWlnaHQgKiBjYW52YXMuaGVpZ2h0IC8gY3VycmVudERldmljZVBpeGVsUmF0aW8pXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5lclNpemUoY2FudmFzLCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgbGV0IG1heFdpZHRoLCBtYXhIZWlnaHQ7XG4gICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQgfHwgaGVpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gY2FudmFzICYmIF9nZXRQYXJlbnROb2RlKGNhbnZhcyk7XG4gICAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgICAgICB3aWR0aCA9IGNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IGNhbnZhcy5jbGllbnRIZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyAvLyB0aGlzIGlzIHRoZSBib3JkZXIgYm94IG9mIHRoZSBjb250YWluZXJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lclN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXIpO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyQm9yZGVyID0gZ2V0UG9zaXRpb25lZFN0eWxlKGNvbnRhaW5lclN0eWxlLCAnYm9yZGVyJywgJ3dpZHRoJyk7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJQYWRkaW5nID0gZ2V0UG9zaXRpb25lZFN0eWxlKGNvbnRhaW5lclN0eWxlLCAncGFkZGluZycpO1xuICAgICAgICAgICAgd2lkdGggPSByZWN0LndpZHRoIC0gY29udGFpbmVyUGFkZGluZy53aWR0aCAtIGNvbnRhaW5lckJvcmRlci53aWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IHJlY3QuaGVpZ2h0IC0gY29udGFpbmVyUGFkZGluZy5oZWlnaHQgLSBjb250YWluZXJCb3JkZXIuaGVpZ2h0O1xuICAgICAgICAgICAgbWF4V2lkdGggPSBwYXJzZU1heFN0eWxlKGNvbnRhaW5lclN0eWxlLm1heFdpZHRoLCBjb250YWluZXIsICdjbGllbnRXaWR0aCcpO1xuICAgICAgICAgICAgbWF4SGVpZ2h0ID0gcGFyc2VNYXhTdHlsZShjb250YWluZXJTdHlsZS5tYXhIZWlnaHQsIGNvbnRhaW5lciwgJ2NsaWVudEhlaWdodCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIG1heFdpZHRoOiBtYXhXaWR0aCB8fCBJTkZJTklUWSxcbiAgICAgICAgbWF4SGVpZ2h0OiBtYXhIZWlnaHQgfHwgSU5GSU5JVFlcbiAgICB9O1xufVxuY29uc3Qgcm91bmQxID0gKHYpPT5NYXRoLnJvdW5kKHYgKiAxMCkgLyAxMDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiBnZXRNYXhpbXVtU2l6ZShjYW52YXMsIGJiV2lkdGgsIGJiSGVpZ2h0LCBhc3BlY3RSYXRpbykge1xuICAgIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjYW52YXMpO1xuICAgIGNvbnN0IG1hcmdpbnMgPSBnZXRQb3NpdGlvbmVkU3R5bGUoc3R5bGUsICdtYXJnaW4nKTtcbiAgICBjb25zdCBtYXhXaWR0aCA9IHBhcnNlTWF4U3R5bGUoc3R5bGUubWF4V2lkdGgsIGNhbnZhcywgJ2NsaWVudFdpZHRoJykgfHwgSU5GSU5JVFk7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gcGFyc2VNYXhTdHlsZShzdHlsZS5tYXhIZWlnaHQsIGNhbnZhcywgJ2NsaWVudEhlaWdodCcpIHx8IElORklOSVRZO1xuICAgIGNvbnN0IGNvbnRhaW5lclNpemUgPSBnZXRDb250YWluZXJTaXplKGNhbnZhcywgYmJXaWR0aCwgYmJIZWlnaHQpO1xuICAgIGxldCB7IHdpZHRoICwgaGVpZ2h0ICB9ID0gY29udGFpbmVyU2l6ZTtcbiAgICBpZiAoc3R5bGUuYm94U2l6aW5nID09PSAnY29udGVudC1ib3gnKSB7XG4gICAgICAgIGNvbnN0IGJvcmRlcnMgPSBnZXRQb3NpdGlvbmVkU3R5bGUoc3R5bGUsICdib3JkZXInLCAnd2lkdGgnKTtcbiAgICAgICAgY29uc3QgcGFkZGluZ3MgPSBnZXRQb3NpdGlvbmVkU3R5bGUoc3R5bGUsICdwYWRkaW5nJyk7XG4gICAgICAgIHdpZHRoIC09IHBhZGRpbmdzLndpZHRoICsgYm9yZGVycy53aWR0aDtcbiAgICAgICAgaGVpZ2h0IC09IHBhZGRpbmdzLmhlaWdodCArIGJvcmRlcnMuaGVpZ2h0O1xuICAgIH1cbiAgICB3aWR0aCA9IE1hdGgubWF4KDAsIHdpZHRoIC0gbWFyZ2lucy53aWR0aCk7XG4gICAgaGVpZ2h0ID0gTWF0aC5tYXgoMCwgYXNwZWN0UmF0aW8gPyB3aWR0aCAvIGFzcGVjdFJhdGlvIDogaGVpZ2h0IC0gbWFyZ2lucy5oZWlnaHQpO1xuICAgIHdpZHRoID0gcm91bmQxKE1hdGgubWluKHdpZHRoLCBtYXhXaWR0aCwgY29udGFpbmVyU2l6ZS5tYXhXaWR0aCkpO1xuICAgIGhlaWdodCA9IHJvdW5kMShNYXRoLm1pbihoZWlnaHQsIG1heEhlaWdodCwgY29udGFpbmVyU2l6ZS5tYXhIZWlnaHQpKTtcbiAgICBpZiAod2lkdGggJiYgIWhlaWdodCkge1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvNDY1OVxuICAgICAgICAvLyBJZiB0aGUgY2FudmFzIGhhcyB3aWR0aCwgYnV0IG5vIGhlaWdodCwgZGVmYXVsdCB0byBhc3BlY3RSYXRpbyBvZiAyIChjYW52YXMgZGVmYXVsdClcbiAgICAgICAgaGVpZ2h0ID0gcm91bmQxKHdpZHRoIC8gMik7XG4gICAgfVxuICAgIGNvbnN0IG1haW50YWluSGVpZ2h0ID0gYmJXaWR0aCAhPT0gdW5kZWZpbmVkIHx8IGJiSGVpZ2h0ICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG1haW50YWluSGVpZ2h0ICYmIGFzcGVjdFJhdGlvICYmIGNvbnRhaW5lclNpemUuaGVpZ2h0ICYmIGhlaWdodCA+IGNvbnRhaW5lclNpemUuaGVpZ2h0KSB7XG4gICAgICAgIGhlaWdodCA9IGNvbnRhaW5lclNpemUuaGVpZ2h0O1xuICAgICAgICB3aWR0aCA9IHJvdW5kMShNYXRoLmZsb29yKGhlaWdodCAqIGFzcGVjdFJhdGlvKSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICB9O1xufVxuLyoqXG4gKiBAcGFyYW0gY2hhcnRcbiAqIEBwYXJhbSBmb3JjZVJhdGlvXG4gKiBAcGFyYW0gZm9yY2VTdHlsZVxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY2FudmFzIGNvbnRleHQgc2l6ZSBvciB0cmFuc2Zvcm1hdGlvbiBoYXMgY2hhbmdlZC5cbiAqLyBmdW5jdGlvbiByZXRpbmFTY2FsZShjaGFydCwgZm9yY2VSYXRpbywgZm9yY2VTdHlsZSkge1xuICAgIGNvbnN0IHBpeGVsUmF0aW8gPSBmb3JjZVJhdGlvIHx8IDE7XG4gICAgY29uc3QgZGV2aWNlSGVpZ2h0ID0gTWF0aC5mbG9vcihjaGFydC5oZWlnaHQgKiBwaXhlbFJhdGlvKTtcbiAgICBjb25zdCBkZXZpY2VXaWR0aCA9IE1hdGguZmxvb3IoY2hhcnQud2lkdGggKiBwaXhlbFJhdGlvKTtcbiAgICBjaGFydC5oZWlnaHQgPSBNYXRoLmZsb29yKGNoYXJ0LmhlaWdodCk7XG4gICAgY2hhcnQud2lkdGggPSBNYXRoLmZsb29yKGNoYXJ0LndpZHRoKTtcbiAgICBjb25zdCBjYW52YXMgPSBjaGFydC5jYW52YXM7XG4gICAgLy8gSWYgbm8gc3R5bGUgaGFzIGJlZW4gc2V0IG9uIHRoZSBjYW52YXMsIHRoZSByZW5kZXIgc2l6ZSBpcyB1c2VkIGFzIGRpc3BsYXkgc2l6ZSxcbiAgICAvLyBtYWtpbmcgdGhlIGNoYXJ0IHZpc3VhbGx5IGJpZ2dlciwgc28gbGV0J3MgZW5mb3JjZSBpdCB0byB0aGUgXCJjb3JyZWN0XCIgdmFsdWVzLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvMzU3NVxuICAgIGlmIChjYW52YXMuc3R5bGUgJiYgKGZvcmNlU3R5bGUgfHwgIWNhbnZhcy5zdHlsZS5oZWlnaHQgJiYgIWNhbnZhcy5zdHlsZS53aWR0aCkpIHtcbiAgICAgICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGAke2NoYXJ0LmhlaWdodH1weGA7XG4gICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IGAke2NoYXJ0LndpZHRofXB4YDtcbiAgICB9XG4gICAgaWYgKGNoYXJ0LmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvICE9PSBwaXhlbFJhdGlvIHx8IGNhbnZhcy5oZWlnaHQgIT09IGRldmljZUhlaWdodCB8fCBjYW52YXMud2lkdGggIT09IGRldmljZVdpZHRoKSB7XG4gICAgICAgIGNoYXJ0LmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvID0gcGl4ZWxSYXRpbztcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGRldmljZUhlaWdodDtcbiAgICAgICAgY2FudmFzLndpZHRoID0gZGV2aWNlV2lkdGg7XG4gICAgICAgIGNoYXJ0LmN0eC5zZXRUcmFuc2Zvcm0ocGl4ZWxSYXRpbywgMCwgMCwgcGl4ZWxSYXRpbywgMCwgMCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG4vKipcbiAqIERldGVjdHMgc3VwcG9ydCBmb3Igb3B0aW9ucyBvYmplY3QgYXJndW1lbnQgaW4gYWRkRXZlbnRMaXN0ZW5lci5cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudFRhcmdldC9hZGRFdmVudExpc3RlbmVyI1NhZmVseV9kZXRlY3Rpbmdfb3B0aW9uX3N1cHBvcnRcbiAqIEBwcml2YXRlXG4gKi8gY29uc3Qgc3VwcG9ydHNFdmVudExpc3RlbmVyT3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICAgIGxldCBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGdldCBwYXNzaXZlICgpIHtcbiAgICAgICAgICAgICAgICBwYXNzaXZlU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChfaXNEb21TdXBwb3J0ZWQoKSkge1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBudWxsLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0JywgbnVsbCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgLy8gY29udGludWUgcmVnYXJkbGVzcyBvZiBlcnJvclxuICAgIH1cbiAgICByZXR1cm4gcGFzc2l2ZVN1cHBvcnRlZDtcbn0oKTtcbi8qKlxuICogVGhlIFwidXNlZFwiIHNpemUgaXMgdGhlIGZpbmFsIHZhbHVlIG9mIGEgZGltZW5zaW9uIHByb3BlcnR5IGFmdGVyIGFsbCBjYWxjdWxhdGlvbnMgaGF2ZVxuICogYmVlbiBwZXJmb3JtZWQuIFRoaXMgbWV0aG9kIHVzZXMgdGhlIGNvbXB1dGVkIHN0eWxlIG9mIGBlbGVtZW50YCBidXQgcmV0dXJucyB1bmRlZmluZWRcbiAqIGlmIHRoZSBjb21wdXRlZCBzdHlsZSBpcyBub3QgZXhwcmVzc2VkIGluIHBpeGVscy4gVGhhdCBjYW4gaGFwcGVuIGluIHNvbWUgY2FzZXMgd2hlcmVcbiAqIGBlbGVtZW50YCBoYXMgYSBzaXplIHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgYW5kIHRoaXMgbGFzdCBvbmUgaXMgbm90IHlldCBkaXNwbGF5ZWQsXG4gKiBmb3IgZXhhbXBsZSBiZWNhdXNlIG9mIGBkaXNwbGF5OiBub25lYCBvbiBhIHBhcmVudCBub2RlLlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdXNlZF92YWx1ZVxuICogQHJldHVybnMgU2l6ZSBpbiBwaXhlbHMgb3IgdW5kZWZpbmVkIGlmIHVua25vd24uXG4gKi8gZnVuY3Rpb24gcmVhZFVzZWRTaXplKGVsZW1lbnQsIHByb3BlcnR5KSB7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRTdHlsZShlbGVtZW50LCBwcm9wZXJ0eSk7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHZhbHVlICYmIHZhbHVlLm1hdGNoKC9eKFxcZCspKFxcLlxcZCspP3B4JC8pO1xuICAgIHJldHVybiBtYXRjaGVzID8gK21hdGNoZXNbMV0gOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfcG9pbnRJbkxpbmUocDEsIHAyLCB0LCBtb2RlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogcDEueCArIHQgKiAocDIueCAtIHAxLngpLFxuICAgICAgICB5OiBwMS55ICsgdCAqIChwMi55IC0gcDEueSlcbiAgICB9O1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9zdGVwcGVkSW50ZXJwb2xhdGlvbihwMSwgcDIsIHQsIG1vZGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiBwMS54ICsgdCAqIChwMi54IC0gcDEueCksXG4gICAgICAgIHk6IG1vZGUgPT09ICdtaWRkbGUnID8gdCA8IDAuNSA/IHAxLnkgOiBwMi55IDogbW9kZSA9PT0gJ2FmdGVyJyA/IHQgPCAxID8gcDEueSA6IHAyLnkgOiB0ID4gMCA/IHAyLnkgOiBwMS55XG4gICAgfTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfYmV6aWVySW50ZXJwb2xhdGlvbihwMSwgcDIsIHQsIG1vZGUpIHtcbiAgICBjb25zdCBjcDEgPSB7XG4gICAgICAgIHg6IHAxLmNwMngsXG4gICAgICAgIHk6IHAxLmNwMnlcbiAgICB9O1xuICAgIGNvbnN0IGNwMiA9IHtcbiAgICAgICAgeDogcDIuY3AxeCxcbiAgICAgICAgeTogcDIuY3AxeVxuICAgIH07XG4gICAgY29uc3QgYSA9IF9wb2ludEluTGluZShwMSwgY3AxLCB0KTtcbiAgICBjb25zdCBiID0gX3BvaW50SW5MaW5lKGNwMSwgY3AyLCB0KTtcbiAgICBjb25zdCBjID0gX3BvaW50SW5MaW5lKGNwMiwgcDIsIHQpO1xuICAgIGNvbnN0IGQgPSBfcG9pbnRJbkxpbmUoYSwgYiwgdCk7XG4gICAgY29uc3QgZSA9IF9wb2ludEluTGluZShiLCBjLCB0KTtcbiAgICByZXR1cm4gX3BvaW50SW5MaW5lKGQsIGUsIHQpO1xufVxuXG5jb25zdCBnZXRSaWdodFRvTGVmdEFkYXB0ZXIgPSBmdW5jdGlvbihyZWN0WCwgd2lkdGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB4ICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVjdFggKyByZWN0WCArIHdpZHRoIC0geDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0V2lkdGggKHcpIHtcbiAgICAgICAgICAgIHdpZHRoID0gdztcbiAgICAgICAgfSxcbiAgICAgICAgdGV4dEFsaWduIChhbGlnbikge1xuICAgICAgICAgICAgaWYgKGFsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbGlnbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhbGlnbiA9PT0gJ3JpZ2h0JyA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gICAgICAgIH0sXG4gICAgICAgIHhQbHVzICh4LCB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHggLSB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgbGVmdEZvckx0ciAoeCwgaXRlbVdpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm4geCAtIGl0ZW1XaWR0aDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuY29uc3QgZ2V0TGVmdFRvUmlnaHRBZGFwdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldFdpZHRoICh3KSB7fSxcbiAgICAgICAgdGV4dEFsaWduIChhbGlnbikge1xuICAgICAgICAgICAgcmV0dXJuIGFsaWduO1xuICAgICAgICB9LFxuICAgICAgICB4UGx1cyAoeCwgdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB4ICsgdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGxlZnRGb3JMdHIgKHgsIF9pdGVtV2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG4gICAgfTtcbn07XG5mdW5jdGlvbiBnZXRSdGxBZGFwdGVyKHJ0bCwgcmVjdFgsIHdpZHRoKSB7XG4gICAgcmV0dXJuIHJ0bCA/IGdldFJpZ2h0VG9MZWZ0QWRhcHRlcihyZWN0WCwgd2lkdGgpIDogZ2V0TGVmdFRvUmlnaHRBZGFwdGVyKCk7XG59XG5mdW5jdGlvbiBvdmVycmlkZVRleHREaXJlY3Rpb24oY3R4LCBkaXJlY3Rpb24pIHtcbiAgICBsZXQgc3R5bGUsIG9yaWdpbmFsO1xuICAgIGlmIChkaXJlY3Rpb24gPT09ICdsdHInIHx8IGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgc3R5bGUgPSBjdHguY2FudmFzLnN0eWxlO1xuICAgICAgICBvcmlnaW5hbCA9IFtcbiAgICAgICAgICAgIHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2RpcmVjdGlvbicpLFxuICAgICAgICAgICAgc3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eSgnZGlyZWN0aW9uJylcbiAgICAgICAgXTtcbiAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkoJ2RpcmVjdGlvbicsIGRpcmVjdGlvbiwgJ2ltcG9ydGFudCcpO1xuICAgICAgICBjdHgucHJldlRleHREaXJlY3Rpb24gPSBvcmlnaW5hbDtcbiAgICB9XG59XG5mdW5jdGlvbiByZXN0b3JlVGV4dERpcmVjdGlvbihjdHgsIG9yaWdpbmFsKSB7XG4gICAgaWYgKG9yaWdpbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlIGN0eC5wcmV2VGV4dERpcmVjdGlvbjtcbiAgICAgICAgY3R4LmNhbnZhcy5zdHlsZS5zZXRQcm9wZXJ0eSgnZGlyZWN0aW9uJywgb3JpZ2luYWxbMF0sIG9yaWdpbmFsWzFdKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5Rm4ocHJvcGVydHkpIHtcbiAgICBpZiAocHJvcGVydHkgPT09ICdhbmdsZScpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJldHdlZW46IF9hbmdsZUJldHdlZW4sXG4gICAgICAgICAgICBjb21wYXJlOiBfYW5nbGVEaWZmLFxuICAgICAgICAgICAgbm9ybWFsaXplOiBfbm9ybWFsaXplQW5nbGVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmV0d2VlbjogX2lzQmV0d2VlbixcbiAgICAgICAgY29tcGFyZTogKGEsIGIpPT5hIC0gYixcbiAgICAgICAgbm9ybWFsaXplOiAoeCk9PnhcbiAgICB9O1xufVxuZnVuY3Rpb24gbm9ybWFsaXplU2VnbWVudCh7IHN0YXJ0ICwgZW5kICwgY291bnQgLCBsb29wICwgc3R5bGUgIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdGFydDogc3RhcnQgJSBjb3VudCxcbiAgICAgICAgZW5kOiBlbmQgJSBjb3VudCxcbiAgICAgICAgbG9vcDogbG9vcCAmJiAoZW5kIC0gc3RhcnQgKyAxKSAlIGNvdW50ID09PSAwLFxuICAgICAgICBzdHlsZVxuICAgIH07XG59XG5mdW5jdGlvbiBnZXRTZWdtZW50KHNlZ21lbnQsIHBvaW50cywgYm91bmRzKSB7XG4gICAgY29uc3QgeyBwcm9wZXJ0eSAsIHN0YXJ0OiBzdGFydEJvdW5kICwgZW5kOiBlbmRCb3VuZCAgfSA9IGJvdW5kcztcbiAgICBjb25zdCB7IGJldHdlZW4gLCBub3JtYWxpemUgIH0gPSBwcm9wZXJ0eUZuKHByb3BlcnR5KTtcbiAgICBjb25zdCBjb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gICAgbGV0IHsgc3RhcnQgLCBlbmQgLCBsb29wICB9ID0gc2VnbWVudDtcbiAgICBsZXQgaSwgaWxlbjtcbiAgICBpZiAobG9vcCkge1xuICAgICAgICBzdGFydCArPSBjb3VudDtcbiAgICAgICAgZW5kICs9IGNvdW50O1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSBjb3VudDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBpZiAoIWJldHdlZW4obm9ybWFsaXplKHBvaW50c1tzdGFydCAlIGNvdW50XVtwcm9wZXJ0eV0pLCBzdGFydEJvdW5kLCBlbmRCb3VuZCkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJ0LS07XG4gICAgICAgICAgICBlbmQtLTtcbiAgICAgICAgfVxuICAgICAgICBzdGFydCAlPSBjb3VudDtcbiAgICAgICAgZW5kICU9IGNvdW50O1xuICAgIH1cbiAgICBpZiAoZW5kIDwgc3RhcnQpIHtcbiAgICAgICAgZW5kICs9IGNvdW50O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBzdGFydCxcbiAgICAgICAgZW5kLFxuICAgICAgICBsb29wLFxuICAgICAgICBzdHlsZTogc2VnbWVudC5zdHlsZVxuICAgIH07XG59XG4gZnVuY3Rpb24gX2JvdW5kU2VnbWVudChzZWdtZW50LCBwb2ludHMsIGJvdW5kcykge1xuICAgIGlmICghYm91bmRzKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBzZWdtZW50XG4gICAgICAgIF07XG4gICAgfVxuICAgIGNvbnN0IHsgcHJvcGVydHkgLCBzdGFydDogc3RhcnRCb3VuZCAsIGVuZDogZW5kQm91bmQgIH0gPSBib3VuZHM7XG4gICAgY29uc3QgY291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIGNvbnN0IHsgY29tcGFyZSAsIGJldHdlZW4gLCBub3JtYWxpemUgIH0gPSBwcm9wZXJ0eUZuKHByb3BlcnR5KTtcbiAgICBjb25zdCB7IHN0YXJ0ICwgZW5kICwgbG9vcCAsIHN0eWxlICB9ID0gZ2V0U2VnbWVudChzZWdtZW50LCBwb2ludHMsIGJvdW5kcyk7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgbGV0IGluc2lkZSA9IGZhbHNlO1xuICAgIGxldCBzdWJTdGFydCA9IG51bGw7XG4gICAgbGV0IHZhbHVlLCBwb2ludCwgcHJldlZhbHVlO1xuICAgIGNvbnN0IHN0YXJ0SXNCZWZvcmUgPSAoKT0+YmV0d2VlbihzdGFydEJvdW5kLCBwcmV2VmFsdWUsIHZhbHVlKSAmJiBjb21wYXJlKHN0YXJ0Qm91bmQsIHByZXZWYWx1ZSkgIT09IDA7XG4gICAgY29uc3QgZW5kSXNCZWZvcmUgPSAoKT0+Y29tcGFyZShlbmRCb3VuZCwgdmFsdWUpID09PSAwIHx8IGJldHdlZW4oZW5kQm91bmQsIHByZXZWYWx1ZSwgdmFsdWUpO1xuICAgIGNvbnN0IHNob3VsZFN0YXJ0ID0gKCk9Pmluc2lkZSB8fCBzdGFydElzQmVmb3JlKCk7XG4gICAgY29uc3Qgc2hvdWxkU3RvcCA9ICgpPT4haW5zaWRlIHx8IGVuZElzQmVmb3JlKCk7XG4gICAgZm9yKGxldCBpID0gc3RhcnQsIHByZXYgPSBzdGFydDsgaSA8PSBlbmQ7ICsraSl7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2kgJSBjb3VudF07XG4gICAgICAgIGlmIChwb2ludC5za2lwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IG5vcm1hbGl6ZShwb2ludFtwcm9wZXJ0eV0pO1xuICAgICAgICBpZiAodmFsdWUgPT09IHByZXZWYWx1ZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaW5zaWRlID0gYmV0d2Vlbih2YWx1ZSwgc3RhcnRCb3VuZCwgZW5kQm91bmQpO1xuICAgICAgICBpZiAoc3ViU3RhcnQgPT09IG51bGwgJiYgc2hvdWxkU3RhcnQoKSkge1xuICAgICAgICAgICAgc3ViU3RhcnQgPSBjb21wYXJlKHZhbHVlLCBzdGFydEJvdW5kKSA9PT0gMCA/IGkgOiBwcmV2O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdWJTdGFydCAhPT0gbnVsbCAmJiBzaG91bGRTdG9wKCkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5vcm1hbGl6ZVNlZ21lbnQoe1xuICAgICAgICAgICAgICAgIHN0YXJ0OiBzdWJTdGFydCxcbiAgICAgICAgICAgICAgICBlbmQ6IGksXG4gICAgICAgICAgICAgICAgbG9vcCxcbiAgICAgICAgICAgICAgICBjb3VudCxcbiAgICAgICAgICAgICAgICBzdHlsZVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3ViU3RhcnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHByZXYgPSBpO1xuICAgICAgICBwcmV2VmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKHN1YlN0YXJ0ICE9PSBudWxsKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKG5vcm1hbGl6ZVNlZ21lbnQoe1xuICAgICAgICAgICAgc3RhcnQ6IHN1YlN0YXJ0LFxuICAgICAgICAgICAgZW5kLFxuICAgICAgICAgICAgbG9vcCxcbiAgICAgICAgICAgIGNvdW50LFxuICAgICAgICAgICAgc3R5bGVcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIGZ1bmN0aW9uIF9ib3VuZFNlZ21lbnRzKGxpbmUsIGJvdW5kcykge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGNvbnN0IHNlZ21lbnRzID0gbGluZS5zZWdtZW50cztcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspe1xuICAgICAgICBjb25zdCBzdWIgPSBfYm91bmRTZWdtZW50KHNlZ21lbnRzW2ldLCBsaW5lLnBvaW50cywgYm91bmRzKTtcbiAgICAgICAgaWYgKHN1Yi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnN1Yik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiBmdW5jdGlvbiBmaW5kU3RhcnRBbmRFbmQocG9pbnRzLCBjb3VudCwgbG9vcCwgc3BhbkdhcHMpIHtcbiAgICBsZXQgc3RhcnQgPSAwO1xuICAgIGxldCBlbmQgPSBjb3VudCAtIDE7XG4gICAgaWYgKGxvb3AgJiYgIXNwYW5HYXBzKSB7XG4gICAgICAgIHdoaWxlKHN0YXJ0IDwgY291bnQgJiYgIXBvaW50c1tzdGFydF0uc2tpcCl7XG4gICAgICAgICAgICBzdGFydCsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHdoaWxlKHN0YXJ0IDwgY291bnQgJiYgcG9pbnRzW3N0YXJ0XS5za2lwKXtcbiAgICAgICAgc3RhcnQrKztcbiAgICB9XG4gICAgc3RhcnQgJT0gY291bnQ7XG4gICAgaWYgKGxvb3ApIHtcbiAgICAgICAgZW5kICs9IHN0YXJ0O1xuICAgIH1cbiAgICB3aGlsZShlbmQgPiBzdGFydCAmJiBwb2ludHNbZW5kICUgY291bnRdLnNraXApe1xuICAgICAgICBlbmQtLTtcbiAgICB9XG4gICAgZW5kICU9IGNvdW50O1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBlbmRcbiAgICB9O1xufVxuIGZ1bmN0aW9uIHNvbGlkU2VnbWVudHMocG9pbnRzLCBzdGFydCwgbWF4LCBsb29wKSB7XG4gICAgY29uc3QgY291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGxldCBsYXN0ID0gc3RhcnQ7XG4gICAgbGV0IHByZXYgPSBwb2ludHNbc3RhcnRdO1xuICAgIGxldCBlbmQ7XG4gICAgZm9yKGVuZCA9IHN0YXJ0ICsgMTsgZW5kIDw9IG1heDsgKytlbmQpe1xuICAgICAgICBjb25zdCBjdXIgPSBwb2ludHNbZW5kICUgY291bnRdO1xuICAgICAgICBpZiAoY3VyLnNraXAgfHwgY3VyLnN0b3ApIHtcbiAgICAgICAgICAgIGlmICghcHJldi5za2lwKSB7XG4gICAgICAgICAgICAgICAgbG9vcCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0ICUgY291bnQsXG4gICAgICAgICAgICAgICAgICAgIGVuZDogKGVuZCAtIDEpICUgY291bnQsXG4gICAgICAgICAgICAgICAgICAgIGxvb3BcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGFydCA9IGxhc3QgPSBjdXIuc3RvcCA/IGVuZCA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYXN0ID0gZW5kO1xuICAgICAgICAgICAgaWYgKHByZXYuc2tpcCkge1xuICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByZXYgPSBjdXI7XG4gICAgfVxuICAgIGlmIChsYXN0ICE9PSBudWxsKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCAlIGNvdW50LFxuICAgICAgICAgICAgZW5kOiBsYXN0ICUgY291bnQsXG4gICAgICAgICAgICBsb29wXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIGZ1bmN0aW9uIF9jb21wdXRlU2VnbWVudHMobGluZSwgc2VnbWVudE9wdGlvbnMpIHtcbiAgICBjb25zdCBwb2ludHMgPSBsaW5lLnBvaW50cztcbiAgICBjb25zdCBzcGFuR2FwcyA9IGxpbmUub3B0aW9ucy5zcGFuR2FwcztcbiAgICBjb25zdCBjb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gICAgaWYgKCFjb3VudCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGxvb3AgPSAhIWxpbmUuX2xvb3A7XG4gICAgY29uc3QgeyBzdGFydCAsIGVuZCAgfSA9IGZpbmRTdGFydEFuZEVuZChwb2ludHMsIGNvdW50LCBsb29wLCBzcGFuR2Fwcyk7XG4gICAgaWYgKHNwYW5HYXBzID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBzcGxpdEJ5U3R5bGVzKGxpbmUsIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgICAgICBlbmQsXG4gICAgICAgICAgICAgICAgbG9vcFxuICAgICAgICAgICAgfVxuICAgICAgICBdLCBwb2ludHMsIHNlZ21lbnRPcHRpb25zKTtcbiAgICB9XG4gICAgY29uc3QgbWF4ID0gZW5kIDwgc3RhcnQgPyBlbmQgKyBjb3VudCA6IGVuZDtcbiAgICBjb25zdCBjb21wbGV0ZUxvb3AgPSAhIWxpbmUuX2Z1bGxMb29wICYmIHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gY291bnQgLSAxO1xuICAgIHJldHVybiBzcGxpdEJ5U3R5bGVzKGxpbmUsIHNvbGlkU2VnbWVudHMocG9pbnRzLCBzdGFydCwgbWF4LCBjb21wbGV0ZUxvb3ApLCBwb2ludHMsIHNlZ21lbnRPcHRpb25zKTtcbn1cbiBmdW5jdGlvbiBzcGxpdEJ5U3R5bGVzKGxpbmUsIHNlZ21lbnRzLCBwb2ludHMsIHNlZ21lbnRPcHRpb25zKSB7XG4gICAgaWYgKCFzZWdtZW50T3B0aW9ucyB8fCAhc2VnbWVudE9wdGlvbnMuc2V0Q29udGV4dCB8fCAhcG9pbnRzKSB7XG4gICAgICAgIHJldHVybiBzZWdtZW50cztcbiAgICB9XG4gICAgcmV0dXJuIGRvU3BsaXRCeVN0eWxlcyhsaW5lLCBzZWdtZW50cywgcG9pbnRzLCBzZWdtZW50T3B0aW9ucyk7XG59XG4gZnVuY3Rpb24gZG9TcGxpdEJ5U3R5bGVzKGxpbmUsIHNlZ21lbnRzLCBwb2ludHMsIHNlZ21lbnRPcHRpb25zKSB7XG4gICAgY29uc3QgY2hhcnRDb250ZXh0ID0gbGluZS5fY2hhcnQuZ2V0Q29udGV4dCgpO1xuICAgIGNvbnN0IGJhc2VTdHlsZSA9IHJlYWRTdHlsZShsaW5lLm9wdGlvbnMpO1xuICAgIGNvbnN0IHsgX2RhdGFzZXRJbmRleDogZGF0YXNldEluZGV4ICwgb3B0aW9uczogeyBzcGFuR2FwcyAgfSAgfSA9IGxpbmU7XG4gICAgY29uc3QgY291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGxldCBwcmV2U3R5bGUgPSBiYXNlU3R5bGU7XG4gICAgbGV0IHN0YXJ0ID0gc2VnbWVudHNbMF0uc3RhcnQ7XG4gICAgbGV0IGkgPSBzdGFydDtcbiAgICBmdW5jdGlvbiBhZGRTdHlsZShzLCBlLCBsLCBzdCkge1xuICAgICAgICBjb25zdCBkaXIgPSBzcGFuR2FwcyA/IC0xIDogMTtcbiAgICAgICAgaWYgKHMgPT09IGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzICs9IGNvdW50O1xuICAgICAgICB3aGlsZShwb2ludHNbcyAlIGNvdW50XS5za2lwKXtcbiAgICAgICAgICAgIHMgLT0gZGlyO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlKHBvaW50c1tlICUgY291bnRdLnNraXApe1xuICAgICAgICAgICAgZSArPSBkaXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMgJSBjb3VudCAhPT0gZSAlIGNvdW50KSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IHMgJSBjb3VudCxcbiAgICAgICAgICAgICAgICBlbmQ6IGUgJSBjb3VudCxcbiAgICAgICAgICAgICAgICBsb29wOiBsLFxuICAgICAgICAgICAgICAgIHN0eWxlOiBzdFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcmV2U3R5bGUgPSBzdDtcbiAgICAgICAgICAgIHN0YXJ0ID0gZSAlIGNvdW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cyl7XG4gICAgICAgIHN0YXJ0ID0gc3BhbkdhcHMgPyBzdGFydCA6IHNlZ21lbnQuc3RhcnQ7XG4gICAgICAgIGxldCBwcmV2ID0gcG9pbnRzW3N0YXJ0ICUgY291bnRdO1xuICAgICAgICBsZXQgc3R5bGU7XG4gICAgICAgIGZvcihpID0gc3RhcnQgKyAxOyBpIDw9IHNlZ21lbnQuZW5kOyBpKyspe1xuICAgICAgICAgICAgY29uc3QgcHQgPSBwb2ludHNbaSAlIGNvdW50XTtcbiAgICAgICAgICAgIHN0eWxlID0gcmVhZFN0eWxlKHNlZ21lbnRPcHRpb25zLnNldENvbnRleHQoY3JlYXRlQ29udGV4dChjaGFydENvbnRleHQsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc2VnbWVudCcsXG4gICAgICAgICAgICAgICAgcDA6IHByZXYsXG4gICAgICAgICAgICAgICAgcDE6IHB0LFxuICAgICAgICAgICAgICAgIHAwRGF0YUluZGV4OiAoaSAtIDEpICUgY291bnQsXG4gICAgICAgICAgICAgICAgcDFEYXRhSW5kZXg6IGkgJSBjb3VudCxcbiAgICAgICAgICAgICAgICBkYXRhc2V0SW5kZXhcbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgICAgICBpZiAoc3R5bGVDaGFuZ2VkKHN0eWxlLCBwcmV2U3R5bGUpKSB7XG4gICAgICAgICAgICAgICAgYWRkU3R5bGUoc3RhcnQsIGkgLSAxLCBzZWdtZW50Lmxvb3AsIHByZXZTdHlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2ID0gcHQ7XG4gICAgICAgICAgICBwcmV2U3R5bGUgPSBzdHlsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnQgPCBpIC0gMSkge1xuICAgICAgICAgICAgYWRkU3R5bGUoc3RhcnQsIGkgLSAxLCBzZWdtZW50Lmxvb3AsIHByZXZTdHlsZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHJlYWRTdHlsZShvcHRpb25zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBvcHRpb25zLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgYm9yZGVyQ2FwU3R5bGU6IG9wdGlvbnMuYm9yZGVyQ2FwU3R5bGUsXG4gICAgICAgIGJvcmRlckRhc2g6IG9wdGlvbnMuYm9yZGVyRGFzaCxcbiAgICAgICAgYm9yZGVyRGFzaE9mZnNldDogb3B0aW9ucy5ib3JkZXJEYXNoT2Zmc2V0LFxuICAgICAgICBib3JkZXJKb2luU3R5bGU6IG9wdGlvbnMuYm9yZGVySm9pblN0eWxlLFxuICAgICAgICBib3JkZXJXaWR0aDogb3B0aW9ucy5ib3JkZXJXaWR0aCxcbiAgICAgICAgYm9yZGVyQ29sb3I6IG9wdGlvbnMuYm9yZGVyQ29sb3JcbiAgICB9O1xufVxuZnVuY3Rpb24gc3R5bGVDaGFuZ2VkKHN0eWxlLCBwcmV2U3R5bGUpIHtcbiAgICBpZiAoIXByZXZTdHlsZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGNhY2hlID0gW107XG4gICAgY29uc3QgcmVwbGFjZXIgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmICghaXNQYXR0ZXJuT3JHcmFkaWVudCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNhY2hlLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhY2hlLmluZGV4T2YodmFsdWUpO1xuICAgIH07XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHN0eWxlLCByZXBsYWNlcikgIT09IEpTT04uc3RyaW5naWZ5KHByZXZTdHlsZSwgcmVwbGFjZXIpO1xufVxuXG5leHBvcnQgeyB1bmNsaXBBcmVhIGFzICQsIF9ybG9va3VwQnlLZXkgYXMgQSwgX2xvb2t1cEJ5S2V5IGFzIEIsIF9pc1BvaW50SW5BcmVhIGFzIEMsIGdldEFuZ2xlRnJvbVBvaW50IGFzIEQsIHRvUGFkZGluZyBhcyBFLCBlYWNoIGFzIEYsIGdldE1heGltdW1TaXplIGFzIEcsIEhBTEZfUEkgYXMgSCwgX2dldFBhcmVudE5vZGUgYXMgSSwgcmVhZFVzZWRTaXplIGFzIEosIHN1cHBvcnRzRXZlbnRMaXN0ZW5lck9wdGlvbnMgYXMgSywgdGhyb3R0bGVkIGFzIEwsIF9pc0RvbVN1cHBvcnRlZCBhcyBNLCBfZmFjdG9yaXplIGFzIE4sIGZpbml0ZU9yRGVmYXVsdCBhcyBPLCBQSSBhcyBQLCBjYWxsYmFjayBhcyBRLCBfYWRkR3JhY2UgYXMgUiwgX2xpbWl0VmFsdWUgYXMgUywgVEFVIGFzIFQsIHRvRGVncmVlcyBhcyBVLCBfbWVhc3VyZVRleHQgYXMgViwgX2ludDE2UmFuZ2UgYXMgVywgX2FsaWduUGl4ZWwgYXMgWCwgY2xpcEFyZWEgYXMgWSwgcmVuZGVyVGV4dCBhcyBaLCBfYXJyYXlVbmlxdWUgYXMgXywgcmVzb2x2ZSBhcyBhLCBmb250U3RyaW5nIGFzIGEkLCB0b0ZvbnQgYXMgYTAsIF90b0xlZnRSaWdodENlbnRlciBhcyBhMSwgX2FsaWduU3RhcnRFbmQgYXMgYTIsIG92ZXJyaWRlcyBhcyBhMywgbWVyZ2UgYXMgYTQsIF9jYXBpdGFsaXplIGFzIGE1LCBkZXNjcmlwdG9ycyBhcyBhNiwgaXNGdW5jdGlvbiBhcyBhNywgX2F0dGFjaENvbnRleHQgYXMgYTgsIF9jcmVhdGVSZXNvbHZlciBhcyBhOSwgb3ZlcnJpZGVUZXh0RGlyZWN0aW9uIGFzIGFBLCBfdGV4dFggYXMgYUIsIHJlc3RvcmVUZXh0RGlyZWN0aW9uIGFzIGFDLCBkcmF3UG9pbnRMZWdlbmQgYXMgYUQsIGRpc3RhbmNlQmV0d2VlblBvaW50cyBhcyBhRSwgbm9vcCBhcyBhRiwgX3NldE1pbkFuZE1heEJ5S2V5IGFzIGFHLCBuaWNlTnVtIGFzIGFILCBhbG1vc3RXaG9sZSBhcyBhSSwgYWxtb3N0RXF1YWxzIGFzIGFKLCBfZGVjaW1hbFBsYWNlcyBhcyBhSywgVGlja3MgYXMgYUwsIGxvZzEwIGFzIGFNLCBfbG9uZ2VzdFRleHQgYXMgYU4sIF9maWx0ZXJCZXR3ZWVuIGFzIGFPLCBfbG9va3VwIGFzIGFQLCBpc1BhdHRlcm5PckdyYWRpZW50IGFzIGFRLCBnZXRIb3ZlckNvbG9yIGFzIGFSLCBjbG9uZSBhcyBhUywgX21lcmdlciBhcyBhVCwgX21lcmdlcklmIGFzIGFVLCBfZGVwcmVjYXRlZCBhcyBhViwgX3NwbGl0S2V5IGFzIGFXLCB0b0ZvbnRTdHJpbmcgYXMgYVgsIHNwbGluZUN1cnZlIGFzIGFZLCBzcGxpbmVDdXJ2ZU1vbm90b25lIGFzIGFaLCBnZXRTdHlsZSBhcyBhXywgX2Rlc2NyaXB0b3JzIGFzIGFhLCBtZXJnZUlmIGFzIGFiLCB1aWQgYXMgYWMsIGRlYm91bmNlIGFzIGFkLCByZXRpbmFTY2FsZSBhcyBhZSwgY2xlYXJDYW52YXMgYXMgYWYsIHNldHNFcXVhbCBhcyBhZywgX2VsZW1lbnRzRXF1YWwgYXMgYWgsIF9pc0NsaWNrRXZlbnQgYXMgYWksIF9pc0JldHdlZW4gYXMgYWosIF9yZWFkVmFsdWVUb1Byb3BzIGFzIGFrLCBfdXBkYXRlQmV6aWVyQ29udHJvbFBvaW50cyBhcyBhbCwgX2NvbXB1dGVTZWdtZW50cyBhcyBhbSwgX2JvdW5kU2VnbWVudHMgYXMgYW4sIF9zdGVwcGVkSW50ZXJwb2xhdGlvbiBhcyBhbywgX2JlemllckludGVycG9sYXRpb24gYXMgYXAsIF9wb2ludEluTGluZSBhcyBhcSwgX3N0ZXBwZWRMaW5lVG8gYXMgYXIsIF9iZXppZXJDdXJ2ZVRvIGFzIGFzLCBkcmF3UG9pbnQgYXMgYXQsIGFkZFJvdW5kZWRSZWN0UGF0aCBhcyBhdSwgdG9UUkJMIGFzIGF2LCB0b1RSQkxDb3JuZXJzIGFzIGF3LCBfYm91bmRTZWdtZW50IGFzIGF4LCBfbm9ybWFsaXplQW5nbGUgYXMgYXksIGdldFJ0bEFkYXB0ZXIgYXMgYXosIGlzQXJyYXkgYXMgYiwgdG9MaW5lSGVpZ2h0IGFzIGIwLCBQSVRBVSBhcyBiMSwgSU5GSU5JVFkgYXMgYjIsIFJBRF9QRVJfREVHIGFzIGIzLCBRVUFSVEVSX1BJIGFzIGI0LCBUV09fVEhJUkRTX1BJIGFzIGI1LCBfYW5nbGVEaWZmIGFzIGI2LCBjb2xvciBhcyBjLCBkZWZhdWx0cyBhcyBkLCBlZmZlY3RzIGFzIGUsIHJlc29sdmVPYmplY3RLZXkgYXMgZiwgaXNOdW1iZXJGaW5pdGUgYXMgZywgZGVmaW5lZCBhcyBoLCBpc09iamVjdCBhcyBpLCBjcmVhdGVDb250ZXh0IGFzIGosIGlzTnVsbE9yVW5kZWYgYXMgaywgbGlzdGVuQXJyYXlFdmVudHMgYXMgbCwgdG9QZXJjZW50YWdlIGFzIG0sIHRvRGltZW5zaW9uIGFzIG4sIGZvcm1hdE51bWJlciBhcyBvLCBfYW5nbGVCZXR3ZWVuIGFzIHAsIF9nZXRTdGFydEFuZENvdW50T2ZWaXNpYmxlUG9pbnRzIGFzIHEsIHJlcXVlc3RBbmltRnJhbWUgYXMgciwgc2lnbiBhcyBzLCB0b1JhZGlhbnMgYXMgdCwgdW5saXN0ZW5BcnJheUV2ZW50cyBhcyB1LCB2YWx1ZU9yRGVmYXVsdCBhcyB2LCBfc2NhbGVSYW5nZXNDaGFuZ2VkIGFzIHcsIGlzTnVtYmVyIGFzIHgsIF9wYXJzZU9iamVjdERhdGFSYWRpYWxTY2FsZSBhcyB5LCBnZXRSZWxhdGl2ZVBvc2l0aW9uIGFzIHogfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhlbHBlcnMuc2VnbWVudC5qcy5tYXBcbiIsImltcG9ydCBEdXJhdGlvbiBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IEludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MuanNcIjtcbmltcG9ydCBJbmZvIGZyb20gXCIuL2luZm8uanNcIjtcbmltcG9ydCBGb3JtYXR0ZXIgZnJvbSBcIi4vaW1wbC9mb3JtYXR0ZXIuanNcIjtcbmltcG9ydCBGaXhlZE9mZnNldFpvbmUgZnJvbSBcIi4vem9uZXMvZml4ZWRPZmZzZXRab25lLmpzXCI7XG5pbXBvcnQgTG9jYWxlIGZyb20gXCIuL2ltcGwvbG9jYWxlLmpzXCI7XG5pbXBvcnQge1xuICBpc1VuZGVmaW5lZCxcbiAgbWF5YmVBcnJheSxcbiAgaXNEYXRlLFxuICBpc051bWJlcixcbiAgYmVzdEJ5LFxuICBkYXlzSW5Nb250aCxcbiAgZGF5c0luWWVhcixcbiAgaXNMZWFwWWVhcixcbiAgd2Vla3NJbldlZWtZZWFyLFxuICBub3JtYWxpemVPYmplY3QsXG4gIHJvdW5kVG8sXG4gIG9ialRvTG9jYWxUUyxcbiAgcGFkU3RhcnQsXG59IGZyb20gXCIuL2ltcGwvdXRpbC5qc1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplWm9uZSB9IGZyb20gXCIuL2ltcGwvem9uZVV0aWwuanNcIjtcbmltcG9ydCBkaWZmIGZyb20gXCIuL2ltcGwvZGlmZi5qc1wiO1xuaW1wb3J0IHsgcGFyc2VSRkMyODIyRGF0ZSwgcGFyc2VJU09EYXRlLCBwYXJzZUhUVFBEYXRlLCBwYXJzZVNRTCB9IGZyb20gXCIuL2ltcGwvcmVnZXhQYXJzZXIuanNcIjtcbmltcG9ydCB7XG4gIHBhcnNlRnJvbVRva2VucyxcbiAgZXhwbGFpbkZyb21Ub2tlbnMsXG4gIGZvcm1hdE9wdHNUb1Rva2VucyxcbiAgZXhwYW5kTWFjcm9Ub2tlbnMsXG4gIFRva2VuUGFyc2VyLFxufSBmcm9tIFwiLi9pbXBsL3Rva2VuUGFyc2VyLmpzXCI7XG5pbXBvcnQge1xuICBncmVnb3JpYW5Ub1dlZWssXG4gIHdlZWtUb0dyZWdvcmlhbixcbiAgZ3JlZ29yaWFuVG9PcmRpbmFsLFxuICBvcmRpbmFsVG9HcmVnb3JpYW4sXG4gIGhhc0ludmFsaWRHcmVnb3JpYW5EYXRhLFxuICBoYXNJbnZhbGlkV2Vla0RhdGEsXG4gIGhhc0ludmFsaWRPcmRpbmFsRGF0YSxcbiAgaGFzSW52YWxpZFRpbWVEYXRhLFxuICB1c2VzTG9jYWxXZWVrVmFsdWVzLFxuICBpc29XZWVrZGF5VG9Mb2NhbCxcbn0gZnJvbSBcIi4vaW1wbC9jb252ZXJzaW9ucy5qc1wiO1xuaW1wb3J0ICogYXMgRm9ybWF0cyBmcm9tIFwiLi9pbXBsL2Zvcm1hdHMuanNcIjtcbmltcG9ydCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcixcbiAgSW52YWxpZFVuaXRFcnJvcixcbiAgSW52YWxpZERhdGVUaW1lRXJyb3IsXG59IGZyb20gXCIuL2Vycm9ycy5qc1wiO1xuaW1wb3J0IEludmFsaWQgZnJvbSBcIi4vaW1wbC9pbnZhbGlkLmpzXCI7XG5cbmNvbnN0IElOVkFMSUQgPSBcIkludmFsaWQgRGF0ZVRpbWVcIjtcbmNvbnN0IE1BWF9EQVRFID0gOC42NGUxNTtcblxuZnVuY3Rpb24gdW5zdXBwb3J0ZWRab25lKHpvbmUpIHtcbiAgcmV0dXJuIG5ldyBJbnZhbGlkKFwidW5zdXBwb3J0ZWQgem9uZVwiLCBgdGhlIHpvbmUgXCIke3pvbmUubmFtZX1cIiBpcyBub3Qgc3VwcG9ydGVkYCk7XG59XG5cbi8vIHdlIGNhY2hlIHdlZWsgZGF0YSBvbiB0aGUgRFQgb2JqZWN0IGFuZCB0aGlzIGludGVybWVkaWF0ZXMgdGhlIGNhY2hlXG4vKipcbiAqIEBwYXJhbSB7RGF0ZVRpbWV9IGR0XG4gKi9cbmZ1bmN0aW9uIHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEoZHQpIHtcbiAgaWYgKGR0LndlZWtEYXRhID09PSBudWxsKSB7XG4gICAgZHQud2Vla0RhdGEgPSBncmVnb3JpYW5Ub1dlZWsoZHQuYyk7XG4gIH1cbiAgcmV0dXJuIGR0LndlZWtEYXRhO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RGF0ZVRpbWV9IGR0XG4gKi9cbmZ1bmN0aW9uIHBvc3NpYmx5Q2FjaGVkTG9jYWxXZWVrRGF0YShkdCkge1xuICBpZiAoZHQubG9jYWxXZWVrRGF0YSA9PT0gbnVsbCkge1xuICAgIGR0LmxvY2FsV2Vla0RhdGEgPSBncmVnb3JpYW5Ub1dlZWsoXG4gICAgICBkdC5jLFxuICAgICAgZHQubG9jLmdldE1pbkRheXNJbkZpcnN0V2VlaygpLFxuICAgICAgZHQubG9jLmdldFN0YXJ0T2ZXZWVrKClcbiAgICApO1xuICB9XG4gIHJldHVybiBkdC5sb2NhbFdlZWtEYXRhO1xufVxuXG4vLyBjbG9uZSByZWFsbHkgbWVhbnMsIFwibWFrZSBhIG5ldyBvYmplY3Qgd2l0aCB0aGVzZSBtb2RpZmljYXRpb25zXCIuIGFsbCBcInNldHRlcnNcIiByZWFsbHkgdXNlIHRoaXNcbi8vIHRvIGNyZWF0ZSBhIG5ldyBvYmplY3Qgd2hpbGUgb25seSBjaGFuZ2luZyBzb21lIG9mIHRoZSBwcm9wZXJ0aWVzXG5mdW5jdGlvbiBjbG9uZShpbnN0LCBhbHRzKSB7XG4gIGNvbnN0IGN1cnJlbnQgPSB7XG4gICAgdHM6IGluc3QudHMsXG4gICAgem9uZTogaW5zdC56b25lLFxuICAgIGM6IGluc3QuYyxcbiAgICBvOiBpbnN0Lm8sXG4gICAgbG9jOiBpbnN0LmxvYyxcbiAgICBpbnZhbGlkOiBpbnN0LmludmFsaWQsXG4gIH07XG4gIHJldHVybiBuZXcgRGF0ZVRpbWUoeyAuLi5jdXJyZW50LCAuLi5hbHRzLCBvbGQ6IGN1cnJlbnQgfSk7XG59XG5cbi8vIGZpbmQgdGhlIHJpZ2h0IG9mZnNldCBhIGdpdmVuIGxvY2FsIHRpbWUuIFRoZSBvIGlucHV0IGlzIG91ciBndWVzcywgd2hpY2ggZGV0ZXJtaW5lcyB3aGljaFxuLy8gb2Zmc2V0IHdlJ2xsIHBpY2sgaW4gYW1iaWd1b3VzIGNhc2VzIChlLmcuIHRoZXJlIGFyZSB0d28gMyBBTXMgYi9jIEZhbGxiYWNrIERTVClcbmZ1bmN0aW9uIGZpeE9mZnNldChsb2NhbFRTLCBvLCB0eikge1xuICAvLyBPdXIgVVRDIHRpbWUgaXMganVzdCBhIGd1ZXNzIGJlY2F1c2Ugb3VyIG9mZnNldCBpcyBqdXN0IGEgZ3Vlc3NcbiAgbGV0IHV0Y0d1ZXNzID0gbG9jYWxUUyAtIG8gKiA2MCAqIDEwMDA7XG5cbiAgLy8gVGVzdCB3aGV0aGVyIHRoZSB6b25lIG1hdGNoZXMgdGhlIG9mZnNldCBmb3IgdGhpcyB0c1xuICBjb25zdCBvMiA9IHR6Lm9mZnNldCh1dGNHdWVzcyk7XG5cbiAgLy8gSWYgc28sIG9mZnNldCBkaWRuJ3QgY2hhbmdlIGFuZCB3ZSdyZSBkb25lXG4gIGlmIChvID09PSBvMikge1xuICAgIHJldHVybiBbdXRjR3Vlc3MsIG9dO1xuICB9XG5cbiAgLy8gSWYgbm90LCBjaGFuZ2UgdGhlIHRzIGJ5IHRoZSBkaWZmZXJlbmNlIGluIHRoZSBvZmZzZXRcbiAgdXRjR3Vlc3MgLT0gKG8yIC0gbykgKiA2MCAqIDEwMDA7XG5cbiAgLy8gSWYgdGhhdCBnaXZlcyB1cyB0aGUgbG9jYWwgdGltZSB3ZSB3YW50LCB3ZSdyZSBkb25lXG4gIGNvbnN0IG8zID0gdHoub2Zmc2V0KHV0Y0d1ZXNzKTtcbiAgaWYgKG8yID09PSBvMykge1xuICAgIHJldHVybiBbdXRjR3Vlc3MsIG8yXTtcbiAgfVxuXG4gIC8vIElmIGl0J3MgZGlmZmVyZW50LCB3ZSdyZSBpbiBhIGhvbGUgdGltZS4gVGhlIG9mZnNldCBoYXMgY2hhbmdlZCwgYnV0IHRoZSB3ZSBkb24ndCBhZGp1c3QgdGhlIHRpbWVcbiAgcmV0dXJuIFtsb2NhbFRTIC0gTWF0aC5taW4obzIsIG8zKSAqIDYwICogMTAwMCwgTWF0aC5tYXgobzIsIG8zKV07XG59XG5cbi8vIGNvbnZlcnQgYW4gZXBvY2ggdGltZXN0YW1wIGludG8gYSBjYWxlbmRhciBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gb2Zmc2V0XG5mdW5jdGlvbiB0c1RvT2JqKHRzLCBvZmZzZXQpIHtcbiAgdHMgKz0gb2Zmc2V0ICogNjAgKiAxMDAwO1xuXG4gIGNvbnN0IGQgPSBuZXcgRGF0ZSh0cyk7XG5cbiAgcmV0dXJuIHtcbiAgICB5ZWFyOiBkLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgbW9udGg6IGQuZ2V0VVRDTW9udGgoKSArIDEsXG4gICAgZGF5OiBkLmdldFVUQ0RhdGUoKSxcbiAgICBob3VyOiBkLmdldFVUQ0hvdXJzKCksXG4gICAgbWludXRlOiBkLmdldFVUQ01pbnV0ZXMoKSxcbiAgICBzZWNvbmQ6IGQuZ2V0VVRDU2Vjb25kcygpLFxuICAgIG1pbGxpc2Vjb25kOiBkLmdldFVUQ01pbGxpc2Vjb25kcygpLFxuICB9O1xufVxuXG4vLyBjb252ZXJ0IGEgY2FsZW5kYXIgb2JqZWN0IHRvIGEgZXBvY2ggdGltZXN0YW1wXG5mdW5jdGlvbiBvYmpUb1RTKG9iaiwgb2Zmc2V0LCB6b25lKSB7XG4gIHJldHVybiBmaXhPZmZzZXQob2JqVG9Mb2NhbFRTKG9iaiksIG9mZnNldCwgem9uZSk7XG59XG5cbi8vIGNyZWF0ZSBhIG5ldyBEVCBpbnN0YW5jZSBieSBhZGRpbmcgYSBkdXJhdGlvbiwgYWRqdXN0aW5nIGZvciBEU1RzXG5mdW5jdGlvbiBhZGp1c3RUaW1lKGluc3QsIGR1cikge1xuICBjb25zdCBvUHJlID0gaW5zdC5vLFxuICAgIHllYXIgPSBpbnN0LmMueWVhciArIE1hdGgudHJ1bmMoZHVyLnllYXJzKSxcbiAgICBtb250aCA9IGluc3QuYy5tb250aCArIE1hdGgudHJ1bmMoZHVyLm1vbnRocykgKyBNYXRoLnRydW5jKGR1ci5xdWFydGVycykgKiAzLFxuICAgIGMgPSB7XG4gICAgICAuLi5pbnN0LmMsXG4gICAgICB5ZWFyLFxuICAgICAgbW9udGgsXG4gICAgICBkYXk6XG4gICAgICAgIE1hdGgubWluKGluc3QuYy5kYXksIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSkgK1xuICAgICAgICBNYXRoLnRydW5jKGR1ci5kYXlzKSArXG4gICAgICAgIE1hdGgudHJ1bmMoZHVyLndlZWtzKSAqIDcsXG4gICAgfSxcbiAgICBtaWxsaXNUb0FkZCA9IER1cmF0aW9uLmZyb21PYmplY3Qoe1xuICAgICAgeWVhcnM6IGR1ci55ZWFycyAtIE1hdGgudHJ1bmMoZHVyLnllYXJzKSxcbiAgICAgIHF1YXJ0ZXJzOiBkdXIucXVhcnRlcnMgLSBNYXRoLnRydW5jKGR1ci5xdWFydGVycyksXG4gICAgICBtb250aHM6IGR1ci5tb250aHMgLSBNYXRoLnRydW5jKGR1ci5tb250aHMpLFxuICAgICAgd2Vla3M6IGR1ci53ZWVrcyAtIE1hdGgudHJ1bmMoZHVyLndlZWtzKSxcbiAgICAgIGRheXM6IGR1ci5kYXlzIC0gTWF0aC50cnVuYyhkdXIuZGF5cyksXG4gICAgICBob3VyczogZHVyLmhvdXJzLFxuICAgICAgbWludXRlczogZHVyLm1pbnV0ZXMsXG4gICAgICBzZWNvbmRzOiBkdXIuc2Vjb25kcyxcbiAgICAgIG1pbGxpc2Vjb25kczogZHVyLm1pbGxpc2Vjb25kcyxcbiAgICB9KS5hcyhcIm1pbGxpc2Vjb25kc1wiKSxcbiAgICBsb2NhbFRTID0gb2JqVG9Mb2NhbFRTKGMpO1xuXG4gIGxldCBbdHMsIG9dID0gZml4T2Zmc2V0KGxvY2FsVFMsIG9QcmUsIGluc3Quem9uZSk7XG5cbiAgaWYgKG1pbGxpc1RvQWRkICE9PSAwKSB7XG4gICAgdHMgKz0gbWlsbGlzVG9BZGQ7XG4gICAgLy8gdGhhdCBjb3VsZCBoYXZlIGNoYW5nZWQgdGhlIG9mZnNldCBieSBnb2luZyBvdmVyIGEgRFNULCBidXQgd2Ugd2FudCB0byBrZWVwIHRoZSB0cyB0aGUgc2FtZVxuICAgIG8gPSBpbnN0LnpvbmUub2Zmc2V0KHRzKTtcbiAgfVxuXG4gIHJldHVybiB7IHRzLCBvIH07XG59XG5cbi8vIGhlbHBlciB1c2VmdWwgaW4gdHVybmluZyB0aGUgcmVzdWx0cyBvZiBwYXJzaW5nIGludG8gcmVhbCBkYXRlc1xuLy8gYnkgaGFuZGxpbmcgdGhlIHpvbmUgb3B0aW9uc1xuZnVuY3Rpb24gcGFyc2VEYXRhVG9EYXRlVGltZShwYXJzZWQsIHBhcnNlZFpvbmUsIG9wdHMsIGZvcm1hdCwgdGV4dCwgc3BlY2lmaWNPZmZzZXQpIHtcbiAgY29uc3QgeyBzZXRab25lLCB6b25lIH0gPSBvcHRzO1xuICBpZiAoKHBhcnNlZCAmJiBPYmplY3Qua2V5cyhwYXJzZWQpLmxlbmd0aCAhPT0gMCkgfHwgcGFyc2VkWm9uZSkge1xuICAgIGNvbnN0IGludGVycHJldGF0aW9uWm9uZSA9IHBhcnNlZFpvbmUgfHwgem9uZSxcbiAgICAgIGluc3QgPSBEYXRlVGltZS5mcm9tT2JqZWN0KHBhcnNlZCwge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICB6b25lOiBpbnRlcnByZXRhdGlvblpvbmUsXG4gICAgICAgIHNwZWNpZmljT2Zmc2V0LFxuICAgICAgfSk7XG4gICAgcmV0dXJuIHNldFpvbmUgPyBpbnN0IDogaW5zdC5zZXRab25lKHpvbmUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKFxuICAgICAgbmV3IEludmFsaWQoXCJ1bnBhcnNhYmxlXCIsIGB0aGUgaW5wdXQgXCIke3RleHR9XCIgY2FuJ3QgYmUgcGFyc2VkIGFzICR7Zm9ybWF0fWApXG4gICAgKTtcbiAgfVxufVxuXG4vLyBpZiB5b3Ugd2FudCB0byBvdXRwdXQgYSB0ZWNobmljYWwgZm9ybWF0IChlLmcuIFJGQyAyODIyKSwgdGhpcyBoZWxwZXJcbi8vIGhlbHBzIGhhbmRsZSB0aGUgZGV0YWlsc1xuZnVuY3Rpb24gdG9UZWNoRm9ybWF0KGR0LCBmb3JtYXQsIGFsbG93WiA9IHRydWUpIHtcbiAgcmV0dXJuIGR0LmlzVmFsaWRcbiAgICA/IEZvcm1hdHRlci5jcmVhdGUoTG9jYWxlLmNyZWF0ZShcImVuLVVTXCIpLCB7XG4gICAgICAgIGFsbG93WixcbiAgICAgICAgZm9yY2VTaW1wbGU6IHRydWUsXG4gICAgICB9KS5mb3JtYXREYXRlVGltZUZyb21TdHJpbmcoZHQsIGZvcm1hdClcbiAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHRvSVNPRGF0ZShvLCBleHRlbmRlZCkge1xuICBjb25zdCBsb25nRm9ybWF0ID0gby5jLnllYXIgPiA5OTk5IHx8IG8uYy55ZWFyIDwgMDtcbiAgbGV0IGMgPSBcIlwiO1xuICBpZiAobG9uZ0Zvcm1hdCAmJiBvLmMueWVhciA+PSAwKSBjICs9IFwiK1wiO1xuICBjICs9IHBhZFN0YXJ0KG8uYy55ZWFyLCBsb25nRm9ybWF0ID8gNiA6IDQpO1xuXG4gIGlmIChleHRlbmRlZCkge1xuICAgIGMgKz0gXCItXCI7XG4gICAgYyArPSBwYWRTdGFydChvLmMubW9udGgpO1xuICAgIGMgKz0gXCItXCI7XG4gICAgYyArPSBwYWRTdGFydChvLmMuZGF5KTtcbiAgfSBlbHNlIHtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5tb250aCk7XG4gICAgYyArPSBwYWRTdGFydChvLmMuZGF5KTtcbiAgfVxuICByZXR1cm4gYztcbn1cblxuZnVuY3Rpb24gdG9JU09UaW1lKFxuICBvLFxuICBleHRlbmRlZCxcbiAgc3VwcHJlc3NTZWNvbmRzLFxuICBzdXBwcmVzc01pbGxpc2Vjb25kcyxcbiAgaW5jbHVkZU9mZnNldCxcbiAgZXh0ZW5kZWRab25lXG4pIHtcbiAgbGV0IGMgPSBwYWRTdGFydChvLmMuaG91cik7XG4gIGlmIChleHRlbmRlZCkge1xuICAgIGMgKz0gXCI6XCI7XG4gICAgYyArPSBwYWRTdGFydChvLmMubWludXRlKTtcbiAgICBpZiAoby5jLm1pbGxpc2Vjb25kICE9PSAwIHx8IG8uYy5zZWNvbmQgIT09IDAgfHwgIXN1cHByZXNzU2Vjb25kcykge1xuICAgICAgYyArPSBcIjpcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYyArPSBwYWRTdGFydChvLmMubWludXRlKTtcbiAgfVxuXG4gIGlmIChvLmMubWlsbGlzZWNvbmQgIT09IDAgfHwgby5jLnNlY29uZCAhPT0gMCB8fCAhc3VwcHJlc3NTZWNvbmRzKSB7XG4gICAgYyArPSBwYWRTdGFydChvLmMuc2Vjb25kKTtcblxuICAgIGlmIChvLmMubWlsbGlzZWNvbmQgIT09IDAgfHwgIXN1cHByZXNzTWlsbGlzZWNvbmRzKSB7XG4gICAgICBjICs9IFwiLlwiO1xuICAgICAgYyArPSBwYWRTdGFydChvLmMubWlsbGlzZWNvbmQsIDMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbmNsdWRlT2Zmc2V0KSB7XG4gICAgaWYgKG8uaXNPZmZzZXRGaXhlZCAmJiBvLm9mZnNldCA9PT0gMCAmJiAhZXh0ZW5kZWRab25lKSB7XG4gICAgICBjICs9IFwiWlwiO1xuICAgIH0gZWxzZSBpZiAoby5vIDwgMCkge1xuICAgICAgYyArPSBcIi1cIjtcbiAgICAgIGMgKz0gcGFkU3RhcnQoTWF0aC50cnVuYygtby5vIC8gNjApKTtcbiAgICAgIGMgKz0gXCI6XCI7XG4gICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoLW8ubyAlIDYwKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGMgKz0gXCIrXCI7XG4gICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoby5vIC8gNjApKTtcbiAgICAgIGMgKz0gXCI6XCI7XG4gICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoby5vICUgNjApKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXh0ZW5kZWRab25lKSB7XG4gICAgYyArPSBcIltcIiArIG8uem9uZS5pYW5hTmFtZSArIFwiXVwiO1xuICB9XG4gIHJldHVybiBjO1xufVxuXG4vLyBkZWZhdWx0cyBmb3IgdW5zcGVjaWZpZWQgdW5pdHMgaW4gdGhlIHN1cHBvcnRlZCBjYWxlbmRhcnNcbmNvbnN0IGRlZmF1bHRVbml0VmFsdWVzID0ge1xuICAgIG1vbnRoOiAxLFxuICAgIGRheTogMSxcbiAgICBob3VyOiAwLFxuICAgIG1pbnV0ZTogMCxcbiAgICBzZWNvbmQ6IDAsXG4gICAgbWlsbGlzZWNvbmQ6IDAsXG4gIH0sXG4gIGRlZmF1bHRXZWVrVW5pdFZhbHVlcyA9IHtcbiAgICB3ZWVrTnVtYmVyOiAxLFxuICAgIHdlZWtkYXk6IDEsXG4gICAgaG91cjogMCxcbiAgICBtaW51dGU6IDAsXG4gICAgc2Vjb25kOiAwLFxuICAgIG1pbGxpc2Vjb25kOiAwLFxuICB9LFxuICBkZWZhdWx0T3JkaW5hbFVuaXRWYWx1ZXMgPSB7XG4gICAgb3JkaW5hbDogMSxcbiAgICBob3VyOiAwLFxuICAgIG1pbnV0ZTogMCxcbiAgICBzZWNvbmQ6IDAsXG4gICAgbWlsbGlzZWNvbmQ6IDAsXG4gIH07XG5cbi8vIFVuaXRzIGluIHRoZSBzdXBwb3J0ZWQgY2FsZW5kYXJzLCBzb3J0ZWQgYnkgYmlnbmVzc1xuY29uc3Qgb3JkZXJlZFVuaXRzID0gW1wieWVhclwiLCBcIm1vbnRoXCIsIFwiZGF5XCIsIFwiaG91clwiLCBcIm1pbnV0ZVwiLCBcInNlY29uZFwiLCBcIm1pbGxpc2Vjb25kXCJdLFxuICBvcmRlcmVkV2Vla1VuaXRzID0gW1xuICAgIFwid2Vla1llYXJcIixcbiAgICBcIndlZWtOdW1iZXJcIixcbiAgICBcIndlZWtkYXlcIixcbiAgICBcImhvdXJcIixcbiAgICBcIm1pbnV0ZVwiLFxuICAgIFwic2Vjb25kXCIsXG4gICAgXCJtaWxsaXNlY29uZFwiLFxuICBdLFxuICBvcmRlcmVkT3JkaW5hbFVuaXRzID0gW1wieWVhclwiLCBcIm9yZGluYWxcIiwgXCJob3VyXCIsIFwibWludXRlXCIsIFwic2Vjb25kXCIsIFwibWlsbGlzZWNvbmRcIl07XG5cbi8vIHN0YW5kYXJkaXplIGNhc2UgYW5kIHBsdXJhbGl0eSBpbiB1bml0c1xuZnVuY3Rpb24gbm9ybWFsaXplVW5pdCh1bml0KSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7XG4gICAgeWVhcjogXCJ5ZWFyXCIsXG4gICAgeWVhcnM6IFwieWVhclwiLFxuICAgIG1vbnRoOiBcIm1vbnRoXCIsXG4gICAgbW9udGhzOiBcIm1vbnRoXCIsXG4gICAgZGF5OiBcImRheVwiLFxuICAgIGRheXM6IFwiZGF5XCIsXG4gICAgaG91cjogXCJob3VyXCIsXG4gICAgaG91cnM6IFwiaG91clwiLFxuICAgIG1pbnV0ZTogXCJtaW51dGVcIixcbiAgICBtaW51dGVzOiBcIm1pbnV0ZVwiLFxuICAgIHF1YXJ0ZXI6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0ZXJzOiBcInF1YXJ0ZXJcIixcbiAgICBzZWNvbmQ6IFwic2Vjb25kXCIsXG4gICAgc2Vjb25kczogXCJzZWNvbmRcIixcbiAgICBtaWxsaXNlY29uZDogXCJtaWxsaXNlY29uZFwiLFxuICAgIG1pbGxpc2Vjb25kczogXCJtaWxsaXNlY29uZFwiLFxuICAgIHdlZWtkYXk6IFwid2Vla2RheVwiLFxuICAgIHdlZWtkYXlzOiBcIndlZWtkYXlcIixcbiAgICB3ZWVrbnVtYmVyOiBcIndlZWtOdW1iZXJcIixcbiAgICB3ZWVrc251bWJlcjogXCJ3ZWVrTnVtYmVyXCIsXG4gICAgd2Vla251bWJlcnM6IFwid2Vla051bWJlclwiLFxuICAgIHdlZWt5ZWFyOiBcIndlZWtZZWFyXCIsXG4gICAgd2Vla3llYXJzOiBcIndlZWtZZWFyXCIsXG4gICAgb3JkaW5hbDogXCJvcmRpbmFsXCIsXG4gIH1bdW5pdC50b0xvd2VyQ2FzZSgpXTtcblxuICBpZiAoIW5vcm1hbGl6ZWQpIHRocm93IG5ldyBJbnZhbGlkVW5pdEVycm9yKHVuaXQpO1xuXG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVVbml0V2l0aExvY2FsV2Vla3ModW5pdCkge1xuICBzd2l0Y2ggKHVuaXQudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgXCJsb2NhbHdlZWtkYXlcIjpcbiAgICBjYXNlIFwibG9jYWx3ZWVrZGF5c1wiOlxuICAgICAgcmV0dXJuIFwibG9jYWxXZWVrZGF5XCI7XG4gICAgY2FzZSBcImxvY2Fsd2Vla251bWJlclwiOlxuICAgIGNhc2UgXCJsb2NhbHdlZWtudW1iZXJzXCI6XG4gICAgICByZXR1cm4gXCJsb2NhbFdlZWtOdW1iZXJcIjtcbiAgICBjYXNlIFwibG9jYWx3ZWVreWVhclwiOlxuICAgIGNhc2UgXCJsb2NhbHdlZWt5ZWFyc1wiOlxuICAgICAgcmV0dXJuIFwibG9jYWxXZWVrWWVhclwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbm9ybWFsaXplVW5pdCh1bml0KTtcbiAgfVxufVxuXG4vLyBjYWNoZSBvZmZzZXRzIGZvciB6b25lcyBiYXNlZCBvbiB0aGUgY3VycmVudCB0aW1lc3RhbXAgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzXG4vLyBmaXJzdCBjYWxsZWQuIFdoZW4gd2UgYXJlIGhhbmRsaW5nIGEgZGF0ZXRpbWUgZnJvbSBjb21wb25lbnRzIGxpa2UgKHllYXIsXG4vLyBtb250aCwgZGF5LCBob3VyKSBpbiBhIHRpbWUgem9uZSwgd2UgbmVlZCBhIGd1ZXNzIGFib3V0IHdoYXQgdGhlIHRpbWV6b25lXG4vLyBvZmZzZXQgaXMgc28gdGhhdCB3ZSBjYW4gY29udmVydCBpbnRvIGEgVVRDIHRpbWVzdGFtcC4gT25lIHdheSBpcyB0byBmaW5kIHRoZVxuLy8gb2Zmc2V0IG9mIG5vdyBpbiB0aGUgem9uZS4gVGhlIGFjdHVhbCBkYXRlIG1heSBoYXZlIGEgZGlmZmVyZW50IG9mZnNldCAoZm9yXG4vLyBleGFtcGxlLCBpZiB3ZSBoYW5kbGUgYSBkYXRlIGluIEp1bmUgd2hpbGUgd2UncmUgaW4gRGVjZW1iZXIgaW4gYSB6b25lIHRoYXRcbi8vIG9ic2VydmVzIERTVCksIGJ1dCB3ZSBjYW4gY2hlY2sgYW5kIGFkanVzdCB0aGF0LlxuLy9cbi8vIFdoZW4gaGFuZGxpbmcgbWFueSBkYXRlcywgY2FsY3VsYXRpbmcgdGhlIG9mZnNldCBmb3Igbm93IGV2ZXJ5IHRpbWUgaXNcbi8vIGV4cGVuc2l2ZS4gSXQncyBqdXN0IGEgZ3Vlc3MsIHNvIHdlIGNhbiBjYWNoZSB0aGUgb2Zmc2V0IHRvIHVzZSBldmVuIGlmIHdlXG4vLyBhcmUgcmlnaHQgb24gYSB0aW1lIGNoYW5nZSBib3VuZGFyeSAod2UnbGwganVzdCBjb3JyZWN0IGluIHRoZSBvdGhlclxuLy8gZGlyZWN0aW9uKS4gVXNpbmcgYSB0aW1lc3RhbXAgZnJvbSBmaXJzdCByZWFkIGlzIGEgc2xpZ2h0IG9wdGltaXphdGlvbiBmb3Jcbi8vIGhhbmRsaW5nIGRhdGVzIGNsb3NlIHRvIHRoZSBjdXJyZW50IGRhdGUsIHNpbmNlIHRob3NlIGRhdGVzIHdpbGwgdXN1YWxseSBiZVxuLy8gaW4gdGhlIHNhbWUgb2Zmc2V0ICh3ZSBjb3VsZCBzZXQgdGhlIHRpbWVzdGFtcCBzdGF0aWNhbGx5LCBpbnN0ZWFkKS4gV2UgdXNlIGFcbi8vIHNpbmdsZSB0aW1lc3RhbXAgZm9yIGFsbCB6b25lcyB0byBtYWtlIHRoaW5ncyBhIGJpdCBtb3JlIHByZWRpY3RhYmxlLlxuLy9cbi8vIFRoaXMgaXMgc2FmZSBmb3IgcXVpY2tEVCAodXNlZCBieSBsb2NhbCgpIGFuZCB1dGMoKSkgYmVjYXVzZSB3ZSBkb24ndCBmaWxsIGluXG4vLyBoaWdoZXItb3JkZXIgdW5pdHMgZnJvbSB0c05vdyAoYXMgd2UgZG8gaW4gZnJvbU9iamVjdCwgdGhpcyByZXF1aXJlcyB0aGF0XG4vLyBvZmZzZXQgaXMgY2FsY3VsYXRlZCBmcm9tIHRzTm93KS5cbmZ1bmN0aW9uIGd1ZXNzT2Zmc2V0Rm9yWm9uZSh6b25lKSB7XG4gIGlmICghem9uZU9mZnNldEd1ZXNzQ2FjaGVbem9uZV0pIHtcbiAgICBpZiAoem9uZU9mZnNldFRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHpvbmVPZmZzZXRUcyA9IFNldHRpbmdzLm5vdygpO1xuICAgIH1cblxuICAgIHpvbmVPZmZzZXRHdWVzc0NhY2hlW3pvbmVdID0gem9uZS5vZmZzZXQoem9uZU9mZnNldFRzKTtcbiAgfVxuICByZXR1cm4gem9uZU9mZnNldEd1ZXNzQ2FjaGVbem9uZV07XG59XG5cbi8vIHRoaXMgaXMgYSBkdW1iZWQgZG93biB2ZXJzaW9uIG9mIGZyb21PYmplY3QoKSB0aGF0IHJ1bnMgYWJvdXQgNjAlIGZhc3RlclxuLy8gYnV0IGRvZXNuJ3QgZG8gYW55IHZhbGlkYXRpb24sIG1ha2VzIGEgYnVuY2ggb2YgYXNzdW1wdGlvbnMgYWJvdXQgd2hhdCB1bml0c1xuLy8gYXJlIHByZXNlbnQsIGFuZCBzbyBvbi5cbmZ1bmN0aW9uIHF1aWNrRFQob2JqLCBvcHRzKSB7XG4gIGNvbnN0IHpvbmUgPSBub3JtYWxpemVab25lKG9wdHMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpO1xuICBpZiAoIXpvbmUuaXNWYWxpZCkge1xuICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKHVuc3VwcG9ydGVkWm9uZSh6b25lKSk7XG4gIH1cblxuICBjb25zdCBsb2MgPSBMb2NhbGUuZnJvbU9iamVjdChvcHRzKTtcblxuICBsZXQgdHMsIG87XG5cbiAgLy8gYXNzdW1lIHdlIGhhdmUgdGhlIGhpZ2hlci1vcmRlciB1bml0c1xuICBpZiAoIWlzVW5kZWZpbmVkKG9iai55ZWFyKSkge1xuICAgIGZvciAoY29uc3QgdSBvZiBvcmRlcmVkVW5pdHMpIHtcbiAgICAgIGlmIChpc1VuZGVmaW5lZChvYmpbdV0pKSB7XG4gICAgICAgIG9ialt1XSA9IGRlZmF1bHRVbml0VmFsdWVzW3VdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWQgPSBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YShvYmopIHx8IGhhc0ludmFsaWRUaW1lRGF0YShvYmopO1xuICAgIGlmIChpbnZhbGlkKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChpbnZhbGlkKTtcbiAgICB9XG5cbiAgICBjb25zdCBvZmZzZXRQcm92aXMgPSBndWVzc09mZnNldEZvclpvbmUoem9uZSk7XG4gICAgW3RzLCBvXSA9IG9ialRvVFMob2JqLCBvZmZzZXRQcm92aXMsIHpvbmUpO1xuICB9IGVsc2Uge1xuICAgIHRzID0gU2V0dGluZ3Mubm93KCk7XG4gIH1cblxuICByZXR1cm4gbmV3IERhdGVUaW1lKHsgdHMsIHpvbmUsIGxvYywgbyB9KTtcbn1cblxuZnVuY3Rpb24gZGlmZlJlbGF0aXZlKHN0YXJ0LCBlbmQsIG9wdHMpIHtcbiAgY29uc3Qgcm91bmQgPSBpc1VuZGVmaW5lZChvcHRzLnJvdW5kKSA/IHRydWUgOiBvcHRzLnJvdW5kLFxuICAgIGZvcm1hdCA9IChjLCB1bml0KSA9PiB7XG4gICAgICBjID0gcm91bmRUbyhjLCByb3VuZCB8fCBvcHRzLmNhbGVuZGFyeSA/IDAgOiAyLCB0cnVlKTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGVuZC5sb2MuY2xvbmUob3B0cykucmVsRm9ybWF0dGVyKG9wdHMpO1xuICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQoYywgdW5pdCk7XG4gICAgfSxcbiAgICBkaWZmZXIgPSAodW5pdCkgPT4ge1xuICAgICAgaWYgKG9wdHMuY2FsZW5kYXJ5KSB7XG4gICAgICAgIGlmICghZW5kLmhhc1NhbWUoc3RhcnQsIHVuaXQpKSB7XG4gICAgICAgICAgcmV0dXJuIGVuZC5zdGFydE9mKHVuaXQpLmRpZmYoc3RhcnQuc3RhcnRPZih1bml0KSwgdW5pdCkuZ2V0KHVuaXQpO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZW5kLmRpZmYoc3RhcnQsIHVuaXQpLmdldCh1bml0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gIGlmIChvcHRzLnVuaXQpIHtcbiAgICByZXR1cm4gZm9ybWF0KGRpZmZlcihvcHRzLnVuaXQpLCBvcHRzLnVuaXQpO1xuICB9XG5cbiAgZm9yIChjb25zdCB1bml0IG9mIG9wdHMudW5pdHMpIHtcbiAgICBjb25zdCBjb3VudCA9IGRpZmZlcih1bml0KTtcbiAgICBpZiAoTWF0aC5hYnMoY291bnQpID49IDEpIHtcbiAgICAgIHJldHVybiBmb3JtYXQoY291bnQsIHVuaXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0KHN0YXJ0ID4gZW5kID8gLTAgOiAwLCBvcHRzLnVuaXRzW29wdHMudW5pdHMubGVuZ3RoIC0gMV0pO1xufVxuXG5mdW5jdGlvbiBsYXN0T3B0cyhhcmdMaXN0KSB7XG4gIGxldCBvcHRzID0ge30sXG4gICAgYXJncztcbiAgaWYgKGFyZ0xpc3QubGVuZ3RoID4gMCAmJiB0eXBlb2YgYXJnTGlzdFthcmdMaXN0Lmxlbmd0aCAtIDFdID09PSBcIm9iamVjdFwiKSB7XG4gICAgb3B0cyA9IGFyZ0xpc3RbYXJnTGlzdC5sZW5ndGggLSAxXTtcbiAgICBhcmdzID0gQXJyYXkuZnJvbShhcmdMaXN0KS5zbGljZSgwLCBhcmdMaXN0Lmxlbmd0aCAtIDEpO1xuICB9IGVsc2Uge1xuICAgIGFyZ3MgPSBBcnJheS5mcm9tKGFyZ0xpc3QpO1xuICB9XG4gIHJldHVybiBbb3B0cywgYXJnc107XG59XG5cbi8qKlxuICogVGltZXN0YW1wIHRvIHVzZSBmb3IgY2FjaGVkIHpvbmUgb2Zmc2V0IGd1ZXNzZXMgKGV4cG9zZWQgZm9yIHRlc3QpXG4gKi9cbmxldCB6b25lT2Zmc2V0VHM7XG4vKipcbiAqIENhY2hlIGZvciB6b25lIG9mZnNldCBndWVzc2VzIChleHBvc2VkIGZvciB0ZXN0KS5cbiAqXG4gKiBUaGlzIG9wdGltaXplcyBxdWlja0RUIHZpYSBndWVzc09mZnNldEZvclpvbmUgdG8gYXZvaWQgcmVwZWF0ZWQgY2FsbHMgb2ZcbiAqIHpvbmUub2Zmc2V0KCkuXG4gKi9cbmxldCB6b25lT2Zmc2V0R3Vlc3NDYWNoZSA9IHt9O1xuXG4vKipcbiAqIEEgRGF0ZVRpbWUgaXMgYW4gaW1tdXRhYmxlIGRhdGEgc3RydWN0dXJlIHJlcHJlc2VudGluZyBhIHNwZWNpZmljIGRhdGUgYW5kIHRpbWUgYW5kIGFjY29tcGFueWluZyBtZXRob2RzLiBJdCBjb250YWlucyBjbGFzcyBhbmQgaW5zdGFuY2UgbWV0aG9kcyBmb3IgY3JlYXRpbmcsIHBhcnNpbmcsIGludGVycm9nYXRpbmcsIHRyYW5zZm9ybWluZywgYW5kIGZvcm1hdHRpbmcgdGhlbS5cbiAqXG4gKiBBIERhdGVUaW1lIGNvbXByaXNlcyBvZjpcbiAqICogQSB0aW1lc3RhbXAuIEVhY2ggRGF0ZVRpbWUgaW5zdGFuY2UgcmVmZXJzIHRvIGEgc3BlY2lmaWMgbWlsbGlzZWNvbmQgb2YgdGhlIFVuaXggZXBvY2guXG4gKiAqIEEgdGltZSB6b25lLiBFYWNoIGluc3RhbmNlIGlzIGNvbnNpZGVyZWQgaW4gdGhlIGNvbnRleHQgb2YgYSBzcGVjaWZpYyB6b25lIChieSBkZWZhdWx0IHRoZSBsb2NhbCBzeXN0ZW0ncyB6b25lKS5cbiAqICogQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIHRoYXQgZWZmZWN0IGhvdyBvdXRwdXQgc3RyaW5ncyBhcmUgZm9ybWF0dGVkLCBzdWNoIGFzIGBsb2NhbGVgLCBgbnVtYmVyaW5nU3lzdGVtYCwgYW5kIGBvdXRwdXRDYWxlbmRhcmAuXG4gKlxuICogSGVyZSBpcyBhIGJyaWVmIG92ZXJ2aWV3IG9mIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgZnVuY3Rpb25hbGl0eSBpdCBwcm92aWRlczpcbiAqXG4gKiAqICoqQ3JlYXRpb24qKjogVG8gY3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBpdHMgY29tcG9uZW50cywgdXNlIG9uZSBvZiBpdHMgZmFjdG9yeSBjbGFzcyBtZXRob2RzOiB7QGxpbmsgRGF0ZVRpbWUubG9jYWx9LCB7QGxpbmsgRGF0ZVRpbWUudXRjfSwgYW5kIChtb3N0IGZsZXhpYmx5KSB7QGxpbmsgRGF0ZVRpbWUuZnJvbU9iamVjdH0uIFRvIGNyZWF0ZSBvbmUgZnJvbSBhIHN0YW5kYXJkIHN0cmluZyBmb3JtYXQsIHVzZSB7QGxpbmsgRGF0ZVRpbWUuZnJvbUlTT30sIHtAbGluayBEYXRlVGltZS5mcm9tSFRUUH0sIGFuZCB7QGxpbmsgRGF0ZVRpbWUuZnJvbVJGQzI4MjJ9LiBUbyBjcmVhdGUgb25lIGZyb20gYSBjdXN0b20gc3RyaW5nIGZvcm1hdCwgdXNlIHtAbGluayBEYXRlVGltZS5mcm9tRm9ybWF0fS4gVG8gY3JlYXRlIG9uZSBmcm9tIGEgbmF0aXZlIEpTIGRhdGUsIHVzZSB7QGxpbmsgRGF0ZVRpbWUuZnJvbUpTRGF0ZX0uXG4gKiAqICoqR3JlZ29yaWFuIGNhbGVuZGFyIGFuZCB0aW1lKio6IFRvIGV4YW1pbmUgdGhlIEdyZWdvcmlhbiBwcm9wZXJ0aWVzIG9mIGEgRGF0ZVRpbWUgaW5kaXZpZHVhbGx5IChpLmUgYXMgb3Bwb3NlZCB0byBjb2xsZWN0aXZlbHkgdGhyb3VnaCB7QGxpbmsgRGF0ZVRpbWUjdG9PYmplY3R9KSwgdXNlIHRoZSB7QGxpbmsgRGF0ZVRpbWUjeWVhcn0sIHtAbGluayBEYXRlVGltZSNtb250aH0sXG4gKiB7QGxpbmsgRGF0ZVRpbWUjZGF5fSwge0BsaW5rIERhdGVUaW1lI2hvdXJ9LCB7QGxpbmsgRGF0ZVRpbWUjbWludXRlfSwge0BsaW5rIERhdGVUaW1lI3NlY29uZH0sIHtAbGluayBEYXRlVGltZSNtaWxsaXNlY29uZH0gYWNjZXNzb3JzLlxuICogKiAqKldlZWsgY2FsZW5kYXIqKjogRm9yIElTTyB3ZWVrIGNhbGVuZGFyIGF0dHJpYnV0ZXMsIHNlZSB0aGUge0BsaW5rIERhdGVUaW1lI3dlZWtZZWFyfSwge0BsaW5rIERhdGVUaW1lI3dlZWtOdW1iZXJ9LCBhbmQge0BsaW5rIERhdGVUaW1lI3dlZWtkYXl9IGFjY2Vzc29ycy5cbiAqICogKipDb25maWd1cmF0aW9uKiogU2VlIHRoZSB7QGxpbmsgRGF0ZVRpbWUjbG9jYWxlfSBhbmQge0BsaW5rIERhdGVUaW1lI251bWJlcmluZ1N5c3RlbX0gYWNjZXNzb3JzLlxuICogKiAqKlRyYW5zZm9ybWF0aW9uKio6IFRvIHRyYW5zZm9ybSB0aGUgRGF0ZVRpbWUgaW50byBvdGhlciBEYXRlVGltZXMsIHVzZSB7QGxpbmsgRGF0ZVRpbWUjc2V0fSwge0BsaW5rIERhdGVUaW1lI3JlY29uZmlndXJlfSwge0BsaW5rIERhdGVUaW1lI3NldFpvbmV9LCB7QGxpbmsgRGF0ZVRpbWUjc2V0TG9jYWxlfSwge0BsaW5rIERhdGVUaW1lLnBsdXN9LCB7QGxpbmsgRGF0ZVRpbWUjbWludXN9LCB7QGxpbmsgRGF0ZVRpbWUjZW5kT2Z9LCB7QGxpbmsgRGF0ZVRpbWUjc3RhcnRPZn0sIHtAbGluayBEYXRlVGltZSN0b1VUQ30sIGFuZCB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbH0uXG4gKiAqICoqT3V0cHV0Kio6IFRvIGNvbnZlcnQgdGhlIERhdGVUaW1lIHRvIG90aGVyIHJlcHJlc2VudGF0aW9ucywgdXNlIHRoZSB7QGxpbmsgRGF0ZVRpbWUjdG9SZWxhdGl2ZX0sIHtAbGluayBEYXRlVGltZSN0b1JlbGF0aXZlQ2FsZW5kYXJ9LCB7QGxpbmsgRGF0ZVRpbWUjdG9KU09OfSwge0BsaW5rIERhdGVUaW1lI3RvSVNPfSwge0BsaW5rIERhdGVUaW1lI3RvSFRUUH0sIHtAbGluayBEYXRlVGltZSN0b09iamVjdH0sIHtAbGluayBEYXRlVGltZSN0b1JGQzI4MjJ9LCB7QGxpbmsgRGF0ZVRpbWUjdG9TdHJpbmd9LCB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9LCB7QGxpbmsgRGF0ZVRpbWUjdG9Gb3JtYXR9LCB7QGxpbmsgRGF0ZVRpbWUjdG9NaWxsaXN9IGFuZCB7QGxpbmsgRGF0ZVRpbWUjdG9KU0RhdGV9LlxuICpcbiAqIFRoZXJlJ3MgcGxlbnR5IG90aGVycyBkb2N1bWVudGVkIGJlbG93LiBJbiBhZGRpdGlvbiwgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3VidGxlciB0b3BpY3MgbGlrZSBpbnRlcm5hdGlvbmFsaXphdGlvbiwgdGltZSB6b25lcywgYWx0ZXJuYXRpdmUgY2FsZW5kYXJzLCB2YWxpZGl0eSwgYW5kIHNvIG9uLCBzZWUgdGhlIGV4dGVybmFsIGRvY3VtZW50YXRpb24uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGVUaW1lIHtcbiAgLyoqXG4gICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgY29uc3Qgem9uZSA9IGNvbmZpZy56b25lIHx8IFNldHRpbmdzLmRlZmF1bHRab25lO1xuXG4gICAgbGV0IGludmFsaWQgPVxuICAgICAgY29uZmlnLmludmFsaWQgfHxcbiAgICAgIChOdW1iZXIuaXNOYU4oY29uZmlnLnRzKSA/IG5ldyBJbnZhbGlkKFwiaW52YWxpZCBpbnB1dFwiKSA6IG51bGwpIHx8XG4gICAgICAoIXpvbmUuaXNWYWxpZCA/IHVuc3VwcG9ydGVkWm9uZSh6b25lKSA6IG51bGwpO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudHMgPSBpc1VuZGVmaW5lZChjb25maWcudHMpID8gU2V0dGluZ3Mubm93KCkgOiBjb25maWcudHM7XG5cbiAgICBsZXQgYyA9IG51bGwsXG4gICAgICBvID0gbnVsbDtcbiAgICBpZiAoIWludmFsaWQpIHtcbiAgICAgIGNvbnN0IHVuY2hhbmdlZCA9IGNvbmZpZy5vbGQgJiYgY29uZmlnLm9sZC50cyA9PT0gdGhpcy50cyAmJiBjb25maWcub2xkLnpvbmUuZXF1YWxzKHpvbmUpO1xuXG4gICAgICBpZiAodW5jaGFuZ2VkKSB7XG4gICAgICAgIFtjLCBvXSA9IFtjb25maWcub2xkLmMsIGNvbmZpZy5vbGQub107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBhbiBvZmZzZXQgaGFzIGJlZW4gcGFzc2VkIGFuZCB3ZSBoYXZlIG5vdCBiZWVuIGNhbGxlZCBmcm9tXG4gICAgICAgIC8vIGNsb25lKCksIHdlIGNhbiB0cnVzdCBpdCBhbmQgYXZvaWQgdGhlIG9mZnNldCBjYWxjdWxhdGlvbi5cbiAgICAgICAgY29uc3Qgb3QgPSBpc051bWJlcihjb25maWcubykgJiYgIWNvbmZpZy5vbGQgPyBjb25maWcubyA6IHpvbmUub2Zmc2V0KHRoaXMudHMpO1xuICAgICAgICBjID0gdHNUb09iaih0aGlzLnRzLCBvdCk7XG4gICAgICAgIGludmFsaWQgPSBOdW1iZXIuaXNOYU4oYy55ZWFyKSA/IG5ldyBJbnZhbGlkKFwiaW52YWxpZCBpbnB1dFwiKSA6IG51bGw7XG4gICAgICAgIGMgPSBpbnZhbGlkID8gbnVsbCA6IGM7XG4gICAgICAgIG8gPSBpbnZhbGlkID8gbnVsbCA6IG90O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3pvbmUgPSB6b25lO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMubG9jID0gY29uZmlnLmxvYyB8fCBMb2NhbGUuY3JlYXRlKCk7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pbnZhbGlkID0gaW52YWxpZDtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLndlZWtEYXRhID0gbnVsbDtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmxvY2FsV2Vla0RhdGEgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYyA9IGM7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5vID0gbztcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzTHV4b25EYXRlVGltZSA9IHRydWU7XG4gIH1cblxuICAvLyBDT05TVFJVQ1RcblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZm9yIHRoZSBjdXJyZW50IGluc3RhbnQsIGluIHRoZSBzeXN0ZW0ncyB0aW1lIHpvbmUuXG4gICAqXG4gICAqIFVzZSBTZXR0aW5ncyB0byBvdmVycmlkZSB0aGVzZSBkZWZhdWx0IHZhbHVlcyBpZiBuZWVkZWQuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKCkgLy9+PiBub3cgaW4gdGhlIElTTyBmb3JtYXRcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgbm93KCkge1xuICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGxvY2FsIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbeWVhcl0gLSBUaGUgY2FsZW5kYXIgeWVhci4gSWYgb21pdHRlZCAoYXMgaW4sIGNhbGwgYGxvY2FsKClgIHdpdGggbm8gYXJndW1lbnRzKSwgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttb250aD0xXSAtIFRoZSBtb250aCwgMS1pbmRleGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGF5PTFdIC0gVGhlIGRheSBvZiB0aGUgbW9udGgsIDEtaW5kZXhlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW2hvdXI9MF0gLSBUaGUgaG91ciBvZiB0aGUgZGF5LCBpbiAyNC1ob3VyIHRpbWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW51dGU9MF0gLSBUaGUgbWludXRlIG9mIHRoZSBob3VyLCBtZWFuaW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgNTlcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmQ9MF0gLSBUaGUgc2Vjb25kIG9mIHRoZSBtaW51dGUsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA1OVxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbGxpc2Vjb25kPTBdIC0gVGhlIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA5OTlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IG5vd1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCh7IHpvbmU6IFwiQW1lcmljYS9OZXdfWW9ya1wiIH0pICAgICAgLy9+PiBub3csIGluIFVTIGVhc3QgY29hc3QgdGltZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMS0wMVQwMDowMDowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0wMVQwMDowMDowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgeyBsb2NhbGU6IFwiZnJcIiB9KSAgICAgLy9+PiAyMDE3LTAzLTEyVDAwOjAwOjAwLCB3aXRoIGEgRnJlbmNoIGxvY2FsZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSkgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTowMDowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgeyB6b25lOiBcInV0Y1wiIH0pICAgLy9+PiAyMDE3LTAzLTEyVDA1OjAwOjAwLCBpbiBVVENcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1KSAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MDBcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCkgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTBcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCwgNzY1KSAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTAuNzY1XG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIGxvY2FsKCkge1xuICAgIGNvbnN0IFtvcHRzLCBhcmdzXSA9IGxhc3RPcHRzKGFyZ3VtZW50cyksXG4gICAgICBbeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kXSA9IGFyZ3M7XG4gICAgcmV0dXJuIHF1aWNrRFQoeyB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQgfSwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgaW4gVVRDXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbeWVhcl0gLSBUaGUgY2FsZW5kYXIgeWVhci4gSWYgb21pdHRlZCAoYXMgaW4sIGNhbGwgYHV0YygpYCB3aXRoIG5vIGFyZ3VtZW50cyksIHRoZSBjdXJyZW50IHRpbWUgd2lsbCBiZSB1c2VkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbW9udGg9MV0gLSBUaGUgbW9udGgsIDEtaW5kZXhlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RheT0xXSAtIFRoZSBkYXkgb2YgdGhlIG1vbnRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaG91cj0wXSAtIFRoZSBob3VyIG9mIHRoZSBkYXksIGluIDI0LWhvdXIgdGltZVxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbnV0ZT0wXSAtIFRoZSBtaW51dGUgb2YgdGhlIGhvdXIsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA1OVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZD0wXSAtIFRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWlsbGlzZWNvbmQ9MF0gLSBUaGUgbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDk5OVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sb2NhbGVdIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm91dHB1dENhbGVuZGFyXSAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm51bWJlcmluZ1N5c3RlbV0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMud2Vla1NldHRpbmdzXSAtIHRoZSB3ZWVrIHNldHRpbmdzIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gbm93XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMS0wMVQwMDowMDowMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTAxVDAwOjAwOjAwWlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDA6MDA6MDBaXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzLCAxMiwgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTowMDowMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjAwWlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIsIDUsIDQ1LCB7IGxvY2FsZTogXCJmclwiIH0pICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NTowMFogd2l0aCBhIEZyZW5jaCBsb2NhbGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSwgMTApICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjEwWlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCwgNzY1LCB7IGxvY2FsZTogXCJmclwiIH0pIC8vfj4gMjAxNy0wMy0xMlQwNTo0NToxMC43NjVaIHdpdGggYSBGcmVuY2ggbG9jYWxlXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIHV0YygpIHtcbiAgICBjb25zdCBbb3B0cywgYXJnc10gPSBsYXN0T3B0cyhhcmd1bWVudHMpLFxuICAgICAgW3llYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF0gPSBhcmdzO1xuXG4gICAgb3B0cy56b25lID0gRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlO1xuICAgIHJldHVybiBxdWlja0RUKHsgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kIH0sIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBKYXZhU2NyaXB0IERhdGUgb2JqZWN0LiBVc2VzIHRoZSBkZWZhdWx0IHpvbmUuXG4gICAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSAtIGEgSmF2YVNjcmlwdCBEYXRlIG9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRpb25zLnpvbmU9J2xvY2FsJ10gLSB0aGUgem9uZSB0byBwbGFjZSB0aGUgRGF0ZVRpbWUgaW50b1xuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tSlNEYXRlKGRhdGUsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHRzID0gaXNEYXRlKGRhdGUpID8gZGF0ZS52YWx1ZU9mKCkgOiBOYU47XG4gICAgaWYgKE51bWJlci5pc05hTih0cykpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKFwiaW52YWxpZCBpbnB1dFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB6b25lVG9Vc2UgPSBub3JtYWxpemVab25lKG9wdGlvbnMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpO1xuICAgIGlmICghem9uZVRvVXNlLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKHVuc3VwcG9ydGVkWm9uZSh6b25lVG9Vc2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGVUaW1lKHtcbiAgICAgIHRzOiB0cyxcbiAgICAgIHpvbmU6IHpvbmVUb1VzZSxcbiAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0aW9ucyksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGVwb2NoIChtZWFuaW5nIHNpbmNlIDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuIFVzZXMgdGhlIGRlZmF1bHQgem9uZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pbGxpc2Vjb25kcyAtIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSAxOTcwIFVUQ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRpb25zLnpvbmU9J2xvY2FsJ10gLSB0aGUgem9uZSB0byBwbGFjZSB0aGUgRGF0ZVRpbWUgaW50b1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubG9jYWxlXSAtIGEgbG9jYWxlIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy53ZWVrU2V0dGluZ3MgLSB0aGUgd2VlayBzZXR0aW5ncyB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tTWlsbGlzKG1pbGxpc2Vjb25kcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFpc051bWJlcihtaWxsaXNlY29uZHMpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGBmcm9tTWlsbGlzIHJlcXVpcmVzIGEgbnVtZXJpY2FsIGlucHV0LCBidXQgcmVjZWl2ZWQgYSAke3R5cGVvZiBtaWxsaXNlY29uZHN9IHdpdGggdmFsdWUgJHttaWxsaXNlY29uZHN9YFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG1pbGxpc2Vjb25kcyA8IC1NQVhfREFURSB8fCBtaWxsaXNlY29uZHMgPiBNQVhfREFURSkge1xuICAgICAgLy8gdGhpcyBpc24ndCBwZXJmZWN0IGJlY2F1c2Ugd2UgY2FuIHN0aWxsIGVuZCB1cCBvdXQgb2YgcmFuZ2UgYmVjYXVzZSBvZiBhZGRpdGlvbmFsIHNoaWZ0aW5nLCBidXQgaXQncyBhIHN0YXJ0XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChcIlRpbWVzdGFtcCBvdXQgb2YgcmFuZ2VcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe1xuICAgICAgICB0czogbWlsbGlzZWNvbmRzLFxuICAgICAgICB6b25lOiBub3JtYWxpemVab25lKG9wdGlvbnMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpLFxuICAgICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdGlvbnMpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2ggKG1lYW5pbmcgc2luY2UgMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS4gVXNlcyB0aGUgZGVmYXVsdCB6b25lLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc2Vjb25kcyAtIGEgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgMTk3MCBVVENcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG9cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsZV0gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMud2Vla1NldHRpbmdzIC0gdGhlIHdlZWsgc2V0dGluZ3MgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbVNlY29uZHMoc2Vjb25kcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFpc051bWJlcihzZWNvbmRzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwiZnJvbVNlY29uZHMgcmVxdWlyZXMgYSBudW1lcmljYWwgaW5wdXRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe1xuICAgICAgICB0czogc2Vjb25kcyAqIDEwMDAsXG4gICAgICAgIHpvbmU6IG5vcm1hbGl6ZVpvbmUob3B0aW9ucy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSksXG4gICAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0aW9ucyksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGgga2V5cyBsaWtlICd5ZWFyJyBhbmQgJ2hvdXInIHdpdGggcmVhc29uYWJsZSBkZWZhdWx0cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIHRoZSBvYmplY3QgdG8gY3JlYXRlIHRoZSBEYXRlVGltZSBmcm9tXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoueWVhciAtIGEgeWVhciwgc3VjaCBhcyAxOTg3XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubW9udGggLSBhIG1vbnRoLCAxLTEyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouZGF5IC0gYSBkYXkgb2YgdGhlIG1vbnRoLCAxLTMxLCBkZXBlbmRpbmcgb24gdGhlIG1vbnRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoub3JkaW5hbCAtIGRheSBvZiB0aGUgeWVhciwgMS0zNjUgb3IgMzY2XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla1llYXIgLSBhbiBJU08gd2VlayB5ZWFyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla051bWJlciAtIGFuIElTTyB3ZWVrIG51bWJlciwgYmV0d2VlbiAxIGFuZCA1MiBvciA1MywgZGVwZW5kaW5nIG9uIHRoZSB5ZWFyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla2RheSAtIGFuIElTTyB3ZWVrZGF5LCAxLTcsIHdoZXJlIDEgaXMgTW9uZGF5IGFuZCA3IGlzIFN1bmRheVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLmxvY2FsV2Vla1llYXIgLSBhIHdlZWsgeWVhciwgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5sb2NhbFdlZWtOdW1iZXIgLSBhIHdlZWsgbnVtYmVyLCBiZXR3ZWVuIDEgYW5kIDUyIG9yIDUzLCBkZXBlbmRpbmcgb24gdGhlIHllYXIsIGFjY29yZGluZyB0byB0aGUgbG9jYWxlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubG9jYWxXZWVrZGF5IC0gYSB3ZWVrZGF5LCAxLTcsIHdoZXJlIDEgaXMgdGhlIGZpcnN0IGFuZCA3IGlzIHRoZSBsYXN0IGRheSBvZiB0aGUgd2VlaywgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5ob3VyIC0gaG91ciBvZiB0aGUgZGF5LCAwLTIzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubWludXRlIC0gbWludXRlIG9mIHRoZSBob3VyLCAwLTU5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouc2Vjb25kIC0gc2Vjb25kIG9mIHRoZSBtaW51dGUsIDAtNTlcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5taWxsaXNlY29uZCAtIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQsIDAtOTk5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhpcyBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gaW50ZXJwcmV0IHRoZSBudW1iZXJzIGluIHRoZSBjb250ZXh0IG9mIGEgcGFydGljdWxhciB6b25lLiBDYW4gdGFrZSBhbnkgdmFsdWUgdGFrZW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHNldFpvbmUoKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdzeXN0ZW1cXCdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLndlZWtTZXR0aW5ncyAtIHRoZSB3ZWVrIHNldHRpbmdzIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyOiAxOTgyLCBtb250aDogNSwgZGF5OiAyNX0pLnRvSVNPRGF0ZSgpIC8vPT4gJzE5ODItMDUtMjUnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyOiAxOTgyIH0pLnRvSVNPRGF0ZSgpIC8vPT4gJzE5ODItMDEtMDEnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0pIC8vfj4gdG9kYXkgYXQgMTA6MjY6MDZcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSwgeyB6b25lOiAndXRjJyB9KSxcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSwgeyB6b25lOiAnbG9jYWwnIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0sIHsgem9uZTogJ0FtZXJpY2EvTmV3X1lvcmsnIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB3ZWVrWWVhcjogMjAxNiwgd2Vla051bWJlcjogMiwgd2Vla2RheTogMyB9KS50b0lTT0RhdGUoKSAvLz0+ICcyMDE2LTAxLTEzJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgbG9jYWxXZWVrWWVhcjogMjAyMiwgbG9jYWxXZWVrTnVtYmVyOiAxLCBsb2NhbFdlZWtkYXk6IDEgfSwgeyBsb2NhbGU6IFwiZW4tVVNcIiB9KS50b0lTT0RhdGUoKSAvLz0+ICcyMDIxLTEyLTI2J1xuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tT2JqZWN0KG9iaiwgb3B0cyA9IHt9KSB7XG4gICAgb2JqID0gb2JqIHx8IHt9O1xuICAgIGNvbnN0IHpvbmVUb1VzZSA9IG5vcm1hbGl6ZVpvbmUob3B0cy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSk7XG4gICAgaWYgKCF6b25lVG9Vc2UuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQodW5zdXBwb3J0ZWRab25lKHpvbmVUb1VzZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IGxvYyA9IExvY2FsZS5mcm9tT2JqZWN0KG9wdHMpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVPYmplY3Qob2JqLCBub3JtYWxpemVVbml0V2l0aExvY2FsV2Vla3MpO1xuICAgIGNvbnN0IHsgbWluRGF5c0luRmlyc3RXZWVrLCBzdGFydE9mV2VlayB9ID0gdXNlc0xvY2FsV2Vla1ZhbHVlcyhub3JtYWxpemVkLCBsb2MpO1xuXG4gICAgY29uc3QgdHNOb3cgPSBTZXR0aW5ncy5ub3coKSxcbiAgICAgIG9mZnNldFByb3ZpcyA9ICFpc1VuZGVmaW5lZChvcHRzLnNwZWNpZmljT2Zmc2V0KVxuICAgICAgICA/IG9wdHMuc3BlY2lmaWNPZmZzZXRcbiAgICAgICAgOiB6b25lVG9Vc2Uub2Zmc2V0KHRzTm93KSxcbiAgICAgIGNvbnRhaW5zT3JkaW5hbCA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLm9yZGluYWwpLFxuICAgICAgY29udGFpbnNHcmVnb3JZZWFyID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQueWVhciksXG4gICAgICBjb250YWluc0dyZWdvck1EID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQubW9udGgpIHx8ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLmRheSksXG4gICAgICBjb250YWluc0dyZWdvciA9IGNvbnRhaW5zR3JlZ29yWWVhciB8fCBjb250YWluc0dyZWdvck1ELFxuICAgICAgZGVmaW5pdGVXZWVrRGVmID0gbm9ybWFsaXplZC53ZWVrWWVhciB8fCBub3JtYWxpemVkLndlZWtOdW1iZXI7XG5cbiAgICAvLyBjYXNlczpcbiAgICAvLyBqdXN0IGEgd2Vla2RheSAtPiB0aGlzIHdlZWsncyBpbnN0YW5jZSBvZiB0aGF0IHdlZWtkYXksIG5vIHdvcnJpZXNcbiAgICAvLyAoZ3JlZ29yaWFuIGRhdGEgb3Igb3JkaW5hbCkgKyAod2Vla1llYXIgb3Igd2Vla051bWJlcikgLT4gZXJyb3JcbiAgICAvLyAoZ3JlZ29yaWFuIG1vbnRoIG9yIGRheSkgKyBvcmRpbmFsIC0+IGVycm9yXG4gICAgLy8gb3RoZXJ3aXNlIGp1c3QgdXNlIHdlZWtzIG9yIG9yZGluYWxzIG9yIGdyZWdvcmlhbiwgZGVwZW5kaW5nIG9uIHdoYXQncyBzcGVjaWZpZWRcblxuICAgIGlmICgoY29udGFpbnNHcmVnb3IgfHwgY29udGFpbnNPcmRpbmFsKSAmJiBkZWZpbml0ZVdlZWtEZWYpIHtcbiAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcihcbiAgICAgICAgXCJDYW4ndCBtaXggd2Vla1llYXIvd2Vla051bWJlciB1bml0cyB3aXRoIHllYXIvbW9udGgvZGF5IG9yIG9yZGluYWxzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5zR3JlZ29yTUQgJiYgY29udGFpbnNPcmRpbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoXCJDYW4ndCBtaXggb3JkaW5hbCBkYXRlcyB3aXRoIG1vbnRoL2RheVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VXZWVrRGF0YSA9IGRlZmluaXRlV2Vla0RlZiB8fCAobm9ybWFsaXplZC53ZWVrZGF5ICYmICFjb250YWluc0dyZWdvcik7XG5cbiAgICAvLyBjb25maWd1cmUgb3Vyc2VsdmVzIHRvIGRlYWwgd2l0aCBncmVnb3JpYW4gZGF0ZXMgb3Igd2VlayBzdHVmZlxuICAgIGxldCB1bml0cyxcbiAgICAgIGRlZmF1bHRWYWx1ZXMsXG4gICAgICBvYmpOb3cgPSB0c1RvT2JqKHRzTm93LCBvZmZzZXRQcm92aXMpO1xuICAgIGlmICh1c2VXZWVrRGF0YSkge1xuICAgICAgdW5pdHMgPSBvcmRlcmVkV2Vla1VuaXRzO1xuICAgICAgZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRXZWVrVW5pdFZhbHVlcztcbiAgICAgIG9iak5vdyA9IGdyZWdvcmlhblRvV2VlayhvYmpOb3csIG1pbkRheXNJbkZpcnN0V2Vlaywgc3RhcnRPZldlZWspO1xuICAgIH0gZWxzZSBpZiAoY29udGFpbnNPcmRpbmFsKSB7XG4gICAgICB1bml0cyA9IG9yZGVyZWRPcmRpbmFsVW5pdHM7XG4gICAgICBkZWZhdWx0VmFsdWVzID0gZGVmYXVsdE9yZGluYWxVbml0VmFsdWVzO1xuICAgICAgb2JqTm93ID0gZ3JlZ29yaWFuVG9PcmRpbmFsKG9iak5vdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuaXRzID0gb3JkZXJlZFVuaXRzO1xuICAgICAgZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRVbml0VmFsdWVzO1xuICAgIH1cblxuICAgIC8vIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbWlzc2luZyBzdHVmZlxuICAgIGxldCBmb3VuZEZpcnN0ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCB1IG9mIHVuaXRzKSB7XG4gICAgICBjb25zdCB2ID0gbm9ybWFsaXplZFt1XTtcbiAgICAgIGlmICghaXNVbmRlZmluZWQodikpIHtcbiAgICAgICAgZm91bmRGaXJzdCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGZvdW5kRmlyc3QpIHtcbiAgICAgICAgbm9ybWFsaXplZFt1XSA9IGRlZmF1bHRWYWx1ZXNbdV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3JtYWxpemVkW3VdID0gb2JqTm93W3VdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgdmFsdWVzIHdlIGhhdmUgYXJlIGluIHJhbmdlXG4gICAgY29uc3QgaGlnaGVyT3JkZXJJbnZhbGlkID0gdXNlV2Vla0RhdGFcbiAgICAgICAgPyBoYXNJbnZhbGlkV2Vla0RhdGEobm9ybWFsaXplZCwgbWluRGF5c0luRmlyc3RXZWVrLCBzdGFydE9mV2VlaylcbiAgICAgICAgOiBjb250YWluc09yZGluYWxcbiAgICAgICAgPyBoYXNJbnZhbGlkT3JkaW5hbERhdGEobm9ybWFsaXplZClcbiAgICAgICAgOiBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YShub3JtYWxpemVkKSxcbiAgICAgIGludmFsaWQgPSBoaWdoZXJPcmRlckludmFsaWQgfHwgaGFzSW52YWxpZFRpbWVEYXRhKG5vcm1hbGl6ZWQpO1xuXG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKGludmFsaWQpO1xuICAgIH1cblxuICAgIC8vIGNvbXB1dGUgdGhlIGFjdHVhbCB0aW1lXG4gICAgY29uc3QgZ3JlZ29yaWFuID0gdXNlV2Vla0RhdGFcbiAgICAgICAgPyB3ZWVrVG9HcmVnb3JpYW4obm9ybWFsaXplZCwgbWluRGF5c0luRmlyc3RXZWVrLCBzdGFydE9mV2VlaylcbiAgICAgICAgOiBjb250YWluc09yZGluYWxcbiAgICAgICAgPyBvcmRpbmFsVG9HcmVnb3JpYW4obm9ybWFsaXplZClcbiAgICAgICAgOiBub3JtYWxpemVkLFxuICAgICAgW3RzRmluYWwsIG9mZnNldEZpbmFsXSA9IG9ialRvVFMoZ3JlZ29yaWFuLCBvZmZzZXRQcm92aXMsIHpvbmVUb1VzZSksXG4gICAgICBpbnN0ID0gbmV3IERhdGVUaW1lKHtcbiAgICAgICAgdHM6IHRzRmluYWwsXG4gICAgICAgIHpvbmU6IHpvbmVUb1VzZSxcbiAgICAgICAgbzogb2Zmc2V0RmluYWwsXG4gICAgICAgIGxvYyxcbiAgICAgIH0pO1xuXG4gICAgLy8gZ3JlZ29yaWFuIGRhdGEgKyB3ZWVrZGF5IHNlcnZlcyBvbmx5IHRvIHZhbGlkYXRlXG4gICAgaWYgKG5vcm1hbGl6ZWQud2Vla2RheSAmJiBjb250YWluc0dyZWdvciAmJiBvYmoud2Vla2RheSAhPT0gaW5zdC53ZWVrZGF5KSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChcbiAgICAgICAgXCJtaXNtYXRjaGVkIHdlZWtkYXlcIixcbiAgICAgICAgYHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGggYSB3ZWVrZGF5IG9mICR7bm9ybWFsaXplZC53ZWVrZGF5fSBhbmQgYSBkYXRlIG9mICR7aW5zdC50b0lTTygpfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFpbnN0LmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKGluc3QuaW52YWxpZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3Q7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBJU08gODYwMSBzdHJpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgSVNPIHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgdGltZSB0byB0aGlzIHpvbmVcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSBmaXhlZC1vZmZzZXQgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXJdIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy53ZWVrU2V0dGluZ3NdIC0gdGhlIHdlZWsgc2V0dGluZ3MgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUlTTygnMjAxNi0wNS0yNVQwOTowODozNC4xMjMnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMyswNjowMCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtMDUtMjVUMDk6MDg6MzQuMTIzKzA2OjAwJywge3NldFpvbmU6IHRydWV9KVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMycsIHt6b25lOiAndXRjJ30pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtVzA1LTQnKVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tSVNPKHRleHQsIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IFt2YWxzLCBwYXJzZWRab25lXSA9IHBhcnNlSVNPRGF0ZSh0ZXh0KTtcbiAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBcIklTTyA4NjAxXCIsIHRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYW4gUkZDIDI4MjIgc3RyaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIFJGQyAyODIyIHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gY29udmVydCB0aGUgdGltZSB0byB0aGlzIHpvbmUuIFNpbmNlIHRoZSBvZmZzZXQgaXMgYWx3YXlzIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGl0c2VsZiwgdGhpcyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBzdHJpbmcsIG1lcmVseSB0aGUgem9uZSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGlzIGV4cHJlc3NlZCBpbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSBmaXhlZC1vZmZzZXQgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMud2Vla1NldHRpbmdzIC0gdGhlIHdlZWsgc2V0dGluZ3MgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVJGQzI4MjIoJzI1IE5vdiAyMDE2IDEzOjIzOjEyIEdNVCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21SRkMyODIyKCdGcmksIDI1IE5vdiAyMDE2IDEzOjIzOjEyICswNjAwJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVJGQzI4MjIoJzI1IE5vdiAyMDE2IDEzOjIzIFonKVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tUkZDMjgyMih0ZXh0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZVJGQzI4MjJEYXRlKHRleHQpO1xuICAgIHJldHVybiBwYXJzZURhdGFUb0RhdGVUaW1lKHZhbHMsIHBhcnNlZFpvbmUsIG9wdHMsIFwiUkZDIDI4MjJcIiwgdGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBIVFRQIGhlYWRlciBkYXRlXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMy5odG1sI3NlYzMuMy4xXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIEhUVFAgaGVhZGVyIGRhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIGNvbnZlcnQgdGhlIHRpbWUgdG8gdGhpcyB6b25lLiBTaW5jZSBIVFRQIGRhdGVzIGFyZSBhbHdheXMgaW4gVVRDLCB0aGlzIGhhcyBubyBlZmZlY3Qgb24gdGhlIGludGVycHJldGF0aW9uIG9mIHN0cmluZywgbWVyZWx5IHRoZSB6b25lIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaXMgZXhwcmVzc2VkIGluLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnNldFpvbmU9ZmFsc2VdIC0gb3ZlcnJpZGUgdGhlIHpvbmUgd2l0aCB0aGUgZml4ZWQtb2Zmc2V0IHpvbmUgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcuIEZvciBIVFRQIGRhdGVzLCB0aGlzIGlzIGFsd2F5cyBVVEMsIHNvIHRoaXMgb3B0aW9uIGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyB0aGUgYHpvbmVgIG9wdGlvbiB0byAndXRjJywgYnV0IHRoaXMgb3B0aW9uIGlzIGluY2x1ZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHNpbWlsYXIgbWV0aG9kcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMud2Vla1NldHRpbmdzIC0gdGhlIHdlZWsgc2V0dGluZ3MgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUhUVFAoJ1N1biwgMDYgTm92IDE5OTQgMDg6NDk6MzcgR01UJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUhUVFAoJ1N1bmRheSwgMDYtTm92LTk0IDA4OjQ5OjM3IEdNVCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21IVFRQKCdTdW4gTm92ICA2IDA4OjQ5OjM3IDE5OTQnKVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tSFRUUCh0ZXh0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZUhUVFBEYXRlKHRleHQpO1xuICAgIHJldHVybiBwYXJzZURhdGFUb0RhdGVUaW1lKHZhbHMsIHBhcnNlZFpvbmUsIG9wdHMsIFwiSFRUUFwiLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIGlucHV0IHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZy5cbiAgICogRGVmYXVsdHMgdG8gZW4tVVMgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJ3MgbG9jYWxlLiBGb3IgYSB0YWJsZSBvZiB0b2tlbnMgYW5kIHRoZWlyIGludGVycHJldGF0aW9ucywgc2VlIFtoZXJlXShodHRwczovL21vbWVudC5naXRodWIuaW8vbHV4b24vIy9wYXJzaW5nP2lkPXRhYmxlLW9mLXRva2VucykuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCB0aGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGJlIGluIChzZWUgdGhlIGxpbmsgYmVsb3cgZm9yIHRoZSBmb3JtYXRzKVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgRGF0ZVRpbWUgdG8gdGhpcyB6b25lXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc2V0Wm9uZT1mYWxzZV0gLSBvdmVycmlkZSB0aGUgem9uZSB3aXRoIGEgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIGEgbG9jYWxlIHN0cmluZyB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSBEYXRlVGltZSB0byB0aGlzIGxvY2FsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgdG8gdGhpcyBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLndlZWtTZXR0aW5ncyAtIHRoZSB3ZWVrIHNldHRpbmdzIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tRm9ybWF0KHRleHQsIGZtdCwgb3B0cyA9IHt9KSB7XG4gICAgaWYgKGlzVW5kZWZpbmVkKHRleHQpIHx8IGlzVW5kZWZpbmVkKGZtdCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcImZyb21Gb3JtYXQgcmVxdWlyZXMgYW4gaW5wdXQgc3RyaW5nIGFuZCBhIGZvcm1hdFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwgfSA9IG9wdHMsXG4gICAgICBsb2NhbGVUb1VzZSA9IExvY2FsZS5mcm9tT3B0cyh7XG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgbnVtYmVyaW5nU3lzdGVtLFxuICAgICAgICBkZWZhdWx0VG9FTjogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICAgW3ZhbHMsIHBhcnNlZFpvbmUsIHNwZWNpZmljT2Zmc2V0LCBpbnZhbGlkXSA9IHBhcnNlRnJvbVRva2Vucyhsb2NhbGVUb1VzZSwgdGV4dCwgZm10KTtcbiAgICBpZiAoaW52YWxpZCkge1xuICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQoaW52YWxpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwYXJzZURhdGFUb0RhdGVUaW1lKHZhbHMsIHBhcnNlZFpvbmUsIG9wdHMsIGBmb3JtYXQgJHtmbXR9YCwgdGV4dCwgc3BlY2lmaWNPZmZzZXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgZnJvbUZvcm1hdCBpbnN0ZWFkXG4gICAqL1xuICBzdGF0aWMgZnJvbVN0cmluZyh0ZXh0LCBmbXQsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiBEYXRlVGltZS5mcm9tRm9ybWF0KHRleHQsIGZtdCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIFNRTCBkYXRlLCB0aW1lLCBvciBkYXRldGltZVxuICAgKiBEZWZhdWx0cyB0byBlbi1VUyBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkLCByZWdhcmRsZXNzIG9mIHRoZSBzeXN0ZW0ncyBsb2NhbGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgc3RyaW5nIHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0byBhZmZlY3QgdGhlIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSB1c2UgdGhpcyB6b25lIGlmIG5vIG9mZnNldCBpcyBzcGVjaWZpZWQgaW4gdGhlIGlucHV0IHN0cmluZyBpdHNlbGYuIFdpbGwgYWxzbyBjb252ZXJ0IHRoZSBEYXRlVGltZSB0byB0aGlzIHpvbmVcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSB6b25lIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGl0c2VsZiwgaWYgaXQgc3BlY2lmaWVzIG9uZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gYSBsb2NhbGUgc3RyaW5nIHRvIHVzZSB3aGVuIHBhcnNpbmcuIFdpbGwgYWxzbyBzZXQgdGhlIERhdGVUaW1lIHRvIHRoaXMgbG9jYWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZSB3aGVuIHBhcnNpbmcuIFdpbGwgYWxzbyBzZXQgdGhlIHJlc3VsdGluZyBEYXRlVGltZSB0byB0aGlzIG51bWJlcmluZyBzeXN0ZW1cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMud2Vla1NldHRpbmdzIC0gdGhlIHdlZWsgc2V0dGluZ3MgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0JylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDInKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiswNjowMCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQuMzQyIEFtZXJpY2EvTG9zX0FuZ2VsZXMnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiBBbWVyaWNhL0xvc19BbmdlbGVzJywgeyBzZXRab25lOiB0cnVlIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQuMzQyJywgeyB6b25lOiAnQW1lcmljYS9Mb3NfQW5nZWxlcycgfSlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMDk6MTI6MzQuMzQyJylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbVNRTCh0ZXh0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZVNRTCh0ZXh0KTtcbiAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBcIlNRTFwiLCB0ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW52YWxpZCBEYXRlVGltZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiAtIHNpbXBsZSBzdHJpbmcgb2Ygd2h5IHRoaXMgRGF0ZVRpbWUgaXMgaW52YWxpZC4gU2hvdWxkIG5vdCBjb250YWluIHBhcmFtZXRlcnMgb3IgYW55dGhpbmcgZWxzZSBkYXRhLWRlcGVuZGVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHBsYW5hdGlvbj1udWxsXSAtIGxvbmdlciBleHBsYW5hdGlvbiwgbWF5IGluY2x1ZGUgcGFyYW1ldGVycyBhbmQgb3RoZXIgdXNlZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvblxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBpbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24gPSBudWxsKSB7XG4gICAgaWYgKCFyZWFzb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgRGF0ZVRpbWUgaXMgaW52YWxpZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnZhbGlkID0gcmVhc29uIGluc3RhbmNlb2YgSW52YWxpZCA/IHJlYXNvbiA6IG5ldyBJbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pO1xuXG4gICAgaWYgKFNldHRpbmdzLnRocm93T25JbnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZERhdGVUaW1lRXJyb3IoaW52YWxpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoeyBpbnZhbGlkIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZVRpbWUuIFdvcmtzIGFjcm9zcyBjb250ZXh0IGJvdW5kYXJpZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IG9cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc0RhdGVUaW1lKG8pIHtcbiAgICByZXR1cm4gKG8gJiYgby5pc0x1eG9uRGF0ZVRpbWUpIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2R1Y2UgdGhlIGZvcm1hdCBzdHJpbmcgZm9yIGEgc2V0IG9mIG9wdGlvbnNcbiAgICogQHBhcmFtIGZvcm1hdE9wdHNcbiAgICogQHBhcmFtIGxvY2FsZU9wdHNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBwYXJzZUZvcm1hdEZvck9wdHMoZm9ybWF0T3B0cywgbG9jYWxlT3B0cyA9IHt9KSB7XG4gICAgY29uc3QgdG9rZW5MaXN0ID0gZm9ybWF0T3B0c1RvVG9rZW5zKGZvcm1hdE9wdHMsIExvY2FsZS5mcm9tT2JqZWN0KGxvY2FsZU9wdHMpKTtcbiAgICByZXR1cm4gIXRva2VuTGlzdCA/IG51bGwgOiB0b2tlbkxpc3QubWFwKCh0KSA9PiAodCA/IHQudmFsIDogbnVsbCkpLmpvaW4oXCJcIik7XG4gIH1cblxuICAvKipcbiAgICogUHJvZHVjZSB0aGUgdGhlIGZ1bGx5IGV4cGFuZGVkIGZvcm1hdCB0b2tlbiBmb3IgdGhlIGxvY2FsZVxuICAgKiBEb2VzIE5PVCBxdW90ZSBjaGFyYWN0ZXJzLCBzbyBxdW90ZWQgdG9rZW5zIHdpbGwgbm90IHJvdW5kIHRyaXAgY29ycmVjdGx5XG4gICAqIEBwYXJhbSBmbXRcbiAgICogQHBhcmFtIGxvY2FsZU9wdHNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBleHBhbmRGb3JtYXQoZm10LCBsb2NhbGVPcHRzID0ge30pIHtcbiAgICBjb25zdCBleHBhbmRlZCA9IGV4cGFuZE1hY3JvVG9rZW5zKEZvcm1hdHRlci5wYXJzZUZvcm1hdChmbXQpLCBMb2NhbGUuZnJvbU9iamVjdChsb2NhbGVPcHRzKSk7XG4gICAgcmV0dXJuIGV4cGFuZGVkLm1hcCgodCkgPT4gdC52YWwpLmpvaW4oXCJcIik7XG4gIH1cblxuICBzdGF0aWMgcmVzZXRDYWNoZSgpIHtcbiAgICB6b25lT2Zmc2V0VHMgPSB1bmRlZmluZWQ7XG4gICAgem9uZU9mZnNldEd1ZXNzQ2FjaGUgPSB7fTtcbiAgfVxuXG4gIC8vIElORk9cblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBvZiB1bml0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIGEgdW5pdCBzdWNoIGFzICdtaW51dGUnIG9yICdkYXknXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDcsIDQpLmdldCgnbW9udGgnKTsgLy89PiA3XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDcsIDQpLmdldCgnZGF5Jyk7IC8vPT4gNFxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXQodW5pdCkge1xuICAgIHJldHVybiB0aGlzW3VuaXRdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgRGF0ZVRpbWUgaXMgdmFsaWQuIEludmFsaWQgRGF0ZVRpbWVzIG9jY3VyIHdoZW46XG4gICAqICogVGhlIERhdGVUaW1lIHdhcyBjcmVhdGVkIGZyb20gaW52YWxpZCBjYWxlbmRhciBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgMTN0aCBtb250aCBvciBGZWJydWFyeSAzMFxuICAgKiAqIFRoZSBEYXRlVGltZSB3YXMgY3JlYXRlZCBieSBhbiBvcGVyYXRpb24gb24gYW5vdGhlciBpbnZhbGlkIGRhdGVcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID09PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXJyb3IgY29kZSBpZiB0aGlzIERhdGVUaW1lIGlzIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIERhdGVUaW1lIGlzIHZhbGlkXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaW52YWxpZFJlYXNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLnJlYXNvbiA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBleHBsYW5hdGlvbiBvZiB3aHkgdGhpcyBEYXRlVGltZSBiZWNhbWUgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgRGF0ZVRpbWUgaXMgdmFsaWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBpbnZhbGlkRXhwbGFuYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5leHBsYW5hdGlvbiA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsb2NhbGUgb2YgYSBEYXRlVGltZSwgc3VjaCAnZW4tR0InLiBUaGUgbG9jYWxlIGlzIHVzZWQgd2hlbiBmb3JtYXR0aW5nIHRoZSBEYXRlVGltZVxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGxvY2FsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5sb2MubG9jYWxlIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG51bWJlcmluZyBzeXN0ZW0gb2YgYSBEYXRlVGltZSwgc3VjaCAnYmVuZycuIFRoZSBudW1iZXJpbmcgc3lzdGVtIGlzIHVzZWQgd2hlbiBmb3JtYXR0aW5nIHRoZSBEYXRlVGltZVxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG51bWJlcmluZ1N5c3RlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5sb2MubnVtYmVyaW5nU3lzdGVtIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG91dHB1dCBjYWxlbmRhciBvZiBhIERhdGVUaW1lLCBzdWNoICdpc2xhbWljJy4gVGhlIG91dHB1dCBjYWxlbmRhciBpcyB1c2VkIHdoZW4gZm9ybWF0dGluZyB0aGUgRGF0ZVRpbWVcbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBvdXRwdXRDYWxlbmRhcigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5sb2Mub3V0cHV0Q2FsZW5kYXIgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdGltZSB6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIERhdGVUaW1lLlxuICAgKiBAdHlwZSB7Wm9uZX1cbiAgICovXG4gIGdldCB6b25lKCkge1xuICAgIHJldHVybiB0aGlzLl96b25lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbmFtZSBvZiB0aGUgdGltZSB6b25lLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IHpvbmVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnpvbmUubmFtZSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB5ZWFyXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS55ZWFyIC8vPT4gMjAxN1xuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHllYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy55ZWFyIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcXVhcnRlclxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkucXVhcnRlciAvLz0+IDJcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBxdWFydGVyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBNYXRoLmNlaWwodGhpcy5jLm1vbnRoIC8gMykgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtb250aCAoMS0xMikuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5tb250aCAvLz0+IDVcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBtb250aCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLm1vbnRoIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGF5IG9mIHRoZSBtb250aCAoMS0zMGlzaCkuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5kYXkgLy89PiAyNVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGRheSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLmRheSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGhvdXIgb2YgdGhlIGRheSAoMC0yMykuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1LCA5KS5ob3VyIC8vPT4gOVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGhvdXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5ob3VyIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWludXRlIG9mIHRoZSBob3VyICgwLTU5KS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUsIDksIDMwKS5taW51dGUgLy89PiAzMFxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG1pbnV0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLm1pbnV0ZSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNlY29uZCBvZiB0aGUgbWludXRlICgwLTU5KS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUsIDksIDMwLCA1Mikuc2Vjb25kIC8vPT4gNTJcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBzZWNvbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5zZWNvbmQgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtaWxsaXNlY29uZCBvZiB0aGUgc2Vjb25kICgwLTk5OSkuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1LCA5LCAzMCwgNTIsIDY1NCkubWlsbGlzZWNvbmQgLy89PiA2NTRcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBtaWxsaXNlY29uZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLm1pbGxpc2Vjb25kIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgd2VlayB5ZWFyXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAxMiwgMzEpLndlZWtZZWFyIC8vPT4gMjAxNVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHdlZWtZZWFyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBwb3NzaWJseUNhY2hlZFdlZWtEYXRhKHRoaXMpLndlZWtZZWFyIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgd2VlayBudW1iZXIgb2YgdGhlIHdlZWsgeWVhciAoMS01MmlzaCkuXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkud2Vla051bWJlciAvLz0+IDIxXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgd2Vla051bWJlcigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gcG9zc2libHlDYWNoZWRXZWVrRGF0YSh0aGlzKS53ZWVrTnVtYmVyIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGF5IG9mIHRoZSB3ZWVrLlxuICAgKiAxIGlzIE1vbmRheSBhbmQgNyBpcyBTdW5kYXlcbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDExLCAzMSkud2Vla2RheSAvLz0+IDRcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB3ZWVrZGF5KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBwb3NzaWJseUNhY2hlZFdlZWtEYXRhKHRoaXMpLndlZWtkYXkgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgZGF0ZSBpcyBvbiBhIHdlZWtlbmQgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbGUsIGZhbHNlIG90aGVyd2lzZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1dlZWtlbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCAmJiB0aGlzLmxvYy5nZXRXZWVrZW5kRGF5cygpLmluY2x1ZGVzKHRoaXMud2Vla2RheSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkYXkgb2YgdGhlIHdlZWsgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbGUuXG4gICAqIDEgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayBhbmQgNyBpcyB0aGUgbGFzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAqIElmIHRoZSBsb2NhbGUgYXNzaWducyBTdW5kYXkgYXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlaywgdGhlbiBhIGRhdGUgd2hpY2ggaXMgYSBTdW5kYXkgd2lsbCByZXR1cm4gMSxcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldCBsb2NhbFdlZWtkYXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHBvc3NpYmx5Q2FjaGVkTG9jYWxXZWVrRGF0YSh0aGlzKS53ZWVrZGF5IDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgd2VlayBudW1iZXIgb2YgdGhlIHdlZWsgeWVhciBhY2NvcmRpbmcgdG8gdGhlIGxvY2FsZS4gRGlmZmVyZW50IGxvY2FsZXMgYXNzaWduIHdlZWsgbnVtYmVycyBkaWZmZXJlbnRseSxcbiAgICogYmVjYXVzZSB0aGUgd2VlayBjYW4gc3RhcnQgb24gZGlmZmVyZW50IGRheXMgb2YgdGhlIHdlZWsgKHNlZSBsb2NhbFdlZWtkYXkpIGFuZCBiZWNhdXNlIGEgZGlmZmVyZW50IG51bWJlciBvZiBkYXlzXG4gICAqIGlzIHJlcXVpcmVkIGZvciBhIHdlZWsgdG8gY291bnQgYXMgdGhlIGZpcnN0IHdlZWsgb2YgYSB5ZWFyLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGxvY2FsV2Vla051bWJlcigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gcG9zc2libHlDYWNoZWRMb2NhbFdlZWtEYXRhKHRoaXMpLndlZWtOdW1iZXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB3ZWVrIHllYXIgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbGUuIERpZmZlcmVudCBsb2NhbGVzIGFzc2lnbiB3ZWVrIG51bWJlcnMgKGFuZCB0aGVyZWZvciB3ZWVrIHllYXJzKVxuICAgKiBkaWZmZXJlbnRseSwgc2VlIGxvY2FsV2Vla051bWJlci5cbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldCBsb2NhbFdlZWtZZWFyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBwb3NzaWJseUNhY2hlZExvY2FsV2Vla0RhdGEodGhpcykud2Vla1llYXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBvcmRpbmFsIChtZWFuaW5nIHRoZSBkYXkgb2YgdGhlIHllYXIpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5vcmRpbmFsIC8vPT4gMTQ1XG4gICAqIEB0eXBlIHtudW1iZXJ8RGF0ZVRpbWV9XG4gICAqL1xuICBnZXQgb3JkaW5hbCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gZ3JlZ29yaWFuVG9PcmRpbmFsKHRoaXMuYykub3JkaW5hbCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIHNob3J0IG1vbnRoIG5hbWUsIHN1Y2ggYXMgJ09jdCcuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAxMCwgMzApLm1vbnRoU2hvcnQgLy89PiBPY3RcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBtb250aFNob3J0KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbmZvLm1vbnRocyhcInNob3J0XCIsIHsgbG9jT2JqOiB0aGlzLmxvYyB9KVt0aGlzLm1vbnRoIC0gMV0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaHVtYW4gcmVhZGFibGUgbG9uZyBtb250aCBuYW1lLCBzdWNoIGFzICdPY3RvYmVyJy5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDEwLCAzMCkubW9udGhMb25nIC8vPT4gT2N0b2JlclxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG1vbnRoTG9uZygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW5mby5tb250aHMoXCJsb25nXCIsIHsgbG9jT2JqOiB0aGlzLmxvYyB9KVt0aGlzLm1vbnRoIC0gMV0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaHVtYW4gcmVhZGFibGUgc2hvcnQgd2Vla2RheSwgc3VjaCBhcyAnTW9uJy5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDEwLCAzMCkud2Vla2RheVNob3J0IC8vPT4gTW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgd2Vla2RheVNob3J0KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbmZvLndlZWtkYXlzKFwic2hvcnRcIiwgeyBsb2NPYmo6IHRoaXMubG9jIH0pW3RoaXMud2Vla2RheSAtIDFdIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIGxvbmcgd2Vla2RheSwgc3VjaCBhcyAnTW9uZGF5Jy5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDEwLCAzMCkud2Vla2RheUxvbmcgLy89PiBNb25kYXlcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCB3ZWVrZGF5TG9uZygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW5mby53ZWVrZGF5cyhcImxvbmdcIiwgeyBsb2NPYmo6IHRoaXMubG9jIH0pW3RoaXMud2Vla2RheSAtIDFdIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIFVUQyBvZmZzZXQgb2YgdGhpcyBEYXRlVGltZSBpbiBtaW51dGVzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLm9mZnNldCAvLz0+IC0yNDBcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKCkub2Zmc2V0IC8vPT4gMFxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG9mZnNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gK3RoaXMubyA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNob3J0IGh1bWFuIG5hbWUgZm9yIHRoZSB6b25lJ3MgY3VycmVudCBvZmZzZXQsIGZvciBleGFtcGxlIFwiRVNUXCIgb3IgXCJFRFRcIi5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgb2Zmc2V0TmFtZVNob3J0KCkge1xuICAgIGlmICh0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnpvbmUub2Zmc2V0TmFtZSh0aGlzLnRzLCB7XG4gICAgICAgIGZvcm1hdDogXCJzaG9ydFwiLFxuICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvbmcgaHVtYW4gbmFtZSBmb3IgdGhlIHpvbmUncyBjdXJyZW50IG9mZnNldCwgZm9yIGV4YW1wbGUgXCJFYXN0ZXJuIFN0YW5kYXJkIFRpbWVcIiBvciBcIkVhc3Rlcm4gRGF5bGlnaHQgVGltZVwiLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBvZmZzZXROYW1lTG9uZygpIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gdGhpcy56b25lLm9mZnNldE5hbWUodGhpcy50cywge1xuICAgICAgICBmb3JtYXQ6IFwibG9uZ1wiLFxuICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgd2hldGhlciB0aGlzIHpvbmUncyBvZmZzZXQgZXZlciBjaGFuZ2VzLCBhcyBpbiBhIERTVC5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNPZmZzZXRGaXhlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy56b25lLmlzVW5pdmVyc2FsIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgd2hldGhlciB0aGUgRGF0ZVRpbWUgaXMgaW4gYSBEU1QuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzSW5EU1QoKSB7XG4gICAgaWYgKHRoaXMuaXNPZmZzZXRGaXhlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLm9mZnNldCA+IHRoaXMuc2V0KHsgbW9udGg6IDEsIGRheTogMSB9KS5vZmZzZXQgfHxcbiAgICAgICAgdGhpcy5vZmZzZXQgPiB0aGlzLnNldCh7IG1vbnRoOiA1IH0pLm9mZnNldFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRob3NlIERhdGVUaW1lcyB3aGljaCBoYXZlIHRoZSBzYW1lIGxvY2FsIHRpbWUgYXMgdGhpcyBEYXRlVGltZSwgYnV0IGEgZGlmZmVyZW50IG9mZnNldCBmcm9tIFVUQ1xuICAgKiBpbiB0aGlzIERhdGVUaW1lJ3Mgem9uZS4gRHVyaW5nIERTVCBjaGFuZ2VzIGxvY2FsIHRpbWUgY2FuIGJlIGFtYmlndW91cywgZm9yIGV4YW1wbGVcbiAgICogYDIwMjMtMTAtMjlUMDI6MzA6MDBgIGluIGBFdXJvcGUvQmVybGluYCBjYW4gaGF2ZSBvZmZzZXQgYCswMTowMGAgb3IgYCswMjowMGAuXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGJvdGggcG9zc2libGUgRGF0ZVRpbWVzIGlmIHRoaXMgRGF0ZVRpbWUncyBsb2NhbCB0aW1lIGlzIGFtYmlndW91cy5cbiAgICogQHJldHVybnMge0RhdGVUaW1lW119XG4gICAqL1xuICBnZXRQb3NzaWJsZU9mZnNldHMoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQgfHwgdGhpcy5pc09mZnNldEZpeGVkKSB7XG4gICAgICByZXR1cm4gW3RoaXNdO1xuICAgIH1cbiAgICBjb25zdCBkYXlNcyA9IDg2NDAwMDAwO1xuICAgIGNvbnN0IG1pbnV0ZU1zID0gNjAwMDA7XG4gICAgY29uc3QgbG9jYWxUUyA9IG9ialRvTG9jYWxUUyh0aGlzLmMpO1xuICAgIGNvbnN0IG9FYXJsaWVyID0gdGhpcy56b25lLm9mZnNldChsb2NhbFRTIC0gZGF5TXMpO1xuICAgIGNvbnN0IG9MYXRlciA9IHRoaXMuem9uZS5vZmZzZXQobG9jYWxUUyArIGRheU1zKTtcblxuICAgIGNvbnN0IG8xID0gdGhpcy56b25lLm9mZnNldChsb2NhbFRTIC0gb0VhcmxpZXIgKiBtaW51dGVNcyk7XG4gICAgY29uc3QgbzIgPSB0aGlzLnpvbmUub2Zmc2V0KGxvY2FsVFMgLSBvTGF0ZXIgKiBtaW51dGVNcyk7XG4gICAgaWYgKG8xID09PSBvMikge1xuICAgICAgcmV0dXJuIFt0aGlzXTtcbiAgICB9XG4gICAgY29uc3QgdHMxID0gbG9jYWxUUyAtIG8xICogbWludXRlTXM7XG4gICAgY29uc3QgdHMyID0gbG9jYWxUUyAtIG8yICogbWludXRlTXM7XG4gICAgY29uc3QgYzEgPSB0c1RvT2JqKHRzMSwgbzEpO1xuICAgIGNvbnN0IGMyID0gdHNUb09iaih0czIsIG8yKTtcbiAgICBpZiAoXG4gICAgICBjMS5ob3VyID09PSBjMi5ob3VyICYmXG4gICAgICBjMS5taW51dGUgPT09IGMyLm1pbnV0ZSAmJlxuICAgICAgYzEuc2Vjb25kID09PSBjMi5zZWNvbmQgJiZcbiAgICAgIGMxLm1pbGxpc2Vjb25kID09PSBjMi5taWxsaXNlY29uZFxuICAgICkge1xuICAgICAgcmV0dXJuIFtjbG9uZSh0aGlzLCB7IHRzOiB0czEgfSksIGNsb25lKHRoaXMsIHsgdHM6IHRzMiB9KV07XG4gICAgfVxuICAgIHJldHVybiBbdGhpc107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgRGF0ZVRpbWUgaXMgaW4gYSBsZWFwIHllYXIsIGZhbHNlIG90aGVyd2lzZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE2KS5pc0luTGVhcFllYXIgLy89PiB0cnVlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTMpLmlzSW5MZWFwWWVhciAvLz0+IGZhbHNlXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzSW5MZWFwWWVhcigpIHtcbiAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLnllYXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIGluIHRoaXMgRGF0ZVRpbWUncyBtb250aFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE2LCAyKS5kYXlzSW5Nb250aCAvLz0+IDI5XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYsIDMpLmRheXNJbk1vbnRoIC8vPT4gMzFcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBkYXlzSW5Nb250aCgpIHtcbiAgICByZXR1cm4gZGF5c0luTW9udGgodGhpcy55ZWFyLCB0aGlzLm1vbnRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGlzIERhdGVUaW1lJ3MgeWVhclxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE2KS5kYXlzSW5ZZWFyIC8vPT4gMzY2XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTMpLmRheXNJblllYXIgLy89PiAzNjVcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBkYXlzSW5ZZWFyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBkYXlzSW5ZZWFyKHRoaXMueWVhcikgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHdlZWtzIGluIHRoaXMgRGF0ZVRpbWUncyB5ZWFyXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDA0KS53ZWVrc0luV2Vla1llYXIgLy89PiA1M1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDEzKS53ZWVrc0luV2Vla1llYXIgLy89PiA1MlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHdlZWtzSW5XZWVrWWVhcigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gd2Vla3NJbldlZWtZZWFyKHRoaXMud2Vla1llYXIpIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB3ZWVrcyBpbiB0aGlzIERhdGVUaW1lJ3MgbG9jYWwgd2VlayB5ZWFyXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMjAsIDYsIHtsb2NhbGU6ICdlbi1VUyd9KS53ZWVrc0luTG9jYWxXZWVrWWVhciAvLz0+IDUyXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMjAsIDYsIHtsb2NhbGU6ICdkZS1ERSd9KS53ZWVrc0luTG9jYWxXZWVrWWVhciAvLz0+IDUzXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgd2Vla3NJbkxvY2FsV2Vla1llYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFxuICAgICAgPyB3ZWVrc0luV2Vla1llYXIoXG4gICAgICAgICAgdGhpcy5sb2NhbFdlZWtZZWFyLFxuICAgICAgICAgIHRoaXMubG9jLmdldE1pbkRheXNJbkZpcnN0V2VlaygpLFxuICAgICAgICAgIHRoaXMubG9jLmdldFN0YXJ0T2ZXZWVrKClcbiAgICAgICAgKVxuICAgICAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVzb2x2ZWQgSW50bCBvcHRpb25zIGZvciB0aGlzIERhdGVUaW1lLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBiZWhhdmlvciBvZiBmb3JtYXR0aW5nIG1ldGhvZHNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSB0aGUgc2FtZSBvcHRpb25zIGFzIHRvTG9jYWxlU3RyaW5nXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIHJlc29sdmVkTG9jYWxlT3B0aW9ucyhvcHRzID0ge30pIHtcbiAgICBjb25zdCB7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBjYWxlbmRhciB9ID0gRm9ybWF0dGVyLmNyZWF0ZShcbiAgICAgIHRoaXMubG9jLmNsb25lKG9wdHMpLFxuICAgICAgb3B0c1xuICAgICkucmVzb2x2ZWRPcHRpb25zKHRoaXMpO1xuICAgIHJldHVybiB7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhcjogY2FsZW5kYXIgfTtcbiAgfVxuXG4gIC8vIFRSQU5TRk9STVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gVVRDLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqXG4gICAqIEVxdWl2YWxlbnQgdG8ge0BsaW5rIERhdGVUaW1lI3NldFpvbmV9KCd1dGMnKVxuICAgKiBAcGFyYW0ge251bWJlcn0gW29mZnNldD0wXSAtIG9wdGlvbmFsbHksIGFuIG9mZnNldCBmcm9tIFVUQyBpbiBtaW51dGVzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cz17fV0gLSBvcHRpb25zIHRvIHBhc3MgdG8gYHNldFpvbmUoKWBcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICB0b1VUQyhvZmZzZXQgPSAwLCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5zZXRab25lKEZpeGVkT2Zmc2V0Wm9uZS5pbnN0YW5jZShvZmZzZXQpLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gdGhlIGhvc3QncyBsb2NhbCB6b25lLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqXG4gICAqIEVxdWl2YWxlbnQgdG8gYHNldFpvbmUoJ2xvY2FsJylgXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgdG9Mb2NhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZXRab25lKFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gc3BlY2lmaWVkIHpvbmUuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhlIHNldHRlciBrZWVwcyB0aGUgdW5kZXJseWluZyB0aW1lIHRoZSBzYW1lIChhcyBpbiwgdGhlIHNhbWUgdGltZXN0YW1wKSwgYnV0IHRoZSBuZXcgaW5zdGFuY2Ugd2lsbCByZXBvcnQgZGlmZmVyZW50IGxvY2FsIHRpbWVzIGFuZCBjb25zaWRlciBEU1RzIHdoZW4gbWFraW5nIGNvbXB1dGF0aW9ucywgYXMgd2l0aCB7QGxpbmsgRGF0ZVRpbWUjcGx1c30uIFlvdSBtYXkgd2lzaCB0byB1c2Uge0BsaW5rIERhdGVUaW1lI3RvTG9jYWx9IGFuZCB7QGxpbmsgRGF0ZVRpbWUjdG9VVEN9IHdoaWNoIHByb3ZpZGUgc2ltcGxlIGNvbnZlbmllbmNlIHdyYXBwZXJzIGZvciBjb21tb25seSB1c2VkIHpvbmVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbem9uZT0nbG9jYWwnXSAtIGEgem9uZSBpZGVudGlmaWVyLiBBcyBhIHN0cmluZywgdGhhdCBjYW4gYmUgYW55IElBTkEgem9uZSBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgZW52aXJvbm1lbnQsIG9yIGEgZml4ZWQtb2Zmc2V0IG5hbWUgb2YgdGhlIGZvcm0gJ1VUQyszJywgb3IgdGhlIHN0cmluZ3MgJ2xvY2FsJyBvciAndXRjJy4gWW91IG1heSBhbHNvIHN1cHBseSBhbiBpbnN0YW5jZSBvZiBhIHtAbGluayBEYXRlVGltZSNab25lfSBjbGFzcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMua2VlcExvY2FsVGltZT1mYWxzZV0gLSBJZiB0cnVlLCBhZGp1c3QgdGhlIHVuZGVybHlpbmcgdGltZSBzbyB0aGF0IHRoZSBsb2NhbCB0aW1lIHN0YXlzIHRoZSBzYW1lLCBidXQgaW4gdGhlIHRhcmdldCB6b25lLiBZb3Ugc2hvdWxkIHJhcmVseSBuZWVkIHRoaXMuXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc2V0Wm9uZSh6b25lLCB7IGtlZXBMb2NhbFRpbWUgPSBmYWxzZSwga2VlcENhbGVuZGFyVGltZSA9IGZhbHNlIH0gPSB7fSkge1xuICAgIHpvbmUgPSBub3JtYWxpemVab25lKHpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgICBpZiAoem9uZS5lcXVhbHModGhpcy56b25lKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIGlmICghem9uZS5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCh1bnN1cHBvcnRlZFpvbmUoem9uZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbmV3VFMgPSB0aGlzLnRzO1xuICAgICAgaWYgKGtlZXBMb2NhbFRpbWUgfHwga2VlcENhbGVuZGFyVGltZSkge1xuICAgICAgICBjb25zdCBvZmZzZXRHdWVzcyA9IHpvbmUub2Zmc2V0KHRoaXMudHMpO1xuICAgICAgICBjb25zdCBhc09iaiA9IHRoaXMudG9PYmplY3QoKTtcbiAgICAgICAgW25ld1RTXSA9IG9ialRvVFMoYXNPYmosIG9mZnNldEd1ZXNzLCB6b25lKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHRzOiBuZXdUUywgem9uZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG9yIG91dHB1dENhbGVuZGFyLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIC0gdGhlIHByb3BlcnRpZXMgdG8gc2V0XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5yZWNvbmZpZ3VyZSh7IGxvY2FsZTogJ2VuLUdCJyB9KVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHJlY29uZmlndXJlKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyIH0gPSB7fSkge1xuICAgIGNvbnN0IGxvYyA9IHRoaXMubG9jLmNsb25lKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyIH0pO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IGxvYyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBsb2NhbGUuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS5cbiAgICogSnVzdCBhIGNvbnZlbmllbnQgYWxpYXMgZm9yIHJlY29uZmlndXJlKHsgbG9jYWxlIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5zZXRMb2NhbGUoJ2VuLUdCJylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzZXRMb2NhbGUobG9jYWxlKSB7XG4gICAgcmV0dXJuIHRoaXMucmVjb25maWd1cmUoeyBsb2NhbGUgfSk7XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgdmFsdWVzIG9mIHNwZWNpZmllZCB1bml0cy4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLlxuICAgKiBZb3UgY2FuIG9ubHkgc2V0IHVuaXRzIHdpdGggdGhpcyBtZXRob2Q7IGZvciBcInNldHRpbmdcIiBtZXRhZGF0YSwgc2VlIHtAbGluayBEYXRlVGltZSNyZWNvbmZpZ3VyZX0gYW5kIHtAbGluayBEYXRlVGltZSNzZXRab25lfS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgYWxzbyBzdXBwb3J0cyBzZXR0aW5nIGxvY2FsZS1iYXNlZCB3ZWVrIHVuaXRzLCBpLmUuIGBsb2NhbFdlZWtkYXlgLCBgbG9jYWxXZWVrTnVtYmVyYCBhbmQgYGxvY2FsV2Vla1llYXJgLlxuICAgKiBUaGV5IGNhbm5vdCBiZSBtaXhlZCB3aXRoIElTTy13ZWVrIHVuaXRzIGxpa2UgYHdlZWtkYXlgLlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIC0gYSBtYXBwaW5nIG9mIHVuaXRzIHRvIG51bWJlcnNcbiAgICogQGV4YW1wbGUgZHQuc2V0KHsgeWVhcjogMjAxNyB9KVxuICAgKiBAZXhhbXBsZSBkdC5zZXQoeyBob3VyOiA4LCBtaW51dGU6IDMwIH0pXG4gICAqIEBleGFtcGxlIGR0LnNldCh7IHdlZWtkYXk6IDUgfSlcbiAgICogQGV4YW1wbGUgZHQuc2V0KHsgeWVhcjogMjAwNSwgb3JkaW5hbDogMjM0IH0pXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc2V0KHZhbHVlcykge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVPYmplY3QodmFsdWVzLCBub3JtYWxpemVVbml0V2l0aExvY2FsV2Vla3MpO1xuICAgIGNvbnN0IHsgbWluRGF5c0luRmlyc3RXZWVrLCBzdGFydE9mV2VlayB9ID0gdXNlc0xvY2FsV2Vla1ZhbHVlcyhub3JtYWxpemVkLCB0aGlzLmxvYyk7XG5cbiAgICBjb25zdCBzZXR0aW5nV2Vla1N0dWZmID1cbiAgICAgICAgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQud2Vla1llYXIpIHx8XG4gICAgICAgICFpc1VuZGVmaW5lZChub3JtYWxpemVkLndlZWtOdW1iZXIpIHx8XG4gICAgICAgICFpc1VuZGVmaW5lZChub3JtYWxpemVkLndlZWtkYXkpLFxuICAgICAgY29udGFpbnNPcmRpbmFsID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQub3JkaW5hbCksXG4gICAgICBjb250YWluc0dyZWdvclllYXIgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC55ZWFyKSxcbiAgICAgIGNvbnRhaW5zR3JlZ29yTUQgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5tb250aCkgfHwgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQuZGF5KSxcbiAgICAgIGNvbnRhaW5zR3JlZ29yID0gY29udGFpbnNHcmVnb3JZZWFyIHx8IGNvbnRhaW5zR3JlZ29yTUQsXG4gICAgICBkZWZpbml0ZVdlZWtEZWYgPSBub3JtYWxpemVkLndlZWtZZWFyIHx8IG5vcm1hbGl6ZWQud2Vla051bWJlcjtcblxuICAgIGlmICgoY29udGFpbnNHcmVnb3IgfHwgY29udGFpbnNPcmRpbmFsKSAmJiBkZWZpbml0ZVdlZWtEZWYpIHtcbiAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcihcbiAgICAgICAgXCJDYW4ndCBtaXggd2Vla1llYXIvd2Vla051bWJlciB1bml0cyB3aXRoIHllYXIvbW9udGgvZGF5IG9yIG9yZGluYWxzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5zR3JlZ29yTUQgJiYgY29udGFpbnNPcmRpbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoXCJDYW4ndCBtaXggb3JkaW5hbCBkYXRlcyB3aXRoIG1vbnRoL2RheVwiKTtcbiAgICB9XG5cbiAgICBsZXQgbWl4ZWQ7XG4gICAgaWYgKHNldHRpbmdXZWVrU3R1ZmYpIHtcbiAgICAgIG1peGVkID0gd2Vla1RvR3JlZ29yaWFuKFxuICAgICAgICB7IC4uLmdyZWdvcmlhblRvV2Vlayh0aGlzLmMsIG1pbkRheXNJbkZpcnN0V2Vlaywgc3RhcnRPZldlZWspLCAuLi5ub3JtYWxpemVkIH0sXG4gICAgICAgIG1pbkRheXNJbkZpcnN0V2VlayxcbiAgICAgICAgc3RhcnRPZldlZWtcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghaXNVbmRlZmluZWQobm9ybWFsaXplZC5vcmRpbmFsKSkge1xuICAgICAgbWl4ZWQgPSBvcmRpbmFsVG9HcmVnb3JpYW4oeyAuLi5ncmVnb3JpYW5Ub09yZGluYWwodGhpcy5jKSwgLi4ubm9ybWFsaXplZCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWl4ZWQgPSB7IC4uLnRoaXMudG9PYmplY3QoKSwgLi4ubm9ybWFsaXplZCB9O1xuXG4gICAgICAvLyBpZiB3ZSBkaWRuJ3Qgc2V0IHRoZSBkYXkgYnV0IHdlIGVuZGVkIHVwIG9uIGFuIG92ZXJmbG93IGRhdGUsXG4gICAgICAvLyB1c2UgdGhlIGxhc3QgZGF5IG9mIHRoZSByaWdodCBtb250aFxuICAgICAgaWYgKGlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQuZGF5KSkge1xuICAgICAgICBtaXhlZC5kYXkgPSBNYXRoLm1pbihkYXlzSW5Nb250aChtaXhlZC55ZWFyLCBtaXhlZC5tb250aCksIG1peGVkLmRheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgW3RzLCBvXSA9IG9ialRvVFMobWl4ZWQsIHRoaXMubywgdGhpcy56b25lKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywgeyB0cywgbyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBwZXJpb2Qgb2YgdGltZSB0byB0aGlzIERhdGVUaW1lIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBEYXRlVGltZVxuICAgKlxuICAgKiBBZGRpbmcgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG9yIG1pbGxpc2Vjb25kcyBpbmNyZWFzZXMgdGhlIHRpbWVzdGFtcCBieSB0aGUgcmlnaHQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gQWRkaW5nIGRheXMsIG1vbnRocywgb3IgeWVhcnMgc2hpZnRzIHRoZSBjYWxlbmRhciwgYWNjb3VudGluZyBmb3IgRFNUcyBhbmQgbGVhcCB5ZWFycyBhbG9uZyB0aGUgd2F5LiBUaHVzLCBgZHQucGx1cyh7IGhvdXJzOiAyNCB9KWAgbWF5IHJlc3VsdCBpbiBhIGRpZmZlcmVudCB0aW1lIHRoYW4gYGR0LnBsdXMoeyBkYXlzOiAxIH0pYCBpZiB0aGVyZSdzIGEgRFNUIHNoaWZ0IGluIGJldHdlZW4uXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIGFkZC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KClcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cygxMjMpIC8vfj4gaW4gMTIzIG1pbGxpc2Vjb25kc1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgbWludXRlczogMTUgfSkgLy9+PiBpbiAxNSBtaW51dGVzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pIC8vfj4gdGhpcyB0aW1lIHRvbW9ycm93XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAtMSB9KSAvL34+IHRoaXMgdGltZSB5ZXN0ZXJkYXlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGhvdXJzOiAzLCBtaW51dGVzOiAxMyB9KSAvL34+IGluIDMgaHIsIDEzIG1pblxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMywgbWludXRlczogMTMgfSkpIC8vfj4gaW4gMyBociwgMTMgbWluXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgcGx1cyhkdXJhdGlvbikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywgYWRqdXN0VGltZSh0aGlzLCBkdXIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJ0cmFjdCBhIHBlcmlvZCBvZiB0aW1lIHRvIHRoaXMgRGF0ZVRpbWUgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lXG4gICAqIFNlZSB7QGxpbmsgRGF0ZVRpbWUjcGx1c31cbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBhbW91bnQgdG8gc3VidHJhY3QuIEVpdGhlciBhIEx1eG9uIER1cmF0aW9uLCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIHRoZSBvYmplY3QgYXJndW1lbnQgdG8gRHVyYXRpb24uZnJvbU9iamVjdCgpXG4gICBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIG1pbnVzKGR1cmF0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLm5lZ2F0ZSgpO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCBhZGp1c3RUaW1lKHRoaXMsIGR1cikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhpcyBEYXRlVGltZSB0byB0aGUgYmVnaW5uaW5nIG9mIGEgdW5pdCBvZiB0aW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIFRoZSB1bml0IHRvIGdvIHRvIHRoZSBiZWdpbm5pbmcgb2YuIENhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsIG9yICdtaWxsaXNlY29uZCcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnVzZUxvY2FsZVdlZWtzPWZhbHNlXSAtIElmIHRydWUsIHVzZSB3ZWVrcyBiYXNlZCBvbiB0aGUgbG9jYWxlLCBpLmUuIHVzZSB0aGUgbG9jYWxlLWRlcGVuZGVudCBzdGFydCBvZiB0aGUgd2Vla1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5zdGFydE9mKCdtb250aCcpLnRvSVNPRGF0ZSgpOyAvLz0+ICcyMDE0LTAzLTAxJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5zdGFydE9mKCd5ZWFyJykudG9JU09EYXRlKCk7IC8vPT4gJzIwMTQtMDEtMDEnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLnN0YXJ0T2YoJ3dlZWsnKS50b0lTT0RhdGUoKTsgLy89PiAnMjAxNC0wMy0wMycsIHdlZWtzIGFsd2F5cyBzdGFydCBvbiBNb25kYXlzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5zdGFydE9mKCdkYXknKS50b0lTT1RpbWUoKTsgLy89PiAnMDA6MDAuMDAwLTA1OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzLCA1LCAzMCkuc3RhcnRPZignaG91cicpLnRvSVNPVGltZSgpOyAvLz0+ICcwNTowMDowMC4wMDAtMDU6MDAnXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhcnRPZih1bml0LCB7IHVzZUxvY2FsZVdlZWtzID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuXG4gICAgY29uc3QgbyA9IHt9LFxuICAgICAgbm9ybWFsaXplZFVuaXQgPSBEdXJhdGlvbi5ub3JtYWxpemVVbml0KHVuaXQpO1xuICAgIHN3aXRjaCAobm9ybWFsaXplZFVuaXQpIHtcbiAgICAgIGNhc2UgXCJ5ZWFyc1wiOlxuICAgICAgICBvLm1vbnRoID0gMTtcbiAgICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGNhc2UgXCJxdWFydGVyc1wiOlxuICAgICAgY2FzZSBcIm1vbnRoc1wiOlxuICAgICAgICBvLmRheSA9IDE7XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlIFwid2Vla3NcIjpcbiAgICAgIGNhc2UgXCJkYXlzXCI6XG4gICAgICAgIG8uaG91ciA9IDA7XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlIFwiaG91cnNcIjpcbiAgICAgICAgby5taW51dGUgPSAwO1xuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgY2FzZSBcIm1pbnV0ZXNcIjpcbiAgICAgICAgby5zZWNvbmQgPSAwO1xuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgY2FzZSBcInNlY29uZHNcIjpcbiAgICAgICAgby5taWxsaXNlY29uZCA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm1pbGxpc2Vjb25kc1wiOlxuICAgICAgICBicmVhaztcbiAgICAgIC8vIG5vIGRlZmF1bHQsIGludmFsaWQgdW5pdHMgdGhyb3cgaW4gbm9ybWFsaXplVW5pdCgpXG4gICAgfVxuXG4gICAgaWYgKG5vcm1hbGl6ZWRVbml0ID09PSBcIndlZWtzXCIpIHtcbiAgICAgIGlmICh1c2VMb2NhbGVXZWVrcykge1xuICAgICAgICBjb25zdCBzdGFydE9mV2VlayA9IHRoaXMubG9jLmdldFN0YXJ0T2ZXZWVrKCk7XG4gICAgICAgIGNvbnN0IHsgd2Vla2RheSB9ID0gdGhpcztcbiAgICAgICAgaWYgKHdlZWtkYXkgPCBzdGFydE9mV2Vlaykge1xuICAgICAgICAgIG8ud2Vla051bWJlciA9IHRoaXMud2Vla051bWJlciAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgby53ZWVrZGF5ID0gc3RhcnRPZldlZWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvLndlZWtkYXkgPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub3JtYWxpemVkVW5pdCA9PT0gXCJxdWFydGVyc1wiKSB7XG4gICAgICBjb25zdCBxID0gTWF0aC5jZWlsKHRoaXMubW9udGggLyAzKTtcbiAgICAgIG8ubW9udGggPSAocSAtIDEpICogMyArIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2V0KG8pO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhpcyBEYXRlVGltZSB0byB0aGUgZW5kIChtZWFuaW5nIHRoZSBsYXN0IG1pbGxpc2Vjb25kKSBvZiBhIHVuaXQgb2YgdGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIFRoZSB1bml0IHRvIGdvIHRvIHRoZSBlbmQgb2YuIENhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsIG9yICdtaWxsaXNlY29uZCcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnVzZUxvY2FsZVdlZWtzPWZhbHNlXSAtIElmIHRydWUsIHVzZSB3ZWVrcyBiYXNlZCBvbiB0aGUgbG9jYWxlLCBpLmUuIHVzZSB0aGUgbG9jYWxlLWRlcGVuZGVudCBzdGFydCBvZiB0aGUgd2Vla1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5lbmRPZignbW9udGgnKS50b0lTTygpOyAvLz0+ICcyMDE0LTAzLTMxVDIzOjU5OjU5Ljk5OS0wNTowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuZW5kT2YoJ3llYXInKS50b0lTTygpOyAvLz0+ICcyMDE0LTEyLTMxVDIzOjU5OjU5Ljk5OS0wNTowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuZW5kT2YoJ3dlZWsnKS50b0lTTygpOyAvLyA9PiAnMjAxNC0wMy0wOVQyMzo1OTo1OS45OTktMDU6MDAnLCB3ZWVrcyBzdGFydCBvbiBNb25kYXlzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5lbmRPZignZGF5JykudG9JU08oKTsgLy89PiAnMjAxNC0wMy0wM1QyMzo1OTo1OS45OTktMDU6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5lbmRPZignaG91cicpLnRvSVNPKCk7IC8vPT4gJzIwMTQtMDMtMDNUMDU6NTk6NTkuOTk5LTA1OjAwJ1xuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIGVuZE9mKHVuaXQsIG9wdHMpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkXG4gICAgICA/IHRoaXMucGx1cyh7IFt1bml0XTogMSB9KVxuICAgICAgICAgIC5zdGFydE9mKHVuaXQsIG9wdHMpXG4gICAgICAgICAgLm1pbnVzKDEpXG4gICAgICA6IHRoaXM7XG4gIH1cblxuICAvLyBPVVRQVVRcblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb3JtYXQgc3RyaW5nLlxuICAgKiAqKllvdSBtYXkgbm90IHdhbnQgdGhpcy4qKiBTZWUge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3IgYSBtb3JlIGZsZXhpYmxlIGZvcm1hdHRpbmcgdG9vbC4gRm9yIGEgdGFibGUgb2YgdG9rZW5zIGFuZCB0aGVpciBpbnRlcnByZXRhdGlvbnMsIHNlZSBbaGVyZV0oaHR0cHM6Ly9tb21lbnQuZ2l0aHViLmlvL2x1eG9uLyMvZm9ybWF0dGluZz9pZD10YWJsZS1vZi10b2tlbnMpLlxuICAgKiBEZWZhdWx0cyB0byBlbi1VUyBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkLCByZWdhcmRsZXNzIG9mIHRoZSBzeXN0ZW0ncyBsb2NhbGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbXQgLSB0aGUgZm9ybWF0IHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdHMgdG8gb3ZlcnJpZGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbiB0aGlzIERhdGVUaW1lXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvRm9ybWF0KCd5eXl5IExMTCBkZCcpIC8vPT4gJzIwMTcgQXByIDIyJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoJ2ZyJykudG9Gb3JtYXQoJ3l5eXkgTExMIGRkJykgLy89PiAnMjAxNyBhdnIuIDIyJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0Zvcm1hdCgneXl5eSBMTEwgZGQnLCB7IGxvY2FsZTogXCJmclwiIH0pIC8vPT4gJzIwMTcgYXZyLiAyMidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Gb3JtYXQoXCJISCAnaG91cnMgYW5kJyBtbSAnbWludXRlcydcIikgLy89PiAnMjAgaG91cnMgYW5kIDU1IG1pbnV0ZXMnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvRm9ybWF0KGZtdCwgb3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFxuICAgICAgPyBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLnJlZGVmYXVsdFRvRU4ob3B0cykpLmZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyh0aGlzLCBmbXQpXG4gICAgICA6IElOVkFMSUQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxvY2FsaXplZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoaXMgZGF0ZS4gQWNjZXB0cyB0aGUgc2FtZSBvcHRpb25zIGFzIHRoZSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yIGFuZCBhbnkgcHJlc2V0cyBkZWZpbmVkIGJ5IEx1eG9uLCBzdWNoIGFzIGBEYXRlVGltZS5EQVRFX0ZVTExgIG9yIGBEYXRlVGltZS5USU1FX1NJTVBMRWAuXG4gICAqIFRoZSBleGFjdCBiZWhhdmlvciBvZiB0aGlzIG1ldGhvZCBpcyBicm93c2VyLXNwZWNpZmljLCBidXQgaW4gZ2VuZXJhbCBpdCB3aWxsIHJldHVybiBhbiBhcHByb3ByaWF0ZSByZXByZXNlbnRhdGlvblxuICAgKiBvZiB0aGUgRGF0ZVRpbWUgaW4gdGhlIGFzc2lnbmVkIGxvY2FsZS5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXRcbiAgICogQHBhcmFtIGZvcm1hdE9wdHMge09iamVjdH0gLSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yIG9wdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdHMgdG8gb3ZlcnJpZGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbiB0aGlzIERhdGVUaW1lXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKCk7IC8vPT4gNC8yMC8yMDE3XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnNldExvY2FsZSgnZW4tZ2InKS50b0xvY2FsZVN0cmluZygpOyAvLz0+ICcyMC8wNC8yMDE3J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5EQVRFX0ZVTEwpOyAvLz0+ICdBcHJpbCAyMCwgMjAxNydcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURV9GVUxMLCB7IGxvY2FsZTogJ2ZyJyB9KTsgLy89PiAnMjggYW/Du3QgMjAyMidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuVElNRV9TSU1QTEUpOyAvLz0+ICcxMTozMiBBTSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURVRJTUVfU0hPUlQpOyAvLz0+ICc0LzIwLzIwMTcsIDExOjMyIEFNJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyh7IHdlZWtkYXk6ICdsb25nJywgbW9udGg6ICdsb25nJywgZGF5OiAnMi1kaWdpdCcgfSk7IC8vPT4gJ1RodXJzZGF5LCBBcHJpbCAyMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoeyB3ZWVrZGF5OiAnc2hvcnQnLCBtb250aDogJ3Nob3J0JywgZGF5OiAnMi1kaWdpdCcsIGhvdXI6ICcyLWRpZ2l0JywgbWludXRlOiAnMi1kaWdpdCcgfSk7IC8vPT4gJ1RodSwgQXByIDIwLCAxMToyNyBBTSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoeyBob3VyOiAnMi1kaWdpdCcsIG1pbnV0ZTogJzItZGlnaXQnLCBob3VyQ3ljbGU6ICdoMjMnIH0pOyAvLz0+ICcxMTozMidcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9Mb2NhbGVTdHJpbmcoZm9ybWF0T3B0cyA9IEZvcm1hdHMuREFURV9TSE9SVCwgb3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFxuICAgICAgPyBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLmNsb25lKG9wdHMpLCBmb3JtYXRPcHRzKS5mb3JtYXREYXRlVGltZSh0aGlzKVxuICAgICAgOiBJTlZBTElEO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZm9ybWF0IFwicGFydHNcIiwgbWVhbmluZyBpbmRpdmlkdWFsIHRva2VucyBhbG9uZyB3aXRoIG1ldGFkYXRhLiBUaGlzIGlzIGFsbG93cyBjYWxsZXJzIHRvIHBvc3QtcHJvY2VzcyBpbmRpdmlkdWFsIHNlY3Rpb25zIG9mIHRoZSBmb3JtYXR0ZWQgb3V0cHV0LlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlVGltZUZvcm1hdC9mb3JtYXRUb1BhcnRzXG4gICAqIEBwYXJhbSBvcHRzIHtPYmplY3R9IC0gSW50bC5EYXRlVGltZUZvcm1hdCBjb25zdHJ1Y3RvciBvcHRpb25zLCBzYW1lIGFzIGB0b0xvY2FsZVN0cmluZ2AuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlUGFydHMoKTsgLy89PiBbXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAnZGF5JywgdmFsdWU6ICcyNScgfSxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICdsaXRlcmFsJywgdmFsdWU6ICcvJyB9LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ21vbnRoJywgdmFsdWU6ICcwNScgfSxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICdsaXRlcmFsJywgdmFsdWU6ICcvJyB9LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ3llYXInLCB2YWx1ZTogJzE5ODInIH1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gXVxuICAgKi9cbiAgdG9Mb2NhbGVQYXJ0cyhvcHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkXG4gICAgICA/IEZvcm1hdHRlci5jcmVhdGUodGhpcy5sb2MuY2xvbmUob3B0cyksIG9wdHMpLmZvcm1hdERhdGVUaW1lUGFydHModGhpcylcbiAgICAgIDogW107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NNaWxsaXNlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZm9ybWF0IGlmIHRoZXkncmUgMFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN1cHByZXNzU2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIHNlY29uZHMgZnJvbSB0aGUgZm9ybWF0IGlmIHRoZXkncmUgMFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVPZmZzZXQ9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBvZmZzZXQsIHN1Y2ggYXMgJ1onIG9yICctMDQ6MDAnXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZXh0ZW5kZWRab25lPWZhbHNlXSAtIGFkZCB0aGUgdGltZSB6b25lIGZvcm1hdCBleHRlbnNpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmZvcm1hdD0nZXh0ZW5kZWQnXSAtIGNob29zZSBiZXR3ZWVuIHRoZSBiYXNpYyBhbmQgZXh0ZW5kZWQgZm9ybWF0XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgzLCA1LCAyNSkudG9JU08oKSAvLz0+ICcxOTgyLTA1LTI1VDAwOjAwOjAwLjAwMFonXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKCkgLy89PiAnMjAxNy0wNC0yMlQyMDo0NzowNS4zMzUtMDQ6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgLy89PiAnMjAxNy0wNC0yMlQyMDo0NzowNS4zMzUnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzIwMTcwNDIyVDIwNDcwNS4zMzUtMDQwMCdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU08oe1xuICAgIGZvcm1hdCA9IFwiZXh0ZW5kZWRcIixcbiAgICBzdXBwcmVzc1NlY29uZHMgPSBmYWxzZSxcbiAgICBzdXBwcmVzc01pbGxpc2Vjb25kcyA9IGZhbHNlLFxuICAgIGluY2x1ZGVPZmZzZXQgPSB0cnVlLFxuICAgIGV4dGVuZGVkWm9uZSA9IGZhbHNlLFxuICB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZXh0ID0gZm9ybWF0ID09PSBcImV4dGVuZGVkXCI7XG5cbiAgICBsZXQgYyA9IHRvSVNPRGF0ZSh0aGlzLCBleHQpO1xuICAgIGMgKz0gXCJUXCI7XG4gICAgYyArPSB0b0lTT1RpbWUodGhpcywgZXh0LCBzdXBwcmVzc1NlY29uZHMsIHN1cHByZXNzTWlsbGlzZWNvbmRzLCBpbmNsdWRlT2Zmc2V0LCBleHRlbmRlZFpvbmUpO1xuICAgIHJldHVybiBjO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lJ3MgZGF0ZSBjb21wb25lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MiwgNSwgMjUpLnRvSVNPRGF0ZSgpIC8vPT4gJzE5ODItMDUtMjUnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgyLCA1LCAyNSkudG9JU09EYXRlKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzE5ODIwNTI1J1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0lTT0RhdGUoeyBmb3JtYXQgPSBcImV4dGVuZGVkXCIgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0b0lTT0RhdGUodGhpcywgZm9ybWF0ID09PSBcImV4dGVuZGVkXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lJ3Mgd2VlayBkYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgyLCA1LCAyNSkudG9JU09XZWVrRGF0ZSgpIC8vPT4gJzE5ODItVzIxLTInXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPV2Vla0RhdGUoKSB7XG4gICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLCBcImtra2stJ1cnV1ctY1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSdzIHRpbWUgY29tcG9uZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN1cHByZXNzTWlsbGlzZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDBcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc1NlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDBcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0PXRydWVdIC0gaW5jbHVkZSB0aGUgb2Zmc2V0LCBzdWNoIGFzICdaJyBvciAnLTA0OjAwJ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmV4dGVuZGVkWm9uZT10cnVlXSAtIGFkZCB0aGUgdGltZSB6b25lIGZvcm1hdCBleHRlbnNpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlUHJlZml4PWZhbHNlXSAtIGluY2x1ZGUgdGhlIGBUYCBwcmVmaXhcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmZvcm1hdD0nZXh0ZW5kZWQnXSAtIGNob29zZSBiZXR3ZWVuIHRoZSBiYXNpYyBhbmQgZXh0ZW5kZWQgZm9ybWF0XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnNldCh7IGhvdXI6IDcsIG1pbnV0ZTogMzQgfSkudG9JU09UaW1lKCkgLy89PiAnMDc6MzQ6MTkuMzYxWidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKCkuc2V0KHsgaG91cjogNywgbWludXRlOiAzNCwgc2Vjb25kczogMCwgbWlsbGlzZWNvbmRzOiAwIH0pLnRvSVNPVGltZSh7IHN1cHByZXNzU2Vjb25kczogdHJ1ZSB9KSAvLz0+ICcwNzozNFonXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnNldCh7IGhvdXI6IDcsIG1pbnV0ZTogMzQgfSkudG9JU09UaW1lKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzA3MzQxOS4zNjFaJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5zZXQoeyBob3VyOiA3LCBtaW51dGU6IDM0IH0pLnRvSVNPVGltZSh7IGluY2x1ZGVQcmVmaXg6IHRydWUgfSkgLy89PiAnVDA3OjM0OjE5LjM2MVonXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPVGltZSh7XG4gICAgc3VwcHJlc3NNaWxsaXNlY29uZHMgPSBmYWxzZSxcbiAgICBzdXBwcmVzc1NlY29uZHMgPSBmYWxzZSxcbiAgICBpbmNsdWRlT2Zmc2V0ID0gdHJ1ZSxcbiAgICBpbmNsdWRlUHJlZml4ID0gZmFsc2UsXG4gICAgZXh0ZW5kZWRab25lID0gZmFsc2UsXG4gICAgZm9ybWF0ID0gXCJleHRlbmRlZFwiLFxuICB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IGMgPSBpbmNsdWRlUHJlZml4ID8gXCJUXCIgOiBcIlwiO1xuICAgIHJldHVybiAoXG4gICAgICBjICtcbiAgICAgIHRvSVNPVGltZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgZm9ybWF0ID09PSBcImV4dGVuZGVkXCIsXG4gICAgICAgIHN1cHByZXNzU2Vjb25kcyxcbiAgICAgICAgc3VwcHJlc3NNaWxsaXNlY29uZHMsXG4gICAgICAgIGluY2x1ZGVPZmZzZXQsXG4gICAgICAgIGV4dGVuZGVkWm9uZVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBSRkMgMjgyMi1jb21wYXRpYmxlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE0LCA3LCAxMykudG9SRkMyODIyKCkgLy89PiAnU3VuLCAxMyBKdWwgMjAxNCAwMDowMDowMCArMDAwMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvUkZDMjgyMigpIC8vPT4gJ1N1biwgMTMgSnVsIDIwMTQgMDA6MDA6MDAgLTA0MDAnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvUkZDMjgyMigpIHtcbiAgICByZXR1cm4gdG9UZWNoRm9ybWF0KHRoaXMsIFwiRUVFLCBkZCBMTEwgeXl5eSBISDptbTpzcyBaWlpcIiwgZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIEhUVFAgaGVhZGVycy4gVGhlIG91dHB1dCBpcyBhbHdheXMgZXhwcmVzc2VkIGluIEdNVC5cbiAgICogU3BlY2lmaWNhbGx5LCB0aGUgc3RyaW5nIGNvbmZvcm1zIHRvIFJGQyAxMTIzLlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzMuaHRtbCNzZWMzLjMuMVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMpLnRvSFRUUCgpIC8vPT4gJ1N1biwgMTMgSnVsIDIwMTQgMDA6MDA6MDAgR01UJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMsIDE5KS50b0hUVFAoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDE5OjAwOjAwIEdNVCdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9IVFRQKCkge1xuICAgIHJldHVybiB0b1RlY2hGb3JtYXQodGhpcy50b1VUQygpLCBcIkVFRSwgZGQgTExMIHl5eXkgSEg6bW06c3MgJ0dNVCdcIik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gU1FMIERhdGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b1NRTERhdGUoKSAvLz0+ICcyMDE0LTA3LTEzJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b1NRTERhdGUoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdG9JU09EYXRlKHRoaXMsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIFNRTCBUaW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVab25lPWZhbHNlXSAtIGluY2x1ZGUgdGhlIHpvbmUsIHN1Y2ggYXMgJ0FtZXJpY2EvTmV3X1lvcmsnLiBPdmVycmlkZXMgaW5jbHVkZU9mZnNldC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0PXRydWVdIC0gaW5jbHVkZSB0aGUgb2Zmc2V0LCBzdWNoIGFzICdaJyBvciAnLTA0OjAwJ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVPZmZzZXRTcGFjZT10cnVlXSAtIGluY2x1ZGUgdGhlIHNwYWNlIGJldHdlZW4gdGhlIHRpbWUgYW5kIHRoZSBvZmZzZXQsIHN1Y2ggYXMgJzA1OjE1OjE2LjM0NSAtMDQ6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnRvU1FMKCkgLy89PiAnMDU6MTU6MTYuMzQ1J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b1NRTCgpIC8vPT4gJzA1OjE1OjE2LjM0NSAtMDQ6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvU1FMKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgLy89PiAnMDU6MTU6MTYuMzQ1J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b1NRTCh7IGluY2x1ZGVab25lOiBmYWxzZSB9KSAvLz0+ICcwNToxNToxNi4zNDUgQW1lcmljYS9OZXdfWW9yaydcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TUUxUaW1lKHsgaW5jbHVkZU9mZnNldCA9IHRydWUsIGluY2x1ZGVab25lID0gZmFsc2UsIGluY2x1ZGVPZmZzZXRTcGFjZSA9IHRydWUgfSA9IHt9KSB7XG4gICAgbGV0IGZtdCA9IFwiSEg6bW06c3MuU1NTXCI7XG5cbiAgICBpZiAoaW5jbHVkZVpvbmUgfHwgaW5jbHVkZU9mZnNldCkge1xuICAgICAgaWYgKGluY2x1ZGVPZmZzZXRTcGFjZSkge1xuICAgICAgICBmbXQgKz0gXCIgXCI7XG4gICAgICB9XG4gICAgICBpZiAoaW5jbHVkZVpvbmUpIHtcbiAgICAgICAgZm10ICs9IFwielwiO1xuICAgICAgfSBlbHNlIGlmIChpbmNsdWRlT2Zmc2V0KSB7XG4gICAgICAgIGZtdCArPSBcIlpaXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLCBmbXQsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIFNRTCBEYXRlVGltZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlWm9uZT1mYWxzZV0gLSBpbmNsdWRlIHRoZSB6b25lLCBzdWNoIGFzICdBbWVyaWNhL05ld19Zb3JrJy4gT3ZlcnJpZGVzIGluY2x1ZGVPZmZzZXQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCdcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0U3BhY2U9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSB0aW1lIGFuZCB0aGUgb2Zmc2V0LCBzdWNoIGFzICcwNToxNToxNi4zNDUgLTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMpLnRvU1FMKCkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAgWidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvU1FMKCkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAgLTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCA3LCAxMykudG9TUUwoeyBpbmNsdWRlT2Zmc2V0OiBmYWxzZSB9KSAvLz0+ICcyMDE0LTA3LTEzIDAwOjAwOjAwLjAwMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvU1FMKHsgaW5jbHVkZVpvbmU6IHRydWUgfSkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAgQW1lcmljYS9OZXdfWW9yaydcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TUUwob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBgJHt0aGlzLnRvU1FMRGF0ZSgpfSAke3RoaXMudG9TUUxUaW1lKG9wdHMpfWA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciBkZWJ1Z2dpbmdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudG9JU08oKSA6IElOVkFMSUQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciB0aGUgUkVQTC5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgW1N5bWJvbC5mb3IoXCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbVwiKV0oKSB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIGBEYXRlVGltZSB7IHRzOiAke3RoaXMudG9JU08oKX0sIHpvbmU6ICR7dGhpcy56b25lLm5hbWV9LCBsb2NhbGU6ICR7dGhpcy5sb2NhbGV9IH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYERhdGVUaW1lIHsgSW52YWxpZCwgcmVhc29uOiAke3RoaXMuaW52YWxpZFJlYXNvbn0gfWA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVwb2NoIG1pbGxpc2Vjb25kcyBvZiB0aGlzIERhdGVUaW1lLiBBbGlhcyBvZiB7QGxpbmsgRGF0ZVRpbWUjdG9NaWxsaXN9XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHZhbHVlT2YoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9NaWxsaXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBlcG9jaCBtaWxsaXNlY29uZHMgb2YgdGhpcyBEYXRlVGltZS5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdG9NaWxsaXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXBvY2ggc2Vjb25kcyBvZiB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB0b1NlY29uZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgLyAxMDAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVwb2NoIHNlY29uZHMgKGFzIGEgd2hvbGUgbnVtYmVyKSBvZiB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB0b1VuaXhJbnRlZ2VyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBNYXRoLmZsb29yKHRoaXMudHMgLyAxMDAwKSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBKU09OLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9JU08oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgQlNPTiBzZXJpYWxpemFibGUgZXF1aXZhbGVudCB0byB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtEYXRlfVxuICAgKi9cbiAgdG9CU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvSlNEYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGggdGhpcyBEYXRlVGltZSdzIHllYXIsIG1vbnRoLCBkYXksIGFuZCBzbyBvbi5cbiAgICogQHBhcmFtIG9wdHMgLSBvcHRpb25zIGZvciBnZW5lcmF0aW5nIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlQ29uZmlnPWZhbHNlXSAtIGluY2x1ZGUgY29uZmlndXJhdGlvbiBhdHRyaWJ1dGVzIGluIHRoZSBvdXRwdXRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9PYmplY3QoKSAvLz0+IHsgeWVhcjogMjAxNywgbW9udGg6IDQsIGRheTogMjIsIGhvdXI6IDIwLCBtaW51dGU6IDQ5LCBzZWNvbmQ6IDQyLCBtaWxsaXNlY29uZDogMjY4IH1cbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgdG9PYmplY3Qob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB7fTtcblxuICAgIGNvbnN0IGJhc2UgPSB7IC4uLnRoaXMuYyB9O1xuXG4gICAgaWYgKG9wdHMuaW5jbHVkZUNvbmZpZykge1xuICAgICAgYmFzZS5vdXRwdXRDYWxlbmRhciA9IHRoaXMub3V0cHV0Q2FsZW5kYXI7XG4gICAgICBiYXNlLm51bWJlcmluZ1N5c3RlbSA9IHRoaXMubG9jLm51bWJlcmluZ1N5c3RlbTtcbiAgICAgIGJhc2UubG9jYWxlID0gdGhpcy5sb2MubG9jYWxlO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgSmF2YVNjcmlwdCBEYXRlIGVxdWl2YWxlbnQgdG8gdGhpcyBEYXRlVGltZS5cbiAgICogQHJldHVybiB7RGF0ZX1cbiAgICovXG4gIHRvSlNEYXRlKCkge1xuICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLmlzVmFsaWQgPyB0aGlzLnRzIDogTmFOKTtcbiAgfVxuXG4gIC8vIENPTVBBUkVcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIERhdGVUaW1lcyBhcyBhIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBvdGhlckRhdGVUaW1lIC0gdGhlIERhdGVUaW1lIHRvIGNvbXBhcmUgdGhpcyBvbmUgdG9cbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1bml0PVsnbWlsbGlzZWNvbmRzJ11dIC0gdGhlIHVuaXQgb3IgYXJyYXkgb2YgdW5pdHMgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIGluY2x1ZGUgaW4gdGhlIGR1cmF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIHRoZSBEdXJhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQGV4YW1wbGVcbiAgICogdmFyIGkxID0gRGF0ZVRpbWUuZnJvbUlTTygnMTk4Mi0wNS0yNVQwOTo0NScpLFxuICAgKiAgICAgaTIgPSBEYXRlVGltZS5mcm9tSVNPKCcxOTgzLTEwLTE0VDEwOjMwJyk7XG4gICAqIGkyLmRpZmYoaTEpLnRvT2JqZWN0KCkgLy89PiB7IG1pbGxpc2Vjb25kczogNDM4MDc1MDAwMDAgfVxuICAgKiBpMi5kaWZmKGkxLCAnaG91cnMnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTIxNjguNzUgfVxuICAgKiBpMi5kaWZmKGkxLCBbJ21vbnRocycsICdkYXlzJ10pLnRvT2JqZWN0KCkgLy89PiB7IG1vbnRoczogMTYsIGRheXM6IDE5LjAzMTI1IH1cbiAgICogaTIuZGlmZihpMSwgWydtb250aHMnLCAnZGF5cycsICdob3VycyddKS50b09iamVjdCgpIC8vPT4geyBtb250aHM6IDE2LCBkYXlzOiAxOSwgaG91cnM6IDAuNzUgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIGRpZmYob3RoZXJEYXRlVGltZSwgdW5pdCA9IFwibWlsbGlzZWNvbmRzXCIsIG9wdHMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFvdGhlckRhdGVUaW1lLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKFwiY3JlYXRlZCBieSBkaWZmaW5nIGFuIGludmFsaWQgRGF0ZVRpbWVcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyT3B0cyA9IHsgbG9jYWxlOiB0aGlzLmxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtOiB0aGlzLm51bWJlcmluZ1N5c3RlbSwgLi4ub3B0cyB9O1xuXG4gICAgY29uc3QgdW5pdHMgPSBtYXliZUFycmF5KHVuaXQpLm1hcChEdXJhdGlvbi5ub3JtYWxpemVVbml0KSxcbiAgICAgIG90aGVySXNMYXRlciA9IG90aGVyRGF0ZVRpbWUudmFsdWVPZigpID4gdGhpcy52YWx1ZU9mKCksXG4gICAgICBlYXJsaWVyID0gb3RoZXJJc0xhdGVyID8gdGhpcyA6IG90aGVyRGF0ZVRpbWUsXG4gICAgICBsYXRlciA9IG90aGVySXNMYXRlciA/IG90aGVyRGF0ZVRpbWUgOiB0aGlzLFxuICAgICAgZGlmZmVkID0gZGlmZihlYXJsaWVyLCBsYXRlciwgdW5pdHMsIGR1ck9wdHMpO1xuXG4gICAgcmV0dXJuIG90aGVySXNMYXRlciA/IGRpZmZlZC5uZWdhdGUoKSA6IGRpZmZlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIERhdGVUaW1lIGFuZCByaWdodCBub3cuXG4gICAqIFNlZSB7QGxpbmsgRGF0ZVRpbWUjZGlmZn1cbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1bml0PVsnbWlsbGlzZWNvbmRzJ11dIC0gdGhlIHVuaXQgb3IgdW5pdHMgdW5pdHMgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIGluY2x1ZGUgaW4gdGhlIGR1cmF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgdGhlIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIGRpZmZOb3codW5pdCA9IFwibWlsbGlzZWNvbmRzXCIsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmRpZmYoRGF0ZVRpbWUubm93KCksIHVuaXQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBJbnRlcnZhbCBzcGFubmluZyBiZXR3ZWVuIHRoaXMgRGF0ZVRpbWUgYW5kIGFub3RoZXIgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtEYXRlVGltZX0gb3RoZXJEYXRlVGltZSAtIHRoZSBvdGhlciBlbmQgcG9pbnQgb2YgdGhlIEludGVydmFsXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgdW50aWwob3RoZXJEYXRlVGltZSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHRoaXMsIG90aGVyRGF0ZVRpbWUpIDogdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIERhdGVUaW1lIGlzIGluIHRoZSBzYW1lIHVuaXQgb2YgdGltZSBhcyBhbm90aGVyIERhdGVUaW1lLlxuICAgKiBIaWdoZXItb3JkZXIgdW5pdHMgbXVzdCBhbHNvIGJlIGlkZW50aWNhbCBmb3IgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gYHRydWVgLlxuICAgKiBOb3RlIHRoYXQgdGltZSB6b25lcyBhcmUgKippZ25vcmVkKiogaW4gdGhpcyBjb21wYXJpc29uLCB3aGljaCBjb21wYXJlcyB0aGUgKipsb2NhbCoqIGNhbGVuZGFyIHRpbWUuIFVzZSB7QGxpbmsgRGF0ZVRpbWUjc2V0Wm9uZX0gdG8gY29udmVydCBvbmUgb2YgdGhlIGRhdGVzIGlmIG5lZWRlZC5cbiAgICogQHBhcmFtIHtEYXRlVGltZX0gb3RoZXJEYXRlVGltZSAtIHRoZSBvdGhlciBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY2hlY2sgc2FtZW5lc3Mgb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMudXNlTG9jYWxlV2Vla3M9ZmFsc2VdIC0gSWYgdHJ1ZSwgdXNlIHdlZWtzIGJhc2VkIG9uIHRoZSBsb2NhbGUsIGkuZS4gdXNlIHRoZSBsb2NhbGUtZGVwZW5kZW50IHN0YXJ0IG9mIHRoZSB3ZWVrOyBvbmx5IHRoZSBsb2NhbGUgb2YgdGhpcyBEYXRlVGltZSBpcyB1c2VkXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLmhhc1NhbWUob3RoZXJEVCwgJ2RheScpOyAvL34+IHRydWUgaWYgb3RoZXJEVCBpcyBpbiB0aGUgc2FtZSBjdXJyZW50IGNhbGVuZGFyIGRheVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgaGFzU2FtZShvdGhlckRhdGVUaW1lLCB1bml0LCBvcHRzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IGlucHV0TXMgPSBvdGhlckRhdGVUaW1lLnZhbHVlT2YoKTtcbiAgICBjb25zdCBhZGp1c3RlZFRvWm9uZSA9IHRoaXMuc2V0Wm9uZShvdGhlckRhdGVUaW1lLnpvbmUsIHsga2VlcExvY2FsVGltZTogdHJ1ZSB9KTtcbiAgICByZXR1cm4gKFxuICAgICAgYWRqdXN0ZWRUb1pvbmUuc3RhcnRPZih1bml0LCBvcHRzKSA8PSBpbnB1dE1zICYmIGlucHV0TXMgPD0gYWRqdXN0ZWRUb1pvbmUuZW5kT2YodW5pdCwgb3B0cylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEVxdWFsaXR5IGNoZWNrXG4gICAqIFR3byBEYXRlVGltZXMgYXJlIGVxdWFsIGlmIGFuZCBvbmx5IGlmIHRoZXkgcmVwcmVzZW50IHRoZSBzYW1lIG1pbGxpc2Vjb25kLCBoYXZlIHRoZSBzYW1lIHpvbmUgYW5kIGxvY2F0aW9uLCBhbmQgYXJlIGJvdGggdmFsaWQuXG4gICAqIFRvIGNvbXBhcmUganVzdCB0aGUgbWlsbGlzZWNvbmQgdmFsdWVzLCB1c2UgYCtkdDEgPT09ICtkdDJgLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBvdGhlciAtIHRoZSBvdGhlciBEYXRlVGltZVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZXF1YWxzKG90aGVyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNWYWxpZCAmJlxuICAgICAgb3RoZXIuaXNWYWxpZCAmJlxuICAgICAgdGhpcy52YWx1ZU9mKCkgPT09IG90aGVyLnZhbHVlT2YoKSAmJlxuICAgICAgdGhpcy56b25lLmVxdWFscyhvdGhlci56b25lKSAmJlxuICAgICAgdGhpcy5sb2MuZXF1YWxzKG90aGVyLmxvYylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB0aGlzIHRpbWUgcmVsYXRpdmUgdG8gbm93LCBzdWNoIGFzIFwiaW4gdHdvIGRheXNcIi4gQ2FuIG9ubHkgaW50ZXJuYXRpb25hbGl6ZSBpZiB5b3VyXG4gICAqIHBsYXRmb3JtIHN1cHBvcnRzIEludGwuUmVsYXRpdmVUaW1lRm9ybWF0LiBSb3VuZHMgZG93biBieSBkZWZhdWx0LlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIG91dHB1dFxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBbb3B0aW9ucy5iYXNlPURhdGVUaW1lLm5vdygpXSAtIHRoZSBEYXRlVGltZSB0byB1c2UgYXMgdGhlIGJhc2lzIHRvIHdoaWNoIHRoaXMgdGltZSBpcyBjb21wYXJlZC4gRGVmYXVsdHMgdG8gbm93LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc3R5bGU9XCJsb25nXCJdIC0gdGhlIHN0eWxlIG9mIHVuaXRzLCBtdXN0IGJlIFwibG9uZ1wiLCBcInNob3J0XCIsIG9yIFwibmFycm93XCJcbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IG9wdGlvbnMudW5pdCAtIHVzZSBhIHNwZWNpZmljIHVuaXQgb3IgYXJyYXkgb2YgdW5pdHM7IGlmIG9taXR0ZWQsIG9yIGFuIGFycmF5LCB0aGUgbWV0aG9kIHdpbGwgcGljayB0aGUgYmVzdCB1bml0LiBVc2UgYW4gYXJyYXkgb3Igb25lIG9mIFwieWVhcnNcIiwgXCJxdWFydGVyc1wiLCBcIm1vbnRoc1wiLCBcIndlZWtzXCIsIFwiZGF5c1wiLCBcImhvdXJzXCIsIFwibWludXRlc1wiLCBvciBcInNlY29uZHNcIlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnJvdW5kPXRydWVdIC0gd2hldGhlciB0byByb3VuZCB0aGUgbnVtYmVycyBpbiB0aGUgb3V0cHV0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucGFkZGluZz0wXSAtIHBhZGRpbmcgaW4gbWlsbGlzZWNvbmRzLiBUaGlzIGFsbG93cyB5b3UgdG8gcm91bmQgdXAgdGhlIHJlc3VsdCBpZiBpdCBmaXRzIGluc2lkZSB0aGUgdGhyZXNob2xkLiBEb24ndCB1c2UgaW4gY29tYmluYXRpb24gd2l0aCB7cm91bmQ6IGZhbHNlfSBiZWNhdXNlIHRoZSBkZWNpbWFsIG91dHB1dCB3aWxsIGluY2x1ZGUgdGhlIHBhZGRpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmxvY2FsZSAtIG92ZXJyaWRlIHRoZSBsb2NhbGUgb2YgdGhpcyBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW0gLSBvdmVycmlkZSB0aGUgbnVtYmVyaW5nU3lzdGVtIG9mIHRoaXMgRGF0ZVRpbWUuIFRoZSBJbnRsIHN5c3RlbSBtYXkgY2hvb3NlIG5vdCB0byBob25vciB0aGlzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmUoKSAvLz0+IFwiaW4gMSBkYXlcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoXCJlc1wiKS50b1JlbGF0aXZlKHsgZGF5czogMSB9KSAvLz0+IFwiZGVudHJvIGRlIDEgZMOtYVwiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmUoeyBsb2NhbGU6IFwiZnJcIiB9KSAvLz0+IFwiZGFucyAyMyBoZXVyZXNcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGRheXM6IDIgfSkudG9SZWxhdGl2ZSgpIC8vPT4gXCIyIGRheXMgYWdvXCJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkubWludXMoeyBkYXlzOiAyIH0pLnRvUmVsYXRpdmUoeyB1bml0OiBcImhvdXJzXCIgfSkgLy89PiBcIjQ4IGhvdXJzIGFnb1wiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLm1pbnVzKHsgaG91cnM6IDM2IH0pLnRvUmVsYXRpdmUoeyByb3VuZDogZmFsc2UgfSkgLy89PiBcIjEuNSBkYXlzIGFnb1wiXG4gICAqL1xuICB0b1JlbGF0aXZlKG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBiYXNlID0gb3B0aW9ucy5iYXNlIHx8IERhdGVUaW1lLmZyb21PYmplY3Qoe30sIHsgem9uZTogdGhpcy56b25lIH0pLFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyA/ICh0aGlzIDwgYmFzZSA/IC1vcHRpb25zLnBhZGRpbmcgOiBvcHRpb25zLnBhZGRpbmcpIDogMDtcbiAgICBsZXQgdW5pdHMgPSBbXCJ5ZWFyc1wiLCBcIm1vbnRoc1wiLCBcImRheXNcIiwgXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCJdO1xuICAgIGxldCB1bml0ID0gb3B0aW9ucy51bml0O1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMudW5pdCkpIHtcbiAgICAgIHVuaXRzID0gb3B0aW9ucy51bml0O1xuICAgICAgdW5pdCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGRpZmZSZWxhdGl2ZShiYXNlLCB0aGlzLnBsdXMocGFkZGluZyksIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBudW1lcmljOiBcImFsd2F5c1wiLFxuICAgICAgdW5pdHMsXG4gICAgICB1bml0LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBkYXRlIHJlbGF0aXZlIHRvIHRvZGF5LCBzdWNoIGFzIFwieWVzdGVyZGF5XCIgb3IgXCJuZXh0IG1vbnRoXCIuXG4gICAqIE9ubHkgaW50ZXJuYXRpb25hbGl6ZXMgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydHMgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgb3V0cHV0XG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IFtvcHRpb25zLmJhc2U9RGF0ZVRpbWUubm93KCldIC0gdGhlIERhdGVUaW1lIHRvIHVzZSBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggdGhpcyB0aW1lIGlzIGNvbXBhcmVkLiBEZWZhdWx0cyB0byBub3cuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmxvY2FsZSAtIG92ZXJyaWRlIHRoZSBsb2NhbGUgb2YgdGhpcyBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy51bml0IC0gdXNlIGEgc3BlY2lmaWMgdW5pdDsgaWYgb21pdHRlZCwgdGhlIG1ldGhvZCB3aWxsIHBpY2sgdGhlIHVuaXQuIFVzZSBvbmUgb2YgXCJ5ZWFyc1wiLCBcInF1YXJ0ZXJzXCIsIFwibW9udGhzXCIsIFwid2Vla3NcIiwgb3IgXCJkYXlzXCJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gb3ZlcnJpZGUgdGhlIG51bWJlcmluZ1N5c3RlbSBvZiB0aGlzIERhdGVUaW1lLiBUaGUgSW50bCBzeXN0ZW0gbWF5IGNob29zZSBub3QgdG8gaG9ub3IgdGhpc1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlQ2FsZW5kYXIoKSAvLz0+IFwidG9tb3Jyb3dcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoXCJlc1wiKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlKCkgLy89PiBcIlwibWHDsWFuYVwiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmVDYWxlbmRhcih7IGxvY2FsZTogXCJmclwiIH0pIC8vPT4gXCJkZW1haW5cIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGRheXM6IDIgfSkudG9SZWxhdGl2ZUNhbGVuZGFyKCkgLy89PiBcIjIgZGF5cyBhZ29cIlxuICAgKi9cbiAgdG9SZWxhdGl2ZUNhbGVuZGFyKG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiBkaWZmUmVsYXRpdmUob3B0aW9ucy5iYXNlIHx8IERhdGVUaW1lLmZyb21PYmplY3Qoe30sIHsgem9uZTogdGhpcy56b25lIH0pLCB0aGlzLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbnVtZXJpYzogXCJhdXRvXCIsXG4gICAgICB1bml0czogW1wieWVhcnNcIiwgXCJtb250aHNcIiwgXCJkYXlzXCJdLFxuICAgICAgY2FsZW5kYXJ5OiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbWluIG9mIHNldmVyYWwgZGF0ZSB0aW1lc1xuICAgKiBAcGFyYW0gey4uLkRhdGVUaW1lfSBkYXRlVGltZXMgLSB0aGUgRGF0ZVRpbWVzIGZyb20gd2hpY2ggdG8gY2hvb3NlIHRoZSBtaW5pbXVtXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfSB0aGUgbWluIERhdGVUaW1lLCBvciB1bmRlZmluZWQgaWYgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRcbiAgICovXG4gIHN0YXRpYyBtaW4oLi4uZGF0ZVRpbWVzKSB7XG4gICAgaWYgKCFkYXRlVGltZXMuZXZlcnkoRGF0ZVRpbWUuaXNEYXRlVGltZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIm1pbiByZXF1aXJlcyBhbGwgYXJndW1lbnRzIGJlIERhdGVUaW1lc1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGJlc3RCeShkYXRlVGltZXMsIChpKSA9PiBpLnZhbHVlT2YoKSwgTWF0aC5taW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbWF4IG9mIHNldmVyYWwgZGF0ZSB0aW1lc1xuICAgKiBAcGFyYW0gey4uLkRhdGVUaW1lfSBkYXRlVGltZXMgLSB0aGUgRGF0ZVRpbWVzIGZyb20gd2hpY2ggdG8gY2hvb3NlIHRoZSBtYXhpbXVtXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfSB0aGUgbWF4IERhdGVUaW1lLCBvciB1bmRlZmluZWQgaWYgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRcbiAgICovXG4gIHN0YXRpYyBtYXgoLi4uZGF0ZVRpbWVzKSB7XG4gICAgaWYgKCFkYXRlVGltZXMuZXZlcnkoRGF0ZVRpbWUuaXNEYXRlVGltZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIm1heCByZXF1aXJlcyBhbGwgYXJndW1lbnRzIGJlIERhdGVUaW1lc1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGJlc3RCeShkYXRlVGltZXMsIChpKSA9PiBpLnZhbHVlT2YoKSwgTWF0aC5tYXgpO1xuICB9XG5cbiAgLy8gTUlTQ1xuXG4gIC8qKlxuICAgKiBFeHBsYWluIGhvdyBhIHN0cmluZyB3b3VsZCBiZSBwYXJzZWQgYnkgZnJvbUZvcm1hdCgpXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCB0aGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGJlIGluIChzZWUgZGVzY3JpcHRpb24pXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB0YWtlbiBieSBmcm9tRm9ybWF0KClcbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGZyb21Gb3JtYXRFeHBsYWluKHRleHQsIGZtdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsIH0gPSBvcHRpb25zLFxuICAgICAgbG9jYWxlVG9Vc2UgPSBMb2NhbGUuZnJvbU9wdHMoe1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIG51bWJlcmluZ1N5c3RlbSxcbiAgICAgICAgZGVmYXVsdFRvRU46IHRydWUsXG4gICAgICB9KTtcbiAgICByZXR1cm4gZXhwbGFpbkZyb21Ub2tlbnMobG9jYWxlVG9Vc2UsIHRleHQsIGZtdCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGZyb21Gb3JtYXRFeHBsYWluIGluc3RlYWRcbiAgICovXG4gIHN0YXRpYyBmcm9tU3RyaW5nRXhwbGFpbih0ZXh0LCBmbXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBEYXRlVGltZS5mcm9tRm9ybWF0RXhwbGFpbih0ZXh0LCBmbXQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgcGFyc2VyIGZvciBgZm10YCB1c2luZyB0aGUgZ2l2ZW4gbG9jYWxlLiBUaGlzIHBhcnNlciBjYW4gYmUgcGFzc2VkXG4gICAqIHRvIHtAbGluayBEYXRlVGltZS5mcm9tRm9ybWF0UGFyc2VyfSB0byBhIHBhcnNlIGEgZGF0ZSBpbiB0aGlzIGZvcm1hdC4gVGhpc1xuICAgKiBjYW4gYmUgdXNlZCB0byBvcHRpbWl6ZSBjYXNlcyB3aGVyZSBtYW55IGRhdGVzIG5lZWQgdG8gYmUgcGFyc2VkIGluIGFcbiAgICogc3BlY2lmaWMgZm9ybWF0LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCB0aGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGJlIGluIChzZWVcbiAgICogZGVzY3JpcHRpb24pXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB1c2VkIHRvIHNldCBsb2NhbGUgYW5kIG51bWJlcmluZ1N5c3RlbVxuICAgKiBmb3IgcGFyc2VyXG4gICAqIEByZXR1cm5zIHtUb2tlblBhcnNlcn0gLSBvcGFxdWUgb2JqZWN0IHRvIGJlIHVzZWRcbiAgICovXG4gIHN0YXRpYyBidWlsZEZvcm1hdFBhcnNlcihmbXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHsgbG9jYWxlID0gbnVsbCwgbnVtYmVyaW5nU3lzdGVtID0gbnVsbCB9ID0gb3B0aW9ucyxcbiAgICAgIGxvY2FsZVRvVXNlID0gTG9jYWxlLmZyb21PcHRzKHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBudW1iZXJpbmdTeXN0ZW0sXG4gICAgICAgIGRlZmF1bHRUb0VOOiB0cnVlLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIG5ldyBUb2tlblBhcnNlcihsb2NhbGVUb1VzZSwgZm10KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIGlucHV0IHN0cmluZyBhbmQgZm9ybWF0IHBhcnNlci5cbiAgICpcbiAgICogVGhlIGZvcm1hdCBwYXJzZXIgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCB3aXRoIHRoZSBzYW1lIGxvY2FsZSBhcyB0aGlzIGNhbGwuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IC0gdGhlIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0ge1Rva2VuUGFyc2VyfSBmb3JtYXRQYXJzZXIgLSBwYXJzZXIgZnJvbSB7QGxpbmsgRGF0ZVRpbWUuYnVpbGRGb3JtYXRQYXJzZXJ9XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0YWtlbiBieSBmcm9tRm9ybWF0KClcbiAgICogQHJldHVybnMge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIGZyb21Gb3JtYXRQYXJzZXIodGV4dCwgZm9ybWF0UGFyc2VyLCBvcHRzID0ge30pIHtcbiAgICBpZiAoaXNVbmRlZmluZWQodGV4dCkgfHwgaXNVbmRlZmluZWQoZm9ybWF0UGFyc2VyKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBcImZyb21Gb3JtYXRQYXJzZXIgcmVxdWlyZXMgYW4gaW5wdXQgc3RyaW5nIGFuZCBhIGZvcm1hdCBwYXJzZXJcIlxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsIH0gPSBvcHRzLFxuICAgICAgbG9jYWxlVG9Vc2UgPSBMb2NhbGUuZnJvbU9wdHMoe1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIG51bWJlcmluZ1N5c3RlbSxcbiAgICAgICAgZGVmYXVsdFRvRU46IHRydWUsXG4gICAgICB9KTtcblxuICAgIGlmICghbG9jYWxlVG9Vc2UuZXF1YWxzKGZvcm1hdFBhcnNlci5sb2NhbGUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGBmcm9tRm9ybWF0UGFyc2VyIGNhbGxlZCB3aXRoIGEgbG9jYWxlIG9mICR7bG9jYWxlVG9Vc2V9LCBgICtcbiAgICAgICAgICBgYnV0IHRoZSBmb3JtYXQgcGFyc2VyIHdhcyBjcmVhdGVkIGZvciAke2Zvcm1hdFBhcnNlci5sb2NhbGV9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHJlc3VsdCwgem9uZSwgc3BlY2lmaWNPZmZzZXQsIGludmFsaWRSZWFzb24gfSA9IGZvcm1hdFBhcnNlci5leHBsYWluRnJvbVRva2Vucyh0ZXh0KTtcblxuICAgIGlmIChpbnZhbGlkUmVhc29uKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChpbnZhbGlkUmVhc29uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUoXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgem9uZSxcbiAgICAgICAgb3B0cyxcbiAgICAgICAgYGZvcm1hdCAke2Zvcm1hdFBhcnNlci5mb3JtYXR9YCxcbiAgICAgICAgdGV4dCxcbiAgICAgICAgc3BlY2lmaWNPZmZzZXRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gRk9STUFUIFBSRVNFVFNcblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAxMC8xNC8xOTgzXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVfU0hPUlQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURV9TSE9SVDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3QgMTQsIDE5ODMnXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVfTUVEKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVfTUVEO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ0ZyaSwgT2N0IDE0LCAxOTgzJ1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFX01FRF9XSVRIX1dFRUtEQVkoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURV9NRURfV0lUSF9XRUVLREFZO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdG9iZXIgMTQsIDE5ODMnXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVfRlVMTCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFX0ZVTEw7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnVHVlc2RheSwgT2N0b2JlciAxNCwgMTk4MydcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURV9IVUdFKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVfSFVHRTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FX1NJTVBMRSgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FX1NJTVBMRTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FX1dJVEhfU0VDT05EUygpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FX1dJVEhfU0VDT05EUztcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBBTSBFRFQnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV9XSVRIX1NIT1JUX09GRlNFVCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FX1dJVEhfU0hPUlRfT0ZGU0VUO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEFNIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FX1dJVEhfTE9OR19PRkZTRVQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV9XSVRIX0xPTkdfT0ZGU0VUO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwJywgYWx3YXlzIDI0LWhvdXIuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IFRJTUVfMjRfU0lNUExFKCkge1xuICAgIHJldHVybiBGb3JtYXRzLlRJTUVfMjRfU0lNUExFO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzJywgYWx3YXlzIDI0LWhvdXIuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IFRJTUVfMjRfV0lUSF9TRUNPTkRTKCkge1xuICAgIHJldHVybiBGb3JtYXRzLlRJTUVfMjRfV0lUSF9TRUNPTkRTO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEVEVCcsIGFsd2F5cyAyNC1ob3VyLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUKCkge1xuICAgIHJldHVybiBGb3JtYXRzLlRJTUVfMjRfV0lUSF9TSE9SVF9PRkZTRVQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgRWFzdGVybiBEYXlsaWdodCBUaW1lJywgYWx3YXlzIDI0LWhvdXIuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IFRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FXzI0X1dJVEhfTE9OR19PRkZTRVQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMTAvMTQvMTk4MywgOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9TSE9SVCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9TSE9SVDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcxMC8xNC8xOTgzLCA5OjMwOjMzIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUygpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9TSE9SVF9XSVRIX1NFQ09ORFM7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0IDE0LCAxOTgzLCA5OjMwIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX01FRCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9NRUQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0IDE0LCAxOTgzLCA5OjMwOjMzIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUztcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdGcmksIDE0IE9jdCAxOTgzLCA5OjMwIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVkoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfV0VFS0RBWTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3RvYmVyIDE0LCAxOTgzLCA5OjMwIEFNIEVEVCcuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9GVUxMKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX0ZVTEw7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0b2JlciAxNCwgMTk4MywgOTozMDozMyBBTSBFRFQnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFM7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnRnJpZGF5LCBPY3RvYmVyIDE0LCAxOTgzLCA5OjMwIEFNIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9IVUdFKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX0hVR0U7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnRnJpZGF5LCBPY3RvYmVyIDE0LCAxOTgzLCA5OjMwOjMzIEFNIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9IVUdFX1dJVEhfU0VDT05EUygpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9IVUdFX1dJVEhfU0VDT05EUztcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcmllbmRseURhdGVUaW1lKGRhdGVUaW1laXNoKSB7XG4gIGlmIChEYXRlVGltZS5pc0RhdGVUaW1lKGRhdGVUaW1laXNoKSkge1xuICAgIHJldHVybiBkYXRlVGltZWlzaDtcbiAgfSBlbHNlIGlmIChkYXRlVGltZWlzaCAmJiBkYXRlVGltZWlzaC52YWx1ZU9mICYmIGlzTnVtYmVyKGRhdGVUaW1laXNoLnZhbHVlT2YoKSkpIHtcbiAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUpTRGF0ZShkYXRlVGltZWlzaCk7XG4gIH0gZWxzZSBpZiAoZGF0ZVRpbWVpc2ggJiYgdHlwZW9mIGRhdGVUaW1laXNoID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIERhdGVUaW1lLmZyb21PYmplY3QoZGF0ZVRpbWVpc2gpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgIGBVbmtub3duIGRhdGV0aW1lIGFyZ3VtZW50OiAke2RhdGVUaW1laXNofSwgb2YgdHlwZSAke3R5cGVvZiBkYXRlVGltZWlzaH1gXG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIEludmFsaWREdXJhdGlvbkVycm9yLCBJbnZhbGlkVW5pdEVycm9yIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5pbXBvcnQgRm9ybWF0dGVyIGZyb20gXCIuL2ltcGwvZm9ybWF0dGVyLmpzXCI7XG5pbXBvcnQgSW52YWxpZCBmcm9tIFwiLi9pbXBsL2ludmFsaWQuanNcIjtcbmltcG9ydCBMb2NhbGUgZnJvbSBcIi4vaW1wbC9sb2NhbGUuanNcIjtcbmltcG9ydCB7IHBhcnNlSVNPRHVyYXRpb24sIHBhcnNlSVNPVGltZU9ubHkgfSBmcm9tIFwiLi9pbXBsL3JlZ2V4UGFyc2VyLmpzXCI7XG5pbXBvcnQge1xuICBhc051bWJlcixcbiAgaGFzT3duUHJvcGVydHksXG4gIGlzTnVtYmVyLFxuICBpc1VuZGVmaW5lZCxcbiAgbm9ybWFsaXplT2JqZWN0LFxuICByb3VuZFRvLFxufSBmcm9tIFwiLi9pbXBsL3V0aWwuanNcIjtcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5ncy5qc1wiO1xuaW1wb3J0IERhdGVUaW1lIGZyb20gXCIuL2RhdGV0aW1lLmpzXCI7XG5cbmNvbnN0IElOVkFMSUQgPSBcIkludmFsaWQgRHVyYXRpb25cIjtcblxuLy8gdW5pdCBjb252ZXJzaW9uIGNvbnN0YW50c1xuZXhwb3J0IGNvbnN0IGxvd09yZGVyTWF0cml4ID0ge1xuICAgIHdlZWtzOiB7XG4gICAgICBkYXlzOiA3LFxuICAgICAgaG91cnM6IDcgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IDcgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogNyAqIDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogNyAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcbiAgICBkYXlzOiB7XG4gICAgICBob3VyczogMjQsXG4gICAgICBtaW51dGVzOiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogMjQgKiA2MCAqIDYwLFxuICAgICAgbWlsbGlzZWNvbmRzOiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICAgIH0sXG4gICAgaG91cnM6IHsgbWludXRlczogNjAsIHNlY29uZHM6IDYwICogNjAsIG1pbGxpc2Vjb25kczogNjAgKiA2MCAqIDEwMDAgfSxcbiAgICBtaW51dGVzOiB7IHNlY29uZHM6IDYwLCBtaWxsaXNlY29uZHM6IDYwICogMTAwMCB9LFxuICAgIHNlY29uZHM6IHsgbWlsbGlzZWNvbmRzOiAxMDAwIH0sXG4gIH0sXG4gIGNhc3VhbE1hdHJpeCA9IHtcbiAgICB5ZWFyczoge1xuICAgICAgcXVhcnRlcnM6IDQsXG4gICAgICBtb250aHM6IDEyLFxuICAgICAgd2Vla3M6IDUyLFxuICAgICAgZGF5czogMzY1LFxuICAgICAgaG91cnM6IDM2NSAqIDI0LFxuICAgICAgbWludXRlczogMzY1ICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDM2NSAqIDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogMzY1ICogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuICAgIHF1YXJ0ZXJzOiB7XG4gICAgICBtb250aHM6IDMsXG4gICAgICB3ZWVrczogMTMsXG4gICAgICBkYXlzOiA5MSxcbiAgICAgIGhvdXJzOiA5MSAqIDI0LFxuICAgICAgbWludXRlczogOTEgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogOTEgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IDkxICogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuICAgIG1vbnRoczoge1xuICAgICAgd2Vla3M6IDQsXG4gICAgICBkYXlzOiAzMCxcbiAgICAgIGhvdXJzOiAzMCAqIDI0LFxuICAgICAgbWludXRlczogMzAgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogMzAgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IDMwICogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuXG4gICAgLi4ubG93T3JkZXJNYXRyaXgsXG4gIH0sXG4gIGRheXNJblllYXJBY2N1cmF0ZSA9IDE0NjA5Ny4wIC8gNDAwLFxuICBkYXlzSW5Nb250aEFjY3VyYXRlID0gMTQ2MDk3LjAgLyA0ODAwLFxuICBhY2N1cmF0ZU1hdHJpeCA9IHtcbiAgICB5ZWFyczoge1xuICAgICAgcXVhcnRlcnM6IDQsXG4gICAgICBtb250aHM6IDEyLFxuICAgICAgd2Vla3M6IGRheXNJblllYXJBY2N1cmF0ZSAvIDcsXG4gICAgICBkYXlzOiBkYXlzSW5ZZWFyQWNjdXJhdGUsXG4gICAgICBob3VyczogZGF5c0luWWVhckFjY3VyYXRlICogMjQsXG4gICAgICBtaW51dGVzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAqIDYwLFxuICAgICAgbWlsbGlzZWNvbmRzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICAgIH0sXG4gICAgcXVhcnRlcnM6IHtcbiAgICAgIG1vbnRoczogMyxcbiAgICAgIHdlZWtzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgLyAyOCxcbiAgICAgIGRheXM6IGRheXNJblllYXJBY2N1cmF0ZSAvIDQsXG4gICAgICBob3VyczogKGRheXNJblllYXJBY2N1cmF0ZSAqIDI0KSAvIDQsXG4gICAgICBtaW51dGVzOiAoZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCkgLyA0LFxuICAgICAgc2Vjb25kczogKGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCkgLyA0LFxuICAgICAgbWlsbGlzZWNvbmRzOiAoZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAqIDYwICogMTAwMCkgLyA0LFxuICAgIH0sXG4gICAgbW9udGhzOiB7XG4gICAgICB3ZWVrczogZGF5c0luTW9udGhBY2N1cmF0ZSAvIDcsXG4gICAgICBkYXlzOiBkYXlzSW5Nb250aEFjY3VyYXRlLFxuICAgICAgaG91cnM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogZGF5c0luTW9udGhBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogZGF5c0luTW9udGhBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcbiAgICAuLi5sb3dPcmRlck1hdHJpeCxcbiAgfTtcblxuLy8gdW5pdHMgb3JkZXJlZCBieSBzaXplXG5jb25zdCBvcmRlcmVkVW5pdHMgPSBbXG4gIFwieWVhcnNcIixcbiAgXCJxdWFydGVyc1wiLFxuICBcIm1vbnRoc1wiLFxuICBcIndlZWtzXCIsXG4gIFwiZGF5c1wiLFxuICBcImhvdXJzXCIsXG4gIFwibWludXRlc1wiLFxuICBcInNlY29uZHNcIixcbiAgXCJtaWxsaXNlY29uZHNcIixcbl07XG5cbmNvbnN0IHJldmVyc2VVbml0cyA9IG9yZGVyZWRVbml0cy5zbGljZSgwKS5yZXZlcnNlKCk7XG5cbi8vIGNsb25lIHJlYWxseSBtZWFucyBcImNyZWF0ZSBhbm90aGVyIGluc3RhbmNlIGp1c3QgbGlrZSB0aGlzIG9uZSwgYnV0IHdpdGggdGhlc2UgY2hhbmdlc1wiXG5mdW5jdGlvbiBjbG9uZShkdXIsIGFsdHMsIGNsZWFyID0gZmFsc2UpIHtcbiAgLy8gZGVlcCBtZXJnZSBmb3IgdmFsc1xuICBjb25zdCBjb25mID0ge1xuICAgIHZhbHVlczogY2xlYXIgPyBhbHRzLnZhbHVlcyA6IHsgLi4uZHVyLnZhbHVlcywgLi4uKGFsdHMudmFsdWVzIHx8IHt9KSB9LFxuICAgIGxvYzogZHVyLmxvYy5jbG9uZShhbHRzLmxvYyksXG4gICAgY29udmVyc2lvbkFjY3VyYWN5OiBhbHRzLmNvbnZlcnNpb25BY2N1cmFjeSB8fCBkdXIuY29udmVyc2lvbkFjY3VyYWN5LFxuICAgIG1hdHJpeDogYWx0cy5tYXRyaXggfHwgZHVyLm1hdHJpeCxcbiAgfTtcbiAgcmV0dXJuIG5ldyBEdXJhdGlvbihjb25mKTtcbn1cblxuZnVuY3Rpb24gZHVyYXRpb25Ub01pbGxpcyhtYXRyaXgsIHZhbHMpIHtcbiAgbGV0IHN1bSA9IHZhbHMubWlsbGlzZWNvbmRzID8/IDA7XG4gIGZvciAoY29uc3QgdW5pdCBvZiByZXZlcnNlVW5pdHMuc2xpY2UoMSkpIHtcbiAgICBpZiAodmFsc1t1bml0XSkge1xuICAgICAgc3VtICs9IHZhbHNbdW5pdF0gKiBtYXRyaXhbdW5pdF1bXCJtaWxsaXNlY29uZHNcIl07XG4gICAgfVxuICB9XG4gIHJldHVybiBzdW07XG59XG5cbi8vIE5COiBtdXRhdGVzIHBhcmFtZXRlcnNcbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlcyhtYXRyaXgsIHZhbHMpIHtcbiAgLy8gdGhlIGxvZ2ljIGJlbG93IGFzc3VtZXMgdGhlIG92ZXJhbGwgdmFsdWUgb2YgdGhlIGR1cmF0aW9uIGlzIHBvc2l0aXZlXG4gIC8vIGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBmYWN0b3IgaXMgdXNlZCB0byBtYWtlIGl0IHNvXG4gIGNvbnN0IGZhY3RvciA9IGR1cmF0aW9uVG9NaWxsaXMobWF0cml4LCB2YWxzKSA8IDAgPyAtMSA6IDE7XG5cbiAgb3JkZXJlZFVuaXRzLnJlZHVjZVJpZ2h0KChwcmV2aW91cywgY3VycmVudCkgPT4ge1xuICAgIGlmICghaXNVbmRlZmluZWQodmFsc1tjdXJyZW50XSkpIHtcbiAgICAgIGlmIChwcmV2aW91cykge1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbCA9IHZhbHNbcHJldmlvdXNdICogZmFjdG9yO1xuICAgICAgICBjb25zdCBjb252ID0gbWF0cml4W2N1cnJlbnRdW3ByZXZpb3VzXTtcblxuICAgICAgICAvLyBpZiAocHJldmlvdXNWYWwgPCAwKTpcbiAgICAgICAgLy8gbG93ZXIgb3JkZXIgdW5pdCBpcyBuZWdhdGl2ZSAoZS5nLiB7IHllYXJzOiAyLCBkYXlzOiAtMiB9KVxuICAgICAgICAvLyBub3JtYWxpemUgdGhpcyBieSByZWR1Y2luZyB0aGUgaGlnaGVyIG9yZGVyIHVuaXQgYnkgdGhlIGFwcHJvcHJpYXRlIGFtb3VudFxuICAgICAgICAvLyBhbmQgaW5jcmVhc2luZyB0aGUgbG93ZXIgb3JkZXIgdW5pdFxuICAgICAgICAvLyB0aGlzIGNhbiBuZXZlciBtYWtlIHRoZSBoaWdoZXIgb3JkZXIgdW5pdCBuZWdhdGl2ZSwgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIG9ubHkgb3BlcmF0ZXNcbiAgICAgICAgLy8gb24gcG9zaXRpdmUgZHVyYXRpb25zLCBzbyB0aGUgYW1vdW50IG9mIHRpbWUgcmVwcmVzZW50ZWQgYnkgdGhlIGxvd2VyIG9yZGVyIHVuaXQgY2Fubm90XG4gICAgICAgIC8vIGJlIGxhcmdlciB0aGFuIHRoZSBoaWdoZXIgb3JkZXIgdW5pdFxuICAgICAgICAvLyBlbHNlOlxuICAgICAgICAvLyBsb3dlciBvcmRlciB1bml0IGlzIHBvc2l0aXZlIChlLmcuIHsgeWVhcnM6IDIsIGRheXM6IDQ1MCB9IG9yIHsgeWVhcnM6IC0yLCBkYXlzOiA0NTAgfSlcbiAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlIGF0dGVtcHQgdG8gY29udmVydCBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gdGhlIGxvd2VyIG9yZGVyIHVuaXQgaW50b1xuICAgICAgICAvLyB0aGUgaGlnaGVyIG9yZGVyIG9uZVxuICAgICAgICAvL1xuICAgICAgICAvLyBNYXRoLmZsb29yIHRha2VzIGNhcmUgb2YgYm90aCBvZiB0aGVzZSBjYXNlcywgcm91bmRpbmcgYXdheSBmcm9tIDBcbiAgICAgICAgLy8gaWYgcHJldmlvdXNWYWwgPCAwIGl0IG1ha2VzIHRoZSBhYnNvbHV0ZSB2YWx1ZSBsYXJnZXJcbiAgICAgICAgLy8gaWYgcHJldmlvdXNWYWwgPj0gaXQgbWFrZXMgdGhlIGFic29sdXRlIHZhbHVlIHNtYWxsZXJcbiAgICAgICAgY29uc3Qgcm9sbFVwID0gTWF0aC5mbG9vcihwcmV2aW91c1ZhbCAvIGNvbnYpO1xuICAgICAgICB2YWxzW2N1cnJlbnRdICs9IHJvbGxVcCAqIGZhY3RvcjtcbiAgICAgICAgdmFsc1twcmV2aW91c10gLT0gcm9sbFVwICogY29udiAqIGZhY3RvcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcHJldmlvdXM7XG4gICAgfVxuICB9LCBudWxsKTtcblxuICAvLyB0cnkgdG8gY29udmVydCBhbnkgZGVjaW1hbHMgaW50byBzbWFsbGVyIHVuaXRzIGlmIHBvc3NpYmxlXG4gIC8vIGZvciBleGFtcGxlIGZvciB7IHllYXJzOiAyLjUsIGRheXM6IDAsIHNlY29uZHM6IDAgfSB3ZSB3YW50IHRvIGdldCB7IHllYXJzOiAyLCBkYXlzOiAxODIsIGhvdXJzOiAxMiB9XG4gIG9yZGVyZWRVbml0cy5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XG4gICAgaWYgKCFpc1VuZGVmaW5lZCh2YWxzW2N1cnJlbnRdKSkge1xuICAgICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICAgIGNvbnN0IGZyYWN0aW9uID0gdmFsc1twcmV2aW91c10gJSAxO1xuICAgICAgICB2YWxzW3ByZXZpb3VzXSAtPSBmcmFjdGlvbjtcbiAgICAgICAgdmFsc1tjdXJyZW50XSArPSBmcmFjdGlvbiAqIG1hdHJpeFtwcmV2aW91c11bY3VycmVudF07XG4gICAgICB9XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgIH1cbiAgfSwgbnVsbCk7XG59XG5cbi8vIFJlbW92ZSBhbGwgcHJvcGVydGllcyB3aXRoIGEgdmFsdWUgb2YgMCBmcm9tIGFuIG9iamVjdFxuZnVuY3Rpb24gcmVtb3ZlWmVyb2VzKHZhbHMpIHtcbiAgY29uc3QgbmV3VmFscyA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWxzKSkge1xuICAgIGlmICh2YWx1ZSAhPT0gMCkge1xuICAgICAgbmV3VmFsc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdWYWxzO1xufVxuXG4vKipcbiAqIEEgRHVyYXRpb24gb2JqZWN0IHJlcHJlc2VudHMgYSBwZXJpb2Qgb2YgdGltZSwgbGlrZSBcIjIgbW9udGhzXCIgb3IgXCIxIGRheSwgMSBob3VyXCIuIENvbmNlcHR1YWxseSwgaXQncyBqdXN0IGEgbWFwIG9mIHVuaXRzIHRvIHRoZWlyIHF1YW50aXRpZXMsIGFjY29tcGFuaWVkIGJ5IHNvbWUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGFuZCBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgdHJhbnNmb3JtaW5nLCBhbmQgZm9ybWF0dGluZyB0aGVtLiBUaGV5IGNhbiBiZSB1c2VkIG9uIHRoZWlyIG93biBvciBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIEx1eG9uIHR5cGVzOyBmb3IgZXhhbXBsZSwgeW91IGNhbiB1c2Uge0BsaW5rIERhdGVUaW1lI3BsdXN9IHRvIGFkZCBhIER1cmF0aW9uIG9iamVjdCB0byBhIERhdGVUaW1lLCBwcm9kdWNpbmcgYW5vdGhlciBEYXRlVGltZS5cbiAqXG4gKiBIZXJlIGlzIGEgYnJpZWYgb3ZlcnZpZXcgb2YgY29tbW9ubHkgdXNlZCBtZXRob2RzIGFuZCBnZXR0ZXJzIGluIER1cmF0aW9uOlxuICpcbiAqICogKipDcmVhdGlvbioqIFRvIGNyZWF0ZSBhIER1cmF0aW9uLCB1c2Uge0BsaW5rIER1cmF0aW9uLmZyb21NaWxsaXN9LCB7QGxpbmsgRHVyYXRpb24uZnJvbU9iamVjdH0sIG9yIHtAbGluayBEdXJhdGlvbi5mcm9tSVNPfS5cbiAqICogKipVbml0IHZhbHVlcyoqIFNlZSB0aGUge0BsaW5rIER1cmF0aW9uI3llYXJzfSwge0BsaW5rIER1cmF0aW9uI21vbnRoc30sIHtAbGluayBEdXJhdGlvbiN3ZWVrc30sIHtAbGluayBEdXJhdGlvbiNkYXlzfSwge0BsaW5rIER1cmF0aW9uI2hvdXJzfSwge0BsaW5rIER1cmF0aW9uI21pbnV0ZXN9LCB7QGxpbmsgRHVyYXRpb24jc2Vjb25kc30sIHtAbGluayBEdXJhdGlvbiNtaWxsaXNlY29uZHN9IGFjY2Vzc29ycy5cbiAqICogKipDb25maWd1cmF0aW9uKiogU2VlICB7QGxpbmsgRHVyYXRpb24jbG9jYWxlfSBhbmQge0BsaW5rIER1cmF0aW9uI251bWJlcmluZ1N5c3RlbX0gYWNjZXNzb3JzLlxuICogKiAqKlRyYW5zZm9ybWF0aW9uKiogVG8gY3JlYXRlIG5ldyBEdXJhdGlvbnMgb3V0IG9mIG9sZCBvbmVzIHVzZSB7QGxpbmsgRHVyYXRpb24jcGx1c30sIHtAbGluayBEdXJhdGlvbiNtaW51c30sIHtAbGluayBEdXJhdGlvbiNub3JtYWxpemV9LCB7QGxpbmsgRHVyYXRpb24jc2V0fSwge0BsaW5rIER1cmF0aW9uI3JlY29uZmlndXJlfSwge0BsaW5rIER1cmF0aW9uI3NoaWZ0VG99LCBhbmQge0BsaW5rIER1cmF0aW9uI25lZ2F0ZX0uXG4gKiAqICoqT3V0cHV0KiogVG8gY29udmVydCB0aGUgRHVyYXRpb24gaW50byBvdGhlciByZXByZXNlbnRhdGlvbnMsIHNlZSB7QGxpbmsgRHVyYXRpb24jYXN9LCB7QGxpbmsgRHVyYXRpb24jdG9JU099LCB7QGxpbmsgRHVyYXRpb24jdG9Gb3JtYXR9LCBhbmQge0BsaW5rIER1cmF0aW9uI3RvSlNPTn1cbiAqXG4gKiBUaGVyZSdzIGFyZSBtb3JlIG1ldGhvZHMgZG9jdW1lbnRlZCBiZWxvdy4gSW4gYWRkaXRpb24sIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHN1YnRsZXIgdG9waWNzIGxpa2UgaW50ZXJuYXRpb25hbGl6YXRpb24gYW5kIHZhbGlkaXR5LCBzZWUgdGhlIGV4dGVybmFsIGRvY3VtZW50YXRpb24uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBjb25zdCBhY2N1cmF0ZSA9IGNvbmZpZy5jb252ZXJzaW9uQWNjdXJhY3kgPT09IFwibG9uZ3Rlcm1cIiB8fCBmYWxzZTtcbiAgICBsZXQgbWF0cml4ID0gYWNjdXJhdGUgPyBhY2N1cmF0ZU1hdHJpeCA6IGNhc3VhbE1hdHJpeDtcblxuICAgIGlmIChjb25maWcubWF0cml4KSB7XG4gICAgICBtYXRyaXggPSBjb25maWcubWF0cml4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmFsdWVzID0gY29uZmlnLnZhbHVlcztcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmxvYyA9IGNvbmZpZy5sb2MgfHwgTG9jYWxlLmNyZWF0ZSgpO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY29udmVyc2lvbkFjY3VyYWN5ID0gYWNjdXJhdGUgPyBcImxvbmd0ZXJtXCIgOiBcImNhc3VhbFwiO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW52YWxpZCA9IGNvbmZpZy5pbnZhbGlkIHx8IG51bGw7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5tYXRyaXggPSBtYXRyaXg7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pc0x1eG9uRHVyYXRpb24gPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBEdXJhdGlvbiBmcm9tIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvdW50IG9mIG1pbGxpc2Vjb25kc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgZm9yIHBhcnNpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIHRoZSBsb2NhbGUgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbU1pbGxpcyhjb3VudCwgb3B0cykge1xuICAgIHJldHVybiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbWlsbGlzZWNvbmRzOiBjb3VudCB9LCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEdXJhdGlvbiBmcm9tIGEgSmF2YVNjcmlwdCBvYmplY3Qgd2l0aCBrZXlzIGxpa2UgJ3llYXJzJyBhbmQgJ2hvdXJzJy5cbiAgICogSWYgdGhpcyBvYmplY3QgaXMgZW1wdHkgdGhlbiBhIHplcm8gbWlsbGlzZWNvbmRzIGR1cmF0aW9uIGlzIHJldHVybmVkLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gdGhlIG9iamVjdCB0byBjcmVhdGUgdGhlIERhdGVUaW1lIGZyb21cbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai55ZWFyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLnF1YXJ0ZXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubW9udGhzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla3NcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5kYXlzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouaG91cnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5taW51dGVzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouc2Vjb25kc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1pbGxpc2Vjb25kc1xuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHM9W11dIC0gb3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhpcyBEdXJhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gdGhlIGxvY2FsZSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIHByZXNldCBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm1hdHJpeD1PYmplY3RdIC0gdGhlIGN1c3RvbSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbU9iamVjdChvYmosIG9wdHMgPSB7fSkge1xuICAgIGlmIChvYmogPT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGBEdXJhdGlvbi5mcm9tT2JqZWN0OiBhcmd1bWVudCBleHBlY3RlZCB0byBiZSBhbiBvYmplY3QsIGdvdCAke1xuICAgICAgICAgIG9iaiA9PT0gbnVsbCA/IFwibnVsbFwiIDogdHlwZW9mIG9ialxuICAgICAgICB9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKHtcbiAgICAgIHZhbHVlczogbm9ybWFsaXplT2JqZWN0KG9iaiwgRHVyYXRpb24ubm9ybWFsaXplVW5pdCksXG4gICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdHMpLFxuICAgICAgY29udmVyc2lvbkFjY3VyYWN5OiBvcHRzLmNvbnZlcnNpb25BY2N1cmFjeSxcbiAgICAgIG1hdHJpeDogb3B0cy5tYXRyaXgsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBEdXJhdGlvbkxpa2UuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRHVyYXRpb259IGR1cmF0aW9uTGlrZVxuICAgKiBPbmUgb2Y6XG4gICAqIC0gb2JqZWN0IHdpdGgga2V5cyBsaWtlICd5ZWFycycgYW5kICdob3VycycuXG4gICAqIC0gbnVtYmVyIHJlcHJlc2VudGluZyBtaWxsaXNlY29uZHNcbiAgICogLSBEdXJhdGlvbiBpbnN0YW5jZVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uTGlrZSkge1xuICAgIGlmIChpc051bWJlcihkdXJhdGlvbkxpa2UpKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU1pbGxpcyhkdXJhdGlvbkxpa2UpO1xuICAgIH0gZWxzZSBpZiAoRHVyYXRpb24uaXNEdXJhdGlvbihkdXJhdGlvbkxpa2UpKSB7XG4gICAgICByZXR1cm4gZHVyYXRpb25MaWtlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGR1cmF0aW9uTGlrZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3QoZHVyYXRpb25MaWtlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgVW5rbm93biBkdXJhdGlvbiBhcmd1bWVudCAke2R1cmF0aW9uTGlrZX0gb2YgdHlwZSAke3R5cGVvZiBkdXJhdGlvbkxpa2V9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBhbiBJU08gODYwMSBkdXJhdGlvbiBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGV4dCB0byBwYXJzZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgZm9yIHBhcnNpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIHRoZSBsb2NhbGUgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBwcmVzZXQgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5tYXRyaXg9T2JqZWN0XSAtIHRoZSBwcmVzZXQgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjRHVyYXRpb25zXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU08oJ1AzWTZNMVc0RFQxMkgzME01UycpLnRvT2JqZWN0KCkgLy89PiB7IHllYXJzOiAzLCBtb250aHM6IDYsIHdlZWtzOiAxLCBkYXlzOiA0LCBob3VyczogMTIsIG1pbnV0ZXM6IDMwLCBzZWNvbmRzOiA1IH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTTygnUFQyM0gnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMjMgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPKCdQNVkzTScpLnRvT2JqZWN0KCkgLy89PiB7IHllYXJzOiA1LCBtb250aHM6IDMgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tSVNPKHRleHQsIG9wdHMpIHtcbiAgICBjb25zdCBbcGFyc2VkXSA9IHBhcnNlSVNPRHVyYXRpb24odGV4dCk7XG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3QocGFyc2VkLCBvcHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmludmFsaWQoXCJ1bnBhcnNhYmxlXCIsIGB0aGUgaW5wdXQgXCIke3RleHR9XCIgY2FuJ3QgYmUgcGFyc2VkIGFzIElTTyA4NjAxYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIER1cmF0aW9uIGZyb20gYW4gSVNPIDg2MDEgdGltZSBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGV4dCB0byBwYXJzZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgZm9yIHBhcnNpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIHRoZSBsb2NhbGUgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBwcmVzZXQgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5tYXRyaXg9T2JqZWN0XSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lc1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnMTE6MjI6MzMuNDQ0JykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDExLCBtaW51dGVzOiAyMiwgc2Vjb25kczogMzMsIG1pbGxpc2Vjb25kczogNDQ0IH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJzExOjAwJykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDExLCBtaW51dGVzOiAwLCBzZWNvbmRzOiAwIH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJ1QxMTowMCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMCwgc2Vjb25kczogMCB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCcxMTAwJykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDExLCBtaW51dGVzOiAwLCBzZWNvbmRzOiAwIH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJ1QxMTAwJykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDExLCBtaW51dGVzOiAwLCBzZWNvbmRzOiAwIH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbUlTT1RpbWUodGV4dCwgb3B0cykge1xuICAgIGNvbnN0IFtwYXJzZWRdID0gcGFyc2VJU09UaW1lT25seSh0ZXh0KTtcbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU9iamVjdChwYXJzZWQsIG9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uaW52YWxpZChcInVucGFyc2FibGVcIiwgYHRoZSBpbnB1dCBcIiR7dGV4dH1cIiBjYW4ndCBiZSBwYXJzZWQgYXMgSVNPIDg2MDFgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGludmFsaWQgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gLSBzaW1wbGUgc3RyaW5nIG9mIHdoeSB0aGlzIGRhdGV0aW1lIGlzIGludmFsaWQuIFNob3VsZCBub3QgY29udGFpbiBwYXJhbWV0ZXJzIG9yIGFueXRoaW5nIGVsc2UgZGF0YS1kZXBlbmRlbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHBsYW5hdGlvbj1udWxsXSAtIGxvbmdlciBleHBsYW5hdGlvbiwgbWF5IGluY2x1ZGUgcGFyYW1ldGVycyBhbmQgb3RoZXIgdXNlZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvblxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHN0YXRpYyBpbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24gPSBudWxsKSB7XG4gICAgaWYgKCFyZWFzb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgRHVyYXRpb24gaXMgaW52YWxpZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnZhbGlkID0gcmVhc29uIGluc3RhbmNlb2YgSW52YWxpZCA/IHJlYXNvbiA6IG5ldyBJbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pO1xuXG4gICAgaWYgKFNldHRpbmdzLnRocm93T25JbnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZER1cmF0aW9uRXJyb3IoaW52YWxpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRHVyYXRpb24oeyBpbnZhbGlkIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3RhdGljIG5vcm1hbGl6ZVVuaXQodW5pdCkge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB7XG4gICAgICB5ZWFyOiBcInllYXJzXCIsXG4gICAgICB5ZWFyczogXCJ5ZWFyc1wiLFxuICAgICAgcXVhcnRlcjogXCJxdWFydGVyc1wiLFxuICAgICAgcXVhcnRlcnM6IFwicXVhcnRlcnNcIixcbiAgICAgIG1vbnRoOiBcIm1vbnRoc1wiLFxuICAgICAgbW9udGhzOiBcIm1vbnRoc1wiLFxuICAgICAgd2VlazogXCJ3ZWVrc1wiLFxuICAgICAgd2Vla3M6IFwid2Vla3NcIixcbiAgICAgIGRheTogXCJkYXlzXCIsXG4gICAgICBkYXlzOiBcImRheXNcIixcbiAgICAgIGhvdXI6IFwiaG91cnNcIixcbiAgICAgIGhvdXJzOiBcImhvdXJzXCIsXG4gICAgICBtaW51dGU6IFwibWludXRlc1wiLFxuICAgICAgbWludXRlczogXCJtaW51dGVzXCIsXG4gICAgICBzZWNvbmQ6IFwic2Vjb25kc1wiLFxuICAgICAgc2Vjb25kczogXCJzZWNvbmRzXCIsXG4gICAgICBtaWxsaXNlY29uZDogXCJtaWxsaXNlY29uZHNcIixcbiAgICAgIG1pbGxpc2Vjb25kczogXCJtaWxsaXNlY29uZHNcIixcbiAgICB9W3VuaXQgPyB1bml0LnRvTG93ZXJDYXNlKCkgOiB1bml0XTtcblxuICAgIGlmICghbm9ybWFsaXplZCkgdGhyb3cgbmV3IEludmFsaWRVbml0RXJyb3IodW5pdCk7XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBvYmplY3QgaXMgYSBEdXJhdGlvbi4gV29ya3MgYWNyb3NzIGNvbnRleHQgYm91bmRhcmllc1xuICAgKiBAcGFyYW0ge29iamVjdH0gb1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzRHVyYXRpb24obykge1xuICAgIHJldHVybiAobyAmJiBvLmlzTHV4b25EdXJhdGlvbikgfHwgZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0ICB0aGUgbG9jYWxlIG9mIGEgRHVyYXRpb24sIHN1Y2ggJ2VuLUdCJ1xuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGxvY2FsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5sb2MubG9jYWxlIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG51bWJlcmluZyBzeXN0ZW0gb2YgYSBEdXJhdGlvbiwgc3VjaCAnYmVuZycuIFRoZSBudW1iZXJpbmcgc3lzdGVtIGlzIHVzZWQgd2hlbiBmb3JtYXR0aW5nIHRoZSBEdXJhdGlvblxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG51bWJlcmluZ1N5c3RlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5sb2MubnVtYmVyaW5nU3lzdGVtIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24gZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGZvcm1hdCBzdHJpbmcuIFlvdSBtYXkgdXNlIHRoZXNlIHRva2VuczpcbiAgICogKiBgU2AgZm9yIG1pbGxpc2Vjb25kc1xuICAgKiAqIGBzYCBmb3Igc2Vjb25kc1xuICAgKiAqIGBtYCBmb3IgbWludXRlc1xuICAgKiAqIGBoYCBmb3IgaG91cnNcbiAgICogKiBgZGAgZm9yIGRheXNcbiAgICogKiBgd2AgZm9yIHdlZWtzXG4gICAqICogYE1gIGZvciBtb250aHNcbiAgICogKiBgeWAgZm9yIHllYXJzXG4gICAqIE5vdGVzOlxuICAgKiAqIEFkZCBwYWRkaW5nIGJ5IHJlcGVhdGluZyB0aGUgdG9rZW4sIGUuZy4gXCJ5eVwiIHBhZHMgdGhlIHllYXJzIHRvIHR3byBkaWdpdHMsIFwiaGhoaFwiIHBhZHMgdGhlIGhvdXJzIG91dCB0byBmb3VyIGRpZ2l0c1xuICAgKiAqIFRva2VucyBjYW4gYmUgZXNjYXBlZCBieSB3cmFwcGluZyB3aXRoIHNpbmdsZSBxdW90ZXMuXG4gICAqICogVGhlIGR1cmF0aW9uIHdpbGwgYmUgY29udmVydGVkIHRvIHRoZSBzZXQgb2YgdW5pdHMgaW4gdGhlIGZvcm1hdCBzdHJpbmcgdXNpbmcge0BsaW5rIER1cmF0aW9uI3NoaWZ0VG99IGFuZCB0aGUgRHVyYXRpb25zJ3MgY29udmVyc2lvbiBhY2N1cmFjeSBzZXR0aW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCBzdHJpbmdcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZmxvb3I9dHJ1ZV0gLSBmbG9vciBudW1lcmljYWwgdmFsdWVzXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9KS50b0Zvcm1hdChcInkgZCBzXCIpIC8vPT4gXCIxIDYgMlwiXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9KS50b0Zvcm1hdChcInl5IGRkIHNzc1wiKSAvLz0+IFwiMDEgMDYgMDAyXCJcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvRm9ybWF0KFwiTSBTXCIpIC8vPT4gXCIxMiA1MTg0MDIwMDBcIlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0Zvcm1hdChmbXQsIG9wdHMgPSB7fSkge1xuICAgIC8vIHJldmVyc2UtY29tcGF0IHNpbmNlIDEuMjsgd2UgYWx3YXlzIHJvdW5kIGRvd24gbm93LCBuZXZlciB1cCwgYW5kIHdlIGRvIGl0IGJ5IGRlZmF1bHRcbiAgICBjb25zdCBmbXRPcHRzID0ge1xuICAgICAgLi4ub3B0cyxcbiAgICAgIGZsb29yOiBvcHRzLnJvdW5kICE9PSBmYWxzZSAmJiBvcHRzLmZsb29yICE9PSBmYWxzZSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRcbiAgICAgID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYywgZm10T3B0cykuZm9ybWF0RHVyYXRpb25Gcm9tU3RyaW5nKHRoaXMsIGZtdClcbiAgICAgIDogSU5WQUxJRDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgRHVyYXRpb24gd2l0aCBhbGwgdW5pdHMgaW5jbHVkZWQuXG4gICAqIFRvIG1vZGlmeSBpdHMgYmVoYXZpb3IsIHVzZSBgbGlzdFN0eWxlYCBhbmQgYW55IEludGwuTnVtYmVyRm9ybWF0IG9wdGlvbiwgdGhvdWdoIGB1bml0RGlzcGxheWAgaXMgZXNwZWNpYWxseSByZWxldmFudC5cbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsL051bWJlckZvcm1hdC9OdW1iZXJGb3JtYXQjb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIEZvcm1hdHRpbmcgb3B0aW9ucy4gQWNjZXB0cyB0aGUgc2FtZSBrZXlzIGFzIHRoZSBvcHRpb25zIHBhcmFtZXRlciBvZiB0aGUgbmF0aXZlIGBJbnRsLk51bWJlckZvcm1hdGAgY29uc3RydWN0b3IsIGFzIHdlbGwgYXMgYGxpc3RTdHlsZWAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5saXN0U3R5bGU9J25hcnJvdyddIC0gSG93IHRvIGZvcm1hdCB0aGUgbWVyZ2VkIGxpc3QuIENvcnJlc3BvbmRzIHRvIHRoZSBgc3R5bGVgIHByb3BlcnR5IG9mIHRoZSBvcHRpb25zIHBhcmFtZXRlciBvZiB0aGUgbmF0aXZlIGBJbnRsLkxpc3RGb3JtYXRgIGNvbnN0cnVjdG9yLlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiB2YXIgZHVyID0gRHVyYXRpb24uZnJvbU9iamVjdCh7IGRheXM6IDEsIGhvdXJzOiA1LCBtaW51dGVzOiA2IH0pXG4gICAqIGR1ci50b0h1bWFuKCkgLy89PiAnMSBkYXksIDUgaG91cnMsIDYgbWludXRlcydcbiAgICogZHVyLnRvSHVtYW4oeyBsaXN0U3R5bGU6IFwibG9uZ1wiIH0pIC8vPT4gJzEgZGF5LCA1IGhvdXJzLCBhbmQgNiBtaW51dGVzJ1xuICAgKiBkdXIudG9IdW1hbih7IHVuaXREaXNwbGF5OiBcInNob3J0XCIgfSkgLy89PiAnMSBkYXksIDUgaHIsIDYgbWluJ1xuICAgKiBgYGBcbiAgICovXG4gIHRvSHVtYW4ob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEO1xuXG4gICAgY29uc3QgbCA9IG9yZGVyZWRVbml0c1xuICAgICAgLm1hcCgodW5pdCkgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSB0aGlzLnZhbHVlc1t1bml0XTtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbCkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2NcbiAgICAgICAgICAubnVtYmVyRm9ybWF0dGVyKHsgc3R5bGU6IFwidW5pdFwiLCB1bml0RGlzcGxheTogXCJsb25nXCIsIC4uLm9wdHMsIHVuaXQ6IHVuaXQuc2xpY2UoMCwgLTEpIH0pXG4gICAgICAgICAgLmZvcm1hdCh2YWwpO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKG4pID0+IG4pO1xuXG4gICAgcmV0dXJuIHRoaXMubG9jXG4gICAgICAubGlzdEZvcm1hdHRlcih7IHR5cGU6IFwiY29uanVuY3Rpb25cIiwgc3R5bGU6IG9wdHMubGlzdFN0eWxlIHx8IFwibmFycm93XCIsIC4uLm9wdHMgfSlcbiAgICAgIC5mb3JtYXQobCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGggdGhpcyBEdXJhdGlvbidzIHZhbHVlcy5cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvT2JqZWN0KCkgLy89PiB7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH1cbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgdG9PYmplY3QoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB7fTtcbiAgICByZXR1cm4geyAuLi50aGlzLnZhbHVlcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI0R1cmF0aW9uc1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDMsIHNlY29uZHM6IDQ1IH0pLnRvSVNPKCkgLy89PiAnUDNZVDQ1UydcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogNCwgc2Vjb25kczogNDUgfSkudG9JU08oKSAvLz0+ICdQNE1UNDVTJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbW9udGhzOiA1IH0pLnRvSVNPKCkgLy89PiAnUDVNJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbWludXRlczogNSB9KS50b0lTTygpIC8vPT4gJ1BUNU0nXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtaWxsaXNlY29uZHM6IDYgfSkudG9JU08oKSAvLz0+ICdQVDAuMDA2UydcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU08oKSB7XG4gICAgLy8gd2UgY291bGQgdXNlIHRoZSBmb3JtYXR0ZXIsIGJ1dCB0aGlzIGlzIGFuIGVhc2llciB3YXkgdG8gZ2V0IHRoZSBtaW5pbXVtIHN0cmluZ1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcblxuICAgIGxldCBzID0gXCJQXCI7XG4gICAgaWYgKHRoaXMueWVhcnMgIT09IDApIHMgKz0gdGhpcy55ZWFycyArIFwiWVwiO1xuICAgIGlmICh0aGlzLm1vbnRocyAhPT0gMCB8fCB0aGlzLnF1YXJ0ZXJzICE9PSAwKSBzICs9IHRoaXMubW9udGhzICsgdGhpcy5xdWFydGVycyAqIDMgKyBcIk1cIjtcbiAgICBpZiAodGhpcy53ZWVrcyAhPT0gMCkgcyArPSB0aGlzLndlZWtzICsgXCJXXCI7XG4gICAgaWYgKHRoaXMuZGF5cyAhPT0gMCkgcyArPSB0aGlzLmRheXMgKyBcIkRcIjtcbiAgICBpZiAodGhpcy5ob3VycyAhPT0gMCB8fCB0aGlzLm1pbnV0ZXMgIT09IDAgfHwgdGhpcy5zZWNvbmRzICE9PSAwIHx8IHRoaXMubWlsbGlzZWNvbmRzICE9PSAwKVxuICAgICAgcyArPSBcIlRcIjtcbiAgICBpZiAodGhpcy5ob3VycyAhPT0gMCkgcyArPSB0aGlzLmhvdXJzICsgXCJIXCI7XG4gICAgaWYgKHRoaXMubWludXRlcyAhPT0gMCkgcyArPSB0aGlzLm1pbnV0ZXMgKyBcIk1cIjtcbiAgICBpZiAodGhpcy5zZWNvbmRzICE9PSAwIHx8IHRoaXMubWlsbGlzZWNvbmRzICE9PSAwKVxuICAgICAgLy8gdGhpcyB3aWxsIGhhbmRsZSBcImZsb2F0aW5nIHBvaW50IG1hZG5lc3NcIiBieSByZW1vdmluZyBleHRyYSBkZWNpbWFsIHBsYWNlc1xuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTg4MDA0L2lzLWZsb2F0aW5nLXBvaW50LW1hdGgtYnJva2VuXG4gICAgICBzICs9IHJvdW5kVG8odGhpcy5zZWNvbmRzICsgdGhpcy5taWxsaXNlY29uZHMgLyAxMDAwLCAzKSArIFwiU1wiO1xuICAgIGlmIChzID09PSBcIlBcIikgcyArPSBcIlQwU1wiO1xuICAgIHJldHVybiBzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uLCBmb3JtYXR0ZWQgYXMgYSB0aW1lIG9mIGRheS5cbiAgICogTm90ZSB0aGF0IHRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGUgZHVyYXRpb24gaXMgaW52YWxpZCwgbmVnYXRpdmUsIG9yIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiAyNCBob3Vycy5cbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NTZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVByZWZpeD1mYWxzZV0gLSBpbmNsdWRlIHRoZSBgVGAgcHJlZml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdFxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSgpIC8vPT4gJzExOjAwOjAwLjAwMCdcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBzdXBwcmVzc01pbGxpc2Vjb25kczogdHJ1ZSB9KSAvLz0+ICcxMTowMDowMCdcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBzdXBwcmVzc1NlY29uZHM6IHRydWUgfSkgLy89PiAnMTE6MDAnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKHsgaW5jbHVkZVByZWZpeDogdHJ1ZSB9KSAvLz0+ICdUMTE6MDA6MDAuMDAwJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcxMTAwMDAuMDAwJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0lTT1RpbWUob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbWlsbGlzID0gdGhpcy50b01pbGxpcygpO1xuICAgIGlmIChtaWxsaXMgPCAwIHx8IG1pbGxpcyA+PSA4NjQwMDAwMCkgcmV0dXJuIG51bGw7XG5cbiAgICBvcHRzID0ge1xuICAgICAgc3VwcHJlc3NNaWxsaXNlY29uZHM6IGZhbHNlLFxuICAgICAgc3VwcHJlc3NTZWNvbmRzOiBmYWxzZSxcbiAgICAgIGluY2x1ZGVQcmVmaXg6IGZhbHNlLFxuICAgICAgZm9ybWF0OiBcImV4dGVuZGVkXCIsXG4gICAgICAuLi5vcHRzLFxuICAgICAgaW5jbHVkZU9mZnNldDogZmFsc2UsXG4gICAgfTtcblxuICAgIGNvbnN0IGRhdGVUaW1lID0gRGF0ZVRpbWUuZnJvbU1pbGxpcyhtaWxsaXMsIHsgem9uZTogXCJVVENcIiB9KTtcbiAgICByZXR1cm4gZGF0ZVRpbWUudG9JU09UaW1lKG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIEpTT04uXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b0lTTygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIGRlYnVnZ2luZy5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9JU08oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24gYXBwcm9wcmlhdGUgZm9yIHRoZSBSRVBMLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBbU3ltYm9sLmZvcihcIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tXCIpXSgpIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gYER1cmF0aW9uIHsgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KHRoaXMudmFsdWVzKX0gfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgRHVyYXRpb24geyBJbnZhbGlkLCByZWFzb246ICR7dGhpcy5pbnZhbGlkUmVhc29ufSB9YDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBtaWxsaXNlY29uZHMgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbi5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdG9NaWxsaXMoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBOYU47XG5cbiAgICByZXR1cm4gZHVyYXRpb25Ub01pbGxpcyh0aGlzLm1hdHJpeCwgdGhpcy52YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gbWlsbGlzZWNvbmRzIHZhbHVlIG9mIHRoaXMgRHVyYXRpb24uIEFsaWFzIG9mIHtAbGluayB0b01pbGxpc31cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdmFsdWVPZigpIHtcbiAgICByZXR1cm4gdGhpcy50b01pbGxpcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgdGhpcyBEdXJhdGlvbiBsb25nZXIgYnkgdGhlIHNwZWNpZmllZCBhbW91bnQuIFJldHVybiBhIG5ld2x5LWNvbnN0cnVjdGVkIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGFtb3VudCB0byBhZGQuIEVpdGhlciBhIEx1eG9uIER1cmF0aW9uLCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIHRoZSBvYmplY3QgYXJndW1lbnQgdG8gRHVyYXRpb24uZnJvbU9iamVjdCgpXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgcGx1cyhkdXJhdGlvbikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcblxuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLFxuICAgICAgcmVzdWx0ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGsgb2Ygb3JkZXJlZFVuaXRzKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkoZHVyLnZhbHVlcywgaykgfHwgaGFzT3duUHJvcGVydHkodGhpcy52YWx1ZXMsIGspKSB7XG4gICAgICAgIHJlc3VsdFtrXSA9IGR1ci5nZXQoaykgKyB0aGlzLmdldChrKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmUodGhpcywgeyB2YWx1ZXM6IHJlc3VsdCB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHRoaXMgRHVyYXRpb24gc2hvcnRlciBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gUmV0dXJuIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIHN1YnRyYWN0LiBFaXRoZXIgYSBMdXhvbiBEdXJhdGlvbiwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCB0aGUgb2JqZWN0IGFyZ3VtZW50IHRvIER1cmF0aW9uLmZyb21PYmplY3QoKVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIG1pbnVzKGR1cmF0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuXG4gICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbik7XG4gICAgcmV0dXJuIHRoaXMucGx1cyhkdXIubmVnYXRlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjYWxlIHRoaXMgRHVyYXRpb24gYnkgdGhlIHNwZWNpZmllZCBhbW91bnQuIFJldHVybiBhIG5ld2x5LWNvbnN0cnVjdGVkIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIHVuaXQuIEFyaXR5IGlzIDEgb3IgMjogdGhlIHZhbHVlIG9mIHRoZSB1bml0IGFuZCwgb3B0aW9uYWxseSwgdGhlIHVuaXQgbmFtZS4gTXVzdCByZXR1cm4gYSBudW1iZXIuXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSwgbWludXRlczogMzAgfSkubWFwVW5pdHMoeCA9PiB4ICogMikgLy89PiB7IGhvdXJzOiAyLCBtaW51dGVzOiA2MCB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSwgbWludXRlczogMzAgfSkubWFwVW5pdHMoKHgsIHUpID0+IHUgPT09IFwiaG91cnNcIiA/IHggKiAyIDogeCkgLy89PiB7IGhvdXJzOiAyLCBtaW51dGVzOiAzMCB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgbWFwVW5pdHMoZm4pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKSkge1xuICAgICAgcmVzdWx0W2tdID0gYXNOdW1iZXIoZm4odGhpcy52YWx1ZXNba10sIGspKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdmFsdWVzOiByZXN1bHQgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBvZiB1bml0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIGEgdW5pdCBzdWNoIGFzICdtaW51dGUnIG9yICdkYXknXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe3llYXJzOiAyLCBkYXlzOiAzfSkuZ2V0KCd5ZWFycycpIC8vPT4gMlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgnbW9udGhzJykgLy89PiAwXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe3llYXJzOiAyLCBkYXlzOiAzfSkuZ2V0KCdkYXlzJykgLy89PiAzXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldCh1bml0KSB7XG4gICAgcmV0dXJuIHRoaXNbRHVyYXRpb24ubm9ybWFsaXplVW5pdCh1bml0KV07XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgdmFsdWVzIG9mIHNwZWNpZmllZCB1bml0cy4gUmV0dXJuIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXMgLSBhIG1hcHBpbmcgb2YgdW5pdHMgdG8gbnVtYmVyc1xuICAgKiBAZXhhbXBsZSBkdXIuc2V0KHsgeWVhcnM6IDIwMTcgfSlcbiAgICogQGV4YW1wbGUgZHVyLnNldCh7IGhvdXJzOiA4LCBtaW51dGVzOiAzMCB9KVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHNldCh2YWx1ZXMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG5cbiAgICBjb25zdCBtaXhlZCA9IHsgLi4udGhpcy52YWx1ZXMsIC4uLm5vcm1hbGl6ZU9iamVjdCh2YWx1ZXMsIER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQpIH07XG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdmFsdWVzOiBtaXhlZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBsb2NhbGUgYW5kL29yIG51bWJlcmluZ1N5c3RlbS4gIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi5cbiAgICogQGV4YW1wbGUgZHVyLnJlY29uZmlndXJlKHsgbG9jYWxlOiAnZW4tR0InIH0pXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgcmVjb25maWd1cmUoeyBsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgY29udmVyc2lvbkFjY3VyYWN5LCBtYXRyaXggfSA9IHt9KSB7XG4gICAgY29uc3QgbG9jID0gdGhpcy5sb2MuY2xvbmUoeyBsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSB9KTtcbiAgICBjb25zdCBvcHRzID0geyBsb2MsIG1hdHJpeCwgY29udmVyc2lvbkFjY3VyYWN5IH07XG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBkdXJhdGlvbiBpbiB0aGUgc3BlY2lmaWVkIHVuaXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gYSB1bml0IHN1Y2ggYXMgJ21pbnV0ZXMnIG9yICdkYXlzJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMX0pLmFzKCdkYXlzJykgLy89PiAzNjVcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7eWVhcnM6IDF9KS5hcygnbW9udGhzJykgLy89PiAxMlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHtob3VyczogNjB9KS5hcygnZGF5cycpIC8vPT4gMi41XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGFzKHVuaXQpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5zaGlmdFRvKHVuaXQpLmdldCh1bml0KSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWR1Y2UgdGhpcyBEdXJhdGlvbiB0byBpdHMgY2Fub25pY2FsIHJlcHJlc2VudGF0aW9uIGluIGl0cyBjdXJyZW50IHVuaXRzLlxuICAgKiBBc3N1bWluZyB0aGUgb3ZlcmFsbCB2YWx1ZSBvZiB0aGUgRHVyYXRpb24gaXMgcG9zaXRpdmUsIHRoaXMgbWVhbnM6XG4gICAqIC0gZXhjZXNzaXZlIHZhbHVlcyBmb3IgbG93ZXItb3JkZXIgdW5pdHMgYXJlIGNvbnZlcnRlZCB0byBoaWdoZXItb3JkZXIgdW5pdHMgKGlmIHBvc3NpYmxlLCBzZWUgZmlyc3QgYW5kIHNlY29uZCBleGFtcGxlKVxuICAgKiAtIG5lZ2F0aXZlIGxvd2VyLW9yZGVyIHVuaXRzIGFyZSBjb252ZXJ0ZWQgdG8gaGlnaGVyIG9yZGVyIHVuaXRzICh0aGVyZSBtdXN0IGJlIHN1Y2ggYSBoaWdoZXIgb3JkZXIgdW5pdCwgb3RoZXJ3aXNlXG4gICAqICAgdGhlIG92ZXJhbGwgdmFsdWUgd291bGQgYmUgbmVnYXRpdmUsIHNlZSB0aGlyZCBleGFtcGxlKVxuICAgKiAtIGZyYWN0aW9uYWwgdmFsdWVzIGZvciBoaWdoZXItb3JkZXIgdW5pdHMgYXJlIGNvbnZlcnRlZCB0byBsb3dlci1vcmRlciB1bml0cyAoaWYgcG9zc2libGUsIHNlZSBmb3VydGggZXhhbXBsZSlcbiAgICpcbiAgICogSWYgdGhlIG92ZXJhbGwgdmFsdWUgaXMgbmVnYXRpdmUsIHRoZSByZXN1bHQgb2YgdGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBgdGhpcy5uZWdhdGUoKS5ub3JtYWxpemUoKS5uZWdhdGUoKWAuXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMiwgZGF5czogNTAwMCB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMTUsIGRheXM6IDI1NSB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiA1MDAwIH0pLm5vcm1hbGl6ZSgpLnRvT2JqZWN0KCkgLy89PiB7IGRheXM6IDUwMDAgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEyLCBtaW51dGVzOiAtNDUgfSkubm9ybWFsaXplKCkudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDExLCBtaW51dGVzOiAxNSB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMi41LCBkYXlzOiAwLCBob3VyczogMCB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMiwgZGF5czogMTgyLCBob3VyczogMTIgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIG5vcm1hbGl6ZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgdmFscyA9IHRoaXMudG9PYmplY3QoKTtcbiAgICBub3JtYWxpemVWYWx1ZXModGhpcy5tYXRyaXgsIHZhbHMpO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogdmFscyB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNjYWxlIHVuaXRzIHRvIGl0cyBsYXJnZXN0IHJlcHJlc2VudGF0aW9uXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtaWxsaXNlY29uZHM6IDkwMDAwIH0pLnJlc2NhbGUoKS50b09iamVjdCgpIC8vPT4geyBtaW51dGVzOiAxLCBzZWNvbmRzOiAzMCB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgcmVzY2FsZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgdmFscyA9IHJlbW92ZVplcm9lcyh0aGlzLm5vcm1hbGl6ZSgpLnNoaWZ0VG9BbGwoKS50b09iamVjdCgpKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywgeyB2YWx1ZXM6IHZhbHMgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGlzIER1cmF0aW9uIGludG8gaXRzIHJlcHJlc2VudGF0aW9uIGluIGEgZGlmZmVyZW50IHNldCBvZiB1bml0cy5cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBzZWNvbmRzOiAzMCB9KS5zaGlmdFRvKCdtaW51dGVzJywgJ21pbGxpc2Vjb25kcycpLnRvT2JqZWN0KCkgLy89PiB7IG1pbnV0ZXM6IDYwLCBtaWxsaXNlY29uZHM6IDMwMDAwIH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzaGlmdFRvKC4uLnVuaXRzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKHVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdW5pdHMgPSB1bml0cy5tYXAoKHUpID0+IER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQodSkpO1xuXG4gICAgY29uc3QgYnVpbHQgPSB7fSxcbiAgICAgIGFjY3VtdWxhdGVkID0ge30sXG4gICAgICB2YWxzID0gdGhpcy50b09iamVjdCgpO1xuICAgIGxldCBsYXN0VW5pdDtcblxuICAgIGZvciAoY29uc3QgayBvZiBvcmRlcmVkVW5pdHMpIHtcbiAgICAgIGlmICh1bml0cy5pbmRleE9mKGspID49IDApIHtcbiAgICAgICAgbGFzdFVuaXQgPSBrO1xuXG4gICAgICAgIGxldCBvd24gPSAwO1xuXG4gICAgICAgIC8vIGFueXRoaW5nIHdlIGhhdmVuJ3QgYm9pbGVkIGRvd24geWV0IHNob3VsZCBnZXQgYm9pbGVkIHRvIHRoaXMgdW5pdFxuICAgICAgICBmb3IgKGNvbnN0IGFrIGluIGFjY3VtdWxhdGVkKSB7XG4gICAgICAgICAgb3duICs9IHRoaXMubWF0cml4W2FrXVtrXSAqIGFjY3VtdWxhdGVkW2FrXTtcbiAgICAgICAgICBhY2N1bXVsYXRlZFtha10gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGx1cyBhbnl0aGluZyB0aGF0J3MgYWxyZWFkeSBpbiB0aGlzIHVuaXRcbiAgICAgICAgaWYgKGlzTnVtYmVyKHZhbHNba10pKSB7XG4gICAgICAgICAgb3duICs9IHZhbHNba107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGtlZXAgdGhlIGludGVnZXIgcGFydCBmb3Igbm93IGluIHRoZSBob3BlcyBvZiBwdXR0aW5nIGFueSBkZWNpbWFsIHBhcnRcbiAgICAgICAgLy8gaW50byBhIHNtYWxsZXIgdW5pdCBsYXRlclxuICAgICAgICBjb25zdCBpID0gTWF0aC50cnVuYyhvd24pO1xuICAgICAgICBidWlsdFtrXSA9IGk7XG4gICAgICAgIGFjY3VtdWxhdGVkW2tdID0gKG93biAqIDEwMDAgLSBpICogMTAwMCkgLyAxMDAwO1xuXG4gICAgICAgIC8vIG90aGVyd2lzZSwga2VlcCBpdCBpbiB0aGUgd2luZ3MgdG8gYm9pbCBpdCBsYXRlclxuICAgICAgfSBlbHNlIGlmIChpc051bWJlcih2YWxzW2tdKSkge1xuICAgICAgICBhY2N1bXVsYXRlZFtrXSA9IHZhbHNba107XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYW55dGhpbmcgbGVmdG92ZXIgYmVjb21lcyB0aGUgZGVjaW1hbCBmb3IgdGhlIGxhc3QgdW5pdFxuICAgIC8vIGxhc3RVbml0IG11c3QgYmUgZGVmaW5lZCBzaW5jZSB1bml0cyBpcyBub3QgZW1wdHlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhY2N1bXVsYXRlZCkge1xuICAgICAgaWYgKGFjY3VtdWxhdGVkW2tleV0gIT09IDApIHtcbiAgICAgICAgYnVpbHRbbGFzdFVuaXRdICs9XG4gICAgICAgICAga2V5ID09PSBsYXN0VW5pdCA/IGFjY3VtdWxhdGVkW2tleV0gOiBhY2N1bXVsYXRlZFtrZXldIC8gdGhpcy5tYXRyaXhbbGFzdFVuaXRdW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9ybWFsaXplVmFsdWVzKHRoaXMubWF0cml4LCBidWlsdCk7XG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdmFsdWVzOiBidWlsdCB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaGlmdCB0aGlzIER1cmF0aW9uIHRvIGFsbCBhdmFpbGFibGUgdW5pdHMuXG4gICAqIFNhbWUgYXMgc2hpZnRUbyhcInllYXJzXCIsIFwibW9udGhzXCIsIFwid2Vla3NcIiwgXCJkYXlzXCIsIFwiaG91cnNcIiwgXCJtaW51dGVzXCIsIFwic2Vjb25kc1wiLCBcIm1pbGxpc2Vjb25kc1wiKVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHNoaWZ0VG9BbGwoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIHJldHVybiB0aGlzLnNoaWZ0VG8oXG4gICAgICBcInllYXJzXCIsXG4gICAgICBcIm1vbnRoc1wiLFxuICAgICAgXCJ3ZWVrc1wiLFxuICAgICAgXCJkYXlzXCIsXG4gICAgICBcImhvdXJzXCIsXG4gICAgICBcIm1pbnV0ZXNcIixcbiAgICAgIFwic2Vjb25kc1wiLFxuICAgICAgXCJtaWxsaXNlY29uZHNcIlxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBuZWdhdGl2ZSBvZiB0aGlzIER1cmF0aW9uLlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEsIHNlY29uZHM6IDMwIH0pLm5lZ2F0ZSgpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAtMSwgc2Vjb25kczogLTMwIH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBuZWdhdGUoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IG5lZ2F0ZWQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModGhpcy52YWx1ZXMpKSB7XG4gICAgICBuZWdhdGVkW2tdID0gdGhpcy52YWx1ZXNba10gPT09IDAgPyAwIDogLXRoaXMudmFsdWVzW2tdO1xuICAgIH1cbiAgICByZXR1cm4gY2xvbmUodGhpcywgeyB2YWx1ZXM6IG5lZ2F0ZWQgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB5ZWFycy5cbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB5ZWFycygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMueWVhcnMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHF1YXJ0ZXJzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHF1YXJ0ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5xdWFydGVycyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbW9udGhzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG1vbnRocygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMubW9udGhzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB3ZWVrc1xuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHdlZWtzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy53ZWVrcyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGF5cy5cbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBkYXlzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5kYXlzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBob3Vycy5cbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBob3VycygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMuaG91cnMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1pbnV0ZXMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbWludXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMubWludXRlcyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2Vjb25kcy5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHNlY29uZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLnNlY29uZHMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1pbGxpc2Vjb25kcy5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG1pbGxpc2Vjb25kcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMubWlsbGlzZWNvbmRzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBEdXJhdGlvbiBpcyBpbnZhbGlkLiBJbnZhbGlkIGR1cmF0aW9ucyBhcmUgcmV0dXJuZWQgYnkgZGlmZiBvcGVyYXRpb25zXG4gICAqIG9uIGludmFsaWQgRGF0ZVRpbWVzIG9yIEludGVydmFscy5cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBlcnJvciBjb2RlIGlmIHRoaXMgRHVyYXRpb24gYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIER1cmF0aW9uIGlzIHZhbGlkXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGdldCBpbnZhbGlkUmVhc29uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQucmVhc29uIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSB0aGlzIER1cmF0aW9uIGJlY2FtZSBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBEdXJhdGlvbiBpcyB2YWxpZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGludmFsaWRFeHBsYW5hdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLmV4cGxhbmF0aW9uIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFcXVhbGl0eSBjaGVja1xuICAgKiBUd28gRHVyYXRpb25zIGFyZSBlcXVhbCBpZmYgdGhleSBoYXZlIHRoZSBzYW1lIHVuaXRzIGFuZCB0aGUgc2FtZSB2YWx1ZXMgZm9yIGVhY2ggdW5pdC5cbiAgICogQHBhcmFtIHtEdXJhdGlvbn0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGVxdWFscyhvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFvdGhlci5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmxvYy5lcXVhbHMob3RoZXIubG9jKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVxKHYxLCB2Mikge1xuICAgICAgLy8gQ29uc2lkZXIgMCBhbmQgdW5kZWZpbmVkIGFzIGVxdWFsXG4gICAgICBpZiAodjEgPT09IHVuZGVmaW5lZCB8fCB2MSA9PT0gMCkgcmV0dXJuIHYyID09PSB1bmRlZmluZWQgfHwgdjIgPT09IDA7XG4gICAgICByZXR1cm4gdjEgPT09IHYyO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdSBvZiBvcmRlcmVkVW5pdHMpIHtcbiAgICAgIGlmICghZXEodGhpcy52YWx1ZXNbdV0sIG90aGVyLnZhbHVlc1t1XSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwiLy8gdGhlc2UgYXJlbid0IHJlYWxseSBwcml2YXRlLCBidXQgbm9yIGFyZSB0aGV5IHJlYWxseSB1c2VmdWwgdG8gZG9jdW1lbnRcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBMdXhvbkVycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZERhdGVUaW1lRXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocmVhc29uKSB7XG4gICAgc3VwZXIoYEludmFsaWQgRGF0ZVRpbWU6ICR7cmVhc29uLnRvTWVzc2FnZSgpfWApO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRJbnRlcnZhbEVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlYXNvbikge1xuICAgIHN1cGVyKGBJbnZhbGlkIEludGVydmFsOiAke3JlYXNvbi50b01lc3NhZ2UoKX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkRHVyYXRpb25FcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZWFzb24pIHtcbiAgICBzdXBlcihgSW52YWxpZCBEdXJhdGlvbjogJHtyZWFzb24udG9NZXNzYWdlKCl9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHt9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRVbml0RXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHtcbiAgY29uc3RydWN0b3IodW5pdCkge1xuICAgIHN1cGVyKGBJbnZhbGlkIHVuaXQgJHt1bml0fWApO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBab25lSXNBYnN0cmFjdEVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiWm9uZSBpcyBhbiBhYnN0cmFjdCBjbGFzc1wiKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaW50ZWdlckJldHdlZW4sXG4gIGlzTGVhcFllYXIsXG4gIHRpbWVPYmplY3QsXG4gIGRheXNJblllYXIsXG4gIGRheXNJbk1vbnRoLFxuICB3ZWVrc0luV2Vla1llYXIsXG4gIGlzSW50ZWdlcixcbiAgaXNVbmRlZmluZWQsXG59IGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCBJbnZhbGlkIGZyb20gXCIuL2ludmFsaWQuanNcIjtcbmltcG9ydCB7IENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy5qc1wiO1xuXG5jb25zdCBub25MZWFwTGFkZGVyID0gWzAsIDMxLCA1OSwgOTAsIDEyMCwgMTUxLCAxODEsIDIxMiwgMjQzLCAyNzMsIDMwNCwgMzM0XSxcbiAgbGVhcExhZGRlciA9IFswLCAzMSwgNjAsIDkxLCAxMjEsIDE1MiwgMTgyLCAyMTMsIDI0NCwgMjc0LCAzMDUsIDMzNV07XG5cbmZ1bmN0aW9uIHVuaXRPdXRPZlJhbmdlKHVuaXQsIHZhbHVlKSB7XG4gIHJldHVybiBuZXcgSW52YWxpZChcbiAgICBcInVuaXQgb3V0IG9mIHJhbmdlXCIsXG4gICAgYHlvdSBzcGVjaWZpZWQgJHt2YWx1ZX0gKG9mIHR5cGUgJHt0eXBlb2YgdmFsdWV9KSBhcyBhICR7dW5pdH0sIHdoaWNoIGlzIGludmFsaWRgXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXlPZldlZWsoeWVhciwgbW9udGgsIGRheSkge1xuICBjb25zdCBkID0gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGggLSAxLCBkYXkpKTtcblxuICBpZiAoeWVhciA8IDEwMCAmJiB5ZWFyID49IDApIHtcbiAgICBkLnNldFVUQ0Z1bGxZZWFyKGQuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDApO1xuICB9XG5cbiAgY29uc3QganMgPSBkLmdldFVUQ0RheSgpO1xuXG4gIHJldHVybiBqcyA9PT0gMCA/IDcgOiBqcztcbn1cblxuZnVuY3Rpb24gY29tcHV0ZU9yZGluYWwoeWVhciwgbW9udGgsIGRheSkge1xuICByZXR1cm4gZGF5ICsgKGlzTGVhcFllYXIoeWVhcikgPyBsZWFwTGFkZGVyIDogbm9uTGVhcExhZGRlcilbbW9udGggLSAxXTtcbn1cblxuZnVuY3Rpb24gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKSB7XG4gIGNvbnN0IHRhYmxlID0gaXNMZWFwWWVhcih5ZWFyKSA/IGxlYXBMYWRkZXIgOiBub25MZWFwTGFkZGVyLFxuICAgIG1vbnRoMCA9IHRhYmxlLmZpbmRJbmRleCgoaSkgPT4gaSA8IG9yZGluYWwpLFxuICAgIGRheSA9IG9yZGluYWwgLSB0YWJsZVttb250aDBdO1xuICByZXR1cm4geyBtb250aDogbW9udGgwICsgMSwgZGF5IH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc29XZWVrZGF5VG9Mb2NhbChpc29XZWVrZGF5LCBzdGFydE9mV2Vlaykge1xuICByZXR1cm4gKChpc29XZWVrZGF5IC0gc3RhcnRPZldlZWsgKyA3KSAlIDcpICsgMTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBncmVnb3JpYW5Ub1dlZWsoZ3JlZ09iaiwgbWluRGF5c0luRmlyc3RXZWVrID0gNCwgc3RhcnRPZldlZWsgPSAxKSB7XG4gIGNvbnN0IHsgeWVhciwgbW9udGgsIGRheSB9ID0gZ3JlZ09iaixcbiAgICBvcmRpbmFsID0gY29tcHV0ZU9yZGluYWwoeWVhciwgbW9udGgsIGRheSksXG4gICAgd2Vla2RheSA9IGlzb1dlZWtkYXlUb0xvY2FsKGRheU9mV2Vlayh5ZWFyLCBtb250aCwgZGF5KSwgc3RhcnRPZldlZWspO1xuXG4gIGxldCB3ZWVrTnVtYmVyID0gTWF0aC5mbG9vcigob3JkaW5hbCAtIHdlZWtkYXkgKyAxNCAtIG1pbkRheXNJbkZpcnN0V2VlaykgLyA3KSxcbiAgICB3ZWVrWWVhcjtcblxuICBpZiAod2Vla051bWJlciA8IDEpIHtcbiAgICB3ZWVrWWVhciA9IHllYXIgLSAxO1xuICAgIHdlZWtOdW1iZXIgPSB3ZWVrc0luV2Vla1llYXIod2Vla1llYXIsIG1pbkRheXNJbkZpcnN0V2Vlaywgc3RhcnRPZldlZWspO1xuICB9IGVsc2UgaWYgKHdlZWtOdW1iZXIgPiB3ZWVrc0luV2Vla1llYXIoeWVhciwgbWluRGF5c0luRmlyc3RXZWVrLCBzdGFydE9mV2VlaykpIHtcbiAgICB3ZWVrWWVhciA9IHllYXIgKyAxO1xuICAgIHdlZWtOdW1iZXIgPSAxO1xuICB9IGVsc2Uge1xuICAgIHdlZWtZZWFyID0geWVhcjtcbiAgfVxuXG4gIHJldHVybiB7IHdlZWtZZWFyLCB3ZWVrTnVtYmVyLCB3ZWVrZGF5LCAuLi50aW1lT2JqZWN0KGdyZWdPYmopIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3ZWVrVG9HcmVnb3JpYW4od2Vla0RhdGEsIG1pbkRheXNJbkZpcnN0V2VlayA9IDQsIHN0YXJ0T2ZXZWVrID0gMSkge1xuICBjb25zdCB7IHdlZWtZZWFyLCB3ZWVrTnVtYmVyLCB3ZWVrZGF5IH0gPSB3ZWVrRGF0YSxcbiAgICB3ZWVrZGF5T2ZKYW40ID0gaXNvV2Vla2RheVRvTG9jYWwoZGF5T2ZXZWVrKHdlZWtZZWFyLCAxLCBtaW5EYXlzSW5GaXJzdFdlZWspLCBzdGFydE9mV2VlayksXG4gICAgeWVhckluRGF5cyA9IGRheXNJblllYXIod2Vla1llYXIpO1xuXG4gIGxldCBvcmRpbmFsID0gd2Vla051bWJlciAqIDcgKyB3ZWVrZGF5IC0gd2Vla2RheU9mSmFuNCAtIDcgKyBtaW5EYXlzSW5GaXJzdFdlZWssXG4gICAgeWVhcjtcblxuICBpZiAob3JkaW5hbCA8IDEpIHtcbiAgICB5ZWFyID0gd2Vla1llYXIgLSAxO1xuICAgIG9yZGluYWwgKz0gZGF5c0luWWVhcih5ZWFyKTtcbiAgfSBlbHNlIGlmIChvcmRpbmFsID4geWVhckluRGF5cykge1xuICAgIHllYXIgPSB3ZWVrWWVhciArIDE7XG4gICAgb3JkaW5hbCAtPSBkYXlzSW5ZZWFyKHdlZWtZZWFyKTtcbiAgfSBlbHNlIHtcbiAgICB5ZWFyID0gd2Vla1llYXI7XG4gIH1cblxuICBjb25zdCB7IG1vbnRoLCBkYXkgfSA9IHVuY29tcHV0ZU9yZGluYWwoeWVhciwgb3JkaW5hbCk7XG4gIHJldHVybiB7IHllYXIsIG1vbnRoLCBkYXksIC4uLnRpbWVPYmplY3Qod2Vla0RhdGEpIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncmVnb3JpYW5Ub09yZGluYWwoZ3JlZ0RhdGEpIHtcbiAgY29uc3QgeyB5ZWFyLCBtb250aCwgZGF5IH0gPSBncmVnRGF0YTtcbiAgY29uc3Qgb3JkaW5hbCA9IGNvbXB1dGVPcmRpbmFsKHllYXIsIG1vbnRoLCBkYXkpO1xuICByZXR1cm4geyB5ZWFyLCBvcmRpbmFsLCAuLi50aW1lT2JqZWN0KGdyZWdEYXRhKSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3JkaW5hbFRvR3JlZ29yaWFuKG9yZGluYWxEYXRhKSB7XG4gIGNvbnN0IHsgeWVhciwgb3JkaW5hbCB9ID0gb3JkaW5hbERhdGE7XG4gIGNvbnN0IHsgbW9udGgsIGRheSB9ID0gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKTtcbiAgcmV0dXJuIHsgeWVhciwgbW9udGgsIGRheSwgLi4udGltZU9iamVjdChvcmRpbmFsRGF0YSkgfTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBsb2NhbCB3ZWVrIHVuaXRzIGxpa2UgbG9jYWxXZWVrZGF5IGFyZSB1c2VkIGluIG9iai5cbiAqIElmIHNvLCB2YWxpZGF0ZXMgdGhhdCB0aGV5IGFyZSBub3QgbWl4ZWQgd2l0aCBJU08gd2VlayB1bml0cyBhbmQgdGhlbiBjb3BpZXMgdGhlbSB0byB0aGUgbm9ybWFsIHdlZWsgdW5pdCBwcm9wZXJ0aWVzLlxuICogTW9kaWZpZXMgb2JqIGluLXBsYWNlIVxuICogQHBhcmFtIG9iaiB0aGUgb2JqZWN0IHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlc0xvY2FsV2Vla1ZhbHVlcyhvYmosIGxvYykge1xuICBjb25zdCBoYXNMb2NhbGVXZWVrRGF0YSA9XG4gICAgIWlzVW5kZWZpbmVkKG9iai5sb2NhbFdlZWtkYXkpIHx8XG4gICAgIWlzVW5kZWZpbmVkKG9iai5sb2NhbFdlZWtOdW1iZXIpIHx8XG4gICAgIWlzVW5kZWZpbmVkKG9iai5sb2NhbFdlZWtZZWFyKTtcbiAgaWYgKGhhc0xvY2FsZVdlZWtEYXRhKSB7XG4gICAgY29uc3QgaGFzSXNvV2Vla0RhdGEgPVxuICAgICAgIWlzVW5kZWZpbmVkKG9iai53ZWVrZGF5KSB8fCAhaXNVbmRlZmluZWQob2JqLndlZWtOdW1iZXIpIHx8ICFpc1VuZGVmaW5lZChvYmoud2Vla1llYXIpO1xuXG4gICAgaWYgKGhhc0lzb1dlZWtEYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IG1peCBsb2NhbGUtYmFzZWQgd2VlayBmaWVsZHMgd2l0aCBJU08tYmFzZWQgd2VlayBmaWVsZHNcIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFpc1VuZGVmaW5lZChvYmoubG9jYWxXZWVrZGF5KSkgb2JqLndlZWtkYXkgPSBvYmoubG9jYWxXZWVrZGF5O1xuICAgIGlmICghaXNVbmRlZmluZWQob2JqLmxvY2FsV2Vla051bWJlcikpIG9iai53ZWVrTnVtYmVyID0gb2JqLmxvY2FsV2Vla051bWJlcjtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKG9iai5sb2NhbFdlZWtZZWFyKSkgb2JqLndlZWtZZWFyID0gb2JqLmxvY2FsV2Vla1llYXI7XG4gICAgZGVsZXRlIG9iai5sb2NhbFdlZWtkYXk7XG4gICAgZGVsZXRlIG9iai5sb2NhbFdlZWtOdW1iZXI7XG4gICAgZGVsZXRlIG9iai5sb2NhbFdlZWtZZWFyO1xuICAgIHJldHVybiB7XG4gICAgICBtaW5EYXlzSW5GaXJzdFdlZWs6IGxvYy5nZXRNaW5EYXlzSW5GaXJzdFdlZWsoKSxcbiAgICAgIHN0YXJ0T2ZXZWVrOiBsb2MuZ2V0U3RhcnRPZldlZWsoKSxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IG1pbkRheXNJbkZpcnN0V2VlazogNCwgc3RhcnRPZldlZWs6IDEgfTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzSW52YWxpZFdlZWtEYXRhKG9iaiwgbWluRGF5c0luRmlyc3RXZWVrID0gNCwgc3RhcnRPZldlZWsgPSAxKSB7XG4gIGNvbnN0IHZhbGlkWWVhciA9IGlzSW50ZWdlcihvYmoud2Vla1llYXIpLFxuICAgIHZhbGlkV2VlayA9IGludGVnZXJCZXR3ZWVuKFxuICAgICAgb2JqLndlZWtOdW1iZXIsXG4gICAgICAxLFxuICAgICAgd2Vla3NJbldlZWtZZWFyKG9iai53ZWVrWWVhciwgbWluRGF5c0luRmlyc3RXZWVrLCBzdGFydE9mV2VlaylcbiAgICApLFxuICAgIHZhbGlkV2Vla2RheSA9IGludGVnZXJCZXR3ZWVuKG9iai53ZWVrZGF5LCAxLCA3KTtcblxuICBpZiAoIXZhbGlkWWVhcikge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIndlZWtZZWFyXCIsIG9iai53ZWVrWWVhcik7XG4gIH0gZWxzZSBpZiAoIXZhbGlkV2Vlaykge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIndlZWtcIiwgb2JqLndlZWtOdW1iZXIpO1xuICB9IGVsc2UgaWYgKCF2YWxpZFdlZWtkYXkpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJ3ZWVrZGF5XCIsIG9iai53ZWVrZGF5KTtcbiAgfSBlbHNlIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0ludmFsaWRPcmRpbmFsRGF0YShvYmopIHtcbiAgY29uc3QgdmFsaWRZZWFyID0gaXNJbnRlZ2VyKG9iai55ZWFyKSxcbiAgICB2YWxpZE9yZGluYWwgPSBpbnRlZ2VyQmV0d2VlbihvYmoub3JkaW5hbCwgMSwgZGF5c0luWWVhcihvYmoueWVhcikpO1xuXG4gIGlmICghdmFsaWRZZWFyKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwieWVhclwiLCBvYmoueWVhcik7XG4gIH0gZWxzZSBpZiAoIXZhbGlkT3JkaW5hbCkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIm9yZGluYWxcIiwgb2JqLm9yZGluYWwpO1xuICB9IGVsc2UgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzSW52YWxpZEdyZWdvcmlhbkRhdGEob2JqKSB7XG4gIGNvbnN0IHZhbGlkWWVhciA9IGlzSW50ZWdlcihvYmoueWVhciksXG4gICAgdmFsaWRNb250aCA9IGludGVnZXJCZXR3ZWVuKG9iai5tb250aCwgMSwgMTIpLFxuICAgIHZhbGlkRGF5ID0gaW50ZWdlckJldHdlZW4ob2JqLmRheSwgMSwgZGF5c0luTW9udGgob2JqLnllYXIsIG9iai5tb250aCkpO1xuXG4gIGlmICghdmFsaWRZZWFyKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwieWVhclwiLCBvYmoueWVhcik7XG4gIH0gZWxzZSBpZiAoIXZhbGlkTW9udGgpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJtb250aFwiLCBvYmoubW9udGgpO1xuICB9IGVsc2UgaWYgKCF2YWxpZERheSkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcImRheVwiLCBvYmouZGF5KTtcbiAgfSBlbHNlIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0ludmFsaWRUaW1lRGF0YShvYmopIHtcbiAgY29uc3QgeyBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQgfSA9IG9iajtcbiAgY29uc3QgdmFsaWRIb3VyID1cbiAgICAgIGludGVnZXJCZXR3ZWVuKGhvdXIsIDAsIDIzKSB8fFxuICAgICAgKGhvdXIgPT09IDI0ICYmIG1pbnV0ZSA9PT0gMCAmJiBzZWNvbmQgPT09IDAgJiYgbWlsbGlzZWNvbmQgPT09IDApLFxuICAgIHZhbGlkTWludXRlID0gaW50ZWdlckJldHdlZW4obWludXRlLCAwLCA1OSksXG4gICAgdmFsaWRTZWNvbmQgPSBpbnRlZ2VyQmV0d2VlbihzZWNvbmQsIDAsIDU5KSxcbiAgICB2YWxpZE1pbGxpc2Vjb25kID0gaW50ZWdlckJldHdlZW4obWlsbGlzZWNvbmQsIDAsIDk5OSk7XG5cbiAgaWYgKCF2YWxpZEhvdXIpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJob3VyXCIsIGhvdXIpO1xuICB9IGVsc2UgaWYgKCF2YWxpZE1pbnV0ZSkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICB9IGVsc2UgaWYgKCF2YWxpZFNlY29uZCkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcInNlY29uZFwiLCBzZWNvbmQpO1xuICB9IGVsc2UgaWYgKCF2YWxpZE1pbGxpc2Vjb25kKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwibWlsbGlzZWNvbmRcIiwgbWlsbGlzZWNvbmQpO1xuICB9IGVsc2UgcmV0dXJuIGZhbHNlO1xufVxuIiwiaW1wb3J0IER1cmF0aW9uIGZyb20gXCIuLi9kdXJhdGlvbi5qc1wiO1xuXG5mdW5jdGlvbiBkYXlEaWZmKGVhcmxpZXIsIGxhdGVyKSB7XG4gIGNvbnN0IHV0Y0RheVN0YXJ0ID0gKGR0KSA9PiBkdC50b1VUQygwLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSkuc3RhcnRPZihcImRheVwiKS52YWx1ZU9mKCksXG4gICAgbXMgPSB1dGNEYXlTdGFydChsYXRlcikgLSB1dGNEYXlTdGFydChlYXJsaWVyKTtcbiAgcmV0dXJuIE1hdGguZmxvb3IoRHVyYXRpb24uZnJvbU1pbGxpcyhtcykuYXMoXCJkYXlzXCIpKTtcbn1cblxuZnVuY3Rpb24gaGlnaE9yZGVyRGlmZnMoY3Vyc29yLCBsYXRlciwgdW5pdHMpIHtcbiAgY29uc3QgZGlmZmVycyA9IFtcbiAgICBbXCJ5ZWFyc1wiLCAoYSwgYikgPT4gYi55ZWFyIC0gYS55ZWFyXSxcbiAgICBbXCJxdWFydGVyc1wiLCAoYSwgYikgPT4gYi5xdWFydGVyIC0gYS5xdWFydGVyICsgKGIueWVhciAtIGEueWVhcikgKiA0XSxcbiAgICBbXCJtb250aHNcIiwgKGEsIGIpID0+IGIubW9udGggLSBhLm1vbnRoICsgKGIueWVhciAtIGEueWVhcikgKiAxMl0sXG4gICAgW1xuICAgICAgXCJ3ZWVrc1wiLFxuICAgICAgKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgZGF5cyA9IGRheURpZmYoYSwgYik7XG4gICAgICAgIHJldHVybiAoZGF5cyAtIChkYXlzICUgNykpIC8gNztcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbXCJkYXlzXCIsIGRheURpZmZdLFxuICBdO1xuXG4gIGNvbnN0IHJlc3VsdHMgPSB7fTtcbiAgY29uc3QgZWFybGllciA9IGN1cnNvcjtcbiAgbGV0IGxvd2VzdE9yZGVyLCBoaWdoV2F0ZXI7XG5cbiAgLyogVGhpcyBsb29wIHRyaWVzIHRvIGRpZmYgdXNpbmcgbGFyZ2VyIHVuaXRzIGZpcnN0LlxuICAgICBJZiB3ZSBvdmVyc2hvb3QsIHdlIGJhY2t0cmFjayBhbmQgdHJ5IHRoZSBuZXh0IHNtYWxsZXIgdW5pdC5cbiAgICAgXCJjdXJzb3JcIiBzdGFydHMgb3V0IGF0IHRoZSBlYXJsaWVyIHRpbWVzdGFtcCBhbmQgbW92ZXMgY2xvc2VyIGFuZCBjbG9zZXIgdG8gXCJsYXRlclwiXG4gICAgIGFzIHdlIHVzZSBzbWFsbGVyIGFuZCBzbWFsbGVyIHVuaXRzLlxuICAgICBoaWdoV2F0ZXIga2VlcHMgdHJhY2sgb2Ygd2hlcmUgd2Ugd291bGQgYmUgaWYgd2UgYWRkZWQgb25lIG1vcmUgb2YgdGhlIHNtYWxsZXN0IHVuaXQsXG4gICAgIHRoaXMgaXMgdXNlZCBsYXRlciB0byBwb3RlbnRpYWxseSBjb252ZXJ0IGFueSBkaWZmZXJlbmNlIHNtYWxsZXIgdGhhbiB0aGUgc21hbGxlc3QgaGlnaGVyIG9yZGVyIHVuaXRcbiAgICAgaW50byBhIGZyYWN0aW9uIG9mIHRoYXQgc21hbGxlc3QgaGlnaGVyIG9yZGVyIHVuaXRcbiAgKi9cbiAgZm9yIChjb25zdCBbdW5pdCwgZGlmZmVyXSBvZiBkaWZmZXJzKSB7XG4gICAgaWYgKHVuaXRzLmluZGV4T2YodW5pdCkgPj0gMCkge1xuICAgICAgbG93ZXN0T3JkZXIgPSB1bml0O1xuXG4gICAgICByZXN1bHRzW3VuaXRdID0gZGlmZmVyKGN1cnNvciwgbGF0ZXIpO1xuICAgICAgaGlnaFdhdGVyID0gZWFybGllci5wbHVzKHJlc3VsdHMpO1xuXG4gICAgICBpZiAoaGlnaFdhdGVyID4gbGF0ZXIpIHtcbiAgICAgICAgLy8gd2Ugb3ZlcnNob3QgdGhlIGVuZCBwb2ludCwgYmFja3RyYWNrIGN1cnNvciBieSAxXG4gICAgICAgIHJlc3VsdHNbdW5pdF0tLTtcbiAgICAgICAgY3Vyc29yID0gZWFybGllci5wbHVzKHJlc3VsdHMpO1xuXG4gICAgICAgIC8vIGlmIHdlIGFyZSBzdGlsbCBvdmVyc2hvb3Rpbmcgbm93LCB3ZSBuZWVkIHRvIGJhY2t0cmFjayBhZ2FpblxuICAgICAgICAvLyB0aGlzIGhhcHBlbnMgaW4gY2VydGFpbiBzaXR1YXRpb25zIHdoZW4gZGlmZmluZyB0aW1lcyBpbiBkaWZmZXJlbnQgem9uZXMsXG4gICAgICAgIC8vIGJlY2F1c2UgdGhpcyBjYWxjdWxhdGlvbiBpZ25vcmVzIHRpbWUgem9uZXNcbiAgICAgICAgaWYgKGN1cnNvciA+IGxhdGVyKSB7XG4gICAgICAgICAgLy8ga2VlcCB0aGUgXCJvdmVyc2hvdCBieSAxXCIgYXJvdW5kIGFzIGhpZ2hXYXRlclxuICAgICAgICAgIGhpZ2hXYXRlciA9IGN1cnNvcjtcbiAgICAgICAgICAvLyBiYWNrdHJhY2sgY3Vyc29yIGJ5IDFcbiAgICAgICAgICByZXN1bHRzW3VuaXRdLS07XG4gICAgICAgICAgY3Vyc29yID0gZWFybGllci5wbHVzKHJlc3VsdHMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJzb3IgPSBoaWdoV2F0ZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtjdXJzb3IsIHJlc3VsdHMsIGhpZ2hXYXRlciwgbG93ZXN0T3JkZXJdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoZWFybGllciwgbGF0ZXIsIHVuaXRzLCBvcHRzKSB7XG4gIGxldCBbY3Vyc29yLCByZXN1bHRzLCBoaWdoV2F0ZXIsIGxvd2VzdE9yZGVyXSA9IGhpZ2hPcmRlckRpZmZzKGVhcmxpZXIsIGxhdGVyLCB1bml0cyk7XG5cbiAgY29uc3QgcmVtYWluaW5nTWlsbGlzID0gbGF0ZXIgLSBjdXJzb3I7XG5cbiAgY29uc3QgbG93ZXJPcmRlclVuaXRzID0gdW5pdHMuZmlsdGVyKFxuICAgICh1KSA9PiBbXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCIsIFwibWlsbGlzZWNvbmRzXCJdLmluZGV4T2YodSkgPj0gMFxuICApO1xuXG4gIGlmIChsb3dlck9yZGVyVW5pdHMubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGhpZ2hXYXRlciA8IGxhdGVyKSB7XG4gICAgICBoaWdoV2F0ZXIgPSBjdXJzb3IucGx1cyh7IFtsb3dlc3RPcmRlcl06IDEgfSk7XG4gICAgfVxuXG4gICAgaWYgKGhpZ2hXYXRlciAhPT0gY3Vyc29yKSB7XG4gICAgICByZXN1bHRzW2xvd2VzdE9yZGVyXSA9IChyZXN1bHRzW2xvd2VzdE9yZGVyXSB8fCAwKSArIHJlbWFpbmluZ01pbGxpcyAvIChoaWdoV2F0ZXIgLSBjdXJzb3IpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGR1cmF0aW9uID0gRHVyYXRpb24uZnJvbU9iamVjdChyZXN1bHRzLCBvcHRzKTtcblxuICBpZiAobG93ZXJPcmRlclVuaXRzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gRHVyYXRpb24uZnJvbU1pbGxpcyhyZW1haW5pbmdNaWxsaXMsIG9wdHMpXG4gICAgICAuc2hpZnRUbyguLi5sb3dlck9yZGVyVW5pdHMpXG4gICAgICAucGx1cyhkdXJhdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGR1cmF0aW9uO1xuICB9XG59XG4iLCJjb25zdCBudW1iZXJpbmdTeXN0ZW1zID0ge1xuICBhcmFiOiBcIltcXHUwNjYwLVxcdTA2NjldXCIsXG4gIGFyYWJleHQ6IFwiW1xcdTA2RjAtXFx1MDZGOV1cIixcbiAgYmFsaTogXCJbXFx1MUI1MC1cXHUxQjU5XVwiLFxuICBiZW5nOiBcIltcXHUwOUU2LVxcdTA5RUZdXCIsXG4gIGRldmE6IFwiW1xcdTA5NjYtXFx1MDk2Rl1cIixcbiAgZnVsbHdpZGU6IFwiW1xcdUZGMTAtXFx1RkYxOV1cIixcbiAgZ3VqcjogXCJbXFx1MEFFNi1cXHUwQUVGXVwiLFxuICBoYW5pZGVjOiBcIlvjgId85LiAfOS6jHzkuIl85ZubfOS6lHzlha185LiDfOWFq3zkuZ1dXCIsXG4gIGtobXI6IFwiW1xcdTE3RTAtXFx1MTdFOV1cIixcbiAga25kYTogXCJbXFx1MENFNi1cXHUwQ0VGXVwiLFxuICBsYW9vOiBcIltcXHUwRUQwLVxcdTBFRDldXCIsXG4gIGxpbWI6IFwiW1xcdTE5NDYtXFx1MTk0Rl1cIixcbiAgbWx5bTogXCJbXFx1MEQ2Ni1cXHUwRDZGXVwiLFxuICBtb25nOiBcIltcXHUxODEwLVxcdTE4MTldXCIsXG4gIG15bXI6IFwiW1xcdTEwNDAtXFx1MTA0OV1cIixcbiAgb3J5YTogXCJbXFx1MEI2Ni1cXHUwQjZGXVwiLFxuICB0YW1sZGVjOiBcIltcXHUwQkU2LVxcdTBCRUZdXCIsXG4gIHRlbHU6IFwiW1xcdTBDNjYtXFx1MEM2Rl1cIixcbiAgdGhhaTogXCJbXFx1MEU1MC1cXHUwRTU5XVwiLFxuICB0aWJ0OiBcIltcXHUwRjIwLVxcdTBGMjldXCIsXG4gIGxhdG46IFwiXFxcXGRcIixcbn07XG5cbmNvbnN0IG51bWJlcmluZ1N5c3RlbXNVVEYxNiA9IHtcbiAgYXJhYjogWzE2MzIsIDE2NDFdLFxuICBhcmFiZXh0OiBbMTc3NiwgMTc4NV0sXG4gIGJhbGk6IFs2OTkyLCA3MDAxXSxcbiAgYmVuZzogWzI1MzQsIDI1NDNdLFxuICBkZXZhOiBbMjQwNiwgMjQxNV0sXG4gIGZ1bGx3aWRlOiBbNjUyOTYsIDY1MzAzXSxcbiAgZ3VqcjogWzI3OTAsIDI3OTldLFxuICBraG1yOiBbNjExMiwgNjEyMV0sXG4gIGtuZGE6IFszMzAyLCAzMzExXSxcbiAgbGFvbzogWzM3OTIsIDM4MDFdLFxuICBsaW1iOiBbNjQ3MCwgNjQ3OV0sXG4gIG1seW06IFszNDMwLCAzNDM5XSxcbiAgbW9uZzogWzYxNjAsIDYxNjldLFxuICBteW1yOiBbNDE2MCwgNDE2OV0sXG4gIG9yeWE6IFsyOTE4LCAyOTI3XSxcbiAgdGFtbGRlYzogWzMwNDYsIDMwNTVdLFxuICB0ZWx1OiBbMzE3NCwgMzE4M10sXG4gIHRoYWk6IFszNjY0LCAzNjczXSxcbiAgdGlidDogWzM4NzIsIDM4ODFdLFxufTtcblxuY29uc3QgaGFuaWRlY0NoYXJzID0gbnVtYmVyaW5nU3lzdGVtcy5oYW5pZGVjLnJlcGxhY2UoL1tcXFt8XFxdXS9nLCBcIlwiKS5zcGxpdChcIlwiKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGlnaXRzKHN0cikge1xuICBsZXQgdmFsdWUgPSBwYXJzZUludChzdHIsIDEwKTtcbiAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgIHZhbHVlID0gXCJcIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuXG4gICAgICBpZiAoc3RyW2ldLnNlYXJjaChudW1iZXJpbmdTeXN0ZW1zLmhhbmlkZWMpICE9PSAtMSkge1xuICAgICAgICB2YWx1ZSArPSBoYW5pZGVjQ2hhcnMuaW5kZXhPZihzdHJbaV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbnVtYmVyaW5nU3lzdGVtc1VURjE2KSB7XG4gICAgICAgICAgY29uc3QgW21pbiwgbWF4XSA9IG51bWJlcmluZ1N5c3RlbXNVVEYxNltrZXldO1xuICAgICAgICAgIGlmIChjb2RlID49IG1pbiAmJiBjb2RlIDw9IG1heCkge1xuICAgICAgICAgICAgdmFsdWUgKz0gY29kZSAtIG1pbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbi8vIGNhY2hlIG9mIHtudW1iZXJpbmdTeXN0ZW06IHthcHBlbmQ6IHJlZ2V4fX1cbmxldCBkaWdpdFJlZ2V4Q2FjaGUgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiByZXNldERpZ2l0UmVnZXhDYWNoZSgpIHtcbiAgZGlnaXRSZWdleENhY2hlID0ge307XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWdpdFJlZ2V4KHsgbnVtYmVyaW5nU3lzdGVtIH0sIGFwcGVuZCA9IFwiXCIpIHtcbiAgY29uc3QgbnMgPSBudW1iZXJpbmdTeXN0ZW0gfHwgXCJsYXRuXCI7XG5cbiAgaWYgKCFkaWdpdFJlZ2V4Q2FjaGVbbnNdKSB7XG4gICAgZGlnaXRSZWdleENhY2hlW25zXSA9IHt9O1xuICB9XG4gIGlmICghZGlnaXRSZWdleENhY2hlW25zXVthcHBlbmRdKSB7XG4gICAgZGlnaXRSZWdleENhY2hlW25zXVthcHBlbmRdID0gbmV3IFJlZ0V4cChgJHtudW1iZXJpbmdTeXN0ZW1zW25zXX0ke2FwcGVuZH1gKTtcbiAgfVxuXG4gIHJldHVybiBkaWdpdFJlZ2V4Q2FjaGVbbnNdW2FwcGVuZF07XG59XG4iLCJpbXBvcnQgKiBhcyBGb3JtYXRzIGZyb20gXCIuL2Zvcm1hdHMuanNcIjtcbmltcG9ydCB7IHBpY2sgfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShvYmopIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgT2JqZWN0LmtleXMob2JqKS5zb3J0KCkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGNvbnN0IG1vbnRoc0xvbmcgPSBbXG4gIFwiSmFudWFyeVwiLFxuICBcIkZlYnJ1YXJ5XCIsXG4gIFwiTWFyY2hcIixcbiAgXCJBcHJpbFwiLFxuICBcIk1heVwiLFxuICBcIkp1bmVcIixcbiAgXCJKdWx5XCIsXG4gIFwiQXVndXN0XCIsXG4gIFwiU2VwdGVtYmVyXCIsXG4gIFwiT2N0b2JlclwiLFxuICBcIk5vdmVtYmVyXCIsXG4gIFwiRGVjZW1iZXJcIixcbl07XG5cbmV4cG9ydCBjb25zdCBtb250aHNTaG9ydCA9IFtcbiAgXCJKYW5cIixcbiAgXCJGZWJcIixcbiAgXCJNYXJcIixcbiAgXCJBcHJcIixcbiAgXCJNYXlcIixcbiAgXCJKdW5cIixcbiAgXCJKdWxcIixcbiAgXCJBdWdcIixcbiAgXCJTZXBcIixcbiAgXCJPY3RcIixcbiAgXCJOb3ZcIixcbiAgXCJEZWNcIixcbl07XG5cbmV4cG9ydCBjb25zdCBtb250aHNOYXJyb3cgPSBbXCJKXCIsIFwiRlwiLCBcIk1cIiwgXCJBXCIsIFwiTVwiLCBcIkpcIiwgXCJKXCIsIFwiQVwiLCBcIlNcIiwgXCJPXCIsIFwiTlwiLCBcIkRcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb250aHMobGVuZ3RoKSB7XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIFsuLi5tb250aHNOYXJyb3ddO1xuICAgIGNhc2UgXCJzaG9ydFwiOlxuICAgICAgcmV0dXJuIFsuLi5tb250aHNTaG9ydF07XG4gICAgY2FzZSBcImxvbmdcIjpcbiAgICAgIHJldHVybiBbLi4ubW9udGhzTG9uZ107XG4gICAgY2FzZSBcIm51bWVyaWNcIjpcbiAgICAgIHJldHVybiBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCIsIFwiOFwiLCBcIjlcIiwgXCIxMFwiLCBcIjExXCIsIFwiMTJcIl07XG4gICAgY2FzZSBcIjItZGlnaXRcIjpcbiAgICAgIHJldHVybiBbXCIwMVwiLCBcIjAyXCIsIFwiMDNcIiwgXCIwNFwiLCBcIjA1XCIsIFwiMDZcIiwgXCIwN1wiLCBcIjA4XCIsIFwiMDlcIiwgXCIxMFwiLCBcIjExXCIsIFwiMTJcIl07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB3ZWVrZGF5c0xvbmcgPSBbXG4gIFwiTW9uZGF5XCIsXG4gIFwiVHVlc2RheVwiLFxuICBcIldlZG5lc2RheVwiLFxuICBcIlRodXJzZGF5XCIsXG4gIFwiRnJpZGF5XCIsXG4gIFwiU2F0dXJkYXlcIixcbiAgXCJTdW5kYXlcIixcbl07XG5cbmV4cG9ydCBjb25zdCB3ZWVrZGF5c1Nob3J0ID0gW1wiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCIsIFwiU3VuXCJdO1xuXG5leHBvcnQgY29uc3Qgd2Vla2RheXNOYXJyb3cgPSBbXCJNXCIsIFwiVFwiLCBcIldcIiwgXCJUXCIsIFwiRlwiLCBcIlNcIiwgXCJTXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gd2Vla2RheXMobGVuZ3RoKSB7XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIFsuLi53ZWVrZGF5c05hcnJvd107XG4gICAgY2FzZSBcInNob3J0XCI6XG4gICAgICByZXR1cm4gWy4uLndlZWtkYXlzU2hvcnRdO1xuICAgIGNhc2UgXCJsb25nXCI6XG4gICAgICByZXR1cm4gWy4uLndlZWtkYXlzTG9uZ107XG4gICAgY2FzZSBcIm51bWVyaWNcIjpcbiAgICAgIHJldHVybiBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCJdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbWVyaWRpZW1zID0gW1wiQU1cIiwgXCJQTVwiXTtcblxuZXhwb3J0IGNvbnN0IGVyYXNMb25nID0gW1wiQmVmb3JlIENocmlzdFwiLCBcIkFubm8gRG9taW5pXCJdO1xuXG5leHBvcnQgY29uc3QgZXJhc1Nob3J0ID0gW1wiQkNcIiwgXCJBRFwiXTtcblxuZXhwb3J0IGNvbnN0IGVyYXNOYXJyb3cgPSBbXCJCXCIsIFwiQVwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVyYXMobGVuZ3RoKSB7XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIFsuLi5lcmFzTmFycm93XTtcbiAgICBjYXNlIFwic2hvcnRcIjpcbiAgICAgIHJldHVybiBbLi4uZXJhc1Nob3J0XTtcbiAgICBjYXNlIFwibG9uZ1wiOlxuICAgICAgcmV0dXJuIFsuLi5lcmFzTG9uZ107XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJpZGllbUZvckRhdGVUaW1lKGR0KSB7XG4gIHJldHVybiBtZXJpZGllbXNbZHQuaG91ciA8IDEyID8gMCA6IDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2Vla2RheUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIHdlZWtkYXlzKGxlbmd0aClbZHQud2Vla2RheSAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9udGhGb3JEYXRlVGltZShkdCwgbGVuZ3RoKSB7XG4gIHJldHVybiBtb250aHMobGVuZ3RoKVtkdC5tb250aCAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJhRm9yRGF0ZVRpbWUoZHQsIGxlbmd0aCkge1xuICByZXR1cm4gZXJhcyhsZW5ndGgpW2R0LnllYXIgPCAwID8gMCA6IDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmVUaW1lKHVuaXQsIGNvdW50LCBudW1lcmljID0gXCJhbHdheXNcIiwgbmFycm93ID0gZmFsc2UpIHtcbiAgY29uc3QgdW5pdHMgPSB7XG4gICAgeWVhcnM6IFtcInllYXJcIiwgXCJ5ci5cIl0sXG4gICAgcXVhcnRlcnM6IFtcInF1YXJ0ZXJcIiwgXCJxdHIuXCJdLFxuICAgIG1vbnRoczogW1wibW9udGhcIiwgXCJtby5cIl0sXG4gICAgd2Vla3M6IFtcIndlZWtcIiwgXCJ3ay5cIl0sXG4gICAgZGF5czogW1wiZGF5XCIsIFwiZGF5XCIsIFwiZGF5c1wiXSxcbiAgICBob3VyczogW1wiaG91clwiLCBcImhyLlwiXSxcbiAgICBtaW51dGVzOiBbXCJtaW51dGVcIiwgXCJtaW4uXCJdLFxuICAgIHNlY29uZHM6IFtcInNlY29uZFwiLCBcInNlYy5cIl0sXG4gIH07XG5cbiAgY29uc3QgbGFzdGFibGUgPSBbXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCJdLmluZGV4T2YodW5pdCkgPT09IC0xO1xuXG4gIGlmIChudW1lcmljID09PSBcImF1dG9cIiAmJiBsYXN0YWJsZSkge1xuICAgIGNvbnN0IGlzRGF5ID0gdW5pdCA9PT0gXCJkYXlzXCI7XG4gICAgc3dpdGNoIChjb3VudCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gaXNEYXkgPyBcInRvbW9ycm93XCIgOiBgbmV4dCAke3VuaXRzW3VuaXRdWzBdfWA7XG4gICAgICBjYXNlIC0xOlxuICAgICAgICByZXR1cm4gaXNEYXkgPyBcInllc3RlcmRheVwiIDogYGxhc3QgJHt1bml0c1t1bml0XVswXX1gO1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gaXNEYXkgPyBcInRvZGF5XCIgOiBgdGhpcyAke3VuaXRzW3VuaXRdWzBdfWA7XG4gICAgICBkZWZhdWx0OiAvLyBmYWxsIHRocm91Z2hcbiAgICB9XG4gIH1cblxuICBjb25zdCBpc0luUGFzdCA9IE9iamVjdC5pcyhjb3VudCwgLTApIHx8IGNvdW50IDwgMCxcbiAgICBmbXRWYWx1ZSA9IE1hdGguYWJzKGNvdW50KSxcbiAgICBzaW5ndWxhciA9IGZtdFZhbHVlID09PSAxLFxuICAgIGxpbFVuaXRzID0gdW5pdHNbdW5pdF0sXG4gICAgZm10VW5pdCA9IG5hcnJvd1xuICAgICAgPyBzaW5ndWxhclxuICAgICAgICA/IGxpbFVuaXRzWzFdXG4gICAgICAgIDogbGlsVW5pdHNbMl0gfHwgbGlsVW5pdHNbMV1cbiAgICAgIDogc2luZ3VsYXJcbiAgICAgID8gdW5pdHNbdW5pdF1bMF1cbiAgICAgIDogdW5pdDtcbiAgcmV0dXJuIGlzSW5QYXN0ID8gYCR7Zm10VmFsdWV9ICR7Zm10VW5pdH0gYWdvYCA6IGBpbiAke2ZtdFZhbHVlfSAke2ZtdFVuaXR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFN0cmluZyhrbm93bkZvcm1hdCkge1xuICAvLyB0aGVzZSBhbGwgaGF2ZSB0aGUgb2Zmc2V0cyByZW1vdmVkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlbVxuICAvLyB3aXRob3V0IGFsbCB0aGUgaW50bCBzdHVmZiB0aGlzIGlzIGJhY2tmaWxsaW5nXG4gIGNvbnN0IGZpbHRlcmVkID0gcGljayhrbm93bkZvcm1hdCwgW1xuICAgICAgXCJ3ZWVrZGF5XCIsXG4gICAgICBcImVyYVwiLFxuICAgICAgXCJ5ZWFyXCIsXG4gICAgICBcIm1vbnRoXCIsXG4gICAgICBcImRheVwiLFxuICAgICAgXCJob3VyXCIsXG4gICAgICBcIm1pbnV0ZVwiLFxuICAgICAgXCJzZWNvbmRcIixcbiAgICAgIFwidGltZVpvbmVOYW1lXCIsXG4gICAgICBcImhvdXJDeWNsZVwiLFxuICAgIF0pLFxuICAgIGtleSA9IHN0cmluZ2lmeShmaWx0ZXJlZCksXG4gICAgZGF0ZVRpbWVIdWdlID0gXCJFRUVFLCBMTExMIGQsIHl5eXksIGg6bW0gYVwiO1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURV9TSE9SVCk6XG4gICAgICByZXR1cm4gXCJNL2QveXl5eVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURV9NRUQpOlxuICAgICAgcmV0dXJuIFwiTExMIGQsIHl5eXlcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVfTUVEX1dJVEhfV0VFS0RBWSk6XG4gICAgICByZXR1cm4gXCJFRUUsIExMTCBkLCB5eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFX0ZVTEwpOlxuICAgICAgcmV0dXJuIFwiTExMTCBkLCB5eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFX0hVR0UpOlxuICAgICAgcmV0dXJuIFwiRUVFRSwgTExMTCBkLCB5eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5USU1FX1NJTVBMRSk6XG4gICAgICByZXR1cm4gXCJoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcImg6bW06c3MgYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV9XSVRIX1NIT1JUX09GRlNFVCk6XG4gICAgICByZXR1cm4gXCJoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfV0lUSF9MT05HX09GRlNFVCk6XG4gICAgICByZXR1cm4gXCJoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfMjRfU0lNUExFKTpcbiAgICAgIHJldHVybiBcIkhIOm1tXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5USU1FXzI0X1dJVEhfU0VDT05EUyk6XG4gICAgICByZXR1cm4gXCJISDptbTpzc1wiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCk6XG4gICAgICByZXR1cm4gXCJISDptbVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VUKTpcbiAgICAgIHJldHVybiBcIkhIOm1tXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9TSE9SVCk6XG4gICAgICByZXR1cm4gXCJNL2QveXl5eSwgaDptbSBhXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9NRUQpOlxuICAgICAgcmV0dXJuIFwiTExMIGQsIHl5eXksIGg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfRlVMTCk6XG4gICAgICByZXR1cm4gXCJMTExMIGQsIHl5eXksIGg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfSFVHRSk6XG4gICAgICByZXR1cm4gZGF0ZVRpbWVIdWdlO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcIk0vZC95eXl5LCBoOm1tOnNzIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFMpOlxuICAgICAgcmV0dXJuIFwiTExMIGQsIHl5eXksIGg6bW06c3MgYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfV0VFS0RBWSk6XG4gICAgICByZXR1cm4gXCJFRUUsIGQgTExMIHl5eXksIGg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMpOlxuICAgICAgcmV0dXJuIFwiTExMTCBkLCB5eXl5LCBoOm1tOnNzIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcIkVFRUUsIExMTEwgZCwgeXl5eSwgaDptbTpzcyBhXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBkYXRlVGltZUh1Z2U7XG4gIH1cbn1cbiIsIi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5jb25zdCBuID0gXCJudW1lcmljXCIsXG4gIHMgPSBcInNob3J0XCIsXG4gIGwgPSBcImxvbmdcIjtcblxuZXhwb3J0IGNvbnN0IERBVEVfU0hPUlQgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBuLFxuICBkYXk6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURV9NRUQgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBzLFxuICBkYXk6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURV9NRURfV0lUSF9XRUVLREFZID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogcyxcbiAgZGF5OiBuLFxuICB3ZWVrZGF5OiBzLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVfRlVMTCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFX0hVR0UgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBsLFxuICBkYXk6IG4sXG4gIHdlZWtkYXk6IGwsXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV9TSU1QTEUgPSB7XG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FX1dJVEhfU0VDT05EUyA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV9XSVRIX1NIT1JUX09GRlNFVCA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIHRpbWVab25lTmFtZTogcyxcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FX1dJVEhfTE9OR19PRkZTRVQgPSB7XG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICB0aW1lWm9uZU5hbWU6IGwsXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV8yNF9TSU1QTEUgPSB7XG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgaG91ckN5Y2xlOiBcImgyM1wiLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfMjRfV0lUSF9TRUNPTkRTID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbiAgaG91ckN5Y2xlOiBcImgyM1wiLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfMjRfV0lUSF9TSE9SVF9PRkZTRVQgPSB7XG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICBob3VyQ3ljbGU6IFwiaDIzXCIsXG4gIHRpbWVab25lTmFtZTogcyxcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FXzI0X1dJVEhfTE9OR19PRkZTRVQgPSB7XG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICBob3VyQ3ljbGU6IFwiaDIzXCIsXG4gIHRpbWVab25lTmFtZTogbCxcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9TSE9SVCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IG4sXG4gIGRheTogbixcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUyA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IG4sXG4gIGRheTogbixcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfTUVEID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogcyxcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUyA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IHMsXG4gIGRheTogbixcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfTUVEX1dJVEhfV0VFS0RBWSA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IHMsXG4gIGRheTogbixcbiAgd2Vla2RheTogcyxcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX0ZVTEwgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBsLFxuICBkYXk6IG4sXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgdGltZVpvbmVOYW1lOiBzLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbCxcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbiAgdGltZVpvbmVOYW1lOiBzLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX0hVR0UgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBsLFxuICBkYXk6IG4sXG4gIHdlZWtkYXk6IGwsXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgdGltZVpvbmVOYW1lOiBsLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbCxcbiAgZGF5OiBuLFxuICB3ZWVrZGF5OiBsLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbiAgdGltZVpvbmVOYW1lOiBsLFxufTtcbiIsImltcG9ydCAqIGFzIEVuZ2xpc2ggZnJvbSBcIi4vZW5nbGlzaC5qc1wiO1xuaW1wb3J0ICogYXMgRm9ybWF0cyBmcm9tIFwiLi9mb3JtYXRzLmpzXCI7XG5pbXBvcnQgeyBwYWRTdGFydCB9IGZyb20gXCIuL3V0aWwuanNcIjtcblxuZnVuY3Rpb24gc3RyaW5naWZ5VG9rZW5zKHNwbGl0cywgdG9rZW5Ub1N0cmluZykge1xuICBsZXQgcyA9IFwiXCI7XG4gIGZvciAoY29uc3QgdG9rZW4gb2Ygc3BsaXRzKSB7XG4gICAgaWYgKHRva2VuLmxpdGVyYWwpIHtcbiAgICAgIHMgKz0gdG9rZW4udmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBzICs9IHRva2VuVG9TdHJpbmcodG9rZW4udmFsKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHM7XG59XG5cbmNvbnN0IG1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHMgPSB7XG4gIEQ6IEZvcm1hdHMuREFURV9TSE9SVCxcbiAgREQ6IEZvcm1hdHMuREFURV9NRUQsXG4gIERERDogRm9ybWF0cy5EQVRFX0ZVTEwsXG4gIEREREQ6IEZvcm1hdHMuREFURV9IVUdFLFxuICB0OiBGb3JtYXRzLlRJTUVfU0lNUExFLFxuICB0dDogRm9ybWF0cy5USU1FX1dJVEhfU0VDT05EUyxcbiAgdHR0OiBGb3JtYXRzLlRJTUVfV0lUSF9TSE9SVF9PRkZTRVQsXG4gIHR0dHQ6IEZvcm1hdHMuVElNRV9XSVRIX0xPTkdfT0ZGU0VULFxuICBUOiBGb3JtYXRzLlRJTUVfMjRfU0lNUExFLFxuICBUVDogRm9ybWF0cy5USU1FXzI0X1dJVEhfU0VDT05EUyxcbiAgVFRUOiBGb3JtYXRzLlRJTUVfMjRfV0lUSF9TSE9SVF9PRkZTRVQsXG4gIFRUVFQ6IEZvcm1hdHMuVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VULFxuICBmOiBGb3JtYXRzLkRBVEVUSU1FX1NIT1JULFxuICBmZjogRm9ybWF0cy5EQVRFVElNRV9NRUQsXG4gIGZmZjogRm9ybWF0cy5EQVRFVElNRV9GVUxMLFxuICBmZmZmOiBGb3JtYXRzLkRBVEVUSU1FX0hVR0UsXG4gIEY6IEZvcm1hdHMuREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTLFxuICBGRjogRm9ybWF0cy5EQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTLFxuICBGRkY6IEZvcm1hdHMuREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMsXG4gIEZGRkY6IEZvcm1hdHMuREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMsXG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRm9ybWF0dGVyIHtcbiAgc3RhdGljIGNyZWF0ZShsb2NhbGUsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgRm9ybWF0dGVyKGxvY2FsZSwgb3B0cyk7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VGb3JtYXQoZm10KSB7XG4gICAgLy8gd2hpdGUtc3BhY2UgaXMgYWx3YXlzIGNvbnNpZGVyZWQgYSBsaXRlcmFsIGluIHVzZXItcHJvdmlkZWQgZm9ybWF0c1xuICAgIC8vIHRoZSBcIiBcIiB0b2tlbiBoYXMgYSBzcGVjaWFsIG1lYW5pbmcgKHNlZSB1bml0Rm9yVG9rZW4pXG5cbiAgICBsZXQgY3VycmVudCA9IG51bGwsXG4gICAgICBjdXJyZW50RnVsbCA9IFwiXCIsXG4gICAgICBicmFja2V0ZWQgPSBmYWxzZTtcbiAgICBjb25zdCBzcGxpdHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZtdC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYyA9IGZtdC5jaGFyQXQoaSk7XG4gICAgICBpZiAoYyA9PT0gXCInXCIpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRGdWxsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzcGxpdHMucHVzaCh7IGxpdGVyYWw6IGJyYWNrZXRlZCB8fCAvXlxccyskLy50ZXN0KGN1cnJlbnRGdWxsKSwgdmFsOiBjdXJyZW50RnVsbCB9KTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gbnVsbDtcbiAgICAgICAgY3VycmVudEZ1bGwgPSBcIlwiO1xuICAgICAgICBicmFja2V0ZWQgPSAhYnJhY2tldGVkO1xuICAgICAgfSBlbHNlIGlmIChicmFja2V0ZWQpIHtcbiAgICAgICAgY3VycmVudEZ1bGwgKz0gYztcbiAgICAgIH0gZWxzZSBpZiAoYyA9PT0gY3VycmVudCkge1xuICAgICAgICBjdXJyZW50RnVsbCArPSBjO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGN1cnJlbnRGdWxsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzcGxpdHMucHVzaCh7IGxpdGVyYWw6IC9eXFxzKyQvLnRlc3QoY3VycmVudEZ1bGwpLCB2YWw6IGN1cnJlbnRGdWxsIH0pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRGdWxsID0gYztcbiAgICAgICAgY3VycmVudCA9IGM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRGdWxsLmxlbmd0aCA+IDApIHtcbiAgICAgIHNwbGl0cy5wdXNoKHsgbGl0ZXJhbDogYnJhY2tldGVkIHx8IC9eXFxzKyQvLnRlc3QoY3VycmVudEZ1bGwpLCB2YWw6IGN1cnJlbnRGdWxsIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBzcGxpdHM7XG4gIH1cblxuICBzdGF0aWMgbWFjcm9Ub2tlblRvRm9ybWF0T3B0cyh0b2tlbikge1xuICAgIHJldHVybiBtYWNyb1Rva2VuVG9Gb3JtYXRPcHRzW3Rva2VuXTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGxvY2FsZSwgZm9ybWF0T3B0cykge1xuICAgIHRoaXMub3B0cyA9IGZvcm1hdE9wdHM7XG4gICAgdGhpcy5sb2MgPSBsb2NhbGU7XG4gICAgdGhpcy5zeXN0ZW1Mb2MgPSBudWxsO1xuICB9XG5cbiAgZm9ybWF0V2l0aFN5c3RlbURlZmF1bHQoZHQsIG9wdHMpIHtcbiAgICBpZiAodGhpcy5zeXN0ZW1Mb2MgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuc3lzdGVtTG9jID0gdGhpcy5sb2MucmVkZWZhdWx0VG9TeXN0ZW0oKTtcbiAgICB9XG4gICAgY29uc3QgZGYgPSB0aGlzLnN5c3RlbUxvYy5kdEZvcm1hdHRlcihkdCwgeyAuLi50aGlzLm9wdHMsIC4uLm9wdHMgfSk7XG4gICAgcmV0dXJuIGRmLmZvcm1hdCgpO1xuICB9XG5cbiAgZHRGb3JtYXR0ZXIoZHQsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmxvYy5kdEZvcm1hdHRlcihkdCwgeyAuLi50aGlzLm9wdHMsIC4uLm9wdHMgfSk7XG4gIH1cblxuICBmb3JtYXREYXRlVGltZShkdCwgb3B0cykge1xuICAgIHJldHVybiB0aGlzLmR0Rm9ybWF0dGVyKGR0LCBvcHRzKS5mb3JtYXQoKTtcbiAgfVxuXG4gIGZvcm1hdERhdGVUaW1lUGFydHMoZHQsIG9wdHMpIHtcbiAgICByZXR1cm4gdGhpcy5kdEZvcm1hdHRlcihkdCwgb3B0cykuZm9ybWF0VG9QYXJ0cygpO1xuICB9XG5cbiAgZm9ybWF0SW50ZXJ2YWwoaW50ZXJ2YWwsIG9wdHMpIHtcbiAgICBjb25zdCBkZiA9IHRoaXMuZHRGb3JtYXR0ZXIoaW50ZXJ2YWwuc3RhcnQsIG9wdHMpO1xuICAgIHJldHVybiBkZi5kdGYuZm9ybWF0UmFuZ2UoaW50ZXJ2YWwuc3RhcnQudG9KU0RhdGUoKSwgaW50ZXJ2YWwuZW5kLnRvSlNEYXRlKCkpO1xuICB9XG5cbiAgcmVzb2x2ZWRPcHRpb25zKGR0LCBvcHRzKSB7XG4gICAgcmV0dXJuIHRoaXMuZHRGb3JtYXR0ZXIoZHQsIG9wdHMpLnJlc29sdmVkT3B0aW9ucygpO1xuICB9XG5cbiAgbnVtKG4sIHAgPSAwKSB7XG4gICAgLy8gd2UgZ2V0IHNvbWUgcGVyZiBvdXQgb2YgZG9pbmcgdGhpcyBoZXJlLCBhbm5veWluZ2x5XG4gICAgaWYgKHRoaXMub3B0cy5mb3JjZVNpbXBsZSkge1xuICAgICAgcmV0dXJuIHBhZFN0YXJ0KG4sIHApO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdHMgPSB7IC4uLnRoaXMub3B0cyB9O1xuXG4gICAgaWYgKHAgPiAwKSB7XG4gICAgICBvcHRzLnBhZFRvID0gcDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sb2MubnVtYmVyRm9ybWF0dGVyKG9wdHMpLmZvcm1hdChuKTtcbiAgfVxuXG4gIGZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyhkdCwgZm10KSB7XG4gICAgY29uc3Qga25vd25FbmdsaXNoID0gdGhpcy5sb2MubGlzdGluZ01vZGUoKSA9PT0gXCJlblwiLFxuICAgICAgdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPSB0aGlzLmxvYy5vdXRwdXRDYWxlbmRhciAmJiB0aGlzLmxvYy5vdXRwdXRDYWxlbmRhciAhPT0gXCJncmVnb3J5XCIsXG4gICAgICBzdHJpbmcgPSAob3B0cywgZXh0cmFjdCkgPT4gdGhpcy5sb2MuZXh0cmFjdChkdCwgb3B0cywgZXh0cmFjdCksXG4gICAgICBmb3JtYXRPZmZzZXQgPSAob3B0cykgPT4ge1xuICAgICAgICBpZiAoZHQuaXNPZmZzZXRGaXhlZCAmJiBkdC5vZmZzZXQgPT09IDAgJiYgb3B0cy5hbGxvd1opIHtcbiAgICAgICAgICByZXR1cm4gXCJaXCI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZHQuaXNWYWxpZCA/IGR0LnpvbmUuZm9ybWF0T2Zmc2V0KGR0LnRzLCBvcHRzLmZvcm1hdCkgOiBcIlwiO1xuICAgICAgfSxcbiAgICAgIG1lcmlkaWVtID0gKCkgPT5cbiAgICAgICAga25vd25FbmdsaXNoXG4gICAgICAgICAgPyBFbmdsaXNoLm1lcmlkaWVtRm9yRGF0ZVRpbWUoZHQpXG4gICAgICAgICAgOiBzdHJpbmcoeyBob3VyOiBcIm51bWVyaWNcIiwgaG91ckN5Y2xlOiBcImgxMlwiIH0sIFwiZGF5cGVyaW9kXCIpLFxuICAgICAgbW9udGggPSAobGVuZ3RoLCBzdGFuZGFsb25lKSA9PlxuICAgICAgICBrbm93bkVuZ2xpc2hcbiAgICAgICAgICA/IEVuZ2xpc2gubW9udGhGb3JEYXRlVGltZShkdCwgbGVuZ3RoKVxuICAgICAgICAgIDogc3RyaW5nKHN0YW5kYWxvbmUgPyB7IG1vbnRoOiBsZW5ndGggfSA6IHsgbW9udGg6IGxlbmd0aCwgZGF5OiBcIm51bWVyaWNcIiB9LCBcIm1vbnRoXCIpLFxuICAgICAgd2Vla2RheSA9IChsZW5ndGgsIHN0YW5kYWxvbmUpID0+XG4gICAgICAgIGtub3duRW5nbGlzaFxuICAgICAgICAgID8gRW5nbGlzaC53ZWVrZGF5Rm9yRGF0ZVRpbWUoZHQsIGxlbmd0aClcbiAgICAgICAgICA6IHN0cmluZyhcbiAgICAgICAgICAgICAgc3RhbmRhbG9uZSA/IHsgd2Vla2RheTogbGVuZ3RoIH0gOiB7IHdlZWtkYXk6IGxlbmd0aCwgbW9udGg6IFwibG9uZ1wiLCBkYXk6IFwibnVtZXJpY1wiIH0sXG4gICAgICAgICAgICAgIFwid2Vla2RheVwiXG4gICAgICAgICAgICApLFxuICAgICAgbWF5YmVNYWNybyA9ICh0b2tlbikgPT4ge1xuICAgICAgICBjb25zdCBmb3JtYXRPcHRzID0gRm9ybWF0dGVyLm1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHModG9rZW4pO1xuICAgICAgICBpZiAoZm9ybWF0T3B0cykge1xuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFdpdGhTeXN0ZW1EZWZhdWx0KGR0LCBmb3JtYXRPcHRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcmEgPSAobGVuZ3RoKSA9PlxuICAgICAgICBrbm93bkVuZ2xpc2ggPyBFbmdsaXNoLmVyYUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIDogc3RyaW5nKHsgZXJhOiBsZW5ndGggfSwgXCJlcmFcIiksXG4gICAgICB0b2tlblRvU3RyaW5nID0gKHRva2VuKSA9PiB7XG4gICAgICAgIC8vIFdoZXJlIHBvc3NpYmxlOiBodHRwczovL2NsZHIudW5pY29kZS5vcmcvdHJhbnNsYXRpb24vZGF0ZS10aW1lL2RhdGUtdGltZS1zeW1ib2xzXG4gICAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgICAvLyBtc1xuICAgICAgICAgIGNhc2UgXCJTXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQubWlsbGlzZWNvbmQpO1xuICAgICAgICAgIGNhc2UgXCJ1XCI6XG4gICAgICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgICAgIGNhc2UgXCJTU1NcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5taWxsaXNlY29uZCwgMyk7XG4gICAgICAgICAgLy8gc2Vjb25kc1xuICAgICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQuc2Vjb25kKTtcbiAgICAgICAgICBjYXNlIFwic3NcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5zZWNvbmQsIDIpO1xuICAgICAgICAgIC8vIGZyYWN0aW9uYWwgc2Vjb25kc1xuICAgICAgICAgIGNhc2UgXCJ1dVwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKE1hdGguZmxvb3IoZHQubWlsbGlzZWNvbmQgLyAxMCksIDIpO1xuICAgICAgICAgIGNhc2UgXCJ1dXVcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShNYXRoLmZsb29yKGR0Lm1pbGxpc2Vjb25kIC8gMTAwKSk7XG4gICAgICAgICAgLy8gbWludXRlc1xuICAgICAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQubWludXRlKTtcbiAgICAgICAgICBjYXNlIFwibW1cIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5taW51dGUsIDIpO1xuICAgICAgICAgIC8vIGhvdXJzXG4gICAgICAgICAgY2FzZSBcImhcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5ob3VyICUgMTIgPT09IDAgPyAxMiA6IGR0LmhvdXIgJSAxMik7XG4gICAgICAgICAgY2FzZSBcImhoXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQuaG91ciAlIDEyID09PSAwID8gMTIgOiBkdC5ob3VyICUgMTIsIDIpO1xuICAgICAgICAgIGNhc2UgXCJIXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQuaG91cik7XG4gICAgICAgICAgY2FzZSBcIkhIXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQuaG91ciwgMik7XG4gICAgICAgICAgLy8gb2Zmc2V0XG4gICAgICAgICAgY2FzZSBcIlpcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgKzZcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRPZmZzZXQoeyBmb3JtYXQ6IFwibmFycm93XCIsIGFsbG93WjogdGhpcy5vcHRzLmFsbG93WiB9KTtcbiAgICAgICAgICBjYXNlIFwiWlpcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgKzA2OjAwXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHsgZm9ybWF0OiBcInNob3J0XCIsIGFsbG93WjogdGhpcy5vcHRzLmFsbG93WiB9KTtcbiAgICAgICAgICBjYXNlIFwiWlpaXCI6XG4gICAgICAgICAgICAvLyBsaWtlICswNjAwXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHsgZm9ybWF0OiBcInRlY2hpZVwiLCBhbGxvd1o6IHRoaXMub3B0cy5hbGxvd1ogfSk7XG4gICAgICAgICAgY2FzZSBcIlpaWlpcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgRVNUXG4gICAgICAgICAgICByZXR1cm4gZHQuem9uZS5vZmZzZXROYW1lKGR0LnRzLCB7IGZvcm1hdDogXCJzaG9ydFwiLCBsb2NhbGU6IHRoaXMubG9jLmxvY2FsZSB9KTtcbiAgICAgICAgICBjYXNlIFwiWlpaWlpcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgRWFzdGVybiBTdGFuZGFyZCBUaW1lXG4gICAgICAgICAgICByZXR1cm4gZHQuem9uZS5vZmZzZXROYW1lKGR0LnRzLCB7IGZvcm1hdDogXCJsb25nXCIsIGxvY2FsZTogdGhpcy5sb2MubG9jYWxlIH0pO1xuICAgICAgICAgIC8vIHpvbmVcbiAgICAgICAgICBjYXNlIFwielwiOlxuICAgICAgICAgICAgLy8gbGlrZSBBbWVyaWNhL05ld19Zb3JrXG4gICAgICAgICAgICByZXR1cm4gZHQuem9uZU5hbWU7XG4gICAgICAgICAgLy8gbWVyaWRpZW1zXG4gICAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgICAgIHJldHVybiBtZXJpZGllbSgpO1xuICAgICAgICAgIC8vIGRhdGVzXG4gICAgICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7IGRheTogXCJudW1lcmljXCIgfSwgXCJkYXlcIikgOiB0aGlzLm51bShkdC5kYXkpO1xuICAgICAgICAgIGNhc2UgXCJkZFwiOlxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsgZGF5OiBcIjItZGlnaXRcIiB9LCBcImRheVwiKSA6IHRoaXMubnVtKGR0LmRheSwgMik7XG4gICAgICAgICAgLy8gd2Vla2RheXMgLSBzdGFuZGFsb25lXG4gICAgICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LndlZWtkYXkpO1xuICAgICAgICAgIGNhc2UgXCJjY2NcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgJ1R1ZXMnXG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheShcInNob3J0XCIsIHRydWUpO1xuICAgICAgICAgIGNhc2UgXCJjY2NjXCI6XG4gICAgICAgICAgICAvLyBsaWtlICdUdWVzZGF5J1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoXCJsb25nXCIsIHRydWUpO1xuICAgICAgICAgIGNhc2UgXCJjY2NjY1wiOlxuICAgICAgICAgICAgLy8gbGlrZSAnVCdcbiAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5KFwibmFycm93XCIsIHRydWUpO1xuICAgICAgICAgIC8vIHdlZWtkYXlzIC0gZm9ybWF0XG4gICAgICAgICAgY2FzZSBcIkVcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LndlZWtkYXkpO1xuICAgICAgICAgIGNhc2UgXCJFRUVcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgJ1R1ZXMnXG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheShcInNob3J0XCIsIGZhbHNlKTtcbiAgICAgICAgICBjYXNlIFwiRUVFRVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAnVHVlc2RheSdcbiAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5KFwibG9uZ1wiLCBmYWxzZSk7XG4gICAgICAgICAgY2FzZSBcIkVFRUVFXCI6XG4gICAgICAgICAgICAvLyBsaWtlICdUJ1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoXCJuYXJyb3dcIiwgZmFsc2UpO1xuICAgICAgICAgIC8vIG1vbnRocyAtIHN0YW5kYWxvbmVcbiAgICAgICAgICBjYXNlIFwiTFwiOlxuICAgICAgICAgICAgLy8gbGlrZSAxXG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyBtb250aDogXCJudW1lcmljXCIsIGRheTogXCJudW1lcmljXCIgfSwgXCJtb250aFwiKVxuICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0Lm1vbnRoKTtcbiAgICAgICAgICBjYXNlIFwiTExcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMDEsIGRvZXNuJ3Qgc2VlbSB0byB3b3JrXG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyBtb250aDogXCIyLWRpZ2l0XCIsIGRheTogXCJudW1lcmljXCIgfSwgXCJtb250aFwiKVxuICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0Lm1vbnRoLCAyKTtcbiAgICAgICAgICBjYXNlIFwiTExMXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEphblxuICAgICAgICAgICAgcmV0dXJuIG1vbnRoKFwic2hvcnRcIiwgdHJ1ZSk7XG4gICAgICAgICAgY2FzZSBcIkxMTExcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgSmFudWFyeVxuICAgICAgICAgICAgcmV0dXJuIG1vbnRoKFwibG9uZ1wiLCB0cnVlKTtcbiAgICAgICAgICBjYXNlIFwiTExMTExcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgSlxuICAgICAgICAgICAgcmV0dXJuIG1vbnRoKFwibmFycm93XCIsIHRydWUpO1xuICAgICAgICAgIC8vIG1vbnRocyAtIGZvcm1hdFxuICAgICAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgICAgICAvLyBsaWtlIDFcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlclxuICAgICAgICAgICAgICA/IHN0cmluZyh7IG1vbnRoOiBcIm51bWVyaWNcIiB9LCBcIm1vbnRoXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQubW9udGgpO1xuICAgICAgICAgIGNhc2UgXCJNTVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAwMVxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyXG4gICAgICAgICAgICAgID8gc3RyaW5nKHsgbW9udGg6IFwiMi1kaWdpdFwiIH0sIFwibW9udGhcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC5tb250aCwgMik7XG4gICAgICAgICAgY2FzZSBcIk1NTVwiOlxuICAgICAgICAgICAgLy8gbGlrZSBKYW5cbiAgICAgICAgICAgIHJldHVybiBtb250aChcInNob3J0XCIsIGZhbHNlKTtcbiAgICAgICAgICBjYXNlIFwiTU1NTVwiOlxuICAgICAgICAgICAgLy8gbGlrZSBKYW51YXJ5XG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJsb25nXCIsIGZhbHNlKTtcbiAgICAgICAgICBjYXNlIFwiTU1NTU1cIjpcbiAgICAgICAgICAgIC8vIGxpa2UgSlxuICAgICAgICAgICAgcmV0dXJuIG1vbnRoKFwibmFycm93XCIsIGZhbHNlKTtcbiAgICAgICAgICAvLyB5ZWFyc1xuICAgICAgICAgIGNhc2UgXCJ5XCI6XG4gICAgICAgICAgICAvLyBsaWtlIDIwMTRcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7IHllYXI6IFwibnVtZXJpY1wiIH0sIFwieWVhclwiKSA6IHRoaXMubnVtKGR0LnllYXIpO1xuICAgICAgICAgIGNhc2UgXCJ5eVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAxNFxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyXG4gICAgICAgICAgICAgID8gc3RyaW5nKHsgeWVhcjogXCIyLWRpZ2l0XCIgfSwgXCJ5ZWFyXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQueWVhci50b1N0cmluZygpLnNsaWNlKC0yKSwgMik7XG4gICAgICAgICAgY2FzZSBcInl5eXlcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMDAxMlxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyXG4gICAgICAgICAgICAgID8gc3RyaW5nKHsgeWVhcjogXCJudW1lcmljXCIgfSwgXCJ5ZWFyXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQueWVhciwgNCk7XG4gICAgICAgICAgY2FzZSBcInl5eXl5eVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAwMDAwMTJcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlclxuICAgICAgICAgICAgICA/IHN0cmluZyh7IHllYXI6IFwibnVtZXJpY1wiIH0sIFwieWVhclwiKVxuICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0LnllYXIsIDYpO1xuICAgICAgICAgIC8vIGVyYXNcbiAgICAgICAgICBjYXNlIFwiR1wiOlxuICAgICAgICAgICAgLy8gbGlrZSBBRFxuICAgICAgICAgICAgcmV0dXJuIGVyYShcInNob3J0XCIpO1xuICAgICAgICAgIGNhc2UgXCJHR1wiOlxuICAgICAgICAgICAgLy8gbGlrZSBBbm5vIERvbWluaVxuICAgICAgICAgICAgcmV0dXJuIGVyYShcImxvbmdcIik7XG4gICAgICAgICAgY2FzZSBcIkdHR0dHXCI6XG4gICAgICAgICAgICByZXR1cm4gZXJhKFwibmFycm93XCIpO1xuICAgICAgICAgIGNhc2UgXCJra1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LndlZWtZZWFyLnRvU3RyaW5nKCkuc2xpY2UoLTIpLCAyKTtcbiAgICAgICAgICBjYXNlIFwia2tra1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LndlZWtZZWFyLCA0KTtcbiAgICAgICAgICBjYXNlIFwiV1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LndlZWtOdW1iZXIpO1xuICAgICAgICAgIGNhc2UgXCJXV1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LndlZWtOdW1iZXIsIDIpO1xuICAgICAgICAgIGNhc2UgXCJuXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQubG9jYWxXZWVrTnVtYmVyKTtcbiAgICAgICAgICBjYXNlIFwibm5cIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5sb2NhbFdlZWtOdW1iZXIsIDIpO1xuICAgICAgICAgIGNhc2UgXCJpaVwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LmxvY2FsV2Vla1llYXIudG9TdHJpbmcoKS5zbGljZSgtMiksIDIpO1xuICAgICAgICAgIGNhc2UgXCJpaWlpXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQubG9jYWxXZWVrWWVhciwgNCk7XG4gICAgICAgICAgY2FzZSBcIm9cIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5vcmRpbmFsKTtcbiAgICAgICAgICBjYXNlIFwib29vXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQub3JkaW5hbCwgMyk7XG4gICAgICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnF1YXJ0ZXIpO1xuICAgICAgICAgIGNhc2UgXCJxcVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAwMVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnF1YXJ0ZXIsIDIpO1xuICAgICAgICAgIGNhc2UgXCJYXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oTWF0aC5mbG9vcihkdC50cyAvIDEwMDApKTtcbiAgICAgICAgICBjYXNlIFwieFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnRzKTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG1heWJlTWFjcm8odG9rZW4pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgcmV0dXJuIHN0cmluZ2lmeVRva2VucyhGb3JtYXR0ZXIucGFyc2VGb3JtYXQoZm10KSwgdG9rZW5Ub1N0cmluZyk7XG4gIH1cblxuICBmb3JtYXREdXJhdGlvbkZyb21TdHJpbmcoZHVyLCBmbXQpIHtcbiAgICBjb25zdCB0b2tlblRvRmllbGQgPSAodG9rZW4pID0+IHtcbiAgICAgICAgc3dpdGNoICh0b2tlblswXSkge1xuICAgICAgICAgIGNhc2UgXCJTXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJtaWxsaXNlY29uZFwiO1xuICAgICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJzZWNvbmRcIjtcbiAgICAgICAgICBjYXNlIFwibVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwibWludXRlXCI7XG4gICAgICAgICAgY2FzZSBcImhcIjpcbiAgICAgICAgICAgIHJldHVybiBcImhvdXJcIjtcbiAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiZGF5XCI7XG4gICAgICAgICAgY2FzZSBcIndcIjpcbiAgICAgICAgICAgIHJldHVybiBcIndlZWtcIjtcbiAgICAgICAgICBjYXNlIFwiTVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwibW9udGhcIjtcbiAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwieWVhclwiO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRva2VuVG9TdHJpbmcgPSAobGlsZHVyKSA9PiAodG9rZW4pID0+IHtcbiAgICAgICAgY29uc3QgbWFwcGVkID0gdG9rZW5Ub0ZpZWxkKHRva2VuKTtcbiAgICAgICAgaWYgKG1hcHBlZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm51bShsaWxkdXIuZ2V0KG1hcHBlZCksIHRva2VuLmxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdG9rZW5zID0gRm9ybWF0dGVyLnBhcnNlRm9ybWF0KGZtdCksXG4gICAgICByZWFsVG9rZW5zID0gdG9rZW5zLnJlZHVjZShcbiAgICAgICAgKGZvdW5kLCB7IGxpdGVyYWwsIHZhbCB9KSA9PiAobGl0ZXJhbCA/IGZvdW5kIDogZm91bmQuY29uY2F0KHZhbCkpLFxuICAgICAgICBbXVxuICAgICAgKSxcbiAgICAgIGNvbGxhcHNlZCA9IGR1ci5zaGlmdFRvKC4uLnJlYWxUb2tlbnMubWFwKHRva2VuVG9GaWVsZCkuZmlsdGVyKCh0KSA9PiB0KSk7XG4gICAgcmV0dXJuIHN0cmluZ2lmeVRva2Vucyh0b2tlbnMsIHRva2VuVG9TdHJpbmcoY29sbGFwc2VkKSk7XG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEludmFsaWQge1xuICBjb25zdHJ1Y3RvcihyZWFzb24sIGV4cGxhbmF0aW9uKSB7XG4gICAgdGhpcy5yZWFzb24gPSByZWFzb247XG4gICAgdGhpcy5leHBsYW5hdGlvbiA9IGV4cGxhbmF0aW9uO1xuICB9XG5cbiAgdG9NZXNzYWdlKCkge1xuICAgIGlmICh0aGlzLmV4cGxhbmF0aW9uKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5yZWFzb259OiAke3RoaXMuZXhwbGFuYXRpb259YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgaGFzTG9jYWxlV2Vla0luZm8sIGhhc1JlbGF0aXZlLCBwYWRTdGFydCwgcm91bmRUbywgdmFsaWRhdGVXZWVrU2V0dGluZ3MgfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5pbXBvcnQgKiBhcyBFbmdsaXNoIGZyb20gXCIuL2VuZ2xpc2guanNcIjtcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi4vc2V0dGluZ3MuanNcIjtcbmltcG9ydCBEYXRlVGltZSBmcm9tIFwiLi4vZGF0ZXRpbWUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi4vem9uZXMvSUFOQVpvbmUuanNcIjtcblxuLy8gdG9kbyAtIHJlbWFwIGNhY2hpbmdcblxubGV0IGludGxMRkNhY2hlID0ge307XG5mdW5jdGlvbiBnZXRDYWNoZWRMRihsb2NTdHJpbmcsIG9wdHMgPSB7fSkge1xuICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShbbG9jU3RyaW5nLCBvcHRzXSk7XG4gIGxldCBkdGYgPSBpbnRsTEZDYWNoZVtrZXldO1xuICBpZiAoIWR0Zikge1xuICAgIGR0ZiA9IG5ldyBJbnRsLkxpc3RGb3JtYXQobG9jU3RyaW5nLCBvcHRzKTtcbiAgICBpbnRsTEZDYWNoZVtrZXldID0gZHRmO1xuICB9XG4gIHJldHVybiBkdGY7XG59XG5cbmxldCBpbnRsRFRDYWNoZSA9IHt9O1xuZnVuY3Rpb24gZ2V0Q2FjaGVkRFRGKGxvY1N0cmluZywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIG9wdHNdKTtcbiAgbGV0IGR0ZiA9IGludGxEVENhY2hlW2tleV07XG4gIGlmICghZHRmKSB7XG4gICAgZHRmID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jU3RyaW5nLCBvcHRzKTtcbiAgICBpbnRsRFRDYWNoZVtrZXldID0gZHRmO1xuICB9XG4gIHJldHVybiBkdGY7XG59XG5cbmxldCBpbnRsTnVtQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGdldENhY2hlZElORihsb2NTdHJpbmcsIG9wdHMgPSB7fSkge1xuICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShbbG9jU3RyaW5nLCBvcHRzXSk7XG4gIGxldCBpbmYgPSBpbnRsTnVtQ2FjaGVba2V5XTtcbiAgaWYgKCFpbmYpIHtcbiAgICBpbmYgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jU3RyaW5nLCBvcHRzKTtcbiAgICBpbnRsTnVtQ2FjaGVba2V5XSA9IGluZjtcbiAgfVxuICByZXR1cm4gaW5mO1xufVxuXG5sZXQgaW50bFJlbENhY2hlID0ge307XG5mdW5jdGlvbiBnZXRDYWNoZWRSVEYobG9jU3RyaW5nLCBvcHRzID0ge30pIHtcbiAgY29uc3QgeyBiYXNlLCAuLi5jYWNoZUtleU9wdHMgfSA9IG9wdHM7IC8vIGV4Y2x1ZGUgYGJhc2VgIGZyb20gdGhlIG9wdGlvbnNcbiAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoW2xvY1N0cmluZywgY2FjaGVLZXlPcHRzXSk7XG4gIGxldCBpbmYgPSBpbnRsUmVsQ2FjaGVba2V5XTtcbiAgaWYgKCFpbmYpIHtcbiAgICBpbmYgPSBuZXcgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQobG9jU3RyaW5nLCBvcHRzKTtcbiAgICBpbnRsUmVsQ2FjaGVba2V5XSA9IGluZjtcbiAgfVxuICByZXR1cm4gaW5mO1xufVxuXG5sZXQgc3lzTG9jYWxlQ2FjaGUgPSBudWxsO1xuZnVuY3Rpb24gc3lzdGVtTG9jYWxlKCkge1xuICBpZiAoc3lzTG9jYWxlQ2FjaGUpIHtcbiAgICByZXR1cm4gc3lzTG9jYWxlQ2FjaGU7XG4gIH0gZWxzZSB7XG4gICAgc3lzTG9jYWxlQ2FjaGUgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZTtcbiAgICByZXR1cm4gc3lzTG9jYWxlQ2FjaGU7XG4gIH1cbn1cblxubGV0IHdlZWtJbmZvQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGdldENhY2hlZFdlZWtJbmZvKGxvY1N0cmluZykge1xuICBsZXQgZGF0YSA9IHdlZWtJbmZvQ2FjaGVbbG9jU3RyaW5nXTtcbiAgaWYgKCFkYXRhKSB7XG4gICAgY29uc3QgbG9jYWxlID0gbmV3IEludGwuTG9jYWxlKGxvY1N0cmluZyk7XG4gICAgLy8gYnJvd3NlcnMgY3VycmVudGx5IGltcGxlbWVudCB0aGlzIGFzIGEgcHJvcGVydHksIGJ1dCBzcGVjIHNheXMgaXQgc2hvdWxkIGJlIGEgZ2V0dGVyIGZ1bmN0aW9uXG4gICAgZGF0YSA9IFwiZ2V0V2Vla0luZm9cIiBpbiBsb2NhbGUgPyBsb2NhbGUuZ2V0V2Vla0luZm8oKSA6IGxvY2FsZS53ZWVrSW5mbztcbiAgICB3ZWVrSW5mb0NhY2hlW2xvY1N0cmluZ10gPSBkYXRhO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxvY2FsZVN0cmluZyhsb2NhbGVTdHIpIHtcbiAgLy8gSSByZWFsbHkgd2FudCB0byBhdm9pZCB3cml0aW5nIGEgQkNQIDQ3IHBhcnNlclxuICAvLyBzZWUsIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL3dvb29ybS9iY3AtNDdcbiAgLy8gSW5zdGVhZCwgd2UnbGwgZG8gdGhpczpcblxuICAvLyBhKSBpZiB0aGUgc3RyaW5nIGhhcyBubyAtdSBleHRlbnNpb25zLCBqdXN0IGxlYXZlIGl0IGFsb25lXG4gIC8vIGIpIGlmIGl0IGRvZXMsIHVzZSBJbnRsIHRvIHJlc29sdmUgZXZlcnl0aGluZ1xuICAvLyBjKSBpZiBJbnRsIGZhaWxzLCB0cnkgYWdhaW4gd2l0aG91dCB0aGUgLXVcblxuICAvLyBwcml2YXRlIHN1YnRhZ3MgYW5kIHVuaWNvZGUgc3VidGFncyBoYXZlIG9yZGVyaW5nIHJlcXVpcmVtZW50cyxcbiAgLy8gYW5kIHdlJ3JlIG5vdCBwcm9wZXJseSBwYXJzaW5nIHRoaXMsIHNvIGp1c3Qgc3RyaXAgb3V0IHRoZVxuICAvLyBwcml2YXRlIG9uZXMgaWYgdGhleSBleGlzdC5cbiAgY29uc3QgeEluZGV4ID0gbG9jYWxlU3RyLmluZGV4T2YoXCIteC1cIik7XG4gIGlmICh4SW5kZXggIT09IC0xKSB7XG4gICAgbG9jYWxlU3RyID0gbG9jYWxlU3RyLnN1YnN0cmluZygwLCB4SW5kZXgpO1xuICB9XG5cbiAgY29uc3QgdUluZGV4ID0gbG9jYWxlU3RyLmluZGV4T2YoXCItdS1cIik7XG4gIGlmICh1SW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIFtsb2NhbGVTdHJdO1xuICB9IGVsc2Uge1xuICAgIGxldCBvcHRpb25zO1xuICAgIGxldCBzZWxlY3RlZFN0cjtcbiAgICB0cnkge1xuICAgICAgb3B0aW9ucyA9IGdldENhY2hlZERURihsb2NhbGVTdHIpLnJlc29sdmVkT3B0aW9ucygpO1xuICAgICAgc2VsZWN0ZWRTdHIgPSBsb2NhbGVTdHI7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3Qgc21hbGxlciA9IGxvY2FsZVN0ci5zdWJzdHJpbmcoMCwgdUluZGV4KTtcbiAgICAgIG9wdGlvbnMgPSBnZXRDYWNoZWREVEYoc21hbGxlcikucmVzb2x2ZWRPcHRpb25zKCk7XG4gICAgICBzZWxlY3RlZFN0ciA9IHNtYWxsZXI7XG4gICAgfVxuXG4gICAgY29uc3QgeyBudW1iZXJpbmdTeXN0ZW0sIGNhbGVuZGFyIH0gPSBvcHRpb25zO1xuICAgIHJldHVybiBbc2VsZWN0ZWRTdHIsIG51bWJlcmluZ1N5c3RlbSwgY2FsZW5kYXJdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludGxDb25maWdTdHJpbmcobG9jYWxlU3RyLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKSB7XG4gIGlmIChvdXRwdXRDYWxlbmRhciB8fCBudW1iZXJpbmdTeXN0ZW0pIHtcbiAgICBpZiAoIWxvY2FsZVN0ci5pbmNsdWRlcyhcIi11LVwiKSkge1xuICAgICAgbG9jYWxlU3RyICs9IFwiLXVcIjtcbiAgICB9XG5cbiAgICBpZiAob3V0cHV0Q2FsZW5kYXIpIHtcbiAgICAgIGxvY2FsZVN0ciArPSBgLWNhLSR7b3V0cHV0Q2FsZW5kYXJ9YDtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyaW5nU3lzdGVtKSB7XG4gICAgICBsb2NhbGVTdHIgKz0gYC1udS0ke251bWJlcmluZ1N5c3RlbX1gO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxlU3RyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsb2NhbGVTdHI7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwTW9udGhzKGYpIHtcbiAgY29uc3QgbXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgIGNvbnN0IGR0ID0gRGF0ZVRpbWUudXRjKDIwMDksIGksIDEpO1xuICAgIG1zLnB1c2goZihkdCkpO1xuICB9XG4gIHJldHVybiBtcztcbn1cblxuZnVuY3Rpb24gbWFwV2Vla2RheXMoZikge1xuICBjb25zdCBtcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMTsgaSA8PSA3OyBpKyspIHtcbiAgICBjb25zdCBkdCA9IERhdGVUaW1lLnV0YygyMDE2LCAxMSwgMTMgKyBpKTtcbiAgICBtcy5wdXNoKGYoZHQpKTtcbiAgfVxuICByZXR1cm4gbXM7XG59XG5cbmZ1bmN0aW9uIGxpc3RTdHVmZihsb2MsIGxlbmd0aCwgZW5nbGlzaEZuLCBpbnRsRm4pIHtcbiAgY29uc3QgbW9kZSA9IGxvYy5saXN0aW5nTW9kZSgpO1xuXG4gIGlmIChtb2RlID09PSBcImVycm9yXCIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmIChtb2RlID09PSBcImVuXCIpIHtcbiAgICByZXR1cm4gZW5nbGlzaEZuKGxlbmd0aCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGludGxGbihsZW5ndGgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzRmFzdE51bWJlcnMobG9jKSB7XG4gIGlmIChsb2MubnVtYmVyaW5nU3lzdGVtICYmIGxvYy5udW1iZXJpbmdTeXN0ZW0gIT09IFwibGF0blwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoXG4gICAgICBsb2MubnVtYmVyaW5nU3lzdGVtID09PSBcImxhdG5cIiB8fFxuICAgICAgIWxvYy5sb2NhbGUgfHxcbiAgICAgIGxvYy5sb2NhbGUuc3RhcnRzV2l0aChcImVuXCIpIHx8XG4gICAgICBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2MuaW50bCkucmVzb2x2ZWRPcHRpb25zKCkubnVtYmVyaW5nU3lzdGVtID09PSBcImxhdG5cIlxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmNsYXNzIFBvbHlOdW1iZXJGb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3RvcihpbnRsLCBmb3JjZVNpbXBsZSwgb3B0cykge1xuICAgIHRoaXMucGFkVG8gPSBvcHRzLnBhZFRvIHx8IDA7XG4gICAgdGhpcy5mbG9vciA9IG9wdHMuZmxvb3IgfHwgZmFsc2U7XG5cbiAgICBjb25zdCB7IHBhZFRvLCBmbG9vciwgLi4ub3RoZXJPcHRzIH0gPSBvcHRzO1xuXG4gICAgaWYgKCFmb3JjZVNpbXBsZSB8fCBPYmplY3Qua2V5cyhvdGhlck9wdHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGludGxPcHRzID0geyB1c2VHcm91cGluZzogZmFsc2UsIC4uLm9wdHMgfTtcbiAgICAgIGlmIChvcHRzLnBhZFRvID4gMCkgaW50bE9wdHMubWluaW11bUludGVnZXJEaWdpdHMgPSBvcHRzLnBhZFRvO1xuICAgICAgdGhpcy5pbmYgPSBnZXRDYWNoZWRJTkYoaW50bCwgaW50bE9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdChpKSB7XG4gICAgaWYgKHRoaXMuaW5mKSB7XG4gICAgICBjb25zdCBmaXhlZCA9IHRoaXMuZmxvb3IgPyBNYXRoLmZsb29yKGkpIDogaTtcbiAgICAgIHJldHVybiB0aGlzLmluZi5mb3JtYXQoZml4ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0byBtYXRjaCB0aGUgYnJvd3NlcidzIG51bWJlcmZvcm1hdHRlciBkZWZhdWx0c1xuICAgICAgY29uc3QgZml4ZWQgPSB0aGlzLmZsb29yID8gTWF0aC5mbG9vcihpKSA6IHJvdW5kVG8oaSwgMyk7XG4gICAgICByZXR1cm4gcGFkU3RhcnQoZml4ZWQsIHRoaXMucGFkVG8pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuY2xhc3MgUG9seURhdGVGb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3RvcihkdCwgaW50bCwgb3B0cykge1xuICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgdGhpcy5vcmlnaW5hbFpvbmUgPSB1bmRlZmluZWQ7XG5cbiAgICBsZXQgeiA9IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5vcHRzLnRpbWVab25lKSB7XG4gICAgICAvLyBEb24ndCBhcHBseSBhbnkgd29ya2Fyb3VuZHMgaWYgYSB0aW1lWm9uZSBpcyBleHBsaWNpdGx5IHByb3ZpZGVkIGluIG9wdHNcbiAgICAgIHRoaXMuZHQgPSBkdDtcbiAgICB9IGVsc2UgaWYgKGR0LnpvbmUudHlwZSA9PT0gXCJmaXhlZFwiKSB7XG4gICAgICAvLyBVVEMtOCBvciBFdGMvVVRDLTggYXJlIG5vdCBwYXJ0IG9mIHR6ZGF0YSwgb25seSBFdGMvR01UKzggYW5kIHRoZSBsaWtlLlxuICAgICAgLy8gVGhhdCBpcyB3aHkgZml4ZWQtb2Zmc2V0IFRaIGlzIHNldCB0byB0aGF0IHVubGVzcyBpdCBpczpcbiAgICAgIC8vIDEuIFJlcHJlc2VudGluZyBvZmZzZXQgMCB3aGVuIFVUQyBpcyB1c2VkIHRvIG1haW50YWluIHByZXZpb3VzIGJlaGF2aW9yIGFuZCBkb2VzIG5vdCBiZWNvbWUgR01ULlxuICAgICAgLy8gMi4gVW5zdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXI6XG4gICAgICAvLyAgICAtIHNvbWUgZG8gbm90IHN1cHBvcnQgRXRjL1xuICAgICAgLy8gICAgLSA8IEV0Yy9HTVQtMTQsID4gRXRjL0dNVCsxMiwgYW5kIDMwLW1pbnV0ZSBvciA0NS1taW51dGUgb2Zmc2V0cyBhcmUgbm90IHBhcnQgb2YgdHpkYXRhXG4gICAgICBjb25zdCBnbXRPZmZzZXQgPSAtMSAqIChkdC5vZmZzZXQgLyA2MCk7XG4gICAgICBjb25zdCBvZmZzZXRaID0gZ210T2Zmc2V0ID49IDAgPyBgRXRjL0dNVCske2dtdE9mZnNldH1gIDogYEV0Yy9HTVQke2dtdE9mZnNldH1gO1xuICAgICAgaWYgKGR0Lm9mZnNldCAhPT0gMCAmJiBJQU5BWm9uZS5jcmVhdGUob2Zmc2V0WikudmFsaWQpIHtcbiAgICAgICAgeiA9IG9mZnNldFo7XG4gICAgICAgIHRoaXMuZHQgPSBkdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vdCBhbGwgZml4ZWQtb2Zmc2V0IHpvbmVzIGxpa2UgRXRjLys0OjMwIGFyZSBwcmVzZW50IGluIHR6ZGF0YSBzb1xuICAgICAgICAvLyB3ZSBtYW51YWxseSBhcHBseSB0aGUgb2Zmc2V0IGFuZCBzdWJzdGl0dXRlIHRoZSB6b25lIGFzIG5lZWRlZC5cbiAgICAgICAgeiA9IFwiVVRDXCI7XG4gICAgICAgIHRoaXMuZHQgPSBkdC5vZmZzZXQgPT09IDAgPyBkdCA6IGR0LnNldFpvbmUoXCJVVENcIikucGx1cyh7IG1pbnV0ZXM6IGR0Lm9mZnNldCB9KTtcbiAgICAgICAgdGhpcy5vcmlnaW5hbFpvbmUgPSBkdC56b25lO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZHQuem9uZS50eXBlID09PSBcInN5c3RlbVwiKSB7XG4gICAgICB0aGlzLmR0ID0gZHQ7XG4gICAgfSBlbHNlIGlmIChkdC56b25lLnR5cGUgPT09IFwiaWFuYVwiKSB7XG4gICAgICB0aGlzLmR0ID0gZHQ7XG4gICAgICB6ID0gZHQuem9uZS5uYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDdXN0b20gem9uZXMgY2FuIGhhdmUgYW55IG9mZnNldCAvIG9mZnNldE5hbWUgc28gd2UganVzdCBtYW51YWxseVxuICAgICAgLy8gYXBwbHkgdGhlIG9mZnNldCBhbmQgc3Vic3RpdHV0ZSB0aGUgem9uZSBhcyBuZWVkZWQuXG4gICAgICB6ID0gXCJVVENcIjtcbiAgICAgIHRoaXMuZHQgPSBkdC5zZXRab25lKFwiVVRDXCIpLnBsdXMoeyBtaW51dGVzOiBkdC5vZmZzZXQgfSk7XG4gICAgICB0aGlzLm9yaWdpbmFsWm9uZSA9IGR0LnpvbmU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50bE9wdHMgPSB7IC4uLnRoaXMub3B0cyB9O1xuICAgIGludGxPcHRzLnRpbWVab25lID0gaW50bE9wdHMudGltZVpvbmUgfHwgejtcbiAgICB0aGlzLmR0ZiA9IGdldENhY2hlZERURihpbnRsLCBpbnRsT3B0cyk7XG4gIH1cblxuICBmb3JtYXQoKSB7XG4gICAgaWYgKHRoaXMub3JpZ2luYWxab25lKSB7XG4gICAgICAvLyBJZiB3ZSBoYXZlIHRvIHN1YnN0aXR1dGUgaW4gdGhlIGFjdHVhbCB6b25lIG5hbWUsIHdlIGhhdmUgdG8gdXNlXG4gICAgICAvLyBmb3JtYXRUb1BhcnRzIHNvIHRoYXQgdGhlIHRpbWV6b25lIGNhbiBiZSByZXBsYWNlZC5cbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdFRvUGFydHMoKVxuICAgICAgICAubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKVxuICAgICAgICAuam9pbihcIlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZHRmLmZvcm1hdCh0aGlzLmR0LnRvSlNEYXRlKCkpO1xuICB9XG5cbiAgZm9ybWF0VG9QYXJ0cygpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHRoaXMuZHRmLmZvcm1hdFRvUGFydHModGhpcy5kdC50b0pTRGF0ZSgpKTtcbiAgICBpZiAodGhpcy5vcmlnaW5hbFpvbmUpIHtcbiAgICAgIHJldHVybiBwYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgaWYgKHBhcnQudHlwZSA9PT0gXCJ0aW1lWm9uZU5hbWVcIikge1xuICAgICAgICAgIGNvbnN0IG9mZnNldE5hbWUgPSB0aGlzLm9yaWdpbmFsWm9uZS5vZmZzZXROYW1lKHRoaXMuZHQudHMsIHtcbiAgICAgICAgICAgIGxvY2FsZTogdGhpcy5kdC5sb2NhbGUsXG4gICAgICAgICAgICBmb3JtYXQ6IHRoaXMub3B0cy50aW1lWm9uZU5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnBhcnQsXG4gICAgICAgICAgICB2YWx1ZTogb2Zmc2V0TmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBwYXJ0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnRzO1xuICB9XG5cbiAgcmVzb2x2ZWRPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmR0Zi5yZXNvbHZlZE9wdGlvbnMoKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFBvbHlSZWxGb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3RvcihpbnRsLCBpc0VuZ2xpc2gsIG9wdHMpIHtcbiAgICB0aGlzLm9wdHMgPSB7IHN0eWxlOiBcImxvbmdcIiwgLi4ub3B0cyB9O1xuICAgIGlmICghaXNFbmdsaXNoICYmIGhhc1JlbGF0aXZlKCkpIHtcbiAgICAgIHRoaXMucnRmID0gZ2V0Q2FjaGVkUlRGKGludGwsIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdChjb3VudCwgdW5pdCkge1xuICAgIGlmICh0aGlzLnJ0Zikge1xuICAgICAgcmV0dXJuIHRoaXMucnRmLmZvcm1hdChjb3VudCwgdW5pdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBFbmdsaXNoLmZvcm1hdFJlbGF0aXZlVGltZSh1bml0LCBjb3VudCwgdGhpcy5vcHRzLm51bWVyaWMsIHRoaXMub3B0cy5zdHlsZSAhPT0gXCJsb25nXCIpO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdFRvUGFydHMoY291bnQsIHVuaXQpIHtcbiAgICBpZiAodGhpcy5ydGYpIHtcbiAgICAgIHJldHVybiB0aGlzLnJ0Zi5mb3JtYXRUb1BhcnRzKGNvdW50LCB1bml0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBmYWxsYmFja1dlZWtTZXR0aW5ncyA9IHtcbiAgZmlyc3REYXk6IDEsXG4gIG1pbmltYWxEYXlzOiA0LFxuICB3ZWVrZW5kOiBbNiwgN10sXG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9jYWxlIHtcbiAgc3RhdGljIGZyb21PcHRzKG9wdHMpIHtcbiAgICByZXR1cm4gTG9jYWxlLmNyZWF0ZShcbiAgICAgIG9wdHMubG9jYWxlLFxuICAgICAgb3B0cy5udW1iZXJpbmdTeXN0ZW0sXG4gICAgICBvcHRzLm91dHB1dENhbGVuZGFyLFxuICAgICAgb3B0cy53ZWVrU2V0dGluZ3MsXG4gICAgICBvcHRzLmRlZmF1bHRUb0VOXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyLCB3ZWVrU2V0dGluZ3MsIGRlZmF1bHRUb0VOID0gZmFsc2UpIHtcbiAgICBjb25zdCBzcGVjaWZpZWRMb2NhbGUgPSBsb2NhbGUgfHwgU2V0dGluZ3MuZGVmYXVsdExvY2FsZTtcbiAgICAvLyB0aGUgc3lzdGVtIGxvY2FsZSBpcyB1c2VmdWwgZm9yIGh1bWFuLXJlYWRhYmxlIHN0cmluZ3MgYnV0IGFubm95aW5nIGZvciBwYXJzaW5nL2Zvcm1hdHRpbmcga25vd24gZm9ybWF0c1xuICAgIGNvbnN0IGxvY2FsZVIgPSBzcGVjaWZpZWRMb2NhbGUgfHwgKGRlZmF1bHRUb0VOID8gXCJlbi1VU1wiIDogc3lzdGVtTG9jYWxlKCkpO1xuICAgIGNvbnN0IG51bWJlcmluZ1N5c3RlbVIgPSBudW1iZXJpbmdTeXN0ZW0gfHwgU2V0dGluZ3MuZGVmYXVsdE51bWJlcmluZ1N5c3RlbTtcbiAgICBjb25zdCBvdXRwdXRDYWxlbmRhclIgPSBvdXRwdXRDYWxlbmRhciB8fCBTZXR0aW5ncy5kZWZhdWx0T3V0cHV0Q2FsZW5kYXI7XG4gICAgY29uc3Qgd2Vla1NldHRpbmdzUiA9IHZhbGlkYXRlV2Vla1NldHRpbmdzKHdlZWtTZXR0aW5ncykgfHwgU2V0dGluZ3MuZGVmYXVsdFdlZWtTZXR0aW5ncztcbiAgICByZXR1cm4gbmV3IExvY2FsZShsb2NhbGVSLCBudW1iZXJpbmdTeXN0ZW1SLCBvdXRwdXRDYWxlbmRhclIsIHdlZWtTZXR0aW5nc1IsIHNwZWNpZmllZExvY2FsZSk7XG4gIH1cblxuICBzdGF0aWMgcmVzZXRDYWNoZSgpIHtcbiAgICBzeXNMb2NhbGVDYWNoZSA9IG51bGw7XG4gICAgaW50bERUQ2FjaGUgPSB7fTtcbiAgICBpbnRsTnVtQ2FjaGUgPSB7fTtcbiAgICBpbnRsUmVsQ2FjaGUgPSB7fTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tT2JqZWN0KHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyLCB3ZWVrU2V0dGluZ3MgfSA9IHt9KSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyLCB3ZWVrU2V0dGluZ3MpO1xuICB9XG5cbiAgY29uc3RydWN0b3IobG9jYWxlLCBudW1iZXJpbmcsIG91dHB1dENhbGVuZGFyLCB3ZWVrU2V0dGluZ3MsIHNwZWNpZmllZExvY2FsZSkge1xuICAgIGNvbnN0IFtwYXJzZWRMb2NhbGUsIHBhcnNlZE51bWJlcmluZ1N5c3RlbSwgcGFyc2VkT3V0cHV0Q2FsZW5kYXJdID0gcGFyc2VMb2NhbGVTdHJpbmcobG9jYWxlKTtcblxuICAgIHRoaXMubG9jYWxlID0gcGFyc2VkTG9jYWxlO1xuICAgIHRoaXMubnVtYmVyaW5nU3lzdGVtID0gbnVtYmVyaW5nIHx8IHBhcnNlZE51bWJlcmluZ1N5c3RlbSB8fCBudWxsO1xuICAgIHRoaXMub3V0cHV0Q2FsZW5kYXIgPSBvdXRwdXRDYWxlbmRhciB8fCBwYXJzZWRPdXRwdXRDYWxlbmRhciB8fCBudWxsO1xuICAgIHRoaXMud2Vla1NldHRpbmdzID0gd2Vla1NldHRpbmdzO1xuICAgIHRoaXMuaW50bCA9IGludGxDb25maWdTdHJpbmcodGhpcy5sb2NhbGUsIHRoaXMubnVtYmVyaW5nU3lzdGVtLCB0aGlzLm91dHB1dENhbGVuZGFyKTtcblxuICAgIHRoaXMud2Vla2RheXNDYWNoZSA9IHsgZm9ybWF0OiB7fSwgc3RhbmRhbG9uZToge30gfTtcbiAgICB0aGlzLm1vbnRoc0NhY2hlID0geyBmb3JtYXQ6IHt9LCBzdGFuZGFsb25lOiB7fSB9O1xuICAgIHRoaXMubWVyaWRpZW1DYWNoZSA9IG51bGw7XG4gICAgdGhpcy5lcmFDYWNoZSA9IHt9O1xuXG4gICAgdGhpcy5zcGVjaWZpZWRMb2NhbGUgPSBzcGVjaWZpZWRMb2NhbGU7XG4gICAgdGhpcy5mYXN0TnVtYmVyc0NhY2hlZCA9IG51bGw7XG4gIH1cblxuICBnZXQgZmFzdE51bWJlcnMoKSB7XG4gICAgaWYgKHRoaXMuZmFzdE51bWJlcnNDYWNoZWQgPT0gbnVsbCkge1xuICAgICAgdGhpcy5mYXN0TnVtYmVyc0NhY2hlZCA9IHN1cHBvcnRzRmFzdE51bWJlcnModGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZmFzdE51bWJlcnNDYWNoZWQ7XG4gIH1cblxuICBsaXN0aW5nTW9kZSgpIHtcbiAgICBjb25zdCBpc0FjdHVhbGx5RW4gPSB0aGlzLmlzRW5nbGlzaCgpO1xuICAgIGNvbnN0IGhhc05vV2VpcmRuZXNzID1cbiAgICAgICh0aGlzLm51bWJlcmluZ1N5c3RlbSA9PT0gbnVsbCB8fCB0aGlzLm51bWJlcmluZ1N5c3RlbSA9PT0gXCJsYXRuXCIpICYmXG4gICAgICAodGhpcy5vdXRwdXRDYWxlbmRhciA9PT0gbnVsbCB8fCB0aGlzLm91dHB1dENhbGVuZGFyID09PSBcImdyZWdvcnlcIik7XG4gICAgcmV0dXJuIGlzQWN0dWFsbHlFbiAmJiBoYXNOb1dlaXJkbmVzcyA/IFwiZW5cIiA6IFwiaW50bFwiO1xuICB9XG5cbiAgY2xvbmUoYWx0cykge1xuICAgIGlmICghYWx0cyB8fCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhbHRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gTG9jYWxlLmNyZWF0ZShcbiAgICAgICAgYWx0cy5sb2NhbGUgfHwgdGhpcy5zcGVjaWZpZWRMb2NhbGUsXG4gICAgICAgIGFsdHMubnVtYmVyaW5nU3lzdGVtIHx8IHRoaXMubnVtYmVyaW5nU3lzdGVtLFxuICAgICAgICBhbHRzLm91dHB1dENhbGVuZGFyIHx8IHRoaXMub3V0cHV0Q2FsZW5kYXIsXG4gICAgICAgIHZhbGlkYXRlV2Vla1NldHRpbmdzKGFsdHMud2Vla1NldHRpbmdzKSB8fCB0aGlzLndlZWtTZXR0aW5ncyxcbiAgICAgICAgYWx0cy5kZWZhdWx0VG9FTiB8fCBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZWRlZmF1bHRUb0VOKGFsdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKHsgLi4uYWx0cywgZGVmYXVsdFRvRU46IHRydWUgfSk7XG4gIH1cblxuICByZWRlZmF1bHRUb1N5c3RlbShhbHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSh7IC4uLmFsdHMsIGRlZmF1bHRUb0VOOiBmYWxzZSB9KTtcbiAgfVxuXG4gIG1vbnRocyhsZW5ndGgsIGZvcm1hdCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIGxpc3RTdHVmZih0aGlzLCBsZW5ndGgsIEVuZ2xpc2gubW9udGhzLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnRsID0gZm9ybWF0ID8geyBtb250aDogbGVuZ3RoLCBkYXk6IFwibnVtZXJpY1wiIH0gOiB7IG1vbnRoOiBsZW5ndGggfSxcbiAgICAgICAgZm9ybWF0U3RyID0gZm9ybWF0ID8gXCJmb3JtYXRcIiA6IFwic3RhbmRhbG9uZVwiO1xuICAgICAgaWYgKCF0aGlzLm1vbnRoc0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSkge1xuICAgICAgICB0aGlzLm1vbnRoc0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSA9IG1hcE1vbnRocygoZHQpID0+IHRoaXMuZXh0cmFjdChkdCwgaW50bCwgXCJtb250aFwiKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5tb250aHNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF07XG4gICAgfSk7XG4gIH1cblxuICB3ZWVrZGF5cyhsZW5ndGgsIGZvcm1hdCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIGxpc3RTdHVmZih0aGlzLCBsZW5ndGgsIEVuZ2xpc2gud2Vla2RheXMsICgpID0+IHtcbiAgICAgIGNvbnN0IGludGwgPSBmb3JtYXRcbiAgICAgICAgICA/IHsgd2Vla2RheTogbGVuZ3RoLCB5ZWFyOiBcIm51bWVyaWNcIiwgbW9udGg6IFwibG9uZ1wiLCBkYXk6IFwibnVtZXJpY1wiIH1cbiAgICAgICAgICA6IHsgd2Vla2RheTogbGVuZ3RoIH0sXG4gICAgICAgIGZvcm1hdFN0ciA9IGZvcm1hdCA/IFwiZm9ybWF0XCIgOiBcInN0YW5kYWxvbmVcIjtcbiAgICAgIGlmICghdGhpcy53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSkge1xuICAgICAgICB0aGlzLndlZWtkYXlzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdID0gbWFwV2Vla2RheXMoKGR0KSA9PlxuICAgICAgICAgIHRoaXMuZXh0cmFjdChkdCwgaW50bCwgXCJ3ZWVrZGF5XCIpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXTtcbiAgICB9KTtcbiAgfVxuXG4gIG1lcmlkaWVtcygpIHtcbiAgICByZXR1cm4gbGlzdFN0dWZmKFxuICAgICAgdGhpcyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgICgpID0+IEVuZ2xpc2gubWVyaWRpZW1zLFxuICAgICAgKCkgPT4ge1xuICAgICAgICAvLyBJbiB0aGVvcnkgdGhlcmUgY291bGQgYmUgYXJpYml0cmFyeSBkYXkgcGVyaW9kcy4gV2UncmUgZ29ubmEgYXNzdW1lIHRoZXJlIGFyZSBleGFjdGx5IHR3b1xuICAgICAgICAvLyBmb3IgQU0gYW5kIFBNLiBUaGlzIGlzIHByb2JhYmx5IHdyb25nLCBidXQgaXQncyBtYWtlcyBwYXJzaW5nIHdheSBlYXNpZXIuXG4gICAgICAgIGlmICghdGhpcy5tZXJpZGllbUNhY2hlKSB7XG4gICAgICAgICAgY29uc3QgaW50bCA9IHsgaG91cjogXCJudW1lcmljXCIsIGhvdXJDeWNsZTogXCJoMTJcIiB9O1xuICAgICAgICAgIHRoaXMubWVyaWRpZW1DYWNoZSA9IFtEYXRlVGltZS51dGMoMjAxNiwgMTEsIDEzLCA5KSwgRGF0ZVRpbWUudXRjKDIwMTYsIDExLCAxMywgMTkpXS5tYXAoXG4gICAgICAgICAgICAoZHQpID0+IHRoaXMuZXh0cmFjdChkdCwgaW50bCwgXCJkYXlwZXJpb2RcIilcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWVyaWRpZW1DYWNoZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgZXJhcyhsZW5ndGgpIHtcbiAgICByZXR1cm4gbGlzdFN0dWZmKHRoaXMsIGxlbmd0aCwgRW5nbGlzaC5lcmFzLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnRsID0geyBlcmE6IGxlbmd0aCB9O1xuXG4gICAgICAvLyBUaGlzIGlzIHByb2JsZW1hdGljLiBEaWZmZXJlbnQgY2FsZW5kYXJzIGFyZSBnb2luZyB0byBkZWZpbmUgZXJhcyB0b3RhbGx5IGRpZmZlcmVudGx5LiBXaGF0IEkgbmVlZCBpcyB0aGUgbWluaW11bSBzZXQgb2YgZGF0ZXNcbiAgICAgIC8vIHRvIGRlZmluaXRlbHkgZW51bWVyYXRlIHRoZW0uXG4gICAgICBpZiAoIXRoaXMuZXJhQ2FjaGVbbGVuZ3RoXSkge1xuICAgICAgICB0aGlzLmVyYUNhY2hlW2xlbmd0aF0gPSBbRGF0ZVRpbWUudXRjKC00MCwgMSwgMSksIERhdGVUaW1lLnV0YygyMDE3LCAxLCAxKV0ubWFwKChkdCkgPT5cbiAgICAgICAgICB0aGlzLmV4dHJhY3QoZHQsIGludGwsIFwiZXJhXCIpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmVyYUNhY2hlW2xlbmd0aF07XG4gICAgfSk7XG4gIH1cblxuICBleHRyYWN0KGR0LCBpbnRsT3B0cywgZmllbGQpIHtcbiAgICBjb25zdCBkZiA9IHRoaXMuZHRGb3JtYXR0ZXIoZHQsIGludGxPcHRzKSxcbiAgICAgIHJlc3VsdHMgPSBkZi5mb3JtYXRUb1BhcnRzKCksXG4gICAgICBtYXRjaGluZyA9IHJlc3VsdHMuZmluZCgobSkgPT4gbS50eXBlLnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkKTtcbiAgICByZXR1cm4gbWF0Y2hpbmcgPyBtYXRjaGluZy52YWx1ZSA6IG51bGw7XG4gIH1cblxuICBudW1iZXJGb3JtYXR0ZXIob3B0cyA9IHt9KSB7XG4gICAgLy8gdGhpcyBmb3JjZXNpbXBsZSBvcHRpb24gaXMgbmV2ZXIgdXNlZCAodGhlIG9ubHkgY2FsbGVyIHNob3J0LWNpcmN1aXRzIG9uIGl0LCBidXQgaXQgc2VlbXMgc2FmZXIgdG8gbGVhdmUpXG4gICAgLy8gKGluIGNvbnRyYXN0LCB0aGUgcmVzdCBvZiB0aGUgY29uZGl0aW9uIGlzIHVzZWQgaGVhdmlseSlcbiAgICByZXR1cm4gbmV3IFBvbHlOdW1iZXJGb3JtYXR0ZXIodGhpcy5pbnRsLCBvcHRzLmZvcmNlU2ltcGxlIHx8IHRoaXMuZmFzdE51bWJlcnMsIG9wdHMpO1xuICB9XG5cbiAgZHRGb3JtYXR0ZXIoZHQsIGludGxPcHRzID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFBvbHlEYXRlRm9ybWF0dGVyKGR0LCB0aGlzLmludGwsIGludGxPcHRzKTtcbiAgfVxuXG4gIHJlbEZvcm1hdHRlcihvcHRzID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFBvbHlSZWxGb3JtYXR0ZXIodGhpcy5pbnRsLCB0aGlzLmlzRW5nbGlzaCgpLCBvcHRzKTtcbiAgfVxuXG4gIGxpc3RGb3JtYXR0ZXIob3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIGdldENhY2hlZExGKHRoaXMuaW50bCwgb3B0cyk7XG4gIH1cblxuICBpc0VuZ2xpc2goKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubG9jYWxlID09PSBcImVuXCIgfHxcbiAgICAgIHRoaXMubG9jYWxlLnRvTG93ZXJDYXNlKCkgPT09IFwiZW4tdXNcIiB8fFxuICAgICAgbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5pbnRsKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGUuc3RhcnRzV2l0aChcImVuLXVzXCIpXG4gICAgKTtcbiAgfVxuXG4gIGdldFdlZWtTZXR0aW5ncygpIHtcbiAgICBpZiAodGhpcy53ZWVrU2V0dGluZ3MpIHtcbiAgICAgIHJldHVybiB0aGlzLndlZWtTZXR0aW5ncztcbiAgICB9IGVsc2UgaWYgKCFoYXNMb2NhbGVXZWVrSW5mbygpKSB7XG4gICAgICByZXR1cm4gZmFsbGJhY2tXZWVrU2V0dGluZ3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRDYWNoZWRXZWVrSW5mbyh0aGlzLmxvY2FsZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhcnRPZldlZWsoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0V2Vla1NldHRpbmdzKCkuZmlyc3REYXk7XG4gIH1cblxuICBnZXRNaW5EYXlzSW5GaXJzdFdlZWsoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0V2Vla1NldHRpbmdzKCkubWluaW1hbERheXM7XG4gIH1cblxuICBnZXRXZWVrZW5kRGF5cygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRXZWVrU2V0dGluZ3MoKS53ZWVrZW5kO1xuICB9XG5cbiAgZXF1YWxzKG90aGVyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubG9jYWxlID09PSBvdGhlci5sb2NhbGUgJiZcbiAgICAgIHRoaXMubnVtYmVyaW5nU3lzdGVtID09PSBvdGhlci5udW1iZXJpbmdTeXN0ZW0gJiZcbiAgICAgIHRoaXMub3V0cHV0Q2FsZW5kYXIgPT09IG90aGVyLm91dHB1dENhbGVuZGFyXG4gICAgKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBgTG9jYWxlKCR7dGhpcy5sb2NhbGV9LCAke3RoaXMubnVtYmVyaW5nU3lzdGVtfSwgJHt0aGlzLm91dHB1dENhbGVuZGFyfSlgO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICB1bnRydW5jYXRlWWVhcixcbiAgc2lnbmVkT2Zmc2V0LFxuICBwYXJzZUludGVnZXIsXG4gIHBhcnNlTWlsbGlzLFxuICBpc1VuZGVmaW5lZCxcbiAgcGFyc2VGbG9hdGluZyxcbn0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuaW1wb3J0ICogYXMgRW5nbGlzaCBmcm9tIFwiLi9lbmdsaXNoLmpzXCI7XG5pbXBvcnQgRml4ZWRPZmZzZXRab25lIGZyb20gXCIuLi96b25lcy9maXhlZE9mZnNldFpvbmUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi4vem9uZXMvSUFOQVpvbmUuanNcIjtcblxuLypcbiAqIFRoaXMgZmlsZSBoYW5kbGVzIHBhcnNpbmcgZm9yIHdlbGwtc3BlY2lmaWVkIGZvcm1hdHMuIEhlcmUncyBob3cgaXQgd29ya3M6XG4gKiBUd28gdGhpbmdzIGdvIGludG8gcGFyc2luZzogYSByZWdleCB0byBtYXRjaCB3aXRoIGFuZCBhbiBleHRyYWN0b3IgdG8gdGFrZSBhcGFydCB0aGUgZ3JvdXBzIGluIHRoZSBtYXRjaC5cbiAqIEFuIGV4dHJhY3RvciBpcyBqdXN0IGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHJlZ2V4IG1hdGNoIGFycmF5IGFuZCByZXR1cm5zIGEgeyB5ZWFyOiAuLi4sIG1vbnRoOiAuLi4gfSBvYmplY3RcbiAqIHBhcnNlKCkgZG9lcyB0aGUgd29yayBvZiBleGVjdXRpbmcgdGhlIHJlZ2V4IGFuZCBhcHBseWluZyB0aGUgZXh0cmFjdG9yLiBJdCB0YWtlcyBtdWx0aXBsZSByZWdleC9leHRyYWN0b3IgcGFpcnMgdG8gdHJ5IGluIHNlcXVlbmNlLlxuICogRXh0cmFjdG9ycyBjYW4gdGFrZSBhIFwiY3Vyc29yXCIgcmVwcmVzZW50aW5nIHRoZSBvZmZzZXQgaW4gdGhlIG1hdGNoIHRvIGxvb2sgYXQuIFRoaXMgbWFrZXMgaXQgZWFzeSB0byBjb21iaW5lIGV4dHJhY3RvcnMuXG4gKiBjb21iaW5lRXh0cmFjdG9ycygpIGRvZXMgdGhlIHdvcmsgb2YgY29tYmluaW5nIHRoZW0sIGtlZXBpbmcgdHJhY2sgb2YgdGhlIGN1cnNvciB0aHJvdWdoIG11bHRpcGxlIGV4dHJhY3Rpb25zLlxuICogU29tZSBleHRyYWN0aW9ucyBhcmUgc3VwZXIgZHVtYiBhbmQgc2ltcGxlUGFyc2UgYW5kIGZyb21TdHJpbmdzIGhlbHAgRFJZIHRoZW0uXG4gKi9cblxuY29uc3QgaWFuYVJlZ2V4ID0gL1tBLVphLXpfKy1dezEsMjU2fSg/Ojo/XFwvW0EtWmEtejAtOV8rLV17MSwyNTZ9KD86XFwvW0EtWmEtejAtOV8rLV17MSwyNTZ9KT8pPy87XG5cbmZ1bmN0aW9uIGNvbWJpbmVSZWdleGVzKC4uLnJlZ2V4ZXMpIHtcbiAgY29uc3QgZnVsbCA9IHJlZ2V4ZXMucmVkdWNlKChmLCByKSA9PiBmICsgci5zb3VyY2UsIFwiXCIpO1xuICByZXR1cm4gUmVnRXhwKGBeJHtmdWxsfSRgKTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUV4dHJhY3RvcnMoLi4uZXh0cmFjdG9ycykge1xuICByZXR1cm4gKG0pID0+XG4gICAgZXh0cmFjdG9yc1xuICAgICAgLnJlZHVjZShcbiAgICAgICAgKFttZXJnZWRWYWxzLCBtZXJnZWRab25lLCBjdXJzb3JdLCBleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IFt2YWwsIHpvbmUsIG5leHRdID0gZXgobSwgY3Vyc29yKTtcbiAgICAgICAgICByZXR1cm4gW3sgLi4ubWVyZ2VkVmFscywgLi4udmFsIH0sIHpvbmUgfHwgbWVyZ2VkWm9uZSwgbmV4dF07XG4gICAgICAgIH0sXG4gICAgICAgIFt7fSwgbnVsbCwgMV1cbiAgICAgIClcbiAgICAgIC5zbGljZSgwLCAyKTtcbn1cblxuZnVuY3Rpb24gcGFyc2UocywgLi4ucGF0dGVybnMpIHtcbiAgaWYgKHMgPT0gbnVsbCkge1xuICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gIH1cblxuICBmb3IgKGNvbnN0IFtyZWdleCwgZXh0cmFjdG9yXSBvZiBwYXR0ZXJucykge1xuICAgIGNvbnN0IG0gPSByZWdleC5leGVjKHMpO1xuICAgIGlmIChtKSB7XG4gICAgICByZXR1cm4gZXh0cmFjdG9yKG0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW251bGwsIG51bGxdO1xufVxuXG5mdW5jdGlvbiBzaW1wbGVQYXJzZSguLi5rZXlzKSB7XG4gIHJldHVybiAobWF0Y2gsIGN1cnNvcikgPT4ge1xuICAgIGNvbnN0IHJldCA9IHt9O1xuICAgIGxldCBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJldFtrZXlzW2ldXSA9IHBhcnNlSW50ZWdlcihtYXRjaFtjdXJzb3IgKyBpXSk7XG4gICAgfVxuICAgIHJldHVybiBbcmV0LCBudWxsLCBjdXJzb3IgKyBpXTtcbiAgfTtcbn1cblxuLy8gSVNPIGFuZCBTUUwgcGFyc2luZ1xuY29uc3Qgb2Zmc2V0UmVnZXggPSAvKD86KFopfChbKy1dXFxkXFxkKSg/Ojo/KFxcZFxcZCkpPykvO1xuY29uc3QgaXNvRXh0ZW5kZWRab25lID0gYCg/OiR7b2Zmc2V0UmVnZXguc291cmNlfT8oPzpcXFxcWygke2lhbmFSZWdleC5zb3VyY2V9KVxcXFxdKT8pP2A7XG5jb25zdCBpc29UaW1lQmFzZVJlZ2V4ID0gLyhcXGRcXGQpKD86Oj8oXFxkXFxkKSg/Ojo/KFxcZFxcZCkoPzpbLixdKFxcZHsxLDMwfSkpPyk/KT8vO1xuY29uc3QgaXNvVGltZVJlZ2V4ID0gUmVnRXhwKGAke2lzb1RpbWVCYXNlUmVnZXguc291cmNlfSR7aXNvRXh0ZW5kZWRab25lfWApO1xuY29uc3QgaXNvVGltZUV4dGVuc2lvblJlZ2V4ID0gUmVnRXhwKGAoPzpUJHtpc29UaW1lUmVnZXguc291cmNlfSk/YCk7XG5jb25zdCBpc29ZbWRSZWdleCA9IC8oWystXVxcZHs2fXxcXGR7NH0pKD86LT8oXFxkXFxkKSg/Oi0/KFxcZFxcZCkpPyk/LztcbmNvbnN0IGlzb1dlZWtSZWdleCA9IC8oXFxkezR9KS0/VyhcXGRcXGQpKD86LT8oXFxkKSk/LztcbmNvbnN0IGlzb09yZGluYWxSZWdleCA9IC8oXFxkezR9KS0/KFxcZHszfSkvO1xuY29uc3QgZXh0cmFjdElTT1dlZWtEYXRhID0gc2ltcGxlUGFyc2UoXCJ3ZWVrWWVhclwiLCBcIndlZWtOdW1iZXJcIiwgXCJ3ZWVrRGF5XCIpO1xuY29uc3QgZXh0cmFjdElTT09yZGluYWxEYXRhID0gc2ltcGxlUGFyc2UoXCJ5ZWFyXCIsIFwib3JkaW5hbFwiKTtcbmNvbnN0IHNxbFltZFJlZ2V4ID0gLyhcXGR7NH0pLShcXGRcXGQpLShcXGRcXGQpLzsgLy8gZHVtYmVkLWRvd24gdmVyc2lvbiBvZiB0aGUgSVNPIG9uZVxuY29uc3Qgc3FsVGltZVJlZ2V4ID0gUmVnRXhwKFxuICBgJHtpc29UaW1lQmFzZVJlZ2V4LnNvdXJjZX0gPyg/OiR7b2Zmc2V0UmVnZXguc291cmNlfXwoJHtpYW5hUmVnZXguc291cmNlfSkpP2Bcbik7XG5jb25zdCBzcWxUaW1lRXh0ZW5zaW9uUmVnZXggPSBSZWdFeHAoYCg/OiAke3NxbFRpbWVSZWdleC5zb3VyY2V9KT9gKTtcblxuZnVuY3Rpb24gaW50KG1hdGNoLCBwb3MsIGZhbGxiYWNrKSB7XG4gIGNvbnN0IG0gPSBtYXRjaFtwb3NdO1xuICByZXR1cm4gaXNVbmRlZmluZWQobSkgPyBmYWxsYmFjayA6IHBhcnNlSW50ZWdlcihtKTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElTT1ltZChtYXRjaCwgY3Vyc29yKSB7XG4gIGNvbnN0IGl0ZW0gPSB7XG4gICAgeWVhcjogaW50KG1hdGNoLCBjdXJzb3IpLFxuICAgIG1vbnRoOiBpbnQobWF0Y2gsIGN1cnNvciArIDEsIDEpLFxuICAgIGRheTogaW50KG1hdGNoLCBjdXJzb3IgKyAyLCAxKSxcbiAgfTtcblxuICByZXR1cm4gW2l0ZW0sIG51bGwsIGN1cnNvciArIDNdO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0SVNPVGltZShtYXRjaCwgY3Vyc29yKSB7XG4gIGNvbnN0IGl0ZW0gPSB7XG4gICAgaG91cnM6IGludChtYXRjaCwgY3Vyc29yLCAwKSxcbiAgICBtaW51dGVzOiBpbnQobWF0Y2gsIGN1cnNvciArIDEsIDApLFxuICAgIHNlY29uZHM6IGludChtYXRjaCwgY3Vyc29yICsgMiwgMCksXG4gICAgbWlsbGlzZWNvbmRzOiBwYXJzZU1pbGxpcyhtYXRjaFtjdXJzb3IgKyAzXSksXG4gIH07XG5cbiAgcmV0dXJuIFtpdGVtLCBudWxsLCBjdXJzb3IgKyA0XTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElTT09mZnNldChtYXRjaCwgY3Vyc29yKSB7XG4gIGNvbnN0IGxvY2FsID0gIW1hdGNoW2N1cnNvcl0gJiYgIW1hdGNoW2N1cnNvciArIDFdLFxuICAgIGZ1bGxPZmZzZXQgPSBzaWduZWRPZmZzZXQobWF0Y2hbY3Vyc29yICsgMV0sIG1hdGNoW2N1cnNvciArIDJdKSxcbiAgICB6b25lID0gbG9jYWwgPyBudWxsIDogRml4ZWRPZmZzZXRab25lLmluc3RhbmNlKGZ1bGxPZmZzZXQpO1xuICByZXR1cm4gW3t9LCB6b25lLCBjdXJzb3IgKyAzXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElBTkFab25lKG1hdGNoLCBjdXJzb3IpIHtcbiAgY29uc3Qgem9uZSA9IG1hdGNoW2N1cnNvcl0gPyBJQU5BWm9uZS5jcmVhdGUobWF0Y2hbY3Vyc29yXSkgOiBudWxsO1xuICByZXR1cm4gW3t9LCB6b25lLCBjdXJzb3IgKyAxXTtcbn1cblxuLy8gSVNPIHRpbWUgcGFyc2luZ1xuXG5jb25zdCBpc29UaW1lT25seSA9IFJlZ0V4cChgXlQ/JHtpc29UaW1lQmFzZVJlZ2V4LnNvdXJjZX0kYCk7XG5cbi8vIElTTyBkdXJhdGlvbiBwYXJzaW5nXG5cbmNvbnN0IGlzb0R1cmF0aW9uID1cbiAgL14tP1AoPzooPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylZKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylNKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylXKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylEKT8oPzpUKD86KC0/XFxkezEsMjB9KD86XFwuXFxkezEsMjB9KT8pSCk/KD86KC0/XFxkezEsMjB9KD86XFwuXFxkezEsMjB9KT8pTSk/KD86KC0/XFxkezEsMjB9KSg/OlsuLF0oLT9cXGR7MSwyMH0pKT9TKT8pPykkLztcblxuZnVuY3Rpb24gZXh0cmFjdElTT0R1cmF0aW9uKG1hdGNoKSB7XG4gIGNvbnN0IFtzLCB5ZWFyU3RyLCBtb250aFN0ciwgd2Vla1N0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0ciwgbWlsbGlzZWNvbmRzU3RyXSA9XG4gICAgbWF0Y2g7XG5cbiAgY29uc3QgaGFzTmVnYXRpdmVQcmVmaXggPSBzWzBdID09PSBcIi1cIjtcbiAgY29uc3QgbmVnYXRpdmVTZWNvbmRzID0gc2Vjb25kU3RyICYmIHNlY29uZFN0clswXSA9PT0gXCItXCI7XG5cbiAgY29uc3QgbWF5YmVOZWdhdGUgPSAobnVtLCBmb3JjZSA9IGZhbHNlKSA9PlxuICAgIG51bSAhPT0gdW5kZWZpbmVkICYmIChmb3JjZSB8fCAobnVtICYmIGhhc05lZ2F0aXZlUHJlZml4KSkgPyAtbnVtIDogbnVtO1xuXG4gIHJldHVybiBbXG4gICAge1xuICAgICAgeWVhcnM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoeWVhclN0cikpLFxuICAgICAgbW9udGhzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKG1vbnRoU3RyKSksXG4gICAgICB3ZWVrczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyh3ZWVrU3RyKSksXG4gICAgICBkYXlzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKGRheVN0cikpLFxuICAgICAgaG91cnM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoaG91clN0cikpLFxuICAgICAgbWludXRlczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyhtaW51dGVTdHIpKSxcbiAgICAgIHNlY29uZHM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoc2Vjb25kU3RyKSwgc2Vjb25kU3RyID09PSBcIi0wXCIpLFxuICAgICAgbWlsbGlzZWNvbmRzOiBtYXliZU5lZ2F0ZShwYXJzZU1pbGxpcyhtaWxsaXNlY29uZHNTdHIpLCBuZWdhdGl2ZVNlY29uZHMpLFxuICAgIH0sXG4gIF07XG59XG5cbi8vIFRoZXNlIGFyZSBhIGxpdHRsZSBicmFpbmRlYWQuIEVEVCAqc2hvdWxkKiB0ZWxsIHVzIHRoYXQgd2UncmUgaW4sIHNheSwgQW1lcmljYS9OZXdfWW9ya1xuLy8gYW5kIG5vdCBqdXN0IHRoYXQgd2UncmUgaW4gLTI0MCAqcmlnaHQgbm93Ki4gQnV0IHNpbmNlIEkgZG9uJ3QgdGhpbmsgdGhlc2UgYXJlIHVzZWQgdGhhdCBvZnRlblxuLy8gSSdtIGp1c3QgZ29pbmcgdG8gaWdub3JlIHRoYXRcbmNvbnN0IG9ic09mZnNldHMgPSB7XG4gIEdNVDogMCxcbiAgRURUOiAtNCAqIDYwLFxuICBFU1Q6IC01ICogNjAsXG4gIENEVDogLTUgKiA2MCxcbiAgQ1NUOiAtNiAqIDYwLFxuICBNRFQ6IC02ICogNjAsXG4gIE1TVDogLTcgKiA2MCxcbiAgUERUOiAtNyAqIDYwLFxuICBQU1Q6IC04ICogNjAsXG59O1xuXG5mdW5jdGlvbiBmcm9tU3RyaW5ncyh3ZWVrZGF5U3RyLCB5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cikge1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgeWVhcjogeWVhclN0ci5sZW5ndGggPT09IDIgPyB1bnRydW5jYXRlWWVhcihwYXJzZUludGVnZXIoeWVhclN0cikpIDogcGFyc2VJbnRlZ2VyKHllYXJTdHIpLFxuICAgIG1vbnRoOiBFbmdsaXNoLm1vbnRoc1Nob3J0LmluZGV4T2YobW9udGhTdHIpICsgMSxcbiAgICBkYXk6IHBhcnNlSW50ZWdlcihkYXlTdHIpLFxuICAgIGhvdXI6IHBhcnNlSW50ZWdlcihob3VyU3RyKSxcbiAgICBtaW51dGU6IHBhcnNlSW50ZWdlcihtaW51dGVTdHIpLFxuICB9O1xuXG4gIGlmIChzZWNvbmRTdHIpIHJlc3VsdC5zZWNvbmQgPSBwYXJzZUludGVnZXIoc2Vjb25kU3RyKTtcbiAgaWYgKHdlZWtkYXlTdHIpIHtcbiAgICByZXN1bHQud2Vla2RheSA9XG4gICAgICB3ZWVrZGF5U3RyLmxlbmd0aCA+IDNcbiAgICAgICAgPyBFbmdsaXNoLndlZWtkYXlzTG9uZy5pbmRleE9mKHdlZWtkYXlTdHIpICsgMVxuICAgICAgICA6IEVuZ2xpc2gud2Vla2RheXNTaG9ydC5pbmRleE9mKHdlZWtkYXlTdHIpICsgMTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIFJGQyAyODIyLzUzMjJcbmNvbnN0IHJmYzI4MjIgPVxuICAvXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLFxccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoPzooWystXVxcZFxcZCkoXFxkXFxkKSkpJC87XG5cbmZ1bmN0aW9uIGV4dHJhY3RSRkMyODIyKG1hdGNoKSB7XG4gIGNvbnN0IFtcbiAgICAgICxcbiAgICAgIHdlZWtkYXlTdHIsXG4gICAgICBkYXlTdHIsXG4gICAgICBtb250aFN0cixcbiAgICAgIHllYXJTdHIsXG4gICAgICBob3VyU3RyLFxuICAgICAgbWludXRlU3RyLFxuICAgICAgc2Vjb25kU3RyLFxuICAgICAgb2JzT2Zmc2V0LFxuICAgICAgbWlsT2Zmc2V0LFxuICAgICAgb2ZmSG91clN0cixcbiAgICAgIG9mZk1pbnV0ZVN0cixcbiAgICBdID0gbWF0Y2gsXG4gICAgcmVzdWx0ID0gZnJvbVN0cmluZ3Mod2Vla2RheVN0ciwgeWVhclN0ciwgbW9udGhTdHIsIGRheVN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHIpO1xuXG4gIGxldCBvZmZzZXQ7XG4gIGlmIChvYnNPZmZzZXQpIHtcbiAgICBvZmZzZXQgPSBvYnNPZmZzZXRzW29ic09mZnNldF07XG4gIH0gZWxzZSBpZiAobWlsT2Zmc2V0KSB7XG4gICAgb2Zmc2V0ID0gMDtcbiAgfSBlbHNlIHtcbiAgICBvZmZzZXQgPSBzaWduZWRPZmZzZXQob2ZmSG91clN0ciwgb2ZmTWludXRlU3RyKTtcbiAgfVxuXG4gIHJldHVybiBbcmVzdWx0LCBuZXcgRml4ZWRPZmZzZXRab25lKG9mZnNldCldO1xufVxuXG5mdW5jdGlvbiBwcmVwcm9jZXNzUkZDMjgyMihzKSB7XG4gIC8vIFJlbW92ZSBjb21tZW50cyBhbmQgZm9sZGluZyB3aGl0ZXNwYWNlIGFuZCByZXBsYWNlIG11bHRpcGxlLXNwYWNlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG4gIHJldHVybiBzXG4gICAgLnJlcGxhY2UoL1xcKFteKCldKlxcKXxbXFxuXFx0XS9nLCBcIiBcIilcbiAgICAucmVwbGFjZSgvKFxcc1xccyspL2csIFwiIFwiKVxuICAgIC50cmltKCk7XG59XG5cbi8vIGh0dHAgZGF0ZVxuXG5jb25zdCByZmMxMTIzID1cbiAgICAvXihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLCAoXFxkXFxkKSAoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpIChcXGR7NH0pIChcXGRcXGQpOihcXGRcXGQpOihcXGRcXGQpIEdNVCQvLFxuICByZmM4NTAgPVxuICAgIC9eKE1vbmRheXxUdWVzZGF5fFdlZG5lc2RheXxUaHVyc2RheXxGcmlkYXl8U2F0dXJkYXl8U3VuZGF5KSwgKFxcZFxcZCktKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKS0oXFxkXFxkKSAoXFxkXFxkKTooXFxkXFxkKTooXFxkXFxkKSBHTVQkLyxcbiAgYXNjaWkgPVxuICAgIC9eKE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1bikgKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKSAoIFxcZHxcXGRcXGQpIChcXGRcXGQpOihcXGRcXGQpOihcXGRcXGQpIChcXGR7NH0pJC87XG5cbmZ1bmN0aW9uIGV4dHJhY3RSRkMxMTIzT3I4NTAobWF0Y2gpIHtcbiAgY29uc3QgWywgd2Vla2RheVN0ciwgZGF5U3RyLCBtb250aFN0ciwgeWVhclN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHJdID0gbWF0Y2gsXG4gICAgcmVzdWx0ID0gZnJvbVN0cmluZ3Mod2Vla2RheVN0ciwgeWVhclN0ciwgbW9udGhTdHIsIGRheVN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHIpO1xuICByZXR1cm4gW3Jlc3VsdCwgRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFTQ0lJKG1hdGNoKSB7XG4gIGNvbnN0IFssIHdlZWtkYXlTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyLCB5ZWFyU3RyXSA9IG1hdGNoLFxuICAgIHJlc3VsdCA9IGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKTtcbiAgcmV0dXJuIFtyZXN1bHQsIEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZV07XG59XG5cbmNvbnN0IGlzb1ltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29ZbWRSZWdleCwgaXNvVGltZUV4dGVuc2lvblJlZ2V4KTtcbmNvbnN0IGlzb1dlZWtXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoaXNvV2Vla1JlZ2V4LCBpc29UaW1lRXh0ZW5zaW9uUmVnZXgpO1xuY29uc3QgaXNvT3JkaW5hbFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29PcmRpbmFsUmVnZXgsIGlzb1RpbWVFeHRlbnNpb25SZWdleCk7XG5jb25zdCBpc29UaW1lQ29tYmluZWRSZWdleCA9IGNvbWJpbmVSZWdleGVzKGlzb1RpbWVSZWdleCk7XG5cbmNvbnN0IGV4dHJhY3RJU09ZbWRUaW1lQW5kT2Zmc2V0ID0gY29tYmluZUV4dHJhY3RvcnMoXG4gIGV4dHJhY3RJU09ZbWQsXG4gIGV4dHJhY3RJU09UaW1lLFxuICBleHRyYWN0SVNPT2Zmc2V0LFxuICBleHRyYWN0SUFOQVpvbmVcbik7XG5jb25zdCBleHRyYWN0SVNPV2Vla1RpbWVBbmRPZmZzZXQgPSBjb21iaW5lRXh0cmFjdG9ycyhcbiAgZXh0cmFjdElTT1dlZWtEYXRhLFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuY29uc3QgZXh0cmFjdElTT09yZGluYWxEYXRlQW5kVGltZSA9IGNvbWJpbmVFeHRyYWN0b3JzKFxuICBleHRyYWN0SVNPT3JkaW5hbERhdGEsXG4gIGV4dHJhY3RJU09UaW1lLFxuICBleHRyYWN0SVNPT2Zmc2V0LFxuICBleHRyYWN0SUFOQVpvbmVcbik7XG5jb25zdCBleHRyYWN0SVNPVGltZUFuZE9mZnNldCA9IGNvbWJpbmVFeHRyYWN0b3JzKFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuXG4vKlxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJU09EYXRlKHMpIHtcbiAgcmV0dXJuIHBhcnNlKFxuICAgIHMsXG4gICAgW2lzb1ltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXgsIGV4dHJhY3RJU09ZbWRUaW1lQW5kT2Zmc2V0XSxcbiAgICBbaXNvV2Vla1dpdGhUaW1lRXh0ZW5zaW9uUmVnZXgsIGV4dHJhY3RJU09XZWVrVGltZUFuZE9mZnNldF0sXG4gICAgW2lzb09yZGluYWxXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPT3JkaW5hbERhdGVBbmRUaW1lXSxcbiAgICBbaXNvVGltZUNvbWJpbmVkUmVnZXgsIGV4dHJhY3RJU09UaW1lQW5kT2Zmc2V0XVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSRkMyODIyRGF0ZShzKSB7XG4gIHJldHVybiBwYXJzZShwcmVwcm9jZXNzUkZDMjgyMihzKSwgW3JmYzI4MjIsIGV4dHJhY3RSRkMyODIyXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUhUVFBEYXRlKHMpIHtcbiAgcmV0dXJuIHBhcnNlKFxuICAgIHMsXG4gICAgW3JmYzExMjMsIGV4dHJhY3RSRkMxMTIzT3I4NTBdLFxuICAgIFtyZmM4NTAsIGV4dHJhY3RSRkMxMTIzT3I4NTBdLFxuICAgIFthc2NpaSwgZXh0cmFjdEFTQ0lJXVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJU09EdXJhdGlvbihzKSB7XG4gIHJldHVybiBwYXJzZShzLCBbaXNvRHVyYXRpb24sIGV4dHJhY3RJU09EdXJhdGlvbl0pO1xufVxuXG5jb25zdCBleHRyYWN0SVNPVGltZU9ubHkgPSBjb21iaW5lRXh0cmFjdG9ycyhleHRyYWN0SVNPVGltZSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUlTT1RpbWVPbmx5KHMpIHtcbiAgcmV0dXJuIHBhcnNlKHMsIFtpc29UaW1lT25seSwgZXh0cmFjdElTT1RpbWVPbmx5XSk7XG59XG5cbmNvbnN0IHNxbFltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhzcWxZbWRSZWdleCwgc3FsVGltZUV4dGVuc2lvblJlZ2V4KTtcbmNvbnN0IHNxbFRpbWVDb21iaW5lZFJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoc3FsVGltZVJlZ2V4KTtcblxuY29uc3QgZXh0cmFjdElTT1RpbWVPZmZzZXRBbmRJQU5BWm9uZSA9IGNvbWJpbmVFeHRyYWN0b3JzKFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTUUwocykge1xuICByZXR1cm4gcGFyc2UoXG4gICAgcyxcbiAgICBbc3FsWW1kV2l0aFRpbWVFeHRlbnNpb25SZWdleCwgZXh0cmFjdElTT1ltZFRpbWVBbmRPZmZzZXRdLFxuICAgIFtzcWxUaW1lQ29tYmluZWRSZWdleCwgZXh0cmFjdElTT1RpbWVPZmZzZXRBbmRJQU5BWm9uZV1cbiAgKTtcbn1cbiIsImltcG9ydCB7IHBhcnNlTWlsbGlzLCBpc1VuZGVmaW5lZCwgdW50cnVuY2F0ZVllYXIsIHNpZ25lZE9mZnNldCwgaGFzT3duUHJvcGVydHkgfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5pbXBvcnQgRm9ybWF0dGVyIGZyb20gXCIuL2Zvcm1hdHRlci5qc1wiO1xuaW1wb3J0IEZpeGVkT2Zmc2V0Wm9uZSBmcm9tIFwiLi4vem9uZXMvZml4ZWRPZmZzZXRab25lLmpzXCI7XG5pbXBvcnQgSUFOQVpvbmUgZnJvbSBcIi4uL3pvbmVzL0lBTkFab25lLmpzXCI7XG5pbXBvcnQgRGF0ZVRpbWUgZnJvbSBcIi4uL2RhdGV0aW1lLmpzXCI7XG5pbXBvcnQgeyBkaWdpdFJlZ2V4LCBwYXJzZURpZ2l0cyB9IGZyb20gXCIuL2RpZ2l0cy5qc1wiO1xuaW1wb3J0IHsgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzLmpzXCI7XG5cbmNvbnN0IE1JU1NJTkdfRlRQID0gXCJtaXNzaW5nIEludGwuRGF0ZVRpbWVGb3JtYXQuZm9ybWF0VG9QYXJ0cyBzdXBwb3J0XCI7XG5cbmZ1bmN0aW9uIGludFVuaXQocmVnZXgsIHBvc3QgPSAoaSkgPT4gaSkge1xuICByZXR1cm4geyByZWdleCwgZGVzZXI6IChbc10pID0+IHBvc3QocGFyc2VEaWdpdHMocykpIH07XG59XG5cbmNvbnN0IE5CU1AgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDE2MCk7XG5jb25zdCBzcGFjZU9yTkJTUCA9IGBbICR7TkJTUH1dYDtcbmNvbnN0IHNwYWNlT3JOQlNQUmVnRXhwID0gbmV3IFJlZ0V4cChzcGFjZU9yTkJTUCwgXCJnXCIpO1xuXG5mdW5jdGlvbiBmaXhMaXN0UmVnZXgocykge1xuICAvLyBtYWtlIGRvdHMgb3B0aW9uYWwgYW5kIGFsc28gbWFrZSB0aGVtIGxpdGVyYWxcbiAgLy8gbWFrZSBzcGFjZSBhbmQgbm9uIGJyZWFrYWJsZSBzcGFjZSBjaGFyYWN0ZXJzIGludGVyY2hhbmdlYWJsZVxuICByZXR1cm4gcy5yZXBsYWNlKC9cXC4vZywgXCJcXFxcLj9cIikucmVwbGFjZShzcGFjZU9yTkJTUFJlZ0V4cCwgc3BhY2VPck5CU1ApO1xufVxuXG5mdW5jdGlvbiBzdHJpcEluc2Vuc2l0aXZpdGllcyhzKSB7XG4gIHJldHVybiBzXG4gICAgLnJlcGxhY2UoL1xcLi9nLCBcIlwiKSAvLyBpZ25vcmUgZG90cyB0aGF0IHdlcmUgbWFkZSBvcHRpb25hbFxuICAgIC5yZXBsYWNlKHNwYWNlT3JOQlNQUmVnRXhwLCBcIiBcIikgLy8gaW50ZXJjaGFuZ2Ugc3BhY2UgYW5kIG5ic3BcbiAgICAudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gb25lT2Yoc3RyaW5ncywgc3RhcnRJbmRleCkge1xuICBpZiAoc3RyaW5ncyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICByZWdleDogUmVnRXhwKHN0cmluZ3MubWFwKGZpeExpc3RSZWdleCkuam9pbihcInxcIikpLFxuICAgICAgZGVzZXI6IChbc10pID0+XG4gICAgICAgIHN0cmluZ3MuZmluZEluZGV4KChpKSA9PiBzdHJpcEluc2Vuc2l0aXZpdGllcyhzKSA9PT0gc3RyaXBJbnNlbnNpdGl2aXRpZXMoaSkpICsgc3RhcnRJbmRleCxcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIG9mZnNldChyZWdleCwgZ3JvdXBzKSB7XG4gIHJldHVybiB7IHJlZ2V4LCBkZXNlcjogKFssIGgsIG1dKSA9PiBzaWduZWRPZmZzZXQoaCwgbSksIGdyb3VwcyB9O1xufVxuXG5mdW5jdGlvbiBzaW1wbGUocmVnZXgpIHtcbiAgcmV0dXJuIHsgcmVnZXgsIGRlc2VyOiAoW3NdKSA9PiBzIH07XG59XG5cbmZ1bmN0aW9uIGVzY2FwZVRva2VuKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bXFwtXFxbXFxde30oKSorPy4sXFxcXFxcXiR8I1xcc10vZywgXCJcXFxcJCZcIik7XG59XG5cbi8qKlxuICogQHBhcmFtIHRva2VuXG4gKiBAcGFyYW0ge0xvY2FsZX0gbG9jXG4gKi9cbmZ1bmN0aW9uIHVuaXRGb3JUb2tlbih0b2tlbiwgbG9jKSB7XG4gIGNvbnN0IG9uZSA9IGRpZ2l0UmVnZXgobG9jKSxcbiAgICB0d28gPSBkaWdpdFJlZ2V4KGxvYywgXCJ7Mn1cIiksXG4gICAgdGhyZWUgPSBkaWdpdFJlZ2V4KGxvYywgXCJ7M31cIiksXG4gICAgZm91ciA9IGRpZ2l0UmVnZXgobG9jLCBcIns0fVwiKSxcbiAgICBzaXggPSBkaWdpdFJlZ2V4KGxvYywgXCJ7Nn1cIiksXG4gICAgb25lT3JUd28gPSBkaWdpdFJlZ2V4KGxvYywgXCJ7MSwyfVwiKSxcbiAgICBvbmVUb1RocmVlID0gZGlnaXRSZWdleChsb2MsIFwiezEsM31cIiksXG4gICAgb25lVG9TaXggPSBkaWdpdFJlZ2V4KGxvYywgXCJ7MSw2fVwiKSxcbiAgICBvbmVUb05pbmUgPSBkaWdpdFJlZ2V4KGxvYywgXCJ7MSw5fVwiKSxcbiAgICB0d29Ub0ZvdXIgPSBkaWdpdFJlZ2V4KGxvYywgXCJ7Miw0fVwiKSxcbiAgICBmb3VyVG9TaXggPSBkaWdpdFJlZ2V4KGxvYywgXCJ7NCw2fVwiKSxcbiAgICBsaXRlcmFsID0gKHQpID0+ICh7IHJlZ2V4OiBSZWdFeHAoZXNjYXBlVG9rZW4odC52YWwpKSwgZGVzZXI6IChbc10pID0+IHMsIGxpdGVyYWw6IHRydWUgfSksXG4gICAgdW5pdGF0ZSA9ICh0KSA9PiB7XG4gICAgICBpZiAodG9rZW4ubGl0ZXJhbCkge1xuICAgICAgICByZXR1cm4gbGl0ZXJhbCh0KTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAodC52YWwpIHtcbiAgICAgICAgLy8gZXJhXG4gICAgICAgIGNhc2UgXCJHXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5lcmFzKFwic2hvcnRcIiksIDApO1xuICAgICAgICBjYXNlIFwiR0dcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLmVyYXMoXCJsb25nXCIpLCAwKTtcbiAgICAgICAgLy8geWVhcnNcbiAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVUb1NpeCk7XG4gICAgICAgIGNhc2UgXCJ5eVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3b1RvRm91ciwgdW50cnVuY2F0ZVllYXIpO1xuICAgICAgICBjYXNlIFwieXl5eVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KGZvdXIpO1xuICAgICAgICBjYXNlIFwieXl5eXlcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChmb3VyVG9TaXgpO1xuICAgICAgICBjYXNlIFwieXl5eXl5XCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQoc2l4KTtcbiAgICAgICAgLy8gbW9udGhzXG4gICAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwiTU1cIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICBjYXNlIFwiTU1NXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5tb250aHMoXCJzaG9ydFwiLCB0cnVlKSwgMSk7XG4gICAgICAgIGNhc2UgXCJNTU1NXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5tb250aHMoXCJsb25nXCIsIHRydWUpLCAxKTtcbiAgICAgICAgY2FzZSBcIkxcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJMTFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJMTExcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLm1vbnRocyhcInNob3J0XCIsIGZhbHNlKSwgMSk7XG4gICAgICAgIGNhc2UgXCJMTExMXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5tb250aHMoXCJsb25nXCIsIGZhbHNlKSwgMSk7XG4gICAgICAgIC8vIGRhdGVzXG4gICAgICAgIGNhc2UgXCJkXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwiZGRcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICAvLyBvcmRpbmFsc1xuICAgICAgICBjYXNlIFwib1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZVRvVGhyZWUpO1xuICAgICAgICBjYXNlIFwib29vXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodGhyZWUpO1xuICAgICAgICAvLyB0aW1lXG4gICAgICAgIGNhc2UgXCJISFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJIXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwiaGhcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICBjYXNlIFwiaFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcIm1tXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJxXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwicXFcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICBjYXNlIFwic1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcInNzXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVUb1RocmVlKTtcbiAgICAgICAgY2FzZSBcIlNTU1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHRocmVlKTtcbiAgICAgICAgY2FzZSBcInVcIjpcbiAgICAgICAgICByZXR1cm4gc2ltcGxlKG9uZVRvTmluZSk7XG4gICAgICAgIGNhc2UgXCJ1dVwiOlxuICAgICAgICAgIHJldHVybiBzaW1wbGUob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwidXV1XCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lKTtcbiAgICAgICAgLy8gbWVyaWRpZW1cbiAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLm1lcmlkaWVtcygpLCAwKTtcbiAgICAgICAgLy8gd2Vla1llYXIgKGspXG4gICAgICAgIGNhc2UgXCJra2trXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQoZm91cik7XG4gICAgICAgIGNhc2UgXCJra1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3b1RvRm91ciwgdW50cnVuY2F0ZVllYXIpO1xuICAgICAgICAvLyB3ZWVrTnVtYmVyIChXKVxuICAgICAgICBjYXNlIFwiV1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcIldXXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgLy8gd2Vla2RheXNcbiAgICAgICAgY2FzZSBcIkVcIjpcbiAgICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmUpO1xuICAgICAgICBjYXNlIFwiRUVFXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy53ZWVrZGF5cyhcInNob3J0XCIsIGZhbHNlKSwgMSk7XG4gICAgICAgIGNhc2UgXCJFRUVFXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy53ZWVrZGF5cyhcImxvbmdcIiwgZmFsc2UpLCAxKTtcbiAgICAgICAgY2FzZSBcImNjY1wiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2Mud2Vla2RheXMoXCJzaG9ydFwiLCB0cnVlKSwgMSk7XG4gICAgICAgIGNhc2UgXCJjY2NjXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy53ZWVrZGF5cyhcImxvbmdcIiwgdHJ1ZSksIDEpO1xuICAgICAgICAvLyBvZmZzZXQvem9uZVxuICAgICAgICBjYXNlIFwiWlwiOlxuICAgICAgICBjYXNlIFwiWlpcIjpcbiAgICAgICAgICByZXR1cm4gb2Zmc2V0KG5ldyBSZWdFeHAoYChbKy1dJHtvbmVPclR3by5zb3VyY2V9KSg/OjooJHt0d28uc291cmNlfSkpP2ApLCAyKTtcbiAgICAgICAgY2FzZSBcIlpaWlwiOlxuICAgICAgICAgIHJldHVybiBvZmZzZXQobmV3IFJlZ0V4cChgKFsrLV0ke29uZU9yVHdvLnNvdXJjZX0pKCR7dHdvLnNvdXJjZX0pP2ApLCAyKTtcbiAgICAgICAgLy8gd2UgZG9uJ3Qgc3VwcG9ydCBaWlpaIChQU1QpIG9yIFpaWlpaIChQYWNpZmljIFN0YW5kYXJkIFRpbWUpIGluIHBhcnNpbmdcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFueSB3YXkgdG8gZmlndXJlIG91dCB3aGF0IHRoZXkgYXJlXG4gICAgICAgIGNhc2UgXCJ6XCI6XG4gICAgICAgICAgcmV0dXJuIHNpbXBsZSgvW2Etel8rLS9dezEsMjU2fT8vaSk7XG4gICAgICAgIC8vIHRoaXMgc3BlY2lhbC1jYXNlIFwidG9rZW5cIiByZXByZXNlbnRzIGEgcGxhY2Ugd2hlcmUgYSBtYWNyby10b2tlbiBleHBhbmRlZCBpbnRvIGEgd2hpdGUtc3BhY2UgbGl0ZXJhbFxuICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UgYWNjZXB0IGFueSBub24tbmV3bGluZSB3aGl0ZS1zcGFjZVxuICAgICAgICBjYXNlIFwiIFwiOlxuICAgICAgICAgIHJldHVybiBzaW1wbGUoL1teXFxTXFxuXFxyXS8pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBsaXRlcmFsKHQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgY29uc3QgdW5pdCA9IHVuaXRhdGUodG9rZW4pIHx8IHtcbiAgICBpbnZhbGlkUmVhc29uOiBNSVNTSU5HX0ZUUCxcbiAgfTtcblxuICB1bml0LnRva2VuID0gdG9rZW47XG5cbiAgcmV0dXJuIHVuaXQ7XG59XG5cbmNvbnN0IHBhcnRUeXBlU3R5bGVUb1Rva2VuVmFsID0ge1xuICB5ZWFyOiB7XG4gICAgXCIyLWRpZ2l0XCI6IFwieXlcIixcbiAgICBudW1lcmljOiBcInl5eXl5XCIsXG4gIH0sXG4gIG1vbnRoOiB7XG4gICAgbnVtZXJpYzogXCJNXCIsXG4gICAgXCIyLWRpZ2l0XCI6IFwiTU1cIixcbiAgICBzaG9ydDogXCJNTU1cIixcbiAgICBsb25nOiBcIk1NTU1cIixcbiAgfSxcbiAgZGF5OiB7XG4gICAgbnVtZXJpYzogXCJkXCIsXG4gICAgXCIyLWRpZ2l0XCI6IFwiZGRcIixcbiAgfSxcbiAgd2Vla2RheToge1xuICAgIHNob3J0OiBcIkVFRVwiLFxuICAgIGxvbmc6IFwiRUVFRVwiLFxuICB9LFxuICBkYXlwZXJpb2Q6IFwiYVwiLFxuICBkYXlQZXJpb2Q6IFwiYVwiLFxuICBob3VyMTI6IHtcbiAgICBudW1lcmljOiBcImhcIixcbiAgICBcIjItZGlnaXRcIjogXCJoaFwiLFxuICB9LFxuICBob3VyMjQ6IHtcbiAgICBudW1lcmljOiBcIkhcIixcbiAgICBcIjItZGlnaXRcIjogXCJISFwiLFxuICB9LFxuICBtaW51dGU6IHtcbiAgICBudW1lcmljOiBcIm1cIixcbiAgICBcIjItZGlnaXRcIjogXCJtbVwiLFxuICB9LFxuICBzZWNvbmQ6IHtcbiAgICBudW1lcmljOiBcInNcIixcbiAgICBcIjItZGlnaXRcIjogXCJzc1wiLFxuICB9LFxuICB0aW1lWm9uZU5hbWU6IHtcbiAgICBsb25nOiBcIlpaWlpaXCIsXG4gICAgc2hvcnQ6IFwiWlpaXCIsXG4gIH0sXG59O1xuXG5mdW5jdGlvbiB0b2tlbkZvclBhcnQocGFydCwgZm9ybWF0T3B0cywgcmVzb2x2ZWRPcHRzKSB7XG4gIGNvbnN0IHsgdHlwZSwgdmFsdWUgfSA9IHBhcnQ7XG5cbiAgaWYgKHR5cGUgPT09IFwibGl0ZXJhbFwiKSB7XG4gICAgY29uc3QgaXNTcGFjZSA9IC9eXFxzKyQvLnRlc3QodmFsdWUpO1xuICAgIHJldHVybiB7XG4gICAgICBsaXRlcmFsOiAhaXNTcGFjZSxcbiAgICAgIHZhbDogaXNTcGFjZSA/IFwiIFwiIDogdmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHN0eWxlID0gZm9ybWF0T3B0c1t0eXBlXTtcblxuICAvLyBUaGUgdXNlciBtaWdodCBoYXZlIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGhvdXIxMiBvciBob3VyQ3ljbGVcbiAgLy8gaWYgc28sIHJlc3BlY3QgdGhlaXIgZGVjaXNpb25cbiAgLy8gaWYgbm90LCByZWZlciBiYWNrIHRvIHRoZSByZXNvbHZlZE9wdHMsIHdoaWNoIGFyZSBiYXNlZCBvbiB0aGUgbG9jYWxlXG4gIGxldCBhY3R1YWxUeXBlID0gdHlwZTtcbiAgaWYgKHR5cGUgPT09IFwiaG91clwiKSB7XG4gICAgaWYgKGZvcm1hdE9wdHMuaG91cjEyICE9IG51bGwpIHtcbiAgICAgIGFjdHVhbFR5cGUgPSBmb3JtYXRPcHRzLmhvdXIxMiA/IFwiaG91cjEyXCIgOiBcImhvdXIyNFwiO1xuICAgIH0gZWxzZSBpZiAoZm9ybWF0T3B0cy5ob3VyQ3ljbGUgIT0gbnVsbCkge1xuICAgICAgaWYgKGZvcm1hdE9wdHMuaG91ckN5Y2xlID09PSBcImgxMVwiIHx8IGZvcm1hdE9wdHMuaG91ckN5Y2xlID09PSBcImgxMlwiKSB7XG4gICAgICAgIGFjdHVhbFR5cGUgPSBcImhvdXIxMlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsVHlwZSA9IFwiaG91cjI0XCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRva2VucyBvbmx5IGRpZmZlcmVudGlhdGUgYmV0d2VlbiAyNCBob3VycyBvciBub3QsXG4gICAgICAvLyBzbyB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBob3VyQ3ljbGUgaGVyZSwgd2hpY2ggaXMgbGVzcyBzdXBwb3J0ZWQgYW55d2F5c1xuICAgICAgYWN0dWFsVHlwZSA9IHJlc29sdmVkT3B0cy5ob3VyMTIgPyBcImhvdXIxMlwiIDogXCJob3VyMjRcIjtcbiAgICB9XG4gIH1cbiAgbGV0IHZhbCA9IHBhcnRUeXBlU3R5bGVUb1Rva2VuVmFsW2FjdHVhbFR5cGVdO1xuICBpZiAodHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIikge1xuICAgIHZhbCA9IHZhbFtzdHlsZV07XG4gIH1cblxuICBpZiAodmFsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpdGVyYWw6IGZhbHNlLFxuICAgICAgdmFsLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBidWlsZFJlZ2V4KHVuaXRzKSB7XG4gIGNvbnN0IHJlID0gdW5pdHMubWFwKCh1KSA9PiB1LnJlZ2V4KS5yZWR1Y2UoKGYsIHIpID0+IGAke2Z9KCR7ci5zb3VyY2V9KWAsIFwiXCIpO1xuICByZXR1cm4gW2BeJHtyZX0kYCwgdW5pdHNdO1xufVxuXG5mdW5jdGlvbiBtYXRjaChpbnB1dCwgcmVnZXgsIGhhbmRsZXJzKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBpbnB1dC5tYXRjaChyZWdleCk7XG5cbiAgaWYgKG1hdGNoZXMpIHtcbiAgICBjb25zdCBhbGwgPSB7fTtcbiAgICBsZXQgbWF0Y2hJbmRleCA9IDE7XG4gICAgZm9yIChjb25zdCBpIGluIGhhbmRsZXJzKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkoaGFuZGxlcnMsIGkpKSB7XG4gICAgICAgIGNvbnN0IGggPSBoYW5kbGVyc1tpXSxcbiAgICAgICAgICBncm91cHMgPSBoLmdyb3VwcyA/IGguZ3JvdXBzICsgMSA6IDE7XG4gICAgICAgIGlmICghaC5saXRlcmFsICYmIGgudG9rZW4pIHtcbiAgICAgICAgICBhbGxbaC50b2tlbi52YWxbMF1dID0gaC5kZXNlcihtYXRjaGVzLnNsaWNlKG1hdGNoSW5kZXgsIG1hdGNoSW5kZXggKyBncm91cHMpKTtcbiAgICAgICAgfVxuICAgICAgICBtYXRjaEluZGV4ICs9IGdyb3VwcztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFttYXRjaGVzLCBhbGxdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbbWF0Y2hlcywge31dO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRhdGVUaW1lRnJvbU1hdGNoZXMobWF0Y2hlcykge1xuICBjb25zdCB0b0ZpZWxkID0gKHRva2VuKSA9PiB7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgcmV0dXJuIFwibWlsbGlzZWNvbmRcIjtcbiAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgIHJldHVybiBcInNlY29uZFwiO1xuICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgcmV0dXJuIFwibWludXRlXCI7XG4gICAgICBjYXNlIFwiaFwiOlxuICAgICAgY2FzZSBcIkhcIjpcbiAgICAgICAgcmV0dXJuIFwiaG91clwiO1xuICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgcmV0dXJuIFwiZGF5XCI7XG4gICAgICBjYXNlIFwib1wiOlxuICAgICAgICByZXR1cm4gXCJvcmRpbmFsXCI7XG4gICAgICBjYXNlIFwiTFwiOlxuICAgICAgY2FzZSBcIk1cIjpcbiAgICAgICAgcmV0dXJuIFwibW9udGhcIjtcbiAgICAgIGNhc2UgXCJ5XCI6XG4gICAgICAgIHJldHVybiBcInllYXJcIjtcbiAgICAgIGNhc2UgXCJFXCI6XG4gICAgICBjYXNlIFwiY1wiOlxuICAgICAgICByZXR1cm4gXCJ3ZWVrZGF5XCI7XG4gICAgICBjYXNlIFwiV1wiOlxuICAgICAgICByZXR1cm4gXCJ3ZWVrTnVtYmVyXCI7XG4gICAgICBjYXNlIFwia1wiOlxuICAgICAgICByZXR1cm4gXCJ3ZWVrWWVhclwiO1xuICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgcmV0dXJuIFwicXVhcnRlclwiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIGxldCB6b25lID0gbnVsbDtcbiAgbGV0IHNwZWNpZmljT2Zmc2V0O1xuICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMueikpIHtcbiAgICB6b25lID0gSUFOQVpvbmUuY3JlYXRlKG1hdGNoZXMueik7XG4gIH1cblxuICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMuWikpIHtcbiAgICBpZiAoIXpvbmUpIHtcbiAgICAgIHpvbmUgPSBuZXcgRml4ZWRPZmZzZXRab25lKG1hdGNoZXMuWik7XG4gICAgfVxuICAgIHNwZWNpZmljT2Zmc2V0ID0gbWF0Y2hlcy5aO1xuICB9XG5cbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLnEpKSB7XG4gICAgbWF0Y2hlcy5NID0gKG1hdGNoZXMucSAtIDEpICogMyArIDE7XG4gIH1cblxuICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMuaCkpIHtcbiAgICBpZiAobWF0Y2hlcy5oIDwgMTIgJiYgbWF0Y2hlcy5hID09PSAxKSB7XG4gICAgICBtYXRjaGVzLmggKz0gMTI7XG4gICAgfSBlbHNlIGlmIChtYXRjaGVzLmggPT09IDEyICYmIG1hdGNoZXMuYSA9PT0gMCkge1xuICAgICAgbWF0Y2hlcy5oID0gMDtcbiAgICB9XG4gIH1cblxuICBpZiAobWF0Y2hlcy5HID09PSAwICYmIG1hdGNoZXMueSkge1xuICAgIG1hdGNoZXMueSA9IC1tYXRjaGVzLnk7XG4gIH1cblxuICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMudSkpIHtcbiAgICBtYXRjaGVzLlMgPSBwYXJzZU1pbGxpcyhtYXRjaGVzLnUpO1xuICB9XG5cbiAgY29uc3QgdmFscyA9IE9iamVjdC5rZXlzKG1hdGNoZXMpLnJlZHVjZSgociwgaykgPT4ge1xuICAgIGNvbnN0IGYgPSB0b0ZpZWxkKGspO1xuICAgIGlmIChmKSB7XG4gICAgICByW2ZdID0gbWF0Y2hlc1trXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcjtcbiAgfSwge30pO1xuXG4gIHJldHVybiBbdmFscywgem9uZSwgc3BlY2lmaWNPZmZzZXRdO1xufVxuXG5sZXQgZHVtbXlEYXRlVGltZUNhY2hlID0gbnVsbDtcblxuZnVuY3Rpb24gZ2V0RHVtbXlEYXRlVGltZSgpIHtcbiAgaWYgKCFkdW1teURhdGVUaW1lQ2FjaGUpIHtcbiAgICBkdW1teURhdGVUaW1lQ2FjaGUgPSBEYXRlVGltZS5mcm9tTWlsbGlzKDE1NTU1NTU1NTU1NTUpO1xuICB9XG5cbiAgcmV0dXJuIGR1bW15RGF0ZVRpbWVDYWNoZTtcbn1cblxuZnVuY3Rpb24gbWF5YmVFeHBhbmRNYWNyb1Rva2VuKHRva2VuLCBsb2NhbGUpIHtcbiAgaWYgKHRva2VuLmxpdGVyYWwpIHtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBjb25zdCBmb3JtYXRPcHRzID0gRm9ybWF0dGVyLm1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHModG9rZW4udmFsKTtcbiAgY29uc3QgdG9rZW5zID0gZm9ybWF0T3B0c1RvVG9rZW5zKGZvcm1hdE9wdHMsIGxvY2FsZSk7XG5cbiAgaWYgKHRva2VucyA9PSBudWxsIHx8IHRva2Vucy5pbmNsdWRlcyh1bmRlZmluZWQpKSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZE1hY3JvVG9rZW5zKHRva2VucywgbG9jYWxlKSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0KC4uLnRva2Vucy5tYXAoKHQpID0+IG1heWJlRXhwYW5kTWFjcm9Ub2tlbih0LCBsb2NhbGUpKSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnQgY2xhc3MgVG9rZW5QYXJzZXIge1xuICBjb25zdHJ1Y3Rvcihsb2NhbGUsIGZvcm1hdCkge1xuICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xuICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuICAgIHRoaXMudG9rZW5zID0gZXhwYW5kTWFjcm9Ub2tlbnMoRm9ybWF0dGVyLnBhcnNlRm9ybWF0KGZvcm1hdCksIGxvY2FsZSk7XG4gICAgdGhpcy51bml0cyA9IHRoaXMudG9rZW5zLm1hcCgodCkgPT4gdW5pdEZvclRva2VuKHQsIGxvY2FsZSkpO1xuICAgIHRoaXMuZGlzcXVhbGlmeWluZ1VuaXQgPSB0aGlzLnVuaXRzLmZpbmQoKHQpID0+IHQuaW52YWxpZFJlYXNvbik7XG5cbiAgICBpZiAoIXRoaXMuZGlzcXVhbGlmeWluZ1VuaXQpIHtcbiAgICAgIGNvbnN0IFtyZWdleFN0cmluZywgaGFuZGxlcnNdID0gYnVpbGRSZWdleCh0aGlzLnVuaXRzKTtcbiAgICAgIHRoaXMucmVnZXggPSBSZWdFeHAocmVnZXhTdHJpbmcsIFwiaVwiKTtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBoYW5kbGVycztcbiAgICB9XG4gIH1cblxuICBleHBsYWluRnJvbVRva2VucyhpbnB1dCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4geyBpbnB1dCwgdG9rZW5zOiB0aGlzLnRva2VucywgaW52YWxpZFJlYXNvbjogdGhpcy5pbnZhbGlkUmVhc29uIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IFtyYXdNYXRjaGVzLCBtYXRjaGVzXSA9IG1hdGNoKGlucHV0LCB0aGlzLnJlZ2V4LCB0aGlzLmhhbmRsZXJzKSxcbiAgICAgICAgW3Jlc3VsdCwgem9uZSwgc3BlY2lmaWNPZmZzZXRdID0gbWF0Y2hlc1xuICAgICAgICAgID8gZGF0ZVRpbWVGcm9tTWF0Y2hlcyhtYXRjaGVzKVxuICAgICAgICAgIDogW251bGwsIG51bGwsIHVuZGVmaW5lZF07XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkobWF0Y2hlcywgXCJhXCIpICYmIGhhc093blByb3BlcnR5KG1hdGNoZXMsIFwiSFwiKSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoXG4gICAgICAgICAgXCJDYW4ndCBpbmNsdWRlIG1lcmlkaWVtIHdoZW4gc3BlY2lmeWluZyAyNC1ob3VyIGZvcm1hdFwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnB1dCxcbiAgICAgICAgdG9rZW5zOiB0aGlzLnRva2VucyxcbiAgICAgICAgcmVnZXg6IHRoaXMucmVnZXgsXG4gICAgICAgIHJhd01hdGNoZXMsXG4gICAgICAgIG1hdGNoZXMsXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgem9uZSxcbiAgICAgICAgc3BlY2lmaWNPZmZzZXQsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiAhdGhpcy5kaXNxdWFsaWZ5aW5nVW5pdDtcbiAgfVxuXG4gIGdldCBpbnZhbGlkUmVhc29uKCkge1xuICAgIHJldHVybiB0aGlzLmRpc3F1YWxpZnlpbmdVbml0ID8gdGhpcy5kaXNxdWFsaWZ5aW5nVW5pdC5pbnZhbGlkUmVhc29uIDogbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwbGFpbkZyb21Ub2tlbnMobG9jYWxlLCBpbnB1dCwgZm9ybWF0KSB7XG4gIGNvbnN0IHBhcnNlciA9IG5ldyBUb2tlblBhcnNlcihsb2NhbGUsIGZvcm1hdCk7XG4gIHJldHVybiBwYXJzZXIuZXhwbGFpbkZyb21Ub2tlbnMoaW5wdXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcm9tVG9rZW5zKGxvY2FsZSwgaW5wdXQsIGZvcm1hdCkge1xuICBjb25zdCB7IHJlc3VsdCwgem9uZSwgc3BlY2lmaWNPZmZzZXQsIGludmFsaWRSZWFzb24gfSA9IGV4cGxhaW5Gcm9tVG9rZW5zKGxvY2FsZSwgaW5wdXQsIGZvcm1hdCk7XG4gIHJldHVybiBbcmVzdWx0LCB6b25lLCBzcGVjaWZpY09mZnNldCwgaW52YWxpZFJlYXNvbl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRPcHRzVG9Ub2tlbnMoZm9ybWF0T3B0cywgbG9jYWxlKSB7XG4gIGlmICghZm9ybWF0T3B0cykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0dGVyID0gRm9ybWF0dGVyLmNyZWF0ZShsb2NhbGUsIGZvcm1hdE9wdHMpO1xuICBjb25zdCBkZiA9IGZvcm1hdHRlci5kdEZvcm1hdHRlcihnZXREdW1teURhdGVUaW1lKCkpO1xuICBjb25zdCBwYXJ0cyA9IGRmLmZvcm1hdFRvUGFydHMoKTtcbiAgY29uc3QgcmVzb2x2ZWRPcHRzID0gZGYucmVzb2x2ZWRPcHRpb25zKCk7XG4gIHJldHVybiBwYXJ0cy5tYXAoKHApID0+IHRva2VuRm9yUGFydChwLCBmb3JtYXRPcHRzLCByZXNvbHZlZE9wdHMpKTtcbn1cbiIsIi8qXG4gIFRoaXMgaXMganVzdCBhIGp1bmsgZHJhd2VyLCBjb250YWluaW5nIGFueXRoaW5nIHVzZWQgYWNyb3NzIG11bHRpcGxlIGNsYXNzZXMuXG4gIEJlY2F1c2UgTHV4b24gaXMgc21hbGwoaXNoKSwgdGhpcyBzaG91bGQgc3RheSBzbWFsbCBhbmQgd2Ugd29uJ3Qgd29ycnkgYWJvdXQgc3BsaXR0aW5nXG4gIGl0IHVwIGludG8sIHNheSwgcGFyc2luZ1V0aWwuanMgYW5kIGJhc2ljVXRpbC5qcyBhbmQgc28gb24uIEJ1dCB0aGV5IGFyZSBkaXZpZGVkIHVwIGJ5IGZlYXR1cmUgYXJlYS5cbiovXG5cbmltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy5qc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuLi9zZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgZGF5T2ZXZWVrLCBpc29XZWVrZGF5VG9Mb2NhbCB9IGZyb20gXCIuL2NvbnZlcnNpb25zLmpzXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG4vLyBUWVBFU1xuXG5leHBvcnQgZnVuY3Rpb24gaXNVbmRlZmluZWQobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09IFwidW5kZWZpbmVkXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlcihvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gXCJudW1iZXJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZWdlcihvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gXCJudW1iZXJcIiAmJiBvICUgMSA9PT0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSBcInN0cmluZ1wiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gXCJbb2JqZWN0IERhdGVdXCI7XG59XG5cbi8vIENBUEFCSUxJVElFU1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVsYXRpdmUoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBJbnRsICE9PSBcInVuZGVmaW5lZFwiICYmICEhSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQ7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0xvY2FsZVdlZWtJbmZvKCkge1xuICB0cnkge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgSW50bCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgISFJbnRsLkxvY2FsZSAmJlxuICAgICAgKFwid2Vla0luZm9cIiBpbiBJbnRsLkxvY2FsZS5wcm90b3R5cGUgfHwgXCJnZXRXZWVrSW5mb1wiIGluIEludGwuTG9jYWxlLnByb3RvdHlwZSlcbiAgICApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIE9CSkVDVFMgQU5EIEFSUkFZU1xuXG5leHBvcnQgZnVuY3Rpb24gbWF5YmVBcnJheSh0aGluZykge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGluZykgPyB0aGluZyA6IFt0aGluZ107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiZXN0QnkoYXJyLCBieSwgY29tcGFyZSkge1xuICBpZiAoYXJyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGJlc3QsIG5leHQpID0+IHtcbiAgICBjb25zdCBwYWlyID0gW2J5KG5leHQpLCBuZXh0XTtcbiAgICBpZiAoIWJlc3QpIHtcbiAgICAgIHJldHVybiBwYWlyO1xuICAgIH0gZWxzZSBpZiAoY29tcGFyZShiZXN0WzBdLCBwYWlyWzBdKSA9PT0gYmVzdFswXSkge1xuICAgICAgcmV0dXJuIGJlc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwYWlyO1xuICAgIH1cbiAgfSwgbnVsbClbMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwaWNrKG9iaiwga2V5cykge1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoKGEsIGspID0+IHtcbiAgICBhW2tdID0gb2JqW2tdO1xuICAgIHJldHVybiBhO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVXZWVrU2V0dGluZ3Moc2V0dGluZ3MpIHtcbiAgaWYgKHNldHRpbmdzID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc2V0dGluZ3MgIT09IFwib2JqZWN0XCIpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJXZWVrIHNldHRpbmdzIG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuICB9IGVsc2Uge1xuICAgIGlmIChcbiAgICAgICFpbnRlZ2VyQmV0d2VlbihzZXR0aW5ncy5maXJzdERheSwgMSwgNykgfHxcbiAgICAgICFpbnRlZ2VyQmV0d2VlbihzZXR0aW5ncy5taW5pbWFsRGF5cywgMSwgNykgfHxcbiAgICAgICFBcnJheS5pc0FycmF5KHNldHRpbmdzLndlZWtlbmQpIHx8XG4gICAgICBzZXR0aW5ncy53ZWVrZW5kLnNvbWUoKHYpID0+ICFpbnRlZ2VyQmV0d2Vlbih2LCAxLCA3KSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIkludmFsaWQgd2VlayBzZXR0aW5nc1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpcnN0RGF5OiBzZXR0aW5ncy5maXJzdERheSxcbiAgICAgIG1pbmltYWxEYXlzOiBzZXR0aW5ncy5taW5pbWFsRGF5cyxcbiAgICAgIHdlZWtlbmQ6IEFycmF5LmZyb20oc2V0dGluZ3Mud2Vla2VuZCksXG4gICAgfTtcbiAgfVxufVxuXG4vLyBOVU1CRVJTIEFORCBTVFJJTkdTXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlZ2VyQmV0d2Vlbih0aGluZywgYm90dG9tLCB0b3ApIHtcbiAgcmV0dXJuIGlzSW50ZWdlcih0aGluZykgJiYgdGhpbmcgPj0gYm90dG9tICYmIHRoaW5nIDw9IHRvcDtcbn1cblxuLy8geCAlIG4gYnV0IHRha2VzIHRoZSBzaWduIG9mIG4gaW5zdGVhZCBvZiB4XG5leHBvcnQgZnVuY3Rpb24gZmxvb3JNb2QoeCwgbikge1xuICByZXR1cm4geCAtIG4gKiBNYXRoLmZsb29yKHggLyBuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhZFN0YXJ0KGlucHV0LCBuID0gMikge1xuICBjb25zdCBpc05lZyA9IGlucHV0IDwgMDtcbiAgbGV0IHBhZGRlZDtcbiAgaWYgKGlzTmVnKSB7XG4gICAgcGFkZGVkID0gXCItXCIgKyAoXCJcIiArIC1pbnB1dCkucGFkU3RhcnQobiwgXCIwXCIpO1xuICB9IGVsc2Uge1xuICAgIHBhZGRlZCA9IChcIlwiICsgaW5wdXQpLnBhZFN0YXJ0KG4sIFwiMFwiKTtcbiAgfVxuICByZXR1cm4gcGFkZGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJbnRlZ2VyKHN0cmluZykge1xuICBpZiAoaXNVbmRlZmluZWQoc3RyaW5nKSB8fCBzdHJpbmcgPT09IG51bGwgfHwgc3RyaW5nID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nLCAxMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRmxvYXRpbmcoc3RyaW5nKSB7XG4gIGlmIChpc1VuZGVmaW5lZChzdHJpbmcpIHx8IHN0cmluZyA9PT0gbnVsbCB8fCBzdHJpbmcgPT09IFwiXCIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHN0cmluZyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWlsbGlzKGZyYWN0aW9uKSB7XG4gIC8vIFJldHVybiB1bmRlZmluZWQgKGluc3RlYWQgb2YgMCkgaW4gdGhlc2UgY2FzZXMsIHdoZXJlIGZyYWN0aW9uIGlzIG5vdCBzZXRcbiAgaWYgKGlzVW5kZWZpbmVkKGZyYWN0aW9uKSB8fCBmcmFjdGlvbiA9PT0gbnVsbCB8fCBmcmFjdGlvbiA9PT0gXCJcIikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZiA9IHBhcnNlRmxvYXQoXCIwLlwiICsgZnJhY3Rpb24pICogMTAwMDtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihmKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcm91bmRUbyhudW1iZXIsIGRpZ2l0cywgdG93YXJkWmVybyA9IGZhbHNlKSB7XG4gIGNvbnN0IGZhY3RvciA9IDEwICoqIGRpZ2l0cyxcbiAgICByb3VuZGVyID0gdG93YXJkWmVybyA/IE1hdGgudHJ1bmMgOiBNYXRoLnJvdW5kO1xuICByZXR1cm4gcm91bmRlcihudW1iZXIgKiBmYWN0b3IpIC8gZmFjdG9yO1xufVxuXG4vLyBEQVRFIEJBU0lDU1xuXG5leHBvcnQgZnVuY3Rpb24gaXNMZWFwWWVhcih5ZWFyKSB7XG4gIHJldHVybiB5ZWFyICUgNCA9PT0gMCAmJiAoeWVhciAlIDEwMCAhPT0gMCB8fCB5ZWFyICUgNDAwID09PSAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gIGNvbnN0IG1vZE1vbnRoID0gZmxvb3JNb2QobW9udGggLSAxLCAxMikgKyAxLFxuICAgIG1vZFllYXIgPSB5ZWFyICsgKG1vbnRoIC0gbW9kTW9udGgpIC8gMTI7XG5cbiAgaWYgKG1vZE1vbnRoID09PSAyKSB7XG4gICAgcmV0dXJuIGlzTGVhcFllYXIobW9kWWVhcikgPyAyOSA6IDI4O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbMzEsIG51bGwsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVttb2RNb250aCAtIDFdO1xuICB9XG59XG5cbi8vIGNvbnZlcnQgYSBjYWxlbmRhciBvYmplY3QgdG8gYSBsb2NhbCB0aW1lc3RhbXAgKGVwb2NoLCBidXQgd2l0aCB0aGUgb2Zmc2V0IGJha2VkIGluKVxuZXhwb3J0IGZ1bmN0aW9uIG9ialRvTG9jYWxUUyhvYmopIHtcbiAgbGV0IGQgPSBEYXRlLlVUQyhcbiAgICBvYmoueWVhcixcbiAgICBvYmoubW9udGggLSAxLFxuICAgIG9iai5kYXksXG4gICAgb2JqLmhvdXIsXG4gICAgb2JqLm1pbnV0ZSxcbiAgICBvYmouc2Vjb25kLFxuICAgIG9iai5taWxsaXNlY29uZFxuICApO1xuXG4gIC8vIGZvciBsZWdhY3kgcmVhc29ucywgeWVhcnMgYmV0d2VlbiAwIGFuZCA5OSBhcmUgaW50ZXJwcmV0ZWQgYXMgMTlYWDsgcmV2ZXJ0IHRoYXRcbiAgaWYgKG9iai55ZWFyIDwgMTAwICYmIG9iai55ZWFyID49IDApIHtcbiAgICBkID0gbmV3IERhdGUoZCk7XG4gICAgLy8gc2V0IHRoZSBtb250aCBhbmQgZGF5IGFnYWluLCB0aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHllYXIgMjAwMCBpcyBhIGxlYXAgeWVhciwgYnV0IHllYXIgMTAwIGlzIG5vdFxuICAgIC8vIHNvIGlmIG9iai55ZWFyIGlzIGluIDk5LCBidXQgb2JqLmRheSBtYWtlcyBpdCByb2xsIG92ZXIgaW50byB5ZWFyIDEwMCxcbiAgICAvLyB0aGUgY2FsY3VsYXRpb25zIGRvbmUgYnkgRGF0ZS5VVEMgYXJlIHVzaW5nIHllYXIgMjAwMCAtIHdoaWNoIGlzIGluY29ycmVjdFxuICAgIGQuc2V0VVRDRnVsbFllYXIob2JqLnllYXIsIG9iai5tb250aCAtIDEsIG9iai5kYXkpO1xuICB9XG4gIHJldHVybiArZDtcbn1cblxuLy8gYWRhcHRlZCBmcm9tIG1vbWVudC5qczogaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvYmxvYi8wMDBhYzE4MDBlNjIwZjc3MGY0ZWIzMWI1YWU5MDhmNjE2N2IwYWIyL3NyYy9saWIvdW5pdHMvd2Vlay1jYWxlbmRhci11dGlscy5qc1xuZnVuY3Rpb24gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIG1pbkRheXNJbkZpcnN0V2Vlaywgc3RhcnRPZldlZWspIHtcbiAgY29uc3QgZndkbHcgPSBpc29XZWVrZGF5VG9Mb2NhbChkYXlPZldlZWsoeWVhciwgMSwgbWluRGF5c0luRmlyc3RXZWVrKSwgc3RhcnRPZldlZWspO1xuICByZXR1cm4gLWZ3ZGx3ICsgbWluRGF5c0luRmlyc3RXZWVrIC0gMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdlZWtzSW5XZWVrWWVhcih3ZWVrWWVhciwgbWluRGF5c0luRmlyc3RXZWVrID0gNCwgc3RhcnRPZldlZWsgPSAxKSB7XG4gIGNvbnN0IHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQod2Vla1llYXIsIG1pbkRheXNJbkZpcnN0V2Vlaywgc3RhcnRPZldlZWspO1xuICBjb25zdCB3ZWVrT2Zmc2V0TmV4dCA9IGZpcnN0V2Vla09mZnNldCh3ZWVrWWVhciArIDEsIG1pbkRheXNJbkZpcnN0V2Vlaywgc3RhcnRPZldlZWspO1xuICByZXR1cm4gKGRheXNJblllYXIod2Vla1llYXIpIC0gd2Vla09mZnNldCArIHdlZWtPZmZzZXROZXh0KSAvIDc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyKSB7XG4gIGlmICh5ZWFyID4gOTkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHJldHVybiB5ZWFyID4gU2V0dGluZ3MudHdvRGlnaXRDdXRvZmZZZWFyID8gMTkwMCArIHllYXIgOiAyMDAwICsgeWVhcjtcbn1cblxuLy8gUEFSU0lOR1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2Vab25lSW5mbyh0cywgb2Zmc2V0Rm9ybWF0LCBsb2NhbGUsIHRpbWVab25lID0gbnVsbCkge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUodHMpLFxuICAgIGludGxPcHRzID0ge1xuICAgICAgaG91ckN5Y2xlOiBcImgyM1wiLFxuICAgICAgeWVhcjogXCJudW1lcmljXCIsXG4gICAgICBtb250aDogXCIyLWRpZ2l0XCIsXG4gICAgICBkYXk6IFwiMi1kaWdpdFwiLFxuICAgICAgaG91cjogXCIyLWRpZ2l0XCIsXG4gICAgICBtaW51dGU6IFwiMi1kaWdpdFwiLFxuICAgIH07XG5cbiAgaWYgKHRpbWVab25lKSB7XG4gICAgaW50bE9wdHMudGltZVpvbmUgPSB0aW1lWm9uZTtcbiAgfVxuXG4gIGNvbnN0IG1vZGlmaWVkID0geyB0aW1lWm9uZU5hbWU6IG9mZnNldEZvcm1hdCwgLi4uaW50bE9wdHMgfTtcblxuICBjb25zdCBwYXJzZWQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIG1vZGlmaWVkKVxuICAgIC5mb3JtYXRUb1BhcnRzKGRhdGUpXG4gICAgLmZpbmQoKG0pID0+IG0udHlwZS50b0xvd2VyQ2FzZSgpID09PSBcInRpbWV6b25lbmFtZVwiKTtcbiAgcmV0dXJuIHBhcnNlZCA/IHBhcnNlZC52YWx1ZSA6IG51bGw7XG59XG5cbi8vIHNpZ25lZE9mZnNldCgnLTUnLCAnMzAnKSAtPiAtMzMwXG5leHBvcnQgZnVuY3Rpb24gc2lnbmVkT2Zmc2V0KG9mZkhvdXJTdHIsIG9mZk1pbnV0ZVN0cikge1xuICBsZXQgb2ZmSG91ciA9IHBhcnNlSW50KG9mZkhvdXJTdHIsIDEwKTtcblxuICAvLyBkb24ndCB8fCB0aGlzIGJlY2F1c2Ugd2Ugd2FudCB0byBwcmVzZXJ2ZSAtMFxuICBpZiAoTnVtYmVyLmlzTmFOKG9mZkhvdXIpKSB7XG4gICAgb2ZmSG91ciA9IDA7XG4gIH1cblxuICBjb25zdCBvZmZNaW4gPSBwYXJzZUludChvZmZNaW51dGVTdHIsIDEwKSB8fCAwLFxuICAgIG9mZk1pblNpZ25lZCA9IG9mZkhvdXIgPCAwIHx8IE9iamVjdC5pcyhvZmZIb3VyLCAtMCkgPyAtb2ZmTWluIDogb2ZmTWluO1xuICByZXR1cm4gb2ZmSG91ciAqIDYwICsgb2ZmTWluU2lnbmVkO1xufVxuXG4vLyBDT0VSQ0lPTlxuXG5leHBvcnQgZnVuY3Rpb24gYXNOdW1iZXIodmFsdWUpIHtcbiAgY29uc3QgbnVtZXJpY1ZhbHVlID0gTnVtYmVyKHZhbHVlKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIgfHwgdmFsdWUgPT09IFwiXCIgfHwgTnVtYmVyLmlzTmFOKG51bWVyaWNWYWx1ZSkpXG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBJbnZhbGlkIHVuaXQgdmFsdWUgJHt2YWx1ZX1gKTtcbiAgcmV0dXJuIG51bWVyaWNWYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdChvYmosIG5vcm1hbGl6ZXIpIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHt9O1xuICBmb3IgKGNvbnN0IHUgaW4gb2JqKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KG9iaiwgdSkpIHtcbiAgICAgIGNvbnN0IHYgPSBvYmpbdV07XG4gICAgICBpZiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVyKHUpXSA9IGFzTnVtYmVyKHYpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvZmZzZXQncyB2YWx1ZSBhcyBhIHN0cmluZ1xuICogQHBhcmFtIHtudW1iZXJ9IHRzIC0gRXBvY2ggbWlsbGlzZWNvbmRzIGZvciB3aGljaCB0byBnZXQgdGhlIG9mZnNldFxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCAtIFdoYXQgc3R5bGUgb2Ygb2Zmc2V0IHRvIHJldHVybi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRzICduYXJyb3cnLCAnc2hvcnQnLCBvciAndGVjaGllJy4gUmV0dXJuaW5nICcrNicsICcrMDY6MDAnLCBvciAnKzA2MDAnIHJlc3BlY3RpdmVseVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0T2Zmc2V0KG9mZnNldCwgZm9ybWF0KSB7XG4gIGNvbnN0IGhvdXJzID0gTWF0aC50cnVuYyhNYXRoLmFicyhvZmZzZXQgLyA2MCkpLFxuICAgIG1pbnV0ZXMgPSBNYXRoLnRydW5jKE1hdGguYWJzKG9mZnNldCAlIDYwKSksXG4gICAgc2lnbiA9IG9mZnNldCA+PSAwID8gXCIrXCIgOiBcIi1cIjtcblxuICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgIGNhc2UgXCJzaG9ydFwiOlxuICAgICAgcmV0dXJuIGAke3NpZ259JHtwYWRTdGFydChob3VycywgMil9OiR7cGFkU3RhcnQobWludXRlcywgMil9YDtcbiAgICBjYXNlIFwibmFycm93XCI6XG4gICAgICByZXR1cm4gYCR7c2lnbn0ke2hvdXJzfSR7bWludXRlcyA+IDAgPyBgOiR7bWludXRlc31gIDogXCJcIn1gO1xuICAgIGNhc2UgXCJ0ZWNoaWVcIjpcbiAgICAgIHJldHVybiBgJHtzaWdufSR7cGFkU3RhcnQoaG91cnMsIDIpfSR7cGFkU3RhcnQobWludXRlcywgMil9YDtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFZhbHVlIGZvcm1hdCAke2Zvcm1hdH0gaXMgb3V0IG9mIHJhbmdlIGZvciBwcm9wZXJ0eSBmb3JtYXRgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGltZU9iamVjdChvYmopIHtcbiAgcmV0dXJuIHBpY2sob2JqLCBbXCJob3VyXCIsIFwibWludXRlXCIsIFwic2Vjb25kXCIsIFwibWlsbGlzZWNvbmRcIl0pO1xufVxuIiwiLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmltcG9ydCBab25lIGZyb20gXCIuLi96b25lLmpzXCI7XG5pbXBvcnQgSUFOQVpvbmUgZnJvbSBcIi4uL3pvbmVzL0lBTkFab25lLmpzXCI7XG5pbXBvcnQgRml4ZWRPZmZzZXRab25lIGZyb20gXCIuLi96b25lcy9maXhlZE9mZnNldFpvbmUuanNcIjtcbmltcG9ydCBJbnZhbGlkWm9uZSBmcm9tIFwiLi4vem9uZXMvaW52YWxpZFpvbmUuanNcIjtcblxuaW1wb3J0IHsgaXNVbmRlZmluZWQsIGlzU3RyaW5nLCBpc051bWJlciB9IGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCBTeXN0ZW1ab25lIGZyb20gXCIuLi96b25lcy9zeXN0ZW1ab25lLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVab25lKGlucHV0LCBkZWZhdWx0Wm9uZSkge1xuICBsZXQgb2Zmc2V0O1xuICBpZiAoaXNVbmRlZmluZWQoaW5wdXQpIHx8IGlucHV0ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRab25lO1xuICB9IGVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgWm9uZSkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfSBlbHNlIGlmIChpc1N0cmluZyhpbnB1dCkpIHtcbiAgICBjb25zdCBsb3dlcmVkID0gaW5wdXQudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG93ZXJlZCA9PT0gXCJkZWZhdWx0XCIpIHJldHVybiBkZWZhdWx0Wm9uZTtcbiAgICBlbHNlIGlmIChsb3dlcmVkID09PSBcImxvY2FsXCIgfHwgbG93ZXJlZCA9PT0gXCJzeXN0ZW1cIikgcmV0dXJuIFN5c3RlbVpvbmUuaW5zdGFuY2U7XG4gICAgZWxzZSBpZiAobG93ZXJlZCA9PT0gXCJ1dGNcIiB8fCBsb3dlcmVkID09PSBcImdtdFwiKSByZXR1cm4gRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlO1xuICAgIGVsc2UgcmV0dXJuIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcihsb3dlcmVkKSB8fCBJQU5BWm9uZS5jcmVhdGUoaW5wdXQpO1xuICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSkge1xuICAgIHJldHVybiBGaXhlZE9mZnNldFpvbmUuaW5zdGFuY2UoaW5wdXQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIiAmJiBcIm9mZnNldFwiIGluIGlucHV0ICYmIHR5cGVvZiBpbnB1dC5vZmZzZXQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIC8vIFRoaXMgaXMgZHVtYiwgYnV0IHRoZSBpbnN0YW5jZW9mIGNoZWNrIGFib3ZlIGRvZXNuJ3Qgc2VlbSB0byByZWFsbHkgd29ya1xuICAgIC8vIHNvIHdlJ3JlIGR1Y2sgY2hlY2tpbmcgaXRcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBJbnZhbGlkWm9uZShpbnB1dCk7XG4gIH1cbn1cbiIsImltcG9ydCBEYXRlVGltZSBmcm9tIFwiLi9kYXRldGltZS5qc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzLmpzXCI7XG5pbXBvcnQgTG9jYWxlIGZyb20gXCIuL2ltcGwvbG9jYWxlLmpzXCI7XG5pbXBvcnQgSUFOQVpvbmUgZnJvbSBcIi4vem9uZXMvSUFOQVpvbmUuanNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZVpvbmUgfSBmcm9tIFwiLi9pbXBsL3pvbmVVdGlsLmpzXCI7XG5cbmltcG9ydCB7IGhhc0xvY2FsZVdlZWtJbmZvLCBoYXNSZWxhdGl2ZSB9IGZyb20gXCIuL2ltcGwvdXRpbC5qc1wiO1xuXG4vKipcbiAqIFRoZSBJbmZvIGNsYXNzIGNvbnRhaW5zIHN0YXRpYyBtZXRob2RzIGZvciByZXRyaWV2aW5nIGdlbmVyYWwgdGltZSBhbmQgZGF0ZSByZWxhdGVkIGRhdGEuIEZvciBleGFtcGxlLCBpdCBoYXMgbWV0aG9kcyBmb3IgZmluZGluZyBvdXQgaWYgYSB0aW1lIHpvbmUgaGFzIGEgRFNULCBmb3IgbGlzdGluZyB0aGUgbW9udGhzIGluIGFueSBzdXBwb3J0ZWQgbG9jYWxlLCBhbmQgZm9yIGRpc2NvdmVyaW5nIHdoaWNoIG9mIEx1eG9uIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluZm8ge1xuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB6b25lIGNvbnRhaW5zIGEgRFNULlxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbem9uZT0nbG9jYWwnXSAtIFpvbmUgdG8gY2hlY2suIERlZmF1bHRzIHRvIHRoZSBlbnZpcm9ubWVudCdzIGxvY2FsIHpvbmUuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaGFzRFNUKHpvbmUgPSBTZXR0aW5ncy5kZWZhdWx0Wm9uZSkge1xuICAgIGNvbnN0IHByb3RvID0gRGF0ZVRpbWUubm93KCkuc2V0Wm9uZSh6b25lKS5zZXQoeyBtb250aDogMTIgfSk7XG5cbiAgICByZXR1cm4gIXpvbmUuaXNVbml2ZXJzYWwgJiYgcHJvdG8ub2Zmc2V0ICE9PSBwcm90by5zZXQoeyBtb250aDogNiB9KS5vZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB6b25lIGlzIGEgdmFsaWQgSUFOQSBzcGVjaWZpZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB6b25lIC0gWm9uZSB0byBjaGVja1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzVmFsaWRJQU5BWm9uZSh6b25lKSB7XG4gICAgcmV0dXJuIElBTkFab25lLmlzVmFsaWRab25lKHpvbmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBpbnB1dCBpbnRvIGEge0BsaW5rIFpvbmV9IGluc3RhbmNlLlxuICAgKlxuICAgKiAqIElmIGBpbnB1dGAgaXMgYWxyZWFkeSBhIFpvbmUgaW5zdGFuY2UsIGl0IGlzIHJldHVybmVkIHVuY2hhbmdlZC5cbiAgICogKiBJZiBgaW5wdXRgIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSB2YWxpZCB0aW1lIHpvbmUgbmFtZSwgYSBab25lIGluc3RhbmNlXG4gICAqICAgd2l0aCB0aGF0IG5hbWUgaXMgcmV0dXJuZWQuXG4gICAqICogSWYgYGlucHV0YCBpcyBhIHN0cmluZyB0aGF0IGRvZXNuJ3QgcmVmZXIgdG8gYSBrbm93biB0aW1lIHpvbmUsIGEgWm9uZVxuICAgKiAgIGluc3RhbmNlIHdpdGgge0BsaW5rIFpvbmUjaXNWYWxpZH0gPT0gZmFsc2UgaXMgcmV0dXJuZWQuXG4gICAqICogSWYgYGlucHV0IGlzIGEgbnVtYmVyLCBhIFpvbmUgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGZpeGVkIG9mZnNldFxuICAgKiAgIGluIG1pbnV0ZXMgaXMgcmV0dXJuZWQuXG4gICAqICogSWYgYGlucHV0YCBpcyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAsIHRoZSBkZWZhdWx0IHpvbmUgaXMgcmV0dXJuZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV8bnVtYmVyfSBbaW5wdXRdIC0gdGhlIHZhbHVlIHRvIGJlIGNvbnZlcnRlZFxuICAgKiBAcmV0dXJuIHtab25lfVxuICAgKi9cbiAgc3RhdGljIG5vcm1hbGl6ZVpvbmUoaW5wdXQpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplWm9uZShpbnB1dCwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgd2Vla2RheSBvbiB3aGljaCB0aGUgd2VlayBzdGFydHMgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBsb2NhbGUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2VcbiAgICogQHJldHVybnMge251bWJlcn0gdGhlIHN0YXJ0IG9mIHRoZSB3ZWVrLCAxIGZvciBNb25kYXkgdGhyb3VnaCA3IGZvciBTdW5kYXlcbiAgICovXG4gIHN0YXRpYyBnZXRTdGFydE9mV2Vlayh7IGxvY2FsZSA9IG51bGwsIGxvY09iaiA9IG51bGwgfSA9IHt9KSB7XG4gICAgcmV0dXJuIChsb2NPYmogfHwgTG9jYWxlLmNyZWF0ZShsb2NhbGUpKS5nZXRTdGFydE9mV2VlaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWluaW11bSBudW1iZXIgb2YgZGF5cyBuZWNlc3NhcnkgaW4gYSB3ZWVrIGJlZm9yZSBpdCBpcyBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIG5leHQgeWVhciBhY2NvcmRpbmdcbiAgICogdG8gdGhlIGdpdmVuIGxvY2FsZS5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgc3RhdGljIGdldE1pbmltdW1EYXlzSW5GaXJzdFdlZWsoeyBsb2NhbGUgPSBudWxsLCBsb2NPYmogPSBudWxsIH0gPSB7fSkge1xuICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlKSkuZ2V0TWluRGF5c0luRmlyc3RXZWVrKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB3ZWVrZGF5cywgd2hpY2ggYXJlIGNvbnNpZGVyZWQgdGhlIHdlZWtlbmQgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBsb2NhbGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119IGFuIGFycmF5IG9mIHdlZWtkYXlzLCAxIGZvciBNb25kYXkgdGhyb3VnaCA3IGZvciBTdW5kYXlcbiAgICovXG4gIHN0YXRpYyBnZXRXZWVrZW5kV2Vla2RheXMoeyBsb2NhbGUgPSBudWxsLCBsb2NPYmogPSBudWxsIH0gPSB7fSkge1xuICAgIC8vIGNvcHkgdGhlIGFycmF5LCBiZWNhdXNlIHdlIGNhY2hlIGl0IGludGVybmFsbHlcbiAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSkpLmdldFdlZWtlbmREYXlzKCkuc2xpY2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2Ygc3RhbmRhbG9uZSBtb250aCBuYW1lcy5cbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlVGltZUZvcm1hdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgbW9udGggcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJudW1lcmljXCIsIFwiMi1kaWdpdFwiLCBcIm5hcnJvd1wiLCBcInNob3J0XCIsIFwibG9uZ1wiXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtPW51bGxdIC0gdGhlIG51bWJlcmluZyBzeXN0ZW1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY09iaj1udWxsXSAtIGFuIGV4aXN0aW5nIGxvY2FsZSBvYmplY3QgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5vdXRwdXRDYWxlbmRhcj0nZ3JlZ29yeSddIC0gdGhlIGNhbGVuZGFyXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKClbMF0gLy89PiAnSmFudWFyeSdcbiAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ3Nob3J0JylbMF0gLy89PiAnSmFuJ1xuICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnbnVtZXJpYycpWzBdIC8vPT4gJzEnXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdzaG9ydCcsIHsgbG9jYWxlOiAnZnItQ0EnIH0gKVswXSAvLz0+ICdqYW52LidcbiAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ251bWVyaWMnLCB7IGxvY2FsZTogJ2FyJyB9KVswXSAvLz0+ICfZoSdcbiAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ2xvbmcnLCB7IG91dHB1dENhbGVuZGFyOiAnaXNsYW1pYycgfSlbMF0gLy89PiAnUmFiacq7IEknXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIG1vbnRocyhcbiAgICBsZW5ndGggPSBcImxvbmdcIixcbiAgICB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwsIGxvY09iaiA9IG51bGwsIG91dHB1dENhbGVuZGFyID0gXCJncmVnb3J5XCIgfSA9IHt9XG4gICkge1xuICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKSkubW9udGhzKGxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIGZvcm1hdCBtb250aCBuYW1lcy5cbiAgICogRm9ybWF0IG1vbnRocyBkaWZmZXIgZnJvbSBzdGFuZGFsb25lIG1vbnRocyBpbiB0aGF0IHRoZXkncmUgbWVhbnQgdG8gYXBwZWFyIG5leHQgdG8gdGhlIGRheSBvZiB0aGUgbW9udGguIEluIHNvbWUgbGFuZ3VhZ2VzLCB0aGF0XG4gICAqIGNoYW5nZXMgdGhlIHN0cmluZy5cbiAgICogU2VlIHtAbGluayBJbmZvI21vbnRoc31cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwibnVtZXJpY1wiLCBcIjItZGlnaXRcIiwgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXI9J2dyZWdvcnknXSAtIHRoZSBjYWxlbmRhclxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyBtb250aHNGb3JtYXQoXG4gICAgbGVuZ3RoID0gXCJsb25nXCIsXG4gICAgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsLCBsb2NPYmogPSBudWxsLCBvdXRwdXRDYWxlbmRhciA9IFwiZ3JlZ29yeVwiIH0gPSB7fVxuICApIHtcbiAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhcikpLm1vbnRocyhsZW5ndGgsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBvZiBzdGFuZGFsb25lIHdlZWsgbmFtZXMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIHdlZWtkYXkgcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5udW1iZXJpbmdTeXN0ZW09bnVsbF0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2VcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygpWzBdIC8vPT4gJ01vbmRheSdcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygnc2hvcnQnKVswXSAvLz0+ICdNb24nXG4gICAqIEBleGFtcGxlIEluZm8ud2Vla2RheXMoJ3Nob3J0JywgeyBsb2NhbGU6ICdmci1DQScgfSlbMF0gLy89PiAnbHVuLidcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygnc2hvcnQnLCB7IGxvY2FsZTogJ2FyJyB9KVswXSAvLz0+ICfYp9mE2KfYq9mG2YrZhidcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzdGF0aWMgd2Vla2RheXMobGVuZ3RoID0gXCJsb25nXCIsIHsgbG9jYWxlID0gbnVsbCwgbnVtYmVyaW5nU3lzdGVtID0gbnVsbCwgbG9jT2JqID0gbnVsbCB9ID0ge30pIHtcbiAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBudWxsKSkud2Vla2RheXMobGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgZm9ybWF0IHdlZWsgbmFtZXMuXG4gICAqIEZvcm1hdCB3ZWVrZGF5cyBkaWZmZXIgZnJvbSBzdGFuZGFsb25lIHdlZWtkYXlzIGluIHRoYXQgdGhleSdyZSBtZWFudCB0byBhcHBlYXIgbmV4dCB0byBtb3JlIGRhdGUgaW5mb3JtYXRpb24uIEluIHNvbWUgbGFuZ3VhZ2VzLCB0aGF0XG4gICAqIGNoYW5nZXMgdGhlIHN0cmluZy5cbiAgICogU2VlIHtAbGluayBJbmZvI3dlZWtkYXlzfVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgbW9udGggcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9bnVsbF0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyB3ZWVrZGF5c0Zvcm1hdChcbiAgICBsZW5ndGggPSBcImxvbmdcIixcbiAgICB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwsIGxvY09iaiA9IG51bGwgfSA9IHt9XG4gICkge1xuICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG51bGwpKS53ZWVrZGF5cyhsZW5ndGgsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBvZiBtZXJpZGllbXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZVxuICAgKiBAZXhhbXBsZSBJbmZvLm1lcmlkaWVtcygpIC8vPT4gWyAnQU0nLCAnUE0nIF1cbiAgICogQGV4YW1wbGUgSW5mby5tZXJpZGllbXMoeyBsb2NhbGU6ICdteScgfSkgLy89PiBbICfhgJThgLbhgJThgIDhgLonLCAn4YCK4YCU4YCxJyBdXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIG1lcmlkaWVtcyh7IGxvY2FsZSA9IG51bGwgfSA9IHt9KSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlKS5tZXJpZGllbXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgZXJhcywgc3VjaCBhcyBbJ0JDJywgJ0FEJ10uIFRoZSBsb2NhbGUgY2FuIGJlIHNwZWNpZmllZCwgYnV0IHRoZSBjYWxlbmRhciBzeXN0ZW0gaXMgYWx3YXlzIEdyZWdvcmlhbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J3Nob3J0J10gLSB0aGUgbGVuZ3RoIG9mIHRoZSBlcmEgcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJzaG9ydFwiIG9yIFwibG9uZ1wiLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQGV4YW1wbGUgSW5mby5lcmFzKCkgLy89PiBbICdCQycsICdBRCcgXVxuICAgKiBAZXhhbXBsZSBJbmZvLmVyYXMoJ2xvbmcnKSAvLz0+IFsgJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknIF1cbiAgICogQGV4YW1wbGUgSW5mby5lcmFzKCdsb25nJywgeyBsb2NhbGU6ICdmcicgfSkgLy89PiBbICdhdmFudCBKw6lzdXMtQ2hyaXN0JywgJ2FwcsOocyBKw6lzdXMtQ2hyaXN0JyBdXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIGVyYXMobGVuZ3RoID0gXCJzaG9ydFwiLCB7IGxvY2FsZSA9IG51bGwgfSA9IHt9KSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlLCBudWxsLCBcImdyZWdvcnlcIikuZXJhcyhsZW5ndGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc2V0IG9mIGF2YWlsYWJsZSBmZWF0dXJlcyBpbiB0aGlzIGVudmlyb25tZW50LlxuICAgKiBTb21lIGZlYXR1cmVzIG9mIEx1eG9uIGFyZSBub3QgYXZhaWxhYmxlIGluIGFsbCBlbnZpcm9ubWVudHMuIEZvciBleGFtcGxlLCBvbiBvbGRlciBicm93c2VycywgcmVsYXRpdmUgdGltZSBmb3JtYXR0aW5nIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZS4gVXNlIHRoaXMgZnVuY3Rpb24gdG8gZmlndXJlIG91dCBpZiB0aGF0J3MgdGhlIGNhc2UuXG4gICAqIEtleXM6XG4gICAqICogYHJlbGF0aXZlYDogd2hldGhlciB0aGlzIGVudmlyb25tZW50IHN1cHBvcnRzIHJlbGF0aXZlIHRpbWUgZm9ybWF0dGluZ1xuICAgKiAqIGBsb2NhbGVXZWVrYDogd2hldGhlciB0aGlzIGVudmlyb25tZW50IHN1cHBvcnRzIGRpZmZlcmVudCB3ZWVrZGF5cyBmb3IgdGhlIHN0YXJ0IG9mIHRoZSB3ZWVrIGJhc2VkIG9uIHRoZSBsb2NhbGVcbiAgICogQGV4YW1wbGUgSW5mby5mZWF0dXJlcygpIC8vPT4geyByZWxhdGl2ZTogZmFsc2UsIGxvY2FsZVdlZWs6IHRydWUgfVxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZmVhdHVyZXMoKSB7XG4gICAgcmV0dXJuIHsgcmVsYXRpdmU6IGhhc1JlbGF0aXZlKCksIGxvY2FsZVdlZWs6IGhhc0xvY2FsZVdlZWtJbmZvKCkgfTtcbiAgfVxufVxuIiwiaW1wb3J0IERhdGVUaW1lLCB7IGZyaWVuZGx5RGF0ZVRpbWUgfSBmcm9tIFwiLi9kYXRldGltZS5qc1wiO1xuaW1wb3J0IER1cmF0aW9uIGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBJbnZhbGlkSW50ZXJ2YWxFcnJvciB9IGZyb20gXCIuL2Vycm9ycy5qc1wiO1xuaW1wb3J0IEludmFsaWQgZnJvbSBcIi4vaW1wbC9pbnZhbGlkLmpzXCI7XG5pbXBvcnQgRm9ybWF0dGVyIGZyb20gXCIuL2ltcGwvZm9ybWF0dGVyLmpzXCI7XG5pbXBvcnQgKiBhcyBGb3JtYXRzIGZyb20gXCIuL2ltcGwvZm9ybWF0cy5qc1wiO1xuXG5jb25zdCBJTlZBTElEID0gXCJJbnZhbGlkIEludGVydmFsXCI7XG5cbi8vIGNoZWNrcyBpZiB0aGUgc3RhcnQgaXMgZXF1YWwgdG8gb3IgYmVmb3JlIHRoZSBlbmRcbmZ1bmN0aW9uIHZhbGlkYXRlU3RhcnRFbmQoc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0IHx8ICFzdGFydC5pc1ZhbGlkKSB7XG4gICAgcmV0dXJuIEludGVydmFsLmludmFsaWQoXCJtaXNzaW5nIG9yIGludmFsaWQgc3RhcnRcIik7XG4gIH0gZWxzZSBpZiAoIWVuZCB8fCAhZW5kLmlzVmFsaWQpIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwuaW52YWxpZChcIm1pc3Npbmcgb3IgaW52YWxpZCBlbmRcIik7XG4gIH0gZWxzZSBpZiAoZW5kIDwgc3RhcnQpIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwuaW52YWxpZChcbiAgICAgIFwiZW5kIGJlZm9yZSBzdGFydFwiLFxuICAgICAgYFRoZSBlbmQgb2YgYW4gaW50ZXJ2YWwgbXVzdCBiZSBhZnRlciBpdHMgc3RhcnQsIGJ1dCB5b3UgaGFkIHN0YXJ0PSR7c3RhcnQudG9JU08oKX0gYW5kIGVuZD0ke2VuZC50b0lTTygpfWBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQW4gSW50ZXJ2YWwgb2JqZWN0IHJlcHJlc2VudHMgYSBoYWxmLW9wZW4gaW50ZXJ2YWwgb2YgdGltZSwgd2hlcmUgZWFjaCBlbmRwb2ludCBpcyBhIHtAbGluayBEYXRlVGltZX0uIENvbmNlcHR1YWxseSwgaXQncyBhIGNvbnRhaW5lciBmb3IgdGhvc2UgdHdvIGVuZHBvaW50cywgYWNjb21wYW5pZWQgYnkgbWV0aG9kcyBmb3IgY3JlYXRpbmcsIHBhcnNpbmcsIGludGVycm9nYXRpbmcsIGNvbXBhcmluZywgdHJhbnNmb3JtaW5nLCBhbmQgZm9ybWF0dGluZyB0aGVtLlxuICpcbiAqIEhlcmUgaXMgYSBicmllZiBvdmVydmlldyBvZiB0aGUgbW9zdCBjb21tb25seSB1c2VkIG1ldGhvZHMgYW5kIGdldHRlcnMgaW4gSW50ZXJ2YWw6XG4gKlxuICogKiAqKkNyZWF0aW9uKiogVG8gY3JlYXRlIGFuIEludGVydmFsLCB1c2Uge0BsaW5rIEludGVydmFsLmZyb21EYXRlVGltZXN9LCB7QGxpbmsgSW50ZXJ2YWwuYWZ0ZXJ9LCB7QGxpbmsgSW50ZXJ2YWwuYmVmb3JlfSwgb3Ige0BsaW5rIEludGVydmFsLmZyb21JU099LlxuICogKiAqKkFjY2Vzc29ycyoqIFVzZSB7QGxpbmsgSW50ZXJ2YWwjc3RhcnR9IGFuZCB7QGxpbmsgSW50ZXJ2YWwjZW5kfSB0byBnZXQgdGhlIHN0YXJ0IGFuZCBlbmQuXG4gKiAqICoqSW50ZXJyb2dhdGlvbioqIFRvIGFuYWx5emUgdGhlIEludGVydmFsLCB1c2Uge0BsaW5rIEludGVydmFsI2NvdW50fSwge0BsaW5rIEludGVydmFsI2xlbmd0aH0sIHtAbGluayBJbnRlcnZhbCNoYXNTYW1lfSwge0BsaW5rIEludGVydmFsI2NvbnRhaW5zfSwge0BsaW5rIEludGVydmFsI2lzQWZ0ZXJ9LCBvciB7QGxpbmsgSW50ZXJ2YWwjaXNCZWZvcmV9LlxuICogKiAqKlRyYW5zZm9ybWF0aW9uKiogVG8gY3JlYXRlIG90aGVyIEludGVydmFscyBvdXQgb2YgdGhpcyBvbmUsIHVzZSB7QGxpbmsgSW50ZXJ2YWwjc2V0fSwge0BsaW5rIEludGVydmFsI3NwbGl0QXR9LCB7QGxpbmsgSW50ZXJ2YWwjc3BsaXRCeX0sIHtAbGluayBJbnRlcnZhbCNkaXZpZGVFcXVhbGx5fSwge0BsaW5rIEludGVydmFsLm1lcmdlfSwge0BsaW5rIEludGVydmFsLnhvcn0sIHtAbGluayBJbnRlcnZhbCN1bmlvbn0sIHtAbGluayBJbnRlcnZhbCNpbnRlcnNlY3Rpb259LCBvciB7QGxpbmsgSW50ZXJ2YWwjZGlmZmVyZW5jZX0uXG4gKiAqICoqQ29tcGFyaXNvbioqIFRvIGNvbXBhcmUgdGhpcyBJbnRlcnZhbCB0byBhbm90aGVyIG9uZSwgdXNlIHtAbGluayBJbnRlcnZhbCNlcXVhbHN9LCB7QGxpbmsgSW50ZXJ2YWwjb3ZlcmxhcHN9LCB7QGxpbmsgSW50ZXJ2YWwjYWJ1dHNTdGFydH0sIHtAbGluayBJbnRlcnZhbCNhYnV0c0VuZH0sIHtAbGluayBJbnRlcnZhbCNlbmd1bGZzfVxuICogKiAqKk91dHB1dCoqIFRvIGNvbnZlcnQgdGhlIEludGVydmFsIGludG8gb3RoZXIgcmVwcmVzZW50YXRpb25zLCBzZWUge0BsaW5rIEludGVydmFsI3RvU3RyaW5nfSwge0BsaW5rIEludGVydmFsI3RvTG9jYWxlU3RyaW5nfSwge0BsaW5rIEludGVydmFsI3RvSVNPfSwge0BsaW5rIEludGVydmFsI3RvSVNPRGF0ZX0sIHtAbGluayBJbnRlcnZhbCN0b0lTT1RpbWV9LCB7QGxpbmsgSW50ZXJ2YWwjdG9Gb3JtYXR9LCBhbmQge0BsaW5rIEludGVydmFsI3RvRHVyYXRpb259LlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnRlcnZhbCB7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5zID0gY29uZmlnLnN0YXJ0O1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZSA9IGNvbmZpZy5lbmQ7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pbnZhbGlkID0gY29uZmlnLmludmFsaWQgfHwgbnVsbDtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzTHV4b25JbnRlcnZhbCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGludmFsaWQgSW50ZXJ2YWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gLSBzaW1wbGUgc3RyaW5nIG9mIHdoeSB0aGlzIEludGVydmFsIGlzIGludmFsaWQuIFNob3VsZCBub3QgY29udGFpbiBwYXJhbWV0ZXJzIG9yIGFueXRoaW5nIGVsc2UgZGF0YS1kZXBlbmRlbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHBsYW5hdGlvbj1udWxsXSAtIGxvbmdlciBleHBsYW5hdGlvbiwgbWF5IGluY2x1ZGUgcGFyYW1ldGVycyBhbmQgb3RoZXIgdXNlZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvblxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIHN0YXRpYyBpbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24gPSBudWxsKSB7XG4gICAgaWYgKCFyZWFzb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgSW50ZXJ2YWwgaXMgaW52YWxpZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnZhbGlkID0gcmVhc29uIGluc3RhbmNlb2YgSW52YWxpZCA/IHJlYXNvbiA6IG5ldyBJbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pO1xuXG4gICAgaWYgKFNldHRpbmdzLnRocm93T25JbnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEludGVydmFsRXJyb3IoaW52YWxpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgSW50ZXJ2YWwoeyBpbnZhbGlkIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gSW50ZXJ2YWwgZnJvbSBhIHN0YXJ0IERhdGVUaW1lIGFuZCBhbiBlbmQgRGF0ZVRpbWUuIEluY2x1c2l2ZSBvZiB0aGUgc3RhcnQgYnV0IG5vdCB0aGUgZW5kLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfERhdGV8T2JqZWN0fSBzdGFydFxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfERhdGV8T2JqZWN0fSBlbmRcbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICBzdGF0aWMgZnJvbURhdGVUaW1lcyhzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgYnVpbHRTdGFydCA9IGZyaWVuZGx5RGF0ZVRpbWUoc3RhcnQpLFxuICAgICAgYnVpbHRFbmQgPSBmcmllbmRseURhdGVUaW1lKGVuZCk7XG5cbiAgICBjb25zdCB2YWxpZGF0ZUVycm9yID0gdmFsaWRhdGVTdGFydEVuZChidWlsdFN0YXJ0LCBidWlsdEVuZCk7XG5cbiAgICBpZiAodmFsaWRhdGVFcnJvciA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbmV3IEludGVydmFsKHtcbiAgICAgICAgc3RhcnQ6IGJ1aWx0U3RhcnQsXG4gICAgICAgIGVuZDogYnVpbHRFbmQsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHZhbGlkYXRlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGEgc3RhcnQgRGF0ZVRpbWUgYW5kIGEgRHVyYXRpb24gdG8gZXh0ZW5kIHRvLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfERhdGV8T2JqZWN0fSBzdGFydFxuICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gdGhlIGxlbmd0aCBvZiB0aGUgSW50ZXJ2YWwuXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgc3RhdGljIGFmdGVyKHN0YXJ0LCBkdXJhdGlvbikge1xuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLFxuICAgICAgZHQgPSBmcmllbmRseURhdGVUaW1lKHN0YXJ0KTtcbiAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdCwgZHQucGx1cyhkdXIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gSW50ZXJ2YWwgZnJvbSBhbiBlbmQgRGF0ZVRpbWUgYW5kIGEgRHVyYXRpb24gdG8gZXh0ZW5kIGJhY2t3YXJkcyB0by5cbiAgICogQHBhcmFtIHtEYXRlVGltZXxEYXRlfE9iamVjdH0gZW5kXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSB0aGUgbGVuZ3RoIG9mIHRoZSBJbnRlcnZhbC5cbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICBzdGF0aWMgYmVmb3JlKGVuZCwgZHVyYXRpb24pIHtcbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKSxcbiAgICAgIGR0ID0gZnJpZW5kbHlEYXRlVGltZShlbmQpO1xuICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0Lm1pbnVzKGR1ciksIGR0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gSW50ZXJ2YWwgZnJvbSBhbiBJU08gODYwMSBzdHJpbmcuXG4gICAqIEFjY2VwdHMgYDxzdGFydD4vPGVuZD5gLCBgPHN0YXJ0Pi88ZHVyYXRpb24+YCwgYW5kIGA8ZHVyYXRpb24+LzxlbmQ+YCBmb3JtYXRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBJU08gc3RyaW5nIHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBvcHRpb25zIHRvIHBhc3Mge0BsaW5rIERhdGVUaW1lI2Zyb21JU099IGFuZCBvcHRpb25hbGx5IHtAbGluayBEdXJhdGlvbiNmcm9tSVNPfVxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgc3RhdGljIGZyb21JU08odGV4dCwgb3B0cykge1xuICAgIGNvbnN0IFtzLCBlXSA9ICh0ZXh0IHx8IFwiXCIpLnNwbGl0KFwiL1wiLCAyKTtcbiAgICBpZiAocyAmJiBlKSB7XG4gICAgICBsZXQgc3RhcnQsIHN0YXJ0SXNWYWxpZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0YXJ0ID0gRGF0ZVRpbWUuZnJvbUlTTyhzLCBvcHRzKTtcbiAgICAgICAgc3RhcnRJc1ZhbGlkID0gc3RhcnQuaXNWYWxpZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc3RhcnRJc1ZhbGlkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGxldCBlbmQsIGVuZElzVmFsaWQ7XG4gICAgICB0cnkge1xuICAgICAgICBlbmQgPSBEYXRlVGltZS5mcm9tSVNPKGUsIG9wdHMpO1xuICAgICAgICBlbmRJc1ZhbGlkID0gZW5kLmlzVmFsaWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGVuZElzVmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXJ0SXNWYWxpZCAmJiBlbmRJc1ZhbGlkKSB7XG4gICAgICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHN0YXJ0LCBlbmQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhcnRJc1ZhbGlkKSB7XG4gICAgICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21JU08oZSwgb3B0cyk7XG4gICAgICAgIGlmIChkdXIuaXNWYWxpZCkge1xuICAgICAgICAgIHJldHVybiBJbnRlcnZhbC5hZnRlcihzdGFydCwgZHVyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChlbmRJc1ZhbGlkKSB7XG4gICAgICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21JU08ocywgb3B0cyk7XG4gICAgICAgIGlmIChkdXIuaXNWYWxpZCkge1xuICAgICAgICAgIHJldHVybiBJbnRlcnZhbC5iZWZvcmUoZW5kLCBkdXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJbnRlcnZhbC5pbnZhbGlkKFwidW5wYXJzYWJsZVwiLCBgdGhlIGlucHV0IFwiJHt0ZXh0fVwiIGNhbid0IGJlIHBhcnNlZCBhcyBJU08gODYwMWApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIG9iamVjdCBpcyBhbiBJbnRlcnZhbC4gV29ya3MgYWNyb3NzIGNvbnRleHQgYm91bmRhcmllc1xuICAgKiBAcGFyYW0ge29iamVjdH0gb1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzSW50ZXJ2YWwobykge1xuICAgIHJldHVybiAobyAmJiBvLmlzTHV4b25JbnRlcnZhbCkgfHwgZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc3RhcnQgb2YgdGhlIEludGVydmFsXG4gICAqIEB0eXBlIHtEYXRlVGltZX1cbiAgICovXG4gIGdldCBzdGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5zIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBlbmQgb2YgdGhlIEludGVydmFsXG4gICAqIEB0eXBlIHtEYXRlVGltZX1cbiAgICovXG4gIGdldCBlbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuZSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBlbmQgaXMgYXQgbGVhc3QgaXRzIHN0YXJ0LCBtZWFuaW5nIHRoYXQgdGhlIEludGVydmFsIGlzbid0ICdiYWNrd2FyZHMnLlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWRSZWFzb24gPT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBlcnJvciBjb2RlIGlmIHRoaXMgSW50ZXJ2YWwgaXMgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgSW50ZXJ2YWwgaXMgdmFsaWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBpbnZhbGlkUmVhc29uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQucmVhc29uIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSB0aGlzIEludGVydmFsIGJlY2FtZSBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBJbnRlcnZhbCBpcyB2YWxpZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGludmFsaWRFeHBsYW5hdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLmV4cGxhbmF0aW9uIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIEludGVydmFsIGluIHRoZSBzcGVjaWZpZWQgdW5pdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSB0aGUgdW5pdCAoc3VjaCBhcyAnaG91cnMnIG9yICdkYXlzJykgdG8gcmV0dXJuIHRoZSBsZW5ndGggaW4uXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGxlbmd0aCh1bml0ID0gXCJtaWxsaXNlY29uZHNcIikge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnRvRHVyYXRpb24oLi4uW3VuaXRdKS5nZXQodW5pdCkgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY291bnQgb2YgbWludXRlcywgaG91cnMsIGRheXMsIG1vbnRocywgb3IgeWVhcnMgaW5jbHVkZWQgaW4gdGhlIEludGVydmFsLCBldmVuIGluIHBhcnQuXG4gICAqIFVubGlrZSB7QGxpbmsgSW50ZXJ2YWwjbGVuZ3RofSB0aGlzIGNvdW50cyBzZWN0aW9ucyBvZiB0aGUgY2FsZW5kYXIsIG5vdCBwZXJpb2RzIG9mIHRpbWUsIGUuZy4gc3BlY2lmeWluZyAnZGF5J1xuICAgKiBhc2tzICd3aGF0IGRhdGVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzIGludGVydmFsPycsIG5vdCAnaG93IG1hbnkgZGF5cyBsb25nIGlzIHRoaXMgaW50ZXJ2YWw/J1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW3VuaXQ9J21pbGxpc2Vjb25kcyddIC0gdGhlIHVuaXQgb2YgdGltZSB0byBjb3VudC5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMudXNlTG9jYWxlV2Vla3M9ZmFsc2VdIC0gSWYgdHJ1ZSwgdXNlIHdlZWtzIGJhc2VkIG9uIHRoZSBsb2NhbGUsIGkuZS4gdXNlIHRoZSBsb2NhbGUtZGVwZW5kZW50IHN0YXJ0IG9mIHRoZSB3ZWVrOyB0aGlzIG9wZXJhdGlvbiB3aWxsIGFsd2F5cyB1c2UgdGhlIGxvY2FsZSBvZiB0aGUgc3RhcnQgRGF0ZVRpbWVcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgY291bnQodW5pdCA9IFwibWlsbGlzZWNvbmRzXCIsIG9wdHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIE5hTjtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMuc3RhcnQuc3RhcnRPZih1bml0LCBvcHRzKTtcbiAgICBsZXQgZW5kO1xuICAgIGlmIChvcHRzPy51c2VMb2NhbGVXZWVrcykge1xuICAgICAgZW5kID0gdGhpcy5lbmQucmVjb25maWd1cmUoeyBsb2NhbGU6IHN0YXJ0LmxvY2FsZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kID0gdGhpcy5lbmQ7XG4gICAgfVxuICAgIGVuZCA9IGVuZC5zdGFydE9mKHVuaXQsIG9wdHMpO1xuICAgIHJldHVybiBNYXRoLmZsb29yKGVuZC5kaWZmKHN0YXJ0LCB1bml0KS5nZXQodW5pdCkpICsgKGVuZC52YWx1ZU9mKCkgIT09IHRoaXMuZW5kLnZhbHVlT2YoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBzdGFydCBhbmQgZW5kIGFyZSBib3RoIGluIHRoZSBzYW1lIHVuaXQgb2YgdGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY2hlY2sgc2FtZW5lc3Mgb25cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc1NhbWUodW5pdCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmlzRW1wdHkoKSB8fCB0aGlzLmUubWludXMoMSkuaGFzU2FtZSh0aGlzLnMsIHVuaXQpIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBoYXMgdGhlIHNhbWUgc3RhcnQgYW5kIGVuZCBEYXRlVGltZXMuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnMudmFsdWVPZigpID09PSB0aGlzLmUudmFsdWVPZigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBzdGFydCBpcyBhZnRlciB0aGUgc3BlY2lmaWVkIERhdGVUaW1lLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBkYXRlVGltZVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgaXNBZnRlcihkYXRlVGltZSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucyA+IGRhdGVUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBlbmQgaXMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IGRhdGVUaW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBpc0JlZm9yZShkYXRlVGltZSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuZSA8PSBkYXRlVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IGRhdGVUaW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBjb250YWlucyhkYXRlVGltZSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucyA8PSBkYXRlVGltZSAmJiB0aGlzLmUgPiBkYXRlVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldHNcIiB0aGUgc3RhcnQgYW5kL29yIGVuZCBkYXRlcy4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIEludGVydmFsLlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIC0gdGhlIHZhbHVlcyB0byBzZXRcbiAgICogQHBhcmFtIHtEYXRlVGltZX0gdmFsdWVzLnN0YXJ0IC0gdGhlIHN0YXJ0aW5nIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IHZhbHVlcy5lbmQgLSB0aGUgZW5kaW5nIERhdGVUaW1lXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgc2V0KHsgc3RhcnQsIGVuZCB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnQgfHwgdGhpcy5zLCBlbmQgfHwgdGhpcy5lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCB0aGlzIEludGVydmFsIGF0IGVhY2ggb2YgdGhlIHNwZWNpZmllZCBEYXRlVGltZXNcbiAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIHVuaXQgb2YgdGltZSB0byBjb3VudC5cbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzcGxpdEF0KC4uLmRhdGVUaW1lcykge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gW107XG4gICAgY29uc3Qgc29ydGVkID0gZGF0ZVRpbWVzXG4gICAgICAgIC5tYXAoZnJpZW5kbHlEYXRlVGltZSlcbiAgICAgICAgLmZpbHRlcigoZCkgPT4gdGhpcy5jb250YWlucyhkKSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEudG9NaWxsaXMoKSAtIGIudG9NaWxsaXMoKSksXG4gICAgICByZXN1bHRzID0gW107XG4gICAgbGV0IHsgcyB9ID0gdGhpcyxcbiAgICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKHMgPCB0aGlzLmUpIHtcbiAgICAgIGNvbnN0IGFkZGVkID0gc29ydGVkW2ldIHx8IHRoaXMuZSxcbiAgICAgICAgbmV4dCA9ICthZGRlZCA+ICt0aGlzLmUgPyB0aGlzLmUgOiBhZGRlZDtcbiAgICAgIHJlc3VsdHMucHVzaChJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHMsIG5leHQpKTtcbiAgICAgIHMgPSBuZXh0O1xuICAgICAgaSArPSAxO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0IHRoaXMgSW50ZXJ2YWwgaW50byBzbWFsbGVyIEludGVydmFscywgZWFjaCBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aC5cbiAgICogTGVmdCBvdmVyIHRpbWUgaXMgZ3JvdXBlZCBpbnRvIGEgc21hbGxlciBpbnRlcnZhbFxuICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGxlbmd0aCBvZiBlYWNoIHJlc3VsdGluZyBpbnRlcnZhbC5cbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzcGxpdEJ5KGR1cmF0aW9uKSB7XG4gICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbik7XG5cbiAgICBpZiAoIXRoaXMuaXNWYWxpZCB8fCAhZHVyLmlzVmFsaWQgfHwgZHVyLmFzKFwibWlsbGlzZWNvbmRzXCIpID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgbGV0IHsgcyB9ID0gdGhpcyxcbiAgICAgIGlkeCA9IDEsXG4gICAgICBuZXh0O1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgIHdoaWxlIChzIDwgdGhpcy5lKSB7XG4gICAgICBjb25zdCBhZGRlZCA9IHRoaXMuc3RhcnQucGx1cyhkdXIubWFwVW5pdHMoKHgpID0+IHggKiBpZHgpKTtcbiAgICAgIG5leHQgPSArYWRkZWQgPiArdGhpcy5lID8gdGhpcy5lIDogYWRkZWQ7XG4gICAgICByZXN1bHRzLnB1c2goSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzLCBuZXh0KSk7XG4gICAgICBzID0gbmV4dDtcbiAgICAgIGlkeCArPSAxO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0IHRoaXMgSW50ZXJ2YWwgaW50byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBzbWFsbGVyIGludGVydmFscy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlck9mUGFydHMgLSBUaGUgbnVtYmVyIG9mIEludGVydmFscyB0byBkaXZpZGUgdGhlIEludGVydmFsIGludG8uXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgZGl2aWRlRXF1YWxseShudW1iZXJPZlBhcnRzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBbXTtcbiAgICByZXR1cm4gdGhpcy5zcGxpdEJ5KHRoaXMubGVuZ3RoKCkgLyBudW1iZXJPZlBhcnRzKS5zbGljZSgwLCBudW1iZXJPZlBhcnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIG92ZXJsYXBzIHdpdGggdGhlIHNwZWNpZmllZCBJbnRlcnZhbFxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgb3ZlcmxhcHMob3RoZXIpIHtcbiAgICByZXR1cm4gdGhpcy5lID4gb3RoZXIucyAmJiB0aGlzLnMgPCBvdGhlci5lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBlbmQgaXMgYWRqYWNlbnQgdG8gdGhlIHNwZWNpZmllZCBJbnRlcnZhbCdzIHN0YXJ0LlxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgYWJ1dHNTdGFydChvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICt0aGlzLmUgPT09ICtvdGhlci5zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBzdGFydCBpcyBhZGphY2VudCB0byB0aGUgc3BlY2lmaWVkIEludGVydmFsJ3MgZW5kLlxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgYWJ1dHNFbmQob3RoZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiArb3RoZXIuZSA9PT0gK3RoaXMucztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBJbnRlcnZhbCBmdWxseSBjb250YWlucyB0aGUgc3BlY2lmaWVkIEludGVydmFsLCBzcGVjaWZpY2FsbHkgaWYgdGhlIGludGVyc2VjdCAob2YgdGhpcyBJbnRlcnZhbCBhbmQgdGhlIG90aGVyIEludGVydmFsKSBpcyBlcXVhbCB0byB0aGUgb3RoZXIgSW50ZXJ2YWw7IGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGVuZ3VsZnMob3RoZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLnMgPD0gb3RoZXIucyAmJiB0aGlzLmUgPj0gb3RoZXIuZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIGhhcyB0aGUgc2FtZSBzdGFydCBhbmQgZW5kIGFzIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBlcXVhbHMob3RoZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCB8fCAhb3RoZXIuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnMuZXF1YWxzKG90aGVyLnMpICYmIHRoaXMuZS5lcXVhbHMob3RoZXIuZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIEludGVydmFsIHJlcHJlc2VudGluZyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoaXMgSW50ZXJ2YWwgYW5kIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwuXG4gICAqIFNwZWNpZmljYWxseSwgdGhlIHJlc3VsdGluZyBJbnRlcnZhbCBoYXMgdGhlIG1heGltdW0gc3RhcnQgdGltZSBhbmQgdGhlIG1pbmltdW0gZW5kIHRpbWUgb2YgdGhlIHR3byBJbnRlcnZhbHMuXG4gICAqIFJldHVybnMgbnVsbCBpZiB0aGUgaW50ZXJzZWN0aW9uIGlzIGVtcHR5LCBtZWFuaW5nLCB0aGUgaW50ZXJ2YWxzIGRvbid0IGludGVyc2VjdC5cbiAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXJcbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICBpbnRlcnNlY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgcyA9IHRoaXMucyA+IG90aGVyLnMgPyB0aGlzLnMgOiBvdGhlci5zLFxuICAgICAgZSA9IHRoaXMuZSA8IG90aGVyLmUgPyB0aGlzLmUgOiBvdGhlci5lO1xuXG4gICAgaWYgKHMgPj0gZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHMsIGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gSW50ZXJ2YWwgcmVwcmVzZW50aW5nIHRoZSB1bmlvbiBvZiB0aGlzIEludGVydmFsIGFuZCB0aGUgc3BlY2lmaWVkIEludGVydmFsLlxuICAgKiBTcGVjaWZpY2FsbHksIHRoZSByZXN1bHRpbmcgSW50ZXJ2YWwgaGFzIHRoZSBtaW5pbXVtIHN0YXJ0IHRpbWUgYW5kIHRoZSBtYXhpbXVtIGVuZCB0aW1lIG9mIHRoZSB0d28gSW50ZXJ2YWxzLlxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIHVuaW9uKG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IHMgPSB0aGlzLnMgPCBvdGhlci5zID8gdGhpcy5zIDogb3RoZXIucyxcbiAgICAgIGUgPSB0aGlzLmUgPiBvdGhlci5lID8gdGhpcy5lIDogb3RoZXIuZTtcbiAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzLCBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZSBhbiBhcnJheSBvZiBJbnRlcnZhbHMgaW50byBhIGVxdWl2YWxlbnQgbWluaW1hbCBzZXQgb2YgSW50ZXJ2YWxzLlxuICAgKiBDb21iaW5lcyBvdmVybGFwcGluZyBhbmQgYWRqYWNlbnQgSW50ZXJ2YWxzLlxuICAgKiBAcGFyYW0ge0FycmF5fSBpbnRlcnZhbHNcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzdGF0aWMgbWVyZ2UoaW50ZXJ2YWxzKSB7XG4gICAgY29uc3QgW2ZvdW5kLCBmaW5hbF0gPSBpbnRlcnZhbHNcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnMgLSBiLnMpXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoW3NvZmFyLCBjdXJyZW50XSwgaXRlbSkgPT4ge1xuICAgICAgICAgIGlmICghY3VycmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFtzb2ZhciwgaXRlbV07XG4gICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Lm92ZXJsYXBzKGl0ZW0pIHx8IGN1cnJlbnQuYWJ1dHNTdGFydChpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtzb2ZhciwgY3VycmVudC51bmlvbihpdGVtKV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbc29mYXIuY29uY2F0KFtjdXJyZW50XSksIGl0ZW1dO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1tdLCBudWxsXVxuICAgICAgKTtcbiAgICBpZiAoZmluYWwpIHtcbiAgICAgIGZvdW5kLnB1c2goZmluYWwpO1xuICAgIH1cbiAgICByZXR1cm4gZm91bmQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIEludGVydmFscyByZXByZXNlbnRpbmcgdGhlIHNwYW5zIG9mIHRpbWUgdGhhdCBvbmx5IGFwcGVhciBpbiBvbmUgb2YgdGhlIHNwZWNpZmllZCBJbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGludGVydmFsc1xuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyB4b3IoaW50ZXJ2YWxzKSB7XG4gICAgbGV0IHN0YXJ0ID0gbnVsbCxcbiAgICAgIGN1cnJlbnRDb3VudCA9IDA7XG4gICAgY29uc3QgcmVzdWx0cyA9IFtdLFxuICAgICAgZW5kcyA9IGludGVydmFscy5tYXAoKGkpID0+IFtcbiAgICAgICAgeyB0aW1lOiBpLnMsIHR5cGU6IFwic1wiIH0sXG4gICAgICAgIHsgdGltZTogaS5lLCB0eXBlOiBcImVcIiB9LFxuICAgICAgXSksXG4gICAgICBmbGF0dGVuZWQgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0KC4uLmVuZHMpLFxuICAgICAgYXJyID0gZmxhdHRlbmVkLnNvcnQoKGEsIGIpID0+IGEudGltZSAtIGIudGltZSk7XG5cbiAgICBmb3IgKGNvbnN0IGkgb2YgYXJyKSB7XG4gICAgICBjdXJyZW50Q291bnQgKz0gaS50eXBlID09PSBcInNcIiA/IDEgOiAtMTtcblxuICAgICAgaWYgKGN1cnJlbnRDb3VudCA9PT0gMSkge1xuICAgICAgICBzdGFydCA9IGkudGltZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzdGFydCAmJiArc3RhcnQgIT09ICtpLnRpbWUpIHtcbiAgICAgICAgICByZXN1bHRzLnB1c2goSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzdGFydCwgaS50aW1lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEludGVydmFsLm1lcmdlKHJlc3VsdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBJbnRlcnZhbCByZXByZXNlbnRpbmcgdGhlIHNwYW4gb2YgdGltZSBpbiB0aGlzIEludGVydmFsIHRoYXQgZG9lc24ndCBvdmVybGFwIHdpdGggYW55IG9mIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWxzLlxuICAgKiBAcGFyYW0gey4uLkludGVydmFsfSBpbnRlcnZhbHNcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBkaWZmZXJlbmNlKC4uLmludGVydmFscykge1xuICAgIHJldHVybiBJbnRlcnZhbC54b3IoW3RoaXNdLmNvbmNhdChpbnRlcnZhbHMpKVxuICAgICAgLm1hcCgoaSkgPT4gdGhpcy5pbnRlcnNlY3Rpb24oaSkpXG4gICAgICAuZmlsdGVyKChpKSA9PiBpICYmICFpLmlzRW1wdHkoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEludGVydmFsIGFwcHJvcHJpYXRlIGZvciBkZWJ1Z2dpbmcuXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvU3RyaW5nKCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRDtcbiAgICByZXR1cm4gYFske3RoaXMucy50b0lTTygpfSDigJMgJHt0aGlzLmUudG9JU08oKX0pYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSW50ZXJ2YWwgYXBwcm9wcmlhdGUgZm9yIHRoZSBSRVBMLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBbU3ltYm9sLmZvcihcIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tXCIpXSgpIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gYEludGVydmFsIHsgc3RhcnQ6ICR7dGhpcy5zLnRvSVNPKCl9LCBlbmQ6ICR7dGhpcy5lLnRvSVNPKCl9IH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYEludGVydmFsIHsgSW52YWxpZCwgcmVhc29uOiAke3RoaXMuaW52YWxpZFJlYXNvbn0gfWA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsb2NhbGl6ZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGlzIEludGVydmFsLiBBY2NlcHRzIHRoZSBzYW1lIG9wdGlvbnMgYXMgdGhlXG4gICAqIEludGwuRGF0ZVRpbWVGb3JtYXQgY29uc3RydWN0b3IgYW5kIGFueSBwcmVzZXRzIGRlZmluZWQgYnkgTHV4b24sIHN1Y2ggYXNcbiAgICoge0BsaW5rIERhdGVUaW1lLkRBVEVfRlVMTH0gb3Ige0BsaW5rIERhdGVUaW1lLlRJTUVfU0lNUExFfS4gVGhlIGV4YWN0IGJlaGF2aW9yIG9mIHRoaXMgbWV0aG9kXG4gICAqIGlzIGJyb3dzZXItc3BlY2lmaWMsIGJ1dCBpbiBnZW5lcmFsIGl0IHdpbGwgcmV0dXJuIGFuIGFwcHJvcHJpYXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZVxuICAgKiBJbnRlcnZhbCBpbiB0aGUgYXNzaWduZWQgbG9jYWxlLiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlblxuICAgKiBzcGVjaWZpZWQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtmb3JtYXRPcHRzPURhdGVUaW1lLkRBVEVfU0hPUlRdIC0gRWl0aGVyIGEgRGF0ZVRpbWUgcHJlc2V0IG9yXG4gICAqIEludGwuRGF0ZVRpbWVGb3JtYXQgY29uc3RydWN0b3Igb3B0aW9ucy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBPcHRpb25zIHRvIG92ZXJyaWRlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBzdGFydCBEYXRlVGltZS5cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbUlTTygnMjAyMi0xMS0wN1QwOTowMFovMjAyMi0xMS0wOFQwOTowMFonKS50b0xvY2FsZVN0cmluZygpOyAvLz0+IDExLzcvMjAyMiDigJMgMTEvOC8yMDIyXG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21JU08oJzIwMjItMTEtMDdUMDk6MDBaLzIwMjItMTEtMDhUMDk6MDBaJykudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURV9GVUxMKTsgLy89PiBOb3ZlbWJlciA3IOKAkyA4LCAyMDIyXG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21JU08oJzIwMjItMTEtMDdUMDk6MDBaLzIwMjItMTEtMDhUMDk6MDBaJykudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURV9GVUxMLCB7IGxvY2FsZTogJ2ZyLUZSJyB9KTsgLy89PiA34oCTOCBub3ZlbWJyZSAyMDIyXG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21JU08oJzIwMjItMTEtMDdUMTc6MDBaLzIwMjItMTEtMDdUMTk6MDBaJykudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuVElNRV9TSU1QTEUpOyAvLz0+IDY6MDAg4oCTIDg6MDAgUE1cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbUlTTygnMjAyMi0xMS0wN1QxNzowMFovMjAyMi0xMS0wN1QxOTowMFonKS50b0xvY2FsZVN0cmluZyh7IHdlZWtkYXk6ICdzaG9ydCcsIG1vbnRoOiAnc2hvcnQnLCBkYXk6ICcyLWRpZ2l0JywgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTsgLy89PiBNb24sIE5vdiAwNywgNjowMCDigJMgODowMCBwXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvTG9jYWxlU3RyaW5nKGZvcm1hdE9wdHMgPSBGb3JtYXRzLkRBVEVfU0hPUlQsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRcbiAgICAgID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLnMubG9jLmNsb25lKG9wdHMpLCBmb3JtYXRPcHRzKS5mb3JtYXRJbnRlcnZhbCh0aGlzKVxuICAgICAgOiBJTlZBTElEO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEludGVydmFsLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVGhlIHNhbWUgb3B0aW9ucyBhcyB7QGxpbmsgRGF0ZVRpbWUjdG9JU099XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPKG9wdHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQ7XG4gICAgcmV0dXJuIGAke3RoaXMucy50b0lTTyhvcHRzKX0vJHt0aGlzLmUudG9JU08ob3B0cyl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgZGF0ZSBvZiB0aGlzIEludGVydmFsLlxuICAgKiBUaGUgdGltZSBjb21wb25lbnRzIGFyZSBpZ25vcmVkLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPRGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQ7XG4gICAgcmV0dXJuIGAke3RoaXMucy50b0lTT0RhdGUoKX0vJHt0aGlzLmUudG9JU09EYXRlKCl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGltZSBvZiB0aGlzIEludGVydmFsLlxuICAgKiBUaGUgZGF0ZSBjb21wb25lbnRzIGFyZSBpZ25vcmVkLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVGhlIHNhbWUgb3B0aW9ucyBhcyB7QGxpbmsgRGF0ZVRpbWUjdG9JU099XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPVGltZShvcHRzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEO1xuICAgIHJldHVybiBgJHt0aGlzLnMudG9JU09UaW1lKG9wdHMpfS8ke3RoaXMuZS50b0lTT1RpbWUob3B0cyl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSW50ZXJ2YWwgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGZvcm1hdFxuICAgKiBzdHJpbmcuICoqWW91IG1heSBub3Qgd2FudCB0aGlzLioqIFNlZSB7QGxpbmsgSW50ZXJ2YWwjdG9Mb2NhbGVTdHJpbmd9IGZvciBhIG1vcmUgZmxleGlibGVcbiAgICogZm9ybWF0dGluZyB0b29sLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0ZUZvcm1hdCAtIFRoZSBmb3JtYXQgc3RyaW5nLiBUaGlzIHN0cmluZyBmb3JtYXRzIHRoZSBzdGFydCBhbmQgZW5kIHRpbWUuXG4gICAqIFNlZSB7QGxpbmsgRGF0ZVRpbWUjdG9Gb3JtYXR9IGZvciBkZXRhaWxzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5zZXBhcmF0b3IgPSAgJyDigJMgJ10gLSBBIHNlcGFyYXRvciB0byBwbGFjZSBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kXG4gICAqIHJlcHJlc2VudGF0aW9ucy5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9Gb3JtYXQoZGF0ZUZvcm1hdCwgeyBzZXBhcmF0b3IgPSBcIiDigJMgXCIgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEO1xuICAgIHJldHVybiBgJHt0aGlzLnMudG9Gb3JtYXQoZGF0ZUZvcm1hdCl9JHtzZXBhcmF0b3J9JHt0aGlzLmUudG9Gb3JtYXQoZGF0ZUZvcm1hdCl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHRpbWUgc3Bhbm5lZCBieSB0aGlzIGludGVydmFsLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3VuaXQ9WydtaWxsaXNlY29uZHMnXV0gLSB0aGUgdW5pdCBvciB1bml0cyAoc3VjaCBhcyAnaG91cnMnIG9yICdkYXlzJykgdG8gaW5jbHVkZSBpbiB0aGUgZHVyYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgdGhlIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKCkudG9PYmplY3QoKSAvLz0+IHsgbWlsbGlzZWNvbmRzOiA4ODQ4OTI1NyB9XG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oJ2RheXMnKS50b09iamVjdCgpIC8vPT4geyBkYXlzOiAxLjAyNDE4MTIxNTI3Nzc3NzggfVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKFsnaG91cnMnLCAnbWludXRlcyddKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMjQsIG1pbnV0ZXM6IDM0LjgyMDk1IH1cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikudG9EdXJhdGlvbihbJ2hvdXJzJywgJ21pbnV0ZXMnLCAnc2Vjb25kcyddKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMjQsIG1pbnV0ZXM6IDM0LCBzZWNvbmRzOiA0OS4yNTcgfVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKCdzZWNvbmRzJykudG9PYmplY3QoKSAvLz0+IHsgc2Vjb25kczogODg0ODkuMjU3IH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICB0b0R1cmF0aW9uKHVuaXQsIG9wdHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmludmFsaWQodGhpcy5pbnZhbGlkUmVhc29uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZS5kaWZmKHRoaXMucywgdW5pdCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogUnVuIG1hcEZuIG9uIHRoZSBpbnRlcnZhbCBzdGFydCBhbmQgZW5kLCByZXR1cm5pbmcgYSBuZXcgSW50ZXJ2YWwgZnJvbSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtYXBGblxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikubWFwRW5kcG9pbnRzKGVuZHBvaW50ID0+IGVuZHBvaW50LnRvVVRDKCkpXG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLm1hcEVuZHBvaW50cyhlbmRwb2ludCA9PiBlbmRwb2ludC5wbHVzKHsgaG91cnM6IDIgfSkpXG4gICAqL1xuICBtYXBFbmRwb2ludHMobWFwRm4pIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhtYXBGbih0aGlzLnMpLCBtYXBGbih0aGlzLmUpKTtcbiAgfVxufVxuIiwiaW1wb3J0IERhdGVUaW1lIGZyb20gXCIuL2RhdGV0aW1lLmpzXCI7XG5pbXBvcnQgRHVyYXRpb24gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcbmltcG9ydCBJbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IEluZm8gZnJvbSBcIi4vaW5mby5qc1wiO1xuaW1wb3J0IFpvbmUgZnJvbSBcIi4vem9uZS5qc1wiO1xuaW1wb3J0IEZpeGVkT2Zmc2V0Wm9uZSBmcm9tIFwiLi96b25lcy9maXhlZE9mZnNldFpvbmUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuaW1wb3J0IEludmFsaWRab25lIGZyb20gXCIuL3pvbmVzL2ludmFsaWRab25lLmpzXCI7XG5pbXBvcnQgU3lzdGVtWm9uZSBmcm9tIFwiLi96b25lcy9zeXN0ZW1ab25lLmpzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MuanNcIjtcblxuY29uc3QgVkVSU0lPTiA9IFwiMy41LjBcIjtcblxuZXhwb3J0IHtcbiAgVkVSU0lPTixcbiAgRGF0ZVRpbWUsXG4gIER1cmF0aW9uLFxuICBJbnRlcnZhbCxcbiAgSW5mbyxcbiAgWm9uZSxcbiAgRml4ZWRPZmZzZXRab25lLFxuICBJQU5BWm9uZSxcbiAgSW52YWxpZFpvbmUsXG4gIFN5c3RlbVpvbmUsXG4gIFNldHRpbmdzLFxufTtcbiIsImltcG9ydCBTeXN0ZW1ab25lIGZyb20gXCIuL3pvbmVzL3N5c3RlbVpvbmUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuaW1wb3J0IExvY2FsZSBmcm9tIFwiLi9pbXBsL2xvY2FsZS5qc1wiO1xuaW1wb3J0IERhdGVUaW1lIGZyb20gXCIuL2RhdGV0aW1lLmpzXCI7XG5cbmltcG9ydCB7IG5vcm1hbGl6ZVpvbmUgfSBmcm9tIFwiLi9pbXBsL3pvbmVVdGlsLmpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVdlZWtTZXR0aW5ncyB9IGZyb20gXCIuL2ltcGwvdXRpbC5qc1wiO1xuaW1wb3J0IHsgcmVzZXREaWdpdFJlZ2V4Q2FjaGUgfSBmcm9tIFwiLi9pbXBsL2RpZ2l0cy5qc1wiO1xuXG5sZXQgbm93ID0gKCkgPT4gRGF0ZS5ub3coKSxcbiAgZGVmYXVsdFpvbmUgPSBcInN5c3RlbVwiLFxuICBkZWZhdWx0TG9jYWxlID0gbnVsbCxcbiAgZGVmYXVsdE51bWJlcmluZ1N5c3RlbSA9IG51bGwsXG4gIGRlZmF1bHRPdXRwdXRDYWxlbmRhciA9IG51bGwsXG4gIHR3b0RpZ2l0Q3V0b2ZmWWVhciA9IDYwLFxuICB0aHJvd09uSW52YWxpZCxcbiAgZGVmYXVsdFdlZWtTZXR0aW5ncyA9IG51bGw7XG5cbi8qKlxuICogU2V0dGluZ3MgY29udGFpbnMgc3RhdGljIGdldHRlcnMgYW5kIHNldHRlcnMgdGhhdCBjb250cm9sIEx1eG9uJ3Mgb3ZlcmFsbCBiZWhhdmlvci4gTHV4b24gaXMgYSBzaW1wbGUgbGlicmFyeSB3aXRoIGZldyBvcHRpb25zLCBidXQgdGhlIG9uZXMgaXQgZG9lcyBoYXZlIGxpdmUgaGVyZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2V0dGluZ3Mge1xuICAvKipcbiAgICogR2V0IHRoZSBjYWxsYmFjayBmb3IgcmV0dXJuaW5nIHRoZSBjdXJyZW50IHRpbWVzdGFtcC5cbiAgICogQHR5cGUge2Z1bmN0aW9ufVxuICAgKi9cbiAgc3RhdGljIGdldCBub3coKSB7XG4gICAgcmV0dXJuIG5vdztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNhbGxiYWNrIGZvciByZXR1cm5pbmcgdGhlIGN1cnJlbnQgdGltZXN0YW1wLlxuICAgKiBUaGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhIG51bWJlciwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBFcG9jaCBtaWxsaXNlY29uZCBjb3VudFxuICAgKiBAdHlwZSB7ZnVuY3Rpb259XG4gICAqIEBleGFtcGxlIFNldHRpbmdzLm5vdyA9ICgpID0+IERhdGUubm93KCkgKyAzMDAwIC8vIHByZXRlbmQgaXQgaXMgMyBzZWNvbmRzIGluIHRoZSBmdXR1cmVcbiAgICogQGV4YW1wbGUgU2V0dGluZ3Mubm93ID0gKCkgPT4gMCAvLyBhbHdheXMgcHJldGVuZCBpdCdzIEphbiAxLCAxOTcwIGF0IG1pZG5pZ2h0IGluIFVUQyB0aW1lXG4gICAqL1xuICBzdGF0aWMgc2V0IG5vdyhuKSB7XG4gICAgbm93ID0gbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgdGltZSB6b25lIHRvIGNyZWF0ZSBEYXRlVGltZXMgaW4uIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIFVzZSB0aGUgdmFsdWUgXCJzeXN0ZW1cIiB0byByZXNldCB0aGlzIHZhbHVlIHRvIHRoZSBzeXN0ZW0ncyB0aW1lIHpvbmUuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgc2V0IGRlZmF1bHRab25lKHpvbmUpIHtcbiAgICBkZWZhdWx0Wm9uZSA9IHpvbmU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZWZhdWx0IHRpbWUgem9uZSBvYmplY3QgY3VycmVudGx5IHVzZWQgdG8gY3JlYXRlIERhdGVUaW1lcy4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIHN5c3RlbSdzIHRpbWUgem9uZSAodGhlIG9uZSBzZXQgb24gdGhlIG1hY2hpbmUgdGhhdCBydW5zIHRoaXMgY29kZSkuXG4gICAqIEB0eXBlIHtab25lfVxuICAgKi9cbiAgc3RhdGljIGdldCBkZWZhdWx0Wm9uZSgpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplWm9uZShkZWZhdWx0Wm9uZSwgU3lzdGVtWm9uZS5pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZWZhdWx0IGxvY2FsZSB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRMb2NhbGUoKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRMb2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IGxvY2FsZSB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgc2V0IGRlZmF1bHRMb2NhbGUobG9jYWxlKSB7XG4gICAgZGVmYXVsdExvY2FsZSA9IGxvY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgbnVtYmVyaW5nIHN5c3RlbSB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgZ2V0IGRlZmF1bHROdW1iZXJpbmdTeXN0ZW0oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHROdW1iZXJpbmdTeXN0ZW07XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IG51bWJlcmluZyBzeXN0ZW0gdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgc3RhdGljIHNldCBkZWZhdWx0TnVtYmVyaW5nU3lzdGVtKG51bWJlcmluZ1N5c3RlbSkge1xuICAgIGRlZmF1bHROdW1iZXJpbmdTeXN0ZW0gPSBudW1iZXJpbmdTeXN0ZW07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZWZhdWx0IG91dHB1dCBjYWxlbmRhciB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRPdXRwdXRDYWxlbmRhcigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE91dHB1dENhbGVuZGFyO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCBvdXRwdXQgY2FsZW5kYXIgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgc3RhdGljIHNldCBkZWZhdWx0T3V0cHV0Q2FsZW5kYXIob3V0cHV0Q2FsZW5kYXIpIHtcbiAgICBkZWZhdWx0T3V0cHV0Q2FsZW5kYXIgPSBvdXRwdXRDYWxlbmRhcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBXZWVrU2V0dGluZ3NcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IGZpcnN0RGF5XG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtaW5pbWFsRGF5c1xuICAgKiBAcHJvcGVydHkge251bWJlcltdfSB3ZWVrZW5kXG4gICAqL1xuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtXZWVrU2V0dGluZ3N8bnVsbH1cbiAgICovXG4gIHN0YXRpYyBnZXQgZGVmYXVsdFdlZWtTZXR0aW5ncygpIHtcbiAgICByZXR1cm4gZGVmYXVsdFdlZWtTZXR0aW5ncztcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3Mgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBsb2NhbGUgd2VlayBzZXR0aW5ncywgaS5lLiB0aGUgc3RhcnQgb2YgdGhlIHdlZWssIHRoZSB3ZWVrZW5kIGFuZFxuICAgKiBob3cgbWFueSBkYXlzIGFyZSByZXF1aXJlZCBpbiB0aGUgZmlyc3Qgd2VlayBvZiBhIHllYXIuXG4gICAqIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7V2Vla1NldHRpbmdzfG51bGx9IHdlZWtTZXR0aW5nc1xuICAgKi9cbiAgc3RhdGljIHNldCBkZWZhdWx0V2Vla1NldHRpbmdzKHdlZWtTZXR0aW5ncykge1xuICAgIGRlZmF1bHRXZWVrU2V0dGluZ3MgPSB2YWxpZGF0ZVdlZWtTZXR0aW5ncyh3ZWVrU2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3V0b2ZmIHllYXIgZm9yIHdoZXRoZXIgYSAyLWRpZ2l0IHllYXIgc3RyaW5nIGlzIGludGVycHJldGVkIGluIHRoZSBjdXJyZW50IG9yIHByZXZpb3VzIGNlbnR1cnkuIE51bWJlcnMgaGlnaGVyIHRoYW4gdGhlIGN1dG9mZiB3aWxsIGJlIGNvbnNpZGVyZWQgdG8gbWVhbiAxOXh4IGFuZCBudW1iZXJzIGxvd2VyIG9yIGVxdWFsIHRvIHRoZSBjdXRvZmYgd2lsbCBiZSBjb25zaWRlcmVkIDIweHguXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBzdGF0aWMgZ2V0IHR3b0RpZ2l0Q3V0b2ZmWWVhcigpIHtcbiAgICByZXR1cm4gdHdvRGlnaXRDdXRvZmZZZWFyO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3V0b2ZmIHllYXIgZm9yIHdoZXRoZXIgYSAyLWRpZ2l0IHllYXIgc3RyaW5nIGlzIGludGVycHJldGVkIGluIHRoZSBjdXJyZW50IG9yIHByZXZpb3VzIGNlbnR1cnkuIE51bWJlcnMgaGlnaGVyIHRoYW4gdGhlIGN1dG9mZiB3aWxsIGJlIGNvbnNpZGVyZWQgdG8gbWVhbiAxOXh4IGFuZCBudW1iZXJzIGxvd2VyIG9yIGVxdWFsIHRvIHRoZSBjdXRvZmYgd2lsbCBiZSBjb25zaWRlcmVkIDIweHguXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBleGFtcGxlIFNldHRpbmdzLnR3b0RpZ2l0Q3V0b2ZmWWVhciA9IDAgLy8gYWxsICd5eScgYXJlIGludGVycHJldGVkIGFzIDIwdGggY2VudHVyeVxuICAgKiBAZXhhbXBsZSBTZXR0aW5ncy50d29EaWdpdEN1dG9mZlllYXIgPSA5OSAvLyBhbGwgJ3l5JyBhcmUgaW50ZXJwcmV0ZWQgYXMgMjFzdCBjZW50dXJ5XG4gICAqIEBleGFtcGxlIFNldHRpbmdzLnR3b0RpZ2l0Q3V0b2ZmWWVhciA9IDUwIC8vICc0OScgLT4gMjA0OTsgJzUwJyAtPiAxOTUwXG4gICAqIEBleGFtcGxlIFNldHRpbmdzLnR3b0RpZ2l0Q3V0b2ZmWWVhciA9IDE5NTAgLy8gaW50ZXJwcmV0ZWQgYXMgNTBcbiAgICogQGV4YW1wbGUgU2V0dGluZ3MudHdvRGlnaXRDdXRvZmZZZWFyID0gMjA1MCAvLyBBTFNPIGludGVycHJldGVkIGFzIDUwXG4gICAqL1xuICBzdGF0aWMgc2V0IHR3b0RpZ2l0Q3V0b2ZmWWVhcihjdXRvZmZZZWFyKSB7XG4gICAgdHdvRGlnaXRDdXRvZmZZZWFyID0gY3V0b2ZmWWVhciAlIDEwMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgd2hldGhlciBMdXhvbiB3aWxsIHRocm93IHdoZW4gaXQgZW5jb3VudGVycyBpbnZhbGlkIERhdGVUaW1lcywgRHVyYXRpb25zLCBvciBJbnRlcnZhbHNcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgZ2V0IHRocm93T25JbnZhbGlkKCkge1xuICAgIHJldHVybiB0aHJvd09uSW52YWxpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgd2hldGhlciBMdXhvbiB3aWxsIHRocm93IHdoZW4gaXQgZW5jb3VudGVycyBpbnZhbGlkIERhdGVUaW1lcywgRHVyYXRpb25zLCBvciBJbnRlcnZhbHNcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgc2V0IHRocm93T25JbnZhbGlkKHQpIHtcbiAgICB0aHJvd09uSW52YWxpZCA9IHQ7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgTHV4b24ncyBnbG9iYWwgY2FjaGVzLiBTaG91bGQgb25seSBiZSBuZWNlc3NhcnkgaW4gdGVzdGluZyBzY2VuYXJpb3MuXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgcmVzZXRDYWNoZXMoKSB7XG4gICAgTG9jYWxlLnJlc2V0Q2FjaGUoKTtcbiAgICBJQU5BWm9uZS5yZXNldENhY2hlKCk7XG4gICAgRGF0ZVRpbWUucmVzZXRDYWNoZSgpO1xuICAgIHJlc2V0RGlnaXRSZWdleENhY2hlKCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IFpvbmVJc0Fic3RyYWN0RXJyb3IgfSBmcm9tIFwiLi9lcnJvcnMuanNcIjtcblxuLyoqXG4gKiBAaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpvbmUge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygem9uZVxuICAgKiBAYWJzdHJhY3RcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCB0eXBlKCkge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyB6b25lLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBuYW1lKCkge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIElBTkEgbmFtZSBvZiB0aGlzIHpvbmUuXG4gICAqIERlZmF1bHRzIHRvIGBuYW1lYCBpZiBub3Qgb3ZlcndyaXR0ZW4gYnkgYSBzdWJjbGFzcy5cbiAgICogQGFic3RyYWN0XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaWFuYU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG9mZnNldCBpcyBrbm93biB0byBiZSBmaXhlZCBmb3IgdGhlIHdob2xlIHllYXIuXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1VuaXZlcnNhbCgpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9mZnNldCdzIGNvbW1vbiBuYW1lIChzdWNoIGFzIEVTVCkgYXQgdGhlIHNwZWNpZmllZCB0aW1lc3RhbXBcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0cyAtIEVwb2NoIG1pbGxpc2Vjb25kcyBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBuYW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyB0byBhZmZlY3QgdGhlIGZvcm1hdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5mb3JtYXQgLSBXaGF0IHN0eWxlIG9mIG9mZnNldCB0byByZXR1cm4uIEFjY2VwdHMgJ2xvbmcnIG9yICdzaG9ydCcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLmxvY2FsZSAtIFdoYXQgbG9jYWxlIHRvIHJldHVybiB0aGUgb2Zmc2V0IG5hbWUgaW4uXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIG9mZnNldE5hbWUodHMsIG9wdHMpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9mZnNldCdzIHZhbHVlIGFzIGEgc3RyaW5nXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge251bWJlcn0gdHMgLSBFcG9jaCBtaWxsaXNlY29uZHMgZm9yIHdoaWNoIHRvIGdldCB0aGUgb2Zmc2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgLSBXaGF0IHN0eWxlIG9mIG9mZnNldCB0byByZXR1cm4uXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRzICduYXJyb3cnLCAnc2hvcnQnLCBvciAndGVjaGllJy4gUmV0dXJuaW5nICcrNicsICcrMDY6MDAnLCBvciAnKzA2MDAnIHJlc3BlY3RpdmVseVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBvZmZzZXQgaW4gbWludXRlcyBmb3IgdGhpcyB6b25lIGF0IHRoZSBzcGVjaWZpZWQgdGltZXN0YW1wLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRzIC0gRXBvY2ggbWlsbGlzZWNvbmRzIGZvciB3aGljaCB0byBjb21wdXRlIHRoZSBvZmZzZXRcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgb2Zmc2V0KHRzKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIFpvbmUgaXMgZXF1YWwgdG8gYW5vdGhlciB6b25lXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge1pvbmV9IG90aGVyWm9uZSAtIHRoZSB6b25lIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGVxdWFscyhvdGhlclpvbmUpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgWm9uZSBpcyB2YWxpZC5cbiAgICogQGFic3RyYWN0XG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgZm9ybWF0T2Zmc2V0LCBwYXJzZVpvbmVJbmZvLCBpc1VuZGVmaW5lZCwgb2JqVG9Mb2NhbFRTIH0gZnJvbSBcIi4uL2ltcGwvdXRpbC5qc1wiO1xuaW1wb3J0IFpvbmUgZnJvbSBcIi4uL3pvbmUuanNcIjtcblxubGV0IGR0ZkNhY2hlID0ge307XG5mdW5jdGlvbiBtYWtlRFRGKHpvbmUpIHtcbiAgaWYgKCFkdGZDYWNoZVt6b25lXSkge1xuICAgIGR0ZkNhY2hlW3pvbmVdID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJlbi1VU1wiLCB7XG4gICAgICBob3VyMTI6IGZhbHNlLFxuICAgICAgdGltZVpvbmU6IHpvbmUsXG4gICAgICB5ZWFyOiBcIm51bWVyaWNcIixcbiAgICAgIG1vbnRoOiBcIjItZGlnaXRcIixcbiAgICAgIGRheTogXCIyLWRpZ2l0XCIsXG4gICAgICBob3VyOiBcIjItZGlnaXRcIixcbiAgICAgIG1pbnV0ZTogXCIyLWRpZ2l0XCIsXG4gICAgICBzZWNvbmQ6IFwiMi1kaWdpdFwiLFxuICAgICAgZXJhOiBcInNob3J0XCIsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGR0ZkNhY2hlW3pvbmVdO1xufVxuXG5jb25zdCB0eXBlVG9Qb3MgPSB7XG4gIHllYXI6IDAsXG4gIG1vbnRoOiAxLFxuICBkYXk6IDIsXG4gIGVyYTogMyxcbiAgaG91cjogNCxcbiAgbWludXRlOiA1LFxuICBzZWNvbmQ6IDYsXG59O1xuXG5mdW5jdGlvbiBoYWNreU9mZnNldChkdGYsIGRhdGUpIHtcbiAgY29uc3QgZm9ybWF0dGVkID0gZHRmLmZvcm1hdChkYXRlKS5yZXBsYWNlKC9cXHUyMDBFL2csIFwiXCIpLFxuICAgIHBhcnNlZCA9IC8oXFxkKylcXC8oXFxkKylcXC8oXFxkKykgKEFEfEJDKSw/IChcXGQrKTooXFxkKyk6KFxcZCspLy5leGVjKGZvcm1hdHRlZCksXG4gICAgWywgZk1vbnRoLCBmRGF5LCBmWWVhciwgZmFkT3JCYywgZkhvdXIsIGZNaW51dGUsIGZTZWNvbmRdID0gcGFyc2VkO1xuICByZXR1cm4gW2ZZZWFyLCBmTW9udGgsIGZEYXksIGZhZE9yQmMsIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXTtcbn1cblxuZnVuY3Rpb24gcGFydHNPZmZzZXQoZHRmLCBkYXRlKSB7XG4gIGNvbnN0IGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXRUb1BhcnRzKGRhdGUpO1xuICBjb25zdCBmaWxsZWQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtYXR0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB7IHR5cGUsIHZhbHVlIH0gPSBmb3JtYXR0ZWRbaV07XG4gICAgY29uc3QgcG9zID0gdHlwZVRvUG9zW3R5cGVdO1xuXG4gICAgaWYgKHR5cGUgPT09IFwiZXJhXCIpIHtcbiAgICAgIGZpbGxlZFtwb3NdID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmICghaXNVbmRlZmluZWQocG9zKSkge1xuICAgICAgZmlsbGVkW3Bvc10gPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsbGVkO1xufVxuXG5sZXQgaWFuYVpvbmVDYWNoZSA9IHt9O1xuLyoqXG4gKiBBIHpvbmUgaWRlbnRpZmllZCBieSBhbiBJQU5BIGlkZW50aWZpZXIsIGxpa2UgQW1lcmljYS9OZXdfWW9ya1xuICogQGltcGxlbWVudHMge1pvbmV9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElBTkFab25lIGV4dGVuZHMgWm9uZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFpvbmUgbmFtZVxuICAgKiBAcmV0dXJuIHtJQU5BWm9uZX1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGUobmFtZSkge1xuICAgIGlmICghaWFuYVpvbmVDYWNoZVtuYW1lXSkge1xuICAgICAgaWFuYVpvbmVDYWNoZVtuYW1lXSA9IG5ldyBJQU5BWm9uZShuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIGlhbmFab25lQ2FjaGVbbmFtZV07XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgbG9jYWwgY2FjaGVzLiBTaG91bGQgb25seSBiZSBuZWNlc3NhcnkgaW4gdGVzdGluZyBzY2VuYXJpb3MuXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgcmVzZXRDYWNoZSgpIHtcbiAgICBpYW5hWm9uZUNhY2hlID0ge307XG4gICAgZHRmQ2FjaGUgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHN0cmluZyBpcyBhIHZhbGlkIHNwZWNpZmllci4gVGhpcyBvbmx5IGNoZWNrcyB0aGUgc3RyaW5nJ3MgZm9ybWF0LCBub3QgdGhhdCB0aGUgc3BlY2lmaWVyIGlkZW50aWZpZXMgYSBrbm93biB6b25lOyBzZWUgaXNWYWxpZFpvbmUgZm9yIHRoYXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzIC0gVGhlIHN0cmluZyB0byBjaGVjayB2YWxpZGl0eSBvblxuICAgKiBAZXhhbXBsZSBJQU5BWm9uZS5pc1ZhbGlkU3BlY2lmaWVyKFwiQW1lcmljYS9OZXdfWW9ya1wiKSAvLz0+IHRydWVcbiAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFNwZWNpZmllcihcIlNwb3J0fn5ibG9ycFwiKSAvLz0+IGZhbHNlXG4gICAqIEBkZXByZWNhdGVkIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGlzIGZvcndhcmRzIHRvIGlzVmFsaWRab25lLCBiZXR0ZXIgdXNlIGBpc1ZhbGlkWm9uZSgpYCBkaXJlY3RseSBpbnN0ZWFkLlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzVmFsaWRTcGVjaWZpZXIocykge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRab25lKHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZWQgc3RyaW5nIGlkZW50aWZpZXMgYSByZWFsIHpvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHpvbmUgLSBUaGUgc3RyaW5nIHRvIGNoZWNrXG4gICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRab25lKFwiQW1lcmljYS9OZXdfWW9ya1wiKSAvLz0+IHRydWVcbiAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFpvbmUoXCJGYW50YXNpYS9DYXN0bGVcIikgLy89PiBmYWxzZVxuICAgKiBAZXhhbXBsZSBJQU5BWm9uZS5pc1ZhbGlkWm9uZShcIlNwb3J0fn5ibG9ycFwiKSAvLz0+IGZhbHNlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNWYWxpZFpvbmUoem9uZSkge1xuICAgIGlmICghem9uZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJlbi1VU1wiLCB7IHRpbWVab25lOiB6b25lIH0pLmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG5hbWUpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qKiBAcHJpdmF0ZSAqKi9cbiAgICB0aGlzLnpvbmVOYW1lID0gbmFtZTtcbiAgICAvKiogQHByaXZhdGUgKiovXG4gICAgdGhpcy52YWxpZCA9IElBTkFab25lLmlzVmFsaWRab25lKG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHpvbmUuIGBpYW5hYCBmb3IgYWxsIGluc3RhbmNlcyBvZiBgSUFOQVpvbmVgLlxuICAgKiBAb3ZlcnJpZGVcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBcImlhbmFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGlzIHpvbmUgKGkuZS4gdGhlIElBTkEgem9uZSBuYW1lKS5cbiAgICogQG92ZXJyaWRlXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy56b25lTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG9mZnNldCBpcyBrbm93biB0byBiZSBmaXhlZCBmb3IgdGhlIHdob2xlIHllYXI6XG4gICAqIEFsd2F5cyByZXR1cm5zIGZhbHNlIGZvciBhbGwgSUFOQSB6b25lcy5cbiAgICogQG92ZXJyaWRlXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzVW5pdmVyc2FsKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvZmZzZXQncyBjb21tb24gbmFtZSAoc3VjaCBhcyBFU1QpIGF0IHRoZSBzcGVjaWZpZWQgdGltZXN0YW1wXG4gICAqIEBvdmVycmlkZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdHMgLSBFcG9jaCBtaWxsaXNlY29uZHMgZm9yIHdoaWNoIHRvIGdldCB0aGUgbmFtZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnMgdG8gYWZmZWN0IHRoZSBmb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuZm9ybWF0IC0gV2hhdCBzdHlsZSBvZiBvZmZzZXQgdG8gcmV0dXJuLiBBY2NlcHRzICdsb25nJyBvciAnc2hvcnQnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5sb2NhbGUgLSBXaGF0IGxvY2FsZSB0byByZXR1cm4gdGhlIG9mZnNldCBuYW1lIGluLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBvZmZzZXROYW1lKHRzLCB7IGZvcm1hdCwgbG9jYWxlIH0pIHtcbiAgICByZXR1cm4gcGFyc2Vab25lSW5mbyh0cywgZm9ybWF0LCBsb2NhbGUsIHRoaXMubmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgb2Zmc2V0J3MgdmFsdWUgYXMgYSBzdHJpbmdcbiAgICogQG92ZXJyaWRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0cyAtIEVwb2NoIG1pbGxpc2Vjb25kcyBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBvZmZzZXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCAtIFdoYXQgc3R5bGUgb2Ygb2Zmc2V0IHRvIHJldHVybi5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VwdHMgJ25hcnJvdycsICdzaG9ydCcsIG9yICd0ZWNoaWUnLiBSZXR1cm5pbmcgJys2JywgJyswNjowMCcsIG9yICcrMDYwMCcgcmVzcGVjdGl2ZWx5XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGZvcm1hdE9mZnNldCh0cywgZm9ybWF0KSB7XG4gICAgcmV0dXJuIGZvcm1hdE9mZnNldCh0aGlzLm9mZnNldCh0cyksIGZvcm1hdCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBvZmZzZXQgaW4gbWludXRlcyBmb3IgdGhpcyB6b25lIGF0IHRoZSBzcGVjaWZpZWQgdGltZXN0YW1wLlxuICAgKiBAb3ZlcnJpZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRzIC0gRXBvY2ggbWlsbGlzZWNvbmRzIGZvciB3aGljaCB0byBjb21wdXRlIHRoZSBvZmZzZXRcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgb2Zmc2V0KHRzKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRzKTtcblxuICAgIGlmIChpc05hTihkYXRlKSkgcmV0dXJuIE5hTjtcblxuICAgIGNvbnN0IGR0ZiA9IG1ha2VEVEYodGhpcy5uYW1lKTtcbiAgICBsZXQgW3llYXIsIG1vbnRoLCBkYXksIGFkT3JCYywgaG91ciwgbWludXRlLCBzZWNvbmRdID0gZHRmLmZvcm1hdFRvUGFydHNcbiAgICAgID8gcGFydHNPZmZzZXQoZHRmLCBkYXRlKVxuICAgICAgOiBoYWNreU9mZnNldChkdGYsIGRhdGUpO1xuXG4gICAgaWYgKGFkT3JCYyA9PT0gXCJCQ1wiKSB7XG4gICAgICB5ZWFyID0gLU1hdGguYWJzKHllYXIpICsgMTtcbiAgICB9XG5cbiAgICAvLyBiZWNhdXNlIHdlJ3JlIHVzaW5nIGhvdXIxMiBhbmQgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTAyNTU2NCZjYW49MiZxPSUyMjI0JTNBMDAlMjIlMjBkYXRldGltZWZvcm1hdFxuICAgIGNvbnN0IGFkanVzdGVkSG91ciA9IGhvdXIgPT09IDI0ID8gMCA6IGhvdXI7XG5cbiAgICBjb25zdCBhc1VUQyA9IG9ialRvTG9jYWxUUyh7XG4gICAgICB5ZWFyLFxuICAgICAgbW9udGgsXG4gICAgICBkYXksXG4gICAgICBob3VyOiBhZGp1c3RlZEhvdXIsXG4gICAgICBtaW51dGUsXG4gICAgICBzZWNvbmQsXG4gICAgICBtaWxsaXNlY29uZDogMCxcbiAgICB9KTtcblxuICAgIGxldCBhc1RTID0gK2RhdGU7XG4gICAgY29uc3Qgb3ZlciA9IGFzVFMgJSAxMDAwO1xuICAgIGFzVFMgLT0gb3ZlciA+PSAwID8gb3ZlciA6IDEwMDAgKyBvdmVyO1xuICAgIHJldHVybiAoYXNVVEMgLSBhc1RTKSAvICg2MCAqIDEwMDApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgWm9uZSBpcyBlcXVhbCB0byBhbm90aGVyIHpvbmVcbiAgICogQG92ZXJyaWRlXG4gICAqIEBwYXJhbSB7Wm9uZX0gb3RoZXJab25lIC0gdGhlIHpvbmUgdG8gY29tcGFyZVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZXF1YWxzKG90aGVyWm9uZSkge1xuICAgIHJldHVybiBvdGhlclpvbmUudHlwZSA9PT0gXCJpYW5hXCIgJiYgb3RoZXJab25lLm5hbWUgPT09IHRoaXMubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIFpvbmUgaXMgdmFsaWQuXG4gICAqIEBvdmVycmlkZVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLnZhbGlkO1xuICB9XG59XG4iLCJpbXBvcnQgeyBmb3JtYXRPZmZzZXQsIHNpZ25lZE9mZnNldCB9IGZyb20gXCIuLi9pbXBsL3V0aWwuanNcIjtcbmltcG9ydCBab25lIGZyb20gXCIuLi96b25lLmpzXCI7XG5cbmxldCBzaW5nbGV0b24gPSBudWxsO1xuXG4vKipcbiAqIEEgem9uZSB3aXRoIGEgZml4ZWQgb2Zmc2V0IChtZWFuaW5nIG5vIERTVClcbiAqIEBpbXBsZW1lbnRzIHtab25lfVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaXhlZE9mZnNldFpvbmUgZXh0ZW5kcyBab25lIHtcbiAgLyoqXG4gICAqIEdldCBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiBVVENcbiAgICogQHJldHVybiB7Rml4ZWRPZmZzZXRab25lfVxuICAgKi9cbiAgc3RhdGljIGdldCB1dGNJbnN0YW5jZSgpIHtcbiAgICBpZiAoc2luZ2xldG9uID09PSBudWxsKSB7XG4gICAgICBzaW5nbGV0b24gPSBuZXcgRml4ZWRPZmZzZXRab25lKDApO1xuICAgIH1cbiAgICByZXR1cm4gc2luZ2xldG9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBpbnN0YW5jZSB3aXRoIGEgc3BlY2lmaWVkIG9mZnNldFxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IC0gVGhlIG9mZnNldCBpbiBtaW51dGVzXG4gICAqIEByZXR1cm4ge0ZpeGVkT2Zmc2V0Wm9uZX1cbiAgICovXG4gIHN0YXRpYyBpbnN0YW5jZShvZmZzZXQpIHtcbiAgICByZXR1cm4gb2Zmc2V0ID09PSAwID8gRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlIDogbmV3IEZpeGVkT2Zmc2V0Wm9uZShvZmZzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBpbnN0YW5jZSBvZiBGaXhlZE9mZnNldFpvbmUgZnJvbSBhIFVUQyBvZmZzZXQgc3RyaW5nLCBsaWtlIFwiVVRDKzZcIlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcyAtIFRoZSBvZmZzZXQgc3RyaW5nIHRvIHBhcnNlXG4gICAqIEBleGFtcGxlIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcihcIlVUQys2XCIpXG4gICAqIEBleGFtcGxlIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcihcIlVUQyswNlwiKVxuICAgKiBAZXhhbXBsZSBGaXhlZE9mZnNldFpvbmUucGFyc2VTcGVjaWZpZXIoXCJVVEMtNjowMFwiKVxuICAgKiBAcmV0dXJuIHtGaXhlZE9mZnNldFpvbmV9XG4gICAqL1xuICBzdGF0aWMgcGFyc2VTcGVjaWZpZXIocykge1xuICAgIGlmIChzKSB7XG4gICAgICBjb25zdCByID0gcy5tYXRjaCgvXnV0Yyg/OihbKy1dXFxkezEsMn0pKD86OihcXGR7Mn0pKT8pPyQvaSk7XG4gICAgICBpZiAocikge1xuICAgICAgICByZXR1cm4gbmV3IEZpeGVkT2Zmc2V0Wm9uZShzaWduZWRPZmZzZXQoclsxXSwgclsyXSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG9mZnNldCkge1xuICAgIHN1cGVyKCk7XG4gICAgLyoqIEBwcml2YXRlICoqL1xuICAgIHRoaXMuZml4ZWQgPSBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygem9uZS4gYGZpeGVkYCBmb3IgYWxsIGluc3RhbmNlcyBvZiBgRml4ZWRPZmZzZXRab25lYC5cbiAgICogQG92ZXJyaWRlXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gXCJmaXhlZFwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoaXMgem9uZS5cbiAgICogQWxsIGZpeGVkIHpvbmVzJyBuYW1lcyBhbHdheXMgc3RhcnQgd2l0aCBcIlVUQ1wiIChwbHVzIG9wdGlvbmFsIG9mZnNldClcbiAgICogQG92ZXJyaWRlXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maXhlZCA9PT0gMCA/IFwiVVRDXCIgOiBgVVRDJHtmb3JtYXRPZmZzZXQodGhpcy5maXhlZCwgXCJuYXJyb3dcIil9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgSUFOQSBuYW1lIG9mIHRoaXMgem9uZSwgaS5lLiBgRXRjL1VUQ2Agb3IgYEV0Yy9HTVQrLy1ubmBcbiAgICpcbiAgICogQG92ZXJyaWRlXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaWFuYU5hbWUoKSB7XG4gICAgaWYgKHRoaXMuZml4ZWQgPT09IDApIHtcbiAgICAgIHJldHVybiBcIkV0Yy9VVENcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBFdGMvR01UJHtmb3JtYXRPZmZzZXQoLXRoaXMuZml4ZWQsIFwibmFycm93XCIpfWA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9mZnNldCdzIGNvbW1vbiBuYW1lIGF0IHRoZSBzcGVjaWZpZWQgdGltZXN0YW1wLlxuICAgKlxuICAgKiBGb3IgZml4ZWQgb2Zmc2V0IHpvbmVzIHRoaXMgZXF1YWxzIHRvIHRoZSB6b25lIG5hbWUuXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgb2Zmc2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9mZnNldCdzIHZhbHVlIGFzIGEgc3RyaW5nXG4gICAqIEBvdmVycmlkZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdHMgLSBFcG9jaCBtaWxsaXNlY29uZHMgZm9yIHdoaWNoIHRvIGdldCB0aGUgb2Zmc2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgLSBXaGF0IHN0eWxlIG9mIG9mZnNldCB0byByZXR1cm4uXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRzICduYXJyb3cnLCAnc2hvcnQnLCBvciAndGVjaGllJy4gUmV0dXJuaW5nICcrNicsICcrMDY6MDAnLCBvciAnKzA2MDAnIHJlc3BlY3RpdmVseVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkge1xuICAgIHJldHVybiBmb3JtYXRPZmZzZXQodGhpcy5maXhlZCwgZm9ybWF0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG9mZnNldCBpcyBrbm93biB0byBiZSBmaXhlZCBmb3IgdGhlIHdob2xlIHllYXI6XG4gICAqIEFsd2F5cyByZXR1cm5zIHRydWUgZm9yIGFsbCBmaXhlZCBvZmZzZXQgem9uZXMuXG4gICAqIEBvdmVycmlkZVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1VuaXZlcnNhbCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG9mZnNldCBpbiBtaW51dGVzIGZvciB0aGlzIHpvbmUgYXQgdGhlIHNwZWNpZmllZCB0aW1lc3RhbXAuXG4gICAqXG4gICAqIEZvciBmaXhlZCBvZmZzZXQgem9uZXMsIHRoaXMgaXMgY29uc3RhbnQgYW5kIGRvZXMgbm90IGRlcGVuZCBvbiBhIHRpbWVzdGFtcC5cbiAgICogQG92ZXJyaWRlXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIG9mZnNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5maXhlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIFpvbmUgaXMgZXF1YWwgdG8gYW5vdGhlciB6b25lIChpLmUuIGFsc28gZml4ZWQgYW5kIHNhbWUgb2Zmc2V0KVxuICAgKiBAb3ZlcnJpZGVcbiAgICogQHBhcmFtIHtab25lfSBvdGhlclpvbmUgLSB0aGUgem9uZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBlcXVhbHMob3RoZXJab25lKSB7XG4gICAgcmV0dXJuIG90aGVyWm9uZS50eXBlID09PSBcImZpeGVkXCIgJiYgb3RoZXJab25lLmZpeGVkID09PSB0aGlzLmZpeGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgWm9uZSBpcyB2YWxpZDpcbiAgICogQWxsIGZpeGVkIG9mZnNldCB6b25lcyBhcmUgdmFsaWQuXG4gICAqIEBvdmVycmlkZVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iLCJpbXBvcnQgWm9uZSBmcm9tIFwiLi4vem9uZS5qc1wiO1xuXG4vKipcbiAqIEEgem9uZSB0aGF0IGZhaWxlZCB0byBwYXJzZS4gWW91IHNob3VsZCBuZXZlciBuZWVkIHRvIGluc3RhbnRpYXRlIHRoaXMuXG4gKiBAaW1wbGVtZW50cyB7Wm9uZX1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW52YWxpZFpvbmUgZXh0ZW5kcyBab25lIHtcbiAgY29uc3RydWN0b3Ioem9uZU5hbWUpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qKiAgQHByaXZhdGUgKi9cbiAgICB0aGlzLnpvbmVOYW1lID0gem9uZU5hbWU7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gXCJpbnZhbGlkXCI7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy56b25lTmFtZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBpc1VuaXZlcnNhbCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBvZmZzZXROYW1lKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZm9ybWF0T2Zmc2V0KCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0KCkge1xuICAgIHJldHVybiBOYU47XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBlcXVhbHMoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCJpbXBvcnQgeyBmb3JtYXRPZmZzZXQsIHBhcnNlWm9uZUluZm8gfSBmcm9tIFwiLi4vaW1wbC91dGlsLmpzXCI7XG5pbXBvcnQgWm9uZSBmcm9tIFwiLi4vem9uZS5qc1wiO1xuXG5sZXQgc2luZ2xldG9uID0gbnVsbDtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBsb2NhbCB6b25lIGZvciB0aGlzIEphdmFTY3JpcHQgZW52aXJvbm1lbnQuXG4gKiBAaW1wbGVtZW50cyB7Wm9uZX1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3lzdGVtWm9uZSBleHRlbmRzIFpvbmUge1xuICAvKipcbiAgICogR2V0IGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBsb2NhbCB6b25lXG4gICAqIEByZXR1cm4ge1N5c3RlbVpvbmV9XG4gICAqL1xuICBzdGF0aWMgZ2V0IGluc3RhbmNlKCkge1xuICAgIGlmIChzaW5nbGV0b24gPT09IG51bGwpIHtcbiAgICAgIHNpbmdsZXRvbiA9IG5ldyBTeXN0ZW1ab25lKCk7XG4gICAgfVxuICAgIHJldHVybiBzaW5nbGV0b247XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gXCJzeXN0ZW1cIjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IGlzVW5pdmVyc2FsKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldE5hbWUodHMsIHsgZm9ybWF0LCBsb2NhbGUgfSkge1xuICAgIHJldHVybiBwYXJzZVpvbmVJbmZvKHRzLCBmb3JtYXQsIGxvY2FsZSk7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkge1xuICAgIHJldHVybiBmb3JtYXRPZmZzZXQodGhpcy5vZmZzZXQodHMpLCBmb3JtYXQpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0KHRzKSB7XG4gICAgcmV0dXJuIC1uZXcgRGF0ZSh0cykuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGVxdWFscyhvdGhlclpvbmUpIHtcbiAgICByZXR1cm4gb3RoZXJab25lLnR5cGUgPT09IFwic3lzdGVtXCI7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0bG9hZGVkOiBmYWxzZSxcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG5cdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm5tZCA9IChtb2R1bGUpID0+IHtcblx0bW9kdWxlLnBhdGhzID0gW107XG5cdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0cmV0dXJuIG1vZHVsZTtcbn07IiwiaW1wb3J0IHsgSG9tZSB9IGZyb20gXCJAb3BlbmZpbi93b3Jrc3BhY2VcIjtcbmltcG9ydCB7IGluaXQgfSBmcm9tIFwiQG9wZW5maW4vd29ya3NwYWNlLXBsYXRmb3JtXCI7XG5pbXBvcnQgeyByZWdpc3RlciB9IGZyb20gXCIuL2hvbWVcIjtcblxuY29uc3QgUExBVEZPUk1fSUQgPSBcImN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlc1wiO1xuY29uc3QgUExBVEZPUk1fVElUTEUgPSBcIkN1c3RvbWl6ZSBIb21lIFRlbXBsYXRlc1wiO1xuY29uc3QgUExBVEZPUk1fSUNPTiA9IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2Zhdmljb24uaWNvXCI7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBhc3luYyAoKSA9PiB7XG5cdC8vIFdoZW4gdGhlIHBsYXRmb3JtIGFwaSBpcyByZWFkeSB3ZSBib290c3RyYXAgdGhlIHBsYXRmb3JtLlxuXHRjb25zdCBwbGF0Zm9ybSA9IGZpbi5QbGF0Zm9ybS5nZXRDdXJyZW50U3luYygpO1xuXHRhd2FpdCBwbGF0Zm9ybS5vbmNlKFwicGxhdGZvcm0tYXBpLXJlYWR5XCIsIGFzeW5jICgpID0+IGluaXRpYWxpemVXb3Jrc3BhY2VDb21wb25lbnRzKCkpO1xuXG5cdC8vIFRoZSBET00gaXMgcmVhZHkgc28gaW5pdGlhbGl6ZSB0aGUgcGxhdGZvcm1cblx0Ly8gUHJvdmlkZSBkZWZhdWx0IGljb25zIGFuZCBkZWZhdWx0IHRoZW1lIGZvciB0aGUgYnJvd3NlciB3aW5kb3dzXG5cdGF3YWl0IGluaXRpYWxpemVXb3Jrc3BhY2VQbGF0Zm9ybSgpO1xufSk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSB0aGUgd29ya3NwYWNlIHBsYXRmb3JtLlxuICovXG5hc3luYyBmdW5jdGlvbiBpbml0aWFsaXplV29ya3NwYWNlUGxhdGZvcm0oKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnNvbGUubG9nKFwiSW5pdGlhbGl6aW5nIHdvcmtzcGFjZSBwbGF0Zm9ybVwiKTtcblx0YXdhaXQgaW5pdCh7XG5cdFx0YnJvd3Nlcjoge1xuXHRcdFx0ZGVmYXVsdFdpbmRvd09wdGlvbnM6IHtcblx0XHRcdFx0aWNvbjogUExBVEZPUk1fSUNPTixcblx0XHRcdFx0d29ya3NwYWNlUGxhdGZvcm06IHtcblx0XHRcdFx0XHRwYWdlczogW10sXG5cdFx0XHRcdFx0ZmF2aWNvbjogUExBVEZPUk1fSUNPTlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR0aGVtZTogW1xuXHRcdFx0e1xuXHRcdFx0XHRsYWJlbDogXCJEZWZhdWx0XCIsXG5cdFx0XHRcdGRlZmF1bHQ6IFwiZGFya1wiLFxuXHRcdFx0XHRwYWxldHRlOiB7XG5cdFx0XHRcdFx0YnJhbmRQcmltYXJ5OiBcIiMwQTc2RDNcIixcblx0XHRcdFx0XHRicmFuZFNlY29uZGFyeTogXCIjMzgzQTQwXCIsXG5cdFx0XHRcdFx0YmFja2dyb3VuZFByaW1hcnk6IFwiIzFFMUYyM1wiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH0pO1xufVxuXG4vKipcbiAqIEJyaW5nIHRoZSBwbGF0Zm9ybSB0byBsaWZlLlxuICovXG5hc3luYyBmdW5jdGlvbiBpbml0aWFsaXplV29ya3NwYWNlQ29tcG9uZW50cygpOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc29sZS5sb2coXCJJbml0aWFsaXppbmcgdGhlIHdvcmtzcGFjZSBjb21wb25lbnRzXCIpO1xuXG5cdC8vIFJlZ2lzdGVyIHdpdGggaG9tZSBhbmQgc2hvdyBpdFxuXHRhd2FpdCByZWdpc3RlcihQTEFURk9STV9JRCwgUExBVEZPUk1fVElUTEUsIFBMQVRGT1JNX0lDT04pO1xuXHRhd2FpdCBIb21lLnNob3coKTtcblxuXHQvLyBXaGVuIHRoZSBwbGF0Zm9ybSByZXF1ZXN0cyB0byBiZSBjbG9zZWQgd2UgZGVyZWdpc3RlciBmcm9tIGhvbWUgYW5kIHF1aXRcblx0Y29uc3QgcHJvdmlkZXJXaW5kb3cgPSBmaW4uV2luZG93LmdldEN1cnJlbnRTeW5jKCk7XG5cdGF3YWl0IHByb3ZpZGVyV2luZG93Lm9uY2UoXCJjbG9zZS1yZXF1ZXN0ZWRcIiwgYXN5bmMgKCkgPT4ge1xuXHRcdGF3YWl0IEhvbWUuZGVyZWdpc3RlcihQTEFURk9STV9JRCk7XG5cdFx0YXdhaXQgZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkucXVpdCgpO1xuXHR9KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTs7QUFFQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxTQUFTO0FBQzNDLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxpQkFBaUI7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QUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHlEQUFRO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsV0FBVztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkU7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLFVBQVU7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsU0FBUztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsVUFBVTtBQUM3RDtBQUNBO0FBQ0EsNEJBQTRCLDZEQUFZO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksNkRBQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsVUFBVTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxVQUFVO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDZEQUFhO0FBQ3JCO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw2REFBTztBQUNmO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsVUFBVTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZEQUFJO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLGdCQUFnQjtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkMsZ0JBQWdCLGlDQUFpQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QyxVQUFVO0FBQ3ZEO0FBQ0E7QUFDQSw2Q0FBNkMsNkRBQWdCO0FBQzdELG1DQUFtQyw2REFBZ0I7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsdUJBQXVCLGFBQWE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGtDQUFrQztBQUNsRCwyQkFBMkIsbUJBQW1CO0FBQzlDO0FBQ0EscUNBQXFDLDZEQUFhO0FBQ2xEO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsVUFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDZEQUFhO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxVQUFVO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGVBQWUsMkNBQTJDLGFBQWEscUNBQXFDO0FBQzVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQiw2REFBSSxZQUFZLDZEQUFJO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLDZEQUFhO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2Qiw2REFBSTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLDZEQUFjO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxVQUFVO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBLGdDQUFnQyw2REFBYztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBLGdDQUFnQyw2REFBYztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsUUFBUTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQyxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0E7QUFDQSwyQkFBMkIsbUJBQW1CO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsNkRBQWM7QUFDdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IseURBQUc7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLDZEQUFhO0FBQ3BELHVDQUF1Qyw2REFBYTtBQUNwRDtBQUNBLDZCQUE2Qix5REFBTztBQUNwQyw2QkFBNkIseURBQUU7QUFDL0IsNkJBQTZCLHlEQUFFLEdBQUcseURBQU87QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxVQUFVLHlCQUF5QjtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsZ0JBQWdCLDZEQUFRO0FBQ3hCLHdCQUF3QixnQkFBZ0I7QUFDeEMsK0JBQStCLDZEQUFnQjtBQUMvQztBQUNBO0FBQ0EsaURBQWlELFVBQVU7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkRBQVM7QUFDeEI7QUFDQTtBQUNBLGVBQWUsNkRBQVM7QUFDeEI7QUFDQTtBQUNBLGtCQUFrQix5REFBRztBQUNyQixtQkFBbUIseURBQUc7QUFDdEIsdUJBQXVCLHFDQUFxQztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsYUFBYTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyw2REFBWTtBQUM1QztBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUMsZ0JBQWdCLHVDQUF1QztBQUN2RDtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsNkRBQVc7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkUseURBQUc7QUFDaEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGtDQUFrQztBQUNsRDtBQUNBO0FBQ0EsbUJBQW1CLFdBQVc7QUFDOUI7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixxQkFBcUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIseURBQUc7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsNkRBQVk7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQsVUFBVTtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLFVBQVU7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLFVBQVU7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsa0JBQWtCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDZEQUFjO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixnREFBZ0Q7QUFDaEU7QUFDQSxjQUFjLGlCQUFpQixFQUFFLDZEQUFnQztBQUNqRTtBQUNBO0FBQ0EsWUFBWSw2REFBbUI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHlDQUF5QztBQUN6RCxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0E7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDLDZCQUE2Qiw2REFBUTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsNkRBQWE7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxVQUFVLHlCQUF5QjtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDZEQUFZO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUseURBQTJCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRSx5REFBRTtBQUNuRTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsV0FBVztBQUM5QjtBQUNBO0FBQ0EsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCw2REFBUztBQUM5RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHlEQUEyQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsbUJBQW1CO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGFBQWE7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLFVBQVU7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLFVBQVU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRSt0QjtBQUMvdEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3p0V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3NDOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixRQUFRO0FBQ3JDO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxtQkFBbUIsU0FBUztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLFVBQVU7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsVUFBVTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsVUFBVTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLFVBQVU7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxVQUFVO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0EsZ0JBQWdCLHVDQUF1QztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQSxZQUFZLGtDQUFrQztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxnREFBSztBQUN6RDtBQUNBO0FBQ0Esb0RBQW9ELGdEQUFLO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQztBQUMvQztBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLDRDQUE0QyxVQUFVO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsV0FBVztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0JBQWtCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksMEJBQTBCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLFVBQVU7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksYUFBYTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLGlDQUFpQztBQUNqQyxvQ0FBb0M7QUFDcEM7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRCxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLGdDQUFnQztBQUNoQztBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLGlDQUFpQztBQUNqQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxZQUFZLGtHQUFrRztBQUM5RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSw2REFBNkQ7QUFDekUsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDBDQUEwQztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksNkRBQTZEO0FBQ3pFO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksVUFBVTtBQUN0QixZQUFZLFlBQVk7QUFDeEI7QUFDQTtBQUNBLDZCQUE2QixVQUFVO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsZUFBZTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixVQUFVO0FBQ3pDLCtCQUErQixVQUFVO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixVQUFVO0FBQ3pDLCtCQUErQixVQUFVO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxlQUFlO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLFVBQVU7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EseUNBQXlDLFVBQVU7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtFQUFrRTtBQUNsRTtBQUNBLGNBQWMsK0NBQStDO0FBQzdELGNBQWMsbUNBQW1DO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLG9DQUFvQztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksZUFBZTtBQUMzQjtBQUNBO0FBQ0EsVUFBVSxrQkFBa0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsa0JBQWtCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsYUFBYTtBQUM5QyxnQ0FBZ0MsWUFBWTtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixxQ0FBcUM7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksZ0RBQWdEO0FBQzVELFlBQVksdUJBQXVCO0FBQ25DO0FBQ0EsVUFBVSxzQkFBc0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsVUFBVTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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RyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9Ab3BlbmZpbi93b3Jrc3BhY2UtcGxhdGZvcm0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvQG9wZW5maW4vd29ya3NwYWNlL2luZGV4LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fRGF0YVZpZXcuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19Qcm9taXNlLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheU1hcC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FzY2lpVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYXRpdmUuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUtleXMuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5hcnkuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVmFsdWVzLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXROYXRpdmUuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRSYXdUYWcuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRUYWcuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRWYWx1ZS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc1VuaWNvZGUuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2l0ZXJhdG9yVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbm9kZVV0aWwuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9BcnJheS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3VuaWNvZGVUb0FycmF5LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0xlbmd0aC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTdHJpbmcuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5cy5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b0FycmF5LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1lbW9qaS9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9ub2RlLWVtb2ppL2xpYi9lbW9qaS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4vY2xpZW50L3NyYy9ob21lLnRzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi9jbGllbnQvc3JjL3NvdXJjZXMudHMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uL2NsaWVudC9zcmMvc291cmNlcy9hc3luYy1jb250YWN0cy9hc3luYy1jb250YWN0cy1zb3VyY2UudHMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uL2NsaWVudC9zcmMvc291cmNlcy9lbW9qaS9lbW9qaS1zb3VyY2UudHMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uL2NsaWVudC9zcmMvc291cmNlcy9xdW90ZS9xdW90ZS1zb3VyY2UudHMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uL2NsaWVudC9zcmMvc291cmNlcy9zdWdnZXN0aW9ucy9zdWdnZXN0aW9uLXNvdXJjZS50cyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4vY2xpZW50L3NyYy9zb3VyY2VzL3RlbXBsYXRlLXR5cGVzL3RlbXBsYXRlLXR5cGVzLXNvdXJjZS50cyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4vY2xpZW50L3NyYy9zb3VyY2VzL3RyZWUtaW5saW5lL3RyZWUtaW5saW5lLXNvdXJjZS50cyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4vY2xpZW50L3NyYy9zb3VyY2VzL3RyZWUtcXVlcnkvdHJlZS1xdWVyeS1zb3VyY2UudHMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvQGt1cmtsZS9jb2xvci9kaXN0L2NvbG9yLmVzbS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9kaXN0L2NoYXJ0LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL2Rpc3QvY2h1bmtzL2hlbHBlcnMuc2VnbWVudC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvZGF0ZXRpbWUuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2R1cmF0aW9uLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9lcnJvcnMuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvY29udmVyc2lvbnMuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvZGlmZi5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9kaWdpdHMuanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvZW5nbGlzaC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9mb3JtYXRzLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbXBsL2Zvcm1hdHRlci5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9pbnZhbGlkLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbXBsL2xvY2FsZS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9yZWdleFBhcnNlci5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC90b2tlblBhcnNlci5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC91dGlsLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbXBsL3pvbmVVdGlsLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbmZvLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbnRlcnZhbC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvbHV4b24uanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy8uLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL3NldHRpbmdzLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy96b25lLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy96b25lcy9JQU5BWm9uZS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvem9uZXMvZml4ZWRPZmZzZXRab25lLmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy96b25lcy9pbnZhbGlkWm9uZS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzLy4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvem9uZXMvc3lzdGVtWm9uZS5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tY3VzdG9taXplLWhvbWUtdGVtcGxhdGVzL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLWN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlcy93ZWJwYWNrL3J1bnRpbWUvbm9kZSBtb2R1bGUgZGVjb3JhdG9yIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1jdXN0b21pemUtaG9tZS10ZW1wbGF0ZXMvLi9jbGllbnQvc3JjL3Byb3ZpZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISBGb3IgbGljZW5zZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIGluZGV4LmpzLkxJQ0VOU0UudHh0ICovXG4oKCk9Pnt2YXIgZT17MzA0OihlLHQsbik9Pnt2YXIgcj17ODU5NDooZSx0LG4pPT57bi5kKHQse1o6KCk9Pm99KTt2YXIgcj0vXigoY2hpbGRyZW58ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUx8a2V5fHJlZnxhdXRvRm9jdXN8ZGVmYXVsdFZhbHVlfGRlZmF1bHRDaGVja2VkfGlubmVySFRNTHxzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmd8c3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nfHZhbHVlTGlua3xhY2NlcHR8YWNjZXB0Q2hhcnNldHxhY2Nlc3NLZXl8YWN0aW9ufGFsbG93fGFsbG93VXNlck1lZGlhfGFsbG93UGF5bWVudFJlcXVlc3R8YWxsb3dGdWxsU2NyZWVufGFsbG93VHJhbnNwYXJlbmN5fGFsdHxhc3luY3xhdXRvQ29tcGxldGV8YXV0b1BsYXl8Y2FwdHVyZXxjZWxsUGFkZGluZ3xjZWxsU3BhY2luZ3xjaGFsbGVuZ2V8Y2hhclNldHxjaGVja2VkfGNpdGV8Y2xhc3NJRHxjbGFzc05hbWV8Y29sc3xjb2xTcGFufGNvbnRlbnR8Y29udGVudEVkaXRhYmxlfGNvbnRleHRNZW51fGNvbnRyb2xzfGNvbnRyb2xzTGlzdHxjb29yZHN8Y3Jvc3NPcmlnaW58ZGF0YXxkYXRlVGltZXxkZWNvZGluZ3xkZWZhdWx0fGRlZmVyfGRpcnxkaXNhYmxlZHxkaXNhYmxlUGljdHVyZUluUGljdHVyZXxkb3dubG9hZHxkcmFnZ2FibGV8ZW5jVHlwZXxmb3JtfGZvcm1BY3Rpb258Zm9ybUVuY1R5cGV8Zm9ybU1ldGhvZHxmb3JtTm9WYWxpZGF0ZXxmb3JtVGFyZ2V0fGZyYW1lQm9yZGVyfGhlYWRlcnN8aGVpZ2h0fGhpZGRlbnxoaWdofGhyZWZ8aHJlZkxhbmd8aHRtbEZvcnxodHRwRXF1aXZ8aWR8aW5wdXRNb2RlfGludGVncml0eXxpc3xrZXlQYXJhbXN8a2V5VHlwZXxraW5kfGxhYmVsfGxhbmd8bGlzdHxsb2FkaW5nfGxvb3B8bG93fG1hcmdpbkhlaWdodHxtYXJnaW5XaWR0aHxtYXh8bWF4TGVuZ3RofG1lZGlhfG1lZGlhR3JvdXB8bWV0aG9kfG1pbnxtaW5MZW5ndGh8bXVsdGlwbGV8bXV0ZWR8bmFtZXxub25jZXxub1ZhbGlkYXRlfG9wZW58b3B0aW11bXxwYXR0ZXJufHBsYWNlaG9sZGVyfHBsYXlzSW5saW5lfHBvc3RlcnxwcmVsb2FkfHByb2ZpbGV8cmFkaW9Hcm91cHxyZWFkT25seXxyZWZlcnJlclBvbGljeXxyZWx8cmVxdWlyZWR8cmV2ZXJzZWR8cm9sZXxyb3dzfHJvd1NwYW58c2FuZGJveHxzY29wZXxzY29wZWR8c2Nyb2xsaW5nfHNlYW1sZXNzfHNlbGVjdGVkfHNoYXBlfHNpemV8c2l6ZXN8c2xvdHxzcGFufHNwZWxsQ2hlY2t8c3JjfHNyY0RvY3xzcmNMYW5nfHNyY1NldHxzdGFydHxzdGVwfHN0eWxlfHN1bW1hcnl8dGFiSW5kZXh8dGFyZ2V0fHRpdGxlfHR5cGV8dXNlTWFwfHZhbHVlfHdpZHRofHdtb2RlfHdyYXB8YWJvdXR8ZGF0YXR5cGV8aW5saXN0fHByZWZpeHxwcm9wZXJ0eXxyZXNvdXJjZXx0eXBlb2Z8dm9jYWJ8YXV0b0NhcGl0YWxpemV8YXV0b0NvcnJlY3R8YXV0b1NhdmV8Y29sb3J8aW5lcnR8aXRlbVByb3B8aXRlbVNjb3BlfGl0ZW1UeXBlfGl0ZW1JRHxpdGVtUmVmfG9ufHJlc3VsdHN8c2VjdXJpdHl8dW5zZWxlY3RhYmxlfGFjY2VudEhlaWdodHxhY2N1bXVsYXRlfGFkZGl0aXZlfGFsaWdubWVudEJhc2VsaW5lfGFsbG93UmVvcmRlcnxhbHBoYWJldGljfGFtcGxpdHVkZXxhcmFiaWNGb3JtfGFzY2VudHxhdHRyaWJ1dGVOYW1lfGF0dHJpYnV0ZVR5cGV8YXV0b1JldmVyc2V8YXppbXV0aHxiYXNlRnJlcXVlbmN5fGJhc2VsaW5lU2hpZnR8YmFzZVByb2ZpbGV8YmJveHxiZWdpbnxiaWFzfGJ5fGNhbGNNb2RlfGNhcEhlaWdodHxjbGlwfGNsaXBQYXRoVW5pdHN8Y2xpcFBhdGh8Y2xpcFJ1bGV8Y29sb3JJbnRlcnBvbGF0aW9ufGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnN8Y29sb3JQcm9maWxlfGNvbG9yUmVuZGVyaW5nfGNvbnRlbnRTY3JpcHRUeXBlfGNvbnRlbnRTdHlsZVR5cGV8Y3Vyc29yfGN4fGN5fGR8ZGVjZWxlcmF0ZXxkZXNjZW50fGRpZmZ1c2VDb25zdGFudHxkaXJlY3Rpb258ZGlzcGxheXxkaXZpc29yfGRvbWluYW50QmFzZWxpbmV8ZHVyfGR4fGR5fGVkZ2VNb2RlfGVsZXZhdGlvbnxlbmFibGVCYWNrZ3JvdW5kfGVuZHxleHBvbmVudHxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkfGZpbGx8ZmlsbE9wYWNpdHl8ZmlsbFJ1bGV8ZmlsdGVyfGZpbHRlclJlc3xmaWx0ZXJVbml0c3xmbG9vZENvbG9yfGZsb29kT3BhY2l0eXxmb2N1c2FibGV8Zm9udEZhbWlseXxmb250U2l6ZXxmb250U2l6ZUFkanVzdHxmb250U3RyZXRjaHxmb250U3R5bGV8Zm9udFZhcmlhbnR8Zm9udFdlaWdodHxmb3JtYXR8ZnJvbXxmcnxmeHxmeXxnMXxnMnxnbHlwaE5hbWV8Z2x5cGhPcmllbnRhdGlvbkhvcml6b250YWx8Z2x5cGhPcmllbnRhdGlvblZlcnRpY2FsfGdseXBoUmVmfGdyYWRpZW50VHJhbnNmb3JtfGdyYWRpZW50VW5pdHN8aGFuZ2luZ3xob3JpekFkdlh8aG9yaXpPcmlnaW5YfGlkZW9ncmFwaGljfGltYWdlUmVuZGVyaW5nfGlufGluMnxpbnRlcmNlcHR8a3xrMXxrMnxrM3xrNHxrZXJuZWxNYXRyaXh8a2VybmVsVW5pdExlbmd0aHxrZXJuaW5nfGtleVBvaW50c3xrZXlTcGxpbmVzfGtleVRpbWVzfGxlbmd0aEFkanVzdHxsZXR0ZXJTcGFjaW5nfGxpZ2h0aW5nQ29sb3J8bGltaXRpbmdDb25lQW5nbGV8bG9jYWx8bWFya2VyRW5kfG1hcmtlck1pZHxtYXJrZXJTdGFydHxtYXJrZXJIZWlnaHR8bWFya2VyVW5pdHN8bWFya2VyV2lkdGh8bWFza3xtYXNrQ29udGVudFVuaXRzfG1hc2tVbml0c3xtYXRoZW1hdGljYWx8bW9kZXxudW1PY3RhdmVzfG9mZnNldHxvcGFjaXR5fG9wZXJhdG9yfG9yZGVyfG9yaWVudHxvcmllbnRhdGlvbnxvcmlnaW58b3ZlcmZsb3d8b3ZlcmxpbmVQb3NpdGlvbnxvdmVybGluZVRoaWNrbmVzc3xwYW5vc2UxfHBhaW50T3JkZXJ8cGF0aExlbmd0aHxwYXR0ZXJuQ29udGVudFVuaXRzfHBhdHRlcm5UcmFuc2Zvcm18cGF0dGVyblVuaXRzfHBvaW50ZXJFdmVudHN8cG9pbnRzfHBvaW50c0F0WHxwb2ludHNBdFl8cG9pbnRzQXRafHByZXNlcnZlQWxwaGF8cHJlc2VydmVBc3BlY3RSYXRpb3xwcmltaXRpdmVVbml0c3xyfHJhZGl1c3xyZWZYfHJlZll8cmVuZGVyaW5nSW50ZW50fHJlcGVhdENvdW50fHJlcGVhdER1cnxyZXF1aXJlZEV4dGVuc2lvbnN8cmVxdWlyZWRGZWF0dXJlc3xyZXN0YXJ0fHJlc3VsdHxyb3RhdGV8cnh8cnl8c2NhbGV8c2VlZHxzaGFwZVJlbmRlcmluZ3xzbG9wZXxzcGFjaW5nfHNwZWN1bGFyQ29uc3RhbnR8c3BlY3VsYXJFeHBvbmVudHxzcGVlZHxzcHJlYWRNZXRob2R8c3RhcnRPZmZzZXR8c3RkRGV2aWF0aW9ufHN0ZW1ofHN0ZW12fHN0aXRjaFRpbGVzfHN0b3BDb2xvcnxzdG9wT3BhY2l0eXxzdHJpa2V0aHJvdWdoUG9zaXRpb258c3RyaWtldGhyb3VnaFRoaWNrbmVzc3xzdHJpbmd8c3Ryb2tlfHN0cm9rZURhc2hhcnJheXxzdHJva2VEYXNob2Zmc2V0fHN0cm9rZUxpbmVjYXB8c3Ryb2tlTGluZWpvaW58c3Ryb2tlTWl0ZXJsaW1pdHxzdHJva2VPcGFjaXR5fHN0cm9rZVdpZHRofHN1cmZhY2VTY2FsZXxzeXN0ZW1MYW5ndWFnZXx0YWJsZVZhbHVlc3x0YXJnZXRYfHRhcmdldFl8dGV4dEFuY2hvcnx0ZXh0RGVjb3JhdGlvbnx0ZXh0UmVuZGVyaW5nfHRleHRMZW5ndGh8dG98dHJhbnNmb3JtfHUxfHUyfHVuZGVybGluZVBvc2l0aW9ufHVuZGVybGluZVRoaWNrbmVzc3x1bmljb2RlfHVuaWNvZGVCaWRpfHVuaWNvZGVSYW5nZXx1bml0c1BlckVtfHZBbHBoYWJldGljfHZIYW5naW5nfHZJZGVvZ3JhcGhpY3x2TWF0aGVtYXRpY2FsfHZhbHVlc3x2ZWN0b3JFZmZlY3R8dmVyc2lvbnx2ZXJ0QWR2WXx2ZXJ0T3JpZ2luWHx2ZXJ0T3JpZ2luWXx2aWV3Qm94fHZpZXdUYXJnZXR8dmlzaWJpbGl0eXx3aWR0aHN8d29yZFNwYWNpbmd8d3JpdGluZ01vZGV8eHx4SGVpZ2h0fHgxfHgyfHhDaGFubmVsU2VsZWN0b3J8eGxpbmtBY3R1YXRlfHhsaW5rQXJjcm9sZXx4bGlua0hyZWZ8eGxpbmtSb2xlfHhsaW5rU2hvd3x4bGlua1RpdGxlfHhsaW5rVHlwZXx4bWxCYXNlfHhtbG5zfHhtbG5zWGxpbmt8eG1sTGFuZ3x4bWxTcGFjZXx5fHkxfHkyfHlDaGFubmVsU2VsZWN0b3J8enx6b29tQW5kUGFufGZvcnxjbGFzc3xhdXRvZm9jdXMpfCgoW0RkXVtBYV1bVHRdW0FhXXxbQWFdW1JyXVtJaV1bQWFdfHgpLS4qKSkkLztjb25zdCBvPShhPXt9LGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1hW2VdJiYoYVtlXT0odD1lLHIudGVzdCh0KXx8MTExPT09dC5jaGFyQ29kZUF0KDApJiYxMTA9PT10LmNoYXJDb2RlQXQoMSkmJnQuY2hhckNvZGVBdCgyKTw5MSkpLGFbZV07dmFyIHR9KTt2YXIgYX0sMTUyMTooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtBY3Rpdml0eUxvZ0ljb246KCk9PmEsQWxpZ25CYXNlbGluZUljb246KCk9PmksQWxpZ25Cb3R0b21JY29uOigpPT5sLEFsaWduQ2VudGVySG9yaXpvbnRhbGx5SWNvbjooKT0+cyxBbGlnbkNlbnRlclZlcnRpY2FsbHlJY29uOigpPT5jLEFsaWduTGVmdEljb246KCk9PnUsQWxpZ25SaWdodEljb246KCk9PmQsQWxpZ25Ub3BJY29uOigpPT5wLEFsbFNpZGVzSWNvbjooKT0+ZixBbmdsZUljb246KCk9PmgsQXJjaGl2ZUljb246KCk9PmcsQXJyb3dCb3R0b21MZWZ0SWNvbjooKT0+dixBcnJvd0JvdHRvbVJpZ2h0SWNvbjooKT0+QyxBcnJvd0Rvd25JY29uOigpPT5tLEFycm93TGVmdEljb246KCk9PncsQXJyb3dSaWdodEljb246KCk9PmIsQXJyb3dUb3BMZWZ0SWNvbjooKT0+eSxBcnJvd1RvcFJpZ2h0SWNvbjooKT0+eCxBcnJvd1VwSWNvbjooKT0+ayxBc3BlY3RSYXRpb0ljb246KCk9PlMsQXZhdGFySWNvbjooKT0+TyxCYWNrcGFja0ljb246KCk9Pk0sQmFkZ2VJY29uOigpPT5MLEJhckNoYXJ0SWNvbjooKT0+XyxCZWxsSWNvbjooKT0+UCxCbGVuZGluZ01vZGVJY29uOigpPT5FLEJvb2ttYXJrSWNvbjooKT0+aixCb3JkZXJBbGxJY29uOigpPT5SLEJvcmRlckJvdHRvbUljb246KCk9PkksQm9yZGVyRGFzaGVkSWNvbjooKT0+VixCb3JkZXJEb3R0ZWRJY29uOigpPT5ILEJvcmRlckxlZnRJY29uOigpPT5BLEJvcmRlck5vbmVJY29uOigpPT5ULEJvcmRlclJpZ2h0SWNvbjooKT0+RCxCb3JkZXJTb2xpZEljb246KCk9PkIsQm9yZGVyU3BsaXRJY29uOigpPT5aLEJvcmRlclN0eWxlSWNvbjooKT0+JCxCb3JkZXJUb3BJY29uOigpPT5OLEJveEljb246KCk9PkYsQm94TW9kZWxJY29uOigpPT5XLEJ1dHRvbkljb246KCk9PlUsQ2FsZW5kYXJJY29uOigpPT56LENhbWVyYUljb246KCk9PkcsQ2FyZFN0YWNrSWNvbjooKT0+SyxDYXJkU3RhY2tNaW51c0ljb246KCk9PnEsQ2FyZFN0YWNrUGx1c0ljb246KCk9PlksQ2FyZXREb3duSWNvbjooKT0+SixDYXJldExlZnRJY29uOigpPT5YLENhcmV0UmlnaHRJY29uOigpPT5RLENhcmV0U29ydEljb246KCk9PmVlLENhcmV0VXBJY29uOigpPT50ZSxDaGF0QnViYmxlSWNvbjooKT0+bmUsQ2hlY2tDaXJjbGVkSWNvbjooKT0+b2UsQ2hlY2tJY29uOigpPT5yZSxDaGVja2JveEljb246KCk9PmFlLENoZXZyb25Eb3duSWNvbjooKT0+aWUsQ2hldnJvbkxlZnRJY29uOigpPT5sZSxDaGV2cm9uUmlnaHRJY29uOigpPT5zZSxDaGV2cm9uVXBJY29uOigpPT5jZSxDaXJjbGVCYWNrc2xhc2hJY29uOigpPT5kZSxDaXJjbGVJY29uOigpPT51ZSxDbGlwYm9hcmRDb3B5SWNvbjooKT0+ZmUsQ2xpcGJvYXJkSWNvbjooKT0+cGUsQ2xvY2tJY29uOigpPT5oZSxDb2RlSWNvbjooKT0+Z2UsQ29kZVNhbmRib3hMb2dvSWNvbjooKT0+dmUsQ29sdW1uU3BhY2luZ0ljb246KCk9PkNlLENvbHVtbnNJY29uOigpPT5tZSxDb21taXRJY29uOigpPT53ZSxDb21wb25lbnQxSWNvbjooKT0+YmUsQ29tcG9uZW50Mkljb246KCk9PnllLENvbXBvbmVudEJvb2xlYW5JY29uOigpPT54ZSxDb21wb25lbnRJbnN0YW5jZUljb246KCk9PmtlLENvbXBvbmVudE5vbmVJY29uOigpPT5TZSxDb21wb25lbnRQbGFjZWhvbGRlckljb246KCk9Pk9lLENvbnRhaW5lckljb246KCk9Pk1lLENvb2tpZUljb246KCk9PkxlLENvcHlJY29uOigpPT5fZSxDb3JuZXJCb3R0b21MZWZ0SWNvbjooKT0+UGUsQ29ybmVyQm90dG9tUmlnaHRJY29uOigpPT5FZSxDb3JuZXJUb3BMZWZ0SWNvbjooKT0+amUsQ29ybmVyVG9wUmlnaHRJY29uOigpPT5SZSxDb3JuZXJzSWNvbjooKT0+SWUsQ291bnRkb3duVGltZXJJY29uOigpPT5WZSxDb3VudGVyQ2xvY2t3aXNlQ2xvY2tJY29uOigpPT5IZSxDcm9wSWNvbjooKT0+QWUsQ3Jvc3MxSWNvbjooKT0+VGUsQ3Jvc3MySWNvbjooKT0+RGUsQ3Jvc3NDaXJjbGVkSWNvbjooKT0+QmUsQ3Jvc3NoYWlyMUljb246KCk9PlplLENyb3NzaGFpcjJJY29uOigpPT4kZSxDcnVtcGxlZFBhcGVySWNvbjooKT0+TmUsQ3ViZUljb246KCk9PkZlLEN1cnNvckFycm93SWNvbjooKT0+V2UsQ3Vyc29yVGV4dEljb246KCk9PlVlLERhc2hJY29uOigpPT56ZSxEYXNoYm9hcmRJY29uOigpPT5HZSxEaW1lbnNpb25zSWNvbjooKT0+S2UsRGlzY0ljb246KCk9PnFlLERpdmlkZXJIb3Jpem9udGFsSWNvbjooKT0+WWUsRGl2aWRlclZlcnRpY2FsSWNvbjooKT0+SmUsRG90RmlsbGVkSWNvbjooKT0+UWUsRG90SWNvbjooKT0+WGUsRG90c0hvcml6b250YWxJY29uOigpPT5ldCxEb3RzVmVydGljYWxJY29uOigpPT50dCxEb3VibGVBcnJvd0Rvd25JY29uOigpPT5udCxEb3VibGVBcnJvd0xlZnRJY29uOigpPT5ydCxEb3VibGVBcnJvd1JpZ2h0SWNvbjooKT0+b3QsRG91YmxlQXJyb3dVcEljb246KCk9PmF0LERvd25sb2FkSWNvbjooKT0+aXQsRHJhZ0hhbmRsZURvdHMxSWNvbjooKT0+bHQsRHJhZ0hhbmRsZURvdHMySWNvbjooKT0+c3QsRHJhZ0hhbmRsZUhvcml6b250YWxJY29uOigpPT5jdCxEcmFnSGFuZGxlVmVydGljYWxJY29uOigpPT51dCxEcmF3aW5nUGluRmlsbGVkSWNvbjooKT0+cHQsRHJhd2luZ1Bpbkljb246KCk9PmR0LERyb3Bkb3duTWVudUljb246KCk9PmZ0LEVudGVyRnVsbFNjcmVlbkljb246KCk9Pmd0LEVudGVySWNvbjooKT0+aHQsRW52ZWxvcGVDbG9zZWRJY29uOigpPT52dCxFbnZlbG9wZU9wZW5JY29uOigpPT5DdCxFeGNsYW1hdGlvblRyaWFuZ2xlSWNvbjooKT0+bXQsRXhpdEZ1bGxTY3JlZW5JY29uOigpPT5idCxFeGl0SWNvbjooKT0+d3QsRXh0ZXJuYWxMaW5rSWNvbjooKT0+eXQsRXllQ2xvc2VkSWNvbjooKT0+eHQsRXllTm9uZUljb246KCk9Pmt0LEV5ZU9wZW5JY29uOigpPT5TdCxGYWNlSWNvbjooKT0+T3QsRmlnbWFMb2dvSWNvbjooKT0+TXQsRmlsZUljb246KCk9Pkx0LEZpbGVNaW51c0ljb246KCk9Pl90LEZpbGVQbHVzSWNvbjooKT0+UHQsRmlsZVRleHRJY29uOigpPT5FdCxGb250Qm9sZEljb246KCk9Pmp0LEZvbnRGYW1pbHlJY29uOigpPT5SdCxGb250SXRhbGljSWNvbjooKT0+SXQsRm9udFJvbWFuSWNvbjooKT0+VnQsRm9udFNpemVJY29uOigpPT5IdCxGb250U3R5bGVJY29uOigpPT5BdCxGcmFtZUljb246KCk9PlR0LEZyYW1lckxvZ29JY29uOigpPT5EdCxHZWFySWNvbjooKT0+QnQsR2l0SHViTG9nb0ljb246KCk9Plp0LEdsb2JlSWNvbjooKT0+JHQsR3JpZEljb246KCk9Pk50LEdyb3VwSWNvbjooKT0+RnQsSGFsZjFJY29uOigpPT5XdCxIYWxmMkljb246KCk9PlV0LEhhbWJ1cmdlck1lbnVJY29uOigpPT56dCxIYW5kSWNvbjooKT0+R3QsSGVhZGluZ0ljb246KCk9Pkt0LEhlaWdodEljb246KCk9PnF0LEhvbWVJY29uOigpPT5ZdCxJY29uSmFyTG9nb0ljb246KCk9Pkp0LElkQ2FyZEljb246KCk9Plh0LEltYWdlSWNvbjooKT0+UXQsSW5mb0NpcmNsZWRJY29uOigpPT5lbixJbnB1dEljb246KCk9PnRuLExhcFRpbWVySWNvbjooKT0+bm4sTGF5ZXJzSWNvbjooKT0+cm4sTGF5b3V0SWNvbjooKT0+b24sTGV0dGVyQ2FzZUNhcGl0YWxpemVJY29uOigpPT5hbixMZXR0ZXJDYXNlTG93ZXJjYXNlSWNvbjooKT0+bG4sTGV0dGVyQ2FzZVRvZ2dsZUljb246KCk9PnNuLExldHRlckNhc2VVcHBlcmNhc2VJY29uOigpPT5jbixMZXR0ZXJTcGFjaW5nSWNvbjooKT0+dW4sTGlnaHRuaW5nQm9sdEljb246KCk9PmRuLExpbmVIZWlnaHRJY29uOigpPT5wbixMaW5rMUljb246KCk9PmZuLExpbmsySWNvbjooKT0+aG4sTGlua0JyZWFrMUljb246KCk9PmduLExpbmtCcmVhazJJY29uOigpPT52bixMaW5rTm9uZTFJY29uOigpPT5DbixMaW5rTm9uZTJJY29uOigpPT5tbixMaXN0QnVsbGV0SWNvbjooKT0+d24sTG9ja0Nsb3NlZEljb246KCk9PmJuLExvY2tPcGVuMUljb246KCk9PnluLExvY2tPcGVuMkljb246KCk9PnhuLExvb3BJY29uOigpPT5rbixNYWdpY1dhbmRJY29uOigpPT5TbixNYWduaWZ5aW5nR2xhc3NJY29uOigpPT5PbixNYXJnaW5JY29uOigpPT5NbixNYXNrT2ZmSWNvbjooKT0+TG4sTWFza09uSWNvbjooKT0+X24sTWludXNDaXJjbGVkSWNvbjooKT0+RW4sTWludXNJY29uOigpPT5QbixNaXhJY29uOigpPT5qbixNaXhlckhvcml6b250YWxJY29uOigpPT5SbixNaXhlclZlcnRpY2FsSWNvbjooKT0+SW4sTW9kdWx6TG9nb0ljb246KCk9PlZuLE1vb25JY29uOigpPT5IbixNb3ZlSWNvbjooKT0+QW4sTm90aW9uTG9nb0ljb246KCk9PlRuLE9wYWNpdHlJY29uOigpPT5EbixPdmVybGluZUljb246KCk9PkJuLFBhZGRpbmdJY29uOigpPT5abixQYXBlclBsYW5lSWNvbjooKT0+JG4sUGF1c2VJY29uOigpPT5ObixQZW5jaWwxSWNvbjooKT0+Rm4sUGVuY2lsMkljb246KCk9PlduLFBlcnNvbkljb246KCk9PlVuLFBpZUNoYXJ0SWNvbjooKT0+em4sUGlsY3Jvd0ljb246KCk9PkduLFBpbkJvdHRvbUljb246KCk9PktuLFBpbkxlZnRJY29uOigpPT5xbixQaW5SaWdodEljb246KCk9PlluLFBpblRvcEljb246KCk9PkpuLFBsYXlJY29uOigpPT5YbixQbHVzQ2lyY2xlZEljb246KCk9PmVyLFBsdXNJY29uOigpPT5RbixRdWVzdGlvbk1hcmtDaXJjbGVkSWNvbjooKT0+bnIsUXVlc3Rpb25NYXJrSWNvbjooKT0+dHIsUXVvdGVJY29uOigpPT5ycixSYWRpb2J1dHRvbkljb246KCk9Pm9yLFJlYWRlckljb246KCk9PmFyLFJlbG9hZEljb246KCk9PmlyLFJlc2V0SWNvbjooKT0+bHIsUmVzdW1lSWNvbjooKT0+c3IsUm9ja2V0SWNvbjooKT0+Y3IsUm90YXRlQ291bnRlckNsb2Nrd2lzZUljb246KCk9PnVyLFJvd1NwYWNpbmdJY29uOigpPT5kcixSb3dzSWNvbjooKT0+cHIsUnVsZXJIb3Jpem9udGFsSWNvbjooKT0+ZnIsUnVsZXJTcXVhcmVJY29uOigpPT5ocixTZWN0aW9uSWNvbjooKT0+Z3IsU2V3aW5nUGluRmlsbGVkSWNvbjooKT0+Q3IsU2V3aW5nUGluSWNvbjooKT0+dnIsU2hhZG93SWNvbjooKT0+bXIsU2hhZG93SW5uZXJJY29uOigpPT53cixTaGFkb3dOb25lSWNvbjooKT0+YnIsU2hhZG93T3V0ZXJJY29uOigpPT55cixTaGFyZTFJY29uOigpPT54cixTaGFyZTJJY29uOigpPT5rcixTaHVmZmxlSWNvbjooKT0+U3IsU2l6ZUljb246KCk9Pk9yLFNrZXRjaExvZ29JY29uOigpPT5NcixTbGFzaEljb246KCk9PkxyLFNsaWRlckljb246KCk9Pl9yLFNwYWNlQmV0d2Vlbkhvcml6b250YWxseUljb246KCk9PlByLFNwYWNlQmV0d2VlblZlcnRpY2FsbHlJY29uOigpPT5FcixTcGFjZUV2ZW5seUhvcml6b250YWxseUljb246KCk9PmpyLFNwYWNlRXZlbmx5VmVydGljYWxseUljb246KCk9PlJyLFNwZWFrZXJMb3VkSWNvbjooKT0+SXIsU3BlYWtlck1vZGVyYXRlSWNvbjooKT0+VnIsU3BlYWtlck9mZkljb246KCk9PkhyLFNwZWFrZXJRdWlldEljb246KCk9PkFyLFNxdWFyZUljb246KCk9PlRyLFN0YWNrSWNvbjooKT0+RHIsU3RhckZpbGxlZEljb246KCk9PlpyLFN0YXJJY29uOigpPT5CcixTdGl0Y2hlc0xvZ29JY29uOigpPT4kcixTdG9wSWNvbjooKT0+TnIsU3RvcHdhdGNoSWNvbjooKT0+RnIsU3RyZXRjaEhvcml6b250YWxseUljb246KCk9PldyLFN0cmV0Y2hWZXJ0aWNhbGx5SWNvbjooKT0+VXIsU3RyaWtldGhyb3VnaEljb246KCk9PnpyLFN1bkljb246KCk9PkdyLFN3aXRjaEljb246KCk9PktyLFN5bWJvbEljb246KCk9PnFyLFRhYmxlSWNvbjooKT0+WXIsVGFyZ2V0SWNvbjooKT0+SnIsVGV4dEFsaWduQ2VudGVySWNvbjooKT0+UXIsVGV4dEFsaWduSnVzdGlmeUljb246KCk9PmVvLFRleHRBbGlnbkxlZnRJY29uOigpPT50byxUZXh0QWxpZ25SaWdodEljb246KCk9Pm5vLFRleHRJY29uOigpPT5YcixUZXh0Tm9uZUljb246KCk9PnJvLFRoaWNrQXJyb3dEb3duSWNvbjooKT0+b28sVGhpY2tBcnJvd0xlZnRJY29uOigpPT5hbyxUaGlja0Fycm93UmlnaHRJY29uOigpPT5pbyxUaGlja0Fycm93VXBJY29uOigpPT5sbyxUaW1lckljb246KCk9PnNvLFRva2Vuc0ljb246KCk9PmNvLFRyYWNrTmV4dEljb246KCk9PnVvLFRyYWNrUHJldmlvdXNJY29uOigpPT5wbyxUcmFuc3BhcmVuY3lHcmlkSWNvbjooKT0+Zm8sVHJhc2hJY29uOigpPT5obyxUcmlhbmdsZURvd25JY29uOigpPT5nbyxUcmlhbmdsZUxlZnRJY29uOigpPT52byxUcmlhbmdsZVJpZ2h0SWNvbjooKT0+Q28sVHJpYW5nbGVVcEljb246KCk9Pm1vLFR3aXR0ZXJMb2dvSWNvbjooKT0+d28sVW5kZXJsaW5lSWNvbjooKT0+Ym8sVXBkYXRlSWNvbjooKT0+eW8sVXBsb2FkSWNvbjooKT0+eG8sVmFsdWVJY29uOigpPT5rbyxWYWx1ZU5vbmVJY29uOigpPT5TbyxWZXJjZWxMb2dvSWNvbjooKT0+T28sVmlkZW9JY29uOigpPT5NbyxWaWV3R3JpZEljb246KCk9PkxvLFZpZXdIb3Jpem9udGFsSWNvbjooKT0+X28sVmlld05vbmVJY29uOigpPT5QbyxWaWV3VmVydGljYWxJY29uOigpPT5FbyxXaWR0aEljb246KCk9PmpvLFpvb21Jbkljb246KCk9PlJvLFpvb21PdXRJY29uOigpPT5Jb30pO3ZhciByPW4oNjY4OSk7ZnVuY3Rpb24gbyhlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb312YXIgYT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMCAxLjVDMCAxLjIyMzg2IDAuMjIzODU4IDEgMC41IDFIMi41QzIuNzc2MTQgMSAzIDEuMjIzODYgMyAxLjVDMyAxLjc3NjE0IDIuNzc2MTQgMiAyLjUgMkgwLjVDMC4yMjM4NTggMiAwIDEuNzc2MTQgMCAxLjVaTTQgMS41QzQgMS4yMjM4NiA0LjIyMzg2IDEgNC41IDFIMTQuNUMxNC43NzYxIDEgMTUgMS4yMjM4NiAxNSAxLjVDMTUgMS43NzYxNCAxNC43NzYxIDIgMTQuNSAySDQuNUM0LjIyMzg2IDIgNCAxLjc3NjE0IDQgMS41Wk00IDQuNUM0IDQuMjIzODYgNC4yMjM4NiA0IDQuNSA0SDExLjVDMTEuNzc2MSA0IDEyIDQuMjIzODYgMTIgNC41QzEyIDQuNzc2MTQgMTEuNzc2MSA1IDExLjUgNUg0LjVDNC4yMjM4NiA1IDQgNC43NzYxNCA0IDQuNVpNMCA3LjVDMCA3LjIyMzg2IDAuMjIzODU4IDcgMC41IDdIMi41QzIuNzc2MTQgNyAzIDcuMjIzODYgMyA3LjVDMyA3Ljc3NjE0IDIuNzc2MTQgOCAyLjUgOEgwLjVDMC4yMjM4NTggOCAwIDcuNzc2MTQgMCA3LjVaTTQgNy41QzQgNy4yMjM4NiA0LjIyMzg2IDcgNC41IDdIMTQuNUMxNC43NzYxIDcgMTUgNy4yMjM4NiAxNSA3LjVDMTUgNy43NzYxNCAxNC43NzYxIDggMTQuNSA4SDQuNUM0LjIyMzg2IDggNCA3Ljc3NjE0IDQgNy41Wk00IDEwLjVDNCAxMC4yMjM5IDQuMjIzODYgMTAgNC41IDEwSDExLjVDMTEuNzc2MSAxMCAxMiAxMC4yMjM5IDEyIDEwLjVDMTIgMTAuNzc2MSAxMS43NzYxIDExIDExLjUgMTFINC41QzQuMjIzODYgMTEgNCAxMC43NzYxIDQgMTAuNVpNMCAxMy41QzAgMTMuMjIzOSAwLjIyMzg1OCAxMyAwLjUgMTNIMi41QzIuNzc2MTQgMTMgMyAxMy4yMjM5IDMgMTMuNUMzIDEzLjc3NjEgMi43NzYxNCAxNCAyLjUgMTRIMC41QzAuMjIzODU4IDE0IDAgMTMuNzc2MSAwIDEzLjVaTTQgMTMuNUM0IDEzLjIyMzkgNC4yMjM4NiAxMyA0LjUgMTNIMTQuNUMxNC43NzYxIDEzIDE1IDEzLjIyMzkgMTUgMTMuNUMxNSAxMy43NzYxIDE0Ljc3NjEgMTQgMTQuNSAxNEg0LjVDNC4yMjM4NiAxNCA0IDEzLjc3NjEgNCAxMy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuNSAxLjc1MDAzQzEwLjcxMDcgMS43NTAwMyAxMC44OTg4IDEuODgyMTcgMTAuOTcwMyAyLjA4MDQyTDEzLjk3MDMgMTAuNEMxNC4wNjQgMTAuNjU5OCAxMy45MjkzIDEwLjk0NjMgMTMuNjY5NiAxMS4wNEMxMy40MDk4IDExLjEzMzYgMTMuMTIzMyAxMC45OTkgMTMuMDI5NiAxMC43MzkyTDEyLjA0NzcgOC4wMTYwNkg4Ljk1MjI3TDcuOTcwMzEgMTAuNzM5MkM3Ljg3NjY0IDEwLjk5OSA3LjU5MDEyIDExLjEzMzYgNy4zMzAzNSAxMS4wNEM3LjA3MDU4IDEwLjk0NjMgNi45MzU5MyAxMC42NTk4IDcuMDI5NiAxMC40TDEwLjAyOTYgMi4wODA0MkMxMC4xMDExIDEuODgyMTcgMTAuMjg5MiAxLjc1MDAzIDEwLjUgMS43NTAwM1pNMTAuNSAzLjcyNDAyTDExLjc0MTEgNy4xNjYwNkg5LjI1ODc3TDEwLjUgMy43MjQwMlpNMi40OTk0OSAyLjA5OTk3QzIuNzIwNCAyLjA5OTk3IDIuODk5NDkgMi4yNzkwNiAyLjg5OTQ5IDIuNDk5OTdMMi44OTk0OSA5LjUzNDI4TDQuMjE2NjQgOC4yMTcxM0M0LjM3Mjg1IDguMDYwOTIgNC42MjYxMiA4LjA2MDkyIDQuNzgyMzMgOC4yMTcxM0M0LjkzODU0IDguMzczMzQgNC45Mzg1NCA4LjYyNjYgNC43ODIzMyA4Ljc4MjgxTDIuNzgyMzMgMTAuNzgyOEMyLjcwNzMyIDEwLjg1NzggMi42MDU1NyAxMC45IDIuNDk5NDkgMTAuOUMyLjM5MzQgMTAuOSAyLjI5MTY2IDEwLjg1NzggMi4yMTY2NCAxMC43ODI4TDAuMjE2NjQ1IDguNzgyODFDMC4wNjA0MzQ5IDguNjI2NiAwLjA2MDQzNDkgOC4zNzMzNCAwLjIxNjY0NSA4LjIxNzEzQzAuMzcyODU0IDguMDYwOTIgMC42MjYxMiA4LjA2MDkyIDAuNzgyMzMgOC4yMTcxM0wyLjA5OTQ5IDkuNTM0MjhMMi4wOTk0OSAyLjQ5OTk3QzIuMDk5NDkgMi4yNzkwNiAyLjI3ODU3IDIuMDk5OTcgMi40OTk0OSAyLjA5OTk3Wk0wLjA5OTk2OTUgMTMuNTAwMUMwLjA5OTk2OTUgMTMuMjc5MSAwLjI3OTA1NiAxMy4xMDAxIDAuNDk5OTY5IDEzLjEwMDFIMTQuNUMxNC43MjA5IDEzLjEwMDEgMTQuOSAxMy4yNzkxIDE0LjkgMTMuNTAwMUMxNC45IDEzLjcyMSAxNC43MjA5IDEzLjkwMDEgMTQuNSAxMy45MDAxSDAuNDk5OTY5QzAuMjc5MDU2IDEzLjkwMDEgMC4wOTk5Njk1IDEzLjcyMSAwLjA5OTk2OTUgMTMuNTAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkgM0M5IDIuNDQ3NzIgOC41NTIyOSAyIDggMkg3QzYuNDQ3NzIgMiA2IDIuNDQ3NzIgNiAzTDYgMTRIMS41QzEuMjIzODYgMTQgMSAxNC4yMjM5IDEgMTQuNUMxIDE0Ljc3NjEgMS4yMjM4NiAxNSAxLjUgMTVMNiAxNUg5SDEzLjVDMTMuNzc2MSAxNSAxNCAxNC43NzYxIDE0IDE0LjVDMTQgMTQuMjIzOSAxMy43NzYxIDE0IDEzLjUgMTRIOVYzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi45OTk4OCAxQzYuNDQ3NTkgMSA1Ljk5OTg4IDEuNDQ3NzIgNS45OTk4OCAyVjdIMS40OTk4OEMxLjIyMzc0IDcgMC45OTk4NzggNy4yMjM4NiAwLjk5OTg3OCA3LjVDMC45OTk4NzggNy43NzYxNCAxLjIyMzc0IDggMS40OTk4OCA4SDUuOTk5ODhWMTNDNS45OTk4OCAxMy41NTIzIDYuNDQ3NTkgMTQgNi45OTk4OCAxNEg3Ljk5OTg4QzguNTUyMTYgMTQgOC45OTk4OCAxMy41NTIzIDguOTk5ODggMTNWOEgxMy40OTk5QzEzLjc3NiA4IDEzLjk5OTkgNy43NzYxNCAxMy45OTk5IDcuNUMxMy45OTk5IDcuMjIzODYgMTMuNzc2IDcgMTMuNDk5OSA3SDguOTk5ODhWMkM4Ljk5OTg4IDEuNDQ3NzIgOC41NTIxNiAxIDcuOTk5ODggMUw2Ljk5OTg4IDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxjPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjk5OTg4IDZDMS40NDc1OSA2IDAuOTk5ODc3IDYuNDQ3NzIgMC45OTk4NzcgN0wwLjk5OTg3NyA4QzAuOTk5ODc3IDguNTUyMjggMS40NDc1OSA5IDEuOTk5ODggOUw2Ljk5OTg4IDlMNi45OTk4OCAxMy41QzYuOTk5ODggMTMuNzc2MSA3LjIyMzc0IDE0IDcuNDk5ODggMTRDNy43NzYwMiAxNCA3Ljk5OTg4IDEzLjc3NjEgNy45OTk4OCAxMy41TDcuOTk5ODggOUwxMi45OTk5IDlDMTMuNTUyMiA5IDEzLjk5OTkgOC41NTIyOCAxMy45OTk5IDhMMTMuOTk5OSA3QzEzLjk5OTkgNi40NDc3MiAxMy41NTIyIDYgMTIuOTk5OSA2TDcuOTk5ODggNkw3Ljk5OTg4IDEuNUM3Ljk5OTg4IDEuMjIzODYgNy43NzYwMiAxIDcuNDk5ODggMUM3LjIyMzczIDEgNi45OTk4OCAxLjIyMzg2IDYuOTk5ODggMS41TDYuOTk5ODggNkwxLjk5OTg4IDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjQ5OTk5NSAwLjk5OTk5NUMwLjIyMzg1NSAwLjk5OTk5NSAtNS41ODQ1OGUtMDcgMS4yMjM4NSAtNS40NjM4OGUtMDcgMS40OTk5OUwtMi4xODU1NGUtMDggMTMuNDk5OUMtOS43ODQ5MmUtMDkgMTMuNzc2IDAuMjIzODU1IDEzLjk5OTkgMC40OTk5OTUgMTMuOTk5OUMwLjc3NjEzNiAxMy45OTk5IDAuOTk5OTkxIDEzLjc3NiAwLjk5OTk5MSAxMy40OTk5TDAuOTk5OTkxIDguOTk5OTNMMTIgOC45OTk5M0MxMi41NTIzIDguOTk5OTMgMTMgOC41NTIyMiAxMyA3Ljk5OTkzTDEzIDYuOTk5OTRDMTMgNi40NDc2NiAxMi41NTIzIDUuOTk5OTUgMTIgNS45OTk5NUwwLjk5OTk5MSA1Ljk5OTk1TDAuOTk5OTkxIDEuNDk5OTlDMC45OTk5OTEgMS4yMjM4NSAwLjc3NjEzNSAwLjk5OTk5NSAwLjQ5OTk5NSAwLjk5OTk5NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTE0LjQ5OTkgMUMxNC4yMjM3IDEgMTMuOTk5OSAxLjIyMzg2IDEzLjk5OTkgMS41TDEzLjk5OTkgNkwyLjk5OTg4IDZDMi40NDc1OSA2IDEuOTk5ODggNi40NDc3MiAxLjk5OTg4IDdMMS45OTk4OCA4QzEuOTk5ODggOC41NTIyOCAyLjQ0NzU5IDkgMi45OTk4OCA5TDEzLjk5OTkgOUwxMy45OTk5IDEzLjVDMTMuOTk5OSAxMy43NzYxIDE0LjIyMzcgMTQgMTQuNDk5OSAxNEMxNC43NzYgMTQgMTQuOTk5OSAxMy43NzYxIDE0Ljk5OTkgMTMuNUwxNC45OTk5IDlMMTQuOTk5OSA2TDE0Ljk5OTkgMS41QzE0Ljk5OTkgMS4yMjM4NiAxNC43NzYgMSAxNC40OTk5IDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxwPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjUgMEMxLjIyMzg2IDAgMSAwLjIyMzg1OCAxIDAuNUMxIDAuNzc2MTQyIDEuMjIzODYgMSAxLjUgMUg2VjEyQzYgMTIuNTUyMyA2LjQ0NzcyIDEzIDcgMTNIOEM4LjU1MjI4IDEzIDkgMTIuNTUyMyA5IDEyVjFIMTMuNUMxMy43NzYxIDEgMTQgMC43NzYxNDIgMTQgMC41QzE0IDAuMjIzODU4IDEzLjc3NjEgMCAxMy41IDBIOUg2SDEuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAwLjc1TDkuNzUgM0g1LjI1TDcuNSAwLjc1Wk03LjUgMTQuMjVMOS43NSAxMkg1LjI1TDcuNSAxNC4yNVpNMyA1LjI1TDAuNzUgNy41TDMgOS43NVY1LjI1Wk0xNC4yNSA3LjVMMTIgNS4yNVY5Ljc1TDE0LjI1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguODkxNCAyLjE5MzdDOS4xMTU4IDIuMzU0NjQgOS4xNjcyNSAyLjY2NzAxIDkuMDA2MzEgMi44OTE0MUwyLjQ3Mzg4IDEySDEzLjVDMTMuNzc2MSAxMiAxNCAxMi4yMjM5IDE0IDEyLjVDMTQgMTIuNzc2MiAxMy43NzYxIDEzIDEzLjUgMTNIMS41QzEuMzEyNTQgMTMgMS4xNDA4MiAxMi44OTUyIDEuMDU1MiAxMi43Mjg0QzAuOTY5NTc4IDEyLjU2MTYgMC45ODQ0MzggMTIuMzYxIDEuMDkzNjkgMTIuMjA4Nkw4LjE5MzY5IDIuMzA4NjJDOC4zNTQ2MiAyLjA4NDIyIDguNjY3IDIuMDMyNzcgOC44OTE0IDIuMTkzN1pNMTEuMSA2LjUwMDAxQzExLjEgNi4yMjM4NyAxMS4zMjM4IDYuMDAwMDEgMTEuNiA2LjAwMDAxQzExLjg3NjEgNi4wMDAwMSAxMi4xIDYuMjIzODcgMTIuMSA2LjUwMDAxQzEyLjEgNi43NzYxNSAxMS44NzYxIDcuMDAwMDEgMTEuNiA3LjAwMDAxQzExLjMyMzggNy4wMDAwMSAxMS4xIDYuNzc2MTUgMTEuMSA2LjUwMDAxWk0xMC40IDQuMDAwMDFDMTAuMTIzOSA0LjAwMDAxIDkuOTAwMDMgNC4yMjM4NyA5LjkwMDAzIDQuNTAwMDFDOS45MDAwMyA0Ljc3NjE1IDEwLjEyMzkgNS4wMDAwMSAxMC40IDUuMDAwMDFDMTAuNjc2MiA1LjAwMDAxIDEwLjkgNC43NzYxNSAxMC45IDQuNTAwMDFDMTAuOSA0LjIyMzg3IDEwLjY3NjIgNC4wMDAwMSAxMC40IDQuMDAwMDFaTTEyLjEgOC41MDAwMUMxMi4xIDguMjIzODcgMTIuMzIzOCA4LjAwMDAxIDEyLjYgOC4wMDAwMUMxMi44NzYxIDguMDAwMDEgMTMuMSA4LjIyMzg3IDEzLjEgOC41MDAwMUMxMy4xIDguNzc2MTUgMTIuODc2MSA5LjAwMDAxIDEyLjYgOS4wMDAwMUMxMi4zMjM4IDkuMDAwMDEgMTIuMSA4Ljc3NjE1IDEyLjEgOC41MDAwMVpNMTMuNCAxMEMxMy4xMjM5IDEwIDEyLjkgMTAuMjIzOSAxMi45IDEwLjVDMTIuOSAxMC43NzYxIDEzLjEyMzkgMTEgMTMuNCAxMUMxMy42NzYyIDExIDEzLjkgMTAuNzc2MSAxMy45IDEwLjVDMTMuOSAxMC4yMjM5IDEzLjY3NjIgMTAgMTMuNCAxMFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMzA5MDIgMUMyLjkzMDI1IDEgMi41ODM5OCAxLjIxNCAyLjQxNDU5IDEuNTUyNzlMMS4wNTI3OSA0LjI3NjM5QzEuMDE4MDcgNC4zNDU4MiAxIDQuNDIyMzggMSA0LjVWMTNDMSAxMy41NTIzIDEuNDQ3NzIgMTQgMiAxNEgxM0MxMy41NTIzIDE0IDE0IDEzLjU1MjMgMTQgMTNWNC41QzE0IDQuNDIyMzggMTMuOTgxOSA0LjM0NTgyIDEzLjk0NzIgNC4yNzYzOUwxMi41ODU0IDEuNTUyODFDMTIuNDE2IDEuMjE0MDMgMTIuMDY5OCAxLjAwMDAzIDExLjY5MSAxLjAwMDAzTDcuNSAxLjAwMDAxTDMuMzA5MDIgMVpNMy4zMDkwMiAyTDcgMi4wMDAwMVY0SDIuMzA5MDJMMy4zMDkwMiAyWk04IDRWMi4wMDAwMkwxMS42OTEgMi4wMDAwM0wxMi42OTEgNEg4Wk03LjUgNUgxM1YxM0gyVjVINy41Wk01LjUgN0M1LjIyMzg2IDcgNSA3LjIyMzg2IDUgNy41QzUgNy43NzYxNCA1LjIyMzg2IDggNS41IDhIOS41QzkuNzc2MTQgOCAxMCA3Ljc3NjE0IDEwIDcuNUMxMCA3LjIyMzg2IDkuNzc2MTQgNyA5LjUgN0g1LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx2PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS4zNTM2IDMuNjQ2NDRDMTEuNTQ4OCAzLjg0MTcgMTEuNTQ4OCA0LjE1ODI4IDExLjM1MzYgNC4zNTM1NEw0LjcwNzExIDExTDkgMTFDOS4yNzYxNCAxMSA5LjUgMTEuMjIzOSA5LjUgMTEuNUM5LjUgMTEuNzc2MSA5LjI3NjE0IDEyIDkgMTJMMy41IDEyQzMuMzY3MzkgMTIgMy4yNDAyMSAxMS45NDczIDMuMTQ2NDUgMTEuODUzNkMzLjA1MjY4IDExLjc1OTggMyAxMS42MzI2IDMgMTEuNUwzIDUuOTk5OTlDMyA1LjcyMzg1IDMuMjIzODYgNS40OTk5OSAzLjUgNS40OTk5OUMzLjc3NjE0IDUuNDk5OTkgNCA1LjcyMzg1IDQgNS45OTk5OVYxMC4yOTI5TDEwLjY0NjQgMy42NDY0M0MxMC44NDE3IDMuNDUxMTcgMTEuMTU4MyAzLjQ1MTE3IDExLjM1MzYgMy42NDY0NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjQ2NDUgMy42NDY0NEMzLjQ1MTE4IDMuODQxNyAzLjQ1MTE4IDQuMTU4MjggMy42NDY0NSA0LjM1MzU0TDEwLjI5MjkgMTFMNiAxMUM1LjcyMzg2IDExIDUuNSAxMS4yMjM5IDUuNSAxMS41QzUuNSAxMS43NzYxIDUuNzIzODYgMTIgNiAxMkwxMS41IDEyQzExLjYzMjYgMTIgMTEuNzU5OCAxMS45NDczIDExLjg1MzYgMTEuODUzNkMxMS45NDczIDExLjc1OTggMTIgMTEuNjMyNiAxMiAxMS41TDEyIDUuOTk5OTlDMTIgNS43MjM4NSAxMS43NzYxIDUuNDk5OTkgMTEuNSA1LjQ5OTk5QzExLjIyMzkgNS40OTk5OSAxMSA1LjcyMzg1IDExIDUuOTk5OTlWMTAuMjkyOUw0LjM1MzU1IDMuNjQ2NDNDNC4xNTgyOSAzLjQ1MTE3IDMuODQxNzEgMy40NTExNyAzLjY0NjQ1IDMuNjQ2NDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxtPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMkM3Ljc3NjE0IDIgOCAyLjIyMzg2IDggMi41TDggMTEuMjkyOUwxMS4xNDY0IDguMTQ2NDVDMTEuMzQxNyA3Ljk1MTE4IDExLjY1ODMgNy45NTExOCAxMS44NTM2IDguMTQ2NDVDMTIuMDQ4OCA4LjM0MTcxIDEyLjA0ODggOC42NTgyOSAxMS44NTM2IDguODUzNTVMNy44NTM1NSAxMi44NTM2QzcuNzU5NzkgMTIuOTQ3MyA3LjYzMjYxIDEzIDcuNSAxM0M3LjM2NzM5IDEzIDcuMjQwMjEgMTIuOTQ3MyA3LjE0NjQ1IDEyLjg1MzZMMy4xNDY0NSA4Ljg1MzU1QzIuOTUxMTggOC42NTgyOSAyLjk1MTE4IDguMzQxNzEgMy4xNDY0NSA4LjE0NjQ1QzMuMzQxNzEgNy45NTExOCAzLjY1ODI5IDcuOTUxMTggMy44NTM1NSA4LjE0NjQ1TDcgMTEuMjkyOUw3IDIuNUM3IDIuMjIzODYgNy4yMjM4NiAyIDcuNSAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi44NTM1NSAzLjE0NjQ1QzcuMDQ4ODIgMy4zNDE3MSA3LjA0ODgyIDMuNjU4MjkgNi44NTM1NSAzLjg1MzU1TDMuNzA3MTEgN0gxMi41QzEyLjc3NjEgNyAxMyA3LjIyMzg2IDEzIDcuNUMxMyA3Ljc3NjE0IDEyLjc3NjEgOCAxMi41IDhIMy43MDcxMUw2Ljg1MzU1IDExLjE0NjRDNy4wNDg4MiAxMS4zNDE3IDcuMDQ4ODIgMTEuNjU4MyA2Ljg1MzU1IDExLjg1MzZDNi42NTgyOSAxMi4wNDg4IDYuMzQxNzEgMTIuMDQ4OCA2LjE0NjQ1IDExLjg1MzZMMi4xNDY0NSA3Ljg1MzU1QzEuOTUxMTggNy42NTgyOSAxLjk1MTE4IDcuMzQxNzEgMi4xNDY0NSA3LjE0NjQ1TDYuMTQ2NDUgMy4xNDY0NUM2LjM0MTcxIDIuOTUxMTggNi42NTgyOSAyLjk1MTE4IDYuODUzNTUgMy4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguMTQ2NDUgMy4xNDY0NUM4LjM0MTcxIDIuOTUxMTggOC42NTgyOSAyLjk1MTE4IDguODUzNTUgMy4xNDY0NUwxMi44NTM2IDcuMTQ2NDVDMTMuMDQ4OCA3LjM0MTcxIDEzLjA0ODggNy42NTgyOSAxMi44NTM2IDcuODUzNTVMOC44NTM1NSAxMS44NTM2QzguNjU4MjkgMTIuMDQ4OCA4LjM0MTcxIDEyLjA0ODggOC4xNDY0NSAxMS44NTM2QzcuOTUxMTggMTEuNjU4MyA3Ljk1MTE4IDExLjM0MTcgOC4xNDY0NSAxMS4xNDY0TDExLjI5MjkgOEgyLjVDMi4yMjM4NiA4IDIgNy43NzYxNCAyIDcuNUMyIDcuMjIzODYgMi4yMjM4NiA3IDIuNSA3SDExLjI5MjlMOC4xNDY0NSAzLjg1MzU1QzcuOTUxMTggMy42NTgyOSA3Ljk1MTE4IDMuMzQxNzEgOC4xNDY0NSAzLjE0NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuMzUzNiAxMS4zNTM2QzExLjU0ODggMTEuMTU4MyAxMS41NDg4IDEwLjg0MTcgMTEuMzUzNiAxMC42NDY1TDQuNzA3MTEgNEw5IDRDOS4yNzYxNCA0IDkuNSAzLjc3NjE0IDkuNSAzLjVDOS41IDMuMjIzODYgOS4yNzYxNCAzIDkgM0wzLjUgM0MzLjM2NzM5IDMgMy4yNDAyMSAzLjA1MjY4IDMuMTQ2NDUgMy4xNDY0NUMzLjA1MjY4IDMuMjQwMjIgMyAzLjM2NzM5IDMgMy41TDMgOS4wMDAwMUMzIDkuMjc2MTUgMy4yMjM4NiA5LjUwMDAxIDMuNSA5LjUwMDAxQzMuNzc2MTQgOS41MDAwMSA0IDkuMjc2MTUgNCA5LjAwMDAxVjQuNzA3MTFMMTAuNjQ2NCAxMS4zNTM2QzEwLjg0MTcgMTEuNTQ4OCAxMS4xNTgzIDExLjU0ODggMTEuMzUzNiAxMS4zNTM2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy42NDY0NSAxMS4zNTM2QzMuNDUxMTggMTEuMTU4MyAzLjQ1MTE4IDEwLjg0MTcgMy42NDY0NSAxMC42NDY1TDEwLjI5MjkgNEw2IDRDNS43MjM4NiA0IDUuNSAzLjc3NjE0IDUuNSAzLjVDNS41IDMuMjIzODYgNS43MjM4NiAzIDYgM0wxMS41IDNDMTEuNjMyNiAzIDExLjc1OTggMy4wNTI2OCAxMS44NTM2IDMuMTQ2NDVDMTEuOTQ3MyAzLjI0MDIyIDEyIDMuMzY3MzkgMTIgMy41TDEyIDkuMDAwMDFDMTIgOS4yNzYxNSAxMS43NzYxIDkuNTAwMDEgMTEuNSA5LjUwMDAxQzExLjIyMzkgOS41MDAwMSAxMSA5LjI3NjE1IDExIDkuMDAwMDFWNC43MDcxMUw0LjM1MzU1IDExLjM1MzZDNC4xNTgyOSAxMS41NDg4IDMuODQxNzEgMTEuNTQ4OCAzLjY0NjQ1IDExLjM1MzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxrPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjE0NjQ1IDIuMTQ2NDVDNy4zNDE3MSAxLjk1MTE4IDcuNjU4MjkgMS45NTExOCA3Ljg1MzU1IDIuMTQ2NDVMMTEuODUzNiA2LjE0NjQ1QzEyLjA0ODggNi4zNDE3MSAxMi4wNDg4IDYuNjU4MjkgMTEuODUzNiA2Ljg1MzU1QzExLjY1ODMgNy4wNDg4MiAxMS4zNDE3IDcuMDQ4ODIgMTEuMTQ2NCA2Ljg1MzU1TDggMy43MDcxMUw4IDEyLjVDOCAxMi43NzYxIDcuNzc2MTQgMTMgNy41IDEzQzcuMjIzODYgMTMgNyAxMi43NzYxIDcgMTIuNUw3IDMuNzA3MTFMMy44NTM1NSA2Ljg1MzU1QzMuNjU4MjkgNy4wNDg4MiAzLjM0MTcxIDcuMDQ4ODIgMy4xNDY0NSA2Ljg1MzU1QzIuOTUxMTggNi42NTgyOSAyLjk1MTE4IDYuMzQxNzEgMy4xNDY0NSA2LjE0NjQ1TDcuMTQ2NDUgMi4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuNSAySDEyLjVDMTIuNzc2MSAyIDEzIDIuMjIzODYgMTMgMi41VjEyLjVDMTMgMTIuNzc2MSAxMi43NzYxIDEzIDEyLjUgMTNIMi41QzIuMjIzODYgMTMgMiAxMi43NzYxIDIgMTIuNVYyLjVDMiAyLjIyMzg2IDIuMjIzODYgMiAyLjUgMlpNMSAyLjVDMSAxLjY3MTU3IDEuNjcxNTcgMSAyLjUgMUgxMi41QzEzLjMyODQgMSAxNCAxLjY3MTU3IDE0IDIuNVYxMi41QzE0IDEzLjMyODQgMTMuMzI4NCAxNCAxMi41IDE0SDIuNUMxLjY3MTU3IDE0IDEgMTMuMzI4NCAxIDEyLjVWMi41Wk03LjUgNEM3Ljc3NjE0IDQgOCAzLjc3NjE0IDggMy41QzggMy4yMjM4NiA3Ljc3NjE0IDMgNy41IDNDNy4yMjM4NiAzIDcgMy4yMjM4NiA3IDMuNUM3IDMuNzc2MTQgNy4yMjM4NiA0IDcuNSA0Wk04IDUuNUM4IDUuNzc2MTQgNy43NzYxNCA2IDcuNSA2QzcuMjIzODYgNiA3IDUuNzc2MTQgNyA1LjVDNyA1LjIyMzg2IDcuMjIzODYgNSA3LjUgNUM3Ljc3NjE0IDUgOCA1LjIyMzg2IDggNS41Wk03LjUgOEM3Ljc3NjE0IDggOCA3Ljc3NjE0IDggNy41QzggNy4yMjM4NiA3Ljc3NjE0IDcgNy41IDdDNy4yMjM4NiA3IDcgNy4yMjM4NiA3IDcuNUM3IDcuNzc2MTQgNy4yMjM4NiA4IDcuNSA4Wk0xMCA3LjVDMTAgNy43NzYxNCA5Ljc3NjE0IDggOS41IDhDOS4yMjM4NiA4IDkgNy43NzYxNCA5IDcuNUM5IDcuMjIzODYgOS4yMjM4NiA3IDkuNSA3QzkuNzc2MTQgNyAxMCA3LjIyMzg2IDEwIDcuNVpNMTEuNSA4QzExLjc3NjEgOCAxMiA3Ljc3NjE0IDEyIDcuNUMxMiA3LjIyMzg2IDExLjc3NjEgNyAxMS41IDdDMTEuMjIzOSA3IDExIDcuMjIzODYgMTEgNy41QzExIDcuNzc2MTQgMTEuMjIzOSA4IDExLjUgOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDE0IDcuNDk5ODhDMC44NzcwMTQgMy44NDIxOSAzLjg0MjE2IDAuODc3MDQ1IDcuNDk5ODUgMC44NzcwNDVDMTEuMTU3NSAwLjg3NzA0NSAxNC4xMjI3IDMuODQyMTkgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMTEuMTU3NSAxMS4xNTc1IDE0LjEyMjcgNy40OTk4NSAxNC4xMjI3QzMuODQyMTYgMTQuMTIyNyAwLjg3NzAxNCAxMS4xNTc1IDAuODc3MDE0IDcuNDk5ODhaTTcuNDk5ODUgMS44MjcwNEM0LjM2NjgzIDEuODI3MDQgMS44MjcwMSA0LjM2Njg2IDEuODI3MDEgNy40OTk4OEMxLjgyNzAxIDguOTcxOTYgMi4zODc3NCAxMC4zMTMxIDMuMzA3MjcgMTEuMzIxM0M0LjE5MDc0IDkuOTQxMTkgNS43MzgxOCA5LjAyNDk5IDcuNTAwMjMgOS4wMjQ5OUM5LjI2MjA2IDkuMDI0OTkgMTAuODA5MyA5Ljk0MDk3IDExLjY5MjkgMTEuMzIwOEMxMi42MTIxIDEwLjMxMjcgMTMuMTcyNyA4Ljk3MTcyIDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDQuMzY2ODYgMTAuNjMyOCAxLjgyNzA0IDcuNDk5ODUgMS44MjcwNFpNMTAuOTgxOCAxMS45Nzg3QzEwLjI4MzkgMTAuNzc5NSA4Ljk4NTcgOS45NzQ5OSA3LjUwMDIzIDkuOTc0OTlDNi4wMTQ1OCA5Ljk3NDk5IDQuNzE2MjQgMTAuNzc5NyA0LjAxODQ1IDExLjk3OTFDNC45Nzk1MiAxMi43MjcyIDYuMTg3NjUgMTMuMTcyNyA3LjQ5OTg1IDEzLjE3MjdDOC44MTIyNyAxMy4xNzI3IDEwLjAyMDYgMTIuNzI3IDEwLjk4MTggMTEuOTc4N1pNNS4xNDk5OSA2LjUwNDg3QzUuMTQ5OTkgNS4yMDcgNi4yMDIxMiA0LjE1NDg3IDcuNDk5OTkgNC4xNTQ4N0M4Ljc5Nzg2IDQuMTU0ODcgOS44NDk5OSA1LjIwNyA5Ljg0OTk5IDYuNTA0ODdDOS44NDk5OSA3LjgwMjc0IDguNzk3ODYgOC44NTQ4NyA3LjQ5OTk5IDguODU0ODdDNi4yMDIxMiA4Ljg1NDg3IDUuMTQ5OTkgNy44MDI3NCA1LjE0OTk5IDYuNTA0ODdaTTcuNDk5OTkgNS4xMDQ4N0M2LjcyNjc5IDUuMTA0ODcgNi4wOTk5OSA1LjczMTY3IDYuMDk5OTkgNi41MDQ4N0M2LjA5OTk5IDcuMjc4MDcgNi43MjY3OSA3LjkwNDg3IDcuNDk5OTkgNy45MDQ4N0M4LjI3MzE5IDcuOTA0ODcgOC44OTk5OSA3LjI3ODA3IDguODk5OTkgNi41MDQ4N0M4Ljg5OTk5IDUuNzMxNjcgOC4yNzMxOSA1LjEwNDg3IDcuNDk5OTkgNS4xMDQ4N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE09ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMUM1IDAuNDQ3NzE1IDUuNDQ3NzIgMCA2IDBIOUM5LjU1MjI4IDAgMTAgMC40NDc3MTUgMTAgMVYySDE0QzE0LjU1MjMgMiAxNSAyLjQ0NzcyIDE1IDNWNkMxNSA2Ljg4ODggMTQuNjEzMSA3LjY4NzM0IDE0IDguMjM2MDhWMTEuNUMxNCAxMi4zMjg0IDEzLjMyODQgMTMgMTIuNSAxM0gyLjVDMS42NzE1NyAxMyAxIDEyLjMyODQgMSAxMS41VjguMjM1OUMwLjM4Njk3IDcuNjg3MjEgMCA2Ljg4ODgzIDAgNlYzQzAgMi40NDc3MiAwLjQ0NzcxNiAyIDEgMkg1VjFaTTkgMVYySDZWMUg5Wk0xIDNINUg1LjVIOS41SDEwSDE0VjZDMTQgNi42NTQgMTMuNjg2NiA3LjIzNDY3IDEzLjE5OTcgNy42MDA0QzEyLjg2NTUgNy44NTE0NCAxMi40NTA4IDggMTIgOEg4VjcuNUM4IDcuMjIzODYgNy43NzYxNCA3IDcuNSA3QzcuMjIzODYgNyA3IDcuMjIzODYgNyA3LjVWOEgzQzIuNTQ5MyA4IDIuMTM0NiA3Ljg1MTMzIDEuODAwMjkgNy42MDAyMkMxLjMxMzM1IDcuMjM0NDYgMSA2LjY1Mzk2IDEgNlYzWk03IDlIM0MyLjY0OTYxIDkgMi4zMTI5MiA4LjkzOTcyIDIgOC44MjkwNVYxMS41QzIgMTEuNzc2MSAyLjIyMzg2IDEyIDIuNSAxMkgxMi41QzEyLjc3NjEgMTIgMTMgMTEuNzc2MSAxMyAxMS41VjguODI5MTVDMTIuNjg3MSA4LjkzOTc4IDEyLjM1MDQgOSAxMiA5SDhWOS41QzggOS43NzYxNCA3Ljc3NjE0IDEwIDcuNSAxMEM3LjIyMzg2IDEwIDcgOS43NzYxNCA3IDkuNVY5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDZIMTEuNUMxMi4zMjg0IDYgMTMgNi42NzE1NyAxMyA3LjVDMTMgOC4zMjg0MyAxMi4zMjg0IDkgMTEuNSA5SDMuNUMyLjY3MTU3IDkgMiA4LjMyODQzIDIgNy41QzIgNi42NzE1NyAyLjY3MTU3IDYgMy41IDZaTTEgNy41QzEgNi4xMTkyOSAyLjExOTI5IDUgMy41IDVIMTEuNUMxMi44ODA3IDUgMTQgNi4xMTkyOSAxNCA3LjVDMTQgOC44ODA3MSAxMi44ODA3IDEwIDExLjUgMTBIMy41QzIuMTE5MjkgMTAgMSA4Ljg4MDcxIDEgNy41Wk00LjUgN0M0LjIyMzg2IDcgNCA3LjIyMzg2IDQgNy41QzQgNy43NzYxNCA0LjIyMzg2IDggNC41IDhIMTAuNUMxMC43NzYxIDggMTEgNy43NzYxNCAxMSA3LjVDMTEgNy4yMjM4NiAxMC43NzYxIDcgMTAuNSA3SDQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTExLjUgMUMxMS43NzYxIDEgMTIgMS4yMjM4NiAxMiAxLjVWMTMuNUMxMiAxMy43NzYxIDExLjc3NjEgMTQgMTEuNSAxNEMxMS4yMjM5IDE0IDExIDEzLjc3NjEgMTEgMTMuNVYxLjVDMTEgMS4yMjM4NiAxMS4yMjM5IDEgMTEuNSAxWk05LjUgM0M5Ljc3NjE0IDMgMTAgMy4yMjM4NiAxMCAzLjVWMTMuNUMxMCAxMy43NzYxIDkuNzc2MTQgMTQgOS41IDE0QzkuMjIzODYgMTQgOSAxMy43NzYxIDkgMTMuNVYzLjVDOSAzLjIyMzg2IDkuMjIzODYgMyA5LjUgM1pNMTMuNSAzQzEzLjc3NjEgMyAxNCAzLjIyMzg2IDE0IDMuNVYxMy41QzE0IDEzLjc3NjEgMTMuNzc2MSAxNCAxMy41IDE0QzEzLjIyMzkgMTQgMTMgMTMuNzc2MSAxMyAxMy41VjMuNUMxMyAzLjIyMzg2IDEzLjIyMzkgMyAxMy41IDNaTTUuNSA0QzUuNzc2MTQgNCA2IDQuMjIzODYgNiA0LjVWMTMuNUM2IDEzLjc3NjEgNS43NzYxNCAxNCA1LjUgMTRDNS4yMjM4NiAxNCA1IDEzLjc3NjEgNSAxMy41VjQuNUM1IDQuMjIzODYgNS4yMjM4NiA0IDUuNSA0Wk0xLjUgNUMxLjc3NjE0IDUgMiA1LjIyMzg2IDIgNS41VjEzLjVDMiAxMy43NzYxIDEuNzc2MTQgMTQgMS41IDE0QzEuMjIzODYgMTQgMSAxMy43NzYxIDEgMTMuNVY1LjVDMSA1LjIyMzg2IDEuMjIzODYgNSAxLjUgNVpNNy41IDVDNy43NzYxNCA1IDggNS4yMjM4NiA4IDUuNVYxMy41QzggMTMuNzc2MSA3Ljc3NjE0IDE0IDcuNSAxNEM3LjIyMzg2IDE0IDcgMTMuNzc2MSA3IDEzLjVWNS41QzcgNS4yMjM4NiA3LjIyMzg2IDUgNy41IDVaTTMuNSA3QzMuNzc2MTQgNyA0IDcuMjIzODYgNCA3LjVWMTMuNUM0IDEzLjc3NjEgMy43NzYxNCAxNCAzLjUgMTRDMy4yMjM4NiAxNCAzIDEzLjc3NjEgMyAxMy41VjcuNUMzIDcuMjIzODYgMy4yMjM4NiA3IDMuNSA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC42MDEyNCAxLjI1MDg2QzguNjAxMjQgMS43NTQ1OSA4LjI2Mjc4IDIuMTc5MjcgNy44MDA4NyAyLjMwOTg5QzEwLjE0NTkgMi40NjQ3IDEyIDQuNDE1ODIgMTIgNi43OTk5OVYxMC4yNUMxMiAxMS4wNTYzIDEyLjAzMjkgMTEuNzA3NCAxMi43MjM2IDEyLjA1MjhDMTIuOTMxIDEyLjE1NjUgMTMuMDM5OSAxMi4zODkyIDEyLjk4NjYgMTIuNjE0OUMxMi45MzMzIDEyLjg0MDYgMTIuNzMxOSAxMyAxMi41IDEzSDguMTYxNDRDOC4zNjkwNCAxMy4xODMyIDguNDk5OTcgMTMuNDUxMyA4LjQ5OTk3IDEzLjc1QzguNDk5OTcgMTQuMzAyMyA4LjA1MjI2IDE0Ljc1IDcuNDk5OTcgMTQuNzVDNi45NDc2OSAxNC43NSA2LjQ5OTk3IDE0LjMwMjMgNi40OTk5NyAxMy43NUM2LjQ5OTk3IDEzLjQ1MTMgNi42MzA5MSAxMy4xODMyIDYuODM4NTEgMTNIMi40OTk5OUMyLjI2ODEgMTMgMi4wNjY2NCAxMi44NDA2IDIuMDEzMzYgMTIuNjE0OUMxLjk2MDA5IDEyLjM4OTIgMi4wNjg5NyAxMi4xNTY1IDIuMjc2MzggMTIuMDUyOEMyLjk2NzA4IDExLjcwNzQgMi45OTk5OSAxMS4wNTYzIDIuOTk5OTkgMTAuMjVWNi43OTk5OUMyLjk5OTk5IDQuNDE1MzcgNC44NTQ4MSAyLjQ2Mzk2IDcuMjAwNDIgMi4zMDk4QzYuNzM4NjcgMi4xNzkwOCA2LjQwMDM2IDEuNzU0NDggNi40MDAzNiAxLjI1MDg2QzYuNDAwMzYgMC42NDMxMDQgNi44OTMwNCAwLjE1MDQyMSA3LjUwMDggMC4xNTA0MjFDOC4xMDg1NSAwLjE1MDQyMSA4LjYwMTI0IDAuNjQzMTA0IDguNjAxMjQgMS4yNTA4NlpNNy40OTk5OSAzLjI5OTk5QzUuNTY2OTkgMy4yOTk5OSAzLjk5OTk5IDQuODY2OTkgMy45OTk5OSA2Ljc5OTk5VjEwLjI1TDQuMDAwMDIgMTAuMzAwOUM0LjAwMDUgMTAuNzQ2MyA0LjAwMTIxIDExLjQwODQgMy42OTkyOSAxMkgxMS4zMDA3QzEwLjk5ODggMTEuNDA4NCAxMC45OTk1IDEwLjc0NjMgMTEgMTAuMzAwOUwxMSAxMC4yNVY2Ljc5OTk5QzExIDQuODY2OTkgOS40MzI5OSAzLjI5OTk5IDcuNDk5OTkgMy4yOTk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgOUMzIDYuNSA0LjUgNC4yNSA3LjUgMS41QzEwLjUgNC4yNSAxMiA2LjUgMTIgOUMxMiAxMS40ODUzIDkuOTg1MjggMTMuNSA3LjUgMTMuNUM1LjAxNDcyIDEzLjUgMyAxMS40ODUzIDMgOVpNMTAuOTUyNCA4LjMwMzA3QzkuNjczNDcgNy44MjEyMSA4LjI4NzkgOC40NjIwOCA2Ljk4OTU2IDkuMDYyNTlDNS45MzI3IDkuNTUxNDIgNC45MzM2NSAxMC4wMTM1IDQuMDk2OTUgOS44MjE1M0M0LjAzMzU3IDkuNTU4MDQgNCA5LjI4Mjk0IDQgOUM0IDcuMTEyMDMgNS4wMjY4NiA1LjI3MTk1IDcuNSAyLjg3MzU3QzkuNjY4MzcgNC45NzYzOSAxMC43MjUgNi42NTAwNCAxMC45NTI0IDguMzAzMDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxqPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDIuNUMzIDIuMjIzODYgMy4yMjM4NiAyIDMuNSAySDExLjVDMTEuNzc2MSAyIDEyIDIuMjIzODYgMTIgMi41VjEzLjVDMTIgMTMuNjgxOCAxMS45MDE0IDEzLjg0OTIgMTEuNzQyNCAxMy45MzczQzExLjU4MzQgMTQuMDI1NCAxMS4zODkxIDE0LjAyMDMgMTEuMjM1IDEzLjkyNEw3LjUgMTEuNTg5NkwzLjc2NSAxMy45MjRDMy42MTA4NyAxNC4wMjAzIDMuNDE2NTkgMTQuMDI1NCAzLjI1NzYyIDEzLjkzNzNDMy4wOTg2NCAxMy44NDkyIDMgMTMuNjgxOCAzIDEzLjVWMi41Wk00IDNWMTIuNTk3OUw2Ljk3IDEwLjc0MTZDNy4yOTQyNyAxMC41MzkgNy43MDU3MyAxMC41MzkgOC4wMyAxMC43NDE2TDExIDEyLjU5NzlWM0g0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC4yNSAxQzAuMjUgMC41ODU3ODYgMC41ODU3ODYgMC4yNSAxIDAuMjVIMTRDMTQuNDE0MiAwLjI1IDE0Ljc1IDAuNTg1Nzg2IDE0Ljc1IDFWMTRDMTQuNzUgMTQuNDE0MiAxNC40MTQyIDE0Ljc1IDE0IDE0Ljc1SDFDMC41ODU3ODYgMTQuNzUgMC4yNSAxNC40MTQyIDAuMjUgMTRWMVpNMS43NSAxLjc1VjEzLjI1SDEzLjI1VjEuNzVIMS43NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiOVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMTFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pKX0sST1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSAxMy4yNUwxNCAxMy4yNVYxNC43NUwxIDE0Ljc1VjEzLjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOVwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjExXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIxMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSkpfSxWPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wIDcuNUMwIDcuMjIzODYgMC4yMjM4NTggNyAwLjUgN0gzQzMuMjc2MTQgNyAzLjUgNy4yMjM4NiAzLjUgNy41QzMuNSA3Ljc3NjE0IDMuMjc2MTQgOCAzIDhIMC41QzAuMjIzODU4IDggMCA3Ljc3NjE0IDAgNy41Wk01Ljc1IDcuNUM1Ljc1IDcuMjIzODYgNS45NzM4NiA3IDYuMjUgN0g4Ljc1QzkuMDI2MTQgNyA5LjI1IDcuMjIzODYgOS4yNSA3LjVDOS4yNSA3Ljc3NjE0IDkuMDI2MTQgOCA4Ljc1IDhINi4yNUM1Ljk3Mzg2IDggNS43NSA3Ljc3NjE0IDUuNzUgNy41Wk0xMiA3QzExLjcyMzkgNyAxMS41IDcuMjIzODYgMTEuNSA3LjVDMTEuNSA3Ljc3NjE0IDExLjcyMzkgOCAxMiA4SDE0LjVDMTQuNzc2MSA4IDE1IDcuNzc2MTQgMTUgNy41QzE1IDcuMjIzODYgMTQuNzc2MSA3IDE0LjUgN0gxMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSA2LjYyNUMxLjAxNjc1IDYuNjI1IDAuNjI1IDcuMDE2NzUgMC42MjUgNy41QzAuNjI1IDcuOTgzMjUgMS4wMTY3NSA4LjM3NSAxLjUgOC4zNzVDMS45ODMyNSA4LjM3NSAyLjM3NSA3Ljk4MzI1IDIuMzc1IDcuNUMyLjM3NSA3LjAxNjc1IDEuOTgzMjUgNi42MjUgMS41IDYuNjI1Wk01LjUgNi42MjVDNS4wMTY3NSA2LjYyNSA0LjYyNSA3LjAxNjc1IDQuNjI1IDcuNUM0LjYyNSA3Ljk4MzI1IDUuMDE2NzUgOC4zNzUgNS41IDguMzc1QzUuOTgzMjUgOC4zNzUgNi4zNzUgNy45ODMyNSA2LjM3NSA3LjVDNi4zNzUgNy4wMTY3NSA1Ljk4MzI1IDYuNjI1IDUuNSA2LjYyNVpNOS41IDYuNjI1QzkuMDE2NzUgNi42MjUgOC42MjUgNy4wMTY3NSA4LjYyNSA3LjVDOC42MjUgNy45ODMyNSA5LjAxNjc1IDguMzc1IDkuNSA4LjM3NUM5Ljk4MzI1IDguMzc1IDEwLjM3NSA3Ljk4MzI1IDEwLjM3NSA3LjVDMTAuMzc1IDcuMDE2NzUgOS45ODMyNSA2LjYyNSA5LjUgNi42MjVaTTEyLjYyNSA3LjVDMTIuNjI1IDcuMDE2NzUgMTMuMDE2OCA2LjYyNSAxMy41IDYuNjI1QzEzLjk4MzIgNi42MjUgMTQuMzc1IDcuMDE2NzUgMTQuMzc1IDcuNUMxNC4zNzUgNy45ODMyNSAxMy45ODMyIDguMzc1IDEzLjUgOC4zNzVDMTMuMDE2OCA4LjM3NSAxMi42MjUgNy45ODMyNSAxMi42MjUgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS43NSAxTDEuNzUgMTRMMC4yNDk5OTkgMTRMMC4yNSAxTDEuNzUgMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDEwIDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEwXCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTAgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxMiA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMlwiLHk6XCIxM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDEyIDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiMTNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCA1KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgNSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCAzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCA5KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgOSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIxMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDggMTEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgMTEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjZcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDYgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNlwiLHk6XCIxM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDYgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjRcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDQgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNFwiLHk6XCIxM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDQgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEwXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxMCAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMlwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTIgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNlwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNiAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI0XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA0IDEpXCIsZmlsbDpufSkpfSxUPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiNS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI1LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCIzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjVcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjNcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIzXCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjNcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOVwiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiOS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI5LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMTEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiMTEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI1LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI5LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiMTEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSl9LEQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjI1IDFMMTMuMjUgMTRMMTQuNzUgMTRMMTQuNzUgMUwxMy4yNSAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNSA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNSAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDMgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDMgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA3IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCAxIDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA3IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgNSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgNSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgOSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgOSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgMTEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCAxIDExKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgOSA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgOSAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDExIDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCAxMSAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDUgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDMgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDkgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDExIDEpXCIsZmlsbDpufSkpfSxCPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjI1IDcuNUMxLjI1IDcuMjIzODYgMS40NzM4NiA3IDEuNzUgN0gxMy4yNUMxMy41MjYxIDcgMTMuNzUgNy4yMjM4NiAxMy43NSA3LjVDMTMuNzUgNy43NzYxNCAxMy41MjYxIDggMTMuMjUgOEgxLjc1QzEuNDczODYgOCAxLjI1IDcuNzc2MTQgMS4yNSA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxaPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiNS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjNcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjkuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgMS40OTk5NEMxIDEuMjIzOCAxLjIyMzg2IDAuOTk5OTM5IDEuNSAwLjk5OTkzOUg2VjEuOTk5OTRIMlY1Ljk5OTk0SDFWMS40OTk5NFpNMTMgMS45OTk5NEg5VjAuOTk5OTM5SDEzLjVDMTMuNzc2MSAwLjk5OTkzOSAxNCAxLjIyMzggMTQgMS40OTk5NFY1Ljk5OTk0SDEzVjEuOTk5OTRaTTEgMTMuNDk5OVY4Ljk5OTk0SDJWMTIuOTk5OUg2VjEzLjk5OTlIMS41QzEuMjIzODYgMTMuOTk5OSAxIDEzLjc3NjEgMSAxMy40OTk5Wk0xMyAxMi45OTk5VjguOTk5OTRIMTRWMTMuNDk5OUMxNCAxMy43NzYxIDEzLjc3NjEgMTMuOTk5OSAxMy41IDEzLjk5OTlIOS41VjEyLjk5OTlIMTNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSwkPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjUgM0MxLjIyMzg2IDMgMSAzLjIyMzg2IDEgMy41QzEgMy43NzYxNCAxLjIyMzg2IDQgMS41IDRIMTMuNUMxMy43NzYxIDQgMTQgMy43NzYxNCAxNCAzLjVDMTQgMy4yMjM4NiAxMy43NzYxIDMgMTMuNSAzSDEuNVpNMSA3LjVDMSA3LjIyMzg2IDEuMjIzODYgNyAxLjUgN0gzLjVDMy43NzYxNCA3IDQgNy4yMjM4NiA0IDcuNUM0IDcuNzc2MTQgMy43NzYxNCA4IDMuNSA4SDEuNUMxLjIyMzg2IDggMSA3Ljc3NjE0IDEgNy41Wk0xIDExLjVDMSAxMS4yMjM5IDEuMjIzODYgMTEgMS41IDExQzEuNzc2MTQgMTEgMiAxMS4yMjM5IDIgMTEuNUMyIDExLjc3NjEgMS43NzYxNCAxMiAxLjUgMTJDMS4yMjM4NiAxMiAxIDExLjc3NjEgMSAxMS41Wk0zIDExLjVDMyAxMS4yMjM5IDMuMjIzODYgMTEgMy41IDExQzMuNzc2MTQgMTEgNCAxMS4yMjM5IDQgMTEuNUM0IDExLjc3NjEgMy43NzYxNCAxMiAzLjUgMTJDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41Wk01LjUgMTFDNS4yMjM4NiAxMSA1IDExLjIyMzkgNSAxMS41QzUgMTEuNzc2MSA1LjIyMzg2IDEyIDUuNSAxMkM1Ljc3NjE0IDEyIDYgMTEuNzc2MSA2IDExLjVDNiAxMS4yMjM5IDUuNzc2MTQgMTEgNS41IDExWk03IDExLjVDNyAxMS4yMjM5IDcuMjIzODYgMTEgNy41IDExQzcuNzc2MTQgMTEgOCAxMS4yMjM5IDggMTEuNUM4IDExLjc3NjEgNy43NzYxNCAxMiA3LjUgMTJDNy4yMjM4NiAxMiA3IDExLjc3NjEgNyAxMS41Wk05LjUgMTFDOS4yMjM4NiAxMSA5IDExLjIyMzkgOSAxMS41QzkgMTEuNzc2MSA5LjIyMzg2IDEyIDkuNSAxMkM5Ljc3NjE0IDEyIDEwIDExLjc3NjEgMTAgMTEuNUMxMCAxMS4yMjM5IDkuNzc2MTQgMTEgOS41IDExWk0xMSAxMS41QzExIDExLjIyMzkgMTEuMjIzOSAxMSAxMS41IDExQzExLjc3NjEgMTEgMTIgMTEuMjIzOSAxMiAxMS41QzEyIDExLjc3NjEgMTEuNzc2MSAxMiAxMS41IDEyQzExLjIyMzkgMTIgMTEgMTEuNzc2MSAxMSAxMS41Wk0xMy41IDExQzEzLjIyMzkgMTEgMTMgMTEuMjIzOSAxMyAxMS41QzEzIDExLjc3NjEgMTMuMjIzOSAxMiAxMy41IDEyQzEzLjc3NjEgMTIgMTQgMTEuNzc2MSAxNCAxMS41QzE0IDExLjIyMzkgMTMuNzc2MSAxMSAxMy41IDExWk02LjUgN0M2LjIyMzg2IDcgNiA3LjIyMzg2IDYgNy41QzYgNy43NzYxNCA2LjIyMzg2IDggNi41IDhIOC41QzguNzc2MTQgOCA5IDcuNzc2MTQgOSA3LjVDOSA3LjIyMzg2IDguNzc2MTQgNyA4LjUgN0g2LjVaTTExIDcuNUMxMSA3LjIyMzg2IDExLjIyMzkgNyAxMS41IDdIMTMuNUMxMy43NzYxIDcgMTQgNy4yMjM4NiAxNCA3LjVDMTQgNy43NzYxNCAxMy43NzYxIDggMTMuNSA4SDExLjVDMTEuMjIzOSA4IDExIDcuNzc2MTQgMTEgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQgMS43NUwxIDEuNzVMMSAwLjI0OTk5OUwxNCAwLjI1TDE0IDEuNzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiMTBcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggMTApXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjJcIix5OlwiMTBcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDIgMTApXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiMTJcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggMTIpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjJcIix5OlwiMTJcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDIgMTIpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgOCA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA4IDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIyXCIseTpcIjhcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDIgOClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiAxNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTAgOClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiMTRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDEwIDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMlwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxMiA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMlwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTIgMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjZcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgNiA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI2XCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA2IDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI0XCIseTpcIjhcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDQgOClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNFwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgNCAxNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCI2XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA4IDYpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjJcIix5OlwiNlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiA2KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCI0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAyIDQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjEwXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxNCAxMClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiMTJcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDEyKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxNCA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTQgMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjZcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDYpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDQpXCIsZmlsbDpufSkpfSxGPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi41IDJIMi41QzIuMjIzODYgMiAyIDIuMjIzODYgMiAyLjVWMTIuNUMyIDEyLjc3NjEgMi4yMjM4NiAxMyAyLjUgMTNIMTIuNUMxMi43NzYxIDEzIDEzIDEyLjc3NjEgMTMgMTIuNVYyLjVDMTMgMi4yMjM4NiAxMi43NzYxIDIgMTIuNSAyWk0yLjUgMUMxLjY3MTU3IDEgMSAxLjY3MTU3IDEgMi41VjEyLjVDMSAxMy4zMjg0IDEuNjcxNTcgMTQgMi41IDE0SDEyLjVDMTMuMzI4NCAxNCAxNCAxMy4zMjg0IDE0IDEyLjVWMi41QzE0IDEuNjcxNTcgMTMuMzI4NCAxIDEyLjUgMUgyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxXPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjk5OTk4IDAuOTk5OTc2QzEuNDQ3NjkgMC45OTk5NzYgMC45OTk5NzYgMS40NDc2OSAwLjk5OTk3NiAxLjk5OTk4VjEzQzAuOTk5OTc2IDEzLjU1MjMgMS40NDc2OSAxNCAxLjk5OTk4IDE0SDEzQzEzLjU1MjMgMTQgMTQgMTMuNTUyMyAxNCAxM1YxLjk5OTk4QzE0IDEuNDQ3NjkgMTMuNTUyMyAwLjk5OTk3NiAxMyAwLjk5OTk3NkgxLjk5OTk4Wk0xLjk5OTk4IDEuOTk5OThMMTMgMS45OTk5OFYxM0gxLjk5OTk4VjEuOTk5OThaTTQuNDk5OTYgMy45OTk5NkM0LjIyMzgyIDMuOTk5OTYgMy45OTk5NiA0LjIyMzgyIDMuOTk5OTYgNC40OTk5NlYxMC41QzMuOTk5OTYgMTAuNzc2MSA0LjIyMzgyIDExIDQuNDk5OTYgMTFIMTAuNUMxMC43NzYxIDExIDExIDEwLjc3NjEgMTEgMTAuNVY0LjQ5OTk2QzExIDQuMjIzODIgMTAuNzc2MSAzLjk5OTk2IDEwLjUgMy45OTk5Nkg0LjQ5OTk2Wk00Ljk5OTk2IDkuOTk5OTZWNC45OTk5Nkg5Ljk5OTk2VjkuOTk5OTZINC45OTk5NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgNUgxM0MxMy41NTIzIDUgMTQgNS40NDc3MiAxNCA2VjlDMTQgOS41NTIyOCAxMy41NTIzIDEwIDEzIDEwSDJDMS40NDc3MiAxMCAxIDkuNTUyMjggMSA5VjZDMSA1LjQ0NzcyIDEuNDQ3NzIgNSAyIDVaTTAgNkMwIDQuODk1NDMgMC44OTU0MzEgNCAyIDRIMTNDMTQuMTA0NiA0IDE1IDQuODk1NDMgMTUgNlY5QzE1IDEwLjEwNDYgMTQuMTA0NiAxMSAxMyAxMUgyQzAuODk1NDMgMTEgMCAxMC4xMDQ2IDAgOVY2Wk00LjUgNi43NUM0LjA4NTc5IDYuNzUgMy43NSA3LjA4NTc5IDMuNzUgNy41QzMuNzUgNy45MTQyMSA0LjA4NTc5IDguMjUgNC41IDguMjVDNC45MTQyMSA4LjI1IDUuMjUgNy45MTQyMSA1LjI1IDcuNUM1LjI1IDcuMDg1NzkgNC45MTQyMSA2Ljc1IDQuNSA2Ljc1Wk02Ljc1IDcuNUM2Ljc1IDcuMDg1NzkgNy4wODU3OSA2Ljc1IDcuNSA2Ljc1QzcuOTE0MjEgNi43NSA4LjI1IDcuMDg1NzkgOC4yNSA3LjVDOC4yNSA3LjkxNDIxIDcuOTE0MjEgOC4yNSA3LjUgOC4yNUM3LjA4NTc5IDguMjUgNi43NSA3LjkxNDIxIDYuNzUgNy41Wk0xMC41IDYuNzVDMTAuMDg1OCA2Ljc1IDkuNzUgNy4wODU3OSA5Ljc1IDcuNUM5Ljc1IDcuOTE0MjEgMTAuMDg1OCA4LjI1IDEwLjUgOC4yNUMxMC45MTQyIDguMjUgMTEuMjUgNy45MTQyMSAxMS4yNSA3LjVDMTEuMjUgNy4wODU3OSAxMC45MTQyIDYuNzUgMTAuNSA2Ljc1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sej1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41IDFDNC43NzYxNCAxIDUgMS4yMjM4NiA1IDEuNVYySDEwVjEuNUMxMCAxLjIyMzg2IDEwLjIyMzkgMSAxMC41IDFDMTAuNzc2MSAxIDExIDEuMjIzODYgMTEgMS41VjJIMTIuNUMxMy4zMjg0IDIgMTQgMi42NzE1NyAxNCAzLjVWMTIuNUMxNCAxMy4zMjg0IDEzLjMyODQgMTQgMTIuNSAxNEgyLjVDMS42NzE1NyAxNCAxIDEzLjMyODQgMSAxMi41VjMuNUMxIDIuNjcxNTcgMS42NzE1NyAyIDIuNSAySDRWMS41QzQgMS4yMjM4NiA0LjIyMzg2IDEgNC41IDFaTTEwIDNWMy41QzEwIDMuNzc2MTQgMTAuMjIzOSA0IDEwLjUgNEMxMC43NzYxIDQgMTEgMy43NzYxNCAxMSAzLjVWM0gxMi41QzEyLjc3NjEgMyAxMyAzLjIyMzg2IDEzIDMuNVY1SDJWMy41QzIgMy4yMjM4NiAyLjIyMzg2IDMgMi41IDNINFYzLjVDNCAzLjc3NjE0IDQuMjIzODYgNCA0LjUgNEM0Ljc3NjE0IDQgNSAzLjc3NjE0IDUgMy41VjNIMTBaTTIgNlYxMi41QzIgMTIuNzc2MSAyLjIyMzg2IDEzIDIuNSAxM0gxMi41QzEyLjc3NjEgMTMgMTMgMTIuNzc2MSAxMyAxMi41VjZIMlpNNyA3LjVDNyA3LjIyMzg2IDcuMjIzODYgNyA3LjUgN0M3Ljc3NjE0IDcgOCA3LjIyMzg2IDggNy41QzggNy43NzYxNCA3Ljc3NjE0IDggNy41IDhDNy4yMjM4NiA4IDcgNy43NzYxNCA3IDcuNVpNOS41IDdDOS4yMjM4NiA3IDkgNy4yMjM4NiA5IDcuNUM5IDcuNzc2MTQgOS4yMjM4NiA4IDkuNSA4QzkuNzc2MTQgOCAxMCA3Ljc3NjE0IDEwIDcuNUMxMCA3LjIyMzg2IDkuNzc2MTQgNyA5LjUgN1pNMTEgNy41QzExIDcuMjIzODYgMTEuMjIzOSA3IDExLjUgN0MxMS43NzYxIDcgMTIgNy4yMjM4NiAxMiA3LjVDMTIgNy43NzYxNCAxMS43NzYxIDggMTEuNSA4QzExLjIyMzkgOCAxMSA3Ljc3NjE0IDExIDcuNVpNMTEuNSA5QzExLjIyMzkgOSAxMSA5LjIyMzg2IDExIDkuNUMxMSA5Ljc3NjE0IDExLjIyMzkgMTAgMTEuNSAxMEMxMS43NzYxIDEwIDEyIDkuNzc2MTQgMTIgOS41QzEyIDkuMjIzODYgMTEuNzc2MSA5IDExLjUgOVpNOSA5LjVDOSA5LjIyMzg2IDkuMjIzODYgOSA5LjUgOUM5Ljc3NjE0IDkgMTAgOS4yMjM4NiAxMCA5LjVDMTAgOS43NzYxNCA5Ljc3NjE0IDEwIDkuNSAxMEM5LjIyMzg2IDEwIDkgOS43NzYxNCA5IDkuNVpNNy41IDlDNy4yMjM4NiA5IDcgOS4yMjM4NiA3IDkuNUM3IDkuNzc2MTQgNy4yMjM4NiAxMCA3LjUgMTBDNy43NzYxNCAxMCA4IDkuNzc2MTQgOCA5LjVDOCA5LjIyMzg2IDcuNzc2MTQgOSA3LjUgOVpNNSA5LjVDNSA5LjIyMzg2IDUuMjIzODYgOSA1LjUgOUM1Ljc3NjE0IDkgNiA5LjIyMzg2IDYgOS41QzYgOS43NzYxNCA1Ljc3NjE0IDEwIDUuNSAxMEM1LjIyMzg2IDEwIDUgOS43NzYxNCA1IDkuNVpNMy41IDlDMy4yMjM4NiA5IDMgOS4yMjM4NiAzIDkuNUMzIDkuNzc2MTQgMy4yMjM4NiAxMCAzLjUgMTBDMy43NzYxNCAxMCA0IDkuNzc2MTQgNCA5LjVDNCA5LjIyMzg2IDMuNzc2MTQgOSAzLjUgOVpNMyAxMS41QzMgMTEuMjIzOSAzLjIyMzg2IDExIDMuNSAxMUMzLjc3NjE0IDExIDQgMTEuMjIzOSA0IDExLjVDNCAxMS43NzYxIDMuNzc2MTQgMTIgMy41IDEyQzMuMjIzODYgMTIgMyAxMS43NzYxIDMgMTEuNVpNNS41IDExQzUuMjIzODYgMTEgNSAxMS4yMjM5IDUgMTEuNUM1IDExLjc3NjEgNS4yMjM4NiAxMiA1LjUgMTJDNS43NzYxNCAxMiA2IDExLjc3NjEgNiAxMS41QzYgMTEuMjIzOSA1Ljc3NjE0IDExIDUuNSAxMVpNNyAxMS41QzcgMTEuMjIzOSA3LjIyMzg2IDExIDcuNSAxMUM3Ljc3NjE0IDExIDggMTEuMjIzOSA4IDExLjVDOCAxMS43NzYxIDcuNzc2MTQgMTIgNy41IDEyQzcuMjIzODYgMTIgNyAxMS43NzYxIDcgMTEuNVpNOS41IDExQzkuMjIzODYgMTEgOSAxMS4yMjM5IDkgMTEuNUM5IDExLjc3NjEgOS4yMjM4NiAxMiA5LjUgMTJDOS43NzYxNCAxMiAxMCAxMS43NzYxIDEwIDExLjVDMTAgMTEuMjIzOSA5Ljc3NjE0IDExIDkuNSAxMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgM0MxLjQ0NzcyIDMgMSAzLjQ0NzcyIDEgNFYxMUMxIDExLjU1MjMgMS40NDc3MiAxMiAyIDEySDEzQzEzLjU1MjMgMTIgMTQgMTEuNTUyMyAxNCAxMVY0QzE0IDMuNDQ3NzIgMTMuNTUyMyAzIDEzIDNIMlpNMCA0QzAgMi44OTU0MyAwLjg5NTQzMSAyIDIgMkgxM0MxNC4xMDQ2IDIgMTUgMi44OTU0MyAxNSA0VjExQzE1IDEyLjEwNDYgMTQuMTA0NiAxMyAxMyAxM0gyQzAuODk1NDMxIDEzIDAgMTIuMTA0NiAwIDExVjRaTTIgNC4yNUMyIDQuMTExOTMgMi4xMTE5MyA0IDIuMjUgNEg0Ljc1QzQuODg4MDcgNCA1IDQuMTExOTMgNSA0LjI1VjUuNzU0NTRDNSA1Ljg5MjYxIDQuODg4MDcgNi4wMDQ1NCA0Ljc1IDYuMDA0NTRIMi4yNUMyLjExMTkzIDYuMDA0NTQgMiA1Ljg5MjYxIDIgNS43NTQ1NFY0LjI1Wk0xMi4xMDEgNy41ODQyMUMxMi4xMDEgOS4wMjA3MyAxMC45MzY1IDEwLjE4NTMgOS40OTk5OCAxMC4xODUzQzguMDYzNDYgMTAuMTg1MyA2Ljg5ODkzIDkuMDIwNzMgNi44OTg5MyA3LjU4NDIxQzYuODk4OTMgNi4xNDc2OSA4LjA2MzQ2IDQuOTgzMTUgOS40OTk5OCA0Ljk4MzE1QzEwLjkzNjUgNC45ODMxNSAxMi4xMDEgNi4xNDc2OSAxMi4xMDEgNy41ODQyMVpNMTMuMTAxIDcuNTg0MjFDMTMuMTAxIDkuNTczMDIgMTEuNDg4OCAxMS4xODUzIDkuNDk5OTggMTEuMTg1M0M3LjUxMTE3IDExLjE4NTMgNS44OTg5MyA5LjU3MzAyIDUuODk4OTMgNy41ODQyMUM1Ljg5ODkzIDUuNTk1NCA3LjUxMTE3IDMuOTgzMTUgOS40OTk5OCAzLjk4MzE1QzExLjQ4ODggMy45ODMxNSAxMy4xMDEgNS41OTU0IDEzLjEwMSA3LjU4NDIxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAzLjVDMiAzLjIyMzg2IDIuMjIzODYgMyAyLjUgM0gxMi41QzEyLjc3NjEgMyAxMyAzLjIyMzg2IDEzIDMuNVY5LjVDMTMgOS43NzYxNCAxMi43NzYxIDEwIDEyLjUgMTBIMi41QzIuMjIzODYgMTAgMiA5Ljc3NjE0IDIgOS41VjMuNVpNMiAxMC45MTQ2QzEuNDE3NCAxMC43MDg3IDEgMTAuMTUzMSAxIDkuNVYzLjVDMSAyLjY3MTU3IDEuNjcxNTcgMiAyLjUgMkgxMi41QzEzLjMyODQgMiAxNCAyLjY3MTU3IDE0IDMuNVY5LjVDMTQgMTAuMTUzMSAxMy41ODI2IDEwLjcwODcgMTMgMTAuOTE0NlYxMS41QzEzIDEyLjMyODQgMTIuMzI4NCAxMyAxMS41IDEzSDMuNUMyLjY3MTU3IDEzIDIgMTIuMzI4NCAyIDExLjVWMTAuOTE0NlpNMTIgMTFWMTEuNUMxMiAxMS43NzYxIDExLjc3NjEgMTIgMTEuNSAxMkgzLjVDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41VjExSDEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi41IDNDMi4yMjM4NiAzIDIgMy4yMjM4NiAyIDMuNVY5LjVDMiA5Ljc3NjE0IDIuMjIzODYgMTAgMi41IDEwSDEyLjVDMTIuNzc2MSAxMCAxMyA5Ljc3NjE0IDEzIDkuNVYzLjVDMTMgMy4yMjM4NiAxMi43NzYxIDMgMTIuNSAzSDIuNVpNMSA5LjVDMSAxMC4xNTMxIDEuNDE3NCAxMC43MDg3IDIgMTAuOTE0NlYxMS41QzIgMTIuMzI4NCAyLjY3MTU3IDEzIDMuNSAxM0gxMS41QzEyLjMyODQgMTMgMTMgMTIuMzI4NCAxMyAxMS41VjEwLjkxNDZDMTMuNTgyNiAxMC43MDg3IDE0IDEwLjE1MzEgMTQgOS41VjMuNUMxNCAyLjY3MTU3IDEzLjMyODQgMiAxMi41IDJIMi41QzEuNjcxNTcgMiAxIDIuNjcxNTcgMSAzLjVWOS41Wk0xMiAxMS41VjExSDNWMTEuNUMzIDExLjc3NjEgMy4yMjM4NiAxMiAzLjUgMTJIMTEuNUMxMS43NzYxIDEyIDEyIDExLjc3NjEgMTIgMTEuNVpNNS41IDZDNS4yMjM4NiA2IDUgNi4yMjM4NiA1IDYuNUM1IDYuNzc2MTQgNS4yMjM4NiA3IDUuNSA3SDkuNUM5Ljc3NjE0IDcgMTAgNi43NzYxNCAxMCA2LjVDMTAgNi4yMjM4NiA5Ljc3NjE0IDYgOS41IDZINS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAzLjVDMiAzLjIyMzg2IDIuMjIzODYgMyAyLjUgM0gxMi41QzEyLjc3NjEgMyAxMyAzLjIyMzg2IDEzIDMuNVY5LjVDMTMgOS43NzYxNCAxMi43NzYxIDEwIDEyLjUgMTBIMi41QzIuMjIzODYgMTAgMiA5Ljc3NjE0IDIgOS41VjMuNVpNMiAxMC45MTQ2QzEuNDE3NCAxMC43MDg3IDEgMTAuMTUzMSAxIDkuNVYzLjVDMSAyLjY3MTU3IDEuNjcxNTcgMiAyLjUgMkgxMi41QzEzLjMyODQgMiAxNCAyLjY3MTU3IDE0IDMuNVY5LjVDMTQgMTAuMTUzMSAxMy41ODI2IDEwLjcwODcgMTMgMTAuOTE0NlYxMS41QzEzIDEyLjMyODQgMTIuMzI4NCAxMyAxMS41IDEzSDMuNUMyLjY3MTU3IDEzIDIgMTIuMzI4NCAyIDExLjVWMTAuOTE0NlpNMTIgMTFWMTEuNUMxMiAxMS43NzYxIDExLjc3NjEgMTIgMTEuNSAxMkgzLjVDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41VjExSDEyWk01IDYuNUM1IDYuMjIzODYgNS4yMjM4NiA2IDUuNSA2SDdWNC41QzcgNC4yMjM4NiA3LjIyMzg2IDQgNy41IDRDNy43NzYxNCA0IDggNC4yMjM4NiA4IDQuNVY2SDkuNUM5Ljc3NjE0IDYgMTAgNi4yMjM4NiAxMCA2LjVDMTAgNi43NzYxNCA5Ljc3NjE0IDcgOS41IDdIOFY4LjVDOCA4Ljc3NjE0IDcuNzc2MTQgOSA3LjUgOUM3LjIyMzg2IDkgNyA4Ljc3NjE0IDcgOC41VjdINS41QzUuMjIzODYgNyA1IDYuNzc2MTQgNSA2LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxKPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjE4MTc5IDYuMTgxODFDNC4zNTc1MyA2LjAwNjA4IDQuNjQyNDUgNi4wMDYwOCA0LjgxODE5IDYuMTgxODFMNy40OTk5OSA4Ljg2MzYyTDEwLjE4MTggNi4xODE4MUMxMC4zNTc1IDYuMDA2MDggMTAuNjQyNCA2LjAwNjA4IDEwLjgxODIgNi4xODE4MUMxMC45OTM5IDYuMzU3NTUgMTAuOTkzOSA2LjY0MjQ3IDEwLjgxODIgNi44MTgyMUw3LjgxODE5IDkuODE4MjFDNy43MzM3OSA5LjkwMjYgNy42MTkzNCA5Ljk1MDAxIDcuNDk5OTkgOS45NTAwMUM3LjM4MDY0IDkuOTUwMDEgNy4yNjYxOCA5LjkwMjYgNy4xODE3OSA5LjgxODIxTDQuMTgxNzkgNi44MTgyMUM0LjAwNjA1IDYuNjQyNDcgNC4wMDYwNSA2LjM1NzU1IDQuMTgxNzkgNi4xODE4MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguODE4MDkgNC4xODE3OUM4Ljk5MzgzIDQuMzU3NTMgOC45OTM4MyA0LjY0MjQ1IDguODE4MDkgNC44MTgxOUw2LjEzNjI5IDcuNDk5OTlMOC44MTgwOSAxMC4xODE4QzguOTkzODMgMTAuMzU3NSA4Ljk5MzgzIDEwLjY0MjQgOC44MTgwOSAxMC44MTgyQzguNjQyMzYgMTAuOTkzOSA4LjM1NzQzIDEwLjk5MzkgOC4xODE3IDEwLjgxODJMNS4xODE3IDcuODE4MTlDNS4wOTczMSA3LjczMzc5IDUuMDQ5OSA3LjYxOTMzIDUuMDQ5OSA3LjQ5OTk5QzUuMDQ5OSA3LjM4MDY0IDUuMDk3MzEgNy4yNjYxOCA1LjE4MTcgNy4xODE3OUw4LjE4MTcgNC4xODE3OUM4LjM1NzQzIDQuMDA2MDUgOC42NDIzNiA0LjAwNjA1IDguODE4MDkgNC4xODE3OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuMTgxOTQgNC4xODE4NUM2LjM1NzY3IDQuMDA2MTEgNi42NDI2IDQuMDA2MTEgNi44MTgzMyA0LjE4MTg1TDkuODE4MzMgNy4xODE4NUM5LjkwMjcyIDcuMjY2MjQgOS45NTAxMyA3LjM4MDcgOS45NTAxMyA3LjUwMDA1QzkuOTUwMTMgNy42MTk0IDkuOTAyNzIgNy43MzM4NiA5LjgxODMzIDcuODE4MjVMNi44MTgzMyAxMC44MTgyQzYuNjQyNiAxMC45OTQgNi4zNTc2NyAxMC45OTQgNi4xODE5NCAxMC44MTgyQzYuMDA2MiAxMC42NDI1IDYuMDA2MiAxMC4zNTc2IDYuMTgxOTQgMTAuMTgxOUw4Ljg2Mzc0IDcuNTAwMDVMNi4xODE5NCA0LjgxODI1QzYuMDA2MiA0LjY0MjUxIDYuMDA2MiA0LjM1NzU5IDYuMTgxOTQgNC4xODE4NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGVlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjkzMTc5IDUuNDMxNzlDNC43NTYwNSA1LjYwNzUzIDQuNzU2MDUgNS44OTI0NSA0LjkzMTc5IDYuMDY4MTlDNS4xMDc1MyA2LjI0MzkyIDUuMzkyNDUgNi4yNDM5MiA1LjU2ODE5IDYuMDY4MTlMNy40OTk5OSA0LjEzNjM4TDkuNDMxNzkgNi4wNjgxOUM5LjYwNzUzIDYuMjQzOTIgOS44OTI0NSA2LjI0MzkyIDEwLjA2ODIgNi4wNjgxOUMxMC4yNDM5IDUuODkyNDUgMTAuMjQzOSA1LjYwNzUzIDEwLjA2ODIgNS40MzE3OUw3LjgxODE5IDMuMTgxNzlDNy43MzM3OSAzLjA5NzQgNy42MTkzMyAzLjA0OTk5IDcuNDk5OTkgMy4wNDk5OUM3LjM4MDY0IDMuMDQ5OTkgNy4yNjYxOCAzLjA5NzQgNy4xODE3OSAzLjE4MTc5TDQuOTMxNzkgNS40MzE3OVpNMTAuMDY4MiA5LjU2ODE5QzEwLjI0MzkgOS4zOTI0NSAxMC4yNDM5IDkuMTA3NTMgMTAuMDY4MiA4LjkzMTc5QzkuODkyNDUgOC43NTYwNiA5LjYwNzUzIDguNzU2MDYgOS40MzE3OSA4LjkzMTc5TDcuNDk5OTkgMTAuODYzNkw1LjU2ODE5IDguOTMxNzlDNS4zOTI0NSA4Ljc1NjA2IDUuMTA3NTMgOC43NTYwNiA0LjkzMTc5IDguOTMxNzlDNC43NTYwNSA5LjEwNzUzIDQuNzU2MDUgOS4zOTI0NSA0LjkzMTc5IDkuNTY4MTlMNy4xODE3OSAxMS44MTgyQzcuMzU3NTMgMTEuOTkzOSA3LjY0MjQ1IDExLjk5MzkgNy44MTgxOSAxMS44MTgyTDEwLjA2ODIgOS41NjgxOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjE4MTc5IDguODE4MTlDNC4wMDYwNSA4LjY0MjQ1IDQuMDA2MDUgOC4zNTc1MyA0LjE4MTc5IDguMTgxNzlMNy4xODE3OSA1LjE4MTc5QzcuMjY2MTggNS4wOTc0IDcuMzgwNjQgNS4wNDk5OSA3LjQ5OTk5IDUuMDQ5OTlDNy42MTkzMyA1LjA0OTk5IDcuNzMzNzkgNS4wOTc0IDcuODE4MTkgNS4xODE3OUwxMC44MTgyIDguMTgxNzlDMTAuOTkzOSA4LjM1NzUzIDEwLjk5MzkgOC42NDI0NSAxMC44MTgyIDguODE4MTlDMTAuNjQyNCA4Ljk5MzkyIDEwLjM1NzUgOC45OTM5MiAxMC4xODE4IDguODE4MTlMNy40OTk5OSA2LjEzNjM4TDQuODE4MTkgOC44MTgxOUM0LjY0MjQ1IDguOTkzOTIgNC4zNTc1MyA4Ljk5MzkyIDQuMTgxNzkgOC44MTgxOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG5lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi41IDNMMi40OTk5OSAzLjAwMDAyQzEuNjcxNTcgMy4wMDAwMiAwLjk5OTk5OSAzLjY3MTU5IDAuOTk5OTk5IDQuNTAwMDJWOS41MDAwMkMwLjk5OTk5OSAxMC4zMjg0IDEuNjcxNTcgMTEgMi41IDExSDcuNTAwMDJDNy42MzI2MyAxMSA3Ljc1OTgxIDExLjA1MjcgNy44NTM1OCAxMS4xNDY1TDkuOTk5OTkgMTMuMjkyOVYxMS41QzkuOTk5OTkgMTEuMjIzOSAxMC4yMjM5IDExIDEwLjUgMTFIMTIuNUMxMy4zMjg0IDExIDE0IDEwLjMyODQgMTQgOS41MDAwMlY0LjVDMTQgMy42NzE1NyAxMy4zMjg0IDMgMTIuNSAzWk0yLjQ5OTk5IDIuMDAwMDJMMTIuNSAyQzEzLjg4MDcgMiAxNSAzLjExOTI4IDE1IDQuNVY5LjUwMDAyQzE1IDEwLjg4MDcgMTMuODgwNyAxMiAxMi41IDEySDExVjE0LjVDMTEgMTQuNzAyMiAxMC44NzgyIDE0Ljg4NDUgMTAuNjkxMyAxNC45NjE5QzEwLjUwNDUgMTUuMDM5MyAxMC4yODk0IDE0Ljk5NjUgMTAuMTQ2NCAxNC44NTM1TDcuMjkyOTIgMTJIMi41QzEuMTE5MjkgMTIgMCAxMC44ODA3IDAgOS41MDAwMlY0LjUwMDAyQzAgMy4xMTkzMSAxLjExOTI4IDIuMDAwMDIgMi40OTk5OSAyLjAwMDAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTExLjQ2NjkgMy43MjY4NEMxMS43NTU4IDMuOTE1NzQgMTEuODM2OSA0LjMwMzA4IDExLjY0OCA0LjU5MTk4TDcuMzk3OTkgMTEuMDkyQzcuMjk3ODMgMTEuMjQ1MiA3LjEzNTU2IDExLjM0NjcgNi45NTQwMiAxMS4zNjk5QzYuNzcyNDcgMTEuMzkzMSA2LjU4OTg5IDExLjMzNTUgNi40NTQ0NiAxMS4yMTI0TDMuNzA0NDYgOC43MTI0MUMzLjQ0OTA1IDguNDgwMjIgMy40MzAyMyA4LjA4NDk0IDMuNjYyNDIgNy44Mjk1M0MzLjg5NDYxIDcuNTc0MTIgNC4yODk4OSA3LjU1NTI5IDQuNTQ1MyA3Ljc4NzQ5TDYuNzUyOTIgOS43OTQ0MUwxMC42MDE4IDMuOTA3OTJDMTAuNzkwNyAzLjYxOTAyIDExLjE3OCAzLjUzNzk1IDExLjQ2NjkgMy43MjY4NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG9lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc3MDQ1QzMuODQyMjIgMC44NzcwNDUgMC44NzcwNzUgMy44NDIxOSAwLjg3NzA3NSA3LjQ5OTg4QzAuODc3MDc1IDExLjE1NzUgMy44NDIyMiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MxMS4xNTc2IDE0LjEyMjcgMTQuMTIyNyAxMS4xNTc1IDE0LjEyMjcgNy40OTk4OEMxNC4xMjI3IDMuODQyMTkgMTEuMTU3NiAwLjg3NzA0NSA3LjQ5OTkxIDAuODc3MDQ1Wk0xLjgyNzA4IDcuNDk5ODhDMS44MjcwOCA0LjM2Njg2IDQuMzY2ODkgMS44MjcwNCA3LjQ5OTkxIDEuODI3MDRDMTAuNjMyOSAxLjgyNzA0IDEzLjE3MjcgNC4zNjY4NiAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyAxMC42MzI5IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDNC4zNjY4OSAxMy4xNzI3IDEuODI3MDggMTAuNjMyOSAxLjgyNzA4IDcuNDk5ODhaTTEwLjE1ODkgNS41Mzc3NEMxMC4zMTc4IDUuMzExOTEgMTAuMjYzNiA1LjAwMDAxIDEwLjAzNzggNC44NDEwOUM5LjgxMTk0IDQuNjgyMTcgOS41MDAwNCA0LjczNjQyIDkuMzQxMTIgNC45NjIyNUw2LjUxOTc3IDguOTcxNTRMNS4zNTY4MSA3Ljc4NzA2QzUuMTYzMzQgNy41OTAwMiA0Ljg0Njc3IDcuNTg3MTEgNC42NDk3MyA3Ljc4MDU4QzQuNDUyNjggNy45NzQwNCA0LjQ0OTc4IDguMjkwNjEgNC42NDMyNSA4LjQ4NzY1TDYuMjI2NTggMTAuMTAwM0M2LjMzMDU0IDEwLjIwNjIgNi40NzYxNyAxMC4yNjA0IDYuNjI0MDcgMTAuMjQ4M0M2Ljc3MTk3IDEwLjIzNjMgNi45MDY4NiAxMC4xNTkxIDYuOTkyMjYgMTAuMDM3N0wxMC4xNTg5IDUuNTM3NzRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMyAzSDEyVjEySDNMMyAzWk0yIDNDMiAyLjQ0NzcxIDIuNDQ3NzIgMiAzIDJIMTJDMTIuNTUyMyAyIDEzIDIuNDQ3NzIgMTMgM1YxMkMxMyAxMi41NTIzIDEyLjU1MjMgMTMgMTIgMTNIM0MyLjQ0NzcxIDEzIDIgMTIuNTUyMyAyIDEyVjNaTTEwLjM0OTggNS41MTEwNUMxMC41MDYgNS4yODMzNyAxMC40NDgxIDQuOTcyMTIgMTAuMjIwNCA0LjgxNTg3QzkuOTkyNzUgNC42NTk2MSA5LjY4MTUgNC43MTc1MSA5LjUyNTI1IDQuOTQ1MTlMNi42NDA0OCA5LjE0ODU3TDUuMTk3MzMgNy40MDg4OUM1LjAyMTAyIDcuMTk2MzUgNC43MDU4IDcuMTY2OTkgNC40OTMyNyA3LjM0MzI5QzQuMjgwNzMgNy41MTk2IDQuMjUxMzcgNy44MzQ4MiA0LjQyNzY3IDguMDQ3MzVMNi4yOTM0IDEwLjI5NjRDNi4zOTM0OCAxMC40MTcxIDYuNTQ0MzcgMTAuNDgzOCA2LjcwMDk3IDEwLjQ3NjdDNi44NTc1NyAxMC40Njk1IDcuMDAxNzcgMTAuMzg5NCA3LjA5MDQ3IDEwLjI2MDFMMTAuMzQ5OCA1LjUxMTA1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMTM1MjMgNi4xNTgwM0MzLjMyNDEgNS45NTY1NyAzLjY0MDUyIDUuOTQ2MzcgMy44NDE5NyA2LjEzNTIzTDcuNSA5LjU2NDY0TDExLjE1OCA2LjEzNTIzQzExLjM1OTUgNS45NDYzNyAxMS42NzU5IDUuOTU2NTcgMTEuODY0OCA2LjE1ODAzQzEyLjA1MzYgNi4zNTk0OSAxMi4wNDM0IDYuNjc1OTEgMTEuODQyIDYuODY0NzdMNy44NDE5NyAxMC42MTQ4QzcuNjQ5NjQgMTAuNzk1MSA3LjM1MDM2IDEwLjc5NTEgNy4xNTgwMyAxMC42MTQ4TDMuMTU4MDMgNi44NjQ3N0MyLjk1NjU3IDYuNjc1OTEgMi45NDYzNyA2LjM1OTQ5IDMuMTM1MjMgNi4xNTgwM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGxlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04Ljg0MTgyIDMuMTM1MTRDOS4wNDMyNyAzLjMyNDAxIDkuMDUzNDggMy42NDA0MiA4Ljg2NDYyIDMuODQxODhMNS40MzUyMSA3LjQ5OTkxTDguODY0NjIgMTEuMTU3OUM5LjA1MzQ4IDExLjM1OTQgOS4wNDMyNyAxMS42NzU4IDguODQxODIgMTEuODY0N0M4LjY0MDM2IDEyLjA1MzUgOC4zMjM5NCAxMi4wNDMzIDguMTM1MDggMTEuODQxOUw0LjM4NTA4IDcuODQxODhDNC4yMDQ3NyA3LjY0OTU1IDQuMjA0NzcgNy4zNTAyNyA0LjM4NTA4IDcuMTU3OTRMOC4xMzUwOCAzLjE1Nzk0QzguMzIzOTQgMi45NTY0OCA4LjY0MDM2IDIuOTQ2MjggOC44NDE4MiAzLjEzNTE0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuMTU4NCAzLjEzNTA4QzYuMzU5ODUgMi45NDYyMSA2LjY3NjI3IDIuOTU2NDIgNi44NjUxNCAzLjE1Nzg4TDEwLjYxNTEgNy4xNTc4OEMxMC43OTU0IDcuMzUwMiAxMC43OTU0IDcuNjQ5NDkgMTAuNjE1MSA3Ljg0MTgyTDYuODY1MTQgMTEuODQxOEM2LjY3NjI3IDEyLjA0MzMgNi4zNTk4NSAxMi4wNTM1IDYuMTU4NCAxMS44NjQ2QzUuOTU2OTQgMTEuNjc1NyA1Ljk0NjczIDExLjM1OTMgNi4xMzU2IDExLjE1NzlMOS41NjUgNy40OTk4NUw2LjEzNTYgMy44NDE4MkM1Ljk0NjczIDMuNjQwMzYgNS45NTY5NCAzLjMyMzk0IDYuMTU4NCAzLjEzNTA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMTM1MjMgOC44NDE5N0MzLjMyNDEgOS4wNDM0MyAzLjY0MDUyIDkuMDUzNjMgMy44NDE5NyA4Ljg2NDc3TDcuNSA1LjQzNTM2TDExLjE1OCA4Ljg2NDc3QzExLjM1OTUgOS4wNTM2MyAxMS42NzU5IDkuMDQzNDMgMTEuODY0OCA4Ljg0MTk3QzEyLjA1MzYgOC42NDA1MSAxMi4wNDM0IDguMzI0MDkgMTEuODQyIDguMTM1MjNMNy44NDE5NyA0LjM4NTIzQzcuNjQ5NjQgNC4yMDQ5MiA3LjM1MDM2IDQuMjA0OTIgNy4xNTgwMyA0LjM4NTIzTDMuMTU4MDMgOC4xMzUyM0MyLjk1NjU3IDguMzI0MDkgMi45NDYzNyA4LjY0MDUxIDMuMTM1MjMgOC44NDE5N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHVlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjg3NzA3NSA3LjQ5OTkxQzAuODc3MDc1IDMuODQyMjIgMy44NDIyMiAwLjg3NzA3NSA3LjQ5OTkxIDAuODc3MDc1QzExLjE1NzYgMC44NzcwNzUgMTQuMTIyNyAzLjg0MjIyIDE0LjEyMjcgNy40OTk5MUMxNC4xMjI3IDExLjE1NzYgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MzLjg0MjIyIDE0LjEyMjcgMC44NzcwNzUgMTEuMTU3NiAwLjg3NzA3NSA3LjQ5OTkxWk03LjQ5OTkxIDEuODI3MDhDNC4zNjY4OSAxLjgyNzA4IDEuODI3MDggNC4zNjY4OSAxLjgyNzA4IDcuNDk5OTFDMS44MjcwOCAxMC42MzI5IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDMTAuNjMyOSAxMy4xNzI3IDEzLjE3MjcgMTAuNjMyOSAxMy4xNzI3IDcuNDk5OTFDMTMuMTcyNyA0LjM2Njg5IDEwLjYzMjkgMS44MjcwOCA3LjQ5OTkxIDEuODI3MDhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxkZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3NzA3NUMzLjg0MjIyIDAuODc3MDc1IDAuODc3MDc1IDMuODQyMjIgMC44NzcwNzUgNy40OTk5MUMwLjg3NzA3NSAxMS4xNTc2IDMuODQyMjIgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMTEuMTU3NiAxNC4xMjI3IDE0LjEyMjcgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTFDMTQuMTIyNyAzLjg0MjIyIDExLjE1NzYgMC44NzcwNzUgNy40OTk5MSAwLjg3NzA3NVpNMy44NTc2OCAzLjE1MDU3QzQuODQzMTEgMi4zMjQ0OCA2LjExMzQyIDEuODI3MDggNy40OTk5MSAxLjgyNzA4QzEwLjYzMjkgMS44MjcwOCAxMy4xNzI3IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxQzEzLjE3MjcgOC44ODYzOCAxMi42NzUzIDEwLjE1NjcgMTEuODQ5MiAxMS4xNDIxTDMuODU3NjggMy4xNTA1N1pNMy4xNTA1NyAzLjg1NzY4QzIuMzI0NDggNC44NDMxMSAxLjgyNzA4IDYuMTEzNDIgMS44MjcwOCA3LjQ5OTkxQzEuODI3MDggMTAuNjMyOSA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzguODg2MzggMTMuMTcyNyAxMC4xNTY3IDEyLjY3NTMgMTEuMTQyMSAxMS44NDkyTDMuMTUwNTcgMy44NTc2OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHBlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01IDJWMUgxMFYySDVaTTQuNzUgMEM0LjMzNTc5IDAgNCAwLjMzNTc4NiA0IDAuNzVWMUgzLjVDMi42NzE1NyAxIDIgMS42NzE1NyAyIDIuNVYxMi41QzIgMTMuMzI4NCAyLjY3MTU3IDE0IDMuNSAxNEgxMS41QzEyLjMyODQgMTQgMTMgMTMuMzI4NCAxMyAxMi41VjIuNUMxMyAxLjY3MTU3IDEyLjMyODQgMSAxMS41IDFIMTFWMC43NUMxMSAwLjMzNTc4NiAxMC42NjQyIDAgMTAuMjUgMEg0Ljc1Wk0xMSAyVjIuMjVDMTEgMi42NjQyMSAxMC42NjQyIDMgMTAuMjUgM0g0Ljc1QzQuMzM1NzkgMyA0IDIuNjY0MjEgNCAyLjI1VjJIMy41QzMuMjIzODYgMiAzIDIuMjIzODYgMyAyLjVWMTIuNUMzIDEyLjc3NjEgMy4yMjM4NiAxMyAzLjUgMTNIMTEuNUMxMS43NzYxIDEzIDEyIDEyLjc3NjEgMTIgMTIuNVYyLjVDMTIgMi4yMjM4NiAxMS43NzYxIDIgMTEuNSAySDExWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMlYxSDEwVjJINVpNNC43NSAwQzQuMzM1NzkgMCA0IDAuMzM1Nzg2IDQgMC43NVYxSDMuNUMyLjY3MTU3IDEgMiAxLjY3MTU3IDIgMi41VjEyLjVDMiAxMy4zMjg0IDIuNjcxNTcgMTQgMy41IDE0SDdWMTNIMy41QzMuMjIzODYgMTMgMyAxMi43NzYxIDMgMTIuNVYyLjVDMyAyLjIyMzg2IDMuMjIzODYgMiAzLjUgMkg0VjIuMjVDNCAyLjY2NDIxIDQuMzM1NzkgMyA0Ljc1IDNIMTAuMjVDMTAuNjY0MiAzIDExIDIuNjY0MjEgMTEgMi4yNVYySDExLjVDMTEuNzc2MSAyIDEyIDIuMjIzODYgMTIgMi41VjdIMTNWMi41QzEzIDEuNjcxNTcgMTIuMzI4NCAxIDExLjUgMUgxMVYwLjc1QzExIDAuMzM1Nzg2IDEwLjY2NDIgMCAxMC4yNSAwSDQuNzVaTTkgOC41QzkgOC43NzYxNCA4Ljc3NjE0IDkgOC41IDlDOC4yMjM4NiA5IDggOC43NzYxNCA4IDguNUM4IDguMjIzODYgOC4yMjM4NiA4IDguNSA4QzguNzc2MTQgOCA5IDguMjIzODYgOSA4LjVaTTEwLjUgOUMxMC43NzYxIDkgMTEgOC43NzYxNCAxMSA4LjVDMTEgOC4yMjM4NiAxMC43NzYxIDggMTAuNSA4QzEwLjIyMzkgOCAxMCA4LjIyMzg2IDEwIDguNUMxMCA4Ljc3NjE0IDEwLjIyMzkgOSAxMC41IDlaTTEzIDguNUMxMyA4Ljc3NjE0IDEyLjc3NjEgOSAxMi41IDlDMTIuMjIzOSA5IDEyIDguNzc2MTQgMTIgOC41QzEyIDguMjIzODYgMTIuMjIzOSA4IDEyLjUgOEMxMi43NzYxIDggMTMgOC4yMjM4NiAxMyA4LjVaTTE0LjUgOUMxNC43NzYxIDkgMTUgOC43NzYxNCAxNSA4LjVDMTUgOC4yMjM4NiAxNC43NzYxIDggMTQuNSA4QzE0LjIyMzkgOCAxNCA4LjIyMzg2IDE0IDguNUMxNCA4Ljc3NjE0IDE0LjIyMzkgOSAxNC41IDlaTTE1IDEwLjVDMTUgMTAuNzc2MSAxNC43NzYxIDExIDE0LjUgMTFDMTQuMjIzOSAxMSAxNCAxMC43NzYxIDE0IDEwLjVDMTQgMTAuMjIzOSAxNC4yMjM5IDEwIDE0LjUgMTBDMTQuNzc2MSAxMCAxNSAxMC4yMjM5IDE1IDEwLjVaTTE0LjUgMTNDMTQuNzc2MSAxMyAxNSAxMi43NzYxIDE1IDEyLjVDMTUgMTIuMjIzOSAxNC43NzYxIDEyIDE0LjUgMTJDMTQuMjIzOSAxMiAxNCAxMi4yMjM5IDE0IDEyLjVDMTQgMTIuNzc2MSAxNC4yMjM5IDEzIDE0LjUgMTNaTTE0LjUgMTVDMTQuNzc2MSAxNSAxNSAxNC43NzYxIDE1IDE0LjVDMTUgMTQuMjIzOSAxNC43NzYxIDE0IDE0LjUgMTRDMTQuMjIzOSAxNCAxNCAxNC4yMjM5IDE0IDE0LjVDMTQgMTQuNzc2MSAxNC4yMjM5IDE1IDE0LjUgMTVaTTguNSAxMUM4Ljc3NjE0IDExIDkgMTAuNzc2MSA5IDEwLjVDOSAxMC4yMjM5IDguNzc2MTQgMTAgOC41IDEwQzguMjIzODYgMTAgOCAxMC4yMjM5IDggMTAuNUM4IDEwLjc3NjEgOC4yMjM4NiAxMSA4LjUgMTFaTTkgMTIuNUM5IDEyLjc3NjEgOC43NzYxNCAxMyA4LjUgMTNDOC4yMjM4NiAxMyA4IDEyLjc3NjEgOCAxMi41QzggMTIuMjIzOSA4LjIyMzg2IDEyIDguNSAxMkM4Ljc3NjE0IDEyIDkgMTIuMjIzOSA5IDEyLjVaTTguNSAxNUM4Ljc3NjE0IDE1IDkgMTQuNzc2MSA5IDE0LjVDOSAxNC4yMjM5IDguNzc2MTQgMTQgOC41IDE0QzguMjIzODYgMTQgOCAxNC4yMjM5IDggMTQuNUM4IDE0Ljc3NjEgOC4yMjM4NiAxNSA4LjUgMTVaTTExIDE0LjVDMTEgMTQuNzc2MSAxMC43NzYxIDE1IDEwLjUgMTVDMTAuMjIzOSAxNSAxMCAxNC43NzYxIDEwIDE0LjVDMTAgMTQuMjIzOSAxMC4yMjM5IDE0IDEwLjUgMTRDMTAuNzc2MSAxNCAxMSAxNC4yMjM5IDExIDE0LjVaTTEyLjUgMTVDMTIuNzc2MSAxNSAxMyAxNC43NzYxIDEzIDE0LjVDMTMgMTQuMjIzOSAxMi43NzYxIDE0IDEyLjUgMTRDMTIuMjIzOSAxNCAxMiAxNC4yMjM5IDEyIDE0LjVDMTIgMTQuNzc2MSAxMi4yMjM5IDE1IDEyLjUgMTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxoZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41MDAwOSAwLjg3NzAxNEMzLjg0MjQxIDAuODc3MDE0IDAuODc3MjU4IDMuODQyMTYgMC44NzcyNTggNy40OTk4NEMwLjg3NzI1OCAxMS4xNTc1IDMuODQyNCAxNC4xMjI3IDcuNTAwMDkgMTQuMTIyN0MxMS4xNTc4IDE0LjEyMjcgMTQuMTIyOSAxMS4xNTc1IDE0LjEyMjkgNy40OTk4NEMxNC4xMjI5IDMuODQyMTYgMTEuMTU3NyAwLjg3NzAxNCA3LjUwMDA5IDAuODc3MDE0Wk0xLjgyNzI2IDcuNDk5ODRDMS44MjcyNiA0LjM2NjgzIDQuMzY3MDggMS44MjcwMSA3LjUwMDA5IDEuODI3MDFDMTAuNjMzMSAxLjgyNzAxIDEzLjE3MjkgNC4zNjY4MyAxMy4xNzI5IDcuNDk5ODRDMTMuMTcyOSAxMC42MzI4IDEwLjYzMzEgMTMuMTcyNyA3LjUwMDA5IDEzLjE3MjdDNC4zNjcwOCAxMy4xNzI3IDEuODI3MjYgMTAuNjMyOCAxLjgyNzI2IDcuNDk5ODRaTTggNC41MDAwMUM4IDQuMjIzODcgNy43NzYxNCA0LjAwMDAxIDcuNSA0LjAwMDAxQzcuMjIzODYgNC4wMDAwMSA3IDQuMjIzODcgNyA0LjUwMDAxVjcuNTAwMDFDNyA3LjYzMjYyIDcuMDUyNjggNy43NTk4IDcuMTQ2NDUgNy44NTM1N0w5LjE0NjQ1IDkuODUzNTdDOS4zNDE3MSAxMC4wNDg4IDkuNjU4MjkgMTAuMDQ4OCA5Ljg1MzU1IDkuODUzNTdDMTAuMDQ4OCA5LjY1ODMxIDEwLjA0ODggOS4zNDE3MiA5Ljg1MzU1IDkuMTQ2NDZMOCA3LjI5MjkxVjQuNTAwMDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxnZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOS45NjQyNCAyLjY4NTcxQzEwLjA2NjggMi40MjkzMSA5Ljk0MjA5IDIuMTM4MzMgOS42ODU3IDIuMDM1NzdDOS40MjkzIDEuOTMzMjIgOS4xMzgzMiAyLjA1NzkyIDkuMDM1NzYgMi4zMTQzMkw1LjAzNTc2IDEyLjMxNDNDNC45MzMyIDEyLjU3MDcgNS4wNTc5MSAxMi44NjE3IDUuMzE0MyAxMi45NjQyQzUuNTcwNyAxMy4wNjY4IDUuODYxNjggMTIuOTQyMSA1Ljk2NDI0IDEyLjY4NTdMOS45NjQyNCAyLjY4NTcxWk0zLjg1MzU1IDUuMTQ2NDZDNC4wNDg4MiA1LjM0MTcyIDQuMDQ4ODIgNS42NTgzIDMuODUzNTUgNS44NTM1NkwyLjIwNzExIDcuNTAwMDFMMy44NTM1NSA5LjE0NjQ2QzQuMDQ4ODIgOS4zNDE3MiA0LjA0ODgyIDkuNjU4MyAzLjg1MzU1IDkuODUzNTZDMy42NTgyOSAxMC4wNDg4IDMuMzQxNzEgMTAuMDQ4OCAzLjE0NjQ1IDkuODUzNTZMMS4xNDY0NSA3Ljg1MzU2QzAuOTUxMTg0IDcuNjU4MyAwLjk1MTE4NCA3LjM0MTcyIDEuMTQ2NDUgNy4xNDY0NkwzLjE0NjQ1IDUuMTQ2NDZDMy4zNDE3MSA0Ljk1MTIgMy42NTgyOSA0Ljk1MTIgMy44NTM1NSA1LjE0NjQ2Wk0xMS4xNDY0IDUuMTQ2NDZDMTEuMzQxNyA0Ljk1MTIgMTEuNjU4MyA0Ljk1MTIgMTEuODUzNiA1LjE0NjQ2TDEzLjg1MzYgNy4xNDY0NkMxNC4wNDg4IDcuMzQxNzIgMTQuMDQ4OCA3LjY1ODMgMTMuODUzNiA3Ljg1MzU2TDExLjg1MzYgOS44NTM1NkMxMS42NTgzIDEwLjA0ODggMTEuMzQxNyAxMC4wNDg4IDExLjE0NjQgOS44NTM1NkMxMC45NTEyIDkuNjU4MyAxMC45NTEyIDkuMzQxNzIgMTEuMTQ2NCA5LjE0NjQ2TDEyLjc5MjkgNy41MDAwMUwxMS4xNDY0IDUuODUzNTZDMTAuOTUxMiA1LjY1ODMgMTAuOTUxMiA1LjM0MTcyIDExLjE0NjQgNS4xNDY0NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHZlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjcxMTQ0IDAuNzk2OTAyQzcuNTc3NDEgMC43MzQzNTcgNy40MjI1NyAwLjczNDM1NyA3LjI4ODU1IDAuNzk2OTAyTDEuMjg4NTUgMy41OTY5QzEuMTEyNTEgMy42NzkwNSAwLjk5OTk5MyAzLjg1NTczIDAuOTk5OTkzIDQuMDQ5OTlWMTAuOTVDMC45OTk5OTMgMTEuMTQ0MyAxLjExMjUxIDExLjMyMDkgMS4yODg1NSAxMS40MDMxTDcuMjg4NTUgMTQuMjAzMUM3LjQyMjU3IDE0LjI2NTYgNy41Nzc0MSAxNC4yNjU2IDcuNzExNDQgMTQuMjAzMUwxMy43MTE0IDExLjQwMzFDMTMuODg3NSAxMS4zMjA5IDE0IDExLjE0NDMgMTQgMTAuOTVWNC4wNDk5OUMxNCAzLjg1NTczIDEzLjg4NzUgMy42NzkwNSAxMy43MTE0IDMuNTk2OUw3LjcxMTQ0IDAuNzk2OTAyWk03LjQ5OTk5IDMuMTU2NzRMNS45ODAzOSAyLjUxMDkxTDcuNDk5OTkgMS44MDE3Nkw5LjAxOTU5IDIuNTEwOTFMNy40OTk5OSAzLjE1Njc0Wk03LjY5NTU2IDQuMTYwMThMMTAuMjM4MiAzLjA3OTU4TDEyLjI3MTkgNC4wMjg2NUw3LjQ5OTk5IDYuMDU2NzFMMi43MjgwOCA0LjAyODY1TDQuNzYxODEgMy4wNzk1OEw3LjMwNDQyIDQuMTYwMThDNy40MjkzOSA0LjIxMzMgNy41NzA1OSA0LjIxMzMgNy42OTU1NiA0LjE2MDE4Wk03Ljk5OTk5IDYuOTMwNzhMMTMgNC44MDU3OFY3LjkyOTY2TDExLjA4MjEgOC44MTE5QzEwLjcyNzMgOC45NzUwOSAxMC41IDkuMzI5ODggMTAuNSA5LjcyMDM5VjExLjc5ODJMNy45OTk5OSAxMi45NjQ5VjYuOTMwNzhaTTExLjUgMTEuMzMxNkwxMyAxMC42MzE2VjkuMDMwMzlMMTEuNSA5LjcyMDM5VjExLjMzMTZaTTYuOTk5OTkgNi45MzA3OFYxMi45NjQ5TDQuNTAyMzEgMTEuNzk5M1Y5LjcyMDM2QzQuNTAyMzEgOS4zMjk4NSA0LjI3NDk5IDguOTc1MDYgMy45MjAyMiA4LjgxMTg3TDEuOTk5OTkgNy45Mjg1NlY0LjgwNTc4TDYuOTk5OTkgNi45MzA3OFpNMS45OTk5OSAxMC42MzE2TDMuNTAyMzEgMTEuMzMyNkwzLjUwMjMxIDkuNzIwMzZMMS45OTk5OSA5LjAyOTI5VjEwLjYzMTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxDZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC4wMDAxMiAxLjVDOC4wMDAxMiAxLjIyMzg2IDcuNzc2MjYgMSA3LjUwMDEyIDFDNy4yMjM5OCAxIDcuMDAwMTIgMS4yMjM4NiA3LjAwMDEyIDEuNVYxMy41QzcuMDAwMTIgMTMuNzc2MSA3LjIyMzk4IDE0IDcuNTAwMTIgMTRDNy43NzYyNiAxNCA4LjAwMDEyIDEzLjc3NjEgOC4wMDAxMiAxMy41VjEuNVpNMy4zMTgxMiA1LjgxOEMzLjQ5Mzg2IDUuNjQyMjcgMy40OTM4NiA1LjM1NzM0IDMuMzE4MTIgNS4xODE2MUMzLjE0MjM5IDUuMDA1ODcgMi44NTc0NiA1LjAwNTg3IDIuNjgxNzMgNS4xODE2MUwwLjY4MTcyOSA3LjE4MTYxQzAuNTA1OTkzIDcuMzU3MzQgMC41MDU5OTMgNy42NDIyNyAwLjY4MTcyOSA3LjgxOEwyLjY4MTczIDkuODE4QzIuODU3NDYgOS45OTM3NCAzLjE0MjM5IDkuOTkzNzQgMy4zMTgxMiA5LjgxOEMzLjQ5Mzg2IDkuNjQyMjcgMy40OTM4NiA5LjM1NzM0IDMuMzE4MTIgOS4xODE2MUwyLjA4NjMyIDcuOTQ5OEg1LjUwMDE3QzUuNzQ4NyA3Ljk0OTggNS45NTAxNyA3Ljc0ODMzIDUuOTUwMTcgNy40OTk4QzUuOTUwMTcgNy4yNTEyOCA1Ljc0ODcgNy4wNDk4IDUuNTAwMTcgNy4wNDk4SDIuMDg2MzJMMy4zMTgxMiA1LjgxOFpNMTIuMzE4MSA1LjE4MTYxQzEyLjE0MjQgNS4wMDU4NyAxMS44NTc1IDUuMDA1ODcgMTEuNjgxNyA1LjE4MTYxQzExLjUwNiA1LjM1NzM0IDExLjUwNiA1LjY0MjI3IDExLjY4MTcgNS44MThMMTIuOTEzNSA3LjA0OThIOS41MDAxN0M5LjI1MTY0IDcuMDQ5OCA5LjA1MDE3IDcuMjUxMjggOS4wNTAxNyA3LjQ5OThDOS4wNTAxNyA3Ljc0ODMzIDkuMjUxNjQgNy45NDk4IDkuNTAwMTcgNy45NDk4SDEyLjkxMzVMMTEuNjgxNyA5LjE4MTYxQzExLjUwNiA5LjM1NzM0IDExLjUwNiA5LjY0MjI3IDExLjY4MTcgOS44MThDMTEuODU3NSA5Ljk5Mzc0IDEyLjE0MjQgOS45OTM3NCAxMi4zMTgxIDkuODE4TDE0LjMxODEgNy44MThDMTQuNDkzOSA3LjY0MjI3IDE0LjQ5MzkgNy4zNTczNCAxNC4zMTgxIDcuMTgxNjFMMTIuMzE4MSA1LjE4MTYxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuMTQ5OTggMTRWMUgwLjg0OTk3NlYxNEgyLjE0OTk4Wk02LjE0OTk4IDE0VjFINC44NDk5OFYxNEg2LjE0OTk4Wk0xMC4xNSAxVjE0SDguODQ5OThWMUgxMC4xNVpNMTQuMTUgMTRWMUgxMi44NVYxNEgxNC4xNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05Ljk0OTY5IDcuNDk5ODlDOS45NDk2OSA4Ljg1Mjg4IDguODUyODggOS45NDk2OSA3LjQ5OTg5IDkuOTQ5NjlDNi4xNDY5MSA5Ljk0OTY5IDUuMDUwMSA4Ljg1Mjg4IDUuMDUwMSA3LjQ5OTg5QzUuMDUwMSA2LjE0NjkxIDYuMTQ2OTEgNS4wNTAxIDcuNDk5ODkgNS4wNTAxQzguODUyODggNS4wNTAxIDkuOTQ5NjkgNi4xNDY5MSA5Ljk0OTY5IDcuNDk5ODlaTTEwLjg2MzIgOEMxMC42MjEzIDkuNjQwNTUgOS4yMDc2NCAxMC44OTk3IDcuNDk5ODkgMTAuODk5N0M1Ljc5MjE0IDEwLjg5OTcgNC4zNzg0NyA5LjY0MDU1IDQuMTM2NjIgOEgwLjVDMC4yMjM4NTggOCAwIDcuNzc2MTQgMCA3LjVDMCA3LjIyMzg2IDAuMjIzODU4IDcgMC41IDdINC4xMzY1OUM0LjM3ODM1IDUuMzU5MzUgNS43OTIwNiA0LjEwMDEgNy40OTk4OSA0LjEwMDFDOS4yMDc3MiA0LjEwMDEgMTAuNjIxNCA1LjM1OTM1IDEwLjg2MzIgN0gxNC41QzE0Ljc3NjEgNyAxNSA3LjIyMzg2IDE1IDcuNUMxNSA3Ljc3NjE0IDE0Ljc3NjEgOCAxNC41IDhIMTAuODYzMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjY3MTI5IDMuMTQ2MzRDNC40NzYwMyAzLjM0MTYxIDQuNDc2MDMgMy42NTgxOSA0LjY3MTI5IDMuODUzNDVMNy4xNDYxNiA2LjMyODMzQzcuMzQxNDIgNi41MjM1OSA3LjY1ODAxIDYuNTIzNTkgNy44NTMyNyA2LjMyODMzTDEwLjMyODEgMy44NTM0NUMxMC41MjM0IDMuNjU4MTkgMTAuNTIzNCAzLjM0MTYxIDEwLjMyODEgMy4xNDYzNEw3Ljg1MzI3IDAuNjcxNDcxQzcuNjU4MDEgMC40NzYyMDkgNy4zNDE0MiAwLjQ3NjIwOSA3LjE0NjE2IDAuNjcxNDcxTDQuNjcxMjkgMy4xNDYzNFpNNy40OTk3MSA1LjI2NzY2TDUuNzMxOTUgMy40OTk5TDcuNDk5NzEgMS43MzIxM0w5LjI2NzQ4IDMuNDk5OUw3LjQ5OTcxIDUuMjY3NjZaTTguNjcxMjkgNy4xNDYzNEM4LjQ3NjAzIDcuMzQxNjEgOC40NzYwMyA3LjY1ODE5IDguNjcxMjkgNy44NTM0NUwxMS4xNDYyIDEwLjMyODNDMTEuMzQxNCAxMC41MjM2IDExLjY1OCAxMC41MjM2IDExLjg1MzMgMTAuMzI4M0wxNC4zMjgxIDcuODUzNDVDMTQuNTIzNCA3LjY1ODE5IDE0LjUyMzQgNy4zNDE2MSAxNC4zMjgxIDcuMTQ2MzRMMTEuODUzMyA0LjY3MTQ3QzExLjY1OCA0LjQ3NjIxIDExLjM0MTQgNC40NzYyMSAxMS4xNDYyIDQuNjcxNDdMOC42NzEyOSA3LjE0NjM0Wk0xMS40OTk3IDkuMjY3NjZMOS43MzE5NSA3LjQ5OTlMMTEuNDk5NyA1LjczMjEzTDEzLjI2NzUgNy40OTk5TDExLjQ5OTcgOS4yNjc2NlpNNC42NzEyOSAxMS44NTM1QzQuNDc2MDMgMTEuNjU4MiA0LjQ3NjAzIDExLjM0MTYgNC42NzEyOSAxMS4xNDYzTDcuMTQ2MTYgOC42NzE0N0M3LjM0MTQyIDguNDc2MjEgNy42NTgwMSA4LjQ3NjIxIDcuODUzMjcgOC42NzE0N0wxMC4zMjgxIDExLjE0NjNDMTAuNTIzNCAxMS4zNDE2IDEwLjUyMzQgMTEuNjU4MiAxMC4zMjgxIDExLjg1MzVMNy44NTMyNyAxNC4zMjgzQzcuNjU4MDEgMTQuNTIzNiA3LjM0MTQyIDE0LjUyMzYgNy4xNDYxNiAxNC4zMjgzTDQuNjcxMjkgMTEuODUzNVpNNS43MzE5NSAxMS40OTk5TDcuNDk5NzEgMTMuMjY3N0w5LjI2NzQ4IDExLjQ5OTlMNy40OTk3MSA5LjczMjEzTDUuNzMxOTUgMTEuNDk5OVpNMC42NzEyODggNy4xNDY0OUMwLjQ3NjAyNiA3LjM0MTc1IDAuNDc2MDI2IDcuNjU4MzQgMC42NzEyODggNy44NTM2TDMuMTQ2MTYgMTAuMzI4NUMzLjM0MTQyIDEwLjUyMzcgMy42NTgwMSAxMC41MjM3IDMuODUzMjcgMTAuMzI4NUw2LjMyODE0IDcuODUzNkM2LjUyMzQgNy42NTgzNCA2LjUyMzQgNy4zNDE3NSA2LjMyODE0IDcuMTQ2NDlMMy44NTMyNyA0LjY3MTYyQzMuNjU4MDEgNC40NzYzNiAzLjM0MTQyIDQuNDc2MzYgMy4xNDYxNiA0LjY3MTYyTDAuNjcxMjg4IDcuMTQ2NDlaTTMuNDk5NzIgOS4yNjc4MUwxLjczMTk1IDcuNTAwMDVMMy40OTk3MiA1LjczMjI4TDUuMjY3NDggNy41MDAwNUwzLjQ5OTcyIDkuMjY3ODFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5ZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy44NzkzNSAxSDMuOUgxMS4xSDExLjEyMDdDMTEuNTIzMSAwLjk5OTk5NCAxMS44NTUzIDAuOTk5OTg5IDEyLjEyNTkgMS4wMjIxQzEyLjQwNyAxLjA0NTA2IDEyLjY2NTMgMS4wOTQzNCAxMi45MDggMS4yMTc5OUMxMy4yODQzIDEuNDA5NzMgMTMuNTkwMyAxLjcxNTcgMTMuNzgyIDIuMDkyMDJDMTMuOTA1NyAyLjMzNDY5IDEzLjk1NDkgMi41OTMwNCAxMy45Nzc5IDIuODc0MDlDMTQgMy4xNDQ2OCAxNCAzLjQ3Njg2IDE0IDMuODc5MzRWMy45VjExLjFWMTEuMTIwN0MxNCAxMS41MjMxIDE0IDExLjg1NTMgMTMuOTc3OSAxMi4xMjU5QzEzLjk1NDkgMTIuNDA3IDEzLjkwNTcgMTIuNjY1MyAxMy43ODIgMTIuOTA4QzEzLjU5MDMgMTMuMjg0MyAxMy4yODQzIDEzLjU5MDMgMTIuOTA4IDEzLjc4MkMxMi42NjUzIDEzLjkwNTcgMTIuNDA3IDEzLjk1NDkgMTIuMTI1OSAxMy45Nzc5QzExLjg1NTMgMTQgMTEuNTIzMSAxNCAxMS4xMjA3IDE0SDExLjFIMy45SDMuODc5MzRDMy40NzY4NiAxNCAzLjE0NDY4IDE0IDIuODc0MDkgMTMuOTc3OUMyLjU5MzA0IDEzLjk1NDkgMi4zMzQ2OSAxMy45MDU3IDIuMDkyMDIgMTMuNzgyQzEuNzE1NyAxMy41OTAzIDEuNDA5NzMgMTMuMjg0MyAxLjIxNzk5IDEyLjkwOEMxLjA5NDM0IDEyLjY2NTMgMS4wNDUwNiAxMi40MDcgMS4wMjIxIDEyLjEyNTlDMC45OTk5ODkgMTEuODU1MyAwLjk5OTk5NCAxMS41MjMxIDEgMTEuMTIwN1YxMS4xMjA3VjExLjFWMy45VjMuODc5MzVWMy44NzkzNEMwLjk5OTk5NCAzLjQ3Njg2IDAuOTk5OTg5IDMuMTQ0NjggMS4wMjIxIDIuODc0MDlDMS4wNDUwNiAyLjU5MzA0IDEuMDk0MzQgMi4zMzQ2OSAxLjIxNzk5IDIuMDkyMDJDMS40MDk3MyAxLjcxNTcgMS43MTU3IDEuNDA5NzMgMi4wOTIwMiAxLjIxNzk5QzIuMzM0NjkgMS4wOTQzNCAyLjU5MzA0IDEuMDQ1MDYgMi44NzQwOSAxLjAyMjFDMy4xNDQ2OSAwLjk5OTk4OSAzLjQ3Njg3IDAuOTk5OTk0IDMuODc5MzUgMVpNMi45NTU1MiAyLjAxODc4QzIuNzM2MzEgMi4wMzY2OSAyLjYyNDIxIDIuMDY5MTUgMi41NDYwMSAyLjEwODk5QzIuMzU3ODUgMi4yMDQ4NyAyLjIwNDg3IDIuMzU3ODUgMi4xMDg5OSAyLjU0NjAxQzIuMDY5MTUgMi42MjQyMSAyLjAzNjY5IDIuNzM2MzEgMi4wMTg3OCAyLjk1NTUyQzIuMDAwMzkgMy4xODA1NiAyIDMuNDcxNzEgMiAzLjlWN0g3VjJIMy45QzMuNDcxNzEgMiAzLjE4MDU2IDIuMDAwMzkgMi45NTU1MiAyLjAxODc4Wk03IDhIMlYxMS4xQzIgMTEuNTI4MyAyLjAwMDM5IDExLjgxOTQgMi4wMTg3OCAxMi4wNDQ1QzIuMDM2NjkgMTIuMjYzNyAyLjA2OTE1IDEyLjM3NTggMi4xMDg5OSAxMi40NTRDMi4yMDQ4NyAxMi42NDIyIDIuMzU3ODUgMTIuNzk1MSAyLjU0NjAxIDEyLjg5MUMyLjYyNDIxIDEyLjkzMDkgMi43MzYzMSAxMi45NjMzIDIuOTU1NTIgMTIuOTgxMkMzLjE4MDU2IDEyLjk5OTYgMy40NzE3MSAxMyAzLjkgMTNIN1Y4Wk04IDhIMTNWMTEuMUMxMyAxMS41MjgzIDEyLjk5OTYgMTEuODE5NCAxMi45ODEyIDEyLjA0NDVDMTIuOTYzMyAxMi4yNjM3IDEyLjkzMDkgMTIuMzc1OCAxMi44OTEgMTIuNDU0QzEyLjc5NTEgMTIuNjQyMiAxMi42NDIyIDEyLjc5NTEgMTIuNDU0IDEyLjg5MUMxMi4zNzU4IDEyLjkzMDkgMTIuMjYzNyAxMi45NjMzIDEyLjA0NDUgMTIuOTgxMkMxMS44MTk0IDEyLjk5OTYgMTEuNTI4MyAxMyAxMS4xIDEzSDhWOFpNMTMgN0g4VjJIMTEuMUMxMS41MjgzIDIgMTEuODE5NCAyLjAwMDM5IDEyLjA0NDUgMi4wMTg3OEMxMi4yNjM3IDIuMDM2NjkgMTIuMzc1OCAyLjA2OTE1IDEyLjQ1NCAyLjEwODk5QzEyLjY0MjIgMi4yMDQ4NyAxMi43OTUxIDIuMzU3ODUgMTIuODkxIDIuNTQ2MDFDMTIuOTMwOSAyLjYyNDIxIDEyLjk2MzMgMi43MzYzMSAxMi45ODEyIDIuOTU1NTJDMTIuOTk5NiAzLjE4MDU2IDEzIDMuNDcxNzEgMTMgMy45VjdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4ZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy44NTM2NyAxLjQ4OTU2QzcuNjU4NDEgMS4yOTQyOSA3LjM0MTgyIDEuMjk0MjkgNy4xNDY1NiAxLjQ4OTU2TDEuNDg5NzEgNy4xNDY0MUMxLjI5NDQ1IDcuMzQxNjcgMS4yOTQ0NSA3LjY1ODI1IDEuNDg5NzEgNy44NTM1Mkw3LjE0NjU2IDEzLjUxMDRDNy4zNDE4MiAxMy43MDU2IDcuNjU4NDEgMTMuNzA1NiA3Ljg1MzY3IDEzLjUxMDRMMTMuNTEwNSA3Ljg1MzUyQzEzLjcwNTggNy42NTgyNSAxMy43MDU4IDcuMzQxNjcgMTMuNTEwNSA3LjE0NjQxTDcuODUzNjcgMS40ODk1NlpNNy41IDIuNTUwMzNMMi41NTAzNyA3LjQ5OTk2TDcuNSAxMi40NDk2VjIuNTUwMzNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxrZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4xNDY1IDEuNDg5NTlDNy4zNDE3NiAxLjI5NDMyIDcuNjU4MzUgMS4yOTQzMiA3Ljg1MzYxIDEuNDg5NTlMMTMuNTEwNSA3LjE0NjQ0QzEzLjcwNTcgNy4zNDE3IDEzLjcwNTcgNy42NTgyOSAxMy41MTA1IDcuODUzNTVMNy44NTM2MSAxMy41MTA0QzcuNjU4MzUgMTMuNzA1NyA3LjM0MTc2IDEzLjcwNTcgNy4xNDY1IDEzLjUxMDRMMS40ODk2NSA3Ljg1MzU1QzEuMjk0MzkgNy42NTgyOSAxLjI5NDM5IDcuMzQxNyAxLjQ4OTY1IDcuMTQ2NDRMNy4xNDY1IDEuNDg5NTlaTTcuNTAwMDUgMi41NTAyNUwyLjU1MDMxIDcuNDk5OTlMNy41MDAwNSAxMi40NDk3TDEyLjQ0OTggNy40OTk5OUw3LjUwMDA1IDIuNTUwMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxTZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy44NTM2MSAxLjQ4OTU5QzcuNjU4MzUgMS4yOTQzMiA3LjM0MTc2IDEuMjk0MzIgNy4xNDY1IDEuNDg5NTlMMS40ODk2NSA3LjE0NjQ0QzEuMjk0MzkgNy4zNDE3IDEuMjk0MzkgNy42NTgyOSAxLjQ4OTY1IDcuODUzNTVMMy45NjQ1IDEwLjMyODRMMS42NDY0NCAxMi42NDY0QzEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEzLjE1ODMgMS42NDY0NCAxMy4zNTM2QzEuODQxNzEgMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMi4zNTM1NSAxMy4zNTM2TDQuNjcxNiAxMS4wMzU1TDcuMTQ2NSAxMy41MTA0QzcuMzQxNzYgMTMuNzA1NyA3LjY1ODM1IDEzLjcwNTcgNy44NTM2MSAxMy41MTA0TDEzLjUxMDUgNy44NTM1NUMxMy43MDU3IDcuNjU4MjkgMTMuNzA1NyA3LjM0MTcgMTMuNTEwNSA3LjE0NjQ0TDExLjAzNTYgNC42NzE1NEwxMy4zNTM1IDIuMzUzNTVDMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMS44NDE3MSAxMy4zNTM1IDEuNjQ2NDVDMTMuMTU4MyAxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMi42NDY0IDEuNjQ2NDVMMTAuMzI4NSAzLjk2NDQzTDcuODUzNjEgMS40ODk1OVpNOS42MjEzNSA0LjY3MTU0TDcuNTAwMDUgMi41NTAyNUwyLjU1MDMxIDcuNDk5OTlMNC42NzE2IDkuNjIxMjlMOS42MjEzNSA0LjY3MTU0Wk01LjM3ODcxIDEwLjMyODRMNy41MDAwNSAxMi40NDk3TDEyLjQ0OTggNy40OTk5OUwxMC4zMjg1IDUuMzc4NjVMNS4zNzg3MSAxMC4zMjg0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sT2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEyLjgwMzQgNy4xNDY0NEMxMi45OTg2IDYuOTUxMTggMTMuMzE1MiA2Ljk1MTE4IDEzLjUxMDUgNy4xNDY0NEMxMy43MDU3IDcuMzQxNyAxMy43MDU3IDcuNjU4MjkgMTMuNTEwNSA3Ljg1MzU1QzEzLjMxNTIgOC4wNDg4MSAxMi45OTg2IDguMDQ4ODEgMTIuODAzNCA3Ljg1MzU1QzEyLjYwODEgNy42NTgyOCAxMi42MDgxIDcuMzQxNyAxMi44MDM0IDcuMTQ2NDRaTTEyLjA5NjIgOC41NjA2NUMxMi4yOTE1IDguNzU1OTIgMTIuMjkxNSA5LjA3MjUgMTIuMDk2MiA5LjI2Nzc2QzExLjkwMSA5LjQ2MzAyIDExLjU4NDQgOS40NjMwMiAxMS4zODkxIDkuMjY3NzZDMTEuMTkzOSA5LjA3MjUgMTEuMTkzOSA4Ljc1NTkyIDExLjM4OTEgOC41NjA2NUMxMS41ODQ0IDguMzY1MzkgMTEuOTAxIDguMzY1MzkgMTIuMDk2MiA4LjU2MDY1Wk0xMC42ODIgOS45NzQ4N0MxMC44NzczIDEwLjE3MDEgMTAuODc3MyAxMC40ODY3IDEwLjY4MiAxMC42ODJDMTAuNDg2OCAxMC44NzcyIDEwLjE3MDIgMTAuODc3MiA5Ljk3NDkzIDEwLjY4MkM5Ljc3OTY3IDEwLjQ4NjcgOS43Nzk2NyAxMC4xNzAxIDkuOTc0OTMgOS45NzQ4N0MxMC4xNzAyIDkuNzc5NiAxMC40ODY4IDkuNzc5NiAxMC42ODIgOS45NzQ4N1pNOS4yNjc4MiAxMS4zODkxQzkuNDYzMDggMTEuNTg0MyA5LjQ2MzA4IDExLjkwMDkgOS4yNjc4MiAxMi4wOTYyQzkuMDcyNTYgMTIuMjkxNSA4Ljc1NTk4IDEyLjI5MTUgOC41NjA3MSAxMi4wOTYyQzguMzY1NDUgMTEuOTAwOSA4LjM2NTQ1IDExLjU4NDMgOC41NjA3MiAxMS4zODkxQzguNzU1OTggMTEuMTkzOCA5LjA3MjU2IDExLjE5MzggOS4yNjc4MiAxMS4zODkxWk03LjE0NjUgMTMuNTEwNEM2Ljk1MTI0IDEzLjMxNTEgNi45NTEyNCAxMi45OTg2IDcuMTQ2NSAxMi44MDMzQzcuMTcwOTEgMTIuNzc4OSA3LjE5NzIxIDEyLjc1NzUgNy4yMjQ5NCAxMi43MzkyQzcuNDE5MDEgMTIuNjExMSA3LjY4Mjc1IDEyLjYzMjQgNy44NTM2MSAxMi44MDMzQzguMDQ4ODcgMTIuOTk4NiA4LjA0ODg3IDEzLjMxNTEgNy44NTM2MSAxMy41MTA0QzcuNjU4MzUgMTMuNzA1NyA3LjM0MTc2IDEzLjcwNTcgNy4xNDY1IDEzLjUxMDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjkwMzg2IDguNTYwNjVDMi43MDg2IDguNzU1OTIgMi43MDg2IDkuMDcyNSAyLjkwMzg2IDkuMjY3NzYgMy4wOTkxMiA5LjQ2MzAyIDMuNDE1NzEgOS40NjMwMiAzLjYxMDk3IDkuMjY3NzYgMy44MDYyMyA5LjA3MjUgMy44MDYyMyA4Ljc1NTkyIDMuNjEwOTcgOC41NjA2NSAzLjQxNTcxIDguMzY1MzkgMy4wOTkxMiA4LjM2NTM5IDIuOTAzODYgOC41NjA2NXpNNC4zMTgwNyA5Ljk3NDg3QzQuMTIyODEgMTAuMTcwMSA0LjEyMjgxIDEwLjQ4NjcgNC4zMTgwNyAxMC42ODIgNC41MTMzNCAxMC44NzcyIDQuODI5OTIgMTAuODc3MiA1LjAyNTE4IDEwLjY4MiA1LjIyMDQ0IDEwLjQ4NjcgNS4yMjA0NCAxMC4xNzAxIDUuMDI1MTggOS45NzQ4NyA0LjgyOTkyIDkuNzc5NiA0LjUxMzM0IDkuNzc5NiA0LjMxODA3IDkuOTc0ODd6TTUuNzMyMjkgMTEuMzg5MUM1LjUzNzAzIDExLjU4NDMgNS41MzcwMyAxMS45MDA5IDUuNzMyMjkgMTIuMDk2MiA1LjkyNzU1IDEyLjI5MTQgNi4yNDQxMyAxMi4yOTE1IDYuNDM5MzkgMTIuMDk2MiA2LjYzNDY2IDExLjkwMDkgNi42MzQ2NiAxMS41ODQzIDYuNDM5MzkgMTEuMzg5MSA2LjI0NDEzIDExLjE5MzggNS45Mjc1NSAxMS4xOTM4IDUuNzMyMjkgMTEuMzg5MXpNMi4xOTY3NSA3Ljg1MzU1QzIuMzY3NjEgNy42ODI2OSAyLjM4ODk3IDcuNDE4OTUgMi4yNjA4MiA3LjIyNDg4IDIuMDkwNDYgNi45NjY4NCAxLjcxMDYzIDYuOTI1NDYgMS40ODk2NSA3LjE0NjQ0IDEuMjk0MzkgNy4zNDE3IDEuMjk0MzkgNy42NTgyOSAxLjQ4OTY1IDcuODUzNTUgMS42ODQ5MSA4LjA0ODgxIDIuMDAxNDkgOC4wNDg4MSAyLjE5Njc1IDcuODUzNTV6TTMuNjEwOTcgNS43MzIyM0MzLjQxNTcxIDUuNTM2OTYgMy4wOTkxMiA1LjUzNjk2IDIuOTAzODYgNS43MzIyMyAyLjcwODYgNS45Mjc0OSAyLjcwODYgNi4yNDQwNyAyLjkwMzg2IDYuNDM5MzMgMy4wOTkxMiA2LjYzNDYgMy40MTU3MSA2LjYzNDYgMy42MTA5NyA2LjQzOTMzIDMuODA2MjMgNi4yNDQwNyAzLjgwNjIzIDUuOTI3NDkgMy42MTA5NyA1LjczMjIzek01LjAyNTE4IDQuMzE4MDFDNC44Mjk5MiA0LjEyMjc1IDQuNTEzMzQgNC4xMjI3NSA0LjMxODA3IDQuMzE4MDEgNC4xMjI4MSA0LjUxMzI4IDQuMTIyODEgNC44Mjk4NiA0LjMxODA3IDUuMDI1MTIgNC41MTMzNCA1LjIyMDM4IDQuODI5OTIgNS4yMjAzOCA1LjAyNTE4IDUuMDI1MTIgNS4yMjA0NCA0LjgyOTg2IDUuMjIwNDQgNC41MTMyOCA1LjAyNTE4IDQuMzE4MDF6TTYuNDM5MzkgMi45MDM4QzYuMjQ0MTMgMi43MDg1NCA1LjkyNzU1IDIuNzA4NTQgNS43MzIyOSAyLjkwMzggNS41MzcwMyAzLjA5OTA2IDUuNTM3MDMgMy40MTU2NCA1LjczMjI5IDMuNjEwOTEgNS45Mjc1NSAzLjgwNjE3IDYuMjQ0MTMgMy44MDYxNyA2LjQzOTM5IDMuNjEwOTEgNi42MzQ2NiAzLjQxNTY0IDYuNjM0NjYgMy4wOTkwNiA2LjQzOTM5IDIuOTAzOHpNNy44NTM2MSAxLjQ4OTU5QzcuNjU4MzUgMS4yOTQzMiA3LjM0MTc2IDEuMjk0MzIgNy4xNDY1IDEuNDg5NTkgNi45NTEyNCAxLjY4NDg1IDYuOTUxMjQgMi4wMDE0MyA3LjE0NjUgMi4xOTY2OSA3LjM0MTc2IDIuMzkxOTYgNy42NTgzNSAyLjM5MTk2IDcuODUzNjEgMi4xOTY2OSA4LjA0ODg3IDIuMDAxNDMgOC4wNDg4NyAxLjY4NDg1IDcuODUzNjEgMS40ODk1OXpNOS4yNjc4MiAyLjkwMzhDOS4wNzI1NiAyLjcwODU0IDguNzU1OTggMi43MDg1NCA4LjU2MDcxIDIuOTAzOCA4LjM2NTQ1IDMuMDk5MDYgOC4zNjU0NSAzLjQxNTY0IDguNTYwNzEgMy42MTA5MSA4Ljc1NTk4IDMuODA2MTcgOS4wNzI1NiAzLjgwNjE3IDkuMjY3ODIgMy42MTA5MSA5LjQ2MzA4IDMuNDE1NjQgOS40NjMwOCAzLjA5OTA2IDkuMjY3ODIgMi45MDM4ek0xMC42ODIgNC4zMTgwMUMxMC40ODY4IDQuMTIyNzUgMTAuMTcwMiA0LjEyMjc1IDkuOTc0OTMgNC4zMTgwMSA5Ljc3OTY3IDQuNTEzMjggOS43Nzk2NyA0LjgyOTg2IDkuOTc0OTMgNS4wMjUxMiAxMC4xNzAyIDUuMjIwMzggMTAuNDg2OCA1LjIyMDM4IDEwLjY4MiA1LjAyNTEyIDEwLjg3NzMgNC44Mjk4NiAxMC44NzczIDQuNTEzMjggMTAuNjgyIDQuMzE4MDF6TTEyLjA5NjIgNS43MzIyM0MxMS45MDEgNS41MzY5NiAxMS41ODQ0IDUuNTM2OTYgMTEuMzg5MSA1LjczMjIzIDExLjE5MzkgNS45Mjc0OSAxMS4xOTM5IDYuMjQ0MDcgMTEuMzg5MSA2LjQzOTMzIDExLjU4NDQgNi42MzQ2IDExLjkwMSA2LjYzNDYgMTIuMDk2MiA2LjQzOTMzIDEyLjI5MTUgNi4yNDQwNyAxMi4yOTE1IDUuOTI3NDkgMTIuMDk2MiA1LjczMjIzelwiLGZpbGw6bn0pKX0sTWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgMS41QzIgMS43NzYxNCAxLjc3NjE0IDIgMS41IDJDMS4yMjM4NiAyIDEgMS43NzYxNCAxIDEuNUMxIDEuMjIzODYgMS4yMjM4NiAxIDEuNSAxQzEuNzc2MTQgMSAyIDEuMjIzODYgMiAxLjVaTTUgMTNIMTBWMkw1IDJMNSAxM1pNNCAxM0M0IDEzLjU1MjMgNC40NDc3MiAxNCA1IDE0SDEwQzEwLjU1MjMgMTQgMTEgMTMuNTUyMyAxMSAxM1YyQzExIDEuNDQ3NzIgMTAuNTUyMyAxIDEwIDFINUM0LjQ0NzcyIDEgNCAxLjQ0NzcxIDQgMlYxM1pNMTMuNSAyQzEzLjc3NjEgMiAxNCAxLjc3NjE0IDE0IDEuNUMxNCAxLjIyMzg2IDEzLjc3NjEgMSAxMy41IDFDMTMuMjIzOSAxIDEzIDEuMjIzODYgMTMgMS41QzEzIDEuNzc2MTQgMTMuMjIzOSAyIDEzLjUgMlpNMiAzLjVDMiAzLjc3NjE0IDEuNzc2MTQgNCAxLjUgNEMxLjIyMzg2IDQgMSAzLjc3NjE0IDEgMy41QzEgMy4yMjM4NiAxLjIyMzg2IDMgMS41IDNDMS43NzYxNCAzIDIgMy4yMjM4NiAyIDMuNVpNMTMuNSA0QzEzLjc3NjEgNCAxNCAzLjc3NjE0IDE0IDMuNUMxNCAzLjIyMzg2IDEzLjc3NjEgMyAxMy41IDNDMTMuMjIzOSAzIDEzIDMuMjIzODYgMTMgMy41QzEzIDMuNzc2MTQgMTMuMjIzOSA0IDEzLjUgNFpNMiA1LjVDMiA1Ljc3NjE0IDEuNzc2MTQgNiAxLjUgNkMxLjIyMzg2IDYgMSA1Ljc3NjE0IDEgNS41QzEgNS4yMjM4NiAxLjIyMzg2IDUgMS41IDVDMS43NzYxNCA1IDIgNS4yMjM4NiAyIDUuNVpNMTMuNSA2QzEzLjc3NjEgNiAxNCA1Ljc3NjE0IDE0IDUuNUMxNCA1LjIyMzg2IDEzLjc3NjEgNSAxMy41IDVDMTMuMjIzOSA1IDEzIDUuMjIzODYgMTMgNS41QzEzIDUuNzc2MTQgMTMuMjIzOSA2IDEzLjUgNlpNMiA3LjVDMiA3Ljc3NjE0IDEuNzc2MTQgOCAxLjUgOEMxLjIyMzg2IDggMSA3Ljc3NjE0IDEgNy41QzEgNy4yMjM4NiAxLjIyMzg2IDcgMS41IDdDMS43NzYxNCA3IDIgNy4yMjM4NiAyIDcuNVpNMTMuNSA4QzEzLjc3NjEgOCAxNCA3Ljc3NjE0IDE0IDcuNUMxNCA3LjIyMzg2IDEzLjc3NjEgNyAxMy41IDdDMTMuMjIzOSA3IDEzIDcuMjIzODYgMTMgNy41QzEzIDcuNzc2MTQgMTMuMjIzOSA4IDEzLjUgOFpNMiA5LjVDMiA5Ljc3NjE0IDEuNzc2MTQgMTAgMS41IDEwQzEuMjIzODYgMTAgMSA5Ljc3NjE0IDEgOS41QzEgOS4yMjM4NiAxLjIyMzg2IDkgMS41IDlDMS43NzYxNCA5IDIgOS4yMjM4NiAyIDkuNVpNMTMuNSAxMEMxMy43NzYxIDEwIDE0IDkuNzc2MTQgMTQgOS41QzE0IDkuMjIzODYgMTMuNzc2MSA5IDEzLjUgOUMxMy4yMjM5IDkgMTMgOS4yMjM4NiAxMyA5LjVDMTMgOS43NzYxNCAxMy4yMjM5IDEwIDEzLjUgMTBaTTIgMTEuNUMyIDExLjc3NjEgMS43NzYxNCAxMiAxLjUgMTJDMS4yMjM4NiAxMiAxIDExLjc3NjEgMSAxMS41QzEgMTEuMjIzOSAxLjIyMzg2IDExIDEuNSAxMUMxLjc3NjE0IDExIDIgMTEuMjIzOSAyIDExLjVaTTEzLjUgMTJDMTMuNzc2MSAxMiAxNCAxMS43NzYxIDE0IDExLjVDMTQgMTEuMjIzOSAxMy43NzYxIDExIDEzLjUgMTFDMTMuMjIzOSAxMSAxMyAxMS4yMjM5IDEzIDExLjVDMTMgMTEuNzc2MSAxMy4yMjM5IDEyIDEzLjUgMTJaTTIgMTMuNUMyIDEzLjc3NjEgMS43NzYxNCAxNCAxLjUgMTRDMS4yMjM4NiAxNCAxIDEzLjc3NjEgMSAxMy41QzEgMTMuMjIzOSAxLjIyMzg2IDEzIDEuNSAxM0MxLjc3NjE0IDEzIDIgMTMuMjIzOSAyIDEzLjVaTTEzLjUgMTRDMTMuNzc2MSAxNCAxNCAxMy43NzYxIDE0IDEzLjVDMTQgMTMuMjIzOSAxMy43NzYxIDEzIDEzLjUgMTNDMTMuMjIzOSAxMyAxMyAxMy4yMjM5IDEzIDEzLjVDMTMgMTMuNzc2MSAxMy4yMjM5IDE0IDEzLjUgMTRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxMZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuMDY5NyAxLjc2NzQ2QzEyLjQ4MDcgMS4yMTk0NyAxMS40NjA1IDAuNDU0MzExIDExLjA0OTUgMS4wMDIzQzEwLjYzODUgMS41NTAyOCAxMS42NTg4IDIuMzE1NDQgMTIuMDY5NyAxLjc2NzQ2Wk04LjM5MjYzIDEuMDc4MTFDNy4xNTU4NSAwLjk1MDYwMiA1Ljc4MjMgMS4xNjM0OCA0LjU4NDMzIDEuNzA5MzdDMy4zODU1MiAyLjI1NTYzIDIuMzI3MzUgMy4xNTMwOSAxLjc4ODQ0IDQuNDE4MzJDMS4zNzU3NCA1LjM4NzI0IDEuMDE3MTUgNi4yODExMyAxLjAwMDg4IDcuNDQzNTRDMC45ODQ3MjQgOC41OTg0NCAxLjMwNTIyIDkuOTY4OTggMi4xMzE3NCAxMS45MjhDMi42MTE0MiAxMy4wNjQ5IDQuMDM5NjMgMTMuNTQ0NiA1LjEzODk1IDEzLjgwNzlDNi40MDgzNiAxNC4xMTE5IDcuODA4NTcgMTQuMTkxNCA4LjY2NDQgMTQuMDc0MkM5LjM2NTE1IDEzLjk3ODIgMTAuMTQ0OCAxMy44Mjg0IDEwLjc5ODcgMTMuMjk3QzExLjg5NzcgMTIuNDAzOSAxMi45MDA5IDExLjM5NTUgMTMuNDk5NCAxMC4zMzkzQzE0LjEwNCA5LjI3MjIxIDE0LjMyNTYgOC4wOTIwNyAxMy43MjE2IDYuOTUzMjRDMTMuNTYyOCA2LjY1MzczIDEzLjMxNiA2LjU3NzM0IDEzLjA0MTIgNi40OTIzQzEyLjkzNzQgNi40NjAxNiAxMi44Mjk1IDYuNDI2NzggMTIuNzIwOSA2LjM3OTY2QzExLjYyMTEgNS45MDIzNCAxMC45NjQ2IDUuMzQ5NjMgMTAuOTEzNSA1LjAyODc2QzEwLjg2NTYgNC43MjgwOCAxMC45MjIxIDQuNTE0NjMgMTAuOTgxMSA0LjI5MTgxQzExLjAxMjkgNC4xNzE5OSAxMS4wNDUzIDQuMDQ5NDcgMTEuMDYyNiAzLjkwOTIyQzExLjA4MzggMy43MzczNyAxMS4wODE0IDMuMzMzMTkgMTAuNjk5NiAzLjEyNzYxQzEwLjQwNDggMi45Njg4OCAxMC4yMTY0IDIuNjU4NDMgMTAuMDQwNyAyLjM2OTA0QzkuOTk3NDIgMi4yOTc3NSA5Ljk1NDkyIDIuMjI3NzMgOS45MTE4IDIuMTYxNThDOS42MjYzNCAxLjcyMzY3IDkuMjA3NjkgMS4xNjIxMyA4LjM5MjYzIDEuMDc4MTFaTTQuOTk4OTkgMi42MTkzNUMzLjk2NDgzIDMuMDkwNTggMy4xMjU1NCAzLjgzMDk3IDIuNzA4NDYgNC44MTAxOEMyLjI5ODA4IDUuNzczNjggMi4wMTQwNiA2LjUwODczIDIuMDAwNzkgNy40NTc1M0MxLjk4NzQxIDguNDEzODUgMi4yNTA0MyA5LjYzNjggMy4wNTMxIDExLjUzOTNDMy4zOTE4MSAxMi4zNDIxIDQuNjIxNjcgMTIuNjU1NyA1LjM3MTg2IDEyLjgzNTRDNi41NDkzIDEzLjExNzQgNy44MjIgMTMuMTgwMiA4LjUyODY4IDEzLjA4MzRDOS4yMTI3MSAxMi45ODk3IDkuNzQ1NjggMTIuODY0MiAxMC4xNjgxIDEyLjUyMDlDMTEuMjI5IDExLjY1ODcgMTIuMTIxIDEwLjc0MzUgMTIuNjI5MyA5Ljg0NjM1QzEyLjkzNDkgOS4zMDcwOSAxMy41MTQxIDcuNzAyOCAxMi42MjkyIDcuMzg3M0MxMC43NTM5IDYuNzE4NzUgMTAuMjYyIDYuMDY2NjkgOS45OTAxMSA1LjQxMjY4QzkuODA5MTUgNC45Nzc0NCA5LjgyODY4IDQuNTIyODIgOS45NTc0MSA0LjA3ODg1TDkuOTU3NDEgNC4wNzg4NEM5Ljk3NjYyIDQuMDEyNiA5Ljk5NTM4IDMuOTQ3OTEgMTAuMDMzNCAzLjg4ODgyQzkuODE4NTcgMy43MzY3NiA5LjY1MTUgMy41NTE5NSA5LjUxNDY0IDMuMzcxNUM5LjQyODc2IDMuMjU4MjggOS4zNDY5IDMuMTIwOTkgOS4yNjE5NyAyLjk3ODU2QzkuMDE4NjYgMi41NzA1MiA4Ljc1MDE4IDIuMTIwMjcgOC4yOTAwOCAyLjA3MjgzQzcuMjI4ODkgMS45NjM0MyA2LjAzMzk4IDIuMTQ3NzIgNC45OTg5OSAyLjYxOTM1Wk0xMy4yMDgxIDMuNzc0NzFDMTMuNDQxIDMuMjI2NzEgMTIuNDU0NyAyLjYzNjA2IDEyLjA4MjIgMy4xMDE2M0MxMS41ODE3IDMuNzI3MzIgMTIuOTAyOSA0LjQ5MjgxIDEzLjIwODEgMy43NzQ3MVpNMTQuMzY3MiAyLjI2MDMxQzE0Ljk2NjggMi4yNzQ5MyAxNS4xNTUxIDEuMTE2MDMgMTQuNTcxOCAwLjk0OTM3MUMxMy44MDc2IDAuNzMxMDI2IDEzLjU5MTggMi4yNDEzOSAxNC4zNjcyIDIuMjYwMzFaTTE0LjI4NTcgNS4wOTA5OEMxNC44NjQ0IDUuMTAwMDQgMTUuMDQ2MiA0LjM4MjIyIDE0LjQ4MzIgNC4yNzg5OUMxMy43NDU1IDQuMTQzNzUgMTMuNTM3MyA1LjA3OTI3IDE0LjI4NTcgNS4wOTA5OFpNNi45MDc1IDQuMjg2NzJDNi40Njg5OCA0LjY2NzU0IDYuMDUyMiA0LjE1MTg1IDUuOTc5ODMgMy43MzY1QzUuODY4NDggMy4wOTc0NCA2LjMzNjk2IDIuNTY4NTYgNi45NDgyMyAyLjkxMTU2QzcuNDMzNDQgMy4xODM4MiA3LjI2Njc4IDMuOTc0NzEgNi45MDc1IDQuMjg2NzJaTTQuOTQ0NTUgNS44ODE4NEM1LjQwODg1IDUuNDE3NTQgNC41OTU2NyA0LjU3MDEzIDQuMTE0MjUgNS4wNTE1NEMzLjgzMzM4IDUuMzMyNDIgNC4wMDkzNiA1LjY1Mzc2IDQuMjM3NDQgNS44ODE4NEM0LjQzMjcxIDYuMDc3MSA0Ljc0OTI5IDYuMDc3MSA0Ljk0NDU1IDUuODgxODRaTTYuOTc3MTYgNi43MTk4NEM3LjMxMTgxIDcuMzg5MTQgOC40ODgwNCA2Ljc5MTU5IDcuOTk0MTMgNi4xNDc4OEM3Ljg2NTE5IDUuOTc5ODMgNy42ODY1NyA1Ljk0OTQgNy42MjE0NSA1Ljk0MjA3QzcuMjEyMTcgNS44OTYwMSA2Ljc2MzQ5IDYuMjkyNSA2Ljk3NzE2IDYuNzE5ODRaTTYuOTg3OTggOC43MjQ2MUM3LjE0MDY2IDkuMTE4OCA3LjUxMTIyIDkuMzE4NyA3LjkxOTE1IDkuMTYzM0M4LjI3NDM0IDkuMDI3OTkgOC4zMzE4NiA4LjM5Njg5IDguMTcxNzUgOC4wNzQyN0M4LjAyMzMxIDcuNzc1MTQgNy42Mzk1NiA3LjY3NzkzIDcuMzM3NDcgNy43OTQxN0M2Ljk4NTEyIDcuOTI5NzYgNi44NTY3MiA4LjM4NzA4IDYuOTg1NzYgOC43MTg4OUw2Ljk4Nzk4IDguNzI0NjFaTTEwLjM4ODUgOC44NDA4MUMxMC43NTc1IDguNjU2NiAxMS40NjE3IDguODI3NzEgMTEuNDYxNyA5LjMxMTk5QzExLjQ2MTcgOS43MTI4NiAxMC45NTg3IDEwLjIxNjUgMTAuNTYzNCAxMC4yODI2QzEwLjE4MTMgMTAuMzQ2NSA5LjcwNTE1IDkuOTc1ODEgOS43NjY0OCA5LjU3NzE4QzkuODE0NDUgOS4yNjUzOSAxMC4xMjE3IDguOTc0MDEgMTAuMzg4NSA4Ljg0MDgxWk03LjU2NzA0IDEwLjg0MzJDNy4zMzQ2MSAxMC43NTAyIDcuMTQzNTMgMTAuODYwMSA3LjExNDM3IDEwLjg3NjlMNy4xMTI3OSAxMC44Nzc4QzYuOTA3ODIgMTAuOTk0OSA2LjcxMzgzIDExLjI0MzkgNi42NzQ3IDExLjQ4NDJDNi41OTAxOCAxMi4wMDM0IDcuMTMxOTkgMTIuMTIzOSA3LjUyNjYxIDEyLjA5ODdDOC4yMDc0IDEyLjA1NTMgOC4wNjU0NyAxMS4wNDI2IDcuNTY3MDQgMTAuODQzMlpNNC44ODA1IDEwLjg5MzJDNS4wNjc0IDEwLjc3MjMgNS4xNTY1OCAxMC41MzYzIDUuMDgyOTMgMTAuMzE1M0M0LjkzMDQ2IDkuNzk2ODcgNC4zMjQ2IDkuNzEyNTIgMy45NjU2MSAxMC4xMjk3QzMuNzkzMzYgMTAuMzI5OSAzLjgwNzQ5IDEwLjYyNzQgMy45OTIxNCAxMC44MTA1TDMuOTk0OTUgMTAuODE0TDMuOTk3OSAxMC44MTc2QzQuMjIwMjUgMTEuMDk0MiA0LjYzNjI0IDExLjE4NTcgNC44ODA1IDEwLjg5MzJaTTMuMDQ2OTUgNy44MTMxOEMzLjMzMTQ3IDguMDk3NyAzLjYwMDc3IDguMTUwNjcgMy45ODQ0MyA4LjA1ODU5QzQuNjA4MjYgNy45MDg4NyA0LjEzODE0IDYuMjQyOTkgMy4wNDcgNi44NzI5NkMyLjcwOTM5IDcuMDY3ODggMi44NjcxNiA3LjYzMzM5IDMuMDQ2OTUgNy44MTMxOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF9lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDkuNTAwMDZDMSAxMC4zMjg1IDEuNjcxNTcgMTEuMDAwMSAyLjUgMTEuMDAwMUg0TDQgMTAuMDAwMUgyLjVDMi4yMjM4NiAxMC4wMDAxIDIgOS43NzYyIDIgOS41MDAwNkwyIDIuNTAwMDZDMiAyLjIyMzkyIDIuMjIzODYgMi4wMDAwNiAyLjUgMi4wMDAwNkw5LjUgMi4wMDAwNkM5Ljc3NjE0IDIuMDAwMDYgMTAgMi4yMjM5MiAxMCAyLjUwMDA2VjQuMDAwMDJINS41QzQuNjcxNTggNC4wMDAwMiA0IDQuNjcxNTkgNCA1LjUwMDAyVjEyLjVDNCAxMy4zMjg0IDQuNjcxNTggMTQgNS41IDE0SDEyLjVDMTMuMzI4NCAxNCAxNCAxMy4zMjg0IDE0IDEyLjVWNS41MDAwMkMxNCA0LjY3MTU5IDEzLjMyODQgNC4wMDAwMiAxMi41IDQuMDAwMDJIMTFWMi41MDAwNkMxMSAxLjY3MTYzIDEwLjMyODQgMS4wMDAwNiA5LjUgMS4wMDAwNkgyLjVDMS42NzE1NyAxLjAwMDA2IDEgMS42NzE2MyAxIDIuNTAwMDZWOS41MDAwNlpNNSA1LjUwMDAyQzUgNS4yMjM4OCA1LjIyMzg2IDUuMDAwMDIgNS41IDUuMDAwMDJIMTIuNUMxMi43NzYxIDUuMDAwMDIgMTMgNS4yMjM4OCAxMyA1LjUwMDAyVjEyLjVDMTMgMTIuNzc2MiAxMi43NzYxIDEzIDEyLjUgMTNINS41QzUuMjIzODYgMTMgNSAxMi43NzYyIDUgMTIuNVY1LjUwMDAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuODc3MzcgMTJIOS45SDExLjVDMTEuNzc2MSAxMiAxMiAxMS43NzYxIDEyIDExLjVDMTIgMTEuMjIzOSAxMS43NzYxIDExIDExLjUgMTFIOS45QzguNzcxNjQgMTEgNy45NTU0NSAxMC45OTk2IDcuMzEzNTIgMTAuOTQ3MkM2LjY3NzQ0IDEwLjg5NTIgNi4yNTY2MiAxMC43OTQ2IDUuOTExMDMgMTAuNjE4NUM1LjI1MjQ3IDEwLjI4MyA0LjcxNzAzIDkuNzQ3NTMgNC4zODE0OCA5LjA4ODk3QzQuMjA1MzkgOC43NDMzOCA0LjEwNDgxIDguMzIyNTYgNC4wNTI4NCA3LjY4NjQ4QzQuMDAwMzkgNy4wNDQ1NSA0IDYuMjI4MzYgNCA1LjFWMy41QzQgMy4yMjM4NiAzLjc3NjE0IDMgMy41IDNDMy4yMjM4NiAzIDMgMy4yMjM4NiAzIDMuNVY1LjFWNS4xMjI2M0MzIDYuMjIzNTkgMyA3LjA4MDUyIDMuMDU2MTYgNy43Njc5MUMzLjExMzE4IDguNDY1ODQgMy4yMzA1OCA5LjAzMjkgMy40OTA0NyA5LjU0Mjk2QzMuOTIxOSAxMC4zODk3IDQuNjEwMzEgMTEuMDc4MSA1LjQ1NzA0IDExLjUwOTVDNS45NjcxIDExLjc2OTQgNi41MzQxNiAxMS44ODY4IDcuMjMyMDkgMTEuOTQzOEM3LjkxOTQ4IDEyIDguNzc2NDEgMTIgOS44NzczNyAxMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEVlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjEyMjYzIDEySDUuMUgzLjVDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41QzMgMTEuMjIzOSAzLjIyMzg2IDExIDMuNSAxMUg1LjFDNi4yMjgzNiAxMSA3LjA0NDU1IDEwLjk5OTYgNy42ODY0OCAxMC45NDcyQzguMzIyNTYgMTAuODk1MiA4Ljc0MzM4IDEwLjc5NDYgOS4wODg5NyAxMC42MTg1QzkuNzQ3NTMgMTAuMjgzIDEwLjI4MyA5Ljc0NzUzIDEwLjYxODUgOS4wODg5N0MxMC43OTQ2IDguNzQzMzggMTAuODk1MiA4LjMyMjU2IDEwLjk0NzIgNy42ODY0OEMxMC45OTk2IDcuMDQ0NTUgMTEgNi4yMjgzNiAxMSA1LjFWMy41QzExIDMuMjIzODYgMTEuMjIzOSAzIDExLjUgM0MxMS43NzYxIDMgMTIgMy4yMjM4NiAxMiAzLjVWNS4xVjUuMTIyNjNDMTIgNi4yMjM1OSAxMiA3LjA4MDUyIDExLjk0MzggNy43Njc5MUMxMS44ODY4IDguNDY1ODQgMTEuNzY5NCA5LjAzMjkgMTEuNTA5NSA5LjU0Mjk2QzExLjA3ODEgMTAuMzg5NyAxMC4zODk3IDExLjA3ODEgOS41NDI5NiAxMS41MDk1QzkuMDMyOSAxMS43Njk0IDguNDY1ODQgMTEuODg2OCA3Ljc2NzkxIDExLjk0MzhDNy4wODA1MiAxMiA2LjIyMzU5IDEyIDUuMTIyNjMgMTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxqZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOS44NzczNyAzSDkuOUgxMS41QzExLjc3NjEgMyAxMiAzLjIyMzg2IDEyIDMuNUMxMiAzLjc3NjE0IDExLjc3NjEgNCAxMS41IDRIOS45QzguNzcxNjQgNCA3Ljk1NTQ1IDQuMDAwMzkgNy4zMTM1MiA0LjA1Mjg0QzYuNjc3NDQgNC4xMDQ4MSA2LjI1NjYyIDQuMjA1MzkgNS45MTEwMyA0LjM4MTQ4QzUuMjUyNDcgNC43MTcwMyA0LjcxNzAzIDUuMjUyNDcgNC4zODE0OCA1LjkxMTAzQzQuMjA1MzkgNi4yNTY2MiA0LjEwNDgxIDYuNjc3NDQgNC4wNTI4NCA3LjMxMzUyQzQuMDAwMzkgNy45NTU0NSA0IDguNzcxNjQgNCA5LjlWMTEuNUM0IDExLjc3NjEgMy43NzYxNCAxMiAzLjUgMTJDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41VjkuOVY5Ljg3NzM3QzMgOC43NzY0MSAzIDcuOTE5NDggMy4wNTYxNiA3LjIzMjA5QzMuMTEzMTggNi41MzQxNiAzLjIzMDU4IDUuOTY3MSAzLjQ5MDQ3IDUuNDU3MDRDMy45MjE5IDQuNjEwMzEgNC42MTAzMSAzLjkyMTkgNS40NTcwNCAzLjQ5MDQ3QzUuOTY3MSAzLjIzMDU4IDYuNTM0MTYgMy4xMTMxOCA3LjIzMjA5IDMuMDU2MTZDNy45MTk0OCAzIDguNzc2NDEgMyA5Ljg3NzM3IDNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxSZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS4xMjI2MyAzSDUuMUgzLjVDMy4yMjM4NiAzIDMgMy4yMjM4NiAzIDMuNUMzIDMuNzc2MTQgMy4yMjM4NiA0IDMuNSA0SDUuMUM2LjIyODM2IDQgNy4wNDQ1NSA0LjAwMDM5IDcuNjg2NDggNC4wNTI4NEM4LjMyMjU2IDQuMTA0ODEgOC43NDMzOCA0LjIwNTM5IDkuMDg4OTcgNC4zODE0OEM5Ljc0NzUzIDQuNzE3MDMgMTAuMjgzIDUuMjUyNDcgMTAuNjE4NSA1LjkxMTAzQzEwLjc5NDYgNi4yNTY2MiAxMC44OTUyIDYuNjc3NDQgMTAuOTQ3MiA3LjMxMzUyQzEwLjk5OTYgNy45NTU0NSAxMSA4Ljc3MTY0IDExIDkuOVYxMS41QzExIDExLjc3NjEgMTEuMjIzOSAxMiAxMS41IDEyQzExLjc3NjEgMTIgMTIgMTEuNzc2MSAxMiAxMS41VjkuOVY5Ljg3NzM3QzEyIDguNzc2NDEgMTIgNy45MTk0OCAxMS45NDM4IDcuMjMyMDlDMTEuODg2OCA2LjUzNDE2IDExLjc2OTQgNS45NjcxIDExLjUwOTUgNS40NTcwNEMxMS4wNzgxIDQuNjEwMzEgMTAuMzg5NyAzLjkyMTkgOS41NDI5NiAzLjQ5MDQ3QzkuMDMyOSAzLjIzMDU4IDguNDY1ODQgMy4xMTMxOCA3Ljc2NzkxIDMuMDU2MTZDNy4wODA1MiAzIDYuMjIzNTkgMyA1LjEyMjYzIDNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxJZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuMSAzQzEwLjUyODMgMyAxMC44MTk0IDMuMDAwMzkgMTEuMDQ0NSAzLjAxODc4QzExLjI2MzcgMy4wMzY2OSAxMS4zNzU4IDMuMDY5MTUgMTEuNDU0IDMuMTA4OTlDMTEuNjQyMiAzLjIwNDg3IDExLjc5NTEgMy4zNTc4NSAxMS44OTEgMy41NDYwMUMxMS45MzA5IDMuNjI0MjEgMTEuOTYzMyAzLjczNjMxIDExLjk4MTIgMy45NTU1MkMxMS45OTk2IDQuMTgwNTYgMTIgNC40NzE3MSAxMiA0LjlWNS41QzEyIDUuNzc2MTQgMTIuMjIzOSA2IDEyLjUgNkMxMi43NzYxIDYgMTMgNS43NzYxNCAxMyA1LjVWNC44NzkzNUMxMyA0LjQ3Njg3IDEzIDQuMTQ0NjkgMTIuOTc3OSAzLjg3NDA5QzEyLjk1NDkgMy41OTMwNCAxMi45MDU3IDMuMzM0NjkgMTIuNzgyIDMuMDkyMDJDMTIuNTkwMyAyLjcxNTcgMTIuMjg0MyAyLjQwOTczIDExLjkwOCAyLjIxNzk5QzExLjY2NTMgMi4wOTQzNCAxMS40MDcgMi4wNDUwNiAxMS4xMjU5IDIuMDIyMUMxMC44NTUzIDEuOTk5OTkgMTAuNTIzMSAxLjk5OTk5IDEwLjEyMDcgMkgxMC4xMjA2SDEwLjFIOS41QzkuMjIzODYgMiA5IDIuMjIzODYgOSAyLjVDOSAyLjc3NjE0IDkuMjIzODYgMyA5LjUgM0gxMC4xWk01LjUgMkg0Ljg3OTM1SDQuODc5MzRDNC40NzY4NiAxLjk5OTk5IDQuMTQ0NjggMS45OTk5OSAzLjg3NDA5IDIuMDIyMUMzLjU5MzA0IDIuMDQ1MDYgMy4zMzQ2OSAyLjA5NDM0IDMuMDkyMDIgMi4yMTc5OUMyLjcxNTcgMi40MDk3MyAyLjQwOTczIDIuNzE1NyAyLjIxNzk5IDMuMDkyMDJDMi4wOTQzNCAzLjMzNDY5IDIuMDQ1MDYgMy41OTMwNCAyLjAyMjEgMy44NzQwOUMxLjk5OTk5IDQuMTQ0NjggMS45OTk5OSA0LjQ3Njg2IDIgNC44NzkzNFY0Ljg3OTM1VjUuNUMyIDUuNzc2MTQgMi4yMjM4NiA2IDIuNSA2QzIuNzc2MTQgNiAzIDUuNzc2MTQgMyA1LjVWNC45QzMgNC40NzE3MSAzLjAwMDM5IDQuMTgwNTYgMy4wMTg3OCAzLjk1NTUyQzMuMDM2NjkgMy43MzYzMSAzLjA2OTE1IDMuNjI0MjEgMy4xMDg5OSAzLjU0NjAxQzMuMjA0ODcgMy4zNTc4NSAzLjM1Nzg1IDMuMjA0ODcgMy41NDYwMSAzLjEwODk5QzMuNjI0MjEgMy4wNjkxNSAzLjczNjMxIDMuMDM2NjkgMy45NTU1MiAzLjAxODc4QzQuMTgwNTYgMy4wMDAzOSA0LjQ3MTcxIDMgNC45IDNINS41QzUuNzc2MTQgMyA2IDIuNzc2MTQgNiAyLjVDNiAyLjIyMzg2IDUuNzc2MTQgMiA1LjUgMlpNMTMgOS41QzEzIDkuMjIzODYgMTIuNzc2MSA5IDEyLjUgOUMxMi4yMjM5IDkgMTIgOS4yMjM4NiAxMiA5LjVWMTAuMUMxMiAxMC41MjgzIDExLjk5OTYgMTAuODE5NCAxMS45ODEyIDExLjA0NDVDMTEuOTYzMyAxMS4yNjM3IDExLjkzMDkgMTEuMzc1OCAxMS44OTEgMTEuNDU0QzExLjc5NTEgMTEuNjQyMiAxMS42NDIyIDExLjc5NTEgMTEuNDU0IDExLjg5MUMxMS4zNzU4IDExLjkzMDkgMTEuMjYzNyAxMS45NjMzIDExLjA0NDUgMTEuOTgxMkMxMC44MTk0IDExLjk5OTYgMTAuNTI4MyAxMiAxMC4xIDEySDkuNUM5LjIyMzg2IDEyIDkgMTIuMjIzOSA5IDEyLjVDOSAxMi43NzYxIDkuMjIzODYgMTMgOS41IDEzSDEwLjEyMDZDMTAuNTIzMSAxMyAxMC44NTUzIDEzIDExLjEyNTkgMTIuOTc3OUMxMS40MDcgMTIuOTU0OSAxMS42NjUzIDEyLjkwNTcgMTEuOTA4IDEyLjc4MkMxMi4yODQzIDEyLjU5MDMgMTIuNTkwMyAxMi4yODQzIDEyLjc4MiAxMS45MDhDMTIuOTA1NyAxMS42NjUzIDEyLjk1NDkgMTEuNDA3IDEyLjk3NzkgMTEuMTI1OUMxMyAxMC44NTUzIDEzIDEwLjUyMzEgMTMgMTAuMTIwNlY5LjVaTTIuNSA5QzIuNzc2MTQgOSAzIDkuMjIzODYgMyA5LjVWMTAuMUMzIDEwLjUyODMgMy4wMDAzOSAxMC44MTk0IDMuMDE4NzggMTEuMDQ0NUMzLjAzNjY5IDExLjI2MzcgMy4wNjkxNSAxMS4zNzU4IDMuMTA4OTkgMTEuNDU0QzMuMjA0ODcgMTEuNjQyMiAzLjM1Nzg1IDExLjc5NTEgMy41NDYwMSAxMS44OTFDMy42MjQyMSAxMS45MzA5IDMuNzM2MzEgMTEuOTYzMyAzLjk1NTUyIDExLjk4MTJDNC4xODA1NiAxMS45OTk2IDQuNDcxNzEgMTIgNC45IDEySDUuNUM1Ljc3NjE0IDEyIDYgMTIuMjIzOSA2IDEyLjVDNiAxMi43NzYxIDUuNzc2MTQgMTMgNS41IDEzSDQuODc5MzVDNC40NzY4NyAxMyA0LjE0NDY5IDEzIDMuODc0MDkgMTIuOTc3OUMzLjU5MzA0IDEyLjk1NDkgMy4zMzQ2OSAxMi45MDU3IDMuMDkyMDIgMTIuNzgyQzIuNzE1NyAxMi41OTAzIDIuNDA5NzMgMTIuMjg0MyAyLjIxNzk5IDExLjkwOEMyLjA5NDM0IDExLjY2NTMgMi4wNDUwNiAxMS40MDcgMi4wMjIxIDExLjEyNTlDMS45OTk5OSAxMC44NTUzIDEuOTk5OTkgMTAuNTIzMSAyIDEwLjEyMDdWMTAuMTIwNlYxMC4xVjkuNUMyIDkuMjIzODYgMi4yMjM4NiA5IDIuNSA5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjE1IDcuNDk5OThDMTMuMTUgNC42NjQ1OCAxMC45NDAyIDEuODQ5OTggNy41MDAwMiAxLjg0OTk4QzQuNzIxNyAxLjg0OTk4IDMuMzQ4NTEgMy45MDYzNiAyLjc2MzM2IDQuOTk5OTdINC41QzQuNzc2MTQgNC45OTk5NyA1IDUuMjIzODMgNSA1LjQ5OTk3QzUgNS43NzYxMSA0Ljc3NjE0IDUuOTk5OTcgNC41IDUuOTk5OTdIMS41QzEuMjIzODYgNS45OTk5NyAxIDUuNzc2MTEgMSA1LjQ5OTk3VjIuNDk5OTdDMSAyLjIyMzgzIDEuMjIzODYgMS45OTk5NyAxLjUgMS45OTk5N0MxLjc3NjE0IDEuOTk5OTcgMiAyLjIyMzgzIDIgMi40OTk5N1Y0LjMxMzE4QzIuNzA0NTMgMy4wNzEyNiA0LjMzNDA2IDAuODQ5OTc2IDcuNTAwMDIgMC44NDk5NzZDMTEuNTYyOCAwLjg0OTk3NiAxNC4xNSA0LjE4NTM3IDE0LjE1IDcuNDk5OThDMTQuMTUgMTAuODE0NiAxMS41NjI4IDE0LjE1IDcuNTAwMDIgMTQuMTVDNS41NTYxOCAxNC4xNSAzLjkzNzc4IDEzLjM4MDggMi43ODU0OCAxMi4yMDg0QzIuMTY4NTIgMTEuNTgwNiAxLjY4NjY4IDEwLjgzOSAxLjM1ODE2IDEwLjA0MDdDMS4yNTMwNiA5Ljc4NTM2IDEuMzc0ODggOS40OTMxNSAxLjYzMDI0IDkuMzg4MDZDMS44ODU2IDkuMjgyOTYgMi4xNzc4MSA5LjQwNDc4IDIuMjgyOSA5LjY2MDE0QzIuNTYzNzQgMTAuMzQyNSAyLjk3NDk1IDEwLjk3NDUgMy40OTg3IDExLjUwNzRDNC40NzA1MiAxMi40OTYzIDUuODM0OTYgMTMuMTUgNy41MDAwMiAxMy4xNUMxMC45NDAyIDEzLjE1IDEzLjE1IDEwLjMzNTQgMTMuMTUgNy40OTk5OFpNNyAxMFY1LjAwMDAxSDhWMTBIN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEhlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy4xNSA3LjQ5OTk4QzEzLjE1IDQuNjY0NTggMTAuOTQwMiAxLjg0OTk4IDcuNTAwMDIgMS44NDk5OEM0LjcyMTY3IDEuODQ5OTggMy4zNDg0OSAzLjkwNjQgMi43NjMzNSA1SDQuNUM0Ljc3NjE0IDUgNSA1LjIyMzg2IDUgNS41QzUgNS43NzYxNCA0Ljc3NjE0IDYgNC41IDZIMS41QzEuMjIzODYgNiAxIDUuNzc2MTQgMSA1LjVWMi41QzEgMi4yMjM4NiAxLjIyMzg2IDIgMS41IDJDMS43NzYxNCAyIDIgMi4yMjM4NiAyIDIuNVY0LjMxMzE4QzIuNzA0NTMgMy4wNzEyNiA0LjMzNDA2IDAuODQ5OTc2IDcuNTAwMDIgMC44NDk5NzZDMTEuNTYyOCAwLjg0OTk3NiAxNC4xNSA0LjE4NTM3IDE0LjE1IDcuNDk5OThDMTQuMTUgMTAuODE0NiAxMS41NjI4IDE0LjE1IDcuNTAwMDIgMTQuMTVDNS41NTYxOCAxNC4xNSAzLjkzNzc4IDEzLjM4MDggMi43ODU0OCAxMi4yMDg0QzIuMTY4NTIgMTEuNTgwNiAxLjY4NjY4IDEwLjgzOSAxLjM1ODE2IDEwLjA0MDdDMS4yNTMwNiA5Ljc4NTM2IDEuMzc0ODggOS40OTMxNSAxLjYzMDI0IDkuMzg4MDZDMS44ODU2IDkuMjgyOTYgMi4xNzc4MSA5LjQwNDc4IDIuMjgyOSA5LjY2MDE0QzIuNTYzNzQgMTAuMzQyNSAyLjk3NDk1IDEwLjk3NDUgMy40OTg3IDExLjUwNzRDNC40NzA1MiAxMi40OTYzIDUuODM0OTYgMTMuMTUgNy41MDAwMiAxMy4xNUMxMC45NDAyIDEzLjE1IDEzLjE1IDEwLjMzNTQgMTMuMTUgNy40OTk5OFpNNy41IDQuMDAwMDFDNy43NzYxNCA0LjAwMDAxIDggNC4yMjM4NyA4IDQuNTAwMDFWNy4yOTI5MUw5Ljg1MzU1IDkuMTQ2NDZDMTAuMDQ4OCA5LjM0MTcyIDEwLjA0ODggOS42NTgzMSA5Ljg1MzU1IDkuODUzNTdDOS42NTgyOSAxMC4wNDg4IDkuMzQxNzEgMTAuMDQ4OCA5LjE0NjQ1IDkuODUzNTdMNy4xNDY0NSA3Ljg1MzU3QzcuMDUyNjggNy43NTk4IDcgNy42MzI2MiA3IDcuNTAwMDFWNC41MDAwMUM3IDQuMjIzODcgNy4yMjM4NiA0LjAwMDAxIDcuNSA0LjAwMDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNSA4LjAwNjg0ZS0wN0MzLjc3NjE0IDcuODg2MTRlLTA3IDQgMC4yMjM4NTkgNCAwLjUwMDAwMUw0IDMuMDAwMDZMMTEuNSAzLjAwMDA2QzExLjc3NjEgMy4wMDAwNiAxMiAzLjIyMzkyIDEyIDMuNTAwMDZMMTIgMTEuMDAwMUwxNC41IDExQzE0Ljc3NjEgMTEgMTUgMTEuMjIzOCAxNSAxMS41QzE1IDExLjc3NjEgMTQuNzc2MiAxMiAxNC41IDEyTDEyIDEyLjAwMDFMMTIgMTQuNUMxMiAxNC43NzYxIDExLjc3NjEgMTUgMTEuNSAxNUMxMS4yMjM5IDE1IDExIDE0Ljc3NjEgMTEgMTQuNUwxMSAxMi4wMDAxTDMuNSAxMi4wMDAxQzMuMjIzODYgMTIuMDAwMSAzIDExLjc3NjIgMyAxMS41MDAxTDMgNC4wMDAwNUwwLjQ5OTk4OSA0QzAuMjIzODQ3IDQgLTYuMTA1NDFlLTA2IDMuNzc2MTMgLTUuMDI1NzZlLTA3IDMuNDk5OTlDNS4xMzAwNmUtMDYgMy4yMjM4NSAwLjIyMzg2NyAzIDAuNTAwMDEgM0wzIDMuMDAwMDVMMyAwLjUwMDAwMUMzIDAuMjIzODU5IDMuMjIzODYgOC4xMjc1NWUtMDcgMy41IDguMDA2ODRlLTA3Wk00IDQuMDAwMDZMNCAxMS4wMDAxTDExIDExLjAwMDFMMTEgNC4wMDAwNkw0IDQuMDAwMDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxUZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuODUzNiAyLjg1MzU1QzEzLjA0ODggMi42NTgyOSAxMy4wNDg4IDIuMzQxNzEgMTIuODUzNiAyLjE0NjQ1QzEyLjY1ODMgMS45NTExOCAxMi4zNDE3IDEuOTUxMTggMTIuMTQ2NCAyLjE0NjQ1TDcuNSA2Ljc5Mjg5TDIuODUzNTUgMi4xNDY0NUMyLjY1ODI5IDEuOTUxMTggMi4zNDE3MSAxLjk1MTE4IDIuMTQ2NDUgMi4xNDY0NUMxLjk1MTE4IDIuMzQxNzEgMS45NTExOCAyLjY1ODI5IDIuMTQ2NDUgMi44NTM1NUw2Ljc5Mjg5IDcuNUwyLjE0NjQ1IDEyLjE0NjRDMS45NTExOCAxMi4zNDE3IDEuOTUxMTggMTIuNjU4MyAyLjE0NjQ1IDEyLjg1MzZDMi4zNDE3MSAxMy4wNDg4IDIuNjU4MjkgMTMuMDQ4OCAyLjg1MzU1IDEyLjg1MzZMNy41IDguMjA3MTFMMTIuMTQ2NCAxMi44NTM2QzEyLjM0MTcgMTMuMDQ4OCAxMi42NTgzIDEzLjA0ODggMTIuODUzNiAxMi44NTM2QzEzLjA0ODggMTIuNjU4MyAxMy4wNDg4IDEyLjM0MTcgMTIuODUzNiAxMi4xNDY0TDguMjA3MTEgNy41TDEyLjg1MzYgMi44NTM1NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LERlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS43ODE2IDQuMDMxNTdDMTIuMDA2MiAzLjgwNzAyIDEyLjAwNjIgMy40NDI5NSAxMS43ODE2IDMuMjE4NEMxMS41NTcxIDIuOTkzODUgMTEuMTkzIDIuOTkzODUgMTAuOTY4NSAzLjIxODRMNy41MDAwNSA2LjY4NjgyTDQuMDMxNjQgMy4yMTg0QzMuODA3MDggMi45OTM4NSAzLjQ0MzAxIDIuOTkzODUgMy4yMTg0NiAzLjIxODRDMi45OTM5MSAzLjQ0Mjk1IDIuOTkzOTEgMy44MDcwMiAzLjIxODQ2IDQuMDMxNTdMNi42ODY4OCA3LjQ5OTk5TDMuMjE4NDYgMTAuOTY4NEMyLjk5MzkxIDExLjE5MyAyLjk5MzkxIDExLjU1NyAzLjIxODQ2IDExLjc4MTZDMy40NDMwMSAxMi4wMDYxIDMuODA3MDggMTIuMDA2MSA0LjAzMTY0IDExLjc4MTZMNy41MDAwNSA4LjMxMzE2TDEwLjk2ODUgMTEuNzgxNkMxMS4xOTMgMTIuMDA2MSAxMS41NTcxIDEyLjAwNjEgMTEuNzgxNiAxMS43ODE2QzEyLjAwNjIgMTEuNTU3IDEyLjAwNjIgMTEuMTkzIDExLjc4MTYgMTAuOTY4NEw4LjMxMzIyIDcuNDk5OTlMMTEuNzgxNiA0LjAzMTU3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNDk5ODhDMC44NzcwNzUgMy44NDIxOSAzLjg0MjIyIDAuODc3MDQ1IDcuNDk5OTEgMC44NzcwNDVDMTEuMTU3NiAwLjg3NzA0NSAxNC4xMjI3IDMuODQyMTkgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMTEuMTU3NSAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzMuODQyMjIgMTQuMTIyNyAwLjg3NzA3NSAxMS4xNTc1IDAuODc3MDc1IDcuNDk5ODhaTTcuNDk5OTEgMS44MjcwNEM0LjM2Njg5IDEuODI3MDQgMS44MjcwOCA0LjM2Njg2IDEuODI3MDggNy40OTk4OEMxLjgyNzA4IDEwLjYzMjkgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0MxMC42MzI5IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDQuMzY2ODYgMTAuNjMyOSAxLjgyNzA0IDcuNDk5OTEgMS44MjcwNFpNOS44NTM1OCA1LjE0NjQ0QzEwLjA0ODggNS4zNDE3IDEwLjA0ODggNS42NTgyOSA5Ljg1MzU4IDUuODUzNTVMOC4yMDcxMyA3LjQ5OTk5TDkuODUzNTggOS4xNDY0NEMxMC4wNDg4IDkuMzQxNyAxMC4wNDg4IDkuNjU4MjkgOS44NTM1OCA5Ljg1MzU1QzkuNjU4MzIgMTAuMDQ4OCA5LjM0MTczIDEwLjA0ODggOS4xNDY0NyA5Ljg1MzU1TDcuNTAwMDIgOC4yMDcxTDUuODUzNTggOS44NTM1NUM1LjY1ODMyIDEwLjA0ODggNS4zNDE3MyAxMC4wNDg4IDUuMTQ2NDcgOS44NTM1NUM0Ljk1MTIxIDkuNjU4MjkgNC45NTEyMSA5LjM0MTcgNS4xNDY0NyA5LjE0NjQ0TDYuNzkyOTIgNy40OTk5OUw1LjE0NjQ3IDUuODUzNTVDNC45NTEyMSA1LjY1ODI5IDQuOTUxMjEgNS4zNDE3IDUuMTQ2NDcgNS4xNDY0NEM1LjM0MTczIDQuOTUxMTggNS42NTgzMiA0Ljk1MTE4IDUuODUzNTggNS4xNDY0NEw3LjUwMDAyIDYuNzkyODlMOS4xNDY0NyA1LjE0NjQ0QzkuMzQxNzMgNC45NTExOCA5LjY1ODMyIDQuOTUxMTggOS44NTM1OCA1LjE0NjQ0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNTAyMDdDMC44NzcwNzUgMy44NDMxOSAzLjg0MzE5IDAuODc3MDc1IDcuNTAyMDggMC44NzcwNzVDMTEuMTYwOSAwLjg3NzA3NSAxNC4xMjcxIDMuODQzMTkgMTQuMTI3MSA3LjUwMjA3QzE0LjEyNzEgMTEuMTYwOSAxMS4xNjA5IDE0LjEyNzEgNy41MDIwOCAxNC4xMjcxQzMuODQzMTkgMTQuMTI3MSAwLjg3NzA3NSAxMS4xNjA5IDAuODc3MDc1IDcuNTAyMDdaTTEuODQ4OTggNy4wMDAwM0MyLjA4ODYgNC4yNjYzOSA0LjI2NjM5IDIuMDg4NiA3LjAwMDAzIDEuODQ4OThWNC41MDAwM0M3LjAwMDAzIDQuNzc2MTcgNy4yMjM4OCA1LjAwMDAzIDcuNTAwMDMgNS4wMDAwM0M3Ljc3NjE3IDUuMDAwMDMgOC4wMDAwMyA0Ljc3NjE3IDguMDAwMDMgNC41MDAwM1YxLjg0ODYyQzEwLjczNTYgMi4wODY0MyAxMi45MTU0IDQuMjY1MDIgMTMuMTU1MiA3LjAwMDAzSDEwLjVDMTAuMjIzOSA3LjAwMDAzIDEwIDcuMjIzODggMTAgNy41MDAwM0MxMCA3Ljc3NjE3IDEwLjIyMzkgOC4wMDAwMyAxMC41IDguMDAwMDNIMTMuMTU1NUMxMi45MTc2IDEwLjczNjkgMTAuNzM2OSAxMi45MTc2IDguMDAwMDMgMTMuMTU1NVYxMC41QzguMDAwMDMgMTAuMjIzOSA3Ljc3NjE3IDEwIDcuNTAwMDMgMTBDNy4yMjM4OCAxMCA3LjAwMDAzIDEwLjIyMzkgNy4wMDAwMyAxMC41VjEzLjE1NTJDNC4yNjUwMiAxMi45MTU0IDIuMDg2NDMgMTAuNzM1NiAxLjg0ODYyIDguMDAwMDNINC41MDAwM0M0Ljc3NjE3IDguMDAwMDMgNS4wMDAwMyA3Ljc3NjE3IDUuMDAwMDMgNy41MDAwM0M1LjAwMDAzIDcuMjIzODggNC43NzYxNyA3LjAwMDAzIDQuNTAwMDMgNy4wMDAwM0gxLjg0ODk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sJGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAwQzcuNzc2MTQgMCA4IDAuMjIzODU4IDggMC41VjEuODA2ODdDMTAuNjkyMiAyLjA5MzUgMTIuODE2NyA0LjI4MDEyIDEzLjAwNjggN0gxNC41QzE0Ljc3NjEgNyAxNSA3LjIyMzg2IDE1IDcuNUMxNSA3Ljc3NjE0IDE0Ljc3NjEgOCAxNC41IDhIMTIuOTg4OEMxMi43MDk0IDEwLjYyNDQgMTAuNjI0NCAxMi43MDk0IDggMTIuOTg4OFYxNC41QzggMTQuNzc2MSA3Ljc3NjE0IDE1IDcuNSAxNUM3LjIyMzg2IDE1IDcgMTQuNzc2MSA3IDE0LjVWMTMuMDA2OEM0LjI4MDEyIDEyLjgxNjcgMi4wOTM1IDEwLjY5MjIgMS44MDY4NyA4SDAuNUMwLjIyMzg1OCA4IDAgNy43NzYxNCAwIDcuNUMwIDcuMjIzODYgMC4yMjM4NTggNyAwLjUgN0gxLjc4ODg2QzEuOTgzNzYgNC4yMTE2NiA0LjIxMTY2IDEuOTgzNzYgNyAxLjc4ODg2VjAuNUM3IDAuMjIzODU4IDcuMjIzODYgMCA3LjUgMFpNOCAxMi4wMzIyVjkuNUM4IDkuMjIzODYgNy43NzYxNCA5IDcuNSA5QzcuMjIzODYgOSA3IDkuMjIzODYgNyA5LjVWMTIuMDU0QzQuODA1MTcgMTEuODY4OSAzLjA0MjIyIDEwLjE2NjggMi43NjM0NCA4SDUuNUM1Ljc3NjE0IDggNiA3Ljc3NjE0IDYgNy41QzYgNy4yMjM4NiA1Ljc3NjE0IDcgNS41IDdIMi43NDE3QzIuOTMyNTIgNC43MzY2MiA0LjczNjYyIDIuOTMyNTIgNyAyLjc0MTdWNS41QzcgNS43NzYxNCA3LjIyMzg2IDYgNy41IDZDNy43NzYxNCA2IDggNS43NzYxNCA4IDUuNVYyLjc2MzQ0QzEwLjE2NjggMy4wNDIyMiAxMS44Njg5IDQuODA1MTcgMTIuMDU0IDdIOS41QzkuMjIzODYgNyA5IDcuMjIzODYgOSA3LjVDOSA3Ljc3NjE0IDkuMjIzODYgOCA5LjUgOEgxMi4wMzIyQzExLjc2MjEgMTAuMDk5MSAxMC4wOTkxIDExLjc2MjEgOCAxMi4wMzIyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNjA5MTMgMC4wNjM0Mjg3QzQuMzkwODIgMC4wMDg4NTA1IDQuMTY1NzUgMC4xMjM5MyA0LjA4MjE4IDAuMzMyODY3TDMuMTUzOCAyLjY1MzhMMC44MzI4NjYgMy41ODIxOEMwLjcwMjg4NCAzLjYzNDE3IDAuNjA0NTA0IDMuNzQzNyAwLjU2NjcwNSAzLjg3ODQ5QzAuNTI4OTA2IDQuMDEzMjkgMC41NTU5OTQgNC4xNTggMC42Mzk5OTIgNC4yNjk5OUwyLjAxMTQ4IDYuMDk4NjRMMS4wNjM0MyA5Ljg5MDg1QzEuMDA5NDQgMTAuMTA2OCAxLjEyMTQ1IDEwLjMyOTggMS4zMjY5MSAxMC40MTU0TDQuMjAxMTUgMTEuNjEzTDUuNjI1NTcgMTMuNzQ5NkM1LjczNDEyIDEzLjkxMjQgNS45MzU0NSAxMy45ODY0IDYuMTIzNjIgMTMuOTMyN0w5LjYyMzYyIDEyLjkzMjdDOS42Mjk4OCAxMi45MzA5IDkuNjM2MTEgMTIuOTI5IDkuNjQyMjkgMTIuOTI2OUwxMi42NDIzIDExLjkyNjlDMTIuNzkyMyAxMS44NzY5IDEyLjkwNSAxMS43NTE5IDEyLjkzOTMgMTEuNTk3NkwxMy45MzkzIDcuMDk3NjFDMTMuOTc3NiA2LjkyNTA2IDEzLjkxMTQgNi43NDYwNSAxMy43NyA2LjYzOTk5TDExLjk1IDUuMjc0OTlWMi45OTk5OUMxMS45NSAyLjgyOTU1IDExLjg1MzcgMi42NzM3MyAxMS43MDEyIDIuNTk3NUw4LjcwMTI0IDEuMDk3NUM4LjY3MTg3IDEuMDgyODIgOC42NDA5OCAxLjA3MTM5IDguNjA5MTMgMS4wNjM0M0w0LjYwOTEzIDAuMDYzNDI4N1pNMTEuNDMyMyA2LjAxMTczTDEyLjc3NDggNy4wMTg1OEwxMC4yMTE5IDkuMTU0MjlDMTAuMTQ3NiA5LjIwNzg2IDEwLjA5OTUgOS4yNzgzIDEwLjA3MzEgOS4zNTc2OUw5LjI1MzgyIDExLjgxNTVMNy43Mzg0OSAxMC44Njg0QzcuNTI3NzQgMTAuNzM2NyA3LjI1MDExIDEwLjgwMDcgNy4xMTgzOSAxMS4wMTE1QzYuOTg2NjcgMTEuMjIyMiA3LjA1MDc0IDExLjQ5OTkgNy4yNjE0OSAxMS42MzE2TDguNDAzNDEgMTIuMzQ1M0w2LjE5MjIxIDEyLjk3NzFMNC44NzQ0MSAxMS4wMDA0QzQuODI1MTMgMTAuOTI2NSA0Ljc1NTA4IDEwLjg2ODggNC42NzMwNyAxMC44MzQ2TDIuMDMwNDYgOS43MzM1MkwyLjg1MTM0IDYuNDQ5OTlINC45OTk5OUM1LjI0ODUyIDYuNDQ5OTkgNS40NDk5OSA2LjI0ODUyIDUuNDQ5OTkgNS45OTk5OUM1LjQ0OTk5IDUuNzUxNDYgNS4yNDg1MiA1LjU0OTk5IDQuOTk5OTkgNS41NDk5OUgyLjcyNDk5TDEuNzEyMyA0LjE5OTc0TDMuNTE0MDcgMy40NzkwM0w2LjM1NzY5IDQuNDI2OUM2LjUzNjU1IDQuNDg2NTIgNi43MzM2MSA0LjQyODMyIDYuODUxMzggNC4yODExMUw4LjYyNDEzIDIuMDY1MThMMTEuMDUgMy4yNzgxMVY1LjE5NTMzTDguODMyODcgNi4wODIxOEM4LjcwOTk2IDYuMTMxMzQgOC42MTQ5NCA2LjIzMjEyIDguNTczMDggNi4zNTc2OUw4LjA3MzA4IDcuODU3NjlDNy45OTQ0OSA4LjA5MzQ2IDguMTIxOTEgOC4zNDgzMSA4LjM1NzY5IDguNDI2OUM4LjU5MzQ2IDguNTA1NDkgOC44NDgzMSA4LjM3ODA3IDguOTI2OSA4LjE0MjI5TDkuMzYwOSA2Ljg0MDI5TDExLjQzMjMgNi4wMTE3M1pNNy43MTA1MiAxLjc2NjQ4TDYuMzQ0NjIgMy40NzM4Nkw0LjA5NTA1IDIuNzI0TDQuNzcxOTIgMS4wMzE4M0w3LjcxMDUyIDEuNzY2NDhaTTEwLjIxMTUgMTEuNzg4NUwxMi4xMTYgMTEuMTUzN0wxMi43NzQ1IDguMTkwMzRMMTAuODg2NCA5Ljc2Mzc0TDEwLjIxMTUgMTEuNzg4NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEZlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjI4ODU2IDAuNzk2OTA4QzcuNDIyNTggMC43MzQzNjQgNy41Nzc0MiAwLjczNDM2NCA3LjcxMTQ0IDAuNzk2OTA4TDEzLjcxMTQgMy41OTY5MUMxMy44ODc1IDMuNjc5MDYgMTQgMy44NTU3NCAxNCA0LjA1VjEwLjk1QzE0IDExLjE0NDMgMTMuODg3NSAxMS4zMjA5IDEzLjcxMTQgMTEuNDAzMUw3LjcxMTQ0IDE0LjIwMzFDNy41Nzc0MiAxNC4yNjU2IDcuNDIyNTggMTQuMjY1NiA3LjI4ODU2IDE0LjIwMzFMMS4yODg1NiAxMS40MDMxQzEuMTEyNTIgMTEuMzIwOSAxIDExLjE0NDMgMSAxMC45NVY0LjA1QzEgMy44NTU3NCAxLjExMjUyIDMuNjc5MDYgMS4yODg1NiAzLjU5NjkxTDcuMjg4NTYgMC43OTY5MDhaTTIgNC44MDU3OEw3IDYuOTMwNzhWMTIuOTY0OUwyIDEwLjYzMTZWNC44MDU3OFpNOCAxMi45NjQ5TDEzIDEwLjYzMTZWNC44MDU3OEw4IDYuOTMwNzhWMTIuOTY0OVpNNy41IDYuMDU2NzJMMTIuMjcxOSA0LjAyODY2TDcuNSAxLjgwMTc2TDIuNzI4MDkgNC4wMjg2Nkw3LjUgNi4wNTY3MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjI5MjI3IDAuMDQ4OTg0QzMuNDcwMzMgLTAuMDMyMzM4IDMuNjc5NDYgLTAuMDAyMjgyMTQgMy44Mjc0IDAuMTI1ODkxTDEyLjg1ODcgNy45NTAyNkMxMy4wMTM0IDguMDg0MzIgMTMuMDcwOCA4LjI5OTE2IDEzLjAwMzUgOC40OTI1MUMxMi45MzYyIDguNjg1ODYgMTIuNzU3OCA4LjgxODY2IDEyLjU1MzMgOC44Mjc2OEw5LjIxODg3IDguOTc0NzRMMTEuMTUwNCAxMy4yMTg3QzExLjI2NDggMTMuNDcgMTEuMTUzOCAxMy43NjY0IDEwLjkwMjYgMTMuODgwOEw4Ljc1MDI0IDE0Ljg2MTNDOC40OTkgMTQuOTc1OCA4LjIwMjU1IDE0Ljg2NDkgOC4wODgwMiAxNC42MTM3TDYuMTUzMzkgMTAuMzcwM0wzLjg2Mjc5IDEyLjc4NTVDMy43MjE5NiAxMi45MzQgMy41MDQ4NyAxMi45ODE3IDMuMzE0NzkgMTIuOTA1OUMzLjEyNDcgMTIuODMwMSAzIDEyLjY0NjEgMyAxMi40NDE0VjAuNTAzNzkyQzMgMC4zMDgwNDggMy4xMTQyMiAwLjEzMDMwNiAzLjI5MjI3IDAuMDQ4OTg0Wk00IDEuNTk4NTJWMTEuMTg3N0w1LjkzNzk5IDkuMTQ0MjVDNi4wNTIzOCA5LjAyMzYzIDYuMjE5MjQgOC45Njc3NiA2LjM4MzE5IDguOTk1MTZDNi41NDcxNSA5LjAyMjU2IDYuNjg2NzcgOS4xMjk2NSA2Ljc1NTczIDkuMjgwOUw4Ljc5MDU2IDEzLjc0NDFMMTAuMDMzMiAxMy4xNzhMOC4wMDE5NSA4LjcxNDk3QzcuOTMzMTMgOC41NjM3NiA3Ljk0MzkxIDguMzg4MjQgOC4wMzA3MiA4LjI0NjU5QzguMTE3NTMgOC4xMDQ5NCA4LjI2OTAzIDguMDE1NjYgOC40MzUgOC4wMDgzNEwxMS4yNTQ5IDcuODgzOTdMNCAxLjU5ODUyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNSAxQzQuMjIzODYgMSA0IDEuMjIzODYgNCAxLjVDNCAxLjc3NjE0IDQuMjIzODYgMiA0LjUgMkM1LjQyMjE1IDIgNi4wMzk5IDIuMjMwNTQgNi40MjA3NSAyLjU2Mzc5QzYuNzkyODYgMi44ODkzOSA3IDMuMzY2MjYgNyA0VjdINS43NUM1LjQ3Mzg2IDcgNS4yNSA3LjIyMzg2IDUuMjUgNy41QzUuMjUgNy43NzYxNCA1LjQ3Mzg2IDggNS43NSA4SDdWMTFDNyAxMS42MzM3IDYuNzkyODYgMTIuMTEwNiA2LjQyMDc1IDEyLjQzNjJDNi4wMzk5IDEyLjc2OTUgNS40MjIxNSAxMyA0LjUgMTNDNC4yMjM4NiAxMyA0IDEzLjIyMzkgNCAxMy41QzQgMTMuNzc2MSA0LjIyMzg2IDE0IDQuNSAxNEM1LjU3Nzg1IDE0IDYuNDYwMSAxMy43MzA1IDcuMDc5MjUgMTMuMTg4OEM3LjI0MTY4IDEzLjA0NjcgNy4zODE2OSAxMi44ODk2IDcuNSAxMi43MTk4QzcuNjE4MzIgMTIuODg5NiA3Ljc1ODMyIDEzLjA0NjcgNy45MjA3NSAxMy4xODg4QzguNTM5OSAxMy43MzA1IDkuNDIyMTUgMTQgMTAuNSAxNEMxMC43NzYxIDE0IDExIDEzLjc3NjEgMTEgMTMuNUMxMSAxMy4yMjM5IDEwLjc3NjEgMTMgMTAuNSAxM0M5LjU3Nzg1IDEzIDguOTYwMSAxMi43Njk1IDguNTc5MjUgMTIuNDM2MkM4LjIwNzE0IDEyLjExMDYgOCAxMS42MzM3IDggMTFWOEg5LjI1QzkuNTI2MTQgOCA5Ljc1IDcuNzc2MTQgOS43NSA3LjVDOS43NSA3LjIyMzg2IDkuNTI2MTQgNyA5LjI1IDdIOFY0QzggMy4zNjYyNiA4LjIwNzE0IDIuODg5MzkgOC41NzkyNSAyLjU2Mzc5QzguOTYwMSAyLjIzMDU0IDkuNTc3ODUgMiAxMC41IDJDMTAuNzc2MSAyIDExIDEuNzc2MTQgMTEgMS41QzExIDEuMjIzODYgMTAuNzc2MSAxIDEwLjUgMUM5LjQyMjE1IDEgOC41Mzk5IDEuMjY5NDYgNy45MjA3NSAxLjgxMTIxQzcuNzU4MzIgMS45NTMzMyA3LjYxODMyIDIuMTEwNDMgNy41IDIuMjgwMjNDNy4zODE2OCAyLjExMDQzIDcuMjQxNjggMS45NTMzMyA3LjA3OTI1IDEuODExMjFDNi40NjAxIDEuMjY5NDYgNS41Nzc4NSAxIDQuNSAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0semU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgNy41QzUgNy4yMjM4NiA1LjIyMzg2IDcgNS41IDdIOS41QzkuNzc2MTQgNyAxMCA3LjIyMzg2IDEwIDcuNUMxMCA3Ljc3NjE0IDkuNzc2MTQgOCA5LjUgOEg1LjVDNS4yMjM4NiA4IDUgNy43NzYxNCA1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjggMUwyLjc0OTY3IDAuOTk5OTdDMi41MjEyMiAwLjk5OTc1MiAyLjMyNDI5IDAuOTk5NTY0IDIuMTQ5ODMgMS4wNDE0NUMxLjYwMTM2IDEuMTczMTIgMS4xNzMxMiAxLjYwMTM2IDEuMDQxNDUgMi4xNDk4M0MwLjk5OTU2NCAyLjMyNDI5IDAuOTk5NzUyIDIuNTIxMjIgMC45OTk5NyAyLjc0OTY3TDEgMi44VjUuMkwwLjk5OTk3IDUuMjUwMzNDMC45OTk3NTIgNS40Nzg3OCAwLjk5OTU2NCA1LjY3NTcyIDEuMDQxNDUgNS44NTAxN0MxLjE3MzEyIDYuMzk4NjQgMS42MDEzNiA2LjgyNjg4IDIuMTQ5ODMgNi45NTg1NkMyLjMyNDI5IDcuMDAwNDQgMi41MjEyMiA3LjAwMDI1IDIuNzQ5NjcgNy4wMDAwM0wyLjggN0g1LjJMNS4yNTAzMyA3LjAwMDAzQzUuNDc4NzggNy4wMDAyNSA1LjY3NTcyIDcuMDAwNDQgNS44NTAxNyA2Ljk1ODU2QzYuMzk4NjQgNi44MjY4OCA2LjgyNjg4IDYuMzk4NjQgNi45NTg1NiA1Ljg1MDE3QzcuMDAwNDQgNS42NzU3MiA3LjAwMDI1IDUuNDc4NzggNy4wMDAwMyA1LjI1MDMzTDcgNS4yVjIuOEw3LjAwMDAzIDIuNzQ5NjdDNy4wMDAyNSAyLjUyMTIyIDcuMDAwNDQgMi4zMjQyOSA2Ljk1ODU2IDIuMTQ5ODNDNi44MjY4OCAxLjYwMTM2IDYuMzk4NjQgMS4xNzMxMiA1Ljg1MDE3IDEuMDQxNDVDNS42NzU3MiAwLjk5OTU2NCA1LjQ3ODc4IDAuOTk5NzUyIDUuMjUwMzMgMC45OTk5N0w1LjIgMUgyLjhaTTIuMzgzMjggMi4wMTM4MkMyLjQyNjMyIDIuMDAzNDggMi40OTIyMiAyIDIuOCAySDUuMkM1LjUwNzc5IDIgNS41NzM2OSAyLjAwMzQ4IDUuNjE2NzIgMi4wMTM4MkM1Ljc5OTU1IDIuMDU3NzEgNS45NDIyOSAyLjIwMDQ1IDUuOTg2MTkgMi4zODMyOEM1Ljk5NjUyIDIuNDI2MzIgNiAyLjQ5MjIyIDYgMi44VjUuMkM2IDUuNTA3NzkgNS45OTY1MiA1LjU3MzY5IDUuOTg2MTkgNS42MTY3MkM1Ljk0MjI5IDUuNzk5NTUgNS43OTk1NSA1Ljk0MjI5IDUuNjE2NzIgNS45ODYxOUM1LjU3MzY5IDUuOTk2NTIgNS41MDc3OSA2IDUuMiA2SDIuOEMyLjQ5MjIyIDYgMi40MjYzMiA1Ljk5NjUyIDIuMzgzMjggNS45ODYxOUMyLjIwMDQ1IDUuOTQyMjkgMi4wNTc3MSA1Ljc5OTU1IDIuMDEzODIgNS42MTY3MkMyLjAwMzQ4IDUuNTczNjkgMiA1LjUwNzc5IDIgNS4yVjIuOEMyIDIuNDkyMjIgMi4wMDM0OCAyLjQyNjMyIDIuMDEzODIgMi4zODMyOEMyLjA1NzcxIDIuMjAwNDUgMi4yMDA0NSAyLjA1NzcxIDIuMzgzMjggMi4wMTM4MlpNOS44IDFMOS43NDk2NyAwLjk5OTk3QzkuNTIxMjIgMC45OTk3NTIgOS4zMjQyOSAwLjk5OTU2NCA5LjE0OTgzIDEuMDQxNDVDOC42MDEzNiAxLjE3MzEyIDguMTczMTIgMS42MDEzNiA4LjA0MTQ1IDIuMTQ5ODNDNy45OTk1NiAyLjMyNDI5IDcuOTk5NzUgMi41MjEyMiA3Ljk5OTk3IDIuNzQ5NjdMOCAyLjhWNS4yTDcuOTk5OTcgNS4yNTAzM0M3Ljk5OTc1IDUuNDc4NzggNy45OTk1NiA1LjY3NTcyIDguMDQxNDUgNS44NTAxN0M4LjE3MzEyIDYuMzk4NjQgOC42MDEzNiA2LjgyNjg4IDkuMTQ5ODMgNi45NTg1NkM5LjMyNDI5IDcuMDAwNDQgOS41MjEyMiA3LjAwMDI1IDkuNzQ5NjcgNy4wMDAwM0w5LjggN0gxMi4yTDEyLjI1MDMgNy4wMDAwM0MxMi40Nzg4IDcuMDAwMjUgMTIuNjc1NyA3LjAwMDQ0IDEyLjg1MDIgNi45NTg1NkMxMy4zOTg2IDYuODI2ODggMTMuODI2OSA2LjM5ODY0IDEzLjk1ODYgNS44NTAxN0MxNC4wMDA0IDUuNjc1NzIgMTQuMDAwMyA1LjQ3ODc4IDE0IDUuMjUwMzNMMTQgNS4yVjIuOEwxNCAyLjc0OTY3QzE0LjAwMDMgMi41MjEyMiAxNC4wMDA0IDIuMzI0MjkgMTMuOTU4NiAyLjE0OTgzQzEzLjgyNjkgMS42MDEzNiAxMy4zOTg2IDEuMTczMTIgMTIuODUwMiAxLjA0MTQ1QzEyLjY3NTcgMC45OTk1NjQgMTIuNDc4OCAwLjk5OTc1MiAxMi4yNTAzIDAuOTk5OTdMMTIuMiAxSDkuOFpNOS4zODMyOCAyLjAxMzgyQzkuNDI2MzIgMi4wMDM0OCA5LjQ5MjIyIDIgOS44IDJIMTIuMkMxMi41MDc4IDIgMTIuNTczNyAyLjAwMzQ4IDEyLjYxNjcgMi4wMTM4MkMxMi43OTk1IDIuMDU3NzEgMTIuOTQyMyAyLjIwMDQ1IDEyLjk4NjIgMi4zODMyOEMxMi45OTY1IDIuNDI2MzIgMTMgMi40OTIyMiAxMyAyLjhWNS4yQzEzIDUuNTA3NzkgMTIuOTk2NSA1LjU3MzY5IDEyLjk4NjIgNS42MTY3MkMxMi45NDIzIDUuNzk5NTUgMTIuNzk5NSA1Ljk0MjI5IDEyLjYxNjcgNS45ODYxOUMxMi41NzM3IDUuOTk2NTIgMTIuNTA3OCA2IDEyLjIgNkg5LjhDOS40OTIyMiA2IDkuNDI2MzIgNS45OTY1MiA5LjM4MzI4IDUuOTg2MTlDOS4yMDA0NSA1Ljk0MjI5IDkuMDU3NzEgNS43OTk1NSA5LjAxMzgyIDUuNjE2NzJDOS4wMDM0OCA1LjU3MzY5IDkgNS41MDc3OSA5IDUuMlYyLjhDOSAyLjQ5MjIyIDkuMDAzNDggMi40MjYzMiA5LjAxMzgyIDIuMzgzMjhDOS4wNTc3MSAyLjIwMDQ1IDkuMjAwNDUgMi4wNTc3MSA5LjM4MzI4IDIuMDEzODJaTTIuNzQ5NjcgNy45OTk5N0wyLjggOEg1LjJMNS4yNTAzMyA3Ljk5OTk3QzUuNDc4NzggNy45OTk3NSA1LjY3NTcyIDcuOTk5NTYgNS44NTAxNyA4LjA0MTQ1QzYuMzk4NjQgOC4xNzMxMiA2LjgyNjg4IDguNjAxMzYgNi45NTg1NiA5LjE0OTgzQzcuMDAwNDQgOS4zMjQyOSA3LjAwMDI1IDkuNTIxMjIgNy4wMDAwMyA5Ljc0OTY3TDcgOS44VjEyLjJMNy4wMDAwMyAxMi4yNTAzQzcuMDAwMjUgMTIuNDc4OCA3LjAwMDQ0IDEyLjY3NTcgNi45NTg1NiAxMi44NTAyQzYuODI2ODggMTMuMzk4NiA2LjM5ODY0IDEzLjgyNjkgNS44NTAxNyAxMy45NTg2QzUuNjc1NzIgMTQuMDAwNCA1LjQ3ODc4IDE0LjAwMDMgNS4yNTAzMyAxNEw1LjIgMTRIMi44TDIuNzQ5NjcgMTRDMi41MjEyMiAxNC4wMDAzIDIuMzI0MjkgMTQuMDAwNCAyLjE0OTgzIDEzLjk1ODZDMS42MDEzNiAxMy44MjY5IDEuMTczMTIgMTMuMzk4NiAxLjA0MTQ1IDEyLjg1MDJDMC45OTk1NjQgMTIuNjc1NyAwLjk5OTc1MiAxMi40Nzg4IDAuOTk5OTcgMTIuMjUwM0wxIDEyLjJWOS44TDAuOTk5OTcgOS43NDk2N0MwLjk5OTc1MiA5LjUyMTIyIDAuOTk5NTY0IDkuMzI0MjkgMS4wNDE0NSA5LjE0OTgzQzEuMTczMTIgOC42MDEzNiAxLjYwMTM2IDguMTczMTIgMi4xNDk4MyA4LjA0MTQ1QzIuMzI0MjkgNy45OTk1NiAyLjUyMTIyIDcuOTk5NzUgMi43NDk2NyA3Ljk5OTk3Wk0yLjggOUMyLjQ5MjIyIDkgMi40MjYzMiA5LjAwMzQ4IDIuMzgzMjggOS4wMTM4MkMyLjIwMDQ1IDkuMDU3NzEgMi4wNTc3MSA5LjIwMDQ1IDIuMDEzODIgOS4zODMyOEMyLjAwMzQ4IDkuNDI2MzIgMiA5LjQ5MjIyIDIgOS44VjEyLjJDMiAxMi41MDc4IDIuMDAzNDggMTIuNTczNyAyLjAxMzgyIDEyLjYxNjdDMi4wNTc3MSAxMi43OTk1IDIuMjAwNDUgMTIuOTQyMyAyLjM4MzI4IDEyLjk4NjJDMi40MjYzMiAxMi45OTY1IDIuNDkyMjIgMTMgMi44IDEzSDUuMkM1LjUwNzc5IDEzIDUuNTczNjkgMTIuOTk2NSA1LjYxNjcyIDEyLjk4NjJDNS43OTk1NSAxMi45NDIzIDUuOTQyMjkgMTIuNzk5NSA1Ljk4NjE5IDEyLjYxNjdDNS45OTY1MiAxMi41NzM3IDYgMTIuNTA3OCA2IDEyLjJWOS44QzYgOS40OTIyMiA1Ljk5NjUyIDkuNDI2MzIgNS45ODYxOSA5LjM4MzI4QzUuOTQyMjkgOS4yMDA0NSA1Ljc5OTU1IDkuMDU3NzEgNS42MTY3MiA5LjAxMzgyQzUuNTczNjkgOS4wMDM0OCA1LjUwNzc5IDkgNS4yIDlIMi44Wk05LjggOEw5Ljc0OTY3IDcuOTk5OTdDOS41MjEyMiA3Ljk5OTc1IDkuMzI0MjkgNy45OTk1NiA5LjE0OTgzIDguMDQxNDVDOC42MDEzNiA4LjE3MzEyIDguMTczMTIgOC42MDEzNiA4LjA0MTQ1IDkuMTQ5ODNDNy45OTk1NiA5LjMyNDI5IDcuOTk5NzUgOS41MjEyMiA3Ljk5OTk3IDkuNzQ5NjdMOCA5LjhWMTIuMkw3Ljk5OTk3IDEyLjI1MDNDNy45OTk3NSAxMi40Nzg4IDcuOTk5NTYgMTIuNjc1NyA4LjA0MTQ1IDEyLjg1MDJDOC4xNzMxMiAxMy4zOTg2IDguNjAxMzYgMTMuODI2OSA5LjE0OTgzIDEzLjk1ODZDOS4zMjQyOSAxNC4wMDA0IDkuNTIxMjIgMTQuMDAwMyA5Ljc0OTY3IDE0TDkuOCAxNEgxMi4yTDEyLjI1MDMgMTRDMTIuNDc4OCAxNC4wMDAzIDEyLjY3NTcgMTQuMDAwNCAxMi44NTAyIDEzLjk1ODZDMTMuMzk4NiAxMy44MjY5IDEzLjgyNjkgMTMuMzk4NiAxMy45NTg2IDEyLjg1MDJDMTQuMDAwNCAxMi42NzU3IDE0LjAwMDMgMTIuNDc4OCAxNCAxMi4yNTAzTDE0IDEyLjJWOS44TDE0IDkuNzQ5NjdDMTQuMDAwMyA5LjUyMTIyIDE0LjAwMDQgOS4zMjQyOSAxMy45NTg2IDkuMTQ5ODNDMTMuODI2OSA4LjYwMTM2IDEzLjM5ODYgOC4xNzMxMiAxMi44NTAyIDguMDQxNDVDMTIuNjc1NyA3Ljk5OTU2IDEyLjQ3ODggNy45OTk3NSAxMi4yNTAzIDcuOTk5OTdMMTIuMiA4SDkuOFpNOS4zODMyOCA5LjAxMzgyQzkuNDI2MzIgOS4wMDM0OCA5LjQ5MjIyIDkgOS44IDlIMTIuMkMxMi41MDc4IDkgMTIuNTczNyA5LjAwMzQ4IDEyLjYxNjcgOS4wMTM4MkMxMi43OTk1IDkuMDU3NzEgMTIuOTQyMyA5LjIwMDQ1IDEyLjk4NjIgOS4zODMyOEMxMi45OTY1IDkuNDI2MzIgMTMgOS40OTIyMiAxMyA5LjhWMTIuMkMxMyAxMi41MDc4IDEyLjk5NjUgMTIuNTczNyAxMi45ODYyIDEyLjYxNjdDMTIuOTQyMyAxMi43OTk1IDEyLjc5OTUgMTIuOTQyMyAxMi42MTY3IDEyLjk4NjJDMTIuNTczNyAxMi45OTY1IDEyLjUwNzggMTMgMTIuMiAxM0g5LjhDOS40OTIyMiAxMyA5LjQyNjMyIDEyLjk5NjUgOS4zODMyOCAxMi45ODYyQzkuMjAwNDUgMTIuOTQyMyA5LjA1NzcxIDEyLjc5OTUgOS4wMTM4MiAxMi42MTY3QzkuMDAzNDggMTIuNTczNyA5IDEyLjUwNzggOSAxMi4yVjkuOEM5IDkuNDkyMjIgOS4wMDM0OCA5LjQyNjMyIDkuMDEzODIgOS4zODMyOEM5LjA1NzcxIDkuMjAwNDUgOS4yMDA0NSA5LjA1NzcxIDkuMzgzMjggOS4wMTM4MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEtlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjAwMDE0IDIuNzM4OTVDMy4wMDAxNCAyLjk0Njk4IDIuNzYwODcgMy4wNjQwMSAyLjU5NjY2IDIuOTM2MjhMMS4wMDM4NiAxLjY5NzQ0QzAuODc1MTc3IDEuNTk3MzUgMC44NzUxNzcgMS40MDI4NiAxLjAwMzg2IDEuMzAyNzdMMi41OTY2NiAwLjA2MzkyOEMyLjc2MDg3IC0wLjA2Mzc5NDQgMy4wMDAxNCAwLjA1MzIyOTMgMy4wMDAxNCAwLjI2MTI2NlYxLjAwMDEySDkuMDAwMDlWMC4yNjEyOTZDOS4wMDAwOSAwLjA1MzI1OTEgOS4yMzkzNiAtMC4wNjM3NjQ2IDkuNDAzNTggMC4wNjM5NTc4TDEwLjk5NjQgMS4zMDI4QzExLjEyNTEgMS40MDI4OSAxMS4xMjUxIDEuNTk3MzggMTAuOTk2NCAxLjY5NzQ3TDkuNDAzNTggMi45MzYzMUM5LjIzOTM2IDMuMDY0MDQgOS4wMDAwOSAyLjk0NzAxIDkuMDAwMDkgMi43Mzg5OFYyLjAwMDEySDMuMDAwMTRWMi43Mzg5NVpNOS41MDAwMiA0Ljk5OTk4SDIuNTAwMDJDMi4yMjM4OCA0Ljk5OTk4IDIuMDAwMDIgNS4yMjM4NCAyLjAwMDAyIDUuNDk5OThWMTIuNUMyLjAwMDAyIDEyLjc3NjEgMi4yMjM4OCAxMyAyLjUwMDAyIDEzSDkuNTAwMDJDOS43NzYxNiAxMyAxMCAxMi43NzYxIDEwIDEyLjVWNS40OTk5OEMxMCA1LjIyMzg0IDkuNzc2MTYgNC45OTk5OCA5LjUwMDAyIDQuOTk5OThaTTIuNTAwMDIgMy45OTk5OEMxLjY3MTU5IDMuOTk5OTggMS4wMDAwMiA0LjY3MTU2IDEuMDAwMDIgNS40OTk5OFYxMi41QzEuMDAwMDIgMTMuMzI4NCAxLjY3MTU5IDE0IDIuNTAwMDIgMTRIOS41MDAwMkMxMC4zMjg0IDE0IDExIDEzLjMyODQgMTEgMTIuNVY1LjQ5OTk4QzExIDQuNjcxNTYgMTAuMzI4NCAzLjk5OTk4IDkuNTAwMDIgMy45OTk5OEgyLjUwMDAyWk0xNC43Mzg5IDYuMDAwMDFIMTRWMTJIMTQuNzM4OUMxNC45NDY5IDEyIDE1LjA2NCAxMi4yMzkzIDE0LjkzNjIgMTIuNDAzNUwxMy42OTc0IDEzLjk5NjNDMTMuNTk3MyAxNC4xMjUgMTMuNDAyOCAxNC4xMjUgMTMuMzAyNyAxMy45OTYzTDEyLjA2MzkgMTIuNDAzNUMxMS45MzYyIDEyLjIzOTMgMTIuMDUzMiAxMiAxMi4yNjEyIDEySDEzVjYuMDAwMDFIMTIuMjYxMkMxMi4wNTMyIDYuMDAwMDEgMTEuOTM2MSA1Ljc2MDc0IDEyLjA2MzkgNS41OTY1M0wxMy4zMDI3IDQuMDAzNzNDMTMuNDAyOCAzLjg3NTA1IDEzLjU5NzMgMy44NzUwNSAxMy42OTc0IDQuMDAzNzRMMTQuOTM2MiA1LjU5NjUzQzE1LjA2MzkgNS43NjA3NCAxNC45NDY5IDYuMDAwMDEgMTQuNzM4OSA2LjAwMDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzcwNzVDMy44NDIyMiAwLjg3NzA3NSAwLjg3NzA3NSAzLjg0MjIyIDAuODc3MDc1IDcuNDk5OTFDMC44NzcwNzUgMTEuMTU3NiAzLjg0MjIyIDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzExLjE1NzYgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzYgMTQuMTIyNyA3LjQ5OTkxQzE0LjEyMjcgMy44NDIyMiAxMS4xNTc2IDAuODc3MDc1IDcuNDk5OTEgMC44NzcwNzVaTTEuODI3MDggNy40OTk5MUMxLjgyNzA4IDQuMzY2ODkgNC4zNjY4OSAxLjgyNzA3IDcuNDk5OTEgMS44MjcwN0MxMC42MzI5IDEuODI3MDcgMTMuMTcyNyA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MUMxMy4xNzI3IDEwLjYzMjkgMTAuNjMyOSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0M0LjM2Njg5IDEzLjE3MjcgMS44MjcwOCAxMC42MzI5IDEuODI3MDggNy40OTk5MVpNOC4zNzI4NyA3LjUwMDA2QzguMzcyODcgNy45ODE5NiA3Ljk4MjIxIDguMzcyNjMgNy41MDAzIDguMzcyNjNDNy4wMTgzOSA4LjM3MjYzIDYuNjI3NzMgNy45ODE5NiA2LjYyNzczIDcuNTAwMDZDNi42Mjc3MyA3LjAxODE1IDcuMDE4MzkgNi42Mjc0OCA3LjUwMDMgNi42Mjc0OEM3Ljk4MjIxIDYuNjI3NDggOC4zNzI4NyA3LjAxODE1IDguMzcyODcgNy41MDAwNlpNOS4zMjI4NyA3LjUwMDA2QzkuMzIyODcgOC41MDY2NCA4LjUwNjg4IDkuMzIyNjMgNy41MDAzIDkuMzIyNjNDNi40OTM3MiA5LjMyMjYzIDUuNjc3NzMgOC41MDY2NCA1LjY3NzczIDcuNTAwMDZDNS42Nzc3MyA2LjQ5MzQ4IDYuNDkzNzIgNS42Nzc0OCA3LjUwMDMgNS42Nzc0OEM4LjUwNjg4IDUuNjc3NDggOS4zMjI4NyA2LjQ5MzQ4IDkuMzIyODcgNy41MDAwNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFllPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDcuNUMyIDcuMjIzODYgMi4yMjM4NiA3IDIuNSA3SDEyLjVDMTIuNzc2MSA3IDEzIDcuMjIzODYgMTMgNy41QzEzIDcuNzc2MTQgMTIuNzc2MSA4IDEyLjUgOEgyLjVDMi4yMjM4NiA4IDIgNy43NzYxNCAyIDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEplPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMkM3Ljc3NjE0IDIgOCAyLjIyMzg2IDggMi41TDggMTIuNUM4IDEyLjc3NjEgNy43NzYxNCAxMyA3LjUgMTNDNy4yMjM4NiAxMyA3IDEyLjc3NjEgNyAxMi41TDcgMi41QzcgMi4yMjM4NiA3LjIyMzg2IDIgNy41IDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxYZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDkuMTI1QzguMzk3NDYgOS4xMjUgOS4xMjUgOC4zOTc0NiA5LjEyNSA3LjVDOS4xMjUgNi42MDI1NCA4LjM5NzQ2IDUuODc1IDcuNSA1Ljg3NUM2LjYwMjU0IDUuODc1IDUuODc1IDYuNjAyNTQgNS44NzUgNy41QzUuODc1IDguMzk3NDYgNi42MDI1NCA5LjEyNSA3LjUgOS4xMjVaTTcuNSAxMC4xMjVDOC45NDk3NSAxMC4xMjUgMTAuMTI1IDguOTQ5NzUgMTAuMTI1IDcuNUMxMC4xMjUgNi4wNTAyNSA4Ljk0OTc1IDQuODc1IDcuNSA0Ljg3NUM2LjA1MDI1IDQuODc1IDQuODc1IDYuMDUwMjUgNC44NzUgNy41QzQuODc1IDguOTQ5NzUgNi4wNTAyNSAxMC4xMjUgNy41IDEwLjEyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFFlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05Ljg3NSA3LjVDOS44NzUgOC44MTE2OCA4LjgxMTY4IDkuODc1IDcuNSA5Ljg3NUM2LjE4ODMyIDkuODc1IDUuMTI1IDguODExNjggNS4xMjUgNy41QzUuMTI1IDYuMTg4MzIgNi4xODgzMiA1LjEyNSA3LjUgNS4xMjVDOC44MTE2OCA1LjEyNSA5Ljg3NSA2LjE4ODMyIDkuODc1IDcuNVpcIixmaWxsOm59KSl9LGV0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjYyNSA3LjVDMy42MjUgOC4xMjEzMiAzLjEyMTMyIDguNjI1IDIuNSA4LjYyNUMxLjg3ODY4IDguNjI1IDEuMzc1IDguMTIxMzIgMS4zNzUgNy41QzEuMzc1IDYuODc4NjggMS44Nzg2OCA2LjM3NSAyLjUgNi4zNzVDMy4xMjEzMiA2LjM3NSAzLjYyNSA2Ljg3ODY4IDMuNjI1IDcuNVpNOC42MjUgNy41QzguNjI1IDguMTIxMzIgOC4xMjEzMiA4LjYyNSA3LjUgOC42MjVDNi44Nzg2OCA4LjYyNSA2LjM3NSA4LjEyMTMyIDYuMzc1IDcuNUM2LjM3NSA2Ljg3ODY4IDYuODc4NjggNi4zNzUgNy41IDYuMzc1QzguMTIxMzIgNi4zNzUgOC42MjUgNi44Nzg2OCA4LjYyNSA3LjVaTTEyLjUgOC42MjVDMTMuMTIxMyA4LjYyNSAxMy42MjUgOC4xMjEzMiAxMy42MjUgNy41QzEzLjYyNSA2Ljg3ODY4IDEzLjEyMTMgNi4zNzUgMTIuNSA2LjM3NUMxMS44Nzg3IDYuMzc1IDExLjM3NSA2Ljg3ODY4IDExLjM3NSA3LjVDMTEuMzc1IDguMTIxMzIgMTEuODc4NyA4LjYyNSAxMi41IDguNjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguNjI1IDIuNUM4LjYyNSAzLjEyMTMyIDguMTIxMzIgMy42MjUgNy41IDMuNjI1QzYuODc4NjggMy42MjUgNi4zNzUgMy4xMjEzMiA2LjM3NSAyLjVDNi4zNzUgMS44Nzg2OCA2Ljg3ODY4IDEuMzc1IDcuNSAxLjM3NUM4LjEyMTMyIDEuMzc1IDguNjI1IDEuODc4NjggOC42MjUgMi41Wk04LjYyNSA3LjVDOC42MjUgOC4xMjEzMiA4LjEyMTMyIDguNjI1IDcuNSA4LjYyNUM2Ljg3ODY4IDguNjI1IDYuMzc1IDguMTIxMzIgNi4zNzUgNy41QzYuMzc1IDYuODc4NjggNi44Nzg2OCA2LjM3NSA3LjUgNi4zNzVDOC4xMjEzMiA2LjM3NSA4LjYyNSA2Ljg3ODY4IDguNjI1IDcuNVpNNy41IDEzLjYyNUM4LjEyMTMyIDEzLjYyNSA4LjYyNSAxMy4xMjEzIDguNjI1IDEyLjVDOC42MjUgMTEuODc4NyA4LjEyMTMyIDExLjM3NSA3LjUgMTEuMzc1QzYuODc4NjggMTEuMzc1IDYuMzc1IDExLjg3ODcgNi4zNzUgMTIuNUM2LjM3NSAxMy4xMjEzIDYuODc4NjggMTMuNjI1IDcuNSAxMy42MjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxudD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy44NTM1NSAyLjE0NjQ1QzMuNjU4MjkgMS45NTExOCAzLjM0MTcxIDEuOTUxMTggMy4xNDY0NSAyLjE0NjQ1QzIuOTUxMTggMi4zNDE3MSAyLjk1MTE4IDIuNjU4MjkgMy4xNDY0NSAyLjg1MzU1TDcuMTQ2NDUgNi44NTM1NUM3LjM0MTcxIDcuMDQ4ODIgNy42NTgyOSA3LjA0ODgyIDcuODUzNTUgNi44NTM1NUwxMS44NTM2IDIuODUzNTVDMTIuMDQ4OCAyLjY1ODI5IDEyLjA0ODggMi4zNDE3MSAxMS44NTM2IDIuMTQ2NDVDMTEuNjU4MyAxLjk1MTE4IDExLjM0MTcgMS45NTExOCAxMS4xNDY0IDIuMTQ2NDVMNy41IDUuNzkyODlMMy44NTM1NSAyLjE0NjQ1Wk0zLjg1MzU1IDguMTQ2NDVDMy42NTgyOSA3Ljk1MTE4IDMuMzQxNzEgNy45NTExOCAzLjE0NjQ1IDguMTQ2NDVDMi45NTExOCA4LjM0MTcxIDIuOTUxMTggOC42NTgyOSAzLjE0NjQ1IDguODUzNTVMNy4xNDY0NSAxMi44NTM2QzcuMzQxNzEgMTMuMDQ4OCA3LjY1ODI5IDEzLjA0ODggNy44NTM1NSAxMi44NTM2TDExLjg1MzYgOC44NTM1NUMxMi4wNDg4IDguNjU4MjkgMTIuMDQ4OCA4LjM0MTcxIDExLjg1MzYgOC4xNDY0NUMxMS42NTgzIDcuOTUxMTggMTEuMzQxNyA3Ljk1MTE4IDExLjE0NjQgOC4xNDY0NUw3LjUgMTEuNzkyOUwzLjg1MzU1IDguMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxydD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi44NTM1NSAzLjg1MzU1QzcuMDQ4ODIgMy42NTgyOSA3LjA0ODgyIDMuMzQxNzEgNi44NTM1NSAzLjE0NjQ1QzYuNjU4MjkgMi45NTExOCA2LjM0MTcxIDIuOTUxMTggNi4xNDY0NSAzLjE0NjQ1TDIuMTQ2NDUgNy4xNDY0NUMxLjk1MTE4IDcuMzQxNzEgMS45NTExOCA3LjY1ODI5IDIuMTQ2NDUgNy44NTM1NUw2LjE0NjQ1IDExLjg1MzZDNi4zNDE3MSAxMi4wNDg4IDYuNjU4MjkgMTIuMDQ4OCA2Ljg1MzU1IDExLjg1MzZDNy4wNDg4MiAxMS42NTgzIDcuMDQ4ODIgMTEuMzQxNyA2Ljg1MzU1IDExLjE0NjRMMy4yMDcxMSA3LjVMNi44NTM1NSAzLjg1MzU1Wk0xMi44NTM2IDMuODUzNTVDMTMuMDQ4OCAzLjY1ODI5IDEzLjA0ODggMy4zNDE3MSAxMi44NTM2IDMuMTQ2NDVDMTIuNjU4MyAyLjk1MTE4IDEyLjM0MTcgMi45NTExOCAxMi4xNDY0IDMuMTQ2NDVMOC4xNDY0NSA3LjE0NjQ1QzcuOTUxMTggNy4zNDE3MSA3Ljk1MTE4IDcuNjU4MjkgOC4xNDY0NSA3Ljg1MzU1TDEyLjE0NjQgMTEuODUzNkMxMi4zNDE3IDEyLjA0ODggMTIuNjU4MyAxMi4wNDg4IDEyLjg1MzYgMTEuODUzNkMxMy4wNDg4IDExLjY1ODMgMTMuMDQ4OCAxMS4zNDE3IDEyLjg1MzYgMTEuMTQ2NEw5LjIwNzExIDcuNUwxMi44NTM2IDMuODUzNTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxvdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi4xNDY0NSAxMS4xNDY0QzEuOTUxMTggMTEuMzQxNyAxLjk1MTE4IDExLjY1ODMgMi4xNDY0NSAxMS44NTM2QzIuMzQxNzEgMTIuMDQ4OCAyLjY1ODI5IDEyLjA0ODggMi44NTM1NSAxMS44NTM2TDYuODUzNTUgNy44NTM1NUM3LjA0ODgyIDcuNjU4MjkgNy4wNDg4MiA3LjM0MTcxIDYuODUzNTUgNy4xNDY0NUwyLjg1MzU1IDMuMTQ2NDVDMi42NTgyOSAyLjk1MTE4IDIuMzQxNzEgMi45NTExOCAyLjE0NjQ1IDMuMTQ2NDVDMS45NTExOCAzLjM0MTcxIDEuOTUxMTggMy42NTgyOSAyLjE0NjQ1IDMuODUzNTVMNS43OTI4OSA3LjVMMi4xNDY0NSAxMS4xNDY0Wk04LjE0NjQ1IDExLjE0NjRDNy45NTExOCAxMS4zNDE3IDcuOTUxMTggMTEuNjU4MyA4LjE0NjQ1IDExLjg1MzZDOC4zNDE3MSAxMi4wNDg4IDguNjU4MjkgMTIuMDQ4OCA4Ljg1MzU1IDExLjg1MzZMMTIuODUzNiA3Ljg1MzU1QzEzLjA0ODggNy42NTgyOSAxMy4wNDg4IDcuMzQxNzEgMTIuODUzNiA3LjE0NjQ1TDguODUzNTUgMy4xNDY0NUM4LjY1ODI5IDIuOTUxMTggOC4zNDE3MSAyLjk1MTE4IDguMTQ2NDUgMy4xNDY0NUM3Ljk1MTE4IDMuMzQxNzEgNy45NTExOCAzLjY1ODI5IDguMTQ2NDUgMy44NTM1NUwxMS43OTI5IDcuNUw4LjE0NjQ1IDExLjE0NjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuMTQ2NCA2Ljg1MzU1QzExLjM0MTcgNy4wNDg4MiAxMS42NTgzIDcuMDQ4ODIgMTEuODUzNiA2Ljg1MzU1QzEyLjA0ODggNi42NTgyOSAxMi4wNDg4IDYuMzQxNzEgMTEuODUzNiA2LjE0NjQ1TDcuODUzNTUgMi4xNDY0NUM3LjY1ODI5IDEuOTUxMTggNy4zNDE3MSAxLjk1MTE4IDcuMTQ2NDUgMi4xNDY0NUwzLjE0NjQ1IDYuMTQ2NDVDMi45NTExOCA2LjM0MTcxIDIuOTUxMTggNi42NTgyOSAzLjE0NjQ1IDYuODUzNTVDMy4zNDE3MSA3LjA0ODgyIDMuNjU4MjkgNy4wNDg4MiAzLjg1MzU1IDYuODUzNTVMNy41IDMuMjA3MTFMMTEuMTQ2NCA2Ljg1MzU1Wk0xMS4xNDY0IDEyLjg1MzZDMTEuMzQxNyAxMy4wNDg4IDExLjY1ODMgMTMuMDQ4OCAxMS44NTM2IDEyLjg1MzZDMTIuMDQ4OCAxMi42NTgzIDEyLjA0ODggMTIuMzQxNyAxMS44NTM2IDEyLjE0NjRMNy44NTM1NSA4LjE0NjQ1QzcuNjU4MjkgNy45NTExOCA3LjM0MTcxIDcuOTUxMTggNy4xNDY0NSA4LjE0NjQ1TDMuMTQ2NDUgMTIuMTQ2NEMyLjk1MTE4IDEyLjM0MTcgMi45NTExOCAxMi42NTgzIDMuMTQ2NDUgMTIuODUzNkMzLjM0MTcxIDEzLjA0ODggMy42NTgyOSAxMy4wNDg4IDMuODUzNTUgMTIuODUzNkw3LjUgOS4yMDcxMUwxMS4xNDY0IDEyLjg1MzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxpdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41MDAwNSAxLjA0OTk5QzcuNzQ4NTggMS4wNDk5OSA3Ljk1MDA1IDEuMjUxNDYgNy45NTAwNSAxLjQ5OTk5VjguNDEzNTlMMTAuMTgxOSA2LjE4MTc5QzEwLjM1NzYgNi4wMDYwNSAxMC42NDI1IDYuMDA2MDUgMTAuODE4MiA2LjE4MTc5QzEwLjk5NCA2LjM1NzUzIDEwLjk5NCA2LjY0MjQ1IDEwLjgxODIgNi44MTgxOUw3LjgxODI1IDkuODE4MTlDNy42NDI1MSA5Ljk5MzkyIDcuMzU3NTkgOS45OTM5MiA3LjE4MTg1IDkuODE4MTlMNC4xODE4NSA2LjgxODE5QzQuMDA2MTEgNi42NDI0NSA0LjAwNjExIDYuMzU3NTMgNC4xODE4NSA2LjE4MTc5QzQuMzU3NTkgNi4wMDYwNSA0LjY0MjUxIDYuMDA2MDUgNC44MTgyNSA2LjE4MTc5TDcuMDUwMDUgOC40MTM1OVYxLjQ5OTk5QzcuMDUwMDUgMS4yNTE0NiA3LjI1MTUyIDEuMDQ5OTkgNy41MDAwNSAxLjA0OTk5Wk0yLjUgMTBDMi43NzYxNCAxMCAzIDEwLjIyMzkgMyAxMC41VjEyQzMgMTIuNTUzOSAzLjQ0NTY1IDEzIDMuOTk2MzUgMTNIMTEuMDAxMkMxMS41NTI5IDEzIDEyIDEyLjU1MjggMTIgMTJWMTAuNUMxMiAxMC4yMjM5IDEyLjIyMzkgMTAgMTIuNSAxMEMxMi43NzYxIDEwIDEzIDEwLjIyMzkgMTMgMTAuNVYxMkMxMyAxMy4xMDQxIDEyLjEwNjIgMTQgMTEuMDAxMiAxNEgzLjk5NjM1QzIuODkwMTkgMTQgMiAxMy4xMDMgMiAxMlYxMC41QzIgMTAuMjIzOSAyLjIyMzg2IDEwIDIuNSAxMFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiMi41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiNC41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiNi40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNC41XCIsY3k6XCI4LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI0LjVcIixjeTpcIjEwLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI0LjVcIixjeTpcIjEyLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjIuNVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjQuNVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjYuNDk5XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjYuNVwiLGN5OlwiOC40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNi41XCIsY3k6XCIxMC40OThcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNi41XCIsY3k6XCIxMi40OThcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiOC40OTlcIixjeTpcIjIuNVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiNC41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjguNDk5XCIsY3k6XCI2LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiOC40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiOC40OTlcIixjeTpcIjEwLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiMTIuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiMi41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiNC41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiNi40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiMTAuNDk5XCIsY3k6XCI4LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCIxMC40OTlcIixjeTpcIjEwLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCIxMC40OTlcIixjeTpcIjEyLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pKX0sc3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNSA0LjYyNUM2LjEyMTMyIDQuNjI1IDYuNjI1IDQuMTIxMzIgNi42MjUgMy41QzYuNjI1IDIuODc4NjggNi4xMjEzMiAyLjM3NSA1LjUgMi4zNzVDNC44Nzg2OCAyLjM3NSA0LjM3NSAyLjg3ODY4IDQuMzc1IDMuNUM0LjM3NSA0LjEyMTMyIDQuODc4NjggNC42MjUgNS41IDQuNjI1Wk05LjUgNC42MjVDMTAuMTIxMyA0LjYyNSAxMC42MjUgNC4xMjEzMiAxMC42MjUgMy41QzEwLjYyNSAyLjg3ODY4IDEwLjEyMTMgMi4zNzUgOS41IDIuMzc1QzguODc4NjggMi4zNzUgOC4zNzUgMi44Nzg2OCA4LjM3NSAzLjVDOC4zNzUgNC4xMjEzMiA4Ljg3ODY4IDQuNjI1IDkuNSA0LjYyNVpNMTAuNjI1IDcuNUMxMC42MjUgOC4xMjEzMiAxMC4xMjEzIDguNjI1IDkuNSA4LjYyNUM4Ljg3ODY4IDguNjI1IDguMzc1IDguMTIxMzIgOC4zNzUgNy41QzguMzc1IDYuODc4NjggOC44Nzg2OCA2LjM3NSA5LjUgNi4zNzVDMTAuMTIxMyA2LjM3NSAxMC42MjUgNi44Nzg2OCAxMC42MjUgNy41Wk01LjUgOC42MjVDNi4xMjEzMiA4LjYyNSA2LjYyNSA4LjEyMTMyIDYuNjI1IDcuNUM2LjYyNSA2Ljg3ODY4IDYuMTIxMzIgNi4zNzUgNS41IDYuMzc1QzQuODc4NjggNi4zNzUgNC4zNzUgNi44Nzg2OCA0LjM3NSA3LjVDNC4zNzUgOC4xMjEzMiA0Ljg3ODY4IDguNjI1IDUuNSA4LjYyNVpNMTAuNjI1IDExLjVDMTAuNjI1IDEyLjEyMTMgMTAuMTIxMyAxMi42MjUgOS41IDEyLjYyNUM4Ljg3ODY4IDEyLjYyNSA4LjM3NSAxMi4xMjEzIDguMzc1IDExLjVDOC4zNzUgMTAuODc4NyA4Ljg3ODY4IDEwLjM3NSA5LjUgMTAuMzc1QzEwLjEyMTMgMTAuMzc1IDEwLjYyNSAxMC44Nzg3IDEwLjYyNSAxMS41Wk01LjUgMTIuNjI1QzYuMTIxMzIgMTIuNjI1IDYuNjI1IDEyLjEyMTMgNi42MjUgMTEuNUM2LjYyNSAxMC44Nzg3IDYuMTIxMzIgMTAuMzc1IDUuNSAxMC4zNzVDNC44Nzg2OCAxMC4zNzUgNC4zNzUgMTAuODc4NyA0LjM3NSAxMS41QzQuMzc1IDEyLjEyMTMgNC44Nzg2OCAxMi42MjUgNS41IDEyLjYyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGN0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjQ5OTk4IDQuMDk5OThDMi4yNzkwNiA0LjA5OTk4IDIuMDk5OTggNC4yNzkwNiAyLjA5OTk4IDQuNDk5OThDMi4wOTk5OCA0LjcyMDg5IDIuMjc5MDYgNC44OTk5OCAyLjQ5OTk4IDQuODk5OThIMTIuNUMxMi43MjA5IDQuODk5OTggMTIuOSA0LjcyMDg5IDEyLjkgNC40OTk5OEMxMi45IDQuMjc5MDYgMTIuNzIwOSA0LjA5OTk4IDEyLjUgNC4wOTk5OEgyLjQ5OTk4Wk0yLjQ5OTk4IDYuMDk5OThDMi4yNzkwNiA2LjA5OTk4IDIuMDk5OTggNi4yNzkwNiAyLjA5OTk4IDYuNDk5OThDMi4wOTk5OCA2LjcyMDg5IDIuMjc5MDYgNi44OTk5OCAyLjQ5OTk4IDYuODk5OThIMTIuNUMxMi43MjA5IDYuODk5OTggMTIuOSA2LjcyMDg5IDEyLjkgNi40OTk5OEMxMi45IDYuMjc5MDYgMTIuNzIwOSA2LjA5OTk4IDEyLjUgNi4wOTk5OEgyLjQ5OTk4Wk0yLjA5OTk4IDguNDk5OThDMi4wOTk5OCA4LjI3OTA2IDIuMjc5MDYgOC4wOTk5OCAyLjQ5OTk4IDguMDk5OThIMTIuNUMxMi43MjA5IDguMDk5OTggMTIuOSA4LjI3OTA2IDEyLjkgOC40OTk5OEMxMi45IDguNzIwODkgMTIuNzIwOSA4Ljg5OTk4IDEyLjUgOC44OTk5OEgyLjQ5OTk4QzIuMjc5MDYgOC44OTk5OCAyLjA5OTk4IDguNzIwODkgMi4wOTk5OCA4LjQ5OTk4Wk0yLjQ5OTk4IDEwLjFDMi4yNzkwNiAxMC4xIDIuMDk5OTggMTAuMjc5MSAyLjA5OTk4IDEwLjVDMi4wOTk5OCAxMC43MjA5IDIuMjc5MDYgMTAuOSAyLjQ5OTk4IDEwLjlIMTIuNUMxMi43MjA5IDEwLjkgMTIuOSAxMC43MjA5IDEyLjkgMTAuNUMxMi45IDEwLjI3OTEgMTIuNzIwOSAxMC4xIDEyLjUgMTAuMUgyLjQ5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMDk5OTggMTIuNUM0LjA5OTk4IDEyLjcyMDkgNC4yNzkwNiAxMi45IDQuNDk5OTggMTIuOUM0LjcyMDg5IDEyLjkgNC44OTk5OCAxMi43MjA5IDQuODk5OTggMTIuNUw0Ljg5OTk4IDIuNTAwMDJDNC44OTk5OCAyLjI3OTExIDQuNzIwODkgMi4xMDAwMyA0LjQ5OTk4IDIuMTAwMDNDNC4yNzkwNiAyLjEwMDAzIDQuMDk5OTggMi4yNzkxMSA0LjA5OTk4IDIuNTAwMDJMNC4wOTk5OCAxMi41Wk02LjA5OTk4IDEyLjVDNi4wOTk5OCAxMi43MjA5IDYuMjc5MDYgMTIuOSA2LjQ5OTk4IDEyLjlDNi43MjA4OSAxMi45IDYuODk5OTggMTIuNzIwOSA2Ljg5OTk4IDEyLjVMNi44OTk5OCAyLjUwMDAyQzYuODk5OTggMi4yNzkxMSA2LjcyMDg5IDIuMTAwMDMgNi40OTk5OCAyLjEwMDAzQzYuMjc5MDYgMi4xMDAwMyA2LjA5OTk4IDIuMjc5MTEgNi4wOTk5OCAyLjUwMDAyTDYuMDk5OTggMTIuNVpNOC40OTk5OCAxMi45QzguMjc5MDYgMTIuOSA4LjA5OTk4IDEyLjcyMDkgOC4wOTk5OCAxMi41TDguMDk5OTggMi41MDAwMkM4LjA5OTk4IDIuMjc5MTEgOC4yNzkwNiAyLjEwMDAyIDguNDk5OTggMi4xMDAwMkM4LjcyMDg5IDIuMTAwMDIgOC44OTk5OCAyLjI3OTExIDguODk5OTggMi41MDAwMkw4Ljg5OTk4IDEyLjVDOC44OTk5OCAxMi43MjA5IDguNzIwODkgMTIuOSA4LjQ5OTk4IDEyLjlaTTEwLjEgMTIuNUMxMC4xIDEyLjcyMDkgMTAuMjc5MSAxMi45IDEwLjUgMTIuOUMxMC43MjA5IDEyLjkgMTAuOSAxMi43MjA5IDEwLjkgMTIuNUwxMC45IDIuNTAwMDJDMTAuOSAyLjI3OTExIDEwLjcyMDkgMi4xMDAwMiAxMC41IDIuMTAwMDJDMTAuMjc5MSAyLjEwMDAyIDEwLjEgMi4yNzkxMSAxMC4xIDIuNTAwMDJMMTAuMSAxMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwLjMyODUgMS4xMzYwN0MxMC4xMzMyIDAuOTQwODA5IDkuODE2NjIgMC45NDA4MDggOS42MjEzNiAxLjEzNjA3QzkuNDI2MDkgMS4zMzEzMyA5LjQyNjA5IDEuNjQ3OTIgOS42MjEzNiAxLjg0MzE4TDEwLjI3NDQgMi40OTYxOUw1LjQyNTYzIDYuMTMyNzRMNC4zMTgwNSA1LjAyNTE2QzQuMTIyNzkgNC44Mjk5IDMuODA2MjEgNC44Mjk5IDMuNjEwOTUgNS4wMjUxNkMzLjQxNTY5IDUuMjIwNDIgMy40MTU2OSA1LjUzNyAzLjYxMDk1IDUuNzMyMjZMNS4wMjUxNiA3LjE0NjQ4TDYuMDg1ODIgOC4yMDcxNEwyLjgxNTQ1IDExLjQ3NzVDMi42MjAxOSAxMS42NzI4IDIuNjIwMTkgMTEuOTg5NCAyLjgxNTQ1IDEyLjE4NDZDMy4wMTA3MiAxMi4zNzk5IDMuMzI3MyAxMi4zNzk5IDMuNTIyNTYgMTIuMTg0Nkw2Ljc5MjkzIDguOTE0MjVMNy44NTM1OSA5Ljk3NDkxTDkuMjY3OCAxMS4zODkxQzkuNDYzMDYgMTEuNTg0NCA5Ljc3OTY1IDExLjU4NDQgOS45NzQ5MSAxMS4zODkxQzEwLjE3MDIgMTEuMTkzOSAxMC4xNzAyIDEwLjg3NzMgOS45NzQ5MSAxMC42ODJMOC44NjczMyA5LjU3NDQzTDEyLjUwMzkgNC43MjU3TDEzLjE1NjkgNS4zNzg3MUMxMy4zNTIyIDUuNTczOTcgMTMuNjY4NyA1LjU3Mzk3IDEzLjg2NCA1LjM3ODcxQzE0LjA1OTMgNS4xODM0NSAxNC4wNTkzIDQuODY2ODcgMTMuODY0IDQuNjcxNkwxMi44MDMzIDMuNjEwOTRMMTEuMzg5MSAyLjE5NjczTDEwLjMyODUgMS4xMzYwN1pNNi4xMzk5MiA2Ljg0NzAyTDEwLjk4ODcgMy4yMTA0N0wxMS43ODk2IDQuMDExNDJMOC4xNTMwNSA4Ljg2MDE1TDYuMTM5OTIgNi44NDcwMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHB0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05LjYyMTI5IDEuMTM2MDdDOS44MTY1NiAwLjk0MDgwOCAxMC4xMzMxIDAuOTQwODA5IDEwLjMyODQgMS4xMzYwN0wxMS4zODkxIDIuMTk2NzNMMTIuODAzMyAzLjYxMDk0TDEzLjg2MzkgNC42NzE2QzE0LjA1OTIgNC44NjY4NyAxNC4wNTkyIDUuMTgzNDUgMTMuODYzOSA1LjM3ODcxQzEzLjY2ODcgNS41NzM5NyAxMy4zNTIxIDUuNTczOTcgMTMuMTU2OCA1LjM3ODcxTDEyLjUwMzggNC43MjU3TDguODY3MjcgOS41NzQ0M0w5Ljk3NDg1IDEwLjY4MkMxMC4xNzAxIDEwLjg3NzMgMTAuMTcwMSAxMS4xOTM5IDkuOTc0ODUgMTEuMzg5MUM5Ljc3OTU5IDExLjU4NDQgOS40NjMgMTEuNTg0NCA5LjI2Nzc0IDExLjM4OTFMNy44NTM1MyA5Ljk3NDkxTDYuNzkyODcgOC45MTQyNUwzLjUyMjUgMTIuMTg0NkMzLjMyNzI0IDEyLjM3OTkgMy4wMTA2NSAxMi4zNzk5IDIuODE1MzkgMTIuMTg0NkMyLjYyMDEzIDExLjk4OTQgMi42MjAxMyAxMS42NzI4IDIuODE1MzkgMTEuNDc3NUw2LjA4NTc2IDguMjA3MTRMNS4wMjUxIDcuMTQ2NDhMMy42MTA4OSA1LjczMjI2QzMuNDE1NjMgNS41MzcgMy40MTU2MiA1LjIyMDQyIDMuNjEwODkgNS4wMjUxNkMzLjgwNjE1IDQuODI5OSA0LjEyMjczIDQuODI5OSA0LjMxNzk5IDUuMDI1MTZMNS40MjU1NyA2LjEzMjc0TDEwLjI3NDMgMi40OTYxOUw5LjYyMTI5IDEuODQzMThDOS40MjYwMyAxLjY0NzkyIDkuNDI2MDMgMS4zMzEzMyA5LjYyMTI5IDEuMTM2MDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05LjYyMTI5IDEuMTM2MDdDOS44MTY1NiAwLjk0MDgwOCAxMC4xMzMxIDAuOTQwODA5IDEwLjMyODQgMS4xMzYwN0wxMS4zODkxIDIuMTk2NzNMMTIuODAzMyAzLjYxMDk0TDEzLjg2MzkgNC42NzE2QzE0LjA1OTIgNC44NjY4NyAxNC4wNTkyIDUuMTgzNDUgMTMuODYzOSA1LjM3ODcxQzEzLjY2ODcgNS41NzM5NyAxMy4zNTIxIDUuNTczOTcgMTMuMTU2OCA1LjM3ODcxTDEyLjUwMzggNC43MjU3TDguODY3MjcgOS41NzQ0M0w5Ljk3NDg1IDEwLjY4MkMxMC4xNzAxIDEwLjg3NzMgMTAuMTcwMSAxMS4xOTM5IDkuOTc0ODUgMTEuMzg5MUM5Ljc3OTU5IDExLjU4NDQgOS40NjMgMTEuNTg0NCA5LjI2Nzc0IDExLjM4OTFMNy44NTM1MyA5Ljk3NDkxTDYuNzkyODcgOC45MTQyNUwzLjUyMjUgMTIuMTg0NkMzLjMyNzI0IDEyLjM3OTkgMy4wMTA2NSAxMi4zNzk5IDIuODE1MzkgMTIuMTg0NkMyLjYyMDEzIDExLjk4OTQgMi42MjAxMyAxMS42NzI4IDIuODE1MzkgMTEuNDc3NUw2LjA4NTc2IDguMjA3MTRMNS4wMjUxIDcuMTQ2NDhMMy42MTA4OSA1LjczMjI2QzMuNDE1NjMgNS41MzcgMy40MTU2MiA1LjIyMDQyIDMuNjEwODkgNS4wMjUxNkMzLjgwNjE1IDQuODI5OSA0LjEyMjczIDQuODI5OSA0LjMxNzk5IDUuMDI1MTZMNS40MjU1NyA2LjEzMjc0TDEwLjI3NDMgMi40OTYxOUw5LjYyMTI5IDEuODQzMThDOS40MjYwMyAxLjY0NzkyIDkuNDI2MDMgMS4zMzEzMyA5LjYyMTI5IDEuMTM2MDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxmdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5OSAzLjA5OTk4QzcuMjc5MDcgMy4wOTk5OCA3LjA5OTk5IDMuMjc5MDYgNy4wOTk5OSAzLjQ5OTk4QzcuMDk5OTkgMy43MjA4OSA3LjI3OTA3IDMuODk5OTggNy40OTk5OSAzLjg5OTk4SDE0LjVDMTQuNzIwOSAzLjg5OTk4IDE0LjkgMy43MjA4OSAxNC45IDMuNDk5OThDMTQuOSAzLjI3OTA2IDE0LjcyMDkgMy4wOTk5OCAxNC41IDMuMDk5OThINy40OTk5OVpNNy40OTk5OCA1LjFDNy4yNzkwNyA1LjEgNy4wOTk5OCA1LjI3OTA4IDcuMDk5OTggNS41QzcuMDk5OTggNS43MjA5MSA3LjI3OTA3IDUuOSA3LjQ5OTk4IDUuOUgxNC41QzE0LjcyMDkgNS45IDE0LjkgNS43MjA5MSAxNC45IDUuNUMxNC45IDUuMjc5MDggMTQuNzIwOSA1LjEgMTQuNSA1LjFINy40OTk5OFpNNy4xIDcuNUM3LjEgNy4yNzkwOCA3LjI3OTA5IDcuMSA3LjUgNy4xSDE0LjVDMTQuNzIwOSA3LjEgMTQuOSA3LjI3OTA4IDE0LjkgNy41QzE0LjkgNy43MjA5MSAxNC43MjA5IDcuOSAxNC41IDcuOUg3LjVDNy4yNzkwOSA3LjkgNy4xIDcuNzIwOTEgNy4xIDcuNVpNNy40OTk5OCA5LjFDNy4yNzkwNyA5LjEgNy4wOTk5OCA5LjI3OTA4IDcuMDk5OTggOS41QzcuMDk5OTggOS43MjA5MSA3LjI3OTA3IDkuOSA3LjQ5OTk4IDkuOUgxNC41QzE0LjcyMDkgOS45IDE0LjkgOS43MjA5MSAxNC45IDkuNUMxNC45IDkuMjc5MDggMTQuNzIwOSA5LjEgMTQuNSA5LjFINy40OTk5OFpNNy4wOTk5OCAxMS41QzcuMDk5OTggMTEuMjc5MSA3LjI3OTA3IDExLjEgNy40OTk5OCAxMS4xSDE0LjVDMTQuNzIwOSAxMS4xIDE0LjkgMTEuMjc5MSAxNC45IDExLjVDMTQuOSAxMS43MjA5IDE0LjcyMDkgMTEuOSAxNC41IDExLjlINy40OTk5OEM3LjI3OTA3IDExLjkgNy4wOTk5OCAxMS43MjA5IDcuMDk5OTggMTEuNVpNMi41IDkuMjUwMDNMNSA2LjAwMDAzSDBMMi41IDkuMjUwMDNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxodD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41IDFDNC4yMjM4NiAxIDQgMS4yMjM4NiA0IDEuNUM0IDEuNzc2MTQgNC4yMjM4NiAyIDQuNSAySDEyVjEzSDQuNUM0LjIyMzg2IDEzIDQgMTMuMjIzOSA0IDEzLjVDNCAxMy43NzYxIDQuMjIzODYgMTQgNC41IDE0SDEyQzEyLjU1MjMgMTQgMTMgMTMuNTUyMyAxMyAxM1YyQzEzIDEuNDQ3NzIgMTIuNTUyMyAxIDEyIDFINC41Wk02LjYwMzU1IDQuODk2NDVDNi40MDgyOSA0LjcwMTE4IDYuMDkxNzEgNC43MDExOCA1Ljg5NjQ1IDQuODk2NDVDNS43MDExOCA1LjA5MTcxIDUuNzAxMTggNS40MDgyOSA1Ljg5NjQ1IDUuNjAzNTVMNy4yOTI4OSA3SDAuNUMwLjIyMzg1OCA3IDAgNy4yMjM4NiAwIDcuNUMwIDcuNzc2MTQgMC4yMjM4NTggOCAwLjUgOEg3LjI5Mjg5TDUuODk2NDUgOS4zOTY0NUM1LjcwMTE4IDkuNTkxNzEgNS43MDExOCA5LjkwODI5IDUuODk2NDUgMTAuMTAzNkM2LjA5MTcxIDEwLjI5ODggNi40MDgyOSAxMC4yOTg4IDYuNjAzNTUgMTAuMTAzNkw4Ljg1MzU1IDcuODUzNTVDOS4wNDg4MiA3LjY1ODI5IDkuMDQ4ODIgNy4zNDE3MSA4Ljg1MzU1IDcuMTQ2NDVMNi42MDM1NSA0Ljg5NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZ3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgMi41QzIgMi4yMjM4NiAyLjIyMzg2IDIgMi41IDJINS41QzUuNzc2MTQgMiA2IDIuMjIzODYgNiAyLjVDNiAyLjc3NjE0IDUuNzc2MTQgMyA1LjUgM0gzVjUuNUMzIDUuNzc2MTQgMi43NzYxNCA2IDIuNSA2QzIuMjIzODYgNiAyIDUuNzc2MTQgMiA1LjVWMi41Wk05IDIuNUM5IDIuMjIzODYgOS4yMjM4NiAyIDkuNSAySDEyLjVDMTIuNzc2MSAyIDEzIDIuMjIzODYgMTMgMi41VjUuNUMxMyA1Ljc3NjE0IDEyLjc3NjEgNiAxMi41IDZDMTIuMjIzOSA2IDEyIDUuNzc2MTQgMTIgNS41VjNIOS41QzkuMjIzODYgMyA5IDIuNzc2MTQgOSAyLjVaTTIuNSA5QzIuNzc2MTQgOSAzIDkuMjIzODYgMyA5LjVWMTJINS41QzUuNzc2MTQgMTIgNiAxMi4yMjM5IDYgMTIuNUM2IDEyLjc3NjEgNS43NzYxNCAxMyA1LjUgMTNIMi41QzIuMjIzODYgMTMgMiAxMi43NzYxIDIgMTIuNVY5LjVDMiA5LjIyMzg2IDIuMjIzODYgOSAyLjUgOVpNMTIuNSA5QzEyLjc3NjEgOSAxMyA5LjIyMzg2IDEzIDkuNVYxMi41QzEzIDEyLjc3NjEgMTIuNzc2MSAxMyAxMi41IDEzSDkuNUM5LjIyMzg2IDEzIDkgMTIuNzc2MSA5IDEyLjVDOSAxMi4yMjM5IDkuMjIzODYgMTIgOS41IDEySDEyVjkuNUMxMiA5LjIyMzg2IDEyLjIyMzkgOSAxMi41IDlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx2dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSAyQzAuNDQ3NzE1IDIgMCAyLjQ0NzcyIDAgM1YxMkMwIDEyLjU1MjMgMC40NDc3MTUgMTMgMSAxM0gxNEMxNC41NTIzIDEzIDE1IDEyLjU1MjMgMTUgMTJWM0MxNSAyLjQ0NzcyIDE0LjU1MjMgMiAxNCAySDFaTTEgM0wxNCAzVjMuOTI0OTRDMTMuOTE3NCAzLjkyNDg2IDEzLjgzMzggMy45NDc1MSAxMy43NTg5IDMuOTk1MDVMNy41IDcuOTY3MDNMMS4yNDExMiAzLjk5NTA1QzEuMTY2MjEgMy45NDc1MSAxLjA4MjYgMy45MjQ4NiAxIDMuOTI0OTRWM1pNMSA0LjkwNzk3VjEySDE0VjQuOTA3OTdMNy43NDExMiA4Ljg3OTk1QzcuNTkzOTQgOC45NzMzNSA3LjQwNjA2IDguOTczMzUgNy4yNTg4OCA4Ljg3OTk1TDEgNC45MDc5N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEN0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03Ljk0NzIxIDAuMTY0NTk0QzcuNjY1NjkgMC4wMjM4Mjk5IDcuMzM0MzEgMC4wMjM4MzAyIDcuMDUyNzkgMC4xNjQ1OTRMMC41NTI3ODYgMy40MTQ1OUMwLjIxNDAwMiAzLjU4Mzk5IDAgMy45MzAyNSAwIDQuMzA5MDJWMTJDMCAxMi41NTIzIDAuNDQ3NzE1IDEzIDEgMTNIMTRDMTQuNTUyMyAxMyAxNSAxMi41NTIzIDE1IDEyVjQuMzA5MDJDMTUgMy45MzAyNSAxNC43ODYgMy41ODM5OSAxNC40NDcyIDMuNDE0NTlMNy45NDcyMSAwLjE2NDU5NFpNMTMuNTY4OSA0LjA5MzQ5TDcuNSAxLjA1OTAyTDEuNDMxMDUgNC4wOTM0OUw3LjUgNy4yOTEzNkwxMy41Njg5IDQuMDkzNDlaTTEgNC44ODM2NlYxMkgxNFY0Ljg4MzY2TDcuNzA5NzcgOC4xOTgxM0M3LjU3ODQ4IDguMjY3MzEgNy40MjE1MiA4LjI2NzMxIDcuMjkwMjMgOC4xOTgxM0wxIDQuODgzNjZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxtdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC40NDQ5IDAuNjA4NzY1QzguMDE4MyAtMC4xMDcwMTUgNi45ODE3IC0wLjEwNzAxNSA2LjU1NTA5IDAuNjA4NzY2TDAuMTYxMTc4IDExLjMzNjhDLTAuMjc1ODI0IDEyLjA3IDAuMjUyNTAzIDEzIDEuMTA2MDggMTNIMTMuODkzOUMxNC43NDc1IDEzIDE1LjI3NTggMTIuMDcgMTQuODM4OCAxMS4zMzY4TDguNDQ0OSAwLjYwODc2NVpNNy40MTQxIDEuMTIwNzNDNy40NTI4OCAxLjA1NTY2IDcuNTQ3MTIgMS4wNTU2NiA3LjU4NTkgMS4xMjA3M0wxMy45Nzk4IDExLjg0ODhDMTQuMDE5NiAxMS45MTU0IDEzLjk3MTUgMTIgMTMuODkzOSAxMkgxLjEwNjA4QzEuMDI4NDkgMTIgMC45ODA0NTQgMTEuOTE1NCAxLjAyMDE4IDExLjg0ODhMNy40MTQxIDEuMTIwNzNaTTYuODI2OSA0LjQ4NjExQzYuODEyMjEgNC4xMDQyMyA3LjExNzgzIDMuNzg2NjMgNy41IDMuNzg2NjNDNy44ODIxNyAzLjc4NjYzIDguMTg3NzggNC4xMDQyMyA4LjE3MzEgNC40ODYxMkw4LjAxOTIxIDguNDg3MDFDOC4wMDg0OCA4Ljc2NiA3Ljc3OTIgOC45ODY2NCA3LjUgOC45ODY2NEM3LjIyMDggOC45ODY2NCA2Ljk5MTUxIDguNzY2IDYuOTgwNzggOC40ODcwMUw2LjgyNjkgNC40ODYxMVpNOC4yNDk4OSAxMC40NzZDOC4yNDk4OSAxMC44OTAyIDcuOTE0MSAxMS4yMjYgNy40OTk4OSAxMS4yMjZDNy4wODU2NyAxMS4yMjYgNi43NDk4OSAxMC44OTAyIDYuNzQ5ODkgMTAuNDc2QzYuNzQ5ODkgMTAuMDYxOCA3LjA4NTY3IDkuNzI1OTkgNy40OTk4OSA5LjcyNTk5QzcuOTE0MSA5LjcyNTk5IDguMjQ5ODkgMTAuMDYxOCA4LjI0OTg5IDEwLjQ3NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHd0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDFDMi40NDc3MSAxIDIgMS40NDc3MiAyIDJWMTNDMiAxMy41NTIzIDIuNDQ3NzIgMTQgMyAxNEgxMC41QzEwLjc3NjEgMTQgMTEgMTMuNzc2MSAxMSAxMy41QzExIDEzLjIyMzkgMTAuNzc2MSAxMyAxMC41IDEzSDNWMkwxMC41IDJDMTAuNzc2MSAyIDExIDEuNzc2MTQgMTEgMS41QzExIDEuMjIzODYgMTAuNzc2MSAxIDEwLjUgMUgzWk0xMi42MDM2IDQuODk2NDVDMTIuNDA4MyA0LjcwMTE4IDEyLjA5MTcgNC43MDExOCAxMS44OTY0IDQuODk2NDVDMTEuNzAxMiA1LjA5MTcxIDExLjcwMTIgNS40MDgyOSAxMS44OTY0IDUuNjAzNTVMMTMuMjkyOSA3SDYuNUM2LjIyMzg2IDcgNiA3LjIyMzg2IDYgNy41QzYgNy43NzYxNCA2LjIyMzg2IDggNi41IDhIMTMuMjkyOUwxMS44OTY0IDkuMzk2NDVDMTEuNzAxMiA5LjU5MTcxIDExLjcwMTIgOS45MDgyOSAxMS44OTY0IDEwLjEwMzZDMTIuMDkxNyAxMC4yOTg4IDEyLjQwODMgMTAuMjk4OCAxMi42MDM2IDEwLjEwMzZMMTQuODUzNiA3Ljg1MzU1QzE1LjA0ODggNy42NTgyOSAxNS4wNDg4IDcuMzQxNzEgMTQuODUzNiA3LjE0NjQ1TDEyLjYwMzYgNC44OTY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjUgMkM1Ljc3NjE0IDIgNiAyLjIyMzg2IDYgMi41VjUuNUM2IDUuNzc2MTQgNS43NzYxNCA2IDUuNSA2SDIuNUMyLjIyMzg2IDYgMiA1Ljc3NjE0IDIgNS41QzIgNS4yMjM4NiAyLjIyMzg2IDUgMi41IDVINVYyLjVDNSAyLjIyMzg2IDUuMjIzODYgMiA1LjUgMlpNOS41IDJDOS43NzYxNCAyIDEwIDIuMjIzODYgMTAgMi41VjVIMTIuNUMxMi43NzYxIDUgMTMgNS4yMjM4NiAxMyA1LjVDMTMgNS43NzYxNCAxMi43NzYxIDYgMTIuNSA2SDkuNUM5LjIyMzg2IDYgOSA1Ljc3NjE0IDkgNS41VjIuNUM5IDIuMjIzODYgOS4yMjM4NiAyIDkuNSAyWk0yIDkuNUMyIDkuMjIzODYgMi4yMjM4NiA5IDIuNSA5SDUuNUM1Ljc3NjE0IDkgNiA5LjIyMzg2IDYgOS41VjEyLjVDNiAxMi43NzYxIDUuNzc2MTQgMTMgNS41IDEzQzUuMjIzODYgMTMgNSAxMi43NzYxIDUgMTIuNVYxMEgyLjVDMi4yMjM4NiAxMCAyIDkuNzc2MTQgMiA5LjVaTTkgOS41QzkgOS4yMjM4NiA5LjIyMzg2IDkgOS41IDlIMTIuNUMxMi43NzYxIDkgMTMgOS4yMjM4NiAxMyA5LjVDMTMgOS43NzYxNCAxMi43NzYxIDEwIDEyLjUgMTBIMTBWMTIuNUMxMCAxMi43NzYxIDkuNzc2MTQgMTMgOS41IDEzQzkuMjIzODYgMTMgOSAxMi43NzYxIDkgMTIuNVY5LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMyAyQzIuNDQ3NzIgMiAyIDIuNDQ3NzIgMiAzVjEyQzIgMTIuNTUyMyAyLjQ0NzcyIDEzIDMgMTNIMTJDMTIuNTUyMyAxMyAxMyAxMi41NTIzIDEzIDEyVjguNUMxMyA4LjIyMzg2IDEyLjc3NjEgOCAxMi41IDhDMTIuMjIzOSA4IDEyIDguMjIzODYgMTIgOC41VjEySDNWM0w2LjUgM0M2Ljc3NjE0IDMgNyAyLjc3NjE0IDcgMi41QzcgMi4yMjM4NiA2Ljc3NjE0IDIgNi41IDJIM1pNMTIuODUzNiAyLjE0NjQ1QzEyLjkwMTUgMi4xOTQzOSAxMi45Mzc3IDIuMjQ5NjQgMTIuOTYyMSAyLjMwODYxQzEyLjk4NjEgMi4zNjY2OSAxMi45OTk2IDIuNDMwMyAxMyAyLjQ5N0wxMyAyLjVWMi41MDA0OVY1LjVDMTMgNS43NzYxNCAxMi43NzYxIDYgMTIuNSA2QzEyLjIyMzkgNiAxMiA1Ljc3NjE0IDEyIDUuNVYzLjcwNzExTDYuODUzNTUgOC44NTM1NUM2LjY1ODI5IDkuMDQ4ODIgNi4zNDE3MSA5LjA0ODgyIDYuMTQ2NDUgOC44NTM1NUM1Ljk1MTE4IDguNjU4MjkgNS45NTExOCA4LjM0MTcxIDYuMTQ2NDUgOC4xNDY0NUwxMS4yOTI5IDNIOS41QzkuMjIzODYgMyA5IDIuNzc2MTQgOSAyLjVDOSAyLjIyMzg2IDkuMjIzODYgMiA5LjUgMkgxMi40OTk5SDEyLjVDMTIuNTY3OCAyIDEyLjYzMjQgMi4wMTM0OSAxMi42OTE0IDIuMDM3OTRDMTIuNzUwNCAyLjA2MjM0IDEyLjgwNTYgMi4wOTg1MSAxMi44NTM2IDIuMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQuNzY0OSA2LjA3NTk1QzE0Ljk5OTEgNi4yMjIzMSAxNS4wNzAzIDYuNTMwNzggMTQuOTIzOSA2Ljc2NDk1QzE0LjQ4NDkgNy40Njc0MiAxMy45NjMyIDguMTA2NDQgMTMuMzcwMiA4LjY2MzA0TDE0LjU3MTIgOS44NjQwNUMxNC43NjY0IDEwLjA1OTMgMTQuNzY2NCAxMC4zNzU5IDE0LjU3MTIgMTAuNTcxMkMxNC4zNzU5IDEwLjc2NjQgMTQuMDU5MyAxMC43NjY0IDEzLjg2NDEgMTAuNTcxMkwxMi42MDExIDkuMzA4MTZDMTEuODA0OSA5LjkwMjgyIDEwLjkwODkgMTAuMzYyMSA5LjkzMzc0IDEwLjY1MUwxMC4zODMgMTIuMzI3NkMxMC40NTQ0IDEyLjU5NDQgMTAuMjk2MSAxMi44Njg1IDEwLjAyOTQgMTIuOTRDOS43NjI2NiAxMy4wMTE1IDkuNDg4NSAxMi44NTMyIDkuNDE3MDMgMTIuNTg2NEw4Ljk1OTE2IDEwLjg3NzVDOC40ODc0MiAxMC45NTggOC4wMDAzNSAxMC45OTk5IDcuNSAxMC45OTk5QzYuOTk5NjQgMTAuOTk5OSA2LjUxMjU3IDEwLjk1OCA2LjA0MDgyIDEwLjg3NzVMNS41ODI5OSAxMi41ODY0QzUuNTExNTMgMTIuODUzMiA1LjIzNzM3IDEzLjAxMTUgNC45NzA2MyAxMi45NEM0LjcwMzkgMTIuODY4NSA0LjU0NTYgMTIuNTk0NCA0LjYxNzA2IDEyLjMyNzdMNS4wNjYyNCAxMC42NTFDNC4wOTExMSAxMC4zNjIxIDMuMTk1MDMgOS45MDI4MSAyLjM5ODkgOS4zMDgxNEwxLjEzNTkgMTAuNTcxMUMwLjk0MDYzOCAxMC43NjY0IDAuNjI0MDU4IDEwLjc2NjQgMC40Mjg3OTcgMTAuNTcxMUMwLjIzMzUzNyAxMC4zNzU5IDAuMjMzNTM3IDEwLjA1OTMgMC40Mjg3OTcgOS44NjQwNEwxLjYyOTgyIDguNjYzMDJDMS4wMzY4MiA4LjEwNjQzIDAuNTE1MTEzIDcuNDY3NDIgMC4wNzYwNjc3IDYuNzY0OTVDLTAuMDcwMjg2NyA2LjUzMDc4IDAuMDAwODk4NTQ0IDYuMjIyMzEgMC4yMzUwNjQgNi4wNzU5NUMwLjQ2OTIzIDUuOTI5NiAwLjc3NzcwMyA2LjAwMDc4IDAuOTI0MDU3IDYuMjM0OTVDMS40MDM1NCA3LjAwMjEyIDEuOTg5IDcuNjgwNTYgMi42NjIzMyA4LjI0MjdDMi42NzMxNSA4LjI1MDk2IDIuNjgzNyA4LjI1OTcxIDIuNjkzOTcgOC4yNjg5N0M0LjAwODk3IDkuMzU1MjcgNS42NTUzNiA5Ljk5OTkgNy41IDkuOTk5OUMxMC4zMDc4IDkuOTk5OSAxMi42NTYzIDguNTA2MjkgMTQuMDc1OSA2LjIzNDk1QzE0LjIyMjMgNi4wMDA3OCAxNC41MzA4IDUuOTI5NiAxNC43NjQ5IDYuMDc1OTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxrdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMzUzNiAyLjM1MzU1QzEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDEuODQxNzEgMTMuMzUzNiAxLjY0NjQ1QzEzLjE1ODMgMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTIuNjQ2NCAxLjY0NjQ1TDEwLjY4MjggMy42MTAxMkM5LjcwNjUyIDMuMjE2NzEgOC42Mzc1OSAzIDcuNSAzQzQuMzA3ODYgMyAxLjY1NjM5IDQuNzA2MzggMC4wNzYwMDAyIDcuMjM1MDFDLTAuMDI1MzMzOCA3LjM5NzE1IC0wLjAyNTMzMzQgNy42MDI4OCAwLjA3NjAwMTQgNy43NjUwMUMwLjkwMjk0NSA5LjA4ODEyIDIuMDIzMTQgMTAuMTg2MSAzLjM2MDYxIDEwLjkzMjNMMS42NDY0NSAxMi42NDY0QzEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEzLjE1ODMgMS42NDY0NSAxMy4zNTM2QzEuODQxNzEgMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMi4zNTM1NSAxMy4zNTM2TDQuMzE3MjMgMTEuMzg5OUM1LjI5MzQ4IDExLjc4MzMgNi4zNjI0MSAxMiA3LjUgMTJDMTAuNjkyMSAxMiAxMy4zNDM2IDEwLjI5MzYgMTQuOTI0IDcuNzY1MDFDMTUuMDI1MyA3LjYwMjg4IDE1LjAyNTMgNy4zOTcxNSAxNC45MjQgNy4yMzUwMUMxNC4wOTcxIDUuOTExOSAxMi45NzY5IDQuODEzOTEgMTEuNjM5NCA0LjA2NzcxTDEzLjM1MzYgMi4zNTM1NVpNOS45MDQyOCA0LjM4ODYxQzkuMTUzMzIgNC4xMzYxIDguMzQ3NTkgNCA3LjUgNEM0LjgwMjg1IDQgMi41Mjk1MiA1LjM3ODE2IDEuMDk2MjIgNy41MDAwMUMxLjg3Mjg0IDguNjQ5NyAyLjg5NjA5IDkuNTgxMDYgNC4wOTk3NCAxMC4xOTMxTDkuOTA0MjggNC4zODg2MVpNNS4wOTU3MiAxMC42MTE0TDEwLjkwMDMgNC44MDY4NUMxMi4xMDM5IDUuNDE4OTQgMTMuMTI3MiA2LjM1MDMxIDEzLjkwMzggNy41MDAwMUMxMi40NzA1IDkuNjIxODMgMTAuMTk3MSAxMSA3LjUgMTFDNi42NTI0MSAxMSA1Ljg0NjY4IDEwLjg2MzkgNS4wOTU3MiAxMC42MTE0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sU3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAxMUM0LjgwMjg1IDExIDIuNTI5NTIgOS42MjE4NCAxLjA5NjIyIDcuNTAwMDFDMi41Mjk1MiA1LjM3ODE2IDQuODAyODUgNCA3LjUgNEMxMC4xOTcxIDQgMTIuNDcwNSA1LjM3ODE2IDEzLjkwMzggNy41MDAwMUMxMi40NzA1IDkuNjIxODMgMTAuMTk3MSAxMSA3LjUgMTFaTTcuNSAzQzQuMzA3ODYgMyAxLjY1NjM5IDQuNzA2MzggMC4wNzYwMDAyIDcuMjM1MDFDLTAuMDI1MzMzOCA3LjM5NzE1IC0wLjAyNTMzMzQgNy42MDI4OCAwLjA3NjAwMTQgNy43NjUwMUMxLjY1NjM5IDEwLjI5MzYgNC4zMDc4NiAxMiA3LjUgMTJDMTAuNjkyMSAxMiAxMy4zNDM2IDEwLjI5MzYgMTQuOTI0IDcuNzY1MDFDMTUuMDI1MyA3LjYwMjg4IDE1LjAyNTMgNy4zOTcxNSAxNC45MjQgNy4yMzUwMUMxMy4zNDM2IDQuNzA2MzggMTAuNjkyMSAzIDcuNSAzWk03LjUgOS41QzguNjA0NTcgOS41IDkuNSA4LjYwNDU3IDkuNSA3LjVDOS41IDYuMzk1NDMgOC42MDQ1NyA1LjUgNy41IDUuNUM2LjM5NTQzIDUuNSA1LjUgNi4zOTU0MyA1LjUgNy41QzUuNSA4LjYwNDU3IDYuMzk1NDMgOS41IDcuNSA5LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxPdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3Njg5MkMzLjg0MjIyIDAuODc2ODkyIDAuODc3MDc1IDMuODQyMDQgMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAxMS4xNTc0IDMuODQyMjIgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMTEuMTU3NiAxNC4xMjI2IDE0LjEyMjcgMTEuMTU3NCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAzLjg0MjA0IDExLjE1NzYgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MlpNMS44MjcwOCA3LjQ5OTcyQzEuODI3MDggNC4zNjY3MSA0LjM2Njg5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5QzEwLjYzMjkgMS44MjY4OSAxMy4xNzI3IDQuMzY2NzEgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgMTAuNjMyNyAxMC42MzI5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzQuMzY2ODkgMTMuMTcyNiAxLjgyNzA4IDEwLjYzMjcgMS44MjcwOCA3LjQ5OTcyWk01LjAzNzQ3IDkuMjEzOTVDNC44Nzk0OSA4Ljk4NzQ2IDQuNTY3ODIgOC45MzE5MyA0LjM0MTMzIDkuMDg5OTFDNC4xMTQ4NCA5LjI0Nzg5IDQuMDU5MzEgOS41NTk1NiA0LjIxNzI5IDkuNzg2MDVDNC45MzkyNiAxMC44MjExIDYuMTQwMzMgMTEuNSA3LjUwMDA0IDExLjVDOC44NTk3NCAxMS41IDEwLjA2MDggMTAuODIxMSAxMC43ODI4IDkuNzg2MDVDMTAuOTQwOCA5LjU1OTU2IDEwLjg4NTIgOS4yNDc4OSAxMC42NTg3IDkuMDg5OTFDMTAuNDMyMyA4LjkzMTkzIDEwLjEyMDYgOC45ODc0NiA5Ljk2MjYgOS4yMTM5NUM5LjQxOTYzIDkuOTkyMzggOC41MTkwNyAxMC41IDcuNTAwMDQgMTAuNUM2LjQ4MSAxMC41IDUuNTgwNDQgOS45OTIzOCA1LjAzNzQ3IDkuMjEzOTVaTTUuMzc1MDMgNi44NDk5OEM1Ljg1ODI4IDYuODQ5OTggNi4yNTAwMyA2LjQ1ODE1IDYuMjUwMDMgNS45NzQ5OEM2LjI1MDAzIDUuNDkxOCA1Ljg1ODI4IDUuMDk5OTggNS4zNzUwMyA1LjA5OTk4QzQuODkxNzkgNS4wOTk5OCA0LjUwMDAzIDUuNDkxOCA0LjUwMDAzIDUuOTc0OThDNC41MDAwMyA2LjQ1ODE1IDQuODkxNzkgNi44NDk5OCA1LjM3NTAzIDYuODQ5OThaTTEwLjUgNS45NzQ5OEMxMC41IDYuNDU4MTUgMTAuMTA4MyA2Ljg0OTk4IDkuNjI1MDMgNi44NDk5OEM5LjE0MTc5IDYuODQ5OTggOC43NTAwMyA2LjQ1ODE1IDguNzUwMDMgNS45NzQ5OEM4Ljc1MDAzIDUuNDkxOCA5LjE0MTc5IDUuMDk5OTggOS42MjUwMyA1LjA5OTk4QzEwLjEwODMgNS4wOTk5OCAxMC41IDUuNDkxOCAxMC41IDUuOTc0OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxNdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4wMDAwNSAyLjA0OTk5SDUuNTI1MDVDNC43MTA0MyAyLjA0OTk5IDQuMDUwMDUgMi43MTAzNyA0LjA1MDA1IDMuNTI0OTlDNC4wNTAwNSA0LjMzOTYxIDQuNzEwNDMgNC45OTk5OSA1LjUyNTA1IDQuOTk5OTlINy4wMDAwNVYyLjA0OTk5Wk03LjAwMDA1IDEuMDQ5OTlIOC4wMDAwNUg5LjQ3NTA1QzEwLjg0MiAxLjA0OTk5IDExLjk1IDIuMTU4MDggMTEuOTUgMy41MjQ5OUMxMS45NSA0LjMzMTYzIDExLjU2NDIgNS4wNDgxNSAxMC45NjY5IDUuNDk5OTlDMTEuNTY0MiA1Ljk1MTg0IDExLjk1IDYuNjY4MzYgMTEuOTUgNy40NzVDMTEuOTUgOC44NDE5IDEwLjg0MiA5Ljk1IDkuNDc1MDUgOS45NUM4LjkyMjM2IDkuOTUgOC40MTE5OCA5Ljc2ODg0IDguMDAwMDUgOS40NjI2NlY5Ljk1TDguMDAwMDUgMTEuNDI1QzguMDAwMDUgMTIuNzkxOSA2Ljg5MTk1IDEzLjkgNS41MjUwNSAxMy45QzQuMTU4MTQgMTMuOSAzLjA1MDA1IDEyLjc5MTkgMy4wNTAwNSAxMS40MjVDMy4wNTAwNSAxMC42MTgzIDMuNDM1OTMgOS45MDE4NCA0LjAzMzE3IDkuNDQ5OTlDMy40MzU5MyA4Ljk5ODE0IDMuMDUwMDUgOC4yODE2MyAzLjA1MDA1IDcuNDc1QzMuMDUwMDUgNi42NjgzNiAzLjQzNTk0IDUuOTUxODQgNC4wMzMxOSA1LjVDMy40MzU5NCA1LjA0ODE1IDMuMDUwMDUgNC4zMzE2MyAzLjA1MDA1IDMuNTI0OTlDMy4wNTAwNSAyLjE1ODA4IDQuMTU4MTQgMS4wNDk5OSA1LjUyNTA1IDEuMDQ5OTlINy4wMDAwNVpNOC4wMDAwNSAyLjA0OTk5VjQuOTk5OTlIOS40NzUwNUMxMC4yODk3IDQuOTk5OTkgMTAuOTUgNC4zMzk2MSAxMC45NSAzLjUyNDk5QzEwLjk1IDIuNzEwMzcgMTAuMjg5NyAyLjA0OTk5IDkuNDc1MDUgMi4wNDk5OUg4LjAwMDA1Wk01LjUyNTA1IDguOTQ5OThINy4wMDAwNUw3LjAwMDA1IDcuNDc4OEw3LjAwMDA1IDcuNDc1TDcuMDAwMDUgNy40NzEyVjZINS41MjUwNUM0LjcxMDQzIDYgNC4wNTAwNSA2LjY2MDM4IDQuMDUwMDUgNy40NzVDNC4wNTAwNSA4LjI4NzY3IDQuNzA3MjcgOC45NDY4NCA1LjUxOTIgOC45NDk5OUw1LjUyNTA1IDguOTQ5OThaTTQuMDUwMDUgMTEuNDI1QzQuMDUwMDUgMTAuNjEyMyA0LjcwNzI3IDkuOTUzMTUgNS41MTkyIDkuOTQ5OTlMNS41MjUwNSA5Ljk1SDcuMDAwMDVMNy4wMDAwNSAxMS40MjVDNy4wMDAwNSAxMi4yMzk2IDYuMzM5NjcgMTIuOSA1LjUyNTA1IDEyLjlDNC43MTA0MyAxMi45IDQuMDUwMDUgMTIuMjM5NiA0LjA1MDA1IDExLjQyNVpNOC4wMDAwNSA3LjQ3MjA2QzguMDAxNjQgNi42NTg3OSA4LjY2MTQxIDYgOS40NzUwNSA2QzEwLjI4OTcgNiAxMC45NSA2LjY2MDM4IDEwLjk1IDcuNDc1QzEwLjk1IDguMjg5NjIgMTAuMjg5NyA4Ljk1IDkuNDc1MDUgOC45NUM4LjY2MTQxIDguOTUgOC4wMDE2NCA4LjI5MTIxIDguMDAwMDUgNy40Nzc5NFY3LjQ3MjA2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNSAyQzMuMjIzODYgMiAzIDIuMjIzODYgMyAyLjVWMTIuNUMzIDEyLjc3NjEgMy4yMjM4NiAxMyAzLjUgMTNIMTEuNUMxMS43NzYxIDEzIDEyIDEyLjc3NjEgMTIgMTIuNVY2SDguNUM4LjIyMzg2IDYgOCA1Ljc3NjE0IDggNS41VjJIMy41Wk05IDIuNzA3MTFMMTEuMjkyOSA1SDlWMi43MDcxMVpNMiAyLjVDMiAxLjY3MTU3IDIuNjcxNTcgMSAzLjUgMUg4LjVDOC42MzI2MSAxIDguNzU5NzkgMS4wNTI2OCA4Ljg1MzU1IDEuMTQ2NDVMMTIuODUzNiA1LjE0NjQ1QzEyLjk0NzMgNS4yNDAyMSAxMyA1LjM2NzM5IDEzIDUuNVYxMi41QzEzIDEzLjMyODQgMTIuMzI4NCAxNCAxMS41IDE0SDMuNUMyLjY3MTU3IDE0IDIgMTMuMzI4NCAyIDEyLjVWMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sX3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgMi41QzMgMi4yMjM4NiAzLjIyMzg2IDIgMy41IDJIOS4yOTI4OUwxMiA0LjcwNzExVjEyLjVDMTIgMTIuNzc2MSAxMS43NzYxIDEzIDExLjUgMTNIMy41QzMuMjIzODYgMTMgMyAxMi43NzYxIDMgMTIuNVYyLjVaTTMuNSAxQzIuNjcxNTcgMSAyIDEuNjcxNTcgMiAyLjVWMTIuNUMyIDEzLjMyODQgMi42NzE1NyAxNCAzLjUgMTRIMTEuNUMxMi4zMjg0IDE0IDEzIDEzLjMyODQgMTMgMTIuNVY0LjYwMzU1QzEzIDQuNDA0NjQgMTIuOTIxIDQuMjEzODggMTIuNzgwMyA0LjA3MzIyTDkuODUzNTUgMS4xNDY0NUM5Ljc1OTc5IDEuMDUyNjggOS42MzI2MSAxIDkuNSAxSDMuNVpNNS4yNSA3QzQuOTczODYgNyA0Ljc1IDcuMjIzODYgNC43NSA3LjVDNC43NSA3Ljc3NjE0IDQuOTczODYgOCA1LjI1IDhIOS43NUMxMC4wMjYxIDggMTAuMjUgNy43NzYxNCAxMC4yNSA3LjVDMTAuMjUgNy4yMjM4NiAxMC4wMjYxIDcgOS43NSA3SDUuMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDJDMy4yMjM4NiAyIDMgMi4yMjM4NiAzIDIuNVYxMi41QzMgMTIuNzc2MSAzLjIyMzg2IDEzIDMuNSAxM0gxMS41QzExLjc3NjEgMTMgMTIgMTIuNzc2MSAxMiAxMi41VjQuNzA3MTFMOS4yOTI4OSAySDMuNVpNMiAyLjVDMiAxLjY3MTU3IDIuNjcxNTcgMSAzLjUgMUg5LjVDOS42MzI2MSAxIDkuNzU5NzkgMS4wNTI2OCA5Ljg1MzU1IDEuMTQ2NDVMMTIuNzgwMyA0LjA3MzIyQzEyLjkyMSA0LjIxMzg4IDEzIDQuNDA0NjQgMTMgNC42MDM1NVYxMi41QzEzIDEzLjMyODQgMTIuMzI4NCAxNCAxMS41IDE0SDMuNUMyLjY3MTU3IDE0IDIgMTMuMzI4NCAyIDEyLjVWMi41Wk00Ljc1IDcuNUM0Ljc1IDcuMjIzODYgNC45NzM4NiA3IDUuMjUgN0g3VjUuMjVDNyA0Ljk3Mzg2IDcuMjIzODYgNC43NSA3LjUgNC43NUM3Ljc3NjE0IDQuNzUgOCA0Ljk3Mzg2IDggNS4yNVY3SDkuNzVDMTAuMDI2MSA3IDEwLjI1IDcuMjIzODYgMTAuMjUgNy41QzEwLjI1IDcuNzc2MTQgMTAuMDI2MSA4IDkuNzUgOEg4VjkuNzVDOCAxMC4wMjYxIDcuNzc2MTQgMTAuMjUgNy41IDEwLjI1QzcuMjIzODYgMTAuMjUgNyAxMC4wMjYxIDcgOS43NVY4SDUuMjVDNC45NzM4NiA4IDQuNzUgNy43NzYxNCA0Ljc1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEV0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDIuNUMzIDIuMjIzODYgMy4yMjM4NiAyIDMuNSAySDkuMDg1NzlDOS4yMTgzOSAyIDkuMzQ1NTcgMi4wNTI2OCA5LjQzOTM0IDIuMTQ2NDVMMTEuODUzNiA0LjU2MDY2QzExLjk0NzMgNC42NTQ0MyAxMiA0Ljc4MTYxIDEyIDQuOTE0MjFWMTIuNUMxMiAxMi43NzYxIDExLjc3NjEgMTMgMTEuNSAxM0gzLjVDMy4yMjM4NiAxMyAzIDEyLjc3NjEgMyAxMi41VjIuNVpNMy41IDFDMi42NzE1NyAxIDIgMS42NzE1NyAyIDIuNVYxMi41QzIgMTMuMzI4NCAyLjY3MTU3IDE0IDMuNSAxNEgxMS41QzEyLjMyODQgMTQgMTMgMTMuMzI4NCAxMyAxMi41VjQuOTE0MjFDMTMgNC41MTYzOSAxMi44NDIgNC4xMzQ4NiAxMi41NjA3IDMuODUzNTVMMTAuMTQ2NCAxLjQzOTM0QzkuODY1MTQgMS4xNTgwNCA5LjQ4MzYxIDEgOS4wODU3OSAxSDMuNVpNNC41IDRDNC4yMjM4NiA0IDQgNC4yMjM4NiA0IDQuNUM0IDQuNzc2MTQgNC4yMjM4NiA1IDQuNSA1SDcuNUM3Ljc3NjE0IDUgOCA0Ljc3NjE0IDggNC41QzggNC4yMjM4NiA3Ljc3NjE0IDQgNy41IDRINC41Wk00LjUgN0M0LjIyMzg2IDcgNCA3LjIyMzg2IDQgNy41QzQgNy43NzYxNCA0LjIyMzg2IDggNC41IDhIMTAuNUMxMC43NzYxIDggMTEgNy43NzYxNCAxMSA3LjVDMTEgNy4yMjM4NiAxMC43NzYxIDcgMTAuNSA3SDQuNVpNNC41IDEwQzQuMjIzODYgMTAgNCAxMC4yMjM5IDQgMTAuNUM0IDEwLjc3NjEgNC4yMjM4NiAxMSA0LjUgMTFIMTAuNUMxMC43NzYxIDExIDExIDEwLjc3NjEgMTEgMTAuNUMxMSAxMC4yMjM5IDEwLjc3NjEgMTAgMTAuNSAxMEg0LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxqdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS4xMDUwNSAxMkM0LjcwODA1IDEyIDQuNDIzNiAxMS45MTIgNC4yNTE3MSAxMS43MzZDNC4wODM5IDExLjU1NTkgNCAxMS4yNzE1IDQgMTAuODgyN1Y0LjExNzMzQzQgMy43MjAzMyA0LjA4NTk1IDMuNDM1ODggNC4yNTc4NCAzLjI2Mzk4QzQuNDMzODMgMy4wODc5OSA0LjcxNjIzIDMgNS4xMDUwNSAzQzYuNDI3NDEgMyA4LjI1NTkxIDMgOS4wMjg1MiAzQzEwLjEzNzMgMyAxMS4wNTM5IDMuOTgxNTMgMTEuMDUzOSA1LjE4NDZDMTEuMDUzOSA2LjA4NTAxIDEwLjYwMzcgNi44MTg1NSA5LjcwMzI3IDcuMjM2MDJDMTAuODY1NyA3LjQ0ODUxIDExLjUxNzYgOC42Mjc4NyAxMS41MTc2IDkuNDgxMjhDMTEuNTE3NiAxMC41MTI1IDEwLjk5MDIgMTIgOS4yNzczNCAxMkM4Ljc3NzQyIDEyIDYuNDI2MjYgMTIgNS4xMDUwNSAxMlpNOC4zNzg5MSA4LjAwMzQxSDUuOFYxMC42MzFIOC4zNzg5MUM4LjkgMTAuNjMxIDkuNjI5NiAxMC4xMjExIDkuNjI5NiA5LjI5ODc3QzkuNjI5NiA4LjQ3NjQzIDguOSA4LjAwMzQxIDguMzc4OTEgOC4wMDM0MVpNNS44IDQuMzY5MDNWNi42OTU3N0g4LjE3OTY5QzguNTM5MDYgNi42OTU3NyA5LjI3NzM0IDYuMzU5MzkgOS4yNzczNCA1LjUwMDAyQzkuMjc3MzQgNC42NDA2NCA4LjQ4MDQ3IDQuMzY5MDMgOC4xNzk2OSA0LjM2OTAzSDUuOFpcIixmaWxsOm59KSl9LFJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjUgNC41QzIuNSAzLjA5ODg2IDMuNTk4ODYgMiA1IDJIMTIuNDk5QzEyLjc3NTIgMiAxMyAyLjIyMzg2IDEzIDIuNUMxMyAyLjc3NjE0IDEyLjc3NjEgMyAxMi41IDNIOC42OTI0NEw4LjQwNTA5IDMuODU0NThDOC4xODg2OSA0LjQ5NzUyIDcuODk0MDEgNS4zNzE5NyA3LjU4MDkxIDYuMjk3OTRDNy41MDI1OSA2LjUyOTU2IDcuNDIzMDggNi43NjQ1MyA3LjM0MzMyIDdIOC41QzguNzc2MTQgNyA5IDcuMjIzODYgOSA3LjVDOSA3Ljc3NjE0IDguNzc2MTQgOCA4LjUgOEg3LjAwNDA3QzYuNTY3MjQgOS4yODU0MyA2LjE2NDM1IDEwLjQ2MTMgNS45NTc5OSAxMS4wMzg2QzUuNjM2MjcgMTEuOTM4NiA1LjIwNzEyIDEyLjQ4NTcgNC42Njc0MSAxMi43Nzc4QzQuMTYzMzUgMTMuMDUwNyAzLjY0MTU0IDEzLjA1MDMgMy4yODM3OCAxMy4wNUwzLjI1IDEzLjA1QzIuOTQ2MjQgMTMuMDUgMi43IDEyLjgwMzcgMi43IDEyLjVDMi43IDEyLjE5NjIgMi45NDYyNCAxMS45NSAzLjI1IDExLjk1QzMuNjQxODIgMTEuOTUgMy45MDM1IDExLjk0MDUgNC4xNDM3NCAxMS44MTA1QzQuMzY0NDMgMTEuNjkxIDQuNjU1MzIgMTEuNDE0OCA0LjkyMjE3IDEwLjY2ODNDNS4xMDY5NSAxMC4xNTE0IDUuNDUzNzUgOS4xNDEzNCA1Ljg0MjIgOEg0LjVDNC4yMjM4NiA4IDQgNy43NzYxNCA0IDcuNUM0IDcuMjIzODYgNC4yMjM4NiA3IDQuNSA3SDYuMTgxODdDNi4zMDEyNyA2LjY0Nzg1IDYuNDIxMzIgNi4yOTMyMyA2LjUzODg3IDUuOTQ1NTlDNi44NTE3NSA1LjAyMDI1IDcuMTQ2MjcgNC4xNDYzMSA3LjM2MjU2IDMuNTAzNjhMNy41MzE5MiAzSDVDNC4xNTExNCAzIDMuNSAzLjY1MTE0IDMuNSA0LjVDMy41IDQuNzc2MTQgMy4yNzYxNCA1IDMgNUMyLjcyMzg2IDUgMi41IDQuNzc2MTQgMi41IDQuNVpcIixmaWxsOm59KSl9LEl0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjY3NDk0IDMuNTAwMTdDNS42NzQ5NCAzLjI1MTY0IDUuODc2NDEgMy4wNTAxNyA2LjEyNDk0IDMuMDUwMTdIMTAuNjI0OUMxMC44NzM1IDMuMDUwMTcgMTEuMDc0OSAzLjI1MTY0IDExLjA3NDkgMy41MDAxN0MxMS4wNzQ5IDMuNzQ4NyAxMC44NzM1IDMuOTUwMTcgMTAuNjI0OSAzLjk1MDE3SDkuMDA1ODdMNy4yMzA5IDExLjA1SDguODc0OTNDOS4xMjM0NSAxMS4wNSA5LjMyNDkzIDExLjI1MTUgOS4zMjQ5MyAxMS41QzkuMzI0OTMgMTEuNzQ4NiA5LjEyMzQ1IDExLjk1IDguODc0OTMgMTEuOTVINC4zNzQ5M0M0LjEyNjQgMTEuOTUgMy45MjQ5MyAxMS43NDg2IDMuOTI0OTMgMTEuNUMzLjkyNDkzIDExLjI1MTUgNC4xMjY0IDExLjA1IDQuMzc0OTMgMTEuMDVINS45OTM5N0w3Ljc2ODk0IDMuOTUwMTdINi4xMjQ5NEM1Ljg3NjQxIDMuOTUwMTcgNS42NzQ5NCAzLjc0ODcgNS42NzQ5NCAzLjUwMDE3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNzk5OTMgMy41MDAxN0M0Ljc5OTkzIDMuMjUxNjQgNS4wMDE0IDMuMDUwMTcgNS4yNDk5MyAzLjA1MDE3SDkuNzQ5OTNDOS45OTg0NSAzLjA1MDE3IDEwLjE5OTkgMy4yNTE2NCAxMC4xOTk5IDMuNTAwMTdDMTAuMTk5OSAzLjc0ODcgOS45OTg0NSAzLjk1MDE3IDkuNzQ5OTMgMy45NTAxN0g4LjA5OTkzVjExLjA1SDkuNzQ5OTRDOS45OTg0NyAxMS4wNSAxMC4xOTk5IDExLjI1MTUgMTAuMTk5OSAxMS41QzEwLjE5OTkgMTEuNzQ4NiA5Ljk5ODQ3IDExLjk1IDkuNzQ5OTQgMTEuOTVINS4yNDk5NEM1LjAwMTQxIDExLjk1IDQuNzk5OTQgMTEuNzQ4NiA0Ljc5OTk0IDExLjVDNC43OTk5NCAxMS4yNTE1IDUuMDAxNDEgMTEuMDUgNS4yNDk5NCAxMS4wNUg2Ljg5OTkzVjMuOTUwMTdINS4yNDk5M0M1LjAwMTQgMy45NTAxNyA0Ljc5OTkzIDMuNzQ4NyA0Ljc5OTkzIDMuNTAwMTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi43ODIzMyAyLjIxNzA3QzIuNzA3MzIgMi4xNDIwNiAyLjYwNTU3IDIuMDk5OTEgMi40OTk0OSAyLjA5OTkxQzIuMzkzNCAyLjA5OTkxIDIuMjkxNjYgMi4xNDIwNiAyLjIxNjY0IDIuMjE3MDdMMC4yMTY2NDUgNC4yMTcwN0MwLjA2MDQzNTEgNC4zNzMyOCAwLjA2MDQzNTEgNC42MjY1NSAwLjIxNjY0NSA0Ljc4Mjc2QzAuMzcyODU1IDQuOTM4OTcgMC42MjYxMjEgNC45Mzg5NyAwLjc4MjMzIDQuNzgyNzZMMi4wOTk0OSAzLjQ2NTZMMi4wOTk0OSAxMS41MzQyTDAuNzgyMzMgMTAuMjE3MUMwLjYyNjEyIDEwLjA2MDkgMC4zNzI4NTQgMTAuMDYwOSAwLjIxNjY0NSAxMC4yMTcxQzAuMDYwNDM0OSAxMC4zNzMzIDAuMDYwNDM0OSAxMC42MjY1IDAuMjE2NjQ1IDEwLjc4MjhMMi4yMTY2NCAxMi43ODI4QzIuMjkxNjYgMTIuODU3OCAyLjM5MzQgMTIuODk5OSAyLjQ5OTQ5IDEyLjg5OTlDMi42MDU1NyAxMi44OTk5IDIuNzA3MzEgMTIuODU3OCAyLjc4MjMzIDEyLjc4MjhMNC43ODIzMyAxMC43ODI4QzQuOTM4NTQgMTAuNjI2NSA0LjkzODU0IDEwLjM3MzMgNC43ODIzMyAxMC4yMTcxQzQuNjI2MTIgMTAuMDYwOSA0LjM3Mjg1IDEwLjA2MDkgNC4yMTY2NCAxMC4yMTcxTDIuODk5NDkgMTEuNTM0MkwyLjg5OTQ5IDMuNDY1Nkw0LjIxNjY0IDQuNzgyNzZDNC4zNzI4NSA0LjkzODk3IDQuNjI2MTIgNC45Mzg5NyA0Ljc4MjMzIDQuNzgyNzZDNC45Mzg1NCA0LjYyNjU1IDQuOTM4NTQgNC4zNzMyOCA0Ljc4MjMzIDQuMjE3MDdMMi43ODIzMyAyLjIxNzA3Wk0xMC41IDIuNzQ5OTdDMTAuNzEwNyAyLjc0OTk3IDEwLjg5ODggMi44ODIxMSAxMC45NzAzIDMuMDgwMzZMMTMuOTcwMyAxMS4zOTk5QzE0LjA2NCAxMS42NTk3IDEzLjkyOTMgMTEuOTQ2MiAxMy42Njk2IDEyLjAzOTlDMTMuNDA5OCAxMi4xMzM2IDEzLjEyMzMgMTEuOTk4OSAxMy4wMjk2IDExLjczOTJMMTIuMDQ3NyA5LjAxNkg4Ljk1MjI4TDcuOTcwMzMgMTEuNzM5MkM3Ljg3NjY2IDExLjk5ODkgNy41OTAxMyAxMi4xMzM2IDcuMzMwMzYgMTIuMDM5OUM3LjA3MDU5IDExLjk0NjIgNi45MzU5NSAxMS42NTk3IDcuMDI5NjIgMTEuMzk5OUwxMC4wMjk2IDMuMDgwMzZDMTAuMTAxMSAyLjg4MjExIDEwLjI4OTIgMi43NDk5NyAxMC41IDIuNzQ5OTdaTTEwLjUgNC43MjM5NkwxMS43NDEyIDguMTY2SDkuMjU4NzlMMTAuNSA0LjcyMzk2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuMDM3OTEgOS45ODA3NUMwLjkzNDc3NyA5LjY1ODMgMS4xMTYwMyA5LjM3NzE5IDEuNDAwMDUgOS4yNDg3MUMxLjY4NDA4IDkuMTIwMjIgMi4wOTQ2MyA5LjEzNDEyIDIuMjcwNzEgOS40NTQyNkMyLjg1MzkzIDEwLjUxNDcgMy42NDU5OSAxMC43MjgyIDQuNDg2NjUgMTAuNzI4MkM1LjUyNzIxIDEwLjcyODIgNi4yOTY1OSAxMC4yNjE1IDYuMjk2NTkgOS40NTQyNkM2LjI5NjU5IDguODA0NyA1LjkxMTkgOC40NjQxNiA0Ljg3MTM0IDguMTQyNTNMNC4xNTg3MiA3LjkyMTgxQzIuNjQ1MTggNy40NDg4MyAxLjg4ODQyIDYuNjkyMDYgMS44ODg0MiA1LjQ1NjAxQzEuODg4NDIgMy43OTc0MyAzLjI3NTgzIDIuNjg3NSA1LjI0MzQyIDIuNjg3NUM2LjkxNzMzIDIuNjg3NSA3Ljk3NDA5IDMuMzM1MzYgOC40MzgzMyA0LjMxMDY1QzguNTcwODcgNC41ODkwOSA4LjU3NjE0IDQuOTEyOTQgOC4yMjc5NCA1LjE5MTE0QzcuODc5NzQgNS40NjkzNCA3LjUyMzUxIDUuMzQ3OTkgNy4yMzMyNyA1LjAzODM5QzYuNDcyMTUgNC4yMjY1MyA1Ljk5NTQ1IDQuMDQ5NjggNS4yNTYwNCA0LjA0OTY4QzQuMTM5OCA0LjA0OTY4IDMuNTQ3IDQuNjM2MTggMy41NDcgNS4yNzk0M0MzLjU0NyA1Ljg2NTkyIDMuOTYzMjIgNi4yMzE2OSA0Ljk0NzAyIDYuNTM0NEw1LjY3ODU2IDYuNzYxNDNDNy4yMjk5NCA3LjIzNDQxIDcuOTc0MDkgNy45NTk2NCA3Ljk3NDA5IDkuMTcwNDdDNy45NzQwOSAxMC43NzIzIDYuNjkzODkgMTIuMDkwMyA0LjQ2MTQzIDEyLjA5MDNDMi44NjYxMiAxMi4wOTAzIDEuNDAwMDUgMTEuMTEzMSAxLjAzNzkxIDkuOTgwNzVaTTExLjg0OTEgOC43Nzk4NUMxMC42NjEgOC4zOTU0MyAxMC4xNjQ5IDcuODYxMTQgMTAuMTY0OSA2Ljk4ODA1QzEwLjE2NDkgNS44NjczNiAxMS4xNjM2IDUuMDQ2MzkgMTIuNjEyOCA1LjA0NjM5QzEzLjg1NDYgNS4wNDYzOSAxNC42NjI5IDUuNjMzNDUgMTQuOTc3OCA2LjYzNDZDMTUuMDQ0MyA2Ljg0NTk5IDE0Ljk1OTMgNi45ODAwNiAxNC43NDc1IDcuMDQ5MUMxNC41Mzk0IDcuMTE2OTcgMTQuMzE3NiA3LjA5OTc0IDE0LjIzOCA2Ljg5NjExQzEzLjkzNTYgNi4xMjI3MyAxMy4zNTIgNS43NjMxMSAxMi41OTk4IDUuNzYzMTFDMTEuNjQ2NyA1Ljc2MzExIDExLjAxMzUgNi4yNTE3OCAxMS4wMTM1IDYuOTE2MzhDMTEuMDEzNSA3LjQ1MDY2IDExLjM0NjQgNy43NTAzOCAxMi4yNDczIDguMDQzNThMMTIuODM0OCA4LjIzMjU0QzE0LjA2MiA4LjYyOTk5IDE0LjU1MTYgOS4xMzgyMSAxNC41NTE2IDEwLjAxNzhDMTQuNTUxNiAxMS4xOTcyIDEzLjQ4MSAxMi4wNDQyIDExLjk5MjcgMTIuMDQ0MkMxMC42NDM5IDEyLjA0NDIgOS42NTY0NCAxMS4yODA5IDkuNDE5NzkgMTAuMzM2MUM5LjM2NTM1IDEwLjExODggOS40MTE5MiAxMC4wMjg3IDkuNzAwMzkgOS45NjE4NEM5Ljk4ODg2IDkuODk0OTkgMTAuMDcxNCA5Ljg5OTE4IDEwLjE3MTUgMTAuMTM2OUMxMC40NTU1IDEwLjgxMTQgMTEuMTUzMSAxMS4zMjc1IDEyLjAzMTggMTEuMzI3NUMxMi45OTE0IDExLjMyNzUgMTMuNjgzNCAxMC43ODAyIDEzLjY4MzQgMTAuMDYzNEMxMy42ODM0IDkuNTM1NjcgMTMuMzk2MSA5LjI4ODA3IDEyLjQzNjYgOC45NzUzMkwxMS44NDkxIDguNzc5ODVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxUdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEgMS41QzExIDEuMjIzODYgMTAuNzc2MSAxIDEwLjUgMUMxMC4yMjM5IDEgMTAgMS4yMjM4NiAxMCAxLjVWNEg1VjEuNUM1IDEuMjIzODYgNC43NzYxNCAxIDQuNSAxQzQuMjIzODYgMSA0IDEuMjIzODYgNCAxLjVWNEgxLjVDMS4yMjM4NiA0IDEgNC4yMjM4NiAxIDQuNUMxIDQuNzc2MTQgMS4yMjM4NiA1IDEuNSA1SDRWMTBIMS41QzEuMjIzODYgMTAgMSAxMC4yMjM5IDEgMTAuNUMxIDEwLjc3NjEgMS4yMjM4NiAxMSAxLjUgMTFINFYxMy41QzQgMTMuNzc2MSA0LjIyMzg2IDE0IDQuNSAxNEM0Ljc3NjE0IDE0IDUgMTMuNzc2MSA1IDEzLjVWMTFIMTBWMTMuNUMxMCAxMy43NzYxIDEwLjIyMzkgMTQgMTAuNSAxNEMxMC43NzYxIDE0IDExIDEzLjc3NjEgMTEgMTMuNVYxMUgxMy41QzEzLjc3NjEgMTEgMTQgMTAuNzc2MSAxNCAxMC41QzE0IDEwLjIyMzkgMTMuNzc2MSAxMCAxMy41IDEwSDExVjVIMTMuNUMxMy43NzYxIDUgMTQgNC43NzYxNCAxNCA0LjVDMTQgNC4yMjM4NiAxMy43NzYxIDQgMTMuNSA0SDExVjEuNVpNMTAgMTBWNUg1VjEwSDEwWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMzgyNSAxLjI5NTY3QzMuNDYyNDEgMS4xMTQzMiAzLjY0MTg4IDAuOTk3Mjg0IDMuODQwMDUgMC45OTcyODRIMTEuNUMxMS43NzYxIDAuOTk3Mjg0IDEyIDEuMjIxMTQgMTIgMS40OTcyOFY1LjVDMTIgNS43NzYxNCAxMS43NzYxIDYgMTEuNSA2SDguNjM1MjFMMTEuNTI4OCA5LjE2MjQ3QzExLjY2MjYgOS4zMDg3IDExLjY5NzQgOS41MjAxNSAxMS42MTc1IDkuNzAxNTRDMTEuNTM3NiA5Ljg4MjkzIDExLjM1ODIgMTAgMTEuMTYgMTBIOFYxMy41QzggMTMuNzAyMiA3Ljg3ODE4IDEzLjg4NDUgNy42OTEzNCAxMy45NjE5QzcuNTA0NSAxNC4wMzkzIDcuMjg5NDUgMTMuOTk2NiA3LjE0NjQ1IDEzLjg1MzZMMy4xNDY0NSA5Ljg1MzU1QzMuMDUyNjggOS43NTk3OSAzIDkuNjMyNjEgMyA5LjVWNS41QzMgNS4yMjM4NiAzLjIyMzg2IDUgMy41IDVINi4zNjUzMUwzLjQ3MTA1IDEuODM0NjhDMy4zMzczMiAxLjY4ODQ0IDMuMzAyNTkgMS40NzcwMSAzLjM4MjUgMS4yOTU2N1pNNy43MjAzMiA1TDQuOTc0NzQgMS45OTcyOEgxMVY1SDcuNzIwMzJaTTcuMjc5NzggNkg0VjlINy41SDEwLjAyNDdMNy4yNzk3OCA2Wk00LjcwNzExIDEwTDcgMTIuMjkyOVYxMEg0LjcwNzExWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMDcwOTUgMC42NTAyMzhDNi42NzM5MSAwLjY1MDIzOCA2LjMyOTc3IDAuOTI1MDk2IDYuMjQxOTggMS4zMTIzMUw2LjAwMzkgMi4zNjI0N0M1LjYyNDkgMi40NzI2OSA1LjI2MzM1IDIuNjIzNjMgNC45MjQzNiAyLjgxMDEzTDQuMDEzMzUgMi4yMzU4NUMzLjY3NzQ4IDIuMDI0MTMgMy4yMzk3OCAyLjA3MzEyIDIuOTU5MDMgMi4zNTM4NkwyLjM1Mjk0IDIuOTU5OTZDMi4wNzIyIDMuMjQwNyAyLjAyMzIgMy42Nzg0IDIuMjM0OTMgNC4wMTQyN0wyLjgwOTQyIDQuOTI1NjFDMi42MjMwNyA1LjI2NDUgMi40NzIyNyA1LjYyNTk0IDIuMzYyMTYgNi4wMDQ4MUwxLjMxMjA5IDYuMjQyODdDMC45MjQ4ODMgNi4zMzA2NSAwLjY1MDAyNCA2LjY3NDggMC42NTAwMjQgNy4wNzE4M1Y3LjkyODk3QzAuNjUwMDI0IDguMzI2MDEgMC45MjQ4ODMgOC42NzAxNSAxLjMxMjA5IDguNzU3OTRMMi4zNjIyOCA4Ljk5NjAzQzIuNDcyNDYgOS4zNzUgMi42MjMzNSA5LjczNjUyIDIuODA5NzkgMTAuMDc1NUwyLjIzNTQgMTAuOTg2N0MyLjAyMzY3IDExLjMyMjUgMi4wNzI2NyAxMS43NjAyIDIuMzUzNDEgMTIuMDQxTDIuOTU5NTEgMTIuNjQ3MUMzLjI0MDI1IDEyLjkyNzggMy42Nzc5NSAxMi45NzY4IDQuMDEzODIgMTIuNzY1MUw0LjkyNTA2IDEyLjE5MDdDNS4yNjM4NCAxMi4zNzcgNS42MjUxNiAxMi41Mjc4IDYuMDAzOSAxMi42Mzc5TDYuMjQxOTggMTMuNjg4MUM2LjMyOTc3IDE0LjA3NTMgNi42NzM5MSAxNC4zNTAyIDcuMDcwOTUgMTQuMzUwMkg3LjkyODA5QzguMzI1MTIgMTQuMzUwMiA4LjY2OTI3IDE0LjA3NTMgOC43NTcwNSAxMy42ODgxTDguOTk1MDUgMTIuNjM4M0M5LjM3NDExIDEyLjUyODIgOS43MzU3MyAxMi4zNzczIDEwLjA3NDggMTIuMTkwOUwxMC45ODYgMTIuNzY1M0MxMS4zMjE4IDEyLjk3NyAxMS43NTk1IDEyLjkyOCAxMi4wNDAzIDEyLjY0NzNMMTIuNjQ2NCAxMi4wNDEyQzEyLjkyNzEgMTEuNzYwNCAxMi45NzYxIDExLjMyMjcgMTIuNzY0NCAxMC45ODY5TDEyLjE5MDIgMTAuMDc2QzEyLjM3NjggOS43MzY4OCAxMi41Mjc4IDkuMzc1MTUgMTIuNjM4IDguOTk1OTZMMTMuNjg3OSA4Ljc1Nzk0QzE0LjA3NTEgOC42NzAxNSAxNC4zNSA4LjMyNjAxIDE0LjM1IDcuOTI4OTdWNy4wNzE4M0MxNC4zNSA2LjY3NDggMTQuMDc1MSA2LjMzMDY1IDEzLjY4NzkgNi4yNDI4N0wxMi42MzgxIDYuMDA0ODhDMTIuNTI4IDUuNjI1NzggMTIuMzc3MSA1LjI2NDE0IDEyLjE5MDYgNC45MjUwN0wxMi43NjQ4IDQuMDE0MDdDMTIuOTc2NiAzLjY3ODIgMTIuOTI3NiAzLjI0MDUgMTIuNjQ2OCAyLjk1OTc1TDEyLjA0MDcgMi4zNTM2NkMxMS43NiAyLjA3MjkyIDExLjMyMjMgMi4wMjM5MiAxMC45ODY0IDIuMjM1NjVMMTAuMDc1NSAyLjgwOTg5QzkuNzM2MjIgMi42MjMyOCA5LjM3NDM3IDIuNDcyMjkgOC45OTUwNSAyLjM2MjA5TDguNzU3MDUgMS4zMTIzMUM4LjY2OTI3IDAuOTI1MDk2IDguMzI1MTIgMC42NTAyMzggNy45MjgwOSAwLjY1MDIzOEg3LjA3MDk1Wk00LjkyMDUzIDMuODEyNTFDNS40NDcyNCAzLjQ0MzM5IDYuMDU2NjUgMy4xODQyNCA2LjcxNTQzIDMuMDY4MzlMNy4wNzA5NSAxLjUwMDI0SDcuOTI4MDlMOC4yODM1NSAzLjA2ODE2QzguOTQyNjcgMy4xODM4NyA5LjU1MjQgMy40NDMwMiAxMC4wNzk0IDMuODEyMjRMMTEuNDM5NyAyLjk1NDdMMTIuMDQ1OCAzLjU2MDc5TDExLjE4ODIgNC45MjExN0MxMS41NTczIDUuNDQ3OTggMTEuODE2NCA2LjA1NzUgMTEuOTMyMSA2LjcxNjM4TDEzLjUgNy4wNzE4M1Y3LjkyODk3TDExLjkzMiA4LjI4NDQ0QzExLjgxNjIgOC45NDM0MiAxMS41NTcgOS41NTMwMSAxMS4xODc4IDEwLjA3OThMMTIuMDQ1MyAxMS40NDAyTDExLjQzOTIgMTIuMDQ2MkwxMC4wNzg3IDExLjE4ODZDOS41NTE5MiAxMS41NTc2IDguOTQyNDEgMTEuODE2NiA4LjI4MzU1IDExLjkzMjNMNy45MjgwOSAxMy41MDAySDcuMDcwOTVMNi43MTU0MyAxMS45MzJDNi4wNTY5IDExLjgxNjIgNS40NDc3MiAxMS41NTcyIDQuOTIxMTYgMTEuMTg4M0wzLjU2MDU1IDEyLjA0NkwyLjk1NDQ1IDExLjQzOTlMMy44MTIxMyAxMC4wNzk0QzMuNDQzMSA5LjU1MjY2IDMuMTg0MDMgOC45NDMyNiAzLjA2ODI1IDguMjg0NUwxLjUwMDAyIDcuOTI4OTdWNy4wNzE4M0wzLjA2ODE4IDYuNzE2MzJDMy4xODM4OCA2LjA1NzY1IDMuNDQyODMgNS40NDgzMyAzLjgxMTcxIDQuOTIxNjVMMi45NTM5OCAzLjU2MUwzLjU2MDA4IDIuOTU0OTFMNC45MjA1MyAzLjgxMjUxWk05LjAyNDk2IDcuNTAwMDhDOS4wMjQ5NiA4LjM0MjI2IDguMzQyMjMgOS4wMjQ5OSA3LjUwMDA1IDkuMDI0OTlDNi42NTc4NiA5LjAyNDk5IDUuOTc1MTMgOC4zNDIyNiA1Ljk3NTEzIDcuNTAwMDhDNS45NzUxMyA2LjY1Nzg5IDYuNjU3ODYgNS45NzUxNiA3LjUwMDA1IDUuOTc1MTZDOC4zNDIyMyA1Ljk3NTE2IDkuMDI0OTYgNi42NTc4OSA5LjAyNDk2IDcuNTAwMDhaTTkuOTI0OTYgNy41MDAwOEM5LjkyNDk2IDguODM5MzIgOC44MzkyOSA5LjkyNDk5IDcuNTAwMDUgOS45MjQ5OUM2LjE2MDggOS45MjQ5OSA1LjA3NTEzIDguODM5MzIgNS4wNzUxMyA3LjUwMDA4QzUuMDc1MTMgNi4xNjA4NCA2LjE2MDggNS4wNzUxNiA3LjUwMDA1IDUuMDc1MTZDOC44MzkyOSA1LjA3NTE2IDkuOTI0OTYgNi4xNjA4NCA5LjkyNDk2IDcuNTAwMDhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxadD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTkzNiAwLjg1MDAwNkMzLjgyNzY3IDAuODUwMDA2IDAuODQ5OTc2IDMuODI3MyAwLjg0OTk3NiA3LjUwMDIzQzAuODQ5OTc2IDEwLjQzNzkgMi43NTUyMyAxMi45MzA2IDUuMzk3NzUgMTMuODEwNEM1LjczMDQ3IDEzLjg3MTIgNS44NTE3MSAxMy42NjU4IDUuODUxNzEgMTMuNDg5NUM1Ljg1MTcxIDEzLjMzMTUgNS44NDYgMTIuOTEzNSA1Ljg0MjczIDEyLjM1ODdDMy45OTMwMSAxMi43NjA0IDMuNjAyNzMgMTEuNDY3MSAzLjYwMjczIDExLjQ2NzFDMy4zMDAyMiAxMC42OTg4IDIuODY0MjMgMTAuNDk0MiAyLjg2NDIzIDEwLjQ5NDJDMi4yNjA0NCAxMC4wODE5IDIuOTA5OTUgMTAuMDkwMSAyLjkwOTk1IDEwLjA5MDFDMy41Nzc0MiAxMC4xMzcgMy45Mjg1IDEwLjc3NTUgMy45Mjg1IDEwLjc3NTVDNC41MjE2NyAxMS43OTE2IDUuNDg1MTIgMTEuNDk4MSA1Ljg2Mzk2IDExLjMyNzlDNS45MjQzOCAxMC44OTg0IDYuMDk2MjUgMTAuNjA1MyA2LjI4NjA4IDEwLjQzOTFDNC44MDk0OCAxMC4yNzA5IDMuMjU2OTUgOS43MDA2MyAzLjI1Njk1IDcuMTUyNDFDMy4yNTY5NSA2LjQyNjE1IDMuNTE2MTggNS44MzI5OCAzLjk0MTU3IDUuMzY4QzMuODcyOTkgNS4xOTk4IDMuNjQ0NzggNC41MjM3NSA0LjAwNjg5IDMuNjA4MDdDNC4wMDY4OSAzLjYwODA3IDQuNTY0OTQgMy40MjkyNiA1LjgzNTM4IDQuMjg5NDFDNi4zNjU2OCA0LjE0MjA0IDYuOTM0NzcgNC4wNjg1NiA3LjUwMDE4IDQuMDY1N0M4LjA2NTE4IDQuMDY4NTYgOC42MzM4NiA0LjE0MjA0IDkuMTY0OTggNC4yODk0MUMxMC40MzQ2IDMuNDI5MjYgMTAuOTkxOCAzLjYwODA3IDEwLjk5MTggMy42MDgwN0MxMS4zNTQ4IDQuNTIzNzUgMTEuMTI2NiA1LjE5OTggMTEuMDU4NCA1LjM2OEMxMS40ODQ2IDUuODMyOTggMTEuNzQxOCA2LjQyNjE1IDExLjc0MTggNy4xNTI0MUMxMS43NDE4IDkuNzA3MTYgMTAuMTg2OCAxMC4yNjkzIDguNzA1NzEgMTAuNDMzOEM4Ljk0NDEyIDEwLjYzOTIgOS4xNTY4MSAxMS4wNDUgOS4xNTY4MSAxMS42NjU1QzkuMTU2ODEgMTIuNTU0MiA5LjE0ODY1IDEzLjI3MTUgOS4xNDg2NSAxMy40ODk1QzkuMTQ4NjUgMTMuNjY3NSA5LjI2ODY3IDEzLjg3NDUgOS42MDU4OCAxMy44MDk1QzEyLjI0NjQgMTIuOTI4MiAxNC4xNSAxMC40Mzc1IDE0LjE1IDcuNTAwMjNDMTQuMTUgMy44MjczIDExLjE3MjMgMC44NTAwMDYgNy40OTkzNiAwLjg1MDAwNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LCR0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTk2IDEuODAwMDJDNC4zNTE5NCAxLjgwMDAyIDEuNzk5OTYgNC4zNTIgMS43OTk5NiA3LjUwMDAyQzEuNzk5OTYgMTAuNjQ4IDQuMzUxOTQgMTMuMiA3LjQ5OTk2IDEzLjJDMTAuNjQ4IDEzLjIgMTMuMiAxMC42NDggMTMuMiA3LjUwMDAyQzEzLjIgNC4zNTIgMTAuNjQ4IDEuODAwMDIgNy40OTk5NiAxLjgwMDAyWk0wLjg5OTk2MyA3LjUwMDAyQzAuODk5OTYzIDMuODU0OTQgMy44NTQ4OCAwLjkwMDAyNCA3LjQ5OTk2IDAuOTAwMDI0QzExLjE0NSAwLjkwMDAyNCAxNC4xIDMuODU0OTQgMTQuMSA3LjUwMDAyQzE0LjEgMTEuMTQ1MSAxMS4xNDUgMTQuMSA3LjQ5OTk2IDE0LjFDMy44NTQ4OCAxNC4xIDAuODk5OTYzIDExLjE0NTEgMC44OTk5NjMgNy41MDAwMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjQ5OTkgNy44OTk5OEgxLjQ5OTk0VjcuMDk5OThIMTMuNDk5OVY3Ljg5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4wOTk5MSAxMy41VjEuNUg3Ljg5OTkxVjEzLjVINy4wOTk5MXpNMTAuMzc1IDcuNDk5OThDMTAuMzc1IDUuMzI3MjQgOS41OTM2NCAzLjE3Nzc4IDguMDYxODMgMS43NTY1Nkw4LjUzNzkzIDEuMjQzNDFDMTAuMjM5NiAyLjgyMjE4IDExLjA3NSA1LjE3MjczIDExLjA3NSA3LjQ5OTk4IDExLjA3NSA5LjgyNzI0IDEwLjIzOTYgMTIuMTc3OCA4LjUzNzkzIDEzLjc1NjZMOC4wNjE4MyAxMy4yNDM0QzkuNTkzNjQgMTEuODIyMiAxMC4zNzUgOS42NzI3MyAxMC4zNzUgNy40OTk5OHpNMy45OTk2OSA3LjVDMy45OTk2OSA1LjE3NjExIDQuODA3ODYgMi44MjY3OCA2LjQ1NzY4IDEuMjQ3MTlMNi45NDE3NyAxLjc1MjgxQzUuNDU4MiAzLjE3MzIzIDQuNjk5NjkgNS4zMjM4OSA0LjY5OTY5IDcuNSA0LjY5OTcgOS42NzYxMSA1LjQ1ODIyIDExLjgyNjggNi45NDE3OSAxMy4yNDcyTDYuNDU3NjkgMTMuNzUyOEM0LjgwNzg4IDEyLjE3MzIgMy45OTk3IDkuODIzOSAzLjk5OTY5IDcuNXpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTYgMy45NTgwMUM5LjY2OTI4IDMuOTU4MDEgMTEuODc1MyA0LjM1OTE1IDEzLjM3MDYgNS4xOTQ0OCAxMy41Mzk0IDUuMjg4NzUgMTMuNTk5OCA1LjUwMTk3IDEzLjUwNTUgNS42NzA3MyAxMy40MTEzIDUuODM5NDggMTMuMTk4IDUuODk5ODcgMTMuMDI5MyA1LjgwNTYgMTEuNjc5NCA1LjA1MTU1IDkuNjA3OTkgNC42NTgwMSA3LjQ5OTk2IDQuNjU4MDEgNS4zOTE5MiA0LjY1ODAxIDMuMzIwNTIgNS4wNTE1NSAxLjk3MDY0IDUuODA1NiAxLjgwMTg4IDUuODk5ODcgMS41ODg2NiA1LjgzOTQ4IDEuNDk0MzkgNS42NzA3MyAxLjQwMDEzIDUuNTAxOTcgMS40NjA1MSA1LjI4ODc1IDEuNjI5MjcgNS4xOTQ0OCAzLjEyNDY2IDQuMzU5MTUgNS4zMzA2MyAzLjk1ODAxIDcuNDk5OTYgMy45NTgwMXpNNy40OTk5NiAxMC44NUM5LjY2OTI4IDEwLjg1IDExLjg3NTMgMTAuNDQ4OCAxMy4zNzA2IDkuNjEzNSAxMy41Mzk0IDkuNTE5MjQgMTMuNTk5OCA5LjMwNjAxIDEzLjUwNTUgOS4xMzcyNiAxMy40MTEzIDguOTY4NSAxMy4xOTggOC45MDgxMiAxMy4wMjkzIDkuMDAyMzggMTEuNjc5NCA5Ljc1NjQzIDkuNjA3OTkgMTAuMTUgNy40OTk5NiAxMC4xNSA1LjM5MTkyIDEwLjE1IDMuMzIwNTIgOS43NTY0MyAxLjk3MDY0IDkuMDAyMzkgMS44MDE4OCA4LjkwODEyIDEuNTg4NjYgOC45Njg1IDEuNDk0MzkgOS4xMzcyNiAxLjQwMDEzIDkuMzA2MDEgMS40NjA1MSA5LjUxOTI0IDEuNjI5MjcgOS42MTM1IDMuMTI0NjYgMTAuNDQ4OCA1LjMzMDYzIDEwLjg1IDcuNDk5OTYgMTAuODV6XCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxOdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuNSAySDhWN0gxM1YyLjVDMTMgMi4yMjM4NiAxMi43NzYxIDIgMTIuNSAyWk0xMyA4SDhWMTNIMTIuNUMxMi43NzYxIDEzIDEzIDEyLjc3NjEgMTMgMTIuNVY4Wk03IDdWMkgyLjVDMi4yMjM4NiAyIDIgMi4yMjM4NiAyIDIuNVY3SDdaTTIgOFYxMi41QzIgMTIuNzc2MSAyLjIyMzg2IDEzIDIuNSAxM0g3VjhIMlpNMi41IDFDMS42NzE1NyAxIDEgMS42NzE1NyAxIDIuNVYxMi41QzEgMTMuMzI4NCAxLjY3MTU3IDE0IDIuNSAxNEgxMi41QzEzLjMyODQgMTQgMTQgMTMuMzI4NCAxNCAxMi41VjIuNUMxNCAxLjY3MTU3IDEzLjMyODQgMSAxMi41IDFIMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNDQ5OTUgMC45NDk5NTFDMS4zMTczNCAwLjk0OTk1MSAxLjE5MDE2IDEuMDAyNjMgMS4wOTY0IDEuMDk2NEMxLjAwMjYzIDEuMTkwMTcgMC45NDk5NTEgMS4zMTczNSAwLjk0OTk1MSAxLjQ0OTk1TDAuOTQ5OTY2IDMuNDQ5OTVDMC45NDk5NjkgMy43MjYxIDEuMTczODMgMy45NDk5NSAxLjQ0OTk3IDMuOTQ5OTVDMS43MjYxMSAzLjk0OTk1IDEuOTQ5OTcgMy43MjYwOSAxLjk0OTk3IDMuNDQ5OTVMMS45NDk5NSAxLjk0OTk1SDMuNDQ5OTdDMy43MjYxMSAxLjk0OTk1IDMuOTQ5OTcgMS43MjYwOSAzLjk0OTk3IDEuNDQ5OTVDMy45NDk5NyAxLjE3MzgxIDMuNzI2MTEgMC45NDk5NTEgMy40NDk5NyAwLjk0OTk1MUgxLjQ0OTk1Wk01Ljk0OTk1IDAuOTQ5OTUxQzUuNjczODEgMC45NDk5NTEgNS40NDk5NSAxLjE3MzgxIDUuNDQ5OTUgMS40NDk5NUM1LjQ0OTk1IDEuNzI2MDkgNS42NzM4MSAxLjk0OTk1IDUuOTQ5OTUgMS45NDk5NUg4Ljk0OTk1QzkuMjI2MDkgMS45NDk5NSA5LjQ0OTk1IDEuNzI2MDkgOS40NDk5NSAxLjQ0OTk1QzkuNDQ5OTUgMS4xNzM4MSA5LjIyNjA5IDAuOTQ5OTUxIDguOTQ5OTUgMC45NDk5NTFINS45NDk5NVpNNS40NDk5NSAxMy40NUM1LjQ0OTk1IDEzLjE3MzggNS42NzM4MSAxMi45NSA1Ljk0OTk1IDEyLjk1SDguOTQ5OTVDOS4yMjYwOSAxMi45NSA5LjQ0OTk1IDEzLjE3MzggOS40NDk5NSAxMy40NUM5LjQ0OTk1IDEzLjcyNjEgOS4yMjYwOSAxMy45NSA4Ljk0OTk1IDEzLjk1SDUuOTQ5OTVDNS42NzM4MSAxMy45NSA1LjQ0OTk1IDEzLjcyNjEgNS40NDk5NSAxMy40NVpNMS45NDk5NSA1Ljk0OTk1QzEuOTQ5OTUgNS42NzM4MSAxLjcyNjA5IDUuNDQ5OTUgMS40NDk5NSA1LjQ0OTk1QzEuMTczODEgNS40NDk5NSAwLjk0OTk1MSA1LjY3MzgxIDAuOTQ5OTUxIDUuOTQ5OTVWOC45NDk5NUMwLjk0OTk1MSA5LjIyNjA5IDEuMTczODEgOS40NDk5NSAxLjQ0OTk1IDkuNDQ5OTVDMS43MjYwOSA5LjQ0OTk1IDEuOTQ5OTUgOS4yMjYwOSAxLjk0OTk1IDguOTQ5OTVWNS45NDk5NVpNMTMuNDUgNS40NDk5NUMxMy43MjYxIDUuNDQ5OTUgMTMuOTUgNS42NzM4MSAxMy45NSA1Ljk0OTk1VjguOTQ5OTVDMTMuOTUgOS4yMjYwOSAxMy43MjYxIDkuNDQ5OTUgMTMuNDUgOS40NDk5NUMxMy4xNzM4IDkuNDQ5OTUgMTIuOTUgOS4yMjYwOSAxMi45NSA4Ljk0OTk1VjUuOTQ5OTVDMTIuOTUgNS42NzM4MSAxMy4xNzM4IDUuNDQ5OTUgMTMuNDUgNS40NDk5NVpNMTEuNDUgMC45NDk5NTFDMTEuMTczOCAwLjk0OTk1MSAxMC45NSAxLjE3MzgxIDEwLjk1IDEuNDQ5OTVDMTAuOTUgMS43MjYwOSAxMS4xNzM4IDEuOTQ5OTUgMTEuNDUgMS45NDk5NUgxMi45NDk5VjMuNDQ5OTVDMTIuOTQ5OSAzLjcyNjA5IDEzLjE3MzggMy45NDk5NSAxMy40NDk5IDMuOTQ5OTVDMTMuNzI2MSAzLjk0OTk1IDEzLjk0OTkgMy43MjYwOSAxMy45NDk5IDMuNDQ5OTVWMS40NDk5NUMxMy45NDk5IDEuMTczODEgMTMuNzI1MiAwLjk0OTk1MSAxMy40NDkgMC45NDk5NTFIMTEuNDVaTTEuNDQ5OTUgMTAuOTVDMS43MjYwOSAxMC45NSAxLjk0OTk1IDExLjE3MzggMS45NDk5NSAxMS40NVYxMi45NUgzLjQ0OTk3QzMuNzI2MTEgMTIuOTUgMy45NDk5NyAxMy4xNzM4IDMuOTQ5OTcgMTMuNDVDMy45NDk5NyAxMy43MjYxIDMuNzI2MTEgMTMuOTUgMy40NDk5NyAxMy45NUgxLjQ0OTk1QzEuMTczODEgMTMuOTUgMC45NDk5NTEgMTMuNzI2MSAwLjk0OTk1MSAxMy40NVYxMS40NUMwLjk0OTk1MSAxMS4xNzM4IDEuMTczODEgMTAuOTUgMS40NDk5NSAxMC45NVpNMTMuOTUgMTEuNDVDMTMuOTUgMTEuMTczOCAxMy43MjYxIDEwLjk1IDEzLjQ1IDEwLjk1QzEzLjE3MzggMTAuOTQ5OSAxMi45NSAxMS4xNzM4IDEyLjk1IDExLjQ0OTlMMTIuOTQ5MSAxMi45NUgxMS40NUMxMS4xNzM4IDEyLjk1IDEwLjk1IDEzLjE3MzggMTAuOTUgMTMuNDVDMTAuOTUgMTMuNzI2MSAxMS4xNzM4IDEzLjk1IDExLjQ1IDEzLjk1SDEzLjQ0OTlDMTMuNzI2MSAxMy45NSAxMy45NDk5IDEzLjcyNjEgMTMuOTQ5OSAxMy40NUwxMy45NSAxMS40NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFd0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk03LjAwMDAzIDEuODQ4NjFDNC4xMDExNCAyLjEwMTcgMS44MjcwNyA0LjUzNTE1IDEuODI3MDcgNy40OTk3MkMxLjgyNzA3IDEwLjQ2NDMgNC4xMDExNCAxMi44OTc3IDcuMDAwMDMgMTMuMTUwOFYxLjg0ODYxWk04LjAwMDAzIDEzLjE1MDhDMTAuODk4OCAxMi44OTc2IDEzLjE3MjcgMTAuNDY0MiAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyA0LjUzNTI0IDEwLjg5ODggMi4xMDE4NSA4LjAwMDAzIDEuODQ4NjRWMTMuMTUwOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFV0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk03LjQ5OTg4IDEuODI2ODlDNC4zNjY4OCAxLjgyNjkgMS44MjcwNyA0LjM2NjcyIDEuODI3MDcgNy40OTk3MkMxLjgyNzA3IDEwLjYzMjcgNC4zNjY4OCAxMy4xNzI1IDcuNDk5ODggMTMuMTcyNlYxLjgyNjg5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0senQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSAzQzEuMjIzODYgMyAxIDMuMjIzODYgMSAzLjVDMSAzLjc3NjE0IDEuMjIzODYgNCAxLjUgNEgxMy41QzEzLjc3NjEgNCAxNCAzLjc3NjE0IDE0IDMuNUMxNCAzLjIyMzg2IDEzLjc3NjEgMyAxMy41IDNIMS41Wk0xIDcuNUMxIDcuMjIzODYgMS4yMjM4NiA3IDEuNSA3SDEzLjVDMTMuNzc2MSA3IDE0IDcuMjIzODYgMTQgNy41QzE0IDcuNzc2MTQgMTMuNzc2MSA4IDEzLjUgOEgxLjVDMS4yMjM4NiA4IDEgNy43NzYxNCAxIDcuNVpNMSAxMS41QzEgMTEuMjIzOSAxLjIyMzg2IDExIDEuNSAxMUgxMy41QzEzLjc3NjEgMTEgMTQgMTEuMjIzOSAxNCAxMS41QzE0IDExLjc3NjEgMTMuNzc2MSAxMiAxMy41IDEySDEuNUMxLjIyMzg2IDEyIDEgMTEuNzc2MSAxIDExLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxHdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi44MTEzIDEuNjQ3MDZDNi42MjE4OCAyLjg3OTE4IDYuNjgyNjggMy44ODUyMyA2Ljc2ODQ4IDUuMzA0OTlDNi43ODQxNSA1LjU2NDI2IDYuODAwNjUgNS44MzczMiA2LjgxNjYxIDYuMTI4MDhDNi44MzExMSA2LjM5MjA4IDYuNjM3NTggNi42MjE3MiA2LjM3NDk1IDYuNjUyMTdDNi4xMTIzMiA2LjY4MjYyIDUuODcxMzggNi41MDMzNCA1LjgyNTA5IDYuMjQzMDRMNS43NDc1NCA1LjgwNjk4QzUuNjQ0MDIgNS4xNjUyOSA1LjQ4MzU1IDQuMjU0ODEgNS4xNzgwNyAzLjQ0NzQxQzQuODYyNDEgMi42MTMxMiA0LjQ0ODYgMi4wNDEyMSAzLjkzNDM2IDEuODYwNDRDMy42NDk5NCAxLjc2MTA0IDMuNDE5MDEgMS44NDI3OSAzLjI1ODY4IDIuMDEwNTJDMy4wODc0NiAyLjE4OTYyIDIuOTk3NiAyLjQ3MDY1IDMuMDYyNyAyLjc1Mzk5QzMuMjE0NiAzLjM0NDI0IDMuNDQ2MjcgMy45MTY3IDMuNjk4MzYgNC41MTgwMkMzLjcyMDgyIDQuNTcxNTggMy43NDM0NiA0LjYyNTQzIDMuNzY2MjEgNC42Nzk1NEMzLjk5NTQgNS4yMjQ1NyA0LjIzNjE5IDUuNzk3MiA0LjQxNjQ0IDYuMzkwODFMNC40MTY5MSA2LjM5MjM4QzQuNTYyIDYuODc1ODYgNC42NTY0NiA3LjI1OTUgNC43MzA4NiA3LjU2MTY1QzQuNzYwMzQgNy42ODEzOCA0Ljc4NjY3IDcuNzg4MzEgNC44MTE3NSA3Ljg4MzU5QzQuODY3NjggOC4wOTYwNiA0Ljc3ODM2IDguMzIwMTQgNC41OTE2MSA4LjQzNTg4QzQuNDA0ODYgOC41NTE2MSA0LjE2NDQ1IDguNTMxODggMy45OTkwNyA4LjM4NzI1QzMuNzM3NDkgOC4xNTg0OCAzLjUxNSA3LjkyNzg0IDMuMzE4MTcgNy43MTgwMkMzLjI3NjI3IDcuNjczMzUgMy4yMzYwMiA3LjYzMDE4IDMuMTk3MDUgNy41ODgzOEMzLjA0Nzc3IDcuNDI4MjYgMi45MTcxMiA3LjI4ODEyIDIuNzgzMzQgNy4xNjAyOUMyLjQ1OTg5IDYuODUxMjIgMi4xODM5OCA2LjY4MDA0IDEuODA1ODUgNi42NDM2OUwxLjgwMzI0IDYuNjQzNDNDMS41NjExNyA2LjYxODg4IDEuNDE0MDIgNi42NjQ0MSAxLjMxNzU2IDYuNzI2MjdDMS4yMTg5OSA2Ljc4OTQ3IDEuMTE5ODggNi45MDQxNCAxLjAzNzg0IDcuMTEyM0MwLjk3NjU3NiA3LjI4NDkyIDEuMDE1MTUgNy42Mjk4NyAxLjE5MjkgNy45NjkxMUwxLjE5NzI4IDcuOTc3NDdDMS40MDA4NiA4LjM4NDUyIDEuNzQ0NzUgOC44MTU4NyAyLjE4MTQxIDkuMjkyOTlDMi4zOTczOSA5LjUyODk4IDIuNjI4NzIgOS43Njg0OSAyLjg2OTM0IDEwLjAxNzRMMi44Nzk2NiAxMC4wMjgxQzMuMTE1NDYgMTAuMjcyMSAzLjM1OTYyIDEwLjUyNDcgMy41OTcxMyAxMC43ODI3QzQuNDI4OCAxMS42ODYzIDUuMjc3MDYgMTIuNzUzOCA1LjQ2MjcgMTRIMTEuNTA4N0MxMS41NjM2IDEyLjQzNTMgMTEuODc1NiAxMS4yNjggMTIuMjg3NSAxMC4xMzQ2QzEyLjQ0NTQgOS43MDA0MSAxMi42MTIxIDkuMjg0MTIgMTIuNzgyNiA4Ljg1ODI5QzEzLjEwOTcgOC4wNDEzOSAxMy40NTA5IDcuMTg5MzcgMTMuNzcwNSA2LjEwODI0QzE0LjA5ODkgNC45OTczNyAxNC4wMDk3IDQuMzcwMzMgMTMuODYxMyA0LjAzOTg0QzEzLjcxNyAzLjcxODU4IDEzLjQ5MTQgMy42MTc4NiAxMy4zODE2IDMuNTk2MDZDMTMuMTM4MSAzLjU0Nzc0IDEzLjAzODQgMy42MDk0NyAxMi45Njk4IDMuNjc5MDFDMTIuODY3IDMuNzgzMTYgMTIuNzY5OCAzLjk4MjczIDEyLjY5MjEgNC4zMDI2OUMxMi42MTY2IDQuNjEzNDUgMTIuNTc1MiA0Ljk2NTE3IDEyLjUzMyA1LjMyNTAxTDEyLjUyOTggNS4zNTI4NUMxMi40OTI0IDUuNjcyNDIgMTIuNDUwNSA2LjAzMDE2IDEyLjM2NjUgNi4zMDA5OEMxMi4zMzgzIDYuNDA2OTkgMTIuMjgxOSA2LjUwNDA3IDEyLjE5NzkgNi41NzUzOUMxMi4xMzgyIDYuNjI2MSAxMi4wMTA0IDYuNzA4MTggMTEuODMwOSA2LjY5MzEyQzExLjU0MjQgNi42Njg5MSAxMS4zNzEyIDYuNDIxNDMgMTEuMzY1IDYuMTQ3ODNDMTEuMzU2IDUuNzU0NTQgMTEuMzg4MyA1LjM1ODY0IDExLjQwNzQgNC45NjYwOEMxMS40NDI4IDQuMjM2NDYgMTEuNDc3IDMuNTMzNyAxMS40MjQ1IDIuODM0MkwxMS40MjQyIDIuODI5MzRDMTEuMzkxNiAyLjMyOTk3IDExLjA0OTMgMi4wMDIyOCAxMC43MDA3IDEuOTIyOEMxMC41MzA1IDEuODg0MDEgMTAuMzY5IDEuOTA2MDEgMTAuMjM0NyAxLjk4MzVDMTAuMTAzIDIuMDU5NDYgOS45NTUzNSAyLjIxMzE4IDkuODU3NCAyLjUxMzk0TDkuODU2MzEgMi41MTcyNkM5LjgxNTI1IDIuNjQwNCA5Ljc3Mjk4IDIuODc3NTMgOS43MzYwNiAzLjIxMjRDOS43MDA0NCAzLjUzNTQyIDkuNjczMzcgMy45MTI3OSA5LjY1MTU2IDQuMjk0MThDOS42MzI5IDQuNjIwMzMgOS42MTc4NSA0Ljk1ODQgOS42MDQzNCA1LjI2MTk0QzkuNTg3MjggNS42NDUyOSA5LjU3MjY3IDUuOTczNTcgOS41NTYzMyA2LjE1MzJDOS41NDk4MyA2LjIyNDU5IDkuNTI5MzkgNi4yOTQ5MyA5LjQ5NTAxIDYuMzU3ODVDOS40NzM1NiA2LjM5NzExIDkuMzYxMTUgNi42MDk0NyA5LjA3MTA2IDYuNjE4NDNDOC43NzkxNyA2LjYyNzQ0IDguNjM5NzUgNi40MDA1NyA4LjYxNjk4IDYuMzU5MTlDOC41NTYzNCA2LjI0ODk5IDguNTUwNjYgNi4xMTgwNyA4LjU0NzU0IDUuOTkyODNDOC41NDQ3NCA1Ljg4MDY0IDguNTQyOTQgNS43MTc5OCA4LjU0MTc0IDUuNTQ3NjdDOC41MzkzNSA1LjIwNTgyIDguNTM5MzUgNC44MTkxOSA4LjUzOTM1IDQuNzA5NTJDOC41MzkzNSAzLjY2NTcgOC41MzgzOCAyLjY1MzcyIDguNDQ3MTQgMS42NDM3MkM4LjM5MTgzIDEuMjQxMjcgOC4wNjI3OCAxLjAwNDU1IDcuNjQzNiAxLjAwMDA1QzcuMjIzOTkgMC45OTU1NTIgNi44NzkxOCAxLjIyNzA0IDYuODExMyAxLjY0NzA2Wk05LjQxMjE5IDEuMzYxN0M5LjIxNDY5IDAuNDQ4NDg0IDguMzk5MTMgMC4wMDgxMDMyNCA3LjY1NDMzIDAuMDAwMTExNTRDNi44NjQ1MiAtMC4wMDgzNjMwOCA1Ljk4NzYxIDAuNDY1ODgxIDUuODIzNjUgMS40OTAzN0w1LjgyMzE4IDEuNDkzMzRDNS43ODIzOSAxLjc1ODQgNS43NTIyOSAyLjAxNDgxIDUuNzMwOSAyLjI2NjUyQzUuMzk0MjMgMS42NzM2NCA0LjkyNjIyIDEuMTQ4OTQgNC4yNjU1IDAuOTE2ODU5QzMuNTg2NjEgMC42NzkzMTIgMi45NDkyIDAuODg3MDg3IDIuNTM1ODIgMS4zMTk1MkMyLjEzNDE1IDEuNzM5NzEgMS45NDQzOCAyLjM2NzQyIDIuMDkwMzEgMi45ODc0NkwyLjA5MjY5IDIuOTk3MTNDMi4yNjQ3OCAzLjY2ODA4IDIuNTIzOTYgNC4zMDMxNiAyLjc3NjEzIDQuOTA0NjVDMi43OTgxNCA0Ljk1NzE3IDIuODIwMSA1LjAwOTQxIDIuODQxOTQgNS4wNjEzOUMzLjAyMTM5IDUuNDg4NDIgMy4xOTM3OCA1Ljg5ODY2IDMuMzM4NzEgNi4zMTI1NkMyLjk2NDA0IDUuOTgxNDIgMi41MTkyNSA1LjcwNzk2IDEuOTAyNzYgNS42NDg0QzEuNDg4NjUgNS42MDY2MyAxLjEwMzkxIDUuNjc1MzYgMC43Nzc4MDUgNS44ODQ0NEMwLjQ1NDIzOSA2LjA5MTkgMC4yNDA2NzEgNi40MDQwNSAwLjEwNDE4NyA2Ljc1NDA2TDAuMTAwODY4IDYuNzYyODFDLTAuMTAxODQgNy4zMTI4NiAwLjA2NjMzMTIgNy45NzE1NyAwLjMwNDg5NSA4LjQyODk3QzAuNTczNzA0IDguOTY0NzQgMC45OTYxMDQgOS40NzkwNCAxLjQ0MzcyIDkuOTY4MTNDMS42NzA0NiAxMC4yMTU5IDEuOTExMzYgMTAuNDY1MiAyLjE1MDMzIDEwLjcxMjRMMi4xNTY4MiAxMC43MTkxQzIuMzk1MjQgMTAuOTY1OCAyLjYzMjE3IDExLjIxMDkgMi44NjEzNCAxMS40NTk5QzMuODA5MzcgMTIuNDkgNC41MDAwMiAxMy40NjMyIDQuNTAwMDIgMTQuNUM0LjUwMDAyIDE0Ljc3NjEgNC43MjM4OCAxNSA1LjAwMDAyIDE1SDEyQzEyLjI3NjIgMTUgMTIuNSAxNC43NzYxIDEyLjUgMTQuNUMxMi41IDEyLjgyMTIgMTIuODAyMSAxMS42NDYyIDEzLjIyNzQgMTAuNDc2MkMxMy4zNjUzIDEwLjA5NjggMTMuNTIxNiA5LjcwNTc5IDEzLjY4NjggOS4yOTI0N0MxNC4wMjM4IDguNDQ5MjIgMTQuMzk4IDcuNTEyOTggMTQuNzI5NSA2LjM5MTc1QzE1LjA5NTYgNS4xNTMyNCAxNS4wNTU5IDQuMjU5MDQgMTQuNzczNSAzLjYzMDE3QzE0LjQ4NyAyLjk5MjA4IDEzLjk3OTggMi42OTUzIDEzLjU3NjMgMi42MTUyQzEzLjEyNzYgMi41MjYxNCAxMi43MzY3IDIuNjA0NzUgMTIuNDI2OCAyLjgzMDgxQzEyLjQyNTMgMi44MDc3MyAxMi40MjM2IDIuNzg0NjggMTIuNDIxOSAyLjc2MTY3QzEyLjM1ODcgMS44MTA1IDExLjY5MDcgMS4xMjI4NSAxMC45MjMgMC45NDc4MjFDMTAuNTM0NiAwLjg1OTI4NyAxMC4xMTExIDAuOTAwMzkzIDkuNzM1MDkgMS4xMTcyNEM5LjYxODUyIDEuMTg0NDYgOS41MTA1NSAxLjI2NjIzIDkuNDEyMTkgMS4zNjE3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sS3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguNzU0MzIgMi4wNTAyQzguNTA1NzkgMi4wNTAyIDguMzA0MzIgMi4yNTE2NyA4LjMwNDMyIDIuNTAwMkM4LjMwNDMyIDIuNzQ4NzMgOC41MDU3OSAyLjk1MDIgOC43NTQzMiAyLjk1MDJIOS45NDk5N1Y3LjA1MDA0SDUuMDQ5OTdWMi45NTAySDYuMjU0MzJDNi41MDI4NSAyLjk1MDIgNi43MDQzMiAyLjc0ODczIDYuNzA0MzIgMi41MDAyQzYuNzA0MzIgMi4yNTE2NyA2LjUwMjg1IDIuMDUwMiA2LjI1NDMyIDIuMDUwMkgyLjc1NDMyQzIuNTA1NzkgMi4wNTAyIDIuMzA0MzIgMi4yNTE2NyAyLjMwNDMyIDIuNTAwMkMyLjMwNDMyIDIuNzQ4NzMgMi41MDU3OSAyLjk1MDIgMi43NTQzMiAyLjk1MDJIMy45NDk5N1YxMi4wNTAySDIuNzU0MzJDMi41MDU3OSAxMi4wNTAyIDIuMzA0MzIgMTIuMjUxNyAyLjMwNDMyIDEyLjUwMDJDMi4zMDQzMiAxMi43NDg3IDIuNTA1NzkgMTIuOTUwMiAyLjc1NDMyIDEyLjk1MDJINi4yNTQzMkM2LjUwMjg1IDEyLjk1MDIgNi43MDQzMiAxMi43NDg3IDYuNzA0MzIgMTIuNTAwMkM2LjcwNDMyIDEyLjI1MTcgNi41MDI4NSAxMi4wNTAyIDYuMjU0MzIgMTIuMDUwMkg1LjA0OTk3VjcuOTUwMDRIOS45NDk5N1YxMi4wNTAySDguNzU0MzJDOC41MDU3OSAxMi4wNTAyIDguMzA0MzIgMTIuMjUxNyA4LjMwNDMyIDEyLjUwMDJDOC4zMDQzMiAxMi43NDg3IDguNTA1NzkgMTIuOTUwMiA4Ljc1NDMyIDEyLjk1MDJIMTIuMjU0M0MxMi41MDI4IDEyLjk1MDIgMTIuNzA0MyAxMi43NDg3IDEyLjcwNDMgMTIuNTAwMkMxMi43MDQzIDEyLjI1MTcgMTIuNTAyOCAxMi4wNTAyIDEyLjI1NDMgMTIuMDUwMkgxMS4wNVYyLjk1MDJIMTIuMjU0M0MxMi41MDI4IDIuOTUwMiAxMi43MDQzIDIuNzQ4NzMgMTIuNzA0MyAyLjUwMDJDMTIuNzA0MyAyLjI1MTY3IDEyLjUwMjggMi4wNTAyIDEyLjI1NDMgMi4wNTAySDguNzU0MzJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxxdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4xODEzIDEuNjgxNzlDNy4zNTcwNCAxLjUwNjA1IDcuNjQxOTYgMS41MDYwNSA3LjgxNzcgMS42ODE3OUwxMC4zMTc3IDQuMTgxNzlDMTAuNDkzNCA0LjM1NzUzIDEwLjQ5MzQgNC42NDI0NSAxMC4zMTc3IDQuODE4MTlDMTAuMTQyIDQuOTkzOTIgOS44NTcwNCA0Ljk5MzkyIDkuNjgxMyA0LjgxODE5TDcuOTQ5NSAzLjA4NjM4TDcuOTQ5NSAxMS45MTM2TDkuNjgxMyAxMC4xODE4QzkuODU3MDQgMTAuMDA2MSAxMC4xNDIgMTAuMDA2MSAxMC4zMTc3IDEwLjE4MThDMTAuNDkzNCAxMC4zNTc1IDEwLjQ5MzQgMTAuNjQyNCAxMC4zMTc3IDEwLjgxODJMNy44MTc3IDEzLjMxODJDNy43MzMzMSAxMy40MDI2IDcuNjE4ODUgMTMuNDUgNy40OTk1IDEzLjQ1QzcuMzgwMTUgMTMuNDUgNy4yNjU2OSAxMy40MDI2IDcuMTgxMyAxMy4zMTgyTDQuNjgxMyAxMC44MTgyQzQuNTA1NTcgMTAuNjQyNCA0LjUwNTU3IDEwLjM1NzUgNC42ODEzIDEwLjE4MThDNC44NTcwNCAxMC4wMDYxIDUuMTQxOTYgMTAuMDA2MSA1LjMxNzcgMTAuMTgxOEw3LjA0OTUgMTEuOTEzNkw3LjA0OTUgMy4wODYzOEw1LjMxNzcgNC44MTgxOUM1LjE0MTk2IDQuOTkzOTIgNC44NTcwNCA0Ljk5MzkyIDQuNjgxMyA0LjgxODE5QzQuNTA1NTcgNC42NDI0NSA0LjUwNTU3IDQuMzU3NTMgNC42ODEzIDQuMTgxNzlMNy4xODEzIDEuNjgxNzlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxZdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4wNzkyNiAwLjIyMjI1M0M3LjMxMjc1IC0wLjAwNzQzNCA3LjY4NzMgLTAuMDA3NDM0IDcuOTIwNzkgMC4yMjIyNTNMMTQuNjcwOCA2Ljg2MjI3QzE0LjkwNyA3LjA5NDY1IDE0LjkxMDEgNy40NzQ1MyAxNC42Nzc4IDcuNzEwNzZDMTQuNDQ1NCA3Ljk0NyAxNC4wNjU1IDcuOTUwMTIgMTMuODI5MyA3LjcxNzczTDEzIDYuOTAyMDFWMTIuNUMxMyAxMi43NzYxIDEyLjc3NjIgMTMgMTIuNSAxM0gyLjUwMDAyQzIuMjIzODggMTMgMi4wMDAwMiAxMi43NzYxIDIuMDAwMDIgMTIuNVY2LjkwMjAxTDEuMTcwNzkgNy43MTc3M0MwLjkzNDU1OCA3Ljk1MDEyIDAuNTU0NjcyIDcuOTQ3IDAuMzIyMjkgNy43MTA3NkMwLjA4OTkwNzkgNy40NzQ1MyAwLjA5MzAyODMgNy4wOTQ2NSAwLjMyOTI2IDYuODYyMjdMNy4wNzkyNiAwLjIyMjI1M1pNNy41MDAwMiAxLjQ5MTYzTDEyIDUuOTE4MzFWMTJIMTBWOC40OTk5OUMxMCA4LjIyMzg1IDkuNzc2MTcgNy45OTk5OSA5LjUwMDAyIDcuOTk5OTlINi41MDAwMkM2LjIyMzg4IDcuOTk5OTkgNi4wMDAwMiA4LjIyMzg1IDYuMDAwMDIgOC40OTk5OVYxMkgzLjAwMDAyVjUuOTE4MzFMNy41MDAwMiAxLjQ5MTYzWk03LjAwMDAyIDEySDkuMDAwMDJWOC45OTk5OUg3LjAwMDAyVjEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAwLjAwMzI5NTlDNi44MDQ3MyAwLjAwMzI5NTkgNi4yNDk1MyAwLjI4MTEwNiA2LjI1IDAuNzQ5OTk1QzYuMjUgMC45OTcyNTggNi40MjQ0NiAxLjEyMDE0IDYuNTc2ODcgMS4yMjc0OUM2LjY5NTA3IDEuMzEwNzQgNi44IDEuMzg0NjUgNi44IDEuNUM2LjggMS43MDcxIDYuMDYyMjQgMS43NDI2NCA1LjE5Nzg5IDEuNzg0MjdDMy45NzU1MyAxLjg0MzE0IDIuNSAxLjkxNDIxIDIuNSAyLjVDMi41IDIuNzc2MTQgMi43MjM4NiAzIDMgM0gxMkMxMi4yNzYxIDMgMTIuNSAyLjc3NjE0IDEyLjUgMi41QzEyLjUgMS45MTQyMSAxMS4wMjQ1IDEuODQzMTQgOS44MDIxMSAxLjc4NDI3QzguOTM3NzYgMS43NDI2NCA4LjIgMS43MDcxIDguMiAxLjVDOC4yIDEuMzg0NjUgOC4zMDQ5MyAxLjMxMDc0IDguNDIzMTMgMS4yMjc0OUM4LjU3NTU0IDEuMTIwMTQgOC43NSAwLjk5NzI1OCA4Ljc1IDAuNzQ5OTk1QzguNzUwNDcgMC4yODExMDYgOC4xOTUyNyAwLjAwMzI5NTkgNy41IDAuMDAzMjk1OVpNMi44OTQ1MSA2LjEyMjY2QzIuMjU4MDYgNi41MjQ3MSAxLjkwNDE3IDcuMzExMTggMi4wMjQ3MyA4LjA1NTZMMi44MzU4OCAxMi40NzcyQzMuMDA5OTMgMTMuMzU2MiAzLjc2MjkgMTQgNC42NjA2MSAxNEgxMC4zMzczQzExLjIzNTQgMTQgMTEuOTg4NCAxMy4zNTYyIDEyLjE2MjUgMTIuNDc3MkwxMi45NzM2IDguMDU2MDdDMTMuMDg5IDcuMzIzNTggMTIuODI4NCA2LjUzMjc2IDEyLjEzMzEgNi4wOTM3M0MxMS43MjgzIDUuODMwMTMgMTEuNjQxMiA1LjMzMjMxIDEyLjEzMzEgNS4xMjc5NkMxMi44Mjg0IDQuODY0MzUgMTIuNjk0OCA0IDEyIDRIMTAuMzAwMUg2LjgwMDA1SDIuOTk5OTZDMi4zMDQ2OSA0IDIuMTk4NzggNC44OTMyOCAyLjg5NDUxIDUuMTU2ODlDMy4zODY0MiA1LjMzMjMxIDMuMjk5MzkgNS44MzAxMyAyLjg5NDUxIDYuMTIyNjZaTTguMjAwMDYgNi4yNUM4LjIwMDA2IDUuODE3NjkgOC4wODU3MiA1LjM3NjE1IDcuOTA2MzUgNUw0LjExMDkzIDVDNC4yMDYyNiA1LjIxMzEyIDQuMjQxOSA1LjQzODg5IDQuMjI5MDQgNS42NTUyMUM0LjE5NTIyIDYuMjI0MTIgMy44NDU4NyA2LjY2ODk5IDMuNDgwMTYgNi45MzMyMkwzLjQ1NDkyIDYuOTUxNDZMMy40Mjg1OCA2Ljk2ODFDMy4xMzQwNyA3LjE1NDE0IDIuOTU4MDEgNy41Mzk4OSAzLjAxMDU4IDcuODg3NDlMMy44MTc5NyAxMi4yODg2QzMuOTA1MTMgMTIuNzE1NCA0LjI2MTQ4IDEzIDQuNjYwNjEgMTNIMTAuMzM3M0MxMC43MzcgMTMgMTEuMDkzMiAxMi43MTUzIDExLjE4MDQgMTIuMjg4NkwxMS45ODc0IDcuODg5OEMxMi4wNDggNy40ODI0NyAxMS44OTU0IDcuMTI2MzEgMTEuNTk5MiA2LjkzOTI3TDExLjU4NzUgNi45MzE4NEwxMS41ODc1IDYuOTMxNzZDMTEuMTk0NyA2LjY3NjAyIDEwLjgzMzEgNi4yMjc4NSAxMC43OTg2IDUuNjQ3OThDMTAuNzg0NiA1LjQxMiAxMC44MjY0IDUuMTkzOTcgMTAuOTExMiA1SDkuMDU1MTdDOS4wMTk4NyA1LjE0NjExIDkuMDAwMDYgNS4zMTIwMSA5LjAwMDA2IDUuNUM5LjAwMDA2IDUuOTc0NSA5LjIxNjc5IDYuMzcxMjcgOS40NDM2NyA2Ljc4NjYyQzkuNjkyODQgNy4yNDI3OCA5Ljk1NDI1IDcuNzIxMzYgOS45NTQyNSA4LjM0OTkzQzkuOTU0MjUgOS4yNjk4IDkuNDk4NjggOS44NDIwNSA4LjYyMTg5IDkuODQyMDVDOC4xMzIwNiA5Ljg0MjA1IDcuNTc4MTggOS40NjA5NyA3LjU3ODE4IDguNzU3ODFDNy41NzgxOCA4LjM1Mjc5IDcuNzE1NTggOC4wMTY0NiA3Ljg2MTIxIDcuNjU5OThDOC4wMjU0IDcuMjU4MDYgOC4yMDAwNiA2LjgzMDUxIDguMjAwMDYgNi4yNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFh0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCAxMS4wMDAxVjQuMDAwMDZMMSA0LjAwMDA2TDEgMTEuMDAwMUgxNFpNMTUgNC4wMDAwNlYxMS4wMDAxQzE1IDExLjU1MjMgMTQuNTUyMyAxMi4wMDAxIDE0IDEyLjAwMDFIMUMwLjQ0NzcxNSAxMi4wMDAxIDAgMTEuNTUyMyAwIDExLjAwMDFWNC4wMDAwNkMwIDMuNDQ3NzggMC40NDc3MTUgMy4wMDAwNiAxIDMuMDAwMDZIMTRDMTQuNTUyMyAzLjAwMDA2IDE1IDMuNDQ3NzggMTUgNC4wMDAwNlpNMiA1LjI1QzIgNS4xMTE5MyAyLjExMTkzIDUgMi4yNSA1SDUuNzVDNS44ODgwNyA1IDYgNS4xMTE5MyA2IDUuMjVWOS43NUM2IDkuODg4MDcgNS44ODgwNyAxMCA1Ljc1IDEwSDIuMjVDMi4xMTE5MyAxMCAyIDkuODg4MDcgMiA5Ljc1VjUuMjVaTTcuNSA3QzcuMjIzODYgNyA3IDcuMjIzODYgNyA3LjVDNyA3Ljc3NjE0IDcuMjIzODYgOCA3LjUgOEgxMC41QzEwLjc3NjEgOCAxMSA3Ljc3NjE0IDExIDcuNUMxMSA3LjIyMzg2IDEwLjc3NjEgNyAxMC41IDdINy41Wk03IDkuNUM3IDkuMjIzODYgNy4yMjM4NiA5IDcuNSA5SDEyLjVDMTIuNzc2MSA5IDEzIDkuMjIzODYgMTMgOS41QzEzIDkuNzc2MTQgMTIuNzc2MSAxMCAxMi41IDEwSDcuNUM3LjIyMzg2IDEwIDcgOS43NzYxNCA3IDkuNVpNNy41IDVDNy4yMjM4NiA1IDcgNS4yMjM4NiA3IDUuNUM3IDUuNzc2MTQgNy4yMjM4NiA2IDcuNSA2SDExLjVDMTEuNzc2MSA2IDEyIDUuNzc2MTQgMTIgNS41QzEyIDUuMjIzODYgMTEuNzc2MSA1IDExLjUgNUg3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxRdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi41IDFIMTIuNUMxMy4zMjg0IDEgMTQgMS42NzE1NyAxNCAyLjVWMTIuNUMxNCAxMy4zMjg0IDEzLjMyODQgMTQgMTIuNSAxNEgyLjVDMS42NzE1NyAxNCAxIDEzLjMyODQgMSAxMi41VjIuNUMxIDEuNjcxNTcgMS42NzE1NyAxIDIuNSAxWk0yLjUgMkMyLjIyMzg2IDIgMiAyLjIyMzg2IDIgMi41VjguMzYzNkwzLjY4MTggNi42ODE4QzMuNzY4MDkgNi41OTU1MSAzLjg4NTcyIDYuNTQ3OTcgNC4wMDc3NCA2LjU1MDA3QzQuMTI5NzUgNi41NTIxNiA0LjI0NTY4IDYuNjAzNzIgNC4zMjg5NSA2LjY5MjkzTDcuODczNTUgMTAuNDkwMUwxMC42ODE4IDcuNjgxOEMxMC44NTc1IDcuNTA2MDcgMTEuMTQyNSA3LjUwNjA3IDExLjMxODIgNy42ODE4TDEzIDkuMzYzNlYyLjVDMTMgMi4yMjM4NiAxMi43NzYxIDIgMTIuNSAySDIuNVpNMiAxMi41VjkuNjM2NEwzLjk4ODg3IDcuNjQ3NTNMNy41MzExIDExLjQ0MjFMOC45NDExMyAxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41Wk0xMi41IDEzSDEwLjE1NUw4LjQ4MzM2IDExLjE1M0wxMSA4LjYzNjRMMTMgMTAuNjM2NFYxMi41QzEzIDEyLjc3NjEgMTIuNzc2MSAxMyAxMi41IDEzWk02LjY0OTIyIDUuNUM2LjY0OTIyIDUuMDMwMTMgNy4wMzAxMyA0LjY0OTIyIDcuNSA0LjY0OTIyQzcuOTY5ODcgNC42NDkyMiA4LjM1MDc4IDUuMDMwMTMgOC4zNTA3OCA1LjVDOC4zNTA3OCA1Ljk2OTg3IDcuOTY5ODcgNi4zNTA3OCA3LjUgNi4zNTA3OEM3LjAzMDEzIDYuMzUwNzggNi42NDkyMiA1Ljk2OTg3IDYuNjQ5MjIgNS41Wk03LjUgMy43NDkyMkM2LjUzMzA3IDMuNzQ5MjIgNS43NDkyMiA0LjUzMzA3IDUuNzQ5MjIgNS41QzUuNzQ5MjIgNi40NjY5MyA2LjUzMzA3IDcuMjUwNzggNy41IDcuMjUwNzhDOC40NjY5MyA3LjI1MDc4IDkuMjUwNzggNi40NjY5MyA5LjI1MDc4IDUuNUM5LjI1MDc4IDQuNTMzMDcgOC40NjY5MyAzLjc0OTIyIDcuNSAzLjc0OTIyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzY4OTJDMy44NDIyMiAwLjg3Njg5MiAwLjg3NzA3NSAzLjg0MjA0IDAuODc3MDc1IDcuNDk5NzJDMC44NzcwNzUgMTEuMTU3NCAzLjg0MjIyIDE0LjEyMjYgNy40OTk5MSAxNC4xMjI2QzExLjE1NzYgMTQuMTIyNiAxNC4xMjI3IDExLjE1NzQgMTQuMTIyNyA3LjQ5OTcyQzE0LjEyMjcgMy44NDIwNCAxMS4xNTc2IDAuODc2ODkyIDcuNDk5OTEgMC44NzY4OTJaTTEuODI3MDcgNy40OTk3MkMxLjgyNzA3IDQuMzY2NzEgNC4zNjY4OSAxLjgyNjg5IDcuNDk5OTEgMS44MjY4OUMxMC42MzI5IDEuODI2ODkgMTMuMTcyNyA0LjM2NjcxIDEzLjE3MjcgNy40OTk3MkMxMy4xNzI3IDEwLjYzMjcgMTAuNjMyOSAxMy4xNzI2IDcuNDk5OTEgMTMuMTcyNkM0LjM2Njg5IDEzLjE3MjYgMS44MjcwNyAxMC42MzI3IDEuODI3MDcgNy40OTk3MlpNOC4yNDk5MiA0LjQ5OTk5QzguMjQ5OTIgNC45MTQyIDcuOTE0MTMgNS4yNDk5OSA3LjQ5OTkyIDUuMjQ5OTlDNy4wODU3MSA1LjI0OTk5IDYuNzQ5OTIgNC45MTQyIDYuNzQ5OTIgNC40OTk5OUM2Ljc0OTkyIDQuMDg1NzcgNy4wODU3MSAzLjc0OTk5IDcuNDk5OTIgMy43NDk5OUM3LjkxNDEzIDMuNzQ5OTkgOC4yNDk5MiA0LjA4NTc3IDguMjQ5OTIgNC40OTk5OVpNNi4wMDAwMyA1Ljk5OTk5SDYuNTAwMDNINy41MDAwM0M3Ljc3NjE4IDUuOTk5OTkgOC4wMDAwMyA2LjIyMzg0IDguMDAwMDMgNi40OTk5OVY5Ljk5OTk5SDguNTAwMDNIOS4wMDAwM1YxMUg4LjUwMDAzSDcuNTAwMDNINi41MDAwM0g2LjAwMDAzVjkuOTk5OTlINi41MDAwM0g3LjAwMDAzVjYuOTk5OTlINi41MDAwM0g2LjAwMDAzVjUuOTk5OTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx0bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi41IDFDNi4yMjM4NiAxIDYgMS4yMjM4NiA2IDEuNUM2IDEuNzc2MTQgNi4yMjM4NiAyIDYuNSAyQzcuMTI2NzEgMiA3LjQ1NzE4IDIuMjAwMjggNy42NTU2MyAyLjQ3ODEyQzcuODc4MSAyLjc4OTU3IDggMy4yODgzNyA4IDRWMTFDOCAxMS43MTE2IDcuODc4MSAxMi4yMTA0IDcuNjU1NjMgMTIuNTIxOUM3LjQ1NzE4IDEyLjc5OTcgNy4xMjY3MSAxMyA2LjUgMTNDNi4yMjM4NiAxMyA2IDEzLjIyMzkgNiAxMy41QzYgMTMuNzc2MSA2LjIyMzg2IDE0IDYuNSAxNEM3LjM3MzI5IDE0IDguMDQyODIgMTMuNzAwMyA4LjQ2OTM3IDEzLjEwMzFDOC40Nzk3NiAxMy4wODg2IDguNDg5OTcgMTMuMDczOSA4LjUgMTMuMDU5MUM4LjUxMDAzIDEzLjA3MzkgOC41MjAyNCAxMy4wODg2IDguNTMwNjMgMTMuMTAzMUM4Ljk1NzE4IDEzLjcwMDMgOS42MjY3MSAxNCAxMC41IDE0QzEwLjc3NjEgMTQgMTEgMTMuNzc2MSAxMSAxMy41QzExIDEzLjIyMzkgMTAuNzc2MSAxMyAxMC41IDEzQzkuODczMjkgMTMgOS41NDI4MiAxMi43OTk3IDkuMzQ0MzcgMTIuNTIxOUM5LjEyMTkgMTIuMjEwNCA5IDExLjcxMTYgOSAxMVY0QzkgMy4yODgzNyA5LjEyMTkgMi43ODk1NyA5LjM0NDM3IDIuNDc4MTJDOS41NDI4MiAyLjIwMDI4IDkuODczMjkgMiAxMC41IDJDMTAuNzc2MSAyIDExIDEuNzc2MTQgMTEgMS41QzExIDEuMjIzODYgMTAuNzc2MSAxIDEwLjUgMUM5LjYyNjcxIDEgOC45NTcxOCAxLjI5OTcyIDguNTMwNjMgMS44OTY4OEM4LjUyMDI0IDEuOTExNDMgOC41MTAwMyAxLjkyNjExIDguNSAxLjk0MDlDOC40ODk5NyAxLjkyNjExIDguNDc5NzYgMS45MTE0MyA4LjQ2OTM3IDEuODk2ODhDOC4wNDI4MiAxLjI5OTcyIDcuMzczMjkgMSA2LjUgMVpNMTQgNUgxMVY0SDE0QzE0LjU1MjMgNCAxNSA0LjQ0NzcyIDE1IDVWMTBDMTUgMTAuNTUyMyAxNC41NTIzIDExIDE0IDExSDExVjEwSDE0VjVaTTYgNFY1SDFMMSAxMEg2VjExSDFDMC40NDc3MTUgMTEgMCAxMC41NTIzIDAgMTBWNUMwIDQuNDQ3NzIgMC40NDc3MTUgNCAxIDRINlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjQ5OTk4IDAuNUM1LjQ5OTk4IDAuMjIzODU4IDUuNzIzODMgMCA1Ljk5OTk4IDBINy40OTk5OEg4Ljk5OTk4QzkuMjc2MTIgMCA5LjQ5OTk4IDAuMjIzODU4IDkuNDk5OTggMC41QzkuNDk5OTggMC43NzYxNDIgOS4yNzYxMiAxIDguOTk5OTggMUg3Ljk5OTk4VjIuMTE5MjJDOS4wOTgzMiAyLjIwNDA5IDEwLjExOSAyLjU2NjIyIDEwLjk5MiAzLjEzNTcyQzExLjAxMTYgMy4xMDg1MSAxMS4wMzM2IDMuMDgyNTIgMTEuMDU4IDMuMDU4MDZMMTIuMDU4IDIuMDU4MDZDMTIuMzAyMSAxLjgxMzk4IDEyLjY5NzggMS44MTM5OCAxMi45NDE5IDIuMDU4MDZDMTMuMTg2IDIuMzAyMTQgMTMuMTg2IDIuNjk3ODYgMTIuOTQxOSAyLjk0MTk0TDExLjk2NyAzLjkxNjgyQzEzLjE1OTUgNS4wNzkyNSAxMy45IDYuNzAzMTQgMTMuOSA4LjQ5OTk4QzEzLjkgMTIuMDM0NiAxMS4wMzQ2IDE0LjkgNy40OTk5OCAxNC45QzMuOTY1MzUgMTQuOSAxLjA5OTk4IDEyLjAzNDYgMS4wOTk5OCA4LjQ5OTk4QzEuMDk5OTggNS4xMzM2MSAzLjY5OTA0IDIuMzc0MyA2Ljk5OTk4IDIuMTE5MjJWMUg1Ljk5OTk4QzUuNzIzODMgMSA1LjQ5OTk4IDAuNzc2MTQyIDUuNDk5OTggMC41Wk0yLjA5OTk4IDguNDk5OThDMi4wOTk5OCA1LjUxNzY0IDQuNTE3NjQgMy4wOTk5OCA3LjQ5OTk4IDMuMDk5OThDMTAuNDgyMyAzLjA5OTk4IDEyLjkgNS41MTc2NCAxMi45IDguNDk5OThDMTIuOSAxMS40ODIzIDEwLjQ4MjMgMTMuOSA3LjQ5OTk4IDEzLjlDNC41MTc2NCAxMy45IDIuMDk5OTggMTEuNDgyMyAyLjA5OTk4IDguNDk5OThaTTcuNDk5OTggOC40OTk5OFY0LjA5OTk4QzUuMDY5OTIgNC4wOTk5OCAzLjA5OTk4IDYuMDY5OTIgMy4wOTk5OCA4LjQ5OTk4QzMuMDk5OTggMTAuOTMgNS4wNjk5MiAxMi45IDcuNDk5OTggMTIuOUM4LjcxNSAxMi45IDkuODE1IDEyLjQwNzUgMTAuNjExMiAxMS42MTEyTDcuNDk5OTggOC40OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHJuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03Ljc1NDMyIDAuODE5NTM3QzcuNTk3NDIgMC43MjY4MjEgNy40MDI1IDAuNzI2ODIxIDcuMjQ1NTkgMC44MTk1MzdMMS43NDU1OSA0LjA2OTU0QzEuNTkzMzYgNC4xNTk0OSAxLjQ5OTk2IDQuMzIzMTcgMS40OTk5NiA0LjVDMS40OTk5NiA0LjY3NjgzIDEuNTkzMzYgNC44NDA1MSAxLjc0NTU5IDQuOTMwNDZMNy4yNDU1OSA4LjE4MDQ2QzcuNDAyNSA4LjI3MzE4IDcuNTk3NDIgOC4yNzMxOCA3Ljc1NDMyIDguMTgwNDZMMTMuMjU0MyA0LjkzMDQ2QzEzLjQwNjYgNC44NDA1MSAxMy41IDQuNjc2ODMgMTMuNSA0LjVDMTMuNSA0LjMyMzE3IDEzLjQwNjYgNC4xNTk0OSAxMy4yNTQzIDQuMDY5NTRMNy43NTQzMiAwLjgxOTUzN1pNNy40OTk5NiA3LjE2OTIzTDIuOTgyOCA0LjVMNy40OTk5NiAxLjgzMDc3TDEyLjAxNzEgNC41TDcuNDk5OTYgNy4xNjkyM1pNMS41Njk1IDcuNDk1NjRDMS43MDk5OCA3LjI1NzkgMi4wMTY1OSA3LjE3OTA2IDIuMjU0MzIgNy4zMTk1NEw3LjQ5OTk2IDEwLjQxOTJMMTIuNzQ1NiA3LjMxOTU0QzEyLjk4MzMgNy4xNzkwNiAxMy4yODk5IDcuMjU3OSAxMy40MzA0IDcuNDk1NjRDMTMuNTcwOSA3LjczMzM3IDEzLjQ5MjEgOC4wMzk5OCAxMy4yNTQzIDguMTgwNDZMNy43NTQzMiAxMS40MzA1QzcuNTk3NDIgMTEuNTIzMiA3LjQwMjUgMTEuNTIzMiA3LjI0NTU5IDExLjQzMDVMMS43NDU1OSA4LjE4MDQ2QzEuNTA3ODYgOC4wMzk5OCAxLjQyOTAxIDcuNzMzMzcgMS41Njk1IDcuNDk1NjRaTTEuNTY5NDkgMTAuNDk1NkMxLjcwOTk4IDEwLjI1NzkgMi4wMTY1OCAxMC4xNzkxIDIuMjU0MzIgMTAuMzE5NUw3LjQ5OTk2IDEzLjQxOTJMMTIuNzQ1NiAxMC4zMTk1QzEyLjk4MzMgMTAuMTc5MSAxMy4yODk5IDEwLjI1NzkgMTMuNDMwNCAxMC40OTU2QzEzLjU3MDkgMTAuNzMzNCAxMy40OTIxIDExLjA0IDEzLjI1NDMgMTEuMTgwNUw3Ljc1NDMyIDE0LjQzMDVDNy41OTc0MiAxNC41MjMyIDcuNDAyNSAxNC41MjMyIDcuMjQ1NTkgMTQuNDMwNUwxLjc0NTU5IDExLjE4MDVDMS41MDc4NSAxMS4wNCAxLjQyOTAxIDEwLjczMzQgMS41Njk0OSAxMC40OTU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sb249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkgMkg2VjEzSDlWMlpNMTAgMlYxM0gxMi41QzEyLjc3NjEgMTMgMTMgMTIuNzc2MSAxMyAxMi41VjIuNUMxMyAyLjIyMzg2IDEyLjc3NjEgMiAxMi41IDJIMTBaTTIuNSAySDVWMTNIMi41QzIuMjIzODYgMTMgMiAxMi43NzYxIDIgMTIuNVYyLjVDMiAyLjIyMzg2IDIuMjIzODYgMiAyLjUgMlpNMi41IDFDMS42NzE1NyAxIDEgMS42NzE1NyAxIDIuNVYxMi41QzEgMTMuMzI4NCAxLjY3MTU3IDE0IDIuNSAxNEgxMi41QzEzLjMyODQgMTQgMTQgMTMuMzI4NCAxNCAxMi41VjIuNUMxNCAxLjY3MTU3IDEzLjMyODQgMSAxMi41IDFIMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sYW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjg5NzkgMi43NUMzLjg5NjY3IDIuNzQ5NzkgNC4wODIzMiAyLjg3NzAxIDQuMTU2NzkgMy4wNzAwM0w3LjM2NjYyIDExLjM5QzcuNDY2MDIgMTEuNjQ3NyA3LjMzNzc0IDExLjkzNzEgNy4wODAxIDEyLjAzNjVDNi44MjI0NyAxMi4xMzU5IDYuNTMzMDQgMTIuMDA3NiA2LjQzMzY1IDExLjc1TDUuMzgyNSA5LjAyNTM3SDIuMDExMzNMMC45NjY5OTIgMTEuNzQ5QzAuODY4MTI4IDEyLjAwNjggMC41Nzg5NjQgMTIuMTM1NyAwLjMyMTEyNiAxMi4wMzY5QzAuMDYzMjg3OCAxMS45MzggLTAuMDY1NTg2NCAxMS42NDg4IDAuMDMzMjc3NCAxMS4zOTFMMy4yMjM0NCAzLjA3MDk5QzMuMjk3NTEgMi44Nzc4MiAzLjQ4MjkgMi43NTAyMSAzLjY4OTc5IDIuNzVaTTMuNjkxNzQgNC42NDI4NEw1LjA1NDU4IDguMTc1MzdIMi4zMzcyNEwzLjY5MTc0IDQuNjQyODRaTTEwLjg5ODkgNS4yMDcwM0M5LjI1ODE4IDUuMjA3MDMgOC4wMDkxNSA2LjY4NTY5IDguMDA5MTUgOC42MDk3MkM4LjAwOTE1IDEwLjYzMzcgOS4zNTgxOCAxMi4wMTI0IDEwLjg5ODkgMTIuMDEyNEMxMS43MjE0IDEyLjAxMjQgMTIuNTc0NCAxMS42NjkyIDEzLjE1NDMgMTEuMDIxOVYxMS41M0MxMy4xNTQzIDExLjc3ODUgMTMuMzU1NyAxMS45OCAxMy42MDQzIDExLjk4QzEzLjg1MjggMTEuOTggMTQuMDU0MyAxMS43Nzg1IDE0LjA1NDMgMTEuNTNWNS43MkMxNC4wNTQzIDUuNDcxNDcgMTMuODUyOCA1LjI3IDEzLjYwNDMgNS4yN0MxMy4zNTU3IDUuMjcgMTMuMTU0MyA1LjQ3MTQ3IDEzLjE1NDMgNS43MlY2LjIyMzE3QzEyLjYwNTQgNS42MDA5NSAxMS43OTI0IDUuMjA3MDMgMTAuODk4OSA1LjIwNzAzWk0xMy4xNTQzIDkuNzk4MjNWNy4zMDE5NUMxMi43NjM5IDYuNTgxMDEgMTEuOTQxNCA2LjA1NzU3IDExLjA4NjggNi4wNTc1N0MxMC4xMDg4IDYuMDU3NTcgOS4wMzUwMyA2Ljk2NTgxIDkuMDM1MDMgOC42MDk1NUM5LjAzNTAzIDEwLjE1MzMgMTAuMDA4OCAxMS4xNjE1IDExLjA4NjggMTEuMTYxNUMxMS45NzAxIDExLjE2MTUgMTIuNzcxOSAxMC40OTUyIDEzLjE1NDMgOS43OTgyM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGxuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjY5ODk5IDUuMjA3MDNDMi4wNTgyMyA1LjIwNzAzIDAuODA5MjA0IDYuNjg1NjkgMC44MDkyMDQgOC42MDk3MkMwLjgwOTIwNCAxMC42MzM3IDIuMTU4MjMgMTIuMDEyNCAzLjY5ODk5IDEyLjAxMjRDNC41MjEyNiAxMi4wMTI0IDUuMzc0MDIgMTEuNjY5MyA1Ljk1MzkgMTEuMDIyM1YxMS41M0M1Ljk1MzkgMTEuNzc4NSA2LjE1NTM3IDExLjk4IDYuNDAzOSAxMS45OEM2LjY1MjQzIDExLjk4IDYuODUzOSAxMS43Nzg1IDYuODUzOSAxMS41M1Y1LjcyMDAxQzYuODUzOSA1LjQ3MTQ5IDYuNjUyNDMgNS4yNzAwMSA2LjQwMzkgNS4yNzAwMUM2LjE1NTM3IDUuMjcwMDEgNS45NTM5IDUuNDcxNDkgNS45NTM5IDUuNzIwMDFWNi4yMjI2OUM1LjQwNTA2IDUuNjAwNzUgNC41OTIxOCA1LjIwNzAzIDMuNjk4OTkgNS4yMDcwM1pNNS45NTM5IDkuNzk5VjcuMzAxMTdDNS41NjMzOSA2LjU4MDY0IDQuNzQxMTggNi4wNTc1NyAzLjg4NjggNi4wNTc1N0MyLjkwODkgNi4wNTc1NyAxLjgzNTA4IDYuOTY1ODEgMS44MzUwOCA4LjYwOTU1QzEuODM1MDggMTAuMTUzMyAyLjgwODg5IDExLjE2MTUgMy44ODY4IDExLjE2MTVDNC43Njk4NCAxMS4xNjE1IDUuNTcxNDEgMTAuNDk1NyA1Ljk1MzkgOS43OTlaTTEwLjc5OSA1LjIwNzAzQzkuMTU4MjMgNS4yMDcwMyA3LjkwOTIgNi42ODU2OSA3LjkwOTIgOC42MDk3MkM3LjkwOTIgMTAuNjMzNyA5LjI1ODIzIDEyLjAxMjQgMTAuNzk5IDEyLjAxMjRDMTEuNjIxNSAxMi4wMTI0IDEyLjQ3NDQgMTEuNjY5MiAxMy4wNTQzIDExLjAyMThWMTEuNTNDMTMuMDU0MyAxMS43Nzg1IDEzLjI1NTggMTEuOTggMTMuNTA0MyAxMS45OEMxMy43NTI5IDExLjk4IDEzLjk1NDMgMTEuNzc4NSAxMy45NTQzIDExLjUzVjUuNzJDMTMuOTU0MyA1LjQ3MTQ3IDEzLjc1MjkgNS4yNyAxMy41MDQzIDUuMjdDMTMuMjU1OCA1LjI3IDEzLjA1NDMgNS40NzE0NyAxMy4wNTQzIDUuNzJWNi4yMjMxOEMxMi41MDU1IDUuNjAwOTUgMTEuNjkyNCA1LjIwNzAzIDEwLjc5OSA1LjIwNzAzWk0xMy4wNTQzIDkuNzk4MjJWNy4zMDE5NkMxMi42NjQgNi41ODEwMiAxMS44NDE1IDYuMDU3NTcgMTAuOTg2OCA2LjA1NzU3QzEwLjAwODkgNi4wNTc1NyA4LjkzNTA4IDYuOTY1ODEgOC45MzUwOCA4LjYwOTU1QzguOTM1MDggMTAuMTUzMyA5LjkwODg5IDExLjE2MTUgMTAuOTg2OCAxMS4xNjE1QzExLjg3MDIgMTEuMTYxNSAxMi42NzIgMTAuNDk1MiAxMy4wNTQzIDkuNzk4MjJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxzbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuMjg5NSAyLjc1QzExLjQ5NjQgMi43NDk3OSAxMS42ODIxIDIuODc3MDEgMTEuNzU2NSAzLjA3MDAzTDE0Ljk2NjQgMTEuMzlDMTUuMDY1NyAxMS42NDc3IDE0LjkzNzUgMTEuOTM3MSAxNC42Nzk4IDEyLjAzNjVDMTQuNDIyMiAxMi4xMzU5IDE0LjEzMjggMTIuMDA3NiAxNC4wMzM0IDExLjc1TDEyLjk4MjIgOS4wMjUzN0g5LjYxMTA2TDguNTY2NzIgMTEuNzQ5QzguNDY3ODYgMTIuMDA2OCA4LjE3ODcgMTIuMTM1NyA3LjkyMDg2IDEyLjAzNjlDNy42NjMwMiAxMS45MzggNy41MzQxNCAxMS42NDg4IDcuNjMzMDEgMTEuMzkxTDEwLjgyMzIgMy4wNzA5OUMxMC44OTcyIDIuODc3ODIgMTEuMDgyNiAyLjc1MDIxIDExLjI4OTUgMi43NVpNMTEuMjkxNSA0LjY0Mjg0TDEyLjY1NDMgOC4xNzUzN0g5LjkzNjk4TDExLjI5MTUgNC42NDI4NFpNMi44OTg5NSA1LjIwNzAzQzEuMjU4MTggNS4yMDcwMyAwLjAwOTE1NTI3IDYuNjg1NjkgMC4wMDkxNTUyNyA4LjYwOTcyQzAuMDA5MTU1MjcgMTAuNjMzNyAxLjM1ODE4IDEyLjAxMjQgMi44OTg5NSAxMi4wMTI0QzMuNzIxNDEgMTIuMDEyNCA0LjU3NDM4IDExLjY2OTIgNS4xNTQyNyAxMS4wMjE5VjExLjUzQzUuMTU0MjcgMTEuNzc4NSA1LjM1NTc0IDExLjk4IDUuNjA0MjcgMTEuOThDNS44NTI4IDExLjk4IDYuMDU0MjcgMTEuNzc4NSA2LjA1NDI3IDExLjUzVjUuNzJDNi4wNTQyNyA1LjQ3MTQ3IDUuODUyOCA1LjI3IDUuNjA0MjcgNS4yN0M1LjM1NTc0IDUuMjcgNS4xNTQyNyA1LjQ3MTQ3IDUuMTU0MjcgNS43MlY2LjIyMzE3QzQuNjA1NDMgNS42MDA5NSAzLjc5MjM2IDUuMjA3MDMgMi44OTg5NSA1LjIwNzAzWk01LjE1NDI3IDkuNzk4MjNWNy4zMDE5NUM0Ljc2MzkzIDYuNTgxMDEgMy45NDE0NCA2LjA1NzU3IDMuMDg2NzUgNi4wNTc1N0MyLjEwODg1IDYuMDU3NTcgMS4wMzUwMyA2Ljk2NTgxIDEuMDM1MDMgOC42MDk1NUMxLjAzNTAzIDEwLjE1MzMgMi4wMDg4NSAxMS4xNjE1IDMuMDg2NzUgMTEuMTYxNUMzLjk3MDExIDExLjE2MTUgNC43NzE5NSAxMC40OTUyIDUuMTU0MjcgOS43OTgyM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGNuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjYyNTUgMi43NUMzLjgzNDc4IDIuNzUgNC4wMjE5MiAyLjg4MDM0IDQuMDk0NDggMy4wNzY2NEw3LjE2OTg1IDExLjM5NjJDNy4yNjU2IDExLjY1NTIgNy4xMzMyNCAxMS45NDI4IDYuODc0MjMgMTIuMDM4NkM2LjYxNTIyIDEyLjEzNDMgNi4zMjc2MyAxMi4wMDIgNi4yMzE4OCAxMS43NDI5TDUuMjIzODcgOS4wMTYwM0gyLjAyNzEyTDEuMDE5MTEgMTEuNzQyOUMwLjkyMzM2MiAxMi4wMDIgMC42MzU3NzQgMTIuMTM0MyAwLjM3Njc2MiAxMi4wMzg2QzAuMTE3NzQ5IDExLjk0MjggLTAuMDE0NjA1MiAxMS42NTUyIDAuMDgxMTQwMSAxMS4zOTYyTDMuMTU2NTEgMy4wNzY2NEMzLjIyOTA4IDIuODgwMzQgMy40MTYyMSAyLjc1IDMuNjI1NSAyLjc1Wk0zLjYyNTUgNC42OTIwN0w0LjkwOTY2IDguMTY2MDNIMi4zNDEzM0wzLjYyNTUgNC42OTIwN1pNMTEuMzcxOSAyLjc1QzExLjU4MTEgMi43NSAxMS43NjgzIDIuODgwMzQgMTEuODQwOCAzLjA3NjY0TDE0LjkxNjIgMTEuMzk2MkMxNS4wMTIgMTEuNjU1MiAxNC44Nzk2IDExLjk0MjggMTQuNjIwNiAxMi4wMzg2QzE0LjM2MTYgMTIuMTM0MyAxNC4wNzQgMTIuMDAyIDEzLjk3ODIgMTEuNzQyOUwxMi45NzAyIDkuMDE2MDNIOS43NzM0OEw4Ljc2NTQ3IDExLjc0MjlDOC42Njk3MiAxMi4wMDIgOC4zODIxMyAxMi4xMzQzIDguMTIzMTIgMTIuMDM4NkM3Ljg2NDExIDExLjk0MjggNy43MzE3NSAxMS42NTUyIDcuODI3NSAxMS4zOTYyTDEwLjkwMjkgMy4wNzY2NEMxMC45NzU0IDIuODgwMzQgMTEuMTYyNiAyLjc1IDExLjM3MTkgMi43NVpNMTEuMzcxOSA0LjY5MjA3TDEyLjY1NiA4LjE2NjAzSDEwLjA4NzdMMTEuMzcxOSA0LjY5MjA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNTUyOTMgMC45OTk5NjlDNC43NTI5NSAwLjk5OTk2OSA0LjkzMzcyIDEuMTE5MTcgNS4wMTI1IDEuMzAzMDFMOC4wMTEwNiA4LjI5OTgyQzguMTE5ODQgOC41NTM2MyA4LjAwMjI2IDguODQ3NTcgNy43NDg0NCA4Ljk1NjM1QzcuNDk0NjMgOS4wNjUxMiA3LjIwMDY5IDguOTQ3NTQgNy4wOTE5MSA4LjY5MzczTDYuMTE2MTMgNi40MTY4NUgyLjk4OTczTDIuMDEzOTUgOC42OTM3M0MxLjkwNTE3IDguOTQ3NTQgMS42MTEyMyA5LjA2NTEyIDEuMzU3NDIgOC45NTYzNUMxLjEwMzYgOC44NDc1NyAwLjk4NjAyMyA4LjU1MzYzIDEuMDk0OCA4LjI5OTgyTDQuMDkzMzYgMS4zMDMwMUM0LjE3MjE0IDEuMTE5MTcgNC4zNTI5MSAwLjk5OTk2OSA0LjU1MjkzIDAuOTk5OTY5Wk00LjU1MjkzIDIuNzY5MjlMNS43NTE4NiA1LjU2Njg1SDMuMzU0TDQuNTUyOTMgMi43NjkyOVpNMTEuMDU2MiA5LjAwMjE0QzExLjI2MTcgOS4wMDIxNCAxMS40NDYzIDguODc2MzMgMTEuNTIxNSA4LjY4NTAyTDE0LjI3MzMgMS42ODI5OUMxNC4zNzQzIDEuNDI1OTggMTQuMjQ3OCAxLjEzNTc1IDEzLjk5MDggMS4wMzQ3NUMxMy43MzM4IDAuOTMzNzQ3IDEzLjQ0MzYgMS4wNjAyMSAxMy4zNDI2IDEuMzE3MjJMMTEuMDU2MiA3LjEzNTE0TDguNzY5NzMgMS4zMTcyMkM4LjY2ODczIDEuMDYwMjEgOC4zNzg1IDAuOTMzNzQ3IDguMTIxNSAxLjAzNDc1QzcuODY0NDkgMS4xMzU3NSA3LjczODAyIDEuNDI1OTggNy44MzkwMiAxLjY4Mjk5TDEwLjU5MDggOC42ODUwMkMxMC42NjYgOC44NzYzMyAxMC44NTA2IDkuMDAyMTQgMTEuMDU2MiA5LjAwMjE0Wk0xNC45NTM3IDEyLjQ5OTlDMTQuOTUzNyAxMi42MDYgMTQuOTExNSAxMi43MDc3IDE0LjgzNjUgMTIuNzgyOEwxMi44MzY1IDE0Ljc4MjhDMTIuNjgwMyAxNC45MzkgMTIuNDI3MSAxNC45MzkgMTIuMjcwOCAxNC43ODI4QzEyLjExNDYgMTQuNjI2NSAxMi4xMTQ2IDE0LjM3MzMgMTIuMjcwOCAxNC4yMTcxTDEzLjU4OCAxMi44OTk5SDEuNTE5MzdMMi44MzY1MyAxNC4yMTcxQzIuOTkyNzQgMTQuMzczMyAyLjk5Mjc0IDE0LjYyNjUgMi44MzY1MyAxNC43ODI4QzIuNjgwMzIgMTQuOTM5IDIuNDI3MDUgMTQuOTM5IDIuMjcwODQgMTQuNzgyOEwwLjI3MDg0MyAxMi43ODI4QzAuMTk1ODI4IDEyLjcwNzcgMC4xNTM2ODcgMTIuNjA2IDAuMTUzNjg3IDEyLjQ5OTlDMC4xNTM2ODcgMTIuMzkzOCAwLjE5NTgyOCAxMi4yOTIxIDAuMjcwODQzIDEyLjIxNzFMMi4yNzA4NCAxMC4yMTcxQzIuNDI3MDUgMTAuMDYwOSAyLjY4MDMyIDEwLjA2MDkgMi44MzY1MyAxMC4yMTcxQzIuOTkyNzQgMTAuMzczMyAyLjk5Mjc0IDEwLjYyNjUgMi44MzY1MyAxMC43ODI4TDEuNTE5MzcgMTIuMDk5OUwxMy41ODggMTIuMDk5OUwxMi4yNzA4IDEwLjc4MjhDMTIuMTE0NiAxMC42MjY1IDEyLjExNDYgMTAuMzczMyAxMi4yNzA4IDEwLjIxNzFDMTIuNDI3MSAxMC4wNjA5IDEyLjY4MDMgMTAuMDYwOSAxMi44MzY1IDEwLjIxNzFMMTQuODM2NSAxMi4yMTcxQzE0LjkxMTUgMTIuMjkyMSAxNC45NTM3IDEyLjM5MzggMTQuOTUzNyAxMi40OTk5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguNjk2NjYgMC4wNDAzNTRDOC45MDg1OSAwLjEzMTAzOCA5LjAzMTA1IDAuMzU0ODU2IDguOTkzMTUgMC41ODIyMzVMOC4wOTAxOSA2LjAwMDAxSDEyLjQ5OTlDMTIuNjg5MyA2LjAwMDAxIDEyLjg2MjUgNi4xMDcwMSAxMi45NDcyIDYuMjc2NEMxMy4wMzE4IDYuNDQ1NzkgMTMuMDEzNiA2LjY0ODUgMTIuODk5OSA2LjhMNi44OTk5NyAxNC44QzYuNzYxNjYgMTQuOTg0NCA2LjUxNTIgMTUuMDUwMyA2LjMwMzI3IDE0Ljk1OTZDNi4wOTEzNCAxNC44NjkgNS45Njg4OCAxNC42NDUxIDYuMDA2NzggMTQuNDE3OEw2LjkwOTc0IDguOTk5OTlIMi40OTk5OUMyLjMxMDYxIDguOTk5OTkgMi4xMzc0NyA4Ljg5Mjk5IDIuMDUyNzggOC43MjM2QzEuOTY4MDggOC41NTQyMSAxLjk4NjM2IDguMzUxNSAyLjA5OTk5IDguMkw4LjA5OTk2IDAuMjAwMDM3QzguMjM4MjcgMC4wMTU2MjU1IDguNDg0NzMgLTAuMDUwMzMwMSA4LjY5NjY2IDAuMDQwMzU0Wk0zLjQ5OTk5IDhINy40OTk5NkM3LjY0Njk0IDggNy43ODY0NyA4LjA2NDY2IDcuODgxNDcgOC4xNzY4MUM3Ljk3NjQ3IDguMjg4OTUgOC4wMTczMiA4LjQzNzIyIDcuOTkzMTYgOC41ODIxOUw3LjMzMDI2IDEyLjU1OTZMMTEuNDk5OSA3SDcuNDk5OTZDNy4zNTI5OSA3IDcuMjEzNDYgNi45MzUzNCA3LjExODQ2IDYuODIzMTlDNy4wMjM0NiA2LjcxMTA1IDYuOTgyNjEgNi41NjI3OCA3LjAwNjc3IDYuNDE3ODFMNy42Njk2NyAyLjQ0MDQyTDMuNDk5OTkgOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHBuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjc4MjMzIDIuMjE3MTNDMy43MDczMiAyLjE0MjEyIDMuNjA1NTcgMi4wOTk5OCAzLjQ5OTQ5IDIuMDk5OThDMy4zOTM0IDIuMDk5OTggMy4yOTE2NiAyLjE0MjEyIDMuMjE2NjQgMi4yMTcxM0wxLjIxNjY0IDQuMjE3MTNDMS4wNjA0NCA0LjM3MzM0IDEuMDYwNDQgNC42MjY2MSAxLjIxNjY0IDQuNzgyODJDMS4zNzI4NSA0LjkzOTAzIDEuNjI2MTIgNC45MzkwMyAxLjc4MjMzIDQuNzgyODJMMy4wOTk0OSAzLjQ2NTY2TDMuMDk5NDkgMTEuNTM0M0wxLjc4MjMzIDEwLjIxNzFDMS42MjYxMiAxMC4wNjA5IDEuMzcyODUgMTAuMDYwOSAxLjIxNjY0IDEwLjIxNzFDMS4wNjA0MyAxMC4zNzMzIDEuMDYwNDMgMTAuNjI2NiAxLjIxNjY0IDEwLjc4MjhMMy4yMTY2NCAxMi43ODI4QzMuMjkxNjYgMTIuODU3OCAzLjM5MzQgMTIuOSAzLjQ5OTQ5IDEyLjlDMy42MDU1NyAxMi45IDMuNzA3MzEgMTIuODU3OCAzLjc4MjMzIDEyLjc4MjhMNS43ODIzMyAxMC43ODI4QzUuOTM4NTQgMTAuNjI2NiA1LjkzODU0IDEwLjM3MzMgNS43ODIzMyAxMC4yMTcxQzUuNjI2MTIgMTAuMDYwOSA1LjM3Mjg1IDEwLjA2MDkgNS4yMTY2NCAxMC4yMTcxTDMuODk5NDkgMTEuNTM0M0wzLjg5OTQ5IDMuNDY1NjZMNS4yMTY2NCA0Ljc4MjgyQzUuMzcyODUgNC45MzkwMyA1LjYyNjEyIDQuOTM5MDMgNS43ODIzMyA0Ljc4MjgyQzUuOTM4NTQgNC42MjY2MSA1LjkzODU0IDQuMzczMzQgNS43ODIzMyA0LjIxNzEzTDMuNzgyMzMgMi4yMTcxM1pNOC40OTk5OCAzLjk5OTk3QzguMjIzODMgMy45OTk5NyA3Ljk5OTk4IDQuMjIzODIgNy45OTk5OCA0LjQ5OTk3QzcuOTk5OTggNC43NzYxMSA4LjIyMzgzIDQuOTk5OTcgOC40OTk5OCA0Ljk5OTk3SDE0LjVDMTQuNzc2MSA0Ljk5OTk3IDE1IDQuNzc2MTEgMTUgNC40OTk5N0MxNSA0LjIyMzgyIDE0Ljc3NjEgMy45OTk5NyAxNC41IDMuOTk5OTdIOC40OTk5OFpNNy45OTk5OCA3LjQ5OTk3QzcuOTk5OTggNy4yMjM4MiA4LjIyMzgzIDYuOTk5OTcgOC40OTk5OCA2Ljk5OTk3SDE0LjVDMTQuNzc2MSA2Ljk5OTk3IDE1IDcuMjIzODIgMTUgNy40OTk5N0MxNSA3Ljc3NjExIDE0Ljc3NjEgNy45OTk5NyAxNC41IDcuOTk5OTdIOC40OTk5OEM4LjIyMzgzIDcuOTk5OTcgNy45OTk5OCA3Ljc3NjExIDcuOTk5OTggNy40OTk5N1pNOC40OTk5OCA5Ljk5OTk3QzguMjIzODMgOS45OTk5NyA3Ljk5OTk4IDEwLjIyMzggNy45OTk5OCAxMC41QzcuOTk5OTggMTAuNzc2MSA4LjIyMzgzIDExIDguNDk5OTggMTFIMTQuNUMxNC43NzYxIDExIDE1IDEwLjc3NjEgMTUgMTAuNUMxNSAxMC4yMjM4IDE0Ljc3NjEgOS45OTk5NyAxNC41IDkuOTk5OTdIOC40OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGZuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjYyNDcxIDQuMDAwMDFMNC41NjQwMiA0LjAwMDAxQzQuMDQxMzQgMy45OTk5MyAzLjcwNjg3IDMuOTk5ODggMy40MTgyIDQuMDU1QzIuMjM3OSA0LjI4MDM5IDEuMjk4NDYgNS4xNzA1MyAxLjA1ODE1IDYuMzMwMzVDMC45OTk1MzggNi42MTMyMSAwLjk5OTYwNCA2LjkzOTk4IDAuOTk5NzAzIDcuNDM2ODlMMC45OTk3MTEgNy41MDAwMUwwLjk5OTcwMyA3LjU2MzEzQzAuOTk5NjA0IDguMDYwMDQgMC45OTk1MzggOC4zODY4MSAxLjA1ODE1IDguNjY5NjdDMS4yOTg0NiA5LjgyOTUgMi4yMzc5IDEwLjcxOTYgMy40MTgyIDEwLjk0NUMzLjcwNjg4IDExLjAwMDEgNC4wNDEzNSAxMS4wMDAxIDQuNTY0MDMgMTFMNC42MjQ3MSAxMUg1LjQ5OTcxQzUuNzc1ODUgMTEgNS45OTk3MSAxMC43NzYyIDUuOTk5NzEgMTAuNUM1Ljk5OTcxIDEwLjIyMzkgNS43NzU4NSAxMCA1LjQ5OTcxIDEwSDQuNjI0NzFDNC4wMjA4NCAxMCAzLjc4OTA3IDkuOTk3NzcgMy42MDU3NyA5Ljk2Mjc3QzIuODAyNjIgOS44MDk0IDIuMTkxNTcgOS4yMTEwOCAyLjAzNzM1IDguNDY2NzhDMi4wMDIzMyA4LjI5Nzc4IDEuOTk5NzEgOC4wODI1MSAxLjk5OTcxIDcuNTAwMDFDMS45OTk3MSA2LjkxNzUyIDIuMDAyMzMgNi43MDIyNSAyLjAzNzM1IDYuNTMzMjRDMi4xOTE1NyA1Ljc4ODk1IDIuODAyNjIgNS4xOTA2MiAzLjYwNTc3IDUuMDM3MjVDMy43ODkwNyA1LjAwMjI1IDQuMDIwODQgNS4wMDAwMSA0LjYyNDcxIDUuMDAwMDFINS40OTk3MUM1Ljc3NTg1IDUuMDAwMDEgNS45OTk3MSA0Ljc3NjE1IDUuOTk5NzEgNC41MDAwMUM1Ljk5OTcxIDQuMjIzODcgNS43NzU4NSA0LjAwMDAxIDUuNDk5NzEgNC4wMDAwMUg0LjYyNDcxWk0xMC4zNzQ3IDUuMDAwMDFDMTAuOTc4NiA1LjAwMDAxIDExLjIxMDQgNS4wMDIyNSAxMS4zOTM3IDUuMDM3MjVDMTIuMTk2OCA1LjE5MDYyIDEyLjgwNzkgNS43ODg5NSAxMi45NjIxIDYuNTMzMjRDMTIuOTk3MSA2LjcwMjI1IDEyLjk5OTcgNi45MTc1MiAxMi45OTk3IDcuNTAwMDFDMTIuOTk5NyA4LjA4MjUxIDEyLjk5NzEgOC4yOTc3OCAxMi45NjIxIDguNDY2NzhDMTIuODA3OSA5LjIxMTA4IDEyLjE5NjggOS44MDk0IDExLjM5MzcgOS45NjI3N0MxMS4yMTA0IDkuOTk3NzcgMTAuOTc4NiAxMCAxMC4zNzQ3IDEwSDkuNDk5NzFDOS4yMjM1NyAxMCA4Ljk5OTcxIDEwLjIyMzkgOC45OTk3MSAxMC41QzguOTk5NzEgMTAuNzc2MiA5LjIyMzU3IDExIDkuNDk5NzEgMTFIMTAuMzc0N0wxMC40MzU0IDExQzEwLjk1ODEgMTEuMDAwMSAxMS4yOTI1IDExLjAwMDEgMTEuNTgxMiAxMC45NDVDMTIuNzYxNSAxMC43MTk2IDEzLjcwMSA5LjgyOTUgMTMuOTQxMyA4LjY2OTY3QzEzLjk5OTkgOC4zODY4MSAxMy45OTk4IDguMDYwMDUgMTMuOTk5NyA3LjU2MzE0TDEzLjk5OTcgNy41MDAwMUwxMy45OTk3IDcuNDM2ODhDMTMuOTk5OCA2LjkzOTk4IDEzLjk5OTkgNi42MTMyMSAxMy45NDEzIDYuMzMwMzVDMTMuNzAxIDUuMTcwNTMgMTIuNzYxNSA0LjI4MDM5IDExLjU4MTIgNC4wNTVDMTEuMjkyNSAzLjk5OTg4IDEwLjk1ODEgMy45OTk5MyAxMC40MzU0IDQuMDAwMDFMMTAuMzc0NyA0LjAwMDAxSDkuNDk5NzFDOS4yMjM1NyA0LjAwMDAxIDguOTk5NzEgNC4yMjM4NyA4Ljk5OTcxIDQuNTAwMDFDOC45OTk3MSA0Ljc3NjE1IDkuMjIzNTcgNS4wMDAwMSA5LjQ5OTcxIDUuMDAwMDFIMTAuMzc0N1pNNS4wMDAzOCA3QzQuNzI0MjQgNyA0LjUwMDM4IDcuMjIzODYgNC41MDAzOCA3LjVDNC41MDAzOCA3Ljc3NjE0IDQuNzI0MjQgOCA1LjAwMDM4IDhIMTAuMDAwNEMxMC4yNzY1IDggMTAuNTAwNCA3Ljc3NjE0IDEwLjUwMDQgNy41QzEwLjUwMDQgNy4yMjM4NiAxMC4yNzY1IDcgMTAuMDAwNCA3SDUuMDAwMzhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxobj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC41MTE5NCAzLjAwNTQxQzkuMTg4MjkgMi41NDU5NCAxMC4wNDM1IDIuNTM2OTQgMTAuNjc4OCAyLjk1NDE5QzEwLjgyMzEgMy4wNDg5MyAxMC45NzcxIDMuMTk5MyAxMS4zODkgMy42MTExOUMxMS44MDA5IDQuMDIzMDcgMTEuOTUxMyA0LjE3NzE0IDEyLjA0NiA0LjMyMTQxQzEyLjQ2MzMgNC45NTY3NSAxMi40NTQzIDUuODExOTIgMTEuOTk0OCA2LjQ4ODI3QzExLjg4OTkgNi42NDI2NCAxMS43Mjc2IDYuODA4MTEgMTEuMzAwNiA3LjIzNTExTDEwLjY4MTkgNy44NTM4M0MxMC40ODY3IDguMDQ5MDkgMTAuNDg2NyA4LjM2NTY3IDEwLjY4MTkgOC41NjA5M0MxMC44NzcyIDguNzU2MiAxMS4xOTM4IDguNzU2MiAxMS4zODkgOC41NjA5M0wxMi4wMDc3IDcuOTQyMjFMMTIuMDUwNyA3Ljg5OTI5QzEyLjQyMDMgNy41Mjk3NiAxMi42NTY4IDcuMjkzMyAxMi44MjIgNy4wNTAyQzEzLjQ5NzIgNi4wNTYyMyAxMy41MzIxIDQuNzYyNTIgMTIuODgxOSAzLjc3MjQ4QzEyLjcyMzMgMy41MzEwMiAxMi40OTIyIDMuMzAwMDEgMTIuMTQwOCAyLjk0ODcxTDEyLjA5NjEgMi45MDQwOEwxMi4wNTE1IDIuODU5NDJDMTEuNzAwMiAyLjUwOCAxMS40NjkyIDIuMjc2ODkgMTEuMjI3NyAyLjExODMyQzEwLjIzNzcgMS40NjgxMyA4Ljk0Mzk4IDEuNTAyOTkgNy45NTAwMSAyLjE3ODIyQzcuNzA2OTEgMi4zNDMzNiA3LjQ3MDQ0IDIuNTc5OTEgNy4xMDA5IDIuOTQ5NTVMNy4wNTggMi45OTI0N0w2LjQzOTI4IDMuNjExMTlDNi4yNDQwMSAzLjgwNjQ1IDYuMjQ0MDEgNC4xMjMwMyA2LjQzOTI4IDQuMzE4MjlDNi42MzQ1NCA0LjUxMzU1IDYuOTUxMTIgNC41MTM1NSA3LjE0NjM4IDQuMzE4MjlMNy43NjUxIDMuNjk5NTdDOC4xOTIxIDMuMjcyNTcgOC4zNTc1NyAzLjExMDI3IDguNTExOTQgMy4wMDU0MVpNNC4zMTc5NiA3LjE0NjcyQzQuNTEzMjIgNi45NTE0NiA0LjUxMzIyIDYuNjM0ODcgNC4zMTc5NiA2LjQzOTYxQzQuMTIyNjkgNi4yNDQzNSAzLjgwNjExIDYuMjQ0MzUgMy42MTA4NSA2LjQzOTYxTDIuOTkyMTMgNy4wNTgzM0wyLjk0OTIyIDcuMTAxMjRDMi41Nzk1NyA3LjQ3MDc3IDIuMzQzMDMgNy43MDcyNCAyLjE3Nzg4IDcuOTUwMzVDMS41MDI2NSA4Ljk0NDMyIDEuNDY3OCAxMC4yMzggMi4xMTc5OSAxMS4yMjgxQzIuMjc2NTYgMTEuNDY5NSAyLjUwNzY2IDExLjcwMDUgMi44NTkxIDEyLjA1MThMMi45MDM3NCAxMi4wOTY1TDIuOTQ4MzcgMTIuMTQxMUMzLjI5OTY3IDEyLjQ5MjUgMy41MzA2OCAxMi43MjM3IDMuNzcyMTQgMTIuODgyMkM0Ljc2MjE5IDEzLjUzMjQgNi4wNTU4OSAxMy40OTc2IDcuMDQ5ODYgMTIuODIyM0M3LjI5Mjk2IDEyLjY1NzIgNy41Mjk0MyAxMi40MjA2IDcuODk4OTYgMTIuMDUxTDcuODk4OTcgMTIuMDUxTDcuOTQxODggMTIuMDA4MUw4LjU2MDYgMTEuMzg5NEM4Ljc1NTg2IDExLjE5NDEgOC43NTU4NiAxMC44Nzc1IDguNTYwNiAxMC42ODIzQzguMzY1MzMgMTAuNDg3IDguMDQ4NzUgMTAuNDg3IDcuODUzNDkgMTAuNjgyM0w3LjIzNDc3IDExLjMwMUM2LjgwNzc3IDExLjcyOCA2LjY0MjMgMTEuODkwMyA2LjQ4Nzk0IDExLjk5NTFDNS44MTE1OCAxMi40NTQ2IDQuOTU2NDIgMTIuNDYzNiA0LjMyMTA3IDEyLjA0NjRDNC4xNzY4MSAxMS45NTE2IDQuMDIyNzQgMTEuODAxMiAzLjYxMDg1IDExLjM4OTRDMy4xOTg5NiAxMC45Nzc1IDMuMDQ4NiAxMC44MjM0IDIuOTUzODUgMTAuNjc5MUMyLjUzNjYxIDEwLjA0MzggMi41NDU2MSA5LjE4ODYzIDMuMDA1MDcgOC41MTIyN0MzLjEwOTkzIDguMzU3OTEgMy4yNzIyNCA4LjE5MjQ0IDMuNjk5MjQgNy43NjU0NEw0LjMxNzk2IDcuMTQ2NzJaTTkuNjIxNzIgNi4wODU1OEM5LjgxNjk4IDUuODkwMzIgOS44MTY5OCA1LjU3MzczIDkuNjIxNzIgNS4zNzg0N0M5LjQyNjQ2IDUuMTgzMjEgOS4xMDk4OCA1LjE4MzIxIDguOTE0NjEgNS4zNzg0N0w1LjM3OTA4IDguOTE0MDFDNS4xODM4MiA5LjEwOTI3IDUuMTgzODIgOS40MjU4NSA1LjM3OTA4IDkuNjIxMTFDNS41NzQzNCA5LjgxNjM3IDUuODkwOTIgOS44MTYzNyA2LjA4NjE5IDkuNjIxMTFMOS42MjE3MiA2LjA4NTU4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZ249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjM1MzYgMi4zNTM1NUMxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAxLjg0MTcxIDEzLjM1MzYgMS42NDY0NUMxMy4xNTgzIDEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEyLjY0NjQgMS42NDY0NUwxLjY0NjQ1IDEyLjY0NjRDMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTMuMTU4MyAxLjY0NjQ1IDEzLjM1MzZDMS44NDE3MSAxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAyLjM1MzU1IDEzLjM1MzZMMTMuMzUzNiAyLjM1MzU1Wk0yLjAzNzM1IDguNDY2NzhDMi4xNzM5OCA5LjEyNjE5IDIuNjY5MTggOS42NzEwMyAzLjMzODg2IDkuODkzMzhMMi41NzgzMyAxMC42NTM5QzEuODA4NDMgMTAuMjUzNCAxLjIzNzg0IDkuNTM2OTMgMS4wNTgxNSA4LjY2OTY3QzAuOTk5NTM4IDguMzg2ODEgMC45OTk2MDQgOC4wNjAwNCAwLjk5OTcwMyA3LjU2MzEzTDAuOTk5NzExIDcuNTAwMDFMMC45OTk3MDMgNy40MzY4OUMwLjk5OTYwNCA2LjkzOTk4IDAuOTk5NTM4IDYuNjEzMjEgMS4wNTgxNSA2LjMzMDM1QzEuMjk4NDYgNS4xNzA1MyAyLjIzNzkgNC4yODAzOSAzLjQxODIgNC4wNTVDMy43MDY4NyAzLjk5OTg4IDQuMDQxMzQgMy45OTk5MyA0LjU2NDAyIDQuMDAwMDFMNC42MjQ3MSA0LjAwMDAxSDUuNDk5NzFDNS43NzU4NSA0LjAwMDAxIDUuOTk5NzEgNC4yMjM4NyA1Ljk5OTcxIDQuNTAwMDFDNS45OTk3MSA0Ljc3NjE1IDUuNzc1ODUgNS4wMDAwMSA1LjQ5OTcxIDUuMDAwMDFINC42MjQ3MUM0LjAyMDg0IDUuMDAwMDEgMy43ODkwNyA1LjAwMjI1IDMuNjA1NzcgNS4wMzcyNUMyLjgwMjYyIDUuMTkwNjIgMi4xOTE1NyA1Ljc4ODk1IDIuMDM3MzUgNi41MzMyNEMyLjAwMjMzIDYuNzAyMjUgMS45OTk3MSA2LjkxNzUyIDEuOTk5NzEgNy41MDAwMUMxLjk5OTcxIDguMDgyNTEgMi4wMDIzMyA4LjI5Nzc4IDIuMDM3MzUgOC40NjY3OFpNMTIuOTYyMSA2LjUzMzI0QzEyLjgyNTUgNS44NzM5NyAxMi4zMzA0IDUuMzI5MjIgMTEuNjYxIDUuMTA2NzlMMTIuNDIxNSA0LjM0NjMxQzEzLjE5MTIgNC43NDY4NiAxMy43NjE2IDUuNDYzMjMgMTMuOTQxMyA2LjMzMDM1QzEzLjk5OTkgNi42MTMyMSAxMy45OTk4IDYuOTM5OTggMTMuOTk5NyA3LjQzNjg4TDEzLjk5OTcgNy41MDAwMUwxMy45OTk3IDcuNTYzMTRDMTMuOTk5OCA4LjA2MDA1IDEzLjk5OTkgOC4zODY4MSAxMy45NDEzIDguNjY5NjdDMTMuNzAxIDkuODI5NSAxMi43NjE1IDEwLjcxOTYgMTEuNTgxMiAxMC45NDVDMTEuMjkyNSAxMS4wMDAxIDEwLjk1ODEgMTEuMDAwMSAxMC40MzU0IDExTDEwLjM3NDcgMTFIOS40OTk3MUM5LjIyMzU3IDExIDguOTk5NzEgMTAuNzc2MiA4Ljk5OTcxIDEwLjVDOC45OTk3MSAxMC4yMjM5IDkuMjIzNTcgMTAgOS40OTk3MSAxMEgxMC4zNzQ3QzEwLjk3ODYgMTAgMTEuMjEwNCA5Ljk5Nzc3IDExLjM5MzcgOS45NjI3N0MxMi4xOTY4IDkuODA5NCAxMi44MDc5IDkuMjExMDggMTIuOTYyMSA4LjQ2Njc4QzEyLjk5NzEgOC4yOTc3OCAxMi45OTk3IDguMDgyNTEgMTIuOTk5NyA3LjUwMDAxQzEyLjk5OTcgNi45MTc1MiAxMi45OTcxIDYuNzAyMjUgMTIuOTYyMSA2LjUzMzI0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNTAwMjEgMEM0Ljc3NjM1IDAgNS4wMDAyIDAuMjIzODUzIDUuMDAwMiAwLjQ5OTk5VjIuNDk5OTVDNS4wMDAyIDIuNzc2MDkgNC43NzYzNSAyLjk5OTk0IDQuNTAwMjEgMi45OTk5NEM0LjIyNDA4IDIuOTk5OTQgNC4wMDAyMiAyLjc3NjA5IDQuMDAwMjIgMi40OTk5NVYwLjQ5OTk5QzQuMDAwMjIgMC4yMjM4NTMgNC4yMjQwOCAwIDQuNTAwMjEgMFpNMC42NDY0NTEgMC42NDY0N0MwLjg0MTcxIDAuNDUxMjEyIDEuMTU4MjkgMC40NTEyMTIgMS4zNTM1NCAwLjY0NjQ3TDIuODUzNTEgMi4xNDY0NEMzLjA0ODc3IDIuMzQxNyAzLjA0ODc3IDIuNjU4MjcgMi44NTM1MSAyLjg1MzUzQzIuNjU4MjYgMy4wNDg3OSAyLjM0MTY4IDMuMDQ4NzkgMi4xNDY0MiAyLjg1MzUzTDAuNjQ2NDUyIDEuMzUzNTZDMC40NTExOTMgMS4xNTgzIDAuNDUxMTkzIDAuODQxNzI4IDAuNjQ2NDUxIDAuNjQ2NDdaTTAuMDAwMzA1MTcgNC40OTk5MUMwLjAwMDMwNTE3IDQuMjIzNzcgMC4yMjQxNTggMy45OTk5MiAwLjUwMDI5NSAzLjk5OTkySDIuNTAwMjVDMi43NzYzOSAzLjk5OTkyIDMuMDAwMjQgNC4yMjM3NyAzLjAwMDI0IDQuNDk5OTFDMy4wMDAyNCA0Ljc3NjA1IDIuNzc2MzkgNC45OTk5IDIuNTAwMjUgNC45OTk5SDAuNTAwMjk1QzAuMjI0MTU4IDQuOTk5OSAwLjAwMDMwNTE3IDQuNzc2MDUgMC4wMDAzMDUxNyA0LjQ5OTkxWk0xMi4wMDAxIDEwLjQ5OThDMTIuMDAwMSAxMC4yMjM2IDEyLjIyMzkgOS45OTk4IDEyLjUwMDEgOS45OTk4SDE0LjVDMTQuNzc2MSA5Ljk5OTggMTUgMTAuMjIzNiAxNSAxMC40OTk4QzE1IDEwLjc3NTkgMTQuNzc2MSAxMC45OTk4IDE0LjUgMTAuOTk5OEgxMi41MDAxQzEyLjIyMzkgMTAuOTk5OCAxMi4wMDAxIDEwLjc3NTkgMTIuMDAwMSAxMC40OTk4Wk0xMC41MDAxIDExLjk5OThDMTAuNzc2MiAxMS45OTk4IDExLjAwMDEgMTIuMjIzNiAxMS4wMDAxIDEyLjQ5OTdWMTQuNDk5N0MxMS4wMDAxIDE0Ljc3NTggMTAuNzc2MiAxNC45OTk3IDEwLjUwMDEgMTQuOTk5N0MxMC4yMjQgMTQuOTk5NyAxMC4wMDAxIDE0Ljc3NTggMTAuMDAwMSAxNC40OTk3VjEyLjQ5OTdDMTAuMDAwMSAxMi4yMjM2IDEwLjIyNCAxMS45OTk4IDEwLjUwMDEgMTEuOTk5OFpNMTIuMTQ2MiAxMi4xNDYyQzEyLjM0MTUgMTEuOTUxIDEyLjY1OCAxMS45NTEgMTIuODUzMyAxMi4xNDYyTDE0LjM1MzMgMTMuNjQ2MkMxNC41NDg1IDEzLjg0MTUgMTQuNTQ4NSAxNC4xNTggMTQuMzUzMyAxNC4zNTMzQzE0LjE1OCAxNC41NDg1IDEzLjg0MTQgMTQuNTQ4NSAxMy42NDYyIDE0LjM1MzNMMTIuMTQ2MiAxMi44NTMzQzExLjk1MSAxMi42NTgxIDExLjk1MSAxMi4zNDE1IDEyLjE0NjIgMTIuMTQ2MlpNNy43NjQ3OCAzLjY5OTM4QzguMTkxNzcgMy4yNzIzOCA4LjM1NzI0IDMuMTEwMDggOC41MTE2IDMuMDA1MjJDOS4xODc5NCAyLjU0NTc3IDEwLjA0MzEgMi41MzY3NyAxMC42Nzg0IDIuOTU0MDFDMTAuODIyNyAzLjA0ODc1IDEwLjk3NjcgMy4xOTkxMSAxMS4zODg2IDMuNjEwOTlDMTEuODAwNSA0LjAyMjg3IDExLjk1MDkgNC4xNzY5NCAxMi4wNDU2IDQuMzIxMkMxMi40NjI4IDQuOTU2NTMgMTIuNDUzOSA1LjgxMTY4IDExLjk5NDQgNi40ODgwMkMxMS44ODk1IDYuNjQyMzggMTEuNzI3MiA2LjgwNzg1IDExLjMwMDIgNy4yMzQ4NEwxMC42ODE1IDcuODUzNTRDMTAuNDg2MyA4LjA0ODggMTAuNDg2MyA4LjM2NTM4IDEwLjY4MTUgOC41NjA2NEMxMC44NzY4IDguNzU1ODkgMTEuMTkzNCA4Ljc1NTg5IDExLjM4ODYgOC41NjA2NEwxMi4wMDczIDcuOTQxOTNMMTIuMDUwMiA3Ljg5OTAzQzEyLjQxOTkgNy41Mjk1IDEyLjY1NjQgNy4yOTMwMyAxMi44MjE2IDcuMDQ5OTNDMTMuNDk2OCA2LjA1NTk4IDEzLjUzMTYgNC43NjIzIDEyLjg4MTUgMy43NzIyOEMxMi43MjI5IDMuNTMwODMgMTIuNDkxOCAzLjI5OTgyIDEyLjE0MDQgMi45NDg1M0wxMi4wOTU3IDIuOTAzOUwxMi4wNTExIDIuODU5MjVDMTEuNjk5OCAyLjUwNzgyIDExLjQ2ODggMi4yNzY3MiAxMS4yMjczIDIuMTE4MTZDMTAuMjM3MyAxLjQ2Nzk4IDguOTQzNjQgMS41MDI4NCA3Ljk0OTY4IDIuMTc4MDVDNy43MDY1OSAyLjM0MzE5IDcuNDcwMTIgMi41Nzk3MyA3LjEwMDYgMi45NDkzNkw3LjEwMDYgMi45NDkzN0w3LjA1NzY5IDIuOTkyMjhMNi40Mzg5OCAzLjYxMDk5QzYuMjQzNzIgMy44MDYyNSA2LjI0MzcyIDQuMTIyODIgNi40Mzg5OCA0LjMxODA4QzYuNjM0MjQgNC41MTMzNCA2Ljk1MDgxIDQuNTEzMzQgNy4xNDYwNyA0LjMxODA4TDcuNzY0NzggMy42OTkzOFpNMi45OTE5MSA3LjA1ODA3TDIuOTQ4OTkgNy4xMDA5N0MyLjU3OTM1IDcuNDcwNSAyLjM0MjgyIDcuNzA2OTcgMi4xNzc2NyA3Ljk1MDA2QzEuNTAyNDYgOC45NDQwMSAxLjQ2NzYgMTAuMjM3NyAyLjExNzc4IDExLjIyNzdDMi4yNzYzNCAxMS40NjkyIDIuNTA3NDQgMTEuNzAwMiAyLjg1ODg2IDEyLjA1MTVMMi44NTg4OCAxMi4wNTE1TDIuOTAzNTIgMTIuMDk2MUwyLjk0ODE1IDEyLjE0MDdMMi45NDgxNSAxMi4xNDA3TDIuOTQ4MTcgMTIuMTQwOEMzLjI5OTQ1IDEyLjQ5MjIgMy41MzA0NSAxMi43MjMzIDMuNzcxOSAxMi44ODE4QzQuNzYxOTMgMTMuNTMyIDYuMDU1NiAxMy40OTcyIDcuMDQ5NTYgMTIuODIxOUM3LjI5MjY1IDEyLjY1NjggNy41MjkxMiAxMi40MjAzIDcuODk4NjUgMTIuMDUwNkw3Ljk0MTU1IDEyLjAwNzdMOC41NjAyNiAxMS4zODlDOC43NTU1MiAxMS4xOTM3IDguNzU1NTIgMTAuODc3MiA4LjU2MDI2IDEwLjY4MTlDOC4zNjUgMTAuNDg2NyA4LjA0ODQyIDEwLjQ4NjcgNy44NTMxNyAxMC42ODE5TDcuMjM0NDYgMTEuMzAwNkM2LjgwNzQ3IDExLjcyNzYgNi42NDIgMTEuODg5OSA2LjQ4NzY0IDExLjk5NDhDNS44MTEzIDEyLjQ1NDIgNC45NTYxNSAxMi40NjMyIDQuMzIwODIgMTIuMDQ2QzQuMTc2NTYgMTEuOTUxMiA0LjAyMjQ5IDExLjgwMDkgMy42MTA2MSAxMS4zODlDMy4xOTg3MyAxMC45NzcxIDMuMDQ4MzcgMTAuODIzMSAyLjk1MzYzIDEwLjY3ODhDMi41MzYzOSAxMC4wNDM1IDIuNTQ1MzkgOS4xODgzMiAzLjAwNDg0IDguNTExOThDMy4xMDk3MSA4LjM1NzYxIDMuMjcyMDEgOC4xOTIxNSAzLjY5OSA3Ljc2NTE2TDQuMzE3NyA3LjE0NjQ1QzQuNTEyOTYgNi45NTExOSA0LjUxMjk2IDYuNjM0NjIgNC4zMTc3IDYuNDM5MzZDNC4xMjI0NSA2LjI0NDEgMy44MDU4NyA2LjI0NDEgMy42MTA2MSA2LjQzOTM2TDIuOTkxOTEgNy4wNTgwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LENuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjU2NDI3IDMuOTk5ODhDNC41ODQyMiAzLjk5OTg5IDQuNjA0NDUgMy45OTk4OSA0LjYyNDk2IDMuOTk5ODlINS40OTk5NkM1Ljc3NjEgMy45OTk4OSA1Ljk5OTk2IDQuMjIzNzUgNS45OTk5NiA0LjQ5OTg5QzUuOTk5OTYgNC43NzYwMyA1Ljc3NjEgNC45OTk4OSA1LjQ5OTk2IDQuOTk5ODlINC42MjQ5NkM0LjAyMTA4IDQuOTk5ODkgMy43ODkzMiA1LjAwMjEzIDMuNjA2MDEgNS4wMzcxM0MyLjgwMjg3IDUuMTkwNSAyLjE5MTgxIDUuNzg4ODMgMi4wMzc1OSA2LjUzMzEyQzIuMDAyNTcgNi43MDIxMiAxLjk5OTk2IDYuOTE3MzkgMS45OTk5NiA3LjQ5OTg5QzEuOTk5OTYgOC4wODIzOSAyLjAwMjU3IDguMjk3NjYgMi4wMzc1OSA4LjQ2NjY2QzIuMTkxODEgOS4yMTA5NSAyLjgwMjg3IDkuODA5MjggMy42MDYwMSA5Ljk2MjY1QzMuNzg5MzIgOS45OTc2NSA0LjAyMTA4IDkuOTk5ODkgNC42MjQ5NiA5Ljk5OTg5SDUuNDk5OTZDNS43NzYxIDkuOTk5ODkgNS45OTk5NiAxMC4yMjM3IDUuOTk5OTYgMTAuNDk5OUM1Ljk5OTk2IDEwLjc3NiA1Ljc3NjEgMTAuOTk5OSA1LjQ5OTk2IDEwLjk5OTlINC42MjQ5NkM0LjYwNDQ1IDEwLjk5OTkgNC41ODQyMiAxMC45OTk5IDQuNTY0MjcgMTAuOTk5OUM0LjA0MTU5IDExIDMuNzA3MTIgMTEgMy40MTg0NSAxMC45NDQ5QzIuMjM4MTQgMTAuNzE5NSAxLjI5ODcxIDkuODI5MzcgMS4wNTgzOSA4LjY2OTU1QzAuOTk5NzgyIDguMzg2NjkgMC45OTk4NDggOC4wNTk5MiAwLjk5OTk0NyA3LjU2MzAxQzAuOTk5OTUxIDcuNTQyMjcgMC45OTk5NTUgNy41MjEyMyAwLjk5OTk1NSA3LjQ5OTg5QzAuOTk5OTU1IDcuNDc4NTUgMC45OTk5NTEgNy40NTc1MSAwLjk5OTk0NyA3LjQzNjc3QzAuOTk5ODQ4IDYuOTM5ODYgMC45OTk3ODIgNi42MTMwOSAxLjA1ODM5IDYuMzMwMjNDMS4yOTg3MSA1LjE3MDQxIDIuMjM4MTQgNC4yODAyNyAzLjQxODQ1IDQuMDU0ODhDMy43MDcxMiAzLjk5OTc2IDQuMDQxNTkgMy45OTk4MSA0LjU2NDI3IDMuOTk5ODhaTTExLjM5MzkgNS4wMzcxM0MxMS4yMTA2IDUuMDAyMTMgMTAuOTc4OCA0Ljk5OTg5IDEwLjM3NSA0Ljk5OTg5SDkuNDk5OTZDOS4yMjM4MSA0Ljk5OTg5IDguOTk5OTYgNC43NzYwMyA4Ljk5OTk2IDQuNDk5ODlDOC45OTk5NiA0LjIyMzc1IDkuMjIzODEgMy45OTk4OSA5LjQ5OTk2IDMuOTk5ODlIMTAuMzc1QzEwLjM5NTUgMy45OTk4OSAxMC40MTU3IDMuOTk5ODkgMTAuNDM1NiAzLjk5OTg4QzEwLjk1ODMgMy45OTk4MSAxMS4yOTI4IDMuOTk5NzYgMTEuNTgxNSA0LjA1NDg4QzEyLjc2MTggNC4yODAyNyAxMy43MDEyIDUuMTcwNDEgMTMuOTQxNSA2LjMzMDIzQzE0LjAwMDEgNi42MTMwOSAxNC4wMDAxIDYuOTM5ODUgMTQgNy40MzY3NkMxNCA3LjQ1NzUgMTQgNy40Nzg1NCAxNCA3LjQ5OTg5QzE0IDcuNTIxMjQgMTQgNy41NDIyOCAxNCA3LjU2MzAyQzE0LjAwMDEgOC4wNTk5MiAxNC4wMDAxIDguMzg2NjkgMTMuOTQxNSA4LjY2OTU1QzEzLjcwMTIgOS44MjkzNyAxMi43NjE4IDEwLjcxOTUgMTEuNTgxNSAxMC45NDQ5QzExLjI5MjggMTEgMTAuOTU4MyAxMSAxMC40MzU2IDEwLjk5OTlDMTAuNDE1NyAxMC45OTk5IDEwLjM5NTUgMTAuOTk5OSAxMC4zNzUgMTAuOTk5OUg5LjQ5OTk2QzkuMjIzODEgMTAuOTk5OSA4Ljk5OTk2IDEwLjc3NiA4Ljk5OTk2IDEwLjQ5OTlDOC45OTk5NiAxMC4yMjM3IDkuMjIzODEgOS45OTk4OSA5LjQ5OTk2IDkuOTk5ODlIMTAuMzc1QzEwLjk3ODggOS45OTk4OSAxMS4yMTA2IDkuOTk3NjUgMTEuMzkzOSA5Ljk2MjY1QzEyLjE5NyA5LjgwOTI4IDEyLjgwODEgOS4yMTA5NSAxMi45NjIzIDguNDY2NjZDMTIuOTk3MyA4LjI5NzY2IDEzIDguMDgyMzkgMTMgNy40OTk4OUMxMyA2LjkxNzM5IDEyLjk5NzMgNi43MDIxMiAxMi45NjIzIDYuNTMzMTJDMTIuODA4MSA1Ljc4ODgzIDEyLjE5NyA1LjE5MDUgMTEuMzkzOSA1LjAzNzEzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwLjY3ODggMi45NTQxOUMxMC4wNDM1IDIuNTM2OTQgOS4xODgyOSAyLjU0NTk0IDguNTExOTQgMy4wMDU0MUM4LjM1NzU3IDMuMTEwMjcgOC4xOTIxIDMuMjcyNTcgNy43NjUxIDMuNjk5NTdMNy4xNDYzOCA0LjMxODI5QzYuOTUxMTIgNC41MTM1NSA2LjYzNDU0IDQuNTEzNTUgNi40MzkyOCA0LjMxODI5QzYuMjQ0MDEgNC4xMjMwMyA2LjI0NDAxIDMuODA2NDUgNi40MzkyOCAzLjYxMTE5TDcuMDU4IDIuOTkyNDdDNy4wNzI1IDIuOTc3OTcgNy4wODY3OSAyLjk2MzY2IDcuMTAwOSAyLjk0OTU1QzcuNDcwNDQgMi41Nzk5MSA3LjcwNjkxIDIuMzQzMzYgNy45NTAwMSAyLjE3ODIyQzguOTQzOTggMS41MDI5OSAxMC4yMzc3IDEuNDY4MTMgMTEuMjI3NyAyLjExODMyQzExLjQ2OTIgMi4yNzY4OSAxMS43MDAyIDIuNTA4IDEyLjA1MTUgMi44NTk0MkMxMi4wNjYyIDIuODc0MSAxMi4wODEgMi44ODg5OCAxMi4wOTYxIDIuOTA0MDhDMTIuMTExMiAyLjkxOTE3IDEyLjEyNjEgMi45MzQwNSAxMi4xNDA4IDIuOTQ4NzFDMTIuNDkyMiAzLjMwMDAxIDEyLjcyMzMgMy41MzEwMiAxMi44ODE5IDMuNzcyNDhDMTMuNTMyMSA0Ljc2MjUyIDEzLjQ5NzIgNi4wNTYyMyAxMi44MjIgNy4wNTAyQzEyLjY1NjggNy4yOTMzIDEyLjQyMDMgNy41Mjk3NiAxMi4wNTA3IDcuODk5MjlDMTIuMDM2NiA3LjkxMzQgMTIuMDIyMiA3LjkyNzcxIDEyLjAwNzcgNy45NDIyMUwxMS4zODkgOC41NjA5M0MxMS4xOTM4IDguNzU2MiAxMC44NzcyIDguNzU2MiAxMC42ODE5IDguNTYwOTNDMTAuNDg2NyA4LjM2NTY3IDEwLjQ4NjcgOC4wNDkwOSAxMC42ODE5IDcuODUzODNMMTEuMzAwNiA3LjIzNTExQzExLjcyNzYgNi44MDgxMSAxMS44ODk5IDYuNjQyNjQgMTEuOTk0OCA2LjQ4ODI3QzEyLjQ1NDMgNS44MTE5MiAxMi40NjMzIDQuOTU2NzUgMTIuMDQ2IDQuMzIxNDFDMTEuOTUxMyA0LjE3NzE0IDExLjgwMDkgNC4wMjMwNyAxMS4zODkgMy42MTExOUMxMC45NzcxIDMuMTk5MyAxMC44MjMxIDMuMDQ4OTMgMTAuNjc4OCAyLjk1NDE5Wk00LjMxNzk2IDYuNDM5NjFDNC41MTMyMiA2LjYzNDg3IDQuNTEzMjIgNi45NTE0NiA0LjMxNzk2IDcuMTQ2NzJMMy42OTkyNCA3Ljc2NTQ0QzMuMjcyMjQgOC4xOTI0NCAzLjEwOTkzIDguMzU3OTEgMy4wMDUwNyA4LjUxMjI3QzIuNTQ1NjEgOS4xODg2MyAyLjUzNjYxIDEwLjA0MzggMi45NTM4NSAxMC42NzkxQzMuMDQ4NiAxMC44MjM0IDMuMTk4OTYgMTAuOTc3NSAzLjYxMDg1IDExLjM4OTRDNC4wMjI3NCAxMS44MDEyIDQuMTc2ODEgMTEuOTUxNiA0LjMyMTA3IDEyLjA0NjRDNC45NTY0MiAxMi40NjM2IDUuODExNTggMTIuNDU0NiA2LjQ4Nzk0IDExLjk5NTFDNi42NDIzIDExLjg5MDMgNi44MDc3NyAxMS43MjggNy4yMzQ3NyAxMS4zMDFMNy44NTM0OSAxMC42ODIzQzguMDQ4NzUgMTAuNDg3IDguMzY1MzMgMTAuNDg3IDguNTYwNiAxMC42ODIzQzguNzU1ODYgMTAuODc3NSA4Ljc1NTg2IDExLjE5NDEgOC41NjA2IDExLjM4OTRMNy45NDE4OCAxMi4wMDgxQzcuOTI3MzggMTIuMDIyNiA3LjkxMzA3IDEyLjAzNjkgNy44OTg5NyAxMi4wNTFDNy41Mjk0MyAxMi40MjA2IDcuMjkyOTYgMTIuNjU3MiA3LjA0OTg2IDEyLjgyMjNDNi4wNTU4OSAxMy40OTc2IDQuNzYyMTkgMTMuNTMyNCAzLjc3MjE0IDEyLjg4MjJDMy41MzA2OCAxMi43MjM3IDMuMjk5NjcgMTIuNDkyNSAyLjk0ODM3IDEyLjE0MTFDMi45MzM3MSAxMi4xMjY0IDIuOTE4ODMgMTIuMTExNiAyLjkwMzc0IDEyLjA5NjVDMi44ODg2NSAxMi4wODE0IDIuODczNzcgMTIuMDY2NSAyLjg1OTEgMTIuMDUxOEMyLjUwNzY2IDExLjcwMDUgMi4yNzY1NiAxMS40Njk1IDIuMTE3OTkgMTEuMjI4MUMxLjQ2NzggMTAuMjM4IDEuNTAyNjUgOC45NDQzMiAyLjE3Nzg4IDcuOTUwMzVDMi4zNDMwMyA3LjcwNzI0IDIuNTc5NTcgNy40NzA3NyAyLjk0OTIyIDcuMTAxMjRDMi45NjMzMyA3LjA4NzEzIDIuOTc3NjMgNy4wNzI4MyAyLjk5MjEzIDcuMDU4MzNMMy42MTA4NSA2LjQzOTYxQzMuODA2MTEgNi4yNDQzNSA0LjEyMjY5IDYuMjQ0MzUgNC4zMTc5NiA2LjQzOTYxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sd249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSA1LjI1QzEuOTE0MjEgNS4yNSAyLjI1IDQuOTE0MjEgMi4yNSA0LjVDMi4yNSA0LjA4NTc5IDEuOTE0MjEgMy43NSAxLjUgMy43NUMxLjA4NTc5IDMuNzUgMC43NSA0LjA4NTc5IDAuNzUgNC41QzAuNzUgNC45MTQyMSAxLjA4NTc5IDUuMjUgMS41IDUuMjVaTTQgNC41QzQgNC4yMjM4NiA0LjIyMzg2IDQgNC41IDRIMTMuNUMxMy43NzYxIDQgMTQgNC4yMjM4NiAxNCA0LjVDMTQgNC43NzYxNCAxMy43NzYxIDUgMTMuNSA1SDQuNUM0LjIyMzg2IDUgNCA0Ljc3NjE0IDQgNC41Wk00LjUgN0M0LjIyMzg2IDcgNCA3LjIyMzg2IDQgNy41QzQgNy43NzYxNCA0LjIyMzg2IDggNC41IDhIMTMuNUMxMy43NzYxIDggMTQgNy43NzYxNCAxNCA3LjVDMTQgNy4yMjM4NiAxMy43NzYxIDcgMTMuNSA3SDQuNVpNNC41IDEwQzQuMjIzODYgMTAgNCAxMC4yMjM5IDQgMTAuNUM0IDEwLjc3NjEgNC4yMjM4NiAxMSA0LjUgMTFIMTMuNUMxMy43NzYxIDExIDE0IDEwLjc3NjEgMTQgMTAuNUMxNCAxMC4yMjM5IDEzLjc3NjEgMTAgMTMuNSAxMEg0LjVaTTIuMjUgNy41QzIuMjUgNy45MTQyMSAxLjkxNDIxIDguMjUgMS41IDguMjVDMS4wODU3OSA4LjI1IDAuNzUgNy45MTQyMSAwLjc1IDcuNUMwLjc1IDcuMDg1NzkgMS4wODU3OSA2Ljc1IDEuNSA2Ljc1QzEuOTE0MjEgNi43NSAyLjI1IDcuMDg1NzkgMi4yNSA3LjVaTTEuNSAxMS4yNUMxLjkxNDIxIDExLjI1IDIuMjUgMTAuOTE0MiAyLjI1IDEwLjVDMi4yNSAxMC4wODU4IDEuOTE0MjEgOS43NSAxLjUgOS43NUMxLjA4NTc5IDkuNzUgMC43NSAxMC4wODU4IDAuNzUgMTAuNUMwLjc1IDEwLjkxNDIgMS4wODU3OSAxMS4yNSAxLjUgMTEuMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxibj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSA0LjYzNjAxQzUgMy43NjAzMSA1LjI0MjE5IDMuMTA1NCA1LjY0MzIzIDIuNjczNTdDNi4wMzkzNCAyLjI0NzA1IDYuNjQ1ODIgMS45NzgzIDcuNTAxNCAxLjk3ODNDOC4zNTc0NSAxLjk3ODMgOC45NjMwNiAyLjI0NjUyIDkuMzU4MjMgMi42NzIwOEM5Ljc1ODM4IDMuMTAyOTkgMTAgMy43NTcwOCAxMCA0LjYzMzI1VjUuOTk5OTlINVY0LjYzNjAxWk00IDUuOTk5OTlWNC42MzYwMUM0IDMuNTgxNDggNC4yOTMzOSAyLjY1NzU0IDQuOTEwNDkgMS45OTMwN0M1LjUzMjUyIDEuMzIzMjkgNi40MjY3NSAwLjk3ODMwMiA3LjUwMTQgMC45NzgzMDJDOC41NzU4MyAwLjk3ODMwMiA5LjQ2OTUyIDEuMzIyMzMgMTAuMDkxIDEuOTkxNjJDMTAuNzA3NiAyLjY1NTU3IDExIDMuNTc4OTYgMTEgNC42MzMyNVY1Ljk5OTk5SDEyQzEyLjU1MjMgNS45OTk5OSAxMyA2LjQ0NzcxIDEzIDYuOTk5OTlWMTNDMTMgMTMuNTUyMyAxMi41NTIzIDE0IDEyIDE0SDNDMi40NDc3MiAxNCAyIDEzLjU1MjMgMiAxM1Y2Ljk5OTk5QzIgNi40NDc3MSAyLjQ0NzcyIDUuOTk5OTkgMyA1Ljk5OTk5SDRaTTMgNi45OTk5OUgxMlYxM0gzVjYuOTk5OTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTg2IDBDNi4zMjU3IDAgNS4zNjEwNyAwLjM4OTQzIDQuNzM3NTMgMS4xOTM2MUM0LjIzNzQ1IDEuODM4NTYgNCAyLjY4MjQyIDQgMy42MzMyNUg1QzUgMi44NDMxMyA1LjE5NjkxIDIuMjMzMTIgNS41Mjc4IDEuODA2MzZDNS45MTYxNSAxLjMwNTUyIDYuNTUxNTIgMSA3LjQ5ODYgMUM4LjM1NjgzIDEgOC45NjMzNiAxLjI2NTAyIDkuMzU4NDYgMS42ODYyM0M5Ljc1NzkzIDIuMTEyMTEgMTAgMi43NjA0NCAxMCAzLjYzNjAxVjZIM0MyLjQ0NzcyIDYgMiA2LjQ0NzcyIDIgN1YxM0MyIDEzLjU1MjMgMi40NDc3MiAxNCAzIDE0SDEyQzEyLjU1MjMgMTQgMTMgMTMuNTUyMyAxMyAxM1Y3QzEzIDYuNDQ3NzEgMTIuNTUyMyA2IDEyIDZIMTFWMy42MzYwMUMxMSAyLjU4MTM1IDEwLjcwNjUgMS42NjE2NyAxMC4wODc4IDEuMDAyMUM5LjQ2NDc3IDAuMzM3ODcxIDguNTcwNjEgMCA3LjQ5ODYgMFpNMyA3SDEyVjEzSDNWN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHhuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05IDMuNjM2MDFDOSAyLjc2MDQ0IDkuMjQyMDcgMi4xMTIxMSA5LjY0MTU0IDEuNjg2MjNDMTAuMDM2NiAxLjI2NTAyIDEwLjY0MzIgMSAxMS41MDE0IDFDMTIuNDQ4NSAxIDEzLjA4MzkgMS4zMDU1MiAxMy40NzIyIDEuODA2MzZDMTMuODAzMSAyLjIzMzEyIDE0IDIuODQzMTMgMTQgMy42MzMyNUgxNUMxNSAyLjY4MjQyIDE0Ljc2MjYgMS44Mzg1NiAxNC4yNjI1IDEuMTkzNjFDMTMuNjM4OSAwLjM4OTQzIDEyLjY3NDMgMCAxMS41MDE0IDBDMTAuNDI5NCAwIDkuNTM1MjMgMC4zMzc4NzEgOC45MTIxOCAxLjAwMjFDOC4yOTM1MSAxLjY2MTY3IDggMi41ODEzNSA4IDMuNjM2MDFWNkgxQzAuNDQ3NzE1IDYgMCA2LjQ0NzcyIDAgN1YxM0MwIDEzLjU1MjMgMC40NDc3MTUgMTQgMSAxNEgxMEMxMC41NTIzIDE0IDExIDEzLjU1MjMgMTEgMTNWN0MxMSA2LjQ0NzcyIDEwLjU1MjMgNiAxMCA2SDlWMy42MzYwMVpNMSA3SDEwVjEzSDFWN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGtuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjM1MzU1IDEuODUzNTVDMy41NDg4MiAxLjY1ODI5IDMuNTQ4ODIgMS4zNDE3MSAzLjM1MzU1IDEuMTQ2NDVDMy4xNTgyOSAwLjk1MTE4NCAyLjg0MTcxIDAuOTUxMTg0IDIuNjQ2NDUgMS4xNDY0NUwwLjY0NjQ0NyAzLjE0NjQ1QzAuNDUxMTg0IDMuMzQxNzEgMC40NTExODQgMy42NTgyOSAwLjY0NjQ0NyAzLjg1MzU1TDIuNjQ2NDUgNS44NTM1NUMyLjg0MTcxIDYuMDQ4ODIgMy4xNTgyOSA2LjA0ODgyIDMuMzUzNTUgNS44NTM1NUMzLjU0ODgyIDUuNjU4MjkgMy41NDg4MiA1LjM0MTcxIDMuMzUzNTUgNS4xNDY0NUwyLjIwNzExIDRIOS41QzExLjQzMyA0IDEzIDUuNTY3IDEzIDcuNUMxMyA3Ljc3NjE0IDEzLjIyMzkgOCAxMy41IDhDMTMuNzc2MSA4IDE0IDcuNzc2MTQgMTQgNy41QzE0IDUuMDE0NzIgMTEuOTg1MyAzIDkuNSAzSDIuMjA3MTFMMy4zNTM1NSAxLjg1MzU1Wk0yIDcuNUMyIDcuMjIzODYgMS43NzYxNCA3IDEuNSA3QzEuMjIzODYgNyAxIDcuMjIzODYgMSA3LjVDMSA5Ljk4NTI4IDMuMDE0NzIgMTIgNS41IDEySDEyLjc5MjlMMTEuNjQ2NCAxMy4xNDY0QzExLjQ1MTIgMTMuMzQxNyAxMS40NTEyIDEzLjY1ODMgMTEuNjQ2NCAxMy44NTM2QzExLjg0MTcgMTQuMDQ4OCAxMi4xNTgzIDE0LjA0ODggMTIuMzUzNiAxMy44NTM2TDE0LjM1MzYgMTEuODUzNkMxNC41NDg4IDExLjY1ODMgMTQuNTQ4OCAxMS4zNDE3IDE0LjM1MzYgMTEuMTQ2NEwxMi4zNTM2IDkuMTQ2NDVDMTIuMTU4MyA4Ljk1MTE4IDExLjg0MTcgOC45NTExOCAxMS42NDY0IDkuMTQ2NDVDMTEuNDUxMiA5LjM0MTcxIDExLjQ1MTIgOS42NTgyOSAxMS42NDY0IDkuODUzNTVMMTIuNzkyOSAxMUg1LjVDMy41NjcgMTEgMiA5LjQzMyAyIDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFNuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy45IDAuNDk5OTc2QzEzLjkgMC4yNzkwNjIgMTMuNzIwOSAwLjA5OTk3NTYgMTMuNSAwLjA5OTk3NTZDMTMuMjc5MSAwLjA5OTk3NTYgMTMuMSAwLjI3OTA2MiAxMy4xIDAuNDk5OTc2VjEuMDk5OThIMTIuNUMxMi4yNzkxIDEuMDk5OTggMTIuMSAxLjI3OTA2IDEyLjEgMS40OTk5OEMxMi4xIDEuNzIwODkgMTIuMjc5MSAxLjg5OTk4IDEyLjUgMS44OTk5OEgxMy4xVjIuNDk5OThDMTMuMSAyLjcyMDg5IDEzLjI3OTEgMi44OTk5OCAxMy41IDIuODk5OThDMTMuNzIwOSAyLjg5OTk4IDEzLjkgMi43MjA4OSAxMy45IDIuNDk5OThWMS44OTk5OEgxNC41QzE0LjcyMDkgMS44OTk5OCAxNC45IDEuNzIwODkgMTQuOSAxLjQ5OTk4QzE0LjkgMS4yNzkwNiAxNC43MjA5IDEuMDk5OTggMTQuNSAxLjA5OTk4SDEzLjlWMC40OTk5NzZaTTExLjg1MzYgMy4xNDY0MkMxMi4wNDg4IDMuMzQxNjggMTIuMDQ4OCAzLjY1ODI2IDExLjg1MzYgMy44NTM1M0wxMC44NTM2IDQuODUzNTNDMTAuNjU4MyA1LjA0ODc5IDEwLjM0MTcgNS4wNDg3OSAxMC4xNDY1IDQuODUzNTNDOS45NTEyIDQuNjU4MjcgOS45NTEyIDQuMzQxNjkgMTAuMTQ2NSA0LjE0NjQyTDExLjE0NjQgMy4xNDY0M0MxMS4zNDE3IDIuOTUxMTYgMTEuNjU4MyAyLjk1MTE2IDExLjg1MzYgMy4xNDY0MlpNOS44NTM1NyA1LjE0NjQyQzEwLjA0ODggNS4zNDE2OCAxMC4wNDg4IDUuNjU4MjcgOS44NTM1NyA1Ljg1MzUzTDIuODUzNTUgMTIuODUzNUMyLjY1ODI5IDEzLjA0ODggMi4zNDE3MSAxMy4wNDg4IDIuMTQ2NDUgMTIuODUzNUMxLjk1MTE4IDEyLjY1ODMgMS45NTExOCAxMi4zNDE3IDIuMTQ2NDUgMTIuMTQ2NEw5LjE0NjQ2IDUuMTQ2NDJDOS4zNDE3MiA0Ljk1MTE2IDkuNjU4MzEgNC45NTExNiA5Ljg1MzU3IDUuMTQ2NDJaTTEzLjUgNS4wOTk5OEMxMy43MjA5IDUuMDk5OTggMTMuOSA1LjI3OTA2IDEzLjkgNS40OTk5OFY2LjA5OTk4SDE0LjVDMTQuNzIwOSA2LjA5OTk4IDE0LjkgNi4yNzkwNiAxNC45IDYuNDk5OThDMTQuOSA2LjcyMDg5IDE0LjcyMDkgNi44OTk5OCAxNC41IDYuODk5OThIMTMuOVY3LjQ5OTk4QzEzLjkgNy43MjA4OSAxMy43MjA5IDcuODk5OTggMTMuNSA3Ljg5OTk4QzEzLjI3OTEgNy44OTk5OCAxMy4xIDcuNzIwODkgMTMuMSA3LjQ5OTk4VjYuODk5OThIMTIuNUMxMi4yNzkxIDYuODk5OTggMTIuMSA2LjcyMDg5IDEyLjEgNi40OTk5OEMxMi4xIDYuMjc5MDYgMTIuMjc5MSA2LjA5OTk4IDEyLjUgNi4wOTk5OEgxMy4xVjUuNDk5OThDMTMuMSA1LjI3OTA2IDEzLjI3OTEgNS4wOTk5OCAxMy41IDUuMDk5OThaTTguOTAwMDIgMC40OTk5NzZDOC45MDAwMiAwLjI3OTA2MiA4LjcyMDkzIDAuMDk5OTc1NiA4LjUwMDAyIDAuMDk5OTc1NkM4LjI3OTEgMC4wOTk5NzU2IDguMTAwMDIgMC4yNzkwNjIgOC4xMDAwMiAwLjQ5OTk3NlYxLjA5OTk4SDcuNTAwMDJDNy4yNzkxIDEuMDk5OTggNy4xMDAwMiAxLjI3OTA2IDcuMTAwMDIgMS40OTk5OEM3LjEwMDAyIDEuNzIwODkgNy4yNzkxIDEuODk5OTggNy41MDAwMiAxLjg5OTk4SDguMTAwMDJWMi40OTk5OEM4LjEwMDAyIDIuNzIwODkgOC4yNzkxIDIuODk5OTggOC41MDAwMiAyLjg5OTk4QzguNzIwOTMgMi44OTk5OCA4LjkwMDAyIDIuNzIwODkgOC45MDAwMiAyLjQ5OTk4VjEuODk5OThIOS41MDAwMkM5LjcyMDkzIDEuODk5OTggOS45MDAwMiAxLjcyMDg5IDkuOTAwMDIgMS40OTk5OEM5LjkwMDAyIDEuMjc5MDYgOS43MjA5MyAxLjA5OTk4IDkuNTAwMDIgMS4wOTk5OEg4LjkwMDAyVjAuNDk5OTc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sT249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwIDYuNUMxMCA4LjQzMyA4LjQzMyAxMCA2LjUgMTBDNC41NjcgMTAgMyA4LjQzMyAzIDYuNUMzIDQuNTY3IDQuNTY3IDMgNi41IDNDOC40MzMgMyAxMCA0LjU2NyAxMCA2LjVaTTkuMzA4ODQgMTAuMDE1OUM4LjUzOTAxIDEwLjYzMTggNy41NjI1MSAxMSA2LjUgMTFDNC4wMTQ3MiAxMSAyIDguOTg1MjggMiA2LjVDMiA0LjAxNDcyIDQuMDE0NzIgMiA2LjUgMkM4Ljk4NTI4IDIgMTEgNC4wMTQ3MiAxMSA2LjVDMTEgNy41NjI1MSAxMC42MzE4IDguNTM5MDEgMTAuMDE1OSA5LjMwODg0TDEyLjg1MzYgMTIuMTQ2NEMxMy4wNDg4IDEyLjM0MTcgMTMuMDQ4OCAxMi42NTgzIDEyLjg1MzYgMTIuODUzNkMxMi42NTgzIDEzLjA0ODggMTIuMzQxNyAxMy4wNDg4IDEyLjE0NjQgMTIuODUzNkw5LjMwODg0IDEwLjAxNTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxNbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS40OTk4OCAyLjAwMDEyQzEuNzc2MDIgMi4wMDAxMiAxLjk5OTg4IDEuNzc2MjYgMS45OTk4OCAxLjUwMDEyQzEuOTk5ODggMS4yMjM5OCAxLjc3NjAyIDEuMDAwMTIgMS40OTk4OCAxLjAwMDEyQzEuMjIzNzQgMS4wMDAxMiAwLjk5OTg3OCAxLjIyMzk4IDAuOTk5ODc4IDEuNTAwMTJDMC45OTk4NzggMS43NzYyNiAxLjIyMzc0IDIuMDAwMTIgMS40OTk4OCAyLjAwMDEyWk00LjQ5OTg4IDIuMDAwMTJDNC43NzYwMiAyLjAwMDEyIDQuOTk5ODggMS43NzYyNiA0Ljk5OTg4IDEuNTAwMTJDNC45OTk4OCAxLjIyMzk4IDQuNzc2MDIgMS4wMDAxMiA0LjQ5OTg4IDEuMDAwMTJDNC4yMjM3NCAxLjAwMDEyIDMuOTk5ODggMS4yMjM5OCAzLjk5OTg4IDEuNTAwMTJDMy45OTk4OCAxLjc3NjI2IDQuMjIzNzQgMi4wMDAxMiA0LjQ5OTg4IDIuMDAwMTJaTTcuOTk5ODggMS41MDAxMkM3Ljk5OTg4IDEuNzc2MjYgNy43NzYwMiAyLjAwMDEyIDcuNDk5ODggMi4wMDAxMkM3LjIyMzc0IDIuMDAwMTIgNi45OTk4OCAxLjc3NjI2IDYuOTk5ODggMS41MDAxMkM2Ljk5OTg4IDEuMjIzOTggNy4yMjM3NCAxLjAwMDEyIDcuNDk5ODggMS4wMDAxMkM3Ljc3NjAyIDEuMDAwMTIgNy45OTk4OCAxLjIyMzk4IDcuOTk5ODggMS41MDAxMlpNMTAuNDk5OSAyLjAwMDEyQzEwLjc3NiAyLjAwMDEyIDEwLjk5OTkgMS43NzYyNiAxMC45OTk5IDEuNTAwMTJDMTAuOTk5OSAxLjIyMzk4IDEwLjc3NiAxLjAwMDEyIDEwLjQ5OTkgMS4wMDAxMkMxMC4yMjM3IDEuMDAwMTIgOS45OTk4OCAxLjIyMzk4IDkuOTk5ODggMS41MDAxMkM5Ljk5OTg4IDEuNzc2MjYgMTAuMjIzNyAyLjAwMDEyIDEwLjQ5OTkgMi4wMDAxMlpNMTMuOTk5OSAxLjUwMDEyQzEzLjk5OTkgMS43NzYyNiAxMy43NzYgMi4wMDAxMiAxMy40OTk5IDIuMDAwMTJDMTMuMjIzNyAyLjAwMDEyIDEyLjk5OTkgMS43NzYyNiAxMi45OTk5IDEuNTAwMTJDMTIuOTk5OSAxLjIyMzk4IDEzLjIyMzcgMS4wMDAxMiAxMy40OTk5IDEuMDAwMTJDMTMuNzc2IDEuMDAwMTIgMTMuOTk5OSAxLjIyMzk4IDEzLjk5OTkgMS41MDAxMlpNMS40OTk4OCAxNC4wMDAxQzEuNzc2MDIgMTQuMDAwMSAxLjk5OTg4IDEzLjc3NjMgMS45OTk4OCAxMy41MDAxQzEuOTk5ODggMTMuMjI0IDEuNzc2MDIgMTMuMDAwMSAxLjQ5OTg4IDEzLjAwMDFDMS4yMjM3NCAxMy4wMDAxIDAuOTk5ODc4IDEzLjIyNCAwLjk5OTg3OCAxMy41MDAxQzAuOTk5ODc4IDEzLjc3NjMgMS4yMjM3NCAxNC4wMDAxIDEuNDk5ODggMTQuMDAwMVpNMS45OTk4OCAxMC41MDAxQzEuOTk5ODggMTAuNzc2MyAxLjc3NjAyIDExLjAwMDEgMS40OTk4OCAxMS4wMDAxQzEuMjIzNzQgMTEuMDAwMSAwLjk5OTg3OCAxMC43NzYzIDAuOTk5ODc4IDEwLjUwMDFDMC45OTk4NzggMTAuMjI0IDEuMjIzNzQgMTAuMDAwMSAxLjQ5OTg4IDEwLjAwMDFDMS43NzYwMiAxMC4wMDAxIDEuOTk5ODggMTAuMjI0IDEuOTk5ODggMTAuNTAwMVpNMS40OTk4OCA4LjAwMDEyQzEuNzc2MDIgOC4wMDAxMiAxLjk5OTg4IDcuNzc2MjYgMS45OTk4OCA3LjUwMDEyQzEuOTk5ODggNy4yMjM5OCAxLjc3NjAyIDcuMDAwMTIgMS40OTk4OCA3LjAwMDEyQzEuMjIzNzQgNy4wMDAxMiAwLjk5OTg3OCA3LjIyMzk4IDAuOTk5ODc4IDcuNTAwMTJDMC45OTk4NzggNy43NzYyNiAxLjIyMzc0IDguMDAwMTIgMS40OTk4OCA4LjAwMDEyWk0xLjk5OTg4IDQuNTAwMTJDMS45OTk4OCA0Ljc3NjI2IDEuNzc2MDIgNS4wMDAxMiAxLjQ5OTg4IDUuMDAwMTJDMS4yMjM3NCA1LjAwMDEyIDAuOTk5ODc4IDQuNzc2MjYgMC45OTk4NzggNC41MDAxMkMwLjk5OTg3OCA0LjIyMzk4IDEuMjIzNzQgNC4wMDAxMiAxLjQ5OTg4IDQuMDAwMTJDMS43NzYwMiA0LjAwMDEyIDEuOTk5ODggNC4yMjM5OCAxLjk5OTg4IDQuNTAwMTJaTTEzLjQ5OTkgMTEuMDAwMUMxMy43NzYgMTEuMDAwMSAxMy45OTk5IDEwLjc3NjMgMTMuOTk5OSAxMC41MDAxQzEzLjk5OTkgMTAuMjI0IDEzLjc3NiAxMC4wMDAxIDEzLjQ5OTkgMTAuMDAwMUMxMy4yMjM3IDEwLjAwMDEgMTIuOTk5OSAxMC4yMjQgMTIuOTk5OSAxMC41MDAxQzEyLjk5OTkgMTAuNzc2MyAxMy4yMjM3IDExLjAwMDEgMTMuNDk5OSAxMS4wMDAxWk0xMy45OTk5IDcuNTAwMTJDMTMuOTk5OSA3Ljc3NjI2IDEzLjc3NiA4LjAwMDEyIDEzLjQ5OTkgOC4wMDAxMkMxMy4yMjM3IDguMDAwMTIgMTIuOTk5OSA3Ljc3NjI2IDEyLjk5OTkgNy41MDAxMkMxMi45OTk5IDcuMjIzOTggMTMuMjIzNyA3LjAwMDEyIDEzLjQ5OTkgNy4wMDAxMkMxMy43NzYgNy4wMDAxMiAxMy45OTk5IDcuMjIzOTggMTMuOTk5OSA3LjUwMDEyWk0xMy40OTk5IDUuMDAwMTJDMTMuNzc2IDUuMDAwMTIgMTMuOTk5OSA0Ljc3NjI2IDEzLjk5OTkgNC41MDAxMkMxMy45OTk5IDQuMjIzOTggMTMuNzc2IDQuMDAwMTIgMTMuNDk5OSA0LjAwMDEyQzEzLjIyMzcgNC4wMDAxMiAxMi45OTk5IDQuMjIzOTggMTIuOTk5OSA0LjUwMDEyQzEyLjk5OTkgNC43NzYyNiAxMy4yMjM3IDUuMDAwMTIgMTMuNDk5OSA1LjAwMDEyWk00Ljk5OTg4IDEzLjUwMDFDNC45OTk4OCAxMy43NzYzIDQuNzc2MDIgMTQuMDAwMSA0LjQ5OTg4IDE0LjAwMDFDNC4yMjM3NCAxNC4wMDAxIDMuOTk5ODggMTMuNzc2MyAzLjk5OTg4IDEzLjUwMDFDMy45OTk4OCAxMy4yMjQgNC4yMjM3NCAxMy4wMDAxIDQuNDk5ODggMTMuMDAwMUM0Ljc3NjAyIDEzLjAwMDEgNC45OTk4OCAxMy4yMjQgNC45OTk4OCAxMy41MDAxWk03LjQ5OTg4IDE0LjAwMDFDNy43NzYwMiAxNC4wMDAxIDcuOTk5ODggMTMuNzc2MyA3Ljk5OTg4IDEzLjUwMDFDNy45OTk4OCAxMy4yMjQgNy43NzYwMiAxMy4wMDAxIDcuNDk5ODggMTMuMDAwMUM3LjIyMzc0IDEzLjAwMDEgNi45OTk4OCAxMy4yMjQgNi45OTk4OCAxMy41MDAxQzYuOTk5ODggMTMuNzc2MyA3LjIyMzc0IDE0LjAwMDEgNy40OTk4OCAxNC4wMDAxWk0xMC45OTk5IDEzLjUwMDFDMTAuOTk5OSAxMy43NzYzIDEwLjc3NiAxNC4wMDAxIDEwLjQ5OTkgMTQuMDAwMUMxMC4yMjM3IDE0LjAwMDEgOS45OTk4OCAxMy43NzYzIDkuOTk5ODggMTMuNTAwMUM5Ljk5OTg4IDEzLjIyNCAxMC4yMjM3IDEzLjAwMDEgMTAuNDk5OSAxMy4wMDAxQzEwLjc3NiAxMy4wMDAxIDEwLjk5OTkgMTMuMjI0IDEwLjk5OTkgMTMuNTAwMVpNMTMuNDk5OSAxNC4wMDAxQzEzLjc3NiAxNC4wMDAxIDEzLjk5OTkgMTMuNzc2MyAxMy45OTk5IDEzLjUwMDFDMTMuOTk5OSAxMy4yMjQgMTMuNzc2IDEzLjAwMDEgMTMuNDk5OSAxMy4wMDAxQzEzLjIyMzcgMTMuMDAwMSAxMi45OTk5IDEzLjIyNCAxMi45OTk5IDEzLjUwMDFDMTIuOTk5OSAxMy43NzYzIDEzLjIyMzcgMTQuMDAwMSAxMy40OTk5IDE0LjAwMDFaTTMuOTk5ODggNS4wMDAxMkMzLjk5OTg4IDQuNDQ3ODQgNC40NDc1OSA0LjAwMDEyIDQuOTk5ODggNC4wMDAxMkg5Ljk5OTg4QzEwLjU1MjIgNC4wMDAxMiAxMC45OTk5IDQuNDQ3ODQgMTAuOTk5OSA1LjAwMDEyVjEwLjAwMDFDMTAuOTk5OSAxMC41NTI0IDEwLjU1MjIgMTEuMDAwMSA5Ljk5OTg4IDExLjAwMDFINC45OTk4OEM0LjQ0NzU5IDExLjAwMDEgMy45OTk4OCAxMC41NTI0IDMuOTk5ODggMTAuMDAwMVY1LjAwMDEyWk00Ljk5OTg4IDUuMDAwMTJIOS45OTk4OFYxMC4wMDAxSDQuOTk5ODhWNS4wMDAxMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LExuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDJIMTRWMTNIMUwxIDJaTTAgMkMwIDEuNDQ3NzIgMC40NDc3MTUgMSAxIDFIMTRDMTQuNTUyMyAxIDE1IDEuNDQ3NzIgMTUgMlYxM0MxNSAxMy41NTIzIDE0LjU1MjMgMTQgMTQgMTRIMUMwLjQ0NzcxNSAxNCAwIDEzLjU1MjMgMCAxM1YyWk00Ljg3NSA3LjVDNC44NzUgNi4wNTAyNSA2LjA1MDI1IDQuODc1IDcuNSA0Ljg3NUM4Ljk0OTc1IDQuODc1IDEwLjEyNSA2LjA1MDI1IDEwLjEyNSA3LjVDMTAuMTI1IDguOTQ5NzUgOC45NDk3NSAxMC4xMjUgNy41IDEwLjEyNUM2LjA1MDI1IDEwLjEyNSA0Ljg3NSA4Ljk0OTc1IDQuODc1IDcuNVpNNy41IDMuODc1QzUuNDk3OTcgMy44NzUgMy44NzUgNS40OTc5NyAzLjg3NSA3LjVDMy44NzUgOS41MDIwMyA1LjQ5Nzk3IDExLjEyNSA3LjUgMTEuMTI1QzkuNTAyMDMgMTEuMTI1IDExLjEyNSA5LjUwMjAzIDExLjEyNSA3LjVDMTEuMTI1IDUuNDk3OTcgOS41MDIwMyAzLjg3NSA3LjUgMy44NzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxfbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSAxQzAuNDQ3NzE1IDEgMCAxLjQ0NzcyIDAgMlYxM0MwIDEzLjU1MjMgMC40NDc3MTUgMTQgMSAxNEgxNEMxNC41NTIzIDE0IDE1IDEzLjU1MjMgMTUgMTNWMkMxNSAxLjQ0NzcyIDE0LjU1MjMgMSAxNCAxSDFaTTcuNSAxMC42MjVDOS4yMjU4OSAxMC42MjUgMTAuNjI1IDkuMjI1ODkgMTAuNjI1IDcuNUMxMC42MjUgNS43NzQxMSA5LjIyNTg5IDQuMzc1IDcuNSA0LjM3NUM1Ljc3NDExIDQuMzc1IDQuMzc1IDUuNzc0MTEgNC4zNzUgNy41QzQuMzc1IDkuMjI1ODkgNS43NzQxMSAxMC42MjUgNy41IDEwLjYyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFBuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjI1IDcuNUMyLjI1IDcuMjIzODYgMi40NzM4NiA3IDIuNzUgN0gxMi4yNUMxMi41MjYxIDcgMTIuNzUgNy4yMjM4NiAxMi43NSA3LjVDMTIuNzUgNy43NzYxNCAxMi41MjYxIDggMTIuMjUgOEgyLjc1QzIuNDczODYgOCAyLjI1IDcuNzc2MTQgMi4yNSA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxFbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3Njg5MkMzLjg0MjIyIDAuODc2ODkyIDAuODc3MDc1IDMuODQyMDQgMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAxMS4xNTc0IDMuODQyMjIgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMTEuMTU3NiAxNC4xMjI2IDE0LjEyMjcgMTEuMTU3NCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAzLjg0MjA0IDExLjE1NzYgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MlpNMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgNC4zNjY3MSA0LjM2Njg5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5QzEwLjYzMjkgMS44MjY4OSAxMy4xNzI3IDQuMzY2NzEgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgMTAuNjMyNyAxMC42MzI5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzQuMzY2ODkgMTMuMTcyNiAxLjgyNzA3IDEwLjYzMjcgMS44MjcwNyA3LjQ5OTcyWk00LjUwMDAzIDdDNC4yMjM4OSA3IDQuMDAwMDMgNy4yMjM4NiA0LjAwMDAzIDcuNUM0LjAwMDAzIDcuNzc2MTQgNC4yMjM4OSA4IDQuNTAwMDMgOEgxMC41QzEwLjc3NjIgOCAxMSA3Ljc3NjE0IDExIDcuNUMxMSA3LjIyMzg2IDEwLjc3NjIgNyAxMC41IDdINC41MDAwM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjE0OTIxIDMuOTk5OTZDMi4xNDkyMSAyLjk3Nzc4IDIuOTc3ODQgMi4xNDkxNSA0LjAwMDAyIDIuMTQ5MTVDNS4wMjIxOSAyLjE0OTE1IDUuODUwODMgMi45Nzc3OCA1Ljg1MDgzIDMuOTk5OTZDNS44NTA4MyA1LjAyMjEzIDUuMDIyMTkgNS44NTA3NyA0LjAwMDAyIDUuODUwNzdDMi45Nzc4NCA1Ljg1MDc3IDIuMTQ5MjEgNS4wMjIxMyAyLjE0OTIxIDMuOTk5OTZaTTQuMDAwMDIgMS4yNDkxNUMyLjQ4MDc5IDEuMjQ5MTUgMS4yNDkyMSAyLjQ4MDczIDEuMjQ5MjEgMy45OTk5NkMxLjI0OTIxIDUuNTE5MTkgMi40ODA3OSA2Ljc1MDc3IDQuMDAwMDIgNi43NTA3N0M1LjUxOTI1IDYuNzUwNzcgNi43NTA4MyA1LjUxOTE5IDYuNzUwODMgMy45OTk5NkM2Ljc1MDgzIDIuNDgwNzMgNS41MTkyNSAxLjI0OTE1IDQuMDAwMDIgMS4yNDkxNVpNNS44MjAzNCAxMS4wMDAxTDIuNDk5OTggMTIuODM2OVY5LjE2MzMxTDUuODIwMzQgMTEuMDAwMVpNMi42Mzg4MyA4LjIxMTU5QzIuMTcyMjggNy45NTM1IDEuNTk5OTggOC4yOTA5MyAxLjU5OTk4IDguODI0MTFWMTMuMTc2MUMxLjU5OTk4IDEzLjcwOTMgMi4xNzIyOCAxNC4wNDY3IDIuNjM4ODMgMTMuNzg4Nkw2LjU3MjM1IDExLjYxMjZDNy4wNTM4OSAxMS4zNDYyIDcuMDUzODkgMTAuNjU0IDYuNTcyMzUgMTAuMzg3NkwyLjYzODgzIDguMjExNTlaTTguMzAwMDEgOS4wMDAwM0M4LjMwMDAxIDguNjEzNDMgOC42MTM0MSA4LjMwMDAzIDkuMDAwMDEgOC4zMDAwM0gxM0MxMy4zODY2IDguMzAwMDMgMTMuNyA4LjYxMzQzIDEzLjcgOS4wMDAwM1YxM0MxMy43IDEzLjM4NjYgMTMuMzg2NiAxMy43IDEzIDEzLjdIOS4wMDAwMUM4LjYxMzQxIDEzLjcgOC4zMDAwMSAxMy4zODY2IDguMzAwMDEgMTNWOS4wMDAwM1pNOS4yMDAwMSA5LjIwMDAzVjEyLjhIMTIuOFY5LjIwMDAzSDkuMjAwMDFaTTEzLjQ0MzIgMi4xOTMxMUMxMy42MTg5IDIuMDE3MzcgMTMuNjE4OSAxLjczMjQ1IDEzLjQ0MzIgMS41NTY3MUMxMy4yNjc1IDEuMzgwOTggMTIuOTgyNiAxLjM4MDk4IDEyLjgwNjggMS41NTY3MUwxMSAzLjM2MzUzTDkuMTkzMjEgMS41NTY3NEM5LjAxNzQ4IDEuMzgxIDguNzMyNTUgMS4zODEgOC41NTY4MiAxLjU1Njc0QzguMzgxMDggMS43MzI0NyA4LjM4MTA4IDIuMDE3NCA4LjU1NjgyIDIuMTkzMTNMMTAuMzYzNiAzLjk5OTkyTDguNTU2ODIgNS44MDY3MUM4LjM4MTA4IDUuOTgyNDUgOC4zODEwOCA2LjI2NzM3IDguNTU2ODIgNi40NDMxMUM4LjczMjU1IDYuNjE4ODUgOS4wMTc0OCA2LjYxODg1IDkuMTkzMjEgNi40NDMxMUwxMSA0LjYzNjMyTDEyLjgwNjggNi40NDMxNEMxMi45ODI2IDYuNjE4ODcgMTMuMjY3NSA2LjYxODg3IDEzLjQ0MzIgNi40NDMxNEMxMy42MTg5IDYuMjY3NCAxMy42MTg5IDUuOTgyNDcgMTMuNDQzMiA1LjgwNjc0TDExLjYzNjQgMy45OTk5MkwxMy40NDMyIDIuMTkzMTFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxSbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS41IDNDNC42NzE1NyAzIDQgMy42NzE1NyA0IDQuNUM0IDUuMzI4NDMgNC42NzE1NyA2IDUuNSA2QzYuMzI4NDMgNiA3IDUuMzI4NDMgNyA0LjVDNyAzLjY3MTU3IDYuMzI4NDMgMyA1LjUgM1pNMyA1QzMuMDE2NzEgNSAzLjAzMzIzIDQuOTk5MTggMy4wNDk1MiA0Ljk5NzU4QzMuMjgwMjIgNi4xMzk5IDQuMjg5NjcgNyA1LjUgN0M2LjcxMDMzIDcgNy43MTk3OCA2LjEzOTkgNy45NTA0OCA0Ljk5NzU4QzcuOTY2NzcgNC45OTkxOCA3Ljk4MzI5IDUgOCA1SDEzLjVDMTMuNzc2MSA1IDE0IDQuNzc2MTQgMTQgNC41QzE0IDQuMjIzODYgMTMuNzc2MSA0IDEzLjUgNEg4QzcuOTgzMjkgNCA3Ljk2Njc3IDQuMDAwODIgNy45NTA0OCA0LjAwMjQyQzcuNzE5NzggMi44NjAwOSA2LjcxMDMzIDIgNS41IDJDNC4yODk2NyAyIDMuMjgwMjIgMi44NjAwOSAzLjA0OTUyIDQuMDAyNDJDMy4wMzMyMyA0LjAwMDgyIDMuMDE2NzEgNCAzIDRIMS41QzEuMjIzODYgNCAxIDQuMjIzODYgMSA0LjVDMSA0Ljc3NjE0IDEuMjIzODYgNSAxLjUgNUgzWk0xMS45NTA1IDEwLjk5NzZDMTEuNzE5OCAxMi4xMzk5IDEwLjcxMDMgMTMgOS41IDEzQzguMjg5NjcgMTMgNy4yODAyMiAxMi4xMzk5IDcuMDQ5NTIgMTAuOTk3NkM3LjAzMzIzIDEwLjk5OTIgNy4wMTY3MSAxMSA3IDExSDEuNUMxLjIyMzg2IDExIDEgMTAuNzc2MSAxIDEwLjVDMSAxMC4yMjM5IDEuMjIzODYgMTAgMS41IDEwSDdDNy4wMTY3MSAxMCA3LjAzMzIzIDEwLjAwMDggNy4wNDk1MiAxMC4wMDI0QzcuMjgwMjIgOC44NjAxIDguMjg5NjcgOCA5LjUgOEMxMC43MTAzIDggMTEuNzE5OCA4Ljg2MDEgMTEuOTUwNSAxMC4wMDI0QzExLjk2NjggMTAuMDAwOCAxMS45ODMzIDEwIDEyIDEwSDEzLjVDMTMuNzc2MSAxMCAxNCAxMC4yMjM5IDE0IDEwLjVDMTQgMTAuNzc2MSAxMy43NzYxIDExIDEzLjUgMTFIMTJDMTEuOTgzMyAxMSAxMS45NjY4IDEwLjk5OTIgMTEuOTUwNSAxMC45OTc2Wk04IDEwLjVDOCA5LjY3MTU3IDguNjcxNTcgOSA5LjUgOUMxMC4zMjg0IDkgMTEgOS42NzE1NyAxMSAxMC41QzExIDExLjMyODQgMTAuMzI4NCAxMiA5LjUgMTJDOC42NzE1NyAxMiA4IDExLjMyODQgOCAxMC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMS41QzUgMS4yMjM4NiA0Ljc3NjE0IDEgNC41IDFDNC4yMjM4NiAxIDQgMS4yMjM4NiA0IDEuNUw0IDdDNCA3LjAxNjcxIDQuMDAwODIgNy4wMzMyMyA0LjAwMjQyIDcuMDQ5NTJDMi44NjAwOSA3LjI4MDIyIDIgOC4yODk2NyAyIDkuNUMyIDEwLjcxMDMgMi44NjAwOSAxMS43MTk4IDQuMDAyNDIgMTEuOTUwNUM0LjAwMDgyIDExLjk2NjggNCAxMS45ODMzIDQgMTJWMTMuNUM0IDEzLjc3NjEgNC4yMjM4NiAxNCA0LjUgMTRDNC43NzYxNCAxNCA1IDEzLjc3NjEgNSAxMy41VjEyQzUgMTEuOTgzMyA0Ljk5OTE4IDExLjk2NjggNC45OTc1OCAxMS45NTA1QzYuMTM5OSAxMS43MTk4IDcgMTAuNzEwMyA3IDkuNUM3IDguMjg5NjcgNi4xMzk5IDcuMjgwMjIgNC45OTc1OCA3LjA0OTUyQzQuOTk5MTggNy4wMzMyMyA1IDcuMDE2NzEgNSA3TDUgMS41Wk0xMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxQzEwLjIyMzkgMSAxMCAxLjIyMzg2IDEwIDEuNVYzQzEwIDMuMDE2NzEgMTAuMDAwOCAzLjAzMzIzIDEwLjAwMjQgMy4wNDk1MkM4Ljg2MDEgMy4yODAyMiA4IDQuMjg5NjcgOCA1LjVDOCA2LjcxMDMzIDguODYwMSA3LjcxOTc4IDEwLjAwMjQgNy45NTA0OEMxMC4wMDA4IDcuOTY2NzcgMTAgNy45ODMyOSAxMCA4VjEzLjVDMTAgMTMuNzc2MSAxMC4yMjM5IDE0IDEwLjUgMTRDMTAuNzc2MSAxNCAxMSAxMy43NzYxIDExIDEzLjVWOEMxMSA3Ljk4MzI5IDEwLjk5OTIgNy45NjY3NyAxMC45OTc2IDcuOTUwNDhDMTIuMTM5OSA3LjcxOTc4IDEzIDYuNzEwMzMgMTMgNS41QzEzIDQuMjg5NjcgMTIuMTM5OSAzLjI4MDIyIDEwLjk5NzYgMy4wNDk1MkMxMC45OTkyIDMuMDMzMjMgMTEgMy4wMTY3MSAxMSAzVjEuNVpNNC41IDhDMy42NzE1NyA4IDMgOC42NzE1NyAzIDkuNUMzIDEwLjMyODQgMy42NzE1NyAxMSA0LjUgMTFDNS4zMjg0MyAxMSA2IDEwLjMyODQgNiA5LjVDNiA4LjY3MTU3IDUuMzI4NDMgOCA0LjUgOFpNOSA1LjVDOSA0LjY3MTU3IDkuNjcxNTcgNCAxMC41IDRDMTEuMzI4NCA0IDEyIDQuNjcxNTcgMTIgNS41QzEyIDYuMzI4NDMgMTEuMzI4NCA3IDEwLjUgN0M5LjY3MTU3IDcgOSA2LjMyODQzIDkgNS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMjU5MjUgMy4xNjY2N0w0LjM3MDM2IDUuMzMzMzNWMUw3LjI1OTI1IDMuMTY2NjdaTTEgOC4yMjIyMkwzLjg4ODg5IDYuMDU1NTVMMSAzLjg4ODg5VjguMjIyMjJaTTEgMTRMMy44ODg4OSAxMS44MzMzTDEgOS42NjY2NlYxNFpNNy43NDA3MiA4LjIyMjIyTDEwLjYyOTYgNi4wNTU1NUw3Ljc0MDcyIDMuODg4ODlWOC4yMjIyMlpNMTQgMy4xNjY2N0wxMS4xMTExIDUuMzMzMzNWMUwxNCAzLjE2NjY3Wk0xMS4xMTExIDExLjExMTFMMTQgOC45NDQ0NEwxMS4xMTExIDYuNzc3NzdWMTEuMTExMVpNMy44ODg4OSAxMS4xMTExTDEgOC45NDQ0NEwzLjg4ODg5IDYuNzc3NzdWMTEuMTExMVpNNC4zNzAzNiA2LjA1NTU1TDcuMjU5MjUgOC4yMjIyMlYzLjg4ODg5TDQuMzcwMzYgNi4wNTU1NVpNMy44ODg4OSA1LjMzMzMzTDEgMy4xNjY2N0wzLjg4ODg5IDFWNS4zMzMzM1pNNy43NDA3MiAzLjE2NjY3TDEwLjYyOTYgNS4zMzMzM1YxTDcuNzQwNzIgMy4xNjY2N1pNMTQgOC4yMjIyMkwxMS4xMTExIDYuMDU1NTVMMTQgMy44ODg4OVY4LjIyMjIyWk0xMS4xMTExIDExLjgzMzNMMTQgMTRWOS42NjY2NkwxMS4xMTExIDExLjgzMzNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi44OTk5OCAwLjQ5OTk3NkMyLjg5OTk4IDAuMjc5MDYyIDIuNzIwODkgMC4wOTk5NzU2IDIuNDk5OTggMC4wOTk5NzU2QzIuMjc5MDYgMC4wOTk5NzU2IDIuMDk5OTggMC4yNzkwNjIgMi4wOTk5OCAwLjQ5OTk3NlYxLjA5OTk4SDEuNDk5OThDMS4yNzkwNiAxLjA5OTk4IDEuMDk5OTggMS4yNzkwNiAxLjA5OTk4IDEuNDk5OThDMS4wOTk5OCAxLjcyMDg5IDEuMjc5MDYgMS44OTk5OCAxLjQ5OTk4IDEuODk5OThIMi4wOTk5OFYyLjQ5OTk4QzIuMDk5OTggMi43MjA4OSAyLjI3OTA2IDIuODk5OTggMi40OTk5OCAyLjg5OTk4QzIuNzIwODkgMi44OTk5OCAyLjg5OTk4IDIuNzIwODkgMi44OTk5OCAyLjQ5OTk4VjEuODk5OThIMy40OTk5OEMzLjcyMDg5IDEuODk5OTggMy44OTk5OCAxLjcyMDg5IDMuODk5OTggMS40OTk5OEMzLjg5OTk4IDEuMjc5MDYgMy43MjA4OSAxLjA5OTk4IDMuNDk5OTggMS4wOTk5OEgyLjg5OTk4VjAuNDk5OTc2Wk01Ljg5OTk4IDMuNDk5OThDNS44OTk5OCAzLjI3OTA2IDUuNzIwODkgMy4wOTk5OCA1LjQ5OTk4IDMuMDk5OThDNS4yNzkwNiAzLjA5OTk4IDUuMDk5OTggMy4yNzkwNiA1LjA5OTk4IDMuNDk5OThWNC4wOTk5OEg0LjQ5OTk4QzQuMjc5MDYgNC4wOTk5OCA0LjA5OTk4IDQuMjc5MDYgNC4wOTk5OCA0LjQ5OTk4QzQuMDk5OTggNC43MjA4OSA0LjI3OTA2IDQuODk5OTggNC40OTk5OCA0Ljg5OTk4SDUuMDk5OThWNS40OTk5OEM1LjA5OTk4IDUuNzIwODkgNS4yNzkwNiA1Ljg5OTk4IDUuNDk5OTggNS44OTk5OEM1LjcyMDg5IDUuODk5OTggNS44OTk5OCA1LjcyMDg5IDUuODk5OTggNS40OTk5OFY0Ljg5OTk4SDYuNDk5OThDNi43MjA4OSA0Ljg5OTk4IDYuODk5OTggNC43MjA4OSA2Ljg5OTk4IDQuNDk5OThDNi44OTk5OCA0LjI3OTA2IDYuNzIwODkgNC4wOTk5OCA2LjQ5OTk4IDQuMDk5OThINS44OTk5OFYzLjQ5OTk4Wk0xLjg5OTk4IDYuNDk5OThDMS44OTk5OCA2LjI3OTA2IDEuNzIwODkgNi4wOTk5OCAxLjQ5OTk4IDYuMDk5OThDMS4yNzkwNiA2LjA5OTk4IDEuMDk5OTggNi4yNzkwNiAxLjA5OTk4IDYuNDk5OThWNy4wOTk5OEgwLjQ5OTk3NkMwLjI3OTA2MiA3LjA5OTk4IDAuMDk5OTc1NiA3LjI3OTA2IDAuMDk5OTc1NiA3LjQ5OTk4QzAuMDk5OTc1NiA3LjcyMDg5IDAuMjc5MDYyIDcuODk5OTggMC40OTk5NzYgNy44OTk5OEgxLjA5OTk4VjguNDk5OThDMS4wOTk5OCA4LjcyMDg5IDEuMjc5MDYgOC44OTk5NyAxLjQ5OTk4IDguODk5OTdDMS43MjA4OSA4Ljg5OTk3IDEuODk5OTggOC43MjA4OSAxLjg5OTk4IDguNDk5OThWNy44OTk5OEgyLjQ5OTk4QzIuNzIwODkgNy44OTk5OCAyLjg5OTk4IDcuNzIwODkgMi44OTk5OCA3LjQ5OTk4QzIuODk5OTggNy4yNzkwNiAyLjcyMDg5IDcuMDk5OTggMi40OTk5OCA3LjA5OTk4SDEuODk5OThWNi40OTk5OFpNOC41NDQwNiAwLjk4MTg0TDguMjQ2MTggMC45NDE1ODZDOC4wMzI3NSAwLjkxNzY3NiA3LjkwNjkyIDEuMTY1NSA4LjAyOTM2IDEuMzQxOTRDOC4xNzAxMyAxLjU0NDc5IDguMjk5ODEgMS43NTU5MiA4LjQxNzU0IDEuOTc0NDVDOC45MTg3OCAyLjkwNDg1IDkuMjAzMjIgMy45NjkzMiA5LjIwMzIyIDUuMTAwMjJDOS4yMDMyMiA4LjM3MjAxIDYuODIyNDcgMTEuMDg3OCAzLjY5ODg3IDExLjYwOTdDMy40NTczNiAxMS42NSAzLjIwOTg4IDExLjY3NzIgMi45NjAwOCAxMS42OTA2QzIuNzQ1NjMgMTEuNzAyIDIuNjI3MjkgMTEuOTUzNSAyLjc3NzIxIDEyLjEwNzJDMi44NDU1MSAxMi4xNzczIDIuOTE1MzUgMTIuMjQ1OCAyLjk4NjY3IDEyLjMxMjhMMy4wNTg4MyAxMi4zNzk1TDMuMzE4ODMgMTIuNjA0NUwzLjUwNjg0IDEyLjc1MzJMMy42Mjc5NiAxMi44NDMzTDMuODE0OTEgMTIuOTc0MkwzLjk5MDc5IDEzLjA4OUM0LjExMTc1IDEzLjE2NTEgNC4yMzUzNiAxMy4yMzc1IDQuMzYxNTcgMTMuMzA1OUw0LjYyNDk2IDEzLjQ0MTJMNC44ODU1MyAxMy41NjA3TDUuMTg4MzcgMTMuNjgyOEw1LjQzMTY5IDEzLjc2ODZDNS41NjU2NCAxMy44MTI4IDUuNzAxNDkgMTMuODUyOSA1LjgzODU3IDEzLjg4ODVDNS45NDI2MiAxMy45MTU1IDYuMDQ3NjcgMTMuOTQwMSA2LjE1NDA1IDEzLjk2MjJDNi4yNzk5MyAxMy45ODgzIDYuNDA3MTMgMTQuMDEwOSA2LjUzNTQ0IDE0LjAyOThMNi44NTI0MSAxNC4wNjg1TDcuMTE5MzQgMTQuMDg5MkM3LjI0NjM3IDE0LjA5NjUgNy4zNzQzNiAxNC4xMDAyIDcuNTAzMjIgMTQuMTAwMkMxMS4xNDgzIDE0LjEwMDIgMTQuMTAzMiAxMS4xNDUzIDE0LjEwMzIgNy41MDAyM0MxNC4xMDMyIDcuMjUwNDQgMTQuMDg5MyA3LjAwMzg5IDE0LjA2MjMgNi43NjEzMUwxNC4wMjU1IDYuNDg0MDdDMTMuOTkxIDYuMjYwODMgMTMuOTQ1MyA2LjA0MTI5IDEzLjg4OTEgNS44MjY0MkMxMy44MjEzIDUuNTY3MDkgMTMuNzM4MiA1LjMxMzk4IDEzLjY0MDkgNS4wNjg4MUwxMy41Mjc5IDQuODAxMzJMMTMuNDUwNyA0LjYzNTQyTDEzLjM3NjYgNC40ODY2NkMxMy4yMTc4IDQuMTc3NzMgMTMuMDM1MyAzLjg4Mjk1IDEyLjgzMTIgMy42MDQyM0wxMi42NzgyIDMuNDAzNTJMMTIuNDc5MyAzLjE2NDMyTDEyLjMxNTcgMi45ODM2MUwxMi4xOTYxIDIuODU5NTFMMTIuMDM1NSAyLjcwMjQ2TDExLjgxMzQgMi41MDE4NEwxMS40OTI1IDIuMjQxOTFMMTEuMjQ4MyAyLjA2NDk4TDEwLjk1NjIgMS44NzQ0NkwxMC42MzQ2IDEuNjg4OTRMMTAuMzA3MyAxLjUyMzc4TDEwLjE5MzggMS40NzE3Nkw5Ljk1NDg4IDEuMzcwNkw5LjY3NzkxIDEuMjY2OUw5LjQyNTY2IDEuMTg0Nkw5LjEwMDc1IDEuMDk0ODlMOC44MzU5OSAxLjAzNDg2TDguNTQ0MDYgMC45ODE4NFpNMTAuNDAzMiA1LjMwMDIzQzEwLjQwMzIgNC4yNzU4OCAxMC4yMDAyIDMuMjk4MjkgOS44MzI0NCAyLjQwNjA0QzExLjc2MjMgMy4yODk5NSAxMy4xMDMyIDUuMjM4NjIgMTMuMTAzMiA3LjUwMDIzQzEzLjEwMzIgMTAuNTkzIDEwLjU5NiAxMy4xMDAyIDcuNTAzMjIgMTMuMTAwMkM2LjYzNjQ2IDEzLjEwMDIgNS44MTU5NyAxMi45MDM2IDUuMDgzNTUgMTIuNTUyMkM2LjU0MTkgMTIuMDk0MSA3LjgxMDgxIDExLjIwODIgOC43NDMyMiAxMC4wNDE2QzguODc5NjMgMTAuMjI4NCA5LjEwMDI4IDEwLjM0OTcgOS4zNDkyOCAxMC4zNDk3QzkuNzYzNDkgMTAuMzQ5NyAxMC4wOTkzIDEwLjAxMzkgMTAuMDk5MyA5LjU5OTcxQzEwLjA5OTMgOS4yNDI1NiA5Ljg0OTY1IDguOTQzNzMgOS41MTUzNSA4Ljg2ODE2QzkuNTc3NDEgOC43NTE2NSA5LjYzNjUzIDguNjMzMzQgOS42OTI2IDguNTEzMzJDOS44ODM1OCA4LjYzMTYzIDEwLjEwODggOC42OTk5MyAxMC4zNSA4LjY5OTkzQzExLjA0MDMgOC42OTk5MyAxMS42IDguMTQwMjggMTEuNiA3LjQ0OTkzQzExLjYgNi43NTk3NiAxMS4wNDA2IDYuMjAwMjQgMTAuMzUwNSA2LjE5OTkzQzEwLjM4NTMgNS45MDQ4NyAxMC40MDMyIDUuNjA0NjQgMTAuNDAzMiA1LjMwMDIzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuODE4MTkgMC45MzE3OUM3LjY0MjQ1IDAuNzU2MDU0IDcuMzU3NTMgMC43NTYwNTQgNy4xODE3OSAwLjkzMTc5TDUuNDMxNzkgMi42ODE3OUM1LjI1NjA1IDIuODU3NTMgNS4yNTYwNSAzLjE0MjQ1IDUuNDMxNzkgMy4zMTgxOUM1LjYwNzUzIDMuNDkzOTIgNS44OTI0NSAzLjQ5MzkyIDYuMDY4MTkgMy4zMTgxOUw2Ljk5OTk5IDIuMzg2MzhWNS40OTk5OUM2Ljk5OTk5IDUuNzc2MTMgNy4yMjM4NSA1Ljk5OTk5IDcuNDk5OTkgNS45OTk5OUM3Ljc3NjEzIDUuOTk5OTkgNy45OTk5OSA1Ljc3NjEzIDcuOTk5OTkgNS40OTk5OVYyLjM4NjM4TDguOTMxNzkgMy4zMTgxOUM5LjEwNzUzIDMuNDkzOTIgOS4zOTI0NSAzLjQ5MzkyIDkuNTY4MTkgMy4zMTgxOUM5Ljc0MzkyIDMuMTQyNDUgOS43NDM5MiAyLjg1NzUzIDkuNTY4MTkgMi42ODE3OUw3LjgxODE5IDAuOTMxNzlaTTcuOTk5OTkgOS40OTk5OUM3Ljk5OTk5IDkuMjIzODUgNy43NzYxMyA4Ljk5OTk5IDcuNDk5OTkgOC45OTk5OUM3LjIyMzg1IDguOTk5OTkgNi45OTk5OSA5LjIyMzg1IDYuOTk5OTkgOS40OTk5OVYxMi42MTM2TDYuMDY4MTkgMTEuNjgxOEM1Ljg5MjQ1IDExLjUwNjEgNS42MDc1MyAxMS41MDYxIDUuNDMxNzkgMTEuNjgxOEM1LjI1NjA1IDExLjg1NzUgNS4yNTYwNSAxMi4xNDI0IDUuNDMxNzkgMTIuMzE4Mkw3LjE4MTc5IDE0LjA2ODJDNy4zNTc1MyAxNC4yNDM5IDcuNjQyNDUgMTQuMjQzOSA3LjgxODE5IDE0LjA2ODJMOS41NjgxOSAxMi4zMTgyQzkuNzQzOTIgMTIuMTQyNCA5Ljc0MzkyIDExLjg1NzUgOS41NjgxOSAxMS42ODE4QzkuMzkyNDUgMTEuNTA2MSA5LjEwNzUzIDExLjUwNjEgOC45MzE3OSAxMS42ODE4TDcuOTk5OTkgMTIuNjEzNlY5LjQ5OTk5Wk04Ljk5OTk5IDcuNDk5OTlDOC45OTk5OSA3LjIyMzg1IDkuMjIzODUgNi45OTk5OSA5LjQ5OTk5IDYuOTk5OTlIMTIuNjEzNkwxMS42ODE4IDYuMDY4MTlDMTEuNTA2MSA1Ljg5MjQ1IDExLjUwNjEgNS42MDc1MyAxMS42ODE4IDUuNDMxNzlDMTEuODU3NSA1LjI1NjA1IDEyLjE0MjQgNS4yNTYwNSAxMi4zMTgyIDUuNDMxNzlMMTQuMDY4MiA3LjE4MTc5QzE0LjI0MzkgNy4zNTc1MyAxNC4yNDM5IDcuNjQyNDUgMTQuMDY4MiA3LjgxODE5TDEyLjMxODIgOS41NjgxOUMxMi4xNDI0IDkuNzQzOTIgMTEuODU3NSA5Ljc0MzkyIDExLjY4MTggOS41NjgxOUMxMS41MDYxIDkuMzkyNDUgMTEuNTA2MSA5LjEwNzUzIDExLjY4MTggOC45MzE3OUwxMi42MTM2IDcuOTk5OTlIOS40OTk5OUM5LjIyMzg1IDcuOTk5OTkgOC45OTk5OSA3Ljc3NjEzIDguOTk5OTkgNy40OTk5OVpNMy4zMTgxOSA2LjA2ODE5TDIuMzg2MzggNi45OTk5OUg1LjQ5OTk5QzUuNzc2MTMgNi45OTk5OSA1Ljk5OTk5IDcuMjIzODUgNS45OTk5OSA3LjQ5OTk5QzUuOTk5OTkgNy43NzYxMyA1Ljc3NjEzIDcuOTk5OTkgNS40OTk5OSA3Ljk5OTk5SDIuMzg2MzhMMy4zMTgxOSA4LjkzMTc5QzMuNDkzOTIgOS4xMDc1MyAzLjQ5MzkyIDkuMzkyNDUgMy4zMTgxOSA5LjU2ODE5QzMuMTQyNDUgOS43NDM5MiAyLjg1NzUzIDkuNzQzOTIgMi42ODE3OSA5LjU2ODE5TDAuOTMxNzkgNy44MTgxOUMwLjc1NjA1NCA3LjY0MjQ1IDAuNzU2MDU0IDcuMzU3NTMgMC45MzE3OSA3LjE4MTc5TDIuNjgxNzkgNS40MzE3OUMyLjg1NzUzIDUuMjU2MDUgMy4xNDI0NSA1LjI1NjA1IDMuMzE4MTkgNS40MzE3OUMzLjQ5MzkyIDUuNjA3NTMgMy40OTM5MiA1Ljg5MjQ1IDMuMzE4MTkgNi4wNjgxOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFRuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjI1NzgxIDMuMTE2ODRDMy42Nzc3MSAzLjQ1Nzk2IDMuODM1MjMgMy40MzE5MyA0LjYyMzY5IDMuMzc5MzNMMTIuMDU3MSAyLjkzMjk5QzEyLjIxNDcgMi45MzI5OSAxMi4wODM2IDIuNzc1NzEgMTIuMDMxMSAyLjc0OTU3TDEwLjc5NjUgMS44NTcxMUMxMC41NiAxLjY3MzQ3IDEwLjI0NDggMS40NjMxNSA5LjY0MDgzIDEuNTE1NzZMMi40NDMwOCAyLjA0MDc0QzIuMTgwNTkgMi4wNjY3NyAyLjEyODE1IDIuMTk4MDEgMi4yMzI3IDIuMzAzMjJMMy4yNTc4MSAzLjExNjg0Wk0zLjcwNDEgNC44NDkxN1YxMi42NzA0QzMuNzA0MSAxMy4wOTA3IDMuOTE0MTUgMTMuMjQ4IDQuMzg2OTMgMTMuMjIyTDEyLjU1NjIgMTIuNzQ5M0MxMy4wMjkyIDEyLjcyMzMgMTMuMDgxOSAxMi40MzQxIDEzLjA4MTkgMTIuMDkyN1Y0LjMyMzk3QzEzLjA4MTkgMy45ODMwNiAxMi45NTA4IDMuNzk5MjEgMTIuNjYxMiAzLjgyNTQ1TDQuMTI0MjIgNC4zMjM5N0MzLjgwOTE4IDQuMzUwNDQgMy43MDQxIDQuNTA4MDMgMy43MDQxIDQuODQ5MTdaTTExLjc2ODggNS4yNjg3MkMxMS44MjEyIDUuNTA1MTggMTEuNzY4OCA1Ljc0MTQyIDExLjUzMTkgNS43Njc5OUwxMS4xMzgzIDUuODQ2NDFWMTEuNjIwNUMxMC43OTY1IDExLjgwNDIgMTAuNDgxNCAxMS45MDkyIDEwLjIxODggMTEuOTA5MkM5Ljc5ODM1IDExLjkwOTIgOS42OTMwNSAxMS43Nzc5IDkuMzc4MTIgMTEuMzg0NEw2LjgwMzQ1IDcuMzQyNDlWMTEuMjUzMkw3LjYxODE2IDExLjQzN0M3LjYxODE2IDExLjQzNyA3LjYxODE2IDExLjkwOTIgNi45NjA4NiAxMS45MDkyTDUuMTQ4NzkgMTIuMDE0M0M1LjA5NjE1IDExLjkwOTIgNS4xNDg3OSAxMS42NDcgNS4zMzI1OSAxMS41OTQ0TDUuODA1NDYgMTEuNDYzNFY2LjI5Mjc2TDUuMTQ4OSA2LjI0MDE1QzUuMDk2MjUgNi4wMDM2OSA1LjIyNzM5IDUuNjYyNzggNS41OTU0IDUuNjM2MzFMNy41MzkzNSA1LjUwNTI4TDEwLjIxODggOS41OTk4VjUuOTc3NjVMOS41MzU2NCA1Ljg5OTI0QzkuNDgzMiA1LjYxMDE4IDkuNjkzMDUgNS40MDAyOCA5Ljk1NTc2IDUuMzc0MjVMMTEuNzY4OCA1LjI2ODcyWk0xLjgzODc0IDEuMzMyMTJMOS4zMjU1NyAwLjc4MDc4N0MxMC4yNDUgMC43MDE5MzIgMTAuNDgxNSAwLjc1NDc1MyAxMS4wNTk0IDEuMTc0NTJMMTMuNDQ5MiAyLjg1NDI0QzEzLjg0MzYgMy4xNDMwOSAxMy45NzUgMy4yMjE3MyAxMy45NzUgMy41MzY2MVYxMi43NDkzQzEzLjk3NSAxMy4zMjY2IDEzLjc2NDcgMTMuNjY4MSAxMy4wMjkzIDEzLjcyMDNMNC4zMzQ5MiAxNC4yNDU0QzMuNzgyOTEgMTQuMjcxNyAzLjUyMDE5IDE0LjE5MyAzLjIzMTExIDEzLjgyNTNMMS40NzExNiAxMS41NDE5QzEuMTU1OCAxMS4xMjE2IDEuMDI0NjYgMTAuODA3MSAxLjAyNDY2IDEwLjQzOTJWMi4yNTA0MUMxLjAyNDY2IDEuNzc4MjUgMS4yMzUwNCAxLjM4NDQxIDEuODM4NzQgMS4zMzIxMlpcIixmaWxsOm59KSl9LERuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMS41QzQuNSA0LjI1IDMgNi41IDMgOUMzIDExLjQ4NTMgNS4wMTQ3MiAxMy41IDcuNSAxMy41QzkuOTg1MjggMTMuNSAxMiAxMS40ODUzIDEyIDlDMTIgNi41IDEwLjUgNC4yNSA3LjUgMS41Wk0xMSA5QzExIDcuMTEyMDMgOS45NzMxNSA1LjI3MTk1IDcuNSAyLjg3MzU3QzUuMDI2ODYgNS4yNzE5NSA0IDcuMTEyMDMgNCA5QzQgMTAuOTMzIDUuNTY3IDEyLjUgNy41IDEyLjVDOS40MzMgMTIuNSAxMSAxMC45MzMgMTEgOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEJuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjQ5OTg1IDEuMTAwMDFDMy4yNzg5NCAxLjEwMDAxIDMuMDk5ODUgMS4yNzkwOSAzLjA5OTg1IDEuNTAwMDFDMy4wOTk4NSAxLjcyMDkyIDMuMjc4OTQgMS45MDAwMSAzLjQ5OTg1IDEuOTAwMDFIMTEuNDk5OUMxMS43MjA4IDEuOTAwMDEgMTEuODk5OSAxLjcyMDkyIDExLjg5OTkgMS41MDAwMUMxMS44OTk5IDEuMjc5MDkgMTEuNzIwOCAxLjEwMDAxIDExLjQ5OTkgMS4xMDAwMUgzLjQ5OTg1Wk00Ljk5OTk1IDQuMjUwMDFDNC45OTk5NSAzLjk3Mzg3IDQuNzc2MDkgMy43NTAwMSA0LjQ5OTk1IDMuNzUwMDFDNC4yMjM4MSAzLjc1MDAxIDMuOTk5OTUgMy45NzM4NyAzLjk5OTk1IDQuMjUwMDFWOS41NTAwMUMzLjk5OTk1IDExLjQ4MyA1LjU2Njk1IDEzLjA1IDcuNDk5OTUgMTMuMDVDOS40MzI5NSAxMy4wNSAxMSAxMS40ODMgMTEgOS41NTAwMVY0LjI1MDAxQzExIDMuOTczODcgMTAuNzc2MSAzLjc1MDAxIDEwLjUgMy43NTAwMUMxMC4yMjM4IDMuNzUwMDEgOS45OTk5NSAzLjk3Mzg3IDkuOTk5OTUgNC4yNTAwMVY5LjU1MDAxQzkuOTk5OTUgMTAuOTMwNyA4Ljg4MDY2IDEyLjA1IDcuNDk5OTUgMTIuMDVDNi4xMTkyNCAxMi4wNSA0Ljk5OTk1IDEwLjkzMDcgNC45OTk5NSA5LjU1MDAxVjQuMjUwMDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxabj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi44NTcxNCAySDEyLjE0MjlDMTIuNjE2MiAyIDEzIDIuMzgzNzYgMTMgMi44NTcxNFYxMi4xNDI5QzEzIDEyLjYxNjIgMTIuNjE2MiAxMyAxMi4xNDI5IDEzSDIuODU3MTRDMi4zODM3NiAxMyAyIDEyLjYxNjIgMiAxMi4xNDI5VjIuODU3MTRDMiAyLjM4Mzc2IDIuMzgzNzYgMiAyLjg1NzE0IDJaTTEgMi44NTcxNEMxIDEuODMxNDcgMS44MzE0NyAxIDIuODU3MTQgMUgxMi4xNDI5QzEzLjE2ODUgMSAxNCAxLjgzMTQ3IDE0IDIuODU3MTRWMTIuMTQyOUMxNCAxMy4xNjg1IDEzLjE2ODUgMTQgMTIuMTQyOSAxNEgyLjg1NzE0QzEuODMxNDcgMTQgMSAxMy4xNjg1IDEgMTIuMTQyOVYyLjg1NzE0Wk03LjQ5OTg4IDUuMDAwMTJDNy43NzYwMiA1LjAwMDEyIDcuOTk5ODggNC43NzYyNiA3Ljk5OTg4IDQuNTAwMTJDNy45OTk4OCA0LjIyMzk4IDcuNzc2MDIgNC4wMDAxMiA3LjQ5OTg4IDQuMDAwMTJDNy4yMjM3NCA0LjAwMDEyIDYuOTk5ODggNC4yMjM5OCA2Ljk5OTg4IDQuNTAwMTJDNi45OTk4OCA0Ljc3NjI2IDcuMjIzNzQgNS4wMDAxMiA3LjQ5OTg4IDUuMDAwMTJaTTQuNDk5ODggMTEuMDAwMUM0Ljc3NjAyIDExLjAwMDEgNC45OTk4OCAxMC43NzYzIDQuOTk5ODggMTAuNTAwMUM0Ljk5OTg4IDEwLjIyNCA0Ljc3NjAyIDEwLjAwMDEgNC40OTk4OCAxMC4wMDAxQzQuMjIzNzQgMTAuMDAwMSAzLjk5OTg4IDEwLjIyNCAzLjk5OTg4IDEwLjUwMDFDMy45OTk4OCAxMC43NzYzIDQuMjIzNzQgMTEuMDAwMSA0LjQ5OTg4IDExLjAwMDFaTTQuOTk5ODggNy41MDAxMkM0Ljk5OTg4IDcuNzc2MjYgNC43NzYwMiA4LjAwMDEyIDQuNDk5ODggOC4wMDAxMkM0LjIyMzc0IDguMDAwMTIgMy45OTk4OCA3Ljc3NjI2IDMuOTk5ODggNy41MDAxMkMzLjk5OTg4IDcuMjIzOTggNC4yMjM3NCA3LjAwMDEyIDQuNDk5ODggNy4wMDAxMkM0Ljc3NjAyIDcuMDAwMTIgNC45OTk4OCA3LjIyMzk4IDQuOTk5ODggNy41MDAxMlpNNC40OTk4OCA1LjAwMDEyQzQuNzc2MDIgNS4wMDAxMiA0Ljk5OTg4IDQuNzc2MjYgNC45OTk4OCA0LjUwMDEyQzQuOTk5ODggNC4yMjM5OCA0Ljc3NjAyIDQuMDAwMTIgNC40OTk4OCA0LjAwMDEyQzQuMjIzNzQgNC4wMDAxMiAzLjk5OTg4IDQuMjIzOTggMy45OTk4OCA0LjUwMDEyQzMuOTk5ODggNC43NzYyNiA0LjIyMzc0IDUuMDAwMTIgNC40OTk4OCA1LjAwMDEyWk0xMC45OTk5IDEwLjUwMDFDMTAuOTk5OSAxMC43NzYzIDEwLjc3NiAxMS4wMDAxIDEwLjQ5OTkgMTEuMDAwMUMxMC4yMjM3IDExLjAwMDEgOS45OTk4OCAxMC43NzYzIDkuOTk5ODggMTAuNTAwMUM5Ljk5OTg4IDEwLjIyNCAxMC4yMjM3IDEwLjAwMDEgMTAuNDk5OSAxMC4wMDAxQzEwLjc3NiAxMC4wMDAxIDEwLjk5OTkgMTAuMjI0IDEwLjk5OTkgMTAuNTAwMVpNMTAuNDk5OSA4LjAwMDEyQzEwLjc3NiA4LjAwMDEyIDEwLjk5OTkgNy43NzYyNiAxMC45OTk5IDcuNTAwMTJDMTAuOTk5OSA3LjIyMzk4IDEwLjc3NiA3LjAwMDEyIDEwLjQ5OTkgNy4wMDAxMkMxMC4yMjM3IDcuMDAwMTIgOS45OTk4OCA3LjIyMzk4IDkuOTk5ODggNy41MDAxMkM5Ljk5OTg4IDcuNzc2MjYgMTAuMjIzNyA4LjAwMDEyIDEwLjQ5OTkgOC4wMDAxMlpNMTAuOTk5OSA0LjUwMDEyQzEwLjk5OTkgNC43NzYyNiAxMC43NzYgNS4wMDAxMiAxMC40OTk5IDUuMDAwMTJDMTAuMjIzNyA1LjAwMDEyIDkuOTk5ODggNC43NzYyNiA5Ljk5OTg4IDQuNTAwMTJDOS45OTk4OCA0LjIyMzk4IDEwLjIyMzcgNC4wMDAxMiAxMC40OTk5IDQuMDAwMTJDMTAuNzc2IDQuMDAwMTIgMTAuOTk5OSA0LjIyMzk4IDEwLjk5OTkgNC41MDAxMlpNNy40OTk4OCAxMS4wMDAxQzcuNzc2MDIgMTEuMDAwMSA3Ljk5OTg4IDEwLjc3NjMgNy45OTk4OCAxMC41MDAxQzcuOTk5ODggMTAuMjI0IDcuNzc2MDIgMTAuMDAwMSA3LjQ5OTg4IDEwLjAwMDFDNy4yMjM3NCAxMC4wMDAxIDYuOTk5ODggMTAuMjI0IDYuOTk5ODggMTAuNTAwMUM2Ljk5OTg4IDEwLjc3NjMgNy4yMjM3NCAxMS4wMDAxIDcuNDk5ODggMTEuMDAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LCRuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjIwMzA3IDEuMDQzMTJDMS4wMDQ4MSAwLjk1NDk5OCAwLjc3MjM0IDEuMDA0OCAwLjYyNzU3NyAxLjE2NjQxQzAuNDgyODEzIDEuMzI4MDIgMC40NTg3OTQgMS41NjQ1NSAwLjU2ODExNiAxLjc1MTk2TDMuOTIxMTUgNy41MDAwMkwwLjU2ODExNiAxMy4yNDgxQzAuNDU4Nzk0IDEzLjQzNTUgMC40ODI4MTMgMTMuNjcyIDAuNjI3NTc3IDEzLjgzMzZDMC43NzIzNCAxMy45OTUyIDEuMDA0ODEgMTQuMDQ1IDEuMjAzMDcgMTMuOTU2OUwxNC43MDMxIDcuOTU2OTJDMTQuODgzNiA3Ljg3NjY3IDE1IDcuNjk3NjEgMTUgNy41MDAwMkMxNSA3LjMwMjQyIDE0Ljg4MzYgNy4xMjMzNiAxNC43MDMxIDcuMDQzMTFMMS4yMDMwNyAxLjA0MzEyWk00Ljg0NTUyIDcuMTAwMDJMMi4yMTIzNCAyLjU4NkwxMy4yNjg5IDcuNTAwMDJMMi4yMTIzNCAxMi40MTRMNC44NDU1MiA3LjkwMDAySDlDOS4yMjA5MSA3LjkwMDAyIDkuNCA3LjcyMDk0IDkuNCA3LjUwMDAyQzkuNCA3LjI3OTExIDkuMjIwOTEgNy4xMDAwMiA5IDcuMTAwMDJINC44NDU1MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02LjA0OTk1IDIuNzQ5OThDNi4wNDk5NSAyLjQ0NjIzIDUuODAzNzEgMi4xOTk5OCA1LjQ5OTk1IDIuMTk5OThDNS4xOTYxOSAyLjE5OTk4IDQuOTQ5OTUgMi40NDYyMyA0Ljk0OTk1IDIuNzQ5OThWMTIuMjVDNC45NDk5NSAxMi41NTM3IDUuMTk2MTkgMTIuOCA1LjQ5OTk1IDEyLjhDNS44MDM3MSAxMi44IDYuMDQ5OTUgMTIuNTUzNyA2LjA0OTk1IDEyLjI1VjIuNzQ5OThaTTEwLjA1IDIuNzQ5OThDMTAuMDUgMi40NDYyMyA5LjgwMzcxIDIuMTk5OTggOS40OTk5NSAyLjE5OTk4QzkuMTk2MTkgMi4xOTk5OCA4Ljk0OTk1IDIuNDQ2MjMgOC45NDk5NSAyLjc0OTk4VjEyLjI1QzguOTQ5OTUgMTIuNTUzNyA5LjE5NjE5IDEyLjggOS40OTk5NSAxMi44QzkuODAzNzEgMTIuOCAxMC4wNSAxMi41NTM3IDEwLjA1IDEyLjI1VjIuNzQ5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxGbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuODUzNiAxLjE0NjQ1QzExLjY1ODMgMC45NTExODQgMTEuMzQxNyAwLjk1MTE4NCAxMS4xNDY1IDEuMTQ2NDVMMy43MTQ1NSA4LjU3ODM2QzMuNjI0NTkgOC42NjgzMiAzLjU1MjYzIDguNzc0NjEgMy41MDI1MSA4Ljg5MTU1TDIuMDQwNDQgMTIuMzAzQzEuOTU5OSAxMi40OTEgMi4wMDE4OSAxMi43MDkgMi4xNDY0NiAxMi44NTM2QzIuMjkxMDMgMTIuOTk4MSAyLjUwOTA1IDEzLjA0MDEgMi42OTY5NyAxMi45NTk2TDYuMTA4NDcgMTEuNDk3NUM2LjIyNTQgMTEuNDQ3NCA2LjMzMTcgMTEuMzc1NCA2LjQyMTY2IDExLjI4NTVMMTMuODUzNiAzLjg1MzU1QzE0LjA0ODggMy42NTgyOSAxNC4wNDg4IDMuMzQxNzEgMTMuODUzNiAzLjE0NjQ1TDExLjg1MzYgMS4xNDY0NVpNNC40MjE2NiA5LjI4NTQ3TDExLjUgMi4yMDcxMUwxMi43OTI5IDMuNUw1LjcxNDU1IDEwLjU3ODRMNC4yMTkyNCAxMS4yMTkyTDMuNzgwODEgMTAuNzgwOEw0LjQyMTY2IDkuMjg1NDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxXbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuMTQ2NCAxLjE0NjQ1QzEyLjM0MTcgMC45NTExODQgMTIuNjU4MyAwLjk1MTE4NCAxMi44NTM1IDEuMTQ2NDVMMTQuODUzNSAzLjE0NjQ1QzE1LjA0ODggMy4zNDE3MSAxNS4wNDg4IDMuNjU4MjkgMTQuODUzNSAzLjg1MzU1TDEwLjkxMDkgNy43OTYxOEMxMC44MzQ5IDcuODcyMTggMTAuNzQ3MSA3LjkzNTQzIDEwLjY1MSA3Ljk4MzVMNi43MjM1OSA5Ljk0NzIxQzYuNTMxMDkgMTAuMDQzNSA2LjI5ODYxIDEwLjAwNTcgNi4xNDY0MyA5Ljg1MzU1QzUuOTk0MjUgOS43MDEzNyA1Ljk1NjUyIDkuNDY4ODkgNi4wNTI3NyA5LjI3NjM5TDguMDE2NDggNS4zNDg5N0M4LjA2NDU1IDUuMjUyODMgOC4xMjc4IDUuMTY1MDcgOC4yMDM4IDUuMDg5MDdMMTIuMTQ2NCAxLjE0NjQ1Wk0xMi41IDIuMjA3MTFMOC45MTA5MSA1Ljc5NjE4TDcuODcyNjYgNy44NzI2N0w4LjEyNzMxIDguMTI3MzJMMTAuMjAzOCA3LjA4OTA3TDEzLjc5MjkgMy41TDEyLjUgMi4yMDcxMVpNOS45OTk5OCAyTDguOTk5OTggM0g0LjlDNC40NzE3MSAzIDQuMTgwNTYgMy4wMDAzOSAzLjk1NTUyIDMuMDE4NzdDMy43MzYzMSAzLjAzNjY4IDMuNjI0MjEgMy4wNjkxNSAzLjU0NjAxIDMuMTA4OTlDMy4zNTc4NSAzLjIwNDg3IDMuMjA0ODcgMy4zNTc4NSAzLjEwODk5IDMuNTQ2MDFDMy4wNjkxNSAzLjYyNDIxIDMuMDM2NjkgMy43MzYzMSAzLjAxODc4IDMuOTU1NTJDMy4wMDAzOSA0LjE4MDU2IDMgNC40NzE3MSAzIDQuOVYxMS4xQzMgMTEuNTI4MyAzLjAwMDM5IDExLjgxOTQgMy4wMTg3OCAxMi4wNDQ1QzMuMDM2NjkgMTIuMjYzNyAzLjA2OTE1IDEyLjM3NTggMy4xMDg5OSAxMi40NTRDMy4yMDQ4NyAxMi42NDIyIDMuMzU3ODUgMTIuNzk1MSAzLjU0NjAxIDEyLjg5MUMzLjYyNDIxIDEyLjkzMDkgMy43MzYzMSAxMi45NjMzIDMuOTU1NTIgMTIuOTgxMkM0LjE4MDU2IDEyLjk5OTYgNC40NzE3MSAxMyA0LjkgMTNIMTEuMUMxMS41MjgzIDEzIDExLjgxOTQgMTIuOTk5NiAxMi4wNDQ1IDEyLjk4MTJDMTIuMjYzNyAxMi45NjMzIDEyLjM3NTggMTIuOTMwOSAxMi40NTQgMTIuODkxQzEyLjY0MjIgMTIuNzk1MSAxMi43OTUxIDEyLjY0MjIgMTIuODkxIDEyLjQ1NEMxMi45MzA5IDEyLjM3NTggMTIuOTYzMyAxMi4yNjM3IDEyLjk4MTIgMTIuMDQ0NUMxMi45OTk2IDExLjgxOTQgMTMgMTEuNTI4MyAxMyAxMS4xVjYuOTk5OThMMTQgNS45OTk5OFYxMS4xVjExLjEyMDdDMTQgMTEuNTIzMSAxNCAxMS44NTUzIDEzLjk3NzkgMTIuMTI1OUMxMy45NTQ5IDEyLjQwNyAxMy45MDU3IDEyLjY2NTMgMTMuNzgyIDEyLjkwOEMxMy41OTAzIDEzLjI4NDMgMTMuMjg0MyAxMy41OTAzIDEyLjkwOCAxMy43ODJDMTIuNjY1MyAxMy45MDU3IDEyLjQwNyAxMy45NTQ5IDEyLjEyNTkgMTMuOTc3OUMxMS44NTUzIDE0IDExLjUyMzEgMTQgMTEuMTIwNyAxNEgxMS4xSDQuOUg0Ljg3OTM0QzQuNDc2ODYgMTQgNC4xNDQ2OCAxNCAzLjg3NDA5IDEzLjk3NzlDMy41OTMwNCAxMy45NTQ5IDMuMzM0NjkgMTMuOTA1NyAzLjA5MjAyIDEzLjc4MkMyLjcxNTcgMTMuNTkwMyAyLjQwOTczIDEzLjI4NDMgMi4yMTc5OSAxMi45MDhDMi4wOTQzNCAxMi42NjUzIDIuMDQ1MDYgMTIuNDA3IDIuMDIyMSAxMi4xMjU5QzEuOTk5OTkgMTEuODU1MyAxLjk5OTk5IDExLjUyMzEgMiAxMS4xMjA3VjExLjEyMDZWMTEuMVY0LjlWNC44NzkzNVY0Ljg3OTMyVjQuODc5MzFDMS45OTk5OSA0LjQ3Njg1IDEuOTk5OTkgNC4xNDQ2OCAyLjAyMjEgMy44NzQwOUMyLjA0NTA2IDMuNTkzMDQgMi4wOTQzNCAzLjMzNDY5IDIuMjE3OTkgMy4wOTIwMkMyLjQwOTczIDIuNzE1NjkgMi43MTU3IDIuNDA5NzMgMy4wOTIwMiAyLjIxNzk5QzMuMzM0NjkgMi4wOTQzNCAzLjU5MzA0IDIuMDQ1MDYgMy44NzQwOSAyLjAyMjFDNC4xNDQ2OCAxLjk5OTk5IDQuNDc2ODUgMS45OTk5OSA0Ljg3OTMyIDJINC44NzkzNUg0LjlIOS45OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFVuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMC44NzVDNS40OTc5NyAwLjg3NSAzLjg3NSAyLjQ5Nzk3IDMuODc1IDQuNUMzLjg3NSA2LjE1Mjg4IDQuOTgxMjQgNy41NDczOCA2LjQ5MzczIDcuOTgzNTFDNS4yOTk3IDguMTI5MDEgNC4yNzU1NyA4LjU1MTM0IDMuNTA0MDcgOS4zMTE2N0MyLjUyMjE2IDEwLjI3OTQgMi4wMjUwMiAxMS43MiAyLjAyNTAyIDEzLjU5OTlDMi4wMjUwMiAxMy44NjIzIDIuMjM3NjkgMTQuMDc0OSAyLjUwMDAyIDE0LjA3NDlDMi43NjIzNiAxNC4wNzQ5IDIuOTc1MDIgMTMuODYyMyAyLjk3NTAyIDEzLjU5OTlDMi45NzUwMiAxMS44Nzk5IDMuNDI3ODYgMTAuNzIwNiA0LjE3MDkxIDkuOTg4M0M0LjkxNTM2IDkuMjU0NjMgNi4wMjY3NCA4Ljg3NDk5IDcuNDk5OTUgOC44NzQ5OUM4Ljk3MzE3IDguODc0OTkgMTAuMDg0NiA5LjI1NDYzIDEwLjgyOTEgOS45ODgzMUMxMS41NzIxIDEwLjcyMDYgMTIuMDI1IDExLjg3OTkgMTIuMDI1IDEzLjU5OTlDMTIuMDI1IDEzLjg2MjMgMTIuMjM3NiAxNC4wNzQ5IDEyLjUgMTQuMDc0OUMxMi43NjIzIDE0LjA3NSAxMi45NzUgMTMuODYyMyAxMi45NzUgMTMuNkMxMi45NzUgMTEuNzIgMTIuNDc3OCAxMC4yNzk0IDExLjQ5NTkgOS4zMTE2NkMxMC43MjQ0IDguNTUxMzUgOS43MDAyNSA4LjEyOTAzIDguNTA2MjUgNy45ODM1MkMxMC4wMTg3IDcuNTQ3NCAxMS4xMjUgNi4xNTI4OSAxMS4xMjUgNC41QzExLjEyNSAyLjQ5Nzk3IDkuNTAyMDMgMC44NzUgNy41IDAuODc1Wk00LjgyNSA0LjVDNC44MjUgMy4wMjI2NCA2LjAyMjY0IDEuODI1IDcuNSAxLjgyNUM4Ljk3NzM2IDEuODI1IDEwLjE3NSAzLjAyMjY0IDEwLjE3NSA0LjVDMTAuMTc1IDUuOTc3MzYgOC45NzczNiA3LjE3NSA3LjUgNy4xNzVDNi4wMjI2NCA3LjE3NSA0LjgyNSA1Ljk3NzM2IDQuODI1IDQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjg1MDAxIDcuNTAwNDNDMS44NTAwMSA0LjM3OTc1IDQuMzc5NjMgMS44NTAwMSA3LjUwMDAxIDEuODUwMDFDMTAuNjIwNCAxLjg1MDAxIDEzLjE1IDQuMzc5NzUgMTMuMTUgNy41MDA0M0MxMy4xNSAxMC42MjExIDEwLjYyMDQgMTMuMTUwOSA3LjUwMDAxIDEzLjE1MDlDNC4zNzk2MyAxMy4xNTA5IDEuODUwMDEgMTAuNjIxMSAxLjg1MDAxIDcuNTAwNDNaTTcuNTAwMDEgMC44NTAwMDZDMy44MjcyOCAwLjg1MDAwNiAwLjg1MDAwNiAzLjgyNzUzIDAuODUwMDA2IDcuNTAwNDNDMC44NTAwMDYgMTEuMTczMyAzLjgyNzI4IDE0LjE1MDkgNy41MDAwMSAxNC4xNTA5QzExLjE3MjcgMTQuMTUwOSAxNC4xNSAxMS4xNzMzIDE0LjE1IDcuNTAwNDNDMTQuMTUgMy44Mjc1MyAxMS4xNzI3IDAuODUwMDA2IDcuNTAwMDEgMC44NTAwMDZaTTcuMDAwMDEgOC4wMDAwMVYzLjEyODExQzcuMTY0MTEgMy4xMDk1NCA3LjMzMDk0IDMuMTAwMDEgNy41MDAwMSAzLjEwMDAxQzkuOTMwMDYgMy4xMDAwMSAxMS45IDUuMDcwMTQgMTEuOSA3LjUwMDQzQzExLjkgNy42NjkzNSAxMS44OTA1IDcuODM2MDQgMTEuODcyIDguMDAwMDFINy4wMDAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEduPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDUuNUMzIDcuOTgzIDQuOTkxNjkgOSA3IDlWMTIuNUM3IDEyLjc3NjEgNy4yMjM4NiAxMyA3LjUgMTNDNy43NzYxNCAxMyA4IDEyLjc3NjEgOCAxMi41VjlWMy4xSDlWMTIuNUM5IDEyLjc3NjEgOS4yMjM4NiAxMyA5LjUgMTNDOS43NzYxNCAxMyAxMCAxMi43NzYxIDEwIDEyLjVWMy4xSDExLjVDMTEuODAzOCAzLjEgMTIuMDUgMi44NTM3NiAxMi4wNSAyLjU1QzEyLjA1IDIuMjQ2MjQgMTEuODAzOCAyIDExLjUgMkg5LjVIOEg3LjVIN0M0Ljk5MTY5IDIgMyAzLjAxNyAzIDUuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEtuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy41IDEzLjk1QzEzLjc0ODUgMTMuOTUgMTMuOTUgMTMuNzQ4NSAxMy45NSAxMy41QzEzLjk1IDEzLjI1MTQgMTMuNzQ4NSAxMy4wNSAxMy41IDEzLjA1TDEuNDk5OTUgMTMuMDVDMS4yNTE0MiAxMy4wNSAxLjA0OTk1IDEzLjI1MTQgMS4wNDk5NSAxMy41QzEuMDQ5OTUgMTMuNzQ4NSAxLjI1MTQyIDEzLjk1IDEuNDk5OTUgMTMuOTVMMTMuNSAxMy45NVpNMTEuMDY4MSA3LjU2ODNDMTEuMjQzOSA3LjM5MjU3IDExLjI0MzkgNy4xMDc2NCAxMS4wNjgxIDYuOTMxOTFDMTAuODkyNCA2Ljc1NjE3IDEwLjYwNzUgNi43NTYxNyAxMC40MzE3IDYuOTMxOTFMNy45NDk5MyA5LjQxMzcxTDcuOTQ5OTMgMS40OTk5OEM3Ljk0OTkzIDEuMjUxNDYgNy43NDg0NiAxLjA0OTk4IDcuNDk5OTMgMS4wNDk5OEM3LjI1MTQgMS4wNDk5OCA3LjA0OTkzIDEuMjUxNDYgNy4wNDk5MyAxLjQ5OTk4TDcuMDQ5OTMgOS40MTM3MUw0LjU2ODEzIDYuOTMxOTFDNC4zOTIzOSA2Ljc1NjE3IDQuMTA3NDYgNi43NTYxNyAzLjkzMTczIDYuOTMxOTFDMy43NTU5OSA3LjEwNzY0IDMuNzU1OTkgNy4zOTI1NyAzLjkzMTczIDcuNTY4M0w3LjE4MTczIDEwLjgxODNDNy4zNTc0NiAxMC45OTQgNy42NDIzOSAxMC45OTQgNy44MTgxMiAxMC44MTgzTDExLjA2ODEgNy41NjgzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuMDUwMDUgMTMuNUMyLjA1MDA1IDEzLjc0ODUgMi4yNTE1MiAxMy45NSAyLjUwMDA1IDEzLjk1QzIuNzQ4NTggMTMuOTUgMi45NTAwNSAxMy43NDg1IDIuOTUwMDUgMTMuNUwyLjk1MDA1IDEuNDk5OTVDMi45NTAwNSAxLjI1MTQyIDIuNzQ4NTggMS4wNDk5NSAyLjUwMDA1IDEuMDQ5OTVDMi4yNTE1MiAxLjA0OTk1IDIuMDUwMDUgMS4yNTE0MiAyLjA1MDA1IDEuNDk5OTVMMi4wNTAwNSAxMy41Wk04LjQzMTcgMTEuMDY4MUM4LjYwNzQzIDExLjI0MzkgOC44OTIzNiAxMS4yNDM5IDkuMDY4MDkgMTEuMDY4MUM5LjI0MzgzIDEwLjg5MjQgOS4yNDM4MyAxMC42MDc1IDkuMDY4MDkgMTAuNDMxN0w2LjU4NjI5IDcuOTQ5OTNMMTQuNSA3Ljk0OTkzQzE0Ljc0ODUgNy45NDk5MyAxNC45NSA3Ljc0ODQ2IDE0Ljk1IDcuNDk5OTNDMTQuOTUgNy4yNTE0IDE0Ljc0ODUgNy4wNDk5MyAxNC41IDcuMDQ5OTNMNi41ODYyOSA3LjA0OTkzTDkuMDY4MDkgNC41NjgxM0M5LjI0MzgzIDQuMzkyMzkgOS4yNDM4MyA0LjEwNzQ2IDkuMDY4MDkgMy45MzE3M0M4Ljg5MjM2IDMuNzU1OTkgOC42MDc0MyAzLjc1NTk5IDguNDMxNyAzLjkzMTczTDUuMTgxNyA3LjE4MTczQzUuMDA1OTYgNy4zNTc0NiA1LjAwNTk2IDcuNjQyMzkgNS4xODE3IDcuODE4MTJMOC40MzE3IDExLjA2ODFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxZbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuOTUgMS41MDAwNUMxMi45NSAxLjI1MTUyIDEyLjc0ODUgMS4wNTAwNSAxMi41IDEuMDUwMDVDMTIuMjUxNCAxLjA1MDA1IDEyLjA1IDEuMjUxNTIgMTIuMDUgMS41MDAwNUwxMi4wNSAxMy41QzEyLjA1IDEzLjc0ODYgMTIuMjUxNCAxMy45NSAxMi41IDEzLjk1QzEyLjc0ODUgMTMuOTUgMTIuOTUgMTMuNzQ4NiAxMi45NSAxMy41TDEyLjk1IDEuNTAwMDVaTTYuNTY4MyAzLjkzMTg4QzYuMzkyNTcgMy43NTYxNCA2LjEwNzY0IDMuNzU2MTQgNS45MzE5MSAzLjkzMTg4QzUuNzU2MTcgNC4xMDc2MSA1Ljc1NjE3IDQuMzkyNTQgNS45MzE5MSA0LjU2ODI3TDguNDEzNzEgNy4wNTAwN0wwLjQ5OTk4NCA3LjA1MDA3QzAuMjUxNDU2IDcuMDUwMDcgMC4wNDk5ODQ3IDcuMjUxNTUgMC4wNDk5ODQ3IDcuNTAwMDdDMC4wNDk5ODQ2IDcuNzQ4NiAwLjI1MTQ1NyA3Ljk1MDA3IDAuNDk5OTg0IDcuOTUwMDdMOC40MTM3MSA3Ljk1MDA3TDUuOTMxOTEgMTAuNDMxOUM1Ljc1NjE3IDEwLjYwNzYgNS43NTYxNyAxMC44OTI1IDUuOTMxOTEgMTEuMDY4M0M2LjEwNzY0IDExLjI0NCA2LjM5MjU3IDExLjI0NCA2LjU2ODMxIDExLjA2ODNMOS44MTgzIDcuODE4MjdDOS45OTQwNCA3LjY0MjU0IDkuOTk0MDQgNy4zNTc2MSA5LjgxODMgNy4xODE4OEw2LjU2ODMgMy45MzE4OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjUwMDA1IDEuMDUwMDVDMS4yNTE1MiAxLjA1MDA1IDEuMDUwMDUgMS4yNTE1MiAxLjA1MDA1IDEuNTAwMDVDMS4wNTAwNSAxLjc0ODU4IDEuMjUxNTIgMS45NTAwNSAxLjUwMDA1IDEuOTUwMDVMMTMuNSAxLjk1MDA1QzEzLjc0ODYgMS45NTAwNSAxMy45NSAxLjc0ODU4IDEzLjk1IDEuNTAwMDVDMTMuOTUgMS4yNTE1MiAxMy43NDg2IDEuMDUwMDUgMTMuNSAxLjA1MDA1SDEuNTAwMDVaTTMuOTMxODggNy40MzE2OUMzLjc1NjE0IDcuNjA3NDMgMy43NTYxNCA3Ljg5MjM2IDMuOTMxODggOC4wNjgwOUM0LjEwNzYxIDguMjQzODMgNC4zOTI1NCA4LjI0MzgzIDQuNTY4MjcgOC4wNjgwOUw3LjA1MDA3IDUuNTg2MjlWMTMuNUM3LjA1MDA3IDEzLjc0ODUgNy4yNTE1NSAxMy45NSA3LjUwMDA3IDEzLjk1QzcuNzQ4NiAxMy45NSA3Ljk1MDA3IDEzLjc0ODUgNy45NTAwNyAxMy41TDcuOTUwMDcgNS41ODYyOUwxMC40MzE5IDguMDY4MDlDMTAuNjA3NiA4LjI0MzgzIDEwLjg5MjUgOC4yNDM4MyAxMS4wNjgzIDguMDY4MDlDMTEuMjQ0IDcuODkyMzUgMTEuMjQ0IDcuNjA3NDMgMTEuMDY4MyA3LjQzMTY5TDcuODE4MjcgNC4xODE2OUM3LjY0MjU0IDQuMDA1OTYgNy4zNTc2MSA0LjAwNTk2IDcuMTgxODggNC4xODE2OUwzLjkzMTg4IDcuNDMxNjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxYbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4yNDE4MiAyLjMyMTgxQzMuMzkxOSAyLjIzMTMyIDMuNTc4NCAyLjIyNjAxIDMuNzMzMzggMi4zMDc4MUwxMi43MzM0IDcuMDU3ODFDMTIuODk3NCA3LjE0NDM2IDEzIDcuMzE0NTcgMTMgNy41QzEzIDcuNjg1NDMgMTIuODk3NCA3Ljg1NTY0IDEyLjczMzQgNy45NDIxOUwzLjczMzM4IDEyLjY5MjJDMy41Nzg0IDEyLjc3NCAzLjM5MTkgMTIuNzY4NyAzLjI0MTgyIDEyLjY3ODJDMy4wOTE3NSAxMi41ODc3IDMgMTIuNDI1MiAzIDEyLjI1VjIuNzVDMyAyLjU3NDc2IDMuMDkxNzUgMi40MTIzIDMuMjQxODIgMi4zMjE4MVpNNCAzLjU3OTI1VjExLjQyMDdMMTEuNDI4OCA3LjVMNCAzLjU3OTI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTggMi43NUM4IDIuNDczODYgNy43NzYxNCAyLjI1IDcuNSAyLjI1QzcuMjIzODYgMi4yNSA3IDIuNDczODYgNyAyLjc1VjdIMi43NUMyLjQ3Mzg2IDcgMi4yNSA3LjIyMzg2IDIuMjUgNy41QzIuMjUgNy43NzYxNCAyLjQ3Mzg2IDggMi43NSA4SDdWMTIuMjVDNyAxMi41MjYxIDcuMjIzODYgMTIuNzUgNy41IDEyLjc1QzcuNzc2MTQgMTIuNzUgOCAxMi41MjYxIDggMTIuMjVWOEgxMi4yNUMxMi41MjYxIDggMTIuNzUgNy43NzYxNCAxMi43NSA3LjVDMTIuNzUgNy4yMjM4NiAxMi41MjYxIDcgMTIuMjUgN0g4VjIuNzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxlcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3Njg5MkMzLjg0MjIyIDAuODc2ODkyIDAuODc3MDc1IDMuODQyMDQgMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAxMS4xNTc0IDMuODQyMjIgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMTEuMTU3NiAxNC4xMjI2IDE0LjEyMjcgMTEuMTU3NCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAzLjg0MjA0IDExLjE1NzYgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MlpNMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgNC4zNjY3MSA0LjM2Njg5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5QzEwLjYzMjkgMS44MjY4OSAxMy4xNzI3IDQuMzY2NzEgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgMTAuNjMyNyAxMC42MzI5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzQuMzY2ODkgMTMuMTcyNiAxLjgyNzA3IDEwLjYzMjcgMS44MjcwNyA3LjQ5OTcyWk03LjUwMDAzIDRDNy43NzYxNyA0IDguMDAwMDMgNC4yMjM4NiA4LjAwMDAzIDQuNVY3SDEwLjVDMTAuNzc2MiA3IDExIDcuMjIzODYgMTEgNy41QzExIDcuNzc2MTQgMTAuNzc2MiA4IDEwLjUgOEg4LjAwMDAzVjEwLjVDOC4wMDAwMyAxMC43NzYxIDcuNzc2MTcgMTEgNy41MDAwMyAxMUM3LjIyMzg5IDExIDcuMDAwMDMgMTAuNzc2MSA3LjAwMDAzIDEwLjVWOEg0LjUwMDAzQzQuMjIzODkgOCA0LjAwMDAzIDcuNzc2MTQgNC4wMDAwMyA3LjVDNC4wMDAwMyA3LjIyMzg2IDQuMjIzODkgNyA0LjUwMDAzIDdINy4wMDAwM1Y0LjVDNy4wMDAwMyA0LjIyMzg2IDcuMjIzODkgNCA3LjUwMDAzIDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx0cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS4wNzUwNSA0LjEwMDAxQzUuMDc1MDUgMi45MTEwMyA2LjI1NzI3IDEuOTI1MDIgNy41MDAwNSAxLjkyNTAyQzguNzQyODMgMS45MjUwMiA5LjkyNTA1IDIuOTExMDMgOS45MjUwNSA0LjEwMDAxQzkuOTI1MDUgNS4xOTg2MSA5LjM2NzgyIDUuNzE0MzYgOC42MTg1NCA2LjM3ODg0TDguNTg3NTcgNi40MDYzQzcuODQ0ODEgNy4wNjQ2NyA2LjkyNTA1IDcuODc5OTUgNi45MjUwNSA5LjVDNi45MjUwNSA5LjgxNzU3IDcuMTgyNDggMTAuMDc1IDcuNTAwMDUgMTAuMDc1QzcuODE3NjEgMTAuMDc1IDguMDc1MDUgOS44MTc1NyA4LjA3NTA1IDkuNUM4LjA3NTA1IDguNDE1MTcgOC42Mjk0NSA3LjkwNjIzIDkuMzgxNTYgNy4yMzkyNUw5LjQwMjM4IDcuMjIwNzlDMTAuMTQ5NiA2LjU1ODI5IDExLjA3NSA1LjczNzc1IDExLjA3NSA0LjEwMDAxQzExLjA3NSAyLjEyNzU3IDkuMjE4NjkgMC43NzUwMjQgNy41MDAwNSAwLjc3NTAyNEM1Ljc4MTQgMC43NzUwMjQgMy45MjUwNSAyLjEyNzU3IDMuOTI1MDUgNC4xMDAwMUMzLjkyNTA1IDQuNDE3NTggNC4xODI0OSA0LjY3NTAxIDQuNTAwMDUgNC42NzUwMUM0LjgxNzYxIDQuNjc1MDEgNS4wNzUwNSA0LjQxNzU4IDUuMDc1MDUgNC4xMDAwMVpNNy41MDAwNSAxMy4zNTc1QzcuOTgzMyAxMy4zNTc1IDguMzc1MDUgMTIuOTY1NyA4LjM3NTA1IDEyLjQ4MjVDOC4zNzUwNSAxMS45OTkyIDcuOTgzMyAxMS42MDc1IDcuNTAwMDUgMTEuNjA3NUM3LjAxNjggMTEuNjA3NSA2LjYyNTA1IDExLjk5OTIgNi42MjUwNSAxMi40ODI1QzYuNjI1MDUgMTIuOTY1NyA3LjAxNjggMTMuMzU3NSA3LjUwMDA1IDEzLjM1NzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxucj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAzLjg0MjA0IDMuODQyMjIgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MkMxMS4xNTc2IDAuODc2ODkyIDE0LjEyMjcgMy44NDIwNCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAxMS4xNTc0IDExLjE1NzYgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMy44NDIyMiAxNC4xMjI2IDAuODc3MDc1IDExLjE1NzQgMC44NzcwNzUgNy40OTk3MlpNNy40OTk5MSAxLjgyNjg5QzQuMzY2ODkgMS44MjY4OSAxLjgyNzA4IDQuMzY2NzEgMS44MjcwOCA3LjQ5OTcyQzEuODI3MDggMTAuNjMyNyA0LjM2Njg5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzEwLjYzMjkgMTMuMTcyNiAxMy4xNzI3IDEwLjYzMjcgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgNC4zNjY3MSAxMC42MzI5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5Wk04LjI0OTkzIDEwLjVDOC4yNDk5MyAxMC45MTQyIDcuOTE0MTQgMTEuMjUgNy40OTk5MyAxMS4yNUM3LjA4NTcxIDExLjI1IDYuNzQ5OTMgMTAuOTE0MiA2Ljc0OTkzIDEwLjVDNi43NDk5MyAxMC4wODU4IDcuMDg1NzEgOS43NSA3LjQ5OTkzIDkuNzVDNy45MTQxNCA5Ljc1IDguMjQ5OTMgMTAuMDg1OCA4LjI0OTkzIDEwLjVaTTYuMDUwMDMgNi4yNUM2LjA1MDAzIDUuNTcyMTEgNi42MzUxMSA0LjkyNSA3LjUwMDAzIDQuOTI1QzguMzY0OTYgNC45MjUgOC45NTAwMyA1LjU3MjExIDguOTUwMDMgNi4yNUM4Ljk1MDAzIDYuNzQxMTggOC42ODAwMiA2Ljk5MjEyIDguMjE0NDcgNy4yNzQ5NEM4LjE2MjUxIDcuMzA2NTEgOC4xMDI1OCA3LjM0MTMxIDguMDM4NDcgNy4zNzg1NEw4LjAzODQxIDcuMzc4NThDNy44NTUyMSA3LjQ4NDk3IDcuNjM3ODggNy42MTExOSA3LjQ3NDQ5IDcuNzM4NDlDNy4yMzIxNCA3LjkyNzMyIDYuOTUwMDMgOC4yMzE5OCA2Ljk1MDAzIDguN0M2Ljk1MDA0IDkuMDAzNzYgNy4xOTYyOCA5LjI1IDcuNTAwMDQgOS4yNUM3LjgwMjQgOS4yNSA4LjA0Nzc4IDkuMDA2MDEgOC4wNTAwMiA4LjcwNDE3TDguMDUwNTYgOC43MDMzQzguMDU5MjQgOC42ODk2IDguMDg0OTMgOC42NTczNSA4LjE1MDU4IDguNjA2MkM4LjI1MjA3IDguNTI3MTIgOC4zNjUwOCA4LjQ2MTYzIDguNTE1NjcgOC4zNzQzNkw4LjUxNTcxIDguMzc0MzNDOC41OTQyMiA4LjMyODgzIDguNjgyOTYgOC4yNzc0MSA4Ljc4NTU5IDguMjE1MDZDOS4zMjAwNCA3Ljg5MDM4IDEwLjA1IDcuMzUzODIgMTAuMDUgNi4yNUMxMC4wNSA0LjkyNzg5IDguOTM1MTEgMy44MjUgNy41MDAwMyAzLjgyNUM2LjA2NDk2IDMuODI1IDQuOTUwMDMgNC45Mjc4OSA0Ljk1MDAzIDYuMjVDNC45NTAwMyA2LjU1Mzc2IDUuMTk2MjggNi44IDUuNTAwMDMgNi44QzUuODAzNzkgNi44IDYuMDUwMDMgNi41NTM3NiA2LjA1MDAzIDYuMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxycj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOS40MjUwMyAzLjQ0MTM2QzEwLjA1NjEgMy4yMzY1NCAxMC43ODM3IDMuMjQwMiAxMS4zNzkyIDMuNTQ2MjNDMTIuNzUzMiA0LjI1MjI0IDEzLjM0NzcgNi4wNzE5MSAxMi43OTQ2IDhDMTIuNTQ2NSA4Ljg2NDkgMTIuMTEwMiA5LjcwNDcyIDExLjE4NjEgMTAuNTUyNEMxMC4yNjIgMTEuNCA4Ljk4MDM0IDExLjkgOC4zODU3MSAxMS45QzguMTcyNjkgMTEuOSA4IDExLjczMjEgOCAxMS41MjVDOCAxMS4zMTc5IDguMTc2NDQgMTEuMTUgOC4zODU3MSAxMS4xNUM5LjA2NDk3IDExLjE1IDkuNjcxODkgMTAuNzgwNCAxMC4zOTA2IDEwLjIzNkMxMC45NDA2IDkuODE5MyAxMS4zNzAxIDkuMjg2MzMgMTEuNjA4IDguODIxOTFDMTIuMDYyOCA3LjkzMzY3IDEyLjA3ODIgNi42ODE3NCAxMS4zNDMzIDYuMzQ5MDFDMTAuOTkwNCA2LjczNDU1IDEwLjUyOTUgNi45NTk0NiA5Ljk3NzI1IDYuOTU5NDZDOC43NzczIDYuOTU5NDYgOC4wNzAxIDUuOTk0MTIgOC4xMDA1MSA1LjEyMDA5QzguMTI5NTcgNC4yODQ3NCA4LjY2MDMyIDMuNjg5NTQgOS40MjUwMyAzLjQ0MTM2Wk0zLjQyNTAzIDMuNDQxMzZDNC4wNTYxNCAzLjIzNjU0IDQuNzgzNjYgMy4yNDAyIDUuMzc5MjMgMy41NDYyM0M2Ljc1MzIgNC4yNTIyNCA3LjM0NzY2IDYuMDcxOTEgNi43OTQ2MiA4QzYuNTQ2NTQgOC44NjQ5IDYuMTEwMTkgOS43MDQ3MiA1LjE4NjEgMTAuNTUyNEM0LjI2MjAxIDExLjQgMi45ODAzNCAxMS45IDIuMzg1NzEgMTEuOUMyLjE3MjY5IDExLjkgMiAxMS43MzIxIDIgMTEuNTI1QzIgMTEuMzE3OSAyLjE3NjQ0IDExLjE1IDIuMzg1NzEgMTEuMTVDMy4wNjQ5NyAxMS4xNSAzLjY3MTg5IDEwLjc4MDQgNC4zOTA1OCAxMC4yMzZDNC45NDA2NSA5LjgxOTMgNS4zNzAxNCA5LjI4NjMzIDUuNjA3OTcgOC44MjE5MUM2LjA2MjgyIDcuOTMzNjcgNi4wNzgyMSA2LjY4MTc0IDUuMzQzMyA2LjM0OTAxQzQuOTkwMzcgNi43MzQ1NSA0LjUyOTQ4IDYuOTU5NDYgMy45NzcyNSA2Ljk1OTQ2QzIuNzc3MyA2Ljk1OTQ2IDIuMDcwMSA1Ljk5NDEyIDIuMTAwNTEgNS4xMjAwOUMyLjEyOTU3IDQuMjg0NzQgMi42NjAzMiAzLjY4OTU0IDMuNDI1MDMgMy40NDEzNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG9yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTg1IDAuODc3MDQ1QzMuODQyMTYgMC44NzcwNDUgMC44NzcwMTQgMy44NDIxOSAwLjg3NzAxNCA3LjQ5OTg4QzAuODc3MDE0IDExLjE1NzUgMy44NDIxNiAxNC4xMjI3IDcuNDk5ODUgMTQuMTIyN0MxMS4xNTc1IDE0LjEyMjcgMTQuMTIyNyAxMS4xNTc1IDE0LjEyMjcgNy40OTk4OEMxNC4xMjI3IDMuODQyMTkgMTEuMTU3NSAwLjg3NzA0NSA3LjQ5OTg1IDAuODc3MDQ1Wk0xLjgyNzAxIDcuNDk5ODhDMS44MjcwMSA0LjM2Njg2IDQuMzY2ODMgMS44MjcwNCA3LjQ5OTg1IDEuODI3MDRDMTAuNjMyOCAxLjgyNzA0IDEzLjE3MjcgNC4zNjY4NiAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyAxMC42MzI5IDEwLjYzMjggMTMuMTcyNyA3LjQ5OTg1IDEzLjE3MjdDNC4zNjY4MyAxMy4xNzI3IDEuODI3MDEgMTAuNjMyOSAxLjgyNzAxIDcuNDk5ODhaTTcuNDk5OTkgOS40OTk5OUM4LjYwNDU2IDkuNDk5OTkgOS40OTk5OSA4LjYwNDU2IDkuNDk5OTkgNy40OTk5OUM5LjQ5OTk5IDYuMzk1NDIgOC42MDQ1NiA1LjQ5OTk5IDcuNDk5OTkgNS40OTk5OUM2LjM5NTQyIDUuNDk5OTkgNS40OTk5OSA2LjM5NTQyIDUuNDk5OTkgNy40OTk5OUM1LjQ5OTk5IDguNjA0NTYgNi4zOTU0MiA5LjQ5OTk5IDcuNDk5OTkgOS40OTk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGFyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjIgMUg0LjE3NzQxSDQuMTc3NEMzLjg2OTM2IDAuOTk5OTg4IDMuNjAzNjggMC45OTk5NzggMy4zODYwOSAxLjAyMDY3QzMuMTU1NzYgMS4wNDI1NyAyLjkyODI1IDEuMDkxMTMgMi43MTYyNSAxLjIyMTA0QzIuNTE0NDIgMS4zNDQ3MiAyLjM0NDczIDEuNTE0NDIgMi4yMjEwNCAxLjcxNjI1QzIuMDkxMTMgMS45MjgyNSAyLjA0MjU3IDIuMTU1NzYgMi4wMjA2NyAyLjM4NjA5QzEuOTk5OTggMi42MDM2NyAxLjk5OTk5IDIuODY5MzUgMiAzLjE3NzM4VjMuMTc3NFYzLjJWMTEuOFYxMS44MjI2VjExLjgyMjZDMS45OTk5OSAxMi4xMzA3IDEuOTk5OTggMTIuMzk2MyAyLjAyMDY3IDEyLjYxMzlDMi4wNDI1NyAxMi44NDQyIDIuMDkxMTMgMTMuMDcxNyAyLjIyMTA0IDEzLjI4MzdDMi4zNDQ3MyAxMy40ODU2IDIuNTE0NDIgMTMuNjU1MyAyLjcxNjI1IDEzLjc3OUMyLjkyODI1IDEzLjkwODkgMy4xNTU3NiAxMy45NTc0IDMuMzg2MDkgMTMuOTc5M0MzLjYwMzY4IDE0IDMuODY5MzcgMTQgNC4xNzc0MSAxNEg0LjJIMTAuOEgxMC44MjI2QzExLjEzMDYgMTQgMTEuMzk2MyAxNCAxMS42MTM5IDEzLjk3OTNDMTEuODQ0MiAxMy45NTc0IDEyLjA3MTcgMTMuOTA4OSAxMi4yODM3IDEzLjc3OUMxMi40ODU2IDEzLjY1NTMgMTIuNjU1MyAxMy40ODU2IDEyLjc3OSAxMy4yODM3QzEyLjkwODkgMTMuMDcxNyAxMi45NTc0IDEyLjg0NDIgMTIuOTc5MyAxMi42MTM5QzEzIDEyLjM5NjMgMTMgMTIuMTMwNiAxMyAxMS44MjI2VjExLjhWMy4yVjMuMTc3NDFDMTMgMi44NjkzNiAxMyAyLjYwMzY4IDEyLjk3OTMgMi4zODYwOUMxMi45NTc0IDIuMTU1NzYgMTIuOTA4OSAxLjkyODI1IDEyLjc3OSAxLjcxNjI1QzEyLjY1NTMgMS41MTQ0MiAxMi40ODU2IDEuMzQ0NzIgMTIuMjgzNyAxLjIyMTA0QzEyLjA3MTcgMS4wOTExMyAxMS44NDQyIDEuMDQyNTcgMTEuNjEzOSAxLjAyMDY3QzExLjM5NjMgMC45OTk5NzggMTEuMTMwNiAwLjk5OTk4OCAxMC44MjI2IDFIMTAuOEg0LjJaTTMuMjM4NzUgMi4wNzM2OEMzLjI2NzIyIDIuMDU2MjMgMy4zMjM2MiAyLjAzMTEyIDMuNDgwNzUgMi4wMTYxOEMzLjY0NTMyIDIuMDAwNTMgMy44NjI5OCAyIDQuMiAySDEwLjhDMTEuMTM3IDIgMTEuMzU0NyAyLjAwMDUzIDExLjUxOTMgMi4wMTYxOEMxMS42NzY0IDIuMDMxMTIgMTEuNzMyOCAyLjA1NjIzIDExLjc2MTMgMi4wNzM2OEMxMS44Mjg1IDIuMTE0OTEgMTEuODg1MSAyLjE3MTQ3IDExLjkyNjMgMi4yMzg3NUMxMS45NDM4IDIuMjY3MjIgMTEuOTY4OSAyLjMyMzYyIDExLjk4MzggMi40ODA3NUMxMS45OTk1IDIuNjQ1MzIgMTIgMi44NjI5OCAxMiAzLjJWMTEuOEMxMiAxMi4xMzcgMTEuOTk5NSAxMi4zNTQ3IDExLjk4MzggMTIuNTE5M0MxMS45Njg5IDEyLjY3NjQgMTEuOTQzOCAxMi43MzI4IDExLjkyNjMgMTIuNzYxM0MxMS44ODUxIDEyLjgyODUgMTEuODI4NSAxMi44ODUxIDExLjc2MTMgMTIuOTI2M0MxMS43MzI4IDEyLjk0MzggMTEuNjc2NCAxMi45Njg5IDExLjUxOTMgMTIuOTgzOEMxMS4zNTQ3IDEyLjk5OTUgMTEuMTM3IDEzIDEwLjggMTNINC4yQzMuODYyOTggMTMgMy42NDUzMiAxMi45OTk1IDMuNDgwNzUgMTIuOTgzOEMzLjMyMzYyIDEyLjk2ODkgMy4yNjcyMiAxMi45NDM4IDMuMjM4NzUgMTIuOTI2M0MzLjE3MTQ3IDEyLjg4NTEgMy4xMTQ5MSAxMi44Mjg1IDMuMDczNjggMTIuNzYxM0MzLjA1NjI0IDEyLjczMjggMy4wMzExMiAxMi42NzY0IDMuMDE2MTggMTIuNTE5M0MzLjAwMDUzIDEyLjM1NDcgMyAxMi4xMzcgMyAxMS44VjMuMkMzIDIuODYyOTggMy4wMDA1MyAyLjY0NTMyIDMuMDE2MTggMi40ODA3NUMzLjAzMTEyIDIuMzIzNjIgMy4wNTYyNCAyLjI2NzIyIDMuMDczNjggMi4yMzg3NUMzLjExNDkxIDIuMTcxNDcgMy4xNzE0NyAyLjExNDkxIDMuMjM4NzUgMi4wNzM2OFpNNSAxMEM0LjcyMzg2IDEwIDQuNSAxMC4yMjM5IDQuNSAxMC41QzQuNSAxMC43NzYxIDQuNzIzODYgMTEgNSAxMUg4QzguMjc2MTQgMTEgOC41IDEwLjc3NjEgOC41IDEwLjVDOC41IDEwLjIyMzkgOC4yNzYxNCAxMCA4IDEwSDVaTTQuNSA3LjVDNC41IDcuMjIzODYgNC43MjM4NiA3IDUgN0gxMEMxMC4yNzYxIDcgMTAuNSA3LjIyMzg2IDEwLjUgNy41QzEwLjUgNy43NzYxNCAxMC4yNzYxIDggMTAgOEg1QzQuNzIzODYgOCA0LjUgNy43NzYxNCA0LjUgNy41Wk01IDRDNC43MjM4NiA0IDQuNSA0LjIyMzg2IDQuNSA0LjVDNC41IDQuNzc2MTQgNC43MjM4NiA1IDUgNUgxMEMxMC4yNzYxIDUgMTAuNSA0Ljc3NjE0IDEwLjUgNC41QzEwLjUgNC4yMjM4NiAxMC4yNzYxIDQgMTAgNEg1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuODQ5OTggNy40OTk5OEMxLjg0OTk4IDQuNjY0NTggNC4wNTk3OSAxLjg0OTk4IDcuNDk5OTggMS44NDk5OEMxMC4yNzgzIDEuODQ5OTggMTEuNjUxNSAzLjkwNjQgMTIuMjM2NyA1SDEwLjVDMTAuMjIzOSA1IDEwIDUuMjIzODYgMTAgNS41QzEwIDUuNzc2MTQgMTAuMjIzOSA2IDEwLjUgNkgxMy41QzEzLjc3NjEgNiAxNCA1Ljc3NjE0IDE0IDUuNVYyLjVDMTQgMi4yMjM4NiAxMy43NzYxIDIgMTMuNSAyQzEzLjIyMzkgMiAxMyAyLjIyMzg2IDEzIDIuNVY0LjMxMzE4QzEyLjI5NTUgMy4wNzEyNiAxMC42NjU5IDAuODQ5OTc2IDcuNDk5OTggMC44NDk5NzZDMy40MzcxNiAwLjg0OTk3NiAwLjg0OTk3NiA0LjE4NTM3IDAuODQ5OTc2IDcuNDk5OThDMC44NDk5NzYgMTAuODE0NiAzLjQzNzE2IDE0LjE1IDcuNDk5OTggMTQuMTVDOS40NDM4MiAxNC4xNSAxMS4wNjIyIDEzLjM4MDggMTIuMjE0NSAxMi4yMDg0QzEyLjgzMTUgMTEuNTgwNiAxMy4zMTMzIDEwLjgzOSAxMy42NDE4IDEwLjA0MDdDMTMuNzQ2OSA5Ljc4NTM2IDEzLjYyNTEgOS40OTMxNSAxMy4zNjk4IDkuMzg4MDZDMTMuMTE0NCA5LjI4Mjk2IDEyLjgyMjIgOS40MDQ3OCAxMi43MTcxIDkuNjYwMTRDMTIuNDM2MyAxMC4zNDI1IDEyLjAyNTEgMTAuOTc0NSAxMS41MDEzIDExLjUwNzRDMTAuNTI5NSAxMi40OTYzIDkuMTY1MDQgMTMuMTUgNy40OTk5OCAxMy4xNUM0LjA1OTc5IDEzLjE1IDEuODQ5OTggMTAuMzM1NCAxLjg0OTk4IDcuNDk5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxscj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC44NTM1NSAyLjE0NjQ1QzUuMDQ4ODIgMi4zNDE3MSA1LjA0ODgyIDIuNjU4MjkgNC44NTM1NSAyLjg1MzU1TDMuNzA3MTEgNEg5QzExLjQ4NTMgNCAxMy41IDYuMDE0NzIgMTMuNSA4LjVDMTMuNSAxMC45ODUzIDExLjQ4NTMgMTMgOSAxM0g1QzQuNzIzODYgMTMgNC41IDEyLjc3NjEgNC41IDEyLjVDNC41IDEyLjIyMzkgNC43MjM4NiAxMiA1IDEySDlDMTAuOTMzIDEyIDEyLjUgMTAuNDMzIDEyLjUgOC41QzEyLjUgNi41NjcgMTAuOTMzIDUgOSA1SDMuNzA3MTFMNC44NTM1NSA2LjE0NjQ1QzUuMDQ4ODIgNi4zNDE3MSA1LjA0ODgyIDYuNjU4MjkgNC44NTM1NSA2Ljg1MzU1QzQuNjU4MjkgNy4wNDg4MiA0LjM0MTcxIDcuMDQ4ODIgNC4xNDY0NSA2Ljg1MzU1TDIuMTQ2NDUgNC44NTM1NUMxLjk1MTE4IDQuNjU4MjkgMS45NTExOCA0LjM0MTcxIDIuMTQ2NDUgNC4xNDY0NUw0LjE0NjQ1IDIuMTQ2NDVDNC4zNDE3MSAxLjk1MTE4IDQuNjU4MjkgMS45NTExOCA0Ljg1MzU1IDIuMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxzcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4wNDk5NSAyLjc0OTk1QzMuMDQ5OTUgMi40NDYxOSAyLjgwMzcxIDIuMTk5OTUgMi40OTk5NSAyLjE5OTk1QzIuMTk2MTkgMi4xOTk5NSAxLjk0OTk1IDIuNDQ2MTkgMS45NDk5NSAyLjc0OTk1VjEyLjI1QzEuOTQ5OTUgMTIuNTUzNyAyLjE5NjE5IDEyLjggMi40OTk5NSAxMi44QzIuODAzNzEgMTIuOCAzLjA0OTk1IDEyLjU1MzcgMy4wNDk5NSAxMi4yNVYyLjc0OTk1Wk01LjczMzMzIDIuMzA3NzZDNS41NzgzNSAyLjIyNTk2IDUuMzkxODUgMi4yMzEyNyA1LjI0MTc3IDIuMzIxNzZDNS4wOTE3IDIuNDEyMjUgNC45OTk5NSAyLjU3NDcxIDQuOTk5OTUgMi43NDk5NVYxMi4yNUM0Ljk5OTk1IDEyLjQyNTIgNS4wOTE3IDEyLjU4NzcgNS4yNDE3NyAxMi42NzgxQzUuMzkxODUgMTIuNzY4NiA1LjU3ODM1IDEyLjc3MzkgNS43MzMzMyAxMi42OTIxTDE0LjczMzMgNy45NDIxNEMxNC44OTczIDcuODU1NTkgMTUgNy42ODUzOSAxNSA3LjQ5OTk1QzE1IDcuMzE0NTIgMTQuODk3MyA3LjE0NDMxIDE0LjczMzMgNy4wNTc3Nkw1LjczMzMzIDIuMzA3NzZaTTUuOTk5OTUgMTEuNDIwN1YzLjU3OTJMMTMuNDI4NyA3LjQ5OTk1TDUuOTk5OTUgMTEuNDIwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGNyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljg1MzU3IDMuODUzNTVMNy42NTM1NSAzLjA1MzUzQzguMjk4MSAyLjQwOTAxIDkuNDI4NTggMS45NjE3MiAxMC41NTIgMS44MDEyNUMxMS4xMDU2IDEuNzIyMTcgMTEuNjI5MSAxLjcxNzI1IDEyLjA1NjQgMS43ODEyNEMxMi40OTg3IDEuODQ3NDggMTIuNzY5OCAxLjk3Njk2IDEyLjg5NjUgMi4xMDM1N0MxMy4wMjMxIDIuMjMwMTggMTMuMTUyNiAyLjUwMTI1IDEzLjIxODggMi45NDM1N0MxMy4yODI4IDMuMzcwODYgMTMuMjc3OSAzLjg5NDM5IDEzLjE5ODggNC40NDgwMUMxMy4wMzgzIDUuNTcxMzkgMTIuNTkxIDYuNzAxODggMTEuOTQ2NCA3LjM0NjQ1TDcuNDk5OTkgMTEuNzkyOUw2LjM1MzU0IDEwLjY0NjVDNi4xNTgyNyAxMC40NTEyIDUuODQxNjkgMTAuNDUxMiA1LjY0NjQzIDEwLjY0NjVDNS40NTExNyAxMC44NDE3IDUuNDUxMTcgMTEuMTU4MyA1LjY0NjQzIDExLjM1MzZMNy4xNDY0NCAxMi44NTM2QzcuMzQxNzEgMTMuMDQ4OCA3LjY1ODI5IDEzLjA0ODggNy44NTM1NSAxMi44NTM2TDguNDAwNzMgMTIuMzA2NEw5LjU3MTI0IDE0LjI1NzJDOS42NTA0NiAxNC4zODkzIDkuNzg2MDggMTQuNDc3NCA5LjkzODkgMTQuNDk2M0MxMC4wOTE3IDE0LjUxNTEgMTAuMjQ0NyAxNC40NjI0IDEwLjM1MzUgMTQuMzUzNkwxMi4zNTM1IDEyLjM1MzZDMTIuNDY0OCAxMi4yNDIzIDEyLjUxNzIgMTIuMDg1MSAxMi40OTUgMTEuOTI5M0wxMi4wMzAzIDguNjc2NzlMMTIuNjUzNiA4LjA1MzU1QzEzLjUwOSA3LjE5ODA4IDE0LjAxMTcgNS44Mjg1NSAxNC4xODg3IDQuNTg5NDNDMTQuMjc4NCAzLjk2MTggMTQuMjg5MSAzLjMzODQ3IDE0LjIwNzggMi43OTU0NkMxNC4xMjg3IDIuMjY3NDggMTMuOTUxOSAxLjc0NDgyIDEzLjYwMzUgMS4zOTY0NUMxMy4yNTUyIDEuMDQ4MDkgMTIuNzMyNSAwLjg3MTMzMiAxMi4yMDQ1IDAuNzkyMjY0QzExLjY2MTUgMC43MTA5NDUgMTEuMDM4MiAwLjcyMTY0NCAxMC40MTA1IDAuODExM0M5LjE3MTQzIDAuOTg4MzA2IDcuODAxODkgMS40OTEgNi45NDY0NCAyLjM0NjQyTDYuMzIzMjIgMi45Njk2OEwzLjA3MDcxIDIuNTA1MDRDMi45MTQ5MiAyLjQ4Mjc4IDIuNzU3NzMgMi41MzUxNyAyLjY0NjQ1IDIuNjQ2NDZMMC42NDY0NTEgNC42NDY0NUMwLjUzNzU3OSA0Ljc1NTMzIDAuNDg0OTM4IDQuOTA4MjkgMC41MDM3NSA1LjA2MTFDMC41MjI1NjMgNS4yMTM5MSAwLjYxMDczIDUuMzQ5NTQgMC43NDI3NTcgNS40Mjg3NkwyLjY5MzY0IDYuNTk5MjhMMi4xNDY0NiA3LjE0NjQ1QzIuMDUyNyA3LjI0MDIyIDIuMDAwMDIgNy4zNjc0IDIuMDAwMDIgNy41MDAwMUMyLjAwMDAyIDcuNjMyNjEgMi4wNTI3IDcuNzU5NzkgMi4xNDY0NiA3Ljg1MzU2TDMuNjQ2NDcgOS4zNTM1NkMzLjg0MTczIDkuNTQ4ODMgNC4xNTgzMSA5LjU0ODgzIDQuMzUzNTcgOS4zNTM1NkM0LjU0ODg0IDkuMTU4MyA0LjU0ODg0IDguODQxNzIgNC4zNTM1NyA4LjY0NjQ2TDMuMjA3MTIgNy41MDAwMUwzLjg1MzU3IDYuODUzNTZMNi44NTM1NyAzLjg1MzU1Wk0xMC4wOTkzIDEzLjE5MzZMOS4xMjk1OSAxMS41Nzc1TDExLjE0NjQgOS41NjA2N0wxMS40Njk3IDExLjgyMzJMMTAuMDk5MyAxMy4xOTM2Wk0zLjQyMjUxIDUuODcwNDFMNS40MzkzNSAzLjg1MzU2TDMuMTc2NzggMy41MzAzNEwxLjgwNjM4IDQuOTAwNzRMMy40MjI1MSA1Ljg3MDQxWk0yLjM1MzU2IDEwLjM1MzVDMi41NDg4MiAxMC4xNTgzIDIuNTQ4ODIgOS44NDE3IDIuMzUzNTYgOS42NDY0NEMyLjE1ODMgOS40NTExOCAxLjg0MTcxIDkuNDUxMTggMS42NDY0NSA5LjY0NjQ0TDAuNjQ2NDUxIDEwLjY0NjRDMC40NTExODggMTAuODQxNyAwLjQ1MTE4OCAxMS4xNTgzIDAuNjQ2NDUxIDExLjM1MzVDMC44NDE3MTMgMTEuNTQ4OCAxLjE1ODMgMTEuNTQ4OCAxLjM1MzU2IDExLjM1MzVMMi4zNTM1NiAxMC4zNTM1Wk0zLjg1MzU4IDExLjg1MzZDNC4wNDg4NCAxMS42NTgzIDQuMDQ4ODUgMTEuMzQxNyAzLjg1MzU5IDExLjE0NjVDMy42NTgzMyAxMC45NTEyIDMuMzQxNzUgMTAuOTUxMiAzLjE0NjQ4IDExLjE0NjVMMS4xNDY0NSAxMy4xNDY0QzAuOTUxMTkgMTMuMzQxNyAwLjk1MTE4NyAxMy42NTgzIDEuMTQ2NDUgMTMuODUzNUMxLjM0MTcxIDE0LjA0ODggMS42NTgyOSAxNC4wNDg4IDEuODUzNTUgMTMuODUzNkwzLjg1MzU4IDExLjg1MzZaTTUuMzUzNTYgMTMuMzUzNUM1LjU0ODgyIDEzLjE1ODMgNS41NDg4MiAxMi44NDE3IDUuMzUzNTYgMTIuNjQ2NEM1LjE1ODMgMTIuNDUxMiA0Ljg0MTcxIDEyLjQ1MTIgNC42NDY0NSAxMi42NDY0TDMuNjQ2NDUgMTMuNjQ2NEMzLjQ1MTE5IDEzLjg0MTcgMy40NTExOSAxNC4xNTgzIDMuNjQ2NDUgMTQuMzUzNUMzLjg0MTcxIDE0LjU0ODggNC4xNTgzIDE0LjU0ODggNC4zNTM1NiAxNC4zNTM1TDUuMzUzNTYgMTMuMzUzNVpNOS40OTk5NyA2Ljc0ODgxQzEwLjE4OTcgNi43NDg4MSAxMC43NDg4IDYuMTg5NyAxMC43NDg4IDUuNUMxMC43NDg4IDQuODEwMyAxMC4xODk3IDQuMjUxMTggOS40OTk5NyA0LjI1MTE4QzguODEwMjYgNC4yNTExOCA4LjI1MTE1IDQuODEwMyA4LjI1MTE1IDUuNUM4LjI1MTE1IDYuMTg5NyA4LjgxMDI2IDYuNzQ4ODEgOS40OTk5NyA2Ljc0ODgxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNTk2NjQgMi45MzYyOEM3Ljc2MDg1IDMuMDY0MDEgOC4wMDAxMiAyLjk0Njk4IDguMDAwMTIgMi43Mzg5NVYxLjk5OTk4QzkuOTgxNDMgMiAxMS4xODQ4IDIuMzYzNyAxMS45MTA1IDMuMDg5NDVDMTIuNjM2MyAzLjgxNTIyIDEzIDUuMDE4NiAxMyA2Ljk5OTk4QzEzIDcuMjc2MTMgMTMuMjIzOSA3LjQ5OTk4IDEzLjUgNy40OTk5OEMxMy43NzYxIDcuNDk5OTggMTQgNy4yNzYxMyAxNCA2Ljk5OTk4QzE0IDQuOTQzOCAxMy42MzI1IDMuMzk3MTkgMTIuNjE3NiAyLjM4MjM0QzExLjYwMjggMS4zNjc1MiAxMC4wNTYyIDAuOTk5OTk5IDguMDAwMTIgMC45OTk5ODRWMC4yNjEyNjZDOC4wMDAxMiAwLjA1MzIyOTMgNy43NjA4NSAtMC4wNjM3OTQ0IDcuNTk2NjQgMC4wNjM5MjhMNi4wMDM4NCAxLjMwMjc3QzUuODc1MTYgMS40MDI4NiA1Ljg3NTE2IDEuNTk3MzUgNi4wMDM4NCAxLjY5NzQ0TDcuNTk2NjQgMi45MzYyOFpNOS41IDVIMi41QzIuMjIzODYgNSAyIDUuMjIzODYgMiA1LjVWMTIuNUMyIDEyLjc3NjEgMi4yMjM4NiAxMyAyLjUgMTNIOS41QzkuNzc2MTQgMTMgMTAgMTIuNzc2MSAxMCAxMi41VjUuNUMxMCA1LjIyMzg2IDkuNzc2MTQgNSA5LjUgNVpNMi41IDRDMS42NzE1NyA0IDEgNC42NzE1NyAxIDUuNVYxMi41QzEgMTMuMzI4NCAxLjY3MTU3IDE0IDIuNSAxNEg5LjVDMTAuMzI4NCAxNCAxMSAxMy4zMjg0IDExIDEyLjVWNS41QzExIDQuNjcxNTcgMTAuMzI4NCA0IDkuNSA0SDIuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGRyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjgxODMyIDAuNjgxNzlDNy42NDI1OCAwLjUwNjA1NCA3LjM1NzY2IDAuNTA2MDU0IDcuMTgxOTIgMC42ODE3OUw1LjE4MTkyIDIuNjgxNzlDNS4wMDYxOSAyLjg1NzUzIDUuMDA2MTkgMy4xNDI0NSA1LjE4MTkyIDMuMzE4MTlDNS4zNTc2NiAzLjQ5MzkyIDUuNjQyNTggMy40OTM5MiA1LjgxODMyIDMuMzE4MTlMNy4wNTAxMiAyLjA4NjM4TDcuMDUwMTIgNS41MDAyM0M3LjA1MDEyIDUuNzQ4NzYgNy4yNTE1OSA1Ljk1MDIzIDcuNTAwMTIgNS45NTAyM0M3Ljc0ODY1IDUuOTUwMjMgNy45NTAxMiA1Ljc0ODc2IDcuOTUwMTIgNS41MDAyM0w3Ljk1MDEyIDIuMDg2MzhMOS4xODE5MiAzLjMxODE5QzkuMzU3NjYgMy40OTM5MiA5LjY0MjU4IDMuNDkzOTIgOS44MTgzMiAzLjMxODE5QzkuOTk0MDYgMy4xNDI0NSA5Ljk5NDA2IDIuODU3NTMgOS44MTgzMiAyLjY4MTc5TDcuODE4MzIgMC42ODE3OVpNNy45NTAxMiAxMi45MTM2VjkuNTAwMjNDNy45NTAxMiA5LjI1MTcgNy43NDg2NSA5LjA1MDIzIDcuNTAwMTIgOS4wNTAyM0M3LjI1MTU5IDkuMDUwMjMgNy4wNTAxMiA5LjI1MTcgNy4wNTAxMiA5LjUwMDIzVjEyLjkxMzZMNS44MTgzMiAxMS42ODE4QzUuNjQyNTggMTEuNTA2MSA1LjM1NzY2IDExLjUwNjEgNS4xODE5MiAxMS42ODE4QzUuMDA2MTkgMTEuODU3NSA1LjAwNjE5IDEyLjE0MjQgNS4xODE5MiAxMi4zMTgyTDcuMTgxOTIgMTQuMzE4MkM3LjI2NjMyIDE0LjQwMjYgNy4zODA3NyAxNC40NSA3LjUwMDEyIDE0LjQ1QzcuNjE5NDcgMTQuNDUgNy43MzM5MyAxNC40MDI2IDcuODE4MzIgMTQuMzE4Mkw5LjgxODMyIDEyLjMxODJDOS45OTQwNiAxMi4xNDI0IDkuOTk0MDYgMTEuODU3NSA5LjgxODMyIDExLjY4MThDOS42NDI1OCAxMS41MDYxIDkuMzU3NjYgMTEuNTA2MSA5LjE4MTkyIDExLjY4MThMNy45NTAxMiAxMi45MTM2Wk0xLjQ5OTk0IDcuMDAwMTdDMS4yMjM4IDcuMDAwMTcgMC45OTk5MzkgNy4yMjQwMyAwLjk5OTkzOSA3LjUwMDE3QzAuOTk5OTM5IDcuNzc2MzEgMS4yMjM4IDguMDAwMTcgMS40OTk5NCA4LjAwMDE3TDEzLjQ5OTkgOC4wMDAxN0MxMy43NzYxIDguMDAwMTcgMTMuOTk5OSA3Ljc3NjMxIDEzLjk5OTkgNy41MDAxN0MxMy45OTk5IDcuMjI0MDMgMTMuNzc2MSA3LjAwMDE3IDEzLjQ5OTkgNy4wMDAxN0wxLjQ5OTk0IDcuMDAwMTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxwcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQgMTIuODVMMSAxMi44NUwxIDE0LjE1TDE0IDE0LjE1TDE0IDEyLjg1Wk0xNCA4Ljg1MDAyTDEgOC44NTAwMkwxIDEwLjE1TDE0IDEwLjE1TDE0IDguODUwMDJaTTEgNC44NTAwM0wxNCA0Ljg1MDAzTDE0IDYuMTUwMDNMMSA2LjE1MDAyTDEgNC44NTAwM1pNMTQgMC44NTAwMjVMMSAwLjg1MDAyNUwxIDIuMTUwMDJMMTQgMi4xNTAwMkwxNCAwLjg1MDAyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGZyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjUgNEMwLjIyMzg1OCA0IDAgNC4yMjM4NiAwIDQuNVYxMC41QzAgMTAuNzc2MSAwLjIyMzg1OCAxMSAwLjUgMTFIMTQuNUMxNC43NzYxIDExIDE1IDEwLjc3NjEgMTUgMTAuNVY0LjVDMTUgNC4yMjM4NiAxNC43NzYxIDQgMTQuNSA0SDAuNVpNMSAxMFY1SDIuMDc1VjcuNUMyLjA3NSA3LjczNDcyIDIuMjY1MjggNy45MjUgMi41IDcuOTI1QzIuNzM0NzIgNy45MjUgMi45MjUgNy43MzQ3MiAyLjkyNSA3LjVWNUg0LjA3NVY2LjVDNC4wNzUgNi43MzQ3MiA0LjI2NTI4IDYuOTI1IDQuNSA2LjkyNUM0LjczNDcyIDYuOTI1IDQuOTI1IDYuNzM0NzIgNC45MjUgNi41VjVINi4wNzVWNi41QzYuMDc1IDYuNzM0NzIgNi4yNjUyOCA2LjkyNSA2LjUgNi45MjVDNi43MzQ3MiA2LjkyNSA2LjkyNSA2LjczNDcyIDYuOTI1IDYuNVY1SDguMDc1VjcuNUM4LjA3NSA3LjczNDcyIDguMjY1MjggNy45MjUgOC41IDcuOTI1QzguNzM0NzIgNy45MjUgOC45MjUgNy43MzQ3MiA4LjkyNSA3LjVWNUgxMC4wNzVWNi41QzEwLjA3NSA2LjczNDcyIDEwLjI2NTMgNi45MjUgMTAuNSA2LjkyNUMxMC43MzQ3IDYuOTI1IDEwLjkyNSA2LjczNDcyIDEwLjkyNSA2LjVWNUgxMi4wNzVWNi41QzEyLjA3NSA2LjczNDcyIDEyLjI2NTMgNi45MjUgMTIuNSA2LjkyNUMxMi43MzQ3IDYuOTI1IDEyLjkyNSA2LjczNDcyIDEyLjkyNSA2LjVWNUgxNFYxMEgxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuNSAwQzAuMjIzODU4IDAgMCAwLjIyMzg1OCAwIDAuNVYxNC41QzAgMTQuNzc2MSAwLjIyMzg1OCAxNSAwLjUgMTVINC41QzQuNzc2MTQgMTUgNSAxNC43NzYxIDUgMTQuNVY1SDE0LjVDMTQuNzc2MSA1IDE1IDQuNzc2MTQgMTUgNC41VjAuNUMxNSAwLjIyMzg1OCAxNC43NzYxIDAgMTQuNSAwSDAuNVpNMSA0LjA3NTA1TDEgMUg0LjA3NTAyQzQuMDc1MDIgMSA0LjA3NTAyIDEgNC4wNzUwMiAxTDQuMDc1MDUgNC4wNzUwN0wxIDQuMDc1MDVaTTAuOTk5OTk3IDQuOTI1MDVMMSAxNEg0VjEyLjkyNUgyLjc1MDAyQzIuNTE1MyAxMi45MjUgMi4zMjUwMiAxMi43MzQ4IDIuMzI1MDIgMTIuNUMyLjMyNTAyIDEyLjI2NTMgMi41MTUzIDEyLjA3NSAyLjc1MDAyIDEyLjA3NUg0VjEwLjkyNUgyLjI1MDAyQzIuMDE1MyAxMC45MjUgMS44MjUwMiAxMC43MzQ3IDEuODI1MDIgMTAuNUMxLjgyNTAyIDEwLjI2NTMgMi4wMTUzIDEwLjA3NSAyLjI1MDAyIDEwLjA3NUg0VjguOTI1MDRMMi43NTAwMiA4LjkyNTAyQzIuNTE1MyA4LjkyNTAyIDIuMzI1MDIgOC43MzQ3NCAyLjMyNTAyIDguNTAwMDJDMi4zMjUwMyA4LjI2NTI5IDIuNTE1MzEgOC4wNzUwMiAyLjc1MDAzIDguMDc1MDJMNCA4LjA3NTA0VjYuOTI1MDJMMi43NDk5OSA2LjkyNUMyLjUxNTI3IDYuOTI1IDIuMzI1IDYuNzM0NzIgMi4zMjUgNi41QzIuMzI1IDYuMjY1MjggMi41MTUyOSA2LjA3NSAyLjc1MDAxIDYuMDc1TDQgNi4wNzUwMlY0LjkyNTA3TDAuOTk5OTk3IDQuOTI1MDVaTTQuOTI1MDUgNEg2LjA3NVYyLjc1MDA2QzYuMDc1IDIuNTE1MzQgNi4yNjUyOCAyLjMyNTA2IDYuNSAyLjMyNTA2QzYuNzM0NzIgMi4zMjUwNiA2LjkyNSAyLjUxNTM0IDYuOTI1IDIuNzUwMDZWNEg4LjA3NTAyVjIuNzUwMDVDOC4wNzUwMiAyLjUxNTMzIDguMjY1MyAyLjMyNTA1IDguNTAwMDIgMi4zMjUwNUM4LjczNDc0IDIuMzI1MDUgOC45MjUwMiAyLjUxNTMzIDguOTI1MDIgMi43NTAwNVY0SDEwLjA3NTFWMi4yNTAwNUMxMC4wNzUxIDIuMDE1MzMgMTAuMjY1MyAxLjgyNTA1IDEwLjUwMDEgMS44MjUwNUMxMC43MzQ4IDEuODI1MDUgMTAuOTI1MSAyLjAxNTMzIDEwLjkyNTEgMi4yNTAwNVY0SDEyLjA3NTFWMi43NTAwNUMxMi4wNzUxIDIuNTE1MzMgMTIuMjY1NCAyLjMyNTA1IDEyLjUwMDEgMi4zMjUwNUMxMi43MzQ4IDIuMzI1MDUgMTIuOTI1MSAyLjUxNTMzIDEyLjkyNTEgMi43NTAwNVY0SDE0VjFINC45MjUwMkw0LjkyNTA1IDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxncj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAxLjVDMiAxLjc3NjE0IDEuNzc2MTQgMiAxLjUgMkMxLjIyMzg2IDIgMSAxLjc3NjE0IDEgMS41QzEgMS4yMjM4NiAxLjIyMzg2IDEgMS41IDFDMS43NzYxNCAxIDIgMS4yMjM4NiAyIDEuNVpNMiA1TDIgMTBIMTNWNUgyWk0yIDRDMS40NDc3MiA0IDEgNC40NDc3MiAxIDVWMTBDMSAxMC41NTIzIDEuNDQ3NzIgMTEgMiAxMUgxM0MxMy41NTIzIDExIDE0IDEwLjU1MjMgMTQgMTBWNUMxNCA0LjQ0NzcyIDEzLjU1MjMgNCAxMyA0SDJaTTEuNSAxNEMxLjc3NjE0IDE0IDIgMTMuNzc2MSAyIDEzLjVDMiAxMy4yMjM5IDEuNzc2MTQgMTMgMS41IDEzQzEuMjIzODYgMTMgMSAxMy4yMjM5IDEgMTMuNUMxIDEzLjc3NjEgMS4yMjM4NiAxNCAxLjUgMTRaTTQgMS41QzQgMS43NzYxNCAzLjc3NjE0IDIgMy41IDJDMy4yMjM4NiAyIDMgMS43NzYxNCAzIDEuNUMzIDEuMjIzODYgMy4yMjM4NiAxIDMuNSAxQzMuNzc2MTQgMSA0IDEuMjIzODYgNCAxLjVaTTMuNSAxNEMzLjc3NjE0IDE0IDQgMTMuNzc2MSA0IDEzLjVDNCAxMy4yMjM5IDMuNzc2MTQgMTMgMy41IDEzQzMuMjIzODYgMTMgMyAxMy4yMjM5IDMgMTMuNUMzIDEzLjc3NjEgMy4yMjM4NiAxNCAzLjUgMTRaTTYgMS41QzYgMS43NzYxNCA1Ljc3NjE0IDIgNS41IDJDNS4yMjM4NiAyIDUgMS43NzYxNCA1IDEuNUM1IDEuMjIzODYgNS4yMjM4NiAxIDUuNSAxQzUuNzc2MTQgMSA2IDEuMjIzODYgNiAxLjVaTTUuNSAxNEM1Ljc3NjE0IDE0IDYgMTMuNzc2MSA2IDEzLjVDNiAxMy4yMjM5IDUuNzc2MTQgMTMgNS41IDEzQzUuMjIzODYgMTMgNSAxMy4yMjM5IDUgMTMuNUM1IDEzLjc3NjEgNS4yMjM4NiAxNCA1LjUgMTRaTTggMS41QzggMS43NzYxNCA3Ljc3NjE0IDIgNy41IDJDNy4yMjM4NiAyIDcgMS43NzYxNCA3IDEuNUM3IDEuMjIzODYgNy4yMjM4NiAxIDcuNSAxQzcuNzc2MTQgMSA4IDEuMjIzODYgOCAxLjVaTTcuNSAxNEM3Ljc3NjE0IDE0IDggMTMuNzc2MSA4IDEzLjVDOCAxMy4yMjM5IDcuNzc2MTQgMTMgNy41IDEzQzcuMjIzODYgMTMgNyAxMy4yMjM5IDcgMTMuNUM3IDEzLjc3NjEgNy4yMjM4NiAxNCA3LjUgMTRaTTEwIDEuNUMxMCAxLjc3NjE0IDkuNzc2MTQgMiA5LjUgMkM5LjIyMzg2IDIgOSAxLjc3NjE0IDkgMS41QzkgMS4yMjM4NiA5LjIyMzg2IDEgOS41IDFDOS43NzYxNCAxIDEwIDEuMjIzODYgMTAgMS41Wk05LjUgMTRDOS43NzYxNCAxNCAxMCAxMy43NzYxIDEwIDEzLjVDMTAgMTMuMjIzOSA5Ljc3NjE0IDEzIDkuNSAxM0M5LjIyMzg2IDEzIDkgMTMuMjIzOSA5IDEzLjVDOSAxMy43NzYxIDkuMjIzODYgMTQgOS41IDE0Wk0xMiAxLjVDMTIgMS43NzYxNCAxMS43NzYxIDIgMTEuNSAyQzExLjIyMzkgMiAxMSAxLjc3NjE0IDExIDEuNUMxMSAxLjIyMzg2IDExLjIyMzkgMSAxMS41IDFDMTEuNzc2MSAxIDEyIDEuMjIzODYgMTIgMS41Wk0xMS41IDE0QzExLjc3NjEgMTQgMTIgMTMuNzc2MSAxMiAxMy41QzEyIDEzLjIyMzkgMTEuNzc2MSAxMyAxMS41IDEzQzExLjIyMzkgMTMgMTEgMTMuMjIzOSAxMSAxMy41QzExIDEzLjc3NjEgMTEuMjIzOSAxNCAxMS41IDE0Wk0xNCAxLjVDMTQgMS43NzYxNCAxMy43NzYxIDIgMTMuNSAyQzEzLjIyMzkgMiAxMyAxLjc3NjE0IDEzIDEuNUMxMyAxLjIyMzg2IDEzLjIyMzkgMSAxMy41IDFDMTMuNzc2MSAxIDE0IDEuMjIzODYgMTQgMS41Wk0xMy41IDE0QzEzLjc3NjEgMTQgMTQgMTMuNzc2MSAxNCAxMy41QzE0IDEzLjIyMzkgMTMuNzc2MSAxMyAxMy41IDEzQzEzLjIyMzkgMTMgMTMgMTMuMjIzOSAxMyAxMy41QzEzIDEzLjc3NjEgMTMuMjIzOSAxNCAxMy41IDE0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYgMy41QzYgMi42NzE1NyA2LjY3MTU3IDIgNy41IDJDOC4zMjg0MyAyIDkgMi42NzE1NyA5IDMuNUM5IDQuMzI4NDMgOC4zMjg0MyA1IDcuNSA1QzYuNjcxNTcgNSA2IDQuMzI4NDMgNiAzLjVaTTggNS45NDk5OUM5LjE0MTEyIDUuNzE4MzYgMTAgNC43MDk0OCAxMCAzLjVDMTAgMi4xMTkyOSA4Ljg4MDcxIDEgNy41IDFDNi4xMTkyOSAxIDUgMi4xMTkyOSA1IDMuNUM1IDQuNzA5NDggNS44NTg4OCA1LjcxODM2IDcgNS45NDk5OVYxMy41QzcgMTMuNzc2MSA3LjIyMzg2IDE0IDcuNSAxNEM3Ljc3NjE0IDE0IDggMTMuNzc2MSA4IDEzLjVWNS45NDk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LENyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMCAzLjVDMTAgNC43MDk0OCA5LjE0MTEyIDUuNzE4MzYgOCA1Ljk0OTk5VjEzLjVDOCAxMy43NzYxIDcuNzc2MTQgMTQgNy41IDE0QzcuMjIzODYgMTQgNyAxMy43NzYxIDcgMTMuNVY1Ljk0OTk5QzUuODU4ODggNS43MTgzNiA1IDQuNzA5NDggNSAzLjVDNSAyLjExOTI5IDYuMTE5MjkgMSA3LjUgMUM4Ljg4MDcxIDEgMTAgMi4xMTkyOSAxMCAzLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxtcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy40OTk4OEMwLjg3NzA3NSAzLjg0MjE5IDMuODQyMjIgMC44NzcwNDUgNy40OTk5MSAwLjg3NzA0NUMxMS4xNTc2IDAuODc3MDQ1IDE0LjEyMjcgMy44NDIxOSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyAxMS4xNTc1IDExLjE1NzYgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMy44NDIyMiAxNC4xMjI3IDAuODc3MDc1IDExLjE1NzUgMC44NzcwNzUgNy40OTk4OFpNNy40OTk5MSAxLjgyNzA0QzQuMzY2ODkgMS44MjcwNCAxLjgyNzA4IDQuMzY2ODYgMS44MjcwOCA3LjQ5OTg4QzEuODI3MDggMTAuNjMyOSA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzEwLjYzMjkgMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNC4zNjY4NiAxMC42MzI5IDEuODI3MDQgNy40OTk5MSAxLjgyNzA0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMDVcIixkOlwiTTYuNzgyOTYgMTMuMzc2QzguNzM5MDQgOS45NTI4NCA4LjczOTA0IDUuMDQ3MTkgNi43ODI5NiAxLjYyNDA1TDcuMjE3MDggMS4zNzU5OEM5LjI2MSA0Ljk1MjgzIDkuMjYxIDEwLjA0NzIgNy4yMTcwOCAxMy42MjRMNi43ODI5NiAxMy4zNzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xXCIsZDpcIk03LjI4MjA0IDEzLjQ3NzVDOS4yMzkyOSA5Ljk5NTIzIDkuMjM5MjkgNS4wMDQ3NSA3LjI4MjA0IDEuNTIyNDhMNy43MTc5MSAxLjI3NzVDOS43NjA2NyA0LjkxMTkgOS43NjA2NyAxMC4wODgxIDcuNzE3OTEgMTMuNzIyNUw3LjI4MjA0IDEzLjQ3NzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xNVwiLGQ6XCJNNy44MjA5OCAxMy41MDY0QzkuNzI1MDIgOS45OTUyMyA5LjcyNjM2IDUuMDE0MTEgNy44MjQ5MiAxLjUwMDg0TDguMjY0NjUgMS4yNjI4NUMxMC4yNDY1IDQuOTI0NjYgMTAuMjQ1MSAxMC4wODUgOC4yNjA1MiAxMy43NDQ4TDcuODIwOTggMTMuNTA2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjJcIixkOlwiTTguNDEyODQgMTMuNDI5QzEwLjE5NTIgOS45Mjg0MiAxMC4xOTU3IDUuMDc1MzcgOC40MTQzNSAxLjU3NDAyTDguODU5OTkgMS4zNDcyOUMxMC43MTM5IDQuOTkxMTMgMTAuNzEzMyAxMC4wMTI4IDguODU4NDEgMTMuNjU1OUw4LjQxMjg0IDEzLjQyOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjI1XCIsZDpcIk05LjAyNDQxIDEzLjI5NTZDMTAuNjU2NyA5LjgzNzkgMTAuNjU4NiA1LjE3NzE1IDkuMDMwMDUgMS43MTY1Nkw5LjQ4MjQ1IDEuNTAzNjZDMTEuMTc0NSA1LjA5OTE5IDExLjE3MjYgOS45MTYyOSA5LjQ3NjU3IDEzLjUwOTFMOS4wMjQ0MSAxMy4yOTU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuM1wiLGQ6XCJNOS42NjgwOSAxMy4wNjU1QzExLjEwOTcgOS42OTU3MiAxMS4xMTA3IDUuMzEyMSA5LjY3MDg4IDEuOTQwOTVMMTAuMTMwNyAxLjc0NDU3QzExLjYyNDEgNS4yNDEyMSAxMS42MjMxIDkuNzY2ODMgMTAuMTI3OCAxMy4yNjIyTDkuNjY4MDkgMTMuMDY1NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjM1XCIsZDpcIk0xMC4zMzEgMTIuNzQ1NkMxMS41NTUxIDkuNTIwNzMgMTEuNTU2NCA1LjQ5MTAzIDEwLjMzNDcgMi4yNjQ0NEwxMC44MDI0IDIuMDg3NEMxMi4wNjcyIDUuNDI4MTUgMTIuMDY1OSA5LjU4Mzk0IDEwLjc5ODUgMTIuOTIzMUwxMC4zMzEgMTIuNzQ1NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjRcIixkOlwiTTExLjAxNTUgMTIuMjk4NkMxMS45OTM4IDkuMjk3NDQgMTEuOTk0OCA1LjcxMjk2IDExLjAxODQgMi43MTA2N0wxMS40OTM5IDIuNTU2MDNDMTIuNTAzIDUuNjU4OSAxMi41MDIgOS4zNTE3OCAxMS40OTA5IDEyLjQ1MzVMMTEuMDE1NSAxMi4yOTg2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNDVcIixkOlwiTTExLjcyMTQgMTEuNjY4QzEyLjQyNTQgOS4wMTMwMyAxMi40MjYyIDUuOTk2OTEgMTEuNzIzNyAzLjM0MTE2TDEyLjIwNzEgMy4yMTMyOUMxMi45MzE4IDUuOTUyOTIgMTIuOTMxIDkuMDU3MjggMTIuMjA0NyAxMS43OTYxTDExLjcyMTQgMTEuNjY4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNVwiLGQ6XCJNMTIuNDQzMiAxMC43NTJDMTIuODUyNCA4LjYzNzYyIDEyLjg1MjMgNi4zNjA4OSAxMi40NDI5IDQuMjQ2NkwxMi45MzM4IDQuMTUxNTVDMTMuMzU1MyA2LjMyODYxIDEzLjM1NTQgOC42Njk4NSAxMi45MzQxIDEwLjg0N0wxMi40NDMyIDEwLjc1MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjg3NzA3NSA3LjQ5OTg4QzAuODc3MDc1IDMuODQyMTkgMy44NDIyMiAwLjg3NzA0NSA3LjQ5OTkxIDAuODc3MDQ1QzExLjE1NzYgMC44NzcwNDUgMTQuMTIyNyAzLjg0MjE5IDE0LjEyMjcgNy40OTk4OEMxNC4xMjI3IDExLjE1NzUgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MzLjg0MjIyIDE0LjEyMjcgMC44NzcwNzUgMTEuMTU3NSAwLjg3NzA3NSA3LjQ5OTg4Wk03LjQ5OTkxIDEuODI3MDRDNC4zNjY4OSAxLjgyNzA0IDEuODI3MDggNC4zNjY4NiAxLjgyNzA4IDcuNDk5ODhDMS44MjcwOCAxMC42MzI5IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDMTAuNjMyOSAxMy4xNzI3IDEzLjE3MjcgMTAuNjMyOSAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyA0LjM2Njg2IDEwLjYzMjkgMS44MjcwNCA3LjQ5OTkxIDEuODI3MDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4wNVwiLGQ6XCJNMTIuMTYxOSAzLjg1MTgyQzguMzU4MTcgNC44ODkxOCA0Ljg4OTM2IDguMzU4IDMuODUxOTkgMTIuMTYxN0wzLjM2OTYgMTIuMDMwMUM0LjQ1MzU2IDguMDU1NjQgOC4wNTU4MSA0LjQ1MzM5IDEyLjAzMDMgMy4zNjk0M0wxMi4xNjE5IDMuODUxODJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xXCIsZDpcIk0xMS44ODA3IDMuNDI3MDdDOC4wMzQ0MSA0LjUwNTQyIDQuNTA1NjEgOC4wMzQyMiAzLjQyNzI2IDExLjg4MDVMMi45NDU4MiAxMS43NDU2QzQuMDcxMjkgNy43MzEyMSA3LjczMTQgNC4wNzExIDExLjc0NTggMi45NDU2M0wxMS44ODA3IDMuNDI3MDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xNVwiLGQ6XCJNMTEuNTIwMSAzLjAyNTU2QzcuNjkwOTIgNC4xNjE5OSA0LjE2Nzc5IDcuNjgzMjMgMy4wMjgwNSAxMS41MTJMMi41NDg4MyAxMS4zNjk0QzMuNzM2NzYgNy4zNzg2OSA3LjM4NjU5IDMuNzMwNzYgMTEuMzc3OCAyLjU0NjIzTDExLjUyMDEgMy4wMjU1NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjJcIixkOlwiTTExLjA0NjggMi42NjE2OUM3LjMxMTE3IDMuODc2NjQgMy44NzkxOCA3LjMwNzkgMi42NjI5OCAxMS4wNDM0TDIuMTg3NTQgMTAuODg4NkMzLjQ1MzI0IDcuMDAxMDkgNy4wMDQ0NSAzLjQ1MDYyIDEwLjg5MjEgMi4xODYyMUwxMS4wNDY4IDIuNjYxNjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yNVwiLGQ6XCJNMTAuNTIwMSAyLjMyMzY1QzYuOTIwOTEgMy42MTQ0NyAzLjYyMzkxIDYuOTA4NzYgMi4zMjg0NSAxMC41MDczTDEuODU4IDEwLjMzOEMzLjIwMzk4IDYuNTk5MDkgNi42MTE1NSAzLjE5NDI0IDEwLjM1MTMgMS44NTMwMUwxMC41MjAxIDIuMzIzNjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zXCIsZDpcIk05LjkwMjIyIDIuMDMxMjJDNi41MDAwMyAzLjM5NDY1IDMuMzk5NjggNi40OTM2NyAyLjAzMzk5IDkuODk1NTFMMS41Njk5OCA5LjcwOTI0QzIuOTg2NTEgNi4xODA3NiA2LjE4NzI4IDIuOTgxMzMgOS43MTYyMiAxLjU2NzFMOS45MDIyMiAyLjAzMTIyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMzVcIixkOlwiTTkuMjA3MjcgMS43ODg3M0M2LjA2MTM2IDMuMjAzNDkgMy4yMTEwMyA2LjA1MjAzIDEuNzkzMzEgOS4xOTczOEwxLjMzNzQ3IDguOTkxOTJDMi44MDUzNiA1LjczNTI4IDUuNzQ0ODUgMi43OTc2IDkuMDAyMiAxLjMzMjcyTDkuMjA3MjcgMS43ODg3M1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjRcIixkOlwiTTguNDA3MTMgMS42MjA4NUM1LjU5MzIzIDMuMDUxMTcgMy4wNTc5NCA1LjU4NTA5IDEuNjI1NDQgOC4zOTg0N0wxLjE3OTg3IDguMTcxNkMyLjY2MDM2IDUuMjYzOTcgNS4yNzIzMiAyLjY1MzQgOC4xODA1NyAxLjE3NTEzTDguNDA3MTMgMS42MjA4NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjQ1XCIsZDpcIk03LjQ2MjA3IDEuNTY3NDdDNS4wODY4OSAyLjk0Njk1IDIuOTUzNjIgNS4wNzkxMiAxLjU3MjQ5IDcuNDUzNzlMMS4xNDAyOCA3LjIwMjQxQzIuNTY1MDMgNC43NTI3MyA0Ljc2MDcgMi41NTgxOCA3LjIxMDk2IDEuMTM1MUw3LjQ2MjA3IDEuNTY3NDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi41XCIsZDpcIk02LjMwNDA3IDEuNzA0ODdDNC41MTk2NCAyLjkxMDYzIDIuOTA5ODMgNC41MjA2MSAxLjcwNDMgNi4zMDUxM0wxLjI4OTk4IDYuMDI1MjRDMi41MzEzIDQuMTg3NzMgNC4xODY3MyAyLjUzMjE0IDYuMDI0MTMgMS4yOTA1OUw2LjMwNDA3IDEuNzA0ODdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxicj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3NzA0NUMzLjg0MjIyIDAuODc3MDQ1IDAuODc3MDc1IDMuODQyMTkgMC44NzcwNzUgNy40OTk4OEMwLjg3NzA3NSA5LjE0ODggMS40Nzk2OSAxMC42NTcgMi40NzY3IDExLjgxNjJMMS42NDY0NyAxMi42NDY0QzEuNDUxMjEgMTIuODQxNyAxLjQ1MTIxIDEzLjE1ODMgMS42NDY0NyAxMy4zNTM1QzEuODQxNzMgMTMuNTQ4OCAyLjE1ODMyIDEzLjU0ODggMi4zNTM1OCAxMy4zNTM1TDMuMTgzODMgMTIuNTIzM0M0LjM0MzAyIDEzLjUyMDIgNS44NTExIDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzExLjE1NzYgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgNS44NTEwNyAxMy41MjAyIDQuMzQyOTggMTIuNTIzMyAzLjE4MzhMMTMuMzUzNiAyLjM1MzU1QzEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDEuODQxNyAxMy4zNTM2IDEuNjQ2NDRDMTMuMTU4MyAxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMi42NDY1IDEuNjQ2NDRMMTEuODE2MiAyLjQ3NjY3QzEwLjY1NyAxLjQ3OTY2IDkuMTQ4ODMgMC44NzcwNDUgNy40OTk5MSAwLjg3NzA0NVpNMTEuMTQyMyAzLjE1MDY1QzEwLjE1NjggMi4zMjQ0OSA4Ljg4NjQ0IDEuODI3MDQgNy40OTk5MSAxLjgyNzA0QzQuMzY2ODkgMS44MjcwNCAxLjgyNzA4IDQuMzY2ODYgMS44MjcwOCA3LjQ5OTg4QzEuODI3MDggOC44ODY0MSAyLjMyNDUyIDEwLjE1NjggMy4xNTA2OSAxMS4xNDIyTDExLjE0MjMgMy4xNTA2NVpNMy44NTc4MSAxMS44NDkzQzQuODQzMjIgMTIuNjc1MyA2LjExMzQ4IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzEwLjYzMjkgMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNi4xMTM0NSAxMi42NzU0IDQuODQzMTkgMTEuODQ5MyAzLjg1Nzc4TDMuODU3ODEgMTEuODQ5M1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjA1XCIsZDpcIk02Ljc4Mjk2IDEzLjM3NkM4LjczOTA0IDkuOTUyODQgOC43MzkwNCA1LjA0NzE5IDYuNzgyOTYgMS42MjQwNUw3LjIxNzA4IDEuMzc1OThDOS4yNjEgNC45NTI4MyA5LjI2MSAxMC4wNDcyIDcuMjE3MDggMTMuNjI0TDYuNzgyOTYgMTMuMzc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMVwiLGQ6XCJNNy4yODIwNCAxMy40Nzc1QzkuMjM5MjkgOS45OTUyMyA5LjIzOTI5IDUuMDA0NzUgNy4yODIwNCAxLjUyMjQ4TDcuNzE3OTEgMS4yNzc1QzkuNzYwNjcgNC45MTE5IDkuNzYwNjcgMTAuMDg4MSA3LjcxNzkxIDEzLjcyMjVMNy4yODIwNCAxMy40Nzc1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMTVcIixkOlwiTTcuODIwOTggMTMuNTA2NEM5LjcyNTAyIDkuOTk1MjMgOS43MjYzNiA1LjAxNDExIDcuODI0OTIgMS41MDA4NEw4LjI2NDY1IDEuMjYyODVDMTAuMjQ2NSA0LjkyNDY2IDEwLjI0NTEgMTAuMDg1IDguMjYwNTIgMTMuNzQ0OEw3LjgyMDk4IDEzLjUwNjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yXCIsZDpcIk04LjQxMjg0IDEzLjQyOUMxMC4xOTUyIDkuOTI4NDIgMTAuMTk1NyA1LjA3NTM3IDguNDE0MzUgMS41NzQwMkw4Ljg1OTk5IDEuMzQ3MjlDMTAuNzEzOSA0Ljk5MTEzIDEwLjcxMzMgMTAuMDEyOCA4Ljg1ODQxIDEzLjY1NTlMOC40MTI4NCAxMy40MjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yNVwiLGQ6XCJNOS4wMjQ0MSAxMy4yOTU2QzEwLjY1NjcgOS44Mzc5IDEwLjY1ODYgNS4xNzcxNSA5LjAzMDA1IDEuNzE2NTZMOS40ODI0NSAxLjUwMzY2QzExLjE3NDUgNS4wOTkxOSAxMS4xNzI2IDkuOTE2MjkgOS40NzY1NyAxMy41MDkxTDkuMDI0NDEgMTMuMjk1NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjNcIixkOlwiTTkuNjY4MDkgMTMuMDY1NUMxMS4xMDk3IDkuNjk1NzIgMTEuMTEwNyA1LjMxMjEgOS42NzA4OCAxLjk0MDk1TDEwLjEzMDcgMS43NDQ1N0MxMS42MjQxIDUuMjQxMjEgMTEuNjIzMSA5Ljc2NjgzIDEwLjEyNzggMTMuMjYyMkw5LjY2ODA5IDEzLjA2NTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zNVwiLGQ6XCJNMTAuMzMxIDEyLjc0NTZDMTEuNTU1MSA5LjUyMDczIDExLjU1NjQgNS40OTEwMyAxMC4zMzQ3IDIuMjY0NDRMMTAuODAyNCAyLjA4NzRDMTIuMDY3MiA1LjQyODE1IDEyLjA2NTkgOS41ODM5NCAxMC43OTg1IDEyLjkyMzFMMTAuMzMxIDEyLjc0NTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi40XCIsZDpcIk0xMS4wMTU1IDEyLjI5ODZDMTEuOTkzOCA5LjI5NzQ0IDExLjk5NDggNS43MTI5NiAxMS4wMTg0IDIuNzEwNjdMMTEuNDkzOSAyLjU1NjAzQzEyLjUwMyA1LjY1ODkgMTIuNTAyIDkuMzUxNzggMTEuNDkwOSAxMi40NTM1TDExLjAxNTUgMTIuMjk4NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjQ1XCIsZDpcIk0xMS43MjE0IDExLjY2OEMxMi40MjU0IDkuMDEzMDMgMTIuNDI2MiA1Ljk5NjkxIDExLjcyMzcgMy4zNDExNkwxMi4yMDcxIDMuMjEzMjlDMTIuOTMxOCA1Ljk1MjkyIDEyLjkzMSA5LjA1NzI4IDEyLjIwNDcgMTEuNzk2MUwxMS43MjE0IDExLjY2OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjVcIixkOlwiTTEyLjQ0MzIgMTAuNzUyQzEyLjg1MjQgOC42Mzc2MiAxMi44NTIzIDYuMzYwODkgMTIuNDQyOSA0LjI0NjZMMTIuOTMzOCA0LjE1MTU1QzEzLjM1NTMgNi4zMjg2MSAxMy4zNTU0IDguNjY5ODUgMTIuOTM0MSAxMC44NDdMMTIuNDQzMiAxMC43NTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMDVcIixkOlwiTTEyLjEzOTggMy44ODYxNkMxMy44NTUzIDQuOTQxNTkgMTUgNi44MzcgMTUgOC45OTk5OUMxNSAxMi4zMTM3IDEyLjMxMzcgMTUgOS4wMDAwMSAxNUM2Ljg0MzUgMTUgNC45NTI5NSAxMy44NjIxIDMuODk1NjkgMTIuMTU1Mkw0LjMyMDc1IDExLjg5MTlDNS4yOTA2OSAxMy40NTc4IDcuMDIzNzUgMTQuNSA5LjAwMDAxIDE0LjVDMTIuMDM3NSAxNC41IDE0LjUgMTIuMDM3NSAxNC41IDguOTk5OTlDMTQuNSA3LjAxNzggMTMuNDUxNiA1LjI4MDI2IDExLjg3NzggNC4zMTIwMkwxMi4xMzk4IDMuODg2MTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yXCIsZDpcIk0xMi44NTEgNS4wNzMyQzEzLjg2ODQgNi4wNzEwNSAxNC41IDcuNDYxOTggMTQuNSA4Ljk5OTk5QzE0LjUgMTIuMDM3NSAxMi4wMzc2IDE0LjUgOS4wMDAwMiAxNC41QzcuNDYyMTQgMTQuNSA2LjA3MTMxIDEzLjg2ODUgNS4wNzM0OCAxMi44NTEyTDUuNDMwNDIgMTIuNTAxMUM2LjMzODA5IDEzLjQyNjQgNy42MDE4NSAxNCA5LjAwMDAyIDE0QzExLjc2MTQgMTQgMTQgMTEuNzYxNCAxNCA4Ljk5OTk5QzE0IDcuNjAxNyAxMy40MjY0IDYuMzM3ODUgMTIuNTAwOSA1LjQzMDE3TDEyLjg1MSA1LjA3MzJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zNVwiLGQ6XCJNMTMuMzAyMSA2LjQ1MDcxQzEzLjc0NTUgNy4xOTczNyAxNCA4LjA2OTM0IDE0IDlDMTQgMTEuNzYxNCAxMS43NjE0IDE0IDkuMDAwMDEgMTRDOC4wNDg2NyAxNCA3LjE1ODY3IDEzLjczNDEgNi40MDExOCAxMy4yNzIzTDYuNjYxNDEgMTIuODQ1NEM3LjM0Mjc0IDEzLjI2MDcgOC4xNDMwNSAxMy41IDkuMDAwMDEgMTMuNUMxMS40ODUzIDEzLjUgMTMuNSAxMS40ODUzIDEzLjUgOUMxMy41IDguMTYxNjQgMTMuMjcxIDcuMzc3NTMgMTIuODcyMiA2LjcwNTk4TDEzLjMwMjEgNi40NTA3MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjVcIixkOlwiTTEzLjM3NDQgNy45NDAyMUMxMy40NTY2IDguMjgwMyAxMy41IDguNjM1MjQgMTMuNSA5QzEzLjUgMTEuNDg1MyAxMS40ODUzIDEzLjUgOS4wMDAwMiAxMy41QzguNjExMDMgMTMuNSA4LjIzMzIxIDEzLjQ1MDYgNy44NzI2NyAxMy4zNTc2TDcuOTk3NTggMTIuODczNEM4LjMxNzY3IDEyLjk1NiA4LjY1MzUyIDEzIDkuMDAwMDIgMTNDMTEuMjA5MSAxMyAxMyAxMS4yMDkxIDEzIDlDMTMgOC42NzUwNyAxMi45NjEzIDguMzU5NTIgMTIuODg4NCA4LjA1NzU2TDEzLjM3NDQgNy45NDAyMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjY1XCIsZDpcIk0xMi45MTU1IDkuODIxMzJDMTIuNTg5OCAxMS4zODEzIDExLjM1NjIgMTIuNjA3MiA5Ljc5MjAzIDEyLjkyMTVMOS42OTM1MyAxMi40MzEzQzExLjA2MTMgMTIuMTU2NSAxMi4xNDEzIDExLjA4MzMgMTIuNDI2MSA5LjcxOTEzTDEyLjkxNTUgOS44MjEzMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuMjc3MSA3LjUwMjUyQzEuMjc3MSA0LjA2NDU1IDQuMDY0MTMgMS4yNzc1MyA3LjUwMjA5IDEuMjc3NTNDMTAuOTQgMS4yNzc1MyAxMy43MjcxIDQuMDY0NTUgMTMuNzI3MSA3LjUwMjUyQzEzLjcyNzEgMTAuOTQwNSAxMC45NCAxMy43Mjc1IDcuNTAyMDkgMTMuNzI3NUM0LjA2NDEyIDEzLjcyNzUgMS4yNzcxIDEwLjk0MDUgMS4yNzcxIDcuNTAyNTJaTTcuNTAyMDkgMi4yMjc1MkM0LjU4ODggMi4yMjc1MiAyLjIyNzEgNC41ODkyMiAyLjIyNzEgNy41MDI1MkMyLjIyNzEgMTAuNDE1OCA0LjU4ODggMTIuNzc3NSA3LjUwMjA5IDEyLjc3NzVDMTAuNDE1NCAxMi43Nzc1IDEyLjc3NzEgMTAuNDE1OCAxMi43NzcxIDcuNTAyNTJDMTIuNzc3MSA0LjU4OTIyIDEwLjQxNTQgMi4yMjc1MiA3LjUwMjA5IDIuMjI3NTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSA3LjUwMDAzQzUgOC4zMjg0NSA0LjMyODQzIDkuMDAwMDMgMy41IDkuMDAwMDNDMi42NzE1NyA5LjAwMDAzIDIgOC4zMjg0NSAyIDcuNTAwMDNDMiA2LjY3MTYgMi42NzE1NyA2LjAwMDAzIDMuNSA2LjAwMDAzQzQuMzI4NDMgNi4wMDAwMyA1IDYuNjcxNiA1IDcuNTAwMDNaTTUuNzEzMTMgOC42NjM4OEM1LjI5NDQ1IDkuNDU4MzggNC40NjA0OCAxMCAzLjUgMTBDMi4xMTkyOSAxMCAxIDguODgwNzQgMSA3LjUwMDAzQzEgNi4xMTkzMSAyLjExOTI5IDUuMDAwMDMgMy41IDUuMDAwMDNDNC40NjA0OCA1LjAwMDAzIDUuMjk0NDUgNS41NDE2NyA1LjcxMzEzIDYuMzM2MTZMOS4xMDQyNCA0LjIxNjcxQzkuMDM2NDMgMy45ODk2OCA5IDMuNzQ5MTEgOSAzLjUwMDAzQzkgMi4xMTkzMiAxMC4xMTkzIDEuMDAwMDMgMTEuNSAxLjAwMDAzQzEyLjg4MDcgMS4wMDAwMyAxNCAyLjExOTMyIDE0IDMuNTAwMDNDMTQgNC44ODA3NCAxMi44ODA3IDYuMDAwMDMgMTEuNSA2LjAwMDAzQzEwLjY5MTUgNi4wMDAwMyA5Ljk3MjY0IDUuNjE2MjQgOS41MTU2NiA1LjAyMDlMNS45ODUzIDcuMjI3MzhDNS45OTUwMiA3LjMxNjkyIDYgNy40MDc4OSA2IDcuNTAwMDNDNiA3LjU5MjE2IDUuOTk1MDIgNy42ODMxMiA1Ljk4NTMgNy43NzI2N0w5LjUxNTY3IDkuOTc5MTVDOS45NzI2NSA5LjM4MzgyIDEwLjY5MTUgOS4wMDAwMyAxMS41IDkuMDAwMDNDMTIuODgwNyA5LjAwMDAzIDE0IDEwLjExOTMgMTQgMTEuNUMxNCAxMi44ODA3IDEyLjg4MDcgMTQgMTEuNSAxNEMxMC4xMTkzIDE0IDkgMTIuODgwNyA5IDExLjVDOSAxMS4yNTA5IDkuMDM2NDMgMTEuMDEwNCA5LjEwNDI1IDEwLjc4MzNMNS43MTMxMyA4LjY2Mzg4Wk0xMS41IDUuMDAwMDNDMTIuMzI4NCA1LjAwMDAzIDEzIDQuMzI4NDYgMTMgMy41MDAwM0MxMyAyLjY3MTYgMTIuMzI4NCAyLjAwMDAzIDExLjUgMi4wMDAwM0MxMC42NzE2IDIuMDAwMDMgMTAgMi42NzE2IDEwIDMuNTAwMDNDMTAgNC4zMjg0NiAxMC42NzE2IDUuMDAwMDMgMTEuNSA1LjAwMDAzWk0xMyAxMS41QzEzIDEyLjMyODUgMTIuMzI4NCAxMyAxMS41IDEzQzEwLjY3MTYgMTMgMTAgMTIuMzI4NSAxMCAxMS41QzEwIDEwLjY3MTYgMTAuNjcxNiAxMCAxMS41IDEwQzEyLjMyODQgMTAgMTMgMTAuNjcxNiAxMyAxMS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sa3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNSA1LjAwMDA2QzMuMjIzODYgNS4wMDAwNiAzIDUuMjIzOTIgMyA1LjUwMDA2TDMgMTEuNTAwMUMzIDExLjc3NjIgMy4yMjM4NiAxMi4wMDAxIDMuNSAxMi4wMDAxTDExLjUgMTIuMDAwMUMxMS43NzYxIDEyLjAwMDEgMTIgMTEuNzc2MiAxMiAxMS41MDAxTDEyIDUuNTAwMDZDMTIgNS4yMjM5MiAxMS43NzYxIDUuMDAwMDYgMTEuNSA1LjAwMDA2TDEwLjI1IDUuMDAwMDZDOS45NzM4NiA1LjAwMDA2IDkuNzUgNC43NzYyIDkuNzUgNC41MDAwNkM5Ljc1IDQuMjIzOTIgOS45NzM4NiA0LjAwMDA2IDEwLjI1IDQuMDAwMDZMMTEuNSA0LjAwMDA2QzEyLjMyODQgNC4wMDAwNiAxMyA0LjY3MTYzIDEzIDUuNTAwMDZMMTMgMTEuNTAwMUMxMyAxMi4zMjg1IDEyLjMyODQgMTMuMDAwMSAxMS41IDEzLjAwMDFMMy41IDEzLjAwMDFDMi42NzE1NyAxMy4wMDAxIDIgMTIuMzI4NSAyIDExLjUwMDFMMiA1LjUwMDA2QzIgNC42NzE2MyAyLjY3MTU3IDQuMDAwMDYgMy41IDQuMDAwMDZMNC43NSA0LjAwMDA2QzUuMDI2MTQgNC4wMDAwNiA1LjI1IDQuMjIzOTIgNS4yNSA0LjUwMDA2QzUuMjUgNC43NzYyIDUuMDI2MTQgNS4wMDAwNiA0Ljc1IDUuMDAwMDZMMy41IDUuMDAwMDZaTTcgMS42MzY0TDUuNTY4MiAzLjA2ODJDNS4zOTI0NiAzLjI0MzkzIDUuMTA3NTQgMy4yNDM5MyA0LjkzMTggMy4wNjgyQzQuNzU2MDcgMi44OTI0NiA0Ljc1NjA3IDIuNjA3NTQgNC45MzE4IDIuNDMxOEw3LjE4MTggMC4xODE4MDJDNy4yNjYxOSAwLjA5NzQxIDcuMzgwNjUgMC4wNDk5OTkgNy41IDAuMDQ5OTk5QzcuNjE5MzUgMC4wNDk5OTkgNy43MzM4MSAwLjA5NzQxIDcuODE4MiAwLjE4MTgwMkwxMC4wNjgyIDIuNDMxOEMxMC4yNDM5IDIuNjA3NTQgMTAuMjQzOSAyLjg5MjQ2IDEwLjA2ODIgMy4wNjgyQzkuODkyNDYgMy4yNDM5MyA5LjYwNzU0IDMuMjQzOTMgOS40MzE4IDMuMDY4Mkw4IDEuNjM2NEw4IDguNUM4IDguNzc2MTQgNy43NzYxNCA5IDcuNSA5QzcuMjIzODYgOSA3IDguNzc2MTQgNyA4LjVMNyAxLjYzNjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxTcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuMzUzNiAxLjE0NjQ1QzEyLjE1ODMgMC45NTExODQgMTEuODQxNyAwLjk1MTE4NCAxMS42NDY0IDEuMTQ2NDVDMTEuNDUxMiAxLjM0MTcxIDExLjQ1MTIgMS42NTgyOSAxMS42NDY0IDEuODUzNTVMMTIuNzkyOSAzSDEyQzEwLjcwMzcgMyA5LjcxMTExIDMuNTg0MjMgOC44NzI0OCA0LjM4OTMxQzguMjAwNjUgNS4wMzQyNyA3LjU5MzQ5IDUuODU2ODQgNi45OTQ2MSA2LjY2ODJDNi44NjI4NyA2Ljg0NjY4IDYuNzMxNTQgNy4wMjQ2MiA2LjYgNy4yQzUuMTA4NzQgOS4xODgzNSAzLjQ5MDM3IDExIDAuNSAxMUMwLjIyMzg1OCAxMSAwIDExLjIyMzkgMCAxMS41QzAgMTEuNzc2MSAwLjIyMzg1OCAxMiAwLjUgMTJDNC4wMDk2MyAxMiA1Ljg5MTI2IDkuODExNjUgNy40IDcuOEM3LjU0MzY3IDcuNjA4NDUgNy42ODMyIDcuNDE5NjIgNy44MTk5NiA3LjIzNDU0TDcuODIwMDUgNy4yMzQ0M0w3LjgyMDA2IDcuMjM0NDFDOC40MTY3NCA2LjQyNjk1IDguOTYwNjkgNS42OTA4NSA5LjU2NTAyIDUuMTEwNjlDMTAuMjg4OSA0LjQxNTc3IDExLjA0NjMgNCAxMiA0SDEyLjc5MjlMMTEuNjQ2NCA1LjE0NjQ1QzExLjQ1MTIgNS4zNDE3MSAxMS40NTEyIDUuNjU4MjkgMTEuNjQ2NCA1Ljg1MzU1QzExLjg0MTcgNi4wNDg4MiAxMi4xNTgzIDYuMDQ4ODIgMTIuMzUzNiA1Ljg1MzU1TDE0LjM1MzYgMy44NTM1NUMxNC41NDg4IDMuNjU4MjkgMTQuNTQ4OCAzLjM0MTcxIDE0LjM1MzYgMy4xNDY0NUwxMi4zNTM2IDEuMTQ2NDVaTTAuNSAzQzMuMzUyNzggMyA1LjEyOTkyIDQuNDQ1ODggNi41MDU0OCA2LjA2NzQ2TDYuMzc2MiA2LjI0MjY2QzYuMjQ4MyA2LjQxNjEgNi4xMjI5MyA2LjU4NjA5IDYgNi43NUM1Ljk2Mzk3IDYuNzk4MDQgNS45Mjc5OCA2Ljg0NTgxIDUuODkyIDYuODkzMzFDNC41NzM0OCA1LjI5MzA2IDMuMDI2MzcgNCAwLjUgNEMwLjIyMzg1OCA0IDAgMy43NzYxNCAwIDMuNUMwIDMuMjIzODYgMC4yMjM4NTggMyAwLjUgM1pNOC44NzI0OCAxMC42MTA3QzguMzcyODQgMTAuMTMxIDcuOTA4OTcgOS41NTMxNCA3LjQ1NzY3IDguOTU0NjhDNy42NDY4OCA4LjcxNjkzIDcuODI3MDQgOC40ODA2MSA4IDguMjVMOC4wODk4NyA4LjEyOTg3QzguNTg0MTIgOC43OTQwMiA5LjA1Mjg4IDkuMzk3NjYgOS41NjUwMiA5Ljg4OTMxQzEwLjI4ODkgMTAuNTg0MiAxMS4wNDYzIDExIDEyIDExSDEyLjc5MjlMMTEuNjQ2NCA5Ljg1MzU1QzExLjQ1MTIgOS42NTgyOSAxMS40NTEyIDkuMzQxNzEgMTEuNjQ2NCA5LjE0NjQ1QzExLjg0MTcgOC45NTExOCAxMi4xNTgzIDguOTUxMTggMTIuMzUzNiA5LjE0NjQ1TDE0LjM1MzYgMTEuMTQ2NEMxNC41NDg4IDExLjM0MTcgMTQuNTQ4OCAxMS42NTgzIDE0LjM1MzYgMTEuODUzNkwxMi4zNTM2IDEzLjg1MzZDMTIuMTU4MyAxNC4wNDg4IDExLjg0MTcgMTQuMDQ4OCAxMS42NDY0IDEzLjg1MzZDMTEuNDUxMiAxMy42NTgzIDExLjQ1MTIgMTMuMzQxNyAxMS42NDY0IDEzLjE0NjRMMTIuNzkyOSAxMkgxMkMxMC43MDM3IDEyIDkuNzExMTEgMTEuNDE1OCA4Ljg3MjQ4IDEwLjYxMDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxPcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuNSAzLjA0OTk5QzExLjc0ODUgMy4wNDk5OSAxMS45NSAzLjI1MTQ2IDExLjk1IDMuNDk5OTlWNy40OTk5OUMxMS45NSA3Ljc0ODUyIDExLjc0ODUgNy45NDk5OSAxMS41IDcuOTQ5OTlDMTEuMjUxNSA3Ljk0OTk5IDExLjA1IDcuNzQ4NTIgMTEuMDUgNy40OTk5OVY0LjU4NjM5TDQuNTg2MzggMTEuMDVINy40OTk5OUM3Ljc0ODUyIDExLjA1IDcuOTQ5OTkgMTEuMjUxNSA3Ljk0OTk5IDExLjVDNy45NDk5OSAxMS43NDg1IDcuNzQ4NTIgMTEuOTUgNy40OTk5OSAxMS45NUwzLjQ5OTk5IDExLjk1QzMuMzgwNjQgMTEuOTUgMy4yNjYxOCAxMS45MDI2IDMuMTgxNzkgMTEuODE4MkMzLjA5NzQgMTEuNzMzOCAzLjA0OTk5IDExLjYxOTMgMy4wNDk5OSAxMS41TDMuMDQ5OTkgNy40OTk5OUMzLjA0OTk5IDcuMjUxNDYgMy4yNTE0NiA3LjA0OTk5IDMuNDk5OTkgNy4wNDk5OUMzLjc0ODUyIDcuMDQ5OTkgMy45NDk5OSA3LjI1MTQ2IDMuOTQ5OTkgNy40OTk5OUwzLjk0OTk5IDEwLjQxMzZMMTAuNDEzNiAzLjk0OTk5TDcuNDk5OTkgMy45NDk5OUM3LjI1MTQ2IDMuOTQ5OTkgNy4wNDk5OSAzLjc0ODUyIDcuMDQ5OTkgMy40OTk5OUM3LjA0OTk5IDMuMjUxNDYgNy4yNTE0NiAzLjA0OTk5IDcuNDk5OTkgMy4wNDk5OUwxMS41IDMuMDQ5OTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxNcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41MzczMSAwLjgyNjg3M0M3LjUxMjUgMC44MjQzOTIgNy40ODc1IDAuODI0MzkyIDcuNDYyNjkgMC44MjY4NzNMMy45NjI2OSAxLjE3Njg3QzMuODU2NzIgMS4xODc0NyAzLjc2MDI1IDEuMjQyNjIgMy42OTczNiAxLjMyODU3TDAuNjk5NzcxIDUuNDI1MjhDMC42NTQwNDYgNS40ODYyNyAwLjYyNjQ3IDUuNTYxNjUgMC42MjUwNTcgNS42NDM0QzAuNjI1MDE5IDUuNjQ1NiAwLjYyNSA1LjY0NzgxIDAuNjI1IDUuNjUwMDFDMC42MjUgNS42NTA1MiAwLjYyNTAwMSA1LjY1MTAzIDAuNjI1MDAzIDUuNjUxNTNDMC42MjUzNjMgNS43NDIzNyAwLjY1ODAyMSA1LjgyNTU5IDAuNzEyMDg3IDUuODkwM0w3LjIxMDQyIDEzLjc4ODNDNy4yODE2NSAxMy44NzQ5IDcuMzg3ODkgMTMuOTI1IDcuNSAxMy45MjVDNy42MTIxMSAxMy45MjUgNy43MTgzNSAxMy44NzQ5IDcuNzg5NTggMTMuNzg4M0wxNC4yODc5IDUuODkwMzFDMTQuMzQyIDUuODI1NiAxNC4zNzQ2IDUuNzQyMzcgMTQuMzc1IDUuNjUxNTNDMTQuMzc1IDUuNjUxMDMgMTQuMzc1IDUuNjUwNTIgMTQuMzc1IDUuNjUwMDFDMTQuMzc1IDUuNjQ4NDkgMTQuMzc1IDUuNjQ2OTcgMTQuMzc1IDUuNjQ1NDVDMTQuMzc0OSA1LjYzOTYzIDE0LjM3NDcgNS42MzM4MiAxNC4zNzQ0IDUuNjI4MDFDMTQuMzcgNS41NTIxOSAxNC4zNDMxIDUuNDgyNDIgMTQuMzAwMiA1LjQyNTI3TDExLjMwMjYgMS4zMjg1N0MxMS4yMzk3IDEuMjQyNjIgMTEuMTQzMyAxLjE4NzQ3IDExLjAzNzMgMS4xNzY4N0w3LjUzNzMxIDAuODI2ODczWk0xMC45MjUgNS4yNzUwMVY1LjI1MjM2TDEwLjkyMjMgNS4yNzUwMUgxMC45MjVaTTEwLjkzNDIgNS4xNzQ5OEgxMy4xODc3TDExLjI0OTUgMi41MjYxTDEwLjkzNDIgNS4xNzQ5OFpNMTAuNTcwNyAxLjg4Mzk1TDguMDQ0MzIgMS42MzEzMUwxMC4xNzQ3IDUuMjEwMzRMMTAuNTcwNyAxLjg4Mzk1Wk02Ljk1NTY4IDEuNjMxMzFMNC40MjkzMSAxLjg4Mzk1TDQuODI1MzEgNS4yMTAzNEw2Ljk1NTY4IDEuNjMxMzFaTTMuNzUwNDYgMi41MjYxTDEuODEyMjYgNS4xNzQ5OEg0LjA2NThMMy43NTA0NiAyLjUyNjFaTTEuNzk0MTYgNi4wMjUwMUw2Ljc1ODYxIDEyLjA1ODdMNC4yMjM3MSA2LjA2NjlDNC4yMTc4NyA2LjA1MzEgNC4yMTMxNCA2LjAzOTEgNC4yMDk0OSA2LjAyNTAxSDEuNzk0MTZaTTUuMTUwNTUgNi4wMjUwMUw3LjQ5OTk5IDEyLjEwODVMOS44NDk0MyA2LjAyNTAxSDkuNzg2ODFINS4yMTMxOUg1LjE1MDU1Wk0xMC43OTA1IDYuMDI1MDFDMTAuNzg2OSA2LjAzOTEgMTAuNzgyMSA2LjA1MzEgMTAuNzc2MyA2LjA2NjlMOC4yNDEzOSAxMi4wNTg3TDEzLjIwNTggNi4wMjUwMUgxMC43OTA1Wk03LjUgMi4xODMxN0w5LjM0MDM4IDUuMjc1MDFINS42NTk2Mkw3LjUgMi4xODMxN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LExyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjEwODc2IDE0TDkuNDY1ODIgMUgxMC44MTc4TDUuNDYwNzQgMTRINC4xMDg3NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF9yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMC4zMDA0IDcuNDk5OTFDMTAuMzAwNCA4LjQ5NDMgOS40OTQyNiA5LjMwMDQxIDguNDk5ODggOS4zMDA0MUM3LjUwNTQ5IDkuMzAwNDEgNi42OTkzOCA4LjQ5NDMgNi42OTkzOCA3LjQ5OTkxQzYuNjk5MzggNi41MDU1MyA3LjUwNTQ5IDUuNjk5NDIgOC40OTk4OCA1LjY5OTQyQzkuNDk0MjYgNS42OTk0MiAxMC4zMDA0IDYuNTA1NTMgMTAuMzAwNCA3LjQ5OTkxWk0xMS4yMDUgOEMxMC45Njk5IDkuMjgwMjkgOS44NDgxNiAxMC4yNTA0IDguNDk5ODggMTAuMjUwNEM3LjE1MTYgMTAuMjUwNCA2LjAyOTkgOS4yODAyOSA1Ljc5NDczIDhIMC41QzAuMjIzODU4IDggMCA3Ljc3NjE0IDAgNy41QzAgNy4yMjM4NiAwLjIyMzg1OCA3IDAuNSA3SDUuNzk0N0M2LjAyOTggNS43MTk2MiA3LjE1MTU0IDQuNzQ5NDIgOC40OTk4OCA0Ljc0OTQyQzkuODQ4MjIgNC43NDk0MiAxMC45Njk5IDUuNzE5NjIgMTEuMjA1MSA3SDE0LjVDMTQuNzc2MSA3IDE1IDcuMjIzODYgMTUgNy41QzE1IDcuNzc2MTQgMTQuNzc2MSA4IDE0LjUgOEgxMS4yMDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQuNDk5OSAwLjk5OTk5NEMxNC4yMjM3IDAuOTk5OTk0IDEzLjk5OTkgMS4yMjM4NSAxMy45OTk5IDEuNDk5OTlMMTMuOTk5OSA1Ljk5OTk1TDkuOTk5OTIgNS45OTk5NUM5LjQ0NzY0IDUuOTk5OTUgOC45OTk5MyA2LjQ0NzY2IDguOTk5OTMgNi45OTk5NEw4Ljk5OTkzIDcuOTk5OTRDOC45OTk5MyA4LjU1MjIyIDkuNDQ3NjQgOC45OTk5MyA5Ljk5OTkyIDguOTk5OTNMMTMuOTk5OSA4Ljk5OTkzTDEzLjk5OTkgMTMuNDk5OUMxMy45OTk5IDEzLjc3NiAxNC4yMjM3IDEzLjk5OTkgMTQuNDk5OSAxMy45OTk5QzE0Ljc3NiAxMy45OTk5IDE0Ljk5OTkgMTMuNzc2IDE0Ljk5OTkgMTMuNDk5OUwxNC45OTk5IDEuNDk5OTlDMTQuOTk5OSAxLjIyMzg1IDE0Ljc3NiAwLjk5OTk5NCAxNC40OTk5IDAuOTk5OTk0Wk00Ljk5OTk2IDUuOTk5OTVMMC45OTk5OTIgNS45OTk5NUwwLjk5OTk5MiAxLjQ5OTk5QzAuOTk5OTkyIDEuMjIzODUgMC43NzYxMzYgMC45OTk5OTQgMC40OTk5OTYgMC45OTk5OTRDMC4yMjM4NTYgMC45OTk5OTQgLTkuNzg1MmUtMDkgMS4yMjM4NSAtMi4xODU1N2UtMDggMS40OTk5OUw0LjA3Mjc5ZS0wNyAxMy40OTk5QzMuOTUyMDhlLTA3IDEzLjc3NiAwLjIyMzg1NSAxMy45OTk5IDAuNDk5OTk2IDEzLjk5OTlDMC43NzYxMzYgMTMuOTk5OSAwLjk5OTk5MiAxMy43NzYgMC45OTk5OTIgMTMuNDk5OUwwLjk5OTk5MiA4Ljk5OTkzTDQuOTk5OTYgOC45OTk5M0M1LjU1MjI0IDguOTk5OTMgNS45OTk5NSA4LjU1MjIyIDUuOTk5OTUgNy45OTk5M0w1Ljk5OTk1IDYuOTk5OTRDNS45OTk5NSA2LjQ0NzY2IDUuNTUyMjQgNS45OTk5NSA0Ljk5OTk2IDUuOTk5OTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxFcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC45OTk4NzggMC41QzAuOTk5ODc4IDAuMjIzODU4IDEuMjIzNzQgMCAxLjQ5OTg4IDBIMTMuNDk5OUMxMy43NzYgMCAxMy45OTk5IDAuMjIzODU4IDEzLjk5OTkgMC41QzEzLjk5OTkgMC43NzYxNDIgMTMuNzc2IDEgMTMuNDk5OSAxTDkgMVY1QzkgNS41NTIyOCA4LjU1MjI4IDYgOCA2SDdDNi40NDc3MiA2IDYgNS41NTIyOCA2IDVWMUgxLjQ5OTg4QzEuMjIzNzQgMSAwLjk5OTg3OCAwLjc3NjE0MiAwLjk5OTg3OCAwLjVaTTcgOUM2LjQ0NzcyIDkgNiA5LjQ0NzcxIDYgMTBWMTRIMS40OTk4OEMxLjIyMzc0IDE0IDAuOTk5ODc4IDE0LjIyMzkgMC45OTk4NzggMTQuNUMwLjk5OTg3OCAxNC43NzYxIDEuMjIzNzQgMTUgMS40OTk4OCAxNUgxMy40OTk5QzEzLjc3NiAxNSAxMy45OTk5IDE0Ljc3NjEgMTMuOTk5OSAxNC41QzEzLjk5OTkgMTQuMjIzOSAxMy43NzYgMTQgMTMuNDk5OSAxNEg5VjEwQzkgOS40NDc3MiA4LjU1MjI4IDkgOCA5SDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxqcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQuNDk5OSAwLjk5OTk5MkMxNC4yMjM3IDAuOTk5OTkyIDEzLjk5OTkgMS4yMjM4NSAxMy45OTk5IDEuNDk5OTlMMTMuOTk5OSAxMy40OTk5QzEzLjk5OTkgMTMuNzc2IDE0LjIyMzcgMTMuOTk5OSAxNC40OTk5IDEzLjk5OTlDMTQuNzc2IDEzLjk5OTkgMTQuOTk5OSAxMy43NzYgMTQuOTk5OSAxMy40OTk5TDE0Ljk5OTkgMS40OTk5OUMxNC45OTk5IDEuMjIzODUgMTQuNzc2IDAuOTk5OTkyIDE0LjQ5OTkgMC45OTk5OTJaTTAuNDk5OTk2IDAuOTk5OTkyQzAuMjIzODU2IDAuOTk5OTkyIC05Ljc4NTA5ZS0wOSAxLjIyMzg1IC0yLjE4NTU2ZS0wOCAxLjQ5OTk5TDQuMDcyNzllLTA3IDEzLjQ5OTlDMy45NTIwOGUtMDcgMTMuNzc2IDAuMjIzODU1IDEzLjk5OTkgMC40OTk5OTYgMTMuOTk5OUMwLjc3NjEzNiAxMy45OTk5IDAuOTk5OTkyIDEzLjc3NiAwLjk5OTk5MiAxMy40OTk5TDAuOTk5OTkyIDEuNDk5OTlDMC45OTk5OTIgMS4yMjM4NSAwLjc3NjEzNiAwLjk5OTk5MiAwLjQ5OTk5NiAwLjk5OTk5MlpNMS45OTk5OCA2Ljk5OTk0QzEuOTk5OTggNi40NDc2NiAyLjQ0NzY5IDUuOTk5OTUgMi45OTk5OCA1Ljk5OTk1TDUuOTk5OTUgNS45OTk5NUM2LjU1MjIzIDUuOTk5OTUgNi45OTk5NCA2LjQ0NzY2IDYuOTk5OTQgNi45OTk5NEw2Ljk5OTk0IDcuOTk5OTNDNi45OTk5NCA4LjU1MjIxIDYuNTUyMjMgOC45OTk5MiA1Ljk5OTk1IDguOTk5OTJMMi45OTk5OCA4Ljk5OTkyQzIuNDQ3NyA4Ljk5OTkyIDEuOTk5OTggOC41NTIyMSAxLjk5OTk4IDcuOTk5OTNMMS45OTk5OCA2Ljk5OTk0Wk04Ljk5OTkzIDUuOTk5OTVDOC40NDc2NSA1Ljk5OTk1IDcuOTk5OTMgNi40NDc2NiA3Ljk5OTkzIDYuOTk5OTRMNy45OTk5MyA3Ljk5OTkzQzcuOTk5OTMgOC41NTIyMSA4LjQ0NzY1IDguOTk5OTIgOC45OTk5MyA4Ljk5OTkyTDExLjk5OTkgOC45OTk5MkMxMi41NTIyIDguOTk5OTIgMTIuOTk5OSA4LjU1MjIxIDEyLjk5OTkgNy45OTk5M0wxMi45OTk5IDYuOTk5OTRDMTIuOTk5OSA2LjQ0NzY2IDEyLjU1MjIgNS45OTk5NSAxMS45OTk5IDUuOTk5OTVMOC45OTk5MyA1Ljk5OTk1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuOTk5ODc4IDAuNUMwLjk5OTg3OCAwLjIyMzg1OCAxLjIyMzc0IDAgMS40OTk4OCAwSDEzLjQ5OTlDMTMuNzc2IDAgMTMuOTk5OSAwLjIyMzg1OCAxMy45OTk5IDAuNUMxMy45OTk5IDAuNzc2MTQyIDEzLjc3NiAxIDEzLjQ5OTkgMUgxLjQ5OTg4QzEuMjIzNzQgMSAwLjk5OTg3OCAwLjc3NjE0MiAwLjk5OTg3OCAwLjVaTTcgMkM2LjQ0NzcyIDIgNiAyLjQ0NzcyIDYgM1Y2QzYgNi41NTIyOCA2LjQ0NzcyIDcgNyA3SDhDOC41NTIyOCA3IDkgNi41NTIyOCA5IDZWM0M5IDIuNDQ3NzIgOC41NTIyOCAyIDggMkg3Wk03IDhDNi40NDc3MiA4IDYgOC40NDc3MSA2IDlWMTJDNiAxMi41NTIzIDYuNDQ3NzIgMTMgNyAxM0g4QzguNTUyMjggMTMgOSAxMi41NTIzIDkgMTJWOUM5IDguNDQ3NzIgOC41NTIyOCA4IDggOEg3Wk0xLjQ5OTg4IDE0QzEuMjIzNzQgMTQgMC45OTk4NzggMTQuMjIzOSAwLjk5OTg3OCAxNC41QzAuOTk5ODc4IDE0Ljc3NjEgMS4yMjM3NCAxNSAxLjQ5OTg4IDE1SDEzLjQ5OTlDMTMuNzc2IDE1IDEzLjk5OTkgMTQuNzc2MSAxMy45OTk5IDE0LjVDMTMuOTk5OSAxNC4yMjM5IDEzLjc3NiAxNCAxMy40OTk5IDE0SDEuNDk5ODhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxJcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40Njk2OCAxLjA1MDg1QzcuNjQxMjIgMS4xMzQ3NSA3Ljc1IDEuMzA5MDQgNy43NSAxLjVWMTMuNUM3Ljc1IDEzLjY5MSA3LjY0MTIyIDEzLjg2NTMgNy40Njk2OCAxMy45NDkyQzcuMjk4MTMgMTQuMDMzMSA3LjA5Mzc3IDE0LjAxMTkgNi45NDMwMyAxMy44OTQ3TDMuMjIxMyAxMUgxLjVDMC42NzE1NzEgMTEgMCAxMC4zMjg0IDAgOS41VjUuNUMwIDQuNjcxNTggMC42NzE1NzMgNCAxLjUgNEgzLjIyMTNMNi45NDMwMyAxLjEwNTMzQzcuMDkzNzcgMC45ODgwODUgNy4yOTgxMyAwLjk2Njk0NSA3LjQ2OTY4IDEuMDUwODVaTTYuNzUgMi41MjIzMkwzLjY5OTgzIDQuODk0NjhDMy42MTIwNiA0Ljk2Mjk0IDMuNTA0MDUgNSAzLjM5Mjg2IDVIMS41QzEuMjIzODYgNSAxIDUuMjIzODYgMSA1LjVWOS41QzEgOS43NzYxNSAxLjIyMzg2IDEwIDEuNSAxMEgzLjM5Mjg2QzMuNTA0MDUgMTAgMy42MTIwNiAxMC4wMzcxIDMuNjk5ODMgMTAuMTA1M0w2Ljc1IDEyLjQ3NzdWMi41MjIzMlpNMTAuMjc4NCAzLjg0ODA0QzEwLjQ2MjMgMy43MjU2NyAxMC43MTA2IDMuNzc1NTcgMTAuODMzIDMuOTU5NDlDMTIuMjU1OCA2LjA5Nzk4IDEyLjI1NTggOC45MDE5OSAxMC44MzMgMTEuMDQwNUMxMC43MTA2IDExLjIyNDQgMTAuNDYyMyAxMS4yNzQzIDEwLjI3ODQgMTEuMTUxOUMxMC4wOTQ0IDExLjAyOTYgMTAuMDQ0NSAxMC43ODEzIDEwLjE2NjkgMTAuNTk3M0MxMS40MTExIDguNzI3MjggMTEuNDExMSA2LjI3MjY5IDEwLjE2NjkgNC40MDI2NEMxMC4wNDQ1IDQuMjE4NzEgMTAuMDk0NCAzLjk3MDQxIDEwLjI3ODQgMy44NDgwNFpNMTIuNjc4NSAxLjQzMDQ0QzEyLjUzNTYgMS4yNjE5IDEyLjI4MzIgMS4yNDEwNCAxMi4xMTQ3IDEuMzgzODZDMTEuOTQ2MiAxLjUyNjY3IDExLjkyNTMgMS43NzkwOCAxMi4wNjgxIDEuOTQ3NjJDMTQuNzc3MyA1LjE0NDg4IDE0Ljc3NzMgOS44NTUxMyAxMi4wNjgxIDEzLjA1MjRDMTEuOTI1MyAxMy4yMjA5IDExLjk0NjIgMTMuNDczMyAxMi4xMTQ3IDEzLjYxNjFDMTIuMjgzMiAxMy43NTkgMTIuNTM1NiAxMy43MzgxIDEyLjY3ODUgMTMuNTY5NkMxNS42NDA2IDEwLjA3MzkgMTUuNjQwNiA0LjkyNjEyIDEyLjY3ODUgMS40MzA0NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFZyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04IDEuNUM4IDEuMzEwNjIgNy44OTMgMS4xMzc0OSA3LjcyMzYxIDEuMDUyNzlDNy41NTQyMSAwLjk2ODA5MyA3LjM1MTUxIDAuOTg2MzcxIDcuMiAxLjFMMy4zMzMzMyA0SDEuNUMwLjY3MTU3MyA0IDAgNC42NzE1OCAwIDUuNVY5LjVDMCAxMC4zMjg0IDAuNjcxNTczIDExIDEuNSAxMUgzLjMzMzMzTDcuMiAxMy45QzcuMzUxNTEgMTQuMDEzNiA3LjU1NDIxIDE0LjAzMTkgNy43MjM2MSAxMy45NDcyQzcuODkzIDEzLjg2MjUgOCAxMy42ODk0IDggMTMuNVYxLjVaTTMuOCA0LjlMNyAyLjVWMTIuNUwzLjggMTAuMUMzLjcxMzQ1IDEwLjAzNTEgMy42MDgxOSAxMCAzLjUgMTBIMS41QzEuMjIzODYgMTAgMSA5Ljc3NjE0IDEgOS41VjUuNUMxIDUuMjIzODYgMS4yMjM4NiA1IDEuNSA1SDMuNUMzLjYwODE5IDUgMy43MTM0NSA0Ljk2NDkxIDMuOCA0LjlaTTEwLjgzMyAzLjk1OTQ5QzEwLjcxMDYgMy43NzU1NyAxMC40NjIzIDMuNzI1NjcgMTAuMjc4NCAzLjg0ODA0QzEwLjA5NDQgMy45NzA0MSAxMC4wNDQ1IDQuMjE4NzEgMTAuMTY2OSA0LjQwMjY0QzExLjQxMTEgNi4yNzI2OCAxMS40MTExIDguNzI3MjggMTAuMTY2OSAxMC41OTczQzEwLjA0NDUgMTAuNzgxMyAxMC4wOTQ0IDExLjAyOTYgMTAuMjc4NCAxMS4xNTE5QzEwLjQ2MjMgMTEuMjc0MyAxMC43MTA2IDExLjIyNDQgMTAuODMzIDExLjA0MDVDMTIuMjU1OCA4LjkwMTk5IDEyLjI1NTggNi4wOTc5OCAxMC44MzMgMy45NTk0OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEhyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjcyMzYxIDEuMDUyNzlDNy44OTMgMS4xMzc0OSA4IDEuMzEwNjIgOCAxLjVWMTMuNUM4IDEzLjY4OTQgNy44OTMgMTMuODYyNSA3LjcyMzYxIDEzLjk0NzJDNy41NTQyMSAxNC4wMzE5IDcuMzUxNTEgMTQuMDEzNiA3LjIgMTMuOUwzLjMzMzMzIDExSDEuNUMwLjY3MTU3MyAxMSAwIDEwLjMyODQgMCA5LjVWNS41QzAgNC42NzE1OCAwLjY3MTU3MyA0IDEuNSA0SDMuMzMzMzNMNy4yIDEuMUM3LjM1MTUxIDAuOTg2MzcxIDcuNTU0MjEgMC45NjgwOTMgNy43MjM2MSAxLjA1Mjc5Wk03IDIuNUwzLjggNC45QzMuNzEzNDUgNC45NjQ5MSAzLjYwODE5IDUgMy41IDVIMS41QzEuMjIzODYgNSAxIDUuMjIzODYgMSA1LjVWOS41QzEgOS43NzYxNCAxLjIyMzg2IDEwIDEuNSAxMEgzLjVDMy42MDgxOSAxMCAzLjcxMzQ1IDEwLjAzNTEgMy44IDEwLjFMNyAxMi41VjIuNVpNMTQuODUzNiA1LjE0NjQ1QzE1LjA0ODggNS4zNDE3MSAxNS4wNDg4IDUuNjU4MjkgMTQuODUzNiA1Ljg1MzU1TDEzLjIwNzEgNy41TDE0Ljg1MzYgOS4xNDY0NUMxNS4wNDg4IDkuMzQxNzEgMTUuMDQ4OCA5LjY1ODI5IDE0Ljg1MzYgOS44NTM1NUMxNC42NTgzIDEwLjA0ODggMTQuMzQxNyAxMC4wNDg4IDE0LjE0NjQgOS44NTM1NUwxMi41IDguMjA3MTFMMTAuODUzNiA5Ljg1MzU1QzEwLjY1ODMgMTAuMDQ4OCAxMC4zNDE3IDEwLjA0ODggMTAuMTQ2NCA5Ljg1MzU1QzkuOTUxMTggOS42NTgyOSA5Ljk1MTE4IDkuMzQxNzEgMTAuMTQ2NCA5LjE0NjQ1TDExLjc5MjkgNy41TDEwLjE0NjQgNS44NTM1NUM5Ljk1MTE4IDUuNjU4MjkgOS45NTExOCA1LjM0MTcxIDEwLjE0NjQgNS4xNDY0NUMxMC4zNDE3IDQuOTUxMTggMTAuNjU4MyA0Ljk1MTE4IDEwLjg1MzYgNS4xNDY0NUwxMi41IDYuNzkyODlMMTQuMTQ2NCA1LjE0NjQ1QzE0LjM0MTcgNC45NTExOCAxNC42NTgzIDQuOTUxMTggMTQuODUzNiA1LjE0NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTggMS41QzggMS4zMTA2MiA3Ljg5MyAxLjEzNzQ5IDcuNzIzNjEgMS4wNTI3OUM3LjU1NDIxIDAuOTY4MDkzIDcuMzUxNTEgMC45ODYzNzEgNy4yIDEuMUwzLjMzMzMzIDRIMS41QzAuNjcxNTczIDQgMCA0LjY3MTU4IDAgNS41VjkuNUMwIDEwLjMyODQgMC42NzE1NzMgMTEgMS41IDExSDMuMzMzMzNMNy4yIDEzLjlDNy4zNTE1MSAxNC4wMTM2IDcuNTU0MjEgMTQuMDMxOSA3LjcyMzYxIDEzLjk0NzJDNy44OTMgMTMuODYyNSA4IDEzLjY4OTQgOCAxMy41VjEuNVpNMy44IDQuOUw3IDIuNVYxMi41TDMuOCAxMC4xQzMuNzEzNDUgMTAuMDM1MSAzLjYwODE5IDEwIDMuNSAxMEgxLjVDMS4yMjM4NiAxMCAxIDkuNzc2MTQgMSA5LjVWNS41QzEgNS4yMjM4NiAxLjIyMzg2IDUgMS41IDVIMy41QzMuNjA4MTkgNSAzLjcxMzQ1IDQuOTY0OTEgMy44IDQuOVpNMTAuMDgzIDUuMDU1NzdDOS45NjA2NiA0Ljg3MTg1IDkuNzEyMzUgNC44MjE5NSA5LjUyODQzIDQuOTQ0MzJDOS4zNDQ1IDUuMDY2NjkgOS4yOTQ2IDUuMzE0OTkgOS40MTY5NyA1LjQ5ODkyQzEwLjIyMDcgNi43MDY5MyAxMC4yMjA3IDguMjkzMDMgOS40MTY5NyA5LjUwMTA0QzkuMjk0NiA5LjY4NDk2IDkuMzQ0NSA5LjkzMzI2IDkuNTI4NDMgMTAuMDU1NkM5LjcxMjM1IDEwLjE3OCA5Ljk2MDY2IDEwLjEyODEgMTAuMDgzIDkuOTQ0MThDMTEuMDY1MyA4LjQ2NzczIDExLjA2NTMgNi41MzIyMiAxMC4wODMgNS4wNTU3N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFRyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDFIMS41SDEzLjVIMTRWMS41VjEzLjVWMTRIMTMuNUgxLjVIMVYxMy41VjEuNVYxWk0yIDJWMTNIMTNWMkgyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNzU0MzIgMS44MTk1NEM3LjU5NzQyIDEuNzI2ODIgNy40MDI1IDEuNzI2ODIgNy4yNDU1OSAxLjgxOTU0TDEuNzQ1NTkgNS4wNjk1NEMxLjU5MzM2IDUuMTU5NDkgMS40OTk5NiA1LjMyMzE3IDEuNDk5OTYgNS41QzEuNDk5OTYgNS42NzY4MyAxLjU5MzM2IDUuODQwNTEgMS43NDU1OSA1LjkzMDQ2TDcuMjQ1NTkgOS4xODA0NkM3LjQwMjUgOS4yNzMxOCA3LjU5NzQyIDkuMjczMTggNy43NTQzMiA5LjE4MDQ2TDEzLjI1NDMgNS45MzA0NkMxMy40MDY2IDUuODQwNTEgMTMuNSA1LjY3NjgzIDEzLjUgNS41QzEzLjUgNS4zMjMxNyAxMy40MDY2IDUuMTU5NDkgMTMuMjU0MyA1LjA2OTU0TDcuNzU0MzIgMS44MTk1NFpNNy40OTk5NiA4LjE2OTIzTDIuOTgyOCA1LjVMNy40OTk5NiAyLjgzMDc3TDEyLjAxNzEgNS41TDcuNDk5OTYgOC4xNjkyM1pNMi4yNTQzMiA4LjMxOTU0QzIuMDE2NTggOC4xNzkwNiAxLjcwOTk4IDguMjU3OSAxLjU2OTQ5IDguNDk1NjRDMS40MjkwMSA4LjczMzM3IDEuNTA3ODUgOS4wMzk5OCAxLjc0NTU5IDkuMTgwNDZMNy4yNDU1OSAxMi40MzA1QzcuNDAyNSAxMi41MjMyIDcuNTk3NDIgMTIuNTIzMiA3Ljc1NDMyIDEyLjQzMDVMMTMuMjU0MyA5LjE4MDQ2QzEzLjQ5MjEgOS4wMzk5OCAxMy41NzA5IDguNzMzMzcgMTMuNDMwNCA4LjQ5NTY0QzEzLjI4OTkgOC4yNTc5IDEyLjk4MzMgOC4xNzkwNiAxMi43NDU2IDguMzE5NTRMNy40OTk5NiAxMS40MTkyTDIuMjU0MzIgOC4zMTk1NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEJyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljk3OTQyIDEuMjUxNzFMNi45NTg1IDEuMzAxOTlMNS41ODY2MiA0LjYwMDM5QzUuNTQzNDIgNC43MDQyNiA1LjQ0NTczIDQuNzc1MjMgNS4zMzM2IDQuNzg0MjJMMS43NzI3IDUuMDY5N0wxLjcxODQxIDUuMDc0MDVMMS4zODY4NyA1LjEwMDYzTDEuMDg2MDggNS4xMjQ3NUMwLjgyMDA4NSA1LjE0NjA3IDAuNzEyMjI4IDUuNDc4MDIgMC45MTQ4ODkgNS42NTE2MkwxLjE0NDA2IDUuODQ3OTNMMS4zOTY2NiA2LjA2NDMxTDEuNDM4MDIgNi4wOTk3NEw0LjE1MTA1IDguNDIzNzRDNC4yMzY0OCA4LjQ5NjkyIDQuMjczOCA4LjYxMTc2IDQuMjQ3NjkgOC43MjExOEwzLjQxODgyIDEyLjE5NkwzLjQwNjE4IDEyLjI0OUwzLjMyOTAxIDEyLjU3MjVMMy4yNTg5OSAxMi44NjZDMy4xOTcwOCAxMy4xMjU2IDMuNDc5NDUgMTMuMzMwOCAzLjcwNzE4IDEzLjE5MTdMMy45NjQ3IDEzLjAzNDRMNC4yNDg1NCAxMi44NjFMNC4yOTUwMiAxMi44MzI2TDcuMzQzNjUgMTAuOTcwNUM3LjQzOTY1IDEwLjkxMTkgNy41NjA0IDEwLjkxMTkgNy42NTY0IDEwLjk3MDVMMTAuNzA1IDEyLjgzMjZMMTAuNzUxNSAxMi44NjFMMTEuMDM1NCAxMy4wMzQ0TDExLjI5MjkgMTMuMTkxN0MxMS41MjA2IDEzLjMzMDggMTEuODAzIDEzLjEyNTYgMTEuNzQxMSAxMi44NjZMMTEuNjcxIDEyLjU3MjVMMTEuNTkzOSAxMi4yNDlMMTEuNTgxMiAxMi4xOTZMMTAuNzUyNCA4LjcyMTE4QzEwLjcyNjMgOC42MTE3NiAxMC43NjM2IDguNDk2OTIgMTAuODQ5IDguNDIzNzRMMTMuNTYyIDYuMDk5NzRMMTMuNjAzNCA2LjA2NDMxTDEzLjg1NiA1Ljg0NzkzTDE0LjA4NTIgNS42NTE2MkMxNC4yODc4IDUuNDc4MDIgMTQuMTggNS4xNDYwNyAxMy45MTQgNS4xMjQ3NUwxMy42MTMyIDUuMTAwNjNMMTMuMjgxNiA1LjA3NDA1TDEzLjIyNzQgNS4wNjk3TDkuNjY2NDUgNC43ODQyMkM5LjU1NDMyIDQuNzc1MjMgOS40NTY2MyA0LjcwNDI2IDkuNDEzNDMgNC42MDAzOUw4LjA0MTU1IDEuMzAxOTlMOC4wMjA2NCAxLjI1MTcxTDcuODkyOTEgMC45NDQ2MDlMNy43NzcwMiAwLjY2NTk5MkM3LjY3NDU0IDAuNDE5NjA0IDcuMzI1NTEgMC40MTk2MDQgNy4yMjMwMyAwLjY2NTk5Mkw3LjEwNzE1IDAuOTQ0NjA5TDYuOTc5NDIgMS4yNTE3MVpNNy41MDAwMyAyLjYwMzk3TDYuNTA5OTQgNC45ODQ0MkM2LjMyMjczIDUuNDM0NTMgNS44OTk0NCA1Ljc0MjA3IDUuNDEzNTEgNS43ODEwM0wyLjg0MzYxIDUuOTg3MDVMNC44MDE2IDcuNjY0MjhDNS4xNzE4MyA3Ljk4MTQyIDUuMzMzNTEgOC40NzkwMyA1LjIyMDQgOC45NTMyMUw0LjYyMjIxIDExLjQ2MUw2LjgyMjQgMTAuMTE3MUM3LjIzODQyIDkuODYzMDIgNy43NjE2NCA5Ljg2MzAyIDguMTc3NjYgMTAuMTE3MUwxMC4zNzc4IDExLjQ2MUw5Ljc3OTY1IDguOTUzMjFDOS42NjY1NCA4LjQ3OTAzIDkuODI4MjIgNy45ODE0MiAxMC4xOTg0IDcuNjY0MjhMMTIuMTU2NCA1Ljk4NzA1TDkuNTg2NTQgNS43ODEwM0M5LjEwMDYxIDUuNzQyMDcgOC42NzczMiA1LjQzNDUzIDguNDkwMTEgNC45ODQ0Mkw3LjUwMDAzIDIuNjAzOTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxacj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4yMjMwMyAwLjY2NTk5MkM3LjMyNTUxIDAuNDE5NjA0IDcuNjc0NTQgMC40MTk2MDQgNy43NzcwMiAwLjY2NTk5Mkw5LjQxMzQzIDQuNjAwMzlDOS40NTY2MyA0LjcwNDI2IDkuNTU0MzIgNC43NzUyMyA5LjY2NjQ1IDQuNzg0MjJMMTMuOTE0IDUuMTI0NzVDMTQuMTggNS4xNDYwNyAxNC4yODc4IDUuNDc4MDIgMTQuMDg1MiA1LjY1MTYyTDEwLjg0OSA4LjQyMzc0QzEwLjc2MzYgOC40OTY5MiAxMC43MjYzIDguNjExNzYgMTAuNzUyNCA4LjcyMTE4TDExLjc0MTEgMTIuODY2QzExLjgwMyAxMy4xMjU2IDExLjUyMDYgMTMuMzMwOCAxMS4yOTI5IDEzLjE5MTdMNy42NTY0IDEwLjk3MDVDNy41NjA0IDEwLjkxMTkgNy40Mzk2NSAxMC45MTE5IDcuMzQzNjUgMTAuOTcwNUwzLjcwNzE4IDEzLjE5MTdDMy40Nzk0NSAxMy4zMzA4IDMuMTk3MDggMTMuMTI1NiAzLjI1ODk5IDEyLjg2Nkw0LjI0NzY5IDguNzIxMThDNC4yNzM4IDguNjExNzYgNC4yMzY0OCA4LjQ5NjkyIDQuMTUxMDUgOC40MjM3NEwwLjkxNDg4OSA1LjY1MTYyQzAuNzEyMjI4IDUuNDc4MDIgMC44MjAwODYgNS4xNDYwNyAxLjA4NjA4IDUuMTI0NzVMNS4zMzM2IDQuNzg0MjJDNS40NDU3MyA0Ljc3NTIzIDUuNTQzNDIgNC43MDQyNiA1LjU4NjYyIDQuNjAwMzlMNy4yMjMwMyAwLjY2NTk5MlpcIixmaWxsOm59KSl9LCRyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjg0OTk4IDcuNDk5OThDMS44NDk5OCA3LjIxMzIxIDEuODcxMzQgNi45MzE0MyAxLjkxMjU2IDYuNjU2MTVMOS41NjM3NCAyLjIzODc1QzkuODYzMTEgMi4zNTYyNyAxMC4xNSAyLjQ5ODYxIDEwLjQyMTkgMi42NjMyMkwzLjc3MDY1IDYuNTAzMzJDMy43MzY2OSA2LjUyMTgzIDMuNzA0ODIgNi41NDQ5IDMuNjc2MDIgNi41NzIzOEMzLjU5MTEgNi42NTMwOCAzLjU0MjQ1IDYuNzYyODYgMy41MzY4MiA2Ljg3NjU4QzMuNTMzNTkgNi45NDE4IDMuNTQ0NTEgNy4wMDgzMSAzLjU3MDg2IDcuMDcxMzdDMy41ODkyNyA3LjExNTcgMy42MTQ5IDcuMTU3NDIgMy42NDc0NCA3LjE5NDU4QzMuNjczMDYgNy4yMjM5NiAzLjcwMiA3LjI0OTQxIDMuNzMzMzcgNy4yNzA2OUw3LjMyNTMzIDkuODM4MTNMMy44NzIzMiAxMS44MzE3QzIuNjM2MDQgMTAuNzk1MyAxLjg0OTk4IDkuMjM5NDQgMS44NDk5OCA3LjQ5OTk4Wk04LjM2ODQzIDEwLjI3NTFDOC4zNzY4MiAxMC4yNzA2IDguMzg1MDkgMTAuMjY1OSA4LjM5MzIyIDEwLjI2MDhMOS44NDA5MSA5LjQyNDk5QzkuODQ3MDYgOS40MjE2MyA5Ljg1MzE0IDkuNDE4MTIgOS44NTkxNSA5LjQxNDQ2TDExLjMxMDEgOC41NzY3N0MxMS4zNjU1IDguNTQ2NDkgMTEuNDE1NCA4LjUwNCAxMS40NTU0IDguNDQ5OTVDMTEuNjAzNCA4LjI1MDMxIDExLjU2MTYgNy45Njg0OCAxMS4zNjIgNy44MjA0Nkw3LjgyNzc5IDUuMjAwMTdMMTEuMjE2MSAzLjI0MzkzQzEyLjQwMTMgNC4yNzk2MyAxMy4xNSA1LjgwMjM3IDEzLjE1IDcuNDk5OThDMTMuMTUgNy44MzU0NiAxMy4xMjA3IDguMTY0MTEgMTMuMDY0NyA4LjQ4MzUzTDUuNTY4NzUgMTIuODExM0M1LjI2MTM4IDEyLjY5OTUgNC45NjY0NiAxMi41NjE4IDQuNjg2NjIgMTIuNDAwOEw4LjM2ODQzIDEwLjI3NTFaTTguMTgxNDkgOS4zNDM4M0w0LjgxNjU5IDYuOTM4NjhMNS41MDkxOCA2LjUzODgxTDguODA2MDQgOC45ODMyNEw4LjE4MTQ5IDkuMzQzODNaTTYuMzU4NzUgNi4wNDgzMkw2Ljk3ODIyIDUuNjkwNjdMMTAuMjc1MSA4LjEzNTA2TDkuNjU1NiA4LjQ5Mjc1TDYuMzU4NzUgNi4wNDgzMlpNOC4zMzE4IDEuOTEwNzhMMi4yNDI2MyA1LjQyNjM2QzMuMDY5NDEgMy4zMzE4OCA1LjExMTY0IDEuODQ5OTggNy40OTk5OCAxLjg0OTk4QzcuNzgyNTggMS44NDk5OCA4LjA2MDMzIDEuODcwNzIgOC4zMzE4IDEuOTEwNzhaTTYuODQ2ODQgMTMuMTEyNkM3LjA2MTE0IDEzLjEzNzMgNy4yNzkwOCAxMy4xNSA3LjQ5OTk4IDEzLjE1QzkuODI0NiAxMy4xNSAxMS44MjEzIDExLjc0NjEgMTIuNjg4NiA5LjczOTlMNi44NDY4NCAxMy4xMTI2Wk03LjQ5OTk4IDAuODQ5OTc2QzMuODI3MjggMC44NDk5NzYgMC44NDk5NzYgMy44MjcyOCAwLjg0OTk3NiA3LjQ5OTk4QzAuODQ5OTc2IDExLjE3MjcgMy44MjcyOCAxNC4xNSA3LjQ5OTk4IDE0LjE1QzExLjE3MjcgMTQuMTUgMTQuMTUgMTEuMTcyNyAxNC4xNSA3LjQ5OTk4QzE0LjE1IDMuODI3MjggMTEuMTcyNyAwLjg0OTk3NiA3LjQ5OTk4IDAuODQ5OTc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgM0MyIDIuNDQ3NzIgMi40NDc3MiAyIDMgMkgxMkMxMi41NTIzIDIgMTMgMi40NDc3MiAxMyAzVjEyQzEzIDEyLjU1MjMgMTIuNTUyMyAxMyAxMiAxM0gzQzIuNDQ3NzIgMTMgMiAxMi41NTIzIDIgMTJWM1pNMTIgM0gzVjEySDEyVjNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxGcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS40OTk5OCAwLjVDNS40OTk5OCAwLjIyMzg1OCA1LjcyMzgzIDAgNS45OTk5OCAwSDcuNDk5OThIOC45OTk5OEM5LjI3NjEyIDAgOS40OTk5OCAwLjIyMzg1OCA5LjQ5OTk4IDAuNUM5LjQ5OTk4IDAuNzc2MTQyIDkuMjc2MTIgMSA4Ljk5OTk4IDFINy45OTk5OFYyLjExOTIyQzkuMDk4MzIgMi4yMDQwOSAxMC4xMTkgMi41NjYyMiAxMC45OTIgMy4xMzU3MkMxMS4wMTE2IDMuMTA4NTEgMTEuMDMzNiAzLjA4MjUyIDExLjA1OCAzLjA1ODA2TDExLjg1OCAyLjI1ODA2QzEyLjEwMjEgMi4wMTM5OCAxMi40OTc4IDIuMDEzOTggMTIuNzQxOSAyLjI1ODA2QzEyLjk4NiAyLjUwMjE0IDEyLjk4NiAyLjg5Nzg2IDEyLjc0MTkgMy4xNDE5NEwxMS45NjcgMy45MTY4MkMxMy4xNTk1IDUuMDc5MjUgMTMuOSA2LjcwMzE0IDEzLjkgOC40OTk5OEMxMy45IDEyLjAzNDYgMTEuMDM0NiAxNC45IDcuNDk5OTggMTQuOUMzLjk2NTM1IDE0LjkgMS4wOTk5OCAxMi4wMzQ2IDEuMDk5OTggOC40OTk5OEMxLjA5OTk4IDUuMTMzNjIgMy42OTkwNCAyLjM3NDMgNi45OTk5OCAyLjExOTIyVjFINS45OTk5OEM1LjcyMzgzIDEgNS40OTk5OCAwLjc3NjE0MiA1LjQ5OTk4IDAuNVpNMi4wOTk5OCA4LjQ5OTk4QzIuMDk5OTggNS41MTc2NCA0LjUxNzY0IDMuMDk5OTggNy40OTk5OCAzLjA5OTk4QzEwLjQ4MjMgMy4wOTk5OCAxMi45IDUuNTE3NjQgMTIuOSA4LjQ5OTk4QzEyLjkgMTEuNDgyMyAxMC40ODIzIDEzLjkgNy40OTk5OCAxMy45QzQuNTE3NjQgMTMuOSAyLjA5OTk4IDExLjQ4MjMgMi4wOTk5OCA4LjQ5OTk4Wk03Ljk5OTk4IDQuNUM3Ljk5OTk4IDQuMjIzODYgNy43NzYxMiA0IDcuNDk5OTggNEM3LjIyMzgzIDQgNi45OTk5OCA0LjIyMzg2IDYuOTk5OTggNC41VjkuNUM2Ljk5OTk4IDkuNzc2MTQgNy4yMjM4MyAxMCA3LjQ5OTk4IDEwQzcuNzc2MTIgMTAgNy45OTk5OCA5Ljc3NjE0IDcuOTk5OTggOS41VjQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNC40OTk5IDAuOTk5OTkyQzE0LjIyMzcgMC45OTk5OTIgMTMuOTk5OSAxLjIyMzg1IDEzLjk5OTkgMS40OTk5OUwxMy45OTk5IDUuOTk5OTVMMC45OTk5OTIgNS45OTk5NUwwLjk5OTk5MiAxLjQ5OTk5QzAuOTk5OTkyIDEuMjIzODUgMC43NzYxMzYgMC45OTk5OTIgMC40OTk5OTYgMC45OTk5OTJDMC4yMjM4NTYgMC45OTk5OTIgLTkuNzg1MDllLTA5IDEuMjIzODUgLTIuMTg1NTZlLTA4IDEuNDk5OTlMNC4wNzI3OWUtMDcgMTMuNDk5OUMzLjk1MjA4ZS0wNyAxMy43NzYgMC4yMjM4NTUgMTMuOTk5OSAwLjQ5OTk5NiAxMy45OTk5QzAuNzc2MTM2IDEzLjk5OTkgMC45OTk5OTIgMTMuNzc2IDAuOTk5OTkyIDEzLjQ5OTlMMC45OTk5OTIgOC45OTk5MkwxMy45OTk5IDguOTk5OTJMMTMuOTk5OSAxMy40OTk5QzEzLjk5OTkgMTMuNzc2IDE0LjIyMzcgMTMuOTk5OSAxNC40OTk5IDEzLjk5OTlDMTQuNzc2IDEzLjk5OTkgMTQuOTk5OSAxMy43NzYgMTQuOTk5OSAxMy40OTk5TDE0Ljk5OTkgMS40OTk5OUMxNC45OTk5IDEuMjIzODUgMTQuNzc2IDAuOTk5OTkyIDE0LjQ5OTkgMC45OTk5OTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxVcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC45OTk4NzggMC41QzAuOTk5ODc4IDAuMjIzODU4IDEuMjIzNzQgMCAxLjQ5OTg4IDBIMTMuNDk5OUMxMy43NzYgMCAxMy45OTk5IDAuMjIzODU4IDEzLjk5OTkgMC41QzEzLjk5OTkgMC43NzYxNDIgMTMuNzc2IDEgMTMuNDk5OSAxSDZIMS40OTk4OEMxLjIyMzc0IDEgMC45OTk4NzggMC43NzYxNDIgMC45OTk4NzggMC41Wk05IDE0VjFMNiAxVjE0SDEuNDk5ODhDMS4yMjM3NCAxNCAwLjk5OTg3OCAxNC4yMjM5IDAuOTk5ODc4IDE0LjVDMC45OTk4NzggMTQuNzc2MSAxLjIyMzc0IDE1IDEuNDk5ODggMTVIMTMuNDk5OUMxMy43NzYgMTUgMTMuOTk5OSAxNC43NzYxIDEzLjk5OTkgMTQuNUMxMy45OTk5IDE0LjIyMzkgMTMuNzc2IDE0IDEzLjQ5OTkgMTRIOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHpyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjAwMDAzIDMuMjVDNS4wMDAwMyAyLjk3Mzg2IDQuNzc2MTcgMi43NSA0LjUwMDAzIDIuNzVDNC4yMjM4OSAyLjc1IDQuMDAwMDMgMi45NzM4NiA0LjAwMDAzIDMuMjVWNy4xMDAwM0gyLjQ5OTk4QzIuMjc5MDYgNy4xMDAwMyAyLjA5OTk4IDcuMjc5MTIgMi4wOTk5OCA3LjUwMDAzQzIuMDk5OTggNy43MjA5NCAyLjI3OTA2IDcuOTAwMDMgMi40OTk5OCA3LjkwMDAzSDQuMDAwMDNWOC41NUM0LjAwMDAzIDEwLjQ4MyA1LjU2NzAzIDEyLjA1IDcuNTAwMDMgMTIuMDVDOS40MzMwMyAxMi4wNSAxMSAxMC40ODMgMTEgOC41NVY3LjkwMDAzSDEyLjVDMTIuNzIwOSA3LjkwMDAzIDEyLjkgNy43MjA5NCAxMi45IDcuNTAwMDNDMTIuOSA3LjI3OTEyIDEyLjcyMDkgNy4xMDAwMyAxMi41IDcuMTAwMDNIMTFWMy4yNUMxMSAyLjk3Mzg2IDEwLjc3NjIgMi43NSAxMC41IDIuNzVDMTAuMjIzOSAyLjc1IDEwIDIuOTczODYgMTAgMy4yNVY3LjEwMDAzSDUuMDAwMDNWMy4yNVpNNS4wMDAwMyA3LjkwMDAzVjguNTVDNS4wMDAwMyA5LjkzMDcxIDYuMTE5MzIgMTEuMDUgNy41MDAwMyAxMS4wNUM4Ljg4MDc0IDExLjA1IDEwIDkuOTMwNzEgMTAgOC41NVY3LjkwMDAzSDUuMDAwMDNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxHcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDBDNy43NzYxNCAwIDggMC4yMjM4NTggOCAwLjVWMi41QzggMi43NzYxNCA3Ljc3NjE0IDMgNy41IDNDNy4yMjM4NiAzIDcgMi43NzYxNCA3IDIuNVYwLjVDNyAwLjIyMzg1OCA3LjIyMzg2IDAgNy41IDBaTTIuMTk2NyAyLjE5NjdDMi4zOTE5NiAyLjAwMTQ0IDIuNzA4NTQgMi4wMDE0NCAyLjkwMzgxIDIuMTk2N0w0LjMxODAyIDMuNjEwOTFDNC41MTMyOCAzLjgwNjE3IDQuNTEzMjggNC4xMjI3NiA0LjMxODAyIDQuMzE4MDJDNC4xMjI3NiA0LjUxMzI4IDMuODA2MTcgNC41MTMyOCAzLjYxMDkxIDQuMzE4MDJMMi4xOTY3IDIuOTAzODFDMi4wMDE0NCAyLjcwODU0IDIuMDAxNDQgMi4zOTE5NiAyLjE5NjcgMi4xOTY3Wk0wLjUgN0MwLjIyMzg1OCA3IDAgNy4yMjM4NiAwIDcuNUMwIDcuNzc2MTQgMC4yMjM4NTggOCAwLjUgOEgyLjVDMi43NzYxNCA4IDMgNy43NzYxNCAzIDcuNUMzIDcuMjIzODYgMi43NzYxNCA3IDIuNSA3SDAuNVpNMi4xOTY3IDEyLjgwMzNDMi4wMDE0NCAxMi42MDggMi4wMDE0NCAxMi4yOTE1IDIuMTk2NyAxMi4wOTYyTDMuNjEwOTEgMTAuNjgyQzMuODA2MTcgMTAuNDg2NyA0LjEyMjc2IDEwLjQ4NjcgNC4zMTgwMiAxMC42ODJDNC41MTMyOCAxMC44NzcyIDQuNTEzMjggMTEuMTkzOCA0LjMxODAyIDExLjM4OTFMMi45MDM4MSAxMi44MDMzQzIuNzA4NTQgMTIuOTk4NiAyLjM5MTk2IDEyLjk5ODYgMi4xOTY3IDEyLjgwMzNaTTEyLjUgN0MxMi4yMjM5IDcgMTIgNy4yMjM4NiAxMiA3LjVDMTIgNy43NzYxNCAxMi4yMjM5IDggMTIuNSA4SDE0LjVDMTQuNzc2MSA4IDE1IDcuNzc2MTQgMTUgNy41QzE1IDcuMjIzODYgMTQuNzc2MSA3IDE0LjUgN0gxMi41Wk0xMC42ODIgNC4zMTgwMkMxMC40ODY3IDQuMTIyNzYgMTAuNDg2NyAzLjgwNjE3IDEwLjY4MiAzLjYxMDkxTDEyLjA5NjIgMi4xOTY3QzEyLjI5MTUgMi4wMDE0NCAxMi42MDggMi4wMDE0NCAxMi44MDMzIDIuMTk2N0MxMi45OTg2IDIuMzkxOTYgMTIuOTk4NiAyLjcwODU0IDEyLjgwMzMgMi45MDM4MUwxMS4zODkxIDQuMzE4MDJDMTEuMTkzOCA0LjUxMzI4IDEwLjg3NzIgNC41MTMyOCAxMC42ODIgNC4zMTgwMlpNOCAxMi41QzggMTIuMjIzOSA3Ljc3NjE0IDEyIDcuNSAxMkM3LjIyMzg2IDEyIDcgMTIuMjIzOSA3IDEyLjVWMTQuNUM3IDE0Ljc3NjEgNy4yMjM4NiAxNSA3LjUgMTVDNy43NzYxNCAxNSA4IDE0Ljc3NjEgOCAxNC41VjEyLjVaTTEwLjY4MiAxMC42ODJDMTAuODc3MiAxMC40ODY3IDExLjE5MzggMTAuNDg2NyAxMS4zODkxIDEwLjY4MkwxMi44MDMzIDEyLjA5NjJDMTIuOTk4NiAxMi4yOTE1IDEyLjk5ODYgMTIuNjA4IDEyLjgwMzMgMTIuODAzM0MxMi42MDggMTIuOTk4NiAxMi4yOTE1IDEyLjk5ODYgMTIuMDk2MiAxMi44MDMzTDEwLjY4MiAxMS4zODkxQzEwLjQ4NjcgMTEuMTkzOCAxMC40ODY3IDEwLjg3NzIgMTAuNjgyIDEwLjY4MlpNNS41IDcuNUM1LjUgNi4zOTU0MyA2LjM5NTQzIDUuNSA3LjUgNS41QzguNjA0NTcgNS41IDkuNSA2LjM5NTQzIDkuNSA3LjVDOS41IDguNjA0NTcgOC42MDQ1NyA5LjUgNy41IDkuNUM2LjM5NTQzIDkuNSA1LjUgOC42MDQ1NyA1LjUgNy41Wk03LjUgNC41QzUuODQzMTUgNC41IDQuNSA1Ljg0MzE1IDQuNSA3LjVDNC41IDkuMTU2ODUgNS44NDMxNSAxMC41IDcuNSAxMC41QzkuMTU2ODUgMTAuNSAxMC41IDkuMTU2ODUgMTAuNSA3LjVDMTAuNSA1Ljg0MzE1IDkuMTU2ODUgNC41IDcuNSA0LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxLcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuNSA0QzguNTY3IDQgNyA1LjU2NyA3IDcuNUM3IDkuNDMzIDguNTY3IDExIDEwLjUgMTFDMTIuNDMzIDExIDE0IDkuNDMzIDE0IDcuNUMxNCA1LjU2NyAxMi40MzMgNCAxMC41IDRaTTcuNjcxMzMgMTFDNi42NTE4MyAxMC4xNzUgNiA4LjkxMzYzIDYgNy41QzYgNi4wODYzNyA2LjY1MTgzIDQuODI0OTggNy42NzEzMyA0SDQuNUMyLjU2NyA0IDEgNS41NjcgMSA3LjVDMSA5LjQzMyAyLjU2NyAxMSA0LjUgMTFINy42NzEzM1pNMCA3LjVDMCA1LjAxNDcyIDIuMDE0NzIgMyA0LjUgM0gxMC41QzEyLjk4NTMgMyAxNSA1LjAxNDcyIDE1IDcuNUMxNSA5Ljk4NTI4IDEyLjk4NTMgMTIgMTAuNSAxMkg0LjVDMi4wMTQ3MiAxMiAwIDkuOTg1MjggMCA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxxcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS45MDMyMSA3LjI5Njc3QzEuOTAzMjEgMTAuMzQxIDQuMTEwNDEgMTIuNDE0NyA2LjU4ODkzIDEyLjg0MzlDNi44NzI1NSAxMi44OTMgNy4wNjI2NiAxMy4xNjI3IDcuMDEzNTUgMTMuNDQ2NEM2Ljk2NDQ0IDEzLjczIDYuNjk0NzEgMTMuOTIwMSA2LjQxMTA5IDEzLjg3MUMzLjQ5OTQyIDEzLjM2NjggMC44NjA4NCAxMC45MTI3IDAuODYwODQgNy4yOTY3N0MwLjg2MDgzOSA1Ljc2MDA5IDEuNTU5OTYgNC41NTI0NSAyLjM3NjM5IDMuNjMzNzdDMi45NjEyNCAyLjk3NTY4IDMuNjMwMzQgMi40NDEzNSA0LjE2ODQ2IDIuMDMyMDJMMi41MzIwNSAyLjAzMjAyQzIuMjU1OTEgMi4wMzIwMiAyLjAzMjA1IDEuODA4MTYgMi4wMzIwNSAxLjUzMjAyQzIuMDMyMDUgMS4yNTU4OCAyLjI1NTkxIDEuMDMyMDIgMi41MzIwNSAxLjAzMjAyTDUuNTMyMDUgMS4wMzIwMkM1LjgwODE5IDEuMDMyMDIgNi4wMzIwNSAxLjI1NTg4IDYuMDMyMDUgMS41MzIwMkw2LjAzMjA1IDQuNTMyMDJDNi4wMzIwNSA0LjgwODE2IDUuODA4MTkgNS4wMzIwMiA1LjUzMjA1IDUuMDMyMDJDNS4yNTU5MSA1LjAzMjAyIDUuMDMyMDUgNC44MDgxNiA1LjAzMjA1IDQuNTMyMDJMNS4wMzIwNSAyLjY4NjQ1TDUuMDMwNTQgMi42ODc1OUw1LjAzMDQ1IDIuNjg3NjZMNS4wMzA0NCAyLjY4NzY3TDUuMDMwNDMgMi42ODc2N0M0LjQ1ODk2IDMuMTE4NjggMy43NjA1OSAzLjY0NTM4IDMuMTU1NTQgNC4zMjYyQzIuNDQxMDIgNS4xMzAyMSAxLjkwMzIxIDYuMTAxNTQgMS45MDMyMSA3LjI5Njc3Wk0xMy4wMTA5IDcuNzAzMjFDMTMuMDEwOSA0LjY5MTE1IDEwLjg1MDUgMi42Mjk2IDguNDAzODQgMi4xNzAyOUM4LjEyMDkzIDIuMTE3MTggNy45MzQ2NSAxLjg0NDc5IDcuOTg3NzYgMS41NjE4OEM4LjA0MDg3IDEuMjc4OTggOC4zMTMyNiAxLjA5MjcgOC41OTYxNiAxLjE0NTgxQzExLjQ3MDQgMS42ODU0MSAxNC4wNTMyIDQuMTI2MDUgMTQuMDUzMiA3LjcwMzIxQzE0LjA1MzIgOS4yMzk4OCAxMy4zNTQxIDEwLjQ0NzUgMTIuNTM3NyAxMS4zNjYyQzExLjk1MjggMTIuMDI0MyAxMS4yODM3IDEyLjU1ODYgMTAuNzQ1NiAxMi45NjhMMTIuMzgyMSAxMi45NjhDMTIuNjU4MiAxMi45NjggMTIuODgyMSAxMy4xOTE4IDEyLjg4MjEgMTMuNDY4QzEyLjg4MjEgMTMuNzQ0MSAxMi42NTgyIDEzLjk2OCAxMi4zODIxIDEzLjk2OEw5LjM4MjA1IDEzLjk2OEM5LjEwNTkxIDEzLjk2OCA4Ljg4MjA1IDEzLjc0NDEgOC44ODIwNSAxMy40NjhMOC44ODIwNSAxMC40NjhDOC44ODIwNSAxMC4xOTE4IDkuMTA1OTEgOS45Njc5NiA5LjM4MjA1IDkuOTY3OTZDOS42NTgxOSA5Ljk2Nzk2IDkuODgyMDUgMTAuMTkxOCA5Ljg4MjA1IDEwLjQ2OEw5Ljg4MjA1IDEyLjMxMzVMOS44ODM2MiAxMi4zMTIzQzEwLjQ1NTEgMTEuODgxMyAxMS4xNTM1IDExLjM1NDYgMTEuNzU4NSAxMC42NzM4QzEyLjQ3MzEgOS44Njk3NiAxMy4wMTA5IDguODk4NDQgMTMuMDEwOSA3LjcwMzIxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTggMkgxMi41QzEyLjc3NjEgMiAxMyAyLjIyMzg2IDEzIDIuNVY1SDhWMlpNNyA1VjJIMi41QzIuMjIzODYgMiAyIDIuMjIzODYgMiAyLjVWNUg3Wk0yIDZWOUg3VjZIMlpNOCA2SDEzVjlIOFY2Wk04IDEwSDEzVjEyLjVDMTMgMTIuNzc2MSAxMi43NzYxIDEzIDEyLjUgMTNIOFYxMFpNMiAxMi41VjEwSDdWMTNIMi41QzIuMjIzODYgMTMgMiAxMi43NzYxIDIgMTIuNVpNMSAyLjVDMSAxLjY3MTU3IDEuNjcxNTcgMSAyLjUgMUgxMi41QzEzLjMyODQgMSAxNCAxLjY3MTU3IDE0IDIuNVYxMi41QzE0IDEzLjMyODQgMTMuMzI4NCAxNCAxMi41IDE0SDIuNUMxLjY3MTU3IDE0IDEgMTMuMzI4NCAxIDEyLjVWMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuOTAwMDI0IDcuNTAwMDJDMC45MDAwMjQgMy44NTQ5NSAzLjg1NDk1IDAuOTAwMDI0IDcuNTAwMDIgMC45MDAwMjRDMTEuMTQ1MSAwLjkwMDAyNCAxNC4xIDMuODU0OTUgMTQuMSA3LjUwMDAyQzE0LjEgMTEuMTQ1MSAxMS4xNDUxIDE0LjEgNy41MDAwMiAxNC4xQzMuODU0OTUgMTQuMSAwLjkwMDAyNCAxMS4xNDUxIDAuOTAwMDI0IDcuNTAwMDJaTTcuNTAwMDIgMS44MDAwMkM0LjM1MjAxIDEuODAwMDIgMS44MDAwMiA0LjM1MjAxIDEuODAwMDIgNy41MDAwMkMxLjgwMDAyIDEwLjY0OCA0LjM1MjAxIDEzLjIgNy41MDAwMiAxMy4yQzEwLjY0OCAxMy4yIDEzLjIgMTAuNjQ4IDEzLjIgNy41MDAwMkMxMy4yIDQuMzUyMDEgMTAuNjQ4IDEuODAwMDIgNy41MDAwMiAxLjgwMDAyWk0zLjA3NTA0IDcuNTAwMDJDMy4wNzUwNCA1LjA1NjE3IDUuMDU2MTggMy4wNzUwMiA3LjUwMDA0IDMuMDc1MDJDOS45NDM4OCAzLjA3NTAyIDExLjkyNSA1LjA1NjE3IDExLjkyNSA3LjUwMDAyQzExLjkyNSA5Ljk0Mzg2IDkuOTQzODggMTEuOTI1IDcuNTAwMDQgMTEuOTI1QzUuMDU2MTggMTEuOTI1IDMuMDc1MDQgOS45NDM4NiAzLjA3NTA0IDcuNTAwMDJaTTcuNTAwMDQgMy45MjUwMkM1LjUyNTYyIDMuOTI1MDIgMy45MjUwNCA1LjUyNTYxIDMuOTI1MDQgNy41MDAwMkMzLjkyNTA0IDkuNDc0NDIgNS41MjU2MyAxMS4wNzUgNy41MDAwNCAxMS4wNzVDOS40NzQ0NCAxMS4wNzUgMTEuMDc1IDkuNDc0NDIgMTEuMDc1IDcuNTAwMDJDMTEuMDc1IDUuNTI1NjEgOS40NzQ0NCAzLjkyNTAyIDcuNTAwMDQgMy45MjUwMlpNNy41MDAwNCA1LjI1MDAyQzYuMjU3NCA1LjI1MDAyIDUuMjUwMDQgNi4yNTczOSA1LjI1MDA0IDcuNTAwMDJDNS4yNTAwNCA4Ljc0MjY2IDYuMjU3NCA5Ljc1MDAyIDcuNTAwMDQgOS43NTAwMkM4Ljc0MjY3IDkuNzUwMDIgOS43NTAwNCA4Ljc0MjY2IDkuNzUwMDQgNy41MDAwMkM5Ljc1MDA0IDYuMjU3MzggOC43NDI2NyA1LjI1MDAyIDcuNTAwMDQgNS4yNTAwMlpNNi4wNTAwNCA3LjUwMDAyQzYuMDUwMDQgNi42OTkyMSA2LjY5OTIzIDYuMDUwMDIgNy41MDAwNCA2LjA1MDAyQzguMzAwODQgNi4wNTAwMiA4Ljk1MDA0IDYuNjk5MjEgOC45NTAwNCA3LjUwMDAyQzguOTUwMDQgOC4zMDA4MyA4LjMwMDg0IDguOTUwMDIgNy41MDAwNCA4Ljk1MDAyQzYuNjk5MjMgOC45NTAwMiA2LjA1MDA0IDguMzAwODMgNi4wNTAwNCA3LjUwMDAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuOTQ5OTMgMi45NTAwMkwzLjk0OTkzIDQuNDk5OThDMy45NDk5MyA0Ljc0ODUxIDMuNzQ4NDUgNC45NDk5OCAzLjQ5OTkzIDQuOTQ5OThDMy4yNTE0IDQuOTQ5OTggMy4wNDk5MyA0Ljc0ODUxIDMuMDQ5OTMgNC40OTk5OFYyLjUwMDA0QzMuMDQ5OTMgMi40NTI0NiAzLjA1NzMxIDIuNDA2NjEgMy4wNzA5OSAyLjM2MzU3QzMuMTI4NzggMi4xODE3NSAzLjI5ODk3IDIuMDUwMDIgMy40OTk5MyAyLjA1MDAySDExLjQ5OTlDMTEuNjU1MyAyLjA1MDAyIDExLjc5MjIgMi4xMjg3MiAxMS44NzMxIDIuMjQ4NDJDMTEuOTIxNiAyLjMyMDI0IDExLjk0OTkgMi40MDY4MiAxMS45NDk5IDIuNTAwMDJMMTEuOTQ5OSAyLjUwMDA0VjQuNDk5OThDMTEuOTQ5OSA0Ljc0ODUxIDExLjc0ODUgNC45NDk5OCAxMS40OTk5IDQuOTQ5OThDMTEuMjUxNCA0Ljk0OTk4IDExLjA0OTkgNC43NDg1MSAxMS4wNDk5IDQuNDk5OThWMi45NTAwMkg4LjA0OTkzVjEyLjA1SDkuMjU0MjhDOS41MDI4MSAxMi4wNSA5LjcwNDI4IDEyLjI1MTUgOS43MDQyOCAxMi41QzkuNzA0MjggMTIuNzQ4NiA5LjUwMjgxIDEyLjk1IDkuMjU0MjggMTIuOTVINS43NTQyOEM1LjUwNTc1IDEyLjk1IDUuMzA0MjggMTIuNzQ4NiA1LjMwNDI4IDEyLjVDNS4zMDQyOCAxMi4yNTE1IDUuNTA1NzUgMTIuMDUgNS43NTQyOCAxMi4wNUg2Ljk0OTkzVjIuOTUwMDJIMy45NDk5M1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFFyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDQuNUMyIDQuMjIzODYgMi4yMjM4NiA0IDIuNSA0SDEyLjVDMTIuNzc2MSA0IDEzIDQuMjIzODYgMTMgNC41QzEzIDQuNzc2MTQgMTIuNzc2MSA1IDEyLjUgNUgyLjVDMi4yMjM4NiA1IDIgNC43NzYxNCAyIDQuNVpNNCA3LjVDNCA3LjIyMzg2IDQuMjIzODYgNyA0LjUgN0gxMC41QzEwLjc3NjEgNyAxMSA3LjIyMzg2IDExIDcuNUMxMSA3Ljc3NjE0IDEwLjc3NjEgOCAxMC41IDhINC41QzQuMjIzODYgOCA0IDcuNzc2MTQgNCA3LjVaTTMgMTAuNUMzIDEwLjIyMzkgMy4yMjM4NiAxMCAzLjUgMTBIMTEuNUMxMS43NzYxIDEwIDEyIDEwLjIyMzkgMTIgMTAuNUMxMiAxMC43NzYxIDExLjc3NjEgMTEgMTEuNSAxMUgzLjVDMy4yMjM4NiAxMSAzIDEwLjc3NjEgMyAxMC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuNSA0QzIuMjIzODYgNCAyIDQuMjIzODYgMiA0LjVDMiA0Ljc3NjE0IDIuMjIzODYgNSAyLjUgNUgxMi41QzEyLjc3NjEgNSAxMyA0Ljc3NjE0IDEzIDQuNUMxMyA0LjIyMzg2IDEyLjc3NjEgNCAxMi41IDRIMi41Wk0yIDcuNUMyIDcuMjIzODYgMi4yMjM4NiA3IDIuNSA3SDEyLjVDMTIuNzc2MSA3IDEzIDcuMjIzODYgMTMgNy41QzEzIDcuNzc2MTQgMTIuNzc2MSA4IDEyLjUgOEgyLjVDMi4yMjM4NiA4IDIgNy43NzYxNCAyIDcuNVpNMiAxMC41QzIgMTAuMjIzOSAyLjIyMzg2IDEwIDIuNSAxMEgxMi41QzEyLjc3NjEgMTAgMTMgMTAuMjIzOSAxMyAxMC41QzEzIDEwLjc3NjEgMTIuNzc2MSAxMSAxMi41IDExSDIuNUMyLjIyMzg2IDExIDIgMTAuNzc2MSAyIDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx0bz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiA0LjVDMiA0LjIyMzg2IDIuMjIzODYgNCAyLjUgNEgxMi41QzEyLjc3NjEgNCAxMyA0LjIyMzg2IDEzIDQuNUMxMyA0Ljc3NjE0IDEyLjc3NjEgNSAxMi41IDVIMi41QzIuMjIzODYgNSAyIDQuNzc2MTQgMiA0LjVaTTIgNy41QzIgNy4yMjM4NiAyLjIyMzg2IDcgMi41IDdINy41QzcuNzc2MTQgNyA4IDcuMjIzODYgOCA3LjVDOCA3Ljc3NjE0IDcuNzc2MTQgOCA3LjUgOEgyLjVDMi4yMjM4NiA4IDIgNy43NzYxNCAyIDcuNVpNMiAxMC41QzIgMTAuMjIzOSAyLjIyMzg2IDEwIDIuNSAxMEgxMC41QzEwLjc3NjEgMTAgMTEgMTAuMjIzOSAxMSAxMC41QzExIDEwLjc3NjEgMTAuNzc2MSAxMSAxMC41IDExSDIuNUMyLjIyMzg2IDExIDIgMTAuNzc2MSAyIDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxubz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiA0LjVDMiA0LjIyMzg2IDIuMjIzODYgNCAyLjUgNEgxMi41QzEyLjc3NjEgNCAxMyA0LjIyMzg2IDEzIDQuNUMxMyA0Ljc3NjE0IDEyLjc3NjEgNSAxMi41IDVIMi41QzIuMjIzODYgNSAyIDQuNzc2MTQgMiA0LjVaTTcgNy41QzcgNy4yMjM4NiA3LjIyMzg2IDcgNy41IDdIMTIuNUMxMi43NzYxIDcgMTMgNy4yMjM4NiAxMyA3LjVDMTMgNy43NzYxNCAxMi43NzYxIDggMTIuNSA4SDcuNUM3LjIyMzg2IDggNyA3Ljc3NjE0IDcgNy41Wk00IDEwLjVDNCAxMC4yMjM5IDQuMjIzODYgMTAgNC41IDEwSDEyLjVDMTIuNzc2MSAxMCAxMyAxMC4yMjM5IDEzIDEwLjVDMTMgMTAuNzc2MSAxMi43NzYxIDExIDEyLjUgMTFINC41QzQuMjIzODYgMTEgNCAxMC43NzYxIDQgMTAuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHJvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy4zNTM2IDIuMzUzNTVDMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMS44NDE3MSAxMy4zNTM2IDEuNjQ2NDVDMTMuMTU4MyAxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMi42NDY0IDEuNjQ2NDVMMTEuOTI5MSAyLjM2MzgzQzExLjkxNTkgMi4zMjI0NiAxMS44OTcgMi4yODM2OCAxMS44NzMyIDIuMjQ4NDVDMTEuNzkyMyAyLjEyODc1IDExLjY1NTQgMi4wNTAwNSAxMS41MDAxIDIuMDUwMDVIMy41MDAwNUMzLjI5OTA5IDIuMDUwMDUgMy4xMjg5IDIuMTgxNzggMy4wNzExMSAyLjM2MzZDMy4wNTc0MyAyLjQwNjY1IDMuMDUwMDUgMi40NTI0OSAzLjA1MDA1IDIuNTAwMDdWNC41MDAwMUMzLjA1MDA1IDQuNzQ4NTQgMy4yNTE1MiA0Ljk1MDAxIDMuNTAwMDUgNC45NTAwMUMzLjc0ODU4IDQuOTUwMDEgMy45NTAwNSA0Ljc0ODU0IDMuOTUwMDUgNC41MDAwMVYyLjk1MDA1SDYuOTUwMDZWNy4zNDI4NEwxLjY0NjQ1IDEyLjY0NjRDMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTMuMTU4MyAxLjY0NjQ1IDEzLjM1MzZDMS44NDE3MSAxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAyLjM1MzU1IDEzLjM1MzZMNi45NTAwNiA4Ljc1NzA1VjEyLjA1MDFINS43NTQ0QzUuNTA1ODcgMTIuMDUwMSA1LjMwNDQgMTIuMjUxNSA1LjMwNDQgMTIuNTAwMUM1LjMwNDQgMTIuNzQ4NiA1LjUwNTg3IDEyLjk1MDEgNS43NTQ0IDEyLjk1MDFIOS4yNTQ0QzkuNTAyOTMgMTIuOTUwMSA5LjcwNDQgMTIuNzQ4NiA5LjcwNDQgMTIuNTAwMUM5LjcwNDQgMTIuMjUxNSA5LjUwMjkzIDEyLjA1MDEgOS4yNTQ0IDEyLjA1MDFIOC4wNTAwNlY3LjY1NzA1TDEzLjM1MzYgMi4zNTM1NVpNOC4wNTAwNiA2LjI0Mjg0TDExLjA1MDEgMy4yNDI4M1YyLjk1MDA1SDguMDUwMDZWNi4yNDI4NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG9vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01IDMuNUM1IDMuMjIzODYgNS4yMjM4NiAzIDUuNSAzSDkuNUM5Ljc3NjE0IDMgMTAgMy4yMjM4NiAxMCAzLjVWNkgxMi41QzEyLjY4NzMgNiAxMi44NTg5IDYuMTA0NjcgMTIuOTQ0NiA2LjI3MTIxQzEzLjAzMDMgNi40Mzc3NCAxMy4wMTU3IDYuNjM4MjEgMTIuOTA2OSA2Ljc5MDYyTDcuOTA2ODcgMTMuNzkwNkM3LjgxMzAxIDEzLjkyMiA3LjY2MTQ4IDE0IDcuNSAxNEM3LjMzODUzIDE0IDcuMTg2OTkgMTMuOTIyIDcuMDkzMTQgMTMuNzkwNkwyLjA5MzE0IDYuNzkwNjJDMS45ODQyNyA2LjYzODIxIDEuOTY5NzIgNi40Mzc3NCAyLjA1NTQyIDYuMjcxMjFDMi4xNDExMiA2LjEwNDY3IDIuMzEyNzEgNiAyLjUgNkg1VjMuNVpNNiA0VjYuNUM2IDYuNzc2MTQgNS43NzYxNCA3IDUuNSA3SDMuNDcxNkw3LjUgMTIuNjM5OEwxMS41Mjg0IDdIOS41QzkuMjIzODYgNyA5IDYuNzc2MTQgOSA2LjVWNEg2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sYW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgNy41QzEgNy42NjE0OCAxLjA3Nzk4IDcuODEzMDEgMS4yMDkzOCA3LjkwNjg3TDguMjA5MzggMTIuOTA2OUM4LjM2MTc5IDEzLjAxNTcgOC41NjIyNiAxMy4wMzAzIDguNzI4NzkgMTIuOTQ0NkM4Ljg5NTMzIDEyLjg1ODkgOSAxMi42ODczIDkgMTIuNUw5IDEwTDExLjUgMTBDMTEuNzc2MSAxMCAxMiA5Ljc3NjE0IDEyIDkuNUwxMiA1LjVDMTIgNS4yMjM4NiAxMS43NzYxIDUgMTEuNSA1TDkgNUw5IDIuNUM5IDIuMzEyNzEgOC44OTUzMyAyLjE0MTEyIDguNzI4NzkgMi4wNTU0MkM4LjU2MjI2IDEuOTY5NzIgOC4zNjE3OSAxLjk4NDI3IDguMjA5MzggMi4wOTMxM0wxLjIwOTM4IDcuMDkzMTRDMS4wNzc5OCA3LjE4Njk5IDEgNy4zMzg1MyAxIDcuNVpNOCAzLjQ3MTZMOCA1LjVDOCA1Ljc3NjE0IDguMjIzODYgNiA4LjUgNkwxMSA2TDExIDlMOC41IDlDOC4yMjM4NiA5IDggOS4yMjM4NiA4IDkuNUw4IDExLjUyODRMMi4zNjAyMyA3LjVMOCAzLjQ3MTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxpbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQgNy41QzE0IDcuNjYxNDggMTMuOTIyIDcuODEzMDEgMTMuNzkwNiA3LjkwNjg3TDYuNzkwNjIgMTIuOTA2OUM2LjYzODIxIDEzLjAxNTcgNi40Mzc3NCAxMy4wMzAzIDYuMjcxMjEgMTIuOTQ0NkM2LjEwNDY3IDEyLjg1ODkgNiAxMi42ODczIDYgMTIuNUw2IDEwTDMuNSAxMEMzLjIyMzg2IDEwIDMgOS43NzYxNCAzIDkuNUwzIDUuNUMzIDUuMjIzODYgMy4yMjM4NiA1IDMuNSA1TDYgNUw2IDIuNUM2IDIuMzEyNzEgNi4xMDQ2NyAyLjE0MTEyIDYuMjcxMjEgMi4wNTU0MkM2LjQzNzc0IDEuOTY5NzIgNi42MzgyMSAxLjk4NDI3IDYuNzkwNjIgMi4wOTMxM0wxMy43OTA2IDcuMDkzMTRDMTMuOTIyIDcuMTg2OTkgMTQgNy4zMzg1MyAxNCA3LjVaTTcgMy40NzE2TDcgNS41QzcgNS43NzYxNCA2Ljc3NjE0IDYgNi41IDZMNCA2TDQgOUw2LjUgOUM2Ljc3NjE0IDkgNyA5LjIyMzg2IDcgOS41TDcgMTEuNTI4NEwxMi42Mzk4IDcuNUw3IDMuNDcxNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGxvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMUM3LjY2MTQ4IDEgNy44MTMwMSAxLjA3Nzk4IDcuOTA2ODcgMS4yMDkzOEwxMi45MDY5IDguMjA5MzhDMTMuMDE1NyA4LjM2MTc5IDEzLjAzMDMgOC41NjIyNiAxMi45NDQ2IDguNzI4NzlDMTIuODU4OSA4Ljg5NTMzIDEyLjY4NzMgOSAxMi41IDlIMTBWMTEuNUMxMCAxMS43NzYxIDkuNzc2MTQgMTIgOS41IDEySDUuNUM1LjIyMzg2IDEyIDUgMTEuNzc2MSA1IDExLjVWOUgyLjVDMi4zMTI3MSA5IDIuMTQxMTIgOC44OTUzMyAyLjA1NTQyIDguNzI4NzlDMS45Njk3MiA4LjU2MjI2IDEuOTg0MjcgOC4zNjE3OSAyLjA5MzE0IDguMjA5MzhMNy4wOTMxNCAxLjIwOTM4QzcuMTg2OTkgMS4wNzc5OCA3LjMzODUzIDEgNy41IDFaTTMuNDcxNiA4SDUuNUM1Ljc3NjE0IDggNiA4LjIyMzg2IDYgOC41VjExSDlWOC41QzkgOC4yMjM4NiA5LjIyMzg2IDggOS41IDhIMTEuNTI4NEw3LjUgMi4zNjAyM0wzLjQ3MTYgOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHNvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTk4IDAuODQ5OTc2QzcuMjIzODMgMC44NDk5NzYgNi45OTk5OCAxLjA3MzgzIDYuOTk5OTggMS4zNDk5OFYzLjUyMjM0QzYuOTk5OTggMy43OTg0OCA3LjIyMzgzIDQuMDIyMzQgNy40OTk5OCA0LjAyMjM0QzcuNzc2MTIgNC4wMjIzNCA3Ljk5OTk4IDMuNzk4NDggNy45OTk5OCAzLjUyMjM0VjEuODcxOEMxMC44ODYyIDIuMTI0ODggMTMuMTUgNC41NDgwNiAxMy4xNSA3LjQ5OTk4QzEzLjE1IDEwLjYyMDQgMTAuNjIwNCAxMy4xNSA3LjQ5OTk4IDEzLjE1QzQuMzc5NTcgMTMuMTUgMS44NDk5OCAxMC42MjA0IDEuODQ5OTggNy40OTk5OEMxLjg0OTk4IDYuMTA2MTIgMi4zNTQwNyA0LjgzMTI4IDMuMTkwNDkgMy44NDU5QzMuMzY5MTkgMy42MzUzOCAzLjM0MzM5IDMuMzE5ODUgMy4xMzI4NiAzLjE0MTE1QzIuOTIyMzQgMi45NjI0NSAyLjYwNjgxIDIuOTg4MjUgMi40MjgxMSAzLjE5ODc3QzEuNDQ0MDUgNC4zNTgwOCAwLjg0OTk3NiA1Ljg2MDI5IDAuODQ5OTc2IDcuNDk5OThDMC44NDk5NzYgMTEuMTcyNyAzLjgyNzI4IDE0LjE1IDcuNDk5OTggMTQuMTVDMTEuMTcyNyAxNC4xNSAxNC4xNSAxMS4xNzI3IDE0LjE1IDcuNDk5OThDMTQuMTUgMy44MjcyOCAxMS4xNzI3IDAuODQ5OTc2IDcuNDk5OTggMC44NDk5NzZaTTYuNzQwNDkgOC4wODA3Mkw0LjIyMzYzIDQuNTcyMzdDNC4xNTIzMSA0LjQ3Mjk1IDQuMTYzNDYgNC4zMzY1MiA0LjI0OTk4IDQuMjVDNC4zMzY0OSA0LjE2MzQ4IDQuNDcyOTMgNC4xNTIzMyA0LjU3MjM0IDQuMjIzNjVMOC4wODA2OSA2Ljc0MDUxQzguNTYyMjcgNy4wODU5OSA4LjYxOTA2IDcuNzgwOTEgOC4xOTk5OCA4LjJDNy43ODA4OSA4LjYxOTA5IDcuMDg1OTcgOC41NjIyOSA2Ljc0MDQ5IDguMDgwNzJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxjbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41IDJDMy4xMTkyOSAyIDIgMy4xMTkyOSAyIDQuNUMyIDUuODgwNzIgMy4xMTkyOSA3IDQuNSA3QzUuODgwNzIgNyA3IDUuODgwNzIgNyA0LjVDNyAzLjExOTI5IDUuODgwNzIgMiA0LjUgMlpNMyA0LjVDMyAzLjY3MTU3IDMuNjcxNTcgMyA0LjUgM0M1LjMyODQzIDMgNiAzLjY3MTU3IDYgNC41QzYgNS4zMjg0MyA1LjMyODQzIDYgNC41IDZDMy42NzE1NyA2IDMgNS4zMjg0MyAzIDQuNVpNMTAuNSAyQzkuMTE5MjkgMiA4IDMuMTE5MjkgOCA0LjVDOCA1Ljg4MDcyIDkuMTE5MjkgNyAxMC41IDdDMTEuODgwNyA3IDEzIDUuODgwNzIgMTMgNC41QzEzIDMuMTE5MjkgMTEuODgwNyAyIDEwLjUgMlpNOSA0LjVDOSAzLjY3MTU3IDkuNjcxNTcgMyAxMC41IDNDMTEuMzI4NCAzIDEyIDMuNjcxNTcgMTIgNC41QzEyIDUuMzI4NDMgMTEuMzI4NCA2IDEwLjUgNkM5LjY3MTU3IDYgOSA1LjMyODQzIDkgNC41Wk0yIDEwLjVDMiA5LjExOTI5IDMuMTE5MjkgOCA0LjUgOEM1Ljg4MDcyIDggNyA5LjExOTI5IDcgMTAuNUM3IDExLjg4MDcgNS44ODA3MiAxMyA0LjUgMTNDMy4xMTkyOSAxMyAyIDExLjg4MDcgMiAxMC41Wk00LjUgOUMzLjY3MTU3IDkgMyA5LjY3MTU3IDMgMTAuNUMzIDExLjMyODQgMy42NzE1NyAxMiA0LjUgMTJDNS4zMjg0MyAxMiA2IDExLjMyODQgNiAxMC41QzYgOS42NzE1NyA1LjMyODQzIDkgNC41IDlaTTEwLjUgOEM5LjExOTI5IDggOCA5LjExOTI5IDggMTAuNUM4IDExLjg4MDcgOS4xMTkyOSAxMyAxMC41IDEzQzExLjg4MDcgMTMgMTMgMTEuODgwNyAxMyAxMC41QzEzIDkuMTE5MjkgMTEuODgwNyA4IDEwLjUgOFpNOSAxMC41QzkgOS42NzE1NyA5LjY3MTU3IDkgMTAuNSA5QzExLjMyODQgOSAxMiA5LjY3MTU3IDEyIDEwLjVDMTIgMTEuMzI4NCAxMS4zMjg0IDEyIDEwLjUgMTJDOS42NzE1NyAxMiA5IDExLjMyODQgOSAxMC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjA1MDIgMi43NDk4OUMxMy4wNTAyIDIuNDQ2MTMgMTIuODA0IDIuMTk5ODkgMTIuNTAwMiAyLjE5OTg5QzEyLjE5NjUgMi4xOTk4OSAxMS45NTAyIDIuNDQ2MTMgMTEuOTUwMiAyLjc0OTg5VjcuMjgyNUMxMS45MDQ2IDcuMTg4MDIgMTEuODI5NSA3LjEwODUxIDExLjczMzQgNy4wNTc3NkwyLjczMzM4IDIuMzA3NzZDMi41Nzg0IDIuMjI1OTYgMi4zOTE5IDIuMjMxMjcgMi4yNDE4MiAyLjMyMTc2QzIuMDkxNzUgMi40MTIyNSAyIDIuNTc0NzEgMiAyLjc0OTk1VjEyLjI1QzIgMTIuNDI1MiAyLjA5MTc1IDEyLjU4NzcgMi4yNDE4MiAxMi42NzgxQzIuMzkxOSAxMi43Njg2IDIuNTc4NCAxMi43NzM5IDIuNzMzMzggMTIuNjkyMUwxMS43MzM0IDcuOTQyMTRDMTEuODI5NSA3Ljg5MTM5IDExLjkwNDYgNy44MTE4OCAxMS45NTAyIDcuNzE3NFYxMi4yNDk5QzExLjk1MDIgMTIuNTUzNiAxMi4xOTY1IDEyLjc5OTkgMTIuNTAwMiAxMi43OTk5QzEyLjgwNCAxMi43OTk5IDEzLjA1MDIgMTIuNTUzNiAxMy4wNTAyIDEyLjI0OTlWMi43NDk4OVpNMyAxMS40MjA3VjMuNTc5MkwxMC40Mjg4IDcuNDk5OTVMMyAxMS40MjA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuOTQ5NzYgMi43NDk4OUMxLjk0OTc2IDIuNDQ2MTMgMi4xOTYgMi4xOTk4OSAyLjQ5OTc2IDIuMTk5ODlDMi44MDM1MSAyLjE5OTg5IDMuMDQ5NzYgMi40NDYxMyAzLjA0OTc2IDIuNzQ5ODlWNy4yODI1QzMuMDk1NCA3LjE4ODAyIDMuMTcwNDYgNy4xMDg1MSAzLjI2NjYyIDcuMDU3NzZMMTIuMjY2NiAyLjMwNzc2QzEyLjQyMTYgMi4yMjU5NiAxMi42MDgxIDIuMjMxMjcgMTIuNzU4MiAyLjMyMTc2QzEyLjkwODMgMi40MTIyNSAxMyAyLjU3NDcxIDEzIDIuNzQ5OTVWMTIuMjVDMTMgMTIuNDI1MiAxMi45MDgzIDEyLjU4NzcgMTIuNzU4MiAxMi42NzgxQzEyLjYwODEgMTIuNzY4NiAxMi40MjE2IDEyLjc3MzkgMTIuMjY2NiAxMi42OTIxTDMuMjY2NjIgNy45NDIxNEMzLjE3MDQ2IDcuODkxMzkgMy4wOTU0IDcuODExODggMy4wNDk3NiA3LjcxNzRWMTIuMjQ5OUMzLjA0OTc2IDEyLjU1MzYgMi44MDM1MSAxMi43OTk5IDIuNDk5NzYgMTIuNzk5OUMyLjE5NiAxMi43OTk5IDEuOTQ5NzYgMTIuNTUzNiAxLjk0OTc2IDEyLjI0OTlWMi43NDk4OVpNNC41NzEyMiA3LjQ5OTk1TDEyIDExLjQyMDdWMy41NzkyTDQuNTcxMjIgNy40OTk5NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGZvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yNVwiLGQ6XCJNMCAwSDNWM0gwVjBaTTYgM0gzVjZIMFY5SDNWMTJIMFYxNUgzVjEySDZWMTVIOVYxMkgxMlYxNUgxNVYxMkgxMlY5SDE1VjZIMTJWM0gxNVYwSDEyVjNIOVYwSDZWM1pNNiA2VjNIOVY2SDZaTTYgOUgzVjZINlY5Wk05IDlWNkgxMlY5SDlaTTkgOUg2VjEySDlWOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGhvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjUgMUM1LjIyMzg2IDEgNSAxLjIyMzg2IDUgMS41QzUgMS43NzYxNCA1LjIyMzg2IDIgNS41IDJIOS41QzkuNzc2MTQgMiAxMCAxLjc3NjE0IDEwIDEuNUMxMCAxLjIyMzg2IDkuNzc2MTQgMSA5LjUgMUg1LjVaTTMgMy41QzMgMy4yMjM4NiAzLjIyMzg2IDMgMy41IDNINUgxMEgxMS41QzExLjc3NjEgMyAxMiAzLjIyMzg2IDEyIDMuNUMxMiAzLjc3NjE0IDExLjc3NjEgNCAxMS41IDRIMTFWMTJDMTEgMTIuNTUyMyAxMC41NTIzIDEzIDEwIDEzSDVDNC40NDc3MiAxMyA0IDEyLjU1MjMgNCAxMlY0TDMuNSA0QzMuMjIzODYgNCAzIDMuNzc2MTQgMyAzLjVaTTUgNEgxMFYxMkg1VjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxnbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNCA2SDExTDcuNSAxMC41TDQgNlpcIixmaWxsOm59KSl9LHZvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05IDRMOSAxMUw0LjUgNy41TDkgNFpcIixmaWxsOm59KSl9LENvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02IDExTDYgNEwxMC41IDcuNUw2IDExWlwiLGZpbGw6bn0pKX0sbW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQgOUgxMUw3LjUgNC41TDQgOVpcIixmaWxsOm59KSl9LHdvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjIzMzM2IDQuNjk2MjlDNy4yMzMzNiAyLjk2ODg0IDguNjMzMzUgMS41Njg1NyAxMC4zNiAxLjU2ODU3QzExLjM3MzYgMS41Njg1NyAxMi4xODMgMi4wNDgwNCAxMi43MjU0IDIuNzQzODVDMTMuMzA3OSAyLjYyNDY3IDEzLjg1NTcgMi40MDkxMyAxNC4zNTEzIDIuMTE1MDhDMTQuMTU1OSAyLjcyNTk4IDEzLjc0MjQgMy4yMzk2IDEzLjIwMzMgMy41NjQ2M0MxMy4yMDM4IDMuNTY1NjggMTMuMjA0MiAzLjU2Njc0IDEzLjIwNDcgMy41Njc3OUMxMy43MzM0IDMuNTAzNjEgMTQuMjM2NCAzLjM2MzAyIDE0LjcwNDggMy4xNTU0NkwxNC43MDM3IDMuMTU3MTVDMTQuMzY2NyAzLjY2MTgzIDEzLjk0MzEgNC4xMDczNiAxMy40NTYxIDQuNDcwMzRDMTMuNDgyMyA0LjY0NjcyIDEzLjQ5NTYgNC44MjQyNyAxMy40OTU2IDUuMDAwNzlDMTMuNDk1NiA4LjY4NzEgMTAuNjg3MyAxMi45NzQ2IDUuNTIxMjIgMTIuOTc0NkMzLjkzOTA2IDEyLjk3NDYgMi40NjU0NCAxMi41MTEgMS4yMjUwNSAxMS43MTUyQzAuOTkyNjMyIDExLjU2NjEgMC45MjUxMDggMTEuMjU2OCAxLjA3NDIzIDExLjAyNDRDMS4wODc0IDExLjAwMzggMS4xMDE4MyAxMC45ODQ2IDEuMTE3MzQgMTAuOTY2NkMxLjIwNTgyIDEwLjgyMDIgMS4zNzQzOCAxMC43MzA5IDEuNTU1NCAxMC43NTIyQzIuNDcwNjYgMTAuODYwMSAzLjM4NTY4IDEwLjc0ODUgNC4xOTIxOSAxMC4zOTYyQzMuMzkyMjYgMTAuMDQzNCAyLjc3MTI5IDkuMzU5NzUgMi41MDIwNCA4LjUxOTc0QzIuNDUzNTkgOC4zNjg2IDIuNDg4MzUgOC4yMDMxMSAyLjU5MzUxIDguMDg0MjJDMi41OTcxNiA4LjA4MDEgMi42MDA4NyA4LjA3NjA2IDIuNjA0NjQgOC4wNzIxQzEuOTYzOTEgNy41MDgxOSAxLjU1OTczIDYuNjgyMDggMS41NTk3MyA1Ljc2MTQzVjUuNzI3NTlDMS41NTk3MyA1LjU2ODE0IDEuNjQ0MTEgNS40MjA1OSAxLjc4MTU1IDUuMzM5NzRDMS44MjY3MSA1LjMxMzE3IDEuODc1MzcgNS4yOTUxMSAxLjkyNTMyIDUuMjg1NThDMS43MDU0OSA0Ljg2MTU0IDEuNTgxMTYgNC4zNzk4NCAxLjU4MTE2IDMuODY5NThDMS41ODExNiAzLjQwMTY1IDEuNTgzODQgMi44MTE5MiAxLjkxMzMyIDIuMjgwODFDMS45ODcxOCAyLjE2MTc1IDIuMTA3NTggMi4wODkxNSAyLjIzNjQgMi4wNzE5NUMyLjQyNTg4IDIuMDEyMzcgMi42NDA4NyAyLjA2OTY5IDIuNzc0MDYgMi4yMzMwMkMzLjg2NTM2IDMuNTcxMjYgNS40NDA2NiA0LjQ5NTgzIDcuMjMzNjYgNC43Mzk2MUw3LjIzMzM2IDQuNjk2MjlaTTUuNTIxMjIgMTEuOTc0NkM0LjczMzg3IDExLjk3NDYgMy45Nzc4MSAxMS44NDM1IDMuMjcyNDggMTEuNjAyM0M0LjEzMDEyIDExLjQ1MzggNC45NTMwNyAxMS4xMTU5IDUuNjYyMTggMTAuNTYwMkM1LjgxMjExIDEwLjQ0MjcgNS44NzE4MiAxMC4yNDM1IDUuODExMjYgMTAuMDYyOUM1Ljc1MDcgOS44ODIzNCA1LjU4MyA5Ljc1OTQzIDUuMzkyNTUgOS43NTYwN0M0LjY4OTY4IDkuNzQzNjYgNC4wNjcxMiA5LjM5NzE2IDMuNjc3OTMgOC44Njg0NUMzLjg2ODI4IDguODUzMDYgNC4wNTQyOCA4LjgyMDM5IDQuMjM0NDUgOC43NzE2N0M0LjQzNjAzIDguNzE3MTYgNC41NzM2MyA4LjUzMTE0IDQuNTY2NzQgOC4zMjI0M0M0LjU1OTg1IDguMTEzNzIgNC40MTAyOSA3LjkzNzE4IDQuMjA1NTUgNy44OTYwN0MzLjQyNjk0IDcuNzM5NzcgMi43OTg4MyA3LjE2NzY0IDIuNTYxNjkgNi40MjE3NEMyLjc2MjU1IDYuNDcwMjUgMi45NzEwMiA2LjQ5OTEgMy4xODQ4MiA2LjUwNjFDMy4zODU2MyA2LjUxMjY3IDMuNTY2NDYgNi4zODUzMyAzLjYyNzk1IDYuMTk0MDVDMy42ODk0MyA2LjAwMjc3IDMuNjE2NjYgNS43OTM5MSAzLjQ0OTYzIDUuNjgyMjRDMi44NjUyMyA1LjI5MTU1IDIuNDgxMTYgNC42MjQ2NCAyLjQ4MTE2IDMuODY5NThDMi40ODExNiAzLjcwMjEzIDIuNDgzNTIgMy41NTI2OCAyLjQ5MzU1IDMuNDE3MTlDMy44NTExNSA0Ljc5OTEzIDUuNzA4NzMgNS42ODkzMSA3Ljc3NTg4IDUuNzkzMzhDNy45MzIyNSA1LjgwMTI2IDguMDgzMjggNS43MzU0MyA4LjE4Mzk1IDUuNjE1NTNDOC4yODQ2MyA1LjQ5NTYyIDguMzIzMzIgNS4zMzU0OCA4LjI4ODUxIDUuMTgyODRDOC4yNTI1NSA1LjAyNTE3IDguMjMzMzYgNC44NjI4NCA4LjIzMzM2IDQuNjk2MjlDOC4yMzMzNiAzLjUyMDg1IDkuMTg1OTEgMi41Njg1NyAxMC4zNiAyLjU2ODU3QzExLjU5NDMgMi41Njg1NyAxMi40OTU2IDMuNzEyMDggMTIuNDk1NiA1LjAwMDc5QzEyLjQ5NTYgOC4yNTcwOSAxMC4wMjAyIDExLjk3NDYgNS41MjEyMiAxMS45NzQ2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sYm89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuMDAwMDEgMi43NUM1LjAwMDAxIDIuNDczODYgNC43NzYxNSAyLjI1IDQuNTAwMDEgMi4yNUM0LjIyMzg3IDIuMjUgNC4wMDAwMSAyLjQ3Mzg2IDQuMDAwMDEgMi43NVY4LjA1QzQuMDAwMDEgOS45ODMgNS41NjcwMiAxMS41NSA3LjUwMDAxIDExLjU1QzkuNDMzMDEgMTEuNTUgMTEgOS45ODMgMTEgOC4wNVYyLjc1QzExIDIuNDczODYgMTAuNzc2MiAyLjI1IDEwLjUgMi4yNUMxMC4yMjM5IDIuMjUgMTAgMi40NzM4NiAxMCAyLjc1VjguMDVDMTAgOS40MzA3MSA4Ljg4MDcyIDEwLjU1IDcuNTAwMDEgMTAuNTVDNi4xMTkzIDEwLjU1IDUuMDAwMDEgOS40MzA3MSA1LjAwMDAxIDguMDVWMi43NVpNMy40OTk5OCAxMy4xMDAxQzMuMjc5MDYgMTMuMTAwMSAzLjA5OTk4IDEzLjI3OTEgMy4wOTk5OCAxMy41MDAxQzMuMDk5OTggMTMuNzIxIDMuMjc5MDYgMTMuOTAwMSAzLjQ5OTk4IDEzLjkwMDFIMTEuNUMxMS43MjA5IDEzLjkwMDEgMTEuOSAxMy43MjEgMTEuOSAxMy41MDAxQzExLjkgMTMuMjc5MSAxMS43MjA5IDEzLjEwMDEgMTEuNSAxMy4xMDAxSDMuNDk5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5bz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS45MDMyMSA3LjI5Njc3QzEuOTAzMjEgMTAuMzQxIDQuMTEwNDEgMTIuNDE0NyA2LjU4ODkzIDEyLjg0MzlDNi44NzI1NSAxMi44OTMgNy4wNjI2NiAxMy4xNjI3IDcuMDEzNTUgMTMuNDQ2NEM2Ljk2NDQ0IDEzLjczIDYuNjk0NzEgMTMuOTIwMSA2LjQxMTA5IDEzLjg3MUMzLjQ5OTQyIDEzLjM2NjggMC44NjA4NCAxMC45MTI3IDAuODYwODQgNy4yOTY3N0MwLjg2MDgzOSA1Ljc2MDA5IDEuNTU5OTYgNC41NTI0NSAyLjM3NjM5IDMuNjMzNzdDMi45NjEyNCAyLjk3NTY4IDMuNjMwMzQgMi40NDEzNSA0LjE2ODQ2IDIuMDMyMDJMMi41MzIwNSAyLjAzMjAyQzIuMjU1OTEgMi4wMzIwMiAyLjAzMjA1IDEuODA4MTYgMi4wMzIwNSAxLjUzMjAyQzIuMDMyMDUgMS4yNTU4OCAyLjI1NTkxIDEuMDMyMDIgMi41MzIwNSAxLjAzMjAyTDUuNTMyMDUgMS4wMzIwMkM1LjgwODE5IDEuMDMyMDIgNi4wMzIwNSAxLjI1NTg4IDYuMDMyMDUgMS41MzIwMkw2LjAzMjA1IDQuNTMyMDJDNi4wMzIwNSA0LjgwODE2IDUuODA4MTkgNS4wMzIwMiA1LjUzMjA1IDUuMDMyMDJDNS4yNTU5MSA1LjAzMjAyIDUuMDMyMDUgNC44MDgxNiA1LjAzMjA1IDQuNTMyMDJMNS4wMzIwNSAyLjY4NjQ1TDUuMDMwNTQgMi42ODc1OUw1LjAzMDQ1IDIuNjg3NjZMNS4wMzA0NCAyLjY4NzY3TDUuMDMwNDMgMi42ODc2N0M0LjQ1ODk2IDMuMTE4NjggMy43NjA1OSAzLjY0NTM4IDMuMTU1NTQgNC4zMjYyQzIuNDQxMDIgNS4xMzAyMSAxLjkwMzIxIDYuMTAxNTQgMS45MDMyMSA3LjI5Njc3Wk0xMy4wMTA5IDcuNzAzMjFDMTMuMDEwOSA0LjY5MTE1IDEwLjg1MDUgMi42Mjk2IDguNDAzODQgMi4xNzAyOUM4LjEyMDkzIDIuMTE3MTggNy45MzQ2NSAxLjg0NDc5IDcuOTg3NzYgMS41NjE4OEM4LjA0MDg3IDEuMjc4OTggOC4zMTMyNiAxLjA5MjcgOC41OTYxNiAxLjE0NTgxQzExLjQ3MDQgMS42ODU0MSAxNC4wNTMyIDQuMTI2MDUgMTQuMDUzMiA3LjcwMzIxQzE0LjA1MzIgOS4yMzk4OCAxMy4zNTQxIDEwLjQ0NzUgMTIuNTM3NyAxMS4zNjYyQzExLjk1MjggMTIuMDI0MyAxMS4yODM3IDEyLjU1ODYgMTAuNzQ1NiAxMi45NjhMMTIuMzgyMSAxMi45NjhDMTIuNjU4MiAxMi45NjggMTIuODgyMSAxMy4xOTE4IDEyLjg4MjEgMTMuNDY4QzEyLjg4MjEgMTMuNzQ0MSAxMi42NTgyIDEzLjk2OCAxMi4zODIxIDEzLjk2OEw5LjM4MjA1IDEzLjk2OEM5LjEwNTkxIDEzLjk2OCA4Ljg4MjA1IDEzLjc0NDEgOC44ODIwNSAxMy40NjhMOC44ODIwNSAxMC40NjhDOC44ODIwNSAxMC4xOTE4IDkuMTA1OTEgOS45Njc5NiA5LjM4MjA1IDkuOTY3OTZDOS42NTgxOSA5Ljk2Nzk2IDkuODgyMDUgMTAuMTkxOCA5Ljg4MjA1IDEwLjQ2OEw5Ljg4MjA1IDEyLjMxMzVMOS44ODM2MiAxMi4zMTIzQzEwLjQ1NTEgMTEuODgxMyAxMS4xNTM1IDExLjM1NDYgMTEuNzU4NSAxMC42NzM4QzEyLjQ3MzEgOS44Njk3NiAxMy4wMTA5IDguODk4NDQgMTMuMDEwOSA3LjcwMzIxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuODE4MjUgMS4xODE4OEM3LjY0MjUxIDEuMDA2MTUgNy4zNTc1OSAxLjAwNjE1IDcuMTgxODUgMS4xODE4OEw0LjE4MTg1IDQuMTgxODhDNC4wMDYxMSA0LjM1NzYyIDQuMDA2MTEgNC42NDI1NCA0LjE4MTg1IDQuODE4MjhDNC4zNTc1OSA0Ljk5NDAxIDQuNjQyNTEgNC45OTQwMSA0LjgxODI1IDQuODE4MjhMNy4wNTAwNSAyLjU4NjQ4VjkuNDk5OTZDNy4wNTAwNSA5Ljc0ODQ5IDcuMjUxNTIgOS45NDk5NiA3LjUwMDA1IDkuOTQ5OTZDNy43NDg1OCA5Ljk0OTk2IDcuOTUwMDUgOS43NDg0OSA3Ljk1MDA1IDkuNDk5OTZWMi41ODY0OEwxMC4xODE5IDQuODE4MjhDMTAuMzU3NiA0Ljk5NDAxIDEwLjY0MjUgNC45OTQwMSAxMC44MTgyIDQuODE4MjhDMTAuOTk0IDQuNjQyNTQgMTAuOTk0IDQuMzU3NjIgMTAuODE4MiA0LjE4MTg4TDcuODE4MjUgMS4xODE4OFpNMi41IDkuOTk5OTdDMi43NzYxNCA5Ljk5OTk3IDMgMTAuMjIzOCAzIDEwLjVWMTJDMyAxMi41NTM4IDMuNDQ1NjUgMTMgMy45OTYzNSAxM0gxMS4wMDEyQzExLjU1MjkgMTMgMTIgMTIuNTUyOCAxMiAxMlYxMC41QzEyIDEwLjIyMzggMTIuMjIzOSA5Ljk5OTk3IDEyLjUgOS45OTk5N0MxMi43NzYxIDkuOTk5OTcgMTMgMTAuMjIzOCAxMyAxMC41VjEyQzEzIDEzLjEwNCAxMi4xMDYyIDE0IDExLjAwMTIgMTRIMy45OTYzNUMyLjg5MDE5IDE0IDIgMTMuMTAzIDIgMTJWMTAuNUMyIDEwLjIyMzggMi4yMjM4NiA5Ljk5OTk3IDIuNSA5Ljk5OTk3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sa289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNDk5ODhDMC44NzcwNzUgMy44NDIxOSAzLjg0MjIyIDAuODc3MDQ1IDcuNDk5OTEgMC44NzcwNDVDMTEuMTU3NiAwLjg3NzA0NSAxNC4xMjI3IDMuODQyMTkgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMTEuMTU3NSAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzMuODQyMjIgMTQuMTIyNyAwLjg3NzA3NSAxMS4xNTc1IDAuODc3MDc1IDcuNDk5ODhaTTcuNDk5OTEgMS44MjcwNEM0LjM2Njg5IDEuODI3MDQgMS44MjcwOCA0LjM2Njg2IDEuODI3MDggNy40OTk4OEMxLjgyNzA4IDEwLjYzMjkgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0MxMC42MzI5IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDQuMzY2ODYgMTAuNjMyOSAxLjgyNzA0IDcuNDk5OTEgMS44MjcwNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFNvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTg1IDAuODc3MDQ1QzMuODQyMTYgMC44NzcwNDUgMC44NzcwMTQgMy44NDIxOSAwLjg3NzAxNCA3LjQ5OTg4QzAuODc3MDE0IDkuMTQ4OCAxLjQ3OTYzIDEwLjY1NyAyLjQ3NjY1IDExLjgxNjJMMS42NDY0MyAxMi42NDY0QzEuNDUxMTcgMTIuODQxNyAxLjQ1MTE3IDEzLjE1ODMgMS42NDY0MyAxMy4zNTM1QzEuODQxNyAxMy41NDg4IDIuMTU4MjggMTMuNTQ4OCAyLjM1MzU0IDEzLjM1MzVMMy4xODM3NyAxMi41MjMzQzQuMzQyOTYgMTMuNTIwMiA1Ljg1MTA0IDE0LjEyMjcgNy40OTk4NSAxNC4xMjI3QzExLjE1NzUgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgNS44NTEwNyAxMy41MjAyIDQuMzQyOTkgMTIuNTIzMyAzLjE4MzhMMTMuMzUzNSAyLjM1MzU0QzEzLjU0ODggMi4xNTgyNyAxMy41NDg4IDEuODQxNjkgMTMuMzUzNSAxLjY0NjQzQzEzLjE1ODMgMS40NTExNyAxMi44NDE3IDEuNDUxMTcgMTIuNjQ2NCAxLjY0NjQzTDExLjgxNjIgMi40NzY2OEMxMC42NTcgMS40Nzk2NiA5LjE0ODc3IDAuODc3MDQ1IDcuNDk5ODUgMC44NzcwNDVaTTExLjE0MjIgMy4xNTA2NkMxMC4xNTY3IDIuMzI0NDkgOC44ODYzOSAxLjgyNzA0IDcuNDk5ODUgMS44MjcwNEM0LjM2NjgzIDEuODI3MDQgMS44MjcwMSA0LjM2Njg2IDEuODI3MDEgNy40OTk4OEMxLjgyNzAxIDguODg2NDIgMi4zMjQ0NiAxMC4xNTY4IDMuMTUwNjMgMTEuMTQyMkwxMS4xNDIyIDMuMTUwNjZaTTMuODU3NzYgMTEuODQ5M0M0Ljg0MzE3IDEyLjY3NTMgNi4xMTM0MyAxMy4xNzI3IDcuNDk5ODUgMTMuMTcyN0MxMC42MzI4IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDYuMTEzNDYgMTIuNjc1MyA0Ljg0MzIgMTEuODQ5MyAzLjg1Nzc5TDMuODU3NzYgMTEuODQ5M1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE9vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTk4IDFMNi45MjMyMSAyLjAwMzA3TDEuMTc0OTggMTJMMC41OTk5NzYgMTNIMS43NTM1SDEzLjI0NjRIMTQuNEwxMy44MjUgMTJMOC4wNzY3NCAyLjAwMzA3TDcuNDk5OTggMVpNNy40OTk5OCAzLjAwNjEzTDIuMzI4NSAxMkgxMi42NzE0TDcuNDk5OTggMy4wMDYxM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE1vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00Ljc2NDQ3IDMuMTIxOTlDNS42MzE1MSAzLjA0ODU5IDYuNTYwODIgMyA3LjUgM0M4LjQzOTE4IDMgOS4zNjg0OSAzLjA0ODU5IDEwLjIzNTUgMy4xMjE5OUMxMS4yNzk2IDMuMjEwMzcgMTEuOTU1MyAzLjI3MDA4IDEyLjQ3MiAzLjM5MjAzQzEyLjk0MjUgMy41MDMwNCAxMy4yMDQ4IDMuNjQ5NzYgMTMuNDMwNiAzLjg4MDg2QzEzLjQ1NTMgMy45MDYxOCAxMy40OTAyIDMuOTQ0MTQgMTMuNTEzMyAzLjk3MDkyQzEzLjcxMjYgNC4yMDE0OSAxMy44NDM1IDQuNDg4NyAxMy45MTggNS4wMzI4M0MxMy45OTc4IDUuNjE1NiAxNCA2LjM3NjQ0IDE0IDcuNTI0OTNDMTQgOC42NjAyNiAxMy45OTc4IDkuNDEwMTkgMTMuOTE4MSA5Ljk4NTM4QzEzLjg0MzkgMTAuNTIwNiAxMy43MTM3IDEwLjgwNjEgMTMuNTEyNSAxMS4wMzg3QzEzLjQ4OTYgMTEuMDY1MSAxMy40NTQxIDExLjEwMzggMTMuNDI5NiAxMS4xMjg3QzEzLjIwMDkgMTEuMzYyNSAxMi45NDA2IDExLjUwNzYgMTIuNDgxOCAxMS42MTY0QzExLjk3NTIgMTEuNzM2NSAxMS4zMTQzIDExLjc5NDIgMTAuMjg3OCAxMS44Nzk3QzkuNDE5NDggMTEuOTUyMSA4LjQ3NTY2IDEyIDcuNSAxMkM2LjUyNDM0IDEyIDUuNTgwNTIgMTEuOTUyMSA0LjcxMjIgMTEuODc5N0MzLjY4NTcyIDExLjc5NDIgMy4wMjQ3NyAxMS43MzY1IDIuNTE4MTYgMTEuNjE2NEMyLjA1OTM2IDExLjUwNzYgMS43OTkxIDExLjM2MjUgMS41NzAzNyAxMS4xMjg3QzEuNTQ1OTMgMTEuMTAzOCAxLjUxMDM1IDExLjA2NTEgMS40ODc0OCAxMS4wMzg3QzEuMjg2MjggMTAuODA2MSAxLjE1NjEyIDEwLjUyMDYgMS4wODE5MyA5Ljk4NTM4QzEuMDAyMjEgOS40MTAxOSAxIDguNjYwMjYgMSA3LjUyNDkzQzEgNi4zNzY0NCAxLjAwMjE2IDUuNjE1NiAxLjA4MiA1LjAzMjgzQzEuMTU2NTQgNC40ODg3IDEuMjg3NDQgNC4yMDE0OSAxLjQ4NjY2IDMuOTcwOTJDMS41MDk4IDMuOTQ0MTQgMS41NDQ2OCAzLjkwNjE4IDEuNTY5NDIgMy44ODA4NkMxLjc5NTIgMy42NDk3NiAyLjA1NzUyIDMuNTAzMDQgMi41Mjc5NiAzLjM5MjAzQzMuMDQ0NzMgMy4yNzAwOCAzLjcyMDQgMy4yMTAzNyA0Ljc2NDQ3IDMuMTIxOTlaTTAgNy41MjQ5M0MwIDUuMjgyOTYgMCA0LjE2MTk4IDAuNzI5OTg1IDMuMzE3MTNDMC43NjY0NTcgMy4yNzQ5MSAwLjgxNTEzOSAzLjIyMTk0IDAuODU0MTIzIDMuMTgyMDRDMS42MzQzOSAyLjM4MzM5IDIuNjQ5NjMgMi4yOTc0NCA0LjY4MDEyIDIuMTI1NTVDNS41NjkyMyAyLjA1MDI4IDYuNTI3MjQgMiA3LjUgMkM4LjQ3Mjc2IDIgOS40MzA3NyAyLjA1MDI4IDEwLjMxOTkgMi4xMjU1NUMxMi4zNTA0IDIuMjk3NDQgMTMuMzY1NiAyLjM4MzM5IDE0LjE0NTkgMy4xODIwNEMxNC4xODQ5IDMuMjIxOTQgMTQuMjMzNSAzLjI3NDkxIDE0LjI3IDMuMzE3MTNDMTUgNC4xNjE5OCAxNSA1LjI4Mjk2IDE1IDcuNTI0OTNDMTUgOS43NDAxMiAxNSAxMC44NDc3IDE0LjI2ODggMTEuNjkyOUMxNC4yMzI2IDExLjczNDggMTQuMTgzMiAxMS43ODg1IDE0LjE0NDQgMTEuODI4MUMxMy4zNjI5IDEyLjYyNjkgMTIuMzY1NSAxMi43MSAxMC4zNzA5IDEyLjg3NjNDOS40Nzk3MSAxMi45NTA1IDguNTA3ODIgMTMgNy41IDEzQzYuNDkyMTggMTMgNS41MjAyOCAxMi45NTA1IDQuNjI5MTUgMTIuODc2M0MyLjYzNDQ2IDEyLjcxIDEuNjM3MTIgMTIuNjI2OSAwLjg1NTU1OCAxMS44MjgxQzAuODE2ODQ0IDExLjc4ODUgMC43Njc0NDIgMTEuNzM0OCAwLjczMTIyMSAxMS42OTI5QzAgMTAuODQ3NyAwIDkuNzQwMTIgMCA3LjUyNDkzWk01LjI1IDUuMzgyNjRDNS4yNSA1LjIwMjI1IDUuNDM1MjIgNS4wODEyNCA1LjYwMDQxIDUuMTUzNjlMMTAuNDI4IDcuMjcxMDVDMTAuNjI3NCA3LjM1ODUzIDEwLjYyNzQgNy42NDE0NyAxMC40MjggNy43Mjg5NUw1LjYwMDQxIDkuODQ2MzFDNS40MzUyMiA5LjkxODc2IDUuMjUgOS43OTc3NSA1LjI1IDkuNjE3MzZWNS4zODI2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LExvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03IDJIMS41QzEuMjIzODYgMiAxIDIuMjIzODYgMSAyLjVWN0g3VjJaTTggMlY3SDE0VjIuNUMxNCAyLjIyMzg2IDEzLjc3NjEgMiAxMy41IDJIOFpNNyA4SDFWMTIuNUMxIDEyLjc3NjEgMS4yMjM4NiAxMyAxLjUgMTNIN1Y4Wk04IDEzVjhIMTRWMTIuNUMxNCAxMi43NzYxIDEzLjc3NjEgMTMgMTMuNSAxM0g4Wk0xLjUgMUMwLjY3MTU3MyAxIDAgMS42NzE1NyAwIDIuNVYxMi41QzAgMTMuMzI4NCAwLjY3MTU3MyAxNCAxLjUgMTRIMTMuNUMxNC4zMjg0IDE0IDE1IDEzLjMyODQgMTUgMTIuNVYyLjVDMTUgMS42NzE1NyAxNC4zMjg0IDEgMTMuNSAxSDEuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF9vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjUgMkgxMy41QzEzLjc3NjEgMiAxNCAyLjIyMzg2IDE0IDIuNVY3SDFWMi41QzEgMi4yMjM4NiAxLjIyMzg2IDIgMS41IDJaTTEgOFYxMi41QzEgMTIuNzc2MSAxLjIyMzg2IDEzIDEuNSAxM0gxMy41QzEzLjc3NjEgMTMgMTQgMTIuNzc2MSAxNCAxMi41VjhIMVpNMCAyLjVDMCAxLjY3MTU3IDAuNjcxNTczIDEgMS41IDFIMTMuNUMxNC4zMjg0IDEgMTUgMS42NzE1NyAxNSAyLjVWMTIuNUMxNSAxMy4zMjg0IDE0LjMyODQgMTQgMTMuNSAxNEgxLjVDMC42NzE1NzMgMTQgMCAxMy4zMjg0IDAgMTIuNVYyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQgMi41ODcxMUwxLjg1MTYzIDEzSDEzLjVDMTMuNzc2MSAxMyAxNCAxMi43NzYxIDE0IDEyLjVWMi41ODcxMVpNMC43NjI4NzkgMTMuODA2N0wwLjgyNTM5NiAxMy44Nzk2TDAuODU0NzE3IDEzLjg1NDVDMS4wNTAxNyAxMy45NDc4IDEuMjY4OTkgMTQgMS41IDE0SDEzLjVDMTQuMzI4NCAxNCAxNSAxMy4zMjg0IDE1IDEyLjVWMi41QzE1IDEuOTM5NDkgMTQuNjkyNiAxLjQ1MDc4IDE0LjIzNzEgMS4xOTMzMUwxNC4xNzQ2IDEuMTIwMzdMMTQuMTQ1MyAxLjE0NTVDMTMuOTQ5OCAxLjA1MjIyIDEzLjczMSAxIDEzLjUgMUgxLjVDMC42NzE1NzMgMSAwIDEuNjcxNTcgMCAyLjVWMTIuNUMwIDEzLjA2MDUgMC4zMDc0MzUgMTMuNTQ5MiAwLjc2Mjg3OSAxMy44MDY3Wk0xIDEyLjQxMjlMMTMuMTQ4NCAySDEuNUMxLjIyMzg2IDIgMSAyLjIyMzg2IDEgMi41VjEyLjQxMjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxFbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOCAySDEzLjVDMTMuNzc2MSAyIDE0IDIuMjIzODYgMTQgMi41VjEyLjVDMTQgMTIuNzc2MSAxMy43NzYxIDEzIDEzLjUgMTNIOFYyWk03IDJIMS41QzEuMjIzODYgMiAxIDIuMjIzODYgMSAyLjVWMTIuNUMxIDEyLjc3NjEgMS4yMjM4NiAxMyAxLjUgMTNIN1YyWk0wIDIuNUMwIDEuNjcxNTcgMC42NzE1NzMgMSAxLjUgMUgxMy41QzE0LjMyODQgMSAxNSAxLjY3MTU3IDE1IDIuNVYxMi41QzE1IDEzLjMyODQgMTQuMzI4NCAxNCAxMy41IDE0SDEuNUMwLjY3MTU3MyAxNCAwIDEzLjMyODQgMCAxMi41VjIuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGpvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjgxODEyIDQuNjgxNjFDNC45OTM4NiA0Ljg1NzM0IDQuOTkzODYgNS4xNDIyNyA0LjgxODEyIDUuMzE4TDMuMDg2MzIgNy4wNDk4SDExLjkxMzVMMTAuMTgxNyA1LjMxOEMxMC4wMDYgNS4xNDIyNyAxMC4wMDYgNC44NTczNCAxMC4xODE3IDQuNjgxNjFDMTAuMzU3NSA0LjUwNTg3IDEwLjY0MjQgNC41MDU4NyAxMC44MTgxIDQuNjgxNjFMMTMuMzE4MSA3LjE4MTYxQzEzLjQ5MzkgNy4zNTczNCAxMy40OTM5IDcuNjQyMjcgMTMuMzE4MSA3LjgxOEwxMC44MTgxIDEwLjMxOEMxMC42NDI0IDEwLjQ5MzcgMTAuMzU3NSAxMC40OTM3IDEwLjE4MTcgMTAuMzE4QzEwLjAwNiAxMC4xNDIzIDEwLjAwNiA5Ljg1NzM0IDEwLjE4MTcgOS42ODE2MUwxMS45MTM1IDcuOTQ5OEgzLjA4NjMyTDQuODE4MTIgOS42ODE2MUM0Ljk5Mzg2IDkuODU3MzQgNC45OTM4NiAxMC4xNDIzIDQuODE4MTIgMTAuMzE4QzQuNjQyMzkgMTAuNDkzNyA0LjM1NzQ2IDEwLjQ5MzcgNC4xODE3MyAxMC4zMThMMS42ODE3MyA3LjgxOEMxLjUwNTk5IDcuNjQyMjcgMS41MDU5OSA3LjM1NzM0IDEuNjgxNzMgNy4xODE2MUw0LjE4MTczIDQuNjgxNjFDNC4zNTc0NiA0LjUwNTg3IDQuNjQyMzkgNC41MDU4NyA0LjgxODEyIDQuNjgxNjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxSbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAgNi41QzEwIDguNDMzIDguNDMzIDEwIDYuNSAxMEM0LjU2NyAxMCAzIDguNDMzIDMgNi41QzMgNC41NjcgNC41NjcgMyA2LjUgM0M4LjQzMyAzIDEwIDQuNTY3IDEwIDYuNVpNOS4zMDg4NCAxMC4wMTU5QzguNTM5MDEgMTAuNjMxOCA3LjU2MjUxIDExIDYuNSAxMUM0LjAxNDcyIDExIDIgOC45ODUyOCAyIDYuNUMyIDQuMDE0NzIgNC4wMTQ3MiAyIDYuNSAyQzguOTg1MjggMiAxMSA0LjAxNDcyIDExIDYuNUMxMSA3LjU2MjUxIDEwLjYzMTggOC41MzkwMSAxMC4wMTU5IDkuMzA4ODRMMTIuODUzNiAxMi4xNDY0QzEzLjA0ODggMTIuMzQxNyAxMy4wNDg4IDEyLjY1ODMgMTIuODUzNiAxMi44NTM2QzEyLjY1ODMgMTMuMDQ4OCAxMi4zNDE3IDEzLjA0ODggMTIuMTQ2NCAxMi44NTM2TDkuMzA4ODQgMTAuMDE1OVpNNC4yNSA2LjVDNC4yNSA2LjIyMzg2IDQuNDczODYgNiA0Ljc1IDZINlY0Ljc1QzYgNC40NzM4NiA2LjIyMzg2IDQuMjUgNi41IDQuMjVDNi43NzYxNCA0LjI1IDcgNC40NzM4NiA3IDQuNzVWNkg4LjI1QzguNTI2MTQgNiA4Ljc1IDYuMjIzODYgOC43NSA2LjVDOC43NSA2Ljc3NjE0IDguNTI2MTQgNyA4LjI1IDdIN1Y4LjI1QzcgOC41MjYxNCA2Ljc3NjE0IDguNzUgNi41IDguNzVDNi4yMjM4NiA4Ljc1IDYgOC41MjYxNCA2IDguMjVWN0g0Ljc1QzQuNDczODYgNyA0LjI1IDYuNzc2MTQgNC4yNSA2LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxJbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi41IDEwQzguNDMzIDEwIDEwIDguNDMzIDEwIDYuNUMxMCA0LjU2NyA4LjQzMyAzIDYuNSAzQzQuNTY3IDMgMyA0LjU2NyAzIDYuNUMzIDguNDMzIDQuNTY3IDEwIDYuNSAxMFpNNi41IDExQzcuNTYyNTEgMTEgOC41MzkwMSAxMC42MzE4IDkuMzA4ODQgMTAuMDE1OUwxMi4xNDY0IDEyLjg1MzZDMTIuMzQxNyAxMy4wNDg4IDEyLjY1ODMgMTMuMDQ4OCAxMi44NTM2IDEyLjg1MzZDMTMuMDQ4OCAxMi42NTgzIDEzLjA0ODggMTIuMzQxNyAxMi44NTM2IDEyLjE0NjRMMTAuMDE1OSA5LjMwODg0QzEwLjYzMTggOC41MzkwMSAxMSA3LjU2MjUxIDExIDYuNUMxMSA0LjAxNDcyIDguOTg1MjggMiA2LjUgMkM0LjAxNDcyIDIgMiA0LjAxNDcyIDIgNi41QzIgOC45ODUyOCA0LjAxNDcyIDExIDYuNSAxMVpNNC43NSA2QzQuNDczODYgNiA0LjI1IDYuMjIzODYgNC4yNSA2LjVDNC4yNSA2Ljc3NjE0IDQuNDczODYgNyA0Ljc1IDdIOC4yNUM4LjUyNjE0IDcgOC43NSA2Ljc3NjE0IDguNzUgNi41QzguNzUgNi4yMjM4NiA4LjUyNjE0IDYgOC4yNSA2SDQuNzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfX0sNTI5OTooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtkZWZhdWx0OigpPT5sfSk7dmFyIHI9big4MDgxKSxvPW4ubihyKSxhPW4oMzY0NSksaT1uLm4oYSkoKShvKCkpO2kucHVzaChbZS5pZCxcIi5yZWFjdC1jYWxlbmRhciB7XFxuICB3aWR0aDogMzUwcHg7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNhMGEwOTY7XFxuICBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcXG4gIGxpbmUtaGVpZ2h0OiAxLjEyNWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXItLWRvdWJsZVZpZXcge1xcbiAgd2lkdGg6IDcwMHB4O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXItLWRvdWJsZVZpZXcgLnJlYWN0LWNhbGVuZGFyX192aWV3Q29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBtYXJnaW46IC0wLjVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyLS1kb3VibGVWaWV3IC5yZWFjdC1jYWxlbmRhcl9fdmlld0NvbnRhaW5lciA+ICoge1xcbiAgd2lkdGg6IDUwJTtcXG4gIG1hcmdpbjogMC41ZW07XFxufVxcbi5yZWFjdC1jYWxlbmRhcixcXG4ucmVhY3QtY2FsZW5kYXIgKixcXG4ucmVhY3QtY2FsZW5kYXIgKjpiZWZvcmUsXFxuLnJlYWN0LWNhbGVuZGFyICo6YWZ0ZXIge1xcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuLnJlYWN0LWNhbGVuZGFyIGJ1dHRvbiB7XFxuICBtYXJnaW46IDA7XFxuICBib3JkZXI6IDA7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXIgYnV0dG9uOmVuYWJsZWQ6aG92ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogNDRweDtcXG4gIG1hcmdpbi1ib3R0b206IDFlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uIGJ1dHRvbiB7XFxuICBtaW4td2lkdGg6IDQ0cHg7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24gYnV0dG9uOmRpc2FibGVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiBidXR0b246ZW5hYmxlZDpob3ZlcixcXG4ucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24gYnV0dG9uOmVuYWJsZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X193ZWVrZGF5cyB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICBmb250LXNpemU6IDAuNzVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X193ZWVrZGF5c19fd2Vla2RheSB7XFxuICBwYWRkaW5nOiAwLjVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X193ZWVrTnVtYmVycyAucmVhY3QtY2FsZW5kYXJfX3RpbGUge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGZvbnQtc2l6ZTogMC43NWVtO1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbW9udGgtdmlld19fZGF5c19fZGF5LS13ZWVrZW5kIHtcXG4gIGNvbG9yOiAjZDEwMDAwO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX2RheXNfX2RheS0tbmVpZ2hib3JpbmdNb250aCB7XFxuICBjb2xvcjogIzc1NzU3NTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX195ZWFyLXZpZXcgLnJlYWN0LWNhbGVuZGFyX190aWxlLFxcbi5yZWFjdC1jYWxlbmRhcl9fZGVjYWRlLXZpZXcgLnJlYWN0LWNhbGVuZGFyX190aWxlLFxcbi5yZWFjdC1jYWxlbmRhcl9fY2VudHVyeS12aWV3IC5yZWFjdC1jYWxlbmRhcl9fdGlsZSB7XFxuICBwYWRkaW5nOiAyZW0gMC41ZW07XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZSB7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAxMHB4IDYuNjY2N3B4O1xcbiAgYmFja2dyb3VuZDogbm9uZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIGxpbmUtaGVpZ2h0OiAxNnB4O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGU6ZGlzYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlOmVuYWJsZWQ6aG92ZXIsXFxuLnJlYWN0LWNhbGVuZGFyX190aWxlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1ub3cge1xcbiAgYmFja2dyb3VuZDogI2ZmZmY3NjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1ub3c6ZW5hYmxlZDpob3ZlcixcXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLW5vdzplbmFibGVkOmZvY3VzIHtcXG4gIGJhY2tncm91bmQ6ICNmZmZmYTk7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0taGFzQWN0aXZlIHtcXG4gIGJhY2tncm91bmQ6ICM3NmJhZmY7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0taGFzQWN0aXZlOmVuYWJsZWQ6aG92ZXIsXFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1oYXNBY3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kOiAjYTlkNGZmO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLWFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kOiAjMDA2ZWRjO1xcbiAgY29sb3I6IHdoaXRlO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLWFjdGl2ZTplbmFibGVkOmhvdmVyLFxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tYWN0aXZlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZDogIzEwODdmZjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyLS1zZWxlY3RSYW5nZSAucmVhY3QtY2FsZW5kYXJfX3RpbGUtLWhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7XFxufVxcblwiLFwiXCJdKTtjb25zdCBsPWl9LDM2NDU6ZT0+e2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcCgoZnVuY3Rpb24odCl7dmFyIG49XCJcIixyPXZvaWQgMCE9PXRbNV07cmV0dXJuIHRbNF0mJihuKz1cIkBzdXBwb3J0cyAoXCIuY29uY2F0KHRbNF0sXCIpIHtcIikpLHRbMl0mJihuKz1cIkBtZWRpYSBcIi5jb25jYXQodFsyXSxcIiB7XCIpKSxyJiYobis9XCJAbGF5ZXJcIi5jb25jYXQodFs1XS5sZW5ndGg+MD9cIiBcIi5jb25jYXQodFs1XSk6XCJcIixcIiB7XCIpKSxuKz1lKHQpLHImJihuKz1cIn1cIiksdFsyXSYmKG4rPVwifVwiKSx0WzRdJiYobis9XCJ9XCIpLG59KSkuam9pbihcIlwiKX0sdC5pPWZ1bmN0aW9uKGUsbixyLG8sYSl7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtbbnVsbCxlLHZvaWQgMF1dKTt2YXIgaT17fTtpZihyKWZvcih2YXIgbD0wO2w8dGhpcy5sZW5ndGg7bCsrKXt2YXIgcz10aGlzW2xdWzBdO251bGwhPXMmJihpW3NdPSEwKX1mb3IodmFyIGM9MDtjPGUubGVuZ3RoO2MrKyl7dmFyIHU9W10uY29uY2F0KGVbY10pO3ImJmlbdVswXV18fCh2b2lkIDAhPT1hJiYodm9pZCAwPT09dVs1XXx8KHVbMV09XCJAbGF5ZXJcIi5jb25jYXQodVs1XS5sZW5ndGg+MD9cIiBcIi5jb25jYXQodVs1XSk6XCJcIixcIiB7XCIpLmNvbmNhdCh1WzFdLFwifVwiKSksdVs1XT1hKSxuJiYodVsyXT8odVsxXT1cIkBtZWRpYSBcIi5jb25jYXQodVsyXSxcIiB7XCIpLmNvbmNhdCh1WzFdLFwifVwiKSx1WzJdPW4pOnVbMl09biksbyYmKHVbNF0/KHVbMV09XCJAc3VwcG9ydHMgKFwiLmNvbmNhdCh1WzRdLFwiKSB7XCIpLmNvbmNhdCh1WzFdLFwifVwiKSx1WzRdPW8pOnVbNF09XCJcIi5jb25jYXQobykpLHQucHVzaCh1KSl9fSx0fX0sODA4MTplPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlWzFdfX0sNDQ4MzooZSx0LG4pPT57ZnVuY3Rpb24gcihlKXtyZXR1cm4gcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSxyKGUpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gbz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LG8oZSx0KX1mdW5jdGlvbiBhKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiBlfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGkoZSl9ZnVuY3Rpb24gbChlKXt2YXIgdD1mdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCIhPT1yKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgbj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bil7dmFyIG89bi5jYWxsKGUsXCJzdHJpbmdcIik7aWYoXCJvYmplY3RcIiE9PXIobykpcmV0dXJuIG87dGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpfXJldHVybiBTdHJpbmcoZSl9KGUpO3JldHVyblwic3ltYm9sXCI9PT1yKHQpP3Q6U3RyaW5nKHQpfXZhciBzPW4oNjY4OSksYz1uKDU2OTcpLHU9big1MzAzKS5jcmVhdGVGb2N1c1RyYXAsZD1uKDgzODgpLmlzRm9jdXNhYmxlLHA9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcInByb3RvdHlwZVwiLHt3cml0YWJsZTohMX0pLHQmJm8oZSx0KX0oZixlKTt2YXIgdCxuLGMsdSxwPShjPWYsdT1mdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1pKGMpO2lmKHUpe3ZhciBuPWkodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxuKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKFwib2JqZWN0XCI9PT1yKHQpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtyZXR1cm4gYShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGYoZSl7dmFyIHQsbixyLG87IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0odGhpcyxmKSxuPWEodD1wLmNhbGwodGhpcyxlKSksbz1mdW5jdGlvbihlKXt2YXIgdCxuPW51bGwhPT0odD10aGlzLmludGVybmFsT3B0aW9uc1tlXSkmJnZvaWQgMCE9PXQ/dDp0aGlzLm9yaWdpbmFsT3B0aW9uc1tlXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxvPW5ldyBBcnJheShyPjE/ci0xOjApLGE9MTthPHI7YSsrKW9bYS0xXT1hcmd1bWVudHNbYV07bj1uLmFwcGx5KHZvaWQgMCxvKX1pZighMD09PW4mJihuPXZvaWQgMCksIW4pe2lmKHZvaWQgMD09PW58fCExPT09bilyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoXCJgXCIuY29uY2F0KGUsXCJgIHdhcyBzcGVjaWZpZWQgYnV0IHdhcyBub3QgYSBub2RlLCBvciBkaWQgbm90IHJldHVybiBhIG5vZGVcIikpfXZhciBpLGw9bjtpZihcInN0cmluZ1wiPT10eXBlb2YgbiYmIShsPW51bGw9PT0oaT10aGlzLmdldERvY3VtZW50KCkpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnF1ZXJ5U2VsZWN0b3IobikpKXRocm93IG5ldyBFcnJvcihcImBcIi5jb25jYXQoZSxcImAgYXMgc2VsZWN0b3IgcmVmZXJzIHRvIG5vIGtub3duIG5vZGVcIikpO3JldHVybiBsfSwocj1sKHI9XCJnZXROb2RlRm9yT3B0aW9uXCIpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4scix7dmFsdWU6byxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bcl09byx0LmhhbmRsZURlYWN0aXZhdGU9dC5oYW5kbGVEZWFjdGl2YXRlLmJpbmQoYSh0KSksdC5oYW5kbGVQb3N0RGVhY3RpdmF0ZT10LmhhbmRsZVBvc3REZWFjdGl2YXRlLmJpbmQoYSh0KSksdC5oYW5kbGVDbGlja091dHNpZGVEZWFjdGl2YXRlcz10LmhhbmRsZUNsaWNrT3V0c2lkZURlYWN0aXZhdGVzLmJpbmQoYSh0KSksdC5pbnRlcm5hbE9wdGlvbnM9e3JldHVybkZvY3VzT25EZWFjdGl2YXRlOiExLGNoZWNrQ2FuUmV0dXJuRm9jdXM6bnVsbCxvbkRlYWN0aXZhdGU6dC5oYW5kbGVEZWFjdGl2YXRlLG9uUG9zdERlYWN0aXZhdGU6dC5oYW5kbGVQb3N0RGVhY3RpdmF0ZSxjbGlja091dHNpZGVEZWFjdGl2YXRlczp0LmhhbmRsZUNsaWNrT3V0c2lkZURlYWN0aXZhdGVzfSx0Lm9yaWdpbmFsT3B0aW9ucz17cmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6ITAsb25EZWFjdGl2YXRlOm51bGwsb25Qb3N0RGVhY3RpdmF0ZTpudWxsLGNoZWNrQ2FuUmV0dXJuRm9jdXM6bnVsbCxjbGlja091dHNpZGVEZWFjdGl2YXRlczohMX07dmFyIGk9ZS5mb2N1c1RyYXBPcHRpb25zO2Zvcih2YXIgcyBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHMpJiYoXCJyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZVwiIT09cyYmXCJvbkRlYWN0aXZhdGVcIiE9PXMmJlwib25Qb3N0RGVhY3RpdmF0ZVwiIT09cyYmXCJjaGVja0NhblJldHVybkZvY3VzXCIhPT1zJiZcImNsaWNrT3V0c2lkZURlYWN0aXZhdGVzXCIhPT1zP3QuaW50ZXJuYWxPcHRpb25zW3NdPWlbc106dC5vcmlnaW5hbE9wdGlvbnNbc109aVtzXSk7cmV0dXJuIHQub3V0c2lkZUNsaWNrPW51bGwsdC5mb2N1c1RyYXBFbGVtZW50cz1lLmNvbnRhaW5lckVsZW1lbnRzfHxbXSx0LnVwZGF0ZVByZXZpb3VzRWxlbWVudCgpLHR9cmV0dXJuIHQ9Ziwobj1be2tleTpcImdldERvY3VtZW50XCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5mb2N1c1RyYXBPcHRpb25zLmRvY3VtZW50fHwoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50OnZvaWQgMCl9fSx7a2V5OlwiZ2V0UmV0dXJuRm9jdXNOb2RlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldE5vZGVGb3JPcHRpb24oXCJzZXRSZXR1cm5Gb2N1c1wiLHRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50KTtyZXR1cm4gZXx8ITEhPT1lJiZ0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudH19LHtrZXk6XCJ1cGRhdGVQcmV2aW91c0VsZW1lbnRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0RG9jdW1lbnQoKTtlJiYodGhpcy5wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9ZS5hY3RpdmVFbGVtZW50KX19LHtrZXk6XCJkZWFjdGl2YXRlVHJhcFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5mb2N1c1RyYXAmJnRoaXMuZm9jdXNUcmFwLmFjdGl2ZSYmdGhpcy5mb2N1c1RyYXAuZGVhY3RpdmF0ZSh7cmV0dXJuRm9jdXM6ITEsY2hlY2tDYW5SZXR1cm5Gb2N1czpudWxsLG9uRGVhY3RpdmF0ZTp0aGlzLm9yaWdpbmFsT3B0aW9ucy5vbkRlYWN0aXZhdGV9KX19LHtrZXk6XCJoYW5kbGVDbGlja091dHNpZGVEZWFjdGl2YXRlc1wiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMub3JpZ2luYWxPcHRpb25zLmNsaWNrT3V0c2lkZURlYWN0aXZhdGVzP3RoaXMub3JpZ2luYWxPcHRpb25zLmNsaWNrT3V0c2lkZURlYWN0aXZhdGVzLmNhbGwobnVsbCxlKTp0aGlzLm9yaWdpbmFsT3B0aW9ucy5jbGlja091dHNpZGVEZWFjdGl2YXRlcztyZXR1cm4gdCYmKHRoaXMub3V0c2lkZUNsaWNrPXt0YXJnZXQ6ZS50YXJnZXQsYWxsb3dEZWFjdGl2YXRpb246dH0pLHR9fSx7a2V5OlwiaGFuZGxlRGVhY3RpdmF0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vcmlnaW5hbE9wdGlvbnMub25EZWFjdGl2YXRlJiZ0aGlzLm9yaWdpbmFsT3B0aW9ucy5vbkRlYWN0aXZhdGUuY2FsbChudWxsKSx0aGlzLmRlYWN0aXZhdGVUcmFwKCl9fSx7a2V5OlwiaGFuZGxlUG9zdERlYWN0aXZhdGVcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1mdW5jdGlvbigpe3ZhciB0PWUuZ2V0UmV0dXJuRm9jdXNOb2RlKCksbj0hKCFlLm9yaWdpbmFsT3B0aW9ucy5yZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZXx8bnVsbD09dHx8IXQuZm9jdXN8fGUub3V0c2lkZUNsaWNrJiYoIWUub3V0c2lkZUNsaWNrLmFsbG93RGVhY3RpdmF0aW9ufHxkKGUub3V0c2lkZUNsaWNrLnRhcmdldCxlLmludGVybmFsT3B0aW9ucy50YWJiYWJsZU9wdGlvbnMpKSkscj1lLmludGVybmFsT3B0aW9ucy5wcmV2ZW50U2Nyb2xsLG89dm9pZCAwIT09ciYmcjtuJiZ0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOm99KSxlLm9yaWdpbmFsT3B0aW9ucy5vblBvc3REZWFjdGl2YXRlJiZlLm9yaWdpbmFsT3B0aW9ucy5vblBvc3REZWFjdGl2YXRlLmNhbGwobnVsbCksZS5vdXRzaWRlQ2xpY2s9bnVsbH07dGhpcy5vcmlnaW5hbE9wdGlvbnMuY2hlY2tDYW5SZXR1cm5Gb2N1cz90aGlzLm9yaWdpbmFsT3B0aW9ucy5jaGVja0NhblJldHVybkZvY3VzLmNhbGwobnVsbCx0aGlzLmdldFJldHVybkZvY3VzTm9kZSgpKS50aGVuKHQsdCk6dCgpfX0se2tleTpcInNldHVwRm9jdXNUcmFwXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmZvY3VzVHJhcD90aGlzLnByb3BzLmFjdGl2ZSYmIXRoaXMuZm9jdXNUcmFwLmFjdGl2ZSYmKHRoaXMuZm9jdXNUcmFwLmFjdGl2YXRlKCksdGhpcy5wcm9wcy5wYXVzZWQmJnRoaXMuZm9jdXNUcmFwLnBhdXNlKCkpOnRoaXMuZm9jdXNUcmFwRWxlbWVudHMuc29tZShCb29sZWFuKSYmKHRoaXMuZm9jdXNUcmFwPXRoaXMucHJvcHMuX2NyZWF0ZUZvY3VzVHJhcCh0aGlzLmZvY3VzVHJhcEVsZW1lbnRzLHRoaXMuaW50ZXJuYWxPcHRpb25zKSx0aGlzLnByb3BzLmFjdGl2ZSYmdGhpcy5mb2N1c1RyYXAuYWN0aXZhdGUoKSx0aGlzLnByb3BzLnBhdXNlZCYmdGhpcy5mb2N1c1RyYXAucGF1c2UoKSl9fSx7a2V5OlwiY29tcG9uZW50RGlkTW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMuYWN0aXZlJiZ0aGlzLnNldHVwRm9jdXNUcmFwKCl9fSx7a2V5OlwiY29tcG9uZW50RGlkVXBkYXRlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5mb2N1c1RyYXApe2UuY29udGFpbmVyRWxlbWVudHMhPT10aGlzLnByb3BzLmNvbnRhaW5lckVsZW1lbnRzJiZ0aGlzLmZvY3VzVHJhcC51cGRhdGVDb250YWluZXJFbGVtZW50cyh0aGlzLnByb3BzLmNvbnRhaW5lckVsZW1lbnRzKTt2YXIgdD0hZS5hY3RpdmUmJnRoaXMucHJvcHMuYWN0aXZlLG49ZS5hY3RpdmUmJiF0aGlzLnByb3BzLmFjdGl2ZSxyPSFlLnBhdXNlZCYmdGhpcy5wcm9wcy5wYXVzZWQsbz1lLnBhdXNlZCYmIXRoaXMucHJvcHMucGF1c2VkO2lmKHQmJih0aGlzLnVwZGF0ZVByZXZpb3VzRWxlbWVudCgpLHRoaXMuZm9jdXNUcmFwLmFjdGl2YXRlKCkpLG4pcmV0dXJuIHZvaWQgdGhpcy5kZWFjdGl2YXRlVHJhcCgpO3ImJnRoaXMuZm9jdXNUcmFwLnBhdXNlKCksbyYmdGhpcy5mb2N1c1RyYXAudW5wYXVzZSgpfWVsc2UgZS5jb250YWluZXJFbGVtZW50cyE9PXRoaXMucHJvcHMuY29udGFpbmVyRWxlbWVudHMmJih0aGlzLmZvY3VzVHJhcEVsZW1lbnRzPXRoaXMucHJvcHMuY29udGFpbmVyRWxlbWVudHMpLHRoaXMucHJvcHMuYWN0aXZlJiYodGhpcy51cGRhdGVQcmV2aW91c0VsZW1lbnQoKSx0aGlzLnNldHVwRm9jdXNUcmFwKCkpfX0se2tleTpcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRlYWN0aXZhdGVUcmFwKCl9fSx7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcy5jaGlsZHJlbj9zLkNoaWxkcmVuLm9ubHkodGhpcy5wcm9wcy5jaGlsZHJlbik6dm9pZCAwO2lmKHQpe2lmKHQudHlwZSYmdC50eXBlPT09cy5GcmFnbWVudCl0aHJvdyBuZXcgRXJyb3IoXCJBIGZvY3VzLXRyYXAgY2Fubm90IHVzZSBhIEZyYWdtZW50IGFzIGl0cyBjaGlsZCBjb250YWluZXIuIFRyeSByZXBsYWNpbmcgaXQgd2l0aCBhIDxkaXY+IGVsZW1lbnQuXCIpO3JldHVybiBzLmNsb25lRWxlbWVudCh0LHtyZWY6ZnVuY3Rpb24obil7dmFyIHI9ZS5wcm9wcy5jb250YWluZXJFbGVtZW50czt0JiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC5yZWY/dC5yZWYobik6dC5yZWYmJih0LnJlZi5jdXJyZW50PW4pKSxlLmZvY3VzVHJhcEVsZW1lbnRzPXJ8fFtuXX19KX1yZXR1cm4gbnVsbH19XSkmJmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGwoci5rZXkpLHIpfX0odC5wcm90b3R5cGUsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KSxmfShzLkNvbXBvbmVudCksZj1cInVuZGVmaW5lZFwiPT10eXBlb2YgRWxlbWVudD9GdW5jdGlvbjpFbGVtZW50O3AucHJvcFR5cGVzPXthY3RpdmU6Yy5ib29sLHBhdXNlZDpjLmJvb2wsZm9jdXNUcmFwT3B0aW9uczpjLnNoYXBlKHtkb2N1bWVudDpjLm9iamVjdCxvbkFjdGl2YXRlOmMuZnVuYyxvblBvc3RBY3RpdmF0ZTpjLmZ1bmMsY2hlY2tDYW5Gb2N1c1RyYXA6Yy5mdW5jLG9uRGVhY3RpdmF0ZTpjLmZ1bmMsb25Qb3N0RGVhY3RpdmF0ZTpjLmZ1bmMsY2hlY2tDYW5SZXR1cm5Gb2N1czpjLmZ1bmMsaW5pdGlhbEZvY3VzOmMub25lT2ZUeXBlKFtjLmluc3RhbmNlT2YoZiksYy5zdHJpbmcsYy5ib29sLGMuZnVuY10pLGZhbGxiYWNrRm9jdXM6Yy5vbmVPZlR5cGUoW2MuaW5zdGFuY2VPZihmKSxjLnN0cmluZyxjLmZ1bmNdKSxlc2NhcGVEZWFjdGl2YXRlczpjLm9uZU9mVHlwZShbYy5ib29sLGMuZnVuY10pLGNsaWNrT3V0c2lkZURlYWN0aXZhdGVzOmMub25lT2ZUeXBlKFtjLmJvb2wsYy5mdW5jXSkscmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6Yy5ib29sLHNldFJldHVybkZvY3VzOmMub25lT2ZUeXBlKFtjLmluc3RhbmNlT2YoZiksYy5zdHJpbmcsYy5ib29sLGMuZnVuY10pLGFsbG93T3V0c2lkZUNsaWNrOmMub25lT2ZUeXBlKFtjLmJvb2wsYy5mdW5jXSkscHJldmVudFNjcm9sbDpjLmJvb2wsdGFiYmFibGVPcHRpb25zOmMuc2hhcGUoe2Rpc3BsYXlDaGVjazpjLm9uZU9mKFtcImZ1bGxcIixcImxlZ2FjeS1mdWxsXCIsXCJub24temVyby1hcmVhXCIsXCJub25lXCJdKSxnZXRTaGFkb3dSb290OmMub25lT2ZUeXBlKFtjLmJvb2wsYy5mdW5jXSl9KSx0cmFwU3RhY2s6Yy5hcnJheSxpc0tleUZvcndhcmQ6Yy5mdW5jLGlzS2V5QmFja3dhcmQ6Yy5mdW5jfSksY29udGFpbmVyRWxlbWVudHM6Yy5hcnJheU9mKGMuaW5zdGFuY2VPZihmKSksY2hpbGRyZW46Yy5vbmVPZlR5cGUoW2MuZWxlbWVudCxjLmluc3RhbmNlT2YoZildKX0scC5kZWZhdWx0UHJvcHM9e2FjdGl2ZTohMCxwYXVzZWQ6ITEsZm9jdXNUcmFwT3B0aW9uczp7fSxfY3JlYXRlRm9jdXNUcmFwOnV9LGUuZXhwb3J0cz1wfSw1MzAzOihlLHQsbik9PntuLnIodCksbi5kKHQse2NyZWF0ZUZvY3VzVHJhcDooKT0+Z30pO3ZhciByPW4oODM4OCk7ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9vKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7aShlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6byhPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4odD1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiBlfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgbj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bil7dmFyIHI9bi5jYWxsKGUsXCJzdHJpbmdcIik7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpfXJldHVybiBTdHJpbmcoZSl9KGUpO3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0P3Q6U3RyaW5nKHQpfSh0KSlpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX12YXIgbD1mdW5jdGlvbihlKXtyZXR1cm5cIlRhYlwiPT09ZS5rZXl8fDk9PT1lLmtleUNvZGV9LHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSkmJiFlLnNoaWZ0S2V5fSxjPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUpJiZlLnNoaWZ0S2V5fSx1PWZ1bmN0aW9uKGUpe3JldHVybiBzZXRUaW1lb3V0KGUsMCl9LGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj0tMTtyZXR1cm4gZS5ldmVyeSgoZnVuY3Rpb24oZSxyKXtyZXR1cm4hdChlKXx8KG49ciwhMSl9KSksbn0scD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lLmFwcGx5KHZvaWQgMCxuKTplfSxmPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRhcmdldC5zaGFkb3dSb290JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNvbXBvc2VkUGF0aD9lLmNvbXBvc2VkUGF0aCgpWzBdOmUudGFyZ2V0fSxoPVtdLGc9ZnVuY3Rpb24oZSx0KXt2YXIgbixvPShudWxsPT10P3ZvaWQgMDp0LmRvY3VtZW50KXx8ZG9jdW1lbnQsaT0obnVsbD09dD92b2lkIDA6dC50cmFwU3RhY2spfHxoLGc9YSh7cmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6ITAsZXNjYXBlRGVhY3RpdmF0ZXM6ITAsZGVsYXlJbml0aWFsRm9jdXM6ITAsaXNLZXlGb3J3YXJkOnMsaXNLZXlCYWNrd2FyZDpjfSx0KSx2PXtjb250YWluZXJzOltdLGNvbnRhaW5lckdyb3VwczpbXSx0YWJiYWJsZUdyb3VwczpbXSxub2RlRm9jdXNlZEJlZm9yZUFjdGl2YXRpb246bnVsbCxtb3N0UmVjZW50bHlGb2N1c2VkTm9kZTpudWxsLGFjdGl2ZTohMSxwYXVzZWQ6ITEsZGVsYXlJbml0aWFsRm9jdXNUaW1lcjp2b2lkIDB9LEM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlJiZ2b2lkIDAhPT1lW3RdP2VbdF06Z1tufHx0XX0sbT1mdW5jdGlvbihlKXtyZXR1cm4gdi5jb250YWluZXJHcm91cHMuZmluZEluZGV4KChmdW5jdGlvbih0KXt2YXIgbj10LmNvbnRhaW5lcixyPXQudGFiYmFibGVOb2RlcztyZXR1cm4gbi5jb250YWlucyhlKXx8ci5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdD09PWV9KSl9KSl9LHc9ZnVuY3Rpb24oZSl7dmFyIHQ9Z1tlXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShuPjE/bi0xOjApLGE9MTthPG47YSsrKXJbYS0xXT1hcmd1bWVudHNbYV07dD10LmFwcGx5KHZvaWQgMCxyKX1pZighMD09PXQmJih0PXZvaWQgMCksIXQpe2lmKHZvaWQgMD09PXR8fCExPT09dClyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoXCJgXCIuY29uY2F0KGUsXCJgIHdhcyBzcGVjaWZpZWQgYnV0IHdhcyBub3QgYSBub2RlLCBvciBkaWQgbm90IHJldHVybiBhIG5vZGVcIikpfXZhciBpPXQ7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJiEoaT1vLnF1ZXJ5U2VsZWN0b3IodCkpKXRocm93IG5ldyBFcnJvcihcImBcIi5jb25jYXQoZSxcImAgYXMgc2VsZWN0b3IgcmVmZXJzIHRvIG5vIGtub3duIG5vZGVcIikpO3JldHVybiBpfSxiPWZ1bmN0aW9uKCl7dmFyIGU9dyhcImluaXRpYWxGb2N1c1wiKTtpZighMT09PWUpcmV0dXJuITE7aWYodm9pZCAwPT09ZSlpZihtKG8uYWN0aXZlRWxlbWVudCk+PTApZT1vLmFjdGl2ZUVsZW1lbnQ7ZWxzZXt2YXIgdD12LnRhYmJhYmxlR3JvdXBzWzBdO2U9dCYmdC5maXJzdFRhYmJhYmxlTm9kZXx8dyhcImZhbGxiYWNrRm9jdXNcIil9aWYoIWUpdGhyb3cgbmV3IEVycm9yKFwiWW91ciBmb2N1cy10cmFwIG5lZWRzIHRvIGhhdmUgYXQgbGVhc3Qgb25lIGZvY3VzYWJsZSBlbGVtZW50XCIpO3JldHVybiBlfSx5PWZ1bmN0aW9uKCl7aWYodi5jb250YWluZXJHcm91cHM9di5jb250YWluZXJzLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHQ9KDAsci50YWJiYWJsZSkoZSxnLnRhYmJhYmxlT3B0aW9ucyksbj0oMCxyLmZvY3VzYWJsZSkoZSxnLnRhYmJhYmxlT3B0aW9ucyk7cmV0dXJue2NvbnRhaW5lcjplLHRhYmJhYmxlTm9kZXM6dCxmb2N1c2FibGVOb2RlczpuLGZpcnN0VGFiYmFibGVOb2RlOnQubGVuZ3RoPjA/dFswXTpudWxsLGxhc3RUYWJiYWJsZU5vZGU6dC5sZW5ndGg+MD90W3QubGVuZ3RoLTFdOm51bGwsbmV4dFRhYmJhYmxlTm9kZTpmdW5jdGlvbihlKXt2YXIgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLG89bi5maW5kSW5kZXgoKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZX0pKTtpZighKG88MCkpcmV0dXJuIHQ/bi5zbGljZShvKzEpLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybigwLHIuaXNUYWJiYWJsZSkoZSxnLnRhYmJhYmxlT3B0aW9ucyl9KSk6bi5zbGljZSgwLG8pLnJldmVyc2UoKS5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4oMCxyLmlzVGFiYmFibGUpKGUsZy50YWJiYWJsZU9wdGlvbnMpfSkpfX19KSksdi50YWJiYWJsZUdyb3Vwcz12LmNvbnRhaW5lckdyb3Vwcy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhYmJhYmxlTm9kZXMubGVuZ3RoPjB9KSksdi50YWJiYWJsZUdyb3Vwcy5sZW5ndGg8PTAmJiF3KFwiZmFsbGJhY2tGb2N1c1wiKSl0aHJvdyBuZXcgRXJyb3IoXCJZb3VyIGZvY3VzLXRyYXAgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBjb250YWluZXIgd2l0aCBhdCBsZWFzdCBvbmUgdGFiYmFibGUgbm9kZSBpbiBpdCBhdCBhbGwgdGltZXNcIil9LHg9ZnVuY3Rpb24gZSh0KXshMSE9PXQmJnQhPT1vLmFjdGl2ZUVsZW1lbnQmJih0JiZ0LmZvY3VzPyh0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEhZy5wcmV2ZW50U2Nyb2xsfSksdi5tb3N0UmVjZW50bHlGb2N1c2VkTm9kZT10LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhZ05hbWUmJlwiaW5wdXRcIj09PWUudGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnNlbGVjdH0odCkmJnQuc2VsZWN0KCkpOmUoYigpKSl9LGs9ZnVuY3Rpb24oZSl7dmFyIHQ9dyhcInNldFJldHVybkZvY3VzXCIsZSk7cmV0dXJuIHR8fCExIT09dCYmZX0sUz1mdW5jdGlvbihlKXt2YXIgdD1mKGUpO20odCk+PTB8fChwKGcuY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXMsZSk/bi5kZWFjdGl2YXRlKHtyZXR1cm5Gb2N1czpnLnJldHVybkZvY3VzT25EZWFjdGl2YXRlfSk6cChnLmFsbG93T3V0c2lkZUNsaWNrLGUpfHxlLnByZXZlbnREZWZhdWx0KCkpfSxPPWZ1bmN0aW9uKGUpe3ZhciB0PWYoZSksbj1tKHQpPj0wO258fHQgaW5zdGFuY2VvZiBEb2N1bWVudD9uJiYodi5tb3N0UmVjZW50bHlGb2N1c2VkTm9kZT10KTooZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx4KHYubW9zdFJlY2VudGx5Rm9jdXNlZE5vZGV8fGIoKSkpfSxNPWZ1bmN0aW9uKGUpe2lmKChcIkVzY2FwZVwiPT09KHQ9ZSkua2V5fHxcIkVzY1wiPT09dC5rZXl8fDI3PT09dC5rZXlDb2RlKSYmITEhPT1wKGcuZXNjYXBlRGVhY3RpdmF0ZXMsZSkpcmV0dXJuIGUucHJldmVudERlZmF1bHQoKSx2b2lkIG4uZGVhY3RpdmF0ZSgpO3ZhciB0OyhnLmlzS2V5Rm9yd2FyZChlKXx8Zy5pc0tleUJhY2t3YXJkKGUpKSYmZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxuPWYoZSk7eSgpO3ZhciBvPW51bGw7aWYodi50YWJiYWJsZUdyb3Vwcy5sZW5ndGg+MCl7dmFyIGE9bShuKSxpPWE+PTA/di5jb250YWluZXJHcm91cHNbYV06dm9pZCAwO2lmKGE8MClvPXQ/di50YWJiYWJsZUdyb3Vwc1t2LnRhYmJhYmxlR3JvdXBzLmxlbmd0aC0xXS5sYXN0VGFiYmFibGVOb2RlOnYudGFiYmFibGVHcm91cHNbMF0uZmlyc3RUYWJiYWJsZU5vZGU7ZWxzZSBpZih0KXt2YXIgcz1kKHYudGFiYmFibGVHcm91cHMsKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZmlyc3RUYWJiYWJsZU5vZGU7cmV0dXJuIG49PT10fSkpO2lmKHM8MCYmKGkuY29udGFpbmVyPT09bnx8KDAsci5pc0ZvY3VzYWJsZSkobixnLnRhYmJhYmxlT3B0aW9ucykmJiEoMCxyLmlzVGFiYmFibGUpKG4sZy50YWJiYWJsZU9wdGlvbnMpJiYhaS5uZXh0VGFiYmFibGVOb2RlKG4sITEpKSYmKHM9YSkscz49MCl7dmFyIGM9MD09PXM/di50YWJiYWJsZUdyb3Vwcy5sZW5ndGgtMTpzLTE7bz12LnRhYmJhYmxlR3JvdXBzW2NdLmxhc3RUYWJiYWJsZU5vZGV9ZWxzZSBsKGUpfHwobz1pLm5leHRUYWJiYWJsZU5vZGUobiwhMSkpfWVsc2V7dmFyIHU9ZCh2LnRhYmJhYmxlR3JvdXBzLChmdW5jdGlvbihlKXt2YXIgdD1lLmxhc3RUYWJiYWJsZU5vZGU7cmV0dXJuIG49PT10fSkpO2lmKHU8MCYmKGkuY29udGFpbmVyPT09bnx8KDAsci5pc0ZvY3VzYWJsZSkobixnLnRhYmJhYmxlT3B0aW9ucykmJiEoMCxyLmlzVGFiYmFibGUpKG4sZy50YWJiYWJsZU9wdGlvbnMpJiYhaS5uZXh0VGFiYmFibGVOb2RlKG4pKSYmKHU9YSksdT49MCl7dmFyIHA9dT09PXYudGFiYmFibGVHcm91cHMubGVuZ3RoLTE/MDp1KzE7bz12LnRhYmJhYmxlR3JvdXBzW3BdLmZpcnN0VGFiYmFibGVOb2RlfWVsc2UgbChlKXx8KG89aS5uZXh0VGFiYmFibGVOb2RlKG4pKX19ZWxzZSBvPXcoXCJmYWxsYmFja0ZvY3VzXCIpO28mJihsKGUpJiZlLnByZXZlbnREZWZhdWx0KCkseChvKSl9KGUsZy5pc0tleUJhY2t3YXJkKGUpKX0sTD1mdW5jdGlvbihlKXt2YXIgdD1mKGUpO20odCk+PTB8fHAoZy5jbGlja091dHNpZGVEZWFjdGl2YXRlcyxlKXx8cChnLmFsbG93T3V0c2lkZUNsaWNrLGUpfHwoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfSxfPWZ1bmN0aW9uKCl7aWYodi5hY3RpdmUpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoZS5sZW5ndGg+MCl7dmFyIG49ZVtlLmxlbmd0aC0xXTtuIT09dCYmbi5wYXVzZSgpfXZhciByPWUuaW5kZXhPZih0KTstMT09PXJ8fGUuc3BsaWNlKHIsMSksZS5wdXNoKHQpfShpLG4pLHYuZGVsYXlJbml0aWFsRm9jdXNUaW1lcj1nLmRlbGF5SW5pdGlhbEZvY3VzP3UoKGZ1bmN0aW9uKCl7eChiKCkpfSkpOngoYigpKSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsTywhMCksby5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsUyx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksby5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLFMse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pLG8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsTCx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksby5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLE0se2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pLG59LFA9ZnVuY3Rpb24oKXtpZih2LmFjdGl2ZSlyZXR1cm4gby5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNpblwiLE8sITApLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLFMsITApLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIixTLCEwKSxvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLEwsITApLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixNLCEwKSxufTtyZXR1cm4obj17Z2V0IGFjdGl2ZSgpe3JldHVybiB2LmFjdGl2ZX0sZ2V0IHBhdXNlZCgpe3JldHVybiB2LnBhdXNlZH0sYWN0aXZhdGU6ZnVuY3Rpb24oZSl7aWYodi5hY3RpdmUpcmV0dXJuIHRoaXM7dmFyIHQ9QyhlLFwib25BY3RpdmF0ZVwiKSxuPUMoZSxcIm9uUG9zdEFjdGl2YXRlXCIpLHI9QyhlLFwiY2hlY2tDYW5Gb2N1c1RyYXBcIik7cnx8eSgpLHYuYWN0aXZlPSEwLHYucGF1c2VkPSExLHYubm9kZUZvY3VzZWRCZWZvcmVBY3RpdmF0aW9uPW8uYWN0aXZlRWxlbWVudCx0JiZ0KCk7dmFyIGE9ZnVuY3Rpb24oKXtyJiZ5KCksXygpLG4mJm4oKX07cmV0dXJuIHI/KHIodi5jb250YWluZXJzLmNvbmNhdCgpKS50aGVuKGEsYSksdGhpcyk6KGEoKSx0aGlzKX0sZGVhY3RpdmF0ZTpmdW5jdGlvbihlKXtpZighdi5hY3RpdmUpcmV0dXJuIHRoaXM7dmFyIHQ9YSh7b25EZWFjdGl2YXRlOmcub25EZWFjdGl2YXRlLG9uUG9zdERlYWN0aXZhdGU6Zy5vblBvc3REZWFjdGl2YXRlLGNoZWNrQ2FuUmV0dXJuRm9jdXM6Zy5jaGVja0NhblJldHVybkZvY3VzfSxlKTtjbGVhclRpbWVvdXQodi5kZWxheUluaXRpYWxGb2N1c1RpbWVyKSx2LmRlbGF5SW5pdGlhbEZvY3VzVGltZXI9dm9pZCAwLFAoKSx2LmFjdGl2ZT0hMSx2LnBhdXNlZD0hMSxmdW5jdGlvbihlLHQpe3ZhciBuPWUuaW5kZXhPZih0KTstMSE9PW4mJmUuc3BsaWNlKG4sMSksZS5sZW5ndGg+MCYmZVtlLmxlbmd0aC0xXS51bnBhdXNlKCl9KGksbik7dmFyIHI9Qyh0LFwib25EZWFjdGl2YXRlXCIpLG89Qyh0LFwib25Qb3N0RGVhY3RpdmF0ZVwiKSxsPUModCxcImNoZWNrQ2FuUmV0dXJuRm9jdXNcIikscz1DKHQsXCJyZXR1cm5Gb2N1c1wiLFwicmV0dXJuRm9jdXNPbkRlYWN0aXZhdGVcIik7ciYmcigpO3ZhciBjPWZ1bmN0aW9uKCl7dSgoZnVuY3Rpb24oKXtzJiZ4KGsodi5ub2RlRm9jdXNlZEJlZm9yZUFjdGl2YXRpb24pKSxvJiZvKCl9KSl9O3JldHVybiBzJiZsPyhsKGsodi5ub2RlRm9jdXNlZEJlZm9yZUFjdGl2YXRpb24pKS50aGVuKGMsYyksdGhpcyk6KGMoKSx0aGlzKX0scGF1c2U6ZnVuY3Rpb24oKXtyZXR1cm4gdi5wYXVzZWR8fCF2LmFjdGl2ZXx8KHYucGF1c2VkPSEwLFAoKSksdGhpc30sdW5wYXVzZTpmdW5jdGlvbigpe3JldHVybiB2LnBhdXNlZCYmdi5hY3RpdmU/KHYucGF1c2VkPSExLHkoKSxfKCksdGhpcyk6dGhpc30sdXBkYXRlQ29udGFpbmVyRWxlbWVudHM6ZnVuY3Rpb24oZSl7dmFyIHQ9W10uY29uY2F0KGUpLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gdi5jb250YWluZXJzPXQubWFwKChmdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT9vLnF1ZXJ5U2VsZWN0b3IoZSk6ZX0pKSx2LmFjdGl2ZSYmeSgpLHRoaXN9fSkudXBkYXRlQ29udGFpbmVyRWxlbWVudHMoZSksbn19LDkxNDE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPW4oNjU1KSxvPW4oNjY4OSksYT1uKDQzOTQpLGk9bigzNTczKSxsPW4oOTI5NCkscz1uKDQ4MzkpO2Z1bmN0aW9uIGMoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdT1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZSYmT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7aWYoXCJkZWZhdWx0XCIhPT1uKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbixyLmdldD9yOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW25dfX0pfX0pKSx0LmRlZmF1bHQ9ZSxPYmplY3QuZnJlZXplKHQpfShvKSxkPWMobykscD1jKHMpLGY9ZnVuY3Rpb24oZSl7cmV0dXJue2lzRW5hYmxlZDpmdW5jdGlvbih0KXtyZXR1cm4gZS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4hIXRbZV19KSl9fX0saD17bWVhc3VyZUxheW91dDpmKFtcImxheW91dFwiLFwibGF5b3V0SWRcIixcImRyYWdcIixcIl9sYXlvdXRSZXNldFRyYW5zZm9ybVwiXSksYW5pbWF0aW9uOmYoW1wiYW5pbWF0ZVwiLFwiZXhpdFwiLFwidmFyaWFudHNcIixcIndoaWxlSG92ZXJcIixcIndoaWxlVGFwXCIsXCJ3aGlsZUZvY3VzXCIsXCJ3aGlsZURyYWdcIl0pLGV4aXQ6ZihbXCJleGl0XCJdKSxkcmFnOmYoW1wiZHJhZ1wiLFwiZHJhZ0NvbnRyb2xzXCJdKSxmb2N1czpmKFtcIndoaWxlRm9jdXNcIl0pLGhvdmVyOmYoW1wid2hpbGVIb3ZlclwiLFwib25Ib3ZlclN0YXJ0XCIsXCJvbkhvdmVyRW5kXCJdKSx0YXA6ZihbXCJ3aGlsZVRhcFwiLFwib25UYXBcIixcIm9uVGFwU3RhcnRcIixcIm9uVGFwQ2FuY2VsXCJdKSxwYW46ZihbXCJvblBhblwiLFwib25QYW5TdGFydFwiLFwib25QYW5TZXNzaW9uU3RhcnRcIixcIm9uUGFuRW5kXCJdKSxsYXlvdXRBbmltYXRpb246ZihbXCJsYXlvdXRcIixcImxheW91dElkXCJdKX07ZnVuY3Rpb24gZyhlKXtmb3IodmFyIHQgaW4gZSl7dmFyIG49ZVt0XTtudWxsIT09biYmKGhbdF0uQ29tcG9uZW50PW4pfX12YXIgdj1vLmNyZWF0ZUNvbnRleHQoe3N0cmljdDohMX0pLEM9T2JqZWN0LmtleXMoaCksbT1DLmxlbmd0aCx3PW8uY3JlYXRlQ29udGV4dCh7dHJhbnNmb3JtUGFnZVBvaW50OmZ1bmN0aW9uKGUpe3JldHVybiBlfSxpc1N0YXRpYzohMX0pLGI9by5jcmVhdGVDb250ZXh0KHt9KTtmdW5jdGlvbiB5KCl7cmV0dXJuIG8udXNlQ29udGV4dChiKS52aXN1YWxFbGVtZW50fXZhciB4PW8uY3JlYXRlQ29udGV4dChudWxsKTtmdW5jdGlvbiBrKGUpe3ZhciB0PW8udXNlUmVmKG51bGwpO3JldHVybiBudWxsPT09dC5jdXJyZW50JiYodC5jdXJyZW50PWUoKSksdC5jdXJyZW50fWZ1bmN0aW9uIFMoKXt2YXIgZT1vLnVzZUNvbnRleHQoeCk7aWYobnVsbD09PWUpcmV0dXJuWyEwLG51bGxdO3ZhciB0PWUuaXNQcmVzZW50LG49ZS5vbkV4aXRDb21wbGV0ZSxyPWUucmVnaXN0ZXIsYT1fKCk7cmV0dXJuIG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiByKGEpfSksW10pLCF0JiZuP1shMSxmdW5jdGlvbigpe3JldHVybiBudWxsPT1uP3ZvaWQgMDpuKGEpfV06WyEwXX1mdW5jdGlvbiBPKGUpe3JldHVybiBudWxsPT09ZXx8ZS5pc1ByZXNlbnR9dmFyIE09MCxMPWZ1bmN0aW9uKCl7cmV0dXJuIE0rK30sXz1mdW5jdGlvbigpe3JldHVybiBrKEwpfSxQPW8uY3JlYXRlQ29udGV4dChudWxsKSxFPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3csaj1FP28udXNlTGF5b3V0RWZmZWN0Om8udXNlRWZmZWN0O2Z1bmN0aW9uIFIoZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLFwiY3VycmVudFwiKX1mdW5jdGlvbiBJKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIFYoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fEkoZSl9ZnVuY3Rpb24gSChlLHQsbixyLG8pe3ZhciBhO3JldHVybiB2b2lkIDA9PT1yJiYocj17fSksdm9pZCAwPT09byYmKG89e30pLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1udWxsPT09KGE9ZS52YXJpYW50cyl8fHZvaWQgMD09PWE/dm9pZCAwOmFbdF0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dChudWxsIT1uP246ZS5jdXN0b20scixvKTp0fWZ1bmN0aW9uIEEoZSx0LG4pe3ZhciByPWUuZ2V0UHJvcHMoKTtyZXR1cm4gSChyLHQsbnVsbCE9bj9uOnIuY3VzdG9tLGZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBlLmZvckVhY2hWYWx1ZSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdFtuXT1lLmdldCgpfSkpLHR9KGUpLGZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBlLmZvckVhY2hWYWx1ZSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdFtuXT1lLmdldFZlbG9jaXR5KCl9KSksdH0oZSkpfWZ1bmN0aW9uIFQoZSl7dmFyIHQ7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YobnVsbD09PSh0PWUuYW5pbWF0ZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuc3RhcnQpfHxWKGUuaW5pdGlhbCl8fFYoZS5hbmltYXRlKXx8VihlLndoaWxlSG92ZXIpfHxWKGUud2hpbGVEcmFnKXx8VihlLndoaWxlVGFwKXx8VihlLndoaWxlRm9jdXMpfHxWKGUuZXhpdCl9ZnVuY3Rpb24gRChlKXtyZXR1cm4gQm9vbGVhbihUKGUpfHxlLnZhcmlhbnRzKX1mdW5jdGlvbiBCKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2Uuam9pbihcIiBcIik6ZX1mdW5jdGlvbiBaKGUpe3ZhciB0PWUucHJlbG9hZGVkRmVhdHVyZXMsbj1lLmNyZWF0ZVZpc3VhbEVsZW1lbnQsYT1lLnVzZVJlbmRlcixpPWUudXNlVmlzdWFsU3RhdGUsbD1lLkNvbXBvbmVudDtyZXR1cm4gdCYmZyh0KSxvLmZvcndhcmRSZWYoKGZ1bmN0aW9uKGUsdCl7dmFyIHM9by51c2VDb250ZXh0KHcpLmlzU3RhdGljLGM9bnVsbCxkPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSx0KXtpZihUKGUpKXt2YXIgbj1lLmluaXRpYWwscj1lLmFuaW1hdGU7cmV0dXJue2luaXRpYWw6ITE9PT1ufHxWKG4pP246dm9pZCAwLGFuaW1hdGU6VihyKT9yOnZvaWQgMH19cmV0dXJuITEhPT1lLmluaGVyaXQ/dDp7fX0oZSxvLnVzZUNvbnRleHQoYikpLHI9bi5pbml0aWFsLGE9bi5hbmltYXRlO3JldHVybiBvLnVzZU1lbW8oKGZ1bmN0aW9uKCl7cmV0dXJue2luaXRpYWw6cixhbmltYXRlOmF9fSksdD9bQihyKSxCKGEpXTpbXSl9KGUscykscD1pKGUscyk7cmV0dXJuIXMmJkUmJihkLnZpc3VhbEVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4sYSl7dmFyIGk9by51c2VDb250ZXh0KHcpLGw9by51c2VDb250ZXh0KHYpLHM9eSgpLGM9by51c2VDb250ZXh0KHgpLHU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sYXlvdXRJZCxuPW8udXNlQ29udGV4dChQKTtyZXR1cm4gbiYmdm9pZCAwIT09dD9uK1wiLVwiK3Q6dH0obiksZD1vLnVzZVJlZih2b2lkIDApO2F8fChhPWwucmVuZGVyZXIpLCFkLmN1cnJlbnQmJmEmJihkLmN1cnJlbnQ9YShlLHt2aXN1YWxTdGF0ZTp0LHBhcmVudDpzLHByb3BzOnIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxuKSx7bGF5b3V0SWQ6dX0pLHByZXNlbmNlSWQ6bnVsbD09Yz92b2lkIDA6Yy5pZCxibG9ja0luaXRpYWxBbmltYXRpb246ITE9PT0obnVsbD09Yz92b2lkIDA6Yy5pbml0aWFsKX0pKTt2YXIgcD1kLmN1cnJlbnQ7cmV0dXJuIGooKGZ1bmN0aW9uKCl7cCYmKHAuc2V0UHJvcHMoci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30saSksbikse2xheW91dElkOnV9KSkscC5pc1ByZXNlbnQ9TyhjKSxwLmlzUHJlc2VuY2VSb290PSFzfHxzLnByZXNlbmNlSWQhPT0obnVsbD09Yz92b2lkIDA6Yy5pZCkscC5zeW5jUmVuZGVyKCkpfSkpLG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3ZhciBlO3AmJihudWxsPT09KGU9cC5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PWV8fGUuYW5pbWF0ZUNoYW5nZXMoKSl9KSksaigoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09cD92b2lkIDA6cC5ub3RpZnlVbm1vdW50KCl9fSksW10pLHB9KGwscCxlLG4pLGM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBhPVtdO2lmKG8udXNlQ29udGV4dCh2KSwhdClyZXR1cm4gbnVsbDtmb3IodmFyIGk9MDtpPG07aSsrKXt2YXIgbD1DW2ldLHM9aFtsXSxjPXMuaXNFbmFibGVkLGQ9cy5Db21wb25lbnQ7YyhlKSYmZCYmYS5wdXNoKHUuY3JlYXRlRWxlbWVudChkLHIuX19hc3NpZ24oe2tleTpsfSxlLHt2aXN1YWxFbGVtZW50OnR9KSkpfXJldHVybiBhfShlLGQudmlzdWFsRWxlbWVudCkpLHUuY3JlYXRlRWxlbWVudCh1LkZyYWdtZW50LG51bGwsdS5jcmVhdGVFbGVtZW50KGIuUHJvdmlkZXIse3ZhbHVlOmR9LGEobCxlLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gby51c2VDYWxsYmFjaygoZnVuY3Rpb24ocil7dmFyIG87ciYmKG51bGw9PT0obz1lLm1vdW50KXx8dm9pZCAwPT09b3x8by5jYWxsKGUscikpLHQmJihyP3QubW91bnQocik6dC51bm1vdW50KCkpLG4mJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuP24ocik6UihuKSYmKG4uY3VycmVudD1yKSl9KSxbdF0pfShwLGQudmlzdWFsRWxlbWVudCx0KSxwLHMpKSxjKX0pKX1mdW5jdGlvbiAkKGUpe2Z1bmN0aW9uIHQodCxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLFooZSh0LG4pKX12YXIgbj1uZXcgTWFwO3JldHVybiBuZXcgUHJveHkodCx7Z2V0OmZ1bmN0aW9uKGUscil7cmV0dXJuIG4uaGFzKHIpfHxuLnNldChyLHQocikpLG4uZ2V0KHIpfX0pfXZhciBOPVtcImFuaW1hdGVcIixcImNpcmNsZVwiLFwiZGVmc1wiLFwiZGVzY1wiLFwiZWxsaXBzZVwiLFwiZ1wiLFwiaW1hZ2VcIixcImxpbmVcIixcImZpbHRlclwiLFwibWFya2VyXCIsXCJtYXNrXCIsXCJtZXRhZGF0YVwiLFwicGF0aFwiLFwicGF0dGVyblwiLFwicG9seWdvblwiLFwicG9seWxpbmVcIixcInJlY3RcIixcInN0b3BcIixcInN2Z1wiLFwic3dpdGNoXCIsXCJzeW1ib2xcIixcInRleHRcIixcInRzcGFuXCIsXCJ1c2VcIixcInZpZXdcIl07ZnVuY3Rpb24gRihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmIWUuaW5jbHVkZXMoXCItXCIpJiYhIShOLmluZGV4T2YoZSk+LTF8fC9bQS1aXS8udGVzdChlKSl9dmFyIFc9e307ZnVuY3Rpb24gVShlKXtmb3IodmFyIHQgaW4gZSlXW3RdPWVbdF19dmFyIHo9W1wiXCIsXCJYXCIsXCJZXCIsXCJaXCJdLEc9W1widHJhbnNmb3JtUGVyc3BlY3RpdmVcIixcInhcIixcInlcIixcInpcIl07ZnVuY3Rpb24gSyhlLHQpe3JldHVybiBHLmluZGV4T2YoZSktRy5pbmRleE9mKHQpfVtcInRyYW5zbGF0ZVwiLFwic2NhbGVcIixcInJvdGF0ZVwiLFwic2tld1wiXS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gei5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gRy5wdXNoKGUrdCl9KSl9KSk7dmFyIHE9bmV3IFNldChHKTtmdW5jdGlvbiBZKGUpe3JldHVybiBxLmhhcyhlKX12YXIgSj1uZXcgU2V0KFtcIm9yaWdpblhcIixcIm9yaWdpbllcIixcIm9yaWdpblpcIl0pO2Z1bmN0aW9uIFgoZSl7cmV0dXJuIEouaGFzKGUpfWZ1bmN0aW9uIFEoZSx0KXt2YXIgbj10LmxheW91dCxyPXQubGF5b3V0SWQ7cmV0dXJuIFkoZSl8fFgoZSl8fChufHx2b2lkIDAhPT1yKSYmKCEhV1tlXXx8XCJvcGFjaXR5XCI9PT1lKX12YXIgZWU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmZS5nZXRWZWxvY2l0eX0sdGU9e3g6XCJ0cmFuc2xhdGVYXCIseTpcInRyYW5zbGF0ZVlcIix6OlwidHJhbnNsYXRlWlwiLHRyYW5zZm9ybVBlcnNwZWN0aXZlOlwicGVyc3BlY3RpdmVcIn07ZnVuY3Rpb24gbmUoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aChcIi0tXCIpfXZhciByZT1mdW5jdGlvbihlLHQpe3JldHVybiB0JiZcIm51bWJlclwiPT10eXBlb2YgZT90LnRyYW5zZm9ybShlKTplfSxvZT1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30saS5udW1iZXIpLHt0cmFuc2Zvcm06TWF0aC5yb3VuZH0pLGFlPXtib3JkZXJXaWR0aDppLnB4LGJvcmRlclRvcFdpZHRoOmkucHgsYm9yZGVyUmlnaHRXaWR0aDppLnB4LGJvcmRlckJvdHRvbVdpZHRoOmkucHgsYm9yZGVyTGVmdFdpZHRoOmkucHgsYm9yZGVyUmFkaXVzOmkucHgscmFkaXVzOmkucHgsYm9yZGVyVG9wTGVmdFJhZGl1czppLnB4LGJvcmRlclRvcFJpZ2h0UmFkaXVzOmkucHgsYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6aS5weCxib3JkZXJCb3R0b21MZWZ0UmFkaXVzOmkucHgsd2lkdGg6aS5weCxtYXhXaWR0aDppLnB4LGhlaWdodDppLnB4LG1heEhlaWdodDppLnB4LHNpemU6aS5weCx0b3A6aS5weCxyaWdodDppLnB4LGJvdHRvbTppLnB4LGxlZnQ6aS5weCxwYWRkaW5nOmkucHgscGFkZGluZ1RvcDppLnB4LHBhZGRpbmdSaWdodDppLnB4LHBhZGRpbmdCb3R0b206aS5weCxwYWRkaW5nTGVmdDppLnB4LG1hcmdpbjppLnB4LG1hcmdpblRvcDppLnB4LG1hcmdpblJpZ2h0OmkucHgsbWFyZ2luQm90dG9tOmkucHgsbWFyZ2luTGVmdDppLnB4LHJvdGF0ZTppLmRlZ3JlZXMscm90YXRlWDppLmRlZ3JlZXMscm90YXRlWTppLmRlZ3JlZXMscm90YXRlWjppLmRlZ3JlZXMsc2NhbGU6aS5zY2FsZSxzY2FsZVg6aS5zY2FsZSxzY2FsZVk6aS5zY2FsZSxzY2FsZVo6aS5zY2FsZSxza2V3OmkuZGVncmVlcyxza2V3WDppLmRlZ3JlZXMsc2tld1k6aS5kZWdyZWVzLGRpc3RhbmNlOmkucHgsdHJhbnNsYXRlWDppLnB4LHRyYW5zbGF0ZVk6aS5weCx0cmFuc2xhdGVaOmkucHgseDppLnB4LHk6aS5weCx6OmkucHgscGVyc3BlY3RpdmU6aS5weCx0cmFuc2Zvcm1QZXJzcGVjdGl2ZTppLnB4LG9wYWNpdHk6aS5hbHBoYSxvcmlnaW5YOmkucHJvZ3Jlc3NQZXJjZW50YWdlLG9yaWdpblk6aS5wcm9ncmVzc1BlcmNlbnRhZ2Usb3JpZ2luWjppLnB4LHpJbmRleDpvZSxmaWxsT3BhY2l0eTppLmFscGhhLHN0cm9rZU9wYWNpdHk6aS5hbHBoYSxudW1PY3RhdmVzOm9lfTtmdW5jdGlvbiBpZShlLHQsbixyLG8sYSxpLGwpe3ZhciBzLGM9ZS5zdHlsZSx1PWUudmFycyxkPWUudHJhbnNmb3JtLHA9ZS50cmFuc2Zvcm1LZXlzLGY9ZS50cmFuc2Zvcm1PcmlnaW47cC5sZW5ndGg9MDt2YXIgaD0hMSxnPSExLHY9ITA7Zm9yKHZhciBDIGluIHQpe3ZhciBtPXRbQ107aWYobmUoQykpdVtDXT1tO2Vsc2V7dmFyIHc9YWVbQ10sYj1yZShtLHcpO2lmKFkoQykpe2lmKGg9ITAsZFtDXT1iLHAucHVzaChDKSwhdiljb250aW51ZTttIT09KG51bGwhPT0ocz13LmRlZmF1bHQpJiZ2b2lkIDAhPT1zP3M6MCkmJih2PSExKX1lbHNlIGlmKFgoQykpZltDXT1iLGc9ITA7ZWxzZSBpZigobnVsbD09bj92b2lkIDA6bi5pc0h5ZHJhdGVkKSYmKG51bGw9PXI/dm9pZCAwOnIuaXNIeWRyYXRlZCkmJldbQ10pe3ZhciB5PVdbQ10ucHJvY2VzcyhtLHIsbikseD1XW0NdLmFwcGx5VG87aWYoeClmb3IodmFyIGs9eC5sZW5ndGgsUz0wO1M8aztTKyspY1t4W1NdXT15O2Vsc2UgY1tDXT15fWVsc2UgY1tDXT1ifX1yJiZuJiZpJiZsPyhjLnRyYW5zZm9ybT1pKHIuZGVsdGFGaW5hbCxyLnRyZWVTY2FsZSxoP2Q6dm9pZCAwKSxhJiYoYy50cmFuc2Zvcm09YShkLGMudHJhbnNmb3JtKSksYy50cmFuc2Zvcm1PcmlnaW49bChyKSk6KGgmJihjLnRyYW5zZm9ybT1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz1lLnRyYW5zZm9ybSxhPWUudHJhbnNmb3JtS2V5cyxpPXQuZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb24sbD12b2lkIDA9PT1pfHxpLHM9dC5hbGxvd1RyYW5zZm9ybU5vbmUsYz12b2lkIDA9PT1zfHxzLHU9XCJcIjthLnNvcnQoSyk7Zm9yKHZhciBkPSExLHA9YS5sZW5ndGgsZj0wO2Y8cDtmKyspe3ZhciBoPWFbZl07dSs9KHRlW2hdfHxoKStcIihcIitvW2hdK1wiKSBcIixcInpcIj09PWgmJihkPSEwKX1yZXR1cm4hZCYmbD91Kz1cInRyYW5zbGF0ZVooMClcIjp1PXUudHJpbSgpLHI/dT1yKG8sbj9cIlwiOnUpOmMmJm4mJih1PVwibm9uZVwiKSx1fShlLG8sdixhKSksZyYmKGMudHJhbnNmb3JtT3JpZ2luPWZ1bmN0aW9uKGUpe3ZhciB0PWUub3JpZ2luWCxuPXZvaWQgMD09PXQ/XCI1MCVcIjp0LHI9ZS5vcmlnaW5ZLG89dm9pZCAwPT09cj9cIjUwJVwiOnIsYT1lLm9yaWdpblo7cmV0dXJuIG4rXCIgXCIrbytcIiBcIisodm9pZCAwPT09YT8wOmEpfShmKSkpfXZhciBsZT1mdW5jdGlvbigpe3JldHVybntzdHlsZTp7fSx0cmFuc2Zvcm06e30sdHJhbnNmb3JtS2V5czpbXSx0cmFuc2Zvcm1PcmlnaW46e30sdmFyczp7fX19O2Z1bmN0aW9uIHNlKGUsdCxuKXtmb3IodmFyIHIgaW4gdCllZSh0W3JdKXx8UShyLG4pfHwoZVtyXT10W3JdKX1mdW5jdGlvbiBjZShlLHQsbil7dmFyIGE9e30saT1mdW5jdGlvbihlLHQsbil7dmFyIGE9e307cmV0dXJuIHNlKGEsZS5zdHlsZXx8e30sZSksT2JqZWN0LmFzc2lnbihhLGZ1bmN0aW9uKGUsdCxuKXt2YXIgYT1lLnRyYW5zZm9ybVRlbXBsYXRlO3JldHVybiBvLnVzZU1lbW8oKGZ1bmN0aW9uKCl7dmFyIGU9bGUoKTtpZShlLHQsdm9pZCAwLHZvaWQgMCx7ZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246IW59LGEpO3ZhciBvPWUudmFycyxpPWUuc3R5bGU7cmV0dXJuIHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxvKSxpKX0pLFt0XSl9KGUsdCxuKSksZS50cmFuc2Zvcm1WYWx1ZXMmJihhPWUudHJhbnNmb3JtVmFsdWVzKGEpKSxhfShlLHQsbik7cmV0dXJuIEJvb2xlYW4oZS5kcmFnKSYmKGEuZHJhZ2dhYmxlPSExLGkudXNlclNlbGVjdD1pLldlYmtpdFVzZXJTZWxlY3Q9aS5XZWJraXRUb3VjaENhbGxvdXQ9XCJub25lXCIsaS50b3VjaEFjdGlvbj0hMD09PWUuZHJhZz9cIm5vbmVcIjpcInBhbi1cIisoXCJ4XCI9PT1lLmRyYWc/XCJ5XCI6XCJ4XCIpKSxhLnN0eWxlPWksYX12YXIgdWU9bmV3IFNldChbXCJpbml0aWFsXCIsXCJhbmltYXRlXCIsXCJleGl0XCIsXCJzdHlsZVwiLFwidmFyaWFudHNcIixcInRyYW5zaXRpb25cIixcInRyYW5zZm9ybVRlbXBsYXRlXCIsXCJ0cmFuc2Zvcm1WYWx1ZXNcIixcImN1c3RvbVwiLFwiaW5oZXJpdFwiLFwibGF5b3V0XCIsXCJsYXlvdXRJZFwiLFwiX2xheW91dFJlc2V0VHJhbnNmb3JtXCIsXCJvbkxheW91dEFuaW1hdGlvbkNvbXBsZXRlXCIsXCJvblZpZXdwb3J0Qm94VXBkYXRlXCIsXCJvbkxheW91dE1lYXN1cmVcIixcIm9uQmVmb3JlTGF5b3V0TWVhc3VyZVwiLFwib25BbmltYXRpb25TdGFydFwiLFwib25BbmltYXRpb25Db21wbGV0ZVwiLFwib25VcGRhdGVcIixcIm9uRHJhZ1N0YXJ0XCIsXCJvbkRyYWdcIixcIm9uRHJhZ0VuZFwiLFwib25NZWFzdXJlRHJhZ0NvbnN0cmFpbnRzXCIsXCJvbkRpcmVjdGlvbkxvY2tcIixcIm9uRHJhZ1RyYW5zaXRpb25FbmRcIixcImRyYWdcIixcImRyYWdDb250cm9sc1wiLFwiZHJhZ0xpc3RlbmVyXCIsXCJkcmFnQ29uc3RyYWludHNcIixcImRyYWdEaXJlY3Rpb25Mb2NrXCIsXCJfZHJhZ1hcIixcIl9kcmFnWVwiLFwiZHJhZ0VsYXN0aWNcIixcImRyYWdNb21lbnR1bVwiLFwiZHJhZ1Byb3BhZ2F0aW9uXCIsXCJkcmFnVHJhbnNpdGlvblwiLFwid2hpbGVEcmFnXCIsXCJvblBhblwiLFwib25QYW5TdGFydFwiLFwib25QYW5FbmRcIixcIm9uUGFuU2Vzc2lvblN0YXJ0XCIsXCJvblRhcFwiLFwib25UYXBTdGFydFwiLFwib25UYXBDYW5jZWxcIixcIm9uSG92ZXJTdGFydFwiLFwib25Ib3ZlckVuZFwiLFwid2hpbGVGb2N1c1wiLFwid2hpbGVUYXBcIixcIndoaWxlSG92ZXJcIl0pO2Z1bmN0aW9uIGRlKGUpe3JldHVybiB1ZS5oYXMoZSl9dmFyIHBlPWZ1bmN0aW9uKGUpe3JldHVybiFkZShlKX07dHJ5e3ZhciBmZT1uKDg1OTQpLlo7cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhcnRzV2l0aChcIm9uXCIpPyFkZShlKTpmZShlKX19Y2F0Y2goZSl7fWZ1bmN0aW9uIGhlKGUsdCxuKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT9lOmkucHgudHJhbnNmb3JtKHQrbiplKX12YXIgZ2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaS5weC50cmFuc2Zvcm0oZSp0KX0sdmU9e29mZnNldDpcInN0cm9rZS1kYXNob2Zmc2V0XCIsYXJyYXk6XCJzdHJva2UtZGFzaGFycmF5XCJ9LENlPXtvZmZzZXQ6XCJzdHJva2VEYXNob2Zmc2V0XCIsYXJyYXk6XCJzdHJva2VEYXNoYXJyYXlcIn07ZnVuY3Rpb24gbWUoZSx0LG4sbyxhLGksbCxzKXt2YXIgYz10LmF0dHJYLHU9dC5hdHRyWSxkPXQub3JpZ2luWCxwPXQub3JpZ2luWSxmPXQucGF0aExlbmd0aCxoPXQucGF0aFNwYWNpbmcsZz12b2lkIDA9PT1oPzE6aCx2PXQucGF0aE9mZnNldCxDPXZvaWQgMD09PXY/MDp2O2llKGUsci5fX3Jlc3QodCxbXCJhdHRyWFwiLFwiYXR0cllcIixcIm9yaWdpblhcIixcIm9yaWdpbllcIixcInBhdGhMZW5ndGhcIixcInBhdGhTcGFjaW5nXCIsXCJwYXRoT2Zmc2V0XCJdKSxuLG8sYSxpLGwscyksZS5hdHRycz1lLnN0eWxlLGUuc3R5bGU9e307dmFyIG09ZS5hdHRycyx3PWUuc3R5bGUsYj1lLmRpbWVuc2lvbnMseT1lLnRvdGFsUGF0aExlbmd0aDttLnRyYW5zZm9ybSYmKGImJih3LnRyYW5zZm9ybT1tLnRyYW5zZm9ybSksZGVsZXRlIG0udHJhbnNmb3JtKSxiJiYodm9pZCAwIT09ZHx8dm9pZCAwIT09cHx8dy50cmFuc2Zvcm0pJiYody50cmFuc2Zvcm1PcmlnaW49ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBoZSh0LGUueCxlLndpZHRoKStcIiBcIitoZShuLGUueSxlLmhlaWdodCl9KGIsdm9pZCAwIT09ZD9kOi41LHZvaWQgMCE9PXA/cDouNSkpLHZvaWQgMCE9PWMmJihtLng9Yyksdm9pZCAwIT09dSYmKG0ueT11KSx2b2lkIDAhPT15JiZ2b2lkIDAhPT1mJiZmdW5jdGlvbihlLHQsbixyLG8sYSl7dm9pZCAwPT09ciYmKHI9MSksdm9pZCAwPT09byYmKG89MCksdm9pZCAwPT09YSYmKGE9ITApO3ZhciBpPWE/dmU6Q2U7ZVtpLm9mZnNldF09Z2UoLW8sdCk7dmFyIGw9Z2Uobix0KSxzPWdlKHIsdCk7ZVtpLmFycmF5XT1sK1wiIFwiK3N9KG0seSxmLGcsQywhMSl9dmFyIHdlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxsZSgpKSx7YXR0cnM6e319KX07ZnVuY3Rpb24gYmUoZSx0KXt2YXIgbj1vLnVzZU1lbW8oKGZ1bmN0aW9uKCl7dmFyIG49d2UoKTtyZXR1cm4gbWUobix0LHZvaWQgMCx2b2lkIDAse2VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiExfSxlLnRyYW5zZm9ybVRlbXBsYXRlKSxyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sbi5hdHRycykse3N0eWxlOnIuX19hc3NpZ24oe30sbi5zdHlsZSl9KX0pLFt0XSk7aWYoZS5zdHlsZSl7dmFyIGE9e307c2UoYSxlLnN0eWxlLGUpLG4uc3R5bGU9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGEpLG4uc3R5bGUpfXJldHVybiBufWZ1bmN0aW9uIHllKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksZnVuY3Rpb24odCxuLGEsaSxsKXt2YXIgcz1pLmxhdGVzdFZhbHVlcyxjPShGKHQpP2JlOmNlKShuLHMsbCksdT1mdW5jdGlvbihlLHQsbil7dmFyIHI9e307Zm9yKHZhciBvIGluIGUpKHBlKG8pfHwhMD09PW4mJmRlKG8pfHwhdCYmIWRlKG8pKSYmKHJbb109ZVtvXSk7cmV0dXJuIHJ9KG4sXCJzdHJpbmdcIj09dHlwZW9mIHQsZSksZD1yLl9fYXNzaWduKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSx1KSxjKSx7cmVmOmF9KTtyZXR1cm4gby5jcmVhdGVFbGVtZW50KHQsZCl9fXZhciB4ZT0vKFthLXpdKShbQS1aXSkvZyxrZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKHhlLFwiJDEtJDJcIikudG9Mb3dlckNhc2UoKX07ZnVuY3Rpb24gU2UoZSx0KXt2YXIgbj10LnN0eWxlLHI9dC52YXJzO2Zvcih2YXIgbyBpbiBPYmplY3QuYXNzaWduKGUuc3R5bGUsbikscillLnN0eWxlLnNldFByb3BlcnR5KG8scltvXSl9dmFyIE9lPW5ldyBTZXQoW1wiYmFzZUZyZXF1ZW5jeVwiLFwiZGlmZnVzZUNvbnN0YW50XCIsXCJrZXJuZWxNYXRyaXhcIixcImtlcm5lbFVuaXRMZW5ndGhcIixcImtleVNwbGluZXNcIixcImtleVRpbWVzXCIsXCJsaW1pdGluZ0NvbmVBbmdsZVwiLFwibWFya2VySGVpZ2h0XCIsXCJtYXJrZXJXaWR0aFwiLFwibnVtT2N0YXZlc1wiLFwidGFyZ2V0WFwiLFwidGFyZ2V0WVwiLFwic3VyZmFjZVNjYWxlXCIsXCJzcGVjdWxhckNvbnN0YW50XCIsXCJzcGVjdWxhckV4cG9uZW50XCIsXCJzdGREZXZpYXRpb25cIixcInRhYmxlVmFsdWVzXCIsXCJ2aWV3Qm94XCIsXCJncmFkaWVudFRyYW5zZm9ybVwiXSk7ZnVuY3Rpb24gTWUoZSx0KXtmb3IodmFyIG4gaW4gU2UoZSx0KSx0LmF0dHJzKWUuc2V0QXR0cmlidXRlKE9lLmhhcyhuKT9uOmtlKG4pLHQuYXR0cnNbbl0pfWZ1bmN0aW9uIExlKGUpe3ZhciB0PWUuc3R5bGUsbj17fTtmb3IodmFyIHIgaW4gdCkoZWUodFtyXSl8fFEocixlKSkmJihuW3JdPXRbcl0pO3JldHVybiBufWZ1bmN0aW9uIF9lKGUpe3ZhciB0PUxlKGUpO2Zvcih2YXIgbiBpbiBlKWVlKGVbbl0pJiYodFtcInhcIj09PW58fFwieVwiPT09bj9cImF0dHJcIituLnRvVXBwZXJDYXNlKCk6bl09ZVtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gUGUoZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuc3RhcnR9dmFyIEVlPWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfSxqZT1mdW5jdGlvbihlKXtyZXR1cm4gQm9vbGVhbihlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmZS5taXgmJmUudG9WYWx1ZSl9LFJlPWZ1bmN0aW9uKGUpe3JldHVybiBFZShlKT9lW2UubGVuZ3RoLTFdfHwwOmV9O2Z1bmN0aW9uIEllKGUpe3ZhciB0PWVlKGUpP2UuZ2V0KCk6ZTtyZXR1cm4gamUodCk/dC50b1ZhbHVlKCk6dH1mdW5jdGlvbiBWZShlLHQsbixyKXt2YXIgbz1lLnNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyxhPWUuY3JlYXRlUmVuZGVyU3RhdGUsaT1lLm9uTW91bnQsbD17bGF0ZXN0VmFsdWVzOkFlKHQsbixyLG8pLHJlbmRlclN0YXRlOmEoKX07cmV0dXJuIGkmJihsLm1vdW50PWZ1bmN0aW9uKGUpe3JldHVybiBpKHQsZSxsKX0pLGx9dmFyIEhlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciByPW8udXNlQ29udGV4dChiKSxhPW8udXNlQ29udGV4dCh4KTtyZXR1cm4gbj9WZShlLHQscixhKTprKChmdW5jdGlvbigpe3JldHVybiBWZShlLHQscixhKX0pKX19O2Z1bmN0aW9uIEFlKGUsdCxuLG8pe3ZhciBhPXt9LGk9ITE9PT0obnVsbD09bj92b2lkIDA6bi5pbml0aWFsKSxsPW8oZSk7Zm9yKHZhciBzIGluIGwpYVtzXT1JZShsW3NdKTt2YXIgYz1lLmluaXRpYWwsdT1lLmFuaW1hdGUsZD1UKGUpLHA9RChlKTt0JiZwJiYhZCYmITEhPT1lLmluaGVyaXQmJihudWxsIT1jfHwoYz10LmluaXRpYWwpLG51bGwhPXV8fCh1PXQuYW5pbWF0ZSkpO3ZhciBmPWl8fCExPT09Yz91OmM7cmV0dXJuIGYmJlwiYm9vbGVhblwiIT10eXBlb2YgZiYmIVBlKGYpJiYoQXJyYXkuaXNBcnJheShmKT9mOltmXSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49SChlLHQpO2lmKG4pe3ZhciBvPW4udHJhbnNpdGlvbkVuZDtuLnRyYW5zaXRpb247dmFyIGk9ci5fX3Jlc3QobixbXCJ0cmFuc2l0aW9uRW5kXCIsXCJ0cmFuc2l0aW9uXCJdKTtmb3IodmFyIGwgaW4gaSlhW2xdPWlbbF07Zm9yKHZhciBsIGluIG8pYVtsXT1vW2xdfX0pKSxhfXZhciBUZSxEZT17dXNlVmlzdWFsU3RhdGU6SGUoe3NjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczpfZSxjcmVhdGVSZW5kZXJTdGF0ZTp3ZSxvbk1vdW50OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLnJlbmRlclN0YXRlLG89bi5sYXRlc3RWYWx1ZXM7dHJ5e3IuZGltZW5zaW9ucz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmdldEJCb3g/dC5nZXRCQm94KCk6dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jYXRjaChlKXtyLmRpbWVuc2lvbnM9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19XCJwYXRoXCI9PT10LnRhZ05hbWUmJihyLnRvdGFsUGF0aExlbmd0aD10LmdldFRvdGFsTGVuZ3RoKCkpLG1lKHIsbyx2b2lkIDAsdm9pZCAwLHtlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjohMX0sZS50cmFuc2Zvcm1UZW1wbGF0ZSksTWUodCxyKX19KX0sQmU9e3VzZVZpc3VhbFN0YXRlOkhlKHtzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6TGUsY3JlYXRlUmVuZGVyU3RhdGU6bGV9KX07ZnVuY3Rpb24gWmUoZSx0LG4sbyl7dmFyIGE9dC5mb3J3YXJkTW90aW9uUHJvcHMsaT12b2lkIDAhPT1hJiZhLGw9RihlKT9EZTpCZTtyZXR1cm4gci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGwpLHtwcmVsb2FkZWRGZWF0dXJlczpuLHVzZVJlbmRlcjp5ZShpKSxjcmVhdGVWaXN1YWxFbGVtZW50Om8sQ29tcG9uZW50OmV9KX1mdW5jdGlvbiAkZShlLHQsbixyKXtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKHQsbixyKSxmdW5jdGlvbigpe3JldHVybiBlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLHIpfX1mdW5jdGlvbiBOZShlLHQsbixyKXtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXt2YXIgbz1lLmN1cnJlbnQ7aWYobiYmbylyZXR1cm4gJGUobyx0LG4scil9KSxbZSx0LG4scl0pfWZ1bmN0aW9uIEZlKGUpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBQb2ludGVyRXZlbnQmJmUgaW5zdGFuY2VvZiBQb2ludGVyRXZlbnQ/IShcIm1vdXNlXCIhPT1lLnBvaW50ZXJUeXBlKTplIGluc3RhbmNlb2YgTW91c2VFdmVudH1mdW5jdGlvbiBXZShlKXtyZXR1cm4hIWUudG91Y2hlc30hZnVuY3Rpb24oZSl7ZS5BbmltYXRlPVwiYW5pbWF0ZVwiLGUuSG92ZXI9XCJ3aGlsZUhvdmVyXCIsZS5UYXA9XCJ3aGlsZVRhcFwiLGUuRHJhZz1cIndoaWxlRHJhZ1wiLGUuRm9jdXM9XCJ3aGlsZUZvY3VzXCIsZS5FeGl0PVwiZXhpdFwifShUZXx8KFRlPXt9KSk7dmFyIFVlPXtwYWdlWDowLHBhZ2VZOjB9O2Z1bmN0aW9uIHplKGUsdCl7dm9pZCAwPT09dCYmKHQ9XCJwYWdlXCIpO3ZhciBuPWUudG91Y2hlc1swXXx8ZS5jaGFuZ2VkVG91Y2hlc1swXXx8VWU7cmV0dXJue3g6blt0K1wiWFwiXSx5Om5bdCtcIllcIl19fWZ1bmN0aW9uIEdlKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PVwicGFnZVwiKSx7eDplW3QrXCJYXCJdLHk6ZVt0K1wiWVwiXX19ZnVuY3Rpb24gS2UoZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9XCJwYWdlXCIpLHtwb2ludDpXZShlKT96ZShlLHQpOkdlKGUsdCl9fXZhciBxZT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgbixyPWZ1bmN0aW9uKHQpe3JldHVybiBlKHQsS2UodCkpfTtyZXR1cm4gdD8obj1yLGZ1bmN0aW9uKGUpe3ZhciB0PWUgaW5zdGFuY2VvZiBNb3VzZUV2ZW50OyghdHx8dCYmMD09PWUuYnV0dG9uKSYmbihlKX0pOnJ9LFllPWZ1bmN0aW9uKCl7cmV0dXJuIEUmJm51bGw9PT13aW5kb3cub25wb2ludGVyZG93bn0sSmU9ZnVuY3Rpb24oKXtyZXR1cm4gRSYmbnVsbD09PXdpbmRvdy5vbnRvdWNoc3RhcnR9LFhlPWZ1bmN0aW9uKCl7cmV0dXJuIEUmJm51bGw9PT13aW5kb3cub25tb3VzZWRvd259LFFlPXtwb2ludGVyZG93bjpcIm1vdXNlZG93blwiLHBvaW50ZXJtb3ZlOlwibW91c2Vtb3ZlXCIscG9pbnRlcnVwOlwibW91c2V1cFwiLHBvaW50ZXJjYW5jZWw6XCJtb3VzZWNhbmNlbFwiLHBvaW50ZXJvdmVyOlwibW91c2VvdmVyXCIscG9pbnRlcm91dDpcIm1vdXNlb3V0XCIscG9pbnRlcmVudGVyOlwibW91c2VlbnRlclwiLHBvaW50ZXJsZWF2ZTpcIm1vdXNlbGVhdmVcIn0sZXQ9e3BvaW50ZXJkb3duOlwidG91Y2hzdGFydFwiLHBvaW50ZXJtb3ZlOlwidG91Y2htb3ZlXCIscG9pbnRlcnVwOlwidG91Y2hlbmRcIixwb2ludGVyY2FuY2VsOlwidG91Y2hjYW5jZWxcIn07ZnVuY3Rpb24gdHQoZSl7cmV0dXJuIFllKCk/ZTpKZSgpP2V0W2VdOlhlKCk/UWVbZV06ZX1mdW5jdGlvbiBudChlLHQsbixyKXtyZXR1cm4gJGUoZSx0dCh0KSxxZShuLFwicG9pbnRlcmRvd25cIj09PXQpLHIpfWZ1bmN0aW9uIHJ0KGUsdCxuLHIpe3JldHVybiBOZShlLHR0KHQpLG4mJnFlKG4sXCJwb2ludGVyZG93blwiPT09dCkscil9ZnVuY3Rpb24gb3QoZSl7dmFyIHQ9bnVsbDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXQmJih0PWUsZnVuY3Rpb24oKXt0PW51bGx9KX19dmFyIGF0PW90KFwiZHJhZ0hvcml6b250YWxcIiksaXQ9b3QoXCJkcmFnVmVydGljYWxcIik7ZnVuY3Rpb24gbHQoZSl7dmFyIHQ9ITE7aWYoXCJ5XCI9PT1lKXQ9aXQoKTtlbHNlIGlmKFwieFwiPT09ZSl0PWF0KCk7ZWxzZXt2YXIgbj1hdCgpLHI9aXQoKTtuJiZyP3Q9ZnVuY3Rpb24oKXtuKCkscigpfToobiYmbigpLHImJnIoKSl9cmV0dXJuIHR9ZnVuY3Rpb24gc3QoKXt2YXIgZT1sdCghMCk7cmV0dXJuIWV8fChlKCksITEpfWZ1bmN0aW9uIGN0KGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocixvKXt2YXIgYTtGZShyKSYmIXN0KCkmJihudWxsPT1ufHxuKHIsbyksbnVsbD09PShhPWUuYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1hfHxhLnNldEFjdGl2ZShUZS5Ib3Zlcix0KSl9fXZhciB1dD1mdW5jdGlvbihlLHQpe3JldHVybiEhdCYmKGU9PT10fHx1dChlLHQucGFyZW50RWxlbWVudCkpfTtmdW5jdGlvbiBkdChlKXtyZXR1cm4gby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUoKX19KSxbXSl9dmFyIHB0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KSxudWxsfX0sZnQ9e3RhcDpwdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vblRhcCxuPWUub25UYXBTdGFydCxyPWUub25UYXBDYW5jZWwsYT1lLndoaWxlVGFwLGk9ZS52aXN1YWxFbGVtZW50LHM9dHx8bnx8cnx8YSxjPW8udXNlUmVmKCExKSx1PW8udXNlUmVmKG51bGwpO2Z1bmN0aW9uIGQoKXt2YXIgZTtudWxsPT09KGU9dS5jdXJyZW50KXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHUpLHUuY3VycmVudD1udWxsfWZ1bmN0aW9uIHAoKXt2YXIgZTtyZXR1cm4gZCgpLGMuY3VycmVudD0hMSxudWxsPT09KGU9aS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PWV8fGUuc2V0QWN0aXZlKFRlLlRhcCwhMSksIXN0KCl9ZnVuY3Rpb24gZihlLG4pe3AoKSYmKHV0KGkuZ2V0SW5zdGFuY2UoKSxlLnRhcmdldCk/bnVsbD09dHx8dChlLG4pOm51bGw9PXJ8fHIoZSxuKSl9ZnVuY3Rpb24gaChlLHQpe3AoKSYmKG51bGw9PXJ8fHIoZSx0KSl9cnQoaSxcInBvaW50ZXJkb3duXCIscz9mdW5jdGlvbihlLHQpe3ZhciByO2QoKSxjLmN1cnJlbnR8fChjLmN1cnJlbnQ9ITAsdS5jdXJyZW50PWwucGlwZShudCh3aW5kb3csXCJwb2ludGVydXBcIixmKSxudCh3aW5kb3csXCJwb2ludGVyY2FuY2VsXCIsaCkpLG51bGw9PW58fG4oZSx0KSxudWxsPT09KHI9aS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PXJ8fHIuc2V0QWN0aXZlKFRlLlRhcCwhMCkpfTp2b2lkIDApLGR0KGQpfSkpLGZvY3VzOnB0KChmdW5jdGlvbihlKXt2YXIgdD1lLndoaWxlRm9jdXMsbj1lLnZpc3VhbEVsZW1lbnQ7TmUobixcImZvY3VzXCIsdD9mdW5jdGlvbigpe3ZhciBlO251bGw9PT0oZT1uLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZXx8ZS5zZXRBY3RpdmUoVGUuRm9jdXMsITApfTp2b2lkIDApLE5lKG4sXCJibHVyXCIsdD9mdW5jdGlvbigpe3ZhciBlO251bGw9PT0oZT1uLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZXx8ZS5zZXRBY3RpdmUoVGUuRm9jdXMsITEpfTp2b2lkIDApfSkpLGhvdmVyOnB0KChmdW5jdGlvbihlKXt2YXIgdD1lLm9uSG92ZXJTdGFydCxuPWUub25Ib3ZlckVuZCxyPWUud2hpbGVIb3ZlcixvPWUudmlzdWFsRWxlbWVudDtydChvLFwicG9pbnRlcmVudGVyXCIsdHx8cj9jdChvLCEwLHQpOnZvaWQgMCkscnQobyxcInBvaW50ZXJsZWF2ZVwiLG58fHI/Y3QobywhMSxuKTp2b2lkIDApfSkpfTtmdW5jdGlvbiBodChlLHQpe2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiExO3ZhciBuPXQubGVuZ3RoO2lmKG4hPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPG47cisrKWlmKHRbcl0hPT1lW3JdKXJldHVybiExO3JldHVybiEwfXZhciBndD1mdW5jdGlvbihlKXtyZXR1cm4gMWUzKmV9LHZ0PXtsaW5lYXI6bC5saW5lYXIsZWFzZUluOmwuZWFzZUluLGVhc2VJbk91dDpsLmVhc2VJbk91dCxlYXNlT3V0OmwuZWFzZU91dCxjaXJjSW46bC5jaXJjSW4sY2lyY0luT3V0OmwuY2lyY0luT3V0LGNpcmNPdXQ6bC5jaXJjT3V0LGJhY2tJbjpsLmJhY2tJbixiYWNrSW5PdXQ6bC5iYWNrSW5PdXQsYmFja091dDpsLmJhY2tPdXQsYW50aWNpcGF0ZTpsLmFudGljaXBhdGUsYm91bmNlSW46bC5ib3VuY2VJbixib3VuY2VJbk91dDpsLmJvdW5jZUluT3V0LGJvdW5jZU91dDpsLmJvdW5jZU91dH0sQ3Q9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7YS5pbnZhcmlhbnQoND09PWUubGVuZ3RoLFwiQ3ViaWMgYmV6aWVyIGFycmF5cyBtdXN0IGNvbnRhaW4gZm91ciBudW1lcmljYWwgdmFsdWVzLlwiKTt2YXIgdD1yLl9fcmVhZChlLDQpLG49dFswXSxvPXRbMV0saT10WzJdLHM9dFszXTtyZXR1cm4gbC5jdWJpY0JlemllcihuLG8saSxzKX1yZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT8oYS5pbnZhcmlhbnQodm9pZCAwIT09dnRbZV0sXCJJbnZhbGlkIGVhc2luZyB0eXBlICdcIitlK1wiJ1wiKSx2dFtlXSk6ZX0sbXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJlwibnVtYmVyXCIhPXR5cGVvZiBlWzBdfSx3dD1mdW5jdGlvbihlLHQpe3JldHVybiEoXCJ6SW5kZXhcIj09PWV8fFwibnVtYmVyXCIhPXR5cGVvZiB0JiYhQXJyYXkuaXNBcnJheSh0KSYmKFwic3RyaW5nXCIhPXR5cGVvZiB0fHwhaS5jb21wbGV4LnRlc3QodCl8fHQuc3RhcnRzV2l0aChcInVybChcIikpKX0sYnQ9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcInNwcmluZ1wiLHN0aWZmbmVzczo1MDAsZGFtcGluZzoyNSxyZXN0RGVsdGE6LjUscmVzdFNwZWVkOjEwfX0seXQ9ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6XCJzcHJpbmdcIixzdGlmZm5lc3M6NTUwLGRhbXBpbmc6MD09PWU/MipNYXRoLnNxcnQoNTUwKTozMCxyZXN0RGVsdGE6LjAxLHJlc3RTcGVlZDoxMH19LHh0PWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJrZXlmcmFtZXNcIixlYXNlOlwibGluZWFyXCIsZHVyYXRpb246LjN9fSxrdD1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTpcImtleWZyYW1lc1wiLGR1cmF0aW9uOi44LHZhbHVlczplfX0sU3Q9e3g6YnQseTpidCx6OmJ0LHJvdGF0ZTpidCxyb3RhdGVYOmJ0LHJvdGF0ZVk6YnQscm90YXRlWjpidCxzY2FsZVg6eXQsc2NhbGVZOnl0LHNjYWxlOnl0LG9wYWNpdHk6eHQsYmFja2dyb3VuZENvbG9yOnh0LGNvbG9yOnh0LGRlZmF1bHQ6eXR9LE90PWZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG49RWUodCk/a3Q6U3RbZV18fFN0LmRlZmF1bHQsci5fX2Fzc2lnbih7dG86dH0sbih0KSl9LE10PXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxhZSkse2NvbG9yOmkuY29sb3IsYmFja2dyb3VuZENvbG9yOmkuY29sb3Isb3V0bGluZUNvbG9yOmkuY29sb3IsZmlsbDppLmNvbG9yLHN0cm9rZTppLmNvbG9yLGJvcmRlckNvbG9yOmkuY29sb3IsYm9yZGVyVG9wQ29sb3I6aS5jb2xvcixib3JkZXJSaWdodENvbG9yOmkuY29sb3IsYm9yZGVyQm90dG9tQ29sb3I6aS5jb2xvcixib3JkZXJMZWZ0Q29sb3I6aS5jb2xvcixmaWx0ZXI6aS5maWx0ZXIsV2Via2l0RmlsdGVyOmkuZmlsdGVyfSksTHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIE10W2VdfTtmdW5jdGlvbiBfdChlLHQpe3ZhciBuLHI9THQoZSk7cmV0dXJuIHIhPT1pLmZpbHRlciYmKHI9aS5jb21wbGV4KSxudWxsPT09KG49ci5nZXRBbmltYXRhYmxlTm9uZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uY2FsbChyLHQpfXZhciBQdD0hMTtmdW5jdGlvbiBFdChlKXtyZXR1cm4gMD09PWV8fFwic3RyaW5nXCI9PXR5cGVvZiBlJiYwPT09cGFyc2VGbG9hdChlKSYmLTE9PT1lLmluZGV4T2YoXCIgXCIpfWZ1bmN0aW9uIGp0KGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlPzA6X3QoXCJcIixlKX1mdW5jdGlvbiBSdChlLHQpe3JldHVybiBlW3RdfHxlLmRlZmF1bHR8fGV9ZnVuY3Rpb24gSXQoZSx0LG4sbyl7cmV0dXJuIHZvaWQgMD09PW8mJihvPXt9KSx0LnN0YXJ0KChmdW5jdGlvbihpKXt2YXIgcyxjLHU9ZnVuY3Rpb24oZSx0LG4sbyxpKXt2YXIgcyxjPVJ0KG8sZSksdT1udWxsIT09KHM9Yy5mcm9tKSYmdm9pZCAwIT09cz9zOnQuZ2V0KCksZD13dChlLG4pO1wibm9uZVwiPT09dSYmZCYmXCJzdHJpbmdcIj09dHlwZW9mIG4/dT1fdChlLG4pOkV0KHUpJiZcInN0cmluZ1wiPT10eXBlb2Ygbj91PWp0KG4pOiFBcnJheS5pc0FycmF5KG4pJiZFdChuKSYmXCJzdHJpbmdcIj09dHlwZW9mIHUmJihuPWp0KHUpKTt2YXIgcD13dChlLHUpO3JldHVybiBhLndhcm5pbmcocD09PWQsXCJZb3UgYXJlIHRyeWluZyB0byBhbmltYXRlIFwiK2UrJyBmcm9tIFwiJyt1KydcIiB0byBcIicrbisnXCIuICcrdStcIiBpcyBub3QgYW4gYW5pbWF0YWJsZSB2YWx1ZSAtIHRvIGVuYWJsZSB0aGlzIGFuaW1hdGlvbiBzZXQgXCIrdStcIiB0byBhIHZhbHVlIGFuaW1hdGFibGUgdG8gXCIrbitcIiB2aWEgdGhlIGBzdHlsZWAgcHJvcGVydHkuXCIpLHAmJmQmJiExIT09Yy50eXBlP2Z1bmN0aW9uKCl7dmFyIG89e2Zyb206dSx0bzpuLHZlbG9jaXR5OnQuZ2V0VmVsb2NpdHkoKSxvbkNvbXBsZXRlOmksb25VcGRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2V0KGUpfX07cmV0dXJuXCJpbmVydGlhXCI9PT1jLnR5cGV8fFwiZGVjYXlcIj09PWMudHlwZT9sLmluZXJ0aWEoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG8pLGMpKTpsLmFuaW1hdGUoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgbztyZXR1cm4gQXJyYXkuaXNBcnJheSh0LnRvKSYmKG51bGwhPT0obz1lLmR1cmF0aW9uKSYmdm9pZCAwIT09b3x8KGUuZHVyYXRpb249LjgpKSxmdW5jdGlvbihlKXtBcnJheS5pc0FycmF5KGUudG8pJiZudWxsPT09ZS50b1swXSYmKGUudG89ci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKGUudG8pKSxlLnRvWzBdPWUuZnJvbSl9KHQpLGZ1bmN0aW9uKGUpe2Uud2hlbixlLmRlbGF5LGUuZGVsYXlDaGlsZHJlbixlLnN0YWdnZXJDaGlsZHJlbixlLnN0YWdnZXJEaXJlY3Rpb24sZS5yZXBlYXQsZS5yZXBlYXRUeXBlLGUucmVwZWF0RGVsYXksZS5mcm9tO3ZhciB0PXIuX19yZXN0KGUsW1wid2hlblwiLFwiZGVsYXlcIixcImRlbGF5Q2hpbGRyZW5cIixcInN0YWdnZXJDaGlsZHJlblwiLFwic3RhZ2dlckRpcmVjdGlvblwiLFwicmVwZWF0XCIsXCJyZXBlYXRUeXBlXCIsXCJyZXBlYXREZWxheVwiLFwiZnJvbVwiXSk7cmV0dXJuISFPYmplY3Qua2V5cyh0KS5sZW5ndGh9KGUpfHwoZT1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sZSksT3Qobix0LnRvKSkpLHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSx0KSxmdW5jdGlvbihlKXt2YXIgdD1lLmVhc2Usbj1lLnRpbWVzLG89ZS55b3lvLGk9ZS5mbGlwLGw9ZS5sb29wLHM9ci5fX3Jlc3QoZSxbXCJlYXNlXCIsXCJ0aW1lc1wiLFwieW95b1wiLFwiZmxpcFwiLFwibG9vcFwiXSksYz1yLl9fYXNzaWduKHt9LHMpO3JldHVybiBuJiYoYy5vZmZzZXQ9bikscy5kdXJhdGlvbiYmKGMuZHVyYXRpb249Z3Qocy5kdXJhdGlvbikpLHMucmVwZWF0RGVsYXkmJihjLnJlcGVhdERlbGF5PWd0KHMucmVwZWF0RGVsYXkpKSx0JiYoYy5lYXNlPW10KHQpP3QubWFwKEN0KTpDdCh0KSksXCJ0d2VlblwiPT09cy50eXBlJiYoYy50eXBlPVwia2V5ZnJhbWVzXCIpLChvfHxsfHxpKSYmKGEud2FybmluZyghUHQsXCJ5b3lvLCBsb29wIGFuZCBmbGlwIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIEFQSS4gUmVwbGFjZSB3aXRoIHJlcGVhdCBhbmQgcmVwZWF0VHlwZSBvcHRpb25zLlwiKSxQdD0hMCxvP2MucmVwZWF0VHlwZT1cInJldmVyc2VcIjpsP2MucmVwZWF0VHlwZT1cImxvb3BcIjppJiYoYy5yZXBlYXRUeXBlPVwibWlycm9yXCIpLGMucmVwZWF0PWx8fG98fGl8fHMucmVwZWF0KSxcInNwcmluZ1wiIT09cy50eXBlJiYoYy50eXBlPVwia2V5ZnJhbWVzXCIpLGN9KGUpKX0oYyxvLGUpKSx7b25VcGRhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ7by5vblVwZGF0ZShlKSxudWxsPT09KHQ9Yy5vblVwZGF0ZSl8fHZvaWQgMD09PXR8fHQuY2FsbChjLGUpfSxvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dmFyIGU7by5vbkNvbXBsZXRlKCksbnVsbD09PShlPWMub25Db21wbGV0ZSl8fHZvaWQgMD09PWV8fGUuY2FsbChjKX19KSl9OmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHQuc2V0KG4pLGkoKSxudWxsPT09KGU9bnVsbD09Yz92b2lkIDA6Yy5vbkNvbXBsZXRlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKGMpLHtzdG9wOmZ1bmN0aW9uKCl7fX19fShlLHQsbixvLGkpLGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbnVsbCE9PShuPShSdChlLHQpfHx7fSkuZGVsYXkpJiZ2b2lkIDAhPT1uP246MH0obyxlKSxwPWZ1bmN0aW9uKCl7cmV0dXJuIGM9dSgpfTtyZXR1cm4gZD9zPXNldFRpbWVvdXQocCxndChkKSk6cCgpLGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHMpLG51bGw9PWN8fGMuc3RvcCgpfX0pKX1mdW5jdGlvbiBWdChlLHQpey0xPT09ZS5pbmRleE9mKHQpJiZlLnB1c2godCl9ZnVuY3Rpb24gSHQoZSx0KXt2YXIgbj1lLmluZGV4T2YodCk7bj4tMSYmZS5zcGxpY2UobiwxKX12YXIgQXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5zdWJzY3JpcHRpb25zPVtdfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gVnQodGhpcy5zdWJzY3JpcHRpb25zLGUpLGZ1bmN0aW9uKCl7cmV0dXJuIEh0KHQuc3Vic2NyaXB0aW9ucyxlKX19LGUucHJvdG90eXBlLm5vdGlmeT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aDtpZihyKWlmKDE9PT1yKXRoaXMuc3Vic2NyaXB0aW9uc1swXShlLHQsbik7ZWxzZSBmb3IodmFyIG89MDtvPHI7bysrKXt2YXIgYT10aGlzLnN1YnNjcmlwdGlvbnNbb107YSYmYShlLHQsbil9fSxlLnByb3RvdHlwZS5nZXRTaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9ucy5sZW5ndGh9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aD0wfSxlfSgpLFR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdCxuPXRoaXM7dGhpcy50aW1lRGVsdGE9MCx0aGlzLmxhc3RVcGRhdGVkPTAsdGhpcy51cGRhdGVTdWJzY3JpYmVycz1uZXcgQXQsdGhpcy52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzPW5ldyBBdCx0aGlzLnJlbmRlclN1YnNjcmliZXJzPW5ldyBBdCx0aGlzLmNhblRyYWNrVmVsb2NpdHk9ITEsdGhpcy51cGRhdGVBbmROb3RpZnk9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0hMCksbi5wcmV2PW4uY3VycmVudCxuLmN1cnJlbnQ9ZTt2YXIgcj1zLmdldEZyYW1lRGF0YSgpLG89ci5kZWx0YSxhPXIudGltZXN0YW1wO24ubGFzdFVwZGF0ZWQhPT1hJiYobi50aW1lRGVsdGE9byxuLmxhc3RVcGRhdGVkPWEscC5kZWZhdWx0LnBvc3RSZW5kZXIobi5zY2hlZHVsZVZlbG9jaXR5Q2hlY2spKSxuLnByZXYhPT1uLmN1cnJlbnQmJm4udXBkYXRlU3Vic2NyaWJlcnMubm90aWZ5KG4uY3VycmVudCksbi52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLmdldFNpemUoKSYmbi52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLm5vdGlmeShuLmdldFZlbG9jaXR5KCkpLHQmJm4ucmVuZGVyU3Vic2NyaWJlcnMubm90aWZ5KG4uY3VycmVudCl9LHRoaXMuc2NoZWR1bGVWZWxvY2l0eUNoZWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHAuZGVmYXVsdC5wb3N0UmVuZGVyKG4udmVsb2NpdHlDaGVjayl9LHRoaXMudmVsb2NpdHlDaGVjaz1mdW5jdGlvbihlKXtlLnRpbWVzdGFtcCE9PW4ubGFzdFVwZGF0ZWQmJihuLnByZXY9bi5jdXJyZW50LG4udmVsb2NpdHlVcGRhdGVTdWJzY3JpYmVycy5ub3RpZnkobi5nZXRWZWxvY2l0eSgpKSl9LHRoaXMuaGFzQW5pbWF0ZWQ9ITEsdGhpcy5wcmV2PXRoaXMuY3VycmVudD1lLHRoaXMuY2FuVHJhY2tWZWxvY2l0eT0odD10aGlzLmN1cnJlbnQsIWlzTmFOKHBhcnNlRmxvYXQodCkpKX1yZXR1cm4gZS5wcm90b3R5cGUub25DaGFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudXBkYXRlU3Vic2NyaWJlcnMuYWRkKGUpfSxlLnByb3RvdHlwZS5jbGVhckxpc3RlbmVycz1mdW5jdGlvbigpe3RoaXMudXBkYXRlU3Vic2NyaWJlcnMuY2xlYXIoKX0sZS5wcm90b3R5cGUub25SZW5kZXJSZXF1ZXN0PWZ1bmN0aW9uKGUpe3JldHVybiBlKHRoaXMuZ2V0KCkpLHRoaXMucmVuZGVyU3Vic2NyaWJlcnMuYWRkKGUpfSxlLnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24oZSl7dGhpcy5wYXNzaXZlRWZmZWN0PWV9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSEwKSx0JiZ0aGlzLnBhc3NpdmVFZmZlY3Q/dGhpcy5wYXNzaXZlRWZmZWN0KGUsdGhpcy51cGRhdGVBbmROb3RpZnkpOnRoaXMudXBkYXRlQW5kTm90aWZ5KGUsdCl9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LGUucHJvdG90eXBlLmdldFByZXZpb3VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldn0sZS5wcm90b3R5cGUuZ2V0VmVsb2NpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5UcmFja1ZlbG9jaXR5P2wudmVsb2NpdHlQZXJTZWNvbmQocGFyc2VGbG9hdCh0aGlzLmN1cnJlbnQpLXBhcnNlRmxvYXQodGhpcy5wcmV2KSx0aGlzLnRpbWVEZWx0YSk6MH0sZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5zdG9wKCksbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4pe3QuaGFzQW5pbWF0ZWQ9ITAsdC5zdG9wQW5pbWF0aW9uPWUobil9KSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdC5jbGVhckFuaW1hdGlvbigpfSkpfSxlLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7dGhpcy5zdG9wQW5pbWF0aW9uJiZ0aGlzLnN0b3BBbmltYXRpb24oKSx0aGlzLmNsZWFyQW5pbWF0aW9uKCl9LGUucHJvdG90eXBlLmlzQW5pbWF0aW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnN0b3BBbmltYXRpb259LGUucHJvdG90eXBlLmNsZWFyQW5pbWF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5zdG9wQW5pbWF0aW9uPW51bGx9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZVN1YnNjcmliZXJzLmNsZWFyKCksdGhpcy5yZW5kZXJTdWJzY3JpYmVycy5jbGVhcigpLHRoaXMuc3RvcCgpfSxlfSgpO2Z1bmN0aW9uIER0KGUpe3JldHVybiBuZXcgVHQoZSl9dmFyIEJ0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXN0KGUpfX0sWnQ9W2kubnVtYmVyLGkucHgsaS5wZXJjZW50LGkuZGVncmVlcyxpLnZ3LGkudmgse3Rlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuXCJhdXRvXCI9PT1lfSxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZX19XSwkdD1mdW5jdGlvbihlKXtyZXR1cm4gWnQuZmluZChCdChlKSl9LE50PXIuX19zcHJlYWRBcnJheShyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQoWnQpKSxbaS5jb2xvcixpLmNvbXBsZXhdKTtmdW5jdGlvbiBGdChlLHQsbil7ZS5oYXNWYWx1ZSh0KT9lLmdldFZhbHVlKHQpLnNldChuKTplLmFkZFZhbHVlKHQsRHQobikpfWZ1bmN0aW9uIFd0KGUsdCl7dmFyIG49QShlLHQpLG89bj9lLm1ha2VUYXJnZXRBbmltYXRhYmxlKG4sITEpOnt9LGE9by50cmFuc2l0aW9uRW5kLGk9dm9pZCAwPT09YT97fTphO28udHJhbnNpdGlvbjt2YXIgbD1yLl9fcmVzdChvLFtcInRyYW5zaXRpb25FbmRcIixcInRyYW5zaXRpb25cIl0pO2Zvcih2YXIgcyBpbiBsPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxsKSxpKSlGdChlLHMsUmUobFtzXSkpfWZ1bmN0aW9uIFV0KGUsdCl7ci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKHQpKS5yZXZlcnNlKCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHIsbz1lLmdldFZhcmlhbnQobik7byYmV3QoZSxvKSxudWxsPT09KHI9ZS52YXJpYW50Q2hpbGRyZW4pfHx2b2lkIDA9PT1yfHxyLmZvckVhY2goKGZ1bmN0aW9uKGUpe1V0KGUsdCl9KSl9KSl9ZnVuY3Rpb24genQoZSx0LG4pe3ZhciByLG8sYSxsLHMsYz1PYmplY3Qua2V5cyh0KS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFlLmhhc1ZhbHVlKHQpfSkpLHU9Yy5sZW5ndGg7aWYodSlmb3IodmFyIGQ9MDtkPHU7ZCsrKXt2YXIgcD1jW2RdLGY9dFtwXSxoPW51bGw7QXJyYXkuaXNBcnJheShmKSYmKGg9ZlswXSksbnVsbD09PWgmJihoPW51bGwhPT0obz1udWxsIT09KHI9bltwXSkmJnZvaWQgMCE9PXI/cjplLnJlYWRWYWx1ZShwKSkmJnZvaWQgMCE9PW8/bzp0W3BdKSxudWxsIT1oJiYoXCJzdHJpbmdcIj09dHlwZW9mIGgmJi9eXFwtP1xcZCpcXC4/XFxkKyQvLnRlc3QoaCk/aD1wYXJzZUZsb2F0KGgpOihzPWgsIU50LmZpbmQoQnQocykpJiZpLmNvbXBsZXgudGVzdChmKSYmKGg9X3QocCxmKSkpLGUuYWRkVmFsdWUocCxEdChoKSksbnVsbCE9PShhPShsPW4pW3BdKSYmdm9pZCAwIT09YXx8KGxbcF09aCksZS5zZXRCYXNlVGFyZ2V0KHAsaCkpfX1mdW5jdGlvbiBHdChlLHQpe2lmKHQpcmV0dXJuKHRbZV18fHQuZGVmYXVsdHx8dCkuZnJvbX1mdW5jdGlvbiBLdChlLHQsbil7dmFyIHIsbyxhPXt9O2Zvcih2YXIgaSBpbiBlKWFbaV09bnVsbCE9PShyPUd0KGksdCkpJiZ2b2lkIDAhPT1yP3I6bnVsbD09PShvPW4uZ2V0VmFsdWUoaSkpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmdldCgpO3JldHVybiBhfWZ1bmN0aW9uIHF0KGUsdCxuKXt2YXIgcjtpZih2b2lkIDA9PT1uJiYobj17fSksZS5ub3RpZnlBbmltYXRpb25TdGFydCgpLEFycmF5LmlzQXJyYXkodCkpe3ZhciBvPXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gWXQoZSx0LG4pfSkpO3I9UHJvbWlzZS5hbGwobyl9ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgdClyPVl0KGUsdCxuKTtlbHNle3ZhciBhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/QShlLHQsbi5jdXN0b20pOnQ7cj1KdChlLGEsbil9cmV0dXJuIHIudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZS5ub3RpZnlBbmltYXRpb25Db21wbGV0ZSh0KX0pKX1mdW5jdGlvbiBZdChlLHQsbil7dmFyIG87dm9pZCAwPT09biYmKG49e30pO3ZhciBhPUEoZSx0LG4uY3VzdG9tKSxpPShhfHx7fSkudHJhbnNpdGlvbixsPXZvaWQgMD09PWk/ZS5nZXREZWZhdWx0VHJhbnNpdGlvbigpfHx7fTppO24udHJhbnNpdGlvbk92ZXJyaWRlJiYobD1uLnRyYW5zaXRpb25PdmVycmlkZSk7dmFyIHM9YT9mdW5jdGlvbigpe3JldHVybiBKdChlLGEsbil9OmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSxjPShudWxsPT09KG89ZS52YXJpYW50Q2hpbGRyZW4pfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnNpemUpP2Z1bmN0aW9uKG8pe3ZvaWQgMD09PW8mJihvPTApO3ZhciBhPWwuZGVsYXlDaGlsZHJlbixpPXZvaWQgMD09PWE/MDphLHM9bC5zdGFnZ2VyQ2hpbGRyZW4sYz1sLnN0YWdnZXJEaXJlY3Rpb247cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLG8sYSxpKXt2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1vJiYobz0wKSx2b2lkIDA9PT1hJiYoYT0xKTt2YXIgbD1bXSxzPShlLnZhcmlhbnRDaGlsZHJlbi5zaXplLTEpKm8sYz0xPT09YT9mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCksZSpvfTpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCkscy1lKm99O3JldHVybiBBcnJheS5mcm9tKGUudmFyaWFudENoaWxkcmVuKS5zb3J0KFh0KS5mb3JFYWNoKChmdW5jdGlvbihlLG8pe2wucHVzaChZdChlLHQsci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGkpLHtkZWxheTpuK2Mobyl9KSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZS5ub3RpZnlBbmltYXRpb25Db21wbGV0ZSh0KX0pKSl9KSksUHJvbWlzZS5hbGwobCl9KGUsdCxpK28scyxjLG4pfTpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0sdT1sLndoZW47aWYodSl7dmFyIGQ9ci5fX3JlYWQoXCJiZWZvcmVDaGlsZHJlblwiPT09dT9bcyxjXTpbYyxzXSwyKSxwPWRbMF0sZj1kWzFdO3JldHVybiBwKCkudGhlbihmKX1yZXR1cm4gUHJvbWlzZS5hbGwoW3MoKSxjKG4uZGVsYXkpXSl9ZnVuY3Rpb24gSnQoZSx0LG4pe3ZhciBvLGE9dm9pZCAwPT09bj97fTpuLGk9YS5kZWxheSxsPXZvaWQgMD09PWk/MDppLHM9YS50cmFuc2l0aW9uT3ZlcnJpZGUsYz1hLnR5cGUsdT1lLm1ha2VUYXJnZXRBbmltYXRhYmxlKHQpLGQ9dS50cmFuc2l0aW9uLHA9dm9pZCAwPT09ZD9lLmdldERlZmF1bHRUcmFuc2l0aW9uKCk6ZCxmPXUudHJhbnNpdGlvbkVuZCxoPXIuX19yZXN0KHUsW1widHJhbnNpdGlvblwiLFwidHJhbnNpdGlvbkVuZFwiXSk7cyYmKHA9cyk7dmFyIGc9W10sdj1jJiYobnVsbD09PShvPWUuYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmdldFN0YXRlKClbY10pO2Zvcih2YXIgQyBpbiBoKXt2YXIgbT1lLmdldFZhbHVlKEMpLHc9aFtDXTtpZighKCFtfHx2b2lkIDA9PT13fHx2JiZRdCh2LEMpKSl7dmFyIGI9SXQoQyxtLHcsci5fX2Fzc2lnbih7ZGVsYXk6bH0scCkpO2cucHVzaChiKX19cmV0dXJuIFByb21pc2UuYWxsKGcpLnRoZW4oKGZ1bmN0aW9uKCl7ZiYmV3QoZSxmKX0pKX1mdW5jdGlvbiBYdChlLHQpe3JldHVybiBlLnNvcnROb2RlUG9zaXRpb24odCl9ZnVuY3Rpb24gUXQoZSx0KXt2YXIgbj1lLnByb3RlY3RlZEtleXMscj1lLm5lZWRzQW5pbWF0aW5nLG89bi5oYXNPd25Qcm9wZXJ0eSh0KSYmITAhPT1yW3RdO3JldHVybiByW3RdPSExLG99dmFyIGVuPVtUZS5BbmltYXRlLFRlLkhvdmVyLFRlLlRhcCxUZS5EcmFnLFRlLkZvY3VzLFRlLkV4aXRdLHRuPXIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChlbikpLnJldmVyc2UoKSxubj1lbi5sZW5ndGg7ZnVuY3Rpb24gcm4oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSx7aXNBY3RpdmU6ZSxwcm90ZWN0ZWRLZXlzOnt9LG5lZWRzQW5pbWF0aW5nOnt9LHByZXZSZXNvbHZlZFZhbHVlczp7fX19dmFyIG9uPXthbmltYXRpb246cHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUudmlzdWFsRWxlbWVudCxuPWUuYW5pbWF0ZTt0LmFuaW1hdGlvblN0YXRlfHwodC5hbmltYXRpb25TdGF0ZT1mdW5jdGlvbihlKXt2YXIgdCxuPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5hbGwodC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBuPXQuYW5pbWF0aW9uLHI9dC5vcHRpb25zO3JldHVybiBxdChlLG4scil9KSkpfX0oZSksbz0oKHQ9e30pW1RlLkFuaW1hdGVdPXJuKCEwKSx0W1RlLkhvdmVyXT1ybigpLHRbVGUuVGFwXT1ybigpLHRbVGUuRHJhZ109cm4oKSx0W1RlLkZvY3VzXT1ybigpLHRbVGUuRXhpdF09cm4oKSx0KSxhPXt9LGk9ITAsbD1mdW5jdGlvbih0LG4pe3ZhciBvPUEoZSxuKTtpZihvKXtvLnRyYW5zaXRpb247dmFyIGE9by50cmFuc2l0aW9uRW5kLGk9ci5fX3Jlc3QobyxbXCJ0cmFuc2l0aW9uXCIsXCJ0cmFuc2l0aW9uRW5kXCJdKTt0PXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHQpLGkpLGEpfXJldHVybiB0fTtmdW5jdGlvbiBzKHQscyl7Zm9yKHZhciBjLHU9ZS5nZXRQcm9wcygpLGQ9ZS5nZXRWYXJpYW50Q29udGV4dCghMCl8fHt9LHA9W10sZj1uZXcgU2V0LGg9e30sZz0xLzAsdj1mdW5jdGlvbihuKXt2YXIgYT10bltuXSx2PW9bYV0sQz1udWxsIT09KGM9dVthXSkmJnZvaWQgMCE9PWM/YzpkW2FdLG09VihDKSx3PWE9PT1zP3YuaXNBY3RpdmU6bnVsbDshMT09PXcmJihnPW4pO3ZhciBiPUM9PT1kW2FdJiZDIT09dVthXSYmbTtpZihiJiZpJiZlLm1hbnVhbGx5QW5pbWF0ZU9uTW91bnQmJihiPSExKSx2LnByb3RlY3RlZEtleXM9ci5fX2Fzc2lnbih7fSxoKSwhdi5pc0FjdGl2ZSYmbnVsbD09PXd8fCFDJiYhdi5wcmV2UHJvcHx8UGUoQyl8fFwiYm9vbGVhblwiPT10eXBlb2YgQylyZXR1cm5cImNvbnRpbnVlXCI7dmFyIHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD90IT09ZTohIUkodCkmJiFodCh0LGUpfSh2LnByZXZQcm9wLEMpfHxhPT09cyYmdi5pc0FjdGl2ZSYmIWImJm18fG4+ZyYmbSx4PUFycmF5LmlzQXJyYXkoQyk/QzpbQ10saz14LnJlZHVjZShsLHt9KTshMT09PXcmJihrPXt9KTt2YXIgUz12LnByZXZSZXNvbHZlZFZhbHVlcyxPPXZvaWQgMD09PVM/e306UyxNPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxPKSxrKSxMPWZ1bmN0aW9uKGUpe3k9ITAsZi5kZWxldGUoZSksdi5uZWVkc0FuaW1hdGluZ1tlXT0hMH07Zm9yKHZhciBfIGluIE0pe3ZhciBQPWtbX10sRT1PW19dO2guaGFzT3duUHJvcGVydHkoXyl8fChQIT09RT9FZShQKSYmRWUoRSk/aHQoUCxFKT92LnByb3RlY3RlZEtleXNbX109ITA6TChfKTp2b2lkIDAhPT1QP0woXyk6Zi5hZGQoXyk6dm9pZCAwIT09UCYmZi5oYXMoXyk/TChfKTp2LnByb3RlY3RlZEtleXNbX109ITApfXYucHJldlByb3A9Qyx2LnByZXZSZXNvbHZlZFZhbHVlcz1rLHYuaXNBY3RpdmUmJihoPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxoKSxrKSksaSYmZS5ibG9ja0luaXRpYWxBbmltYXRpb24mJih5PSExKSx5JiYhYiYmcC5wdXNoLmFwcGx5KHAsci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKHgubWFwKChmdW5jdGlvbihlKXtyZXR1cm57YW5pbWF0aW9uOmUsb3B0aW9uczpyLl9fYXNzaWduKHt0eXBlOmF9LHQpfX0pKSkpKX0sQz0wO0M8bm47QysrKXYoQyk7aWYoYT1yLl9fYXNzaWduKHt9LGgpLGYuc2l6ZSl7dmFyIG09e307Zi5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLmdldEJhc2VUYXJnZXQodCk7dm9pZCAwIT09biYmKG1bdF09bil9KSkscC5wdXNoKHthbmltYXRpb246bX0pfXZhciB3PUJvb2xlYW4ocC5sZW5ndGgpO3JldHVybiBpJiYhMT09PXUuaW5pdGlhbCYmIWUubWFudWFsbHlBbmltYXRlT25Nb3VudCYmKHc9ITEpLGk9ITEsdz9uKHApOlByb21pc2UucmVzb2x2ZSgpfXJldHVybntpc0FuaW1hdGVkOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1hW2VdfSxhbmltYXRlQ2hhbmdlczpzLHNldEFjdGl2ZTpmdW5jdGlvbih0LG4scil7dmFyIGE7cmV0dXJuIG9bdF0uaXNBY3RpdmU9PT1uP1Byb21pc2UucmVzb2x2ZSgpOihudWxsPT09KGE9ZS52YXJpYW50Q2hpbGRyZW4pfHx2b2lkIDA9PT1hfHxhLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByO3JldHVybiBudWxsPT09KHI9ZS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc2V0QWN0aXZlKHQsbil9KSksb1t0XS5pc0FjdGl2ZT1uLHMocix0KSl9LHNldEFuaW1hdGVGdW5jdGlvbjpmdW5jdGlvbih0KXtuPXQoZSl9LGdldFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG99fX0odCkpLFBlKG4pJiZvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gbi5zdWJzY3JpYmUodCl9KSxbbl0pfSkpLGV4aXQ6cHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuY3VzdG9tLG49ZS52aXN1YWxFbGVtZW50LGE9ci5fX3JlYWQoUygpLDIpLGk9YVswXSxsPWFbMV0scz1vLnVzZUNvbnRleHQoeCk7by51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7dmFyIGUscixvPW51bGw9PT0oZT1uLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5zZXRBY3RpdmUoVGUuRXhpdCwhaSx7Y3VzdG9tOm51bGwhPT0ocj1udWxsPT1zP3ZvaWQgMDpzLmN1c3RvbSkmJnZvaWQgMCE9PXI/cjp0fSk7IWkmJihudWxsPT1vfHxvLnRoZW4obCkpfSksW2ldKX0pKX0sYW49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2YXIgbz10aGlzLGE9KHZvaWQgMD09PW4/e306bikudHJhbnNmb3JtUGFnZVBvaW50O2lmKHRoaXMuc3RhcnRFdmVudD1udWxsLHRoaXMubGFzdE1vdmVFdmVudD1udWxsLHRoaXMubGFzdE1vdmVFdmVudEluZm89bnVsbCx0aGlzLmhhbmRsZXJzPXt9LHRoaXMudXBkYXRlUG9pbnQ9ZnVuY3Rpb24oKXtpZihvLmxhc3RNb3ZlRXZlbnQmJm8ubGFzdE1vdmVFdmVudEluZm8pe3ZhciBlPWNuKG8ubGFzdE1vdmVFdmVudEluZm8sby5oaXN0b3J5KSx0PW51bGwhPT1vLnN0YXJ0RXZlbnQsbj1sLmRpc3RhbmNlKGUub2Zmc2V0LHt4OjAseTowfSk+PTM7aWYodHx8bil7dmFyIGE9ZS5wb2ludCxpPXMuZ2V0RnJhbWVEYXRhKCkudGltZXN0YW1wO28uaGlzdG9yeS5wdXNoKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxhKSx7dGltZXN0YW1wOml9KSk7dmFyIGM9by5oYW5kbGVycyx1PWMub25TdGFydCxkPWMub25Nb3ZlO3R8fCh1JiZ1KG8ubGFzdE1vdmVFdmVudCxlKSxvLnN0YXJ0RXZlbnQ9by5sYXN0TW92ZUV2ZW50KSxkJiZkKG8ubGFzdE1vdmVFdmVudCxlKX19fSx0aGlzLmhhbmRsZVBvaW50ZXJNb3ZlPWZ1bmN0aW9uKGUsdCl7by5sYXN0TW92ZUV2ZW50PWUsby5sYXN0TW92ZUV2ZW50SW5mbz1sbih0LG8udHJhbnNmb3JtUGFnZVBvaW50KSxGZShlKSYmMD09PWUuYnV0dG9ucz9vLmhhbmRsZVBvaW50ZXJVcChlLHQpOnAuZGVmYXVsdC51cGRhdGUoby51cGRhdGVQb2ludCwhMCl9LHRoaXMuaGFuZGxlUG9pbnRlclVwPWZ1bmN0aW9uKGUsdCl7by5lbmQoKTt2YXIgbj1vLmhhbmRsZXJzLHI9bi5vbkVuZCxhPW4ub25TZXNzaW9uRW5kLGk9Y24obG4odCxvLnRyYW5zZm9ybVBhZ2VQb2ludCksby5oaXN0b3J5KTtvLnN0YXJ0RXZlbnQmJnImJnIoZSxpKSxhJiZhKGUsaSl9LCEoV2UoZSkmJmUudG91Y2hlcy5sZW5ndGg+MSkpe3RoaXMuaGFuZGxlcnM9dCx0aGlzLnRyYW5zZm9ybVBhZ2VQb2ludD1hO3ZhciBpPWxuKEtlKGUpLHRoaXMudHJhbnNmb3JtUGFnZVBvaW50KSxjPWkucG9pbnQsdT1zLmdldEZyYW1lRGF0YSgpLnRpbWVzdGFtcDt0aGlzLmhpc3Rvcnk9W3IuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxjKSx7dGltZXN0YW1wOnV9KV07dmFyIGQ9dC5vblNlc3Npb25TdGFydDtkJiZkKGUsY24oaSx0aGlzLmhpc3RvcnkpKSx0aGlzLnJlbW92ZUxpc3RlbmVycz1sLnBpcGUobnQod2luZG93LFwicG9pbnRlcm1vdmVcIix0aGlzLmhhbmRsZVBvaW50ZXJNb3ZlKSxudCh3aW5kb3csXCJwb2ludGVydXBcIix0aGlzLmhhbmRsZVBvaW50ZXJVcCksbnQod2luZG93LFwicG9pbnRlcmNhbmNlbFwiLHRoaXMuaGFuZGxlUG9pbnRlclVwKSl9fXJldHVybiBlLnByb3RvdHlwZS51cGRhdGVIYW5kbGVycz1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzPWV9LGUucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3RoaXMucmVtb3ZlTGlzdGVuZXJzJiZ0aGlzLnJlbW92ZUxpc3RlbmVycygpLHMuY2FuY2VsU3luYy51cGRhdGUodGhpcy51cGRhdGVQb2ludCl9LGV9KCk7ZnVuY3Rpb24gbG4oZSx0KXtyZXR1cm4gdD97cG9pbnQ6dChlLnBvaW50KX06ZX1mdW5jdGlvbiBzbihlLHQpe3JldHVybnt4OmUueC10LngseTplLnktdC55fX1mdW5jdGlvbiBjbihlLHQpe3ZhciBuPWUucG9pbnQ7cmV0dXJue3BvaW50Om4sZGVsdGE6c24obixkbih0KSksb2Zmc2V0OnNuKG4sdW4odCkpLHZlbG9jaXR5OnBuKHQsLjEpfX1mdW5jdGlvbiB1bihlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBkbihlKXtyZXR1cm4gZVtlLmxlbmd0aC0xXX1mdW5jdGlvbiBwbihlLHQpe2lmKGUubGVuZ3RoPDIpcmV0dXJue3g6MCx5OjB9O2Zvcih2YXIgbj1lLmxlbmd0aC0xLHI9bnVsbCxvPWRuKGUpO24+PTAmJihyPWVbbl0sIShvLnRpbWVzdGFtcC1yLnRpbWVzdGFtcD5ndCh0KSkpOyluLS07aWYoIXIpcmV0dXJue3g6MCx5OjB9O3ZhciBhPShvLnRpbWVzdGFtcC1yLnRpbWVzdGFtcCkvMWUzO2lmKDA9PT1hKXJldHVybnt4OjAseTowfTt2YXIgaT17eDooby54LXIueCkvYSx5OihvLnktci55KS9hfTtyZXR1cm4gaS54PT09MS8wJiYoaS54PTApLGkueT09PTEvMCYmKGkueT0wKSxpfWZ1bmN0aW9uIGZuKGUpe3JldHVybiBlfWZ1bmN0aW9uIGhuKGUpe3ZhciB0PWUudG9wO3JldHVybnt4OnttaW46ZS5sZWZ0LG1heDplLnJpZ2h0fSx5OnttaW46dCxtYXg6ZS5ib3R0b219fX12YXIgZ249e3RyYW5zbGF0ZTowLHNjYWxlOjEsb3JpZ2luOjAsb3JpZ2luUG9pbnQ6MH07ZnVuY3Rpb24gdm4oKXtyZXR1cm57eDpyLl9fYXNzaWduKHt9LGduKSx5OnIuX19hc3NpZ24oe30sZ24pfX1mdW5jdGlvbiBDbihlKXtyZXR1cm5bZShcInhcIiksZShcInlcIildfWZ1bmN0aW9uIG1uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09biYmKG49LjAxKSxsLmRpc3RhbmNlKGUsdCk8bn1mdW5jdGlvbiB3bihlKXtyZXR1cm4gZS5tYXgtZS5taW59ZnVuY3Rpb24gYm4oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9LjUpLGUub3JpZ2luPXIsZS5vcmlnaW5Qb2ludD1sLm1peCh0Lm1pbix0Lm1heCxlLm9yaWdpbiksZS5zY2FsZT13bihuKS93bih0KSxtbihlLnNjYWxlLDEsMWUtNCkmJihlLnNjYWxlPTEpLGUudHJhbnNsYXRlPWwubWl4KG4ubWluLG4ubWF4LGUub3JpZ2luKS1lLm9yaWdpblBvaW50LG1uKGUudHJhbnNsYXRlKSYmKGUudHJhbnNsYXRlPTApfWZ1bmN0aW9uIHluKGUsdCxuLHIpe2JuKGUueCx0Lngsbi54LHhuKHIub3JpZ2luWCkpLGJuKGUueSx0Lnksbi55LHhuKHIub3JpZ2luWSkpfWZ1bmN0aW9uIHhuKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlP2U6LjV9ZnVuY3Rpb24ga24oZSx0LG4pe2UubWluPW4ubWluK3QubWluLGUubWF4PWUubWluK3duKHQpfWZ1bmN0aW9uIFNuKGUsdCxuKXt2YXIgcj10Lm1pbixvPXQubWF4O3JldHVybiB2b2lkIDAhPT1yJiZlPHI/ZT1uP2wubWl4KHIsZSxuLm1pbik6TWF0aC5tYXgoZSxyKTp2b2lkIDAhPT1vJiZlPm8mJihlPW4/bC5taXgobyxlLG4ubWF4KTpNYXRoLm1pbihlLG8pKSxlfWZ1bmN0aW9uIE9uKGUsdCxuKXtyZXR1cm57bWluOnZvaWQgMCE9PXQ/ZS5taW4rdDp2b2lkIDAsbWF4OnZvaWQgMCE9PW4/ZS5tYXgrbi0oZS5tYXgtZS5taW4pOnZvaWQgMH19ZnVuY3Rpb24gTW4oZSx0KXt2YXIgbixvPXQubWluLWUubWluLGE9dC5tYXgtZS5tYXg7cmV0dXJuIHQubWF4LXQubWluPGUubWF4LWUubWluJiYobz0obj1yLl9fcmVhZChbYSxvXSwyKSlbMF0sYT1uWzFdKSx7bWluOmUubWluK28sbWF4OmUubWluK2F9fWZ1bmN0aW9uIExuKGUsdCxuKXtyZXR1cm57bWluOl9uKGUsdCksbWF4Ol9uKGUsbil9fWZ1bmN0aW9uIF9uKGUsdCl7dmFyIG47cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/ZTpudWxsIT09KG49ZVt0XSkmJnZvaWQgMCE9PW4/bjowfWZ1bmN0aW9uIFBuKGUsdCl7cmV0dXJuIGhuKGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS50b3Ascj1lLmxlZnQsbz1lLmJvdHRvbSxhPWUucmlnaHQ7dm9pZCAwPT09dCYmKHQ9Zm4pO3ZhciBpPXQoe3g6cix5Om59KSxsPXQoe3g6YSx5Om99KTtyZXR1cm57dG9wOmkueSxsZWZ0OmkueCxib3R0b206bC55LHJpZ2h0OmwueH19KGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdCkpfXZhciBFbj1mdW5jdGlvbihlLHQpe3JldHVybiBlLmRlcHRoLXQuZGVwdGh9O2Z1bmN0aW9uIGpuKGUpe3JldHVybiBlLnByb2plY3Rpb24uaXNFbmFibGVkfHxlLnNob3VsZFJlc2V0VHJhbnNmb3JtKCl9ZnVuY3Rpb24gUm4oZSx0KXt2b2lkIDA9PT10JiYodD1bXSk7dmFyIG49ZS5wYXJlbnQ7cmV0dXJuIG4mJlJuKG4sdCksam4oZSkmJnQucHVzaChlKSx0fWZ1bmN0aW9uIEluKGUpe2lmKCFlLnNob3VsZFJlc2V0VHJhbnNmb3JtKCkpe3ZhciB0LG49ZS5nZXRMYXlvdXRTdGF0ZSgpO2Uubm90aWZ5QmVmb3JlTGF5b3V0TWVhc3VyZShuLmxheW91dCksbi5pc0h5ZHJhdGVkPSEwLG4ubGF5b3V0PWUubWVhc3VyZVZpZXdwb3J0Qm94KCksbi5sYXlvdXRDb3JyZWN0ZWQ9KHQ9bi5sYXlvdXQse3g6ci5fX2Fzc2lnbih7fSx0LngpLHk6ci5fX2Fzc2lnbih7fSx0LnkpfSksZS5ub3RpZnlMYXlvdXRNZWFzdXJlKG4ubGF5b3V0LGUucHJldlZpZXdwb3J0Qm94fHxuLmxheW91dCkscC5kZWZhdWx0LnVwZGF0ZSgoZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWJhc2VQcm9qZWN0aW9uVGFyZ2V0KCl9KSl9fWZ1bmN0aW9uIFZuKGUpe2Uuc2hvdWxkUmVzZXRUcmFuc2Zvcm0oKXx8KGUucHJldlZpZXdwb3J0Qm94PWUubWVhc3VyZVZpZXdwb3J0Qm94KCExKSxlLnJlYmFzZVByb2plY3Rpb25UYXJnZXQoITEsZS5wcmV2Vmlld3BvcnRCb3gpKX1mdW5jdGlvbiBIbihlLHQpe3JldHVybnttaW46dC5taW4tZS5taW4sbWF4OnQubWF4LWUubWlufX1mdW5jdGlvbiBBbihlLHQpe3JldHVybnt4OkhuKGUueCx0LngpLHk6SG4oZS55LHQueSl9fWZ1bmN0aW9uIFRuKGUpe3ZhciB0PWUuZ2V0UHJvcHMoKSxuPXQuZHJhZyxyPXQuX2RyYWdYO3JldHVybiBuJiYhcn1mdW5jdGlvbiBEbihlLHQpe2UubWluPXQubWluLGUubWF4PXQubWF4fWZ1bmN0aW9uIEJuKGUsdCxuKXtyZXR1cm4gbit0KihlLW4pfWZ1bmN0aW9uIFpuKGUsdCxuLHIsbyl7cmV0dXJuIHZvaWQgMCE9PW8mJihlPUJuKGUsbyxyKSksQm4oZSxuLHIpK3R9ZnVuY3Rpb24gJG4oZSx0LG4scixvKXt2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj0xKSxlLm1pbj1abihlLm1pbix0LG4scixvKSxlLm1heD1abihlLm1heCx0LG4scixvKX1mdW5jdGlvbiBObihlLHQpe3ZhciBuPXQueCxyPXQueTskbihlLngsbi50cmFuc2xhdGUsbi5zY2FsZSxuLm9yaWdpblBvaW50KSwkbihlLnksci50cmFuc2xhdGUsci5zY2FsZSxyLm9yaWdpblBvaW50KX1mdW5jdGlvbiBGbihlLHQsbixvKXt2YXIgYT1yLl9fcmVhZChvLDMpLGk9YVswXSxzPWFbMV0sYz1hWzJdO2UubWluPXQubWluLGUubWF4PXQubWF4O3ZhciB1PXZvaWQgMCE9PW5bY10/bltjXTouNSxkPWwubWl4KHQubWluLHQubWF4LHUpOyRuKGUsbltpXSxuW3NdLGQsbi5zY2FsZSl9dmFyIFduPVtcInhcIixcInNjYWxlWFwiLFwib3JpZ2luWFwiXSxVbj1bXCJ5XCIsXCJzY2FsZVlcIixcIm9yaWdpbllcIl07ZnVuY3Rpb24gem4oZSx0LG4pe0ZuKGUueCx0LngsbixXbiksRm4oZS55LHQueSxuLFVuKX1mdW5jdGlvbiBHbihlLHQsbixyLG8pe3JldHVybiBlPUJuKGUtPXQsMS9uLHIpLHZvaWQgMCE9PW8mJihlPUJuKGUsMS9vLHIpKSxlfWZ1bmN0aW9uIEtuKGUsdCxuKXt2YXIgbz1yLl9fcmVhZChuLDMpLGE9b1swXSxpPW9bMV0scz1vWzJdOyFmdW5jdGlvbihlLHQsbixyLG8pe3ZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PW4mJihuPTEpLHZvaWQgMD09PXImJihyPS41KTt2YXIgYT1sLm1peChlLm1pbixlLm1heCxyKS10O2UubWluPUduKGUubWluLHQsbixhLG8pLGUubWF4PUduKGUubWF4LHQsbixhLG8pfShlLHRbYV0sdFtpXSx0W3NdLHQuc2NhbGUpfWZ1bmN0aW9uIHFuKGUsdCl7S24oZS54LHQsV24pLEtuKGUueSx0LFVuKX12YXIgWW49bmV3IFNldDtmdW5jdGlvbiBKbihlLHQsbil7ZVtuXXx8KGVbbl09W10pLGVbbl0ucHVzaCh0KX1mdW5jdGlvbiBYbihlKXtyZXR1cm4gWW4uYWRkKGUpLGZ1bmN0aW9uKCl7cmV0dXJuIFluLmRlbGV0ZShlKX19ZnVuY3Rpb24gUW4oKXtpZihZbi5zaXplKXt2YXIgZT0wLHQ9W1tdXSxuPVtdLHI9ZnVuY3Rpb24obil7cmV0dXJuIEpuKHQsbixlKX0sbz1mdW5jdGlvbih0KXtKbihuLHQsZSksZSsrfTtZbi5mb3JFYWNoKChmdW5jdGlvbih0KXt0KHIsbyksZT0wfSkpLFluLmNsZWFyKCk7Zm9yKHZhciBhPW4ubGVuZ3RoLGk9MDtpPD1hO2krKyl0W2ldJiZ0W2ldLmZvckVhY2godHIpLG5baV0mJm5baV0uZm9yRWFjaCh0cil9fXZhciBlcix0cj1mdW5jdGlvbihlKXtyZXR1cm4gZSgpfSxucj1uZXcgV2Vha01hcCxycj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9ZS52aXN1YWxFbGVtZW50O3RoaXMuaXNEcmFnZ2luZz0hMSx0aGlzLmN1cnJlbnREaXJlY3Rpb249bnVsbCx0aGlzLmNvbnN0cmFpbnRzPSExLHRoaXMuZWxhc3RpYz17eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sdGhpcy5wcm9wcz17fSx0aGlzLmhhc011dGF0ZWRDb25zdHJhaW50cz0hMSx0aGlzLmN1cnNvclByb2dyZXNzPXt4Oi41LHk6LjV9LHRoaXMub3JpZ2luUG9pbnQ9e30sdGhpcy5vcGVuR2xvYmFsTG9jaz1udWxsLHRoaXMucGFuU2Vzc2lvbj1udWxsLHRoaXMudmlzdWFsRWxlbWVudD10LHRoaXMudmlzdWFsRWxlbWVudC5lbmFibGVMYXlvdXRQcm9qZWN0aW9uKCksbnIuc2V0KHQsdGhpcyl9cmV0dXJuIGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxvPXZvaWQgMD09PXQ/e306dCxhPW8uc25hcFRvQ3Vyc29yLGk9dm9pZCAwIT09YSYmYSxjPW8uY3Vyc29yUHJvZ3Jlc3MsdT10aGlzLnByb3BzLnRyYW5zZm9ybVBhZ2VQb2ludDt0aGlzLnBhblNlc3Npb249bmV3IGFuKGUse29uU2Vzc2lvblN0YXJ0OmZ1bmN0aW9uKGUpe3ZhciB0O24uc3RvcE1vdGlvbigpO3ZhciBvPWZ1bmN0aW9uKGUpe3JldHVybiBLZShlLFwiY2xpZW50XCIpfShlKS5wb2ludDtudWxsPT09KHQ9bi5jYW5jZWxMYXlvdXQpfHx2b2lkIDA9PT10fHx0LmNhbGwobiksbi5jYW5jZWxMYXlvdXQ9WG4oKGZ1bmN0aW9uKGUsdCl7dmFyIGE9Um4obi52aXN1YWxFbGVtZW50KSx1PWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49ZnVuY3Rpb24oZSl7am4oZSkmJnQucHVzaChlKSxlLmNoaWxkcmVuLmZvckVhY2gobil9O3JldHVybiBlLmNoaWxkcmVuLmZvckVhY2gobiksdC5zb3J0KEVuKX0obi52aXN1YWxFbGVtZW50KSxkPXIuX19zcHJlYWRBcnJheShyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQoYSkpLHIuX19yZWFkKHUpKSxwPSExO24uaXNMYXlvdXREcmFnKCkmJm4udmlzdWFsRWxlbWVudC5sb2NrUHJvamVjdGlvblRhcmdldCgpLHQoKGZ1bmN0aW9uKCl7ZC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXNldFRyYW5zZm9ybSgpfSkpfSkpLGUoKGZ1bmN0aW9uKCl7SW4obi52aXN1YWxFbGVtZW50KSx1LmZvckVhY2goSW4pfSkpLHQoKGZ1bmN0aW9uKCl7ZC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXN0b3JlVHJhbnNmb3JtKCl9KSksaSYmKHA9bi5zbmFwVG9DdXJzb3IobykpfSkpLGUoKGZ1bmN0aW9uKCl7Qm9vbGVhbihuLmdldEF4aXNNb3Rpb25WYWx1ZShcInhcIikmJiFuLmlzRXh0ZXJuYWxEcmFnKCkpfHxuLnZpc3VhbEVsZW1lbnQucmViYXNlUHJvamVjdGlvblRhcmdldCghMCxuLnZpc3VhbEVsZW1lbnQubWVhc3VyZVZpZXdwb3J0Qm94KCExKSksbi52aXN1YWxFbGVtZW50LnNjaGVkdWxlVXBkYXRlTGF5b3V0UHJvamVjdGlvbigpO3ZhciBlPW4udmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uO0NuKChmdW5jdGlvbih0KXtpZighcCl7dmFyIHI9ZS50YXJnZXRbdF0sYT1yLm1pbixpPXIubWF4O24uY3Vyc29yUHJvZ3Jlc3NbdF09Yz9jW3RdOmwucHJvZ3Jlc3MoYSxpLG9bdF0pfXZhciBzPW4uZ2V0QXhpc01vdGlvblZhbHVlKHQpO3MmJihuLm9yaWdpblBvaW50W3RdPXMuZ2V0KCkpfSkpfSkpLHQoKGZ1bmN0aW9uKCl7cy5mbHVzaFN5bmMudXBkYXRlKCkscy5mbHVzaFN5bmMucHJlUmVuZGVyKCkscy5mbHVzaFN5bmMucmVuZGVyKCkscy5mbHVzaFN5bmMucG9zdFJlbmRlcigpfSkpLGUoKGZ1bmN0aW9uKCl7cmV0dXJuIG4ucmVzb2x2ZURyYWdDb25zdHJhaW50cygpfSkpfSkpfSxvblN0YXJ0OmZ1bmN0aW9uKGUsdCl7dmFyIHIsbyxhLGk9bi5wcm9wcyxsPWkuZHJhZyxzPWkuZHJhZ1Byb3BhZ2F0aW9uOyghbHx8c3x8KG4ub3Blbkdsb2JhbExvY2smJm4ub3Blbkdsb2JhbExvY2soKSxuLm9wZW5HbG9iYWxMb2NrPWx0KGwpLG4ub3Blbkdsb2JhbExvY2spKSYmKFFuKCksbi5pc0RyYWdnaW5nPSEwLG4uY3VycmVudERpcmVjdGlvbj1udWxsLG51bGw9PT0obz0ocj1uLnByb3BzKS5vbkRyYWdTdGFydCl8fHZvaWQgMD09PW98fG8uY2FsbChyLGUsdCksbnVsbD09PShhPW4udmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PWF8fGEuc2V0QWN0aXZlKFRlLkRyYWcsITApKX0sb25Nb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbyxhLGksbD1uLnByb3BzLHM9bC5kcmFnUHJvcGFnYXRpb24sYz1sLmRyYWdEaXJlY3Rpb25Mb2NrO2lmKHN8fG4ub3Blbkdsb2JhbExvY2spe3ZhciB1PXQub2Zmc2V0O2lmKGMmJm51bGw9PT1uLmN1cnJlbnREaXJlY3Rpb24pcmV0dXJuIG4uY3VycmVudERpcmVjdGlvbj1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PTEwKTt2YXIgbj1udWxsO3JldHVybiBNYXRoLmFicyhlLnkpPnQ/bj1cInlcIjpNYXRoLmFicyhlLngpPnQmJihuPVwieFwiKSxufSh1KSx2b2lkKG51bGwhPT1uLmN1cnJlbnREaXJlY3Rpb24mJihudWxsPT09KG89KHI9bi5wcm9wcykub25EaXJlY3Rpb25Mb2NrKXx8dm9pZCAwPT09b3x8by5jYWxsKHIsbi5jdXJyZW50RGlyZWN0aW9uKSkpO24udXBkYXRlQXhpcyhcInhcIix0LnBvaW50LHUpLG4udXBkYXRlQXhpcyhcInlcIix0LnBvaW50LHUpLG51bGw9PT0oaT0oYT1uLnByb3BzKS5vbkRyYWcpfHx2b2lkIDA9PT1pfHxpLmNhbGwoYSxlLHQpLGVyPWV9fSxvblNlc3Npb25FbmQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5zdG9wKGUsdCl9fSx7dHJhbnNmb3JtUGFnZVBvaW50OnV9KX0sZS5wcm90b3R5cGUucmVzb2x2ZURyYWdDb25zdHJhaW50cz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC5kcmFnQ29uc3RyYWludHMscj10LmRyYWdFbGFzdGljLG89dGhpcy52aXN1YWxFbGVtZW50LmdldExheW91dFN0YXRlKCkubGF5b3V0Q29ycmVjdGVkO3RoaXMuY29uc3RyYWludHM9ISFuJiYoUihuKT90aGlzLnJlc29sdmVSZWZDb25zdHJhaW50cyhvLG4pOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC50b3Ascj10LmxlZnQsbz10LmJvdHRvbSxhPXQucmlnaHQ7cmV0dXJue3g6T24oZS54LHIsYSkseTpPbihlLnksbixvKX19KG8sbikpLHRoaXMuZWxhc3RpYz1mdW5jdGlvbihlKXtyZXR1cm4hMT09PWU/ZT0wOiEwPT09ZSYmKGU9LjM1KSx7eDpMbihlLFwibGVmdFwiLFwicmlnaHRcIikseTpMbihlLFwidG9wXCIsXCJib3R0b21cIil9fShyKSx0aGlzLmNvbnN0cmFpbnRzJiYhdGhpcy5oYXNNdXRhdGVkQ29uc3RyYWludHMmJkNuKChmdW5jdGlvbih0KXtlLmdldEF4aXNNb3Rpb25WYWx1ZSh0KSYmKGUuY29uc3RyYWludHNbdF09ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtyZXR1cm4gdm9pZCAwIT09dC5taW4mJihuLm1pbj10Lm1pbi1lLm1pbiksdm9pZCAwIT09dC5tYXgmJihuLm1heD10Lm1heC1lLm1pbiksbn0ob1t0XSxlLmNvbnN0cmFpbnRzW3RdKSl9KSl9LGUucHJvdG90eXBlLnJlc29sdmVSZWZDb25zdHJhaW50cz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucHJvcHMscj1uLm9uTWVhc3VyZURyYWdDb25zdHJhaW50cyxvPW4udHJhbnNmb3JtUGFnZVBvaW50LGk9dC5jdXJyZW50O2EuaW52YXJpYW50KG51bGwhPT1pLFwiSWYgYGRyYWdDb25zdHJhaW50c2AgaXMgc2V0IGFzIGEgUmVhY3QgcmVmLCB0aGF0IHJlZiBtdXN0IGJlIHBhc3NlZCB0byBhbm90aGVyIGNvbXBvbmVudCdzIGByZWZgIHByb3AuXCIpLHRoaXMuY29uc3RyYWludHNCb3g9UG4oaSxvKTt2YXIgbD1mdW5jdGlvbihlLHQpe3JldHVybnt4Ok1uKGUueCx0LngpLHk6TW4oZS55LHQueSl9fShlLHRoaXMuY29uc3RyYWludHNCb3gpO2lmKHIpe3ZhciBzPXIoZnVuY3Rpb24oZSl7dmFyIHQ9ZS54LG49ZS55O3JldHVybnt0b3A6bi5taW4sYm90dG9tOm4ubWF4LGxlZnQ6dC5taW4scmlnaHQ6dC5tYXh9fShsKSk7dGhpcy5oYXNNdXRhdGVkQ29uc3RyYWludHM9ISFzLHMmJihsPWhuKHMpKX1yZXR1cm4gbH0sZS5wcm90b3R5cGUuY2FuY2VsRHJhZz1mdW5jdGlvbigpe3ZhciBlLHQ7dGhpcy52aXN1YWxFbGVtZW50LnVubG9ja1Byb2plY3Rpb25UYXJnZXQoKSxudWxsPT09KGU9dGhpcy5jYW5jZWxMYXlvdXQpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyksdGhpcy5pc0RyYWdnaW5nPSExLHRoaXMucGFuU2Vzc2lvbiYmdGhpcy5wYW5TZXNzaW9uLmVuZCgpLHRoaXMucGFuU2Vzc2lvbj1udWxsLCF0aGlzLnByb3BzLmRyYWdQcm9wYWdhdGlvbiYmdGhpcy5vcGVuR2xvYmFsTG9jayYmKHRoaXMub3Blbkdsb2JhbExvY2soKSx0aGlzLm9wZW5HbG9iYWxMb2NrPW51bGwpLG51bGw9PT0odD10aGlzLnZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT10fHx0LnNldEFjdGl2ZShUZS5EcmFnLCExKX0sZS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbztudWxsPT09KG49dGhpcy5wYW5TZXNzaW9uKXx8dm9pZCAwPT09bnx8bi5lbmQoKSx0aGlzLnBhblNlc3Npb249bnVsbDt2YXIgYT10aGlzLmlzRHJhZ2dpbmc7aWYodGhpcy5jYW5jZWxEcmFnKCksYSl7dmFyIGk9dC52ZWxvY2l0eTt0aGlzLmFuaW1hdGVEcmFnRW5kKGkpLG51bGw9PT0obz0ocj10aGlzLnByb3BzKS5vbkRyYWdFbmQpfHx2b2lkIDA9PT1vfHxvLmNhbGwocixlLHQpfX0sZS5wcm90b3R5cGUuc25hcFRvQ3Vyc29yPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIENuKChmdW5jdGlvbihuKXtpZihvcihuLHQucHJvcHMuZHJhZyx0LmN1cnJlbnREaXJlY3Rpb24pKXt2YXIgcj10LmdldEF4aXNNb3Rpb25WYWx1ZShuKTtpZighcilyZXR1cm4gdC5jdXJzb3JQcm9ncmVzc1tuXT0uNSwhMDt2YXIgbz10LnZpc3VhbEVsZW1lbnQuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXQsYT1vW25dLm1heC1vW25dLm1pbixpPW9bbl0ubWluK2EvMixsPWVbbl0taTt0Lm9yaWdpblBvaW50W25dPWVbbl0sci5zZXQobCl9fSkpLmluY2x1ZGVzKCEwKX0sZS5wcm90b3R5cGUudXBkYXRlQXhpcz1mdW5jdGlvbihlLHQsbil7aWYob3IoZSx0aGlzLnByb3BzLmRyYWcsdGhpcy5jdXJyZW50RGlyZWN0aW9uKSlyZXR1cm4gdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoZSk/dGhpcy51cGRhdGVBeGlzTW90aW9uVmFsdWUoZSxuKTp0aGlzLnVwZGF0ZVZpc3VhbEVsZW1lbnRBeGlzKGUsdCl9LGUucHJvdG90eXBlLnVwZGF0ZUF4aXNNb3Rpb25WYWx1ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGUpO2lmKHQmJm4pe3ZhciByPXRoaXMub3JpZ2luUG9pbnRbZV0rdFtlXSxvPXRoaXMuY29uc3RyYWludHM/U24ocix0aGlzLmNvbnN0cmFpbnRzW2VdLHRoaXMuZWxhc3RpY1tlXSk6cjtuLnNldChvKX19LGUucHJvdG90eXBlLnVwZGF0ZVZpc3VhbEVsZW1lbnRBeGlzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzLnZpc3VhbEVsZW1lbnQuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXRbZV0sbz1yLm1heC1yLm1pbixhPXRoaXMuY3Vyc29yUHJvZ3Jlc3NbZV0saT1mdW5jdGlvbihlLHQsbixyLG8pe3ZhciBhPWUtdCpuO3JldHVybiByP1NuKGEscixvKTphfSh0W2VdLG8sYSxudWxsPT09KG49dGhpcy5jb25zdHJhaW50cyl8fHZvaWQgMD09PW4/dm9pZCAwOm5bZV0sdGhpcy5lbGFzdGljW2VdKTt0aGlzLnZpc3VhbEVsZW1lbnQuc2V0UHJvamVjdGlvblRhcmdldEF4aXMoZSxpLGkrbyl9LGUucHJvdG90eXBlLnNldFByb3BzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZHJhZyxuPXZvaWQgMCE9PXQmJnQsbz1lLmRyYWdEaXJlY3Rpb25Mb2NrLGE9dm9pZCAwIT09byYmbyxpPWUuZHJhZ1Byb3BhZ2F0aW9uLGw9dm9pZCAwIT09aSYmaSxzPWUuZHJhZ0NvbnN0cmFpbnRzLGM9dm9pZCAwIT09cyYmcyx1PWUuZHJhZ0VsYXN0aWMsZD12b2lkIDA9PT11Py4zNTp1LHA9ZS5kcmFnTW9tZW50dW0sZj12b2lkIDA9PT1wfHxwLGg9ci5fX3Jlc3QoZSxbXCJkcmFnXCIsXCJkcmFnRGlyZWN0aW9uTG9ja1wiLFwiZHJhZ1Byb3BhZ2F0aW9uXCIsXCJkcmFnQ29uc3RyYWludHNcIixcImRyYWdFbGFzdGljXCIsXCJkcmFnTW9tZW50dW1cIl0pO3RoaXMucHJvcHM9ci5fX2Fzc2lnbih7ZHJhZzpuLGRyYWdEaXJlY3Rpb25Mb2NrOmEsZHJhZ1Byb3BhZ2F0aW9uOmwsZHJhZ0NvbnN0cmFpbnRzOmMsZHJhZ0VsYXN0aWM6ZCxkcmFnTW9tZW50dW06Zn0saCl9LGUucHJvdG90eXBlLmdldEF4aXNNb3Rpb25WYWx1ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLG49dC5sYXlvdXQscj10LmxheW91dElkLG89XCJfZHJhZ1wiK2UudG9VcHBlckNhc2UoKTtyZXR1cm4gdGhpcy5wcm9wc1tvXT90aGlzLnByb3BzW29dOm58fHZvaWQgMCE9PXI/dm9pZCAwOnRoaXMudmlzdWFsRWxlbWVudC5nZXRWYWx1ZShlLDApfSxlLnByb3RvdHlwZS5pc0xheW91dERyYWc9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoXCJ4XCIpfSxlLnByb3RvdHlwZS5pc0V4dGVybmFsRHJhZz1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLl9kcmFnWCxuPWUuX2RyYWdZO3JldHVybiB0fHxufSxlLnByb3RvdHlwZS5hbmltYXRlRHJhZ0VuZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy5wcm9wcyxvPW4uZHJhZyxhPW4uZHJhZ01vbWVudHVtLGk9bi5kcmFnRWxhc3RpYyxsPW4uZHJhZ1RyYW5zaXRpb24scz1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSEwKTt2YXIgbixyPWUuZ2V0UHJvamVjdGlvblBhcmVudCgpO3JldHVybiEhciYmKHQ/cW4obj1BbihyLnByb2plY3Rpb24udGFyZ2V0LGUucHJvamVjdGlvbi50YXJnZXQpLHIuZ2V0TGF0ZXN0VmFsdWVzKCkpOm49QW4oci5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCxlLmdldExheW91dFN0YXRlKCkubGF5b3V0KSxDbigoZnVuY3Rpb24odCl7cmV0dXJuIGUuc2V0UHJvamVjdGlvblRhcmdldEF4aXModCxuW3RdLm1pbixuW3RdLm1heCwhMCl9KSksITApfSh0aGlzLnZpc3VhbEVsZW1lbnQsdGhpcy5pc0xheW91dERyYWcoKSYmIXRoaXMuaXNFeHRlcm5hbERyYWcoKSksYz10aGlzLmNvbnN0cmFpbnRzfHx7fTtpZihzJiZPYmplY3Qua2V5cyhjKS5sZW5ndGgmJnRoaXMuaXNMYXlvdXREcmFnKCkpe3ZhciB1PXRoaXMudmlzdWFsRWxlbWVudC5nZXRQcm9qZWN0aW9uUGFyZW50KCk7aWYodSl7dmFyIGQ9QW4odS5wcm9qZWN0aW9uLnRhcmdldEZpbmFsLGMpO0NuKChmdW5jdGlvbihlKXt2YXIgdD1kW2VdLG49dC5taW4scj10Lm1heDtjW2VdPXttaW46aXNOYU4obik/dm9pZCAwOm4sbWF4OmlzTmFOKHIpP3ZvaWQgMDpyfX0pKX19dmFyIHA9Q24oKGZ1bmN0aW9uKG4pe3ZhciB1O2lmKG9yKG4sbyx0LmN1cnJlbnREaXJlY3Rpb24pKXt2YXIgZD1udWxsIT09KHU9bnVsbD09Yz92b2lkIDA6Y1tuXSkmJnZvaWQgMCE9PXU/dTp7fSxwPWk/MjAwOjFlNixmPWk/NDA6MWU3LGg9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt0eXBlOlwiaW5lcnRpYVwiLHZlbG9jaXR5OmE/ZVtuXTowLGJvdW5jZVN0aWZmbmVzczpwLGJvdW5jZURhbXBpbmc6Zix0aW1lQ29uc3RhbnQ6NzUwLHJlc3REZWx0YToxLHJlc3RTcGVlZDoxMH0sbCksZCk7cmV0dXJuIHQuZ2V0QXhpc01vdGlvblZhbHVlKG4pP3Quc3RhcnRBeGlzVmFsdWVBbmltYXRpb24obixoKTp0LnZpc3VhbEVsZW1lbnQuc3RhcnRMYXlvdXRBbmltYXRpb24obixoLHMpfX0pKTtyZXR1cm4gUHJvbWlzZS5hbGwocCkudGhlbigoZnVuY3Rpb24oKXt2YXIgZSxuO251bGw9PT0obj0oZT10LnByb3BzKS5vbkRyYWdUcmFuc2l0aW9uRW5kKXx8dm9pZCAwPT09bnx8bi5jYWxsKGUpfSkpfSxlLnByb3RvdHlwZS5zdG9wTW90aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztDbigoZnVuY3Rpb24odCl7dmFyIG49ZS5nZXRBeGlzTW90aW9uVmFsdWUodCk7bj9uLnN0b3AoKTplLnZpc3VhbEVsZW1lbnQuc3RvcExheW91dEFuaW1hdGlvbigpfSkpfSxlLnByb3RvdHlwZS5zdGFydEF4aXNWYWx1ZUFuaW1hdGlvbj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGUpO2lmKG4pe3ZhciByPW4uZ2V0KCk7cmV0dXJuIG4uc2V0KHIpLG4uc2V0KHIpLEl0KGUsbiwwLHQpfX0sZS5wcm90b3R5cGUuc2NhbGVQb2ludD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC5kcmFnO2lmKFIodC5kcmFnQ29uc3RyYWludHMpJiZ0aGlzLmNvbnN0cmFpbnRzQm94KXt0aGlzLnN0b3BNb3Rpb24oKTt2YXIgcj17eDowLHk6MH07Q24oKGZ1bmN0aW9uKHQpe3ZhciBuLG8sYSxpLHMsYztyW3RdPShuPWUudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uLnRhcmdldFt0XSxvPWUuY29uc3RyYWludHNCb3hbdF0saT0uNSxzPXduKG4pLChjPXduKG8pKT5zP2k9bC5wcm9ncmVzcyhvLm1pbixvLm1heC1zLG4ubWluKTpzPmMmJihpPWwucHJvZ3Jlc3Mobi5taW4sbi5tYXgtYyxvLm1pbikpLGE9aSxsLmNsYW1wKDAsMSxhKSl9KSksdGhpcy51cGRhdGVDb25zdHJhaW50cygoZnVuY3Rpb24oKXtDbigoZnVuY3Rpb24odCl7aWYob3IodCxuLG51bGwpKXt2YXIgbz1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5tYXgtZS5taW4sbz1sLm1peCh0Lm1pbix0Lm1heC1yLG4pO3JldHVybnttaW46byxtYXg6bytyfX0oZS52aXN1YWxFbGVtZW50LnByb2plY3Rpb24udGFyZ2V0W3RdLGUuY29uc3RyYWludHNCb3hbdF0sclt0XSksYT1vLm1pbixpPW8ubWF4O2UudmlzdWFsRWxlbWVudC5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyh0LGEsaSl9fSkpfSkpLHNldFRpbWVvdXQoUW4sMSl9fSxlLnByb3RvdHlwZS51cGRhdGVDb25zdHJhaW50cz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuY2FuY2VsTGF5b3V0PVhuKChmdW5jdGlvbihuLHIpe3ZhciBvPVJuKHQudmlzdWFsRWxlbWVudCk7cigoZnVuY3Rpb24oKXtyZXR1cm4gby5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXNldFRyYW5zZm9ybSgpfSkpfSkpLG4oKGZ1bmN0aW9uKCl7cmV0dXJuIEluKHQudmlzdWFsRWxlbWVudCl9KSkscigoZnVuY3Rpb24oKXtyZXR1cm4gby5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXN0b3JlVHJhbnNmb3JtKCl9KSl9KSksbigoZnVuY3Rpb24oKXt0LnJlc29sdmVEcmFnQ29uc3RyYWludHMoKX0pKSxlJiZyKGUpfSkpfSxlLnByb3RvdHlwZS5tb3VudD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49bnQoZS5nZXRJbnN0YW5jZSgpLFwicG9pbnRlcmRvd25cIiwoZnVuY3Rpb24oZSl7dmFyIG49dC5wcm9wcyxyPW4uZHJhZyxvPW4uZHJhZ0xpc3RlbmVyO3ImJih2b2lkIDA9PT1vfHxvKSYmdC5zdGFydChlKX0pKSxyPSRlKHdpbmRvdyxcInJlc2l6ZVwiLChmdW5jdGlvbigpe3Quc2NhbGVQb2ludCgpfSkpLG89ZS5vbkxheW91dFVwZGF0ZSgoZnVuY3Rpb24oKXt0LmlzRHJhZ2dpbmcmJnQucmVzb2x2ZURyYWdDb25zdHJhaW50cygpfSkpLGE9ZS5wcmV2RHJhZ0N1cnNvcjtyZXR1cm4gYSYmdGhpcy5zdGFydChlcix7Y3Vyc29yUHJvZ3Jlc3M6YX0pLGZ1bmN0aW9uKCl7bnVsbD09bnx8bigpLG51bGw9PXJ8fHIoKSxudWxsPT1vfHxvKCksdC5jYW5jZWxEcmFnKCl9fSxlfSgpO2Z1bmN0aW9uIG9yKGUsdCxuKXtyZXR1cm4hKCEwIT09dCYmdCE9PWV8fG51bGwhPT1uJiZuIT09ZSl9dmFyIGFyLGlyLGxyPXtwYW46cHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUub25QYW4sbj1lLm9uUGFuU3RhcnQscj1lLm9uUGFuRW5kLGE9ZS5vblBhblNlc3Npb25TdGFydCxpPWUudmlzdWFsRWxlbWVudCxsPXR8fG58fHJ8fGEscz1vLnVzZVJlZihudWxsKSxjPW8udXNlQ29udGV4dCh3KS50cmFuc2Zvcm1QYWdlUG9pbnQsdT17b25TZXNzaW9uU3RhcnQ6YSxvblN0YXJ0Om4sb25Nb3ZlOnQsb25FbmQ6ZnVuY3Rpb24oZSx0KXtzLmN1cnJlbnQ9bnVsbCxyJiZyKGUsdCl9fTtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtudWxsIT09cy5jdXJyZW50JiZzLmN1cnJlbnQudXBkYXRlSGFuZGxlcnModSl9KSkscnQoaSxcInBvaW50ZXJkb3duXCIsbCYmZnVuY3Rpb24oZSl7cy5jdXJyZW50PW5ldyBhbihlLHUse3RyYW5zZm9ybVBhZ2VQb2ludDpjfSl9KSxkdCgoZnVuY3Rpb24oKXtyZXR1cm4gcy5jdXJyZW50JiZzLmN1cnJlbnQuZW5kKCl9KSl9KSksZHJhZzpwdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kcmFnQ29udHJvbHMsbj1lLnZpc3VhbEVsZW1lbnQsYT1vLnVzZUNvbnRleHQodykudHJhbnNmb3JtUGFnZVBvaW50LGk9aygoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHJyKHt2aXN1YWxFbGVtZW50Om59KX0pKTtpLnNldFByb3BzKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxlKSx7dHJhbnNmb3JtUGFnZVBvaW50OmF9KSksby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHQmJnQuc3Vic2NyaWJlKGkpfSksW2ldKSxvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gaS5tb3VudChuKX0pLFtdKX0pKX07ZnVuY3Rpb24gc3IoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJmUuc3RhcnRzV2l0aChcInZhcigtLVwiKX0hZnVuY3Rpb24oZSl7ZVtlLkVudGVyaW5nPTBdPVwiRW50ZXJpbmdcIixlW2UuUHJlc2VudD0xXT1cIlByZXNlbnRcIixlW2UuRXhpdGluZz0yXT1cIkV4aXRpbmdcIn0oYXJ8fChhcj17fSkpLHQuVmlzaWJpbGl0eUFjdGlvbj12b2lkIDAsKGlyPXQuVmlzaWJpbGl0eUFjdGlvbnx8KHQuVmlzaWJpbGl0eUFjdGlvbj17fSkpW2lyLkhpZGU9MF09XCJIaWRlXCIsaXJbaXIuU2hvdz0xXT1cIlNob3dcIjt2YXIgY3I9L3ZhclxcKCgtLVthLXpBLVowLTktX10rKSw/ID8oW2EtekEtWjAtOSAoKSUjLiwtXSspP1xcKS87ZnVuY3Rpb24gdXIoZSx0LG4pe3ZvaWQgMD09PW4mJihuPTEpLGEuaW52YXJpYW50KG48PTQsJ01heCBDU1MgdmFyaWFibGUgZmFsbGJhY2sgZGVwdGggZGV0ZWN0ZWQgaW4gcHJvcGVydHkgXCInK2UrJ1wiLiBUaGlzIG1heSBpbmRpY2F0ZSBhIGNpcmN1bGFyIGZhbGxiYWNrIGRlcGVuZGVuY3kuJyk7dmFyIG89ci5fX3JlYWQoZnVuY3Rpb24oZSl7dmFyIHQ9Y3IuZXhlYyhlKTtpZighdClyZXR1cm5bLF07dmFyIG49ci5fX3JlYWQodCwzKTtyZXR1cm5bblsxXSxuWzJdXX0oZSksMiksaT1vWzBdLGw9b1sxXTtpZihpKXt2YXIgcz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGkpO3JldHVybiBzP3MudHJpbSgpOnNyKGwpP3VyKGwsdCxuKzEpOmx9fWZ1bmN0aW9uIGRyKGUsdCl7cmV0dXJuIGUvKHQubWF4LXQubWluKSoxMDB9dmFyIHByPVwiXyRjc3NcIixmcj17cHJvY2VzczpmdW5jdGlvbihlLHQsbil7dmFyIHI9bi50YXJnZXQ7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe2lmKCFpLnB4LnRlc3QoZSkpcmV0dXJuIGU7ZT1wYXJzZUZsb2F0KGUpfXJldHVybiBkcihlLHIueCkrXCIlIFwiK2RyKGUsci55KStcIiVcIn19LGhyPXtib3JkZXJSYWRpdXM6ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGZyKSx7YXBwbHlUbzpbXCJib3JkZXJUb3BMZWZ0UmFkaXVzXCIsXCJib3JkZXJUb3BSaWdodFJhZGl1c1wiLFwiYm9yZGVyQm90dG9tTGVmdFJhZGl1c1wiLFwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXNcIl19KSxib3JkZXJUb3BMZWZ0UmFkaXVzOmZyLGJvcmRlclRvcFJpZ2h0UmFkaXVzOmZyLGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6ZnIsYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6ZnIsYm94U2hhZG93Ontwcm9jZXNzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5kZWx0YSxyPXQudHJlZVNjYWxlLG89ZSxhPWUuaW5jbHVkZXMoXCJ2YXIoXCIpLHM9W107YSYmKGU9ZS5yZXBsYWNlKGNyLChmdW5jdGlvbihlKXtyZXR1cm4gcy5wdXNoKGUpLHByfSkpKTt2YXIgYz1pLmNvbXBsZXgucGFyc2UoZSk7aWYoYy5sZW5ndGg+NSlyZXR1cm4gbzt2YXIgdT1pLmNvbXBsZXguY3JlYXRlVHJhbnNmb3JtZXIoZSksZD1cIm51bWJlclwiIT10eXBlb2YgY1swXT8xOjAscD1uLnguc2NhbGUqci54LGY9bi55LnNjYWxlKnIueTtjWzArZF0vPXAsY1sxK2RdLz1mO3ZhciBoPWwubWl4KHAsZiwuNSk7XCJudW1iZXJcIj09dHlwZW9mIGNbMitkXSYmKGNbMitkXS89aCksXCJudW1iZXJcIj09dHlwZW9mIGNbMytkXSYmKGNbMytkXS89aCk7dmFyIGc9dShjKTtpZihhKXt2YXIgdj0wO2c9Zy5yZXBsYWNlKHByLChmdW5jdGlvbigpe3ZhciBlPXNbdl07cmV0dXJuIHYrKyxlfSkpfXJldHVybiBnfX19LGdyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt2YXIgbj1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIG4uZnJhbWVUYXJnZXQ9e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19LG4uY3VycmVudEFuaW1hdGlvblRhcmdldD17eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sbi5pc0FuaW1hdGluZz17eDohMSx5OiExfSxuLnN0b3BBeGlzQW5pbWF0aW9uPXt4OnZvaWQgMCx5OnZvaWQgMH0sbi5pc0FuaW1hdGluZ1RyZWU9ITEsbi5hbmltYXRlPWZ1bmN0aW9uKGUsbyxhKXt2b2lkIDA9PT1hJiYoYT17fSk7dmFyIGk9YS5vcmlnaW5Cb3gsbD1hLnRhcmdldEJveCxzPWEudmlzaWJpbGl0eUFjdGlvbixjPWEuc2hvdWxkU3RhY2tBbmltYXRlLHU9YS5vbkNvbXBsZXRlLGQ9YS5wcmV2UGFyZW50LHA9ci5fX3Jlc3QoYSxbXCJvcmlnaW5Cb3hcIixcInRhcmdldEJveFwiLFwidmlzaWJpbGl0eUFjdGlvblwiLFwic2hvdWxkU3RhY2tBbmltYXRlXCIsXCJvbkNvbXBsZXRlXCIsXCJwcmV2UGFyZW50XCJdKSxmPW4ucHJvcHMsaD1mLnZpc3VhbEVsZW1lbnQsZz1mLmxheW91dDtpZighMT09PWMpcmV0dXJuIG4uaXNBbmltYXRpbmdUcmVlPSExLG4uc2FmZVRvUmVtb3ZlKCk7aWYoIW4uaXNBbmltYXRpbmdUcmVlfHwhMD09PWMpe2MmJihuLmlzQW5pbWF0aW5nVHJlZT0hMCksbz1pfHxvLGU9bHx8ZTt2YXIgdixDLG0sdz0hMSxiPWguZ2V0UHJvamVjdGlvblBhcmVudCgpO2lmKGIpe3ZhciB5PWIucHJldlZpZXdwb3J0Qm94LHg9Yi5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dDtkJiYobCYmKHg9ZC5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCksaSYmKEM9Yiwodj1kKS5nZXRMYXlvdXRJZCgpPT09KG09Qy5nZXRMYXlvdXRJZCgpKSYmKHZvaWQgMCE9PW18fHY9PT1DKSkmJmQucHJldlZpZXdwb3J0Qm94JiYoeT1kLnByZXZWaWV3cG9ydEJveCkpLHkmJmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZXx8IWUmJiEodHx8bil9KGQsaSxsKSYmKHc9ITAsbz1Bbih5LG8pLGU9QW4oeCxlKSl9dmFyIGssUyxPPShTPWUsIShDcihrPW8pfHxDcihTKXx8bXIoay54LFMueCkmJm1yKGsueSxTLnkpKSksTT1DbigoZnVuY3Rpb24oYSl7dmFyIGksbDtpZihcInBvc2l0aW9uXCI9PT1nKXt2YXIgYz1lW2FdLm1heC1lW2FdLm1pbjtvW2FdLm1heD1vW2FdLm1pbitjfWlmKCFoLnByb2plY3Rpb24uaXNUYXJnZXRMb2NrZWQpcmV0dXJuIHZvaWQgMD09PXM/Tz9uLmFuaW1hdGVBeGlzKGEsZVthXSxvW2FdLHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxwKSx7aXNSZWxhdGl2ZTp3fSkpOihudWxsPT09KGw9KGk9bi5zdG9wQXhpc0FuaW1hdGlvbilbYV0pfHx2b2lkIDA9PT1sfHxsLmNhbGwoaSksaC5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyhhLGVbYV0ubWluLGVbYV0ubWF4LHcpKTp2b2lkIGguc2V0VmlzaWJpbGl0eShzPT09dC5WaXNpYmlsaXR5QWN0aW9uLlNob3cpfSkpO3JldHVybiBoLnN5bmNSZW5kZXIoKSxQcm9taXNlLmFsbChNKS50aGVuKChmdW5jdGlvbigpe24uaXNBbmltYXRpbmdUcmVlPSExLHUmJnUoKSxoLm5vdGlmeUxheW91dEFuaW1hdGlvbkNvbXBsZXRlKCl9KSl9fSxufXJldHVybiByLl9fZXh0ZW5kcyhuLGUpLG4ucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMudmlzdWFsRWxlbWVudDt0LmFuaW1hdGVNb3Rpb25WYWx1ZT1JdCx0LmVuYWJsZUxheW91dFByb2plY3Rpb24oKSx0aGlzLnVuc3ViTGF5b3V0UmVhZHk9dC5vbkxheW91dFVwZGF0ZSh0aGlzLmFuaW1hdGUpLHQubGF5b3V0U2FmZVRvUmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuc2FmZVRvUmVtb3ZlKCl9LFUoaHIpfSxuLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy51bnN1YkxheW91dFJlYWR5KCksQ24oKGZ1bmN0aW9uKHQpe3ZhciBuLHI7cmV0dXJuIG51bGw9PT0ocj0obj1lLnN0b3BBeGlzQW5pbWF0aW9uKVt0XSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuY2FsbChuKX0pKX0sbi5wcm90b3R5cGUuYW5pbWF0ZUF4aXM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG8sYSxpPXRoaXMscz12b2lkIDA9PT1yP3t9OnIsYz1zLnRyYW5zaXRpb24sdT1zLmlzUmVsYXRpdmU7aWYoIXRoaXMuaXNBbmltYXRpbmdbZV18fCFtcih0LHRoaXMuY3VycmVudEFuaW1hdGlvblRhcmdldFtlXSkpe251bGw9PT0oYT0obz10aGlzLnN0b3BBeGlzQW5pbWF0aW9uKVtlXSl8fHZvaWQgMD09PWF8fGEuY2FsbChvKSx0aGlzLmlzQW5pbWF0aW5nW2VdPSEwO3ZhciBkPXRoaXMucHJvcHMudmlzdWFsRWxlbWVudCxwPXRoaXMuZnJhbWVUYXJnZXRbZV0sZj1kLmdldFByb2plY3Rpb25BbmltYXRpb25Qcm9ncmVzcygpW2VdO2YuY2xlYXJMaXN0ZW5lcnMoKSxmLnNldCgwKSxmLnNldCgwKTt2YXIgaD1mdW5jdGlvbigpe3ZhciByPWYuZ2V0KCkvMWUzOyFmdW5jdGlvbihlLHQsbixyKXtlLm1pbj1sLm1peCh0Lm1pbixuLm1pbixyKSxlLm1heD1sLm1peCh0Lm1heCxuLm1heCxyKX0ocCxuLHQsciksZC5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyhlLHAubWluLHAubWF4LHUpfTtoKCk7dmFyIGc9Zi5vbkNoYW5nZShoKTt0aGlzLnN0b3BBeGlzQW5pbWF0aW9uW2VdPWZ1bmN0aW9uKCl7aS5pc0FuaW1hdGluZ1tlXT0hMSxmLnN0b3AoKSxnKCl9LHRoaXMuY3VycmVudEFuaW1hdGlvblRhcmdldFtlXT10O3ZhciB2PWN8fGQuZ2V0RGVmYXVsdFRyYW5zaXRpb24oKXx8d3I7cmV0dXJuIEl0KFwieFwiPT09ZT9cImxheW91dFhcIjpcImxheW91dFlcIixmLDFlMyx2JiZSdCh2LFwibGF5b3V0XCIpKS50aGVuKHRoaXMuc3RvcEF4aXNBbmltYXRpb25bZV0pfX0sbi5wcm90b3R5cGUuc2FmZVRvUmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIGUsdDtudWxsPT09KHQ9KGU9dGhpcy5wcm9wcykuc2FmZVRvUmVtb3ZlKXx8dm9pZCAwPT09dHx8dC5jYWxsKGUpfSxuLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbn0odS5Db21wb25lbnQpLHZyPXttaW46MCxtYXg6MH07ZnVuY3Rpb24gQ3IoZSl7cmV0dXJuIG1yKGUueCx2cikmJm1yKGUueSx2cil9ZnVuY3Rpb24gbXIoZSx0KXtyZXR1cm4gZS5taW49PT10Lm1pbiYmZS5tYXg9PT10Lm1heH12YXIgd3I9e2R1cmF0aW9uOi40NSxlYXNlOlsuNCwwLC4xLDFdfSxicj17bGF5b3V0UmVhZHk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm90aWZ5TGF5b3V0UmVhZHkoKX19O2Z1bmN0aW9uIHlyKCl7dmFyIGU9bmV3IFNldDtyZXR1cm57YWRkOmZ1bmN0aW9uKHQpe3JldHVybiBlLmFkZCh0KX0sZmx1c2g6ZnVuY3Rpb24odCl7dmFyIG49dm9pZCAwPT09dD9icjp0LG89bi5sYXlvdXRSZWFkeSxhPW4ucGFyZW50O1huKChmdW5jdGlvbih0LG4pe3ZhciBpPUFycmF5LmZyb20oZSkuc29ydChFbiksbD1hP1JuKGEpOltdO24oKGZ1bmN0aW9uKCl7ci5fX3NwcmVhZEFycmF5KHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChsKSksci5fX3JlYWQoaSkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc2V0VHJhbnNmb3JtKCl9KSl9KSksdCgoZnVuY3Rpb24oKXtpLmZvckVhY2goSW4pfSkpLG4oKGZ1bmN0aW9uKCl7bC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXN0b3JlVHJhbnNmb3JtKCl9KSksaS5mb3JFYWNoKG8pfSkpLHQoKGZ1bmN0aW9uKCl7aS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmlzUHJlc2VudCYmKGUucHJlc2VuY2U9YXIuUHJlc2VudCl9KSl9KSksbigoZnVuY3Rpb24oKXtzLmZsdXNoU3luYy5wcmVSZW5kZXIoKSxzLmZsdXNoU3luYy5yZW5kZXIoKX0pKSx0KChmdW5jdGlvbigpe3AuZGVmYXVsdC5wb3N0UmVuZGVyKChmdW5jdGlvbigpe3JldHVybiBpLmZvckVhY2goeHIpfSkpLGUuY2xlYXIoKX0pKX0pKSxRbigpfX19ZnVuY3Rpb24geHIoZSl7ZS5wcmV2Vmlld3BvcnRCb3g9ZS5wcm9qZWN0aW9uLnRhcmdldH12YXIga3I9by5jcmVhdGVDb250ZXh0KHlyKCkpLFNyPW8uY3JlYXRlQ29udGV4dCh5cigpKTtmdW5jdGlvbiBPcihlKXtyZXR1cm4hIWUuZm9yY2VVcGRhdGV9dmFyIE1yPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiByLl9fZXh0ZW5kcyh0LGUpLHQucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuc3luY0xheW91dCxuPWUuZnJhbWVyU3luY0xheW91dCxyPWUudmlzdWFsRWxlbWVudDtPcih0KSYmdC5yZWdpc3RlcihyKSxPcihuKSYmbi5yZWdpc3RlcihyKSxyLm9uVW5tb3VudCgoZnVuY3Rpb24oKXtPcih0KSYmdC5yZW1vdmUociksT3IobikmJm4ucmVtb3ZlKHIpfSkpfSx0LnByb3RvdHlwZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnN5bmNMYXlvdXQsbj1lLnZpc3VhbEVsZW1lbnQ7cmV0dXJuIE9yKHQpP3Quc3luY1VwZGF0ZSgpOihWbihuKSx0LmFkZChuKSksbnVsbH0sdC5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5zeW5jTGF5b3V0O09yKGUpfHxlLmZsdXNoKCl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBudWxsfSx0fShkLmRlZmF1bHQuQ29tcG9uZW50KSxMcj17bWVhc3VyZUxheW91dDpmdW5jdGlvbihlKXt2YXIgdD1vLnVzZUNvbnRleHQoa3IpLG49by51c2VDb250ZXh0KFNyKTtyZXR1cm4gZC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTXIsci5fX2Fzc2lnbih7fSxlLHtzeW5jTGF5b3V0OnQsZnJhbWVyU3luY0xheW91dDpufSkpfSxsYXlvdXRBbmltYXRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9ci5fX3JlYWQoUygpLDIpWzFdO3JldHVybiB1LmNyZWF0ZUVsZW1lbnQoZ3Isci5fX2Fzc2lnbih7fSxlLHtzYWZlVG9SZW1vdmU6dH0pKX19O2Z1bmN0aW9uIF9yKCl7cmV0dXJue2lzSHlkcmF0ZWQ6ITEsbGF5b3V0Ont4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSxsYXlvdXRDb3JyZWN0ZWQ6e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19LHRyZWVTY2FsZTp7eDoxLHk6MX0sZGVsdGE6dm4oKSxkZWx0YUZpbmFsOnZuKCksZGVsdGFUcmFuc2Zvcm06XCJcIn19dmFyIFByPV9yKCk7ZnVuY3Rpb24gRXIoZSx0LG4pe3ZhciByPWUueCxvPWUueSxhPVwidHJhbnNsYXRlM2QoXCIrci50cmFuc2xhdGUvdC54K1wicHgsIFwiK28udHJhbnNsYXRlL3QueStcInB4LCAwKSBcIjtpZihuKXt2YXIgaT1uLnJvdGF0ZSxsPW4ucm90YXRlWCxzPW4ucm90YXRlWTtpJiYoYSs9XCJyb3RhdGUoXCIraStcIikgXCIpLGwmJihhKz1cInJvdGF0ZVgoXCIrbCtcIikgXCIpLHMmJihhKz1cInJvdGF0ZVkoXCIrcytcIikgXCIpfXJldHVybiBhKz1cInNjYWxlKFwiK3Iuc2NhbGUrXCIsIFwiK28uc2NhbGUrXCIpXCIsbnx8YSE9PVJyP2E6XCJcIn1mdW5jdGlvbiBqcihlKXt2YXIgdD1lLmRlbHRhRmluYWw7cmV0dXJuIDEwMCp0Lngub3JpZ2luK1wiJSBcIisxMDAqdC55Lm9yaWdpbitcIiUgMFwifXZhciBScj1FcihQci5kZWx0YSxQci50cmVlU2NhbGUse3g6MSx5OjF9KSxJcj1bXCJMYXlvdXRNZWFzdXJlXCIsXCJCZWZvcmVMYXlvdXRNZWFzdXJlXCIsXCJMYXlvdXRVcGRhdGVcIixcIlZpZXdwb3J0Qm94VXBkYXRlXCIsXCJVcGRhdGVcIixcIlJlbmRlclwiLFwiQW5pbWF0aW9uQ29tcGxldGVcIixcIkxheW91dEFuaW1hdGlvbkNvbXBsZXRlXCIsXCJBbmltYXRpb25TdGFydFwiLFwiU2V0QXhpc1RhcmdldFwiLFwiVW5tb3VudFwiXSxWcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNoaWxkcmVuPVtdLHRoaXMuaXNEaXJ0eT0hMX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe1Z0KHRoaXMuY2hpbGRyZW4sZSksdGhpcy5pc0RpcnR5PSEwfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oZSl7SHQodGhpcy5jaGlsZHJlbixlKSx0aGlzLmlzRGlydHk9ITB9LGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7dGhpcy5pc0RpcnR5JiZ0aGlzLmNoaWxkcmVuLnNvcnQoRW4pLHRoaXMuaXNEaXJ0eT0hMSx0aGlzLmNoaWxkcmVuLmZvckVhY2goZSl9LGV9KCksSHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50cmVlVHlwZSxuPXZvaWQgMD09PXQ/XCJcIjp0LG89ZS5idWlsZCxhPWUuZ2V0QmFzZVRhcmdldCxpPWUubWFrZVRhcmdldEFuaW1hdGFibGUsYz1lLm1lYXN1cmVWaWV3cG9ydEJveCx1PWUucmVuZGVyLGQ9ZS5yZWFkVmFsdWVGcm9tSW5zdGFuY2UsZj1lLnJlc2V0VHJhbnNmb3JtLGg9ZS5yZXN0b3JlVHJhbnNmb3JtLGc9ZS5yZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZSx2PWUuc29ydE5vZGVQb3NpdGlvbixDPWUuc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzO3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciBtPWUucGFyZW50LHc9ZS5wcm9wcyxiPWUucHJlc2VuY2VJZCx5PWUuYmxvY2tJbml0aWFsQW5pbWF0aW9uLHg9ZS52aXN1YWxTdGF0ZTt2b2lkIDA9PT10JiYodD17fSk7dmFyIGssUyxPLE0sTCxfLFA9eC5sYXRlc3RWYWx1ZXMsRT14LnJlbmRlclN0YXRlLGo9ZnVuY3Rpb24oKXt2YXIgZT1Jci5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBdH0pKSx0PXt9LG49e2NsZWFyQWxsTGlzdGVuZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xlYXIoKX0pKX0sdXBkYXRlUHJvcExpc3RlbmVyczpmdW5jdGlvbihlKXtyZXR1cm4gSXIuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIG87bnVsbD09PShvPXRbcl0pfHx2b2lkIDA9PT1vfHxvLmNhbGwodCk7dmFyIGE9XCJvblwiK3IsaT1lW2FdO2kmJih0W3JdPW5bYV0oaSkpfSkpfX07cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtuW1wib25cIitJclt0XV09ZnVuY3Rpb24odCl7cmV0dXJuIGUuYWRkKHQpfSxuW1wibm90aWZ5XCIrSXJbdF1dPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiBlLm5vdGlmeS5hcHBseShlLHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZCh0KSkpfX0pKSxufSgpLFI9e2lzRW5hYmxlZDohMSxpc0h5ZHJhdGVkOiExLGlzVGFyZ2V0TG9ja2VkOiExLHRhcmdldDp7eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sdGFyZ2V0RmluYWw6e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19fSxJPVIsSD1QLEE9X3IoKSxCPSExLFo9bmV3IE1hcCwkPW5ldyBNYXAsTj17fSxGPXIuX19hc3NpZ24oe30sUCk7ZnVuY3Rpb24gVygpe2smJihRLmlzUHJvamVjdGlvblJlYWR5KCkmJih6bihJLnRhcmdldEZpbmFsLEkudGFyZ2V0LEgpLHluKEEuZGVsdGFGaW5hbCxBLmxheW91dENvcnJlY3RlZCxJLnRhcmdldEZpbmFsLFApKSxVKCksdShrLEUpKX1mdW5jdGlvbiBVKCl7dmFyIGU9UDtpZihNJiZNLmlzQWN0aXZlKCkpe3ZhciBuPU0uZ2V0Q3Jvc3NmYWRlU3RhdGUoUSk7biYmKGU9bil9byhRLEUsZSxJLEEsdCx3KX1mdW5jdGlvbiB6KCl7ai5ub3RpZnlVcGRhdGUoUCl9ZnVuY3Rpb24gRygpe1EubGF5b3V0VHJlZS5mb3JFYWNoKFRyKX12YXIgSz1DKHcpO2Zvcih2YXIgcSBpbiBLKXt2YXIgWT1LW3FdO3ZvaWQgMCE9PVBbcV0mJmVlKFkpJiZZLnNldChQW3FdLCExKX12YXIgSj1UKHcpLFg9RCh3KSxRPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7dHJlZVR5cGU6bixjdXJyZW50Om51bGwsZGVwdGg6bT9tLmRlcHRoKzE6MCxwYXJlbnQ6bSxjaGlsZHJlbjpuZXcgU2V0LHBhdGg6bT9yLl9fc3ByZWFkQXJyYXkoci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKG0ucGF0aCkpLFttXSk6W10sbGF5b3V0VHJlZTptP20ubGF5b3V0VHJlZTpuZXcgVnIscHJlc2VuY2VJZDpiLHByb2plY3Rpb246Uix2YXJpYW50Q2hpbGRyZW46WD9uZXcgU2V0OnZvaWQgMCxpc1Zpc2libGU6dm9pZCAwLG1hbnVhbGx5QW5pbWF0ZU9uTW91bnQ6Qm9vbGVhbihudWxsPT1tP3ZvaWQgMDptLmlzTW91bnRlZCgpKSxibG9ja0luaXRpYWxBbmltYXRpb246eSxpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbihrKX0sbW91bnQ6ZnVuY3Rpb24oZSl7az1RLmN1cnJlbnQ9ZSxRLnBvaW50VG8oUSksWCYmbSYmIUomJihfPW51bGw9PW0/dm9pZCAwOm0uYWRkVmFyaWFudENoaWxkKFEpKSxudWxsPT1tfHxtLmNoaWxkcmVuLmFkZChRKX0sdW5tb3VudDpmdW5jdGlvbigpe3MuY2FuY2VsU3luYy51cGRhdGUoeikscy5jYW5jZWxTeW5jLnJlbmRlcihXKSxzLmNhbmNlbFN5bmMucHJlUmVuZGVyKFEudXBkYXRlTGF5b3V0UHJvamVjdGlvbiksJC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZSgpfSkpLFEuc3RvcExheW91dEFuaW1hdGlvbigpLFEubGF5b3V0VHJlZS5yZW1vdmUoUSksbnVsbD09X3x8XygpLG51bGw9PW18fG0uY2hpbGRyZW4uZGVsZXRlKFEpLG51bGw9PU98fE8oKSxqLmNsZWFyQWxsTGlzdGVuZXJzKCl9LGFkZFZhcmlhbnRDaGlsZDpmdW5jdGlvbihlKXt2YXIgdCxuPVEuZ2V0Q2xvc2VzdFZhcmlhbnROb2RlKCk7aWYobilyZXR1cm4gbnVsbD09PSh0PW4udmFyaWFudENoaWxkcmVuKXx8dm9pZCAwPT09dHx8dC5hZGQoZSksZnVuY3Rpb24oKXtyZXR1cm4gbi52YXJpYW50Q2hpbGRyZW4uZGVsZXRlKGUpfX0sc29ydE5vZGVQb3NpdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gdiYmbj09PWUudHJlZVR5cGU/dihRLmdldEluc3RhbmNlKCksZS5nZXRJbnN0YW5jZSgpKTowfSxnZXRDbG9zZXN0VmFyaWFudE5vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gWD9ROm51bGw9PW0/dm9pZCAwOm0uZ2V0Q2xvc2VzdFZhcmlhbnROb2RlKCl9LHNjaGVkdWxlVXBkYXRlTGF5b3V0UHJvamVjdGlvbjptP20uc2NoZWR1bGVVcGRhdGVMYXlvdXRQcm9qZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHAuZGVmYXVsdC5wcmVSZW5kZXIoUS51cGRhdGVUcmVlTGF5b3V0UHJvamVjdGlvbiwhMSwhMCl9LGdldExheW91dElkOmZ1bmN0aW9uKCl7cmV0dXJuIHcubGF5b3V0SWR9LGdldEluc3RhbmNlOmZ1bmN0aW9uKCl7cmV0dXJuIGt9LGdldFN0YXRpY1ZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBQW2VdfSxzZXRTdGF0aWNWYWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBQW2VdPXR9LGdldExhdGVzdFZhbHVlczpmdW5jdGlvbigpe3JldHVybiBQfSxzZXRWaXNpYmlsaXR5OmZ1bmN0aW9uKGUpe1EuaXNWaXNpYmxlIT09ZSYmKFEuaXNWaXNpYmxlPWUsUS5zY2hlZHVsZVJlbmRlcigpKX0sbWFrZVRhcmdldEFuaW1hdGFibGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLGkoUSxlLHcsdCl9LGFkZFZhbHVlOmZ1bmN0aW9uKGUsdCl7US5oYXNWYWx1ZShlKSYmUS5yZW1vdmVWYWx1ZShlKSxaLnNldChlLHQpLFBbZV09dC5nZXQoKSxmdW5jdGlvbihlLHQpe3ZhciBuPXQub25DaGFuZ2UoKGZ1bmN0aW9uKHQpe1BbZV09dCx3Lm9uVXBkYXRlJiZwLmRlZmF1bHQudXBkYXRlKHosITEsITApfSkpLHI9dC5vblJlbmRlclJlcXVlc3QoUS5zY2hlZHVsZVJlbmRlcik7JC5zZXQoZSwoZnVuY3Rpb24oKXtuKCkscigpfSkpfShlLHQpfSxyZW1vdmVWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtaLmRlbGV0ZShlKSxudWxsPT09KHQ9JC5nZXQoZSkpfHx2b2lkIDA9PT10fHx0KCksJC5kZWxldGUoZSksZGVsZXRlIFBbZV0sZyhlLEUpfSxoYXNWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gWi5oYXMoZSl9LGdldFZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49Wi5nZXQoZSk7cmV0dXJuIHZvaWQgMD09PW4mJnZvaWQgMCE9PXQmJihuPUR0KHQpLFEuYWRkVmFsdWUoZSxuKSksbn0sZm9yRWFjaFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBaLmZvckVhY2goZSl9LHJlYWRWYWx1ZTpmdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbnVsbCE9PShuPVBbZV0pJiZ2b2lkIDAhPT1uP246ZChrLGUsdCl9LHNldEJhc2VUYXJnZXQ6ZnVuY3Rpb24oZSx0KXtGW2VdPXR9LGdldEJhc2VUYXJnZXQ6ZnVuY3Rpb24oZSl7aWYoYSl7dmFyIHQ9YSh3LGUpO2lmKHZvaWQgMCE9PXQmJiFlZSh0KSlyZXR1cm4gdH1yZXR1cm4gRltlXX19LGopLHtidWlsZDpmdW5jdGlvbigpe3JldHVybiBVKCksRX0sc2NoZWR1bGVSZW5kZXI6ZnVuY3Rpb24oKXtwLmRlZmF1bHQucmVuZGVyKFcsITEsITApfSxzeW5jUmVuZGVyOlcsc2V0UHJvcHM6ZnVuY3Rpb24oZSl7dz1lLGoudXBkYXRlUHJvcExpc3RlbmVycyhlKSxOPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtmb3IodmFyIG8gaW4gdCl7dmFyIGE9dFtvXSxpPW5bb107aWYoZWUoYSkpZS5hZGRWYWx1ZShvLGEpO2Vsc2UgaWYoZWUoaSkpZS5hZGRWYWx1ZShvLER0KGEpKTtlbHNlIGlmKGkhPT1hKWlmKGUuaGFzVmFsdWUobykpe3ZhciBsPWUuZ2V0VmFsdWUobyk7IWwuaGFzQW5pbWF0ZWQmJmwuc2V0KGEpfWVsc2UgZS5hZGRWYWx1ZShvLER0KG51bGwhPT0ocj1lLmdldFN0YXRpY1ZhbHVlKG8pKSYmdm9pZCAwIT09cj9yOmEpKX1mb3IodmFyIG8gaW4gbil2b2lkIDA9PT10W29dJiZlLnJlbW92ZVZhbHVlKG8pO3JldHVybiB0fShRLEModyksTil9LGdldFByb3BzOmZ1bmN0aW9uKCl7cmV0dXJuIHd9LGdldFZhcmlhbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG51bGw9PT0odD13LnZhcmlhbnRzKXx8dm9pZCAwPT09dD92b2lkIDA6dFtlXX0sZ2V0RGVmYXVsdFRyYW5zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdy50cmFuc2l0aW9ufSxnZXRWYXJpYW50Q29udGV4dDpmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lJiYoZT0hMSksZSlyZXR1cm4gbnVsbD09bT92b2lkIDA6bS5nZXRWYXJpYW50Q29udGV4dCgpO2lmKCFKKXt2YXIgdD0obnVsbD09bT92b2lkIDA6bS5nZXRWYXJpYW50Q29udGV4dCgpKXx8e307cmV0dXJuIHZvaWQgMCE9PXcuaW5pdGlhbCYmKHQuaW5pdGlhbD13LmluaXRpYWwpLHR9Zm9yKHZhciBuPXt9LHI9MDtyPFpyO3IrKyl7dmFyIG89QnJbcl0sYT13W29dOyhWKGEpfHwhMT09PWEpJiYobltvXT1hKX1yZXR1cm4gbn0sZW5hYmxlTGF5b3V0UHJvamVjdGlvbjpmdW5jdGlvbigpe1IuaXNFbmFibGVkPSEwLFEubGF5b3V0VHJlZS5hZGQoUSl9LGxvY2tQcm9qZWN0aW9uVGFyZ2V0OmZ1bmN0aW9uKCl7Ui5pc1RhcmdldExvY2tlZD0hMH0sdW5sb2NrUHJvamVjdGlvblRhcmdldDpmdW5jdGlvbigpe1Euc3RvcExheW91dEFuaW1hdGlvbigpLFIuaXNUYXJnZXRMb2NrZWQ9ITF9LGdldExheW91dFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIEF9LHNldENyb3NzZmFkZXI6ZnVuY3Rpb24oZSl7TT1lfSxpc1Byb2plY3Rpb25SZWFkeTpmdW5jdGlvbigpe3JldHVybiBSLmlzRW5hYmxlZCYmUi5pc0h5ZHJhdGVkJiZBLmlzSHlkcmF0ZWR9LHN0YXJ0TGF5b3V0QW5pbWF0aW9uOmZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT1uJiYobj0hMSk7dmFyIHI9US5nZXRQcm9qZWN0aW9uQW5pbWF0aW9uUHJvZ3Jlc3MoKVtlXSxvPW4/Ui5yZWxhdGl2ZVRhcmdldFtlXTpSLnRhcmdldFtlXSxhPW8ubWluLGk9by5tYXgtYTtyZXR1cm4gci5jbGVhckxpc3RlbmVycygpLHIuc2V0KGEpLHIuc2V0KGEpLHIub25DaGFuZ2UoKGZ1bmN0aW9uKHQpe1Euc2V0UHJvamVjdGlvblRhcmdldEF4aXMoZSx0LHQraSxuKX0pKSxRLmFuaW1hdGVNb3Rpb25WYWx1ZShlLHIsMCx0KX0sc3RvcExheW91dEFuaW1hdGlvbjpmdW5jdGlvbigpe0NuKChmdW5jdGlvbihlKXtyZXR1cm4gUS5nZXRQcm9qZWN0aW9uQW5pbWF0aW9uUHJvZ3Jlc3MoKVtlXS5zdG9wKCl9KSl9LG1lYXN1cmVWaWV3cG9ydEJveDpmdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT0hMCk7dmFyIG49YyhrLHQpO3JldHVybiBlfHxxbihuLFApLG59LGdldFByb2plY3Rpb25BbmltYXRpb25Qcm9ncmVzczpmdW5jdGlvbigpe3JldHVybiBMfHwoTD17eDpEdCgwKSx5OkR0KDApfSksTH0sc2V0UHJvamVjdGlvblRhcmdldEF4aXM6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG87dm9pZCAwPT09ciYmKHI9ITEpLHI/KFIucmVsYXRpdmVUYXJnZXR8fChSLnJlbGF0aXZlVGFyZ2V0PXt4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSksbz1SLnJlbGF0aXZlVGFyZ2V0W2VdKTooUi5yZWxhdGl2ZVRhcmdldD12b2lkIDAsbz1SLnRhcmdldFtlXSksUi5pc0h5ZHJhdGVkPSEwLG8ubWluPXQsby5tYXg9bixCPSEwLGoubm90aWZ5U2V0QXhpc1RhcmdldCgpfSxyZWJhc2VQcm9qZWN0aW9uVGFyZ2V0OmZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9QS5sYXlvdXQpO3ZhciBuPVEuZ2V0UHJvamVjdGlvbkFuaW1hdGlvblByb2dyZXNzKCkscj1uLngsbz1uLnksYT0hKFIucmVsYXRpdmVUYXJnZXR8fFIuaXNUYXJnZXRMb2NrZWR8fHIuaXNBbmltYXRpbmcoKXx8by5pc0FuaW1hdGluZygpKTsoZXx8YSkmJkNuKChmdW5jdGlvbihlKXt2YXIgbj10W2VdLHI9bi5taW4sbz1uLm1heDtRLnNldFByb2plY3Rpb25UYXJnZXRBeGlzKGUscixvKX0pKX0sbm90aWZ5TGF5b3V0UmVhZHk6ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0UHJvamVjdGlvblBhcmVudCgpO2lmKHQpe3ZhciBuPUFuKHQuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXQsZS5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCk7Q24oKGZ1bmN0aW9uKHQpe2Uuc2V0UHJvamVjdGlvblRhcmdldEF4aXModCxuW3RdLm1pbixuW3RdLm1heCwhMCl9KSl9ZWxzZSBlLnJlYmFzZVByb2plY3Rpb25UYXJnZXQoKX0oUSksUS5ub3RpZnlMYXlvdXRVcGRhdGUoQS5sYXlvdXQsUS5wcmV2Vmlld3BvcnRCb3h8fEEubGF5b3V0LGUpfSxyZXNldFRyYW5zZm9ybTpmdW5jdGlvbigpe3JldHVybiBmKFEsayx3KX0scmVzdG9yZVRyYW5zZm9ybTpmdW5jdGlvbigpe3JldHVybiBoKGssRSl9LHVwZGF0ZUxheW91dFByb2plY3Rpb246ZnVuY3Rpb24oKXtpZihRLmlzUHJvamVjdGlvblJlYWR5KCkpe3ZhciBlPUEuZGVsdGEsdD1BLnRyZWVTY2FsZSxuPXQueCxyPXQueSxvPUEuZGVsdGFUcmFuc2Zvcm07KGZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvLGEsaT1lLmRlbHRhLGw9ZS5sYXlvdXQscz1lLmxheW91dENvcnJlY3RlZCxjPWUudHJlZVNjYWxlLHU9dC50YXJnZXQ7YT1sLERuKChvPXMpLngsYS54KSxEbihvLnksYS55KSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bi5sZW5ndGg7aWYocil7dmFyIG8sYTt0Lng9dC55PTE7Zm9yKHZhciBpPTA7aTxyO2krKylhPShvPW5baV0pLmdldExheW91dFN0YXRlKCkuZGVsdGEsdC54Kj1hLnguc2NhbGUsdC55Kj1hLnkuc2NhbGUsTm4oZSxhKSxUbihvKSYmem4oZSxlLG8uZ2V0TGF0ZXN0VmFsdWVzKCkpfX0ocyxjLG4pLHluKGkscyx1LHIpfSkoQSxJLFEucGF0aCxQKSxCJiZRLm5vdGlmeVZpZXdwb3J0Qm94VXBkYXRlKEkudGFyZ2V0LGUpLEI9ITE7dmFyIGE9RXIoZSx0KTthPT09byYmbj09PXQueCYmcj09PXQueXx8US5zY2hlZHVsZVJlbmRlcigpLEEuZGVsdGFUcmFuc2Zvcm09YX19LHVwZGF0ZVRyZWVMYXlvdXRQcm9qZWN0aW9uOmZ1bmN0aW9uKCl7US5sYXlvdXRUcmVlLmZvckVhY2goQXIpLHAuZGVmYXVsdC5wcmVSZW5kZXIoRywhMSwhMCl9LGdldFByb2plY3Rpb25QYXJlbnQ6ZnVuY3Rpb24oKXtpZih2b2lkIDA9PT1TKXtmb3IodmFyIGU9ITEsdD1RLnBhdGgubGVuZ3RoLTE7dD49MDt0LS0pe3ZhciBuPVEucGF0aFt0XTtpZihuLnByb2plY3Rpb24uaXNFbmFibGVkKXtlPW47YnJlYWt9fVM9ZX1yZXR1cm4gU30scmVzb2x2ZVJlbGF0aXZlVGFyZ2V0Qm94OmZ1bmN0aW9uKCl7dmFyIGU9US5nZXRQcm9qZWN0aW9uUGFyZW50KCk7aWYoUi5yZWxhdGl2ZVRhcmdldCYmZSYmKGZ1bmN0aW9uKGUsdCl7a24oZS50YXJnZXQueCxlLnJlbGF0aXZlVGFyZ2V0LngsdC50YXJnZXQueCksa24oZS50YXJnZXQueSxlLnJlbGF0aXZlVGFyZ2V0LnksdC50YXJnZXQueSl9KFIsZS5wcm9qZWN0aW9uKSxUbihlKSkpe3ZhciB0PVIudGFyZ2V0O3puKHQsdCxlLmdldExhdGVzdFZhbHVlcygpKX19LHNob3VsZFJlc2V0VHJhbnNmb3JtOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4ody5fbGF5b3V0UmVzZXRUcmFuc2Zvcm0pfSxwb2ludFRvOmZ1bmN0aW9uKGUpe0k9ZS5wcm9qZWN0aW9uLEg9ZS5nZXRMYXRlc3RWYWx1ZXMoKSxudWxsPT1PfHxPKCksTz1sLnBpcGUoZS5vblNldEF4aXNUYXJnZXQoUS5zY2hlZHVsZVVwZGF0ZUxheW91dFByb2plY3Rpb24pLGUub25MYXlvdXRBbmltYXRpb25Db21wbGV0ZSgoZnVuY3Rpb24oKXt2YXIgZTtRLmlzUHJlc2VudD9RLnByZXNlbmNlPWFyLlByZXNlbnQ6bnVsbD09PShlPVEubGF5b3V0U2FmZVRvUmVtb3ZlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKFEpfSkpKX0saXNQcmVzZW50OiEwLHByZXNlbmNlOmFyLkVudGVyaW5nfSk7cmV0dXJuIFF9fTtmdW5jdGlvbiBBcihlKXtlLnJlc29sdmVSZWxhdGl2ZVRhcmdldEJveCgpfWZ1bmN0aW9uIFRyKGUpe2UudXBkYXRlTGF5b3V0UHJvamVjdGlvbigpfXZhciBEcixCcj1yLl9fc3ByZWFkQXJyYXkoW1wiaW5pdGlhbFwiXSxyLl9fcmVhZChlbikpLFpyPUJyLmxlbmd0aCwkcj1uZXcgU2V0KFtcIndpZHRoXCIsXCJoZWlnaHRcIixcInRvcFwiLFwibGVmdFwiLFwicmlnaHRcIixcImJvdHRvbVwiLFwieFwiLFwieVwiXSksTnI9ZnVuY3Rpb24oZSl7cmV0dXJuICRyLmhhcyhlKX0sRnI9ZnVuY3Rpb24oZSx0KXtlLnNldCh0LCExKSxlLnNldCh0KX0sV3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1pLm51bWJlcnx8ZT09PWkucHh9OyFmdW5jdGlvbihlKXtlLndpZHRoPVwid2lkdGhcIixlLmhlaWdodD1cImhlaWdodFwiLGUubGVmdD1cImxlZnRcIixlLnJpZ2h0PVwicmlnaHRcIixlLnRvcD1cInRvcFwiLGUuYm90dG9tPVwiYm90dG9tXCJ9KERyfHwoRHI9e30pKTt2YXIgVXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcGFyc2VGbG9hdChlLnNwbGl0KFwiLCBcIilbdF0pfSx6cj1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBvPXIudHJhbnNmb3JtO2lmKFwibm9uZVwiPT09b3x8IW8pcmV0dXJuIDA7dmFyIGE9by5tYXRjaCgvXm1hdHJpeDNkXFwoKC4rKVxcKSQvKTtpZihhKXJldHVybiBVcihhWzFdLHQpO3ZhciBpPW8ubWF0Y2goL15tYXRyaXhcXCgoLispXFwpJC8pO3JldHVybiBpP1VyKGlbMV0sZSk6MH19LEdyPW5ldyBTZXQoW1wieFwiLFwieVwiLFwielwiXSksS3I9Ry5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFHci5oYXMoZSl9KSkscXI9e3dpZHRoOmZ1bmN0aW9uKGUpe3ZhciB0PWUueDtyZXR1cm4gdC5tYXgtdC5taW59LGhlaWdodDpmdW5jdGlvbihlKXt2YXIgdD1lLnk7cmV0dXJuIHQubWF4LXQubWlufSx0b3A6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnRvcDtyZXR1cm4gcGFyc2VGbG9hdChuKX0sbGVmdDpmdW5jdGlvbihlLHQpe3ZhciBuPXQubGVmdDtyZXR1cm4gcGFyc2VGbG9hdChuKX0sYm90dG9tOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS55LHI9dC50b3A7cmV0dXJuIHBhcnNlRmxvYXQocikrKG4ubWF4LW4ubWluKX0scmlnaHQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLngscj10LmxlZnQ7cmV0dXJuIHBhcnNlRmxvYXQocikrKG4ubWF4LW4ubWluKX0seDp6cig0LDEzKSx5OnpyKDUsMTQpfTtmdW5jdGlvbiBZcihlLHQsbixvKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnNvbWUoTnIpfSh0KT9mdW5jdGlvbihlLHQsbixvKXt2b2lkIDA9PT1uJiYobj17fSksdm9pZCAwPT09byYmKG89e30pLHQ9ci5fX2Fzc2lnbih7fSx0KSxvPXIuX19hc3NpZ24oe30sbyk7dmFyIGw9T2JqZWN0LmtleXModCkuZmlsdGVyKE5yKSxzPVtdLGM9ITEsdT1bXTtpZihsLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBsPWUuZ2V0VmFsdWUocik7aWYoZS5oYXNWYWx1ZShyKSl7dmFyIGQscD1uW3JdLGY9dFtyXSxoPSR0KHApO2lmKEVlKGYpKWZvcih2YXIgZz1mLmxlbmd0aCx2PW51bGw9PT1mWzBdPzE6MDt2PGc7disrKWQ/YS5pbnZhcmlhbnQoJHQoZlt2XSk9PT1kLFwiQWxsIGtleWZyYW1lcyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGVcIik6KGQ9JHQoZlt2XSksYS5pbnZhcmlhbnQoZD09PWh8fFdyKGgpJiZXcihkKSxcIktleWZyYW1lcyBtdXN0IGJlIG9mIHRoZSBzYW1lIGRpbWVuc2lvbiBhcyB0aGUgY3VycmVudCB2YWx1ZVwiKSk7ZWxzZSBkPSR0KGYpO2lmKGghPT1kKWlmKFdyKGgpJiZXcihkKSl7dmFyIEM9bC5nZXQoKTtcInN0cmluZ1wiPT10eXBlb2YgQyYmbC5zZXQocGFyc2VGbG9hdChDKSksXCJzdHJpbmdcIj09dHlwZW9mIGY/dFtyXT1wYXJzZUZsb2F0KGYpOkFycmF5LmlzQXJyYXkoZikmJmQ9PT1pLnB4JiYodFtyXT1mLm1hcChwYXJzZUZsb2F0KSl9ZWxzZShudWxsPT1oP3ZvaWQgMDpoLnRyYW5zZm9ybSkmJihudWxsPT1kP3ZvaWQgMDpkLnRyYW5zZm9ybSkmJigwPT09cHx8MD09PWYpPzA9PT1wP2wuc2V0KGQudHJhbnNmb3JtKHApKTp0W3JdPWgudHJhbnNmb3JtKGYpOihjfHwocz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gS3IuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHI9ZS5nZXRWYWx1ZShuKTt2b2lkIDAhPT1yJiYodC5wdXNoKFtuLHIuZ2V0KCldKSxyLnNldChuLnN0YXJ0c1dpdGgoXCJzY2FsZVwiKT8xOjApKX0pKSx0Lmxlbmd0aCYmZS5zeW5jUmVuZGVyKCksdH0oZSksYz0hMCksdS5wdXNoKHIpLG9bcl09dm9pZCAwIT09b1tyXT9vW3JdOnRbcl0sRnIobCxmKSl9fSkpLHUubGVuZ3RoKXt2YXIgZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC5tZWFzdXJlVmlld3BvcnRCb3goKSxvPXQuZ2V0SW5zdGFuY2UoKSxhPWdldENvbXB1dGVkU3R5bGUobyksaT1hLmRpc3BsYXksbD17dG9wOmEudG9wLGxlZnQ6YS5sZWZ0LGJvdHRvbTphLmJvdHRvbSxyaWdodDphLnJpZ2h0LHRyYW5zZm9ybTphLnRyYW5zZm9ybX07XCJub25lXCI9PT1pJiZ0LnNldFN0YXRpY1ZhbHVlKFwiZGlzcGxheVwiLGUuZGlzcGxheXx8XCJibG9ja1wiKSx0LnN5bmNSZW5kZXIoKTt2YXIgcz10Lm1lYXN1cmVWaWV3cG9ydEJveCgpO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBvPXQuZ2V0VmFsdWUobik7RnIobyxxcltuXShyLGwpKSxlW25dPXFyW25dKHMsYSl9KSksZX0odCxlLHUpO3JldHVybiBzLmxlbmd0aCYmcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1yLl9fcmVhZCh0LDIpLG89blswXSxhPW5bMV07ZS5nZXRWYWx1ZShvKS5zZXQoYSl9KSksZS5zeW5jUmVuZGVyKCkse3RhcmdldDpkLHRyYW5zaXRpb25FbmQ6b319cmV0dXJue3RhcmdldDp0LHRyYW5zaXRpb25FbmQ6b319KGUsdCxuLG8pOnt0YXJnZXQ6dCx0cmFuc2l0aW9uRW5kOm99fXZhciBKcj17dHJlZVR5cGU6XCJkb21cIixyZWFkVmFsdWVGcm9tSW5zdGFuY2U6ZnVuY3Rpb24oZSx0KXtpZihZKHQpKXt2YXIgbj1MdCh0KTtyZXR1cm4gbiYmbi5kZWZhdWx0fHwwfXZhciByLG89KHI9ZSx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyKSk7cmV0dXJuKG5lKHQpP28uZ2V0UHJvcGVydHlWYWx1ZSh0KTpvW3RdKXx8MH0sc29ydE5vZGVQb3NpdGlvbjpmdW5jdGlvbihlLHQpe3JldHVybiAyJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk/MTotMX0sZ2V0QmFzZVRhcmdldDpmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsPT09KG49ZS5zdHlsZSl8fHZvaWQgMD09PW4/dm9pZCAwOm5bdF19LG1lYXN1cmVWaWV3cG9ydEJveDpmdW5jdGlvbihlLHQpe3JldHVybiBQbihlLHQudHJhbnNmb3JtUGFnZVBvaW50KX0scmVzZXRUcmFuc2Zvcm06ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4udHJhbnNmb3JtVGVtcGxhdGU7dC5zdHlsZS50cmFuc2Zvcm09cj9yKHt9LFwiXCIpOlwibm9uZVwiLGUuc2NoZWR1bGVSZW5kZXIoKX0scmVzdG9yZVRyYW5zZm9ybTpmdW5jdGlvbihlLHQpe2Uuc3R5bGUudHJhbnNmb3JtPXQuc3R5bGUudHJhbnNmb3JtfSxyZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXQudmFycyxyPXQuc3R5bGU7ZGVsZXRlIG5bZV0sZGVsZXRlIHJbZV19LG1ha2VUYXJnZXRBbmltYXRhYmxlOmZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBhPW4udHJhbnNmb3JtVmFsdWVzO3ZvaWQgMD09PW8mJihvPSEwKTt2YXIgaT10LnRyYW5zaXRpb24sbD10LnRyYW5zaXRpb25FbmQscz1yLl9fcmVzdCh0LFtcInRyYW5zaXRpb25cIixcInRyYW5zaXRpb25FbmRcIl0pLGM9S3QocyxpfHx7fSxlKTtpZihhJiYobCYmKGw9YShsKSkscyYmKHM9YShzKSksYyYmKGM9YShjKSkpLG8pe3p0KGUscyxjKTt2YXIgdT1mdW5jdGlvbihlLHQsbixvKXt2YXIgYT1mdW5jdGlvbihlLHQsbil7dmFyIG8sYT1yLl9fcmVzdCh0LFtdKSxpPWUuZ2V0SW5zdGFuY2UoKTtpZighKGkgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpcmV0dXJue3RhcmdldDphLHRyYW5zaXRpb25FbmQ6bn07Zm9yKHZhciBsIGluIG4mJihuPXIuX19hc3NpZ24oe30sbikpLGUuZm9yRWFjaFZhbHVlKChmdW5jdGlvbihlKXt2YXIgdD1lLmdldCgpO2lmKHNyKHQpKXt2YXIgbj11cih0LGkpO24mJmUuc2V0KG4pfX0pKSxhKXt2YXIgcz1hW2xdO2lmKHNyKHMpKXt2YXIgYz11cihzLGkpO2MmJihhW2xdPWMsbiYmKG51bGwhPT0obz1uW2xdKSYmdm9pZCAwIT09b3x8KG5bbF09cykpKX19cmV0dXJue3RhcmdldDphLHRyYW5zaXRpb25FbmQ6bn19KGUsdCxvKTtyZXR1cm4gWXIoZSx0PWEudGFyZ2V0LG4sbz1hLnRyYW5zaXRpb25FbmQpfShlLHMsYyxsKTtsPXUudHJhbnNpdGlvbkVuZCxzPXUudGFyZ2V0fXJldHVybiByLl9fYXNzaWduKHt0cmFuc2l0aW9uOmksdHJhbnNpdGlvbkVuZDpsfSxzKX0sc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOkxlLGJ1aWxkOmZ1bmN0aW9uKGUsdCxuLHIsbyxhLGkpe3ZvaWQgMCE9PWUuaXNWaXNpYmxlJiYodC5zdHlsZS52aXNpYmlsaXR5PWUuaXNWaXNpYmxlP1widmlzaWJsZVwiOlwiaGlkZGVuXCIpO3ZhciBsPXIuaXNFbmFibGVkJiZvLmlzSHlkcmF0ZWQ7aWUodCxuLHIsbyxhLGkudHJhbnNmb3JtVGVtcGxhdGUsbD9Fcjp2b2lkIDAsbD9qcjp2b2lkIDApfSxyZW5kZXI6U2V9LFhyPUhyKEpyKSxRcj1IcihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sSnIpLHtnZXRCYXNlVGFyZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF19LHJlYWRWYWx1ZUZyb21JbnN0YW5jZTpmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBZKHQpPyhudWxsPT09KG49THQodCkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRlZmF1bHQpfHwwOih0PU9lLmhhcyh0KT90OmtlKHQpLGUuZ2V0QXR0cmlidXRlKHQpKX0sc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOl9lLGJ1aWxkOmZ1bmN0aW9uKGUsdCxuLHIsbyxhLGkpe3ZhciBsPXIuaXNFbmFibGVkJiZvLmlzSHlkcmF0ZWQ7bWUodCxuLHIsbyxhLGkudHJhbnNmb3JtVGVtcGxhdGUsbD9Fcjp2b2lkIDAsbD9qcjp2b2lkIDApfSxyZW5kZXI6TWV9KSksZW89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gRihlKT9Rcih0LHtlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjohMX0pOlhyKHQse2VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiEwfSl9LHRvPXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sb24pLGZ0KSxsciksTHIpLG5vPSQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFplKGUsdCx0byxlbyl9KSkscm89JChaZSksb289MDtmdW5jdGlvbiBhbygpe3ZhciBlPW9vO3JldHVybiBvbysrLGV9dmFyIGlvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmluaXRpYWwscj1lLmlzUHJlc2VudCxhPWUub25FeGl0Q29tcGxldGUsaT1lLmN1c3RvbSxsPWUucHJlc2VuY2VBZmZlY3RzTGF5b3V0LHM9ayhsbyksYz1rKGFvKSxkPW8udXNlTWVtbygoZnVuY3Rpb24oKXtyZXR1cm57aWQ6Yyxpbml0aWFsOm4saXNQcmVzZW50OnIsY3VzdG9tOmksb25FeGl0Q29tcGxldGU6ZnVuY3Rpb24oZSl7cy5zZXQoZSwhMCk7dmFyIHQ9ITA7cy5mb3JFYWNoKChmdW5jdGlvbihlKXtlfHwodD0hMSl9KSksdCYmKG51bGw9PWF8fGEoKSl9LHJlZ2lzdGVyOmZ1bmN0aW9uKGUpe3JldHVybiBzLnNldChlLCExKSxmdW5jdGlvbigpe3JldHVybiBzLmRlbGV0ZShlKX19fX0pLGw/dm9pZCAwOltyXSk7cmV0dXJuIG8udXNlTWVtbygoZnVuY3Rpb24oKXtzLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMuc2V0KHQsITEpfSkpfSksW3JdKSx1LnVzZUVmZmVjdCgoZnVuY3Rpb24oKXshciYmIXMuc2l6ZSYmKG51bGw9PWF8fGEoKSl9KSxbcl0pLHUuY3JlYXRlRWxlbWVudCh4LlByb3ZpZGVyLHt2YWx1ZTpkfSx0KX07ZnVuY3Rpb24gbG8oKXtyZXR1cm4gbmV3IE1hcH1mdW5jdGlvbiBzbyhlKXtyZXR1cm4gZS5rZXl8fFwiXCJ9ZnVuY3Rpb24gY28oZSx0LG4pe3ZvaWQgMD09PW4mJihuPXt9KTt2YXIgcj1lZShlKT9lOkR0KGUpO3JldHVybiBJdChcIlwiLHIsdCxuKSx7c3RvcDpmdW5jdGlvbigpe3JldHVybiByLnN0b3AoKX19fWZ1bmN0aW9uIHVvKCl7dmFyIGU9RHQoMSksdD17bGVhZDp2b2lkIDAsZm9sbG93OnZvaWQgMCxjcm9zc2ZhZGVPcGFjaXR5OiExLHByZXNlcnZlRm9sbG93T3BhY2l0eTohMX0sbj1yLl9fYXNzaWduKHt9LHQpLG89e30sYT17fSxpPSExLGM9bnVsbCx1PTA7ZnVuY3Rpb24gZChuLG8pe3ZhciBhPXQubGVhZCxsPXQuZm9sbG93O2k9ITAsYz1udWxsO3ZhciB1PSExLGQ9ZnVuY3Rpb24oKXt1PSEwLGEmJmEuc2NoZWR1bGVSZW5kZXIoKSxsJiZsLnNjaGVkdWxlUmVuZGVyKCl9LGY9ZnVuY3Rpb24oKXtpPSExLGM9cy5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXB9O3JldHVybiBvPW8mJlJ0KG8sXCJjcm9zc2ZhZGVcIiksY28oZSxuLHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxvKSx7b25VcGRhdGU6ZCxvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dT9mKCk6KGUuc2V0KG4pLHAuZGVmYXVsdC5yZWFkKGYpKSxkKCl9fSkpfXJldHVybntpc0FjdGl2ZTpmdW5jdGlvbigpe3JldHVybiBvJiYoaXx8cy5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXA9PT1jKX0sZnJvbUxlYWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGQoMCxlKX0sdG9MZWFkOmZ1bmN0aW9uKHIpe3ZhciBvPTA7cmV0dXJuIHQucHJldlZhbHVlc3x8dC5mb2xsb3c/bi5sZWFkPT09dC5mb2xsb3cmJm4uZm9sbG93PT09dC5sZWFkJiYobz0xLWUuZ2V0KCkpOm89MSxlLnNldChvKSxkKDEscil9LHJlc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0KDEpfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc3RvcCgpfSxnZXRDcm9zc2ZhZGVTdGF0ZTpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbixyLGk9cy5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXAsYz10LmxlYWQsZD10LmZvbGxvdztpZihpIT09dSYmYyl7dT1pO3ZhciBwPWMuZ2V0TGF0ZXN0VmFsdWVzKCk7T2JqZWN0LmFzc2lnbihvLHApO3ZhciBmPWQ/ZC5nZXRMYXRlc3RWYWx1ZXMoKTp0LnByZXZWYWx1ZXM7T2JqZWN0LmFzc2lnbihhLGYpO3ZhciBoPWUuZ2V0KCksZz1udWxsIT09KG49cC5vcGFjaXR5KSYmdm9pZCAwIT09bj9uOjEsdj1udWxsIT09KHI9bnVsbD09Zj92b2lkIDA6Zi5vcGFjaXR5KSYmdm9pZCAwIT09cj9yOjE7dC5jcm9zc2ZhZGVPcGFjaXR5JiZkPyhvLm9wYWNpdHk9bC5taXgoITEhPT1kLmlzVmlzaWJsZT8wOnYsZyxwbyhoKSksYS5vcGFjaXR5PXQucHJlc2VydmVGb2xsb3dPcGFjaXR5P3Y6bC5taXgodiwwLGZvKGgpKSk6ZHx8KG8ub3BhY2l0eT1sLm1peCh2LGcsaCkpLGZ1bmN0aW9uKGUsdCxuLHIsbyxhKXtmb3IodmFyIGk9MDtpPHZvO2krKyl7dmFyIHM9XCJib3JkZXJcIitnb1tpXStcIlJhZGl1c1wiLGM9Q28ocixzKSx1PUNvKG4scyk7aWYoKHZvaWQgMCE9PWN8fHZvaWQgMCE9PXUpJiYoY3x8KGM9MCksdXx8KHU9MCksXCJudW1iZXJcIj09dHlwZW9mIGMmJlwibnVtYmVyXCI9PXR5cGVvZiB1KSl7dmFyIGQ9TWF0aC5tYXgobC5taXgoYyx1LGEpLDApO2Vbc109dFtzXT1kfX1pZihyLnJvdGF0ZXx8bi5yb3RhdGUpe3ZhciBwPWwubWl4KHIucm90YXRlfHwwLG4ucm90YXRlfHwwLGEpO2Uucm90YXRlPXQucm90YXRlPXB9IW8mJm4uYmFja2dyb3VuZENvbG9yJiZyLmJhY2tncm91bmRDb2xvciYmKGUuYmFja2dyb3VuZENvbG9yPXQuYmFja2dyb3VuZENvbG9yPWwubWl4Q29sb3Ioci5iYWNrZ3JvdW5kQ29sb3Isbi5iYWNrZ3JvdW5kQ29sb3IpKGEpKX0obyxhLHAsZnx8e30sQm9vbGVhbihkKSxoKX19KCksbj09PXQubGVhZD9vOm49PT10LmZvbGxvdz9hOnZvaWQgMH0sc2V0T3B0aW9uczpmdW5jdGlvbihlKXtuPXQsdD1lLG89e30sYT17fX0sZ2V0TGF0ZXN0VmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIG99fX12YXIgcG89aG8oMCwuNSxsLmNpcmNPdXQpLGZvPWhvKC41LC45NSxsLmxpbmVhcik7ZnVuY3Rpb24gaG8oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gcjxlPzA6cj50PzE6bihsLnByb2dyZXNzKGUsdCxyKSl9fXZhciBnbz1bXCJUb3BMZWZ0XCIsXCJUb3BSaWdodFwiLFwiQm90dG9tTGVmdFwiLFwiQm90dG9tUmlnaHRcIl0sdm89Z28ubGVuZ3RoO2Z1bmN0aW9uIENvKGUsdCl7dmFyIG47cmV0dXJuIG51bGwhPT0obj1lW3RdKSYmdm9pZCAwIT09bj9uOmUuYm9yZGVyUmFkaXVzfXZhciBtbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LmNoaWxkcmVuPW5ldyBTZXQsdC5zdGFja3M9bmV3IE1hcCx0Lmhhc01vdW50ZWQ9ITEsdC51cGRhdGVTY2hlZHVsZWQ9ITEsdC5yZW5kZXJTY2hlZHVsZWQ9ITEsdC5zeW5jQ29udGV4dD1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30seXIoKSkse3N5bmNVcGRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2NoZWR1bGVVcGRhdGUoZSl9LGZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7dC5zeW5jQ29udGV4dD1yLl9fYXNzaWduKHt9LHQuc3luY0NvbnRleHQpLHQuc2NoZWR1bGVVcGRhdGUoITApfSxyZWdpc3RlcjpmdW5jdGlvbihlKXtyZXR1cm4gdC5hZGRDaGlsZChlKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiB0LnJlbW92ZUNoaWxkKGUpfX0pLHR9cmV0dXJuIHIuX19leHRlbmRzKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt0aGlzLmhhc01vdW50ZWQ9ITB9LHQucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuc3RhcnRMYXlvdXRBbmltYXRpb24oKX0sdC5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyU2NoZWR1bGVkPSEwLCEwfSx0LnByb3RvdHlwZS5zdGFydExheW91dEFuaW1hdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5yZW5kZXJTY2hlZHVsZWQ9dGhpcy51cGRhdGVTY2hlZHVsZWQ9ITE7dmFyIHQ9dGhpcy5wcm9wcy50eXBlO3RoaXMuY2hpbGRyZW4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5pc1ByZXNlbnQ/ZS5wcmVzZW5jZSE9PWFyLkVudGVyaW5nJiYoZS5wcmVzZW5jZT1lLnByZXNlbmNlPT09YXIuRXhpdGluZz9hci5FbnRlcmluZzphci5QcmVzZW50KTplLnByZXNlbmNlPWFyLkV4aXRpbmd9KSksdGhpcy51cGRhdGVTdGFja3MoKTt2YXIgbj17bGF5b3V0UmVhZHk6ZnVuY3Rpb24obil7dm9pZCAwIT09bi5nZXRMYXlvdXRJZCgpP2UuZ2V0U3RhY2sobikuYW5pbWF0ZShuLFwiY3Jvc3NmYWRlXCI9PT10KTpuLm5vdGlmeUxheW91dFJlYWR5KCl9LHBhcmVudDp0aGlzLmNvbnRleHQudmlzdWFsRWxlbWVudH07dGhpcy5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5zeW5jQ29udGV4dC5hZGQodCl9KSksdGhpcy5zeW5jQ29udGV4dC5mbHVzaChuKSx0aGlzLnN0YWNrcy5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGVhclNuYXBzaG90KCl9KSl9LHQucHJvdG90eXBlLnVwZGF0ZVN0YWNrcz1mdW5jdGlvbigpe3RoaXMuc3RhY2tzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnVwZGF0ZUxlYWRBbmRGb2xsb3coKX0pKX0sdC5wcm90b3R5cGUuc2NoZWR1bGVVcGRhdGU9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9ITEpLCFlJiZ0aGlzLnVwZGF0ZVNjaGVkdWxlZHx8KHRoaXMudXBkYXRlU2NoZWR1bGVkPSEwLHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMSxuPXt9LHI9MDtyPHoubGVuZ3RoO3IrKyl7dmFyIG89XCJyb3RhdGVcIit6W3JdO2UuaGFzVmFsdWUobykmJjAhPT1lLmdldFN0YXRpY1ZhbHVlKG8pJiYodD0hMCxuW29dPWUuZ2V0U3RhdGljVmFsdWUobyksZS5zZXRTdGF0aWNWYWx1ZShvLDApKX1pZih0KXtmb3IodmFyIG8gaW4gZS5zeW5jUmVuZGVyKCksbillLnNldFN0YXRpY1ZhbHVlKG8sbltvXSk7ZS5zY2hlZHVsZVJlbmRlcigpfX0oZSksZS5zaG91bGRSZXNldFRyYW5zZm9ybSgpJiZlLnJlc2V0VHJhbnNmb3JtKCl9KSksdGhpcy5jaGlsZHJlbi5mb3JFYWNoKFZuKSx0aGlzLnN0YWNrcy5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS51cGRhdGVTbmFwc2hvdCgpfSkpLCFlJiZ0aGlzLnJlbmRlclNjaGVkdWxlZHx8KHRoaXMucmVuZGVyU2NoZWR1bGVkPSEwLHRoaXMuZm9yY2VVcGRhdGUoKSkpfSx0LnByb3RvdHlwZS5hZGRDaGlsZD1mdW5jdGlvbihlKXt0aGlzLmNoaWxkcmVuLmFkZChlKSx0aGlzLmFkZFRvU3RhY2soZSksZS5wcmVzZW5jZT10aGlzLmhhc01vdW50ZWQ/YXIuRW50ZXJpbmc6YXIuUHJlc2VudH0sdC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24oZSl7dGhpcy5zY2hlZHVsZVVwZGF0ZSgpLHRoaXMuY2hpbGRyZW4uZGVsZXRlKGUpLHRoaXMucmVtb3ZlRnJvbVN0YWNrKGUpfSx0LnByb3RvdHlwZS5hZGRUb1N0YWNrPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0U3RhY2soZSk7bnVsbD09dHx8dC5hZGQoZSl9LHQucHJvdG90eXBlLnJlbW92ZUZyb21TdGFjaz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFN0YWNrKGUpO251bGw9PXR8fHQucmVtb3ZlKGUpfSx0LnByb3RvdHlwZS5nZXRTdGFjaz1mdW5jdGlvbihlKXt2YXIgdCxuLG8sYSxpLGwscyxjLHU9ZS5nZXRMYXlvdXRJZCgpO2lmKHZvaWQgMCE9PXUpcmV0dXJuIXRoaXMuc3RhY2tzLmhhcyh1KSYmdGhpcy5zdGFja3Muc2V0KHUsKGE9bmV3IFNldCxpPXtsZWFkSXNFeGl0aW5nOiExfSxsPXIuX19hc3NpZ24oe30saSkscz11bygpLGM9ITEse2FkZDpmdW5jdGlvbihlKXtlLnNldENyb3NzZmFkZXIocyksYS5hZGQoZSksbyYmKGUucHJldkRyYWdDdXJzb3I9byksaS5sZWFkfHwoaS5sZWFkPWUpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7YS5kZWxldGUoZSl9LGdldExlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5sZWFkfSx1cGRhdGVTbmFwc2hvdDpmdW5jdGlvbigpe2lmKGkubGVhZCl7dD1zLmlzQWN0aXZlKCk/cy5nZXRMYXRlc3RWYWx1ZXMoKTppLmxlYWQuZ2V0TGF0ZXN0VmFsdWVzKCksbj1pLmxlYWQucHJldlZpZXdwb3J0Qm94O3ZhciBlPW5yLmdldChpLmxlYWQpO2UmJmUuaXNEcmFnZ2luZyYmKG89ZS5jdXJzb3JQcm9ncmVzcyl9fSxjbGVhclNuYXBzaG90OmZ1bmN0aW9uKCl7bz1uPXZvaWQgMH0sdXBkYXRlTGVhZEFuZEZvbGxvdzpmdW5jdGlvbigpe3ZhciBlLG4sbztsPXIuX19hc3NpZ24oe30saSk7Zm9yKHZhciB1PUFycmF5LmZyb20oYSksZD11Lmxlbmd0aDtkLS07ZD49MCl7dmFyIHA9dVtkXTtpZihuJiYobnVsbCE9b3x8KG89cCkpLG51bGwhPW58fChuPXApLG4mJm8pYnJlYWt9aS5sZWFkPW4saS5mb2xsb3c9byxpLmxlYWRJc0V4aXRpbmc9KG51bGw9PT0oZT1pLmxlYWQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnByZXNlbmNlKT09PWFyLkV4aXRpbmcscy5zZXRPcHRpb25zKHtsZWFkOm4sZm9sbG93Om8scHJldlZhbHVlczp0LGNyb3NzZmFkZU9wYWNpdHk6KG51bGw9PW8/dm9pZCAwOm8uaXNQcmVzZW5jZVJvb3QpfHwobnVsbD09bj92b2lkIDA6bi5pc1ByZXNlbmNlUm9vdCl9KSxpLmxlYWQ9PT1sLmZvbGxvd3x8bC5sZWFkPT09aS5sZWFkJiZsLmxlYWRJc0V4aXRpbmc9PT1pLmxlYWRJc0V4aXRpbmd8fChjPSEwKX0sYW5pbWF0ZTpmdW5jdGlvbihlLHQpe3ZhciByO2lmKHZvaWQgMD09PXQmJih0PSExKSxlPT09aS5sZWFkKXt0P2UucG9pbnRUbyhpLmxlYWQpOmUuc2V0VmlzaWJpbGl0eSghMCk7dmFyIG89e30sYT1udWxsPT09KHI9aS5mb2xsb3cpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmdldFByb2plY3Rpb25QYXJlbnQoKTtpZihhJiYoby5wcmV2UGFyZW50PWEpLGUucHJlc2VuY2U9PT1hci5FbnRlcmluZz9vLm9yaWdpbkJveD1pLmZvbGxvdz9pLmZvbGxvdy5wcmV2Vmlld3BvcnRCb3g6bjplLnByZXNlbmNlPT09YXIuRXhpdGluZyYmKG8udGFyZ2V0Qm94PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT1pLmZvbGxvdyl8fHZvaWQgMD09PWU/dm9pZCAwOmUuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXR9KCkpLGMpe2M9ITE7dmFyIGw9ZS5nZXREZWZhdWx0VHJhbnNpdGlvbigpO2UucHJlc2VuY2U9PT1hci5FbnRlcmluZz9zLnRvTGVhZChsKTpzLmZyb21MZWFkKGwpfWUubm90aWZ5TGF5b3V0UmVhZHkobyl9ZWxzZSB0P2kubGVhZCYmZS5wb2ludFRvKGkubGVhZCk6ZS5zZXRWaXNpYmlsaXR5KCExKX19KSksdGhpcy5zdGFja3MuZ2V0KHUpfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdS5jcmVhdGVFbGVtZW50KGtyLlByb3ZpZGVyLHt2YWx1ZTp0aGlzLnN5bmNDb250ZXh0fSx0aGlzLnByb3BzLmNoaWxkcmVuKX0sdC5jb250ZXh0VHlwZT1iLHR9KHUuQ29tcG9uZW50KTtmdW5jdGlvbiB3byhlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlfXZhciBibz1yLl9fYXNzaWduKHIuX19hc3NpZ24oe3JlbmRlcmVyOmVvfSxvbiksZnQpLHlvPXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGJvKSxsciksTHIpO2Z1bmN0aW9uIHhvKGUpe3ZhciB0PWsoKGZ1bmN0aW9uKCl7cmV0dXJuIER0KGUpfSkpO2lmKG8udXNlQ29udGV4dCh3KS5pc1N0YXRpYyl7dmFyIG49ci5fX3JlYWQoby51c2VTdGF0ZShlKSwyKVsxXTtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdC5vbkNoYW5nZShuKX0pLFtdKX1yZXR1cm4gdH1mdW5jdGlvbiBrbyhlLHQpe28udXNlRWZmZWN0KChmdW5jdGlvbigpe2lmKGVlKGUpKXJldHVybiBlLm9uQ2hhbmdlKHQpfSksW3RdKX1mdW5jdGlvbiBTbyhlLHQpe3ZhciBuPXhvKHQoKSkscj1mdW5jdGlvbigpe3JldHVybiBuLnNldCh0KCkpfTtyZXR1cm4gcigpLGZ1bmN0aW9uKGUsdCl7by51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7dmFyIG49ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLm9uQ2hhbmdlKHQpfSkpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KSl9fSkpfShlLChmdW5jdGlvbigpe3JldHVybiBwLmRlZmF1bHQudXBkYXRlKHIsITEsITApfSkpLG59dmFyIE9vLE1vPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmZS5taXh9KGUpP2UubWl4OnZvaWQgMH07ZnVuY3Rpb24gTG8oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07dmFyIG49IUFycmF5LmlzQXJyYXkoZVswXSksbz1uPzA6LTEsYT1lWzArb10saT1lWzErb10scz1lWzIrb10sYz1lWzMrb10sdT1sLmludGVycG9sYXRlKGkscyxyLl9fYXNzaWduKHttaXhlcjpNbyhzWzBdKX0sYykpO3JldHVybiBuP3UoYSk6dX1mdW5jdGlvbiBfbyhlLHQsbixvKXt2YXIgYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6TG8odCxuLG8pO3JldHVybiBBcnJheS5pc0FycmF5KGUpP1BvKGUsYSk6UG8oW2VdLChmdW5jdGlvbihlKXt2YXIgdD1yLl9fcmVhZChlLDEpWzBdO3JldHVybiBhKHQpfSkpfWZ1bmN0aW9uIFBvKGUsdCl7dmFyIG49aygoZnVuY3Rpb24oKXtyZXR1cm5bXX0pKTtyZXR1cm4gU28oZSwoZnVuY3Rpb24oKXtuLmxlbmd0aD0wO2Zvcih2YXIgcj1lLmxlbmd0aCxvPTA7bzxyO28rKyluW29dPWVbb10uZ2V0KCk7cmV0dXJuIHQobil9KSl9ZnVuY3Rpb24gRW8oKXtyZXR1cm57c2Nyb2xsWDpEdCgwKSxzY3JvbGxZOkR0KDApLHNjcm9sbFhQcm9ncmVzczpEdCgwKSxzY3JvbGxZUHJvZ3Jlc3M6RHQoMCl9fWZ1bmN0aW9uIGpvKGUsdCxuKXtuLnNldChlJiZ0P2UvdDowKX1mdW5jdGlvbiBSbyhlLHQpe3ZhciBuPWZ1bmN0aW9uKCl7dmFyIG49dCgpLHI9bi54T2Zmc2V0LG89bi55T2Zmc2V0LGE9bi54TWF4T2Zmc2V0LGk9bi55TWF4T2Zmc2V0O2Uuc2Nyb2xsWC5zZXQociksZS5zY3JvbGxZLnNldChvKSxqbyhyLGEsZS5zY3JvbGxYUHJvZ3Jlc3MpLGpvKG8saSxlLnNjcm9sbFlQcm9ncmVzcyl9O3JldHVybiBuKCksbn1mdW5jdGlvbiBJbygpe3JldHVybnt4T2Zmc2V0OndpbmRvdy5wYWdlWE9mZnNldCx5T2Zmc2V0OndpbmRvdy5wYWdlWU9mZnNldCx4TWF4T2Zmc2V0OmRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgtd2luZG93LmlubmVyV2lkdGgseU1heE9mZnNldDpkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodC13aW5kb3cuaW5uZXJIZWlnaHR9fXZhciBWbyxIbz0hMTtmdW5jdGlvbiBBbygpe3ZhciBlPSExLHQ9W10sbj1uZXcgU2V0LG89e3N1YnNjcmliZTpmdW5jdGlvbihlKXtyZXR1cm4gbi5hZGQoZSksZnVuY3Rpb24oKXtuLmRlbGV0ZShlKX19LHN0YXJ0OmZ1bmN0aW9uKHIsbyl7aWYoZSl7dmFyIGE9W107cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7YS5wdXNoKHF0KGUscix7dHJhbnNpdGlvbk92ZXJyaWRlOm99KSl9KSksUHJvbWlzZS5hbGwoYSl9cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt0LnB1c2goe2FuaW1hdGlvbjpbcixvXSxyZXNvbHZlOmV9KX0pKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBhLmludmFyaWFudChlLFwiY29udHJvbHMuc2V0KCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgY29tcG9uZW50IGhhcyBtb3VudGVkLiBDb25zaWRlciBjYWxsaW5nIHdpdGhpbiBhIHVzZUVmZmVjdCBob29rLlwiKSxuLmZvckVhY2goKGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe0FycmF5LmlzQXJyYXkodCk/VXQoZSx0KTpcInN0cmluZ1wiPT10eXBlb2YgdD9VdChlLFt0XSk6V3QoZSx0KX0oZSx0KX0pKX0sc3RvcDpmdW5jdGlvbigpe24uZm9yRWFjaCgoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe2UuZm9yRWFjaFZhbHVlKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zdG9wKCl9KSl9KGUpfSkpfSxtb3VudDpmdW5jdGlvbigpe3JldHVybiBlPSEwLHQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hbmltYXRpb24sbj1lLnJlc29sdmU7by5zdGFydC5hcHBseShvLHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZCh0KSkpLnRoZW4obil9KSksZnVuY3Rpb24oKXtlPSExLG8uc3RvcCgpfX19O3JldHVybiBvfXZhciBUbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNvbXBvbmVudENvbnRyb2xzPW5ldyBTZXR9cmV0dXJuIGUucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmNvbXBvbmVudENvbnRyb2xzLmFkZChlKSxmdW5jdGlvbigpe3JldHVybiB0LmNvbXBvbmVudENvbnRyb2xzLmRlbGV0ZShlKX19LGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUsdCl7dGhpcy5jb21wb25lbnRDb250cm9scy5mb3JFYWNoKChmdW5jdGlvbihuKXtuLnN0YXJ0KGUubmF0aXZlRXZlbnR8fGUsdCl9KSl9LGUucHJvdG90eXBlLnVwZGF0ZUNvbnN0cmFpbnRzPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPSEwKSx0aGlzLmNvbXBvbmVudENvbnRyb2xzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UudXBkYXRlQ29uc3RyYWludHMoKX0pKSxlJiZRbigpfSxlfSgpLERvPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUb30sQm89ZnVuY3Rpb24oKXtyZXR1cm57fX0sWm89SHIoe2J1aWxkOmZ1bmN0aW9uKCl7fSxtZWFzdXJlVmlld3BvcnRCb3g6ZnVuY3Rpb24oKXtyZXR1cm57eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX19LHJlc2V0VHJhbnNmb3JtOmZ1bmN0aW9uKCl7fSxyZXN0b3JlVHJhbnNmb3JtOmZ1bmN0aW9uKCl7fSxyZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZTpmdW5jdGlvbigpe30scmVuZGVyOmZ1bmN0aW9uKCl7fSxzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6Qm8scmVhZFZhbHVlRnJvbUluc3RhbmNlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi5pbml0aWFsU3RhdGVbdF18fDB9LG1ha2VUYXJnZXRBbmltYXRhYmxlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC50cmFuc2l0aW9uLG89dC50cmFuc2l0aW9uRW5kLGE9ci5fX3Jlc3QodCxbXCJ0cmFuc2l0aW9uXCIsXCJ0cmFuc2l0aW9uRW5kXCJdKTtyZXR1cm4genQoZSxhLEt0KGEsbnx8e30sZSkpLHIuX19hc3NpZ24oe3RyYW5zaXRpb246bix0cmFuc2l0aW9uRW5kOm99LGEpfX0pLCRvPUhlKHtzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6Qm8sY3JlYXRlUmVuZGVyU3RhdGU6Qm99KSxObz1mdW5jdGlvbihlKXtyZXR1cm4gZT4uMDAxPzEvZToxZTV9LEZvPSExO3QuQW5pbWF0ZVByZXNlbmNlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmN1c3RvbSxhPWUuaW5pdGlhbCxpPXZvaWQgMD09PWF8fGEsbD1lLm9uRXhpdENvbXBsZXRlLHM9ZS5leGl0QmVmb3JlRW50ZXIsYz1lLnByZXNlbmNlQWZmZWN0c0xheW91dCxkPXZvaWQgMD09PWN8fGMscD1mdW5jdGlvbigpe3ZhciBlPW8udXNlUmVmKCExKSx0PXIuX19yZWFkKG8udXNlU3RhdGUoMCksMiksbj10WzBdLGE9dFsxXTtyZXR1cm4gZHQoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY3VycmVudD0hMH0pKSxvLnVzZUNhbGxiYWNrKChmdW5jdGlvbigpeyFlLmN1cnJlbnQmJmEobisxKX0pLFtuXSl9KCksZj1vLnVzZUNvbnRleHQoa3IpO09yKGYpJiYocD1mLmZvcmNlVXBkYXRlKTt2YXIgaD1vLnVzZVJlZighMCksZz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gby5DaGlsZHJlbi5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe28uaXNWYWxpZEVsZW1lbnQoZSkmJnQucHVzaChlKX0pKSx0fSh0KSx2PW8udXNlUmVmKGcpLEM9by51c2VSZWYobmV3IE1hcCkuY3VycmVudCxtPW8udXNlUmVmKG5ldyBTZXQpLmN1cnJlbnQ7aWYoZnVuY3Rpb24oZSx0KXtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXNvKGUpO3Quc2V0KG4sZSl9KSl9KGcsQyksaC5jdXJyZW50KXJldHVybiBoLmN1cnJlbnQ9ITEsdS5jcmVhdGVFbGVtZW50KHUuRnJhZ21lbnQsbnVsbCxnLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHUuY3JlYXRlRWxlbWVudChpbyx7a2V5OnNvKGUpLGlzUHJlc2VudDohMCxpbml0aWFsOiEhaSYmdm9pZCAwLHByZXNlbmNlQWZmZWN0c0xheW91dDpkfSxlKX0pKSk7Zm9yKHZhciB3PXIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChnKSksYj12LmN1cnJlbnQubWFwKHNvKSx5PWcubWFwKHNvKSx4PWIubGVuZ3RoLGs9MDtrPHg7aysrKXt2YXIgUz1iW2tdOy0xPT09eS5pbmRleE9mKFMpP20uYWRkKFMpOm0uZGVsZXRlKFMpfXJldHVybiBzJiZtLnNpemUmJih3PVtdKSxtLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKC0xPT09eS5pbmRleE9mKGUpKXt2YXIgdD1DLmdldChlKTtpZih0KXt2YXIgcj1iLmluZGV4T2YoZSk7dy5zcGxpY2UociwwLHUuY3JlYXRlRWxlbWVudChpbyx7a2V5OnNvKHQpLGlzUHJlc2VudDohMSxvbkV4aXRDb21wbGV0ZTpmdW5jdGlvbigpe0MuZGVsZXRlKGUpLG0uZGVsZXRlKGUpO3ZhciB0PXYuY3VycmVudC5maW5kSW5kZXgoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleT09PWV9KSk7di5jdXJyZW50LnNwbGljZSh0LDEpLG0uc2l6ZXx8KHYuY3VycmVudD1nLHAoKSxsJiZsKCkpfSxjdXN0b206bixwcmVzZW5jZUFmZmVjdHNMYXlvdXQ6ZH0sdCkpfX19KSksdz13Lm1hcCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXk7cmV0dXJuIG0uaGFzKHQpP2U6dS5jcmVhdGVFbGVtZW50KGlvLHtrZXk6c28oZSksaXNQcmVzZW50OiEwLHByZXNlbmNlQWZmZWN0c0xheW91dDpkfSxlKX0pKSx2LmN1cnJlbnQ9dyx1LmNyZWF0ZUVsZW1lbnQodS5GcmFnbWVudCxudWxsLG0uc2l6ZT93OncubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gby5jbG9uZUVsZW1lbnQoZSl9KSkpfSx0LkFuaW1hdGVTaGFyZWRMYXlvdXQ9bW8sdC5EcmFnQ29udHJvbHM9VG8sdC5GbGF0VHJlZT1Wcix0LkZyYW1lclRyZWVMYXlvdXRDb250ZXh0PVNyLHQuTGF5b3V0R3JvdXBDb250ZXh0PVAsdC5MYXp5TW90aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmZlYXR1cmVzLGE9ZS5zdHJpY3QsaT12b2lkIDAhPT1hJiZhLGw9ci5fX3JlYWQoby51c2VTdGF0ZSghd28obikpLDIpWzFdLHM9by51c2VSZWYodm9pZCAwKTtpZighd28obikpe3ZhciBjPW4ucmVuZGVyZXIsZD1yLl9fcmVzdChuLFtcInJlbmRlcmVyXCJdKTtzLmN1cnJlbnQ9YyxnKGQpfXJldHVybiBvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXt3byhuKSYmbigpLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciB0PWUucmVuZGVyZXI7ZyhyLl9fcmVzdChlLFtcInJlbmRlcmVyXCJdKSkscy5jdXJyZW50PXQsbCghMCl9KSl9KSxbXSksdS5jcmVhdGVFbGVtZW50KHYuUHJvdmlkZXIse3ZhbHVlOntyZW5kZXJlcjpzLmN1cnJlbnQsc3RyaWN0Oml9fSx0KX0sdC5Nb3Rpb25Db25maWc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPXIuX19yZXN0KGUsW1wiY2hpbGRyZW5cIl0pOyhuPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxvLnVzZUNvbnRleHQodykpLG4pKS5pc1N0YXRpYz1rKChmdW5jdGlvbigpe3JldHVybiBuLmlzU3RhdGljfSkpO3ZhciBhPVwib2JqZWN0XCI9PXR5cGVvZiBuLnRyYW5zaXRpb24/bi50cmFuc2l0aW9uLnRvU3RyaW5nKCk6XCJcIixpPW8udXNlTWVtbygoZnVuY3Rpb24oKXtyZXR1cm4gbn0pLFthLG4udHJhbnNmb3JtUGFnZVBvaW50XSk7cmV0dXJuIHUuY3JlYXRlRWxlbWVudCh3LlByb3ZpZGVyLHt2YWx1ZTppfSx0KX0sdC5Nb3Rpb25Db25maWdDb250ZXh0PXcsdC5Nb3Rpb25WYWx1ZT1UdCx0LlByZXNlbmNlQ29udGV4dD14LHQuU2hhcmVkTGF5b3V0Q29udGV4dD1rcix0LmFkZFNjYWxlQ29ycmVjdGlvbj1VLHQuYW5pbWF0ZT1jbyx0LmFuaW1hdGVWaXN1YWxFbGVtZW50PXF0LHQuYW5pbWF0aW9uQ29udHJvbHM9QW8sdC5iYXRjaExheW91dD1Ybix0LmNyZWF0ZUJhdGNoZXI9eXIsdC5jcmVhdGVDcm9zc2ZhZGVyPXVvLHQuY3JlYXRlRG9tTW90aW9uQ29tcG9uZW50PWZ1bmN0aW9uKGUpe3JldHVybiBaKFplKGUse2ZvcndhcmRNb3Rpb25Qcm9wczohMX0sdG8sZW8pKX0sdC5jcmVhdGVNb3Rpb25Db21wb25lbnQ9Wix0LmRvbUFuaW1hdGlvbj1ibyx0LmRvbU1heD15byx0LmZsdXNoTGF5b3V0PVFuLHQuaXNWYWxpZE1vdGlvblByb3A9ZGUsdC5tPXJvLHQubW90aW9uPW5vLHQubW90aW9uVmFsdWU9RHQsdC5yZXNvbHZlTW90aW9uVmFsdWU9SWUsdC5zbmFwc2hvdFZpZXdwb3J0Qm94PVZuLHQudHJhbnNmb3JtPUxvLHQudXNlQW5pbWF0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9ayhBbyk7cmV0dXJuIG8udXNlRWZmZWN0KGUubW91bnQsW10pLGV9LHQudXNlQ3ljbGU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07dmFyIG49by51c2VSZWYoMCksYT1yLl9fcmVhZChvLnVzZVN0YXRlKGVbbi5jdXJyZW50XSksMiksaT1hWzBdLHM9YVsxXTtyZXR1cm5baSxmdW5jdGlvbih0KXtuLmN1cnJlbnQ9XCJudW1iZXJcIiE9dHlwZW9mIHQ/bC53cmFwKDAsZS5sZW5ndGgsbi5jdXJyZW50KzEpOnQscyhlW24uY3VycmVudF0pfV19LHQudXNlRGVwcmVjYXRlZEFuaW1hdGVkU3RhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5fX3JlYWQoby51c2VTdGF0ZShlKSwyKSxuPXRbMF0sYT10WzFdLGk9JG8oe30sITEpLGw9aygoZnVuY3Rpb24oKXtyZXR1cm4gWm8oe3Byb3BzOnt9LHZpc3VhbFN0YXRlOml9LHtpbml0aWFsU3RhdGU6ZX0pfSkpO3JldHVybiBvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gbC5tb3VudCh7fSksbC51bm1vdW50KCl9KSxbXSksby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7bC5zZXRQcm9wcyh7b25VcGRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoci5fX2Fzc2lnbih7fSxlKSl9fSl9KSksW24saygoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHF0KGwsZSl9fSkpXX0sdC51c2VEZXByZWNhdGVkSW52ZXJ0ZWRTY2FsZT1mdW5jdGlvbihlKXt2YXIgdD14bygxKSxuPXhvKDEpLHI9eSgpO3JldHVybiBhLmludmFyaWFudCghKCFlJiYhciksXCJJZiBubyBzY2FsZSB2YWx1ZXMgYXJlIHByb3ZpZGVkLCB1c2VJbnZlcnRlZFNjYWxlIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBjaGlsZCBvZiBhbm90aGVyIG1vdGlvbiBjb21wb25lbnQuXCIpLGEud2FybmluZyhGbyxcInVzZUludmVydGVkU2NhbGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuMC4gVXNlIHRoZSBsYXlvdXQgcHJvcCBpbnN0ZWFkLlwiKSxGbz0hMCxlPyh0PWUuc2NhbGVYfHx0LG49ZS5zY2FsZVl8fG4pOnImJih0PXIuZ2V0VmFsdWUoXCJzY2FsZVhcIiwxKSxuPXIuZ2V0VmFsdWUoXCJzY2FsZVlcIiwxKSkse3NjYWxlWDpfbyh0LE5vKSxzY2FsZVk6X28obixObyl9fSx0LnVzZURvbUV2ZW50PU5lLHQudXNlRHJhZ0NvbnRyb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIGsoRG8pfSx0LnVzZUVsZW1lbnRTY3JvbGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ayhFbyk7cmV0dXJuIGooKGZ1bmN0aW9uKCl7dmFyIG49ZS5jdXJyZW50O2lmKGEuaW52YXJpYW50KCEhbixcInJlZiBwcm92aWRlZCB0byB1c2VTY3JvbGwgbXVzdCBiZSBwYXNzZWQgaW50byBhIEhUTUwgZWxlbWVudC5cIiksbil7dmFyIHI9Um8odCxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm57eE9mZnNldDplLnNjcm9sbExlZnQseU9mZnNldDplLnNjcm9sbFRvcCx4TWF4T2Zmc2V0OmUuc2Nyb2xsV2lkdGgtZS5vZmZzZXRXaWR0aCx5TWF4T2Zmc2V0OmUuc2Nyb2xsSGVpZ2h0LWUub2Zmc2V0SGVpZ2h0fX19KG4pKSxvPSRlKG4sXCJzY3JvbGxcIixyLHtwYXNzaXZlOiEwfSksaT0kZShuLFwicmVzaXplXCIscik7cmV0dXJuIGZ1bmN0aW9uKCl7byYmbygpLGkmJmkoKX19fSksW10pLHR9LHQudXNlSXNQcmVzZW50PWZ1bmN0aW9uKCl7cmV0dXJuIE8oby51c2VDb250ZXh0KHgpKX0sdC51c2VNb3Rpb25UZW1wbGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTt2YXIgcj1lLmxlbmd0aDtyZXR1cm4gU28odCwoZnVuY3Rpb24oKXtmb3IodmFyIG49XCJcIixvPTA7bzxyO28rKyluKz1lW29dLHRbb10mJihuKz10W29dLmdldCgpKTtyZXR1cm4gbn0pKX0sdC51c2VNb3Rpb25WYWx1ZT14byx0LnVzZVByZXNlbmNlPVMsdC51c2VSZWR1Y2VkTW90aW9uPWZ1bmN0aW9uKCl7IVZvJiZmdW5jdGlvbigpe2lmKFZvPUR0KG51bGwpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpaWYod2luZG93Lm1hdGNoTWVkaWEpe3ZhciBlPXdpbmRvdy5tYXRjaE1lZGlhKFwiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pXCIpLHQ9ZnVuY3Rpb24oKXtyZXR1cm4gVm8uc2V0KGUubWF0Y2hlcyl9O2UuYWRkTGlzdGVuZXIodCksdCgpfWVsc2UgVm8uc2V0KCExKX0oKTt2YXIgZT1yLl9fcmVhZChvLnVzZVN0YXRlKFZvLmdldCgpKSwyKSx0PWVbMF0sbj1lWzFdO3JldHVybiBrbyhWbyxuKSx0fSx0LnVzZVNwcmluZz1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PXt9KTt2YXIgbj1vLnVzZUNvbnRleHQodykuaXNTdGF0aWMsYT1vLnVzZVJlZihudWxsKSxpPXhvKGVlKGUpP2UuZ2V0KCk6ZSk7cmV0dXJuIG8udXNlTWVtbygoZnVuY3Rpb24oKXtyZXR1cm4gaS5hdHRhY2goKGZ1bmN0aW9uKGUsbyl7cmV0dXJuIG4/byhlKTooYS5jdXJyZW50JiZhLmN1cnJlbnQuc3RvcCgpLGEuY3VycmVudD1sLmFuaW1hdGUoci5fX2Fzc2lnbihyLl9fYXNzaWduKHtmcm9tOmkuZ2V0KCksdG86ZSx2ZWxvY2l0eTppLmdldFZlbG9jaXR5KCl9LHQpLHtvblVwZGF0ZTpvfSkpLGkuZ2V0KCkpfSkpfSksT2JqZWN0LnZhbHVlcyh0KSksa28oZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuc2V0KHBhcnNlRmxvYXQoZSkpfSkpLGl9LHQudXNlVHJhbnNmb3JtPV9vLHQudXNlVmVsb2NpdHk9ZnVuY3Rpb24oZSl7dmFyIHQ9eG8oZS5nZXRWZWxvY2l0eSgpKTtyZXR1cm4gby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIGUudmVsb2NpdHlVcGRhdGVTdWJzY3JpYmVycy5hZGQoKGZ1bmN0aW9uKGUpe3Quc2V0KGUpfSkpfSksW2VdKSx0fSx0LnVzZVZpZXdwb3J0U2Nyb2xsPWZ1bmN0aW9uKCl7cmV0dXJuIE9vfHwoT289RW8oKSksaigoZnVuY3Rpb24oKXshSG8mJmZ1bmN0aW9uKCl7aWYoSG89ITAsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyl7dmFyIGU9Um8oT28sSW8pOyRlKHdpbmRvdyxcInNjcm9sbFwiLGUse3Bhc3NpdmU6ITB9KSwkZSh3aW5kb3csXCJyZXNpemVcIixlKX19KCl9KSxbXSksT299LHQudmlzdWFsRWxlbWVudD1Icn0sNDgzOTooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPTEvNjAqMWUzLHI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHBlcmZvcm1hbmNlP2Z1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpmdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfSxvPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/ZnVuY3Rpb24oZSl7cmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBlKHIoKSl9KSxuKX0sYT0hMCxpPSExLGw9ITEscz17ZGVsdGE6MCx0aW1lc3RhbXA6MH0sYz1bXCJyZWFkXCIsXCJ1cGRhdGVcIixcInByZVJlbmRlclwiLFwicmVuZGVyXCIsXCJwb3N0UmVuZGVyXCJdLHU9Yy5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1bXSxyPTAsbz0hMSxhPW5ldyBXZWFrU2V0LGk9e3NjaGVkdWxlOmZ1bmN0aW9uKGUsaSxsKXt2b2lkIDA9PT1pJiYoaT0hMSksdm9pZCAwPT09bCYmKGw9ITEpO3ZhciBzPWwmJm8sYz1zP3Q6bjtyZXR1cm4gaSYmYS5hZGQoZSksLTE9PT1jLmluZGV4T2YoZSkmJihjLnB1c2goZSkscyYmbyYmKHI9dC5sZW5ndGgpKSxlfSxjYW5jZWw6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5pbmRleE9mKGUpOy0xIT09dCYmbi5zcGxpY2UodCwxKSxhLmRlbGV0ZShlKX0scHJvY2VzczpmdW5jdGlvbihsKXt2YXIgcztpZihvPSEwLHQ9KHM9W24sdF0pWzBdLChuPXNbMV0pLmxlbmd0aD0wLHI9dC5sZW5ndGgpZm9yKHZhciBjPTA7YzxyO2MrKyl7dmFyIHU9dFtjXTt1KGwpLGEuaGFzKHUpJiYoaS5zY2hlZHVsZSh1KSxlKCkpfW89ITF9fTtyZXR1cm4gaX0oKGZ1bmN0aW9uKCl7cmV0dXJuIGk9ITB9KSksZX0pLHt9KSxkPWMucmVkdWNlKChmdW5jdGlvbihlLHQpe3ZhciBuPXVbdF07cmV0dXJuIGVbdF09ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMSksdm9pZCAwPT09ciYmKHI9ITEpLGl8fHYoKSxuLnNjaGVkdWxlKGUsdCxyKX0sZX0pLHt9KSxwPWMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPXVbdF0uY2FuY2VsLGV9KSx7fSksZj1jLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XT1mdW5jdGlvbigpe3JldHVybiB1W3RdLnByb2Nlc3Mocyl9LGV9KSx7fSksaD1mdW5jdGlvbihlKXtyZXR1cm4gdVtlXS5wcm9jZXNzKHMpfSxnPWZ1bmN0aW9uKGUpe2k9ITEscy5kZWx0YT1hP246TWF0aC5tYXgoTWF0aC5taW4oZS1zLnRpbWVzdGFtcCw0MCksMSkscy50aW1lc3RhbXA9ZSxsPSEwLGMuZm9yRWFjaChoKSxsPSExLGkmJihhPSExLG8oZykpfSx2PWZ1bmN0aW9uKCl7aT0hMCxhPSEwLGx8fG8oZyl9O3QuY2FuY2VsU3luYz1wLHQuZGVmYXVsdD1kLHQuZmx1c2hTeW5jPWYsdC5nZXRGcmFtZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gc319LDQzOTQ6KGUsdCxuKT0+e24ucih0KSxuLmQodCx7aW52YXJpYW50OigpPT5vLHdhcm5pbmc6KCk9PnJ9KTt2YXIgcj1mdW5jdGlvbigpe30sbz1mdW5jdGlvbigpe319LDc3MzooZSx0LG4pPT57dmFyIHIsbz1cIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX19cIixhPS9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC8saT1cIm9iamVjdFwiPT10eXBlb2Ygbi5nJiZuLmcmJm4uZy5PYmplY3Q9PT1PYmplY3QmJm4uZyxsPVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixzPWl8fGx8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxjPUFycmF5LnByb3RvdHlwZSx1PUZ1bmN0aW9uLnByb3RvdHlwZSxkPU9iamVjdC5wcm90b3R5cGUscD1zW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdLGY9KHI9L1teLl0rJC8uZXhlYyhwJiZwLmtleXMmJnAua2V5cy5JRV9QUk9UT3x8XCJcIikpP1wiU3ltYm9sKHNyYylfMS5cIityOlwiXCIsaD11LnRvU3RyaW5nLGc9ZC5oYXNPd25Qcm9wZXJ0eSx2PWQudG9TdHJpbmcsQz1SZWdFeHAoXCJeXCIraC5jYWxsKGcpLnJlcGxhY2UoL1tcXFxcXiQuKis/KClbXFxde318XS9nLFwiXFxcXCQmXCIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csXCIkMS4qP1wiKStcIiRcIiksbT1jLnNwbGljZSx3PU0ocyxcIk1hcFwiKSxiPU0oT2JqZWN0LFwiY3JlYXRlXCIpO2Z1bmN0aW9uIHkoZSl7dmFyIHQ9LTEsbj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24geChlKXt2YXIgdD0tMSxuPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBrKGUpe3ZhciB0PS0xLG49ZT9lLmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PG47KXt2YXIgcj1lW3RdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWZ1bmN0aW9uIFMoZSx0KXtmb3IodmFyIG4scixvPWUubGVuZ3RoO28tLTspaWYoKG49ZVtvXVswXSk9PT0ocj10KXx8biE9biYmciE9cilyZXR1cm4gbztyZXR1cm4tMX1mdW5jdGlvbiBPKGUsdCl7dmFyIG4scixvPWUuX19kYXRhX187cmV0dXJuKFwic3RyaW5nXCI9PShyPXR5cGVvZihuPXQpKXx8XCJudW1iZXJcIj09cnx8XCJzeW1ib2xcIj09cnx8XCJib29sZWFuXCI9PXI/XCJfX3Byb3RvX19cIiE9PW46bnVsbD09PW4pP29bXCJzdHJpbmdcIj09dHlwZW9mIHQ/XCJzdHJpbmdcIjpcImhhc2hcIl06by5tYXB9ZnVuY3Rpb24gTShlLHQpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/dm9pZCAwOmVbdF19KGUsdCk7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFfKGUpfHxmJiZmIGluIGUpcmV0dXJuITE7dmFyIHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9XyhlKT92LmNhbGwoZSk6XCJcIjtyZXR1cm5cIltvYmplY3QgRnVuY3Rpb25dXCI9PXR8fFwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIj09dH0oZSl8fGZ1bmN0aW9uKGUpe3ZhciB0PSExO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUudG9TdHJpbmcpdHJ5e3Q9ISEoZStcIlwiKX1jYXRjaChlKXt9cmV0dXJuIHR9KGUpP0M6YTtyZXR1cm4gdC50ZXN0KGZ1bmN0aW9uKGUpe2lmKG51bGwhPWUpe3RyeXtyZXR1cm4gaC5jYWxsKGUpfWNhdGNoKGUpe310cnl7cmV0dXJuIGUrXCJcIn1jYXRjaChlKXt9fXJldHVyblwiXCJ9KGUpKX0obik/bjp2b2lkIDB9ZnVuY3Rpb24gTChlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGV8fHQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgZnVuY3Rpb25cIik7dmFyIG49ZnVuY3Rpb24oKXt2YXIgcj1hcmd1bWVudHMsbz10P3QuYXBwbHkodGhpcyxyKTpyWzBdLGE9bi5jYWNoZTtpZihhLmhhcyhvKSlyZXR1cm4gYS5nZXQobyk7dmFyIGk9ZS5hcHBseSh0aGlzLHIpO3JldHVybiBuLmNhY2hlPWEuc2V0KG8saSksaX07cmV0dXJuIG4uY2FjaGU9bmV3KEwuQ2FjaGV8fGspLG59ZnVuY3Rpb24gXyhlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4hIWUmJihcIm9iamVjdFwiPT10fHxcImZ1bmN0aW9uXCI9PXQpfXkucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1iP2IobnVsbCk6e319LHkucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5oYXMoZSkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW2VdfSx5LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztpZihiKXt2YXIgbj10W2VdO3JldHVybiBuPT09bz92b2lkIDA6bn1yZXR1cm4gZy5jYWxsKHQsZSk/dFtlXTp2b2lkIDB9LHkucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBiP3ZvaWQgMCE9PXRbZV06Zy5jYWxsKHQsZSl9LHkucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9fZGF0YV9fW2VdPWImJnZvaWQgMD09PXQ/bzp0LHRoaXN9LHgucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXX0seC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1TKHQsZSk7cmV0dXJuIShuPDB8fChuPT10Lmxlbmd0aC0xP3QucG9wKCk6bS5jYWxsKHQsbiwxKSwwKSl9LHgucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49Uyh0LGUpO3JldHVybiBuPDA/dm9pZCAwOnRbbl1bMV19LHgucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gUyh0aGlzLl9fZGF0YV9fLGUpPi0xfSx4LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fLHI9UyhuLGUpO3JldHVybiByPDA/bi5wdXNoKFtlLHRdKTpuW3JdWzFdPXQsdGhpc30say5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyB5LG1hcDpuZXcod3x8eCksc3RyaW5nOm5ldyB5fX0say5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3JldHVybiBPKHRoaXMsZSkuZGVsZXRlKGUpfSxrLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIE8odGhpcyxlKS5nZXQoZSl9LGsucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gTyh0aGlzLGUpLmhhcyhlKX0say5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE8odGhpcyxlKS5zZXQoZSx0KSx0aGlzfSxMLkNhY2hlPWssZS5leHBvcnRzPUx9LDY0ODY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2U9bi5ubWQoZSksZnVuY3Rpb24oKXt2YXIgbyxhPVwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiLGk9XCJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fXCIsbD1cIl9fbG9kYXNoX3BsYWNlaG9sZGVyX19cIixzPTMyLGM9MTI4LHU9MS8wLGQ9OTAwNzE5OTI1NDc0MDk5MSxwPU5hTixmPTQyOTQ5NjcyOTUsaD1bW1wiYXJ5XCIsY10sW1wiYmluZFwiLDFdLFtcImJpbmRLZXlcIiwyXSxbXCJjdXJyeVwiLDhdLFtcImN1cnJ5UmlnaHRcIiwxNl0sW1wiZmxpcFwiLDUxMl0sW1wicGFydGlhbFwiLHNdLFtcInBhcnRpYWxSaWdodFwiLDY0XSxbXCJyZWFyZ1wiLDI1Nl1dLGc9XCJbb2JqZWN0IEFyZ3VtZW50c11cIix2PVwiW29iamVjdCBBcnJheV1cIixDPVwiW29iamVjdCBCb29sZWFuXVwiLG09XCJbb2JqZWN0IERhdGVdXCIsdz1cIltvYmplY3QgRXJyb3JdXCIsYj1cIltvYmplY3QgRnVuY3Rpb25dXCIseT1cIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dXCIseD1cIltvYmplY3QgTWFwXVwiLGs9XCJbb2JqZWN0IE51bWJlcl1cIixTPVwiW29iamVjdCBPYmplY3RdXCIsTz1cIltvYmplY3QgUHJvbWlzZV1cIixNPVwiW29iamVjdCBSZWdFeHBdXCIsTD1cIltvYmplY3QgU2V0XVwiLF89XCJbb2JqZWN0IFN0cmluZ11cIixQPVwiW29iamVjdCBTeW1ib2xdXCIsRT1cIltvYmplY3QgV2Vha01hcF1cIixqPVwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIixSPVwiW29iamVjdCBEYXRhVmlld11cIixJPVwiW29iamVjdCBGbG9hdDMyQXJyYXldXCIsVj1cIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiLEg9XCJbb2JqZWN0IEludDhBcnJheV1cIixBPVwiW29iamVjdCBJbnQxNkFycmF5XVwiLFQ9XCJbb2JqZWN0IEludDMyQXJyYXldXCIsRD1cIltvYmplY3QgVWludDhBcnJheV1cIixCPVwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV1cIixaPVwiW29iamVjdCBVaW50MTZBcnJheV1cIiwkPVwiW29iamVjdCBVaW50MzJBcnJheV1cIixOPS9cXGJfX3AgXFwrPSAnJzsvZyxGPS9cXGIoX19wIFxcKz0pICcnIFxcKy9nLFc9LyhfX2VcXCguKj9cXCl8XFxiX190XFwpKSBcXCtcXG4nJzsvZyxVPS8mKD86YW1wfGx0fGd0fHF1b3R8IzM5KTsvZyx6PS9bJjw+XCInXS9nLEc9UmVnRXhwKFUuc291cmNlKSxLPVJlZ0V4cCh6LnNvdXJjZSkscT0vPCUtKFtcXHNcXFNdKz8pJT4vZyxZPS88JShbXFxzXFxTXSs/KSU+L2csSj0vPCU9KFtcXHNcXFNdKz8pJT4vZyxYPS9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sUT0vXlxcdyokLyxlZT0vW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2csdGU9L1tcXFxcXiQuKis/KClbXFxde318XS9nLG5lPVJlZ0V4cCh0ZS5zb3VyY2UpLHJlPS9eXFxzKy8sb2U9L1xccy8sYWU9L1xceyg/OlxcblxcL1xcKiBcXFt3cmFwcGVkIHdpdGggLitcXF0gXFwqXFwvKT9cXG4/LyxpZT0vXFx7XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAoLispXFxdIFxcKi8sbGU9Lyw/ICYgLyxzZT0vW15cXHgwMC1cXHgyZlxceDNhLVxceDQwXFx4NWItXFx4NjBcXHg3Yi1cXHg3Zl0rL2csY2U9L1soKT0se31cXFtcXF1cXC9cXHNdLyx1ZT0vXFxcXChcXFxcKT8vZyxkZT0vXFwkXFx7KFteXFxcXH1dKig/OlxcXFwuW15cXFxcfV0qKSopXFx9L2cscGU9L1xcdyokLyxmZT0vXlstK10weFswLTlhLWZdKyQvaSxoZT0vXjBiWzAxXSskL2ksZ2U9L15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLyx2ZT0vXjBvWzAtN10rJC9pLENlPS9eKD86MHxbMS05XVxcZCopJC8sbWU9L1tcXHhjMC1cXHhkNlxceGQ4LVxceGY2XFx4ZjgtXFx4ZmZcXHUwMTAwLVxcdTAxN2ZdL2csd2U9LygkXikvLGJlPS9bJ1xcblxcclxcdTIwMjhcXHUyMDI5XFxcXF0vZyx5ZT1cIlxcXFx1ZDgwMC1cXFxcdWRmZmZcIix4ZT1cIlxcXFx1MDMwMC1cXFxcdTAzNmZcXFxcdWZlMjAtXFxcXHVmZTJmXFxcXHUyMGQwLVxcXFx1MjBmZlwiLGtlPVwiXFxcXHUyNzAwLVxcXFx1MjdiZlwiLFNlPVwiYS16XFxcXHhkZi1cXFxceGY2XFxcXHhmOC1cXFxceGZmXCIsT2U9XCJBLVpcXFxceGMwLVxcXFx4ZDZcXFxceGQ4LVxcXFx4ZGVcIixNZT1cIlxcXFx1ZmUwZVxcXFx1ZmUwZlwiLExlPVwiXFxcXHhhY1xcXFx4YjFcXFxceGQ3XFxcXHhmN1xcXFx4MDAtXFxcXHgyZlxcXFx4M2EtXFxcXHg0MFxcXFx4NWItXFxcXHg2MFxcXFx4N2ItXFxcXHhiZlxcXFx1MjAwMC1cXFxcdTIwNmYgXFxcXHRcXFxceDBiXFxcXGZcXFxceGEwXFxcXHVmZWZmXFxcXG5cXFxcclxcXFx1MjAyOFxcXFx1MjAyOVxcXFx1MTY4MFxcXFx1MTgwZVxcXFx1MjAwMFxcXFx1MjAwMVxcXFx1MjAwMlxcXFx1MjAwM1xcXFx1MjAwNFxcXFx1MjAwNVxcXFx1MjAwNlxcXFx1MjAwN1xcXFx1MjAwOFxcXFx1MjAwOVxcXFx1MjAwYVxcXFx1MjAyZlxcXFx1MjA1ZlxcXFx1MzAwMFwiLF9lPVwiW1wiK3llK1wiXVwiLFBlPVwiW1wiK0xlK1wiXVwiLEVlPVwiW1wiK3hlK1wiXVwiLGplPVwiXFxcXGQrXCIsUmU9XCJbXCIra2UrXCJdXCIsSWU9XCJbXCIrU2UrXCJdXCIsVmU9XCJbXlwiK3llK0xlK2plK2tlK1NlK09lK1wiXVwiLEhlPVwiXFxcXHVkODNjW1xcXFx1ZGZmYi1cXFxcdWRmZmZdXCIsQWU9XCJbXlwiK3llK1wiXVwiLFRlPVwiKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfVwiLERlPVwiW1xcXFx1ZDgwMC1cXFxcdWRiZmZdW1xcXFx1ZGMwMC1cXFxcdWRmZmZdXCIsQmU9XCJbXCIrT2UrXCJdXCIsWmU9XCJcXFxcdTIwMGRcIiwkZT1cIig/OlwiK0llK1wifFwiK1ZlK1wiKVwiLE5lPVwiKD86XCIrQmUrXCJ8XCIrVmUrXCIpXCIsRmU9XCIoPzpbJ+KAmV0oPzpkfGxsfG18cmV8c3x0fHZlKSk/XCIsV2U9XCIoPzpbJ+KAmV0oPzpEfExMfE18UkV8U3xUfFZFKSk/XCIsVWU9XCIoPzpcIitFZStcInxcIitIZStcIik/XCIsemU9XCJbXCIrTWUrXCJdP1wiLEdlPXplK1VlK1wiKD86XCIrWmUrXCIoPzpcIitbQWUsVGUsRGVdLmpvaW4oXCJ8XCIpK1wiKVwiK3plK1VlK1wiKSpcIixLZT1cIig/OlwiK1tSZSxUZSxEZV0uam9pbihcInxcIikrXCIpXCIrR2UscWU9XCIoPzpcIitbQWUrRWUrXCI/XCIsRWUsVGUsRGUsX2VdLmpvaW4oXCJ8XCIpK1wiKVwiLFllPVJlZ0V4cChcIlsn4oCZXVwiLFwiZ1wiKSxKZT1SZWdFeHAoRWUsXCJnXCIpLFhlPVJlZ0V4cChIZStcIig/PVwiK0hlK1wiKXxcIitxZStHZSxcImdcIiksUWU9UmVnRXhwKFtCZStcIj9cIitJZStcIitcIitGZStcIig/PVwiK1tQZSxCZSxcIiRcIl0uam9pbihcInxcIikrXCIpXCIsTmUrXCIrXCIrV2UrXCIoPz1cIitbUGUsQmUrJGUsXCIkXCJdLmpvaW4oXCJ8XCIpK1wiKVwiLEJlK1wiP1wiKyRlK1wiK1wiK0ZlLEJlK1wiK1wiK1dlLFwiXFxcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxcXGRUSCkoPz1cXFxcYnxbYS16X10pXCIsXCJcXFxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXFxcZHRoKSg/PVxcXFxifFtBLVpfXSlcIixqZSxLZV0uam9pbihcInxcIiksXCJnXCIpLGV0PVJlZ0V4cChcIltcIitaZSt5ZSt4ZStNZStcIl1cIiksdHQ9L1thLXpdW0EtWl18W0EtWl17Mn1bYS16XXxbMC05XVthLXpBLVpdfFthLXpBLVpdWzAtOV18W15hLXpBLVowLTkgXS8sbnQ9W1wiQXJyYXlcIixcIkJ1ZmZlclwiLFwiRGF0YVZpZXdcIixcIkRhdGVcIixcIkVycm9yXCIsXCJGbG9hdDMyQXJyYXlcIixcIkZsb2F0NjRBcnJheVwiLFwiRnVuY3Rpb25cIixcIkludDhBcnJheVwiLFwiSW50MTZBcnJheVwiLFwiSW50MzJBcnJheVwiLFwiTWFwXCIsXCJNYXRoXCIsXCJPYmplY3RcIixcIlByb21pc2VcIixcIlJlZ0V4cFwiLFwiU2V0XCIsXCJTdHJpbmdcIixcIlN5bWJvbFwiLFwiVHlwZUVycm9yXCIsXCJVaW50OEFycmF5XCIsXCJVaW50OENsYW1wZWRBcnJheVwiLFwiVWludDE2QXJyYXlcIixcIlVpbnQzMkFycmF5XCIsXCJXZWFrTWFwXCIsXCJfXCIsXCJjbGVhclRpbWVvdXRcIixcImlzRmluaXRlXCIsXCJwYXJzZUludFwiLFwic2V0VGltZW91dFwiXSxydD0tMSxvdD17fTtvdFtJXT1vdFtWXT1vdFtIXT1vdFtBXT1vdFtUXT1vdFtEXT1vdFtCXT1vdFtaXT1vdFskXT0hMCxvdFtnXT1vdFt2XT1vdFtqXT1vdFtDXT1vdFtSXT1vdFttXT1vdFt3XT1vdFtiXT1vdFt4XT1vdFtrXT1vdFtTXT1vdFtNXT1vdFtMXT1vdFtfXT1vdFtFXT0hMTt2YXIgYXQ9e307YXRbZ109YXRbdl09YXRbal09YXRbUl09YXRbQ109YXRbbV09YXRbSV09YXRbVl09YXRbSF09YXRbQV09YXRbVF09YXRbeF09YXRba109YXRbU109YXRbTV09YXRbTF09YXRbX109YXRbUF09YXRbRF09YXRbQl09YXRbWl09YXRbJF09ITAsYXRbd109YXRbYl09YXRbRV09ITE7dmFyIGl0PXtcIlxcXFxcIjpcIlxcXFxcIixcIidcIjpcIidcIixcIlxcblwiOlwiblwiLFwiXFxyXCI6XCJyXCIsXCJcXHUyMDI4XCI6XCJ1MjAyOFwiLFwiXFx1MjAyOVwiOlwidTIwMjlcIn0sbHQ9cGFyc2VGbG9hdCxzdD1wYXJzZUludCxjdD1cIm9iamVjdFwiPT10eXBlb2Ygbi5nJiZuLmcmJm4uZy5PYmplY3Q9PT1PYmplY3QmJm4uZyx1dD1cIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsZHQ9Y3R8fHV0fHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkscHQ9dCYmIXQubm9kZVR5cGUmJnQsZnQ9cHQmJmUmJiFlLm5vZGVUeXBlJiZlLGh0PWZ0JiZmdC5leHBvcnRzPT09cHQsZ3Q9aHQmJmN0LnByb2Nlc3MsdnQ9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGZ0JiZmdC5yZXF1aXJlJiZmdC5yZXF1aXJlKFwidXRpbFwiKS50eXBlc3x8Z3QmJmd0LmJpbmRpbmcmJmd0LmJpbmRpbmcoXCJ1dGlsXCIpfWNhdGNoKGUpe319KCksQ3Q9dnQmJnZ0LmlzQXJyYXlCdWZmZXIsbXQ9dnQmJnZ0LmlzRGF0ZSx3dD12dCYmdnQuaXNNYXAsYnQ9dnQmJnZ0LmlzUmVnRXhwLHl0PXZ0JiZ2dC5pc1NldCx4dD12dCYmdnQuaXNUeXBlZEFycmF5O2Z1bmN0aW9uIGt0KGUsdCxuKXtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gZS5jYWxsKHQpO2Nhc2UgMTpyZXR1cm4gZS5jYWxsKHQsblswXSk7Y2FzZSAyOnJldHVybiBlLmNhbGwodCxuWzBdLG5bMV0pO2Nhc2UgMzpyZXR1cm4gZS5jYWxsKHQsblswXSxuWzFdLG5bMl0pfXJldHVybiBlLmFwcGx5KHQsbil9ZnVuY3Rpb24gU3QoZSx0LG4scil7Zm9yKHZhciBvPS0xLGE9bnVsbD09ZT8wOmUubGVuZ3RoOysrbzxhOyl7dmFyIGk9ZVtvXTt0KHIsaSxuKGkpLGUpfXJldHVybiByfWZ1bmN0aW9uIE90KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoOysrbjxyJiYhMSE9PXQoZVtuXSxuLGUpOyk7cmV0dXJuIGV9ZnVuY3Rpb24gTXQoZSx0KXtmb3IodmFyIG49bnVsbD09ZT8wOmUubGVuZ3RoO24tLSYmITEhPT10KGVbbl0sbixlKTspO3JldHVybiBlfWZ1bmN0aW9uIEx0KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoOysrbjxyOylpZighdChlW25dLG4sZSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gX3QoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGgsbz0wLGE9W107KytuPHI7KXt2YXIgaT1lW25dO3QoaSxuLGUpJiYoYVtvKytdPWkpfXJldHVybiBhfWZ1bmN0aW9uIFB0KGUsdCl7cmV0dXJuIShudWxsPT1lfHwhZS5sZW5ndGgpJiZCdChlLHQsMCk+LTF9ZnVuY3Rpb24gRXQoZSx0LG4pe2Zvcih2YXIgcj0tMSxvPW51bGw9PWU/MDplLmxlbmd0aDsrK3I8bzspaWYobih0LGVbcl0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGp0KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoLG89QXJyYXkocik7KytuPHI7KW9bbl09dChlW25dLG4sZSk7cmV0dXJuIG99ZnVuY3Rpb24gUnQoZSx0KXtmb3IodmFyIG49LTEscj10Lmxlbmd0aCxvPWUubGVuZ3RoOysrbjxyOyllW28rbl09dFtuXTtyZXR1cm4gZX1mdW5jdGlvbiBJdChlLHQsbixyKXt2YXIgbz0tMSxhPW51bGw9PWU/MDplLmxlbmd0aDtmb3IociYmYSYmKG49ZVsrK29dKTsrK288YTspbj10KG4sZVtvXSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIFZ0KGUsdCxuLHIpe3ZhciBvPW51bGw9PWU/MDplLmxlbmd0aDtmb3IociYmbyYmKG49ZVstLW9dKTtvLS07KW49dChuLGVbb10sbyxlKTtyZXR1cm4gbn1mdW5jdGlvbiBIdChlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aDsrK248cjspaWYodChlW25dLG4sZSkpcmV0dXJuITA7cmV0dXJuITF9dmFyIEF0PUZ0KFwibGVuZ3RoXCIpO2Z1bmN0aW9uIFR0KGUsdCxuKXt2YXIgcjtyZXR1cm4gbihlLChmdW5jdGlvbihlLG4sbyl7aWYodChlLG4sbykpcmV0dXJuIHI9biwhMX0pKSxyfWZ1bmN0aW9uIER0KGUsdCxuLHIpe2Zvcih2YXIgbz1lLmxlbmd0aCxhPW4rKHI/MTotMSk7cj9hLS06KythPG87KWlmKHQoZVthXSxhLGUpKXJldHVybiBhO3JldHVybi0xfWZ1bmN0aW9uIEJ0KGUsdCxuKXtyZXR1cm4gdD09dD9mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW4tMSxvPWUubGVuZ3RoOysrcjxvOylpZihlW3JdPT09dClyZXR1cm4gcjtyZXR1cm4tMX0oZSx0LG4pOkR0KGUsJHQsbil9ZnVuY3Rpb24gWnQoZSx0LG4scil7Zm9yKHZhciBvPW4tMSxhPWUubGVuZ3RoOysrbzxhOylpZihyKGVbb10sdCkpcmV0dXJuIG87cmV0dXJuLTF9ZnVuY3Rpb24gJHQoZSl7cmV0dXJuIGUhPWV9ZnVuY3Rpb24gTnQoZSx0KXt2YXIgbj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIG4/enQoZSx0KS9uOnB9ZnVuY3Rpb24gRnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P286dFtlXX19ZnVuY3Rpb24gV3QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT1lP286ZVt0XX19ZnVuY3Rpb24gVXQoZSx0LG4scixvKXtyZXR1cm4gbyhlLChmdW5jdGlvbihlLG8sYSl7bj1yPyhyPSExLGUpOnQobixlLG8sYSl9KSksbn1mdW5jdGlvbiB6dChlLHQpe2Zvcih2YXIgbixyPS0xLGE9ZS5sZW5ndGg7KytyPGE7KXt2YXIgaT10KGVbcl0pO2khPT1vJiYobj1uPT09bz9pOm4raSl9cmV0dXJuIG59ZnVuY3Rpb24gR3QoZSx0KXtmb3IodmFyIG49LTEscj1BcnJheShlKTsrK248ZTspcltuXT10KG4pO3JldHVybiByfWZ1bmN0aW9uIEt0KGUpe3JldHVybiBlP2Uuc2xpY2UoMCxkbihlKSsxKS5yZXBsYWNlKHJlLFwiXCIpOmV9ZnVuY3Rpb24gcXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX1mdW5jdGlvbiBZdChlLHQpe3JldHVybiBqdCh0LChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKX1mdW5jdGlvbiBKdChlLHQpe3JldHVybiBlLmhhcyh0KX1mdW5jdGlvbiBYdChlLHQpe2Zvcih2YXIgbj0tMSxyPWUubGVuZ3RoOysrbjxyJiZCdCh0LGVbbl0sMCk+LTE7KTtyZXR1cm4gbn1mdW5jdGlvbiBRdChlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aDtuLS0mJkJ0KHQsZVtuXSwwKT4tMTspO3JldHVybiBufXZhciBlbj1XdCh7w4A6XCJBXCIsw4E6XCJBXCIsw4I6XCJBXCIsw4M6XCJBXCIsw4Q6XCJBXCIsw4U6XCJBXCIsw6A6XCJhXCIsw6E6XCJhXCIsw6I6XCJhXCIsw6M6XCJhXCIsw6Q6XCJhXCIsw6U6XCJhXCIsw4c6XCJDXCIsw6c6XCJjXCIsw5A6XCJEXCIsw7A6XCJkXCIsw4g6XCJFXCIsw4k6XCJFXCIsw4o6XCJFXCIsw4s6XCJFXCIsw6g6XCJlXCIsw6k6XCJlXCIsw6o6XCJlXCIsw6s6XCJlXCIsw4w6XCJJXCIsw406XCJJXCIsw446XCJJXCIsw486XCJJXCIsw6w6XCJpXCIsw606XCJpXCIsw646XCJpXCIsw686XCJpXCIsw5E6XCJOXCIsw7E6XCJuXCIsw5I6XCJPXCIsw5M6XCJPXCIsw5Q6XCJPXCIsw5U6XCJPXCIsw5Y6XCJPXCIsw5g6XCJPXCIsw7I6XCJvXCIsw7M6XCJvXCIsw7Q6XCJvXCIsw7U6XCJvXCIsw7Y6XCJvXCIsw7g6XCJvXCIsw5k6XCJVXCIsw5o6XCJVXCIsw5s6XCJVXCIsw5w6XCJVXCIsw7k6XCJ1XCIsw7o6XCJ1XCIsw7s6XCJ1XCIsw7w6XCJ1XCIsw506XCJZXCIsw706XCJ5XCIsw786XCJ5XCIsw4Y6XCJBZVwiLMOmOlwiYWVcIizDnjpcIlRoXCIsw746XCJ0aFwiLMOfOlwic3NcIizEgDpcIkFcIizEgjpcIkFcIizEhDpcIkFcIizEgTpcImFcIizEgzpcImFcIizEhTpcImFcIizEhjpcIkNcIizEiDpcIkNcIizEijpcIkNcIizEjDpcIkNcIizEhzpcImNcIizEiTpcImNcIizEizpcImNcIizEjTpcImNcIizEjjpcIkRcIizEkDpcIkRcIizEjzpcImRcIizEkTpcImRcIizEkjpcIkVcIizElDpcIkVcIizEljpcIkVcIizEmDpcIkVcIizEmjpcIkVcIizEkzpcImVcIizElTpcImVcIizElzpcImVcIizEmTpcImVcIizEmzpcImVcIizEnDpcIkdcIizEnjpcIkdcIizEoDpcIkdcIizEojpcIkdcIizEnTpcImdcIizEnzpcImdcIizEoTpcImdcIizEozpcImdcIizEpDpcIkhcIizEpjpcIkhcIizEpTpcImhcIizEpzpcImhcIizEqDpcIklcIizEqjpcIklcIizErDpcIklcIizErjpcIklcIizEsDpcIklcIizEqTpcImlcIizEqzpcImlcIizErTpcImlcIizErzpcImlcIizEsTpcImlcIizEtDpcIkpcIizEtTpcImpcIizEtjpcIktcIizEtzpcImtcIizEuDpcImtcIizEuTpcIkxcIizEuzpcIkxcIizEvTpcIkxcIizEvzpcIkxcIizFgTpcIkxcIizEujpcImxcIizEvDpcImxcIizEvjpcImxcIizFgDpcImxcIizFgjpcImxcIizFgzpcIk5cIizFhTpcIk5cIizFhzpcIk5cIizFijpcIk5cIizFhDpcIm5cIizFhjpcIm5cIizFiDpcIm5cIizFizpcIm5cIizFjDpcIk9cIizFjjpcIk9cIizFkDpcIk9cIizFjTpcIm9cIizFjzpcIm9cIizFkTpcIm9cIizFlDpcIlJcIizFljpcIlJcIizFmDpcIlJcIizFlTpcInJcIizFlzpcInJcIizFmTpcInJcIizFmjpcIlNcIizFnDpcIlNcIizFnjpcIlNcIizFoDpcIlNcIizFmzpcInNcIizFnTpcInNcIizFnzpcInNcIizFoTpcInNcIizFojpcIlRcIizFpDpcIlRcIizFpjpcIlRcIizFozpcInRcIizFpTpcInRcIizFpzpcInRcIizFqDpcIlVcIizFqjpcIlVcIizFrDpcIlVcIizFrjpcIlVcIizFsDpcIlVcIizFsjpcIlVcIizFqTpcInVcIizFqzpcInVcIizFrTpcInVcIizFrzpcInVcIizFsTpcInVcIizFszpcInVcIizFtDpcIldcIizFtTpcIndcIizFtjpcIllcIizFtzpcInlcIizFuDpcIllcIizFuTpcIlpcIizFuzpcIlpcIizFvTpcIlpcIizFujpcInpcIizFvDpcInpcIizFvjpcInpcIizEsjpcIklKXCIsxLM6XCJpalwiLMWSOlwiT2VcIizFkzpcIm9lXCIsxYk6XCInblwiLMW/Olwic1wifSksdG49V3Qoe1wiJlwiOlwiJmFtcDtcIixcIjxcIjpcIiZsdDtcIixcIj5cIjpcIiZndDtcIiwnXCInOlwiJnF1b3Q7XCIsXCInXCI6XCImIzM5O1wifSk7ZnVuY3Rpb24gbm4oZSl7cmV0dXJuXCJcXFxcXCIraXRbZV19ZnVuY3Rpb24gcm4oZSl7cmV0dXJuIGV0LnRlc3QoZSl9ZnVuY3Rpb24gb24oZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUscil7blsrK3RdPVtyLGVdfSkpLG59ZnVuY3Rpb24gYW4oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUodChuKSl9fWZ1bmN0aW9uIGxuKGUsdCl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGgsbz0wLGE9W107KytuPHI7KXt2YXIgaT1lW25dO2khPT10JiZpIT09bHx8KGVbbl09bCxhW28rK109bil9cmV0dXJuIGF9ZnVuY3Rpb24gc24oZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe25bKyt0XT1lfSkpLG59ZnVuY3Rpb24gY24oZSl7cmV0dXJuIHJuKGUpP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1YZS5sYXN0SW5kZXg9MDtYZS50ZXN0KGUpOykrK3Q7cmV0dXJuIHR9KGUpOkF0KGUpfWZ1bmN0aW9uIHVuKGUpe3JldHVybiBybihlKT9mdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaChYZSl8fFtdfShlKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdChcIlwiKX0oZSl9ZnVuY3Rpb24gZG4oZSl7Zm9yKHZhciB0PWUubGVuZ3RoO3QtLSYmb2UudGVzdChlLmNoYXJBdCh0KSk7KTtyZXR1cm4gdH12YXIgcG49V3Qoe1wiJmFtcDtcIjpcIiZcIixcIiZsdDtcIjpcIjxcIixcIiZndDtcIjpcIj5cIixcIiZxdW90O1wiOidcIicsXCImIzM5O1wiOlwiJ1wifSksZm49ZnVuY3Rpb24gZSh0KXt2YXIgbixyPSh0PW51bGw9PXQ/ZHQ6Zm4uZGVmYXVsdHMoZHQuT2JqZWN0KCksdCxmbi5waWNrKGR0LG50KSkpLkFycmF5LG9lPXQuRGF0ZSx5ZT10LkVycm9yLHhlPXQuRnVuY3Rpb24sa2U9dC5NYXRoLFNlPXQuT2JqZWN0LE9lPXQuUmVnRXhwLE1lPXQuU3RyaW5nLExlPXQuVHlwZUVycm9yLF9lPXIucHJvdG90eXBlLFBlPXhlLnByb3RvdHlwZSxFZT1TZS5wcm90b3R5cGUsamU9dFtcIl9fY29yZS1qc19zaGFyZWRfX1wiXSxSZT1QZS50b1N0cmluZyxJZT1FZS5oYXNPd25Qcm9wZXJ0eSxWZT0wLEhlPShuPS9bXi5dKyQvLmV4ZWMoamUmJmplLmtleXMmJmplLmtleXMuSUVfUFJPVE98fFwiXCIpKT9cIlN5bWJvbChzcmMpXzEuXCIrbjpcIlwiLEFlPUVlLnRvU3RyaW5nLFRlPVJlLmNhbGwoU2UpLERlPWR0Ll8sQmU9T2UoXCJeXCIrUmUuY2FsbChJZSkucmVwbGFjZSh0ZSxcIlxcXFwkJlwiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLFwiJDEuKj9cIikrXCIkXCIpLFplPWh0P3QuQnVmZmVyOm8sJGU9dC5TeW1ib2wsTmU9dC5VaW50OEFycmF5LEZlPVplP1plLmFsbG9jVW5zYWZlOm8sV2U9YW4oU2UuZ2V0UHJvdG90eXBlT2YsU2UpLFVlPVNlLmNyZWF0ZSx6ZT1FZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxHZT1fZS5zcGxpY2UsS2U9JGU/JGUuaXNDb25jYXRTcHJlYWRhYmxlOm8scWU9JGU/JGUuaXRlcmF0b3I6byxYZT0kZT8kZS50b1N0cmluZ1RhZzpvLGV0PWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPXNhKFNlLFwiZGVmaW5lUHJvcGVydHlcIik7cmV0dXJuIGUoe30sXCJcIix7fSksZX1jYXRjaChlKXt9fSgpLGl0PXQuY2xlYXJUaW1lb3V0IT09ZHQuY2xlYXJUaW1lb3V0JiZ0LmNsZWFyVGltZW91dCxjdD1vZSYmb2Uubm93IT09ZHQuRGF0ZS5ub3cmJm9lLm5vdyx1dD10LnNldFRpbWVvdXQhPT1kdC5zZXRUaW1lb3V0JiZ0LnNldFRpbWVvdXQscHQ9a2UuY2VpbCxmdD1rZS5mbG9vcixndD1TZS5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsdnQ9WmU/WmUuaXNCdWZmZXI6byxBdD10LmlzRmluaXRlLFd0PV9lLmpvaW4saG49YW4oU2Uua2V5cyxTZSksZ249a2UubWF4LHZuPWtlLm1pbixDbj1vZS5ub3csbW49dC5wYXJzZUludCx3bj1rZS5yYW5kb20sYm49X2UucmV2ZXJzZSx5bj1zYSh0LFwiRGF0YVZpZXdcIikseG49c2EodCxcIk1hcFwiKSxrbj1zYSh0LFwiUHJvbWlzZVwiKSxTbj1zYSh0LFwiU2V0XCIpLE9uPXNhKHQsXCJXZWFrTWFwXCIpLE1uPXNhKFNlLFwiY3JlYXRlXCIpLExuPU9uJiZuZXcgT24sX249e30sUG49QWEoeW4pLEVuPUFhKHhuKSxqbj1BYShrbiksUm49QWEoU24pLEluPUFhKE9uKSxWbj0kZT8kZS5wcm90b3R5cGU6byxIbj1Wbj9Wbi52YWx1ZU9mOm8sQW49Vm4/Vm4udG9TdHJpbmc6bztmdW5jdGlvbiBUbihlKXtpZihRaShlKSYmIU5pKGUpJiYhKGUgaW5zdGFuY2VvZiAkbikpe2lmKGUgaW5zdGFuY2VvZiBabilyZXR1cm4gZTtpZihJZS5jYWxsKGUsXCJfX3dyYXBwZWRfX1wiKSlyZXR1cm4gVGEoZSl9cmV0dXJuIG5ldyBabihlKX12YXIgRG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBmdW5jdGlvbih0KXtpZighWGkodCkpcmV0dXJue307aWYoVWUpcmV0dXJuIFVlKHQpO2UucHJvdG90eXBlPXQ7dmFyIG49bmV3IGU7cmV0dXJuIGUucHJvdG90eXBlPW8sbn19KCk7ZnVuY3Rpb24gQm4oKXt9ZnVuY3Rpb24gWm4oZSx0KXt0aGlzLl9fd3JhcHBlZF9fPWUsdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fY2hhaW5fXz0hIXQsdGhpcy5fX2luZGV4X189MCx0aGlzLl9fdmFsdWVzX189b31mdW5jdGlvbiAkbihlKXt0aGlzLl9fd3JhcHBlZF9fPWUsdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fZGlyX189MSx0aGlzLl9fZmlsdGVyZWRfXz0hMSx0aGlzLl9faXRlcmF0ZWVzX189W10sdGhpcy5fX3Rha2VDb3VudF9fPWYsdGhpcy5fX3ZpZXdzX189W119ZnVuY3Rpb24gTm4oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gRm4oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gV24oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gVW4oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IFduOysrdDxuOyl0aGlzLmFkZChlW3RdKX1mdW5jdGlvbiB6bihlKXt2YXIgdD10aGlzLl9fZGF0YV9fPW5ldyBGbihlKTt0aGlzLnNpemU9dC5zaXplfWZ1bmN0aW9uIEduKGUsdCl7dmFyIG49TmkoZSkscj0hbiYmJGkoZSksbz0hbiYmIXImJnppKGUpLGE9IW4mJiFyJiYhbyYmbGwoZSksaT1ufHxyfHxvfHxhLGw9aT9HdChlLmxlbmd0aCxNZSk6W10scz1sLmxlbmd0aDtmb3IodmFyIGMgaW4gZSkhdCYmIUllLmNhbGwoZSxjKXx8aSYmKFwibGVuZ3RoXCI9PWN8fG8mJihcIm9mZnNldFwiPT1jfHxcInBhcmVudFwiPT1jKXx8YSYmKFwiYnVmZmVyXCI9PWN8fFwiYnl0ZUxlbmd0aFwiPT1jfHxcImJ5dGVPZmZzZXRcIj09Yyl8fGdhKGMscykpfHxsLnB1c2goYyk7cmV0dXJuIGx9ZnVuY3Rpb24gS24oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIHQ/ZVtXcigwLHQtMSldOm99ZnVuY3Rpb24gcW4oZSx0KXtyZXR1cm4gamEoTW8oZSksb3IodCwwLGUubGVuZ3RoKSl9ZnVuY3Rpb24gWW4oZSl7cmV0dXJuIGphKE1vKGUpKX1mdW5jdGlvbiBKbihlLHQsbil7KG4hPT1vJiYhRGkoZVt0XSxuKXx8bj09PW8mJiEodCBpbiBlKSkmJm5yKGUsdCxuKX1mdW5jdGlvbiBYbihlLHQsbil7dmFyIHI9ZVt0XTtJZS5jYWxsKGUsdCkmJkRpKHIsbikmJihuIT09b3x8dCBpbiBlKXx8bnIoZSx0LG4pfWZ1bmN0aW9uIFFuKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoO24tLTspaWYoRGkoZVtuXVswXSx0KSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBlcihlLHQsbixyKXtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxvLGEpe3QocixlLG4oZSksYSl9KSkscn1mdW5jdGlvbiB0cihlLHQpe3JldHVybiBlJiZMbyh0LFBsKHQpLGUpfWZ1bmN0aW9uIG5yKGUsdCxuKXtcIl9fcHJvdG9fX1wiPT10JiZldD9ldChlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOm4sd3JpdGFibGU6ITB9KTplW3RdPW59ZnVuY3Rpb24gcnIoZSx0KXtmb3IodmFyIG49LTEsYT10Lmxlbmd0aCxpPXIoYSksbD1udWxsPT1lOysrbjxhOylpW25dPWw/bzpTbChlLHRbbl0pO3JldHVybiBpfWZ1bmN0aW9uIG9yKGUsdCxuKXtyZXR1cm4gZT09ZSYmKG4hPT1vJiYoZT1lPD1uP2U6biksdCE9PW8mJihlPWU+PXQ/ZTp0KSksZX1mdW5jdGlvbiBhcihlLHQsbixyLGEsaSl7dmFyIGwscz0xJnQsYz0yJnQsdT00JnQ7aWYobiYmKGw9YT9uKGUscixhLGkpOm4oZSkpLGwhPT1vKXJldHVybiBsO2lmKCFYaShlKSlyZXR1cm4gZTt2YXIgZD1OaShlKTtpZihkKXtpZihsPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49bmV3IGUuY29uc3RydWN0b3IodCk7cmV0dXJuIHQmJlwic3RyaW5nXCI9PXR5cGVvZiBlWzBdJiZJZS5jYWxsKGUsXCJpbmRleFwiKSYmKG4uaW5kZXg9ZS5pbmRleCxuLmlucHV0PWUuaW5wdXQpLG59KGUpLCFzKXJldHVybiBNbyhlLGwpfWVsc2V7dmFyIHA9ZGEoZSksZj1wPT1ifHxwPT15O2lmKHppKGUpKXJldHVybiBibyhlLHMpO2lmKHA9PVN8fHA9PWd8fGYmJiFhKXtpZihsPWN8fGY/e306ZmEoZSksIXMpcmV0dXJuIGM/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTG8oZSx1YShlKSx0KX0oZSxmdW5jdGlvbihlLHQpe3JldHVybiBlJiZMbyh0LEVsKHQpLGUpfShsLGUpKTpmdW5jdGlvbihlLHQpe3JldHVybiBMbyhlLGNhKGUpLHQpfShlLHRyKGwsZSkpfWVsc2V7aWYoIWF0W3BdKXJldHVybiBhP2U6e307bD1mdW5jdGlvbihlLHQsbil7dmFyIHIsbz1lLmNvbnN0cnVjdG9yO3N3aXRjaCh0KXtjYXNlIGo6cmV0dXJuIHlvKGUpO2Nhc2UgQzpjYXNlIG06cmV0dXJuIG5ldyBvKCtlKTtjYXNlIFI6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG49dD95byhlLmJ1ZmZlcik6ZS5idWZmZXI7cmV0dXJuIG5ldyBlLmNvbnN0cnVjdG9yKG4sZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCl9KGUsbik7Y2FzZSBJOmNhc2UgVjpjYXNlIEg6Y2FzZSBBOmNhc2UgVDpjYXNlIEQ6Y2FzZSBCOmNhc2UgWjpjYXNlICQ6cmV0dXJuIHhvKGUsbik7Y2FzZSB4OnJldHVybiBuZXcgbztjYXNlIGs6Y2FzZSBfOnJldHVybiBuZXcgbyhlKTtjYXNlIE06cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBlLmNvbnN0cnVjdG9yKGUuc291cmNlLHBlLmV4ZWMoZSkpO3JldHVybiB0Lmxhc3RJbmRleD1lLmxhc3RJbmRleCx0fShlKTtjYXNlIEw6cmV0dXJuIG5ldyBvO2Nhc2UgUDpyZXR1cm4gcj1lLEhuP1NlKEhuLmNhbGwocikpOnt9fX0oZSxwLHMpfX1pfHwoaT1uZXcgem4pO3ZhciBoPWkuZ2V0KGUpO2lmKGgpcmV0dXJuIGg7aS5zZXQoZSxsKSxvbChlKT9lLmZvckVhY2goKGZ1bmN0aW9uKHIpe2wuYWRkKGFyKHIsdCxuLHIsZSxpKSl9KSk6ZWwoZSkmJmUuZm9yRWFjaCgoZnVuY3Rpb24ocixvKXtsLnNldChvLGFyKHIsdCxuLG8sZSxpKSl9KSk7dmFyIHY9ZD9vOih1P2M/dGE6ZWE6Yz9FbDpQbCkoZSk7cmV0dXJuIE90KHZ8fGUsKGZ1bmN0aW9uKHIsbyl7diYmKHI9ZVtvPXJdKSxYbihsLG8sYXIocix0LG4sbyxlLGkpKX0pKSxsfWZ1bmN0aW9uIGlyKGUsdCxuKXt2YXIgcj1uLmxlbmd0aDtpZihudWxsPT1lKXJldHVybiFyO2ZvcihlPVNlKGUpO3ItLTspe3ZhciBhPW5bcl0saT10W2FdLGw9ZVthXTtpZihsPT09byYmIShhIGluIGUpfHwhaShsKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBscihlLHQsbil7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgTGUoYSk7cmV0dXJuIExhKChmdW5jdGlvbigpe2UuYXBwbHkobyxuKX0pLHQpfWZ1bmN0aW9uIHNyKGUsdCxuLHIpe3ZhciBvPS0xLGE9UHQsaT0hMCxsPWUubGVuZ3RoLHM9W10sYz10Lmxlbmd0aDtpZighbClyZXR1cm4gcztuJiYodD1qdCh0LHF0KG4pKSkscj8oYT1FdCxpPSExKTp0Lmxlbmd0aD49MjAwJiYoYT1KdCxpPSExLHQ9bmV3IFVuKHQpKTtlOmZvcig7KytvPGw7KXt2YXIgdT1lW29dLGQ9bnVsbD09bj91Om4odSk7aWYodT1yfHwwIT09dT91OjAsaSYmZD09ZCl7Zm9yKHZhciBwPWM7cC0tOylpZih0W3BdPT09ZCljb250aW51ZSBlO3MucHVzaCh1KX1lbHNlIGEodCxkLHIpfHxzLnB1c2godSl9cmV0dXJuIHN9VG4udGVtcGxhdGVTZXR0aW5ncz17ZXNjYXBlOnEsZXZhbHVhdGU6WSxpbnRlcnBvbGF0ZTpKLHZhcmlhYmxlOlwiXCIsaW1wb3J0czp7XzpUbn19LFRuLnByb3RvdHlwZT1Cbi5wcm90b3R5cGUsVG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPVRuLFpuLnByb3RvdHlwZT1EbihCbi5wcm90b3R5cGUpLFpuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1abiwkbi5wcm90b3R5cGU9RG4oQm4ucHJvdG90eXBlKSwkbi5wcm90b3R5cGUuY29uc3RydWN0b3I9JG4sTm4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1Nbj9NbihudWxsKTp7fSx0aGlzLnNpemU9MH0sTm4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV07cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH0sTm4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKE1uKXt2YXIgbj10W2VdO3JldHVybiBuPT09aT9vOm59cmV0dXJuIEllLmNhbGwodCxlKT90W2VdOm99LE5uLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gTW4/dFtlXSE9PW86SWUuY2FsbCh0LGUpfSxObi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhlKT8wOjEsbltlXT1NbiYmdD09PW8/aTp0LHRoaXN9LEZuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LEZuLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPVFuKHQsZSk7cmV0dXJuIShuPDB8fChuPT10Lmxlbmd0aC0xP3QucG9wKCk6R2UuY2FsbCh0LG4sMSksLS10aGlzLnNpemUsMCkpfSxGbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1Rbih0LGUpO3JldHVybiBuPDA/bzp0W25dWzFdfSxGbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBRbih0aGlzLl9fZGF0YV9fLGUpPi0xfSxGbi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXyxyPVFuKG4sZSk7cmV0dXJuIHI8MD8oKyt0aGlzLnNpemUsbi5wdXNoKFtlLHRdKSk6bltyXVsxXT10LHRoaXN9LFduLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IE5uLG1hcDpuZXcoeG58fEZuKSxzdHJpbmc6bmV3IE5ufX0sV24ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD1pYSh0aGlzLGUpLmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fSxXbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBpYSh0aGlzLGUpLmdldChlKX0sV24ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gaWEodGhpcyxlKS5oYXMoZSl9LFduLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1pYSh0aGlzLGUpLHI9bi5zaXplO3JldHVybiBuLnNldChlLHQpLHRoaXMuc2l6ZSs9bi5zaXplPT1yPzA6MSx0aGlzfSxVbi5wcm90b3R5cGUuYWRkPVVuLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLGkpLHRoaXN9LFVuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfSx6bi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPW5ldyBGbix0aGlzLnNpemU9MH0sem4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49dC5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZT10LnNpemUsbn0sem4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoZSl9LHpuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfSx6bi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXztpZihuIGluc3RhbmNlb2YgRm4pe3ZhciByPW4uX19kYXRhX187aWYoIXhufHxyLmxlbmd0aDwxOTkpcmV0dXJuIHIucHVzaChbZSx0XSksdGhpcy5zaXplPSsrbi5zaXplLHRoaXM7bj10aGlzLl9fZGF0YV9fPW5ldyBXbihyKX1yZXR1cm4gbi5zZXQoZSx0KSx0aGlzLnNpemU9bi5zaXplLHRoaXN9O3ZhciBjcj1FbyhDciksdXI9RW8obXIsITApO2Z1bmN0aW9uIGRyKGUsdCl7dmFyIG49ITA7cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUscixvKXtyZXR1cm4gbj0hIXQoZSxyLG8pfSkpLG59ZnVuY3Rpb24gcHIoZSx0LG4pe2Zvcih2YXIgcj0tMSxhPWUubGVuZ3RoOysrcjxhOyl7dmFyIGk9ZVtyXSxsPXQoaSk7aWYobnVsbCE9bCYmKHM9PT1vP2w9PWwmJiFpbChsKTpuKGwscykpKXZhciBzPWwsYz1pfXJldHVybiBjfWZ1bmN0aW9uIGZyKGUsdCl7dmFyIG49W107cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUscixvKXt0KGUscixvKSYmbi5wdXNoKGUpfSkpLG59ZnVuY3Rpb24gaHIoZSx0LG4scixvKXt2YXIgYT0tMSxpPWUubGVuZ3RoO2ZvcihufHwobj1oYSksb3x8KG89W10pOysrYTxpOyl7dmFyIGw9ZVthXTt0PjAmJm4obCk/dD4xP2hyKGwsdC0xLG4scixvKTpSdChvLGwpOnJ8fChvW28ubGVuZ3RoXT1sKX1yZXR1cm4gb312YXIgZ3I9am8oKSx2cj1qbyghMCk7ZnVuY3Rpb24gQ3IoZSx0KXtyZXR1cm4gZSYmZ3IoZSx0LFBsKX1mdW5jdGlvbiBtcihlLHQpe3JldHVybiBlJiZ2cihlLHQsUGwpfWZ1bmN0aW9uIHdyKGUsdCl7cmV0dXJuIF90KHQsKGZ1bmN0aW9uKHQpe3JldHVybiBxaShlW3RdKX0pKX1mdW5jdGlvbiBicihlLHQpe2Zvcih2YXIgbj0wLHI9KHQ9dm8odCxlKSkubGVuZ3RoO251bGwhPWUmJm48cjspZT1lW0hhKHRbbisrXSldO3JldHVybiBuJiZuPT1yP2U6b31mdW5jdGlvbiB5cihlLHQsbil7dmFyIHI9dChlKTtyZXR1cm4gTmkoZSk/cjpSdChyLG4oZSkpfWZ1bmN0aW9uIHhyKGUpe3JldHVybiBudWxsPT1lP2U9PT1vP1wiW29iamVjdCBVbmRlZmluZWRdXCI6XCJbb2JqZWN0IE51bGxdXCI6WGUmJlhlIGluIFNlKGUpP2Z1bmN0aW9uKGUpe3ZhciB0PUllLmNhbGwoZSxYZSksbj1lW1hlXTt0cnl7ZVtYZV09bzt2YXIgcj0hMH1jYXRjaChlKXt9dmFyIGE9QWUuY2FsbChlKTtyZXR1cm4gciYmKHQ/ZVtYZV09bjpkZWxldGUgZVtYZV0pLGF9KGUpOmZ1bmN0aW9uKGUpe3JldHVybiBBZS5jYWxsKGUpfShlKX1mdW5jdGlvbiBrcihlLHQpe3JldHVybiBlPnR9ZnVuY3Rpb24gU3IoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmSWUuY2FsbChlLHQpfWZ1bmN0aW9uIE9yKGUsdCl7cmV0dXJuIG51bGwhPWUmJnQgaW4gU2UoZSl9ZnVuY3Rpb24gTXIoZSx0LG4pe2Zvcih2YXIgYT1uP0V0OlB0LGk9ZVswXS5sZW5ndGgsbD1lLmxlbmd0aCxzPWwsYz1yKGwpLHU9MS8wLGQ9W107cy0tOyl7dmFyIHA9ZVtzXTtzJiZ0JiYocD1qdChwLHF0KHQpKSksdT12bihwLmxlbmd0aCx1KSxjW3NdPSFuJiYodHx8aT49MTIwJiZwLmxlbmd0aD49MTIwKT9uZXcgVW4ocyYmcCk6b31wPWVbMF07dmFyIGY9LTEsaD1jWzBdO2U6Zm9yKDsrK2Y8aSYmZC5sZW5ndGg8dTspe3ZhciBnPXBbZl0sdj10P3QoZyk6ZztpZihnPW58fDAhPT1nP2c6MCwhKGg/SnQoaCx2KTphKGQsdixuKSkpe2ZvcihzPWw7LS1zOyl7dmFyIEM9Y1tzXTtpZighKEM/SnQoQyx2KTphKGVbc10sdixuKSkpY29udGludWUgZX1oJiZoLnB1c2godiksZC5wdXNoKGcpfX1yZXR1cm4gZH1mdW5jdGlvbiBMcihlLHQsbil7dmFyIHI9bnVsbD09KGU9U2EoZSx0PXZvKHQsZSkpKT9lOmVbSGEoS2EodCkpXTtyZXR1cm4gbnVsbD09cj9vOmt0KHIsZSxuKX1mdW5jdGlvbiBfcihlKXtyZXR1cm4gUWkoZSkmJnhyKGUpPT1nfWZ1bmN0aW9uIFByKGUsdCxuLHIsYSl7cmV0dXJuIGU9PT10fHwobnVsbD09ZXx8bnVsbD09dHx8IVFpKGUpJiYhUWkodCk/ZSE9ZSYmdCE9dDpmdW5jdGlvbihlLHQsbixyLGEsaSl7dmFyIGw9TmkoZSkscz1OaSh0KSxjPWw/djpkYShlKSx1PXM/djpkYSh0KSxkPShjPWM9PWc/UzpjKT09UyxwPSh1PXU9PWc/Uzp1KT09UyxmPWM9PXU7aWYoZiYmemkoZSkpe2lmKCF6aSh0KSlyZXR1cm4hMTtsPSEwLGQ9ITF9aWYoZiYmIWQpcmV0dXJuIGl8fChpPW5ldyB6biksbHx8bGwoZSk/WG8oZSx0LG4scixhLGkpOmZ1bmN0aW9uKGUsdCxuLHIsbyxhLGkpe3N3aXRjaChuKXtjYXNlIFI6aWYoZS5ieXRlTGVuZ3RoIT10LmJ5dGVMZW5ndGh8fGUuYnl0ZU9mZnNldCE9dC5ieXRlT2Zmc2V0KXJldHVybiExO2U9ZS5idWZmZXIsdD10LmJ1ZmZlcjtjYXNlIGo6cmV0dXJuIShlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IWEobmV3IE5lKGUpLG5ldyBOZSh0KSkpO2Nhc2UgQzpjYXNlIG06Y2FzZSBrOnJldHVybiBEaSgrZSwrdCk7Y2FzZSB3OnJldHVybiBlLm5hbWU9PXQubmFtZSYmZS5tZXNzYWdlPT10Lm1lc3NhZ2U7Y2FzZSBNOmNhc2UgXzpyZXR1cm4gZT09dCtcIlwiO2Nhc2UgeDp2YXIgbD1vbjtjYXNlIEw6dmFyIHM9MSZyO2lmKGx8fChsPXNuKSxlLnNpemUhPXQuc2l6ZSYmIXMpcmV0dXJuITE7dmFyIGM9aS5nZXQoZSk7aWYoYylyZXR1cm4gYz09dDtyfD0yLGkuc2V0KGUsdCk7dmFyIHU9WG8obChlKSxsKHQpLHIsbyxhLGkpO3JldHVybiBpLmRlbGV0ZShlKSx1O2Nhc2UgUDppZihIbilyZXR1cm4gSG4uY2FsbChlKT09SG4uY2FsbCh0KX1yZXR1cm4hMX0oZSx0LGMsbixyLGEsaSk7aWYoISgxJm4pKXt2YXIgaD1kJiZJZS5jYWxsKGUsXCJfX3dyYXBwZWRfX1wiKSxiPXAmJkllLmNhbGwodCxcIl9fd3JhcHBlZF9fXCIpO2lmKGh8fGIpe3ZhciB5PWg/ZS52YWx1ZSgpOmUsTz1iP3QudmFsdWUoKTp0O3JldHVybiBpfHwoaT1uZXcgem4pLGEoeSxPLG4scixpKX19cmV0dXJuISFmJiYoaXx8KGk9bmV3IHpuKSxmdW5jdGlvbihlLHQsbixyLGEsaSl7dmFyIGw9MSZuLHM9ZWEoZSksYz1zLmxlbmd0aDtpZihjIT1lYSh0KS5sZW5ndGgmJiFsKXJldHVybiExO2Zvcih2YXIgdT1jO3UtLTspe3ZhciBkPXNbdV07aWYoIShsP2QgaW4gdDpJZS5jYWxsKHQsZCkpKXJldHVybiExfXZhciBwPWkuZ2V0KGUpLGY9aS5nZXQodCk7aWYocCYmZilyZXR1cm4gcD09dCYmZj09ZTt2YXIgaD0hMDtpLnNldChlLHQpLGkuc2V0KHQsZSk7Zm9yKHZhciBnPWw7Kyt1PGM7KXt2YXIgdj1lW2Q9c1t1XV0sQz10W2RdO2lmKHIpdmFyIG09bD9yKEMsdixkLHQsZSxpKTpyKHYsQyxkLGUsdCxpKTtpZighKG09PT1vP3Y9PT1DfHxhKHYsQyxuLHIsaSk6bSkpe2g9ITE7YnJlYWt9Z3x8KGc9XCJjb25zdHJ1Y3RvclwiPT1kKX1pZihoJiYhZyl7dmFyIHc9ZS5jb25zdHJ1Y3RvcixiPXQuY29uc3RydWN0b3I7dz09Ynx8IShcImNvbnN0cnVjdG9yXCJpbiBlKXx8IShcImNvbnN0cnVjdG9yXCJpbiB0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgdyYmdyBpbnN0YW5jZW9mIHcmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGImJmIgaW5zdGFuY2VvZiBifHwoaD0hMSl9cmV0dXJuIGkuZGVsZXRlKGUpLGkuZGVsZXRlKHQpLGh9KGUsdCxuLHIsYSxpKSl9KGUsdCxuLHIsUHIsYSkpfWZ1bmN0aW9uIEVyKGUsdCxuLHIpe3ZhciBhPW4ubGVuZ3RoLGk9YSxsPSFyO2lmKG51bGw9PWUpcmV0dXJuIWk7Zm9yKGU9U2UoZSk7YS0tOyl7dmFyIHM9blthXTtpZihsJiZzWzJdP3NbMV0hPT1lW3NbMF1dOiEoc1swXWluIGUpKXJldHVybiExfWZvcig7KythPGk7KXt2YXIgYz0ocz1uW2FdKVswXSx1PWVbY10sZD1zWzFdO2lmKGwmJnNbMl0pe2lmKHU9PT1vJiYhKGMgaW4gZSkpcmV0dXJuITF9ZWxzZXt2YXIgcD1uZXcgem47aWYocil2YXIgZj1yKHUsZCxjLGUsdCxwKTtpZighKGY9PT1vP1ByKGQsdSwzLHIscCk6ZikpcmV0dXJuITF9fXJldHVybiEwfWZ1bmN0aW9uIGpyKGUpe3JldHVybiEoIVhpKGUpfHwodD1lLEhlJiZIZSBpbiB0KSkmJihxaShlKT9CZTpnZSkudGVzdChBYShlKSk7dmFyIHR9ZnVuY3Rpb24gUnIoZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOm51bGw9PWU/dHM6XCJvYmplY3RcIj09dHlwZW9mIGU/TmkoZSk/VHIoZVswXSxlWzFdKTpBcihlKTp1cyhlKX1mdW5jdGlvbiBJcihlKXtpZighYmEoZSkpcmV0dXJuIGhuKGUpO3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBTZShlKSlJZS5jYWxsKGUsbikmJlwiY29uc3RydWN0b3JcIiE9biYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIFZyKGUsdCl7cmV0dXJuIGU8dH1mdW5jdGlvbiBIcihlLHQpe3ZhciBuPS0xLG89V2koZSk/cihlLmxlbmd0aCk6W107cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUscixhKXtvWysrbl09dChlLHIsYSl9KSksb31mdW5jdGlvbiBBcihlKXt2YXIgdD1sYShlKTtyZXR1cm4gMT09dC5sZW5ndGgmJnRbMF1bMl0/eGEodFswXVswXSx0WzBdWzFdKTpmdW5jdGlvbihuKXtyZXR1cm4gbj09PWV8fEVyKG4sZSx0KX19ZnVuY3Rpb24gVHIoZSx0KXtyZXR1cm4gQ2EoZSkmJnlhKHQpP3hhKEhhKGUpLHQpOmZ1bmN0aW9uKG4pe3ZhciByPVNsKG4sZSk7cmV0dXJuIHI9PT1vJiZyPT09dD9PbChuLGUpOlByKHQsciwzKX19ZnVuY3Rpb24gRHIoZSx0LG4scixhKXtlIT09dCYmZ3IodCwoZnVuY3Rpb24oaSxsKXtpZihhfHwoYT1uZXcgem4pLFhpKGkpKSFmdW5jdGlvbihlLHQsbixyLGEsaSxsKXt2YXIgcz1PYShlLG4pLGM9T2EodCxuKSx1PWwuZ2V0KGMpO2lmKHUpSm4oZSxuLHUpO2Vsc2V7dmFyIGQ9aT9pKHMsYyxuK1wiXCIsZSx0LGwpOm8scD1kPT09bztpZihwKXt2YXIgZj1OaShjKSxoPSFmJiZ6aShjKSxnPSFmJiYhaCYmbGwoYyk7ZD1jLGZ8fGh8fGc/Tmkocyk/ZD1zOlVpKHMpP2Q9TW8ocyk6aD8ocD0hMSxkPWJvKGMsITApKTpnPyhwPSExLGQ9eG8oYywhMCkpOmQ9W106bmwoYyl8fCRpKGMpPyhkPXMsJGkocyk/ZD1nbChzKTpYaShzKSYmIXFpKHMpfHwoZD1mYShjKSkpOnA9ITF9cCYmKGwuc2V0KGMsZCksYShkLGMscixpLGwpLGwuZGVsZXRlKGMpKSxKbihlLG4sZCl9fShlLHQsbCxuLERyLHIsYSk7ZWxzZXt2YXIgcz1yP3IoT2EoZSxsKSxpLGwrXCJcIixlLHQsYSk6bztzPT09byYmKHM9aSksSm4oZSxsLHMpfX0pLEVsKX1mdW5jdGlvbiBCcihlLHQpe3ZhciBuPWUubGVuZ3RoO2lmKG4pcmV0dXJuIGdhKHQrPXQ8MD9uOjAsbik/ZVt0XTpvfWZ1bmN0aW9uIFpyKGUsdCxuKXt0PXQubGVuZ3RoP2p0KHQsKGZ1bmN0aW9uKGUpe3JldHVybiBOaShlKT9mdW5jdGlvbih0KXtyZXR1cm4gYnIodCwxPT09ZS5sZW5ndGg/ZVswXTplKX06ZX0pKTpbdHNdO3ZhciByPS0xO3Q9anQodCxxdChhYSgpKSk7dmFyIG89SHIoZSwoZnVuY3Rpb24oZSxuLG8pe3ZhciBhPWp0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiB0KGUpfSkpO3JldHVybntjcml0ZXJpYTphLGluZGV4Oisrcix2YWx1ZTplfX0pKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmxlbmd0aDtmb3IoZS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPS0xLG89ZS5jcml0ZXJpYSxhPXQuY3JpdGVyaWEsaT1vLmxlbmd0aCxsPW4ubGVuZ3RoOysrcjxpOyl7dmFyIHM9a28ob1tyXSxhW3JdKTtpZihzKXJldHVybiByPj1sP3M6cyooXCJkZXNjXCI9PW5bcl0/LTE6MSl9cmV0dXJuIGUuaW5kZXgtdC5pbmRleH0oZSx0LG4pfSkpO3ItLTspZVtyXT1lW3JdLnZhbHVlO3JldHVybiBlfShvKX1mdW5jdGlvbiAkcihlLHQsbil7Zm9yKHZhciByPS0xLG89dC5sZW5ndGgsYT17fTsrK3I8bzspe3ZhciBpPXRbcl0sbD1icihlLGkpO24obCxpKSYmcXIoYSx2byhpLGUpLGwpfXJldHVybiBhfWZ1bmN0aW9uIE5yKGUsdCxuLHIpe3ZhciBvPXI/WnQ6QnQsYT0tMSxpPXQubGVuZ3RoLGw9ZTtmb3IoZT09PXQmJih0PU1vKHQpKSxuJiYobD1qdChlLHF0KG4pKSk7KythPGk7KWZvcih2YXIgcz0wLGM9dFthXSx1PW4/bihjKTpjOyhzPW8obCx1LHMscikpPi0xOylsIT09ZSYmR2UuY2FsbChsLHMsMSksR2UuY2FsbChlLHMsMSk7cmV0dXJuIGV9ZnVuY3Rpb24gRnIoZSx0KXtmb3IodmFyIG49ZT90Lmxlbmd0aDowLHI9bi0xO24tLTspe3ZhciBvPXRbbl07aWYobj09cnx8byE9PWEpe3ZhciBhPW87Z2Eobyk/R2UuY2FsbChlLG8sMSk6bG8oZSxvKX19cmV0dXJuIGV9ZnVuY3Rpb24gV3IoZSx0KXtyZXR1cm4gZStmdCh3bigpKih0LWUrMSkpfWZ1bmN0aW9uIFVyKGUsdCl7dmFyIG49XCJcIjtpZighZXx8dDwxfHx0PmQpcmV0dXJuIG47ZG97dCUyJiYobis9ZSksKHQ9ZnQodC8yKSkmJihlKz1lKX13aGlsZSh0KTtyZXR1cm4gbn1mdW5jdGlvbiB6cihlLHQpe3JldHVybiBfYShrYShlLHQsdHMpLGUrXCJcIil9ZnVuY3Rpb24gR3IoZSl7cmV0dXJuIEtuKERsKGUpKX1mdW5jdGlvbiBLcihlLHQpe3ZhciBuPURsKGUpO3JldHVybiBqYShuLG9yKHQsMCxuLmxlbmd0aCkpfWZ1bmN0aW9uIHFyKGUsdCxuLHIpe2lmKCFYaShlKSlyZXR1cm4gZTtmb3IodmFyIGE9LTEsaT0odD12byh0LGUpKS5sZW5ndGgsbD1pLTEscz1lO251bGwhPXMmJisrYTxpOyl7dmFyIGM9SGEodFthXSksdT1uO2lmKFwiX19wcm90b19fXCI9PT1jfHxcImNvbnN0cnVjdG9yXCI9PT1jfHxcInByb3RvdHlwZVwiPT09YylyZXR1cm4gZTtpZihhIT1sKXt2YXIgZD1zW2NdOyh1PXI/cihkLGMscyk6byk9PT1vJiYodT1YaShkKT9kOmdhKHRbYSsxXSk/W106e30pfVhuKHMsYyx1KSxzPXNbY119cmV0dXJuIGV9dmFyIFlyPUxuP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIExuLnNldChlLHQpLGV9OnRzLEpyPWV0P2Z1bmN0aW9uKGUsdCl7cmV0dXJuIGV0KGUsXCJ0b1N0cmluZ1wiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpYbCh0KSx3cml0YWJsZTohMH0pfTp0cztmdW5jdGlvbiBYcihlKXtyZXR1cm4gamEoRGwoZSkpfWZ1bmN0aW9uIFFyKGUsdCxuKXt2YXIgbz0tMSxhPWUubGVuZ3RoO3Q8MCYmKHQ9LXQ+YT8wOmErdCksKG49bj5hP2E6bik8MCYmKG4rPWEpLGE9dD5uPzA6bi10Pj4+MCx0Pj4+PTA7Zm9yKHZhciBpPXIoYSk7KytvPGE7KWlbb109ZVtvK3RdO3JldHVybiBpfWZ1bmN0aW9uIGVvKGUsdCl7dmFyIG47cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUscixvKXtyZXR1cm4hKG49dChlLHIsbykpfSkpLCEhbn1mdW5jdGlvbiB0byhlLHQsbil7dmFyIHI9MCxvPW51bGw9PWU/cjplLmxlbmd0aDtpZihcIm51bWJlclwiPT10eXBlb2YgdCYmdD09dCYmbzw9MjE0NzQ4MzY0Nyl7Zm9yKDtyPG87KXt2YXIgYT1yK28+Pj4xLGk9ZVthXTtudWxsIT09aSYmIWlsKGkpJiYobj9pPD10Omk8dCk/cj1hKzE6bz1hfXJldHVybiBvfXJldHVybiBubyhlLHQsdHMsbil9ZnVuY3Rpb24gbm8oZSx0LG4scil7dmFyIGE9MCxpPW51bGw9PWU/MDplLmxlbmd0aDtpZigwPT09aSlyZXR1cm4gMDtmb3IodmFyIGw9KHQ9bih0KSkhPXQscz1udWxsPT09dCxjPWlsKHQpLHU9dD09PW87YTxpOyl7dmFyIGQ9ZnQoKGEraSkvMikscD1uKGVbZF0pLGY9cCE9PW8saD1udWxsPT09cCxnPXA9PXAsdj1pbChwKTtpZihsKXZhciBDPXJ8fGc7ZWxzZSBDPXU/ZyYmKHJ8fGYpOnM/ZyYmZiYmKHJ8fCFoKTpjP2cmJmYmJiFoJiYocnx8IXYpOiFoJiYhdiYmKHI/cDw9dDpwPHQpO0M/YT1kKzE6aT1kfXJldHVybiB2bihpLDQyOTQ5NjcyOTQpfWZ1bmN0aW9uIHJvKGUsdCl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGgsbz0wLGE9W107KytuPHI7KXt2YXIgaT1lW25dLGw9dD90KGkpOmk7aWYoIW58fCFEaShsLHMpKXt2YXIgcz1sO2FbbysrXT0wPT09aT8wOml9fXJldHVybiBhfWZ1bmN0aW9uIG9vKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlP2U6aWwoZSk/cDorZX1mdW5jdGlvbiBhbyhlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gZTtpZihOaShlKSlyZXR1cm4ganQoZSxhbykrXCJcIjtpZihpbChlKSlyZXR1cm4gQW4/QW4uY2FsbChlKTpcIlwiO3ZhciB0PWUrXCJcIjtyZXR1cm5cIjBcIj09dCYmMS9lPT0tMS8wP1wiLTBcIjp0fWZ1bmN0aW9uIGlvKGUsdCxuKXt2YXIgcj0tMSxvPVB0LGE9ZS5sZW5ndGgsaT0hMCxsPVtdLHM9bDtpZihuKWk9ITEsbz1FdDtlbHNlIGlmKGE+PTIwMCl7dmFyIGM9dD9udWxsOnpvKGUpO2lmKGMpcmV0dXJuIHNuKGMpO2k9ITEsbz1KdCxzPW5ldyBVbn1lbHNlIHM9dD9bXTpsO2U6Zm9yKDsrK3I8YTspe3ZhciB1PWVbcl0sZD10P3QodSk6dTtpZih1PW58fDAhPT11P3U6MCxpJiZkPT1kKXtmb3IodmFyIHA9cy5sZW5ndGg7cC0tOylpZihzW3BdPT09ZCljb250aW51ZSBlO3QmJnMucHVzaChkKSxsLnB1c2godSl9ZWxzZSBvKHMsZCxuKXx8KHMhPT1sJiZzLnB1c2goZCksbC5wdXNoKHUpKX1yZXR1cm4gbH1mdW5jdGlvbiBsbyhlLHQpe3JldHVybiBudWxsPT0oZT1TYShlLHQ9dm8odCxlKSkpfHxkZWxldGUgZVtIYShLYSh0KSldfWZ1bmN0aW9uIHNvKGUsdCxuLHIpe3JldHVybiBxcihlLHQsbihicihlLHQpKSxyKX1mdW5jdGlvbiBjbyhlLHQsbixyKXtmb3IodmFyIG89ZS5sZW5ndGgsYT1yP286LTE7KHI/YS0tOisrYTxvKSYmdChlW2FdLGEsZSk7KTtyZXR1cm4gbj9RcihlLHI/MDphLHI/YSsxOm8pOlFyKGUscj9hKzE6MCxyP286YSl9ZnVuY3Rpb24gdW8oZSx0KXt2YXIgbj1lO3JldHVybiBuIGluc3RhbmNlb2YgJG4mJihuPW4udmFsdWUoKSksSXQodCwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5mdW5jLmFwcGx5KHQudGhpc0FyZyxSdChbZV0sdC5hcmdzKSl9KSxuKX1mdW5jdGlvbiBwbyhlLHQsbil7dmFyIG89ZS5sZW5ndGg7aWYobzwyKXJldHVybiBvP2lvKGVbMF0pOltdO2Zvcih2YXIgYT0tMSxpPXIobyk7KythPG87KWZvcih2YXIgbD1lW2FdLHM9LTE7KytzPG87KXMhPWEmJihpW2FdPXNyKGlbYV18fGwsZVtzXSx0LG4pKTtyZXR1cm4gaW8oaHIoaSwxKSx0LG4pfWZ1bmN0aW9uIGZvKGUsdCxuKXtmb3IodmFyIHI9LTEsYT1lLmxlbmd0aCxpPXQubGVuZ3RoLGw9e307KytyPGE7KXt2YXIgcz1yPGk/dFtyXTpvO24obCxlW3JdLHMpfXJldHVybiBsfWZ1bmN0aW9uIGhvKGUpe3JldHVybiBVaShlKT9lOltdfWZ1bmN0aW9uIGdvKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTp0c31mdW5jdGlvbiB2byhlLHQpe3JldHVybiBOaShlKT9lOkNhKGUsdCk/W2VdOlZhKHZsKGUpKX12YXIgQ289enI7ZnVuY3Rpb24gbW8oZSx0LG4pe3ZhciByPWUubGVuZ3RoO3JldHVybiBuPW49PT1vP3I6biwhdCYmbj49cj9lOlFyKGUsdCxuKX12YXIgd289aXR8fGZ1bmN0aW9uKGUpe3JldHVybiBkdC5jbGVhclRpbWVvdXQoZSl9O2Z1bmN0aW9uIGJvKGUsdCl7aWYodClyZXR1cm4gZS5zbGljZSgpO3ZhciBuPWUubGVuZ3RoLHI9RmU/RmUobik6bmV3IGUuY29uc3RydWN0b3Iobik7cmV0dXJuIGUuY29weShyKSxyfWZ1bmN0aW9uIHlvKGUpe3ZhciB0PW5ldyBlLmNvbnN0cnVjdG9yKGUuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBOZSh0KS5zZXQobmV3IE5lKGUpKSx0fWZ1bmN0aW9uIHhvKGUsdCl7dmFyIG49dD95byhlLmJ1ZmZlcik6ZS5idWZmZXI7cmV0dXJuIG5ldyBlLmNvbnN0cnVjdG9yKG4sZS5ieXRlT2Zmc2V0LGUubGVuZ3RoKX1mdW5jdGlvbiBrbyhlLHQpe2lmKGUhPT10KXt2YXIgbj1lIT09byxyPW51bGw9PT1lLGE9ZT09ZSxpPWlsKGUpLGw9dCE9PW8scz1udWxsPT09dCxjPXQ9PXQsdT1pbCh0KTtpZighcyYmIXUmJiFpJiZlPnR8fGkmJmwmJmMmJiFzJiYhdXx8ciYmbCYmY3x8IW4mJmN8fCFhKXJldHVybiAxO2lmKCFyJiYhaSYmIXUmJmU8dHx8dSYmbiYmYSYmIXImJiFpfHxzJiZuJiZhfHwhbCYmYXx8IWMpcmV0dXJuLTF9cmV0dXJuIDB9ZnVuY3Rpb24gU28oZSx0LG4sbyl7Zm9yKHZhciBhPS0xLGk9ZS5sZW5ndGgsbD1uLmxlbmd0aCxzPS0xLGM9dC5sZW5ndGgsdT1nbihpLWwsMCksZD1yKGMrdSkscD0hbzsrK3M8YzspZFtzXT10W3NdO2Zvcig7KythPGw7KShwfHxhPGkpJiYoZFtuW2FdXT1lW2FdKTtmb3IoO3UtLTspZFtzKytdPWVbYSsrXTtyZXR1cm4gZH1mdW5jdGlvbiBPbyhlLHQsbixvKXtmb3IodmFyIGE9LTEsaT1lLmxlbmd0aCxsPS0xLHM9bi5sZW5ndGgsYz0tMSx1PXQubGVuZ3RoLGQ9Z24oaS1zLDApLHA9cihkK3UpLGY9IW87KythPGQ7KXBbYV09ZVthXTtmb3IodmFyIGg9YTsrK2M8dTspcFtoK2NdPXRbY107Zm9yKDsrK2w8czspKGZ8fGE8aSkmJihwW2grbltsXV09ZVthKytdKTtyZXR1cm4gcH1mdW5jdGlvbiBNbyhlLHQpe3ZhciBuPS0xLG89ZS5sZW5ndGg7Zm9yKHR8fCh0PXIobykpOysrbjxvOyl0W25dPWVbbl07cmV0dXJuIHR9ZnVuY3Rpb24gTG8oZSx0LG4scil7dmFyIGE9IW47bnx8KG49e30pO2Zvcih2YXIgaT0tMSxsPXQubGVuZ3RoOysraTxsOyl7dmFyIHM9dFtpXSxjPXI/cihuW3NdLGVbc10scyxuLGUpOm87Yz09PW8mJihjPWVbc10pLGE/bnIobixzLGMpOlhuKG4scyxjKX1yZXR1cm4gbn1mdW5jdGlvbiBfbyhlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBvPU5pKG4pP1N0OmVyLGE9dD90KCk6e307cmV0dXJuIG8obixlLGFhKHIsMiksYSl9fWZ1bmN0aW9uIFBvKGUpe3JldHVybiB6cigoZnVuY3Rpb24odCxuKXt2YXIgcj0tMSxhPW4ubGVuZ3RoLGk9YT4xP25bYS0xXTpvLGw9YT4yP25bMl06bztmb3IoaT1lLmxlbmd0aD4zJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBpPyhhLS0saSk6byxsJiZ2YShuWzBdLG5bMV0sbCkmJihpPWE8Mz9vOmksYT0xKSx0PVNlKHQpOysrcjxhOyl7dmFyIHM9bltyXTtzJiZlKHQscyxyLGkpfXJldHVybiB0fSkpfWZ1bmN0aW9uIEVvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7aWYobnVsbD09bilyZXR1cm4gbjtpZighV2kobikpcmV0dXJuIGUobixyKTtmb3IodmFyIG89bi5sZW5ndGgsYT10P286LTEsaT1TZShuKTsodD9hLS06KythPG8pJiYhMSE9PXIoaVthXSxhLGkpOyk7cmV0dXJuIG59fWZ1bmN0aW9uIGpvKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7Zm9yKHZhciBvPS0xLGE9U2UodCksaT1yKHQpLGw9aS5sZW5ndGg7bC0tOyl7dmFyIHM9aVtlP2w6KytvXTtpZighMT09PW4oYVtzXSxzLGEpKWJyZWFrfXJldHVybiB0fX1mdW5jdGlvbiBSbyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49cm4odD12bCh0KSk/dW4odCk6byxyPW4/blswXTp0LmNoYXJBdCgwKSxhPW4/bW8obiwxKS5qb2luKFwiXCIpOnQuc2xpY2UoMSk7cmV0dXJuIHJbZV0oKSthfX1mdW5jdGlvbiBJbyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEl0KHFsKCRsKHQpLnJlcGxhY2UoWWUsXCJcIikpLGUsXCJcIil9fWZ1bmN0aW9uIFZvKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cztzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IGU7Y2FzZSAxOnJldHVybiBuZXcgZSh0WzBdKTtjYXNlIDI6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSk7Y2FzZSA0OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdKTtjYXNlIDU6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSk7Y2FzZSA2OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSk7Y2FzZSA3OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSx0WzZdKX12YXIgbj1EbihlLnByb3RvdHlwZSkscj1lLmFwcGx5KG4sdCk7cmV0dXJuIFhpKHIpP3I6bn19ZnVuY3Rpb24gSG8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXt2YXIgYT1TZSh0KTtpZighV2kodCkpe3ZhciBpPWFhKG4sMyk7dD1QbCh0KSxuPWZ1bmN0aW9uKGUpe3JldHVybiBpKGFbZV0sZSxhKX19dmFyIGw9ZSh0LG4scik7cmV0dXJuIGw+LTE/YVtpP3RbbF06bF06b319ZnVuY3Rpb24gQW8oZSl7cmV0dXJuIFFvKChmdW5jdGlvbih0KXt2YXIgbj10Lmxlbmd0aCxyPW4saT1abi5wcm90b3R5cGUudGhydTtmb3IoZSYmdC5yZXZlcnNlKCk7ci0tOyl7dmFyIGw9dFtyXTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBsKXRocm93IG5ldyBMZShhKTtpZihpJiYhcyYmXCJ3cmFwcGVyXCI9PXJhKGwpKXZhciBzPW5ldyBabihbXSwhMCl9Zm9yKHI9cz9yOm47KytyPG47KXt2YXIgYz1yYShsPXRbcl0pLHU9XCJ3cmFwcGVyXCI9PWM/bmEobCk6bztzPXUmJm1hKHVbMF0pJiY0MjQ9PXVbMV0mJiF1WzRdLmxlbmd0aCYmMT09dVs5XT9zW3JhKHVbMF0pXS5hcHBseShzLHVbM10pOjE9PWwubGVuZ3RoJiZtYShsKT9zW2NdKCk6cy50aHJ1KGwpfXJldHVybiBmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cyxyPWVbMF07aWYocyYmMT09ZS5sZW5ndGgmJk5pKHIpKXJldHVybiBzLnBsYW50KHIpLnZhbHVlKCk7Zm9yKHZhciBvPTAsYT1uP3Rbb10uYXBwbHkodGhpcyxlKTpyOysrbzxuOylhPXRbb10uY2FsbCh0aGlzLGEpO3JldHVybiBhfX0pKX1mdW5jdGlvbiBUbyhlLHQsbixhLGksbCxzLHUsZCxwKXt2YXIgZj10JmMsaD0xJnQsZz0yJnQsdj0yNCZ0LEM9NTEyJnQsbT1nP286Vm8oZSk7cmV0dXJuIGZ1bmN0aW9uIGMoKXtmb3IodmFyIHc9YXJndW1lbnRzLmxlbmd0aCxiPXIodykseT13O3ktLTspYlt5XT1hcmd1bWVudHNbeV07aWYodil2YXIgeD1vYShjKSxrPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9MDtuLS07KWVbbl09PT10JiYrK3I7cmV0dXJuIHJ9KGIseCk7aWYoYSYmKGI9U28oYixhLGksdikpLGwmJihiPU9vKGIsbCxzLHYpKSx3LT1rLHYmJnc8cCl7dmFyIFM9bG4oYix4KTtyZXR1cm4gV28oZSx0LFRvLGMucGxhY2Vob2xkZXIsbixiLFMsdSxkLHAtdyl9dmFyIE89aD9uOnRoaXMsTT1nP09bZV06ZTtyZXR1cm4gdz1iLmxlbmd0aCx1P2I9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgscj12bih0Lmxlbmd0aCxuKSxhPU1vKGUpO3ItLTspe3ZhciBpPXRbcl07ZVtyXT1nYShpLG4pP2FbaV06b31yZXR1cm4gZX0oYix1KTpDJiZ3PjEmJmIucmV2ZXJzZSgpLGYmJmQ8dyYmKGIubGVuZ3RoPWQpLHRoaXMmJnRoaXMhPT1kdCYmdGhpcyBpbnN0YW5jZW9mIGMmJihNPW18fFZvKE0pKSxNLmFwcGx5KE8sYil9fWZ1bmN0aW9uIERvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBDcihlLChmdW5jdGlvbihlLG8sYSl7dChyLG4oZSksbyxhKX0pKSxyfShuLGUsdChyKSx7fSl9fWZ1bmN0aW9uIEJvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIGE7aWYobj09PW8mJnI9PT1vKXJldHVybiB0O2lmKG4hPT1vJiYoYT1uKSxyIT09byl7aWYoYT09PW8pcmV0dXJuIHI7XCJzdHJpbmdcIj09dHlwZW9mIG58fFwic3RyaW5nXCI9PXR5cGVvZiByPyhuPWFvKG4pLHI9YW8ocikpOihuPW9vKG4pLHI9b28ocikpLGE9ZShuLHIpfXJldHVybiBhfX1mdW5jdGlvbiBabyhlKXtyZXR1cm4gUW8oKGZ1bmN0aW9uKHQpe3JldHVybiB0PWp0KHQscXQoYWEoKSkpLHpyKChmdW5jdGlvbihuKXt2YXIgcj10aGlzO3JldHVybiBlKHQsKGZ1bmN0aW9uKGUpe3JldHVybiBrdChlLHIsbil9KSl9KSl9KSl9ZnVuY3Rpb24gJG8oZSx0KXt2YXIgbj0odD10PT09bz9cIiBcIjphbyh0KSkubGVuZ3RoO2lmKG48MilyZXR1cm4gbj9Vcih0LGUpOnQ7dmFyIHI9VXIodCxwdChlL2NuKHQpKSk7cmV0dXJuIHJuKHQpP21vKHVuKHIpLDAsZSkuam9pbihcIlwiKTpyLnNsaWNlKDAsZSl9ZnVuY3Rpb24gTm8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixhKXtyZXR1cm4gYSYmXCJudW1iZXJcIiE9dHlwZW9mIGEmJnZhKHQsbixhKSYmKG49YT1vKSx0PWRsKHQpLG49PT1vPyhuPXQsdD0wKTpuPWRsKG4pLGZ1bmN0aW9uKGUsdCxuLG8pe2Zvcih2YXIgYT0tMSxpPWduKHB0KCh0LWUpLyhufHwxKSksMCksbD1yKGkpO2ktLTspbFtvP2k6KythXT1lLGUrPW47cmV0dXJuIGx9KHQsbixhPWE9PT1vP3Q8bj8xOi0xOmRsKGEpLGUpfX1mdW5jdGlvbiBGbyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmXCJzdHJpbmdcIj09dHlwZW9mIG58fCh0PWhsKHQpLG49aGwobikpLGUodCxuKX19ZnVuY3Rpb24gV28oZSx0LG4scixhLGksbCxjLHUsZCl7dmFyIHA9OCZ0O3R8PXA/czo2NCw0Jih0Jj1+KHA/NjQ6cykpfHwodCY9LTQpO3ZhciBmPVtlLHQsYSxwP2k6byxwP2w6byxwP286aSxwP286bCxjLHUsZF0saD1uLmFwcGx5KG8sZik7cmV0dXJuIG1hKGUpJiZNYShoLGYpLGgucGxhY2Vob2xkZXI9cixQYShoLGUsdCl9ZnVuY3Rpb24gVW8oZSl7dmFyIHQ9a2VbZV07cmV0dXJuIGZ1bmN0aW9uKGUsbil7aWYoZT1obChlKSwobj1udWxsPT1uPzA6dm4ocGwobiksMjkyKSkmJkF0KGUpKXt2YXIgcj0odmwoZSkrXCJlXCIpLnNwbGl0KFwiZVwiKTtyZXR1cm4rKChyPSh2bCh0KHJbMF0rXCJlXCIrKCtyWzFdK24pKSkrXCJlXCIpLnNwbGl0KFwiZVwiKSlbMF0rXCJlXCIrKCtyWzFdLW4pKX1yZXR1cm4gdChlKX19dmFyIHpvPVNuJiYxL3NuKG5ldyBTbihbLC0wXSkpWzFdPT11P2Z1bmN0aW9uKGUpe3JldHVybiBuZXcgU24oZSl9OmlzO2Z1bmN0aW9uIEdvKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1kYSh0KTtyZXR1cm4gbj09eD9vbih0KTpuPT1MP2Z1bmN0aW9uKGUpe3ZhciB0PS0xLG49QXJyYXkoZS5zaXplKTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXtuWysrdF09W2UsZV19KSksbn0odCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4ganQodCwoZnVuY3Rpb24odCl7cmV0dXJuW3QsZVt0XV19KSl9KHQsZSh0KSl9fWZ1bmN0aW9uIEtvKGUsdCxuLGksdSxkLHAsZil7dmFyIGg9MiZ0O2lmKCFoJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBMZShhKTt2YXIgZz1pP2kubGVuZ3RoOjA7aWYoZ3x8KHQmPS05NyxpPXU9bykscD1wPT09bz9wOmduKHBsKHApLDApLGY9Zj09PW8/ZjpwbChmKSxnLT11P3UubGVuZ3RoOjAsNjQmdCl7dmFyIHY9aSxDPXU7aT11PW99dmFyIG09aD9vOm5hKGUpLHc9W2UsdCxuLGksdSx2LEMsZCxwLGZdO2lmKG0mJmZ1bmN0aW9uKGUsdCl7dmFyIG49ZVsxXSxyPXRbMV0sbz1ufHIsYT1vPDEzMSxpPXI9PWMmJjg9PW58fHI9PWMmJjI1Nj09biYmZVs3XS5sZW5ndGg8PXRbOF18fDM4ND09ciYmdFs3XS5sZW5ndGg8PXRbOF0mJjg9PW47aWYoIWEmJiFpKXJldHVybiBlOzEmciYmKGVbMl09dFsyXSxvfD0xJm4/MDo0KTt2YXIgcz10WzNdO2lmKHMpe3ZhciB1PWVbM107ZVszXT11P1NvKHUscyx0WzRdKTpzLGVbNF09dT9sbihlWzNdLGwpOnRbNF19KHM9dFs1XSkmJih1PWVbNV0sZVs1XT11P09vKHUscyx0WzZdKTpzLGVbNl09dT9sbihlWzVdLGwpOnRbNl0pLChzPXRbN10pJiYoZVs3XT1zKSxyJmMmJihlWzhdPW51bGw9PWVbOF0/dFs4XTp2bihlWzhdLHRbOF0pKSxudWxsPT1lWzldJiYoZVs5XT10WzldKSxlWzBdPXRbMF0sZVsxXT1vfSh3LG0pLGU9d1swXSx0PXdbMV0sbj13WzJdLGk9d1szXSx1PXdbNF0sIShmPXdbOV09d1s5XT09PW8/aD8wOmUubGVuZ3RoOmduKHdbOV0tZywwKSkmJjI0JnQmJih0Jj0tMjUpLHQmJjEhPXQpYj04PT10fHwxNj09dD9mdW5jdGlvbihlLHQsbil7dmFyIGE9Vm8oZSk7cmV0dXJuIGZ1bmN0aW9uIGkoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxzPXIobCksYz1sLHU9b2EoaSk7Yy0tOylzW2NdPWFyZ3VtZW50c1tjXTt2YXIgZD1sPDMmJnNbMF0hPT11JiZzW2wtMV0hPT11P1tdOmxuKHMsdSk7cmV0dXJuKGwtPWQubGVuZ3RoKTxuP1dvKGUsdCxUbyxpLnBsYWNlaG9sZGVyLG8scyxkLG8sbyxuLWwpOmt0KHRoaXMmJnRoaXMhPT1kdCYmdGhpcyBpbnN0YW5jZW9mIGk/YTplLHRoaXMscyl9fShlLHQsZik6dCE9cyYmMzMhPXR8fHUubGVuZ3RoP1RvLmFwcGx5KG8sdyk6ZnVuY3Rpb24oZSx0LG4sbyl7dmFyIGE9MSZ0LGk9Vm8oZSk7cmV0dXJuIGZ1bmN0aW9uIHQoKXtmb3IodmFyIGw9LTEscz1hcmd1bWVudHMubGVuZ3RoLGM9LTEsdT1vLmxlbmd0aCxkPXIodStzKSxwPXRoaXMmJnRoaXMhPT1kdCYmdGhpcyBpbnN0YW5jZW9mIHQ/aTplOysrYzx1OylkW2NdPW9bY107Zm9yKDtzLS07KWRbYysrXT1hcmd1bWVudHNbKytsXTtyZXR1cm4ga3QocCxhP246dGhpcyxkKX19KGUsdCxuLGkpO2Vsc2UgdmFyIGI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPTEmdCxvPVZvKGUpO3JldHVybiBmdW5jdGlvbiB0KCl7cmV0dXJuKHRoaXMmJnRoaXMhPT1kdCYmdGhpcyBpbnN0YW5jZW9mIHQ/bzplKS5hcHBseShyP246dGhpcyxhcmd1bWVudHMpfX0oZSx0LG4pO3JldHVybiBQYSgobT9ZcjpNYSkoYix3KSxlLHQpfWZ1bmN0aW9uIHFvKGUsdCxuLHIpe3JldHVybiBlPT09b3x8RGkoZSxFZVtuXSkmJiFJZS5jYWxsKHIsbik/dDplfWZ1bmN0aW9uIFlvKGUsdCxuLHIsYSxpKXtyZXR1cm4gWGkoZSkmJlhpKHQpJiYoaS5zZXQodCxlKSxEcihlLHQsbyxZbyxpKSxpLmRlbGV0ZSh0KSksZX1mdW5jdGlvbiBKbyhlKXtyZXR1cm4gbmwoZSk/bzplfWZ1bmN0aW9uIFhvKGUsdCxuLHIsYSxpKXt2YXIgbD0xJm4scz1lLmxlbmd0aCxjPXQubGVuZ3RoO2lmKHMhPWMmJiEobCYmYz5zKSlyZXR1cm4hMTt2YXIgdT1pLmdldChlKSxkPWkuZ2V0KHQpO2lmKHUmJmQpcmV0dXJuIHU9PXQmJmQ9PWU7dmFyIHA9LTEsZj0hMCxoPTImbj9uZXcgVW46bztmb3IoaS5zZXQoZSx0KSxpLnNldCh0LGUpOysrcDxzOyl7dmFyIGc9ZVtwXSx2PXRbcF07aWYocil2YXIgQz1sP3IodixnLHAsdCxlLGkpOnIoZyx2LHAsZSx0LGkpO2lmKEMhPT1vKXtpZihDKWNvbnRpbnVlO2Y9ITE7YnJlYWt9aWYoaCl7aWYoIUh0KHQsKGZ1bmN0aW9uKGUsdCl7aWYoIUp0KGgsdCkmJihnPT09ZXx8YShnLGUsbixyLGkpKSlyZXR1cm4gaC5wdXNoKHQpfSkpKXtmPSExO2JyZWFrfX1lbHNlIGlmKGchPT12JiYhYShnLHYsbixyLGkpKXtmPSExO2JyZWFrfX1yZXR1cm4gaS5kZWxldGUoZSksaS5kZWxldGUodCksZn1mdW5jdGlvbiBRbyhlKXtyZXR1cm4gX2Eoa2EoZSxvLEZhKSxlK1wiXCIpfWZ1bmN0aW9uIGVhKGUpe3JldHVybiB5cihlLFBsLGNhKX1mdW5jdGlvbiB0YShlKXtyZXR1cm4geXIoZSxFbCx1YSl9dmFyIG5hPUxuP2Z1bmN0aW9uKGUpe3JldHVybiBMbi5nZXQoZSl9OmlzO2Z1bmN0aW9uIHJhKGUpe2Zvcih2YXIgdD1lLm5hbWUrXCJcIixuPV9uW3RdLHI9SWUuY2FsbChfbix0KT9uLmxlbmd0aDowO3ItLTspe3ZhciBvPW5bcl0sYT1vLmZ1bmM7aWYobnVsbD09YXx8YT09ZSlyZXR1cm4gby5uYW1lfXJldHVybiB0fWZ1bmN0aW9uIG9hKGUpe3JldHVybihJZS5jYWxsKFRuLFwicGxhY2Vob2xkZXJcIik/VG46ZSkucGxhY2Vob2xkZXJ9ZnVuY3Rpb24gYWEoKXt2YXIgZT1Ubi5pdGVyYXRlZXx8bnM7cmV0dXJuIGU9ZT09PW5zP1JyOmUsYXJndW1lbnRzLmxlbmd0aD9lKGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pOmV9ZnVuY3Rpb24gaWEoZSx0KXt2YXIgbixyLG89ZS5fX2RhdGFfXztyZXR1cm4oXCJzdHJpbmdcIj09KHI9dHlwZW9mKG49dCkpfHxcIm51bWJlclwiPT1yfHxcInN5bWJvbFwiPT1yfHxcImJvb2xlYW5cIj09cj9cIl9fcHJvdG9fX1wiIT09bjpudWxsPT09bik/b1tcInN0cmluZ1wiPT10eXBlb2YgdD9cInN0cmluZ1wiOlwiaGFzaFwiXTpvLm1hcH1mdW5jdGlvbiBsYShlKXtmb3IodmFyIHQ9UGwoZSksbj10Lmxlbmd0aDtuLS07KXt2YXIgcj10W25dLG89ZVtyXTt0W25dPVtyLG8seWEobyldfXJldHVybiB0fWZ1bmN0aW9uIHNhKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT9vOmVbdF19KGUsdCk7cmV0dXJuIGpyKG4pP246b312YXIgY2E9Z3Q/ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/W106KGU9U2UoZSksX3QoZ3QoZSksKGZ1bmN0aW9uKHQpe3JldHVybiB6ZS5jYWxsKGUsdCl9KSkpfTpmcyx1YT1ndD9mdW5jdGlvbihlKXtmb3IodmFyIHQ9W107ZTspUnQodCxjYShlKSksZT1XZShlKTtyZXR1cm4gdH06ZnMsZGE9eHI7ZnVuY3Rpb24gcGEoZSx0LG4pe2Zvcih2YXIgcj0tMSxvPSh0PXZvKHQsZSkpLmxlbmd0aCxhPSExOysrcjxvOyl7dmFyIGk9SGEodFtyXSk7aWYoIShhPW51bGwhPWUmJm4oZSxpKSkpYnJlYWs7ZT1lW2ldfXJldHVybiBhfHwrK3IhPW8/YTohIShvPW51bGw9PWU/MDplLmxlbmd0aCkmJkppKG8pJiZnYShpLG8pJiYoTmkoZSl8fCRpKGUpKX1mdW5jdGlvbiBmYShlKXtyZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiBlLmNvbnN0cnVjdG9yfHxiYShlKT97fTpEbihXZShlKSl9ZnVuY3Rpb24gaGEoZSl7cmV0dXJuIE5pKGUpfHwkaShlKXx8ISEoS2UmJmUmJmVbS2VdKX1mdW5jdGlvbiBnYShlLHQpe3ZhciBuPXR5cGVvZiBlO3JldHVybiEhKHQ9bnVsbD09dD9kOnQpJiYoXCJudW1iZXJcIj09bnx8XCJzeW1ib2xcIiE9biYmQ2UudGVzdChlKSkmJmU+LTEmJmUlMT09MCYmZTx0fWZ1bmN0aW9uIHZhKGUsdCxuKXtpZighWGkobikpcmV0dXJuITE7dmFyIHI9dHlwZW9mIHQ7cmV0dXJuISEoXCJudW1iZXJcIj09cj9XaShuKSYmZ2EodCxuLmxlbmd0aCk6XCJzdHJpbmdcIj09ciYmdCBpbiBuKSYmRGkoblt0XSxlKX1mdW5jdGlvbiBDYShlLHQpe2lmKE5pKGUpKXJldHVybiExO3ZhciBuPXR5cGVvZiBlO3JldHVybiEoXCJudW1iZXJcIiE9biYmXCJzeW1ib2xcIiE9biYmXCJib29sZWFuXCIhPW4mJm51bGwhPWUmJiFpbChlKSl8fFEudGVzdChlKXx8IVgudGVzdChlKXx8bnVsbCE9dCYmZSBpbiBTZSh0KX1mdW5jdGlvbiBtYShlKXt2YXIgdD1yYShlKSxuPVRuW3RdO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIG58fCEodCBpbiAkbi5wcm90b3R5cGUpKXJldHVybiExO2lmKGU9PT1uKXJldHVybiEwO3ZhciByPW5hKG4pO3JldHVybiEhciYmZT09PXJbMF19KHluJiZkYShuZXcgeW4obmV3IEFycmF5QnVmZmVyKDEpKSkhPVJ8fHhuJiZkYShuZXcgeG4pIT14fHxrbiYmZGEoa24ucmVzb2x2ZSgpKSE9T3x8U24mJmRhKG5ldyBTbikhPUx8fE9uJiZkYShuZXcgT24pIT1FKSYmKGRhPWZ1bmN0aW9uKGUpe3ZhciB0PXhyKGUpLG49dD09Uz9lLmNvbnN0cnVjdG9yOm8scj1uP0FhKG4pOlwiXCI7aWYocilzd2l0Y2gocil7Y2FzZSBQbjpyZXR1cm4gUjtjYXNlIEVuOnJldHVybiB4O2Nhc2Ugam46cmV0dXJuIE87Y2FzZSBSbjpyZXR1cm4gTDtjYXNlIEluOnJldHVybiBFfXJldHVybiB0fSk7dmFyIHdhPWplP3FpOmhzO2Z1bmN0aW9uIGJhKGUpe3ZhciB0PWUmJmUuY29uc3RydWN0b3I7cmV0dXJuIGU9PT0oXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmdC5wcm90b3R5cGV8fEVlKX1mdW5jdGlvbiB5YShlKXtyZXR1cm4gZT09ZSYmIVhpKGUpfWZ1bmN0aW9uIHhhKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiZuW2VdPT09dCYmKHQhPT1vfHxlIGluIFNlKG4pKX19ZnVuY3Rpb24ga2EoZSx0LG4pe3JldHVybiB0PWduKHQ9PT1vP2UubGVuZ3RoLTE6dCwwKSxmdW5jdGlvbigpe2Zvcih2YXIgbz1hcmd1bWVudHMsYT0tMSxpPWduKG8ubGVuZ3RoLXQsMCksbD1yKGkpOysrYTxpOylsW2FdPW9bdCthXTthPS0xO2Zvcih2YXIgcz1yKHQrMSk7KythPHQ7KXNbYV09b1thXTtyZXR1cm4gc1t0XT1uKGwpLGt0KGUsdGhpcyxzKX19ZnVuY3Rpb24gU2EoZSx0KXtyZXR1cm4gdC5sZW5ndGg8Mj9lOmJyKGUsUXIodCwwLC0xKSl9ZnVuY3Rpb24gT2EoZSx0KXtpZigoXCJjb25zdHJ1Y3RvclwiIT09dHx8XCJmdW5jdGlvblwiIT10eXBlb2YgZVt0XSkmJlwiX19wcm90b19fXCIhPXQpcmV0dXJuIGVbdF19dmFyIE1hPUVhKFlyKSxMYT11dHx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZHQuc2V0VGltZW91dChlLHQpfSxfYT1FYShKcik7ZnVuY3Rpb24gUGEoZSx0LG4pe3ZhciByPXQrXCJcIjtyZXR1cm4gX2EoZSxmdW5jdGlvbihlLHQpe3ZhciBuPXQubGVuZ3RoO2lmKCFuKXJldHVybiBlO3ZhciByPW4tMTtyZXR1cm4gdFtyXT0obj4xP1wiJiBcIjpcIlwiKSt0W3JdLHQ9dC5qb2luKG4+Mj9cIiwgXCI6XCIgXCIpLGUucmVwbGFjZShhZSxcIntcXG4vKiBbd3JhcHBlZCB3aXRoIFwiK3QrXCJdICovXFxuXCIpfShyLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE90KGgsKGZ1bmN0aW9uKG4pe3ZhciByPVwiXy5cIituWzBdO3QmblsxXSYmIVB0KGUscikmJmUucHVzaChyKX0pKSxlLnNvcnQoKX0oZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaChpZSk7cmV0dXJuIHQ/dFsxXS5zcGxpdChsZSk6W119KHIpLG4pKSl9ZnVuY3Rpb24gRWEoZSl7dmFyIHQ9MCxuPTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9Q24oKSxhPTE2LShyLW4pO2lmKG49cixhPjApe2lmKCsrdD49ODAwKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB0PTA7cmV0dXJuIGUuYXBwbHkobyxhcmd1bWVudHMpfX1mdW5jdGlvbiBqYShlLHQpe3ZhciBuPS0xLHI9ZS5sZW5ndGgsYT1yLTE7Zm9yKHQ9dD09PW8/cjp0Oysrbjx0Oyl7dmFyIGk9V3IobixhKSxsPWVbaV07ZVtpXT1lW25dLGVbbl09bH1yZXR1cm4gZS5sZW5ndGg9dCxlfXZhciBSYSxJYSxWYT0oUmE9UmkoKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiA0Nj09PWUuY2hhckNvZGVBdCgwKSYmdC5wdXNoKFwiXCIpLGUucmVwbGFjZShlZSwoZnVuY3Rpb24oZSxuLHIsbyl7dC5wdXNoKHI/by5yZXBsYWNlKHVlLFwiJDFcIik6bnx8ZSl9KSksdH0pLChmdW5jdGlvbihlKXtyZXR1cm4gNTAwPT09SWEuc2l6ZSYmSWEuY2xlYXIoKSxlfSkpLElhPVJhLmNhY2hlLFJhKTtmdW5jdGlvbiBIYShlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZXx8aWwoZSkpcmV0dXJuIGU7dmFyIHQ9ZStcIlwiO3JldHVyblwiMFwiPT10JiYxL2U9PS0xLzA/XCItMFwiOnR9ZnVuY3Rpb24gQWEoZSl7aWYobnVsbCE9ZSl7dHJ5e3JldHVybiBSZS5jYWxsKGUpfWNhdGNoKGUpe310cnl7cmV0dXJuIGUrXCJcIn1jYXRjaChlKXt9fXJldHVyblwiXCJ9ZnVuY3Rpb24gVGEoZSl7aWYoZSBpbnN0YW5jZW9mICRuKXJldHVybiBlLmNsb25lKCk7dmFyIHQ9bmV3IFpuKGUuX193cmFwcGVkX18sZS5fX2NoYWluX18pO3JldHVybiB0Ll9fYWN0aW9uc19fPU1vKGUuX19hY3Rpb25zX18pLHQuX19pbmRleF9fPWUuX19pbmRleF9fLHQuX192YWx1ZXNfXz1lLl9fdmFsdWVzX18sdH12YXIgRGE9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFVpKGUpP3NyKGUsaHIodCwxLFVpLCEwKSk6W119KSksQmE9enIoKGZ1bmN0aW9uKGUsdCl7dmFyIG49S2EodCk7cmV0dXJuIFVpKG4pJiYobj1vKSxVaShlKT9zcihlLGhyKHQsMSxVaSwhMCksYWEobiwyKSk6W119KSksWmE9enIoKGZ1bmN0aW9uKGUsdCl7dmFyIG49S2EodCk7cmV0dXJuIFVpKG4pJiYobj1vKSxVaShlKT9zcihlLGhyKHQsMSxVaSwhMCksbyxuKTpbXX0pKTtmdW5jdGlvbiAkYShlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFyKXJldHVybi0xO3ZhciBvPW51bGw9PW4/MDpwbChuKTtyZXR1cm4gbzwwJiYobz1nbihyK28sMCkpLER0KGUsYWEodCwzKSxvKX1mdW5jdGlvbiBOYShlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFyKXJldHVybi0xO3ZhciBhPXItMTtyZXR1cm4gbiE9PW8mJihhPXBsKG4pLGE9bjwwP2duKHIrYSwwKTp2bihhLHItMSkpLER0KGUsYWEodCwzKSxhLCEwKX1mdW5jdGlvbiBGYShlKXtyZXR1cm4gbnVsbCE9ZSYmZS5sZW5ndGg/aHIoZSwxKTpbXX1mdW5jdGlvbiBXYShlKXtyZXR1cm4gZSYmZS5sZW5ndGg/ZVswXTpvfXZhciBVYT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9anQoZSxobyk7cmV0dXJuIHQubGVuZ3RoJiZ0WzBdPT09ZVswXT9Ncih0KTpbXX0pKSx6YT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9S2EoZSksbj1qdChlLGhvKTtyZXR1cm4gdD09PUthKG4pP3Q9bzpuLnBvcCgpLG4ubGVuZ3RoJiZuWzBdPT09ZVswXT9NcihuLGFhKHQsMikpOltdfSkpLEdhPXpyKChmdW5jdGlvbihlKXt2YXIgdD1LYShlKSxuPWp0KGUsaG8pO3JldHVybih0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvKSYmbi5wb3AoKSxuLmxlbmd0aCYmblswXT09PWVbMF0/TXIobixvLHQpOltdfSkpO2Z1bmN0aW9uIEthKGUpe3ZhciB0PW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gdD9lW3QtMV06b312YXIgcWE9enIoWWEpO2Z1bmN0aW9uIFlhKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoJiZ0JiZ0Lmxlbmd0aD9OcihlLHQpOmV9dmFyIEphPVFvKChmdW5jdGlvbihlLHQpe3ZhciBuPW51bGw9PWU/MDplLmxlbmd0aCxyPXJyKGUsdCk7cmV0dXJuIEZyKGUsanQodCwoZnVuY3Rpb24oZSl7cmV0dXJuIGdhKGUsbik/K2U6ZX0pKS5zb3J0KGtvKSkscn0pKTtmdW5jdGlvbiBYYShlKXtyZXR1cm4gbnVsbD09ZT9lOmJuLmNhbGwoZSl9dmFyIFFhPXpyKChmdW5jdGlvbihlKXtyZXR1cm4gaW8oaHIoZSwxLFVpLCEwKSl9KSksZWk9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PUthKGUpO3JldHVybiBVaSh0KSYmKHQ9byksaW8oaHIoZSwxLFVpLCEwKSxhYSh0LDIpKX0pKSx0aT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9S2EoZSk7cmV0dXJuIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8saW8oaHIoZSwxLFVpLCEwKSxvLHQpfSkpO2Z1bmN0aW9uIG5pKGUpe2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuW107dmFyIHQ9MDtyZXR1cm4gZT1fdChlLChmdW5jdGlvbihlKXtpZihVaShlKSlyZXR1cm4gdD1nbihlLmxlbmd0aCx0KSwhMH0pKSxHdCh0LChmdW5jdGlvbih0KXtyZXR1cm4ganQoZSxGdCh0KSl9KSl9ZnVuY3Rpb24gcmkoZSx0KXtpZighZXx8IWUubGVuZ3RoKXJldHVybltdO3ZhciBuPW5pKGUpO3JldHVybiBudWxsPT10P246anQobiwoZnVuY3Rpb24oZSl7cmV0dXJuIGt0KHQsbyxlKX0pKX12YXIgb2k9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFVpKGUpP3NyKGUsdCk6W119KSksYWk9enIoKGZ1bmN0aW9uKGUpe3JldHVybiBwbyhfdChlLFVpKSl9KSksaWk9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PUthKGUpO3JldHVybiBVaSh0KSYmKHQ9bykscG8oX3QoZSxVaSksYWEodCwyKSl9KSksbGk9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PUthKGUpO3JldHVybiB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvLHBvKF90KGUsVWkpLG8sdCl9KSksc2k9enIobmkpLGNpPXpyKChmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxuPXQ+MT9lW3QtMV06bztyZXR1cm4gbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuPyhlLnBvcCgpLG4pOm8scmkoZSxuKX0pKTtmdW5jdGlvbiB1aShlKXt2YXIgdD1UbihlKTtyZXR1cm4gdC5fX2NoYWluX189ITAsdH1mdW5jdGlvbiBkaShlLHQpe3JldHVybiB0KGUpfXZhciBwaT1RbygoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj10P2VbMF06MCxyPXRoaXMuX193cmFwcGVkX18sYT1mdW5jdGlvbih0KXtyZXR1cm4gcnIodCxlKX07cmV0dXJuISh0PjF8fHRoaXMuX19hY3Rpb25zX18ubGVuZ3RoKSYmciBpbnN0YW5jZW9mICRuJiZnYShuKT8oKHI9ci5zbGljZShuLCtuKyh0PzE6MCkpKS5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOmRpLGFyZ3M6W2FdLHRoaXNBcmc6b30pLG5ldyBabihyLHRoaXMuX19jaGFpbl9fKS50aHJ1KChmdW5jdGlvbihlKXtyZXR1cm4gdCYmIWUubGVuZ3RoJiZlLnB1c2gobyksZX0pKSk6dGhpcy50aHJ1KGEpfSkpLGZpPV9vKChmdW5jdGlvbihlLHQsbil7SWUuY2FsbChlLG4pPysrZVtuXTpucihlLG4sMSl9KSksaGk9SG8oJGEpLGdpPUhvKE5hKTtmdW5jdGlvbiB2aShlLHQpe3JldHVybihOaShlKT9PdDpjcikoZSxhYSh0LDMpKX1mdW5jdGlvbiBDaShlLHQpe3JldHVybihOaShlKT9NdDp1cikoZSxhYSh0LDMpKX12YXIgbWk9X28oKGZ1bmN0aW9uKGUsdCxuKXtJZS5jYWxsKGUsbik/ZVtuXS5wdXNoKHQpOm5yKGUsbixbdF0pfSkpLHdpPXpyKChmdW5jdGlvbihlLHQsbil7dmFyIG89LTEsYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LGk9V2koZSk/cihlLmxlbmd0aCk6W107cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUpe2lbKytvXT1hP2t0KHQsZSxuKTpMcihlLHQsbil9KSksaX0pKSxiaT1fbygoZnVuY3Rpb24oZSx0LG4pe25yKGUsbix0KX0pKTtmdW5jdGlvbiB5aShlLHQpe3JldHVybihOaShlKT9qdDpIcikoZSxhYSh0LDMpKX12YXIgeGk9X28oKGZ1bmN0aW9uKGUsdCxuKXtlW24/MDoxXS5wdXNoKHQpfSksKGZ1bmN0aW9uKCl7cmV0dXJuW1tdLFtdXX0pKSxraT16cigoZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybltdO3ZhciBuPXQubGVuZ3RoO3JldHVybiBuPjEmJnZhKGUsdFswXSx0WzFdKT90PVtdOm4+MiYmdmEodFswXSx0WzFdLHRbMl0pJiYodD1bdFswXV0pLFpyKGUsaHIodCwxKSxbXSl9KSksU2k9Y3R8fGZ1bmN0aW9uKCl7cmV0dXJuIGR0LkRhdGUubm93KCl9O2Z1bmN0aW9uIE9pKGUsdCxuKXtyZXR1cm4gdD1uP286dCx0PWUmJm51bGw9PXQ/ZS5sZW5ndGg6dCxLbyhlLGMsbyxvLG8sbyx0KX1mdW5jdGlvbiBNaShlLHQpe3ZhciBuO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IExlKGEpO3JldHVybiBlPXBsKGUpLGZ1bmN0aW9uKCl7cmV0dXJuLS1lPjAmJihuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxlPD0xJiYodD1vKSxufX12YXIgTGk9enIoKGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0xO2lmKG4ubGVuZ3RoKXt2YXIgbz1sbihuLG9hKExpKSk7cnw9c31yZXR1cm4gS28oZSxyLHQsbixvKX0pKSxfaT16cigoZnVuY3Rpb24oZSx0LG4pe3ZhciByPTM7aWYobi5sZW5ndGgpe3ZhciBvPWxuKG4sb2EoX2kpKTtyfD1zfXJldHVybiBLbyh0LHIsZSxuLG8pfSkpO2Z1bmN0aW9uIFBpKGUsdCxuKXt2YXIgcixpLGwscyxjLHUsZD0wLHA9ITEsZj0hMSxoPSEwO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IExlKGEpO2Z1bmN0aW9uIGcodCl7dmFyIG49cixhPWk7cmV0dXJuIHI9aT1vLGQ9dCxzPWUuYXBwbHkoYSxuKX1mdW5jdGlvbiB2KGUpe3ZhciBuPWUtdTtyZXR1cm4gdT09PW98fG4+PXR8fG48MHx8ZiYmZS1kPj1sfWZ1bmN0aW9uIEMoKXt2YXIgZT1TaSgpO2lmKHYoZSkpcmV0dXJuIG0oZSk7Yz1MYShDLGZ1bmN0aW9uKGUpe3ZhciBuPXQtKGUtdSk7cmV0dXJuIGY/dm4obixsLShlLWQpKTpufShlKSl9ZnVuY3Rpb24gbShlKXtyZXR1cm4gYz1vLGgmJnI/ZyhlKToocj1pPW8scyl9ZnVuY3Rpb24gdygpe3ZhciBlPVNpKCksbj12KGUpO2lmKHI9YXJndW1lbnRzLGk9dGhpcyx1PWUsbil7aWYoYz09PW8pcmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBkPWUsYz1MYShDLHQpLHA/ZyhlKTpzfSh1KTtpZihmKXJldHVybiB3byhjKSxjPUxhKEMsdCksZyh1KX1yZXR1cm4gYz09PW8mJihjPUxhKEMsdCkpLHN9cmV0dXJuIHQ9aGwodCl8fDAsWGkobikmJihwPSEhbi5sZWFkaW5nLGw9KGY9XCJtYXhXYWl0XCJpbiBuKT9nbihobChuLm1heFdhaXQpfHwwLHQpOmwsaD1cInRyYWlsaW5nXCJpbiBuPyEhbi50cmFpbGluZzpoKSx3LmNhbmNlbD1mdW5jdGlvbigpe2MhPT1vJiZ3byhjKSxkPTAscj11PWk9Yz1vfSx3LmZsdXNoPWZ1bmN0aW9uKCl7cmV0dXJuIGM9PT1vP3M6bShTaSgpKX0sd312YXIgRWk9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGxyKGUsMSx0KX0pKSxqaT16cigoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBscihlLGhsKHQpfHwwLG4pfSkpO2Z1bmN0aW9uIFJpKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZXx8bnVsbCE9dCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgTGUoYSk7dmFyIG49ZnVuY3Rpb24oKXt2YXIgcj1hcmd1bWVudHMsbz10P3QuYXBwbHkodGhpcyxyKTpyWzBdLGE9bi5jYWNoZTtpZihhLmhhcyhvKSlyZXR1cm4gYS5nZXQobyk7dmFyIGk9ZS5hcHBseSh0aGlzLHIpO3JldHVybiBuLmNhY2hlPWEuc2V0KG8saSl8fGEsaX07cmV0dXJuIG4uY2FjaGU9bmV3KFJpLkNhY2hlfHxXbiksbn1mdW5jdGlvbiBJaShlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBMZShhKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHM7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIWUuY2FsbCh0aGlzKTtjYXNlIDE6cmV0dXJuIWUuY2FsbCh0aGlzLHRbMF0pO2Nhc2UgMjpyZXR1cm4hZS5jYWxsKHRoaXMsdFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIWUuY2FsbCh0aGlzLHRbMF0sdFsxXSx0WzJdKX1yZXR1cm4hZS5hcHBseSh0aGlzLHQpfX1SaS5DYWNoZT1Xbjt2YXIgVmk9Q28oKGZ1bmN0aW9uKGUsdCl7dmFyIG49KHQ9MT09dC5sZW5ndGgmJk5pKHRbMF0pP2p0KHRbMF0scXQoYWEoKSkpOmp0KGhyKHQsMSkscXQoYWEoKSkpKS5sZW5ndGg7cmV0dXJuIHpyKChmdW5jdGlvbihyKXtmb3IodmFyIG89LTEsYT12bihyLmxlbmd0aCxuKTsrK288YTspcltvXT10W29dLmNhbGwodGhpcyxyW29dKTtyZXR1cm4ga3QoZSx0aGlzLHIpfSkpfSkpLEhpPXpyKChmdW5jdGlvbihlLHQpe3ZhciBuPWxuKHQsb2EoSGkpKTtyZXR1cm4gS28oZSxzLG8sdCxuKX0pKSxBaT16cigoZnVuY3Rpb24oZSx0KXt2YXIgbj1sbih0LG9hKEFpKSk7cmV0dXJuIEtvKGUsNjQsbyx0LG4pfSkpLFRpPVFvKChmdW5jdGlvbihlLHQpe3JldHVybiBLbyhlLDI1NixvLG8sbyx0KX0pKTtmdW5jdGlvbiBEaShlLHQpe3JldHVybiBlPT09dHx8ZSE9ZSYmdCE9dH12YXIgQmk9Rm8oa3IpLFppPUZvKChmdW5jdGlvbihlLHQpe3JldHVybiBlPj10fSkpLCRpPV9yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/X3I6ZnVuY3Rpb24oZSl7cmV0dXJuIFFpKGUpJiZJZS5jYWxsKGUsXCJjYWxsZWVcIikmJiF6ZS5jYWxsKGUsXCJjYWxsZWVcIil9LE5pPXIuaXNBcnJheSxGaT1DdD9xdChDdCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFpKGUpJiZ4cihlKT09an07ZnVuY3Rpb24gV2koZSl7cmV0dXJuIG51bGwhPWUmJkppKGUubGVuZ3RoKSYmIXFpKGUpfWZ1bmN0aW9uIFVpKGUpe3JldHVybiBRaShlKSYmV2koZSl9dmFyIHppPXZ0fHxocyxHaT1tdD9xdChtdCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFpKGUpJiZ4cihlKT09bX07ZnVuY3Rpb24gS2koZSl7aWYoIVFpKGUpKXJldHVybiExO3ZhciB0PXhyKGUpO3JldHVybiB0PT13fHxcIltvYmplY3QgRE9NRXhjZXB0aW9uXVwiPT10fHxcInN0cmluZ1wiPT10eXBlb2YgZS5tZXNzYWdlJiZcInN0cmluZ1wiPT10eXBlb2YgZS5uYW1lJiYhbmwoZSl9ZnVuY3Rpb24gcWkoZSl7aWYoIVhpKGUpKXJldHVybiExO3ZhciB0PXhyKGUpO3JldHVybiB0PT1ifHx0PT15fHxcIltvYmplY3QgQXN5bmNGdW5jdGlvbl1cIj09dHx8XCJbb2JqZWN0IFByb3h5XVwiPT10fWZ1bmN0aW9uIFlpKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPT1wbChlKX1mdW5jdGlvbiBKaShlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmZT4tMSYmZSUxPT0wJiZlPD1kfWZ1bmN0aW9uIFhpKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiBudWxsIT1lJiYoXCJvYmplY3RcIj09dHx8XCJmdW5jdGlvblwiPT10KX1mdW5jdGlvbiBRaShlKXtyZXR1cm4gbnVsbCE9ZSYmXCJvYmplY3RcIj09dHlwZW9mIGV9dmFyIGVsPXd0P3F0KHd0KTpmdW5jdGlvbihlKXtyZXR1cm4gUWkoZSkmJmRhKGUpPT14fTtmdW5jdGlvbiB0bChlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZXx8UWkoZSkmJnhyKGUpPT1rfWZ1bmN0aW9uIG5sKGUpe2lmKCFRaShlKXx8eHIoZSkhPVMpcmV0dXJuITE7dmFyIHQ9V2UoZSk7aWYobnVsbD09PXQpcmV0dXJuITA7dmFyIG49SWUuY2FsbCh0LFwiY29uc3RydWN0b3JcIikmJnQuY29uc3RydWN0b3I7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIG4mJlJlLmNhbGwobik9PVRlfXZhciBybD1idD9xdChidCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFpKGUpJiZ4cihlKT09TX0sb2w9eXQ/cXQoeXQpOmZ1bmN0aW9uKGUpe3JldHVybiBRaShlKSYmZGEoZSk9PUx9O2Z1bmN0aW9uIGFsKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfHwhTmkoZSkmJlFpKGUpJiZ4cihlKT09X31mdW5jdGlvbiBpbChlKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZXx8UWkoZSkmJnhyKGUpPT1QfXZhciBsbD14dD9xdCh4dCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFpKGUpJiZKaShlLmxlbmd0aCkmJiEhb3RbeHIoZSldfSxzbD1GbyhWciksY2w9Rm8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU8PXR9KSk7ZnVuY3Rpb24gdWwoZSl7aWYoIWUpcmV0dXJuW107aWYoV2koZSkpcmV0dXJuIGFsKGUpP3VuKGUpOk1vKGUpO2lmKHFlJiZlW3FlXSlyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49W107ISh0PWUubmV4dCgpKS5kb25lOyluLnB1c2godC52YWx1ZSk7cmV0dXJuIG59KGVbcWVdKCkpO3ZhciB0PWRhKGUpO3JldHVybih0PT14P29uOnQ9PUw/c246RGwpKGUpfWZ1bmN0aW9uIGRsKGUpe3JldHVybiBlPyhlPWhsKGUpKT09PXV8fGU9PT0tMS8wPzE3OTc2OTMxMzQ4NjIzMTU3ZTI5MiooZTwwPy0xOjEpOmU9PWU/ZTowOjA9PT1lP2U6MH1mdW5jdGlvbiBwbChlKXt2YXIgdD1kbChlKSxuPXQlMTtyZXR1cm4gdD09dD9uP3Qtbjp0OjB9ZnVuY3Rpb24gZmwoZSl7cmV0dXJuIGU/b3IocGwoZSksMCxmKTowfWZ1bmN0aW9uIGhsKGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiBlO2lmKGlsKGUpKXJldHVybiBwO2lmKFhpKGUpKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnZhbHVlT2Y/ZS52YWx1ZU9mKCk6ZTtlPVhpKHQpP3QrXCJcIjp0fWlmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybiAwPT09ZT9lOitlO2U9S3QoZSk7dmFyIG49aGUudGVzdChlKTtyZXR1cm4gbnx8dmUudGVzdChlKT9zdChlLnNsaWNlKDIpLG4/Mjo4KTpmZS50ZXN0KGUpP3A6K2V9ZnVuY3Rpb24gZ2woZSl7cmV0dXJuIExvKGUsRWwoZSkpfWZ1bmN0aW9uIHZsKGUpe3JldHVybiBudWxsPT1lP1wiXCI6YW8oZSl9dmFyIENsPVBvKChmdW5jdGlvbihlLHQpe2lmKGJhKHQpfHxXaSh0KSlMbyh0LFBsKHQpLGUpO2Vsc2UgZm9yKHZhciBuIGluIHQpSWUuY2FsbCh0LG4pJiZYbihlLG4sdFtuXSl9KSksbWw9UG8oKGZ1bmN0aW9uKGUsdCl7TG8odCxFbCh0KSxlKX0pKSx3bD1QbygoZnVuY3Rpb24oZSx0LG4scil7TG8odCxFbCh0KSxlLHIpfSkpLGJsPVBvKChmdW5jdGlvbihlLHQsbixyKXtMbyh0LFBsKHQpLGUscil9KSkseWw9UW8ocnIpLHhsPXpyKChmdW5jdGlvbihlLHQpe2U9U2UoZSk7dmFyIG49LTEscj10Lmxlbmd0aCxhPXI+Mj90WzJdOm87Zm9yKGEmJnZhKHRbMF0sdFsxXSxhKSYmKHI9MSk7KytuPHI7KWZvcih2YXIgaT10W25dLGw9RWwoaSkscz0tMSxjPWwubGVuZ3RoOysrczxjOyl7dmFyIHU9bFtzXSxkPWVbdV07KGQ9PT1vfHxEaShkLEVlW3VdKSYmIUllLmNhbGwoZSx1KSkmJihlW3VdPWlbdV0pfXJldHVybiBlfSkpLGtsPXpyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wdXNoKG8sWW8pLGt0KFJsLG8sZSl9KSk7ZnVuY3Rpb24gU2woZSx0LG4pe3ZhciByPW51bGw9PWU/bzpicihlLHQpO3JldHVybiByPT09bz9uOnJ9ZnVuY3Rpb24gT2woZSx0KXtyZXR1cm4gbnVsbCE9ZSYmcGEoZSx0LE9yKX12YXIgTWw9RG8oKGZ1bmN0aW9uKGUsdCxuKXtudWxsIT10JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LnRvU3RyaW5nJiYodD1BZS5jYWxsKHQpKSxlW3RdPW59KSxYbCh0cykpLExsPURvKChmdW5jdGlvbihlLHQsbil7bnVsbCE9dCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdC50b1N0cmluZyYmKHQ9QWUuY2FsbCh0KSksSWUuY2FsbChlLHQpP2VbdF0ucHVzaChuKTplW3RdPVtuXX0pLGFhKSxfbD16cihMcik7ZnVuY3Rpb24gUGwoZSl7cmV0dXJuIFdpKGUpP0duKGUpOklyKGUpfWZ1bmN0aW9uIEVsKGUpe3JldHVybiBXaShlKT9HbihlLCEwKTpmdW5jdGlvbihlKXtpZighWGkoZSkpcmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2lmKG51bGwhPWUpZm9yKHZhciBuIGluIFNlKGUpKXQucHVzaChuKTtyZXR1cm4gdH0oZSk7dmFyIHQ9YmEoZSksbj1bXTtmb3IodmFyIHIgaW4gZSkoXCJjb25zdHJ1Y3RvclwiIT1yfHwhdCYmSWUuY2FsbChlLHIpKSYmbi5wdXNoKHIpO3JldHVybiBufShlKX12YXIgamw9UG8oKGZ1bmN0aW9uKGUsdCxuKXtEcihlLHQsbil9KSksUmw9UG8oKGZ1bmN0aW9uKGUsdCxuLHIpe0RyKGUsdCxuLHIpfSkpLElsPVFvKChmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2lmKG51bGw9PWUpcmV0dXJuIG47dmFyIHI9ITE7dD1qdCh0LChmdW5jdGlvbih0KXtyZXR1cm4gdD12byh0LGUpLHJ8fChyPXQubGVuZ3RoPjEpLHR9KSksTG8oZSx0YShlKSxuKSxyJiYobj1hcihuLDcsSm8pKTtmb3IodmFyIG89dC5sZW5ndGg7by0tOylsbyhuLHRbb10pO3JldHVybiBufSkpLFZsPVFvKChmdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP3t9OmZ1bmN0aW9uKGUsdCl7cmV0dXJuICRyKGUsdCwoZnVuY3Rpb24odCxuKXtyZXR1cm4gT2woZSxuKX0pKX0oZSx0KX0pKTtmdW5jdGlvbiBIbChlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG49anQodGEoZSksKGZ1bmN0aW9uKGUpe3JldHVybltlXX0pKTtyZXR1cm4gdD1hYSh0KSwkcihlLG4sKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZSxuWzBdKX0pKX12YXIgQWw9R28oUGwpLFRsPUdvKEVsKTtmdW5jdGlvbiBEbChlKXtyZXR1cm4gbnVsbD09ZT9bXTpZdChlLFBsKGUpKX12YXIgQmw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD10LnRvTG93ZXJDYXNlKCksZSsobj9abCh0KTp0KX0pKTtmdW5jdGlvbiBabChlKXtyZXR1cm4gS2wodmwoZSkudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gJGwoZSl7cmV0dXJuKGU9dmwoZSkpJiZlLnJlcGxhY2UobWUsZW4pLnJlcGxhY2UoSmUsXCJcIil9dmFyIE5sPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKG4/XCItXCI6XCJcIikrdC50b0xvd2VyQ2FzZSgpfSkpLEZsPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKG4/XCIgXCI6XCJcIikrdC50b0xvd2VyQ2FzZSgpfSkpLFdsPVJvKFwidG9Mb3dlckNhc2VcIiksVWw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIl9cIjpcIlwiKSt0LnRvTG93ZXJDYXNlKCl9KSksemw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIiBcIjpcIlwiKStLbCh0KX0pKSxHbD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiIFwiOlwiXCIpK3QudG9VcHBlckNhc2UoKX0pKSxLbD1SbyhcInRvVXBwZXJDYXNlXCIpO2Z1bmN0aW9uIHFsKGUsdCxuKXtyZXR1cm4gZT12bChlKSwodD1uP286dCk9PT1vP2Z1bmN0aW9uKGUpe3JldHVybiB0dC50ZXN0KGUpfShlKT9mdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaChRZSl8fFtdfShlKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaChzZSl8fFtdfShlKTplLm1hdGNoKHQpfHxbXX12YXIgWWw9enIoKGZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBrdChlLG8sdCl9Y2F0Y2goZSl7cmV0dXJuIEtpKGUpP2U6bmV3IHllKGUpfX0pKSxKbD1RbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gT3QodCwoZnVuY3Rpb24odCl7dD1IYSh0KSxucihlLHQsTGkoZVt0XSxlKSl9KSksZX0pKTtmdW5jdGlvbiBYbChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFFsPUFvKCksZXM9QW8oITApO2Z1bmN0aW9uIHRzKGUpe3JldHVybiBlfWZ1bmN0aW9uIG5zKGUpe3JldHVybiBScihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6YXIoZSwxKSl9dmFyIHJzPXpyKChmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gTHIobixlLHQpfX0pKSxvcz16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIExyKGUsbix0KX19KSk7ZnVuY3Rpb24gYXMoZSx0LG4pe3ZhciByPVBsKHQpLG89d3IodCxyKTtudWxsIT1ufHxYaSh0KSYmKG8ubGVuZ3RofHwhci5sZW5ndGgpfHwobj10LHQ9ZSxlPXRoaXMsbz13cih0LFBsKHQpKSk7dmFyIGE9IShYaShuKSYmXCJjaGFpblwiaW4gbiYmIW4uY2hhaW4pLGk9cWkoZSk7cmV0dXJuIE90KG8sKGZ1bmN0aW9uKG4pe3ZhciByPXRbbl07ZVtuXT1yLGkmJihlLnByb3RvdHlwZVtuXT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX19jaGFpbl9fO2lmKGF8fHQpe3ZhciBuPWUodGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuKG4uX19hY3Rpb25zX189TW8odGhpcy5fX2FjdGlvbnNfXykpLnB1c2goe2Z1bmM6cixhcmdzOmFyZ3VtZW50cyx0aGlzQXJnOmV9KSxuLl9fY2hhaW5fXz10LG59cmV0dXJuIHIuYXBwbHkoZSxSdChbdGhpcy52YWx1ZSgpXSxhcmd1bWVudHMpKX0pfSkpLGV9ZnVuY3Rpb24gaXMoKXt9dmFyIGxzPVpvKGp0KSxzcz1abyhMdCksY3M9Wm8oSHQpO2Z1bmN0aW9uIHVzKGUpe3JldHVybiBDYShlKT9GdChIYShlKSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBicih0LGUpfX0oZSl9dmFyIGRzPU5vKCkscHM9Tm8oITApO2Z1bmN0aW9uIGZzKCl7cmV0dXJuW119ZnVuY3Rpb24gaHMoKXtyZXR1cm4hMX12YXIgZ3MsdnM9Qm8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0pLDApLENzPVVvKFwiY2VpbFwiKSxtcz1CbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS90fSksMSksd3M9VW8oXCJmbG9vclwiKSxicz1CbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSp0fSksMSkseXM9VW8oXCJyb3VuZFwiKSx4cz1CbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fSksMCk7cmV0dXJuIFRuLmFmdGVyPWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgTGUoYSk7cmV0dXJuIGU9cGwoZSksZnVuY3Rpb24oKXtpZigtLWU8MSlyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxUbi5hcnk9T2ksVG4uYXNzaWduPUNsLFRuLmFzc2lnbkluPW1sLFRuLmFzc2lnbkluV2l0aD13bCxUbi5hc3NpZ25XaXRoPWJsLFRuLmF0PXlsLFRuLmJlZm9yZT1NaSxUbi5iaW5kPUxpLFRuLmJpbmRBbGw9SmwsVG4uYmluZEtleT1faSxUbi5jYXN0QXJyYXk9ZnVuY3Rpb24oKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bXTt2YXIgZT1hcmd1bWVudHNbMF07cmV0dXJuIE5pKGUpP2U6W2VdfSxUbi5jaGFpbj11aSxUbi5jaHVuaz1mdW5jdGlvbihlLHQsbil7dD0obj92YShlLHQsbik6dD09PW8pPzE6Z24ocGwodCksMCk7dmFyIGE9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFhfHx0PDEpcmV0dXJuW107Zm9yKHZhciBpPTAsbD0wLHM9cihwdChhL3QpKTtpPGE7KXNbbCsrXT1RcihlLGksaSs9dCk7cmV0dXJuIHN9LFRuLmNvbXBhY3Q9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PS0xLG49bnVsbD09ZT8wOmUubGVuZ3RoLHI9MCxvPVtdOysrdDxuOyl7dmFyIGE9ZVt0XTthJiYob1tyKytdPWEpfXJldHVybiBvfSxUbi5jb25jYXQ9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoO2lmKCFlKXJldHVybltdO2Zvcih2YXIgdD1yKGUtMSksbj1hcmd1bWVudHNbMF0sbz1lO28tLTspdFtvLTFdPWFyZ3VtZW50c1tvXTtyZXR1cm4gUnQoTmkobik/TW8obik6W25dLGhyKHQsMSkpfSxUbi5jb25kPWZ1bmN0aW9uKGUpe3ZhciB0PW51bGw9PWU/MDplLmxlbmd0aCxuPWFhKCk7cmV0dXJuIGU9dD9qdChlLChmdW5jdGlvbihlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlWzFdKXRocm93IG5ldyBMZShhKTtyZXR1cm5bbihlWzBdKSxlWzFdXX0pKTpbXSx6cigoZnVuY3Rpb24obil7Zm9yKHZhciByPS0xOysrcjx0Oyl7dmFyIG89ZVtyXTtpZihrdChvWzBdLHRoaXMsbikpcmV0dXJuIGt0KG9bMV0sdGhpcyxuKX19KSl9LFRuLmNvbmZvcm1zPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1QbChlKTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGlyKG4sZSx0KX19KGFyKGUsMSkpfSxUbi5jb25zdGFudD1YbCxUbi5jb3VudEJ5PWZpLFRuLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPURuKGUpO3JldHVybiBudWxsPT10P246dHIobix0KX0sVG4uY3Vycnk9ZnVuY3Rpb24gZSh0LG4scil7dmFyIGE9S28odCw4LG8sbyxvLG8sbyxuPXI/bzpuKTtyZXR1cm4gYS5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyLGF9LFRuLmN1cnJ5UmlnaHQ9ZnVuY3Rpb24gZSh0LG4scil7dmFyIGE9S28odCwxNixvLG8sbyxvLG8sbj1yP286bik7cmV0dXJuIGEucGxhY2Vob2xkZXI9ZS5wbGFjZWhvbGRlcixhfSxUbi5kZWJvdW5jZT1QaSxUbi5kZWZhdWx0cz14bCxUbi5kZWZhdWx0c0RlZXA9a2wsVG4uZGVmZXI9RWksVG4uZGVsYXk9amksVG4uZGlmZmVyZW5jZT1EYSxUbi5kaWZmZXJlbmNlQnk9QmEsVG4uZGlmZmVyZW5jZVdpdGg9WmEsVG4uZHJvcD1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiByP1FyKGUsKHQ9bnx8dD09PW8/MTpwbCh0KSk8MD8wOnQscik6W119LFRuLmRyb3BSaWdodD1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiByP1FyKGUsMCwodD1yLSh0PW58fHQ9PT1vPzE6cGwodCkpKTwwPzA6dCk6W119LFRuLmRyb3BSaWdodFdoaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2NvKGUsYWEodCwzKSwhMCwhMCk6W119LFRuLmRyb3BXaGlsZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9jbyhlLGFhKHQsMyksITApOltdfSxUbi5maWxsPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBhPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gYT8obiYmXCJudW1iZXJcIiE9dHlwZW9mIG4mJnZhKGUsdCxuKSYmKG49MCxyPWEpLGZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBhPWUubGVuZ3RoO2Zvcigobj1wbChuKSk8MCYmKG49LW4+YT8wOmErbiksKHI9cj09PW98fHI+YT9hOnBsKHIpKTwwJiYocis9YSkscj1uPnI/MDpmbChyKTtuPHI7KWVbbisrXT10O3JldHVybiBlfShlLHQsbixyKSk6W119LFRuLmZpbHRlcj1mdW5jdGlvbihlLHQpe3JldHVybihOaShlKT9fdDpmcikoZSxhYSh0LDMpKX0sVG4uZmxhdE1hcD1mdW5jdGlvbihlLHQpe3JldHVybiBocih5aShlLHQpLDEpfSxUbi5mbGF0TWFwRGVlcD1mdW5jdGlvbihlLHQpe3JldHVybiBocih5aShlLHQpLHUpfSxUbi5mbGF0TWFwRGVwdGg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW49PT1vPzE6cGwobiksaHIoeWkoZSx0KSxuKX0sVG4uZmxhdHRlbj1GYSxUbi5mbGF0dGVuRGVlcD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZS5sZW5ndGg/aHIoZSx1KTpbXX0sVG4uZmxhdHRlbkRlcHRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGwhPWUmJmUubGVuZ3RoP2hyKGUsdD10PT09bz8xOnBsKHQpKTpbXX0sVG4uZmxpcD1mdW5jdGlvbihlKXtyZXR1cm4gS28oZSw1MTIpfSxUbi5mbG93PVFsLFRuLmZsb3dSaWdodD1lcyxUbi5mcm9tUGFpcnM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PS0xLG49bnVsbD09ZT8wOmUubGVuZ3RoLHI9e307Kyt0PG47KXt2YXIgbz1lW3RdO3Jbb1swXV09b1sxXX1yZXR1cm4gcn0sVG4uZnVuY3Rpb25zPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOndyKGUsUGwoZSkpfSxUbi5mdW5jdGlvbnNJbj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9bXTp3cihlLEVsKGUpKX0sVG4uZ3JvdXBCeT1taSxUbi5pbml0aWFsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlLmxlbmd0aD9RcihlLDAsLTEpOltdfSxUbi5pbnRlcnNlY3Rpb249VWEsVG4uaW50ZXJzZWN0aW9uQnk9emEsVG4uaW50ZXJzZWN0aW9uV2l0aD1HYSxUbi5pbnZlcnQ9TWwsVG4uaW52ZXJ0Qnk9TGwsVG4uaW52b2tlTWFwPXdpLFRuLml0ZXJhdGVlPW5zLFRuLmtleUJ5PWJpLFRuLmtleXM9UGwsVG4ua2V5c0luPUVsLFRuLm1hcD15aSxUbi5tYXBLZXlzPWZ1bmN0aW9uKGUsdCl7dmFyIG49e307cmV0dXJuIHQ9YWEodCwzKSxDcihlLChmdW5jdGlvbihlLHIsbyl7bnIobix0KGUscixvKSxlKX0pKSxufSxUbi5tYXBWYWx1ZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtyZXR1cm4gdD1hYSh0LDMpLENyKGUsKGZ1bmN0aW9uKGUscixvKXtucihuLHIsdChlLHIsbykpfSkpLG59LFRuLm1hdGNoZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIEFyKGFyKGUsMSkpfSxUbi5tYXRjaGVzUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVHIoZSxhcih0LDEpKX0sVG4ubWVtb2l6ZT1SaSxUbi5tZXJnZT1qbCxUbi5tZXJnZVdpdGg9UmwsVG4ubWV0aG9kPXJzLFRuLm1ldGhvZE9mPW9zLFRuLm1peGluPWFzLFRuLm5lZ2F0ZT1JaSxUbi5udGhBcmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9cGwoZSksenIoKGZ1bmN0aW9uKHQpe3JldHVybiBCcih0LGUpfSkpfSxUbi5vbWl0PUlsLFRuLm9taXRCeT1mdW5jdGlvbihlLHQpe3JldHVybiBIbChlLElpKGFhKHQpKSl9LFRuLm9uY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIE1pKDIsZSl9LFRuLm9yZGVyQnk9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG51bGw9PWU/W106KE5pKHQpfHwodD1udWxsPT10P1tdOlt0XSksTmkobj1yP286bil8fChuPW51bGw9PW4/W106W25dKSxacihlLHQsbikpfSxUbi5vdmVyPWxzLFRuLm92ZXJBcmdzPVZpLFRuLm92ZXJFdmVyeT1zcyxUbi5vdmVyU29tZT1jcyxUbi5wYXJ0aWFsPUhpLFRuLnBhcnRpYWxSaWdodD1BaSxUbi5wYXJ0aXRpb249eGksVG4ucGljaz1WbCxUbi5waWNrQnk9SGwsVG4ucHJvcGVydHk9dXMsVG4ucHJvcGVydHlPZj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PWU/bzpicihlLHQpfX0sVG4ucHVsbD1xYSxUbi5wdWxsQWxsPVlhLFRuLnB1bGxBbGxCeT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJmUubGVuZ3RoJiZ0JiZ0Lmxlbmd0aD9OcihlLHQsYWEobiwyKSk6ZX0sVG4ucHVsbEFsbFdpdGg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlJiZlLmxlbmd0aCYmdCYmdC5sZW5ndGg/TnIoZSx0LG8sbik6ZX0sVG4ucHVsbEF0PUphLFRuLnJhbmdlPWRzLFRuLnJhbmdlUmlnaHQ9cHMsVG4ucmVhcmc9VGksVG4ucmVqZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKE5pKGUpP190OmZyKShlLElpKGFhKHQsMykpKX0sVG4ucmVtb3ZlPWZ1bmN0aW9uKGUsdCl7dmFyIG49W107aWYoIWV8fCFlLmxlbmd0aClyZXR1cm4gbjt2YXIgcj0tMSxvPVtdLGE9ZS5sZW5ndGg7Zm9yKHQ9YWEodCwzKTsrK3I8YTspe3ZhciBpPWVbcl07dChpLHIsZSkmJihuLnB1c2goaSksby5wdXNoKHIpKX1yZXR1cm4gRnIoZSxvKSxufSxUbi5yZXN0PWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgTGUoYSk7cmV0dXJuIHpyKGUsdD10PT09bz90OnBsKHQpKX0sVG4ucmV2ZXJzZT1YYSxUbi5zYW1wbGVTaXplPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD0obj92YShlLHQsbik6dD09PW8pPzE6cGwodCksKE5pKGUpP3FuOktyKShlLHQpfSxUbi5zZXQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT1lP2U6cXIoZSx0LG4pfSxUbi5zZXRXaXRoPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiByPVwiZnVuY3Rpb25cIj09dHlwZW9mIHI/cjpvLG51bGw9PWU/ZTpxcihlLHQsbixyKX0sVG4uc2h1ZmZsZT1mdW5jdGlvbihlKXtyZXR1cm4oTmkoZSk/WW46WHIpKGUpfSxUbi5zbGljZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiByPyhuJiZcIm51bWJlclwiIT10eXBlb2YgbiYmdmEoZSx0LG4pPyh0PTAsbj1yKToodD1udWxsPT10PzA6cGwodCksbj1uPT09bz9yOnBsKG4pKSxRcihlLHQsbikpOltdfSxUbi5zb3J0Qnk9a2ksVG4uc29ydGVkVW5pcT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/cm8oZSk6W119LFRuLnNvcnRlZFVuaXFCeT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9ybyhlLGFhKHQsMikpOltdfSxUbi5zcGxpdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4mJlwibnVtYmVyXCIhPXR5cGVvZiBuJiZ2YShlLHQsbikmJih0PW49byksKG49bj09PW8/ZjpuPj4+MCk/KGU9dmwoZSkpJiYoXCJzdHJpbmdcIj09dHlwZW9mIHR8fG51bGwhPXQmJiFybCh0KSkmJiEodD1hbyh0KSkmJnJuKGUpP21vKHVuKGUpLDAsbik6ZS5zcGxpdCh0LG4pOltdfSxUbi5zcHJlYWQ9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBMZShhKTtyZXR1cm4gdD1udWxsPT10PzA6Z24ocGwodCksMCksenIoKGZ1bmN0aW9uKG4pe3ZhciByPW5bdF0sbz1tbyhuLDAsdCk7cmV0dXJuIHImJlJ0KG8sciksa3QoZSx0aGlzLG8pfSkpfSxUbi50YWlsPWZ1bmN0aW9uKGUpe3ZhciB0PW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gdD9RcihlLDEsdCk6W119LFRuLnRha2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlJiZlLmxlbmd0aD9RcihlLDAsKHQ9bnx8dD09PW8/MTpwbCh0KSk8MD8wOnQpOltdfSxUbi50YWtlUmlnaHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gcj9RcihlLCh0PXItKHQ9bnx8dD09PW8/MTpwbCh0KSkpPDA/MDp0LHIpOltdfSxUbi50YWtlUmlnaHRXaGlsZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9jbyhlLGFhKHQsMyksITEsITApOltdfSxUbi50YWtlV2hpbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/Y28oZSxhYSh0LDMpKTpbXX0sVG4udGFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQoZSksZX0sVG4udGhyb3R0bGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSEwLG89ITA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgTGUoYSk7cmV0dXJuIFhpKG4pJiYocj1cImxlYWRpbmdcImluIG4/ISFuLmxlYWRpbmc6cixvPVwidHJhaWxpbmdcImluIG4/ISFuLnRyYWlsaW5nOm8pLFBpKGUsdCx7bGVhZGluZzpyLG1heFdhaXQ6dCx0cmFpbGluZzpvfSl9LFRuLnRocnU9ZGksVG4udG9BcnJheT11bCxUbi50b1BhaXJzPUFsLFRuLnRvUGFpcnNJbj1UbCxUbi50b1BhdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIE5pKGUpP2p0KGUsSGEpOmlsKGUpP1tlXTpNbyhWYSh2bChlKSkpfSxUbi50b1BsYWluT2JqZWN0PWdsLFRuLnRyYW5zZm9ybT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmkoZSksbz1yfHx6aShlKXx8bGwoZSk7aWYodD1hYSh0LDQpLG51bGw9PW4pe3ZhciBhPWUmJmUuY29uc3RydWN0b3I7bj1vP3I/bmV3IGE6W106WGkoZSkmJnFpKGEpP0RuKFdlKGUpKTp7fX1yZXR1cm4obz9PdDpDcikoZSwoZnVuY3Rpb24oZSxyLG8pe3JldHVybiB0KG4sZSxyLG8pfSkpLG59LFRuLnVuYXJ5PWZ1bmN0aW9uKGUpe3JldHVybiBPaShlLDEpfSxUbi51bmlvbj1RYSxUbi51bmlvbkJ5PWVpLFRuLnVuaW9uV2l0aD10aSxUbi51bmlxPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD9pbyhlKTpbXX0sVG4udW5pcUJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2lvKGUsYWEodCwyKSk6W119LFRuLnVuaXFXaXRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8sZSYmZS5sZW5ndGg/aW8oZSxvLHQpOltdfSxUbi51bnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lfHxsbyhlLHQpfSxUbi51bnppcD1uaSxUbi51bnppcFdpdGg9cmksVG4udXBkYXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09ZT9lOnNvKGUsdCxnbyhuKSl9LFRuLnVwZGF0ZVdpdGg9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHI9XCJmdW5jdGlvblwiPT10eXBlb2Ygcj9yOm8sbnVsbD09ZT9lOnNvKGUsdCxnbyhuKSxyKX0sVG4udmFsdWVzPURsLFRuLnZhbHVlc0luPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOll0KGUsRWwoZSkpfSxUbi53aXRob3V0PW9pLFRuLndvcmRzPXFsLFRuLndyYXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSGkoZ28odCksZSl9LFRuLnhvcj1haSxUbi54b3JCeT1paSxUbi54b3JXaXRoPWxpLFRuLnppcD1zaSxUbi56aXBPYmplY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZm8oZXx8W10sdHx8W10sWG4pfSxUbi56aXBPYmplY3REZWVwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZvKGV8fFtdLHR8fFtdLHFyKX0sVG4uemlwV2l0aD1jaSxUbi5lbnRyaWVzPUFsLFRuLmVudHJpZXNJbj1UbCxUbi5leHRlbmQ9bWwsVG4uZXh0ZW5kV2l0aD13bCxhcyhUbixUbiksVG4uYWRkPXZzLFRuLmF0dGVtcHQ9WWwsVG4uY2FtZWxDYXNlPUJsLFRuLmNhcGl0YWxpemU9WmwsVG4uY2VpbD1DcyxUbi5jbGFtcD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49PT1vJiYobj10LHQ9byksbiE9PW8mJihuPShuPWhsKG4pKT09bj9uOjApLHQhPT1vJiYodD0odD1obCh0KSk9PXQ/dDowKSxvcihobChlKSx0LG4pfSxUbi5jbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gYXIoZSw0KX0sVG4uY2xvbmVEZWVwPWZ1bmN0aW9uKGUpe3JldHVybiBhcihlLDUpfSxUbi5jbG9uZURlZXBXaXRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFyKGUsNSx0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvKX0sVG4uY2xvbmVXaXRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFyKGUsNCx0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvKX0sVG4uY29uZm9ybXNUbz1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT10fHxpcihlLHQsUGwodCkpfSxUbi5kZWJ1cnI9JGwsVG4uZGVmYXVsdFRvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWV8fGUhPWU/dDplfSxUbi5kaXZpZGU9bXMsVG4uZW5kc1dpdGg9ZnVuY3Rpb24oZSx0LG4pe2U9dmwoZSksdD1hbyh0KTt2YXIgcj1lLmxlbmd0aCxhPW49bj09PW8/cjpvcihwbChuKSwwLHIpO3JldHVybihuLT10Lmxlbmd0aCk+PTAmJmUuc2xpY2UobixhKT09dH0sVG4uZXE9RGksVG4uZXNjYXBlPWZ1bmN0aW9uKGUpe3JldHVybihlPXZsKGUpKSYmSy50ZXN0KGUpP2UucmVwbGFjZSh6LHRuKTplfSxUbi5lc2NhcGVSZWdFeHA9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dmwoZSkpJiZuZS50ZXN0KGUpP2UucmVwbGFjZSh0ZSxcIlxcXFwkJlwiKTplfSxUbi5ldmVyeT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmkoZSk/THQ6ZHI7cmV0dXJuIG4mJnZhKGUsdCxuKSYmKHQ9bykscihlLGFhKHQsMykpfSxUbi5maW5kPWhpLFRuLmZpbmRJbmRleD0kYSxUbi5maW5kS2V5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFR0KGUsYWEodCwzKSxDcil9LFRuLmZpbmRMYXN0PWdpLFRuLmZpbmRMYXN0SW5kZXg9TmEsVG4uZmluZExhc3RLZXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVHQoZSxhYSh0LDMpLG1yKX0sVG4uZmxvb3I9d3MsVG4uZm9yRWFjaD12aSxUbi5mb3JFYWNoUmlnaHQ9Q2ksVG4uZm9ySW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT9lOmdyKGUsYWEodCwzKSxFbCl9LFRuLmZvckluUmlnaHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT9lOnZyKGUsYWEodCwzKSxFbCl9LFRuLmZvck93bj1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZDcihlLGFhKHQsMykpfSxUbi5mb3JPd25SaWdodD1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZtcihlLGFhKHQsMykpfSxUbi5nZXQ9U2wsVG4uZ3Q9QmksVG4uZ3RlPVppLFRuLmhhcz1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsIT1lJiZwYShlLHQsU3IpfSxUbi5oYXNJbj1PbCxUbi5oZWFkPVdhLFRuLmlkZW50aXR5PXRzLFRuLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxuLHIpe2U9V2koZSk/ZTpEbChlKSxuPW4mJiFyP3BsKG4pOjA7dmFyIG89ZS5sZW5ndGg7cmV0dXJuIG48MCYmKG49Z24obytuLDApKSxhbChlKT9uPD1vJiZlLmluZGV4T2YodCxuKT4tMTohIW8mJkJ0KGUsdCxuKT4tMX0sVG4uaW5kZXhPZj1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFyKXJldHVybi0xO3ZhciBvPW51bGw9PW4/MDpwbChuKTtyZXR1cm4gbzwwJiYobz1nbihyK28sMCkpLEJ0KGUsdCxvKX0sVG4uaW5SYW5nZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9ZGwodCksbj09PW8/KG49dCx0PTApOm49ZGwobiksZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPj12bih0LG4pJiZlPGduKHQsbil9KGU9aGwoZSksdCxuKX0sVG4uaW52b2tlPV9sLFRuLmlzQXJndW1lbnRzPSRpLFRuLmlzQXJyYXk9TmksVG4uaXNBcnJheUJ1ZmZlcj1GaSxUbi5pc0FycmF5TGlrZT1XaSxUbi5pc0FycmF5TGlrZU9iamVjdD1VaSxUbi5pc0Jvb2xlYW49ZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lfHwhMT09PWV8fFFpKGUpJiZ4cihlKT09Q30sVG4uaXNCdWZmZXI9emksVG4uaXNEYXRlPUdpLFRuLmlzRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gUWkoZSkmJjE9PT1lLm5vZGVUeXBlJiYhbmwoZSl9LFRuLmlzRW1wdHk9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSlyZXR1cm4hMDtpZihXaShlKSYmKE5pKGUpfHxcInN0cmluZ1wiPT10eXBlb2YgZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZS5zcGxpY2V8fHppKGUpfHxsbChlKXx8JGkoZSkpKXJldHVybiFlLmxlbmd0aDt2YXIgdD1kYShlKTtpZih0PT14fHx0PT1MKXJldHVybiFlLnNpemU7aWYoYmEoZSkpcmV0dXJuIUlyKGUpLmxlbmd0aDtmb3IodmFyIG4gaW4gZSlpZihJZS5jYWxsKGUsbikpcmV0dXJuITE7cmV0dXJuITB9LFRuLmlzRXF1YWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUHIoZSx0KX0sVG4uaXNFcXVhbFdpdGg9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPShuPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpvKT9uKGUsdCk6bztyZXR1cm4gcj09PW8/UHIoZSx0LG8sbik6ISFyfSxUbi5pc0Vycm9yPUtpLFRuLmlzRmluaXRlPWZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZBdChlKX0sVG4uaXNGdW5jdGlvbj1xaSxUbi5pc0ludGVnZXI9WWksVG4uaXNMZW5ndGg9SmksVG4uaXNNYXA9ZWwsVG4uaXNNYXRjaD1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dHx8RXIoZSx0LGxhKHQpKX0sVG4uaXNNYXRjaFdpdGg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpvLEVyKGUsdCxsYSh0KSxuKX0sVG4uaXNOYU49ZnVuY3Rpb24oZSl7cmV0dXJuIHRsKGUpJiZlIT0rZX0sVG4uaXNOYXRpdmU9ZnVuY3Rpb24oZSl7aWYod2EoZSkpdGhyb3cgbmV3IHllKFwiVW5zdXBwb3J0ZWQgY29yZS1qcyB1c2UuIFRyeSBodHRwczovL25wbXMuaW8vc2VhcmNoP3E9cG9ueWZpbGwuXCIpO3JldHVybiBqcihlKX0sVG4uaXNOaWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV9LFRuLmlzTnVsbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV9LFRuLmlzTnVtYmVyPXRsLFRuLmlzT2JqZWN0PVhpLFRuLmlzT2JqZWN0TGlrZT1RaSxUbi5pc1BsYWluT2JqZWN0PW5sLFRuLmlzUmVnRXhwPXJsLFRuLmlzU2FmZUludGVnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIFlpKGUpJiZlPj0tOTAwNzE5OTI1NDc0MDk5MSYmZTw9ZH0sVG4uaXNTZXQ9b2wsVG4uaXNTdHJpbmc9YWwsVG4uaXNTeW1ib2w9aWwsVG4uaXNUeXBlZEFycmF5PWxsLFRuLmlzVW5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09b30sVG4uaXNXZWFrTWFwPWZ1bmN0aW9uKGUpe3JldHVybiBRaShlKSYmZGEoZSk9PUV9LFRuLmlzV2Vha1NldD1mdW5jdGlvbihlKXtyZXR1cm4gUWkoZSkmJlwiW29iamVjdCBXZWFrU2V0XVwiPT14cihlKX0sVG4uam9pbj1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP1wiXCI6V3QuY2FsbChlLHQpfSxUbi5rZWJhYkNhc2U9TmwsVG4ubGFzdD1LYSxUbi5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFyKXJldHVybi0xO3ZhciBhPXI7cmV0dXJuIG4hPT1vJiYoYT0oYT1wbChuKSk8MD9nbihyK2EsMCk6dm4oYSxyLTEpKSx0PT10P2Z1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bisxO3ItLTspaWYoZVtyXT09PXQpcmV0dXJuIHI7cmV0dXJuIHJ9KGUsdCxhKTpEdChlLCR0LGEsITApfSxUbi5sb3dlckNhc2U9RmwsVG4ubG93ZXJGaXJzdD1XbCxUbi5sdD1zbCxUbi5sdGU9Y2wsVG4ubWF4PWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD9wcihlLHRzLGtyKTpvfSxUbi5tYXhCeT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9wcihlLGFhKHQsMiksa3IpOm99LFRuLm1lYW49ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGUsdHMpfSxUbi5tZWFuQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTnQoZSxhYSh0LDIpKX0sVG4ubWluPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD9wcihlLHRzLFZyKTpvfSxUbi5taW5CeT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9wcihlLGFhKHQsMiksVnIpOm99LFRuLnN0dWJBcnJheT1mcyxUbi5zdHViRmFsc2U9aHMsVG4uc3R1Yk9iamVjdD1mdW5jdGlvbigpe3JldHVybnt9fSxUbi5zdHViU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJcIn0sVG4uc3R1YlRydWU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sVG4ubXVsdGlwbHk9YnMsVG4ubnRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP0JyKGUscGwodCkpOm99LFRuLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZHQuXz09PXRoaXMmJihkdC5fPURlKSx0aGlzfSxUbi5ub29wPWlzLFRuLm5vdz1TaSxUbi5wYWQ9ZnVuY3Rpb24oZSx0LG4pe2U9dmwoZSk7dmFyIHI9KHQ9cGwodCkpP2NuKGUpOjA7aWYoIXR8fHI+PXQpcmV0dXJuIGU7dmFyIG89KHQtcikvMjtyZXR1cm4gJG8oZnQobyksbikrZSskbyhwdChvKSxuKX0sVG4ucGFkRW5kPWZ1bmN0aW9uKGUsdCxuKXtlPXZsKGUpO3ZhciByPSh0PXBsKHQpKT9jbihlKTowO3JldHVybiB0JiZyPHQ/ZSskbyh0LXIsbik6ZX0sVG4ucGFkU3RhcnQ9ZnVuY3Rpb24oZSx0LG4pe2U9dmwoZSk7dmFyIHI9KHQ9cGwodCkpP2NuKGUpOjA7cmV0dXJuIHQmJnI8dD8kbyh0LXIsbikrZTplfSxUbi5wYXJzZUludD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG58fG51bGw9PXQ/dD0wOnQmJih0PSt0KSxtbih2bChlKS5yZXBsYWNlKHJlLFwiXCIpLHR8fDApfSxUbi5yYW5kb209ZnVuY3Rpb24oZSx0LG4pe2lmKG4mJlwiYm9vbGVhblwiIT10eXBlb2YgbiYmdmEoZSx0LG4pJiYodD1uPW8pLG49PT1vJiYoXCJib29sZWFuXCI9PXR5cGVvZiB0PyhuPXQsdD1vKTpcImJvb2xlYW5cIj09dHlwZW9mIGUmJihuPWUsZT1vKSksZT09PW8mJnQ9PT1vPyhlPTAsdD0xKTooZT1kbChlKSx0PT09bz8odD1lLGU9MCk6dD1kbCh0KSksZT50KXt2YXIgcj1lO2U9dCx0PXJ9aWYobnx8ZSUxfHx0JTEpe3ZhciBhPXduKCk7cmV0dXJuIHZuKGUrYSoodC1lK2x0KFwiMWUtXCIrKChhK1wiXCIpLmxlbmd0aC0xKSkpLHQpfXJldHVybiBXcihlLHQpfSxUbi5yZWR1Y2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPU5pKGUpP0l0OlV0LG89YXJndW1lbnRzLmxlbmd0aDwzO3JldHVybiByKGUsYWEodCw0KSxuLG8sY3IpfSxUbi5yZWR1Y2VSaWdodD1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmkoZSk/VnQ6VXQsbz1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIHIoZSxhYSh0LDQpLG4sbyx1cil9LFRuLnJlcGVhdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9KG4/dmEoZSx0LG4pOnQ9PT1vKT8xOnBsKHQpLFVyKHZsKGUpLHQpfSxUbi5yZXBsYWNlPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLHQ9dmwoZVswXSk7cmV0dXJuIGUubGVuZ3RoPDM/dDp0LnJlcGxhY2UoZVsxXSxlWzJdKX0sVG4ucmVzdWx0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0tMSxhPSh0PXZvKHQsZSkpLmxlbmd0aDtmb3IoYXx8KGE9MSxlPW8pOysrcjxhOyl7dmFyIGk9bnVsbD09ZT9vOmVbSGEodFtyXSldO2k9PT1vJiYocj1hLGk9biksZT1xaShpKT9pLmNhbGwoZSk6aX1yZXR1cm4gZX0sVG4ucm91bmQ9eXMsVG4ucnVuSW5Db250ZXh0PWUsVG4uc2FtcGxlPWZ1bmN0aW9uKGUpe3JldHVybihOaShlKT9LbjpHcikoZSl9LFRuLnNpemU9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSlyZXR1cm4gMDtpZihXaShlKSlyZXR1cm4gYWwoZSk/Y24oZSk6ZS5sZW5ndGg7dmFyIHQ9ZGEoZSk7cmV0dXJuIHQ9PXh8fHQ9PUw/ZS5zaXplOklyKGUpLmxlbmd0aH0sVG4uc25ha2VDYXNlPVVsLFRuLnNvbWU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPU5pKGUpP0h0OmVvO3JldHVybiBuJiZ2YShlLHQsbikmJih0PW8pLHIoZSxhYSh0LDMpKX0sVG4uc29ydGVkSW5kZXg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdG8oZSx0KX0sVG4uc29ydGVkSW5kZXhCeT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5vKGUsdCxhYShuLDIpKX0sVG4uc29ydGVkSW5kZXhPZj1mdW5jdGlvbihlLHQpe3ZhciBuPW51bGw9PWU/MDplLmxlbmd0aDtpZihuKXt2YXIgcj10byhlLHQpO2lmKHI8biYmRGkoZVtyXSx0KSlyZXR1cm4gcn1yZXR1cm4tMX0sVG4uc29ydGVkTGFzdEluZGV4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRvKGUsdCwhMCl9LFRuLnNvcnRlZExhc3RJbmRleEJ5PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbm8oZSx0LGFhKG4sMiksITApfSxUbi5zb3J0ZWRMYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQpe2lmKG51bGwhPWUmJmUubGVuZ3RoKXt2YXIgbj10byhlLHQsITApLTE7aWYoRGkoZVtuXSx0KSlyZXR1cm4gbn1yZXR1cm4tMX0sVG4uc3RhcnRDYXNlPXpsLFRuLnN0YXJ0c1dpdGg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPXZsKGUpLG49bnVsbD09bj8wOm9yKHBsKG4pLDAsZS5sZW5ndGgpLHQ9YW8odCksZS5zbGljZShuLG4rdC5sZW5ndGgpPT10fSxUbi5zdWJ0cmFjdD14cyxUbi5zdW09ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP3p0KGUsdHMpOjB9LFRuLnN1bUJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP3p0KGUsYWEodCwyKSk6MH0sVG4udGVtcGxhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVRuLnRlbXBsYXRlU2V0dGluZ3M7biYmdmEoZSx0LG4pJiYodD1vKSxlPXZsKGUpLHQ9d2woe30sdCxyLHFvKTt2YXIgYSxpLGw9d2woe30sdC5pbXBvcnRzLHIuaW1wb3J0cyxxbykscz1QbChsKSxjPVl0KGwscyksdT0wLGQ9dC5pbnRlcnBvbGF0ZXx8d2UscD1cIl9fcCArPSAnXCIsZj1PZSgodC5lc2NhcGV8fHdlKS5zb3VyY2UrXCJ8XCIrZC5zb3VyY2UrXCJ8XCIrKGQ9PT1KP2RlOndlKS5zb3VyY2UrXCJ8XCIrKHQuZXZhbHVhdGV8fHdlKS5zb3VyY2UrXCJ8JFwiLFwiZ1wiKSxoPVwiLy8jIHNvdXJjZVVSTD1cIisoSWUuY2FsbCh0LFwic291cmNlVVJMXCIpPyh0LnNvdXJjZVVSTCtcIlwiKS5yZXBsYWNlKC9cXHMvZyxcIiBcIik6XCJsb2Rhc2gudGVtcGxhdGVTb3VyY2VzW1wiKyArK3J0K1wiXVwiKStcIlxcblwiO2UucmVwbGFjZShmLChmdW5jdGlvbih0LG4scixvLGwscyl7cmV0dXJuIHJ8fChyPW8pLHArPWUuc2xpY2UodSxzKS5yZXBsYWNlKGJlLG5uKSxuJiYoYT0hMCxwKz1cIicgK1xcbl9fZShcIituK1wiKSArXFxuJ1wiKSxsJiYoaT0hMCxwKz1cIic7XFxuXCIrbCtcIjtcXG5fX3AgKz0gJ1wiKSxyJiYocCs9XCInICtcXG4oKF9fdCA9IChcIityK1wiKSkgPT0gbnVsbCA/ICcnIDogX190KSArXFxuJ1wiKSx1PXMrdC5sZW5ndGgsdH0pKSxwKz1cIic7XFxuXCI7dmFyIGc9SWUuY2FsbCh0LFwidmFyaWFibGVcIikmJnQudmFyaWFibGU7aWYoZyl7aWYoY2UudGVzdChnKSl0aHJvdyBuZXcgeWUoXCJJbnZhbGlkIGB2YXJpYWJsZWAgb3B0aW9uIHBhc3NlZCBpbnRvIGBfLnRlbXBsYXRlYFwiKX1lbHNlIHA9XCJ3aXRoIChvYmopIHtcXG5cIitwK1wiXFxufVxcblwiO3A9KGk/cC5yZXBsYWNlKE4sXCJcIik6cCkucmVwbGFjZShGLFwiJDFcIikucmVwbGFjZShXLFwiJDE7XCIpLHA9XCJmdW5jdGlvbihcIisoZ3x8XCJvYmpcIikrXCIpIHtcXG5cIisoZz9cIlwiOlwib2JqIHx8IChvYmogPSB7fSk7XFxuXCIpK1widmFyIF9fdCwgX19wID0gJydcIisoYT9cIiwgX19lID0gXy5lc2NhcGVcIjpcIlwiKSsoaT9cIiwgX19qID0gQXJyYXkucHJvdG90eXBlLmpvaW47XFxuZnVuY3Rpb24gcHJpbnQoKSB7IF9fcCArPSBfX2ouY2FsbChhcmd1bWVudHMsICcnKSB9XFxuXCI6XCI7XFxuXCIpK3ArXCJyZXR1cm4gX19wXFxufVwiO3ZhciB2PVlsKChmdW5jdGlvbigpe3JldHVybiB4ZShzLGgrXCJyZXR1cm4gXCIrcCkuYXBwbHkobyxjKX0pKTtpZih2LnNvdXJjZT1wLEtpKHYpKXRocm93IHY7cmV0dXJuIHZ9LFRuLnRpbWVzPWZ1bmN0aW9uKGUsdCl7aWYoKGU9cGwoZSkpPDF8fGU+ZClyZXR1cm5bXTt2YXIgbj1mLHI9dm4oZSxmKTt0PWFhKHQpLGUtPWY7Zm9yKHZhciBvPUd0KHIsdCk7KytuPGU7KXQobik7cmV0dXJuIG99LFRuLnRvRmluaXRlPWRsLFRuLnRvSW50ZWdlcj1wbCxUbi50b0xlbmd0aD1mbCxUbi50b0xvd2VyPWZ1bmN0aW9uKGUpe3JldHVybiB2bChlKS50b0xvd2VyQ2FzZSgpfSxUbi50b051bWJlcj1obCxUbi50b1NhZmVJbnRlZ2VyPWZ1bmN0aW9uKGUpe3JldHVybiBlP29yKHBsKGUpLC05MDA3MTk5MjU0NzQwOTkxLGQpOjA9PT1lP2U6MH0sVG4udG9TdHJpbmc9dmwsVG4udG9VcHBlcj1mdW5jdGlvbihlKXtyZXR1cm4gdmwoZSkudG9VcHBlckNhc2UoKX0sVG4udHJpbT1mdW5jdGlvbihlLHQsbil7aWYoKGU9dmwoZSkpJiYobnx8dD09PW8pKXJldHVybiBLdChlKTtpZighZXx8ISh0PWFvKHQpKSlyZXR1cm4gZTt2YXIgcj11bihlKSxhPXVuKHQpO3JldHVybiBtbyhyLFh0KHIsYSksUXQocixhKSsxKS5qb2luKFwiXCIpfSxUbi50cmltRW5kPWZ1bmN0aW9uKGUsdCxuKXtpZigoZT12bChlKSkmJihufHx0PT09bykpcmV0dXJuIGUuc2xpY2UoMCxkbihlKSsxKTtpZighZXx8ISh0PWFvKHQpKSlyZXR1cm4gZTt2YXIgcj11bihlKTtyZXR1cm4gbW8ociwwLFF0KHIsdW4odCkpKzEpLmpvaW4oXCJcIil9LFRuLnRyaW1TdGFydD1mdW5jdGlvbihlLHQsbil7aWYoKGU9dmwoZSkpJiYobnx8dD09PW8pKXJldHVybiBlLnJlcGxhY2UocmUsXCJcIik7aWYoIWV8fCEodD1hbyh0KSkpcmV0dXJuIGU7dmFyIHI9dW4oZSk7cmV0dXJuIG1vKHIsWHQocix1bih0KSkpLmpvaW4oXCJcIil9LFRuLnRydW5jYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49MzAscj1cIi4uLlwiO2lmKFhpKHQpKXt2YXIgYT1cInNlcGFyYXRvclwiaW4gdD90LnNlcGFyYXRvcjphO249XCJsZW5ndGhcImluIHQ/cGwodC5sZW5ndGgpOm4scj1cIm9taXNzaW9uXCJpbiB0P2FvKHQub21pc3Npb24pOnJ9dmFyIGk9KGU9dmwoZSkpLmxlbmd0aDtpZihybihlKSl7dmFyIGw9dW4oZSk7aT1sLmxlbmd0aH1pZihuPj1pKXJldHVybiBlO3ZhciBzPW4tY24ocik7aWYoczwxKXJldHVybiByO3ZhciBjPWw/bW8obCwwLHMpLmpvaW4oXCJcIik6ZS5zbGljZSgwLHMpO2lmKGE9PT1vKXJldHVybiBjK3I7aWYobCYmKHMrPWMubGVuZ3RoLXMpLHJsKGEpKXtpZihlLnNsaWNlKHMpLnNlYXJjaChhKSl7dmFyIHUsZD1jO2ZvcihhLmdsb2JhbHx8KGE9T2UoYS5zb3VyY2UsdmwocGUuZXhlYyhhKSkrXCJnXCIpKSxhLmxhc3RJbmRleD0wO3U9YS5leGVjKGQpOyl2YXIgcD11LmluZGV4O2M9Yy5zbGljZSgwLHA9PT1vP3M6cCl9fWVsc2UgaWYoZS5pbmRleE9mKGFvKGEpLHMpIT1zKXt2YXIgZj1jLmxhc3RJbmRleE9mKGEpO2Y+LTEmJihjPWMuc2xpY2UoMCxmKSl9cmV0dXJuIGMrcn0sVG4udW5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dmwoZSkpJiZHLnRlc3QoZSk/ZS5yZXBsYWNlKFUscG4pOmV9LFRuLnVuaXF1ZUlkPWZ1bmN0aW9uKGUpe3ZhciB0PSsrVmU7cmV0dXJuIHZsKGUpK3R9LFRuLnVwcGVyQ2FzZT1HbCxUbi51cHBlckZpcnN0PUtsLFRuLmVhY2g9dmksVG4uZWFjaFJpZ2h0PUNpLFRuLmZpcnN0PVdhLGFzKFRuLChncz17fSxDcihUbiwoZnVuY3Rpb24oZSx0KXtJZS5jYWxsKFRuLnByb3RvdHlwZSx0KXx8KGdzW3RdPWUpfSkpLGdzKSx7Y2hhaW46ITF9KSxUbi5WRVJTSU9OPVwiNC4xNy4yMVwiLE90KFtcImJpbmRcIixcImJpbmRLZXlcIixcImN1cnJ5XCIsXCJjdXJyeVJpZ2h0XCIsXCJwYXJ0aWFsXCIsXCJwYXJ0aWFsUmlnaHRcIl0sKGZ1bmN0aW9uKGUpe1RuW2VdLnBsYWNlaG9sZGVyPVRufSkpLE90KFtcImRyb3BcIixcInRha2VcIl0sKGZ1bmN0aW9uKGUsdCl7JG4ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKG4pe249bj09PW8/MTpnbihwbChuKSwwKTt2YXIgcj10aGlzLl9fZmlsdGVyZWRfXyYmIXQ/bmV3ICRuKHRoaXMpOnRoaXMuY2xvbmUoKTtyZXR1cm4gci5fX2ZpbHRlcmVkX18/ci5fX3Rha2VDb3VudF9fPXZuKG4sci5fX3Rha2VDb3VudF9fKTpyLl9fdmlld3NfXy5wdXNoKHtzaXplOnZuKG4sZiksdHlwZTplKyhyLl9fZGlyX188MD9cIlJpZ2h0XCI6XCJcIil9KSxyfSwkbi5wcm90b3R5cGVbZStcIlJpZ2h0XCJdPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJldmVyc2UoKVtlXSh0KS5yZXZlcnNlKCl9fSkpLE90KFtcImZpbHRlclwiLFwibWFwXCIsXCJ0YWtlV2hpbGVcIl0sKGZ1bmN0aW9uKGUsdCl7dmFyIG49dCsxLHI9MT09bnx8Mz09bjskbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jbG9uZSgpO3JldHVybiB0Ll9faXRlcmF0ZWVzX18ucHVzaCh7aXRlcmF0ZWU6YWEoZSwzKSx0eXBlOm59KSx0Ll9fZmlsdGVyZWRfXz10Ll9fZmlsdGVyZWRfX3x8cix0fX0pKSxPdChbXCJoZWFkXCIsXCJsYXN0XCJdLChmdW5jdGlvbihlLHQpe3ZhciBuPVwidGFrZVwiKyh0P1wiUmlnaHRcIjpcIlwiKTskbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tuXSgxKS52YWx1ZSgpWzBdfX0pKSxPdChbXCJpbml0aWFsXCIsXCJ0YWlsXCJdLChmdW5jdGlvbihlLHQpe3ZhciBuPVwiZHJvcFwiKyh0P1wiXCI6XCJSaWdodFwiKTskbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18/bmV3ICRuKHRoaXMpOnRoaXNbbl0oMSl9fSkpLCRuLnByb3RvdHlwZS5jb21wYWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsdGVyKHRzKX0sJG4ucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZmlsdGVyKGUpLmhlYWQoKX0sJG4ucHJvdG90eXBlLmZpbmRMYXN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJldmVyc2UoKS5maW5kKGUpfSwkbi5wcm90b3R5cGUuaW52b2tlTWFwPXpyKChmdW5jdGlvbihlLHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/bmV3ICRuKHRoaXMpOnRoaXMubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gTHIobixlLHQpfSkpfSkpLCRuLnByb3RvdHlwZS5yZWplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZmlsdGVyKElpKGFhKGUpKSl9LCRuLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe2U9cGwoZSk7dmFyIG49dGhpcztyZXR1cm4gbi5fX2ZpbHRlcmVkX18mJihlPjB8fHQ8MCk/bmV3ICRuKG4pOihlPDA/bj1uLnRha2VSaWdodCgtZSk6ZSYmKG49bi5kcm9wKGUpKSx0IT09byYmKG49KHQ9cGwodCkpPDA/bi5kcm9wUmlnaHQoLXQpOm4udGFrZSh0LWUpKSxuKX0sJG4ucHJvdG90eXBlLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUoZSkucmV2ZXJzZSgpfSwkbi5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRha2UoZil9LENyKCRuLnByb3RvdHlwZSwoZnVuY3Rpb24oZSx0KXt2YXIgbj0vXig/OmZpbHRlcnxmaW5kfG1hcHxyZWplY3QpfFdoaWxlJC8udGVzdCh0KSxyPS9eKD86aGVhZHxsYXN0KSQvLnRlc3QodCksYT1UbltyP1widGFrZVwiKyhcImxhc3RcIj09dD9cIlJpZ2h0XCI6XCJcIik6dF0saT1yfHwvXmZpbmQvLnRlc3QodCk7YSYmKFRuLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX193cmFwcGVkX18sbD1yP1sxXTphcmd1bWVudHMscz10IGluc3RhbmNlb2YgJG4sYz1sWzBdLHU9c3x8TmkodCksZD1mdW5jdGlvbihlKXt2YXIgdD1hLmFwcGx5KFRuLFJ0KFtlXSxsKSk7cmV0dXJuIHImJnA/dFswXTp0fTt1JiZuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBjJiYxIT1jLmxlbmd0aCYmKHM9dT0hMSk7dmFyIHA9dGhpcy5fX2NoYWluX18sZj0hIXRoaXMuX19hY3Rpb25zX18ubGVuZ3RoLGg9aSYmIXAsZz1zJiYhZjtpZighaSYmdSl7dD1nP3Q6bmV3ICRuKHRoaXMpO3ZhciB2PWUuYXBwbHkodCxsKTtyZXR1cm4gdi5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOmRpLGFyZ3M6W2RdLHRoaXNBcmc6b30pLG5ldyBabih2LHApfXJldHVybiBoJiZnP2UuYXBwbHkodGhpcyxsKToodj10aGlzLnRocnUoZCksaD9yP3YudmFsdWUoKVswXTp2LnZhbHVlKCk6dil9KX0pKSxPdChbXCJwb3BcIixcInB1c2hcIixcInNoaWZ0XCIsXCJzb3J0XCIsXCJzcGxpY2VcIixcInVuc2hpZnRcIl0sKGZ1bmN0aW9uKGUpe3ZhciB0PV9lW2VdLG49L14oPzpwdXNofHNvcnR8dW5zaGlmdCkkLy50ZXN0KGUpP1widGFwXCI6XCJ0aHJ1XCIscj0vXig/OnBvcHxzaGlmdCkkLy50ZXN0KGUpO1RuLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztpZihyJiYhdGhpcy5fX2NoYWluX18pe3ZhciBvPXRoaXMudmFsdWUoKTtyZXR1cm4gdC5hcHBseShOaShvKT9vOltdLGUpfXJldHVybiB0aGlzW25dKChmdW5jdGlvbihuKXtyZXR1cm4gdC5hcHBseShOaShuKT9uOltdLGUpfSkpfX0pKSxDcigkbi5wcm90b3R5cGUsKGZ1bmN0aW9uKGUsdCl7dmFyIG49VG5bdF07aWYobil7dmFyIHI9bi5uYW1lK1wiXCI7SWUuY2FsbChfbixyKXx8KF9uW3JdPVtdKSxfbltyXS5wdXNoKHtuYW1lOnQsZnVuYzpufSl9fSkpLF9uW1RvKG8sMikubmFtZV09W3tuYW1lOlwid3JhcHBlclwiLGZ1bmM6b31dLCRuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBlPW5ldyAkbih0aGlzLl9fd3JhcHBlZF9fKTtyZXR1cm4gZS5fX2FjdGlvbnNfXz1Nbyh0aGlzLl9fYWN0aW9uc19fKSxlLl9fZGlyX189dGhpcy5fX2Rpcl9fLGUuX19maWx0ZXJlZF9fPXRoaXMuX19maWx0ZXJlZF9fLGUuX19pdGVyYXRlZXNfXz1Nbyh0aGlzLl9faXRlcmF0ZWVzX18pLGUuX190YWtlQ291bnRfXz10aGlzLl9fdGFrZUNvdW50X18sZS5fX3ZpZXdzX189TW8odGhpcy5fX3ZpZXdzX18pLGV9LCRuLnByb3RvdHlwZS5yZXZlcnNlPWZ1bmN0aW9uKCl7aWYodGhpcy5fX2ZpbHRlcmVkX18pe3ZhciBlPW5ldyAkbih0aGlzKTtlLl9fZGlyX189LTEsZS5fX2ZpbHRlcmVkX189ITB9ZWxzZShlPXRoaXMuY2xvbmUoKSkuX19kaXJfXyo9LTE7cmV0dXJuIGV9LCRuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX193cmFwcGVkX18udmFsdWUoKSx0PXRoaXMuX19kaXJfXyxuPU5pKGUpLHI9dDwwLG89bj9lLmxlbmd0aDowLGE9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj0tMSxvPW4ubGVuZ3RoOysrcjxvOyl7dmFyIGE9bltyXSxpPWEuc2l6ZTtzd2l0Y2goYS50eXBlKXtjYXNlXCJkcm9wXCI6ZSs9aTticmVhaztjYXNlXCJkcm9wUmlnaHRcIjp0LT1pO2JyZWFrO2Nhc2VcInRha2VcIjp0PXZuKHQsZStpKTticmVhaztjYXNlXCJ0YWtlUmlnaHRcIjplPWduKGUsdC1pKX19cmV0dXJue3N0YXJ0OmUsZW5kOnR9fSgwLG8sdGhpcy5fX3ZpZXdzX18pLGk9YS5zdGFydCxsPWEuZW5kLHM9bC1pLGM9cj9sOmktMSx1PXRoaXMuX19pdGVyYXRlZXNfXyxkPXUubGVuZ3RoLHA9MCxmPXZuKHMsdGhpcy5fX3Rha2VDb3VudF9fKTtpZighbnx8IXImJm89PXMmJmY9PXMpcmV0dXJuIHVvKGUsdGhpcy5fX2FjdGlvbnNfXyk7dmFyIGg9W107ZTpmb3IoO3MtLSYmcDxmOyl7Zm9yKHZhciBnPS0xLHY9ZVtjKz10XTsrK2c8ZDspe3ZhciBDPXVbZ10sbT1DLml0ZXJhdGVlLHc9Qy50eXBlLGI9bSh2KTtpZigyPT13KXY9YjtlbHNlIGlmKCFiKXtpZigxPT13KWNvbnRpbnVlIGU7YnJlYWsgZX19aFtwKytdPXZ9cmV0dXJuIGh9LFRuLnByb3RvdHlwZS5hdD1waSxUbi5wcm90b3R5cGUuY2hhaW49ZnVuY3Rpb24oKXtyZXR1cm4gdWkodGhpcyl9LFRuLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFpuKHRoaXMudmFsdWUoKSx0aGlzLl9fY2hhaW5fXyl9LFRuLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dGhpcy5fX3ZhbHVlc19fPT09byYmKHRoaXMuX192YWx1ZXNfXz11bCh0aGlzLnZhbHVlKCkpKTt2YXIgZT10aGlzLl9faW5kZXhfXz49dGhpcy5fX3ZhbHVlc19fLmxlbmd0aDtyZXR1cm57ZG9uZTplLHZhbHVlOmU/bzp0aGlzLl9fdmFsdWVzX19bdGhpcy5fX2luZGV4X18rK119fSxUbi5wcm90b3R5cGUucGxhbnQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49dGhpcztuIGluc3RhbmNlb2YgQm47KXt2YXIgcj1UYShuKTtyLl9faW5kZXhfXz0wLHIuX192YWx1ZXNfXz1vLHQ/YS5fX3dyYXBwZWRfXz1yOnQ9cjt2YXIgYT1yO249bi5fX3dyYXBwZWRfX31yZXR1cm4gYS5fX3dyYXBwZWRfXz1lLHR9LFRuLnByb3RvdHlwZS5yZXZlcnNlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX3dyYXBwZWRfXztpZihlIGluc3RhbmNlb2YgJG4pe3ZhciB0PWU7cmV0dXJuIHRoaXMuX19hY3Rpb25zX18ubGVuZ3RoJiYodD1uZXcgJG4odGhpcykpLCh0PXQucmV2ZXJzZSgpKS5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOmRpLGFyZ3M6W1hhXSx0aGlzQXJnOm99KSxuZXcgWm4odCx0aGlzLl9fY2hhaW5fXyl9cmV0dXJuIHRoaXMudGhydShYYSl9LFRuLnByb3RvdHlwZS50b0pTT049VG4ucHJvdG90eXBlLnZhbHVlT2Y9VG4ucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHVvKHRoaXMuX193cmFwcGVkX18sdGhpcy5fX2FjdGlvbnNfXyl9LFRuLnByb3RvdHlwZS5maXJzdD1Ubi5wcm90b3R5cGUuaGVhZCxxZSYmKFRuLnByb3RvdHlwZVtxZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFRufSgpO2R0Ll89Zm4sKHI9ZnVuY3Rpb24oKXtyZXR1cm4gZm59LmNhbGwodCxuLHQsZSkpPT09b3x8KGUuZXhwb3J0cz1yKX0uY2FsbCh0aGlzKX0sNzQxODplPT57dmFyIHQ9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscj1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2UuZXhwb3J0cz1mdW5jdGlvbigpe3RyeXtpZighT2JqZWN0LmFzc2lnbilyZXR1cm4hMTt2YXIgZT1uZXcgU3RyaW5nKFwiYWJjXCIpO2lmKGVbNV09XCJkZVwiLFwiNVwiPT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSlbMF0pcmV0dXJuITE7Zm9yKHZhciB0PXt9LG49MDtuPDEwO24rKyl0W1wiX1wiK1N0cmluZy5mcm9tQ2hhckNvZGUobildPW47aWYoXCIwMTIzNDU2Nzg5XCIhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpLmpvaW4oXCJcIikpcmV0dXJuITE7dmFyIHI9e307cmV0dXJuXCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiLnNwbGl0KFwiXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JbZV09ZX0pKSxcImFiY2RlZmdoaWprbG1ub3BxcnN0XCI9PT1PYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LHIpKS5qb2luKFwiXCIpfWNhdGNoKGUpe3JldHVybiExfX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKGUsbyl7Zm9yKHZhciBhLGksbD1mdW5jdGlvbihlKXtpZihudWxsPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZFwiKTtyZXR1cm4gT2JqZWN0KGUpfShlKSxzPTE7czxhcmd1bWVudHMubGVuZ3RoO3MrKyl7Zm9yKHZhciBjIGluIGE9T2JqZWN0KGFyZ3VtZW50c1tzXSkpbi5jYWxsKGEsYykmJihsW2NdPWFbY10pO2lmKHQpe2k9dChhKTtmb3IodmFyIHU9MDt1PGkubGVuZ3RoO3UrKylyLmNhbGwoYSxpW3VdKSYmKGxbaVt1XV09YVtpW3VdXSl9fXJldHVybiBsfX0sOTI5NDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9big2NTUpLG89big0Mzk0KSxhPW4oMzU3MyksaT1uKDQ4MzkpO3ZhciBsPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19KGkpLHM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBNYXRoLm1pbihNYXRoLm1heChuLGUpLHQpfSxjPS4wMDEsdT0uMDEsZD0xMCxwPS4wNSxmPTEsaD0xMjtmdW5jdGlvbiBnKGUsdCl7cmV0dXJuIGUqTWF0aC5zcXJ0KDEtdCp0KX12YXIgdj1bXCJkdXJhdGlvblwiLFwiYm91bmNlXCJdLEM9W1wic3RpZmZuZXNzXCIsXCJkYW1waW5nXCIsXCJtYXNzXCJdO2Z1bmN0aW9uIG0oZSx0KXtyZXR1cm4gdC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09ZVt0XX0pKX1mdW5jdGlvbiB3KGUpe3ZhciB0PWUuZnJvbSxuPXZvaWQgMD09PXQ/MDp0LGE9ZS50byxpPXZvaWQgMD09PWE/MTphLGw9ZS5yZXN0U3BlZWQsdz12b2lkIDA9PT1sPzI6bCx5PWUucmVzdERlbHRhLHg9ci5fX3Jlc3QoZSxbXCJmcm9tXCIsXCJ0b1wiLFwicmVzdFNwZWVkXCIsXCJyZXN0RGVsdGFcIl0pLGs9e2RvbmU6ITEsdmFsdWU6bn0sUz1mdW5jdGlvbihlKXt2YXIgdD1yLl9fYXNzaWduKHt2ZWxvY2l0eTowLHN0aWZmbmVzczoxMDAsZGFtcGluZzoxMCxtYXNzOjEsaXNSZXNvbHZlZEZyb21EdXJhdGlvbjohMX0sZSk7aWYoIW0oZSxDKSYmbShlLHYpKXt2YXIgbj1mdW5jdGlvbihlKXt2YXIgdCxuLHI9ZS5kdXJhdGlvbixhPXZvaWQgMD09PXI/ODAwOnIsaT1lLmJvdW5jZSxsPXZvaWQgMD09PWk/LjI1Omksdj1lLnZlbG9jaXR5LEM9dm9pZCAwPT09dj8wOnYsbT1lLm1hc3Msdz12b2lkIDA9PT1tPzE6bTtvLndhcm5pbmcoYTw9MWUzKmQsXCJTcHJpbmcgZHVyYXRpb24gbXVzdCBiZSAxMCBzZWNvbmRzIG9yIGxlc3NcIik7dmFyIGI9MS1sO2I9cyhwLGYsYiksYT1zKHUsZCxhLzFlMyksYjwxPyh0PWZ1bmN0aW9uKGUpe3ZhciB0PWUqYixuPXQqYSxyPXQtQyxvPWcoZSxiKSxpPU1hdGguZXhwKC1uKTtyZXR1cm4gYy1yL28qaX0sbj1mdW5jdGlvbihlKXt2YXIgbj1lKmIqYSxyPW4qQytDLG89TWF0aC5wb3coYiwyKSpNYXRoLnBvdyhlLDIpKmEsaT1NYXRoLmV4cCgtbiksbD1nKE1hdGgucG93KGUsMiksYik7cmV0dXJuKC10KGUpK2M+MD8tMToxKSooKHItbykqaSkvbH0pOih0PWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmV4cCgtZSphKSooKGUtQykqYSsxKS1jfSxuPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmV4cCgtZSphKSooYSphKihDLWUpKX0pO3ZhciB5PWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bixvPTE7bzxoO28rKylyLT1lKHIpL3Qocik7cmV0dXJuIHJ9KHQsbiw1L2EpO2lmKGEqPTFlMyxpc05hTih5KSlyZXR1cm57c3RpZmZuZXNzOjEwMCxkYW1waW5nOjEwLGR1cmF0aW9uOmF9O3ZhciB4PU1hdGgucG93KHksMikqdztyZXR1cm57c3RpZmZuZXNzOngsZGFtcGluZzoyKmIqTWF0aC5zcXJ0KHcqeCksZHVyYXRpb246YX19KGUpOyh0PXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHQpLG4pLHt2ZWxvY2l0eTowLG1hc3M6MX0pKS5pc1Jlc29sdmVkRnJvbUR1cmF0aW9uPSEwfXJldHVybiB0fSh4KSxPPVMuc3RpZmZuZXNzLE09Uy5kYW1waW5nLEw9Uy5tYXNzLF89Uy52ZWxvY2l0eSxQPVMuZHVyYXRpb24sRT1TLmlzUmVzb2x2ZWRGcm9tRHVyYXRpb24saj1iLFI9YjtmdW5jdGlvbiBJKCl7dmFyIGU9Xz8tXy8xZTM6MCx0PWktbixyPU0vKDIqTWF0aC5zcXJ0KE8qTCkpLG89TWF0aC5zcXJ0KE8vTCkvMWUzO2lmKG51bGwhPXl8fCh5PU1hdGguYWJzKGktbik8PTE/LjAxOi40KSxyPDEpe3ZhciBhPWcobyxyKTtqPWZ1bmN0aW9uKG4pe3ZhciBsPU1hdGguZXhwKC1yKm8qbik7cmV0dXJuIGktbCooKGUrcipvKnQpL2EqTWF0aC5zaW4oYSpuKSt0Kk1hdGguY29zKGEqbikpfSxSPWZ1bmN0aW9uKG4pe3ZhciBpPU1hdGguZXhwKC1yKm8qbik7cmV0dXJuIHIqbyppKihNYXRoLnNpbihhKm4pKihlK3Iqbyp0KS9hK3QqTWF0aC5jb3MoYSpuKSktaSooTWF0aC5jb3MoYSpuKSooZStyKm8qdCktYSp0Kk1hdGguc2luKGEqbikpfX1lbHNlIGlmKDE9PT1yKWo9ZnVuY3Rpb24obil7cmV0dXJuIGktTWF0aC5leHAoLW8qbikqKHQrKGUrbyp0KSpuKX07ZWxzZXt2YXIgbD1vKk1hdGguc3FydChyKnItMSk7aj1mdW5jdGlvbihuKXt2YXIgYT1NYXRoLmV4cCgtcipvKm4pLHM9TWF0aC5taW4obCpuLDMwMCk7cmV0dXJuIGktYSooKGUrcipvKnQpKk1hdGguc2luaChzKStsKnQqTWF0aC5jb3NoKHMpKS9sfX19cmV0dXJuIEkoKSx7bmV4dDpmdW5jdGlvbihlKXt2YXIgdD1qKGUpO2lmKEUpay5kb25lPWU+PVA7ZWxzZXt2YXIgbj0xZTMqUihlKSxyPU1hdGguYWJzKG4pPD13LG89TWF0aC5hYnMoaS10KTw9eTtrLmRvbmU9ciYmb31yZXR1cm4gay52YWx1ZT1rLmRvbmU/aTp0LGt9LGZsaXBUYXJnZXQ6ZnVuY3Rpb24oKXt2YXIgZTtfPS1fLG49KGU9W2ksbl0pWzBdLGk9ZVsxXSxJKCl9fX13Lm5lZWRzSW50ZXJwb2xhdGlvbj1mdW5jdGlvbihlLHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfHxcInN0cmluZ1wiPT10eXBlb2YgdH07dmFyIGI9ZnVuY3Rpb24oZSl7cmV0dXJuIDB9LHk9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQtZTtyZXR1cm4gMD09PXI/MToobi1lKS9yfSx4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tbiplK24qdCtlfSxrPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKmUsbz10KnQ7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heCgwLG4qKG8tcikrcikpfSxTPVthLmhleCxhLnJnYmEsYS5oc2xhXSxPPWZ1bmN0aW9uKGUpe3JldHVybiBTLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRlc3QoZSl9KSl9LE09ZnVuY3Rpb24oZSl7cmV0dXJuXCInXCIrZStcIicgaXMgbm90IGFuIGFuaW1hdGFibGUgY29sb3IuIFVzZSB0aGUgZXF1aXZhbGVudCBjb2xvciBjb2RlIGluc3RlYWQuXCJ9LEw9ZnVuY3Rpb24oZSx0KXt2YXIgbj1PKGUpLGk9Tyh0KTtvLmludmFyaWFudCghIW4sTShlKSksby5pbnZhcmlhbnQoISFpLE0odCkpLG8uaW52YXJpYW50KG4udHJhbnNmb3JtPT09aS50cmFuc2Zvcm0sXCJCb3RoIGNvbG9ycyBtdXN0IGJlIGhleC9SR0JBLCBPUiBib3RoIG11c3QgYmUgSFNMQS5cIik7dmFyIGw9bi5wYXJzZShlKSxzPWkucGFyc2UodCksYz1yLl9fYXNzaWduKHt9LGwpLHU9bj09PWEuaHNsYT94Oms7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBjKVwiYWxwaGFcIiE9PXQmJihjW3RdPXUobFt0XSxzW3RdLGUpKTtyZXR1cm4gYy5hbHBoYT14KGwuYWxwaGEscy5hbHBoYSxlKSxuLnRyYW5zZm9ybShjKX19LF89e3g6MCx5OjAsejowfSxQPWZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlfSxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0KGUobikpfX0saj1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtyZXR1cm4gZS5yZWR1Y2UoRSl9O2Z1bmN0aW9uIFIoZSx0KXtyZXR1cm4gUChlKT9mdW5jdGlvbihuKXtyZXR1cm4geChlLHQsbil9OmEuY29sb3IudGVzdChlKT9MKGUsdCk6QShlLHQpfXZhciBJPWZ1bmN0aW9uKGUsdCl7dmFyIG49ci5fX3NwcmVhZEFycmF5KFtdLGUpLG89bi5sZW5ndGgsYT1lLm1hcCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gUihlLHRbbl0pfSkpO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PG87dCsrKW5bdF09YVt0XShlKTtyZXR1cm4gbn19LFY9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sZSksdCksbz17fTtmb3IodmFyIGEgaW4gbil2b2lkIDAhPT1lW2FdJiZ2b2lkIDAhPT10W2FdJiYob1thXT1SKGVbYV0sdFthXSkpO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gbyluW3RdPW9bdF0oZSk7cmV0dXJuIG59fTtmdW5jdGlvbiBIKGUpe2Zvcih2YXIgdD1hLmNvbXBsZXgucGFyc2UoZSksbj10Lmxlbmd0aCxyPTAsbz0wLGk9MCxsPTA7bDxuO2wrKylyfHxcIm51bWJlclwiPT10eXBlb2YgdFtsXT9yKys6dm9pZCAwIT09dFtsXS5odWU/aSsrOm8rKztyZXR1cm57cGFyc2VkOnQsbnVtTnVtYmVyczpyLG51bVJHQjpvLG51bUhTTDppfX12YXIgQT1mdW5jdGlvbihlLHQpe3ZhciBuPWEuY29tcGxleC5jcmVhdGVUcmFuc2Zvcm1lcih0KSxyPUgoZSksaT1IKHQpO3JldHVybiBvLmludmFyaWFudChyLm51bUhTTD09PWkubnVtSFNMJiZyLm51bVJHQj09PWkubnVtUkdCJiZyLm51bU51bWJlcnM+PWkubnVtTnVtYmVycyxcIkNvbXBsZXggdmFsdWVzICdcIitlK1wiJyBhbmQgJ1wiK3QrXCInIHRvbyBkaWZmZXJlbnQgdG8gbWl4LiBFbnN1cmUgYWxsIGNvbG9ycyBhcmUgb2YgdGhlIHNhbWUgdHlwZS5cIiksaihJKHIucGFyc2VkLGkucGFyc2VkKSxuKX0sVD1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4geChlLHQsbil9fTtmdW5jdGlvbiBEKGUsdCxuKXt2YXIgcj12b2lkIDA9PT1uP3t9Om4saT1yLmNsYW1wLGw9dm9pZCAwPT09aXx8aSxjPXIuZWFzZSx1PXIubWl4ZXIsZD1lLmxlbmd0aDtvLmludmFyaWFudChkPT09dC5sZW5ndGgsXCJCb3RoIGlucHV0IGFuZCBvdXRwdXQgcmFuZ2VzIG11c3QgYmUgdGhlIHNhbWUgbGVuZ3RoXCIpLG8uaW52YXJpYW50KCFjfHwhQXJyYXkuaXNBcnJheShjKXx8Yy5sZW5ndGg9PT1kLTEsXCJBcnJheSBvZiBlYXNpbmcgZnVuY3Rpb25zIG11c3QgYmUgb2YgbGVuZ3RoIGBpbnB1dC5sZW5ndGggLSAxYCwgYXMgaXQgYXBwbGllcyB0byB0aGUgdHJhbnNpdGlvbnMgKipiZXR3ZWVuKiogdGhlIGRlZmluZWQgdmFsdWVzLlwiKSxlWzBdPmVbZC0xXSYmKGU9W10uY29uY2F0KGUpLHQ9W10uY29uY2F0KHQpLGUucmV2ZXJzZSgpLHQucmV2ZXJzZSgpKTt2YXIgcD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByLG89W10saT1ufHwoXCJudW1iZXJcIj09dHlwZW9mKHI9ZVswXSk/VDpcInN0cmluZ1wiPT10eXBlb2Ygcj9hLmNvbG9yLnRlc3Qocik/TDpBOkFycmF5LmlzQXJyYXkocik/STpcIm9iamVjdFwiPT10eXBlb2Ygcj9WOnZvaWQgMCksbD1lLmxlbmd0aC0xLHM9MDtzPGw7cysrKXt2YXIgYz1pKGVbc10sZVtzKzFdKTtpZih0KXt2YXIgdT1BcnJheS5pc0FycmF5KHQpP3Rbc106dDtjPWoodSxjKX1vLnB1c2goYyl9cmV0dXJuIG99KHQsYyx1KSxmPTI9PT1kP2Z1bmN0aW9uKGUsdCl7dmFyIG49ZVswXSxyPWVbMV0sbz10WzBdO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbyh5KG4scixlKSl9fShlLHApOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5sZW5ndGgscj1uLTE7cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBhPTAsaT0hMTtpZihvPD1lWzBdP2k9ITA6bz49ZVtyXSYmKGE9ci0xLGk9ITApLCFpKXtmb3IodmFyIGw9MTtsPG4mJiEoZVtsXT5vfHxsPT09cik7bCsrKTthPWwtMX12YXIgcz15KGVbYV0sZVthKzFdLG8pO3JldHVybiB0W2FdKHMpfX0oZSxwKTtyZXR1cm4gbD9mdW5jdGlvbih0KXtyZXR1cm4gZihzKGVbMF0sZVtkLTFdLHQpKX06Zn12YXIgQj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDEtZSgxLXQpfX0sWj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PS41P2UoMip0KS8yOigyLWUoMiooMS10KSkpLzJ9fSwkPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3codCxlKX19LE49ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0KnQqKChlKzEpKnQtZSl9fSxGPWZ1bmN0aW9uKGUpe3ZhciB0PU4oZSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybihlKj0yKTwxPy41KnQoZSk6LjUqKDItTWF0aC5wb3coMiwtMTAqKGUtMSkpKX19LFc9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LFU9JCgyKSx6PUIoVSksRz1aKFUpLEs9ZnVuY3Rpb24oZSl7cmV0dXJuIDEtTWF0aC5zaW4oTWF0aC5hY29zKGUpKX0scT1CKEspLFk9WihxKSxKPU4oMS41MjUpLFg9QihKKSxRPVooSiksZWU9RigxLjUyNSksdGU9ZnVuY3Rpb24oZSl7aWYoMT09PWV8fDA9PT1lKXJldHVybiBlO3ZhciB0PWUqZTtyZXR1cm4gZTwuMzYzNjM2MzYzNjM2MzYzNjU/Ny41NjI1KnQ6ZTwuNzI3MjcyNzI3MjcyNzI3Mz85LjA3NSp0LTkuOSplKzMuNDplPC45PzEyLjA2NjQ4MTk5NDQ1OTgzMyp0LTE5LjYzNTQ1NzA2MzcxMTkxKmUrOC44OTgwNjA5NDE4MjgyNTU6MTAuOCplKmUtMjAuNTIqZSsxMC43Mn0sbmU9Qih0ZSk7ZnVuY3Rpb24gcmUoZSx0KXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIHR8fEd9KSkuc3BsaWNlKDAsZS5sZW5ndGgtMSl9ZnVuY3Rpb24gb2UoZSl7dmFyIHQ9ZS5mcm9tLG49dm9pZCAwPT09dD8wOnQscj1lLnRvLG89dm9pZCAwPT09cj8xOnIsYT1lLmVhc2UsaT1lLm9mZnNldCxsPWUuZHVyYXRpb24scz12b2lkIDA9PT1sPzMwMDpsLGM9e2RvbmU6ITEsdmFsdWU6bn0sdT1BcnJheS5pc0FycmF5KG8pP286W24sb10sZD1mdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUqdH0pKX0oaSYmaS5sZW5ndGg9PT11Lmxlbmd0aD9pOmZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gMCE9PW4/bi8odC0xKTowfSkpfSh1KSxzKTtmdW5jdGlvbiBwKCl7cmV0dXJuIEQoZCx1LHtlYXNlOkFycmF5LmlzQXJyYXkoYSk/YTpyZSh1LGEpfSl9dmFyIGY9cCgpO3JldHVybntuZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBjLnZhbHVlPWYoZSksYy5kb25lPWU+PXMsY30sZmxpcFRhcmdldDpmdW5jdGlvbigpe3UucmV2ZXJzZSgpLGY9cCgpfX19ZnVuY3Rpb24gYWUoZSl7dmFyIHQ9ZS52ZWxvY2l0eSxuPXZvaWQgMD09PXQ/MDp0LHI9ZS5mcm9tLG89dm9pZCAwPT09cj8wOnIsYT1lLnBvd2VyLGk9dm9pZCAwPT09YT8uODphLGw9ZS50aW1lQ29uc3RhbnQscz12b2lkIDA9PT1sPzM1MDpsLGM9ZS5yZXN0RGVsdGEsdT12b2lkIDA9PT1jPy41OmMsZD1lLm1vZGlmeVRhcmdldCxwPXtkb25lOiExLHZhbHVlOm99LGY9aSpuLGg9bytmLGc9dm9pZCAwPT09ZD9oOmQoaCk7cmV0dXJuIGchPT1oJiYoZj1nLW8pLHtuZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PS1mKk1hdGguZXhwKC1lL3MpO3JldHVybiBwLmRvbmU9ISh0PnV8fHQ8LXUpLHAudmFsdWU9cC5kb25lP2c6Zyt0LHB9LGZsaXBUYXJnZXQ6ZnVuY3Rpb24oKXt9fX12YXIgaWU9e2tleWZyYW1lczpvZSxzcHJpbmc6dyxkZWNheTphZX07ZnVuY3Rpb24gbGUoZSx0LG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0wKSxlLXQtbn12YXIgc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24odCl7dmFyIG49dC5kZWx0YTtyZXR1cm4gZShuKX07cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGwuZGVmYXVsdC51cGRhdGUodCwhMCl9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gaS5jYW5jZWxTeW5jLnVwZGF0ZSh0KX19fTtmdW5jdGlvbiBjZShlKXt2YXIgdCxuLG8sYSxpLGw9ZS5mcm9tLHM9ZS5hdXRvcGxheSxjPXZvaWQgMD09PXN8fHMsdT1lLmRyaXZlcixkPXZvaWQgMD09PXU/c2U6dSxwPWUuZWxhcHNlZCxmPXZvaWQgMD09PXA/MDpwLGg9ZS5yZXBlYXQsZz12b2lkIDA9PT1oPzA6aCx2PWUucmVwZWF0VHlwZSxDPXZvaWQgMD09PXY/XCJsb29wXCI6dixtPWUucmVwZWF0RGVsYXksYj12b2lkIDA9PT1tPzA6bSx5PWUub25QbGF5LHg9ZS5vblN0b3Asaz1lLm9uQ29tcGxldGUsUz1lLm9uUmVwZWF0LE89ZS5vblVwZGF0ZSxNPXIuX19yZXN0KGUsW1wiZnJvbVwiLFwiYXV0b3BsYXlcIixcImRyaXZlclwiLFwiZWxhcHNlZFwiLFwicmVwZWF0XCIsXCJyZXBlYXRUeXBlXCIsXCJyZXBlYXREZWxheVwiLFwib25QbGF5XCIsXCJvblN0b3BcIixcIm9uQ29tcGxldGVcIixcIm9uUmVwZWF0XCIsXCJvblVwZGF0ZVwiXSksTD1NLnRvLF89MCxQPU0uZHVyYXRpb24sRT0hMSxqPSEwLFI9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlLnRvKSlyZXR1cm4gb2U7aWYoaWVbZS50eXBlXSlyZXR1cm4gaWVbZS50eXBlXTt2YXIgdD1uZXcgU2V0KE9iamVjdC5rZXlzKGUpKTtyZXR1cm4gdC5oYXMoXCJlYXNlXCIpfHx0LmhhcyhcImR1cmF0aW9uXCIpJiYhdC5oYXMoXCJkYW1waW5nUmF0aW9cIik/b2U6dC5oYXMoXCJkYW1waW5nUmF0aW9cIil8fHQuaGFzKFwic3RpZmZuZXNzXCIpfHx0LmhhcyhcIm1hc3NcIil8fHQuaGFzKFwiZGFtcGluZ1wiKXx8dC5oYXMoXCJyZXN0U3BlZWRcIil8fHQuaGFzKFwicmVzdERlbHRhXCIpP3c6b2V9KE0pOyhudWxsPT09KG49KHQ9UikubmVlZHNJbnRlcnBvbGF0aW9uKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jYWxsKHQsbCxMKSkmJihpPUQoWzAsMTAwXSxbbCxMXSx7Y2xhbXA6ITF9KSxsPTAsTD0xMDApO3ZhciBJPVIoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LE0pLHtmcm9tOmwsdG86TH0pKTtyZXR1cm4gYyYmKG51bGw9PXl8fHkoKSwobz1kKChmdW5jdGlvbihlKXtpZihqfHwoZT0tZSksZis9ZSwhRSl7dmFyIHQ9SS5uZXh0KE1hdGgubWF4KDAsZikpO2E9dC52YWx1ZSxpJiYoYT1pKGEpKSxFPWo/dC5kb25lOmY8PTB9bnVsbD09T3x8TyhhKSxFJiYoMD09PV8mJihudWxsIT1QfHwoUD1mKSksXzxnP2Z1bmN0aW9uKGUsdCxuLHIpe3JldHVybiByP2U+PXQrbjplPD0tbn0oZixQLGIsaikmJihfKyssXCJyZXZlcnNlXCI9PT1DP2Y9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PXImJihyPSEwKSxyP2xlKHQrLWUsdCxuKTp0LShlLXQpK259KGYsUCxiLGo9XyUyPT0wKTooZj1sZShmLFAsYiksXCJtaXJyb3JcIj09PUMmJkkuZmxpcFRhcmdldCgpKSxFPSExLFMmJlMoKSk6KG8uc3RvcCgpLGsmJmsoKSkpfSkpKS5zdGFydCgpKSx7c3RvcDpmdW5jdGlvbigpe251bGw9PXh8fHgoKSxvLnN0b3AoKX19fWZ1bmN0aW9uIHVlKGUsdCl7cmV0dXJuIHQ/ZSooMWUzL3QpOjB9dmFyIGRlPWZ1bmN0aW9uKGUpe3JldHVybiAxODAqZS9NYXRoLlBJfSxwZT1mdW5jdGlvbihlKXtyZXR1cm4gZX0sZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXBlKSxmdW5jdGlvbih0LG4scil7dmFyIG89bi1yLGE9LSgwLXQrMSkqKDAtZShNYXRoLmFicyhvKSkpO3JldHVybiBvPD0wP24rYTpuLWF9fSxoZT1mZSgpLGdlPWZlKE1hdGguc3FydCksdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUqTWF0aC5QSS8xODB9LENlPWZ1bmN0aW9uKGUpe3JldHVybiBlLmhhc093blByb3BlcnR5KFwieFwiKSYmZS5oYXNPd25Qcm9wZXJ0eShcInlcIil9LG1lPWZ1bmN0aW9uKGUpe3JldHVybiBDZShlKSYmZS5oYXNPd25Qcm9wZXJ0eShcInpcIil9LHdlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGguYWJzKGUtdCl9LGJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PTIpLHQ9TWF0aC5wb3coMTAsdCksTWF0aC5yb3VuZChlKnQpL3R9LHllPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj0wKSxiZShlK24qKHQtZSkvTWF0aC5tYXgocixuKSl9LHhlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDEtMyp0KzMqZX0sa2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMyp0LTYqZX0sU2U9ZnVuY3Rpb24oZSl7cmV0dXJuIDMqZX0sT2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybigoeGUodCxuKSplK2tlKHQsbikpKmUrU2UodCkpKmV9LE1lPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMyp4ZSh0LG4pKmUqZSsyKmtlKHQsbikqZStTZSh0KX0sTGU9LjE7dC5hbmdsZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1fKSxkZShNYXRoLmF0YW4yKHQueS1lLnksdC54LWUueCkpfSx0LmFuaW1hdGU9Y2UsdC5hbnRpY2lwYXRlPWVlLHQuYXBwbHlPZmZzZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj0hMDtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ZSxuPSExKSxmdW5jdGlvbihyKXtyZXR1cm4gbj9yLWUrdDooZT1yLG49ITAsdCl9fSx0LmF0dHJhY3Q9aGUsdC5hdHRyYWN0RXhwbz1nZSx0LmJhY2tJbj1KLHQuYmFja0luT3V0PVEsdC5iYWNrT3V0PVgsdC5ib3VuY2VJbj1uZSx0LmJvdW5jZUluT3V0PWZ1bmN0aW9uKGUpe3JldHVybiBlPC41Py41KigxLXRlKDEtMiplKSk6LjUqdGUoMiplLTEpKy41fSx0LmJvdW5jZU91dD10ZSx0LmNpcmNJbj1LLHQuY2lyY0luT3V0PVksdC5jaXJjT3V0PXEsdC5jbGFtcD1zLHQuY3JlYXRlQW50aWNpcGF0ZT1GLHQuY3JlYXRlQXR0cmFjdG9yPWZlLHQuY3JlYXRlQmFja0luPU4sdC5jcmVhdGVFeHBvSW49JCx0LmN1YmljQmV6aWVyPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9PT10JiZuPT09cilyZXR1cm4gVztmb3IodmFyIG89bmV3IEZsb2F0MzJBcnJheSgxMSksYT0wO2E8MTE7KythKW9bYV09T2UoYSpMZSxlLG4pO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gMD09PWF8fDE9PT1hP2E6T2UoZnVuY3Rpb24odCl7Zm9yKHZhciByPTAsYT0xOzEwIT09YSYmb1thXTw9dDsrK2Epcis9TGU7LS1hO3ZhciBpPXIrKHQtb1thXSkvKG9bYSsxXS1vW2FdKSpMZSxsPU1lKGksZSxuKTtyZXR1cm4gbD49LjAwMT9mdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIG89MDtvPDg7KytvKXt2YXIgYT1NZSh0LG4scik7aWYoMD09PWEpcmV0dXJuIHQ7dC09KE9lKHQsbixyKS1lKS9hfXJldHVybiB0fSh0LGksZSxuKTowPT09bD9pOmZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGEsaSxsPTA7ZG97KGE9T2UoaT10KyhuLXQpLzIscixvKS1lKT4wP249aTp0PWl9d2hpbGUoTWF0aC5hYnMoYSk+MWUtNyYmKytsPDEwKTtyZXR1cm4gaX0odCxyLHIrTGUsZSxuKX0oYSksdCxyKX19LHQuZGVjYXk9YWUsdC5kZWdyZWVzVG9SYWRpYW5zPXZlLHQuZGlzdGFuY2U9ZnVuY3Rpb24oZSx0KXtpZihQKGUpJiZQKHQpKXJldHVybiB3ZShlLHQpO2lmKENlKGUpJiZDZSh0KSl7dmFyIG49d2UoZS54LHQueCkscj13ZShlLnksdC55KSxvPW1lKGUpJiZtZSh0KT93ZShlLnosdC56KTowO3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cobiwyKStNYXRoLnBvdyhyLDIpK01hdGgucG93KG8sMikpfX0sdC5lYXNlSW49VSx0LmVhc2VJbk91dD1HLHQuZWFzZU91dD16LHQuaW5lcnRpYT1mdW5jdGlvbihlKXt2YXIgdCxuPWUuZnJvbSxvPXZvaWQgMD09PW4/MDpuLGE9ZS52ZWxvY2l0eSxsPXZvaWQgMD09PWE/MDphLHM9ZS5taW4sYz1lLm1heCx1PWUucG93ZXIsZD12b2lkIDA9PT11Py44OnUscD1lLnRpbWVDb25zdGFudCxmPXZvaWQgMD09PXA/NzUwOnAsaD1lLmJvdW5jZVN0aWZmbmVzcyxnPXZvaWQgMD09PWg/NTAwOmgsdj1lLmJvdW5jZURhbXBpbmcsQz12b2lkIDA9PT12PzEwOnYsbT1lLnJlc3REZWx0YSx3PXZvaWQgMD09PW0/MTptLGI9ZS5tb2RpZnlUYXJnZXQseT1lLmRyaXZlcix4PWUub25VcGRhdGUsaz1lLm9uQ29tcGxldGU7ZnVuY3Rpb24gUyhlKXtyZXR1cm4gdm9pZCAwIT09cyYmZTxzfHx2b2lkIDAhPT1jJiZlPmN9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gdm9pZCAwPT09cz9jOnZvaWQgMD09PWN8fE1hdGguYWJzKHMtZSk8TWF0aC5hYnMoYy1lKT9zOmN9ZnVuY3Rpb24gTShlKXtudWxsPT10fHx0LnN0b3AoKSx0PWNlKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxlKSx7ZHJpdmVyOnksb25VcGRhdGU6ZnVuY3Rpb24odCl7dmFyIG47bnVsbD09eHx8eCh0KSxudWxsPT09KG49ZS5vblVwZGF0ZSl8fHZvaWQgMD09PW58fG4uY2FsbChlLHQpfSxvbkNvbXBsZXRlOmt9KSl9ZnVuY3Rpb24gTChlKXtNKHIuX19hc3NpZ24oe3R5cGU6XCJzcHJpbmdcIixzdGlmZm5lc3M6ZyxkYW1waW5nOkMscmVzdERlbHRhOnd9LGUpKX1pZihTKG8pKUwoe2Zyb206byx2ZWxvY2l0eTpsLHRvOk8obyl9KTtlbHNle3ZhciBfPWQqbCtvO3ZvaWQgMCE9PWImJihfPWIoXykpO3ZhciBQLEUsaj1PKF8pLFI9aj09PXM/LTE6MTtNKHt0eXBlOlwiZGVjYXlcIixmcm9tOm8sdmVsb2NpdHk6bCx0aW1lQ29uc3RhbnQ6Zixwb3dlcjpkLHJlc3REZWx0YTp3LG1vZGlmeVRhcmdldDpiLG9uVXBkYXRlOlMoXyk/ZnVuY3Rpb24oZSl7UD1FLEU9ZSxsPXVlKGUtUCxpLmdldEZyYW1lRGF0YSgpLmRlbHRhKSwoMT09PVImJmU+anx8LTE9PT1SJiZlPGopJiZMKHtmcm9tOmUsdG86aix2ZWxvY2l0eTpsfSl9OnZvaWQgMH0pfXJldHVybntzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOnQuc3RvcCgpfX19LHQuaW50ZXJwb2xhdGU9RCx0LmlzUG9pbnQ9Q2UsdC5pc1BvaW50M0Q9bWUsdC5rZXlmcmFtZXM9b2UsdC5saW5lYXI9Vyx0Lm1pcnJvckVhc2luZz1aLHQubWl4PXgsdC5taXhDb2xvcj1MLHQubWl4Q29tcGxleD1BLHQucGlwZT1qLHQucG9pbnRGcm9tVmVjdG9yPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD12ZSh0KSx7eDpuKk1hdGguY29zKHQpK2UueCx5Om4qTWF0aC5zaW4odCkrZS55fX0sdC5wcm9ncmVzcz15LHQucmFkaWFuc1RvRGVncmVlcz1kZSx0LnJldmVyc2VFYXNpbmc9Qix0LnNtb290aD1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT01MCk7dmFyIHQ9MCxuPTA7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBvPWkuZ2V0RnJhbWVEYXRhKCkudGltZXN0YW1wLGE9byE9PW4/by1uOjAsbD1hP3llKHQscixhLGUpOnQ7cmV0dXJuIG49byx0PWwsbH19LHQuc21vb3RoRnJhbWU9eWUsdC5zbmFwPWZ1bmN0aW9uKGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0L2UpKmV9O3ZhciB0PTAsbj1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG89TWF0aC5hYnMoZVswXS1yKTtmb3IodD0xO3Q8bjt0Kyspe3ZhciBhPWVbdF0saT1NYXRoLmFicyhhLXIpO2lmKDA9PT1pKXJldHVybiBhO2lmKGk+bylyZXR1cm4gZVt0LTFdO2lmKHQ9PT1uLTEpcmV0dXJuIGE7bz1pfX19LHQuc3ByaW5nPXcsdC5zdGVwcz1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1cImVuZFwiKSxmdW5jdGlvbihuKXt2YXIgcj0obj1cImVuZFwiPT09dD9NYXRoLm1pbihuLC45OTkpOk1hdGgubWF4KG4sLjAwMSkpKmUsbz1cImVuZFwiPT09dD9NYXRoLmZsb29yKHIpOk1hdGguY2VpbChyKTtyZXR1cm4gcygwLDEsby9lKX19LHQudG9EZWNpbWFsPWJlLHQudmVsb2NpdHlQZXJGcmFtZT1mdW5jdGlvbihlLHQpe3JldHVybiBlLygxZTMvdCl9LHQudmVsb2NpdHlQZXJTZWNvbmQ9dWUsdC53cmFwPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LWU7cmV0dXJuKChuLWUpJXIrciklcitlfX0sMjcwMzooZSx0LG4pPT57dmFyIHI9big0MTQpO2Z1bmN0aW9uIG8oKXt9ZnVuY3Rpb24gYSgpe31hLnJlc2V0V2FybmluZ0NhY2hlPW8sZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixvLGEsaSl7aWYoaSE9PXIpe3ZhciBsPW5ldyBFcnJvcihcIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXNcIik7dGhyb3cgbC5uYW1lPVwiSW52YXJpYW50IFZpb2xhdGlvblwiLGx9fWZ1bmN0aW9uIHQoKXtyZXR1cm4gZX1lLmlzUmVxdWlyZWQ9ZTt2YXIgbj17YXJyYXk6ZSxiaWdpbnQ6ZSxib29sOmUsZnVuYzplLG51bWJlcjplLG9iamVjdDplLHN0cmluZzplLHN5bWJvbDplLGFueTplLGFycmF5T2Y6dCxlbGVtZW50OmUsZWxlbWVudFR5cGU6ZSxpbnN0YW5jZU9mOnQsbm9kZTplLG9iamVjdE9mOnQsb25lT2Y6dCxvbmVPZlR5cGU6dCxzaGFwZTp0LGV4YWN0OnQsY2hlY2tQcm9wVHlwZXM6YSxyZXNldFdhcm5pbmdDYWNoZTpvfTtyZXR1cm4gbi5Qcm9wVHlwZXM9bixufX0sNTY5NzooZSx0LG4pPT57ZS5leHBvcnRzPW4oMjcwMykoKX0sNDE0OmU9PntlLmV4cG9ydHM9XCJTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRFwifSw3MjkyOihlLHQsbik9PntuLnIodCksbi5kKHQse0NhbGVuZGFyOigpPT5YbixDZW50dXJ5VmlldzooKT0+RXQsRGVjYWRlVmlldzooKT0+TnQsTW9udGhWaWV3OigpPT5MbixOYXZpZ2F0aW9uOigpPT5OZSxZZWFyVmlldzooKT0+dG4sZGVmYXVsdDooKT0+dHJ9KTt2YXIgcj1uKDY2ODkpLG89bi5uKHIpLGE9big1Njk3KSxpPW4ubihhKTtmdW5jdGlvbiBsKGUpe3ZhciB0LG4scj1cIlwiO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZSlyKz1lO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIGUpaWYoQXJyYXkuaXNBcnJheShlKSlmb3IodD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0mJihuPWwoZVt0XSkpJiYociYmKHIrPVwiIFwiKSxyKz1uKTtlbHNlIGZvcih0IGluIGUpZVt0XSYmKHImJihyKz1cIiBcIikscis9dCk7cmV0dXJuIHJ9Y29uc3Qgcz1mdW5jdGlvbigpe2Zvcih2YXIgZSx0LG49MCxyPVwiXCI7bjxhcmd1bWVudHMubGVuZ3RoOykoZT1hcmd1bWVudHNbbisrXSkmJih0PWwoZSkpJiYociYmKHIrPVwiIFwiKSxyKz10KTtyZXR1cm4gcn07dmFyIGM9big3NzMpLHU9bi5uKGMpO2Z1bmN0aW9uIGQoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfXZhciBwPXUoKSgoZnVuY3Rpb24oZSl7dmFyIHQsbj12b2lkIDA9PT1lP3t9OmUscj1uLnVzZUZhbGxiYWNrTG9jYWxlLG89dm9pZCAwPT09cnx8cixhPW4uZmFsbGJhY2tMb2NhbGUsaT12b2lkIDA9PT1hP1wiZW4tVVNcIjphLGw9W107aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyl7dmFyIHM9d2luZG93Lm5hdmlnYXRvcjtsPWwuY29uY2F0KHMubGFuZ3VhZ2VzLHMubGFuZ3VhZ2Uscy51c2VyTGFuZ3VhZ2Uscy5icm93c2VyTGFuZ3VhZ2Uscy5zeXN0ZW1MYW5ndWFnZSl9cmV0dXJuIG8mJmwucHVzaChpKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe2lmKCFlfHwtMT09PWUuaW5kZXhPZihcIi1cIil8fGUudG9Mb3dlckNhc2UoKSE9PWUpcmV0dXJuIGU7dmFyIHQ9ZS5zcGxpdChcIi1cIik7cmV0dXJuIHRbMF0rXCItXCIrdFsxXS50b1VwcGVyQ2FzZSgpfSkpfSgodD1sKS5maWx0ZXIoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGUmJnQuaW5kZXhPZihlKT09PW59KSkpfSksZCksZj11KCkoKGZ1bmN0aW9uKGUpe3JldHVybiBwKGUpWzBdfHxudWxsfSksZCk7Y29uc3QgaD1mO2Z1bmN0aW9uIGcoZSx0LG4pe3JldHVybiBmdW5jdGlvbihyLG8pe3ZvaWQgMD09PW8mJihvPW4pO3ZhciBhPWUocikrbztyZXR1cm4gdChhKX19ZnVuY3Rpb24gdihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEYXRlKGUodCkuZ2V0VGltZSgpLTEpfX1mdW5jdGlvbiBDKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybltlKG4pLHQobildfX1mdW5jdGlvbiBtKGUpe2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBlLmdldEZ1bGxZZWFyKCk7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGU7dmFyIHQ9cGFyc2VJbnQoZSwxMCk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJiFpc05hTih0KSlyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IHllYXIgZnJvbSBkYXRlOiBcIi5jb25jYXQoZSxcIi5cIikpfWZ1bmN0aW9uIHcoZSl7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGUuZ2V0TW9udGgoKTt0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IG1vbnRoIGZyb20gZGF0ZTogXCIuY29uY2F0KGUsXCIuXCIpKX1mdW5jdGlvbiBiKGUpe2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBlLmdldERhdGUoKTt0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IHllYXIgZnJvbSBkYXRlOiBcIi5jb25jYXQoZSxcIi5cIikpfWZ1bmN0aW9uIHkoZSl7dmFyIHQ9bShlKSxuPXQrKDEtdCklMTAwLHI9bmV3IERhdGU7cmV0dXJuIHIuc2V0RnVsbFllYXIobiwwLDEpLHIuc2V0SG91cnMoMCwwLDAsMCkscn12YXIgeD1nKG0seSwtMTAwKSxrPWcobSx5LDEwMCksUz12KGspLE89ZyhtLFMsLTEwMCksTT0oZyhtLFMsMTAwKSxDKHksUykpO2Z1bmN0aW9uIEwoZSl7dmFyIHQ9bShlKSxuPXQrKDEtdCklMTAscj1uZXcgRGF0ZTtyZXR1cm4gci5zZXRGdWxsWWVhcihuLDAsMSksci5zZXRIb3VycygwLDAsMCwwKSxyfXZhciBfPWcobSxMLC0xMCksUD1nKG0sTCwxMCksRT12KFApLGo9ZyhtLEUsLTEwKSxSPShnKG0sRSwxMCksQyhMLEUpKTtmdW5jdGlvbiBJKGUpe3ZhciB0PW0oZSksbj1uZXcgRGF0ZTtyZXR1cm4gbi5zZXRGdWxsWWVhcih0LDAsMSksbi5zZXRIb3VycygwLDAsMCwwKSxufXZhciBWPWcobSxJLC0xKSxIPWcobSxJLDEpLEE9dihIKSxUPWcobSxBLC0xKSxEPShnKG0sQSwxKSxDKEksQSkpO2Z1bmN0aW9uIEIoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2b2lkIDA9PT1yJiYocj10KTt2YXIgbz1tKG4pLGE9dyhuKStyLGk9bmV3IERhdGU7cmV0dXJuIGkuc2V0RnVsbFllYXIobyxhLDEpLGkuc2V0SG91cnMoMCwwLDAsMCksZShpKX19ZnVuY3Rpb24gWihlKXt2YXIgdD1tKGUpLG49dyhlKSxyPW5ldyBEYXRlO3JldHVybiByLnNldEZ1bGxZZWFyKHQsbiwxKSxyLnNldEhvdXJzKDAsMCwwLDApLHJ9dmFyICQ9QihaLC0xKSxOPUIoWiwxKSxGPXYoTiksVz1CKEYsLTEpLFU9KEIoRiwxKSxDKFosRikpO2Z1bmN0aW9uIHooZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2b2lkIDA9PT1yJiYocj10KTt2YXIgbz1tKG4pLGE9dyhuKSxpPWIobikrcixsPW5ldyBEYXRlO3JldHVybiBsLnNldEZ1bGxZZWFyKG8sYSxpKSxsLnNldEhvdXJzKDAsMCwwLDApLGUobCl9fWZ1bmN0aW9uIEcoZSl7dmFyIHQ9bShlKSxuPXcoZSkscj1iKGUpLG89bmV3IERhdGU7cmV0dXJuIG8uc2V0RnVsbFllYXIodCxuLHIpLG8uc2V0SG91cnMoMCwwLDAsMCksb316KEcsLTEpO3ZhciBLLHE9dih6KEcsMSkpLFk9KHoocSwtMSkseihxLDEpLEMoRyxxKSk7ZnVuY3Rpb24gSihlKXtyZXR1cm4gYihGKGUpKX1mdW5jdGlvbiBYKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gUShlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9dmFyIGVlLHRlPXtBUkFCSUM6XCJBcmFiaWNcIixIRUJSRVc6XCJIZWJyZXdcIixJU09fODYwMTpcIklTTyA4NjAxXCIsVVM6XCJVU1wifSxuZT0oUShLPXt9LHRlLlVTLFtcImVuLUNBXCIsXCJlbi1VU1wiLFwiZXMtQVJcIixcImVzLUJPXCIsXCJlcy1DTFwiLFwiZXMtQ09cIixcImVzLUNSXCIsXCJlcy1ET1wiLFwiZXMtRUNcIixcImVzLUdUXCIsXCJlcy1ITlwiLFwiZXMtTVhcIixcImVzLU5JXCIsXCJlcy1QQVwiLFwiZXMtUEVcIixcImVzLVBSXCIsXCJlcy1TVlwiLFwiZXMtVkVcIixcInB0LUJSXCJdKSxRKEssdGUuQVJBQklDLFtcImFyXCIsXCJhci1BRVwiLFwiYXItQkhcIixcImFyLURaXCIsXCJhci1FR1wiLFwiYXItSVFcIixcImFyLUpPXCIsXCJhci1LV1wiLFwiYXItTFlcIixcImFyLU9NXCIsXCJhci1RQVwiLFwiYXItU0FcIixcImFyLVNEXCIsXCJhci1TWVwiLFwiYXItWUVcIixcImR2XCIsXCJkdi1NVlwiLFwicHNcIixcInBzLUFSXCJdKSxRKEssdGUuSEVCUkVXLFtcImhlXCIsXCJoZS1JTFwiXSksSykscmU9KGVlPUFycmF5KDcpLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIFgoZSl9KGVlKXx8ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZWUpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBYKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVyblwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bj9BcnJheS5mcm9tKGUpOlwiQXJndW1lbnRzXCI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9YKGUsdCk6dm9pZCAwfX0oZWUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9KSksb2U9bmV3IE1hcDtmdW5jdGlvbiBhZShlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9dHx8aCgpO29lLmhhcyhyKXx8b2Uuc2V0KHIsbmV3IE1hcCk7dmFyIG89b2UuZ2V0KHIpO3JldHVybiBvLmhhcyhlKXx8by5zZXQoZSxuZXcgSW50bC5EYXRlVGltZUZvcm1hdChyLGUpLmZvcm1hdCksby5nZXQoZSkobil9fShlKSh0LGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBuZXcgRGF0ZSh0LnNldEhvdXJzKDEyKSl9KG4pKX19YWUoe2RheTpcIm51bWVyaWNcIixtb250aDpcIm51bWVyaWNcIix5ZWFyOlwibnVtZXJpY1wifSk7dmFyIGllPWFlKHtkYXk6XCJudW1lcmljXCJ9KSxsZT1hZSh7ZGF5OlwibnVtZXJpY1wiLG1vbnRoOlwibG9uZ1wiLHllYXI6XCJudW1lcmljXCJ9KSxzZT1hZSh7bW9udGg6XCJsb25nXCJ9KSxjZT1hZSh7bW9udGg6XCJsb25nXCIseWVhcjpcIm51bWVyaWNcIn0pLHVlPWFlKHt3ZWVrZGF5Olwic2hvcnRcIn0pLGRlPWFlKHt3ZWVrZGF5OlwibG9uZ1wifSkscGU9YWUoe3llYXI6XCJudW1lcmljXCJ9KSxmZT1yZVswXSxoZT1yZVs1XSxnZT1yZVs2XTtmdW5jdGlvbiB2ZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGUuSVNPXzg2MDEsbj1lLmdldERheSgpO3N3aXRjaCh0KXtjYXNlIHRlLklTT184NjAxOnJldHVybihuKzYpJTc7Y2FzZSB0ZS5BUkFCSUM6cmV0dXJuKG4rMSklNztjYXNlIHRlLkhFQlJFVzpjYXNlIHRlLlVTOnJldHVybiBuO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgY2FsZW5kYXIgdHlwZS5cIil9fWZ1bmN0aW9uIENlKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0ZS5JU09fODYwMSxuPW0oZSkscj13KGUpLG89ZS5nZXREYXRlKCktdmUoZSx0KTtyZXR1cm4gbmV3IERhdGUobixyLG8pfWZ1bmN0aW9uIG1lKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4geSh0KTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gTCh0KTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIEkodCk7Y2FzZVwibW9udGhcIjpyZXR1cm4gWih0KTtjYXNlXCJkYXlcIjpyZXR1cm4gRyh0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX1mdW5jdGlvbiB3ZShlLHQpe3N3aXRjaChlKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIGsodCk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIFAodCk7Y2FzZVwieWVhclwiOnJldHVybiBIKHQpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIE4odCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19dmFyIGJlPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImRlY2FkZVwiOnJldHVybiBfKHQsLTEwMCk7Y2FzZVwieWVhclwiOnJldHVybiBWKHQsLTEwKTtjYXNlXCJtb250aFwiOnJldHVybiAkKHQsLTEyKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX0seWU9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIFAodCwxMDApO2Nhc2VcInllYXJcIjpyZXR1cm4gSCh0LDEwKTtjYXNlXCJtb250aFwiOnJldHVybiBOKHQsMTIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fTtmdW5jdGlvbiB4ZShlLHQpe3N3aXRjaChlKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIFModCk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIEUodCk7Y2FzZVwieWVhclwiOnJldHVybiBBKHQpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIEYodCk7Y2FzZVwiZGF5XCI6cmV0dXJuIHEodCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19dmFyIGtlPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImRlY2FkZVwiOnJldHVybiBqKHQsLTEwMCk7Y2FzZVwieWVhclwiOnJldHVybiBUKHQsLTEwKTtjYXNlXCJtb250aFwiOnJldHVybiBXKHQsLTEyKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX07ZnVuY3Rpb24gU2UoZSx0KXtzd2l0Y2goZSl7Y2FzZVwiY2VudHVyeVwiOnJldHVybiBNKHQpO2Nhc2VcImRlY2FkZVwiOnJldHVybiBSKHQpO2Nhc2VcInllYXJcIjpyZXR1cm4gRCh0KTtjYXNlXCJtb250aFwiOnJldHVybiBVKHQpO2Nhc2VcImRheVwiOnJldHVybiBZKHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fWZ1bmN0aW9uIE9lKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpwZTtyZXR1cm4oYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0pKS5qb2luKFwiIOKAkyBcIil9ZnVuY3Rpb24gTWUoZSx0LG4pe3JldHVybiBPZShlLHQsUihuKSl9ZnVuY3Rpb24gTGUoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRlLklTT184NjAxLG49ZS5nZXREYXkoKTtzd2l0Y2godCl7Y2FzZSB0ZS5BUkFCSUM6Y2FzZSB0ZS5IRUJSRVc6cmV0dXJuIG49PT1oZXx8bj09PWdlO2Nhc2UgdGUuSVNPXzg2MDE6Y2FzZSB0ZS5VUzpyZXR1cm4gbj09PWdlfHxuPT09ZmU7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBjYWxlbmRhciB0eXBlLlwiKX19ZnVuY3Rpb24gX2UoZSl7cmV0dXJuIF9lPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LF9lKGUpfXZhciBQZT1PYmplY3QudmFsdWVzKHRlKSxFZT1bXCJjZW50dXJ5XCIsXCJkZWNhZGVcIixcInllYXJcIixcIm1vbnRoXCJdLGplPWkoKS5vbmVPZihQZSksUmU9aSgpLm9uZU9mVHlwZShbaSgpLnN0cmluZyxpKCkuYXJyYXlPZihpKCkuc3RyaW5nKV0pLEllPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lW3RdO2lmKCFyKXJldHVybiBudWxsO2lmKCEociBpbnN0YW5jZW9mIERhdGUpKXJldHVybiBuZXcgRXJyb3IoXCJJbnZhbGlkIHByb3AgYFwiLmNvbmNhdCh0LFwiYCBvZiB0eXBlIGBcIikuY29uY2F0KF9lKHIpLFwiYCBzdXBwbGllZCB0byBgXCIpLmNvbmNhdChuLFwiYCwgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgYERhdGVgLlwiKSk7dmFyIG89ZS5tYXhEYXRlO3JldHVybiBvJiZyPm8/bmV3IEVycm9yKFwiSW52YWxpZCBwcm9wIGBcIi5jb25jYXQodCxcImAgb2YgdHlwZSBgXCIpLmNvbmNhdChfZShyKSxcImAgc3VwcGxpZWQgdG8gYFwiKS5jb25jYXQobixcImAsIG1pbkRhdGUgY2Fubm90IGJlIGxhcmdlciB0aGFuIG1heERhdGUuXCIpKTpudWxsfSxWZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZVt0XTtpZighcilyZXR1cm4gbnVsbDtpZighKHIgaW5zdGFuY2VvZiBEYXRlKSlyZXR1cm4gbmV3IEVycm9yKFwiSW52YWxpZCBwcm9wIGBcIi5jb25jYXQodCxcImAgb2YgdHlwZSBgXCIpLmNvbmNhdChfZShyKSxcImAgc3VwcGxpZWQgdG8gYFwiKS5jb25jYXQobixcImAsIGV4cGVjdGVkIGluc3RhbmNlIG9mIGBEYXRlYC5cIikpO3ZhciBvPWUubWluRGF0ZTtyZXR1cm4gbyYmcjxvP25ldyBFcnJvcihcIkludmFsaWQgcHJvcCBgXCIuY29uY2F0KHQsXCJgIG9mIHR5cGUgYFwiKS5jb25jYXQoX2UociksXCJgIHN1cHBsaWVkIHRvIGBcIikuY29uY2F0KG4sXCJgLCBtYXhEYXRlIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gbWluRGF0ZS5cIikpOm51bGx9LEhlPWkoKS5vbmVPZlR5cGUoW2koKS5mdW5jLGkoKS5zaGFwZSh7Y3VycmVudDppKCkuYW55fSldKSxBZT1pKCkub25lT2ZUeXBlKFtpKCkuaW5zdGFuY2VPZihEYXRlKSxpKCkuYXJyYXlPZihpKCkuaW5zdGFuY2VPZihEYXRlKSldKSxUZT1pKCkuYXJyYXlPZihpKCkub25lT2YoRWUpKSxEZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZVt0XSxvPWUudmlld3N8fEVlO3JldHVybiB2b2lkIDAhPT1yJiYtMT09PW8uaW5kZXhPZihyKT9uZXcgRXJyb3IoXCJJbnZhbGlkIHByb3AgYFwiLmNvbmNhdCh0LFwiYCBvZiB2YWx1ZSBgXCIpLmNvbmNhdChyLFwiYCBzdXBwbGllZCB0byBgXCIpLmNvbmNhdChuLFwiYCwgZXhwZWN0ZWQgb25lIG9mIFtcIikuY29uY2F0KG8ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4nXCInLmNvbmNhdChlLCdcIicpfSkpLmpvaW4oXCIsIFwiKSxcIl0uXCIpKTpudWxsfTtEZS5pc1JlcXVpcmVkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lW3RdO3JldHVybiByP0RlKGUsdCxuKTpuZXcgRXJyb3IoXCJUaGUgcHJvcCBgXCIuY29uY2F0KHQsXCJgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiBgXCIpLmNvbmNhdChuLFwiYCwgYnV0IGl0cyB2YWx1ZSBpcyBgXCIpLmNvbmNhdChyLFwiYC5cIikpfTt2YXIgQmU9e2FjdGl2ZVN0YXJ0RGF0ZTppKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGhvdmVyOmkoKS5pbnN0YW5jZU9mKERhdGUpLGxvY2FsZTppKCkuc3RyaW5nLG1heERhdGU6VmUsbWluRGF0ZTpJZSxvbkNsaWNrOmkoKS5mdW5jLG9uTW91c2VPdmVyOmkoKS5mdW5jLHRpbGVDbGFzc05hbWU6aSgpLm9uZU9mVHlwZShbaSgpLmZ1bmMsUmVdKSx0aWxlQ29udGVudDppKCkub25lT2ZUeXBlKFtpKCkuZnVuYyxpKCkubm9kZV0pLHZhbHVlOkFlLHZhbHVlVHlwZTppKCkuc3RyaW5nfSxaZT17YWN0aXZlU3RhcnREYXRlOmkoKS5pbnN0YW5jZU9mKERhdGUpLmlzUmVxdWlyZWQsY2xhc3NlczppKCkuYXJyYXlPZihpKCkuc3RyaW5nKS5pc1JlcXVpcmVkLGRhdGU6aSgpLmluc3RhbmNlT2YoRGF0ZSkuaXNSZXF1aXJlZCxsb2NhbGU6aSgpLnN0cmluZyxtYXhEYXRlOlZlLG1pbkRhdGU6SWUsb25DbGljazppKCkuZnVuYyxvbk1vdXNlT3ZlcjppKCkuZnVuYyxzdHlsZTppKCkub2JqZWN0T2YoaSgpLm9uZU9mVHlwZShbaSgpLnN0cmluZyxpKCkubnVtYmVyXSkpLHRpbGVDbGFzc05hbWU6aSgpLm9uZU9mVHlwZShbaSgpLmZ1bmMsUmVdKSx0aWxlQ29udGVudDppKCkub25lT2ZUeXBlKFtpKCkuZnVuYyxpKCkubm9kZV0pLHRpbGVEaXNhYmxlZDppKCkuZnVuY30sJGU9XCJyZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvblwiO2Z1bmN0aW9uIE5lKGUpe3ZhciB0LG49ZS5hY3RpdmVTdGFydERhdGUscj1lLmRyaWxsVXAsYT1lLmZvcm1hdE1vbnRoWWVhcixpPXZvaWQgMD09PWE/Y2U6YSxsPWUuZm9ybWF0WWVhcixzPXZvaWQgMD09PWw/cGU6bCxjPWUubG9jYWxlLHU9ZS5tYXhEYXRlLGQ9ZS5taW5EYXRlLHA9ZS5uYXZpZ2F0aW9uQXJpYUxhYmVsLGg9dm9pZCAwPT09cD9cIlwiOnAsZz1lLm5hdmlnYXRpb25BcmlhTGl2ZSx2PWUubmF2aWdhdGlvbkxhYmVsLEM9ZS5uZXh0MkFyaWFMYWJlbCxtPXZvaWQgMD09PUM/XCJcIjpDLHc9ZS5uZXh0MkxhYmVsLGI9dm9pZCAwPT09dz9cIsK7XCI6dyx5PWUubmV4dEFyaWFMYWJlbCxrPXZvaWQgMD09PXk/XCJcIjp5LFM9ZS5uZXh0TGFiZWwsTD12b2lkIDA9PT1TP1wi4oC6XCI6UyxQPWUucHJldjJBcmlhTGFiZWwsRT12b2lkIDA9PT1QP1wiXCI6UCxSPWUucHJldjJMYWJlbCxJPXZvaWQgMD09PVI/XCLCq1wiOlIsSD1lLnByZXZBcmlhTGFiZWwsQT12b2lkIDA9PT1IP1wiXCI6SCxEPWUucHJldkxhYmVsLEI9dm9pZCAwPT09RD9cIuKAuVwiOkQsWj1lLnNldEFjdGl2ZVN0YXJ0RGF0ZSxOPWUuc2hvd0RvdWJsZVZpZXcsRj1lLnZpZXcsVT1lLnZpZXdzLmluZGV4T2YoRik+MCx6PVwiY2VudHVyeVwiIT09RixHPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4geCh0KTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gXyh0KTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIFYodCk7Y2FzZVwibW9udGhcIjpyZXR1cm4gJCh0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX0oRixuKSxLPXomJmJlKEYsbikscT13ZShGLG4pLFk9eiYmeWUoRixuKSxKPWZ1bmN0aW9uKCl7aWYoRy5nZXRGdWxsWWVhcigpPDApcmV0dXJuITA7dmFyIGU9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiY2VudHVyeVwiOnJldHVybiBPKHQpO2Nhc2VcImRlY2FkZVwiOnJldHVybiBqKHQpO2Nhc2VcInllYXJcIjpyZXR1cm4gVCh0KTtjYXNlXCJtb250aFwiOnJldHVybiBXKHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fShGLG4pO3JldHVybiBkJiZkPj1lfSgpLFg9eiYmZnVuY3Rpb24oKXtpZihLLmdldEZ1bGxZZWFyKCk8MClyZXR1cm4hMDt2YXIgZT1rZShGLG4pO3JldHVybiBkJiZkPj1lfSgpLFE9dSYmdTxxLGVlPXomJnUmJnU8WTtmdW5jdGlvbiB0ZShlKXt2YXIgdD1mdW5jdGlvbigpe3N3aXRjaChGKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gT2UoZSx0LE0obikpfShjLHMsZSk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIE1lKGMscyxlKTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIHMoYyxlKTtjYXNlXCJtb250aFwiOnJldHVybiBpKGMsZSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHZpZXc6IFwiLmNvbmNhdChGLFwiLlwiKSl9fSgpO3JldHVybiB2P3Yoe2RhdGU6ZSxsYWJlbDp0LGxvY2FsZTpjfHxmKCksdmlldzpGfSk6dH1yZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOiRlfSxudWxsIT09SSYmeiYmbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6RSxjbGFzc05hbWU6XCJcIi5jb25jYXQoJGUsXCJfX2Fycm93IFwiKS5jb25jYXQoJGUsXCJfX3ByZXYyLWJ1dHRvblwiKSxkaXNhYmxlZDpYLG9uQ2xpY2s6ZnVuY3Rpb24oKXtaKEssXCJwcmV2MlwiKX0sdHlwZTpcImJ1dHRvblwifSxJKSxudWxsIT09QiYmbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6QSxjbGFzc05hbWU6XCJcIi5jb25jYXQoJGUsXCJfX2Fycm93IFwiKS5jb25jYXQoJGUsXCJfX3ByZXYtYnV0dG9uXCIpLGRpc2FibGVkOkosb25DbGljazpmdW5jdGlvbigpe1ooRyxcInByZXZcIil9LHR5cGU6XCJidXR0b25cIn0sQiksKHQ9XCJcIi5jb25jYXQoJGUsXCJfX2xhYmVsXCIpLG8oKS5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIse1wiYXJpYS1sYWJlbFwiOmgsXCJhcmlhLWxpdmVcIjpnLGNsYXNzTmFtZTp0LGRpc2FibGVkOiFVLG9uQ2xpY2s6cixzdHlsZTp7ZmxleEdyb3c6MX0sdHlwZTpcImJ1dHRvblwifSxvKCkuY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwiXCIuY29uY2F0KHQsXCJfX2xhYmVsVGV4dCBcIikuY29uY2F0KHQsXCJfX2xhYmVsVGV4dC0tZnJvbVwiKX0sdGUobikpLE4mJm8oKS5jcmVhdGVFbGVtZW50KG8oKS5GcmFnbWVudCxudWxsLG8oKS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJcIi5jb25jYXQodCxcIl9fZGl2aWRlclwiKX0sXCIg4oCTIFwiKSxvKCkuY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwiXCIuY29uY2F0KHQsXCJfX2xhYmVsVGV4dCBcIikuY29uY2F0KHQsXCJfX2xhYmVsVGV4dC0tdG9cIil9LHRlKHEpKSkpKSxudWxsIT09TCYmbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6ayxjbGFzc05hbWU6XCJcIi5jb25jYXQoJGUsXCJfX2Fycm93IFwiKS5jb25jYXQoJGUsXCJfX25leHQtYnV0dG9uXCIpLGRpc2FibGVkOlEsb25DbGljazpmdW5jdGlvbigpe1oocSxcIm5leHRcIil9LHR5cGU6XCJidXR0b25cIn0sTCksbnVsbCE9PWImJnomJm8oKS5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIse1wiYXJpYS1sYWJlbFwiOm0sY2xhc3NOYW1lOlwiXCIuY29uY2F0KCRlLFwiX19hcnJvdyBcIikuY29uY2F0KCRlLFwiX19uZXh0Mi1idXR0b25cIiksZGlzYWJsZWQ6ZWUsb25DbGljazpmdW5jdGlvbigpe1ooWSxcIm5leHQyXCIpfSx0eXBlOlwiYnV0dG9uXCJ9LGIpKX1OZS5wcm9wVHlwZXM9e2FjdGl2ZVN0YXJ0RGF0ZTppKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGRyaWxsVXA6aSgpLmZ1bmMuaXNSZXF1aXJlZCxmb3JtYXRNb250aFllYXI6aSgpLmZ1bmMsZm9ybWF0WWVhcjppKCkuZnVuYyxsb2NhbGU6aSgpLnN0cmluZyxtYXhEYXRlOmkoKS5pbnN0YW5jZU9mKERhdGUpLG1pbkRhdGU6aSgpLmluc3RhbmNlT2YoRGF0ZSksbmF2aWdhdGlvbkFyaWFMYWJlbDppKCkuc3RyaW5nLG5hdmlnYXRpb25BcmlhTGl2ZTppKCkuc3RyaW5nLG5hdmlnYXRpb25MYWJlbDppKCkuZnVuYyxuZXh0MkFyaWFMYWJlbDppKCkuc3RyaW5nLG5leHQyTGFiZWw6aSgpLm5vZGUsbmV4dEFyaWFMYWJlbDppKCkuc3RyaW5nLG5leHRMYWJlbDppKCkubm9kZSxwcmV2MkFyaWFMYWJlbDppKCkuc3RyaW5nLHByZXYyTGFiZWw6aSgpLm5vZGUscHJldkFyaWFMYWJlbDppKCkuc3RyaW5nLHByZXZMYWJlbDppKCkubm9kZSxzZXRBY3RpdmVTdGFydERhdGU6aSgpLmZ1bmMuaXNSZXF1aXJlZCxzaG93RG91YmxlVmlldzppKCkuYm9vbCx2aWV3OkRlLmlzUmVxdWlyZWQsdmlld3M6VGUuaXNSZXF1aXJlZH07dmFyIEZlPVtcImNoaWxkcmVuXCIsXCJjbGFzc05hbWVcIixcImRpcmVjdGlvblwiLFwiY291bnRcIixcIm9mZnNldFwiLFwic3R5bGVcIixcIndyYXBcIl07ZnVuY3Rpb24gV2UoKXtyZXR1cm4gV2U9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxXZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVWUoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIHplKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1VlKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7R2UoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlVlKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIEdlKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBLZShlKXtyZXR1cm5cIlwiLmNvbmNhdChlLFwiJVwiKX1mdW5jdGlvbiBxZShlKXt2YXIgdD1lLmNoaWxkcmVuLG49ZS5jbGFzc05hbWUscj1lLmRpcmVjdGlvbixhPWUuY291bnQsaT1lLm9mZnNldCxsPWUuc3R5bGUscz1lLndyYXAsYz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsRmUpO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLFdlKHtjbGFzc05hbWU6bixzdHlsZTp6ZSh7ZGlzcGxheTpcImZsZXhcIixmbGV4RGlyZWN0aW9uOnIsZmxleFdyYXA6cz9cIndyYXBcIjpcIm5vLXdyYXBcIn0sbCl9LGMpLG8oKS5DaGlsZHJlbi5tYXAodCwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbygpLmNsb25lRWxlbWVudChlLHplKHplKHt9LGUucHJvcHMpLHt9LHtzdHlsZTp7ZmxleEJhc2lzOktlKDEwMC9hKSxmbGV4U2hyaW5rOjAsZmxleEdyb3c6MCxvdmVyZmxvdzpcImhpZGRlblwiLG1hcmdpbkxlZnQ6aSYmMD09PXQ/S2UoMTAwKmkvYSk6bnVsbH19KSl9KSkpfWZ1bmN0aW9uIFllKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBKZShlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVtcIkBAaXRlcmF0b3JcIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBKZShlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm5cIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4/QXJyYXkuZnJvbShlKTpcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/SmUoZSx0KTp2b2lkIDB9fShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBKZShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIFhlKGUsdCl7cmV0dXJuIHRbMF08PWUmJnRbMV0+PWV9ZnVuY3Rpb24gUWUoZSx0KXtyZXR1cm4gWGUoZVswXSx0KXx8WGUoZVsxXSx0KX1mdW5jdGlvbiBldChlLHQsbil7dmFyIHI9W107aWYoUWUodCxlKSl7ci5wdXNoKG4pO3ZhciBvPVhlKGVbMF0sdCksYT1YZShlWzFdLHQpO28mJnIucHVzaChcIlwiLmNvbmNhdChuLFwiU3RhcnRcIikpLGEmJnIucHVzaChcIlwiLmNvbmNhdChuLFwiRW5kXCIpKSxvJiZhJiZyLnB1c2goXCJcIi5jb25jYXQobixcIkJvdGhFbmRzXCIpKX1yZXR1cm4gcn1mdW5jdGlvbiB0dCgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWUudmFsdWUsbj1lLnZhbHVlVHlwZSxyPWUuZGF0ZSxvPWUuZGF0ZVR5cGUsYT1lLmhvdmVyLGk9XCJyZWFjdC1jYWxlbmRhcl9fdGlsZVwiLGw9W2ldO2lmKCFyKXJldHVybiBsO2lmKCFBcnJheS5pc0FycmF5KHIpJiYhbyl0aHJvdyBuZXcgRXJyb3IoXCJnZXRUaWxlQ2xhc3NlcygpOiBVbmFibGUgdG8gZ2V0IHRpbGUgYWN0aXZpdHkgY2xhc3NlcyBiZWNhdXNlIG9uZSBvciBtb3JlIHJlcXVpcmVkIGFyZ3VtZW50cyB3ZXJlIG5vdCBwYXNzZWQuXCIpO3ZhciBzPW5ldyBEYXRlLGM9QXJyYXkuaXNBcnJheShyKT9yOlNlKG8scik7aWYoWGUocyxjKSYmbC5wdXNoKFwiXCIuY29uY2F0KGksXCItLW5vd1wiKSksIXQpcmV0dXJuIGw7aWYoIUFycmF5LmlzQXJyYXkodCkmJiFuKXRocm93IG5ldyBFcnJvcihcImdldFRpbGVDbGFzc2VzKCk6IFVuYWJsZSB0byBnZXQgdGlsZSBhY3Rpdml0eSBjbGFzc2VzIGJlY2F1c2Ugb25lIG9yIG1vcmUgcmVxdWlyZWQgYXJndW1lbnRzIHdlcmUgbm90IHBhc3NlZC5cIik7dmFyIHUsZCxwPUFycmF5LmlzQXJyYXkodCk/dDpTZShuLHQpO2Q9YywodT1wKVswXTw9ZFswXSYmdVsxXT49ZFsxXT9sLnB1c2goXCJcIi5jb25jYXQoaSxcIi0tYWN0aXZlXCIpKTpRZShwLGMpJiZsLnB1c2goXCJcIi5jb25jYXQoaSxcIi0taGFzQWN0aXZlXCIpKTt2YXIgZj1ldChwLGMsXCJcIi5jb25jYXQoaSxcIi0tcmFuZ2VcIikpO2wucHVzaC5hcHBseShsLFllKGYpKTt2YXIgaD1bXS5jb25jYXQodCk7aWYoYSYmMT09PWgubGVuZ3RoKXt2YXIgZz1ldChhPnBbMF0/W3BbMF0sYV06W2EscFswXV0sYyxcIlwiLmNvbmNhdChpLFwiLS1ob3ZlclwiKSk7bC5wdXNoLmFwcGx5KGwsWWUoZykpfXJldHVybiBsfXFlLnByb3BUeXBlcz17Y2hpbGRyZW46aSgpLm5vZGUsY2xhc3NOYW1lOmkoKS5zdHJpbmcsY291bnQ6aSgpLm51bWJlci5pc1JlcXVpcmVkLGRpcmVjdGlvbjppKCkuc3RyaW5nLG9mZnNldDppKCkubnVtYmVyLHN0eWxlOmkoKS5vYmplY3RPZihpKCkub25lT2ZUeXBlKFtpKCkuc3RyaW5nLGkoKS5udW1iZXJdKSksd3JhcDppKCkuYm9vbH07dmFyIG50PVtcImNsYXNzTmFtZVwiLFwiY291bnRcIixcImRhdGVUcmFuc2Zvcm1cIixcImRhdGVUeXBlXCIsXCJlbmRcIixcImhvdmVyXCIsXCJvZmZzZXRcIixcInN0YXJ0XCIsXCJzdGVwXCIsXCJ0aWxlXCIsXCJ2YWx1ZVwiLFwidmFsdWVUeXBlXCJdO2Z1bmN0aW9uIHJ0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBvdChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9ydChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe2F0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpydChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBhdChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gaXQoKXtyZXR1cm4gaXQ9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxpdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbHQoZSl7Zm9yKHZhciB0PWUuY2xhc3NOYW1lLG49ZS5jb3VudCxyPXZvaWQgMD09PW4/MzpuLGE9ZS5kYXRlVHJhbnNmb3JtLGk9ZS5kYXRlVHlwZSxsPWUuZW5kLHM9ZS5ob3ZlcixjPWUub2Zmc2V0LHU9ZS5zdGFydCxkPWUuc3RlcCxwPXZvaWQgMD09PWQ/MTpkLGY9ZS50aWxlLGg9ZS52YWx1ZSxnPWUudmFsdWVUeXBlLHY9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLG50KSxDPVtdLG09dTttPD1sO20rPXApe3ZhciB3PWEobSk7Qy5wdXNoKG8oKS5jcmVhdGVFbGVtZW50KGYsaXQoe2tleTp3LmdldFRpbWUoKSxjbGFzc2VzOnR0KHt2YWx1ZTpoLHZhbHVlVHlwZTpnLGRhdGU6dyxkYXRlVHlwZTppLGhvdmVyOnN9KSxkYXRlOncscG9pbnQ6bX0sdikpKX1yZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQocWUse2NsYXNzTmFtZTp0LGNvdW50OnIsb2Zmc2V0OmMsd3JhcDohMH0sQyl9ZnVuY3Rpb24gc3QoZSl7cmV0dXJuIHN0PVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LHN0KGUpfWZ1bmN0aW9uIGN0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiB1dChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9jdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe2d0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpjdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBkdChlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19ZnVuY3Rpb24gcHQoZSx0KXtyZXR1cm4gcHQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxwdChlLHQpfWZ1bmN0aW9uIGZ0KGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiBlfWZ1bmN0aW9uIGh0KGUpe3JldHVybiBodD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saHQoZSl9ZnVuY3Rpb24gZ3QoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIHZ0KGUsdCl7cmV0dXJuIGUmJiF0fHwhZSYmdHx8ZSYmdCYmZS5nZXRUaW1lKCkhPT10LmdldFRpbWUoKX1mdW5jdGlvbiBDdChlLHQpe3ZhciBuPWUuYWN0aXZlU3RhcnREYXRlLHI9ZS5kYXRlLG89ZS52aWV3O3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dCh7YWN0aXZlU3RhcnREYXRlOm4sZGF0ZTpyLHZpZXc6b30pOnR9bHQucHJvcFR5cGVzPW90KG90KHt9LEJlKSx7fSx7YWN0aXZlU3RhcnREYXRlOmkoKS5pbnN0YW5jZU9mKERhdGUpLGNvdW50OmkoKS5udW1iZXIsZGF0ZVRyYW5zZm9ybTppKCkuZnVuYy5pc1JlcXVpcmVkLGRhdGVUeXBlOmkoKS5zdHJpbmcsb2Zmc2V0OmkoKS5udW1iZXIsc3RlcDppKCkubnVtYmVyLHRpbGU6aSgpLmZ1bmMuaXNSZXF1aXJlZH0pO3ZhciBtdD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksdCYmcHQoZSx0KX0oYyxlKTt2YXIgdCxuLHIsYSxpLGw9KGE9YyxpPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PWh0KGEpO2lmKGkpe3ZhciBuPWh0KHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMsbil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJihcIm9iamVjdFwiPT09c3QodCl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBmdChlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGMoKXt2YXIgZTshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLGMpO2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09YXJndW1lbnRzW3JdO3JldHVybiBndChmdChlPWwuY2FsbC5hcHBseShsLFt0aGlzXS5jb25jYXQobikpKSxcInN0YXRlXCIse30pLGV9cmV0dXJuIHQ9YyxyPVt7a2V5OlwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmFjdGl2ZVN0YXJ0RGF0ZSxyPWUudGlsZUNsYXNzTmFtZSxvPWUudGlsZUNvbnRlbnQsYT17fTtyZXR1cm4ociE9PXQudGlsZUNsYXNzTmFtZVByb3BzfHx2dChuLHQuYWN0aXZlU3RhcnREYXRlUHJvcHMpKSYmKGEudGlsZUNsYXNzTmFtZT1DdChlLHIpLGEudGlsZUNsYXNzTmFtZVByb3BzPXIpLChvIT09dC50aWxlQ29udGVudFByb3BzfHx2dChuLHQuYWN0aXZlU3RhcnREYXRlUHJvcHMpKSYmKGEudGlsZUNvbnRlbnQ9Q3QoZSxvKSxhLnRpbGVDb250ZW50UHJvcHM9byksYS5hY3RpdmVTdGFydERhdGVQcm9wcz1uLGF9fV0sKG49W3trZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmFjdGl2ZVN0YXJ0RGF0ZSxuPWUuY2hpbGRyZW4scj1lLmNsYXNzZXMsYT1lLmRhdGUsaT1lLmZvcm1hdEFiYnIsbD1lLmxvY2FsZSxjPWUubWF4RGF0ZSx1PWUubWF4RGF0ZVRyYW5zZm9ybSxkPWUubWluRGF0ZSxwPWUubWluRGF0ZVRyYW5zZm9ybSxmPWUub25DbGljayxoPWUub25Nb3VzZU92ZXIsZz1lLnN0eWxlLHY9ZS50aWxlRGlzYWJsZWQsQz1lLnZpZXcsbT10aGlzLnN0YXRlLHc9bS50aWxlQ2xhc3NOYW1lLGI9bS50aWxlQ29udGVudDtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7Y2xhc3NOYW1lOnMocix3KSxkaXNhYmxlZDpkJiZwKGQpPmF8fGMmJnUoYyk8YXx8diYmdih7YWN0aXZlU3RhcnREYXRlOnQsZGF0ZTphLHZpZXc6Q30pLG9uQ2xpY2s6ZiYmZnVuY3Rpb24oZSl7cmV0dXJuIGYoYSxlKX0sb25Gb2N1czpoJiZmdW5jdGlvbigpe3JldHVybiBoKGEpfSxvbk1vdXNlT3ZlcjpoJiZmdW5jdGlvbigpe3JldHVybiBoKGEpfSxzdHlsZTpnLHR5cGU6XCJidXR0b25cIn0saT9vKCkuY3JlYXRlRWxlbWVudChcImFiYnJcIix7XCJhcmlhLWxhYmVsXCI6aShsLGEpfSxuKTpuLGIpfX1dKSYmZHQodC5wcm90b3R5cGUsbiksciYmZHQodCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcInByb3RvdHlwZVwiLHt3cml0YWJsZTohMX0pLGN9KHIuQ29tcG9uZW50KTttdC5wcm9wVHlwZXM9dXQodXQoe30sWmUpLHt9LHtjaGlsZHJlbjppKCkubm9kZS5pc1JlcXVpcmVkLGZvcm1hdEFiYnI6aSgpLmZ1bmMsbWF4RGF0ZVRyYW5zZm9ybTppKCkuZnVuYy5pc1JlcXVpcmVkLG1pbkRhdGVUcmFuc2Zvcm06aSgpLmZ1bmMuaXNSZXF1aXJlZH0pO3ZhciB3dD1bXCJjbGFzc2VzXCIsXCJmb3JtYXRZZWFyXCJdO2Z1bmN0aW9uIGJ0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiB5dChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9idChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe3h0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpidChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiB4dChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24ga3QoKXtyZXR1cm4ga3Q9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxrdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIFN0PVwicmVhY3QtY2FsZW5kYXJfX2NlbnR1cnktdmlld19fZGVjYWRlc19fZGVjYWRlXCI7ZnVuY3Rpb24gT3QoZSl7dmFyIHQ9ZS5jbGFzc2VzLG49ZS5mb3JtYXRZZWFyLHI9dm9pZCAwPT09bj9wZTpuLGE9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLHd0KSxpPWEuZGF0ZSxsPWEubG9jYWxlO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChtdCxrdCh7fSxhLHtjbGFzc2VzOltdLmNvbmNhdCh0LFN0KSxtYXhEYXRlVHJhbnNmb3JtOkUsbWluRGF0ZVRyYW5zZm9ybTpMLHZpZXc6XCJjZW50dXJ5XCJ9KSxNZShsLHIsaSkpfWZ1bmN0aW9uIE10KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBMdChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gX3QoKXtyZXR1cm4gX3Q9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxfdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gUHQoZSl7dmFyIHQ9bSh5KGUuYWN0aXZlU3RhcnREYXRlKSksbj10Kzk5O3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChsdCxfdCh7fSxlLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9fY2VudHVyeS12aWV3X19kZWNhZGVzXCIsZGF0ZVRyYW5zZm9ybTpMLGRhdGVUeXBlOlwiZGVjYWRlXCIsZW5kOm4sc3RhcnQ6dCxzdGVwOjEwLHRpbGU6T3R9KSl9ZnVuY3Rpb24gRXQoZSl7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19jZW50dXJ5LXZpZXdcIn0sbygpLmNyZWF0ZUVsZW1lbnQoUHQsZSkpfU90LnByb3BUeXBlcz15dCh5dCh7fSxaZSkse30se2Zvcm1hdFllYXI6aSgpLmZ1bmN9KSxQdC5wcm9wVHlwZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/TXQoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtMdChlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6TXQoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9KHt9LEJlKTt2YXIganQ9W1wiY2xhc3Nlc1wiLFwiZm9ybWF0WWVhclwiXTtmdW5jdGlvbiBSdChlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gSXQoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/UnQoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtWdChlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6UnQoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gVnQoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIEh0KCl7cmV0dXJuIEh0PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sSHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBBdD1cInJlYWN0LWNhbGVuZGFyX19kZWNhZGUtdmlld19feWVhcnNfX3llYXJcIjtmdW5jdGlvbiBUdChlKXt2YXIgdD1lLmNsYXNzZXMsbj1lLmZvcm1hdFllYXIscj12b2lkIDA9PT1uP3BlOm4sYT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsanQpLGk9YS5kYXRlLGw9YS5sb2NhbGU7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KG10LEh0KHt9LGEse2NsYXNzZXM6W10uY29uY2F0KHQsQXQpLG1heERhdGVUcmFuc2Zvcm06QSxtaW5EYXRlVHJhbnNmb3JtOkksdmlldzpcImRlY2FkZVwifSkscihsLGkpKX1mdW5jdGlvbiBEdChlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gQnQoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIFp0KCl7cmV0dXJuIFp0PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sWnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uICR0KGUpe3ZhciB0PW0oTChlLmFjdGl2ZVN0YXJ0RGF0ZSkpLG49dCs5O3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChsdCxadCh7fSxlLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9fZGVjYWRlLXZpZXdfX3llYXJzXCIsZGF0ZVRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgRGF0ZTtyZXR1cm4gdC5zZXRGdWxsWWVhcihlLDAsMSksdC5zZXRIb3VycygwLDAsMCwwKSx0fSxkYXRlVHlwZTpcInllYXJcIixlbmQ6bixzdGFydDp0LHRpbGU6VHR9KSl9ZnVuY3Rpb24gTnQoZSl7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19kZWNhZGUtdmlld1wifSxvKCkuY3JlYXRlRWxlbWVudCgkdCxlKSl9VHQucHJvcFR5cGVzPUl0KEl0KHt9LFplKSx7fSx7Zm9ybWF0WWVhcjppKCkuZnVuY30pLCR0LnByb3BUeXBlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9EdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe0J0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpEdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX0oe30sQmUpO3ZhciBGdD1bXCJjbGFzc2VzXCIsXCJmb3JtYXRNb250aFwiLFwiZm9ybWF0TW9udGhZZWFyXCJdO2Z1bmN0aW9uIFd0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBVdChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9XdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe3p0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpXdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiB6dChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gR3QoKXtyZXR1cm4gR3Q9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxHdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIEt0PVwicmVhY3QtY2FsZW5kYXJfX3llYXItdmlld19fbW9udGhzX19tb250aFwiO2Z1bmN0aW9uIHF0KGUpe3ZhciB0PWUuY2xhc3NlcyxuPWUuZm9ybWF0TW9udGgscj12b2lkIDA9PT1uP3NlOm4sYT1lLmZvcm1hdE1vbnRoWWVhcixpPXZvaWQgMD09PWE/Y2U6YSxsPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxGdCkscz1sLmRhdGUsYz1sLmxvY2FsZTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQobXQsR3Qoe30sbCx7Y2xhc3NlczpbXS5jb25jYXQodCxLdCksZm9ybWF0QWJicjppLG1heERhdGVUcmFuc2Zvcm06RixtaW5EYXRlVHJhbnNmb3JtOlosdmlldzpcInllYXJcIn0pLHIoYyxzKSl9ZnVuY3Rpb24gWXQoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIEp0KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1l0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7WHQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOll0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIFh0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBRdCgpe3JldHVybiBRdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LFF0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBlbihlKXt2YXIgdD1tKGUuYWN0aXZlU3RhcnREYXRlKTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQobHQsUXQoe30sZSx7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX3llYXItdmlld19fbW9udGhzXCIsZGF0ZVRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgbj1uZXcgRGF0ZTtyZXR1cm4gbi5zZXRGdWxsWWVhcih0LGUsMSksbi5zZXRIb3VycygwLDAsMCwwKSxufSxkYXRlVHlwZTpcIm1vbnRoXCIsZW5kOjExLHN0YXJ0OjAsdGlsZTpxdH0pKX1mdW5jdGlvbiB0bihlKXtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX3llYXItdmlld1wifSxvKCkuY3JlYXRlRWxlbWVudChlbixlKSl9cXQucHJvcFR5cGVzPVV0KFV0KHt9LFplKSx7fSx7Zm9ybWF0TW9udGg6aSgpLmZ1bmMsZm9ybWF0TW9udGhZZWFyOmkoKS5mdW5jfSksZW4ucHJvcFR5cGVzPUp0KEp0KHt9LEJlKSx7fSx7bG9jYWxlOmkoKS5zdHJpbmd9KTt2YXIgbm49W1wiZm9ybWF0RGF5XCIsXCJmb3JtYXRMb25nRGF0ZVwiLFwiY2FsZW5kYXJUeXBlXCIsXCJjbGFzc2VzXCIsXCJjdXJyZW50TW9udGhJbmRleFwiXTtmdW5jdGlvbiBybihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/cm4oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXthbihlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6cm4oT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gYW4oZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIGxuKCl7cmV0dXJuIGxuPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sbG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBzbj1cInJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X19kYXlzX19kYXlcIjtmdW5jdGlvbiBjbihlKXt2YXIgdD1lLmZvcm1hdERheSxuPXZvaWQgMD09PXQ/aWU6dCxyPWUuZm9ybWF0TG9uZ0RhdGUsYT12b2lkIDA9PT1yP2xlOnIsaT1lLmNhbGVuZGFyVHlwZSxsPWUuY2xhc3NlcyxzPWUuY3VycmVudE1vbnRoSW5kZXgsYz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsbm4pLHU9Yy5kYXRlLGQ9Yy5sb2NhbGU7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KG10LGxuKHt9LGMse2NsYXNzZXM6W10uY29uY2F0KGwsc24sTGUodSxpKT9cIlwiLmNvbmNhdChzbixcIi0td2Vla2VuZFwiKTpudWxsLHUuZ2V0TW9udGgoKSE9PXM/XCJcIi5jb25jYXQoc24sXCItLW5laWdoYm9yaW5nTW9udGhcIik6bnVsbCksZm9ybWF0QWJicjphLG1heERhdGVUcmFuc2Zvcm06cSxtaW5EYXRlVHJhbnNmb3JtOkcsdmlldzpcIm1vbnRoXCJ9KSxuKGQsdSkpfWNuLnByb3BUeXBlcz1vbihvbih7fSxaZSkse30se2N1cnJlbnRNb250aEluZGV4OmkoKS5udW1iZXIuaXNSZXF1aXJlZCxmb3JtYXREYXk6aSgpLmZ1bmMsZm9ybWF0TG9uZ0RhdGU6aSgpLmZ1bmN9KTt2YXIgdW49W1wic2hvd0ZpeGVkTnVtYmVyT2ZXZWVrc1wiLFwic2hvd05laWdoYm9yaW5nTW9udGhcIl07ZnVuY3Rpb24gZG4oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIHBuKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBmbigpe3JldHVybiBmbj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBobihlKXt2YXIgdD1lLmFjdGl2ZVN0YXJ0RGF0ZSxuPWUuY2FsZW5kYXJUeXBlLHI9ZS5zaG93Rml4ZWROdW1iZXJPZldlZWtzLGE9ZS5zaG93TmVpZ2hib3JpbmdNb250aCxpPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSx1biksbD1tKHQpLHM9dyh0KSxjPXJ8fGEsdT12ZSh0LG4pLGQ9Yz8wOnUscD0xKyhjPy11OjApLGY9ZnVuY3Rpb24oKXtpZihyKXJldHVybiBwKzQyLTE7dmFyIGU9Sih0KTtpZihhKXt2YXIgbz1uZXcgRGF0ZTtyZXR1cm4gby5zZXRGdWxsWWVhcihsLHMsZSksby5zZXRIb3VycygwLDAsMCwwKSxlKyg3LXZlKG8sbiktMSl9cmV0dXJuIGV9KCk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KGx0LGZuKHt9LGkse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X19kYXlzXCIsY291bnQ6NyxjdXJyZW50TW9udGhJbmRleDpzLGRhdGVUcmFuc2Zvcm06ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGU7cmV0dXJuIHQuc2V0RnVsbFllYXIobCxzLGUpLHQuc2V0SG91cnMoMCwwLDAsMCksdH0sZGF0ZVR5cGU6XCJkYXlcIixlbmQ6ZixvZmZzZXQ6ZCxzdGFydDpwLHRpbGU6Y259KSl9aG4ucHJvcFR5cGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP2RuKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7cG4oZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOmRuKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfSh7Y2FsZW5kYXJUeXBlOmplLmlzUmVxdWlyZWQsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczppKCkuYm9vbCxzaG93TmVpZ2hib3JpbmdNb250aDppKCkuYm9vbH0sQmUpO3ZhciBnbj1cInJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X193ZWVrZGF5c1wiLHZuPVwiXCIuY29uY2F0KGduLFwiX193ZWVrZGF5XCIpO2Z1bmN0aW9uIENuKGUpe2Zvcih2YXIgdD1lLmNhbGVuZGFyVHlwZSxuPWUuZm9ybWF0U2hvcnRXZWVrZGF5LHI9dm9pZCAwPT09bj91ZTpuLGE9ZS5mb3JtYXRXZWVrZGF5LGk9dm9pZCAwPT09YT9kZTphLGw9ZS5sb2NhbGUsYz1lLm9uTW91c2VMZWF2ZSx1PVoobmV3IERhdGUpLGQ9bSh1KSxwPXcodSksZj1bXSxoPTE7aDw9NztoKz0xKXt2YXIgZz1uZXcgRGF0ZShkLHAsaC12ZSh1LHQpKSx2PWkobCxnKTtmLnB1c2gobygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7a2V5OmgsY2xhc3NOYW1lOnModm4sTGUoZyx0KSYmXCJcIi5jb25jYXQodm4sXCItLXdlZWtlbmRcIikpfSxvKCkuY3JlYXRlRWxlbWVudChcImFiYnJcIix7XCJhcmlhLWxhYmVsXCI6dix0aXRsZTp2fSxyKGwsZykucmVwbGFjZShcIi5cIixcIlwiKSkpKX1yZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQocWUse2NsYXNzTmFtZTpnbixjb3VudDo3LG9uRm9jdXM6Yyxvbk1vdXNlT3ZlcjpjfSxmKX1Dbi5wcm9wVHlwZXM9e2NhbGVuZGFyVHlwZTpqZS5pc1JlcXVpcmVkLGZvcm1hdFNob3J0V2Vla2RheTppKCkuZnVuYyxmb3JtYXRXZWVrZGF5OmkoKS5mdW5jLGxvY2FsZTppKCkuc3RyaW5nLG9uTW91c2VMZWF2ZTppKCkuZnVuY307dmFyIG1uPVtcImRhdGVcIixcIm9uQ2xpY2tXZWVrTnVtYmVyXCIsXCJ3ZWVrTnVtYmVyXCJdO2Z1bmN0aW9uIHduKCl7cmV0dXJuIHduPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sd24uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGJuKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiB5bihlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9dmFyIHhuPVwicmVhY3QtY2FsZW5kYXJfX3RpbGVcIjtmdW5jdGlvbiBrbihlKXt2YXIgdD1lLmRhdGUsbj1lLm9uQ2xpY2tXZWVrTnVtYmVyLHI9ZS53ZWVrTnVtYmVyLGE9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLG1uKSxpPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP2JuKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7eW4oZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOmJuKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfSh7Y2xhc3NOYW1lOnhufSxhKSxsPW8oKS5jcmVhdGVFbGVtZW50KFwic3BhblwiLG51bGwscik7cmV0dXJuIG4/bygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix3bih7fSxpLHtvbkNsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiBuKHIsdCxlKX0sdHlwZTpcImJ1dHRvblwifSksbCk6bygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIixpLGwpfWZ1bmN0aW9uIFNuKGUpe3ZhciB0PWUuYWN0aXZlU3RhcnREYXRlLG49ZS5jYWxlbmRhclR5cGUscj1lLm9uQ2xpY2tXZWVrTnVtYmVyLGE9ZS5vbk1vdXNlTGVhdmUsaT1lLnNob3dGaXhlZE51bWJlck9mV2Vla3MsbD1mdW5jdGlvbigpe2lmKGkpcmV0dXJuIDY7dmFyIGU9Sih0KS0oNy12ZSh0LG4pKTtyZXR1cm4gMStNYXRoLmNlaWwoZS83KX0oKSxzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPW0odCkscj13KHQpLG89Yih0KSxhPVtdLGk9MDtpPGw7aSs9MSlhLnB1c2goQ2UobmV3IERhdGUoZSxyLG8rNyppKSxuKSk7cmV0dXJuIGF9KCksYz1zLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRlLklTT184NjAxLHI9bj09PXRlLlVTP3RlLlVTOnRlLklTT184NjAxLG89Q2UoZSxuKSxhPW0oZSkrMTtkb3t0PUNlKG5ldyBEYXRlKGEsMCxyPT09dGUuSVNPXzg2MDE/NDoxKSxuKSxhLT0xfXdoaWxlKGU8dCk7cmV0dXJuIE1hdGgucm91bmQoKG8tdCkvNjA0OGU1KSsxfShlLG4pfSkpO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChxZSx7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtOdW1iZXJzXCIsY291bnQ6bCxkaXJlY3Rpb246XCJjb2x1bW5cIixvbkZvY3VzOmEsb25Nb3VzZU92ZXI6YSxzdHlsZTp7ZmxleEJhc2lzOlwiY2FsYygxMDAlICogKDEgLyA4KVwiLGZsZXhTaHJpbms6MH19LGMubWFwKChmdW5jdGlvbihlLHQpe3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChrbix7a2V5OmUsZGF0ZTpzW3RdLG9uQ2xpY2tXZWVrTnVtYmVyOnIsd2Vla051bWJlcjplfSl9KSkpfWtuLnByb3BUeXBlcz17ZGF0ZTppKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLG9uQ2xpY2tXZWVrTnVtYmVyOmkoKS5mdW5jLHdlZWtOdW1iZXI6aSgpLm5vZGUuaXNSZXF1aXJlZH0sU24ucHJvcFR5cGVzPXthY3RpdmVTdGFydERhdGU6aSgpLmluc3RhbmNlT2YoRGF0ZSkuaXNSZXF1aXJlZCxjYWxlbmRhclR5cGU6amUuaXNSZXF1aXJlZCxvbkNsaWNrV2Vla051bWJlcjppKCkuZnVuYyxvbk1vdXNlTGVhdmU6aSgpLmZ1bmMsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczppKCkuYm9vbH07dmFyIE9uPVtcImNhbGVuZGFyVHlwZVwiLFwiZm9ybWF0U2hvcnRXZWVrZGF5XCIsXCJmb3JtYXRXZWVrZGF5XCIsXCJvbkNsaWNrV2Vla051bWJlclwiLFwic2hvd1dlZWtOdW1iZXJzXCJdO2Z1bmN0aW9uIE1uKCl7cmV0dXJuIE1uPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sTW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIExuKGUpe3ZhciB0PWUuYWN0aXZlU3RhcnREYXRlLG49ZS5sb2NhbGUscj1lLm9uTW91c2VMZWF2ZSxhPWUuc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrcyxpPWUuY2FsZW5kYXJUeXBlLGw9dm9pZCAwPT09aT9mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmtleXMobmUpLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiBuZVt0XS5pbmNsdWRlcyhlKX0pKXx8dGUuSVNPXzg2MDF9KG4pOmksYz1lLmZvcm1hdFNob3J0V2Vla2RheSx1PWUuZm9ybWF0V2Vla2RheSxkPWUub25DbGlja1dlZWtOdW1iZXIscD1lLnNob3dXZWVrTnVtYmVycyxmPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxPbiksaD1cInJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3XCI7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpzKGgscD9cIlwiLmNvbmNhdChoLFwiLS13ZWVrTnVtYmVyc1wiKTpcIlwiKX0sbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7c3R5bGU6e2Rpc3BsYXk6XCJmbGV4XCIsYWxpZ25JdGVtczpcImZsZXgtZW5kXCJ9fSxwP28oKS5jcmVhdGVFbGVtZW50KFNuLHthY3RpdmVTdGFydERhdGU6dCxjYWxlbmRhclR5cGU6bCxvbkNsaWNrV2Vla051bWJlcjpkLG9uTW91c2VMZWF2ZTpyLHNob3dGaXhlZE51bWJlck9mV2Vla3M6YX0pOm51bGwsbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7c3R5bGU6e2ZsZXhHcm93OjEsd2lkdGg6XCIxMDAlXCJ9fSxvKCkuY3JlYXRlRWxlbWVudChDbix7Y2FsZW5kYXJUeXBlOmwsZm9ybWF0U2hvcnRXZWVrZGF5OmMsZm9ybWF0V2Vla2RheTp1LGxvY2FsZTpuLG9uTW91c2VMZWF2ZTpyfSksbygpLmNyZWF0ZUVsZW1lbnQoaG4sTW4oe2NhbGVuZGFyVHlwZTpsfSxmKSkpKSl9TG4ucHJvcFR5cGVzPXthY3RpdmVTdGFydERhdGU6aSgpLmluc3RhbmNlT2YoRGF0ZSkuaXNSZXF1aXJlZCxjYWxlbmRhclR5cGU6amUsZm9ybWF0U2hvcnRXZWVrZGF5OmkoKS5mdW5jLGZvcm1hdFdlZWtkYXk6aSgpLmZ1bmMsbG9jYWxlOmkoKS5zdHJpbmcsb25DbGlja1dlZWtOdW1iZXI6aSgpLmZ1bmMsb25Nb3VzZUxlYXZlOmkoKS5mdW5jLHNob3dGaXhlZE51bWJlck9mV2Vla3M6aSgpLmJvb2wsc2hvd1dlZWtOdW1iZXJzOmkoKS5ib29sfTt2YXIgX249W1wiYWN0aXZlU3RhcnREYXRlXCIsXCJkZWZhdWx0QWN0aXZlU3RhcnREYXRlXCIsXCJkZWZhdWx0VmFsdWVcIixcImRlZmF1bHRWaWV3XCIsXCJtYXhEZXRhaWxcIixcIm1pbkRldGFpbFwiLFwidmFsdWVcIixcInZpZXdcIl07ZnVuY3Rpb24gUG4oKXtyZXR1cm4gUG49T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxQbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRW4oZSl7cmV0dXJuIEVuPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LEVuKGUpfWZ1bmN0aW9uIGpuKGUsdCl7cmV0dXJuIGpuPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sam4oZSx0KX1mdW5jdGlvbiBSbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4gZX1mdW5jdGlvbiBJbihlKXtyZXR1cm4gSW49T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LEluKGUpfWZ1bmN0aW9uIFZuKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBIbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9WbihPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe0FuKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpWbihPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBBbihlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gVG4oZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn12YXIgRG49bmV3IERhdGU7RG4uc2V0RnVsbFllYXIoMSwwLDEpLERuLnNldEhvdXJzKDAsMCwwLDApO3ZhciBCbj1uZXcgRGF0ZSg4NjRlMTMpLFpuPVwicmVhY3QtY2FsZW5kYXJcIiwkbj1bXCJjZW50dXJ5XCIsXCJkZWNhZGVcIixcInllYXJcIixcIm1vbnRoXCJdLE5uPVtdLmNvbmNhdChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gVG4oZSl9KGUpfHxmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gVG4oZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuXCJPYmplY3RcIj09PW4mJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW58fFwiU2V0XCI9PT1uP0FycmF5LmZyb20oZSk6XCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP1RuKGUsdCk6dm9pZCAwfX0oZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9KCRuLnNsaWNlKDEpKSxbXCJkYXlcIl0pO2Z1bmN0aW9uIEZuKGUsdCl7cmV0dXJuICRuLnNsaWNlKCRuLmluZGV4T2YoZSksJG4uaW5kZXhPZih0KSsxKX1mdW5jdGlvbiBXbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMSE9PUZuKHQsbikuaW5kZXhPZihlKX0oZSx0LG4pP2U6bn1mdW5jdGlvbiBVbihlKXtyZXR1cm4gTm5bJG4uaW5kZXhPZihlKV19ZnVuY3Rpb24gem4oZSx0KXt2YXIgbj1lLnZhbHVlLHI9ZS5taW5EYXRlLG89ZS5tYXhEYXRlLGE9ZS5tYXhEZXRhaWwsaT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiBudWxsO3ZhciBuPUFycmF5LmlzQXJyYXkoZSkmJjI9PT1lLmxlbmd0aD9lW3RdOmU7aWYoIW4pcmV0dXJuIG51bGw7dmFyIHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlP2U6bmV3IERhdGUoZSl9KG4pO2lmKGlzTmFOKHIuZ2V0VGltZSgpKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGU6IFwiLmNvbmNhdChlKSk7cmV0dXJuIHJ9KG4sdCk7aWYoIWkpcmV0dXJuIG51bGw7dmFyIGw9VW4oYSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmdD5lP3Q6biYmbjxlP246ZX0oW21lLHhlXVt0XShsLGkpLHIsbyl9dmFyIEduPWZ1bmN0aW9uKGUpe3JldHVybiB6bihlLDApfSxLbj1mdW5jdGlvbihlKXtyZXR1cm4gem4oZSwxKX0scW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS52YWx1ZTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90OltHbixLbl0ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdChlKX0pKX07ZnVuY3Rpb24gWW4oZSl7dmFyIHQ9ZS5tYXhEYXRlLG49ZS5tYXhEZXRhaWwscj1lLm1pbkRhdGUsbz1lLm1pbkRldGFpbCxhPWUudmFsdWU7cmV0dXJuIG1lKFduKGUudmlldyxvLG4pLEduKHt2YWx1ZTphLG1pbkRhdGU6cixtYXhEYXRlOnQsbWF4RGV0YWlsOm59KXx8bmV3IERhdGUpfXZhciBKbj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmMT09PVtdLmNvbmNhdChlKS5sZW5ndGh9LFhuPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KSx0JiZqbihlLHQpfShsLGUpO3ZhciB0LG4scixhLGk9KHI9bCxhPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PUluKHIpO2lmKGEpe3ZhciBuPUluKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMsbil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJihcIm9iamVjdFwiPT09RW4odCl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBSbihlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGwoKXt2YXIgZTshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLGwpO2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09YXJndW1lbnRzW3JdO3JldHVybiBBbihSbihlPWkuY2FsbC5hcHBseShpLFt0aGlzXS5jb25jYXQobikpKSxcInN0YXRlXCIse2FjdGl2ZVN0YXJ0RGF0ZTplLnByb3BzLmRlZmF1bHRBY3RpdmVTdGFydERhdGUsdmFsdWU6ZS5wcm9wcy5kZWZhdWx0VmFsdWUsdmlldzplLnByb3BzLmRlZmF1bHRWaWV3fSksQW4oUm4oZSksXCJzZXRTdGF0ZUFuZENhbGxDYWxsYmFja3NcIiwoZnVuY3Rpb24odCxuLHIpe3ZhciBvPVJuKGUpLGE9by5hY3RpdmVTdGFydERhdGUsaT1vLnZpZXcsbD1lLnByb3BzLHM9bC5hbGxvd1BhcnRpYWxSYW5nZSxjPWwub25BY3RpdmVTdGFydERhdGVDaGFuZ2UsdT1sLm9uQ2hhbmdlLGQ9bC5vblZpZXdDaGFuZ2UscD1sLnNlbGVjdFJhbmdlLGY9e2FjdGl2ZVN0YXJ0RGF0ZTphLHZpZXc6aX07ZS5zZXRTdGF0ZSh0LChmdW5jdGlvbigpe3ZhciBvPXthY3Rpb246dC5hY3Rpb24sYWN0aXZlU3RhcnREYXRlOnQuYWN0aXZlU3RhcnREYXRlfHxlLmFjdGl2ZVN0YXJ0RGF0ZSx2YWx1ZTp0LnZhbHVlfHxlLnZhbHVlLHZpZXc6dC52aWV3fHxlLnZpZXd9O2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUgaW4gdCYmKEVuKHRbZV0pIT09RW4oZltlXSl8fCh0W2VdaW5zdGFuY2VvZiBEYXRlP3RbZV0uZ2V0VGltZSgpIT09ZltlXS5nZXRUaW1lKCk6dFtlXSE9PWZbZV0pKX1hKFwiYWN0aXZlU3RhcnREYXRlXCIpJiZjJiZjKG8pLGEoXCJ2aWV3XCIpJiZkJiZkKG8pLGEoXCJ2YWx1ZVwiKSYmdSYmKHAmJkpuKHQudmFsdWUpP3MmJnUoW3QudmFsdWVdLG4pOnUodC52YWx1ZSxuKSksciYmcihvKX0pKX0pKSxBbihSbihlKSxcInNldEFjdGl2ZVN0YXJ0RGF0ZVwiLChmdW5jdGlvbih0LG4pe2Uuc2V0U3RhdGVBbmRDYWxsQ2FsbGJhY2tzKHthY3Rpb246bixhY3RpdmVTdGFydERhdGU6dH0pfSkpLEFuKFJuKGUpLFwiZHJpbGxEb3duXCIsKGZ1bmN0aW9uKHQsbil7aWYoZS5kcmlsbERvd25BdmFpbGFibGUpe2Uub25DbGlja1RpbGUodCxuKTt2YXIgcj1SbihlKSxvPXIudmlldyxhPXIudmlld3MsaT1lLnByb3BzLm9uRHJpbGxEb3duLGw9YVthLmluZGV4T2YobykrMV07ZS5zZXRTdGF0ZUFuZENhbGxDYWxsYmFja3Moe2FjdGlvbjpcImRyaWxsRG93blwiLGFjdGl2ZVN0YXJ0RGF0ZTp0LHZpZXc6bH0sdm9pZCAwLGkpfX0pKSxBbihSbihlKSxcImRyaWxsVXBcIiwoZnVuY3Rpb24oKXtpZihlLmRyaWxsVXBBdmFpbGFibGUpe3ZhciB0PVJuKGUpLG49dC5hY3RpdmVTdGFydERhdGUscj10LnZpZXcsbz10LnZpZXdzLGE9ZS5wcm9wcy5vbkRyaWxsVXAsaT1vW28uaW5kZXhPZihyKS0xXSxsPW1lKGksbik7ZS5zZXRTdGF0ZUFuZENhbGxDYWxsYmFja3Moe2FjdGlvbjpcImRyaWxsVXBcIixhY3RpdmVTdGFydERhdGU6bCx2aWV3Oml9LHZvaWQgMCxhKX19KSksQW4oUm4oZSksXCJvbkNoYW5nZVwiLChmdW5jdGlvbih0LG4pe3ZhciByPVJuKGUpLnZhbHVlLG89ZS5wcm9wcyxhPW8uZ29Ub1JhbmdlU3RhcnRPblNlbGVjdCxpPW8uc2VsZWN0UmFuZ2U7ZS5vbkNsaWNrVGlsZSh0LG4pO3ZhciBsLHMsYyx1PWkmJiFKbihyKTtpZihpKXt2YXIgZD1SbihlKS52YWx1ZVR5cGU7bD11P21lKGQsdCk6W21lKHM9ZCwoYz1bcix0XS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KSkpWzBdKSx4ZShzLGNbMV0pXX1lbHNlIGw9ZS5nZXRQcm9jZXNzZWRWYWx1ZSh0KTt2YXIgcD0haXx8dXx8YT9ZbihIbihIbih7fSxlLnByb3BzKSx7fSx7dmFsdWU6bH0pKTpudWxsO24ucGVyc2lzdCgpLGUuc2V0U3RhdGVBbmRDYWxsQ2FsbGJhY2tzKHthY3Rpb246XCJvbkNoYW5nZVwiLGFjdGl2ZVN0YXJ0RGF0ZTpwLHZhbHVlOmx9LG4pfSkpLEFuKFJuKGUpLFwib25DbGlja1RpbGVcIiwoZnVuY3Rpb24odCxuKXt2YXIgcj1SbihlKS52aWV3LG89ZS5wcm9wcyxhPW8ub25DbGlja0RheSxpPW8ub25DbGlja0RlY2FkZSxsPW8ub25DbGlja01vbnRoLHM9by5vbkNsaWNrWWVhcixjPWZ1bmN0aW9uKCl7c3dpdGNoKHIpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4gaTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gcztjYXNlXCJ5ZWFyXCI6cmV0dXJuIGw7Y2FzZVwibW9udGhcIjpyZXR1cm4gYTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdmlldzogXCIuY29uY2F0KHIsXCIuXCIpKX19KCk7YyYmYyh0LG4pfSkpLEFuKFJuKGUpLFwib25Nb3VzZU92ZXJcIiwoZnVuY3Rpb24odCl7ZS5zZXRTdGF0ZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaG92ZXImJmUuaG92ZXIuZ2V0VGltZSgpPT09dC5nZXRUaW1lKCk/bnVsbDp7aG92ZXI6dH19KSl9KSksQW4oUm4oZSksXCJvbk1vdXNlTGVhdmVcIiwoZnVuY3Rpb24oKXtlLnNldFN0YXRlKHtob3ZlcjpudWxsfSl9KSksZX1yZXR1cm4gdD1sLG49W3trZXk6XCJhY3RpdmVTdGFydERhdGVcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixvLGEsaSxsLHMsYyx1LGQscD10aGlzLnByb3BzLmFjdGl2ZVN0YXJ0RGF0ZSxmPXRoaXMuc3RhdGUuYWN0aXZlU3RhcnREYXRlO3JldHVybiBwfHxmfHwodD0oZT10aGlzLnByb3BzKS5hY3RpdmVTdGFydERhdGUsbj1lLmRlZmF1bHRBY3RpdmVTdGFydERhdGUscj1lLmRlZmF1bHRWYWx1ZSxvPWUuZGVmYXVsdFZpZXcsYT1lLm1heERldGFpbCxpPWUubWluRGV0YWlsLGw9ZS52YWx1ZSxzPWUudmlldyxjPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxfbiksdT1XbihzLGksYSksKGQ9dHx8bik/bWUodSxkKTpZbihIbih7bWF4RGV0YWlsOmEsbWluRGV0YWlsOmksdmFsdWU6bHx8cix2aWV3OnN8fG99LGMpKSl9fSx7a2V5OlwidmFsdWVcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zZWxlY3RSYW5nZSxuPWUudmFsdWUscj10aGlzLnN0YXRlLnZhbHVlO3JldHVybiB0JiZKbihyKT9yOnZvaWQgMCE9PW4/bjpyfX0se2tleTpcInZhbHVlVHlwZVwiLGdldDpmdW5jdGlvbigpe3JldHVybiBVbih0aGlzLnByb3BzLm1heERldGFpbCl9fSx7a2V5Olwidmlld1wiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLm1pbkRldGFpbCxuPWUubWF4RGV0YWlsLHI9ZS52aWV3LG89dGhpcy5zdGF0ZS52aWV3O3JldHVybiBXbihyfHxvLHQsbil9fSx7a2V5Olwidmlld3NcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzO3JldHVybiBGbihlLm1pbkRldGFpbCxlLm1heERldGFpbCl9fSx7a2V5OlwiaG92ZXJcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLnNlbGVjdFJhbmdlLHQ9dGhpcy5zdGF0ZS5ob3ZlcjtyZXR1cm4gZT90Om51bGx9fSx7a2V5OlwiZHJpbGxEb3duQXZhaWxhYmxlXCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52aWV3LHQ9dGhpcy52aWV3cztyZXR1cm4gdC5pbmRleE9mKGUpPHQubGVuZ3RoLTF9fSx7a2V5OlwiZHJpbGxVcEF2YWlsYWJsZVwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMudmlldztyZXR1cm4gdGhpcy52aWV3cy5pbmRleE9mKGUpPjB9fSx7a2V5OlwiZ2V0UHJvY2Vzc2VkVmFsdWVcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLG49dC5taW5EYXRlLHI9dC5tYXhEYXRlLG89dC5tYXhEZXRhaWwsYT10LnJldHVyblZhbHVlO3JldHVybiBmdW5jdGlvbigpe3N3aXRjaChhKXtjYXNlXCJzdGFydFwiOnJldHVybiBHbjtjYXNlXCJlbmRcIjpyZXR1cm4gS247Y2FzZVwicmFuZ2VcIjpyZXR1cm4gcW47ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJldHVyblZhbHVlLlwiKX19KCkoe3ZhbHVlOmUsbWluRGF0ZTpuLG1heERhdGU6cixtYXhEZXRhaWw6b30pfX0se2tleTpcInJlbmRlckNvbnRlbnRcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmFjdGl2ZVN0YXJ0RGF0ZSxuPXRoaXMub25Nb3VzZU92ZXIscj10aGlzLnZhbHVlVHlwZSxhPXRoaXMudmFsdWUsaT10aGlzLnZpZXcsbD10aGlzLnByb3BzLHM9bC5jYWxlbmRhclR5cGUsYz1sLmxvY2FsZSx1PWwubWF4RGF0ZSxkPWwubWluRGF0ZSxwPWwuc2VsZWN0UmFuZ2UsZj1sLnRpbGVDbGFzc05hbWUsaD1sLnRpbGVDb250ZW50LGc9bC50aWxlRGlzYWJsZWQsdj10aGlzLmhvdmVyLEM9e2FjdGl2ZVN0YXJ0RGF0ZTplP3dlKGksdCk6bWUoaSx0KSxob3Zlcjp2LGxvY2FsZTpjLG1heERhdGU6dSxtaW5EYXRlOmQsb25DbGljazp0aGlzLmRyaWxsRG93bkF2YWlsYWJsZT90aGlzLmRyaWxsRG93bjp0aGlzLm9uQ2hhbmdlLG9uTW91c2VPdmVyOnA/bjpudWxsLHRpbGVDbGFzc05hbWU6Zix0aWxlQ29udGVudDpoLHRpbGVEaXNhYmxlZDpnLHZhbHVlOmEsdmFsdWVUeXBlOnJ9O3N3aXRjaChpKXtjYXNlXCJjZW50dXJ5XCI6dmFyIG09dGhpcy5wcm9wcy5mb3JtYXRZZWFyO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChFdCxQbih7Zm9ybWF0WWVhcjptfSxDKSk7Y2FzZVwiZGVjYWRlXCI6dmFyIHc9dGhpcy5wcm9wcy5mb3JtYXRZZWFyO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChOdCxQbih7Zm9ybWF0WWVhcjp3fSxDKSk7Y2FzZVwieWVhclwiOnZhciBiPXRoaXMucHJvcHMseT1iLmZvcm1hdE1vbnRoLHg9Yi5mb3JtYXRNb250aFllYXI7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KHRuLFBuKHtmb3JtYXRNb250aDp5LGZvcm1hdE1vbnRoWWVhcjp4fSxDKSk7Y2FzZVwibW9udGhcIjp2YXIgaz10aGlzLnByb3BzLFM9ay5mb3JtYXREYXksTz1rLmZvcm1hdExvbmdEYXRlLE09ay5mb3JtYXRTaG9ydFdlZWtkYXksTD1rLmZvcm1hdFdlZWtkYXksXz1rLm9uQ2xpY2tXZWVrTnVtYmVyLFA9ay5zaG93RG91YmxlVmlldyxFPWsuc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrcyxqPWsuc2hvd05laWdoYm9yaW5nTW9udGgsUj1rLnNob3dXZWVrTnVtYmVycyxJPXRoaXMub25Nb3VzZUxlYXZlO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChMbixQbih7Y2FsZW5kYXJUeXBlOnMsZm9ybWF0RGF5OlMsZm9ybWF0TG9uZ0RhdGU6Tyxmb3JtYXRTaG9ydFdlZWtkYXk6TSxmb3JtYXRXZWVrZGF5Okwsb25DbGlja1dlZWtOdW1iZXI6Xyxvbk1vdXNlTGVhdmU6cD9JOm51bGwsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczp2b2lkIDAhPT1FP0U6UCxzaG93TmVpZ2hib3JpbmdNb250aDpqLHNob3dXZWVrTnVtYmVyczpSfSxDKSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHZpZXc6IFwiLmNvbmNhdChpLFwiLlwiKSl9fX0se2tleTpcInJlbmRlck5hdmlnYXRpb25cIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLnByb3BzLnNob3dOYXZpZ2F0aW9uKXJldHVybiBudWxsO3ZhciBlPXRoaXMuYWN0aXZlU3RhcnREYXRlLHQ9dGhpcy52aWV3LG49dGhpcy52aWV3cyxyPXRoaXMucHJvcHMsYT1yLmZvcm1hdE1vbnRoWWVhcixpPXIuZm9ybWF0WWVhcixsPXIubG9jYWxlLHM9ci5tYXhEYXRlLGM9ci5taW5EYXRlLHU9ci5uYXZpZ2F0aW9uQXJpYUxhYmVsLGQ9ci5uYXZpZ2F0aW9uQXJpYUxpdmUscD1yLm5hdmlnYXRpb25MYWJlbCxmPXIubmV4dDJBcmlhTGFiZWwsaD1yLm5leHQyTGFiZWwsZz1yLm5leHRBcmlhTGFiZWwsdj1yLm5leHRMYWJlbCxDPXIucHJldjJBcmlhTGFiZWwsbT1yLnByZXYyTGFiZWwsdz1yLnByZXZBcmlhTGFiZWwsYj1yLnByZXZMYWJlbCx5PXIuc2hvd0RvdWJsZVZpZXc7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KE5lLHthY3RpdmVTdGFydERhdGU6ZSxkcmlsbFVwOnRoaXMuZHJpbGxVcCxmb3JtYXRNb250aFllYXI6YSxmb3JtYXRZZWFyOmksbG9jYWxlOmwsbWF4RGF0ZTpzLG1pbkRhdGU6YyxuYXZpZ2F0aW9uQXJpYUxhYmVsOnUsbmF2aWdhdGlvbkFyaWFMaXZlOmQsbmF2aWdhdGlvbkxhYmVsOnAsbmV4dDJBcmlhTGFiZWw6ZixuZXh0MkxhYmVsOmgsbmV4dEFyaWFMYWJlbDpnLG5leHRMYWJlbDp2LHByZXYyQXJpYUxhYmVsOkMscHJldjJMYWJlbDptLHByZXZBcmlhTGFiZWw6dyxwcmV2TGFiZWw6YixzZXRBY3RpdmVTdGFydERhdGU6dGhpcy5zZXRBY3RpdmVTdGFydERhdGUsc2hvd0RvdWJsZVZpZXc6eSx2aWV3OnQsdmlld3M6bn0pfX0se2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2xhc3NOYW1lLG49ZS5pbnB1dFJlZixyPWUuc2VsZWN0UmFuZ2UsYT1lLnNob3dEb3VibGVWaWV3LGk9dGhpcy5vbk1vdXNlTGVhdmUsbD10aGlzLnZhbHVlLGM9W10uY29uY2F0KGwpO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6cyhabixyJiYxPT09Yy5sZW5ndGgmJlwiXCIuY29uY2F0KFpuLFwiLS1zZWxlY3RSYW5nZVwiKSxhJiZcIlwiLmNvbmNhdChabixcIi0tZG91YmxlVmlld1wiKSx0KSxyZWY6bn0sdGhpcy5yZW5kZXJOYXZpZ2F0aW9uKCksbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwiXCIuY29uY2F0KFpuLFwiX192aWV3Q29udGFpbmVyXCIpLG9uQmx1cjpyP2k6bnVsbCxvbk1vdXNlTGVhdmU6cj9pOm51bGx9LHRoaXMucmVuZGVyQ29udGVudCgpLGEmJnRoaXMucmVuZGVyQ29udGVudCghMCkpKX19XSxuJiZmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19KHQucHJvdG90eXBlLG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksbH0oci5Db21wb25lbnQpO1huLmRlZmF1bHRQcm9wcz17Z29Ub1JhbmdlU3RhcnRPblNlbGVjdDohMCxtYXhEYXRlOkJuLG1heERldGFpbDpcIm1vbnRoXCIsbWluRGF0ZTpEbixtaW5EZXRhaWw6XCJjZW50dXJ5XCIscmV0dXJuVmFsdWU6XCJzdGFydFwiLHNob3dOYXZpZ2F0aW9uOiEwLHNob3dOZWlnaGJvcmluZ01vbnRoOiEwfTt2YXIgUW49aSgpLmluc3RhbmNlT2YoRGF0ZSksZXI9aSgpLm9uZU9mVHlwZShbaSgpLnN0cmluZyxBZV0pO1huLnByb3BUeXBlcz17YWN0aXZlU3RhcnREYXRlOlFuLGFsbG93UGFydGlhbFJhbmdlOmkoKS5ib29sLGNhbGVuZGFyVHlwZTpqZSxjbGFzc05hbWU6UmUsZGVmYXVsdEFjdGl2ZVN0YXJ0RGF0ZTpRbixkZWZhdWx0VmFsdWU6ZXIsZGVmYXVsdFZpZXc6RGUsZm9ybWF0RGF5OmkoKS5mdW5jLGZvcm1hdExvbmdEYXRlOmkoKS5mdW5jLGZvcm1hdE1vbnRoOmkoKS5mdW5jLGZvcm1hdE1vbnRoWWVhcjppKCkuZnVuYyxmb3JtYXRTaG9ydFdlZWtkYXk6aSgpLmZ1bmMsZm9ybWF0V2Vla2RheTppKCkuZnVuYyxmb3JtYXRZZWFyOmkoKS5mdW5jLGdvVG9SYW5nZVN0YXJ0T25TZWxlY3Q6aSgpLmJvb2wsaW5wdXRSZWY6SGUsbG9jYWxlOmkoKS5zdHJpbmcsbWF4RGF0ZTpWZSxtYXhEZXRhaWw6aSgpLm9uZU9mKCRuKSxtaW5EYXRlOkllLG1pbkRldGFpbDppKCkub25lT2YoJG4pLG5hdmlnYXRpb25BcmlhTGFiZWw6aSgpLnN0cmluZyxuYXZpZ2F0aW9uQXJpYUxpdmU6aSgpLm9uZU9mKFtcIm9mZlwiLFwicG9saXRlXCIsXCJhc3NlcnRpdmVcIl0pLG5hdmlnYXRpb25MYWJlbDppKCkuZnVuYyxuZXh0MkFyaWFMYWJlbDppKCkuc3RyaW5nLG5leHQyTGFiZWw6aSgpLm5vZGUsbmV4dEFyaWFMYWJlbDppKCkuc3RyaW5nLG5leHRMYWJlbDppKCkubm9kZSxvbkFjdGl2ZVN0YXJ0RGF0ZUNoYW5nZTppKCkuZnVuYyxvbkNoYW5nZTppKCkuZnVuYyxvbkNsaWNrRGF5OmkoKS5mdW5jLG9uQ2xpY2tEZWNhZGU6aSgpLmZ1bmMsb25DbGlja01vbnRoOmkoKS5mdW5jLG9uQ2xpY2tXZWVrTnVtYmVyOmkoKS5mdW5jLG9uQ2xpY2tZZWFyOmkoKS5mdW5jLG9uRHJpbGxEb3duOmkoKS5mdW5jLG9uRHJpbGxVcDppKCkuZnVuYyxvblZpZXdDaGFuZ2U6aSgpLmZ1bmMscHJldjJBcmlhTGFiZWw6aSgpLnN0cmluZyxwcmV2MkxhYmVsOmkoKS5ub2RlLHByZXZBcmlhTGFiZWw6aSgpLnN0cmluZyxwcmV2TGFiZWw6aSgpLm5vZGUscmV0dXJuVmFsdWU6aSgpLm9uZU9mKFtcInN0YXJ0XCIsXCJlbmRcIixcInJhbmdlXCJdKSxzZWxlY3RSYW5nZTppKCkuYm9vbCxzaG93RG91YmxlVmlldzppKCkuYm9vbCxzaG93Rml4ZWROdW1iZXJPZldlZWtzOmkoKS5ib29sLHNob3dOYXZpZ2F0aW9uOmkoKS5ib29sLHNob3dOZWlnaGJvcmluZ01vbnRoOmkoKS5ib29sLHNob3dXZWVrTnVtYmVyczppKCkuYm9vbCx0aWxlQ2xhc3NOYW1lOmkoKS5vbmVPZlR5cGUoW2koKS5mdW5jLFJlXSksdGlsZUNvbnRlbnQ6aSgpLm9uZU9mVHlwZShbaSgpLmZ1bmMsaSgpLm5vZGVdKSx0aWxlRGlzYWJsZWQ6aSgpLmZ1bmMsdmFsdWU6ZXIsdmlldzpEZX07Y29uc3QgdHI9WG59LDUyNTE6KGUsdCxuKT0+e24oNzQxOCk7dmFyIHI9big2Njg5KSxvPTYwMTAzO2lmKHQuRnJhZ21lbnQ9NjAxMDcsXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yKXt2YXIgYT1TeW1ib2wuZm9yO289YShcInJlYWN0LmVsZW1lbnRcIiksdC5GcmFnbWVudD1hKFwicmVhY3QuZnJhZ21lbnRcIil9dmFyIGk9ci5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRC5SZWFjdEN1cnJlbnRPd25lcixsPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscz17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O2Z1bmN0aW9uIGMoZSx0LG4pe3ZhciByLGE9e30sYz1udWxsLHU9bnVsbDtmb3IociBpbiB2b2lkIDAhPT1uJiYoYz1cIlwiK24pLHZvaWQgMCE9PXQua2V5JiYoYz1cIlwiK3Qua2V5KSx2b2lkIDAhPT10LnJlZiYmKHU9dC5yZWYpLHQpbC5jYWxsKHQscikmJiFzLmhhc093blByb3BlcnR5KHIpJiYoYVtyXT10W3JdKTtpZihlJiZlLmRlZmF1bHRQcm9wcylmb3IociBpbiB0PWUuZGVmYXVsdFByb3BzKXZvaWQgMD09PWFbcl0mJihhW3JdPXRbcl0pO3JldHVybnskJHR5cGVvZjpvLHR5cGU6ZSxrZXk6YyxyZWY6dSxwcm9wczphLF9vd25lcjppLmN1cnJlbnR9fXQuanN4PWMsdC5qc3hzPWN9LDU4OTM6KGUsdCxuKT0+e2UuZXhwb3J0cz1uKDUyNTEpfSwzNTczOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1uKDY1NSksbz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obix0KSxlKX19LGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUlMT9OdW1iZXIoZS50b0ZpeGVkKDUpKTplfSxpPS8oLSk/KFtcXGRdKlxcLj9bXFxkXSkrL2csbD0vKCNbMC05YS1mXXs2fXwjWzAtOWEtZl17M318Iyg/OlswLTlhLWZdezJ9KXsyLDR9fChyZ2J8aHNsKWE/XFwoKC0/W1xcZFxcLl0rJT9bLFxcc10rKXsyLDN9XFxzKlxcLypcXHMqW1xcZFxcLl0rJT9cXCkpL2dpLHM9L14oI1swLTlhLWZdezN9fCMoPzpbMC05YS1mXXsyfSl7Miw0fXwocmdifGhzbClhP1xcKCgtP1tcXGRcXC5dKyU/WyxcXHNdKyl7MiwzfVxccypcXC8qXFxzKltcXGRcXC5dKyU/XFwpKSQvaTtmdW5jdGlvbiBjKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfXZhciB1PXt0ZXN0OmZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlfSxwYXJzZTpwYXJzZUZsb2F0LHRyYW5zZm9ybTpmdW5jdGlvbihlKXtyZXR1cm4gZX19LGQ9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHUpLHt0cmFuc2Zvcm06bygwLDEpfSkscD1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdSkse2RlZmF1bHQ6MX0pLGY9ZnVuY3Rpb24oZSl7cmV0dXJue3Rlc3Q6ZnVuY3Rpb24odCl7cmV0dXJuIGModCkmJnQuZW5kc1dpdGgoZSkmJjE9PT10LnNwbGl0KFwiIFwiKS5sZW5ndGh9LHBhcnNlOnBhcnNlRmxvYXQsdHJhbnNmb3JtOmZ1bmN0aW9uKHQpe3JldHVyblwiXCIrdCtlfX19LGg9ZihcImRlZ1wiKSxnPWYoXCIlXCIpLHY9ZihcInB4XCIpLEM9ZihcInZoXCIpLG09ZihcInZ3XCIpLHc9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGcpLHtwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZy5wYXJzZShlKS8xMDB9LHRyYW5zZm9ybTpmdW5jdGlvbihlKXtyZXR1cm4gZy50cmFuc2Zvcm0oMTAwKmUpfX0pLGI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIEJvb2xlYW4oYyhuKSYmcy50ZXN0KG4pJiZuLnN0YXJ0c1dpdGgoZSl8fHQmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHQpKX19LHk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbztpZighYyhyKSlyZXR1cm4gcjt2YXIgYT1yLm1hdGNoKGkpLGw9YVswXSxzPWFbMV0sdT1hWzJdLGQ9YVszXTtyZXR1cm4obz17fSlbZV09cGFyc2VGbG9hdChsKSxvW3RdPXBhcnNlRmxvYXQocyksb1tuXT1wYXJzZUZsb2F0KHUpLG8uYWxwaGE9dm9pZCAwIT09ZD9wYXJzZUZsb2F0KGQpOjEsb319LHg9e3Rlc3Q6YihcImhzbFwiLFwiaHVlXCIpLHBhcnNlOnkoXCJodWVcIixcInNhdHVyYXRpb25cIixcImxpZ2h0bmVzc1wiKSx0cmFuc2Zvcm06ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5odWUsbj1lLnNhdHVyYXRpb24scj1lLmxpZ2h0bmVzcyxvPWUuYWxwaGEsaT12b2lkIDA9PT1vPzE6bztyZXR1cm5cImhzbGEoXCIrTWF0aC5yb3VuZCh0KStcIiwgXCIrZy50cmFuc2Zvcm0oYShuKSkrXCIsIFwiK2cudHJhbnNmb3JtKGEocikpK1wiLCBcIithKGQudHJhbnNmb3JtKGkpKStcIilcIn19LGs9bygwLDI1NSksUz1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdSkse3RyYW5zZm9ybTpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChrKGUpKX19KSxPPXt0ZXN0OmIoXCJyZ2JcIixcInJlZFwiKSxwYXJzZTp5KFwicmVkXCIsXCJncmVlblwiLFwiYmx1ZVwiKSx0cmFuc2Zvcm06ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZWQsbj1lLmdyZWVuLHI9ZS5ibHVlLG89ZS5hbHBoYSxpPXZvaWQgMD09PW8/MTpvO3JldHVyblwicmdiYShcIitTLnRyYW5zZm9ybSh0KStcIiwgXCIrUy50cmFuc2Zvcm0obikrXCIsIFwiK1MudHJhbnNmb3JtKHIpK1wiLCBcIithKGQudHJhbnNmb3JtKGkpKStcIilcIn19LE09e3Rlc3Q6YihcIiNcIikscGFyc2U6ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIixuPVwiXCIscj1cIlwiLG89XCJcIjtyZXR1cm4gZS5sZW5ndGg+NT8odD1lLnN1YnN0cigxLDIpLG49ZS5zdWJzdHIoMywyKSxyPWUuc3Vic3RyKDUsMiksbz1lLnN1YnN0cig3LDIpKToodD1lLnN1YnN0cigxLDEpLG49ZS5zdWJzdHIoMiwxKSxyPWUuc3Vic3RyKDMsMSksbz1lLnN1YnN0cig0LDEpLHQrPXQsbis9bixyKz1yLG8rPW8pLHtyZWQ6cGFyc2VJbnQodCwxNiksZ3JlZW46cGFyc2VJbnQobiwxNiksYmx1ZTpwYXJzZUludChyLDE2KSxhbHBoYTpvP3BhcnNlSW50KG8sMTYpLzI1NToxfX0sdHJhbnNmb3JtOk8udHJhbnNmb3JtfSxMPXt0ZXN0OmZ1bmN0aW9uKGUpe3JldHVybiBPLnRlc3QoZSl8fE0udGVzdChlKXx8eC50ZXN0KGUpfSxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gTy50ZXN0KGUpP08ucGFyc2UoZSk6eC50ZXN0KGUpP3gucGFyc2UoZSk6TS5wYXJzZShlKX0sdHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUpP2U6ZS5oYXNPd25Qcm9wZXJ0eShcInJlZFwiKT9PLnRyYW5zZm9ybShlKTp4LnRyYW5zZm9ybShlKX19LF89XCIke2N9XCIsUD1cIiR7bn1cIjtmdW5jdGlvbiBFKGUpe3ZhciB0PVtdLG49MCxyPWUubWF0Y2gobCk7ciYmKG49ci5sZW5ndGgsZT1lLnJlcGxhY2UobCxfKSx0LnB1c2guYXBwbHkodCxyLm1hcChMLnBhcnNlKSkpO3ZhciBvPWUubWF0Y2goaSk7cmV0dXJuIG8mJihlPWUucmVwbGFjZShpLFApLHQucHVzaC5hcHBseSh0LG8ubWFwKHUucGFyc2UpKSkse3ZhbHVlczp0LG51bUNvbG9yczpuLHRva2VuaXNlZDplfX1mdW5jdGlvbiBqKGUpe3JldHVybiBFKGUpLnZhbHVlc31mdW5jdGlvbiBSKGUpe3ZhciB0PUUoZSksbj10LnZhbHVlcyxyPXQubnVtQ29sb3JzLG89dC50b2tlbmlzZWQsaT1uLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW8sbj0wO248aTtuKyspdD10LnJlcGxhY2UobjxyP186UCxuPHI/TC50cmFuc2Zvcm0oZVtuXSk6YShlW25dKSk7cmV0dXJuIHR9fXZhciBJPWZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlPzA6ZX0sVj17dGVzdDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsbztyZXR1cm4gaXNOYU4oZSkmJmMoZSkmJihudWxsIT09KG49bnVsbD09PSh0PWUubWF0Y2goaSkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmxlbmd0aCkmJnZvaWQgMCE9PW4/bjowKSsobnVsbCE9PShvPW51bGw9PT0ocj1lLm1hdGNoKGwpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5sZW5ndGgpJiZ2b2lkIDAhPT1vP286MCk+MH0scGFyc2U6aixjcmVhdGVUcmFuc2Zvcm1lcjpSLGdldEFuaW1hdGFibGVOb25lOmZ1bmN0aW9uKGUpe3ZhciB0PWooZSk7cmV0dXJuIFIoZSkodC5tYXAoSSkpfX0sSD1uZXcgU2V0KFtcImJyaWdodG5lc3NcIixcImNvbnRyYXN0XCIsXCJzYXR1cmF0ZVwiLFwib3BhY2l0eVwiXSk7ZnVuY3Rpb24gQShlKXt2YXIgdD1lLnNsaWNlKDAsLTEpLnNwbGl0KFwiKFwiKSxuPXRbMF0scj10WzFdO2lmKFwiZHJvcC1zaGFkb3dcIj09PW4pcmV0dXJuIGU7dmFyIG89KHIubWF0Y2goaSl8fFtdKVswXTtpZighbylyZXR1cm4gZTt2YXIgYT1yLnJlcGxhY2UobyxcIlwiKSxsPUguaGFzKG4pPzE6MDtyZXR1cm4gbyE9PXImJihsKj0xMDApLG4rXCIoXCIrbCthK1wiKVwifXZhciBUPS8oW2Etei1dKilcXCguKj9cXCkvZyxEPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxWKSx7Z2V0QW5pbWF0YWJsZU5vbmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaChUKTtyZXR1cm4gdD90Lm1hcChBKS5qb2luKFwiIFwiKTplfX0pO3QuYWxwaGE9ZCx0LmNvbG9yPUwsdC5jb21wbGV4PVYsdC5kZWdyZWVzPWgsdC5maWx0ZXI9RCx0LmhleD1NLHQuaHNsYT14LHQubnVtYmVyPXUsdC5wZXJjZW50PWcsdC5wcm9ncmVzc1BlcmNlbnRhZ2U9dyx0LnB4PXYsdC5yZ2JVbml0PVMsdC5yZ2JhPU8sdC5zY2FsZT1wLHQudmg9Qyx0LnZ3PW19LDgzODg6KGUsdCxuKT0+e24ucih0KSxuLmQodCx7Zm9jdXNhYmxlOigpPT5iLGlzRm9jdXNhYmxlOigpPT5rLGlzVGFiYmFibGU6KCk9PnksdGFiYmFibGU6KCk9Pnd9KTt2YXIgcj1bXCJpbnB1dDpub3QoW2luZXJ0XSlcIixcInNlbGVjdDpub3QoW2luZXJ0XSlcIixcInRleHRhcmVhOm5vdChbaW5lcnRdKVwiLFwiYVtocmVmXTpub3QoW2luZXJ0XSlcIixcImJ1dHRvbjpub3QoW2luZXJ0XSlcIixcIlt0YWJpbmRleF06bm90KHNsb3QpOm5vdChbaW5lcnRdKVwiLFwiYXVkaW9bY29udHJvbHNdOm5vdChbaW5lcnRdKVwiLFwidmlkZW9bY29udHJvbHNdOm5vdChbaW5lcnRdKVwiLCdbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdKTpub3QoW2luZXJ0XSknLFwiZGV0YWlscz5zdW1tYXJ5OmZpcnN0LW9mLXR5cGU6bm90KFtpbmVydF0pXCIsXCJkZXRhaWxzOm5vdChbaW5lcnRdKVwiXSxvPXIuam9pbihcIixcIiksYT1cInVuZGVmaW5lZFwiPT10eXBlb2YgRWxlbWVudCxpPWE/ZnVuY3Rpb24oKXt9OkVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXN8fEVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yfHxFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3IsbD0hYSYmRWxlbWVudC5wcm90b3R5cGUuZ2V0Um9vdE5vZGU/ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG51bGw9PWV8fG51bGw9PT0odD1lLmdldFJvb3ROb2RlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5jYWxsKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZS5vd25lckRvY3VtZW50fSxzPWZ1bmN0aW9uIGUodCxuKXt2YXIgcjt2b2lkIDA9PT1uJiYobj0hMCk7dmFyIG89bnVsbD09dHx8bnVsbD09PShyPXQuZ2V0QXR0cmlidXRlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5jYWxsKHQsXCJpbmVydFwiKTtyZXR1cm5cIlwiPT09b3x8XCJ0cnVlXCI9PT1vfHxuJiZ0JiZlKHQucGFyZW50Tm9kZSl9LGM9ZnVuY3Rpb24oZSx0LG4pe2lmKHMoZSkpcmV0dXJuW107dmFyIHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGUucXVlcnlTZWxlY3RvckFsbChvKSk7cmV0dXJuIHQmJmkuY2FsbChlLG8pJiZyLnVuc2hpZnQoZSksci5maWx0ZXIobil9LHU9ZnVuY3Rpb24gZSh0LG4scil7Zm9yKHZhciBhPVtdLGw9QXJyYXkuZnJvbSh0KTtsLmxlbmd0aDspe3ZhciBjPWwuc2hpZnQoKTtpZighcyhjLCExKSlpZihcIlNMT1RcIj09PWMudGFnTmFtZSl7dmFyIHU9Yy5hc3NpZ25lZEVsZW1lbnRzKCksZD1lKHUubGVuZ3RoP3U6Yy5jaGlsZHJlbiwhMCxyKTtyLmZsYXR0ZW4/YS5wdXNoLmFwcGx5KGEsZCk6YS5wdXNoKHtzY29wZVBhcmVudDpjLGNhbmRpZGF0ZXM6ZH0pfWVsc2V7aS5jYWxsKGMsbykmJnIuZmlsdGVyKGMpJiYobnx8IXQuaW5jbHVkZXMoYykpJiZhLnB1c2goYyk7dmFyIHA9Yy5zaGFkb3dSb290fHxcImZ1bmN0aW9uXCI9PXR5cGVvZiByLmdldFNoYWRvd1Jvb3QmJnIuZ2V0U2hhZG93Um9vdChjKSxmPSFzKHAsITEpJiYoIXIuc2hhZG93Um9vdEZpbHRlcnx8ci5zaGFkb3dSb290RmlsdGVyKGMpKTtpZihwJiZmKXt2YXIgaD1lKCEwPT09cD9jLmNoaWxkcmVuOnAuY2hpbGRyZW4sITAscik7ci5mbGF0dGVuP2EucHVzaC5hcHBseShhLGgpOmEucHVzaCh7c2NvcGVQYXJlbnQ6YyxjYW5kaWRhdGVzOmh9KX1lbHNlIGwudW5zaGlmdC5hcHBseShsLGMuY2hpbGRyZW4pfX1yZXR1cm4gYX0sZD1mdW5jdGlvbihlLHQpe3JldHVybiBlLnRhYkluZGV4PDAmJih0fHwvXihBVURJT3xWSURFT3xERVRBSUxTKSQvLnRlc3QoZS50YWdOYW1lKXx8ZnVuY3Rpb24oZSl7dmFyIHQsbj1udWxsPT1lfHxudWxsPT09KHQ9ZS5nZXRBdHRyaWJ1dGUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNhbGwoZSxcImNvbnRlbnRlZGl0YWJsZVwiKTtyZXR1cm5cIlwiPT09bnx8XCJ0cnVlXCI9PT1ufShlKSkmJmlzTmFOKHBhcnNlSW50KGUuZ2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiksMTApKT8wOmUudGFiSW5kZXh9LHA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50YWJJbmRleD09PXQudGFiSW5kZXg/ZS5kb2N1bWVudE9yZGVyLXQuZG9jdW1lbnRPcmRlcjplLnRhYkluZGV4LXQudGFiSW5kZXh9LGY9ZnVuY3Rpb24oZSl7cmV0dXJuXCJJTlBVVFwiPT09ZS50YWdOYW1lfSxoPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10LndpZHRoLHI9dC5oZWlnaHQ7cmV0dXJuIDA9PT1uJiYwPT09cn0sZz1mdW5jdGlvbihlLHQpe3JldHVybiEodC5kaXNhYmxlZHx8cyh0KXx8ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSkmJlwiaGlkZGVuXCI9PT1lLnR5cGV9KHQpfHxmdW5jdGlvbihlLHQpe3ZhciBuPXQuZGlzcGxheUNoZWNrLHI9dC5nZXRTaGFkb3dSb290O2lmKFwiaGlkZGVuXCI9PT1nZXRDb21wdXRlZFN0eWxlKGUpLnZpc2liaWxpdHkpcmV0dXJuITA7dmFyIG89aS5jYWxsKGUsXCJkZXRhaWxzPnN1bW1hcnk6Zmlyc3Qtb2YtdHlwZVwiKT9lLnBhcmVudEVsZW1lbnQ6ZTtpZihpLmNhbGwobyxcImRldGFpbHM6bm90KFtvcGVuXSkgKlwiKSlyZXR1cm4hMDtpZihuJiZcImZ1bGxcIiE9PW4mJlwibGVnYWN5LWZ1bGxcIiE9PW4pe2lmKFwibm9uLXplcm8tYXJlYVwiPT09bilyZXR1cm4gaChlKX1lbHNle2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpe2Zvcih2YXIgYT1lO2U7KXt2YXIgcz1lLnBhcmVudEVsZW1lbnQsYz1sKGUpO2lmKHMmJiFzLnNoYWRvd1Jvb3QmJiEwPT09cihzKSlyZXR1cm4gaChlKTtlPWUuYXNzaWduZWRTbG90P2UuYXNzaWduZWRTbG90OnN8fGM9PT1lLm93bmVyRG9jdW1lbnQ/czpjLmhvc3R9ZT1hfWlmKGZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLGE9ZSYmbChlKSxpPW51bGw9PT0odD1hKXx8dm9pZCAwPT09dD92b2lkIDA6dC5ob3N0LHM9ITE7aWYoYSYmYSE9PWUpZm9yKHM9ISEobnVsbCE9PShuPWkpJiZ2b2lkIDAhPT1uJiZudWxsIT09KHI9bi5vd25lckRvY3VtZW50KSYmdm9pZCAwIT09ciYmci5jb250YWlucyhpKXx8bnVsbCE9ZSYmbnVsbCE9PShvPWUub3duZXJEb2N1bWVudCkmJnZvaWQgMCE9PW8mJm8uY29udGFpbnMoZSkpOyFzJiZpOyl7dmFyIGMsdSxkO3M9IShudWxsPT09KHU9aT1udWxsPT09KGM9YT1sKGkpKXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5ob3N0KXx8dm9pZCAwPT09dXx8bnVsbD09PShkPXUub3duZXJEb2N1bWVudCl8fHZvaWQgMD09PWR8fCFkLmNvbnRhaW5zKGkpKX1yZXR1cm4gc30oZSkpcmV0dXJuIWUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg7aWYoXCJsZWdhY3ktZnVsbFwiIT09bilyZXR1cm4hMH1yZXR1cm4hMX0odCxlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuXCJERVRBSUxTXCI9PT1lLnRhZ05hbWUmJkFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShlLmNoaWxkcmVuKS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm5cIlNVTU1BUllcIj09PWUudGFnTmFtZX0pKX0odCl8fGZ1bmN0aW9uKGUpe2lmKC9eKElOUFVUfEJVVFRPTnxTRUxFQ1R8VEVYVEFSRUEpJC8udGVzdChlLnRhZ05hbWUpKWZvcih2YXIgdD1lLnBhcmVudEVsZW1lbnQ7dDspe2lmKFwiRklFTERTRVRcIj09PXQudGFnTmFtZSYmdC5kaXNhYmxlZCl7Zm9yKHZhciBuPTA7bjx0LmNoaWxkcmVuLmxlbmd0aDtuKyspe3ZhciByPXQuY2hpbGRyZW4uaXRlbShuKTtpZihcIkxFR0VORFwiPT09ci50YWdOYW1lKXJldHVybiEhaS5jYWxsKHQsXCJmaWVsZHNldFtkaXNhYmxlZF0gKlwiKXx8IXIuY29udGFpbnMoZSl9cmV0dXJuITB9dD10LnBhcmVudEVsZW1lbnR9cmV0dXJuITF9KHQpKX0sdj1mdW5jdGlvbihlLHQpe3JldHVybiEoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBmKGUpJiZcInJhZGlvXCI9PT1lLnR5cGV9KGUpJiYhZnVuY3Rpb24oZSl7aWYoIWUubmFtZSlyZXR1cm4hMDt2YXIgdCxuPWUuZm9ybXx8bChlKSxyPWZ1bmN0aW9uKGUpe3JldHVybiBuLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXVtuYW1lPVwiJytlKydcIl0nKX07aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmdm9pZCAwIT09d2luZG93LkNTUyYmXCJmdW5jdGlvblwiPT10eXBlb2Ygd2luZG93LkNTUy5lc2NhcGUpdD1yKHdpbmRvdy5DU1MuZXNjYXBlKGUubmFtZSkpO2Vsc2UgdHJ5e3Q9cihlLm5hbWUpfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLmVycm9yKFwiTG9va3MgbGlrZSB5b3UgaGF2ZSBhIHJhZGlvIGJ1dHRvbiB3aXRoIGEgbmFtZSBhdHRyaWJ1dGUgY29udGFpbmluZyBpbnZhbGlkIENTUyBzZWxlY3RvciBjaGFyYWN0ZXJzIGFuZCBuZWVkIHRoZSBDU1MuZXNjYXBlIHBvbHlmaWxsOiAlc1wiLGUubWVzc2FnZSksITF9dmFyIG89ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihlW25dLmNoZWNrZWQmJmVbbl0uZm9ybT09PXQpcmV0dXJuIGVbbl19KHQsZS5mb3JtKTtyZXR1cm4hb3x8bz09PWV9KGUpfSh0KXx8ZCh0KTwwfHwhZyhlLHQpKX0sQz1mdW5jdGlvbihlKXt2YXIgdD1wYXJzZUludChlLmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpLDEwKTtyZXR1cm4hIShpc05hTih0KXx8dD49MCl9LG09ZnVuY3Rpb24gZSh0KXt2YXIgbj1bXSxyPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQsbyl7dmFyIGE9ISF0LnNjb3BlUGFyZW50LGk9YT90LnNjb3BlUGFyZW50OnQsbD1kKGksYSkscz1hP2UodC5jYW5kaWRhdGVzKTppOzA9PT1sP2E/bi5wdXNoLmFwcGx5KG4scyk6bi5wdXNoKGkpOnIucHVzaCh7ZG9jdW1lbnRPcmRlcjpvLHRhYkluZGV4OmwsaXRlbTp0LGlzU2NvcGU6YSxjb250ZW50OnN9KX0pKSxyLnNvcnQocCkucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiB0LmlzU2NvcGU/ZS5wdXNoLmFwcGx5KGUsdC5jb250ZW50KTplLnB1c2godC5jb250ZW50KSxlfSksW10pLmNvbmNhdChuKX0sdz1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBuPSh0PXR8fHt9KS5nZXRTaGFkb3dSb290P3UoW2VdLHQuaW5jbHVkZUNvbnRhaW5lcix7ZmlsdGVyOnYuYmluZChudWxsLHQpLGZsYXR0ZW46ITEsZ2V0U2hhZG93Um9vdDp0LmdldFNoYWRvd1Jvb3Qsc2hhZG93Um9vdEZpbHRlcjpDfSk6YyhlLHQuaW5jbHVkZUNvbnRhaW5lcix2LmJpbmQobnVsbCx0KSksbShuKX0sYj1mdW5jdGlvbihlLHQpe3JldHVybih0PXR8fHt9KS5nZXRTaGFkb3dSb290P3UoW2VdLHQuaW5jbHVkZUNvbnRhaW5lcix7ZmlsdGVyOmcuYmluZChudWxsLHQpLGZsYXR0ZW46ITAsZ2V0U2hhZG93Um9vdDp0LmdldFNoYWRvd1Jvb3R9KTpjKGUsdC5pbmNsdWRlQ29udGFpbmVyLGcuYmluZChudWxsLHQpKX0seT1mdW5jdGlvbihlLHQpe2lmKHQ9dHx8e30sIWUpdGhyb3cgbmV3IEVycm9yKFwiTm8gbm9kZSBwcm92aWRlZFwiKTtyZXR1cm4hMSE9PWkuY2FsbChlLG8pJiZ2KHQsZSl9LHg9ci5jb25jYXQoXCJpZnJhbWVcIikuam9pbihcIixcIiksaz1mdW5jdGlvbihlLHQpe2lmKHQ9dHx8e30sIWUpdGhyb3cgbmV3IEVycm9yKFwiTm8gbm9kZSBwcm92aWRlZFwiKTtyZXR1cm4hMSE9PWkuY2FsbChlLHgpJiZnKHQsZSl9fSw5ODI4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZvbnRzPXZvaWQgMDtjb25zdCBvPXIobig0NjY4KSksYT1yKG4oNjAzNikpLGk9cihuKDU5NDEpKSxsPXIobigyODEzKSk7dC5Gb250cz17cmVndWxhcjpvLmRlZmF1bHQsaXRhbGljOmEuZGVmYXVsdCxzZW1pQm9sZDppLmRlZmF1bHQsc2VtaUJvbGRJdGFsaWM6bC5kZWZhdWx0fX0sNjIxODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTgyOCksdCl9LDQyNDk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CdXR0b25UZXh0T25seT10LkJ1dHRvblNlY29uZGFyeT10LkJ1dHRvblByaW1hcnk9dC5CdXR0b249dm9pZCAwO2NvbnN0IGE9big1ODkzKSxpPW8obig3NTE4KSksbD1uKDEzMzUpLHM9big5NTA3KSxjPW4oNjEyNik7dC5CdXR0b249ZT0+e3ZhcntsYWJlbDp0LGNoaWxkcmVuOm4sc2l6ZTpvPVwiYmFzZVwiLHNoYXBlOmk9XCJzcXVhcmVcIixraW5kOmw9XCJwcmltYXJ5XCIsbGF5b3V0OnM9XCJmaXRcIixocmVmOmN9PWUscD1yKGUsW1wibGFiZWxcIixcImNoaWxkcmVuXCIsXCJzaXplXCIsXCJzaGFwZVwiLFwia2luZFwiLFwibGF5b3V0XCIsXCJocmVmXCJdKTtyZXR1cm4oMCxhLmpzeCkodSxPYmplY3QuYXNzaWduKHthczpjP1wiYVwiOlwiYnV0dG9uXCIsc2l6ZTpvLHNoYXBlOmksa2luZDpsLGxheW91dDpzfSxwLHtjaGlsZHJlbjp0PygwLGEuanN4KShkLE9iamVjdC5hc3NpZ24oe2FsaWduSXRlbXM6XCJjZW50ZXJcIixqdXN0aWZ5Q29udGVudDpcImNlbnRlclwifSx7Y2hpbGRyZW46dH0pKTpufSkpfTtjb25zdCB1PWkuZGVmYXVsdC5idXR0b25gXG4gIC8qIERlZmF1bHQgdmFsdWVzIHRoYXQgZ2V0IG92ZXJyaWRkZW4gYnkgdmFyaWFudHMgKi9cbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0QmFja2dyb3VuZH07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEJhY2tncm91bmR9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeVRleHR9O1xuXG4gIC8qIEluamVjdCB2YXJpYW50cyAqL1xuICAkeygwLHMuZ2V0VmFyaWFudENTUykoYy52YXJpYW50cyxjLlZhcmlhbnQuc2l6ZSl9XG4gICR7KDAscy5nZXRWYXJpYW50Q1NTKShjLnZhcmlhbnRzLGMuVmFyaWFudC5zaGFwZSl9XG4gICR7KDAscy5nZXRWYXJpYW50Q1NTKShjLnZhcmlhbnRzLGMuVmFyaWFudC5raW5kKX1cbiAgJHsoMCxzLmdldFZhcmlhbnRDU1MpKGMudmFyaWFudHMsYy5WYXJpYW50LmxheW91dCl9XG5cbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIG91dGxpbmU6IG5vbmU7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC51aX07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQuYm9sZH07XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuXG4gICY6bm90KDpkaXNhYmxlZCkge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gICY6ZGlzYWJsZWQsXG4gICY6YWN0aXZlOmRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyfTtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICB9XG5gLGQ9KDAsaS5kZWZhdWx0KShsLkJveClgXG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC54c21hbGx9YH07XG5gO3QuQnV0dG9uUHJpbWFyeT1lPT4oMCxhLmpzeCkodC5CdXR0b24sT2JqZWN0LmFzc2lnbih7fSxlLHtraW5kOlwicHJpbWFyeVwifSkpLHQuQnV0dG9uU2Vjb25kYXJ5PWU9PigwLGEuanN4KSh0LkJ1dHRvbixPYmplY3QuYXNzaWduKHt9LGUse2tpbmQ6XCJzZWNvbmRhcnlcIn0pKSx0LkJ1dHRvblRleHRPbmx5PWU9PigwLGEuanN4KSh0LkJ1dHRvbixPYmplY3QuYXNzaWduKHt9LGUse2tpbmQ6XCJ0ZXh0T25seVwifSkpfSw2MTI2OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnZhcmlhbnRzPXQuQnV0dG9uU2hhcGU9dC5CdXR0b25MYXlvdXQ9dC5CdXR0b25TaXplPXQuQnV0dG9uS2luZD10LlZhcmlhbnQ9dm9pZCAwO2NvbnN0IHI9big3NTE4KTt0LlZhcmlhbnQ9e3NoYXBlOlwic2hhcGVcIixzaXplOlwic2l6ZVwiLGtpbmQ6XCJraW5kXCIsbGF5b3V0OlwibGF5b3V0XCJ9LHQuQnV0dG9uS2luZD17cHJpbWFyeTpcInByaW1hcnlcIixzZWNvbmRhcnk6XCJzZWNvbmRhcnlcIix0ZXh0T25seTpcInRleHRPbmx5XCJ9LHQuQnV0dG9uU2l6ZT17c21hbGw6XCJzbWFsbFwiLGJhc2U6XCJiYXNlXCIsbGFyZ2U6XCJsYXJnZVwifSx0LkJ1dHRvbkxheW91dD17Zml0OlwiZml0XCIsZnVsbDpcImZ1bGxcIn0sdC5CdXR0b25TaGFwZT17c3F1YXJlOlwic3F1YXJlXCIscGlsbDpcInBpbGxcIn0sdC52YXJpYW50cz17W3QuVmFyaWFudC5zaXplXTp7W3QuQnV0dG9uU2l6ZS5iYXNlXTpyLmNzc2BcbiAgICAgIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5sYXJnZX1gfTtcbiAgICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgICBgLFt0LkJ1dHRvblNpemUuc21hbGxdOnIuY3NzYFxuICAgICAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC54c21hbGx9ICR7ZS5weC5iYXNlfWB9O1xuICAgICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLnNtYWxsfTtcbiAgICBgLFt0LkJ1dHRvblNpemUubGFyZ2VdOnIuY3NzYFxuICAgICAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5iYXNlfSAke2UucHgueGxhcmdlfWB9O1xuICAgICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmxhcmdlfTtcbiAgICBgfSxbdC5WYXJpYW50LnNoYXBlXTp7W3QuQnV0dG9uU2hhcGUuc3F1YXJlXTpyLmNzc2BcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgICBgLFt0LkJ1dHRvblNoYXBlLnBpbGxdOnIuY3NzYFxuICAgICAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMucGlsbH07XG4gICAgYH0sW3QuVmFyaWFudC5sYXlvdXRdOntbdC5CdXR0b25MYXlvdXQuZml0XTpyLmNzc2BcbiAgICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICBgLFt0LkJ1dHRvbkxheW91dC5mdWxsXTpyLmNzc2BcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIGB9LFt0LlZhcmlhbnQua2luZF06e1t0LkJ1dHRvbktpbmQucHJpbWFyeV06ci5jc3NgXG4gICAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX07XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5SG92ZXJ9O1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlBY3RpdmV9O1xuICAgICAgfVxuXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5Rm9jdXNlZH07XG4gICAgICB9XG4gICAgYCxbdC5CdXR0b25LaW5kLnNlY29uZGFyeV06ci5jc3NgXG4gICAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRTZWNvbmRhcnl9O1xuICAgICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRTZWNvbmRhcnl9O1xuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeVRleHR9O1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kU2Vjb25kYXJ5SG92ZXJ9O1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeUFjdGl2ZX07XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeUZvY3VzZWR9O1xuICAgICAgfVxuICAgIGAsW3QuQnV0dG9uS2luZC50ZXh0T25seV06ci5jc3NgXG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBvcGFjaXR5OiAwLjg7XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEZvY3VzZWR9O1xuICAgICAgfVxuICAgIGB9fX0sNDEzMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNDI0OSksdCksbyhuKDYxMjYpLHQpfSwzOTExOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNhcmRDb250YWluZXI9dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPXIobig3NTE4KSksaT1uKDk1MDcpLGw9bigxMzM1KTt0LkNhcmRDb250YWluZXI9ZT0+KDAsby5qc3gpKHMsT2JqZWN0LmFzc2lnbih7c3R5bGU6e21heEhlaWdodDplLm1heEhlaWdodCxvdmVyZmxvd1k6XCJhdXRvXCJ9LGlkOlwiY2FyZC1jb250YWluZXJcIixcImRhdGEtdGVzdGlkXCI6XCJjYXJkLWNvbnRhaW5lclwifSx7Y2hpbGRyZW46KDAsby5qc3gpKGMse2NoaWxkcmVuOmUuY2hpbGRyZW59KX0pKTtjb25zdCBzPSgwLGEuZGVmYXVsdCkobC5Cb3gpYFxuICBkaXNwbGF5OiBibG9jaztcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQzfTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNX07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfSAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH1cbiAgICAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfSAwcHg7XG4gIHdpZHRoOiAxMDAlO1xuICAke2kuTWl4aW5zLnNjcm9sbGJhci5iYXNlfTtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuYCxjPWEuZGVmYXVsdC5kaXZgXG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9IDBweFxuICAgICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHdpZHRoOiAxMDAlO1xuYH0sMTI0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzcz10LkNvbGxhcHNpYmxlQ2FyZD12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9big2Njg5KSxpPXIobig3NTE4KSksbD1uKDMxMzYpLHM9big5NjM0KSxjPW4oMTMzNSksdT1uKDM5MTEpLGQ9big3NzY5KSxwPW4oOTUwNyk7dC5Db2xsYXBzaWJsZUNhcmQ9KDAsYS5mb3J3YXJkUmVmKSgoKGUsbik9Pntjb25zdFtyLGldPSgwLGEudXNlU3RhdGUpKGUuZXhwYW5kZWR8fCExKTtyZXR1cm4oMCxvLmpzeCkodC5Db2xsYXBzaWJsZUNhcmRTdGF0ZWxlc3MsT2JqZWN0LmFzc2lnbih7fSxlLHtyZWY6bixleHBhbmRlZDpyLG9uRXhwYW5kOmU9PmkoIWUpfSkpfSkpLHQuQ29sbGFwc2libGVDYXJkLmRpc3BsYXlOYW1lPVwiQ29sbGFwc2libGVDYXJkXCIsdC5Db2xsYXBzaWJsZUNhcmRTdGF0ZWxlc3M9KDAsYS5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXIgbixyO3JldHVybigwLG8uanN4cykoZixPYmplY3QuYXNzaWduKHtcImRhdGEtdGVzdGlkXCI6XCJjb2xsYXBzaWJsZS1jYXJkXCJ9LHtjaGlsZHJlbjpbKDAsby5qc3hzKShnLE9iamVjdC5hc3NpZ24oe1wiYXJpYS1leHBhbmRlZFwiOmUuZXhwYW5kZWQsXCJkYXRhLXRlc3RpZFwiOlwiaGVhZGluZy1jb250YWluZXJcIixyZWY6dCx6SW5kZXg6bnVsbD09PShuPWUuaGVhZGVyU2V0dGluZ3MpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnpJbmRleCxmaXhlZEhlYWRlcjpudWxsPT09KHI9ZS5oZWFkZXJTZXR0aW5ncyl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZml4ZWRIZWFkZXIsb25DbGljazooKT0+ZS5vbkV4cGFuZChlLmV4cGFuZGVkKSx0YWJJbmRleDowLG9uS2V5RG93bjp0PT57c3dpdGNoKHQuY29kZSl7Y2FzZVwiRW50ZXJcIjpjYXNlXCJTcGFjZVwiOnQucHJldmVudERlZmF1bHQoKSxlLm9uRXhwYW5kKGUuZXhwYW5kZWQpfX19LHtjaGlsZHJlbjpbKDAsby5qc3gpKGgse2NoaWxkcmVuOmUudGl0bGV9KSwoMCxvLmpzeHMpKFwiZGl2XCIsT2JqZWN0LmFzc2lnbih7aWQ6XCJpY29uLWNvbnRhaW5lclwifSx7Y2hpbGRyZW46W3ZvaWQgMCE9PWUuYmFkZ2VUZXh0JiYoMCxvLmpzeCkobC5CYWRnZSx7Y291bnQ6ZS5iYWRnZVRleHQsaWQ6XCJjb2xsYXBzaWJsZS1jYXJkLWhlYWRpbmctYmFkZ2VcIixcImRhdGEtdGVzdGlkXCI6XCJjb2xsYXBzaWJsZS1jYXJkLWhlYWRpbmctYmFkZ2VcIn0pLCgwLG8uanN4KShzLkljb24se2ljb246ZS5leHBhbmRlZD9cIkNoZXZyb25VcEljb25cIjpcIkNoZXZyb25Eb3duSWNvblwifSldfSkpXX0pKSxlLmV4cGFuZGVkJiYoMCxvLmpzeCkodS5DYXJkQ29udGFpbmVyLE9iamVjdC5hc3NpZ24oe21heEhlaWdodDplLm1heEhlaWdodHx8XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJkaXZcIix7Y2hpbGRyZW46ZS5jaGlsZHJlbn0pfSkpXX0pKX0pKSx0LkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzcy5kaXNwbGF5TmFtZT1cIkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzc1wiO2NvbnN0IGY9aS5kZWZhdWx0LmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuYCxoPSgwLGkuZGVmYXVsdCkoZC5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICR7cC5NaXhpbnMudGV4dE92ZXJmbG93fTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBkaXNwbGF5OiBibG9jaztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbmAsZz0oMCxpLmRlZmF1bHQpKGMuQm94KWBcbiAgcG9zaXRpb246ICR7KHtmaXhlZEhlYWRlcjplfSk9PmU/XCJzdGlja3lcIjpcInJlbGF0aXZlXCJ9O1xuICB0b3A6ICR7KHtmaXhlZEhlYWRlcjplfSk9PmU/MDp2b2lkIDB9O1xuICB6LWluZGV4OiAkeyh7ekluZGV4OmV9KT0+ZX07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kM307XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDV9O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ1fTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LmhlYWRpbmd9O1xuICBvdXRsaW5lOiBub25lO1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uKTtcbiAgd2lkdGg6IDEwMCU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgI2ljb24tY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gIH1cblxuICAjY29sbGFwc2libGUtY2FyZC1oZWFkaW5nLWJhZGdlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gIH1cblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDJ9O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDV9O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDV9O1xuICB9XG5cbiAgJjpmb2N1cyB7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5ib3JkZXJOZXV0cmFsfTtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJvcmRlck5ldXRyYWx9O1xuICB9XG5gfSw3NDAxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigxMjQpLHQpfSw5MzE4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkN1c3RvbUNvbnRleHRNZW51PXQuQ09OVEVYVF9NRU5VX0FOSU1BVElPTl9EVVJBVElPTj10LlBSSU9SX0NPTlRFWFRfTUVOVV9DTEFTUz10LkJBU0VfQ09OVEVYVF9NRU5VPXQuQUNUSVZFX0NPTlRFWFRfTUVOVV9DTEFTUz10LkNPTlRFWFRfTUVOVV9GUkFNRV9JRD12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9big2Njg5KSxpPXIobig3NTE4KSksbD1uKDc2NDEpLHM9bigxMzM1KSxjPW4oOTMwNiksdT1uKDczMzYpLGQ9big0NzI1KSxwPW4oNDc0MCksZj1uKDY0NDkpO3QuQ09OVEVYVF9NRU5VX0ZSQU1FX0lEPVwiY29udGV4dF9tZW51X2ZyYW1lXCIsdC5BQ1RJVkVfQ09OVEVYVF9NRU5VX0NMQVNTPVwiYWN0aXZlX2NvbnRleHRfbWVudVwiLHQuQkFTRV9DT05URVhUX01FTlU9XCJiYXNlX2NvbnRleHRfbWVudVwiLHQuUFJJT1JfQ09OVEVYVF9NRU5VX0NMQVNTPVwicHJldmlvdXNfY29udGV4dF9tZW51XCIsdC5DT05URVhUX01FTlVfQU5JTUFUSU9OX0RVUkFUSU9OPTIwMCx0LkN1c3RvbUNvbnRleHRNZW51PSh7bWVudVRlbXBsYXRlOmUsb25DbGljazpuLGljb246cixvbk1lbnVSZXNpemU6aSxvbkNvbnRleHRNZW51UmVhZHk6cyxpc1dpbmRvd3M6dj0hMH0pPT57dmFyIEM7Y29uc3QgbT0oMCxhLnVzZVJlZikobnVsbCksW3csYl09KDAsYS51c2VTdGF0ZSkoITEpLFt5LHhdPSgwLGEudXNlU3RhdGUpKHt3aWR0aDoxNjAsaGVpZ2h0OjE2MH0pLFtrLFNdPSgwLGEudXNlU3RhdGUpKDApLFtPLE1dPSgwLGEudXNlU3RhdGUpKFtdKSxbTCxfXT0oMCxhLnVzZVN0YXRlKSgpLFtQLEVdPSgwLGEudXNlU3RhdGUpKFtdKSxbaixSXT0oMCxhLnVzZVN0YXRlKShlLm1hcCgoZT0+ZS5sYWJlbHx8XCJcIikpKSxbSSxWXT0oMCxhLnVzZVN0YXRlKSgtMSk7KDAsYS51c2VFZmZlY3QpKCgoKT0+e1IoZS5tYXAoKGU9PmUubGFiZWx8fFwiXCIpKSksVihqLmZpbmRJbmRleCgoZT0+ZT09PUwpKSl9KSxbZV0pO2NvbnN0e3dpZHRoOkgsaGVpZ2h0OkF9PSgwLGMudXNlUmVzaXplQ29udGV4dE1lbnUpKEwpLHtoYW5kbGVOYXZpZ2F0ZVRvU3VibWVudTpULGhhbmRsZU5hdmlnYXRlQmFja1RvUGFyZW50OkQsaGFuZGxlTmF2aWdhdGVUb0Jhc2U6Qn09KDAsZC51c2VDb250ZXh0TWVudU5hdmlnYXRpb24pKGssUyxQLEUsTCxfLHgsVixPLGkpO3JldHVybigwLGEudXNlRWZmZWN0KSgoKCk9PntNKCgwLHUuZ2V0TWVudU5hdmlnYXRpb25PcmRlcikoZSkpLF8odC5CQVNFX0NPTlRFWFRfTUVOVSksRShbXSkseCh7d2lkdGg6SCxoZWlnaHQ6QX0pfSksW2VdKSwoMCxwLnVzZUNvbnRleHRNZW51S2V5Ym9hcmROYXZpZ2F0aW9uKShudWxsPT09KEM9Ty5maW5kKChlPT5lLnBhcmVudExhYmVsPT09TCkpKXx8dm9pZCAwPT09Qz92b2lkIDA6Qy5tZW51VGVtcGxhdGUsUCxMLEksVixuLFQsRCxCKSwoMCxhLnVzZUVmZmVjdCkoKCgpPT57bS5jdXJyZW50JiYod3x8KHMmJnMoKSxiKCEwKSkpfSksW20uY3VycmVudF0pLCgwLG8uanN4KShoLE9iamVjdC5hc3NpZ24oe2lkOnQuQ09OVEVYVF9NRU5VX0ZSQU1FX0lELHRyYW5zaXRpb25TcGVlZDprLGlzV2luZG93czp2fSx7Y2hpbGRyZW46Ty5tYXAoKCh7cGFyZW50TGFiZWw6ZSxtZW51VGVtcGxhdGU6YX0pPT4oMCxvLmpzeCkoXCJkaXZcIixPYmplY3QuYXNzaWduKHtyZWY6ZT09PUw/bTp2b2lkIDB9LHtjaGlsZHJlbjooMCxvLmpzeHMpKGcsT2JqZWN0LmFzc2lnbih7Y2xhc3NOYW1lOigwLHUuZ2V0Q2xhc3NOYW1lKShlLEwsUCksYWN0aXZlTWVudVdpZHRoOnkud2lkdGgsdHJhbnNpdGlvblNwZWVkOmssaWQ6ZX0se2NoaWxkcmVuOltlIT09dC5CQVNFX0NPTlRFWFRfTUVOVT8oMCxvLmpzeCkobC5DdXN0b21Db250ZXh0TWVudUl0ZW0se3R5cGU6XCJzdWJtZW51SGVhZGVyXCIsbGFiZWw6ZSxvbkJhY2s6KCk9PkQoZSxcImNsaWNrXCIpLG9uQ2xvc2U6QixzaG93U2hvdWxkSG9tZUJ1dHRvbjpQLnNsaWNlKDIpLmluY2x1ZGVzKGUpfHxQLmxlbmd0aD49MiYmTD09PWUsc2VsZWN0ZWQ6LTE9PT1JfSxgJHtlfS1zdWJtZW51LWhlYWRlcmApOnImJigwLG8uanN4KShmLlJvb3RNZW51SGVhZGVyLHtpY29uOnJ9KSxhLm1hcCgoKHQscik9PigwLG8uanN4KShsLkN1c3RvbUNvbnRleHRNZW51SXRlbSxPYmplY3QuYXNzaWduKHtvbkNsaWNrOigpPT57dC5oYXNTdWJNZW51P1QodC5sYWJlbHx8XCJcIik6bih0LmRhdGEpLFYoLTIpfX0sdCx7c3VibWVudTp0Lmhhc1N1Yk1lbnUsc2VsZWN0ZWQ6ST09PXJ9KSxgJHtlfS0ke3QubGFiZWx9LSR7cn1gKSkpXX0pKX0pLGUpKSl9KSl9O2NvbnN0IGg9aS5kZWZhdWx0LmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4td2lkdGg6IGZpdC1jb250ZW50O1xuICBtaW4taGVpZ2h0OiBmaXQtY29udGVudDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDF9O1xuICB0cmFuc2l0aW9uOiAkeyh7dHJhbnNpdGlvblNwZWVkOmV9KT0+YGFsbCAke2V9bXMgbGluZWFyYH07XG4gIGJvcmRlcjogJHsoe3RoZW1lOmV9KT0+YDFweCBzb2xpZCAke2UucGFsZXR0ZS5iYWNrZ3JvdW5kMn1gfTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe2lzV2luZG93czplfSk9PiFlJiZcIjEwcHhcIn07XG5gLGc9KDAsaS5kZWZhdWx0KShzLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IG1heC1jb250ZW50O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDF9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfSAwICR7ZS5weC5zbWFsbH0gMGB9O1xuXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgkeyh7YWN0aXZlTWVudVdpZHRoOmV9KT0+YCR7ZX1weGB9KTtcbiAgdHJhbnNpdGlvbjogJHsoe3RyYW5zaXRpb25TcGVlZDplfSk9PmBhbGwgJHtlfW1zIGN1YmljLWJlemllcigwLCAwLCAwLjU4LCAxKWB9O1xuICBvcGFjaXR5OiAwJTtcblxuICAmLmFjdGl2ZV9jb250ZXh0X21lbnUge1xuICAgIHRyYW5zZm9ybTogdW5zZXQ7XG4gICAgb3BhY2l0eTogMTAwJTtcbiAgfVxuXG4gICYucHJldmlvdXNfY29udGV4dF9tZW51IHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xuICAgIG9wYWNpdHk6IDAlO1xuICB9XG5gfSw3NjQxOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkN1c3RvbUNvbnRleHRNZW51SXRlbT12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpLG89bigzNjAwKSxhPW4oMjA4MCksaT1uKDkwNjgpLGw9e25vcm1hbDphLk5vcm1hbEN1c3RvbUNvbnRleHRNZW51SXRlbSxjaGVja2JveDphLk5vcm1hbEN1c3RvbUNvbnRleHRNZW51SXRlbSxzdWJtZW51OmEuTm9ybWFsQ3VzdG9tQ29udGV4dE1lbnVJdGVtLHNlcGFyYXRvcjpvLlNlcGFyYXRvckN1c3RvbUNvbnRleHRNZW51SXRlbSxzdWJtZW51SGVhZGVyOmkuU3VibWVudUhlYWRlckN1c3RvbUNvbnRleHRNZW51SXRlbX07dC5DdXN0b21Db250ZXh0TWVudUl0ZW09KHt0eXBlOmU9XCJub3JtYWxcIixpY29uOnQsbGFiZWw6bixlbmFibGVkOm89ITAsY2hlY2tlZDphLHN1Ym1lbnU6aSxzaG93U2hvdWxkSG9tZUJ1dHRvbjpzLG9uQ2xpY2s6YyxvbkNsb3NlOnUsb25CYWNrOmQsc2VsZWN0ZWQ6cH0pPT57Y29uc3QgZj1sW2VdO2xldCBoO3N3aXRjaChlKXtjYXNlXCJub3JtYWxcIjpjYXNlXCJjaGVja2JveFwiOmg9e3R5cGU6ZSxsYWJlbDpuLGljb246dCxlbmFibGVkOm8sY2hlY2tlZDphLHNlbGVjdGVkOnB9O2JyZWFrO2Nhc2VcInN1Ym1lbnVcIjpoPXtsYWJlbDpuLGVuYWJsZWQ6byxjaGVja2VkOmEsc3VibWVudTppLHNlbGVjdGVkOnB9O2JyZWFrO2Nhc2VcInN1Ym1lbnVIZWFkZXJcIjpoPXtsYWJlbDpuLHNob3dTaG91bGRIb21lQnV0dG9uOnMsb25DbG9zZTp1LG9uQmFjazpkLHNlbGVjdGVkOnB9O2JyZWFrO2Nhc2VcInNlcGFyYXRvclwiOmg9e319cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShmLE9iamVjdC5hc3NpZ24oe30saCx7a2V5Om4sb25DbGljazpjfSkpfX0sMjA4MDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Ob3JtYWxDdXN0b21Db250ZXh0TWVudUl0ZW09dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPXIobig3NTE4KSksaT1uKDEzMzUpLGw9big3NzY5KSxzPW4oOTYzNCk7dC5Ob3JtYWxDdXN0b21Db250ZXh0TWVudUl0ZW09KHt0eXBlOmUsbGFiZWw6dCxlbmFibGVkOm49ITAsY2hlY2tlZDpyLHN1Ym1lbnU6YSxvbkNsaWNrOmksc2VsZWN0ZWQ6bH0pPT4oMCxvLmpzeCkoYyx7Y2hpbGRyZW46KDAsby5qc3hzKSh1LE9iamVjdC5hc3NpZ24oe29uQ2xpY2s6bj9pOnZvaWQgMCxlbmFibGVkOm4udG9TdHJpbmcoKSxzZWxlY3RlZDpsfSx7Y2hpbGRyZW46W1wiY2hlY2tib3hcIj09PWUmJigwLG8uanN4KShkLE9iamVjdC5hc3NpZ24oe3NpZGU6XCJsZWZ0XCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkocCx7aWNvbjpcIkNoZWNrSWNvblwiLGVuYWJsZWQ6bi50b1N0cmluZygpLGNoZWNrZWQ6cn0pfSkpLCgwLG8uanN4KShoLE9iamVjdC5hc3NpZ24oe3NpemU6XCJiYXNlXCIsd2VpZ2h0Olwibm9ybWFsXCIsZW5hYmxlZDpufSx7Y2hpbGRyZW46dH0pKSxhJiYoMCxvLmpzeCkoZCxPYmplY3QuYXNzaWduKHtzaWRlOlwicmlnaHRcIn0se2NoaWxkcmVuOigwLG8uanN4KShmLHtpY29uOlwiQ2hldnJvblJpZ2h0SWNvblwiLGVuYWJsZWQ6bi50b1N0cmluZygpfSl9KSldfSkpfSk7Y29uc3QgYz0oMCxhLmRlZmF1bHQpKGkuQm94KWBcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC5zbWFsbH0gMCAke2UucHguc21hbGx9YH07XG5gLHU9KDAsYS5kZWZhdWx0KShpLkJveClgXG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDI4cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZSxzZWxlY3RlZDp0LGVuYWJsZWQ6bn0pPT5cImZhbHNlXCIhPT1uJiZ0P2UucGFsZXR0ZS5iYWNrZ3JvdW5kMzpcInRyYW5zcGFyZW50XCJ9O1xuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplLGVuYWJsZWQ6dH0pPT5cImZhbHNlXCIhPT10P2UucGFsZXR0ZS5iYWNrZ3JvdW5kMzpcInRyYW5zcGFyZW50XCJ9O1xuICB9XG5gLGQ9KDAsYS5kZWZhdWx0KShpLkJveClgXG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplLHNpZGU6dH0pPT5cInJpZ2h0XCI9PT10P2AwICR7ZS5weC5zbWFsbH0gMCAwYDpgMCAwIDAgJHtlLnB4LnNtYWxsfWB9O1xuICBtYXJnaW4tbGVmdDogJHsoe3NpZGU6ZX0pPT5cInJpZ2h0XCI9PT1lP1wiYXV0b1wiOjB9O1xuYCxwPSgwLGEuZGVmYXVsdCkocy5JY29uKWBcbiAgc3ZnIHBhdGgge1xuICAgIGZpbGw6ICR7KHt0aGVtZTplLGVuYWJsZWQ6dCxjaGVja2VkOm59KT0+XCJ0cnVlXCI9PT10P24/ZS5wYWxldHRlLnRleHREZWZhdWx0OlwidHJhbnNwYXJlbnRcIjplLnBhbGV0dGUudGV4dEluYWN0aXZlfTtcbiAgICBzdHJva2Utd2lkdGg6IDEuMjU7XG4gIH1cbmAsZj0oMCxhLmRlZmF1bHQpKHMuSWNvbilgXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuXG4gIHN2ZyBwYXRoIHtcbiAgICBmaWxsOiAkeyh7dGhlbWU6ZSxlbmFibGVkOnR9KT0+XCJ0cnVlXCI9PT10P2UucGFsZXR0ZS50ZXh0RGVmYXVsdDplLnBhbGV0dGUudGV4dEluYWN0aXZlfTtcbiAgICBzdHJva2Utd2lkdGg6IDEuMjU7XG4gIH1cbmAsaD0oMCxhLmRlZmF1bHQpKGwuVGV4dClgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZSxlbmFibGVkOnR9KT0+dD9lLnBhbGV0dGUudGV4dERlZmF1bHQ6ZS5wYWxldHRlLnRleHRJbmFjdGl2ZX07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC54eHhsYXJnZX0gMCAke2UucHguc21hbGx9YH07XG4gIGN1cnNvcjogZGVmYXVsdDtcbmB9LDY0NDk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUm9vdE1lbnVIZWFkZXI9dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPXIobig3NTE4KSksaT1uKDEzMzUpLGw9bigzNjAwKTt0LlJvb3RNZW51SGVhZGVyPSh7aWNvbjplfSk9PigwLG8uanN4cykoby5GcmFnbWVudCx7Y2hpbGRyZW46WygwLG8uanN4KShzLHtjaGlsZHJlbjplfSksKDAsby5qc3gpKGwuU2VwYXJhdG9yQ3VzdG9tQ29udGV4dE1lbnVJdGVtLHt9KV19KTtjb25zdCBzPSgwLGEuZGVmYXVsdCkoaS5Cb3gpYFxuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAyOHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgMCAwICR7ZS5weC5sYXJnZX1gfTtcbmB9LDM2MDA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU2VwYXJhdG9yQ3VzdG9tQ29udGV4dE1lbnVJdGVtPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1uKDEzMzUpLGk9cihuKDc1MTgpKTt0LlNlcGFyYXRvckN1c3RvbUNvbnRleHRNZW51SXRlbT0oKT0+KDAsby5qc3gpKGwsT2JqZWN0LmFzc2lnbih7XCJkYXRhLXRlc3RpZFwiOlwiY3VzdG9tLWNvbnRleHQtbWVudS1zZXBhcmF0b3JcIn0se2NoaWxkcmVuOigwLG8uanN4KShzLHt9KX0pKTtjb25zdCBsPSgwLGkuZGVmYXVsdCkoYS5Cb3gpYFxuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH0gMDtcbmAscz1pLmRlZmF1bHQuaHJgXG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDFweDtcbiAgYm9yZGVyOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDJ9O1xuYH0sOTA2ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TdWJtZW51SGVhZGVyQ3VzdG9tQ29udGV4dE1lbnVJdGVtPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1uKDY2ODkpLGk9cihuKDc1MTgpKSxsPW4oOTYzNCkscz1uKDc3NjkpLGM9bigxMzM1KSx1PW4oMzYwMCk7dC5TdWJtZW51SGVhZGVyQ3VzdG9tQ29udGV4dE1lbnVJdGVtPSh7bGFiZWw6ZSxzaG93U2hvdWxkSG9tZUJ1dHRvbjp0LG9uQ2xvc2U6bixvbkJhY2s6cixzZWxlY3RlZDppfSk9Pntjb25zdCBsPSgwLGEudXNlQ2FsbGJhY2spKChlPT57ZS5zdG9wUHJvcGFnYXRpb24oKSxudWxsPT1yfHxyKCl9KSxbcl0pLHM9KDAsYS51c2VDYWxsYmFjaykoKGU9PntlLnN0b3BQcm9wYWdhdGlvbigpLG51bGw9PW58fG4oKX0pLFtuXSk7cmV0dXJuKDAsby5qc3hzKShvLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsby5qc3hzKShkLHtjaGlsZHJlbjpbKDAsby5qc3gpKHAsT2JqZWN0LmFzc2lnbih7c2lkZTpcImxlZnRcIixzZWxlY3RlZDppfSx7Y2hpbGRyZW46KDAsby5qc3gpKGYse2ljb246XCJBcnJvd0xlZnRJY29uXCIsb25DbGljazpsLGlkOlwiYmFjay1pY29uXCIsc2VsZWN0ZWQ6aX0pfSkpLCgwLG8uanN4KShoLE9iamVjdC5hc3NpZ24oe3NpemU6XCJiYXNlXCIsd2VpZ2h0Olwibm9ybWFsXCJ9LHtjaGlsZHJlbjplfSkpLHQmJigwLG8uanN4KShwLE9iamVjdC5hc3NpZ24oe3NpZGU6XCJyaWdodFwifSx7Y2hpbGRyZW46KDAsby5qc3gpKGcse2ljb246XCJDcm9zczFJY29uXCIsb25DbGljazpzLGlkOlwiY2xvc2UtaWNvblwifSl9KSldfSksKDAsby5qc3gpKHUuU2VwYXJhdG9yQ3VzdG9tQ29udGV4dE1lbnVJdGVtLHt9KV19KX07Y29uc3QgZD0oMCxpLmRlZmF1bHQpKGMuQm94KWBcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMjhweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC5zbWFsbH0gMCAke2UucHguc21hbGx9YH07XG5gLHA9KDAsaS5kZWZhdWx0KShjLkJveClgXG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplLHNpZGU6dH0pPT5cInJpZ2h0XCI9PT10P2AwICR7ZS5weC5zbWFsbH0gMCAwYDpgMCAwIDAgJHtlLnB4LnNtYWxsfWB9O1xuICBtYXJnaW4tbGVmdDogJHsoe3NpZGU6ZX0pPT5cInJpZ2h0XCI9PT1lP1wiYXV0b1wiOjB9O1xuYCxmPSgwLGkuZGVmYXVsdCkobC5JY29uKWBcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7c2VsZWN0ZWQ6ZSx0aGVtZTp0fSk9PmU/dC5wYWxldHRlLmJhY2tncm91bmQzOlwidHJhbnNwYXJlbnRcIn07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZSxzZWxlY3RlZDp0fSk9PnQ/ZS5wYWxldHRlLnRleHREZWZhdWx0OmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIHN0cm9rZS13aWR0aDogMS4yNTtcblxuICAmOmhvdmVyIHtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgfVxuYCxoPSgwLGkuZGVmYXVsdCkocy5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC54eHhsYXJnZX0gMCAke2UucHguc21hbGx9YH07XG4gIGN1cnNvcjogZGVmYXVsdDtcbmAsZz0oMCxpLmRlZmF1bHQpKGwuSWNvbilgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgc3Ryb2tlLXdpZHRoOiAxLjI1O1xuXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICB9XG5gfSw5NTAxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5MzE4KSx0KX0sNDc0MDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VDb250ZXh0TWVudUtleWJvYXJkTmF2aWdhdGlvbj12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpLG89big5MzE4KTt0LnVzZUNvbnRleHRNZW51S2V5Ym9hcmROYXZpZ2F0aW9uPShlLHQsbixhLGksbCxzLGMsdSk9Pntjb25zdCBkPXQ9Pnt2YXIgbixyLG87cmV0dXJuXCJzZXBhcmF0b3JcIj09PShudWxsPT09KG49ZVt0XSl8fHZvaWQgMD09PW4/dm9pZCAwOm4udHlwZSl8fCExPT09KG51bGw9PT0ocj1lW3RdKXx8dm9pZCAwPT09cj92b2lkIDA6ci5lbmFibGVkKXx8ITE9PT0obnVsbD09PShvPWVbdF0pfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnZpc2libGUpfSxwPSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+e2koKHQ9PntsZXQgbj10O2Rve2lmKG49PT0obnVsbD09ZT92b2lkIDA6ZS5sZW5ndGgpLTEpYnJlYWs7bis9MX13aGlsZShkKG4pKTtyZXR1cm4gZChuKT90Om59KSl9KSxbaSxlXSksZj0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9PntpKChlPT57bGV0IHQ9ZTtkb3tpZihuPT09by5CQVNFX0NPTlRFWFRfTUVOVSYmMD09PXR8fC0xPT09dClicmVhazt0LT0xfXdoaWxlKGQodCkpO3JldHVybiB0fSkpfSksW2ksZV0pLGg9KDAsci51c2VDYWxsYmFjaykoKCgpPT57aShuPT09by5CQVNFX0NPTlRFWFRfTUVOVT8wOi0xKX0pLFtpLG5dKSxnPSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+e2koKHQ9Pntmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj10O24tLSlpZighZChuKSlyZXR1cm4gbjtyZXR1cm4gdH0pKX0pLFtudWxsPT1lP3ZvaWQgMDplLmxlbmd0aCxpXSksdj0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9Pnt2YXIgdCxyO2lmKG51bGw9PT0odD1lW2FdKXx8dm9pZCAwPT09dD92b2lkIDA6dC5oYXNTdWJNZW51KXMoKG51bGw9PT0ocj1lW2FdKXx8dm9pZCAwPT09cj92b2lkIDA6ci5sYWJlbCl8fFwiXCIpO2Vsc2V7aWYoLTE9PT1hKXJldHVybiB2b2lkIGMobixcImtleWJvYXJkXCIpO2woZVthXS5kYXRhKX1pKC0xKX0pLFtpLGwscyxlLGEsYyxuXSksQz0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9Pnt2YXIgdCxuOyhudWxsPT09KHQ9ZVthXSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuaGFzU3ViTWVudSkmJihzKChudWxsPT09KG49ZVthXSl8fHZvaWQgMD09PW4/dm9pZCAwOm4ubGFiZWwpfHxcIlwiKSxpKC0xKSl9KSxbaSxzLGUsYV0pLG09KDAsci51c2VDYWxsYmFjaykoKCgpPT57KHQuc2xpY2UoMSkuaW5jbHVkZXMobil8fChudWxsPT10P3ZvaWQgMDp0Lmxlbmd0aCk+PTEpJiZjKG4sXCJrZXlib2FyZFwiKX0pLFtjLHQsbl0pLHc9KDAsci51c2VDYWxsYmFjaykoKCgpPT57dC5zbGljZSgyKS5pbmNsdWRlcyhuKXx8KG51bGw9PXQ/dm9pZCAwOnQubGVuZ3RoKT49Mj91KCk6bCh7dHlwZTpcImNsb3NlXCJ9KX0pLFt1LHQsbl0pOygwLHIudXNlRWZmZWN0KSgoKCk9Pntjb25zdCBlPWU9Pntzd2l0Y2goZS5rZXkpe2Nhc2VcIkFycm93RG93blwiOnAoKTticmVhaztjYXNlXCJBcnJvd1VwXCI6ZigpO2JyZWFrO2Nhc2VcIkhvbWVcIjpjYXNlXCJQYWdlVXBcIjpoKCk7YnJlYWs7Y2FzZVwiRW5kXCI6Y2FzZVwiUGFnZURvd25cIjpnKCk7YnJlYWs7Y2FzZVwiRW50ZXJcIjp2KCk7YnJlYWs7Y2FzZVwiQXJyb3dSaWdodFwiOkMoKTticmVhaztjYXNlXCJBcnJvd0xlZnRcIjptKCk7YnJlYWs7Y2FzZVwiRXNjYXBlXCI6dygpfX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZSksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGUpfX0pLFtwLGYsaCxnLHYsQyxtLHddKX19LDQ3MjU6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlQ29udGV4dE1lbnVOYXZpZ2F0aW9uPXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1uKDkzMTgpO3QudXNlQ29udGV4dE1lbnVOYXZpZ2F0aW9uPShlLHQsbixhLGksbCxzLGMsdSxkKT0+e2NvbnN0IHA9KDAsci51c2VDYWxsYmFjaykoKGU9Pntjb25zdCB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLG49bnVsbD09dD92b2lkIDA6dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57aGVpZ2h0OihudWxsPT1uP3ZvaWQgMDpuLmhlaWdodCl8fDAsd2lkdGg6KG51bGw9PW4/dm9pZCAwOm4ud2lkdGgpfHwwfX0pLFtdKTtyZXR1cm57aGFuZGxlTmF2aWdhdGVUb1N1Ym1lbnU6KDAsci51c2VDYWxsYmFjaykoKHI9Pntjb25zdHtoZWlnaHQ6Yyx3aWR0aDp1fT1wKHIpO2QmJmQoYyx1KSxlfHx0KG8uQ09OVEVYVF9NRU5VX0FOSU1BVElPTl9EVVJBVElPTikscyh7d2lkdGg6dSxoZWlnaHQ6Y30pLGwociksYShbLi4ubixpXSl9KSxbaSxuLGEsZCx0LHBdKSxoYW5kbGVOYXZpZ2F0ZUJhY2tUb1BhcmVudDooMCxyLnVzZUNhbGxiYWNrKSgoKGUsdD1cImNsaWNrXCIpPT57aWYoZCl7Y29uc3QgZT0xPT09bi5sZW5ndGg/by5CQVNFX0NPTlRFWFRfTUVOVTpuW24ubGVuZ3RoLTFdLHtoZWlnaHQ6dCx3aWR0aDpyfT1wKGUpO2QodCxyKX1jb25zdCByPW4saT1yLnBvcCgpLHM9dS5maW5kKChlPT5lLnBhcmVudExhYmVsPT09aSkpO2woaSksYShyKSxjKFwia2V5Ym9hcmRcIj09PXQ/KG51bGw9PXM/dm9pZCAwOnMubWVudVRlbXBsYXRlLmZpbmRJbmRleCgodD0+dC5sYWJlbD09PWUpKSl8fDA6LTEpfSksW24sYSxjLHAsZCx1XSksaGFuZGxlTmF2aWdhdGVUb0Jhc2U6KDAsci51c2VDYWxsYmFjaykoKCgpPT57aWYoZCl7Y29uc3R7aGVpZ2h0OmUsd2lkdGg6dH09cChvLkJBU0VfQ09OVEVYVF9NRU5VKTtkKGUsdCl9bChvLkJBU0VfQ09OVEVYVF9NRU5VKSxhKFtdKSxjKC0xKX0pLFtsLGEsYyxwLGRdKX19fSw5MzA2OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVJlc2l6ZUNvbnRleHRNZW51PXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1uKDkzMTgpO3QudXNlUmVzaXplQ29udGV4dE1lbnU9ZT0+e2NvbnN0W3Qsbl09KDAsci51c2VTdGF0ZSkoe2hlaWdodDoxNjAsd2lkdGg6MTYwfSk7cmV0dXJuKDAsci51c2VFZmZlY3QpKCgoKT0+e2NvbnN0IHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSkscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChvLkNPTlRFWFRfTUVOVV9GUkFNRV9JRCk7aWYoIXQpcmV0dXJuO2NvbnN0IGE9bmV3IFJlc2l6ZU9ic2VydmVyKChlPT57Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3R7d2lkdGg6ZSxoZWlnaHQ6b309dC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ciYmKHIuc3R5bGUuaGVpZ2h0PWAke299cHhgLHIuc3R5bGUud2lkdGg9YCR7ZX1weGAsbih7d2lkdGg6ZSxoZWlnaHQ6b30pKX19KSk7cmV0dXJuIGEub2JzZXJ2ZSh0KSwoKT0+e2EudW5vYnNlcnZlKHQpfX0pLFtlXSksdH19LDczMzY6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZ2V0TWVudU5hdmlnYXRpb25PcmRlcj10LmdldENsYXNzTmFtZT12b2lkIDA7Y29uc3Qgcj1uKDkzMTgpO3QuZ2V0Q2xhc3NOYW1lPShlLHQsbik9PnQ9PT1lP3IuQUNUSVZFX0NPTlRFWFRfTUVOVV9DTEFTUzpuLmluY2x1ZGVzKGUpP3IuUFJJT1JfQ09OVEVYVF9NRU5VX0NMQVNTOlwiXCIsdC5nZXRNZW51TmF2aWdhdGlvbk9yZGVyPWU9PntpZighZSlyZXR1cm5bXTtjb25zdCB0PVt7cGFyZW50TGFiZWw6ci5CQVNFX0NPTlRFWFRfTUVOVSx0ZW1wbGF0ZTplfV0sbj1bXTtmb3IoO3QubGVuZ3RoOyl7Y29uc3R7dGVtcGxhdGU6ZSxwYXJlbnRMYWJlbDpyfT10LnBvcCgpO2UuZm9yRWFjaCgoKHtzdWJtZW51Om4sbGFiZWw6cn0sbyk9PntuJiYodC5wdXNoKHtwYXJlbnRMYWJlbDpyfHxcIlwiLHRlbXBsYXRlOm59KSxkZWxldGUgZVtvXS5zdWJtZW51LGVbb10uaGFzU3ViTWVudT0hMCl9KSksbi5wdXNoKHtwYXJlbnRMYWJlbDpyLG1lbnVUZW1wbGF0ZTplfSl9cmV0dXJuIG59fSw5NjQ0OihlLHQpPT57dmFyIG47T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5FeHBhbmREaXJlY3Rpb249dm9pZCAwLChuPXQuRXhwYW5kRGlyZWN0aW9ufHwodC5FeHBhbmREaXJlY3Rpb249e30pKVtuLlVwPTBdPVwiVXBcIixuW24uRG93bj0xXT1cIkRvd25cIn0sNDAyMTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5FeHBhbmRhYmxlQnV0dG9uPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1uKDY2ODkpLGk9big0MTMwKSxsPXIobig3NTE4KSkscz1uKDk2MzQpLGM9big5MTQxKSx1PW4oMzAzMCksZD1uKDEzMzUpLHA9big5NjQ0KTt0LkV4cGFuZGFibGVCdXR0b249ZT0+e3ZhciB0LG4scixsLHMsZjtjb25zdFtiLHldPSgwLGEudXNlU3RhdGUpKHtzaG93OiExLHJlcXVlc3RlZEJ5Q29sbGFwc2U6ITF9KSx4PXtzaXplOmUuc2l6ZSxraW5kOmUua2luZCxkaXNhYmxlZDplLmRpc2FibGVkLHRhYkluZGV4OmUudGFiSW5kZXh9LGs9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtzaGFwZTppLkJ1dHRvblNoYXBlLnNxdWFyZSxcImFyaWEtbGFiZWxcIjpudWxsIT09KHQ9ZVtcImFyaWEtbGFiZWxcIl0pJiZ2b2lkIDAhPT10P3Q6YFByaW1hcnkgQnV0dG9uICR7ZS50aXRsZX1gfSksUz1udWxsIT09KG49ZS5leHBhbmREaXJlY3Rpb24pJiZ2b2lkIDAhPT1uP246cC5FeHBhbmREaXJlY3Rpb24uRG93bjtyZXR1cm4oMCxhLnVzZUVmZmVjdCkoKCgpPT57aWYoIWIucmVxdWVzdGVkQnlDb2xsYXBzZSlyZXR1cm47Y29uc3QgZT1zZXRUaW1lb3V0KCgoKT0+eSh7cmVxdWVzdGVkQnlDb2xsYXBzZTohMSxzaG93OiExfSkpLDIwMCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dChlKX0pLFtiLnJlcXVlc3RlZEJ5Q29sbGFwc2VdKSwoMCxvLmpzeHMpKHcse2NoaWxkcmVuOlsoMCxvLmpzeHMpKG0se2NoaWxkcmVuOlsoMCxvLmpzeCkoZyxPYmplY3QuYXNzaWduKHt9LGsse2NoaWxkcmVuOigwLG8uanN4KSh2LHtjaGlsZHJlbjpudWxsIT09KHI9ZS5jaGlsZHJlbikmJnZvaWQgMCE9PXI/cjprLnRpdGxlfSl9KSksZS5zZWNvbmRhcnlCdXR0b25zJiZlLnNlY29uZGFyeUJ1dHRvbnMubGVuZ3RoPjAmJigwLG8uanN4KShkLkJveCxPYmplY3QuYXNzaWduKHtpZDpcImRyb3Bkb3duLWNvbnRhaW5lclwifSx7Y2hpbGRyZW46KDAsby5qc3hzKShDLE9iamVjdC5hc3NpZ24oe30seCx7cm9sZTpcImNvbWJvYm94XCIsb25DbGljazooKT0+e2IucmVxdWVzdGVkQnlDb2xsYXBzZXx8eSh7cmVxdWVzdGVkQnlDb2xsYXBzZTohMSxzaG93OiFiLnNob3d9KX0sXCJhcmlhLWxhYmVsXCI6XCJFeHBhbmQgU2Vjb25kYXJ5IEJ1dHRvbnMgUGFuZWxcIixcImFyaWEtZXhwYW5kZWRcIjpiLnNob3d9LHtjaGlsZHJlbjpbUz09PXAuRXhwYW5kRGlyZWN0aW9uLkRvd24mJigwLG8uanN4KShoLHtraW5kOm51bGwhPT0obD1lLmtpbmQpJiZ2b2lkIDAhPT1sP2w6aS5CdXR0b25LaW5kLnByaW1hcnksaWNvbjpcIkNhcmV0RG93bkljb25cIn0pLFM9PT1wLkV4cGFuZERpcmVjdGlvbi5VcCYmKDAsby5qc3gpKGgse2tpbmQ6bnVsbCE9PShzPWUua2luZCkmJnZvaWQgMCE9PXM/czppLkJ1dHRvbktpbmQucHJpbWFyeSxpY29uOlwiQ2FyZXRVcEljb25cIn0pXX0pKX0pKV19KSxlLnNlY29uZGFyeUJ1dHRvbnMmJmUuc2Vjb25kYXJ5QnV0dG9ucy5sZW5ndGg+MCYmKDAsby5qc3gpKGMuQW5pbWF0ZVByZXNlbmNlLHtjaGlsZHJlbjpiLnNob3cmJigwLG8uanN4KSh1LkV4cGFuZGFibGVQYW5lbCx7ZXhwYW5kRGlyZWN0aW9uOlMsc2Vjb25kYXJ5QnV0dG9uczpudWxsIT09KGY9ZS5zZWNvbmRhcnlCdXR0b25zKSYmdm9pZCAwIT09Zj9mOltdLHN0cmV0Y2g6ZS5zdHJldGNoRXhwYW5kYWJsZVBhbmVsLGNsb3NlUGFuZWxPblNlY29uZGFyeUJ1dHRvbkNsaWNrOmUuY2xvc2VQYW5lbE9uU2Vjb25kYXJ5QnV0dG9uQ2xpY2ssb25Db2xsYXBzZVJlcXVlc3Q6KCk9Pnkoe3Nob3c6ITEscmVxdWVzdGVkQnlDb2xsYXBzZTohMH0pLGJ1dHRvblNpemU6ZS5zaXplLGRvY3VtZW50OmUuZG9jdW1lbnR9KX0pXX0pfTtjb25zdCBmPXtbaS5CdXR0b25LaW5kLnByaW1hcnldOmU9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlUZXh0LFtpLkJ1dHRvbktpbmQuc2Vjb25kYXJ5XTplPT5lLnBhbGV0dGUuYnJhbmRTZWNvbmRhcnlUZXh0LFtpLkJ1dHRvbktpbmQudGV4dE9ubHldOmU9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH0saD0oMCxsLmRlZmF1bHQpKHMuSWNvbilgXG4gIHN2ZyBwYXRoIHtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmUsa2luZDp0fSk9PmZbdF0oZSl9O1xuICB9XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQudWl9O1xuICBmb250LXdlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5mb250V2VpZ2h0LmJvbGR9O1xuYCxnPSgwLGwuZGVmYXVsdCkoaS5CdXR0b24pYFxuICBtYXJnaW4tcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbmAsdj0oMCxsLmRlZmF1bHQpKGQuQm94KWBcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuYCxDPSgwLGwuZGVmYXVsdCkoaS5CdXR0b24pYFxuICB3aWR0aDogJHtlPT5lLnRoZW1lLnB4Lnh4bGFyZ2V9O1xuICBwYWRkaW5nOiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbmAsbT1sLmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYCx3PWwuZGVmYXVsdC5kaXZgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuYH0sMjEyODooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5zZXR1cEV4cGFuZGFibGVQYW5lbD12b2lkIDA7Y29uc3Qgcj1uKDk2NDQpO3Quc2V0dXBFeHBhbmRhYmxlUGFuZWw9KGUsdCxuPSExKT0+e2lmKCFlfHwwPT09ZS5jaGlsZE5vZGVzLmxlbmd0aClyZXR1cm47Y29uc3Qgbz1lLnBhcmVudEVsZW1lbnQsYT1udWxsPT1vP3ZvaWQgMDpvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZighYSlyZXR1cm47Y29uc3QgbD1pLmhlaWdodCxzPWkud2lkdGg8PWEud2lkdGh8fG4/aS53aWR0aDphLndpZHRoLGM9YS54K3M+ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aHx8czxhLndpZHRoO2Uuc3R5bGUud2lkdGg9YCR7c31weGAsZS5zdHlsZS5vcGFjaXR5PVwiMVwiLGM/ZS5zdHlsZS5yaWdodD1cIjBweFwiOmUuc3R5bGUubGVmdD1cIjBweFwiLHQ9PT1yLkV4cGFuZERpcmVjdGlvbi5Eb3duJiYoZS5zdHlsZS50b3A9YCR7YS5oZWlnaHR9cHhgKSx0PT09ci5FeHBhbmREaXJlY3Rpb24uVXAmJihlLnN0eWxlLnRvcD0tMSpsK1wicHhcIil9fSwzMDMwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkV4cGFuZGFibGVQYW5lbD12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9cihuKDc1MTgpKSxpPW4oOTE0MSksbD1uKDQxMzApLHM9bigxMzM1KSxjPW4oMjEyOCksdT1yKG4oNDQ4MykpLGQ9e3R5cGU6XCJzcHJpbmdcIixkdXJhdGlvbjouMixib3VuY2U6LjI1fTt0LkV4cGFuZGFibGVQYW5lbD1lPT57dmFyIHQ7Y29uc3Qgbj1gJHtlLnBhbmVsSWR9LWV4cGFuZGFibGUtcGFuZWxgO3JldHVybigwLG8uanN4KSh1LmRlZmF1bHQsT2JqZWN0LmFzc2lnbih7Zm9jdXNUcmFwT3B0aW9uczp7ZmFsbGJhY2tGb2N1czpgIyR7bn1gLGNsaWNrT3V0c2lkZURlYWN0aXZhdGVzOiEwLG9uRGVhY3RpdmF0ZTplLm9uQ29sbGFwc2VSZXF1ZXN0LGluaXRpYWxGb2N1czohMSxkb2N1bWVudDplLmRvY3VtZW50LHJldHVybkZvY3VzT25EZWFjdGl2YXRlOiExfX0se2NoaWxkcmVuOigwLG8uanN4KShoLE9iamVjdC5hc3NpZ24oe3JlZjp0PT4oMCxjLnNldHVwRXhwYW5kYWJsZVBhbmVsKSh0LGUuZXhwYW5kRGlyZWN0aW9uLGUuc3RyZXRjaCksdGFiSW5kZXg6MCxpZDpuLGluaXRpYWw6XCJpbml0aWFsXCIsZXhpdDpcImhpZGRlblwiLGJ1dHRvblNpemU6bnVsbCE9PSh0PWUuYnV0dG9uU2l6ZSkmJnZvaWQgMCE9PXQ/dDpsLkJ1dHRvblNpemUuYmFzZSxhbmltYXRlOlwidmlzaWJsZVwiLHJvbGU6XCJtZW51XCIsdHJhbnNpdGlvbjpkLG9uTW91c2VPdmVyOigpPT57dmFyIGU7cmV0dXJuIG51bGw9PT0oZT1kb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5ibHVyKCl9fSx7Y2hpbGRyZW46ZS5zZWNvbmRhcnlCdXR0b25zLm1hcCgoKHQsbik9PigwLG8uanN4KShsLkJ1dHRvbixPYmplY3QuYXNzaWduKHtjbGFzc05hbWU6XCJtZW51LWl0ZW1cIix0YWJJbmRleDpuKzEsdGl0bGU6dC50aXRsZSxyb2xlOlwibWVudWl0ZW1cIixzaXplOmUuYnV0dG9uU2l6ZSxkaXNhYmxlZDp0LmRpc2FibGVkLGtpbmQ6XCJ0ZXh0T25seVwiLG9uQ2xpY2s6bj0+KCh0LG4pPT57ZS5jbG9zZVBhbmVsT25TZWNvbmRhcnlCdXR0b25DbGljaz8obi5vbkNsaWNrKHQpLGUub25Db2xsYXBzZVJlcXVlc3QoKSk6bi5vbkNsaWNrKHQsKCgpPT5lLm9uQ29sbGFwc2VSZXF1ZXN0KCkpKX0pKG4sdCksXCJhcmlhLWxhYmVsXCI6dC50aXRsZX0se2NoaWxkcmVuOigwLG8uanN4KShwLE9iamVjdC5hc3NpZ24oe1wiYXJpYS1sYWJlbFwiOnQudGl0bGV9LHtjaGlsZHJlbjp0LnRpdGxlfSkpfSksbikpKX0pLFwiZXhwYW5kYWJsZVBhbmVsXCIpfSkpfTtjb25zdCBwPSgwLGEuZGVmYXVsdCkocy5Cb3gpYFxuICBwYWRkaW5nLWJvdHRvbTogMXB4O1xuICBwYWRkaW5nLXRvcDogMXB4O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgZGlzcGxheTogYmxvY2s7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5gLGY9e1tsLkJ1dHRvblNpemUuc21hbGxdOmU9PmUucHguc21hbGwsW2wuQnV0dG9uU2l6ZS5iYXNlXTplPT5lLnB4LmJhc2UsW2wuQnV0dG9uU2l6ZS5sYXJnZV06ZT0+ZS5weC5sYXJnZX0saD0oMCxhLmRlZmF1bHQpKGkubW90aW9uLmRpdilgXG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgb3BhY2l0eTogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206ICR7ZT0+ZS50aGVtZS5weC54eHhsYXJnZX07XG4gIG1heC13aWR0aDogbWF4LWNvbnRlbnQ7XG4gIG1pbi13aWR0aDogODBweDtcbiAgYmFja2dyb3VuZDogJHtlPT5lLnRoZW1lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICBib3gtc2hhZG93OiAke2U9PmUudGhlbWUuc2hhZG93LmJhc2V9O1xuICBoZWlnaHQ6IG1heC1jb250ZW50O1xuICB6LWluZGV4OiAxMDA7XG5cbiAgLm1lbnUtaXRlbSB7XG4gICAgYm9yZGVyLXJhZGl1czogdW5zZXQ7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IHRyYW5zcGFyZW50O1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG92ZXJmbG93OiBjbGlwO1xuICAgICYgPiAqIHtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuICAgIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQubm9ybWFsfTtcbiAgICBwYWRkaW5nLXRvcDogJHsoe3RoZW1lOmUsYnV0dG9uU2l6ZTp0fSk9PmZbdF0oZSl9O1xuICAgIHBhZGRpbmctYm90dG9tOiAkeyh7dGhlbWU6ZSxidXR0b25TaXplOnR9KT0+Zlt0XShlKX07XG4gICAgcGFkZGluZy1sZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcblxuICAgIDpmaXJzdC1jaGlsZCB7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICAgIH1cblxuICAgIDpsYXN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gICAgfVxuXG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgYmFja2dyb3VuZDogJHtlPT5lLnRoZW1lLnBhbGV0dGUuYmFja2dyb3VuZDJ9O1xuICAgIH1cblxuICAgICY6ZGlzYWJsZWQsXG4gICAgJjphY3RpdmU6ZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SW5hY3RpdmV9O1xuICAgICAgYmFja2dyb3VuZDogJHtlPT5lLnRoZW1lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICAgICAgb3BhY2l0eTogdW5zZXQ7XG4gICAgfVxuICB9XG5gfSw0OTI1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig0MDIxKSx0KSxvKG4oOTY0NCksdCl9LDI2MDk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDU5NzEpLHQpfSw1OTcxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVG9nZ2xlPXZvaWQgMDtjb25zdCBhPW4oNTg5MyksaT1uKDY2ODkpLGw9byhuKDc1MTgpKSxzPW4oODUxMCksYz1uKDEzMzUpLHU9bigxOTQ0KTt0LlRvZ2dsZT1lPT57dmFye2lkOnQsbGFiZWw6bixvbkNoYW5nZTpvLGxhYmVsU2lkZTpsPVwicmlnaHRcIix0eXBlOnM9XCJjaGVja2JveFwiLGhlbHBlclRleHQ6Y309ZSxnPXIoZSxbXCJpZFwiLFwibGFiZWxcIixcIm9uQ2hhbmdlXCIsXCJsYWJlbFNpZGVcIixcInR5cGVcIixcImhlbHBlclRleHRcIl0pO2NvbnN0W3YsQ109KDAsaS51c2VTdGF0ZSkoZy5jaGVja2VkKTtyZXR1cm4oMCxpLnVzZUVmZmVjdCkoKCgpPT57QyhnLmNoZWNrZWQpfSksW2cuY2hlY2tlZF0pLCgwLGEuanN4cykoZCxPYmplY3QuYXNzaWduKHtsYWJlbFNpZGU6bH0se2NoaWxkcmVuOlsobnx8YykmJigwLGEuanN4KSh1LkxhYmVsLHtodG1sRm9yOnQsdGV4dDpuLGhlbHBlclRleHQ6Y30pLCgwLGEuanN4cykocCxPYmplY3QuYXNzaWduKHtpc0NoZWNrZWQ6dn0se2NoaWxkcmVuOlsoMCxhLmpzeCkoaCxPYmplY3QuYXNzaWduKHt9LGcse2lkOnQsdHlwZTpzLG9uQ2hhbmdlOmU9PntDKGUudGFyZ2V0LmNoZWNrZWQpLG51bGw9PW98fG8oZSl9fSkpLCgwLGEuanN4KShmLHt0YWJJbmRleDotMSxcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCIsaXNDaGVja2VkOnZ9KV19KSldfSkpfTtjb25zdCBkPWwuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+ZS5weC54bGFyZ2V9O1xuICBmbGV4LWRpcmVjdGlvbjogJHsoe2xhYmVsU2lkZTplfSk9PlwibGVmdFwiPT09ZT9cInJvd1wiOlwicm93LXJldmVyc2VcIn07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhsYXJnZX07XG5gLHA9KDAsbC5kZWZhdWx0KShjLkJveClgXG4gIC0tcHgtdG9nZ2xlOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhsYXJnZX07XG4gIC0tcHgta25vYjogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogdmFyKC0tcHgtdG9nZ2xlKTtcbiAgd2lkdGg6IGNhbGMoMiAqIHZhcigtLXB4LXRvZ2dsZSkpO1xuICBib3JkZXI6IDFweCBzb2xpZFxuICAgICR7KHtpc0NoZWNrZWQ6ZSx0aGVtZTp0fSk9PmU/dC5wYWxldHRlLmJyYW5kUHJpbWFyeTp0LnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICBib3JkZXItcmFkaXVzOiBjYWxjKDAuNSAqIHZhcigtLXB4LXRvZ2dsZSkpO1xuXG4gIGJhY2tncm91bmQ6ICR7KHtpc0NoZWNrZWQ6ZSx0aGVtZTp0fSk9PmU/dC5wYWxldHRlLmJyYW5kUHJpbWFyeTp0LnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbiksXG4gICAgYm9yZGVyLWNvbG9yIHZhcigtLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuXG4gICY6Zm9jdXMtd2l0aGluIHtcbiAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEZvY3VzZWR9O1xuICB9XG5gLGY9bC5kZWZhdWx0LmJ1dHRvbmBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogdmFyKC0tcHgta25vYik7XG4gIGhlaWdodDogdmFyKC0tcHgta25vYik7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH07XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kOiAkeyh7aXNDaGVja2VkOmUsdGhlbWU6dH0pPT5lP3QucGFsZXR0ZS5icmFuZFByaW1hcnlUZXh0OnQucGFsZXR0ZS5pbnB1dENvbG9yfTtcbiAgYm9yZGVyOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICB0cmFuc2l0aW9uOiBsZWZ0IHZhcigtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbiksIGJhY2tncm91bmQgdmFyKC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uKTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IC8qIEFsbG93IHBhc3MtdGhydSBmb3IgbmF0aXZlIGlucHV0ICovXG5gLGg9KDAsbC5kZWZhdWx0KShzLlJhd0lucHV0KWBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG9wYWNpdHk6IDA7XG4gIGJvcmRlcjogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgZGlzcGxheTogYmxvY2s7XG5cbiAgJjpjaGVja2VkICsgJHtmfSB7XG4gICAgbGVmdDogY2FsYygxMDAlIC0gJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX0pO1xuICB9XG4gICY6ZGlzYWJsZWQgKyAke2Z9IHtcbiAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gIH1cbiAgJjpub3QoOmRpc2FibGVkKSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5gfSw1MzAwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQmFkZ2U9dm9pZCAwO2NvbnN0IGE9big1ODkzKSxpPW8obig3NTE4KSksbD1uKDEzMzUpLHM9bigzODc3KTt0LkJhZGdlPWU9Pnt2YXJ7Y291bnQ6dD0wLG1heDpufT1lLG89cihlLFtcImNvdW50XCIsXCJtYXhcIl0pO2xldCBpPXQudG9TdHJpbmcoKTtyZXR1cm4gbiYmdD5uJiYoaT1gJHtufStgKSwoMCxhLmpzeCkoYyxPYmplY3QuYXNzaWduKHt9LG8se2NoaWxkcmVuOml9KSl9O2NvbnN0IGM9KDAsaS5kZWZhdWx0KShsLkJveClgXG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5zdGF0dXNDcml0aWNhbH07XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnBpbGx9O1xuICBjb2xvcjogJHtzLkNvbG9yLndoaXRlfTtcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLnNtYWxsfTtcbiAgbWluLXdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhsYXJnZX07XG4gIHBhZGRpbmc6IDJweCA2cHg7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYm94LXNoYWRvdzogJHsoe3RoZW1lOmV9KT0+ZS5zaGFkb3cuYmFzZX07XG5gfSwzMTM2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig1MzAwKSx0KX0sNjg5NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGE9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH0saT10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxsPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2FsZW5kYXI9dm9pZCAwO2NvbnN0IHM9big1ODkzKSxjPW4oNjY4OSksdT1sKG4oNzUxOCkpLGQ9big3MjkyKSxwPW4oNDEzMCksZj1uKDEzMzUpLGg9YShuKDUyOTkpKTt0LkNhbGVuZGFyPWU9Pnt2YXJ7dmFsdWU6dCxvbkNoYW5nZTpuLG9uRGlzbWlzczpyfT1lLG89aShlLFtcInZhbHVlXCIsXCJvbkNoYW5nZVwiLFwib25EaXNtaXNzXCJdKTtjb25zdFthXT0oMCxjLnVzZVN0YXRlKSh0KSxbbCx1XT0oMCxjLnVzZVN0YXRlKSh0KSxwPSgwLGMudXNlQ2FsbGJhY2spKChlPT57dShlKSxudWxsPT1ufHxuKGUpfSksW10pLGY9KDAsYy51c2VDYWxsYmFjaykoKCgpPT57cChhKSxudWxsPT1yfHxyKCl9KSxbXSk7cmV0dXJuKDAscy5qc3hzKShDLE9iamVjdC5hc3NpZ24oe1wiZGF0YS10ZXN0aWRcIjpcInJlYWN0LWNhbGVuZGFyXCJ9LHtjaGlsZHJlbjpbKDAscy5qc3gpKGQuQ2FsZW5kYXIsT2JqZWN0LmFzc2lnbih7dmFsdWU6bCxvbkNoYW5nZTpwLGNhbGVuZGFyVHlwZTpcIlVTXCIsZGVmYXVsdFZpZXc6XCJtb250aFwiLG1pbkRldGFpbDpcInllYXJcIixuZXh0MkxhYmVsOm51bGwscHJldjJMYWJlbDpudWxsLHNob3dGaXhlZE51bWJlck9mV2Vla3M6ITB9LG8pKSwoMCxzLmpzeHMpKGcse2NoaWxkcmVuOlsoMCxzLmpzeCkodix7XCJkYXRhLXRlc3RpZFwiOlwiY2FsZW5kYXItY2FuY2VsLWJ1dHRvblwiLFwiYXJpYS1sYWJlbFwiOlwiY2FuY2VsLWJ1dHRvblwiLGxhYmVsOlwiQ2FuY2VsXCIsc2l6ZTpcImJhc2VcIixraW5kOlwidGV4dE9ubHlcIixvbkNsaWNrOmZ9KSwoMCxzLmpzeCkodix7XCJkYXRhLXRlc3RpZFwiOlwiY2FsZW5kYXItYXBwbHktYnV0dG9uXCIsXCJhcmlhLWxhYmVsXCI6XCJhcHBseS1idXR0b25cIixsYWJlbDpcIkFwcGx5XCIsc2l6ZTpcImJhc2VcIixraW5kOlwicHJpbWFyeVwiLG9uQ2xpY2s6cn0pXX0pXX0pKX07Y29uc3QgZz0oMCx1LmRlZmF1bHQpKGYuQm94KWBcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9IDBweGB9O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICBtYXJnaW4tcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9YH07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIGJvcmRlci10b3A6IG5vbmU7XG5gLHY9KDAsdS5kZWZhdWx0KShwLkJ1dHRvbilgXG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5zbWFsbH1gfTtcbiAgbWFyZ2luLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfWB9O1xuYCxDPSgwLHUuZGVmYXVsdCkoZi5Cb3gpYFxuICAke2h9O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG5cbiAgLnJlYWN0LWNhbGVuZGFyIHtcbiAgICBtaW4td2lkdGg6IDIzMHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH0gIWltcG9ydGFudDtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgLnJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uX19hcnJvdyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fSAhaW1wb3J0YW50O1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5sYXJnZX07XG5cbiAgICA6ZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICB9XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb25fX2xhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICB9XG5cbiAgLnJlYWN0LWNhbGVuZGFyX192aWV3Q29udGFpbmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dENvbG9yfTtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtkYXlzIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG5cbiAgICBhYmJyIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB9XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX3RpbGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgYm9yZGVyLXJhZGl1czogMTAwcHg7XG4gICAgYXNwZWN0LXJhdGlvOiAxLzE7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgOmRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEluYWN0aXZlfTtcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cbiAgICAgIDpob3ZlciB7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICA6aG92ZXIge1xuICAgICAgYm9yZGVyOiAycHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX07XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgICB9XG5cbiAgICA6Zm9jdXMge1xuICAgICAgYm9yZGVyOiAycHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX07XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgICB9XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX3RpbGUtLW5vdyB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX0gIWltcG9ydGFudDtcbiAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fSAhaW1wb3J0YW50O1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5VGV4dH07XG4gICAgYm9yZGVyLXJhZGl1czogMTAwcHg7XG5cbiAgICA6Zm9jdXMge1xuICAgICAgYm9yZGVyOiAycHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX07XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICAgIH1cbiAgfVxuYH0sOTczNDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNjg5NSksdCl9LDE2MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Ecm9wZG93bkJ1dHRvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9bigyNzkpLGk9big3MjYxKSxsPW4oOTYzNCkscz1uKDY2ODkpLGM9cihuKDc1MTgpKSx1PW4oMTMzNSksZD1uKDk1MDcpLHA9bigxOTQ0KTt0LkRyb3Bkb3duQnV0dG9uPSgwLHMuZm9yd2FyZFJlZikoKChlLHQpPT57dmFyIG4scixsLHMsYztyZXR1cm4oMCxvLmpzeCkoaCx7Y2hpbGRyZW46KDAsby5qc3hzKShmLHtjaGlsZHJlbjpbKGUubGFiZWx8fGUuaGVscGVyVGV4dCkmJigwLG8uanN4KShwLkxhYmVsLHt0ZXh0OmUubGFiZWwsaGVscGVyVGV4dDplLmhlbHBlclRleHQsaHRtbEZvcjplLm5hbWV9KSwoMCxvLmpzeHMpKHYsT2JqZWN0LmFzc2lnbih7cm9sZTpcImNvbWJveGJveFwiLHJlZjp0LG5hbWU6ZS5uYW1lLHRhYkluZGV4OmUudGFiSW5kZXgsXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIjplLmFjdGl2ZURlc2NlbmRhbnQsc3RhdHVzOmUuc3RhdHVzLFwiYXJpYS1leHBhbmRlZFwiOmUuZXhwYW5kZWQsXCJhcmlhLWhhc3BvcHVwXCI6XCJsaXN0Ym94XCIsXCJhcmlhLWNvbnRyb2xzXCI6XCJkcm9wZG93bi1saXN0Ym94XCIsb25DbGljazooKT0+ZS5oYW5kbGVDbGljaygpLGFzOlwiYnV0dG9uXCIsXCJkYXRhLXRlc3RpZFwiOlwiZHJvcGRvd24tYnV0dG9uXCIsdGl0bGU6bnVsbCE9PShyPW51bGw9PT0obj1lLnNlbGVjdGVkKXx8dm9pZCAwPT09bj92b2lkIDA6bi50aXRsZSkmJnZvaWQgMCE9PXI/cjplLnBsYWNlaG9sZGVyfSx7Y2hpbGRyZW46WyhudWxsPT09KGw9ZS5zZWxlY3RlZCl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaWNvblVybCkmJigwLG8uanN4KShhLkJ1dHRvbkltYWdlLHtzcmM6ZS5zZWxlY3RlZC5pY29uVXJsfSksKDAsby5qc3gpKGkuT3B0aW9uVGl0bGUsT2JqZWN0LmFzc2lnbih7XCJhcmlhLWxpdmVcIjpcInBvbGl0ZVwiLFwiZGF0YS10ZXN0aWRcIjpcInNlbGVjdGVkLW9wdGlvblwifSx7Y2hpbGRyZW46bnVsbCE9PShjPW51bGw9PT0ocz1lLnNlbGVjdGVkKXx8dm9pZCAwPT09cz92b2lkIDA6cy50aXRsZSkmJnZvaWQgMCE9PWM/YzplLnBsYWNlaG9sZGVyfSkpLCgwLG8uanN4KShnLHtzdGF0dXM6ZS5zdGF0dXMsaWNvbjplLmV4cGFuZGVkP1wiQ2hldnJvblVwSWNvblwiOlwiQ2hldnJvbkRvd25JY29uXCJ9KV19KSldfSl9KX0pKSx0LkRyb3Bkb3duQnV0dG9uLmRpc3BsYXlOYW1lPVwiRHJvcGRvd25CdXR0b25cIjtjb25zdCBmPSgwLGMuZGVmYXVsdCkodS5Cb3gpYFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICB3aWR0aDogMTAwJTtcbmAsaD0oMCxjLmRlZmF1bHQpKHUuQm94KWBcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICB3aWR0aDogMTAwJTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG5gLGc9KDAsYy5kZWZhdWx0KShsLkljb24pYFxuICBjb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsZC5nZXRTdGF0dXNDb2xvcikoZSx0LFwidGV4dERlZmF1bHRcIil9O1xuYCx2PSgwLGMuZGVmYXVsdCkodS5Cb3gpYFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICBib3JkZXI6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRCYWNrZ3JvdW5kfTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplLHN0YXR1czp0fSk9PigwLGQuZ2V0U3RhdHVzQ29sb3IpKGUsdCxcImlucHV0Qm9yZGVyXCIpfTtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQuYm9sZH07XG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC51aX07XG4gIG91dGxpbmU6IG5vbmU7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5zbWFsbH1gfTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuICB3aWR0aDogMTAwJTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAke2wuSWNvbn0ge1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICB9XG5cbiAgJjpmb2N1cy13aXRoaW4ge1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsZC5nZXRTdGF0dXNDb2xvcikoZSx0LFwiaW5wdXRGb2N1c2VkXCIpfTtcbiAgfVxuYH0sNjA2MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Ecm9wZG93bk1lbnU9dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPW4oNjY4OSksaT1uKDEzMzUpLGw9cihuKDc1MTgpKSxzPW4oNzI2MSksYz1uKDI3OSksdT1uKDM0NyksZD1uKDE2Mik7dC5Ecm9wZG93bk1lbnU9KDAsYS5mb3J3YXJkUmVmKSgoKHtsYWJlbDplLG9wdGlvbnM6dD1bW11dLHBsYWNlaG9sZGVyOm49XCJTZWxlY3QgYW4gb3B0aW9uXCIsc2VsZWN0ZWQ6cixvbk9wdGlvbkhvdmVyOmwsb25DaGFuZ2U6aCxyZW5kZXJMYWJlbDpnLGZpdENvbnRlbnQ6dn0sQyk9PntpZihyJiYhKChlLHQpPT5lLnNvbWUoKGU9PmUuc29tZSgoZT0+ZS52YWx1ZT09PXQudmFsdWUpKSkpKSh0LHIpKXRocm93IG5ldyBFcnJvcihgVGhlIHNlbGVjdGVkIG9wdGlvbiAke3IudmFsdWV9IGlzIG5vdCBwcmVzZW50IGluIHRoZSBvcHRpb25zIGFycmF5YCk7Y29uc3RbbSx3XT0oMCxhLnVzZVN0YXRlKSghMSk7KDAsYS51c2VFZmZlY3QpKCgoKT0+ezE9PT10WzBdLmxlbmd0aCYmYighMSl9KSxbdF0pO2NvbnN0IGI9ZT0+e3cobnVsbCE9ZT9lOiFtKX0se2ZvY3VzZWRPcHRpb246eSxoYW5kbGVLZXlEb3duOnh9PSgwLHUudXNlRHJvcGRvd25LZXlib2FyZE5hdmlnYXRpb24pKHQscixtLGIsaCk7cmV0dXJuKDAsby5qc3gpKHAsT2JqZWN0LmFzc2lnbih7cmVmOkMsZmxleERpcmVjdGlvbjpcImNvbHVtblwiLG9uQmx1cjplPT57ZS5jdXJyZW50VGFyZ2V0LmNvbnRhaW5zKGUucmVsYXRlZFRhcmdldCl8fHcoITEpfSxvbktleURvd246eH0se2NoaWxkcmVuOigwLG8uanN4cykoaS5Cb3gsT2JqZWN0LmFzc2lnbih7Z2FwOlwic21hbGxcIixmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsc3R5bGU6e3dpZHRoOlwiMTAwJVwifX0se2NoaWxkcmVuOltlJiYoMCxvLmpzeCkoXCJsYWJlbFwiLE9iamVjdC5hc3NpZ24oe2h0bWxGb3I6XCJkcm9wZG93bi1idXR0b25cIn0se2NoaWxkcmVuOigwLG8uanN4KShzLk9wdGlvblRpdGxlLHtjaGlsZHJlbjplfSl9KSksKDAsby5qc3hzKShmLHtjaGlsZHJlbjpbZz8oMCxvLmpzeCkoYS5GcmFnbWVudCx7Y2hpbGRyZW46ZyhyfHx7dGl0bGU6bix2YWx1ZTpudWxsfSxtLGIseSl9LGByZW5kZXItbGFiZWwtJHtyfWApOigwLG8uanN4KShkLkRyb3Bkb3duQnV0dG9uLHt0YWJJbmRleDowLGFjdGl2ZURlc2NlbmRhbnQ6YG1lbnUtb3B0aW9uLSR7bnVsbD09eT92b2lkIDA6eS52YWx1ZX1gLGV4cGFuZGVkOm0mJnRbMF0ubGVuZ3RoPjEsaGFuZGxlQ2xpY2s6KCk9PmIoKSxzZWxlY3RlZDpyLHBsYWNlaG9sZGVyOm59KSx0Lmxlbmd0aCYmdFswXS5sZW5ndGg+MSYmbSYmKDAsby5qc3gpKGMuTWVudSx7bWVudUlkOlwiZHJvcGRvd24tbGlzdGJveFwiLG9wdGlvbnM6dCxzZWxlY3RlZDpyLGhhbmRsZUV4cGFuZE1lbnU6Yixvbk9wdGlvbkhvdmVyOmwsb25DaGFuZ2U6aCxmaXRDb250ZW50OnYsZm9jdXNlZE9wdGlvbjp5LGFic29sdXRlUG9zaXRpb246ITB9KV19KV19KSl9KSl9KSksdC5Ecm9wZG93bk1lbnUuZGlzcGxheU5hbWU9XCJEcm9wZG93bk1lbnVcIjtjb25zdCBwPSgwLGwuZGVmYXVsdCkoaS5Cb3gpYFxuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYCxmPSgwLGwuZGVmYXVsdCkoaS5Cb3gpYGB9LDYwMjY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDYwNjIpLHQpLG8obigyNzkpLHQpLG8obigxNjIpLHQpfSwyNzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQnV0dG9uSW1hZ2U9dC5NZW51PXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1yKG4oNjY4OSkpLGk9cihuKDc1MTgpKSxsPW4oOTYzNCkscz1uKDEzMzUpLGM9big3MjYxKTt0Lk1lbnU9KHtvcHRpb25zOmUsc2VsZWN0ZWQ6bixtZW51SWQ6cixoYW5kbGVFeHBhbmRNZW51Omksb25PcHRpb25Ib3ZlcjpsLG9uQ2hhbmdlOnMsd2lkdGg6ZyxoZWlnaHQ6dixoZWFkZXI6Qyxmb2N1c2VkT3B0aW9uOm0sYWJzb2x1dGVQb3NpdGlvbjp3LGZpdENvbnRlbnQ6Yn0pPT57Y29uc3QgeT1lPT57bnVsbD09bHx8bChlKX07cmV0dXJuKDAsby5qc3hzKSh1LE9iamVjdC5hc3NpZ24oe3JvbGU6XCJsaXN0Ym94XCIsZmxleERpcmVjdGlvbjpcImNvbHVtblwiLG9uTW91c2VMZWF2ZTooKT0+e3kobnVsbCl9LFwiZGF0YS10ZXN0aWRcIjpcIm1lbnVcIixpZDpyLHdpZHRoOmcsaGVpZ2h0OnYsYWJzb2x1dGVQb3NpdGlvbjp3LGZpdENvbnRlbnQ6Yn0se2NoaWxkcmVuOltDJiYoMCxvLmpzeHMpKGEuZGVmYXVsdC5GcmFnbWVudCx7Y2hpbGRyZW46WygwLG8uanN4KShwLHtjaGlsZHJlbjooMCxvLmpzeCkoYy5PcHRpb25UaXRsZSx7Y2hpbGRyZW46Q30pfSksKDAsby5qc3gpKGgse30pXX0pLGUubWFwKCgoZSxyKT0+KDAsby5qc3hzKShhLmRlZmF1bHQuRnJhZ21lbnQse2NoaWxkcmVuOlswIT09ciYmKDAsby5qc3gpKGgse30pLGUubWFwKCgoZSxyKT0+KDAsby5qc3hzKShkLE9iamVjdC5hc3NpZ24oe3JvbGU6XCJvcHRpb25cIixpc0ZvY3VzZWQ6KG51bGw9PW0/dm9pZCAwOm0udmFsdWUpPT09ZS52YWx1ZSxcImFyaWEtc2VsZWN0ZWRcIjoobnVsbD09bj92b2lkIDA6bi52YWx1ZSk9PT1lLnZhbHVlLGFsaWduSXRlbXM6XCJjZW50ZXJcIixhczpcImJ1dHRvblwiLFwiZGF0YS10ZXN0aWRcIjpgbWVudS1vcHRpb24tJHtyfWAsaWQ6YG1lbnUtb3B0aW9uLSR7ZS52YWx1ZX1gLHRpdGxlOmUudGl0bGUsb25DbGljazooKT0+e2Uub3ZlcnJpZGVPbkNsaWNrP2Uub3ZlcnJpZGVPbkNsaWNrKGUpOnMoZSksbnVsbD09aXx8aSgpfSxvbk1vdXNlT3ZlcjooKT0+eShlLnZhbHVlKX0se2NoaWxkcmVuOlsobnVsbD09ZT92b2lkIDA6ZS5pY29uVXJsKSYmKDAsby5qc3gpKHQuQnV0dG9uSW1hZ2Use3NyYzplLmljb25Vcmwsc3R5bGU6e21hcmdpblJpZ2h0OlwiOHB4XCJ9fSksKDAsby5qc3gpKGMuT3B0aW9uVGl0bGUse2NoaWxkcmVuOmUudGl0bGV9KSwobnVsbD09bj92b2lkIDA6bi52YWx1ZSk9PT1lLnZhbHVlPygwLG8uanN4KShmLHtpY29uOlwiQ2hlY2tJY29uXCJ9KTooMCxvLmpzeCkoZix7Y2hpbGRyZW46KDAsby5qc3gpKG8uRnJhZ21lbnQse30pfSldfSkscikpKV19LHIpKSldfSkpfTtjb25zdCB1PSgwLGkuZGVmYXVsdCkocy5Cb3gpYFxuICB3aWR0aDogJHsoe3dpZHRoOmUsZml0Q29udGVudDp0fSk9PmV8fCh0P1wiZml0LWNvbnRlbnRcIjpcIjEwMCVcIil9O1xuICBtYXgtaGVpZ2h0OiAkeyh7aGVpZ2h0OmV9KT0+bnVsbCE9ZT9lOlwiZml0LWNvbnRlbnRcIn07XG4gIHRvcDogJHsoe3RoZW1lOmV9KT0+YGNhbGMoMTAwJSArICR7ZS5weC54c21hbGx9KWB9O1xuICBib3gtc2hhZG93OiAwcHggNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgei1pbmRleDogMTA7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEJhY2tncm91bmR9O1xuICBwb3NpdGlvbjogJHsoe2Fic29sdXRlUG9zaXRpb246ZX0pPT5lP1wiYWJzb2x1dGVcIjpcImluaXRpYWxcIn07XG5gLGQ9KDAsaS5kZWZhdWx0KShzLkJveClgXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGJvcmRlcjogJHsoe2lzRm9jdXNlZDplLHRoZW1lOnR9KT0+ZT9gMXB4IHNvbGlkICR7dC5wYWxldHRlLmJvcmRlck5ldXRyYWx9YDpcIjFweCBzb2xpZCB0cmFuc3BhcmVudFwifTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfSAke2UucHguc21hbGx9YH07XG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMn07XG4gIH1cbmAscD0oMCxpLmRlZmF1bHQpKHMuQm94KWBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfSAke2UucHguc21hbGx9YH07XG5gLGY9KDAsaS5kZWZhdWx0KShsLkljb24pYFxuICBtYXJnaW4tbGVmdDogYXV0bztcbmAsaD0oMCxpLmRlZmF1bHQpKHMuQm94KWBcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEJhY2tncm91bmR9O1xuYDt0LkJ1dHRvbkltYWdlPWkuZGVmYXVsdC5pbWdgXG4gIGhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54bGFyZ2V9O1xuICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54bGFyZ2V9O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG5gfSw3MjYxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlVG9vbHRpcD10LmlzRWxlbWVudE92ZXJmbG93bj10Lk9wdGlvblRpdGxlPXZvaWQgMDtjb25zdCBhPW4oNTg5MyksaT1uKDY2ODkpLGw9big3NzY5KSxzPW4oOTUwNyksYz1vKG4oNzUxOCkpO3QuT3B0aW9uVGl0bGU9ZT0+e3ZhcntjaGlsZHJlbjpufT1lLG89cihlLFtcImNoaWxkcmVuXCJdKTtyZXR1cm4oMCxhLmpzeCkodSxPYmplY3QuYXNzaWduKHtyZWY6KDAsdC51c2VUb29sdGlwKShuKX0sbyx7Y2hpbGRyZW46KDAsYS5qc3gpKFwiZGl2XCIse2NoaWxkcmVuOm59KX0pKX07Y29uc3QgdT0oMCxjLmRlZmF1bHQpKGwuVGV4dClgXG4gICR7cy5NaXhpbnMudGV4dE92ZXJmbG93fTtcbiAgbWFyZ2luLWxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbmA7ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS5zY3JvbGxIZWlnaHQ+ZS5jbGllbnRIZWlnaHR8fGUuc2Nyb2xsV2lkdGg+ZS5jbGllbnRXaWR0aH10LmlzRWxlbWVudE92ZXJmbG93bj1kLHQudXNlVG9vbHRpcD1lPT4oMCxpLnVzZUNhbGxiYWNrKSgodD0+e3QmJmUmJmQodCkmJih0LnRpdGxlPWUpfSksW10pfSw3MDA2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuSWNvbj12b2lkIDA7Y29uc3QgYT1uKDU4OTMpLGk9byhuKDc1MTgpKSxsPW4oMTMzNSkscz1uKDk1MDcpLGM9bigzNDcxKSx1PW4oOTY2OSk7dC5JY29uPSgwLGkuZGVmYXVsdCkoKGU9Pnt2YXJ7dGFiSW5kZXg6dCxpY29uOm4sY2hpbGRyZW46byxzaXplOmk9XCJiYXNlXCIsY29udGFpbmVyU2l6ZTpsLFwiZGF0YS10ZXN0aWRcIjpzfT1lLGM9cihlLFtcInRhYkluZGV4XCIsXCJpY29uXCIsXCJjaGlsZHJlblwiLFwic2l6ZVwiLFwiY29udGFpbmVyU2l6ZVwiLFwiZGF0YS10ZXN0aWRcIl0pO3JldHVybigwLGEuanN4KShwLE9iamVjdC5hc3NpZ24oe30sYyx7aWNvblNpemU6aSxjb250YWluZXJTaXplOmx8fGksanVzdGlmeUNvbnRlbnQ6XCJjZW50ZXJcIixhbGlnbkl0ZW1zOlwiY2VudGVyXCIsXCJkYXRhLXRlc3RpZFwiOnMsdGFiSW5kZXg6dH0se2NoaWxkcmVuOm4/KDAsYS5qc3gpKGQsT2JqZWN0LmFzc2lnbih7YXJpYUxhYmVsOmNbXCJhcmlhLWxhYmVsXCJdLGljb246bn0sYykpOm99KSl9KSlgYDtjb25zdCBkPSgwLGkuZGVmYXVsdCkoKGU9Pnt2YXJ7aWNvbjp0LGFyaWFMYWJlbDpufT1lLG89cihlLFtcImljb25cIixcImFyaWFMYWJlbFwiXSk7Y29uc3QgaT1jLkljb25TZXRbdF07cmV0dXJuKDAsYS5qc3gpKGksT2JqZWN0LmFzc2lnbih7cm9sZTpcImltZ1wiLFwiYXJpYS1sYWJlbFwiOm59LG8pKX0pKWBgLHA9KDAsaS5kZWZhdWx0KShsLkJveClgXG4gIC8qKlxuICAgKiAxLiBJbml0aWFsaXplIGxvY2FsIHZhcmlhYmxlcyB3aXRoIHJlYXNvbmFibGUgZGVmYXVsdHNcbiAgICovXG4gIC0tcHgtZGVmYXVsdDogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5iYXNlfTtcblxuICAvKipcbiAgICogMi4gSW5qZWN0IHZhcmlhbnRzIC0tID8gV2hhdCBhcmUgVmFyaWFudHNcbiAgICovXG4gICR7KDAscy5nZXRWYXJpYW50Q1NTKSh1LnZhcmlhbnRzLHUuVmFyaWFudC5jb250YWluZXJTaXplKX1cbiAgJHsoMCxzLmdldFZhcmlhbnRDU1MpKHUudmFyaWFudHMsdS5WYXJpYW50Lmljb25TaXplKX1cblxuICB3aWR0aDogdmFyKC0tcHgtY29udGFpbmVyLCB2YXIoLS1weC1kZWZhdWx0KSk7XG4gIGhlaWdodDogdmFyKC0tcHgtY29udGFpbmVyLCB2YXIoLS1weC1kZWZhdWx0KSk7XG5cbiAgLyogU1ZHIEFzc2V0ICovXG4gICYgPiAqLFxuICAke2R9IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogdmFyKC0tcHgtaWNvbiwgdmFyKC0tcHgtZGVmYXVsdCkpO1xuICAgIGhlaWdodDogdmFyKC0tcHgtaWNvbiwgdmFyKC0tcHgtZGVmYXVsdCkpO1xuICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XG4gIH1cbmB9LDk2Njk6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudmFyaWFudHM9dC5WYXJpYW50PXZvaWQgMDtjb25zdCByPW4oNzUxOCk7dC5WYXJpYW50PXtpY29uU2l6ZTpcImljb25TaXplXCIsY29udGFpbmVyU2l6ZTpcImNvbnRhaW5lclNpemVcIn0sdC52YXJpYW50cz17W3QuVmFyaWFudC5pY29uU2l6ZV06e3hzbWFsbDpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54c21hbGx9O1xuICAgIGAsc21hbGw6ci5jc3NgXG4gICAgICAtLXB4LWljb246ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuc21hbGx9O1xuICAgIGAsYmFzZTpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5iYXNlfTtcbiAgICBgLGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1pY29uOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLmxhcmdlfTtcbiAgICBgLHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54bGFyZ2V9O1xuICAgIGAseHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54eGxhcmdlfTtcbiAgICBgLHh4eGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1pY29uOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnh4eGxhcmdlfTtcbiAgICBgfSxbdC5WYXJpYW50LmNvbnRhaW5lclNpemVdOnt4c21hbGw6ci5jc3NgXG4gICAgICAtLXB4LWNvbnRhaW5lcjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54c21hbGx9O1xuICAgIGAsc21hbGw6ci5jc3NgXG4gICAgICAtLXB4LWNvbnRhaW5lcjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5zbWFsbH07XG4gICAgYCxiYXNlOnIuY3NzYFxuICAgICAgLS1weC1jb250YWluZXI6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuYmFzZX07XG4gICAgYCxsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLmxhcmdlfTtcbiAgICBgLHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnhsYXJnZX07XG4gICAgYCx4eGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1jb250YWluZXI6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUueHhsYXJnZX07XG4gICAgYCx4eHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnh4eGxhcmdlfTtcbiAgICBgfX19LDk2MzQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDcwMDYpLHQpfSw5Mjg1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJlbGxGaWxsZWRJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5CZWxsRmlsbGVkSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMjBcIixoZWlnaHQ6XCIyMFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46WygwLG8uanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xMiAyQzExLjIyOTYgMiAxMC41ODQ1IDIuNTgzNzkgMTAuNTA3OCAzLjM1MDQxQzEwLjQ5NTIgMy40NzY3NyAxMC40MDU3IDMuNTgxNTcgMTAuMjg0NiAzLjYxOTcxQzguMDY1NTQgNC4zMTg1MSA2LjQyMjM4IDYuMzM3OTYgNi4zMDAzMyA4Ljc3ODkzTDYuMTIzODIgMTIuMzA5MUM2LjA5OTM2IDEyLjc5ODIgNS44MTMzMSAxMy4yMzYyIDUuMzc1MyAxMy40NTUyTDQuNjA3MzkgMTMuODM5MkM0LjE0NzYxIDE0LjA2OTEgMy44NTcxOCAxNC41MzkgMy44NTcxOCAxNS4wNTMxVjE2LjI1QzMuODU3MTggMTYuNjI0OCA0LjE2MDk4IDE2LjkyODYgNC41MzU3NSAxNi45Mjg2SDE5LjQ2NDNDMTkuODM5MSAxNi45Mjg2IDIwLjE0MjkgMTYuNjI0OCAyMC4xNDI5IDE2LjI1VjE1LjA1MzFDMjAuMTQyOSAxNC41MzkgMTkuODUyNSAxNC4wNjkxIDE5LjM5MjcgMTMuODM5MkwxOC42MjQ3IDEzLjQ1NTJDMTguMTg2NyAxMy4yMzYyIDE3LjkwMDYgMTIuNzk4MiAxNy44NzYyIDEyLjMwOTFMMTcuNjk5NyA4Ljc3ODkzQzE3LjU3NzYgNi4zMzc5NiAxNS45MzQ0IDQuMzE4NTEgMTMuNzE1NCAzLjYxOTcyQzEzLjU5NDIgMy41ODE1NyAxMy41MDQ4IDMuNDc2NzggMTMuNDkyMiAzLjM1MDQxQzEzLjQxNTUgMi41ODM4IDEyLjc3MDQgMiAxMiAyWlwiLGZpbGw6dH0pLCgwLG8uanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk05LjI4NTcxIDE4LjI4NTdDOS4yODU3MSAxOS43ODQ4IDEwLjUwMDkgMjEgMTIgMjFDMTMuNDk5MSAyMSAxNC43MTQzIDE5Ljc4NDggMTQuNzE0MyAxOC4yODU3TDkuMjg1NzEgMTguMjg1N1pcIixmaWxsOnR9KV19KSl9fSw0NzE4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJlbGxJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5CZWxsSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNy40NzMwNiAxLjIyOTQzQzYuNTE5MyAxLjIyOTQzIDUuODcyOTEgMS45ODM5OSA1LjY1MzcxIDIuNzI2OTdDNS42NTIwNyAyLjcyOTMyIDUuNjQ5MjEgMi43MzMwMyA1LjY0NDg1IDIuNzM3NTZDNS42MzkyIDIuNzQzNDIgNS42MzI2NCAyLjc0ODk2IDUuNjI1OTkgMi43NTM1NUM1LjYxOTI2IDIuNzU4MTkgNS42MTQ1MiAyLjc2MDQgNS42MTMgMi43NjEwMkw1LjYxMjY1IDIuNzYxMTdDNS4wNTA4OCAyLjk5MjUxIDQuMzkxOTMgMy4zNjAyMiAzLjg3Njk3IDQuMDMzNTdDMy4zNTgxNSA0LjcxMTk2IDMuMDE5NDkgNS42NTU3MSAzLjAxOTQ1IDYuOTc3NDlMNS42NTM3MSAyLjcyNjk3TDMuMDE5NDUgNi45Nzc3NkMzLjAxODY2IDguMzAxNjUgMi44Nzg3MSA5LjAzMTMgMi42NzA5MSA5LjUzNDM5QzIuNDg4NzkgOS45NzUzMSAyLjI0ODg5IDEwLjI2NTggMS45MTIgMTAuNjczOEwxLjkxMTg1IDEwLjY3NEMxLjg2MjYzIDEwLjczMzYgMS44MTEzNSAxMC43OTU3IDEuNzU3ODcgMTAuODYxMkMxLjE0OTIzIDExLjYwNiAxLjcyNzI5IDEyLjY0MTkgMi42NTk4NiAxMi42NDE5SDUuMDkwMTlDNS4yMTE5MSAxMi45OCA1LjQwNzI2IDEzLjI5MDYgNS42NjYxOCAxMy41NDk1QzYuMTI4MjcgMTQuMDExNiA2Ljc1NDk5IDE0LjI3MTIgNy40MDg0OCAxNC4yNzEyQzguMDYxOTcgMTQuMjcxMiA4LjY4ODcgMTQuMDExNiA5LjE1MDc4IDEzLjU0OTVDOS40MDk3MSAxMy4yOTA2IDkuNjA1MDUgMTIuOTggOS43MjY3OCAxMi42NDE5SDEyLjI4OTRDMTMuMjIzNCAxMi42NDE5IDEzLjc5MiAxMS42MDA4IDEzLjE4ODQgMTAuODYxM0wxMy4xODgzIDEwLjg2MTJDMTMuMTM0OCAxMC43OTU3IDEzLjA4MzUgMTAuNzMzNiAxMy4wMzQyIDEwLjY3NEMxMi42OTczIDEwLjI2NTkgMTIuNDU3NCA5Ljk3NTQgMTIuMjc1NSA5LjUzNDUxQzEyLjA2NzggOS4wMzE0NyAxMS45MjgyIDguMzAxODIgMTEuOTI4MiA2Ljk3Nzc2QzExLjkyODIgNS42NTY4OCAxMS41ODkxIDQuNzEyOTkgMTEuMDcwMyA0LjAzNDMzQzEwLjU1NTMgMy4zNjA3NSA5Ljg5NjUyIDIuOTkyMzQgOS4zMzQ5OSAyLjc2MTE1TDkuMzM0NjcgMi43NjEwMkM5LjMzNDA5IDIuNzYwNzkgOS4zMjk4MiAyLjc1ODg4IDkuMzIzMTMgMi43NTQyNEM5LjMxNjU1IDIuNzQ5NjcgOS4zMDk4MSAyLjc0Mzk0IDkuMzAzODIgMi43Mzc3QzkuMjk4NzUgMi43MzI0MSA5LjI5NTQ1IDIuNzI4MDMgOS4yOTM2MyAyLjcyNTMxQzkuMDcyNjQgMS45ODM3OCA4LjQyNjkxIDEuMjI5NDMgNy40NzMwNiAxLjIyOTQzWk04LjY4NjU0IDEyLjY0MTlINi4xMzA0MkM2LjE4NzYgMTIuNzI5NSA2LjI1NDAzIDEyLjgxMTUgNi4zMjkxIDEyLjg4NjZDNi42MTUzNyAxMy4xNzI5IDcuMDAzNjMgMTMuMzMzNyA3LjQwODQ4IDEzLjMzMzdDNy44MTMzMyAxMy4zMzM3IDguMjAxNiAxMy4xNzI5IDguNDg3ODcgMTIuODg2NkM4LjU2MjkzIDEyLjgxMTUgOC42MjkzNyAxMi43Mjk1IDguNjg2NTQgMTIuNjQxOVpNNi41NTE0NSAyLjk5NzE2QzYuNjk1NzEgMi41MDA4NSA3LjA3MTIxIDIuMTY2OTMgNy40NzMwNiAyLjE2NjkzQzcuODc0OTIgMi4xNjY5MyA4LjI1MDUgMi41MDA2MSA4LjM5NjYgMi45OTc4NUw4LjM5Njk1IDIuOTk5MDRDOC40ODQ5OSAzLjI5NTc1IDguNzI4NDMgMy41MjUzOCA4Ljk3ODA5IDMuNjI4MDZDOS40NTYyNSAzLjgyNDkyIDkuOTQ4OTQgNC4xMTExOSAxMC4zMjU1IDQuNjAzNzNDMTAuNjk4MiA1LjA5MTE5IDEwLjk5MDcgNS44MjQ4NiAxMC45OTA3IDYuOTc3NzZDMTAuOTkwNyA4LjM1NTA2IDExLjEzMzcgOS4yMjU1IDExLjQwODkgOS44OTIxN0MxMS42NDgzIDEwLjQ3MjMgMTEuOTgyMyAxMC44NzQ5IDEyLjMxNjcgMTEuMjc4QzEyLjM2NTMgMTEuMzM2NiAxMi40MTM5IDExLjM5NTEgMTIuNDYyMiAxMS40NTQyQzEyLjUwMTYgMTEuNTAyNSAxMi41MDQ2IDExLjU1NTIgMTIuNDc5MyAxMS42MDVDMTIuNDU1MyAxMS42NTI0IDEyLjM5OTYgMTEuNzA0NCAxMi4yODk0IDExLjcwNDRIMi42NTk4NkMyLjU0NjA0IDExLjcwNDQgMi40ODk1NSAxMS42NTA5IDIuNDY1ODggMTEuNjA0NUMyLjQ0MTE5IDExLjU1NjIgMi40NDMyNSAxMS41MDQgMi40ODM4IDExLjQ1NDRMMi40ODM4MyAxMS40NTQ0QzIuNTMyMTUgMTEuMzk1MiAyLjU4MDc1IDExLjMzNjYgMi42MjkzNCAxMS4yNzgxTDIuNjI5NDYgMTEuMjc3OUMyLjk2Mzg5IDEwLjg3NDggMy4yOTc4NSAxMC40NzIzIDMuNTM3NCA5Ljg5MjI5QzMuODEyNzMgOS4yMjU3MSAzLjk1NjE1IDguMzU1MzMgMy45NTY5NSA2Ljk3ODAzVjYuOTc3NzZDMy45NTY5NSA1LjgyMzQxIDQuMjQ5MjggNS4wODk5OSA0LjYyMTY1IDQuNjAzMDlDNC45OTc5MiA0LjExMTEgNS40OTA0NCAzLjgyNTM3IDUuOTY5NjMgMy42MjgwNUM2LjIxNjYxIDMuNTI2NDUgNi40NjI1NyAzLjMwMDAyIDYuNTUxMTEgMi45OTgzM0w2LjU1MTQ1IDIuOTk3MTZaXCIsZmlsbDp0LHJvbGU6XCJpbWdcIn0pfSkpfX0sODI2NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Ccm9rZW5MaW5rSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQnJva2VuTGlua0ljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4cykoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjMyXCIsaGVpZ2h0OlwiMzJcIix2aWV3Qm94OlwiMCAwIDMyIDMyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOlsoMCxvLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNi4zMzM1IDMuNzAwMkM2LjA1NzM1IDMuNzAwMiA1LjgzMzUgMy45MjQwNSA1LjgzMzUgNC4yMDAyVjI3LjgwMDJDNS44MzM1IDI4LjA3NjMgNi4wNTczNSAyOC4zMDAyIDYuMzMzNSAyOC4zMDAySDI1LjY2NjhDMjUuOTQzIDI4LjMwMDIgMjYuMTY2OCAyOC4wNzYzIDI2LjE2NjggMjcuODAwMlYxMi4yMzM1SDE4LjEzMzVDMTcuODU3NCAxMi4yMzM1IDE3LjYzMzUgMTIuMDA5NyAxNy42MzM1IDExLjczMzVWMy43MDAySDYuMzMzNVpNMTguNjMzNSA0LjQwNzNMMjUuNDU5NyAxMS4yMzM1SDE4LjYzMzVWNC40MDczWk00LjgzMzUgNC4yMDAyQzQuODMzNSAzLjM3MTc3IDUuNTA1MDcgMi43MDAyIDYuMzMzNSAyLjcwMDJIMTguMTMzNUMxOC4yNjYxIDIuNzAwMiAxOC4zOTMzIDIuNzUyODcgMTguNDg3IDIuODQ2NjRMMjcuMDIwNCAxMS4zOEMyNy4xMTQxIDExLjQ3MzcgMjcuMTY2OCAxMS42MDA5IDI3LjE2NjggMTEuNzMzNVYyNy44MDAyQzI3LjE2NjggMjguNjI4NiAyNi40OTUzIDI5LjMwMDIgMjUuNjY2OCAyOS4zMDAySDYuMzMzNUM1LjUwNTA3IDI5LjMwMDIgNC44MzM1IDI4LjYyODYgNC44MzM1IDI3LjgwMDJWNC4yMDAyWlwiLGZpbGw6dH0pLCgwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xNC4yNDggMjEuOTA4NFYyMS44NDA5QzE0LjI1MjggMjEuNDAwNiAxNC4yOTY2IDIxLjA1MDIgMTQuMzc5NCAyMC43ODk4QzE0LjQ2NDcgMjAuNTI5NCAxNC41ODU0IDIwLjMxODcgMTQuNzQxNyAyMC4xNTc3QzE0Ljg5NzkgMTkuOTk2NyAxNS4wODYxIDE5Ljg0OTkgMTUuMzA2MyAxOS43MTczQzE1LjQ0ODMgMTkuNjI3NCAxNS41NzYyIDE5LjUyNjggMTUuNjg5OCAxOS40MTU1QzE1LjgwMzQgMTkuMzA0MiAxNS44OTM0IDE5LjE3NjQgMTUuOTU5NyAxOS4wMzJDMTYuMDI2IDE4Ljg4NzUgMTYuMDU5MSAxOC43Mjc3IDE2LjA1OTEgMTguNTUyNkMxNi4wNTkxIDE4LjM0MTkgMTYuMDA5NCAxOC4xNTk2IDE1LjkxIDE4LjAwNTdDMTUuODEwNSAxNy44NTE4IDE1LjY3OCAxNy43MzM0IDE1LjUxMjMgMTcuNjUwNkMxNS4zNDg5IDE3LjU2NTMgMTUuMTY2NiAxNy41MjI3IDE0Ljk2NTQgMTcuNTIyN0MxNC43ODMxIDE3LjUyMjcgMTQuNjA5MSAxNy41NjA2IDE0LjQ0MzQgMTcuNjM2NEMxNC4yNzc2IDE3LjcxMjEgMTQuMTQwMyAxNy44MzA1IDE0LjAzMTQgMTcuOTkxNUMxMy45MjI1IDE4LjE1MDEgMTMuODU5OCAxOC4zNTQ5IDEzLjg0MzIgMTguNjA1OEgxMi43NjM3QzEyLjc4MDIgMTguMTc5NyAxMi44ODggMTcuODE5OCAxMy4wODY4IDE3LjUyNjNDMTMuMjg1NyAxNy4yMzA0IDEzLjU0ODUgMTcuMDA2NiAxMy44NzUyIDE2Ljg1NTFDMTQuMjA0MiAxNi43MDM2IDE0LjU2NzYgMTYuNjI3OCAxNC45NjU0IDE2LjYyNzhDMTUuNDAxIDE2LjYyNzggMTUuNzgyMSAxNi43MDk1IDE2LjEwODggMTYuODcyOUMxNi40MzU1IDE3LjAzMzkgMTYuNjg4OSAxNy4yNTk5IDE2Ljg2ODggMTcuNTUxMUMxNy4wNTExIDE3Ljg0IDE3LjE0MjIgMTguMTc3MyAxNy4xNDIyIDE4LjU2MzJDMTcuMTQyMiAxOC44Mjg0IDE3LjEwMDggMTkuMDY3NSAxNy4wMTc5IDE5LjI4MDVDMTYuOTM1MSAxOS40OTEyIDE2LjgxNjcgMTkuNjc5NSAxNi42NjI4IDE5Ljg0NTJDMTYuNTExMyAyMC4wMTA5IDE2LjMyOSAyMC4xNTc3IDE2LjExNTkgMjAuMjg1NUMxNS45MTQ3IDIwLjQxMSAxNS43NTE0IDIwLjU0MTIgMTUuNjI1OSAyMC42NzYxQzE1LjUwMjggMjAuODExMSAxNS40MTI4IDIwLjk3MDkgMTUuMzU2IDIxLjE1NTVDMTUuMjk5MiAyMS4zNDAyIDE1LjI2ODQgMjEuNTY4NyAxNS4yNjM3IDIxLjg0MDlWMjEuOTA4NEgxNC4yNDhaTTE0Ljc4NDMgMjQuMDY3NUMxNC41OTAxIDI0LjA2NzUgMTQuNDIzMiAyMy45OTg4IDE0LjI4MzYgMjMuODYxNUMxNC4xNDM5IDIzLjcyMTggMTQuMDc0IDIzLjU1MzcgMTQuMDc0IDIzLjM1NzJDMTQuMDc0IDIzLjE2MzEgMTQuMTQzOSAyMi45OTc0IDE0LjI4MzYgMjIuODYwMUMxNC40MjMyIDIyLjcyMDQgMTQuNTkwMSAyMi42NTA2IDE0Ljc4NDMgMjIuNjUwNkMxNC45NzYgMjIuNjUwNiAxNS4xNDE3IDIyLjcyMDQgMTUuMjgxNCAyMi44NjAxQzE1LjQyMzUgMjIuOTk3NCAxNS40OTQ1IDIzLjE2MzEgMTUuNDk0NSAyMy4zNTcyQzE1LjQ5NDUgMjMuNDg3NSAxNS40NjE0IDIzLjYwNyAxNS4zOTUxIDIzLjcxNTlDMTUuMzMxMSAyMy44MjI0IDE1LjI0NTkgMjMuOTA3NyAxNS4xMzk0IDIzLjk3MTZDMTUuMDMyOCAyNC4wMzU1IDE0LjkxNDUgMjQuMDY3NSAxNC43ODQzIDI0LjA2NzVaXCIsZmlsbDp0fSldfSkpfX0sNjQ0NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGV2cm9uRG93bkljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkNoZXZyb25Eb3duSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMjRcIixoZWlnaHQ6XCIyNFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwifSx7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLE9iamVjdC5hc3NpZ24oe2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNS4wNTI4MiA5Ljg4NzA3QzUuMzM2MTIgOS41ODQ4OSA1LjgxMDc1IDkuNTY5NTggNi4xMTI5MyA5Ljg1Mjg3TDEyIDE1LjM3MkwxNy44ODcgOS44NTI4N0MxOC4xODkyIDkuNTY5NTggMTguNjYzOCA5LjU4NDg5IDE4Ljk0NzEgOS44ODcwN0MxOS4yMzA0IDEwLjE4OTMgMTkuMjE1MSAxMC42NjM5IDE4LjkxMjkgMTAuOTQ3MkwxMi41MTI5IDE2Ljk0NzJDMTIuMjI0NCAxNy4yMTc2IDExLjc3NTUgMTcuMjE3NiAxMS40ODcgMTYuOTQ3Mkw1LjA4NzAyIDEwLjk0NzJDNC43ODQ4NCAxMC42NjM5IDQuNzY5NTIgMTAuMTg5MyA1LjA1MjgyIDkuODg3MDdaXCIsZmlsbDp0fSxuKSl9KSl9fSwyMTQ3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNoZXZyb25MZWZ0SWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQ2hldnJvbkxlZnRJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIyNFwiLGhlaWdodDpcIjI0XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xNC4xMTI3IDUuMDUyNzJDMTQuNDE0OSA1LjMzNjAxIDE0LjQzMDIgNS44MTA2NCAxNC4xNDY5IDYuMTEyODJMOC42Mjc4NCAxMS45OTk5TDE0LjE0NjkgMTcuODg2OUMxNC40MzAyIDE4LjE4OTEgMTQuNDE0OSAxOC42NjM3IDE0LjExMjcgMTguOTQ3QzEzLjgxMDYgMTkuMjMwMyAxMy4zMzU5IDE5LjIxNSAxMy4wNTI2IDE4LjkxMjhMNy4wNTI2NCAxMi41MTI4QzYuNzgyMTggMTIuMjI0MyA2Ljc4MjE4IDExLjc3NTQgNy4wNTI2NCAxMS40ODY5TDEzLjA1MjYgNS4wODY5MUMxMy4zMzU5IDQuNzg0NzMgMTMuODEwNiA0Ljc2OTQyIDE0LjExMjcgNS4wNTI3MlpcIixmaWxsOnR9LG4pKX0pKX19LDI0MDI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2hldnJvblJpZ2h0SWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQ2hldnJvblJpZ2h0SWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMjRcIixoZWlnaHQ6XCIyNFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwifSx7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLE9iamVjdC5hc3NpZ24oe2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNOS44ODc2MiA1LjA1MjU2QzEwLjE4OTggNC43NjkyNiAxMC42NjQ0IDQuNzg0NTcgMTAuOTQ3NyA1LjA4Njc2TDE2Ljk0NzcgMTEuNDg2OEMxNy4yMTgyIDExLjc3NTMgMTcuMjE4MiAxMi4yMjQyIDE2Ljk0NzcgMTIuNTEyN0wxMC45NDc3IDE4LjkxMjdDMTAuNjY0NCAxOS4yMTQ5IDEwLjE4OTggMTkuMjMwMiA5Ljg4NzYyIDE4Ljk0NjlDOS41ODU0MyAxOC42NjM2IDkuNTcwMTIgMTguMTg4OSA5Ljg1MzQyIDE3Ljg4NjhMMTUuMzcyNSAxMS45OTk3TDkuODUzNDIgNi4xMTI2N0M5LjU3MDEyIDUuODEwNDkgOS41ODU0NCA1LjMzNTg2IDkuODg3NjIgNS4wNTI1NlpcIixmaWxsOnR9LG4pKX0pKX19LDQ4MjU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2hldnJvblVwSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQ2hldnJvblVwSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMjRcIixoZWlnaHQ6XCIyNFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwifSx7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLE9iamVjdC5hc3NpZ24oe2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNS4wNTI4NSAxNC4xMTI5QzUuMzM2MTUgMTQuNDE1MSA1LjgxMDc4IDE0LjQzMDQgNi4xMTI5NiAxNC4xNDcxTDEyIDguNjI4MDJMMTcuODg3IDE0LjE0NzFDMTguMTg5MiAxNC40MzA0IDE4LjY2MzkgMTQuNDE1MSAxOC45NDcyIDE0LjExMjlDMTkuMjMwNSAxMy44MTA3IDE5LjIxNTEgMTMuMzM2MSAxOC45MTMgMTMuMDUyOEwxMi41MTMgNy4wNTI4MkMxMi4yMjQ1IDYuNzgyMzYgMTEuNzc1NSA2Ljc4MjM2IDExLjQ4NzEgNy4wNTI4Mkw1LjA4NzA1IDEzLjA1MjhDNC43ODQ4NyAxMy4zMzYxIDQuNzY5NTYgMTMuODEwNyA1LjA1Mjg1IDE0LjExMjlaXCIsZmlsbDp0fSxuKSl9KSl9fSwxMjgxOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkV4Y2xhbWF0aW9uQ2lyY2xlZEZpbGxlZEljb249dm9pZCAwO2NvbnN0IHI9big1ODkzKTt0LkV4Y2xhbWF0aW9uQ2lyY2xlZEZpbGxlZEljb249ZT0+KDAsci5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxN1wiLHZpZXdCb3g6XCIwIDAgMTYgMTdcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSx7Y2hpbGRyZW46WygwLHIuanN4KShcInBhdGhcIix7ZDpcIk03Ljk5OTg4IDE1LjMzMTdDMTEuNzcyOSAxNS4zMzE3IDE0LjgzMTYgMTIuMjczMSAxNC44MzE2IDguNTAwMDdDMTQuODMxNiA0LjcyNzA0IDExLjc3MjkgMS42Njg0IDcuOTk5ODggMS42Njg0QzQuMjI2ODYgMS42Njg0IDEuMTY4MjEgNC43MjcwNCAxLjE2ODIxIDguNTAwMDdDMS4xNjgyMSAxMi4yNzMxIDQuMjI2ODYgMTUuMzMxNyA3Ljk5OTg4IDE1LjMzMTdaXCIsZmlsbDpcInJlZFwifSksKDAsci5qc3gpKFwibWFza1wiLE9iamVjdC5hc3NpZ24oe2lkOlwicGF0aC0yLWluc2lkZS0xXzZfMjYyMDMzXCIsZmlsbDpcIndoaXRlXCJ9LHtjaGlsZHJlbjooMCxyLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNy45OTk5MyA0LjM3Mzg0QzcuNTc1MjUgNC4zNzM4NCA3LjIzNTY0IDQuNzI2NzYgNy4yNTE5NiA1LjE1MTEzTDcuNDIyOTYgOS41OTcwNkM3LjQzNDg5IDkuOTA3MDggNy42ODk2OCAxMC4xNTIzIDcuOTk5OTMgMTAuMTUyM0M4LjMxMDE5IDEwLjE1MjMgOC41NjQ5OCA5LjkwNzA4IDguNTc2OSA5LjU5NzA2TDguNzQ3OSA1LjE1MTEzQzguNzY0MjIgNC43MjY3NiA4LjQyNDYxIDQuMzczODQgNy45OTk5MyA0LjM3Mzg0Wk03Ljk5OTkzIDEyLjY0MDZDOC40NjAyMiAxMi42NDA2IDguODMzMzUgMTIuMjY3NSA4LjgzMzM1IDExLjgwNzJDOC44MzMzNSAxMS4zNDY5IDguNDYwMjIgMTAuOTczOCA3Ljk5OTkzIDEwLjk3MzhDNy41Mzk2NCAxMC45NzM4IDcuMTY2NSAxMS4zNDY5IDcuMTY2NSAxMS44MDcyQzcuMTY2NSAxMi4yNjc1IDcuNTM5NjQgMTIuNjQwNiA3Ljk5OTkzIDEyLjY0MDZaXCJ9KX0pKSwoMCxyLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNy45OTk5MyA0LjM3Mzg0QzcuNTc1MjUgNC4zNzM4NCA3LjIzNTY0IDQuNzI2NzYgNy4yNTE5NiA1LjE1MTEzTDcuNDIyOTYgOS41OTcwNkM3LjQzNDg5IDkuOTA3MDggNy42ODk2OCAxMC4xNTIzIDcuOTk5OTMgMTAuMTUyM0M4LjMxMDE5IDEwLjE1MjMgOC41NjQ5OCA5LjkwNzA4IDguNTc2OSA5LjU5NzA2TDguNzQ3OSA1LjE1MTEzQzguNzY0MjIgNC43MjY3NiA4LjQyNDYxIDQuMzczODQgNy45OTk5MyA0LjM3Mzg0Wk03Ljk5OTkzIDEyLjY0MDZDOC40NjAyMiAxMi42NDA2IDguODMzMzUgMTIuMjY3NSA4LjgzMzM1IDExLjgwNzJDOC44MzMzNSAxMS4zNDY5IDguNDYwMjIgMTAuOTczOCA3Ljk5OTkzIDEwLjk3MzhDNy41Mzk2NCAxMC45NzM4IDcuMTY2NSAxMS4zNDY5IDcuMTY2NSAxMS44MDcyQzcuMTY2NSAxMi4yNjc1IDcuNTM5NjQgMTIuNjQwNiA3Ljk5OTkzIDEyLjY0MDZaXCIsZmlsbDpcIndoaXRlXCJ9KSwoMCxyLmpzeCkoXCJwYXRoXCIse2Q6XCJNNy4yNTE5NiA1LjE1MTEzTDUuNjQ4NzQgNS4yMTI3OUw1LjY0ODc0IDUuMjEyNzlMNy4yNTE5NiA1LjE1MTEzWk03LjQyMjk2IDkuNTk3MDZMOS4wMjYxOCA5LjUzNTRMOS4wMjYxOCA5LjUzNTRMNy40MjI5NiA5LjU5NzA2Wk04LjU3NjkgOS41OTcwNkwxMC4xODAxIDkuNjU4NzJMOC41NzY5IDkuNTk3MDZaTTguNzQ3OSA1LjE1MTEzTDEwLjM1MTEgNS4yMTI3OUwxMC4zNTExIDUuMjEyNzlMOC43NDc5IDUuMTUxMTNaTTguODU1MTkgNS4wODk0N0M4Ljg3Mzg1IDUuNTc0NyA4LjQ4NTUzIDUuOTc4MjUgNy45OTk5MyA1Ljk3ODI1VjIuNzY5NDNDNi42NjQ5OCAyLjc2OTQzIDUuNTk3NDQgMy44Nzg4MiA1LjY0ODc0IDUuMjEyNzlMOC44NTUxOSA1LjA4OTQ3Wk05LjAyNjE4IDkuNTM1NEw4Ljg1NTE5IDUuMDg5NDdMNS42NDg3NCA1LjIxMjc5TDUuODE5NzQgOS42NTg3Mkw5LjAyNjE4IDkuNTM1NFpNNy45OTk5MyA4LjU0Nzg2QzguNTUxNzcgOC41NDc4NiA5LjAwNDk4IDguOTgzOTYgOS4wMjYxOCA5LjUzNTRMNS44MTk3NCA5LjY1ODcyQzUuODY0OCAxMC44MzAyIDYuODI3NTggMTEuNzU2NyA3Ljk5OTkzIDExLjc1NjdWOC41NDc4NlpNNi45NzM2OCA5LjUzNTRDNi45OTQ4OSA4Ljk4Mzk2IDcuNDQ4MDkgOC41NDc4NiA3Ljk5OTkzIDguNTQ3ODZWMTEuNzU2N0M5LjE3MjI4IDExLjc1NjcgMTAuMTM1MSAxMC44MzAyIDEwLjE4MDEgOS42NTg3Mkw2Ljk3MzY4IDkuNTM1NFpNNy4xNDQ2OCA1LjA4OTQ3TDYuOTczNjggOS41MzU0TDEwLjE4MDEgOS42NTg3MkwxMC4zNTExIDUuMjEyNzlMNy4xNDQ2OCA1LjA4OTQ3Wk03Ljk5OTkzIDUuOTc4MjVDNy41MTQzNCA1Ljk3ODI1IDcuMTI2MDIgNS41NzQ3IDcuMTQ0NjggNS4wODk0N0wxMC4zNTExIDUuMjEyNzlDMTAuNDAyNCAzLjg3ODgyIDkuMzM0ODkgMi43Njk0MyA3Ljk5OTkzIDIuNzY5NDNWNS45NzgyNVpNNy4yMjg5NSAxMS44MDcyQzcuMjI4OTUgMTEuMzgxNCA3LjU3NDEzIDExLjAzNjIgNy45OTk5MyAxMS4wMzYyVjE0LjI0NUM5LjM0NjMxIDE0LjI0NSAxMC40Mzc4IDEzLjE1MzYgMTAuNDM3OCAxMS44MDcySDcuMjI4OTVaTTcuOTk5OTMgMTIuNTc4MkM3LjU3NDEzIDEyLjU3ODIgNy4yMjg5NSAxMi4yMzMgNy4yMjg5NSAxMS44MDcySDEwLjQzNzhDMTAuNDM3OCAxMC40NjA4IDkuMzQ2MzEgOS4zNjkzNyA3Ljk5OTkzIDkuMzY5MzdWMTIuNTc4MlpNOC43NzA5MSAxMS44MDcyQzguNzcwOTEgMTIuMjMzIDguNDI1NzMgMTIuNTc4MiA3Ljk5OTkzIDEyLjU3ODJWOS4zNjkzN0M2LjY1MzU1IDkuMzY5MzcgNS41NjIxIDEwLjQ2MDggNS41NjIxIDExLjgwNzJIOC43NzA5MVpNNy45OTk5MyAxMS4wMzYyQzguNDI1NzMgMTEuMDM2MiA4Ljc3MDkxIDExLjM4MTQgOC43NzA5MSAxMS44MDcySDUuNTYyMUM1LjU2MjEgMTMuMTUzNiA2LjY1MzU1IDE0LjI0NSA3Ljk5OTkzIDE0LjI0NVYxMS4wMzYyWlwiLGZpbGw6XCJ3aGl0ZVwiLG1hc2s6XCJ1cmwoI3BhdGgtMi1pbnNpZGUtMV82XzI2MjAzMylcIn0pXX0pKX0sNzQyOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GaWxsZWRDaXJjbGVJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5GaWxsZWRDaXJjbGVJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcImdcIixPYmplY3QuYXNzaWduKHtpZDpcIi5TbG90XCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJjaXJjbGVcIix7aWQ6XCJFbGxpcHNlIDFcIixjeDpcIjhcIixjeTpcIjhcIixyOlwiOFwiLGZpbGw6dH0pfSkpfSkpfX0sNjc5NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GaWx0ZXJJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5GaWx0ZXJJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjEyXCIsaGVpZ2h0OlwiN1wiLHZpZXdCb3g6XCIwIDAgMTIgN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNNCA2LjVDNCA2LjM2NzM5IDQuMDUyNjggNi4yNDAyMSA0LjE0NjQ1IDYuMTQ2NDVDNC4yNDAyMSA2LjA1MjY4IDQuMzY3MzkgNiA0LjUgNkg3LjVDNy42MzI2MSA2IDcuNzU5NzkgNi4wNTI2OCA3Ljg1MzU1IDYuMTQ2NDVDNy45NDczMiA2LjI0MDIxIDggNi4zNjczOSA4IDYuNUM4IDYuNjMyNjEgNy45NDczMiA2Ljc1OTc5IDcuODUzNTUgNi44NTM1NUM3Ljc1OTc5IDYuOTQ3MzIgNy42MzI2MSA3IDcuNSA3SDQuNUM0LjM2NzM5IDcgNC4yNDAyMSA2Ljk0NzMyIDQuMTQ2NDUgNi44NTM1NUM0LjA1MjY4IDYuNzU5NzkgNCA2LjYzMjYxIDQgNi41Wk0yIDMuNUMyIDMuMzY3MzkgMi4wNTI2OCAzLjI0MDIxIDIuMTQ2NDUgMy4xNDY0NUMyLjI0MDIxIDMuMDUyNjggMi4zNjczOSAzIDIuNSAzSDkuNUM5LjYzMjYxIDMgOS43NTk3OSAzLjA1MjY4IDkuODUzNTUgMy4xNDY0NUM5Ljk0NzMyIDMuMjQwMjEgMTAgMy4zNjczOSAxMCAzLjVDMTAgMy42MzI2MSA5Ljk0NzMyIDMuNzU5NzkgOS44NTM1NSAzLjg1MzU1QzkuNzU5NzkgMy45NDczMiA5LjYzMjYxIDQgOS41IDRIMi41QzIuMzY3MzkgNCAyLjI0MDIxIDMuOTQ3MzIgMi4xNDY0NSAzLjg1MzU1QzIuMDUyNjggMy43NTk3OSAyIDMuNjMyNjEgMiAzLjVaTTAgMC41QzAgMC4zNjczOTIgMC4wNTI2Nzg1IDAuMjQwMjE1IDAuMTQ2NDQ3IDAuMTQ2NDQ3QzAuMjQwMjE1IDAuMDUyNjc4NSAwLjM2NzM5MiAwIDAuNSAwSDExLjVDMTEuNjMyNiAwIDExLjc1OTggMC4wNTI2Nzg1IDExLjg1MzYgMC4xNDY0NDdDMTEuOTQ3MyAwLjI0MDIxNSAxMiAwLjM2NzM5MiAxMiAwLjVDMTIgMC42MzI2MDggMTEuOTQ3MyAwLjc1OTc4NSAxMS44NTM2IDAuODUzNTUzQzExLjc1OTggMC45NDczMjEgMTEuNjMyNiAxIDExLjUgMUgwLjVDMC4zNjczOTIgMSAwLjI0MDIxNSAwLjk0NzMyMSAwLjE0NjQ0NyAwLjg1MzU1M0MwLjA1MjY3ODUgMC43NTk3ODUgMCAwLjYzMjYwOCAwIDAuNVpcIixmaWxsOnR9KX0pKX19LDExNzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GbG9wcHlEaXNrSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuRmxvcHB5RGlza0ljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTJcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTIgMTJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTEuODc1IDIuMTg3NUMxLjg3NSAyLjE1Mjk4IDEuOTAyOTggMi4xMjUgMS45Mzc1IDIuMTI1SDguMjMwMzlDOC4yNDY5NyAyLjEyNSA4LjI2Mjg3IDIuMTMxNTggOC4yNzQ1OSAyLjE0MzMxTDkuOTgxNjkgMy44NTA0MUM5Ljk5MzQxIDMuODYyMTMgMTAgMy44NzgwMyAxMCAzLjg5NDYxVjEwLjE4NzVDMTAgMTAuMjIyIDkuOTcyMDIgMTAuMjUgOS45Mzc1IDEwLjI1SDEuOTM3NUMxLjkwMjk4IDEwLjI1IDEuODc1IDEwLjIyMiAxLjg3NSAxMC4xODc1VjIuMTg3NVpNMS45Mzc1IDEuMjVDMS40MTk3MyAxLjI1IDEgMS42Njk3MyAxIDIuMTg3NVYxMC4xODc1QzEgMTAuNzA1MyAxLjQxOTczIDExLjEyNSAxLjkzNzUgMTEuMTI1SDkuOTM3NUMxMC40NTUzIDExLjEyNSAxMC44NzUgMTAuNzA1MyAxMC44NzUgMTAuMTg3NVYzLjg5NDYxQzEwLjg3NSAzLjY0NTk3IDEwLjc3NjIgMy40MDc1MSAxMC42MDA0IDMuMjMxNjlMOC44OTMzMSAxLjUyNDU5QzguNzE3NDkgMS4zNDg3NyA4LjQ3OTAzIDEuMjUgOC4yMzAzOSAxLjI1SDEuOTM3NVpNMi44NDkyNCAzLjQwODFDMi44NDkyNCAzLjIzNzU0IDIuOTg3NTEgMy4wOTkyNyAzLjE1ODA3IDMuMDk5MjdINy40ODE2QzcuNjUyMTUgMy4wOTkyNyA3Ljc5MDQyIDMuMjM3NTQgNy43OTA0MiAzLjQwODFWNC42NDMzOUM3Ljc5MDQyIDQuODEzOTUgNy42NTIxNSA0Ljk1MjIxIDcuNDgxNiA0Ljk1MjIxSDMuMTU4MDdDMi45ODc1MSA0Ljk1MjIxIDIuODQ5MjQgNC44MTM5NSAyLjg0OTI0IDQuNjQzMzlWMy40MDgxWk00LjUzNjggNi42Mzk3N0M0LjgyNjM4IDYuMzUwMTkgNS4yMTkxMyA2LjE4NzUxIDUuNjI4NjUgNi4xODc1MUM2LjAzODE4IDYuMTg3NTEgNi40MzA5MyA2LjM1MDE5IDYuNzIwNTEgNi42Mzk3N0M3LjAxMDA5IDYuOTI5MzUgNy4xNzI3NyA3LjMyMjEgNy4xNzI3NyA3LjczMTYzQzcuMTcyNzcgOC4xNDExNSA3LjAxMDA5IDguNTMzOSA2LjcyMDUxIDguODIzNDhDNi40MzA5MyA5LjExMzA2IDYuMDM4MTggOS4yNzU3NCA1LjYyODY1IDkuMjc1NzRDNS4yMTkxMyA5LjI3NTc0IDQuODI2MzggOS4xMTMwNiA0LjUzNjggOC44MjM0OEM0LjI0NzIyIDguNTMzOSA0LjA4NDU0IDguMTQxMTUgNC4wODQ1NCA3LjczMTYzQzQuMDg0NTQgNy4zMjIxIDQuMjQ3MjIgNi45MjkzNSA0LjUzNjggNi42Mzk3N1pcIixmaWxsOnQscm9sZTpcImltZ1wifSl9KSl9fSw1Mjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRnJhZ21lbnRzSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuRnJhZ21lbnRzSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIyMFwiLGhlaWdodDpcIjIwXCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNOC44MDAwMSA0LjgwMDAySDQuODAwMDFDMy45MTc2MSA0LjgwMDAyIDMuMjAwMDEgNS41MTc2MiAzLjIwMDAxIDYuNDAwMDJWMTAuNEMzLjIwMDAxIDExLjI4MjQgMy45MTc2MSAxMiA0LjgwMDAxIDEySDguODAwMDFDOS42ODI0MSAxMiAxMC40IDExLjI4MjQgMTAuNCAxMC40VjYuNDAwMDJDMTAuNCA1LjUxNzYyIDkuNjgyNDEgNC44MDAwMiA4LjgwMDAxIDQuODAwMDJaTTIwLjM1OTIgNi40Njg4MkwxNy41MzEyIDMuNjQwMDJDMTYuOTA4IDMuMDE2MDIgMTUuODkyIDMuMDE2MDIgMTUuMjY4OCAzLjY0MDAyTDEyLjQ0MDggNi40Njg4MkMxMS44MTY4IDcuMDkyODIgMTEuODE2OCA4LjEwNzIyIDEyLjQ0MDggOC43MzEyMkwxNS4yNjg4IDExLjU2QzE1LjU4MDggMTEuODcyIDE1Ljk5MDQgMTIuMDI4IDE2LjQgMTIuMDI4QzE2LjgwOTYgMTIuMDI4IDE3LjIxOTIgMTEuODcyIDE3LjUzMTIgMTEuNTZMMjAuMzU5MiA4LjczMTIyQzIwLjk4MzIgOC4xMDcyMiAyMC45ODMyIDcuMDkyODIgMjAuMzU5MiA2LjQ2ODgyWk04LjgwMDAxIDEzLjZINC44MDAwMUMzLjkxNzYxIDEzLjYgMy4yMDAwMSAxNC4zMTc2IDMuMjAwMDEgMTUuMlYxOS4yQzMuMjAwMDEgMjAuMDgyNCAzLjkxNzYxIDIwLjggNC44MDAwMSAyMC44SDguODAwMDFDOS42ODI0MSAyMC44IDEwLjQgMjAuMDgyNCAxMC40IDE5LjJWMTUuMkMxMC40IDE0LjMxNzYgOS42ODI0MSAxMy42IDguODAwMDEgMTMuNlpNMTcuNiAxMy42SDEzLjZDMTIuNzE3NiAxMy42IDEyIDE0LjMxNzYgMTIgMTUuMlYxOS4yQzEyIDIwLjA4MjQgMTIuNzE3NiAyMC44IDEzLjYgMjAuOEgxNy42QzE4LjQ4MjQgMjAuOCAxOS4yIDIwLjA4MjQgMTkuMiAxOS4yVjE1LjJDMTkuMiAxNC4zMTc2IDE4LjQ4MjQgMTMuNiAxNy42IDEzLjZaXCIsZmlsbDp0fSl9KSl9fSw3Nzg4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxpZ2h0QnVsYkZpbGxlZEljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkxpZ2h0QnVsYkZpbGxlZEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4cykoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjEwXCIsaGVpZ2h0OlwiMTJcIix2aWV3Qm94OlwiMCAwIDEwIDEyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOlsoMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMS44MyAxLjMxMDA4QzIuMjQ0MDkgMC44OTE2NjcgMi43Mzc2OCAwLjU2MDMwNyAzLjI4MTc0IDAuMzM1NTA0QzMuODI1ODEgMC4xMTA3MDEgNC40MDkzNCAtMC4wMDMwMDMzMyA0Ljk5OCAwLjAwMTA4MjkxQzYuMTg2MjggLTAuMDAzMTA3ODUgNy4zMjkwNSAwLjQ1NzczMyA4LjE4MiAxLjI4NTA4QzguNTk4ODEgMS42ODcxOSA4LjkzMDQ2IDIuMTY5MDMgOS4xNTcyMyAyLjcwMTk0QzkuMzg0IDMuMjM0ODUgOS41MDEyNSAzLjgwNzkzIDkuNTAyIDQuMzg3MDhDOS41MDIgNS42ODAwOCA4LjkxNyA2LjgzMDA4IDcuODgzIDcuODI1MDhMNy41NzcgOS4wMDAwOEgyLjQ2NkwyLjIzNiA4LjAzNzA4QzEuMTU0IDYuOTA3MDggMC41NTYgNS44MTkwOCAwLjUgNC41ODIwOFY0LjU0NDA4QzAuNTQgMy4yNDgwOCAxLjAzMyAyLjEyMTA4IDEuODMxIDEuMzExMDhMMS44MyAxLjMxMDA4WlwiLGZpbGw6dH0pLCgwLG8uanN4KShcInBhdGhcIix7ZDpcIk0yLjcwNDEgMTBMMi45MzcxIDEwLjk3OEwyLjk0NTEgMTFDMy4wNDUxIDExLjI5NyAzLjIzNzEgMTEuNTQ0IDMuNDc5MSAxMS43MTdDMy43MzAxIDExLjg5NyA0LjAzNzEgMTEuOTk5IDQuMzYxMSAxMS45OTlINC4zNjMxTDUuNzQ2MSAxMS45OTVMNS43NjcxIDExLjk5M0M2LjA3NTg3IDExLjk2NjkgNi4zNjkxMyAxMS44NDY1IDYuNjA3MSAxMS42NDhDNi44MzgxIDExLjQ1NCA3LjAxMzEgMTEuMTg4IDcuMDg3MSAxMC44NzRMNy4zMTYxIDEwSDIuNzA0MVYxMFpcIixmaWxsOnR9KV19KSl9fSwzNzAzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxpZ2h0QnVsYk91dGxpbmVkSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuTGlnaHRCdWxiT3V0bGluZWRJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjEwXCIsaGVpZ2h0OlwiMTJcIix2aWV3Qm94OlwiMCAwIDEwIDEyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk00Ljk5NzY2IDAuMDAxMDAxNDlDMy43Njg2NiAwLjAwMTAwMTQ5IDIuNjQ3NjYgMC40ODIwMDIgMS44Mjk2NiAxLjMxMUMxLjAzMTY2IDIuMTIxIDAuNTM5NjU3IDMuMjQ4IDAuNDk5NjU3IDQuNTQ0TDAuNDk4NjU3IDQuNTYzVjQuNTgzQzAuNTU1NjU3IDUuODE5IDEuMTUzNjYgNi45MDcgMi4yMzU2NiA4LjAzN0wyLjkzNzY2IDEwLjk3OEwyLjk0NDY2IDExQzMuMDQ0NjYgMTEuMjk3IDMuMjM2NjYgMTEuNTQ0IDMuNDc4NjYgMTEuNzE3QzMuNzI5NjYgMTEuODk3IDQuMDM2NjYgMTEuOTk5IDQuMzYxNjYgMTEuOTk5TDUuNzQ1NjYgMTEuOTk1TDUuNzY2NjYgMTEuOTkzQzYuMDc1NDIgMTEuOTY2OSA2LjM2ODY5IDExLjg0NjUgNi42MDY2NiAxMS42NDhDNi44Mzc2NiAxMS40NTQgNy4wMTI2NiAxMS4xODggNy4wODY2NiAxMC44NzRMNy44ODI2NiA3LjgyNEM4LjkxNjY2IDYuODMgOS41MDA2NiA1LjY4IDkuNTAwNjYgNC4zODdDOS40OTk5MSAzLjgwNzg1IDkuMzgyNjYgMy4yMzQ3NyA5LjE1NTg5IDIuNzAxODZDOC45MjkxMiAyLjE2ODk1IDguNTk3NDYgMS42ODcxMSA4LjE4MDY2IDEuMjg1QzcuMzI3OTYgMC40NTc4OTQgNi4xODU1OSAtMC4wMDI5Mjc4OCA0Ljk5NzY2IDAuMDAxMDAxNDlaTTIuNTQyNjYgMi4wMTNDMi44NjM0NCAxLjY4ODcxIDMuMjQ1OTYgMS40MzE5OCAzLjY2NzYyIDEuMjU4QzQuMDg5MjggMS4wODQwMSA0LjU0MTUzIDAuOTk2MjgzIDQuOTk3NjYgMUM1LjkyNTE0IDAuOTk1Nzg0IDYuODE3NDQgMS4zNTQ3MSA3LjQ4MzY2IDJDNy44MDQ3MSAyLjMwOTA0IDguMDYwMjMgMi42Nzk1NyA4LjIzNDk2IDMuMDg5NTFDOC40MDk2OSAzLjQ5OTQ1IDguNTAwMDUgMy45NDAzOCA4LjUwMDY2IDQuMzg2QzguNTAwNjYgNS4zNzcgOC4wNDc2NiA2LjMxMiA3LjA5NjY2IDcuMTkxTDYuOTg4NjYgNy4yOTFMNi41NDI2NiA5SDMuNDkzNjZMMy4xNDQ2NiA3LjUzNkwzLjA0NzY2IDcuNDM2QzEuOTk5NjYgNi4zNzIgMS41NDc2NiA1LjQ4IDEuNDk4NjYgNC41NTdDMS41MzY2NiAzLjUwOSAxLjkzMjY2IDIuNjMyIDIuNTQyNjYgMi4wMTRWMi4wMTNaTTMuNzMyNjYgMTBINi4yODI2Nkw2LjExNzY2IDEwLjYyN0w2LjExNDY2IDEwLjY0QzYuMDkyMTEgMTAuNzM0MiA2LjAzOTQ0IDEwLjgxODUgNS45NjQ2NiAxMC44OEM1Ljg4ODczIDEwLjk0MzUgNS43OTU5NSAxMC45ODM0IDUuNjk3NjYgMTAuOTk1TDQuMzYwNjYgMTFDNC4yNTMyMSAxMS4wMDAzIDQuMTQ4MzMgMTAuOTY3MSA0LjA2MDY2IDEwLjkwNUMzLjk4NzcgMTAuODUzNiAzLjkzMTM5IDEwLjc4MiAzLjg5ODY2IDEwLjY5OUwzLjczMTY2IDEwSDMuNzMyNjZaXCIsZmlsbDp0fSl9KSl9fSw4MzExOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxvY2tlZENsb3NlZEZpbGxlZEljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkxvY2tlZENsb3NlZEZpbGxlZEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTUuMDAwMDMgNC42MzYyM0M1LjAwMDAzIDMuNzYwNTIgNS4yNDIyMiAzLjEwNTYxIDUuNjQzMjcgMi42NzM3OEM2LjAzOTM4IDIuMjQ3MjcgNi42NDU4NSAxLjk3ODUyIDcuNTAxNDMgMS45Nzg1MkM4LjM1NzQ4IDEuOTc4NTIgOC45NjMwOSAyLjI0NjczIDkuMzU4MjcgMi42NzIzQzkuNzU4NDEgMy4xMDMyMSAxMCAzLjc1NzI5IDEwIDQuNjMzNDZWNi41MDAyMUgxMVY0LjYzMzQ2QzExIDMuNTc5MTcgMTAuNzA3NiAyLjY1NTc4IDEwLjA5MTEgMS45OTE4M0M5LjQ2OTU1IDEuMzIyNTQgOC41NzU4NiAwLjk3ODUxNiA3LjUwMTQzIDAuOTc4NTE2QzYuNDI2NzggMC45Nzg1MTYgNS41MzI1NSAxLjMyMzUgNC45MTA1MiAxLjk5MzI4QzQuMjkzNDIgMi42NTc3NSA0LjAwMDAzIDMuNTgxNjkgNC4wMDAwMyA0LjYzNjIzVjYuNTAwMjFINS4wMDAwM1Y0LjYzNjIzWk0zIDYuNTAwMjFDMi43MjM4NiA2LjUwMDIxIDIuNSA2LjcyNDA3IDIuNSA3LjAwMDIxVjEzLjAwMDJDMi41IDEzLjI3NjQgMi43MjM4NiAxMy41MDAyIDMgMTMuNTAwMkgxMkMxMi4yNzYxIDEzLjUwMDIgMTIuNSAxMy4yNzY0IDEyLjUgMTMuMDAwMlY3LjAwMDIxQzEyLjUgNi43MjQwNyAxMi4yNzYxIDYuNTAwMjEgMTIgNi41MDAyMUgzWlwiLGZpbGw6dCxyb2xlOlwiaW1nXCJ9KX0pKX19LDU3Mjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTWluaW1pemVJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5NaW5pbWl6ZUljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTIuMTY2MDIgMTJDMi4xNjYwMiAxMS43MjM5IDIuMzg5ODcgMTEuNSAyLjY2NjAyIDExLjVIMTMuMzMyN0MxMy42MDg4IDExLjUgMTMuODMyNyAxMS43MjM5IDEzLjgzMjcgMTJDMTMuODMyNyAxMi4yNzYxIDEzLjYwODggMTIuNSAxMy4zMzI3IDEyLjVIMi42NjYwMkMyLjM4OTg3IDEyLjUgMi4xNjYwMiAxMi4yNzYxIDIuMTY2MDIgMTJaXCIsZmlsbDp0LHJvbGU6XCJpbWdcIn0pfSkpfX0sMzc5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk9wZW5GaW5JY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5PcGVuRmluSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMTQuMjY4NSA1LjczOTE2QzE0LjE3ODUgNS42NDkwNiAxNC4wODE3IDUuNTY1OTIgMTMuOTc5IDUuNDkwNDdMMTMuOTQxMiA1LjQ2NDI5QzEzLjkxOTYgNS40NDkxOSAxMy44OTg0IDUuNDMzNTggMTMuODc2MyA1LjQxODk4QzEzLjg1NDEgNS40MDQzOCAxMy44Mjg0IDUuMzg4NzggMTMuODA0OCA1LjM3NDE4TDEzLjc3MTUgNS4zNTM1NEMxMy43NDE4IDUuMzM1OTIgMTMuNzExNiA1LjMxOTMgMTMuNjgxNCA1LjMwMzE5TDEzLjY2MzggNS4yOTM2M0MxMy4zMDY1IDUuMTA2MTggMTIuOTA5MSA1LjAwODA3IDEyLjUwNTcgNS4wMDc2OEMxMS44NDE3IDUuMDA3MTUgMTEuMjA1MiA0Ljc0MjkxIDEwLjczNjIgNC4yNzMxQzEwLjI2NzEgMy44MDMzIDEwLjAwNCAzLjE2NjQyIDEwLjAwNDYgMi41MDI2MkMxMC4wMDY1IDEuNDkyMjIgOS4zOTkzMyAwLjU4MDIxOSA4LjQ2NjM0IDAuMTkxOTExQzcuNTMzMzUgLTAuMTk2Mzk3IDYuNDU4MjYgMC4wMTU0NjYgNS43NDI0NCAwLjcyODcwMUM1LjAyNjYxIDEuNDQxOTQgNC44MTEwMyAyLjUxNjA3IDUuMTk2MjEgMy40NTAyQzUuNTgxNCA0LjM4NDMzIDYuNDkxNSA0Ljk5NDQ3IDcuNTAyMSA0Ljk5NjFDOC4xNjYwMyA0Ljk5NjY0IDguODAyNTYgNS4yNjA4OCA5LjI3MTYxIDUuNzMwNjhDOS43NDA2NiA2LjIwMDQ5IDEwLjAwMzggNi44MzczNiAxMC4wMDMxIDcuNTAxMTdDMTAuMDAyNiA4LjE2NDk3IDkuNzM4MyA4LjgwMTM3IDkuMjY4NCA5LjI3MDMyQzguNzk4NSA5LjczOTI4IDguMTYxNSAxMC4wMDI0IDcuNDk3NTYgMTAuMDAxN0M2LjgzNDEzIDEwLjAwMjIgNi4xOTc3MiA5LjczODk0IDUuNzI4NjUgOS4yNjk4N0M1LjI1OTU4IDguODAwOCA0Ljk5NjM2IDguMTY0NDcgNC45OTcwMyA3LjUwMTE3QzQuOTk3MDMgNi4xMjE1NSAzLjg3ODQxIDUuMDAzMTUgMi40OTg1MiA1LjAwMzE1QzEuMTE4NjIgNS4wMDMxNSAwIDYuMTIxNTUgMCA3LjUwMTE3QzAgOC44ODA3OCAxLjExODYyIDkuOTk5MTggMi40OTg1MiA5Ljk5OTE4QzMuODc4NDEgOS45OTkxOCA0Ljk5NzAzIDExLjExNzYgNC45OTcwMyAxMi40OTcyQzQuOTk3MDMgMTMuODc5NSA2LjExNzggMTUgNy41MDAzMyAxNUM4Ljg4Mjg3IDE1IDEwLjAwMzYgMTMuODc5NSAxMC4wMDM2IDEyLjQ5NzJDMTAuMDAzNiAxMS4xMTc2IDExLjEyMjMgOS45OTkxOCAxMi41MDIxIDkuOTk5MThDMTIuOTQ4MiA5Ljk5OTQ4IDEzLjM4NjIgOS44ODAyMiAxMy43NzA1IDkuNjUzODNDMTMuODAzOCA5LjYzNDIgMTMuODM2NSA5LjYxMzU2IDEzLjg3MTIgOS41OTI0MUwxMy44NzgzIDkuNTg3ODhDMTMuOTA4NSA5LjU2Nzc1IDEzLjkzODcgOS41NDY2IDEzLjk2NzkgOS41MjU0NkwxMy45ODEgOS41MTY0QzE0LjAwNzIgOS40OTcyNyAxNC4wMzE0IDkuNDc2NjIgMTQuMDU5MSA5LjQ1NTk4TDE0LjA4MTIgOS40Mzg4N0MxNC4xMDU0IDkuNDE5MjMgMTQuMTI4NiA5LjM5ODU5IDE0LjE1MjIgOS4zNzc5NUwxNC4xNzc5IDkuMzU1OEMxNC4yMDgxIDkuMzI4NjIgMTQuMjM3OCA5LjMwMDQyIDE0LjI2NyA5LjI3MTIzTDE0LjI3MTYgOS4yNjcyQzE0LjM3OTQgOS4xNTg4NyAxNC40NzcyIDkuMDQwOTEgMTQuNTYzNiA4LjkxNDhDMTQuNTgyNCA4Ljg4NzYxIDE0LjYwMDUgOC44NjAwOSAxNC42MTggOC44MzIyM0MxNS4yMzcgNy44NDU4NCAxNS4wOTIgNi41NjI2NyAxNC4yNjg1IDUuNzM5MTZaXCIsZmlsbDp0LHJvbGU6XCJpbWdcIn0pfSkpfX0sOTk0MDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5QYWdlSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuUGFnZUljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTRcIixoZWlnaHQ6XCIxOFwiLHZpZXdCb3g6XCIwIDAgMTQgMThcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTExLjk5OTcgMC42NjY5OTJIMS45OTk2N0MxLjA4MDUxIDAuNjY2OTkyIDAuMzMzMDA4IDEuNDE0NDkgMC4zMzMwMDggMi4zMzM2NlYxNS42NjdDMC4zMzMwMDggMTYuNTg2MiAxLjA4MDUxIDE3LjMzMzcgMS45OTk2NyAxNy4zMzM3SDExLjk5OTdDMTIuOTE4OCAxNy4zMzM3IDEzLjY2NjMgMTYuNTg2MiAxMy42NjYzIDE1LjY2N1YyLjMzMzY2QzEzLjY2NjMgMS40MTQ0OSAxMi45MTg4IDAuNjY2OTkyIDExLjk5OTcgMC42NjY5OTJaTTcuNDE2MzQgOC4xNjY5OUgzLjI0OTY3QzMuMDE5NjcgOC4xNjY5OSAyLjgzMzAxIDcuOTgwMzMgMi44MzMwMSA3Ljc1MDMzVjYuOTE2OTlDMi44MzMwMSA2LjY4Njk5IDMuMDE5NjcgNi41MDAzMyAzLjI0OTY3IDYuNTAwMzNINy40MTYzNEM3LjY0NjM0IDYuNTAwMzMgNy44MzMwMSA2LjY4Njk5IDcuODMzMDEgNi45MTY5OVY3Ljc1MDMzQzcuODMzMDEgNy45ODAzMyA3LjY0NjM0IDguMTY2OTkgNy40MTYzNCA4LjE2Njk5Wk0xMC43NDk3IDQuODMzNjZIMy4yNDk2N0MzLjAxOTY3IDQuODMzNjYgMi44MzMwMSA0LjY0Njk5IDIuODMzMDEgNC40MTY5OVYzLjU4MzY2QzIuODMzMDEgMy4zNTM2NiAzLjAxOTY3IDMuMTY2OTkgMy4yNDk2NyAzLjE2Njk5SDEwLjc0OTdDMTAuOTc5NyAzLjE2Njk5IDExLjE2NjMgMy4zNTM2NiAxMS4xNjYzIDMuNTgzNjZWNC40MTY5OUMxMS4xNjYzIDQuNjQ2OTkgMTAuOTc5NyA0LjgzMzY2IDEwLjc0OTcgNC44MzM2NlpcIixmaWxsOnR9KX0pKX19LDEwMDI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUmVkRG90SWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuUmVkRG90SWNvbj1lPT57dmFyIHQ9cihlLFtdKTtyZXR1cm4oMCxvLmpzeHMpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCI4XCIsaGVpZ2h0OlwiOFwiLHZpZXdCb3g6XCIwIDAgOCA4XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LHQse2NoaWxkcmVuOlsoMCxvLmpzeCkoXCJyZWN0XCIse3g6XCIwLjVcIix5OlwiMC41XCIsd2lkdGg6XCI3XCIsaGVpZ2h0OlwiN1wiLHJ4OlwiMy41XCIsZmlsbDpcIiNDMjEzMTNcIn0pLCgwLG8uanN4KShcInJlY3RcIix7eDpcIjAuNVwiLHk6XCIwLjVcIix3aWR0aDpcIjdcIixoZWlnaHQ6XCI3XCIscng6XCIzLjVcIixzdHJva2U6XCIjRjFGMEYxXCJ9KV19KSl9fSwxNTM5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlN0YWNrSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuU3RhY2tJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjIwXCIsaGVpZ2h0OlwiMjBcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xNC4yMTc4IDMuMDAwOTJDMTQuMTUwNCAzLjAwNTE0IDE0LjA4MzkgMy4wMTg0NCAxNC4wMiAzLjA0MDQ3TDMuNTE5ODYgNi40Mjg3QzMuMzY4NjQgNi40Nzc0MyAzLjIzNjgxIDYuNTcyOTEgMy4xNDMzNSA2LjcwMTM4QzMuMDQ5ODkgNi44Mjk4NiAyLjk5OTY0IDYuOTg0NjkgMi45OTk4MyA3LjE0MzU2VjE1Ljc1NEMyLjk5ODQzIDE1Ljg1MzQgMy4wMTY3OSAxNS45NTIxIDMuMDUzODUgMTYuMDQ0M0MzLjA5MDkxIDE2LjEzNjYgMy4xNDU5MyAxNi4yMjA1IDMuMjE1NzEgMTYuMjkxM0MzLjI4NTUgMTYuMzYyMSAzLjM2ODY1IDE2LjQxODMgMy40NjAzNSAxNi40NTY2QzMuNTUyMDQgMTYuNDk1IDMuNjUwNDUgMTYuNTE0NyAzLjc0OTg0IDE2LjUxNDdDMy44NDkyNCAxNi41MTQ3IDMuOTQ3NjQgMTYuNDk1IDQuMDM5MzQgMTYuNDU2NkM0LjEzMTAzIDE2LjQxODMgNC4yMTQxOSAxNi4zNjIxIDQuMjgzOTcgMTYuMjkxM0M0LjM1Mzc1IDE2LjIyMDUgNC40MDg3OCAxNi4xMzY2IDQuNDQ1ODQgMTYuMDQ0M0M0LjQ4MjkgMTUuOTUyMSA0LjUwMTI2IDE1Ljg1MzQgNC40OTk4NSAxNS43NTRWNy42ODg0OUwxNC40OCA0LjQ2NzI1QzE0LjY0OSA0LjQxNTI5IDE0Ljc5NDIgNC4zMDUzMiAxNC44OSA0LjE1Njc0QzE0Ljk4NTggNC4wMDgxNSAxNS4wMjYgMy44MzA1IDE1LjAwMzYgMy42NTUxNEMxNC45ODEyIDMuNDc5NzcgMTQuODk3NSAzLjMxNzk3IDE0Ljc2NzQgMy4xOTgyN0MxNC42MzczIDMuMDc4NTcgMTQuNDY5MSAzLjAwODY4IDE0LjI5MjUgMy4wMDA5MkMxNC4yNjc2IDIuOTk5NjcgMTQuMjQyNyAyLjk5OTY3IDE0LjIxNzggMy4wMDA5MlpNMTcuMjE3OCA1LjI1MDk1QzE3LjE1MDQgNS4yNTUxNyAxNy4wODM5IDUuMjY4NDggMTcuMDIwMSA1LjI5MDVMNi41MTk5IDguNjc4NzRDNi4zNjg2OSA4LjcyNzQ2IDYuMjM2ODUgOC44MjI5NCA2LjE0MzM5IDguOTUxNDJDNi4wNDk5MyA5LjA3OTg5IDUuOTk5NjggOS4yMzQ3MiA1Ljk5OTg4IDkuMzkzNTlWMTguMDA0MUM1Ljk5ODQ3IDE4LjEwMzUgNi4wMTY4MyAxOC4yMDIxIDYuMDUzODkgMTguMjk0NEM2LjA5MDk1IDE4LjM4NjYgNi4xNDU5NyAxOC40NzA1IDYuMjE1NzYgMTguNTQxM0M2LjI4NTU0IDE4LjYxMjEgNi4zNjg3IDE4LjY2ODMgNi40NjAzOSAxOC43MDY2QzYuNTUyMDkgMTguNzQ1IDYuNjUwNDkgMTguNzY0OCA2Ljc0OTg5IDE4Ljc2NDhDNi44NDkyOCAxOC43NjQ4IDYuOTQ3NjkgMTguNzQ1IDcuMDM5MzggMTguNzA2NkM3LjEzMTA4IDE4LjY2ODMgNy4yMTQyMyAxOC42MTIxIDcuMjg0MDIgMTguNTQxM0M3LjM1MzggMTguNDcwNSA3LjQwODgyIDE4LjM4NjYgNy40NDU4OCAxOC4yOTQ0QzcuNDgyOTQgMTguMjAyMSA3LjUwMTMgMTguMTAzNSA3LjQ5OTkgMTguMDA0MVY5LjkzODUyTDE3LjQ4IDYuNzE3MjhDMTcuNjQ5IDYuNjY1MzMgMTcuNzk0MiA2LjU1NTM1IDE3Ljg5IDYuNDA2NzdDMTcuOTg1OCA2LjI1ODE4IDE4LjAyNjEgNi4wODA1NCAxOC4wMDM2IDUuOTA1MTdDMTcuOTgxMiA1LjcyOTgxIDE3Ljg5NzYgNS41NjggMTcuNzY3NSA1LjQ0ODNDMTcuNjM3NCA1LjMyODYxIDE3LjQ2OTEgNS4yNTg3MSAxNy4yOTI1IDUuMjUwOTVDMTcuMjY3NiA1LjI0OTcxIDE3LjI0MjcgNS4yNDk3MSAxNy4yMTc4IDUuMjUwOTVaTTIwLjE5MyA3LjUwNTM4QzIwLjEzNDQgNy41MDk4MiAyMC4wNzU4IDcuNTIxOTcgMjAuMDE4NiA3LjU0MDUzTDkuNTE4NDggMTAuOTI4OEM5LjIwOTQ4IDExLjAyOTMgOC45OTk5MiAxMS4zMTgxIDguOTk5OTIgMTEuNjQzNlYyMC4yNTQxQzguOTk5OTIgMjAuNDk3OSA5LjExODI5IDIwLjcyNjIgOS4zMTc4IDIwLjg2NjRDOS40NDYwNSAyMC45NTcyIDkuNTk2OTMgMjEuMDA0MSA5Ljc0OTkzIDIxLjAwNDFDOS44MzQ2OCAyMS4wMDQxIDkuOTIwMTQgMjAuOTg5NCAxMC4wMDE5IDIwLjk2MDJMMjAuNTAyIDE3LjIxMDFDMjAuODAwNiAxNy4xMDQ0IDIxLjAwMDEgMTYuODIxMyAyMS4wMDAxIDE2LjUwNFY4LjI1MzkyQzIxLjAwMDEgOC4wMTQ2NyAyMC44ODUzIDcuNzg5MjIgMjAuNjkxIDcuNjQ3NDdDMjAuNTQ1OSA3LjU0MTcyIDIwLjM2ODggNy40OTIwNSAyMC4xOTMgNy41MDUzOFpcIixmaWxsOnR9KX0pKX19LDQwMjA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU3RvcmVmcm9udEljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LlN0b3JlZnJvbnRJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjIwXCIsaGVpZ2h0OlwiMjBcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk01IDNDNC40NDggMyA0IDMuNDQ4IDQgNEM0IDQuNTUyIDQuNDQ4IDUgNSA1SDE5QzE5LjU1MiA1IDIwIDQuNTUyIDIwIDRDMjAgMy40NDggMTkuNTUyIDMgMTkgM0g1Wk00LjYxNzE5IDdDNC4yMzgxOSA3IDMuODkzNjEgNy4yMTM3MyAzLjcyNDYxIDcuNTUyNzNMMi4xMDU0NyAxMC43ODkxQzIuMDM1NDcgMTAuOTI4MSAyIDExLjA4MTMgMiAxMS4yMzYzVjEyQzIgMTIuNTUyIDIuNDQ4IDEzIDMgMTNWMTlDMyAyMC4xMDUgMy44OTUgMjEgNSAyMUgxOUMyMC4xMDUgMjEgMjEgMjAuMTA1IDIxIDE5VjEzQzIxLjU1MiAxMyAyMiAxMi41NTIgMjIgMTJWMTEuMjM2M0MyMiAxMS4wODEzIDIxLjk2NDUgMTAuOTI4MSAyMS44OTQ1IDEwLjc4OTFMMjAuMjc1NCA3LjU1MjczQzIwLjEwNjQgNy4yMTM3MyAxOS43NjE4IDcgMTkuMzgyOCA3SDQuNjE3MTlaTTYgMTNIMThDMTguNTUyIDEzIDE5IDEzLjQ0OCAxOSAxNFYxOEMxOSAxOC41NTIgMTguNTUyIDE5IDE4IDE5SDZDNS40NDggMTkgNSAxOC41NTIgNSAxOFYxNEM1IDEzLjQ0OCA1LjQ0OCAxMyA2IDEzWlwiLGZpbGw6dH0pfSkpfX0sNzkzNzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Xb3Jrc3BhY2VJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5Xb3Jrc3BhY2VJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeHMpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHJvbGU6XCJpbWdcIn0sbix7Y2hpbGRyZW46WygwLG8uanN4KShcInBhdGhcIix7ZDpcIk02LjczODExIDIuODEyNUgzLjUzMTM3QzMuMTM0NDIgMi44MTI1IDIuODEyNjIgMy4xMzQzIDIuODEyNjIgMy41MzEyNVY3LjUxMjA0QzIuODEyNjIgNy45MDkgMy4xMzQ0MiA4LjIzMDc5IDMuNTMxMzcgOC4yMzA3OUg2LjczODExQzcuMTM1MDYgOC4yMzA3OSA3LjQ1Njg2IDcuOTA5IDcuNDU2ODYgNy41MTIwNFYzLjUzMTI1QzcuNDU2ODYgMy4xMzQzIDcuMTM1MDYgMi44MTI1IDYuNzM4MTEgMi44MTI1WlwiLGZpbGw6dH0pLCgwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xMi4xNTY1IDYuMjY3NThIOC45NDk3MUM4Ljc1MTIzIDYuMjY3NTggOC41OTAzMyA2LjQyODQ4IDguNTkwMzMgNi42MjY5NlYxMS4zODE4QzguNTkwMzMgMTEuNTgwMyA4Ljc1MTIzIDExLjc0MTIgOC45NDk3MSAxMS43NDEySDEyLjE1NjVDMTIuMzU0OSAxMS43NDEyIDEyLjUxNTggMTEuNTgwMyAxMi41MTU4IDExLjM4MThWNi42MjY5NkMxMi41MTU4IDYuNDI4NDggMTIuMzU0OSA2LjI2NzU4IDEyLjE1NjUgNi4yNjc1OFpcIixzdHJva2U6dCxzdHJva2VXaWR0aDpcIjAuNzE4NzUzXCJ9KSwoMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMTIuMTU2NCAyLjgxMjVIOC45NDk3MUM4LjU1Mjc1IDIuODEyNSA4LjIzMDk2IDMuMTM0MyA4LjIzMDk2IDMuNTMxMjVWNC40MTU4N0M4LjIzMDk2IDQuODEyODMgOC41NTI3NSA1LjEzNDYzIDguOTQ5NzEgNS4xMzQ2M0gxMi4xNTY0QzEyLjU1MzQgNS4xMzQ2MyAxMi44NzUyIDQuODEyODMgMTIuODc1MiA0LjQxNTg3VjMuNTMxMjVDMTIuODc1MiAzLjEzNDMgMTIuNTUzNCAyLjgxMjUgMTIuMTU2NCAyLjgxMjVaXCIsZmlsbDp0fSksKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTYuNzM3OTggOS4wMDQ4OEgzLjUzMTI1QzMuMTM0MyA5LjAwNDg4IDIuODEyNSA5LjMyNjY4IDIuODEyNSA5LjcyMzY0VjExLjM4MjNDMi44MTI1IDExLjc3OTMgMy4xMzQzIDEyLjEwMTEgMy41MzEyNSAxMi4xMDExSDYuNzM3OThDNy4xMzQ5NCAxMi4xMDExIDcuNDU2NzQgMTEuNzc5MyA3LjQ1Njc0IDExLjM4MjNWOS43MjM2NEM3LjQ1Njc0IDkuMzI2NjggNy4xMzQ5NCA5LjAwNDg4IDYuNzM3OTggOS4wMDQ4OFpcIixmaWxsOnR9KV19KSl9fSwyNzcyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigzNzkpLHQpLG8obig0NzE4KSx0KSxvKG4oNzkzNyksdCksbyhuKDgzMTEpLHQpLG8obig1NzI5KSx0KSxvKG4oNzc4OCksdCksbyhuKDM3MDMpLHQpLG8obig2Nzk1KSx0KSxvKG4oODI2NSksdCksbyhuKDExNyksdCksbyhuKDE1MzkpLHQpLG8obig5Mjg1KSx0KSxvKG4oNDAyMCksdCksbyhuKDUyOSksdCksbyhuKDI0MDIpLHQpLG8obigyMTQ3KSx0KSxvKG4oNDgyNSksdCksbyhuKDY0NDcpLHQpLG8obigxMjgxKSx0KSxvKG4oNzQyOSksdCksbyhuKDk5NDApLHQpLG8obigxMDAyKSx0KX0sMzExNzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lkljb25XaXRoQmFkZ2U9dm9pZCAwO2NvbnN0IGE9big1ODkzKSxpPW8obig3NTE4KSksbD1uKDcwMDYpLHM9bigzMTM2KSxjPW4oMTMzNSk7dC5JY29uV2l0aEJhZGdlPWU9Pnt2YXJ7Y291bnQ6dD0wLG1heDpufT1lLG89cihlLFtcImNvdW50XCIsXCJtYXhcIl0pO3JldHVybigwLGEuanN4cykodSx7Y2hpbGRyZW46WygwLGEuanN4KShsLkljb24sT2JqZWN0LmFzc2lnbih7fSxvKSksdD4wJiYoMCxhLmpzeCkoZCx7Y291bnQ6dCxtYXg6bn0pXX0pfTtjb25zdCB1PSgwLGkuZGVmYXVsdCkoYy5Cb3gpYFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gLGQ9KDAsaS5kZWZhdWx0KShzLkJhZGdlKWBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0cmFuc2Zvcm06IHNjYWxlKDcwJSk7XG4gIHJpZ2h0OiAtJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgdG9wOiAtJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5gfSwxNDQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDMxMTcpLHQpfSwxOTQ0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxhYmVsPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1yKG4oNzUxOCkpLGk9bigxMzM1KSxsPW4oNzc2OSkscz1uKDk2MzQpO3QuTGFiZWw9KHtpY29uOmUsdGV4dDp0LGhlbHBlclRleHQ6bixodG1sRm9yOnIsaW5saW5lOmF9KT0+KDAsby5qc3hzKShwLE9iamVjdC5hc3NpZ24oe2lubGluZTphfSx7Y2hpbGRyZW46WygwLG8uanN4cykoXCJkaXZcIixPYmplY3QuYXNzaWduKHtzdHlsZTp7ZGlzcGxheTpcImZsZXhcIn19LHtjaGlsZHJlbjpbXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lKCk6ZT8oMCxvLmpzeCkoZCx7aWNvbjplfSk6bnVsbCwoMCxvLmpzeCkodSxPYmplY3QuYXNzaWduKHthczpcImxhYmVsXCIsaHRtbEZvcjpyLHdlaWdodDpcImJvbGRcIn0se2NoaWxkcmVuOnR9KSldfSkpLG4mJigwLG8uanN4KShjLHtjaGlsZHJlbjpufSldfSkpO2NvbnN0IGM9KDAsYS5kZWZhdWx0KShsLlRleHQpYFxuICBzaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRIZWxwfTtcbmAsdT0oMCxhLmRlZmF1bHQpKGwuVGV4dClgXG4gIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbmAsZD0oMCxhLmRlZmF1bHQpKHMuSWNvbilgXG4gIG1hcmdpbi1yaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICBtaW4td2lkdGg6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuc21hbGx9O1xuICBtaW4taGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnNtYWxsfTtcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xuYCxwPSgwLGEuZGVmYXVsdCkoaS5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtYXJnaW4tYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcblxuICAkeyh7aW5saW5lOmUsdGhlbWU6dH0pPT5lJiZgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gICAgIG1hcmdpbi1sZWZ0OiAke3QucHguc21hbGx9O1xcbiAgICAgZm9udC13ZWlnaHQ6ICR7dC5mb250V2VpZ2h0Lm5vcm1hbH07XFxuICBgfVxuYH0sOTIzOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oODI3NSksdCksbyhuKDY5MyksdCl9LDgyNzU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Mb2FkZXI9dm9pZCAwO2NvbnN0IGE9big1ODkzKSxpPW8obig3NTE4KSksbD1uKDk2MzQpO3QuTG9hZGVyPSgwLGkuZGVmYXVsdCkoKGU9Pnt2YXIgdD1yKGUsW10pO3JldHVybigwLGEuanN4KShsLkljb24sT2JqZWN0LmFzc2lnbih7fSx0LHtjaGlsZHJlbjooMCxhLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjEwMCVcIixoZWlnaHQ6XCIxMDAlXCIsdmlld0JveDpcIjAgMCAzOCAzOFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIn0se2NoaWxkcmVuOigwLGEuanN4KShcImdcIixPYmplY3QuYXNzaWduKHtmaWxsOlwibm9uZVwiLGZpbGxSdWxlOlwiZXZlbm9kZFwifSx7Y2hpbGRyZW46KDAsYS5qc3hzKShcImdcIixPYmplY3QuYXNzaWduKHt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMSAxKVwiLHN0cm9rZVdpZHRoOlwiMlwifSx7Y2hpbGRyZW46WygwLGEuanN4KShcImNpcmNsZVwiLHtzdHJva2VPcGFjaXR5OlwiLjVcIixjeDpcIjE4XCIsY3k6XCIxOFwiLHI6XCIxOFwifSksKDAsYS5qc3gpKFwicGF0aFwiLE9iamVjdC5hc3NpZ24oe2Q6XCJNMzYgMThjMC05Ljk0LTguMDYtMTgtMTgtMThcIn0se2NoaWxkcmVuOigwLGEuanN4KShcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJyb3RhdGVcIixmcm9tOlwiMCAxOCAxOFwiLHRvOlwiMzYwIDE4IDE4XCIsZHVyOlwiMXNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn0pfSkpXX0pKX0pKX0pKX0pKX0pKWBgfSw2OTM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9KSxhPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZyKHQsZSxuKTtyZXR1cm4gbyh0LGUpLHR9LGk9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5PcGVuZmluTG9hZGVyPXZvaWQgMDtjb25zdCBsPW4oNTg5Mykscz1hKG4oNzUxOCkpLGM9big5NjM0KTt0Lk9wZW5maW5Mb2FkZXI9KDAscy5kZWZhdWx0KSgoZT0+e3ZhciB0PWkoZSxbXSk7cmV0dXJuKDAsbC5qc3gpKGMuSWNvbixPYmplY3QuYXNzaWduKHt9LHQse2NoaWxkcmVuOigwLGwuanN4cykoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjEwMCVcIixoZWlnaHQ6XCIxMDAlXCIsdmlld0JveDpcIjAgMCAxOCAxOFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSx7Y2hpbGRyZW46WygwLGwuanN4KSh1LHtkOlwiXFxuICAgICAgICAgICAgTSAxNy4xMjIyIDYuODg3XFxuICAgICAgICAgICAgQyAxNy4wMTQxIDYuNzc4ODcgMTYuODk4IDYuNjc5MTEgMTYuNzc0OCA2LjU4ODU2XFxuICAgICAgICAgICAgTCAxNi43Mjk1IDYuNTU3MTVcXG4gICAgICAgICAgICBDIDE2LjcwMzUgNi41MzkwMyAxNi42NzgxIDYuNTIwMyAxNi42NTE1IDYuNTAyNzhcXG4gICAgICAgICAgICBDIDE2LjYyNSA2LjQ4NTI2IDE2LjU5NDEgNi40NjY1MyAxNi41NjU3IDYuNDQ5MDFcXG4gICAgICAgICAgICBMIDE2LjUyNTkgNi40MjQyNFxcbiAgICAgICAgICAgIEMgMTYuNDkwMiA2LjQwMzEgMTYuNDU0IDYuMzgzMTYgMTYuNDE3NyA2LjM2MzgzXFxuICAgICAgICAgICAgTCAxNi4zOTY2IDYuMzUyMzZcXG4gICAgICAgICAgICBDIDE1Ljk2NzggNi4xMjc0MiAxNS40OTEgNi4wMDk2OCAxNS4wMDY4IDYuMDA5MjJcXG4gICAgICAgICAgICBDIDE0LjIxMDEgNi4wMDg1OCAxMy40NDYzIDUuNjkxNDkgMTIuODgzNCA1LjEyNzcyXFxuICAgICAgICAgICAgQyAxMi4zMjA1IDQuNTYzOTUgMTIuMDA0OCAzLjc5OTcxIDEyLjAwNTYgMy4wMDMxNFxcbiAgICAgICAgICAgIEMgMTIuMDA3OCAxLjc5MDY2IDExLjI3OTIgMC42OTYyNjMgMTAuMTU5NiAwLjIzMDI5M1xcbiAgICAgICAgICAgIEMgOS4wNDAwMiAtMC4yMzU2NzYgNy43NDk5MiAwLjAxODU1OTIgNi44OTA5MyAwLjg3NDQ0MVxcbiAgICAgICAgICAgIEMgNi4wMzE5NCAxLjczMDMyIDUuNzczMjMgMy4wMTkyOCA2LjIzNTQ2IDQuMTQwMjRcXG4gICAgICAgICAgICBDIDYuNjk3NjggNS4yNjExOSA3Ljc4OTggNS45OTMzNyA5LjAwMjUxIDUuOTk1MzJcXG4gICAgICAgICAgICBDIDkuNzk5MjQgNS45OTU5NiAxMC41NjMxIDYuMzEzMDUgMTEuMTI1OSA2Ljg3NjgyXFxuICAgICAgICAgICAgQyAxMS42ODg4IDcuNDQwNTkgMTIuMDA0NiA4LjIwNDg0IDEyLjAwMzggOS4wMDE0XFxuICAgICAgICAgICAgQyAxMi4wMDMxIDkuNzk3OTcgMTEuNjg2IDEwLjU2MTYgMTEuMTIyMSAxMS4xMjQ0XFxuICAgICAgICAgICAgQyAxMC41NTgyIDExLjY4NzEgOS43OTM4IDEyLjAwMjggOC45OTcwOCAxMi4wMDJcXG4gICAgICAgICAgICBDIDguMjAwOTYgMTIuMDAyNyA3LjQzNzI3IDExLjY4NjcgNi44NzQzOCAxMS4xMjM4XFxuICAgICAgICAgICAgQyA2LjMxMTUgMTAuNTYxIDUuOTk1NjQgOS43OTczNiA1Ljk5NjQ0IDkuMDAxNFxcbiAgICAgICAgICAgIEMgNS45OTY0NCA3LjM0NTg2IDQuNjU0MDkgNi4wMDM3OCAyLjk5ODIyIDYuMDAzNzhcXG4gICAgICAgICAgICBDIDEuMzQyMzUgNi4wMDM3OCAwIDcuMzQ1ODYgMCA5LjAwMTRcXG4gICAgICAgICAgICBDIDAgMTAuNjU2OSAxLjM0MjM1IDExLjk5OSAyLjk5ODIyIDExLjk5OVxcbiAgICAgICAgICAgIEMgNC42NTQwOSAxMS45OTkgNS45OTY0NCAxMy4zNDExIDUuOTk2NDQgMTQuOTk2NlxcbiAgICAgICAgICAgIEMgNS45OTY0NCAxNi42NTUzIDcuMzQxMzYgMTggOS4wMDA0IDE4XFxuICAgICAgICAgICAgQyAxMC42NTk0IDE4IDEyLjAwNDQgMTYuNjU1MyAxMi4wMDQ0IDE0Ljk5NjZcXG4gICAgICAgICAgICBDIDEyLjAwNDQgMTMuMzQxMSAxMy4zNDY3IDExLjk5OSAxNS4wMDI2IDExLjk5OVxcbiAgICAgICAgICAgIEMgMTUuNTM3OSAxMS45OTk0IDE2LjA2MzUgMTEuODU2MyAxNi41MjQ3IDExLjU4NDZcXG4gICAgICAgICAgICBDIDE2LjU2NDUgMTEuNTYxIDE2LjYwMzggMTEuNTM2MyAxNi42NDU1IDExLjUxMDlcXG4gICAgICAgICAgICBMIDE2LjY1NCAxMS41MDU1XFxuICAgICAgICAgICAgQyAxNi42OTAyIDExLjQ4MTMgMTYuNzI2NSAxMS40NTU5IDE2Ljc2MTUgMTEuNDMwNVxcbiAgICAgICAgICAgIEwgMTYuNzc3MiAxMS40MTk3XFxuICAgICAgICAgICAgQyAxNi44MDg2IDExLjM5NjcgMTYuODM3NiAxMS4zNzIgMTYuODcwOSAxMS4zNDcyXFxuICAgICAgICAgICAgTCAxNi44OTc1IDExLjMyNjZcXG4gICAgICAgICAgICBDIDE2LjkyNjUgMTEuMzAzMSAxNi45NTQzIDExLjI3ODMgMTYuOTgyNyAxMS4yNTM1XFxuICAgICAgICAgICAgTCAxNy4wMTM1IDExLjIyN1xcbiAgICAgICAgICAgIEMgMTcuMDQ5NyAxMS4xOTQzIDE3LjA4NTQgMTEuMTYwNSAxNy4xMjA0IDExLjEyNTVcXG4gICAgICAgICAgICBMIDE3LjEyNTkgMTEuMTIwNlxcbiAgICAgICAgICAgIEMgMTcuMjU1MyAxMC45OTA2IDE3LjM3MjYgMTAuODQ5MSAxNy40NzYzIDEwLjY5NzhcXG4gICAgICAgICAgICBDIDE3LjQ5ODkgMTAuNjY1MSAxNy41MjA2IDEwLjYzMjEgMTcuNTQxNiAxMC41OTg3XFxuICAgICAgICAgICAgQyAxOC4yODQzIDkuNDE1IDE4LjExMDQgNy44NzUyIDE3LjEyMjIgNi44ODdaXFxuICAgICAgICAgICAgXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSksKDAsbC5qc3gpKGQse2N4OlwiOVwiLGN5OlwiM1wiLHI6XCIyLjlcIixmaWxsOlwiY3VycmVudENvbG9yXCIsYW5nbGU6MH0pLCgwLGwuanN4KShkLHtjeDpcIjE1XCIsY3k6XCI5XCIscjpcIjIuNzVcIixmaWxsOlwiY3VycmVudENvbG9yXCIsYW5nbGU6LTkwfSksKDAsbC5qc3gpKGQse2N4OlwiOVwiLGN5OlwiMTVcIixyOlwiMi41XCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLGFuZ2xlOi0xODB9KSwoMCxsLmpzeCkoZCx7Y3g6XCIzXCIsY3k6XCI5XCIscjpcIjIuMjVcIixmaWxsOlwiY3VycmVudENvbG9yXCIsYW5nbGU6LTI3MH0pXX0pKX0pKX0pKWBgO2NvbnN0IHU9cy5kZWZhdWx0LnBhdGhgXG4gIEBrZXlmcmFtZXMgbG9nb0FuaW1hdGlvbiB7XG4gICAgMCUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgMjUlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDM1JSB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgICA2MCUge1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gICAgNzUlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDEwMCUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gIH1cblxuICBhbmltYXRpb246IGxvZ29BbmltYXRpb24gMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG5gLGQ9cy5kZWZhdWx0LmNpcmNsZWBcbiAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyO1xuICBhbmltYXRpb246ICR7KHthbmdsZTplfSk9PihlPT5zLmtleWZyYW1lc2BcbiAgICAwJSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICAgIDI1JSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDMwJSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDUwJSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgke2V9ZGVnKTtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDcwJSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMzYwZGVnKTtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDc1JSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMzYwZGVnKTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICAgIDEwMCUge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTM2MGRlZyk7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbmApKGUpfSAycyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmB9LDcwMzA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVmFsaWRhdGlvbkVycm9yPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1yKG4oNzUxOCkpLGk9big3NzY5KSxsPW4oOTYzNCk7dC5WYWxpZGF0aW9uRXJyb3I9KHtjaGlsZHJlbjplfSk9PigwLG8uanN4cykocyx7Y2hpbGRyZW46WygwLG8uanN4KShsLkljb24se2ljb246XCJFeGNsYW1hdGlvbkNpcmNsZWRGaWxsZWRJY29uXCJ9KSwoMCxvLmpzeCkoYyx7Y2hpbGRyZW46ZX0pXX0pO2NvbnN0IHM9YS5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbWFyZ2luLXRvcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5gLGM9KDAsYS5kZWZhdWx0KShpLlRleHQpYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRIZWxwfTtcbmB9LDM1ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlN0eWxlZElucHV0RmllbGQ9dC5CYXNlSW5wdXQ9dm9pZCAwO2NvbnN0IGE9big1ODkzKSxpPW4oNjY4OSksbD1vKG4oNzUxOCkpLHM9bigxMzM1KSxjPW4oOTUwNyksdT1uKDc3NjkpLGQ9big3MDMwKSxwPW4oMTk0NCk7dC5CYXNlSW5wdXQ9KDAsaS5mb3J3YXJkUmVmKSgoKGUsbik9Pnt2YXJ7Y2xhc3NOYW1lOm8scmVuZGVySW5wdXQ6aSxtZXNzYWdlOmwsbGFiZWw6cyxzdGF0dXM6YyxuYW1lOnUsaWNvbjp2LHR5cGU6Qz1cInRleHRcIixoZWxwZXJUZXh0Om0scGxhY2Vob2xkZXI6d309ZSxiPXIoZSxbXCJjbGFzc05hbWVcIixcInJlbmRlcklucHV0XCIsXCJtZXNzYWdlXCIsXCJsYWJlbFwiLFwic3RhdHVzXCIsXCJuYW1lXCIsXCJpY29uXCIsXCJ0eXBlXCIsXCJoZWxwZXJUZXh0XCIsXCJwbGFjZWhvbGRlclwiXSk7Y29uc3QgeT1cImNoZWNrYm94XCI9PT1DfHxcInJhZGlvXCI9PT1DO3JldHVybigwLGEuanN4cykoZyxPYmplY3QuYXNzaWduKHtmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsYWxpZ25JdGVtczpcImZsZXgtc3RhcnRcIn0se2NoaWxkcmVuOlsoMCxhLmpzeHMpKGYsT2JqZWN0LmFzc2lnbih7aW5saW5lOnl9LHtjaGlsZHJlbjpbISFzJiYoMCxhLmpzeCkocC5MYWJlbCx7aW5saW5lOnksaWNvbjp2LHRleHQ6cyxoZWxwZXJUZXh0Om0saHRtbEZvcjp1fSksISFpJiZpKE9iamVjdC5hc3NpZ24oe25hbWU6dSxzdGF0dXM6Yyx0eXBlOkN9LGIpKSwhaSYmKDAsYS5qc3gpKHQuU3R5bGVkSW5wdXRGaWVsZCxPYmplY3QuYXNzaWduKHtjbGFzc05hbWU6byxuYW1lOnUscGxhY2Vob2xkZXI6dyxzdGF0dXM6Yyx0eXBlOkN9LGIse3JlZjpufSkpXX0pKSxsJiYoXCJjcml0aWNhbFwiPT09Yz8oMCxhLmpzeCkoZC5WYWxpZGF0aW9uRXJyb3Ise2NoaWxkcmVuOmx9KTooMCxhLmpzeCkoaCxPYmplY3QuYXNzaWduKHtzdGF0dXM6Y30se2NoaWxkcmVuOmx9KSkpXX0pKX0pKSx0LkJhc2VJbnB1dC5kaXNwbGF5TmFtZT1cIkJhc2VJbnB1dFwiO2NvbnN0IGY9KDAsbC5kZWZhdWx0KShzLkJveClgXG4gIGFsaWduLWl0ZW1zOiAkeyh7aW5saW5lOmV9KT0+ZT9cImNlbnRlclwiOlwiZmxleC1zdGFydFwifTtcbiAgZmxleC1kaXJlY3Rpb246ICR7KHtpbmxpbmU6ZX0pPT5lP1wicm93LXJldmVyc2VcIjpcImNvbHVtblwifTtcbiAganVzdGlmeS1jb250ZW50OiAkeyh7aW5saW5lOmV9KT0+ZT9cImZsZXgtZW5kXCI6XCJmbGV4LXN0YXJ0XCJ9O1xuICB3aWR0aDogMTAwJTtcbmAsaD0oMCxsLmRlZmF1bHQpKHUuVGV4dClgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxjLmdldFN0YXR1c0NvbG9yKShlLHQsXCJ0ZXh0SGVscFwiKX07XG5gLGc9KDAsbC5kZWZhdWx0KShzLkJveClgXG4gIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG5gO3QuU3R5bGVkSW5wdXRGaWVsZD1sLmRlZmF1bHQuaW5wdXRgXG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsYy5nZXRTdGF0dXNDb2xvcikoZSx0LGMuUGFsZXR0ZS5pbnB1dEJvcmRlcil9O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIGJveC1zaGFkb3c6ICR7KHt0aGVtZTplfSk9PmUuc2hhZG93LmJhc2V9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Q29sb3J9O1xuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5iYXNlfWB9O1xuICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uKTtcbiAgd2lkdGg6IDEwMCU7XG5cbiAgJjpmb2N1cyB7XG4gICAgb3V0bGluZTogMDtcbiAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplLHN0YXR1czp0fSk9PigwLGMuZ2V0U3RhdHVzQ29sb3IpKGUsdCxjLlBhbGV0dGUuaW5wdXRGb2N1c2VkKX07XG4gIH1cblxuICAmOmRpc2FibGVkIHtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICB9XG5cbiAgJjpkaXNhYmxlZDo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBhIGhhY2sgdG8gaW52ZXJ0IHRoZSBjYWxlbmRhciBpY29uLiBUaGlzIG9ubHkgd29ya3MgaW4gZGFyayBtb2RlLlxuICAgKiBVbnRpbCBlaXRoZXIgbGlnaHQgbW9kZSBpcyBhIHRoaW5nIG9yIHdlIGdldCBhIGRhdGV0aW1lIHBpY2tlciBkZXNpZ24sIHRoaXMgd2lsbCBkby5cbiAgICovXG5cbiAgOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3Ige1xuICAgIGZpbHRlcjogaW52ZXJ0KDEpO1xuICB9XG5gfSw4ODc4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigzNTgpLHQpfSwxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksYT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fSxpPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LGw9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGVja2JveD12b2lkIDA7Y29uc3Qgcz1uKDU4OTMpLGM9YShuKDY2ODkpKSx1PWwobig3NTE4KSksZD1uKDg4NzgpLHA9big5NjM0KSxmPW4oOTUwNyk7dC5DaGVja2JveD1jLmZvcndhcmRSZWYoKChlLHQpPT57dmFye3N0YXR1czpufT1lLHI9aShlLFtcInN0YXR1c1wiXSk7cmV0dXJuKDAscy5qc3gpKGQuQmFzZUlucHV0LE9iamVjdC5hc3NpZ24oe30scix7dHlwZTpcImNoZWNrYm94XCIsc3RhdHVzOm4scmVuZGVySW5wdXQ6ZT0+e3ZhciByPWkoZSxbXSk7cmV0dXJuKDAscy5qc3hzKShoLHtjaGlsZHJlbjpbKDAscy5qc3gpKEMsT2JqZWN0LmFzc2lnbih7cmVmOnQsaWQ6ci5uYW1lLHR5cGU6XCJjaGVja2JveFwifSxyKSksKDAscy5qc3gpKGcsT2JqZWN0LmFzc2lnbih7c3RhdHVzOm59LHtjaGlsZHJlbjooMCxzLmpzeCkodix7fSl9KSldfSl9fSkpfSkpLHQuQ2hlY2tib3guZGlzcGxheU5hbWU9XCJDaGVja2JveFwiO2NvbnN0IGg9dS5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gLGc9dS5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgd2lkdGg6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsZi5nZXRTdGF0dXNDb2xvcikoZSx0LFwidGV4dERlZmF1bHRcIil9O1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuYCx2PSgwLHUuZGVmYXVsdCkocC5JY29uKS5hdHRycyh7aWNvbjpcIkNoZWNrSWNvblwiLHNpemU6XCJzbWFsbFwifSlgXG4gIG9wYWNpdHk6IDA7XG5gLEM9dS5kZWZhdWx0LmlucHV0YFxuICBvcGFjaXR5OiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAmOmNoZWNrZWQgKyAke2crXCIgXCIrdn0ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICAmOmhvdmVyICsgJHtnfSB7XG4gICAgYm94LXNoYWRvdzogMCAwIDFweCAxcHggJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gIH1cblxuICAmOmZvY3VzICsgJHtnfSB7XG4gICAgYm94LXNoYWRvdzogMCAwIDFweCAxcHggJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gIH1cblxuICAmOmRpc2FibGVkIHtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICB9XG5cbiAgJjpkaXNhYmxlZCArICR7Z30ge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgfVxuYH0sODA1MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMSksdCl9LDkwMjI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9KSxhPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZyKHQsZSxuKTtyZXR1cm4gbyh0LGUpLHR9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2hlY2tib3hHcm91cD12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGw9YShuKDY2ODkpKSxzPWEobig3NTE4KSksYz1uKDEzMzUpLHU9big3NzY5KSxkPW4oODA1MSkscD1uKDcwMzApO3QuQ2hlY2tib3hHcm91cD0oe2Rpc2FibGVkOmUsZ2FwOnQ9XCJzbWFsbFwiLGhlbHBlclRleHQ6bixsYWJlbDpyLG1lc3NhZ2U6byxjaGlsZHJlbjphLHZhbGlkYXRpb25FcnJvck1lc3NhZ2U6cyx2YWx1ZXM6YyxvbkNoYW5nZTp1fSk9Pntjb25zdFt3LGJdPWwudXNlU3RhdGUobnVsbCE9Yz9jOltdKSx5PWU9Pntjb25zdCB0PWUudGFyZ2V0LnZhbHVlLG49dy5pbmNsdWRlcyh0KT93LmZpbHRlcigoZT0+ZSE9PXQpKTpbLi4udyx0XTtiKG4pLHUmJnUobil9O3JldHVybigwLGkuanN4cykodix7Y2hpbGRyZW46W3ImJigwLGkuanN4cykoZix7Y2hpbGRyZW46WygwLGkuanN4KShoLE9iamVjdC5hc3NpZ24oe3dlaWdodDpcImJvbGRcIn0se2NoaWxkcmVuOnJ9KSksbiYmKDAsaS5qc3gpKGcse2NoaWxkcmVuOm59KV19KSwoMCxpLmpzeCkoQyxPYmplY3QuYXNzaWduKHtnYXA6dH0se2NoaWxkcmVuOmwuQ2hpbGRyZW4ubWFwKGEsKHQ9Pntjb25zdCBuPXQ7cmV0dXJuIG4udHlwZT09PWQuQ2hlY2tib3g/bC5jbG9uZUVsZW1lbnQobix7ZGlzYWJsZWQ6ZSxvbkNoYW5nZTp5LGNoZWNrZWQ6dy5pbmNsdWRlcyhuLnByb3BzLnZhbHVlKX0pOm59KSl9KSksIXcubGVuZ3RoJiZzJiYoMCxpLmpzeCkocC5WYWxpZGF0aW9uRXJyb3Ise2NoaWxkcmVuOnN9KSxvPygwLGkuanN4KShtLE9iamVjdC5hc3NpZ24oe2Rpc2FibGVkOmV9LHtjaGlsZHJlbjpvfSkpOm51bGxdfSl9O2NvbnN0IGY9KDAscy5kZWZhdWx0KShjLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbi1ib3R0b206ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuYCxoPSgwLHMuZGVmYXVsdCkodS5UZXh0KWBcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG5gLGc9KDAscy5kZWZhdWx0KSh1LlRleHQpYFxuICBzaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRIZWxwfTtcbmAsdj0oMCxzLmRlZmF1bHQpKGMuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IG1heC1jb250ZW50O1xuYCxDPSgwLHMuZGVmYXVsdCkoYy5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbmAsbT0oMCxzLmRlZmF1bHQpKHUuVGV4dClgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRQbGFjZWhvbGRlcn07XG4gIG1hcmdpbi10b3A6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG5cbiAgJHsoe2Rpc2FibGVkOmV9KT0+ZSYmcy5jc3NgXG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICAgIGB9XG5gfSw0MTY5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5MDIyKSx0KX0sOTM2ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRhdGVJbnB1dD12b2lkIDA7Y29uc3QgYT1uKDU4OTMpLGk9big2Njg5KSxsPW8obig3NTE4KSkscz1uKDk2MzQpLGM9bigxMzM1KSx1PW4oODg3OCk7dC5EYXRlSW5wdXQ9KDAsaS5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXJ7dmFsdWU6bj1cIlwiLHR5cGU6bz1cImRhdGVcIixleHBhbmRlZDpsPSExLG9uQ2hhbmdlOnN9PWUsYz1yKGUsW1widmFsdWVcIixcInR5cGVcIixcImV4cGFuZGVkXCIsXCJvbkNoYW5nZVwiXSk7Y29uc3RbcCxmXT0oMCxpLnVzZVN0YXRlKShuKTtyZXR1cm4oMCxpLnVzZUVmZmVjdCkoKCgpPT5mKG4pKSxbXSksKDAsYS5qc3gpKHUuQmFzZUlucHV0LE9iamVjdC5hc3NpZ24oe3R5cGU6b30sYyx7cmVuZGVySW5wdXQ6ZT0+e3ZhciBuPXIoZSxbXSk7cmV0dXJuKDAsYS5qc3gpKGQsT2JqZWN0LmFzc2lnbih7cmVmOnQsdHlwZTpvLG9uQ2hhbmdlOmU9Pntjb25zdHt2YWx1ZTp0fT1lLnRhcmdldDt0JiZmKHQpLG51bGw9PXN8fHMoZSl9LHZhbHVlOnAsZXhwYW5kZWQ6bH0sbikpfX0pKX0pKSx0LkRhdGVJbnB1dC5kaXNwbGF5TmFtZT1cIkRhdGVJbnB1dFwiO2NvbnN0IGQ9KDAsaS5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXJ7dHlwZTpuLGV4cGFuZGVkOm8sb25FeHBhbmQ6aX09ZSxsPXIoZSxbXCJ0eXBlXCIsXCJleHBhbmRlZFwiLFwib25FeHBhbmRcIl0pO3JldHVybigwLGEuanN4cykocCx7Y2hpbGRyZW46WygwLGEuanN4KShoLHtjaGlsZHJlbjooMCxhLmpzeCkocy5JY29uLHtpY29uOlwidGltZVwiPT09bj9cIkNsb2NrSWNvblwiOlwiQ2FsZW5kYXJJY29uXCJ9KX0pLCgwLGEuanN4KSh2LE9iamVjdC5hc3NpZ24oe3JlZjp0LHR5cGU6bixvbktleURvd246ZT0+e1wiIFwiPT09ZS5rZXkmJmUucHJldmVudERlZmF1bHQoKX19LGwpKSwoMCxhLmpzeCkoZyxPYmplY3QuYXNzaWduKHtmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsZGlzYWJsZWQ6bC5kaXNhYmxlZCxvbkNsaWNrOml9LHtjaGlsZHJlbjooMCxhLmpzeCkocy5JY29uLHtpY29uOm8/XCJDaGV2cm9uVXBJY29uXCI6XCJDaGV2cm9uRG93bkljb25cIn0pfSkpXX0pfSkpO2QuZGlzcGxheU5hbWU9XCJTdHlsZWREYXRlSW5wdXRcIjtjb25zdCBwPWwuZGVmYXVsdC5kaXZgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICB3aWR0aDogMTAwJTtcbmAsZj0oMCxsLmRlZmF1bHQpKGMuQm94KWBcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAxcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGhlaWdodDogY2FsYygxMDAlIC0gMnB4KTtcbmAsaD0oMCxsLmRlZmF1bHQpKGYpYFxuICBsZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5gLGc9KDAsbC5kZWZhdWx0KShmKWBcbiAgcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICBwb2ludGVyLWV2ZW50czogJHsoe2Rpc2FibGVkOmV9KT0+ZT9cIm5vbmVcIjp2b2lkIDB9O1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIHBhZGRpbmctbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5gLHY9KDAsbC5kZWZhdWx0KSh1LlN0eWxlZElucHV0RmllbGQpYFxuICBhcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIHBhZGRpbmctcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgueHh4bGFyZ2V9O1xuICBwYWRkaW5nLWxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHgueHh4bGFyZ2V9O1xuICA6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gIDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gIH1cbmB9LDk2NTQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDkzNjgpLHQpfSwxOTc4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig2ODg0KSx0KX0sNjg4NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk51bWJlcklucHV0PXQuRGlyZWN0aW9uPXZvaWQgMDtjb25zdCBhPW4oNTg5MyksaT1uKDY2ODkpLGw9byhuKDc1MTgpKSxzPW4oOTYzNCksYz1uKDEzMzUpLHU9big4ODc4KTt2YXIgZDshZnVuY3Rpb24oZSl7ZVtlLlVwPTFdPVwiVXBcIixlW2UuRG93bj0tMV09XCJEb3duXCJ9KGQ9dC5EaXJlY3Rpb258fCh0LkRpcmVjdGlvbj17fSkpLHQuTnVtYmVySW5wdXQ9KDAsaS5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXJ7bWluOm4sbWF4Om8sc3RlcDppPTEsb25UYWtlU3RlcDpsLHZhbHVlOnN9PWUsYz1yKGUsW1wibWluXCIsXCJtYXhcIixcInN0ZXBcIixcIm9uVGFrZVN0ZXBcIixcInZhbHVlXCJdKTtyZXR1cm4oMCxhLmpzeCkodS5CYXNlSW5wdXQsT2JqZWN0LmFzc2lnbih7dHlwZTpcIm51bWJlclwifSxjLHtyZW5kZXJJbnB1dDplPT57dmFyIHU9cihlLFtdKTtyZXR1cm4oMCxhLmpzeCkocCxPYmplY3QuYXNzaWduKHtwcmVwZW5kSWNvbjpjLnByZXBlbmRJY29uLHByZXBlbmRTdHJpbmc6Yy5wcmVwZW5kU3RyaW5nLHJlZjp0LG9uSW5jcmVtZW50OigpPT5sJiZsKGQuVXAsaSksb25EZWNyZW1lbnQ6KCk9PmwmJmwoZC5Eb3duLGkpLG1pbjpuLG1heDpvLHN0ZXA6aX0sdSx7cGxhY2Vob2xkZXI6Yy5wbGFjZWhvbGRlcix2YWx1ZTpzLFwiYXJpYS12YWx1ZW5vd1wiOnMsXCJhcmlhLXZhbHVlbWluXCI6bixcImFyaWEtdmFsdWVtYXhcIjpvfSkpfX0pKX0pKSx0Lk51bWJlcklucHV0LmRpc3BsYXlOYW1lPVwiTnVtYmVySW5wdXRcIjtjb25zdCBwPSgwLGkuZm9yd2FyZFJlZikoKChlLHQpPT57dmFye29uSW5jcmVtZW50Om4sb25EZWNyZW1lbnQ6byxwcmVwZW5kSWNvbjpsLHByZXBlbmRTdHJpbmc6Y309ZSx1PXIoZSxbXCJvbkluY3JlbWVudFwiLFwib25EZWNyZW1lbnRcIixcInByZXBlbmRJY29uXCIsXCJwcmVwZW5kU3RyaW5nXCJdKTtjb25zdCBkPShlLHQpPT57XCJFbnRlclwiIT09ZS5rZXkmJlwiIFwiIT09ZS5rZXl8fChlLnByZXZlbnREZWZhdWx0KCksdD9uKCk6bygpKX0scD0oMCxpLnVzZVJlZikobnVsbCksW20sd109KDAsaS51c2VTdGF0ZSkoMCk7cmV0dXJuKDAsaS51c2VFZmZlY3QpKCgoKT0+e3AuY3VycmVudD93KHAuY3VycmVudC5vZmZzZXRXaWR0aCk6dygwKX0pLFtwLmN1cnJlbnQsbCxjXSksKDAsYS5qc3hzKShmLHtjaGlsZHJlbjpbKCEhbHx8ISFjKSYmKDAsYS5qc3hzKShoLE9iamVjdC5hc3NpZ24oe2hhc0ljb246ISFsLHJlZjpwLGFsaWduSXRlbXM6XCJjZW50ZXJcIixqdXN0aWZ5Q29udGVudDpcImNlbnRlclwifSx7Y2hpbGRyZW46W2wmJigwLGEuanN4KShzLkljb24se2ljb246bCxzaXplOlwiYmFzZVwifSksYyYmIWwmJmNdfSkpLCgwLGEuanN4KShDLE9iamVjdC5hc3NpZ24oe3ByZXBlbmRDb250YWluZXJXaWR0aDptLHJlZjp0fSx1KSksKDAsYS5qc3hzKShnLE9iamVjdC5hc3NpZ24oe2ZsZXhEaXJlY3Rpb246XCJjb2x1bW5cIixkaXNhYmxlZDp1LmRpc2FibGVkfSx7Y2hpbGRyZW46WygwLGEuanN4KSh2LE9iamVjdC5hc3NpZ24oe29uQ2xpY2s6bixvbktleURvd246ZT0+ZChlLCEwKSxkaXNhYmxlZDp1LmRpc2FibGVkLFwiYXJpYS1sYWJlbFwiOlwiSW5jcmVtZW50IHZhbHVlXCIsdGFiSW5kZXg6MH0se2NoaWxkcmVuOigwLGEuanN4KShzLkljb24se2ljb246XCJUcmlhbmdsZVVwSWNvblwifSl9KSksKDAsYS5qc3gpKHYsT2JqZWN0LmFzc2lnbih7b25LZXlEb3duOmU9PmQoZSksb25DbGljazpvLFwiYXJpYS1sYWJlbFwiOlwiRGVjcmVtZW50IHZhbHVlXCIsZGlzYWJsZWQ6dS5kaXNhYmxlZCx0YWJJbmRleDowfSx7Y2hpbGRyZW46KDAsYS5qc3gpKHMuSWNvbix7aWNvbjpcIlRyaWFuZ2xlRG93bkljb25cIn0pfSkpXX0pKV19KX0pKTtwLmRpc3BsYXlOYW1lPVwiU3R5bGVkTnVtYmVySW5wdXRcIjtjb25zdCBmPWwuZGVmYXVsdC5kaXZgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICB3aWR0aDogMTAwJTtcbmAsaD0oMCxsLmRlZmF1bHQpKGMuQm94KWBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAxcHg7XG4gIHRvcDogMXB4O1xuICB3aWR0aDogJHsoe3RoZW1lOmUsaGFzSWNvbjp0fSk9PnQ/ZS5weC54eGxhcmdlOlwiZml0LWNvbnRlbnRcIn07XG4gIHBhZGRpbmc6IDAgJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIGhlaWdodDogY2FsYygxMDAlIC0gMnB4KTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+YCR7ZS5yYWRpdXMuc21hbGx9IDAgMCAke2UucmFkaXVzLnNtYWxsfWB9O1xuYCxnPSgwLGwuZGVmYXVsdCkoYy5Cb3gpYFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAxcHg7XG4gIHRvcDogMXB4O1xuICBnYXA6IDFweDtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpO1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5gMCAke2UucmFkaXVzLnNtYWxsfSAke2UucmFkaXVzLnNtYWxsfSAwYH07XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgcG9pbnRlci1ldmVudHM6ICR7KHtkaXNhYmxlZDplfSk9PmU/XCJub25lXCI6dm9pZCAwfTtcbmAsdj0oMCxsLmRlZmF1bHQpKGMuQm94KWBcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICBwYWRkaW5nOiAwICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGhlaWdodDogNTAlO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICBjb2xvcjogJHsoe2Rpc2FibGVkOmUsdGhlbWU6dH0pPT5lP3QucGFsZXR0ZS50ZXh0SGVscDp0LnBhbGV0dGUudGV4dERlZmF1bHR9O1xuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEZvY3VzZWR9O1xuICB9XG5cbiAgJjphY3RpdmUge1xuICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dENvbG9yfTtcbiAgfVxuYCxDPSgwLGwuZGVmYXVsdCkodS5TdHlsZWRJbnB1dEZpZWxkKWBcbiAgYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xuICBwYWRkaW5nLWxlZnQ6ICR7KHtwcmVwZW5kQ29udGFpbmVyV2lkdGg6ZX0pPT5gJHtlKzEwfXB4YH07XG5cbiAgOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICA6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICB9XG5gfSw1MjE1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigyMjU1KSx0KX0sMjI1NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGE9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5SYWRpb0dyb3VwPXZvaWQgMDtjb25zdCBpPW4oNTg5MyksbD1hKG4oNjY4OSkpLHM9YShuKDc1MTgpKSxjPW4oMTMzNSksdT1uKDc3NjkpLGQ9bigyNTY1KSxwPW4oNzAzMCk7dC5SYWRpb0dyb3VwPSh7ZGlyZWN0aW9uOmU9XCJjb2x1bW5cIixsYWJlbDp0LGRpc2FibGVkOm4sbGFiZWxTaWRlOnI9XCJyaWdodFwiLGdhcDpvPVwic21hbGxcIixtZXNzYWdlOmEsaGVscGVyVGV4dDpzLG5hbWU6YyxjaGlsZHJlbjp1LHZhbGlkYXRpb25FcnJvck1lc3NhZ2U6dyxvbkNoYW5nZTpiLHZhbHVlOnl9KT0+e2NvbnN0W3gsa109bC51c2VTdGF0ZSh5KSxTPWU9PntrKGUudGFyZ2V0LnZhbHVlKSxiJiZiKGUpfTtyZXR1cm4gbC51c2VFZmZlY3QoKCgpPT57ayh5KX0pLFt5XSksKDAsaS5qc3hzKShoLHtjaGlsZHJlbjpbKDAsaS5qc3hzKShmLHtjaGlsZHJlbjpbKDAsaS5qc3gpKG0sT2JqZWN0LmFzc2lnbih7d2VpZ2h0OlwiYm9sZFwifSx7Y2hpbGRyZW46dH0pKSxzJiYoMCxpLmpzeCkoZyx7Y2hpbGRyZW46c30pXX0pLCgwLGkuanN4KSh2LE9iamVjdC5hc3NpZ24oe2RpcmVjdGlvbjplLGxhYmVsU2lkZTpyLGdhcDpvfSx7Y2hpbGRyZW46bC5DaGlsZHJlbi5tYXAodSwoZT0+e2NvbnN0IHQ9ZTtyZXR1cm4gdC50eXBlPT09ZC5SYWRpb0lucHV0P2wuY2xvbmVFbGVtZW50KHQse25hbWU6YyxsYWJlbFNpZGU6cixkaXNhYmxlZDpuLG9uQ2hhbmdlOlMsY2hlY2tlZDp0LnByb3BzLnZhbHVlPT09eH0pOnR9KSl9KSksIXgmJncmJigwLGkuanN4KShwLlZhbGlkYXRpb25FcnJvcix7Y2hpbGRyZW46d30pLGE/KDAsaS5qc3gpKEMsT2JqZWN0LmFzc2lnbih7ZGlzYWJsZWQ6bn0se2NoaWxkcmVuOmF9KSk6bnVsbF19KX07Y29uc3QgZj0oMCxzLmRlZmF1bHQpKGMuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWFyZ2luLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5gLGg9KDAscy5kZWZhdWx0KShjLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiBtYXgtY29udGVudDtcbmAsZz0oMCxzLmRlZmF1bHQpKHUuVGV4dClgXG4gIHNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuYCx2PSgwLHMuZGVmYXVsdCkoYy5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogJHtlPT5lLmRpcmVjdGlvbn07XG4gIGFsaWduLWl0ZW1zOiAke2U9Pntzd2l0Y2goZS5sYWJlbFNpZGUpe2Nhc2VcImxlZnRcIjpyZXR1cm5cImVuZFwiO2Nhc2VcInJpZ2h0XCI6cmV0dXJuXCJzdGFydFwiO2RlZmF1bHQ6cmV0dXJuXCJjZW50ZXJcIn19fTtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xuYCxDPSgwLHMuZGVmYXVsdCkodS5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyfTtcbiAgbWFyZ2luLXRvcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcblxuICAkeyh7ZGlzYWJsZWQ6ZX0pPT5lJiZzLmNzc2BcbiAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gICAgYH1cbmAsbT0oMCxzLmRlZmF1bHQpKHUuVGV4dClgXG4gIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1xuYH0sMzY0MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMjU2NSksdCl9LDI1NjU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9KSxhPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZyKHQsZSxuKTtyZXR1cm4gbyh0LGUpLHR9LGk9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5SYWRpb0lucHV0PXZvaWQgMDtjb25zdCBsPW4oNTg5Mykscz1uKDc3NjkpLGM9YShuKDY2ODkpKSx1PWEobig3NTE4KSksZD1uKDEzMzUpLHA9big5NjM0KTt0LlJhZGlvSW5wdXQ9Yy5mb3J3YXJkUmVmKCgoZSx0KT0+e3ZhcntkaXNhYmxlZDpuLGlkOnIsbGFiZWw6byxsYWJlbFNpZGU6YSxpY29uOnN9PWUsYz1pKGUsW1wiZGlzYWJsZWRcIixcImlkXCIsXCJsYWJlbFwiLFwibGFiZWxTaWRlXCIsXCJpY29uXCJdKTtyZXR1cm4oMCxsLmpzeCkoZix7Y2hpbGRyZW46KDAsbC5qc3hzKSh2LE9iamVjdC5hc3NpZ24oe2FzOlwibGFiZWxcIixodG1sRm9yOnIsbGFiZWxTaWRlOmEsZGlzYWJsZWQ6bn0se2NoaWxkcmVuOlsoMCxsLmpzeCkoZyxPYmplY3QuYXNzaWduKHtyZWY6dCx0eXBlOlwicmFkaW9cIixkaXNhYmxlZDpufSxjKSksKDAsbC5qc3gpKGgse30pLCEhcyYmKDAsbC5qc3gpKHAuSWNvbix7aWNvbjpzfSksb3x8XCJcIl19KSl9KX0pKSx0LlJhZGlvSW5wdXQuZGlzcGxheU5hbWU9XCJSYWRpb0lucHV0XCI7Y29uc3QgZj0oMCx1LmRlZmF1bHQpKGQuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbmAsaD11LmRlZmF1bHQuZGl2YFxuICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuXG4gIGlucHV0OmNoZWNrZWQgfiAmOmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW46IDJweCAxcHggMHB4IDJweDtcbiAgICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gICAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgfVxuXG4gIGlucHV0OmRpc2FibGVkIH4gJiB7XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gIH1cblxuICBpbnB1dDpkaXNhYmxlZCB+ICY6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgfVxuYCxnPXUuZGVmYXVsdC5pbnB1dGBcbiAgb3BhY2l0eTogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICB9XG5gLHY9KDAsdS5kZWZhdWx0KShzLlRleHQpYFxuICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiAkeyh7bGFiZWxTaWRlOmV9KT0+e3N3aXRjaChlfHxcInJpZ2h0XCIpe2Nhc2VcImxlZnRcIjpyZXR1cm5cInJvdy1yZXZlcnNlXCI7Y2FzZVwicmlnaHRcIjpyZXR1cm5cInJvd1wiO2Nhc2VcInRvcFwiOnJldHVyblwiY29sdW1uLXJldmVyc2VcIjtjYXNlXCJib3R0b21cIjpyZXR1cm5cImNvbHVtblwifX19O1xuICBnYXA6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgJHsoe2Rpc2FibGVkOmV9KT0+ZT91LmNzc2BcbiAgICAgICAgICAmIHtcbiAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICAgICAgICBgOm51bGx9XG5gfSw4NTEwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig3MDY4KSx0KX0sNzA2ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5SYXdJbnB1dD12b2lkIDA7Y29uc3Qgbz1yKG4oNzUxOCkpO3QuUmF3SW5wdXQ9by5kZWZhdWx0LmlucHV0YGAsdC5SYXdJbnB1dC5kaXNwbGF5TmFtZT1cIlJhd0lucHV0XCJ9LDMxMTk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDc5OSksdCl9LDc5OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5UZXh0QXJlYT12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9big2Njg5KSxpPXIobig3NTE4KSksbD1uKDk1MDcpLHM9big5NTA3KSxjPW4oMTMzNSksdT1uKDE5NDQpO3QuVGV4dEFyZWE9KDAsYS5mb3J3YXJkUmVmKSgoKGUsdCk9PigwLG8uanN4KShwLE9iamVjdC5hc3NpZ24oe2ZsZXhEaXJlY3Rpb246XCJjb2x1bW5cIixhbGlnbkl0ZW1zOlwiZmxleC1zdGFydFwifSx7Y2hpbGRyZW46KDAsby5qc3hzKShkLHtjaGlsZHJlbjpbISFlLmxhYmVsJiYoMCxvLmpzeCkodS5MYWJlbCx7dGV4dDplLmxhYmVsLGh0bWxGb3I6ZS5uYW1lLGhlbHBlclRleHQ6ZS5oZWxwZXJUZXh0fSksKDAsby5qc3gpKGYsT2JqZWN0LmFzc2lnbih7cmVmOnR9LGUse29uQ2hhbmdlOmUub25DaGFuZ2V9KSldfSl9KSkpKSx0LlRleHRBcmVhLmRpc3BsYXlOYW1lPVwiVGV4dEFyZWFcIjtjb25zdCBkPSgwLGkuZGVmYXVsdCkoYy5Cb3gpYFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICB3aWR0aDogMTAwJTtcbmAscD0oMCxpLmRlZmF1bHQpKGMuQm94KWBcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbmAsZj1pLmRlZmF1bHQudGV4dGFyZWFgXG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEJvcmRlcn07XG4gIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAscy5nZXRTdGF0dXNDb2xvcikoZSx0LFwiaW5wdXRCb3JkZXJcIil9O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIHdpZHRoOiAxMDAlO1xuICByZXNpemU6IG5vbmU7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gICR7bC5NaXhpbnMuc2Nyb2xsYmFyLnNtYWxsfTtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dENvbG9yfTtcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LnRleHR9O1xuICBmb250LXdlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5mb250V2VpZ2h0Lm5vcm1hbH07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9IDBweCAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAscy5nZXRTdGF0dXNDb2xvcikoZSx0LFwiaW5wdXRGb2N1c2VkXCIpfTtcbiAgfVxuXG4gICY6ZGlzYWJsZWQ6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICB9XG5gfSw4OTUxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigyMzUyKSx0KX0sMjM1MjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5UZXh0SW5wdXQ9dm9pZCAwO2NvbnN0IHI9big1ODkzKSxvPW4oNjY4OSksYT1uKDg4NzgpO3QuVGV4dElucHV0PSgwLG8uZm9yd2FyZFJlZikoKChlLHQpPT4oMCxyLmpzeCkoYS5CYXNlSW5wdXQsT2JqZWN0LmFzc2lnbih7cmVmOnQsdHlwZTpcInRleHRcIn0sZSkpKSksdC5UZXh0SW5wdXQuZGlzcGxheU5hbWU9XCJUZXh0SW5wdXRcIn0sMzMzOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Cb3g9dm9pZCAwO2NvbnN0IG89cihuKDc1MTgpKSxhPW4oODczMiksaT1uKDU0NTkpLGw9ezE6aS5QYWxldHRlLmJhY2tncm91bmQxLDI6aS5QYWxldHRlLmJhY2tncm91bmQyLDM6aS5QYWxldHRlLmJhY2tncm91bmQzLDQ6aS5QYWxldHRlLmJhY2tncm91bmQ0LDU6aS5QYWxldHRlLmJhY2tncm91bmQ1LDY6aS5QYWxldHRlLmJhY2tncm91bmQ2fTt0LkJveD1vLmRlZmF1bHQuZGl2YFxuICAvKipcbiAgICogU3R5bGUgU2Nyb2xsYmFyIGZvciBCb3hlcyB3aXRoIG92ZXJmbG93XG4gICAqL1xuICAke2EuTWl4aW5zLnNjcm9sbGJhci5iYXNlfVxuXG4gIGRpc3BsYXk6ICR7KHtkaXNwbGF5OmU9XCJmbGV4XCJ9KT0+ZX07XG4gIGZsZXgtZGlyZWN0aW9uOiAkeyh7ZmxleERpcmVjdGlvbjplPVwicm93XCJ9KT0+ZX07XG4gIGZsZXgtd3JhcDogJHsoe2ZsZXhXcmFwOmU9XCJub3dyYXBcIn0pPT5lfTtcbiAgYWxpZ24taXRlbXM6ICR7KHthbGlnbkl0ZW1zOmV9KT0+ZX07XG4gIGp1c3RpZnktY29udGVudDogJHsoe2p1c3RpZnlDb250ZW50OmV9KT0+ZX07XG4gIGdhcDogJHsoe3RoZW1lOmUsZ2FwOnR9KT0+dCYmZS5weFt0XX07XG4gIGFsaWduLXNlbGY6ICR7KHthbGlnblNlbGY6ZX0pPT5lfTtcbiAgZmxleC1iYXNpczogJHsoe2ZsZXhCYXNpczplfSk9PmV9O1xuICBmbGV4LWdyb3c6ICR7KHtmbGV4R3JvdzplfSk9PmV9O1xuICBmbGV4LXNocmluazogJHsoe2ZsZXhTaHJpbms6ZX0pPT5lfTtcbiAgb3JkZXI6ICR7KHtvcmRlcjplfSk9PmV9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZSxwYWRkaW5nOnR9KT0+dCYmZS5weFt0XX07XG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplLGJhY2tncm91bmQ6dH0pPT50JiZlLnBhbGV0dGVbbFt0XV19O1xuYCx0LkJveC5kaXNwbGF5TmFtZT1cIkJveFwifSwxMzM1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigzMzM5KSx0KX0sNjcxMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRlZmluaXRpb25MaXN0PXZvaWQgMDtjb25zdCBhPW4oNTg5MyksaT1vKG4oNzUxOCkpO3QuRGVmaW5pdGlvbkxpc3Q9ZT0+e3ZhcntkZWZpbml0aW9uczp0fT1lLG49cihlLFtcImRlZmluaXRpb25zXCJdKTtyZXR1cm4oMCxhLmpzeCkocyxPYmplY3QuYXNzaWduKHt9LG4se3JvbGU6XCJsaXN0XCJ9LHtjaGlsZHJlbjooQXJyYXkuaXNBcnJheSh0KT90OkFycmF5LmZyb20odCkpLm1hcCgoKFtlLHRdLG4pPT4oMCxhLmpzeHMpKGwsT2JqZWN0LmFzc2lnbih7cm9sZTpcImxpc3RpdGVtXCJ9LHtjaGlsZHJlbjpbKDAsYS5qc3gpKGMsT2JqZWN0LmFzc2lnbih7aWQ6YHRlcm0ke259YH0se2NoaWxkcmVuOmV9KSksKDAsYS5qc3gpKHUsT2JqZWN0LmFzc2lnbih7XCJhcmlhLWxhYmVsbGVkYnlcIjpgdGVybSR7bn1gfSx7Y2hpbGRyZW46dH0pKV19KSxgJHtlfS0ke259YCkpKX0pKX07Y29uc3QgbD1pLmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAzZnI7XG5gLHM9aS5kZWZhdWx0LmRsYFxuICBnYXA6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC5sYXJnZX1gfTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gJHtlLnB4LmJhc2V9YH07XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG5gLGM9aS5kZWZhdWx0LmR0YFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRIZWxwfTtcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLnNtYWxsfTtcbiAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ub3JtYWx9O1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgcGFkZGluZy1ib3R0b206ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuYCx1PWkuZGVmYXVsdC5kZGBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5zbWFsbH07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBwYWRkaW5nLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5gfSw1Mzc3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig2NzEwKSx0KX0sOTQzMTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5HbG9iYWxTdHlsZXM9dm9pZCAwO2NvbnN0IHI9big3NTE4KSxvPW4oNTc1KSxhPW4oOTUwNyksaT1uKDYyMTgpO3QuR2xvYmFsU3R5bGVzPXIuY3JlYXRlR2xvYmFsU3R5bGVgXG4gIC8qKiAtPiBEZWZpbmUgR2xvYmFsIENTUyBWYXJzICovXG4gIDpyb290IHtcbiAgICAtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbjogJHsoe3RoZW1lOmV9KT0+ZS50cmFuc2l0aW9uLmJhc2V9O1xuXG4gICAgZm9udC1mYW1pbHk6ICR7KHt0aGVtZTplfSk9PmUuZm9udEZhbWlseX07XG4gICAgLyogTWFwIG92ZXIgdGhlIHBhbGV0dGUga2V5cyBhbmQgY3JlYXRlIHZhcmlhYmxlcyBvdXQgb2YgdGhlbSAqL1xuICAgICR7by5nZXRSb290Q3NzVmFyc31cbiAgfVxuXG4gIC8qKiAtPiBAZm9udC1mYWNlIERlY2xhcmF0aW9uICovXG4gICR7KDAsYS5jcmVhdGVGb250RmFjZUNzcykoaS5Gb250cyl9XG5cbiAgLyoqIC0+IE1pY3JvIFJlc2V0ICovXG4gICoge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgLyoqXG4gICAgICogUHJldmVudCBicm93c2VyIGF1dG8td2VpZ2h0aW5nXG4gICAgICogQGxpbmsgaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9hbG1hbmFjL3Byb3BlcnRpZXMvZi9mb250LXN5bnRoZXNpcy9cbiAgICAgKi9cbiAgICBmb250LXN5bnRoZXNpczogbm9uZTtcbiAgfVxuXG4gIC8qKiAtPiBBcHBseSBHbG9iYWwgU3R5bGVzICovXG5cbiAgYm9keSxcbiAgOnJvb3Qge1xuICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMX07XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgZm9udC1mYW1pbHk6ICR7KHt0aGVtZTplfSk9PmUuZm9udEZhbWlseX07XG4gICAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ub3JtYWx9O1xuICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LnRleHR9O1xuICB9XG5cbiAgOjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyfTtcbiAgfVxuXG4gIC8qKiAtPiBSZWR1Y2VkIE1vdGlvbiAoQWNjZXNzaWJpbGl0eSkgKi9cbiAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uKSB7XG4gICAgOnJvb3Qge1xuICAgICAgLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb246ICR7KHt0aGVtZTplfSk9PmUudHJhbnNpdGlvbi5ub25lfTtcbiAgICB9XG4gIH1cbmB9LDEwNjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDk0MzEpLHQpfSwxMzEwOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LDk1MDc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDk2MzgpLHQpLG8obig0MjApLHQpfSw5OTg0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmdldE1vc3RSZWFkYWJsZT10LmRhcmtlbkNvbG9yPXQubGlnaHRlbkNvbG9yPXZvaWQgMDtjb25zdCBvPXIobig4MjA3KSk7dC5saWdodGVuQ29sb3I9KGUsdCk9PmEoZSxcImxpZ2h0ZW5cIix0KSx0LmRhcmtlbkNvbG9yPShlLHQpPT5hKGUsXCJkYXJrZW5cIix0KTtjb25zdCBhPShlLHQsbik9PntpZihuJiYobjwwfHxuPjEwMCkpdGhyb3cgbmV3IEVycm9yKGAke259IG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxMDBgKTtyZXR1cm4oMCxvLmRlZmF1bHQpKGUpW3RdKG4pLnRvU3RyaW5nKCl9O3QuZ2V0TW9zdFJlYWRhYmxlPShlLHQpPT5vLmRlZmF1bHQubW9zdFJlYWRhYmxlKGUsdCkudG9IZXhTdHJpbmcoKX0sMzQ3MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGE9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5JY29uU2l6ZT10Lkljb25TZXQ9dC5UcmFuc2l0aW9uPXQuTGluZUhlaWdodD10LkZvbnRXZWlnaHQ9dC5Gb250U2l6ZT10LkZvbnRGYW1pbHk9dC5TaGFkb3c9dC5SYWRpdXM9dC5Vbml0UHg9dC5Vbml0PXQuU2l6ZU5hbWU9dC5TaXplPXQuQ29sb3I9dm9pZCAwO2NvbnN0IGk9YShuKDE1MjEpKSxsPWEobigyNzcyKSk7dC5Db2xvcj17d2hpdGU6XCIjRkZGRkZGXCIsbGlnaHRHcmF5MTpcIiNGQUZCRkVcIixsaWdodEdyYXkyOlwiI0YzRjVGOFwiLGxpZ2h0R3JheTM6XCIjRUNFRUYxXCIsbGlnaHRHcmF5NDpcIiNERERGRTRcIixsaWdodEdyYXk1OlwiI0M5Q0JEMlwiLG5ldXRyYWxHcmF5OlwiIzdEODA4QVwiLG5ldXRyYWxHcmF5ODA6XCJyZ2JhKDEyNSwxMjgsMTM4LDAuOClcIixzaWx2ZXJHcmF5OlwiI0MwQzFDMlwiLGRhcmtHcmF5MTpcIiM1MzU2NUZcIixkYXJrR3JheTI6XCIjMzgzQTQwXCIsZGFya0dyYXkzOlwiIzJGMzEzNlwiLGRhcmtHcmF5NDpcIiMyNDI2MkJcIixkYXJrR3JheTU6XCIjMUUxRjIzXCIsZGFya0dyYXk2OlwiIzExMTIxNFwiLG9wZW5GaW5EYXJrZXN0OlwiIzNEMzlDRFwiLG9wZW5GaW5EYXJrZXI6XCIjNDY0MkUwXCIsb3BlbkZpbjpcIiM1MDRDRkZcIixvcGVuRmluTGlnaHQ6XCIjNTI1NEZCXCIsb3BlbkZpbkxpZ2h0ZXI6XCIjNUM1RUZFXCIsb3BlbkZpbkxpZ2h0ZXN0OlwiIzY4NjRGRlwiLGZ1bmN0aW9uYWwxOlwiIzIwNzczNVwiLGZ1bmN0aW9uYWwyOlwiIzQ2QzhGMVwiLGZ1bmN0aW9uYWwzOlwiIzBBNzZEM1wiLGZ1bmN0aW9uYWw0OlwiIzZDQURFNVwiLGZ1bmN0aW9uYWw1OlwiIzBBNzZEM1wiLGZ1bmN0aW9uYWw2OlwiIzg4MkJGRVwiLGZ1bmN0aW9uYWw3OlwiI0YzMTgxOFwiLGZ1bmN0aW9uYWw4OlwiI0M5MzQwMFwiLGZ1bmN0aW9uYWw5OlwiI0ZGNUU2MFwiLGZ1bmN0aW9uYWwxMDpcIiNGNDhGMDBcIixwdXJwbGU6XCIjOEM2MUZGXCIsbGlnaHRibHVlOlwiIzM2QzNGRVwiLGFxdWE6XCIjMDBDQzg4XCIseWVsbG93OlwiI0ZGRUIwMFwiLHNhbG1vbjpcIiNGRjhDNENcIixwaW5rOlwiI0ZGNUU2MFwiLGxpZ2h0cGluazpcIiNGRjhGQjhcIix3aGl0ZTAwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjApXCIsd2hpdGUxMDpcInJnYmEoMjU1LDI1NSwyNTUsMC4xKVwiLHdoaXRlMjA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMilcIix3aGl0ZTMwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjMpXCIsd2hpdGU0MDpcInJnYmEoMjU1LDI1NSwyNTUsMC40KVwiLHdoaXRlNTA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNSlcIix3aGl0ZTYwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjYpXCIsd2hpdGU3MDpcInJnYmEoMjU1LDI1NSwyNTUsMC43KVwiLHdoaXRlODA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuOClcIix3aGl0ZTkwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjkpXCIsYmxhY2swMDpcInJnYmEoMCwwLDAsMC4wKVwiLGJsYWNrMTA6XCJyZ2JhKDAsMCwwLDAuMSlcIixibGFjazIwOlwicmdiYSgwLDAsMCwwLjIpXCIsYmxhY2szMDpcInJnYmEoMCwwLDAsMC4zKVwiLGJsYWNrNDA6XCJyZ2JhKDAsMCwwLDAuNClcIixibGFjazUwOlwicmdiYSgwLDAsMCwwLjUpXCIsYmxhY2s2MDpcInJnYmEoMCwwLDAsMC42KVwiLGJsYWNrNzA6XCJyZ2JhKDAsMCwwLDAuNylcIixibGFjazgwOlwicmdiYSgwLDAsMCwwLjgpXCIsYmxhY2s5MDpcInJnYmEoMCwwLDAsMC45KVwiLHRyYW5zcGFyZW50OlwidHJhbnNwYXJlbnRcIn0sdC5TaXplPXt4c21hbGw6XCJ4c21hbGxcIixzbWFsbDpcInNtYWxsXCIsYmFzZTpcImJhc2VcIixsYXJnZTpcImxhcmdlXCIseGxhcmdlOlwieGxhcmdlXCIseHhsYXJnZTpcInh4bGFyZ2VcIix4eHhsYXJnZTpcInh4eGxhcmdlXCIseHh4eGxhcmdlOlwieHh4eGxhcmdlXCJ9LHQuU2l6ZU5hbWU9e1t0LlNpemUueHNtYWxsXTpcIkV4dHJhIFNtYWxsXCIsW3QuU2l6ZS5zbWFsbF06XCJTbWFsbFwiLFt0LlNpemUuYmFzZV06XCJCYXNlXCIsW3QuU2l6ZS5sYXJnZV06XCJMYXJnZVwiLFt0LlNpemUueGxhcmdlXTpcIkV4dHJhIExhcmdlXCIsW3QuU2l6ZS54eGxhcmdlXTpcIjJYIExhcmdlXCIsW3QuU2l6ZS54eHhsYXJnZV06XCIzWCBMYXJnZVwiLFt0LlNpemUueHh4eGxhcmdlXTpcIjRYIExhcmdlXCJ9LHQuVW5pdD17W3QuU2l6ZS54c21hbGxdOjQsW3QuU2l6ZS5zbWFsbF06OCxbdC5TaXplLmJhc2VdOjEyLFt0LlNpemUubGFyZ2VdOjE2LFt0LlNpemUueGxhcmdlXToyMCxbdC5TaXplLnh4bGFyZ2VdOjI0LFt0LlNpemUueHh4bGFyZ2VdOjMyLFt0LlNpemUueHh4eGxhcmdlXTo0OH0sdC5Vbml0UHg9e1t0LlNpemUueHNtYWxsXTpcIjRweFwiLFt0LlNpemUuc21hbGxdOlwiOHB4XCIsW3QuU2l6ZS5iYXNlXTpcIjEycHhcIixbdC5TaXplLmxhcmdlXTpcIjE2cHhcIixbdC5TaXplLnhsYXJnZV06XCIyMHB4XCIsW3QuU2l6ZS54eGxhcmdlXTpcIjI0cHhcIixbdC5TaXplLnh4eGxhcmdlXTpcIjMycHhcIixbdC5TaXplLnh4eHhsYXJnZV06XCI0OHB4XCJ9LHQuUmFkaXVzPXtbdC5TaXplLnhzbWFsbF06XCIycHhcIixbdC5TaXplLnNtYWxsXTpcIjRweFwiLFt0LlNpemUuYmFzZV06XCI4cHhcIixbdC5TaXplLmxhcmdlXTpcIjI0cHhcIixwaWxsOlwiMTAwdmhcIixyb3VuZDpcIjUwJVwiLG5vbmU6XCIwXCJ9LHQuU2hhZG93PXtbdC5TaXplLmJhc2VdOlwiMCA0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yNSlcIn0sdC5Gb250RmFtaWx5PVtcIkludGVyXCIsXCJzeXN0ZW0tdWlcIixcIkJsaW5rTWFjU3lzdGVtRm9udFwiLFwiU2Vnb2UgVUlcIixcIlJvYm90b1wiLFwiT3h5Z2VuLVNhbnNcIixcIlVidW50dVwiLFwiQ2FudGFyZWxsXCIsXCJIZWx2ZXRpY2EgTmV1ZVwiLFwic2Fucy1zZXJpZlwiXS5qb2luKFwiLFwiKSx0LkZvbnRTaXplPXtbdC5TaXplLnhzbWFsbF06XCI4cHhcIixbdC5TaXplLnNtYWxsXTpcIjEwcHhcIixbdC5TaXplLmJhc2VdOlwiMTJweFwiLFt0LlNpemUubGFyZ2VdOlwiMTRweFwiLFt0LlNpemUueGxhcmdlXTpcIjE2cHhcIixbdC5TaXplLnh4bGFyZ2VdOlwiMThweFwiLFt0LlNpemUueHh4bGFyZ2VdOlwiMjBweFwiLFt0LlNpemUueHh4eGxhcmdlXTpcIjQwcHhcIn0sdC5Gb250V2VpZ2h0PXtub3JtYWw6NDAwLGJvbGQ6NjAwfSx0LkxpbmVIZWlnaHQ9e3VpOjEsaGVhZGluZzoxLjIsdGV4dDoxLjV9LHQuVHJhbnNpdGlvbj17YmFzZTpcIjIwMG1zIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpXCIsbm9uZTpcIjBtc1wifSx0Lkljb25TZXQ9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLGwpLHQuSWNvblNpemU9e1t0LlNpemUueHNtYWxsXTp0LlVuaXRQeC5zbWFsbCxbdC5TaXplLnNtYWxsXTp0LlVuaXRQeC5iYXNlLFt0LlNpemUuYmFzZV06XCIxNXB4XCIsW3QuU2l6ZS5sYXJnZV06dC5Vbml0UHgueGxhcmdlLFt0LlNpemUueGxhcmdlXTp0LlVuaXRQeC54eGxhcmdlLFt0LlNpemUueHhsYXJnZV06dC5Vbml0UHgueHh4bGFyZ2UsW3QuU2l6ZS54eHhsYXJnZV06dC5Vbml0UHgueHh4eGxhcmdlfX0sOTI3MjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5jcmVhdGVGb250RmFjZUNzcz12b2lkIDA7Y29uc3Qgcj1uKDc1MTgpLG89bigzNDcxKTt0LmNyZWF0ZUZvbnRGYWNlQ3NzPWZ1bmN0aW9uKGUpe3JldHVybiByLmNzc2BcbiAgICAke2UucmVndWxhciYmci5jc3NgXG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gICAgICAgIHNyYzogdXJsKCR7ZS5yZWd1bGFyfSkgZm9ybWF0KCd3b2ZmMicpO1xuICAgICAgICBmb250LXdlaWdodDogJHtvLkZvbnRXZWlnaHQubm9ybWFsfTtcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICBmb250LWRpc3BsYXk6IGZhbGxiYWNrO1xuICAgICAgfVxuICAgIGB9XG4gICAgJHtlLml0YWxpYyYmci5jc3NgXG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gICAgICAgIHNyYzogdXJsKCR7ZS5pdGFsaWN9KSBmb3JtYXQoJ3dvZmYyJyk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAke28uRm9udFdlaWdodC5ub3JtYWx9O1xuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgIGZvbnQtZGlzcGxheTogZmFsbGJhY2s7XG4gICAgICB9XG4gICAgYH1cbiAgICAke2Uuc2VtaUJvbGQmJnIuY3NzYFxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICAgICAgICBzcmM6IHVybCgke2Uuc2VtaUJvbGR9KSBmb3JtYXQoJ3dvZmYyJyk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAke28uRm9udFdlaWdodC5ib2xkfTtcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICBmb250LWRpc3BsYXk6IGZhbGxiYWNrO1xuICAgICAgfVxuICAgIGB9XG4gICAgJHtlLnNlbWlCb2xkSXRhbGljJiZyLmNzc2BcbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgICAgICAgc3JjOiB1cmwoJHtlLnNlbWlCb2xkSXRhbGljfSkgZm9ybWF0KCd3b2ZmMicpO1xuICAgICAgICBmb250LXdlaWdodDogJHtvLkZvbnRXZWlnaHQuYm9sZH07XG4gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgICAgZm9udC1kaXNwbGF5OiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICBgfVxuICBgfX0sNjcxNDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5jcmVhdGVUaGVtZT12b2lkIDA7Y29uc3Qgcj1uKDM0NzEpLG89big5OTg0KSxhPW4oNTQ1OSksaT17Zm9udEZhbWlseTpyLkZvbnRGYW1pbHksZm9udFNpemU6ci5Gb250U2l6ZSxmb250V2VpZ2h0OnIuRm9udFdlaWdodCxsaW5lSGVpZ2h0OnIuTGluZUhlaWdodCxpY29uU2l6ZTpyLkljb25TaXplLHJhZGl1czpyLlJhZGl1cyxzaGFkb3c6ci5TaGFkb3csdHJhbnNpdGlvbjpyLlRyYW5zaXRpb24sdW5pdDpyLlVuaXQscHg6ci5Vbml0UHh9LGw9KGUsdCk9Pih7W2Ake2V9QWN0aXZlYF06KDAsby5kYXJrZW5Db2xvcikodCwyKSxbYCR7ZX1Ib3ZlcmBdOigwLG8ubGlnaHRlbkNvbG9yKSh0LDUpLFtgJHtlfUZvY3VzZWRgXTooMCxvLmdldE1vc3RSZWFkYWJsZSkodCxbci5Db2xvci53aGl0ZSxyLkNvbG9yLmRhcmtHcmF5NV0pLFtgJHtlfVRleHRgXTooMCxvLmdldE1vc3RSZWFkYWJsZSkodCxbci5Db2xvci53aGl0ZSxyLkNvbG9yLmRhcmtHcmF5NV0pfSk7dC5jcmVhdGVUaGVtZT1lPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkse3BhbGV0dGU6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSksbChhLlBhbGV0dGUuYnJhbmRQcmltYXJ5LGUuYnJhbmRQcmltYXJ5KSksbChhLlBhbGV0dGUuYnJhbmRTZWNvbmRhcnksZS5icmFuZFNlY29uZGFyeSkpfSl9LDU3NTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TVVBQT1JURURfTEFOR1VBR0VTPXQuZ2V0U3RhdHVzQ29sb3I9dC5nZXRSb290Q3NzVmFycz10LmdldFZhcmlhbnRDU1M9dm9pZCAwO2NvbnN0IHI9big1NDU5KTt0LmdldFZhcmlhbnRDU1M9KGUsdCk9Pm49PmVbdF1bblt0XV0sdC5nZXRSb290Q3NzVmFycz0oe3RoZW1lOmV9KT0+T2JqZWN0LmtleXMoci5QYWxldHRlKS5tYXAoKHQ9PmAtLW9wZW5maW4tdWktJHt0fTogJHtlLnBhbGV0dGVbdF19O2ApKS5qb2luKFwiXFxuXCIpLHQuZ2V0U3RhdHVzQ29sb3I9KGUsdCxuKT0+e3N3aXRjaCh0KXtjYXNlXCJhY3RpdmVcIjpyZXR1cm4gZS5wYWxldHRlLnN0YXR1c0FjdGl2ZTtjYXNlXCJjcml0aWNhbFwiOnJldHVybiBlLnBhbGV0dGUuc3RhdHVzQ3JpdGljYWw7Y2FzZVwid2FybmluZ1wiOnJldHVybiBlLnBhbGV0dGUuc3RhdHVzV2FybmluZztjYXNlXCJzdWNjZXNzXCI6cmV0dXJuIGUucGFsZXR0ZS5zdGF0dXNTdWNjZXNzO2RlZmF1bHQ6cmV0dXJuIG4/ZS5wYWxldHRlW25dOlwiaW5oZXJpdFwifX0sdC5TVVBQT1JURURfTEFOR1VBR0VTPVtcImVuLVVTXCIsXCJqYS1KUFwiLFwiemgtQ05cIixcImtvLUtSXCIsXCJydS1SVVwiLFwiZGUtREVcIixcInpoLUhhbnRcIl19LDk2Mzg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDk5ODQpLHQpLG8obigzNDcxKSx0KSxvKG4oOTI3MiksdCksbyhuKDY3MTQpLHQpLG8obig1NzUpLHQpLG8obigxNDQxKSx0KSxvKG4oODczMiksdCksbyhuKDU0NTkpLHQpLG8obig1MzE3KSx0KX0sMTQ0MTooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSw4NzMyOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk1peGlucz12b2lkIDA7Y29uc3Qgcj1uKDM0NzEpLG89big3NTE4KSxhPW8uY3NzYFxuICB1c2VyLXNlbGVjdDogbm9uZTtcbmAsaT1vLmNzc2BcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG5gLGw9by5jc3NgXG4gICY6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICB3aWR0aDogdmFyKC0tc2Nyb2xsYmFyU2l6ZSwgJHtyLlVuaXRQeC54c21hbGx9KTtcbiAgICBoZWlnaHQ6IHZhcigtLXNjcm9sbGJhclNpemUsICR7ci5Vbml0UHgueHNtYWxsfSk7XG4gIH1cblxuICAmOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gICAgYmFja2dyb3VuZDogJHtyLkNvbG9yLm5ldXRyYWxHcmF5ODB9O1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXNjcm9sbGJhclNpemUsICR7ci5Vbml0UHgueHNtYWxsfSk7XG4gICAgb3BhY2l0eTogMC44O1xuICB9XG5cbiAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgIGJhY2tncm91bmQ6ICR7ci5Db2xvci53aGl0ZTgwfTtcbiAgICB3aWR0aDogdmFyKC0tc2Nyb2xsYmFyU2l6ZSwgJHtyLlVuaXRQeC54c21hbGx9KTtcbiAgICBoZWlnaHQ6IHZhcigtLXNjcm9sbGJhclNpemUsICR7ci5Vbml0UHgueHNtYWxsfSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2Nyb2xsYmFyU2l6ZSwgJHtyLlVuaXRQeC54c21hbGx9KTtcbiAgICBvcGFjaXR5OiAwLjg7XG4gIH1cbmAscz1vLmNzc2BcbiAgLS1zY3JvbGxiYXJTaXplOiAycHg7XG4gICR7bH07XG5gLGM9by5jc3NgXG4gIC13ZWJraXQtYXBwLXJlZ2lvbjogZHJhZztcbmAsdT1vLmNzc2BcbiAgLXdlYmtpdC1hcHAtcmVnaW9uOiBuby1kcmFnO1xuYDt0Lk1peGlucz17bm9TZWxlY3Q6YSx0ZXh0T3ZlcmZsb3c6aSxzY3JvbGxiYXI6e1tyLlNpemUuYmFzZV06bCxbci5TaXplLnNtYWxsXTpzfSxhcHBSZWdpb246e2RyYWc6Yyxub0RyYWc6dX19fSw1NDU5OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5QYWxldHRlPXZvaWQgMCx0LlBhbGV0dGU9e2JhY2tncm91bmQxOlwiYmFja2dyb3VuZDFcIixiYWNrZ3JvdW5kMjpcImJhY2tncm91bmQyXCIsYmFja2dyb3VuZDM6XCJiYWNrZ3JvdW5kM1wiLGJhY2tncm91bmQ0OlwiYmFja2dyb3VuZDRcIixiYWNrZ3JvdW5kNTpcImJhY2tncm91bmQ1XCIsYmFja2dyb3VuZDY6XCJiYWNrZ3JvdW5kNlwiLGJyYW5kUHJpbWFyeTpcImJyYW5kUHJpbWFyeVwiLGJyYW5kU2Vjb25kYXJ5OlwiYnJhbmRTZWNvbmRhcnlcIixicmFuZFByaW1hcnlBY3RpdmU6XCJicmFuZFByaW1hcnlBY3RpdmVcIixicmFuZFByaW1hcnlIb3ZlcjpcImJyYW5kUHJpbWFyeUhvdmVyXCIsYnJhbmRQcmltYXJ5Rm9jdXNlZDpcImJyYW5kUHJpbWFyeUZvY3VzZWRcIixicmFuZFByaW1hcnlUZXh0OlwiYnJhbmRQcmltYXJ5VGV4dFwiLGJyYW5kU2Vjb25kYXJ5QWN0aXZlOlwiYnJhbmRTZWNvbmRhcnlBY3RpdmVcIixicmFuZFNlY29uZGFyeUhvdmVyOlwiYnJhbmRTZWNvbmRhcnlIb3ZlclwiLGJyYW5kU2Vjb25kYXJ5Rm9jdXNlZDpcImJyYW5kU2Vjb25kYXJ5Rm9jdXNlZFwiLGJyYW5kU2Vjb25kYXJ5VGV4dDpcImJyYW5kU2Vjb25kYXJ5VGV4dFwiLGlucHV0QmFja2dyb3VuZDpcImlucHV0QmFja2dyb3VuZFwiLGlucHV0Q29sb3I6XCJpbnB1dENvbG9yXCIsaW5wdXRQbGFjZWhvbGRlcjpcImlucHV0UGxhY2Vob2xkZXJcIixpbnB1dERpc2FibGVkOlwiaW5wdXREaXNhYmxlZFwiLGlucHV0Rm9jdXNlZDpcImlucHV0Rm9jdXNlZFwiLGlucHV0Qm9yZGVyOlwiaW5wdXRCb3JkZXJcIixzdGF0dXNTdWNjZXNzOlwic3RhdHVzU3VjY2Vzc1wiLHN0YXR1c1dhcm5pbmc6XCJzdGF0dXNXYXJuaW5nXCIsc3RhdHVzQ3JpdGljYWw6XCJzdGF0dXNDcml0aWNhbFwiLHN0YXR1c0FjdGl2ZTpcInN0YXR1c0FjdGl2ZVwiLHRleHREZWZhdWx0OlwidGV4dERlZmF1bHRcIix0ZXh0SGVscDpcInRleHRIZWxwXCIsdGV4dEluYWN0aXZlOlwidGV4dEluYWN0aXZlXCIsYm9yZGVyTmV1dHJhbDpcImJvcmRlck5ldXRyYWxcIixjb250ZW50QmFja2dyb3VuZDE6XCJjb250ZW50QmFja2dyb3VuZDFcIixjb250ZW50QmFja2dyb3VuZDI6XCJjb250ZW50QmFja2dyb3VuZDJcIixjb250ZW50QmFja2dyb3VuZDM6XCJjb250ZW50QmFja2dyb3VuZDNcIixjb250ZW50QmFja2dyb3VuZDQ6XCJjb250ZW50QmFja2dyb3VuZDRcIixjb250ZW50QmFja2dyb3VuZDU6XCJjb250ZW50QmFja2dyb3VuZDVcIixsaW5rRGVmYXVsdDpcImxpbmtEZWZhdWx0XCIsbGlua0hvdmVyOlwibGlua0hvdmVyXCJ9fSw1MzE3OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LDQyNjY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDk0ODMpLHQpfSw5NDgzOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk9wZW5GaW5EYXJrVGhlbWU9dC5PcGVuRmluTGlnaHRUaGVtZT12b2lkIDA7Y29uc3Qgcj1uKDU0NTkpLG89bigzNDcxKSxhPW4oNjcxNCksaT17W3IuUGFsZXR0ZS5icmFuZFByaW1hcnldOm8uQ29sb3Iub3BlbkZpbixbci5QYWxldHRlLnN0YXR1c1N1Y2Nlc3NdOm8uQ29sb3IuZnVuY3Rpb25hbDEsW3IuUGFsZXR0ZS5zdGF0dXNXYXJuaW5nXTpvLkNvbG9yLmZ1bmN0aW9uYWwxMCxbci5QYWxldHRlLnN0YXR1c0NyaXRpY2FsXTpvLkNvbG9yLmZ1bmN0aW9uYWw3LFtyLlBhbGV0dGUuc3RhdHVzQWN0aXZlXTpvLkNvbG9yLmZ1bmN0aW9uYWwzLFtyLlBhbGV0dGUuYm9yZGVyTmV1dHJhbF06by5Db2xvci5zaWx2ZXJHcmF5LFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQxXTpvLkNvbG9yLm9wZW5GaW4sW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDJdOlwiIzAwMDAwMFwiLFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQzXTpcIiMwMDAwMDBcIixbci5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kNF06XCIjMDAwMDAwXCIsW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDVdOlwiIzAwMDAwMFwiLFtyLlBhbGV0dGUubGlua0RlZmF1bHRdOm8uQ29sb3IuZnVuY3Rpb25hbDQsW3IuUGFsZXR0ZS5saW5rSG92ZXJdOm8uQ29sb3IuZnVuY3Rpb25hbDV9O3QuT3BlbkZpbkxpZ2h0VGhlbWU9KDAsYS5jcmVhdGVUaGVtZSkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtbci5QYWxldHRlLmJhY2tncm91bmQxXTpvLkNvbG9yLndoaXRlLFtyLlBhbGV0dGUuYmFja2dyb3VuZDJdOm8uQ29sb3IubGlnaHRHcmF5MSxbci5QYWxldHRlLmJhY2tncm91bmQzXTpvLkNvbG9yLmxpZ2h0R3JheTIsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNF06by5Db2xvci5saWdodEdyYXkzLFtyLlBhbGV0dGUuYmFja2dyb3VuZDVdOm8uQ29sb3IubGlnaHRHcmF5Myxbci5QYWxldHRlLmJhY2tncm91bmQ2XTpvLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS5icmFuZFNlY29uZGFyeV06by5Db2xvci5saWdodEdyYXk0LFtyLlBhbGV0dGUuaW5wdXRCYWNrZ3JvdW5kXTpvLkNvbG9yLmxpZ2h0R3JheTMsW3IuUGFsZXR0ZS5pbnB1dENvbG9yXTpvLkNvbG9yLmRhcmtHcmF5NSxbci5QYWxldHRlLmlucHV0UGxhY2Vob2xkZXJdOm8uQ29sb3IuZGFya0dyYXkyLFtyLlBhbGV0dGUuaW5wdXREaXNhYmxlZF06by5Db2xvci5uZXV0cmFsR3JheSxbci5QYWxldHRlLmlucHV0Rm9jdXNlZF06by5Db2xvci5saWdodEdyYXk1LFtyLlBhbGV0dGUuaW5wdXRCb3JkZXJdOm8uQ29sb3IubmV1dHJhbEdyYXksW3IuUGFsZXR0ZS50ZXh0RGVmYXVsdF06by5Db2xvci5kYXJrR3JheTUsW3IuUGFsZXR0ZS50ZXh0SGVscF06by5Db2xvci5uZXV0cmFsR3JheSxbci5QYWxldHRlLnRleHRJbmFjdGl2ZV06by5Db2xvci5uZXV0cmFsR3JheX0pKSx0Lk9wZW5GaW5EYXJrVGhlbWU9KDAsYS5jcmVhdGVUaGVtZSkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtbci5QYWxldHRlLmJhY2tncm91bmQxXTpvLkNvbG9yLmRhcmtHcmF5Nixbci5QYWxldHRlLmJhY2tncm91bmQyXTpvLkNvbG9yLmRhcmtHcmF5NSxbci5QYWxldHRlLmJhY2tncm91bmQzXTpvLkNvbG9yLmRhcmtHcmF5NCxbci5QYWxldHRlLmJhY2tncm91bmQ0XTpvLkNvbG9yLmRhcmtHcmF5Myxbci5QYWxldHRlLmJhY2tncm91bmQ1XTpvLkNvbG9yLmRhcmtHcmF5Mixbci5QYWxldHRlLmJhY2tncm91bmQ2XTpvLkNvbG9yLmRhcmtHcmF5MSxbci5QYWxldHRlLmJyYW5kU2Vjb25kYXJ5XTpvLkNvbG9yLmRhcmtHcmF5Mixbci5QYWxldHRlLmlucHV0QmFja2dyb3VuZF06by5Db2xvci5kYXJrR3JheTEsW3IuUGFsZXR0ZS5pbnB1dENvbG9yXTpvLkNvbG9yLndoaXRlLFtyLlBhbGV0dGUuaW5wdXRQbGFjZWhvbGRlcl06by5Db2xvci5saWdodEdyYXk1LFtyLlBhbGV0dGUuaW5wdXREaXNhYmxlZF06by5Db2xvci5uZXV0cmFsR3JheSxbci5QYWxldHRlLmlucHV0Rm9jdXNlZF06by5Db2xvci5saWdodEdyYXk1LFtyLlBhbGV0dGUuaW5wdXRCb3JkZXJdOm8uQ29sb3IubmV1dHJhbEdyYXksW3IuUGFsZXR0ZS50ZXh0RGVmYXVsdF06by5Db2xvci53aGl0ZSxbci5QYWxldHRlLnRleHRIZWxwXTpvLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS50ZXh0SW5hY3RpdmVdOm8uQ29sb3IubmV1dHJhbEdyYXl9KSl9LDQyMDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5UaGVtZVByb3ZpZGVyPXZvaWQgMDtjb25zdCByPW4oNTg5Myksbz1uKDc1MTgpLGE9bigzMTkwKSxpPW4oNzA4OCksbD1uKDEwNjkpO3QuVGhlbWVQcm92aWRlcj0oe2NoaWxkcmVuOmUsdGhlbWVzOnQsc2NoZW1lOm49YS5Db2xvclNjaGVtZS5zeXN0ZW19KT0+e2NvbnN0IHM9KDAsaS51c2VUaGVtZSkoe3RoZW1lczp0LHNjaGVtZTpufSk7cmV0dXJuKDAsci5qc3gpKG8uVGhlbWVQcm92aWRlcixPYmplY3QuYXNzaWduKHt0aGVtZTpzfSx7Y2hpbGRyZW46KDAsci5qc3hzKShyLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsci5qc3gpKGwuR2xvYmFsU3R5bGVzLHt9KSxlXX0pfSkpfX0sMzg3NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMTA2OSksdCksbyhuKDEzMTApLHQpLG8obig5NTA3KSx0KX0sOTc1ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Db250YWN0U3RhdHVzSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9cihuKDc1MTgpKSxpPW4oMTMzMyksbD17YXZhaWxhYmxlOigwLG8uanN4KShpLkNoZWNrU1ZHLHt9KSxhd2F5OigwLG8uanN4KShpLkJ1c3lTVkcse30pLFwiZG8tbm90LWRpc3R1cmJcIjooMCxvLmpzeCkoaS5Eb05vdERpc3R1cmJTVkcse30pLG9mZmxpbmU6KDAsby5qc3gpKGkuT2ZmbGluZVNWRyx7fSksYnVzeTpudWxsfTt0LkNvbnRhY3RTdGF0dXNJY29uPSh7b25saW5lU3RhdHVzOmV9KT0+ZT8oMCxvLmpzeCkocyxPYmplY3QuYXNzaWduKHtvbmxpbmVTdGF0dXM6ZX0se2NoaWxkcmVuOmxbZV18fG51bGx9KSk6bnVsbDtjb25zdCBzPWEuZGVmYXVsdC5kaXZgXG4gIGJvcmRlcjogMS42cHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQxfTtcblxuICBiYWNrZ3JvdW5kOiAkeyh7b25saW5lU3RhdHVzOmV9KT0+XCJidXN5XCI9PT1lP1wiI0MyMTMxM1wiOlwid2hpdGVcIn07XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcblxuICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG5cbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA3OC45NSU7XG4gIHJpZ2h0OiAtNy4wMiU7XG4gIHRvcDogNzcuMTIlO1xuICBib3R0b206IC00LjI0JTtcbmB9LDEzMzM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuT2ZmbGluZVNWRz10LkRvTm90RGlzdHVyYlNWRz10LkJ1c3lTVkc9dC5DaGVja1NWRz12b2lkIDA7Y29uc3Qgcj1uKDU4OTMpO3QuQ2hlY2tTVkc9KCk9PigwLHIuanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0se2NoaWxkcmVuOigwLHIuanN4KShcInBhdGhcIix7ZDpcIk04IDBDOC43MzQzOCAwIDkuNDQwMSAwLjA5NjM1NDIgMTAuMTE3MiAwLjI4OTA2M0MxMC43OTQzIDAuNDgxNzcxIDExLjQyOTcgMC43NTI2MDQgMTIuMDIzNCAxLjEwMTU2QzEyLjYxNzIgMS40NTA1MiAxMy4xNTYzIDEuODY5NzkgMTMuNjQwNiAyLjM1OTM4QzE0LjEzMDIgMi44NDM3NSAxNC41NDk1IDMuMzgyODEgMTQuODk4NCAzLjk3NjU2QzE1LjI0NzQgNC41NzAzMSAxNS41MTgyIDUuMjA1NzMgMTUuNzEwOSA1Ljg4MjgxQzE1LjkwMzYgNi41NTk5IDE2IDcuMjY1NjMgMTYgOEMxNiA4LjcyOTE3IDE1LjkwMzYgOS40MzQ5IDE1LjcxMDkgMTAuMTE3MkMxNS41MTgyIDEwLjc5NDMgMTUuMjQ3NCAxMS40Mjk3IDE0Ljg5ODQgMTIuMDIzNEMxNC41NDk1IDEyLjYxNzIgMTQuMTMwMiAxMy4xNTg5IDEzLjY0MDYgMTMuNjQ4NEMxMy4xNTYzIDE0LjEzMjggMTIuNjE3MiAxNC41NDk1IDEyLjAyMzQgMTQuODk4NEMxMS40Mjk3IDE1LjI0NzQgMTAuNzkxNyAxNS41MTgyIDEwLjEwOTQgMTUuNzEwOUM5LjQzMjI5IDE1LjkwMzYgOC43MjkxNyAxNiA4IDE2QzcuMjcwODMgMTYgNi41NjUxIDE1LjkwMzYgNS44ODI4MSAxNS43MTA5QzUuMjA1NzMgMTUuNTE4MiA0LjU3MDMxIDE1LjI0NzQgMy45NzY1NiAxNC44OTg0QzMuMzgyODEgMTQuNTQ5NSAyLjg0MTE1IDE0LjEzMjggMi4zNTE1NiAxMy42NDg0QzEuODY3MTkgMTMuMTU4OSAxLjQ1MDUyIDEyLjYxNzIgMS4xMDE1NiAxMi4wMjM0QzAuNzUyNjA0IDExLjQyOTcgMC40ODE3NzEgMTAuNzk0MyAwLjI4OTA2MyAxMC4xMTcyQzAuMDk2MzU0MiA5LjQzNDkgMCA4LjcyOTE3IDAgOEMwIDcuMjcwODMgMC4wOTYzNTQyIDYuNTY3NzEgMC4yODkwNjMgNS44OTA2M0MwLjQ4MTc3MSA1LjIwODMzIDAuNzUyNjA0IDQuNTcwMzEgMS4xMDE1NiAzLjk3NjU2QzEuNDUwNTIgMy4zODI4MSAxLjg2NzE5IDIuODQzNzUgMi4zNTE1NiAyLjM1OTM4QzIuODQxMTUgMS44Njk3OSAzLjM4MjgxIDEuNDUwNTIgMy45NzY1NiAxLjEwMTU2QzQuNTcwMzEgMC43NTI2MDQgNS4yMDU3MyAwLjQ4MTc3MSA1Ljg4MjgxIDAuMjg5MDYzQzYuNTY1MSAwLjA5NjM1NDIgNy4yNzA4MyAwIDggMFpNMTAuNjMyOCA1LjY4NzVDMTAuNDI0NSA1LjY4NzUgMTAuMjQ3NCA1Ljc2MDQyIDEwLjEwMTYgNS45MDYyNUw3LjI3MzQ0IDguNzVMNi4yNjU2MyA3Ljc1QzYuMTE5NzkgNy42MDQxNyA1Ljk0NTMxIDcuNTMxMjUgNS43NDIxOSA3LjUzMTI1QzUuNjQzMjMgNy41MzEyNSA1LjU0OTQ4IDcuNTUyMDggNS40NjA5NCA3LjU5Mzc1QzUuMzcyNCA3LjYzNTQyIDUuMjkxNjcgNy42OTI3MSA1LjIxODc1IDcuNzY1NjNDNS4xNTEwNCA3LjgzMzMzIDUuMDk2MzUgNy45MTE0NiA1LjA1NDY5IDhDNS4wMTMwMiA4LjA4ODU0IDQuOTkyMTkgOC4xODIyOSA0Ljk5MjE5IDguMjgxMjVDNC45OTIxOSA4LjQ4OTU4IDUuMDY1MSA4LjY2NjY3IDUuMjEwOTQgOC44MTI1TDYuNzQyMTkgMTAuMzQzOEM2Ljg4ODAyIDEwLjQ4OTYgNy4wNjUxIDEwLjU2MjUgNy4yNzM0NCAxMC41NjI1QzcuNDgxNzcgMTAuNTYyNSA3LjY1ODg1IDEwLjQ4OTYgNy44MDQ2OSAxMC4zNDM4TDExLjE2NDEgNi45Njg3NUMxMS4zMDk5IDYuODIyOTIgMTEuMzgyOCA2LjY0NTgzIDExLjM4MjggNi40Mzc1QzExLjM4MjggNi4zMzg1NCAxMS4zNjIgNi4yNDQ3OSAxMS4zMjAzIDYuMTU2MjVDMTEuMjc4NiA2LjA2NzcxIDExLjIyMTQgNS45ODk1OCAxMS4xNDg0IDUuOTIxODhDMTEuMDgwNyA1Ljg0ODk2IDExLjAwMjYgNS43OTE2NyAxMC45MTQxIDUuNzVDMTAuODI1NSA1LjcwODMzIDEwLjczMTggNS42ODc1IDEwLjYzMjggNS42ODc1WlwiLGZpbGw6XCIjMjA3NzM1XCJ9KX0pKSx0LkJ1c3lTVkc9KCk9PigwLHIuanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxN1wiLHZpZXdCb3g6XCIwIDAgMTYgMTdcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0se2NoaWxkcmVuOigwLHIuanN4KShcInBhdGhcIix7ZDpcIk04IDAuNzkwMjM3QzguNzM0MzggMC43OTAyMzcgOS40NDAxIDAuODg2NTkyIDEwLjExNzIgMS4wNzkzQzEwLjc5NDMgMS4yNzIwMSAxMS40Mjk3IDEuNTQyODQgMTIuMDIzNCAxLjg5MThDMTIuNjE3MiAyLjI0MDc2IDEzLjE1NjMgMi42NjAwMyAxMy42NDA2IDMuMTQ5NjFDMTQuMTMwMiAzLjYzMzk5IDE0LjU0OTUgNC4xNzMwNSAxNC44OTg0IDQuNzY2OEMxNS4yNDc0IDUuMzYwNTUgMTUuNTE4MiA1Ljk5NTk3IDE1LjcxMDkgNi42NzMwNUMxNS45MDM2IDcuMzUwMTMgMTYgOC4wNTU4NiAxNiA4Ljc5MDI0QzE2IDkuNTE5NCAxNS45MDM2IDEwLjIyNTEgMTUuNzEwOSAxMC45MDc0QzE1LjUxODIgMTEuNTg0NSAxNS4yNDc0IDEyLjIxOTkgMTQuODk4NCAxMi44MTM3QzE0LjU0OTUgMTMuNDA3NCAxNC4xMzAyIDEzLjk0OTEgMTMuNjQwNiAxNC40Mzg3QzEzLjE1NjMgMTQuOTIzMSAxMi42MTcyIDE1LjMzOTcgMTIuMDIzNCAxNS42ODg3QzExLjQyOTcgMTYuMDM3NiAxMC43OTE3IDE2LjMwODUgMTAuMTA5NCAxNi41MDEyQzkuNDMyMjkgMTYuNjkzOSA4LjcyOTE3IDE2Ljc5MDIgOCAxNi43OTAyQzcuMjcwODMgMTYuNzkwMiA2LjU2NTEgMTYuNjkzOSA1Ljg4MjgxIDE2LjUwMTJDNS4yMDU3MyAxNi4zMDg1IDQuNTcwMzEgMTYuMDM3NiAzLjk3NjU2IDE1LjY4ODdDMy4zODI4MSAxNS4zMzk3IDIuODQxMTUgMTQuOTIzMSAyLjM1MTU2IDE0LjQzODdDMS44NjcxOSAxMy45NDkxIDEuNDUwNTIgMTMuNDA3NCAxLjEwMTU2IDEyLjgxMzdDMC43NTI2MDQgMTIuMjE5OSAwLjQ4MTc3MSAxMS41ODQ1IDAuMjg5MDYzIDEwLjkwNzRDMC4wOTYzNTQyIDEwLjIyNTEgMCA5LjUxOTQgMCA4Ljc5MDI0QzAgOC4wNjEwNyAwLjA5NjM1NDIgNy4zNTc5NSAwLjI4OTA2MyA2LjY4MDg2QzAuNDgxNzcxIDUuOTk4NTcgMC43NTI2MDQgNS4zNjA1NSAxLjEwMTU2IDQuNzY2OEMxLjQ1MDUyIDQuMTczMDUgMS44NjcxOSAzLjYzMzk5IDIuMzUxNTYgMy4xNDk2MUMyLjg0MTE1IDIuNjYwMDMgMy4zODI4MSAyLjI0MDc2IDMuOTc2NTYgMS44OTE4QzQuNTcwMzEgMS41NDI4NCA1LjIwNTczIDEuMjcyMDEgNS44ODI4MSAxLjA3OTNDNi41NjUxIDAuODg2NTkyIDcuMjcwODMgMC43OTAyMzcgOCAwLjc5MDIzN1pNNy4zMjAzMSA0LjA0ODA1QzcuMjEwOTQgNC4wNDgwNSA3LjEwNjc3IDQuMDcxNDkgNy4wMDc4MSA0LjExODM2QzYuOTE0MDYgNC4xNjAwMyA2LjgyODEzIDQuMjE5OTIgNi43NSA0LjI5ODA1QzYuNjc3MDggNC4zNzA5NyA2LjYxNzE5IDQuNDU2OSA2LjU3MDMxIDQuNTU1ODZDNi41Mjg2NSA0LjY0OTYxIDYuNTA3ODEgNC43NTExNyA2LjUwNzgxIDQuODYwNTVWOS4xOTY0OUM2LjUwNzgxIDkuMzA1ODYgNi41Mjg2NSA5LjQxMjYzIDYuNTcwMzEgOS41MTY4QzYuNjExOTggOS42MjA5NyA2LjY3MTg4IDkuNzEyMTEgNi43NSA5Ljc5MDI0TDkuMTg3NSAxMi4yMTIxQzkuMzQ4OTYgMTIuMzczNiA5LjU0MTY3IDEyLjQ1NDMgOS43NjU2MyAxMi40NTQzQzkuODc1IDEyLjQ1NDMgOS45NzkxNyAxMi40MzM1IDEwLjA3ODEgMTIuMzkxOEMxMC4xNzcxIDEyLjM0NDkgMTAuMjYzIDEyLjI4NSAxMC4zMzU5IDEyLjIxMjFDMTAuNDA4OSAxMi4xMzQgMTAuNDY2MSAxMi4wNDU0IDEwLjUwNzggMTEuOTQ2NUMxMC41NTQ3IDExLjg0NzUgMTAuNTc4MSAxMS43NDM0IDEwLjU3ODEgMTEuNjM0QzEwLjU3ODEgMTEuNTI5OCAxMC41NTQ3IDExLjQyODMgMTAuNTA3OCAxMS4zMjkzQzEwLjQ2NjEgMTEuMjI1MSAxMC40MDg5IDExLjEzNjYgMTAuMzM1OSAxMS4wNjM3TDguMTMyODEgOC44NzYxOFY0Ljg2MDU1QzguMTMyODEgNC43NTExNyA4LjEwOTM4IDQuNjQ3MDEgOC4wNjI1IDQuNTQ4MDVDOC4wMjA4MyA0LjQ0OTA5IDcuOTYzNTQgNC4zNjMxNSA3Ljg5MDYzIDQuMjkwMjRDNy44MTc3MSA0LjIxNzMyIDcuNzMxNzcgNC4xNjAwMyA3LjYzMjgxIDQuMTE4MzZDNy41MzM4NSA0LjA3MTQ5IDcuNDI5NjkgNC4wNDgwNSA3LjMyMDMxIDQuMDQ4MDVaXCIsZmlsbDpcIiNGRTlGNERcIn0pfSkpLHQuRG9Ob3REaXN0dXJiU1ZHPSgpPT4oMCxyLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTdcIix2aWV3Qm94OlwiMCAwIDE2IDE3XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LHtjaGlsZHJlbjooMCxyLmpzeCkoXCJwYXRoXCIse2Q6XCJNOCAwLjU5MDI1NkM4LjczNDM4IDAuNTkwMjU2IDkuNDQwMSAwLjY4NjYxIDEwLjExNzIgMC44NzkzMThDMTAuNzk0MyAxLjA3MjAzIDExLjQyOTcgMS4zNDI4NiAxMi4wMjM0IDEuNjkxODJDMTIuNjE3MiAyLjA0MDc4IDEzLjE1NjIgMi40NjAwNSAxMy42NDA2IDIuOTQ5NjNDMTQuMTMwMiAzLjQzNDAxIDE0LjU0OTUgMy45NzMwNyAxNC44OTg0IDQuNTY2ODJDMTUuMjQ3NCA1LjE2MDU3IDE1LjUxODIgNS43OTU5OCAxNS43MTA5IDYuNDczMDdDMTUuOTAzNiA3LjE1MDE1IDE2IDcuODU1ODggMTYgOC41OTAyNkMxNiA5LjMxOTQyIDE1LjkwMzYgMTAuMDI1MiAxNS43MTA5IDEwLjcwNzRDMTUuNTE4MiAxMS4zODQ1IDE1LjI0NzQgMTIuMDE5OSAxNC44OTg0IDEyLjYxMzdDMTQuNTQ5NSAxMy4yMDc0IDE0LjEzMDIgMTMuNzQ5MSAxMy42NDA2IDE0LjIzODdDMTMuMTU2MiAxNC43MjMxIDEyLjYxNzIgMTUuMTM5NyAxMi4wMjM0IDE1LjQ4ODdDMTEuNDI5NyAxNS44Mzc3IDEwLjc5MTcgMTYuMTA4NSAxMC4xMDk0IDE2LjMwMTJDOS40MzIyOSAxNi40OTM5IDguNzI5MTcgMTYuNTkwMyA4IDE2LjU5MDNDNy4yNzA4MyAxNi41OTAzIDYuNTY1MSAxNi40OTM5IDUuODgyODEgMTYuMzAxMkM1LjIwNTczIDE2LjEwODUgNC41NzAzMSAxNS44Mzc3IDMuOTc2NTYgMTUuNDg4N0MzLjM4MjgxIDE1LjEzOTcgMi44NDExNSAxNC43MjMxIDIuMzUxNTYgMTQuMjM4N0MxLjg2NzE5IDEzLjc0OTEgMS40NTA1MiAxMy4yMDc0IDEuMTAxNTYgMTIuNjEzN0MwLjc1MjYwNCAxMi4wMTk5IDAuNDgxNzcxIDExLjM4NDUgMC4yODkwNjIgMTAuNzA3NEMwLjA5NjM1NDIgMTAuMDI1MiAwIDkuMzE5NDIgMCA4LjU5MDI2QzAgNy44NjEwOSAwLjA5NjM1NDIgNy4xNTc5NiAwLjI4OTA2MiA2LjQ4MDg4QzAuNDgxNzcxIDUuNzk4NTkgMC43NTI2MDQgNS4xNjA1NyAxLjEwMTU2IDQuNTY2ODJDMS40NTA1MiAzLjk3MzA3IDEuODY3MTkgMy40MzQwMSAyLjM1MTU2IDIuOTQ5NjNDMi44NDExNSAyLjQ2MDA1IDMuMzgyODEgMi4wNDA3OCAzLjk3NjU2IDEuNjkxODJDNC41NzAzMSAxLjM0Mjg2IDUuMjA1NzMgMS4wNzIwMyA1Ljg4MjgxIDAuODc5MzE4QzYuNTY1MSAwLjY4NjYxIDcuMjcwODMgMC41OTAyNTYgOCAwLjU5MDI1NlpNNS40NzY1NiA3Ljc0NjUxQzUuMzY3MTkgNy43NDY1MSA1LjI2MDQyIDcuNzY5OTQgNS4xNTYyNSA3LjgxNjgyQzUuMDU3MjkgNy44NjM2OSA0Ljk2ODc1IDcuOTI2MTkgNC44OTA2MiA4LjAwNDMyQzQuODEyNSA4LjA4MjQ0IDQuNzUgOC4xNzM1OSA0LjcwMzEyIDguMjc3NzZDNC42NTYyNSA4LjM3NjcxIDQuNjMyODEgOC40ODA4OCA0LjYzMjgxIDguNTkwMjZDNC42MzI4MSA4LjY5OTYzIDQuNjU2MjUgOC44MDY0IDQuNzAzMTIgOC45MTA1N0M0Ljc1IDkuMDA5NTMgNC44MTI1IDkuMDk4MDcgNC44OTA2MiA5LjE3NjE5QzQuOTY4NzUgOS4yNTQzMiA1LjA1NzI5IDkuMzE2ODIgNS4xNTYyNSA5LjM2MzY5QzUuMjYwNDIgOS40MTA1NyA1LjM2NzE5IDkuNDM0MDEgNS40NzY1NiA5LjQzNDAxSDEwLjUyMzRDMTAuNjMyOCA5LjQzNDAxIDEwLjczNyA5LjQxMDU3IDEwLjgzNTkgOS4zNjM2OUMxMC45NDAxIDkuMzE2ODIgMTEuMDMxMiA5LjI1NDMyIDExLjEwOTQgOS4xNzYxOUMxMS4xODc1IDkuMDk4MDcgMTEuMjUgOS4wMDk1MyAxMS4yOTY5IDguOTEwNTdDMTEuMzQzOCA4LjgwNjQgMTEuMzY3MiA4LjY5OTYzIDExLjM2NzIgOC41OTAyNkMxMS4zNjcyIDguNDgwODggMTEuMzQzOCA4LjM3NjcxIDExLjI5NjkgOC4yNzc3NkMxMS4yNSA4LjE3MzU5IDExLjE4NzUgOC4wODI0NCAxMS4xMDk0IDguMDA0MzJDMTEuMDMxMiA3LjkyNjE5IDEwLjk0MDEgNy44NjM2OSAxMC44MzU5IDcuODE2ODJDMTAuNzM3IDcuNzY5OTQgMTAuNjMyOCA3Ljc0NjUxIDEwLjUyMzQgNy43NDY1MUg1LjQ3NjU2WlwiLGZpbGw6XCIjQzIxMzEzXCJ9KX0pKSx0Lk9mZmxpbmVTVkc9KCk9PigwLHIuanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxN1wiLHZpZXdCb3g6XCIwIDAgMTYgMTdcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0se2NoaWxkcmVuOigwLHIuanN4KShcInBhdGhcIix7ZDpcIk04IDAuOTkwMjUyQzguNzM0MzggMC45OTAyNTIgOS40NDAxIDEuMDg2NjEgMTAuMTE3MiAxLjI3OTMxQzEwLjc5NDMgMS40NzIwMiAxMS40Mjk3IDEuNzQyODYgMTIuMDIzNCAyLjA5MTgxQzEyLjYxNzIgMi40NDA3NyAxMy4xNTYyIDIuODYwMDQgMTMuNjQwNiAzLjM0OTYzQzE0LjEzMDIgMy44MzQgMTQuNTQ5NSA0LjM3MzA2IDE0Ljg5ODQgNC45NjY4MUMxNS4yNDc0IDUuNTYwNTYgMTUuNTE4MiA2LjE5NTk4IDE1LjcxMDkgNi44NzMwNkMxNS45MDM2IDcuNTUwMTUgMTYgOC4yNTU4OCAxNiA4Ljk5MDI1QzE2IDkuNzE5NDIgMTUuOTAzNiAxMC40MjUxIDE1LjcxMDkgMTEuMTA3NEMxNS41MTgyIDExLjc4NDUgMTUuMjQ3NCAxMi40MTk5IDE0Ljg5ODQgMTMuMDEzN0MxNC41NDk1IDEzLjYwNzQgMTQuMTMwMiAxNC4xNDkxIDEzLjY0MDYgMTQuNjM4N0MxMy4xNTYyIDE1LjEyMzEgMTIuNjE3MiAxNS41Mzk3IDEyLjAyMzQgMTUuODg4N0MxMS40Mjk3IDE2LjIzNzYgMTAuNzkxNyAxNi41MDg1IDEwLjEwOTQgMTYuNzAxMkM5LjQzMjI5IDE2Ljg5MzkgOC43MjkxNyAxNi45OTAzIDggMTYuOTkwM0M3LjI3MDgzIDE2Ljk5MDMgNi41NjUxIDE2Ljg5MzkgNS44ODI4MSAxNi43MDEyQzUuMjA1NzMgMTYuNTA4NSA0LjU3MDMxIDE2LjIzNzYgMy45NzY1NiAxNS44ODg3QzMuMzgyODEgMTUuNTM5NyAyLjg0MTE1IDE1LjEyMzEgMi4zNTE1NiAxNC42Mzg3QzEuODY3MTkgMTQuMTQ5MSAxLjQ1MDUyIDEzLjYwNzQgMS4xMDE1NiAxMy4wMTM3QzAuNzUyNjA0IDEyLjQxOTkgMC40ODE3NzEgMTEuNzg0NSAwLjI4OTA2MiAxMS4xMDc0QzAuMDk2MzU0MiAxMC40MjUxIDAgOS43MTk0MiAwIDguOTkwMjVDMCA4LjI2MTA5IDAuMDk2MzU0MiA3LjU1Nzk2IDAuMjg5MDYyIDYuODgwODhDMC40ODE3NzEgNi4xOTg1OSAwLjc1MjYwNCA1LjU2MDU2IDEuMTAxNTYgNC45NjY4MUMxLjQ1MDUyIDQuMzczMDYgMS44NjcxOSAzLjgzNCAyLjM1MTU2IDMuMzQ5NjNDMi44NDExNSAyLjg2MDA0IDMuMzgyODEgMi40NDA3NyAzLjk3NjU2IDIuMDkxODFDNC41NzAzMSAxLjc0Mjg2IDUuMjA1NzMgMS40NzIwMiA1Ljg4MjgxIDEuMjc5MzFDNi41NjUxIDEuMDg2NjEgNy4yNzA4MyAwLjk5MDI1MiA4IDAuOTkwMjUyWk04IDIuNjc3NzVDNy40MjE4OCAyLjY3Nzc1IDYuODY0NTggMi43NTMyNyA2LjMyODEyIDIuOTA0MzFDNS43OTE2NyAzLjA1NTM2IDUuMjg5MDYgMy4yNjg5IDQuODIwMzEgMy41NDQ5NEM0LjM1MTU2IDMuODIwOTggMy45MjQ0OCA0LjE1MTcxIDMuNTM5MDYgNC41MzcxM0MzLjE1ODg1IDQuOTE3MzQgMi44MzA3MyA1LjM0MTgxIDIuNTU0NjkgNS44MTA1NkMyLjI3ODY1IDYuMjc5MzEgMi4wNjUxIDYuNzgxOTIgMS45MTQwNiA3LjMxODM4QzEuNzYzMDIgNy44NTQ4NCAxLjY4NzUgOC40MTIxMyAxLjY4NzUgOC45OTAyNUMxLjY4NzUgOS41NjgzOCAxLjc2MzAyIDEwLjEyNTcgMS45MTQwNiAxMC42NjIxQzIuMDY1MSAxMS4xOTg2IDIuMjc4NjUgMTEuNzAxMiAyLjU1NDY5IDEyLjE2OTlDMi44MzA3MyAxMi42Mzg3IDMuMTU4ODUgMTMuMDY1OCAzLjUzOTA2IDEzLjQ1MTJDMy45MjQ0OCAxMy44MzE0IDQuMzUxNTYgMTQuMTU5NSA0LjgyMDMxIDE0LjQzNTZDNS4yODkwNiAxNC43MTE2IDUuNzkxNjcgMTQuOTI1MSA2LjMyODEyIDE1LjA3NjJDNi44NjQ1OCAxNS4yMjcyIDcuNDIxODggMTUuMzAyOCA4IDE1LjMwMjhDOC41NzgxMiAxNS4zMDI4IDkuMTM1NDIgMTUuMjI3MiA5LjY3MTg4IDE1LjA3NjJDMTAuMjA4MyAxNC45MjUxIDEwLjcxMDkgMTQuNzExNiAxMS4xNzk3IDE0LjQzNTZDMTEuNjQ4NCAxNC4xNTk1IDEyLjA3MjkgMTMuODMxNCAxMi40NTMxIDEzLjQ1MTJDMTIuODM4NSAxMy4wNjU4IDEzLjE2OTMgMTIuNjM4NyAxMy40NDUzIDEyLjE2OTlDMTMuNzIxNCAxMS43MDEyIDEzLjkzNDkgMTEuMTk4NiAxNC4wODU5IDEwLjY2MjFDMTQuMjM3IDEwLjEyNTcgMTQuMzEyNSA5LjU2ODM4IDE0LjMxMjUgOC45OTAyNUMxNC4zMTI1IDguNDEyMTMgMTQuMjM3IDcuODU0ODQgMTQuMDg1OSA3LjMxODM4QzEzLjkzNDkgNi43ODE5MiAxMy43MjE0IDYuMjc5MzEgMTMuNDQ1MyA1LjgxMDU2QzEzLjE2OTMgNS4zNDE4MSAxMi44Mzg1IDQuOTE3MzQgMTIuNDUzMSA0LjUzNzEzQzEyLjA3MjkgNC4xNTE3MSAxMS42NDg0IDMuODIwOTggMTEuMTc5NyAzLjU0NDk0QzEwLjcxMDkgMy4yNjg5IDEwLjIwODMgMy4wNTUzNiA5LjY3MTg4IDIuOTA0MzFDOS4xMzU0MiAyLjc1MzI3IDguNTc4MTIgMi42Nzc3NSA4IDIuNjc3NzVaXCIsZmlsbDpcIiM5Nzk3OTdcIn0pfSkpfSwzNDI5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksYT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fSxpPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LGw9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Db250YWN0Q2FyZD12b2lkIDA7Y29uc3Qgcz1uKDU4OTMpLGM9YShuKDY2ODkpKSx1PWwobig3NTE4KSksZD1uKDUzNzcpLHA9big3NDQ0KSxmPW4oOTc1OCksaD1uKDg4MzIpO3QuQ29udGFjdENhcmQ9ZT0+e3ZhcntuYW1lOnQsdGl0bGU6bixwaG90b1VybDpyLHVzZUluaXRpYWxzOm89ITEsZGV0YWlsczphLG9ubGluZVN0YXR1czpsfT1lLHU9aShlLFtcIm5hbWVcIixcInRpdGxlXCIsXCJwaG90b1VybFwiLFwidXNlSW5pdGlhbHNcIixcImRldGFpbHNcIixcIm9ubGluZVN0YXR1c1wiXSk7Y29uc3QgZD1yfHxvLE09KDAsYy51c2VNZW1vKSgoKCk9PigwLHAuZ2V0SW5pdGlhbHMpKHQpKSxbdF0pLEw9KDAsYy51c2VNZW1vKSgoKCk9PigwLGguZ2VuZXJhdGVDb2xvckZyb21TdHJpbmcpKHQpKSxbdF0pLF89KDAsYy5jcmVhdGVSZWYpKCk7cmV0dXJuKDAsYy51c2VFZmZlY3QpKCgoKT0+e3ZhciBlO251bGw9PT0oZT1fLmN1cnJlbnQpfHx2b2lkIDA9PT1lfHxlLnNjcm9sbFRvKDAsMCl9KSksKDAscy5qc3hzKShnLE9iamVjdC5hc3NpZ24oe30sdSx7Y2hpbGRyZW46WygwLHMuanN4cykodix7Y2hpbGRyZW46W2QmJigwLHMuanN4cykoQyxPYmplY3QuYXNzaWduKHtpY29uQ29sb3I6TH0se2NoaWxkcmVuOltyPygwLHMuanN4KSh3LHthbHQ6bixzcmM6cn0pOigwLHMuanN4KShtLHtjaGlsZHJlbjpNfSksKDAscy5qc3gpKGYuQ29udGFjdFN0YXR1c0ljb24se29ubGluZVN0YXR1czpsfSldfSkpLCgwLHMuanN4cykoYix7Y2hpbGRyZW46WygwLHMuanN4cykoeSx7Y2hpbGRyZW46W1wiIFwiLHQsXCIgXCJdfSksbiYmKDAscy5qc3hzKSh4LHtjaGlsZHJlbjpbXCIgXCIsbixcIiBcIl19KV19KV19KSwoMCxzLmpzeCkoUyx7fSksKDAscy5qc3gpKGssT2JqZWN0LmFzc2lnbih7cmVmOl99LHtjaGlsZHJlbjoobnVsbD09YT92b2lkIDA6YS5sZW5ndGgpPjA/YS5tYXAoKChlLG4pPT4oMCxzLmpzeHMpKGMuZGVmYXVsdC5GcmFnbWVudCx7Y2hpbGRyZW46WygwLHMuanN4KShPLHtkZWZpbml0aW9uczplfSksbjxhLmxlbmd0aC0xJiYoMCxzLmpzeCkoUyx7cGFkZGluZzohMH0pXX0sYCR7dH0tZGV0YWlscy0ke259YCkpKTooMCxzLmpzeCkoXCJwXCIse2NoaWxkcmVuOlwiTm8gaW5mb3JtYXRpb24gYXZhaWxhYmxlLlwifSl9KSldfSkpfTtjb25zdCBnPXUuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGhlaWdodDogMTAwJTtcbmAsdj11LmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG5gLEM9dS5kZWZhdWx0LmRpdmBcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtlPT5lLmljb25Db2xvcn07XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cbiAgaGVpZ2h0OiA2MHB4O1xuICB3aWR0aDogNjBweDtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gLG09dS5kZWZhdWx0LnNwYW5gXG4gIGZvbnQtc2l6ZTogMjRweDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbmAsdz11LmRlZmF1bHQuaW1nYFxuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH07XG4gIG9iamVjdC1maXQ6IGNvdmVyO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbmAsYj11LmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIG1pbi13aWR0aDogMDtcbiAgbWFyZ2luLWxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG5gLHk9dS5kZWZhdWx0LnNwYW5gXG4gIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5sYXJnZX07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZy1ib3R0b206ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ib2xkfTtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5gLHg9dS5kZWZhdWx0LnNwYW5gXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZy1ib3R0b206IDJweDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5gLGs9dS5kZWZhdWx0LmRpdmBcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBmbGV4OiAxO1xuICBtYXJnaW4tdG9wOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbiAgbWFyZ2luLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgcGFkZGluZy1yaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbmAsUz11LmRlZmF1bHQuZGl2YFxuICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgbWFyZ2luLWJvdHRvbTogJHsoe3RoZW1lOmUscGFkZGluZzp0fSk9PnQmJmUucHguYmFzZX07XG5gLE89KDAsdS5kZWZhdWx0KShkLkRlZmluaXRpb25MaXN0KWBcbiAgZHQge1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gIH1cblxuICBkZCB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5gfSwzMTg4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigzNDI5KSx0KX0sNzQ0NDooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZ2V0SW5pdGlhbHM9dm9pZCAwLHQuZ2V0SW5pdGlhbHM9ZT0+e2NvbnN0IHQ9ZS50cmltKCksbj10Lmxhc3RJbmRleE9mKFwiIFwiKTtyZXR1cm4gbj4tMT9bdC5jaGFyQXQoMCksdC5jaGFyQXQobisxKV0uam9pbihcIlwiKTp0LnNsaWNlKDAsMil9fSwxOTk2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuSDY9dC5INT10Lkg0PXQuSDM9dC5IMj10LkgxPXQuSGVhZGluZz10LmRlZmF1bHRTaXplPXZvaWQgMDtjb25zdCBhPW4oNTg5MyksaT1vKG4oNzUxOCkpLGw9bigzNDcxKSxzPW4oNzc2OSk7dC5kZWZhdWx0U2l6ZT17aDE6bC5TaXplLnh4eGxhcmdlLGgyOmwuU2l6ZS54eGxhcmdlLGgzOmwuU2l6ZS54bGFyZ2UsaDQ6bC5TaXplLmxhcmdlLGg1OmwuU2l6ZS5iYXNlLGg2OmwuU2l6ZS5zbWFsbH0sdC5IZWFkaW5nPWU9Pnt2YXJ7bGV2ZWw6bj0xLGNsYXNzTmFtZTpvfT1lLGk9cihlLFtcImxldmVsXCIsXCJjbGFzc05hbWVcIl0pO2NvbnN0IGw9YGgke259YDtyZXR1cm4oMCxhLmpzeCkoYyxPYmplY3QuYXNzaWduKHtjbGFzc05hbWU6byxhczpsLHNpemU6dC5kZWZhdWx0U2l6ZVtsXSx3ZWlnaHQ6XCJib2xkXCJ9LGkpKX07Y29uc3QgYz0oMCxpLmRlZmF1bHQpKHMuVGV4dClgXG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQuaGVhZGluZ307XG5gO3QuSDE9KDAsaS5kZWZhdWx0KSh0LkhlYWRpbmcpLmF0dHJzKChlPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2xldmVsOjF9KSkpYGAsdC5IMj0oMCxpLmRlZmF1bHQpKHQuSGVhZGluZykuYXR0cnMoKGU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bGV2ZWw6Mn0pKSlgYCx0LkgzPSgwLGkuZGVmYXVsdCkodC5IZWFkaW5nKS5hdHRycygoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtsZXZlbDozfSkpKWBgLHQuSDQ9KDAsaS5kZWZhdWx0KSh0LkhlYWRpbmcpLmF0dHJzKChlPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2xldmVsOjR9KSkpYGAsdC5INT0oMCxpLmRlZmF1bHQpKHQuSGVhZGluZykuYXR0cnMoKGU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bGV2ZWw6NX0pKSlgYCx0Lkg2PSgwLGkuZGVmYXVsdCkodC5IZWFkaW5nKS5hdHRycygoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtsZXZlbDo2fSkpKWBgfSw3MDYzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigxOTk2KSx0KX0sNzc2OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNTQzMSksdCl9LDU0MzE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVGV4dD12b2lkIDA7Y29uc3Qgbz1yKG4oNzUxOCkpO3QuVGV4dD1vLmRlZmF1bHQuc3BhbmBcbiAgY29sb3I6ICR7KHt0aGVtZTplLGNvbG9yOnQ9XCJ0ZXh0RGVmYXVsdFwifSk9PmUucGFsZXR0ZVt0XX07XG4gIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmUsc2l6ZTp0PVwiYmFzZVwifSk9PmUuZm9udFNpemVbdF19O1xuICBmb250LXdlaWdodDogJHsoe3RoZW1lOmUsd2VpZ2h0OnQ9XCJub3JtYWxcIn0pPT5lLmZvbnRXZWlnaHRbdF19O1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LnRleHR9O1xuYCx0LlRleHQuZGlzcGxheU5hbWU9XCJUZXh0XCJ9LDMxOTA6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlQ29sb3JTY2hlbWU9dC5Db2xvclNjaGVtZT12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpO3QuQ29sb3JTY2hlbWU9e2Rhcms6XCJkYXJrXCIsbGlnaHQ6XCJsaWdodFwiLHN5c3RlbTpcInN5c3RlbVwifSx0LnVzZUNvbG9yU2NoZW1lPSh7Y29sb3JTY2hlbWU6ZSxmYWxsYmFja1NjaGVtZTpuPXQuQ29sb3JTY2hlbWUubGlnaHR9KT0+e2NvbnN0W2EsaV09KDAsci51c2VTdGF0ZSkoZSYmZSE9PXQuQ29sb3JTY2hlbWUuc3lzdGVtP2U6biksbD10PT57aShvKHQsZXx8bikpfTtyZXR1cm4oMCxyLnVzZUVmZmVjdCkoKCgpPT57Y29uc3QgdD13aW5kb3cubWF0Y2hNZWRpYShcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIik7cmV0dXJuIGkobyh0LGV8fG4pKSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixsKSwoKT0+dC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsbCl9KSxbZSxhXSksYX07Y29uc3Qgbz0oZSxuKT0+bj09PXQuQ29sb3JTY2hlbWUuc3lzdGVtP2UubWF0Y2hlcz90LkNvbG9yU2NoZW1lLmRhcms6dC5Db2xvclNjaGVtZS5saWdodDpufSwzNDc6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlRHJvcGRvd25LZXlib2FyZE5hdmlnYXRpb249dm9pZCAwO2NvbnN0IHI9big2Njg5KTt0LnVzZURyb3Bkb3duS2V5Ym9hcmROYXZpZ2F0aW9uPShlLHQsbixvLGEpPT57Y29uc3RbaSxsXT0oMCxyLnVzZVN0YXRlKSgwKSxbcyxjXT0oMCxyLnVzZVN0YXRlKShcIlwiKTtsZXQgdTtpZigoMCxyLnVzZUVmZmVjdCkoKCgpPT57aWYodCYmIW4pe2NvbnN0IG49ZS5mbGF0KCkuZmluZEluZGV4KChlPT5lLnZhbHVlPT09dC52YWx1ZSkpO24+PTAmJmwobil9fSksW2UsdCxuXSksKDAsci51c2VFZmZlY3QpKCgoKT0+e258fGMoXCJcIil9KSxbbl0pLCgwLHIudXNlRWZmZWN0KSgoKCk9PntpZihzKXtjb25zdCB0PWUuZmxhdCgpLmZpbmRJbmRleCgoZT0+ZS50aXRsZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocy50b0xvd2VyQ2FzZSgpKSkpO3Q+PTAmJmwodCl9fSksW2Usc10pLGVbMF0ubGVuZ3RoPjAmJmUuZmxhdCgpLmxlbmd0aD5pKXtjb25zdFt0LG5dPVtNYXRoLmZsb29yKGkvZVswXS5sZW5ndGgpLGklZVswXS5sZW5ndGhdO3U9ZVt0XVtuXX1yZXR1cm4oMCxyLnVzZUVmZmVjdCkoKCgpPT57Y29uc3QgZT1zZXRUaW1lb3V0KCgoKT0+e2MoXCJcIil9KSw1MDApO3JldHVybigpPT5jbGVhclRpbWVvdXQoZSl9KSxbc10pLHtmb2N1c2VkT3B0aW9uOnUsaGFuZGxlS2V5RG93bjp0PT57c3dpdGNoKHQuY29kZSl7Y2FzZVwiQXJyb3dVcFwiOnQucHJldmVudERlZmF1bHQoKSxpPjAmJmwoaS0xKTticmVhaztjYXNlXCJBcnJvd0Rvd25cIjp0LnByZXZlbnREZWZhdWx0KCksaTxlLmZsYXQoKS5sZW5ndGgtMSYmbChpKzEpO2JyZWFrO2Nhc2VcIkVudGVyXCI6Y2FzZVwiU3BhY2VcIjp0LnByZXZlbnREZWZhdWx0KCksbj8oKG51bGw9PXU/dm9pZCAwOnUub3ZlcnJpZGVPbkNsaWNrKT91Lm92ZXJyaWRlT25DbGljaygpOmEobnVsbCE9dT91OmVbMF1bMF0pLG8oKSk6bygpO2JyZWFrO2Nhc2VcIkVzY2FwZVwiOnQucHJldmVudERlZmF1bHQoKSxvKCExKTticmVhaztkZWZhdWx0Oi9eW2EtejAtOV0kL2kudGVzdCh0LmtleSkmJmMoKGU9PmUrdC5rZXkpKX19fX19LDQ0ODE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlTGF5b3V0TWVkaWFRdWVyeT10LnVzZU1lZGlhUXVlcnk9dm9pZCAwO2NvbnN0IHI9big2Njg5KSxvPWU9PnQ9Pntjb25zdFtuLG9dPSgwLHIudXNlU3RhdGUpKCExKTtyZXR1cm4gZSgoKCk9Pntjb25zdCBlPXdpbmRvdy5tYXRjaE1lZGlhKHQpO2lmKGUpe2UubWF0Y2hlcyE9PW4mJm8oZS5tYXRjaGVzKTtjb25zdCB0PSgpPT5vKGUubWF0Y2hlcykscj0oKT0+ZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsdCk7cmV0dXJuIGUuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLHQpLHJ9fSksW24sdF0pLG59O3QudXNlTWVkaWFRdWVyeT1vKHIudXNlRWZmZWN0KSx0LnVzZUxheW91dE1lZGlhUXVlcnk9byhyLnVzZUxheW91dEVmZmVjdCl9LDI3NzY6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlUHJldmlvdXM9dm9pZCAwO2NvbnN0IHI9big2Njg5KTt0LnVzZVByZXZpb3VzPWU9Pntjb25zdCB0PSgwLHIudXNlUmVmKSgpO3JldHVybigwLHIudXNlRWZmZWN0KSgoKCk9Pnt0LmN1cnJlbnQ9ZX0pLFtlXSksdC5jdXJyZW50fX0sNzA4ODooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VUaGVtZT12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpLG89big0MjY2KSxhPW4oMzE5MCksaT1uKDk1MDcpLGw9big2NDg2KSxzPXtbYS5Db2xvclNjaGVtZS5kYXJrXTpvLk9wZW5GaW5EYXJrVGhlbWUsW2EuQ29sb3JTY2hlbWUubGlnaHRdOm8uT3BlbkZpbkxpZ2h0VGhlbWV9O3QudXNlVGhlbWU9KHt0aGVtZXM6ZSxzY2hlbWU6dH0pPT57bGV0IG49e307Y29uc3Qgbz0oMCxhLnVzZUNvbG9yU2NoZW1lKSh7Y29sb3JTY2hlbWU6dH0pO3RyeXtuPSgwLHIudXNlTWVtbykoKCgpPT4oKGUsdCk9Pntjb25zdCBuPW51bGw9PXQ/dm9pZCAwOnRbZV07bGV0IHI9T2JqZWN0LmFzc2lnbih7fSxzW2VdKTtyZXR1cm4gbiYmbi5wYWxldHRlJiYocj0oMCxsLm1lcmdlKShyLG4sKDAsaS5jcmVhdGVUaGVtZSkobi5wYWxldHRlKSkpLHJ9KShvLGUpKSxbZSxvXSl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX1yZXR1cm4gbn19LDM0MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNDEzMCksdCksbyhuKDc0MDEpLHQpLG8obig5NTAxKSx0KSxvKG4oNDkyNSksdCksbyhuKDI2MDkpLHQpLG8obigzMTM2KSx0KSxvKG4oOTczNCksdCksbyhuKDYwMjYpLHQpLG8obig5NjM0KSx0KSxvKG4oMTQ0KSx0KSxvKG4oOTIzOSksdCksbyhuKDg4NzgpLHQpLG8obig4NTEwKSx0KSxvKG4oODk1MSksdCksbyhuKDE5NzgpLHQpLG8obig4MDUxKSx0KSxvKG4oNDE2OSksdCksbyhuKDM2NDEpLHQpLG8obig1MjE1KSx0KSxvKG4oOTY1NCksdCksbyhuKDMxMTkpLHQpLG8obigxMzM1KSx0KSxvKG4oNTM3NyksdCksbyhuKDM4NzcpLHQpLG8obigzMTg4KSx0KSxvKG4oNzA2MyksdCksbyhuKDc3NjkpLHQpLG8obigzMTkwKSx0KSxvKG4oNDQ4MSksdCksbyhuKDI3NzYpLHQpLG8obigzNDcpLHQpLG8obig0OTkxKSx0KSxvKG4oODgzMiksdCksbyhuKDcwMzApLHQpLG8obig2MjE4KSx0KX0sODgzMjooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZ2VuZXJhdGVDb2xvckZyb21TdHJpbmc9dm9pZCAwLHQuZ2VuZXJhdGVDb2xvckZyb21TdHJpbmc9ZnVuY3Rpb24oZT1cIlwiLHQ9NzAsbj01MCl7bGV0IHI9MDtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKylyPWUuY2hhckNvZGVBdCh0KSsoKHI8PDUpLXIpLHImPXI7cmV0dXJuYGhzbCgke3IlMzYwfSwgJHt0fSUsICR7bn0lKWB9fSw0OTkxOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC53aGVuRmluPXZvaWQgMCx0LndoZW5GaW49ZnVuY3Rpb24oZSx0KXtjb25zdCBuPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBmaW4/ZTp0O3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bigpOm59fSw2NTU6KGUsdCxuKT0+e24ucih0KSxuLmQodCx7X19hc3NpZ246KCk9PmEsX19hc3luY0RlbGVnYXRvcjooKT0+TyxfX2FzeW5jR2VuZXJhdG9yOigpPT5TLF9fYXN5bmNWYWx1ZXM6KCk9Pk0sX19hd2FpdDooKT0+ayxfX2F3YWl0ZXI6KCk9PmgsX19jbGFzc1ByaXZhdGVGaWVsZEdldDooKT0+aixfX2NsYXNzUHJpdmF0ZUZpZWxkSW46KCk9PkksX19jbGFzc1ByaXZhdGVGaWVsZFNldDooKT0+UixfX2NyZWF0ZUJpbmRpbmc6KCk9PnYsX19kZWNvcmF0ZTooKT0+bCxfX2VzRGVjb3JhdGU6KCk9PmMsX19leHBvcnRTdGFyOigpPT5DLF9fZXh0ZW5kczooKT0+byxfX2dlbmVyYXRvcjooKT0+ZyxfX2ltcG9ydERlZmF1bHQ6KCk9PkUsX19pbXBvcnRTdGFyOigpPT5QLF9fbWFrZVRlbXBsYXRlT2JqZWN0OigpPT5MLF9fbWV0YWRhdGE6KCk9PmYsX19wYXJhbTooKT0+cyxfX3Byb3BLZXk6KCk9PmQsX19yZWFkOigpPT53LF9fcmVzdDooKT0+aSxfX3J1bkluaXRpYWxpemVyczooKT0+dSxfX3NldEZ1bmN0aW9uTmFtZTooKT0+cCxfX3NwcmVhZDooKT0+YixfX3NwcmVhZEFycmF5OigpPT54LF9fc3ByZWFkQXJyYXlzOigpPT55LF9fdmFsdWVzOigpPT5tfSk7dmFyIHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSl9LHIoZSx0KX07ZnVuY3Rpb24gbyhlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiK1N0cmluZyh0KStcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9cihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KG4ucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBuKX12YXIgYT1mdW5jdGlvbigpe3JldHVybiBhPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW25dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0sYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIGkoZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufWZ1bmN0aW9uIGwoZSx0LG4scil7dmFyIG8sYT1hcmd1bWVudHMubGVuZ3RoLGk9YTwzP3Q6bnVsbD09PXI/cj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik6cjtpZihcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlpPVJlZmxlY3QuZGVjb3JhdGUoZSx0LG4scik7ZWxzZSBmb3IodmFyIGw9ZS5sZW5ndGgtMTtsPj0wO2wtLSkobz1lW2xdKSYmKGk9KGE8Mz9vKGkpOmE+Mz9vKHQsbixpKTpvKHQsbikpfHxpKTtyZXR1cm4gYT4zJiZpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLGkpLGl9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3QobixyLGUpfX1mdW5jdGlvbiBjKGUsdCxuLHIsbyxhKXtmdW5jdGlvbiBpKGUpe2lmKHZvaWQgMCE9PWUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpO3JldHVybiBlfWZvcih2YXIgbCxzPXIua2luZCxjPVwiZ2V0dGVyXCI9PT1zP1wiZ2V0XCI6XCJzZXR0ZXJcIj09PXM/XCJzZXRcIjpcInZhbHVlXCIsdT0hdCYmZT9yLnN0YXRpYz9lOmUucHJvdG90eXBlOm51bGwsZD10fHwodT9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHUsci5uYW1lKTp7fSkscD0hMSxmPW4ubGVuZ3RoLTE7Zj49MDtmLS0pe3ZhciBoPXt9O2Zvcih2YXIgZyBpbiByKWhbZ109XCJhY2Nlc3NcIj09PWc/e306cltnXTtmb3IodmFyIGcgaW4gci5hY2Nlc3MpaC5hY2Nlc3NbZ109ci5hY2Nlc3NbZ107aC5hZGRJbml0aWFsaXplcj1mdW5jdGlvbihlKXtpZihwKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7YS5wdXNoKGkoZXx8bnVsbCkpfTt2YXIgdj0oMCxuW2ZdKShcImFjY2Vzc29yXCI9PT1zP3tnZXQ6ZC5nZXQsc2V0OmQuc2V0fTpkW2NdLGgpO2lmKFwiYWNjZXNzb3JcIj09PXMpe2lmKHZvaWQgMD09PXYpY29udGludWU7aWYobnVsbD09PXZ8fFwib2JqZWN0XCIhPXR5cGVvZiB2KXRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7KGw9aSh2LmdldCkpJiYoZC5nZXQ9bCksKGw9aSh2LnNldCkpJiYoZC5zZXQ9bCksKGw9aSh2LmluaXQpKSYmby5wdXNoKGwpfWVsc2UobD1pKHYpKSYmKFwiZmllbGRcIj09PXM/by5wdXNoKGwpOmRbY109bCl9dSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsci5uYW1lLGQpLHA9ITB9ZnVuY3Rpb24gdShlLHQsbil7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixvPTA7bzx0Lmxlbmd0aDtvKyspbj1yP3Rbb10uY2FsbChlLG4pOnRbb10uY2FsbChlKTtyZXR1cm4gcj9uOnZvaWQgMH1mdW5jdGlvbiBkKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlP2U6XCJcIi5jb25jYXQoZSl9ZnVuY3Rpb24gcChlLHQsbil7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHQmJih0PXQuZGVzY3JpcHRpb24/XCJbXCIuY29uY2F0KHQuZGVzY3JpcHRpb24sXCJdXCIpOlwiXCIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwibmFtZVwiLHtjb25maWd1cmFibGU6ITAsdmFsdWU6bj9cIlwiLmNvbmNhdChuLFwiIFwiLHQpOnR9KX1mdW5jdGlvbiBmKGUsdCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlZmxlY3QubWV0YWRhdGEpcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoZSx0KX1mdW5jdGlvbiBoKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihvLGEpe2Z1bmN0aW9uIGkoZSl7dHJ5e3Moci5uZXh0KGUpKX1jYXRjaChlKXthKGUpfX1mdW5jdGlvbiBsKGUpe3RyeXtzKHIudGhyb3coZSkpfWNhdGNoKGUpe2EoZSl9fWZ1bmN0aW9uIHMoZSl7dmFyIHQ7ZS5kb25lP28oZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGksbCl9cygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfWZ1bmN0aW9uIGcoZSx0KXt2YXIgbixyLG8sYSxpPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJm9bMF0pdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBhPXtuZXh0OmwoMCksdGhyb3c6bCgxKSxyZXR1cm46bCgyKX0sXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiYoYVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxhO2Z1bmN0aW9uIGwobCl7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbihsKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7YSYmKGE9MCxsWzBdJiYoaT0wKSksaTspdHJ5e2lmKG49MSxyJiYobz0yJmxbMF0/ci5yZXR1cm46bFswXT9yLnRocm93fHwoKG89ci5yZXR1cm4pJiZvLmNhbGwociksMCk6ci5uZXh0KSYmIShvPW8uY2FsbChyLGxbMV0pKS5kb25lKXJldHVybiBvO3N3aXRjaChyPTAsbyYmKGw9WzImbFswXSxvLnZhbHVlXSksbFswXSl7Y2FzZSAwOmNhc2UgMTpvPWw7YnJlYWs7Y2FzZSA0OnJldHVybiBpLmxhYmVsKysse3ZhbHVlOmxbMV0sZG9uZTohMX07Y2FzZSA1OmkubGFiZWwrKyxyPWxbMV0sbD1bMF07Y29udGludWU7Y2FzZSA3Omw9aS5vcHMucG9wKCksaS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgobz0obz1pLnRyeXMpLmxlbmd0aD4wJiZvW28ubGVuZ3RoLTFdKXx8NiE9PWxbMF0mJjIhPT1sWzBdKSl7aT0wO2NvbnRpbnVlfWlmKDM9PT1sWzBdJiYoIW98fGxbMV0+b1swXSYmbFsxXTxvWzNdKSl7aS5sYWJlbD1sWzFdO2JyZWFrfWlmKDY9PT1sWzBdJiZpLmxhYmVsPG9bMV0pe2kubGFiZWw9b1sxXSxvPWw7YnJlYWt9aWYobyYmaS5sYWJlbDxvWzJdKXtpLmxhYmVsPW9bMl0saS5vcHMucHVzaChsKTticmVha31vWzJdJiZpLm9wcy5wb3AoKSxpLnRyeXMucG9wKCk7Y29udGludWV9bD10LmNhbGwoZSxpKX1jYXRjaChlKXtsPVs2LGVdLHI9MH1maW5hbGx5e249bz0wfWlmKDUmbFswXSl0aHJvdyBsWzFdO3JldHVybnt2YWx1ZTpsWzBdP2xbMV06dm9pZCAwLGRvbmU6ITB9fShbbCxzXSl9fX12YXIgdj1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19O2Z1bmN0aW9uIEMoZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHx2KHQsZSxuKX1mdW5jdGlvbiBtKGUpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLG49dCYmZVt0XSxyPTA7aWYobilyZXR1cm4gbi5jYWxsKGUpO2lmKGUmJlwibnVtYmVyXCI9PXR5cGVvZiBlLmxlbmd0aClyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybiBlJiZyPj1lLmxlbmd0aCYmKGU9dm9pZCAwKSx7dmFsdWU6ZSYmZVtyKytdLGRvbmU6IWV9fX07dGhyb3cgbmV3IFR5cGVFcnJvcih0P1wiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIjpcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIil9ZnVuY3Rpb24gdyhlLHQpe3ZhciBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFuKXJldHVybiBlO3ZhciByLG8sYT1uLmNhbGwoZSksaT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09dHx8dC0tID4wKSYmIShyPWEubmV4dCgpKS5kb25lOylpLnB1c2goci52YWx1ZSl9Y2F0Y2goZSl7bz17ZXJyb3I6ZX19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKG49YS5yZXR1cm4pJiZuLmNhbGwoYSl9ZmluYWxseXtpZihvKXRocm93IG8uZXJyb3J9fXJldHVybiBpfWZ1bmN0aW9uIGIoKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZT1lLmNvbmNhdCh3KGFyZ3VtZW50c1t0XSkpO3JldHVybiBlfWZ1bmN0aW9uIHkoKXtmb3IodmFyIGU9MCx0PTAsbj1hcmd1bWVudHMubGVuZ3RoO3Q8bjt0KyspZSs9YXJndW1lbnRzW3RdLmxlbmd0aDt2YXIgcj1BcnJheShlKSxvPTA7Zm9yKHQ9MDt0PG47dCsrKWZvcih2YXIgYT1hcmd1bWVudHNbdF0saT0wLGw9YS5sZW5ndGg7aTxsO2krKyxvKyspcltvXT1hW2ldO3JldHVybiByfWZ1bmN0aW9uIHgoZSx0LG4pe2lmKG58fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgcixvPTAsYT10Lmxlbmd0aDtvPGE7bysrKSFyJiZvIGluIHR8fChyfHwocj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LDAsbykpLHJbb109dFtvXSk7cmV0dXJuIGUuY29uY2F0KHJ8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKX1mdW5jdGlvbiBrKGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygaz8odGhpcy52PWUsdGhpcyk6bmV3IGsoZSl9ZnVuY3Rpb24gUyhlLHQsbil7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7dmFyIHIsbz1uLmFwcGx5KGUsdHx8W10pLGE9W107cmV0dXJuIHI9e30saShcIm5leHRcIiksaShcInRocm93XCIpLGkoXCJyZXR1cm5cIikscltTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30scjtmdW5jdGlvbiBpKGUpe29bZV0mJihyW2VdPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixyKXthLnB1c2goW2UsdCxuLHJdKT4xfHxsKGUsdCl9KSl9KX1mdW5jdGlvbiBsKGUsdCl7dHJ5eyhuPW9bZV0odCkpLnZhbHVlIGluc3RhbmNlb2Ygaz9Qcm9taXNlLnJlc29sdmUobi52YWx1ZS52KS50aGVuKHMsYyk6dShhWzBdWzJdLG4pfWNhdGNoKGUpe3UoYVswXVszXSxlKX12YXIgbn1mdW5jdGlvbiBzKGUpe2woXCJuZXh0XCIsZSl9ZnVuY3Rpb24gYyhlKXtsKFwidGhyb3dcIixlKX1mdW5jdGlvbiB1KGUsdCl7ZSh0KSxhLnNoaWZ0KCksYS5sZW5ndGgmJmwoYVswXVswXSxhWzBdWzFdKX19ZnVuY3Rpb24gTyhlKXt2YXIgdCxuO3JldHVybiB0PXt9LHIoXCJuZXh0XCIpLHIoXCJ0aHJvd1wiLChmdW5jdGlvbihlKXt0aHJvdyBlfSkpLHIoXCJyZXR1cm5cIiksdFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHQ7ZnVuY3Rpb24gcihyLG8pe3Rbcl09ZVtyXT9mdW5jdGlvbih0KXtyZXR1cm4obj0hbik/e3ZhbHVlOmsoZVtyXSh0KSksZG9uZTohMX06bz9vKHQpOnR9Om99fWZ1bmN0aW9uIE0oZSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7dmFyIHQsbj1lW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gbj9uLmNhbGwoZSk6KGU9bShlKSx0PXt9LHIoXCJuZXh0XCIpLHIoXCJ0aHJvd1wiKSxyKFwicmV0dXJuXCIpLHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHQpO2Z1bmN0aW9uIHIobil7dFtuXT1lW25dJiZmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbyl7IWZ1bmN0aW9uKGUsdCxuLHIpe1Byb21pc2UucmVzb2x2ZShyKS50aGVuKChmdW5jdGlvbih0KXtlKHt2YWx1ZTp0LGRvbmU6bn0pfSksdCl9KHIsbywodD1lW25dKHQpKS5kb25lLHQudmFsdWUpfSkpfX19ZnVuY3Rpb24gTChlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJyYXdcIix7dmFsdWU6dH0pOmUucmF3PXQsZX12YXIgXz1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fTtmdW5jdGlvbiBQKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnYodCxlLG4pO3JldHVybiBfKHQsZSksdH1mdW5jdGlvbiBFKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBqKGUsdCxuLHIpe2lmKFwiYVwiPT09biYmIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2UhPT10fHwhcjohdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtyZXR1cm5cIm1cIj09PW4/cjpcImFcIj09PW4/ci5jYWxsKGUpOnI/ci52YWx1ZTp0LmdldChlKX1mdW5jdGlvbiBSKGUsdCxuLHIsbyl7aWYoXCJtXCI9PT1yKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7aWYoXCJhXCI9PT1yJiYhbyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZSE9PXR8fCFvOiF0LmhhcyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7cmV0dXJuXCJhXCI9PT1yP28uY2FsbChlLG4pOm8/by52YWx1ZT1uOnQuc2V0KGUsbiksbn1mdW5jdGlvbiBJKGUsdCl7aWYobnVsbD09PXR8fFwib2JqZWN0XCIhPXR5cGVvZiB0JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP3Q9PT1lOmUuaGFzKHQpfX0sNjAzNjplPT57ZS5leHBvcnRzPVwiaHR0cHM6Ly9jZG4ub3BlbmZpbi5jby91aS1saWJyYXJ5L2ZvbnRzL0ludGVyLUl0YWxpYy53b2ZmMlwifSw0NjY4OmU9PntlLmV4cG9ydHM9XCJodHRwczovL2Nkbi5vcGVuZmluLmNvL3VpLWxpYnJhcnkvZm9udHMvSW50ZXItUmVndWxhci53b2ZmMlwifSw1OTQxOmU9PntlLmV4cG9ydHM9XCJodHRwczovL2Nkbi5vcGVuZmluLmNvL3VpLWxpYnJhcnkvZm9udHMvSW50ZXItU2VtaUJvbGQud29mZjJcIn0sMjgxMzplPT57ZS5leHBvcnRzPVwiaHR0cHM6Ly9jZG4ub3BlbmZpbi5jby91aS1saWJyYXJ5L2ZvbnRzL0ludGVyLVNlbWlCb2xkSXRhbGljLndvZmYyXCJ9LDY2ODk6ZT0+e2UuZXhwb3J0cz1uKDM3OCl9LDc1MTg6ZT0+e2UuZXhwb3J0cz1uKDkyMSl9LDgyMDc6ZnVuY3Rpb24oZSl7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4oZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSkodCl9dmFyIHQ9L15cXHMrLyxuPS9cXHMrJC87ZnVuY3Rpb24gcihvLGEpe2lmKGE9YXx8e30sKG89b3x8XCJcIilpbnN0YW5jZW9mIHIpcmV0dXJuIG87aWYoISh0aGlzIGluc3RhbmNlb2YgcikpcmV0dXJuIG5ldyByKG8sYSk7dmFyIGk9ZnVuY3Rpb24ocil7dmFyIG8sYSxpLGw9e3I6MCxnOjAsYjowfSxzPTEsYz1udWxsLHU9bnVsbCxkPW51bGwscD0hMSxmPSExO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiByJiYocj1mdW5jdGlvbihlKXtlPWUucmVwbGFjZSh0LFwiXCIpLnJlcGxhY2UobixcIlwiKS50b0xvd2VyQ2FzZSgpO3ZhciByLG89ITE7aWYoYltlXSllPWJbZV0sbz0hMDtlbHNlIGlmKFwidHJhbnNwYXJlbnRcIj09ZSlyZXR1cm57cjowLGc6MCxiOjAsYTowLGZvcm1hdDpcIm5hbWVcIn07cmV0dXJuKHI9SS5yZ2IuZXhlYyhlKSk/e3I6clsxXSxnOnJbMl0sYjpyWzNdfToocj1JLnJnYmEuZXhlYyhlKSk/e3I6clsxXSxnOnJbMl0sYjpyWzNdLGE6cls0XX06KHI9SS5oc2wuZXhlYyhlKSk/e2g6clsxXSxzOnJbMl0sbDpyWzNdfToocj1JLmhzbGEuZXhlYyhlKSk/e2g6clsxXSxzOnJbMl0sbDpyWzNdLGE6cls0XX06KHI9SS5oc3YuZXhlYyhlKSk/e2g6clsxXSxzOnJbMl0sdjpyWzNdfToocj1JLmhzdmEuZXhlYyhlKSk/e2g6clsxXSxzOnJbMl0sdjpyWzNdLGE6cls0XX06KHI9SS5oZXg4LmV4ZWMoZSkpP3tyOk8oclsxXSksZzpPKHJbMl0pLGI6TyhyWzNdKSxhOlAocls0XSksZm9ybWF0Om8/XCJuYW1lXCI6XCJoZXg4XCJ9OihyPUkuaGV4Ni5leGVjKGUpKT97cjpPKHJbMV0pLGc6TyhyWzJdKSxiOk8oclszXSksZm9ybWF0Om8/XCJuYW1lXCI6XCJoZXhcIn06KHI9SS5oZXg0LmV4ZWMoZSkpP3tyOk8oclsxXStcIlwiK3JbMV0pLGc6TyhyWzJdK1wiXCIrclsyXSksYjpPKHJbM10rXCJcIityWzNdKSxhOlAocls0XStcIlwiK3JbNF0pLGZvcm1hdDpvP1wibmFtZVwiOlwiaGV4OFwifTohIShyPUkuaGV4My5leGVjKGUpKSYme3I6TyhyWzFdK1wiXCIrclsxXSksZzpPKHJbMl0rXCJcIityWzJdKSxiOk8oclszXStcIlwiK3JbM10pLGZvcm1hdDpvP1wibmFtZVwiOlwiaGV4XCJ9fShyKSksXCJvYmplY3RcIj09ZShyKSYmKFYoci5yKSYmVihyLmcpJiZWKHIuYik/KG89ci5yLGE9ci5nLGk9ci5iLGw9e3I6MjU1KmsobywyNTUpLGc6MjU1KmsoYSwyNTUpLGI6MjU1KmsoaSwyNTUpfSxwPSEwLGY9XCIlXCI9PT1TdHJpbmcoci5yKS5zdWJzdHIoLTEpP1wicHJnYlwiOlwicmdiXCIpOlYoci5oKSYmVihyLnMpJiZWKHIudik/KGM9TChyLnMpLHU9TChyLnYpLGw9ZnVuY3Rpb24oZSx0LG4pe2U9NiprKGUsMzYwKSx0PWsodCwxMDApLG49ayhuLDEwMCk7dmFyIHI9TWF0aC5mbG9vcihlKSxvPWUtcixhPW4qKDEtdCksaT1uKigxLW8qdCksbD1uKigxLSgxLW8pKnQpLHM9ciU2O3JldHVybntyOjI1NSpbbixpLGEsYSxsLG5dW3NdLGc6MjU1KltsLG4sbixpLGEsYV1bc10sYjoyNTUqW2EsYSxsLG4sbixpXVtzXX19KHIuaCxjLHUpLHA9ITAsZj1cImhzdlwiKTpWKHIuaCkmJlYoci5zKSYmVihyLmwpJiYoYz1MKHIucyksZD1MKHIubCksbD1mdW5jdGlvbihlLHQsbil7dmFyIHIsbyxhO2Z1bmN0aW9uIGkoZSx0LG4pe3JldHVybiBuPDAmJihuKz0xKSxuPjEmJihuLT0xKSxuPDEvNj9lKzYqKHQtZSkqbjpuPC41P3Q6bjwyLzM/ZSsodC1lKSooMi8zLW4pKjY6ZX1pZihlPWsoZSwzNjApLHQ9ayh0LDEwMCksbj1rKG4sMTAwKSwwPT09dClyPW89YT1uO2Vsc2V7dmFyIGw9bjwuNT9uKigxK3QpOm4rdC1uKnQscz0yKm4tbDtyPWkocyxsLGUrMS8zKSxvPWkocyxsLGUpLGE9aShzLGwsZS0xLzMpfXJldHVybntyOjI1NSpyLGc6MjU1Km8sYjoyNTUqYX19KHIuaCxjLGQpLHA9ITAsZj1cImhzbFwiKSxyLmhhc093blByb3BlcnR5KFwiYVwiKSYmKHM9ci5hKSkscz14KHMpLHtvazpwLGZvcm1hdDpyLmZvcm1hdHx8ZixyOk1hdGgubWluKDI1NSxNYXRoLm1heChsLnIsMCkpLGc6TWF0aC5taW4oMjU1LE1hdGgubWF4KGwuZywwKSksYjpNYXRoLm1pbigyNTUsTWF0aC5tYXgobC5iLDApKSxhOnN9fShvKTt0aGlzLl9vcmlnaW5hbElucHV0PW8sdGhpcy5fcj1pLnIsdGhpcy5fZz1pLmcsdGhpcy5fYj1pLmIsdGhpcy5fYT1pLmEsdGhpcy5fcm91bmRBPU1hdGgucm91bmQoMTAwKnRoaXMuX2EpLzEwMCx0aGlzLl9mb3JtYXQ9YS5mb3JtYXR8fGkuZm9ybWF0LHRoaXMuX2dyYWRpZW50VHlwZT1hLmdyYWRpZW50VHlwZSx0aGlzLl9yPDEmJih0aGlzLl9yPU1hdGgucm91bmQodGhpcy5fcikpLHRoaXMuX2c8MSYmKHRoaXMuX2c9TWF0aC5yb3VuZCh0aGlzLl9nKSksdGhpcy5fYjwxJiYodGhpcy5fYj1NYXRoLnJvdW5kKHRoaXMuX2IpKSx0aGlzLl9vaz1pLm9rfWZ1bmN0aW9uIG8oZSx0LG4pe2U9ayhlLDI1NSksdD1rKHQsMjU1KSxuPWsobiwyNTUpO3ZhciByLG8sYT1NYXRoLm1heChlLHQsbiksaT1NYXRoLm1pbihlLHQsbiksbD0oYStpKS8yO2lmKGE9PWkpcj1vPTA7ZWxzZXt2YXIgcz1hLWk7c3dpdGNoKG89bD4uNT9zLygyLWEtaSk6cy8oYStpKSxhKXtjYXNlIGU6cj0odC1uKS9zKyh0PG4/NjowKTticmVhaztjYXNlIHQ6cj0obi1lKS9zKzI7YnJlYWs7Y2FzZSBuOnI9KGUtdCkvcys0fXIvPTZ9cmV0dXJue2g6cixzOm8sbH19ZnVuY3Rpb24gYShlLHQsbil7ZT1rKGUsMjU1KSx0PWsodCwyNTUpLG49ayhuLDI1NSk7dmFyIHIsbyxhPU1hdGgubWF4KGUsdCxuKSxpPU1hdGgubWluKGUsdCxuKSxsPWEscz1hLWk7aWYobz0wPT09YT8wOnMvYSxhPT1pKXI9MDtlbHNle3N3aXRjaChhKXtjYXNlIGU6cj0odC1uKS9zKyh0PG4/NjowKTticmVhaztjYXNlIHQ6cj0obi1lKS9zKzI7YnJlYWs7Y2FzZSBuOnI9KGUtdCkvcys0fXIvPTZ9cmV0dXJue2g6cixzOm8sdjpsfX1mdW5jdGlvbiBpKGUsdCxuLHIpe3ZhciBvPVtNKE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpKSxNKE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpKSxNKE1hdGgucm91bmQobikudG9TdHJpbmcoMTYpKV07cmV0dXJuIHImJm9bMF0uY2hhckF0KDApPT1vWzBdLmNoYXJBdCgxKSYmb1sxXS5jaGFyQXQoMCk9PW9bMV0uY2hhckF0KDEpJiZvWzJdLmNoYXJBdCgwKT09b1syXS5jaGFyQXQoMSk/b1swXS5jaGFyQXQoMCkrb1sxXS5jaGFyQXQoMCkrb1syXS5jaGFyQXQoMCk6by5qb2luKFwiXCIpfWZ1bmN0aW9uIGwoZSx0LG4scil7cmV0dXJuW00oXyhyKSksTShNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KSksTShNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KSksTShNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KSldLmpvaW4oXCJcIil9ZnVuY3Rpb24gcyhlLHQpe3Q9MD09PXQ/MDp0fHwxMDt2YXIgbj1yKGUpLnRvSHNsKCk7cmV0dXJuIG4ucy09dC8xMDAsbi5zPVMobi5zKSxyKG4pfWZ1bmN0aW9uIGMoZSx0KXt0PTA9PT10PzA6dHx8MTA7dmFyIG49cihlKS50b0hzbCgpO3JldHVybiBuLnMrPXQvMTAwLG4ucz1TKG4ucykscihuKX1mdW5jdGlvbiB1KGUpe3JldHVybiByKGUpLmRlc2F0dXJhdGUoMTAwKX1mdW5jdGlvbiBkKGUsdCl7dD0wPT09dD8wOnR8fDEwO3ZhciBuPXIoZSkudG9Ic2woKTtyZXR1cm4gbi5sKz10LzEwMCxuLmw9UyhuLmwpLHIobil9ZnVuY3Rpb24gcChlLHQpe3Q9MD09PXQ/MDp0fHwxMDt2YXIgbj1yKGUpLnRvUmdiKCk7cmV0dXJuIG4ucj1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxuLnItTWF0aC5yb3VuZCgtdC8xMDAqMjU1KSkpLG4uZz1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxuLmctTWF0aC5yb3VuZCgtdC8xMDAqMjU1KSkpLG4uYj1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxuLmItTWF0aC5yb3VuZCgtdC8xMDAqMjU1KSkpLHIobil9ZnVuY3Rpb24gZihlLHQpe3Q9MD09PXQ/MDp0fHwxMDt2YXIgbj1yKGUpLnRvSHNsKCk7cmV0dXJuIG4ubC09dC8xMDAsbi5sPVMobi5sKSxyKG4pfWZ1bmN0aW9uIGgoZSx0KXt2YXIgbj1yKGUpLnRvSHNsKCksbz0obi5oK3QpJTM2MDtyZXR1cm4gbi5oPW88MD8zNjArbzpvLHIobil9ZnVuY3Rpb24gZyhlKXt2YXIgdD1yKGUpLnRvSHNsKCk7cmV0dXJuIHQuaD0odC5oKzE4MCklMzYwLHIodCl9ZnVuY3Rpb24gdihlLHQpe2lmKGlzTmFOKHQpfHx0PD0wKXRocm93IG5ldyBFcnJvcihcIkFyZ3VtZW50IHRvIHBvbHlhZCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyXCIpO2Zvcih2YXIgbj1yKGUpLnRvSHNsKCksbz1bcihlKV0sYT0zNjAvdCxpPTE7aTx0O2krKylvLnB1c2gocih7aDoobi5oK2kqYSklMzYwLHM6bi5zLGw6bi5sfSkpO3JldHVybiBvfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9cihlKS50b0hzbCgpLG49dC5oO3JldHVybltyKGUpLHIoe2g6KG4rNzIpJTM2MCxzOnQucyxsOnQubH0pLHIoe2g6KG4rMjE2KSUzNjAsczp0LnMsbDp0Lmx9KV19ZnVuY3Rpb24gbShlLHQsbil7dD10fHw2LG49bnx8MzA7dmFyIG89cihlKS50b0hzbCgpLGE9MzYwL24saT1bcihlKV07Zm9yKG8uaD0oby5oLShhKnQ+PjEpKzcyMCklMzYwOy0tdDspby5oPShvLmgrYSklMzYwLGkucHVzaChyKG8pKTtyZXR1cm4gaX1mdW5jdGlvbiB3KGUsdCl7dD10fHw2O2Zvcih2YXIgbj1yKGUpLnRvSHN2KCksbz1uLmgsYT1uLnMsaT1uLnYsbD1bXSxzPTEvdDt0LS07KWwucHVzaChyKHtoOm8sczphLHY6aX0pKSxpPShpK3MpJTE7cmV0dXJuIGx9ci5wcm90b3R5cGU9e2lzRGFyazpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJyaWdodG5lc3MoKTwxMjh9LGlzTGlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0RhcmsoKX0saXNWYWxpZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9va30sZ2V0T3JpZ2luYWxJbnB1dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmlnaW5hbElucHV0fSxnZXRGb3JtYXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9ybWF0fSxnZXRBbHBoYTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hfSxnZXRCcmlnaHRuZXNzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50b1JnYigpO3JldHVybigyOTkqZS5yKzU4NyplLmcrMTE0KmUuYikvMWUzfSxnZXRMdW1pbmFuY2U6ZnVuY3Rpb24oKXt2YXIgZSx0LG4scj10aGlzLnRvUmdiKCk7cmV0dXJuIGU9ci5yLzI1NSx0PXIuZy8yNTUsbj1yLmIvMjU1LC4yMTI2KihlPD0uMDM5Mjg/ZS8xMi45MjpNYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpKSsuNzE1MioodDw9LjAzOTI4P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KSkrLjA3MjIqKG48PS4wMzkyOD9uLzEyLjkyOk1hdGgucG93KChuKy4wNTUpLzEuMDU1LDIuNCkpfSxzZXRBbHBoYTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fYT14KGUpLHRoaXMuX3JvdW5kQT1NYXRoLnJvdW5kKDEwMCp0aGlzLl9hKS8xMDAsdGhpc30sdG9Ic3Y6ZnVuY3Rpb24oKXt2YXIgZT1hKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKTtyZXR1cm57aDozNjAqZS5oLHM6ZS5zLHY6ZS52LGE6dGhpcy5fYX19LHRvSHN2U3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9YSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiksdD1NYXRoLnJvdW5kKDM2MCplLmgpLG49TWF0aC5yb3VuZCgxMDAqZS5zKSxyPU1hdGgucm91bmQoMTAwKmUudik7cmV0dXJuIDE9PXRoaXMuX2E/XCJoc3YoXCIrdCtcIiwgXCIrbitcIiUsIFwiK3IrXCIlKVwiOlwiaHN2YShcIit0K1wiLCBcIituK1wiJSwgXCIrcitcIiUsIFwiK3RoaXMuX3JvdW5kQStcIilcIn0sdG9Ic2w6ZnVuY3Rpb24oKXt2YXIgZT1vKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKTtyZXR1cm57aDozNjAqZS5oLHM6ZS5zLGw6ZS5sLGE6dGhpcy5fYX19LHRvSHNsU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9byh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiksdD1NYXRoLnJvdW5kKDM2MCplLmgpLG49TWF0aC5yb3VuZCgxMDAqZS5zKSxyPU1hdGgucm91bmQoMTAwKmUubCk7cmV0dXJuIDE9PXRoaXMuX2E/XCJoc2woXCIrdCtcIiwgXCIrbitcIiUsIFwiK3IrXCIlKVwiOlwiaHNsYShcIit0K1wiLCBcIituK1wiJSwgXCIrcitcIiUsIFwiK3RoaXMuX3JvdW5kQStcIilcIn0sdG9IZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGkodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsZSl9LHRvSGV4U3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVyblwiI1wiK3RoaXMudG9IZXgoZSl9LHRvSGV4ODpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgYT1bTShNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KSksTShNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KSksTShNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KSksTShfKHIpKV07cmV0dXJuIG8mJmFbMF0uY2hhckF0KDApPT1hWzBdLmNoYXJBdCgxKSYmYVsxXS5jaGFyQXQoMCk9PWFbMV0uY2hhckF0KDEpJiZhWzJdLmNoYXJBdCgwKT09YVsyXS5jaGFyQXQoMSkmJmFbM10uY2hhckF0KDApPT1hWzNdLmNoYXJBdCgxKT9hWzBdLmNoYXJBdCgwKSthWzFdLmNoYXJBdCgwKSthWzJdLmNoYXJBdCgwKSthWzNdLmNoYXJBdCgwKTphLmpvaW4oXCJcIil9KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHRoaXMuX2EsZSl9LHRvSGV4OFN0cmluZzpmdW5jdGlvbihlKXtyZXR1cm5cIiNcIit0aGlzLnRvSGV4OChlKX0sdG9SZ2I6ZnVuY3Rpb24oKXtyZXR1cm57cjpNYXRoLnJvdW5kKHRoaXMuX3IpLGc6TWF0aC5yb3VuZCh0aGlzLl9nKSxiOk1hdGgucm91bmQodGhpcy5fYiksYTp0aGlzLl9hfX0sdG9SZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT9cInJnYihcIitNYXRoLnJvdW5kKHRoaXMuX3IpK1wiLCBcIitNYXRoLnJvdW5kKHRoaXMuX2cpK1wiLCBcIitNYXRoLnJvdW5kKHRoaXMuX2IpK1wiKVwiOlwicmdiYShcIitNYXRoLnJvdW5kKHRoaXMuX3IpK1wiLCBcIitNYXRoLnJvdW5kKHRoaXMuX2cpK1wiLCBcIitNYXRoLnJvdW5kKHRoaXMuX2IpK1wiLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvUGVyY2VudGFnZVJnYjpmdW5jdGlvbigpe3JldHVybntyOk1hdGgucm91bmQoMTAwKmsodGhpcy5fciwyNTUpKStcIiVcIixnOk1hdGgucm91bmQoMTAwKmsodGhpcy5fZywyNTUpKStcIiVcIixiOk1hdGgucm91bmQoMTAwKmsodGhpcy5fYiwyNTUpKStcIiVcIixhOnRoaXMuX2F9fSx0b1BlcmNlbnRhZ2VSZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT9cInJnYihcIitNYXRoLnJvdW5kKDEwMCprKHRoaXMuX3IsMjU1KSkrXCIlLCBcIitNYXRoLnJvdW5kKDEwMCprKHRoaXMuX2csMjU1KSkrXCIlLCBcIitNYXRoLnJvdW5kKDEwMCprKHRoaXMuX2IsMjU1KSkrXCIlKVwiOlwicmdiYShcIitNYXRoLnJvdW5kKDEwMCprKHRoaXMuX3IsMjU1KSkrXCIlLCBcIitNYXRoLnJvdW5kKDEwMCprKHRoaXMuX2csMjU1KSkrXCIlLCBcIitNYXRoLnJvdW5kKDEwMCprKHRoaXMuX2IsMjU1KSkrXCIlLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvTmFtZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5fYT9cInRyYW5zcGFyZW50XCI6ISh0aGlzLl9hPDEpJiYoeVtpKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLCEwKV18fCExKX0sdG9GaWx0ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9XCIjXCIrbCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0aGlzLl9hKSxuPXQsbz10aGlzLl9ncmFkaWVudFR5cGU/XCJHcmFkaWVudFR5cGUgPSAxLCBcIjpcIlwiO2lmKGUpe3ZhciBhPXIoZSk7bj1cIiNcIitsKGEuX3IsYS5fZyxhLl9iLGEuX2EpfXJldHVyblwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KFwiK28rXCJzdGFydENvbG9yc3RyPVwiK3QrXCIsZW5kQ29sb3JzdHI9XCIrbitcIilcIn0sdG9TdHJpbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ISFlO2U9ZXx8dGhpcy5fZm9ybWF0O3ZhciBuPSExLHI9dGhpcy5fYTwxJiZ0aGlzLl9hPj0wO3JldHVybiB0fHwhcnx8XCJoZXhcIiE9PWUmJlwiaGV4NlwiIT09ZSYmXCJoZXgzXCIhPT1lJiZcImhleDRcIiE9PWUmJlwiaGV4OFwiIT09ZSYmXCJuYW1lXCIhPT1lPyhcInJnYlwiPT09ZSYmKG49dGhpcy50b1JnYlN0cmluZygpKSxcInByZ2JcIj09PWUmJihuPXRoaXMudG9QZXJjZW50YWdlUmdiU3RyaW5nKCkpLFwiaGV4XCIhPT1lJiZcImhleDZcIiE9PWV8fChuPXRoaXMudG9IZXhTdHJpbmcoKSksXCJoZXgzXCI9PT1lJiYobj10aGlzLnRvSGV4U3RyaW5nKCEwKSksXCJoZXg0XCI9PT1lJiYobj10aGlzLnRvSGV4OFN0cmluZyghMCkpLFwiaGV4OFwiPT09ZSYmKG49dGhpcy50b0hleDhTdHJpbmcoKSksXCJuYW1lXCI9PT1lJiYobj10aGlzLnRvTmFtZSgpKSxcImhzbFwiPT09ZSYmKG49dGhpcy50b0hzbFN0cmluZygpKSxcImhzdlwiPT09ZSYmKG49dGhpcy50b0hzdlN0cmluZygpKSxufHx0aGlzLnRvSGV4U3RyaW5nKCkpOlwibmFtZVwiPT09ZSYmMD09PXRoaXMuX2E/dGhpcy50b05hbWUoKTp0aGlzLnRvUmdiU3RyaW5nKCl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy50b1N0cmluZygpKX0sX2FwcGx5TW9kaWZpY2F0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5hcHBseShudWxsLFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbCh0KSkpO3JldHVybiB0aGlzLl9yPW4uX3IsdGhpcy5fZz1uLl9nLHRoaXMuX2I9bi5fYix0aGlzLnNldEFscGhhKG4uX2EpLHRoaXN9LGxpZ2h0ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZCxhcmd1bWVudHMpfSxicmlnaHRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihwLGFyZ3VtZW50cyl9LGRhcmtlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihmLGFyZ3VtZW50cyl9LGRlc2F0dXJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24ocyxhcmd1bWVudHMpfSxzYXR1cmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihjLGFyZ3VtZW50cyl9LGdyZXlzY2FsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih1LGFyZ3VtZW50cyl9LHNwaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oaCxhcmd1bWVudHMpfSxfYXBwbHlDb21iaW5hdGlvbjpmdW5jdGlvbihlLHQpe3JldHVybiBlLmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKHQpKSl9LGFuYWxvZ291czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKG0sYXJndW1lbnRzKX0sY29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKGcsYXJndW1lbnRzKX0sbW9ub2Nocm9tYXRpYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHcsYXJndW1lbnRzKX0sc3BsaXRjb21wbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oQyxhcmd1bWVudHMpfSx0cmlhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHYsWzNdKX0sdGV0cmFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24odixbNF0pfX0sci5mcm9tUmF0aW89ZnVuY3Rpb24odCxuKXtpZihcIm9iamVjdFwiPT1lKHQpKXt2YXIgbz17fTtmb3IodmFyIGEgaW4gdCl0Lmhhc093blByb3BlcnR5KGEpJiYob1thXT1cImFcIj09PWE/dFthXTpMKHRbYV0pKTt0PW99cmV0dXJuIHIodCxuKX0sci5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hKCFlfHwhdCkmJnIoZSkudG9SZ2JTdHJpbmcoKT09cih0KS50b1JnYlN0cmluZygpfSxyLnJhbmRvbT1mdW5jdGlvbigpe3JldHVybiByLmZyb21SYXRpbyh7cjpNYXRoLnJhbmRvbSgpLGc6TWF0aC5yYW5kb20oKSxiOk1hdGgucmFuZG9tKCl9KX0sci5taXg9ZnVuY3Rpb24oZSx0LG4pe249MD09PW4/MDpufHw1MDt2YXIgbz1yKGUpLnRvUmdiKCksYT1yKHQpLnRvUmdiKCksaT1uLzEwMDtyZXR1cm4gcih7cjooYS5yLW8ucikqaStvLnIsZzooYS5nLW8uZykqaStvLmcsYjooYS5iLW8uYikqaStvLmIsYTooYS5hLW8uYSkqaStvLmF9KX0sci5yZWFkYWJpbGl0eT1mdW5jdGlvbihlLHQpe3ZhciBuPXIoZSksbz1yKHQpO3JldHVybihNYXRoLm1heChuLmdldEx1bWluYW5jZSgpLG8uZ2V0THVtaW5hbmNlKCkpKy4wNSkvKE1hdGgubWluKG4uZ2V0THVtaW5hbmNlKCksby5nZXRMdW1pbmFuY2UoKSkrLjA1KX0sci5pc1JlYWRhYmxlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbyxhLGksbCxzLGM9ci5yZWFkYWJpbGl0eShlLHQpO3N3aXRjaChhPSExLChpPW4sXCJBQVwiIT09KGw9KChpPWl8fHtsZXZlbDpcIkFBXCIsc2l6ZTpcInNtYWxsXCJ9KS5sZXZlbHx8XCJBQVwiKS50b1VwcGVyQ2FzZSgpKSYmXCJBQUFcIiE9PWwmJihsPVwiQUFcIiksXCJzbWFsbFwiIT09KHM9KGkuc2l6ZXx8XCJzbWFsbFwiKS50b0xvd2VyQ2FzZSgpKSYmXCJsYXJnZVwiIT09cyYmKHM9XCJzbWFsbFwiKSxvPXtsZXZlbDpsLHNpemU6c30pLmxldmVsK28uc2l6ZSl7Y2FzZVwiQUFzbWFsbFwiOmNhc2VcIkFBQWxhcmdlXCI6YT1jPj00LjU7YnJlYWs7Y2FzZVwiQUFsYXJnZVwiOmE9Yz49MzticmVhaztjYXNlXCJBQUFzbWFsbFwiOmE9Yz49N31yZXR1cm4gYX0sci5tb3N0UmVhZGFibGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvLGEsaSxsLHM9bnVsbCxjPTA7YT0obj1ufHx7fSkuaW5jbHVkZUZhbGxiYWNrQ29sb3JzLGk9bi5sZXZlbCxsPW4uc2l6ZTtmb3IodmFyIHU9MDt1PHQubGVuZ3RoO3UrKykobz1yLnJlYWRhYmlsaXR5KGUsdFt1XSkpPmMmJihjPW8scz1yKHRbdV0pKTtyZXR1cm4gci5pc1JlYWRhYmxlKGUscyx7bGV2ZWw6aSxzaXplOmx9KXx8IWE/czoobi5pbmNsdWRlRmFsbGJhY2tDb2xvcnM9ITEsci5tb3N0UmVhZGFibGUoZSxbXCIjZmZmXCIsXCIjMDAwXCJdLG4pKX07dmFyIGI9ci5uYW1lcz17YWxpY2VibHVlOlwiZjBmOGZmXCIsYW50aXF1ZXdoaXRlOlwiZmFlYmQ3XCIsYXF1YTpcIjBmZlwiLGFxdWFtYXJpbmU6XCI3ZmZmZDRcIixhenVyZTpcImYwZmZmZlwiLGJlaWdlOlwiZjVmNWRjXCIsYmlzcXVlOlwiZmZlNGM0XCIsYmxhY2s6XCIwMDBcIixibGFuY2hlZGFsbW9uZDpcImZmZWJjZFwiLGJsdWU6XCIwMGZcIixibHVldmlvbGV0OlwiOGEyYmUyXCIsYnJvd246XCJhNTJhMmFcIixidXJseXdvb2Q6XCJkZWI4ODdcIixidXJudHNpZW5uYTpcImVhN2U1ZFwiLGNhZGV0Ymx1ZTpcIjVmOWVhMFwiLGNoYXJ0cmV1c2U6XCI3ZmZmMDBcIixjaG9jb2xhdGU6XCJkMjY5MWVcIixjb3JhbDpcImZmN2Y1MFwiLGNvcm5mbG93ZXJibHVlOlwiNjQ5NWVkXCIsY29ybnNpbGs6XCJmZmY4ZGNcIixjcmltc29uOlwiZGMxNDNjXCIsY3lhbjpcIjBmZlwiLGRhcmtibHVlOlwiMDAwMDhiXCIsZGFya2N5YW46XCIwMDhiOGJcIixkYXJrZ29sZGVucm9kOlwiYjg4NjBiXCIsZGFya2dyYXk6XCJhOWE5YTlcIixkYXJrZ3JlZW46XCIwMDY0MDBcIixkYXJrZ3JleTpcImE5YTlhOVwiLGRhcmtraGFraTpcImJkYjc2YlwiLGRhcmttYWdlbnRhOlwiOGIwMDhiXCIsZGFya29saXZlZ3JlZW46XCI1NTZiMmZcIixkYXJrb3JhbmdlOlwiZmY4YzAwXCIsZGFya29yY2hpZDpcIjk5MzJjY1wiLGRhcmtyZWQ6XCI4YjAwMDBcIixkYXJrc2FsbW9uOlwiZTk5NjdhXCIsZGFya3NlYWdyZWVuOlwiOGZiYzhmXCIsZGFya3NsYXRlYmx1ZTpcIjQ4M2Q4YlwiLGRhcmtzbGF0ZWdyYXk6XCIyZjRmNGZcIixkYXJrc2xhdGVncmV5OlwiMmY0ZjRmXCIsZGFya3R1cnF1b2lzZTpcIjAwY2VkMVwiLGRhcmt2aW9sZXQ6XCI5NDAwZDNcIixkZWVwcGluazpcImZmMTQ5M1wiLGRlZXBza3libHVlOlwiMDBiZmZmXCIsZGltZ3JheTpcIjY5Njk2OVwiLGRpbWdyZXk6XCI2OTY5NjlcIixkb2RnZXJibHVlOlwiMWU5MGZmXCIsZmlyZWJyaWNrOlwiYjIyMjIyXCIsZmxvcmFsd2hpdGU6XCJmZmZhZjBcIixmb3Jlc3RncmVlbjpcIjIyOGIyMlwiLGZ1Y2hzaWE6XCJmMGZcIixnYWluc2Jvcm86XCJkY2RjZGNcIixnaG9zdHdoaXRlOlwiZjhmOGZmXCIsZ29sZDpcImZmZDcwMFwiLGdvbGRlbnJvZDpcImRhYTUyMFwiLGdyYXk6XCI4MDgwODBcIixncmVlbjpcIjAwODAwMFwiLGdyZWVueWVsbG93OlwiYWRmZjJmXCIsZ3JleTpcIjgwODA4MFwiLGhvbmV5ZGV3OlwiZjBmZmYwXCIsaG90cGluazpcImZmNjliNFwiLGluZGlhbnJlZDpcImNkNWM1Y1wiLGluZGlnbzpcIjRiMDA4MlwiLGl2b3J5OlwiZmZmZmYwXCIsa2hha2k6XCJmMGU2OGNcIixsYXZlbmRlcjpcImU2ZTZmYVwiLGxhdmVuZGVyYmx1c2g6XCJmZmYwZjVcIixsYXduZ3JlZW46XCI3Y2ZjMDBcIixsZW1vbmNoaWZmb246XCJmZmZhY2RcIixsaWdodGJsdWU6XCJhZGQ4ZTZcIixsaWdodGNvcmFsOlwiZjA4MDgwXCIsbGlnaHRjeWFuOlwiZTBmZmZmXCIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6XCJmYWZhZDJcIixsaWdodGdyYXk6XCJkM2QzZDNcIixsaWdodGdyZWVuOlwiOTBlZTkwXCIsbGlnaHRncmV5OlwiZDNkM2QzXCIsbGlnaHRwaW5rOlwiZmZiNmMxXCIsbGlnaHRzYWxtb246XCJmZmEwN2FcIixsaWdodHNlYWdyZWVuOlwiMjBiMmFhXCIsbGlnaHRza3libHVlOlwiODdjZWZhXCIsbGlnaHRzbGF0ZWdyYXk6XCI3ODlcIixsaWdodHNsYXRlZ3JleTpcIjc4OVwiLGxpZ2h0c3RlZWxibHVlOlwiYjBjNGRlXCIsbGlnaHR5ZWxsb3c6XCJmZmZmZTBcIixsaW1lOlwiMGYwXCIsbGltZWdyZWVuOlwiMzJjZDMyXCIsbGluZW46XCJmYWYwZTZcIixtYWdlbnRhOlwiZjBmXCIsbWFyb29uOlwiODAwMDAwXCIsbWVkaXVtYXF1YW1hcmluZTpcIjY2Y2RhYVwiLG1lZGl1bWJsdWU6XCIwMDAwY2RcIixtZWRpdW1vcmNoaWQ6XCJiYTU1ZDNcIixtZWRpdW1wdXJwbGU6XCI5MzcwZGJcIixtZWRpdW1zZWFncmVlbjpcIjNjYjM3MVwiLG1lZGl1bXNsYXRlYmx1ZTpcIjdiNjhlZVwiLG1lZGl1bXNwcmluZ2dyZWVuOlwiMDBmYTlhXCIsbWVkaXVtdHVycXVvaXNlOlwiNDhkMWNjXCIsbWVkaXVtdmlvbGV0cmVkOlwiYzcxNTg1XCIsbWlkbmlnaHRibHVlOlwiMTkxOTcwXCIsbWludGNyZWFtOlwiZjVmZmZhXCIsbWlzdHlyb3NlOlwiZmZlNGUxXCIsbW9jY2FzaW46XCJmZmU0YjVcIixuYXZham93aGl0ZTpcImZmZGVhZFwiLG5hdnk6XCIwMDAwODBcIixvbGRsYWNlOlwiZmRmNWU2XCIsb2xpdmU6XCI4MDgwMDBcIixvbGl2ZWRyYWI6XCI2YjhlMjNcIixvcmFuZ2U6XCJmZmE1MDBcIixvcmFuZ2VyZWQ6XCJmZjQ1MDBcIixvcmNoaWQ6XCJkYTcwZDZcIixwYWxlZ29sZGVucm9kOlwiZWVlOGFhXCIscGFsZWdyZWVuOlwiOThmYjk4XCIscGFsZXR1cnF1b2lzZTpcImFmZWVlZVwiLHBhbGV2aW9sZXRyZWQ6XCJkYjcwOTNcIixwYXBheWF3aGlwOlwiZmZlZmQ1XCIscGVhY2hwdWZmOlwiZmZkYWI5XCIscGVydTpcImNkODUzZlwiLHBpbms6XCJmZmMwY2JcIixwbHVtOlwiZGRhMGRkXCIscG93ZGVyYmx1ZTpcImIwZTBlNlwiLHB1cnBsZTpcIjgwMDA4MFwiLHJlYmVjY2FwdXJwbGU6XCI2NjMzOTlcIixyZWQ6XCJmMDBcIixyb3N5YnJvd246XCJiYzhmOGZcIixyb3lhbGJsdWU6XCI0MTY5ZTFcIixzYWRkbGVicm93bjpcIjhiNDUxM1wiLHNhbG1vbjpcImZhODA3MlwiLHNhbmR5YnJvd246XCJmNGE0NjBcIixzZWFncmVlbjpcIjJlOGI1N1wiLHNlYXNoZWxsOlwiZmZmNWVlXCIsc2llbm5hOlwiYTA1MjJkXCIsc2lsdmVyOlwiYzBjMGMwXCIsc2t5Ymx1ZTpcIjg3Y2VlYlwiLHNsYXRlYmx1ZTpcIjZhNWFjZFwiLHNsYXRlZ3JheTpcIjcwODA5MFwiLHNsYXRlZ3JleTpcIjcwODA5MFwiLHNub3c6XCJmZmZhZmFcIixzcHJpbmdncmVlbjpcIjAwZmY3ZlwiLHN0ZWVsYmx1ZTpcIjQ2ODJiNFwiLHRhbjpcImQyYjQ4Y1wiLHRlYWw6XCIwMDgwODBcIix0aGlzdGxlOlwiZDhiZmQ4XCIsdG9tYXRvOlwiZmY2MzQ3XCIsdHVycXVvaXNlOlwiNDBlMGQwXCIsdmlvbGV0OlwiZWU4MmVlXCIsd2hlYXQ6XCJmNWRlYjNcIix3aGl0ZTpcImZmZlwiLHdoaXRlc21va2U6XCJmNWY1ZjVcIix5ZWxsb3c6XCJmZjBcIix5ZWxsb3dncmVlbjpcIjlhY2QzMlwifSx5PXIuaGV4TmFtZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9e307Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbZVtuXV09bik7cmV0dXJuIHR9KGIpO2Z1bmN0aW9uIHgoZSl7cmV0dXJuIGU9cGFyc2VGbG9hdChlKSwoaXNOYU4oZSl8fGU8MHx8ZT4xKSYmKGU9MSksZX1mdW5jdGlvbiBrKGUsdCl7KGZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYtMSE9ZS5pbmRleE9mKFwiLlwiKSYmMT09PXBhcnNlRmxvYXQoZSl9KShlKSYmKGU9XCIxMDAlXCIpO3ZhciBuPWZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYtMSE9ZS5pbmRleE9mKFwiJVwiKX0oZSk7cmV0dXJuIGU9TWF0aC5taW4odCxNYXRoLm1heCgwLHBhcnNlRmxvYXQoZSkpKSxuJiYoZT1wYXJzZUludChlKnQsMTApLzEwMCksTWF0aC5hYnMoZS10KTwxZS02PzE6ZSV0L3BhcnNlRmxvYXQodCl9ZnVuY3Rpb24gUyhlKXtyZXR1cm4gTWF0aC5taW4oMSxNYXRoLm1heCgwLGUpKX1mdW5jdGlvbiBPKGUpe3JldHVybiBwYXJzZUludChlLDE2KX1mdW5jdGlvbiBNKGUpe3JldHVybiAxPT1lLmxlbmd0aD9cIjBcIitlOlwiXCIrZX1mdW5jdGlvbiBMKGUpe3JldHVybiBlPD0xJiYoZT0xMDAqZStcIiVcIiksZX1mdW5jdGlvbiBfKGUpe3JldHVybiBNYXRoLnJvdW5kKDI1NSpwYXJzZUZsb2F0KGUpKS50b1N0cmluZygxNil9ZnVuY3Rpb24gUChlKXtyZXR1cm4gTyhlKS8yNTV9dmFyIEUsaixSLEk9KGo9XCJbXFxcXHN8XFxcXChdKyhcIisoRT1cIig/OlstXFxcXCtdP1xcXFxkKlxcXFwuXFxcXGQrJT8pfCg/OlstXFxcXCtdP1xcXFxkKyU/KVwiKStcIilbLHxcXFxcc10rKFwiK0UrXCIpWyx8XFxcXHNdKyhcIitFK1wiKVxcXFxzKlxcXFwpP1wiLFI9XCJbXFxcXHN8XFxcXChdKyhcIitFK1wiKVssfFxcXFxzXSsoXCIrRStcIilbLHxcXFxcc10rKFwiK0UrXCIpWyx8XFxcXHNdKyhcIitFK1wiKVxcXFxzKlxcXFwpP1wiLHtDU1NfVU5JVDpuZXcgUmVnRXhwKEUpLHJnYjpuZXcgUmVnRXhwKFwicmdiXCIraikscmdiYTpuZXcgUmVnRXhwKFwicmdiYVwiK1IpLGhzbDpuZXcgUmVnRXhwKFwiaHNsXCIraiksaHNsYTpuZXcgUmVnRXhwKFwiaHNsYVwiK1IpLGhzdjpuZXcgUmVnRXhwKFwiaHN2XCIraiksaHN2YTpuZXcgUmVnRXhwKFwiaHN2YVwiK1IpLGhleDM6L14jPyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KSQvLGhleDY6L14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvLGhleDQ6L14jPyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg4Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pJC99KTtmdW5jdGlvbiBWKGUpe3JldHVybiEhSS5DU1NfVU5JVC5leGVjKGUpfXJldHVybiByfSgpfX0sbz17fTtmdW5jdGlvbiBhKGUpe3ZhciB0PW9bZV07aWYodm9pZCAwIT09dClyZXR1cm4gdC5leHBvcnRzO3ZhciBuPW9bZV09e2lkOmUsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiByW2VdLmNhbGwobi5leHBvcnRzLG4sbi5leHBvcnRzLGEpLG4ubG9hZGVkPSEwLG4uZXhwb3J0c31hLm49ZT0+e3ZhciB0PWUmJmUuX19lc01vZHVsZT8oKT0+ZS5kZWZhdWx0OigpPT5lO3JldHVybiBhLmQodCx7YTp0fSksdH0sYS5kPShlLHQpPT57Zm9yKHZhciBuIGluIHQpYS5vKHQsbikmJiFhLm8oZSxuKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSxhLmc9ZnVuY3Rpb24oKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2goZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxhLm89KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpLGEucj1lPT57XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sYS5ubWQ9ZT0+KGUucGF0aHM9W10sZS5jaGlsZHJlbnx8KGUuY2hpbGRyZW49W10pLGUpO3ZhciBpPWEoMzQxKSxsPXQ7Zm9yKHZhciBzIGluIGkpbFtzXT1pW3NdO2kuX19lc01vZHVsZSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LDE5ODooZSx0LG4pPT57dmFyIHI9TmFOLG89XCJbb2JqZWN0IFN5bWJvbF1cIixhPS9eXFxzK3xcXHMrJC9nLGk9L15bLStdMHhbMC05YS1mXSskL2ksbD0vXjBiWzAxXSskL2kscz0vXjBvWzAtN10rJC9pLGM9cGFyc2VJbnQsdT1cIm9iamVjdFwiPT10eXBlb2Ygbi5nJiZuLmcmJm4uZy5PYmplY3Q9PT1PYmplY3QmJm4uZyxkPVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixwPXV8fGR8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxmPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaD1NYXRoLm1heCxnPU1hdGgubWluLHY9ZnVuY3Rpb24oKXtyZXR1cm4gcC5EYXRlLm5vdygpfTtmdW5jdGlvbiBDKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiEhZSYmKFwib2JqZWN0XCI9PXR8fFwiZnVuY3Rpb25cIj09dCl9ZnVuY3Rpb24gbShlKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSlyZXR1cm4gZTtpZihmdW5jdGlvbihlKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZXx8ZnVuY3Rpb24oZSl7cmV0dXJuISFlJiZcIm9iamVjdFwiPT10eXBlb2YgZX0oZSkmJmYuY2FsbChlKT09b30oZSkpcmV0dXJuIHI7aWYoQyhlKSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZS52YWx1ZU9mP2UudmFsdWVPZigpOmU7ZT1DKHQpP3QrXCJcIjp0fWlmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybiAwPT09ZT9lOitlO2U9ZS5yZXBsYWNlKGEsXCJcIik7dmFyIG49bC50ZXN0KGUpO3JldHVybiBufHxzLnRlc3QoZSk/YyhlLnNsaWNlKDIpLG4/Mjo4KTppLnRlc3QoZSk/cjorZX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8sYSxpLGwscyxjPTAsdT0hMSxkPSExLHA9ITA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiKTtmdW5jdGlvbiBmKHQpe3ZhciBuPXIsYT1vO3JldHVybiByPW89dm9pZCAwLGM9dCxpPWUuYXBwbHkoYSxuKX1mdW5jdGlvbiB3KGUpe3ZhciBuPWUtcztyZXR1cm4gdm9pZCAwPT09c3x8bj49dHx8bjwwfHxkJiZlLWM+PWF9ZnVuY3Rpb24gYigpe3ZhciBlPXYoKTtpZih3KGUpKXJldHVybiB5KGUpO2w9c2V0VGltZW91dChiLGZ1bmN0aW9uKGUpe3ZhciBuPXQtKGUtcyk7cmV0dXJuIGQ/ZyhuLGEtKGUtYykpOm59KGUpKX1mdW5jdGlvbiB5KGUpe3JldHVybiBsPXZvaWQgMCxwJiZyP2YoZSk6KHI9bz12b2lkIDAsaSl9ZnVuY3Rpb24geCgpe3ZhciBlPXYoKSxuPXcoZSk7aWYocj1hcmd1bWVudHMsbz10aGlzLHM9ZSxuKXtpZih2b2lkIDA9PT1sKXJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gYz1lLGw9c2V0VGltZW91dChiLHQpLHU/ZihlKTppfShzKTtpZihkKXJldHVybiBsPXNldFRpbWVvdXQoYix0KSxmKHMpfXJldHVybiB2b2lkIDA9PT1sJiYobD1zZXRUaW1lb3V0KGIsdCkpLGl9cmV0dXJuIHQ9bSh0KXx8MCxDKG4pJiYodT0hIW4ubGVhZGluZyxhPShkPVwibWF4V2FpdFwiaW4gbik/aChtKG4ubWF4V2FpdCl8fDAsdCk6YSxwPVwidHJhaWxpbmdcImluIG4/ISFuLnRyYWlsaW5nOnApLHguY2FuY2VsPWZ1bmN0aW9uKCl7dm9pZCAwIT09bCYmY2xlYXJUaW1lb3V0KGwpLGM9MCxyPXM9bz1sPXZvaWQgMH0seC5mbHVzaD1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1sP2k6eSh2KCkpfSx4fX0sNTI1OmU9PntcInVzZSBzdHJpY3RcIjt2YXIgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxyPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciBlPW5ldyBTdHJpbmcoXCJhYmNcIik7aWYoZVs1XT1cImRlXCIsXCI1XCI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKVswXSlyZXR1cm4hMTtmb3IodmFyIHQ9e30sbj0wO248MTA7bisrKXRbXCJfXCIrU3RyaW5nLmZyb21DaGFyQ29kZShuKV09bjtpZihcIjAxMjM0NTY3ODlcIiE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSkuam9pbihcIlwiKSlyZXR1cm4hMTt2YXIgcj17fTtyZXR1cm5cImFiY2RlZmdoaWprbG1ub3BxcnN0XCIuc3BsaXQoXCJcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cltlXT1lfSkpLFwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIj09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30scikpLmpvaW4oXCJcIil9Y2F0Y2goZSl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24oZSxvKXtmb3IodmFyIGEsaSxsPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBPYmplY3QoZSl9KGUpLHM9MTtzPGFyZ3VtZW50cy5sZW5ndGg7cysrKXtmb3IodmFyIGMgaW4gYT1PYmplY3QoYXJndW1lbnRzW3NdKSluLmNhbGwoYSxjKSYmKGxbY109YVtjXSk7aWYodCl7aT10KGEpO2Zvcih2YXIgdT0wO3U8aS5sZW5ndGg7dSsrKXIuY2FsbChhLGlbdV0pJiYobFtpW3VdXT1hW2lbdV1dKX19cmV0dXJuIGx9fSw3MDI6KGUsdCk9PntcInVzZSBzdHJpY3RcIjt2YXIgbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Iscj1uP1N5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpOjYwMTAzLG89bj9TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpOjYwMTA2LGE9bj9TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIik6NjAxMDcsaT1uP1N5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTo2MDEwOCxsPW4/U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpOjYwMTE0LHM9bj9TeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik6NjAxMDksYz1uP1N5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpOjYwMTEwLHU9bj9TeW1ib2wuZm9yKFwicmVhY3QuYXN5bmNfbW9kZVwiKTo2MDExMSxkPW4/U3ltYm9sLmZvcihcInJlYWN0LmNvbmN1cnJlbnRfbW9kZVwiKTo2MDExMSxwPW4/U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpOjYwMTEyLGY9bj9TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIik6NjAxMTMsaD1uP1N5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpOjYwMTIwLGc9bj9TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKTo2MDExNSx2PW4/U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik6NjAxMTYsQz1uP1N5bWJvbC5mb3IoXCJyZWFjdC5ibG9ja1wiKTo2MDEyMSxtPW4/U3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpOjYwMTE3LHc9bj9TeW1ib2wuZm9yKFwicmVhY3QucmVzcG9uZGVyXCIpOjYwMTE4LGI9bj9TeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIik6NjAxMTk7ZnVuY3Rpb24geShlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUpe3ZhciB0PWUuJCR0eXBlb2Y7c3dpdGNoKHQpe2Nhc2Ugcjpzd2l0Y2goZT1lLnR5cGUpe2Nhc2UgdTpjYXNlIGQ6Y2FzZSBhOmNhc2UgbDpjYXNlIGk6Y2FzZSBmOnJldHVybiBlO2RlZmF1bHQ6c3dpdGNoKGU9ZSYmZS4kJHR5cGVvZil7Y2FzZSBjOmNhc2UgcDpjYXNlIHY6Y2FzZSBnOmNhc2UgczpyZXR1cm4gZTtkZWZhdWx0OnJldHVybiB0fX1jYXNlIG86cmV0dXJuIHR9fX1mdW5jdGlvbiB4KGUpe3JldHVybiB5KGUpPT09ZH10LkZvcndhcmRSZWY9cCx0LmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZXx8ZT09PWF8fGU9PT1kfHxlPT09bHx8ZT09PWl8fGU9PT1mfHxlPT09aHx8XCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiYoZS4kJHR5cGVvZj09PXZ8fGUuJCR0eXBlb2Y9PT1nfHxlLiQkdHlwZW9mPT09c3x8ZS4kJHR5cGVvZj09PWN8fGUuJCR0eXBlb2Y9PT1wfHxlLiQkdHlwZW9mPT09bXx8ZS4kJHR5cGVvZj09PXd8fGUuJCR0eXBlb2Y9PT1ifHxlLiQkdHlwZW9mPT09Qyl9fSwxODU6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1uKDcwMil9LDUzNTooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9big1MjUpLG89NjAxMDMsYT02MDEwNjt0LkZyYWdtZW50PTYwMTA3LHQuU3RyaWN0TW9kZT02MDEwOCx0LlByb2ZpbGVyPTYwMTE0O3ZhciBpPTYwMTA5LGw9NjAxMTAscz02MDExMjt0LlN1c3BlbnNlPTYwMTEzO3ZhciBjPTYwMTE1LHU9NjAxMTY7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yKXt2YXIgZD1TeW1ib2wuZm9yO289ZChcInJlYWN0LmVsZW1lbnRcIiksYT1kKFwicmVhY3QucG9ydGFsXCIpLHQuRnJhZ21lbnQ9ZChcInJlYWN0LmZyYWdtZW50XCIpLHQuU3RyaWN0TW9kZT1kKFwicmVhY3Quc3RyaWN0X21vZGVcIiksdC5Qcm9maWxlcj1kKFwicmVhY3QucHJvZmlsZXJcIiksaT1kKFwicmVhY3QucHJvdmlkZXJcIiksbD1kKFwicmVhY3QuY29udGV4dFwiKSxzPWQoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSx0LlN1c3BlbnNlPWQoXCJyZWFjdC5zdXNwZW5zZVwiKSxjPWQoXCJyZWFjdC5tZW1vXCIpLHU9ZChcInJlYWN0LmxhenlcIil9dmFyIHA9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I7ZnVuY3Rpb24gZihlKXtmb3IodmFyIHQ9XCJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD1cIitlLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXQrPVwiJmFyZ3NbXT1cIitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW25dKTtyZXR1cm5cIk1pbmlmaWVkIFJlYWN0IGVycm9yICNcIitlK1wiOyB2aXNpdCBcIit0K1wiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5cIn12YXIgaD17aXNNb3VudGVkOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKCl7fX0sZz17fTtmdW5jdGlvbiB2KGUsdCxuKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPWcsdGhpcy51cGRhdGVyPW58fGh9ZnVuY3Rpb24gQygpe31mdW5jdGlvbiBtKGUsdCxuKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPWcsdGhpcy51cGRhdGVyPW58fGh9di5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fSx2LnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT1lKXRocm93IEVycm9yKGYoODUpKTt0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsZSx0LFwic2V0U3RhdGVcIil9LHYucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcyxlLFwiZm9yY2VVcGRhdGVcIil9LEMucHJvdG90eXBlPXYucHJvdG90eXBlO3ZhciB3PW0ucHJvdG90eXBlPW5ldyBDO3cuY29uc3RydWN0b3I9bSxyKHcsdi5wcm90b3R5cGUpLHcuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIGI9e2N1cnJlbnQ6bnVsbH0seT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHg9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtmdW5jdGlvbiBrKGUsdCxuKXt2YXIgcixhPXt9LGk9bnVsbCxsPW51bGw7aWYobnVsbCE9dClmb3IociBpbiB2b2lkIDAhPT10LnJlZiYmKGw9dC5yZWYpLHZvaWQgMCE9PXQua2V5JiYoaT1cIlwiK3Qua2V5KSx0KXkuY2FsbCh0LHIpJiYheC5oYXNPd25Qcm9wZXJ0eShyKSYmKGFbcl09dFtyXSk7dmFyIHM9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT1zKWEuY2hpbGRyZW49bjtlbHNlIGlmKDE8cyl7Zm9yKHZhciBjPUFycmF5KHMpLHU9MDt1PHM7dSsrKWNbdV09YXJndW1lbnRzW3UrMl07YS5jaGlsZHJlbj1jfWlmKGUmJmUuZGVmYXVsdFByb3BzKWZvcihyIGluIHM9ZS5kZWZhdWx0UHJvcHMpdm9pZCAwPT09YVtyXSYmKGFbcl09c1tyXSk7cmV0dXJueyQkdHlwZW9mOm8sdHlwZTplLGtleTppLHJlZjpsLHByb3BzOmEsX293bmVyOmIuY3VycmVudH19ZnVuY3Rpb24gUyhlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUmJmUuJCR0eXBlb2Y9PT1vfXZhciBPPS9cXC8rL2c7ZnVuY3Rpb24gTShlLHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmbnVsbCE9ZS5rZXk/ZnVuY3Rpb24oZSl7dmFyIHQ9e1wiPVwiOlwiPTBcIixcIjpcIjpcIj0yXCJ9O3JldHVyblwiJFwiK2UucmVwbGFjZSgvWz06XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKX0oXCJcIitlLmtleSk6dC50b1N0cmluZygzNil9ZnVuY3Rpb24gTChlLHQsbixyLGkpe3ZhciBsPXR5cGVvZiBlO1widW5kZWZpbmVkXCIhPT1sJiZcImJvb2xlYW5cIiE9PWx8fChlPW51bGwpO3ZhciBzPSExO2lmKG51bGw9PT1lKXM9ITA7ZWxzZSBzd2l0Y2gobCl7Y2FzZVwic3RyaW5nXCI6Y2FzZVwibnVtYmVyXCI6cz0hMDticmVhaztjYXNlXCJvYmplY3RcIjpzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSBvOmNhc2UgYTpzPSEwfX1pZihzKXJldHVybiBpPWkocz1lKSxlPVwiXCI9PT1yP1wiLlwiK00ocywwKTpyLEFycmF5LmlzQXJyYXkoaSk/KG49XCJcIixudWxsIT1lJiYobj1lLnJlcGxhY2UoTyxcIiQmL1wiKStcIi9cIiksTChpLHQsbixcIlwiLChmdW5jdGlvbihlKXtyZXR1cm4gZX0pKSk6bnVsbCE9aSYmKFMoaSkmJihpPWZ1bmN0aW9uKGUsdCl7cmV0dXJueyQkdHlwZW9mOm8sdHlwZTplLnR5cGUsa2V5OnQscmVmOmUucmVmLHByb3BzOmUucHJvcHMsX293bmVyOmUuX293bmVyfX0oaSxuKyghaS5rZXl8fHMmJnMua2V5PT09aS5rZXk/XCJcIjooXCJcIitpLmtleSkucmVwbGFjZShPLFwiJCYvXCIpK1wiL1wiKStlKSksdC5wdXNoKGkpKSwxO2lmKHM9MCxyPVwiXCI9PT1yP1wiLlwiOnIrXCI6XCIsQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIGM9MDtjPGUubGVuZ3RoO2MrKyl7dmFyIHU9citNKGw9ZVtjXSxjKTtzKz1MKGwsdCxuLHUsaSl9ZWxzZSBpZih1PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZXx8XCJvYmplY3RcIiE9dHlwZW9mIGU/bnVsbDpcImZ1bmN0aW9uXCI9PXR5cGVvZihlPXAmJmVbcF18fGVbXCJAQGl0ZXJhdG9yXCJdKT9lOm51bGx9KGUpLFwiZnVuY3Rpb25cIj09dHlwZW9mIHUpZm9yKGU9dS5jYWxsKGUpLGM9MDshKGw9ZS5uZXh0KCkpLmRvbmU7KXMrPUwobD1sLnZhbHVlLHQsbix1PXIrTShsLGMrKyksaSk7ZWxzZSBpZihcIm9iamVjdFwiPT09bCl0aHJvdyB0PVwiXCIrZSxFcnJvcihmKDMxLFwiW29iamVjdCBPYmplY3RdXCI9PT10P1wib2JqZWN0IHdpdGgga2V5cyB7XCIrT2JqZWN0LmtleXMoZSkuam9pbihcIiwgXCIpK1wifVwiOnQpKTtyZXR1cm4gc31mdW5jdGlvbiBfKGUsdCxuKXtpZihudWxsPT1lKXJldHVybiBlO3ZhciByPVtdLG89MDtyZXR1cm4gTChlLHIsXCJcIixcIlwiLChmdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKG4sZSxvKyspfSkpLHJ9ZnVuY3Rpb24gUChlKXtpZigtMT09PWUuX3N0YXR1cyl7dmFyIHQ9ZS5fcmVzdWx0O3Q9dCgpLGUuX3N0YXR1cz0wLGUuX3Jlc3VsdD10LHQudGhlbigoZnVuY3Rpb24odCl7MD09PWUuX3N0YXR1cyYmKHQ9dC5kZWZhdWx0LGUuX3N0YXR1cz0xLGUuX3Jlc3VsdD10KX0pLChmdW5jdGlvbih0KXswPT09ZS5fc3RhdHVzJiYoZS5fc3RhdHVzPTIsZS5fcmVzdWx0PXQpfSkpfWlmKDE9PT1lLl9zdGF0dXMpcmV0dXJuIGUuX3Jlc3VsdDt0aHJvdyBlLl9yZXN1bHR9dmFyIEU9e2N1cnJlbnQ6bnVsbH07ZnVuY3Rpb24gaigpe3ZhciBlPUUuY3VycmVudDtpZihudWxsPT09ZSl0aHJvdyBFcnJvcihmKDMyMSkpO3JldHVybiBlfXZhciBSPXtSZWFjdEN1cnJlbnREaXNwYXRjaGVyOkUsUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6e3RyYW5zaXRpb246MH0sUmVhY3RDdXJyZW50T3duZXI6YixJc1NvbWVSZW5kZXJlckFjdGluZzp7Y3VycmVudDohMX0sYXNzaWduOnJ9O3QuQ2hpbGRyZW49e21hcDpfLGZvckVhY2g6ZnVuY3Rpb24oZSx0LG4pe18oZSwoZnVuY3Rpb24oKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLG4pfSxjb3VudDpmdW5jdGlvbihlKXt2YXIgdD0wO3JldHVybiBfKGUsKGZ1bmN0aW9uKCl7dCsrfSkpLHR9LHRvQXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIF8oZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSl8fFtdfSxvbmx5OmZ1bmN0aW9uKGUpe2lmKCFTKGUpKXRocm93IEVycm9yKGYoMTQzKSk7cmV0dXJuIGV9fSx0LkNvbXBvbmVudD12LHQuUHVyZUNvbXBvbmVudD1tLHQuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9Uix0LmNsb25lRWxlbWVudD1mdW5jdGlvbihlLHQsbil7aWYobnVsbD09ZSl0aHJvdyBFcnJvcihmKDI2NyxlKSk7dmFyIGE9cih7fSxlLnByb3BzKSxpPWUua2V5LGw9ZS5yZWYscz1lLl9vd25lcjtpZihudWxsIT10KXtpZih2b2lkIDAhPT10LnJlZiYmKGw9dC5yZWYscz1iLmN1cnJlbnQpLHZvaWQgMCE9PXQua2V5JiYoaT1cIlwiK3Qua2V5KSxlLnR5cGUmJmUudHlwZS5kZWZhdWx0UHJvcHMpdmFyIGM9ZS50eXBlLmRlZmF1bHRQcm9wcztmb3IodSBpbiB0KXkuY2FsbCh0LHUpJiYheC5oYXNPd25Qcm9wZXJ0eSh1KSYmKGFbdV09dm9pZCAwPT09dFt1XSYmdm9pZCAwIT09Yz9jW3VdOnRbdV0pfXZhciB1PWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09dSlhLmNoaWxkcmVuPW47ZWxzZSBpZigxPHUpe2M9QXJyYXkodSk7Zm9yKHZhciBkPTA7ZDx1O2QrKyljW2RdPWFyZ3VtZW50c1tkKzJdO2EuY2hpbGRyZW49Y31yZXR1cm57JCR0eXBlb2Y6byx0eXBlOmUudHlwZSxrZXk6aSxyZWY6bCxwcm9wczphLF9vd25lcjpzfX0sdC5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PW51bGwpLChlPXskJHR5cGVvZjpsLF9jYWxjdWxhdGVDaGFuZ2VkQml0czp0LF9jdXJyZW50VmFsdWU6ZSxfY3VycmVudFZhbHVlMjplLF90aHJlYWRDb3VudDowLFByb3ZpZGVyOm51bGwsQ29uc3VtZXI6bnVsbH0pLlByb3ZpZGVyPXskJHR5cGVvZjppLF9jb250ZXh0OmV9LGUuQ29uc3VtZXI9ZX0sdC5jcmVhdGVFbGVtZW50PWssdC5jcmVhdGVGYWN0b3J5PWZ1bmN0aW9uKGUpe3ZhciB0PWsuYmluZChudWxsLGUpO3JldHVybiB0LnR5cGU9ZSx0fSx0LmNyZWF0ZVJlZj1mdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGx9fSx0LmZvcndhcmRSZWY9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOnMscmVuZGVyOmV9fSx0LmlzVmFsaWRFbGVtZW50PVMsdC5sYXp5PWZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjp1LF9wYXlsb2FkOntfc3RhdHVzOi0xLF9yZXN1bHQ6ZX0sX2luaXQ6UH19LHQubWVtbz1mdW5jdGlvbihlLHQpe3JldHVybnskJHR5cGVvZjpjLHR5cGU6ZSxjb21wYXJlOnZvaWQgMD09PXQ/bnVsbDp0fX0sdC51c2VDYWxsYmFjaz1mdW5jdGlvbihlLHQpe3JldHVybiBqKCkudXNlQ2FsbGJhY2soZSx0KX0sdC51c2VDb250ZXh0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGooKS51c2VDb250ZXh0KGUsdCl9LHQudXNlRGVidWdWYWx1ZT1mdW5jdGlvbigpe30sdC51c2VFZmZlY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaigpLnVzZUVmZmVjdChlLHQpfSx0LnVzZUltcGVyYXRpdmVIYW5kbGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBqKCkudXNlSW1wZXJhdGl2ZUhhbmRsZShlLHQsbil9LHQudXNlTGF5b3V0RWZmZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGooKS51c2VMYXlvdXRFZmZlY3QoZSx0KX0sdC51c2VNZW1vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGooKS51c2VNZW1vKGUsdCl9LHQudXNlUmVkdWNlcj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGooKS51c2VSZWR1Y2VyKGUsdCxuKX0sdC51c2VSZWY9ZnVuY3Rpb24oZSl7cmV0dXJuIGooKS51c2VSZWYoZSl9LHQudXNlU3RhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGooKS51c2VTdGF0ZShlKX0sdC52ZXJzaW9uPVwiMTcuMC4yXCJ9LDM3ODooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPW4oNTM1KX0sOTIxOihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLnIodCksbi5kKHQse1NlcnZlclN0eWxlU2hlZXQ6KCk9PmZ0LFN0eWxlU2hlZXRDb25zdW1lcjooKT0+Z3QsU3R5bGVTaGVldENvbnRleHQ6KCk9Pmh0LFN0eWxlU2hlZXRNYW5hZ2VyOigpPT52dCxUaGVtZUNvbnN1bWVyOigpPT5kdCxUaGVtZUNvbnRleHQ6KCk9PnV0LFRoZW1lUHJvdmlkZXI6KCk9PnB0LF9fRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9IQVVOVEVEX0JZX1NQT09LWV9HSE9TVFM6KCk9Pk10LGNyZWF0ZUdsb2JhbFN0eWxlOigpPT54dCxjc3M6KCk9PlRlLGRlZmF1bHQ6KCk9Pkx0LGlzU3R5bGVkQ29tcG9uZW50OigpPT5OLGtleWZyYW1lczooKT0+U3Qsd2l0aFRoZW1lOigpPT5PdH0pO3ZhciByPW4oOTQ2KSxvPW4ubihyKSxhPW4oMjQ2KSxpPW4ubihhKSxsPW4oMzc4KTtjb25zdCBzPXthbmltYXRpb25JdGVyYXRpb25Db3VudDoxLGJvcmRlckltYWdlT3V0c2V0OjEsYm9yZGVySW1hZ2VTbGljZToxLGJvcmRlckltYWdlV2lkdGg6MSxib3hGbGV4OjEsYm94RmxleEdyb3VwOjEsYm94T3JkaW5hbEdyb3VwOjEsY29sdW1uQ291bnQ6MSxjb2x1bW5zOjEsZmxleDoxLGZsZXhHcm93OjEsZmxleFBvc2l0aXZlOjEsZmxleFNocmluazoxLGZsZXhOZWdhdGl2ZToxLGZsZXhPcmRlcjoxLGdyaWRSb3c6MSxncmlkUm93RW5kOjEsZ3JpZFJvd1NwYW46MSxncmlkUm93U3RhcnQ6MSxncmlkQ29sdW1uOjEsZ3JpZENvbHVtbkVuZDoxLGdyaWRDb2x1bW5TcGFuOjEsZ3JpZENvbHVtblN0YXJ0OjEsbXNHcmlkUm93OjEsbXNHcmlkUm93U3BhbjoxLG1zR3JpZENvbHVtbjoxLG1zR3JpZENvbHVtblNwYW46MSxmb250V2VpZ2h0OjEsbGluZUhlaWdodDoxLG9wYWNpdHk6MSxvcmRlcjoxLG9ycGhhbnM6MSx0YWJTaXplOjEsd2lkb3dzOjEsekluZGV4OjEsem9vbToxLFdlYmtpdExpbmVDbGFtcDoxLGZpbGxPcGFjaXR5OjEsZmxvb2RPcGFjaXR5OjEsc3RvcE9wYWNpdHk6MSxzdHJva2VEYXNoYXJyYXk6MSxzdHJva2VEYXNob2Zmc2V0OjEsc3Ryb2tlTWl0ZXJsaW1pdDoxLHN0cm9rZU9wYWNpdHk6MSxzdHJva2VXaWR0aDoxfTt2YXIgYz1uKDE4NSksdT1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZlIT1lfTtmdW5jdGlvbiBkKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihyPWVbbl0sbz10W25dLCEocj09PW98fHUocikmJnUobykpKXJldHVybiExO3ZhciByLG87cmV0dXJuITB9Y29uc3QgcD1mdW5jdGlvbihlLHQpe3ZhciBuO3ZvaWQgMD09PXQmJih0PWQpO3ZhciByLG89W10sYT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGk9W10sbD0wO2w8YXJndW1lbnRzLmxlbmd0aDtsKyspaVtsXT1hcmd1bWVudHNbbF07cmV0dXJuIGEmJm49PT10aGlzJiZ0KGksbyl8fChyPWUuYXBwbHkodGhpcyxpKSxhPSEwLG49dGhpcyxvPWkpLHJ9fTt2YXIgZj0vXigoY2hpbGRyZW58ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUx8a2V5fHJlZnxhdXRvRm9jdXN8ZGVmYXVsdFZhbHVlfGRlZmF1bHRDaGVja2VkfGlubmVySFRNTHxzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmd8c3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nfHZhbHVlTGlua3xhY2NlcHR8YWNjZXB0Q2hhcnNldHxhY2Nlc3NLZXl8YWN0aW9ufGFsbG93fGFsbG93VXNlck1lZGlhfGFsbG93UGF5bWVudFJlcXVlc3R8YWxsb3dGdWxsU2NyZWVufGFsbG93VHJhbnNwYXJlbmN5fGFsdHxhc3luY3xhdXRvQ29tcGxldGV8YXV0b1BsYXl8Y2FwdHVyZXxjZWxsUGFkZGluZ3xjZWxsU3BhY2luZ3xjaGFsbGVuZ2V8Y2hhclNldHxjaGVja2VkfGNpdGV8Y2xhc3NJRHxjbGFzc05hbWV8Y29sc3xjb2xTcGFufGNvbnRlbnR8Y29udGVudEVkaXRhYmxlfGNvbnRleHRNZW51fGNvbnRyb2xzfGNvbnRyb2xzTGlzdHxjb29yZHN8Y3Jvc3NPcmlnaW58ZGF0YXxkYXRlVGltZXxkZWNvZGluZ3xkZWZhdWx0fGRlZmVyfGRpcnxkaXNhYmxlZHxkaXNhYmxlUGljdHVyZUluUGljdHVyZXxkb3dubG9hZHxkcmFnZ2FibGV8ZW5jVHlwZXxmb3JtfGZvcm1BY3Rpb258Zm9ybUVuY1R5cGV8Zm9ybU1ldGhvZHxmb3JtTm9WYWxpZGF0ZXxmb3JtVGFyZ2V0fGZyYW1lQm9yZGVyfGhlYWRlcnN8aGVpZ2h0fGhpZGRlbnxoaWdofGhyZWZ8aHJlZkxhbmd8aHRtbEZvcnxodHRwRXF1aXZ8aWR8aW5wdXRNb2RlfGludGVncml0eXxpc3xrZXlQYXJhbXN8a2V5VHlwZXxraW5kfGxhYmVsfGxhbmd8bGlzdHxsb2FkaW5nfGxvb3B8bG93fG1hcmdpbkhlaWdodHxtYXJnaW5XaWR0aHxtYXh8bWF4TGVuZ3RofG1lZGlhfG1lZGlhR3JvdXB8bWV0aG9kfG1pbnxtaW5MZW5ndGh8bXVsdGlwbGV8bXV0ZWR8bmFtZXxub25jZXxub1ZhbGlkYXRlfG9wZW58b3B0aW11bXxwYXR0ZXJufHBsYWNlaG9sZGVyfHBsYXlzSW5saW5lfHBvc3RlcnxwcmVsb2FkfHByb2ZpbGV8cmFkaW9Hcm91cHxyZWFkT25seXxyZWZlcnJlclBvbGljeXxyZWx8cmVxdWlyZWR8cmV2ZXJzZWR8cm9sZXxyb3dzfHJvd1NwYW58c2FuZGJveHxzY29wZXxzY29wZWR8c2Nyb2xsaW5nfHNlYW1sZXNzfHNlbGVjdGVkfHNoYXBlfHNpemV8c2l6ZXN8c2xvdHxzcGFufHNwZWxsQ2hlY2t8c3JjfHNyY0RvY3xzcmNMYW5nfHNyY1NldHxzdGFydHxzdGVwfHN0eWxlfHN1bW1hcnl8dGFiSW5kZXh8dGFyZ2V0fHRpdGxlfHR5cGV8dXNlTWFwfHZhbHVlfHdpZHRofHdtb2RlfHdyYXB8YWJvdXR8ZGF0YXR5cGV8aW5saXN0fHByZWZpeHxwcm9wZXJ0eXxyZXNvdXJjZXx0eXBlb2Z8dm9jYWJ8YXV0b0NhcGl0YWxpemV8YXV0b0NvcnJlY3R8YXV0b1NhdmV8Y29sb3J8aW5lcnR8aXRlbVByb3B8aXRlbVNjb3BlfGl0ZW1UeXBlfGl0ZW1JRHxpdGVtUmVmfG9ufHJlc3VsdHN8c2VjdXJpdHl8dW5zZWxlY3RhYmxlfGFjY2VudEhlaWdodHxhY2N1bXVsYXRlfGFkZGl0aXZlfGFsaWdubWVudEJhc2VsaW5lfGFsbG93UmVvcmRlcnxhbHBoYWJldGljfGFtcGxpdHVkZXxhcmFiaWNGb3JtfGFzY2VudHxhdHRyaWJ1dGVOYW1lfGF0dHJpYnV0ZVR5cGV8YXV0b1JldmVyc2V8YXppbXV0aHxiYXNlRnJlcXVlbmN5fGJhc2VsaW5lU2hpZnR8YmFzZVByb2ZpbGV8YmJveHxiZWdpbnxiaWFzfGJ5fGNhbGNNb2RlfGNhcEhlaWdodHxjbGlwfGNsaXBQYXRoVW5pdHN8Y2xpcFBhdGh8Y2xpcFJ1bGV8Y29sb3JJbnRlcnBvbGF0aW9ufGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnN8Y29sb3JQcm9maWxlfGNvbG9yUmVuZGVyaW5nfGNvbnRlbnRTY3JpcHRUeXBlfGNvbnRlbnRTdHlsZVR5cGV8Y3Vyc29yfGN4fGN5fGR8ZGVjZWxlcmF0ZXxkZXNjZW50fGRpZmZ1c2VDb25zdGFudHxkaXJlY3Rpb258ZGlzcGxheXxkaXZpc29yfGRvbWluYW50QmFzZWxpbmV8ZHVyfGR4fGR5fGVkZ2VNb2RlfGVsZXZhdGlvbnxlbmFibGVCYWNrZ3JvdW5kfGVuZHxleHBvbmVudHxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkfGZpbGx8ZmlsbE9wYWNpdHl8ZmlsbFJ1bGV8ZmlsdGVyfGZpbHRlclJlc3xmaWx0ZXJVbml0c3xmbG9vZENvbG9yfGZsb29kT3BhY2l0eXxmb2N1c2FibGV8Zm9udEZhbWlseXxmb250U2l6ZXxmb250U2l6ZUFkanVzdHxmb250U3RyZXRjaHxmb250U3R5bGV8Zm9udFZhcmlhbnR8Zm9udFdlaWdodHxmb3JtYXR8ZnJvbXxmcnxmeHxmeXxnMXxnMnxnbHlwaE5hbWV8Z2x5cGhPcmllbnRhdGlvbkhvcml6b250YWx8Z2x5cGhPcmllbnRhdGlvblZlcnRpY2FsfGdseXBoUmVmfGdyYWRpZW50VHJhbnNmb3JtfGdyYWRpZW50VW5pdHN8aGFuZ2luZ3xob3JpekFkdlh8aG9yaXpPcmlnaW5YfGlkZW9ncmFwaGljfGltYWdlUmVuZGVyaW5nfGlufGluMnxpbnRlcmNlcHR8a3xrMXxrMnxrM3xrNHxrZXJuZWxNYXRyaXh8a2VybmVsVW5pdExlbmd0aHxrZXJuaW5nfGtleVBvaW50c3xrZXlTcGxpbmVzfGtleVRpbWVzfGxlbmd0aEFkanVzdHxsZXR0ZXJTcGFjaW5nfGxpZ2h0aW5nQ29sb3J8bGltaXRpbmdDb25lQW5nbGV8bG9jYWx8bWFya2VyRW5kfG1hcmtlck1pZHxtYXJrZXJTdGFydHxtYXJrZXJIZWlnaHR8bWFya2VyVW5pdHN8bWFya2VyV2lkdGh8bWFza3xtYXNrQ29udGVudFVuaXRzfG1hc2tVbml0c3xtYXRoZW1hdGljYWx8bW9kZXxudW1PY3RhdmVzfG9mZnNldHxvcGFjaXR5fG9wZXJhdG9yfG9yZGVyfG9yaWVudHxvcmllbnRhdGlvbnxvcmlnaW58b3ZlcmZsb3d8b3ZlcmxpbmVQb3NpdGlvbnxvdmVybGluZVRoaWNrbmVzc3xwYW5vc2UxfHBhaW50T3JkZXJ8cGF0aExlbmd0aHxwYXR0ZXJuQ29udGVudFVuaXRzfHBhdHRlcm5UcmFuc2Zvcm18cGF0dGVyblVuaXRzfHBvaW50ZXJFdmVudHN8cG9pbnRzfHBvaW50c0F0WHxwb2ludHNBdFl8cG9pbnRzQXRafHByZXNlcnZlQWxwaGF8cHJlc2VydmVBc3BlY3RSYXRpb3xwcmltaXRpdmVVbml0c3xyfHJhZGl1c3xyZWZYfHJlZll8cmVuZGVyaW5nSW50ZW50fHJlcGVhdENvdW50fHJlcGVhdER1cnxyZXF1aXJlZEV4dGVuc2lvbnN8cmVxdWlyZWRGZWF0dXJlc3xyZXN0YXJ0fHJlc3VsdHxyb3RhdGV8cnh8cnl8c2NhbGV8c2VlZHxzaGFwZVJlbmRlcmluZ3xzbG9wZXxzcGFjaW5nfHNwZWN1bGFyQ29uc3RhbnR8c3BlY3VsYXJFeHBvbmVudHxzcGVlZHxzcHJlYWRNZXRob2R8c3RhcnRPZmZzZXR8c3RkRGV2aWF0aW9ufHN0ZW1ofHN0ZW12fHN0aXRjaFRpbGVzfHN0b3BDb2xvcnxzdG9wT3BhY2l0eXxzdHJpa2V0aHJvdWdoUG9zaXRpb258c3RyaWtldGhyb3VnaFRoaWNrbmVzc3xzdHJpbmd8c3Ryb2tlfHN0cm9rZURhc2hhcnJheXxzdHJva2VEYXNob2Zmc2V0fHN0cm9rZUxpbmVjYXB8c3Ryb2tlTGluZWpvaW58c3Ryb2tlTWl0ZXJsaW1pdHxzdHJva2VPcGFjaXR5fHN0cm9rZVdpZHRofHN1cmZhY2VTY2FsZXxzeXN0ZW1MYW5ndWFnZXx0YWJsZVZhbHVlc3x0YXJnZXRYfHRhcmdldFl8dGV4dEFuY2hvcnx0ZXh0RGVjb3JhdGlvbnx0ZXh0UmVuZGVyaW5nfHRleHRMZW5ndGh8dG98dHJhbnNmb3JtfHUxfHUyfHVuZGVybGluZVBvc2l0aW9ufHVuZGVybGluZVRoaWNrbmVzc3x1bmljb2RlfHVuaWNvZGVCaWRpfHVuaWNvZGVSYW5nZXx1bml0c1BlckVtfHZBbHBoYWJldGljfHZIYW5naW5nfHZJZGVvZ3JhcGhpY3x2TWF0aGVtYXRpY2FsfHZhbHVlc3x2ZWN0b3JFZmZlY3R8dmVyc2lvbnx2ZXJ0QWR2WXx2ZXJ0T3JpZ2luWHx2ZXJ0T3JpZ2luWXx2aWV3Qm94fHZpZXdUYXJnZXR8dmlzaWJpbGl0eXx3aWR0aHN8d29yZFNwYWNpbmd8d3JpdGluZ01vZGV8eHx4SGVpZ2h0fHgxfHgyfHhDaGFubmVsU2VsZWN0b3J8eGxpbmtBY3R1YXRlfHhsaW5rQXJjcm9sZXx4bGlua0hyZWZ8eGxpbmtSb2xlfHhsaW5rU2hvd3x4bGlua1RpdGxlfHhsaW5rVHlwZXx4bWxCYXNlfHhtbG5zfHhtbG5zWGxpbmt8eG1sTGFuZ3x4bWxTcGFjZXx5fHkxfHkyfHlDaGFubmVsU2VsZWN0b3J8enx6b29tQW5kUGFufGZvcnxjbGFzc3xhdXRvZm9jdXMpfCgoW0RkXVtBYV1bVHRdW0FhXXxbQWFdW1JyXVtJaV1bQWFdfHgpLS4qKSkkLztjb25zdCBoPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwPT09dFtuXSYmKHRbbl09ZShuKSksdFtuXX19KChmdW5jdGlvbihlKXtyZXR1cm4gZi50ZXN0KGUpfHwxMTE9PT1lLmNoYXJDb2RlQXQoMCkmJjExMD09PWUuY2hhckNvZGVBdCgxKSYmZS5jaGFyQ29kZUF0KDIpPDkxfSkpO2Z1bmN0aW9uIGcoZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKX1mdW5jdGlvbiB2KGUpe3JldHVyblwiVW5kZWZpbmVkXCI9PT1nKGUpfWZ1bmN0aW9uIEMoZSl7cmV0dXJuXCJOdWxsXCI9PT1nKGUpfWZ1bmN0aW9uIG0oZSl7cmV0dXJuXCJPYmplY3RcIj09PWcoZSkmJihlLmNvbnN0cnVjdG9yPT09T2JqZWN0JiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1PYmplY3QucHJvdG90eXBlKX1mdW5jdGlvbiB3KGUpe3JldHVyblwiQXJyYXlcIj09PWcoZSl9ZnVuY3Rpb24gYihlKXtyZXR1cm5cIlN5bWJvbFwiPT09ZyhlKX12YXIgeSx4LGssUyxPO3k9Qyx4PXY7ZnVuY3Rpb24gTSgpe2Zvcih2YXIgZT0wLHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGg7dDxuO3QrKyllKz1hcmd1bWVudHNbdF0ubGVuZ3RoO3ZhciByPUFycmF5KGUpLG89MDtmb3IodD0wO3Q8bjt0KyspZm9yKHZhciBhPWFyZ3VtZW50c1t0XSxpPTAsbD1hLmxlbmd0aDtpPGw7aSsrLG8rKylyW29dPWFbaV07cmV0dXJuIHJ9ZnVuY3Rpb24gTChlLHQsbixyKXt2YXIgbz1yLnByb3BlcnR5SXNFbnVtZXJhYmxlKHQpP1wiZW51bWVyYWJsZVwiOlwibm9uZW51bWVyYWJsZVwiO1wiZW51bWVyYWJsZVwiPT09byYmKGVbdF09biksXCJub25lbnVtZXJhYmxlXCI9PT1vJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9ZnVuY3Rpb24gXyhlLHQsbil7aWYoIW0odCkpcmV0dXJuIG4mJncobikmJm4uZm9yRWFjaCgoZnVuY3Rpb24obil7dD1uKGUsdCl9KSksdDt2YXIgcj17fTttKGUpJiYocj1NKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSkpLnJlZHVjZSgoZnVuY3Rpb24obixyKXt2YXIgbz1lW3JdO3JldHVybighYihyKSYmIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmluY2x1ZGVzKHIpfHxiKHIpJiYhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5pbmNsdWRlcyhyKSkmJkwobixyLG8sZSksbn0pLHt9KSk7cmV0dXJuIE0oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCksT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KSkucmVkdWNlKChmdW5jdGlvbihyLG8pe3ZhciBhPXRbb10saT1tKGUpP2Vbb106dm9pZCAwO3JldHVybiBuJiZ3KG4pJiZuLmZvckVhY2goKGZ1bmN0aW9uKGUpe2E9ZShpLGEpfSkpLHZvaWQgMCE9PWkmJm0oYSkmJihhPV8oaSxhLG4pKSxMKHIsbyxhLHQpLHJ9KSxyKX1jb25zdCBQPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3ZhciByPW51bGwsbz1lO3JldHVybiBtKGUpJiZlLmV4dGVuc2lvbnMmJjE9PT1PYmplY3Qua2V5cyhlKS5sZW5ndGgmJihvPXt9LHI9ZS5leHRlbnNpb25zKSx0LnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gXyhlLHQscil9KSxvKX07dmFyIEU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W2VbMF1dLHI9MCxvPXQubGVuZ3RoO3I8bztyKz0xKW4ucHVzaCh0W3JdLGVbcisxXSk7cmV0dXJuIG59LGo9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0sUj1mdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9LEk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxWPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LEg9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX0sQT1mdW5jdGlvbihlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hdHx8XCJvYmplY3RcIiE9dHlwZW9mIHQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQ/ZTp0fSxUPWZ1bmN0aW9uKGUpe3JldHVyblwib2JqZWN0XCI9PT0odm9pZCAwPT09ZT9cInVuZGVmaW5lZFwiOmooZSkpJiZlLmNvbnN0cnVjdG9yPT09T2JqZWN0fSxEPU9iamVjdC5mcmVlemUoW10pLEI9T2JqZWN0LmZyZWV6ZSh7fSk7ZnVuY3Rpb24gWihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlfWZ1bmN0aW9uICQoZSl7cmV0dXJuIGUuZGlzcGxheU5hbWV8fGUubmFtZXx8XCJDb21wb25lbnRcIn1mdW5jdGlvbiBOKGUpe3JldHVybiBlJiZcInN0cmluZ1wiPT10eXBlb2YgZS5zdHlsZWRDb21wb25lbnRJZH12YXIgRj1cInVuZGVmaW5lZFwiIT10eXBlb2YgcHJvY2VzcyYmKHByb2Nlc3MuZW52LlJFQUNUX0FQUF9TQ19BVFRSfHxwcm9jZXNzLmVudi5TQ19BVFRSKXx8XCJkYXRhLXN0eWxlZFwiLFc9XCJkYXRhLXN0eWxlZC12ZXJzaW9uXCIsVT1cImRhdGEtc3R5bGVkLXN0cmVhbWVkXCIsej1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZcIkhUTUxFbGVtZW50XCJpbiB3aW5kb3csRz1cImJvb2xlYW5cIj09dHlwZW9mIFNDX0RJU0FCTEVfU1BFRURZJiZTQ19ESVNBQkxFX1NQRUVEWXx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHByb2Nlc3MmJihwcm9jZXNzLmVudi5SRUFDVF9BUFBfU0NfRElTQUJMRV9TUEVFRFl8fHByb2Nlc3MuZW52LlNDX0RJU0FCTEVfU1BFRURZKXx8ITEsSz17fTt2YXIgcT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe1IodGhpcyx0KTtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxvPUFycmF5KHI+MT9yLTE6MCksYT0xO2E8cjthKyspb1thLTFdPWFyZ3VtZW50c1thXTt2YXIgaT1BKHRoaXMsZS5jYWxsKHRoaXMsXCJBbiBlcnJvciBvY2N1cnJlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdHlsZWQtY29tcG9uZW50cy9zdHlsZWQtY29tcG9uZW50cy9ibG9iL21hc3Rlci9wYWNrYWdlcy9zdHlsZWQtY29tcG9uZW50cy9zcmMvdXRpbHMvZXJyb3JzLm1kI1wiK24rXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIrKG8ubGVuZ3RoPjA/XCIgQWRkaXRpb25hbCBhcmd1bWVudHM6IFwiK28uam9pbihcIiwgXCIpOlwiXCIpKSk7cmV0dXJuIEEoaSl9cmV0dXJuIEgodCxlKSx0fShFcnJvciksWT0vXlteXFxTXFxuXSo/XFwvXFwqIHNjLWNvbXBvbmVudC1pZDpcXHMqKFxcUyspXFxzK1xcKlxcLy9nbSxKPWZ1bmN0aW9uKGUpe3ZhciB0PVwiXCIrKGV8fFwiXCIpLG49W107cmV0dXJuIHQucmVwbGFjZShZLChmdW5jdGlvbihlLHQscil7cmV0dXJuIG4ucHVzaCh7Y29tcG9uZW50SWQ6dCxtYXRjaEluZGV4OnJ9KSxlfSkpLG4ubWFwKChmdW5jdGlvbihlLHIpe3ZhciBvPWUuY29tcG9uZW50SWQsYT1lLm1hdGNoSW5kZXgsaT1uW3IrMV07cmV0dXJue2NvbXBvbmVudElkOm8sY3NzRnJvbURPTTppP3Quc2xpY2UoYSxpLm1hdGNoSW5kZXgpOnQuc2xpY2UoYSl9fSkpfSxYPS9eXFxzKlxcL1xcLy4qJC9nbSxRPW5ldyhvKCkpKHtnbG9iYWw6ITEsY2FzY2FkZTohMCxrZXlmcmFtZTohMSxwcmVmaXg6ITEsY29tcHJlc3M6ITEsc2VtaWNvbG9uOiEwfSksZWU9bmV3KG8oKSkoe2dsb2JhbDohMSxjYXNjYWRlOiEwLGtleWZyYW1lOiExLHByZWZpeDohMCxjb21wcmVzczohMSxzZW1pY29sb246ITF9KSx0ZT1bXSxuZT1mdW5jdGlvbihlKXtpZigtMj09PWUpe3ZhciB0PXRlO3JldHVybiB0ZT1bXSx0fX0scmU9aSgpKChmdW5jdGlvbihlKXt0ZS5wdXNoKGUpfSkpLG9lPXZvaWQgMCxhZT12b2lkIDAsaWU9dm9pZCAwLGxlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD4wJiYtMSE9PW4uc2xpY2UoMCx0KS5pbmRleE9mKGFlKSYmbi5zbGljZSh0LWFlLmxlbmd0aCx0KSE9PWFlP1wiLlwiK29lOmV9O2VlLnVzZShbZnVuY3Rpb24oZSx0LG4pezI9PT1lJiZuLmxlbmd0aCYmblswXS5sYXN0SW5kZXhPZihhZSk+MCYmKG5bMF09blswXS5yZXBsYWNlKGllLGxlKSl9LHJlLG5lXSksUS51c2UoW3JlLG5lXSk7dmFyIHNlPWZ1bmN0aW9uKGUpe3JldHVybiBRKFwiXCIsZSl9O2Z1bmN0aW9uIGNlKGUsdCxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106XCImXCIsbz1lLmpvaW4oXCJcIikucmVwbGFjZShYLFwiXCIpLGE9dCYmbj9uK1wiIFwiK3QrXCIgeyBcIitvK1wiIH1cIjpvO3JldHVybiBvZT1yLGFlPXQsaWU9bmV3IFJlZ0V4cChcIlxcXFxcIithZStcIlxcXFxiXCIsXCJnXCIpLGVlKG58fCF0P1wiXCI6dCxhKX12YXIgdWU9ZnVuY3Rpb24oKXtyZXR1cm4gbi5uY30sZGU9ZnVuY3Rpb24oZSx0LG4pe24mJigoZVt0XXx8KGVbdF09T2JqZWN0LmNyZWF0ZShudWxsKSkpW25dPSEwKX0scGU9ZnVuY3Rpb24oZSx0KXtlW3RdPU9iamVjdC5jcmVhdGUobnVsbCl9LGZlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiB2b2lkIDAhPT1lW3RdJiZlW3RdW25dfX0saGU9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIjtmb3IodmFyIG4gaW4gZSl0Kz1PYmplY3Qua2V5cyhlW25dKS5qb2luKFwiIFwiKStcIiBcIjtyZXR1cm4gdC50cmltKCl9LGdlPWZ1bmN0aW9uKGUpe2lmKGUuc2hlZXQpcmV0dXJuIGUuc2hlZXQ7Zm9yKHZhciB0PWUub3duZXJEb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGgsbj0wO248dDtuKz0xKXt2YXIgcj1lLm93bmVyRG9jdW1lbnQuc3R5bGVTaGVldHNbbl07aWYoci5vd25lck5vZGU9PT1lKXJldHVybiByfXRocm93IG5ldyBxKDEwKX0sdmU9ZnVuY3Rpb24oZSx0LG4pe2lmKCF0KXJldHVybiExO3ZhciByPWUuY3NzUnVsZXMubGVuZ3RoO3RyeXtlLmluc2VydFJ1bGUodCxuPD1yP246cil9Y2F0Y2goZSl7cmV0dXJuITF9cmV0dXJuITB9LENlPWZ1bmN0aW9uKGUpe3JldHVyblwiXFxuLyogc2MtY29tcG9uZW50LWlkOiBcIitlK1wiICovXFxuXCJ9LG1lPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj0wO3I8PXQ7cis9MSluKz1lW3JdO3JldHVybiBufSx3ZT1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj11ZSgpO3JldHVyblwiPHN0eWxlIFwiK1tyJiYnbm9uY2U9XCInK3IrJ1wiJyxGKyc9XCInK2hlKHQpKydcIicsVysnPVwiNC40LjFcIicsbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpK1wiPlwiK2UoKStcIjwvc3R5bGU+XCJ9fSxiZT1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuLHI9KChuPXt9KVtGXT1oZSh0KSxuW1ddPVwiNC40LjFcIixuKSxvPXVlKCk7cmV0dXJuIG8mJihyLm5vbmNlPW8pLGwuY3JlYXRlRWxlbWVudChcInN0eWxlXCIsVih7fSxyLHtkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOmUoKX19KSl9fSx5ZT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoZSl9fSx4ZT1mdW5jdGlvbihlLHQpe3JldHVybiBlLmNyZWF0ZVRleHROb2RlKENlKHQpKX0sa2U9ZnVuY3Rpb24gZSh0LG4pe3ZhciByPXZvaWQgMD09PXQ/T2JqZWN0LmNyZWF0ZShudWxsKTp0LG89dm9pZCAwPT09bj9PYmplY3QuY3JlYXRlKG51bGwpOm4sYT1mdW5jdGlvbihlKXt2YXIgdD1vW2VdO3JldHVybiB2b2lkIDAhPT10P3Q6b1tlXT1bXCJcIl19LGk9ZnVuY3Rpb24oKXt2YXIgZT1cIlwiO2Zvcih2YXIgdCBpbiBvKXt2YXIgbj1vW3RdWzBdO24mJihlKz1DZSh0KStuKX1yZXR1cm4gZX0sbD17Y2xvbmU6ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgbiBpbiBlKXRbbl09Vih7fSxlW25dKTtyZXR1cm4gdH0ociksbj1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgYSBpbiBvKW5bYV09W29bYV1bMF1dO3JldHVybiBlKHQsbil9LGNzczppLGdldElkczp5ZShvKSxoYXNOYW1lRm9ySWQ6ZmUociksaW5zZXJ0TWFya2VyOmEsaW5zZXJ0UnVsZXM6ZnVuY3Rpb24oZSx0LG4pe2EoZSlbMF0rPXQuam9pbihcIiBcIiksZGUocixlLG4pfSxyZW1vdmVSdWxlczpmdW5jdGlvbihlKXt2YXIgdD1vW2VdO3ZvaWQgMCE9PXQmJih0WzBdPVwiXCIscGUocixlKSl9LHNlYWxlZDohMSxzdHlsZVRhZzpudWxsLHRvRWxlbWVudDpiZShpLHIpLHRvSFRNTDp3ZShpLHIpfTtyZXR1cm4gbH0sU2U9ZnVuY3Rpb24oZSx0LG4scixvKXtpZih6JiYhbil7dmFyIGE9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWRvY3VtZW50O2U/cj1lLm93bmVyRG9jdW1lbnQ6dCYmKHI9dC5vd25lckRvY3VtZW50KTt2YXIgbz1yLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtvLnNldEF0dHJpYnV0ZShGLFwiXCIpLG8uc2V0QXR0cmlidXRlKFcsXCI0LjQuMVwiKTt2YXIgYT11ZSgpO2lmKGEmJm8uc2V0QXR0cmlidXRlKFwibm9uY2VcIixhKSxvLmFwcGVuZENoaWxkKHIuY3JlYXRlVGV4dE5vZGUoXCJcIikpLGUmJiF0KWUuYXBwZW5kQ2hpbGQobyk7ZWxzZXtpZighdHx8IWV8fCF0LnBhcmVudE5vZGUpdGhyb3cgbmV3IHEoNik7dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLG4/dDp0Lm5leHRTaWJsaW5nKX1yZXR1cm4gb30oZSx0LHIpO3JldHVybiBHP2Z1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPU9iamVjdC5jcmVhdGUobnVsbCksbz12b2lkIDAhPT10LGE9ITEsaT1mdW5jdGlvbih0KXt2YXIgbz1yW3RdO3JldHVybiB2b2lkIDAhPT1vP286KHJbdF09eGUoZS5vd25lckRvY3VtZW50LHQpLGUuYXBwZW5kQ2hpbGQoclt0XSksblt0XT1PYmplY3QuY3JlYXRlKG51bGwpLHJbdF0pfSxsPWZ1bmN0aW9uKCl7dmFyIGU9XCJcIjtmb3IodmFyIHQgaW4gcillKz1yW3RdLmRhdGE7cmV0dXJuIGV9O3JldHVybntjbG9uZTpmdW5jdGlvbigpe3Rocm93IG5ldyBxKDUpfSxjc3M6bCxnZXRJZHM6eWUociksaGFzTmFtZUZvcklkOmZlKG4pLGluc2VydE1hcmtlcjppLGluc2VydFJ1bGVzOmZ1bmN0aW9uKGUscixsKXtmb3IodmFyIHM9aShlKSxjPVtdLHU9ci5sZW5ndGgsZD0wO2Q8dTtkKz0xKXt2YXIgcD1yW2RdLGY9bztpZihmJiYtMSE9PXAuaW5kZXhPZihcIkBpbXBvcnRcIikpYy5wdXNoKHApO2Vsc2V7Zj0hMTt2YXIgaD1kPT09dS0xP1wiXCI6XCIgXCI7cy5hcHBlbmREYXRhKFwiXCIrcCtoKX19ZGUobixlLGwpLG8mJmMubGVuZ3RoPjAmJihhPSEwLHQoKS5pbnNlcnRSdWxlcyhlK1wiLWltcG9ydFwiLGMpKX0scmVtb3ZlUnVsZXM6ZnVuY3Rpb24oaSl7dmFyIGw9cltpXTtpZih2b2lkIDAhPT1sKXt2YXIgcz14ZShlLm93bmVyRG9jdW1lbnQsaSk7ZS5yZXBsYWNlQ2hpbGQocyxsKSxyW2ldPXMscGUobixpKSxvJiZhJiZ0KCkucmVtb3ZlUnVsZXMoaStcIi1pbXBvcnRcIil9fSxzZWFsZWQ6ITEsc3R5bGVUYWc6ZSx0b0VsZW1lbnQ6YmUobCxuKSx0b0hUTUw6d2UobCxuKX19KGEsbyk6ZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxvPVtdLGE9dm9pZCAwIT09dCxpPSExLGw9ZnVuY3Rpb24oZSl7dmFyIHQ9cltlXTtyZXR1cm4gdm9pZCAwIT09dD90OihyW2VdPW8ubGVuZ3RoLG8ucHVzaCgwKSxwZShuLGUpLHJbZV0pfSxzPWZ1bmN0aW9uKCl7dmFyIHQ9Z2UoZSkuY3NzUnVsZXMsbj1cIlwiO2Zvcih2YXIgYSBpbiByKXtuKz1DZShhKTtmb3IodmFyIGk9clthXSxsPW1lKG8saSkscz1sLW9baV07czxsO3MrPTEpe3ZhciBjPXRbc107dm9pZCAwIT09YyYmKG4rPWMuY3NzVGV4dCl9fXJldHVybiBufTtyZXR1cm57Y2xvbmU6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgcSg1KX0sY3NzOnMsZ2V0SWRzOnllKHIpLGhhc05hbWVGb3JJZDpmZShuKSxpbnNlcnRNYXJrZXI6bCxpbnNlcnRSdWxlczpmdW5jdGlvbihyLHMsYyl7Zm9yKHZhciB1PWwociksZD1nZShlKSxwPW1lKG8sdSksZj0wLGg9W10sZz1zLmxlbmd0aCx2PTA7djxnO3YrPTEpe3ZhciBDPXNbdl0sbT1hO20mJi0xIT09Qy5pbmRleE9mKFwiQGltcG9ydFwiKT9oLnB1c2goQyk6dmUoZCxDLHArZikmJihtPSExLGYrPTEpfWEmJmgubGVuZ3RoPjAmJihpPSEwLHQoKS5pbnNlcnRSdWxlcyhyK1wiLWltcG9ydFwiLGgpKSxvW3VdKz1mLGRlKG4scixjKX0scmVtb3ZlUnVsZXM6ZnVuY3Rpb24obCl7dmFyIHM9cltsXTtpZih2b2lkIDAhPT1zJiYhMSE9PWUuaXNDb25uZWN0ZWQpe3ZhciBjPW9bc107IWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9dC1uLG89dDtvPnI7by09MSllLmRlbGV0ZVJ1bGUobyl9KGdlKGUpLG1lKG8scyktMSxjKSxvW3NdPTAscGUobixsKSxhJiZpJiZ0KCkucmVtb3ZlUnVsZXMobCtcIi1pbXBvcnRcIil9fSxzZWFsZWQ6ITEsc3R5bGVUYWc6ZSx0b0VsZW1lbnQ6YmUocyxuKSx0b0hUTUw6d2UocyxuKX19KGEsbyl9cmV0dXJuIGtlKCl9LE9lPS9cXHMrLyxNZT12b2lkIDA7TWU9ej9HPzQwOjFlMzotMTt2YXIgTGU9MCxfZT12b2lkIDAsUGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp6P2RvY3VtZW50LmhlYWQ6bnVsbCxyPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Uih0aGlzLGUpLHRoaXMuZ2V0SW1wb3J0UnVsZVRhZz1mdW5jdGlvbigpe3ZhciBlPXQuaW1wb3J0UnVsZVRhZztpZih2b2lkIDAhPT1lKXJldHVybiBlO3ZhciBuPXQudGFnc1swXTtyZXR1cm4gdC5pbXBvcnRSdWxlVGFnPVNlKHQudGFyZ2V0LG4/bi5zdHlsZVRhZzpudWxsLHQuZm9yY2VTZXJ2ZXIsITApfSxMZSs9MSx0aGlzLmlkPUxlLHRoaXMuZm9yY2VTZXJ2ZXI9cix0aGlzLnRhcmdldD1yP251bGw6bix0aGlzLnRhZ01hcD17fSx0aGlzLmRlZmVycmVkPXt9LHRoaXMucmVoeWRyYXRlZE5hbWVzPXt9LHRoaXMuaWdub3JlUmVoeWRyYXRlZE5hbWVzPXt9LHRoaXMudGFncz1bXSx0aGlzLmNhcGFjaXR5PTEsdGhpcy5jbG9uZXM9W119cmV0dXJuIGUucHJvdG90eXBlLnJlaHlkcmF0ZT1mdW5jdGlvbigpe2lmKCF6fHx0aGlzLmZvcmNlU2VydmVyKXJldHVybiB0aGlzO3ZhciBlPVtdLHQ9W10sbj0hMSxyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtcIitGK1wiXVtcIitXKyc9XCI0LjQuMVwiXScpLG89ci5sZW5ndGg7aWYoIW8pcmV0dXJuIHRoaXM7Zm9yKHZhciBhPTA7YTxvO2ErPTEpe3ZhciBpPXJbYV07bnx8KG49ISFpLmdldEF0dHJpYnV0ZShVKSk7Zm9yKHZhciBsLHM9KGkuZ2V0QXR0cmlidXRlKEYpfHxcIlwiKS50cmltKCkuc3BsaXQoT2UpLGM9cy5sZW5ndGgsdT0wO3U8Yzt1Kz0xKWw9c1t1XSx0aGlzLnJlaHlkcmF0ZWROYW1lc1tsXT0hMDt0LnB1c2guYXBwbHkodCxKKGkudGV4dENvbnRlbnQpKSxlLnB1c2goaSl9dmFyIGQ9dC5sZW5ndGg7aWYoIWQpcmV0dXJuIHRoaXM7dmFyIHA9dGhpcy5tYWtlVGFnKG51bGwpOyFmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsbz1uLmxlbmd0aDtyPG87cis9MSl7dmFyIGE9bltyXSxpPWEuY29tcG9uZW50SWQsbD1hLmNzc0Zyb21ET00scz1zZShsKTtlLmluc2VydFJ1bGVzKGkscyl9Zm9yKHZhciBjPTAsdT10Lmxlbmd0aDtjPHU7Yys9MSl7dmFyIGQ9dFtjXTtkLnBhcmVudE5vZGUmJmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkKX19KHAsZSx0KSx0aGlzLmNhcGFjaXR5PU1hdGgubWF4KDEsTWUtZCksdGhpcy50YWdzLnB1c2gocCk7Zm9yKHZhciBmPTA7ZjxkO2YrPTEpdGhpcy50YWdNYXBbdFtmXS5jb21wb25lbnRJZF09cDtyZXR1cm4gdGhpc30sZS5yZXNldD1mdW5jdGlvbigpe19lPW5ldyBlKHZvaWQgMCxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKS5yZWh5ZHJhdGUoKX0sZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZSh0aGlzLnRhcmdldCx0aGlzLmZvcmNlU2VydmVyKTtyZXR1cm4gdGhpcy5jbG9uZXMucHVzaCh0KSx0LnRhZ3M9dGhpcy50YWdzLm1hcCgoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPWUuZ2V0SWRzKCkscj1lLmNsb25lKCksbz0wO288bi5sZW5ndGg7bys9MSl0LnRhZ01hcFtuW29dXT1yO3JldHVybiByfSkpLHQucmVoeWRyYXRlZE5hbWVzPVYoe30sdGhpcy5yZWh5ZHJhdGVkTmFtZXMpLHQuZGVmZXJyZWQ9Vih7fSx0aGlzLmRlZmVycmVkKSx0fSxlLnByb3RvdHlwZS5zZWFsQWxsVGFncz1mdW5jdGlvbigpe3RoaXMuY2FwYWNpdHk9MSx0aGlzLnRhZ3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5zZWFsZWQ9ITB9KSl9LGUucHJvdG90eXBlLm1ha2VUYWc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZT9lLnN0eWxlVGFnOm51bGw7cmV0dXJuIFNlKHRoaXMudGFyZ2V0LHQsdGhpcy5mb3JjZVNlcnZlciwhMSx0aGlzLmdldEltcG9ydFJ1bGVUYWcpfSxlLnByb3RvdHlwZS5nZXRUYWdGb3JJZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnRhZ01hcFtlXTtpZih2b2lkIDAhPT10JiYhdC5zZWFsZWQpcmV0dXJuIHQ7dmFyIG49dGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGgtMV07cmV0dXJuIHRoaXMuY2FwYWNpdHktPTEsMD09PXRoaXMuY2FwYWNpdHkmJih0aGlzLmNhcGFjaXR5PU1lLG49dGhpcy5tYWtlVGFnKG4pLHRoaXMudGFncy5wdXNoKG4pKSx0aGlzLnRhZ01hcFtlXT1ufSxlLnByb3RvdHlwZS5oYXNJZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy50YWdNYXBbZV19LGUucHJvdG90eXBlLmhhc05hbWVGb3JJZD1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXRoaXMuaWdub3JlUmVoeWRyYXRlZE5hbWVzW2VdJiZ0aGlzLnJlaHlkcmF0ZWROYW1lc1t0XSlyZXR1cm4hMDt2YXIgbj10aGlzLnRhZ01hcFtlXTtyZXR1cm4gdm9pZCAwIT09biYmbi5oYXNOYW1lRm9ySWQoZSx0KX0sZS5wcm90b3R5cGUuZGVmZXJyZWRJbmplY3Q9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10aGlzLnRhZ01hcFtlXSl7Zm9yKHZhciBuPXRoaXMuY2xvbmVzLHI9MDtyPG4ubGVuZ3RoO3IrPTEpbltyXS5kZWZlcnJlZEluamVjdChlLHQpO3RoaXMuZ2V0VGFnRm9ySWQoZSkuaW5zZXJ0TWFya2VyKGUpLHRoaXMuZGVmZXJyZWRbZV09dH19LGUucHJvdG90eXBlLmluamVjdD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPXRoaXMuY2xvbmVzLG89MDtvPHIubGVuZ3RoO28rPTEpcltvXS5pbmplY3QoZSx0LG4pO3ZhciBhPXRoaXMuZ2V0VGFnRm9ySWQoZSk7aWYodm9pZCAwIT09dGhpcy5kZWZlcnJlZFtlXSl7dmFyIGk9dGhpcy5kZWZlcnJlZFtlXS5jb25jYXQodCk7YS5pbnNlcnRSdWxlcyhlLGksbiksdGhpcy5kZWZlcnJlZFtlXT12b2lkIDB9ZWxzZSBhLmluc2VydFJ1bGVzKGUsdCxuKX0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudGFnTWFwW2VdO2lmKHZvaWQgMCE9PXQpe2Zvcih2YXIgbj10aGlzLmNsb25lcyxyPTA7cjxuLmxlbmd0aDtyKz0xKW5bcl0ucmVtb3ZlKGUpO3QucmVtb3ZlUnVsZXMoZSksdGhpcy5pZ25vcmVSZWh5ZHJhdGVkTmFtZXNbZV09ITAsdGhpcy5kZWZlcnJlZFtlXT12b2lkIDB9fSxlLnByb3RvdHlwZS50b0hUTUw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YWdzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9IVE1MKCl9KSkuam9pbihcIlwiKX0sZS5wcm90b3R5cGUudG9SZWFjdEVsZW1lbnRzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5pZDtyZXR1cm4gdGhpcy50YWdzLm1hcCgoZnVuY3Rpb24odCxuKXt2YXIgcj1cInNjLVwiK2UrXCItXCIrbjtyZXR1cm4oMCxsLmNsb25lRWxlbWVudCkodC50b0VsZW1lbnQoKSx7a2V5OnJ9KX0pKX0sSShlLG51bGwsW3trZXk6XCJtYXN0ZXJcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gX2V8fChfZT0obmV3IGUpLnJlaHlkcmF0ZSgpKX19LHtrZXk6XCJpbnN0YW5jZVwiLGdldDpmdW5jdGlvbigpe3JldHVybiBlLm1hc3Rlcn19XSksZX0oKSxFZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXt2YXIgcj10aGlzO1IodGhpcyxlKSx0aGlzLmluamVjdD1mdW5jdGlvbihlKXtlLmhhc05hbWVGb3JJZChyLmlkLHIubmFtZSl8fGUuaW5qZWN0KHIuaWQsci5ydWxlcyxyLm5hbWUpfSx0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IHEoMTIsU3RyaW5nKHIubmFtZSkpfSx0aGlzLm5hbWU9dCx0aGlzLnJ1bGVzPW4sdGhpcy5pZD1cInNjLWtleWZyYW1lcy1cIit0fXJldHVybiBlLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZX0sZX0oKSxqZT0vKFtBLVpdKS9nLFJlPS9ebXMtLztmdW5jdGlvbiBJZShlKXtyZXR1cm4gZS5yZXBsYWNlKGplLFwiLSQxXCIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShSZSxcIi1tcy1cIil9dmFyIFZlPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfHwhMT09PWV8fFwiXCI9PT1lfSxIZT1mdW5jdGlvbiBlKHQsbil7dmFyIHI9W107cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe2lmKCFWZSh0W25dKSl7aWYoVCh0W25dKSlyZXR1cm4gci5wdXNoLmFwcGx5KHIsZSh0W25dLG4pKSxyO2lmKFoodFtuXSkpcmV0dXJuIHIucHVzaChJZShuKStcIjpcIix0W25dLFwiO1wiKSxyO3IucHVzaChJZShuKStcIjogXCIrKG89biwobnVsbD09KGE9dFtuXSl8fFwiYm9vbGVhblwiPT10eXBlb2YgYXx8XCJcIj09PWE/XCJcIjpcIm51bWJlclwiIT10eXBlb2YgYXx8MD09PWF8fG8gaW4gcz9TdHJpbmcoYSkudHJpbSgpOmErXCJweFwiKStcIjtcIikpfXZhciBvLGE7cmV0dXJuIHJ9KSksbj9bbitcIiB7XCJdLmNvbmNhdChyLFtcIn1cIl0pOnJ9O2Z1bmN0aW9uIEFlKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHIsbz1bXSxhPTAsaT1lLmxlbmd0aDthPGk7YSs9MSludWxsIT09KHI9QWUoZVthXSx0LG4pKSYmKEFycmF5LmlzQXJyYXkocik/by5wdXNoLmFwcGx5KG8scik6by5wdXNoKHIpKTtyZXR1cm4gb31yZXR1cm4gVmUoZSk/bnVsbDpOKGUpP1wiLlwiK2Uuc3R5bGVkQ29tcG9uZW50SWQ6WihlKT9cImZ1bmN0aW9uXCIhPXR5cGVvZihsPWUpfHxsLnByb3RvdHlwZSYmbC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudHx8IXQ/ZTpBZShlKHQpLHQsbik6ZSBpbnN0YW5jZW9mIEVlP24/KGUuaW5qZWN0KG4pLGUuZ2V0TmFtZSgpKTplOlQoZSk/SGUoZSk6ZS50b1N0cmluZygpO3ZhciBsfWZ1bmN0aW9uIFRlKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3JldHVybiBaKGUpfHxUKGUpP0FlKEUoRCxbZV0uY29uY2F0KG4pKSk6QWUoRShlLG4pKX1mdW5jdGlvbiBEZShlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpCO2lmKCEoMCxjLmlzVmFsaWRFbGVtZW50VHlwZSkodCkpdGhyb3cgbmV3IHEoMSxTdHJpbmcodCkpO3ZhciByPWZ1bmN0aW9uKCl7cmV0dXJuIGUodCxuLFRlLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX07cmV0dXJuIHIud2l0aENvbmZpZz1mdW5jdGlvbihyKXtyZXR1cm4gRGUoZSx0LFYoe30sbixyKSl9LHIuYXR0cnM9ZnVuY3Rpb24ocil7cmV0dXJuIERlKGUsdCxWKHt9LG4se2F0dHJzOkFycmF5LnByb3RvdHlwZS5jb25jYXQobi5hdHRycyxyKS5maWx0ZXIoQm9vbGVhbil9KSl9LHJ9ZnVuY3Rpb24gQmUoZSl7Zm9yKHZhciB0LG49MHxlLmxlbmd0aCxyPTB8bixvPTA7bj49NDspdD0xNTQwNDgzNDc3Kig2NTUzNSYodD0yNTUmZS5jaGFyQ29kZUF0KG8pfCgyNTUmZS5jaGFyQ29kZUF0KCsrbykpPDw4fCgyNTUmZS5jaGFyQ29kZUF0KCsrbykpPDwxNnwoMjU1JmUuY2hhckNvZGVBdCgrK28pKTw8MjQpKSsoKDE1NDA0ODM0NzcqKHQ+Pj4xNikmNjU1MzUpPDwxNikscj0xNTQwNDgzNDc3Kig2NTUzNSZyKSsoKDE1NDA0ODM0NzcqKHI+Pj4xNikmNjU1MzUpPDwxNileKHQ9MTU0MDQ4MzQ3NyooNjU1MzUmKHRePXQ+Pj4yNCkpKygoMTU0MDQ4MzQ3NyoodD4+PjE2KSY2NTUzNSk8PDE2KSksbi09NCwrK287c3dpdGNoKG4pe2Nhc2UgMzpyXj0oMjU1JmUuY2hhckNvZGVBdChvKzIpKTw8MTY7Y2FzZSAyOnJePSgyNTUmZS5jaGFyQ29kZUF0KG8rMSkpPDw4O2Nhc2UgMTpyPTE1NDA0ODM0NzcqKDY1NTM1JihyXj0yNTUmZS5jaGFyQ29kZUF0KG8pKSkrKCgxNTQwNDgzNDc3KihyPj4+MTYpJjY1NTM1KTw8MTYpfXJldHVybigocj0xNTQwNDgzNDc3Kig2NTUzNSYocl49cj4+PjEzKSkrKCgxNTQwNDgzNDc3KihyPj4+MTYpJjY1NTM1KTw8MTYpKV5yPj4+MTUpPj4+MH12YXIgWmU9NTIsJGU9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZSsoZT4yNT8zOTo5NykpfTtmdW5jdGlvbiBOZShlKXt2YXIgdD1cIlwiLG49dm9pZCAwO2ZvcihuPWU7bj5aZTtuPU1hdGguZmxvb3Iobi9aZSkpdD0kZShuJVplKSt0O3JldHVybiAkZShuJVplKSt0fWZ1bmN0aW9uIEZlKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKz0xKXt2YXIgcj1lW25dO2lmKEFycmF5LmlzQXJyYXkocikmJiFGZShyLHQpKXJldHVybiExO2lmKFoocikmJiFOKHIpKXJldHVybiExfXJldHVybiF0LnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBaKGUpfHxmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSlpZihaKGVbdF0pKXJldHVybiEwO3JldHVybiExfShlKX0pKX12YXIgV2UsVWU9ZnVuY3Rpb24oZSl7cmV0dXJuIE5lKEJlKGUpKX0semU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbixyKXtSKHRoaXMsZSksdGhpcy5ydWxlcz10LHRoaXMuaXNTdGF0aWM9RmUodCxuKSx0aGlzLmNvbXBvbmVudElkPXIsUGUubWFzdGVyLmhhc0lkKHIpfHxQZS5tYXN0ZXIuZGVmZXJyZWRJbmplY3QocixbXSl9cmV0dXJuIGUucHJvdG90eXBlLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5pc1N0YXRpYyxyPXRoaXMuY29tcG9uZW50SWQsbz10aGlzLmxhc3RDbGFzc05hbWU7aWYoeiYmbiYmXCJzdHJpbmdcIj09dHlwZW9mIG8mJnQuaGFzTmFtZUZvcklkKHIsbykpcmV0dXJuIG87dmFyIGE9QWUodGhpcy5ydWxlcyxlLHQpLGk9VWUodGhpcy5jb21wb25lbnRJZCthLmpvaW4oXCJcIikpO3JldHVybiB0Lmhhc05hbWVGb3JJZChyLGkpfHx0LmluamVjdCh0aGlzLmNvbXBvbmVudElkLGNlKGEsXCIuXCIraSx2b2lkIDAsciksaSksdGhpcy5sYXN0Q2xhc3NOYW1lPWksaX0sZS5nZW5lcmF0ZU5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFVlKGUpfSxlfSgpLEdlPWZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOkIscj0hIW4mJmUudGhlbWU9PT1uLnRoZW1lO3JldHVybiBlLnRoZW1lJiYhcj9lLnRoZW1lOnR8fG4udGhlbWV9LEtlPS9bW1xcXS4jKiQ+PCt+PXxeOigpLFwiJ2AtXSsvZyxxZT0vKF4tfC0kKS9nO2Z1bmN0aW9uIFllKGUpe3JldHVybiBlLnJlcGxhY2UoS2UsXCItXCIpLnJlcGxhY2UocWUsXCJcIil9ZnVuY3Rpb24gSmUoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJiEwfXZhciBYZT17Y2hpbGRDb250ZXh0VHlwZXM6ITAsY29udGV4dFR5cGVzOiEwLGRlZmF1bHRQcm9wczohMCxkaXNwbGF5TmFtZTohMCxnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6ITAscHJvcFR5cGVzOiEwLHR5cGU6ITB9LFFlPXtuYW1lOiEwLGxlbmd0aDohMCxwcm90b3R5cGU6ITAsY2FsbGVyOiEwLGNhbGxlZTohMCxhcmd1bWVudHM6ITAsYXJpdHk6ITB9LGV0PSgoV2U9e30pW2MuRm9yd2FyZFJlZl09eyQkdHlwZW9mOiEwLHJlbmRlcjohMH0sV2UpLHR0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxudD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxydD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLG90PXZvaWQgMD09PXJ0P2Z1bmN0aW9uKCl7cmV0dXJuW119OnJ0LGF0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsaXQ9T2JqZWN0LmdldFByb3RvdHlwZU9mLGx0PU9iamVjdC5wcm90b3R5cGUsc3Q9QXJyYXkucHJvdG90eXBlO2Z1bmN0aW9uIGN0KGUsdCxuKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl7dmFyIHI9aXQodCk7ciYmciE9PWx0JiZjdChlLHIsbik7Zm9yKHZhciBvPXN0LmNvbmNhdChudCh0KSxvdCh0KSksYT1ldFtlLiQkdHlwZW9mXXx8WGUsaT1ldFt0LiQkdHlwZW9mXXx8WGUsbD1vLmxlbmd0aCxzPXZvaWQgMCxjPXZvaWQgMDtsLS07KWlmKGM9b1tsXSwhKFFlW2NdfHxuJiZuW2NdfHxpJiZpW2NdfHxhJiZhW2NdKSYmKHM9YXQodCxjKSkpdHJ5e3R0KGUsYyxzKX1jYXRjaChlKXt9cmV0dXJuIGV9cmV0dXJuIGV9dmFyIHV0PSgwLGwuY3JlYXRlQ29udGV4dCkoKSxkdD11dC5Db25zdW1lcixwdD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe1IodGhpcyx0KTt2YXIgcj1BKHRoaXMsZS5jYWxsKHRoaXMsbikpO3JldHVybiByLmdldENvbnRleHQ9cChyLmdldENvbnRleHQuYmluZChyKSksci5yZW5kZXJJbm5lcj1yLnJlbmRlcklubmVyLmJpbmQocikscn1yZXR1cm4gSCh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuP2wuY3JlYXRlRWxlbWVudCh1dC5Db25zdW1lcixudWxsLHRoaXMucmVuZGVySW5uZXIpOm51bGx9LHQucHJvdG90eXBlLnJlbmRlcklubmVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0Q29udGV4dCh0aGlzLnByb3BzLnRoZW1lLGUpO3JldHVybiBsLmNyZWF0ZUVsZW1lbnQodXQuUHJvdmlkZXIse3ZhbHVlOnR9LHRoaXMucHJvcHMuY2hpbGRyZW4pfSx0LnByb3RvdHlwZS5nZXRUaGVtZT1mdW5jdGlvbihlLHQpe2lmKFooZSkpcmV0dXJuIGUodCk7aWYobnVsbD09PWV8fEFycmF5LmlzQXJyYXkoZSl8fFwib2JqZWN0XCIhPT0odm9pZCAwPT09ZT9cInVuZGVmaW5lZFwiOmooZSkpKXRocm93IG5ldyBxKDgpO3JldHVybiBWKHt9LHQsZSl9LHQucHJvdG90eXBlLmdldENvbnRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5nZXRUaGVtZShlLHQpfSx0fShsLkNvbXBvbmVudCksZnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Uih0aGlzLGUpLHRoaXMubWFzdGVyU2hlZXQ9UGUubWFzdGVyLHRoaXMuaW5zdGFuY2U9dGhpcy5tYXN0ZXJTaGVldC5jbG9uZSgpLHRoaXMuc2VhbGVkPSExfXJldHVybiBlLnByb3RvdHlwZS5zZWFsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc2VhbGVkKXt2YXIgZT10aGlzLm1hc3RlclNoZWV0LmNsb25lcy5pbmRleE9mKHRoaXMuaW5zdGFuY2UpO3RoaXMubWFzdGVyU2hlZXQuY2xvbmVzLnNwbGljZShlLDEpLHRoaXMuc2VhbGVkPSEwfX0sZS5wcm90b3R5cGUuY29sbGVjdFN0eWxlcz1mdW5jdGlvbihlKXtpZih0aGlzLnNlYWxlZCl0aHJvdyBuZXcgcSgyKTtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KHZ0LHtzaGVldDp0aGlzLmluc3RhbmNlfSxlKX0sZS5wcm90b3R5cGUuZ2V0U3R5bGVUYWdzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VhbCgpLHRoaXMuaW5zdGFuY2UudG9IVE1MKCl9LGUucHJvdG90eXBlLmdldFN0eWxlRWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlYWwoKSx0aGlzLmluc3RhbmNlLnRvUmVhY3RFbGVtZW50cygpfSxlLnByb3RvdHlwZS5pbnRlcmxlYXZlV2l0aE5vZGVTdHJlYW09ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IHEoMyl9LGV9KCksaHQ9KDAsbC5jcmVhdGVDb250ZXh0KSgpLGd0PWh0LkNvbnN1bWVyLHZ0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7Uih0aGlzLHQpO3ZhciByPUEodGhpcyxlLmNhbGwodGhpcyxuKSk7cmV0dXJuIHIuZ2V0Q29udGV4dD1wKHIuZ2V0Q29udGV4dCkscn1yZXR1cm4gSCh0LGUpLHQucHJvdG90eXBlLmdldENvbnRleHQ9ZnVuY3Rpb24oZSx0KXtpZihlKXJldHVybiBlO2lmKHQpcmV0dXJuIG5ldyBQZSh0KTt0aHJvdyBuZXcgcSg0KX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2hpbGRyZW4sbj1lLnNoZWV0LHI9ZS50YXJnZXQ7cmV0dXJuIGwuY3JlYXRlRWxlbWVudChodC5Qcm92aWRlcix7dmFsdWU6dGhpcy5nZXRDb250ZXh0KG4scil9LHQpfSx0fShsLkNvbXBvbmVudCksQ3Q9e307dmFyIG10PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtSKHRoaXMsdCk7dmFyIG49QSh0aGlzLGUuY2FsbCh0aGlzKSk7cmV0dXJuIG4uYXR0cnM9e30sbi5yZW5kZXJPdXRlcj1uLnJlbmRlck91dGVyLmJpbmQobiksbi5yZW5kZXJJbm5lcj1uLnJlbmRlcklubmVyLmJpbmQobiksbn1yZXR1cm4gSCh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBsLmNyZWF0ZUVsZW1lbnQoZ3QsbnVsbCx0aGlzLnJlbmRlck91dGVyKX0sdC5wcm90b3R5cGUucmVuZGVyT3V0ZXI9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06UGUubWFzdGVyO3JldHVybiB0aGlzLnN0eWxlU2hlZXQ9ZSx0aGlzLnByb3BzLmZvcndhcmRlZENvbXBvbmVudC5jb21wb25lbnRTdHlsZS5pc1N0YXRpYz90aGlzLnJlbmRlcklubmVyKCk6bC5jcmVhdGVFbGVtZW50KGR0LG51bGwsdGhpcy5yZW5kZXJJbm5lcil9LHQucHJvdG90eXBlLnJlbmRlcklubmVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMuZm9yd2FyZGVkQ29tcG9uZW50LG49dC5jb21wb25lbnRTdHlsZSxyPXQuZGVmYXVsdFByb3BzLG89KHQuZGlzcGxheU5hbWUsdC5mb2xkZWRDb21wb25lbnRJZHMpLGE9dC5zdHlsZWRDb21wb25lbnRJZCxpPXQudGFyZ2V0LHM9dm9pZCAwO3M9bi5pc1N0YXRpYz90aGlzLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKEIsdGhpcy5wcm9wcyk6dGhpcy5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcyhHZSh0aGlzLnByb3BzLGUscil8fEIsdGhpcy5wcm9wcyk7dmFyIGM9dGhpcy5wcm9wcy5hc3x8dGhpcy5hdHRycy5hc3x8aSx1PUplKGMpLGQ9e30scD1WKHt9LHRoaXMucHJvcHMsdGhpcy5hdHRycyksZj12b2lkIDA7Zm9yKGYgaW4gcClcImZvcndhcmRlZENvbXBvbmVudFwiIT09ZiYmXCJhc1wiIT09ZiYmKFwiZm9yd2FyZGVkUmVmXCI9PT1mP2QucmVmPXBbZl06XCJmb3J3YXJkZWRBc1wiPT09Zj9kLmFzPXBbZl06dSYmIWgoZil8fChkW2ZdPXBbZl0pKTtyZXR1cm4gdGhpcy5wcm9wcy5zdHlsZSYmdGhpcy5hdHRycy5zdHlsZSYmKGQuc3R5bGU9Vih7fSx0aGlzLmF0dHJzLnN0eWxlLHRoaXMucHJvcHMuc3R5bGUpKSxkLmNsYXNzTmFtZT1BcnJheS5wcm90b3R5cGUuY29uY2F0KG8sYSxzIT09YT9zOm51bGwsdGhpcy5wcm9wcy5jbGFzc05hbWUsdGhpcy5hdHRycy5jbGFzc05hbWUpLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSwoMCxsLmNyZWF0ZUVsZW1lbnQpKGMsZCl9LHQucHJvdG90eXBlLmJ1aWxkRXhlY3V0aW9uQ29udGV4dD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxvPVYoe30sdCx7dGhlbWU6ZX0pO3JldHVybiBuLmxlbmd0aD8odGhpcy5hdHRycz17fSxuLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0LG49ZSxhPSExLGk9dm9pZCAwLGw9dm9pZCAwO2ZvcihsIGluIFoobikmJihuPW4obyksYT0hMCksbilpPW5bbF0sYXx8IVooaSl8fCh0PWkpJiZ0LnByb3RvdHlwZSYmdC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudHx8TihpKXx8KGk9aShvKSksci5hdHRyc1tsXT1pLG9bbF09aX0pKSxvKTpvfSx0LnByb3RvdHlwZS5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcz1mdW5jdGlvbihlLHQpe3ZhciBuPXQuZm9yd2FyZGVkQ29tcG9uZW50LHI9bi5hdHRycyxvPW4uY29tcG9uZW50U3R5bGU7bi53YXJuVG9vTWFueUNsYXNzZXM7cmV0dXJuIG8uaXNTdGF0aWMmJiFyLmxlbmd0aD9vLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKEIsdGhpcy5zdHlsZVNoZWV0KTpvLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKHRoaXMuYnVpbGRFeGVjdXRpb25Db250ZXh0KGUsdCxyKSx0aGlzLnN0eWxlU2hlZXQpfSx0fShsLkNvbXBvbmVudCk7ZnVuY3Rpb24gd3QoZSx0LG4pe3ZhciByPU4oZSksbz0hSmUoZSksYT10LmRpc3BsYXlOYW1lLGk9dm9pZCAwPT09YT9mdW5jdGlvbihlKXtyZXR1cm4gSmUoZSk/XCJzdHlsZWQuXCIrZTpcIlN0eWxlZChcIiskKGUpK1wiKVwifShlKTphLHM9dC5jb21wb25lbnRJZCxjPXZvaWQgMD09PXM/ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVwic3RyaW5nXCIhPXR5cGVvZiB0P1wic2NcIjpZZSh0KSxvPShDdFtyXXx8MCkrMTtDdFtyXT1vO3ZhciBhPXIrXCItXCIrZS5nZW5lcmF0ZU5hbWUocitvKTtyZXR1cm4gbj9uK1wiLVwiK2E6YX0oemUsdC5kaXNwbGF5TmFtZSx0LnBhcmVudENvbXBvbmVudElkKTpzLHU9dC5QYXJlbnRDb21wb25lbnQsZD12b2lkIDA9PT11P210OnUscD10LmF0dHJzLGY9dm9pZCAwPT09cD9EOnAsaD10LmRpc3BsYXlOYW1lJiZ0LmNvbXBvbmVudElkP1llKHQuZGlzcGxheU5hbWUpK1wiLVwiK3QuY29tcG9uZW50SWQ6dC5jb21wb25lbnRJZHx8YyxnPXImJmUuYXR0cnM/QXJyYXkucHJvdG90eXBlLmNvbmNhdChlLmF0dHJzLGYpLmZpbHRlcihCb29sZWFuKTpmLHY9bmV3IHplKHI/ZS5jb21wb25lbnRTdHlsZS5ydWxlcy5jb25jYXQobik6bixnLGgpLEM9dm9pZCAwLG09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KGQsVih7fSxlLHtmb3J3YXJkZWRDb21wb25lbnQ6Qyxmb3J3YXJkZWRSZWY6dH0pKX07cmV0dXJuIG0uZGlzcGxheU5hbWU9aSwoQz1sLmZvcndhcmRSZWYobSkpLmRpc3BsYXlOYW1lPWksQy5hdHRycz1nLEMuY29tcG9uZW50U3R5bGU9dixDLmZvbGRlZENvbXBvbmVudElkcz1yP0FycmF5LnByb3RvdHlwZS5jb25jYXQoZS5mb2xkZWRDb21wb25lbnRJZHMsZS5zdHlsZWRDb21wb25lbnRJZCk6RCxDLnN0eWxlZENvbXBvbmVudElkPWgsQy50YXJnZXQ9cj9lLnRhcmdldDplLEMud2l0aENvbXBvbmVudD1mdW5jdGlvbihlKXt2YXIgcj10LmNvbXBvbmVudElkLG89ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn0odCxbXCJjb21wb25lbnRJZFwiXSksYT1yJiZyK1wiLVwiKyhKZShlKT9lOlllKCQoZSkpKTtyZXR1cm4gd3QoZSxWKHt9LG8se2F0dHJzOmcsY29tcG9uZW50SWQ6YSxQYXJlbnRDb21wb25lbnQ6ZH0pLG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQyxcImRlZmF1bHRQcm9wc1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9sZGVkRGVmYXVsdFByb3BzfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZm9sZGVkRGVmYXVsdFByb3BzPXI/UChlLmRlZmF1bHRQcm9wcyx0KTp0fX0pLEMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIi5cIitDLnN0eWxlZENvbXBvbmVudElkfSxvJiZjdChDLGUse2F0dHJzOiEwLGNvbXBvbmVudFN0eWxlOiEwLGRpc3BsYXlOYW1lOiEwLGZvbGRlZENvbXBvbmVudElkczohMCxzdHlsZWRDb21wb25lbnRJZDohMCx0YXJnZXQ6ITAsd2l0aENvbXBvbmVudDohMH0pLEN9dmFyIGJ0PWZ1bmN0aW9uKGUpe3JldHVybiBEZSh3dCxlKX07W1wiYVwiLFwiYWJiclwiLFwiYWRkcmVzc1wiLFwiYXJlYVwiLFwiYXJ0aWNsZVwiLFwiYXNpZGVcIixcImF1ZGlvXCIsXCJiXCIsXCJiYXNlXCIsXCJiZGlcIixcImJkb1wiLFwiYmlnXCIsXCJibG9ja3F1b3RlXCIsXCJib2R5XCIsXCJiclwiLFwiYnV0dG9uXCIsXCJjYW52YXNcIixcImNhcHRpb25cIixcImNpdGVcIixcImNvZGVcIixcImNvbFwiLFwiY29sZ3JvdXBcIixcImRhdGFcIixcImRhdGFsaXN0XCIsXCJkZFwiLFwiZGVsXCIsXCJkZXRhaWxzXCIsXCJkZm5cIixcImRpYWxvZ1wiLFwiZGl2XCIsXCJkbFwiLFwiZHRcIixcImVtXCIsXCJlbWJlZFwiLFwiZmllbGRzZXRcIixcImZpZ2NhcHRpb25cIixcImZpZ3VyZVwiLFwiZm9vdGVyXCIsXCJmb3JtXCIsXCJoMVwiLFwiaDJcIixcImgzXCIsXCJoNFwiLFwiaDVcIixcImg2XCIsXCJoZWFkXCIsXCJoZWFkZXJcIixcImhncm91cFwiLFwiaHJcIixcImh0bWxcIixcImlcIixcImlmcmFtZVwiLFwiaW1nXCIsXCJpbnB1dFwiLFwiaW5zXCIsXCJrYmRcIixcImtleWdlblwiLFwibGFiZWxcIixcImxlZ2VuZFwiLFwibGlcIixcImxpbmtcIixcIm1haW5cIixcIm1hcFwiLFwibWFya1wiLFwibWFycXVlZVwiLFwibWVudVwiLFwibWVudWl0ZW1cIixcIm1ldGFcIixcIm1ldGVyXCIsXCJuYXZcIixcIm5vc2NyaXB0XCIsXCJvYmplY3RcIixcIm9sXCIsXCJvcHRncm91cFwiLFwib3B0aW9uXCIsXCJvdXRwdXRcIixcInBcIixcInBhcmFtXCIsXCJwaWN0dXJlXCIsXCJwcmVcIixcInByb2dyZXNzXCIsXCJxXCIsXCJycFwiLFwicnRcIixcInJ1YnlcIixcInNcIixcInNhbXBcIixcInNjcmlwdFwiLFwic2VjdGlvblwiLFwic2VsZWN0XCIsXCJzbWFsbFwiLFwic291cmNlXCIsXCJzcGFuXCIsXCJzdHJvbmdcIixcInN0eWxlXCIsXCJzdWJcIixcInN1bW1hcnlcIixcInN1cFwiLFwidGFibGVcIixcInRib2R5XCIsXCJ0ZFwiLFwidGV4dGFyZWFcIixcInRmb290XCIsXCJ0aFwiLFwidGhlYWRcIixcInRpbWVcIixcInRpdGxlXCIsXCJ0clwiLFwidHJhY2tcIixcInVcIixcInVsXCIsXCJ2YXJcIixcInZpZGVvXCIsXCJ3YnJcIixcImNpcmNsZVwiLFwiY2xpcFBhdGhcIixcImRlZnNcIixcImVsbGlwc2VcIixcImZvcmVpZ25PYmplY3RcIixcImdcIixcImltYWdlXCIsXCJsaW5lXCIsXCJsaW5lYXJHcmFkaWVudFwiLFwibWFya2VyXCIsXCJtYXNrXCIsXCJwYXRoXCIsXCJwYXR0ZXJuXCIsXCJwb2x5Z29uXCIsXCJwb2x5bGluZVwiLFwicmFkaWFsR3JhZGllbnRcIixcInJlY3RcIixcInN0b3BcIixcInN2Z1wiLFwidGV4dFwiLFwidHNwYW5cIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7YnRbZV09YnQoZSl9KSk7dmFyIHl0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4pe1IodGhpcyxlKSx0aGlzLnJ1bGVzPXQsdGhpcy5jb21wb25lbnRJZD1uLHRoaXMuaXNTdGF0aWM9RmUodCxEKSxQZS5tYXN0ZXIuaGFzSWQobil8fFBlLm1hc3Rlci5kZWZlcnJlZEluamVjdChuLFtdKX1yZXR1cm4gZS5wcm90b3R5cGUuY3JlYXRlU3R5bGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49Y2UoQWUodGhpcy5ydWxlcyxlLHQpLFwiXCIpO3QuaW5qZWN0KHRoaXMuY29tcG9uZW50SWQsbil9LGUucHJvdG90eXBlLnJlbW92ZVN0eWxlcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbXBvbmVudElkO2UuaGFzSWQodCkmJmUucmVtb3ZlKHQpfSxlLnByb3RvdHlwZS5yZW5kZXJTdHlsZXM9ZnVuY3Rpb24oZSx0KXt0aGlzLnJlbW92ZVN0eWxlcyh0KSx0aGlzLmNyZWF0ZVN0eWxlcyhlLHQpfSxlfSgpO2Z1bmN0aW9uIHh0KGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3ZhciBvPVRlLmFwcGx5KHZvaWQgMCxbZV0uY29uY2F0KG4pKSxhPVwic2MtZ2xvYmFsLVwiK0JlKEpTT04uc3RyaW5naWZ5KG8pKSxpPW5ldyB5dChvLGEpLHM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtSKHRoaXMsdCk7dmFyIHI9QSh0aGlzLGUuY2FsbCh0aGlzLG4pKSxvPXIuY29uc3RydWN0b3IsYT1vLmdsb2JhbFN0eWxlLGk9by5zdHlsZWRDb21wb25lbnRJZDtyZXR1cm4geiYmKHdpbmRvdy5zY0NHU0hNUkNhY2hlW2ldPSh3aW5kb3cuc2NDR1NITVJDYWNoZVtpXXx8MCkrMSksci5zdGF0ZT17Z2xvYmFsU3R5bGU6YSxzdHlsZWRDb21wb25lbnRJZDppfSxyfXJldHVybiBIKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt3aW5kb3cuc2NDR1NITVJDYWNoZVt0aGlzLnN0YXRlLnN0eWxlZENvbXBvbmVudElkXSYmKHdpbmRvdy5zY0NHU0hNUkNhY2hlW3RoaXMuc3RhdGUuc3R5bGVkQ29tcG9uZW50SWRdLT0xKSwwPT09d2luZG93LnNjQ0dTSE1SQ2FjaGVbdGhpcy5zdGF0ZS5zdHlsZWRDb21wb25lbnRJZF0mJnRoaXMuc3RhdGUuZ2xvYmFsU3R5bGUucmVtb3ZlU3R5bGVzKHRoaXMuc3R5bGVTaGVldCl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGwuY3JlYXRlRWxlbWVudChndCxudWxsLChmdW5jdGlvbih0KXtlLnN0eWxlU2hlZXQ9dHx8UGUubWFzdGVyO3ZhciBuPWUuc3RhdGUuZ2xvYmFsU3R5bGU7cmV0dXJuIG4uaXNTdGF0aWM/KG4ucmVuZGVyU3R5bGVzKEssZS5zdHlsZVNoZWV0KSxudWxsKTpsLmNyZWF0ZUVsZW1lbnQoZHQsbnVsbCwoZnVuY3Rpb24odCl7dmFyIHI9ZS5jb25zdHJ1Y3Rvci5kZWZhdWx0UHJvcHMsbz1WKHt9LGUucHJvcHMpO3JldHVybiB2b2lkIDAhPT10JiYoby50aGVtZT1HZShlLnByb3BzLHQscikpLG4ucmVuZGVyU3R5bGVzKG8sZS5zdHlsZVNoZWV0KSxudWxsfSkpfSkpfSx0fShsLkNvbXBvbmVudCk7cmV0dXJuIHMuZ2xvYmFsU3R5bGU9aSxzLnN0eWxlZENvbXBvbmVudElkPWEsc316JiYod2luZG93LnNjQ0dTSE1SQ2FjaGU9e30pO3ZhciBrdD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cXHN8XFxcXG4vZyxcIlwiKX07ZnVuY3Rpb24gU3QoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07dmFyIG89VGUuYXBwbHkodm9pZCAwLFtlXS5jb25jYXQobikpLGE9TmUoQmUoa3QoSlNPTi5zdHJpbmdpZnkobykpKSk7cmV0dXJuIG5ldyBFZShhLGNlKG8sYSxcIkBrZXlmcmFtZXNcIikpfXZhciBPdD1mdW5jdGlvbihlKXt2YXIgdD1sLmZvcndhcmRSZWYoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGwuY3JlYXRlRWxlbWVudChkdCxudWxsLChmdW5jdGlvbihyKXt2YXIgbz1lLmRlZmF1bHRQcm9wcyxhPUdlKHQscixvKTtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KGUsVih7fSx0LHt0aGVtZTphLHJlZjpufSkpfSkpfSkpO3JldHVybiBjdCh0LGUpLHQuZGlzcGxheU5hbWU9XCJXaXRoVGhlbWUoXCIrJChlKStcIilcIix0fSxNdD17U3R5bGVTaGVldDpQZX07Y29uc3QgTHQ9YnR9LDI0NjplPT57ZS5leHBvcnRzPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PVwiLyp8Ki9cIixuPXQrXCJ9XCI7ZnVuY3Rpb24gcih0KXtpZih0KXRyeXtlKHQrXCJ9XCIpfWNhdGNoKGUpe319cmV0dXJuIGZ1bmN0aW9uKG8sYSxpLGwscyxjLHUsZCxwLGYpe3N3aXRjaChvKXtjYXNlIDE6aWYoMD09PXAmJjY0PT09YS5jaGFyQ29kZUF0KDApKXJldHVybiBlKGErXCI7XCIpLFwiXCI7YnJlYWs7Y2FzZSAyOmlmKDA9PT1kKXJldHVybiBhK3Q7YnJlYWs7Y2FzZSAzOnN3aXRjaChkKXtjYXNlIDEwMjpjYXNlIDExMjpyZXR1cm4gZShpWzBdK2EpLFwiXCI7ZGVmYXVsdDpyZXR1cm4gYSsoMD09PWY/dDpcIlwiKX1jYXNlLTI6YS5zcGxpdChuKS5mb3JFYWNoKHIpfX19fSgpfSw5NDY6ZT0+e2UuZXhwb3J0cz1mdW5jdGlvbiBlKHQpe1widXNlIHN0cmljdFwiO3ZhciBuPS9eXFwwKy9nLHI9L1tcXDBcXHJcXGZdL2csbz0vOiAqL2csYT0vem9vfGdyYS8saT0vKFssOiBdKSh0cmFuc2Zvcm0pL2csbD0vLCtcXHMqKD8hW14oXSpbKV0pL2cscz0vICtcXHMqKD8hW14oXSpbKV0pL2csYz0vICpbXFwwXSAqL2csdT0vLFxccis/L2csZD0vKFtcXHRcXHJcXG4gXSkqXFxmPyYvZyxwPS86Z2xvYmFsXFwoKCg/OlteXFwoXFwpXFxbXFxdXSp8XFxbLipcXF18XFwoW15cXChcXCldKlxcKSkqKVxcKS9nLGY9L1xcVysvZyxoPS9AKGtcXHcrKVxccyooXFxTKilcXHMqLyxnPS86OihwbGFjZSkvZyx2PS86KHJlYWQtb25seSkvZyxDPS9cXHMrKD89W3tcXF07PTo+XSkvZyxtPS8oW1t9PTo+XSlcXHMrL2csdz0vKFxce1tee10rPyk7KD89XFx9KS9nLGI9L1xcc3syLH0vZyx5PS8oW15cXChdKSg6KykgKi9nLHg9L1tzdmhdXFx3Ky1bdGJscl17Mn0vLGs9L1xcKFxccyooLiopXFxzKlxcKS9nLFM9LyhbXFxzXFxTXSo/KTsvZyxPPS8tc2VsZnxmbGV4LS9nLE09L1teXSo/KDpbcnBdW2VsXWFbXFx3LV0rKVteXSovLEw9L3N0cmV0Y2h8OlxccypcXHcrXFwtKD86Y29udGV8YXZhaWwpLyxfPS8oW14tXSkoaW1hZ2Utc2V0XFwoKS8sUD1cIi13ZWJraXQtXCIsRT1cIi1tb3otXCIsaj1cIi1tcy1cIixSPTU5LEk9MTI1LFY9MTIzLEg9NDAsQT00MSxUPTkxLEQ9OTMsQj0xMCxaPTEzLCQ9OSxOPTY0LEY9MzIsVz0zOCxVPTQ1LHo9OTUsRz00MixLPTQ0LHE9NTgsWT0zOSxKPTM0LFg9NDcsUT02MixlZT00Myx0ZT0xMjYsbmU9MCxyZT0xMixvZT0xMSxhZT0xMDcsaWU9MTA5LGxlPTExNSxzZT0xMTIsY2U9MTExLHVlPTEwNSxkZT05OSxwZT0xMDAsZmU9MTEyLGhlPTEsZ2U9MSx2ZT0wLENlPTEsbWU9MSx3ZT0xLGJlPTAseWU9MCx4ZT0wLGtlPVtdLFNlPVtdLE9lPTAsTWU9bnVsbCxMZT0tMixfZT0tMSxQZT0wLEVlPTEsamU9MixSZT0zLEllPTAsVmU9MSxIZT1cIlwiLEFlPVwiXCIsVGU9XCJcIjtmdW5jdGlvbiBEZShlLHQsbyxhLGkpe2Zvcih2YXIgbCxzLHU9MCxkPTAscD0wLGY9MCxDPTAsbT0wLHc9MCxiPTAseD0wLFM9MCxPPTAsTT0wLEw9MCxfPTAsej0wLGJlPTAsU2U9MCxNZT0wLExlPTAsX2U9by5sZW5ndGgsWmU9X2UtMSx6ZT1cIlwiLEdlPVwiXCIsS2U9XCJcIixxZT1cIlwiLFllPVwiXCIsSmU9XCJcIjt6PF9lOyl7aWYodz1vLmNoYXJDb2RlQXQoeiksej09PVplJiZkK2YrcCt1IT09MCYmKDAhPT1kJiYodz1kPT09WD9COlgpLGY9cD11PTAsX2UrKyxaZSsrKSxkK2YrcCt1PT09MCl7aWYoej09PVplJiYoYmU+MCYmKEdlPUdlLnJlcGxhY2UocixcIlwiKSksR2UudHJpbSgpLmxlbmd0aD4wKSl7c3dpdGNoKHcpe2Nhc2UgRjpjYXNlICQ6Y2FzZSBSOmNhc2UgWjpjYXNlIEI6YnJlYWs7ZGVmYXVsdDpHZSs9by5jaGFyQXQoeil9dz1SfWlmKDE9PT1TZSlzd2l0Y2godyl7Y2FzZSBWOmNhc2UgSTpjYXNlIFI6Y2FzZSBKOmNhc2UgWTpjYXNlIEg6Y2FzZSBBOmNhc2UgSzpTZT0wO2Nhc2UgJDpjYXNlIFo6Y2FzZSBCOmNhc2UgRjpicmVhaztkZWZhdWx0OmZvcihTZT0wLExlPXosQz13LHotLSx3PVI7TGU8X2U7KXN3aXRjaChvLmNoYXJDb2RlQXQoTGUrKykpe2Nhc2UgQjpjYXNlIFo6Y2FzZSBSOisreix3PUMsTGU9X2U7YnJlYWs7Y2FzZSBxOmJlPjAmJigrK3osdz1DKTtjYXNlIFY6TGU9X2V9fXN3aXRjaCh3KXtjYXNlIFY6Zm9yKEM9KEdlPUdlLnRyaW0oKSkuY2hhckNvZGVBdCgwKSxPPTEsTGU9Kyt6O3o8X2U7KXtzd2l0Y2godz1vLmNoYXJDb2RlQXQoeikpe2Nhc2UgVjpPKys7YnJlYWs7Y2FzZSBJOk8tLTticmVhaztjYXNlIFg6c3dpdGNoKG09by5jaGFyQ29kZUF0KHorMSkpe2Nhc2UgRzpjYXNlIFg6ej1VZShtLHosWmUsbyl9YnJlYWs7Y2FzZSBUOncrKztjYXNlIEg6dysrO2Nhc2UgSjpjYXNlIFk6Zm9yKDt6Kys8WmUmJm8uY2hhckNvZGVBdCh6KSE9PXc7KTt9aWYoMD09PU8pYnJlYWs7eisrfWlmKEtlPW8uc3Vic3RyaW5nKExlLHopLEM9PT1uZSYmKEM9KEdlPUdlLnJlcGxhY2UobixcIlwiKS50cmltKCkpLmNoYXJDb2RlQXQoMCkpLEM9PT1OKXtzd2l0Y2goYmU+MCYmKEdlPUdlLnJlcGxhY2UocixcIlwiKSksbT1HZS5jaGFyQ29kZUF0KDEpKXtjYXNlIHBlOmNhc2UgaWU6Y2FzZSBsZTpjYXNlIFU6bD10O2JyZWFrO2RlZmF1bHQ6bD1rZX1pZihMZT0oS2U9RGUodCxsLEtlLG0saSsxKSkubGVuZ3RoLHhlPjAmJjA9PT1MZSYmKExlPUdlLmxlbmd0aCksT2U+MCYmKGw9QmUoa2UsR2UsTWUpLHM9V2UoUmUsS2UsbCx0LGdlLGhlLExlLG0saSxhKSxHZT1sLmpvaW4oXCJcIiksdm9pZCAwIT09cyYmMD09PShMZT0oS2U9cy50cmltKCkpLmxlbmd0aCkmJihtPTAsS2U9XCJcIikpLExlPjApc3dpdGNoKG0pe2Nhc2UgbGU6R2U9R2UucmVwbGFjZShrLEZlKTtjYXNlIHBlOmNhc2UgaWU6Y2FzZSBVOktlPUdlK1wie1wiK0tlK1wifVwiO2JyZWFrO2Nhc2UgYWU6S2U9KEdlPUdlLnJlcGxhY2UoaCxcIiQxICQyXCIrKFZlPjA/SGU6XCJcIikpKStcIntcIitLZStcIn1cIixLZT0xPT09bWV8fDI9PT1tZSYmTmUoXCJAXCIrS2UsMyk/XCJAXCIrUCtLZStcIkBcIitLZTpcIkBcIitLZTticmVhaztkZWZhdWx0OktlPUdlK0tlLGE9PT1mZSYmKHFlKz1LZSxLZT1cIlwiKX1lbHNlIEtlPVwiXCJ9ZWxzZSBLZT1EZSh0LEJlKHQsR2UsTWUpLEtlLGEsaSsxKTtZZSs9S2UsTT0wLFNlPTAsXz0wLGJlPTAsTWU9MCxMPTAsR2U9XCJcIixLZT1cIlwiLHc9by5jaGFyQ29kZUF0KCsreik7YnJlYWs7Y2FzZSBJOmNhc2UgUjppZigoTGU9KEdlPShiZT4wP0dlLnJlcGxhY2UocixcIlwiKTpHZSkudHJpbSgpKS5sZW5ndGgpPjEpc3dpdGNoKDA9PT1fJiYoKEM9R2UuY2hhckNvZGVBdCgwKSk9PT1VfHxDPjk2JiZDPDEyMykmJihMZT0oR2U9R2UucmVwbGFjZShcIiBcIixcIjpcIikpLmxlbmd0aCksT2U+MCYmdm9pZCAwIT09KHM9V2UoRWUsR2UsdCxlLGdlLGhlLHFlLmxlbmd0aCxhLGksYSkpJiYwPT09KExlPShHZT1zLnRyaW0oKSkubGVuZ3RoKSYmKEdlPVwiXFwwXFwwXCIpLEM9R2UuY2hhckNvZGVBdCgwKSxtPUdlLmNoYXJDb2RlQXQoMSksQyl7Y2FzZSBuZTpicmVhaztjYXNlIE46aWYobT09PXVlfHxtPT09ZGUpe0plKz1HZStvLmNoYXJBdCh6KTticmVha31kZWZhdWx0OmlmKEdlLmNoYXJDb2RlQXQoTGUtMSk9PT1xKWJyZWFrO3FlKz0kZShHZSxDLG0sR2UuY2hhckNvZGVBdCgyKSl9TT0wLFNlPTAsXz0wLGJlPTAsTWU9MCxHZT1cIlwiLHc9by5jaGFyQ29kZUF0KCsreil9fXN3aXRjaCh3KXtjYXNlIFo6Y2FzZSBCOmlmKGQrZitwK3UreWU9PT0wKXN3aXRjaChTKXtjYXNlIEE6Y2FzZSBZOmNhc2UgSjpjYXNlIE46Y2FzZSB0ZTpjYXNlIFE6Y2FzZSBHOmNhc2UgZWU6Y2FzZSBYOmNhc2UgVTpjYXNlIHE6Y2FzZSBLOmNhc2UgUjpjYXNlIFY6Y2FzZSBJOmJyZWFrO2RlZmF1bHQ6Xz4wJiYoU2U9MSl9ZD09PVg/ZD0wOkNlK009PT0wJiZhIT09YWUmJkdlLmxlbmd0aD4wJiYoYmU9MSxHZSs9XCJcXDBcIiksT2UqSWU+MCYmV2UoUGUsR2UsdCxlLGdlLGhlLHFlLmxlbmd0aCxhLGksYSksaGU9MSxnZSsrO2JyZWFrO2Nhc2UgUjpjYXNlIEk6aWYoZCtmK3ArdT09PTApe2hlKys7YnJlYWt9ZGVmYXVsdDpzd2l0Y2goaGUrKyx6ZT1vLmNoYXJBdCh6KSx3KXtjYXNlICQ6Y2FzZSBGOmlmKGYrdStkPT09MClzd2l0Y2goYil7Y2FzZSBLOmNhc2UgcTpjYXNlICQ6Y2FzZSBGOnplPVwiXCI7YnJlYWs7ZGVmYXVsdDp3IT09RiYmKHplPVwiIFwiKX1icmVhaztjYXNlIG5lOnplPVwiXFxcXDBcIjticmVhaztjYXNlIHJlOnplPVwiXFxcXGZcIjticmVhaztjYXNlIG9lOnplPVwiXFxcXHZcIjticmVhaztjYXNlIFc6ZitkK3U9PT0wJiZDZT4wJiYoTWU9MSxiZT0xLHplPVwiXFxmXCIremUpO2JyZWFrO2Nhc2UgMTA4OmlmKGYrZCt1K3ZlPT09MCYmXz4wKXN3aXRjaCh6LV8pe2Nhc2UgMjpiPT09c2UmJm8uY2hhckNvZGVBdCh6LTMpPT09cSYmKHZlPWIpO2Nhc2UgODp4PT09Y2UmJih2ZT14KX1icmVhaztjYXNlIHE6ZitkK3U9PT0wJiYoXz16KTticmVhaztjYXNlIEs6ZCtwK2YrdT09PTAmJihiZT0xLHplKz1cIlxcclwiKTticmVhaztjYXNlIEo6Y2FzZSBZOjA9PT1kJiYoZj1mPT09dz8wOjA9PT1mP3c6Zik7YnJlYWs7Y2FzZSBUOmYrZCtwPT09MCYmdSsrO2JyZWFrO2Nhc2UgRDpmK2QrcD09PTAmJnUtLTticmVhaztjYXNlIEE6ZitkK3U9PT0wJiZwLS07YnJlYWs7Y2FzZSBIOmYrZCt1PT09MCYmKDA9PT1NJiYoMipiKzMqeD09NTMzfHwoTz0wLE09MSkpLHArKyk7YnJlYWs7Y2FzZSBOOmQrcCtmK3UrXytMPT09MCYmKEw9MSk7YnJlYWs7Y2FzZSBHOmNhc2UgWDppZihmK3UrcD4wKWJyZWFrO3N3aXRjaChkKXtjYXNlIDA6c3dpdGNoKDIqdyszKm8uY2hhckNvZGVBdCh6KzEpKXtjYXNlIDIzNTpkPVg7YnJlYWs7Y2FzZSAyMjA6TGU9eixkPUd9YnJlYWs7Y2FzZSBHOnc9PT1YJiZiPT09RyYmTGUrMiE9PXomJigzMz09PW8uY2hhckNvZGVBdChMZSsyKSYmKHFlKz1vLnN1YnN0cmluZyhMZSx6KzEpKSx6ZT1cIlwiLGQ9MCl9fWlmKDA9PT1kKXtpZihDZStmK3UrTD09PTAmJmEhPT1hZSYmdyE9PVIpc3dpdGNoKHcpe2Nhc2UgSzpjYXNlIHRlOmNhc2UgUTpjYXNlIGVlOmNhc2UgQTpjYXNlIEg6aWYoMD09PU0pe3N3aXRjaChiKXtjYXNlICQ6Y2FzZSBGOmNhc2UgQjpjYXNlIFo6emUrPVwiXFwwXCI7YnJlYWs7ZGVmYXVsdDp6ZT1cIlxcMFwiK3plKyh3PT09Sz9cIlwiOlwiXFwwXCIpfWJlPTF9ZWxzZSBzd2l0Y2godyl7Y2FzZSBIOl8rNz09PXomJjEwOD09PWImJihfPTApLE09KytPO2JyZWFrO2Nhc2UgQTowPT0oTT0tLU8pJiYoYmU9MSx6ZSs9XCJcXDBcIil9YnJlYWs7Y2FzZSAkOmNhc2UgRjpzd2l0Y2goYil7Y2FzZSBuZTpjYXNlIFY6Y2FzZSBJOmNhc2UgUjpjYXNlIEs6Y2FzZSByZTpjYXNlICQ6Y2FzZSBGOmNhc2UgQjpjYXNlIFo6YnJlYWs7ZGVmYXVsdDowPT09TSYmKGJlPTEsemUrPVwiXFwwXCIpfX1HZSs9emUsdyE9PUYmJnchPT0kJiYoUz13KX19eD1iLGI9dyx6Kyt9aWYoTGU9cWUubGVuZ3RoLHhlPjAmJjA9PT1MZSYmMD09PVllLmxlbmd0aCYmMD09PXRbMF0ubGVuZ3RoPT0wJiYoYSE9PWllfHwxPT09dC5sZW5ndGgmJihDZT4wP0FlOlRlKT09PXRbMF0pJiYoTGU9dC5qb2luKFwiLFwiKS5sZW5ndGgrMiksTGU+MCl7aWYobD0wPT09Q2UmJmEhPT1hZT9mdW5jdGlvbihlKXtmb3IodmFyIHQsbixvPTAsYT1lLmxlbmd0aCxpPUFycmF5KGEpO288YTsrK28pe2Zvcih2YXIgbD1lW29dLnNwbGl0KGMpLHM9XCJcIix1PTAsZD0wLHA9MCxmPTAsaD1sLmxlbmd0aDt1PGg7Kyt1KWlmKCEoMD09PShkPShuPWxbdV0pLmxlbmd0aCkmJmg+MSkpe2lmKHA9cy5jaGFyQ29kZUF0KHMubGVuZ3RoLTEpLGY9bi5jaGFyQ29kZUF0KDApLHQ9XCJcIiwwIT09dSlzd2l0Y2gocCl7Y2FzZSBHOmNhc2UgdGU6Y2FzZSBROmNhc2UgZWU6Y2FzZSBGOmNhc2UgSDpicmVhaztkZWZhdWx0OnQ9XCIgXCJ9c3dpdGNoKGYpe2Nhc2UgVzpuPXQrQWU7Y2FzZSB0ZTpjYXNlIFE6Y2FzZSBlZTpjYXNlIEY6Y2FzZSBBOmNhc2UgSDpicmVhaztjYXNlIFQ6bj10K24rQWU7YnJlYWs7Y2FzZSBxOnN3aXRjaCgyKm4uY2hhckNvZGVBdCgxKSszKm4uY2hhckNvZGVBdCgyKSl7Y2FzZSA1MzA6aWYod2U+MCl7bj10K24uc3Vic3RyaW5nKDgsZC0xKTticmVha31kZWZhdWx0Oih1PDF8fGxbdS0xXS5sZW5ndGg8MSkmJihuPXQrQWUrbil9YnJlYWs7Y2FzZSBLOnQ9XCJcIjtkZWZhdWx0Om49ZD4xJiZuLmluZGV4T2YoXCI6XCIpPjA/dCtuLnJlcGxhY2UoeSxcIiQxXCIrQWUrXCIkMlwiKTp0K24rQWV9cys9bn1pW29dPXMucmVwbGFjZShyLFwiXCIpLnRyaW0oKX1yZXR1cm4gaX0odCk6dCxPZT4wJiZ2b2lkIDAhPT0ocz1XZShqZSxxZSxsLGUsZ2UsaGUsTGUsYSxpLGEpKSYmMD09PShxZT1zKS5sZW5ndGgpcmV0dXJuIEplK3FlK1llO2lmKHFlPWwuam9pbihcIixcIikrXCJ7XCIrcWUrXCJ9XCIsbWUqdmUhPTApe3N3aXRjaCgyIT09bWV8fE5lKHFlLDIpfHwodmU9MCksdmUpe2Nhc2UgY2U6cWU9cWUucmVwbGFjZSh2LFwiOlwiK0UrXCIkMVwiKStxZTticmVhaztjYXNlIHNlOnFlPXFlLnJlcGxhY2UoZyxcIjo6XCIrUCtcImlucHV0LSQxXCIpK3FlLnJlcGxhY2UoZyxcIjo6XCIrRStcIiQxXCIpK3FlLnJlcGxhY2UoZyxcIjpcIitqK1wiaW5wdXQtJDFcIikrcWV9dmU9MH19cmV0dXJuIEplK3FlK1llfWZ1bmN0aW9uIEJlKGUsdCxuKXt2YXIgcj10LnRyaW0oKS5zcGxpdCh1KSxvPXIsYT1yLmxlbmd0aCxpPWUubGVuZ3RoO3N3aXRjaChpKXtjYXNlIDA6Y2FzZSAxOmZvcih2YXIgbD0wLHM9MD09PWk/XCJcIjplWzBdK1wiIFwiO2w8YTsrK2wpb1tsXT1aZShzLG9bbF0sbixpKS50cmltKCk7YnJlYWs7ZGVmYXVsdDpsPTA7dmFyIGM9MDtmb3Iobz1bXTtsPGE7KytsKWZvcih2YXIgZD0wO2Q8aTsrK2Qpb1tjKytdPVplKGVbZF0rXCIgXCIscltsXSxuLGkpLnRyaW0oKX1yZXR1cm4gb31mdW5jdGlvbiBaZShlLHQsbixyKXt2YXIgbz10LGE9by5jaGFyQ29kZUF0KDApO3N3aXRjaChhPDMzJiYoYT0obz1vLnRyaW0oKSkuY2hhckNvZGVBdCgwKSksYSl7Y2FzZSBXOnN3aXRjaChDZStyKXtjYXNlIDA6Y2FzZSAxOmlmKDA9PT1lLnRyaW0oKS5sZW5ndGgpYnJlYWs7ZGVmYXVsdDpyZXR1cm4gby5yZXBsYWNlKGQsXCIkMVwiK2UudHJpbSgpKX1icmVhaztjYXNlIHE6aWYoMTAzIT09by5jaGFyQ29kZUF0KDEpKXJldHVybiBlLnRyaW0oKStvLnJlcGxhY2UoZCxcIiQxXCIrZS50cmltKCkpO2lmKHdlPjAmJkNlPjApcmV0dXJuIG8ucmVwbGFjZShwLFwiJDFcIikucmVwbGFjZShkLFwiJDFcIitUZSk7ZGVmYXVsdDppZihuKkNlPjAmJm8uaW5kZXhPZihcIlxcZlwiKT4wKXJldHVybiBvLnJlcGxhY2UoZCwoZS5jaGFyQ29kZUF0KDApPT09cT9cIlwiOlwiJDFcIikrZS50cmltKCkpfXJldHVybiBlK299ZnVuY3Rpb24gJGUoZSx0LG4scil7dmFyIGMsdT0wLGQ9ZStcIjtcIixwPTIqdCszKm4rNCpyO2lmKDk0ND09PXApcmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49ZS5pbmRleE9mKFwiOlwiLDkpKzEscj1lLnN1YnN0cmluZygwLG4pLnRyaW0oKSxvPWUuc3Vic3RyaW5nKG4sdC0xKS50cmltKCk7c3dpdGNoKGUuY2hhckNvZGVBdCg5KSpWZSl7Y2FzZSAwOmJyZWFrO2Nhc2UgVTppZigxMTAhPT1lLmNoYXJDb2RlQXQoMTApKWJyZWFrO2RlZmF1bHQ6dmFyIGE9by5zcGxpdCgobz1cIlwiLGwpKSxpPTA7Zm9yKG49MCx0PWEubGVuZ3RoO2k8dDtuPTAsKytpKXtmb3IodmFyIGM9YVtpXSx1PWMuc3BsaXQocyk7Yz11W25dOyl7dmFyIGQ9Yy5jaGFyQ29kZUF0KDApO2lmKDE9PT1WZSYmKGQ+TiYmZDw5MHx8ZD45NiYmZDwxMjN8fGQ9PT16fHxkPT09VSYmYy5jaGFyQ29kZUF0KDEpIT09VSkmJmlzTmFOKHBhcnNlRmxvYXQoYykpKygtMSE9PWMuaW5kZXhPZihcIihcIikpPT09MSlzd2l0Y2goYyl7Y2FzZVwiaW5maW5pdGVcIjpjYXNlXCJhbHRlcm5hdGVcIjpjYXNlXCJiYWNrd2FyZHNcIjpjYXNlXCJydW5uaW5nXCI6Y2FzZVwibm9ybWFsXCI6Y2FzZVwiZm9yd2FyZHNcIjpjYXNlXCJib3RoXCI6Y2FzZVwibm9uZVwiOmNhc2VcImxpbmVhclwiOmNhc2VcImVhc2VcIjpjYXNlXCJlYXNlLWluXCI6Y2FzZVwiZWFzZS1vdXRcIjpjYXNlXCJlYXNlLWluLW91dFwiOmNhc2VcInBhdXNlZFwiOmNhc2VcInJldmVyc2VcIjpjYXNlXCJhbHRlcm5hdGUtcmV2ZXJzZVwiOmNhc2VcImluaGVyaXRcIjpjYXNlXCJpbml0aWFsXCI6Y2FzZVwidW5zZXRcIjpjYXNlXCJzdGVwLXN0YXJ0XCI6Y2FzZVwic3RlcC1lbmRcIjpicmVhaztkZWZhdWx0OmMrPUhlfXVbbisrXT1jfW8rPSgwPT09aT9cIlwiOlwiLFwiKSt1LmpvaW4oXCIgXCIpfX1yZXR1cm4gbz1yK28rXCI7XCIsMT09PW1lfHwyPT09bWUmJk5lKG8sMSk/UCtvK286b30oZCk7aWYoMD09PW1lfHwyPT09bWUmJiFOZShkLDEpKXJldHVybiBkO3N3aXRjaChwKXtjYXNlIDEwMTU6cmV0dXJuIDk3PT09ZC5jaGFyQ29kZUF0KDEwKT9QK2QrZDpkO2Nhc2UgOTUxOnJldHVybiAxMTY9PT1kLmNoYXJDb2RlQXQoMyk/UCtkK2Q6ZDtjYXNlIDk2MzpyZXR1cm4gMTEwPT09ZC5jaGFyQ29kZUF0KDUpP1ArZCtkOmQ7Y2FzZSAxMDA5OmlmKDEwMCE9PWQuY2hhckNvZGVBdCg0KSlicmVhaztjYXNlIDk2OTpjYXNlIDk0MjpyZXR1cm4gUCtkK2Q7Y2FzZSA5Nzg6cmV0dXJuIFArZCtFK2QrZDtjYXNlIDEwMTk6Y2FzZSA5ODM6cmV0dXJuIFArZCtFK2QraitkK2Q7Y2FzZSA4ODM6cmV0dXJuIGQuY2hhckNvZGVBdCg4KT09PVU/UCtkK2Q6ZC5pbmRleE9mKFwiaW1hZ2Utc2V0KFwiLDExKT4wP2QucmVwbGFjZShfLFwiJDFcIitQK1wiJDJcIikrZDpkO2Nhc2UgOTMyOmlmKGQuY2hhckNvZGVBdCg0KT09PVUpc3dpdGNoKGQuY2hhckNvZGVBdCg1KSl7Y2FzZSAxMDM6cmV0dXJuIFArXCJib3gtXCIrZC5yZXBsYWNlKFwiLWdyb3dcIixcIlwiKStQK2QraitkLnJlcGxhY2UoXCJncm93XCIsXCJwb3NpdGl2ZVwiKStkO2Nhc2UgMTE1OnJldHVybiBQK2QraitkLnJlcGxhY2UoXCJzaHJpbmtcIixcIm5lZ2F0aXZlXCIpK2Q7Y2FzZSA5ODpyZXR1cm4gUCtkK2orZC5yZXBsYWNlKFwiYmFzaXNcIixcInByZWZlcnJlZC1zaXplXCIpK2R9cmV0dXJuIFArZCtqK2QrZDtjYXNlIDk2NDpyZXR1cm4gUCtkK2orXCJmbGV4LVwiK2QrZDtjYXNlIDEwMjM6aWYoOTkhPT1kLmNoYXJDb2RlQXQoOCkpYnJlYWs7cmV0dXJuIGM9ZC5zdWJzdHJpbmcoZC5pbmRleE9mKFwiOlwiLDE1KSkucmVwbGFjZShcImZsZXgtXCIsXCJcIikucmVwbGFjZShcInNwYWNlLWJldHdlZW5cIixcImp1c3RpZnlcIiksUCtcImJveC1wYWNrXCIrYytQK2QraitcImZsZXgtcGFja1wiK2MrZDtjYXNlIDEwMDU6cmV0dXJuIGEudGVzdChkKT9kLnJlcGxhY2UobyxcIjpcIitQKStkLnJlcGxhY2UobyxcIjpcIitFKStkOmQ7Y2FzZSAxZTM6c3dpdGNoKHU9KGM9ZC5zdWJzdHJpbmcoMTMpLnRyaW0oKSkuaW5kZXhPZihcIi1cIikrMSxjLmNoYXJDb2RlQXQoMCkrYy5jaGFyQ29kZUF0KHUpKXtjYXNlIDIyNjpjPWQucmVwbGFjZSh4LFwidGJcIik7YnJlYWs7Y2FzZSAyMzI6Yz1kLnJlcGxhY2UoeCxcInRiLXJsXCIpO2JyZWFrO2Nhc2UgMjIwOmM9ZC5yZXBsYWNlKHgsXCJsclwiKTticmVhaztkZWZhdWx0OnJldHVybiBkfXJldHVybiBQK2QraitjK2Q7Y2FzZSAxMDE3OmlmKC0xPT09ZC5pbmRleE9mKFwic3RpY2t5XCIsOSkpcmV0dXJuIGQ7Y2FzZSA5NzU6c3dpdGNoKHU9KGQ9ZSkubGVuZ3RoLTEwLHA9KGM9KDMzPT09ZC5jaGFyQ29kZUF0KHUpP2Quc3Vic3RyaW5nKDAsdSk6ZCkuc3Vic3RyaW5nKGUuaW5kZXhPZihcIjpcIiw3KSsxKS50cmltKCkpLmNoYXJDb2RlQXQoMCkrKDB8Yy5jaGFyQ29kZUF0KDcpKSl7Y2FzZSAyMDM6aWYoYy5jaGFyQ29kZUF0KDgpPDExMSlicmVhaztjYXNlIDExNTpkPWQucmVwbGFjZShjLFArYykrXCI7XCIrZDticmVhaztjYXNlIDIwNzpjYXNlIDEwMjpkPWQucmVwbGFjZShjLFArKHA+MTAyP1wiaW5saW5lLVwiOlwiXCIpK1wiYm94XCIpK1wiO1wiK2QucmVwbGFjZShjLFArYykrXCI7XCIrZC5yZXBsYWNlKGMsaitjK1wiYm94XCIpK1wiO1wiK2R9cmV0dXJuIGQrXCI7XCI7Y2FzZSA5Mzg6aWYoZC5jaGFyQ29kZUF0KDUpPT09VSlzd2l0Y2goZC5jaGFyQ29kZUF0KDYpKXtjYXNlIDEwNTpyZXR1cm4gYz1kLnJlcGxhY2UoXCItaXRlbXNcIixcIlwiKSxQK2QrUCtcImJveC1cIitjK2orXCJmbGV4LVwiK2MrZDtjYXNlIDExNTpyZXR1cm4gUCtkK2orXCJmbGV4LWl0ZW0tXCIrZC5yZXBsYWNlKE8sXCJcIikrZDtkZWZhdWx0OnJldHVybiBQK2QraitcImZsZXgtbGluZS1wYWNrXCIrZC5yZXBsYWNlKFwiYWxpZ24tY29udGVudFwiLFwiXCIpLnJlcGxhY2UoTyxcIlwiKStkfWJyZWFrO2Nhc2UgOTczOmNhc2UgOTg5OmlmKGQuY2hhckNvZGVBdCgzKSE9PVV8fDEyMj09PWQuY2hhckNvZGVBdCg0KSlicmVhaztjYXNlIDkzMTpjYXNlIDk1MzppZighMD09PUwudGVzdChlKSlyZXR1cm4gMTE1PT09KGM9ZS5zdWJzdHJpbmcoZS5pbmRleE9mKFwiOlwiKSsxKSkuY2hhckNvZGVBdCgwKT8kZShlLnJlcGxhY2UoXCJzdHJldGNoXCIsXCJmaWxsLWF2YWlsYWJsZVwiKSx0LG4scikucmVwbGFjZShcIjpmaWxsLWF2YWlsYWJsZVwiLFwiOnN0cmV0Y2hcIik6ZC5yZXBsYWNlKGMsUCtjKStkLnJlcGxhY2UoYyxFK2MucmVwbGFjZShcImZpbGwtXCIsXCJcIikpK2Q7YnJlYWs7Y2FzZSA5NjI6aWYoZD1QK2QrKDEwMj09PWQuY2hhckNvZGVBdCg1KT9qK2Q6XCJcIikrZCxuK3I9PT0yMTEmJjEwNT09PWQuY2hhckNvZGVBdCgxMykmJmQuaW5kZXhPZihcInRyYW5zZm9ybVwiLDEwKT4wKXJldHVybiBkLnN1YnN0cmluZygwLGQuaW5kZXhPZihcIjtcIiwyNykrMSkucmVwbGFjZShpLFwiJDFcIitQK1wiJDJcIikrZH1yZXR1cm4gZH1mdW5jdGlvbiBOZShlLHQpe3ZhciBuPWUuaW5kZXhPZigxPT09dD9cIjpcIjpcIntcIikscj1lLnN1YnN0cmluZygwLDMhPT10P246MTApLG89ZS5zdWJzdHJpbmcobisxLGUubGVuZ3RoLTEpO3JldHVybiBNZSgyIT09dD9yOnIucmVwbGFjZShNLFwiJDFcIiksbyx0KX1mdW5jdGlvbiBGZShlLHQpe3ZhciBuPSRlKHQsdC5jaGFyQ29kZUF0KDApLHQuY2hhckNvZGVBdCgxKSx0LmNoYXJDb2RlQXQoMikpO3JldHVybiBuIT09dCtcIjtcIj9uLnJlcGxhY2UoUyxcIiBvciAoJDEpXCIpLnN1YnN0cmluZyg0KTpcIihcIit0K1wiKVwifWZ1bmN0aW9uIFdlKGUsdCxuLHIsbyxhLGksbCxzLGMpe2Zvcih2YXIgdSxkPTAscD10O2Q8T2U7KytkKXN3aXRjaCh1PVNlW2RdLmNhbGwoR2UsZSxwLG4scixvLGEsaSxsLHMsYykpe2Nhc2Ugdm9pZCAwOmNhc2UhMTpjYXNlITA6Y2FzZSBudWxsOmJyZWFrO2RlZmF1bHQ6cD11fWlmKHAhPT10KXJldHVybiBwfWZ1bmN0aW9uIFVlKGUsdCxuLHIpe2Zvcih2YXIgbz10KzE7bzxuOysrbylzd2l0Y2goci5jaGFyQ29kZUF0KG8pKXtjYXNlIFg6aWYoZT09PUcmJnIuY2hhckNvZGVBdChvLTEpPT09RyYmdCsyIT09bylyZXR1cm4gbysxO2JyZWFrO2Nhc2UgQjppZihlPT09WClyZXR1cm4gbysxfXJldHVybiBvfWZ1bmN0aW9uIHplKGUpe2Zvcih2YXIgdCBpbiBlKXt2YXIgbj1lW3RdO3N3aXRjaCh0KXtjYXNlXCJrZXlmcmFtZVwiOlZlPTB8bjticmVhaztjYXNlXCJnbG9iYWxcIjp3ZT0wfG47YnJlYWs7Y2FzZVwiY2FzY2FkZVwiOkNlPTB8bjticmVhaztjYXNlXCJjb21wcmVzc1wiOmJlPTB8bjticmVhaztjYXNlXCJzZW1pY29sb25cIjp5ZT0wfG47YnJlYWs7Y2FzZVwicHJlc2VydmVcIjp4ZT0wfG47YnJlYWs7Y2FzZVwicHJlZml4XCI6TWU9bnVsbCxuP1wiZnVuY3Rpb25cIiE9dHlwZW9mIG4/bWU9MToobWU9MixNZT1uKTptZT0wfX1yZXR1cm4gemV9ZnVuY3Rpb24gR2UodCxuKXtpZih2b2lkIDAhPT10aGlzJiZ0aGlzLmNvbnN0cnVjdG9yPT09R2UpcmV0dXJuIGUodCk7dmFyIG89dCxhPW8uY2hhckNvZGVBdCgwKTthPDMzJiYoYT0obz1vLnRyaW0oKSkuY2hhckNvZGVBdCgwKSksVmU+MCYmKEhlPW8ucmVwbGFjZShmLGE9PT1UP1wiXCI6XCItXCIpKSxhPTEsMT09PUNlP1RlPW86QWU9bzt2YXIgaSxsPVtUZV07T2U+MCYmdm9pZCAwIT09KGk9V2UoX2UsbixsLGwsZ2UsaGUsMCwwLDAsMCkpJiZcInN0cmluZ1wiPT10eXBlb2YgaSYmKG49aSk7dmFyIHM9RGUoa2UsbCxuLDAsMCk7cmV0dXJuIE9lPjAmJnZvaWQgMCE9PShpPVdlKExlLHMsbCxsLGdlLGhlLHMubGVuZ3RoLDAsMCwwKSkmJlwic3RyaW5nXCIhPXR5cGVvZihzPWkpJiYoYT0wKSxIZT1cIlwiLFRlPVwiXCIsQWU9XCJcIix2ZT0wLGdlPTEsaGU9MSxiZSphPT0wP3M6cy5yZXBsYWNlKHIsXCJcIikucmVwbGFjZShDLFwiXCIpLnJlcGxhY2UobSxcIiQxXCIpLnJlcGxhY2UodyxcIiQxXCIpLnJlcGxhY2UoYixcIiBcIil9cmV0dXJuIEdlLnVzZT1mdW5jdGlvbiBlKHQpe3N3aXRjaCh0KXtjYXNlIHZvaWQgMDpjYXNlIG51bGw6T2U9U2UubGVuZ3RoPTA7YnJlYWs7ZGVmYXVsdDppZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KVNlW09lKytdPXQ7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgdClmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjsrK24pZSh0W25dKTtlbHNlIEllPTB8ISF0fXJldHVybiBlfSxHZS5zZXQ9emUsdm9pZCAwIT09dCYmemUodCksR2V9KG51bGwpfSwzNjE6ZT0+e2UuZXhwb3J0cz17YXJlYTohMCxiYXNlOiEwLGJyOiEwLGNvbDohMCxlbWJlZDohMCxocjohMCxpbWc6ITAsaW5wdXQ6ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9fX0sdD17fTtmdW5jdGlvbiBuKHIpe3ZhciBvPXRbcl07aWYodm9pZCAwIT09bylyZXR1cm4gby5leHBvcnRzO3ZhciBhPXRbcl09e2V4cG9ydHM6e319O3JldHVybiBlW3JdKGEsYS5leHBvcnRzLG4pLGEuZXhwb3J0c31uLm49ZT0+e3ZhciB0PWUmJmUuX19lc01vZHVsZT8oKT0+ZS5kZWZhdWx0OigpPT5lO3JldHVybiBuLmQodCx7YTp0fSksdH0sbi5kPShlLHQpPT57Zm9yKHZhciByIGluIHQpbi5vKHQscikmJiFuLm8oZSxyKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7ZW51bWVyYWJsZTohMCxnZXQ6dFtyXX0pfSxuLmc9ZnVuY3Rpb24oKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2goZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxuLm89KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpLG4ucj1lPT57XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sbi5uYz12b2lkIDA7dmFyIHI9e307KCgpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGUsdCxvLGEsaSxsLHMsYztuLnIociksbi5kKHIse0FwcE1hbmlmZXN0VHlwZTooKT0+cyxCb29rbWFya0l0ZW1Db250ZXh0TWVudU9wdGlvblR5cGU6KCk9Pm0sQnJvd3NlckJ1dHRvblR5cGU6KCk9PmIsQ29sb3JTY2hlbWVPcHRpb25UeXBlOigpPT5nLEN1c3RvbUFjdGlvbkNhbGxlclR5cGU6KCk9PmssRW50ZXJwcmlzZU1haW5Db250ZXh0TWVudU9wdGlvblR5cGU6KCk9PkMsR2xvYmFsQ29udGV4dE1lbnVPcHRpb25UeXBlOigpPT5oLFBhZ2VDaGFuZ2VFdmVudFR5cGU6KCk9PmYsUGFnZVRhYkNvbnRleHRNZW51T3B0aW9uVHlwZTooKT0+dixQYW5lbFBvc2l0aW9uOigpPT5wLFNVUFBPUlRFRF9MQU5HVUFHRVM6KCk9Pk0uU1VQUE9SVEVEX0xBTkdVQUdFUyxTYXZlQnV0dG9uQ29udGV4dE1lbnVPcHRpb25UeXBlOigpPT55LFNhdmVNb2RhbFR5cGU6KCk9PlMsVmlld1RhYk1lbnVPcHRpb25UeXBlOigpPT53LFdpbmRvd1R5cGU6KCk9PngsZ2V0Q3VycmVudFN5bmM6KCk9Pk90LGluaXQ6KCk9Pm9sLHdyYXBTeW5jOigpPT5TdH0pLGZ1bmN0aW9uKGUpe2UuRmV0Y2hpbmc9XCJmZXRjaGluZ1wiLGUuRmV0Y2hlZD1cImZldGNoZWRcIixlLkNvbXBsZXRlPVwiY29tcGxldGVcIn0oZXx8KGU9e30pKSxmdW5jdGlvbihlKXtlLlVzZXJBY3Rpb249XCJ1c2VyLWFjdGlvblwiLGUuRm9jdXNDaGFuZ2U9XCJmb2N1cy1jaGFuZ2VcIixlLlJlbG9hZD1cInJlbG9hZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKGUpe2UuQWN0aXZlPVwiYWN0aXZlXCIsZS5EZWZhdWx0PVwiZGVmYXVsdFwifShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe2UuU3VnZ2VzdGlvbj1cInN1Z2dlc3Rpb25cIn0oYXx8KGE9e30pKSxmdW5jdGlvbihlKXtlLkNvbnRhY3Q9XCJDb250YWN0XCIsZS5DdXN0b209XCJDdXN0b21cIixlLkxpc3Q9XCJMaXN0XCIsZS5QbGFpbj1cIlBsYWluXCIsZS5TaW1wbGVUZXh0PVwiU2ltcGxlVGV4dFwiLGUuTG9hZGluZz1cIkxvYWRpbmdcIixlLkVycm9yPVwiRXJyb3JcIn0oaXx8KGk9e30pKSxmdW5jdGlvbihlKXtlLk11bHRpU2VsZWN0PVwiTXVsdGlTZWxlY3RcIn0obHx8KGw9e30pKSxmdW5jdGlvbihlKXtlLlNuYXBzaG90PVwic25hcHNob3RcIixlLk1hbmlmZXN0PVwibWFuaWZlc3RcIixlLlZpZXc9XCJ2aWV3XCIsZS5FeHRlcm5hbD1cImV4dGVybmFsXCJ9KHN8fChzPXt9KSksZnVuY3Rpb24oZSl7ZS5MYW5kaW5nUGFnZT1cImxhbmRpbmdQYWdlXCIsZS5BcHBHcmlkPVwiYXBwR3JpZFwifShjfHwoYz17fSkpO3ZhciB1LGQscDshZnVuY3Rpb24oZSl7ZS5QcmltYXJ5PVwicHJpbWFyeVwiLGUuU2Vjb25kYXJ5PVwic2Vjb25kYXJ5XCIsZS5UZXh0T25seT1cInRleHRPbmx5XCJ9KHV8fCh1PXt9KSksZnVuY3Rpb24oZSl7ZS5BY3Rpb25CdXR0b249XCJBY3Rpb25CdXR0b25cIixlLkRyb3Bkb3duQnV0dG9uPVwiRHJvcGRvd25CdXR0b25cIn0oZHx8KGQ9e30pKSxmdW5jdGlvbihlKXtlLkxlZnQ9XCJMZWZ0XCIsZS5SaWdodD1cIlJpZ2h0XCIsZS5Ub3A9XCJUb3BcIixlLkJvdHRvbT1cIkJvdHRvbVwifShwfHwocD17fSkpO3ZhciBmLGgsZyx2LEMsbSx3LGIseSx4LGssUyxPLE09bigzMDQpOyFmdW5jdGlvbihlKXtlLlVybENoYW5nZT1cIlVSTF9DSEFOR0VcIixlLlZpZXdBZGRlZD1cIlZJRVdfQURERURcIixlLlZpZXdSZW1vdmVkPVwiVklFV19SRU1PVkVEXCIsZS5QYWdlQ29udGV4dEFkZGVkPVwiUEFHRV9DT05URVhUX0FEREVEXCIsZS5QYWdlQ29udGV4dFJlbW92ZWQ9XCJQQUdFX0NPTlRFWFRfUkVNT1ZFRFwifShmfHwoZj17fSkpLGZ1bmN0aW9uKGUpe2UuTmV3V2luZG93PVwiTmV3V2luZG93XCIsZS5OZXdQYWdlPVwiTmV3UGFnZVwiLGUuU2F2ZVBhZ2U9XCJTYXZlUGFnZVwiLGUuU2F2ZVBhZ2VBcz1cIlNhdmVQYWdlQXNcIixlLlByaW50PVwiUHJpbnRcIixlLlByaW50QWxsPVwiUHJpbnRBbGxcIixlLlByaW50U2NyZWVuPVwiUHJpbnRTY3JlZW5cIixlLkNsb3NlV2luZG93PVwiQ2xvc2VXaW5kb3dcIixlLlJlc3RvcmVDaGFuZ2VzPVwiUmVzdG9yZUNoYW5nZXNcIixlLlNhdmVXb3Jrc3BhY2U9XCJTYXZlV29ya3NwYWNlXCIsZS5TYXZlV29ya3NwYWNlQXM9XCJTYXZlV29ya3NwYWNlQXNcIixlLlJlbmFtZVdvcmtzcGFjZT1cIlJlbmFtZVdvcmtzcGFjZVwiLGUuU3dpdGNoV29ya3NwYWNlPVwiU3dpdGNoV29ya3NwYWNlXCIsZS5EZWxldGVXb3Jrc3BhY2U9XCJEZWxldGVXb3Jrc3BhY2VcIixlLkRvd25sb2Fkcz1cIkRvd25sb2Fkc1wiLGUuT3BlblN0b3JlZnJvbnQ9XCJPcGVuU3RvcmVmcm9udFwiLGUuQXBwZWFyYW5jZT1cIkFwcGVhcmFuY2VcIixlLlF1aXQ9XCJRdWl0XCIsZS5DdXN0b209XCJDdXN0b21cIn0oaHx8KGg9e30pKSxmdW5jdGlvbihlKXtlLkxpZ2h0PVwibGlnaHRcIixlLkRhcms9XCJkYXJrXCIsZS5TeXN0ZW09XCJzeXN0ZW1cIn0oZ3x8KGc9e30pKSxmdW5jdGlvbihlKXtlLkNsb3NlPVwiQ2xvc2VcIixlLkR1cGxpY2F0ZT1cIkR1cGxpY2F0ZVwiLGUuUmVuYW1lPVwiUmVuYW1lXCIsZS5TYXZlPVwiU2F2ZVwiLGUuU2F2ZUFzPVwiU2F2ZSBBc1wiLGUuTmV3UGFnZT1cIk5ldyBQYWdlXCIsZS5EZWxldGVQYWdlPVwiRGVsZXRlIFBhZ2VcIixlLlNhdmVXb3Jrc3BhY2VBcz1cIlNhdmVXb3Jrc3BhY2VBc1wiLGUuUmVmcmVzaD1cIlJlZnJlc2hcIixlLkNsb3NlT3RoZXJzPVwiQ2xvc2Ugb3RoZXJzXCIsZS5EZWxldGU9XCJEZWxldGVcIixlLkN1c3RvbT1cIkN1c3RvbVwifSh2fHwodj17fSkpLGZ1bmN0aW9uKGUpe2UuTG9jaz1cIkxvY2tcIixlLlNob3dIaWRlVGFicz1cIlNob3dIaWRlVGFic1wiLGUuQWRkVG9DaGFuZWw9XCJBZGRUb0NoYW5uZWxcIixlLlByaW50PVwiUHJpbnRcIixlLlBpbj1cIlBpblwifShDfHwoQz17fSkpLGZ1bmN0aW9uKGUpe2UuRWRpdE5hbWU9XCJFZGl0IE5hbWVcIixlLk1vdmU9XCJNb3ZlXCIsZS5EZWxldGU9XCJEZWxldGVcIn0obXx8KG09e30pKSxmdW5jdGlvbihlKXtlLk5ld1ZpZXc9XCJOZXdWaWV3XCIsZS5EdXBsaWNhdGVWaWV3cz1cIkR1cGxpY2F0ZVZpZXdcIixlLk9wZW5XaXRoRGVmYXVsdEJyb3dzZXI9XCJPcGVuV2l0aERlZmF1bHRCcm93c2VyXCIsZS5SZWxvYWRWaWV3cz1cIlJlbG9hZFRhYlwiLGUuQ2xvc2VWaWV3cz1cIkNsb3NlVGFiXCIsZS5BZGRUb0NoYW5uZWw9XCJBZGRUb0NoYW5uZWxcIixlLlJlbW92ZUZyb21DaGFubmVsPVwiUmVtb3ZlRnJvbUNoYW5uZWxcIixlLkJhY2s9XCJCYWNrXCIsZS5Gb3J3YXJkPVwiRm9yd2FyZFwiLGUuUHJpbnQ9XCJQcmludFwiLGUuUHJpbnRBbGw9XCJQcmludEFsbFwiLGUuUHJpbnRTY3JlZW49XCJQcmludFNjcmVlblwiLGUuQ3VzdG9tPVwiQ3VzdG9tXCJ9KHd8fCh3PXt9KSksZnVuY3Rpb24oZSl7ZS5TaG93SGlkZVRhYnM9XCJTaG93SGlkZVRhYnNcIixlLkNvbG9yTGlua2luZz1cIkNvbG9yTGlua2luZ1wiLGUuUHJlc2V0TGF5b3V0cz1cIlByZXNldExheW91dHNcIixlLkxvY2tVbmxvY2tQYWdlPVwiTG9ja1VubG9ja1BhZ2VcIixlLlNhdmVNZW51PVwiU2F2ZU1lbnVcIixlLlNhdmVQYWdlPVwiU2F2ZVBhZ2VcIixlLk1pbmltaXNlPVwiTWluaW1pc2VcIixlLk1heGltaXNlPVwiTWF4aW1pc2VcIixlLkNsb3NlPVwiQ2xvc2VcIixlLkN1c3RvbT1cIkN1c3RvbVwifShifHwoYj17fSkpLGZ1bmN0aW9uKGUpe2UuU2F2ZVBhZ2U9XCJTYXZlUGFnZVwiLGUuU2F2ZVdvcmtzcGFjZT1cIlNhdmVXb3Jrc3BhY2VcIixlLlNhdmVQYWdlQXM9XCJTYXZlUGFnZUFzXCIsZS5TYXZlV29ya3NwYWNlQXM9XCJTYXZlV29ya3NwYWNlQXNcIixlLkN1c3RvbT1cIkN1c3RvbVwifSh5fHwoeT17fSkpLGZ1bmN0aW9uKGUpe2UuQnJvd3Nlcj1cImJyb3dzZXJcIixlLlBsYXRmb3JtPVwicGxhdGZvcm1cIn0oeHx8KHg9e30pKSxmdW5jdGlvbihlKXtlLkN1c3RvbUJ1dHRvbj1cIkN1c3RvbUJ1dHRvblwiLGUuU3RvcmVDdXN0b21CdXR0b249XCJTdG9yZUN1c3RvbUJ1dHRvblwiLGUuQ3VzdG9tRHJvcGRvd25JdGVtPVwiQ3VzdG9tRHJvcGRvd25JdGVtXCIsZS5HbG9iYWxDb250ZXh0TWVudT1cIkdsb2JhbENvbnRleHRNZW51XCIsZS5WaWV3VGFiQ29udGV4dE1lbnU9XCJWaWV3VGFiQ29udGV4dE1lbnVcIixlLlBhZ2VUYWJDb250ZXh0TWVudT1cIlBhZ2VUYWJDb250ZXh0TWVudVwiLGUuU2F2ZUJ1dHRvbkNvbnRleHRNZW51PVwiU2F2ZUJ1dHRvbkNvbnRleHRNZW51XCIsZS5BUEk9XCJBUElcIn0oa3x8KGs9e30pKSxmdW5jdGlvbihlKXtlLlNBVkVfUEFHRT1cIlNBVkVfUEFHRVwiLGUuU0FWRV9XT1JLU1BBQ0U9XCJTQVZFX1dPUktTUEFDRVwiLGUuU0FWRV9QQUdFX0FTPVwiU0FWRV9QQUdFX0FTXCIsZS5TQVZFX1dPUktTUEFDRV9BUz1cIlNBVkVfV09SS1NQQUNFX0FTXCIsZS5SRU5BTUVfUEFHRT1cIlJFTkFNRV9QQUdFXCIsZS5SRU5BTUVfV09SS1NQQUNFPVwiUkVOQU1FX1dPUktTUEFDRVwifShTfHwoUz17fSkpLGZ1bmN0aW9uKGUpe2UuSG9tZT1cIi9ob21lL1wiLGUuSG9tZVNlYXJjaD1cIi9ob21lLz9kZWVwbGluaz1zZWFyY2hcIixlLkhvbWVQYWdlc1JlbmFtZT1cIi9ob21lL3BhZ2VzL3JlbmFtZS9cIixlLkRvY2s9XCIvZG9jay9cIixlLkJyb3dzZXI9XCIvYnJvd3Nlci9cIixlLkJyb3dzZXJQb3B1cE1lbnU9XCIvYnJvd3Nlci9wb3B1cC1tZW51L1wiLGUuUHJvdmlkZXI9XCIvcHJvdmlkZXIvXCIsZS5Ccm93c2VyUG9wdXBNZW51U2F2ZU1vZGFsPVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9zYXZlLW1vZGFsL1wiLGUuQnJvd3NlclBvcHVwTWVudUxheW91dHM9XCIvYnJvd3Nlci9wb3B1cC1tZW51L2xheW91dHMvbGF5b3V0cy9cIixlLkJyb3dzZXJQb3B1cE1lbnVDb2xvckxpbmtpbmc9XCIvYnJvd3Nlci9wb3B1cC1tZW51L2NvbG9yLWxpbmtpbmcvY29sb3ItbGlua2luZy9cIixlLkJyb3dzZXJJbmRpY2F0b3I9XCIvYnJvd3Nlci9pbmRpY2F0b3IvXCIsZS5Ccm93c2VyUG9wdXBNZW51QWRkcmVzc1NlYXJjaFJlc3VsdHNWaWV3PVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9hZGRyZXNzLXNlYXJjaC1yZXN1bHRzLXZpZXcvXCIsZS5SZXNwb25zZU1vZGFsPVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9yZXNwb25zZS1tb2RhbC9cIixlLkNsb3NlQ29uZmlybWF0aW9uTW9kYWw9XCIvYnJvd3Nlci9wb3B1cC1tZW51L2Nsb3NlLWNvbmZpcm1hdGlvbi1tb2RhbC9cIixlLkRvY3M9XCIvcHJvdmlkZXIvZG9jcy9cIixlLlN0b3JlZnJvbnQ9XCIvc3RvcmVmcm9udC9cIixlLkRlcHJlY2F0ZWRBbGVydD1cIi9wcm92aWRlci9kZXByZWNhdGVkLWFsZXJ0L1wiLGUuQW5hbHl0aWNzPVwiL3Byb3ZpZGVyL2FuYWx5dGljcy9cIixlLkVudGVycHJpc2VCcm93c2VyPVwiL2Jyb3dzZXIvZW50ZXJwcmlzZS9cIixlLkVudGVycHJpc2VDb250ZXh0TWVudT1cIi9icm93c2VyL2VudGVycHJpc2UvY29udGV4dC1tZW51L1wiLGUuRW50ZXJwcmlzZUJvb2ttYXJrRGlhbG9nPVwiL2Jyb3dzZXIvZW50ZXJwcmlzZS9ib29rbWFyay1kaWFsb2cvXCIsZS5Ecm9wZG93bk1lbnU9XCIvYnJvd3Nlci9lbnRlcnByaXNlL2Ryb3Bkb3duLW1lbnUvXCJ9KE98fChPPXt9KSk7dmFyIEw7IWZ1bmN0aW9uKGUpe2UuU2VhcmNoPVwic2VhcmNoXCJ9KEx8fChMPXt9KSk7Y29uc3QgXz1PO3ZhciBQOyFmdW5jdGlvbihlKXtlLkxvY2FsPVwibG9jYWxcIixlLkRldj1cImRldlwiLGUuU3RhZ2luZz1cInN0YWdpbmdcIixlLlByb2Q9XCJwcm9kXCJ9KFB8fChQPXt9KSk7Y29uc3QgRT1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZmluLGo9KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBwcm9jZXNzfHxwcm9jZXNzLmVudixcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KSxSPWomJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBpbmRleGVkREIsST1qP3dpbmRvdy5vcmlnaW46UC5Mb2NhbCxWPUUmJmZpbi5tZS51dWlkLEg9RSYmZmluLm1lLm5hbWUsQT1FJiZmaW4ubWUuZW50aXR5VHlwZSxUPShQLkxvY2FsLFAuRGV2LFAuU3RhZ2luZyxcInByb2RcIj09PVAuUHJvZCksRD1lPT5lLnN0YXJ0c1dpdGgoXCJodHRwOi8vXCIpfHxlLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKT9lOkkrZSxCPUQoXCJodHRwczovL3dvcmtzcGFjZS5vcGVuZmluLmNvL3dvcmtzcGFjZS8yMC4wLjVcIiksWj1EKFwiaHR0cHM6Ly93b3Jrc3BhY2Uub3BlbmZpbi5jby93b3Jrc3BhY2UvMjAuMC41XCIpLCQ9KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBXT1JLU1BBQ0VfRE9DU19QTEFURk9STV9VUkwmJkQoV09SS1NQQUNFX0RPQ1NfUExBVEZPUk1fVVJMKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgV09SS1NQQUNFX0RPQ1NfQ0xJRU5UX1VSTCYmRChXT1JLU1BBQ0VfRE9DU19DTElFTlRfVVJMKSxcIjQwLjEzMC4xMDAuN1wiKSxOPVwiMjAuMC41XCI7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFdPUktTUEFDRV9CVUlMRF9TSEEmJldPUktTUEFDRV9CVUlMRF9TSEE7dmFyIEYsVzshZnVuY3Rpb24oZSl7ZS5Xb3Jrc3BhY2U9XCJvcGVuZmluLXdvcmtzcGFjZVwiLGUuT2xkV29ya3NwYWNlPVwib3BlbmZpbi1icm93c2VyXCJ9KEZ8fChGPXt9KSksZnVuY3Rpb24oZSl7ZS5GaW5Qcm90b2NvbD1cImZpbi1wcm90b2NvbFwifShXfHwoVz17fSkpO2NvbnN0IFU9e3V1aWQ6Vn0sej0oRi5Xb3Jrc3BhY2UsZT0+e2lmKCFFKXRocm93IG5ldyBFcnJvcihcImdldEFwcGxpY2F0aW9uIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uIE9wZW5GaW4gZW52LiBBdm9pZCB1c2luZyB0aGlzIGR1cmluZyBwcmUtcmVuZGVyaW5nLlwiKTtyZXR1cm4gZmluLkFwcGxpY2F0aW9uLndyYXBTeW5jKGUpfSksRz0oKT0+eihVKTt2YXIgSzshZnVuY3Rpb24oZSl7ZS5Ib21lPVwib3BlbmZpbi1ob21lXCIsZS5Eb2NrPVwib3BlbmZpbi1kb2NrXCIsZS5TdG9yZWZyb250PVwib3BlbmZpbi1zdG9yZWZyb250XCIsZS5Ib21lSW50ZXJuYWw9XCJvcGVuZmluLWhvbWUtaW50ZXJuYWxcIixlLkJyb3dzZXJNZW51PVwib3BlbmZpbi1icm93c2VyLW1lbnVcIixlLkJyb3dzZXJTYXZlTWVudT1cIm9wZW5maW4tYnJvd3Nlci1zYXZlLW1lbnVcIixlLkJyb3dzZXJJbmRpY2F0b3I9XCJvcGVuZmluLWJyb3dzZXItaW5kaWNhdG9yXCIsZS5Ccm93c2VyV2luZG93PVwiaW50ZXJuYWwtZ2VuZXJhdGVkLXdpbmRvd1wiLGUuQ2xhc3NpY1dpbmRvdz1cImludGVybmFsLWdlbmVyYXRlZC1jbGFzc2ljLXdpbmRvd1wiLGUuRW50ZXJwcmlzZUNvbnRleHRNZW51PVwib3BlbmZpbi1lbnRlcnByaXNlLWNvbnRleHQtbWVudVwiLGUuQnJvd3NlckFkZHJlc3NTZWFyY2hQcmVmaXg9XCJvcGVuZmluLWJyb3dzZXItbWVudS1hZGRyZXNzLXNlYXJjaC1cIixlLkVudGVycHJpc2VCb29rbWFya0RpYWxvZ1dpbmRvdz1cIm9wZW5maW4tZW50ZXJwcmlzZS1ib29rbWFyay1kaWFsb2dcIixlLkRyb3Bkb3duTWVudT1cIm9wZW5maW4tZW50ZXJwcmlzZS1kcm9wZG93bi1tZW51XCJ9KEt8fChLPXt9KSk7ZnVuY3Rpb24gcShlKXtpZighRSl0aHJvdyBuZXcgRXJyb3IoXCJnZXRPRldpbmRvdyBjYW4gb25seSBiZSB1c2VkIGluIGFuIE9wZW5GaW4gZW52LiBBdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kIGR1cmluZyBwcmUtcmVuZGVyaW5nLlwiKTtyZXR1cm4gZmluLldpbmRvdy53cmFwU3luYyhlKX1jb25zdCBZPXtuYW1lOkgsdXVpZDpWfTtLLkhvbWUsRi5Xb3Jrc3BhY2UsSy5Eb2NrLEYuV29ya3NwYWNlO2NvbnN0IEo9e25hbWU6Sy5TdG9yZWZyb250LHV1aWQ6Ri5Xb3Jrc3BhY2V9O0YuV29ya3NwYWNlLEYuV29ya3NwYWNlO2FzeW5jIGZ1bmN0aW9uIFgoZSl7Y29uc3QgdD1xKGUpO1wibWluaW1pemVkXCI9PT1hd2FpdCB0LmdldFN0YXRlKCkmJmF3YWl0IHQucmVzdG9yZSgpLGF3YWl0IHQuc2hvdygpLGF3YWl0IHQuc2V0QXNGb3JlZ3JvdW5kKCl9Y29uc3QgUT1hc3luYyBlPT57dHJ5e2NvbnN0IHQ9YXdhaXQgZmluLldpbmRvdy53cmFwU3luYyh7bmFtZTplLm5hbWUsdXVpZDplLnV1aWQ/P2Zpbi5tZS51dWlkfSkuZ2V0T3B0aW9ucygpO3JldHVybihcImJyb3dzZXJcIj09PXQud29ya3NwYWNlUGxhdGZvcm0/LndpbmRvd1R5cGV8fFwiZW50ZXJwcmlzZVwiPT09dC53b3Jrc3BhY2VQbGF0Zm9ybT8ud2luZG93VHlwZSkmJnQud29ya3NwYWNlUGxhdGZvcm0/LnBhZ2VzfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLndhcm4oXCJpc0Jyb3dzZXJXaW5kb3cgZXJyb3I6IFwiLGUpLCExfX07YXN5bmMgZnVuY3Rpb24gZWUoKXtjb25zdCBlPWF3YWl0IGZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpLmdldENoaWxkV2luZG93cygpLHQ9YXdhaXQgUHJvbWlzZS5hbGwoZS5tYXAoKGFzeW5jIGU9PlEoZS5pZGVudGl0eSkpKSk7cmV0dXJuIGUuZmlsdGVyKCgoZSxuKT0+dFtuXSkpfWFzeW5jIGZ1bmN0aW9uIHRlKCl7cmV0dXJuKGF3YWl0IGZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpLmdldENoaWxkV2luZG93cygpKS5maWx0ZXIoKGU9PmUuaWRlbnRpdHkubmFtZS5zdGFydHNXaXRoKEsuQnJvd3Nlck1lbnUpKSl9Y29uc3QgbmU9ZT0+cShlKS5nZXRPcHRpb25zKCkudGhlbigoKCk9PiEwKSkuY2F0Y2goKCgpPT4hMSkpLHJlPSgpPT5uZShKKSxvZT1lPT5gJHtlLnRvcH0sJHtlLmxlZnR9LCR7ZS5oZWlnaHR9LCR7ZS53aWR0aH0sJHtlLmJvdHRvbX0sJHtlLnJpZ2h0fWA7ZnVuY3Rpb24gYWUoZSx0KXtjb25zdCBuPWUudG9wLHI9ZS5sZWZ0LG89ZS50b3ArZS5oZWlnaHQsYT1lLmxlZnQrZS53aWR0aCxpPXQubW9uaXRvclJlY3QudG9wLGw9dC5tb25pdG9yUmVjdC5sZWZ0LHM9dC5tb25pdG9yUmVjdC5ib3R0b20sYz10Lm1vbml0b3JSZWN0LnJpZ2h0O2lmKG4+c3x8bzxpfHxyPmN8fGE8bClyZXR1cm4gMDtjb25zdCB1PU1hdGgubWF4KG4saSksZD1NYXRoLm1heChyLGwpO3JldHVybihNYXRoLm1pbihvLHMpLXUpKihNYXRoLm1pbihhLGMpLWQpLyhlLmhlaWdodCplLndpZHRoKX1hc3luYyBmdW5jdGlvbiBpZShlKXtjb25zdCB0PWF3YWl0IGZpbi5TeXN0ZW0uZ2V0TW9uaXRvckluZm8oKTtyZXR1cm5bdC5wcmltYXJ5TW9uaXRvciwuLi50Lm5vblByaW1hcnlNb25pdG9yc10ucmVkdWNlKCgodCxuKT0+e2NvbnN0IHI9YWUoZSxuKTtyZXR1cm4gcj50LnBlcmNlbnRhZ2U/e3BlcmNlbnRhZ2U6cixtb25pdG9yOm59OnR9KSx7cGVyY2VudGFnZTowLG1vbml0b3I6dC5wcmltYXJ5TW9uaXRvcn0pLm1vbml0b3J9Y29uc3QgbGU9YXN5bmMgZT0+e2NvbnN0IHQ9ZT9maW4uV2luZG93LndyYXBTeW5jKGUpOmZpbi5XaW5kb3cuZ2V0Q3VycmVudFN5bmMoKSxuPWF3YWl0IHQuZ2V0T3B0aW9ucygpO3JldHVybiBuLndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlJiZcImVudGVycHJpc2VcIj09PW4ud29ya3NwYWNlUGxhdGZvcm0ud2luZG93VHlwZX0sc2U9ZT0+e2NvbnN0IHQ9ZT8uZGVmYXVsdFdpbmRvd09wdGlvbnM/LndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlO3JldHVyblwiZW50ZXJwcmlzZVwiPT09dH07dmFyIGNlOyFmdW5jdGlvbihlKXtlLkJyb3dzZXI9XCJCcm93c2VyXCIsZS5Eb2NrPVwiRG9ja1wiLGUuSG9tZT1cIkhvbWVcIixlLk5vdGlmaWNhdGlvbj1cIk5vdGlmaWNhdGlvblwiLGUuU3RvcmVmcm9udD1cIlN0b3JlZnJvbnRcIixlLlBsYXRmb3JtPVwiUGxhdGZvcm1cIixlLlRoZW1pbmc9XCJUaGVtaW5nXCIsZS5NaWNyb2Zsb3c9XCJNaWNyb2Zsb3dcIn0oY2V8fChjZT17fSkpO2NvbnN0IHVlPWFzeW5jKGUsdCxuPVwid29ya3NwYWNlLWxpY2Vuc2luZ1wiKT0+e2NvbnN0IHI9e2FwaVZlcnNpb246dC5hcGlWZXJzaW9ufHxOLGNvbXBvbmVudE5hbWU6ZSxjb21wb25lbnRWZXJzaW9uOnQuY29tcG9uZW50VmVyc2lvbnx8TixhbGxvd2VkOnQuYWxsb3dlZCxyZWplY3Rpb25Db2RlOnQucmVqZWN0aW9uQ29kZX07ZmluLlN5c3RlbS5yZWdpc3RlclVzYWdlKHt0eXBlOm4sZGF0YTpyfSl9O2xldCBkZT0hMTtjb25zdCBwZT1uZXcgTWFwLGZlPWU9PntsZXQgdD1wZS5nZXQoZS51dWlkKTtyZXR1cm4gdHx8KHQ9U3QoZSksdC5vbmNlKFwiY2xvc2VkXCIsKCgpPT57cGUuZGVsZXRlKGUudXVpZCl9KSkscGUuc2V0KGUudXVpZCx0KSksdH0saGU9YXN5bmMoZSx0KT0+e3RyeXthd2FpdCBlLl9yYWlzZUFuYWx5dGljcyhbdF0pfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gcmFpc2UgYW5hbHl0aWNzIGV2ZW50XCIsZSl9fSxnZT1hc3luYyBlPT57YXdhaXQgaGUoZmUoZmluLm1lLmlkZW50aXR5KSx7c291cmNlOlwiQnJvd3NlclwiLC4uLmV9KX07dmFyIHZlPW4oMzc4KTtjb25zdCBDZT1lPT5maW4uU3lzdGVtLmdldFN5c3RlbUFwcENvbmZpZyhlKTtsZXQgbWU7YXN5bmMgZnVuY3Rpb24gd2UoKXtpZihtZSlyZXR1cm4gbWU7Y29uc3QgZT1cImdldE92ZXJyaWRlc1wiO2lmKCFFKXJldHVybiBqJiZjb25zb2xlLndhcm4oYCR7ZX06IFRoZSBGaW4gQVBJIHdhcyBub3QgYXZhaWxhYmxlLiBSZXR1cm5pbmcgYW4gZW1wdHkgcmVzdWx0LmApLHt9O2NvbnN0IHQ9YXdhaXQgYXN5bmMgZnVuY3Rpb24oKXtjb25zdCBlPVwiZ2V0RE9TT3ZlcnJpZGVzXCI7aWYoIUUpcmV0dXJuIGNvbnNvbGUud2FybihgJHtlfTogdGhlIGZpbiBBUEkgd2FzIG5vdCBhdmFpbGFibGUsIHJldHVybmluZyBubyByZXN1bHRgKSx7fTt0cnl7bGV0IHQ9YXdhaXQgQ2UoXCJ3b3Jrc3BhY2VcIikuY2F0Y2goKHQ9Pntjb25zb2xlLndhcm4oYCR7ZX06IGN1c3RvbUNvbmZpZyBlbnRyeSBmb3IgU3lzdGVtQXBwIHdvcmtzcGFjZSBub3QgYXZhaWxhYmxlIGluIERlc2t0b3AgT3duZXIgU2V0dGluZ3MuICR7dD8ubWVzc2FnZX1gKX0pKTtyZXR1cm4gdHx8KHQ9YXdhaXQgQ2UoXCJob21lXCIpKSxKU09OLnN0cmluZ2lmeSh0KSx0fWNhdGNoKHQpe2lmKCFUKXJldHVybnt9O2lmKCEodCBpbnN0YW5jZW9mIEVycm9yKSl0aHJvdyB0O2NvbnNvbGUud2FybihgJHtlfTogTWlzc2luZyBXb3Jrc3BhY2UgRGVza3RvcCBPd25lciBTZXR0aW5ncyBjb25maWd1cmF0aW9uLCB1c2luZyBkZWZhdWx0cy4gJHt0Py5tZXNzYWdlfWApfXJldHVybnt9fSgpLG49YXdhaXQgYXN5bmMgZnVuY3Rpb24oKXtjb25zdCBlPVwiZ2V0TWFuaWZlc3RPdmVycmlkZXNcIix7bWFuaWZlc3Q6dCxpbml0aWFsT3B0aW9uczpufT1hd2FpdCBmaW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudFN5bmMoKS5nZXRJbmZvKCk7cmV0dXJuIHQ/LnBsYXRmb3JtLndvcmtzcGFjZXx8dD8ucGxhdGZvcm0uaG9tZXx8bj8ud29ya3NwYWNlfHxuPy5ob21lfHxjb25zb2xlLndhcm4oYCR7ZX06IE1pc3NpbmcgSG9tZSBkZXZlbG9wbWVudCBtYW5pZmVzdCBvdmVycmlkZXMsIHVzaW5nIERlc2t0b3AgT3duZXIgU2V0dGluZ3MuYCksdD8ucGxhdGZvcm0ud29ya3NwYWNlPyhKU09OLnN0cmluZ2lmeSh0Py5wbGF0Zm9ybS53b3Jrc3BhY2UpLHQ/LnBsYXRmb3JtLndvcmtzcGFjZSk6dD8ucGxhdGZvcm0uaG9tZT8oSlNPTi5zdHJpbmdpZnkodD8ucGxhdGZvcm0uaG9tZSksdD8ucGxhdGZvcm0uaG9tZSk6bj8ud29ya3NwYWNlPyhKU09OLnN0cmluZ2lmeShuPy53b3Jrc3BhY2UpLG4/LndvcmtzcGFjZSk6bj8uaG9tZT8oSlNPTi5zdHJpbmdpZnkobj8uaG9tZSksbj8uaG9tZSk6e319KCk7cmV0dXJuIG1lPXsuLi5uLC4uLnR9LG1lfWxldCBiZTtjb25zdCB5ZT1hc3luYyBlPT57YmV8fChiZT1uZXcgVGV4dEVuY29kZXIpO2NvbnN0IHQ9YmUuZW5jb2RlKGUpLG49YXdhaXQgd2luZG93LmNyeXB0by5zdWJ0bGUuZGlnZXN0KFwiU0hBLTI1NlwiLHQpO3JldHVybiBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KG4pKS5tYXAoKGU9PmUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsXCIwXCIpKSkuam9pbihcIlwiKX07ZnVuY3Rpb24geGUoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiYhQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBrZShlLC4uLnQpe2lmKCF0Lmxlbmd0aClyZXR1cm4gZTtjb25zdCBuPXQuc2hpZnQoKTtyZXR1cm4geGUoZSkmJnhlKG4pJiZPYmplY3QuZW50cmllcyhuKS5mb3JFYWNoKCgoW3Qsbl0pPT57aWYoeGUobikpcmV0dXJuIGVbdF18fChlW3RdPXt9KSxrZShlW3RdLG4pO2VbdF09bn0pKSxrZShlLC4uLnQpfXZhciBTZSxPZT1uKDE5OCksTWU9bi5uKE9lKTshZnVuY3Rpb24oZSl7ZS5DdXJyZW50V29ya3NwYWNlSWQ9XCJjdXJyZW50V29ya3NwYWNlSWRcIixlLkxhc3RGb2N1c2VkQnJvd3NlcldpbmRvdz1cImxhc3RGb2N1c2VkQnJvd3NlcldpbmRvd1wiLGUuTWFjaGluZU5hbWU9XCJtYWNoaW5lTmFtZVwiLGUuTmV3VGFiUGFnZUxheW91dD1cIk5ld1RhYlBhZ2VMYXlvdXRcIixlLk5ld1RhYlBhZ2VTb3J0PVwiTmV3VGFiUGFnZVNvcnRcIixlLkRvY2tQb3NpdGlvbj1cIkRvY2tQb3NpdGlvblwiLGUuU2VsZWN0ZWRDb2xvclNjaGVtZT1cIlNlbGVjdGVkQ29sb3JTY2hlbWVcIixlLkhhc01vdmVkU3RvcmU9XCJIYXNNb3ZlZFN0b3JlXCIsZS5QYWdlRHJhZ1N0YXRlPVwiQnJvd3NlclBhZ2VEcmFnU3RhdGVcIn0oU2V8fChTZT17fSkpO2NvbnN0IExlPVNlO2Z1bmN0aW9uIF9lKCl7cmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKExlLk1hY2hpbmVOYW1lKT8/XCJ1bmtub3duXCJ9bGV0IFBlO2FzeW5jIGZ1bmN0aW9uIEVlKCl7cmV0dXJuIFBlfHwoUGU9YXdhaXQgZmluLlN5c3RlbS5nZXRNYWNoaW5lSWQoKSksUGV9Y29uc3QgamU9ZT0+e2lmKEFycmF5LmlzQXJyYXkoZS53b3Jrc3BhY2VQbGF0Zm9ybT8ucGFnZXMpJiYoZS5sYXlvdXRTbmFwc2hvdHx8ZS5sYXlvdXQpKXtjb25zdCB0PWUud29ya3NwYWNlUGxhdGZvcm0ucGFnZXMuZmluZCgoZT0+ZS5pc0FjdGl2ZSkpO2lmKHQpe2NvbnN0IG49ZS5sYXlvdXRTbmFwc2hvdD9lLmxheW91dFNuYXBzaG90LmxheW91dHNbdC5sYXlvdXRDb250YWluZXJLZXldOmUubGF5b3V0O2lmKG4paWYodC5pc0xvY2tlZCl7Y29uc3Qgcj1IdChuLHQubGF5b3V0KTt0LmxheW91dD1yLGUubGF5b3V0PXJ9ZWxzZSB0LmxheW91dD1uLGUubGF5b3V0PW59fXJldHVybiBlfTthc3luYyBmdW5jdGlvbiBSZShlKXtjb25zdCB0PWV8fGF3YWl0IGZpbi5QbGF0Zm9ybS5nZXRDdXJyZW50U3luYygpLmdldFNuYXBzaG90KCk7aWYodC5zbmFwc2hvdERldGFpbHM/Lm1hY2hpbmVJZClyZXR1cm4gdDtjb25zdCBuPV9lKCk7cmV0dXJuey4uLnQsc25hcHNob3REZXRhaWxzOnsuLi50LnNuYXBzaG90RGV0YWlscyxtYWNoaW5lSWQ6YXdhaXQgRWUoKSxtYWNoaW5lTmFtZTpufX19ZnVuY3Rpb24gSWUoKXtyZXR1cm4gdm9pZCAwIT09dHlwZW9mIGNyeXB0byYmXCJyYW5kb21VVUlEXCJpbiBjcnlwdG8mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGNyeXB0by5yYW5kb21VVUlEP2NyeXB0by5yYW5kb21VVUlEKCk6XCIxMDAwMDAwMC0xMDAwLTQwMDAtODAwMC0xMDAwMDAwMDAwMDBcIi5yZXBsYWNlKC9bMDE4XS9nLChlPT4oZV5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSYxNT4+ZS80KS50b1N0cmluZygxNikpKX1jb25zdCBWZT1qJiZcImNvbXBsZXRlXCIhPT1kb2N1bWVudC5yZWFkeVN0YXRlJiZuZXcgUHJvbWlzZSgoZT0+ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInJlYWR5c3RhdGVjaGFuZ2VcIiwoKCk9PntcImNvbXBsZXRlXCI9PT1kb2N1bWVudC5yZWFkeVN0YXRlJiZlKCl9KSkpKTtmdW5jdGlvbiBIZShlKXtsZXQgdDtjb25zdCBuPW5ldyBTZXQ7cmV0dXJuKCk9PntpZighRSl0aHJvdyBuZXcgRXJyb3IoXCJnZXRDaGFubmVsQ2xpZW50IGNhbm5vdCBiZSB1c2VkIG91dHNpZGUgYW4gT3BlbkZpbiBlbnYuIEF2b2lkIHVzaW5nIHRoaXMgbWV0aG9kIGR1cmluZyBwcmUtcmVuZGVyaW5nLlwiKTtyZXR1cm4gdHx8KHQ9KGFzeW5jKCk9Pnthd2FpdCBWZTtjb25zdCByPXtjbGllbnRBUElWZXJzaW9uOk59LG89YXdhaXQgZmluLkludGVyQXBwbGljYXRpb25CdXMuQ2hhbm5lbC5jb25uZWN0KGUse3BheWxvYWQ6cn0pO3JldHVybiBvLm9uRGlzY29ubmVjdGlvbigoYXN5bmMoKT0+e24uZm9yRWFjaCgoZT0+ZSgpKSksbi5jbGVhcigpLGNvbnNvbGUud2FybihgZGlzY29ubmVjdGVkIGZyb20gY2hhbm5lbCBwcm92aWRlciAke2V9YCksdD12b2lkIDB9KSksb30pKCkudGhlbigoZT0+KGUuYWRkRGlzY29ubmVjdGlvbkxpc3RlbmVyPWU9PntuLmFkZChlKX0sZSkpKS5jYXRjaCgobj0+e3Rocm93IHQ9dm9pZCAwLG5ldyBFcnJvcihgZmFpbGVkIHRvIGNvbm5lY3QgdG8gY2hhbm5lbCBwcm92aWRlciAke2V9OiAke259YCl9KSkpLHR9fXZhciBBZSxUZTshZnVuY3Rpb24oZSl7ZS5GZXRjaGluZz1cImZldGNoaW5nXCIsZS5GZXRjaGVkPVwiZmV0Y2hlZFwiLGUuQ29tcGxldGU9XCJjb21wbGV0ZVwifShBZXx8KEFlPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkluaXRpYWw9MF09XCJJbml0aWFsXCIsZVtlLk9wZW49MV09XCJPcGVuXCIsZVtlLkNsb3NlPTJdPVwiQ2xvc2VcIn0oVGV8fChUZT17fSkpO2NvbnN0IERlPUhlKFwiX19vZl93b3Jrc3BhY2VfcHJvdG9jb2xfX1wiKSxCZT1EZTtIZShcIl9fc2VhcmNoLW9wZW5maW4tYnJvd3Nlci1ob21lLXRvcGljX19cIik7Y29uc3QgWmU9YXN5bmMgZT0+KHsuLi5lLGxheW91dERldGFpbHM6e21hY2hpbmVJZDphd2FpdCBFZSgpLG1hY2hpbmVOYW1lOl9lKCl9fSksJGU9YXN5bmMoZSx0KT0+KHtwYWdlSWQ6SWUoKSx0aXRsZTplLGxheW91dDphd2FpdCBaZSh0KSxpc1JlYWRPbmx5OiExfSksTmU9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgJGUoZS50aXRsZSxSdChlLmxheW91dCkpO3JldHVybiBlLnBhbmVscyYmKHQucGFuZWxzPWUucGFuZWxzLm1hcCgoZT0+KHsuLi5lLHZpZXdPcHRpb25zOmp0KGUudmlld09wdGlvbnMpfSkpKSksey4uLmUsLi4udH19LEZlPWU9Pntjb25zdCB0PWZpbi5QbGF0Zm9ybS5MYXlvdXQud3JhcFN5bmMoZSk7cmV0dXJue3Nob3c6YXN5bmMoKT0+e2NvbnN0IG49YXdhaXQgdC5nZXRDb25maWcoKSx7c2V0dGluZ3M6cixkaW1lbnNpb25zOm99PW4sYT1hd2FpdCBsZShlKTthd2FpdCB0LnJlcGxhY2Uoey4uLm4sc2V0dGluZ3M6ey4uLnIsaGFzSGVhZGVyczohMCxyZW9yZGVyRW5hYmxlZDohMH0sZGltZW5zaW9uczp7Li4ubyxoZWFkZXJIZWlnaHQ6YT8yODozMH19KX0saGlkZTphc3luYyBlPT57Y29uc3Qgbj1hd2FpdCB0LmdldENvbmZpZygpLHtzZXR0aW5nczpyLGRpbWVuc2lvbnM6b309YXdhaXQgbjthd2FpdCB0LnJlcGxhY2Uoey4uLm4sc2V0dGluZ3M6ey4uLnIsaGFzSGVhZGVyczohMSxyZW9yZGVyRW5hYmxlZDplPy5zZXR0aW5ncz8ucmVvcmRlckVuYWJsZWQ/PyExfSxkaW1lbnNpb25zOnsuLi5vLGhlYWRlckhlaWdodDowfX0pfSxpc1Nob3dpbmdUYWJzOmFzeW5jKCk9Pnt0cnl7Y29uc3QgZT1hd2FpdCB0LmdldENvbmZpZygpLHtzZXR0aW5nczpufT1hd2FpdCBlO3JldHVybiBuLmhhc0hlYWRlcnN9Y2F0Y2goZSl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gZ2V0IGxheW91dCBjb25maWc6IFwiLGUpLCEwfX19fTt2YXIgV2U7IWZ1bmN0aW9uKGUpe2UuTGF1bmNoQXBwPVwibGF1bmNoQXBwXCIsZS5TYXZlUGFnZT1cInNhdmVQYWdlXCIsZS5HZXRTYXZlZFBhZ2U9XCJnZXRTYXZlZFBhZ2VcIixlLkNyZWF0ZVNhdmVkUGFnZT1cImNyZWF0ZVNhdmVkUGFnZVwiLGUuVXBkYXRlU2F2ZWRQYWdlPVwidXBkYXRlU2F2ZWRQYWdlXCIsZS5EZWxldGVTYXZlZFBhZ2U9XCJkZWxldGVTYXZlZFBhZ2VcIixlLkdldFNhdmVkUGFnZXM9XCJnZXRTYXZlZFBhZ2VzXCIsZS5DcmVhdGVTYXZlZFBhZ2VJbnRlcm5hbD1cImNyZWF0ZVNhdmVkUGFnZUludGVybmFsXCIsZS5VcGRhdGVTYXZlZFBhZ2VJbnRlcm5hbD1cInVwZGF0ZVNhdmVkUGFnZUludGVybmFsXCIsZS5EZWxldGVTYXZlZFBhZ2VJbnRlcm5hbD1cImRlbGV0ZVNhdmVkUGFnZUludGVybmFsXCIsZS5VcGRhdGVQYWdlRm9yV2luZG93PVwidXBkYXRlUGFnZUZvcldpbmRvd1wiLGUuQXR0YWNoUGFnZXNUb1dpbmRvdz1cImF0dGFjaFBhZ2VzVG9XaW5kb3dcIixlLkRldGFjaFBhZ2VzRnJvbVdpbmRvdz1cImRldGFjaFBhZ2VzRnJvbVdpbmRvd1wiLGUuUmVvcmRlclBhZ2VzRm9yV2luZG93PVwicmVvcmRlclBhZ2VzRm9yV2luZG93XCIsZS5TZXRBY3RpdmVQYWdlPVwic2V0QWN0aXZlUGFnZVwiLGUuQWRkUGFnZT1cImFkZFBhZ2VcIixlLkFkZERlZmF1bHRQYWdlPVwiYWRkRGVmYXVsdFBhZ2VcIixlLkdldEFsbEF0dGFjaGVkUGFnZXM9XCJnZXRBbGxBdHRhY2hlZFBhZ2VzXCIsZS5HZXRBY3RpdmVQYWdlSWRGb3JXaW5kb3c9XCJnZXRBY3RpdmVQYWdlSWRGb3JXaW5kb3dcIixlLkdldFBhZ2VzRm9yV2luZG93PVwiZ2V0UGFnZXNGb3JXaW5kb3dcIixlLkdldFBhZ2VGb3JXaW5kb3c9XCJnZXRQYWdlRm9yV2luZG93XCIsZS5HZXRTYXZlZFBhZ2VNZXRhZGF0YT1cImdldFNhdmVkUGFnZU1ldGFkYXRhXCIsZS5HZXRVbmlxdWVQYWdlVGl0bGU9XCJnZXRVbmlxdWVQYWdlVGl0bGVcIixlLkdldExhc3RGb2N1c2VkQnJvd3NlcldpbmRvdz1cImdldExhc3RGb2N1c2VkQnJvd3NlcldpbmRvd1wiLGUuR2V0VGhlbWVzPVwiZ2V0VGhlbWVzXCIsZS5HZXRTZWxlY3RlZFNjaGVtZT1cImdldFNlbGVjdGVkU2NoZW1lXCIsZS5TZXRTZWxlY3RlZFNjaGVtZT1cInNldFNlbGVjdGVkU2NoZW1lXCIsZS5PcGVuR2xvYmFsQ29udGV4dE1lbnVJbnRlcm5hbD1cIm9wZW5HbG9iYWxDb250ZXh0TWVudUludGVybmFsXCIsZS5PcGVuVmlld1RhYkNvbnRleHRNZW51SW50ZXJuYWw9XCJvcGVuVmlld1RhYkNvbnRleHRNZW51SW50ZXJuYWxcIixlLk9wZW5QYWdlVGFiQ29udGV4dE1lbnVJbnRlcm5hbD1cIm9wZW5QYWdlVGFiQ29udGV4dE1lbnVJbnRlcm5hbFwiLGUuT3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsPVwib3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsXCIsZS5JbnZva2VDdXN0b21BY3Rpb25JbnRlcm5hbD1cImludm9rZUN1c3RvbUFjdGlvbkludGVybmFsXCIsZS5SZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nSW50ZXJuYWw9XCJyZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nSW50ZXJuYWxcIixlLkdldFNhdmVkV29ya3NwYWNlPVwiZ2V0U2F2ZWRXb3Jrc3BhY2VcIixlLkNyZWF0ZVNhdmVkV29ya3NwYWNlPVwiY3JlYXRlU2F2ZWRXb3Jrc3BhY2VcIixlLlVwZGF0ZVNhdmVkV29ya3NwYWNlPVwidXBkYXRlU2F2ZWRXb3Jrc3BhY2VcIixlLkRlbGV0ZVNhdmVkV29ya3NwYWNlPVwiZGVsZXRlU2F2ZWRXb3Jrc3BhY2VcIixlLkdldFNhdmVkV29ya3NwYWNlcz1cImdldFNhdmVkV29ya3NwYWNlc1wiLGUuU2F2ZVdvcmtzcGFjZT1cInNhdmVXb3Jrc3BhY2VcIixlLkdldEN1cnJlbnRXb3Jrc3BhY2U9XCJnZXRDdXJyZW50V29ya3NwYWNlXCIsZS5BcHBseVdvcmtzcGFjZT1cImFwcGx5V29ya3NwYWNlXCIsZS5TZXRBY3RpdmVXb3Jrc3BhY2U9XCJzZXRBY3RpdmVXb3Jrc3BhY2VcIixlLklzQnJvd3NlckluaXRpYWxpemVkPVwiaXNCcm93c2VySW5pdGlhbGl6ZWRcIixlLkFuYWx5dGljcz1cImFuYWx5dGljc0ludGVybmFsXCIsZS5HZXRMYW5ndWFnZT1cImdldExhbmd1YWdlXCIsZS5HZXRMYW5ndWFnZVJlc291cmNlc0ludGVybmFsPVwiZ2V0TGFuZ3VhZ2VSZXNvdXJjZXNJbnRlcm5hbFwiLGUuU2V0TGFuZ3VhZ2U9XCJzZXRMYW5ndWFnZVwiLGUuR2V0RG9ja1Byb3ZpZGVyQ29uZmlnPVwiZ2V0RG9ja1Byb3ZpZGVyQ29uZmlnXCIsZS5TYXZlRG9ja1Byb3ZpZGVyQ29uZmlnPVwic2F2ZURvY2tQcm92aWRlckNvbmZpZ1wiLGUuSGFuZGxlU2F2ZU1vZGFsT25QYWdlQ2xvc2U9XCJoYW5kbGVTYXZlTW9kYWxPblBhZ2VDbG9zZVwiLGUuU2hvdWxkUGFnZUNsb3NlPVwic2hvdWxkUGFnZUNsb3NlXCIsZS5TaG91bGRXaW5kb3dDbG9zZT1cInNob3VsZFdpbmRvd0Nsb3NlXCIsZS5Db3B5UGFnZT1cImNvcHlQYWdlXCIsZS5IYW5kbGVQYWdlQ2hhbmdlcz1cImhhbmRsZVBhZ2VDaGFuZ2VzXCIsZS5NYXJrVW5zYXZlZFBhZ2VzQXNTYXZlZEludGVybmFsPVwibWFya1Vuc2F2ZWRQYWdlc0FzU2F2ZWRJbnRlcm5hbFwiLGUuVHJhY2tSZW1vdmVkVGFiSW50ZXJuYWw9XCJ0cmFja1JlbW92ZWRUYWJJbnRlcm5hbFwiLGUuUmVzdG9yZVJlbW92ZWRUYWJJbnRlcm5hbD1cInJlc3RvcmVSZW1vdmVkVGFiSW50ZXJuYWxcIixlLlRyYWNrVmlzaXRlZFNpdGVJbnRlcm5hbD1cInRyYWNrVmlzaXRlZFNpdGVJbnRlcm5hbFwiLGUuR2V0UmVjZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbD1cImdldFJlY2VudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWxcIixlLkdldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbD1cImdldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbFwiLGUuU2VhcmNoU2l0ZXNJbnRlcm5hbD1cInNlYXJjaFNpdGVzSW50ZXJuYWxcIixlLkdldEN1cmF0ZWRDb250ZW50SW50ZXJuYWw9XCJnZXRDdXJhdGVkQ29udGVudEludGVybmFsXCIsZS5IYW5kbGVSZXF1ZXN0TmF2aWdhdGlvbkludGVybmFsPVwiaGFuZGxlUmVxdWVzdE5hdmlnYXRpb25JbnRlcm5hbFwiLGUuUmVmcmVzaEJvb2ttYXJrc0ludGVybmFsPVwicmVmcmVzaEJvb2ttYXJrc0ludGVybmFsXCIsZS5HZXROb3RpZmljYXRpb25zQ29uZmlnPVwiZ2V0Tm90aWZpY2F0aW9uc0NvbmZpZ1wifShXZXx8KFdlPXt9KSk7Y29uc3QgVWU9YXN5bmMgZT0+ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmdldENsaWVudCgpLHplPWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IFVlKGUpLG49XCJUYXJnZXQgaXMgbm90IGEgV29ya3NwYWNlIFBsYXRmb3JtLiBUYXJnZXQgbXVzdCBjYWxsIFdvcmtzcGFjZVBsYXRmb3JtLmluaXRcIjtsZXQgcjt0cnl7cj1hd2FpdCB0LmRpc3BhdGNoKFwiaXNXb3Jrc3BhY2VQbGF0Zm9ybVwiKX1jYXRjaChlKXt0aHJvdyBuZXcgRXJyb3Iobil9aWYoXCJib29sZWFuXCI9PXR5cGVvZiByJiZyKXJldHVybiBjb25zb2xlLndhcm4oXCJZb3UgYXJlIHVzaW5nIGFuIG9sZGVyIHZlcnNpb24gb2YgdGhlIHdvcmtzcGFjZSBwbGF0Zm9ybS4gUGxlYXNlIHVwZGF0ZSB5b3VyIHdvcmtzcGFjZSBwbGF0Zm9ybS5cIikscjtpZihcIm9iamVjdFwiPT10eXBlb2YgciYmci5pc1dvcmtzcGFjZVBsYXRmb3JtKXJldHVybiByO3Rocm93IG5ldyBFcnJvcihuKX0sR2U9YXN5bmMgZT0+KGF3YWl0IHplKGUpLFVlKGUpKSxLZT1hc3luYyBlPT57Y29uc3QgdD1hd2FpdCB6ZShlKTtpZihcIm9iamVjdFwiPT10eXBlb2YgdCYmITAhPT10Py5pc0Jyb3dzZXJJbml0aWFsaXplZCl0aHJvdyBuZXcgRXJyb3IoXCJUYXJnZXQgaXMgbm90IGEgQnJvd3Nlci1lbmFibGVkIFdvcmtzcGFjZSBQbGF0Zm9ybS5cIik7cmV0dXJuIFVlKGUpfSxxZT1cIm9mLXdvcmtzcGFjZS1cIjtjb25zdCBZZT1uZXcgY2xhc3N7bWFyayhlKXtwZXJmb3JtYW5jZS5tYXJrKGAke3FlfSR7ZX1gKX1tYXJrU3RhcnQoZSl7cGVyZm9ybWFuY2UubWFyayhgJHtxZX0ke2V9LXN0YXJ0YCl9bWFya0VuZChlKXtwZXJmb3JtYW5jZS5tYXJrKGAke3FlfSR7ZX0tZW5kYCl9bWFya0VuZEFuZE1lYXN1cmUoZSl7cGVyZm9ybWFuY2UubWFyayhgJHtxZX0ke2V9LWVuZGApO3RyeXtyZXR1cm4gcGVyZm9ybWFuY2UubWVhc3VyZShgJHtxZX0ke2V9YCxgJHtxZX0ke2V9LXN0YXJ0YCxgJHtxZX0ke2V9LWVuZGApfWNhdGNoKGUpezB9fW1hcmtBbmRNZWFzdXJlKGUsdCl7cGVyZm9ybWFuY2UubWFyayhgJHtxZX0ke2V9YCk7dHJ5e3JldHVybiBwZXJmb3JtYW5jZS5tZWFzdXJlKGAke3FlfSR7ZX0tbWVhc3VyZWAsYCR7cWV9JHt0fS1zdGFydGAsYCR7cWV9JHtlfWApfWNhdGNoKGUpezB9fXJlcG9ydFdvcmtzcGFjZVBlcmZvcm1hbmNlRW50cmllcygpe3JldHVybiBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlKFwibWVhc3VyZVwiKS5maWx0ZXIoKGU9PmUubmFtZS5zdGFydHNXaXRoKHFlKSkpfXJlcG9ydFdvcmtzcGFjZVBlcmZvcm1hbmNlKCl7cmV0dXJuIHRoaXMucmVwb3J0V29ya3NwYWNlUGVyZm9ybWFuY2VFbnRyaWVzKCkubWFwKChlPT4oe25hbWU6ZS5uYW1lLnJlcGxhY2UoYCR7cWV9YCxcIlwiKS5yZXBsYWNlKFwiLW1lYXN1cmVcIixcIlwiKSxkdXJhdGlvbjplLmR1cmF0aW9ufSkpKX19LEplPShlLHQpPT50P2Ake3R9LSR7ZS51dWlkfS0ke2UubmFtZX1gOmBfX2Jyb3dzZXJfd2luZG93X18tJHtlLnV1aWR9LSR7ZS5uYW1lfWAsWGU9bmV3IE1hcCxRZT0oZSx0KT0+e2NvbnN0IG49SmUoZSx0KTtyZXR1cm4gWGUuaGFzKG4pfHxYZS5zZXQobixIZShuKSksWGUuZ2V0KG4pKCl9O3ZhciBldCx0dCxudCxydDshZnVuY3Rpb24oZSl7ZS5DbG9zZUJyb3dzZXJXaW5kb3c9XCJjbG9zZS1icm93c2VyLXdpbmRvd1wiLGUuUXVpdFBsYXRmb3JtPVwicXVpdC1wbGF0Zm9ybVwiLGUuQ2xvc2VQYWdlPVwiY2xvc2UtcGFnZVwiLGUuQWRkVG9DaGFubmVsPVwiYWRkLXRvLWNoYW5uZWxcIixlLlJlbW92ZUZyb21DaGFubmVsPVwicmVtb3ZlLWZyb20tY2hhbm5lbFwiLGUuT3BlblNhdmVNb2RhbEludGVybmFsPVwib3Blbi1zYXZlLW1vZGFsLWludGVybmFsXCIsZS5EdXBsaWNhdGVQYWdlPVwiZHVwbGljYXRlLXBhZ2VcIixlLlNldFNlbGVjdGVkU2NoZW1lPVwic2V0LXNlbGVjdGVkLXNjaGVtZVwiLGUuU2hvd0Jyb3dzZXJJbmRpY2F0b3I9XCJzaG93LWJyb3dzZXItaW5kaWNhdG9yXCIsZS5TZXRTZWxlY3RlZExhbmd1YWdlPVwic2V0LXNlbGVjdGVkLWxhbmd1YWdlXCIsZS5SZWZyZXNoQm9va21hcmtzSW50ZXJuYWw9XCJyZWZyZXNoLWJvb2ttYXJrc1wifShldHx8KGV0PXt9KSksZnVuY3Rpb24oZSl7ZS5HZXRQYWdlcz1cImdldC1wYWdlc1wiLGUuR2V0QWN0aXZlUGFnZUZvcldpbmRvdz1cImdldC1hY3RpdmUtcGFnZS1mb3Itd2luZG93XCIsZS5BdHRhY2hQYWdlc1RvV2luZG93PVwiYXR0YWNoLXBhZ2VzLXRvLXdpbmRvd1wiLGUuRGV0YWNoUGFnZXNGcm9tV2luZG93PVwiZGV0YWNoLXBhZ2VzLWZyb20td2luZG93XCIsZS5TZXRBY3RpdmVQYWdlRm9yV2luZG93PVwic2V0LWFjdGl2ZS1wYWdlLWZvci13aW5kb3dcIixlLlJlbmFtZVBhZ2U9XCJyZW5hbWUtcGFnZVwiLGUuUmVvcmRlclBhZ2VzRm9yV2luZG93PVwicmVvcmRlci1wYWdlcy1mb3Itd2luZG93XCIsZS5VcGRhdGVQYWdlRm9yV2luZG93PVwidXBkYXRlLXBhZ2UtZm9yLXdpbmRvd1wiLGUuVXBkYXRlUGFnZXNXaW5kb3dPcHRpb25zPVwidXBkYXRlLXBhZ2VzLXdpbmRvdy1vcHRpb25zXCIsZS5Jc0RldGFjaGluZ1BhZ2VzPVwiaXMtZGV0YWNoaW5nLXBhZ2VzXCIsZS5Jc0FjdGl2ZVBhZ2VDaGFuZ2luZz1cImlzLWFjdGl2ZS1wYWdlLWNoYW5naW5nXCJ9KHR0fHwodHQ9e30pKSxmdW5jdGlvbihlKXtlLkdldEFwcHM9XCJnZXQtYXBwc1wiLGUuR2V0Q3VyYXRlZENvbnRlbnQ9XCJnZXQtY3VyYXRlZC1jb250ZW50XCIsZS5HZXRSZWNlbnRseVZpc2l0ZWQ9XCJnZXQtcmVjZW50bHktdmlzaXRlZFwifShudHx8KG50PXt9KSksZnVuY3Rpb24oZSl7ZS5DcmVhdGVCb29rbWFya05vZGU9XCJjcmVhdGUtYm9va21hcmstbm9kZVwiLGUuR2V0Qm9va21hcmtOb2RlPVwiZ2V0LWJvb2ttYXJrLW5vZGVcIixlLlNlYXJjaEJvb2ttYXJrTm9kZXM9XCJzZWFyY2gtYm9va21hcmstbm9kZXNcIixlLlVwZGF0ZUJvb2ttYXJrTm9kZT1cInVwZGF0ZS1ib29rbWFyay1ub2RlXCIsZS5EZWxldGVCb29rbWFya05vZGU9XCJkZWxldGUtYm9va21hcmstbm9kZVwifShydHx8KHJ0PXt9KSk7Y29uc3Qgb3Q9ey4uLmV0LC4uLnR0fSxhdD1IZShgJHtcInVuZGVmaW5lZFwiIT10eXBlb2YgZmluJiZmaW4/Lm1lLmlkZW50aXR5LnV1aWR9LWVudGVycHJpc2UtYm9va21hcmtzYCksaXQ9ZT0+KHtpZGVudGl0eTplLG9wZW5maW5XaW5kb3c6ZmluLldpbmRvdy53cmFwU3luYyhlKSxfYm9va21hcmtzOntfY3JlYXRlQm9va21hcmtOb2RlOmFzeW5jIGU9Pihhc3luYyBlPT4oYXdhaXQgYXQoKSkuZGlzcGF0Y2gocnQuQ3JlYXRlQm9va21hcmtOb2RlLGUpKShlKSxfZ2V0Qm9va21hcmtOb2RlOmFzeW5jIGU9Pihhc3luYyBlPT4oYXdhaXQgYXQoKSkuZGlzcGF0Y2gocnQuR2V0Qm9va21hcmtOb2RlLGUpKShlKSxfc2VhcmNoQm9va21hcmtOb2Rlczphc3luYyBlPT4oYXN5bmMgZT0+KGF3YWl0IGF0KCkpLmRpc3BhdGNoKHJ0LlNlYXJjaEJvb2ttYXJrTm9kZXMsZSkpKGUpLF91cGRhdGVCb29rbWFya05vZGU6YXN5bmMgZT0+KGFzeW5jIGU9Pihhd2FpdCBhdCgpKS5kaXNwYXRjaChydC5VcGRhdGVCb29rbWFya05vZGUsZSkpKGUpLF9kZWxldGVCb29rbWFya05vZGU6YXN5bmMgZT0+KGFzeW5jIGU9Pihhd2FpdCBhdCgpKS5kaXNwYXRjaChydC5EZWxldGVCb29rbWFya05vZGUsZSkpKGUpfSxnZXRQYWdlczphc3luYygpPT4oYXdhaXQgS2UoZSkpLmRpc3BhdGNoKFdlLkdldFBhZ2VzRm9yV2luZG93LGUpLGdldFBhZ2U6YXN5bmMgdD0+KGF3YWl0IEtlKGUpKS5kaXNwYXRjaChXZS5HZXRQYWdlRm9yV2luZG93LHtpZGVudGl0eTplLHBhZ2VJZDp0fSksYWRkUGFnZTphc3luYyB0PT5PdCgpLkJyb3dzZXIud3JhcFN5bmMoZSkuX2FkZFBhZ2UodCksX2FkZFBhZ2U6YXN5bmModCxuKT0+e2NvbnN0IHI9YXdhaXQgS2UoZSksbz17aWRlbnRpdHk6ZSxwYWdlOnQsaW5zZXJ0aW9uSW5kZXg6bj8uaW5kZXh9O3JldHVybiByLmRpc3BhdGNoKFdlLkFkZFBhZ2Usbyl9LHJlbW92ZVBhZ2U6YXN5bmMgdD0+KGF3YWl0IEtlKGUpKS5kaXNwYXRjaChXZS5EZXRhY2hQYWdlc0Zyb21XaW5kb3cse2lkZW50aXR5OmUscGFnZUlkczpbdF19KSxyZXBhcmVudFBhZ2U6YXN5bmMgdD0+T3QoKS5Ccm93c2VyLndyYXBTeW5jKGUpLl9yZXBhcmVudFBhZ2UodCksX3JlcGFyZW50UGFnZTphc3luYyB0PT57Y29uc3R7cGFnZUlkOm59PXQscj1hd2FpdCBLZShlKSxvPShhd2FpdCByLmRpc3BhdGNoKFdlLkdldEFsbEF0dGFjaGVkUGFnZXMsdm9pZCAwKSkuZmluZCgoKHtwYWdlSWQ6ZX0pPT5lPT09bikpO2lmKCFvKXRocm93IG5ldyBFcnJvcihgUmVwYXJlbnQgUGFnZSBFcnJvcjogVGFyZ2V0IHBhZ2Ugd2l0aCBwYWdlSWQgJHtufSBub3QgZm91bmRgKTtvLm11bHRpSW5zdGFuY2VWaWV3QmVoYXZpb3I9XCJyZXBhcmVudFwiO2NvbnN0IGE9e2lkZW50aXR5OmUscGFnZXM6W29dLGluc2VydGlvbkluZGV4OnQuaW5kZXh9O3JldHVybiByLmRpc3BhdGNoKFdlLkF0dGFjaFBhZ2VzVG9XaW5kb3csYSl9LHNldEFjdGl2ZVBhZ2U6YXN5bmMgdD0+KGF3YWl0IEtlKGUpKS5kaXNwYXRjaChXZS5TZXRBY3RpdmVQYWdlLHtpZGVudGl0eTplLHBhZ2VJZDp0fSksdXBkYXRlUGFnZTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCBLZShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goV2UuVXBkYXRlUGFnZUZvcldpbmRvdyx0KX0scmVvcmRlclBhZ2VzOmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0IEtlKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaChXZS5SZW9yZGVyUGFnZXNGb3JXaW5kb3csdCl9LF9vcGVuR2xvYmFsQ29udGV4dE1lbnU6YXN5bmMgdD0+e2NvbnN0IG49YXdhaXQgS2UoZSk7cmV0dXJuIHQuaWRlbnRpdHk9ZSxuLmRpc3BhdGNoKFdlLk9wZW5HbG9iYWxDb250ZXh0TWVudUludGVybmFsLHQpfSxyZXBsYWNlVG9vbGJhck9wdGlvbnM6YXN5bmMgdD0+e2F3YWl0IEtlKGUpO2NvbnN0IG49ZmluLldpbmRvdy53cmFwU3luYyhlKTthd2FpdCBuLnVwZGF0ZU9wdGlvbnMoe3dvcmtzcGFjZVBsYXRmb3JtOnt0b29sYmFyT3B0aW9uczp0fX0pfSxyZXBsYWNlV2luZG93U3RhdGVCdXR0b25PcHRpb25zOmFzeW5jIHQ9Pnthd2FpdCBLZShlKTtjb25zdCBuPWZpbi5XaW5kb3cud3JhcFN5bmMoZSk7YXdhaXQgbi51cGRhdGVPcHRpb25zKHt3b3Jrc3BhY2VQbGF0Zm9ybTp7d2luZG93U3RhdGVCdXR0b25PcHRpb25zOnR9fSl9LHVwZGF0ZUJyb3dzZXJXaW5kb3dUaXRsZTphc3luYyB0PT57Y29uc3Qgbj1maW4uV2luZG93LndyYXBTeW5jKGUpO1wic3RyaW5nXCIhPXR5cGVvZiB0P2F3YWl0IG4udXBkYXRlT3B0aW9ucyh7d29ya3NwYWNlUGxhdGZvcm06e3RpdGxlOnR9fSk6Y29uc29sZS53YXJuKFwiVHlwZSBzdHJpbmcgZm9yIHdpbmRvdyB0aXRsZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIFdpbmRvd1RpdGxlIHR5cGUgaW5zdGVhZFwiLHQpfSxfb3BlblZpZXdUYWJDb250ZXh0TWVudTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCBLZShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goV2UuT3BlblZpZXdUYWJDb250ZXh0TWVudUludGVybmFsLHQpfSxfb3BlblBhZ2VUYWJDb250ZXh0TWVudTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCBLZShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goV2UuT3BlblBhZ2VUYWJDb250ZXh0TWVudUludGVybmFsLHQpfSxfb3BlblNhdmVNb2RhbDphc3luYyB0PT57YXdhaXQgS2UoZSk7cmV0dXJuKGF3YWl0IFFlKGUpKS5kaXNwYXRjaChvdC5PcGVuU2F2ZU1vZGFsSW50ZXJuYWwsdCl9LF9vcGVuU2F2ZUJ1dHRvbkNvbnRleHRNZW51OmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0IEtlKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaChXZS5PcGVuU2F2ZUJ1dHRvbkNvbnRleHRNZW51SW50ZXJuYWwsdCl9LF9hZGREZWZhdWx0UGFnZTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCBLZShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goV2UuQWRkRGVmYXVsdFBhZ2UsdCl9LF90cmFja1JlbW92ZWRUYWI6YXN5bmMgdD0+KGF3YWl0IEtlKGUpKS5kaXNwYXRjaChXZS5UcmFja1JlbW92ZWRUYWJJbnRlcm5hbCx0KSxfcmVzdG9yZVJlbW92ZWRUYWI6YXN5bmMgdD0+KGF3YWl0IEtlKGUpKS5kaXNwYXRjaChXZS5SZXN0b3JlUmVtb3ZlZFRhYkludGVybmFsLHQpLF90cmFja1Zpc2l0ZWRTaXRlOmFzeW5jIHQ9Pihhd2FpdCBLZShlKSkuZGlzcGF0Y2goV2UuVHJhY2tWaXNpdGVkU2l0ZUludGVybmFsLHQpLF9nZXRSZWNlbnRseVZpc2l0ZWRTaXRlczphc3luYyB0PT4oYXdhaXQgS2UoZSkpLmRpc3BhdGNoKFdlLkdldFJlY2VudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWwsdCksX2dldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXM6YXN5bmMgdD0+KGF3YWl0IEtlKGUpKS5kaXNwYXRjaChXZS5HZXRGcmVxdWVudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWwsdCksX3NlYXJjaFNpdGVzOmFzeW5jIHQ9Pihhd2FpdCBLZShlKSkuZGlzcGF0Y2goV2UuU2VhcmNoU2l0ZXNJbnRlcm5hbCx7aWRlbnRpdHk6ZSxyZXE6dH0pLF9nZXRDdXJhdGVkQ29udGVudDphc3luYyB0PT4oYXdhaXQgS2UoZSkpLmRpc3BhdGNoKFdlLkdldEN1cmF0ZWRDb250ZW50SW50ZXJuYWwse2lkZW50aXR5OmUscmVxOnR9KSxfaGFuZGxlUmVxdWVzdE5hdmlnYXRpb246YXN5bmMgdD0+KGF3YWl0IEtlKGUpKS5kaXNwYXRjaChXZS5IYW5kbGVSZXF1ZXN0TmF2aWdhdGlvbkludGVybmFsLHQpfSksbHQ9ZT0+e2NvbnN0IHQ9ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpO3JldHVybnt3cmFwU3luYzplPT5pdChlKSxjcmVhdGVXaW5kb3c6YXN5bmMgbj0+e2NvbnN0IHI9KCgpPT57Y29uc3QgZT1gYnJvd3Nlci13aW5kb3ctc3RhcnR1cC0ke0llKCl9YDtyZXR1cm4gWWUubWFya1N0YXJ0KGUpLGV9KSgpOyhlPT57ZmluLkFwcGxpY2F0aW9uLndyYXBTeW5jKHt1dWlkOmZpbi5tZS5pZGVudGl0eS51dWlkfSkub25jZShcIndpbmRvdy1zaG93blwiLCgoKT0+e1llLm1hcmtBbmRNZWFzdXJlKFwiYnJvd3Nlci13aW5kb3ctc2hvd25cIixlKX0pKX0pKHIpLGF3YWl0IEtlKGUpO2NvbnN0IG89YXdhaXQgdC5jcmVhdGVXaW5kb3cobik7cmV0dXJuKGU9PntZZS5tYXJrQW5kTWVhc3VyZShcImJyb3dzZXItd2luZG93LXN0YXJ0ZWRcIixlKX0pKHIpLGl0KG8uaWRlbnRpdHkpfSxnZXRBbGxBdHRhY2hlZFBhZ2VzOmFzeW5jKCk9Pihhd2FpdCBLZShlKSkuZGlzcGF0Y2goV2UuR2V0QWxsQXR0YWNoZWRQYWdlcyx2b2lkIDApLGdldEFsbFdpbmRvd3M6YXN5bmMoKT0+e2F3YWl0IEtlKGUpO3JldHVybihhd2FpdCBlZSgpKS5tYXAoKGU9Pml0KGUuaWRlbnRpdHkpKSl9LGdldFVuaXF1ZVBhZ2VUaXRsZTphc3luYyB0PT4oYXdhaXQgS2UoZSkpLmRpc3BhdGNoKFdlLkdldFVuaXF1ZVBhZ2VUaXRsZSx0KSxnZXRMYXN0Rm9jdXNlZFdpbmRvdzphc3luYygpPT4oYXdhaXQgS2UoZSkpLmRpc3BhdGNoKFdlLkdldExhc3RGb2N1c2VkQnJvd3NlcldpbmRvdyx2b2lkIDApfX0sc3Q9ZT0+KHtjcmVhdGVQYWdlOmFzeW5jIHQ9Pihhd2FpdCBLZShlKSkuZGlzcGF0Y2goV2UuQ3JlYXRlU2F2ZWRQYWdlSW50ZXJuYWwsdCksZGVsZXRlUGFnZTphc3luYyB0PT4oYXdhaXQgS2UoZSkpLmRpc3BhdGNoKFdlLkRlbGV0ZVNhdmVkUGFnZUludGVybmFsLHQpLHVwZGF0ZVBhZ2U6YXN5bmMgdD0+KGF3YWl0IEtlKGUpKS5kaXNwYXRjaChXZS5VcGRhdGVTYXZlZFBhZ2VJbnRlcm5hbCx0KSxnZXRQYWdlOmFzeW5jIHQ9Pihhd2FpdCBLZShlKSkuZGlzcGF0Y2goV2UuR2V0U2F2ZWRQYWdlLHQpLGdldFBhZ2VzOmFzeW5jIHQ9Pihhd2FpdCBLZShlKSkuZGlzcGF0Y2goV2UuR2V0U2F2ZWRQYWdlcyx0KSxzYXZlUGFnZTphc3luYyB0PT4oYXdhaXQgS2UoZSkpLmRpc3BhdGNoKFdlLlNhdmVQYWdlLHQpLGNyZWF0ZVdvcmtzcGFjZTphc3luYyB0PT4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLkNyZWF0ZVNhdmVkV29ya3NwYWNlLHQpLGRlbGV0ZVdvcmtzcGFjZTphc3luYyB0PT57Y29uc3Qgbj1PdCgpLHI9YXdhaXQgbi5nZXRDdXJyZW50V29ya3NwYWNlKCk7aWYoci53b3Jrc3BhY2VJZD09PXQpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZGVsZXRlIGN1cnJlbnQgYWN0aXZlIHdvcmtzcGFjZSAke3IudGl0bGV9YCk7cmV0dXJuKGF3YWl0IEdlKGUpKS5kaXNwYXRjaChXZS5EZWxldGVTYXZlZFdvcmtzcGFjZSx0KX0sdXBkYXRlV29ya3NwYWNlOmFzeW5jIHQ9Pihhd2FpdCBHZShlKSkuZGlzcGF0Y2goV2UuVXBkYXRlU2F2ZWRXb3Jrc3BhY2UsdCksZ2V0V29ya3NwYWNlOmFzeW5jIHQ9Pihhd2FpdCBHZShlKSkuZGlzcGF0Y2goV2UuR2V0U2F2ZWRXb3Jrc3BhY2UsdCksZ2V0V29ya3NwYWNlczphc3luYyB0PT4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLkdldFNhdmVkV29ya3NwYWNlcyx0KSxzYXZlV29ya3NwYWNlOmFzeW5jIHQ9Pihhd2FpdCBHZShlKSkuZGlzcGF0Y2goV2UuU2F2ZVdvcmtzcGFjZSx0KSxnZXREb2NrUHJvdmlkZXJDb25maWc6YXN5bmMgdD0+KGF3YWl0IEdlKGUpKS5kaXNwYXRjaChXZS5HZXREb2NrUHJvdmlkZXJDb25maWcsdCksc2F2ZURvY2tQcm92aWRlckNvbmZpZzphc3luYyB0PT4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLlNhdmVEb2NrUHJvdmlkZXJDb25maWcsdCl9KSxjdD0oZSx0KT0+e2xvY2FsU3RvcmFnZS5zZXRJdGVtKGAke1Z9LSR7ZX1gLHQpfSx1dD1lPT5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHtWfS0ke2V9YCk7dmFyIGR0OyFmdW5jdGlvbihlKXtlLlVwZGF0ZVBsYXRmb3JtVGhlbWVTY2hlbWU9XCJ1cGRhdGUtcGxhdGZvcm0tdGhlbWUtc2NoZW1lXCJ9KGR0fHwoZHQ9e30pKTtjb25zdCBwdD1IZShcIm9mLXdvcmtzcGFjZS1ub3RpZmljYXRpb25zLXN5bmNcIiksZnQ9ZT0+KHtnZXRUaGVtZXM6YXN5bmMoKT0+KGF3YWl0IEdlKGUpKS5kaXNwYXRjaChXZS5HZXRUaGVtZXMsdm9pZCAwKSxzZXRTZWxlY3RlZFNjaGVtZTphc3luYyB0PT4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLlNldFNlbGVjdGVkU2NoZW1lLHQpLGdldFNlbGVjdGVkU2NoZW1lOmFzeW5jKCk9Pihhd2FpdCBHZShlKSkuZGlzcGF0Y2goV2UuR2V0U2VsZWN0ZWRTY2hlbWUsdm9pZCAwKX0pLGh0PWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IEJlKCk7YXdhaXQgdC5kaXNwYXRjaChcInNldC1zZWxlY3RlZC1zY2hlbWVcIixlKX0sZ3Q9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgcHQoKTthd2FpdCB0LmRpc3BhdGNoKGR0LlVwZGF0ZVBsYXRmb3JtVGhlbWVTY2hlbWUse3NjaGVtZTplfSl9LHZ0PWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IGVlKCk7cmV0dXJuIFByb21pc2UuYWxsKHQubWFwKChhc3luYyB0PT57Y29uc3Qgbj1hd2FpdCBRZSh0LmlkZW50aXR5KTthd2FpdCBuLmRpc3BhdGNoKG90LlNldFNlbGVjdGVkU2NoZW1lLGUpfSkpKX0sQ3Q9YXN5bmMgZT0+e2NvbnN0IHQ9bmV3IEFycmF5LG49ZmluLkFwcGxpY2F0aW9uLmdldEN1cnJlbnRTeW5jKCkscj1hd2FpdCBuLmdldFZpZXdzKCk7Zm9yKGNvbnN0IGUgb2Ygcil7LTEhPT1lLmlkZW50aXR5Lm5hbWUuaW5kZXhPZihLLkJyb3dzZXJBZGRyZXNzU2VhcmNoUHJlZml4KSYmdC5wdXNoKGUuaWRlbnRpdHkpOy0xIT09KGF3YWl0IGUuZ2V0T3B0aW9ucygpKS51cmwuaW5kZXhPZihfLkVudGVycHJpc2VCcm93c2VyKSYmdC5wdXNoKGUuaWRlbnRpdHkpfXJldHVybiBQcm9taXNlLmFsbCh0Lm1hcCgoYXN5bmMgdD0+e2NvbnN0IG49YXdhaXQgUWUodCxcInRoZW1lLWNoYW5nZS1saXN0ZW5lclwiKTthd2FpdCBuLmRpc3BhdGNoKG90LlNldFNlbGVjdGVkU2NoZW1lLGUpfSkpKX0sbXQ9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgdGUoKTtyZXR1cm4gUHJvbWlzZS5hbGwodC5tYXAoKGFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0IFFlKHQuaWRlbnRpdHkpO2F3YWl0IG4uZGlzcGF0Y2gob3QuU2V0U2VsZWN0ZWRTY2hlbWUsZSl9KSkpfSx3dD1hc3luYyBlPT57Y29uc3QgdD1hd2FpdCBRZSh7dXVpZDpZLnV1aWQsbmFtZTpLLkVudGVycHJpc2VDb250ZXh0TWVudX0pO2F3YWl0IHQuZGlzcGF0Y2gob3QuU2V0U2VsZWN0ZWRTY2hlbWUsZSl9LGJ0PWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IFFlKHt1dWlkOlkudXVpZCxuYW1lOksuRW50ZXJwcmlzZUJvb2ttYXJrRGlhbG9nV2luZG93fSk7YXdhaXQgdC5kaXNwYXRjaChvdC5TZXRTZWxlY3RlZFNjaGVtZSxlKS5jYXRjaCgoKCk9Pnt9KSl9LHl0PWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IFFlKHt1dWlkOlkudXVpZCxuYW1lOksuRHJvcGRvd25NZW51fSk7YXdhaXQgdC5kaXNwYXRjaChvdC5TZXRTZWxlY3RlZFNjaGVtZSxlKS5jYXRjaCgoKCk9Pnt9KSl9LHh0PWFzeW5jIGU9PntpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgbG9jYWxTdG9yYWdlKXRyeXthd2FpdCBQcm9taXNlLmFsbChbY3QoTGUuU2VsZWN0ZWRDb2xvclNjaGVtZSxlKSxDdChlKSxndChlKSx2dChlKSxtdChlKSx3dChlKSxodChlKSxidChlKSx5dChlKV0pfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gc2V0IHRoZSBzZWxlY3RlZCBzY2hlbWU6IFwiLGUpfX0sa3Q9KCk9PntpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgbG9jYWxTdG9yYWdlKXJldHVybiBudWxsO3RyeXtjb25zdCBlPXV0KExlLlNlbGVjdGVkQ29sb3JTY2hlbWUpO3JldHVybiBlfHxudWxsfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gZ2V0IHRoZSBzZWxlY3RlZCBzY2hlbWU6IFwiLGUpfX0sU3Q9ZT0+e2NvbnN0IHQ9ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpO2xldCBuO3JldHVybiBPYmplY3QuYXNzaWduKHQse2FwcGx5U25hcHNob3Q6YXN5bmModCxuKT0+e2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0JiYhdD8ud2luZG93cyl0aHJvdyBuZXcgRXJyb3IoXCJOb3QgYSB2YWxpZCBicm93c2VyIHNuYXBzaG90XCIpO3JldHVybiBmaW4uUGxhdGZvcm0ud3JhcFN5bmMoZSkuYXBwbHlTbmFwc2hvdCh0LG4pfSxnZXRTbmFwc2hvdDooKT0+ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmdldFNuYXBzaG90KCkudGhlbigoZT0+ZSkpLGdldFZpZXdTbmFwc2hvdDp0PT5maW4uUGxhdGZvcm0ud3JhcFN5bmMoZSkuZ2V0Vmlld1NuYXBzaG90KHQpLGNyZWF0ZVZpZXc6KHQsbixyKT0+ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmNyZWF0ZVZpZXcodCxuLHIpLGxhdW5jaEFwcDphc3luYyB0PT57Y29uc29sZS53YXJuKFwibGF1bmNoQXBwIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgY3JlYXRlVmlldyAtIGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuZmluLmNvL29mLWRvY3MvZG9jcy9wbGF0Zm9ybS1nZXR0aW5nLXN0YXJ0ZWQjYWRkLWEtdmlldy10by1hbi1leGlzdGluZy13aW5kb3cgb3IgIGNyZWF0ZVdpbmRvdyAtIGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuZmluLmNvL29mLWRvY3MvZG9jcy9wbGF0Zm9ybS1nZXR0aW5nLXN0YXJ0ZWQjY3JlYXRlLWEtcGxhdGZvcm0td2luZG93IGluc3RlYWQuXCIpLHQudGFyZ2V0fHwodC50YXJnZXQ9e3V1aWQ6VixuYW1lOkgsZW50aXR5VHlwZTpBfHxcInVua25vd25cIn0pO3JldHVybihhd2FpdCBHZShlKSkuZGlzcGF0Y2goV2UuTGF1bmNoQXBwLHQpfSxfaW52b2tlQ3VzdG9tQWN0aW9uOmFzeW5jKHQsbik9Pntjb25zdCByPWF3YWl0IEdlKGUpLG89e2FjdGlvbklkOnQscGF5bG9hZDp7Li4ubixjYWxsZXJUeXBlOm4uY2FsbGVyVHlwZXx8ay5BUEl9fTtyZXR1cm4gci5kaXNwYXRjaChXZS5JbnZva2VDdXN0b21BY3Rpb25JbnRlcm5hbCxvKX0sX3JlcXVlc3RRdWl0UGxhdGZvcm1EaWFsb2c6YXN5bmMgdD0+KGF3YWl0IEdlKGUpKS5kaXNwYXRjaChXZS5SZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nSW50ZXJuYWwsdCksZ2V0Q3VycmVudFdvcmtzcGFjZTphc3luYygpPT4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLkdldEN1cnJlbnRXb3Jrc3BhY2Usdm9pZCAwKSxhcHBseVdvcmtzcGFjZTphc3luYyh0LG4pPT4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLkFwcGx5V29ya3NwYWNlLHsuLi50LG9wdGlvbnM6bn0pLHNldEFjdGl2ZVdvcmtzcGFjZTphc3luYyB0PT4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLlNldEFjdGl2ZVdvcmtzcGFjZSx0KSxnZXRMYW5ndWFnZTphc3luYygpPT4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLkdldExhbmd1YWdlKSxfZ2V0TGFuZ3VhZ2VSZXNvdXJjZXM6YXN5bmMoKT0+KGF3YWl0IEdlKGUpKS5kaXNwYXRjaChXZS5HZXRMYW5ndWFnZVJlc291cmNlc0ludGVybmFsKSxzZXRMYW5ndWFnZTphc3luYyB0PT4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLlNldExhbmd1YWdlLHQpLF9yYWlzZUFuYWx5dGljczphc3luYyB0PT57aWYobnx8KG49YXdhaXQgemUoZSkpLFwib2JqZWN0XCI9PXR5cGVvZiBuJiZuPy5hbmFseXRpY3M/LmlzU3VwcG9ydGVkKXtyZXR1cm4oYXdhaXQgR2UoZSkpLmRpc3BhdGNoKFdlLkFuYWx5dGljcyx0KX1lLnV1aWR9LGdldE5vdGlmaWNhdGlvbnNDb25maWc6YXN5bmMoKT0+KGF3YWl0IEdlKGUpKS5kaXNwYXRjaChXZS5HZXROb3RpZmljYXRpb25zQ29uZmlnKSxfcmVmcmVzaEJvb2ttYXJrc0ludGVybmFsOmFzeW5jKCk9Pihhd2FpdCBHZShlKSkuZGlzcGF0Y2goV2UuUmVmcmVzaEJvb2ttYXJrc0ludGVybmFsKSxUaGVtZTpmdChlKSxCcm93c2VyOmx0KGUpLFN0b3JhZ2U6c3QoZSl9KX0sT3Q9KCk9PlN0KGZpbi5tZS5pZGVudGl0eSksTXQ9e2NvbnRleHRNZW51T3B0aW9uczp7ZW5hYmxlZDohMCx0ZW1wbGF0ZTpbXCJzcGVsbENoZWNrXCIsXCJzZXBhcmF0b3JcIixcInByaW50XCIsXCJzZXBhcmF0b3JcIixcImN1dFwiLFwiY29weVwiLFwicGFzdGVcIixcInVuZG9cIixcInJlZG9cIixcInNlbGVjdEFsbFwiLFwiaW5zcGVjdFwiLFwicmVsb2FkXCJdfSxkb3dubG9hZFNoZWxmOntlbmFibGVkOiEwfX07ZnVuY3Rpb24gTHQoZSx0KXtyZXR1cm4ga2Uoe30sTXQsdCxlKX1jb25zdCBfdD1cImludGVybmFsLWdlbmVyYXRlZC12aWV3LVwiLFB0PShlLHQpPT5lLmNvbnRlbnQ/ey4uLmUsY29udGVudDplLmNvbnRlbnQubWFwKChlPT5QdChlLHQpKSl9OnsuLi5lLGNvbXBvbmVudFN0YXRlOnQoZS5jb21wb25lbnRTdGF0ZSl9LEV0PShlLHQpPT57cmV0dXJuIG49THQoZSx0KSx7Li4ubixuYW1lOm4ubmFtZT9uLm5hbWU6YGludGVybmFsLWdlbmVyYXRlZC12aWV3LSR7SWUoKX1gLF9pbnRlcm5hbFdvcmtzcGFjZURhdGE6ey4uLm4uX2ludGVybmFsV29ya3NwYWNlRGF0YSx2aWV3SWRlbnRpZmllcjpuLl9pbnRlcm5hbFdvcmtzcGFjZURhdGE/LnZpZXdJZGVudGlmaWVyfHxJZSgpfX07dmFyIG59LGp0PWU9Pih7Li4uZSxuYW1lOnZvaWQgMH0pLFJ0PWU9Pntjb25zdCB0PXsuLi5lfTtyZXR1cm4gUHQodCxqdCl9LEl0PWU9Pntjb25zdCB0PXsuLi5lfTtyZXR1cm4gUHQodCwoZT0+ZS5uYW1lJiZlLm5hbWUuc3RhcnRzV2l0aChfdCk/anQoZSk6ZSkpfSxWdD1lPT57Y29uc3QgdD1bXTtyZXR1cm4oZSYmQXJyYXkuaXNBcnJheShlKT9lOltdKS5mb3JFYWNoKChlPT57aWYoXCJjb21wb25lbnRcIj09PWUudHlwZSlyZXR1cm4gdC5wdXNoKGUuY29tcG9uZW50U3RhdGUpO2NvbnN0IG49VnQoZS5jb250ZW50KTt0LnB1c2goLi4ubil9KSksdH07bmV3IE1hcCxuZXcgTWFwO2NvbnN0IEh0PShlLHQpPT57Y29uc3Qgbj1WdCh0LmNvbnRlbnQpO3JldHVybnsuLi5QdChlLChlPT57Y29uc3QgdD1uLmZpbmQoKHQ9PnQuX2ludGVybmFsV29ya3NwYWNlRGF0YT8udmlld0lkZW50aWZpZXI9PT1lLl9pbnRlcm5hbFdvcmtzcGFjZURhdGE/LnZpZXdJZGVudGlmaWVyKSkscj10P3QuaXNDbG9zYWJsZTplLmlzQ2xvc2FibGU7cmV0dXJuey4uLmUsaXNDbG9zYWJsZTpyfX0pKSxzZXR0aW5nczp0LnNldHRpbmdzfX0sQXQ9ZT0+ZT9WdChlKS5sZW5ndGg6MDtNZSgpKChhc3luYyBlPT57dHJ5e2NvbnN0IHQ9YXdhaXQoYXN5bmMgZT0+ZmluLlBsYXRmb3JtLkxheW91dC53cmFwU3luYyh7Li4uZmluLm1lLmlkZW50aXR5LGxheW91dE5hbWU6ZX0pLmdldENvbmZpZygpKShlLmxheW91dENvbnRhaW5lcktleSksbj10LmNvbnRlbnQ/VnQodC5jb250ZW50KTpbXSxyPW4ubGVuZ3RoO3I+MT8oZT0+e1wibXVsdGlWaWV3XCIhPT1lLmF0dGFjaGVkUGFnZVR5cGUmJk90KCkuQnJvd3Nlci53cmFwU3luYyhZKS51cGRhdGVQYWdlKHtwYWdlSWQ6ZS5wYWdlSWQscGFnZTp7c2luZ2xlVmlld05hbWU6bnVsbCxhdHRhY2hlZFBhZ2VUeXBlOlwibXVsdGlWaWV3XCJ9fSl9KShlKToxPT09ciYmKGFzeW5jKGUsdCk9Pntjb25zdCBuPU90KCkuQnJvd3Nlci53cmFwU3luYyhZKTtpZihcInNpbmdsZVZpZXdcIiE9PWUuYXR0YWNoZWRQYWdlVHlwZSl7Y29uc3Qgcj1hd2FpdCBOZShlKSxvPWF3YWl0IE90KCkuQnJvd3Nlci5nZXRVbmlxdWVQYWdlVGl0bGUoKTtkZWxldGUgci5sYXlvdXQ7Y29uc3QgYT17Li4ucixzaW5nbGVWaWV3TmFtZTp0LHRpdGxlOm8saGFzVW5zYXZlZENoYW5nZXM6ITEsYXR0YWNoZWRQYWdlVHlwZTpcInNpbmdsZVZpZXdcIn07YXdhaXQgbi51cGRhdGVQYWdlKHtwYWdlSWQ6ZS5wYWdlSWQscGFnZTphfSl9fSkoZSxuWzBdLm5hbWUpLGF3YWl0KGFzeW5jKGUsdCk9Pntjb25zdCBuPUZlKHsuLi5ZLGxheW91dE5hbWU6ZS5sYXlvdXRDb250YWluZXJLZXl9KSxyPWF3YWl0IG4uaXNTaG93aW5nVGFicygpO3Q+MT9yfHxhd2FpdCBuLnNob3coKToxPT09dCYmciYmYXdhaXQgbi5oaWRlKHtzZXR0aW5nczp7cmVvcmRlckVuYWJsZWQ6ITB9fSl9KShlLHIpfWNhdGNoKGUpe319KSw1MCx7bGVhZGluZzohMSx0cmFpbGluZzohMH0pO24oMzYxKTtPYmplY3QuY3JlYXRlKG51bGwpO2NvbnN0IFR0PS8mKD86YW1wfCMzOHxsdHwjNjB8Z3R8IzYyfGFwb3N8IzM5fHF1b3R8IzM0fG5ic3B8IzE2MHxjb3B5fCMxNjl8cmVnfCMxNzR8aGVsbGlwfCM4MjMwfCN4MkZ8IzQ3KTsvZyxEdD17XCImYW1wO1wiOlwiJlwiLFwiJiMzODtcIjpcIiZcIixcIiZsdDtcIjpcIjxcIixcIiYjNjA7XCI6XCI8XCIsXCImZ3Q7XCI6XCI+XCIsXCImIzYyO1wiOlwiPlwiLFwiJmFwb3M7XCI6XCInXCIsXCImIzM5O1wiOlwiJ1wiLFwiJnF1b3Q7XCI6J1wiJyxcIiYjMzQ7XCI6J1wiJyxcIiZuYnNwO1wiOlwiIFwiLFwiJiMxNjA7XCI6XCIgXCIsXCImY29weTtcIjpcIsKpXCIsXCImIzE2OTtcIjpcIsKpXCIsXCImcmVnO1wiOlwiwq5cIixcIiYjMTc0O1wiOlwiwq5cIixcIiZoZWxsaXA7XCI6XCLigKZcIixcIiYjODIzMDtcIjpcIuKAplwiLFwiJiN4MkY7XCI6XCIvXCIsXCImIzQ3O1wiOlwiL1wifSxCdD1lPT5EdFtlXTtsZXQgWnQsJHQ9e2JpbmRJMThuOlwibGFuZ3VhZ2VDaGFuZ2VkXCIsYmluZEkxOG5TdG9yZTpcIlwiLHRyYW5zRW1wdHlOb2RlVmFsdWU6XCJcIix0cmFuc1N1cHBvcnRCYXNpY0h0bWxOb2RlczohMCx0cmFuc1dyYXBUZXh0Tm9kZXM6XCJcIix0cmFuc0tlZXBCYXNpY0h0bWxOb2Rlc0ZvcjpbXCJiclwiLFwic3Ryb25nXCIsXCJpXCIsXCJwXCJdLHVzZVN1c3BlbnNlOiEwLHVuZXNjYXBlOmU9PmUucmVwbGFjZShUdCxCdCl9O2NvbnN0IE50PXt0eXBlOlwiM3JkUGFydHlcIixpbml0KGUpeyFmdW5jdGlvbigpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTskdD17Li4uJHQsLi4uZX19KGUub3B0aW9ucy5yZWFjdCksZnVuY3Rpb24oZSl7WnQ9ZX0oZSl9fTsoMCx2ZS5jcmVhdGVDb250ZXh0KSgpO2NvbnN0IEZ0PXt0eXBlOlwibG9nZ2VyXCIsbG9nKGUpe3RoaXMub3V0cHV0KFwibG9nXCIsZSl9LHdhcm4oZSl7dGhpcy5vdXRwdXQoXCJ3YXJuXCIsZSl9LGVycm9yKGUpe3RoaXMub3V0cHV0KFwiZXJyb3JcIixlKX0sb3V0cHV0KGUsdCl7Y29uc29sZSYmY29uc29sZVtlXSYmY29uc29sZVtlXS5hcHBseShjb25zb2xlLHQpfX07Y2xhc3MgV3R7Y29uc3RydWN0b3IoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3RoaXMuaW5pdChlLHQpfWluaXQoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3RoaXMucHJlZml4PXQucHJlZml4fHxcImkxOG5leHQ6XCIsdGhpcy5sb2dnZXI9ZXx8RnQsdGhpcy5vcHRpb25zPXQsdGhpcy5kZWJ1Zz10LmRlYnVnfWxvZygpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiB0aGlzLmZvcndhcmQodCxcImxvZ1wiLFwiXCIsITApfXdhcm4oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gdGhpcy5mb3J3YXJkKHQsXCJ3YXJuXCIsXCJcIiwhMCl9ZXJyb3IoKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gdGhpcy5mb3J3YXJkKHQsXCJlcnJvclwiLFwiXCIpfWRlcHJlY2F0ZSgpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiB0aGlzLmZvcndhcmQodCxcIndhcm5cIixcIldBUk5JTkcgREVQUkVDQVRFRDogXCIsITApfWZvcndhcmQoZSx0LG4scil7cmV0dXJuIHImJiF0aGlzLmRlYnVnP251bGw6KFwic3RyaW5nXCI9PXR5cGVvZiBlWzBdJiYoZVswXT1gJHtufSR7dGhpcy5wcmVmaXh9ICR7ZVswXX1gKSx0aGlzLmxvZ2dlclt0XShlKSl9Y3JlYXRlKGUpe3JldHVybiBuZXcgV3QodGhpcy5sb2dnZXIse3ByZWZpeDpgJHt0aGlzLnByZWZpeH06JHtlfTpgLC4uLnRoaXMub3B0aW9uc30pfWNsb25lKGUpe3JldHVybihlPWV8fHRoaXMub3B0aW9ucykucHJlZml4PWUucHJlZml4fHx0aGlzLnByZWZpeCxuZXcgV3QodGhpcy5sb2dnZXIsZSl9fXZhciBVdD1uZXcgV3Q7Y2xhc3MgenR7Y29uc3RydWN0b3IoKXt0aGlzLm9ic2VydmVycz17fX1vbihlLHQpe3JldHVybiBlLnNwbGl0KFwiIFwiKS5mb3JFYWNoKChlPT57dGhpcy5vYnNlcnZlcnNbZV18fCh0aGlzLm9ic2VydmVyc1tlXT1uZXcgTWFwKTtjb25zdCBuPXRoaXMub2JzZXJ2ZXJzW2VdLmdldCh0KXx8MDt0aGlzLm9ic2VydmVyc1tlXS5zZXQodCxuKzEpfSkpLHRoaXN9b2ZmKGUsdCl7dGhpcy5vYnNlcnZlcnNbZV0mJih0P3RoaXMub2JzZXJ2ZXJzW2VdLmRlbGV0ZSh0KTpkZWxldGUgdGhpcy5vYnNlcnZlcnNbZV0pfWVtaXQoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO2lmKHRoaXMub2JzZXJ2ZXJzW2VdKXtBcnJheS5mcm9tKHRoaXMub2JzZXJ2ZXJzW2VdLmVudHJpZXMoKSkuZm9yRWFjaCgoZT0+e2xldFt0LHJdPWU7Zm9yKGxldCBlPTA7ZTxyO2UrKyl0KC4uLm4pfSkpfWlmKHRoaXMub2JzZXJ2ZXJzW1wiKlwiXSl7QXJyYXkuZnJvbSh0aGlzLm9ic2VydmVyc1tcIipcIl0uZW50cmllcygpKS5mb3JFYWNoKCh0PT57bGV0W3Isb109dDtmb3IobGV0IHQ9MDt0PG87dCsrKXIuYXBwbHkocixbZSwuLi5uXSl9KSl9fX1mdW5jdGlvbiBHdCgpe2xldCBlLHQ7Y29uc3Qgbj1uZXcgUHJvbWlzZSgoKG4scik9PntlPW4sdD1yfSkpO3JldHVybiBuLnJlc29sdmU9ZSxuLnJlamVjdD10LG59ZnVuY3Rpb24gS3QoZSl7cmV0dXJuIG51bGw9PWU/XCJcIjpcIlwiK2V9Y29uc3QgcXQ9LyMjIy9nO2Z1bmN0aW9uIFl0KGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLmluZGV4T2YoXCIjIyNcIik+LTE/ZS5yZXBsYWNlKHF0LFwiLlwiKTplfWZ1bmN0aW9uIG8oKXtyZXR1cm4hZXx8XCJzdHJpbmdcIj09dHlwZW9mIGV9Y29uc3QgYT1cInN0cmluZ1wiIT10eXBlb2YgdD90OnQuc3BsaXQoXCIuXCIpO2xldCBpPTA7Zm9yKDtpPGEubGVuZ3RoLTE7KXtpZihvKCkpcmV0dXJue307Y29uc3QgdD1yKGFbaV0pOyFlW3RdJiZuJiYoZVt0XT1uZXcgbiksZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KT9lW3RdOnt9LCsraX1yZXR1cm4gbygpP3t9OntvYmo6ZSxrOnIoYVtpXSl9fWZ1bmN0aW9uIEp0KGUsdCxuKXtjb25zdHtvYmo6cixrOm99PVl0KGUsdCxPYmplY3QpO2lmKHZvaWQgMCE9PXJ8fDE9PT10Lmxlbmd0aClyZXR1cm4gdm9pZChyW29dPW4pO2xldCBhPXRbdC5sZW5ndGgtMV0saT10LnNsaWNlKDAsdC5sZW5ndGgtMSksbD1ZdChlLGksT2JqZWN0KTtmb3IoO3ZvaWQgMD09PWwub2JqJiZpLmxlbmd0aDspYT1gJHtpW2kubGVuZ3RoLTFdfS4ke2F9YCxpPWkuc2xpY2UoMCxpLmxlbmd0aC0xKSxsPVl0KGUsaSxPYmplY3QpLGwmJmwub2JqJiZ2b2lkIDAhPT1sLm9ialtgJHtsLmt9LiR7YX1gXSYmKGwub2JqPXZvaWQgMCk7bC5vYmpbYCR7bC5rfS4ke2F9YF09bn1mdW5jdGlvbiBYdChlLHQpe2NvbnN0e29iajpuLGs6cn09WXQoZSx0KTtpZihuKXJldHVybiBuW3JdfWZ1bmN0aW9uIFF0KGUsdCxuKXtmb3IoY29uc3QgciBpbiB0KVwiX19wcm90b19fXCIhPT1yJiZcImNvbnN0cnVjdG9yXCIhPT1yJiYociBpbiBlP1wic3RyaW5nXCI9PXR5cGVvZiBlW3JdfHxlW3JdaW5zdGFuY2VvZiBTdHJpbmd8fFwic3RyaW5nXCI9PXR5cGVvZiB0W3JdfHx0W3JdaW5zdGFuY2VvZiBTdHJpbmc/biYmKGVbcl09dFtyXSk6UXQoZVtyXSx0W3JdLG4pOmVbcl09dFtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZW4oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xcLVxcW1xcXVxcL1xce1xcfVxcKFxcKVxcKlxcK1xcP1xcLlxcXFxcXF5cXCRcXHxdL2csXCJcXFxcJCZcIil9dmFyIHRuPXtcIiZcIjpcIiZhbXA7XCIsXCI8XCI6XCImbHQ7XCIsXCI+XCI6XCImZ3Q7XCIsJ1wiJzpcIiZxdW90O1wiLFwiJ1wiOlwiJiMzOTtcIixcIi9cIjpcIiYjeDJGO1wifTtmdW5jdGlvbiBubihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT9lLnJlcGxhY2UoL1smPD5cIidcXC9dL2csKGU9PnRuW2VdKSk6ZX1jb25zdCBybj1bXCIgXCIsXCIsXCIsXCI/XCIsXCIhXCIsXCI7XCJdLG9uPW5ldyBjbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmNhcGFjaXR5PWUsdGhpcy5yZWdFeHBNYXA9bmV3IE1hcCx0aGlzLnJlZ0V4cFF1ZXVlPVtdfWdldFJlZ0V4cChlKXtjb25zdCB0PXRoaXMucmVnRXhwTWFwLmdldChlKTtpZih2b2lkIDAhPT10KXJldHVybiB0O2NvbnN0IG49bmV3IFJlZ0V4cChlKTtyZXR1cm4gdGhpcy5yZWdFeHBRdWV1ZS5sZW5ndGg9PT10aGlzLmNhcGFjaXR5JiZ0aGlzLnJlZ0V4cE1hcC5kZWxldGUodGhpcy5yZWdFeHBRdWV1ZS5zaGlmdCgpKSx0aGlzLnJlZ0V4cE1hcC5zZXQoZSxuKSx0aGlzLnJlZ0V4cFF1ZXVlLnB1c2goZSksbn19KDIwKTtmdW5jdGlvbiBhbihlLHQpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpcIi5cIjtpZighZSlyZXR1cm47aWYoZVt0XSlyZXR1cm4gZVt0XTtjb25zdCByPXQuc3BsaXQobik7bGV0IG89ZTtmb3IobGV0IGU9MDtlPHIubGVuZ3RoOyl7aWYoIW98fFwib2JqZWN0XCIhPXR5cGVvZiBvKXJldHVybjtsZXQgdCxhPVwiXCI7Zm9yKGxldCBpPWU7aTxyLmxlbmd0aDsrK2kpaWYoaSE9PWUmJihhKz1uKSxhKz1yW2ldLHQ9b1thXSx2b2lkIDAhPT10KXtpZihbXCJzdHJpbmdcIixcIm51bWJlclwiLFwiYm9vbGVhblwiXS5pbmRleE9mKHR5cGVvZiB0KT4tMSYmaTxyLmxlbmd0aC0xKWNvbnRpbnVlO2UrPWktZSsxO2JyZWFrfW89dH1yZXR1cm4gb31mdW5jdGlvbiBsbihlKXtyZXR1cm4gZSYmZS5pbmRleE9mKFwiX1wiKT4wP2UucmVwbGFjZShcIl9cIixcIi1cIik6ZX1jbGFzcyBzbiBleHRlbmRzIHp0e2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7bnM6W1widHJhbnNsYXRpb25cIl0sZGVmYXVsdE5TOlwidHJhbnNsYXRpb25cIn07c3VwZXIoKSx0aGlzLmRhdGE9ZXx8e30sdGhpcy5vcHRpb25zPXQsdm9pZCAwPT09dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciYmKHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I9XCIuXCIpLHZvaWQgMD09PXRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlJiYodGhpcy5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmU9ITApfWFkZE5hbWVzcGFjZXMoZSl7dGhpcy5vcHRpb25zLm5zLmluZGV4T2YoZSk8MCYmdGhpcy5vcHRpb25zLm5zLnB1c2goZSl9cmVtb3ZlTmFtZXNwYWNlcyhlKXtjb25zdCB0PXRoaXMub3B0aW9ucy5ucy5pbmRleE9mKGUpO3Q+LTEmJnRoaXMub3B0aW9ucy5ucy5zcGxpY2UodCwxKX1nZXRSZXNvdXJjZShlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O2NvbnN0IG89dm9pZCAwIT09ci5rZXlTZXBhcmF0b3I/ci5rZXlTZXBhcmF0b3I6dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcixhPXZvaWQgMCE9PXIuaWdub3JlSlNPTlN0cnVjdHVyZT9yLmlnbm9yZUpTT05TdHJ1Y3R1cmU6dGhpcy5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmU7bGV0IGk7ZS5pbmRleE9mKFwiLlwiKT4tMT9pPWUuc3BsaXQoXCIuXCIpOihpPVtlLHRdLG4mJihBcnJheS5pc0FycmF5KG4pP2kucHVzaCguLi5uKTpcInN0cmluZ1wiPT10eXBlb2YgbiYmbz9pLnB1c2goLi4ubi5zcGxpdChvKSk6aS5wdXNoKG4pKSk7Y29uc3QgbD1YdCh0aGlzLmRhdGEsaSk7cmV0dXJuIWwmJiF0JiYhbiYmZS5pbmRleE9mKFwiLlwiKT4tMSYmKGU9aVswXSx0PWlbMV0sbj1pLnNsaWNlKDIpLmpvaW4oXCIuXCIpKSxsfHwhYXx8XCJzdHJpbmdcIiE9dHlwZW9mIG4/bDphbih0aGlzLmRhdGEmJnRoaXMuZGF0YVtlXSYmdGhpcy5kYXRhW2VdW3RdLG4sbyl9YWRkUmVzb3VyY2UoZSx0LG4scil7bGV0IG89YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOntzaWxlbnQ6ITF9O2NvbnN0IGE9dm9pZCAwIT09by5rZXlTZXBhcmF0b3I/by5rZXlTZXBhcmF0b3I6dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtsZXQgaT1bZSx0XTtuJiYoaT1pLmNvbmNhdChhP24uc3BsaXQoYSk6bikpLGUuaW5kZXhPZihcIi5cIik+LTEmJihpPWUuc3BsaXQoXCIuXCIpLHI9dCx0PWlbMV0pLHRoaXMuYWRkTmFtZXNwYWNlcyh0KSxKdCh0aGlzLmRhdGEsaSxyKSxvLnNpbGVudHx8dGhpcy5lbWl0KFwiYWRkZWRcIixlLHQsbixyKX1hZGRSZXNvdXJjZXMoZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7c2lsZW50OiExfTtmb3IoY29uc3QgciBpbiBuKVwic3RyaW5nXCIhPXR5cGVvZiBuW3JdJiZcIltvYmplY3QgQXJyYXldXCIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KG5bcl0pfHx0aGlzLmFkZFJlc291cmNlKGUsdCxyLG5bcl0se3NpbGVudDohMH0pO3Iuc2lsZW50fHx0aGlzLmVtaXQoXCJhZGRlZFwiLGUsdCxuKX1hZGRSZXNvdXJjZUJ1bmRsZShlLHQsbixyLG8pe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdP2FyZ3VtZW50c1s1XTp7c2lsZW50OiExfSxpPVtlLHRdO2UuaW5kZXhPZihcIi5cIik+LTEmJihpPWUuc3BsaXQoXCIuXCIpLHI9bixuPXQsdD1pWzFdKSx0aGlzLmFkZE5hbWVzcGFjZXModCk7bGV0IGw9WHQodGhpcy5kYXRhLGkpfHx7fTtyP1F0KGwsbixvKTpsPXsuLi5sLC4uLm59LEp0KHRoaXMuZGF0YSxpLGwpLGEuc2lsZW50fHx0aGlzLmVtaXQoXCJhZGRlZFwiLGUsdCxuKX1yZW1vdmVSZXNvdXJjZUJ1bmRsZShlLHQpe3RoaXMuaGFzUmVzb3VyY2VCdW5kbGUoZSx0KSYmZGVsZXRlIHRoaXMuZGF0YVtlXVt0XSx0aGlzLnJlbW92ZU5hbWVzcGFjZXModCksdGhpcy5lbWl0KFwicmVtb3ZlZFwiLGUsdCl9aGFzUmVzb3VyY2VCdW5kbGUoZSx0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5nZXRSZXNvdXJjZShlLHQpfWdldFJlc291cmNlQnVuZGxlKGUsdCl7cmV0dXJuIHR8fCh0PXRoaXMub3B0aW9ucy5kZWZhdWx0TlMpLFwidjFcIj09PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJP3suLi50aGlzLmdldFJlc291cmNlKGUsdCl9OnRoaXMuZ2V0UmVzb3VyY2UoZSx0KX1nZXREYXRhQnlMYW5ndWFnZShlKXtyZXR1cm4gdGhpcy5kYXRhW2VdfWhhc0xhbmd1YWdlU29tZVRyYW5zbGF0aW9ucyhlKXtjb25zdCB0PXRoaXMuZ2V0RGF0YUJ5TGFuZ3VhZ2UoZSk7cmV0dXJuISEodCYmT2JqZWN0LmtleXModCl8fFtdKS5maW5kKChlPT50W2VdJiZPYmplY3Qua2V5cyh0W2VdKS5sZW5ndGg+MCkpfXRvSlNPTigpe3JldHVybiB0aGlzLmRhdGF9fXZhciBjbj17cHJvY2Vzc29yczp7fSxhZGRQb3N0UHJvY2Vzc29yKGUpe3RoaXMucHJvY2Vzc29yc1tlLm5hbWVdPWV9LGhhbmRsZShlLHQsbixyLG8pe3JldHVybiBlLmZvckVhY2goKGU9Pnt0aGlzLnByb2Nlc3NvcnNbZV0mJih0PXRoaXMucHJvY2Vzc29yc1tlXS5wcm9jZXNzKHQsbixyLG8pKX0pKSx0fX07Y29uc3QgdW49e307Y2xhc3MgZG4gZXh0ZW5kcyB6dHtjb25zdHJ1Y3RvcihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307c3VwZXIoKSxmdW5jdGlvbihlLHQsbil7ZS5mb3JFYWNoKChlPT57dFtlXSYmKG5bZV09dFtlXSl9KSl9KFtcInJlc291cmNlU3RvcmVcIixcImxhbmd1YWdlVXRpbHNcIixcInBsdXJhbFJlc29sdmVyXCIsXCJpbnRlcnBvbGF0b3JcIixcImJhY2tlbmRDb25uZWN0b3JcIixcImkxOG5Gb3JtYXRcIixcInV0aWxzXCJdLGUsdGhpcyksdGhpcy5vcHRpb25zPXQsdm9pZCAwPT09dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciYmKHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I9XCIuXCIpLHRoaXMubG9nZ2VyPVV0LmNyZWF0ZShcInRyYW5zbGF0b3JcIil9Y2hhbmdlTGFuZ3VhZ2UoZSl7ZSYmKHRoaXMubGFuZ3VhZ2U9ZSl9ZXhpc3RzKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7aW50ZXJwb2xhdGlvbjp7fX07aWYobnVsbD09ZSlyZXR1cm4hMTtjb25zdCBuPXRoaXMucmVzb2x2ZShlLHQpO3JldHVybiBuJiZ2b2lkIDAhPT1uLnJlc31leHRyYWN0RnJvbUtleShlLHQpe2xldCBuPXZvaWQgMCE9PXQubnNTZXBhcmF0b3I/dC5uc1NlcGFyYXRvcjp0aGlzLm9wdGlvbnMubnNTZXBhcmF0b3I7dm9pZCAwPT09biYmKG49XCI6XCIpO2NvbnN0IHI9dm9pZCAwIT09dC5rZXlTZXBhcmF0b3I/dC5rZXlTZXBhcmF0b3I6dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtsZXQgbz10Lm5zfHx0aGlzLm9wdGlvbnMuZGVmYXVsdE5TfHxbXTtjb25zdCBhPW4mJmUuaW5kZXhPZihuKT4tMSxpPSEodGhpcy5vcHRpb25zLnVzZXJEZWZpbmVkS2V5U2VwYXJhdG9yfHx0LmtleVNlcGFyYXRvcnx8dGhpcy5vcHRpb25zLnVzZXJEZWZpbmVkTnNTZXBhcmF0b3J8fHQubnNTZXBhcmF0b3J8fGZ1bmN0aW9uKGUsdCxuKXt0PXR8fFwiXCIsbj1ufHxcIlwiO2NvbnN0IHI9cm4uZmlsdGVyKChlPT50LmluZGV4T2YoZSk8MCYmbi5pbmRleE9mKGUpPDApKTtpZigwPT09ci5sZW5ndGgpcmV0dXJuITA7Y29uc3Qgbz1vbi5nZXRSZWdFeHAoYCgke3IubWFwKChlPT5cIj9cIj09PWU/XCJcXFxcP1wiOmUpKS5qb2luKFwifFwiKX0pYCk7bGV0IGE9IW8udGVzdChlKTtpZighYSl7Y29uc3QgdD1lLmluZGV4T2Yobik7dD4wJiYhby50ZXN0KGUuc3Vic3RyaW5nKDAsdCkpJiYoYT0hMCl9cmV0dXJuIGF9KGUsbixyKSk7aWYoYSYmIWkpe2NvbnN0IHQ9ZS5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTtpZih0JiZ0Lmxlbmd0aD4wKXJldHVybntrZXk6ZSxuYW1lc3BhY2VzOm99O2NvbnN0IGE9ZS5zcGxpdChuKTsobiE9PXJ8fG49PT1yJiZ0aGlzLm9wdGlvbnMubnMuaW5kZXhPZihhWzBdKT4tMSkmJihvPWEuc2hpZnQoKSksZT1hLmpvaW4ocil9cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIG8mJihvPVtvXSkse2tleTplLG5hbWVzcGFjZXM6b319dHJhbnNsYXRlKGUsdCxuKXtpZihcIm9iamVjdFwiIT10eXBlb2YgdCYmdGhpcy5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyJiYodD10aGlzLm9wdGlvbnMub3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXIoYXJndW1lbnRzKSksXCJvYmplY3RcIj09dHlwZW9mIHQmJih0PXsuLi50fSksdHx8KHQ9e30pLG51bGw9PWUpcmV0dXJuXCJcIjtBcnJheS5pc0FycmF5KGUpfHwoZT1bU3RyaW5nKGUpXSk7Y29uc3Qgcj12b2lkIDAhPT10LnJldHVybkRldGFpbHM/dC5yZXR1cm5EZXRhaWxzOnRoaXMub3B0aW9ucy5yZXR1cm5EZXRhaWxzLG89dm9pZCAwIT09dC5rZXlTZXBhcmF0b3I/dC5rZXlTZXBhcmF0b3I6dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcix7a2V5OmEsbmFtZXNwYWNlczppfT10aGlzLmV4dHJhY3RGcm9tS2V5KGVbZS5sZW5ndGgtMV0sdCksbD1pW2kubGVuZ3RoLTFdLHM9dC5sbmd8fHRoaXMubGFuZ3VhZ2UsYz10LmFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlfHx0aGlzLm9wdGlvbnMuYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGU7aWYocyYmXCJjaW1vZGVcIj09PXMudG9Mb3dlckNhc2UoKSl7aWYoYyl7Y29uc3QgZT10Lm5zU2VwYXJhdG9yfHx0aGlzLm9wdGlvbnMubnNTZXBhcmF0b3I7cmV0dXJuIHI/e3JlczpgJHtsfSR7ZX0ke2F9YCx1c2VkS2V5OmEsZXhhY3RVc2VkS2V5OmEsdXNlZExuZzpzLHVzZWROUzpsLHVzZWRQYXJhbXM6dGhpcy5nZXRVc2VkUGFyYW1zRGV0YWlscyh0KX06YCR7bH0ke2V9JHthfWB9cmV0dXJuIHI/e3JlczphLHVzZWRLZXk6YSxleGFjdFVzZWRLZXk6YSx1c2VkTG5nOnMsdXNlZE5TOmwsdXNlZFBhcmFtczp0aGlzLmdldFVzZWRQYXJhbXNEZXRhaWxzKHQpfTphfWNvbnN0IHU9dGhpcy5yZXNvbHZlKGUsdCk7bGV0IGQ9dSYmdS5yZXM7Y29uc3QgcD11JiZ1LnVzZWRLZXl8fGEsZj11JiZ1LmV4YWN0VXNlZEtleXx8YSxoPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkoZCksZz12b2lkIDAhPT10LmpvaW5BcnJheXM/dC5qb2luQXJyYXlzOnRoaXMub3B0aW9ucy5qb2luQXJyYXlzLHY9IXRoaXMuaTE4bkZvcm1hdHx8dGhpcy5pMThuRm9ybWF0LmhhbmRsZUFzT2JqZWN0O2lmKHYmJmQmJihcInN0cmluZ1wiIT10eXBlb2YgZCYmXCJib29sZWFuXCIhPXR5cGVvZiBkJiZcIm51bWJlclwiIT10eXBlb2YgZCkmJltcIltvYmplY3QgTnVtYmVyXVwiLFwiW29iamVjdCBGdW5jdGlvbl1cIixcIltvYmplY3QgUmVnRXhwXVwiXS5pbmRleE9mKGgpPDAmJihcInN0cmluZ1wiIT10eXBlb2YgZ3x8XCJbb2JqZWN0IEFycmF5XVwiIT09aCkpe2lmKCF0LnJldHVybk9iamVjdHMmJiF0aGlzLm9wdGlvbnMucmV0dXJuT2JqZWN0cyl7dGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlcnx8dGhpcy5sb2dnZXIud2FybihcImFjY2Vzc2luZyBhbiBvYmplY3QgLSBidXQgcmV0dXJuT2JqZWN0cyBvcHRpb25zIGlzIG5vdCBlbmFibGVkIVwiKTtjb25zdCBlPXRoaXMub3B0aW9ucy5yZXR1cm5lZE9iamVjdEhhbmRsZXI/dGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlcihwLGQsey4uLnQsbnM6aX0pOmBrZXkgJyR7YX0gKCR7dGhpcy5sYW5ndWFnZX0pJyByZXR1cm5lZCBhbiBvYmplY3QgaW5zdGVhZCBvZiBzdHJpbmcuYDtyZXR1cm4gcj8odS5yZXM9ZSx1LnVzZWRQYXJhbXM9dGhpcy5nZXRVc2VkUGFyYW1zRGV0YWlscyh0KSx1KTplfWlmKG8pe2NvbnN0IGU9XCJbb2JqZWN0IEFycmF5XVwiPT09aCxuPWU/W106e30scj1lP2Y6cDtmb3IoY29uc3QgZSBpbiBkKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLGUpKXtjb25zdCBhPWAke3J9JHtvfSR7ZX1gO25bZV09dGhpcy50cmFuc2xhdGUoYSx7Li4udCxqb2luQXJyYXlzOiExLG5zOml9KSxuW2VdPT09YSYmKG5bZV09ZFtlXSl9ZD1ufX1lbHNlIGlmKHYmJlwic3RyaW5nXCI9PXR5cGVvZiBnJiZcIltvYmplY3QgQXJyYXldXCI9PT1oKWQ9ZC5qb2luKGcpLGQmJihkPXRoaXMuZXh0ZW5kVHJhbnNsYXRpb24oZCxlLHQsbikpO2Vsc2V7bGV0IHI9ITEsaT0hMTtjb25zdCBjPXZvaWQgMCE9PXQuY291bnQmJlwic3RyaW5nXCIhPXR5cGVvZiB0LmNvdW50LHA9ZG4uaGFzRGVmYXVsdFZhbHVlKHQpLGY9Yz90aGlzLnBsdXJhbFJlc29sdmVyLmdldFN1ZmZpeChzLHQuY291bnQsdCk6XCJcIixoPXQub3JkaW5hbCYmYz90aGlzLnBsdXJhbFJlc29sdmVyLmdldFN1ZmZpeChzLHQuY291bnQse29yZGluYWw6ITF9KTpcIlwiLGc9YyYmIXQub3JkaW5hbCYmMD09PXQuY291bnQmJnRoaXMucGx1cmFsUmVzb2x2ZXIuc2hvdWxkVXNlSW50bEFwaSgpLHY9ZyYmdFtgZGVmYXVsdFZhbHVlJHt0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yfXplcm9gXXx8dFtgZGVmYXVsdFZhbHVlJHtmfWBdfHx0W2BkZWZhdWx0VmFsdWUke2h9YF18fHQuZGVmYXVsdFZhbHVlOyF0aGlzLmlzVmFsaWRMb29rdXAoZCkmJnAmJihyPSEwLGQ9diksdGhpcy5pc1ZhbGlkTG9va3VwKGQpfHwoaT0hMCxkPWEpO2NvbnN0IEM9KHQubWlzc2luZ0tleU5vVmFsdWVGYWxsYmFja1RvS2V5fHx0aGlzLm9wdGlvbnMubWlzc2luZ0tleU5vVmFsdWVGYWxsYmFja1RvS2V5KSYmaT92b2lkIDA6ZCxtPXAmJnYhPT1kJiZ0aGlzLm9wdGlvbnMudXBkYXRlTWlzc2luZztpZihpfHxyfHxtKXtpZih0aGlzLmxvZ2dlci5sb2cobT9cInVwZGF0ZUtleVwiOlwibWlzc2luZ0tleVwiLHMsbCxhLG0/djpkKSxvKXtjb25zdCBlPXRoaXMucmVzb2x2ZShhLHsuLi50LGtleVNlcGFyYXRvcjohMX0pO2UmJmUucmVzJiZ0aGlzLmxvZ2dlci53YXJuKFwiU2VlbXMgdGhlIGxvYWRlZCB0cmFuc2xhdGlvbnMgd2VyZSBpbiBmbGF0IEpTT04gZm9ybWF0IGluc3RlYWQgb2YgbmVzdGVkLiBFaXRoZXIgc2V0IGtleVNlcGFyYXRvcjogZmFsc2Ugb24gaW5pdCBvciBtYWtlIHN1cmUgeW91ciB0cmFuc2xhdGlvbnMgYXJlIHB1Ymxpc2hlZCBpbiBuZXN0ZWQgZm9ybWF0LlwiKX1sZXQgZT1bXTtjb25zdCBuPXRoaXMubGFuZ3VhZ2VVdGlscy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyx0LmxuZ3x8dGhpcy5sYW5ndWFnZSk7aWYoXCJmYWxsYmFja1wiPT09dGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nVG8mJm4mJm5bMF0pZm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0KyspZS5wdXNoKG5bdF0pO2Vsc2VcImFsbFwiPT09dGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nVG8/ZT10aGlzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KHQubG5nfHx0aGlzLmxhbmd1YWdlKTplLnB1c2godC5sbmd8fHRoaXMubGFuZ3VhZ2UpO2NvbnN0IHI9KGUsbixyKT0+e2NvbnN0IG89cCYmciE9PWQ/cjpDO3RoaXMub3B0aW9ucy5taXNzaW5nS2V5SGFuZGxlcj90aGlzLm9wdGlvbnMubWlzc2luZ0tleUhhbmRsZXIoZSxsLG4sbyxtLHQpOnRoaXMuYmFja2VuZENvbm5lY3RvciYmdGhpcy5iYWNrZW5kQ29ubmVjdG9yLnNhdmVNaXNzaW5nJiZ0aGlzLmJhY2tlbmRDb25uZWN0b3Iuc2F2ZU1pc3NpbmcoZSxsLG4sbyxtLHQpLHRoaXMuZW1pdChcIm1pc3NpbmdLZXlcIixlLGwsbixkKX07dGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nJiYodGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nUGx1cmFscyYmYz9lLmZvckVhY2goKGU9Pntjb25zdCBuPXRoaXMucGx1cmFsUmVzb2x2ZXIuZ2V0U3VmZml4ZXMoZSx0KTtnJiZ0W2BkZWZhdWx0VmFsdWUke3RoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3J9emVyb2BdJiZuLmluZGV4T2YoYCR7dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcn16ZXJvYCk8MCYmbi5wdXNoKGAke3RoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3J9emVyb2ApLG4uZm9yRWFjaCgobj0+e3IoW2VdLGErbix0W2BkZWZhdWx0VmFsdWUke259YF18fHYpfSkpfSkpOnIoZSxhLHYpKX1kPXRoaXMuZXh0ZW5kVHJhbnNsYXRpb24oZCxlLHQsdSxuKSxpJiZkPT09YSYmdGhpcy5vcHRpb25zLmFwcGVuZE5hbWVzcGFjZVRvTWlzc2luZ0tleSYmKGQ9YCR7bH06JHthfWApLChpfHxyKSYmdGhpcy5vcHRpb25zLnBhcnNlTWlzc2luZ0tleUhhbmRsZXImJihkPVwidjFcIiE9PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJP3RoaXMub3B0aW9ucy5wYXJzZU1pc3NpbmdLZXlIYW5kbGVyKHRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb01pc3NpbmdLZXk/YCR7bH06JHthfWA6YSxyP2Q6dm9pZCAwKTp0aGlzLm9wdGlvbnMucGFyc2VNaXNzaW5nS2V5SGFuZGxlcihkKSl9cmV0dXJuIHI/KHUucmVzPWQsdS51c2VkUGFyYW1zPXRoaXMuZ2V0VXNlZFBhcmFtc0RldGFpbHModCksdSk6ZH1leHRlbmRUcmFuc2xhdGlvbihlLHQsbixyLG8pe3ZhciBhPXRoaXM7aWYodGhpcy5pMThuRm9ybWF0JiZ0aGlzLmkxOG5Gb3JtYXQucGFyc2UpZT10aGlzLmkxOG5Gb3JtYXQucGFyc2UoZSx7Li4udGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcywuLi5ufSxuLmxuZ3x8dGhpcy5sYW5ndWFnZXx8ci51c2VkTG5nLHIudXNlZE5TLHIudXNlZEtleSx7cmVzb2x2ZWQ6cn0pO2Vsc2UgaWYoIW4uc2tpcEludGVycG9sYXRpb24pe24uaW50ZXJwb2xhdGlvbiYmdGhpcy5pbnRlcnBvbGF0b3IuaW5pdCh7Li4ubixpbnRlcnBvbGF0aW9uOnsuLi50aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbiwuLi5uLmludGVycG9sYXRpb259fSk7Y29uc3QgaT1cInN0cmluZ1wiPT10eXBlb2YgZSYmKG4mJm4uaW50ZXJwb2xhdGlvbiYmdm9pZCAwIT09bi5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcz9uLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzOnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcyk7bGV0IGw7aWYoaSl7Y29uc3QgdD1lLm1hdGNoKHRoaXMuaW50ZXJwb2xhdG9yLm5lc3RpbmdSZWdleHApO2w9dCYmdC5sZW5ndGh9bGV0IHM9bi5yZXBsYWNlJiZcInN0cmluZ1wiIT10eXBlb2Ygbi5yZXBsYWNlP24ucmVwbGFjZTpuO2lmKHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMmJihzPXsuLi50aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzLC4uLnN9KSxlPXRoaXMuaW50ZXJwb2xhdG9yLmludGVycG9sYXRlKGUscyxuLmxuZ3x8dGhpcy5sYW5ndWFnZSxuKSxpKXtjb25zdCB0PWUubWF0Y2godGhpcy5pbnRlcnBvbGF0b3IubmVzdGluZ1JlZ2V4cCk7bDwodCYmdC5sZW5ndGgpJiYobi5uZXN0PSExKX0hbi5sbmcmJlwidjFcIiE9PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJJiZyJiZyLnJlcyYmKG4ubG5nPXIudXNlZExuZyksITEhPT1uLm5lc3QmJihlPXRoaXMuaW50ZXJwb2xhdG9yLm5lc3QoZSwoZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gbyYmb1swXT09PXJbMF0mJiFuLmNvbnRleHQ/KGEubG9nZ2VyLndhcm4oYEl0IHNlZW1zIHlvdSBhcmUgbmVzdGluZyByZWN1cnNpdmVseSBrZXk6ICR7clswXX0gaW4ga2V5OiAke3RbMF19YCksbnVsbCk6YS50cmFuc2xhdGUoLi4ucix0KX0pLG4pKSxuLmludGVycG9sYXRpb24mJnRoaXMuaW50ZXJwb2xhdG9yLnJlc2V0KCl9Y29uc3QgaT1uLnBvc3RQcm9jZXNzfHx0aGlzLm9wdGlvbnMucG9zdFByb2Nlc3MsbD1cInN0cmluZ1wiPT10eXBlb2YgaT9baV06aTtyZXR1cm4gbnVsbCE9ZSYmbCYmbC5sZW5ndGgmJiExIT09bi5hcHBseVBvc3RQcm9jZXNzb3ImJihlPWNuLmhhbmRsZShsLGUsdCx0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5wb3N0UHJvY2Vzc1Bhc3NSZXNvbHZlZD97aTE4blJlc29sdmVkOnsuLi5yLHVzZWRQYXJhbXM6dGhpcy5nZXRVc2VkUGFyYW1zRGV0YWlscyhuKX0sLi4ubn06bix0aGlzKSksZX1yZXNvbHZlKGUpe2xldCB0LG4scixvLGEsaT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtlXSksZS5mb3JFYWNoKChlPT57aWYodGhpcy5pc1ZhbGlkTG9va3VwKHQpKXJldHVybjtjb25zdCBsPXRoaXMuZXh0cmFjdEZyb21LZXkoZSxpKSxzPWwua2V5O249cztsZXQgYz1sLm5hbWVzcGFjZXM7dGhpcy5vcHRpb25zLmZhbGxiYWNrTlMmJihjPWMuY29uY2F0KHRoaXMub3B0aW9ucy5mYWxsYmFja05TKSk7Y29uc3QgdT12b2lkIDAhPT1pLmNvdW50JiZcInN0cmluZ1wiIT10eXBlb2YgaS5jb3VudCxkPXUmJiFpLm9yZGluYWwmJjA9PT1pLmNvdW50JiZ0aGlzLnBsdXJhbFJlc29sdmVyLnNob3VsZFVzZUludGxBcGkoKSxwPXZvaWQgMCE9PWkuY29udGV4dCYmKFwic3RyaW5nXCI9PXR5cGVvZiBpLmNvbnRleHR8fFwibnVtYmVyXCI9PXR5cGVvZiBpLmNvbnRleHQpJiZcIlwiIT09aS5jb250ZXh0LGY9aS5sbmdzP2kubG5nczp0aGlzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGkubG5nfHx0aGlzLmxhbmd1YWdlLGkuZmFsbGJhY2tMbmcpO2MuZm9yRWFjaCgoZT0+e3RoaXMuaXNWYWxpZExvb2t1cCh0KXx8KGE9ZSwhdW5bYCR7ZlswXX0tJHtlfWBdJiZ0aGlzLnV0aWxzJiZ0aGlzLnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSYmIXRoaXMudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlKGEpJiYodW5bYCR7ZlswXX0tJHtlfWBdPSEwLHRoaXMubG9nZ2VyLndhcm4oYGtleSBcIiR7bn1cIiBmb3IgbGFuZ3VhZ2VzIFwiJHtmLmpvaW4oXCIsIFwiKX1cIiB3b24ndCBnZXQgcmVzb2x2ZWQgYXMgbmFtZXNwYWNlIFwiJHthfVwiIHdhcyBub3QgeWV0IGxvYWRlZGAsXCJUaGlzIG1lYW5zIHNvbWV0aGluZyBJUyBXUk9ORyBpbiB5b3VyIHNldHVwLiBZb3UgYWNjZXNzIHRoZSB0IGZ1bmN0aW9uIGJlZm9yZSBpMThuZXh0LmluaXQgLyBpMThuZXh0LmxvYWROYW1lc3BhY2UgLyBpMThuZXh0LmNoYW5nZUxhbmd1YWdlIHdhcyBkb25lLiBXYWl0IGZvciB0aGUgY2FsbGJhY2sgb3IgUHJvbWlzZSB0byByZXNvbHZlIGJlZm9yZSBhY2Nlc3NpbmcgaXQhISFcIikpLGYuZm9yRWFjaCgobj0+e2lmKHRoaXMuaXNWYWxpZExvb2t1cCh0KSlyZXR1cm47bz1uO2NvbnN0IGE9W3NdO2lmKHRoaXMuaTE4bkZvcm1hdCYmdGhpcy5pMThuRm9ybWF0LmFkZExvb2t1cEtleXMpdGhpcy5pMThuRm9ybWF0LmFkZExvb2t1cEtleXMoYSxzLG4sZSxpKTtlbHNle2xldCBlO3UmJihlPXRoaXMucGx1cmFsUmVzb2x2ZXIuZ2V0U3VmZml4KG4saS5jb3VudCxpKSk7Y29uc3QgdD1gJHt0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yfXplcm9gLHI9YCR7dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcn1vcmRpbmFsJHt0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yfWA7aWYodSYmKGEucHVzaChzK2UpLGkub3JkaW5hbCYmMD09PWUuaW5kZXhPZihyKSYmYS5wdXNoKHMrZS5yZXBsYWNlKHIsdGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcikpLGQmJmEucHVzaChzK3QpKSxwKXtjb25zdCBuPWAke3N9JHt0aGlzLm9wdGlvbnMuY29udGV4dFNlcGFyYXRvcn0ke2kuY29udGV4dH1gO2EucHVzaChuKSx1JiYoYS5wdXNoKG4rZSksaS5vcmRpbmFsJiYwPT09ZS5pbmRleE9mKHIpJiZhLnB1c2gobitlLnJlcGxhY2Uocix0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yKSksZCYmYS5wdXNoKG4rdCkpfX1sZXQgbDtmb3IoO2w9YS5wb3AoKTspdGhpcy5pc1ZhbGlkTG9va3VwKHQpfHwocj1sLHQ9dGhpcy5nZXRSZXNvdXJjZShuLGUsbCxpKSl9KSkpfSkpfSkpLHtyZXM6dCx1c2VkS2V5Om4sZXhhY3RVc2VkS2V5OnIsdXNlZExuZzpvLHVzZWROUzphfX1pc1ZhbGlkTG9va3VwKGUpe3JldHVybiEodm9pZCAwPT09ZXx8IXRoaXMub3B0aW9ucy5yZXR1cm5OdWxsJiZudWxsPT09ZXx8IXRoaXMub3B0aW9ucy5yZXR1cm5FbXB0eVN0cmluZyYmXCJcIj09PWUpfWdldFJlc291cmNlKGUsdCxuKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106e307cmV0dXJuIHRoaXMuaTE4bkZvcm1hdCYmdGhpcy5pMThuRm9ybWF0LmdldFJlc291cmNlP3RoaXMuaTE4bkZvcm1hdC5nZXRSZXNvdXJjZShlLHQsbixyKTp0aGlzLnJlc291cmNlU3RvcmUuZ2V0UmVzb3VyY2UoZSx0LG4scil9Z2V0VXNlZFBhcmFtc0RldGFpbHMoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3QgdD1bXCJkZWZhdWx0VmFsdWVcIixcIm9yZGluYWxcIixcImNvbnRleHRcIixcInJlcGxhY2VcIixcImxuZ1wiLFwibG5nc1wiLFwiZmFsbGJhY2tMbmdcIixcIm5zXCIsXCJrZXlTZXBhcmF0b3JcIixcIm5zU2VwYXJhdG9yXCIsXCJyZXR1cm5PYmplY3RzXCIsXCJyZXR1cm5EZXRhaWxzXCIsXCJqb2luQXJyYXlzXCIsXCJwb3N0UHJvY2Vzc1wiLFwiaW50ZXJwb2xhdGlvblwiXSxuPWUucmVwbGFjZSYmXCJzdHJpbmdcIiE9dHlwZW9mIGUucmVwbGFjZTtsZXQgcj1uP2UucmVwbGFjZTplO2lmKG4mJnZvaWQgMCE9PWUuY291bnQmJihyLmNvdW50PWUuY291bnQpLHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMmJihyPXsuLi50aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzLC4uLnJ9KSwhbil7cj17Li4ucn07Zm9yKGNvbnN0IGUgb2YgdClkZWxldGUgcltlXX1yZXR1cm4gcn1zdGF0aWMgaGFzRGVmYXVsdFZhbHVlKGUpe2NvbnN0IHQ9XCJkZWZhdWx0VmFsdWVcIjtmb3IoY29uc3QgbiBpbiBlKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0PT09bi5zdWJzdHJpbmcoMCwxMikmJnZvaWQgMCE9PWVbbl0pcmV0dXJuITA7cmV0dXJuITF9fWZ1bmN0aW9uIHBuKGUpe3JldHVybiBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSl9Y2xhc3MgZm57Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWUsdGhpcy5zdXBwb3J0ZWRMbmdzPXRoaXMub3B0aW9ucy5zdXBwb3J0ZWRMbmdzfHwhMSx0aGlzLmxvZ2dlcj1VdC5jcmVhdGUoXCJsYW5ndWFnZVV0aWxzXCIpfWdldFNjcmlwdFBhcnRGcm9tQ29kZShlKXtpZighKGU9bG4oZSkpfHxlLmluZGV4T2YoXCItXCIpPDApcmV0dXJuIG51bGw7Y29uc3QgdD1lLnNwbGl0KFwiLVwiKTtyZXR1cm4gMj09PXQubGVuZ3RoP251bGw6KHQucG9wKCksXCJ4XCI9PT10W3QubGVuZ3RoLTFdLnRvTG93ZXJDYXNlKCk/bnVsbDp0aGlzLmZvcm1hdExhbmd1YWdlQ29kZSh0LmpvaW4oXCItXCIpKSl9Z2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSl7aWYoIShlPWxuKGUpKXx8ZS5pbmRleE9mKFwiLVwiKTwwKXJldHVybiBlO2NvbnN0IHQ9ZS5zcGxpdChcIi1cIik7cmV0dXJuIHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKHRbMF0pfWZvcm1hdExhbmd1YWdlQ29kZShlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmZS5pbmRleE9mKFwiLVwiKT4tMSl7Y29uc3QgdD1bXCJoYW5zXCIsXCJoYW50XCIsXCJsYXRuXCIsXCJjeXJsXCIsXCJjYW5zXCIsXCJtb25nXCIsXCJhcmFiXCJdO2xldCBuPWUuc3BsaXQoXCItXCIpO3JldHVybiB0aGlzLm9wdGlvbnMubG93ZXJDYXNlTG5nP249bi5tYXAoKGU9PmUudG9Mb3dlckNhc2UoKSkpOjI9PT1uLmxlbmd0aD8oblswXT1uWzBdLnRvTG93ZXJDYXNlKCksblsxXT1uWzFdLnRvVXBwZXJDYXNlKCksdC5pbmRleE9mKG5bMV0udG9Mb3dlckNhc2UoKSk+LTEmJihuWzFdPXBuKG5bMV0udG9Mb3dlckNhc2UoKSkpKTozPT09bi5sZW5ndGgmJihuWzBdPW5bMF0udG9Mb3dlckNhc2UoKSwyPT09blsxXS5sZW5ndGgmJihuWzFdPW5bMV0udG9VcHBlckNhc2UoKSksXCJzZ25cIiE9PW5bMF0mJjI9PT1uWzJdLmxlbmd0aCYmKG5bMl09blsyXS50b1VwcGVyQ2FzZSgpKSx0LmluZGV4T2YoblsxXS50b0xvd2VyQ2FzZSgpKT4tMSYmKG5bMV09cG4oblsxXS50b0xvd2VyQ2FzZSgpKSksdC5pbmRleE9mKG5bMl0udG9Mb3dlckNhc2UoKSk+LTEmJihuWzJdPXBuKG5bMl0udG9Mb3dlckNhc2UoKSkpKSxuLmpvaW4oXCItXCIpfXJldHVybiB0aGlzLm9wdGlvbnMuY2xlYW5Db2RlfHx0aGlzLm9wdGlvbnMubG93ZXJDYXNlTG5nP2UudG9Mb3dlckNhc2UoKTplfWlzU3VwcG9ydGVkQ29kZShlKXtyZXR1cm4oXCJsYW5ndWFnZU9ubHlcIj09PXRoaXMub3B0aW9ucy5sb2FkfHx0aGlzLm9wdGlvbnMubm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzKSYmKGU9dGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShlKSksIXRoaXMuc3VwcG9ydGVkTG5nc3x8IXRoaXMuc3VwcG9ydGVkTG5ncy5sZW5ndGh8fHRoaXMuc3VwcG9ydGVkTG5ncy5pbmRleE9mKGUpPi0xfWdldEJlc3RNYXRjaEZyb21Db2RlcyhlKXtpZighZSlyZXR1cm4gbnVsbDtsZXQgdDtyZXR1cm4gZS5mb3JFYWNoKChlPT57aWYodClyZXR1cm47Y29uc3Qgbj10aGlzLmZvcm1hdExhbmd1YWdlQ29kZShlKTt0aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncyYmIXRoaXMuaXNTdXBwb3J0ZWRDb2RlKG4pfHwodD1uKX0pKSwhdCYmdGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MmJmUuZm9yRWFjaCgoZT0+e2lmKHQpcmV0dXJuO2NvbnN0IG49dGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShlKTtpZih0aGlzLmlzU3VwcG9ydGVkQ29kZShuKSlyZXR1cm4gdD1uO3Q9dGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MuZmluZCgoZT0+ZT09PW4/ZTplLmluZGV4T2YoXCItXCIpPDAmJm4uaW5kZXhPZihcIi1cIik8MD92b2lkIDA6MD09PWUuaW5kZXhPZihuKT9lOnZvaWQgMCkpfSkpLHR8fCh0PXRoaXMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpWzBdKSx0fWdldEZhbGxiYWNrQ29kZXMoZSx0KXtpZighZSlyZXR1cm5bXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYoZT1lKHQpKSxcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W2VdKSxcIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KGUpKXJldHVybiBlO2lmKCF0KXJldHVybiBlLmRlZmF1bHR8fFtdO2xldCBuPWVbdF07cmV0dXJuIG58fChuPWVbdGhpcy5nZXRTY3JpcHRQYXJ0RnJvbUNvZGUodCldKSxufHwobj1lW3RoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKHQpXSksbnx8KG49ZVt0aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKHQpXSksbnx8KG49ZS5kZWZhdWx0KSxufHxbXX10b1Jlc29sdmVIaWVyYXJjaHkoZSx0KXtjb25zdCBuPXRoaXMuZ2V0RmFsbGJhY2tDb2Rlcyh0fHx0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmd8fFtdLGUpLHI9W10sbz1lPT57ZSYmKHRoaXMuaXNTdXBwb3J0ZWRDb2RlKGUpP3IucHVzaChlKTp0aGlzLmxvZ2dlci53YXJuKGByZWplY3RpbmcgbGFuZ3VhZ2UgY29kZSBub3QgZm91bmQgaW4gc3VwcG9ydGVkTG5nczogJHtlfWApKX07cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlLmluZGV4T2YoXCItXCIpPi0xfHxlLmluZGV4T2YoXCJfXCIpPi0xKT8oXCJsYW5ndWFnZU9ubHlcIiE9PXRoaXMub3B0aW9ucy5sb2FkJiZvKHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGUpKSxcImxhbmd1YWdlT25seVwiIT09dGhpcy5vcHRpb25zLmxvYWQmJlwiY3VycmVudE9ubHlcIiE9PXRoaXMub3B0aW9ucy5sb2FkJiZvKHRoaXMuZ2V0U2NyaXB0UGFydEZyb21Db2RlKGUpKSxcImN1cnJlbnRPbmx5XCIhPT10aGlzLm9wdGlvbnMubG9hZCYmbyh0aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpKSk6XCJzdHJpbmdcIj09dHlwZW9mIGUmJm8odGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoZSkpLG4uZm9yRWFjaCgoZT0+e3IuaW5kZXhPZihlKTwwJiZvKHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGUpKX0pKSxyfX1sZXQgaG49W3tsbmdzOltcImFjaFwiLFwiYWtcIixcImFtXCIsXCJhcm5cIixcImJyXCIsXCJmaWxcIixcImd1blwiLFwibG5cIixcIm1mZVwiLFwibWdcIixcIm1pXCIsXCJvY1wiLFwicHRcIixcInB0LUJSXCIsXCJ0Z1wiLFwidGxcIixcInRpXCIsXCJ0clwiLFwidXpcIixcIndhXCJdLG5yOlsxLDJdLGZjOjF9LHtsbmdzOltcImFmXCIsXCJhblwiLFwiYXN0XCIsXCJhelwiLFwiYmdcIixcImJuXCIsXCJjYVwiLFwiZGFcIixcImRlXCIsXCJkZXZcIixcImVsXCIsXCJlblwiLFwiZW9cIixcImVzXCIsXCJldFwiLFwiZXVcIixcImZpXCIsXCJmb1wiLFwiZnVyXCIsXCJmeVwiLFwiZ2xcIixcImd1XCIsXCJoYVwiLFwiaGlcIixcImh1XCIsXCJoeVwiLFwiaWFcIixcIml0XCIsXCJra1wiLFwia25cIixcImt1XCIsXCJsYlwiLFwibWFpXCIsXCJtbFwiLFwibW5cIixcIm1yXCIsXCJuYWhcIixcIm5hcFwiLFwibmJcIixcIm5lXCIsXCJubFwiLFwibm5cIixcIm5vXCIsXCJuc29cIixcInBhXCIsXCJwYXBcIixcInBtc1wiLFwicHNcIixcInB0LVBUXCIsXCJybVwiLFwic2NvXCIsXCJzZVwiLFwic2lcIixcInNvXCIsXCJzb25cIixcInNxXCIsXCJzdlwiLFwic3dcIixcInRhXCIsXCJ0ZVwiLFwidGtcIixcInVyXCIsXCJ5b1wiXSxucjpbMSwyXSxmYzoyfSx7bG5nczpbXCJheVwiLFwiYm9cIixcImNnZ1wiLFwiZmFcIixcImh0XCIsXCJpZFwiLFwiamFcIixcImpib1wiLFwia2FcIixcImttXCIsXCJrb1wiLFwia3lcIixcImxvXCIsXCJtc1wiLFwic2FoXCIsXCJzdVwiLFwidGhcIixcInR0XCIsXCJ1Z1wiLFwidmlcIixcIndvXCIsXCJ6aFwiXSxucjpbMV0sZmM6M30se2xuZ3M6W1wiYmVcIixcImJzXCIsXCJjbnJcIixcImR6XCIsXCJoclwiLFwicnVcIixcInNyXCIsXCJ1a1wiXSxucjpbMSwyLDVdLGZjOjR9LHtsbmdzOltcImFyXCJdLG5yOlswLDEsMiwzLDExLDEwMF0sZmM6NX0se2xuZ3M6W1wiY3NcIixcInNrXCJdLG5yOlsxLDIsNV0sZmM6Nn0se2xuZ3M6W1wiY3NiXCIsXCJwbFwiXSxucjpbMSwyLDVdLGZjOjd9LHtsbmdzOltcImN5XCJdLG5yOlsxLDIsMyw4XSxmYzo4fSx7bG5nczpbXCJmclwiXSxucjpbMSwyXSxmYzo5fSx7bG5nczpbXCJnYVwiXSxucjpbMSwyLDMsNywxMV0sZmM6MTB9LHtsbmdzOltcImdkXCJdLG5yOlsxLDIsMywyMF0sZmM6MTF9LHtsbmdzOltcImlzXCJdLG5yOlsxLDJdLGZjOjEyfSx7bG5nczpbXCJqdlwiXSxucjpbMCwxXSxmYzoxM30se2xuZ3M6W1wia3dcIl0sbnI6WzEsMiwzLDRdLGZjOjE0fSx7bG5nczpbXCJsdFwiXSxucjpbMSwyLDEwXSxmYzoxNX0se2xuZ3M6W1wibHZcIl0sbnI6WzEsMiwwXSxmYzoxNn0se2xuZ3M6W1wibWtcIl0sbnI6WzEsMl0sZmM6MTd9LHtsbmdzOltcIm1ua1wiXSxucjpbMCwxLDJdLGZjOjE4fSx7bG5nczpbXCJtdFwiXSxucjpbMSwyLDExLDIwXSxmYzoxOX0se2xuZ3M6W1wib3JcIl0sbnI6WzIsMV0sZmM6Mn0se2xuZ3M6W1wicm9cIl0sbnI6WzEsMiwyMF0sZmM6MjB9LHtsbmdzOltcInNsXCJdLG5yOls1LDEsMiwzXSxmYzoyMX0se2xuZ3M6W1wiaGVcIixcIml3XCJdLG5yOlsxLDIsMjAsMjFdLGZjOjIyfV0sZ249ezE6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlPjEpfSwyOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMSE9ZSl9LDM6ZnVuY3Rpb24oZSl7cmV0dXJuIDB9LDQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlJTEwPT0xJiZlJTEwMCE9MTE/MDplJTEwPj0yJiZlJTEwPD00JiYoZSUxMDA8MTB8fGUlMTAwPj0yMCk/MToyKX0sNTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDA9PWU/MDoxPT1lPzE6Mj09ZT8yOmUlMTAwPj0zJiZlJTEwMDw9MTA/MzplJTEwMD49MTE/NDo1KX0sNjpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDplPj0yJiZlPD00PzE6Mil9LDc6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6ZSUxMD49MiYmZSUxMDw9NCYmKGUlMTAwPDEwfHxlJTEwMD49MjApPzE6Mil9LDg6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOjghPWUmJjExIT1lPzI6Myl9LDk6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlPj0yKX0sMTA6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOmU8Nz8yOmU8MTE/Mzo0KX0sMTE6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lfHwxMT09ZT8wOjI9PWV8fDEyPT1lPzE6ZT4yJiZlPDIwPzI6Myl9LDEyOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMCE9MXx8ZSUxMDA9PTExKX0sMTM6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigwIT09ZSl9LDE0OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMT09ZT8wOjI9PWU/MTozPT1lPzI6Myl9LDE1OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMD09MSYmZSUxMDAhPTExPzA6ZSUxMD49MiYmKGUlMTAwPDEwfHxlJTEwMD49MjApPzE6Mil9LDE2OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMD09MSYmZSUxMDAhPTExPzA6MCE9PWU/MToyKX0sMTc6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lfHxlJTEwPT0xJiZlJTEwMCE9MTE/MDoxKX0sMTg6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigwPT1lPzA6MT09ZT8xOjIpfSwxOTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDowPT1lfHxlJTEwMD4xJiZlJTEwMDwxMT8xOmUlMTAwPjEwJiZlJTEwMDwyMD8yOjMpfSwyMDpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDowPT1lfHxlJTEwMD4wJiZlJTEwMDwyMD8xOjIpfSwyMTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGUlMTAwPT0xPzE6ZSUxMDA9PTI/MjplJTEwMD09M3x8ZSUxMDA9PTQ/MzowKX0sMjI6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOihlPDB8fGU+MTApJiZlJTEwPT0wPzI6Myl9fTtjb25zdCB2bj1bXCJ2MVwiLFwidjJcIixcInYzXCJdLENuPVtcInY0XCJdLG1uPXt6ZXJvOjAsb25lOjEsdHdvOjIsZmV3OjMsbWFueTo0LG90aGVyOjV9O2NsYXNzIHdue2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTt0aGlzLmxhbmd1YWdlVXRpbHM9ZSx0aGlzLm9wdGlvbnM9dCx0aGlzLmxvZ2dlcj1VdC5jcmVhdGUoXCJwbHVyYWxSZXNvbHZlclwiKSx0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04mJiFDbi5pbmNsdWRlcyh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04pfHxcInVuZGVmaW5lZFwiIT10eXBlb2YgSW50bCYmSW50bC5QbHVyYWxSdWxlc3x8KHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTj1cInYzXCIsdGhpcy5sb2dnZXIuZXJyb3IoXCJZb3VyIGVudmlyb25tZW50IHNlZW1zIG5vdCB0byBiZSBJbnRsIEFQSSBjb21wYXRpYmxlLCB1c2UgYW4gSW50bC5QbHVyYWxSdWxlcyBwb2x5ZmlsbC4gV2lsbCBmYWxsYmFjayB0byB0aGUgY29tcGF0aWJpbGl0eUpTT04gdjMgZm9ybWF0IGhhbmRsaW5nLlwiKSksdGhpcy5ydWxlcz1mdW5jdGlvbigpe2NvbnN0IGU9e307cmV0dXJuIGhuLmZvckVhY2goKHQ9Pnt0LmxuZ3MuZm9yRWFjaCgobj0+e2Vbbl09e251bWJlcnM6dC5ucixwbHVyYWxzOmduW3QuZmNdfX0pKX0pKSxlfSgpfWFkZFJ1bGUoZSx0KXt0aGlzLnJ1bGVzW2VdPXR9Z2V0UnVsZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYodGhpcy5zaG91bGRVc2VJbnRsQXBpKCkpdHJ5e3JldHVybiBuZXcgSW50bC5QbHVyYWxSdWxlcyhsbihcImRldlwiPT09ZT9cImVuXCI6ZSkse3R5cGU6dC5vcmRpbmFsP1wib3JkaW5hbFwiOlwiY2FyZGluYWxcIn0pfWNhdGNoKGUpe3JldHVybn1yZXR1cm4gdGhpcy5ydWxlc1tlXXx8dGhpcy5ydWxlc1t0aGlzLmxhbmd1YWdlVXRpbHMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSldfW5lZWRzUGx1cmFsKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtjb25zdCBuPXRoaXMuZ2V0UnVsZShlLHQpO3JldHVybiB0aGlzLnNob3VsZFVzZUludGxBcGkoKT9uJiZuLnJlc29sdmVkT3B0aW9ucygpLnBsdXJhbENhdGVnb3JpZXMubGVuZ3RoPjE6biYmbi5udW1iZXJzLmxlbmd0aD4xfWdldFBsdXJhbEZvcm1zT2ZLZXkoZSx0KXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307cmV0dXJuIHRoaXMuZ2V0U3VmZml4ZXMoZSxuKS5tYXAoKGU9PmAke3R9JHtlfWApKX1nZXRTdWZmaXhlcyhlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Y29uc3Qgbj10aGlzLmdldFJ1bGUoZSx0KTtyZXR1cm4gbj90aGlzLnNob3VsZFVzZUludGxBcGkoKT9uLnJlc29sdmVkT3B0aW9ucygpLnBsdXJhbENhdGVnb3JpZXMuc29ydCgoKGUsdCk9Pm1uW2VdLW1uW3RdKSkubWFwKChlPT5gJHt0aGlzLm9wdGlvbnMucHJlcGVuZH0ke3Qub3JkaW5hbD9gb3JkaW5hbCR7dGhpcy5vcHRpb25zLnByZXBlbmR9YDpcIlwifSR7ZX1gKSk6bi5udW1iZXJzLm1hcCgobj0+dGhpcy5nZXRTdWZmaXgoZSxuLHQpKSk6W119Z2V0U3VmZml4KGUsdCl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2NvbnN0IHI9dGhpcy5nZXRSdWxlKGUsbik7cmV0dXJuIHI/dGhpcy5zaG91bGRVc2VJbnRsQXBpKCk/YCR7dGhpcy5vcHRpb25zLnByZXBlbmR9JHtuLm9yZGluYWw/YG9yZGluYWwke3RoaXMub3B0aW9ucy5wcmVwZW5kfWA6XCJcIn0ke3Iuc2VsZWN0KHQpfWA6dGhpcy5nZXRTdWZmaXhSZXRyb0NvbXBhdGlibGUocix0KToodGhpcy5sb2dnZXIud2Fybihgbm8gcGx1cmFsIHJ1bGUgZm91bmQgZm9yOiAke2V9YCksXCJcIil9Z2V0U3VmZml4UmV0cm9Db21wYXRpYmxlKGUsdCl7Y29uc3Qgbj1lLm5vQWJzP2UucGx1cmFscyh0KTplLnBsdXJhbHMoTWF0aC5hYnModCkpO2xldCByPWUubnVtYmVyc1tuXTt0aGlzLm9wdGlvbnMuc2ltcGxpZnlQbHVyYWxTdWZmaXgmJjI9PT1lLm51bWJlcnMubGVuZ3RoJiYxPT09ZS5udW1iZXJzWzBdJiYoMj09PXI/cj1cInBsdXJhbFwiOjE9PT1yJiYocj1cIlwiKSk7Y29uc3Qgbz0oKT0+dGhpcy5vcHRpb25zLnByZXBlbmQmJnIudG9TdHJpbmcoKT90aGlzLm9wdGlvbnMucHJlcGVuZCtyLnRvU3RyaW5nKCk6ci50b1N0cmluZygpO3JldHVyblwidjFcIj09PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTj8xPT09cj9cIlwiOlwibnVtYmVyXCI9PXR5cGVvZiByP2BfcGx1cmFsXyR7ci50b1N0cmluZygpfWA6bygpOlwidjJcIj09PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTnx8dGhpcy5vcHRpb25zLnNpbXBsaWZ5UGx1cmFsU3VmZml4JiYyPT09ZS5udW1iZXJzLmxlbmd0aCYmMT09PWUubnVtYmVyc1swXT9vKCk6dGhpcy5vcHRpb25zLnByZXBlbmQmJm4udG9TdHJpbmcoKT90aGlzLm9wdGlvbnMucHJlcGVuZCtuLnRvU3RyaW5nKCk6bi50b1N0cmluZygpfXNob3VsZFVzZUludGxBcGkoKXtyZXR1cm4hdm4uaW5jbHVkZXModGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OKX19ZnVuY3Rpb24gYm4oZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpcIi5cIixvPSEoYXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0pfHxhcmd1bWVudHNbNF0sYT1mdW5jdGlvbihlLHQsbil7Y29uc3Qgcj1YdChlLG4pO3JldHVybiB2b2lkIDAhPT1yP3I6WHQodCxuKX0oZSx0LG4pO3JldHVybiFhJiZvJiZcInN0cmluZ1wiPT10eXBlb2YgbiYmKGE9YW4oZSxuLHIpLHZvaWQgMD09PWEmJihhPWFuKHQsbixyKSkpLGF9Y2xhc3MgeW57Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307dGhpcy5sb2dnZXI9VXQuY3JlYXRlKFwiaW50ZXJwb2xhdG9yXCIpLHRoaXMub3B0aW9ucz1lLHRoaXMuZm9ybWF0PWUuaW50ZXJwb2xhdGlvbiYmZS5pbnRlcnBvbGF0aW9uLmZvcm1hdHx8KGU9PmUpLHRoaXMuaW5pdChlKX1pbml0KCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2UuaW50ZXJwb2xhdGlvbnx8KGUuaW50ZXJwb2xhdGlvbj17ZXNjYXBlVmFsdWU6ITB9KTtjb25zdCB0PWUuaW50ZXJwb2xhdGlvbjt0aGlzLmVzY2FwZT12b2lkIDAhPT10LmVzY2FwZT90LmVzY2FwZTpubix0aGlzLmVzY2FwZVZhbHVlPXZvaWQgMD09PXQuZXNjYXBlVmFsdWV8fHQuZXNjYXBlVmFsdWUsdGhpcy51c2VSYXdWYWx1ZVRvRXNjYXBlPXZvaWQgMCE9PXQudXNlUmF3VmFsdWVUb0VzY2FwZSYmdC51c2VSYXdWYWx1ZVRvRXNjYXBlLHRoaXMucHJlZml4PXQucHJlZml4P2VuKHQucHJlZml4KTp0LnByZWZpeEVzY2FwZWR8fFwie3tcIix0aGlzLnN1ZmZpeD10LnN1ZmZpeD9lbih0LnN1ZmZpeCk6dC5zdWZmaXhFc2NhcGVkfHxcIn19XCIsdGhpcy5mb3JtYXRTZXBhcmF0b3I9dC5mb3JtYXRTZXBhcmF0b3I/dC5mb3JtYXRTZXBhcmF0b3I6dC5mb3JtYXRTZXBhcmF0b3J8fFwiLFwiLHRoaXMudW5lc2NhcGVQcmVmaXg9dC51bmVzY2FwZVN1ZmZpeD9cIlwiOnQudW5lc2NhcGVQcmVmaXh8fFwiLVwiLHRoaXMudW5lc2NhcGVTdWZmaXg9dGhpcy51bmVzY2FwZVByZWZpeD9cIlwiOnQudW5lc2NhcGVTdWZmaXh8fFwiXCIsdGhpcy5uZXN0aW5nUHJlZml4PXQubmVzdGluZ1ByZWZpeD9lbih0Lm5lc3RpbmdQcmVmaXgpOnQubmVzdGluZ1ByZWZpeEVzY2FwZWR8fGVuKFwiJHQoXCIpLHRoaXMubmVzdGluZ1N1ZmZpeD10Lm5lc3RpbmdTdWZmaXg/ZW4odC5uZXN0aW5nU3VmZml4KTp0Lm5lc3RpbmdTdWZmaXhFc2NhcGVkfHxlbihcIilcIiksdGhpcy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcj10Lm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yP3QubmVzdGluZ09wdGlvbnNTZXBhcmF0b3I6dC5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcnx8XCIsXCIsdGhpcy5tYXhSZXBsYWNlcz10Lm1heFJlcGxhY2VzP3QubWF4UmVwbGFjZXM6MWUzLHRoaXMuYWx3YXlzRm9ybWF0PXZvaWQgMCE9PXQuYWx3YXlzRm9ybWF0JiZ0LmFsd2F5c0Zvcm1hdCx0aGlzLnJlc2V0UmVnRXhwKCl9cmVzZXQoKXt0aGlzLm9wdGlvbnMmJnRoaXMuaW5pdCh0aGlzLm9wdGlvbnMpfXJlc2V0UmVnRXhwKCl7Y29uc3QgZT0oZSx0KT0+ZSYmZS5zb3VyY2U9PT10PyhlLmxhc3RJbmRleD0wLGUpOm5ldyBSZWdFeHAodCxcImdcIik7dGhpcy5yZWdleHA9ZSh0aGlzLnJlZ2V4cCxgJHt0aGlzLnByZWZpeH0oLis/KSR7dGhpcy5zdWZmaXh9YCksdGhpcy5yZWdleHBVbmVzY2FwZT1lKHRoaXMucmVnZXhwVW5lc2NhcGUsYCR7dGhpcy5wcmVmaXh9JHt0aGlzLnVuZXNjYXBlUHJlZml4fSguKz8pJHt0aGlzLnVuZXNjYXBlU3VmZml4fSR7dGhpcy5zdWZmaXh9YCksdGhpcy5uZXN0aW5nUmVnZXhwPWUodGhpcy5uZXN0aW5nUmVnZXhwLGAke3RoaXMubmVzdGluZ1ByZWZpeH0oLis/KSR7dGhpcy5uZXN0aW5nU3VmZml4fWApfWludGVycG9sYXRlKGUsdCxuLHIpe2xldCBvLGEsaTtjb25zdCBsPXRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24mJnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXN8fHt9O2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUucmVwbGFjZSgvXFwkL2csXCIkJCQkXCIpfWNvbnN0IGM9ZT0+e2lmKGUuaW5kZXhPZih0aGlzLmZvcm1hdFNlcGFyYXRvcik8MCl7Y29uc3Qgbz1ibih0LGwsZSx0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yLHRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlKTtyZXR1cm4gdGhpcy5hbHdheXNGb3JtYXQ/dGhpcy5mb3JtYXQobyx2b2lkIDAsbix7Li4uciwuLi50LGludGVycG9sYXRpb25rZXk6ZX0pOm99Y29uc3Qgbz1lLnNwbGl0KHRoaXMuZm9ybWF0U2VwYXJhdG9yKSxhPW8uc2hpZnQoKS50cmltKCksaT1vLmpvaW4odGhpcy5mb3JtYXRTZXBhcmF0b3IpLnRyaW0oKTtyZXR1cm4gdGhpcy5mb3JtYXQoYm4odCxsLGEsdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcix0aGlzLm9wdGlvbnMuaWdub3JlSlNPTlN0cnVjdHVyZSksaSxuLHsuLi5yLC4uLnQsaW50ZXJwb2xhdGlvbmtleTphfSl9O3RoaXMucmVzZXRSZWdFeHAoKTtjb25zdCB1PXImJnIubWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyfHx0aGlzLm9wdGlvbnMubWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyLGQ9ciYmci5pbnRlcnBvbGF0aW9uJiZ2b2lkIDAhPT1yLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzP3IuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM6dGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzO3JldHVyblt7cmVnZXg6dGhpcy5yZWdleHBVbmVzY2FwZSxzYWZlVmFsdWU6ZT0+cyhlKX0se3JlZ2V4OnRoaXMucmVnZXhwLHNhZmVWYWx1ZTplPT50aGlzLmVzY2FwZVZhbHVlP3ModGhpcy5lc2NhcGUoZSkpOnMoZSl9XS5mb3JFYWNoKCh0PT57Zm9yKGk9MDtvPXQucmVnZXguZXhlYyhlKTspe2NvbnN0IG49b1sxXS50cmltKCk7aWYoYT1jKG4pLHZvaWQgMD09PWEpaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdSl7Y29uc3QgdD11KGUsbyxyKTthPVwic3RyaW5nXCI9PXR5cGVvZiB0P3Q6XCJcIn1lbHNlIGlmKHImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pKWE9XCJcIjtlbHNle2lmKGQpe2E9b1swXTtjb250aW51ZX10aGlzLmxvZ2dlci53YXJuKGBtaXNzZWQgdG8gcGFzcyBpbiB2YXJpYWJsZSAke259IGZvciBpbnRlcnBvbGF0aW5nICR7ZX1gKSxhPVwiXCJ9ZWxzZVwic3RyaW5nXCI9PXR5cGVvZiBhfHx0aGlzLnVzZVJhd1ZhbHVlVG9Fc2NhcGV8fChhPUt0KGEpKTtjb25zdCBsPXQuc2FmZVZhbHVlKGEpO2lmKGU9ZS5yZXBsYWNlKG9bMF0sbCksZD8odC5yZWdleC5sYXN0SW5kZXgrPWEubGVuZ3RoLHQucmVnZXgubGFzdEluZGV4LT1vWzBdLmxlbmd0aCk6dC5yZWdleC5sYXN0SW5kZXg9MCxpKyssaT49dGhpcy5tYXhSZXBsYWNlcylicmVha319KSksZX1uZXN0KGUsdCl7bGV0IG4scixvLGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2Z1bmN0aW9uIGkoZSx0KXtjb25zdCBuPXRoaXMubmVzdGluZ09wdGlvbnNTZXBhcmF0b3I7aWYoZS5pbmRleE9mKG4pPDApcmV0dXJuIGU7Y29uc3Qgcj1lLnNwbGl0KG5ldyBSZWdFeHAoYCR7bn1bIF0qe2ApKTtsZXQgYT1geyR7clsxXX1gO2U9clswXSxhPXRoaXMuaW50ZXJwb2xhdGUoYSxvKTtjb25zdCBpPWEubWF0Y2goLycvZyksbD1hLm1hdGNoKC9cIi9nKTsoaSYmaS5sZW5ndGglMj09MCYmIWx8fGwubGVuZ3RoJTIhPTApJiYoYT1hLnJlcGxhY2UoLycvZywnXCInKSk7dHJ5e289SlNPTi5wYXJzZShhKSx0JiYobz17Li4udCwuLi5vfSl9Y2F0Y2godCl7cmV0dXJuIHRoaXMubG9nZ2VyLndhcm4oYGZhaWxlZCBwYXJzaW5nIG9wdGlvbnMgc3RyaW5nIGluIG5lc3RpbmcgZm9yIGtleSAke2V9YCx0KSxgJHtlfSR7bn0ke2F9YH1yZXR1cm4gZGVsZXRlIG8uZGVmYXVsdFZhbHVlLGV9Zm9yKDtuPXRoaXMubmVzdGluZ1JlZ2V4cC5leGVjKGUpOyl7bGV0IGw9W107bz17Li4uYX0sbz1vLnJlcGxhY2UmJlwic3RyaW5nXCIhPXR5cGVvZiBvLnJlcGxhY2U/by5yZXBsYWNlOm8sby5hcHBseVBvc3RQcm9jZXNzb3I9ITEsZGVsZXRlIG8uZGVmYXVsdFZhbHVlO2xldCBzPSExO2lmKC0xIT09blswXS5pbmRleE9mKHRoaXMuZm9ybWF0U2VwYXJhdG9yKSYmIS97Lip9Ly50ZXN0KG5bMV0pKXtjb25zdCBlPW5bMV0uc3BsaXQodGhpcy5mb3JtYXRTZXBhcmF0b3IpLm1hcCgoZT0+ZS50cmltKCkpKTtuWzFdPWUuc2hpZnQoKSxsPWUscz0hMH1pZihyPXQoaS5jYWxsKHRoaXMsblsxXS50cmltKCksbyksbyksciYmblswXT09PWUmJlwic3RyaW5nXCIhPXR5cGVvZiByKXJldHVybiByO1wic3RyaW5nXCIhPXR5cGVvZiByJiYocj1LdChyKSkscnx8KHRoaXMubG9nZ2VyLndhcm4oYG1pc3NlZCB0byByZXNvbHZlICR7blsxXX0gZm9yIG5lc3RpbmcgJHtlfWApLHI9XCJcIikscyYmKHI9bC5yZWR1Y2UoKChlLHQpPT50aGlzLmZvcm1hdChlLHQsYS5sbmcsey4uLmEsaW50ZXJwb2xhdGlvbmtleTpuWzFdLnRyaW0oKX0pKSxyLnRyaW0oKSkpLGU9ZS5yZXBsYWNlKG5bMF0sciksdGhpcy5yZWdleHAubGFzdEluZGV4PTB9cmV0dXJuIGV9fWZ1bmN0aW9uIHhuKGUpe2NvbnN0IHQ9e307cmV0dXJuIGZ1bmN0aW9uKG4scixvKXtjb25zdCBhPXIrSlNPTi5zdHJpbmdpZnkobyk7bGV0IGk9dFthXTtyZXR1cm4gaXx8KGk9ZShsbihyKSxvKSx0W2FdPWkpLGkobil9fWNsYXNzIGtue2NvbnN0cnVjdG9yKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3RoaXMubG9nZ2VyPVV0LmNyZWF0ZShcImZvcm1hdHRlclwiKSx0aGlzLm9wdGlvbnM9ZSx0aGlzLmZvcm1hdHM9e251bWJlcjp4bigoKGUsdCk9Pntjb25zdCBuPW5ldyBJbnRsLk51bWJlckZvcm1hdChlLHsuLi50fSk7cmV0dXJuIGU9Pm4uZm9ybWF0KGUpfSkpLGN1cnJlbmN5OnhuKCgoZSx0KT0+e2NvbnN0IG49bmV3IEludGwuTnVtYmVyRm9ybWF0KGUsey4uLnQsc3R5bGU6XCJjdXJyZW5jeVwifSk7cmV0dXJuIGU9Pm4uZm9ybWF0KGUpfSkpLGRhdGV0aW1lOnhuKCgoZSx0KT0+e2NvbnN0IG49bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoZSx7Li4udH0pO3JldHVybiBlPT5uLmZvcm1hdChlKX0pKSxyZWxhdGl2ZXRpbWU6eG4oKChlLHQpPT57Y29uc3Qgbj1uZXcgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQoZSx7Li4udH0pO3JldHVybiBlPT5uLmZvcm1hdChlLHQucmFuZ2V8fFwiZGF5XCIpfSkpLGxpc3Q6eG4oKChlLHQpPT57Y29uc3Qgbj1uZXcgSW50bC5MaXN0Rm9ybWF0KGUsey4uLnR9KTtyZXR1cm4gZT0+bi5mb3JtYXQoZSl9KSl9LHRoaXMuaW5pdChlKX1pbml0KGUpe2NvbnN0IHQ9KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7aW50ZXJwb2xhdGlvbjp7fX0pLmludGVycG9sYXRpb247dGhpcy5mb3JtYXRTZXBhcmF0b3I9dC5mb3JtYXRTZXBhcmF0b3I/dC5mb3JtYXRTZXBhcmF0b3I6dC5mb3JtYXRTZXBhcmF0b3J8fFwiLFwifWFkZChlLHQpe3RoaXMuZm9ybWF0c1tlLnRvTG93ZXJDYXNlKCkudHJpbSgpXT10fWFkZENhY2hlZChlLHQpe3RoaXMuZm9ybWF0c1tlLnRvTG93ZXJDYXNlKCkudHJpbSgpXT14bih0KX1mb3JtYXQoZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7fTtyZXR1cm4gdC5zcGxpdCh0aGlzLmZvcm1hdFNlcGFyYXRvcikucmVkdWNlKCgoZSx0KT0+e2NvbnN0e2Zvcm1hdE5hbWU6byxmb3JtYXRPcHRpb25zOmF9PWZ1bmN0aW9uKGUpe2xldCB0PWUudG9Mb3dlckNhc2UoKS50cmltKCk7Y29uc3Qgbj17fTtpZihlLmluZGV4T2YoXCIoXCIpPi0xKXtjb25zdCByPWUuc3BsaXQoXCIoXCIpO3Q9clswXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtjb25zdCBvPXJbMV0uc3Vic3RyaW5nKDAsclsxXS5sZW5ndGgtMSk7XCJjdXJyZW5jeVwiPT09dCYmby5pbmRleE9mKFwiOlwiKTwwP24uY3VycmVuY3l8fChuLmN1cnJlbmN5PW8udHJpbSgpKTpcInJlbGF0aXZldGltZVwiPT09dCYmby5pbmRleE9mKFwiOlwiKTwwP24ucmFuZ2V8fChuLnJhbmdlPW8udHJpbSgpKTpvLnNwbGl0KFwiO1wiKS5mb3JFYWNoKChlPT57aWYoIWUpcmV0dXJuO2NvbnN0W3QsLi4ucl09ZS5zcGxpdChcIjpcIiksbz1yLmpvaW4oXCI6XCIpLnRyaW0oKS5yZXBsYWNlKC9eJyt8JyskL2csXCJcIik7blt0LnRyaW0oKV18fChuW3QudHJpbSgpXT1vKSxcImZhbHNlXCI9PT1vJiYoblt0LnRyaW0oKV09ITEpLFwidHJ1ZVwiPT09byYmKG5bdC50cmltKCldPSEwKSxpc05hTihvKXx8KG5bdC50cmltKCldPXBhcnNlSW50KG8sMTApKX0pKX1yZXR1cm57Zm9ybWF0TmFtZTp0LGZvcm1hdE9wdGlvbnM6bn19KHQpO2lmKHRoaXMuZm9ybWF0c1tvXSl7bGV0IHQ9ZTt0cnl7Y29uc3QgaT1yJiZyLmZvcm1hdFBhcmFtcyYmci5mb3JtYXRQYXJhbXNbci5pbnRlcnBvbGF0aW9ua2V5XXx8e30sbD1pLmxvY2FsZXx8aS5sbmd8fHIubG9jYWxlfHxyLmxuZ3x8bjt0PXRoaXMuZm9ybWF0c1tvXShlLGwsey4uLmEsLi4uciwuLi5pfSl9Y2F0Y2goZSl7dGhpcy5sb2dnZXIud2FybihlKX1yZXR1cm4gdH1yZXR1cm4gdGhpcy5sb2dnZXIud2FybihgdGhlcmUgd2FzIG5vIGZvcm1hdCBmdW5jdGlvbiBmb3IgJHtvfWApLGV9KSxlKX19Y2xhc3MgU24gZXh0ZW5kcyB6dHtjb25zdHJ1Y3RvcihlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O3N1cGVyKCksdGhpcy5iYWNrZW5kPWUsdGhpcy5zdG9yZT10LHRoaXMuc2VydmljZXM9bix0aGlzLmxhbmd1YWdlVXRpbHM9bi5sYW5ndWFnZVV0aWxzLHRoaXMub3B0aW9ucz1yLHRoaXMubG9nZ2VyPVV0LmNyZWF0ZShcImJhY2tlbmRDb25uZWN0b3JcIiksdGhpcy53YWl0aW5nUmVhZHM9W10sdGhpcy5tYXhQYXJhbGxlbFJlYWRzPXIubWF4UGFyYWxsZWxSZWFkc3x8MTAsdGhpcy5yZWFkaW5nQ2FsbHM9MCx0aGlzLm1heFJldHJpZXM9ci5tYXhSZXRyaWVzPj0wP3IubWF4UmV0cmllczo1LHRoaXMucmV0cnlUaW1lb3V0PXIucmV0cnlUaW1lb3V0Pj0xP3IucmV0cnlUaW1lb3V0OjM1MCx0aGlzLnN0YXRlPXt9LHRoaXMucXVldWU9W10sdGhpcy5iYWNrZW5kJiZ0aGlzLmJhY2tlbmQuaW5pdCYmdGhpcy5iYWNrZW5kLmluaXQobixyLmJhY2tlbmQscil9cXVldWVMb2FkKGUsdCxuLHIpe2NvbnN0IG89e30sYT17fSxpPXt9LGw9e307cmV0dXJuIGUuZm9yRWFjaCgoZT0+e2xldCByPSEwO3QuZm9yRWFjaCgodD0+e2NvbnN0IGk9YCR7ZX18JHt0fWA7IW4ucmVsb2FkJiZ0aGlzLnN0b3JlLmhhc1Jlc291cmNlQnVuZGxlKGUsdCk/dGhpcy5zdGF0ZVtpXT0yOnRoaXMuc3RhdGVbaV08MHx8KDE9PT10aGlzLnN0YXRlW2ldP3ZvaWQgMD09PWFbaV0mJihhW2ldPSEwKToodGhpcy5zdGF0ZVtpXT0xLHI9ITEsdm9pZCAwPT09YVtpXSYmKGFbaV09ITApLHZvaWQgMD09PW9baV0mJihvW2ldPSEwKSx2b2lkIDA9PT1sW3RdJiYobFt0XT0hMCkpKX0pKSxyfHwoaVtlXT0hMCl9KSksKE9iamVjdC5rZXlzKG8pLmxlbmd0aHx8T2JqZWN0LmtleXMoYSkubGVuZ3RoKSYmdGhpcy5xdWV1ZS5wdXNoKHtwZW5kaW5nOmEscGVuZGluZ0NvdW50Ok9iamVjdC5rZXlzKGEpLmxlbmd0aCxsb2FkZWQ6e30sZXJyb3JzOltdLGNhbGxiYWNrOnJ9KSx7dG9Mb2FkOk9iamVjdC5rZXlzKG8pLHBlbmRpbmc6T2JqZWN0LmtleXMoYSksdG9Mb2FkTGFuZ3VhZ2VzOk9iamVjdC5rZXlzKGkpLHRvTG9hZE5hbWVzcGFjZXM6T2JqZWN0LmtleXMobCl9fWxvYWRlZChlLHQsbil7Y29uc3Qgcj1lLnNwbGl0KFwifFwiKSxvPXJbMF0sYT1yWzFdO3QmJnRoaXMuZW1pdChcImZhaWxlZExvYWRpbmdcIixvLGEsdCksbiYmdGhpcy5zdG9yZS5hZGRSZXNvdXJjZUJ1bmRsZShvLGEsbiksdGhpcy5zdGF0ZVtlXT10Py0xOjI7Y29uc3QgaT17fTt0aGlzLnF1ZXVlLmZvckVhY2goKG49PnshZnVuY3Rpb24oZSx0LG4scil7Y29uc3R7b2JqOm8sazphfT1ZdChlLHQsT2JqZWN0KTtvW2FdPW9bYV18fFtdLHImJihvW2FdPW9bYV0uY29uY2F0KG4pKSxyfHxvW2FdLnB1c2gobil9KG4ubG9hZGVkLFtvXSxhKSxmdW5jdGlvbihlLHQpe3ZvaWQgMCE9PWUucGVuZGluZ1t0XSYmKGRlbGV0ZSBlLnBlbmRpbmdbdF0sZS5wZW5kaW5nQ291bnQtLSl9KG4sZSksdCYmbi5lcnJvcnMucHVzaCh0KSwwIT09bi5wZW5kaW5nQ291bnR8fG4uZG9uZXx8KE9iamVjdC5rZXlzKG4ubG9hZGVkKS5mb3JFYWNoKChlPT57aVtlXXx8KGlbZV09e30pO2NvbnN0IHQ9bi5sb2FkZWRbZV07dC5sZW5ndGgmJnQuZm9yRWFjaCgodD0+e3ZvaWQgMD09PWlbZV1bdF0mJihpW2VdW3RdPSEwKX0pKX0pKSxuLmRvbmU9ITAsbi5lcnJvcnMubGVuZ3RoP24uY2FsbGJhY2sobi5lcnJvcnMpOm4uY2FsbGJhY2soKSl9KSksdGhpcy5lbWl0KFwibG9hZGVkXCIsaSksdGhpcy5xdWV1ZT10aGlzLnF1ZXVlLmZpbHRlcigoZT0+IWUuZG9uZSkpfXJlYWQoZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLG89YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOnRoaXMucmV0cnlUaW1lb3V0LGE9YXJndW1lbnRzLmxlbmd0aD41P2FyZ3VtZW50c1s1XTp2b2lkIDA7aWYoIWUubGVuZ3RoKXJldHVybiBhKG51bGwse30pO2lmKHRoaXMucmVhZGluZ0NhbGxzPj10aGlzLm1heFBhcmFsbGVsUmVhZHMpcmV0dXJuIHZvaWQgdGhpcy53YWl0aW5nUmVhZHMucHVzaCh7bG5nOmUsbnM6dCxmY05hbWU6bix0cmllZDpyLHdhaXQ6byxjYWxsYmFjazphfSk7dGhpcy5yZWFkaW5nQ2FsbHMrKztjb25zdCBpPShpLGwpPT57aWYodGhpcy5yZWFkaW5nQ2FsbHMtLSx0aGlzLndhaXRpbmdSZWFkcy5sZW5ndGg+MCl7Y29uc3QgZT10aGlzLndhaXRpbmdSZWFkcy5zaGlmdCgpO3RoaXMucmVhZChlLmxuZyxlLm5zLGUuZmNOYW1lLGUudHJpZWQsZS53YWl0LGUuY2FsbGJhY2spfWkmJmwmJnI8dGhpcy5tYXhSZXRyaWVzP3NldFRpbWVvdXQoKCgpPT57dGhpcy5yZWFkLmNhbGwodGhpcyxlLHQsbixyKzEsMipvLGEpfSksbyk6YShpLGwpfSxsPXRoaXMuYmFja2VuZFtuXS5iaW5kKHRoaXMuYmFja2VuZCk7aWYoMiE9PWwubGVuZ3RoKXJldHVybiBsKGUsdCxpKTt0cnl7Y29uc3Qgbj1sKGUsdCk7biYmXCJmdW5jdGlvblwiPT10eXBlb2Ygbi50aGVuP24udGhlbigoZT0+aShudWxsLGUpKSkuY2F0Y2goaSk6aShudWxsLG4pfWNhdGNoKGUpe2koZSl9fXByZXBhcmVMb2FkaW5nKGUsdCl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LHI9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7aWYoIXRoaXMuYmFja2VuZClyZXR1cm4gdGhpcy5sb2dnZXIud2FybihcIk5vIGJhY2tlbmQgd2FzIGFkZGVkIHZpYSBpMThuZXh0LnVzZS4gV2lsbCBub3QgbG9hZCByZXNvdXJjZXMuXCIpLHImJnIoKTtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9dGhpcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeShlKSksXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PVt0XSk7Y29uc3Qgbz10aGlzLnF1ZXVlTG9hZChlLHQsbixyKTtpZighby50b0xvYWQubGVuZ3RoKXJldHVybiBvLnBlbmRpbmcubGVuZ3RofHxyKCksbnVsbDtvLnRvTG9hZC5mb3JFYWNoKChlPT57dGhpcy5sb2FkT25lKGUpfSkpfWxvYWQoZSx0LG4pe3RoaXMucHJlcGFyZUxvYWRpbmcoZSx0LHt9LG4pfXJlbG9hZChlLHQsbil7dGhpcy5wcmVwYXJlTG9hZGluZyhlLHQse3JlbG9hZDohMH0sbil9bG9hZE9uZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06XCJcIjtjb25zdCBuPWUuc3BsaXQoXCJ8XCIpLHI9blswXSxvPW5bMV07dGhpcy5yZWFkKHIsbyxcInJlYWRcIix2b2lkIDAsdm9pZCAwLCgobixhKT0+e24mJnRoaXMubG9nZ2VyLndhcm4oYCR7dH1sb2FkaW5nIG5hbWVzcGFjZSAke299IGZvciBsYW5ndWFnZSAke3J9IGZhaWxlZGAsbiksIW4mJmEmJnRoaXMubG9nZ2VyLmxvZyhgJHt0fWxvYWRlZCBuYW1lc3BhY2UgJHtvfSBmb3IgbGFuZ3VhZ2UgJHtyfWAsYSksdGhpcy5sb2FkZWQoZSxuLGEpfSkpfXNhdmVNaXNzaW5nKGUsdCxuLHIsbyl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0/YXJndW1lbnRzWzVdOnt9LGk9YXJndW1lbnRzLmxlbmd0aD42JiZ2b2lkIDAhPT1hcmd1bWVudHNbNl0/YXJndW1lbnRzWzZdOigpPT57fTtpZih0aGlzLnNlcnZpY2VzLnV0aWxzJiZ0aGlzLnNlcnZpY2VzLnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSYmIXRoaXMuc2VydmljZXMudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlKHQpKXRoaXMubG9nZ2VyLndhcm4oYGRpZCBub3Qgc2F2ZSBrZXkgXCIke259XCIgYXMgdGhlIG5hbWVzcGFjZSBcIiR7dH1cIiB3YXMgbm90IHlldCBsb2FkZWRgLFwiVGhpcyBtZWFucyBzb21ldGhpbmcgSVMgV1JPTkcgaW4geW91ciBzZXR1cC4gWW91IGFjY2VzcyB0aGUgdCBmdW5jdGlvbiBiZWZvcmUgaTE4bmV4dC5pbml0IC8gaTE4bmV4dC5sb2FkTmFtZXNwYWNlIC8gaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSB3YXMgZG9uZS4gV2FpdCBmb3IgdGhlIGNhbGxiYWNrIG9yIFByb21pc2UgdG8gcmVzb2x2ZSBiZWZvcmUgYWNjZXNzaW5nIGl0ISEhXCIpO2Vsc2UgaWYobnVsbCE9biYmXCJcIiE9PW4pe2lmKHRoaXMuYmFja2VuZCYmdGhpcy5iYWNrZW5kLmNyZWF0ZSl7Y29uc3QgbD17Li4uYSxpc1VwZGF0ZTpvfSxzPXRoaXMuYmFja2VuZC5jcmVhdGUuYmluZCh0aGlzLmJhY2tlbmQpO2lmKHMubGVuZ3RoPDYpdHJ5e2xldCBvO289NT09PXMubGVuZ3RoP3MoZSx0LG4scixsKTpzKGUsdCxuLHIpLG8mJlwiZnVuY3Rpb25cIj09dHlwZW9mIG8udGhlbj9vLnRoZW4oKGU9PmkobnVsbCxlKSkpLmNhdGNoKGkpOmkobnVsbCxvKX1jYXRjaChlKXtpKGUpfWVsc2UgcyhlLHQsbixyLGksbCl9ZSYmZVswXSYmdGhpcy5zdG9yZS5hZGRSZXNvdXJjZShlWzBdLHQsbixyKX19fWZ1bmN0aW9uIE9uKCl7cmV0dXJue2RlYnVnOiExLGluaXRJbW1lZGlhdGU6ITAsbnM6W1widHJhbnNsYXRpb25cIl0sZGVmYXVsdE5TOltcInRyYW5zbGF0aW9uXCJdLGZhbGxiYWNrTG5nOltcImRldlwiXSxmYWxsYmFja05TOiExLHN1cHBvcnRlZExuZ3M6ITEsbm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzOiExLGxvYWQ6XCJhbGxcIixwcmVsb2FkOiExLHNpbXBsaWZ5UGx1cmFsU3VmZml4OiEwLGtleVNlcGFyYXRvcjpcIi5cIixuc1NlcGFyYXRvcjpcIjpcIixwbHVyYWxTZXBhcmF0b3I6XCJfXCIsY29udGV4dFNlcGFyYXRvcjpcIl9cIixwYXJ0aWFsQnVuZGxlZExhbmd1YWdlczohMSxzYXZlTWlzc2luZzohMSx1cGRhdGVNaXNzaW5nOiExLHNhdmVNaXNzaW5nVG86XCJmYWxsYmFja1wiLHNhdmVNaXNzaW5nUGx1cmFsczohMCxtaXNzaW5nS2V5SGFuZGxlcjohMSxtaXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXI6ITEscG9zdFByb2Nlc3M6ITEscG9zdFByb2Nlc3NQYXNzUmVzb2x2ZWQ6ITEscmV0dXJuTnVsbDohMSxyZXR1cm5FbXB0eVN0cmluZzohMCxyZXR1cm5PYmplY3RzOiExLGpvaW5BcnJheXM6ITEscmV0dXJuZWRPYmplY3RIYW5kbGVyOiExLHBhcnNlTWlzc2luZ0tleUhhbmRsZXI6ITEsYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5OiExLGFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlOiExLG92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyOmZ1bmN0aW9uKGUpe2xldCB0PXt9O2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlWzFdJiYodD1lWzFdKSxcInN0cmluZ1wiPT10eXBlb2YgZVsxXSYmKHQuZGVmYXVsdFZhbHVlPWVbMV0pLFwic3RyaW5nXCI9PXR5cGVvZiBlWzJdJiYodC50RGVzY3JpcHRpb249ZVsyXSksXCJvYmplY3RcIj09dHlwZW9mIGVbMl18fFwib2JqZWN0XCI9PXR5cGVvZiBlWzNdKXtjb25zdCBuPWVbM118fGVbMl07T2JqZWN0LmtleXMobikuZm9yRWFjaCgoZT0+e3RbZV09bltlXX0pKX1yZXR1cm4gdH0saW50ZXJwb2xhdGlvbjp7ZXNjYXBlVmFsdWU6ITAsZm9ybWF0OmU9PmUscHJlZml4Olwie3tcIixzdWZmaXg6XCJ9fVwiLGZvcm1hdFNlcGFyYXRvcjpcIixcIix1bmVzY2FwZVByZWZpeDpcIi1cIixuZXN0aW5nUHJlZml4OlwiJHQoXCIsbmVzdGluZ1N1ZmZpeDpcIilcIixuZXN0aW5nT3B0aW9uc1NlcGFyYXRvcjpcIixcIixtYXhSZXBsYWNlczoxZTMsc2tpcE9uVmFyaWFibGVzOiEwfX19ZnVuY3Rpb24gTW4oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUubnMmJihlLm5zPVtlLm5zXSksXCJzdHJpbmdcIj09dHlwZW9mIGUuZmFsbGJhY2tMbmcmJihlLmZhbGxiYWNrTG5nPVtlLmZhbGxiYWNrTG5nXSksXCJzdHJpbmdcIj09dHlwZW9mIGUuZmFsbGJhY2tOUyYmKGUuZmFsbGJhY2tOUz1bZS5mYWxsYmFja05TXSksZS5zdXBwb3J0ZWRMbmdzJiZlLnN1cHBvcnRlZExuZ3MuaW5kZXhPZihcImNpbW9kZVwiKTwwJiYoZS5zdXBwb3J0ZWRMbmdzPWUuc3VwcG9ydGVkTG5ncy5jb25jYXQoW1wiY2ltb2RlXCJdKSksZX1mdW5jdGlvbiBMbigpe31jbGFzcyBfbiBleHRlbmRzIHp0e2NvbnN0cnVjdG9yKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7dmFyIG47aWYoc3VwZXIoKSx0aGlzLm9wdGlvbnM9TW4oZSksdGhpcy5zZXJ2aWNlcz17fSx0aGlzLmxvZ2dlcj1VdCx0aGlzLm1vZHVsZXM9e2V4dGVybmFsOltdfSxuPXRoaXMsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pKS5mb3JFYWNoKChlPT57XCJmdW5jdGlvblwiPT10eXBlb2YgbltlXSYmKG5bZV09bltlXS5iaW5kKG4pKX0pKSx0JiYhdGhpcy5pc0luaXRpYWxpemVkJiYhZS5pc0Nsb25lKXtpZighdGhpcy5vcHRpb25zLmluaXRJbW1lZGlhdGUpcmV0dXJuIHRoaXMuaW5pdChlLHQpLHRoaXM7c2V0VGltZW91dCgoKCk9Pnt0aGlzLmluaXQoZSx0KX0pLDApfX1pbml0KCl7dmFyIGU9dGhpcztsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sbj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYobj10LHQ9e30pLCF0LmRlZmF1bHROUyYmITEhPT10LmRlZmF1bHROUyYmdC5ucyYmKFwic3RyaW5nXCI9PXR5cGVvZiB0Lm5zP3QuZGVmYXVsdE5TPXQubnM6dC5ucy5pbmRleE9mKFwidHJhbnNsYXRpb25cIik8MCYmKHQuZGVmYXVsdE5TPXQubnNbMF0pKTtjb25zdCByPU9uKCk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZT9cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP25ldyBlOmU6bnVsbH1pZih0aGlzLm9wdGlvbnM9ey4uLnIsLi4udGhpcy5vcHRpb25zLC4uLk1uKHQpfSxcInYxXCIhPT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQSSYmKHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uPXsuLi5yLmludGVycG9sYXRpb24sLi4udGhpcy5vcHRpb25zLmludGVycG9sYXRpb259KSx2b2lkIDAhPT10LmtleVNlcGFyYXRvciYmKHRoaXMub3B0aW9ucy51c2VyRGVmaW5lZEtleVNlcGFyYXRvcj10LmtleVNlcGFyYXRvciksdm9pZCAwIT09dC5uc1NlcGFyYXRvciYmKHRoaXMub3B0aW9ucy51c2VyRGVmaW5lZE5zU2VwYXJhdG9yPXQubnNTZXBhcmF0b3IpLCF0aGlzLm9wdGlvbnMuaXNDbG9uZSl7bGV0IHQ7dGhpcy5tb2R1bGVzLmxvZ2dlcj9VdC5pbml0KG8odGhpcy5tb2R1bGVzLmxvZ2dlciksdGhpcy5vcHRpb25zKTpVdC5pbml0KG51bGwsdGhpcy5vcHRpb25zKSx0aGlzLm1vZHVsZXMuZm9ybWF0dGVyP3Q9dGhpcy5tb2R1bGVzLmZvcm1hdHRlcjpcInVuZGVmaW5lZFwiIT10eXBlb2YgSW50bCYmKHQ9a24pO2NvbnN0IG49bmV3IGZuKHRoaXMub3B0aW9ucyk7dGhpcy5zdG9yZT1uZXcgc24odGhpcy5vcHRpb25zLnJlc291cmNlcyx0aGlzLm9wdGlvbnMpO2NvbnN0IGE9dGhpcy5zZXJ2aWNlczthLmxvZ2dlcj1VdCxhLnJlc291cmNlU3RvcmU9dGhpcy5zdG9yZSxhLmxhbmd1YWdlVXRpbHM9bixhLnBsdXJhbFJlc29sdmVyPW5ldyB3bihuLHtwcmVwZW5kOnRoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3IsY29tcGF0aWJpbGl0eUpTT046dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OLHNpbXBsaWZ5UGx1cmFsU3VmZml4OnRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeH0pLCF0fHx0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQmJnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdCE9PXIuaW50ZXJwb2xhdGlvbi5mb3JtYXR8fChhLmZvcm1hdHRlcj1vKHQpLGEuZm9ybWF0dGVyLmluaXQoYSx0aGlzLm9wdGlvbnMpLHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdD1hLmZvcm1hdHRlci5mb3JtYXQuYmluZChhLmZvcm1hdHRlcikpLGEuaW50ZXJwb2xhdG9yPW5ldyB5bih0aGlzLm9wdGlvbnMpLGEudXRpbHM9e2hhc0xvYWRlZE5hbWVzcGFjZTp0aGlzLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKHRoaXMpfSxhLmJhY2tlbmRDb25uZWN0b3I9bmV3IFNuKG8odGhpcy5tb2R1bGVzLmJhY2tlbmQpLGEucmVzb3VyY2VTdG9yZSxhLHRoaXMub3B0aW9ucyksYS5iYWNrZW5kQ29ubmVjdG9yLm9uKFwiKlwiLChmdW5jdGlvbih0KXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShuPjE/bi0xOjApLG89MTtvPG47bysrKXJbby0xXT1hcmd1bWVudHNbb107ZS5lbWl0KHQsLi4ucil9KSksdGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3ImJihhLmxhbmd1YWdlRGV0ZWN0b3I9byh0aGlzLm1vZHVsZXMubGFuZ3VhZ2VEZXRlY3RvciksYS5sYW5ndWFnZURldGVjdG9yLmluaXQmJmEubGFuZ3VhZ2VEZXRlY3Rvci5pbml0KGEsdGhpcy5vcHRpb25zLmRldGVjdGlvbix0aGlzLm9wdGlvbnMpKSx0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdCYmKGEuaTE4bkZvcm1hdD1vKHRoaXMubW9kdWxlcy5pMThuRm9ybWF0KSxhLmkxOG5Gb3JtYXQuaW5pdCYmYS5pMThuRm9ybWF0LmluaXQodGhpcykpLHRoaXMudHJhbnNsYXRvcj1uZXcgZG4odGhpcy5zZXJ2aWNlcyx0aGlzLm9wdGlvbnMpLHRoaXMudHJhbnNsYXRvci5vbihcIipcIiwoZnVuY3Rpb24odCl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4xP24tMTowKSxvPTE7bzxuO28rKylyW28tMV09YXJndW1lbnRzW29dO2UuZW1pdCh0LC4uLnIpfSkpLHRoaXMubW9kdWxlcy5leHRlcm5hbC5mb3JFYWNoKChlPT57ZS5pbml0JiZlLmluaXQodGhpcyl9KSl9aWYodGhpcy5mb3JtYXQ9dGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZm9ybWF0LG58fChuPUxuKSx0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcmJiF0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3ImJiF0aGlzLm9wdGlvbnMubG5nKXtjb25zdCBlPXRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyk7ZS5sZW5ndGg+MCYmXCJkZXZcIiE9PWVbMF0mJih0aGlzLm9wdGlvbnMubG5nPWVbMF0pfXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvcnx8dGhpcy5vcHRpb25zLmxuZ3x8dGhpcy5sb2dnZXIud2FybihcImluaXQ6IG5vIGxhbmd1YWdlRGV0ZWN0b3IgaXMgdXNlZCBhbmQgbm8gbG5nIGlzIGRlZmluZWRcIik7W1wiZ2V0UmVzb3VyY2VcIixcImhhc1Jlc291cmNlQnVuZGxlXCIsXCJnZXRSZXNvdXJjZUJ1bmRsZVwiLFwiZ2V0RGF0YUJ5TGFuZ3VhZ2VcIl0uZm9yRWFjaCgodD0+e3RoaXNbdF09ZnVuY3Rpb24oKXtyZXR1cm4gZS5zdG9yZVt0XSguLi5hcmd1bWVudHMpfX0pKTtbXCJhZGRSZXNvdXJjZVwiLFwiYWRkUmVzb3VyY2VzXCIsXCJhZGRSZXNvdXJjZUJ1bmRsZVwiLFwicmVtb3ZlUmVzb3VyY2VCdW5kbGVcIl0uZm9yRWFjaCgodD0+e3RoaXNbdF09ZnVuY3Rpb24oKXtyZXR1cm4gZS5zdG9yZVt0XSguLi5hcmd1bWVudHMpLGV9fSkpO2NvbnN0IGE9R3QoKSxpPSgpPT57Y29uc3QgZT0oZSx0KT0+e3RoaXMuaXNJbml0aWFsaXplZCYmIXRoaXMuaW5pdGlhbGl6ZWRTdG9yZU9uY2UmJnRoaXMubG9nZ2VyLndhcm4oXCJpbml0OiBpMThuZXh0IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuIFlvdSBzaG91bGQgY2FsbCBpbml0IGp1c3Qgb25jZSFcIiksdGhpcy5pc0luaXRpYWxpemVkPSEwLHRoaXMub3B0aW9ucy5pc0Nsb25lfHx0aGlzLmxvZ2dlci5sb2coXCJpbml0aWFsaXplZFwiLHRoaXMub3B0aW9ucyksdGhpcy5lbWl0KFwiaW5pdGlhbGl6ZWRcIix0aGlzLm9wdGlvbnMpLGEucmVzb2x2ZSh0KSxuKGUsdCl9O2lmKHRoaXMubGFuZ3VhZ2VzJiZcInYxXCIhPT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQSSYmIXRoaXMuaXNJbml0aWFsaXplZClyZXR1cm4gZShudWxsLHRoaXMudC5iaW5kKHRoaXMpKTt0aGlzLmNoYW5nZUxhbmd1YWdlKHRoaXMub3B0aW9ucy5sbmcsZSl9O3JldHVybiB0aGlzLm9wdGlvbnMucmVzb3VyY2VzfHwhdGhpcy5vcHRpb25zLmluaXRJbW1lZGlhdGU/aSgpOnNldFRpbWVvdXQoaSwwKSxhfWxvYWRSZXNvdXJjZXMoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOkxuO2NvbnN0IG49XCJzdHJpbmdcIj09dHlwZW9mIGU/ZTp0aGlzLmxhbmd1YWdlO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJih0PWUpLCF0aGlzLm9wdGlvbnMucmVzb3VyY2VzfHx0aGlzLm9wdGlvbnMucGFydGlhbEJ1bmRsZWRMYW5ndWFnZXMpe2lmKG4mJlwiY2ltb2RlXCI9PT1uLnRvTG93ZXJDYXNlKCkmJighdGhpcy5vcHRpb25zLnByZWxvYWR8fDA9PT10aGlzLm9wdGlvbnMucHJlbG9hZC5sZW5ndGgpKXJldHVybiB0KCk7Y29uc3QgZT1bXSxyPXQ9PntpZighdClyZXR1cm47aWYoXCJjaW1vZGVcIj09PXQpcmV0dXJuO3RoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkodCkuZm9yRWFjaCgodD0+e1wiY2ltb2RlXCIhPT10JiZlLmluZGV4T2YodCk8MCYmZS5wdXNoKHQpfSkpfTtpZihuKXIobik7ZWxzZXt0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpLmZvckVhY2goKGU9PnIoZSkpKX10aGlzLm9wdGlvbnMucHJlbG9hZCYmdGhpcy5vcHRpb25zLnByZWxvYWQuZm9yRWFjaCgoZT0+cihlKSkpLHRoaXMuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5sb2FkKGUsdGhpcy5vcHRpb25zLm5zLChlPT57ZXx8dGhpcy5yZXNvbHZlZExhbmd1YWdlfHwhdGhpcy5sYW5ndWFnZXx8dGhpcy5zZXRSZXNvbHZlZExhbmd1YWdlKHRoaXMubGFuZ3VhZ2UpLHQoZSl9KSl9ZWxzZSB0KG51bGwpfXJlbG9hZFJlc291cmNlcyhlLHQsbil7Y29uc3Qgcj1HdCgpO3JldHVybiBlfHwoZT10aGlzLmxhbmd1YWdlcyksdHx8KHQ9dGhpcy5vcHRpb25zLm5zKSxufHwobj1MbiksdGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLnJlbG9hZChlLHQsKGU9PntyLnJlc29sdmUoKSxuKGUpfSkpLHJ9dXNlKGUpe2lmKCFlKXRocm93IG5ldyBFcnJvcihcIllvdSBhcmUgcGFzc2luZyBhbiB1bmRlZmluZWQgbW9kdWxlISBQbGVhc2UgY2hlY2sgdGhlIG9iamVjdCB5b3UgYXJlIHBhc3NpbmcgdG8gaTE4bmV4dC51c2UoKVwiKTtpZighZS50eXBlKXRocm93IG5ldyBFcnJvcihcIllvdSBhcmUgcGFzc2luZyBhIHdyb25nIG1vZHVsZSEgUGxlYXNlIGNoZWNrIHRoZSBvYmplY3QgeW91IGFyZSBwYXNzaW5nIHRvIGkxOG5leHQudXNlKClcIik7cmV0dXJuXCJiYWNrZW5kXCI9PT1lLnR5cGUmJih0aGlzLm1vZHVsZXMuYmFja2VuZD1lKSwoXCJsb2dnZXJcIj09PWUudHlwZXx8ZS5sb2cmJmUud2FybiYmZS5lcnJvcikmJih0aGlzLm1vZHVsZXMubG9nZ2VyPWUpLFwibGFuZ3VhZ2VEZXRlY3RvclwiPT09ZS50eXBlJiYodGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3I9ZSksXCJpMThuRm9ybWF0XCI9PT1lLnR5cGUmJih0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdD1lKSxcInBvc3RQcm9jZXNzb3JcIj09PWUudHlwZSYmY24uYWRkUG9zdFByb2Nlc3NvcihlKSxcImZvcm1hdHRlclwiPT09ZS50eXBlJiYodGhpcy5tb2R1bGVzLmZvcm1hdHRlcj1lKSxcIjNyZFBhcnR5XCI9PT1lLnR5cGUmJnRoaXMubW9kdWxlcy5leHRlcm5hbC5wdXNoKGUpLHRoaXN9c2V0UmVzb2x2ZWRMYW5ndWFnZShlKXtpZihlJiZ0aGlzLmxhbmd1YWdlcyYmIShbXCJjaW1vZGVcIixcImRldlwiXS5pbmRleE9mKGUpPi0xKSlmb3IobGV0IGU9MDtlPHRoaXMubGFuZ3VhZ2VzLmxlbmd0aDtlKyspe2NvbnN0IHQ9dGhpcy5sYW5ndWFnZXNbZV07aWYoIShbXCJjaW1vZGVcIixcImRldlwiXS5pbmRleE9mKHQpPi0xKSYmdGhpcy5zdG9yZS5oYXNMYW5ndWFnZVNvbWVUcmFuc2xhdGlvbnModCkpe3RoaXMucmVzb2x2ZWRMYW5ndWFnZT10O2JyZWFrfX19Y2hhbmdlTGFuZ3VhZ2UoZSx0KXt2YXIgbj10aGlzO3RoaXMuaXNMYW5ndWFnZUNoYW5naW5nVG89ZTtjb25zdCByPUd0KCk7dGhpcy5lbWl0KFwibGFuZ3VhZ2VDaGFuZ2luZ1wiLGUpO2NvbnN0IG89ZT0+e3RoaXMubGFuZ3VhZ2U9ZSx0aGlzLmxhbmd1YWdlcz10aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGUpLHRoaXMucmVzb2x2ZWRMYW5ndWFnZT12b2lkIDAsdGhpcy5zZXRSZXNvbHZlZExhbmd1YWdlKGUpfSxhPShlLGEpPT57YT8obyhhKSx0aGlzLnRyYW5zbGF0b3IuY2hhbmdlTGFuZ3VhZ2UoYSksdGhpcy5pc0xhbmd1YWdlQ2hhbmdpbmdUbz12b2lkIDAsdGhpcy5lbWl0KFwibGFuZ3VhZ2VDaGFuZ2VkXCIsYSksdGhpcy5sb2dnZXIubG9nKFwibGFuZ3VhZ2VDaGFuZ2VkXCIsYSkpOnRoaXMuaXNMYW5ndWFnZUNoYW5naW5nVG89dm9pZCAwLHIucmVzb2x2ZSgoZnVuY3Rpb24oKXtyZXR1cm4gbi50KC4uLmFyZ3VtZW50cyl9KSksdCYmdChlLChmdW5jdGlvbigpe3JldHVybiBuLnQoLi4uYXJndW1lbnRzKX0pKX0saT10PT57ZXx8dHx8IXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvcnx8KHQ9W10pO2NvbnN0IG49XCJzdHJpbmdcIj09dHlwZW9mIHQ/dDp0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0QmVzdE1hdGNoRnJvbUNvZGVzKHQpO24mJih0aGlzLmxhbmd1YWdlfHxvKG4pLHRoaXMudHJhbnNsYXRvci5sYW5ndWFnZXx8dGhpcy50cmFuc2xhdG9yLmNoYW5nZUxhbmd1YWdlKG4pLHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciYmdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmNhY2hlVXNlckxhbmd1YWdlJiZ0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuY2FjaGVVc2VyTGFuZ3VhZ2UobikpLHRoaXMubG9hZFJlc291cmNlcyhuLChlPT57YShlLG4pfSkpfTtyZXR1cm4gZXx8IXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvcnx8dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmFzeW5jPyFlJiZ0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3ImJnRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5hc3luYz8wPT09dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdC5sZW5ndGg/dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdCgpLnRoZW4oaSk6dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdChpKTppKGUpOmkodGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdCgpKSxyfWdldEZpeGVkVChlLHQsbil7dmFyIHI9dGhpcztjb25zdCBvPWZ1bmN0aW9uKGUsdCl7bGV0IGE7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHQpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGk+Mj9pLTI6MCkscz0yO3M8aTtzKyspbFtzLTJdPWFyZ3VtZW50c1tzXTthPXIub3B0aW9ucy5vdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlcihbZSx0XS5jb25jYXQobCkpfWVsc2UgYT17Li4udH07YS5sbmc9YS5sbmd8fG8ubG5nLGEubG5ncz1hLmxuZ3N8fG8ubG5ncyxhLm5zPWEubnN8fG8ubnMsYS5rZXlQcmVmaXg9YS5rZXlQcmVmaXh8fG58fG8ua2V5UHJlZml4O2NvbnN0IGM9ci5vcHRpb25zLmtleVNlcGFyYXRvcnx8XCIuXCI7bGV0IHU7cmV0dXJuIHU9YS5rZXlQcmVmaXgmJkFycmF5LmlzQXJyYXkoZSk/ZS5tYXAoKGU9PmAke2Eua2V5UHJlZml4fSR7Y30ke2V9YCkpOmEua2V5UHJlZml4P2Ake2Eua2V5UHJlZml4fSR7Y30ke2V9YDplLHIudCh1LGEpfTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT9vLmxuZz1lOm8ubG5ncz1lLG8ubnM9dCxvLmtleVByZWZpeD1uLG99dCgpe3JldHVybiB0aGlzLnRyYW5zbGF0b3ImJnRoaXMudHJhbnNsYXRvci50cmFuc2xhdGUoLi4uYXJndW1lbnRzKX1leGlzdHMoKXtyZXR1cm4gdGhpcy50cmFuc2xhdG9yJiZ0aGlzLnRyYW5zbGF0b3IuZXhpc3RzKC4uLmFyZ3VtZW50cyl9c2V0RGVmYXVsdE5hbWVzcGFjZShlKXt0aGlzLm9wdGlvbnMuZGVmYXVsdE5TPWV9aGFzTG9hZGVkTmFtZXNwYWNlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighdGhpcy5pc0luaXRpYWxpemVkKXJldHVybiB0aGlzLmxvZ2dlci53YXJuKFwiaGFzTG9hZGVkTmFtZXNwYWNlOiBpMThuZXh0IHdhcyBub3QgaW5pdGlhbGl6ZWRcIix0aGlzLmxhbmd1YWdlcyksITE7aWYoIXRoaXMubGFuZ3VhZ2VzfHwhdGhpcy5sYW5ndWFnZXMubGVuZ3RoKXJldHVybiB0aGlzLmxvZ2dlci53YXJuKFwiaGFzTG9hZGVkTmFtZXNwYWNlOiBpMThuLmxhbmd1YWdlcyB3ZXJlIHVuZGVmaW5lZCBvciBlbXB0eVwiLHRoaXMubGFuZ3VhZ2VzKSwhMTtjb25zdCBuPXQubG5nfHx0aGlzLnJlc29sdmVkTGFuZ3VhZ2V8fHRoaXMubGFuZ3VhZ2VzWzBdLHI9ISF0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyxvPXRoaXMubGFuZ3VhZ2VzW3RoaXMubGFuZ3VhZ2VzLmxlbmd0aC0xXTtpZihcImNpbW9kZVwiPT09bi50b0xvd2VyQ2FzZSgpKXJldHVybiEwO2NvbnN0IGE9KGUsdCk9Pntjb25zdCBuPXRoaXMuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5zdGF0ZVtgJHtlfXwke3R9YF07cmV0dXJuLTE9PT1ufHwyPT09bn07aWYodC5wcmVjaGVjayl7Y29uc3QgZT10LnByZWNoZWNrKHRoaXMsYSk7aWYodm9pZCAwIT09ZSlyZXR1cm4gZX1yZXR1cm4hIXRoaXMuaGFzUmVzb3VyY2VCdW5kbGUobixlKXx8KCEodGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLmJhY2tlbmQmJighdGhpcy5vcHRpb25zLnJlc291cmNlc3x8dGhpcy5vcHRpb25zLnBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzKSl8fCEoIWEobixlKXx8ciYmIWEobyxlKSkpfWxvYWROYW1lc3BhY2VzKGUsdCl7Y29uc3Qgbj1HdCgpO3JldHVybiB0aGlzLm9wdGlvbnMubnM/KFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1bZV0pLGUuZm9yRWFjaCgoZT0+e3RoaXMub3B0aW9ucy5ucy5pbmRleE9mKGUpPDAmJnRoaXMub3B0aW9ucy5ucy5wdXNoKGUpfSkpLHRoaXMubG9hZFJlc291cmNlcygoZT0+e24ucmVzb2x2ZSgpLHQmJnQoZSl9KSksbik6KHQmJnQoKSxQcm9taXNlLnJlc29sdmUoKSl9bG9hZExhbmd1YWdlcyhlLHQpe2NvbnN0IG49R3QoKTtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W2VdKTtjb25zdCByPXRoaXMub3B0aW9ucy5wcmVsb2FkfHxbXSxvPWUuZmlsdGVyKChlPT5yLmluZGV4T2YoZSk8MCkpO3JldHVybiBvLmxlbmd0aD8odGhpcy5vcHRpb25zLnByZWxvYWQ9ci5jb25jYXQobyksdGhpcy5sb2FkUmVzb3VyY2VzKChlPT57bi5yZXNvbHZlKCksdCYmdChlKX0pKSxuKToodCYmdCgpLFByb21pc2UucmVzb2x2ZSgpKX1kaXIoZSl7aWYoZXx8KGU9dGhpcy5yZXNvbHZlZExhbmd1YWdlfHwodGhpcy5sYW5ndWFnZXMmJnRoaXMubGFuZ3VhZ2VzLmxlbmd0aD4wP3RoaXMubGFuZ3VhZ2VzWzBdOnRoaXMubGFuZ3VhZ2UpKSwhZSlyZXR1cm5cInJ0bFwiO2NvbnN0IHQ9dGhpcy5zZXJ2aWNlcyYmdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzfHxuZXcgZm4oT24oKSk7cmV0dXJuW1wiYXJcIixcInNodVwiLFwic3FyXCIsXCJzc2hcIixcInhhYVwiLFwieWhkXCIsXCJ5dWRcIixcImFhb1wiLFwiYWJoXCIsXCJhYnZcIixcImFjbVwiLFwiYWNxXCIsXCJhY3dcIixcImFjeFwiLFwiYWN5XCIsXCJhZGZcIixcImFkc1wiLFwiYWViXCIsXCJhZWNcIixcImFmYlwiLFwiYWpwXCIsXCJhcGNcIixcImFwZFwiLFwiYXJiXCIsXCJhcnFcIixcImFyc1wiLFwiYXJ5XCIsXCJhcnpcIixcImF1elwiLFwiYXZsXCIsXCJheWhcIixcImF5bFwiLFwiYXluXCIsXCJheXBcIixcImJielwiLFwicGdhXCIsXCJoZVwiLFwiaXdcIixcInBzXCIsXCJwYnRcIixcInBidVwiLFwicHN0XCIsXCJwcnBcIixcInByZFwiLFwidWdcIixcInVyXCIsXCJ5ZGRcIixcInlkc1wiLFwieWloXCIsXCJqaVwiLFwieWlcIixcImhib1wiLFwibWVuXCIsXCJ4bW5cIixcImZhXCIsXCJqcHJcIixcInBlb1wiLFwicGVzXCIsXCJwcnNcIixcImR2XCIsXCJzYW1cIixcImNrYlwiXS5pbmRleE9mKHQuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSkpPi0xfHxlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcIi1hcmFiXCIpPjE/XCJydGxcIjpcImx0clwifXN0YXRpYyBjcmVhdGVJbnN0YW5jZSgpe3JldHVybiBuZXcgX24oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX1jbG9uZUluc3RhbmNlKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOkxuO2NvbnN0IG49ZS5mb3JrUmVzb3VyY2VTdG9yZTtuJiZkZWxldGUgZS5mb3JrUmVzb3VyY2VTdG9yZTtjb25zdCByPXsuLi50aGlzLm9wdGlvbnMsLi4uZSxpc0Nsb25lOiEwfSxvPW5ldyBfbihyKTt2b2lkIDA9PT1lLmRlYnVnJiZ2b2lkIDA9PT1lLnByZWZpeHx8KG8ubG9nZ2VyPW8ubG9nZ2VyLmNsb25lKGUpKTtyZXR1cm5bXCJzdG9yZVwiLFwic2VydmljZXNcIixcImxhbmd1YWdlXCJdLmZvckVhY2goKGU9PntvW2VdPXRoaXNbZV19KSksby5zZXJ2aWNlcz17Li4udGhpcy5zZXJ2aWNlc30sby5zZXJ2aWNlcy51dGlscz17aGFzTG9hZGVkTmFtZXNwYWNlOm8uaGFzTG9hZGVkTmFtZXNwYWNlLmJpbmQobyl9LG4mJihvLnN0b3JlPW5ldyBzbih0aGlzLnN0b3JlLmRhdGEsciksby5zZXJ2aWNlcy5yZXNvdXJjZVN0b3JlPW8uc3RvcmUpLG8udHJhbnNsYXRvcj1uZXcgZG4oby5zZXJ2aWNlcyxyKSxvLnRyYW5zbGF0b3Iub24oXCIqXCIsKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtvLmVtaXQoZSwuLi5uKX0pKSxvLmluaXQocix0KSxvLnRyYW5zbGF0b3Iub3B0aW9ucz1yLG8udHJhbnNsYXRvci5iYWNrZW5kQ29ubmVjdG9yLnNlcnZpY2VzLnV0aWxzPXtoYXNMb2FkZWROYW1lc3BhY2U6by5oYXNMb2FkZWROYW1lc3BhY2UuYmluZChvKX0sb310b0pTT04oKXtyZXR1cm57b3B0aW9uczp0aGlzLm9wdGlvbnMsc3RvcmU6dGhpcy5zdG9yZSxsYW5ndWFnZTp0aGlzLmxhbmd1YWdlLGxhbmd1YWdlczp0aGlzLmxhbmd1YWdlcyxyZXNvbHZlZExhbmd1YWdlOnRoaXMucmVzb2x2ZWRMYW5ndWFnZX19fWNvbnN0IFBuPV9uLmNyZWF0ZUluc3RhbmNlKCk7UG4uY3JlYXRlSW5zdGFuY2U9X24uY3JlYXRlSW5zdGFuY2U7UG4uY3JlYXRlSW5zdGFuY2UsUG4uZGlyLFBuLmluaXQsUG4ubG9hZFJlc291cmNlcyxQbi5yZWxvYWRSZXNvdXJjZXMsUG4udXNlLFBuLmNoYW5nZUxhbmd1YWdlLFBuLmdldEZpeGVkVCxQbi50LFBuLmV4aXN0cyxQbi5zZXREZWZhdWx0TmFtZXNwYWNlLFBuLmhhc0xvYWRlZE5hbWVzcGFjZSxQbi5sb2FkTmFtZXNwYWNlcyxQbi5sb2FkTGFuZ3VhZ2VzO2NvbnN0IEVuPUpTT04ucGFyc2UoJ3tcImNvbnRleHRNZW51Lm5ld1dpbmRvd1wiOlwi5paw5bu656qX5Y+jXCIsXCJjb250ZXh0TWVudS5uZXdQYWdlXCI6XCLmlrDlu7rpobXpnaJcIixcImNvbnRleHRNZW51LnJlc3RvcmVcIjpcIui/mOWOn+WIsOS4iuasoeS/neWtmOeahOabtOaUuVwiLFwiY29udGV4dE1lbnUuc3dpdGNoV29ya3NwYWNlXCI6XCLliIfmjaLlt6XkvZzljLpcIixcImNvbnRleHRNZW51LmFwcGVhcmFuY2VcIjpcIuWkluinglwiLFwiY29udGV4dE1lbnUuc2F2ZVdvcmtzcGFjZVwiOlwi5L+d5a2Y5bel5L2c5Yy6XCIsXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlQXNcIjpcIuWwhuW3peS9nOWMuuWPpuWtmOS4ui4uLlwiLFwiY29udGV4dE1lbnUucmVuYW1lV29ya3NwYWNlXCI6XCLph43lkb3lkI3lt6XkvZzljLpcIixcImNvbnRleHRNZW51LmRlbGV0ZVdvcmtzcGFjZVwiOlwi5Yig6Zmk5bel5L2c5Yy6XCIsXCJjb250ZXh0TWVudS5kb3dubG9hZHNcIjpcIuS4i+i9vVwiLFwiY29udGV4dE1lbnUuc2F2ZVBhZ2VcIjpcIuS/neWtmOmhtemdolwiLFwiY29udGV4dE1lbnUuc2F2ZVBhZ2VBc1wiOlwi5bCG6aG16Z2i5Y+m5a2Y5Li6Li4uXCIsXCJjb250ZXh0TWVudS5wcmludFwiOlwi5omT5Y2wLi4uXCIsXCJjb250ZXh0TWVudS5wcmludFNjcmVlblwiOlwi5omT5Y2w5bGP5bmVXCIsXCJjb250ZXh0TWVudS5jbG9zZVdpbmRvd1wiOlwi5YWz6Zet56qX5Y+jXCIsXCJjb250ZXh0TWVudS5vcGVuU3RvcmVmcm9udFwiOlwi5byA5pS+5byP5bqX6Z2iXCIsXCJjb250ZXh0TWVudS5xdWl0UGxhdGZvcm1cIjpcIumAgOWHuuW5s+WPsFwiLFwiY29udGV4dE1lbnUubmV3Vmlld1wiOlwi5paw5bu66KeG5Zu+XCIsXCJjb250ZXh0TWVudS5vcGVuVmlld1wiOlwi5L2/55So6buY6K6kIFdlYiDmtY/op4jlmajmiZPlvIDop4blm75cIixcImNvbnRleHRNZW51Lm9wZW5WaWV3c1wiOlwi5L2/55So6buY6K6kIFdlYiDmtY/op4jlmajmiZPlvIDop4blm75cIixcImNvbnRleHRNZW51LnJlbG9hZFwiOlwiUmVsb2FkIENOXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3XCI6XCLph43mlrDliqDovb3op4blm75cIixcImNvbnRleHRNZW51LnJlbG9hZFZpZXdzXCI6XCLph43mlrDliqDovb3op4blm75cIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVwiOlwiRHVwbGljYXRlIENOXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVWaWV3XCI6XCLlpI3liLbop4blm75cIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVZpZXdzXCI6XCLlpI3liLbop4blm75cIixcImNvbnRleHRNZW51LmFkZFZpZXdcIjpcIuWwhuinhuWbvua3u+WKoOWIsOmikemBk1wiLFwiY29udGV4dE1lbnUuYWRkVmlld3NcIjpcIuWwhuinhuWbvua3u+WKoOWIsOmikemBk1wiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld1wiOlwi5LuO6aKR6YGT5Lit56e76Zmk6KeG5Zu+XCIsXCJjb250ZXh0TWVudS5yZW1vdmVWaWV3c1wiOlwi5LuO6aKR6YGT5Lit56e76Zmk6KeG5Zu+XCIsXCJjb250ZXh0TWVudS5jbG9zZVZpZXdcIjpcIuWFs+mXreinhuWbvlwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3c1wiOlwi5YWz6Zet6KeG5Zu+XCIsXCJjb250ZXh0TWVudS5jbG9zZVRhYlwiOlwiQ2xvc2UgVGFiIENOXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVQYWdlXCI6XCLlpI3liLbpobXpnaJcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRcIjpcIuaJk+WNsFwiLFwiY29udGV4dE1lbnUuc3VibWVudS5wcmludEFsbFwiOlwi5YWo6YOo5omT5Y2wXCIsXCJzYXZlTWVudS5zYXZlV29ya3NwYWNlQXNcIjpcIuWwhuW3peS9nOWMuuWPpuWtmOS4ulwiLFwic2F2ZU1lbnUuc2F2ZVBhZ2VBc1wiOlwi5bCG6aG16Z2i5Y+m5a2Y5Li6XCIsXCJzYXZlTW9kYWwuZW50ZXJWYWx1ZVwiOlwiUGxlYXNlIGVudGVyIGEgdmFsdWUgQ05cIixcInNhdmVNb2RhbC5hbHJlYWR5RXhpc3RzXCI6XCJ7e3RpdGxlfX0g5bey5a2Y5Zyo44CCXCIsXCJzYXZlTW9kYWwucGxlYXNlRW50ZXJWYWxpZE5hbWVcIjpcIuivt+i+k+WFpeacieaViOWQjeensFwiLFwic2F2ZU1vZGFsLnJlbmFtZVBhZ2VcIjpcIumHjeaWsOWRveWQjemhtemdolwiLFwic2F2ZU1vZGFsLmNsb3NlUGFnZVwiOlwi5YWz6Zet6aG16Z2iXCIsXCJzYXZlTW9kYWwuZGlzY2FyZENoYW5nZXNcIjpcIuaUvuW8g+abtOaUuVwiLFwic2F2ZU1vZGFsLmRpc2NhcmRBbGxcIjpcIuWFqOmDqOaUvuW8g1wiLFwic2F2ZU1vZGFsLnNhdmVBbGxcIjpcIuWFqOmDqOS/neWtmFwiLFwic2F2ZU1vZGFsLnNhdmVQYWdlc0NvdW50XCI6XCLlhbPpl63liY3kv53lrZggKHt7Y291bnR9fSkg5Liq6aG16Z2i77yfXCIsXCJkZWZhdWx0UGFnZVRpdGxlXCI6XCJVbnRpdGxlZCBQYWdlIENOXCIsXCJlbnRlcnByaXNlRGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgU3VwZXJ0YWIgQ05cIixcImFkZE5ld1BhZ2VcIjpcIk5ldyBQYWdlIENOXCIsXCJhZGROZXdUYWJcIjpcIua3u+WKoOaWsOmAiemhueWNoVwiLFwiYWRkTmV3Vmlld1wiOlwi5paw5bu66KeG5Zu+XCIsXCJyZXN0b3JlTW9kYWxcIjpcIuaCqOehruWumuimgei/mOWOn+WIsOS4iuasoeS/neWtmOeahOabtOaUueWQl++8n1wiLFwibW9kYWwuZGlzY2FyZFdhcm5pbmdcIjpcIuS7u+S9leacquS/neWtmOeahOabtOaUuemDveWwhuS4ouWksVwiLFwibW9kYWwuZGlzY2FyZFBhZ2VXYXJuaW5nXCI6XCLlr7nmraTpobXnmoTku7vkvZXmnKrkv53lrZjnmoTmm7TmlLnpg73lsIbkuKLlpLHjgIJcIixcIm1vZGFsLnNhdmVDaGFuZ2VzUHJvbXB0XCI6XCLlhbPpl63liY3kv53lrZjmm7TmlLnvvJ9cIixcIm1vZGFsLnBhZ2VDbG9zZVwiOlwiUGFnZSBDbG9zZSBDTlwiLFwic3dpdGNoV29ya3NwYWNlTW9kYWxcIjpcIuaCqOehruWumuimgeWIh+aNouWIsCB7e3dvcmtzcGFjZX19IOWQl++8n1wiLFwic3dpdGNoV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi5Lu75L2V5pyq5L+d5a2Y55qE5pu05pS56YO95bCG5Lii5aSxXCIsXCJkZWxldGVXb3Jrc3BhY2VNb2RhbFwiOlwi5oKo56Gu5a6a6KaB5rC45LmF5Yig6Zmk5q2k5bel5L2c5Yy65ZCX77yfXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi5ZCN56ew5Li6IHt7d29ya3NwYWNlfX0g55qE5bel5L2c5Yy65bey5a2Y5Zyo44CC5oKo5piv5ZCm6KaB5pu/5o2i5a6D77yfXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZy5ib2R5XCI6XCLlt7LlrZjlnKjlkIzlkI3nmoTlt6XkvZzljLrjgILmm7/mjaLlroPlsIbopobnm5blhbblvZPliY3lhoXlrrnjgIJcIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC5yZXBsYWNlXCI6XCLmm7/mjaJcIixcImNsb3NlUGxhdGZvcm1cIjpcIuWFs+mXreW5s+WPsFwiLFwiY2xvc2VQbGF0Zm9ybS53b3Jrc3BhY2VcIjpcIuWFs+mXrSB7e3dvcmtzcGFjZX19IOW5s+WPsFwiLFwiY2xvc2VQbGF0Zm9ybS53YXJuaW5nXCI6XCLlhbPpl63lubPlj7DlsIblhbPpl63miYDmnInlt6XkvZzljLrjgIHlupTnlKjmiJbku7vkvZXmraPlnKjov5DooYznmoTov5vnqIvjgIJcIixcImJhY2tcIjpcIuWQjumAgFwiLFwiZm9yd2FyZFwiOlwi5YmN6L+bXCIsXCJyZWxvYWRcIjpcIumHjeaWsOWKoOi9vVwiLFwiZ3JlZW5cIjpcIue7v+iJslwiLFwicHVycGxlXCI6XCLntKvoibJcIixcIm9yYW5nZVwiOlwi5qmZ6ImyXCIsXCJyZWRcIjpcIue6ouiJslwiLFwicGlua1wiOlwi57KJ57qi6ImyXCIsXCJ5ZWxsb3dcIjpcIum7hOiJslwiLFwidGhlbWUubGlnaHRcIjpcIua1heiJslwiLFwidGhlbWUuZGFya1wiOlwi5rex6ImyXCIsXCJ0aGVtZS5zeXN0ZW1cIjpcIuS4juaTjeS9nOezu+e7n+iuvue9ruWQjOatpVwiLFwidG9vbGJhci5oaWRlVGFic1wiOlwi6ZqQ6JeP6YCJ6aG55Y2hXCIsXCJ0b29sYmFyLnNob3dUYWJzXCI6XCLmmL7npLrpgInpobnljaFcIixcInRvb2xiYXIubG9ja1wiOlwi6ZSB5a6aXCIsXCJ0b29sYmFyLnVubG9ja1wiOlwi6Kej6ZSBXCIsXCJ0b29sYmFyLmNvbG9yTGlua2luZ1wiOlwi6aKc6Imy6ZO+5o6lXCIsXCJ0b29sYmFyLmNoYW5nZUxheW91dFwiOlwi5pu05pS55biD5bGAXCIsXCJ0b29sYmFyLnNhdmVNZW51XCI6XCLkv53lrZjoj5zljZVcIixcInRvb2xiYXIubWF4aW1pemVXaW5kb3dcIjpcIuacgOWkp+WMlueql+WPo1wiLFwidG9vbGJhci5yZXN0b3JlV2luZG93XCI6XCLov5jljp/nqpflj6NcIixcInRvb2xiYXIubWluaW1pemVXaW5kb3dcIjpcIuacgOWwj+WMlueql+WPo1wiLFwiY2hhbmdlTGF5b3V0LmZ1bGxXaWR0aFwiOlwi5YWo5a69XCIsXCJjaGFuZ2VMYXlvdXQuY29sdW1uc1wiOlwi5YiX5pWwXCIsXCJjaGFuZ2VMYXlvdXQuUm93c1wiOlwi6KGM5pWwXCIsXCJjaGFuZ2VMYXlvdXQuR3JpZFwiOlwi572R5qC8XCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVN3aXRjaGVkXCI6XCLlt7LliIfmjaLlt6XkvZzljLpcIixcInN1Y2Nlc3NJbmRpY2F0b3IuaGlkZGVuXCI6XCLpgInpobnljaHlt7LpmpDol49cIixcInN1Y2Nlc3NJbmRpY2F0b3Iuc2hvd25cIjpcIumAiemhueWNoeW3suaYvuekulwiLFwic3VjY2Vzc0luZGljYXRvci5sb2NrZWRcIjpcIumhtemdouW3sumUgeWumlwiLFwic3VjY2Vzc0luZGljYXRvci51bmxvY2tlZFwiOlwi6aG16Z2i5bey6Kej6ZSBXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkXCI6XCLlt6XkvZzljLrlt7Lkv53lrZhcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRBc1wiOlwi5bel5L2c5Yy65bey5Y+m5a2Y5Li6IHt7d29ya3NwYWNlfX1cIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlUmVuYW1lZFwiOlwi5bel5L2c5Yy65bey6YeN5ZG95ZCNXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VTYXZlZFwiOlwi6aG16Z2i5bey5L+d5a2YXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBoYXMgYmVlbiBzYXZlZC4gQ05cIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUNvcHlTYXZlZFwiOlwi6aG16Z2i5bey5Y+m5a2Y5Li6IHt7dGl0bGV9fVwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlUmVuYW1lZFwiOlwi6aG16Z2i5bey6YeN5ZG95ZCNXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmNvbnRleHRHcm91cEFwcGxpZWRcIjpcIuW3suW6lOeUqOS4iuS4i+aWh+e7hFwiLFwic3VjY2Vzc0luZGljYXRvci5uYW1lZENvbnRleHRHcm91cEFwcGxpZWRcIjpcIuW3suW6lOeUqCB7e2NvbG9yTmFtZX19IOS4iuS4i+aWh+e7hFwiLFwic3VjY2Vzc0luZGljYXRvci52aWV3UmVtb3ZlZFwiOlwi5LuO5LiK5LiL5paH57uE5Lit56e76Zmk6KeG5Zu+XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdzUmVtb3ZlZFwiOlwi5LuO5LiK5LiL5paH57uE5Lit56e76Zmk6KeG5Zu+XCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxheW91dEFwcGxpZWRcIjpcIuW3suW6lOeUqCB7e2xheW91dE5hbWV9fSDluIPlsYBcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlRGVsZXRlZFwiOlwi5bel5L2c5Yy65bey5Yig6ZmkXCIsXCJlcnJvckluZGljYXRvci5wYWdlU2F2ZUZhaWxlZFwiOlwi6aG16Z2i5L+d5a2Y5aSx6LSlXCIsXCJlcnJvckluZGljYXRvci53b3Jrc3BhY2VTYXZlRmFpbGVkXCI6XCLlt6XkvZzljLrkv53lrZjlpLHotKVcIixcImVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlUGFnZVwiOlwi5aSN5Yi26aG16Z2i5aSx6LSlXCIsXCJpbmZvSW5kaWNhdG9yLmNvbG9yTGlua0F0dGVtcHRcIjpcIuaIkeS7rOWwneivleWvueatpOmAiemhueWNoei/m+ihjOminOiJsumTvuaOpe+8jOS9hue9keermS/lhoXlrrnmiYDmnInogIXlsJrmnKrlkK/nlKjor6Xlip/og71cIixcImdsb2JhbC5jYW5jZWxcIjpcIuWPlua2iFwiLFwiZ2xvYmFsLmNvbmZpcm1cIjpcIuehruiupFwiLFwiZ2xvYmFsLnNhdmVcIjpcIuS/neWtmFwiLFwiZ2xvYmFsLmRlbGV0ZVwiOlwiRGVsZXRlIENOXCIsXCJhcHBSZXN1bHRzLmhlYWRlclwiOlwiRmVhdHVyZWQgQ29udGVudCBDTlwiLFwicmVjZW50bHlWaXNpdGVkLmhlYWRlclwiOlwiUmVjZW50bHkgdmlzaXRlZCBDTlwiLFwibGFuZGluZ1BhZ2Uuc3ViaGVhZGVyXCI6XCJBcHBzIGFuZCB3ZWJzaXRlcyBzZWxlY3RlZCBieSBhbiBhZG1pbiB3aWxsIHNob3cgaGVyZSBDTlwiLFwiYXJpYS5vcGVuQnJvd3NlclwiOlwi5omT5byA5rWP6KeI5Zmo6I+c5Y2VXCIsXCJhcmlhLmJyb3dzZXJUYWJzXCI6XCLmtY/op4jlmajpgInpobnljaFcIixcImFyaWEudmlld1RhYlwiOlwi5p+l55yLIHt7dGl0bGV9fSDnmoTpgInpobnljaFcIixcImFyaWEuY2xvc2VQYWdlXCI6XCLlhbPpl60ge3t0aXRsZX19IOeahOmhtemdoumAiemhueWNoeaMiemSrlwiLFwiYXJpYS5jbG9zZVRhYlwiOlwi5YWz6Zet6YCJ6aG55Y2hIHt7dGl0bGV9fVwiLFwiYXJpYS50aXRsZVwiOlwi5qCH6aKYXCIsXCJhcmlhLmNsb3NlQ29udGV4dEdyb3VwXCI6XCLkvb/nlKjovazkuYnlhbPpl63kuIrkuIvmlofnu4TpgInmi6nlr7nor53moYZcIixcImFyaWEuY29sb3JMaW5raW5nXCI6XCLmmL7npLrmiJbpmpDol4/popzoibLpk77mjqVcIixcImFyaWEuYXBwbHlDb2xvckxpbmtpbmdcIjpcIuivt+mAieaLqeS4gOS4quinhuWbvuS7peW6lOeUqOminOiJsumTvuaOpVwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld1wiOlwi5YiG6YWN57uZIHt7bmFtZX19IOS4iuS4i+aWh+e7hOeahOW9k+WJjeinhuWbvlwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld3NcIjpcIuWIhumFjee7mSB7e25hbWV9fSDkuIrkuIvmlofnu4TnmoTlvZPliY3op4blm75cIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld1wiOlwi5bCG5rS75Yqo6KeG5Zu+6K6+572u5Li6IHt7bmFtZX19IOS4iuS4i+aWh+e7hFwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3c1wiOlwi5bCG5rS75Yqo6KeG5Zu+6K6+572u5Li6IHt7bmFtZX19IOS4iuS4i+aWh+e7hFwiLFwiYXJpYS5lc2NhcGVMYXlvdXREaWFsb2dcIjpcIuS9v+eUqOi9rOS5ieWFs+mXreabtOaUueW4g+WxgOWvueivneahhlwiLFwiZ2xvYmFsLnN1cGVydGFiXCI6XCJTdXBlcnRhYiBDTlwiLFwiZ2xvYmFsLnRhYlwiOlwiVGFiIENOXCIsXCJib29rbWFya3MuZWRpdEJvb2ttYXJrXCI6XCJFZGl0IEJvb2ttYXJrIENOXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFwiOlwiQm9va21hcmsgYWRkZWQgQ05cIixcImJvb2ttYXJrcy5kb25lXCI6XCJEb25lIENOXCIsXCJib29rbWFya3MucmVtb3ZlXCI6XCJSZW1vdmUgQ05cIixcImJvb2ttYXJrcy5ib29rbWFya3NQYW5lbFwiOlwiQm9va21hcmtzIFBhbmVsIENOXCIsXCJib29rbWFya3MuY2xvc2VQYW5lbFwiOlwiQ2xvc2UgQm9va21hcmtzIFBhbmVsIENOXCIsXCJib29rbWFya3MuYm9va21hcmtzXCI6XCJCb29rbWFya3MgQ05cIixcImJvb2ttYXJrcy5hbGxCb29rbWFya3NcIjpcIkFsbCBCb29rbWFya3MgQ05cIixcImJvb2ttYXJrcy5mYXZvcml0ZXNcIjpcIkZhdm9yaXRlcyBDTlwiLFwiYm9va21hcmtzLnNlYXJjaEJvb2ttYXJrc1wiOlwiU2VhcmNoIEJvb2ttYXJrcyBDTlwiLFwiYm9va21hcmtzLmNsZWFyU2VhcmNoSW5wdXRcIjpcIkNsZWFyIFNlYXJjaCBJbnB1dCBDTlwiLFwiYm9va21hcmtzLmNyZWF0ZUZvbGRlclwiOlwiQ3JlYXRlIE5ldyBGb2xkZXIgQ05cIixcImJvb2ttYXJrcy5leGl0Rm9sZGVyXCI6XCJFeGl0IEZvbGRlciBDTlwiLFwiYm9va21hcmtzLm5ld0ZvbGRlclwiOlwiTmV3IEZvbGRlciBDTlwiLFwiYm9va21hcmtzLm5hbWVkRm9sZGVyXCI6XCJ7e25hbWV9fSBGb2xkZXIgQ05cIixcImJvb2ttYXJrcy5ib29rbWFya1NldHRpbmdzXCI6XCJ7e25hbWV9fSBCb29rbWFyayBTZXR0aW5ncyBDTlwiLFwiYm9va21hcmtzLmZvbGRlclNldHRpbmdzXCI6XCJ7e25hbWV9fSBGb2xkZXIgU2V0dGluZ3MgQ05cIixcImJvb2ttYXJrcy5ub1Jlc3VsdHNGb3VuZFwiOlwiTm8gcmVzdWx0cyBmb3VuZCBDTlwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kU3VidGV4dFwiOlwiVGhlcmUgYXJlIG5vIGJvb2ttYXJrcyB0aGF0IG1hdGNoIHlvdXIgc2VhcmNoIENOXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1wiOlwiTm90aGluZyB0byBzaG93IHlldCBDTlwiLFwiYm9va21hcmtzLm5vdGhpbmdUb1Nob3dTdWJ0ZXh0XCI6XCJBZGQgYSBib29rbWFyayB0byB0aGlzIGZvbGRlciBDTlwiLFwiYm9va21hcmtzLnJlc3VsdHNGb3VuZEluXCI6XCJSZXN1bHRzIGZvdW5kIGluIHt7bmFtZX19IENOXCIsXCJib29rbWFya3MucmVzdWx0c0luT3RoZXJGb2xkZXJzXCI6XCJSZXN1bHRzIGZvdW5kIGluIG90aGVyIGZvbGRlcnMgQ05cIixcImJvb2ttYXJrcy5hbGxSZXN1bHRzRm91bmRJblwiOlwiQWxsIHJlc3VsdHMgZm91bmQgaW4gQ05cIixcImJvb2ttYXJrcy5lZGl0TmFtZVwiOlwiRWRpdCBOYW1lIENOXCIsXCJib29rbWFya3MubW92ZVwiOlwiTW92ZSBDTlwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUaXRsZVwiOlwiQm9va21hcmsgQWRkZWQgQ05cIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkVG9Gb2xkZXJcIjpcIllvdXIgYm9va21hcmsgd2FzIGFkZGVkIHRvIFxcXFxcInt7Zm9sZGVyTmFtZX19XFxcXFwiIENOXCIsXCJib29rbWFya3MuYm9va21hcmtFZGl0ZWRUaXRsZVwiOlwiQm9va21hcmsgRWRpdGVkIENOXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiXCI6XCJTYXZlIFN1cGVydGFiIENOXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcIlNhdmUgU3VwZXJ0YWIgQXMuLi4gQ05cIixcImVudGVycHJpc2VDb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBDTlwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgU3VwZXJ0YWIgQ05cIixcImVudGVycHJpc2VDb250ZXh0TWVudS5uZXdUYWJcIjpcIk5ldyBUYWIgQ05cIixcImVudGVycHJpc2VTYXZlTWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBcyBDTlwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5yZW5hbWVTdXBlcnRhYlwiOlwiUmVuYW1lIENOXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnVuc2F2ZWRDaGFuZ2VzXCI6XCJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhpcyBUYWIuIENOXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlVGFiXCI6XCJDbG9zZSBUYWIgQ05cIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VTdXBlcnRhYlwiOlwiQ2xvc2UgU3VwZXJ0YWIgQ05cIixcImVudGVycHJpc2VTYXZlTW9kYWwuc2F2ZVN1cGVydGFiQ291bnRcIjpcIlNhdmUge3tjb3VudH19IFN1cGVydGFicyBiZWZvcmUgY2xvc2luZz8gQ05cIixcImVudGVycHJpc2VNb2RhbC5kaXNjYXJkU3VwZXJ0YWJXYXJuaW5nXCI6XCJBbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHRoaXMgU3VwZXJ0YWIgd2lsbCBiZSBsb3N0LiBDTlwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgdGhlIFxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYj8gQ05cIixcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYldhcm5pbmdcIjpcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBTdXBlcnRhYj8gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZSBhbmQgaXMgcGVybWFuZW50LiBDTlwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJTYXZlZFwiOlwiU3VwZXJ0YWIgU2F2ZWQgQ05cIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlblNhdmVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gc2F2ZWQuIENOXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkRlbGV0ZWRcIjpcIlN1cGVydGFiIERlbGV0ZWQgQ05cIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlbkRlbGV0ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYiBoYXMgYmVlbiBkZWxldGVkLiBDTlwiLFwiZW50ZXJwcmlzZUVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlVGFiXCI6XCJGYWlsZWQgdG8gZHVwbGljYXRlIFRhYiBDTlwiLFwiZW50ZXJwcmlzZUVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlU3VwZXJ0YWJcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgU3VwZXJ0YWIgQ05cIixcImVudGVycHJpc2VDb21tYW5kQmFyLnN3aXRjaFRvU3VwZXJ0YWJcIjpcIlN3aXRjaCB0byBTdXBlcnRhYiBDTlwiLFwiZW50ZXJwcmlzZUNvbW1hbmRCYXIuZ29Ub1wiOlwiR28gdG8ge3t0eXBlfX0gQ05cIixcImNvbnRleHRNZW51LnF1aXRFbnRlcnByaXNlQnJvd3NlclwiOlwiUXVpdCBDTlwifScpLGpuPUpTT04ucGFyc2UoJ3tcImNvbnRleHRNZW51Lm5ld1dpbmRvd1wiOlwi5paw6KaW56qXXCIsXCJjb250ZXh0TWVudS5uZXdQYWdlXCI6XCLmlrDpoIHpnaJcIixcImNvbnRleHRNZW51LnJlc3RvcmVcIjpcIumChOWOn+WIsOS4iuasoeWEsuWtmOeahOiuiuabtFwiLFwiY29udGV4dE1lbnUuc3dpdGNoV29ya3NwYWNlXCI6XCLliIfmj5vlt6XkvZznqbrplpNcIixcImNvbnRleHRNZW51LmFwcGVhcmFuY2VcIjpcIuWkluingFwiLFwiY29udGV4dE1lbnUuc2F2ZVdvcmtzcGFjZVwiOlwi5YSy5a2Y5bel5L2c56m66ZaTXCIsXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlQXNcIjpcIuWwh+W3peS9nOepuumWk+WPpuWtmOeCui4uLlwiLFwiY29udGV4dE1lbnUucmVuYW1lV29ya3NwYWNlXCI6XCLph43mlrDlkb3lkI3lt6XkvZznqbrplpNcIixcImNvbnRleHRNZW51LmRlbGV0ZVdvcmtzcGFjZVwiOlwi5Yiq6Zmk5bel5L2c56m66ZaTXCIsXCJjb250ZXh0TWVudS5kb3dubG9hZHNcIjpcIuS4i+i8iVwiLFwiY29udGV4dE1lbnUuc2F2ZVBhZ2VcIjpcIuWEsuWtmOmggemdolwiLFwiY29udGV4dE1lbnUuc2F2ZVBhZ2VBc1wiOlwi5bCH6aCB6Z2i5Y+m5a2Y54K6Li4uXCIsXCJjb250ZXh0TWVudS5wcmludFwiOlwi5YiX5Y2wLi4uXCIsXCJjb250ZXh0TWVudS5wcmludFNjcmVlblwiOlwi5pO35Y+W55Wr6Z2iXCIsXCJjb250ZXh0TWVudS5jbG9zZVdpbmRvd1wiOlwi6Zec6ZaJ6KaW56qXXCIsXCJjb250ZXh0TWVudS5vcGVuU3RvcmVmcm9udFwiOlwi5omT6ZaLIFN0b3JlZnJvbnRcIixcImNvbnRleHRNZW51LnF1aXRQbGF0Zm9ybVwiOlwi6YCA5Ye65bmz5Y+wXCIsXCJjb250ZXh0TWVudS5uZXdWaWV3XCI6XCLmlrDoppblnJZcIixcImNvbnRleHRNZW51Lm9wZW5WaWV3XCI6XCLkvb/nlKjpoJDoqK3ntrLpoIHngI/opr3lmajmiZPplovoppblnJZcIixcImNvbnRleHRNZW51Lm9wZW5WaWV3c1wiOlwi5L2/55So6aCQ6Kit57ay6aCB54CP6Ka95Zmo5omT6ZaL6KaW5ZyWXCIsXCJjb250ZXh0TWVudS5yZWxvYWRcIjpcIlJlbG9hZCBaSFwiLFwiY29udGV4dE1lbnUucmVsb2FkVmlld1wiOlwi6YeN5paw6LyJ5YWl6KaW5ZyWXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3c1wiOlwi6YeN5paw6LyJ5YWl6KaW5ZyWXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBaSFwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld1wiOlwi6KSH5a+r6KaW5ZyWXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVWaWV3c1wiOlwi6KSH5a+r6KaW5ZyWXCIsXCJjb250ZXh0TWVudS5hZGRWaWV3XCI6XCLlsIfoppblnJbmlrDlop7oh7PpoLvpgZNcIixcImNvbnRleHRNZW51LmFkZFZpZXdzXCI6XCLlsIfoppblnJbmlrDlop7oh7PpoLvpgZNcIixcImNvbnRleHRNZW51LnJlbW92ZVZpZXdcIjpcIuW+numgu+mBk+S4reenu+mZpOimluWcllwiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld3NcIjpcIuW+numgu+mBk+S4reenu+mZpOimluWcllwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3XCI6XCLpl5zplonoppblnJZcIixcImNvbnRleHRNZW51LmNsb3NlVmlld3NcIjpcIumXnOmWieimluWcllwiLFwiY29udGV4dE1lbnUuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiBaSFwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlUGFnZVwiOlwi6KSH5a+r6aCB6Z2iXCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50XCI6XCLliJfljbBcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRBbGxcIjpcIuWIl+WNsOWFqOmDqFwiLFwic2F2ZU1lbnUuc2F2ZVdvcmtzcGFjZUFzXCI6XCLlsIflt6XkvZznqbrplpPlj6blrZjngrpcIixcInNhdmVNZW51LnNhdmVQYWdlQXNcIjpcIumggemdouWPpuWtmOeCulwiLFwic2F2ZU1vZGFsLmVudGVyVmFsdWVcIjpcIlBsZWFzZSBlbnRlciBhIHZhbHVlIFpIXCIsXCJzYXZlTW9kYWwuYWxyZWFkeUV4aXN0c1wiOlwie3t0aXRsZX19IOW3sue2k+WtmOWcqOOAglwiLFwic2F2ZU1vZGFsLnBsZWFzZUVudGVyVmFsaWROYW1lXCI6XCLoq4vovLjlhaXkuIDlgIvmnInmlYjnmoTlkI3nqLFcIixcInNhdmVNb2RhbC5yZW5hbWVQYWdlXCI6XCLph43mlrDlkb3lkI3poIHpnaJcIixcInNhdmVNb2RhbC5jbG9zZVBhZ2VcIjpcIumXnOmWiemggemdolwiLFwic2F2ZU1vZGFsLmRpc2NhcmRDaGFuZ2VzXCI6XCLmjajmo4Torormm7RcIixcInNhdmVNb2RhbC5kaXNjYXJkQWxsXCI6XCLlhajpg6jmjajmo4RcIixcInNhdmVNb2RhbC5zYXZlQWxsXCI6XCLlhLLlrZjlhajpg6hcIixcInNhdmVNb2RhbC5zYXZlUGFnZXNDb3VudFwiOlwi6KaB5YWI5YSy5a2YICh7e2NvdW50fX0pIOWAi+mggemdouWGjemXnOmWieWXju+8n1wiLFwiZGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgUGFnZSBaSFwiLFwiZW50ZXJwcmlzZURlZmF1bHRQYWdlVGl0bGVcIjpcIlVudGl0bGVkIFN1cGVydGFiIFpIXCIsXCJhZGROZXdQYWdlXCI6XCJOZXcgUGFnZSBaSFwiLFwiYWRkTmV3VGFiXCI6XCLmlrDlop7mlrDntKLlvJXmqJnnsaRcIixcImFkZE5ld1ZpZXdcIjpcIuaWsOimluWcllwiLFwicmVzdG9yZU1vZGFsXCI6XCLmgqjnorrlrpropoHpgoTljp/liLDkuIrmrKHlhLLlrZjnmoTorormm7Tll47vvJ9cIixcIm1vZGFsLmRpc2NhcmRXYXJuaW5nXCI6XCLku7vkvZXmnKrlhLLlrZjnmoTorormm7Tpg73lsIfooqvmjajmo4RcIixcIm1vZGFsLmRpc2NhcmRQYWdlV2FybmluZ1wiOlwi5Zyo5q2k6aCB6Z2i5Lu75L2V5pyq5YSy5a2Y55qE6K6K5pu06YO95bCH6YG65aSx44CCXCIsXCJtb2RhbC5zYXZlQ2hhbmdlc1Byb21wdFwiOlwi6KaB5YWI5YSy5a2Y6K6K5pu05YaN6Zec6ZaJ5ZeO77yfXCIsXCJtb2RhbC5wYWdlQ2xvc2VcIjpcIlBhZ2UgQ2xvc2UgWkhcIixcInN3aXRjaFdvcmtzcGFjZU1vZGFsXCI6XCLmgqjnorrlrpropoHliIfmj5vliLAge3t3b3Jrc3BhY2V9fe+8n1wiLFwic3dpdGNoV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi5Lu75L2V5pyq5YSy5a2Y55qE6K6K5pu06YO95bCH6KKr5o2o5qOEXCIsXCJkZWxldGVXb3Jrc3BhY2VNb2RhbFwiOlwi5oKo56K65a6a6KaB5rC45LmF5Yiq6Zmk5q2k5bel5L2c56m66ZaT5ZeO77yfXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi5YW35pyJ5ZCN56ixIHt7d29ya3NwYWNlfX0g55qE5bel5L2c56m66ZaT5bey57aT5a2Y5Zyo44CC5L2g6KaB5pu05o+b5a6D5ZeO77yfXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZy5ib2R5XCI6XCLnm7jlkIzlkI3nqLHnmoTlt6XkvZznqbrplpPlt7LntpPlrZjlnKjjgILmm7Tmj5vlroPlvozvvIzlsIfmnIPopobok4vnm67liY3lhaflrrnjgIJcIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC5yZXBsYWNlXCI6XCLmm7Tmj5tcIixcImNsb3NlUGxhdGZvcm1cIjpcIumXnOmWieW5s+WPsFwiLFwiY2xvc2VQbGF0Zm9ybS53b3Jrc3BhY2VcIjpcIumXnOmWiSB7e3dvcmtzcGFjZX19IOW5s+WPsFwiLFwiY2xvc2VQbGF0Zm9ybS53YXJuaW5nXCI6XCLpl5zplonlubPlj7DlvozvvIzlsIfpl5zplonmraPlnKjln7fooYznmoTku7vkvZXlt6XkvZznqbrplpPjgIFBUFAg5oiW5rWB56iL44CCXCIsXCJiYWNrXCI6XCLkuIrkuIDpoIFcIixcImZvcndhcmRcIjpcIuS4i+S4gOmggVwiLFwicmVsb2FkXCI6XCLph43mlrDovInlhaVcIixcImdyZWVuXCI6XCLntqBcIixcInB1cnBsZVwiOlwi57SrXCIsXCJvcmFuZ2VcIjpcIuapmFwiLFwicmVkXCI6XCLntIXoibJcIixcInBpbmtcIjpcIueyiee0hVwiLFwieWVsbG93XCI6XCLpu4NcIixcInRoZW1lLmxpZ2h0XCI6XCLmt7pcIixcInRoZW1lLmRhcmtcIjpcIua3sVwiLFwidGhlbWUuc3lzdGVtXCI6XCLoiIcgT1Mg6Kit5a6a5ZCM5q2lXCIsXCJ0b29sYmFyLmhpZGVUYWJzXCI6XCLpmrHol4/ntKLlvJXmqJnnsaRcIixcInRvb2xiYXIuc2hvd1RhYnNcIjpcIumhr+ekuue0ouW8leaomeexpFwiLFwidG9vbGJhci5sb2NrXCI6XCLkuIrpjpZcIixcInRvb2xiYXIudW5sb2NrXCI6XCLop6PpjpZcIixcInRvb2xiYXIuY29sb3JMaW5raW5nXCI6XCLpoY/oibLpgKPntZBcIixcInRvb2xiYXIuY2hhbmdlTGF5b3V0XCI6XCLorormm7TniYjpnaJcIixcInRvb2xiYXIuc2F2ZU1lbnVcIjpcIuWEsuWtmOmBuOWWrlwiLFwidG9vbGJhci5tYXhpbWl6ZVdpbmRvd1wiOlwi5pyA5aSn5YyW6KaW56qXXCIsXCJ0b29sYmFyLnJlc3RvcmVXaW5kb3dcIjpcIumChOWOn+imlueql1wiLFwidG9vbGJhci5taW5pbWl6ZVdpbmRvd1wiOlwi5pyA5bCP5YyW6KaW56qXXCIsXCJjaGFuZ2VMYXlvdXQuZnVsbFdpZHRoXCI6XCLlhajonqLluZXlr6zluqZcIixcImNoYW5nZUxheW91dC5jb2x1bW5zXCI6XCLooYxcIixcImNoYW5nZUxheW91dC5Sb3dzXCI6XCLliJdcIixcImNoYW5nZUxheW91dC5HcmlkXCI6XCLntrLmoLxcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU3dpdGNoZWRcIjpcIuW3peS9nOepuumWk+W3suWIh+aPm1wiLFwic3VjY2Vzc0luZGljYXRvci5oaWRkZW5cIjpcIue0ouW8leaomeexpOW3sumaseiXj1wiLFwic3VjY2Vzc0luZGljYXRvci5zaG93blwiOlwi57Si5byV5qiZ57Gk5bey6aGv56S6XCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxvY2tlZFwiOlwi6aCB6Z2i5bey5LiK6Y6WXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnVubG9ja2VkXCI6XCLpoIHpnaLlt7Lop6PpjpZcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRcIjpcIuW3peS9nOepuumWk+W3suWEsuWtmFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTYXZlZEFzXCI6XCLlt6XkvZznqbrplpPlt7Llj6blrZjngroge3t3b3Jrc3BhY2V9fVwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VSZW5hbWVkXCI6XCLlt6XkvZznqbrplpPlt7Lph43mlrDlkb3lkI1cIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVNhdmVkXCI6XCLpoIHpnaLlt7LlhLLlrZhcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUhhc0JlZW5TYXZlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIGhhcyBiZWVuIHNhdmVkLiBaSFwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlQ29weVNhdmVkXCI6XCLpoIHpnaLlt7Llj6blrZjngroge3t0aXRsZX19XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VSZW5hbWVkXCI6XCLpoIHpnaLlt7Lph43mlrDlkb3lkI1cIixcInN1Y2Nlc3NJbmRpY2F0b3IuY29udGV4dEdyb3VwQXBwbGllZFwiOlwi6ISI57Wh576k57WE5bey5aWX55SoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLm5hbWVkQ29udGV4dEdyb3VwQXBwbGllZFwiOlwie3tjb2xvck5hbWV9fSDohIjntaHnvqTntYTlt7LlpZfnlKhcIixcInN1Y2Nlc3NJbmRpY2F0b3Iudmlld1JlbW92ZWRcIjpcIuW+nuiEiOe1oee+pOe1hOS4reenu+mZpOeahOimluWcllwiLFwic3VjY2Vzc0luZGljYXRvci52aWV3c1JlbW92ZWRcIjpcIuW+nuiEiOe1oee+pOe1hOS4reenu+mZpOeahOimluWcllwiLFwic3VjY2Vzc0luZGljYXRvci5sYXlvdXRBcHBsaWVkXCI6XCJ7e2xheW91dE5hbWV9fSDniYjpnaLlt7LlpZfnlKhcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlRGVsZXRlZFwiOlwi5bel5L2c56m66ZaT5bey5Yiq6ZmkXCIsXCJlcnJvckluZGljYXRvci5wYWdlU2F2ZUZhaWxlZFwiOlwi6aCB6Z2i54Sh5rOV5YSy5a2YXCIsXCJlcnJvckluZGljYXRvci53b3Jrc3BhY2VTYXZlRmFpbGVkXCI6XCLlt6XkvZznqbrplpPnhKHms5XlhLLlrZhcIixcImVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlUGFnZVwiOlwi54Sh5rOV6KSH5a+r6aCB6Z2iXCIsXCJpbmZvSW5kaWNhdG9yLmNvbG9yTGlua0F0dGVtcHRcIjpcIuaIkeWAkeWYl+ippuWwjeatpOe0ouW8leaomeexpOmAsuihjOmhj+iJsumAo+e1kO+8jOS9hue2suermS/lhaflrrnmiYDmnInogIXlsJrmnKrllZ/nlKjoqbLlip/og71cIixcImdsb2JhbC5jYW5jZWxcIjpcIuWPlua2iFwiLFwiZ2xvYmFsLmNvbmZpcm1cIjpcIueiuuiqjVwiLFwiZ2xvYmFsLnNhdmVcIjpcIuWEsuWtmFwiLFwiZ2xvYmFsLmRlbGV0ZVwiOlwiRGVsZXRlIFpIXCIsXCJhcHBSZXN1bHRzLmhlYWRlclwiOlwiRmVhdHVyZWQgQ29udGVudCBaSFwiLFwicmVjZW50bHlWaXNpdGVkLmhlYWRlclwiOlwiUmVjZW50bHkgdmlzaXRlZCBaSFwiLFwibGFuZGluZ1BhZ2Uuc3ViaGVhZGVyXCI6XCJBcHBzIGFuZCB3ZWJzaXRlcyBzZWxlY3RlZCBieSBhbiBhZG1pbiB3aWxsIHNob3cgaGVyZSBaSFwiLFwiYXJpYS5vcGVuQnJvd3NlclwiOlwi6ZaL5ZWf54CP6Ka95Zmo6YG45ZauXCIsXCJhcmlhLmJyb3dzZXJUYWJzXCI6XCLngI/opr3lmajntKLlvJXmqJnnsaRcIixcImFyaWEudmlld1RhYlwiOlwie3t0aXRsZX19IOeahOimluWclue0ouW8leaomeexpFwiLFwiYXJpYS5jbG9zZVBhZ2VcIjpcIumXnOmWiSB7e3RpdGxlfX0g55qE6aCB6Z2i57Si5byV5qiZ57Gk5oyJ6YiVXCIsXCJhcmlhLmNsb3NlVGFiXCI6XCLpl5zplonntKLlvJXmqJnnsaQge3t0aXRsZX19XCIsXCJhcmlhLnRpdGxlXCI6XCLmqJnpoYxcIixcImFyaWEuY2xvc2VDb250ZXh0R3JvdXBcIjpcIuS9v+eUqCBFc2Mg6Y216Zec6ZaJ6ISI57Wh576k57WE6YG45Y+W5bCN6Kmx5qGGXCIsXCJhcmlhLmNvbG9yTGlua2luZ1wiOlwi6aGv56S65oiW6Zqx6JeP6aGP6Imy6YCj57WQXCIsXCJhcmlhLmFwcGx5Q29sb3JMaW5raW5nXCI6XCLoq4vpgbjlj5bopoHlpZfnlKjpoY/oibLpgKPntZDnmoToppblnJZcIixcImFyaWEuYXNzaWduQ29sb3JMaW5raW5nQ3VycmVudFZpZXdcIjpcIuebruWJjeimluWcluWIhumFjee1piB7e25hbWV9fSDohIjntaHnvqTntYRcIixcImFyaWEuYXNzaWduQ29sb3JMaW5raW5nQ3VycmVudFZpZXdzXCI6XCLnm67liY3oppblnJbliIbphY3ntaYge3tuYW1lfX0g6ISI57Wh576k57WEXCIsXCJhcmlhLnNldENvbG9yTGlua2luZ0FjdGl2ZVZpZXdcIjpcIuWwh+WVn+eUqOimluWcluioreWumueCuiB7e25hbWV9fSDohIjntaHnvqTntYRcIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld3NcIjpcIuWwh+WVn+eUqOimluWcluioreWumueCuiB7e25hbWV9fSDohIjntaHnvqTntYRcIixcImFyaWEuZXNjYXBlTGF5b3V0RGlhbG9nXCI6XCLkvb/nlKggRXNjIOmNtemXnOmWieiuiuabtOeJiOmdouWwjeipseahhlwiLFwiZ2xvYmFsLnN1cGVydGFiXCI6XCJTdXBlcnRhYiBaSFwiLFwiZ2xvYmFsLnRhYlwiOlwiVGFiIFpIXCIsXCJib29rbWFya3MuZWRpdEJvb2ttYXJrXCI6XCJFZGl0IEJvb2ttYXJrIFpIXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFwiOlwiQm9va21hcmsgYWRkZWQgWkhcIixcImJvb2ttYXJrcy5kb25lXCI6XCJEb25lIFpIXCIsXCJib29rbWFya3MucmVtb3ZlXCI6XCJSZW1vdmUgWkhcIixcImJvb2ttYXJrcy5ib29rbWFya3NQYW5lbFwiOlwiQm9va21hcmtzIFBhbmVsIFpIXCIsXCJib29rbWFya3MuY2xvc2VQYW5lbFwiOlwiQ2xvc2UgQm9va21hcmtzIFBhbmVsIFpIXCIsXCJib29rbWFya3MuYm9va21hcmtzXCI6XCJCb29rbWFya3MgWkhcIixcImJvb2ttYXJrcy5hbGxCb29rbWFya3NcIjpcIkFsbCBCb29rbWFya3MgWkhcIixcImJvb2ttYXJrcy5mYXZvcml0ZXNcIjpcIkZhdm9yaXRlcyBaSFwiLFwiYm9va21hcmtzLnNlYXJjaEJvb2ttYXJrc1wiOlwiU2VhcmNoIEJvb2ttYXJrcyBaSFwiLFwiYm9va21hcmtzLmNsZWFyU2VhcmNoSW5wdXRcIjpcIkNsZWFyIFNlYXJjaCBJbnB1dCBaSFwiLFwiYm9va21hcmtzLmNyZWF0ZUZvbGRlclwiOlwiQ3JlYXRlIE5ldyBGb2xkZXIgWkhcIixcImJvb2ttYXJrcy5leGl0Rm9sZGVyXCI6XCJFeGl0IEZvbGRlciBaSFwiLFwiYm9va21hcmtzLm5ld0ZvbGRlclwiOlwiTmV3IEZvbGRlciBaSFwiLFwiYm9va21hcmtzLm5hbWVkRm9sZGVyXCI6XCJ7e25hbWV9fSBGb2xkZXIgWkhcIixcImJvb2ttYXJrcy5ib29rbWFya1NldHRpbmdzXCI6XCJ7e25hbWV9fSBCb29rbWFyayBTZXR0aW5ncyBaSFwiLFwiYm9va21hcmtzLmZvbGRlclNldHRpbmdzXCI6XCJ7e25hbWV9fSBGb2xkZXIgU2V0dGluZ3MgWkhcIixcImJvb2ttYXJrcy5ub1Jlc3VsdHNGb3VuZFwiOlwiTm8gcmVzdWx0cyBmb3VuZCBaSFwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kU3VidGV4dFwiOlwiVGhlcmUgYXJlIG5vIGJvb2ttYXJrcyB0aGF0IG1hdGNoIHlvdXIgc2VhcmNoIFpIXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1wiOlwiTm90aGluZyB0byBzaG93IHlldCBaSFwiLFwiYm9va21hcmtzLm5vdGhpbmdUb1Nob3dTdWJ0ZXh0XCI6XCJBZGQgYSBib29rbWFyayB0byB0aGlzIGZvbGRlciBaSFwiLFwiYm9va21hcmtzLnJlc3VsdHNGb3VuZEluXCI6XCJSZXN1bHRzIGZvdW5kIGluIHt7bmFtZX19IFpIXCIsXCJib29rbWFya3MucmVzdWx0c0luT3RoZXJGb2xkZXJzXCI6XCJSZXN1bHRzIGZvdW5kIGluIG90aGVyIGZvbGRlcnMgWkhcIixcImJvb2ttYXJrcy5hbGxSZXN1bHRzRm91bmRJblwiOlwiQWxsIHJlc3VsdHMgZm91bmQgaW4gWkhcIixcImJvb2ttYXJrcy5lZGl0TmFtZVwiOlwiRWRpdCBOYW1lIFpIXCIsXCJib29rbWFya3MubW92ZVwiOlwiTW92ZSBaSFwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUaXRsZVwiOlwiQm9va21hcmsgQWRkZWQgWkhcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkVG9Gb2xkZXJcIjpcIllvdXIgYm9va21hcmsgd2FzIGFkZGVkIHRvIFxcXFxcInt7Zm9sZGVyTmFtZX19XFxcXFwiIFpIXCIsXCJib29rbWFya3MuYm9va21hcmtFZGl0ZWRUaXRsZVwiOlwiQm9va21hcmsgRWRpdGVkIFpIXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiXCI6XCJTYXZlIFN1cGVydGFiIFpIXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcIlNhdmUgU3VwZXJ0YWIgQXMuLi4gWkhcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBaSFwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgU3VwZXJ0YWIgWkhcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5uZXdUYWJcIjpcIk5ldyBUYWIgWkhcIixcImVudGVycHJpc2VTYXZlTWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBcyBaSFwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5yZW5hbWVTdXBlcnRhYlwiOlwiUmVuYW1lIFpIXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnVuc2F2ZWRDaGFuZ2VzXCI6XCJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhpcyBUYWIuIFpIXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlVGFiXCI6XCJDbG9zZSBUYWIgWkhcIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VTdXBlcnRhYlwiOlwiQ2xvc2UgU3VwZXJ0YWIgWkhcIixcImVudGVycHJpc2VTYXZlTW9kYWwuc2F2ZVN1cGVydGFiQ291bnRcIjpcIlNhdmUge3tjb3VudH19IFN1cGVydGFicyBiZWZvcmUgY2xvc2luZz8gWkhcIixcImVudGVycHJpc2VNb2RhbC5kaXNjYXJkU3VwZXJ0YWJXYXJuaW5nXCI6XCJBbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHRoaXMgU3VwZXJ0YWIgd2lsbCBiZSBsb3N0LiBaSFwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgdGhlIFxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYj8gWkhcIixcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYldhcm5pbmdcIjpcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBTdXBlcnRhYj8gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZSBhbmQgaXMgcGVybWFuZW50LiBaSFwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJTYXZlZFwiOlwiU3VwZXJ0YWIgU2F2ZWQgWkhcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlblNhdmVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gc2F2ZWQuIFpIXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkRlbGV0ZWRcIjpcIlN1cGVydGFiIERlbGV0ZWQgWkhcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlbkRlbGV0ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYiBoYXMgYmVlbiBkZWxldGVkLiBaSFwiLFwiZW50ZXJwcmlzZUVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlVGFiXCI6XCJGYWlsZWQgdG8gZHVwbGljYXRlIFRhYiBaSFwiLFwiZW50ZXJwcmlzZUVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlU3VwZXJ0YWJcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgU3VwZXJ0YWIgWkhcIixcImVudGVycHJpc2VDb21tYW5kQmFyLnN3aXRjaFRvU3VwZXJ0YWJcIjpcIlN3aXRjaCB0byBTdXBlcnRhYiBaSFwiLFwiZW50ZXJwcmlzZUNvbW1hbmRCYXIuZ29Ub1wiOlwiR28gdG8ge3t0eXBlfX0gWkhcIixcImNvbnRleHRNZW51LnF1aXRFbnRlcnByaXNlQnJvd3NlclwiOlwiUXVpdCBaSFwifScpLFJuPUpTT04ucGFyc2UoJ3tcImNvbnRleHRNZW51Lm5ld1dpbmRvd1wiOlwiTmV3IFdpbmRvd1wiLFwiY29udGV4dE1lbnUubmV3UGFnZVwiOlwiTmV3IFBhZ2VcIixcImNvbnRleHRNZW51LnJlc3RvcmVcIjpcIlJlc3RvcmUgdG8gTGFzdCBTYXZlZCBDaGFuZ2VzXCIsXCJjb250ZXh0TWVudS5zd2l0Y2hXb3Jrc3BhY2VcIjpcIlN3aXRjaCBXb3Jrc3BhY2VcIixcImNvbnRleHRNZW51LmFwcGVhcmFuY2VcIjpcIkFwcGVhcmFuY2VcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VcIjpcIlNhdmUgV29ya3NwYWNlXCIsXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlQXNcIjpcIlNhdmUgV29ya3NwYWNlIEFzLi4uXCIsXCJjb250ZXh0TWVudS5yZW5hbWVXb3Jrc3BhY2VcIjpcIlJlbmFtZSBXb3Jrc3BhY2VcIixcImNvbnRleHRNZW51LmRlbGV0ZVdvcmtzcGFjZVwiOlwiRGVsZXRlIFdvcmtzcGFjZVwiLFwiY29udGV4dE1lbnUuZG93bmxvYWRzXCI6XCJEb3dubG9hZHNcIixcImNvbnRleHRNZW51LnNhdmVQYWdlXCI6XCJTYXZlIFBhZ2VcIixcImNvbnRleHRNZW51LnNhdmVQYWdlQXNcIjpcIlNhdmUgUGFnZSBBcy4uLlwiLFwiY29udGV4dE1lbnUucHJpbnRcIjpcIlByaW50Li4uXCIsXCJjb250ZXh0TWVudS5wcmludFNjcmVlblwiOlwiUHJpbnQgU2NyZWVuXCIsXCJjb250ZXh0TWVudS5jbG9zZVdpbmRvd1wiOlwiQ2xvc2UgV2luZG93XCIsXCJjb250ZXh0TWVudS5vcGVuU3RvcmVmcm9udFwiOlwiT3BlbiBTdG9yZWZyb250XCIsXCJjb250ZXh0TWVudS5xdWl0UGxhdGZvcm1cIjpcIlF1aXQge3twbGF0Zm9ybUxhYmVsfX1cIixcImNvbnRleHRNZW51Lm5ld1ZpZXdcIjpcIk5ldyBWaWV3XCIsXCJjb250ZXh0TWVudS5vcGVuVmlld1wiOlwiT3BlbiBWaWV3IHdpdGggRGVmYXVsdCBXZWIgQnJvd3NlclwiLFwiY29udGV4dE1lbnUub3BlblZpZXdzXCI6XCJPcGVuIFZpZXdzIHdpdGggRGVmYXVsdCBXZWIgQnJvd3NlclwiLFwiY29udGV4dE1lbnUucmVsb2FkXCI6XCJSZWxvYWRcIixcImNvbnRleHRNZW51LnJlbG9hZFZpZXdcIjpcIlJlbG9hZCBWaWV3XCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3c1wiOlwiUmVsb2FkIFZpZXdzXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZVwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld1wiOlwiRHVwbGljYXRlIFZpZXdcIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVZpZXdzXCI6XCJEdXBsaWNhdGUgVmlld3NcIixcImNvbnRleHRNZW51LmFkZFZpZXdcIjpcIkFkZCBWaWV3IHRvIENoYW5uZWxcIixcImNvbnRleHRNZW51LmFkZFZpZXdzXCI6XCJBZGQgVmlld3MgdG8gQ2hhbm5lbFwiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld1wiOlwiUmVtb3ZlIFZpZXcgZnJvbSBDaGFubmVsXCIsXCJjb250ZXh0TWVudS5yZW1vdmVWaWV3c1wiOlwiUmVtb3ZlIFZpZXdzIGZyb20gQ2hhbm5lbFwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3XCI6XCJDbG9zZSBWaWV3XCIsXCJjb250ZXh0TWVudS5jbG9zZVZpZXdzXCI6XCJDbG9zZSBWaWV3c1wiLFwiY29udGV4dE1lbnUuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYlwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlUGFnZVwiOlwiRHVwbGljYXRlIFBhZ2VcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRcIjpcIlByaW50XCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50QWxsXCI6XCJQcmludCBBbGxcIixcInNhdmVNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwiU2F2ZSBXb3Jrc3BhY2UgQXNcIixcInNhdmVNZW51LnNhdmVQYWdlQXNcIjpcIlNhdmUgUGFnZSBBc1wiLFwic2F2ZU1vZGFsLmVudGVyVmFsdWVcIjpcIlBsZWFzZSBlbnRlciBhIHZhbHVlXCIsXCJzYXZlTW9kYWwuYWxyZWFkeUV4aXN0c1wiOlwie3t0aXRsZX19IGFscmVhZHkgZXhpc3RzLlwiLFwic2F2ZU1vZGFsLnBsZWFzZUVudGVyVmFsaWROYW1lXCI6XCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBuYW1lXCIsXCJzYXZlTW9kYWwucmVuYW1lUGFnZVwiOlwiUmVuYW1lIFBhZ2VcIixcInNhdmVNb2RhbC5jbG9zZVBhZ2VcIjpcIkNsb3NlIFBhZ2VcIixcInNhdmVNb2RhbC5kaXNjYXJkQ2hhbmdlc1wiOlwiRGlzY2FyZCBDaGFuZ2VzXCIsXCJzYXZlTW9kYWwuZGlzY2FyZEFsbFwiOlwiRGlzY2FyZCBBbGxcIixcInNhdmVNb2RhbC5zYXZlQWxsXCI6XCJTYXZlIEFsbFwiLFwic2F2ZU1vZGFsLnNhdmVQYWdlc0NvdW50XCI6XCJTYXZlICh7e2NvdW50fX0pIHBhZ2VzIGJlZm9yZSBjbG9zaW5nP1wiLFwiZGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgUGFnZVwiLFwiZW50ZXJwcmlzZURlZmF1bHRQYWdlVGl0bGVcIjpcIlVudGl0bGVkIFN1cGVydGFiXCIsXCJhZGROZXdQYWdlXCI6XCJOZXcgUGFnZVwiLFwiYWRkTmV3VGFiXCI6XCJBZGQgTmV3IFRhYlwiLFwiYWRkTmV3Vmlld1wiOlwiTmV3IFZpZXdcIixcInJlc3RvcmVNb2RhbFwiOlwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlc3RvcmUgdG8gbGFzdCBzYXZlZCBjaGFuZ2VzP1wiLFwibW9kYWwuZGlzY2FyZFdhcm5pbmdcIjpcIkFueSB1bnNhdmVkIGNoYW5nZXMgd2lsbCBiZSBkaXNjYXJkZWRcIixcIm1vZGFsLmRpc2NhcmRQYWdlV2FybmluZ1wiOlwiQW55IHVuc2F2ZWQgY2hhbmdlcyB0byB0aGlzIHBhZ2Ugd2lsbCBiZSBsb3N0LlwiLFwibW9kYWwuc2F2ZUNoYW5nZXNQcm9tcHRcIjpcIlNhdmUgY2hhbmdlcyBiZWZvcmUgY2xvc2luZz9cIixcIm1vZGFsLnBhZ2VDbG9zZVwiOlwiUGFnZSBDbG9zZVwiLFwic3dpdGNoV29ya3NwYWNlTW9kYWxcIjpcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBzd2l0Y2ggdG8ge3t3b3Jrc3BhY2V9fT9cIixcInN3aXRjaFdvcmtzcGFjZU1vZGFsLndhcm5pbmdcIjpcIkFueSB1bnNhdmVkIGNoYW5nZXMgd2lsbCBiZSBkaXNjYXJkZWRcIixcImRlbGV0ZVdvcmtzcGFjZU1vZGFsXCI6XCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcGVybWFuZW50bHkgZGVsZXRlIHRoaXMgd29ya3NwYWNlP1wiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLndhcm5pbmdcIjpcIkEgV29ya3NwYWNlIHdpdGggdGhlIG5hbWUge3t3b3Jrc3BhY2V9fSBhbHJlYWR5IGV4aXN0cy4gRG8geW91IHdhbnQgdG8gcmVwbGFjZSBpdD9cIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC53YXJuaW5nLmJvZHlcIjpcIkEgd29ya3NwYWNlIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cy4gUmVwbGFjaW5nIGl0IHdpbGwgb3ZlcndyaXRlIGl0cyBjdXJyZW50IGNvbnRlbnRzLlwiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLnJlcGxhY2VcIjpcIlJlcGxhY2VcIixcImNsb3NlUGxhdGZvcm1cIjpcIkNsb3NlIHRoZSBwbGF0Zm9ybVwiLFwiY2xvc2VQbGF0Zm9ybS53b3Jrc3BhY2VcIjpcIkNsb3NlIHRoZSB7e3dvcmtzcGFjZX19IFBsYXRmb3JtXCIsXCJjbG9zZVBsYXRmb3JtLndhcm5pbmdcIjpcIkNsb3NpbmcgYSBwbGF0Zm9ybSB3aWxsIGNsb3NlIGFueSB3b3Jrc3BhY2VzLCBhcHBzIG9yIGFueSBwcm9jZXNzZXMgdGhhdCBhcmUgcnVubmluZy5cIixcImJhY2tcIjpcIkJhY2tcIixcImZvcndhcmRcIjpcIkZvcndhcmRcIixcInJlbG9hZFwiOlwiUmVsb2FkXCIsXCJncmVlblwiOlwiR3JlZW5cIixcInB1cnBsZVwiOlwiUHVycGxlXCIsXCJvcmFuZ2VcIjpcIk9yYW5nZVwiLFwicmVkXCI6XCJSZWRcIixcInBpbmtcIjpcIlBpbmtcIixcInllbGxvd1wiOlwiWWVsbG93XCIsXCJ0aGVtZS5saWdodFwiOlwiTGlnaHRcIixcInRoZW1lLmRhcmtcIjpcIkRhcmtcIixcInRoZW1lLnN5c3RlbVwiOlwiU3luYyB3aXRoIE9TIHNldHRpbmdcIixcInRvb2xiYXIuaGlkZVRhYnNcIjpcIkhpZGUgVGFic1wiLFwidG9vbGJhci5zaG93VGFic1wiOlwiU2hvdyBUYWJzXCIsXCJ0b29sYmFyLmxvY2tcIjpcIkxvY2tcIixcInRvb2xiYXIudW5sb2NrXCI6XCJVbmxvY2tcIixcInRvb2xiYXIuY29sb3JMaW5raW5nXCI6XCJDb2xvciBMaW5raW5nXCIsXCJ0b29sYmFyLmNoYW5nZUxheW91dFwiOlwiQ2hhbmdlIExheW91dFwiLFwidG9vbGJhci5zYXZlTWVudVwiOlwiU2F2ZSBNZW51XCIsXCJ0b29sYmFyLm1heGltaXplV2luZG93XCI6XCJNYXhpbWl6ZSBXaW5kb3dcIixcInRvb2xiYXIucmVzdG9yZVdpbmRvd1wiOlwiUmVzdG9yZSBXaW5kb3dcIixcInRvb2xiYXIubWluaW1pemVXaW5kb3dcIjpcIk1pbmltaXplIFdpbmRvd1wiLFwiY2hhbmdlTGF5b3V0LmZ1bGxXaWR0aFwiOlwiRnVsbCBXaWR0aFwiLFwiY2hhbmdlTGF5b3V0LmNvbHVtbnNcIjpcIkNvbHVtbnNcIixcImNoYW5nZUxheW91dC5Sb3dzXCI6XCJSb3dzXCIsXCJjaGFuZ2VMYXlvdXQuR3JpZFwiOlwiR3JpZFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTd2l0Y2hlZFwiOlwiV29ya3NwYWNlIFN3aXRjaGVkXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmhpZGRlblwiOlwiVGFicyBhcmUgSGlkZGVuXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnNob3duXCI6XCJUYWJzIGFyZSBTaG93blwiLFwic3VjY2Vzc0luZGljYXRvci5sb2NrZWRcIjpcIlBhZ2UgaXMgTG9ja2VkXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnVubG9ja2VkXCI6XCJQYWdlIGlzIFVubG9ja2VkXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkXCI6XCJXb3Jrc3BhY2Ugc2F2ZWRcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRBc1wiOlwiV29ya3NwYWNlIHNhdmVkIGFzIHt7d29ya3NwYWNlfX1cIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlUmVuYW1lZFwiOlwiV29ya3NwYWNlIHJlbmFtZWRcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVNhdmVkXCI6XCJQYWdlIFNhdmVkXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBoYXMgYmVlbiBzYXZlZC5cIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUNvcHlTYXZlZFwiOlwiUGFnZSBzYXZlZCBhcyB7e3RpdGxlfX1cIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVJlbmFtZWRcIjpcIlBhZ2UgcmVuYW1lZFwiLFwic3VjY2Vzc0luZGljYXRvci5jb250ZXh0R3JvdXBBcHBsaWVkXCI6XCJDb250ZXh0IGdyb3VwIGFwcGxpZWRcIixcInN1Y2Nlc3NJbmRpY2F0b3IubmFtZWRDb250ZXh0R3JvdXBBcHBsaWVkXCI6XCJ7e2NvbG9yTmFtZX19IGNvbnRleHQgZ3JvdXAgYXBwbGllZFwiLFwic3VjY2Vzc0luZGljYXRvci52aWV3UmVtb3ZlZFwiOlwiVmlldyByZW1vdmVkIGZyb20gY29udGV4dCBncm91cFwiLFwic3VjY2Vzc0luZGljYXRvci52aWV3c1JlbW92ZWRcIjpcIlZpZXdzIHJlbW92ZWQgZnJvbSBjb250ZXh0IGdyb3VwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxheW91dEFwcGxpZWRcIjpcInt7bGF5b3V0TmFtZX19IGxheW91dCBhcHBsaWVkXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZURlbGV0ZWRcIjpcIldvcmtzcGFjZSBkZWxldGVkXCIsXCJlcnJvckluZGljYXRvci5wYWdlU2F2ZUZhaWxlZFwiOlwiUGFnZSBmYWlsZWQgdG8gc2F2ZVwiLFwiZXJyb3JJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZUZhaWxlZFwiOlwiV29ya3NwYWNlIGZhaWxlZCB0byBzYXZlXCIsXCJlcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVBhZ2VcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgUGFnZVwiLFwiaW5mb0luZGljYXRvci5jb2xvckxpbmtBdHRlbXB0XCI6XCJXZSBhdHRlbXB0ZWQgdG8gY29sb3IgbGluayB0aGlzIHRhYiwgYnV0IHRoZSBzaXRlL2NvbnRlbnQgb3duZXIgaGFzIG5vdCBlbmFibGVkIGl0IHlldFwiLFwiZ2xvYmFsLmNhbmNlbFwiOlwiQ2FuY2VsXCIsXCJnbG9iYWwuY29uZmlybVwiOlwiQ29uZmlybVwiLFwiZ2xvYmFsLnNhdmVcIjpcIlNhdmVcIixcImdsb2JhbC5kZWxldGVcIjpcIkRlbGV0ZVwiLFwiYXBwUmVzdWx0cy5oZWFkZXJcIjpcIkZlYXR1cmVkIENvbnRlbnRcIixcInJlY2VudGx5VmlzaXRlZC5oZWFkZXJcIjpcIlJlY2VudGx5IHZpc2l0ZWRcIixcImxhbmRpbmdQYWdlLnN1YmhlYWRlclwiOlwiQXBwcyBhbmQgd2Vic2l0ZXMgc2VsZWN0ZWQgYnkgYW4gYWRtaW4gd2lsbCBzaG93IGhlcmVcIixcImFyaWEub3BlbkJyb3dzZXJcIjpcIk9wZW4gQnJvd3NlciBNZW51XCIsXCJhcmlhLmJyb3dzZXJUYWJzXCI6XCJCcm93c2VyIFRhYnNcIixcImFyaWEudmlld1RhYlwiOlwiVmlldyBUYWIgZm9yIHt7dGl0bGV9fVwiLFwiYXJpYS5jbG9zZVBhZ2VcIjpcIkNsb3NlIFBhZ2UgVGFiIEJ1dHRvbiBmb3Ige3t0aXRsZX19XCIsXCJhcmlhLmNsb3NlVGFiXCI6XCJDbG9zZSBUYWIge3t0aXRsZX19XCIsXCJhcmlhLnRpdGxlXCI6XCJUaXRsZVwiLFwiYXJpYS5jbG9zZUNvbnRleHRHcm91cFwiOlwiVXNlIGVzY2FwZSB0byBjbG9zZSBjb250ZXh0IGdyb3VwIHNlbGVjdGlvbiBkaWFsb2dcIixcImFyaWEuY29sb3JMaW5raW5nXCI6XCJTaG93IG9yIGhpZGUgY29sb3IgbGlua2luZ1wiLFwiYXJpYS5hcHBseUNvbG9yTGlua2luZ1wiOlwiUGxlYXNlIHNlbGVjdCBhIHZpZXcgdG8gYXBwbHkgY29sb3IgbGlua2luZ1wiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld1wiOlwiQ3VycmVudCB2aWV3IGFzc2lnbmVkIHRvIHt7bmFtZX19IGNvbnRleHQgZ3JvdXBcIixcImFyaWEuYXNzaWduQ29sb3JMaW5raW5nQ3VycmVudFZpZXdzXCI6XCJDdXJyZW50IHZpZXdzIGFzc2lnbmVkIHRvIHt7bmFtZX19IGNvbnRleHQgZ3JvdXBcIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld1wiOlwiU2V0IGFjdGl2ZSB2aWV3IHRvIHt7bmFtZX19IGNvbnRleHQgZ3JvdXBcIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld3NcIjpcIlNldCBhY3RpdmUgdmlld3MgdG8ge3tuYW1lfX0gY29udGV4dCBncm91cFwiLFwiYXJpYS5lc2NhcGVMYXlvdXREaWFsb2dcIjpcIlVzZSBlc2NhcGUgdG8gY2xvc2UgY2hhbmdlIGxheW91dCBkaWFsb2dcIixcImdsb2JhbC5zdXBlcnRhYlwiOlwiU3VwZXJ0YWJcIixcImdsb2JhbC50YWJcIjpcIlRhYlwiLFwiYm9va21hcmtzLmVkaXRCb29rbWFya1wiOlwiRWRpdCBCb29rbWFya1wiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRcIjpcIkJvb2ttYXJrIGFkZGVkXCIsXCJib29rbWFya3MuZG9uZVwiOlwiRG9uZVwiLFwiYm9va21hcmtzLnJlbW92ZVwiOlwiUmVtb3ZlXCIsXCJib29rbWFya3MuYm9va21hcmtzUGFuZWxcIjpcIkJvb2ttYXJrcyBQYW5lbFwiLFwiYm9va21hcmtzLmNsb3NlUGFuZWxcIjpcIkNsb3NlIEJvb2ttYXJrcyBQYW5lbFwiLFwiYm9va21hcmtzLmJvb2ttYXJrc1wiOlwiQm9va21hcmtzXCIsXCJib29rbWFya3MuYWxsQm9va21hcmtzXCI6XCJBbGwgQm9va21hcmtzXCIsXCJib29rbWFya3MuZmF2b3JpdGVzXCI6XCJGYXZvcml0ZXNcIixcImJvb2ttYXJrcy5zZWFyY2hCb29rbWFya3NcIjpcIlNlYXJjaCBCb29rbWFya3NcIixcImJvb2ttYXJrcy5jbGVhclNlYXJjaElucHV0XCI6XCJDbGVhciBTZWFyY2ggSW5wdXRcIixcImJvb2ttYXJrcy5jcmVhdGVGb2xkZXJcIjpcIkNyZWF0ZSBOZXcgRm9sZGVyXCIsXCJib29rbWFya3MuZXhpdEZvbGRlclwiOlwiRXhpdCBGb2xkZXJcIixcImJvb2ttYXJrcy5uZXdGb2xkZXJcIjpcIk5ldyBGb2xkZXJcIixcImJvb2ttYXJrcy5uYW1lZEZvbGRlclwiOlwie3tuYW1lfX0gRm9sZGVyXCIsXCJib29rbWFya3MuYm9va21hcmtTZXR0aW5nc1wiOlwie3tuYW1lfX0gQm9va21hcmsgU2V0dGluZ3NcIixcImJvb2ttYXJrcy5mb2xkZXJTZXR0aW5nc1wiOlwie3tuYW1lfX0gRm9sZGVyIFNldHRpbmdzXCIsXCJib29rbWFya3Mubm9SZXN1bHRzRm91bmRcIjpcIk5vIHJlc3VsdHMgZm91bmRcIixcImJvb2ttYXJrcy5ub1Jlc3VsdHNGb3VuZFN1YnRleHRcIjpcIlRoZXJlIGFyZSBubyBib29rbWFya3MgdGhhdCBtYXRjaCB5b3VyIHNlYXJjaFwiLFwiYm9va21hcmtzLm5vdGhpbmdUb1Nob3dcIjpcIk5vdGhpbmcgdG8gc2hvdyB5ZXRcIixcImJvb2ttYXJrcy5ub3RoaW5nVG9TaG93U3VidGV4dFwiOlwiQWRkIGEgYm9va21hcmsgdG8gdGhpcyBmb2xkZXJcIixcImJvb2ttYXJrcy5yZXN1bHRzRm91bmRJblwiOlwiUmVzdWx0cyBmb3VuZCBpbiB7e25hbWV9fVwiLFwiYm9va21hcmtzLnJlc3VsdHNJbk90aGVyRm9sZGVyc1wiOlwiUmVzdWx0cyBmb3VuZCBpbiBvdGhlciBmb2xkZXJzXCIsXCJib29rbWFya3MuYWxsUmVzdWx0c0ZvdW5kSW5cIjpcIkFsbCByZXN1bHRzIGZvdW5kIGluXCIsXCJib29rbWFya3MuZWRpdE5hbWVcIjpcIkVkaXQgTmFtZVwiLFwiYm9va21hcmtzLm1vdmVcIjpcIk1vdmVcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkVGl0bGVcIjpcIkJvb2ttYXJrIEFkZGVkXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFRvRm9sZGVyXCI6XCJZb3VyIGJvb2ttYXJrIHdhcyBhZGRlZCB0byBcXFxcXCJ7e2ZvbGRlck5hbWV9fVxcXFxcIlwiLFwiYm9va21hcmtzLmJvb2ttYXJrRWRpdGVkVGl0bGVcIjpcIkJvb2ttYXJrIEVkaXRlZFwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYlwiOlwiU2F2ZSBTdXBlcnRhYlwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYkFzXCI6XCJTYXZlIFN1cGVydGFiIEFzLi4uXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZHVwbGljYXRlXCI6XCJEdXBsaWNhdGVcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5kZWxldGVTdXBlcnRhYlwiOlwiRGVsZXRlIFN1cGVydGFiXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUubmV3VGFiXCI6XCJOZXcgVGFiXCIsXCJlbnRlcnByaXNlU2F2ZU1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcIlNhdmUgU3VwZXJ0YWIgQXNcIixcImVudGVycHJpc2VTYXZlTW9kYWwucmVuYW1lU3VwZXJ0YWJcIjpcIlJlbmFtZVwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC51bnNhdmVkQ2hhbmdlc1wiOlwiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoaXMgVGFiLlwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVRhYlwiOlwiQ2xvc2UgVGFiXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlU3VwZXJ0YWJcIjpcIkNsb3NlIFN1cGVydGFiXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnNhdmVTdXBlcnRhYkNvdW50XCI6XCJTYXZlIHt7Y291bnR9fSBTdXBlcnRhYnMgYmVmb3JlIGNsb3Npbmc/XCIsXCJlbnRlcnByaXNlTW9kYWwuZGlzY2FyZFN1cGVydGFiV2FybmluZ1wiOlwiQW55IHVuc2F2ZWQgY2hhbmdlcyB0byB0aGlzIFN1cGVydGFiIHdpbGwgYmUgbG9zdC5cIixcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYlwiOlwiRGVsZXRlIHRoZSBcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWI/XCIsXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJXYXJuaW5nXCI6XCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgU3VwZXJ0YWI/IFRoaXMgYWN0aW9uIGNhbm5vdCBiZSB1bmRvbmUgYW5kIGlzIHBlcm1hbmVudC5cIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiU2F2ZWRcIjpcIlN1cGVydGFiIFNhdmVkXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkhhc0JlZW5TYXZlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiIGhhcyBiZWVuIHNhdmVkLlwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJEZWxldGVkXCI6XCJTdXBlcnRhYiBEZWxldGVkXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkhhc0JlZW5EZWxldGVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gZGVsZXRlZC5cIixcImVudGVycHJpc2VFcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBUYWJcIixcImVudGVycHJpc2VFcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVN1cGVydGFiXCI6XCJGYWlsZWQgdG8gZHVwbGljYXRlIFN1cGVydGFiXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5zd2l0Y2hUb1N1cGVydGFiXCI6XCJTd2l0Y2ggdG8gU3VwZXJ0YWJcIixcImVudGVycHJpc2VDb21tYW5kQmFyLmdvVG9cIjpcIkdvIHRvIHt7dHlwZX19XCIsXCJjb250ZXh0TWVudS5xdWl0RW50ZXJwcmlzZUJyb3dzZXJcIjpcIlF1aXRcIn0nKSxJbj1KU09OLnBhcnNlKCd7XCJjb250ZXh0TWVudS5uZXdXaW5kb3dcIjpcIk5ldWVzIEZlbnN0ZXJcIixcImNvbnRleHRNZW51Lm5ld1BhZ2VcIjpcIk5ldWUgU2VpdGVcIixcImNvbnRleHRNZW51LnJlc3RvcmVcIjpcIldpZWRlcmhlcnN0ZWxsZW4gZGVyIHp1bGV0enQgZ2VzcGVpY2hlcnRlbiDDhG5kZXJ1bmdlblwiLFwiY29udGV4dE1lbnUuc3dpdGNoV29ya3NwYWNlXCI6XCJXb3Jrc3BhY2Ugd2VjaHNlbG5cIixcImNvbnRleHRNZW51LmFwcGVhcmFuY2VcIjpcIkVyc2NoZWludW5nc2JpbGRcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VcIjpcIldvcmtzcGFjZSBzcGVpY2hlcm5cIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwiV29ya3NwYWNlIHNwZWljaGVybiB1bnRlci4uLlwiLFwiY29udGV4dE1lbnUucmVuYW1lV29ya3NwYWNlXCI6XCJXb3Jrc3BhY2UgdW1iZW5lbm5lblwiLFwiY29udGV4dE1lbnUuZGVsZXRlV29ya3NwYWNlXCI6XCJXb3Jrc3BhY2UgbMO2c2NoZW5cIixcImNvbnRleHRNZW51LmRvd25sb2Fkc1wiOlwiRG93bmxvYWRzXCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZVwiOlwiU2VpdGUgc3BlaWNoZXJuXCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZUFzXCI6XCJTZWl0ZSBzcGVpY2hlcm4gdW50ZXIuLi5cIixcImNvbnRleHRNZW51LnByaW50XCI6XCJEcnVja2VuLi4uXCIsXCJjb250ZXh0TWVudS5wcmludFNjcmVlblwiOlwiQmlsZHNjaGlybWFuc2ljaHQgZHJ1Y2tlblwiLFwiY29udGV4dE1lbnUuY2xvc2VXaW5kb3dcIjpcIkZlbnN0ZXIgc2NobGllw59lblwiLFwiY29udGV4dE1lbnUub3BlblN0b3JlZnJvbnRcIjpcIlNjaGF1ZmVuc3RlciDDtmZmbmVuXCIsXCJjb250ZXh0TWVudS5xdWl0UGxhdGZvcm1cIjpcIlBsYXR0Zm9ybSB2ZXJsYXNzZW5cIixcImNvbnRleHRNZW51Lm5ld1ZpZXdcIjpcIk5ldWUgQW5zaWNodFwiLFwiY29udGV4dE1lbnUub3BlblZpZXdcIjpcIkFuc2ljaHQgbWl0IFN0YW5kYXJkLVdlYmJyb3dzZXIgw7ZmZm5lblwiLFwiY29udGV4dE1lbnUub3BlblZpZXdzXCI6XCJBbnNpY2h0ZW4gbWl0IFN0YW5kYXJkLVdlYmJyb3dzZXIgw7ZmZm5lblwiLFwiY29udGV4dE1lbnUucmVsb2FkXCI6XCJSZWxvYWQgREVcIixcImNvbnRleHRNZW51LnJlbG9hZFZpZXdcIjpcIkFuc2ljaHQgbmV1IGxhZGVuXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3c1wiOlwiQW5zaWNodGVuIG5ldSBsYWRlblwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlXCI6XCJEdXBsaWNhdGUgREVcIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVZpZXdcIjpcIkFuc2ljaHQgZHVwbGl6aWVyZW5cIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVZpZXdzXCI6XCJBbnNpY2h0ZW4gZHVwbGl6aWVyZW5cIixcImNvbnRleHRNZW51LmFkZFZpZXdcIjpcIkFuc2ljaHQgenVtIENoYW5uZWwgaGluenVmw7xnZW5cIixcImNvbnRleHRNZW51LmFkZFZpZXdzXCI6XCJBbnNpY2h0ZW4genVtIENoYW5uZWwgaGluenVmw7xnZW5cIixcImNvbnRleHRNZW51LnJlbW92ZVZpZXdcIjpcIkFuc2ljaHQgYXVzIGRlbSBDaGFubmVsIGVudGZlcm5lblwiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld3NcIjpcIkFuc2ljaHRlbiBhdXMgZGVtIENoYW5uZWwgZW50ZmVybmVuXCIsXCJjb250ZXh0TWVudS5jbG9zZVZpZXdcIjpcIkFuc2ljaHQgc2NobGllw59lblwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3c1wiOlwiQW5zaWNodGVuIHNjaGxpZcOfZW5cIixcImNvbnRleHRNZW51LmNsb3NlVGFiXCI6XCJDbG9zZSBUYWIgREVcIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVBhZ2VcIjpcIlNlaXRlIGR1cGxpemllcmVuXCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50XCI6XCJEcnVja2VuXCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50QWxsXCI6XCJBbGxlIGRydWNrZW5cIixcInNhdmVNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwiV29ya3NwYWNlIHNwZWljaGVybiB1bnRlclwiLFwic2F2ZU1lbnUuc2F2ZVBhZ2VBc1wiOlwiU2VpdGUgc3BlaWNoZXJuIHVudGVyXCIsXCJzYXZlTW9kYWwuZW50ZXJWYWx1ZVwiOlwiUGxlYXNlIGVudGVyIGEgdmFsdWUgREVcIixcInNhdmVNb2RhbC5hbHJlYWR5RXhpc3RzXCI6XCJ7e3RpdGxlfX0gZXhpc3RpZXJ0IGJlcmVpdHMuXCIsXCJzYXZlTW9kYWwucGxlYXNlRW50ZXJWYWxpZE5hbWVcIjpcIkJpdHRlIGdlYmVuIFNpZSBlaW5lbiBnw7xsdGlnZW4gTmFtZW4gZWluXCIsXCJzYXZlTW9kYWwucmVuYW1lUGFnZVwiOlwiU2VpdGUgdW1iZW5lbm5lblwiLFwic2F2ZU1vZGFsLmNsb3NlUGFnZVwiOlwiU2VpdGUgc2NobGllw59lblwiLFwic2F2ZU1vZGFsLmRpc2NhcmRDaGFuZ2VzXCI6XCLDhG5kZXJ1bmdlbiB2ZXJ3ZXJmZW5cIixcInNhdmVNb2RhbC5kaXNjYXJkQWxsXCI6XCJBbGxlIHZlcndlcmZlblwiLFwic2F2ZU1vZGFsLnNhdmVBbGxcIjpcIkFsbGUgc3BlaWNoZXJuXCIsXCJzYXZlTW9kYWwuc2F2ZVBhZ2VzQ291bnRcIjpcIih7e2NvdW50fX0pIFNlaXRlbiB2b3IgZGVtIFNjaGxpZcOfZW4gc3BlaWNoZXJuP1wiLFwiZGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgUGFnZSBERVwiLFwiZW50ZXJwcmlzZURlZmF1bHRQYWdlVGl0bGVcIjpcIlVudGl0bGVkIFN1cGVydGFiIERFXCIsXCJhZGROZXdQYWdlXCI6XCJOZXcgUGFnZSBERVwiLFwiYWRkTmV3VGFiXCI6XCJOZXVlbiBUYWIgaGluenVmw7xnZW5cIixcImFkZE5ld1ZpZXdcIjpcIk5ldWUgQW5zaWNodFwiLFwicmVzdG9yZU1vZGFsXCI6XCJTaW5kIFNpZSBzaWNoZXIsIGRhc3MgU2llIGRpZSB6dWxldHp0IGdlc3BlaWNoZXJ0ZW4gw4RuZGVydW5nZW4gd2llZGVyaGVyc3RlbGxlbiB3b2xsZW4/XCIsXCJtb2RhbC5kaXNjYXJkV2FybmluZ1wiOlwiQWxsZSBuaWNodCBnZXNwZWljaGVydGVuIMOEbmRlcnVuZ2VuIHdlcmRlbiB2ZXJ3b3JmZW5cIixcIm1vZGFsLmRpc2NhcmRQYWdlV2FybmluZ1wiOlwiQWxsZSBuaWNodCBnZXNwZWljaGVydGVuIMOEbmRlcnVuZ2VuIGF1ZiBkaWVzZXIgU2VpdGUgZ2VoZW4gdmVybG9yZW4uXCIsXCJtb2RhbC5zYXZlQ2hhbmdlc1Byb21wdFwiOlwiw4RuZGVydW5nZW4gdm9yIGRlbSBTY2hsaWXDn2VuIHNwZWljaGVybj9cIixcIm1vZGFsLnBhZ2VDbG9zZVwiOlwiUGFnZSBDbG9zZSBERVwiLFwic3dpdGNoV29ya3NwYWNlTW9kYWxcIjpcIlNpbmQgU2llIHNpY2hlciwgZGFzcyBTaWUgenUge3t3b3Jrc3BhY2V9fXdlY2hzZWxuIHdvbGxlbj9cIixcInN3aXRjaFdvcmtzcGFjZU1vZGFsLndhcm5pbmdcIjpcIkFsbGUgbmljaHQgZ2VzcGVpY2hlcnRlbiDDhG5kZXJ1bmdlbiB3ZXJkZW4gdmVyd29yZmVuXCIsXCJkZWxldGVXb3Jrc3BhY2VNb2RhbFwiOlwiU2luZCBTaWUgc2ljaGVyLCBkYXNzIFNpZSBkaWVzZW4gV29ya3NwYWNlIGRhdWVyaGFmdCBsw7ZzY2hlbiB3b2xsZW4/XCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwiRWluIFdvcmtzcGFjZSBtaXQgZGVtIE5hbWVuIHt7d29ya3NwYWNlfX0gZXhpc3RpZXJ0IGJlcmVpdHMuIE3DtmNodGVuIFNpZSBpaG4gZXJzZXR6ZW4/XCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZy5ib2R5XCI6XCJFaW4gV29ya3NwYWNlIG1pdCBkZW1zZWxiZW4gTmFtZW4gZXhpc3RpZXJ0IGJlcmVpdHMuIFdlbm4gU2llIGlobiBlcnNldHplbiwgd2lyZCBkZXIgYWt0dWVsbGUgSW5oYWx0IMO8YmVyc2NocmllYmVuLlwiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLnJlcGxhY2VcIjpcIkVyc2V0emVuXCIsXCJjbG9zZVBsYXRmb3JtXCI6XCJQbGF0dGZvcm0gc2NobGllw59lblwiLFwiY2xvc2VQbGF0Zm9ybS53b3Jrc3BhY2VcIjpcIkRpZSB7e3dvcmtzcGFjZX19IFBsYXR0Zm9ybSBzY2hsaWXDn2VuXCIsXCJjbG9zZVBsYXRmb3JtLndhcm5pbmdcIjpcIldlbm4gU2llIGVpbmUgUGxhdHRmb3JtIHNjaGxpZcOfZW4sIHdlcmRlbiBhbGxlIFdvcmtzcGFjZXMsIEFwcHMgdW5kIGxhdWZlbmRlbiBQcm96ZXNzZSBiZWVuZGV0LlwiLFwiYmFja1wiOlwiWnVyw7xja1wiLFwiZm9yd2FyZFwiOlwiV2VpdGVyXCIsXCJyZWxvYWRcIjpcIk5ldSBsYWRlblwiLFwiZ3JlZW5cIjpcIkdyw7xuXCIsXCJwdXJwbGVcIjpcIkxpbGFcIixcIm9yYW5nZVwiOlwiT3JhbmdlXCIsXCJyZWRcIjpcIlJvdFwiLFwicGlua1wiOlwiUGlua1wiLFwieWVsbG93XCI6XCJHZWxiXCIsXCJ0aGVtZS5saWdodFwiOlwiSGVsbFwiLFwidGhlbWUuZGFya1wiOlwiRHVua2VsXCIsXCJ0aGVtZS5zeXN0ZW1cIjpcIlN5bmNocm9uaXNpZXJ1bmcgbWl0IE9TLUVpbnN0ZWxsdW5nXCIsXCJ0b29sYmFyLmhpZGVUYWJzXCI6XCJUYWJzIGF1c2JsZW5kZW5cIixcInRvb2xiYXIuc2hvd1RhYnNcIjpcIlRhYnMgYW56ZWlnZW5cIixcInRvb2xiYXIubG9ja1wiOlwiU3BlcnJlblwiLFwidG9vbGJhci51bmxvY2tcIjpcIkZyZWlzY2hhbHRlblwiLFwidG9vbGJhci5jb2xvckxpbmtpbmdcIjpcIkZhcmJ2ZXJrbsO8cGZ1bmdcIixcInRvb2xiYXIuY2hhbmdlTGF5b3V0XCI6XCJMYXlvdXQgw6RuZGVyblwiLFwidG9vbGJhci5zYXZlTWVudVwiOlwiTWVuw7wgc3BlaWNoZXJuXCIsXCJ0b29sYmFyLm1heGltaXplV2luZG93XCI6XCJGZW5zdGVyIG1heGltaWVyZW5cIixcInRvb2xiYXIucmVzdG9yZVdpbmRvd1wiOlwiRmVuc3RlciB3aWVkZXJoZXJzdGVsbGVuXCIsXCJ0b29sYmFyLm1pbmltaXplV2luZG93XCI6XCJGZW5zdGVyIG1pbmltaWVyZW5cIixcImNoYW5nZUxheW91dC5mdWxsV2lkdGhcIjpcIlZvbGxlIEJyZWl0ZVwiLFwiY2hhbmdlTGF5b3V0LmNvbHVtbnNcIjpcIlNwYWx0ZW5cIixcImNoYW5nZUxheW91dC5Sb3dzXCI6XCJaZWlsZW5cIixcImNoYW5nZUxheW91dC5HcmlkXCI6XCJSYXN0ZXJcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU3dpdGNoZWRcIjpcIldvcmtzcGFjZSBnZXdlY2hzZWx0XCIsXCJzdWNjZXNzSW5kaWNhdG9yLmhpZGRlblwiOlwiVGFicyBzaW5kIGF1c2dlYmxlbmRldFwiLFwic3VjY2Vzc0luZGljYXRvci5zaG93blwiOlwiVGFicyB3ZXJkZW4gYW5nZXplaWd0XCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxvY2tlZFwiOlwiU2VpdGUgaXN0IGdlc3BlcnJ0XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnVubG9ja2VkXCI6XCJTZWl0ZSBpc3QgZnJlaWdlc2NoYWx0ZXRcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRcIjpcIldvcmtzcGFjZSBnZXNwZWljaGVydFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTYXZlZEFzXCI6XCJXb3Jrc3BhY2UgZ2VzcGVpY2hlcnQgYWxzIHt7d29ya3NwYWNlfX1cIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlUmVuYW1lZFwiOlwiV29ya3NwYWNlIHVtYmVuYW5udFwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlU2F2ZWRcIjpcIlNlaXRlIGdlc3BlaWNoZXJ0XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBoYXMgYmVlbiBzYXZlZC4gREVcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUNvcHlTYXZlZFwiOlwiU2VpdGUgZ2VzcGVpY2hlcnQgYWxzIHt7dGl0bGV9fVwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlUmVuYW1lZFwiOlwiU2VpdGUgdW1iZW5hbm50XCIsXCJzdWNjZXNzSW5kaWNhdG9yLmNvbnRleHRHcm91cEFwcGxpZWRcIjpcIkFuZ2V3YW5kdGUgS29udGV4dGdydXBwZVwiLFwic3VjY2Vzc0luZGljYXRvci5uYW1lZENvbnRleHRHcm91cEFwcGxpZWRcIjpcInt7Y29sb3JOYW1lfX0gYW5nZXdhbmR0ZSBLb250ZXh0Z3J1cHBlXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdSZW1vdmVkXCI6XCJBbnNpY2h0IGF1cyBkZXIgS29udGV4dGdydXBwZSBlbnRmZXJudFwiLFwic3VjY2Vzc0luZGljYXRvci52aWV3c1JlbW92ZWRcIjpcIkFuc2ljaHRlbiBhdXMgZGVyIEtvbnRleHRncnVwcGUgZW50ZmVybnRcIixcInN1Y2Nlc3NJbmRpY2F0b3IubGF5b3V0QXBwbGllZFwiOlwie3tsYXlvdXROYW1lfX0gYW5nZXdhbmR0ZXMgTGF5b3V0XCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZURlbGV0ZWRcIjpcIldvcmtzcGFjZSBnZWzDtnNjaHRcIixcImVycm9ySW5kaWNhdG9yLnBhZ2VTYXZlRmFpbGVkXCI6XCJTZWl0ZSBrb25udGUgbmljaHQgZ2VzcGVpY2hlcnQgd2VyZGVuXCIsXCJlcnJvckluZGljYXRvci53b3Jrc3BhY2VTYXZlRmFpbGVkXCI6XCJXb3Jrc3BhY2Uga29ubnRlIG5pY2h0IGdlc3BlaWNoZXJ0IHdlcmRlblwiLFwiZXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVQYWdlXCI6XCJTZWl0ZSBrYW5uIG5pY2h0IGR1cGxpemllcnQgd2VyZGVuXCIsXCJpbmZvSW5kaWNhdG9yLmNvbG9yTGlua0F0dGVtcHRcIjpcIldpciBoYWJlbiB2ZXJzdWNodCwgZGllc2VtIFRhYiBlaW5lIEZhcmJlIHp1b3JkbmVuLCBhYmVyIGRlciBFaWdlbnTDvG1lciBkZXIgV2Vic2l0ZS9kZXMgSW5oYWx0cyBoYXQgc2llIG5vY2ggbmljaHQgYWt0aXZpZXJ0XCIsXCJnbG9iYWwuY2FuY2VsXCI6XCJBYmJyZWNoZW5cIixcImdsb2JhbC5jb25maXJtXCI6XCJCZXN0w6R0aWdlblwiLFwiZ2xvYmFsLnNhdmVcIjpcIlNwZWljaGVyblwiLFwiZ2xvYmFsLmRlbGV0ZVwiOlwiRGVsZXRlIERFXCIsXCJhcHBSZXN1bHRzLmhlYWRlclwiOlwiRmVhdHVyZWQgQ29udGVudCBEQ1wiLFwicmVjZW50bHlWaXNpdGVkLmhlYWRlclwiOlwiUmVjZW50bHkgdmlzaXRlZCBEQ1wiLFwibGFuZGluZ1BhZ2Uuc3ViaGVhZGVyXCI6XCJBcHBzIGFuZCB3ZWJzaXRlcyBzZWxlY3RlZCBieSBhbiBhZG1pbiB3aWxsIHNob3cgaGVyZSBERVwiLFwiYXJpYS5vcGVuQnJvd3NlclwiOlwiQnJvd3Nlci1NZW7DvCDDtmZmbmVuXCIsXCJhcmlhLmJyb3dzZXJUYWJzXCI6XCJCcm93c2VyLVRhYlwiLFwiYXJpYS52aWV3VGFiXCI6XCJUYWIg4oCeQW5zaWNodOKAnCBmw7xyIHt7dGl0bGV9fVwiLFwiYXJpYS5jbG9zZVBhZ2VcIjpcIkJ1dHRvbiDigJ5TZWl0ZSBzY2hsaWXDn2Vu4oCcIGbDvHIge3t0aXRsZX19XCIsXCJhcmlhLmNsb3NlVGFiXCI6XCJUYWIgc2NobGllw59lbiB7e3RpdGxlfX1cIixcImFyaWEudGl0bGVcIjpcIkJlemVpY2hudW5nXCIsXCJhcmlhLmNsb3NlQ29udGV4dEdyb3VwXCI6XCJWZXJ3ZW5kZW4gU2llIGRpZSBFc2NhcGUtVGFzdGUsIHVtIGRlbiBEaWFsb2cgenVyIEF1c3dhaGwgdm9uIEtvbnRleHRncnVwcGVuIHp1IHNjaGxpZcOfZW5cIixcImFyaWEuY29sb3JMaW5raW5nXCI6XCJGYXJidmVya27DvHBmdW5nIGVpbi0gb2RlciBhdXNibGVuZGVuXCIsXCJhcmlhLmFwcGx5Q29sb3JMaW5raW5nXCI6XCJCaXR0ZSB3w6RobGVuIFNpZSBlaW5lIEFuc2ljaHQsIHVtIGRpZSBGYXJidmVya27DvHBmdW5nIGFuenV3ZW5kZW5cIixcImFyaWEuYXNzaWduQ29sb3JMaW5raW5nQ3VycmVudFZpZXdcIjpcIkFrdHVlbGxlIEFuc2ljaHQsIGRpZSBkZXIgS29udGV4dGdydXBwZSB7e25hbWV9fSB6dWdlb3JkbmV0IGlzdFwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld3NcIjpcIkFrdHVlbGxlIEFuc2ljaHRlbiwgZGllIGRlciBLb250ZXh0Z3J1cHBlIHt7bmFtZX19IHp1Z2VvcmRuZXQgc2luZFwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3XCI6XCJBa3RpdmUgQW5zaWNodCBhdWYgZGllIEtvbnRleHRncnVwcGUge3tuYW1lfX0gc2V0emVuXCIsXCJhcmlhLnNldENvbG9yTGlua2luZ0FjdGl2ZVZpZXdzXCI6XCJBa3RpdmUgQW5zaWNodGVuIGF1ZiBkaWUgS29udGV4dGdydXBwZSB7e25hbWV9fSBzZXR6ZW5cIixcImFyaWEuZXNjYXBlTGF5b3V0RGlhbG9nXCI6XCJWZXJ3ZW5kZW4gU2llIGRpZSBFc2NhcGUtVGFzdGUsIHVtIGRlbiBEaWFsb2cgenVyIExheW91dMOkbmRlcnVuZyB6dSBzY2hsaWXDn2VuXCIsXCJnbG9iYWwuc3VwZXJ0YWJcIjpcIlN1cGVydGFiIERFXCIsXCJnbG9iYWwudGFiXCI6XCJUYWIgREVcIixcImJvb2ttYXJrcy5lZGl0Qm9va21hcmtcIjpcIkVkaXQgQm9va21hcmsgREVcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkXCI6XCJCb29rbWFyayBhZGRlZCBERVwiLFwiYm9va21hcmtzLmRvbmVcIjpcIkRvbmUgREVcIixcImJvb2ttYXJrcy5yZW1vdmVcIjpcIlJlbW92ZSBERVwiLFwiYm9va21hcmtzLmJvb2ttYXJrc1BhbmVsXCI6XCJCb29rbWFya3MgUGFuZWwgREVcIixcImJvb2ttYXJrcy5jbG9zZVBhbmVsXCI6XCJDbG9zZSBCb29rbWFya3MgUGFuZWwgREVcIixcImJvb2ttYXJrcy5ib29rbWFya3NcIjpcIkJvb2ttYXJrcyBERVwiLFwiYm9va21hcmtzLmFsbEJvb2ttYXJrc1wiOlwiQWxsIEJvb2ttYXJrcyBERVwiLFwiYm9va21hcmtzLmZhdm9yaXRlc1wiOlwiRmF2b3JpdGVzIERFXCIsXCJib29rbWFya3Muc2VhcmNoQm9va21hcmtzXCI6XCJTZWFyY2ggQm9va21hcmtzIERFXCIsXCJib29rbWFya3MuY2xlYXJTZWFyY2hJbnB1dFwiOlwiQ2xlYXIgU2VhcmNoIElucHV0IERFXCIsXCJib29rbWFya3MuY3JlYXRlRm9sZGVyXCI6XCJDcmVhdGUgTmV3IEZvbGRlciBERVwiLFwiYm9va21hcmtzLmV4aXRGb2xkZXJcIjpcIkV4aXQgRm9sZGVyIERFXCIsXCJib29rbWFya3MubmV3Rm9sZGVyXCI6XCJOZXcgRm9sZGVyIERFXCIsXCJib29rbWFya3MubmFtZWRGb2xkZXJcIjpcInt7bmFtZX19IEZvbGRlciBERVwiLFwiYm9va21hcmtzLmJvb2ttYXJrU2V0dGluZ3NcIjpcInt7bmFtZX19IEJvb2ttYXJrIFNldHRpbmdzIERFXCIsXCJib29rbWFya3MuZm9sZGVyU2V0dGluZ3NcIjpcInt7bmFtZX19IEZvbGRlciBTZXR0aW5ncyBERVwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kXCI6XCJObyByZXN1bHRzIGZvdW5kIERFXCIsXCJib29rbWFya3Mubm9SZXN1bHRzRm91bmRTdWJ0ZXh0XCI6XCJUaGVyZSBhcmUgbm8gYm9va21hcmtzIHRoYXQgbWF0Y2ggeW91ciBzZWFyY2ggREVcIixcImJvb2ttYXJrcy5ub3RoaW5nVG9TaG93XCI6XCJOb3RoaW5nIHRvIHNob3cgeWV0IERFXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1N1YnRleHRcIjpcIkFkZCBhIGJvb2ttYXJrIHRvIHRoaXMgZm9sZGVyIERFXCIsXCJib29rbWFya3MucmVzdWx0c0ZvdW5kSW5cIjpcIlJlc3VsdHMgZm91bmQgaW4ge3tuYW1lfX0gREVcIixcImJvb2ttYXJrcy5yZXN1bHRzSW5PdGhlckZvbGRlcnNcIjpcIlJlc3VsdHMgZm91bmQgaW4gb3RoZXIgZm9sZGVycyBERVwiLFwiYm9va21hcmtzLmFsbFJlc3VsdHNGb3VuZEluXCI6XCJBbGwgcmVzdWx0cyBmb3VuZCBpbiBERVwiLFwiYm9va21hcmtzLmVkaXROYW1lXCI6XCJFZGl0IE5hbWUgREVcIixcImJvb2ttYXJrcy5tb3ZlXCI6XCJNb3ZlIERFXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFRpdGxlXCI6XCJCb29rbWFyayBBZGRlZCBERVwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUb0ZvbGRlclwiOlwiWW91ciBib29rbWFyayB3YXMgYWRkZWQgdG8gXFxcXFwie3tmb2xkZXJOYW1lfX1cXFxcXCIgREVcIixcImJvb2ttYXJrcy5ib29rbWFya0VkaXRlZFRpdGxlXCI6XCJCb29rbWFyayBFZGl0ZWQgREVcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJcIjpcIlNhdmUgU3VwZXJ0YWIgREVcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBcy4uLiBERVwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmR1cGxpY2F0ZVwiOlwiRHVwbGljYXRlIERFXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZGVsZXRlU3VwZXJ0YWJcIjpcIkRlbGV0ZSBTdXBlcnRhYiBERVwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51Lm5ld1RhYlwiOlwiTmV3IFRhYiBERVwiLFwiZW50ZXJwcmlzZVNhdmVNZW51LnNhdmVTdXBlcnRhYkFzXCI6XCJTYXZlIFN1cGVydGFiIEFzIERFXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnJlbmFtZVN1cGVydGFiXCI6XCJSZW5hbWUgREVcIixcImVudGVycHJpc2VTYXZlTW9kYWwudW5zYXZlZENoYW5nZXNcIjpcIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGlzIFRhYi4gREVcIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiBERVwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVN1cGVydGFiXCI6XCJDbG9zZSBTdXBlcnRhYiBERVwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5zYXZlU3VwZXJ0YWJDb3VudFwiOlwiU2F2ZSB7e2NvdW50fX0gU3VwZXJ0YWJzIGJlZm9yZSBjbG9zaW5nPyBERVwiLFwiZW50ZXJwcmlzZU1vZGFsLmRpc2NhcmRTdXBlcnRhYldhcm5pbmdcIjpcIkFueSB1bnNhdmVkIGNoYW5nZXMgdG8gdGhpcyBTdXBlcnRhYiB3aWxsIGJlIGxvc3QuIERFXCIsXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJcIjpcIkRlbGV0ZSB0aGUgXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiPyBERVwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiV2FybmluZ1wiOlwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIFN1cGVydGFiPyBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lIGFuZCBpcyBwZXJtYW5lbnQuIERFXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYlNhdmVkXCI6XCJTdXBlcnRhYiBTYXZlZCBERVwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYiBoYXMgYmVlbiBzYXZlZC4gREVcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiRGVsZXRlZFwiOlwiU3VwZXJ0YWIgRGVsZXRlZCBERVwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuRGVsZXRlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiIGhhcyBiZWVuIGRlbGV0ZWQuIERFXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVUYWJcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgVGFiIERFXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVTdXBlcnRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBTdXBlcnRhYiBERVwiLFwiZW50ZXJwcmlzZUNvbW1hbmRCYXIuc3dpdGNoVG9TdXBlcnRhYlwiOlwiU3dpdGNoIHRvIFN1cGVydGFiIERFXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5nb1RvXCI6XCJHbyB0byB7e3R5cGV9fSBERVwiLFwiY29udGV4dE1lbnUucXVpdEVudGVycHJpc2VCcm93c2VyXCI6XCJRdWl0IERFXCJ9JyksVm49SlNPTi5wYXJzZSgne1wiY29udGV4dE1lbnUubmV3V2luZG93XCI6XCLmlrDjgZfjgYTjgqbjgqPjg7Pjg4njgqZcIixcImNvbnRleHRNZW51Lm5ld1BhZ2VcIjpcIuaWsOOBl+OBhOODmuODvOOCuFwiLFwiY29udGV4dE1lbnUucmVzdG9yZVwiOlwi5pyA5b6M44Gr5L+d5a2Y44GV44KM44Gf5aSJ5pu044Gr5oi744GZXCIsXCJjb250ZXh0TWVudS5zd2l0Y2hXb3Jrc3BhY2VcIjpcIuODr+ODvOOCr+OCueODmuODvOOCueOBq+WIh+OCiuabv+OBiOOCi1wiLFwiY29udGV4dE1lbnUuYXBwZWFyYW5jZVwiOlwi5aSW6KazXCIsXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlXCI6XCLjg6/jg7zjgq/jgrnjg5rjg7zjgrnjgpLkv53lrZhcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwi44Ov44O844Kv44K544Oa44O844K544KS5Yil5ZCN44Gn5L+d5a2YLi4uXCIsXCJjb250ZXh0TWVudS5yZW5hbWVXb3Jrc3BhY2VcIjpcIuODr+ODvOOCr+OCueODmuODvOOCueWQjeOCkuWkieabtFwiLFwiY29udGV4dE1lbnUuZGVsZXRlV29ya3NwYWNlXCI6XCLjg6/jg7zjgq/jgrnjg5rjg7zjgrnjgpLliYrpmaRcIixcImNvbnRleHRNZW51LmRvd25sb2Fkc1wiOlwi44OA44Km44Oz44Ot44O844OJXCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZVwiOlwi44Oa44O844K444KS5L+d5a2YXCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZUFzXCI6XCLjg5rjg7zjgrjjgpLliKXlkI3jgafkv53lrZguLi5cIixcImNvbnRleHRNZW51LnByaW50XCI6XCLljbDliLcuLi5cIixcImNvbnRleHRNZW51LnByaW50U2NyZWVuXCI6XCLjg5fjg6rjg7Pjg4jjgrnjgq/jg6rjg7zjg7NcIixcImNvbnRleHRNZW51LmNsb3NlV2luZG93XCI6XCLjgqbjgqPjg7Pjg4njgqbjgpLplonjgZjjgotcIixcImNvbnRleHRNZW51Lm9wZW5TdG9yZWZyb250XCI6XCLjgrnjg4jjgqLjg5Xjg63jg7Pjg4jjgpLplovjgY9cIixcImNvbnRleHRNZW51LnF1aXRQbGF0Zm9ybVwiOlwi44OX44Op44OD44OI44OV44Kp44O844Og44KS57WC5LqG44GZ44KLXCIsXCJjb250ZXh0TWVudS5uZXdWaWV3XCI6XCLmlrDjgZfjgYTjg5Pjg6Xjg7xcIixcImNvbnRleHRNZW51Lm9wZW5WaWV3XCI6XCLjg4fjg5Xjgqnjg6vjg4jjga7jgqbjgqfjg5bjg5bjg6njgqbjgrbjg7zjgafjg5Pjg6Xjg7zjgpLplovjgY9cIixcImNvbnRleHRNZW51Lm9wZW5WaWV3c1wiOlwi44OH44OV44Kp44Or44OI44Gu44Km44Kn44OW44OW44Op44Km44K244O844Gn44OT44Ol44O844KS6ZaL44GPXCIsXCJjb250ZXh0TWVudS5yZWxvYWRcIjpcIlJlbG9hZCBKUFwiLFwiY29udGV4dE1lbnUucmVsb2FkVmlld1wiOlwi44OT44Ol44O844KS44Oq44Ot44O844OJXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3c1wiOlwi44OT44Ol44O844KS44Oq44Ot44O844OJXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBKUFwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld1wiOlwi44OT44Ol44O844KS6KSH6KO9XCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVWaWV3c1wiOlwi44OT44Ol44O844KS6KSH6KO9XCIsXCJjb250ZXh0TWVudS5hZGRWaWV3XCI6XCLjg5Pjg6Xjg7zjgpLjg4Hjg6Pjg43jg6vjgavov73liqBcIixcImNvbnRleHRNZW51LmFkZFZpZXdzXCI6XCLjg5Pjg6Xjg7zjgpLjg4Hjg6Pjg43jg6vjgavov73liqBcIixcImNvbnRleHRNZW51LnJlbW92ZVZpZXdcIjpcIuODgeODo+ODjeODq+OBi+OCieODk+ODpeODvOOCkuWJiumZpFwiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld3NcIjpcIuODgeODo+ODjeODq+OBi+OCieODk+ODpeODvOOCkuWJiumZpFwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3XCI6XCLjg5Pjg6Xjg7zjgpLplonjgZjjgotcIixcImNvbnRleHRNZW51LmNsb3NlVmlld3NcIjpcIuODk+ODpeODvOOCkumWieOBmOOCi1wiLFwiY29udGV4dE1lbnUuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiBKUFwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlUGFnZVwiOlwi44Oa44O844K444KS6KSH6KO9XCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50XCI6XCLljbDliLdcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRBbGxcIjpcIuOBmeOBueOBpuOCkuWNsOWIt1wiLFwic2F2ZU1lbnUuc2F2ZVdvcmtzcGFjZUFzXCI6XCLjg6/jg7zjgq/jgrnjg5rjg7zjgrnjgpLliKXlkI3jgafkv53lrZhcIixcInNhdmVNZW51LnNhdmVQYWdlQXNcIjpcIuODmuODvOOCuOOCkuWIpeWQjeOBp+S/neWtmFwiLFwic2F2ZU1vZGFsLmVudGVyVmFsdWVcIjpcIlBsZWFzZSBlbnRlciBhIHZhbHVlIEpQXCIsXCJzYXZlTW9kYWwuYWxyZWFkeUV4aXN0c1wiOlwie3t0aXRsZX1944Gv44GZ44Gn44Gr5a2Y5Zyo44GX44Gm44GE44G+44GZ44CCXCIsXCJzYXZlTW9kYWwucGxlYXNlRW50ZXJWYWxpZE5hbWVcIjpcIuacieWKueOBquWQjeWJjeOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhFwiLFwic2F2ZU1vZGFsLnJlbmFtZVBhZ2VcIjpcIuODmuODvOOCuOWQjeOCkuWkieabtFwiLFwic2F2ZU1vZGFsLmNsb3NlUGFnZVwiOlwi44Oa44O844K444KS6ZaJ44GY44KLXCIsXCJzYXZlTW9kYWwuZGlzY2FyZENoYW5nZXNcIjpcIuWkieabtOOCkuegtOajhFwiLFwic2F2ZU1vZGFsLmRpc2NhcmRBbGxcIjpcIuOBmeOBueOBpuegtOajhFwiLFwic2F2ZU1vZGFsLnNhdmVBbGxcIjpcIuOBmeOBueOBpuS/neWtmFwiLFwic2F2ZU1vZGFsLnNhdmVQYWdlc0NvdW50XCI6XCLplonjgZjjgovliY3jgavvvIh7e2NvdW50fX3vvInjgaTjga7jg5rjg7zjgrjjgpLkv53lrZjjgZfjgb7jgZnjgYvvvJ9cIixcImRlZmF1bHRQYWdlVGl0bGVcIjpcIlVudGl0bGVkIFBhZ2UgSlBcIixcImVudGVycHJpc2VEZWZhdWx0UGFnZVRpdGxlXCI6XCJVbnRpdGxlZCBTdXBlcnRhYiBKUFwiLFwiYWRkTmV3UGFnZVwiOlwiTmV3IFBhZ2UgSlBcIixcImFkZE5ld1RhYlwiOlwi5paw44GX44GE44K/44OW44KS6L+95YqgXCIsXCJhZGROZXdWaWV3XCI6XCLmlrDjgZfjgYTjg5Pjg6Xjg7xcIixcInJlc3RvcmVNb2RhbFwiOlwi5pys5b2T44Gr5pyA5b6M44Gr5L+d5a2Y44GV44KM44Gf5aSJ5pu044Gr5oi744GX44G+44GZ44GL77yfXCIsXCJtb2RhbC5kaXNjYXJkV2FybmluZ1wiOlwi5L+d5a2Y44GV44KM44Gm44GE44Gq44GE5aSJ5pu044Gv56C05qOE44GV44KM44G+44GZXCIsXCJtb2RhbC5kaXNjYXJkUGFnZVdhcm5pbmdcIjpcIuS/neWtmOOBleOCjOOBpuOBhOOBquOBhOOBk+OBruODmuODvOOCuOOBuOOBruWkieabtOOBr+WkseOCj+OCjOOBvuOBmeOAglwiLFwibW9kYWwuc2F2ZUNoYW5nZXNQcm9tcHRcIjpcIumWieOBmOOCi+WJjeOBq+WkieabtOOCkuS/neWtmOOBl+OBvuOBmeOBi++8n1wiLFwibW9kYWwucGFnZUNsb3NlXCI6XCJQYWdlIENsb3NlIEpQXCIsXCJzd2l0Y2hXb3Jrc3BhY2VNb2RhbFwiOlwi5pys5b2T44Gre3t3b3Jrc3BhY2V9feOBq+WIh+OCiuabv+OBiOOBvuOBmeOBi++8n1wiLFwic3dpdGNoV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi5L+d5a2Y44GV44KM44Gm44GE44Gq44GE5aSJ5pu044Gv56C05qOE44GV44KM44G+44GZXCIsXCJkZWxldGVXb3Jrc3BhY2VNb2RhbFwiOlwi44GT44Gu44Ov44O844Kv44K544Oa44O844K544KS5rC45LmF44Gr5YmK6Zmk44GX44Gm44KC44KI44KN44GX44GE44Gn44GZ44GL77yfXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwie3t3b3Jrc3BhY2V9feOBqOOBhOOBhuWQjeWJjeOBruODr+ODvOOCr+OCueODmuODvOOCueOBjOOBmeOBp+OBq+WtmOWcqOOBl+OBvuOBmeOAgue9ruOBjeaPm+OBiOOBvuOBmeOBi++8n1wiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLndhcm5pbmcuYm9keVwiOlwi5ZCM44GY5ZCN5YmN44Gu44Ov44O844Kv44K544Oa44O844K544GM44GZ44Gn44Gr5a2Y5Zyo44GX44G+44GZ44CC572u44GN5o+b44GI44KL44Go44CB54++5Zyo44Gu5YaF5a6544Gv5LiK5pu444GN44GV44KM44G+44GZ44CCXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwucmVwbGFjZVwiOlwi572u44GN5o+b44GI44KLXCIsXCJjbG9zZVBsYXRmb3JtXCI6XCLjg5fjg6njg4Pjg4jjg5Xjgqnjg7zjg6DjgpLplonjgZjjgotcIixcImNsb3NlUGxhdGZvcm0ud29ya3NwYWNlXCI6XCJ7e3dvcmtzcGFjZX1944OX44Op44OD44OI44OV44Kp44O844Og44KS6ZaJ44GY44KLXCIsXCJjbG9zZVBsYXRmb3JtLndhcm5pbmdcIjpcIuODl+ODqeODg+ODiOODleOCqeODvOODoOOCkumWieOBmOOCi+OBqOOAgeWun+ihjOS4reOBruODr+ODvOOCr+OCueODmuODvOOCueOAgeOCouODl+ODquOAgeODl+ODreOCu+OCueOBjOOBmeOBueOBpumWieOBmOOBvuOBmeOAglwiLFwiYmFja1wiOlwi5oi744KLXCIsXCJmb3J3YXJkXCI6XCLpgLLjgoBcIixcInJlbG9hZFwiOlwi44Oq44Ot44O844OJXCIsXCJncmVlblwiOlwi44Kw44Oq44O844OzXCIsXCJwdXJwbGVcIjpcIuODkeODvOODl+ODq1wiLFwib3JhbmdlXCI6XCLjgqrjg6zjg7PjgrhcIixcInJlZFwiOlwi44Os44OD44OJXCIsXCJwaW5rXCI6XCLjg5Tjg7Pjgq9cIixcInllbGxvd1wiOlwi44Kk44Ko44Ot44O8XCIsXCJ0aGVtZS5saWdodFwiOlwi44Op44Kk44OIXCIsXCJ0aGVtZS5kYXJrXCI6XCLjg4Djg7zjgq9cIixcInRoZW1lLnN5c3RlbVwiOlwiT1Pjga7oqK3lrprjgajlkIzmnJ9cIixcInRvb2xiYXIuaGlkZVRhYnNcIjpcIuOCv+ODluOCkumdnuihqOekulwiLFwidG9vbGJhci5zaG93VGFic1wiOlwi44K/44OW44KS6KGo56S6XCIsXCJ0b29sYmFyLmxvY2tcIjpcIuODreODg+OCr1wiLFwidG9vbGJhci51bmxvY2tcIjpcIuODreODg+OCr+ino+mZpFwiLFwidG9vbGJhci5jb2xvckxpbmtpbmdcIjpcIuOCq+ODqeODvOODquODs+OCr1wiLFwidG9vbGJhci5jaGFuZ2VMYXlvdXRcIjpcIuODrOOCpOOCouOCpuODiOOCkuWkieabtFwiLFwidG9vbGJhci5zYXZlTWVudVwiOlwi44Oh44OL44Ol44O844KS5L+d5a2YXCIsXCJ0b29sYmFyLm1heGltaXplV2luZG93XCI6XCLjgqbjgqPjg7Pjg4njgqbjgpLmnIDlpKfljJbjgZnjgotcIixcInRvb2xiYXIucmVzdG9yZVdpbmRvd1wiOlwi44Km44Kj44Oz44OJ44Km44KS5b6p5YWDXCIsXCJ0b29sYmFyLm1pbmltaXplV2luZG93XCI6XCLjgqbjgqPjg7Pjg4njgqbjgpLmnIDlsI/ljJbjgZnjgotcIixcImNoYW5nZUxheW91dC5mdWxsV2lkdGhcIjpcIuWFqOW5hVwiLFwiY2hhbmdlTGF5b3V0LmNvbHVtbnNcIjpcIuWIl1wiLFwiY2hhbmdlTGF5b3V0LlJvd3NcIjpcIuihjFwiLFwiY2hhbmdlTGF5b3V0LkdyaWRcIjpcIuOCsOODquODg+ODiVwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTd2l0Y2hlZFwiOlwi44Ov44O844Kv44K544Oa44O844K544GM5YiH44KK5pu/44KP44KK44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmhpZGRlblwiOlwi44K/44OW44GM6Z2e6KGo56S644Gr44Gq44Gj44Gm44GE44G+44GZXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnNob3duXCI6XCLjgr/jg5bjgYzooajnpLrjgZXjgozjgabjgYTjgb7jgZlcIixcInN1Y2Nlc3NJbmRpY2F0b3IubG9ja2VkXCI6XCLjg5rjg7zjgrjjgYzjg63jg4Pjgq/jgZXjgozjgabjgYTjgb7jgZlcIixcInN1Y2Nlc3NJbmRpY2F0b3IudW5sb2NrZWRcIjpcIuODmuODvOOCuOOBruODreODg+OCr+OBjOino+mZpOOBleOCjOOBpuOBhOOBvuOBmVwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTYXZlZFwiOlwi44Ov44O844Kv44K544Oa44O844K544GM5L+d5a2Y44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkQXNcIjpcIuODr+ODvOOCr+OCueODmuODvOOCueOBjHt7d29ya3NwYWNlfX3jgajjgZfjgabkv53lrZjjgZXjgozjgb7jgZfjgZ9cIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlUmVuYW1lZFwiOlwi44Ov44O844Kv44K544Oa44O844K55ZCN44GM5aSJ5pu044GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VTYXZlZFwiOlwi44Oa44O844K444GM5L+d5a2Y44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBoYXMgYmVlbiBzYXZlZC4gSlBcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUNvcHlTYXZlZFwiOlwi44Oa44O844K444GMe3t0aXRsZX1944Go44GX44Gm5L+d5a2Y44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VSZW5hbWVkXCI6XCLjg5rjg7zjgrjlkI3jgYzlpInmm7TjgZXjgozjgb7jgZfjgZ9cIixcInN1Y2Nlc3NJbmRpY2F0b3IuY29udGV4dEdyb3VwQXBwbGllZFwiOlwi44Kz44Oz44OG44Kt44K544OI44Kw44Or44O844OX44GM6YGp55So44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLm5hbWVkQ29udGV4dEdyb3VwQXBwbGllZFwiOlwie3tjb2xvck5hbWV9feOCs+ODs+ODhuOCreOCueODiOOCsOODq+ODvOODl+OBjOmBqeeUqOOBleOCjOOBvuOBl+OBn1wiLFwic3VjY2Vzc0luZGljYXRvci52aWV3UmVtb3ZlZFwiOlwi44Kz44Oz44OG44Kt44K544OI44Kw44Or44O844OX44GL44KJ44OT44Ol44O844GM5YmK6Zmk44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdzUmVtb3ZlZFwiOlwi44Kz44Oz44OG44Kt44K544OI44Kw44Or44O844OX44GL44KJ44OT44Ol44O844GM5YmK6Zmk44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxheW91dEFwcGxpZWRcIjpcInt7bGF5b3V0TmFtZX1944Os44Kk44Ki44Km44OI44GM6YGp55So44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZURlbGV0ZWRcIjpcIuODr+ODvOOCr+OCueODmuODvOOCueOBjOWJiumZpOOBleOCjOOBvuOBl+OBn1wiLFwiZXJyb3JJbmRpY2F0b3IucGFnZVNhdmVGYWlsZWRcIjpcIuODmuODvOOCuOOCkuS/neWtmOOBp+OBjeOBvuOBm+OCk+OBp+OBl+OBn1wiLFwiZXJyb3JJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZUZhaWxlZFwiOlwi44Ov44O844Kv44K544Oa44O844K544KS5L+d5a2Y44Gn44GN44G+44Gb44KT44Gn44GX44GfXCIsXCJlcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVBhZ2VcIjpcIuODmuODvOOCuOOCkuikh+ijveOBp+OBjeOBvuOBm+OCk+OBp+OBl+OBn1wiLFwiaW5mb0luZGljYXRvci5jb2xvckxpbmtBdHRlbXB0XCI6XCLjgZPjga7jgr/jg5bjgpLjgqvjg6njg7zjg6rjg7Pjgq/jgZfjgojjgYbjgajjgZfjgb7jgZfjgZ/jgYzjgIHjgrXjgqTjg4gv44Kz44Oz44OG44Oz44OE44Gu44Kq44O844OK44O844GM44G+44Gg44GT44KM44KS5pyJ5Yq544Gr44GX44Gm44GE44G+44Gb44KTXCIsXCJnbG9iYWwuY2FuY2VsXCI6XCLjgq3jg6Pjg7Pjgrvjg6tcIixcImdsb2JhbC5jb25maXJtXCI6XCLnorroqo1cIixcImdsb2JhbC5zYXZlXCI6XCLkv53lrZhcIixcImdsb2JhbC5kZWxldGVcIjpcIkRlbGV0ZSBKUFwiLFwiYXBwUmVzdWx0cy5oZWFkZXJcIjpcIkZlYXR1cmVkIGNvbnRlbnQgSlBcIixcInJlY2VudGx5VmlzaXRlZC5oZWFkZXJcIjpcIlJlY2VudGx5IHZpc2l0ZWQgSlBcIixcImxhbmRpbmdQYWdlLnN1YmhlYWRlclwiOlwiQXBwcyBhbmQgd2Vic2l0ZXMgc2VsZWN0ZWQgYnkgYW4gYWRtaW4gd2lsbCBzaG93IGhlcmUgSlBcIixcImFyaWEub3BlbkJyb3dzZXJcIjpcIuODluODqeOCpuOCtuODvOODoeODi+ODpeODvOOCkumWi+OBj1wiLFwiYXJpYS5icm93c2VyVGFic1wiOlwi44OW44Op44Km44K244O844K/44OWXCIsXCJhcmlhLnZpZXdUYWJcIjpcInt7dGl0bGV9feOBruOCv+ODluOCkuihqOekulwiLFwiYXJpYS5jbG9zZVBhZ2VcIjpcInt7dGl0bGV9feOBruODmuODvOOCuOOCv+ODluODnOOCv+ODs+OCkumWieOBmOOCi1wiLFwiYXJpYS5jbG9zZVRhYlwiOlwie3t0aXRsZX1944K/44OW44KS6ZaJ44GY44KLXCIsXCJhcmlhLnRpdGxlXCI6XCLjgr/jgqTjg4jjg6tcIixcImFyaWEuY2xvc2VDb250ZXh0R3JvdXBcIjpcIuOCqOOCueOCseODvOODl+OCkuS9v+eUqOOBl+OBpuOAgeOCs+ODs+ODhuOCreOCueODiOOCsOODq+ODvOODl+mBuOaKnuODgOOCpOOCouODreOCsOOCkumWieOBmOOCi1wiLFwiYXJpYS5jb2xvckxpbmtpbmdcIjpcIuOCq+ODqeODvOODquODs+OCr+OBruihqOekui/pnZ7ooajnpLpcIixcImFyaWEuYXBwbHlDb2xvckxpbmtpbmdcIjpcIuOCq+ODqeODvOODquODs+OCr+OCkumBqeeUqOOBmeOCi+ODk+ODpeODvOOCkumBuOaKnuOBl+OBpuOBj+OBoOOBleOBhFwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld1wiOlwi54++5Zyo44Gu44OT44Ol44O844Gve3tuYW1lfX3jgrPjg7Pjg4bjgq3jgrnjg4jjgrDjg6vjg7zjg5fjgavlibLjgorlvZPjgabjgonjgozjgabjgYTjgb7jgZlcIixcImFyaWEuYXNzaWduQ29sb3JMaW5raW5nQ3VycmVudFZpZXdzXCI6XCLnj77lnKjjga7jg5Pjg6Xjg7zjga97e25hbWV9feOCs+ODs+ODhuOCreOCueODiOOCsOODq+ODvOODl+OBq+WJsuOCiuW9k+OBpuOCieOCjOOBpuOBhOOBvuOBmVwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3XCI6XCLjgqLjgq/jg4bjgqPjg5bjg5Pjg6Xjg7zjgpJ7e25hbWV9feOCs+ODs+ODhuOCreOCueODiOOCsOODq+ODvOODl+OBq+ioreWumlwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3c1wiOlwi44Ki44Kv44OG44Kj44OW44OT44Ol44O844KSe3tuYW1lfX3jgrPjg7Pjg4bjgq3jgrnjg4jjgrDjg6vjg7zjg5fjgavoqK3lrppcIixcImFyaWEuZXNjYXBlTGF5b3V0RGlhbG9nXCI6XCLjgqjjgrnjgrHjg7zjg5fjgpLkvb/nlKjjgZfjgabjgIHjg6zjgqTjgqLjgqbjg4jlpInmm7Tpgbjmip7jg4DjgqTjgqLjg63jgrDjgpLplonjgZjjgotcIixcImdsb2JhbC5zdXBlcnRhYlwiOlwiU3VwZXJ0YWIgSlBcIixcImdsb2JhbC50YWJcIjpcIlRhYiBKUFwiLFwiYm9va21hcmtzLmVkaXRCb29rbWFya1wiOlwiRWRpdCBCb29rbWFyayBKUFwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRcIjpcIkJvb2ttYXJrIGFkZGVkIEpQXCIsXCJib29rbWFya3MuZG9uZVwiOlwiRG9uZSBKUFwiLFwiYm9va21hcmtzLnJlbW92ZVwiOlwiUmVtb3ZlIEpQXCIsXCJib29rbWFya3MuYm9va21hcmtzUGFuZWxcIjpcIkJvb2ttYXJrcyBQYW5lbCBKUFwiLFwiYm9va21hcmtzLmNsb3NlUGFuZWxcIjpcIkNsb3NlIEJvb2ttYXJrcyBQYW5lbCBKUFwiLFwiYm9va21hcmtzLmJvb2ttYXJrc1wiOlwiQm9va21hcmtzIEpQXCIsXCJib29rbWFya3MuYWxsQm9va21hcmtzXCI6XCJBbGwgQm9va21hcmtzIEpQXCIsXCJib29rbWFya3MuZmF2b3JpdGVzXCI6XCJGYXZvcml0ZXMgSlBcIixcImJvb2ttYXJrcy5zZWFyY2hCb29rbWFya3NcIjpcIlNlYXJjaCBCb29rbWFya3MgSlBcIixcImJvb2ttYXJrcy5jbGVhclNlYXJjaElucHV0XCI6XCJDbGVhciBTZWFyY2ggSW5wdXQgSlBcIixcImJvb2ttYXJrcy5jcmVhdGVGb2xkZXJcIjpcIkNyZWF0ZSBOZXcgRm9sZGVyIEpQXCIsXCJib29rbWFya3MuZXhpdEZvbGRlclwiOlwiRXhpdCBGb2xkZXIgSlBcIixcImJvb2ttYXJrcy5uZXdGb2xkZXJcIjpcIk5ldyBGb2xkZXIgSlBcIixcImJvb2ttYXJrcy5uYW1lZEZvbGRlclwiOlwie3tuYW1lfX0gRm9sZGVyIEpQXCIsXCJib29rbWFya3MuYm9va21hcmtTZXR0aW5nc1wiOlwie3tuYW1lfX0gQm9va21hcmsgU2V0dGluZ3MgSlBcIixcImJvb2ttYXJrcy5mb2xkZXJTZXR0aW5nc1wiOlwie3tuYW1lfX0gRm9sZGVyIFNldHRpbmdzIEpQXCIsXCJib29rbWFya3Mubm9SZXN1bHRzRm91bmRcIjpcIk5vIHJlc3VsdHMgZm91bmQgSlBcIixcImJvb2ttYXJrcy5ub1Jlc3VsdHNGb3VuZFN1YnRleHRcIjpcIlRoZXJlIGFyZSBubyBib29rbWFya3MgdGhhdCBtYXRjaCB5b3VyIHNlYXJjaCBKUFwiLFwiYm9va21hcmtzLm5vdGhpbmdUb1Nob3dcIjpcIk5vdGhpbmcgdG8gc2hvdyB5ZXQgSlBcIixcImJvb2ttYXJrcy5ub3RoaW5nVG9TaG93U3VidGV4dFwiOlwiQWRkIGEgYm9va21hcmsgdG8gdGhpcyBmb2xkZXIgSlBcIixcImJvb2ttYXJrcy5yZXN1bHRzRm91bmRJblwiOlwiUmVzdWx0cyBmb3VuZCBpbiB7e25hbWV9fSBKUFwiLFwiYm9va21hcmtzLnJlc3VsdHNJbk90aGVyRm9sZGVyc1wiOlwiUmVzdWx0cyBmb3VuZCBpbiBvdGhlciBmb2xkZXJzIEpQXCIsXCJib29rbWFya3MuYWxsUmVzdWx0c0ZvdW5kSW5cIjpcIkFsbCByZXN1bHRzIGZvdW5kIGluIEpQXCIsXCJib29rbWFya3MuZWRpdE5hbWVcIjpcIkVkaXQgTmFtZSBKUFwiLFwiYm9va21hcmtzLm1vdmVcIjpcIk1vdmUgSlBcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkVGl0bGVcIjpcIkJvb2ttYXJrIEFkZGVkIEpQXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFRvRm9sZGVyXCI6XCJZb3VyIGJvb2ttYXJrIHdhcyBhZGRlZCB0byBcXFxcXCJ7e2ZvbGRlck5hbWV9fVxcXFxcIiBKUFwiLFwiYm9va21hcmtzLmJvb2ttYXJrRWRpdGVkVGl0bGVcIjpcIkJvb2ttYXJrIEVkaXRlZCBKUFwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYlwiOlwiU2F2ZSBTdXBlcnRhYiBKUFwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYkFzXCI6XCJTYXZlIFN1cGVydGFiIEFzLi4uIEpQXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZHVwbGljYXRlXCI6XCJEdXBsaWNhdGUgSlBcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5kZWxldGVTdXBlcnRhYlwiOlwiRGVsZXRlIFN1cGVydGFiIEpQXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUubmV3VGFiXCI6XCJOZXcgVGFiIEpQXCIsXCJlbnRlcnByaXNlU2F2ZU1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcIlNhdmUgU3VwZXJ0YWIgQXMgSlBcIixcImVudGVycHJpc2VTYXZlTW9kYWwucmVuYW1lU3VwZXJ0YWJcIjpcIlJlbmFtZSBKUFwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC51bnNhdmVkQ2hhbmdlc1wiOlwiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoaXMgVGFiLiBKUFwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVRhYlwiOlwiQ2xvc2UgVGFiIEpQXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlU3VwZXJ0YWJcIjpcIkNsb3NlIFN1cGVydGFiIEpQXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnNhdmVTdXBlcnRhYkNvdW50XCI6XCJTYXZlIHt7Y291bnR9fSBTdXBlcnRhYnMgYmVmb3JlIGNsb3Npbmc/IEpQXCIsXCJlbnRlcnByaXNlTW9kYWwuZGlzY2FyZFN1cGVydGFiV2FybmluZ1wiOlwiQW55IHVuc2F2ZWQgY2hhbmdlcyB0byB0aGlzIFN1cGVydGFiIHdpbGwgYmUgbG9zdC4gSlBcIixcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYlwiOlwiRGVsZXRlIHRoZSBcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWI/IEpQXCIsXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJXYXJuaW5nXCI6XCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgU3VwZXJ0YWI/IFRoaXMgYWN0aW9uIGNhbm5vdCBiZSB1bmRvbmUgYW5kIGlzIHBlcm1hbmVudC4gSlBcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiU2F2ZWRcIjpcIlN1cGVydGFiIFNhdmVkIEpQXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkhhc0JlZW5TYXZlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiIGhhcyBiZWVuIHNhdmVkLiBKUFwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJEZWxldGVkXCI6XCJTdXBlcnRhYiBEZWxldGVkIEpQXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkhhc0JlZW5EZWxldGVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gZGVsZXRlZC4gSlBcIixcImVudGVycHJpc2VFcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBUYWIgSlBcIixcImVudGVycHJpc2VFcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVN1cGVydGFiXCI6XCJGYWlsZWQgdG8gZHVwbGljYXRlIFN1cGVydGFiIEpQXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5zd2l0Y2hUb1N1cGVydGFiXCI6XCJTd2l0Y2ggdG8gU3VwZXJ0YWIgSlBcIixcImVudGVycHJpc2VDb21tYW5kQmFyLmdvVG9cIjpcIkdvIHRvIHt7dHlwZX19IEpQXCIsXCJjb250ZXh0TWVudS5xdWl0RW50ZXJwcmlzZUJyb3dzZXJcIjpcIlF1aXQgSlBcIn0nKSxIbj1KU09OLnBhcnNlKCd7XCJjb250ZXh0TWVudS5uZXdXaW5kb3dcIjpcIuyDiCDssL1cIixcImNvbnRleHRNZW51Lm5ld1BhZ2VcIjpcIuyDiCDtjpjsnbTsp4BcIixcImNvbnRleHRNZW51LnJlc3RvcmVcIjpcIuuniOyngOunieycvOuhnCDsoIDsnqXtlZwg67OA6rK9IOyCrO2VreycvOuhnCDrs7Xsm5BcIixcImNvbnRleHRNZW51LnN3aXRjaFdvcmtzcGFjZVwiOlwi7J6R7JeFIOqzteqwhCDsoITtmZhcIixcImNvbnRleHRNZW51LmFwcGVhcmFuY2VcIjpcIuuqqOyWkVwiLFwiY29udGV4dE1lbnUuc2F2ZVdvcmtzcGFjZVwiOlwi7J6R7JeFIOqzteqwhCDsoIDsnqVcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwi64uk66W4IOydtOumhOycvOuhnCDsnpHsl4Ug6rO16rCEIOyggOyepS4uLlwiLFwiY29udGV4dE1lbnUucmVuYW1lV29ya3NwYWNlXCI6XCLsnpHsl4Ug6rO16rCEIOydtOumhCDrsJTqvrjquLBcIixcImNvbnRleHRNZW51LmRlbGV0ZVdvcmtzcGFjZVwiOlwi7J6R7JeFIOqzteqwhCDsgq3soJxcIixcImNvbnRleHRNZW51LmRvd25sb2Fkc1wiOlwi64uk7Jq066Gc65OcXCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZVwiOlwi7Y6Y7J207KeAIOyggOyepVwiLFwiY29udGV4dE1lbnUuc2F2ZVBhZ2VBc1wiOlwi64uk66W4IOydtOumhOycvOuhnCDtjpjsnbTsp4Ag7KCA7J6lLi4uXCIsXCJjb250ZXh0TWVudS5wcmludFwiOlwi7J247IeELi4uXCIsXCJjb250ZXh0TWVudS5wcmludFNjcmVlblwiOlwi7ZmU66m0IOyduOyHhFwiLFwiY29udGV4dE1lbnUuY2xvc2VXaW5kb3dcIjpcIuywvSDri6vquLBcIixcImNvbnRleHRNZW51Lm9wZW5TdG9yZWZyb250XCI6XCLrp6TsnqUg7Je06riwXCIsXCJjb250ZXh0TWVudS5xdWl0UGxhdGZvcm1cIjpcIu2UjOueq+2PvCDsooXro4xcIixcImNvbnRleHRNZW51Lm5ld1ZpZXdcIjpcIuyDiCDrt7BcIixcImNvbnRleHRNZW51Lm9wZW5WaWV3XCI6XCLquLDrs7gg7Ju5IOu4jOudvOyasOyggOuhnCDrt7Ag7Je06riwXCIsXCJjb250ZXh0TWVudS5vcGVuVmlld3NcIjpcIuq4sOuzuCDsm7kg67iM65287Jqw7KCA66GcIOu3sCDsl7TquLBcIixcImNvbnRleHRNZW51LnJlbG9hZFwiOlwiUmVsb2FkIEtSXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3XCI6XCLrt7Ag64uk7IucIOuhnOuTnFwiLFwiY29udGV4dE1lbnUucmVsb2FkVmlld3NcIjpcIuu3sCDri6Tsi5wg66Gc65OcXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBLUlwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld1wiOlwi67ewIOuzteygnFwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld3NcIjpcIuu3sCDrs7XsoJxcIixcImNvbnRleHRNZW51LmFkZFZpZXdcIjpcIuyxhOuEkOyXkCDrt7Ag7LaU6rCAXCIsXCJjb250ZXh0TWVudS5hZGRWaWV3c1wiOlwi7LGE64SQ7JeQIOu3sCDstpTqsIBcIixcImNvbnRleHRNZW51LnJlbW92ZVZpZXdcIjpcIuyxhOuEkOyXkOyEnCDrt7Ag7KCc6rGwXCIsXCJjb250ZXh0TWVudS5yZW1vdmVWaWV3c1wiOlwi7LGE64SQ7JeQ7IScIOu3sCDsoJzqsbBcIixcImNvbnRleHRNZW51LmNsb3NlVmlld1wiOlwi67ewIOuLq+q4sFwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3c1wiOlwi67ewIOuLq+q4sFwiLFwiY29udGV4dE1lbnUuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiBLUlwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlUGFnZVwiOlwi7Y6Y7J207KeAIOuzteygnFwiLFwiY29udGV4dE1lbnUuc3VibWVudS5wcmludFwiOlwi7J247IeEXCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50QWxsXCI6XCLrqqjrkZAg7J247IeEXCIsXCJzYXZlTWVudS5zYXZlV29ya3NwYWNlQXNcIjpcIuuLpOuluCDsnbTrpoTsnLzroZwg7J6R7JeFIOqzteqwhCDsoIDsnqVcIixcInNhdmVNZW51LnNhdmVQYWdlQXNcIjpcIuuLpOuluCDsnbTrpoTsnLzroZwg7Y6Y7J207KeAIOyggOyepVwiLFwic2F2ZU1vZGFsLmVudGVyVmFsdWVcIjpcIlBsZWFzZSBlbnRlciBhIHZhbHVlIEtSXCIsXCJzYXZlTW9kYWwuYWxyZWFkeUV4aXN0c1wiOlwie3t0aXRsZX197J20KOqwgCkg7J2066+4IOyhtOyerO2VqeuLiOuLpC5cIixcInNhdmVNb2RhbC5wbGVhc2VFbnRlclZhbGlkTmFtZVwiOlwi7Jyg7Zqo7ZWcIOydtOumhOydhCDsnoXroKXtlZjsi63si5zsmKQuXCIsXCJzYXZlTW9kYWwucmVuYW1lUGFnZVwiOlwi7Y6Y7J207KeAIOydtOumhCDrsJTqvrjquLBcIixcInNhdmVNb2RhbC5jbG9zZVBhZ2VcIjpcIu2OmOydtOyngCDri6vquLBcIixcInNhdmVNb2RhbC5kaXNjYXJkQ2hhbmdlc1wiOlwi67OA6rK9IOyCrO2VrSDtj5DquLBcIixcInNhdmVNb2RhbC5kaXNjYXJkQWxsXCI6XCLrqqjrkZAg7Y+Q6riwXCIsXCJzYXZlTW9kYWwuc2F2ZUFsbFwiOlwi66qo65GQIOyggOyepVwiLFwic2F2ZU1vZGFsLnNhdmVQYWdlc0NvdW50XCI6XCLri6vquLAg7KCE7JeQIO2OmOydtOyngCh7e2NvdW50fX3qsJwp66W8IOyggOyepe2VmOyLnOqyoOyKteuLiOq5jD9cIixcImRlZmF1bHRQYWdlVGl0bGVcIjpcIlVudGl0bGVkIFBhZ2UgS1JcIixcImVudGVycHJpc2VEZWZhdWx0UGFnZVRpdGxlXCI6XCJVbnRpdGxlZCBTdXBlcnRhYiBLUlwiLFwiYWRkTmV3UGFnZVwiOlwiTmV3IFBhZ2UgS1JcIixcImFkZE5ld1RhYlwiOlwi7IOIIO2DrSDstpTqsIBcIixcImFkZE5ld1ZpZXdcIjpcIuyDiCDrt7BcIixcInJlc3RvcmVNb2RhbFwiOlwi66eI7KeA66eJ7Jy866GcIOyggOyepe2VnCDrs4Dqsr0g7IKs7ZWt7Jy866GcIOuzteybkO2VmOyLnOqyoOyKteuLiOq5jD9cIixcIm1vZGFsLmRpc2NhcmRXYXJuaW5nXCI6XCLsoIDsnqXtlZjsp4Ag7JWK7J2AIOuzgOqyvSDsgqztla3snYAg66qo65GQIO2PkOq4sOuQqeuLiOuLpFwiLFwibW9kYWwuZGlzY2FyZFBhZ2VXYXJuaW5nXCI6XCLsnbQg7Y6Y7J207KeA7J2YIOyggOyepe2VmOyngCDslYrsnYAg67OA6rK9IOyCrO2VreydgCDrqqjrkZAg7IaQ7Iuk65Cp64uI64ukLlwiLFwibW9kYWwuc2F2ZUNoYW5nZXNQcm9tcHRcIjpcIuuLq+q4sCDsoITsl5Ag67OA6rK9IOyCrO2VreydhCDsoIDsnqXtlZjsi5zqsqDsirXri4jquYw/XCIsXCJtb2RhbC5wYWdlQ2xvc2VcIjpcIlBhZ2UgQ2xvc2UgS1JcIixcInN3aXRjaFdvcmtzcGFjZU1vZGFsXCI6XCJ7e3dvcmtzcGFjZX19KOycvCnroZwg7KCE7ZmY7ZWY7Iuc6rKg7Iq164uI6rmMP1wiLFwic3dpdGNoV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi7KCA7J6l7ZWY7KeAIOyViuydgCDrs4Dqsr0g7IKs7ZWt7J2AIOuqqOuRkCDtj5DquLDrkKnri4jri6RcIixcImRlbGV0ZVdvcmtzcGFjZU1vZGFsXCI6XCLsnbQg7J6R7JeFIOqzteqwhOydhCDsmIHqtazsoIHsnLzroZwg7IKt7KCc7ZWY7Iuc6rKg7Iq164uI6rmMP1wiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLndhcm5pbmdcIjpcInt7d29ya3NwYWNlfX0o7J20KeudvOuKlCDsnbTrpoTsnZgg7J6R7JeFIOqzteqwhOydtCDsnbTrr7gg7KG07J6s7ZWp64uI64ukLiDqtZDssrTtlZjsi5zqsqDsirXri4jquYw/XCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZy5ib2R5XCI6XCLqsJnsnYAg7J2066aE7J2YIOyekeyXhSDqs7XqsITsnbQg7J2066+4IOyhtOyerO2VqeuLiOuLpC4g6rWQ7LK07ZWY66m0IO2YhOyerCDrgrTsmqnsnYQg642u7Ja07JOw6rKMIOuQqeuLiOuLpC5cIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC5yZXBsYWNlXCI6XCLqtZDssrRcIixcImNsb3NlUGxhdGZvcm1cIjpcIu2UjOueq+2PvCDri6vquLBcIixcImNsb3NlUGxhdGZvcm0ud29ya3NwYWNlXCI6XCJ7e3dvcmtzcGFjZX19IO2UjOueq+2PvCDri6vquLBcIixcImNsb3NlUGxhdGZvcm0ud2FybmluZ1wiOlwi7ZSM656r7Y+87J2EIOuLq+ycvOuptCDsi6Ttlokg7KSR7J24IOuqqOuToCDsnpHsl4Ug6rO16rCELCDslbEg65iQ64qUIO2UhOuhnOyEuOyKpOqwgCDri6vtnpnri4jri6QuXCIsXCJiYWNrXCI6XCLrkqTroZwg6rCA6riwXCIsXCJmb3J3YXJkXCI6XCLslZ7snLzroZwg6rCA6riwXCIsXCJyZWxvYWRcIjpcIuyDiOuhnOqzoOy5qFwiLFwiZ3JlZW5cIjpcIuuFueyDiVwiLFwicHVycGxlXCI6XCLrs7Trnbzsg4lcIixcIm9yYW5nZVwiOlwi7Jik66CM7KeA7IOJXCIsXCJyZWRcIjpcIuu5qOqwhOyDiVwiLFwicGlua1wiOlwi7ZWR7YGs7IOJXCIsXCJ5ZWxsb3dcIjpcIuuFuOuegOyDiVwiLFwidGhlbWUubGlnaHRcIjpcIuuwneydgFwiLFwidGhlbWUuZGFya1wiOlwi7Ja065GQ7Jq0XCIsXCJ0aGVtZS5zeXN0ZW1cIjpcIk9TIOyEpOygleqzvCDrj5nquLDtmZRcIixcInRvb2xiYXIuaGlkZVRhYnNcIjpcIu2DrSDsiKjquLDquLBcIixcInRvb2xiYXIuc2hvd1RhYnNcIjpcIu2DrSDtkZzsi5xcIixcInRvb2xiYXIubG9ja1wiOlwi7J6g6riIXCIsXCJ0b29sYmFyLnVubG9ja1wiOlwi7J6g6riIIO2VtOygnFwiLFwidG9vbGJhci5jb2xvckxpbmtpbmdcIjpcIuyDieyDgSDsl7DqsrBcIixcInRvb2xiYXIuY2hhbmdlTGF5b3V0XCI6XCLroIjsnbTslYTsm4Mg67OA6rK9XCIsXCJ0b29sYmFyLnNhdmVNZW51XCI6XCLsoIDsnqUg66mU64m0XCIsXCJ0b29sYmFyLm1heGltaXplV2luZG93XCI6XCLssL0g7LWc64yA7ZmUXCIsXCJ0b29sYmFyLnJlc3RvcmVXaW5kb3dcIjpcIuywvSDrs7Xsm5BcIixcInRvb2xiYXIubWluaW1pemVXaW5kb3dcIjpcIuywvSDstZzshoztmZRcIixcImNoYW5nZUxheW91dC5mdWxsV2lkdGhcIjpcIuyghOyytCDrhIjruYRcIixcImNoYW5nZUxheW91dC5jb2x1bW5zXCI6XCLsl7RcIixcImNoYW5nZUxheW91dC5Sb3dzXCI6XCLtlolcIixcImNoYW5nZUxheW91dC5HcmlkXCI6XCLqt7jrpqzrk5xcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU3dpdGNoZWRcIjpcIuyekeyXhSDqs7XqsIQg7KCE7ZmYXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmhpZGRlblwiOlwi7YOtIOyIqOq5gFwiLFwic3VjY2Vzc0luZGljYXRvci5zaG93blwiOlwi7YOtIO2RnOyLnFwiLFwic3VjY2Vzc0luZGljYXRvci5sb2NrZWRcIjpcIu2OmOydtOyngCDsnqDquIhcIixcInN1Y2Nlc3NJbmRpY2F0b3IudW5sb2NrZWRcIjpcIu2OmOydtOyngCDsnqDquIgg7ZW07KCc65CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkXCI6XCLsnpHsl4Ug6rO16rCEIOyggOyepeuQqFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTYXZlZEFzXCI6XCLsnpHsl4Ug6rO16rCE7J20IHt7d29ya3NwYWNlfX0o7Jy8KeuhnCDsoIDsnqXrkKhcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlUmVuYW1lZFwiOlwi7J6R7JeFIOqzteqwhCDsnbTrpoQg67OA6rK965CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VTYXZlZFwiOlwi7Y6Y7J207KeAIOyggOyepeuQqFwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlSGFzQmVlblNhdmVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgaGFzIGJlZW4gc2F2ZWQuIEtSXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VDb3B5U2F2ZWRcIjpcIu2OmOydtOyngOqwgCB7e3RpdGxlfX0o7Jy8KeuhnCDsoIDsnqXrkKhcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVJlbmFtZWRcIjpcIu2OmOydtOyngCDsnbTrpoQg67OA6rK965CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmNvbnRleHRHcm91cEFwcGxpZWRcIjpcIuy7qO2FjeyKpO2KuCDqt7jro7kg7KCB7Jqp65CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLm5hbWVkQ29udGV4dEdyb3VwQXBwbGllZFwiOlwie3tjb2xvck5hbWV9fSDsu6jthY3siqTtirgg6re466O5IOyggeyaqeuQqFwiLFwic3VjY2Vzc0luZGljYXRvci52aWV3UmVtb3ZlZFwiOlwi7Luo7YWN7Iqk7Yq4IOq3uOujueyXkOyEnCDrt7Ag7KCc6rGw65CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdzUmVtb3ZlZFwiOlwi7Luo7YWN7Iqk7Yq4IOq3uOujueyXkOyEnCDrt7Ag7KCc6rGw65CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxheW91dEFwcGxpZWRcIjpcInt7bGF5b3V0TmFtZX19IOugiOydtOyVhOybgyDsoIHsmqnrkKhcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlRGVsZXRlZFwiOlwi7J6R7JeFIOqzteqwhCDsgq3soJzrkKhcIixcImVycm9ySW5kaWNhdG9yLnBhZ2VTYXZlRmFpbGVkXCI6XCLtjpjsnbTsp4Ag7KCA7J6lIOyLpO2MqFwiLFwiZXJyb3JJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZUZhaWxlZFwiOlwi7J6R7JeFIOqzteqwhCDsoIDsnqUg7Iuk7YyoXCIsXCJlcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVBhZ2VcIjpcIu2OmOydtOyngCDrs7XsoJwg7Iuk7YyoXCIsXCJpbmZvSW5kaWNhdG9yLmNvbG9yTGlua0F0dGVtcHRcIjpcIuydtCDtg63snZgg7IOJ7IOBIOunge2BrOulvCDsi5zrj4Ttlojsp4Drp4wg7IKs7J207Yq4L+y9mO2FkOy4oCDshozsnKDsnpDqsIAg7JWE7KeBIO2ZnOyEse2ZlO2VmOyngCDslYrslZjsirXri4jri6QuXCIsXCJnbG9iYWwuY2FuY2VsXCI6XCLst6jshoxcIixcImdsb2JhbC5jb25maXJtXCI6XCLtmZXsnbhcIixcImdsb2JhbC5zYXZlXCI6XCLsoIDsnqVcIixcImdsb2JhbC5kZWxldGVcIjpcIkRlbGV0ZSBLUlwiLFwiYXBwUmVzdWx0cy5oZWFkZXJcIjpcIkZlYXR1cmVkIENvbnRlbnQgS1JcIixcInJlY2VudGx5VmlzaXRlZC5oZWFkZXJcIjpcIlJlY2VudGx5IHZpc2l0ZWQgS1JcIixcImxhbmRpbmdQYWdlLnN1YmhlYWRlclwiOlwiQXBwcyBhbmQgd2Vic2l0ZXMgc2VsZWN0ZWQgYnkgYW4gYWRtaW4gd2lsbCBzaG93IGhlcmUgS1JcIixcImFyaWEub3BlbkJyb3dzZXJcIjpcIuu4jOudvOyasOyggCDrqZTribQg7Je06riwXCIsXCJhcmlhLmJyb3dzZXJUYWJzXCI6XCLruIzrnbzsmrDsoIAg7YOtXCIsXCJhcmlhLnZpZXdUYWJcIjpcInt7dGl0bGV9feydmCDrt7Ag7YOtXCIsXCJhcmlhLmNsb3NlUGFnZVwiOlwie3t0aXRsZX197J2YIO2OmOydtOyngCDri6vquLAg7YOtXCIsXCJhcmlhLmNsb3NlVGFiXCI6XCLtg60ge3t0aXRsZX19IOuLq+q4sFwiLFwiYXJpYS50aXRsZVwiOlwi7KCc66qpXCIsXCJhcmlhLmNsb3NlQ29udGV4dEdyb3VwXCI6XCLsnbTsiqTsvIDsnbTtlITrpbwg7IKs7Jqp7ZWY7JesIOy7qO2FjeyKpO2KuCDqt7jro7kg7ISg7YOdIOuMgO2ZlOyDgeyekCDri6vquLBcIixcImFyaWEuY29sb3JMaW5raW5nXCI6XCLsg4nsg4Eg7Jew6rKwIO2RnOyLnCDrmJDripQg7Iio6riw6riwXCIsXCJhcmlhLmFwcGx5Q29sb3JMaW5raW5nXCI6XCLsg4nsg4Eg7Jew6rKw7J2EIOyggeyaqe2VmOugpOuptCDrt7Drpbwg7ISg7YOd7ZWY7Iut7Iuc7JikLlwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld1wiOlwie3tuYW1lfX0g7Luo7YWN7Iqk7Yq4IOq3uOujueyXkCDtlaDri7nrkJwg7ZiE7J6sIOu3sFwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld3NcIjpcInt7bmFtZX19IOy7qO2FjeyKpO2KuCDqt7jro7nsl5Ag7ZWg64u565CcIO2YhOyerCDrt7BcIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld1wiOlwi7Zmc7ISxIOu3sOulvCB7e25hbWV9fSDsu6jthY3siqTtirgg6re466O57Jy866GcIOyEpOyglVwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3c1wiOlwi7Zmc7ISxIOu3sOulvCB7e25hbWV9fSDsu6jthY3siqTtirgg6re466O57Jy866GcIOyEpOyglVwiLFwiYXJpYS5lc2NhcGVMYXlvdXREaWFsb2dcIjpcIuydtOyKpOy8gOydtO2UhOulvCDsgqzsmqntlZjsl6wg66CI7J207JWE7JuDIOuzgOqyvSDrjIDtmZTsg4HsnpAg64ur6riwXCIsXCJnbG9iYWwuc3VwZXJ0YWJcIjpcIlN1cGVydGFiIEtSXCIsXCJnbG9iYWwudGFiXCI6XCJUYWIgS1JcIixcImJvb2ttYXJrcy5lZGl0Qm9va21hcmtcIjpcIkVkaXQgQm9va21hcmsgS1JcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkXCI6XCJCb29rbWFyayBhZGRlZCBLUlwiLFwiYm9va21hcmtzLmRvbmVcIjpcIkRvbmUgS1JcIixcImJvb2ttYXJrcy5yZW1vdmVcIjpcIlJlbW92ZSBLUlwiLFwiYm9va21hcmtzLmJvb2ttYXJrc1BhbmVsXCI6XCJCb29rbWFya3MgUGFuZWwgS1JcIixcImJvb2ttYXJrcy5jbG9zZVBhbmVsXCI6XCJDbG9zZSBCb29rbWFya3MgUGFuZWwgS1JcIixcImJvb2ttYXJrcy5ib29rbWFya3NcIjpcIkJvb2ttYXJrcyBLUlwiLFwiYm9va21hcmtzLmFsbEJvb2ttYXJrc1wiOlwiQWxsIEJvb2ttYXJrcyBLUlwiLFwiYm9va21hcmtzLmZhdm9yaXRlc1wiOlwiRmF2b3JpdGVzIEtSXCIsXCJib29rbWFya3Muc2VhcmNoQm9va21hcmtzXCI6XCJTZWFyY2ggQm9va21hcmtzIEtSXCIsXCJib29rbWFya3MuY2xlYXJTZWFyY2hJbnB1dFwiOlwiQ2xlYXIgU2VhcmNoIElucHV0IEtSXCIsXCJib29rbWFya3MuY3JlYXRlRm9sZGVyXCI6XCJDcmVhdGUgTmV3IEZvbGRlciBLUlwiLFwiYm9va21hcmtzLmV4aXRGb2xkZXJcIjpcIkV4aXQgRm9sZGVyIEtSXCIsXCJib29rbWFya3MubmV3Rm9sZGVyXCI6XCJOZXcgRm9sZGVyIEtSXCIsXCJib29rbWFya3MubmFtZWRGb2xkZXJcIjpcInt7bmFtZX19IEZvbGRlciBLUlwiLFwiYm9va21hcmtzLmJvb2ttYXJrU2V0dGluZ3NcIjpcInt7bmFtZX19IEJvb2ttYXJrIFNldHRpbmdzIEtSXCIsXCJib29rbWFya3MuZm9sZGVyU2V0dGluZ3NcIjpcInt7bmFtZX19IEZvbGRlciBTZXR0aW5ncyBLUlwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kXCI6XCJObyByZXN1bHRzIGZvdW5kIEtSXCIsXCJib29rbWFya3Mubm9SZXN1bHRzRm91bmRTdWJ0ZXh0XCI6XCJUaGVyZSBhcmUgbm8gYm9va21hcmtzIHRoYXQgbWF0Y2ggeW91ciBzZWFyY2ggS1JcIixcImJvb2ttYXJrcy5ub3RoaW5nVG9TaG93XCI6XCJOb3RoaW5nIHRvIHNob3cgeWV0IEtSXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1N1YnRleHRcIjpcIkFkZCBhIGJvb2ttYXJrIHRvIHRoaXMgZm9sZGVyIEtSXCIsXCJib29rbWFya3MucmVzdWx0c0ZvdW5kSW5cIjpcIlJlc3VsdHMgZm91bmQgaW4ge3tuYW1lfX0gS1JcIixcImJvb2ttYXJrcy5yZXN1bHRzSW5PdGhlckZvbGRlcnNcIjpcIlJlc3VsdHMgZm91bmQgaW4gb3RoZXIgZm9sZGVycyBLUlwiLFwiYm9va21hcmtzLmFsbFJlc3VsdHNGb3VuZEluXCI6XCJBbGwgcmVzdWx0cyBmb3VuZCBpbiBLUlwiLFwiYm9va21hcmtzLmVkaXROYW1lXCI6XCJFZGl0IE5hbWUgS1JcIixcImJvb2ttYXJrcy5tb3ZlXCI6XCJNb3ZlIEtSXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFRpdGxlXCI6XCJCb29rbWFyayBBZGRlZCBLUlwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUb0ZvbGRlclwiOlwiWW91ciBib29rbWFyayB3YXMgYWRkZWQgdG8gXFxcXFwie3tmb2xkZXJOYW1lfX1cXFxcXCIgS1JcIixcImJvb2ttYXJrcy5ib29rbWFya0VkaXRlZFRpdGxlXCI6XCJCb29rbWFyayBFZGl0ZWQgS1JcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJcIjpcIlNhdmUgU3VwZXJ0YWIgS1JcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBcy4uLiBLUlwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmR1cGxpY2F0ZVwiOlwiRHVwbGljYXRlIEtSXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZGVsZXRlU3VwZXJ0YWJcIjpcIkRlbGV0ZSBTdXBlcnRhYiBLUlwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51Lm5ld1RhYlwiOlwiTmV3IFRhYiBLUlwiLFwiZW50ZXJwcmlzZVNhdmVNZW51LnNhdmVTdXBlcnRhYkFzXCI6XCJTYXZlIFN1cGVydGFiIEFzIEtSXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnJlbmFtZVN1cGVydGFiXCI6XCJSZW5hbWUgS1JcIixcImVudGVycHJpc2VTYXZlTW9kYWwudW5zYXZlZENoYW5nZXNcIjpcIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGlzIFRhYi4gS1JcIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiBLUlwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVN1cGVydGFiXCI6XCJDbG9zZSBTdXBlcnRhYiBLUlwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5zYXZlU3VwZXJ0YWJDb3VudFwiOlwiU2F2ZSB7e2NvdW50fX0gU3VwZXJ0YWJzIGJlZm9yZSBjbG9zaW5nPyBLUlwiLFwiZW50ZXJwcmlzZU1vZGFsLmRpc2NhcmRTdXBlcnRhYldhcm5pbmdcIjpcIkFueSB1bnNhdmVkIGNoYW5nZXMgdG8gdGhpcyBTdXBlcnRhYiB3aWxsIGJlIGxvc3QuIEtSXCIsXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJcIjpcIkRlbGV0ZSB0aGUgXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiPyBLUlwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiV2FybmluZ1wiOlwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIFN1cGVydGFiPyBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lIGFuZCBpcyBwZXJtYW5lbnQuIEtSXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYlNhdmVkXCI6XCJTdXBlcnRhYiBTYXZlZCBLUlwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYiBoYXMgYmVlbiBzYXZlZC4gS1JcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiRGVsZXRlZFwiOlwiU3VwZXJ0YWIgRGVsZXRlZCBLUlwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuRGVsZXRlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiIGhhcyBiZWVuIGRlbGV0ZWQuIEtSXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVUYWJcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgVGFiIEtSXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVTdXBlcnRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBTdXBlcnRhYiBLUlwiLFwiZW50ZXJwcmlzZUNvbW1hbmRCYXIuc3dpdGNoVG9TdXBlcnRhYlwiOlwiU3dpdGNoIHRvIFN1cGVydGFiIEtSXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5nb1RvXCI6XCJHbyB0byB7e3R5cGV9fSBLUlwiLFwiY29udGV4dE1lbnUucXVpdEVudGVycHJpc2VCcm93c2VyXCI6XCJRdWl0IEtSXCJ9JyksQW49SlNPTi5wYXJzZSgne1wiY29udGV4dE1lbnUubmV3V2luZG93XCI6XCLQndC+0LLQvtC1INC+0LrQvdC+XCIsXCJjb250ZXh0TWVudS5uZXdQYWdlXCI6XCLQndC+0LLQsNGPINGB0YLRgNCw0L3QuNGG0LBcIixcImNvbnRleHRNZW51LnJlc3RvcmVcIjpcItCS0L7RgdGB0YLQsNC90L7QstC40YLRjCDQv9C+0YHQu9C10LTQvdC40LUg0YHQvtGF0YDQsNC90LXQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y9cIixcImNvbnRleHRNZW51LnN3aXRjaFdvcmtzcGFjZVwiOlwi0J/QtdGA0LXQutC70Y7Rh9C40YLRjCDRgNCw0LHQvtGH0YPRjiDQvtCx0LvQsNGB0YLRjFwiLFwiY29udGV4dE1lbnUuYXBwZWFyYW5jZVwiOlwi0JLQvdC10YjQvdC40Lkg0LLQuNC0XCIsXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlXCI6XCLQodC+0YXRgNCw0L3QuNGC0Ywg0YDQsNCx0L7Rh9GD0Y4g0L7QsdC70LDRgdGC0YxcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwi0KHQvtGF0YDQsNC90LjRgtGMINGA0LDQsdC+0YfRg9GOINC+0LHQu9Cw0YHRgtGMINC60LDQui4uLlwiLFwiY29udGV4dE1lbnUucmVuYW1lV29ya3NwYWNlXCI6XCLQn9C10YDQtdC40LzQtdC90L7QstCw0YLRjCDRgNCw0LHQvtGH0YPRjiDQvtCx0LvQsNGB0YLRjFwiLFwiY29udGV4dE1lbnUuZGVsZXRlV29ya3NwYWNlXCI6XCLQo9C00LDQu9C40YLRjCDRgNCw0LHQvtGH0YPRjiDQvtCx0LvQsNGB0YLRjFwiLFwiY29udGV4dE1lbnUuZG93bmxvYWRzXCI6XCLQl9Cw0LPRgNGD0LfQutC4XCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZVwiOlwi0KHQvtGF0YDQsNC90LjRgtGMINGB0YLRgNCw0L3QuNGG0YNcIixcImNvbnRleHRNZW51LnNhdmVQYWdlQXNcIjpcItCh0L7RhdGA0LDQvdC40YLRjCDRgdGC0YDQsNC90LjRhtGDINC60LDQui4uLlwiLFwiY29udGV4dE1lbnUucHJpbnRcIjpcItCf0LXRh9Cw0YLRjC4uLlwiLFwiY29udGV4dE1lbnUucHJpbnRTY3JlZW5cIjpcItCg0LDRgdC/0LXRh9Cw0YLQsNGC0Ywg0Y3QutGA0LDQvVwiLFwiY29udGV4dE1lbnUuY2xvc2VXaW5kb3dcIjpcItCX0LDQutGA0YvRgtGMINC+0LrQvdC+XCIsXCJjb250ZXh0TWVudS5vcGVuU3RvcmVmcm9udFwiOlwi0J7RgtC60YDRi9GC0YwgU3RvcmVmcm9udFwiLFwiY29udGV4dE1lbnUucXVpdFBsYXRmb3JtXCI6XCLQktGL0LnRgtC4INC40Lcg0L/Qu9Cw0YLRhNC+0YDQvNGLXCIsXCJjb250ZXh0TWVudS5uZXdWaWV3XCI6XCLQndC+0LLQvtC1INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1XCIsXCJjb250ZXh0TWVudS5vcGVuVmlld1wiOlwi0J7RgtC60YDRi9GC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUg0YEg0L/QvtC80L7RidGM0Y4g0LLQtdCxLdCx0YDQsNGD0LfQtdGA0LAg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y5cIixcImNvbnRleHRNZW51Lm9wZW5WaWV3c1wiOlwi0J7RgtC60YDRi9GC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0YEg0L/QvtC80L7RidGM0Y4g0LLQtdCxLdCx0YDQsNGD0LfQtdGA0LAg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y5cIixcImNvbnRleHRNZW51LnJlbG9hZFwiOlwiUmVsb2FkIFJVXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3XCI6XCLQn9C10YDQtdC30LDQs9GA0YPQt9C40YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtVwiLFwiY29udGV4dE1lbnUucmVsb2FkVmlld3NcIjpcItCf0LXRgNC10LfQsNCz0YDRg9C30LjRgtGMINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGPXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBSVVwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld1wiOlwi0JTRg9Cx0LvQuNGA0L7QstCw0YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtVwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld3NcIjpcItCU0YPQsdC70LjRgNC+0LLQsNGC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y9cIixcImNvbnRleHRNZW51LmFkZFZpZXdcIjpcItCU0L7QsdCw0LLQuNGC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUg0L3QsCDQutCw0L3QsNC7XCIsXCJjb250ZXh0TWVudS5hZGRWaWV3c1wiOlwi0JTQvtCx0LDQstC40YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjRjyDQvdCwINC60LDQvdCw0LtcIixcImNvbnRleHRNZW51LnJlbW92ZVZpZXdcIjpcItCj0LTQsNC70LjRgtGMINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1INC40Lcg0LrQsNC90LDQu9CwXCIsXCJjb250ZXh0TWVudS5yZW1vdmVWaWV3c1wiOlwi0KPQtNCw0LvQuNGC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0LjQtyDQutCw0L3QsNC70LBcIixcImNvbnRleHRNZW51LmNsb3NlVmlld1wiOlwi0JfQsNC60YDRi9GC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LVcIixcImNvbnRleHRNZW51LmNsb3NlVmlld3NcIjpcItCX0LDQutGA0YvRgtGMINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGPXCIsXCJjb250ZXh0TWVudS5jbG9zZVRhYlwiOlwiQ2xvc2UgVGFiIFJVXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVQYWdlXCI6XCLQlNGD0LHQu9C40YDQvtCy0LDRgtGMINGB0YLRgNCw0L3QuNGG0YNcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRcIjpcItCf0LXRh9Cw0YLQsNGC0YxcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRBbGxcIjpcItCf0LXRh9Cw0YLQsNGC0Ywg0LLRgdC1XCIsXCJzYXZlTWVudS5zYXZlV29ya3NwYWNlQXNcIjpcItCh0L7RhdGA0LDQvdC40YLRjCDRgNCw0LHQvtGH0YPRjiDQvtCx0LvQsNGB0YLRjCDQutCw0LpcIixcInNhdmVNZW51LnNhdmVQYWdlQXNcIjpcItCh0L7RhdGA0LDQvdC40YLRjCDRgdGC0YDQsNC90LjRhtGDINC60LDQulwiLFwic2F2ZU1vZGFsLmVudGVyVmFsdWVcIjpcIlBsZWFzZSBlbnRlciBhIHZhbHVlIFJVXCIsXCJzYXZlTW9kYWwuYWxyZWFkeUV4aXN0c1wiOlwie3t0aXRsZX19INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi5cIixcInNhdmVNb2RhbC5wbGVhc2VFbnRlclZhbGlkTmFtZVwiOlwi0JLQstC10LTQuNGC0LUg0L/QvtC00YXQvtC00Y/RidC10LUg0LjQvNGPXCIsXCJzYXZlTW9kYWwucmVuYW1lUGFnZVwiOlwi0J/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0Ywg0YHRgtGA0LDQvdC40YbRg1wiLFwic2F2ZU1vZGFsLmNsb3NlUGFnZVwiOlwi0JfQsNC60YDRi9GC0Ywg0YHRgtGA0LDQvdC40YbRg1wiLFwic2F2ZU1vZGFsLmRpc2NhcmRDaGFuZ2VzXCI6XCLQntGC0LzQtdC90LjRgtGMINC40LfQvNC10L3QtdC90LjRj1wiLFwic2F2ZU1vZGFsLmRpc2NhcmRBbGxcIjpcItCe0YLQvNC10L3QuNGC0Ywg0LLRgdC1XCIsXCJzYXZlTW9kYWwuc2F2ZUFsbFwiOlwi0KHQvtGF0YDQsNC90LjRgtGMINCy0YHQtVwiLFwic2F2ZU1vZGFsLnNhdmVQYWdlc0NvdW50XCI6XCLQodC+0YXRgNCw0L3QuNGC0YwgKHt7Y291bnR9fSkg0YHRgtGA0LDQvdC40YYg0L/QtdGA0LXQtCDQt9Cw0LrRgNGL0YLQuNC10Lw/XCIsXCJkZWZhdWx0UGFnZVRpdGxlXCI6XCJVbnRpdGxlZCBQYWdlIFJVXCIsXCJlbnRlcnByaXNlRGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgU3VwZXJ0YWIgUlVcIixcImFkZE5ld1BhZ2VcIjpcIk5ldyBQYWdlIFJVXCIsXCJhZGROZXdUYWJcIjpcItCU0L7QsdCw0LLQuNGC0Ywg0L3QvtCy0YPRjiDQstC60LvQsNC00LrRg1wiLFwiYWRkTmV3Vmlld1wiOlwi0J3QvtCy0L7QtSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtVwiLFwicmVzdG9yZU1vZGFsXCI6XCLQktGLINGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0YXQvtGC0LjRgtC1INCy0L7RgdGB0YLQsNC90L7QstC40YLRjCDQv9C+0YHQu9C10LTQvdC40LUg0YHQvtGF0YDQsNC90LXQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8/XCIsXCJtb2RhbC5kaXNjYXJkV2FybmluZ1wiOlwi0JLRgdC1INC90LXRgdC+0YXRgNCw0L3QtdC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQsdGD0LTRg9GCINC+0YLQvNC10L3QtdC90YtcIixcIm1vZGFsLmRpc2NhcmRQYWdlV2FybmluZ1wiOlwi0JLRgdC1INC90LXRgdC+0YXRgNCw0L3QtdC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQvdCwINGN0YLQvtC5INGB0YLRgNCw0L3QuNGG0LUg0LHRg9C00YPRgiDQv9C+0YLQtdGA0Y/QvdGLLlwiLFwibW9kYWwuc2F2ZUNoYW5nZXNQcm9tcHRcIjpcItCh0L7RhdGA0LDQvdC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0L/QtdGA0LXQtCDQt9Cw0LrRgNGL0YLQuNC10Lw/XCIsXCJtb2RhbC5wYWdlQ2xvc2VcIjpcIlBhZ2UgQ2xvc2UgUlVcIixcInN3aXRjaFdvcmtzcGFjZU1vZGFsXCI6XCLQktGLINGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0YXQvtGC0LjRgtC1INC/0LXRgNC10LnRgtC4INCyIHt7d29ya3NwYWNlfX0/XCIsXCJzd2l0Y2hXb3Jrc3BhY2VNb2RhbC53YXJuaW5nXCI6XCLQktGB0LUg0L3QtdGB0L7RhdGA0LDQvdC10L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINCx0YPQtNGD0YIg0L7RgtC80LXQvdC10L3Ri1wiLFwiZGVsZXRlV29ya3NwYWNlTW9kYWxcIjpcItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0L3QsNCy0YHQtdCz0LTQsCDRg9C00LDQu9C40YLRjCDRjdGC0YMg0YDQsNCx0L7Rh9GD0Y4g0L7QsdC70LDRgdGC0Yw/XCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi0KDQsNCx0L7Rh9Cw0Y8g0L7QsdC70LDRgdGC0Ywg0YEg0LjQvNC10L3QtdC8IHt7d29ya3NwYWNlfX0g0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCLiDQktGLINGF0L7RgtC40YLQtSDQt9Cw0LzQtdC90LjRgtGMINC10LU/XCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZy5ib2R5XCI6XCLQoNCw0LHQvtGH0LDRjyDQvtCx0LvQsNGB0YLRjCDRgSDRgtCw0LrQuNC8INC20LUg0LjQvNC10L3QtdC8INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4g0J/RgNC4INC10LUg0LfQsNC80LXQvdC1INGC0LXQutGD0YnQtdC1INGB0L7QtNC10YDQttC40LzQvtC1INCx0YPQtNC10YIg0L/QtdGA0LXQt9Cw0L/QuNGB0LDQvdC+LlwiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLnJlcGxhY2VcIjpcItCX0LDQvNC10L3QuNGC0YxcIixcImNsb3NlUGxhdGZvcm1cIjpcItCX0LDQutGA0YvRgtGMINC/0LvQsNGC0YTQvtGA0LzRg1wiLFwiY2xvc2VQbGF0Zm9ybS53b3Jrc3BhY2VcIjpcItCX0LDQutGA0YvRgtGMINC/0LvQsNGC0YTQvtGA0LzRgyB7e3dvcmtzcGFjZX19XCIsXCJjbG9zZVBsYXRmb3JtLndhcm5pbmdcIjpcItCX0LDQutGA0YvRgtC40LUg0L/Qu9Cw0YLRhNC+0YDQvNGLINC/0YDQuNCy0LXQtNC10YIg0Log0LfQsNC60YDRi9GC0LjRjiDQstGB0LXRhSDRgNCw0LHQvtGH0LjRhSDQvtCx0LvQsNGB0YLQtdC5LCDQv9GA0LjQu9C+0LbQtdC90LjQuSDQuCDQt9Cw0L/Rg9GJ0LXQvdC90YvRhSDQv9GA0L7RhtC10YHRgdC+0LIuXCIsXCJiYWNrXCI6XCLQndCw0LfQsNC0XCIsXCJmb3J3YXJkXCI6XCLQktC/0LXRgNC10LRcIixcInJlbG9hZFwiOlwi0J/QtdGA0LXQt9Cw0LPRgNGD0LfQuNGC0YzCoFwiLFwiZ3JlZW5cIjpcItCX0LXQu9C10L3Ri9C5XCIsXCJwdXJwbGVcIjpcItCk0LjQvtC70LXRgtC+0LLRi9C5XCIsXCJvcmFuZ2VcIjpcItCe0YDQsNC90LbQtdCy0YvQuVwiLFwicmVkXCI6XCLQmtGA0LDRgdC90YvQuVwiLFwicGlua1wiOlwi0KDQvtC30L7QstGL0LlcIixcInllbGxvd1wiOlwi0JbQtdC70YLRi9C5XCIsXCJ0aGVtZS5saWdodFwiOlwi0KHQstC10YLQu9GL0LlcIixcInRoZW1lLmRhcmtcIjpcItCi0LXQvNC90YvQuVwiLFwidGhlbWUuc3lzdGVtXCI6XCLQodC40L3RhdGA0L7QvdC40LfQuNGA0L7QstCw0YLRjCDRgSDQvdCw0YHRgtGA0L7QudC60LDQvNC4INCe0KFcIixcInRvb2xiYXIuaGlkZVRhYnNcIjpcItCh0LrRgNGL0YLRjCDQstC60LvQsNC00LrQuFwiLFwidG9vbGJhci5zaG93VGFic1wiOlwi0J/QvtC60LDQt9Cw0YLRjCDQstC60LvQsNC00LrQuFwiLFwidG9vbGJhci5sb2NrXCI6XCLQl9Cw0LHQu9C+0LrQuNGA0L7QstCw0YLRjFwiLFwidG9vbGJhci51bmxvY2tcIjpcItCg0LDQt9Cx0LvQvtC60LjRgNC+0LLQsNGC0YxcIixcInRvb2xiYXIuY29sb3JMaW5raW5nXCI6XCLQn9GA0LjQstGP0LfQutCwINC6INGG0LLQtdGC0YNcIixcInRvb2xiYXIuY2hhbmdlTGF5b3V0XCI6XCLQmNC30LzQtdC90LjRgtGMINC80LDQutC10YJcIixcInRvb2xiYXIuc2F2ZU1lbnVcIjpcItCc0LXQvdGOINGB0L7RhdGA0LDQvdC10L3QuNGPXCIsXCJ0b29sYmFyLm1heGltaXplV2luZG93XCI6XCLQo9Cy0LXQu9C40YfQuNGC0Ywg0L7QutC90L5cIixcInRvb2xiYXIucmVzdG9yZVdpbmRvd1wiOlwi0JLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINC+0LrQvdC+XCIsXCJ0b29sYmFyLm1pbmltaXplV2luZG93XCI6XCLQodCy0LXRgNC90YPRgtGMINC+0LrQvdC+XCIsXCJjaGFuZ2VMYXlvdXQuZnVsbFdpZHRoXCI6XCLQn9C+0LvQvdCw0Y8g0YjQuNGA0LjQvdCwXCIsXCJjaGFuZ2VMYXlvdXQuY29sdW1uc1wiOlwi0KHRgtC+0LvQsdGG0YtcIixcImNoYW5nZUxheW91dC5Sb3dzXCI6XCLQodGC0YDQvtC60LhcIixcImNoYW5nZUxheW91dC5HcmlkXCI6XCLQodC10YLQutCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVN3aXRjaGVkXCI6XCLQoNCw0LHQvtGH0LDRjyDQvtCx0LvQsNGB0YLRjCDQv9C10YDQtdC60LvRjtGH0LXQvdCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmhpZGRlblwiOlwi0JLQutC70LDQtNC60Lgg0YHQutGA0YvRgtGLXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnNob3duXCI6XCLQktC60LvQsNC00LrQuCDQv9C+0LrQsNC30LDQvdGLXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxvY2tlZFwiOlwi0KHRgtGA0LDQvdC40YbQsCDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0L3QsFwiLFwic3VjY2Vzc0luZGljYXRvci51bmxvY2tlZFwiOlwi0KHRgtGA0LDQvdC40YbQsCDRgNCw0LfQsdC70L7QutC40YDQvtCy0LDQvdCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkXCI6XCLQoNCw0LHQvtGH0LDRjyDQvtCx0LvQsNGB0YLRjCDRgdC+0YXRgNCw0L3QtdC90LBcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRBc1wiOlwi0KDQsNCx0L7Rh9Cw0Y8g0L7QsdC70LDRgdGC0Ywg0YHQvtGF0YDQsNC90LXQvdCwINC60LDQuiB7e3dvcmtzcGFjZX19XCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVJlbmFtZWRcIjpcItCg0LDQsdC+0YfQsNGPINC+0LHQu9Cw0YHRgtGMINC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VTYXZlZFwiOlwi0KHRgtGA0LDQvdC40YbQsCDRgdC+0YXRgNCw0L3QtdC90LBcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUhhc0JlZW5TYXZlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIGhhcyBiZWVuIHNhdmVkLiBSVVwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlQ29weVNhdmVkXCI6XCLQodGC0YDQsNC90LjRhtCwINGB0L7RhdGA0LDQvdC10L3QsCDQutCw0Loge3t0aXRsZX19XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VSZW5hbWVkXCI6XCLQodGC0YDQsNC90LjRhtCwINC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmNvbnRleHRHcm91cEFwcGxpZWRcIjpcItCa0L7QvdGC0LXQutGB0YLQvdCw0Y8g0LPRgNGD0L/Qv9CwINC/0YDQuNC80LXQvdC10L3QsFwiLFwic3VjY2Vzc0luZGljYXRvci5uYW1lZENvbnRleHRHcm91cEFwcGxpZWRcIjpcItCa0L7QvdGC0LXQutGB0YLQvdCw0Y8g0LPRgNGD0L/Qv9CwIHt7Y29sb3JOYW1lfX0g0L/RgNC40LzQtdC90LXQvdCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdSZW1vdmVkXCI6XCLQn9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSDRg9C00LDQu9C10L3QviDQuNC3INC60L7QvdGC0LXQutGB0YLQvdC+0Lkg0LPRgNGD0L/Qv9GLXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdzUmVtb3ZlZFwiOlwi0J/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0YPQtNCw0LvQtdC90Ysg0LjQtyDQutC+0L3RgtC10LrRgdGC0L3QvtC5INCz0YDRg9C/0L/Ri1wiLFwic3VjY2Vzc0luZGljYXRvci5sYXlvdXRBcHBsaWVkXCI6XCLQnNCw0LrQtdGCIHt7bGF5b3V0TmFtZX19INC/0YDQuNC80LXQvdC10L1cIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlRGVsZXRlZFwiOlwi0KDQsNCx0L7Rh9Cw0Y8g0L7QsdC70LDRgdGC0Ywg0YPQtNCw0LvQtdC90LBcIixcImVycm9ySW5kaWNhdG9yLnBhZ2VTYXZlRmFpbGVkXCI6XCLQndC1INGD0LTQsNC70L7RgdGMINGB0L7RhdGA0LDQvdC40YLRjCDRgdGC0YDQsNC90LjRhtGDXCIsXCJlcnJvckluZGljYXRvci53b3Jrc3BhY2VTYXZlRmFpbGVkXCI6XCLQndC1INGD0LTQsNC70L7RgdGMINGB0L7RhdGA0LDQvdC40YLRjCDRgNCw0LHQvtGH0YPRjiDQvtCx0LvQsNGB0YLRjFwiLFwiZXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVQYWdlXCI6XCLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQvtC00YPQsdC70LjRgNC+0LLQsNGC0Ywg0YHRgtGA0LDQvdC40YbRg1wiLFwiaW5mb0luZGljYXRvci5jb2xvckxpbmtBdHRlbXB0XCI6XCLQnNGLINC/0L7Qv9GL0YLQsNC70LjRgdGMINC/0YDQuNCy0Y/Qt9Cw0YLRjCDRhtCy0LXRgiDQuiDRjdGC0L7QuSDQstC60LvQsNC00LrQtSwg0L3QviDQstC70LDQtNC10LvQtdGGINGB0LDQudGC0LAv0LrQvtC90YLQtdC90YLQsCDQtdGJ0LUg0L3QtSDQstC60LvRjtGH0LjQuyDRjdGC0YMg0LLQvtC30LzQvtC20L3QvtGB0YLRjFwiLFwiZ2xvYmFsLmNhbmNlbFwiOlwi0J7RgtC80LXQvdC40YLRjFwiLFwiZ2xvYmFsLmNvbmZpcm1cIjpcItCf0L7QtNGC0LLQtdGA0LTQuNGC0YxcIixcImdsb2JhbC5zYXZlXCI6XCLQodC+0YXRgNCw0L3QuNGC0YxcIixcImdsb2JhbC5kZWxldGVcIjpcIkRlbGV0ZSBSVVwiLFwiYXBwUmVzdWx0cy5oZWFkZXJcIjpcIkZlYXR1cmVkIENvbnRlbnQgUlVcIixcInJlY2VudGx5VmlzaXRlZC5oZWFkZXJcIjpcIlJlY2VudGx5IHZpc2l0ZWQgUlVcIixcImxhbmRpbmdQYWdlLnN1YmhlYWRlclwiOlwiQXBwcyBhbmQgd2Vic2l0ZXMgc2VsZWN0ZWQgYnkgYW4gYWRtaW4gd2lsbCBzaG93IGhlcmUgUlVcIixcImFyaWEub3BlbkJyb3dzZXJcIjpcItCe0YLQutGA0YvRgtGMINC80LXQvdGOINCx0YDQsNGD0LfQtdGA0LBcIixcImFyaWEuYnJvd3NlclRhYnNcIjpcItCS0LrQu9Cw0LTQutC4INCx0YDQsNGD0LfQtdGA0LBcIixcImFyaWEudmlld1RhYlwiOlwi0JLQutC70LDQtNC60LAg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8ge3t0aXRsZX19XCIsXCJhcmlhLmNsb3NlUGFnZVwiOlwi0JrQvdC+0L/QutCwIMKr0JfQsNC60YDRi9GC0YzCuyDQvdCwINCy0LrQu9Cw0LTQutC1INC00LvRjyDRgdGC0YDQsNC90LjRhtGLIHt7dGl0bGV9fVwiLFwiYXJpYS5jbG9zZVRhYlwiOlwi0JfQsNC60YDRi9GC0Ywg0LLQutC70LDQtNC60YMge3t0aXRsZX19XCIsXCJhcmlhLnRpdGxlXCI6XCLQndCw0LfQstCw0L3QuNC1XCIsXCJhcmlhLmNsb3NlQ29udGV4dEdyb3VwXCI6XCLQp9GC0L7QsdGLINC30LDQutGA0YvRgtGMINC00LjQsNC70L7QsyDQstGL0LHQvtGA0LAg0LrQvtC90YLQtdC60YHRgtC90L7QuSDQs9GA0YPQv9C/0YssINC40YHQv9C+0LvRjNC30YPQudGC0LUgZXNjYXBlXCIsXCJhcmlhLmNvbG9yTGlua2luZ1wiOlwi0J/QvtC60LDQt9Cw0YLRjCDQuNC70Lgg0YHQutGA0YvRgtGMINC/0YDQuNCy0Y/Qt9C60YMg0Log0YbQstC10YLRg1wiLFwiYXJpYS5hcHBseUNvbG9yTGlua2luZ1wiOlwi0JLRi9Cx0LXRgNC40YLQtSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSwg0YfRgtC+0LHRiyDQv9GA0LjQvNC10L3QuNGC0Ywg0L/RgNC40LLRj9C30LrRgyDQuiDRhtCy0LXRgtGDXCIsXCJhcmlhLmFzc2lnbkNvbG9yTGlua2luZ0N1cnJlbnRWaWV3XCI6XCLQotC10LrRg9GJ0LXQtSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSwg0L3QsNC30L3QsNGH0LXQvdC90L7QtSDQutC+0L3RgtC10LrRgdGC0L3QvtC5INCz0YDRg9C/0L/QtSB7e25hbWV9fVwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld3NcIjpcItCi0LXQutGD0YnQuNC1INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGPLCDQvdCw0LfQvdCw0YfQtdC90L3Ri9C1INC60L7QvdGC0LXQutGB0YLQvdC+0Lkg0LPRgNGD0L/Qv9C1IHt7bmFtZX19XCIsXCJhcmlhLnNldENvbG9yTGlua2luZ0FjdGl2ZVZpZXdcIjpcItCj0YHRgtCw0L3QvtCy0LjRgtGMINCw0LrRgtC40LLQvdC+0LUg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUg0LIg0LrQvtC90YLQtdC60YHRgtC90YPRjiDQs9GA0YPQv9C/0YMge3tuYW1lfX1cIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld3NcIjpcItCj0YHRgtCw0L3QvtCy0LjRgtGMINCw0LrRgtC40LLQvdGL0LUg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0LIg0LrQvtC90YLQtdC60YHRgtC90YPRjiDQs9GA0YPQv9C/0YMge3tuYW1lfX1cIixcImFyaWEuZXNjYXBlTGF5b3V0RGlhbG9nXCI6XCLQp9GC0L7QsdGLINC30LDQutGA0YvRgtGMINC00LjQsNC70L7QsyDQuNC30LzQtdC90LXQvdC40Y8g0LzQsNC60LXRgtCwLCDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IGVzY2FwZVwiLFwiZ2xvYmFsLnN1cGVydGFiXCI6XCJTdXBlcnRhYiBSVVwiLFwiZ2xvYmFsLnRhYlwiOlwiVGFiIFJVXCIsXCJib29rbWFya3MuZWRpdEJvb2ttYXJrXCI6XCJFZGl0IEJvb2ttYXJrIFJVXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFwiOlwiQm9va21hcmsgYWRkZWQgUlVcIixcImJvb2ttYXJrcy5kb25lXCI6XCJEb25lIFJVXCIsXCJib29rbWFya3MucmVtb3ZlXCI6XCJSZW1vdmUgUlVcIixcImJvb2ttYXJrcy5ib29rbWFya3NQYW5lbFwiOlwiQm9va21hcmtzIFBhbmVsIFJVXCIsXCJib29rbWFya3MuY2xvc2VQYW5lbFwiOlwiQ2xvc2UgQm9va21hcmtzIFBhbmVsIFJVXCIsXCJib29rbWFya3MuYm9va21hcmtzXCI6XCJCb29rbWFya3MgUlVcIixcImJvb2ttYXJrcy5hbGxCb29rbWFya3NcIjpcIkFsbCBCb29rbWFya3MgUlVcIixcImJvb2ttYXJrcy5mYXZvcml0ZXNcIjpcIkZhdm9yaXRlcyBSVVwiLFwiYm9va21hcmtzLnNlYXJjaEJvb2ttYXJrc1wiOlwiU2VhcmNoIEJvb2ttYXJrcyBSVVwiLFwiYm9va21hcmtzLmNsZWFyU2VhcmNoSW5wdXRcIjpcIkNsZWFyIFNlYXJjaCBJbnB1dCBSVVwiLFwiYm9va21hcmtzLmNyZWF0ZUZvbGRlclwiOlwiQ3JlYXRlIE5ldyBGb2xkZXIgUlVcIixcImJvb2ttYXJrcy5leGl0Rm9sZGVyXCI6XCJFeGl0IEZvbGRlciBSVVwiLFwiYm9va21hcmtzLm5ld0ZvbGRlclwiOlwiTmV3IEZvbGRlciBSVVwiLFwiYm9va21hcmtzLm5hbWVkRm9sZGVyXCI6XCJ7e25hbWV9fSBGb2xkZXIgUlVcIixcImJvb2ttYXJrcy5ib29rbWFya1NldHRpbmdzXCI6XCJ7e25hbWV9fSBCb29rbWFyayBTZXR0aW5ncyBSVVwiLFwiYm9va21hcmtzLmZvbGRlclNldHRpbmdzXCI6XCJ7e25hbWV9fSBGb2xkZXIgU2V0dGluZ3MgUlVcIixcImJvb2ttYXJrcy5ub1Jlc3VsdHNGb3VuZFwiOlwiTm8gcmVzdWx0cyBmb3VuZCBSVVwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kU3VidGV4dFwiOlwiVGhlcmUgYXJlIG5vIGJvb2ttYXJrcyB0aGF0IG1hdGNoIHlvdXIgc2VhcmNoIFJVXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1wiOlwiTm90aGluZyB0byBzaG93IHlldCBSVVwiLFwiYm9va21hcmtzLm5vdGhpbmdUb1Nob3dTdWJ0ZXh0XCI6XCJBZGQgYSBib29rbWFyayB0byB0aGlzIGZvbGRlciBSVVwiLFwiYm9va21hcmtzLnJlc3VsdHNGb3VuZEluXCI6XCJSZXN1bHRzIGZvdW5kIGluIHt7bmFtZX19IFJVXCIsXCJib29rbWFya3MucmVzdWx0c0luT3RoZXJGb2xkZXJzXCI6XCJSZXN1bHRzIGZvdW5kIGluIG90aGVyIGZvbGRlcnMgUlVcIixcImJvb2ttYXJrcy5hbGxSZXN1bHRzRm91bmRJblwiOlwiQWxsIHJlc3VsdHMgZm91bmQgaW4gUlVcIixcImJvb2ttYXJrcy5lZGl0TmFtZVwiOlwiRWRpdCBOYW1lIFJVXCIsXCJib29rbWFya3MubW92ZVwiOlwiTW92ZSBSVVwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUaXRsZVwiOlwiQm9va21hcmsgQWRkZWQgUlVcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkVG9Gb2xkZXJcIjpcIllvdXIgYm9va21hcmsgd2FzIGFkZGVkIHRvIFxcXFxcInt7Zm9sZGVyTmFtZX19XFxcXFwiIFJVXCIsXCJib29rbWFya3MuYm9va21hcmtFZGl0ZWRUaXRsZVwiOlwiQm9va21hcmsgRWRpdGVkIFJVXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiXCI6XCJTYXZlIFN1cGVydGFiIFJVXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcIlNhdmUgU3VwZXJ0YWIgQXMuLi4gUlVcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBSVVwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgU3VwZXJ0YWIgUlVcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5uZXdUYWJcIjpcIk5ldyBUYWIgUlVcIixcImVudGVycHJpc2VTYXZlTWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBcyBSVVwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5yZW5hbWVTdXBlcnRhYlwiOlwiUmVuYW1lIFJVXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnVuc2F2ZWRDaGFuZ2VzXCI6XCJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhpcyBUYWIuIFJVXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlVGFiXCI6XCJDbG9zZSBUYWIgUlVcIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VTdXBlcnRhYlwiOlwiQ2xvc2UgU3VwZXJ0YWIgUlVcIixcImVudGVycHJpc2VTYXZlTW9kYWwuc2F2ZVN1cGVydGFiQ291bnRcIjpcIlNhdmUge3tjb3VudH19IFN1cGVydGFicyBiZWZvcmUgY2xvc2luZz8gUlVcIixcImVudGVycHJpc2VNb2RhbC5kaXNjYXJkU3VwZXJ0YWJXYXJuaW5nXCI6XCJBbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHRoaXMgU3VwZXJ0YWIgd2lsbCBiZSBsb3N0LiBSVVwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgdGhlIFxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYj8gUlVcIixcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYldhcm5pbmdcIjpcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBTdXBlcnRhYj8gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZSBhbmQgaXMgcGVybWFuZW50LiBSVVwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJTYXZlZFwiOlwiU3VwZXJ0YWIgU2F2ZWQgUlVcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlblNhdmVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gc2F2ZWQuUlVcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiRGVsZXRlZFwiOlwiU3VwZXJ0YWIgRGVsZXRlZCBSVVwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuRGVsZXRlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiIGhhcyBiZWVuIGRlbGV0ZWQuIFJVXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVUYWJcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgVGFiIFJVXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVTdXBlcnRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBTdXBlcnRhYiBSVVwiLFwiZW50ZXJwcmlzZUNvbW1hbmRCYXIuc3dpdGNoVG9TdXBlcnRhYlwiOlwiU3dpdGNoIHRvIFN1cGVydGFiIFJVXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5nb1RvXCI6XCJHbyB0byB7e3R5cGV9fSBSVVwiLFwiY29udGV4dE1lbnUucXVpdEVudGVycHJpc2VCcm93c2VyXCI6XCJRdWl0IFJVXCJ9Jyk7Y29uc3QgVG49UG4udCxEbj1hc3luYyBlPT57Y29uc3QgdD1hd2FpdCBRZShlKTtyZXR1cm4gYXdhaXQgdC5kaXNwYXRjaChvdC5HZXRQYWdlcyl9LEJuPWFzeW5jIGU9Pihhd2FpdCBRZShlLmlkZW50aXR5KSkuZGlzcGF0Y2gob3QuVXBkYXRlUGFnZUZvcldpbmRvdyxlKTtsZXQgWm49ITE7ZnVuY3Rpb24gJG4oZSl7cmV0dXJuIGUubWFwKChlPT57Y29uc3QgdD0obj1lLnZpZXdPcHRpb25zLG4ubmFtZXx8PWAke190fSR7SWUoKX1gLG4pO3ZhciBuO3JldHVybnsuLi5lLHZpZXdPcHRpb25zOnsuLi50LHV1aWQ6WS51dWlkfX19KSl9YXN5bmMgZnVuY3Rpb24gTm4oZSl7Zm9yKGNvbnN0IHQgb2YgZSl0LnBhbmVscyYmYXdhaXQgV24odC5wYW5lbHMpfWNvbnN0IEZuPWU9Pm51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJtZXNzYWdlXCJpbiBlJiZcInN0cmluZ1wiPT10eXBlb2YgZS5tZXNzYWdlJiYvRVJSXyhbQS1aXStfKikrLy50ZXN0KGUubWVzc2FnZSk7YXN5bmMgZnVuY3Rpb24gV24oZSl7Y29uc3QgdD1lLm1hcCgoZT0+ZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkuY3JlYXRlVmlldyhlLnZpZXdPcHRpb25zLGZpbi5tZS5pZGVudGl0eSkuY2F0Y2goKGU9PntpZighRm4oZSkpdGhyb3cgZTtjb25zb2xlLmVycm9yKGUpfSkpKSk7cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKHQpfWNvbnN0IFVuPShlLHQpPT4hdC5maW5kKCh0PT50PT09ZSkpLHpuPShlLHQpPT5gJHtlfSAoJHt0fSlgLEduPShlLHQpPT57aWYoVW4oZSx0KSlyZXR1cm4gZTtsZXQgbj0xO2NvbnN0IHI9ZS5yZXBsYWNlKC8gKlxcKFxcZCtcXCkkLyxcIlwiKTtmb3IoOyFVbih6bihyLG4pLHQpOyluKz0xO3JldHVybiB6bihyLG4pfSxLbj1hc3luYygpPT57Y29uc3QgZT1hd2FpdCBlZSgpO3JldHVybihhd2FpdCBQcm9taXNlLmFsbChlLm1hcCgoYXN5bmMgZT0+e3RyeXtyZXR1cm4gRG4oZS5pZGVudGl0eSl9Y2F0Y2godCl7SlNPTi5zdHJpbmdpZnkoZS5pZGVudGl0eSk7Y29uc3Qgbj1hd2FpdCBlLmdldE9wdGlvbnMoKTtyZXR1cm4gbi53b3Jrc3BhY2VQbGF0Zm9ybT8ucGFnZXN8fFtdfX0pKSkpLnJlZHVjZSgoKGUsdCk9PmUuY29uY2F0KHQpKSxbXSl9LHFuPWFzeW5jKCk9Pihhd2FpdCBHZShZKSkuZGlzcGF0Y2goV2UuR2V0U2F2ZWRQYWdlcyx2b2lkIDApLFluPWFzeW5jIGU9Pihhd2FpdCBHZShZKSkuZGlzcGF0Y2goV2UuR2V0U2F2ZWRQYWdlLGUpLEpuPWFzeW5jKGUsdCk9Pntjb25zdCBuPWF3YWl0KGFzeW5jIGU9Pihhd2FpdCBLbigpKS5maW5kKCh0PT50LnBhZ2VJZD09PWUpKSkoZSk7cmV0dXJuIW58fG4udGl0bGU9PT10LnRpdGxlJiZlPT09dC5wYWdlSWR8fGF3YWl0IEJuKHtpZGVudGl0eTpuLnBhcmVudElkZW50aXR5LHBhZ2VJZDplLHBhZ2U6e3BhZ2VJZDp0LnBhZ2VJZCx0aXRsZTp0LnRpdGxlfX0pLG59LFhuPWFzeW5jKHtwYWdlOmV9KT0+e2F3YWl0IEpuKGUucGFnZUlkLGUpLGF3YWl0KGFzeW5jIGU9Pihhd2FpdCBHZShZKSkuZGlzcGF0Y2goV2UuQ3JlYXRlU2F2ZWRQYWdlLGUpKSh7cGFnZTplfSl9LFFuPWFzeW5jIGU9Pnthd2FpdCBZbihlKSYmYXdhaXQoYXN5bmMgZT0+KGF3YWl0IEdlKFkpKS5kaXNwYXRjaChXZS5EZWxldGVTYXZlZFBhZ2UsZSkpKGUpfSxlcj1hc3luYyh7cGFnZUlkOmUscGFnZTp0fSk9Pnthd2FpdCBKbihlLHQpO3JldHVybiBhd2FpdChhc3luYyBlPT4oYXdhaXQgR2UoWSkpLmRpc3BhdGNoKFdlLlVwZGF0ZVNhdmVkUGFnZSxlKSkoe3BhZ2VJZDplLHBhZ2U6dH0pfSx0cj1hc3luYyBlPT5hd2FpdCBZbihlLnBhZ2VJZCk/ZXIoe3BhZ2VJZDplLnBhZ2VJZCxwYWdlOmV9KTpYbih7cGFnZTplfSksbnI9YXN5bmMgZT0+e2F3YWl0KGFzeW5jIGU9Pihhd2FpdCBRZShlLmlkZW50aXR5KSkuZGlzcGF0Y2gob3QuQXR0YWNoUGFnZXNUb1dpbmRvdyxlKSkoZSl9LHJyPWFzeW5jIGU9Pntjb25zdCB0PXsuLi5lLnBhZ2UscGFuZWxzOmUucGFnZS5wYW5lbHMmJiRuKGUucGFnZS5wYW5lbHMpfTt0LnBhbmVscyYmYXdhaXQgV24odC5wYW5lbHMpLGF3YWl0IEJuKHsuLi5lLHBhZ2U6dH0pfSxvcj1hc3luYyBlPT57YXdhaXQoYXN5bmMgZT0+KGF3YWl0IFFlKGUuaWRlbnRpdHkpKS5kaXNwYXRjaChvdC5EZXRhY2hQYWdlc0Zyb21XaW5kb3csZSkpKGUpfSxhcj1hc3luYyBlPT57YXdhaXQoYXN5bmMgZT0+KGF3YWl0IFFlKGUuaWRlbnRpdHkpKS5kaXNwYXRjaChvdC5TZXRBY3RpdmVQYWdlRm9yV2luZG93LGUpKShlKX0saXI9ZT0+RG4oZSksbHI9YXN5bmMoe2lkZW50aXR5OmUscGFnZUlkOnR9KT0+KGF3YWl0IGlyKGUpKS5maW5kKChlPT5lLnBhZ2VJZD09PXQpKSxzcj1hc3luYyBlPT57YXdhaXQoYXN5bmMgZT0+KGF3YWl0IFFlKGUuaWRlbnRpdHkpKS5kaXNwYXRjaChvdC5SZW9yZGVyUGFnZXNGb3JXaW5kb3csZSkpKGUpfSxjcj1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnF1ZXVlPVtdLHRoaXMubG9ja2VkPSExfWxvY2soKXtyZXR1cm4gbmV3IFByb21pc2UoKGU9Pnt0aGlzLmxvY2tlZD90aGlzLnF1ZXVlLnB1c2goZSk6KHRoaXMubG9ja2VkPSEwLGUoKSl9KSl9dW5sb2NrKCl7aWYodGhpcy5xdWV1ZS5sZW5ndGg+MCl7Y29uc3QgZT10aGlzLnF1ZXVlLnNoaWZ0KCk7ZSYmZSgpfWVsc2UgdGhpcy5sb2NrZWQ9ITF9fTthc3luYyBmdW5jdGlvbiB1cihlKXthd2FpdCBjci5sb2NrKCk7dHJ5e2NvbnN0IHQ9VG4oWm4/XCJlbnRlcnByaXNlRGVmYXVsdFBhZ2VUaXRsZVwiOlwiZGVmYXVsdFBhZ2VUaXRsZVwiKSxuPWU/P3QsW3Isb109YXdhaXQgUHJvbWlzZS5hbGwoW3FuKCksS24oKV0pLGE9Wy4uLnIsLi4ub10ubWFwKCgoe3RpdGxlOmV9KT0+ZSkpO3JldHVybiBHbihuLGEpfWZpbmFsbHl7Y3IudW5sb2NrKCl9fWFzeW5jIGZ1bmN0aW9uIGRyKHtwYWdlOmV9KXtyZXR1cm57c2hvdWxkU2hvd01vZGFsOiEoIWV8fCFlLmhhc1Vuc2F2ZWRDaGFuZ2VzKX19YXN5bmMgZnVuY3Rpb24gcHIoe3BhZ2U6ZSxpZGVudGl0eTp0fSl7Y29uc3Qgbj1maW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudFN5bmMoKTtpZigoYXdhaXQgbi5nZXRJbmZvKCkpLmluaXRpYWxPcHRpb25zLmVuYWJsZUJlZm9yZVVubG9hZCl7Y29uc3Qgbj1WdChlLmxheW91dC5jb250ZW50KS5maWx0ZXIoKGU9PmUubmFtZSkpLm1hcCgoZT0+ZmluLlZpZXcud3JhcFN5bmMoe25hbWU6ZS5uYW1lLHV1aWQ6dC51dWlkfSkpKSxyPWF3YWl0IHRoaXMuY2hlY2tWaWV3c0ZvclByZXZlbnRVbmxvYWQobik7aWYoci52aWV3c1ByZXZlbnRpbmdVbmxvYWQubGVuZ3RoPjApe2lmKChhd2FpdCB0aGlzLmdldFVzZXJEZWNpc2lvbkZvckJlZm9yZVVubG9hZCh7Li4ucix3aW5kb3dJZDp0LHdpbmRvd1Nob3VsZENsb3NlOiExLGNsb3NlVHlwZTpcInBhZ2VcIn0pKS52aWV3c1RvQ2xvc2UubGVuZ3RoIT09bi5sZW5ndGgpcmV0dXJuIGUucGFnZUlkLHtzaG91bGRQYWdlQ2xvc2U6ITF9fX1yZXR1cm57c2hvdWxkUGFnZUNsb3NlOiEwfX1hc3luYyBmdW5jdGlvbiBmcih7cGFnZXM6ZSxpZGVudGl0eTp0fSl7Y29uc3Qgbj1hd2FpdCBQcm9taXNlLmFsbChlLm1hcCgoZT0+dGhpcy5zaG91bGRQYWdlQ2xvc2Uoe3BhZ2U6ZSxjbG9zZVR5cGU6XCJ3aW5kb3dcIixpZGVudGl0eTp0fSkpKSkse3BhZ2VzUHJldmVudGluZ0Nsb3NlOnIscGFnZXNOb3RQcmV2ZW50aW5nQ2xvc2U6b309ZS5yZWR1Y2UoKChlLHQscik9PiFuW3JdLnNob3VsZFBhZ2VDbG9zZT97cGFnZXNOb3RQcmV2ZW50aW5nQ2xvc2U6ZS5wYWdlc05vdFByZXZlbnRpbmdDbG9zZSxwYWdlc1ByZXZlbnRpbmdDbG9zZTpbLi4uZS5wYWdlc1ByZXZlbnRpbmdDbG9zZSx0XX06e3BhZ2VzUHJldmVudGluZ0Nsb3NlOmUucGFnZXNQcmV2ZW50aW5nQ2xvc2UscGFnZXNOb3RQcmV2ZW50aW5nQ2xvc2U6Wy4uLmUucGFnZXNOb3RQcmV2ZW50aW5nQ2xvc2UsdF19KSx7cGFnZXNQcmV2ZW50aW5nQ2xvc2U6W10scGFnZXNOb3RQcmV2ZW50aW5nQ2xvc2U6W119KTtyZXR1cm4gdGhpcy5oYW5kbGVQYWdlc0FuZFdpbmRvd0Nsb3NlKHtwYWdlc05vdFByZXZlbnRpbmdDbG9zZTpvLHBhZ2VzUHJldmVudGluZ0Nsb3NlOnIsaWRlbnRpdHk6dH0pfWFzeW5jIGZ1bmN0aW9uIGhyKHtwYWdlc1ByZXZlbnRpbmdDbG9zZTplLHBhZ2VzTm90UHJldmVudGluZ0Nsb3NlOnQsaWRlbnRpdHk6bn0pe3JldHVybntzaG91bGRXaW5kb3dDbG9zZTowPT09ZS5sZW5ndGh9fWFzeW5jIGZ1bmN0aW9uIGdyKHtwYWdlOmV9KXtyZXR1cm4gTmUoZSl9YXN5bmMgZnVuY3Rpb24gdnIoZSl7cmV0dXJue2hhc1Vuc2F2ZWRDaGFuZ2VzOiEwfX1jb25zdCBDcj1hc3luYygpPT57Y29uc3QgZT1PdCgpLHQ9KGF3YWl0IGVlKCkpLm1hcCgodD0+ZS5Ccm93c2VyLndyYXBTeW5jKHQuaWRlbnRpdHkpKSk7YXdhaXQgUHJvbWlzZS5hbGwodC5tYXAoKGFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IGUuZ2V0UGFnZXMoKTthd2FpdCBQcm9taXNlLmFsbCh0Lm1hcCgoYXN5bmMgdD0+e3QudGl0bGUsYXdhaXQgZS51cGRhdGVQYWdlKHtwYWdlSWQ6dC5wYWdlSWQscGFnZTp7aGFzVW5zYXZlZENoYW5nZXM6ITF9fSksdC5wYWdlSWQsdC50aXRsZSxhd2FpdCB0cih7Li4udCxoYXNVbnNhdmVkQ2hhbmdlczohMX0pfSkpKX0pKSl9LG1yPW5ldyBNYXAsd3I9KCk9Pm1yLGJyPWU9Pm1yLmRlbGV0ZShlKTtsZXQgeXI9ITE7Y29uc3QgeHI9KCk9Pnt5cnx8KHlyPSEwLGZpbi5XaW5kb3cud3JhcFN5bmMoSikub25jZShcImNsb3NlZFwiLCgoKT0+e3lyPSExLChhc3luYyhlLHQpPT57YXdhaXQgaGUoZmUoZSkse3NvdXJjZTpcIlN0b3JlXCIsLi4udH0pfSkoZmluLm1lLmlkZW50aXR5LHt0eXBlOlwiTmF2aWdhdGlvblwiLGFjdGlvbjpcIkNsb3NlIFN0b3JlXCIsc2tpcFZhbHVlSGFzaGluZzohMH0pfSkpKX07bGV0IGtyLFNyLE9yO2NvbnN0IE1yPWFzeW5jKCk9Pih2b2lkIDA9PT1PciYmKE9yPSEhKGF3YWl0IHdlKCkpLmRpc2FibGVPcGVuRmluQW5hbHl0aWNzKSxPcik7YXN5bmMgZnVuY3Rpb24gTHIoZSl7ZS5mb3JFYWNoKChlPT57dmFyIHQsbjtcIlBhZ2VcIj09PWUudHlwZT9cIk9wZW4gUGFnZVwiPT09ZS5hY3Rpb24/KHQ9ZS5kYXRhLnV1aWQsbj1lLG1yLnNldCh0LG4pKTpcIkNsb3NlIFBhZ2VcIj09PWUuYWN0aW9uJiZicihlLmRhdGEudXVpZCk6XCJTdG9yZVwiPT09ZS5zb3VyY2UmJlwiQ2xvc2VcIiE9PWUuYWN0aW9uJiZ4cigpfSkpLGF3YWl0KGFzeW5jIGU9Pntrcj8uc2VuZFRvT3BlbkZpbiYmKGF3YWl0IE1yKCl8fGUuZm9yRWFjaCgoYXN5bmMgZT0+e2NvbnN0IHQ9a2Uoe30sZSk7dC5lbnRpdHlJZCYmKHQuZW50aXR5SWQudXVpZD1hd2FpdCB5ZSh0LmVudGl0eUlkLnV1aWQpLHQuZW50aXR5SWQubmFtZT1hd2FpdCB5ZSh0LmVudGl0eUlkLm5hbWUpKSwhZS5za2lwVmFsdWVIYXNoaW5nJiZcInZhbHVlXCJpbiB0JiYodC52YWx1ZT1hd2FpdCB5ZSh0LnZhbHVlKSksU3IodCl9KSkpfSkoZSk7Y29uc3QgdD1lLm1hcCgoKHtza2lwVmFsdWVIYXNoaW5nOmUsLi4udH0pPT50KSk7dGhpcy5oYW5kbGVBbmFseXRpY3ModCl9Y29uc3QgX3I9YXN5bmMgZT0+e2tyPWU7a3I/LnNlbmRUb09wZW5GaW4mJiFhd2FpdCBNcigpJiYoKCk9Pntjb25zdCBlPUIsdD1lK18uQW5hbHl0aWNzLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIklGUkFNRVwiKTtuLnNldEF0dHJpYnV0ZShcInNyY1wiLHQpLG4uc2V0QXR0cmlidXRlKFwic3R5bGVcIixcIndpZHRoOiAwcHggIWltcG9ydGFudFwiKSxuLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsXCJoZWlnaHQ6IDBweCAhaW1wb3J0YW50XCIpLG4uc2V0QXR0cmlidXRlKFwic3R5bGVcIixcImRpc3BsYXk6IG5vbmUgIWltcG9ydGFudFwiKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG4pLFNyPWFzeW5jIHQ9PntuLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UodCxlKX19KSgpO2NvbnN0IHQ9ZmluLkFwcGxpY2F0aW9uLmdldEN1cnJlbnRTeW5jKCk7dC5hZGRMaXN0ZW5lcihcInZpZXctY3JlYXRlZFwiLChhc3luYyBlPT57dmFyIHQ7Z2Uoe3R5cGU6XCJWaWV3XCIsYWN0aW9uOlwiT3BlbiBWaWV3XCIsdmFsdWU6ZS52aWV3SWRlbnRpdHkubmFtZSxkYXRhOnt1dWlkOmUudmlld0lkZW50aXR5LnV1aWQsdXJsOmF3YWl0KHQ9ZS52aWV3SWRlbnRpdHksZmluLlZpZXcud3JhcFN5bmModCkuZ2V0SW5mbygpLnRoZW4oKGU9PmUudXJsKSkpfX0pfSkpLHQuYWRkTGlzdGVuZXIoXCJ2aWV3LWRlc3Ryb3llZFwiLChhc3luYyBlPT57Z2Uoe3R5cGU6XCJWaWV3XCIsYWN0aW9uOlwiQ2xvc2UgVmlld1wiLHZhbHVlOmUudmlld0lkZW50aXR5Lm5hbWUsZGF0YTp7dXVpZDplLnZpZXdJZGVudGl0eS51dWlkfX0pfSkpLHQuYWRkTGlzdGVuZXIoXCJ3aW5kb3ctY2xvc2VkXCIsKGU9PntlLm5hbWUuc3RhcnRzV2l0aChLLkJyb3dzZXJNZW51KXx8KGdlKHt0eXBlOlwiV2luZG93XCIsYWN0aW9uOlwiQ2xvc2UgV2luZG93XCIsdmFsdWU6ZS5uYW1lLGRhdGE6e3V1aWQ6ZS51dWlkfX0pLChhc3luYygpPT57Y29uc3QgZT13cigpLHQ9YXdhaXQgS24oKTtpZih0Lmxlbmd0aD09PWUuc2l6ZSlyZXR1cm47Y29uc3Qgbj10LnJlZHVjZSgoKGUsdCk9PmUuc2V0KHQucGFnZUlkLDEpKSxuZXcgTWFwKTtmb3IoY29uc3RbdCxyXW9mIGUpbi5oYXModCl8fChyLmFjdGlvbj1cIkNsb3NlIFBhZ2VcIixnZShyKSxicih0KSl9KSgpKX0pKX07YXN5bmMgZnVuY3Rpb24gUHIoKXtjb25zdCBlPShhd2FpdCB3ZSgpKS5icm93c2VyQmFzZVVybDtpZihlKXRyeXtjb25zdCB0PW5ldyBVUkwoZSk7aWYodC5wYXRobmFtZS5lbmRzV2l0aChcIi9cIikpdC5wYXRobmFtZT10LnBhdGhuYW1lLnNsaWNlKDAsLTEpO2Vsc2V7aWYoXCIvd29ya3NwYWNlXCI9PT10LnBhdGhuYW1lKXJldHVybiB0LnBhdGhuYW1lKz1gLyR7Tn1gLHQudG9TdHJpbmcoKTtjb25zb2xlLndhcm4oYEBvcGVuZmluL3dvcmtzcGFjZS1wbGF0Zm9ybTogYnJvd3Nlck92ZXJyaWRlQmFzZVVybCBtdXN0IGJlIGEgdmFsaWQgdXJsLCB3aXRoIHBhdGg6IC93b3Jrc3BhY2UuIEV4cGVjdGVkIDxwcm90b2NvbD46Ly88b3B0aW9uYWwgc3ViZG9tYWluPi48ZG9tYWluPi93b3Jrc3BhY2UgYnV0IGdvdCAke2V9YCl9fWNhdGNoKHQpe2NvbnNvbGUud2FybihgQG9wZW5maW4vd29ya3NwYWNlLXBsYXRmb3JtOiBicm93c2VyT3ZlcnJpZGVCYXNlVXJsIG11c3QgYmUgYSB2YWxpZCB1cmwuIEV4cGVjdGVkIDxwcm90b2NvbD46Ly88b3B0aW9uYWwgc3ViZG9tYWluPi48ZG9tYWluPi93b3Jrc3BhY2UgYnV0IGdvdCAke2V9YCl9cmV0dXJuIFp9dmFyIEVyOyFmdW5jdGlvbihlKXtlLkVSUk9SPVwiZXJyb3JcIixlLlNVQ0NFU1M9XCJzdWNjZXNzXCIsZS5JTkZPPVwiaW5mb1wifShFcnx8KEVyPXt9KSk7Y29uc3QganI9KGUsdCk9Pntjb25zdCBuPWU7cmV0dXJuIG4ud29ya3NwYWNlUGxhdGZvcm18fChuLndvcmtzcGFjZVBsYXRmb3JtPXt9KSxuLndvcmtzcGFjZVBsYXRmb3JtLl9pbnRlcm5hbERlZmVyU2hvd09wdGlvbnM9e3NldEFzRm9yZWdyb3VuZDohIXQsZGVmZXJTaG93RW5hYmxlZDohMCxhdXRvU2hvdzpuLndvcmtzcGFjZVBsYXRmb3JtPy5faW50ZXJuYWxBdXRvU2hvd3x8bi53b3Jrc3BhY2VQbGF0Zm9ybT8uX2ludGVybmFsRGVmZXJTaG93T3B0aW9ucz8uYXV0b1Nob3d8fHZvaWQgMD09PW4uYXV0b1Nob3d8fG4uYXV0b1Nob3d9LG4uYXV0b1Nob3c9ITEsbn07Y29uc3QgUnI9anIoe2Fsd2F5c09uVG9wOiEwLGF1dG9TaG93OiExLGZyYW1lOiExLHJlc2l6YWJsZTohMSxzaG93VGFza2Jhckljb246ITF9KTt2YXIgSXI7IWZ1bmN0aW9uKGUpe2UuTG9ja2VkPVwiTG9ja0Nsb3NlZEljb25cIixlLlVubG9ja2VkPVwiTG9ja09wZW4xSWNvblwifShJcnx8KElyPXt9KSk7Y29uc3QgVnI9XCJicm93c2VyXCIsSHI9ZnVuY3Rpb24oZT1Scil7Y29uc3QgdD1uZXcgTWFwO3JldHVybiBhc3luYyhuLHIsbyxhLGkpPT57aWYodC5oYXMobikpe2NvbnN0e2N1cnJlbnRVcmw6ZSxjdXJyZW50TmFtZTpvfT10LmdldChuKTtpZihlPT09cilyZXR1cm47Y29uc3QgYT1maW4uV2luZG93LndyYXBTeW5jKHt1dWlkOmZpbi5tZS51dWlkLG5hbWU6b30pO2F3YWl0IGEuY2xvc2UoKX1jb25zdCBsPWAke0suSG9tZUludGVybmFsfS0ke0RhdGUubm93KCl9JHtNYXRoLnJhbmRvbSgpfWA7dC5zZXQobix7Y3VycmVudFVybDpyLGN1cnJlbnROYW1lOmx9KTtjb25zdCBzPWBOZXcgJHthfSBpbmRpY2F0b3I6ICR7b30gJHtpfWAsYz1hd2FpdCBmaW4uUGxhdGZvcm0uZ2V0Q3VycmVudFN5bmMoKS5jcmVhdGVXaW5kb3coey4uLmUsbmFtZTpsLHVybDpyfSk7KChlLHQpPT57Y29uc3Qgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO24uc2V0QXR0cmlidXRlKFwicm9sZVwiLFwiYWxlcnRcIiksbi5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxpdmVcIix0fHxcInBvbGl0ZVwiKSwoZT0+e2Uuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLGUuc3R5bGUud2lkdGg9XCIxcHhcIixlLnN0eWxlLmhlaWdodD1cIjFweFwiLGUuc3R5bGUucGFkZGluZz1cIjBcIixlLnN0eWxlLm1hcmdpbj1cIi0xcHhcIixlLnN0eWxlLm92ZXJmbG93PVwiaGlkZGVuXCIsZS5zdHlsZS53aGl0ZVNwYWNlPVwibm93cmFwXCIsZS5zdHlsZS5ib3JkZXI9XCIwXCJ9KShuKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG4pLHNldFRpbWVvdXQoKCgpPT57bi5pbm5lckhUTUw9ZX0pLDMwMCksc2V0VGltZW91dCgoKCk9Pntkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG4pfSksMWUzKX0pKHMpLGMub25jZShcImNsb3NlZFwiLCgoKT0+e3QuZGVsZXRlKG4pfSkpfX0oKTthc3luYyBmdW5jdGlvbiBBcihlLHQsbixyLG8sYSl7aWYobiYmZmluLm1lLm5hbWUhPT1uKXtjb25zdCBpPXt0eXBlOmUsbWVzc2FnZTp0LHBhcmVudEJyb3dzZXJOYW1lOm4sc2Vjb25kYXJ5TWVzc2FnZTpyLGljb246byxpc0VudGVycHJpc2U6YX07cmV0dXJuKGF3YWl0IFFlKHt1dWlkOmZpbi5tZS51dWlkLG5hbWU6bn0pKS5kaXNwYXRjaChvdC5TaG93QnJvd3NlckluZGljYXRvcixpKX1jb25zdCBpPW5ldyBVUkxTZWFyY2hQYXJhbXM7aWYoaS5hcHBlbmQoXCJ0eXBlXCIsZSksaS5hcHBlbmQoXCJtZXNzYWdlXCIsdCksaS5hcHBlbmQoXCJwYXJlbnROYW1lXCIsbnx8XCJcIiksaS5hcHBlbmQoXCJzZWNvbmRhcnlNZXNzYWdlXCIscnx8XCJcIiksaS5hcHBlbmQoXCJpY29uXCIsb3x8XCJcIiksaS5hcHBlbmQoXCJpc0VudGVycHJpc2VcIixgJHthfWB8fFwiXCIpLG4pe2NvbnN0IGU9bj97dXVpZDpWLG5hbWU6bn06dm9pZCAwLHQ9YXdhaXQgcShlKSxyPW9lKGF3YWl0IHQuZ2V0Qm91bmRzKCkpO2kuYXBwZW5kKFwicGFyZW50Qm91bmRzXCIscil9Y29uc3QgbD1gJHthd2FpdCBQcigpK18uQnJvd3NlckluZGljYXRvcn0jJHtpLnRvU3RyaW5nKCl9YDtyZXR1cm4gSHIoVnIrbixsLHQsZSxyKX1hc3luYyBmdW5jdGlvbiBUcihlLHQsbixyKXtjb25zdCBvPWF3YWl0IGxlKHQpLGE9dC5uYW1lO3JldHVybiBBcihFci5TVUNDRVNTLGUsYSxuLHIsbyl9Y29uc3QgRHI9YXN5bmMoZT1ZKT0+e2NvbnN0e3dvcmtzcGFjZVBsYXRmb3JtOnR9PWF3YWl0IHEoZSkuZ2V0T3B0aW9ucygpLG49dD8ubmV3UGFnZVVybCxyPXQ/Lm5ld1RhYlVybDtyZXR1cm57bmV3UGFnZVVybDpuLG5ld1RhYlVybDpyfX0sQnI9YXN5bmMoZSx0PVkpPT57Y29uc3R7bmV3UGFnZVVybDpufT1hd2FpdCBEcih0KTtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJUcnlpbmcgdG8gY3JlYXRlIGEgbmV3IHBhZ2Ugd2l0aG91dCBhIG5ld1BhZ2VVcmwgc2V0XCIpO3JldHVybihhc3luYyhlLHQsbj1ZKT0+e2xldCByO2F3YWl0IFEobikmJihyPShhd2FpdCBxKG4pLmdldE9wdGlvbnMoKSkubGF5b3V0fHx7c2V0dGluZ3M6e319KTtyZXR1cm57Li4ucixjb250ZW50Olt7dHlwZTpcInN0YWNrXCIsY29udGVudDpbe3R5cGU6XCJjb21wb25lbnRcIixjb21wb25lbnROYW1lOlwidmlld1wiLGNvbXBvbmVudFN0YXRlOnt0aXRsZTplLHVybDp0fX1dfV19fSkoZSxuLHQpfSxacj1hc3luYyhlPVkpPT57Y29uc3QgdD1hd2FpdCBsZShlKSxuPWF3YWl0IE90KCkuQnJvd3Nlci5nZXRVbmlxdWVQYWdlVGl0bGUoKSxyPWF3YWl0IEJyKG4sZSk7dCYmKHIuc2V0dGluZ3MuaGFzSGVhZGVycz0hMSxyLnNldHRpbmdzLnJlb3JkZXJFbmFibGVkPSEwLHIuZGltZW5zaW9ucy5oZWFkZXJIZWlnaHQ9MCk7Y29uc3Qgbz1hd2FpdCAkZShuLHIpO3JldHVybiB0JiYoby5oYXNVbnNhdmVkQ2hhbmdlcz0hMSksb307dmFyICRyOyFmdW5jdGlvbihlKXtlLkhvbWU9XCIvaG9tZVwiLGUuQnJvd3Nlcj1cIi9icm93c2VyXCIsZS5Qcm92aWRlcj1cIi9wcm92aWRlclwiLGUuU3RvcmVmcm9udD1cIi9zdG9yZWZyb250XCIsZS5Eb2NrPVwiL2RvY2tcIn0oJHJ8fCgkcj17fSkpO2NvbnN0IE5yPShlLHQ9MCk9PntsZXQgbixyLG89ITE7Y29uc3QgYT1hc3luYyByPT57Y29uc3QgaT1hd2FpdCBlKC4uLnIpO2lmKG8pe2F3YWl0IG5ldyBQcm9taXNlKChlPT5zZXRUaW1lb3V0KGUsdCkpKTtjb25zdCBlPW47cmV0dXJuIG49dm9pZCAwLG89ITEsYShlKX1yZXR1cm4gaX07cmV0dXJuKC4uLmUpPT4ocj8obz0hMCxuPWUpOnI9YShlKS5jYXRjaCgoZT0+e3Rocm93IGNvbnNvbGUuZXJyb3IoXCJtYWtlRGVib3VuY2VkRnVuY1wiLGUpLGV9KSkuZmluYWxseSgoKCk9PntyPXZvaWQgMH0pKSxyKX07ZnVuY3Rpb24gRnIoZSx0KXtyZXR1cm4gYXN5bmMobiwuLi5yKT0+e2UuaGFzKG4pJiZlLmdldChuKS5mb3JFYWNoKChlPT5lKC4uLnIpKSksdCYmYXdhaXQgdCh7ZXZlbnQ6bixwYXlsb2FkOnJ9KX19ZnVuY3Rpb24gV3IoZSx0KXtyZXR1cm4gdCYmdCgodD0+e2NvbnN0e2V2ZW50Om4scGF5bG9hZDpyfT10O2UuaGFzKG4pJiZlLmdldChuKS5mb3JFYWNoKChlPT5lKC4uLnIpKSl9KSksKHQsbik9PntlLmhhcyh0KXx8ZS5zZXQodCxuZXcgU2V0KSxlLmdldCh0KS5hZGQobil9fWZ1bmN0aW9uIFVyKGUpe3JldHVybih0LG4pPT57ZS5oYXModCl8fGUuc2V0KHQsbmV3IFNldCk7Y29uc3Qgcj1lLmdldCh0KSxvPSguLi5lKT0+e24oLi4uZSksci5kZWxldGUobyl9O3IuYWRkKG8pfX1mdW5jdGlvbiB6cihlKXtyZXR1cm4odCxuKT0+e2UuaGFzKHQpJiZlLmdldCh0KS5kZWxldGUobil9fWNvbnN0IEdyPWU9PmUucmVwbGFjZSgvW15cXGQsXS9nLFwiXCIpLnNwbGl0KFwiLFwiKSxLcj1lPT57aWYoZS5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvbG9yIG9iamVjdCwgY2Fubm90IGNvbnZlcnQgdG8gSFNMLlwiKTtjb25zdCB0PWVbMF0vMjU1LG49ZVsxXS8yNTUscj1lWzJdLzI1NSxvPU1hdGgubWluKHQsbixyKSxhPU1hdGgubWF4KHQsbixyKSxpPWEtbztsZXQgbD0wLHM9MCxjPTA7cmV0dXJuIGw9MD09PWk/MDphPT09dD8obi1yKS9pJTY6YT09PW4/KHItdCkvaSsyOih0LW4pL2krNCxsPU1hdGgucm91bmQoNjAqbCksbDwwJiYobCs9MzYwKSxjPShhK28pLzIscz0wPT1pPzA6aS8oMS1NYXRoLmFicygyKmMtMSkpLHM9KygxMDAqcykudG9GaXhlZCgxKSxjPSsoMTAwKmMpLnRvRml4ZWQoMSkse2hzbDpgaHNsKCR7bH0sICR7c30lLCAke2N9JSlgLGhzbGE6YGhzbCgke2x9LCAke3N9JSwgJHtjfSUsIDEpYCxodWU6bCxsaWdodG5lc3M6YyxzYXR1cmF0aW9uOnN9fSxxcj1lPT57aWYoIWUpdGhyb3cgbmV3IEVycm9yKFwiQ29sb3IgaXMgbm90IGRlZmluZWRcIik7Y29uc3QgdD1lLnRvTG93ZXJDYXNlKCk7bGV0IG47aWYodC5pbmNsdWRlcyhcInJnYlwiKSl7Y29uc3QgZT1Hcih0KTtlLmxlbmd0aD4zJiZlLnBvcCgpLG49S3IoZSkuaHVlfWlmKHQuaW5jbHVkZXMoXCIjXCIpKXtjb25zdCBlPShlPT57aWYoIWUuaW5jbHVkZXMoXCIjXCIpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGV4IHZhbHVlLCBjYW5ub3QgY29udmVydCB0byBSR0IuIEhleCB2YWx1ZSBiZWdpbnMgd2l0aCBhIGhhc2h0YWcuXCIpO2xldCB0PTAsbj0wLHI9MDtpZig0PT09ZS5sZW5ndGgpdD1gMHgke2VbMV19JHtlWzFdfWAsbj1gMHgke2VbMl19JHtlWzJdfWAscj1gMHgke2VbM119JHtlWzNdfWA7ZWxzZXtpZig3IT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBoZXggc3RyaW5nIGxlbmd0aCwgY2Fubm90IGNvbnZlcnQgdG8gUkdCLlwiKTt0PWAweCR7ZVsxXX0ke2VbMl19YCxuPWAweCR7ZVszXX0ke2VbNF19YCxyPWAweCR7ZVs1XX0ke2VbNl19YH1yZXR1cm5bK3QsK24sK3JdfSkodCk7bj1LcihlKS5odWV9aWYodC5pbmNsdWRlcyhcImhzbFwiKSl7bj1Hcih0KVswXX1jb25zdCByPW4/LnRvU3RyaW5nKCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBIdWUgd2FzIHVuYWJsZSB0byBiZSBleHRyYWN0ZWQgZnJvbSBcIiR7dH1cIiwgY2hlY2sgY29sb3IgZm9ybWF0LiBBY2NlcHRlZCBmb3JtYXRzIGFyZTogcmdiKCksIHJnYmEoKSwgaGV4LCBoc2woKSwgYW5kIGhzbGEoKWApO3JldHVybiByfSxZcj0oZSx0PSExKT0+e2NvbnN0IG49cXIoZSk7cmV0dXJuIHQ/e2JhY2tncm91bmQxOmBoc2xhKCR7bn0sIDAlLCAxMDAlLCAxKWAsYmFja2dyb3VuZDI6YGhzbGEoJHtufSwgNjclLCA5OSUsIDEpYCxiYWNrZ3JvdW5kMzpgaHNsYSgke259LCAyNiUsIDk2JSwgMSlgLGJhY2tncm91bmQ0OmBoc2xhKCR7bn0sIDE1JSwgOTQlLCAxKWAsYmFja2dyb3VuZDU6YGhzbGEoJHtufSwgMTAlLCA4OCUsIDEpYCxiYWNrZ3JvdW5kNjpgaHNsYSgke259LCA4MCUsIDgwJSwgMSlgfTp7YmFja2dyb3VuZDE6YGhzbGEoJHtufSwgOCUsIDclLCAxKWAsYmFja2dyb3VuZDI6YGhzbGEoJHtufSwgOCUsIDEzJSwgMSlgLGJhY2tncm91bmQzOmBoc2xhKCR7bn0sIDklLCAxNSUsIDEpYCxiYWNrZ3JvdW5kNDpgaHNsYSgke259LCA2JSwgMjMlLCAxKWAsYmFja2dyb3VuZDU6YGhzbGEoJHtufSwgMjElLCAyOCUsIDEpYCxiYWNrZ3JvdW5kNjpgaHNsYSgke259LCA1JSwgNTElLCAxKWB9fSxKcj0oZSx0KT0+e2NvbnN0IG49e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKHI9PntuW3JdPXRbcl0/dFtyXTplW3JdfSkpLG59LFhyPXtbTS5QYWxldHRlLmJyYW5kUHJpbWFyeV06XCIjMEE3NkQzXCIsW00uUGFsZXR0ZS5zdGF0dXNTdWNjZXNzXTpNLkNvbG9yLmZ1bmN0aW9uYWwxLFtNLlBhbGV0dGUuc3RhdHVzV2FybmluZ106TS5Db2xvci5mdW5jdGlvbmFsMTAsW00uUGFsZXR0ZS5zdGF0dXNDcml0aWNhbF06TS5Db2xvci5mdW5jdGlvbmFsNyxbTS5QYWxldHRlLnN0YXR1c0FjdGl2ZV06TS5Db2xvci5mdW5jdGlvbmFsMyxbTS5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kMV06XCIjMEE3NkQzXCIsW00uUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDJdOlwiIzAwMDAwMFwiLFtNLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQzXTpcIiMwMDAwMDBcIixbTS5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kNF06XCIjMDAwMDAwXCIsW00uUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDVdOlwiIzAwMDAwMFwifSxRcj17Li4uWHIsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kMV06TS5Db2xvci53aGl0ZSxbTS5QYWxldHRlLmJhY2tncm91bmQyXTpNLkNvbG9yLmxpZ2h0R3JheTEsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kM106TS5Db2xvci5saWdodEdyYXkyLFtNLlBhbGV0dGUuYmFja2dyb3VuZDRdOk0uQ29sb3IubGlnaHRHcmF5MyxbTS5QYWxldHRlLmJhY2tncm91bmQ1XTpNLkNvbG9yLmxpZ2h0R3JheTQsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kNl06TS5Db2xvci5saWdodEdyYXk1LFtNLlBhbGV0dGUuYnJhbmRTZWNvbmRhcnldOk0uQ29sb3IubGlnaHRHcmF5NCxbTS5QYWxldHRlLmlucHV0QmFja2dyb3VuZF06TS5Db2xvci5saWdodEdyYXkzLFtNLlBhbGV0dGUuaW5wdXRDb2xvcl06TS5Db2xvci5kYXJrR3JheTUsW00uUGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyXTpNLkNvbG9yLmRhcmtHcmF5MixbTS5QYWxldHRlLmlucHV0RGlzYWJsZWRdOk0uQ29sb3IubmV1dHJhbEdyYXksW00uUGFsZXR0ZS5pbnB1dEZvY3VzZWRdOk0uQ29sb3IubGlnaHRHcmF5NSxbTS5QYWxldHRlLmlucHV0Qm9yZGVyXTpNLkNvbG9yLm5ldXRyYWxHcmF5LFtNLlBhbGV0dGUudGV4dERlZmF1bHRdOk0uQ29sb3IuZGFya0dyYXk1LFtNLlBhbGV0dGUudGV4dEhlbHBdOk0uQ29sb3IuZGFya0dyYXkzLFtNLlBhbGV0dGUudGV4dEluYWN0aXZlXTpNLkNvbG9yLm5ldXRyYWxHcmF5fSxlbz17Li4uWHIsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kMV06TS5Db2xvci5kYXJrR3JheTYsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kMl06TS5Db2xvci5kYXJrR3JheTUsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kM106TS5Db2xvci5kYXJrR3JheTQsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kNF06TS5Db2xvci5kYXJrR3JheTMsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kNV06TS5Db2xvci5kYXJrR3JheTIsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kNl06TS5Db2xvci5kYXJrR3JheTEsW00uUGFsZXR0ZS5icmFuZFNlY29uZGFyeV06TS5Db2xvci5kYXJrR3JheTIsW00uUGFsZXR0ZS5pbnB1dEJhY2tncm91bmRdOk0uQ29sb3IuZGFya0dyYXkxLFtNLlBhbGV0dGUuaW5wdXRDb2xvcl06TS5Db2xvci53aGl0ZSxbTS5QYWxldHRlLmlucHV0UGxhY2Vob2xkZXJdOk0uQ29sb3IubGlnaHRHcmF5NSxbTS5QYWxldHRlLmlucHV0RGlzYWJsZWRdOk0uQ29sb3IubmV1dHJhbEdyYXksW00uUGFsZXR0ZS5pbnB1dEZvY3VzZWRdOk0uQ29sb3IubGlnaHRHcmF5NSxbTS5QYWxldHRlLmlucHV0Qm9yZGVyXTpNLkNvbG9yLm5ldXRyYWxHcmF5LFtNLlBhbGV0dGUudGV4dERlZmF1bHRdOk0uQ29sb3Iud2hpdGUsW00uUGFsZXR0ZS50ZXh0SGVscF06TS5Db2xvci5saWdodEdyYXk1LFtNLlBhbGV0dGUudGV4dEluYWN0aXZlXTpNLkNvbG9yLm5ldXRyYWxHcmF5fSx0bz1be2xhYmVsOlwiT3BlbkZpbiBEZWZhdWx0IExpZ2h0IGFuZCBEYXJrIFRoZW1lXCIscGFsZXR0ZXM6e2xpZ2h0OnsuLi5RcixicmFuZFByaW1hcnk6XCIjMEE3NkQzXCIsYnJhbmRTZWNvbmRhcnk6TS5Db2xvci5saWdodEdyYXk0LGJhY2tncm91bmRQcmltYXJ5Ok0uQ29sb3IuZGFya0dyYXk1fSxkYXJrOnsuLi5lbyxicmFuZFByaW1hcnk6XCIjMEE3NkQzXCIsYnJhbmRTZWNvbmRhcnk6TS5Db2xvci5kYXJrR3JheTIsYmFja2dyb3VuZFByaW1hcnk6TS5Db2xvci5kYXJrR3JheTV9fX1dLG5vPWU9Pntjb25zdHtiYWNrZ3JvdW5kOnQsZm9yZWdyb3VuZDpufT1lO3JldHVybntiYWNrZ3JvdW5kOnQsZm9yZWdyb3VuZDpuPz9cIiNGRkZGRkZcIn19LHJvPWU9Pntjb25zdHtsaWdodDp0LGRhcms6bn09XCJwYWxldHRlc1wiaW4gZT9lLnBhbGV0dGVzOntsaWdodDplLnBhbGV0dGUsZGFyazplLnBhbGV0dGV9LHI9SnIoZW8sbiksbz1KcihRcix0KSxhPSgoZSx0KT0+e2NvbnN0IG49ey4uLmV9LHI9ey4uLnR9O2xldCBvPXQuYmFja2dyb3VuZFByaW1hcnk/WXIodC5iYWNrZ3JvdW5kUHJpbWFyeSwhMCk6e30sYT1lLmJhY2tncm91bmRQcmltYXJ5P1lyKGUuYmFja2dyb3VuZFByaW1hcnkpOnt9O3JldHVybiBvPXsuLi5vLC4uLnJ9LGE9ey4uLmEsLi4ubn0se2xpZ2h0OnsuLi50LC4uLm99LGRhcms6ey4uLmUsLi4uYX19fSkobix0KSxpPSgwLE0uY3JlYXRlVGhlbWUpKHsuLi5yLC4uLmE/LmRhcmt9KSxsPSgwLE0uY3JlYXRlVGhlbWUpKHsuLi5vLC4uLmE/LmxpZ2h0fSkse2xpZ2h0OnMsZGFyazpjfT0oZT0+e2NvbnN0IHQ9T2JqZWN0LmtleXMoZS5ub3RpZmljYXRpb25JbmRpY2F0b3JDb2xvcnM/P3t9KTtpZih0Py5sZW5ndGgpe2NvbnN0IG49e30scj17fTtyZXR1cm4gdC5mb3JFYWNoKCh0PT57Y29uc3Qgbz1lLm5vdGlmaWNhdGlvbkluZGljYXRvckNvbG9yc1t0XTtcImJhY2tncm91bmRcImluIG8/KG5bdF09bm8obyksclt0XT1ubyhvKSk6KG5bdF09bm8oby5kYXJrPz9vLmxpZ2h0KSxyW3RdPW5vKG8ubGlnaHQ/P28uZGFyaykpfSkpLHtsaWdodDpyLGRhcms6bn19cmV0dXJue2xpZ2h0Om51bGwsZGFyazpudWxsfX0pKGUpO3JldHVybiBpLm5vdGlmaWNhdGlvbkluZGljYXRvckNvbG9ycz1jLGwubm90aWZpY2F0aW9uSW5kaWNhdG9yQ29sb3JzPXMse2Rhcms6aSxsaWdodDpsfX0sb289YXN5bmMgZT0+e2NvbnN0e3RoZW1lczp0LHNlbGVjdGVkU2NoZW1lOm59PWF3YWl0KGFzeW5jIGU9Pntjb25zdCB0PWZpbj8uX19pbnRlcm5hbF8/LmluaXRpYWxPcHRpb25zPy53b3Jrc3BhY2VQbGF0Zm9ybT8uX3RoZW1lRGF0YTtpZighdHx8ZS51dWlkIT09WS51dWlkKXJldHVybnt0aGVtZXM6YXdhaXQgU3QoZSkuVGhlbWUuZ2V0VGhlbWVzKCksc2VsZWN0ZWRTY2hlbWU6YXdhaXQgU3QoZSkuVGhlbWUuZ2V0U2VsZWN0ZWRTY2hlbWUoKX07cmV0dXJuIHR9KShlKTt2YXIgcixvO3JldHVybihyPXQ/Lmxlbmd0aD90OnRvLG89bixyLm1hcCgoZT0+e2NvbnN0IHQ9XCJwYWxldHRlc1wiaW4gZT9lLmRlZmF1bHQ6TS5Db2xvclNjaGVtZS5kYXJrLHtsaWdodDpuLGRhcms6cn09cm8oZSk7cmV0dXJue2xhYmVsOmUubGFiZWwsbG9nb1VybDplLmxvZ29VcmwsdGhlbWU6e2Rhcms6cixsaWdodDpufSxkZWZhdWx0U2NoZW1lOm8/P3R9fSkpKVswXX0sYW89YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgR2UoZXx8ZmluLm1lLmlkZW50aXR5KSxuPWF3YWl0IHQuZGlzcGF0Y2goV2UuR2V0U2VsZWN0ZWRTY2hlbWUsdm9pZCAwKTtyZXR1cm4gbj09PWcuU3lzdGVtP3dpbmRvdy5tYXRjaE1lZGlhKFwiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKVwiKS5tYXRjaGVzP1wiZGFya1wiOlwibGlnaHRcIjpufSxpbz17bmFtZTpLLkJyb3dzZXJNZW51LGFsd2F5c09uVG9wOiEwLGF1dG9TaG93OiEwLGZyYW1lOiExLHJlc2l6YWJsZTohMSxiYWNrZ3JvdW5kQ29sb3I6XCIjMmYzMTM2XCIsc21hbGxXaW5kb3c6ITAsc2hvd1Rhc2tiYXJJY29uOiExLGJhY2tncm91bmRUaHJvdHRsaW5nOiExLHNhdmVXaW5kb3dTdGF0ZTohMX07ZnVuY3Rpb24gbG8oZSl7Y29uc3QgdD17Li4uaW8sLi4uZX07cmV0dXJuIHQudXJsPWZ1bmN0aW9uKGUpe2lmKCFqKXRocm93IG5ldyBFcnJvcihcInJlc29sdmVBYnNvbHV0ZVBhdGggY2FuIG9ubHkgYmUgdXNlZCBpbiBhIHdpbmRvd1wiKTtyZXR1cm4gZS5zdGFydHNXaXRoKFwiaHR0cFwiKT9lOmAke3dpbmRvdy5vcmlnaW59JHtlfWB9KHQudXJsPz9cIlwiKSx0fWNvbnN0IHNvPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IE1hcDtyZXR1cm57ZW1pdDpGcih0LCh0PT5FJiZmaW4uSW50ZXJBcHBsaWNhdGlvbkJ1cy5wdWJsaXNoKGUsdCkpKSxhZGRMaXN0ZW5lcjpXcih0LCh0PT5FJiZmaW4uSW50ZXJBcHBsaWNhdGlvbkJ1cy5zdWJzY3JpYmUoe3V1aWQ6ZmluLm1lLnV1aWR9LGUsdCkpKSxyZW1vdmVMaXN0ZW5lcjp6cih0KSxvbmNlOlVyKHQpfX0oXCJ3aW5kb3cubWVudVwiKSxjbz0oZSx0KT0+ZmluLldpbmRvdy53cmFwU3luYyhlKS51cGRhdGVPcHRpb25zKHtvcGFjaXR5OnR9KSx1bz1lPT5zby5lbWl0KFwicmVzcG9uc2VcIixlKSxwbz1OcigoKCk9PkcoKS5nZXRDaGlsZFdpbmRvd3MoKSksNTAwKTtjb25zdCBmbz1uZXcgTWFwO2FzeW5jIGZ1bmN0aW9uIGhvKGUsdCl7Y29uc3Qgbj1sbyhlKSxyPXt0b3A6bi50b3AsbGVmdDpuLmxlZnQsd2lkdGg6bi5kZWZhdWx0V2lkdGh8fG4ud2lkdGgsaGVpZ2h0Om4uZGVmYXVsdEhlaWdodHx8bi5oZWlnaHR9O3JldHVybiB0LnNldChcInBhcmVudE5hbWVcIixmaW4uV2luZG93LmdldEN1cnJlbnRTeW5jKCkuaWRlbnRpdHkubmFtZSkse25hbWU6bi5uYW1lLGJvdW5kczpyLHJvdXRlOmAke24udXJsfSMke3QudG9TdHJpbmcoKX1gfX1hc3luYyBmdW5jdGlvbiBnbyh7b3B0aW9uczplLHBhcmFtZXRlcnM6dH0pe2NvbnN0IG49bG8oZSkse25hbWU6cn09bjtsZXQgbz1hd2FpdCBhc3luYyBmdW5jdGlvbihlKXtyZXR1cm4oYXdhaXQgcG8oKSkuZmluZCgodD0+dC5pZGVudGl0eS5uYW1lPT09ZSkpfShyKTtpZihvKWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCl7Y29uc3R7bmFtZTpuLGJvdW5kczpyLHJvdXRlOm99PWF3YWl0IGhvKGUsdCksYT17dXVpZDpmaW4ubWUuaWRlbnRpdHkudXVpZCxuYW1lOm59LGk9ZmluLldpbmRvdy53cmFwU3luYyhhKTthd2FpdCBQcm9taXNlLmFsbChbY28oYSwwKSxpLnNldEJvdW5kcyhyKV0pLGkub25jZShcImJsdXJyZWRcIiwoKCk9PntjbyhhLDApLGkuaGlkZSgpLHVvKHtuYW1lOmEubmFtZSxkYXRhOnthY3Rpb25OYW1lOlwiQ2FuY2VsXCJ9fSl9KSksc28uZW1pdChcInVwZGF0ZVwiLG4scixvKSxhd2FpdCB1byh7bmFtZTpuLGRhdGE6e2FjdGlvbk5hbWU6XCJDYW5jZWxcIn19KX0obix0fHxuZXcgVVJMU2VhcmNoUGFyYW1zKTtlbHNle2NvbnN0e3JvdXRlOnIsYm91bmRzOmF9PWF3YWl0IGhvKGUsdCk7bz1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQsbil7Y29uc3Qgcj1sbyhlKSxvPWF3YWl0IG9vKGZpbi5tZS5pZGVudGl0eSksYT1hd2FpdCBhbyhmaW4ubWUuaWRlbnRpdHkpPT09Zy5EYXJrLGk9bz8udGhlbWU7aWYoci5iYWNrZ3JvdW5kQ29sb3I9aT8uW2E/Zy5EYXJrOmcuTGlnaHRdLnBhbGV0dGU/LmlucHV0QmFja2dyb3VuZHx8ci5iYWNrZ3JvdW5kQ29sb3IsIWZvLmhhcyhyLm5hbWUpKXJldHVybiBuZXcgUHJvbWlzZSgoZT0+e3NvLm9uY2UoXCJyZWFkeVwiLChhc3luYyB0PT57aWYodC5uYW1lPT09ci5uYW1lKXtjb25zdCBuPWF3YWl0IGZvLmdldChyLm5hbWUpO24ub25jZShcImJsdXJyZWRcIiwoYXN5bmMoKT0+e2lmKGNvKHQsMCksbi5oaWRlKCksdW8oe25hbWU6ci5uYW1lLGRhdGE6e2FjdGlvbk5hbWU6XCJDYW5jZWxcIn19KSxuLmlkZW50aXR5Lm5hbWU9PT1LLkJyb3dzZXJTYXZlTWVudSl7Y29uc3QgZT1hd2FpdCBuLmdldE9wdGlvbnMoKTtcInN1Ym1pdHRpbmdcIiE9PWUuY3VzdG9tQ29udGV4dCYmXCJlcnJvclwiIT09ZS5jdXN0b21Db250ZXh0JiZuLmNsb3NlKCl9ZWxzZSBuLmlkZW50aXR5Lm5hbWUuc3RhcnRzV2l0aChLLkJyb3dzZXJNZW51KSYmbi5jbG9zZSgpfSkpLHNldFRpbWVvdXQoKGFzeW5jKCk9Pnthd2FpdCBjbyh0LDEpLDEhPT0oYXdhaXQgZmluLldpbmRvdy53cmFwU3luYyh0KS5nZXRPcHRpb25zKCkpLm9wYWNpdHkmJmNvKHQsMSl9KSksZShuKX19KSk7Y29uc3Qgbz0oYXN5bmMoKT0+e2NvbnN0IGU9YXdhaXQgZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkuY3JlYXRlV2luZG93KGpyKHsuLi5yLG9wYWNpdHk6MCx1cmw6dHx8ci51cmwsZGVmYXVsdExlZnQ6bj8ubGVmdCxkZWZhdWx0VG9wOm4/LnRvcCxkZWZhdWx0V2lkdGg6bj8ud2lkdGgsZGVmYXVsdEhlaWdodDpuPy5oZWlnaHR9LCEwKSk7cmV0dXJuIGUub25jZShcImNsb3NlZFwiLCgoKT0+e2ZvLmRlbGV0ZShyLm5hbWUpfSkpLGV9KSgpO2ZvLnNldChyLm5hbWUsbyl9KSk7cmV0dXJuIGZvLmdldChyLm5hbWUpfSh7Li4ubn0scixhKX1yZXR1cm4gb31jb25zdCB2bz1hc3luYyh7b3B0aW9uczplLGNvbnRlbnQ6dH0pPT57Y29uc3Qgbj0oZT0+bmV3IFVSTFNlYXJjaFBhcmFtcyh7Y29udGVudDpKU09OLnN0cmluZ2lmeShlKX0pKSh7Li4udCxpbnZvY2F0aW9uSWQ6SWUoKX0pLHI9ey4uLmUsbmFtZTpgJHtlLm5hbWV9LS0ke2UubW9kYWxQYXJlbnRJZGVudGl0eT8ubmFtZT8/XCJcIn1gfTtyZXR1cm4gYXdhaXQgZ28oe29wdGlvbnM6cixwYXJhbWV0ZXJzOm59KSxuZXcgUHJvbWlzZSgoZT0+e3NvLm9uY2UoXCJyZXNwb25zZVwiLChhc3luYyB0PT57dC5uYW1lPT09ci5uYW1lJiZlKHtkYXRhOnQuZGF0YX0pfSkpfSkpfSxDbz1hc3luYyhlLHQsbj0hMSk9PntsZXQgcjtpZihuKXI9YXdhaXQoYXN5bmMgZT0+e2NvbnN0IHQ9ZSYmYXdhaXQgcShlKS5nZXRCb3VuZHMoKSxuPWU/YXdhaXQgaWUodCk6KGF3YWl0IGZpbi5TeXN0ZW0uZ2V0TW9uaXRvckluZm8oKSkucHJpbWFyeU1vbml0b3I7cmV0dXJue2xlZnQ6KChyPW4uYXZhaWxhYmxlUmVjdCkubGVmdCtyLnJpZ2h0KS8yLHRvcDooci50b3Arci5ib3R0b20pLzJ9O3ZhciByfSkodCk7ZWxzZXtjb25zdCBlPXEodCksbj1hd2FpdCBlLmdldEJvdW5kcygpO3I9cj8/e2xlZnQ6KChvPW4pLmxlZnQrKG8ucmlnaHQ/P28ubGVmdCtvLndpZHRoKSkvMix0b3A6KG8udG9wKyhvLmJvdHRvbT8/by50b3Arby5oZWlnaHQpKS8yfX12YXIgbztjb25zdHtkZWZhdWx0SGVpZ2h0OmEsZGVmYXVsdFdpZHRoOml9PWU7cmV0dXJuKChlLHQpPT57Y29uc3Qgbj10LndpZHRoLzIscj10LmhlaWdodC8yO3JldHVybntsZWZ0Ok1hdGgucm91bmQoZS5sZWZ0LW4pLHRvcDpNYXRoLnJvdW5kKGUudG9wLXIpLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fX0pKHIse2hlaWdodDphLHdpZHRoOml9KX07YXN5bmMgZnVuY3Rpb24gbW8oZSx0LG49ITEpe2NvbnN0IHI9dCYmXCJtYXhpbWl6ZWRcIj09PWF3YWl0IHEodCkuZ2V0U3RhdGUoKSxvPW58fHJ8fCF0LGE9YXdhaXQgQ28oZSx0LG8pO3JldHVybiBhd2FpdChhc3luYyBlPT57Y29uc3QgdD1hd2FpdCBmaW4uU3lzdGVtLmdldE1vbml0b3JJbmZvKCksbj1bdC5wcmltYXJ5TW9uaXRvciwuLi50Lm5vblByaW1hcnlNb25pdG9yc107Zm9yKGNvbnN0IHQgb2YgbilpZigxPT09YWUoZSx0KSlyZXR1cm4hMTtyZXR1cm4hMH0pKGEpPyhhd2FpdCBxKHQpLmNlbnRlcigpLENvKGUsdCxvKSk6KGNvbnNvbGUud2FybihcIlJlc3BvbnNlIG1vZGFsIGlzbid0IG9mZiBzY3JlZW4sIG5vdCBjZW50ZXJpbmcgcGFyZW50IHdpbmRvd1wiKSxhKX1jb25zdCB3bz1hc3luYyhlLHQsbik9Pntjb25zdHt3aW5kb3dPcHRpb25zOnIsY29udGVudDpvfT1hd2FpdChhc3luYyhlLHQpPT4oe3RpdGxlOlwiU3dpdGNoIFdvcmtzcGFjZVwiLHdpbmRvd09wdGlvbnM6e3VybDphd2FpdCBQcigpK18uUmVzcG9uc2VNb2RhbCxuYW1lOksuQnJvd3Nlck1lbnUsZGVmYXVsdEhlaWdodDoxMzQsZGVmYXVsdFdpZHRoOjQxMCxtb2RhbFBhcmVudElkZW50aXR5OnR9LGNvbnRlbnQ6e3RpdGxlOlRuKFwic3dpdGNoV29ya3NwYWNlTW9kYWxcIix7d29ya3NwYWNlOmV9KSxib2R5OlRuKFwic3dpdGNoV29ya3NwYWNlTW9kYWwud2FybmluZ1wiKSxidXR0b25zOntyaWdodDpbe2xhYmVsOlRuKFwiZ2xvYmFsLmNhbmNlbFwiKSx0eXBlOlwic2Vjb25kYXJ5XCIsaWQ6XCJDYW5jZWxcIn0se2xhYmVsOlRuKFwiZ2xvYmFsLmNvbmZpcm1cIiksdHlwZTpcInByaW1hcnlcIixpZDpcIkNvbmZpcm1cIn1dfX19KSkodCxuP3ZvaWQgMDplKSxhPWF3YWl0IG1vKHIsZSxuKSxpPXsuLi5yLHRvcDphLnRvcCxsZWZ0OmEubGVmdH07cmV0dXJuXCJDb25maXJtXCI9PT0oYXdhaXQgdm8oe29wdGlvbnM6aSxjb250ZW50Om99KSkuZGF0YS5hY3Rpb25OYW1lfSxibz1hc3luYyhlLHQpPT57Y29uc3R7d2luZG93T3B0aW9uczpuLGNvbnRlbnQ6cn09YXdhaXQoYXN5bmMoZSx0KT0+KHt0aXRsZTpcIkRlbGV0ZSBXb3Jrc3BhY2VcIix3aW5kb3dPcHRpb25zOnt1cmw6YXdhaXQgUHIoKStfLlJlc3BvbnNlTW9kYWwsbmFtZTpLLkJyb3dzZXJNZW51LGRlZmF1bHRIZWlnaHQ6MTQ0LGRlZmF1bHRXaWR0aDo0MTAsbW9kYWxQYXJlbnRJZGVudGl0eTplfSxjb250ZW50Ont0aXRsZTpUbihcImRlbGV0ZVdvcmtzcGFjZU1vZGFsXCIpLGJvZHk6YCR7dH1gLGJ1dHRvbnM6e3JpZ2h0Olt7bGFiZWw6VG4oXCJnbG9iYWwuY2FuY2VsXCIpLHR5cGU6XCJzZWNvbmRhcnlcIixpZDpcIkNhbmNlbFwifSx7bGFiZWw6VG4oXCJnbG9iYWwuY29uZmlybVwiKSx0eXBlOlwicHJpbWFyeVwiLGlkOlwiQ29uZmlybVwifV19fX0pKShlLHQpLG89YXdhaXQgbW8obixuLm1vZGFsUGFyZW50SWRlbnRpdHkpLGE9ey4uLm4sdG9wOm8udG9wLGxlZnQ6by5sZWZ0fTtyZXR1cm5cIkNvbmZpcm1cIj09PShhd2FpdCB2byh7b3B0aW9uczphLGNvbnRlbnQ6cn0pKS5kYXRhLmFjdGlvbk5hbWV9LHlvPWFzeW5jKGUsdCxuKT0+e2NvbnN0e3dpbmRvd09wdGlvbnM6cixjb250ZW50Om99PWF3YWl0KGFzeW5jKGUsdCk9Pih7dGl0bGU6XCJQbGF0Zm9ybSBRdWl0XCIsd2luZG93T3B0aW9uczp7dXJsOmF3YWl0IFByKCkrXy5SZXNwb25zZU1vZGFsLG5hbWU6Sy5Ccm93c2VyTWVudSxkZWZhdWx0SGVpZ2h0OjEzNCxkZWZhdWx0V2lkdGg6NDEwLG1vZGFsUGFyZW50SWRlbnRpdHk6dH0sY29udGVudDp7dGl0bGU6VG4oXCJQbGF0Zm9ybVwiPT09ZT9cImNsb3NlUGxhdGZvcm1cIjpcImNsb3NlUGxhdGZvcm0ud29ya3NwYWNlXCIse3dvcmtzcGFjZTplfSksYm9keTpUbihcImNsb3NlUGxhdGZvcm0ud2FybmluZ1wiKSxidXR0b25zOntyaWdodDpbe2xhYmVsOlRuKFwiZ2xvYmFsLmNhbmNlbFwiKSx0eXBlOlwic2Vjb25kYXJ5XCIsaWQ6XCJDYW5jZWxcIn0se2xhYmVsOlRuKFwiZ2xvYmFsLmNvbmZpcm1cIiksdHlwZTpcInByaW1hcnlcIixpZDpcIkNvbmZpcm1cIn1dfX19KSkodCxuP3ZvaWQgMDplKSxhPWF3YWl0IG1vKHIsZSxuKSxpPXsuLi5yLHRvcDphLnRvcCxsZWZ0OmEubGVmdH07cmV0dXJuXCJDb25maXJtXCI9PT0oYXdhaXQgdm8oe29wdGlvbnM6aSxjb250ZW50Om99KSkuZGF0YS5hY3Rpb25OYW1lfSx4bz1hc3luYyBlPT57Y29uc3R7d2luZG93T3B0aW9uczp0LGNvbnRlbnQ6bn09YXdhaXQoYXN5bmMgZT0+KHt0aXRsZTpcIlJlc3RvcmUgQ2hhbmdlc1wiLHdpbmRvd09wdGlvbnM6e3VybDphd2FpdCBQcigpK18uUmVzcG9uc2VNb2RhbCxuYW1lOksuQnJvd3Nlck1lbnUsZGVmYXVsdEhlaWdodDoxMzQsZGVmYXVsdFdpZHRoOjQxMCxtb2RhbFBhcmVudElkZW50aXR5OmV9LGNvbnRlbnQ6e3RpdGxlOlRuKFwicmVzdG9yZU1vZGFsXCIpLGJvZHk6VG4oXCJtb2RhbC5kaXNjYXJkV2FybmluZ1wiKSxidXR0b25zOntyaWdodDpbe2xhYmVsOlRuKFwiZ2xvYmFsLmNhbmNlbFwiKSx0eXBlOlwic2Vjb25kYXJ5XCIsaWQ6XCJDYW5jZWxcIn0se2xhYmVsOlRuKFwiZ2xvYmFsLmNvbmZpcm1cIiksdHlwZTpcInByaW1hcnlcIixpZDpcIkNvbmZpcm1cIn1dfX19KSkoZSkscj1hd2FpdCBtbyh0LHQubW9kYWxQYXJlbnRJZGVudGl0eSksbz17Li4udCx0b3A6ci50b3AsbGVmdDpyLmxlZnR9O3JldHVyblwiQ29uZmlybVwiPT09KGF3YWl0IHZvKHtvcHRpb25zOm8sY29udGVudDpufSkpLmRhdGEuYWN0aW9uTmFtZX0sa289YXN5bmMoZSx0KT0+e2NvbnN0e3dpbmRvd09wdGlvbnM6bixjb250ZW50OnJ9PWF3YWl0KGFzeW5jKGUsdCk9Pntjb25zdCBuPWF3YWl0IGxlKGUpLHI9bmV3IFVSTChhd2FpdCBQcigpK18uUmVzcG9uc2VNb2RhbCk7cmV0dXJuIHIuc2VhcmNoUGFyYW1zLmFwcGVuZChcImlzRW50ZXJwcmlzZVwiLGAke259YCkse3RpdGxlOlwiRGVsZXRlIFBhZ2VcIix3aW5kb3dPcHRpb25zOnt1cmw6ci50b1N0cmluZygpLG5hbWU6Sy5Ccm93c2VyTWVudSxkZWZhdWx0SGVpZ2h0OjE3MixkZWZhdWx0V2lkdGg6NDY0LG1vZGFsUGFyZW50SWRlbnRpdHk6ZX0sY29udGVudDp7dGl0bGU6VG4oXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJcIix7dGl0bGU6dH0pLGJvZHk6VG4oXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJXYXJuaW5nXCIpLGJ1dHRvbnM6e3JpZ2h0Olt7bGFiZWw6VG4oXCJnbG9iYWwuY2FuY2VsXCIpLHR5cGU6XCJzZWNvbmRhcnlcIixpZDpcIkNhbmNlbFwifSx7bGFiZWw6VG4oXCJnbG9iYWwuZGVsZXRlXCIpLHR5cGU6XCJwcmltYXJ5XCIsaWQ6XCJEZWxldGVcIn1dfX19fSkoZSx0KSxvPWF3YWl0IG1vKG4sbi5tb2RhbFBhcmVudElkZW50aXR5KSxhPXsuLi5uLHRvcDpvLnRvcCxsZWZ0Om8ubGVmdH07cmV0dXJuXCJEZWxldGVcIj09PShhd2FpdCB2byh7b3B0aW9uczphLGNvbnRlbnQ6cn0pKS5kYXRhLmFjdGlvbk5hbWV9O2FzeW5jIGZ1bmN0aW9uIFNvKHtvcHRpb25zOmUsLi4udH0pe3RyeXtpZighKCEhZT8uc2tpcFByb21wdHx8YXdhaXQgd28oZT8ucHJvbXB0Q29udGFpbmVyV2luZG93SWRlbnRpdHksdC50aXRsZSxlPy5zaG91bGRDZW50ZXJNb2RhbE9uTW9uaXRvcikpKXJldHVybiExO2NvbnN0IG49T3QoKTthd2FpdCBuLmFwcGx5U25hcHNob3QodC5zbmFwc2hvdCx7Li4uZT8uYXBwbHlTbmFwc2hvdE9wdGlvbnM/P3t9LGNsb3NlRXhpc3RpbmdXaW5kb3dzOmU/LmFwcGx5U25hcHNob3RPcHRpb25zPy5jbG9zZUV4aXN0aW5nV2luZG93cz8/ITB9KSxPbyh0KSxBcihFci5TVUNDRVNTLFRuKFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTd2l0Y2hlZFwiKSkuY2F0Y2goY29uc29sZS53YXJuKX1jYXRjaChlKXtyZXR1cm4gY29uc29sZS5lcnJvcihcImZhaWxlZCB0byBhcHBseSB0aGUgY3VycmVudCB3b3Jrc3BhY2U6IFwiLGUpLCExfXJldHVybiEwfWZ1bmN0aW9uIE9vKGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBsb2NhbFN0b3JhZ2UpdHJ5e2NvbnN0IHQ9SlNPTi5zdHJpbmdpZnkoZSk7Y3QoTGUuQ3VycmVudFdvcmtzcGFjZUlkLHQpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gc2V0IHRoZSBhY3RpdmUgd29ya3NwYWNlOiBcIixlKX19YXN5bmMgZnVuY3Rpb24gTW8oKXtjb25zdCBlPU90KCksdD1hd2FpdCBlLmdldFNuYXBzaG90KCk7cmV0dXJue3dvcmtzcGFjZUlkOkllKCksdGl0bGU6YXdhaXQgRW8oKSxtZXRhZGF0YTp7QVBJVmVyc2lvbjpOfSxzbmFwc2hvdDp0fX1hc3luYyBmdW5jdGlvbiBMbygpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBsb2NhbFN0b3JhZ2UpcmV0dXJuIE1vKCk7Y29uc3QgZT11dChMZS5DdXJyZW50V29ya3NwYWNlSWQpO2lmKCFlKXJldHVybiBNbygpO2NvbnN0IHQ9SlNPTi5wYXJzZShlKSxuPU90KCkscj1hd2FpdCBuLmdldFNuYXBzaG90KCk7cmV0dXJuey4uLnQsbWV0YWRhdGE6e0FQSVZlcnNpb246Tn0sc25hcHNob3Q6cn19Y29uc3QgX289YXN5bmMoKT0+KGF3YWl0IEdlKFkpKS5kaXNwYXRjaChXZS5HZXRTYXZlZFdvcmtzcGFjZXMsdm9pZCAwKSxQbz1hc3luYyBlPT5hd2FpdChhc3luYyBlPT4oYXdhaXQgR2UoWSkpLmRpc3BhdGNoKFdlLkdldFNhdmVkV29ya3NwYWNlLGUpKShlLndvcmtzcGFjZUlkKT8oYXN5bmMgZT0+KGF3YWl0IEdlKFkpKS5kaXNwYXRjaChXZS5VcGRhdGVTYXZlZFdvcmtzcGFjZSxlKSkoe3dvcmtzcGFjZUlkOmUud29ya3NwYWNlSWQsd29ya3NwYWNlOmV9KTooYXN5bmMgZT0+KGF3YWl0IEdlKFkpKS5kaXNwYXRjaChXZS5DcmVhdGVTYXZlZFdvcmtzcGFjZSxlKSkoe3dvcmtzcGFjZTplfSk7YXN5bmMgZnVuY3Rpb24gRW8oZT1cIlVudGl0bGVkIFdvcmtzcGFjZVwiKXtjb25zdCB0PShhd2FpdCBfbygpKS5tYXAoKCh7dGl0bGU6ZX0pPT5lKSk7cmV0dXJuIEduKGUsdCl9Y29uc3Qgam89ZT0+KHsuLi5lLHNuYXBzaG90OnsuLi5lLnNuYXBzaG90LHdpbmRvd3M6ZS5zbmFwc2hvdC53aW5kb3dzLm1hcCgoZT0+KHsuLi5lLHdvcmtzcGFjZVBsYXRmb3JtOnsuLi5lLndvcmtzcGFjZVBsYXRmb3JtLHBhZ2VzOmUud29ya3NwYWNlUGxhdGZvcm0/LnBhZ2VzPy5tYXAoKGU9Pih7Li4uZSxoYXNVbnNhdmVkQ2hhbmdlczohMX0pKSl9fSkpKX19KSxSbz1hc3luYyhlLHQpPT57Y29uc3Qgbj10Pz9PdCgpO2F3YWl0IG4uU3RvcmFnZS5zYXZlV29ya3NwYWNlKGpvKGUpKSxhd2FpdChhc3luYygpPT4oYXdhaXQgR2UoWSkpLmRpc3BhdGNoKFdlLk1hcmtVbnNhdmVkUGFnZXNBc1NhdmVkSW50ZXJuYWwsdm9pZCAwKSkoKX0sSW89YXN5bmMgZT0+e2NvbnN0IHQ9T3QoKSxuPWF3YWl0IHQuZ2V0Q3VycmVudFdvcmtzcGFjZSgpLHI9YXdhaXQgdC5TdG9yYWdlLmdldFdvcmtzcGFjZXMoKSxvPW4ud29ya3NwYWNlSWQ7aWYoci5zb21lKChlPT5lLndvcmtzcGFjZUlkPT09bykpKWF3YWl0IFJvKG4sdCksYXdhaXQgdC5zZXRBY3RpdmVXb3Jrc3BhY2UobiksYXdhaXQgVHIoVG4oXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkXCIpLGUpO2Vsc2V7Y29uc3Qgbj10LkJyb3dzZXIud3JhcFN5bmMoZSk7YXdhaXQgbi5fb3BlblNhdmVNb2RhbCh7bWVudVR5cGU6Uy5TQVZFX1dPUktTUEFDRX0pfX0sVm89ZT0+e090KCkuQnJvd3Nlci53cmFwU3luYyhlKS5fb3BlblNhdmVNb2RhbCh7bWVudVR5cGU6Uy5TQVZFX1dPUktTUEFDRV9BU30pfSxIbz1hc3luYyBlPT57Y29uc3QgdD1PdCgpLkJyb3dzZXIud3JhcFN5bmMoZSkse25ld1BhZ2VVcmw6bn09YXdhaXQgRHIoKSxyPWF3YWl0IFpyKGUpLG89bnx8dm9pZCAwO2F3YWl0IHQuX2FkZERlZmF1bHRQYWdlKHtpZGVudGl0eTplLHBhZ2U6cixuZXdQYWdlVXJsOm99KX0sQW89YXN5bmMoZSx0KT0+e2NvbnN0IG49T3QoKS5Ccm93c2VyLndyYXBTeW5jKGUpLHI9YXdhaXQgT3QoKS5TdG9yYWdlLmdldFBhZ2VzKCksbz0oYXdhaXQgbi5nZXRQYWdlcygpKS5maW5kKChlPT50P2UucGFnZUlkPT09dDplLmlzQWN0aXZlKSksYT1yLnNvbWUoKGU9Pm8ucGFnZUlkPT09ZS5wYWdlSWQpKSxpPWF3YWl0IGxlKGUpO2lmKGEpdHJ5e2F3YWl0IE90KCkuU3RvcmFnZS5zYXZlUGFnZSgodT1vLHsuLi51LGhhc1Vuc2F2ZWRDaGFuZ2VzOnZvaWQgMCxwYXJlbnRJZGVudGl0eTp2b2lkIDAsaXNBY3RpdmU6dm9pZCAwLGxheW91dDpJdCh1LmxheW91dCl9KSksYXdhaXQgbi51cGRhdGVQYWdlKHtwYWdlSWQ6by5wYWdlSWQscGFnZTp7aGFzVW5zYXZlZENoYW5nZXM6ITF9fSksVHIoVG4oaT9cImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiU2F2ZWRcIjpcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVNhdmVkXCIpLGUsVG4oaT9cImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlblNhdmVkXCI6XCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VIYXNCZWVuU2F2ZWRcIix7dGl0bGU6by50aXRsZX0pKX1jYXRjaHtsPVRuKFwiZXJyb3JJbmRpY2F0b3IucGFnZVNhdmVGYWlsZWRcIikscz1vLnBhcmVudElkZW50aXR5Lm5hbWUsQXIoRXIuRVJST1IsbCxzLGMpfWVsc2Ugbi5fb3BlblNhdmVNb2RhbCh7aWQ6by5wYWdlSWQsbWVudVR5cGU6Uy5TQVZFX1BBR0V9KTt2YXIgbCxzLGMsdX0sVG89YXN5bmMoZSx0KT0+e2NvbnN0IG49T3QoKS5Ccm93c2VyLndyYXBTeW5jKGUpLHI9KGF3YWl0IG4uZ2V0UGFnZXMoKSkuZmluZCgoZT0+dD9lLnBhZ2VJZD09PXQ6ZS5pc0FjdGl2ZSkpO24uX29wZW5TYXZlTW9kYWwoe2lkOnIucGFnZUlkLG1lbnVUeXBlOlMuU0FWRV9QQUdFX0FTfSksZ2Uoe3R5cGU6XCJQYWdlIE1vZGFsXCIsYWN0aW9uOlwiU2VsZWN0IFNhdmUgQXNcIix2YWx1ZTpyLnRpdGxlLHNraXBWYWx1ZUhhc2hpbmc6ITB9KX0sRG89e3RpdGxlOlwiRG93bmxvYWRzXCIscGFnZUlkOlwiZG93bmxvYWRzLXBhZ2UtaWRcIixsYXlvdXQ6e2NvbnRlbnQ6W3t0eXBlOlwic3RhY2tcIixjb250ZW50Olt7dHlwZTpcImNvbXBvbmVudFwiLGNvbXBvbmVudE5hbWU6XCJ2aWV3XCIsY29tcG9uZW50U3RhdGU6e25hbWU6XCJzaG93LWRvd25sb2FkLXZpZXdcIix1cmw6XCJjaHJvbWU6Ly9kb3dubG9hZHMvXCJ9fV19XX19LEJvPWFzeW5jIGU9Pntjb25zdCB0PXEoZSksbj1hd2FpdCB0LmdldEN1cnJlbnRWaWV3cygpLHI9KGF3YWl0IE90KCkuQnJvd3Nlci53cmFwU3luYyh0LmlkZW50aXR5KS5nZXRQYWdlcygpKS5maW5kKChlPT5lLmlzQWN0aXZlKSk7dHJ5e2NvbnN0IHQ9KGF3YWl0IFByb21pc2UuYWxsKG4ubWFwKChhc3luYyBlPT4oe2lkZW50aXR5OmUuaWRlbnRpdHksaW5mbzphd2FpdCBmaW4uVmlldy53cmFwU3luYyhlLmlkZW50aXR5KS5nZXRJbmZvKCl9KSkpKSkuZmluZCgoZT0+XCJjaHJvbWU6Ly9kb3dubG9hZHMvXCI9PT1lLmluZm8udXJsKSk7aWYodClhd2FpdCBmaW4uVmlldy53cmFwU3luYyh0LmlkZW50aXR5KS5mb2N1cygpO2Vsc2V7Y29uc3QgdD1PdCgpO2lmKHI/LmlzTG9ja2VkKXtjb25zdCBlPShhd2FpdCBmaW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudFN5bmMoKS5nZXRDaGlsZFdpbmRvd3MoKSkuZmluZCgoZT0+XCJzaG93LWRvd25sb2FkLXdpbmRvd1wiPT09ZS5pZGVudGl0eS5uYW1lKSk7cmV0dXJuIHZvaWQoZT9hd2FpdCBlLmZvY3VzKCk6dC5Ccm93c2VyLmNyZWF0ZVdpbmRvdyh7bmFtZTpcInNob3ctZG93bmxvYWQtd2luZG93XCIsd29ya3NwYWNlUGxhdGZvcm06e3BhZ2VzOltEb119fSkpfShhd2FpdCBPdCgpLmNyZWF0ZVZpZXcoe25hbWU6XCJzaG93LWRvd25sb2FkLXZpZXdcIix1cmw6XCJjaHJvbWU6Ly9kb3dubG9hZHMvXCIsdGFyZ2V0OmV9LGUpKS5mb2N1cygpfX1jYXRjaChlKXtjb25zb2xlLmVycm9yKFwiQ291bGRuJ3Qgb3BlbiBkb3dubG9hZHMgdmlld1wiLGUpfX0sWm89YXN5bmMgZT0+e2NvbnN0IHQ9ZS5tYXAoKGU9PmZpbi5WaWV3LndyYXBTeW5jKGUpLnByaW50KCkpKTthd2FpdCBQcm9taXNlLmFsbCh0KX0sJG89ZT0+e2NvbnN0W3QsbixyXT1lLnNwbGl0KFwiLlwiKS5tYXAoKGU9PlwieFwiPT09ZT8wOjEpKTtyZXR1cm4gMTAwKnQrMTAqbisxKnJ9O2NsYXNzIE5vIGV4dGVuZHMgRXJyb3J7fWNvbnN0IEZvPWFzeW5jIGU9Pnt0cnl7Y29uc3Qgbj1hd2FpdCBhc3luYyBmdW5jdGlvbigpe2NvbnN0IGU9YXdhaXQgd2UoKSx0PWU/LnRyYW5zbGF0aW9uT3ZlcnJpZGVzVXJsPz9cImh0dHBzOi8vd29ya3NwYWNlLm9wZW5maW4uY28vd29ya3NwYWNlL2Fzc2V0cy90cmFuc2xhdGlvbi1vdmVycmlkZS5qc29uXCI7aWYoXCJcIj09PXQpdGhyb3cgbmV3IE5vKFwiRW1wdHkgc3RyaW5nIHByb3ZpZGVkIGFzIHVybCB0byB0cmFuc2xhdGlvbk92ZXJyaWRlc1VybCwgb3ZlcnJpZGVzIHdpbGwgbm90IGJlIGZldGNoZWQuXCIpO3JldHVybiBhd2FpdCBmZXRjaCh0KS50aGVuKChlPT5lLmpzb24oKSkpfSgpLHI9KHQ9KGU9Pntjb25zdCB0PU4uc3BsaXQoXCIuXCIpO3JldHVybiBPYmplY3Qua2V5cyhlKS5maWx0ZXIoKGU9Pntjb25zdCBuPWUuc3BsaXQoXCIuXCIpO2lmKDMhPT1uLmxlbmd0aClyZXR1cm4gY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCBhIHRyYW5zbGF0aW9uIG92ZXJyaWRlIHZlcnNpb24gc3RyaW5nIGluIGFuIHVuc3VwcG9ydGVkIGZvcm1hdDogJHtlfS4gVmVyc2lvbnMgbXVzdCBiZSBpbiBBLkIuQyBmb3JtYXQgd2hlcmUgQSwgQiwgQyBhcmUgZWl0aGVyIGludGVnZXJzIG9yIHRoZSB3aWxkY2FyZCBzeW1ib2wgJ3gnLmApLCExO2NvbnN0W3IsbyxhXT1uO3JldHVybiEociE9PXRbMF0mJlwieFwiIT09cnx8byE9PXRbMV0mJlwieFwiIT09b3x8YSE9PXRbMl0mJlwieFwiIT09YSl9KSl9KShuKSxbLi4udF0uc29ydCgoKGUsdCk9PiRvKGUpLSRvKHQpKSkpO3IuZm9yRWFjaCgodD0+e2NvbnN0IHI9blt0XTtPYmplY3Qua2V5cyhyKS5mb3JFYWNoKCh0PT57ZS5hZGRSZXNvdXJjZUJ1bmRsZSh0LFwidHJhbnNsYXRpb25cIixyW3RdLCEwLCEwKX0pKX0pKX1jYXRjaChlKXtlIGluc3RhbmNlb2YgTm8/Y29uc29sZS53YXJuKGUubWVzc2FnZSk6Y29uc29sZS5lcnJvcihcIkVycm9yIGFwcGx5aW5nIGEgdHJhbnNsYXRpb24gb3ZlcnJpZGU6IFwiLGUpfXZhciB0fTtmdW5jdGlvbiBXbygpe3JldHVybiBQbi5sYW5ndWFnZX1jb25zdCBVbz1hc3luYyBlPT57S28oZSksKGU9PntQbi5jaGFuZ2VMYW5ndWFnZShlKX0pKGUpLGF3YWl0KGFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IGVlKCk7cmV0dXJuIFByb21pc2UuYWxsKHQubWFwKChhc3luYyB0PT57Y29uc3Qgbj1hd2FpdCBRZSh0LmlkZW50aXR5KTthd2FpdCBuLmRpc3BhdGNoKG90LlNldFNlbGVjdGVkTGFuZ3VhZ2UsZSl9KSkpfSkoZSl9O2Z1bmN0aW9uIHpvKCl7aWYoIVBuLm9wdGlvbnMucmVzb3VyY2VzKXRocm93IG5ldyBFcnJvcihcIk5vIGxhbmd1YWdlIHJlc291cmNlcyBmb3VuZFwiKTtyZXR1cm57Y3VycmVudExhbmd1YWdlOldvKCkscmVzb3VyY2VzOlBuLm9wdGlvbnMucmVzb3VyY2VzfX1hc3luYyBmdW5jdGlvbiBHbyhlPVwiZW4tVVNcIil7S28oZSksZnVuY3Rpb24oZT1cImVuLVVTXCIpe1BuLnVzZShOdCkuaW5pdCh7bG5nOmUsZmFsbGJhY2tMbmc6XCJlbi1VU1wiLHJlc291cmNlczp7XCJlbi1VU1wiOnt0cmFuc2xhdGlvbjpSbn0sXCJqYS1KUFwiOnt0cmFuc2xhdGlvbjpWbn0sXCJ6aC1DTlwiOnt0cmFuc2xhdGlvbjpFbn0sXCJrby1LUlwiOnt0cmFuc2xhdGlvbjpIbn0sXCJydS1SVVwiOnt0cmFuc2xhdGlvbjpBbn0sXCJkZS1ERVwiOnt0cmFuc2xhdGlvbjpJbn0sXCJ6aC1IYW50XCI6e3RyYW5zbGF0aW9uOmpufX19KX0oZSksYXdhaXQgRm8oUG4pfWZ1bmN0aW9uIEtvKGUpe2lmKCFNLlNVUFBPUlRFRF9MQU5HVUFHRVMuaW5jbHVkZXMoZSkpdGhyb3cgbmV3IEVycm9yKGBUaGUgSVNPIGxhbmd1YWdlIHByb3ZpZGVkICR7ZX0gaXMgbm90IHN1cHBvcnRlZGApfWNvbnN0IHFvPVtcImdyZWVuXCIsXCJwdXJwbGVcIixcIm9yYW5nZVwiLFwicmVkXCIsXCJwaW5rXCIsXCJ5ZWxsb3dcIl0sWW89XCJDT05URVhUX0dST1VQX1BBR0VcIixKbz0oKT0+ZT0+Y2xhc3MgZXh0ZW5kcyBle2dldENvbnRleHRHcm91cHMoKXtyZXR1cm4gc3VwZXIuZ2V0Q29udGV4dEdyb3VwcygpLm1hcCgoZT0+cW8uaW5jbHVkZXMoZS5kaXNwbGF5TWV0YWRhdGE/Lm5hbWUpP3suLi5lLGRpc3BsYXlNZXRhZGF0YTp7Li4uZS5kaXNwbGF5TWV0YWRhdGEsbmFtZTpUbihlLmRpc3BsYXlNZXRhZGF0YT8ubmFtZSl9fTplKSl9fSxYbz0oKT0+e2NvbnN0IGU9bmV3IFNldDtyZXR1cm4gdD0+Y2xhc3MgZXh0ZW5kcyB0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm9uQ2xpZW50Q29ubmVjdGVkPWU9PntlLm5hbWUuc3RhcnRzV2l0aChcImludGVybmFsLWdlbmVyYXRlZC12aWV3XCIpJiZ0aGlzLmpvaW5Db250ZXh0R3JvdXAoe2NvbnRleHRHcm91cElkOllvLHRhcmdldDplfSx7dXVpZDp0aGlzLmZpbi5tZS51dWlkLG5hbWU6dGhpcy5maW4ubWUubmFtZX0pfTtjb25zdCBlPXRoaXMuaW50ZXJvcENsaWVudHMuc2V0O3RoaXMuaW50ZXJvcENsaWVudHMuc2V0PSh0LG4pPT57ZS5jYWxsKHRoaXMuaW50ZXJvcENsaWVudHMsdCxuKSx0aGlzLm9uQ2xpZW50Q29ubmVjdGVkKG4uY2xpZW50SWRlbnRpdHkpfX1hc3luYyBqb2luQ29udGV4dEdyb3VwKHtjb250ZXh0R3JvdXBJZDp0LHRhcmdldDpufSxyKXtpZih0IT09WW8pcmV0dXJuIHN1cGVyLmpvaW5Db250ZXh0R3JvdXAoe2NvbnRleHRHcm91cElkOnQsdGFyZ2V0Om59LHIpO3RyeXtjb25zdCB0PWF3YWl0IHRoaXMuZmluLlZpZXcud3JhcFN5bmMobikuZ2V0UGFyZW50TGF5b3V0KCkse3NldHRpbmdzOntwYWdlSWQ6b319PWF3YWl0IHQuZ2V0Q29uZmlnKCk7aWYoIW8pdGhyb3cgbmV3IEVycm9yKFwiVmlldyBkb2VzIG5vdCBiZWxvbmcgdG8gYSBwYWdlXCIpO2lmKCFlLmhhcyhvKSYmKGUuYWRkKG8pLCF0aGlzLmNvbnRleHRHcm91cHNCeUlkLmhhcyhvKSkpe2NvbnN0IGU9bmV3IE1hcDt0aGlzLmNvbnRleHRHcm91cHNCeUlkLnNldChvLGUpfWF3YWl0IHN1cGVyLmpvaW5Db250ZXh0R3JvdXAoe2NvbnRleHRHcm91cElkOm8sdGFyZ2V0Om59LHIpLG4ubmFtZX1jYXRjaChlKXtKU09OLnN0cmluZ2lmeShuKSxlLnN0YWNrfX1nZXRDb250ZXh0R3JvdXBzKCl7cmV0dXJuWy4uLkFycmF5LmZyb20oZSkubWFwKChlPT4oe2lkOmUsZGlzcGxheU1ldGFkYXRhOnt9fSkpKV19c2V0Q29udGV4dEZvckdyb3VwKGUsdCl7aWYoIXRoaXMuY29udGV4dEdyb3Vwc0J5SWQuaGFzKHQpKXtjb25zdCBlPW5ldyBNYXA7dGhpcy5jb250ZXh0R3JvdXBzQnlJZC5zZXQodCxlKX1yZXR1cm4gc3VwZXIuc2V0Q29udGV4dEZvckdyb3VwKGUsdCl9fX0sUW89KGUsdCk9Pntjb25zdCBuPShlPT5zZShlKT9YbygpOkpvKCkpKHQpO3RyeXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP3Q9PmUobih0KSk6QXJyYXkuaXNBcnJheShlKT9bLi4uZSxuXTplPT5uZXcobihlKSl9Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKFwiV29ya3NwYWNlUGxhdGZvcm0uaW5pdCBFcnJvcjpcIixlKX19O2FzeW5jIGZ1bmN0aW9uIGVhKCl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGxvY2FsU3RvcmFnZSl0cnl7Y29uc3QgZT11dChMZS5MYXN0Rm9jdXNlZEJyb3dzZXJXaW5kb3cpO2lmKCFlKXJldHVybjtjb25zdCB0PUpTT04ucGFyc2UoZSk7aWYoYXdhaXQgbmUodCkpcmV0dXJuIHR9Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gZ2V0IGxhc3QgZm9jdXNlZCBicm93c2VyIHdpbmRvdzogJHtlfWApfX1hc3luYyBmdW5jdGlvbiB0YShlPWZpbi5tZS5pZGVudGl0eSl7YXdhaXQgUShlKSYmZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGxvY2FsU3RvcmFnZSl0cnl7Y29uc3QgdD1KU09OLnN0cmluZ2lmeShlKTtjdChMZS5MYXN0Rm9jdXNlZEJyb3dzZXJXaW5kb3csdCl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihcImZhaWxlZCB0byBzYXZlIGxhc3QgZm9jdXNlZCBicm93c2VyIHdpbmRvdzogXCIsZSl9fShlKX1jb25zdCBuYT1NZSgpKChhc3luYygpPT57Y29uc3QgZT1hd2FpdCBmaW4uUGxhdGZvcm0uZ2V0Q3VycmVudFN5bmMoKS5BcHBsaWNhdGlvbi5nZXRDaGlsZFdpbmRvd3MoKTtsZXQgdCxuPSExO2Zvcihjb25zdCByIG9mIGUpaWYoci5pZGVudGl0eS5uYW1lPT09Sy5Ccm93c2VyTWVudXx8ci5pZGVudGl0eS5uYW1lPT09Sy5Ccm93c2VyU2F2ZU1lbnU/dD1yOmF3YWl0IFEoci5pZGVudGl0eSkmJihuPSEwKSxuKWJyZWFrOyFuJiZ0JiZ0LmNsb3NlKCl9KSwxMDAse2xlYWRpbmc6ITEsdHJhaWxpbmc6ITB9KSxyYT1hc3luYygpPT57RygpLm9uKFwid2luZG93LWNsb3NlZFwiLG5hKX07bGV0IG9hPXt9O2NvbnN0IGFhPWFzeW5jKHthY3Rpb25JZDplLHBheWxvYWQ6dH0pPT57aWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygb2FbZV0pdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBhIGNvbmZpZ3VyZWQgZnVuY3Rpb24gZm9yIHRoZSBhY3Rpb24gJyR7ZX0nYCk7cmV0dXJuIG9hW2VdKHQpfSxpYT0oKT0+YGN1c3RvbS1jb250ZXh0LW1lbnUtJHtPdCgpLmlkZW50aXR5LnV1aWR9LSR7Tn1gLGxhPSgpPT5maW4uSW50ZXJBcHBsaWNhdGlvbkJ1cy5DaGFubmVsLmNvbm5lY3QoaWEoKSk7dmFyIHNhOyFmdW5jdGlvbihlKXtlLkxhYmVsPVwibm9ybWFsXCIsZS5TZXBhcmF0b3I9XCJzZXBhcmF0b3JcIixlLlN1Ym1lbnU9XCJzdWJtZW51XCIsZS5DaGVja2JveD1cImNoZWNrYm94XCJ9KHNhfHwoc2E9e30pKTtjb25zdCBjYT17dHlwZTpzYS5TZXBhcmF0b3IsZGF0YTp2b2lkIDB9O3ZhciB1YTshZnVuY3Rpb24oZSl7ZS5TYXZlPVwiU2F2ZVwiLGUuU2F2ZUFzPVwiU2F2ZUFzXCJ9KHVhfHwodWE9e30pKTt2YXIgZGE7IWZ1bmN0aW9uKGUpe2UuR2xvYmFsTWVudT1cImdsb2JhbC1tZW51XCIsZS5Db250ZXh0TWVudT1cImNvbnRleHQtbWVudVwiLGUuUmVuYW1lU3VwZXJ0YWI9XCJyZW5hbWUtc3VwZXJ0YWJcIixlLkFkZEVkaXRCb29rbWFyaz1cImFkZC1lZGl0LWJvb2ttYXJrXCIsZS5Ecm9wZG93bk1lbnU9XCJkcm9wZG93bi1tZW51XCJ9KGRhfHwoZGE9e30pKTtmdW5jdGlvbiBwYShlKXtyZXR1cm4gbmV3IFByb21pc2UoKCh0LG4pPT57ZS5vbmNvbXBsZXRlPWUub25zdWNjZXNzPSgpPT50KGUucmVzdWx0KSxlLm9uYWJvcnQ9ZS5vbmVycm9yPSgpPT5uKGUuZXJyb3IpfSkpfWZ1bmN0aW9uIGZhKGUsdCl7Y29uc3Qgbj1pbmRleGVkREIub3BlbihlKTtuLm9udXBncmFkZW5lZWRlZD0oKT0+bi5yZXN1bHQuY3JlYXRlT2JqZWN0U3RvcmUodCk7Y29uc3Qgcj1wYShuKTtyZXR1cm4oZSxuKT0+ci50aGVuKChyPT5uKHIudHJhbnNhY3Rpb24odCxlKS5vYmplY3RTdG9yZSh0KSkpKX1sZXQgaGE7ZnVuY3Rpb24gZ2EoKXtyZXR1cm4gaGF8fChoYT1mYShcImtleXZhbC1zdG9yZVwiLFwia2V5dmFsXCIpKSxoYX1mdW5jdGlvbiB2YShlLHQ9Z2EoKSl7cmV0dXJuIHQoXCJyZWFkb25seVwiLCh0PT5wYSh0LmdldChlKSkpKX1mdW5jdGlvbiBDYShlLHQsbj1nYSgpKXtyZXR1cm4gbihcInJlYWR3cml0ZVwiLChuPT4obi5wdXQodCxlKSxwYShuLnRyYW5zYWN0aW9uKSkpKX1mdW5jdGlvbiBtYShlLHQ9Z2EoKSl7cmV0dXJuIHQoXCJyZWFkd3JpdGVcIiwodD0+KHQuZGVsZXRlKGUpLHBhKHQudHJhbnNhY3Rpb24pKSkpfWZ1bmN0aW9uIHdhKGUsdCl7cmV0dXJuIGUub3BlbkN1cnNvcigpLm9uc3VjY2Vzcz1mdW5jdGlvbigpe3RoaXMucmVzdWx0JiYodCh0aGlzLnJlc3VsdCksdGhpcy5yZXN1bHQuY29udGludWUoKSl9LHBhKGUudHJhbnNhY3Rpb24pfWZ1bmN0aW9uIGJhKGU9Z2EoKSl7cmV0dXJuIGUoXCJyZWFkb25seVwiLChlPT57aWYoZS5nZXRBbGxLZXlzKXJldHVybiBwYShlLmdldEFsbEtleXMoKSk7Y29uc3QgdD1bXTtyZXR1cm4gd2EoZSwoZT0+dC5wdXNoKGUua2V5KSkpLnRoZW4oKCgpPT50KSl9KSl9ZnVuY3Rpb24geWEoZT1nYSgpKXtyZXR1cm4gZShcInJlYWRvbmx5XCIsKHQ9PntpZih0LmdldEFsbCYmdC5nZXRBbGxLZXlzKXJldHVybiBQcm9taXNlLmFsbChbcGEodC5nZXRBbGxLZXlzKCkpLHBhKHQuZ2V0QWxsKCkpXSkudGhlbigoKFtlLHRdKT0+ZS5tYXAoKChlLG4pPT5bZSx0W25dXSkpKSk7Y29uc3Qgbj1bXTtyZXR1cm4gZShcInJlYWRvbmx5XCIsKGU9PndhKGUsKGU9Pm4ucHVzaChbZS5rZXksZS52YWx1ZV0pKSkudGhlbigoKCk9Pm4pKSkpfSkpfWNvbnN0IHhhPWFzeW5jKGUsdCxuKT0+e2NvbnN0IHI9dXQoTGUuSGFzTW92ZWRTdG9yZSksbz1yP0pTT04ucGFyc2Uocik6e307aWYobyYmb1tuXSlyZXR1cm47b1tuXT0hMCxjdChMZS5IYXNNb3ZlZFN0b3JlLEpTT04uc3RyaW5naWZ5KG8pKTtjb25zdCBhPWF3YWl0IHlhKGUpO2F3YWl0IGZ1bmN0aW9uKGUsdD1nYSgpKXtyZXR1cm4gdChcInJlYWR3cml0ZVwiLCh0PT4oZS5mb3JFYWNoKChlPT50LnB1dChlWzFdLGVbMF0pKSkscGEodC50cmFuc2FjdGlvbikpKSl9KGEsdCl9LGthPShlLHQpPT5mYShlK1wiLVwiK2Zpbi5tZS51dWlkLHQpLFNhPShlLHQpPT57Y29uc3Qgbj1rYShlLHQpLHI9ZmEoZSx0KTtyZXR1cm4geGEocixuLGUpLG59LE9hPShlLHQ9XCJcIik9PmUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0LnRvTG93ZXJDYXNlKCkpLE1hPVImJkUmJlNhKFwib3BlbmZpbi1ob21lLXBhZ2VzXCIsXCJwYWdlc1wiKTthc3luYyBmdW5jdGlvbiBMYShlKXtpZighTWEpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGdldCBwYWdlIC0gSW5kZXhEQiBub3Qgc3VwcG9ydGVkXCIpO2NvbnN0IHQ9YXdhaXQgdmEoZSxNYSk7aWYodClyZXR1cm4gdC5wYWdlSWQ9ZS50b1N0cmluZygpLHQudGl0bGU9dC50aXRsZXx8dC5wYWdlSWQsdH1hc3luYyBmdW5jdGlvbiBfYShlKXtpZighTWEpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGdldCBwYWdlIGxpc3QgLSBJbmRleERCIG5vdCBzdXBwb3J0ZWRcIik7Y29uc3QgdD1hd2FpdCBiYShNYSksbj0oYXdhaXQgUHJvbWlzZS5hbGwodC5tYXAoKGU9PkxhKGUudG9TdHJpbmcoKSkpKSkpLmZpbHRlcigoZT0+ISFlKSk7cmV0dXJuIGU/bi5maWx0ZXIoKHQ9Pk9hKHQudGl0bGUsZSkpKTpufWFzeW5jIGZ1bmN0aW9uIFBhKHtwYWdlOmV9KXtpZighTWEpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGNyZWF0ZSBwYWdlIC0gSW5kZXhEQiBub3Qgc3VwcG9ydGVkXCIpO2F3YWl0IENhKGUucGFnZUlkLGUsTWEpfWFzeW5jIGZ1bmN0aW9uIEVhKGUpe2lmKCFNYSl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZGVsZXRlIHBhZ2UgLSBJbmRleERCIG5vdCBzdXBwb3J0ZWRcIik7YXdhaXQgbWEoZSxNYSl9YXN5bmMgZnVuY3Rpb24gamEoe3BhZ2VJZDplLHBhZ2U6dH0pe2lmKCFNYSl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gdXBkYXRlIHBhZ2UgLSBJbmRleERCIG5vdCBzdXBwb3J0ZWRcIik7aWYodm9pZCAwPT09YXdhaXQgTGEoZSkpdGhyb3cgbmV3IEVycm9yKFwicGFnZSBub3QgZm91bmRcIik7YXdhaXQgUGEoe3BhZ2U6dH0pLGUhPT10LnBhZ2VJZCYmYXdhaXQgRWEoZSl9Y29uc3QgUmE9UiYmRSYma2EoXCJvcGVuZmluLWVudGVycHJpc2UtdGFiLWhpc3RvcnlcIixcInJlbW92ZWQtdGFiLXN0YWNrXCIpLElhPWFzeW5jIGU9PntDYShEYXRlLm5vdygpLGUsUmEpfSxWYT1SJiZFJiZrYShcIm9wZW5maW4tZW50ZXJwcmlzZS1zaXRlLWhpc3RvcnlcIixcInZpc2l0ZWQtc2l0ZXNcIiksSGE9YXN5bmMgZT0+e2lmKFwid2Vic2l0ZVwiPT09ZS50eXBlKXtsZXQgdD1hd2FpdCB2YShlLnVybCxWYSk7dD8odC5pY29uPWUuaWNvbix0LnRpdGxlPWUudGl0bGUsdC50eXBlPWUudHlwZSx0LnZpc2l0Q291bnQ9KHQudmlzaXRDb3VudHx8MCkrMSk6dD17dXJsOmUudXJsLGljb246ZS5pY29uLHRpdGxlOmUudGl0bGUsdHlwZTplLnR5cGUsdmlzaXRDb3VudDoxfSx0LmFjY2Vzc1RpbWU9RGF0ZS5ub3coKSxDYSh0LnVybCx0LFZhKX19LEFhPWFzeW5jKCk9Pntjb25zdCBlPWF3YWl0IHlhKFZhKTtpZihlLmxlbmd0aD4wKXtlLnNvcnQoKChlLHQpPT50WzFdLnZpc2l0Q291bnQtZVsxXS52aXNpdENvdW50KSk7cmV0dXJuKGUubGVuZ3RoPjU/ZS5zbGljZSgwLDUpOmUpLm1hcCgoZT0+ZVsxXSkpfXJldHVybltdfSxUYT1hc3luYygpPT4oYXdhaXQgZmluLlN5c3RlbS5nZXRIb3N0U3BlY3MoKSkubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwid2luZG93c1wiKSxEYT0oKT0+KHt0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwiY29udGV4dE1lbnUuY2xvc2VXaW5kb3dcIiksZGF0YTp7dHlwZTpoLkNsb3NlV2luZG93fX0pLEJhPWU9Pih7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihlP1wiY29udGV4dE1lbnUucXVpdEVudGVycHJpc2VCcm93c2VyXCI6XCJjb250ZXh0TWVudS5xdWl0UGxhdGZvcm1cIiksZGF0YTp7dHlwZTpoLlF1aXR9fSksWmE9KCk9Pih7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihcImNvbnRleHRNZW51Lm5ld1dpbmRvd1wiKSxkYXRhOnt0eXBlOmguTmV3V2luZG93fX0pLCRhPWU9Pih7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihlP1wiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYlwiOlwiY29udGV4dE1lbnUuc2F2ZVBhZ2VcIiksZGF0YTp7dHlwZTpoLlNhdmVQYWdlfX0pLE5hPWU9Pih7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihlP1wiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYkFzXCI6XCJjb250ZXh0TWVudS5zYXZlUGFnZUFzXCIpLGRhdGE6e3R5cGU6aC5TYXZlUGFnZUFzfX0pLEZhPShlLHQpPT4oe3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4odD9cImVudGVycHJpc2VDb250ZXh0TWVudS5uZXdUYWJcIjpcImNvbnRleHRNZW51Lm5ld1BhZ2VcIiksZGF0YTp7dHlwZTpoLk5ld1BhZ2V9LGVuYWJsZWQ6ZX0pLFdhPSgpPT4oe2xhYmVsOlRuKFwiY29udGV4dE1lbnUuc3dpdGNoV29ya3NwYWNlXCIpfSksVWE9KCk9Pih7bGFiZWw6VG4oXCJjb250ZXh0TWVudS5kZWxldGVXb3Jrc3BhY2VcIil9KSx6YT0oKT0+KHtsYWJlbDpUbihcImNvbnRleHRNZW51LmFwcGVhcmFuY2VcIil9KSxHYT0oZSx0LG4pPT50Lm1hcCgodD0+e2NvbnN0IHI9dC53b3Jrc3BhY2VJZD09PWUud29ya3NwYWNlSWQ7cmV0dXJue2xhYmVsOnQudGl0bGUsdHlwZTpzYS5DaGVja2JveCxlbmFibGVkOiFyLGNoZWNrZWQ6cixkYXRhOnt0eXBlOm4sd29ya3NwYWNlSWQ6dC53b3Jrc3BhY2VJZH19fSkpLEthPWFzeW5jKCk9Pntjb25zdCBlPWF3YWl0IE90KCkuVGhlbWUuZ2V0U2VsZWN0ZWRTY2hlbWUoKTtyZXR1cm5be2xhYmVsOlRuKFwidGhlbWUubGlnaHRcIiksdHlwZTpzYS5DaGVja2JveCxjaGVja2VkOmU9PT1nLkxpZ2h0LGRhdGE6e3R5cGU6aC5BcHBlYXJhbmNlLHNjaGVtZTpnLkxpZ2h0fX0se2xhYmVsOlRuKFwidGhlbWUuZGFya1wiKSx0eXBlOnNhLkNoZWNrYm94LGNoZWNrZWQ6ZT09PWcuRGFyayxkYXRhOnt0eXBlOmguQXBwZWFyYW5jZSxzY2hlbWU6Zy5EYXJrfX0se2xhYmVsOlRuKFwidGhlbWUuc3lzdGVtXCIpLHR5cGU6c2EuQ2hlY2tib3gsY2hlY2tlZDplPT09Zy5TeXN0ZW0sZGF0YTp7dHlwZTpoLkFwcGVhcmFuY2Usc2NoZW1lOmcuU3lzdGVtfX1dfSxxYT1hc3luYyhlLHQ9W10pPT57Y29uc3Qgbj1hd2FpdCByZSgpLHtuZXdQYWdlVXJsOnJ9PWF3YWl0IERyKGUpLG89YXdhaXQoYXN5bmMgZT0+e2NvbnN0IHQ9cShlKSx7d29ya3NwYWNlUGxhdGZvcm06bn09YXdhaXQgdC5nZXRPcHRpb25zKCk7cmV0dXJuIG4/LmRpc2FibGVNdWx0aXBsZVBhZ2VzfSkoZSksYT1hd2FpdChhc3luYyBlPT57Y29uc3QgdD1xKGUpLHt3b3Jrc3BhY2VQbGF0Zm9ybTpufT1hd2FpdCB0LmdldE9wdGlvbnMoKTtyZXR1cm4gbj8uaXNMb2NrZWR9KShlKSxpPWF3YWl0IGxlKGUpLGw9W10scz10Lmxlbmd0aD4wO3ImJihsLnB1c2goWmEoKSksb3x8bC5wdXNoKEZhKCFhLGkpKSksbC5wdXNoKGNhKTtjb25zdCBjPU90KCksdT1hd2FpdCBjLmdldEN1cnJlbnRXb3Jrc3BhY2UoKSxkPWF3YWl0IGMuU3RvcmFnZS5nZXRXb3Jrc3BhY2VzKCkscD1kLmZpbmQoKGU9PmUud29ya3NwYWNlSWQ9PT11LndvcmtzcGFjZUlkKSk7bC5wdXNoKHt0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwiY29udGV4dE1lbnUucmVzdG9yZVwiKSxkYXRhOnt0eXBlOmguUmVzdG9yZUNoYW5nZXN9LGVuYWJsZWQ6ISFwfSksbC5wdXNoKHt0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwiY29udGV4dE1lbnUuc2F2ZVdvcmtzcGFjZVwiKSxkYXRhOnt0eXBlOmguU2F2ZVdvcmtzcGFjZX0sZW5hYmxlZDohIXB9KSxsLnB1c2goe3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4oXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlQXNcIiksZGF0YTp7dHlwZTpoLlNhdmVXb3Jrc3BhY2VBc319KSxsLnB1c2goe3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4oXCJjb250ZXh0TWVudS5yZW5hbWVXb3Jrc3BhY2VcIiksZGF0YTp7dHlwZTpoLlJlbmFtZVdvcmtzcGFjZX0sZW5hYmxlZDohIXB9KSxkLnNvbWUoKGU9PmUud29ya3NwYWNlSWQhPT11LndvcmtzcGFjZUlkKSk/bC5wdXNoKHtsYWJlbDpXYSgpLmxhYmVsLHN1Ym1lbnU6R2EodSxkLGguU3dpdGNoV29ya3NwYWNlKSxkYXRhOnZvaWQgMH0se2xhYmVsOlVhKCkubGFiZWwsc3VibWVudTpHYSh1LGQsaC5EZWxldGVXb3Jrc3BhY2UpLGRhdGE6dm9pZCAwfSk6bC5wdXNoKHtsYWJlbDpXYSgpLmxhYmVsLGVuYWJsZWQ6ITEsZGF0YTp2b2lkIDB9LHtsYWJlbDpVYSgpLmxhYmVsLGVuYWJsZWQ6ITEsZGF0YTp2b2lkIDB9KSxsLnB1c2goe2xhYmVsOlRuKFwiY29udGV4dE1lbnUuZG93bmxvYWRzXCIpLGRhdGE6e3R5cGU6aC5Eb3dubG9hZHN9fSk7Y29uc3QgZj1hd2FpdCBjLlRoZW1lLmdldFRoZW1lcygpO3JldHVybihmWzBdJiZcInBhbGV0dGVzXCJpbiBmWzBdfHwhZlswXXx8MD09PWYubGVuZ3RoKSYmbC5wdXNoKHtsYWJlbDp6YSgpLmxhYmVsLHN1Ym1lbnU6YXdhaXQgS2EoKSxkYXRhOnZvaWQgMH0pLGwucHVzaChjYSwkYShpKSxOYShpKSxhd2FpdChhc3luYyBlPT57Y29uc3QgdD1hd2FpdCBUYSgpO3JldHVybntsYWJlbDpUbihcImNvbnRleHRNZW51LnByaW50XCIpLHN1Ym1lbnU6W3t0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwiY29udGV4dE1lbnUuc3VibWVudS5wcmludFwiKSxkYXRhOnt0eXBlOmguUHJpbnR9LGVuYWJsZWQ6ZX0se3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4oXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50QWxsXCIpLGRhdGE6e3R5cGU6aC5QcmludEFsbH19LC4uLnQ/W2NhLHt0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwiY29udGV4dE1lbnUucHJpbnRTY3JlZW5cIiksZGF0YTp7dHlwZTpoLlByaW50U2NyZWVufX1dOltdXSxkYXRhOnZvaWQgMH19KShzKSksbj9bLi4ubCxEYSgpLGNhLHt0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwiY29udGV4dE1lbnUub3BlblN0b3JlZnJvbnRcIiksZGF0YTp7dHlwZTpoLk9wZW5TdG9yZWZyb250fX0sY2EsQmEoKV06Wy4uLmwsY2EsRGEoKSxjYSxCYSgpXX0sWWE9YXN5bmMoZSx0KT0+e2NvbnN0IG49dC5zZWxlY3RlZFZpZXdzWzBdLHI9ZmluLlZpZXcud3JhcFN5bmMobiksbz1hd2FpdChhc3luYyBlPT57Y29uc3R7bmV3VGFiVXJsOnR9PWF3YWl0IERyKGUpO2lmKCF0KXRocm93IG5ldyBFcnJvcihcIlRyeWluZyB0byBjcmVhdGUgYSBuZXcgcGFnZSB3aXRob3V0IGEgbmV3VGFiVXJsIHNldFwiKTtyZXR1cm57dXJsOnQsdGFyZ2V0OmUsdGl0bGU6XCJOZXcgVGFiXCJ9fSkoZSk7YXdhaXQgT3QoKS5jcmVhdGVWaWV3KG8sZSxyLmlkZW50aXR5KX0sSmE9YXN5bmMoZSx0KT0+e2NvbnN0IG49YXdhaXQoZT0+UHJvbWlzZS5hbGwoZS5tYXAoKGFzeW5jIGU9PmZpbi5WaWV3LndyYXBTeW5jKGUpLmdldEluZm8oKSkpKSkodCkse25ld1BhZ2VVcmw6cixuZXdUYWJVcmw6b309YXdhaXQgRHIoZSk7bi5mb3JFYWNoKChhc3luYyBlPT57ZS51cmwhPT1yJiZlLnVybCE9PW8mJmF3YWl0IGZpbi5TeXN0ZW0ub3BlblVybFdpdGhCcm93c2VyKGUudXJsKX0pKX0sWGE9KGUsdCk9Pnt0LmZvckVhY2goKGFzeW5jIHQ9Pntjb25zdCBuPWZpbi5WaWV3LndyYXBTeW5jKHQpO2F3YWl0KGFzeW5jKGUsdCk9Pntjb25zdHt1cmw6bn09YXdhaXQgdC5nZXRJbmZvKCkscj17Li4uYXdhaXQgdC5nZXRPcHRpb25zKCksdXJsOm4sdGFyZ2V0OmUsbmFtZTp2b2lkIDB9O2F3YWl0IE90KCkuY3JlYXRlVmlldyhyLGUsdC5pZGVudGl0eSl9KShlLG4pfSkpfSxRYT1hc3luYyhlLHQsbik9Pntjb25zdCByPXtuZXdDaGFubmVsSWQ6dCxzZWxlY3RlZFZpZXdzOm59Oyhhd2FpdCBRZShlKSkuZGlzcGF0Y2gob3QuQWRkVG9DaGFubmVsLHIpfSxlaT1hc3luYyhlLHQpPT57KGF3YWl0IFFlKGUpKS5kaXNwYXRjaChvdC5SZW1vdmVGcm9tQ2hhbm5lbCx0KX0sdGk9YXN5bmMoZSx0KT0+e2lmKCFlKXJldHVybjtjb25zdCBuPXQuaWRlbnRpdHkscj1maW4uV2luZG93LndyYXBTeW5jKG4pO3N3aXRjaChnZSh7dHlwZTpcIlZpZXcgVGFiIE1lbnVcIixhY3Rpb246XCJTZWxlY3QgTWVudSBJdGVtXCIsdmFsdWU6ZS50eXBlLHNraXBWYWx1ZUhhc2hpbmc6ITB9KSxlLnR5cGUpe2Nhc2Ugdy5CYWNrOmF3YWl0KGFzeW5jIGU9Pntjb25zdCB0PWUubWFwKChlPT5maW4uVmlldy53cmFwU3luYyhlKS5uYXZpZ2F0ZUJhY2soKSkpO2F3YWl0IFByb21pc2UuYWxsKHQpfSkodC5zZWxlY3RlZFZpZXdzKTticmVhaztjYXNlIHcuRm9yd2FyZDphd2FpdChhc3luYyBlPT57Y29uc3QgdD1lLm1hcCgoZT0+ZmluLlZpZXcud3JhcFN5bmMoZSkubmF2aWdhdGVGb3J3YXJkKCkpKTthd2FpdCBQcm9taXNlLmFsbCh0KX0pKHQuc2VsZWN0ZWRWaWV3cyk7YnJlYWs7Y2FzZSB3LlByaW50OmF3YWl0IFpvKHQuc2VsZWN0ZWRWaWV3cyk7YnJlYWs7Y2FzZSB3LlByaW50QWxsOmF3YWl0IHIucHJpbnQoe2NvbnRlbnQ6XCJ2aWV3c1wiLGluY2x1ZGVTZWxmOiExfSk7YnJlYWs7Y2FzZSB3LlByaW50U2NyZWVuOmF3YWl0IHIucHJpbnQoe2NvbnRlbnQ6XCJzY3JlZW5zaG90XCJ9KTticmVhaztjYXNlIHcuQ2xvc2VWaWV3czphd2FpdChhc3luYyhlLHQpPT57Y29uc3Qgbj0oYXdhaXQgT3QoKS5Ccm93c2VyLndyYXBTeW5jKGUpLmdldFBhZ2VzKCkpLmZpbmQoKGU9PmUuaXNBY3RpdmUpKSxyPWF3YWl0IGZpbi5XaW5kb3cud3JhcFN5bmMoZSkuZ2V0Q3VycmVudFZpZXdzKCk7aWYodC5sZW5ndGg9PT1yLmxlbmd0aC0obi5wYW5lbHM/P1tdKS5sZW5ndGgpcmV0dXJuIHZvaWQoYXdhaXQgUWUoZSkpLmRpc3BhdGNoKG90LkNsb3NlUGFnZSx7cGFnZUlkOm4/LnBhZ2VJZH0pO2NvbnN0IG89ZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCk7dC5mb3JFYWNoKChhc3luYyBlPT57YXdhaXQgby5jbG9zZVZpZXcoZSl9KSl9KShuLHQuc2VsZWN0ZWRWaWV3cyk7YnJlYWs7Y2FzZSB3Lk9wZW5XaXRoRGVmYXVsdEJyb3dzZXI6YXdhaXQgSmEobix0LnNlbGVjdGVkVmlld3MpO2JyZWFrO2Nhc2Ugdy5SZWxvYWRWaWV3czp0LnNlbGVjdGVkVmlld3MuZm9yRWFjaCgoYXN5bmMgZT0+e2NvbnN0IHQ9ZmluLlZpZXcud3JhcFN5bmMoZSk7YXdhaXQgdC5yZWxvYWQoKX0pKTticmVhaztjYXNlIHcuTmV3Vmlldzphd2FpdCBZYShuLHQpO2JyZWFrO2Nhc2Ugdy5EdXBsaWNhdGVWaWV3czpYYShuLHQuc2VsZWN0ZWRWaWV3cyk7YnJlYWs7Y2FzZSB3LkFkZFRvQ2hhbm5lbDpRYShuLGUub3B0aW9uLHQuc2VsZWN0ZWRWaWV3cyk7YnJlYWs7Y2FzZSB3LlJlbW92ZUZyb21DaGFubmVsOmVpKG4sdC5zZWxlY3RlZFZpZXdzKTticmVhaztjYXNlIHcuQ3VzdG9tOmlmKGUuYWN0aW9uKXtjb25zdCByPXtjYWxsZXJUeXBlOmsuVmlld1RhYkNvbnRleHRNZW51LHdpbmRvd0lkZW50aXR5Om4sc2VsZWN0ZWRWaWV3czp0LnNlbGVjdGVkVmlld3MsY3VzdG9tRGF0YTplLmFjdGlvbi5jdXN0b21EYXRhfTtPdCgpLl9pbnZva2VDdXN0b21BY3Rpb24oZS5hY3Rpb24uaWQscil9fX07bGV0IG5pPVwiUGxhdGZvcm1cIjtjb25zdCByaT1hc3luYygpPT5uaTtjb25zdCBvaT1hc3luYyhlLHQpPT57aWYoIWUpcmV0dXJuO2NvbnN0IG49dC5pZGVudGl0eSxyPWF3YWl0IFFlKG4pLG89T3QoKS5Ccm93c2VyLndyYXBTeW5jKG4pLGE9ZmluLldpbmRvdy53cmFwU3luYyhuKTtpZihnZSh7dHlwZTpcIkdsb2JhbCBNZW51XCIsYWN0aW9uOlwiU2VsZWN0IE1lbnUgSXRlbVwiLHZhbHVlOmUudHlwZSxza2lwVmFsdWVIYXNoaW5nOiEwLGRhdGE6e2FjdGlvbjplLmFjdGlvbj8uaWR9fSksYXdhaXQgbGUobikpe2NvbnN0IG49YXdhaXQoYXN5bmMoZSx0KT0+e2NvbnN0IG49dC5pZGVudGl0eSxyPU90KCkuQnJvd3Nlci53cmFwU3luYyhuKSxvPShhd2FpdCByLmdldFBhZ2VzKCkpLmZpbmQoKGU9PmUuaXNBY3RpdmUpKSxhPUZlKHsuLi5uLGxheW91dE5hbWU6by5sYXlvdXRDb250YWluZXJLZXl9KSxpPXQuc2VsZWN0ZWRWaWV3cztzd2l0Y2goZT8udHlwZSl7Y2FzZSBDLkxvY2s6YXdhaXQgci51cGRhdGVQYWdlKHtwYWdlSWQ6by5wYWdlSWQscGFnZTp7aXNMb2NrZWQ6IW8uaXNMb2NrZWR9fSk7YnJlYWs7Y2FzZSBDLkFkZFRvQ2hhbmVsOmUub3B0aW9uP2F3YWl0IFFhKG4sZS5vcHRpb24saSk6bnVsbD09PWUub3B0aW9uJiZhd2FpdCBlaShuLGkpO2JyZWFrO2Nhc2UgaC5OZXdXaW5kb3c6e2NvbnN0IGU9YXdhaXQgWnIobik7YXdhaXQgT3QoKS5Ccm93c2VyLmNyZWF0ZVdpbmRvdyh7d29ya3NwYWNlUGxhdGZvcm06e3BhZ2VzOltlXSx3aW5kb3dUeXBlOlwiZW50ZXJwcmlzZVwifX0pO2JyZWFrfWNhc2UgQy5QaW46e2NvbnN0e2Fsd2F5c09uVG9wOmV9PWF3YWl0IHIub3BlbmZpbldpbmRvdy5nZXRPcHRpb25zKCk7YXdhaXQgci5vcGVuZmluV2luZG93LnVwZGF0ZU9wdGlvbnMoe2Fsd2F5c09uVG9wOiFlfSk7YnJlYWt9Y2FzZSBDLlNob3dIaWRlVGFiczphd2FpdCBhLmlzU2hvd2luZ1RhYnMoKT9hd2FpdCBhLmhpZGUoKTphd2FpdCBhLnNob3coKTticmVhaztkZWZhdWx0OnJldHVybiExfXJldHVybiEwfSkoZSx0KTtpZihuKXJldHVybn1zd2l0Y2goZS50eXBlKXtjYXNlIGguTmV3V2luZG93Ontjb25zdHtuZXdQYWdlVXJsOmV9PWF3YWl0IERyKG4pO2lmKCFlKXRocm93IG5ldyBFcnJvcihcIlRyeWluZyB0byBjcmVhdGUgYSBuZXcgZW1wdHkgd2luZG93IHdpdGhvdXQgYSBuZXdQYWdlVXJsIHNldFwiKTtPdCgpLmNyZWF0ZVZpZXcoe3RhcmdldDp2b2lkIDAsdXJsOmV9KTticmVha31jYXNlIGguTmV3UGFnZTphd2FpdCBIbyhuKTticmVhaztjYXNlIGguQ2xvc2VXaW5kb3c6ci5kaXNwYXRjaChvdC5DbG9zZUJyb3dzZXJXaW5kb3cpO2JyZWFrO2Nhc2UgaC5TYXZlV29ya3NwYWNlOmF3YWl0IElvKG4pO2JyZWFrO2Nhc2UgaC5TYXZlUGFnZTphd2FpdCBBbyhuKTticmVhaztjYXNlIGguU2F2ZVBhZ2VBczphd2FpdCBUbyhuKTticmVhaztjYXNlIGguU2F2ZVdvcmtzcGFjZUFzOmF3YWl0IFZvKG4pO2JyZWFrO2Nhc2UgaC5SZW5hbWVXb3Jrc3BhY2U6by5fb3BlblNhdmVNb2RhbCh7bWVudVR5cGU6Uy5SRU5BTUVfV09SS1NQQUNFfSk7YnJlYWs7Y2FzZSBoLlN3aXRjaFdvcmtzcGFjZTphd2FpdChhc3luYyhlLHQpPT57Y29uc3Qgbj1PdCgpLHI9KGF3YWl0IG4uU3RvcmFnZS5nZXRXb3Jrc3BhY2VzKCkpLmZpbmQoKGU9PmUud29ya3NwYWNlSWQ9PT10LndvcmtzcGFjZUlkKSk7bi5hcHBseVdvcmtzcGFjZShyLHtza2lwUHJvbXB0OiExLHByb21wdENvbnRhaW5lcldpbmRvd0lkZW50aXR5OmV9KX0pKG4sZSk7YnJlYWs7Y2FzZSBoLkRlbGV0ZVdvcmtzcGFjZTphd2FpdChhc3luYyhlLHQpPT57Y29uc3Qgbj1PdCgpLHI9KGF3YWl0IG4uU3RvcmFnZS5nZXRXb3Jrc3BhY2VzKCkpLmZpbmQoKGU9PmUud29ya3NwYWNlSWQ9PT10LndvcmtzcGFjZUlkKSk7ciYmYXdhaXQgYm8oZSxyLnRpdGxlKSYmKGF3YWl0IG4uU3RvcmFnZS5kZWxldGVXb3Jrc3BhY2UodC53b3Jrc3BhY2VJZCksVHIoVG4oXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZURlbGV0ZWRcIiksZSkpfSkobixlKTticmVhaztjYXNlIGguRG93bmxvYWRzOmF3YWl0IEJvKG4pO2JyZWFrO2Nhc2UgaC5BcHBlYXJhbmNlOmF3YWl0IE90KCkuVGhlbWUuc2V0U2VsZWN0ZWRTY2hlbWUoZS5zY2hlbWUpO2JyZWFrO2Nhc2UgaC5RdWl0Ontjb25zdCBlPXJpKCk7YXdhaXQgeW8obixhd2FpdCBlKSYmZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkucXVpdCgpfWJyZWFrO2Nhc2UgaC5PcGVuU3RvcmVmcm9udDooYXN5bmMoKT0+e2F3YWl0IHJlKCkmJlgoSil9KSgpO2JyZWFrO2Nhc2UgaC5SZXN0b3JlQ2hhbmdlczp7Y29uc3QgZT1hd2FpdCBhc3luYyBmdW5jdGlvbigpe2NvbnN0IGU9T3QoKSx0PWF3YWl0IGUuZ2V0Q3VycmVudFdvcmtzcGFjZSgpO3JldHVybihhd2FpdCBlLlN0b3JhZ2UuZ2V0V29ya3NwYWNlcygpKS5maW5kKChlPT5lLndvcmtzcGFjZUlkPT09dC53b3Jrc3BhY2VJZCkpfSgpO2F3YWl0IHhvKG4pJiZhd2FpdCBTbyh7b3B0aW9uczp7c2tpcFByb21wdDohMH0sLi4uZX0pfWJyZWFrO2Nhc2UgaC5QcmludDphd2FpdCBabyh0LnNlbGVjdGVkVmlld3MpO2JyZWFrO2Nhc2UgaC5QcmludEFsbDphd2FpdCBhLnByaW50KHtjb250ZW50Olwidmlld3NcIixpbmNsdWRlU2VsZjohMX0pO2JyZWFrO2Nhc2UgaC5QcmludFNjcmVlbjphd2FpdCBhLnByaW50KHtjb250ZW50Olwic2NyZWVuc2hvdFwifSk7YnJlYWs7Y2FzZSBoLkN1c3RvbTppZihlLmFjdGlvbil7Y29uc3QgdD17Y2FsbGVyVHlwZTprLkdsb2JhbENvbnRleHRNZW51LHdpbmRvd0lkZW50aXR5Om4sY3VzdG9tRGF0YTplLmFjdGlvbi5jdXN0b21EYXRhfTtPdCgpLl9pbnZva2VDdXN0b21BY3Rpb24oZS5hY3Rpb24uaWQsdCl9ZWxzZSBjb25zb2xlLndhcm4oYEVuY291bnRlcmVkIGEgQ3VzdG9tIGNvbnRleHQgbWVudSBvcHRpb24gd2l0aCBhbiBcImFjdGlvblwiIHByb3BlcnR5IHdpdGggdmFsdWUgXCIke2UuYWN0aW9ufVwiYCl9fSxhaT1hc3luYyhlLHQsbik9Pntjb25zdCByPWF3YWl0IFFlKHQuaWRlbnRpdHkpLG89T3QoKSxhPWF3YWl0IGxlKCk7c3dpdGNoKGUmJmdlKHt0eXBlOlwiUGFnZSBUYWIgTWVudVwiLGFjdGlvbjpcIlNlbGVjdCBNZW51IEl0ZW1cIix2YWx1ZTplLnR5cGUsc2tpcFZhbHVlSGFzaGluZzohMH0pLGU/LnR5cGUpe2Nhc2Ugdi5TYXZlOmF3YWl0IEFvKHQuaWRlbnRpdHksdC5wYWdlSWQpO2JyZWFrO2Nhc2Ugdi5TYXZlQXM6YXdhaXQgVG8odC5pZGVudGl0eSx0LnBhZ2VJZCk7YnJlYWs7Y2FzZSB2Lk5ld1BhZ2U6YXdhaXQgSG8odC5pZGVudGl0eSk7YnJlYWs7Y2FzZSB2LkRlbGV0ZVBhZ2U6YXdhaXQoYXN5bmMoZSx0KT0+e2NvbnN0IG49T3QoKSxyPW4uQnJvd3Nlci53cmFwU3luYyhlKSxvPShhd2FpdCBuLlN0b3JhZ2UuZ2V0UGFnZXMoKSkuZmluZCgoZT0+ZS5wYWdlSWQ9PT10KSk7byYmYXdhaXQga28oZSxvLnRpdGxlKSYmKGF3YWl0IG4uU3RvcmFnZS5kZWxldGVQYWdlKG8ucGFnZUlkKSxhd2FpdCByLnJlbW92ZVBhZ2UodCksVHIoVG4oXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkRlbGV0ZWRcIiksZSxUbihcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlbkRlbGV0ZWRcIix7dGl0bGU6by50aXRsZX0pKSl9KSh0LmlkZW50aXR5LHQucGFnZUlkKTticmVhaztjYXNlIHYuUmVuYW1lOmlmKGF3YWl0IGxlKHQuaWRlbnRpdHkpKXtjb25zdCBlPU90KCkuQnJvd3Nlci53cmFwU3luYyh0LmlkZW50aXR5KTthd2FpdCBlLnNldEFjdGl2ZVBhZ2UodC5wYWdlSWQpO2NvbnN0IHI9YXdhaXQgbGEoKTthd2FpdCByLmRpc3BhdGNoKFwib3BlblwiLHtwYXJlbnRJZGVudGl0eTp0LmlkZW50aXR5LHR5cGU6ZGEuUmVuYW1lU3VwZXJ0YWIsYW5jaG9yQmVoYXZpb3I6bGkuQ2VudGVyLHg6bi5sZWZ0K24ud2lkdGgvMi0xNjQseTpuLmJvdHRvbS04LHBheWxvYWQ6e3BhZ2VJZDp0LnBhZ2VJZH19KX1lbHNlIGF3YWl0IG8uQnJvd3Nlci53cmFwU3luYyh0LmlkZW50aXR5KS5fb3BlblNhdmVNb2RhbCh7bWVudVR5cGU6Uy5SRU5BTUVfUEFHRSxpZDp0LnBhZ2VJZH0pO2JyZWFrO2Nhc2Ugdi5EdXBsaWNhdGU6ci5kaXNwYXRjaChvdC5EdXBsaWNhdGVQYWdlLHQucGFnZUlkKTticmVhaztjYXNlIHYuQ2xvc2U6YT9hd2FpdChhc3luYyhlLHQpPT57Y29uc3Qgbj1PdCgpLkJyb3dzZXIud3JhcFN5bmMoZSkscj1hd2FpdCBuLmdldFBhZ2VzKCk7Zm9yKGNvbnN0IG8gb2YgcilpZihvLnBhZ2VJZD09PXQpe2F3YWl0IG4ucmVtb3ZlUGFnZShvLnBhZ2VJZCksYXdhaXQgbi5fdHJhY2tSZW1vdmVkVGFiKHtpZGVudGl0eTplLHBhZ2U6b30pO2JyZWFrfX0pKHQuaWRlbnRpdHksdC5wYWdlSWQpOnIuZGlzcGF0Y2gob3QuQ2xvc2VQYWdlLHtwYWdlSWQ6dC5wYWdlSWR9KTticmVhaztjYXNlIHYuQ3VzdG9tOmlmKGUuYWN0aW9uKXtjb25zdCBuPXtjYWxsZXJUeXBlOmsuUGFnZVRhYkNvbnRleHRNZW51LHdpbmRvd0lkZW50aXR5OnQuaWRlbnRpdHkscGFnZUlkOnQucGFnZUlkLGN1c3RvbURhdGE6ZS5hY3Rpb24uY3VzdG9tRGF0YX07T3QoKS5faW52b2tlQ3VzdG9tQWN0aW9uKGUuYWN0aW9uLmlkLG4pfWVsc2UgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCBhIEN1c3RvbSBjb250ZXh0IG1lbnUgb3B0aW9uIHdpdGggYW4gXCJhY3Rpb25cIiBwcm9wZXJ0eSB3aXRoIHZhbHVlIFwiJHtlLmFjdGlvbn1cImApO2JyZWFrO2Nhc2Ugdi5SZWZyZXNoOmF3YWl0KGFzeW5jKGUsdCk9Pntjb25zdCBuPU90KCkscj1uLkJyb3dzZXIud3JhcFN5bmMoZSksbz0oYXdhaXQgci5nZXRQYWdlcygpKS5maW5kKChlPT50P2UucGFnZUlkPT09dDplLmlzQWN0aXZlKSk7bz8ubGF5b3V0Py5jb250ZW50JiZWdChvLmxheW91dC5jb250ZW50KS5mb3JFYWNoKChhc3luYyBlPT57KGF3YWl0IGZpbi5WaWV3LndyYXAoe3V1aWQ6bi5pZGVudGl0eS51dWlkLG5hbWU6ZS5uYW1lfSkpLnJlbG9hZCgpfSkpfSkodC5pZGVudGl0eSx0LnBhZ2VJZCk7YnJlYWs7Y2FzZSB2LkNsb3NlT3RoZXJzOmF3YWl0KGFzeW5jKGUsdCk9Pntjb25zdCBuPU90KCkuQnJvd3Nlci53cmFwU3luYyhlKSxyPWF3YWl0IG4uZ2V0UGFnZXMoKTtmb3IoY29uc3QgbyBvZiByKW8ucGFnZUlkIT09dCYmKGF3YWl0IG4ucmVtb3ZlUGFnZShvLnBhZ2VJZCksYXdhaXQgbi5fdHJhY2tSZW1vdmVkVGFiKHtpZGVudGl0eTplLHBhZ2U6b30pKX0pKHQuaWRlbnRpdHksdC5wYWdlSWQpO2JyZWFrO2Nhc2Ugdi5TYXZlV29ya3NwYWNlQXM6YXdhaXQgVm8odC5pZGVudGl0eSl9fSxpaT1hc3luYyhlLHQpPT57aWYoZT8udHlwZSl7Y29uc3Qgbj10LmlkZW50aXR5O3N3aXRjaChlLnR5cGUpe2Nhc2UgeS5TYXZlUGFnZTphd2FpdCBBbyhuKTticmVhaztjYXNlIHkuU2F2ZVdvcmtzcGFjZTphd2FpdCBJbyhuKTticmVhaztjYXNlIHkuU2F2ZVBhZ2VBczphd2FpdCBUbyhuKTticmVhaztjYXNlIHkuU2F2ZVdvcmtzcGFjZUFzOmF3YWl0IFZvKG4pO2JyZWFrO2Nhc2UgeS5DdXN0b206aWYoZS5hY3Rpb24pe2NvbnN0IG49e2NhbGxlclR5cGU6ay5TYXZlQnV0dG9uQ29udGV4dE1lbnUsd2luZG93SWRlbnRpdHk6dC5pZGVudGl0eSxwYWdlSWQ6dC5wYWdlSWQsY3VzdG9tRGF0YTplLmFjdGlvbi5jdXN0b21EYXRhfTtPdCgpLl9pbnZva2VDdXN0b21BY3Rpb24oZS5hY3Rpb24uaWQsbil9ZWxzZSBjb25zb2xlLndhcm4oYEVuY291bnRlcmVkIGEgQ3VzdG9tIGNvbnRleHQgbWVudSBvcHRpb24gd2l0aCBhbiBcImFjdGlvblwiIHByb3BlcnR5IHdpdGggdmFsdWUgXCIke2UuYWN0aW9ufVwiYCl9fX07dmFyIGxpOyFmdW5jdGlvbihlKXtlW2UuQm90dG9tTGVmdD0wXT1cIkJvdHRvbUxlZnRcIixlW2UuQm90dG9tUmlnaHQ9MV09XCJCb3R0b21SaWdodFwiLGVbZS5DZW50ZXI9Ml09XCJDZW50ZXJcIn0obGl8fChsaT17fSkpO2NvbnN0IHNpPWFzeW5jKGUsdCxuLHIpPT57Y29uc3R7eDpvLHk6YSxpZGVudGl0eTppLHRlbXBsYXRlOmwsY2FsbGJhY2s6c309ZSxjPWF3YWl0IGxlKGkpLHtkYXRhOnV9PWM/YXdhaXQoYXN5bmMoZSx0LG4scik9PntpZighRSl0aHJvdyBuZXcgRXJyb3IoXCJzaG93RW50ZXJwcmlzZUNvbnRleHRNZW51IGNhbiBvbmx5IGJlIHVzZWQgaW4gYSBIZXJlIGVudi4gQXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZCBkdXJpbmcgcHJlLXJlbmRlcmluZy5cIik7aWYoIXImJiFmaW4ubWUuaXNXaW5kb3cpdGhyb3cgbmV3IEVycm9yKFwic2hvd0VudGVycHJpc2VDb250ZXh0TWVudSBjYW4gb25seSBiZSB1c2VkIGluIGEgSGVyZSB3aW5kb3cuXCIpO2NvbnN0IG89ZmluLldpbmRvdy53cmFwU3luYyh7dXVpZDpZLnV1aWQsbmFtZTpLLkVudGVycHJpc2VDb250ZXh0TWVudX0pO2F3YWl0IG8uaXNTaG93aW5nKCkmJmF3YWl0IG8uYmx1cigpO2NvbnN0IGE9YXdhaXQgbGEoKSxpPW5ldyBQcm9taXNlKCgoZSx0KT0+e2EucmVnaXN0ZXIoXCJyZXNwb25zZVwiLCh0PT57ZSh0KX0pKX0pKSx7eDpsLHk6cyx0ZW1wbGF0ZTpjfT1lO3JldHVybiBhd2FpdCBhLmRpc3BhdGNoKFwib3BlblwiLHtwYXJlbnRJZGVudGl0eTpyLmlkZW50aXR5LHJlc3BvbnNlSWRlbnRpdHk6WSx0eXBlOnQsYW5jaG9yQmVoYXZpb3I6bix4OmwseTpzLHBheWxvYWQ6e3RlbXBsYXRlOmN9fSksaX0pKHt4Om8seTphLHRlbXBsYXRlOmx9LG4scixmaW4uV2luZG93LndyYXBTeW5jKGkpKTphd2FpdCBmdW5jdGlvbihlLHQpe2lmKCFFKXRocm93IG5ldyBFcnJvcihcInNob3dDb250ZXh0TWVudSBjYW4gb25seSBiZSB1c2VkIGluIGFuIE9wZW5GaW4gZW52LiBBdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kIGR1cmluZyBwcmUtcmVuZGVyaW5nLlwiKTtpZighdCYmIWZpbi5tZS5pc1dpbmRvdyl0aHJvdyBuZXcgRXJyb3IoXCJzaG93Q29udGV4dE1lbnUgY2FuIG9ubHkgYmUgdXNlZCBpbiBhbiBPcGVuRmluIHdpbmRvdy5cIik7cmV0dXJuKHR8fGZpbi5XaW5kb3cuZ2V0Q3VycmVudFN5bmMoKSkuc2hvd1BvcHVwTWVudShlKX0oe3g6byx5OmEsdGVtcGxhdGU6bH0sZmluLldpbmRvdy53cmFwU3luYyhpKSk7cyh1LGUpfTthc3luYyBmdW5jdGlvbiBjaShlLHQpe2NvbnN0IG49YXdhaXQgbGUoZS5pZGVudGl0eSkscj1uP2F3YWl0KGFzeW5jKHtpZGVudGl0eTplLHNlbGVjdGVkVmlld3M6dH0pPT57Y29uc3Qgbj1PdCgpLHI9bi5Ccm93c2VyLndyYXBTeW5jKGUpLG89KGF3YWl0IHIuZ2V0UGFnZXMoKSkuZmluZCgoZT0+ZS5pc0FjdGl2ZSkpLGE9QXQoby5sYXlvdXQuY29udGVudCk+MSxpPWF3YWl0IGxlKGUpLGw9YXdhaXQgbi5UaGVtZS5nZXRUaGVtZXMoKSxzPWxbMF0mJlwicGFsZXR0ZXNcImluIGxbMF18fCFsWzBdfHwwPT09bC5sZW5ndGgsYz17Li4uJGEoaSksZW5hYmxlZDphfSx1PXsuLi5OYShpKSxlbmFibGVkOmF9O3JldHVybltaYSgpLEZhKCEwLGkpLHt0eXBlOnNhLlNlcGFyYXRvcn0sYyx1LHt0eXBlOnNhLlNlcGFyYXRvcn0sLi4ucz9be3R5cGU6c2EuU3VibWVudSxsYWJlbDp6YSgpLmxhYmVsLHN1Ym1lbnU6YXdhaXQgS2EoKX1dOltdLHt0eXBlOnNhLlNlcGFyYXRvcn0sRGEoKSx7dHlwZTpzYS5TZXBhcmF0b3J9LEJhKCEwKV19KSh7aWRlbnRpdHk6ZS5pZGVudGl0eSxzZWxlY3RlZFZpZXdzOmUuc2VsZWN0ZWRWaWV3c30pOmF3YWl0IHFhKGUuaWRlbnRpdHksZS5zZWxlY3RlZFZpZXdzKSxvPWF3YWl0IHJpKCk7bnx8KHIuZmluZCgoZT0+ZS5kYXRhPy50eXBlPT09aC5RdWl0KSkubGFiZWw9YFF1aXQgJHtvfWApO2NvbnN0e3JlY3Q6YSwuLi5pfT1lLHt4OmwseTpzfT1uP3t4OmEubGVmdCthLndpZHRoLHk6YS5ib3R0b219OmUsYz17Li4uaSx4OmwseTpzLHRlbXBsYXRlOnIsY2FsbGJhY2s6b2l9O2F3YWl0IHRoaXMub3Blbkdsb2JhbENvbnRleHRNZW51KGMsdCl9YXN5bmMgZnVuY3Rpb24gdWkoZSx0KXtjb25zdCBuPXsuLi5lLGNhbGxiYWNrOnRpfTthd2FpdCB0aGlzLm9wZW5WaWV3VGFiQ29udGV4dE1lbnUobix0KX1hc3luYyBmdW5jdGlvbiBkaShlLHQpe2NvbnN0IG49YXdhaXQoYXN5bmMoZSx0KT0+e2NvbnN0IG49YXdhaXQgT3QoKS5TdG9yYWdlLmdldFBhZ2UoZSkscj1hd2FpdCBLbigpLG89YXdhaXQgbGUodCksYT1yLmZpbmQoKHQ9PnQucGFnZUlkPT09ZSkpLGk9QXQoYS5sYXlvdXQuY29udGVudCk+MSxsPWkse3dvcmtzcGFjZVBsYXRmb3JtOnN9PWF3YWl0IHEodCkuZ2V0T3B0aW9ucygpLGM9IShzLmlzTG9ja2VkfHxzLnByZXZlbnRQYWdlQ2xvc2V8fGEuY2xvc2VCdXR0b24/LmRpc2FibGVkfHxhLmNsb3NlQnV0dG9uPy5oaWRkZW4pLHU9W3t0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwiZW50ZXJwcmlzZUNvbnRleHRNZW51Lm5ld1RhYlwiKSxkYXRhOnt0eXBlOnYuTmV3UGFnZX19LGNhLHt0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwicmVsb2FkXCIpLGRhdGE6e3R5cGU6di5SZWZyZXNofX0se3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4oXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZHVwbGljYXRlXCIpLGRhdGE6e3R5cGU6di5EdXBsaWNhdGV9LGVuYWJsZWQ6IXMuaXNMb2NrZWR9LGNhLHt0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKGw/XCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlU3VwZXJ0YWJcIjpcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VUYWJcIiksZGF0YTp7dHlwZTp2LkNsb3NlfSxlbmFibGVkOmN9XSxkPVt7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihcImVudGVycHJpc2VDb250ZXh0TWVudS5uZXdUYWJcIiksZGF0YTp7dHlwZTp2Lk5ld1BhZ2V9fSxjYSx7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihcImVudGVycHJpc2VTYXZlTW9kYWwucmVuYW1lU3VwZXJ0YWJcIiksZGF0YTp7dHlwZTp2LlJlbmFtZX0sZW5hYmxlZDohcy5pc0xvY2tlZCYmISFuJiZpfSx7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihcImVudGVycHJpc2VDb250ZXh0TWVudS5kdXBsaWNhdGVcIiksZGF0YTp7dHlwZTp2LkR1cGxpY2F0ZX0sZW5hYmxlZDohcy5pc0xvY2tlZH0sY2Ese3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4oXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiXCIpLGRhdGE6e3R5cGU6di5TYXZlfSxlbmFibGVkOml9LHt0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYkFzXCIpLGRhdGE6e3R5cGU6di5TYXZlQXN9LGVuYWJsZWQ6aX0sY2Ese3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4oXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZGVsZXRlU3VwZXJ0YWJcIiksZGF0YTp7dHlwZTp2LkRlbGV0ZVBhZ2V9LGVuYWJsZWQ6ISFufSxjYSx7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihsP1wiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVN1cGVydGFiXCI6XCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlVGFiXCIpLGRhdGE6e3R5cGU6di5DbG9zZX0sZW5hYmxlZDpjfV0scD1be3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4oXCJjb250ZXh0TWVudS5zYXZlUGFnZVwiKSxkYXRhOnt0eXBlOnYuU2F2ZX0sZW5hYmxlZDohMH0se3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4oXCJzYXZlTWVudS5zYXZlUGFnZUFzXCIpLGRhdGE6e3R5cGU6di5TYXZlQXN9LGVuYWJsZWQ6ITB9LHt0eXBlOnNhLkxhYmVsLGxhYmVsOlwiU2F2ZSBXb3Jrc3BhY2UgQXNcIixkYXRhOnt0eXBlOnYuU2F2ZVdvcmtzcGFjZUFzfX0se3R5cGU6c2EuTGFiZWwsbGFiZWw6XCJSZWZyZXNoXCIsZGF0YTp7dHlwZTp2LlJlZnJlc2h9fSxjYSx7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihcInNhdmVNb2RhbC5yZW5hbWVQYWdlXCIpLGRhdGE6e3R5cGU6di5SZW5hbWV9LGVuYWJsZWQ6ISFufSx7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihcImNvbnRleHRNZW51LmR1cGxpY2F0ZVBhZ2VcIiksZGF0YTp7dHlwZTp2LkR1cGxpY2F0ZX0sZW5hYmxlZDohcy5pc0xvY2tlZH0sY2Ese3R5cGU6c2EuTGFiZWwsbGFiZWw6VG4oXCJzYXZlTW9kYWwuY2xvc2VQYWdlXCIpLGRhdGE6e3R5cGU6di5DbG9zZX0sZW5hYmxlZDpjfV07cmV0dXJuIG8/bD9kOnU6cH0pKGUucGFnZUlkLGUuaWRlbnRpdHkpLHI9ey4uLmUsdGVtcGxhdGU6bixjYWxsYmFjazoodCxuKT0+e2FpKHQsbixlLnJlY3QpfX07YXdhaXQgdGhpcy5vcGVuUGFnZVRhYkNvbnRleHRNZW51KHIsdCl9YXN5bmMgZnVuY3Rpb24gcGkoZSx0KXtjb25zdCBuPXsuLi5lLHRlbXBsYXRlOmF3YWl0KGFzeW5jKCk9Pntjb25zdCBlPU90KCksdD1hd2FpdCBlLmdldEN1cnJlbnRXb3Jrc3BhY2UoKSxuPShhd2FpdCBlLlN0b3JhZ2UuZ2V0V29ya3NwYWNlcygpKS5maW5kKChlPT5lLndvcmtzcGFjZUlkPT09dC53b3Jrc3BhY2VJZCkpO3JldHVyblt7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VcIiksZW5hYmxlZDohIW4sZGF0YTp7dHlwZTp5LlNhdmVXb3Jrc3BhY2V9fSx7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihcInNhdmVNZW51LnNhdmVXb3Jrc3BhY2VBc1wiKSxkYXRhOnt0eXBlOnkuU2F2ZVdvcmtzcGFjZUFzfX0se3R5cGU6c2EuU2VwYXJhdG9yLGRhdGE6dm9pZCAwfSx7dHlwZTpzYS5MYWJlbCxsYWJlbDpUbihcImNvbnRleHRNZW51LnNhdmVQYWdlXCIpLGRhdGE6e3R5cGU6eS5TYXZlUGFnZX19LHt0eXBlOnNhLkxhYmVsLGxhYmVsOlRuKFwic2F2ZU1lbnUuc2F2ZVBhZ2VBc1wiKSxkYXRhOnt0eXBlOnkuU2F2ZVBhZ2VBc319XX0pKCksY2FsbGJhY2s6aWl9O2F3YWl0IHRoaXMub3BlblNhdmVCdXR0b25Db250ZXh0TWVudShuLHQpfWNvbnN0IGZpPVImJkUmJmthKFwiZG9jay1wcm92aWRlci1jb25maWdzXCIsXCJkb2NrLXByb3ZpZGVyLWNvbmZpZ3NcIik7YXN5bmMgZnVuY3Rpb24gaGkoZSl7aWYoIWZpKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBnZXQgRG9jayBwcm92aWRlciBjb25maWcgLSBJbmRleERCIG5vdCBzdXBwb3J0ZWRcIik7cmV0dXJuIGF3YWl0IHZhKGUsZmkpLmNhdGNoKChlPT57Y29uc29sZS53YXJuKFwiRmFpbGVkIHRvIHJldHJpZXZlIERvY2sgcHJvdmlkZXIgY29uZmlnIGZyb20gSW5kZXhlZERCXCIsZSl9KSl9YXN5bmMgZnVuY3Rpb24gZ2koZSl7YXdhaXQgQ2EoZS5pZCxlLGZpKX1jb25zdCB2aT1SJiZFJiZTYShcIm9wZW5maW4td29ya3NwYWNlLXBsYXRmb3JtLXdvcmtzcGFjZXNcIixcIndvcmtzcGFjZXNcIik7YXN5bmMgZnVuY3Rpb24gQ2koZSl7aWYoIXZpKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBnZXQgd29ya3NwYWNlIC0gSW5kZXhEQiBub3Qgc3VwcG9ydGVkXCIpO2NvbnN0IHQ9YXdhaXQgdmEoZSx2aSk7aWYodClyZXR1cm4gdC53b3Jrc3BhY2VJZD1lLnRvU3RyaW5nKCksdC50aXRsZT10LnRpdGxlfHx0LndvcmtzcGFjZUlkLHR9YXN5bmMgZnVuY3Rpb24gbWkoZSl7aWYoIXZpKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBnZXQgd29ya3NwYWNlcyAtIEluZGV4REIgbm90IHN1cHBvcnRlZFwiKTtjb25zdCB0PWF3YWl0IGJhKHZpKSxuPShhd2FpdCBQcm9taXNlLmFsbCh0Lm1hcCgoZT0+Q2koZS50b1N0cmluZygpKSkpKSkuZmlsdGVyKChlPT4hIWUpKTtyZXR1cm4gZT9uLmZpbHRlcigodD0+T2EodC50aXRsZSxlKSkpOm59YXN5bmMgZnVuY3Rpb24gd2koe3dvcmtzcGFjZTplfSl7aWYoIXZpKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBjcmVhdGUgd29ya3NwYWNlIC0gSW5kZXhEQiBub3Qgc3VwcG9ydGVkXCIpO2NvbnN0IHQ9KGF3YWl0IG1pKCkpLmZpbmQoKHQ9PnQudGl0bGU9PT1lLnRpdGxlKSk7aWYodCYmdC53b3Jrc3BhY2VJZCE9PWUud29ya3NwYWNlSWQpdGhyb3cgbmV3IEVycm9yKGBXb3Jrc3BhY2Ugd2l0aCB0aXRsZSAnJHtlLnRpdGxlfScgYWxyZWFkeSBleGlzdHMuYCk7YXdhaXQgQ2EoZS53b3Jrc3BhY2VJZCxlLHZpKX1hc3luYyBmdW5jdGlvbiBiaShlKXtpZighdmkpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgLSBJbmRleERCIG5vdCBzdXBwb3J0ZWRcIik7YXdhaXQgbWEoZSx2aSl9YXN5bmMgZnVuY3Rpb24geWkoe3dvcmtzcGFjZUlkOmUsd29ya3NwYWNlOnR9KXtpZighdmkpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHVwZGF0ZSB3b3Jrc3BhY2VzIC0gSW5kZXhEQiBub3Qgc3VwcG9ydGVkXCIpO2lmKCFhd2FpdCBDaShlKSl0aHJvdyBuZXcgRXJyb3IoXCJ3b3Jrc3BhY2Ugbm90IGZvdW5kXCIpO2F3YWl0IHdpKHt3b3Jrc3BhY2U6dH0pLGUhPT10LndvcmtzcGFjZUlkJiZhd2FpdCBiaShlKX1jb25zdCB4aT1lPT57Y29uc3QgdD1lLmxheW91dCxuPXQuY29udGVudD9WdCh0LmNvbnRlbnQpOltdLHI9bi5sZW5ndGg7cmV0dXJuIHI+MT97Li4uZSxzaW5nbGVWaWV3TmFtZTpudWxsfToxPT09cj97Li4uZSxzaW5nbGVWaWV3TmFtZTpuWzBdLm5hbWV9OnZvaWQgMH0sa2k9YXN5bmMoZSx0LG4pPT57Y29uc3Qgcj1hd2FpdCBPdCgpLkJyb3dzZXIuZ2V0QWxsQXR0YWNoZWRQYWdlcygpLG89bmV3IFNldChyLm1hcCgoZT0+ZS50aXRsZSkpLmZpbHRlcigoZT0+ISFlKSkpLGE9bmV3IFNldChyLm1hcCgoZT0+ZS5wYWdlSWQpKS5maWx0ZXIoKGU9PiEhZSkpKSxpPXQ/LmRlZmF1bHRQYWdlT3B0aW9ucyxsPVwiZW50ZXJwcmlzZVwiPT09bj8ud29ya3NwYWNlUGxhdGZvcm0/LndpbmRvd1R5cGV8fFwiZW50ZXJwcmlzZVwiPT09dD8uZGVmYXVsdFdpbmRvd09wdGlvbnM/LndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlO3JldHVybiBlLm1hcCgoZT0+e2lmKFwicmVwYXJlbnRcIj09PWUubXVsdGlJbnN0YW5jZVZpZXdCZWhhdmlvcilyZXR1cm57Li4uZSxsYXlvdXRDb250YWluZXJLZXk6SWUoKX07KChlLHQpPT57ZS5wYWdlSWR8fD1JZSgpLHQuaGFzKGUucGFnZUlkKSYmKGNvbnNvbGUud2FybihcIlBhZ2VJRCBjb2xsaXNpb24gZGV0ZWN0ZWQuIEFsbCBQYWdlIElEcyBzaG91bGQgYmUgdW5pcXVlLiBBIHJhbmRvbSBuZXcgcGFnZUlkIHdpbGwgYmUgZ2VuZXJhdGVkXCIpLGUucGFnZUlkPUllKCkpLHQuYWRkKGUucGFnZUlkKX0pKGUsYSksbD9lLmljb25Vcmw9YCR7Wn0vaWNvbnMvZW50ZXJwcmlzZS1wYWdlLnN2Z2A6ZS50aXRsZT1HbihlLnRpdGxlLEFycmF5LmZyb20oby5rZXlzKCkpKSxvLmFkZChlLnRpdGxlKSxlLnBhbmVscz8ucmVkdWNlKCgoZSx0KT0+e2NvbnN0IG49T2JqZWN0LnZhbHVlcyhwKTtpZighbi5pbmNsdWRlcyh0LnBvc2l0aW9uKSl0aHJvdyBuZXcgRXJyb3IoYEVuY291bnRlcmVkIGEgcGFuZWwgd2l0aCB1bnN1cHBvcnRlZCBwb3NpdGlvbiBcIiR7dC5wb3NpdGlvbn1cIi4gU3VwcG9ydGVkIHBvc2l0aW9ucyBhcmU6ICR7bi50b1N0cmluZygpfWApO2lmKDE9PWVbdC5wb3NpdGlvbl0pdGhyb3cgbmV3IEVycm9yKGBGb3VuZCBtb3JlIHRoYW4gMSBwYW5lbCBhdCBwb3NpdGlvbjogJHt0LnBvc2l0aW9ufS4gT25seSAxIHBhbmVsIGF0IGEgZ2l2ZW4gcG9zaXRpb24gaXMgY3VycmVudGx5IHN1cHBvcnRlZC5gKTtyZXR1cm57Li4uZSxbdC5wb3NpdGlvbl06ZVt0LnBvc2l0aW9uXSsxfX0pLHtbcC5MZWZ0XTowLFtwLlJpZ2h0XTowLFtwLlRvcF06MCxbcC5Cb3R0b21dOjB9KTtjb25zdCByPVwicGFuZWxzXCJpbiBlP2UucGFuZWxzOmk/LnBhbmVscztsZXQgcz0oYz1lLmxheW91dCx1PXQ/LmRlZmF1bHRWaWV3T3B0aW9ucyxQdCh7Li4uY30sKGU9PkV0KGUsdSkpKSk7dmFyIGMsdTtjb25zdCBkPSgoZSx0LG4pPT57aWYobilyZXR1cm4gT2k7Y29uc3Qgcj10Py53b3Jrc3BhY2VQbGF0Zm9ybT8ubmV3VGFiVXJsO2lmKHIpcmV0dXJuIHI7Y29uc3Qgbz1lPy5kZWZhdWx0V2luZG93T3B0aW9ucz8ud29ya3NwYWNlUGxhdGZvcm0/Lm5ld1RhYlVybDtyZXR1cm4gb3x8dm9pZCAwfSkodCxuLGwpO2QmJiFzPy5zZXR0aW5ncz8ubmV3VGFiQnV0dG9uJiYocz17Li4ucyxzZXR0aW5nczp7Li4ucz8uc2V0dGluZ3MsbmV3VGFiQnV0dG9uOnt1cmw6ZH19fSk7cmV0dXJuey4uLmksLi4uZSxwYW5lbHM6ciYmJG4ociksbGF5b3V0Q29udGFpbmVyS2V5OkllKCksbGF5b3V0OnMsaXNMYXlvdXRDcmVhdGVkOiExfX0pKX0sU2k9WitfLkJyb3dzZXIsT2k9U2krXCJlbnRlcnByaXNlL2xhbmRpbmcvXCIsTWk9e2JhY2tncm91bmRUaHJvdHRsaW5nOiEwLHVybDpTaSxjb250ZXh0TWVudTohMCxjbG9zZU9uTGFzdFZpZXdSZW1vdmVkOiExLHBlcm1pc3Npb25zOntTeXN0ZW06e29wZW5VcmxXaXRoQnJvd3Nlcjp7ZW5hYmxlZDohMCxwcm90b2NvbHM6W1wibWFpbHRvXCJdfX19fSxMaT17ZGltZW5zaW9uczp7Ym9yZGVyV2lkdGg6MyxoZWFkZXJIZWlnaHQ6MzB9fSxfaT0oWS51dWlkLEsuQnJvd3NlckFkZHJlc3NTZWFyY2hQcmVmaXgpO2FzeW5jIGZ1bmN0aW9uIFBpKGUsdCxuKXtsZXQgcj1lO2NvbnN0IG89XCJlbnRlcnByaXNlXCI9PT1yLndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlfHxcImVudGVycHJpc2VcIj09PXQ/LmRlZmF1bHRXaW5kb3dPcHRpb25zPy53b3Jrc3BhY2VQbGF0Zm9ybT8ud2luZG93VHlwZTtpZihyLmxheW91dCYmIXIud29ya3NwYWNlUGxhdGZvcm0/LnBhZ2VzPy5sZW5ndGgpe2NvbnN0IGU9YXdhaXQgdXIoKSxuPXsuLi5hd2FpdCAkZShlLHIubGF5b3V0KSxpc0FjdGl2ZTohMH07ci53b3Jrc3BhY2VQbGF0Zm9ybXx8PXt9LHIud29ya3NwYWNlUGxhdGZvcm0ucGFnZXM9YXdhaXQga2koW25dLHQscil9Y29uc3QgYT1uPy50aGVtZXM/LlswXTtpZihyLndvcmtzcGFjZVBsYXRmb3JtPy5wYWdlcz8ubGVuZ3RoKXtjb25zdCBlPWF3YWl0IGtpKHIud29ya3NwYWNlUGxhdGZvcm0ucGFnZXMsdCxyKSxpPWUsbD0oZT0+e2lmKCFlKXJldHVybjtsZXQgdD1lLmZpbmQoKGU9PmUuaXNBY3RpdmUpKTtyZXR1cm4hdCYmZS5sZW5ndGg+MCYmKGVbMF0uaXNBY3RpdmU9ITAsdD1lWzBdKSx0fSkoaSk7aWYoaS5mb3JFYWNoKChlPT57ZS5wYWdlSWQhPT1sPy5wYWdlSWQmJihlLmlzQWN0aXZlPSExKX0pKSxhd2FpdCBObihpKSxyLndvcmtzcGFjZVBsYXRmb3JtLnBhZ2VzPWUscj1rZSh7fSwoZT0+KHtjb250ZXh0TWVudU9wdGlvbnM6e2VuYWJsZWQ6ITF9LGV4cGVyaW1lbnRhbDp7c2hvd0Zhdmljb25zOiEwLGRlZmF1bHRGYXZpY29uVXJsOmU/XCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFQLy8vd0FBQUNINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQ1JBRUFPdz09XCI6YCR7Wn0vaWNvbnMvZGVmYXVsdEZhdmljb24uc3ZnYH0sdmlld1Zpc2liaWxpdHk6e3Nob3dWaWV3c09uU3BsaXR0ZXJEcmFnOntlbmFibGVkOiEwfSxzaG93Vmlld3NPbldpbmRvd1Jlc2l6ZTp7ZW5hYmxlZDohMH19fSkpKG8pLHQ/LmRlZmF1bHRXaW5kb3dPcHRpb25zLHIsTWkpLGwubGF5b3V0PWtlKGwubGF5b3V0LExpKSxhc3luYyBmdW5jdGlvbihlKXtpZihlLmljb258fGUudGFza2Jhckljb24pe2NvbnN0IHQ9ZmluLkFwcGxpY2F0aW9uLmdldEN1cnJlbnRTeW5jKCksbj1hd2FpdChhd2FpdCB0LmdldFdpbmRvdygpKS5nZXRPcHRpb25zKCk7ZS50YXNrYmFySWNvbkdyb3VwfHw9bi50YXNrYmFySWNvbkdyb3VwfHxmaW4ubWUuaWRlbnRpdHkudXVpZH1pZihlLndvcmtzcGFjZVBsYXRmb3JtLmljb24paWYoXCJvYmplY3RcIj09dHlwZW9mIGUud29ya3NwYWNlUGxhdGZvcm0uaWNvbil7Y29uc3QgdD13aW5kb3cubWF0Y2hNZWRpYShcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIik7ZS5pY29uPXQubWF0Y2hlcz9lLndvcmtzcGFjZVBsYXRmb3JtLmljb24uZGFyazplLndvcmtzcGFjZVBsYXRmb3JtLmljb24ubGlnaHR9ZWxzZSBlLmljb249ZS53b3Jrc3BhY2VQbGF0Zm9ybS5pY29ufShyKSwhci5iYWNrZ3JvdW5kQ29sb3ImJmEpaWYoXCJwYWxldHRlXCJpbiBhKXIuYmFja2dyb3VuZENvbG9yPWE/LnBhbGV0dGU/LmJhY2tncm91bmQyfHxhPy5wYWxldHRlPy5iYWNrZ3JvdW5kUHJpbWFyeTtlbHNle2NvbnN0IGU9bi5zZWxlY3RlZFNjaGVtZT09PWcuRGFya3x8bi5zZWxlY3RlZFNjaGVtZT09PWcuU3lzdGVtJiZ3aW5kb3cubWF0Y2hNZWRpYShcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIik/YT8ucGFsZXR0ZXMuZGFyazphPy5wYWxldHRlcy5saWdodDtyLmJhY2tncm91bmRDb2xvcj1lPy5iYWNrZ3JvdW5kMnx8ZT8uYmFja2dyb3VuZFByaW1hcnl9cj1qcihyLCEwKTtjb25zdCBzPWF3YWl0IFByKCk7cyYmKHIudXJsPXMrXy5Ccm93c2VyKSxyLmxheW91dD1sLmxheW91dCxyLmxheW91dFNuYXBzaG90PSgoZSx0KT0+KHtsYXlvdXRzOmUucmVkdWNlKCgoZSxuKT0+e2lmKCFuLmlzQWN0aXZlKXtpZighdClyZXR1cm4gZTtpZigheGkobikuc2luZ2xlVmlld05hbWUpcmV0dXJuIGV9cmV0dXJuIGVbbi5sYXlvdXRDb250YWluZXJLZXldPW4ubGF5b3V0LGV9KSx7fSkscGFnZXM6ZX0pKShyLndvcmtzcGFjZVBsYXRmb3JtLnBhZ2VzLG8pLHIud29ya3NwYWNlUGxhdGZvcm0ud2luZG93VHlwZT1yLndvcmtzcGFjZVBsYXRmb3JtLndpbmRvd1R5cGU/P3guQnJvd3Nlcn1pZihyLmNvcm5lclJvdW5kaW5nJiZkZWxldGUgci5jb3JuZXJSb3VuZGluZyxyLm5hbWV8fHIubGF5b3V0U25hcHNob3Q/ci5jb250ZXh0TWVudU9wdGlvbnM/LnRlbXBsYXRlPy5sZW5ndGg+MD9yLmNvbnRleHRNZW51T3B0aW9ucy50ZW1wbGF0ZT1yLmNvbnRleHRNZW51T3B0aW9ucy50ZW1wbGF0ZS5maWx0ZXIoKGU9PlwicHJpbnRcIiE9PWUpKTpyLmNvbnRleHRNZW51T3B0aW9ucz17dGVtcGxhdGU6W10sZW5hYmxlZDohMX06ci5uYW1lPWAke0suQ2xhc3NpY1dpbmRvd30tJHtJZSgpfWAsci53b3Jrc3BhY2VQbGF0Zm9ybSYmbiYmKHIud29ya3NwYWNlUGxhdGZvcm0uX3RoZW1lRGF0YT1uKSxvKXtyLndvcmtzcGFjZVBsYXRmb3JtLm5ld1BhZ2VVcmw9T2ksci53b3Jrc3BhY2VQbGF0Zm9ybS5uZXdUYWJVcmw9T2ksci5sYXlvdXQmJihyLmxheW91dC5kaW1lbnNpb25zLmJvcmRlcldpZHRoPTQsci5sYXlvdXQuZGltZW5zaW9ucy5oZWFkZXJIZWlnaHQ9MjgpLHIubmFtZT1yLm5hbWV8fGAke0suQnJvd3NlcldpbmRvd30tJHtJZSgpfWA7Y29uc3QgZT1faStyLm5hbWUsdD1maW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudFN5bmMoKTtpZighKGF3YWl0IHQuZ2V0Vmlld3MoKSkuc29tZSgodD0+dC5pZGVudGl0eS5uYW1lPT09ZSkpJiZyLm5hbWUuc3RhcnRzV2l0aChLLkJyb3dzZXJXaW5kb3cpKXtjb25zdCB0PWF3YWl0IFByKCkrXy5Ccm93c2VyUG9wdXBNZW51QWRkcmVzc1NlYXJjaFJlc3VsdHNWaWV3Oyhhd2FpdCBmaW4uVmlldy5jcmVhdGUoe25hbWU6ZSxjb250ZXh0TWVudU9wdGlvbnM6e2VuYWJsZWQ6ITB9LHVybDp0LHRhcmdldDpmaW4ubWUuaWRlbnRpdHksYm91bmRzOnt0b3A6MCxsZWZ0OjAsd2lkdGg6MCxoZWlnaHQ6MH19KSkubmF2aWdhdGUodCl9fXJldHVybiByfWNvbnN0IEVpPWFzeW5jKGUsdCk9Pntjb25zdCBuPXt1dWlkOnQudXVpZCxuYW1lOnQubmFtZX07YXdhaXQgeW8obixlLnRpdGxlPz9hd2FpdCByaSgpLGUuc2hvdWxkQ2VudGVyT25Nb25pdG9yKSYmZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkucXVpdCgpfSxqaT1lPT57Y29uc3QgdD1lLm5hbWU9PT1LLkhvbWUsbj1lLm5hbWU/LnN0YXJ0c1dpdGgoSy5Ib21lSW50ZXJuYWwpLHI9ZS5uYW1lPy5zdGFydHNXaXRoKEsuQnJvd3Nlck1lbnUpfHxlLm5hbWU/LnN0YXJ0c1dpdGgoSy5Ccm93c2VyU2F2ZU1lbnUpO3JldHVybiF0JiYhbiYmIXJ9O2NvbnN0IFJpPWU9PkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZSkpO2FzeW5jIGZ1bmN0aW9uIElpKGUsdCxuKXtjb25zdCByPWUubWFuaWZlc3RVcmw/YXdhaXQgdCh7bWFuaWZlc3RVcmw6ZS5tYW5pZmVzdFVybH0sbik6dm9pZCAwO2lmKHI/LmludGVyb3AmJmUuaW50ZXJvcCl7Y29uc3QgdD17Li4uZSwuLi5yLGludGVyb3A6ZS5pbnRlcm9wfTtyZXR1cm4gZGVsZXRlIHQubWFuaWZlc3RVcmwsdH1yZXR1cm4gZX1jb25zdCBWaT1lPT57Y29uc3QgdD1SaShlKTtyZXR1cm4gdC5faW50ZXJuYWxXb3Jrc3BhY2VEYXRhPy5icm93c2VyTmF2aWdhdGlvbkJ1dHRvbnMmJih0LndvcmtzcGFjZVBsYXRmb3JtPXsuLi50LndvcmtzcGFjZVBsYXRmb3JtLGJyb3dzZXJOYXZpZ2F0aW9uQnV0dG9uczp0Ll9pbnRlcm5hbFdvcmtzcGFjZURhdGEuYnJvd3Nlck5hdmlnYXRpb25CdXR0b25zfSxkZWxldGUgdC5faW50ZXJuYWxXb3Jrc3BhY2VEYXRhLmJyb3dzZXJOYXZpZ2F0aW9uQnV0dG9ucyksdH0sSGk9ZT0+e2NvbnN0IHQ9UmkoZSk7cmV0dXJuIHQud29ya3NwYWNlUGxhdGZvcm0mJih0Ll9pbnRlcm5hbFdvcmtzcGFjZURhdGE9ey4uLnQuX2ludGVybmFsV29ya3NwYWNlRGF0YSwuLi50LndvcmtzcGFjZVBsYXRmb3JtfSxkZWxldGUgdC53b3Jrc3BhY2VQbGF0Zm9ybSksdH0sQWk9e3JlbG9hZDpbe2tleXM6XCJDdHJsK1JcIixwcmV2ZW50RGVmYXVsdDohMH1dLGJhY2s6W3trZXlzOlwiQWx0K0xlZnRcIixwcmV2ZW50RGVmYXVsdDohMH1dLGZvcndhcmQ6W3trZXlzOlwiQWx0K1JpZ2h0XCIscHJldmVudERlZmF1bHQ6ITB9XX0sVGk9e3JlbG9hZDpbe2tleXM6XCJDbWQrUlwiLHByZXZlbnREZWZhdWx0OiEwfV0sYmFjazpbe2tleXM6XCJDbWQrW1wiLHByZXZlbnREZWZhdWx0OiEwfSx7a2V5czpcIkNtZCtMZWZ0XCIscHJldmVudERlZmF1bHQ6ITB9XSxmb3J3YXJkOlt7a2V5czpcIkNtZCtdXCIscHJldmVudERlZmF1bHQ6ITB9LHtrZXlzOlwiQ21kK1JpZ2h0XCIscHJldmVudERlZmF1bHQ6ITB9XX0sRGk9YXN5bmMoKT0+YXdhaXQgVGEoKT9BaTpUaSxCaT1hc3luYyBlPT57Y29uc3QgdD1hd2FpdCBlLmdldEN1cnJlbnRXaW5kb3coKSxuPWF3YWl0IHQuZ2V0T3B0aW9ucygpLHI9bi53b3Jrc3BhY2VQbGF0Zm9ybT8ubmF2aWdhdGlvbkJ1dHRvbnM7cmV0dXJuIHIuZW5hYmxlZCYmIXIuaG90a2V5c0Rpc2FibGVkfSxaaT0oZSx0KT0+e2NvbnN0IG49ZmluLlZpZXcud3JhcFN5bmMoZSk7dD8ucmVsb2FkJiYoZT0+e2UuYWRkTGlzdGVuZXIoXCJob3RrZXlcIiwoYXN5bmMgdD0+e2lmKFwia2V5RG93blwiPT09dC5pbnB1dFR5cGUpe2NvbnN0IG49YXdhaXQgQmkoZSkscj1hd2FpdCBUYSgpLG89dC5jdHJsS2V5JiYhdC5hbHRLZXkmJiF0Lm1ldGFLZXkmJiF0LnNoaWZ0S2V5JiZcInJcIj09PXQua2V5LGE9IXQuY3RybEtleSYmIXQuYWx0S2V5JiZ0Lm1ldGFLZXkmJiF0LnNoaWZ0S2V5JiZcInJcIj09PXQua2V5O24mJihyP286YSkmJihlLnJlbG9hZCgpLGdlKHt0eXBlOlwiVmlld1wiLGFjdGlvbjpcIlJlbG9hZFwiLHZhbHVlOmUuaWRlbnRpdHkubmFtZX0pKX19KSl9KShuKSx0Py5iYWNrJiYoZT0+e2UuYWRkTGlzdGVuZXIoXCJob3RrZXlcIiwoYXN5bmMgdD0+e2lmKFwia2V5RG93blwiPT09dC5pbnB1dFR5cGUpe2NvbnN0IG49YXdhaXQgQmkoZSkscj1hd2FpdCBUYSgpLG89IXQuY3RybEtleSYmdC5hbHRLZXkmJiF0Lm1ldGFLZXkmJiF0LnNoaWZ0S2V5JiZcIkFycm93TGVmdFwiPT09dC5rZXksYT0hdC5jdHJsS2V5JiYhdC5hbHRLZXkmJnQubWV0YUtleSYmIXQuc2hpZnRLZXkmJlwiQXJyb3dMZWZ0XCI9PT10LmtleSxpPSF0LmN0cmxLZXkmJiF0LmFsdEtleSYmdC5tZXRhS2V5JiYhdC5zaGlmdEtleSYmXCJbXCI9PT10LmtleTtuJiYocj9vOmF8fGkpJiYoZS5uYXZpZ2F0ZUJhY2soKSxnZSh7dHlwZTpcIlZpZXdcIixhY3Rpb246XCJCYWNrXCIsdmFsdWU6ZS5pZGVudGl0eS5uYW1lfSkpfX0pKX0pKG4pLHQ/LmZvcndhcmQmJihlPT57ZS5hZGRMaXN0ZW5lcihcImhvdGtleVwiLChhc3luYyB0PT57aWYoXCJrZXlEb3duXCI9PT10LmlucHV0VHlwZSl7Y29uc3Qgbj1hd2FpdCBCaShlKSxyPWF3YWl0IFRhKCksbz0hdC5jdHJsS2V5JiZ0LmFsdEtleSYmIXQubWV0YUtleSYmIXQuc2hpZnRLZXkmJlwiQXJyb3dSaWdodFwiPT09dC5rZXksYT0hdC5jdHJsS2V5JiYhdC5hbHRLZXkmJnQubWV0YUtleSYmIXQuc2hpZnRLZXkmJlwiQXJyb3dSaWdodFwiPT09dC5rZXksaT0hdC5jdHJsS2V5JiYhdC5hbHRLZXkmJnQubWV0YUtleSYmIXQuc2hpZnRLZXkmJlwiXVwiPT09dC5rZXk7biYmKHI/bzphfHxpKSYmKGUubmF2aWdhdGVGb3J3YXJkKCksZ2Uoe3R5cGU6XCJWaWV3XCIsYWN0aW9uOlwiRm9yd2FyZFwiLHZhbHVlOmUuaWRlbnRpdHkubmFtZX0pKX19KSl9KShuKX0sJGk9KGUsdCk9PlJpKGUpLm1hcCgoZT0+KFwiY29tcG9uZW50U3RhdGVcImluIGU/ZS5jb21wb25lbnRTdGF0ZT10KGUuY29tcG9uZW50U3RhdGUpOlwiY29udGVudFwiaW4gZSYmKGUuY29udGVudD0kaShlLmNvbnRlbnQsdCkpLGUpKSksTmk9ZT0+e2lmKGUpe2NvbnN0IHQ9UmkoZSk7cmV0dXJuIHQuY29udGVudCYmKHQuY29udGVudD0kaSh0LmNvbnRlbnQsVmkpKSx0fXJldHVybiBlfSxGaT1lPT57aWYoZSl7Y29uc3QgdD1SaShlKTtyZXR1cm4gdC5jb250ZW50JiYodC5jb250ZW50PSRpKHQuY29udGVudCxIaSkpLHR9cmV0dXJuIGV9O2FzeW5jIGZ1bmN0aW9uIFdpKHthcHA6ZSx0YXJnZXQ6dH0pe2NvbnN0IG49ZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCk7c3dpdGNoKGUubWFuaWZlc3RUeXBlKXtjYXNlIHMuU25hcHNob3Q6cmV0dXJuIG4uYXBwbHlTbmFwc2hvdChlLm1hbmlmZXN0KTtjYXNlIHMuVmlldzpyZXR1cm4gYXN5bmMgZnVuY3Rpb24oZSx0KXtjb25zdCBuPWZpbi5QbGF0Zm9ybS5nZXRDdXJyZW50U3luYygpO2lmKFwidmlld1wiPT09dC5lbnRpdHlUeXBlKXtjb25zdCBuPWZpbi5WaWV3LndyYXBTeW5jKHQpLHI9YXdhaXQgbi5nZXRQYXJlbnRMYXlvdXQoKTtyZXR1cm4gYXdhaXQgci5yZXBsYWNlVmlldyh0LHttYW5pZmVzdFVybDplLm1hbmlmZXN0LHVybDp2b2lkIDAsdGFyZ2V0OnZvaWQgMH0pLG4uZGVzdHJveSgpfXJldHVybiBuLmNyZWF0ZVZpZXcoe25hbWU6dm9pZCAwLHVybDp2b2lkIDAsbWFuaWZlc3RVcmw6ZS5tYW5pZmVzdCx0YXJnZXQ6dm9pZCAwfSl9KGUsdCk7Y2FzZSBzLkV4dGVybmFsOnJldHVybiBmaW4uU3lzdGVtLmxhdW5jaEV4dGVybmFsUHJvY2Vzcyh7cGF0aDplLm1hbmlmZXN0LHV1aWQ6ZS5hcHBJZH0pO2RlZmF1bHQ6cmV0dXJuIGZpbi5BcHBsaWNhdGlvbi5zdGFydEZyb21NYW5pZmVzdChlLm1hbmlmZXN0KX19bGV0IFVpO2NvbnN0IHppPSgpPT57aWYoIVVpKXtjb25zdCBlPUhlKGAke1widW5kZWZpbmVkXCIhPXR5cGVvZiBmaW4mJmZpbi5tZS5pZGVudGl0eS51dWlkfS1lbnRlcnByaXNlLWFwcC1kaXJlY3RvcnlgKTtVaT1lKCl9cmV0dXJuIFVpfTthc3luYyBmdW5jdGlvbiBHaShlKXtpZighYXdhaXQgbGUoZS5pZGVudGl0eSkpcmV0dXJue307cmV0dXJuKGF3YWl0IHppKCkpLmRpc3BhdGNoKG50LkdldEFwcHMse3F1ZXJ5OmUucmVxLnNlYXJjaFF1ZXJ5fSl9YXN5bmMgZnVuY3Rpb24gS2koZSl7cmV0dXJuKGF3YWl0IHppKCkpLmRpc3BhdGNoKG50LkdldEN1cmF0ZWRDb250ZW50LGUpfWFzeW5jIGZ1bmN0aW9uIHFpKGUpe3JldHVybihhd2FpdCB6aSgpKS5kaXNwYXRjaChudC5HZXRSZWNlbnRseVZpc2l0ZWQsZSl9YXN5bmMgZnVuY3Rpb24gWWkoZSl7Y29uc3QgdD0oYXdhaXQgZWUoKSkubWFwKChhc3luYyBlPT57Y29uc3QgdD1hd2FpdCBlLmdldE9wdGlvbnMoKTt0LndvcmtzcGFjZVBsYXRmb3JtPy5wYWdlcyYmdC5sYXlvdXQmJmF3YWl0KGFzeW5jIGU9Pihhd2FpdCBRZShlKSkuZGlzcGF0Y2gob3QuVXBkYXRlUGFnZXNXaW5kb3dPcHRpb25zKSkoZS5pZGVudGl0eSl9KSk7cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKHQpLGU/ZSgpOlJlKCl9bGV0IEppPVtdO2NvbnN0IFhpPSgpPT5KaTtjb25zdCBRaT0oZSx0KT0+bj0+e2NvbnN0IHI9bnVsbCE9PWU7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5pc1dvcmtzcGFjZVBsYXRmb3JtPSgpPT4oe2lzV29ya3NwYWNlUGxhdGZvcm06ITAsaXNCcm93c2VySW5pdGlhbGl6ZWQ6ISFlLGFuYWx5dGljczp7aXNTdXBwb3J0ZWQ6ITB9fSksdGhpcy5kZXRhY2hQYWdlc0Zyb21XaW5kb3c9b3IsdGhpcy5nZXRBbGxBdHRhY2hlZFBhZ2VzPUtuLHRoaXMuZ2V0UGFnZXNGb3JXaW5kb3c9aXIsdGhpcy5nZXRQYWdlRm9yV2luZG93PWxyLHRoaXMubWFya1Vuc2F2ZWRQYWdlc0FzU2F2ZWRJbnRlcm5hbD1Dcix0aGlzLmxhdW5jaEFwcD1XaSx0aGlzLnNhdmVQYWdlPXRyLHRoaXMuc2F2ZVdvcmtzcGFjZT1Qbyx0aGlzLmNyZWF0ZVNhdmVkUGFnZUludGVybmFsPVhuLHRoaXMudXBkYXRlU2F2ZWRQYWdlSW50ZXJuYWw9ZXIsdGhpcy5kZWxldGVTYXZlZFBhZ2VJbnRlcm5hbD1Rbix0aGlzLnJlb3JkZXJQYWdlc0ZvcldpbmRvdz1zcix0aGlzLmdldFVuaXF1ZVBhZ2VUaXRsZT11cix0aGlzLnVwZGF0ZVBhZ2VGb3JXaW5kb3c9cnIsdGhpcy5nZXRMYXN0Rm9jdXNlZEJyb3dzZXJXaW5kb3c9ZWEsdGhpcy5nZXRUaGVtZXM9WGksdGhpcy5pbnZva2VDdXN0b21BY3Rpb25JbnRlcm5hbD1hYSx0aGlzLnJlcXVlc3RRdWl0UGxhdGZvcm1EaWFsb2dJbnRlcm5hbD1FaSx0aGlzLmdldEN1cnJlbnRXb3Jrc3BhY2U9TG8sdGhpcy5zZXRBY3RpdmVXb3Jrc3BhY2U9T28sdGhpcy5nZXRMYW5ndWFnZVJlc291cmNlc0ludGVybmFsPXpvLHRoaXMub3Blbkdsb2JhbENvbnRleHRNZW51SW50ZXJuYWw9dGhpcy5vcGVuR2xvYmFsQ29udGV4dE1lbnVJbnRlcm5hbC5iaW5kKHRoaXMpLHRoaXMub3Blbkdsb2JhbENvbnRleHRNZW51PXRoaXMub3Blbkdsb2JhbENvbnRleHRNZW51LmJpbmQodGhpcyksdGhpcy5nZXRTYXZlZFBhZ2VzPXRoaXMuZ2V0U2F2ZWRQYWdlcy5iaW5kKHRoaXMpLHRoaXMuZ2V0U2F2ZWRQYWdlPXRoaXMuZ2V0U2F2ZWRQYWdlLmJpbmQodGhpcyksdGhpcy5jcmVhdGVTYXZlZFBhZ2U9dGhpcy5jcmVhdGVTYXZlZFBhZ2UuYmluZCh0aGlzKSx0aGlzLnVwZGF0ZVNhdmVkUGFnZT10aGlzLnVwZGF0ZVNhdmVkUGFnZS5iaW5kKHRoaXMpLHRoaXMuZGVsZXRlU2F2ZWRQYWdlPXRoaXMuZGVsZXRlU2F2ZWRQYWdlLmJpbmQodGhpcyksdGhpcy5oYW5kbGVQYWdlQ2hhbmdlcz10aGlzLmhhbmRsZVBhZ2VDaGFuZ2VzLmJpbmQodGhpcyksdGhpcy5hdHRhY2hQYWdlc1RvV2luZG93PXRoaXMuYXR0YWNoUGFnZXNUb1dpbmRvdy5iaW5kKHRoaXMpLHRoaXMub3BlblZpZXdUYWJDb250ZXh0TWVudUludGVybmFsPXRoaXMub3BlblZpZXdUYWJDb250ZXh0TWVudUludGVybmFsLmJpbmQodGhpcyksdGhpcy5vcGVuVmlld1RhYkNvbnRleHRNZW51PXRoaXMub3BlblZpZXdUYWJDb250ZXh0TWVudS5iaW5kKHRoaXMpLHRoaXMub3BlblBhZ2VUYWJDb250ZXh0TWVudUludGVybmFsPXRoaXMub3BlblBhZ2VUYWJDb250ZXh0TWVudUludGVybmFsLmJpbmQodGhpcyksdGhpcy5vcGVuUGFnZVRhYkNvbnRleHRNZW51PXRoaXMub3BlblBhZ2VUYWJDb250ZXh0TWVudS5iaW5kKHRoaXMpLHRoaXMuZ2V0U2F2ZWRXb3Jrc3BhY2VzPXRoaXMuZ2V0U2F2ZWRXb3Jrc3BhY2VzLmJpbmQodGhpcyksdGhpcy5nZXRTYXZlZFdvcmtzcGFjZT10aGlzLmdldFNhdmVkV29ya3NwYWNlLmJpbmQodGhpcyksdGhpcy5jcmVhdGVTYXZlZFdvcmtzcGFjZT10aGlzLmNyZWF0ZVNhdmVkV29ya3NwYWNlLmJpbmQodGhpcyksdGhpcy51cGRhdGVTYXZlZFdvcmtzcGFjZT10aGlzLnVwZGF0ZVNhdmVkV29ya3NwYWNlLmJpbmQodGhpcyksdGhpcy5kZWxldGVTYXZlZFdvcmtzcGFjZT10aGlzLmRlbGV0ZVNhdmVkV29ya3NwYWNlLmJpbmQodGhpcyksdGhpcy5nZXRDdXJyZW50V29ya3NwYWNlPXRoaXMuZ2V0Q3VycmVudFdvcmtzcGFjZS5iaW5kKHRoaXMpLHRoaXMuZ2V0RG9ja1Byb3ZpZGVyQ29uZmlnPXRoaXMuZ2V0RG9ja1Byb3ZpZGVyQ29uZmlnLmJpbmQodGhpcyksdGhpcy5zYXZlRG9ja1Byb3ZpZGVyQ29uZmlnPXRoaXMuc2F2ZURvY2tQcm92aWRlckNvbmZpZy5iaW5kKHRoaXMpLHRoaXMuYXBwbHlXb3Jrc3BhY2U9dGhpcy5hcHBseVdvcmtzcGFjZS5iaW5kKHRoaXMpLHRoaXMuc2V0QWN0aXZlV29ya3NwYWNlPXRoaXMuc2V0QWN0aXZlV29ya3NwYWNlLmJpbmQodGhpcyksdGhpcy5vcGVuU2F2ZUJ1dHRvbkNvbnRleHRNZW51PXRoaXMub3BlblNhdmVCdXR0b25Db250ZXh0TWVudS5iaW5kKHRoaXMpLHRoaXMub3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsPXRoaXMub3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsLmJpbmQodGhpcyksdGhpcy5nZXRTZWxlY3RlZFNjaGVtZT10aGlzLmdldFNlbGVjdGVkU2NoZW1lLmJpbmQodGhpcyksdGhpcy5zZXRTZWxlY3RlZFNjaGVtZT10aGlzLnNldFNlbGVjdGVkU2NoZW1lLmJpbmQodGhpcyksdGhpcy5hbmFseXRpY3NJbnRlcm5hbD10aGlzLmFuYWx5dGljc0ludGVybmFsLmJpbmQodGhpcyksdGhpcy5oYW5kbGVBbmFseXRpY3M9dGhpcy5oYW5kbGVBbmFseXRpY3MuYmluZCh0aGlzKSx0aGlzLmdldExhbmd1YWdlPXRoaXMuZ2V0TGFuZ3VhZ2UuYmluZCh0aGlzKSx0aGlzLnNldExhbmd1YWdlPXRoaXMuc2V0TGFuZ3VhZ2UuYmluZCh0aGlzKSx0aGlzLmhhbmRsZVNhdmVNb2RhbE9uUGFnZUNsb3NlPXRoaXMuaGFuZGxlU2F2ZU1vZGFsT25QYWdlQ2xvc2UuYmluZCh0aGlzKSx0aGlzLnNob3VsZFBhZ2VDbG9zZT10aGlzLnNob3VsZFBhZ2VDbG9zZS5iaW5kKHRoaXMpLHRoaXMuc2hvdWxkV2luZG93Q2xvc2U9dGhpcy5zaG91bGRXaW5kb3dDbG9zZS5iaW5kKHRoaXMpLHRoaXMuaGFuZGxlUGFnZXNBbmRXaW5kb3dDbG9zZT10aGlzLmhhbmRsZVBhZ2VzQW5kV2luZG93Q2xvc2UuYmluZCh0aGlzKSx0aGlzLnNldEFjdGl2ZVBhZ2U9dGhpcy5zZXRBY3RpdmVQYWdlLmJpbmQodGhpcyksdGhpcy5oYW5kbGVQYWdlQ2hhbmdlcz10aGlzLmhhbmRsZVBhZ2VDaGFuZ2VzLmJpbmQodGhpcyksdGhpcy5jb3B5UGFnZT10aGlzLmNvcHlQYWdlLmJpbmQodGhpcyksdGhpcy5hZGRQYWdlPXRoaXMuYWRkUGFnZS5iaW5kKHRoaXMpLHRoaXMuYWRkRGVmYXVsdFBhZ2U9dGhpcy5hZGREZWZhdWx0UGFnZS5iaW5kKHRoaXMpLHRoaXMubWFya1Vuc2F2ZWRQYWdlc0FzU2F2ZWRJbnRlcm5hbD10aGlzLm1hcmtVbnNhdmVkUGFnZXNBc1NhdmVkSW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLnRyYWNrUmVtb3ZlZFRhYkludGVybmFsPXRoaXMudHJhY2tSZW1vdmVkVGFiSW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLnJlc3RvcmVSZW1vdmVkVGFiSW50ZXJuYWw9dGhpcy5yZXN0b3JlUmVtb3ZlZFRhYkludGVybmFsLmJpbmQodGhpcyksdGhpcy50cmFja1Zpc2l0ZWRTaXRlSW50ZXJuYWw9dGhpcy50cmFja1Zpc2l0ZWRTaXRlSW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLmdldFJlY2VudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWw9dGhpcy5nZXRSZWNlbnRseVZpc2l0ZWRTaXRlc0ludGVybmFsLmJpbmQodGhpcyksdGhpcy5nZXRGcmVxdWVudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWw9dGhpcy5nZXRGcmVxdWVudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLnNlYXJjaFNpdGVzSW50ZXJuYWw9dGhpcy5zZWFyY2hTaXRlc0ludGVybmFsLmJpbmQodGhpcyksdGhpcy5nZXRDdXJhdGVkQ29udGVudEludGVybmFsPXRoaXMuZ2V0Q3VyYXRlZENvbnRlbnRJbnRlcm5hbC5iaW5kKHRoaXMpLHRoaXMuaGFuZGxlUmVxdWVzdE5hdmlnYXRpb25JbnRlcm5hbD10aGlzLmhhbmRsZVJlcXVlc3ROYXZpZ2F0aW9uSW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLnJlZnJlc2hCb29rbWFya3NJbnRlcm5hbD10aGlzLnJlZnJlc2hCb29rbWFya3NJbnRlcm5hbC5iaW5kKHRoaXMpLHRoaXMuZ2V0Tm90aWZpY2F0aW9uc0NvbmZpZz10aGlzLmdldE5vdGlmaWNhdGlvbnNDb25maWcuYmluZCh0aGlzKX1hc3luYyBhcHBseVdvcmtzcGFjZSguLi5lKXtyZXR1cm4gU28uYXBwbHkodGhpcyxlKX1hc3luYyBnZXRTbmFwc2hvdCgpe2NvbnN0IGU9cj9hd2FpdCBZaSgoYXN5bmMoKT0+UmUoYXdhaXQgc3VwZXIuZ2V0U25hcHNob3Qodm9pZCAwLGZpbi5tZS5pZGVudGl0eSkpKSk6YXdhaXQgUmUoYXdhaXQgc3VwZXIuZ2V0U25hcHNob3Qodm9pZCAwLGZpbi5tZS5pZGVudGl0eSkpO2xldCB0PXsuLi5lLHdpbmRvd3M6ZS53aW5kb3dzLmZpbHRlcihqaSkubWFwKGplKX07cmV0dXJuIHQ9KGU9Pntjb25zdCB0PVJpKGUpO3JldHVybiB0LndpbmRvd3MuZm9yRWFjaCgoZT0+e2UubGF5b3V0JiYoZS5sYXlvdXQ9TmkoZS5sYXlvdXQpKSxlLndvcmtzcGFjZVBsYXRmb3JtPy5wYWdlcz8uZm9yRWFjaCgoZT0+e2U/LmxheW91dCYmKGUubGF5b3V0PU5pKGUubGF5b3V0KSl9KSl9KSksdH0pKHQpLHR9YXN5bmMgZ2V0Vmlld1NuYXBzaG90KGUpe2xldCB0PWF3YWl0IHN1cGVyLmdldFZpZXdTbmFwc2hvdChlKTtyZXR1cm4gdD1WaSh0KSx0fWFzeW5jIGFwcGx5U25hcHNob3Qoe3NuYXBzaG90OmUsb3B0aW9uczp0fSl7bGV0IG49ZTtcInN0cmluZ1wiPT10eXBlb2YgbiYmKG49YXdhaXQgc3VwZXIuZmV0Y2hNYW5pZmVzdCh7bWFuaWZlc3RVcmw6bn0sZmluLm1lLmlkZW50aXR5KSk7Y29uc3Qgbz1mdW5jdGlvbihlKXtmb3IoY29uc3QgdCBvZiBlLndpbmRvd3MpaWYodC53b3Jrc3BhY2VQbGF0Zm9ybT8ucGFnZXM/Lmxlbmd0aClyZXR1cm4hMDtyZXR1cm4hMX0obik7aWYoIXImJm8pdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzbmFwc2hvdCBjYW5ub3QgYmUgYXBwbGllZCBhcyB0aGUgcGxhdGZvcm0gaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aG91dCB0aGUgYnJvd3Nlci5cIik7cmV0dXJuIG49KGU9Pntjb25zdCB0PVJpKGUpO3JldHVybiB0LndpbmRvd3MuZm9yRWFjaCgoZT0+e2UubGF5b3V0PUZpKGUubGF5b3V0KSxlLndvcmtzcGFjZVBsYXRmb3JtPy5wYWdlcz8uZm9yRWFjaCgoZT0+e2UubGF5b3V0PUZpKGUubGF5b3V0KX0pKX0pKSx0fSkobiksc3VwZXIuYXBwbHlTbmFwc2hvdCh7c25hcHNob3Q6bixvcHRpb25zOnR9KX1hc3luYyBjcmVhdGVXaW5kb3codCxuKXtpZihyJiZcInRlYXJvdXRcIj09PXQucmVhc29uKXtjb25zdCBlPWF3YWl0IGZpbi5XaW5kb3cud3JhcFN5bmMobikuZ2V0T3B0aW9ucygpLHI9ZS53b3Jrc3BhY2VQbGF0Zm9ybT8ud2luZG93VHlwZTt0LnRhc2tiYXJJY29uR3JvdXA9ZS50YXNrYmFySWNvbkdyb3VwLHImJih0LndvcmtzcGFjZVBsYXRmb3JtfHw9e30sdC53b3Jrc3BhY2VQbGF0Zm9ybS53aW5kb3dUeXBlPWUud29ya3NwYWNlUGxhdGZvcm0ud2luZG93VHlwZSxyPT09eC5QbGF0Zm9ybSYmKHQudXJsPWUudXJsKSl9aWYoIXJ8fHQud29ya3NwYWNlUGxhdGZvcm0/LndpbmRvd1R5cGU9PT14LlBsYXRmb3JtKXtjb25zdCBlPWF3YWl0IHN1cGVyLmNyZWF0ZVdpbmRvdyh0LG4pO3JldHVybiBnZSh7dHlwZTpcIldpbmRvd1wiLGFjdGlvbjpcIk9wZW4gV2luZG93XCIsdmFsdWU6ZS5pZGVudGl0eS5uYW1lLGRhdGE6e3V1aWQ6ZS5pZGVudGl0eS51dWlkfX0pLGV9dmFyIG87bz17YWxsb3dlZDohMH0sZGV8fChkZT0hMCx1ZShjZS5Ccm93c2VyLG8pKSwoKGU9W10pPT57Y29uc3QgdD1lLmZpbHRlcigoZT0+ZS50eXBlIT09Yi5DdXN0b20pKSxuPW5ldyBTZXQscj1bXTtmb3IoY29uc3QgZSBvZiB0KW4uaGFzKGUudHlwZSkmJnIucHVzaChlLnR5cGUpLG4uYWRkKGUudHlwZSk7aWYoci5sZW5ndGg+MCl7Y29uc3QgZT1yLmpvaW4oXCIsIFwiKTt0aHJvdyBuZXcgRXJyb3IoYEVuY291bnRlcmVkIGEgZHVwbGljYXRlIFwiJHtlfVwiIHRvb2xiYXIgYnV0dG9uLiBObyBtb3JlIHRoYW4gb25lIGluc3RhbmNlIG9mIGEgYnV0dG9uIHR5cGUgbWF5IGJlIHByb3ZpZGVkLmApfX0pKHQud29ya3NwYWNlUGxhdGZvcm0/LnRvb2xiYXJPcHRpb25zPy5idXR0b25zKTtsZXQgYT0oZT0+XCJ3b3Jrc3BhY2VQbGF0Zm9ybVwiaW4gZT9lOigoe3dvcmtzdGFja3M6ZSxwYWdlczp0LC4uLm59KT0+KHsuLi5uLHdvcmtzcGFjZVBsYXRmb3JtOntwYWdlczp0fHxlfHxudWxsfX0pKShlKSkodCk7ZT8uZGVmYXVsdFdpbmRvd09wdGlvbnM/LmhvdGtleXMmJihhLmhvdGtleXM9ZS5kZWZhdWx0V2luZG93T3B0aW9ucy5ob3RrZXlzKSxhPWF3YWl0IFBpKGEsZSx7dGhlbWVzOlhpKCksc2VsZWN0ZWRTY2hlbWU6dGhpcy5nZXRTZWxlY3RlZFNjaGVtZSgpfSksYT1hd2FpdChhc3luYyBlPT57Y29uc3QgdD1hd2FpdCBmaW4uU3lzdGVtLmdldE1vbml0b3JJbmZvKCk7bGV0IG49dC5wcmltYXJ5TW9uaXRvcjtjb25zdCByPWUuZGVmYXVsdExlZnQsbz1lLmRlZmF1bHRUb3A7dC5ub25QcmltYXJ5TW9uaXRvcnMuZm9yRWFjaCgoZT0+e2NvbnN0e3RvcDp0LGJvdHRvbTphLGxlZnQ6aSxyaWdodDpsfT1lLmF2YWlsYWJsZVJlY3Q7cj49aSYmcjw9bCYmbz49dCYmbzw9YSYmKG49ZSl9KSk7Y29uc3QgYT1uLmF2YWlsYWJsZVJlY3QuYm90dG9tLW4uYXZhaWxhYmxlUmVjdC50b3AsaT1uLmF2YWlsYWJsZVJlY3QucmlnaHQtbi5hdmFpbGFibGVSZWN0LmxlZnQ7cmV0dXJuIGUuZGVmYXVsdEhlaWdodD1NYXRoLm1pbihlLmRlZmF1bHRIZWlnaHR8fDgwMCxhKSxlLmRlZmF1bHRXaWR0aD1NYXRoLm1pbihlLmRlZmF1bHRXaWR0aHx8ODAwLGkpLGV9KShhKTtjb25zdCBpPWF3YWl0KGU9PmFzeW5jKHQsbik9PntsZXQgcj0hMTtjb25zdCBvPWF3YWl0IGUodCxuKTtyZXR1cm4gdD8ud29ya3NwYWNlUGxhdGZvcm0/Ll9pbnRlcm5hbERlZmVyU2hvd09wdGlvbnM/LmRlZmVyU2hvd0VuYWJsZWQ/KGF3YWl0IG8uYWRkTGlzdGVuZXIoXCJzaG93LXJlcXVlc3RlZFwiLChhc3luYygpPT57aWYocilyZXR1cm47Y29uc3QgZT1hd2FpdCBvLmdldE9wdGlvbnMoKTthd2FpdCBvLnVwZGF0ZU9wdGlvbnMoe3dvcmtzcGFjZVBsYXRmb3JtOnsuLi5lLndvcmtzcGFjZVBsYXRmb3JtLF9pbnRlcm5hbERlZmVyU2hvd09wdGlvbnM6ey4uLmUud29ya3NwYWNlUGxhdGZvcm0uX2ludGVybmFsRGVmZXJTaG93T3B0aW9ucyxhdXRvU2hvdzohMH19fSkscj0hMH0pKSxvKTpvfSkoKChlLHQpPT5zdXBlci5jcmVhdGVXaW5kb3coZSx0KSkpKGEsbik7cmV0dXJuIGdlKHt0eXBlOlwiV2luZG93XCIsYWN0aW9uOlwiT3BlbiBXaW5kb3dcIix2YWx1ZTppLmlkZW50aXR5Lm5hbWUsZGF0YTp7dXVpZDppLmlkZW50aXR5LnV1aWR9fSksaX1hc3luYyBjcmVhdGVWaWV3KHQsbil7dC5vcHRzPUx0KHQub3B0cyxlPy5kZWZhdWx0Vmlld09wdGlvbnMpLGU/LmRlZmF1bHRWaWV3T3B0aW9ucz8uaG90a2V5cyYmKHQub3B0cy5ob3RrZXlzPWUuZGVmYXVsdFZpZXdPcHRpb25zLmhvdGtleXMpLHQub3B0cz1hd2FpdCBJaSh0Lm9wdHMsdGhpcy5mZXRjaE1hbmlmZXN0LG4pLHQub3B0cz1hd2FpdChhc3luYyBlPT57Y29uc3QgdD1SaShlKSxuPXQud29ya3NwYWNlUGxhdGZvcm0/LmJyb3dzZXJOYXZpZ2F0aW9uQnV0dG9ucztpZihuKXtjb25zdCBlPU9iamVjdC5rZXlzKG4pO2Zvcihjb25zdCByIG9mIGUpaWYobltyXSl7Y29uc3QgZT0oYXdhaXQgRGkoKSlbcl07dC5ob3RrZXlzP3QuaG90a2V5cy5wdXNoKC4uLmUpOnQuaG90a2V5cz1bLi4uZV19fXJldHVybiB0fSkodC5vcHRzKSx0Lm9wdHM9SGkodC5vcHRzKTtjb25zdCByPWF3YWl0IHN1cGVyLmNyZWF0ZVZpZXcodCxuKTtyZXR1cm4gWmkoci5pZGVudGl0eSx0Lm9wdHMuX2ludGVybmFsV29ya3NwYWNlRGF0YT8uYnJvd3Nlck5hdmlnYXRpb25CdXR0b25zKSxyfWFzeW5jIHJlcGxhY2VWaWV3KHQsbil7cmV0dXJuIHQub3B0cy5uZXdWaWV3PWF3YWl0IEx0KHQub3B0cy5uZXdWaWV3LGU/LmRlZmF1bHRWaWV3T3B0aW9ucyksdC5vcHRzLm5ld1ZpZXc9YXdhaXQgSWkodC5vcHRzLm5ld1ZpZXcsdGhpcy5mZXRjaE1hbmlmZXN0LG4pLHN1cGVyLnJlcGxhY2VWaWV3KHQsbil9YXN5bmMgcmVwbGFjZUxheW91dChlLHQpe3JldHVybiBhd2FpdCBsZSh0KXx8ZGVsZXRlIGUub3B0cy5sYXlvdXQ/LmRpbWVuc2lvbnMsc3VwZXIucmVwbGFjZUxheW91dChlLHQpfWFzeW5jIGdldFNhdmVkUGFnZSguLi5lKXtyZXR1cm4gTGEuYXBwbHkodGhpcyxlKX1hc3luYyBnZXRTYXZlZFBhZ2VzKC4uLmUpe3JldHVybiBfYS5hcHBseSh0aGlzLGUpfWFzeW5jIGNyZWF0ZVNhdmVkUGFnZSguLi5lKXtyZXR1cm4gUGEuYXBwbHkodGhpcyxlKX1hc3luYyBkZWxldGVTYXZlZFBhZ2UoLi4uZSl7cmV0dXJuIEVhLmFwcGx5KHRoaXMsZSl9YXN5bmMgdXBkYXRlU2F2ZWRQYWdlKC4uLmUpe3JldHVybiBqYS5hcHBseSh0aGlzLGUpfWFzeW5jIGdldFNhdmVkV29ya3NwYWNlKC4uLmUpe3JldHVybiBDaS5hcHBseSh0aGlzLGUpfWFzeW5jIGdldFNhdmVkV29ya3NwYWNlcyguLi5lKXtyZXR1cm4gbWkuYXBwbHkodGhpcyxlKX1hc3luYyBjcmVhdGVTYXZlZFdvcmtzcGFjZSguLi5lKXtyZXR1cm4gd2kuYXBwbHkodGhpcyxlKX1hc3luYyBkZWxldGVTYXZlZFdvcmtzcGFjZSguLi5lKXtyZXR1cm4gYmkuYXBwbHkodGhpcyxlKX1hc3luYyB1cGRhdGVTYXZlZFdvcmtzcGFjZSguLi5lKXtyZXR1cm4geWkuYXBwbHkodGhpcyxlKX1hc3luYyBnZXREb2NrUHJvdmlkZXJDb25maWcoLi4uZSl7cmV0dXJuIGhpLmFwcGx5KHRoaXMsZSl9YXN5bmMgc2F2ZURvY2tQcm92aWRlckNvbmZpZyguLi5lKXtyZXR1cm4gZ2kuYXBwbHkodGhpcyxlKX1hc3luYyBhdHRhY2hQYWdlc1RvV2luZG93KHQpe2NvbnN0IG49YXdhaXQga2kodC5wYWdlcyxlKTthd2FpdCBObihuKSxhd2FpdCBucih7Li4udCxwYWdlczpufSl9YXN5bmMgYWRkUGFnZShlKXtjb25zdCB0PWF3YWl0IGxlKGUuaWRlbnRpdHkpLG49YXdhaXQgS2UoZS5pZGVudGl0eSkse3BhZ2U6cixpbnNlcnRpb25JbmRleDpvfT1lO3I/LnRpdGxlfHwoci50aXRsZT1hd2FpdCBuLmRpc3BhdGNoKFdlLkdldFVuaXF1ZVBhZ2VUaXRsZSx2b2lkIDApKTtjb25zdCBhPShhd2FpdCB0aGlzLmdldEFsbEF0dGFjaGVkUGFnZXMoKSkuZmluZCgoZT0+ZS5wYWdlSWQ9PT1yLnBhZ2VJZHx8ZS50aXRsZT09PXIudGl0bGUpKTtpZihhKXtpZihhLnBhZ2VJZD09PXIucGFnZUlkKXRocm93IG5ldyBFcnJvcihgcGFnZSB3aXRoIGlkICR7ci5wYWdlSWR9IGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gYSBicm93c2VyIHdpbmRvdyAke2EucGFyZW50SWRlbnRpdHkubmFtZX1gKTtpZighdCl0aHJvdyBuZXcgRXJyb3IoYGFkZFBhZ2UgdGl0bGUgY29sbGlzaW9uLCBwYWdlIHdpdGggdGl0bGUgJHtyLnRpdGxlfSBhbHJlYWR5IGV4aXN0cywgY29uZmxpY3RpbmcgcGFnZSBpZDogJHthLnBhZ2VJZH0gd2l0aCB0aXRsZSAke2EudGl0bGV9YCl9Y29uc3QgaT17aWRlbnRpdHk6ZS5pZGVudGl0eSxwYWdlczpbey4uLnIsbXVsdGlJbnN0YW5jZVZpZXdCZWhhdmlvcjpcImR1cGxpY2F0ZVwifV0saW5zZXJ0aW9uSW5kZXg6b307YXdhaXQgdGhpcy5hdHRhY2hQYWdlc1RvV2luZG93KGkpfWFzeW5jIGFkZERlZmF1bHRQYWdlKGUpe2F3YWl0IHRoaXMuYWRkUGFnZShlKSxhd2FpdCB0aGlzLnNldEFjdGl2ZVBhZ2Uoe2lkZW50aXR5OmUuaWRlbnRpdHkscGFnZUlkOmUucGFnZS5wYWdlSWR9KX1hc3luYyBzZXRBY3RpdmVQYWdlKC4uLmUpe3JldHVybiBhci5hcHBseSh0aGlzLGUpfWFzeW5jIG9wZW5HbG9iYWxDb250ZXh0TWVudUludGVybmFsKC4uLmUpe3JldHVybiBjaS5hcHBseSh0aGlzLGUpfWFzeW5jIG9wZW5HbG9iYWxDb250ZXh0TWVudSguLi5lKXtyZXR1cm4gc2kuYXBwbHkodGhpcyxbLi4uZSxkYS5HbG9iYWxNZW51LGxpLkJvdHRvbVJpZ2h0XSl9YXN5bmMgb3BlblZpZXdUYWJDb250ZXh0TWVudUludGVybmFsKC4uLmUpe3JldHVybiB1aS5hcHBseSh0aGlzLGUpfWFzeW5jIG9wZW5WaWV3VGFiQ29udGV4dE1lbnUoLi4uZSl7cmV0dXJuIHNpLmFwcGx5KHRoaXMsWy4uLmUsZGEuQ29udGV4dE1lbnVdKX1hc3luYyBvcGVuUGFnZVRhYkNvbnRleHRNZW51SW50ZXJuYWwoLi4uZSl7cmV0dXJuIGRpLmFwcGx5KHRoaXMsZSl9YXN5bmMgb3BlblBhZ2VUYWJDb250ZXh0TWVudSguLi5lKXtyZXR1cm4gc2kuYXBwbHkodGhpcyxbLi4uZSxkYS5Db250ZXh0TWVudV0pfWFzeW5jIG9wZW5TYXZlQnV0dG9uQ29udGV4dE1lbnUoLi4uZSl7cmV0dXJuIHNpLmFwcGx5KHRoaXMsZSl9YXN5bmMgb3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsKC4uLmUpe3JldHVybiBwaS5hcHBseSh0aGlzLGUpfWdldFNlbGVjdGVkU2NoZW1lKC4uLmUpe3JldHVybiBrdC5hcHBseSh0aGlzLGUpfWFzeW5jIHNldFNlbGVjdGVkU2NoZW1lKC4uLmUpe3JldHVybiB4dC5hcHBseSh0aGlzLGUpfWFzeW5jIGhhbmRsZVBhZ2VDaGFuZ2VzKC4uLmUpe3JldHVybiB2ci5hcHBseSh0aGlzLGUpfWFzeW5jIGFuYWx5dGljc0ludGVybmFsKC4uLmUpe3JldHVybiBMci5hcHBseSh0aGlzLGUpfWFzeW5jIGhhbmRsZUFuYWx5dGljcyguLi5lKXt9YXN5bmMgaGFuZGxlU2F2ZU1vZGFsT25QYWdlQ2xvc2UoLi4uZSl7cmV0dXJuIGRyLmFwcGx5KHRoaXMsZSl9YXN5bmMgc2hvdWxkUGFnZUNsb3NlKC4uLmUpe3JldHVybiBwci5hcHBseSh0aGlzLGUpfWFzeW5jIHNob3VsZFdpbmRvd0Nsb3NlKC4uLmUpe3JldHVybiBmci5hcHBseSh0aGlzLGUpfWhhbmRsZVBhZ2VzQW5kV2luZG93Q2xvc2UoLi4uZSl7cmV0dXJuIGhyLmFwcGx5KHRoaXMsZSl9YXN5bmMgY29weVBhZ2UoLi4uZSl7cmV0dXJuIGdyLmFwcGx5KHRoaXMsZSl9YXN5bmMgZ2V0Tm90aWZpY2F0aW9uc0NvbmZpZygpe3JldHVybiB0fWFzeW5jIHNldExhbmd1YWdlKC4uLmUpe3JldHVybiBVby5hcHBseSh0aGlzLGUpfWFzeW5jIGdldExhbmd1YWdlKCl7cmV0dXJuIFdvLmFwcGx5KHRoaXMpfWFzeW5jIHRyYWNrUmVtb3ZlZFRhYkludGVybmFsKC4uLmUpe3JldHVybiBJYS5hcHBseSh0aGlzLGUpfWFzeW5jIHJlc3RvcmVSZW1vdmVkVGFiSW50ZXJuYWwoKXtjb25zdCBlPWF3YWl0KGFzeW5jKCk9Pntjb25zdCBlPWF3YWl0IGJhKFJhKTtpZihlLmxlbmd0aD4wKXtjb25zdCB0PU1hdGgubWF4KC4uLmUpLG49YXdhaXQgdmEodCxSYSk7cmV0dXJuIGF3YWl0IG1hKHQsUmEpLG59fSkoKTtpZihlPy5wYWdlKWlmKGF3YWl0IG5lKGUuaWRlbnRpdHkpKXtjb25zdCB0PU90KCkuQnJvd3Nlci53cmFwU3luYyhlLmlkZW50aXR5KTthd2FpdCB0LmFkZFBhZ2UoZS5wYWdlKSxhd2FpdCB0LnNldEFjdGl2ZVBhZ2UoZS5wYWdlLnBhZ2VJZCl9ZWxzZSBPdCgpLmNyZWF0ZVdpbmRvdyh7bmFtZTplLmlkZW50aXR5Lm5hbWUsd29ya3NwYWNlUGxhdGZvcm06e3BhZ2VzOltlLnBhZ2VdLHdpbmRvd1R5cGU6eC5Ccm93c2VyfX0pO2Vsc2UgZT8ud2luZG93JiZPdCgpLmNyZWF0ZVdpbmRvdyh7d29ya3NwYWNlUGxhdGZvcm06e3BhZ2VzOmUud2luZG93LnBhZ2VzLHdpbmRvd1R5cGU6eC5Ccm93c2VyfX0pfWFzeW5jIHRyYWNrVmlzaXRlZFNpdGVJbnRlcm5hbCguLi5lKXtyZXR1cm4gSGEuYXBwbHkodGhpcyxlKX1hc3luYyBnZXRSZWNlbnRseVZpc2l0ZWRTaXRlc0ludGVybmFsKC4uLmUpe3JldHVybiBhd2FpdCBxaS5hcHBseSh0aGlzLGUpfWFzeW5jIGdldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbCguLi5lKXtyZXR1cm4gQWEuYXBwbHkodGhpcyxlKX1hc3luYyBzZWFyY2hTaXRlc0ludGVybmFsKC4uLmUpe3JldHVybiBhd2FpdCBHaS5hcHBseSh0aGlzLGUpfWFzeW5jIGdldEN1cmF0ZWRDb250ZW50SW50ZXJuYWwoLi4uZSl7cmV0dXJuIGF3YWl0IEtpLmFwcGx5KHRoaXMsZSl9YXN5bmMgaGFuZGxlUmVxdWVzdE5hdmlnYXRpb25JbnRlcm5hbCguLi5lKXt9YXN5bmMgcmVmcmVzaEJvb2ttYXJrc0ludGVybmFsKCl7KGF3YWl0IE90KCkuQnJvd3Nlci5nZXRBbGxXaW5kb3dzKCkpLmZvckVhY2goKGFzeW5jKHtpZGVudGl0eTplfSk9PnsoYXdhaXQgUWUoZSkpLmRpc3BhdGNoKG90LlJlZnJlc2hCb29rbWFya3NJbnRlcm5hbCl9KSl9fX07ZnVuY3Rpb24gZWwoZSx0LG4pe2NvbnN0IHI9UWkoZSxuKTt0cnl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD9lPT50KHIoZSkpOkFycmF5LmlzQXJyYXkodCk/Wy4uLnQscl06ZT0+bmV3KHIoZSkpfWNhdGNoKGUpe3Rocm93IG5ldyBFcnJvcihcIldvcmtzcGFjZVBsYXRmb3JtLmluaXQgRXJyb3I6XCIsZSl9fWFzeW5jIGZ1bmN0aW9uIHRsKCl7cmEoKSxhc3luYyBmdW5jdGlvbigpe2NvbnN0IGU9ZmluLkFwcGxpY2F0aW9uLmdldEN1cnJlbnRTeW5jKCk7YXdhaXQgZS5hZGRMaXN0ZW5lcihcIndpbmRvdy1mb2N1c2VkXCIsdGEpfSgpO09vKGF3YWl0IE1vKCkpfWxldCBubDtmdW5jdGlvbiBybCh7b3ZlcnJpZGVDYWxsYmFjazplLGludGVyb3BPdmVycmlkZTp0LGJyb3dzZXI6bixub3RpZmljYXRpb25zOnIsYW5hbHl0aWNzOm8saW50ZWdyYXRpb25zOmE9W119KXtpZighRSl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgYmUgdXNlZCBvdXRzaWRlIGFuIE9wZW5GaW4gZW52LlwiKTtyZXR1cm4gbmx8fChubD0oYXN5bmMoKT0+e2NvbnN0IGk9ZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCk7dmFyIGwscztpLm9uY2UoXCJwbGF0Zm9ybS1hcGktcmVhZHlcIiwoKCk9PnRsKCkpKSxpLm9uKFwid2luZG93LXNob3ctYWxsLWRvd25sb2Fkc1wiLCgoe25hbWU6ZSx1dWlkOnR9KT0+e0JvKHtuYW1lOmUsdXVpZDp0fSl9KSksbj8udGl0bGUmJihsPW4udGl0bGUsbmk9bCksX3IobyksYXdhaXQgZmluLlBsYXRmb3JtLmluaXQoe292ZXJyaWRlQ2FsbGJhY2s6ZWwobixlfHxuPy5vdmVycmlkZUNhbGxiYWNrLHIpLGludGVyb3BPdmVycmlkZTpRbyh0fHxuPy5pbnRlcm9wT3ZlcnJpZGUsbil9KSxzPXthbGxvd2VkOiEwfSx1ZShjZS5QbGF0Zm9ybSxzKSxhd2FpdCBQcm9taXNlLmFsbChhLm1hcCgoYXN5bmMgZT0+eygoZSx0KT0+e3VlKGAke2NlLk1pY3JvZmxvd306JHtlfWAsdCxcImludGVncmF0aW9uLWZlYXR1cmVcIil9KShlLndvcmtmbG93SW50ZWdyYXRpb25OYW1lLHthbGxvd2VkOiEwLGFwaVZlcnNpb246JH0pLGF3YWl0IGUuX2luaXRpYWxpemVXb3JrZmxvd3MoKX0pKSksc2UobikmJihabj0hMCl9KSgpKSxubH1jb25zdCBvbD1hc3luYyh7dGhlbWU6ZSxjdXN0b21BY3Rpb25zOnQsbGFuZ3VhZ2U6biwuLi5yfSk9Pntjb25zdCBvPSQuc3BsaXQoXCIuXCIpLm1hcCgoZT0+cGFyc2VJbnQoZSkpKSxhPWF3YWl0KGFzeW5jIGU9PntpZigoYXdhaXQgd2UoKSkuZGlzYWJsZVJ1bnRpbWVWYWxpZGF0aW9uKXJldHVybiEwO2lmKGF3YWl0IGxlKCkpcmV0dXJuITA7Y29uc3QgdD0oYXdhaXQgZmluLlN5c3RlbS5nZXRWZXJzaW9uKCkpLnNwbGl0KFwiLlwiKS5tYXAoKGU9PnBhcnNlSW50KGUpKSksbj1lLmV2ZXJ5KCgobixyKT0+IShyPDMpfHx0W3JdPT09ZVtyXSkpO3JldHVybiBufSkobyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKGBSdW50aW1lIHZlcnNpb24gaXMgbm90IHN1cHBvcnRlZC4gICR7b1swXX0uJHtvWzFdfS4ke29bMl19LiogaXMgcmVxdWlyZWRgKTt2YXIgaTtyZXR1cm4gZSYmKCFmdW5jdGlvbihlKXtjb25zdCB0PWU9PntpZighZS5pbmNsdWRlcyhcIiNcIikmJiFlLmluY2x1ZGVzKFwicmdiXCIpJiYhZS5pbmNsdWRlcyhcImhzbFwiKSl0aHJvdyBuZXcgRXJyb3IoXCJCYWNrZ3JvdW5kIHByaW1hcnkgY29sb3IgaXMgbm90IHRoZSByaWdodCBmb3JtYXQuXCIpfTtlLmZvckVhY2goKGU9PntcInBhbGV0dGVcImluIGUmJnQoZS5wYWxldHRlLmJhY2tncm91bmRQcmltYXJ5KSxcInBhbGV0dGVzXCJpbiBlJiYodChlLnBhbGV0dGVzLmRhcmsuYmFja2dyb3VuZFByaW1hcnkpLHQoZS5wYWxldHRlcy5saWdodC5iYWNrZ3JvdW5kUHJpbWFyeSkpfSkpLEppPWV9KGUpLGk9e2FsbG93ZWQ6ITB9LHVlKGNlLlRoZW1pbmcsaSkpLHQmJihvYT10KSxhd2FpdCBHbyhuPy5pbml0aWFsTGFuZ3VhZ2UpLHJsKHIpfX0pKCksbW9kdWxlLmV4cG9ydHM9cn0pKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIvKiEgRm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSBpbmRleC5qcy5MSUNFTlNFLnR4dCAqL1xuKCgpPT57dmFyIGU9ezUzMDQ6KGUsdCxuKT0+e3ZhciByPXs4NTk0OihlLHQsbik9PntuLmQodCx7WjooKT0+b30pO3ZhciByPS9eKChjaGlsZHJlbnxkYW5nZXJvdXNseVNldElubmVySFRNTHxrZXl8cmVmfGF1dG9Gb2N1c3xkZWZhdWx0VmFsdWV8ZGVmYXVsdENoZWNrZWR8aW5uZXJIVE1MfHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ3xzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmd8dmFsdWVMaW5rfGFjY2VwdHxhY2NlcHRDaGFyc2V0fGFjY2Vzc0tleXxhY3Rpb258YWxsb3d8YWxsb3dVc2VyTWVkaWF8YWxsb3dQYXltZW50UmVxdWVzdHxhbGxvd0Z1bGxTY3JlZW58YWxsb3dUcmFuc3BhcmVuY3l8YWx0fGFzeW5jfGF1dG9Db21wbGV0ZXxhdXRvUGxheXxjYXB0dXJlfGNlbGxQYWRkaW5nfGNlbGxTcGFjaW5nfGNoYWxsZW5nZXxjaGFyU2V0fGNoZWNrZWR8Y2l0ZXxjbGFzc0lEfGNsYXNzTmFtZXxjb2xzfGNvbFNwYW58Y29udGVudHxjb250ZW50RWRpdGFibGV8Y29udGV4dE1lbnV8Y29udHJvbHN8Y29udHJvbHNMaXN0fGNvb3Jkc3xjcm9zc09yaWdpbnxkYXRhfGRhdGVUaW1lfGRlY29kaW5nfGRlZmF1bHR8ZGVmZXJ8ZGlyfGRpc2FibGVkfGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlfGRvd25sb2FkfGRyYWdnYWJsZXxlbmNUeXBlfGZvcm18Zm9ybUFjdGlvbnxmb3JtRW5jVHlwZXxmb3JtTWV0aG9kfGZvcm1Ob1ZhbGlkYXRlfGZvcm1UYXJnZXR8ZnJhbWVCb3JkZXJ8aGVhZGVyc3xoZWlnaHR8aGlkZGVufGhpZ2h8aHJlZnxocmVmTGFuZ3xodG1sRm9yfGh0dHBFcXVpdnxpZHxpbnB1dE1vZGV8aW50ZWdyaXR5fGlzfGtleVBhcmFtc3xrZXlUeXBlfGtpbmR8bGFiZWx8bGFuZ3xsaXN0fGxvYWRpbmd8bG9vcHxsb3d8bWFyZ2luSGVpZ2h0fG1hcmdpbldpZHRofG1heHxtYXhMZW5ndGh8bWVkaWF8bWVkaWFHcm91cHxtZXRob2R8bWlufG1pbkxlbmd0aHxtdWx0aXBsZXxtdXRlZHxuYW1lfG5vbmNlfG5vVmFsaWRhdGV8b3BlbnxvcHRpbXVtfHBhdHRlcm58cGxhY2Vob2xkZXJ8cGxheXNJbmxpbmV8cG9zdGVyfHByZWxvYWR8cHJvZmlsZXxyYWRpb0dyb3VwfHJlYWRPbmx5fHJlZmVycmVyUG9saWN5fHJlbHxyZXF1aXJlZHxyZXZlcnNlZHxyb2xlfHJvd3N8cm93U3BhbnxzYW5kYm94fHNjb3BlfHNjb3BlZHxzY3JvbGxpbmd8c2VhbWxlc3N8c2VsZWN0ZWR8c2hhcGV8c2l6ZXxzaXplc3xzbG90fHNwYW58c3BlbGxDaGVja3xzcmN8c3JjRG9jfHNyY0xhbmd8c3JjU2V0fHN0YXJ0fHN0ZXB8c3R5bGV8c3VtbWFyeXx0YWJJbmRleHx0YXJnZXR8dGl0bGV8dHlwZXx1c2VNYXB8dmFsdWV8d2lkdGh8d21vZGV8d3JhcHxhYm91dHxkYXRhdHlwZXxpbmxpc3R8cHJlZml4fHByb3BlcnR5fHJlc291cmNlfHR5cGVvZnx2b2NhYnxhdXRvQ2FwaXRhbGl6ZXxhdXRvQ29ycmVjdHxhdXRvU2F2ZXxjb2xvcnxpbmVydHxpdGVtUHJvcHxpdGVtU2NvcGV8aXRlbVR5cGV8aXRlbUlEfGl0ZW1SZWZ8b258cmVzdWx0c3xzZWN1cml0eXx1bnNlbGVjdGFibGV8YWNjZW50SGVpZ2h0fGFjY3VtdWxhdGV8YWRkaXRpdmV8YWxpZ25tZW50QmFzZWxpbmV8YWxsb3dSZW9yZGVyfGFscGhhYmV0aWN8YW1wbGl0dWRlfGFyYWJpY0Zvcm18YXNjZW50fGF0dHJpYnV0ZU5hbWV8YXR0cmlidXRlVHlwZXxhdXRvUmV2ZXJzZXxhemltdXRofGJhc2VGcmVxdWVuY3l8YmFzZWxpbmVTaGlmdHxiYXNlUHJvZmlsZXxiYm94fGJlZ2lufGJpYXN8Ynl8Y2FsY01vZGV8Y2FwSGVpZ2h0fGNsaXB8Y2xpcFBhdGhVbml0c3xjbGlwUGF0aHxjbGlwUnVsZXxjb2xvckludGVycG9sYXRpb258Y29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc3xjb2xvclByb2ZpbGV8Y29sb3JSZW5kZXJpbmd8Y29udGVudFNjcmlwdFR5cGV8Y29udGVudFN0eWxlVHlwZXxjdXJzb3J8Y3h8Y3l8ZHxkZWNlbGVyYXRlfGRlc2NlbnR8ZGlmZnVzZUNvbnN0YW50fGRpcmVjdGlvbnxkaXNwbGF5fGRpdmlzb3J8ZG9taW5hbnRCYXNlbGluZXxkdXJ8ZHh8ZHl8ZWRnZU1vZGV8ZWxldmF0aW9ufGVuYWJsZUJhY2tncm91bmR8ZW5kfGV4cG9uZW50fGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWR8ZmlsbHxmaWxsT3BhY2l0eXxmaWxsUnVsZXxmaWx0ZXJ8ZmlsdGVyUmVzfGZpbHRlclVuaXRzfGZsb29kQ29sb3J8Zmxvb2RPcGFjaXR5fGZvY3VzYWJsZXxmb250RmFtaWx5fGZvbnRTaXplfGZvbnRTaXplQWRqdXN0fGZvbnRTdHJldGNofGZvbnRTdHlsZXxmb250VmFyaWFudHxmb250V2VpZ2h0fGZvcm1hdHxmcm9tfGZyfGZ4fGZ5fGcxfGcyfGdseXBoTmFtZXxnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbHxnbHlwaE9yaWVudGF0aW9uVmVydGljYWx8Z2x5cGhSZWZ8Z3JhZGllbnRUcmFuc2Zvcm18Z3JhZGllbnRVbml0c3xoYW5naW5nfGhvcml6QWR2WHxob3Jpek9yaWdpblh8aWRlb2dyYXBoaWN8aW1hZ2VSZW5kZXJpbmd8aW58aW4yfGludGVyY2VwdHxrfGsxfGsyfGszfGs0fGtlcm5lbE1hdHJpeHxrZXJuZWxVbml0TGVuZ3RofGtlcm5pbmd8a2V5UG9pbnRzfGtleVNwbGluZXN8a2V5VGltZXN8bGVuZ3RoQWRqdXN0fGxldHRlclNwYWNpbmd8bGlnaHRpbmdDb2xvcnxsaW1pdGluZ0NvbmVBbmdsZXxsb2NhbHxtYXJrZXJFbmR8bWFya2VyTWlkfG1hcmtlclN0YXJ0fG1hcmtlckhlaWdodHxtYXJrZXJVbml0c3xtYXJrZXJXaWR0aHxtYXNrfG1hc2tDb250ZW50VW5pdHN8bWFza1VuaXRzfG1hdGhlbWF0aWNhbHxtb2RlfG51bU9jdGF2ZXN8b2Zmc2V0fG9wYWNpdHl8b3BlcmF0b3J8b3JkZXJ8b3JpZW50fG9yaWVudGF0aW9ufG9yaWdpbnxvdmVyZmxvd3xvdmVybGluZVBvc2l0aW9ufG92ZXJsaW5lVGhpY2tuZXNzfHBhbm9zZTF8cGFpbnRPcmRlcnxwYXRoTGVuZ3RofHBhdHRlcm5Db250ZW50VW5pdHN8cGF0dGVyblRyYW5zZm9ybXxwYXR0ZXJuVW5pdHN8cG9pbnRlckV2ZW50c3xwb2ludHN8cG9pbnRzQXRYfHBvaW50c0F0WXxwb2ludHNBdFp8cHJlc2VydmVBbHBoYXxwcmVzZXJ2ZUFzcGVjdFJhdGlvfHByaW1pdGl2ZVVuaXRzfHJ8cmFkaXVzfHJlZlh8cmVmWXxyZW5kZXJpbmdJbnRlbnR8cmVwZWF0Q291bnR8cmVwZWF0RHVyfHJlcXVpcmVkRXh0ZW5zaW9uc3xyZXF1aXJlZEZlYXR1cmVzfHJlc3RhcnR8cmVzdWx0fHJvdGF0ZXxyeHxyeXxzY2FsZXxzZWVkfHNoYXBlUmVuZGVyaW5nfHNsb3BlfHNwYWNpbmd8c3BlY3VsYXJDb25zdGFudHxzcGVjdWxhckV4cG9uZW50fHNwZWVkfHNwcmVhZE1ldGhvZHxzdGFydE9mZnNldHxzdGREZXZpYXRpb258c3RlbWh8c3RlbXZ8c3RpdGNoVGlsZXN8c3RvcENvbG9yfHN0b3BPcGFjaXR5fHN0cmlrZXRocm91Z2hQb3NpdGlvbnxzdHJpa2V0aHJvdWdoVGhpY2tuZXNzfHN0cmluZ3xzdHJva2V8c3Ryb2tlRGFzaGFycmF5fHN0cm9rZURhc2hvZmZzZXR8c3Ryb2tlTGluZWNhcHxzdHJva2VMaW5lam9pbnxzdHJva2VNaXRlcmxpbWl0fHN0cm9rZU9wYWNpdHl8c3Ryb2tlV2lkdGh8c3VyZmFjZVNjYWxlfHN5c3RlbUxhbmd1YWdlfHRhYmxlVmFsdWVzfHRhcmdldFh8dGFyZ2V0WXx0ZXh0QW5jaG9yfHRleHREZWNvcmF0aW9ufHRleHRSZW5kZXJpbmd8dGV4dExlbmd0aHx0b3x0cmFuc2Zvcm18dTF8dTJ8dW5kZXJsaW5lUG9zaXRpb258dW5kZXJsaW5lVGhpY2tuZXNzfHVuaWNvZGV8dW5pY29kZUJpZGl8dW5pY29kZVJhbmdlfHVuaXRzUGVyRW18dkFscGhhYmV0aWN8dkhhbmdpbmd8dklkZW9ncmFwaGljfHZNYXRoZW1hdGljYWx8dmFsdWVzfHZlY3RvckVmZmVjdHx2ZXJzaW9ufHZlcnRBZHZZfHZlcnRPcmlnaW5YfHZlcnRPcmlnaW5ZfHZpZXdCb3h8dmlld1RhcmdldHx2aXNpYmlsaXR5fHdpZHRoc3x3b3JkU3BhY2luZ3x3cml0aW5nTW9kZXx4fHhIZWlnaHR8eDF8eDJ8eENoYW5uZWxTZWxlY3Rvcnx4bGlua0FjdHVhdGV8eGxpbmtBcmNyb2xlfHhsaW5rSHJlZnx4bGlua1JvbGV8eGxpbmtTaG93fHhsaW5rVGl0bGV8eGxpbmtUeXBlfHhtbEJhc2V8eG1sbnN8eG1sbnNYbGlua3x4bWxMYW5nfHhtbFNwYWNlfHl8eTF8eTJ8eUNoYW5uZWxTZWxlY3Rvcnx6fHpvb21BbmRQYW58Zm9yfGNsYXNzfGF1dG9mb2N1cyl8KChbRGRdW0FhXVtUdF1bQWFdfFtBYV1bUnJdW0lpXVtBYV18eCktLiopKSQvO2NvbnN0IG89KGk9e30sZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWlbZV0mJihpW2VdPSh0PWUsci50ZXN0KHQpfHwxMTE9PT10LmNoYXJDb2RlQXQoMCkmJjExMD09PXQuY2hhckNvZGVBdCgxKSYmdC5jaGFyQ29kZUF0KDIpPDkxKSksaVtlXTt2YXIgdH0pO3ZhciBpfSwxNTIxOihlLHQsbik9PntuLnIodCksbi5kKHQse0FjdGl2aXR5TG9nSWNvbjooKT0+aSxBbGlnbkJhc2VsaW5lSWNvbjooKT0+YSxBbGlnbkJvdHRvbUljb246KCk9PmwsQWxpZ25DZW50ZXJIb3Jpem9udGFsbHlJY29uOigpPT5zLEFsaWduQ2VudGVyVmVydGljYWxseUljb246KCk9PmMsQWxpZ25MZWZ0SWNvbjooKT0+dSxBbGlnblJpZ2h0SWNvbjooKT0+ZixBbGlnblRvcEljb246KCk9PmQsQWxsU2lkZXNJY29uOigpPT5wLEFuZ2xlSWNvbjooKT0+aCxBcmNoaXZlSWNvbjooKT0+ZyxBcnJvd0JvdHRvbUxlZnRJY29uOigpPT52LEFycm93Qm90dG9tUmlnaHRJY29uOigpPT5tLEFycm93RG93bkljb246KCk9PkMsQXJyb3dMZWZ0SWNvbjooKT0+eSxBcnJvd1JpZ2h0SWNvbjooKT0+dyxBcnJvd1RvcExlZnRJY29uOigpPT5iLEFycm93VG9wUmlnaHRJY29uOigpPT54LEFycm93VXBJY29uOigpPT5fLEFzcGVjdFJhdGlvSWNvbjooKT0+TyxBdmF0YXJJY29uOigpPT5MLEJhY2twYWNrSWNvbjooKT0+RSxCYWRnZUljb246KCk9PlMsQmFyQ2hhcnRJY29uOigpPT5qLEJlbGxJY29uOigpPT5NLEJsZW5kaW5nTW9kZUljb246KCk9PmssQm9va21hcmtJY29uOigpPT5SLEJvcmRlckFsbEljb246KCk9PlAsQm9yZGVyQm90dG9tSWNvbjooKT0+SSxCb3JkZXJEYXNoZWRJY29uOigpPT5BLEJvcmRlckRvdHRlZEljb246KCk9PlQsQm9yZGVyTGVmdEljb246KCk9PkgsQm9yZGVyTm9uZUljb246KCk9PkIsQm9yZGVyUmlnaHRJY29uOigpPT5WLEJvcmRlclNvbGlkSWNvbjooKT0+RCxCb3JkZXJTcGxpdEljb246KCk9PlosQm9yZGVyU3R5bGVJY29uOigpPT4kLEJvcmRlclRvcEljb246KCk9Pk4sQm94SWNvbjooKT0+RixCb3hNb2RlbEljb246KCk9PlUsQnV0dG9uSWNvbjooKT0+VyxDYWxlbmRhckljb246KCk9PnosQ2FtZXJhSWNvbjooKT0+RyxDYXJkU3RhY2tJY29uOigpPT5xLENhcmRTdGFja01pbnVzSWNvbjooKT0+WSxDYXJkU3RhY2tQbHVzSWNvbjooKT0+SyxDYXJldERvd25JY29uOigpPT5YLENhcmV0TGVmdEljb246KCk9PkosQ2FyZXRSaWdodEljb246KCk9PlEsQ2FyZXRTb3J0SWNvbjooKT0+ZWUsQ2FyZXRVcEljb246KCk9PnRlLENoYXRCdWJibGVJY29uOigpPT5uZSxDaGVja0NpcmNsZWRJY29uOigpPT5vZSxDaGVja0ljb246KCk9PnJlLENoZWNrYm94SWNvbjooKT0+aWUsQ2hldnJvbkRvd25JY29uOigpPT5hZSxDaGV2cm9uTGVmdEljb246KCk9PmxlLENoZXZyb25SaWdodEljb246KCk9PnNlLENoZXZyb25VcEljb246KCk9PmNlLENpcmNsZUJhY2tzbGFzaEljb246KCk9PmZlLENpcmNsZUljb246KCk9PnVlLENsaXBib2FyZENvcHlJY29uOigpPT5wZSxDbGlwYm9hcmRJY29uOigpPT5kZSxDbG9ja0ljb246KCk9PmhlLENvZGVJY29uOigpPT5nZSxDb2RlU2FuZGJveExvZ29JY29uOigpPT52ZSxDb2x1bW5TcGFjaW5nSWNvbjooKT0+bWUsQ29sdW1uc0ljb246KCk9PkNlLENvbW1pdEljb246KCk9PnllLENvbXBvbmVudDFJY29uOigpPT53ZSxDb21wb25lbnQySWNvbjooKT0+YmUsQ29tcG9uZW50Qm9vbGVhbkljb246KCk9PnhlLENvbXBvbmVudEluc3RhbmNlSWNvbjooKT0+X2UsQ29tcG9uZW50Tm9uZUljb246KCk9Pk9lLENvbXBvbmVudFBsYWNlaG9sZGVySWNvbjooKT0+TGUsQ29udGFpbmVySWNvbjooKT0+RWUsQ29va2llSWNvbjooKT0+U2UsQ29weUljb246KCk9PmplLENvcm5lckJvdHRvbUxlZnRJY29uOigpPT5NZSxDb3JuZXJCb3R0b21SaWdodEljb246KCk9PmtlLENvcm5lclRvcExlZnRJY29uOigpPT5SZSxDb3JuZXJUb3BSaWdodEljb246KCk9PlBlLENvcm5lcnNJY29uOigpPT5JZSxDb3VudGRvd25UaW1lckljb246KCk9PkFlLENvdW50ZXJDbG9ja3dpc2VDbG9ja0ljb246KCk9PlRlLENyb3BJY29uOigpPT5IZSxDcm9zczFJY29uOigpPT5CZSxDcm9zczJJY29uOigpPT5WZSxDcm9zc0NpcmNsZWRJY29uOigpPT5EZSxDcm9zc2hhaXIxSWNvbjooKT0+WmUsQ3Jvc3NoYWlyMkljb246KCk9PiRlLENydW1wbGVkUGFwZXJJY29uOigpPT5OZSxDdWJlSWNvbjooKT0+RmUsQ3Vyc29yQXJyb3dJY29uOigpPT5VZSxDdXJzb3JUZXh0SWNvbjooKT0+V2UsRGFzaEljb246KCk9PnplLERhc2hib2FyZEljb246KCk9PkdlLERpbWVuc2lvbnNJY29uOigpPT5xZSxEaXNjSWNvbjooKT0+WWUsRGl2aWRlckhvcml6b250YWxJY29uOigpPT5LZSxEaXZpZGVyVmVydGljYWxJY29uOigpPT5YZSxEb3RGaWxsZWRJY29uOigpPT5RZSxEb3RJY29uOigpPT5KZSxEb3RzSG9yaXpvbnRhbEljb246KCk9PmV0LERvdHNWZXJ0aWNhbEljb246KCk9PnR0LERvdWJsZUFycm93RG93bkljb246KCk9Pm50LERvdWJsZUFycm93TGVmdEljb246KCk9PnJ0LERvdWJsZUFycm93UmlnaHRJY29uOigpPT5vdCxEb3VibGVBcnJvd1VwSWNvbjooKT0+aXQsRG93bmxvYWRJY29uOigpPT5hdCxEcmFnSGFuZGxlRG90czFJY29uOigpPT5sdCxEcmFnSGFuZGxlRG90czJJY29uOigpPT5zdCxEcmFnSGFuZGxlSG9yaXpvbnRhbEljb246KCk9PmN0LERyYWdIYW5kbGVWZXJ0aWNhbEljb246KCk9PnV0LERyYXdpbmdQaW5GaWxsZWRJY29uOigpPT5kdCxEcmF3aW5nUGluSWNvbjooKT0+ZnQsRHJvcGRvd25NZW51SWNvbjooKT0+cHQsRW50ZXJGdWxsU2NyZWVuSWNvbjooKT0+Z3QsRW50ZXJJY29uOigpPT5odCxFbnZlbG9wZUNsb3NlZEljb246KCk9PnZ0LEVudmVsb3BlT3Blbkljb246KCk9Pm10LEV4Y2xhbWF0aW9uVHJpYW5nbGVJY29uOigpPT5DdCxFeGl0RnVsbFNjcmVlbkljb246KCk9Pnd0LEV4aXRJY29uOigpPT55dCxFeHRlcm5hbExpbmtJY29uOigpPT5idCxFeWVDbG9zZWRJY29uOigpPT54dCxFeWVOb25lSWNvbjooKT0+X3QsRXllT3Blbkljb246KCk9Pk90LEZhY2VJY29uOigpPT5MdCxGaWdtYUxvZ29JY29uOigpPT5FdCxGaWxlSWNvbjooKT0+U3QsRmlsZU1pbnVzSWNvbjooKT0+anQsRmlsZVBsdXNJY29uOigpPT5NdCxGaWxlVGV4dEljb246KCk9Pmt0LEZvbnRCb2xkSWNvbjooKT0+UnQsRm9udEZhbWlseUljb246KCk9PlB0LEZvbnRJdGFsaWNJY29uOigpPT5JdCxGb250Um9tYW5JY29uOigpPT5BdCxGb250U2l6ZUljb246KCk9PlR0LEZvbnRTdHlsZUljb246KCk9Pkh0LEZyYW1lSWNvbjooKT0+QnQsRnJhbWVyTG9nb0ljb246KCk9PlZ0LEdlYXJJY29uOigpPT5EdCxHaXRIdWJMb2dvSWNvbjooKT0+WnQsR2xvYmVJY29uOigpPT4kdCxHcmlkSWNvbjooKT0+TnQsR3JvdXBJY29uOigpPT5GdCxIYWxmMUljb246KCk9PlV0LEhhbGYySWNvbjooKT0+V3QsSGFtYnVyZ2VyTWVudUljb246KCk9Pnp0LEhhbmRJY29uOigpPT5HdCxIZWFkaW5nSWNvbjooKT0+cXQsSGVpZ2h0SWNvbjooKT0+WXQsSG9tZUljb246KCk9Pkt0LEljb25KYXJMb2dvSWNvbjooKT0+WHQsSWRDYXJkSWNvbjooKT0+SnQsSW1hZ2VJY29uOigpPT5RdCxJbmZvQ2lyY2xlZEljb246KCk9PmVuLElucHV0SWNvbjooKT0+dG4sTGFwVGltZXJJY29uOigpPT5ubixMYXllcnNJY29uOigpPT5ybixMYXlvdXRJY29uOigpPT5vbixMZXR0ZXJDYXNlQ2FwaXRhbGl6ZUljb246KCk9PmFuLExldHRlckNhc2VMb3dlcmNhc2VJY29uOigpPT5sbixMZXR0ZXJDYXNlVG9nZ2xlSWNvbjooKT0+c24sTGV0dGVyQ2FzZVVwcGVyY2FzZUljb246KCk9PmNuLExldHRlclNwYWNpbmdJY29uOigpPT51bixMaWdodG5pbmdCb2x0SWNvbjooKT0+Zm4sTGluZUhlaWdodEljb246KCk9PmRuLExpbmsxSWNvbjooKT0+cG4sTGluazJJY29uOigpPT5obixMaW5rQnJlYWsxSWNvbjooKT0+Z24sTGlua0JyZWFrMkljb246KCk9PnZuLExpbmtOb25lMUljb246KCk9Pm1uLExpbmtOb25lMkljb246KCk9PkNuLExpc3RCdWxsZXRJY29uOigpPT55bixMb2NrQ2xvc2VkSWNvbjooKT0+d24sTG9ja09wZW4xSWNvbjooKT0+Ym4sTG9ja09wZW4ySWNvbjooKT0+eG4sTG9vcEljb246KCk9Pl9uLE1hZ2ljV2FuZEljb246KCk9Pk9uLE1hZ25pZnlpbmdHbGFzc0ljb246KCk9PkxuLE1hcmdpbkljb246KCk9PkVuLE1hc2tPZmZJY29uOigpPT5TbixNYXNrT25JY29uOigpPT5qbixNaW51c0NpcmNsZWRJY29uOigpPT5rbixNaW51c0ljb246KCk9Pk1uLE1peEljb246KCk9PlJuLE1peGVySG9yaXpvbnRhbEljb246KCk9PlBuLE1peGVyVmVydGljYWxJY29uOigpPT5JbixNb2R1bHpMb2dvSWNvbjooKT0+QW4sTW9vbkljb246KCk9PlRuLE1vdmVJY29uOigpPT5IbixOb3Rpb25Mb2dvSWNvbjooKT0+Qm4sT3BhY2l0eUljb246KCk9PlZuLE92ZXJsaW5lSWNvbjooKT0+RG4sUGFkZGluZ0ljb246KCk9PlpuLFBhcGVyUGxhbmVJY29uOigpPT4kbixQYXVzZUljb246KCk9Pk5uLFBlbmNpbDFJY29uOigpPT5GbixQZW5jaWwySWNvbjooKT0+VW4sUGVyc29uSWNvbjooKT0+V24sUGllQ2hhcnRJY29uOigpPT56bixQaWxjcm93SWNvbjooKT0+R24sUGluQm90dG9tSWNvbjooKT0+cW4sUGluTGVmdEljb246KCk9PlluLFBpblJpZ2h0SWNvbjooKT0+S24sUGluVG9wSWNvbjooKT0+WG4sUGxheUljb246KCk9PkpuLFBsdXNDaXJjbGVkSWNvbjooKT0+ZXIsUGx1c0ljb246KCk9PlFuLFF1ZXN0aW9uTWFya0NpcmNsZWRJY29uOigpPT5ucixRdWVzdGlvbk1hcmtJY29uOigpPT50cixRdW90ZUljb246KCk9PnJyLFJhZGlvYnV0dG9uSWNvbjooKT0+b3IsUmVhZGVySWNvbjooKT0+aXIsUmVsb2FkSWNvbjooKT0+YXIsUmVzZXRJY29uOigpPT5scixSZXN1bWVJY29uOigpPT5zcixSb2NrZXRJY29uOigpPT5jcixSb3RhdGVDb3VudGVyQ2xvY2t3aXNlSWNvbjooKT0+dXIsUm93U3BhY2luZ0ljb246KCk9PmZyLFJvd3NJY29uOigpPT5kcixSdWxlckhvcml6b250YWxJY29uOigpPT5wcixSdWxlclNxdWFyZUljb246KCk9PmhyLFNlY3Rpb25JY29uOigpPT5ncixTZXdpbmdQaW5GaWxsZWRJY29uOigpPT5tcixTZXdpbmdQaW5JY29uOigpPT52cixTaGFkb3dJY29uOigpPT5DcixTaGFkb3dJbm5lckljb246KCk9PnlyLFNoYWRvd05vbmVJY29uOigpPT53cixTaGFkb3dPdXRlckljb246KCk9PmJyLFNoYXJlMUljb246KCk9PnhyLFNoYXJlMkljb246KCk9Pl9yLFNodWZmbGVJY29uOigpPT5PcixTaXplSWNvbjooKT0+THIsU2tldGNoTG9nb0ljb246KCk9PkVyLFNsYXNoSWNvbjooKT0+U3IsU2xpZGVySWNvbjooKT0+anIsU3BhY2VCZXR3ZWVuSG9yaXpvbnRhbGx5SWNvbjooKT0+TXIsU3BhY2VCZXR3ZWVuVmVydGljYWxseUljb246KCk9PmtyLFNwYWNlRXZlbmx5SG9yaXpvbnRhbGx5SWNvbjooKT0+UnIsU3BhY2VFdmVubHlWZXJ0aWNhbGx5SWNvbjooKT0+UHIsU3BlYWtlckxvdWRJY29uOigpPT5JcixTcGVha2VyTW9kZXJhdGVJY29uOigpPT5BcixTcGVha2VyT2ZmSWNvbjooKT0+VHIsU3BlYWtlclF1aWV0SWNvbjooKT0+SHIsU3F1YXJlSWNvbjooKT0+QnIsU3RhY2tJY29uOigpPT5WcixTdGFyRmlsbGVkSWNvbjooKT0+WnIsU3Rhckljb246KCk9PkRyLFN0aXRjaGVzTG9nb0ljb246KCk9PiRyLFN0b3BJY29uOigpPT5OcixTdG9wd2F0Y2hJY29uOigpPT5GcixTdHJldGNoSG9yaXpvbnRhbGx5SWNvbjooKT0+VXIsU3RyZXRjaFZlcnRpY2FsbHlJY29uOigpPT5XcixTdHJpa2V0aHJvdWdoSWNvbjooKT0+enIsU3VuSWNvbjooKT0+R3IsU3dpdGNoSWNvbjooKT0+cXIsU3ltYm9sSWNvbjooKT0+WXIsVGFibGVJY29uOigpPT5LcixUYXJnZXRJY29uOigpPT5YcixUZXh0QWxpZ25DZW50ZXJJY29uOigpPT5RcixUZXh0QWxpZ25KdXN0aWZ5SWNvbjooKT0+ZW8sVGV4dEFsaWduTGVmdEljb246KCk9PnRvLFRleHRBbGlnblJpZ2h0SWNvbjooKT0+bm8sVGV4dEljb246KCk9PkpyLFRleHROb25lSWNvbjooKT0+cm8sVGhpY2tBcnJvd0Rvd25JY29uOigpPT5vbyxUaGlja0Fycm93TGVmdEljb246KCk9PmlvLFRoaWNrQXJyb3dSaWdodEljb246KCk9PmFvLFRoaWNrQXJyb3dVcEljb246KCk9PmxvLFRpbWVySWNvbjooKT0+c28sVG9rZW5zSWNvbjooKT0+Y28sVHJhY2tOZXh0SWNvbjooKT0+dW8sVHJhY2tQcmV2aW91c0ljb246KCk9PmZvLFRyYW5zcGFyZW5jeUdyaWRJY29uOigpPT5wbyxUcmFzaEljb246KCk9PmhvLFRyaWFuZ2xlRG93bkljb246KCk9PmdvLFRyaWFuZ2xlTGVmdEljb246KCk9PnZvLFRyaWFuZ2xlUmlnaHRJY29uOigpPT5tbyxUcmlhbmdsZVVwSWNvbjooKT0+Q28sVHdpdHRlckxvZ29JY29uOigpPT55byxVbmRlcmxpbmVJY29uOigpPT53byxVcGRhdGVJY29uOigpPT5ibyxVcGxvYWRJY29uOigpPT54byxWYWx1ZUljb246KCk9Pl9vLFZhbHVlTm9uZUljb246KCk9Pk9vLFZlcmNlbExvZ29JY29uOigpPT5MbyxWaWRlb0ljb246KCk9PkVvLFZpZXdHcmlkSWNvbjooKT0+U28sVmlld0hvcml6b250YWxJY29uOigpPT5qbyxWaWV3Tm9uZUljb246KCk9Pk1vLFZpZXdWZXJ0aWNhbEljb246KCk9PmtvLFdpZHRoSWNvbjooKT0+Um8sWm9vbUluSWNvbjooKT0+UG8sWm9vbU91dEljb246KCk9PklvfSk7dmFyIHI9big2Njg5KTtmdW5jdGlvbiBvKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30saT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfXZhciBpPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wIDEuNUMwIDEuMjIzODYgMC4yMjM4NTggMSAwLjUgMUgyLjVDMi43NzYxNCAxIDMgMS4yMjM4NiAzIDEuNUMzIDEuNzc2MTQgMi43NzYxNCAyIDIuNSAySDAuNUMwLjIyMzg1OCAyIDAgMS43NzYxNCAwIDEuNVpNNCAxLjVDNCAxLjIyMzg2IDQuMjIzODYgMSA0LjUgMUgxNC41QzE0Ljc3NjEgMSAxNSAxLjIyMzg2IDE1IDEuNUMxNSAxLjc3NjE0IDE0Ljc3NjEgMiAxNC41IDJINC41QzQuMjIzODYgMiA0IDEuNzc2MTQgNCAxLjVaTTQgNC41QzQgNC4yMjM4NiA0LjIyMzg2IDQgNC41IDRIMTEuNUMxMS43NzYxIDQgMTIgNC4yMjM4NiAxMiA0LjVDMTIgNC43NzYxNCAxMS43NzYxIDUgMTEuNSA1SDQuNUM0LjIyMzg2IDUgNCA0Ljc3NjE0IDQgNC41Wk0wIDcuNUMwIDcuMjIzODYgMC4yMjM4NTggNyAwLjUgN0gyLjVDMi43NzYxNCA3IDMgNy4yMjM4NiAzIDcuNUMzIDcuNzc2MTQgMi43NzYxNCA4IDIuNSA4SDAuNUMwLjIyMzg1OCA4IDAgNy43NzYxNCAwIDcuNVpNNCA3LjVDNCA3LjIyMzg2IDQuMjIzODYgNyA0LjUgN0gxNC41QzE0Ljc3NjEgNyAxNSA3LjIyMzg2IDE1IDcuNUMxNSA3Ljc3NjE0IDE0Ljc3NjEgOCAxNC41IDhINC41QzQuMjIzODYgOCA0IDcuNzc2MTQgNCA3LjVaTTQgMTAuNUM0IDEwLjIyMzkgNC4yMjM4NiAxMCA0LjUgMTBIMTEuNUMxMS43NzYxIDEwIDEyIDEwLjIyMzkgMTIgMTAuNUMxMiAxMC43NzYxIDExLjc3NjEgMTEgMTEuNSAxMUg0LjVDNC4yMjM4NiAxMSA0IDEwLjc3NjEgNCAxMC41Wk0wIDEzLjVDMCAxMy4yMjM5IDAuMjIzODU4IDEzIDAuNSAxM0gyLjVDMi43NzYxNCAxMyAzIDEzLjIyMzkgMyAxMy41QzMgMTMuNzc2MSAyLjc3NjE0IDE0IDIuNSAxNEgwLjVDMC4yMjM4NTggMTQgMCAxMy43NzYxIDAgMTMuNVpNNCAxMy41QzQgMTMuMjIzOSA0LjIyMzg2IDEzIDQuNSAxM0gxNC41QzE0Ljc3NjEgMTMgMTUgMTMuMjIzOSAxNSAxMy41QzE1IDEzLjc3NjEgMTQuNzc2MSAxNCAxNC41IDE0SDQuNUM0LjIyMzg2IDE0IDQgMTMuNzc2MSA0IDEzLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMC41IDEuNzUwMDNDMTAuNzEwNyAxLjc1MDAzIDEwLjg5ODggMS44ODIxNyAxMC45NzAzIDIuMDgwNDJMMTMuOTcwMyAxMC40QzE0LjA2NCAxMC42NTk4IDEzLjkyOTMgMTAuOTQ2MyAxMy42Njk2IDExLjA0QzEzLjQwOTggMTEuMTMzNiAxMy4xMjMzIDEwLjk5OSAxMy4wMjk2IDEwLjczOTJMMTIuMDQ3NyA4LjAxNjA2SDguOTUyMjdMNy45NzAzMSAxMC43MzkyQzcuODc2NjQgMTAuOTk5IDcuNTkwMTIgMTEuMTMzNiA3LjMzMDM1IDExLjA0QzcuMDcwNTggMTAuOTQ2MyA2LjkzNTkzIDEwLjY1OTggNy4wMjk2IDEwLjRMMTAuMDI5NiAyLjA4MDQyQzEwLjEwMTEgMS44ODIxNyAxMC4yODkyIDEuNzUwMDMgMTAuNSAxLjc1MDAzWk0xMC41IDMuNzI0MDJMMTEuNzQxMSA3LjE2NjA2SDkuMjU4NzdMMTAuNSAzLjcyNDAyWk0yLjQ5OTQ5IDIuMDk5OTdDMi43MjA0IDIuMDk5OTcgMi44OTk0OSAyLjI3OTA2IDIuODk5NDkgMi40OTk5N0wyLjg5OTQ5IDkuNTM0MjhMNC4yMTY2NCA4LjIxNzEzQzQuMzcyODUgOC4wNjA5MiA0LjYyNjEyIDguMDYwOTIgNC43ODIzMyA4LjIxNzEzQzQuOTM4NTQgOC4zNzMzNCA0LjkzODU0IDguNjI2NiA0Ljc4MjMzIDguNzgyODFMMi43ODIzMyAxMC43ODI4QzIuNzA3MzIgMTAuODU3OCAyLjYwNTU3IDEwLjkgMi40OTk0OSAxMC45QzIuMzkzNCAxMC45IDIuMjkxNjYgMTAuODU3OCAyLjIxNjY0IDEwLjc4MjhMMC4yMTY2NDUgOC43ODI4MUMwLjA2MDQzNDkgOC42MjY2IDAuMDYwNDM0OSA4LjM3MzM0IDAuMjE2NjQ1IDguMjE3MTNDMC4zNzI4NTQgOC4wNjA5MiAwLjYyNjEyIDguMDYwOTIgMC43ODIzMyA4LjIxNzEzTDIuMDk5NDkgOS41MzQyOEwyLjA5OTQ5IDIuNDk5OTdDMi4wOTk0OSAyLjI3OTA2IDIuMjc4NTcgMi4wOTk5NyAyLjQ5OTQ5IDIuMDk5OTdaTTAuMDk5OTY5NSAxMy41MDAxQzAuMDk5OTY5NSAxMy4yNzkxIDAuMjc5MDU2IDEzLjEwMDEgMC40OTk5NjkgMTMuMTAwMUgxNC41QzE0LjcyMDkgMTMuMTAwMSAxNC45IDEzLjI3OTEgMTQuOSAxMy41MDAxQzE0LjkgMTMuNzIxIDE0LjcyMDkgMTMuOTAwMSAxNC41IDEzLjkwMDFIMC40OTk5NjlDMC4yNzkwNTYgMTMuOTAwMSAwLjA5OTk2OTUgMTMuNzIxIDAuMDk5OTY5NSAxMy41MDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOSAzQzkgMi40NDc3MiA4LjU1MjI5IDIgOCAySDdDNi40NDc3MiAyIDYgMi40NDc3MiA2IDNMNiAxNEgxLjVDMS4yMjM4NiAxNCAxIDE0LjIyMzkgMSAxNC41QzEgMTQuNzc2MSAxLjIyMzg2IDE1IDEuNSAxNUw2IDE1SDlIMTMuNUMxMy43NzYxIDE1IDE0IDE0Ljc3NjEgMTQgMTQuNUMxNCAxNC4yMjM5IDEzLjc3NjEgMTQgMTMuNSAxNEg5VjNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljk5OTg4IDFDNi40NDc1OSAxIDUuOTk5ODggMS40NDc3MiA1Ljk5OTg4IDJWN0gxLjQ5OTg4QzEuMjIzNzQgNyAwLjk5OTg3OCA3LjIyMzg2IDAuOTk5ODc4IDcuNUMwLjk5OTg3OCA3Ljc3NjE0IDEuMjIzNzQgOCAxLjQ5OTg4IDhINS45OTk4OFYxM0M1Ljk5OTg4IDEzLjU1MjMgNi40NDc1OSAxNCA2Ljk5OTg4IDE0SDcuOTk5ODhDOC41NTIxNiAxNCA4Ljk5OTg4IDEzLjU1MjMgOC45OTk4OCAxM1Y4SDEzLjQ5OTlDMTMuNzc2IDggMTMuOTk5OSA3Ljc3NjE0IDEzLjk5OTkgNy41QzEzLjk5OTkgNy4yMjM4NiAxMy43NzYgNyAxMy40OTk5IDdIOC45OTk4OFYyQzguOTk5ODggMS40NDc3MiA4LjU1MjE2IDEgNy45OTk4OCAxTDYuOTk5ODggMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuOTk5ODggNkMxLjQ0NzU5IDYgMC45OTk4NzcgNi40NDc3MiAwLjk5OTg3NyA3TDAuOTk5ODc3IDhDMC45OTk4NzcgOC41NTIyOCAxLjQ0NzU5IDkgMS45OTk4OCA5TDYuOTk5ODggOUw2Ljk5OTg4IDEzLjVDNi45OTk4OCAxMy43NzYxIDcuMjIzNzQgMTQgNy40OTk4OCAxNEM3Ljc3NjAyIDE0IDcuOTk5ODggMTMuNzc2MSA3Ljk5OTg4IDEzLjVMNy45OTk4OCA5TDEyLjk5OTkgOUMxMy41NTIyIDkgMTMuOTk5OSA4LjU1MjI4IDEzLjk5OTkgOEwxMy45OTk5IDdDMTMuOTk5OSA2LjQ0NzcyIDEzLjU1MjIgNiAxMi45OTk5IDZMNy45OTk4OCA2TDcuOTk5ODggMS41QzcuOTk5ODggMS4yMjM4NiA3Ljc3NjAyIDEgNy40OTk4OCAxQzcuMjIzNzMgMSA2Ljk5OTg4IDEuMjIzODYgNi45OTk4OCAxLjVMNi45OTk4OCA2TDEuOTk5ODggNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuNDk5OTk1IDAuOTk5OTk1QzAuMjIzODU1IDAuOTk5OTk1IC01LjU4NDU4ZS0wNyAxLjIyMzg1IC01LjQ2Mzg4ZS0wNyAxLjQ5OTk5TC0yLjE4NTU0ZS0wOCAxMy40OTk5Qy05Ljc4NDkyZS0wOSAxMy43NzYgMC4yMjM4NTUgMTMuOTk5OSAwLjQ5OTk5NSAxMy45OTk5QzAuNzc2MTM2IDEzLjk5OTkgMC45OTk5OTEgMTMuNzc2IDAuOTk5OTkxIDEzLjQ5OTlMMC45OTk5OTEgOC45OTk5M0wxMiA4Ljk5OTkzQzEyLjU1MjMgOC45OTk5MyAxMyA4LjU1MjIyIDEzIDcuOTk5OTNMMTMgNi45OTk5NEMxMyA2LjQ0NzY2IDEyLjU1MjMgNS45OTk5NSAxMiA1Ljk5OTk1TDAuOTk5OTkxIDUuOTk5OTVMMC45OTk5OTEgMS40OTk5OUMwLjk5OTk5MSAxLjIyMzg1IDAuNzc2MTM1IDAuOTk5OTk1IDAuNDk5OTk1IDAuOTk5OTk1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQuNDk5OSAxQzE0LjIyMzcgMSAxMy45OTk5IDEuMjIzODYgMTMuOTk5OSAxLjVMMTMuOTk5OSA2TDIuOTk5ODggNkMyLjQ0NzU5IDYgMS45OTk4OCA2LjQ0NzcyIDEuOTk5ODggN0wxLjk5OTg4IDhDMS45OTk4OCA4LjU1MjI4IDIuNDQ3NTkgOSAyLjk5OTg4IDlMMTMuOTk5OSA5TDEzLjk5OTkgMTMuNUMxMy45OTk5IDEzLjc3NjEgMTQuMjIzNyAxNCAxNC40OTk5IDE0QzE0Ljc3NiAxNCAxNC45OTk5IDEzLjc3NjEgMTQuOTk5OSAxMy41TDE0Ljk5OTkgOUwxNC45OTk5IDZMMTQuOTk5OSAxLjVDMTQuOTk5OSAxLjIyMzg2IDE0Ljc3NiAxIDE0LjQ5OTkgMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSAwQzEuMjIzODYgMCAxIDAuMjIzODU4IDEgMC41QzEgMC43NzYxNDIgMS4yMjM4NiAxIDEuNSAxSDZWMTJDNiAxMi41NTIzIDYuNDQ3NzIgMTMgNyAxM0g4QzguNTUyMjggMTMgOSAxMi41NTIzIDkgMTJWMUgxMy41QzEzLjc3NjEgMSAxNCAwLjc3NjE0MiAxNCAwLjVDMTQgMC4yMjM4NTggMTMuNzc2MSAwIDEzLjUgMEg5SDZIMS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDAuNzVMOS43NSAzSDUuMjVMNy41IDAuNzVaTTcuNSAxNC4yNUw5Ljc1IDEySDUuMjVMNy41IDE0LjI1Wk0zIDUuMjVMMC43NSA3LjVMMyA5Ljc1VjUuMjVaTTE0LjI1IDcuNUwxMiA1LjI1VjkuNzVMMTQuMjUgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC44OTE0IDIuMTkzN0M5LjExNTggMi4zNTQ2NCA5LjE2NzI1IDIuNjY3MDEgOS4wMDYzMSAyLjg5MTQxTDIuNDczODggMTJIMTMuNUMxMy43NzYxIDEyIDE0IDEyLjIyMzkgMTQgMTIuNUMxNCAxMi43NzYyIDEzLjc3NjEgMTMgMTMuNSAxM0gxLjVDMS4zMTI1NCAxMyAxLjE0MDgyIDEyLjg5NTIgMS4wNTUyIDEyLjcyODRDMC45Njk1NzggMTIuNTYxNiAwLjk4NDQzOCAxMi4zNjEgMS4wOTM2OSAxMi4yMDg2TDguMTkzNjkgMi4zMDg2MkM4LjM1NDYyIDIuMDg0MjIgOC42NjcgMi4wMzI3NyA4Ljg5MTQgMi4xOTM3Wk0xMS4xIDYuNTAwMDFDMTEuMSA2LjIyMzg3IDExLjMyMzggNi4wMDAwMSAxMS42IDYuMDAwMDFDMTEuODc2MSA2LjAwMDAxIDEyLjEgNi4yMjM4NyAxMi4xIDYuNTAwMDFDMTIuMSA2Ljc3NjE1IDExLjg3NjEgNy4wMDAwMSAxMS42IDcuMDAwMDFDMTEuMzIzOCA3LjAwMDAxIDExLjEgNi43NzYxNSAxMS4xIDYuNTAwMDFaTTEwLjQgNC4wMDAwMUMxMC4xMjM5IDQuMDAwMDEgOS45MDAwMyA0LjIyMzg3IDkuOTAwMDMgNC41MDAwMUM5LjkwMDAzIDQuNzc2MTUgMTAuMTIzOSA1LjAwMDAxIDEwLjQgNS4wMDAwMUMxMC42NzYyIDUuMDAwMDEgMTAuOSA0Ljc3NjE1IDEwLjkgNC41MDAwMUMxMC45IDQuMjIzODcgMTAuNjc2MiA0LjAwMDAxIDEwLjQgNC4wMDAwMVpNMTIuMSA4LjUwMDAxQzEyLjEgOC4yMjM4NyAxMi4zMjM4IDguMDAwMDEgMTIuNiA4LjAwMDAxQzEyLjg3NjEgOC4wMDAwMSAxMy4xIDguMjIzODcgMTMuMSA4LjUwMDAxQzEzLjEgOC43NzYxNSAxMi44NzYxIDkuMDAwMDEgMTIuNiA5LjAwMDAxQzEyLjMyMzggOS4wMDAwMSAxMi4xIDguNzc2MTUgMTIuMSA4LjUwMDAxWk0xMy40IDEwQzEzLjEyMzkgMTAgMTIuOSAxMC4yMjM5IDEyLjkgMTAuNUMxMi45IDEwLjc3NjEgMTMuMTIzOSAxMSAxMy40IDExQzEzLjY3NjIgMTEgMTMuOSAxMC43NzYxIDEzLjkgMTAuNUMxMy45IDEwLjIyMzkgMTMuNjc2MiAxMCAxMy40IDEwWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4zMDkwMiAxQzIuOTMwMjUgMSAyLjU4Mzk4IDEuMjE0IDIuNDE0NTkgMS41NTI3OUwxLjA1Mjc5IDQuMjc2MzlDMS4wMTgwNyA0LjM0NTgyIDEgNC40MjIzOCAxIDQuNVYxM0MxIDEzLjU1MjMgMS40NDc3MiAxNCAyIDE0SDEzQzEzLjU1MjMgMTQgMTQgMTMuNTUyMyAxNCAxM1Y0LjVDMTQgNC40MjIzOCAxMy45ODE5IDQuMzQ1ODIgMTMuOTQ3MiA0LjI3NjM5TDEyLjU4NTQgMS41NTI4MUMxMi40MTYgMS4yMTQwMyAxMi4wNjk4IDEuMDAwMDMgMTEuNjkxIDEuMDAwMDNMNy41IDEuMDAwMDFMMy4zMDkwMiAxWk0zLjMwOTAyIDJMNyAyLjAwMDAxVjRIMi4zMDkwMkwzLjMwOTAyIDJaTTggNFYyLjAwMDAyTDExLjY5MSAyLjAwMDAzTDEyLjY5MSA0SDhaTTcuNSA1SDEzVjEzSDJWNUg3LjVaTTUuNSA3QzUuMjIzODYgNyA1IDcuMjIzODYgNSA3LjVDNSA3Ljc3NjE0IDUuMjIzODYgOCA1LjUgOEg5LjVDOS43NzYxNCA4IDEwIDcuNzc2MTQgMTAgNy41QzEwIDcuMjIzODYgOS43NzYxNCA3IDkuNSA3SDUuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTExLjM1MzYgMy42NDY0NEMxMS41NDg4IDMuODQxNyAxMS41NDg4IDQuMTU4MjggMTEuMzUzNiA0LjM1MzU0TDQuNzA3MTEgMTFMOSAxMUM5LjI3NjE0IDExIDkuNSAxMS4yMjM5IDkuNSAxMS41QzkuNSAxMS43NzYxIDkuMjc2MTQgMTIgOSAxMkwzLjUgMTJDMy4zNjczOSAxMiAzLjI0MDIxIDExLjk0NzMgMy4xNDY0NSAxMS44NTM2QzMuMDUyNjggMTEuNzU5OCAzIDExLjYzMjYgMyAxMS41TDMgNS45OTk5OUMzIDUuNzIzODUgMy4yMjM4NiA1LjQ5OTk5IDMuNSA1LjQ5OTk5QzMuNzc2MTQgNS40OTk5OSA0IDUuNzIzODUgNCA1Ljk5OTk5VjEwLjI5MjlMMTAuNjQ2NCAzLjY0NjQzQzEwLjg0MTcgMy40NTExNyAxMS4xNTgzIDMuNDUxMTcgMTEuMzUzNiAzLjY0NjQ0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy42NDY0NSAzLjY0NjQ0QzMuNDUxMTggMy44NDE3IDMuNDUxMTggNC4xNTgyOCAzLjY0NjQ1IDQuMzUzNTRMMTAuMjkyOSAxMUw2IDExQzUuNzIzODYgMTEgNS41IDExLjIyMzkgNS41IDExLjVDNS41IDExLjc3NjEgNS43MjM4NiAxMiA2IDEyTDExLjUgMTJDMTEuNjMyNiAxMiAxMS43NTk4IDExLjk0NzMgMTEuODUzNiAxMS44NTM2QzExLjk0NzMgMTEuNzU5OCAxMiAxMS42MzI2IDEyIDExLjVMMTIgNS45OTk5OUMxMiA1LjcyMzg1IDExLjc3NjEgNS40OTk5OSAxMS41IDUuNDk5OTlDMTEuMjIzOSA1LjQ5OTk5IDExIDUuNzIzODUgMTEgNS45OTk5OVYxMC4yOTI5TDQuMzUzNTUgMy42NDY0M0M0LjE1ODI5IDMuNDUxMTcgMy44NDE3MSAzLjQ1MTE3IDMuNjQ2NDUgMy42NDY0NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAyQzcuNzc2MTQgMiA4IDIuMjIzODYgOCAyLjVMOCAxMS4yOTI5TDExLjE0NjQgOC4xNDY0NUMxMS4zNDE3IDcuOTUxMTggMTEuNjU4MyA3Ljk1MTE4IDExLjg1MzYgOC4xNDY0NUMxMi4wNDg4IDguMzQxNzEgMTIuMDQ4OCA4LjY1ODI5IDExLjg1MzYgOC44NTM1NUw3Ljg1MzU1IDEyLjg1MzZDNy43NTk3OSAxMi45NDczIDcuNjMyNjEgMTMgNy41IDEzQzcuMzY3MzkgMTMgNy4yNDAyMSAxMi45NDczIDcuMTQ2NDUgMTIuODUzNkwzLjE0NjQ1IDguODUzNTVDMi45NTExOCA4LjY1ODI5IDIuOTUxMTggOC4zNDE3MSAzLjE0NjQ1IDguMTQ2NDVDMy4zNDE3MSA3Ljk1MTE4IDMuNjU4MjkgNy45NTExOCAzLjg1MzU1IDguMTQ2NDVMNyAxMS4yOTI5TDcgMi41QzcgMi4yMjM4NiA3LjIyMzg2IDIgNy41IDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljg1MzU1IDMuMTQ2NDVDNy4wNDg4MiAzLjM0MTcxIDcuMDQ4ODIgMy42NTgyOSA2Ljg1MzU1IDMuODUzNTVMMy43MDcxMSA3SDEyLjVDMTIuNzc2MSA3IDEzIDcuMjIzODYgMTMgNy41QzEzIDcuNzc2MTQgMTIuNzc2MSA4IDEyLjUgOEgzLjcwNzExTDYuODUzNTUgMTEuMTQ2NEM3LjA0ODgyIDExLjM0MTcgNy4wNDg4MiAxMS42NTgzIDYuODUzNTUgMTEuODUzNkM2LjY1ODI5IDEyLjA0ODggNi4zNDE3MSAxMi4wNDg4IDYuMTQ2NDUgMTEuODUzNkwyLjE0NjQ1IDcuODUzNTVDMS45NTExOCA3LjY1ODI5IDEuOTUxMTggNy4zNDE3MSAyLjE0NjQ1IDcuMTQ2NDVMNi4xNDY0NSAzLjE0NjQ1QzYuMzQxNzEgMi45NTExOCA2LjY1ODI5IDIuOTUxMTggNi44NTM1NSAzLjE0NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC4xNDY0NSAzLjE0NjQ1QzguMzQxNzEgMi45NTExOCA4LjY1ODI5IDIuOTUxMTggOC44NTM1NSAzLjE0NjQ1TDEyLjg1MzYgNy4xNDY0NUMxMy4wNDg4IDcuMzQxNzEgMTMuMDQ4OCA3LjY1ODI5IDEyLjg1MzYgNy44NTM1NUw4Ljg1MzU1IDExLjg1MzZDOC42NTgyOSAxMi4wNDg4IDguMzQxNzEgMTIuMDQ4OCA4LjE0NjQ1IDExLjg1MzZDNy45NTExOCAxMS42NTgzIDcuOTUxMTggMTEuMzQxNyA4LjE0NjQ1IDExLjE0NjRMMTEuMjkyOSA4SDIuNUMyLjIyMzg2IDggMiA3Ljc3NjE0IDIgNy41QzIgNy4yMjM4NiAyLjIyMzg2IDcgMi41IDdIMTEuMjkyOUw4LjE0NjQ1IDMuODUzNTVDNy45NTExOCAzLjY1ODI5IDcuOTUxMTggMy4zNDE3MSA4LjE0NjQ1IDMuMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxiPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS4zNTM2IDExLjM1MzZDMTEuNTQ4OCAxMS4xNTgzIDExLjU0ODggMTAuODQxNyAxMS4zNTM2IDEwLjY0NjVMNC43MDcxMSA0TDkgNEM5LjI3NjE0IDQgOS41IDMuNzc2MTQgOS41IDMuNUM5LjUgMy4yMjM4NiA5LjI3NjE0IDMgOSAzTDMuNSAzQzMuMzY3MzkgMyAzLjI0MDIxIDMuMDUyNjggMy4xNDY0NSAzLjE0NjQ1QzMuMDUyNjggMy4yNDAyMiAzIDMuMzY3MzkgMyAzLjVMMyA5LjAwMDAxQzMgOS4yNzYxNSAzLjIyMzg2IDkuNTAwMDEgMy41IDkuNTAwMDFDMy43NzYxNCA5LjUwMDAxIDQgOS4yNzYxNSA0IDkuMDAwMDFWNC43MDcxMUwxMC42NDY0IDExLjM1MzZDMTAuODQxNyAxMS41NDg4IDExLjE1ODMgMTEuNTQ4OCAxMS4zNTM2IDExLjM1MzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjY0NjQ1IDExLjM1MzZDMy40NTExOCAxMS4xNTgzIDMuNDUxMTggMTAuODQxNyAzLjY0NjQ1IDEwLjY0NjVMMTAuMjkyOSA0TDYgNEM1LjcyMzg2IDQgNS41IDMuNzc2MTQgNS41IDMuNUM1LjUgMy4yMjM4NiA1LjcyMzg2IDMgNiAzTDExLjUgM0MxMS42MzI2IDMgMTEuNzU5OCAzLjA1MjY4IDExLjg1MzYgMy4xNDY0NUMxMS45NDczIDMuMjQwMjIgMTIgMy4zNjczOSAxMiAzLjVMMTIgOS4wMDAwMUMxMiA5LjI3NjE1IDExLjc3NjEgOS41MDAwMSAxMS41IDkuNTAwMDFDMTEuMjIzOSA5LjUwMDAxIDExIDkuMjc2MTUgMTEgOS4wMDAwMVY0LjcwNzExTDQuMzUzNTUgMTEuMzUzNkM0LjE1ODI5IDExLjU0ODggMy44NDE3MSAxMS41NDg4IDMuNjQ2NDUgMTEuMzUzNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMTQ2NDUgMi4xNDY0NUM3LjM0MTcxIDEuOTUxMTggNy42NTgyOSAxLjk1MTE4IDcuODUzNTUgMi4xNDY0NUwxMS44NTM2IDYuMTQ2NDVDMTIuMDQ4OCA2LjM0MTcxIDEyLjA0ODggNi42NTgyOSAxMS44NTM2IDYuODUzNTVDMTEuNjU4MyA3LjA0ODgyIDExLjM0MTcgNy4wNDg4MiAxMS4xNDY0IDYuODUzNTVMOCAzLjcwNzExTDggMTIuNUM4IDEyLjc3NjEgNy43NzYxNCAxMyA3LjUgMTNDNy4yMjM4NiAxMyA3IDEyLjc3NjEgNyAxMi41TDcgMy43MDcxMUwzLjg1MzU1IDYuODUzNTVDMy42NTgyOSA3LjA0ODgyIDMuMzQxNzEgNy4wNDg4MiAzLjE0NjQ1IDYuODUzNTVDMi45NTExOCA2LjY1ODI5IDIuOTUxMTggNi4zNDE3MSAzLjE0NjQ1IDYuMTQ2NDVMNy4xNDY0NSAyLjE0NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi41IDJIMTIuNUMxMi43NzYxIDIgMTMgMi4yMjM4NiAxMyAyLjVWMTIuNUMxMyAxMi43NzYxIDEyLjc3NjEgMTMgMTIuNSAxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41VjIuNUMyIDIuMjIzODYgMi4yMjM4NiAyIDIuNSAyWk0xIDIuNUMxIDEuNjcxNTcgMS42NzE1NyAxIDIuNSAxSDEyLjVDMTMuMzI4NCAxIDE0IDEuNjcxNTcgMTQgMi41VjEyLjVDMTQgMTMuMzI4NCAxMy4zMjg0IDE0IDEyLjUgMTRIMi41QzEuNjcxNTcgMTQgMSAxMy4zMjg0IDEgMTIuNVYyLjVaTTcuNSA0QzcuNzc2MTQgNCA4IDMuNzc2MTQgOCAzLjVDOCAzLjIyMzg2IDcuNzc2MTQgMyA3LjUgM0M3LjIyMzg2IDMgNyAzLjIyMzg2IDcgMy41QzcgMy43NzYxNCA3LjIyMzg2IDQgNy41IDRaTTggNS41QzggNS43NzYxNCA3Ljc3NjE0IDYgNy41IDZDNy4yMjM4NiA2IDcgNS43NzYxNCA3IDUuNUM3IDUuMjIzODYgNy4yMjM4NiA1IDcuNSA1QzcuNzc2MTQgNSA4IDUuMjIzODYgOCA1LjVaTTcuNSA4QzcuNzc2MTQgOCA4IDcuNzc2MTQgOCA3LjVDOCA3LjIyMzg2IDcuNzc2MTQgNyA3LjUgN0M3LjIyMzg2IDcgNyA3LjIyMzg2IDcgNy41QzcgNy43NzYxNCA3LjIyMzg2IDggNy41IDhaTTEwIDcuNUMxMCA3Ljc3NjE0IDkuNzc2MTQgOCA5LjUgOEM5LjIyMzg2IDggOSA3Ljc3NjE0IDkgNy41QzkgNy4yMjM4NiA5LjIyMzg2IDcgOS41IDdDOS43NzYxNCA3IDEwIDcuMjIzODYgMTAgNy41Wk0xMS41IDhDMTEuNzc2MSA4IDEyIDcuNzc2MTQgMTIgNy41QzEyIDcuMjIzODYgMTEuNzc2MSA3IDExLjUgN0MxMS4yMjM5IDcgMTEgNy4yMjM4NiAxMSA3LjVDMTEgNy43NzYxNCAxMS4yMjM5IDggMTEuNSA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwMTQgNy40OTk4OEMwLjg3NzAxNCAzLjg0MjE5IDMuODQyMTYgMC44NzcwNDUgNy40OTk4NSAwLjg3NzA0NUMxMS4xNTc1IDAuODc3MDQ1IDE0LjEyMjcgMy44NDIxOSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyAxMS4xNTc1IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg1IDE0LjEyMjdDMy44NDIxNiAxNC4xMjI3IDAuODc3MDE0IDExLjE1NzUgMC44NzcwMTQgNy40OTk4OFpNNy40OTk4NSAxLjgyNzA0QzQuMzY2ODMgMS44MjcwNCAxLjgyNzAxIDQuMzY2ODYgMS44MjcwMSA3LjQ5OTg4QzEuODI3MDEgOC45NzE5NiAyLjM4Nzc0IDEwLjMxMzEgMy4zMDcyNyAxMS4zMjEzQzQuMTkwNzQgOS45NDExOSA1LjczODE4IDkuMDI0OTkgNy41MDAyMyA5LjAyNDk5QzkuMjYyMDYgOS4wMjQ5OSAxMC44MDkzIDkuOTQwOTcgMTEuNjkyOSAxMS4zMjA4QzEyLjYxMjEgMTAuMzEyNyAxMy4xNzI3IDguOTcxNzIgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNC4zNjY4NiAxMC42MzI4IDEuODI3MDQgNy40OTk4NSAxLjgyNzA0Wk0xMC45ODE4IDExLjk3ODdDMTAuMjgzOSAxMC43Nzk1IDguOTg1NyA5Ljk3NDk5IDcuNTAwMjMgOS45NzQ5OUM2LjAxNDU4IDkuOTc0OTkgNC43MTYyNCAxMC43Nzk3IDQuMDE4NDUgMTEuOTc5MUM0Ljk3OTUyIDEyLjcyNzIgNi4xODc2NSAxMy4xNzI3IDcuNDk5ODUgMTMuMTcyN0M4LjgxMjI3IDEzLjE3MjcgMTAuMDIwNiAxMi43MjcgMTAuOTgxOCAxMS45Nzg3Wk01LjE0OTk5IDYuNTA0ODdDNS4xNDk5OSA1LjIwNyA2LjIwMjEyIDQuMTU0ODcgNy40OTk5OSA0LjE1NDg3QzguNzk3ODYgNC4xNTQ4NyA5Ljg0OTk5IDUuMjA3IDkuODQ5OTkgNi41MDQ4N0M5Ljg0OTk5IDcuODAyNzQgOC43OTc4NiA4Ljg1NDg3IDcuNDk5OTkgOC44NTQ4N0M2LjIwMjEyIDguODU0ODcgNS4xNDk5OSA3LjgwMjc0IDUuMTQ5OTkgNi41MDQ4N1pNNy40OTk5OSA1LjEwNDg3QzYuNzI2NzkgNS4xMDQ4NyA2LjA5OTk5IDUuNzMxNjcgNi4wOTk5OSA2LjUwNDg3QzYuMDk5OTkgNy4yNzgwNyA2LjcyNjc5IDcuOTA0ODcgNy40OTk5OSA3LjkwNDg3QzguMjczMTkgNy45MDQ4NyA4Ljg5OTk5IDcuMjc4MDcgOC44OTk5OSA2LjUwNDg3QzguODk5OTkgNS43MzE2NyA4LjI3MzE5IDUuMTA0ODcgNy40OTk5OSA1LjEwNDg3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSAxQzUgMC40NDc3MTUgNS40NDc3MiAwIDYgMEg5QzkuNTUyMjggMCAxMCAwLjQ0NzcxNSAxMCAxVjJIMTRDMTQuNTUyMyAyIDE1IDIuNDQ3NzIgMTUgM1Y2QzE1IDYuODg4OCAxNC42MTMxIDcuNjg3MzQgMTQgOC4yMzYwOFYxMS41QzE0IDEyLjMyODQgMTMuMzI4NCAxMyAxMi41IDEzSDIuNUMxLjY3MTU3IDEzIDEgMTIuMzI4NCAxIDExLjVWOC4yMzU5QzAuMzg2OTcgNy42ODcyMSAwIDYuODg4ODMgMCA2VjNDMCAyLjQ0NzcyIDAuNDQ3NzE2IDIgMSAySDVWMVpNOSAxVjJINlYxSDlaTTEgM0g1SDUuNUg5LjVIMTBIMTRWNkMxNCA2LjY1NCAxMy42ODY2IDcuMjM0NjcgMTMuMTk5NyA3LjYwMDRDMTIuODY1NSA3Ljg1MTQ0IDEyLjQ1MDggOCAxMiA4SDhWNy41QzggNy4yMjM4NiA3Ljc3NjE0IDcgNy41IDdDNy4yMjM4NiA3IDcgNy4yMjM4NiA3IDcuNVY4SDNDMi41NDkzIDggMi4xMzQ2IDcuODUxMzMgMS44MDAyOSA3LjYwMDIyQzEuMzEzMzUgNy4yMzQ0NiAxIDYuNjUzOTYgMSA2VjNaTTcgOUgzQzIuNjQ5NjEgOSAyLjMxMjkyIDguOTM5NzIgMiA4LjgyOTA1VjExLjVDMiAxMS43NzYxIDIuMjIzODYgMTIgMi41IDEySDEyLjVDMTIuNzc2MSAxMiAxMyAxMS43NzYxIDEzIDExLjVWOC44MjkxNUMxMi42ODcxIDguOTM5NzggMTIuMzUwNCA5IDEyIDlIOFY5LjVDOCA5Ljc3NjE0IDcuNzc2MTQgMTAgNy41IDEwQzcuMjIzODYgMTAgNyA5Ljc3NjE0IDcgOS41VjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxTPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjUgNkgxMS41QzEyLjMyODQgNiAxMyA2LjY3MTU3IDEzIDcuNUMxMyA4LjMyODQzIDEyLjMyODQgOSAxMS41IDlIMy41QzIuNjcxNTcgOSAyIDguMzI4NDMgMiA3LjVDMiA2LjY3MTU3IDIuNjcxNTcgNiAzLjUgNlpNMSA3LjVDMSA2LjExOTI5IDIuMTE5MjkgNSAzLjUgNUgxMS41QzEyLjg4MDcgNSAxNCA2LjExOTI5IDE0IDcuNUMxNCA4Ljg4MDcxIDEyLjg4MDcgMTAgMTEuNSAxMEgzLjVDMi4xMTkyOSAxMCAxIDguODgwNzEgMSA3LjVaTTQuNSA3QzQuMjIzODYgNyA0IDcuMjIzODYgNCA3LjVDNCA3Ljc3NjE0IDQuMjIzODYgOCA0LjUgOEgxMC41QzEwLjc3NjEgOCAxMSA3Ljc3NjE0IDExIDcuNUMxMSA3LjIyMzg2IDEwLjc3NjEgNyAxMC41IDdINC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuNSAxQzExLjc3NjEgMSAxMiAxLjIyMzg2IDEyIDEuNVYxMy41QzEyIDEzLjc3NjEgMTEuNzc2MSAxNCAxMS41IDE0QzExLjIyMzkgMTQgMTEgMTMuNzc2MSAxMSAxMy41VjEuNUMxMSAxLjIyMzg2IDExLjIyMzkgMSAxMS41IDFaTTkuNSAzQzkuNzc2MTQgMyAxMCAzLjIyMzg2IDEwIDMuNVYxMy41QzEwIDEzLjc3NjEgOS43NzYxNCAxNCA5LjUgMTRDOS4yMjM4NiAxNCA5IDEzLjc3NjEgOSAxMy41VjMuNUM5IDMuMjIzODYgOS4yMjM4NiAzIDkuNSAzWk0xMy41IDNDMTMuNzc2MSAzIDE0IDMuMjIzODYgMTQgMy41VjEzLjVDMTQgMTMuNzc2MSAxMy43NzYxIDE0IDEzLjUgMTRDMTMuMjIzOSAxNCAxMyAxMy43NzYxIDEzIDEzLjVWMy41QzEzIDMuMjIzODYgMTMuMjIzOSAzIDEzLjUgM1pNNS41IDRDNS43NzYxNCA0IDYgNC4yMjM4NiA2IDQuNVYxMy41QzYgMTMuNzc2MSA1Ljc3NjE0IDE0IDUuNSAxNEM1LjIyMzg2IDE0IDUgMTMuNzc2MSA1IDEzLjVWNC41QzUgNC4yMjM4NiA1LjIyMzg2IDQgNS41IDRaTTEuNSA1QzEuNzc2MTQgNSAyIDUuMjIzODYgMiA1LjVWMTMuNUMyIDEzLjc3NjEgMS43NzYxNCAxNCAxLjUgMTRDMS4yMjM4NiAxNCAxIDEzLjc3NjEgMSAxMy41VjUuNUMxIDUuMjIzODYgMS4yMjM4NiA1IDEuNSA1Wk03LjUgNUM3Ljc3NjE0IDUgOCA1LjIyMzg2IDggNS41VjEzLjVDOCAxMy43NzYxIDcuNzc2MTQgMTQgNy41IDE0QzcuMjIzODYgMTQgNyAxMy43NzYxIDcgMTMuNVY1LjVDNyA1LjIyMzg2IDcuMjIzODYgNSA3LjUgNVpNMy41IDdDMy43NzYxNCA3IDQgNy4yMjM4NiA0IDcuNVYxMy41QzQgMTMuNzc2MSAzLjc3NjE0IDE0IDMuNSAxNEMzLjIyMzg2IDE0IDMgMTMuNzc2MSAzIDEzLjVWNy41QzMgNy4yMjM4NiAzLjIyMzg2IDcgMy41IDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxNPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04LjYwMTI0IDEuMjUwODZDOC42MDEyNCAxLjc1NDU5IDguMjYyNzggMi4xNzkyNyA3LjgwMDg3IDIuMzA5ODlDMTAuMTQ1OSAyLjQ2NDcgMTIgNC40MTU4MiAxMiA2Ljc5OTk5VjEwLjI1QzEyIDExLjA1NjMgMTIuMDMyOSAxMS43MDc0IDEyLjcyMzYgMTIuMDUyOEMxMi45MzEgMTIuMTU2NSAxMy4wMzk5IDEyLjM4OTIgMTIuOTg2NiAxMi42MTQ5QzEyLjkzMzMgMTIuODQwNiAxMi43MzE5IDEzIDEyLjUgMTNIOC4xNjE0NEM4LjM2OTA0IDEzLjE4MzIgOC40OTk5NyAxMy40NTEzIDguNDk5OTcgMTMuNzVDOC40OTk5NyAxNC4zMDIzIDguMDUyMjYgMTQuNzUgNy40OTk5NyAxNC43NUM2Ljk0NzY5IDE0Ljc1IDYuNDk5OTcgMTQuMzAyMyA2LjQ5OTk3IDEzLjc1QzYuNDk5OTcgMTMuNDUxMyA2LjYzMDkxIDEzLjE4MzIgNi44Mzg1MSAxM0gyLjQ5OTk5QzIuMjY4MSAxMyAyLjA2NjY0IDEyLjg0MDYgMi4wMTMzNiAxMi42MTQ5QzEuOTYwMDkgMTIuMzg5MiAyLjA2ODk3IDEyLjE1NjUgMi4yNzYzOCAxMi4wNTI4QzIuOTY3MDggMTEuNzA3NCAyLjk5OTk5IDExLjA1NjMgMi45OTk5OSAxMC4yNVY2Ljc5OTk5QzIuOTk5OTkgNC40MTUzNyA0Ljg1NDgxIDIuNDYzOTYgNy4yMDA0MiAyLjMwOThDNi43Mzg2NyAyLjE3OTA4IDYuNDAwMzYgMS43NTQ0OCA2LjQwMDM2IDEuMjUwODZDNi40MDAzNiAwLjY0MzEwNCA2Ljg5MzA0IDAuMTUwNDIxIDcuNTAwOCAwLjE1MDQyMUM4LjEwODU1IDAuMTUwNDIxIDguNjAxMjQgMC42NDMxMDQgOC42MDEyNCAxLjI1MDg2Wk03LjQ5OTk5IDMuMjk5OTlDNS41NjY5OSAzLjI5OTk5IDMuOTk5OTkgNC44NjY5OSAzLjk5OTk5IDYuNzk5OTlWMTAuMjVMNC4wMDAwMiAxMC4zMDA5QzQuMDAwNSAxMC43NDYzIDQuMDAxMjEgMTEuNDA4NCAzLjY5OTI5IDEySDExLjMwMDdDMTAuOTk4OCAxMS40MDg0IDEwLjk5OTUgMTAuNzQ2MyAxMSAxMC4zMDA5TDExIDEwLjI1VjYuNzk5OTlDMTEgNC44NjY5OSA5LjQzMjk5IDMuMjk5OTkgNy40OTk5OSAzLjI5OTk5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMyA5QzMgNi41IDQuNSA0LjI1IDcuNSAxLjVDMTAuNSA0LjI1IDEyIDYuNSAxMiA5QzEyIDExLjQ4NTMgOS45ODUyOCAxMy41IDcuNSAxMy41QzUuMDE0NzIgMTMuNSAzIDExLjQ4NTMgMyA5Wk0xMC45NTI0IDguMzAzMDdDOS42NzM0NyA3LjgyMTIxIDguMjg3OSA4LjQ2MjA4IDYuOTg5NTYgOS4wNjI1OUM1LjkzMjcgOS41NTE0MiA0LjkzMzY1IDEwLjAxMzUgNC4wOTY5NSA5LjgyMTUzQzQuMDMzNTcgOS41NTgwNCA0IDkuMjgyOTQgNCA5QzQgNy4xMTIwMyA1LjAyNjg2IDUuMjcxOTUgNy41IDIuODczNTdDOS42NjgzNyA0Ljk3NjM5IDEwLjcyNSA2LjY1MDA0IDEwLjk1MjQgOC4zMDMwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgMi41QzMgMi4yMjM4NiAzLjIyMzg2IDIgMy41IDJIMTEuNUMxMS43NzYxIDIgMTIgMi4yMjM4NiAxMiAyLjVWMTMuNUMxMiAxMy42ODE4IDExLjkwMTQgMTMuODQ5MiAxMS43NDI0IDEzLjkzNzNDMTEuNTgzNCAxNC4wMjU0IDExLjM4OTEgMTQuMDIwMyAxMS4yMzUgMTMuOTI0TDcuNSAxMS41ODk2TDMuNzY1IDEzLjkyNEMzLjYxMDg3IDE0LjAyMDMgMy40MTY1OSAxNC4wMjU0IDMuMjU3NjIgMTMuOTM3M0MzLjA5ODY0IDEzLjg0OTIgMyAxMy42ODE4IDMgMTMuNVYyLjVaTTQgM1YxMi41OTc5TDYuOTcgMTAuNzQxNkM3LjI5NDI3IDEwLjUzOSA3LjcwNTczIDEwLjUzOSA4LjAzIDEwLjc0MTZMMTEgMTIuNTk3OVYzSDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjI1IDFDMC4yNSAwLjU4NTc4NiAwLjU4NTc4NiAwLjI1IDEgMC4yNUgxNEMxNC40MTQyIDAuMjUgMTQuNzUgMC41ODU3ODYgMTQuNzUgMVYxNEMxNC43NSAxNC40MTQyIDE0LjQxNDIgMTQuNzUgMTQgMTQuNzVIMUMwLjU4NTc4NiAxNC43NSAwLjI1IDE0LjQxNDIgMC4yNSAxNFYxWk0xLjc1IDEuNzVWMTMuMjVIMTMuMjVWMS43NUgxLjc1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIzXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSkpfSxJPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDEzLjI1TDE0IDEzLjI1VjE0Ljc1TDEgMTQuNzVWMTMuMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIzXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIzXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiOVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiMTFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSl9LEE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAgNy41QzAgNy4yMjM4NiAwLjIyMzg1OCA3IDAuNSA3SDNDMy4yNzYxNCA3IDMuNSA3LjIyMzg2IDMuNSA3LjVDMy41IDcuNzc2MTQgMy4yNzYxNCA4IDMgOEgwLjVDMC4yMjM4NTggOCAwIDcuNzc2MTQgMCA3LjVaTTUuNzUgNy41QzUuNzUgNy4yMjM4NiA1Ljk3Mzg2IDcgNi4yNSA3SDguNzVDOS4wMjYxNCA3IDkuMjUgNy4yMjM4NiA5LjI1IDcuNUM5LjI1IDcuNzc2MTQgOS4wMjYxNCA4IDguNzUgOEg2LjI1QzUuOTczODYgOCA1Ljc1IDcuNzc2MTQgNS43NSA3LjVaTTEyIDdDMTEuNzIzOSA3IDExLjUgNy4yMjM4NiAxMS41IDcuNUMxMS41IDcuNzc2MTQgMTEuNzIzOSA4IDEyIDhIMTQuNUMxNC43NzYxIDggMTUgNy43NzYxNCAxNSA3LjVDMTUgNy4yMjM4NiAxNC43NzYxIDcgMTQuNSA3SDEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS41IDYuNjI1QzEuMDE2NzUgNi42MjUgMC42MjUgNy4wMTY3NSAwLjYyNSA3LjVDMC42MjUgNy45ODMyNSAxLjAxNjc1IDguMzc1IDEuNSA4LjM3NUMxLjk4MzI1IDguMzc1IDIuMzc1IDcuOTgzMjUgMi4zNzUgNy41QzIuMzc1IDcuMDE2NzUgMS45ODMyNSA2LjYyNSAxLjUgNi42MjVaTTUuNSA2LjYyNUM1LjAxNjc1IDYuNjI1IDQuNjI1IDcuMDE2NzUgNC42MjUgNy41QzQuNjI1IDcuOTgzMjUgNS4wMTY3NSA4LjM3NSA1LjUgOC4zNzVDNS45ODMyNSA4LjM3NSA2LjM3NSA3Ljk4MzI1IDYuMzc1IDcuNUM2LjM3NSA3LjAxNjc1IDUuOTgzMjUgNi42MjUgNS41IDYuNjI1Wk05LjUgNi42MjVDOS4wMTY3NSA2LjYyNSA4LjYyNSA3LjAxNjc1IDguNjI1IDcuNUM4LjYyNSA3Ljk4MzI1IDkuMDE2NzUgOC4zNzUgOS41IDguMzc1QzkuOTgzMjUgOC4zNzUgMTAuMzc1IDcuOTgzMjUgMTAuMzc1IDcuNUMxMC4zNzUgNy4wMTY3NSA5Ljk4MzI1IDYuNjI1IDkuNSA2LjYyNVpNMTIuNjI1IDcuNUMxMi42MjUgNy4wMTY3NSAxMy4wMTY4IDYuNjI1IDEzLjUgNi42MjVDMTMuOTgzMiA2LjYyNSAxNC4zNzUgNy4wMTY3NSAxNC4zNzUgNy41QzE0LjM3NSA3Ljk4MzI1IDEzLjk4MzIgOC4zNzUgMTMuNSA4LjM3NUMxMy4wMTY4IDguMzc1IDEyLjYyNSA3Ljk4MzI1IDEyLjYyNSA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjc1IDFMMS43NSAxNEwwLjI0OTk5OSAxNEwwLjI1IDFMMS43NSAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMFwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTAgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiMTNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxMCAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTJcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDEyIDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTIgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDggNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDE0IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiMTNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIxM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDE0IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDUpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCA1KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCAzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDkpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCA5KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCAxMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiMTFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCAxMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNlwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNiA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI2XCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNiAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNFwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNCA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI0XCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNCAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDEwIDEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxMiAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI2XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA2IDEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjRcIix5OlwiMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDQgMSlcIixmaWxsOm59KSl9LEI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI1LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjUuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjNcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjlcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjlcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjExXCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjExXCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI5LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjkuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCIxMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjUuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjkuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIxMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pKX0sVj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMjUgMUwxMy4yNSAxNEwxNC43NSAxNEwxNC43NSAxTDEzLjI1IDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA1IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA1IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMyA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMyAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCAxIDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyA1KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSA1KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyAzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSAzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyA5KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSA5KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyAxMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgMTEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA5IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA5IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMTEgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDExIDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNSAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMyAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgOSAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMTEgMSlcIixmaWxsOm59KSl9LEQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuMjUgNy41QzEuMjUgNy4yMjM4NiAxLjQ3Mzg2IDcgMS43NSA3SDEzLjI1QzEzLjUyNjEgNyAxMy43NSA3LjIyMzg2IDEzLjc1IDcuNUMxMy43NSA3Ljc3NjE0IDEzLjUyNjEgOCAxMy4yNSA4SDEuNzVDMS40NzM4NiA4IDEuMjUgNy43NzYxNCAxLjI1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFo9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI1LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjlcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiOS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjExLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSAxLjQ5OTk0QzEgMS4yMjM4IDEuMjIzODYgMC45OTk5MzkgMS41IDAuOTk5OTM5SDZWMS45OTk5NEgyVjUuOTk5OTRIMVYxLjQ5OTk0Wk0xMyAxLjk5OTk0SDlWMC45OTk5MzlIMTMuNUMxMy43NzYxIDAuOTk5OTM5IDE0IDEuMjIzOCAxNCAxLjQ5OTk0VjUuOTk5OTRIMTNWMS45OTk5NFpNMSAxMy40OTk5VjguOTk5OTRIMlYxMi45OTk5SDZWMTMuOTk5OUgxLjVDMS4yMjM4NiAxMy45OTk5IDEgMTMuNzc2MSAxIDEzLjQ5OTlaTTEzIDEyLjk5OTlWOC45OTk5NEgxNFYxMy40OTk5QzE0IDEzLjc3NjEgMTMuNzc2MSAxMy45OTk5IDEzLjUgMTMuOTk5OUg5LjVWMTIuOTk5OUgxM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LCQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSAzQzEuMjIzODYgMyAxIDMuMjIzODYgMSAzLjVDMSAzLjc3NjE0IDEuMjIzODYgNCAxLjUgNEgxMy41QzEzLjc3NjEgNCAxNCAzLjc3NjE0IDE0IDMuNUMxNCAzLjIyMzg2IDEzLjc3NjEgMyAxMy41IDNIMS41Wk0xIDcuNUMxIDcuMjIzODYgMS4yMjM4NiA3IDEuNSA3SDMuNUMzLjc3NjE0IDcgNCA3LjIyMzg2IDQgNy41QzQgNy43NzYxNCAzLjc3NjE0IDggMy41IDhIMS41QzEuMjIzODYgOCAxIDcuNzc2MTQgMSA3LjVaTTEgMTEuNUMxIDExLjIyMzkgMS4yMjM4NiAxMSAxLjUgMTFDMS43NzYxNCAxMSAyIDExLjIyMzkgMiAxMS41QzIgMTEuNzc2MSAxLjc3NjE0IDEyIDEuNSAxMkMxLjIyMzg2IDEyIDEgMTEuNzc2MSAxIDExLjVaTTMgMTEuNUMzIDExLjIyMzkgMy4yMjM4NiAxMSAzLjUgMTFDMy43NzYxNCAxMSA0IDExLjIyMzkgNCAxMS41QzQgMTEuNzc2MSAzLjc3NjE0IDEyIDMuNSAxMkMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVaTTUuNSAxMUM1LjIyMzg2IDExIDUgMTEuMjIzOSA1IDExLjVDNSAxMS43NzYxIDUuMjIzODYgMTIgNS41IDEyQzUuNzc2MTQgMTIgNiAxMS43NzYxIDYgMTEuNUM2IDExLjIyMzkgNS43NzYxNCAxMSA1LjUgMTFaTTcgMTEuNUM3IDExLjIyMzkgNy4yMjM4NiAxMSA3LjUgMTFDNy43NzYxNCAxMSA4IDExLjIyMzkgOCAxMS41QzggMTEuNzc2MSA3Ljc3NjE0IDEyIDcuNSAxMkM3LjIyMzg2IDEyIDcgMTEuNzc2MSA3IDExLjVaTTkuNSAxMUM5LjIyMzg2IDExIDkgMTEuMjIzOSA5IDExLjVDOSAxMS43NzYxIDkuMjIzODYgMTIgOS41IDEyQzkuNzc2MTQgMTIgMTAgMTEuNzc2MSAxMCAxMS41QzEwIDExLjIyMzkgOS43NzYxNCAxMSA5LjUgMTFaTTExIDExLjVDMTEgMTEuMjIzOSAxMS4yMjM5IDExIDExLjUgMTFDMTEuNzc2MSAxMSAxMiAxMS4yMjM5IDEyIDExLjVDMTIgMTEuNzc2MSAxMS43NzYxIDEyIDExLjUgMTJDMTEuMjIzOSAxMiAxMSAxMS43NzYxIDExIDExLjVaTTEzLjUgMTFDMTMuMjIzOSAxMSAxMyAxMS4yMjM5IDEzIDExLjVDMTMgMTEuNzc2MSAxMy4yMjM5IDEyIDEzLjUgMTJDMTMuNzc2MSAxMiAxNCAxMS43NzYxIDE0IDExLjVDMTQgMTEuMjIzOSAxMy43NzYxIDExIDEzLjUgMTFaTTYuNSA3QzYuMjIzODYgNyA2IDcuMjIzODYgNiA3LjVDNiA3Ljc3NjE0IDYuMjIzODYgOCA2LjUgOEg4LjVDOC43NzYxNCA4IDkgNy43NzYxNCA5IDcuNUM5IDcuMjIzODYgOC43NzYxNCA3IDguNSA3SDYuNVpNMTEgNy41QzExIDcuMjIzODYgMTEuMjIzOSA3IDExLjUgN0gxMy41QzEzLjc3NjEgNyAxNCA3LjIyMzg2IDE0IDcuNUMxNCA3Ljc3NjE0IDEzLjc3NjEgOCAxMy41IDhIMTEuNUMxMS4yMjM5IDggMTEgNy43NzYxNCAxMSA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxOPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCAxLjc1TDEgMS43NUwxIDAuMjQ5OTk5TDE0IDAuMjVMMTQgMS43NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIxMFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgOCAxMClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCIxMFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiAxMClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIxMlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgOCAxMilcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCIxMlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiAxMilcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA4IDgpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiMTRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjJcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIyXCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAyIDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMFwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxMCA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMFwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTAgMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjhcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDEyIDgpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxMiAxNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNlwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA2IDgpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjZcIix5OlwiMTRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDYgMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjRcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgNCA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI0XCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA0IDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjZcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggNilcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCI2XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAyIDYpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgOCA0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIyXCIseTpcIjRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDIgNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiMTBcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDEwKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIxMlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTQgMTIpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjhcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDgpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxNCAxNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiNlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTQgNilcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTQgNClcIixmaWxsOm59KSl9LEY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEyLjUgMkgyLjVDMi4yMjM4NiAyIDIgMi4yMjM4NiAyIDIuNVYxMi41QzIgMTIuNzc2MSAyLjIyMzg2IDEzIDIuNSAxM0gxMi41QzEyLjc3NjEgMTMgMTMgMTIuNzc2MSAxMyAxMi41VjIuNUMxMyAyLjIyMzg2IDEyLjc3NjEgMiAxMi41IDJaTTIuNSAxQzEuNjcxNTcgMSAxIDEuNjcxNTcgMSAyLjVWMTIuNUMxIDEzLjMyODQgMS42NzE1NyAxNCAyLjUgMTRIMTIuNUMxMy4zMjg0IDE0IDE0IDEzLjMyODQgMTQgMTIuNVYyLjVDMTQgMS42NzE1NyAxMy4zMjg0IDEgMTIuNSAxSDIuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuOTk5OTggMC45OTk5NzZDMS40NDc2OSAwLjk5OTk3NiAwLjk5OTk3NiAxLjQ0NzY5IDAuOTk5OTc2IDEuOTk5OThWMTNDMC45OTk5NzYgMTMuNTUyMyAxLjQ0NzY5IDE0IDEuOTk5OTggMTRIMTNDMTMuNTUyMyAxNCAxNCAxMy41NTIzIDE0IDEzVjEuOTk5OThDMTQgMS40NDc2OSAxMy41NTIzIDAuOTk5OTc2IDEzIDAuOTk5OTc2SDEuOTk5OThaTTEuOTk5OTggMS45OTk5OEwxMyAxLjk5OTk4VjEzSDEuOTk5OThWMS45OTk5OFpNNC40OTk5NiAzLjk5OTk2QzQuMjIzODIgMy45OTk5NiAzLjk5OTk2IDQuMjIzODIgMy45OTk5NiA0LjQ5OTk2VjEwLjVDMy45OTk5NiAxMC43NzYxIDQuMjIzODIgMTEgNC40OTk5NiAxMUgxMC41QzEwLjc3NjEgMTEgMTEgMTAuNzc2MSAxMSAxMC41VjQuNDk5OTZDMTEgNC4yMjM4MiAxMC43NzYxIDMuOTk5OTYgMTAuNSAzLjk5OTk2SDQuNDk5OTZaTTQuOTk5OTYgOS45OTk5NlY0Ljk5OTk2SDkuOTk5OTZWOS45OTk5Nkg0Ljk5OTk2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiA1SDEzQzEzLjU1MjMgNSAxNCA1LjQ0NzcyIDE0IDZWOUMxNCA5LjU1MjI4IDEzLjU1MjMgMTAgMTMgMTBIMkMxLjQ0NzcyIDEwIDEgOS41NTIyOCAxIDlWNkMxIDUuNDQ3NzIgMS40NDc3MiA1IDIgNVpNMCA2QzAgNC44OTU0MyAwLjg5NTQzMSA0IDIgNEgxM0MxNC4xMDQ2IDQgMTUgNC44OTU0MyAxNSA2VjlDMTUgMTAuMTA0NiAxNC4xMDQ2IDExIDEzIDExSDJDMC44OTU0MyAxMSAwIDEwLjEwNDYgMCA5VjZaTTQuNSA2Ljc1QzQuMDg1NzkgNi43NSAzLjc1IDcuMDg1NzkgMy43NSA3LjVDMy43NSA3LjkxNDIxIDQuMDg1NzkgOC4yNSA0LjUgOC4yNUM0LjkxNDIxIDguMjUgNS4yNSA3LjkxNDIxIDUuMjUgNy41QzUuMjUgNy4wODU3OSA0LjkxNDIxIDYuNzUgNC41IDYuNzVaTTYuNzUgNy41QzYuNzUgNy4wODU3OSA3LjA4NTc5IDYuNzUgNy41IDYuNzVDNy45MTQyMSA2Ljc1IDguMjUgNy4wODU3OSA4LjI1IDcuNUM4LjI1IDcuOTE0MjEgNy45MTQyMSA4LjI1IDcuNSA4LjI1QzcuMDg1NzkgOC4yNSA2Ljc1IDcuOTE0MjEgNi43NSA3LjVaTTEwLjUgNi43NUMxMC4wODU4IDYuNzUgOS43NSA3LjA4NTc5IDkuNzUgNy41QzkuNzUgNy45MTQyMSAxMC4wODU4IDguMjUgMTAuNSA4LjI1QzEwLjkxNDIgOC4yNSAxMS4yNSA3LjkxNDIxIDExLjI1IDcuNUMxMS4yNSA3LjA4NTc5IDEwLjkxNDIgNi43NSAxMC41IDYuNzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx6PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjUgMUM0Ljc3NjE0IDEgNSAxLjIyMzg2IDUgMS41VjJIMTBWMS41QzEwIDEuMjIzODYgMTAuMjIzOSAxIDEwLjUgMUMxMC43NzYxIDEgMTEgMS4yMjM4NiAxMSAxLjVWMkgxMi41QzEzLjMyODQgMiAxNCAyLjY3MTU3IDE0IDMuNVYxMi41QzE0IDEzLjMyODQgMTMuMzI4NCAxNCAxMi41IDE0SDIuNUMxLjY3MTU3IDE0IDEgMTMuMzI4NCAxIDEyLjVWMy41QzEgMi42NzE1NyAxLjY3MTU3IDIgMi41IDJINFYxLjVDNCAxLjIyMzg2IDQuMjIzODYgMSA0LjUgMVpNMTAgM1YzLjVDMTAgMy43NzYxNCAxMC4yMjM5IDQgMTAuNSA0QzEwLjc3NjEgNCAxMSAzLjc3NjE0IDExIDMuNVYzSDEyLjVDMTIuNzc2MSAzIDEzIDMuMjIzODYgMTMgMy41VjVIMlYzLjVDMiAzLjIyMzg2IDIuMjIzODYgMyAyLjUgM0g0VjMuNUM0IDMuNzc2MTQgNC4yMjM4NiA0IDQuNSA0QzQuNzc2MTQgNCA1IDMuNzc2MTQgNSAzLjVWM0gxMFpNMiA2VjEyLjVDMiAxMi43NzYxIDIuMjIzODYgMTMgMi41IDEzSDEyLjVDMTIuNzc2MSAxMyAxMyAxMi43NzYxIDEzIDEyLjVWNkgyWk03IDcuNUM3IDcuMjIzODYgNy4yMjM4NiA3IDcuNSA3QzcuNzc2MTQgNyA4IDcuMjIzODYgOCA3LjVDOCA3Ljc3NjE0IDcuNzc2MTQgOCA3LjUgOEM3LjIyMzg2IDggNyA3Ljc3NjE0IDcgNy41Wk05LjUgN0M5LjIyMzg2IDcgOSA3LjIyMzg2IDkgNy41QzkgNy43NzYxNCA5LjIyMzg2IDggOS41IDhDOS43NzYxNCA4IDEwIDcuNzc2MTQgMTAgNy41QzEwIDcuMjIzODYgOS43NzYxNCA3IDkuNSA3Wk0xMSA3LjVDMTEgNy4yMjM4NiAxMS4yMjM5IDcgMTEuNSA3QzExLjc3NjEgNyAxMiA3LjIyMzg2IDEyIDcuNUMxMiA3Ljc3NjE0IDExLjc3NjEgOCAxMS41IDhDMTEuMjIzOSA4IDExIDcuNzc2MTQgMTEgNy41Wk0xMS41IDlDMTEuMjIzOSA5IDExIDkuMjIzODYgMTEgOS41QzExIDkuNzc2MTQgMTEuMjIzOSAxMCAxMS41IDEwQzExLjc3NjEgMTAgMTIgOS43NzYxNCAxMiA5LjVDMTIgOS4yMjM4NiAxMS43NzYxIDkgMTEuNSA5Wk05IDkuNUM5IDkuMjIzODYgOS4yMjM4NiA5IDkuNSA5QzkuNzc2MTQgOSAxMCA5LjIyMzg2IDEwIDkuNUMxMCA5Ljc3NjE0IDkuNzc2MTQgMTAgOS41IDEwQzkuMjIzODYgMTAgOSA5Ljc3NjE0IDkgOS41Wk03LjUgOUM3LjIyMzg2IDkgNyA5LjIyMzg2IDcgOS41QzcgOS43NzYxNCA3LjIyMzg2IDEwIDcuNSAxMEM3Ljc3NjE0IDEwIDggOS43NzYxNCA4IDkuNUM4IDkuMjIzODYgNy43NzYxNCA5IDcuNSA5Wk01IDkuNUM1IDkuMjIzODYgNS4yMjM4NiA5IDUuNSA5QzUuNzc2MTQgOSA2IDkuMjIzODYgNiA5LjVDNiA5Ljc3NjE0IDUuNzc2MTQgMTAgNS41IDEwQzUuMjIzODYgMTAgNSA5Ljc3NjE0IDUgOS41Wk0zLjUgOUMzLjIyMzg2IDkgMyA5LjIyMzg2IDMgOS41QzMgOS43NzYxNCAzLjIyMzg2IDEwIDMuNSAxMEMzLjc3NjE0IDEwIDQgOS43NzYxNCA0IDkuNUM0IDkuMjIzODYgMy43NzYxNCA5IDMuNSA5Wk0zIDExLjVDMyAxMS4yMjM5IDMuMjIzODYgMTEgMy41IDExQzMuNzc2MTQgMTEgNCAxMS4yMjM5IDQgMTEuNUM0IDExLjc3NjEgMy43NzYxNCAxMiAzLjUgMTJDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41Wk01LjUgMTFDNS4yMjM4NiAxMSA1IDExLjIyMzkgNSAxMS41QzUgMTEuNzc2MSA1LjIyMzg2IDEyIDUuNSAxMkM1Ljc3NjE0IDEyIDYgMTEuNzc2MSA2IDExLjVDNiAxMS4yMjM5IDUuNzc2MTQgMTEgNS41IDExWk03IDExLjVDNyAxMS4yMjM5IDcuMjIzODYgMTEgNy41IDExQzcuNzc2MTQgMTEgOCAxMS4yMjM5IDggMTEuNUM4IDExLjc3NjEgNy43NzYxNCAxMiA3LjUgMTJDNy4yMjM4NiAxMiA3IDExLjc3NjEgNyAxMS41Wk05LjUgMTFDOS4yMjM4NiAxMSA5IDExLjIyMzkgOSAxMS41QzkgMTEuNzc2MSA5LjIyMzg2IDEyIDkuNSAxMkM5Ljc3NjE0IDEyIDEwIDExLjc3NjEgMTAgMTEuNUMxMCAxMS4yMjM5IDkuNzc2MTQgMTEgOS41IDExWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAzQzEuNDQ3NzIgMyAxIDMuNDQ3NzIgMSA0VjExQzEgMTEuNTUyMyAxLjQ0NzcyIDEyIDIgMTJIMTNDMTMuNTUyMyAxMiAxNCAxMS41NTIzIDE0IDExVjRDMTQgMy40NDc3MiAxMy41NTIzIDMgMTMgM0gyWk0wIDRDMCAyLjg5NTQzIDAuODk1NDMxIDIgMiAySDEzQzE0LjEwNDYgMiAxNSAyLjg5NTQzIDE1IDRWMTFDMTUgMTIuMTA0NiAxNC4xMDQ2IDEzIDEzIDEzSDJDMC44OTU0MzEgMTMgMCAxMi4xMDQ2IDAgMTFWNFpNMiA0LjI1QzIgNC4xMTE5MyAyLjExMTkzIDQgMi4yNSA0SDQuNzVDNC44ODgwNyA0IDUgNC4xMTE5MyA1IDQuMjVWNS43NTQ1NEM1IDUuODkyNjEgNC44ODgwNyA2LjAwNDU0IDQuNzUgNi4wMDQ1NEgyLjI1QzIuMTExOTMgNi4wMDQ1NCAyIDUuODkyNjEgMiA1Ljc1NDU0VjQuMjVaTTEyLjEwMSA3LjU4NDIxQzEyLjEwMSA5LjAyMDczIDEwLjkzNjUgMTAuMTg1MyA5LjQ5OTk4IDEwLjE4NTNDOC4wNjM0NiAxMC4xODUzIDYuODk4OTMgOS4wMjA3MyA2Ljg5ODkzIDcuNTg0MjFDNi44OTg5MyA2LjE0NzY5IDguMDYzNDYgNC45ODMxNSA5LjQ5OTk4IDQuOTgzMTVDMTAuOTM2NSA0Ljk4MzE1IDEyLjEwMSA2LjE0NzY5IDEyLjEwMSA3LjU4NDIxWk0xMy4xMDEgNy41ODQyMUMxMy4xMDEgOS41NzMwMiAxMS40ODg4IDExLjE4NTMgOS40OTk5OCAxMS4xODUzQzcuNTExMTcgMTEuMTg1MyA1Ljg5ODkzIDkuNTczMDIgNS44OTg5MyA3LjU4NDIxQzUuODk4OTMgNS41OTU0IDcuNTExMTcgMy45ODMxNSA5LjQ5OTk4IDMuOTgzMTVDMTEuNDg4OCAzLjk4MzE1IDEzLjEwMSA1LjU5NTQgMTMuMTAxIDcuNTg0MjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxxPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDMuNUMyIDMuMjIzODYgMi4yMjM4NiAzIDIuNSAzSDEyLjVDMTIuNzc2MSAzIDEzIDMuMjIzODYgMTMgMy41VjkuNUMxMyA5Ljc3NjE0IDEyLjc3NjEgMTAgMTIuNSAxMEgyLjVDMi4yMjM4NiAxMCAyIDkuNzc2MTQgMiA5LjVWMy41Wk0yIDEwLjkxNDZDMS40MTc0IDEwLjcwODcgMSAxMC4xNTMxIDEgOS41VjMuNUMxIDIuNjcxNTcgMS42NzE1NyAyIDIuNSAySDEyLjVDMTMuMzI4NCAyIDE0IDIuNjcxNTcgMTQgMy41VjkuNUMxNCAxMC4xNTMxIDEzLjU4MjYgMTAuNzA4NyAxMyAxMC45MTQ2VjExLjVDMTMgMTIuMzI4NCAxMi4zMjg0IDEzIDExLjUgMTNIMy41QzIuNjcxNTcgMTMgMiAxMi4zMjg0IDIgMTEuNVYxMC45MTQ2Wk0xMiAxMVYxMS41QzEyIDExLjc3NjEgMTEuNzc2MSAxMiAxMS41IDEySDMuNUMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVWMTFIMTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxZPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjUgM0MyLjIyMzg2IDMgMiAzLjIyMzg2IDIgMy41VjkuNUMyIDkuNzc2MTQgMi4yMjM4NiAxMCAyLjUgMTBIMTIuNUMxMi43NzYxIDEwIDEzIDkuNzc2MTQgMTMgOS41VjMuNUMxMyAzLjIyMzg2IDEyLjc3NjEgMyAxMi41IDNIMi41Wk0xIDkuNUMxIDEwLjE1MzEgMS40MTc0IDEwLjcwODcgMiAxMC45MTQ2VjExLjVDMiAxMi4zMjg0IDIuNjcxNTcgMTMgMy41IDEzSDExLjVDMTIuMzI4NCAxMyAxMyAxMi4zMjg0IDEzIDExLjVWMTAuOTE0NkMxMy41ODI2IDEwLjcwODcgMTQgMTAuMTUzMSAxNCA5LjVWMy41QzE0IDIuNjcxNTcgMTMuMzI4NCAyIDEyLjUgMkgyLjVDMS42NzE1NyAyIDEgMi42NzE1NyAxIDMuNVY5LjVaTTEyIDExLjVWMTFIM1YxMS41QzMgMTEuNzc2MSAzLjIyMzg2IDEyIDMuNSAxMkgxMS41QzExLjc3NjEgMTIgMTIgMTEuNzc2MSAxMiAxMS41Wk01LjUgNkM1LjIyMzg2IDYgNSA2LjIyMzg2IDUgNi41QzUgNi43NzYxNCA1LjIyMzg2IDcgNS41IDdIOS41QzkuNzc2MTQgNyAxMCA2Ljc3NjE0IDEwIDYuNUMxMCA2LjIyMzg2IDkuNzc2MTQgNiA5LjUgNkg1LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxLPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDMuNUMyIDMuMjIzODYgMi4yMjM4NiAzIDIuNSAzSDEyLjVDMTIuNzc2MSAzIDEzIDMuMjIzODYgMTMgMy41VjkuNUMxMyA5Ljc3NjE0IDEyLjc3NjEgMTAgMTIuNSAxMEgyLjVDMi4yMjM4NiAxMCAyIDkuNzc2MTQgMiA5LjVWMy41Wk0yIDEwLjkxNDZDMS40MTc0IDEwLjcwODcgMSAxMC4xNTMxIDEgOS41VjMuNUMxIDIuNjcxNTcgMS42NzE1NyAyIDIuNSAySDEyLjVDMTMuMzI4NCAyIDE0IDIuNjcxNTcgMTQgMy41VjkuNUMxNCAxMC4xNTMxIDEzLjU4MjYgMTAuNzA4NyAxMyAxMC45MTQ2VjExLjVDMTMgMTIuMzI4NCAxMi4zMjg0IDEzIDExLjUgMTNIMy41QzIuNjcxNTcgMTMgMiAxMi4zMjg0IDIgMTEuNVYxMC45MTQ2Wk0xMiAxMVYxMS41QzEyIDExLjc3NjEgMTEuNzc2MSAxMiAxMS41IDEySDMuNUMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVWMTFIMTJaTTUgNi41QzUgNi4yMjM4NiA1LjIyMzg2IDYgNS41IDZIN1Y0LjVDNyA0LjIyMzg2IDcuMjIzODYgNCA3LjUgNEM3Ljc3NjE0IDQgOCA0LjIyMzg2IDggNC41VjZIOS41QzkuNzc2MTQgNiAxMCA2LjIyMzg2IDEwIDYuNUMxMCA2Ljc3NjE0IDkuNzc2MTQgNyA5LjUgN0g4VjguNUM4IDguNzc2MTQgNy43NzYxNCA5IDcuNSA5QzcuMjIzODYgOSA3IDguNzc2MTQgNyA4LjVWN0g1LjVDNS4yMjM4NiA3IDUgNi43NzYxNCA1IDYuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMTgxNzkgNi4xODE4MUM0LjM1NzUzIDYuMDA2MDggNC42NDI0NSA2LjAwNjA4IDQuODE4MTkgNi4xODE4MUw3LjQ5OTk5IDguODYzNjJMMTAuMTgxOCA2LjE4MTgxQzEwLjM1NzUgNi4wMDYwOCAxMC42NDI0IDYuMDA2MDggMTAuODE4MiA2LjE4MTgxQzEwLjk5MzkgNi4zNTc1NSAxMC45OTM5IDYuNjQyNDcgMTAuODE4MiA2LjgxODIxTDcuODE4MTkgOS44MTgyMUM3LjczMzc5IDkuOTAyNiA3LjYxOTM0IDkuOTUwMDEgNy40OTk5OSA5Ljk1MDAxQzcuMzgwNjQgOS45NTAwMSA3LjI2NjE4IDkuOTAyNiA3LjE4MTc5IDkuODE4MjFMNC4xODE3OSA2LjgxODIxQzQuMDA2MDUgNi42NDI0NyA0LjAwNjA1IDYuMzU3NTUgNC4xODE3OSA2LjE4MTgxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC44MTgwOSA0LjE4MTc5QzguOTkzODMgNC4zNTc1MyA4Ljk5MzgzIDQuNjQyNDUgOC44MTgwOSA0LjgxODE5TDYuMTM2MjkgNy40OTk5OUw4LjgxODA5IDEwLjE4MThDOC45OTM4MyAxMC4zNTc1IDguOTkzODMgMTAuNjQyNCA4LjgxODA5IDEwLjgxODJDOC42NDIzNiAxMC45OTM5IDguMzU3NDMgMTAuOTkzOSA4LjE4MTcgMTAuODE4Mkw1LjE4MTcgNy44MTgxOUM1LjA5NzMxIDcuNzMzNzkgNS4wNDk5IDcuNjE5MzMgNS4wNDk5IDcuNDk5OTlDNS4wNDk5IDcuMzgwNjQgNS4wOTczMSA3LjI2NjE4IDUuMTgxNyA3LjE4MTc5TDguMTgxNyA0LjE4MTc5QzguMzU3NDMgNC4wMDYwNSA4LjY0MjM2IDQuMDA2MDUgOC44MTgwOSA0LjE4MTc5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi4xODE5NCA0LjE4MTg1QzYuMzU3NjcgNC4wMDYxMSA2LjY0MjYgNC4wMDYxMSA2LjgxODMzIDQuMTgxODVMOS44MTgzMyA3LjE4MTg1QzkuOTAyNzIgNy4yNjYyNCA5Ljk1MDEzIDcuMzgwNyA5Ljk1MDEzIDcuNTAwMDVDOS45NTAxMyA3LjYxOTQgOS45MDI3MiA3LjczMzg2IDkuODE4MzMgNy44MTgyNUw2LjgxODMzIDEwLjgxODJDNi42NDI2IDEwLjk5NCA2LjM1NzY3IDEwLjk5NCA2LjE4MTk0IDEwLjgxODJDNi4wMDYyIDEwLjY0MjUgNi4wMDYyIDEwLjM1NzYgNi4xODE5NCAxMC4xODE5TDguODYzNzQgNy41MDAwNUw2LjE4MTk0IDQuODE4MjVDNi4wMDYyIDQuNjQyNTEgNi4wMDYyIDQuMzU3NTkgNi4xODE5NCA0LjE4MTg1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuOTMxNzkgNS40MzE3OUM0Ljc1NjA1IDUuNjA3NTMgNC43NTYwNSA1Ljg5MjQ1IDQuOTMxNzkgNi4wNjgxOUM1LjEwNzUzIDYuMjQzOTIgNS4zOTI0NSA2LjI0MzkyIDUuNTY4MTkgNi4wNjgxOUw3LjQ5OTk5IDQuMTM2MzhMOS40MzE3OSA2LjA2ODE5QzkuNjA3NTMgNi4yNDM5MiA5Ljg5MjQ1IDYuMjQzOTIgMTAuMDY4MiA2LjA2ODE5QzEwLjI0MzkgNS44OTI0NSAxMC4yNDM5IDUuNjA3NTMgMTAuMDY4MiA1LjQzMTc5TDcuODE4MTkgMy4xODE3OUM3LjczMzc5IDMuMDk3NCA3LjYxOTMzIDMuMDQ5OTkgNy40OTk5OSAzLjA0OTk5QzcuMzgwNjQgMy4wNDk5OSA3LjI2NjE4IDMuMDk3NCA3LjE4MTc5IDMuMTgxNzlMNC45MzE3OSA1LjQzMTc5Wk0xMC4wNjgyIDkuNTY4MTlDMTAuMjQzOSA5LjM5MjQ1IDEwLjI0MzkgOS4xMDc1MyAxMC4wNjgyIDguOTMxNzlDOS44OTI0NSA4Ljc1NjA2IDkuNjA3NTMgOC43NTYwNiA5LjQzMTc5IDguOTMxNzlMNy40OTk5OSAxMC44NjM2TDUuNTY4MTkgOC45MzE3OUM1LjM5MjQ1IDguNzU2MDYgNS4xMDc1MyA4Ljc1NjA2IDQuOTMxNzkgOC45MzE3OUM0Ljc1NjA1IDkuMTA3NTMgNC43NTYwNSA5LjM5MjQ1IDQuOTMxNzkgOS41NjgxOUw3LjE4MTc5IDExLjgxODJDNy4zNTc1MyAxMS45OTM5IDcuNjQyNDUgMTEuOTkzOSA3LjgxODE5IDExLjgxODJMMTAuMDY4MiA5LjU2ODE5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMTgxNzkgOC44MTgxOUM0LjAwNjA1IDguNjQyNDUgNC4wMDYwNSA4LjM1NzUzIDQuMTgxNzkgOC4xODE3OUw3LjE4MTc5IDUuMTgxNzlDNy4yNjYxOCA1LjA5NzQgNy4zODA2NCA1LjA0OTk5IDcuNDk5OTkgNS4wNDk5OUM3LjYxOTMzIDUuMDQ5OTkgNy43MzM3OSA1LjA5NzQgNy44MTgxOSA1LjE4MTc5TDEwLjgxODIgOC4xODE3OUMxMC45OTM5IDguMzU3NTMgMTAuOTkzOSA4LjY0MjQ1IDEwLjgxODIgOC44MTgxOUMxMC42NDI0IDguOTkzOTIgMTAuMzU3NSA4Ljk5MzkyIDEwLjE4MTggOC44MTgxOUw3LjQ5OTk5IDYuMTM2MzhMNC44MTgxOSA4LjgxODE5QzQuNjQyNDUgOC45OTM5MiA0LjM1NzUzIDguOTkzOTIgNC4xODE3OSA4LjgxODE5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEyLjUgM0wyLjQ5OTk5IDMuMDAwMDJDMS42NzE1NyAzLjAwMDAyIDAuOTk5OTk5IDMuNjcxNTkgMC45OTk5OTkgNC41MDAwMlY5LjUwMDAyQzAuOTk5OTk5IDEwLjMyODQgMS42NzE1NyAxMSAyLjUgMTFINy41MDAwMkM3LjYzMjYzIDExIDcuNzU5ODEgMTEuMDUyNyA3Ljg1MzU4IDExLjE0NjVMOS45OTk5OSAxMy4yOTI5VjExLjVDOS45OTk5OSAxMS4yMjM5IDEwLjIyMzkgMTEgMTAuNSAxMUgxMi41QzEzLjMyODQgMTEgMTQgMTAuMzI4NCAxNCA5LjUwMDAyVjQuNUMxNCAzLjY3MTU3IDEzLjMyODQgMyAxMi41IDNaTTIuNDk5OTkgMi4wMDAwMkwxMi41IDJDMTMuODgwNyAyIDE1IDMuMTE5MjggMTUgNC41VjkuNTAwMDJDMTUgMTAuODgwNyAxMy44ODA3IDEyIDEyLjUgMTJIMTFWMTQuNUMxMSAxNC43MDIyIDEwLjg3ODIgMTQuODg0NSAxMC42OTEzIDE0Ljk2MTlDMTAuNTA0NSAxNS4wMzkzIDEwLjI4OTQgMTQuOTk2NSAxMC4xNDY0IDE0Ljg1MzVMNy4yOTI5MiAxMkgyLjVDMS4xMTkyOSAxMiAwIDEwLjg4MDcgMCA5LjUwMDAyVjQuNTAwMDJDMCAzLjExOTMxIDEuMTE5MjggMi4wMDAwMiAyLjQ5OTk5IDIuMDAwMDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxyZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuNDY2OSAzLjcyNjg0QzExLjc1NTggMy45MTU3NCAxMS44MzY5IDQuMzAzMDggMTEuNjQ4IDQuNTkxOThMNy4zOTc5OSAxMS4wOTJDNy4yOTc4MyAxMS4yNDUyIDcuMTM1NTYgMTEuMzQ2NyA2Ljk1NDAyIDExLjM2OTlDNi43NzI0NyAxMS4zOTMxIDYuNTg5ODkgMTEuMzM1NSA2LjQ1NDQ2IDExLjIxMjRMMy43MDQ0NiA4LjcxMjQxQzMuNDQ5MDUgOC40ODAyMiAzLjQzMDIzIDguMDg0OTQgMy42NjI0MiA3LjgyOTUzQzMuODk0NjEgNy41NzQxMiA0LjI4OTg5IDcuNTU1MjkgNC41NDUzIDcuNzg3NDlMNi43NTI5MiA5Ljc5NDQxTDEwLjYwMTggMy45MDc5MkMxMC43OTA3IDMuNjE5MDIgMTEuMTc4IDMuNTM3OTUgMTEuNDY2OSAzLjcyNjg0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sb2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzcwNDVDMy44NDIyMiAwLjg3NzA0NSAwLjg3NzA3NSAzLjg0MjE5IDAuODc3MDc1IDcuNDk5ODhDMC44NzcwNzUgMTEuMTU3NSAzLjg0MjIyIDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzExLjE1NzYgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMy44NDIxOSAxMS4xNTc2IDAuODc3MDQ1IDcuNDk5OTEgMC44NzcwNDVaTTEuODI3MDggNy40OTk4OEMxLjgyNzA4IDQuMzY2ODYgNC4zNjY4OSAxLjgyNzA0IDcuNDk5OTEgMS44MjcwNEMxMC42MzI5IDEuODI3MDQgMTMuMTcyNyA0LjM2Njg2IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDEwLjYzMjkgMTAuNjMyOSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0M0LjM2Njg5IDEzLjE3MjcgMS44MjcwOCAxMC42MzI5IDEuODI3MDggNy40OTk4OFpNMTAuMTU4OSA1LjUzNzc0QzEwLjMxNzggNS4zMTE5MSAxMC4yNjM2IDUuMDAwMDEgMTAuMDM3OCA0Ljg0MTA5QzkuODExOTQgNC42ODIxNyA5LjUwMDA0IDQuNzM2NDIgOS4zNDExMiA0Ljk2MjI1TDYuNTE5NzcgOC45NzE1NEw1LjM1NjgxIDcuNzg3MDZDNS4xNjMzNCA3LjU5MDAyIDQuODQ2NzcgNy41ODcxMSA0LjY0OTczIDcuNzgwNThDNC40NTI2OCA3Ljk3NDA0IDQuNDQ5NzggOC4yOTA2MSA0LjY0MzI1IDguNDg3NjVMNi4yMjY1OCAxMC4xMDAzQzYuMzMwNTQgMTAuMjA2MiA2LjQ3NjE3IDEwLjI2MDQgNi42MjQwNyAxMC4yNDgzQzYuNzcxOTcgMTAuMjM2MyA2LjkwNjg2IDEwLjE1OTEgNi45OTIyNiAxMC4wMzc3TDEwLjE1ODkgNS41Mzc3NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGllPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDNIMTJWMTJIM0wzIDNaTTIgM0MyIDIuNDQ3NzEgMi40NDc3MiAyIDMgMkgxMkMxMi41NTIzIDIgMTMgMi40NDc3MiAxMyAzVjEyQzEzIDEyLjU1MjMgMTIuNTUyMyAxMyAxMiAxM0gzQzIuNDQ3NzEgMTMgMiAxMi41NTIzIDIgMTJWM1pNMTAuMzQ5OCA1LjUxMTA1QzEwLjUwNiA1LjI4MzM3IDEwLjQ0ODEgNC45NzIxMiAxMC4yMjA0IDQuODE1ODdDOS45OTI3NSA0LjY1OTYxIDkuNjgxNSA0LjcxNzUxIDkuNTI1MjUgNC45NDUxOUw2LjY0MDQ4IDkuMTQ4NTdMNS4xOTczMyA3LjQwODg5QzUuMDIxMDIgNy4xOTYzNSA0LjcwNTggNy4xNjY5OSA0LjQ5MzI3IDcuMzQzMjlDNC4yODA3MyA3LjUxOTYgNC4yNTEzNyA3LjgzNDgyIDQuNDI3NjcgOC4wNDczNUw2LjI5MzQgMTAuMjk2NEM2LjM5MzQ4IDEwLjQxNzEgNi41NDQzNyAxMC40ODM4IDYuNzAwOTcgMTAuNDc2N0M2Ljg1NzU3IDEwLjQ2OTUgNy4wMDE3NyAxMC4zODk0IDcuMDkwNDcgMTAuMjYwMUwxMC4zNDk4IDUuNTExMDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4xMzUyMyA2LjE1ODAzQzMuMzI0MSA1Ljk1NjU3IDMuNjQwNTIgNS45NDYzNyAzLjg0MTk3IDYuMTM1MjNMNy41IDkuNTY0NjRMMTEuMTU4IDYuMTM1MjNDMTEuMzU5NSA1Ljk0NjM3IDExLjY3NTkgNS45NTY1NyAxMS44NjQ4IDYuMTU4MDNDMTIuMDUzNiA2LjM1OTQ5IDEyLjA0MzQgNi42NzU5MSAxMS44NDIgNi44NjQ3N0w3Ljg0MTk3IDEwLjYxNDhDNy42NDk2NCAxMC43OTUxIDcuMzUwMzYgMTAuNzk1MSA3LjE1ODAzIDEwLjYxNDhMMy4xNTgwMyA2Ljg2NDc3QzIuOTU2NTcgNi42NzU5MSAyLjk0NjM3IDYuMzU5NDkgMy4xMzUyMyA2LjE1ODAzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguODQxODIgMy4xMzUxNEM5LjA0MzI3IDMuMzI0MDEgOS4wNTM0OCAzLjY0MDQyIDguODY0NjIgMy44NDE4OEw1LjQzNTIxIDcuNDk5OTFMOC44NjQ2MiAxMS4xNTc5QzkuMDUzNDggMTEuMzU5NCA5LjA0MzI3IDExLjY3NTggOC44NDE4MiAxMS44NjQ3QzguNjQwMzYgMTIuMDUzNSA4LjMyMzk0IDEyLjA0MzMgOC4xMzUwOCAxMS44NDE5TDQuMzg1MDggNy44NDE4OEM0LjIwNDc3IDcuNjQ5NTUgNC4yMDQ3NyA3LjM1MDI3IDQuMzg1MDggNy4xNTc5NEw4LjEzNTA4IDMuMTU3OTRDOC4zMjM5NCAyLjk1NjQ4IDguNjQwMzYgMi45NDYyOCA4Ljg0MTgyIDMuMTM1MTRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxzZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi4xNTg0IDMuMTM1MDhDNi4zNTk4NSAyLjk0NjIxIDYuNjc2MjcgMi45NTY0MiA2Ljg2NTE0IDMuMTU3ODhMMTAuNjE1MSA3LjE1Nzg4QzEwLjc5NTQgNy4zNTAyIDEwLjc5NTQgNy42NDk0OSAxMC42MTUxIDcuODQxODJMNi44NjUxNCAxMS44NDE4QzYuNjc2MjcgMTIuMDQzMyA2LjM1OTg1IDEyLjA1MzUgNi4xNTg0IDExLjg2NDZDNS45NTY5NCAxMS42NzU3IDUuOTQ2NzMgMTEuMzU5MyA2LjEzNTYgMTEuMTU3OUw5LjU2NSA3LjQ5OTg1TDYuMTM1NiAzLjg0MTgyQzUuOTQ2NzMgMy42NDAzNiA1Ljk1Njk0IDMuMzIzOTQgNi4xNTg0IDMuMTM1MDhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxjZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4xMzUyMyA4Ljg0MTk3QzMuMzI0MSA5LjA0MzQzIDMuNjQwNTIgOS4wNTM2MyAzLjg0MTk3IDguODY0NzdMNy41IDUuNDM1MzZMMTEuMTU4IDguODY0NzdDMTEuMzU5NSA5LjA1MzYzIDExLjY3NTkgOS4wNDM0MyAxMS44NjQ4IDguODQxOTdDMTIuMDUzNiA4LjY0MDUxIDEyLjA0MzQgOC4zMjQwOSAxMS44NDIgOC4xMzUyM0w3Ljg0MTk3IDQuMzg1MjNDNy42NDk2NCA0LjIwNDkyIDcuMzUwMzYgNC4yMDQ5MiA3LjE1ODAzIDQuMzg1MjNMMy4xNTgwMyA4LjEzNTIzQzIuOTU2NTcgOC4zMjQwOSAyLjk0NjM3IDguNjQwNTEgMy4xMzUyMyA4Ljg0MTk3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNDk5OTFDMC44NzcwNzUgMy44NDIyMiAzLjg0MjIyIDAuODc3MDc1IDcuNDk5OTEgMC44NzcwNzVDMTEuMTU3NiAwLjg3NzA3NSAxNC4xMjI3IDMuODQyMjIgMTQuMTIyNyA3LjQ5OTkxQzE0LjEyMjcgMTEuMTU3NiAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzMuODQyMjIgMTQuMTIyNyAwLjg3NzA3NSAxMS4xNTc2IDAuODc3MDc1IDcuNDk5OTFaTTcuNDk5OTEgMS44MjcwOEM0LjM2Njg5IDEuODI3MDggMS44MjcwOCA0LjM2Njg5IDEuODI3MDggNy40OTk5MUMxLjgyNzA4IDEwLjYzMjkgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0MxMC42MzI5IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk5MUMxMy4xNzI3IDQuMzY2ODkgMTAuNjMyOSAxLjgyNzA4IDcuNDk5OTEgMS44MjcwOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGZlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc3MDc1QzMuODQyMjIgMC44NzcwNzUgMC44NzcwNzUgMy44NDIyMiAwLjg3NzA3NSA3LjQ5OTkxQzAuODc3MDc1IDExLjE1NzYgMy44NDIyMiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MxMS4xNTc2IDE0LjEyMjcgMTQuMTIyNyAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MUMxNC4xMjI3IDMuODQyMjIgMTEuMTU3NiAwLjg3NzA3NSA3LjQ5OTkxIDAuODc3MDc1Wk0zLjg1NzY4IDMuMTUwNTdDNC44NDMxMSAyLjMyNDQ4IDYuMTEzNDIgMS44MjcwOCA3LjQ5OTkxIDEuODI3MDhDMTAuNjMyOSAxLjgyNzA4IDEzLjE3MjcgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTFDMTMuMTcyNyA4Ljg4NjM4IDEyLjY3NTMgMTAuMTU2NyAxMS44NDkyIDExLjE0MjFMMy44NTc2OCAzLjE1MDU3Wk0zLjE1MDU3IDMuODU3NjhDMi4zMjQ0OCA0Ljg0MzExIDEuODI3MDggNi4xMTM0MiAxLjgyNzA4IDcuNDk5OTFDMS44MjcwOCAxMC42MzI5IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDOC44ODYzOCAxMy4xNzI3IDEwLjE1NjcgMTIuNjc1MyAxMS4xNDIxIDExLjg0OTJMMy4xNTA1NyAzLjg1NzY4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMlYxSDEwVjJINVpNNC43NSAwQzQuMzM1NzkgMCA0IDAuMzM1Nzg2IDQgMC43NVYxSDMuNUMyLjY3MTU3IDEgMiAxLjY3MTU3IDIgMi41VjEyLjVDMiAxMy4zMjg0IDIuNjcxNTcgMTQgMy41IDE0SDExLjVDMTIuMzI4NCAxNCAxMyAxMy4zMjg0IDEzIDEyLjVWMi41QzEzIDEuNjcxNTcgMTIuMzI4NCAxIDExLjUgMUgxMVYwLjc1QzExIDAuMzM1Nzg2IDEwLjY2NDIgMCAxMC4yNSAwSDQuNzVaTTExIDJWMi4yNUMxMSAyLjY2NDIxIDEwLjY2NDIgMyAxMC4yNSAzSDQuNzVDNC4zMzU3OSAzIDQgMi42NjQyMSA0IDIuMjVWMkgzLjVDMy4yMjM4NiAyIDMgMi4yMjM4NiAzIDIuNVYxMi41QzMgMTIuNzc2MSAzLjIyMzg2IDEzIDMuNSAxM0gxMS41QzExLjc3NjEgMTMgMTIgMTIuNzc2MSAxMiAxMi41VjIuNUMxMiAyLjIyMzg2IDExLjc3NjEgMiAxMS41IDJIMTFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxwZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSAyVjFIMTBWMkg1Wk00Ljc1IDBDNC4zMzU3OSAwIDQgMC4zMzU3ODYgNCAwLjc1VjFIMy41QzIuNjcxNTcgMSAyIDEuNjcxNTcgMiAyLjVWMTIuNUMyIDEzLjMyODQgMi42NzE1NyAxNCAzLjUgMTRIN1YxM0gzLjVDMy4yMjM4NiAxMyAzIDEyLjc3NjEgMyAxMi41VjIuNUMzIDIuMjIzODYgMy4yMjM4NiAyIDMuNSAySDRWMi4yNUM0IDIuNjY0MjEgNC4zMzU3OSAzIDQuNzUgM0gxMC4yNUMxMC42NjQyIDMgMTEgMi42NjQyMSAxMSAyLjI1VjJIMTEuNUMxMS43NzYxIDIgMTIgMi4yMjM4NiAxMiAyLjVWN0gxM1YyLjVDMTMgMS42NzE1NyAxMi4zMjg0IDEgMTEuNSAxSDExVjAuNzVDMTEgMC4zMzU3ODYgMTAuNjY0MiAwIDEwLjI1IDBINC43NVpNOSA4LjVDOSA4Ljc3NjE0IDguNzc2MTQgOSA4LjUgOUM4LjIyMzg2IDkgOCA4Ljc3NjE0IDggOC41QzggOC4yMjM4NiA4LjIyMzg2IDggOC41IDhDOC43NzYxNCA4IDkgOC4yMjM4NiA5IDguNVpNMTAuNSA5QzEwLjc3NjEgOSAxMSA4Ljc3NjE0IDExIDguNUMxMSA4LjIyMzg2IDEwLjc3NjEgOCAxMC41IDhDMTAuMjIzOSA4IDEwIDguMjIzODYgMTAgOC41QzEwIDguNzc2MTQgMTAuMjIzOSA5IDEwLjUgOVpNMTMgOC41QzEzIDguNzc2MTQgMTIuNzc2MSA5IDEyLjUgOUMxMi4yMjM5IDkgMTIgOC43NzYxNCAxMiA4LjVDMTIgOC4yMjM4NiAxMi4yMjM5IDggMTIuNSA4QzEyLjc3NjEgOCAxMyA4LjIyMzg2IDEzIDguNVpNMTQuNSA5QzE0Ljc3NjEgOSAxNSA4Ljc3NjE0IDE1IDguNUMxNSA4LjIyMzg2IDE0Ljc3NjEgOCAxNC41IDhDMTQuMjIzOSA4IDE0IDguMjIzODYgMTQgOC41QzE0IDguNzc2MTQgMTQuMjIzOSA5IDE0LjUgOVpNMTUgMTAuNUMxNSAxMC43NzYxIDE0Ljc3NjEgMTEgMTQuNSAxMUMxNC4yMjM5IDExIDE0IDEwLjc3NjEgMTQgMTAuNUMxNCAxMC4yMjM5IDE0LjIyMzkgMTAgMTQuNSAxMEMxNC43NzYxIDEwIDE1IDEwLjIyMzkgMTUgMTAuNVpNMTQuNSAxM0MxNC43NzYxIDEzIDE1IDEyLjc3NjEgMTUgMTIuNUMxNSAxMi4yMjM5IDE0Ljc3NjEgMTIgMTQuNSAxMkMxNC4yMjM5IDEyIDE0IDEyLjIyMzkgMTQgMTIuNUMxNCAxMi43NzYxIDE0LjIyMzkgMTMgMTQuNSAxM1pNMTQuNSAxNUMxNC43NzYxIDE1IDE1IDE0Ljc3NjEgMTUgMTQuNUMxNSAxNC4yMjM5IDE0Ljc3NjEgMTQgMTQuNSAxNEMxNC4yMjM5IDE0IDE0IDE0LjIyMzkgMTQgMTQuNUMxNCAxNC43NzYxIDE0LjIyMzkgMTUgMTQuNSAxNVpNOC41IDExQzguNzc2MTQgMTEgOSAxMC43NzYxIDkgMTAuNUM5IDEwLjIyMzkgOC43NzYxNCAxMCA4LjUgMTBDOC4yMjM4NiAxMCA4IDEwLjIyMzkgOCAxMC41QzggMTAuNzc2MSA4LjIyMzg2IDExIDguNSAxMVpNOSAxMi41QzkgMTIuNzc2MSA4Ljc3NjE0IDEzIDguNSAxM0M4LjIyMzg2IDEzIDggMTIuNzc2MSA4IDEyLjVDOCAxMi4yMjM5IDguMjIzODYgMTIgOC41IDEyQzguNzc2MTQgMTIgOSAxMi4yMjM5IDkgMTIuNVpNOC41IDE1QzguNzc2MTQgMTUgOSAxNC43NzYxIDkgMTQuNUM5IDE0LjIyMzkgOC43NzYxNCAxNCA4LjUgMTRDOC4yMjM4NiAxNCA4IDE0LjIyMzkgOCAxNC41QzggMTQuNzc2MSA4LjIyMzg2IDE1IDguNSAxNVpNMTEgMTQuNUMxMSAxNC43NzYxIDEwLjc3NjEgMTUgMTAuNSAxNUMxMC4yMjM5IDE1IDEwIDE0Ljc3NjEgMTAgMTQuNUMxMCAxNC4yMjM5IDEwLjIyMzkgMTQgMTAuNSAxNEMxMC43NzYxIDE0IDExIDE0LjIyMzkgMTEgMTQuNVpNMTIuNSAxNUMxMi43NzYxIDE1IDEzIDE0Ljc3NjEgMTMgMTQuNUMxMyAxNC4yMjM5IDEyLjc3NjEgMTQgMTIuNSAxNEMxMi4yMjM5IDE0IDEyIDE0LjIyMzkgMTIgMTQuNUMxMiAxNC43NzYxIDEyLjIyMzkgMTUgMTIuNSAxNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGhlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUwMDA5IDAuODc3MDE0QzMuODQyNDEgMC44NzcwMTQgMC44NzcyNTggMy44NDIxNiAwLjg3NzI1OCA3LjQ5OTg0QzAuODc3MjU4IDExLjE1NzUgMy44NDI0IDE0LjEyMjcgNy41MDAwOSAxNC4xMjI3QzExLjE1NzggMTQuMTIyNyAxNC4xMjI5IDExLjE1NzUgMTQuMTIyOSA3LjQ5OTg0QzE0LjEyMjkgMy44NDIxNiAxMS4xNTc3IDAuODc3MDE0IDcuNTAwMDkgMC44NzcwMTRaTTEuODI3MjYgNy40OTk4NEMxLjgyNzI2IDQuMzY2ODMgNC4zNjcwOCAxLjgyNzAxIDcuNTAwMDkgMS44MjcwMUMxMC42MzMxIDEuODI3MDEgMTMuMTcyOSA0LjM2NjgzIDEzLjE3MjkgNy40OTk4NEMxMy4xNzI5IDEwLjYzMjggMTAuNjMzMSAxMy4xNzI3IDcuNTAwMDkgMTMuMTcyN0M0LjM2NzA4IDEzLjE3MjcgMS44MjcyNiAxMC42MzI4IDEuODI3MjYgNy40OTk4NFpNOCA0LjUwMDAxQzggNC4yMjM4NyA3Ljc3NjE0IDQuMDAwMDEgNy41IDQuMDAwMDFDNy4yMjM4NiA0LjAwMDAxIDcgNC4yMjM4NyA3IDQuNTAwMDFWNy41MDAwMUM3IDcuNjMyNjIgNy4wNTI2OCA3Ljc1OTggNy4xNDY0NSA3Ljg1MzU3TDkuMTQ2NDUgOS44NTM1N0M5LjM0MTcxIDEwLjA0ODggOS42NTgyOSAxMC4wNDg4IDkuODUzNTUgOS44NTM1N0MxMC4wNDg4IDkuNjU4MzEgMTAuMDQ4OCA5LjM0MTcyIDkuODUzNTUgOS4xNDY0Nkw4IDcuMjkyOTFWNC41MDAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05Ljk2NDI0IDIuNjg1NzFDMTAuMDY2OCAyLjQyOTMxIDkuOTQyMDkgMi4xMzgzMyA5LjY4NTcgMi4wMzU3N0M5LjQyOTMgMS45MzMyMiA5LjEzODMyIDIuMDU3OTIgOS4wMzU3NiAyLjMxNDMyTDUuMDM1NzYgMTIuMzE0M0M0LjkzMzIgMTIuNTcwNyA1LjA1NzkxIDEyLjg2MTcgNS4zMTQzIDEyLjk2NDJDNS41NzA3IDEzLjA2NjggNS44NjE2OCAxMi45NDIxIDUuOTY0MjQgMTIuNjg1N0w5Ljk2NDI0IDIuNjg1NzFaTTMuODUzNTUgNS4xNDY0NkM0LjA0ODgyIDUuMzQxNzIgNC4wNDg4MiA1LjY1ODMgMy44NTM1NSA1Ljg1MzU2TDIuMjA3MTEgNy41MDAwMUwzLjg1MzU1IDkuMTQ2NDZDNC4wNDg4MiA5LjM0MTcyIDQuMDQ4ODIgOS42NTgzIDMuODUzNTUgOS44NTM1NkMzLjY1ODI5IDEwLjA0ODggMy4zNDE3MSAxMC4wNDg4IDMuMTQ2NDUgOS44NTM1NkwxLjE0NjQ1IDcuODUzNTZDMC45NTExODQgNy42NTgzIDAuOTUxMTg0IDcuMzQxNzIgMS4xNDY0NSA3LjE0NjQ2TDMuMTQ2NDUgNS4xNDY0NkMzLjM0MTcxIDQuOTUxMiAzLjY1ODI5IDQuOTUxMiAzLjg1MzU1IDUuMTQ2NDZaTTExLjE0NjQgNS4xNDY0NkMxMS4zNDE3IDQuOTUxMiAxMS42NTgzIDQuOTUxMiAxMS44NTM2IDUuMTQ2NDZMMTMuODUzNiA3LjE0NjQ2QzE0LjA0ODggNy4zNDE3MiAxNC4wNDg4IDcuNjU4MyAxMy44NTM2IDcuODUzNTZMMTEuODUzNiA5Ljg1MzU2QzExLjY1ODMgMTAuMDQ4OCAxMS4zNDE3IDEwLjA0ODggMTEuMTQ2NCA5Ljg1MzU2QzEwLjk1MTIgOS42NTgzIDEwLjk1MTIgOS4zNDE3MiAxMS4xNDY0IDkuMTQ2NDZMMTIuNzkyOSA3LjUwMDAxTDExLjE0NjQgNS44NTM1NkMxMC45NTEyIDUuNjU4MyAxMC45NTEyIDUuMzQxNzIgMTEuMTQ2NCA1LjE0NjQ2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNzExNDQgMC43OTY5MDJDNy41Nzc0MSAwLjczNDM1NyA3LjQyMjU3IDAuNzM0MzU3IDcuMjg4NTUgMC43OTY5MDJMMS4yODg1NSAzLjU5NjlDMS4xMTI1MSAzLjY3OTA1IDAuOTk5OTkzIDMuODU1NzMgMC45OTk5OTMgNC4wNDk5OVYxMC45NUMwLjk5OTk5MyAxMS4xNDQzIDEuMTEyNTEgMTEuMzIwOSAxLjI4ODU1IDExLjQwMzFMNy4yODg1NSAxNC4yMDMxQzcuNDIyNTcgMTQuMjY1NiA3LjU3NzQxIDE0LjI2NTYgNy43MTE0NCAxNC4yMDMxTDEzLjcxMTQgMTEuNDAzMUMxMy44ODc1IDExLjMyMDkgMTQgMTEuMTQ0MyAxNCAxMC45NVY0LjA0OTk5QzE0IDMuODU1NzMgMTMuODg3NSAzLjY3OTA1IDEzLjcxMTQgMy41OTY5TDcuNzExNDQgMC43OTY5MDJaTTcuNDk5OTkgMy4xNTY3NEw1Ljk4MDM5IDIuNTEwOTFMNy40OTk5OSAxLjgwMTc2TDkuMDE5NTkgMi41MTA5MUw3LjQ5OTk5IDMuMTU2NzRaTTcuNjk1NTYgNC4xNjAxOEwxMC4yMzgyIDMuMDc5NThMMTIuMjcxOSA0LjAyODY1TDcuNDk5OTkgNi4wNTY3MUwyLjcyODA4IDQuMDI4NjVMNC43NjE4MSAzLjA3OTU4TDcuMzA0NDIgNC4xNjAxOEM3LjQyOTM5IDQuMjEzMyA3LjU3MDU5IDQuMjEzMyA3LjY5NTU2IDQuMTYwMThaTTcuOTk5OTkgNi45MzA3OEwxMyA0LjgwNTc4VjcuOTI5NjZMMTEuMDgyMSA4LjgxMTlDMTAuNzI3MyA4Ljk3NTA5IDEwLjUgOS4zMjk4OCAxMC41IDkuNzIwMzlWMTEuNzk4Mkw3Ljk5OTk5IDEyLjk2NDlWNi45MzA3OFpNMTEuNSAxMS4zMzE2TDEzIDEwLjYzMTZWOS4wMzAzOUwxMS41IDkuNzIwMzlWMTEuMzMxNlpNNi45OTk5OSA2LjkzMDc4VjEyLjk2NDlMNC41MDIzMSAxMS43OTkzVjkuNzIwMzZDNC41MDIzMSA5LjMyOTg1IDQuMjc0OTkgOC45NzUwNiAzLjkyMDIyIDguODExODdMMS45OTk5OSA3LjkyODU2VjQuODA1NzhMNi45OTk5OSA2LjkzMDc4Wk0xLjk5OTk5IDEwLjYzMTZMMy41MDIzMSAxMS4zMzI2TDMuNTAyMzEgOS43MjAzNkwxLjk5OTk5IDkuMDI5MjlWMTAuNjMxNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG1lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04LjAwMDEyIDEuNUM4LjAwMDEyIDEuMjIzODYgNy43NzYyNiAxIDcuNTAwMTIgMUM3LjIyMzk4IDEgNy4wMDAxMiAxLjIyMzg2IDcuMDAwMTIgMS41VjEzLjVDNy4wMDAxMiAxMy43NzYxIDcuMjIzOTggMTQgNy41MDAxMiAxNEM3Ljc3NjI2IDE0IDguMDAwMTIgMTMuNzc2MSA4LjAwMDEyIDEzLjVWMS41Wk0zLjMxODEyIDUuODE4QzMuNDkzODYgNS42NDIyNyAzLjQ5Mzg2IDUuMzU3MzQgMy4zMTgxMiA1LjE4MTYxQzMuMTQyMzkgNS4wMDU4NyAyLjg1NzQ2IDUuMDA1ODcgMi42ODE3MyA1LjE4MTYxTDAuNjgxNzI5IDcuMTgxNjFDMC41MDU5OTMgNy4zNTczNCAwLjUwNTk5MyA3LjY0MjI3IDAuNjgxNzI5IDcuODE4TDIuNjgxNzMgOS44MThDMi44NTc0NiA5Ljk5Mzc0IDMuMTQyMzkgOS45OTM3NCAzLjMxODEyIDkuODE4QzMuNDkzODYgOS42NDIyNyAzLjQ5Mzg2IDkuMzU3MzQgMy4zMTgxMiA5LjE4MTYxTDIuMDg2MzIgNy45NDk4SDUuNTAwMTdDNS43NDg3IDcuOTQ5OCA1Ljk1MDE3IDcuNzQ4MzMgNS45NTAxNyA3LjQ5OThDNS45NTAxNyA3LjI1MTI4IDUuNzQ4NyA3LjA0OTggNS41MDAxNyA3LjA0OThIMi4wODYzMkwzLjMxODEyIDUuODE4Wk0xMi4zMTgxIDUuMTgxNjFDMTIuMTQyNCA1LjAwNTg3IDExLjg1NzUgNS4wMDU4NyAxMS42ODE3IDUuMTgxNjFDMTEuNTA2IDUuMzU3MzQgMTEuNTA2IDUuNjQyMjcgMTEuNjgxNyA1LjgxOEwxMi45MTM1IDcuMDQ5OEg5LjUwMDE3QzkuMjUxNjQgNy4wNDk4IDkuMDUwMTcgNy4yNTEyOCA5LjA1MDE3IDcuNDk5OEM5LjA1MDE3IDcuNzQ4MzMgOS4yNTE2NCA3Ljk0OTggOS41MDAxNyA3Ljk0OThIMTIuOTEzNUwxMS42ODE3IDkuMTgxNjFDMTEuNTA2IDkuMzU3MzQgMTEuNTA2IDkuNjQyMjcgMTEuNjgxNyA5LjgxOEMxMS44NTc1IDkuOTkzNzQgMTIuMTQyNCA5Ljk5Mzc0IDEyLjMxODEgOS44MThMMTQuMzE4MSA3LjgxOEMxNC40OTM5IDcuNjQyMjcgMTQuNDkzOSA3LjM1NzM0IDE0LjMxODEgNy4xODE2MUwxMi4zMTgxIDUuMTgxNjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxDZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi4xNDk5OCAxNFYxSDAuODQ5OTc2VjE0SDIuMTQ5OThaTTYuMTQ5OTggMTRWMUg0Ljg0OTk4VjE0SDYuMTQ5OThaTTEwLjE1IDFWMTRIOC44NDk5OFYxSDEwLjE1Wk0xNC4xNSAxNFYxSDEyLjg1VjE0SDE0LjE1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuOTQ5NjkgNy40OTk4OUM5Ljk0OTY5IDguODUyODggOC44NTI4OCA5Ljk0OTY5IDcuNDk5ODkgOS45NDk2OUM2LjE0NjkxIDkuOTQ5NjkgNS4wNTAxIDguODUyODggNS4wNTAxIDcuNDk5ODlDNS4wNTAxIDYuMTQ2OTEgNi4xNDY5MSA1LjA1MDEgNy40OTk4OSA1LjA1MDFDOC44NTI4OCA1LjA1MDEgOS45NDk2OSA2LjE0NjkxIDkuOTQ5NjkgNy40OTk4OVpNMTAuODYzMiA4QzEwLjYyMTMgOS42NDA1NSA5LjIwNzY0IDEwLjg5OTcgNy40OTk4OSAxMC44OTk3QzUuNzkyMTQgMTAuODk5NyA0LjM3ODQ3IDkuNjQwNTUgNC4xMzY2MiA4SDAuNUMwLjIyMzg1OCA4IDAgNy43NzYxNCAwIDcuNUMwIDcuMjIzODYgMC4yMjM4NTggNyAwLjUgN0g0LjEzNjU5QzQuMzc4MzUgNS4zNTkzNSA1Ljc5MjA2IDQuMTAwMSA3LjQ5OTg5IDQuMTAwMUM5LjIwNzcyIDQuMTAwMSAxMC42MjE0IDUuMzU5MzUgMTAuODYzMiA3SDE0LjVDMTQuNzc2MSA3IDE1IDcuMjIzODYgMTUgNy41QzE1IDcuNzc2MTQgMTQuNzc2MSA4IDE0LjUgOEgxMC44NjMyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sd2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNjcxMjkgMy4xNDYzNEM0LjQ3NjAzIDMuMzQxNjEgNC40NzYwMyAzLjY1ODE5IDQuNjcxMjkgMy44NTM0NUw3LjE0NjE2IDYuMzI4MzNDNy4zNDE0MiA2LjUyMzU5IDcuNjU4MDEgNi41MjM1OSA3Ljg1MzI3IDYuMzI4MzNMMTAuMzI4MSAzLjg1MzQ1QzEwLjUyMzQgMy42NTgxOSAxMC41MjM0IDMuMzQxNjEgMTAuMzI4MSAzLjE0NjM0TDcuODUzMjcgMC42NzE0NzFDNy42NTgwMSAwLjQ3NjIwOSA3LjM0MTQyIDAuNDc2MjA5IDcuMTQ2MTYgMC42NzE0NzFMNC42NzEyOSAzLjE0NjM0Wk03LjQ5OTcxIDUuMjY3NjZMNS43MzE5NSAzLjQ5OTlMNy40OTk3MSAxLjczMjEzTDkuMjY3NDggMy40OTk5TDcuNDk5NzEgNS4yNjc2NlpNOC42NzEyOSA3LjE0NjM0QzguNDc2MDMgNy4zNDE2MSA4LjQ3NjAzIDcuNjU4MTkgOC42NzEyOSA3Ljg1MzQ1TDExLjE0NjIgMTAuMzI4M0MxMS4zNDE0IDEwLjUyMzYgMTEuNjU4IDEwLjUyMzYgMTEuODUzMyAxMC4zMjgzTDE0LjMyODEgNy44NTM0NUMxNC41MjM0IDcuNjU4MTkgMTQuNTIzNCA3LjM0MTYxIDE0LjMyODEgNy4xNDYzNEwxMS44NTMzIDQuNjcxNDdDMTEuNjU4IDQuNDc2MjEgMTEuMzQxNCA0LjQ3NjIxIDExLjE0NjIgNC42NzE0N0w4LjY3MTI5IDcuMTQ2MzRaTTExLjQ5OTcgOS4yNjc2Nkw5LjczMTk1IDcuNDk5OUwxMS40OTk3IDUuNzMyMTNMMTMuMjY3NSA3LjQ5OTlMMTEuNDk5NyA5LjI2NzY2Wk00LjY3MTI5IDExLjg1MzVDNC40NzYwMyAxMS42NTgyIDQuNDc2MDMgMTEuMzQxNiA0LjY3MTI5IDExLjE0NjNMNy4xNDYxNiA4LjY3MTQ3QzcuMzQxNDIgOC40NzYyMSA3LjY1ODAxIDguNDc2MjEgNy44NTMyNyA4LjY3MTQ3TDEwLjMyODEgMTEuMTQ2M0MxMC41MjM0IDExLjM0MTYgMTAuNTIzNCAxMS42NTgyIDEwLjMyODEgMTEuODUzNUw3Ljg1MzI3IDE0LjMyODNDNy42NTgwMSAxNC41MjM2IDcuMzQxNDIgMTQuNTIzNiA3LjE0NjE2IDE0LjMyODNMNC42NzEyOSAxMS44NTM1Wk01LjczMTk1IDExLjQ5OTlMNy40OTk3MSAxMy4yNjc3TDkuMjY3NDggMTEuNDk5OUw3LjQ5OTcxIDkuNzMyMTNMNS43MzE5NSAxMS40OTk5Wk0wLjY3MTI4OCA3LjE0NjQ5QzAuNDc2MDI2IDcuMzQxNzUgMC40NzYwMjYgNy42NTgzNCAwLjY3MTI4OCA3Ljg1MzZMMy4xNDYxNiAxMC4zMjg1QzMuMzQxNDIgMTAuNTIzNyAzLjY1ODAxIDEwLjUyMzcgMy44NTMyNyAxMC4zMjg1TDYuMzI4MTQgNy44NTM2QzYuNTIzNCA3LjY1ODM0IDYuNTIzNCA3LjM0MTc1IDYuMzI4MTQgNy4xNDY0OUwzLjg1MzI3IDQuNjcxNjJDMy42NTgwMSA0LjQ3NjM2IDMuMzQxNDIgNC40NzYzNiAzLjE0NjE2IDQuNjcxNjJMMC42NzEyODggNy4xNDY0OVpNMy40OTk3MiA5LjI2NzgxTDEuNzMxOTUgNy41MDAwNUwzLjQ5OTcyIDUuNzMyMjhMNS4yNjc0OCA3LjUwMDA1TDMuNDk5NzIgOS4yNjc4MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjg3OTM1IDFIMy45SDExLjFIMTEuMTIwN0MxMS41MjMxIDAuOTk5OTk0IDExLjg1NTMgMC45OTk5ODkgMTIuMTI1OSAxLjAyMjFDMTIuNDA3IDEuMDQ1MDYgMTIuNjY1MyAxLjA5NDM0IDEyLjkwOCAxLjIxNzk5QzEzLjI4NDMgMS40MDk3MyAxMy41OTAzIDEuNzE1NyAxMy43ODIgMi4wOTIwMkMxMy45MDU3IDIuMzM0NjkgMTMuOTU0OSAyLjU5MzA0IDEzLjk3NzkgMi44NzQwOUMxNCAzLjE0NDY4IDE0IDMuNDc2ODYgMTQgMy44NzkzNFYzLjlWMTEuMVYxMS4xMjA3QzE0IDExLjUyMzEgMTQgMTEuODU1MyAxMy45Nzc5IDEyLjEyNTlDMTMuOTU0OSAxMi40MDcgMTMuOTA1NyAxMi42NjUzIDEzLjc4MiAxMi45MDhDMTMuNTkwMyAxMy4yODQzIDEzLjI4NDMgMTMuNTkwMyAxMi45MDggMTMuNzgyQzEyLjY2NTMgMTMuOTA1NyAxMi40MDcgMTMuOTU0OSAxMi4xMjU5IDEzLjk3NzlDMTEuODU1MyAxNCAxMS41MjMxIDE0IDExLjEyMDcgMTRIMTEuMUgzLjlIMy44NzkzNEMzLjQ3Njg2IDE0IDMuMTQ0NjggMTQgMi44NzQwOSAxMy45Nzc5QzIuNTkzMDQgMTMuOTU0OSAyLjMzNDY5IDEzLjkwNTcgMi4wOTIwMiAxMy43ODJDMS43MTU3IDEzLjU5MDMgMS40MDk3MyAxMy4yODQzIDEuMjE3OTkgMTIuOTA4QzEuMDk0MzQgMTIuNjY1MyAxLjA0NTA2IDEyLjQwNyAxLjAyMjEgMTIuMTI1OUMwLjk5OTk4OSAxMS44NTUzIDAuOTk5OTk0IDExLjUyMzEgMSAxMS4xMjA3VjExLjEyMDdWMTEuMVYzLjlWMy44NzkzNVYzLjg3OTM0QzAuOTk5OTk0IDMuNDc2ODYgMC45OTk5ODkgMy4xNDQ2OCAxLjAyMjEgMi44NzQwOUMxLjA0NTA2IDIuNTkzMDQgMS4wOTQzNCAyLjMzNDY5IDEuMjE3OTkgMi4wOTIwMkMxLjQwOTczIDEuNzE1NyAxLjcxNTcgMS40MDk3MyAyLjA5MjAyIDEuMjE3OTlDMi4zMzQ2OSAxLjA5NDM0IDIuNTkzMDQgMS4wNDUwNiAyLjg3NDA5IDEuMDIyMUMzLjE0NDY5IDAuOTk5OTg5IDMuNDc2ODcgMC45OTk5OTQgMy44NzkzNSAxWk0yLjk1NTUyIDIuMDE4NzhDMi43MzYzMSAyLjAzNjY5IDIuNjI0MjEgMi4wNjkxNSAyLjU0NjAxIDIuMTA4OTlDMi4zNTc4NSAyLjIwNDg3IDIuMjA0ODcgMi4zNTc4NSAyLjEwODk5IDIuNTQ2MDFDMi4wNjkxNSAyLjYyNDIxIDIuMDM2NjkgMi43MzYzMSAyLjAxODc4IDIuOTU1NTJDMi4wMDAzOSAzLjE4MDU2IDIgMy40NzE3MSAyIDMuOVY3SDdWMkgzLjlDMy40NzE3MSAyIDMuMTgwNTYgMi4wMDAzOSAyLjk1NTUyIDIuMDE4NzhaTTcgOEgyVjExLjFDMiAxMS41MjgzIDIuMDAwMzkgMTEuODE5NCAyLjAxODc4IDEyLjA0NDVDMi4wMzY2OSAxMi4yNjM3IDIuMDY5MTUgMTIuMzc1OCAyLjEwODk5IDEyLjQ1NEMyLjIwNDg3IDEyLjY0MjIgMi4zNTc4NSAxMi43OTUxIDIuNTQ2MDEgMTIuODkxQzIuNjI0MjEgMTIuOTMwOSAyLjczNjMxIDEyLjk2MzMgMi45NTU1MiAxMi45ODEyQzMuMTgwNTYgMTIuOTk5NiAzLjQ3MTcxIDEzIDMuOSAxM0g3VjhaTTggOEgxM1YxMS4xQzEzIDExLjUyODMgMTIuOTk5NiAxMS44MTk0IDEyLjk4MTIgMTIuMDQ0NUMxMi45NjMzIDEyLjI2MzcgMTIuOTMwOSAxMi4zNzU4IDEyLjg5MSAxMi40NTRDMTIuNzk1MSAxMi42NDIyIDEyLjY0MjIgMTIuNzk1MSAxMi40NTQgMTIuODkxQzEyLjM3NTggMTIuOTMwOSAxMi4yNjM3IDEyLjk2MzMgMTIuMDQ0NSAxMi45ODEyQzExLjgxOTQgMTIuOTk5NiAxMS41MjgzIDEzIDExLjEgMTNIOFY4Wk0xMyA3SDhWMkgxMS4xQzExLjUyODMgMiAxMS44MTk0IDIuMDAwMzkgMTIuMDQ0NSAyLjAxODc4QzEyLjI2MzcgMi4wMzY2OSAxMi4zNzU4IDIuMDY5MTUgMTIuNDU0IDIuMTA4OTlDMTIuNjQyMiAyLjIwNDg3IDEyLjc5NTEgMi4zNTc4NSAxMi44OTEgMi41NDYwMUMxMi45MzA5IDIuNjI0MjEgMTIuOTYzMyAyLjczNjMxIDEyLjk4MTIgMi45NTU1MkMxMi45OTk2IDMuMTgwNTYgMTMgMy40NzE3MSAxMyAzLjlWN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHhlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03Ljg1MzY3IDEuNDg5NTZDNy42NTg0MSAxLjI5NDI5IDcuMzQxODIgMS4yOTQyOSA3LjE0NjU2IDEuNDg5NTZMMS40ODk3MSA3LjE0NjQxQzEuMjk0NDUgNy4zNDE2NyAxLjI5NDQ1IDcuNjU4MjUgMS40ODk3MSA3Ljg1MzUyTDcuMTQ2NTYgMTMuNTEwNEM3LjM0MTgyIDEzLjcwNTYgNy42NTg0MSAxMy43MDU2IDcuODUzNjcgMTMuNTEwNEwxMy41MTA1IDcuODUzNTJDMTMuNzA1OCA3LjY1ODI1IDEzLjcwNTggNy4zNDE2NyAxMy41MTA1IDcuMTQ2NDFMNy44NTM2NyAxLjQ4OTU2Wk03LjUgMi41NTAzM0wyLjU1MDM3IDcuNDk5OTZMNy41IDEyLjQ0OTZWMi41NTAzM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF9lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjE0NjUgMS40ODk1OUM3LjM0MTc2IDEuMjk0MzIgNy42NTgzNSAxLjI5NDMyIDcuODUzNjEgMS40ODk1OUwxMy41MTA1IDcuMTQ2NDRDMTMuNzA1NyA3LjM0MTcgMTMuNzA1NyA3LjY1ODI5IDEzLjUxMDUgNy44NTM1NUw3Ljg1MzYxIDEzLjUxMDRDNy42NTgzNSAxMy43MDU3IDcuMzQxNzYgMTMuNzA1NyA3LjE0NjUgMTMuNTEwNEwxLjQ4OTY1IDcuODUzNTVDMS4yOTQzOSA3LjY1ODI5IDEuMjk0MzkgNy4zNDE3IDEuNDg5NjUgNy4xNDY0NEw3LjE0NjUgMS40ODk1OVpNNy41MDAwNSAyLjU1MDI1TDIuNTUwMzEgNy40OTk5OUw3LjUwMDA1IDEyLjQ0OTdMMTIuNDQ5OCA3LjQ5OTk5TDcuNTAwMDUgMi41NTAyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE9lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03Ljg1MzYxIDEuNDg5NTlDNy42NTgzNSAxLjI5NDMyIDcuMzQxNzYgMS4yOTQzMiA3LjE0NjUgMS40ODk1OUwxLjQ4OTY1IDcuMTQ2NDRDMS4yOTQzOSA3LjM0MTcgMS4yOTQzOSA3LjY1ODI5IDEuNDg5NjUgNy44NTM1NUwzLjk2NDUgMTAuMzI4NEwxLjY0NjQ0IDEyLjY0NjRDMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTMuMTU4MyAxLjY0NjQ0IDEzLjM1MzZDMS44NDE3MSAxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAyLjM1MzU1IDEzLjM1MzZMNC42NzE2IDExLjAzNTVMNy4xNDY1IDEzLjUxMDRDNy4zNDE3NiAxMy43MDU3IDcuNjU4MzUgMTMuNzA1NyA3Ljg1MzYxIDEzLjUxMDRMMTMuNTEwNSA3Ljg1MzU1QzEzLjcwNTcgNy42NTgyOSAxMy43MDU3IDcuMzQxNyAxMy41MTA1IDcuMTQ2NDRMMTEuMDM1NiA0LjY3MTU0TDEzLjM1MzUgMi4zNTM1NUMxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAxLjg0MTcxIDEzLjM1MzUgMS42NDY0NUMxMy4xNTgzIDEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEyLjY0NjQgMS42NDY0NUwxMC4zMjg1IDMuOTY0NDNMNy44NTM2MSAxLjQ4OTU5Wk05LjYyMTM1IDQuNjcxNTRMNy41MDAwNSAyLjU1MDI1TDIuNTUwMzEgNy40OTk5OUw0LjY3MTYgOS42MjEyOUw5LjYyMTM1IDQuNjcxNTRaTTUuMzc4NzEgMTAuMzI4NEw3LjUwMDA1IDEyLjQ0OTdMMTIuNDQ5OCA3LjQ5OTk5TDEwLjMyODUgNS4zNzg2NUw1LjM3ODcxIDEwLjMyODRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxMZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuODAzNCA3LjE0NjQ0QzEyLjk5ODYgNi45NTExOCAxMy4zMTUyIDYuOTUxMTggMTMuNTEwNSA3LjE0NjQ0QzEzLjcwNTcgNy4zNDE3IDEzLjcwNTcgNy42NTgyOSAxMy41MTA1IDcuODUzNTVDMTMuMzE1MiA4LjA0ODgxIDEyLjk5ODYgOC4wNDg4MSAxMi44MDM0IDcuODUzNTVDMTIuNjA4MSA3LjY1ODI4IDEyLjYwODEgNy4zNDE3IDEyLjgwMzQgNy4xNDY0NFpNMTIuMDk2MiA4LjU2MDY1QzEyLjI5MTUgOC43NTU5MiAxMi4yOTE1IDkuMDcyNSAxMi4wOTYyIDkuMjY3NzZDMTEuOTAxIDkuNDYzMDIgMTEuNTg0NCA5LjQ2MzAyIDExLjM4OTEgOS4yNjc3NkMxMS4xOTM5IDkuMDcyNSAxMS4xOTM5IDguNzU1OTIgMTEuMzg5MSA4LjU2MDY1QzExLjU4NDQgOC4zNjUzOSAxMS45MDEgOC4zNjUzOSAxMi4wOTYyIDguNTYwNjVaTTEwLjY4MiA5Ljk3NDg3QzEwLjg3NzMgMTAuMTcwMSAxMC44NzczIDEwLjQ4NjcgMTAuNjgyIDEwLjY4MkMxMC40ODY4IDEwLjg3NzIgMTAuMTcwMiAxMC44NzcyIDkuOTc0OTMgMTAuNjgyQzkuNzc5NjcgMTAuNDg2NyA5Ljc3OTY3IDEwLjE3MDEgOS45NzQ5MyA5Ljk3NDg3QzEwLjE3MDIgOS43Nzk2IDEwLjQ4NjggOS43Nzk2IDEwLjY4MiA5Ljk3NDg3Wk05LjI2NzgyIDExLjM4OTFDOS40NjMwOCAxMS41ODQzIDkuNDYzMDggMTEuOTAwOSA5LjI2NzgyIDEyLjA5NjJDOS4wNzI1NiAxMi4yOTE1IDguNzU1OTggMTIuMjkxNSA4LjU2MDcxIDEyLjA5NjJDOC4zNjU0NSAxMS45MDA5IDguMzY1NDUgMTEuNTg0MyA4LjU2MDcyIDExLjM4OTFDOC43NTU5OCAxMS4xOTM4IDkuMDcyNTYgMTEuMTkzOCA5LjI2NzgyIDExLjM4OTFaTTcuMTQ2NSAxMy41MTA0QzYuOTUxMjQgMTMuMzE1MSA2Ljk1MTI0IDEyLjk5ODYgNy4xNDY1IDEyLjgwMzNDNy4xNzA5MSAxMi43Nzg5IDcuMTk3MjEgMTIuNzU3NSA3LjIyNDk0IDEyLjczOTJDNy40MTkwMSAxMi42MTExIDcuNjgyNzUgMTIuNjMyNCA3Ljg1MzYxIDEyLjgwMzNDOC4wNDg4NyAxMi45OTg2IDguMDQ4ODcgMTMuMzE1MSA3Ljg1MzYxIDEzLjUxMDRDNy42NTgzNSAxMy43MDU3IDcuMzQxNzYgMTMuNzA1NyA3LjE0NjUgMTMuNTEwNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuOTAzODYgOC41NjA2NUMyLjcwODYgOC43NTU5MiAyLjcwODYgOS4wNzI1IDIuOTAzODYgOS4yNjc3NiAzLjA5OTEyIDkuNDYzMDIgMy40MTU3MSA5LjQ2MzAyIDMuNjEwOTcgOS4yNjc3NiAzLjgwNjIzIDkuMDcyNSAzLjgwNjIzIDguNzU1OTIgMy42MTA5NyA4LjU2MDY1IDMuNDE1NzEgOC4zNjUzOSAzLjA5OTEyIDguMzY1MzkgMi45MDM4NiA4LjU2MDY1ek00LjMxODA3IDkuOTc0ODdDNC4xMjI4MSAxMC4xNzAxIDQuMTIyODEgMTAuNDg2NyA0LjMxODA3IDEwLjY4MiA0LjUxMzM0IDEwLjg3NzIgNC44Mjk5MiAxMC44NzcyIDUuMDI1MTggMTAuNjgyIDUuMjIwNDQgMTAuNDg2NyA1LjIyMDQ0IDEwLjE3MDEgNS4wMjUxOCA5Ljk3NDg3IDQuODI5OTIgOS43Nzk2IDQuNTEzMzQgOS43Nzk2IDQuMzE4MDcgOS45NzQ4N3pNNS43MzIyOSAxMS4zODkxQzUuNTM3MDMgMTEuNTg0MyA1LjUzNzAzIDExLjkwMDkgNS43MzIyOSAxMi4wOTYyIDUuOTI3NTUgMTIuMjkxNCA2LjI0NDEzIDEyLjI5MTUgNi40MzkzOSAxMi4wOTYyIDYuNjM0NjYgMTEuOTAwOSA2LjYzNDY2IDExLjU4NDMgNi40MzkzOSAxMS4zODkxIDYuMjQ0MTMgMTEuMTkzOCA1LjkyNzU1IDExLjE5MzggNS43MzIyOSAxMS4zODkxek0yLjE5Njc1IDcuODUzNTVDMi4zNjc2MSA3LjY4MjY5IDIuMzg4OTcgNy40MTg5NSAyLjI2MDgyIDcuMjI0ODggMi4wOTA0NiA2Ljk2Njg0IDEuNzEwNjMgNi45MjU0NiAxLjQ4OTY1IDcuMTQ2NDQgMS4yOTQzOSA3LjM0MTcgMS4yOTQzOSA3LjY1ODI5IDEuNDg5NjUgNy44NTM1NSAxLjY4NDkxIDguMDQ4ODEgMi4wMDE0OSA4LjA0ODgxIDIuMTk2NzUgNy44NTM1NXpNMy42MTA5NyA1LjczMjIzQzMuNDE1NzEgNS41MzY5NiAzLjA5OTEyIDUuNTM2OTYgMi45MDM4NiA1LjczMjIzIDIuNzA4NiA1LjkyNzQ5IDIuNzA4NiA2LjI0NDA3IDIuOTAzODYgNi40MzkzMyAzLjA5OTEyIDYuNjM0NiAzLjQxNTcxIDYuNjM0NiAzLjYxMDk3IDYuNDM5MzMgMy44MDYyMyA2LjI0NDA3IDMuODA2MjMgNS45Mjc0OSAzLjYxMDk3IDUuNzMyMjN6TTUuMDI1MTggNC4zMTgwMUM0LjgyOTkyIDQuMTIyNzUgNC41MTMzNCA0LjEyMjc1IDQuMzE4MDcgNC4zMTgwMSA0LjEyMjgxIDQuNTEzMjggNC4xMjI4MSA0LjgyOTg2IDQuMzE4MDcgNS4wMjUxMiA0LjUxMzM0IDUuMjIwMzggNC44Mjk5MiA1LjIyMDM4IDUuMDI1MTggNS4wMjUxMiA1LjIyMDQ0IDQuODI5ODYgNS4yMjA0NCA0LjUxMzI4IDUuMDI1MTggNC4zMTgwMXpNNi40MzkzOSAyLjkwMzhDNi4yNDQxMyAyLjcwODU0IDUuOTI3NTUgMi43MDg1NCA1LjczMjI5IDIuOTAzOCA1LjUzNzAzIDMuMDk5MDYgNS41MzcwMyAzLjQxNTY0IDUuNzMyMjkgMy42MTA5MSA1LjkyNzU1IDMuODA2MTcgNi4yNDQxMyAzLjgwNjE3IDYuNDM5MzkgMy42MTA5MSA2LjYzNDY2IDMuNDE1NjQgNi42MzQ2NiAzLjA5OTA2IDYuNDM5MzkgMi45MDM4ek03Ljg1MzYxIDEuNDg5NTlDNy42NTgzNSAxLjI5NDMyIDcuMzQxNzYgMS4yOTQzMiA3LjE0NjUgMS40ODk1OSA2Ljk1MTI0IDEuNjg0ODUgNi45NTEyNCAyLjAwMTQzIDcuMTQ2NSAyLjE5NjY5IDcuMzQxNzYgMi4zOTE5NiA3LjY1ODM1IDIuMzkxOTYgNy44NTM2MSAyLjE5NjY5IDguMDQ4ODcgMi4wMDE0MyA4LjA0ODg3IDEuNjg0ODUgNy44NTM2MSAxLjQ4OTU5ek05LjI2NzgyIDIuOTAzOEM5LjA3MjU2IDIuNzA4NTQgOC43NTU5OCAyLjcwODU0IDguNTYwNzEgMi45MDM4IDguMzY1NDUgMy4wOTkwNiA4LjM2NTQ1IDMuNDE1NjQgOC41NjA3MSAzLjYxMDkxIDguNzU1OTggMy44MDYxNyA5LjA3MjU2IDMuODA2MTcgOS4yNjc4MiAzLjYxMDkxIDkuNDYzMDggMy40MTU2NCA5LjQ2MzA4IDMuMDk5MDYgOS4yNjc4MiAyLjkwMzh6TTEwLjY4MiA0LjMxODAxQzEwLjQ4NjggNC4xMjI3NSAxMC4xNzAyIDQuMTIyNzUgOS45NzQ5MyA0LjMxODAxIDkuNzc5NjcgNC41MTMyOCA5Ljc3OTY3IDQuODI5ODYgOS45NzQ5MyA1LjAyNTEyIDEwLjE3MDIgNS4yMjAzOCAxMC40ODY4IDUuMjIwMzggMTAuNjgyIDUuMDI1MTIgMTAuODc3MyA0LjgyOTg2IDEwLjg3NzMgNC41MTMyOCAxMC42ODIgNC4zMTgwMXpNMTIuMDk2MiA1LjczMjIzQzExLjkwMSA1LjUzNjk2IDExLjU4NDQgNS41MzY5NiAxMS4zODkxIDUuNzMyMjMgMTEuMTkzOSA1LjkyNzQ5IDExLjE5MzkgNi4yNDQwNyAxMS4zODkxIDYuNDM5MzMgMTEuNTg0NCA2LjYzNDYgMTEuOTAxIDYuNjM0NiAxMi4wOTYyIDYuNDM5MzMgMTIuMjkxNSA2LjI0NDA3IDEyLjI5MTUgNS45Mjc0OSAxMi4wOTYyIDUuNzMyMjN6XCIsZmlsbDpufSkpfSxFZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAxLjVDMiAxLjc3NjE0IDEuNzc2MTQgMiAxLjUgMkMxLjIyMzg2IDIgMSAxLjc3NjE0IDEgMS41QzEgMS4yMjM4NiAxLjIyMzg2IDEgMS41IDFDMS43NzYxNCAxIDIgMS4yMjM4NiAyIDEuNVpNNSAxM0gxMFYyTDUgMkw1IDEzWk00IDEzQzQgMTMuNTUyMyA0LjQ0NzcyIDE0IDUgMTRIMTBDMTAuNTUyMyAxNCAxMSAxMy41NTIzIDExIDEzVjJDMTEgMS40NDc3MiAxMC41NTIzIDEgMTAgMUg1QzQuNDQ3NzIgMSA0IDEuNDQ3NzEgNCAyVjEzWk0xMy41IDJDMTMuNzc2MSAyIDE0IDEuNzc2MTQgMTQgMS41QzE0IDEuMjIzODYgMTMuNzc2MSAxIDEzLjUgMUMxMy4yMjM5IDEgMTMgMS4yMjM4NiAxMyAxLjVDMTMgMS43NzYxNCAxMy4yMjM5IDIgMTMuNSAyWk0yIDMuNUMyIDMuNzc2MTQgMS43NzYxNCA0IDEuNSA0QzEuMjIzODYgNCAxIDMuNzc2MTQgMSAzLjVDMSAzLjIyMzg2IDEuMjIzODYgMyAxLjUgM0MxLjc3NjE0IDMgMiAzLjIyMzg2IDIgMy41Wk0xMy41IDRDMTMuNzc2MSA0IDE0IDMuNzc2MTQgMTQgMy41QzE0IDMuMjIzODYgMTMuNzc2MSAzIDEzLjUgM0MxMy4yMjM5IDMgMTMgMy4yMjM4NiAxMyAzLjVDMTMgMy43NzYxNCAxMy4yMjM5IDQgMTMuNSA0Wk0yIDUuNUMyIDUuNzc2MTQgMS43NzYxNCA2IDEuNSA2QzEuMjIzODYgNiAxIDUuNzc2MTQgMSA1LjVDMSA1LjIyMzg2IDEuMjIzODYgNSAxLjUgNUMxLjc3NjE0IDUgMiA1LjIyMzg2IDIgNS41Wk0xMy41IDZDMTMuNzc2MSA2IDE0IDUuNzc2MTQgMTQgNS41QzE0IDUuMjIzODYgMTMuNzc2MSA1IDEzLjUgNUMxMy4yMjM5IDUgMTMgNS4yMjM4NiAxMyA1LjVDMTMgNS43NzYxNCAxMy4yMjM5IDYgMTMuNSA2Wk0yIDcuNUMyIDcuNzc2MTQgMS43NzYxNCA4IDEuNSA4QzEuMjIzODYgOCAxIDcuNzc2MTQgMSA3LjVDMSA3LjIyMzg2IDEuMjIzODYgNyAxLjUgN0MxLjc3NjE0IDcgMiA3LjIyMzg2IDIgNy41Wk0xMy41IDhDMTMuNzc2MSA4IDE0IDcuNzc2MTQgMTQgNy41QzE0IDcuMjIzODYgMTMuNzc2MSA3IDEzLjUgN0MxMy4yMjM5IDcgMTMgNy4yMjM4NiAxMyA3LjVDMTMgNy43NzYxNCAxMy4yMjM5IDggMTMuNSA4Wk0yIDkuNUMyIDkuNzc2MTQgMS43NzYxNCAxMCAxLjUgMTBDMS4yMjM4NiAxMCAxIDkuNzc2MTQgMSA5LjVDMSA5LjIyMzg2IDEuMjIzODYgOSAxLjUgOUMxLjc3NjE0IDkgMiA5LjIyMzg2IDIgOS41Wk0xMy41IDEwQzEzLjc3NjEgMTAgMTQgOS43NzYxNCAxNCA5LjVDMTQgOS4yMjM4NiAxMy43NzYxIDkgMTMuNSA5QzEzLjIyMzkgOSAxMyA5LjIyMzg2IDEzIDkuNUMxMyA5Ljc3NjE0IDEzLjIyMzkgMTAgMTMuNSAxMFpNMiAxMS41QzIgMTEuNzc2MSAxLjc3NjE0IDEyIDEuNSAxMkMxLjIyMzg2IDEyIDEgMTEuNzc2MSAxIDExLjVDMSAxMS4yMjM5IDEuMjIzODYgMTEgMS41IDExQzEuNzc2MTQgMTEgMiAxMS4yMjM5IDIgMTEuNVpNMTMuNSAxMkMxMy43NzYxIDEyIDE0IDExLjc3NjEgMTQgMTEuNUMxNCAxMS4yMjM5IDEzLjc3NjEgMTEgMTMuNSAxMUMxMy4yMjM5IDExIDEzIDExLjIyMzkgMTMgMTEuNUMxMyAxMS43NzYxIDEzLjIyMzkgMTIgMTMuNSAxMlpNMiAxMy41QzIgMTMuNzc2MSAxLjc3NjE0IDE0IDEuNSAxNEMxLjIyMzg2IDE0IDEgMTMuNzc2MSAxIDEzLjVDMSAxMy4yMjM5IDEuMjIzODYgMTMgMS41IDEzQzEuNzc2MTQgMTMgMiAxMy4yMjM5IDIgMTMuNVpNMTMuNSAxNEMxMy43NzYxIDE0IDE0IDEzLjc3NjEgMTQgMTMuNUMxNCAxMy4yMjM5IDEzLjc3NjEgMTMgMTMuNSAxM0MxMy4yMjM5IDEzIDEzIDEzLjIyMzkgMTMgMTMuNUMxMyAxMy43NzYxIDEzLjIyMzkgMTQgMTMuNSAxNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFNlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi4wNjk3IDEuNzY3NDZDMTIuNDgwNyAxLjIxOTQ3IDExLjQ2MDUgMC40NTQzMTEgMTEuMDQ5NSAxLjAwMjNDMTAuNjM4NSAxLjU1MDI4IDExLjY1ODggMi4zMTU0NCAxMi4wNjk3IDEuNzY3NDZaTTguMzkyNjMgMS4wNzgxMUM3LjE1NTg1IDAuOTUwNjAyIDUuNzgyMyAxLjE2MzQ4IDQuNTg0MzMgMS43MDkzN0MzLjM4NTUyIDIuMjU1NjMgMi4zMjczNSAzLjE1MzA5IDEuNzg4NDQgNC40MTgzMkMxLjM3NTc0IDUuMzg3MjQgMS4wMTcxNSA2LjI4MTEzIDEuMDAwODggNy40NDM1NEMwLjk4NDcyNCA4LjU5ODQ0IDEuMzA1MjIgOS45Njg5OCAyLjEzMTc0IDExLjkyOEMyLjYxMTQyIDEzLjA2NDkgNC4wMzk2MyAxMy41NDQ2IDUuMTM4OTUgMTMuODA3OUM2LjQwODM2IDE0LjExMTkgNy44MDg1NyAxNC4xOTE0IDguNjY0NCAxNC4wNzQyQzkuMzY1MTUgMTMuOTc4MiAxMC4xNDQ4IDEzLjgyODQgMTAuNzk4NyAxMy4yOTdDMTEuODk3NyAxMi40MDM5IDEyLjkwMDkgMTEuMzk1NSAxMy40OTk0IDEwLjMzOTNDMTQuMTA0IDkuMjcyMjEgMTQuMzI1NiA4LjA5MjA3IDEzLjcyMTYgNi45NTMyNEMxMy41NjI4IDYuNjUzNzMgMTMuMzE2IDYuNTc3MzQgMTMuMDQxMiA2LjQ5MjNDMTIuOTM3NCA2LjQ2MDE2IDEyLjgyOTUgNi40MjY3OCAxMi43MjA5IDYuMzc5NjZDMTEuNjIxMSA1LjkwMjM0IDEwLjk2NDYgNS4zNDk2MyAxMC45MTM1IDUuMDI4NzZDMTAuODY1NiA0LjcyODA4IDEwLjkyMjEgNC41MTQ2MyAxMC45ODExIDQuMjkxODFDMTEuMDEyOSA0LjE3MTk5IDExLjA0NTMgNC4wNDk0NyAxMS4wNjI2IDMuOTA5MjJDMTEuMDgzOCAzLjczNzM3IDExLjA4MTQgMy4zMzMxOSAxMC42OTk2IDMuMTI3NjFDMTAuNDA0OCAyLjk2ODg4IDEwLjIxNjQgMi42NTg0MyAxMC4wNDA3IDIuMzY5MDRDOS45OTc0MiAyLjI5Nzc1IDkuOTU0OTIgMi4yMjc3MyA5LjkxMTggMi4xNjE1OEM5LjYyNjM0IDEuNzIzNjcgOS4yMDc2OSAxLjE2MjEzIDguMzkyNjMgMS4wNzgxMVpNNC45OTg5OSAyLjYxOTM1QzMuOTY0ODMgMy4wOTA1OCAzLjEyNTU0IDMuODMwOTcgMi43MDg0NiA0LjgxMDE4QzIuMjk4MDggNS43NzM2OCAyLjAxNDA2IDYuNTA4NzMgMi4wMDA3OSA3LjQ1NzUzQzEuOTg3NDEgOC40MTM4NSAyLjI1MDQzIDkuNjM2OCAzLjA1MzEgMTEuNTM5M0MzLjM5MTgxIDEyLjM0MjEgNC42MjE2NyAxMi42NTU3IDUuMzcxODYgMTIuODM1NEM2LjU0OTMgMTMuMTE3NCA3LjgyMiAxMy4xODAyIDguNTI4NjggMTMuMDgzNEM5LjIxMjcxIDEyLjk4OTcgOS43NDU2OCAxMi44NjQyIDEwLjE2ODEgMTIuNTIwOUMxMS4yMjkgMTEuNjU4NyAxMi4xMjEgMTAuNzQzNSAxMi42MjkzIDkuODQ2MzVDMTIuOTM0OSA5LjMwNzA5IDEzLjUxNDEgNy43MDI4IDEyLjYyOTIgNy4zODczQzEwLjc1MzkgNi43MTg3NSAxMC4yNjIgNi4wNjY2OSA5Ljk5MDExIDUuNDEyNjhDOS44MDkxNSA0Ljk3NzQ0IDkuODI4NjggNC41MjI4MiA5Ljk1NzQxIDQuMDc4ODVMOS45NTc0MSA0LjA3ODg0QzkuOTc2NjIgNC4wMTI2IDkuOTk1MzggMy45NDc5MSAxMC4wMzM0IDMuODg4ODJDOS44MTg1NyAzLjczNjc2IDkuNjUxNSAzLjU1MTk1IDkuNTE0NjQgMy4zNzE1QzkuNDI4NzYgMy4yNTgyOCA5LjM0NjkgMy4xMjA5OSA5LjI2MTk3IDIuOTc4NTZDOS4wMTg2NiAyLjU3MDUyIDguNzUwMTggMi4xMjAyNyA4LjI5MDA4IDIuMDcyODNDNy4yMjg4OSAxLjk2MzQzIDYuMDMzOTggMi4xNDc3MiA0Ljk5ODk5IDIuNjE5MzVaTTEzLjIwODEgMy43NzQ3MUMxMy40NDEgMy4yMjY3MSAxMi40NTQ3IDIuNjM2MDYgMTIuMDgyMiAzLjEwMTYzQzExLjU4MTcgMy43MjczMiAxMi45MDI5IDQuNDkyODEgMTMuMjA4MSAzLjc3NDcxWk0xNC4zNjcyIDIuMjYwMzFDMTQuOTY2OCAyLjI3NDkzIDE1LjE1NTEgMS4xMTYwMyAxNC41NzE4IDAuOTQ5MzcxQzEzLjgwNzYgMC43MzEwMjYgMTMuNTkxOCAyLjI0MTM5IDE0LjM2NzIgMi4yNjAzMVpNMTQuMjg1NyA1LjA5MDk4QzE0Ljg2NDQgNS4xMDAwNCAxNS4wNDYyIDQuMzgyMjIgMTQuNDgzMiA0LjI3ODk5QzEzLjc0NTUgNC4xNDM3NSAxMy41MzczIDUuMDc5MjcgMTQuMjg1NyA1LjA5MDk4Wk02LjkwNzUgNC4yODY3MkM2LjQ2ODk4IDQuNjY3NTQgNi4wNTIyIDQuMTUxODUgNS45Nzk4MyAzLjczNjVDNS44Njg0OCAzLjA5NzQ0IDYuMzM2OTYgMi41Njg1NiA2Ljk0ODIzIDIuOTExNTZDNy40MzM0NCAzLjE4MzgyIDcuMjY2NzggMy45NzQ3MSA2LjkwNzUgNC4yODY3MlpNNC45NDQ1NSA1Ljg4MTg0QzUuNDA4ODUgNS40MTc1NCA0LjU5NTY3IDQuNTcwMTMgNC4xMTQyNSA1LjA1MTU0QzMuODMzMzggNS4zMzI0MiA0LjAwOTM2IDUuNjUzNzYgNC4yMzc0NCA1Ljg4MTg0QzQuNDMyNzEgNi4wNzcxIDQuNzQ5MjkgNi4wNzcxIDQuOTQ0NTUgNS44ODE4NFpNNi45NzcxNiA2LjcxOTg0QzcuMzExODEgNy4zODkxNCA4LjQ4ODA0IDYuNzkxNTkgNy45OTQxMyA2LjE0Nzg4QzcuODY1MTkgNS45Nzk4MyA3LjY4NjU3IDUuOTQ5NCA3LjYyMTQ1IDUuOTQyMDdDNy4yMTIxNyA1Ljg5NjAxIDYuNzYzNDkgNi4yOTI1IDYuOTc3MTYgNi43MTk4NFpNNi45ODc5OCA4LjcyNDYxQzcuMTQwNjYgOS4xMTg4IDcuNTExMjIgOS4zMTg3IDcuOTE5MTUgOS4xNjMzQzguMjc0MzQgOS4wMjc5OSA4LjMzMTg2IDguMzk2ODkgOC4xNzE3NSA4LjA3NDI3QzguMDIzMzEgNy43NzUxNCA3LjYzOTU2IDcuNjc3OTMgNy4zMzc0NyA3Ljc5NDE3QzYuOTg1MTIgNy45Mjk3NiA2Ljg1NjcyIDguMzg3MDggNi45ODU3NiA4LjcxODg5TDYuOTg3OTggOC43MjQ2MVpNMTAuMzg4NSA4Ljg0MDgxQzEwLjc1NzUgOC42NTY2IDExLjQ2MTcgOC44Mjc3MSAxMS40NjE3IDkuMzExOTlDMTEuNDYxNyA5LjcxMjg2IDEwLjk1ODcgMTAuMjE2NSAxMC41NjM0IDEwLjI4MjZDMTAuMTgxMyAxMC4zNDY1IDkuNzA1MTUgOS45NzU4MSA5Ljc2NjQ4IDkuNTc3MThDOS44MTQ0NSA5LjI2NTM5IDEwLjEyMTcgOC45NzQwMSAxMC4zODg1IDguODQwODFaTTcuNTY3MDQgMTAuODQzMkM3LjMzNDYxIDEwLjc1MDIgNy4xNDM1MyAxMC44NjAxIDcuMTE0MzcgMTAuODc2OUw3LjExMjc5IDEwLjg3NzhDNi45MDc4MiAxMC45OTQ5IDYuNzEzODMgMTEuMjQzOSA2LjY3NDcgMTEuNDg0MkM2LjU5MDE4IDEyLjAwMzQgNy4xMzE5OSAxMi4xMjM5IDcuNTI2NjEgMTIuMDk4N0M4LjIwNzQgMTIuMDU1MyA4LjA2NTQ3IDExLjA0MjYgNy41NjcwNCAxMC44NDMyWk00Ljg4MDUgMTAuODkzMkM1LjA2NzQgMTAuNzcyMyA1LjE1NjU4IDEwLjUzNjMgNS4wODI5MyAxMC4zMTUzQzQuOTMwNDYgOS43OTY4NyA0LjMyNDYgOS43MTI1MiAzLjk2NTYxIDEwLjEyOTdDMy43OTMzNiAxMC4zMjk5IDMuODA3NDkgMTAuNjI3NCAzLjk5MjE0IDEwLjgxMDVMMy45OTQ5NSAxMC44MTRMMy45OTc5IDEwLjgxNzZDNC4yMjAyNSAxMS4wOTQyIDQuNjM2MjQgMTEuMTg1NyA0Ljg4MDUgMTAuODkzMlpNMy4wNDY5NSA3LjgxMzE4QzMuMzMxNDcgOC4wOTc3IDMuNjAwNzcgOC4xNTA2NyAzLjk4NDQzIDguMDU4NTlDNC42MDgyNiA3LjkwODg3IDQuMTM4MTQgNi4yNDI5OSAzLjA0NyA2Ljg3Mjk2QzIuNzA5MzkgNy4wNjc4OCAyLjg2NzE2IDcuNjMzMzkgMy4wNDY5NSA3LjgxMzE4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0samU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgOS41MDAwNkMxIDEwLjMyODUgMS42NzE1NyAxMS4wMDAxIDIuNSAxMS4wMDAxSDRMNCAxMC4wMDAxSDIuNUMyLjIyMzg2IDEwLjAwMDEgMiA5Ljc3NjIgMiA5LjUwMDA2TDIgMi41MDAwNkMyIDIuMjIzOTIgMi4yMjM4NiAyLjAwMDA2IDIuNSAyLjAwMDA2TDkuNSAyLjAwMDA2QzkuNzc2MTQgMi4wMDAwNiAxMCAyLjIyMzkyIDEwIDIuNTAwMDZWNC4wMDAwMkg1LjVDNC42NzE1OCA0LjAwMDAyIDQgNC42NzE1OSA0IDUuNTAwMDJWMTIuNUM0IDEzLjMyODQgNC42NzE1OCAxNCA1LjUgMTRIMTIuNUMxMy4zMjg0IDE0IDE0IDEzLjMyODQgMTQgMTIuNVY1LjUwMDAyQzE0IDQuNjcxNTkgMTMuMzI4NCA0LjAwMDAyIDEyLjUgNC4wMDAwMkgxMVYyLjUwMDA2QzExIDEuNjcxNjMgMTAuMzI4NCAxLjAwMDA2IDkuNSAxLjAwMDA2SDIuNUMxLjY3MTU3IDEuMDAwMDYgMSAxLjY3MTYzIDEgMi41MDAwNlY5LjUwMDA2Wk01IDUuNTAwMDJDNSA1LjIyMzg4IDUuMjIzODYgNS4wMDAwMiA1LjUgNS4wMDAwMkgxMi41QzEyLjc3NjEgNS4wMDAwMiAxMyA1LjIyMzg4IDEzIDUuNTAwMDJWMTIuNUMxMyAxMi43NzYyIDEyLjc3NjEgMTMgMTIuNSAxM0g1LjVDNS4yMjM4NiAxMyA1IDEyLjc3NjIgNSAxMi41VjUuNTAwMDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxNZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOS44NzczNyAxMkg5LjlIMTEuNUMxMS43NzYxIDEyIDEyIDExLjc3NjEgMTIgMTEuNUMxMiAxMS4yMjM5IDExLjc3NjEgMTEgMTEuNSAxMUg5LjlDOC43NzE2NCAxMSA3Ljk1NTQ1IDEwLjk5OTYgNy4zMTM1MiAxMC45NDcyQzYuNjc3NDQgMTAuODk1MiA2LjI1NjYyIDEwLjc5NDYgNS45MTEwMyAxMC42MTg1QzUuMjUyNDcgMTAuMjgzIDQuNzE3MDMgOS43NDc1MyA0LjM4MTQ4IDkuMDg4OTdDNC4yMDUzOSA4Ljc0MzM4IDQuMTA0ODEgOC4zMjI1NiA0LjA1Mjg0IDcuNjg2NDhDNC4wMDAzOSA3LjA0NDU1IDQgNi4yMjgzNiA0IDUuMVYzLjVDNCAzLjIyMzg2IDMuNzc2MTQgMyAzLjUgM0MzLjIyMzg2IDMgMyAzLjIyMzg2IDMgMy41VjUuMVY1LjEyMjYzQzMgNi4yMjM1OSAzIDcuMDgwNTIgMy4wNTYxNiA3Ljc2NzkxQzMuMTEzMTggOC40NjU4NCAzLjIzMDU4IDkuMDMyOSAzLjQ5MDQ3IDkuNTQyOTZDMy45MjE5IDEwLjM4OTcgNC42MTAzMSAxMS4wNzgxIDUuNDU3MDQgMTEuNTA5NUM1Ljk2NzEgMTEuNzY5NCA2LjUzNDE2IDExLjg4NjggNy4yMzIwOSAxMS45NDM4QzcuOTE5NDggMTIgOC43NzY0MSAxMiA5Ljg3NzM3IDEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sa2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuMTIyNjMgMTJINS4xSDMuNUMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVDMyAxMS4yMjM5IDMuMjIzODYgMTEgMy41IDExSDUuMUM2LjIyODM2IDExIDcuMDQ0NTUgMTAuOTk5NiA3LjY4NjQ4IDEwLjk0NzJDOC4zMjI1NiAxMC44OTUyIDguNzQzMzggMTAuNzk0NiA5LjA4ODk3IDEwLjYxODVDOS43NDc1MyAxMC4yODMgMTAuMjgzIDkuNzQ3NTMgMTAuNjE4NSA5LjA4ODk3QzEwLjc5NDYgOC43NDMzOCAxMC44OTUyIDguMzIyNTYgMTAuOTQ3MiA3LjY4NjQ4QzEwLjk5OTYgNy4wNDQ1NSAxMSA2LjIyODM2IDExIDUuMVYzLjVDMTEgMy4yMjM4NiAxMS4yMjM5IDMgMTEuNSAzQzExLjc3NjEgMyAxMiAzLjIyMzg2IDEyIDMuNVY1LjFWNS4xMjI2M0MxMiA2LjIyMzU5IDEyIDcuMDgwNTIgMTEuOTQzOCA3Ljc2NzkxQzExLjg4NjggOC40NjU4NCAxMS43Njk0IDkuMDMyOSAxMS41MDk1IDkuNTQyOTZDMTEuMDc4MSAxMC4zODk3IDEwLjM4OTcgMTEuMDc4MSA5LjU0Mjk2IDExLjUwOTVDOS4wMzI5IDExLjc2OTQgOC40NjU4NCAxMS44ODY4IDcuNzY3OTEgMTEuOTQzOEM3LjA4MDUyIDEyIDYuMjIzNTkgMTIgNS4xMjI2MyAxMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFJlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05Ljg3NzM3IDNIOS45SDExLjVDMTEuNzc2MSAzIDEyIDMuMjIzODYgMTIgMy41QzEyIDMuNzc2MTQgMTEuNzc2MSA0IDExLjUgNEg5LjlDOC43NzE2NCA0IDcuOTU1NDUgNC4wMDAzOSA3LjMxMzUyIDQuMDUyODRDNi42Nzc0NCA0LjEwNDgxIDYuMjU2NjIgNC4yMDUzOSA1LjkxMTAzIDQuMzgxNDhDNS4yNTI0NyA0LjcxNzAzIDQuNzE3MDMgNS4yNTI0NyA0LjM4MTQ4IDUuOTExMDNDNC4yMDUzOSA2LjI1NjYyIDQuMTA0ODEgNi42Nzc0NCA0LjA1Mjg0IDcuMzEzNTJDNC4wMDAzOSA3Ljk1NTQ1IDQgOC43NzE2NCA0IDkuOVYxMS41QzQgMTEuNzc2MSAzLjc3NjE0IDEyIDMuNSAxMkMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVWOS45VjkuODc3MzdDMyA4Ljc3NjQxIDMgNy45MTk0OCAzLjA1NjE2IDcuMjMyMDlDMy4xMTMxOCA2LjUzNDE2IDMuMjMwNTggNS45NjcxIDMuNDkwNDcgNS40NTcwNEMzLjkyMTkgNC42MTAzMSA0LjYxMDMxIDMuOTIxOSA1LjQ1NzA0IDMuNDkwNDdDNS45NjcxIDMuMjMwNTggNi41MzQxNiAzLjExMzE4IDcuMjMyMDkgMy4wNTYxNkM3LjkxOTQ4IDMgOC43NzY0MSAzIDkuODc3MzcgM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFBlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjEyMjYzIDNINS4xSDMuNUMzLjIyMzg2IDMgMyAzLjIyMzg2IDMgMy41QzMgMy43NzYxNCAzLjIyMzg2IDQgMy41IDRINS4xQzYuMjI4MzYgNCA3LjA0NDU1IDQuMDAwMzkgNy42ODY0OCA0LjA1Mjg0QzguMzIyNTYgNC4xMDQ4MSA4Ljc0MzM4IDQuMjA1MzkgOS4wODg5NyA0LjM4MTQ4QzkuNzQ3NTMgNC43MTcwMyAxMC4yODMgNS4yNTI0NyAxMC42MTg1IDUuOTExMDNDMTAuNzk0NiA2LjI1NjYyIDEwLjg5NTIgNi42Nzc0NCAxMC45NDcyIDcuMzEzNTJDMTAuOTk5NiA3Ljk1NTQ1IDExIDguNzcxNjQgMTEgOS45VjExLjVDMTEgMTEuNzc2MSAxMS4yMjM5IDEyIDExLjUgMTJDMTEuNzc2MSAxMiAxMiAxMS43NzYxIDEyIDExLjVWOS45VjkuODc3MzdDMTIgOC43NzY0MSAxMiA3LjkxOTQ4IDExLjk0MzggNy4yMzIwOUMxMS44ODY4IDYuNTM0MTYgMTEuNzY5NCA1Ljk2NzEgMTEuNTA5NSA1LjQ1NzA0QzExLjA3ODEgNC42MTAzMSAxMC4zODk3IDMuOTIxOSA5LjU0Mjk2IDMuNDkwNDdDOS4wMzI5IDMuMjMwNTggOC40NjU4NCAzLjExMzE4IDcuNzY3OTEgMy4wNTYxNkM3LjA4MDUyIDMgNi4yMjM1OSAzIDUuMTIyNjMgM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEllPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMC4xIDNDMTAuNTI4MyAzIDEwLjgxOTQgMy4wMDAzOSAxMS4wNDQ1IDMuMDE4NzhDMTEuMjYzNyAzLjAzNjY5IDExLjM3NTggMy4wNjkxNSAxMS40NTQgMy4xMDg5OUMxMS42NDIyIDMuMjA0ODcgMTEuNzk1MSAzLjM1Nzg1IDExLjg5MSAzLjU0NjAxQzExLjkzMDkgMy42MjQyMSAxMS45NjMzIDMuNzM2MzEgMTEuOTgxMiAzLjk1NTUyQzExLjk5OTYgNC4xODA1NiAxMiA0LjQ3MTcxIDEyIDQuOVY1LjVDMTIgNS43NzYxNCAxMi4yMjM5IDYgMTIuNSA2QzEyLjc3NjEgNiAxMyA1Ljc3NjE0IDEzIDUuNVY0Ljg3OTM1QzEzIDQuNDc2ODcgMTMgNC4xNDQ2OSAxMi45Nzc5IDMuODc0MDlDMTIuOTU0OSAzLjU5MzA0IDEyLjkwNTcgMy4zMzQ2OSAxMi43ODIgMy4wOTIwMkMxMi41OTAzIDIuNzE1NyAxMi4yODQzIDIuNDA5NzMgMTEuOTA4IDIuMjE3OTlDMTEuNjY1MyAyLjA5NDM0IDExLjQwNyAyLjA0NTA2IDExLjEyNTkgMi4wMjIxQzEwLjg1NTMgMS45OTk5OSAxMC41MjMxIDEuOTk5OTkgMTAuMTIwNyAySDEwLjEyMDZIMTAuMUg5LjVDOS4yMjM4NiAyIDkgMi4yMjM4NiA5IDIuNUM5IDIuNzc2MTQgOS4yMjM4NiAzIDkuNSAzSDEwLjFaTTUuNSAySDQuODc5MzVINC44NzkzNEM0LjQ3Njg2IDEuOTk5OTkgNC4xNDQ2OCAxLjk5OTk5IDMuODc0MDkgMi4wMjIxQzMuNTkzMDQgMi4wNDUwNiAzLjMzNDY5IDIuMDk0MzQgMy4wOTIwMiAyLjIxNzk5QzIuNzE1NyAyLjQwOTczIDIuNDA5NzMgMi43MTU3IDIuMjE3OTkgMy4wOTIwMkMyLjA5NDM0IDMuMzM0NjkgMi4wNDUwNiAzLjU5MzA0IDIuMDIyMSAzLjg3NDA5QzEuOTk5OTkgNC4xNDQ2OCAxLjk5OTk5IDQuNDc2ODYgMiA0Ljg3OTM0VjQuODc5MzVWNS41QzIgNS43NzYxNCAyLjIyMzg2IDYgMi41IDZDMi43NzYxNCA2IDMgNS43NzYxNCAzIDUuNVY0LjlDMyA0LjQ3MTcxIDMuMDAwMzkgNC4xODA1NiAzLjAxODc4IDMuOTU1NTJDMy4wMzY2OSAzLjczNjMxIDMuMDY5MTUgMy42MjQyMSAzLjEwODk5IDMuNTQ2MDFDMy4yMDQ4NyAzLjM1Nzg1IDMuMzU3ODUgMy4yMDQ4NyAzLjU0NjAxIDMuMTA4OTlDMy42MjQyMSAzLjA2OTE1IDMuNzM2MzEgMy4wMzY2OSAzLjk1NTUyIDMuMDE4NzhDNC4xODA1NiAzLjAwMDM5IDQuNDcxNzEgMyA0LjkgM0g1LjVDNS43NzYxNCAzIDYgMi43NzYxNCA2IDIuNUM2IDIuMjIzODYgNS43NzYxNCAyIDUuNSAyWk0xMyA5LjVDMTMgOS4yMjM4NiAxMi43NzYxIDkgMTIuNSA5QzEyLjIyMzkgOSAxMiA5LjIyMzg2IDEyIDkuNVYxMC4xQzEyIDEwLjUyODMgMTEuOTk5NiAxMC44MTk0IDExLjk4MTIgMTEuMDQ0NUMxMS45NjMzIDExLjI2MzcgMTEuOTMwOSAxMS4zNzU4IDExLjg5MSAxMS40NTRDMTEuNzk1MSAxMS42NDIyIDExLjY0MjIgMTEuNzk1MSAxMS40NTQgMTEuODkxQzExLjM3NTggMTEuOTMwOSAxMS4yNjM3IDExLjk2MzMgMTEuMDQ0NSAxMS45ODEyQzEwLjgxOTQgMTEuOTk5NiAxMC41MjgzIDEyIDEwLjEgMTJIOS41QzkuMjIzODYgMTIgOSAxMi4yMjM5IDkgMTIuNUM5IDEyLjc3NjEgOS4yMjM4NiAxMyA5LjUgMTNIMTAuMTIwNkMxMC41MjMxIDEzIDEwLjg1NTMgMTMgMTEuMTI1OSAxMi45Nzc5QzExLjQwNyAxMi45NTQ5IDExLjY2NTMgMTIuOTA1NyAxMS45MDggMTIuNzgyQzEyLjI4NDMgMTIuNTkwMyAxMi41OTAzIDEyLjI4NDMgMTIuNzgyIDExLjkwOEMxMi45MDU3IDExLjY2NTMgMTIuOTU0OSAxMS40MDcgMTIuOTc3OSAxMS4xMjU5QzEzIDEwLjg1NTMgMTMgMTAuNTIzMSAxMyAxMC4xMjA2VjkuNVpNMi41IDlDMi43NzYxNCA5IDMgOS4yMjM4NiAzIDkuNVYxMC4xQzMgMTAuNTI4MyAzLjAwMDM5IDEwLjgxOTQgMy4wMTg3OCAxMS4wNDQ1QzMuMDM2NjkgMTEuMjYzNyAzLjA2OTE1IDExLjM3NTggMy4xMDg5OSAxMS40NTRDMy4yMDQ4NyAxMS42NDIyIDMuMzU3ODUgMTEuNzk1MSAzLjU0NjAxIDExLjg5MUMzLjYyNDIxIDExLjkzMDkgMy43MzYzMSAxMS45NjMzIDMuOTU1NTIgMTEuOTgxMkM0LjE4MDU2IDExLjk5OTYgNC40NzE3MSAxMiA0LjkgMTJINS41QzUuNzc2MTQgMTIgNiAxMi4yMjM5IDYgMTIuNUM2IDEyLjc3NjEgNS43NzYxNCAxMyA1LjUgMTNINC44NzkzNUM0LjQ3Njg3IDEzIDQuMTQ0NjkgMTMgMy44NzQwOSAxMi45Nzc5QzMuNTkzMDQgMTIuOTU0OSAzLjMzNDY5IDEyLjkwNTcgMy4wOTIwMiAxMi43ODJDMi43MTU3IDEyLjU5MDMgMi40MDk3MyAxMi4yODQzIDIuMjE3OTkgMTEuOTA4QzIuMDk0MzQgMTEuNjY1MyAyLjA0NTA2IDExLjQwNyAyLjAyMjEgMTEuMTI1OUMxLjk5OTk5IDEwLjg1NTMgMS45OTk5OSAxMC41MjMxIDIgMTAuMTIwN1YxMC4xMjA2VjEwLjFWOS41QzIgOS4yMjM4NiAyLjIyMzg2IDkgMi41IDlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxBZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMTUgNy40OTk5OEMxMy4xNSA0LjY2NDU4IDEwLjk0MDIgMS44NDk5OCA3LjUwMDAyIDEuODQ5OThDNC43MjE3IDEuODQ5OTggMy4zNDg1MSAzLjkwNjM2IDIuNzYzMzYgNC45OTk5N0g0LjVDNC43NzYxNCA0Ljk5OTk3IDUgNS4yMjM4MyA1IDUuNDk5OTdDNSA1Ljc3NjExIDQuNzc2MTQgNS45OTk5NyA0LjUgNS45OTk5N0gxLjVDMS4yMjM4NiA1Ljk5OTk3IDEgNS43NzYxMSAxIDUuNDk5OTdWMi40OTk5N0MxIDIuMjIzODMgMS4yMjM4NiAxLjk5OTk3IDEuNSAxLjk5OTk3QzEuNzc2MTQgMS45OTk5NyAyIDIuMjIzODMgMiAyLjQ5OTk3VjQuMzEzMThDMi43MDQ1MyAzLjA3MTI2IDQuMzM0MDYgMC44NDk5NzYgNy41MDAwMiAwLjg0OTk3NkMxMS41NjI4IDAuODQ5OTc2IDE0LjE1IDQuMTg1MzcgMTQuMTUgNy40OTk5OEMxNC4xNSAxMC44MTQ2IDExLjU2MjggMTQuMTUgNy41MDAwMiAxNC4xNUM1LjU1NjE4IDE0LjE1IDMuOTM3NzggMTMuMzgwOCAyLjc4NTQ4IDEyLjIwODRDMi4xNjg1MiAxMS41ODA2IDEuNjg2NjggMTAuODM5IDEuMzU4MTYgMTAuMDQwN0MxLjI1MzA2IDkuNzg1MzYgMS4zNzQ4OCA5LjQ5MzE1IDEuNjMwMjQgOS4zODgwNkMxLjg4NTYgOS4yODI5NiAyLjE3NzgxIDkuNDA0NzggMi4yODI5IDkuNjYwMTRDMi41NjM3NCAxMC4zNDI1IDIuOTc0OTUgMTAuOTc0NSAzLjQ5ODcgMTEuNTA3NEM0LjQ3MDUyIDEyLjQ5NjMgNS44MzQ5NiAxMy4xNSA3LjUwMDAyIDEzLjE1QzEwLjk0MDIgMTMuMTUgMTMuMTUgMTAuMzM1NCAxMy4xNSA3LjQ5OTk4Wk03IDEwVjUuMDAwMDFIOFYxMEg3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjE1IDcuNDk5OThDMTMuMTUgNC42NjQ1OCAxMC45NDAyIDEuODQ5OTggNy41MDAwMiAxLjg0OTk4QzQuNzIxNjcgMS44NDk5OCAzLjM0ODQ5IDMuOTA2NCAyLjc2MzM1IDVINC41QzQuNzc2MTQgNSA1IDUuMjIzODYgNSA1LjVDNSA1Ljc3NjE0IDQuNzc2MTQgNiA0LjUgNkgxLjVDMS4yMjM4NiA2IDEgNS43NzYxNCAxIDUuNVYyLjVDMSAyLjIyMzg2IDEuMjIzODYgMiAxLjUgMkMxLjc3NjE0IDIgMiAyLjIyMzg2IDIgMi41VjQuMzEzMThDMi43MDQ1MyAzLjA3MTI2IDQuMzM0MDYgMC44NDk5NzYgNy41MDAwMiAwLjg0OTk3NkMxMS41NjI4IDAuODQ5OTc2IDE0LjE1IDQuMTg1MzcgMTQuMTUgNy40OTk5OEMxNC4xNSAxMC44MTQ2IDExLjU2MjggMTQuMTUgNy41MDAwMiAxNC4xNUM1LjU1NjE4IDE0LjE1IDMuOTM3NzggMTMuMzgwOCAyLjc4NTQ4IDEyLjIwODRDMi4xNjg1MiAxMS41ODA2IDEuNjg2NjggMTAuODM5IDEuMzU4MTYgMTAuMDQwN0MxLjI1MzA2IDkuNzg1MzYgMS4zNzQ4OCA5LjQ5MzE1IDEuNjMwMjQgOS4zODgwNkMxLjg4NTYgOS4yODI5NiAyLjE3NzgxIDkuNDA0NzggMi4yODI5IDkuNjYwMTRDMi41NjM3NCAxMC4zNDI1IDIuOTc0OTUgMTAuOTc0NSAzLjQ5ODcgMTEuNTA3NEM0LjQ3MDUyIDEyLjQ5NjMgNS44MzQ5NiAxMy4xNSA3LjUwMDAyIDEzLjE1QzEwLjk0MDIgMTMuMTUgMTMuMTUgMTAuMzM1NCAxMy4xNSA3LjQ5OTk4Wk03LjUgNC4wMDAwMUM3Ljc3NjE0IDQuMDAwMDEgOCA0LjIyMzg3IDggNC41MDAwMVY3LjI5MjkxTDkuODUzNTUgOS4xNDY0NkMxMC4wNDg4IDkuMzQxNzIgMTAuMDQ4OCA5LjY1ODMxIDkuODUzNTUgOS44NTM1N0M5LjY1ODI5IDEwLjA0ODggOS4zNDE3MSAxMC4wNDg4IDkuMTQ2NDUgOS44NTM1N0w3LjE0NjQ1IDcuODUzNTdDNy4wNTI2OCA3Ljc1OTggNyA3LjYzMjYyIDcgNy41MDAwMVY0LjUwMDAxQzcgNC4yMjM4NyA3LjIyMzg2IDQuMDAwMDEgNy41IDQuMDAwMDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDguMDA2ODRlLTA3QzMuNzc2MTQgNy44ODYxNGUtMDcgNCAwLjIyMzg1OSA0IDAuNTAwMDAxTDQgMy4wMDAwNkwxMS41IDMuMDAwMDZDMTEuNzc2MSAzLjAwMDA2IDEyIDMuMjIzOTIgMTIgMy41MDAwNkwxMiAxMS4wMDAxTDE0LjUgMTFDMTQuNzc2MSAxMSAxNSAxMS4yMjM4IDE1IDExLjVDMTUgMTEuNzc2MSAxNC43NzYyIDEyIDE0LjUgMTJMMTIgMTIuMDAwMUwxMiAxNC41QzEyIDE0Ljc3NjEgMTEuNzc2MSAxNSAxMS41IDE1QzExLjIyMzkgMTUgMTEgMTQuNzc2MSAxMSAxNC41TDExIDEyLjAwMDFMMy41IDEyLjAwMDFDMy4yMjM4NiAxMi4wMDAxIDMgMTEuNzc2MiAzIDExLjUwMDFMMyA0LjAwMDA1TDAuNDk5OTg5IDRDMC4yMjM4NDcgNCAtNi4xMDU0MWUtMDYgMy43NzYxMyAtNS4wMjU3NmUtMDcgMy40OTk5OUM1LjEzMDA2ZS0wNiAzLjIyMzg1IDAuMjIzODY3IDMgMC41MDAwMSAzTDMgMy4wMDAwNUwzIDAuNTAwMDAxQzMgMC4yMjM4NTkgMy4yMjM4NiA4LjEyNzU1ZS0wNyAzLjUgOC4wMDY4NGUtMDdaTTQgNC4wMDAwNkw0IDExLjAwMDFMMTEgMTEuMDAwMUwxMSA0LjAwMDA2TDQgNC4wMDAwNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEJlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi44NTM2IDIuODUzNTVDMTMuMDQ4OCAyLjY1ODI5IDEzLjA0ODggMi4zNDE3MSAxMi44NTM2IDIuMTQ2NDVDMTIuNjU4MyAxLjk1MTE4IDEyLjM0MTcgMS45NTExOCAxMi4xNDY0IDIuMTQ2NDVMNy41IDYuNzkyODlMMi44NTM1NSAyLjE0NjQ1QzIuNjU4MjkgMS45NTExOCAyLjM0MTcxIDEuOTUxMTggMi4xNDY0NSAyLjE0NjQ1QzEuOTUxMTggMi4zNDE3MSAxLjk1MTE4IDIuNjU4MjkgMi4xNDY0NSAyLjg1MzU1TDYuNzkyODkgNy41TDIuMTQ2NDUgMTIuMTQ2NEMxLjk1MTE4IDEyLjM0MTcgMS45NTExOCAxMi42NTgzIDIuMTQ2NDUgMTIuODUzNkMyLjM0MTcxIDEzLjA0ODggMi42NTgyOSAxMy4wNDg4IDIuODUzNTUgMTIuODUzNkw3LjUgOC4yMDcxMUwxMi4xNDY0IDEyLjg1MzZDMTIuMzQxNyAxMy4wNDg4IDEyLjY1ODMgMTMuMDQ4OCAxMi44NTM2IDEyLjg1MzZDMTMuMDQ4OCAxMi42NTgzIDEzLjA0ODggMTIuMzQxNyAxMi44NTM2IDEyLjE0NjRMOC4yMDcxMSA3LjVMMTIuODUzNiAyLjg1MzU1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTExLjc4MTYgNC4wMzE1N0MxMi4wMDYyIDMuODA3MDIgMTIuMDA2MiAzLjQ0Mjk1IDExLjc4MTYgMy4yMTg0QzExLjU1NzEgMi45OTM4NSAxMS4xOTMgMi45OTM4NSAxMC45Njg1IDMuMjE4NEw3LjUwMDA1IDYuNjg2ODJMNC4wMzE2NCAzLjIxODRDMy44MDcwOCAyLjk5Mzg1IDMuNDQzMDEgMi45OTM4NSAzLjIxODQ2IDMuMjE4NEMyLjk5MzkxIDMuNDQyOTUgMi45OTM5MSAzLjgwNzAyIDMuMjE4NDYgNC4wMzE1N0w2LjY4Njg4IDcuNDk5OTlMMy4yMTg0NiAxMC45Njg0QzIuOTkzOTEgMTEuMTkzIDIuOTkzOTEgMTEuNTU3IDMuMjE4NDYgMTEuNzgxNkMzLjQ0MzAxIDEyLjAwNjEgMy44MDcwOCAxMi4wMDYxIDQuMDMxNjQgMTEuNzgxNkw3LjUwMDA1IDguMzEzMTZMMTAuOTY4NSAxMS43ODE2QzExLjE5MyAxMi4wMDYxIDExLjU1NzEgMTIuMDA2MSAxMS43ODE2IDExLjc4MTZDMTIuMDA2MiAxMS41NTcgMTIuMDA2MiAxMS4xOTMgMTEuNzgxNiAxMC45Njg0TDguMzEzMjIgNy40OTk5OUwxMS43ODE2IDQuMDMxNTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxEZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy40OTk4OEMwLjg3NzA3NSAzLjg0MjE5IDMuODQyMjIgMC44NzcwNDUgNy40OTk5MSAwLjg3NzA0NUMxMS4xNTc2IDAuODc3MDQ1IDE0LjEyMjcgMy44NDIxOSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyAxMS4xNTc1IDExLjE1NzYgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMy44NDIyMiAxNC4xMjI3IDAuODc3MDc1IDExLjE1NzUgMC44NzcwNzUgNy40OTk4OFpNNy40OTk5MSAxLjgyNzA0QzQuMzY2ODkgMS44MjcwNCAxLjgyNzA4IDQuMzY2ODYgMS44MjcwOCA3LjQ5OTg4QzEuODI3MDggMTAuNjMyOSA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzEwLjYzMjkgMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNC4zNjY4NiAxMC42MzI5IDEuODI3MDQgNy40OTk5MSAxLjgyNzA0Wk05Ljg1MzU4IDUuMTQ2NDRDMTAuMDQ4OCA1LjM0MTcgMTAuMDQ4OCA1LjY1ODI5IDkuODUzNTggNS44NTM1NUw4LjIwNzEzIDcuNDk5OTlMOS44NTM1OCA5LjE0NjQ0QzEwLjA0ODggOS4zNDE3IDEwLjA0ODggOS42NTgyOSA5Ljg1MzU4IDkuODUzNTVDOS42NTgzMiAxMC4wNDg4IDkuMzQxNzMgMTAuMDQ4OCA5LjE0NjQ3IDkuODUzNTVMNy41MDAwMiA4LjIwNzFMNS44NTM1OCA5Ljg1MzU1QzUuNjU4MzIgMTAuMDQ4OCA1LjM0MTczIDEwLjA0ODggNS4xNDY0NyA5Ljg1MzU1QzQuOTUxMjEgOS42NTgyOSA0Ljk1MTIxIDkuMzQxNyA1LjE0NjQ3IDkuMTQ2NDRMNi43OTI5MiA3LjQ5OTk5TDUuMTQ2NDcgNS44NTM1NUM0Ljk1MTIxIDUuNjU4MjkgNC45NTEyMSA1LjM0MTcgNS4xNDY0NyA1LjE0NjQ0QzUuMzQxNzMgNC45NTExOCA1LjY1ODMyIDQuOTUxMTggNS44NTM1OCA1LjE0NjQ0TDcuNTAwMDIgNi43OTI4OUw5LjE0NjQ3IDUuMTQ2NDRDOS4zNDE3MyA0Ljk1MTE4IDkuNjU4MzIgNC45NTExOCA5Ljg1MzU4IDUuMTQ2NDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxaZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy41MDIwN0MwLjg3NzA3NSAzLjg0MzE5IDMuODQzMTkgMC44NzcwNzUgNy41MDIwOCAwLjg3NzA3NUMxMS4xNjA5IDAuODc3MDc1IDE0LjEyNzEgMy44NDMxOSAxNC4xMjcxIDcuNTAyMDdDMTQuMTI3MSAxMS4xNjA5IDExLjE2MDkgMTQuMTI3MSA3LjUwMjA4IDE0LjEyNzFDMy44NDMxOSAxNC4xMjcxIDAuODc3MDc1IDExLjE2MDkgMC44NzcwNzUgNy41MDIwN1pNMS44NDg5OCA3LjAwMDAzQzIuMDg4NiA0LjI2NjM5IDQuMjY2MzkgMi4wODg2IDcuMDAwMDMgMS44NDg5OFY0LjUwMDAzQzcuMDAwMDMgNC43NzYxNyA3LjIyMzg4IDUuMDAwMDMgNy41MDAwMyA1LjAwMDAzQzcuNzc2MTcgNS4wMDAwMyA4LjAwMDAzIDQuNzc2MTcgOC4wMDAwMyA0LjUwMDAzVjEuODQ4NjJDMTAuNzM1NiAyLjA4NjQzIDEyLjkxNTQgNC4yNjUwMiAxMy4xNTUyIDcuMDAwMDNIMTAuNUMxMC4yMjM5IDcuMDAwMDMgMTAgNy4yMjM4OCAxMCA3LjUwMDAzQzEwIDcuNzc2MTcgMTAuMjIzOSA4LjAwMDAzIDEwLjUgOC4wMDAwM0gxMy4xNTU1QzEyLjkxNzYgMTAuNzM2OSAxMC43MzY5IDEyLjkxNzYgOC4wMDAwMyAxMy4xNTU1VjEwLjVDOC4wMDAwMyAxMC4yMjM5IDcuNzc2MTcgMTAgNy41MDAwMyAxMEM3LjIyMzg4IDEwIDcuMDAwMDMgMTAuMjIzOSA3LjAwMDAzIDEwLjVWMTMuMTU1MkM0LjI2NTAyIDEyLjkxNTQgMi4wODY0MyAxMC43MzU2IDEuODQ4NjIgOC4wMDAwM0g0LjUwMDAzQzQuNzc2MTcgOC4wMDAwMyA1LjAwMDAzIDcuNzc2MTcgNS4wMDAwMyA3LjUwMDAzQzUuMDAwMDMgNy4yMjM4OCA0Ljc3NjE3IDcuMDAwMDMgNC41MDAwMyA3LjAwMDAzSDEuODQ4OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSwkZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDBDNy43NzYxNCAwIDggMC4yMjM4NTggOCAwLjVWMS44MDY4N0MxMC42OTIyIDIuMDkzNSAxMi44MTY3IDQuMjgwMTIgMTMuMDA2OCA3SDE0LjVDMTQuNzc2MSA3IDE1IDcuMjIzODYgMTUgNy41QzE1IDcuNzc2MTQgMTQuNzc2MSA4IDE0LjUgOEgxMi45ODg4QzEyLjcwOTQgMTAuNjI0NCAxMC42MjQ0IDEyLjcwOTQgOCAxMi45ODg4VjE0LjVDOCAxNC43NzYxIDcuNzc2MTQgMTUgNy41IDE1QzcuMjIzODYgMTUgNyAxNC43NzYxIDcgMTQuNVYxMy4wMDY4QzQuMjgwMTIgMTIuODE2NyAyLjA5MzUgMTAuNjkyMiAxLjgwNjg3IDhIMC41QzAuMjIzODU4IDggMCA3Ljc3NjE0IDAgNy41QzAgNy4yMjM4NiAwLjIyMzg1OCA3IDAuNSA3SDEuNzg4ODZDMS45ODM3NiA0LjIxMTY2IDQuMjExNjYgMS45ODM3NiA3IDEuNzg4ODZWMC41QzcgMC4yMjM4NTggNy4yMjM4NiAwIDcuNSAwWk04IDEyLjAzMjJWOS41QzggOS4yMjM4NiA3Ljc3NjE0IDkgNy41IDlDNy4yMjM4NiA5IDcgOS4yMjM4NiA3IDkuNVYxMi4wNTRDNC44MDUxNyAxMS44Njg5IDMuMDQyMjIgMTAuMTY2OCAyLjc2MzQ0IDhINS41QzUuNzc2MTQgOCA2IDcuNzc2MTQgNiA3LjVDNiA3LjIyMzg2IDUuNzc2MTQgNyA1LjUgN0gyLjc0MTdDMi45MzI1MiA0LjczNjYyIDQuNzM2NjIgMi45MzI1MiA3IDIuNzQxN1Y1LjVDNyA1Ljc3NjE0IDcuMjIzODYgNiA3LjUgNkM3Ljc3NjE0IDYgOCA1Ljc3NjE0IDggNS41VjIuNzYzNDRDMTAuMTY2OCAzLjA0MjIyIDExLjg2ODkgNC44MDUxNyAxMi4wNTQgN0g5LjVDOS4yMjM4NiA3IDkgNy4yMjM4NiA5IDcuNUM5IDcuNzc2MTQgOS4yMjM4NiA4IDkuNSA4SDEyLjAzMjJDMTEuNzYyMSAxMC4wOTkxIDEwLjA5OTEgMTEuNzYyMSA4IDEyLjAzMjJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxOZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC42MDkxMyAwLjA2MzQyODdDNC4zOTA4MiAwLjAwODg1MDUgNC4xNjU3NSAwLjEyMzkzIDQuMDgyMTggMC4zMzI4NjdMMy4xNTM4IDIuNjUzOEwwLjgzMjg2NiAzLjU4MjE4QzAuNzAyODg0IDMuNjM0MTcgMC42MDQ1MDQgMy43NDM3IDAuNTY2NzA1IDMuODc4NDlDMC41Mjg5MDYgNC4wMTMyOSAwLjU1NTk5NCA0LjE1OCAwLjYzOTk5MiA0LjI2OTk5TDIuMDExNDggNi4wOTg2NEwxLjA2MzQzIDkuODkwODVDMS4wMDk0NCAxMC4xMDY4IDEuMTIxNDUgMTAuMzI5OCAxLjMyNjkxIDEwLjQxNTRMNC4yMDExNSAxMS42MTNMNS42MjU1NyAxMy43NDk2QzUuNzM0MTIgMTMuOTEyNCA1LjkzNTQ1IDEzLjk4NjQgNi4xMjM2MiAxMy45MzI3TDkuNjIzNjIgMTIuOTMyN0M5LjYyOTg4IDEyLjkzMDkgOS42MzYxMSAxMi45MjkgOS42NDIyOSAxMi45MjY5TDEyLjY0MjMgMTEuOTI2OUMxMi43OTIzIDExLjg3NjkgMTIuOTA1IDExLjc1MTkgMTIuOTM5MyAxMS41OTc2TDEzLjkzOTMgNy4wOTc2MUMxMy45Nzc2IDYuOTI1MDYgMTMuOTExNCA2Ljc0NjA1IDEzLjc3IDYuNjM5OTlMMTEuOTUgNS4yNzQ5OVYyLjk5OTk5QzExLjk1IDIuODI5NTUgMTEuODUzNyAyLjY3MzczIDExLjcwMTIgMi41OTc1TDguNzAxMjQgMS4wOTc1QzguNjcxODcgMS4wODI4MiA4LjY0MDk4IDEuMDcxMzkgOC42MDkxMyAxLjA2MzQzTDQuNjA5MTMgMC4wNjM0Mjg3Wk0xMS40MzIzIDYuMDExNzNMMTIuNzc0OCA3LjAxODU4TDEwLjIxMTkgOS4xNTQyOUMxMC4xNDc2IDkuMjA3ODYgMTAuMDk5NSA5LjI3ODMgMTAuMDczMSA5LjM1NzY5TDkuMjUzODIgMTEuODE1NUw3LjczODQ5IDEwLjg2ODRDNy41Mjc3NCAxMC43MzY3IDcuMjUwMTEgMTAuODAwNyA3LjExODM5IDExLjAxMTVDNi45ODY2NyAxMS4yMjIyIDcuMDUwNzQgMTEuNDk5OSA3LjI2MTQ5IDExLjYzMTZMOC40MDM0MSAxMi4zNDUzTDYuMTkyMjEgMTIuOTc3MUw0Ljg3NDQxIDExLjAwMDRDNC44MjUxMyAxMC45MjY1IDQuNzU1MDggMTAuODY4OCA0LjY3MzA3IDEwLjgzNDZMMi4wMzA0NiA5LjczMzUyTDIuODUxMzQgNi40NDk5OUg0Ljk5OTk5QzUuMjQ4NTIgNi40NDk5OSA1LjQ0OTk5IDYuMjQ4NTIgNS40NDk5OSA1Ljk5OTk5QzUuNDQ5OTkgNS43NTE0NiA1LjI0ODUyIDUuNTQ5OTkgNC45OTk5OSA1LjU0OTk5SDIuNzI0OTlMMS43MTIzIDQuMTk5NzRMMy41MTQwNyAzLjQ3OTAzTDYuMzU3NjkgNC40MjY5QzYuNTM2NTUgNC40ODY1MiA2LjczMzYxIDQuNDI4MzIgNi44NTEzOCA0LjI4MTExTDguNjI0MTMgMi4wNjUxOEwxMS4wNSAzLjI3ODExVjUuMTk1MzNMOC44MzI4NyA2LjA4MjE4QzguNzA5OTYgNi4xMzEzNCA4LjYxNDk0IDYuMjMyMTIgOC41NzMwOCA2LjM1NzY5TDguMDczMDggNy44NTc2OUM3Ljk5NDQ5IDguMDkzNDYgOC4xMjE5MSA4LjM0ODMxIDguMzU3NjkgOC40MjY5QzguNTkzNDYgOC41MDU0OSA4Ljg0ODMxIDguMzc4MDcgOC45MjY5IDguMTQyMjlMOS4zNjA5IDYuODQwMjlMMTEuNDMyMyA2LjAxMTczWk03LjcxMDUyIDEuNzY2NDhMNi4zNDQ2MiAzLjQ3Mzg2TDQuMDk1MDUgMi43MjRMNC43NzE5MiAxLjAzMTgzTDcuNzEwNTIgMS43NjY0OFpNMTAuMjExNSAxMS43ODg1TDEyLjExNiAxMS4xNTM3TDEyLjc3NDUgOC4xOTAzNEwxMC44ODY0IDkuNzYzNzRMMTAuMjExNSAxMS43ODg1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMjg4NTYgMC43OTY5MDhDNy40MjI1OCAwLjczNDM2NCA3LjU3NzQyIDAuNzM0MzY0IDcuNzExNDQgMC43OTY5MDhMMTMuNzExNCAzLjU5NjkxQzEzLjg4NzUgMy42NzkwNiAxNCAzLjg1NTc0IDE0IDQuMDVWMTAuOTVDMTQgMTEuMTQ0MyAxMy44ODc1IDExLjMyMDkgMTMuNzExNCAxMS40MDMxTDcuNzExNDQgMTQuMjAzMUM3LjU3NzQyIDE0LjI2NTYgNy40MjI1OCAxNC4yNjU2IDcuMjg4NTYgMTQuMjAzMUwxLjI4ODU2IDExLjQwMzFDMS4xMTI1MiAxMS4zMjA5IDEgMTEuMTQ0MyAxIDEwLjk1VjQuMDVDMSAzLjg1NTc0IDEuMTEyNTIgMy42NzkwNiAxLjI4ODU2IDMuNTk2OTFMNy4yODg1NiAwLjc5NjkwOFpNMiA0LjgwNTc4TDcgNi45MzA3OFYxMi45NjQ5TDIgMTAuNjMxNlY0LjgwNTc4Wk04IDEyLjk2NDlMMTMgMTAuNjMxNlY0LjgwNTc4TDggNi45MzA3OFYxMi45NjQ5Wk03LjUgNi4wNTY3MkwxMi4yNzE5IDQuMDI4NjZMNy41IDEuODAxNzZMMi43MjgwOSA0LjAyODY2TDcuNSA2LjA1NjcyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMjkyMjcgMC4wNDg5ODRDMy40NzAzMyAtMC4wMzIzMzggMy42Nzk0NiAtMC4wMDIyODIxNCAzLjgyNzQgMC4xMjU4OTFMMTIuODU4NyA3Ljk1MDI2QzEzLjAxMzQgOC4wODQzMiAxMy4wNzA4IDguMjk5MTYgMTMuMDAzNSA4LjQ5MjUxQzEyLjkzNjIgOC42ODU4NiAxMi43NTc4IDguODE4NjYgMTIuNTUzMyA4LjgyNzY4TDkuMjE4ODcgOC45NzQ3NEwxMS4xNTA0IDEzLjIxODdDMTEuMjY0OCAxMy40NyAxMS4xNTM4IDEzLjc2NjQgMTAuOTAyNiAxMy44ODA4TDguNzUwMjQgMTQuODYxM0M4LjQ5OSAxNC45NzU4IDguMjAyNTUgMTQuODY0OSA4LjA4ODAyIDE0LjYxMzdMNi4xNTMzOSAxMC4zNzAzTDMuODYyNzkgMTIuNzg1NUMzLjcyMTk2IDEyLjkzNCAzLjUwNDg3IDEyLjk4MTcgMy4zMTQ3OSAxMi45MDU5QzMuMTI0NyAxMi44MzAxIDMgMTIuNjQ2MSAzIDEyLjQ0MTRWMC41MDM3OTJDMyAwLjMwODA0OCAzLjExNDIyIDAuMTMwMzA2IDMuMjkyMjcgMC4wNDg5ODRaTTQgMS41OTg1MlYxMS4xODc3TDUuOTM3OTkgOS4xNDQyNUM2LjA1MjM4IDkuMDIzNjMgNi4yMTkyNCA4Ljk2Nzc2IDYuMzgzMTkgOC45OTUxNkM2LjU0NzE1IDkuMDIyNTYgNi42ODY3NyA5LjEyOTY1IDYuNzU1NzMgOS4yODA5TDguNzkwNTYgMTMuNzQ0MUwxMC4wMzMyIDEzLjE3OEw4LjAwMTk1IDguNzE0OTdDNy45MzMxMyA4LjU2Mzc2IDcuOTQzOTEgOC4zODgyNCA4LjAzMDcyIDguMjQ2NTlDOC4xMTc1MyA4LjEwNDk0IDguMjY5MDMgOC4wMTU2NiA4LjQzNSA4LjAwODM0TDExLjI1NDkgNy44ODM5N0w0IDEuNTk4NTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxXZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41IDFDNC4yMjM4NiAxIDQgMS4yMjM4NiA0IDEuNUM0IDEuNzc2MTQgNC4yMjM4NiAyIDQuNSAyQzUuNDIyMTUgMiA2LjAzOTkgMi4yMzA1NCA2LjQyMDc1IDIuNTYzNzlDNi43OTI4NiAyLjg4OTM5IDcgMy4zNjYyNiA3IDRWN0g1Ljc1QzUuNDczODYgNyA1LjI1IDcuMjIzODYgNS4yNSA3LjVDNS4yNSA3Ljc3NjE0IDUuNDczODYgOCA1Ljc1IDhIN1YxMUM3IDExLjYzMzcgNi43OTI4NiAxMi4xMTA2IDYuNDIwNzUgMTIuNDM2MkM2LjAzOTkgMTIuNzY5NSA1LjQyMjE1IDEzIDQuNSAxM0M0LjIyMzg2IDEzIDQgMTMuMjIzOSA0IDEzLjVDNCAxMy43NzYxIDQuMjIzODYgMTQgNC41IDE0QzUuNTc3ODUgMTQgNi40NjAxIDEzLjczMDUgNy4wNzkyNSAxMy4xODg4QzcuMjQxNjggMTMuMDQ2NyA3LjM4MTY5IDEyLjg4OTYgNy41IDEyLjcxOThDNy42MTgzMiAxMi44ODk2IDcuNzU4MzIgMTMuMDQ2NyA3LjkyMDc1IDEzLjE4ODhDOC41Mzk5IDEzLjczMDUgOS40MjIxNSAxNCAxMC41IDE0QzEwLjc3NjEgMTQgMTEgMTMuNzc2MSAxMSAxMy41QzExIDEzLjIyMzkgMTAuNzc2MSAxMyAxMC41IDEzQzkuNTc3ODUgMTMgOC45NjAxIDEyLjc2OTUgOC41NzkyNSAxMi40MzYyQzguMjA3MTQgMTIuMTEwNiA4IDExLjYzMzcgOCAxMVY4SDkuMjVDOS41MjYxNCA4IDkuNzUgNy43NzYxNCA5Ljc1IDcuNUM5Ljc1IDcuMjIzODYgOS41MjYxNCA3IDkuMjUgN0g4VjRDOCAzLjM2NjI2IDguMjA3MTQgMi44ODkzOSA4LjU3OTI1IDIuNTYzNzlDOC45NjAxIDIuMjMwNTQgOS41Nzc4NSAyIDEwLjUgMkMxMC43NzYxIDIgMTEgMS43NzYxNCAxMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxQzkuNDIyMTUgMSA4LjUzOTkgMS4yNjk0NiA3LjkyMDc1IDEuODExMjFDNy43NTgzMiAxLjk1MzMzIDcuNjE4MzIgMi4xMTA0MyA3LjUgMi4yODAyM0M3LjM4MTY4IDIuMTEwNDMgNy4yNDE2OCAxLjk1MzMzIDcuMDc5MjUgMS44MTEyMUM2LjQ2MDEgMS4yNjk0NiA1LjU3Nzg1IDEgNC41IDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx6ZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSA3LjVDNSA3LjIyMzg2IDUuMjIzODYgNyA1LjUgN0g5LjVDOS43NzYxNCA3IDEwIDcuMjIzODYgMTAgNy41QzEwIDcuNzc2MTQgOS43NzYxNCA4IDkuNSA4SDUuNUM1LjIyMzg2IDggNSA3Ljc3NjE0IDUgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sR2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuOCAxTDIuNzQ5NjcgMC45OTk5N0MyLjUyMTIyIDAuOTk5NzUyIDIuMzI0MjkgMC45OTk1NjQgMi4xNDk4MyAxLjA0MTQ1QzEuNjAxMzYgMS4xNzMxMiAxLjE3MzEyIDEuNjAxMzYgMS4wNDE0NSAyLjE0OTgzQzAuOTk5NTY0IDIuMzI0MjkgMC45OTk3NTIgMi41MjEyMiAwLjk5OTk3IDIuNzQ5NjdMMSAyLjhWNS4yTDAuOTk5OTcgNS4yNTAzM0MwLjk5OTc1MiA1LjQ3ODc4IDAuOTk5NTY0IDUuNjc1NzIgMS4wNDE0NSA1Ljg1MDE3QzEuMTczMTIgNi4zOTg2NCAxLjYwMTM2IDYuODI2ODggMi4xNDk4MyA2Ljk1ODU2QzIuMzI0MjkgNy4wMDA0NCAyLjUyMTIyIDcuMDAwMjUgMi43NDk2NyA3LjAwMDAzTDIuOCA3SDUuMkw1LjI1MDMzIDcuMDAwMDNDNS40Nzg3OCA3LjAwMDI1IDUuNjc1NzIgNy4wMDA0NCA1Ljg1MDE3IDYuOTU4NTZDNi4zOTg2NCA2LjgyNjg4IDYuODI2ODggNi4zOTg2NCA2Ljk1ODU2IDUuODUwMTdDNy4wMDA0NCA1LjY3NTcyIDcuMDAwMjUgNS40Nzg3OCA3LjAwMDAzIDUuMjUwMzNMNyA1LjJWMi44TDcuMDAwMDMgMi43NDk2N0M3LjAwMDI1IDIuNTIxMjIgNy4wMDA0NCAyLjMyNDI5IDYuOTU4NTYgMi4xNDk4M0M2LjgyNjg4IDEuNjAxMzYgNi4zOTg2NCAxLjE3MzEyIDUuODUwMTcgMS4wNDE0NUM1LjY3NTcyIDAuOTk5NTY0IDUuNDc4NzggMC45OTk3NTIgNS4yNTAzMyAwLjk5OTk3TDUuMiAxSDIuOFpNMi4zODMyOCAyLjAxMzgyQzIuNDI2MzIgMi4wMDM0OCAyLjQ5MjIyIDIgMi44IDJINS4yQzUuNTA3NzkgMiA1LjU3MzY5IDIuMDAzNDggNS42MTY3MiAyLjAxMzgyQzUuNzk5NTUgMi4wNTc3MSA1Ljk0MjI5IDIuMjAwNDUgNS45ODYxOSAyLjM4MzI4QzUuOTk2NTIgMi40MjYzMiA2IDIuNDkyMjIgNiAyLjhWNS4yQzYgNS41MDc3OSA1Ljk5NjUyIDUuNTczNjkgNS45ODYxOSA1LjYxNjcyQzUuOTQyMjkgNS43OTk1NSA1Ljc5OTU1IDUuOTQyMjkgNS42MTY3MiA1Ljk4NjE5QzUuNTczNjkgNS45OTY1MiA1LjUwNzc5IDYgNS4yIDZIMi44QzIuNDkyMjIgNiAyLjQyNjMyIDUuOTk2NTIgMi4zODMyOCA1Ljk4NjE5QzIuMjAwNDUgNS45NDIyOSAyLjA1NzcxIDUuNzk5NTUgMi4wMTM4MiA1LjYxNjcyQzIuMDAzNDggNS41NzM2OSAyIDUuNTA3NzkgMiA1LjJWMi44QzIgMi40OTIyMiAyLjAwMzQ4IDIuNDI2MzIgMi4wMTM4MiAyLjM4MzI4QzIuMDU3NzEgMi4yMDA0NSAyLjIwMDQ1IDIuMDU3NzEgMi4zODMyOCAyLjAxMzgyWk05LjggMUw5Ljc0OTY3IDAuOTk5OTdDOS41MjEyMiAwLjk5OTc1MiA5LjMyNDI5IDAuOTk5NTY0IDkuMTQ5ODMgMS4wNDE0NUM4LjYwMTM2IDEuMTczMTIgOC4xNzMxMiAxLjYwMTM2IDguMDQxNDUgMi4xNDk4M0M3Ljk5OTU2IDIuMzI0MjkgNy45OTk3NSAyLjUyMTIyIDcuOTk5OTcgMi43NDk2N0w4IDIuOFY1LjJMNy45OTk5NyA1LjI1MDMzQzcuOTk5NzUgNS40Nzg3OCA3Ljk5OTU2IDUuNjc1NzIgOC4wNDE0NSA1Ljg1MDE3QzguMTczMTIgNi4zOTg2NCA4LjYwMTM2IDYuODI2ODggOS4xNDk4MyA2Ljk1ODU2QzkuMzI0MjkgNy4wMDA0NCA5LjUyMTIyIDcuMDAwMjUgOS43NDk2NyA3LjAwMDAzTDkuOCA3SDEyLjJMMTIuMjUwMyA3LjAwMDAzQzEyLjQ3ODggNy4wMDAyNSAxMi42NzU3IDcuMDAwNDQgMTIuODUwMiA2Ljk1ODU2QzEzLjM5ODYgNi44MjY4OCAxMy44MjY5IDYuMzk4NjQgMTMuOTU4NiA1Ljg1MDE3QzE0LjAwMDQgNS42NzU3MiAxNC4wMDAzIDUuNDc4NzggMTQgNS4yNTAzM0wxNCA1LjJWMi44TDE0IDIuNzQ5NjdDMTQuMDAwMyAyLjUyMTIyIDE0LjAwMDQgMi4zMjQyOSAxMy45NTg2IDIuMTQ5ODNDMTMuODI2OSAxLjYwMTM2IDEzLjM5ODYgMS4xNzMxMiAxMi44NTAyIDEuMDQxNDVDMTIuNjc1NyAwLjk5OTU2NCAxMi40Nzg4IDAuOTk5NzUyIDEyLjI1MDMgMC45OTk5N0wxMi4yIDFIOS44Wk05LjM4MzI4IDIuMDEzODJDOS40MjYzMiAyLjAwMzQ4IDkuNDkyMjIgMiA5LjggMkgxMi4yQzEyLjUwNzggMiAxMi41NzM3IDIuMDAzNDggMTIuNjE2NyAyLjAxMzgyQzEyLjc5OTUgMi4wNTc3MSAxMi45NDIzIDIuMjAwNDUgMTIuOTg2MiAyLjM4MzI4QzEyLjk5NjUgMi40MjYzMiAxMyAyLjQ5MjIyIDEzIDIuOFY1LjJDMTMgNS41MDc3OSAxMi45OTY1IDUuNTczNjkgMTIuOTg2MiA1LjYxNjcyQzEyLjk0MjMgNS43OTk1NSAxMi43OTk1IDUuOTQyMjkgMTIuNjE2NyA1Ljk4NjE5QzEyLjU3MzcgNS45OTY1MiAxMi41MDc4IDYgMTIuMiA2SDkuOEM5LjQ5MjIyIDYgOS40MjYzMiA1Ljk5NjUyIDkuMzgzMjggNS45ODYxOUM5LjIwMDQ1IDUuOTQyMjkgOS4wNTc3MSA1Ljc5OTU1IDkuMDEzODIgNS42MTY3MkM5LjAwMzQ4IDUuNTczNjkgOSA1LjUwNzc5IDkgNS4yVjIuOEM5IDIuNDkyMjIgOS4wMDM0OCAyLjQyNjMyIDkuMDEzODIgMi4zODMyOEM5LjA1NzcxIDIuMjAwNDUgOS4yMDA0NSAyLjA1NzcxIDkuMzgzMjggMi4wMTM4MlpNMi43NDk2NyA3Ljk5OTk3TDIuOCA4SDUuMkw1LjI1MDMzIDcuOTk5OTdDNS40Nzg3OCA3Ljk5OTc1IDUuNjc1NzIgNy45OTk1NiA1Ljg1MDE3IDguMDQxNDVDNi4zOTg2NCA4LjE3MzEyIDYuODI2ODggOC42MDEzNiA2Ljk1ODU2IDkuMTQ5ODNDNy4wMDA0NCA5LjMyNDI5IDcuMDAwMjUgOS41MjEyMiA3LjAwMDAzIDkuNzQ5NjdMNyA5LjhWMTIuMkw3LjAwMDAzIDEyLjI1MDNDNy4wMDAyNSAxMi40Nzg4IDcuMDAwNDQgMTIuNjc1NyA2Ljk1ODU2IDEyLjg1MDJDNi44MjY4OCAxMy4zOTg2IDYuMzk4NjQgMTMuODI2OSA1Ljg1MDE3IDEzLjk1ODZDNS42NzU3MiAxNC4wMDA0IDUuNDc4NzggMTQuMDAwMyA1LjI1MDMzIDE0TDUuMiAxNEgyLjhMMi43NDk2NyAxNEMyLjUyMTIyIDE0LjAwMDMgMi4zMjQyOSAxNC4wMDA0IDIuMTQ5ODMgMTMuOTU4NkMxLjYwMTM2IDEzLjgyNjkgMS4xNzMxMiAxMy4zOTg2IDEuMDQxNDUgMTIuODUwMkMwLjk5OTU2NCAxMi42NzU3IDAuOTk5NzUyIDEyLjQ3ODggMC45OTk5NyAxMi4yNTAzTDEgMTIuMlY5LjhMMC45OTk5NyA5Ljc0OTY3QzAuOTk5NzUyIDkuNTIxMjIgMC45OTk1NjQgOS4zMjQyOSAxLjA0MTQ1IDkuMTQ5ODNDMS4xNzMxMiA4LjYwMTM2IDEuNjAxMzYgOC4xNzMxMiAyLjE0OTgzIDguMDQxNDVDMi4zMjQyOSA3Ljk5OTU2IDIuNTIxMjIgNy45OTk3NSAyLjc0OTY3IDcuOTk5OTdaTTIuOCA5QzIuNDkyMjIgOSAyLjQyNjMyIDkuMDAzNDggMi4zODMyOCA5LjAxMzgyQzIuMjAwNDUgOS4wNTc3MSAyLjA1NzcxIDkuMjAwNDUgMi4wMTM4MiA5LjM4MzI4QzIuMDAzNDggOS40MjYzMiAyIDkuNDkyMjIgMiA5LjhWMTIuMkMyIDEyLjUwNzggMi4wMDM0OCAxMi41NzM3IDIuMDEzODIgMTIuNjE2N0MyLjA1NzcxIDEyLjc5OTUgMi4yMDA0NSAxMi45NDIzIDIuMzgzMjggMTIuOTg2MkMyLjQyNjMyIDEyLjk5NjUgMi40OTIyMiAxMyAyLjggMTNINS4yQzUuNTA3NzkgMTMgNS41NzM2OSAxMi45OTY1IDUuNjE2NzIgMTIuOTg2MkM1Ljc5OTU1IDEyLjk0MjMgNS45NDIyOSAxMi43OTk1IDUuOTg2MTkgMTIuNjE2N0M1Ljk5NjUyIDEyLjU3MzcgNiAxMi41MDc4IDYgMTIuMlY5LjhDNiA5LjQ5MjIyIDUuOTk2NTIgOS40MjYzMiA1Ljk4NjE5IDkuMzgzMjhDNS45NDIyOSA5LjIwMDQ1IDUuNzk5NTUgOS4wNTc3MSA1LjYxNjcyIDkuMDEzODJDNS41NzM2OSA5LjAwMzQ4IDUuNTA3NzkgOSA1LjIgOUgyLjhaTTkuOCA4TDkuNzQ5NjcgNy45OTk5N0M5LjUyMTIyIDcuOTk5NzUgOS4zMjQyOSA3Ljk5OTU2IDkuMTQ5ODMgOC4wNDE0NUM4LjYwMTM2IDguMTczMTIgOC4xNzMxMiA4LjYwMTM2IDguMDQxNDUgOS4xNDk4M0M3Ljk5OTU2IDkuMzI0MjkgNy45OTk3NSA5LjUyMTIyIDcuOTk5OTcgOS43NDk2N0w4IDkuOFYxMi4yTDcuOTk5OTcgMTIuMjUwM0M3Ljk5OTc1IDEyLjQ3ODggNy45OTk1NiAxMi42NzU3IDguMDQxNDUgMTIuODUwMkM4LjE3MzEyIDEzLjM5ODYgOC42MDEzNiAxMy44MjY5IDkuMTQ5ODMgMTMuOTU4NkM5LjMyNDI5IDE0LjAwMDQgOS41MjEyMiAxNC4wMDAzIDkuNzQ5NjcgMTRMOS44IDE0SDEyLjJMMTIuMjUwMyAxNEMxMi40Nzg4IDE0LjAwMDMgMTIuNjc1NyAxNC4wMDA0IDEyLjg1MDIgMTMuOTU4NkMxMy4zOTg2IDEzLjgyNjkgMTMuODI2OSAxMy4zOTg2IDEzLjk1ODYgMTIuODUwMkMxNC4wMDA0IDEyLjY3NTcgMTQuMDAwMyAxMi40Nzg4IDE0IDEyLjI1MDNMMTQgMTIuMlY5LjhMMTQgOS43NDk2N0MxNC4wMDAzIDkuNTIxMjIgMTQuMDAwNCA5LjMyNDI5IDEzLjk1ODYgOS4xNDk4M0MxMy44MjY5IDguNjAxMzYgMTMuMzk4NiA4LjE3MzEyIDEyLjg1MDIgOC4wNDE0NUMxMi42NzU3IDcuOTk5NTYgMTIuNDc4OCA3Ljk5OTc1IDEyLjI1MDMgNy45OTk5N0wxMi4yIDhIOS44Wk05LjM4MzI4IDkuMDEzODJDOS40MjYzMiA5LjAwMzQ4IDkuNDkyMjIgOSA5LjggOUgxMi4yQzEyLjUwNzggOSAxMi41NzM3IDkuMDAzNDggMTIuNjE2NyA5LjAxMzgyQzEyLjc5OTUgOS4wNTc3MSAxMi45NDIzIDkuMjAwNDUgMTIuOTg2MiA5LjM4MzI4QzEyLjk5NjUgOS40MjYzMiAxMyA5LjQ5MjIyIDEzIDkuOFYxMi4yQzEzIDEyLjUwNzggMTIuOTk2NSAxMi41NzM3IDEyLjk4NjIgMTIuNjE2N0MxMi45NDIzIDEyLjc5OTUgMTIuNzk5NSAxMi45NDIzIDEyLjYxNjcgMTIuOTg2MkMxMi41NzM3IDEyLjk5NjUgMTIuNTA3OCAxMyAxMi4yIDEzSDkuOEM5LjQ5MjIyIDEzIDkuNDI2MzIgMTIuOTk2NSA5LjM4MzI4IDEyLjk4NjJDOS4yMDA0NSAxMi45NDIzIDkuMDU3NzEgMTIuNzk5NSA5LjAxMzgyIDEyLjYxNjdDOS4wMDM0OCAxMi41NzM3IDkgMTIuNTA3OCA5IDEyLjJWOS44QzkgOS40OTIyMiA5LjAwMzQ4IDkuNDI2MzIgOS4wMTM4MiA5LjM4MzI4QzkuMDU3NzEgOS4yMDA0NSA5LjIwMDQ1IDkuMDU3NzEgOS4zODMyOCA5LjAxMzgyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMDAwMTQgMi43Mzg5NUMzLjAwMDE0IDIuOTQ2OTggMi43NjA4NyAzLjA2NDAxIDIuNTk2NjYgMi45MzYyOEwxLjAwMzg2IDEuNjk3NDRDMC44NzUxNzcgMS41OTczNSAwLjg3NTE3NyAxLjQwMjg2IDEuMDAzODYgMS4zMDI3N0wyLjU5NjY2IDAuMDYzOTI4QzIuNzYwODcgLTAuMDYzNzk0NCAzLjAwMDE0IDAuMDUzMjI5MyAzLjAwMDE0IDAuMjYxMjY2VjEuMDAwMTJIOS4wMDAwOVYwLjI2MTI5NkM5LjAwMDA5IDAuMDUzMjU5MSA5LjIzOTM2IC0wLjA2Mzc2NDYgOS40MDM1OCAwLjA2Mzk1NzhMMTAuOTk2NCAxLjMwMjhDMTEuMTI1MSAxLjQwMjg5IDExLjEyNTEgMS41OTczOCAxMC45OTY0IDEuNjk3NDdMOS40MDM1OCAyLjkzNjMxQzkuMjM5MzYgMy4wNjQwNCA5LjAwMDA5IDIuOTQ3MDEgOS4wMDAwOSAyLjczODk4VjIuMDAwMTJIMy4wMDAxNFYyLjczODk1Wk05LjUwMDAyIDQuOTk5OThIMi41MDAwMkMyLjIyMzg4IDQuOTk5OTggMi4wMDAwMiA1LjIyMzg0IDIuMDAwMDIgNS40OTk5OFYxMi41QzIuMDAwMDIgMTIuNzc2MSAyLjIyMzg4IDEzIDIuNTAwMDIgMTNIOS41MDAwMkM5Ljc3NjE2IDEzIDEwIDEyLjc3NjEgMTAgMTIuNVY1LjQ5OTk4QzEwIDUuMjIzODQgOS43NzYxNiA0Ljk5OTk4IDkuNTAwMDIgNC45OTk5OFpNMi41MDAwMiAzLjk5OTk4QzEuNjcxNTkgMy45OTk5OCAxLjAwMDAyIDQuNjcxNTYgMS4wMDAwMiA1LjQ5OTk4VjEyLjVDMS4wMDAwMiAxMy4zMjg0IDEuNjcxNTkgMTQgMi41MDAwMiAxNEg5LjUwMDAyQzEwLjMyODQgMTQgMTEgMTMuMzI4NCAxMSAxMi41VjUuNDk5OThDMTEgNC42NzE1NiAxMC4zMjg0IDMuOTk5OTggOS41MDAwMiAzLjk5OTk4SDIuNTAwMDJaTTE0LjczODkgNi4wMDAwMUgxNFYxMkgxNC43Mzg5QzE0Ljk0NjkgMTIgMTUuMDY0IDEyLjIzOTMgMTQuOTM2MiAxMi40MDM1TDEzLjY5NzQgMTMuOTk2M0MxMy41OTczIDE0LjEyNSAxMy40MDI4IDE0LjEyNSAxMy4zMDI3IDEzLjk5NjNMMTIuMDYzOSAxMi40MDM1QzExLjkzNjIgMTIuMjM5MyAxMi4wNTMyIDEyIDEyLjI2MTIgMTJIMTNWNi4wMDAwMUgxMi4yNjEyQzEyLjA1MzIgNi4wMDAwMSAxMS45MzYxIDUuNzYwNzQgMTIuMDYzOSA1LjU5NjUzTDEzLjMwMjcgNC4wMDM3M0MxMy40MDI4IDMuODc1MDUgMTMuNTk3MyAzLjg3NTA1IDEzLjY5NzQgNC4wMDM3NEwxNC45MzYyIDUuNTk2NTNDMTUuMDYzOSA1Ljc2MDc0IDE0Ljk0NjkgNi4wMDAwMSAxNC43Mzg5IDYuMDAwMDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxZZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3NzA3NUMzLjg0MjIyIDAuODc3MDc1IDAuODc3MDc1IDMuODQyMjIgMC44NzcwNzUgNy40OTk5MUMwLjg3NzA3NSAxMS4xNTc2IDMuODQyMjIgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMTEuMTU3NiAxNC4xMjI3IDE0LjEyMjcgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTFDMTQuMTIyNyAzLjg0MjIyIDExLjE1NzYgMC44NzcwNzUgNy40OTk5MSAwLjg3NzA3NVpNMS44MjcwOCA3LjQ5OTkxQzEuODI3MDggNC4zNjY4OSA0LjM2Njg5IDEuODI3MDcgNy40OTk5MSAxLjgyNzA3QzEwLjYzMjkgMS44MjcwNyAxMy4xNzI3IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxQzEzLjE3MjcgMTAuNjMyOSAxMC42MzI5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzQuMzY2ODkgMTMuMTcyNyAxLjgyNzA4IDEwLjYzMjkgMS44MjcwOCA3LjQ5OTkxWk04LjM3Mjg3IDcuNTAwMDZDOC4zNzI4NyA3Ljk4MTk2IDcuOTgyMjEgOC4zNzI2MyA3LjUwMDMgOC4zNzI2M0M3LjAxODM5IDguMzcyNjMgNi42Mjc3MyA3Ljk4MTk2IDYuNjI3NzMgNy41MDAwNkM2LjYyNzczIDcuMDE4MTUgNy4wMTgzOSA2LjYyNzQ4IDcuNTAwMyA2LjYyNzQ4QzcuOTgyMjEgNi42Mjc0OCA4LjM3Mjg3IDcuMDE4MTUgOC4zNzI4NyA3LjUwMDA2Wk05LjMyMjg3IDcuNTAwMDZDOS4zMjI4NyA4LjUwNjY0IDguNTA2ODggOS4zMjI2MyA3LjUwMDMgOS4zMjI2M0M2LjQ5MzcyIDkuMzIyNjMgNS42Nzc3MyA4LjUwNjY0IDUuNjc3NzMgNy41MDAwNkM1LjY3NzczIDYuNDkzNDggNi40OTM3MiA1LjY3NzQ4IDcuNTAwMyA1LjY3NzQ4QzguNTA2ODggNS42Nzc0OCA5LjMyMjg3IDYuNDkzNDggOS4zMjI4NyA3LjUwMDA2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sS2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgNy41QzIgNy4yMjM4NiAyLjIyMzg2IDcgMi41IDdIMTIuNUMxMi43NzYxIDcgMTMgNy4yMjM4NiAxMyA3LjVDMTMgNy43NzYxNCAxMi43NzYxIDggMTIuNSA4SDIuNUMyLjIyMzg2IDggMiA3Ljc3NjE0IDIgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAyQzcuNzc2MTQgMiA4IDIuMjIzODYgOCAyLjVMOCAxMi41QzggMTIuNzc2MSA3Ljc3NjE0IDEzIDcuNSAxM0M3LjIyMzg2IDEzIDcgMTIuNzc2MSA3IDEyLjVMNyAyLjVDNyAyLjIyMzg2IDcuMjIzODYgMiA3LjUgMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEplPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgOS4xMjVDOC4zOTc0NiA5LjEyNSA5LjEyNSA4LjM5NzQ2IDkuMTI1IDcuNUM5LjEyNSA2LjYwMjU0IDguMzk3NDYgNS44NzUgNy41IDUuODc1QzYuNjAyNTQgNS44NzUgNS44NzUgNi42MDI1NCA1Ljg3NSA3LjVDNS44NzUgOC4zOTc0NiA2LjYwMjU0IDkuMTI1IDcuNSA5LjEyNVpNNy41IDEwLjEyNUM4Ljk0OTc1IDEwLjEyNSAxMC4xMjUgOC45NDk3NSAxMC4xMjUgNy41QzEwLjEyNSA2LjA1MDI1IDguOTQ5NzUgNC44NzUgNy41IDQuODc1QzYuMDUwMjUgNC44NzUgNC44NzUgNi4wNTAyNSA0Ljg3NSA3LjVDNC44NzUgOC45NDk3NSA2LjA1MDI1IDEwLjEyNSA3LjUgMTAuMTI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuODc1IDcuNUM5Ljg3NSA4LjgxMTY4IDguODExNjggOS44NzUgNy41IDkuODc1QzYuMTg4MzIgOS44NzUgNS4xMjUgOC44MTE2OCA1LjEyNSA3LjVDNS4xMjUgNi4xODgzMiA2LjE4ODMyIDUuMTI1IDcuNSA1LjEyNUM4LjgxMTY4IDUuMTI1IDkuODc1IDYuMTg4MzIgOS44NzUgNy41WlwiLGZpbGw6bn0pKX0sZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjI1IDcuNUMzLjYyNSA4LjEyMTMyIDMuMTIxMzIgOC42MjUgMi41IDguNjI1QzEuODc4NjggOC42MjUgMS4zNzUgOC4xMjEzMiAxLjM3NSA3LjVDMS4zNzUgNi44Nzg2OCAxLjg3ODY4IDYuMzc1IDIuNSA2LjM3NUMzLjEyMTMyIDYuMzc1IDMuNjI1IDYuODc4NjggMy42MjUgNy41Wk04LjYyNSA3LjVDOC42MjUgOC4xMjEzMiA4LjEyMTMyIDguNjI1IDcuNSA4LjYyNUM2Ljg3ODY4IDguNjI1IDYuMzc1IDguMTIxMzIgNi4zNzUgNy41QzYuMzc1IDYuODc4NjggNi44Nzg2OCA2LjM3NSA3LjUgNi4zNzVDOC4xMjEzMiA2LjM3NSA4LjYyNSA2Ljg3ODY4IDguNjI1IDcuNVpNMTIuNSA4LjYyNUMxMy4xMjEzIDguNjI1IDEzLjYyNSA4LjEyMTMyIDEzLjYyNSA3LjVDMTMuNjI1IDYuODc4NjggMTMuMTIxMyA2LjM3NSAxMi41IDYuMzc1QzExLjg3ODcgNi4zNzUgMTEuMzc1IDYuODc4NjggMTEuMzc1IDcuNUMxMS4zNzUgOC4xMjEzMiAxMS44Nzg3IDguNjI1IDEyLjUgOC42MjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx0dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC42MjUgMi41QzguNjI1IDMuMTIxMzIgOC4xMjEzMiAzLjYyNSA3LjUgMy42MjVDNi44Nzg2OCAzLjYyNSA2LjM3NSAzLjEyMTMyIDYuMzc1IDIuNUM2LjM3NSAxLjg3ODY4IDYuODc4NjggMS4zNzUgNy41IDEuMzc1QzguMTIxMzIgMS4zNzUgOC42MjUgMS44Nzg2OCA4LjYyNSAyLjVaTTguNjI1IDcuNUM4LjYyNSA4LjEyMTMyIDguMTIxMzIgOC42MjUgNy41IDguNjI1QzYuODc4NjggOC42MjUgNi4zNzUgOC4xMjEzMiA2LjM3NSA3LjVDNi4zNzUgNi44Nzg2OCA2Ljg3ODY4IDYuMzc1IDcuNSA2LjM3NUM4LjEyMTMyIDYuMzc1IDguNjI1IDYuODc4NjggOC42MjUgNy41Wk03LjUgMTMuNjI1QzguMTIxMzIgMTMuNjI1IDguNjI1IDEzLjEyMTMgOC42MjUgMTIuNUM4LjYyNSAxMS44Nzg3IDguMTIxMzIgMTEuMzc1IDcuNSAxMS4zNzVDNi44Nzg2OCAxMS4zNzUgNi4zNzUgMTEuODc4NyA2LjM3NSAxMi41QzYuMzc1IDEzLjEyMTMgNi44Nzg2OCAxMy42MjUgNy41IDEzLjYyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG50PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjg1MzU1IDIuMTQ2NDVDMy42NTgyOSAxLjk1MTE4IDMuMzQxNzEgMS45NTExOCAzLjE0NjQ1IDIuMTQ2NDVDMi45NTExOCAyLjM0MTcxIDIuOTUxMTggMi42NTgyOSAzLjE0NjQ1IDIuODUzNTVMNy4xNDY0NSA2Ljg1MzU1QzcuMzQxNzEgNy4wNDg4MiA3LjY1ODI5IDcuMDQ4ODIgNy44NTM1NSA2Ljg1MzU1TDExLjg1MzYgMi44NTM1NUMxMi4wNDg4IDIuNjU4MjkgMTIuMDQ4OCAyLjM0MTcxIDExLjg1MzYgMi4xNDY0NUMxMS42NTgzIDEuOTUxMTggMTEuMzQxNyAxLjk1MTE4IDExLjE0NjQgMi4xNDY0NUw3LjUgNS43OTI4OUwzLjg1MzU1IDIuMTQ2NDVaTTMuODUzNTUgOC4xNDY0NUMzLjY1ODI5IDcuOTUxMTggMy4zNDE3MSA3Ljk1MTE4IDMuMTQ2NDUgOC4xNDY0NUMyLjk1MTE4IDguMzQxNzEgMi45NTExOCA4LjY1ODI5IDMuMTQ2NDUgOC44NTM1NUw3LjE0NjQ1IDEyLjg1MzZDNy4zNDE3MSAxMy4wNDg4IDcuNjU4MjkgMTMuMDQ4OCA3Ljg1MzU1IDEyLjg1MzZMMTEuODUzNiA4Ljg1MzU1QzEyLjA0ODggOC42NTgyOSAxMi4wNDg4IDguMzQxNzEgMTEuODUzNiA4LjE0NjQ1QzExLjY1ODMgNy45NTExOCAxMS4zNDE3IDcuOTUxMTggMTEuMTQ2NCA4LjE0NjQ1TDcuNSAxMS43OTI5TDMuODUzNTUgOC4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljg1MzU1IDMuODUzNTVDNy4wNDg4MiAzLjY1ODI5IDcuMDQ4ODIgMy4zNDE3MSA2Ljg1MzU1IDMuMTQ2NDVDNi42NTgyOSAyLjk1MTE4IDYuMzQxNzEgMi45NTExOCA2LjE0NjQ1IDMuMTQ2NDVMMi4xNDY0NSA3LjE0NjQ1QzEuOTUxMTggNy4zNDE3MSAxLjk1MTE4IDcuNjU4MjkgMi4xNDY0NSA3Ljg1MzU1TDYuMTQ2NDUgMTEuODUzNkM2LjM0MTcxIDEyLjA0ODggNi42NTgyOSAxMi4wNDg4IDYuODUzNTUgMTEuODUzNkM3LjA0ODgyIDExLjY1ODMgNy4wNDg4MiAxMS4zNDE3IDYuODUzNTUgMTEuMTQ2NEwzLjIwNzExIDcuNUw2Ljg1MzU1IDMuODUzNTVaTTEyLjg1MzYgMy44NTM1NUMxMy4wNDg4IDMuNjU4MjkgMTMuMDQ4OCAzLjM0MTcxIDEyLjg1MzYgMy4xNDY0NUMxMi42NTgzIDIuOTUxMTggMTIuMzQxNyAyLjk1MTE4IDEyLjE0NjQgMy4xNDY0NUw4LjE0NjQ1IDcuMTQ2NDVDNy45NTExOCA3LjM0MTcxIDcuOTUxMTggNy42NTgyOSA4LjE0NjQ1IDcuODUzNTVMMTIuMTQ2NCAxMS44NTM2QzEyLjM0MTcgMTIuMDQ4OCAxMi42NTgzIDEyLjA0ODggMTIuODUzNiAxMS44NTM2QzEzLjA0ODggMTEuNjU4MyAxMy4wNDg4IDExLjM0MTcgMTIuODUzNiAxMS4xNDY0TDkuMjA3MTEgNy41TDEyLjg1MzYgMy44NTM1NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG90PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjE0NjQ1IDExLjE0NjRDMS45NTExOCAxMS4zNDE3IDEuOTUxMTggMTEuNjU4MyAyLjE0NjQ1IDExLjg1MzZDMi4zNDE3MSAxMi4wNDg4IDIuNjU4MjkgMTIuMDQ4OCAyLjg1MzU1IDExLjg1MzZMNi44NTM1NSA3Ljg1MzU1QzcuMDQ4ODIgNy42NTgyOSA3LjA0ODgyIDcuMzQxNzEgNi44NTM1NSA3LjE0NjQ1TDIuODUzNTUgMy4xNDY0NUMyLjY1ODI5IDIuOTUxMTggMi4zNDE3MSAyLjk1MTE4IDIuMTQ2NDUgMy4xNDY0NUMxLjk1MTE4IDMuMzQxNzEgMS45NTExOCAzLjY1ODI5IDIuMTQ2NDUgMy44NTM1NUw1Ljc5Mjg5IDcuNUwyLjE0NjQ1IDExLjE0NjRaTTguMTQ2NDUgMTEuMTQ2NEM3Ljk1MTE4IDExLjM0MTcgNy45NTExOCAxMS42NTgzIDguMTQ2NDUgMTEuODUzNkM4LjM0MTcxIDEyLjA0ODggOC42NTgyOSAxMi4wNDg4IDguODUzNTUgMTEuODUzNkwxMi44NTM2IDcuODUzNTVDMTMuMDQ4OCA3LjY1ODI5IDEzLjA0ODggNy4zNDE3MSAxMi44NTM2IDcuMTQ2NDVMOC44NTM1NSAzLjE0NjQ1QzguNjU4MjkgMi45NTExOCA4LjM0MTcxIDIuOTUxMTggOC4xNDY0NSAzLjE0NjQ1QzcuOTUxMTggMy4zNDE3MSA3Ljk1MTE4IDMuNjU4MjkgOC4xNDY0NSAzLjg1MzU1TDExLjc5MjkgNy41TDguMTQ2NDUgMTEuMTQ2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGl0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS4xNDY0IDYuODUzNTVDMTEuMzQxNyA3LjA0ODgyIDExLjY1ODMgNy4wNDg4MiAxMS44NTM2IDYuODUzNTVDMTIuMDQ4OCA2LjY1ODI5IDEyLjA0ODggNi4zNDE3MSAxMS44NTM2IDYuMTQ2NDVMNy44NTM1NSAyLjE0NjQ1QzcuNjU4MjkgMS45NTExOCA3LjM0MTcxIDEuOTUxMTggNy4xNDY0NSAyLjE0NjQ1TDMuMTQ2NDUgNi4xNDY0NUMyLjk1MTE4IDYuMzQxNzEgMi45NTExOCA2LjY1ODI5IDMuMTQ2NDUgNi44NTM1NUMzLjM0MTcxIDcuMDQ4ODIgMy42NTgyOSA3LjA0ODgyIDMuODUzNTUgNi44NTM1NUw3LjUgMy4yMDcxMUwxMS4xNDY0IDYuODUzNTVaTTExLjE0NjQgMTIuODUzNkMxMS4zNDE3IDEzLjA0ODggMTEuNjU4MyAxMy4wNDg4IDExLjg1MzYgMTIuODUzNkMxMi4wNDg4IDEyLjY1ODMgMTIuMDQ4OCAxMi4zNDE3IDExLjg1MzYgMTIuMTQ2NEw3Ljg1MzU1IDguMTQ2NDVDNy42NTgyOSA3Ljk1MTE4IDcuMzQxNzEgNy45NTExOCA3LjE0NjQ1IDguMTQ2NDVMMy4xNDY0NSAxMi4xNDY0QzIuOTUxMTggMTIuMzQxNyAyLjk1MTE4IDEyLjY1ODMgMy4xNDY0NSAxMi44NTM2QzMuMzQxNzEgMTMuMDQ4OCAzLjY1ODI5IDEzLjA0ODggMy44NTM1NSAxMi44NTM2TDcuNSA5LjIwNzExTDExLjE0NjQgMTIuODUzNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGF0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUwMDA1IDEuMDQ5OTlDNy43NDg1OCAxLjA0OTk5IDcuOTUwMDUgMS4yNTE0NiA3Ljk1MDA1IDEuNDk5OTlWOC40MTM1OUwxMC4xODE5IDYuMTgxNzlDMTAuMzU3NiA2LjAwNjA1IDEwLjY0MjUgNi4wMDYwNSAxMC44MTgyIDYuMTgxNzlDMTAuOTk0IDYuMzU3NTMgMTAuOTk0IDYuNjQyNDUgMTAuODE4MiA2LjgxODE5TDcuODE4MjUgOS44MTgxOUM3LjY0MjUxIDkuOTkzOTIgNy4zNTc1OSA5Ljk5MzkyIDcuMTgxODUgOS44MTgxOUw0LjE4MTg1IDYuODE4MTlDNC4wMDYxMSA2LjY0MjQ1IDQuMDA2MTEgNi4zNTc1MyA0LjE4MTg1IDYuMTgxNzlDNC4zNTc1OSA2LjAwNjA1IDQuNjQyNTEgNi4wMDYwNSA0LjgxODI1IDYuMTgxNzlMNy4wNTAwNSA4LjQxMzU5VjEuNDk5OTlDNy4wNTAwNSAxLjI1MTQ2IDcuMjUxNTIgMS4wNDk5OSA3LjUwMDA1IDEuMDQ5OTlaTTIuNSAxMEMyLjc3NjE0IDEwIDMgMTAuMjIzOSAzIDEwLjVWMTJDMyAxMi41NTM5IDMuNDQ1NjUgMTMgMy45OTYzNSAxM0gxMS4wMDEyQzExLjU1MjkgMTMgMTIgMTIuNTUyOCAxMiAxMlYxMC41QzEyIDEwLjIyMzkgMTIuMjIzOSAxMCAxMi41IDEwQzEyLjc3NjEgMTAgMTMgMTAuMjIzOSAxMyAxMC41VjEyQzEzIDEzLjEwNDEgMTIuMTA2MiAxNCAxMS4wMDEyIDE0SDMuOTk2MzVDMi44OTAxOSAxNCAyIDEzLjEwMyAyIDEyVjEwLjVDMiAxMC4yMjM5IDIuMjIzODYgMTAgMi41IDEwWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNC41XCIsY3k6XCIyLjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNC41XCIsY3k6XCI0LjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNC41XCIsY3k6XCI2LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI0LjVcIixjeTpcIjguNDk5XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiMTAuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiMTIuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjYuNVwiLGN5OlwiMi41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjYuNVwiLGN5OlwiNC41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjYuNVwiLGN5OlwiNi40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNi41XCIsY3k6XCI4LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjEwLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjEyLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiMi41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjguNDk5XCIsY3k6XCI0LjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiOC40OTlcIixjeTpcIjYuNDk5XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjguNDk5XCIsY3k6XCI4LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiMTAuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjguNDk5XCIsY3k6XCIxMi40OThcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiMTAuNDk5XCIsY3k6XCIyLjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiMTAuNDk5XCIsY3k6XCI0LjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiMTAuNDk5XCIsY3k6XCI2LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCIxMC40OTlcIixjeTpcIjguNDk5XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiMTAuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiMTIuNDk4XCIscjpcIi42XCIsZmlsbDpufSkpfSxzdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS41IDQuNjI1QzYuMTIxMzIgNC42MjUgNi42MjUgNC4xMjEzMiA2LjYyNSAzLjVDNi42MjUgMi44Nzg2OCA2LjEyMTMyIDIuMzc1IDUuNSAyLjM3NUM0Ljg3ODY4IDIuMzc1IDQuMzc1IDIuODc4NjggNC4zNzUgMy41QzQuMzc1IDQuMTIxMzIgNC44Nzg2OCA0LjYyNSA1LjUgNC42MjVaTTkuNSA0LjYyNUMxMC4xMjEzIDQuNjI1IDEwLjYyNSA0LjEyMTMyIDEwLjYyNSAzLjVDMTAuNjI1IDIuODc4NjggMTAuMTIxMyAyLjM3NSA5LjUgMi4zNzVDOC44Nzg2OCAyLjM3NSA4LjM3NSAyLjg3ODY4IDguMzc1IDMuNUM4LjM3NSA0LjEyMTMyIDguODc4NjggNC42MjUgOS41IDQuNjI1Wk0xMC42MjUgNy41QzEwLjYyNSA4LjEyMTMyIDEwLjEyMTMgOC42MjUgOS41IDguNjI1QzguODc4NjggOC42MjUgOC4zNzUgOC4xMjEzMiA4LjM3NSA3LjVDOC4zNzUgNi44Nzg2OCA4Ljg3ODY4IDYuMzc1IDkuNSA2LjM3NUMxMC4xMjEzIDYuMzc1IDEwLjYyNSA2Ljg3ODY4IDEwLjYyNSA3LjVaTTUuNSA4LjYyNUM2LjEyMTMyIDguNjI1IDYuNjI1IDguMTIxMzIgNi42MjUgNy41QzYuNjI1IDYuODc4NjggNi4xMjEzMiA2LjM3NSA1LjUgNi4zNzVDNC44Nzg2OCA2LjM3NSA0LjM3NSA2Ljg3ODY4IDQuMzc1IDcuNUM0LjM3NSA4LjEyMTMyIDQuODc4NjggOC42MjUgNS41IDguNjI1Wk0xMC42MjUgMTEuNUMxMC42MjUgMTIuMTIxMyAxMC4xMjEzIDEyLjYyNSA5LjUgMTIuNjI1QzguODc4NjggMTIuNjI1IDguMzc1IDEyLjEyMTMgOC4zNzUgMTEuNUM4LjM3NSAxMC44Nzg3IDguODc4NjggMTAuMzc1IDkuNSAxMC4zNzVDMTAuMTIxMyAxMC4zNzUgMTAuNjI1IDEwLjg3ODcgMTAuNjI1IDExLjVaTTUuNSAxMi42MjVDNi4xMjEzMiAxMi42MjUgNi42MjUgMTIuMTIxMyA2LjYyNSAxMS41QzYuNjI1IDEwLjg3ODcgNi4xMjEzMiAxMC4zNzUgNS41IDEwLjM3NUM0Ljg3ODY4IDEwLjM3NSA0LjM3NSAxMC44Nzg3IDQuMzc1IDExLjVDNC4zNzUgMTIuMTIxMyA0Ljg3ODY4IDEyLjYyNSA1LjUgMTIuNjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuNDk5OTggNC4wOTk5OEMyLjI3OTA2IDQuMDk5OTggMi4wOTk5OCA0LjI3OTA2IDIuMDk5OTggNC40OTk5OEMyLjA5OTk4IDQuNzIwODkgMi4yNzkwNiA0Ljg5OTk4IDIuNDk5OTggNC44OTk5OEgxMi41QzEyLjcyMDkgNC44OTk5OCAxMi45IDQuNzIwODkgMTIuOSA0LjQ5OTk4QzEyLjkgNC4yNzkwNiAxMi43MjA5IDQuMDk5OTggMTIuNSA0LjA5OTk4SDIuNDk5OThaTTIuNDk5OTggNi4wOTk5OEMyLjI3OTA2IDYuMDk5OTggMi4wOTk5OCA2LjI3OTA2IDIuMDk5OTggNi40OTk5OEMyLjA5OTk4IDYuNzIwODkgMi4yNzkwNiA2Ljg5OTk4IDIuNDk5OTggNi44OTk5OEgxMi41QzEyLjcyMDkgNi44OTk5OCAxMi45IDYuNzIwODkgMTIuOSA2LjQ5OTk4QzEyLjkgNi4yNzkwNiAxMi43MjA5IDYuMDk5OTggMTIuNSA2LjA5OTk4SDIuNDk5OThaTTIuMDk5OTggOC40OTk5OEMyLjA5OTk4IDguMjc5MDYgMi4yNzkwNiA4LjA5OTk4IDIuNDk5OTggOC4wOTk5OEgxMi41QzEyLjcyMDkgOC4wOTk5OCAxMi45IDguMjc5MDYgMTIuOSA4LjQ5OTk4QzEyLjkgOC43MjA4OSAxMi43MjA5IDguODk5OTggMTIuNSA4Ljg5OTk4SDIuNDk5OThDMi4yNzkwNiA4Ljg5OTk4IDIuMDk5OTggOC43MjA4OSAyLjA5OTk4IDguNDk5OThaTTIuNDk5OTggMTAuMUMyLjI3OTA2IDEwLjEgMi4wOTk5OCAxMC4yNzkxIDIuMDk5OTggMTAuNUMyLjA5OTk4IDEwLjcyMDkgMi4yNzkwNiAxMC45IDIuNDk5OTggMTAuOUgxMi41QzEyLjcyMDkgMTAuOSAxMi45IDEwLjcyMDkgMTIuOSAxMC41QzEyLjkgMTAuMjc5MSAxMi43MjA5IDEwLjEgMTIuNSAxMC4xSDIuNDk5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC4wOTk5OCAxMi41QzQuMDk5OTggMTIuNzIwOSA0LjI3OTA2IDEyLjkgNC40OTk5OCAxMi45QzQuNzIwODkgMTIuOSA0Ljg5OTk4IDEyLjcyMDkgNC44OTk5OCAxMi41TDQuODk5OTggMi41MDAwMkM0Ljg5OTk4IDIuMjc5MTEgNC43MjA4OSAyLjEwMDAzIDQuNDk5OTggMi4xMDAwM0M0LjI3OTA2IDIuMTAwMDMgNC4wOTk5OCAyLjI3OTExIDQuMDk5OTggMi41MDAwMkw0LjA5OTk4IDEyLjVaTTYuMDk5OTggMTIuNUM2LjA5OTk4IDEyLjcyMDkgNi4yNzkwNiAxMi45IDYuNDk5OTggMTIuOUM2LjcyMDg5IDEyLjkgNi44OTk5OCAxMi43MjA5IDYuODk5OTggMTIuNUw2Ljg5OTk4IDIuNTAwMDJDNi44OTk5OCAyLjI3OTExIDYuNzIwODkgMi4xMDAwMyA2LjQ5OTk4IDIuMTAwMDNDNi4yNzkwNiAyLjEwMDAzIDYuMDk5OTggMi4yNzkxMSA2LjA5OTk4IDIuNTAwMDJMNi4wOTk5OCAxMi41Wk04LjQ5OTk4IDEyLjlDOC4yNzkwNiAxMi45IDguMDk5OTggMTIuNzIwOSA4LjA5OTk4IDEyLjVMOC4wOTk5OCAyLjUwMDAyQzguMDk5OTggMi4yNzkxMSA4LjI3OTA2IDIuMTAwMDIgOC40OTk5OCAyLjEwMDAyQzguNzIwODkgMi4xMDAwMiA4Ljg5OTk4IDIuMjc5MTEgOC44OTk5OCAyLjUwMDAyTDguODk5OTggMTIuNUM4Ljg5OTk4IDEyLjcyMDkgOC43MjA4OSAxMi45IDguNDk5OTggMTIuOVpNMTAuMSAxMi41QzEwLjEgMTIuNzIwOSAxMC4yNzkxIDEyLjkgMTAuNSAxMi45QzEwLjcyMDkgMTIuOSAxMC45IDEyLjcyMDkgMTAuOSAxMi41TDEwLjkgMi41MDAwMkMxMC45IDIuMjc5MTEgMTAuNzIwOSAyLjEwMDAyIDEwLjUgMi4xMDAwMkMxMC4yNzkxIDIuMTAwMDIgMTAuMSAyLjI3OTExIDEwLjEgMi41MDAwMkwxMC4xIDEyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxmdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuMzI4NSAxLjEzNjA3QzEwLjEzMzIgMC45NDA4MDkgOS44MTY2MiAwLjk0MDgwOCA5LjYyMTM2IDEuMTM2MDdDOS40MjYwOSAxLjMzMTMzIDkuNDI2MDkgMS42NDc5MiA5LjYyMTM2IDEuODQzMThMMTAuMjc0NCAyLjQ5NjE5TDUuNDI1NjMgNi4xMzI3NEw0LjMxODA1IDUuMDI1MTZDNC4xMjI3OSA0LjgyOTkgMy44MDYyMSA0LjgyOTkgMy42MTA5NSA1LjAyNTE2QzMuNDE1NjkgNS4yMjA0MiAzLjQxNTY5IDUuNTM3IDMuNjEwOTUgNS43MzIyNkw1LjAyNTE2IDcuMTQ2NDhMNi4wODU4MiA4LjIwNzE0TDIuODE1NDUgMTEuNDc3NUMyLjYyMDE5IDExLjY3MjggMi42MjAxOSAxMS45ODk0IDIuODE1NDUgMTIuMTg0NkMzLjAxMDcyIDEyLjM3OTkgMy4zMjczIDEyLjM3OTkgMy41MjI1NiAxMi4xODQ2TDYuNzkyOTMgOC45MTQyNUw3Ljg1MzU5IDkuOTc0OTFMOS4yNjc4IDExLjM4OTFDOS40NjMwNiAxMS41ODQ0IDkuNzc5NjUgMTEuNTg0NCA5Ljk3NDkxIDExLjM4OTFDMTAuMTcwMiAxMS4xOTM5IDEwLjE3MDIgMTAuODc3MyA5Ljk3NDkxIDEwLjY4Mkw4Ljg2NzMzIDkuNTc0NDNMMTIuNTAzOSA0LjcyNTdMMTMuMTU2OSA1LjM3ODcxQzEzLjM1MjIgNS41NzM5NyAxMy42Njg3IDUuNTczOTcgMTMuODY0IDUuMzc4NzFDMTQuMDU5MyA1LjE4MzQ1IDE0LjA1OTMgNC44NjY4NyAxMy44NjQgNC42NzE2TDEyLjgwMzMgMy42MTA5NEwxMS4zODkxIDIuMTk2NzNMMTAuMzI4NSAxLjEzNjA3Wk02LjEzOTkyIDYuODQ3MDJMMTAuOTg4NyAzLjIxMDQ3TDExLjc4OTYgNC4wMTE0Mkw4LjE1MzA1IDguODYwMTVMNi4xMzk5MiA2Ljg0NzAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuNjIxMjkgMS4xMzYwN0M5LjgxNjU2IDAuOTQwODA4IDEwLjEzMzEgMC45NDA4MDkgMTAuMzI4NCAxLjEzNjA3TDExLjM4OTEgMi4xOTY3M0wxMi44MDMzIDMuNjEwOTRMMTMuODYzOSA0LjY3MTZDMTQuMDU5MiA0Ljg2Njg3IDE0LjA1OTIgNS4xODM0NSAxMy44NjM5IDUuMzc4NzFDMTMuNjY4NyA1LjU3Mzk3IDEzLjM1MjEgNS41NzM5NyAxMy4xNTY4IDUuMzc4NzFMMTIuNTAzOCA0LjcyNTdMOC44NjcyNyA5LjU3NDQzTDkuOTc0ODUgMTAuNjgyQzEwLjE3MDEgMTAuODc3MyAxMC4xNzAxIDExLjE5MzkgOS45NzQ4NSAxMS4zODkxQzkuNzc5NTkgMTEuNTg0NCA5LjQ2MyAxMS41ODQ0IDkuMjY3NzQgMTEuMzg5MUw3Ljg1MzUzIDkuOTc0OTFMNi43OTI4NyA4LjkxNDI1TDMuNTIyNSAxMi4xODQ2QzMuMzI3MjQgMTIuMzc5OSAzLjAxMDY1IDEyLjM3OTkgMi44MTUzOSAxMi4xODQ2QzIuNjIwMTMgMTEuOTg5NCAyLjYyMDEzIDExLjY3MjggMi44MTUzOSAxMS40Nzc1TDYuMDg1NzYgOC4yMDcxNEw1LjAyNTEgNy4xNDY0OEwzLjYxMDg5IDUuNzMyMjZDMy40MTU2MyA1LjUzNyAzLjQxNTYyIDUuMjIwNDIgMy42MTA4OSA1LjAyNTE2QzMuODA2MTUgNC44Mjk5IDQuMTIyNzMgNC44Mjk5IDQuMzE3OTkgNS4wMjUxNkw1LjQyNTU3IDYuMTMyNzRMMTAuMjc0MyAyLjQ5NjE5TDkuNjIxMjkgMS44NDMxOEM5LjQyNjAzIDEuNjQ3OTIgOS40MjYwMyAxLjMzMTMzIDkuNjIxMjkgMS4xMzYwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuNjIxMjkgMS4xMzYwN0M5LjgxNjU2IDAuOTQwODA4IDEwLjEzMzEgMC45NDA4MDkgMTAuMzI4NCAxLjEzNjA3TDExLjM4OTEgMi4xOTY3M0wxMi44MDMzIDMuNjEwOTRMMTMuODYzOSA0LjY3MTZDMTQuMDU5MiA0Ljg2Njg3IDE0LjA1OTIgNS4xODM0NSAxMy44NjM5IDUuMzc4NzFDMTMuNjY4NyA1LjU3Mzk3IDEzLjM1MjEgNS41NzM5NyAxMy4xNTY4IDUuMzc4NzFMMTIuNTAzOCA0LjcyNTdMOC44NjcyNyA5LjU3NDQzTDkuOTc0ODUgMTAuNjgyQzEwLjE3MDEgMTAuODc3MyAxMC4xNzAxIDExLjE5MzkgOS45NzQ4NSAxMS4zODkxQzkuNzc5NTkgMTEuNTg0NCA5LjQ2MyAxMS41ODQ0IDkuMjY3NzQgMTEuMzg5MUw3Ljg1MzUzIDkuOTc0OTFMNi43OTI4NyA4LjkxNDI1TDMuNTIyNSAxMi4xODQ2QzMuMzI3MjQgMTIuMzc5OSAzLjAxMDY1IDEyLjM3OTkgMi44MTUzOSAxMi4xODQ2QzIuNjIwMTMgMTEuOTg5NCAyLjYyMDEzIDExLjY3MjggMi44MTUzOSAxMS40Nzc1TDYuMDg1NzYgOC4yMDcxNEw1LjAyNTEgNy4xNDY0OEwzLjYxMDg5IDUuNzMyMjZDMy40MTU2MyA1LjUzNyAzLjQxNTYyIDUuMjIwNDIgMy42MTA4OSA1LjAyNTE2QzMuODA2MTUgNC44Mjk5IDQuMTIyNzMgNC44Mjk5IDQuMzE3OTkgNS4wMjUxNkw1LjQyNTU3IDYuMTMyNzRMMTAuMjc0MyAyLjQ5NjE5TDkuNjIxMjkgMS44NDMxOEM5LjQyNjAzIDEuNjQ3OTIgOS40MjYwMyAxLjMzMTMzIDkuNjIxMjkgMS4xMzYwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHB0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTk5IDMuMDk5OThDNy4yNzkwNyAzLjA5OTk4IDcuMDk5OTkgMy4yNzkwNiA3LjA5OTk5IDMuNDk5OThDNy4wOTk5OSAzLjcyMDg5IDcuMjc5MDcgMy44OTk5OCA3LjQ5OTk5IDMuODk5OThIMTQuNUMxNC43MjA5IDMuODk5OTggMTQuOSAzLjcyMDg5IDE0LjkgMy40OTk5OEMxNC45IDMuMjc5MDYgMTQuNzIwOSAzLjA5OTk4IDE0LjUgMy4wOTk5OEg3LjQ5OTk5Wk03LjQ5OTk4IDUuMUM3LjI3OTA3IDUuMSA3LjA5OTk4IDUuMjc5MDggNy4wOTk5OCA1LjVDNy4wOTk5OCA1LjcyMDkxIDcuMjc5MDcgNS45IDcuNDk5OTggNS45SDE0LjVDMTQuNzIwOSA1LjkgMTQuOSA1LjcyMDkxIDE0LjkgNS41QzE0LjkgNS4yNzkwOCAxNC43MjA5IDUuMSAxNC41IDUuMUg3LjQ5OTk4Wk03LjEgNy41QzcuMSA3LjI3OTA4IDcuMjc5MDkgNy4xIDcuNSA3LjFIMTQuNUMxNC43MjA5IDcuMSAxNC45IDcuMjc5MDggMTQuOSA3LjVDMTQuOSA3LjcyMDkxIDE0LjcyMDkgNy45IDE0LjUgNy45SDcuNUM3LjI3OTA5IDcuOSA3LjEgNy43MjA5MSA3LjEgNy41Wk03LjQ5OTk4IDkuMUM3LjI3OTA3IDkuMSA3LjA5OTk4IDkuMjc5MDggNy4wOTk5OCA5LjVDNy4wOTk5OCA5LjcyMDkxIDcuMjc5MDcgOS45IDcuNDk5OTggOS45SDE0LjVDMTQuNzIwOSA5LjkgMTQuOSA5LjcyMDkxIDE0LjkgOS41QzE0LjkgOS4yNzkwOCAxNC43MjA5IDkuMSAxNC41IDkuMUg3LjQ5OTk4Wk03LjA5OTk4IDExLjVDNy4wOTk5OCAxMS4yNzkxIDcuMjc5MDcgMTEuMSA3LjQ5OTk4IDExLjFIMTQuNUMxNC43MjA5IDExLjEgMTQuOSAxMS4yNzkxIDE0LjkgMTEuNUMxNC45IDExLjcyMDkgMTQuNzIwOSAxMS45IDE0LjUgMTEuOUg3LjQ5OTk4QzcuMjc5MDcgMTEuOSA3LjA5OTk4IDExLjcyMDkgNy4wOTk5OCAxMS41Wk0yLjUgOS4yNTAwM0w1IDYuMDAwMDNIMEwyLjUgOS4yNTAwM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGh0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjUgMUM0LjIyMzg2IDEgNCAxLjIyMzg2IDQgMS41QzQgMS43NzYxNCA0LjIyMzg2IDIgNC41IDJIMTJWMTNINC41QzQuMjIzODYgMTMgNCAxMy4yMjM5IDQgMTMuNUM0IDEzLjc3NjEgNC4yMjM4NiAxNCA0LjUgMTRIMTJDMTIuNTUyMyAxNCAxMyAxMy41NTIzIDEzIDEzVjJDMTMgMS40NDc3MiAxMi41NTIzIDEgMTIgMUg0LjVaTTYuNjAzNTUgNC44OTY0NUM2LjQwODI5IDQuNzAxMTggNi4wOTE3MSA0LjcwMTE4IDUuODk2NDUgNC44OTY0NUM1LjcwMTE4IDUuMDkxNzEgNS43MDExOCA1LjQwODI5IDUuODk2NDUgNS42MDM1NUw3LjI5Mjg5IDdIMC41QzAuMjIzODU4IDcgMCA3LjIyMzg2IDAgNy41QzAgNy43NzYxNCAwLjIyMzg1OCA4IDAuNSA4SDcuMjkyODlMNS44OTY0NSA5LjM5NjQ1QzUuNzAxMTggOS41OTE3MSA1LjcwMTE4IDkuOTA4MjkgNS44OTY0NSAxMC4xMDM2QzYuMDkxNzEgMTAuMjk4OCA2LjQwODI5IDEwLjI5ODggNi42MDM1NSAxMC4xMDM2TDguODUzNTUgNy44NTM1NUM5LjA0ODgyIDcuNjU4MjkgOS4wNDg4MiA3LjM0MTcxIDguODUzNTUgNy4xNDY0NUw2LjYwMzU1IDQuODk2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxndD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAyLjVDMiAyLjIyMzg2IDIuMjIzODYgMiAyLjUgMkg1LjVDNS43NzYxNCAyIDYgMi4yMjM4NiA2IDIuNUM2IDIuNzc2MTQgNS43NzYxNCAzIDUuNSAzSDNWNS41QzMgNS43NzYxNCAyLjc3NjE0IDYgMi41IDZDMi4yMjM4NiA2IDIgNS43NzYxNCAyIDUuNVYyLjVaTTkgMi41QzkgMi4yMjM4NiA5LjIyMzg2IDIgOS41IDJIMTIuNUMxMi43NzYxIDIgMTMgMi4yMjM4NiAxMyAyLjVWNS41QzEzIDUuNzc2MTQgMTIuNzc2MSA2IDEyLjUgNkMxMi4yMjM5IDYgMTIgNS43NzYxNCAxMiA1LjVWM0g5LjVDOS4yMjM4NiAzIDkgMi43NzYxNCA5IDIuNVpNMi41IDlDMi43NzYxNCA5IDMgOS4yMjM4NiAzIDkuNVYxMkg1LjVDNS43NzYxNCAxMiA2IDEyLjIyMzkgNiAxMi41QzYgMTIuNzc2MSA1Ljc3NjE0IDEzIDUuNSAxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41VjkuNUMyIDkuMjIzODYgMi4yMjM4NiA5IDIuNSA5Wk0xMi41IDlDMTIuNzc2MSA5IDEzIDkuMjIzODYgMTMgOS41VjEyLjVDMTMgMTIuNzc2MSAxMi43NzYxIDEzIDEyLjUgMTNIOS41QzkuMjIzODYgMTMgOSAxMi43NzYxIDkgMTIuNUM5IDEyLjIyMzkgOS4yMjM4NiAxMiA5LjUgMTJIMTJWOS41QzEyIDkuMjIzODYgMTIuMjIzOSA5IDEyLjUgOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHZ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDJDMC40NDc3MTUgMiAwIDIuNDQ3NzIgMCAzVjEyQzAgMTIuNTUyMyAwLjQ0NzcxNSAxMyAxIDEzSDE0QzE0LjU1MjMgMTMgMTUgMTIuNTUyMyAxNSAxMlYzQzE1IDIuNDQ3NzIgMTQuNTUyMyAyIDE0IDJIMVpNMSAzTDE0IDNWMy45MjQ5NEMxMy45MTc0IDMuOTI0ODYgMTMuODMzOCAzLjk0NzUxIDEzLjc1ODkgMy45OTUwNUw3LjUgNy45NjcwM0wxLjI0MTEyIDMuOTk1MDVDMS4xNjYyMSAzLjk0NzUxIDEuMDgyNiAzLjkyNDg2IDEgMy45MjQ5NFYzWk0xIDQuOTA3OTdWMTJIMTRWNC45MDc5N0w3Ljc0MTEyIDguODc5OTVDNy41OTM5NCA4Ljk3MzM1IDcuNDA2MDYgOC45NzMzNSA3LjI1ODg4IDguODc5OTVMMSA0LjkwNzk3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuOTQ3MjEgMC4xNjQ1OTRDNy42NjU2OSAwLjAyMzgyOTkgNy4zMzQzMSAwLjAyMzgzMDIgNy4wNTI3OSAwLjE2NDU5NEwwLjU1Mjc4NiAzLjQxNDU5QzAuMjE0MDAyIDMuNTgzOTkgMCAzLjkzMDI1IDAgNC4zMDkwMlYxMkMwIDEyLjU1MjMgMC40NDc3MTUgMTMgMSAxM0gxNEMxNC41NTIzIDEzIDE1IDEyLjU1MjMgMTUgMTJWNC4zMDkwMkMxNSAzLjkzMDI1IDE0Ljc4NiAzLjU4Mzk5IDE0LjQ0NzIgMy40MTQ1OUw3Ljk0NzIxIDAuMTY0NTk0Wk0xMy41Njg5IDQuMDkzNDlMNy41IDEuMDU5MDJMMS40MzEwNSA0LjA5MzQ5TDcuNSA3LjI5MTM2TDEzLjU2ODkgNC4wOTM0OVpNMSA0Ljg4MzY2VjEySDE0VjQuODgzNjZMNy43MDk3NyA4LjE5ODEzQzcuNTc4NDggOC4yNjczMSA3LjQyMTUyIDguMjY3MzEgNy4yOTAyMyA4LjE5ODEzTDEgNC44ODM2NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEN0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04LjQ0NDkgMC42MDg3NjVDOC4wMTgzIC0wLjEwNzAxNSA2Ljk4MTcgLTAuMTA3MDE1IDYuNTU1MDkgMC42MDg3NjZMMC4xNjExNzggMTEuMzM2OEMtMC4yNzU4MjQgMTIuMDcgMC4yNTI1MDMgMTMgMS4xMDYwOCAxM0gxMy44OTM5QzE0Ljc0NzUgMTMgMTUuMjc1OCAxMi4wNyAxNC44Mzg4IDExLjMzNjhMOC40NDQ5IDAuNjA4NzY1Wk03LjQxNDEgMS4xMjA3M0M3LjQ1Mjg4IDEuMDU1NjYgNy41NDcxMiAxLjA1NTY2IDcuNTg1OSAxLjEyMDczTDEzLjk3OTggMTEuODQ4OEMxNC4wMTk2IDExLjkxNTQgMTMuOTcxNSAxMiAxMy44OTM5IDEySDEuMTA2MDhDMS4wMjg0OSAxMiAwLjk4MDQ1NCAxMS45MTU0IDEuMDIwMTggMTEuODQ4OEw3LjQxNDEgMS4xMjA3M1pNNi44MjY5IDQuNDg2MTFDNi44MTIyMSA0LjEwNDIzIDcuMTE3ODMgMy43ODY2MyA3LjUgMy43ODY2M0M3Ljg4MjE3IDMuNzg2NjMgOC4xODc3OCA0LjEwNDIzIDguMTczMSA0LjQ4NjEyTDguMDE5MjEgOC40ODcwMUM4LjAwODQ4IDguNzY2IDcuNzc5MiA4Ljk4NjY0IDcuNSA4Ljk4NjY0QzcuMjIwOCA4Ljk4NjY0IDYuOTkxNTEgOC43NjYgNi45ODA3OCA4LjQ4NzAxTDYuODI2OSA0LjQ4NjExWk04LjI0OTg5IDEwLjQ3NkM4LjI0OTg5IDEwLjg5MDIgNy45MTQxIDExLjIyNiA3LjQ5OTg5IDExLjIyNkM3LjA4NTY3IDExLjIyNiA2Ljc0OTg5IDEwLjg5MDIgNi43NDk4OSAxMC40NzZDNi43NDk4OSAxMC4wNjE4IDcuMDg1NjcgOS43MjU5OSA3LjQ5OTg5IDkuNzI1OTlDNy45MTQxIDkuNzI1OTkgOC4yNDk4OSAxMC4wNjE4IDguMjQ5ODkgMTAuNDc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgMUMyLjQ0NzcxIDEgMiAxLjQ0NzcyIDIgMlYxM0MyIDEzLjU1MjMgMi40NDc3MiAxNCAzIDE0SDEwLjVDMTAuNzc2MSAxNCAxMSAxMy43NzYxIDExIDEzLjVDMTEgMTMuMjIzOSAxMC43NzYxIDEzIDEwLjUgMTNIM1YyTDEwLjUgMkMxMC43NzYxIDIgMTEgMS43NzYxNCAxMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxSDNaTTEyLjYwMzYgNC44OTY0NUMxMi40MDgzIDQuNzAxMTggMTIuMDkxNyA0LjcwMTE4IDExLjg5NjQgNC44OTY0NUMxMS43MDEyIDUuMDkxNzEgMTEuNzAxMiA1LjQwODI5IDExLjg5NjQgNS42MDM1NUwxMy4yOTI5IDdINi41QzYuMjIzODYgNyA2IDcuMjIzODYgNiA3LjVDNiA3Ljc3NjE0IDYuMjIzODYgOCA2LjUgOEgxMy4yOTI5TDExLjg5NjQgOS4zOTY0NUMxMS43MDEyIDkuNTkxNzEgMTEuNzAxMiA5LjkwODI5IDExLjg5NjQgMTAuMTAzNkMxMi4wOTE3IDEwLjI5ODggMTIuNDA4MyAxMC4yOTg4IDEyLjYwMzYgMTAuMTAzNkwxNC44NTM2IDcuODUzNTVDMTUuMDQ4OCA3LjY1ODI5IDE1LjA0ODggNy4zNDE3MSAxNC44NTM2IDcuMTQ2NDVMMTIuNjAzNiA0Ljg5NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sd3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNSAyQzUuNzc2MTQgMiA2IDIuMjIzODYgNiAyLjVWNS41QzYgNS43NzYxNCA1Ljc3NjE0IDYgNS41IDZIMi41QzIuMjIzODYgNiAyIDUuNzc2MTQgMiA1LjVDMiA1LjIyMzg2IDIuMjIzODYgNSAyLjUgNUg1VjIuNUM1IDIuMjIzODYgNS4yMjM4NiAyIDUuNSAyWk05LjUgMkM5Ljc3NjE0IDIgMTAgMi4yMjM4NiAxMCAyLjVWNUgxMi41QzEyLjc3NjEgNSAxMyA1LjIyMzg2IDEzIDUuNUMxMyA1Ljc3NjE0IDEyLjc3NjEgNiAxMi41IDZIOS41QzkuMjIzODYgNiA5IDUuNzc2MTQgOSA1LjVWMi41QzkgMi4yMjM4NiA5LjIyMzg2IDIgOS41IDJaTTIgOS41QzIgOS4yMjM4NiAyLjIyMzg2IDkgMi41IDlINS41QzUuNzc2MTQgOSA2IDkuMjIzODYgNiA5LjVWMTIuNUM2IDEyLjc3NjEgNS43NzYxNCAxMyA1LjUgMTNDNS4yMjM4NiAxMyA1IDEyLjc3NjEgNSAxMi41VjEwSDIuNUMyLjIyMzg2IDEwIDIgOS43NzYxNCAyIDkuNVpNOSA5LjVDOSA5LjIyMzg2IDkuMjIzODYgOSA5LjUgOUgxMi41QzEyLjc3NjEgOSAxMyA5LjIyMzg2IDEzIDkuNUMxMyA5Ljc3NjE0IDEyLjc3NjEgMTAgMTIuNSAxMEgxMFYxMi41QzEwIDEyLjc3NjEgOS43NzYxNCAxMyA5LjUgMTNDOS4yMjM4NiAxMyA5IDEyLjc3NjEgOSAxMi41VjkuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDJDMi40NDc3MiAyIDIgMi40NDc3MiAyIDNWMTJDMiAxMi41NTIzIDIuNDQ3NzIgMTMgMyAxM0gxMkMxMi41NTIzIDEzIDEzIDEyLjU1MjMgMTMgMTJWOC41QzEzIDguMjIzODYgMTIuNzc2MSA4IDEyLjUgOEMxMi4yMjM5IDggMTIgOC4yMjM4NiAxMiA4LjVWMTJIM1YzTDYuNSAzQzYuNzc2MTQgMyA3IDIuNzc2MTQgNyAyLjVDNyAyLjIyMzg2IDYuNzc2MTQgMiA2LjUgMkgzWk0xMi44NTM2IDIuMTQ2NDVDMTIuOTAxNSAyLjE5NDM5IDEyLjkzNzcgMi4yNDk2NCAxMi45NjIxIDIuMzA4NjFDMTIuOTg2MSAyLjM2NjY5IDEyLjk5OTYgMi40MzAzIDEzIDIuNDk3TDEzIDIuNVYyLjUwMDQ5VjUuNUMxMyA1Ljc3NjE0IDEyLjc3NjEgNiAxMi41IDZDMTIuMjIzOSA2IDEyIDUuNzc2MTQgMTIgNS41VjMuNzA3MTFMNi44NTM1NSA4Ljg1MzU1QzYuNjU4MjkgOS4wNDg4MiA2LjM0MTcxIDkuMDQ4ODIgNi4xNDY0NSA4Ljg1MzU1QzUuOTUxMTggOC42NTgyOSA1Ljk1MTE4IDguMzQxNzEgNi4xNDY0NSA4LjE0NjQ1TDExLjI5MjkgM0g5LjVDOS4yMjM4NiAzIDkgMi43NzYxNCA5IDIuNUM5IDIuMjIzODYgOS4yMjM4NiAyIDkuNSAySDEyLjQ5OTlIMTIuNUMxMi41Njc4IDIgMTIuNjMyNCAyLjAxMzQ5IDEyLjY5MTQgMi4wMzc5NEMxMi43NTA0IDIuMDYyMzQgMTIuODA1NiAyLjA5ODUxIDEyLjg1MzYgMi4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHh0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNC43NjQ5IDYuMDc1OTVDMTQuOTk5MSA2LjIyMjMxIDE1LjA3MDMgNi41MzA3OCAxNC45MjM5IDYuNzY0OTVDMTQuNDg0OSA3LjQ2NzQyIDEzLjk2MzIgOC4xMDY0NCAxMy4zNzAyIDguNjYzMDRMMTQuNTcxMiA5Ljg2NDA1QzE0Ljc2NjQgMTAuMDU5MyAxNC43NjY0IDEwLjM3NTkgMTQuNTcxMiAxMC41NzEyQzE0LjM3NTkgMTAuNzY2NCAxNC4wNTkzIDEwLjc2NjQgMTMuODY0MSAxMC41NzEyTDEyLjYwMTEgOS4zMDgxNkMxMS44MDQ5IDkuOTAyODIgMTAuOTA4OSAxMC4zNjIxIDkuOTMzNzQgMTAuNjUxTDEwLjM4MyAxMi4zMjc2QzEwLjQ1NDQgMTIuNTk0NCAxMC4yOTYxIDEyLjg2ODUgMTAuMDI5NCAxMi45NEM5Ljc2MjY2IDEzLjAxMTUgOS40ODg1IDEyLjg1MzIgOS40MTcwMyAxMi41ODY0TDguOTU5MTYgMTAuODc3NUM4LjQ4NzQyIDEwLjk1OCA4LjAwMDM1IDEwLjk5OTkgNy41IDEwLjk5OTlDNi45OTk2NCAxMC45OTk5IDYuNTEyNTcgMTAuOTU4IDYuMDQwODIgMTAuODc3NUw1LjU4Mjk5IDEyLjU4NjRDNS41MTE1MyAxMi44NTMyIDUuMjM3MzcgMTMuMDExNSA0Ljk3MDYzIDEyLjk0QzQuNzAzOSAxMi44Njg1IDQuNTQ1NiAxMi41OTQ0IDQuNjE3MDYgMTIuMzI3N0w1LjA2NjI0IDEwLjY1MUM0LjA5MTExIDEwLjM2MjEgMy4xOTUwMyA5LjkwMjgxIDIuMzk4OSA5LjMwODE0TDEuMTM1OSAxMC41NzExQzAuOTQwNjM4IDEwLjc2NjQgMC42MjQwNTggMTAuNzY2NCAwLjQyODc5NyAxMC41NzExQzAuMjMzNTM3IDEwLjM3NTkgMC4yMzM1MzcgMTAuMDU5MyAwLjQyODc5NyA5Ljg2NDA0TDEuNjI5ODIgOC42NjMwMkMxLjAzNjgyIDguMTA2NDMgMC41MTUxMTMgNy40Njc0MiAwLjA3NjA2NzcgNi43NjQ5NUMtMC4wNzAyODY3IDYuNTMwNzggMC4wMDA4OTg1NDQgNi4yMjIzMSAwLjIzNTA2NCA2LjA3NTk1QzAuNDY5MjMgNS45Mjk2IDAuNzc3NzAzIDYuMDAwNzggMC45MjQwNTcgNi4yMzQ5NUMxLjQwMzU0IDcuMDAyMTIgMS45ODkgNy42ODA1NiAyLjY2MjMzIDguMjQyN0MyLjY3MzE1IDguMjUwOTYgMi42ODM3IDguMjU5NzEgMi42OTM5NyA4LjI2ODk3QzQuMDA4OTcgOS4zNTUyNyA1LjY1NTM2IDkuOTk5OSA3LjUgOS45OTk5QzEwLjMwNzggOS45OTk5IDEyLjY1NjMgOC41MDYyOSAxNC4wNzU5IDYuMjM0OTVDMTQuMjIyMyA2LjAwMDc4IDE0LjUzMDggNS45Mjk2IDE0Ljc2NDkgNi4wNzU5NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF90PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy4zNTM2IDIuMzUzNTVDMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMS44NDE3MSAxMy4zNTM2IDEuNjQ2NDVDMTMuMTU4MyAxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMi42NDY0IDEuNjQ2NDVMMTAuNjgyOCAzLjYxMDEyQzkuNzA2NTIgMy4yMTY3MSA4LjYzNzU5IDMgNy41IDNDNC4zMDc4NiAzIDEuNjU2MzkgNC43MDYzOCAwLjA3NjAwMDIgNy4yMzUwMUMtMC4wMjUzMzM4IDcuMzk3MTUgLTAuMDI1MzMzNCA3LjYwMjg4IDAuMDc2MDAxNCA3Ljc2NTAxQzAuOTAyOTQ1IDkuMDg4MTIgMi4wMjMxNCAxMC4xODYxIDMuMzYwNjEgMTAuOTMyM0wxLjY0NjQ1IDEyLjY0NjRDMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTMuMTU4MyAxLjY0NjQ1IDEzLjM1MzZDMS44NDE3MSAxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAyLjM1MzU1IDEzLjM1MzZMNC4zMTcyMyAxMS4zODk5QzUuMjkzNDggMTEuNzgzMyA2LjM2MjQxIDEyIDcuNSAxMkMxMC42OTIxIDEyIDEzLjM0MzYgMTAuMjkzNiAxNC45MjQgNy43NjUwMUMxNS4wMjUzIDcuNjAyODggMTUuMDI1MyA3LjM5NzE1IDE0LjkyNCA3LjIzNTAxQzE0LjA5NzEgNS45MTE5IDEyLjk3NjkgNC44MTM5MSAxMS42Mzk0IDQuMDY3NzFMMTMuMzUzNiAyLjM1MzU1Wk05LjkwNDI4IDQuMzg4NjFDOS4xNTMzMiA0LjEzNjEgOC4zNDc1OSA0IDcuNSA0QzQuODAyODUgNCAyLjUyOTUyIDUuMzc4MTYgMS4wOTYyMiA3LjUwMDAxQzEuODcyODQgOC42NDk3IDIuODk2MDkgOS41ODEwNiA0LjA5OTc0IDEwLjE5MzFMOS45MDQyOCA0LjM4ODYxWk01LjA5NTcyIDEwLjYxMTRMMTAuOTAwMyA0LjgwNjg1QzEyLjEwMzkgNS40MTg5NCAxMy4xMjcyIDYuMzUwMzEgMTMuOTAzOCA3LjUwMDAxQzEyLjQ3MDUgOS42MjE4MyAxMC4xOTcxIDExIDcuNSAxMUM2LjY1MjQxIDExIDUuODQ2NjggMTAuODYzOSA1LjA5NTcyIDEwLjYxMTRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxPdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDExQzQuODAyODUgMTEgMi41Mjk1MiA5LjYyMTg0IDEuMDk2MjIgNy41MDAwMUMyLjUyOTUyIDUuMzc4MTYgNC44MDI4NSA0IDcuNSA0QzEwLjE5NzEgNCAxMi40NzA1IDUuMzc4MTYgMTMuOTAzOCA3LjUwMDAxQzEyLjQ3MDUgOS42MjE4MyAxMC4xOTcxIDExIDcuNSAxMVpNNy41IDNDNC4zMDc4NiAzIDEuNjU2MzkgNC43MDYzOCAwLjA3NjAwMDIgNy4yMzUwMUMtMC4wMjUzMzM4IDcuMzk3MTUgLTAuMDI1MzMzNCA3LjYwMjg4IDAuMDc2MDAxNCA3Ljc2NTAxQzEuNjU2MzkgMTAuMjkzNiA0LjMwNzg2IDEyIDcuNSAxMkMxMC42OTIxIDEyIDEzLjM0MzYgMTAuMjkzNiAxNC45MjQgNy43NjUwMUMxNS4wMjUzIDcuNjAyODggMTUuMDI1MyA3LjM5NzE1IDE0LjkyNCA3LjIzNTAxQzEzLjM0MzYgNC43MDYzOCAxMC42OTIxIDMgNy41IDNaTTcuNSA5LjVDOC42MDQ1NyA5LjUgOS41IDguNjA0NTcgOS41IDcuNUM5LjUgNi4zOTU0MyA4LjYwNDU3IDUuNSA3LjUgNS41QzYuMzk1NDMgNS41IDUuNSA2LjM5NTQzIDUuNSA3LjVDNS41IDguNjA0NTcgNi4zOTU0MyA5LjUgNy41IDkuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk0xLjgyNzA4IDcuNDk5NzJDMS44MjcwOCA0LjM2NjcxIDQuMzY2ODkgMS44MjY4OSA3LjQ5OTkxIDEuODI2ODlDMTAuNjMyOSAxLjgyNjg5IDEzLjE3MjcgNC4zNjY3MSAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyAxMC42MzI3IDEwLjYzMjkgMTMuMTcyNiA3LjQ5OTkxIDEzLjE3MjZDNC4zNjY4OSAxMy4xNzI2IDEuODI3MDggMTAuNjMyNyAxLjgyNzA4IDcuNDk5NzJaTTUuMDM3NDcgOS4yMTM5NUM0Ljg3OTQ5IDguOTg3NDYgNC41Njc4MiA4LjkzMTkzIDQuMzQxMzMgOS4wODk5MUM0LjExNDg0IDkuMjQ3ODkgNC4wNTkzMSA5LjU1OTU2IDQuMjE3MjkgOS43ODYwNUM0LjkzOTI2IDEwLjgyMTEgNi4xNDAzMyAxMS41IDcuNTAwMDQgMTEuNUM4Ljg1OTc0IDExLjUgMTAuMDYwOCAxMC44MjExIDEwLjc4MjggOS43ODYwNUMxMC45NDA4IDkuNTU5NTYgMTAuODg1MiA5LjI0Nzg5IDEwLjY1ODcgOS4wODk5MUMxMC40MzIzIDguOTMxOTMgMTAuMTIwNiA4Ljk4NzQ2IDkuOTYyNiA5LjIxMzk1QzkuNDE5NjMgOS45OTIzOCA4LjUxOTA3IDEwLjUgNy41MDAwNCAxMC41QzYuNDgxIDEwLjUgNS41ODA0NCA5Ljk5MjM4IDUuMDM3NDcgOS4yMTM5NVpNNS4zNzUwMyA2Ljg0OTk4QzUuODU4MjggNi44NDk5OCA2LjI1MDAzIDYuNDU4MTUgNi4yNTAwMyA1Ljk3NDk4QzYuMjUwMDMgNS40OTE4IDUuODU4MjggNS4wOTk5OCA1LjM3NTAzIDUuMDk5OThDNC44OTE3OSA1LjA5OTk4IDQuNTAwMDMgNS40OTE4IDQuNTAwMDMgNS45NzQ5OEM0LjUwMDAzIDYuNDU4MTUgNC44OTE3OSA2Ljg0OTk4IDUuMzc1MDMgNi44NDk5OFpNMTAuNSA1Ljk3NDk4QzEwLjUgNi40NTgxNSAxMC4xMDgzIDYuODQ5OTggOS42MjUwMyA2Ljg0OTk4QzkuMTQxNzkgNi44NDk5OCA4Ljc1MDAzIDYuNDU4MTUgOC43NTAwMyA1Ljk3NDk4QzguNzUwMDMgNS40OTE4IDkuMTQxNzkgNS4wOTk5OCA5LjYyNTAzIDUuMDk5OThDMTAuMTA4MyA1LjA5OTk4IDEwLjUgNS40OTE4IDEwLjUgNS45NzQ5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEV0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjAwMDA1IDIuMDQ5OTlINS41MjUwNUM0LjcxMDQzIDIuMDQ5OTkgNC4wNTAwNSAyLjcxMDM3IDQuMDUwMDUgMy41MjQ5OUM0LjA1MDA1IDQuMzM5NjEgNC43MTA0MyA0Ljk5OTk5IDUuNTI1MDUgNC45OTk5OUg3LjAwMDA1VjIuMDQ5OTlaTTcuMDAwMDUgMS4wNDk5OUg4LjAwMDA1SDkuNDc1MDVDMTAuODQyIDEuMDQ5OTkgMTEuOTUgMi4xNTgwOCAxMS45NSAzLjUyNDk5QzExLjk1IDQuMzMxNjMgMTEuNTY0MiA1LjA0ODE1IDEwLjk2NjkgNS40OTk5OUMxMS41NjQyIDUuOTUxODQgMTEuOTUgNi42NjgzNiAxMS45NSA3LjQ3NUMxMS45NSA4Ljg0MTkgMTAuODQyIDkuOTUgOS40NzUwNSA5Ljk1QzguOTIyMzYgOS45NSA4LjQxMTk4IDkuNzY4ODQgOC4wMDAwNSA5LjQ2MjY2VjkuOTVMOC4wMDAwNSAxMS40MjVDOC4wMDAwNSAxMi43OTE5IDYuODkxOTUgMTMuOSA1LjUyNTA1IDEzLjlDNC4xNTgxNCAxMy45IDMuMDUwMDUgMTIuNzkxOSAzLjA1MDA1IDExLjQyNUMzLjA1MDA1IDEwLjYxODMgMy40MzU5MyA5LjkwMTg0IDQuMDMzMTcgOS40NDk5OUMzLjQzNTkzIDguOTk4MTQgMy4wNTAwNSA4LjI4MTYzIDMuMDUwMDUgNy40NzVDMy4wNTAwNSA2LjY2ODM2IDMuNDM1OTQgNS45NTE4NCA0LjAzMzE5IDUuNUMzLjQzNTk0IDUuMDQ4MTUgMy4wNTAwNSA0LjMzMTYzIDMuMDUwMDUgMy41MjQ5OUMzLjA1MDA1IDIuMTU4MDggNC4xNTgxNCAxLjA0OTk5IDUuNTI1MDUgMS4wNDk5OUg3LjAwMDA1Wk04LjAwMDA1IDIuMDQ5OTlWNC45OTk5OUg5LjQ3NTA1QzEwLjI4OTcgNC45OTk5OSAxMC45NSA0LjMzOTYxIDEwLjk1IDMuNTI0OTlDMTAuOTUgMi43MTAzNyAxMC4yODk3IDIuMDQ5OTkgOS40NzUwNSAyLjA0OTk5SDguMDAwMDVaTTUuNTI1MDUgOC45NDk5OEg3LjAwMDA1TDcuMDAwMDUgNy40Nzg4TDcuMDAwMDUgNy40NzVMNy4wMDAwNSA3LjQ3MTJWNkg1LjUyNTA1QzQuNzEwNDMgNiA0LjA1MDA1IDYuNjYwMzggNC4wNTAwNSA3LjQ3NUM0LjA1MDA1IDguMjg3NjcgNC43MDcyNyA4Ljk0Njg0IDUuNTE5MiA4Ljk0OTk5TDUuNTI1MDUgOC45NDk5OFpNNC4wNTAwNSAxMS40MjVDNC4wNTAwNSAxMC42MTIzIDQuNzA3MjcgOS45NTMxNSA1LjUxOTIgOS45NDk5OUw1LjUyNTA1IDkuOTVINy4wMDAwNUw3LjAwMDA1IDExLjQyNUM3LjAwMDA1IDEyLjIzOTYgNi4zMzk2NyAxMi45IDUuNTI1MDUgMTIuOUM0LjcxMDQzIDEyLjkgNC4wNTAwNSAxMi4yMzk2IDQuMDUwMDUgMTEuNDI1Wk04LjAwMDA1IDcuNDcyMDZDOC4wMDE2NCA2LjY1ODc5IDguNjYxNDEgNiA5LjQ3NTA1IDZDMTAuMjg5NyA2IDEwLjk1IDYuNjYwMzggMTAuOTUgNy40NzVDMTAuOTUgOC4yODk2MiAxMC4yODk3IDguOTUgOS40NzUwNSA4Ljk1QzguNjYxNDEgOC45NSA4LjAwMTY0IDguMjkxMjEgOC4wMDAwNSA3LjQ3Nzk0VjcuNDcyMDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxTdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDJDMy4yMjM4NiAyIDMgMi4yMjM4NiAzIDIuNVYxMi41QzMgMTIuNzc2MSAzLjIyMzg2IDEzIDMuNSAxM0gxMS41QzExLjc3NjEgMTMgMTIgMTIuNzc2MSAxMiAxMi41VjZIOC41QzguMjIzODYgNiA4IDUuNzc2MTQgOCA1LjVWMkgzLjVaTTkgMi43MDcxMUwxMS4yOTI5IDVIOVYyLjcwNzExWk0yIDIuNUMyIDEuNjcxNTcgMi42NzE1NyAxIDMuNSAxSDguNUM4LjYzMjYxIDEgOC43NTk3OSAxLjA1MjY4IDguODUzNTUgMS4xNDY0NUwxMi44NTM2IDUuMTQ2NDVDMTIuOTQ3MyA1LjI0MDIxIDEzIDUuMzY3MzkgMTMgNS41VjEyLjVDMTMgMTMuMzI4NCAxMi4zMjg0IDE0IDExLjUgMTRIMy41QzIuNjcxNTcgMTQgMiAxMy4zMjg0IDIgMTIuNVYyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxqdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMyAyLjVDMyAyLjIyMzg2IDMuMjIzODYgMiAzLjUgMkg5LjI5Mjg5TDEyIDQuNzA3MTFWMTIuNUMxMiAxMi43NzYxIDExLjc3NjEgMTMgMTEuNSAxM0gzLjVDMy4yMjM4NiAxMyAzIDEyLjc3NjEgMyAxMi41VjIuNVpNMy41IDFDMi42NzE1NyAxIDIgMS42NzE1NyAyIDIuNVYxMi41QzIgMTMuMzI4NCAyLjY3MTU3IDE0IDMuNSAxNEgxMS41QzEyLjMyODQgMTQgMTMgMTMuMzI4NCAxMyAxMi41VjQuNjAzNTVDMTMgNC40MDQ2NCAxMi45MjEgNC4yMTM4OCAxMi43ODAzIDQuMDczMjJMOS44NTM1NSAxLjE0NjQ1QzkuNzU5NzkgMS4wNTI2OCA5LjYzMjYxIDEgOS41IDFIMy41Wk01LjI1IDdDNC45NzM4NiA3IDQuNzUgNy4yMjM4NiA0Ljc1IDcuNUM0Ljc1IDcuNzc2MTQgNC45NzM4NiA4IDUuMjUgOEg5Ljc1QzEwLjAyNjEgOCAxMC4yNSA3Ljc3NjE0IDEwLjI1IDcuNUMxMC4yNSA3LjIyMzg2IDEwLjAyNjEgNyA5Ljc1IDdINS4yNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE10PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjUgMkMzLjIyMzg2IDIgMyAyLjIyMzg2IDMgMi41VjEyLjVDMyAxMi43NzYxIDMuMjIzODYgMTMgMy41IDEzSDExLjVDMTEuNzc2MSAxMyAxMiAxMi43NzYxIDEyIDEyLjVWNC43MDcxMUw5LjI5Mjg5IDJIMy41Wk0yIDIuNUMyIDEuNjcxNTcgMi42NzE1NyAxIDMuNSAxSDkuNUM5LjYzMjYxIDEgOS43NTk3OSAxLjA1MjY4IDkuODUzNTUgMS4xNDY0NUwxMi43ODAzIDQuMDczMjJDMTIuOTIxIDQuMjEzODggMTMgNC40MDQ2NCAxMyA0LjYwMzU1VjEyLjVDMTMgMTMuMzI4NCAxMi4zMjg0IDE0IDExLjUgMTRIMy41QzIuNjcxNTcgMTQgMiAxMy4zMjg0IDIgMTIuNVYyLjVaTTQuNzUgNy41QzQuNzUgNy4yMjM4NiA0Ljk3Mzg2IDcgNS4yNSA3SDdWNS4yNUM3IDQuOTczODYgNy4yMjM4NiA0Ljc1IDcuNSA0Ljc1QzcuNzc2MTQgNC43NSA4IDQuOTczODYgOCA1LjI1VjdIOS43NUMxMC4wMjYxIDcgMTAuMjUgNy4yMjM4NiAxMC4yNSA3LjVDMTAuMjUgNy43NzYxNCAxMC4wMjYxIDggOS43NSA4SDhWOS43NUM4IDEwLjAyNjEgNy43NzYxNCAxMC4yNSA3LjUgMTAuMjVDNy4yMjM4NiAxMC4yNSA3IDEwLjAyNjEgNyA5Ljc1VjhINS4yNUM0Ljk3Mzg2IDggNC43NSA3Ljc3NjE0IDQuNzUgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sa3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgMi41QzMgMi4yMjM4NiAzLjIyMzg2IDIgMy41IDJIOS4wODU3OUM5LjIxODM5IDIgOS4zNDU1NyAyLjA1MjY4IDkuNDM5MzQgMi4xNDY0NUwxMS44NTM2IDQuNTYwNjZDMTEuOTQ3MyA0LjY1NDQzIDEyIDQuNzgxNjEgMTIgNC45MTQyMVYxMi41QzEyIDEyLjc3NjEgMTEuNzc2MSAxMyAxMS41IDEzSDMuNUMzLjIyMzg2IDEzIDMgMTIuNzc2MSAzIDEyLjVWMi41Wk0zLjUgMUMyLjY3MTU3IDEgMiAxLjY3MTU3IDIgMi41VjEyLjVDMiAxMy4zMjg0IDIuNjcxNTcgMTQgMy41IDE0SDExLjVDMTIuMzI4NCAxNCAxMyAxMy4zMjg0IDEzIDEyLjVWNC45MTQyMUMxMyA0LjUxNjM5IDEyLjg0MiA0LjEzNDg2IDEyLjU2MDcgMy44NTM1NUwxMC4xNDY0IDEuNDM5MzRDOS44NjUxNCAxLjE1ODA0IDkuNDgzNjEgMSA5LjA4NTc5IDFIMy41Wk00LjUgNEM0LjIyMzg2IDQgNCA0LjIyMzg2IDQgNC41QzQgNC43NzYxNCA0LjIyMzg2IDUgNC41IDVINy41QzcuNzc2MTQgNSA4IDQuNzc2MTQgOCA0LjVDOCA0LjIyMzg2IDcuNzc2MTQgNCA3LjUgNEg0LjVaTTQuNSA3QzQuMjIzODYgNyA0IDcuMjIzODYgNCA3LjVDNCA3Ljc3NjE0IDQuMjIzODYgOCA0LjUgOEgxMC41QzEwLjc3NjEgOCAxMSA3Ljc3NjE0IDExIDcuNUMxMSA3LjIyMzg2IDEwLjc3NjEgNyAxMC41IDdINC41Wk00LjUgMTBDNC4yMjM4NiAxMCA0IDEwLjIyMzkgNCAxMC41QzQgMTAuNzc2MSA0LjIyMzg2IDExIDQuNSAxMUgxMC41QzEwLjc3NjEgMTEgMTEgMTAuNzc2MSAxMSAxMC41QzExIDEwLjIyMzkgMTAuNzc2MSAxMCAxMC41IDEwSDQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjEwNTA1IDEyQzQuNzA4MDUgMTIgNC40MjM2IDExLjkxMiA0LjI1MTcxIDExLjczNkM0LjA4MzkgMTEuNTU1OSA0IDExLjI3MTUgNCAxMC44ODI3VjQuMTE3MzNDNCAzLjcyMDMzIDQuMDg1OTUgMy40MzU4OCA0LjI1Nzg0IDMuMjYzOThDNC40MzM4MyAzLjA4Nzk5IDQuNzE2MjMgMyA1LjEwNTA1IDNDNi40Mjc0MSAzIDguMjU1OTEgMyA5LjAyODUyIDNDMTAuMTM3MyAzIDExLjA1MzkgMy45ODE1MyAxMS4wNTM5IDUuMTg0NkMxMS4wNTM5IDYuMDg1MDEgMTAuNjAzNyA2LjgxODU1IDkuNzAzMjcgNy4yMzYwMkMxMC44NjU3IDcuNDQ4NTEgMTEuNTE3NiA4LjYyNzg3IDExLjUxNzYgOS40ODEyOEMxMS41MTc2IDEwLjUxMjUgMTAuOTkwMiAxMiA5LjI3NzM0IDEyQzguNzc3NDIgMTIgNi40MjYyNiAxMiA1LjEwNTA1IDEyWk04LjM3ODkxIDguMDAzNDFINS44VjEwLjYzMUg4LjM3ODkxQzguOSAxMC42MzEgOS42Mjk2IDEwLjEyMTEgOS42Mjk2IDkuMjk4NzdDOS42Mjk2IDguNDc2NDMgOC45IDguMDAzNDEgOC4zNzg5MSA4LjAwMzQxWk01LjggNC4zNjkwM1Y2LjY5NTc3SDguMTc5NjlDOC41MzkwNiA2LjY5NTc3IDkuMjc3MzQgNi4zNTkzOSA5LjI3NzM0IDUuNTAwMDJDOS4yNzczNCA0LjY0MDY0IDguNDgwNDcgNC4zNjkwMyA4LjE3OTY5IDQuMzY5MDNINS44WlwiLGZpbGw6bn0pKX0sUHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuNSA0LjVDMi41IDMuMDk4ODYgMy41OTg4NiAyIDUgMkgxMi40OTlDMTIuNzc1MiAyIDEzIDIuMjIzODYgMTMgMi41QzEzIDIuNzc2MTQgMTIuNzc2MSAzIDEyLjUgM0g4LjY5MjQ0TDguNDA1MDkgMy44NTQ1OEM4LjE4ODY5IDQuNDk3NTIgNy44OTQwMSA1LjM3MTk3IDcuNTgwOTEgNi4yOTc5NEM3LjUwMjU5IDYuNTI5NTYgNy40MjMwOCA2Ljc2NDUzIDcuMzQzMzIgN0g4LjVDOC43NzYxNCA3IDkgNy4yMjM4NiA5IDcuNUM5IDcuNzc2MTQgOC43NzYxNCA4IDguNSA4SDcuMDA0MDdDNi41NjcyNCA5LjI4NTQzIDYuMTY0MzUgMTAuNDYxMyA1Ljk1Nzk5IDExLjAzODZDNS42MzYyNyAxMS45Mzg2IDUuMjA3MTIgMTIuNDg1NyA0LjY2NzQxIDEyLjc3NzhDNC4xNjMzNSAxMy4wNTA3IDMuNjQxNTQgMTMuMDUwMyAzLjI4Mzc4IDEzLjA1TDMuMjUgMTMuMDVDMi45NDYyNCAxMy4wNSAyLjcgMTIuODAzNyAyLjcgMTIuNUMyLjcgMTIuMTk2MiAyLjk0NjI0IDExLjk1IDMuMjUgMTEuOTVDMy42NDE4MiAxMS45NSAzLjkwMzUgMTEuOTQwNSA0LjE0Mzc0IDExLjgxMDVDNC4zNjQ0MyAxMS42OTEgNC42NTUzMiAxMS40MTQ4IDQuOTIyMTcgMTAuNjY4M0M1LjEwNjk1IDEwLjE1MTQgNS40NTM3NSA5LjE0MTM0IDUuODQyMiA4SDQuNUM0LjIyMzg2IDggNCA3Ljc3NjE0IDQgNy41QzQgNy4yMjM4NiA0LjIyMzg2IDcgNC41IDdINi4xODE4N0M2LjMwMTI3IDYuNjQ3ODUgNi40MjEzMiA2LjI5MzIzIDYuNTM4ODcgNS45NDU1OUM2Ljg1MTc1IDUuMDIwMjUgNy4xNDYyNyA0LjE0NjMxIDcuMzYyNTYgMy41MDM2OEw3LjUzMTkyIDNINUM0LjE1MTE0IDMgMy41IDMuNjUxMTQgMy41IDQuNUMzLjUgNC43NzYxNCAzLjI3NjE0IDUgMyA1QzIuNzIzODYgNSAyLjUgNC43NzYxNCAyLjUgNC41WlwiLGZpbGw6bn0pKX0sSXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNjc0OTQgMy41MDAxN0M1LjY3NDk0IDMuMjUxNjQgNS44NzY0MSAzLjA1MDE3IDYuMTI0OTQgMy4wNTAxN0gxMC42MjQ5QzEwLjg3MzUgMy4wNTAxNyAxMS4wNzQ5IDMuMjUxNjQgMTEuMDc0OSAzLjUwMDE3QzExLjA3NDkgMy43NDg3IDEwLjg3MzUgMy45NTAxNyAxMC42MjQ5IDMuOTUwMTdIOS4wMDU4N0w3LjIzMDkgMTEuMDVIOC44NzQ5M0M5LjEyMzQ1IDExLjA1IDkuMzI0OTMgMTEuMjUxNSA5LjMyNDkzIDExLjVDOS4zMjQ5MyAxMS43NDg2IDkuMTIzNDUgMTEuOTUgOC44NzQ5MyAxMS45NUg0LjM3NDkzQzQuMTI2NCAxMS45NSAzLjkyNDkzIDExLjc0ODYgMy45MjQ5MyAxMS41QzMuOTI0OTMgMTEuMjUxNSA0LjEyNjQgMTEuMDUgNC4zNzQ5MyAxMS4wNUg1Ljk5Mzk3TDcuNzY4OTQgMy45NTAxN0g2LjEyNDk0QzUuODc2NDEgMy45NTAxNyA1LjY3NDk0IDMuNzQ4NyA1LjY3NDk0IDMuNTAwMTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxBdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC43OTk5MyAzLjUwMDE3QzQuNzk5OTMgMy4yNTE2NCA1LjAwMTQgMy4wNTAxNyA1LjI0OTkzIDMuMDUwMTdIOS43NDk5M0M5Ljk5ODQ1IDMuMDUwMTcgMTAuMTk5OSAzLjI1MTY0IDEwLjE5OTkgMy41MDAxN0MxMC4xOTk5IDMuNzQ4NyA5Ljk5ODQ1IDMuOTUwMTcgOS43NDk5MyAzLjk1MDE3SDguMDk5OTNWMTEuMDVIOS43NDk5NEM5Ljk5ODQ3IDExLjA1IDEwLjE5OTkgMTEuMjUxNSAxMC4xOTk5IDExLjVDMTAuMTk5OSAxMS43NDg2IDkuOTk4NDcgMTEuOTUgOS43NDk5NCAxMS45NUg1LjI0OTk0QzUuMDAxNDEgMTEuOTUgNC43OTk5NCAxMS43NDg2IDQuNzk5OTQgMTEuNUM0Ljc5OTk0IDExLjI1MTUgNS4wMDE0MSAxMS4wNSA1LjI0OTk0IDExLjA1SDYuODk5OTNWMy45NTAxN0g1LjI0OTkzQzUuMDAxNCAzLjk1MDE3IDQuNzk5OTMgMy43NDg3IDQuNzk5OTMgMy41MDAxN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFR0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjc4MjMzIDIuMjE3MDdDMi43MDczMiAyLjE0MjA2IDIuNjA1NTcgMi4wOTk5MSAyLjQ5OTQ5IDIuMDk5OTFDMi4zOTM0IDIuMDk5OTEgMi4yOTE2NiAyLjE0MjA2IDIuMjE2NjQgMi4yMTcwN0wwLjIxNjY0NSA0LjIxNzA3QzAuMDYwNDM1MSA0LjM3MzI4IDAuMDYwNDM1MSA0LjYyNjU1IDAuMjE2NjQ1IDQuNzgyNzZDMC4zNzI4NTUgNC45Mzg5NyAwLjYyNjEyMSA0LjkzODk3IDAuNzgyMzMgNC43ODI3NkwyLjA5OTQ5IDMuNDY1NkwyLjA5OTQ5IDExLjUzNDJMMC43ODIzMyAxMC4yMTcxQzAuNjI2MTIgMTAuMDYwOSAwLjM3Mjg1NCAxMC4wNjA5IDAuMjE2NjQ1IDEwLjIxNzFDMC4wNjA0MzQ5IDEwLjM3MzMgMC4wNjA0MzQ5IDEwLjYyNjUgMC4yMTY2NDUgMTAuNzgyOEwyLjIxNjY0IDEyLjc4MjhDMi4yOTE2NiAxMi44NTc4IDIuMzkzNCAxMi44OTk5IDIuNDk5NDkgMTIuODk5OUMyLjYwNTU3IDEyLjg5OTkgMi43MDczMSAxMi44NTc4IDIuNzgyMzMgMTIuNzgyOEw0Ljc4MjMzIDEwLjc4MjhDNC45Mzg1NCAxMC42MjY1IDQuOTM4NTQgMTAuMzczMyA0Ljc4MjMzIDEwLjIxNzFDNC42MjYxMiAxMC4wNjA5IDQuMzcyODUgMTAuMDYwOSA0LjIxNjY0IDEwLjIxNzFMMi44OTk0OSAxMS41MzQyTDIuODk5NDkgMy40NjU2TDQuMjE2NjQgNC43ODI3NkM0LjM3Mjg1IDQuOTM4OTcgNC42MjYxMiA0LjkzODk3IDQuNzgyMzMgNC43ODI3NkM0LjkzODU0IDQuNjI2NTUgNC45Mzg1NCA0LjM3MzI4IDQuNzgyMzMgNC4yMTcwN0wyLjc4MjMzIDIuMjE3MDdaTTEwLjUgMi43NDk5N0MxMC43MTA3IDIuNzQ5OTcgMTAuODk4OCAyLjg4MjExIDEwLjk3MDMgMy4wODAzNkwxMy45NzAzIDExLjM5OTlDMTQuMDY0IDExLjY1OTcgMTMuOTI5MyAxMS45NDYyIDEzLjY2OTYgMTIuMDM5OUMxMy40MDk4IDEyLjEzMzYgMTMuMTIzMyAxMS45OTg5IDEzLjAyOTYgMTEuNzM5MkwxMi4wNDc3IDkuMDE2SDguOTUyMjhMNy45NzAzMyAxMS43MzkyQzcuODc2NjYgMTEuOTk4OSA3LjU5MDEzIDEyLjEzMzYgNy4zMzAzNiAxMi4wMzk5QzcuMDcwNTkgMTEuOTQ2MiA2LjkzNTk1IDExLjY1OTcgNy4wMjk2MiAxMS4zOTk5TDEwLjAyOTYgMy4wODAzNkMxMC4xMDExIDIuODgyMTEgMTAuMjg5MiAyLjc0OTk3IDEwLjUgMi43NDk5N1pNMTAuNSA0LjcyMzk2TDExLjc0MTIgOC4xNjZIOS4yNTg3OUwxMC41IDQuNzIzOTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS4wMzc5MSA5Ljk4MDc1QzAuOTM0Nzc3IDkuNjU4MyAxLjExNjAzIDkuMzc3MTkgMS40MDAwNSA5LjI0ODcxQzEuNjg0MDggOS4xMjAyMiAyLjA5NDYzIDkuMTM0MTIgMi4yNzA3MSA5LjQ1NDI2QzIuODUzOTMgMTAuNTE0NyAzLjY0NTk5IDEwLjcyODIgNC40ODY2NSAxMC43MjgyQzUuNTI3MjEgMTAuNzI4MiA2LjI5NjU5IDEwLjI2MTUgNi4yOTY1OSA5LjQ1NDI2QzYuMjk2NTkgOC44MDQ3IDUuOTExOSA4LjQ2NDE2IDQuODcxMzQgOC4xNDI1M0w0LjE1ODcyIDcuOTIxODFDMi42NDUxOCA3LjQ0ODgzIDEuODg4NDIgNi42OTIwNiAxLjg4ODQyIDUuNDU2MDFDMS44ODg0MiAzLjc5NzQzIDMuMjc1ODMgMi42ODc1IDUuMjQzNDIgMi42ODc1QzYuOTE3MzMgMi42ODc1IDcuOTc0MDkgMy4zMzUzNiA4LjQzODMzIDQuMzEwNjVDOC41NzA4NyA0LjU4OTA5IDguNTc2MTQgNC45MTI5NCA4LjIyNzk0IDUuMTkxMTRDNy44Nzk3NCA1LjQ2OTM0IDcuNTIzNTEgNS4zNDc5OSA3LjIzMzI3IDUuMDM4MzlDNi40NzIxNSA0LjIyNjUzIDUuOTk1NDUgNC4wNDk2OCA1LjI1NjA0IDQuMDQ5NjhDNC4xMzk4IDQuMDQ5NjggMy41NDcgNC42MzYxOCAzLjU0NyA1LjI3OTQzQzMuNTQ3IDUuODY1OTIgMy45NjMyMiA2LjIzMTY5IDQuOTQ3MDIgNi41MzQ0TDUuNjc4NTYgNi43NjE0M0M3LjIyOTk0IDcuMjM0NDEgNy45NzQwOSA3Ljk1OTY0IDcuOTc0MDkgOS4xNzA0N0M3Ljk3NDA5IDEwLjc3MjMgNi42OTM4OSAxMi4wOTAzIDQuNDYxNDMgMTIuMDkwM0MyLjg2NjEyIDEyLjA5MDMgMS40MDAwNSAxMS4xMTMxIDEuMDM3OTEgOS45ODA3NVpNMTEuODQ5MSA4Ljc3OTg1QzEwLjY2MSA4LjM5NTQzIDEwLjE2NDkgNy44NjExNCAxMC4xNjQ5IDYuOTg4MDVDMTAuMTY0OSA1Ljg2NzM2IDExLjE2MzYgNS4wNDYzOSAxMi42MTI4IDUuMDQ2MzlDMTMuODU0NiA1LjA0NjM5IDE0LjY2MjkgNS42MzM0NSAxNC45Nzc4IDYuNjM0NkMxNS4wNDQzIDYuODQ1OTkgMTQuOTU5MyA2Ljk4MDA2IDE0Ljc0NzUgNy4wNDkxQzE0LjUzOTQgNy4xMTY5NyAxNC4zMTc2IDcuMDk5NzQgMTQuMjM4IDYuODk2MTFDMTMuOTM1NiA2LjEyMjczIDEzLjM1MiA1Ljc2MzExIDEyLjU5OTggNS43NjMxMUMxMS42NDY3IDUuNzYzMTEgMTEuMDEzNSA2LjI1MTc4IDExLjAxMzUgNi45MTYzOEMxMS4wMTM1IDcuNDUwNjYgMTEuMzQ2NCA3Ljc1MDM4IDEyLjI0NzMgOC4wNDM1OEwxMi44MzQ4IDguMjMyNTRDMTQuMDYyIDguNjI5OTkgMTQuNTUxNiA5LjEzODIxIDE0LjU1MTYgMTAuMDE3OEMxNC41NTE2IDExLjE5NzIgMTMuNDgxIDEyLjA0NDIgMTEuOTkyNyAxMi4wNDQyQzEwLjY0MzkgMTIuMDQ0MiA5LjY1NjQ0IDExLjI4MDkgOS40MTk3OSAxMC4zMzYxQzkuMzY1MzUgMTAuMTE4OCA5LjQxMTkyIDEwLjAyODcgOS43MDAzOSA5Ljk2MTg0QzkuOTg4ODYgOS44OTQ5OSAxMC4wNzE0IDkuODk5MTggMTAuMTcxNSAxMC4xMzY5QzEwLjQ1NTUgMTAuODExNCAxMS4xNTMxIDExLjMyNzUgMTIuMDMxOCAxMS4zMjc1QzEyLjk5MTQgMTEuMzI3NSAxMy42ODM0IDEwLjc4MDIgMTMuNjgzNCAxMC4wNjM0QzEzLjY4MzQgOS41MzU2NyAxMy4zOTYxIDkuMjg4MDcgMTIuNDM2NiA4Ljk3NTMyTDExLjg0OTEgOC43Nzk4NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxQzEwLjIyMzkgMSAxMCAxLjIyMzg2IDEwIDEuNVY0SDVWMS41QzUgMS4yMjM4NiA0Ljc3NjE0IDEgNC41IDFDNC4yMjM4NiAxIDQgMS4yMjM4NiA0IDEuNVY0SDEuNUMxLjIyMzg2IDQgMSA0LjIyMzg2IDEgNC41QzEgNC43NzYxNCAxLjIyMzg2IDUgMS41IDVINFYxMEgxLjVDMS4yMjM4NiAxMCAxIDEwLjIyMzkgMSAxMC41QzEgMTAuNzc2MSAxLjIyMzg2IDExIDEuNSAxMUg0VjEzLjVDNCAxMy43NzYxIDQuMjIzODYgMTQgNC41IDE0QzQuNzc2MTQgMTQgNSAxMy43NzYxIDUgMTMuNVYxMUgxMFYxMy41QzEwIDEzLjc3NjEgMTAuMjIzOSAxNCAxMC41IDE0QzEwLjc3NjEgMTQgMTEgMTMuNzc2MSAxMSAxMy41VjExSDEzLjVDMTMuNzc2MSAxMSAxNCAxMC43NzYxIDE0IDEwLjVDMTQgMTAuMjIzOSAxMy43NzYxIDEwIDEzLjUgMTBIMTFWNUgxMy41QzEzLjc3NjEgNSAxNCA0Ljc3NjE0IDE0IDQuNUMxNCA0LjIyMzg2IDEzLjc3NjEgNCAxMy41IDRIMTFWMS41Wk0xMCAxMFY1SDVWMTBIMTBaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxWdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4zODI1IDEuMjk1NjdDMy40NjI0MSAxLjExNDMyIDMuNjQxODggMC45OTcyODQgMy44NDAwNSAwLjk5NzI4NEgxMS41QzExLjc3NjEgMC45OTcyODQgMTIgMS4yMjExNCAxMiAxLjQ5NzI4VjUuNUMxMiA1Ljc3NjE0IDExLjc3NjEgNiAxMS41IDZIOC42MzUyMUwxMS41Mjg4IDkuMTYyNDdDMTEuNjYyNiA5LjMwODcgMTEuNjk3NCA5LjUyMDE1IDExLjYxNzUgOS43MDE1NEMxMS41Mzc2IDkuODgyOTMgMTEuMzU4MiAxMCAxMS4xNiAxMEg4VjEzLjVDOCAxMy43MDIyIDcuODc4MTggMTMuODg0NSA3LjY5MTM0IDEzLjk2MTlDNy41MDQ1IDE0LjAzOTMgNy4yODk0NSAxMy45OTY2IDcuMTQ2NDUgMTMuODUzNkwzLjE0NjQ1IDkuODUzNTVDMy4wNTI2OCA5Ljc1OTc5IDMgOS42MzI2MSAzIDkuNVY1LjVDMyA1LjIyMzg2IDMuMjIzODYgNSAzLjUgNUg2LjM2NTMxTDMuNDcxMDUgMS44MzQ2OEMzLjMzNzMyIDEuNjg4NDQgMy4zMDI1OSAxLjQ3NzAxIDMuMzgyNSAxLjI5NTY3Wk03LjcyMDMyIDVMNC45NzQ3NCAxLjk5NzI4SDExVjVINy43MjAzMlpNNy4yNzk3OCA2SDRWOUg3LjVIMTAuMDI0N0w3LjI3OTc4IDZaTTQuNzA3MTEgMTBMNyAxMi4yOTI5VjEwSDQuNzA3MTFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxEdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4wNzA5NSAwLjY1MDIzOEM2LjY3MzkxIDAuNjUwMjM4IDYuMzI5NzcgMC45MjUwOTYgNi4yNDE5OCAxLjMxMjMxTDYuMDAzOSAyLjM2MjQ3QzUuNjI0OSAyLjQ3MjY5IDUuMjYzMzUgMi42MjM2MyA0LjkyNDM2IDIuODEwMTNMNC4wMTMzNSAyLjIzNTg1QzMuNjc3NDggMi4wMjQxMyAzLjIzOTc4IDIuMDczMTIgMi45NTkwMyAyLjM1Mzg2TDIuMzUyOTQgMi45NTk5NkMyLjA3MjIgMy4yNDA3IDIuMDIzMiAzLjY3ODQgMi4yMzQ5MyA0LjAxNDI3TDIuODA5NDIgNC45MjU2MUMyLjYyMzA3IDUuMjY0NSAyLjQ3MjI3IDUuNjI1OTQgMi4zNjIxNiA2LjAwNDgxTDEuMzEyMDkgNi4yNDI4N0MwLjkyNDg4MyA2LjMzMDY1IDAuNjUwMDI0IDYuNjc0OCAwLjY1MDAyNCA3LjA3MTgzVjcuOTI4OTdDMC42NTAwMjQgOC4zMjYwMSAwLjkyNDg4MyA4LjY3MDE1IDEuMzEyMDkgOC43NTc5NEwyLjM2MjI4IDguOTk2MDNDMi40NzI0NiA5LjM3NSAyLjYyMzM1IDkuNzM2NTIgMi44MDk3OSAxMC4wNzU1TDIuMjM1NCAxMC45ODY3QzIuMDIzNjcgMTEuMzIyNSAyLjA3MjY3IDExLjc2MDIgMi4zNTM0MSAxMi4wNDFMMi45NTk1MSAxMi42NDcxQzMuMjQwMjUgMTIuOTI3OCAzLjY3Nzk1IDEyLjk3NjggNC4wMTM4MiAxMi43NjUxTDQuOTI1MDYgMTIuMTkwN0M1LjI2Mzg0IDEyLjM3NyA1LjYyNTE2IDEyLjUyNzggNi4wMDM5IDEyLjYzNzlMNi4yNDE5OCAxMy42ODgxQzYuMzI5NzcgMTQuMDc1MyA2LjY3MzkxIDE0LjM1MDIgNy4wNzA5NSAxNC4zNTAySDcuOTI4MDlDOC4zMjUxMiAxNC4zNTAyIDguNjY5MjcgMTQuMDc1MyA4Ljc1NzA1IDEzLjY4ODFMOC45OTUwNSAxMi42MzgzQzkuMzc0MTEgMTIuNTI4MiA5LjczNTczIDEyLjM3NzMgMTAuMDc0OCAxMi4xOTA5TDEwLjk4NiAxMi43NjUzQzExLjMyMTggMTIuOTc3IDExLjc1OTUgMTIuOTI4IDEyLjA0MDMgMTIuNjQ3M0wxMi42NDY0IDEyLjA0MTJDMTIuOTI3MSAxMS43NjA0IDEyLjk3NjEgMTEuMzIyNyAxMi43NjQ0IDEwLjk4NjlMMTIuMTkwMiAxMC4wNzZDMTIuMzc2OCA5LjczNjg4IDEyLjUyNzggOS4zNzUxNSAxMi42MzggOC45OTU5NkwxMy42ODc5IDguNzU3OTRDMTQuMDc1MSA4LjY3MDE1IDE0LjM1IDguMzI2MDEgMTQuMzUgNy45Mjg5N1Y3LjA3MTgzQzE0LjM1IDYuNjc0OCAxNC4wNzUxIDYuMzMwNjUgMTMuNjg3OSA2LjI0Mjg3TDEyLjYzODEgNi4wMDQ4OEMxMi41MjggNS42MjU3OCAxMi4zNzcxIDUuMjY0MTQgMTIuMTkwNiA0LjkyNTA3TDEyLjc2NDggNC4wMTQwN0MxMi45NzY2IDMuNjc4MiAxMi45Mjc2IDMuMjQwNSAxMi42NDY4IDIuOTU5NzVMMTIuMDQwNyAyLjM1MzY2QzExLjc2IDIuMDcyOTIgMTEuMzIyMyAyLjAyMzkyIDEwLjk4NjQgMi4yMzU2NUwxMC4wNzU1IDIuODA5ODlDOS43MzYyMiAyLjYyMzI4IDkuMzc0MzcgMi40NzIyOSA4Ljk5NTA1IDIuMzYyMDlMOC43NTcwNSAxLjMxMjMxQzguNjY5MjcgMC45MjUwOTYgOC4zMjUxMiAwLjY1MDIzOCA3LjkyODA5IDAuNjUwMjM4SDcuMDcwOTVaTTQuOTIwNTMgMy44MTI1MUM1LjQ0NzI0IDMuNDQzMzkgNi4wNTY2NSAzLjE4NDI0IDYuNzE1NDMgMy4wNjgzOUw3LjA3MDk1IDEuNTAwMjRINy45MjgwOUw4LjI4MzU1IDMuMDY4MTZDOC45NDI2NyAzLjE4Mzg3IDkuNTUyNCAzLjQ0MzAyIDEwLjA3OTQgMy44MTIyNEwxMS40Mzk3IDIuOTU0N0wxMi4wNDU4IDMuNTYwNzlMMTEuMTg4MiA0LjkyMTE3QzExLjU1NzMgNS40NDc5OCAxMS44MTY0IDYuMDU3NSAxMS45MzIxIDYuNzE2MzhMMTMuNSA3LjA3MTgzVjcuOTI4OTdMMTEuOTMyIDguMjg0NDRDMTEuODE2MiA4Ljk0MzQyIDExLjU1NyA5LjU1MzAxIDExLjE4NzggMTAuMDc5OEwxMi4wNDUzIDExLjQ0MDJMMTEuNDM5MiAxMi4wNDYyTDEwLjA3ODcgMTEuMTg4NkM5LjU1MTkyIDExLjU1NzYgOC45NDI0MSAxMS44MTY2IDguMjgzNTUgMTEuOTMyM0w3LjkyODA5IDEzLjUwMDJINy4wNzA5NUw2LjcxNTQzIDExLjkzMkM2LjA1NjkgMTEuODE2MiA1LjQ0NzcyIDExLjU1NzIgNC45MjExNiAxMS4xODgzTDMuNTYwNTUgMTIuMDQ2TDIuOTU0NDUgMTEuNDM5OUwzLjgxMjEzIDEwLjA3OTRDMy40NDMxIDkuNTUyNjYgMy4xODQwMyA4Ljk0MzI2IDMuMDY4MjUgOC4yODQ1TDEuNTAwMDIgNy45Mjg5N1Y3LjA3MTgzTDMuMDY4MTggNi43MTYzMkMzLjE4Mzg4IDYuMDU3NjUgMy40NDI4MyA1LjQ0ODMzIDMuODExNzEgNC45MjE2NUwyLjk1Mzk4IDMuNTYxTDMuNTYwMDggMi45NTQ5MUw0LjkyMDUzIDMuODEyNTFaTTkuMDI0OTYgNy41MDAwOEM5LjAyNDk2IDguMzQyMjYgOC4zNDIyMyA5LjAyNDk5IDcuNTAwMDUgOS4wMjQ5OUM2LjY1Nzg2IDkuMDI0OTkgNS45NzUxMyA4LjM0MjI2IDUuOTc1MTMgNy41MDAwOEM1Ljk3NTEzIDYuNjU3ODkgNi42NTc4NiA1Ljk3NTE2IDcuNTAwMDUgNS45NzUxNkM4LjM0MjIzIDUuOTc1MTYgOS4wMjQ5NiA2LjY1Nzg5IDkuMDI0OTYgNy41MDAwOFpNOS45MjQ5NiA3LjUwMDA4QzkuOTI0OTYgOC44MzkzMiA4LjgzOTI5IDkuOTI0OTkgNy41MDAwNSA5LjkyNDk5QzYuMTYwOCA5LjkyNDk5IDUuMDc1MTMgOC44MzkzMiA1LjA3NTEzIDcuNTAwMDhDNS4wNzUxMyA2LjE2MDg0IDYuMTYwOCA1LjA3NTE2IDcuNTAwMDUgNS4wNzUxNkM4LjgzOTI5IDUuMDc1MTYgOS45MjQ5NiA2LjE2MDg0IDkuOTI0OTYgNy41MDAwOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFp0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTM2IDAuODUwMDA2QzMuODI3NjcgMC44NTAwMDYgMC44NDk5NzYgMy44MjczIDAuODQ5OTc2IDcuNTAwMjNDMC44NDk5NzYgMTAuNDM3OSAyLjc1NTIzIDEyLjkzMDYgNS4zOTc3NSAxMy44MTA0QzUuNzMwNDcgMTMuODcxMiA1Ljg1MTcxIDEzLjY2NTggNS44NTE3MSAxMy40ODk1QzUuODUxNzEgMTMuMzMxNSA1Ljg0NiAxMi45MTM1IDUuODQyNzMgMTIuMzU4N0MzLjk5MzAxIDEyLjc2MDQgMy42MDI3MyAxMS40NjcxIDMuNjAyNzMgMTEuNDY3MUMzLjMwMDIyIDEwLjY5ODggMi44NjQyMyAxMC40OTQyIDIuODY0MjMgMTAuNDk0MkMyLjI2MDQ0IDEwLjA4MTkgMi45MDk5NSAxMC4wOTAxIDIuOTA5OTUgMTAuMDkwMUMzLjU3NzQyIDEwLjEzNyAzLjkyODUgMTAuNzc1NSAzLjkyODUgMTAuNzc1NUM0LjUyMTY3IDExLjc5MTYgNS40ODUxMiAxMS40OTgxIDUuODYzOTYgMTEuMzI3OUM1LjkyNDM4IDEwLjg5ODQgNi4wOTYyNSAxMC42MDUzIDYuMjg2MDggMTAuNDM5MUM0LjgwOTQ4IDEwLjI3MDkgMy4yNTY5NSA5LjcwMDYzIDMuMjU2OTUgNy4xNTI0MUMzLjI1Njk1IDYuNDI2MTUgMy41MTYxOCA1LjgzMjk4IDMuOTQxNTcgNS4zNjhDMy44NzI5OSA1LjE5OTggMy42NDQ3OCA0LjUyMzc1IDQuMDA2ODkgMy42MDgwN0M0LjAwNjg5IDMuNjA4MDcgNC41NjQ5NCAzLjQyOTI2IDUuODM1MzggNC4yODk0MUM2LjM2NTY4IDQuMTQyMDQgNi45MzQ3NyA0LjA2ODU2IDcuNTAwMTggNC4wNjU3QzguMDY1MTggNC4wNjg1NiA4LjYzMzg2IDQuMTQyMDQgOS4xNjQ5OCA0LjI4OTQxQzEwLjQzNDYgMy40MjkyNiAxMC45OTE4IDMuNjA4MDcgMTAuOTkxOCAzLjYwODA3QzExLjM1NDggNC41MjM3NSAxMS4xMjY2IDUuMTk5OCAxMS4wNTg0IDUuMzY4QzExLjQ4NDYgNS44MzI5OCAxMS43NDE4IDYuNDI2MTUgMTEuNzQxOCA3LjE1MjQxQzExLjc0MTggOS43MDcxNiAxMC4xODY4IDEwLjI2OTMgOC43MDU3MSAxMC40MzM4QzguOTQ0MTIgMTAuNjM5MiA5LjE1NjgxIDExLjA0NSA5LjE1NjgxIDExLjY2NTVDOS4xNTY4MSAxMi41NTQyIDkuMTQ4NjUgMTMuMjcxNSA5LjE0ODY1IDEzLjQ4OTVDOS4xNDg2NSAxMy42Njc1IDkuMjY4NjcgMTMuODc0NSA5LjYwNTg4IDEzLjgwOTVDMTIuMjQ2NCAxMi45MjgyIDE0LjE1IDEwLjQzNzUgMTQuMTUgNy41MDAyM0MxNC4xNSAzLjgyNzMgMTEuMTcyMyAwLjg1MDAwNiA3LjQ5OTM2IDAuODUwMDA2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sJHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTYgMS44MDAwMkM0LjM1MTk0IDEuODAwMDIgMS43OTk5NiA0LjM1MiAxLjc5OTk2IDcuNTAwMDJDMS43OTk5NiAxMC42NDggNC4zNTE5NCAxMy4yIDcuNDk5OTYgMTMuMkMxMC42NDggMTMuMiAxMy4yIDEwLjY0OCAxMy4yIDcuNTAwMDJDMTMuMiA0LjM1MiAxMC42NDggMS44MDAwMiA3LjQ5OTk2IDEuODAwMDJaTTAuODk5OTYzIDcuNTAwMDJDMC44OTk5NjMgMy44NTQ5NCAzLjg1NDg4IDAuOTAwMDI0IDcuNDk5OTYgMC45MDAwMjRDMTEuMTQ1IDAuOTAwMDI0IDE0LjEgMy44NTQ5NCAxNC4xIDcuNTAwMDJDMTQuMSAxMS4xNDUxIDExLjE0NSAxNC4xIDcuNDk5OTYgMTQuMUMzLjg1NDg4IDE0LjEgMC44OTk5NjMgMTEuMTQ1MSAwLjg5OTk2MyA3LjUwMDAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuNDk5OSA3Ljg5OTk4SDEuNDk5OTRWNy4wOTk5OEgxMy40OTk5VjcuODk5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjA5OTkxIDEzLjVWMS41SDcuODk5OTFWMTMuNUg3LjA5OTkxek0xMC4zNzUgNy40OTk5OEMxMC4zNzUgNS4zMjcyNCA5LjU5MzY0IDMuMTc3NzggOC4wNjE4MyAxLjc1NjU2TDguNTM3OTMgMS4yNDM0MUMxMC4yMzk2IDIuODIyMTggMTEuMDc1IDUuMTcyNzMgMTEuMDc1IDcuNDk5OTggMTEuMDc1IDkuODI3MjQgMTAuMjM5NiAxMi4xNzc4IDguNTM3OTMgMTMuNzU2Nkw4LjA2MTgzIDEzLjI0MzRDOS41OTM2NCAxMS44MjIyIDEwLjM3NSA5LjY3MjczIDEwLjM3NSA3LjQ5OTk4ek0zLjk5OTY5IDcuNUMzLjk5OTY5IDUuMTc2MTEgNC44MDc4NiAyLjgyNjc4IDYuNDU3NjggMS4yNDcxOUw2Ljk0MTc3IDEuNzUyODFDNS40NTgyIDMuMTczMjMgNC42OTk2OSA1LjMyMzg5IDQuNjk5NjkgNy41IDQuNjk5NyA5LjY3NjExIDUuNDU4MjIgMTEuODI2OCA2Ljk0MTc5IDEzLjI0NzJMNi40NTc2OSAxMy43NTI4QzQuODA3ODggMTIuMTczMiAzLjk5OTcgOS44MjM5IDMuOTk5NjkgNy41elwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5NiAzLjk1ODAxQzkuNjY5MjggMy45NTgwMSAxMS44NzUzIDQuMzU5MTUgMTMuMzcwNiA1LjE5NDQ4IDEzLjUzOTQgNS4yODg3NSAxMy41OTk4IDUuNTAxOTcgMTMuNTA1NSA1LjY3MDczIDEzLjQxMTMgNS44Mzk0OCAxMy4xOTggNS44OTk4NyAxMy4wMjkzIDUuODA1NiAxMS42Nzk0IDUuMDUxNTUgOS42MDc5OSA0LjY1ODAxIDcuNDk5OTYgNC42NTgwMSA1LjM5MTkyIDQuNjU4MDEgMy4zMjA1MiA1LjA1MTU1IDEuOTcwNjQgNS44MDU2IDEuODAxODggNS44OTk4NyAxLjU4ODY2IDUuODM5NDggMS40OTQzOSA1LjY3MDczIDEuNDAwMTMgNS41MDE5NyAxLjQ2MDUxIDUuMjg4NzUgMS42MjkyNyA1LjE5NDQ4IDMuMTI0NjYgNC4zNTkxNSA1LjMzMDYzIDMuOTU4MDEgNy40OTk5NiAzLjk1ODAxek03LjQ5OTk2IDEwLjg1QzkuNjY5MjggMTAuODUgMTEuODc1MyAxMC40NDg4IDEzLjM3MDYgOS42MTM1IDEzLjUzOTQgOS41MTkyNCAxMy41OTk4IDkuMzA2MDEgMTMuNTA1NSA5LjEzNzI2IDEzLjQxMTMgOC45Njg1IDEzLjE5OCA4LjkwODEyIDEzLjAyOTMgOS4wMDIzOCAxMS42Nzk0IDkuNzU2NDMgOS42MDc5OSAxMC4xNSA3LjQ5OTk2IDEwLjE1IDUuMzkxOTIgMTAuMTUgMy4zMjA1MiA5Ljc1NjQzIDEuOTcwNjQgOS4wMDIzOSAxLjgwMTg4IDguOTA4MTIgMS41ODg2NiA4Ljk2ODUgMS40OTQzOSA5LjEzNzI2IDEuNDAwMTMgOS4zMDYwMSAxLjQ2MDUxIDkuNTE5MjQgMS42MjkyNyA5LjYxMzUgMy4xMjQ2NiAxMC40NDg4IDUuMzMwNjMgMTAuODUgNy40OTk5NiAxMC44NXpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE50PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi41IDJIOFY3SDEzVjIuNUMxMyAyLjIyMzg2IDEyLjc3NjEgMiAxMi41IDJaTTEzIDhIOFYxM0gxMi41QzEyLjc3NjEgMTMgMTMgMTIuNzc2MSAxMyAxMi41VjhaTTcgN1YySDIuNUMyLjIyMzg2IDIgMiAyLjIyMzg2IDIgMi41VjdIN1pNMiA4VjEyLjVDMiAxMi43NzYxIDIuMjIzODYgMTMgMi41IDEzSDdWOEgyWk0yLjUgMUMxLjY3MTU3IDEgMSAxLjY3MTU3IDEgMi41VjEyLjVDMSAxMy4zMjg0IDEuNjcxNTcgMTQgMi41IDE0SDEyLjVDMTMuMzI4NCAxNCAxNCAxMy4zMjg0IDE0IDEyLjVWMi41QzE0IDEuNjcxNTcgMTMuMzI4NCAxIDEyLjUgMUgyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxGdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS40NDk5NSAwLjk0OTk1MUMxLjMxNzM0IDAuOTQ5OTUxIDEuMTkwMTYgMS4wMDI2MyAxLjA5NjQgMS4wOTY0QzEuMDAyNjMgMS4xOTAxNyAwLjk0OTk1MSAxLjMxNzM1IDAuOTQ5OTUxIDEuNDQ5OTVMMC45NDk5NjYgMy40NDk5NUMwLjk0OTk2OSAzLjcyNjEgMS4xNzM4MyAzLjk0OTk1IDEuNDQ5OTcgMy45NDk5NUMxLjcyNjExIDMuOTQ5OTUgMS45NDk5NyAzLjcyNjA5IDEuOTQ5OTcgMy40NDk5NUwxLjk0OTk1IDEuOTQ5OTVIMy40NDk5N0MzLjcyNjExIDEuOTQ5OTUgMy45NDk5NyAxLjcyNjA5IDMuOTQ5OTcgMS40NDk5NUMzLjk0OTk3IDEuMTczODEgMy43MjYxMSAwLjk0OTk1MSAzLjQ0OTk3IDAuOTQ5OTUxSDEuNDQ5OTVaTTUuOTQ5OTUgMC45NDk5NTFDNS42NzM4MSAwLjk0OTk1MSA1LjQ0OTk1IDEuMTczODEgNS40NDk5NSAxLjQ0OTk1QzUuNDQ5OTUgMS43MjYwOSA1LjY3MzgxIDEuOTQ5OTUgNS45NDk5NSAxLjk0OTk1SDguOTQ5OTVDOS4yMjYwOSAxLjk0OTk1IDkuNDQ5OTUgMS43MjYwOSA5LjQ0OTk1IDEuNDQ5OTVDOS40NDk5NSAxLjE3MzgxIDkuMjI2MDkgMC45NDk5NTEgOC45NDk5NSAwLjk0OTk1MUg1Ljk0OTk1Wk01LjQ0OTk1IDEzLjQ1QzUuNDQ5OTUgMTMuMTczOCA1LjY3MzgxIDEyLjk1IDUuOTQ5OTUgMTIuOTVIOC45NDk5NUM5LjIyNjA5IDEyLjk1IDkuNDQ5OTUgMTMuMTczOCA5LjQ0OTk1IDEzLjQ1QzkuNDQ5OTUgMTMuNzI2MSA5LjIyNjA5IDEzLjk1IDguOTQ5OTUgMTMuOTVINS45NDk5NUM1LjY3MzgxIDEzLjk1IDUuNDQ5OTUgMTMuNzI2MSA1LjQ0OTk1IDEzLjQ1Wk0xLjk0OTk1IDUuOTQ5OTVDMS45NDk5NSA1LjY3MzgxIDEuNzI2MDkgNS40NDk5NSAxLjQ0OTk1IDUuNDQ5OTVDMS4xNzM4MSA1LjQ0OTk1IDAuOTQ5OTUxIDUuNjczODEgMC45NDk5NTEgNS45NDk5NVY4Ljk0OTk1QzAuOTQ5OTUxIDkuMjI2MDkgMS4xNzM4MSA5LjQ0OTk1IDEuNDQ5OTUgOS40NDk5NUMxLjcyNjA5IDkuNDQ5OTUgMS45NDk5NSA5LjIyNjA5IDEuOTQ5OTUgOC45NDk5NVY1Ljk0OTk1Wk0xMy40NSA1LjQ0OTk1QzEzLjcyNjEgNS40NDk5NSAxMy45NSA1LjY3MzgxIDEzLjk1IDUuOTQ5OTVWOC45NDk5NUMxMy45NSA5LjIyNjA5IDEzLjcyNjEgOS40NDk5NSAxMy40NSA5LjQ0OTk1QzEzLjE3MzggOS40NDk5NSAxMi45NSA5LjIyNjA5IDEyLjk1IDguOTQ5OTVWNS45NDk5NUMxMi45NSA1LjY3MzgxIDEzLjE3MzggNS40NDk5NSAxMy40NSA1LjQ0OTk1Wk0xMS40NSAwLjk0OTk1MUMxMS4xNzM4IDAuOTQ5OTUxIDEwLjk1IDEuMTczODEgMTAuOTUgMS40NDk5NUMxMC45NSAxLjcyNjA5IDExLjE3MzggMS45NDk5NSAxMS40NSAxLjk0OTk1SDEyLjk0OTlWMy40NDk5NUMxMi45NDk5IDMuNzI2MDkgMTMuMTczOCAzLjk0OTk1IDEzLjQ0OTkgMy45NDk5NUMxMy43MjYxIDMuOTQ5OTUgMTMuOTQ5OSAzLjcyNjA5IDEzLjk0OTkgMy40NDk5NVYxLjQ0OTk1QzEzLjk0OTkgMS4xNzM4MSAxMy43MjUyIDAuOTQ5OTUxIDEzLjQ0OSAwLjk0OTk1MUgxMS40NVpNMS40NDk5NSAxMC45NUMxLjcyNjA5IDEwLjk1IDEuOTQ5OTUgMTEuMTczOCAxLjk0OTk1IDExLjQ1VjEyLjk1SDMuNDQ5OTdDMy43MjYxMSAxMi45NSAzLjk0OTk3IDEzLjE3MzggMy45NDk5NyAxMy40NUMzLjk0OTk3IDEzLjcyNjEgMy43MjYxMSAxMy45NSAzLjQ0OTk3IDEzLjk1SDEuNDQ5OTVDMS4xNzM4MSAxMy45NSAwLjk0OTk1MSAxMy43MjYxIDAuOTQ5OTUxIDEzLjQ1VjExLjQ1QzAuOTQ5OTUxIDExLjE3MzggMS4xNzM4MSAxMC45NSAxLjQ0OTk1IDEwLjk1Wk0xMy45NSAxMS40NUMxMy45NSAxMS4xNzM4IDEzLjcyNjEgMTAuOTUgMTMuNDUgMTAuOTVDMTMuMTczOCAxMC45NDk5IDEyLjk1IDExLjE3MzggMTIuOTUgMTEuNDQ5OUwxMi45NDkxIDEyLjk1SDExLjQ1QzExLjE3MzggMTIuOTUgMTAuOTUgMTMuMTczOCAxMC45NSAxMy40NUMxMC45NSAxMy43MjYxIDExLjE3MzggMTMuOTUgMTEuNDUgMTMuOTVIMTMuNDQ5OUMxMy43MjYxIDEzLjk1IDEzLjk0OTkgMTMuNzI2MSAxMy45NDk5IDEzLjQ1TDEzLjk1IDExLjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzY4OTJDMy44NDIyMiAwLjg3Njg5MiAwLjg3NzA3NSAzLjg0MjA0IDAuODc3MDc1IDcuNDk5NzJDMC44NzcwNzUgMTEuMTU3NCAzLjg0MjIyIDE0LjEyMjYgNy40OTk5MSAxNC4xMjI2QzExLjE1NzYgMTQuMTIyNiAxNC4xMjI3IDExLjE1NzQgMTQuMTIyNyA3LjQ5OTcyQzE0LjEyMjcgMy44NDIwNCAxMS4xNTc2IDAuODc2ODkyIDcuNDk5OTEgMC44NzY4OTJaTTcuMDAwMDMgMS44NDg2MUM0LjEwMTE0IDIuMTAxNyAxLjgyNzA3IDQuNTM1MTUgMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgMTAuNDY0MyA0LjEwMTE0IDEyLjg5NzcgNy4wMDAwMyAxMy4xNTA4VjEuODQ4NjFaTTguMDAwMDMgMTMuMTUwOEMxMC44OTg4IDEyLjg5NzYgMTMuMTcyNyAxMC40NjQyIDEzLjE3MjcgNy40OTk3MkMxMy4xNzI3IDQuNTM1MjQgMTAuODk4OCAyLjEwMTg1IDguMDAwMDMgMS44NDg2NFYxMy4xNTA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sV3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzY4OTJDMy44NDIyMiAwLjg3Njg5MiAwLjg3NzA3NSAzLjg0MjA0IDAuODc3MDc1IDcuNDk5NzJDMC44NzcwNzUgMTEuMTU3NCAzLjg0MjIyIDE0LjEyMjYgNy40OTk5MSAxNC4xMjI2QzExLjE1NzYgMTQuMTIyNiAxNC4xMjI3IDExLjE1NzQgMTQuMTIyNyA3LjQ5OTcyQzE0LjEyMjcgMy44NDIwNCAxMS4xNTc2IDAuODc2ODkyIDcuNDk5OTEgMC44NzY4OTJaTTcuNDk5ODggMS44MjY4OUM0LjM2Njg4IDEuODI2OSAxLjgyNzA3IDQuMzY2NzIgMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgMTAuNjMyNyA0LjM2Njg4IDEzLjE3MjUgNy40OTk4OCAxMy4xNzI2VjEuODI2ODlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx6dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS41IDNDMS4yMjM4NiAzIDEgMy4yMjM4NiAxIDMuNUMxIDMuNzc2MTQgMS4yMjM4NiA0IDEuNSA0SDEzLjVDMTMuNzc2MSA0IDE0IDMuNzc2MTQgMTQgMy41QzE0IDMuMjIzODYgMTMuNzc2MSAzIDEzLjUgM0gxLjVaTTEgNy41QzEgNy4yMjM4NiAxLjIyMzg2IDcgMS41IDdIMTMuNUMxMy43NzYxIDcgMTQgNy4yMjM4NiAxNCA3LjVDMTQgNy43NzYxNCAxMy43NzYxIDggMTMuNSA4SDEuNUMxLjIyMzg2IDggMSA3Ljc3NjE0IDEgNy41Wk0xIDExLjVDMSAxMS4yMjM5IDEuMjIzODYgMTEgMS41IDExSDEzLjVDMTMuNzc2MSAxMSAxNCAxMS4yMjM5IDE0IDExLjVDMTQgMTEuNzc2MSAxMy43NzYxIDEyIDEzLjUgMTJIMS41QzEuMjIzODYgMTIgMSAxMS43NzYxIDEgMTEuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEd0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02LjgxMTMgMS42NDcwNkM2LjYyMTg4IDIuODc5MTggNi42ODI2OCAzLjg4NTIzIDYuNzY4NDggNS4zMDQ5OUM2Ljc4NDE1IDUuNTY0MjYgNi44MDA2NSA1LjgzNzMyIDYuODE2NjEgNi4xMjgwOEM2LjgzMTExIDYuMzkyMDggNi42Mzc1OCA2LjYyMTcyIDYuMzc0OTUgNi42NTIxN0M2LjExMjMyIDYuNjgyNjIgNS44NzEzOCA2LjUwMzM0IDUuODI1MDkgNi4yNDMwNEw1Ljc0NzU0IDUuODA2OThDNS42NDQwMiA1LjE2NTI5IDUuNDgzNTUgNC4yNTQ4MSA1LjE3ODA3IDMuNDQ3NDFDNC44NjI0MSAyLjYxMzEyIDQuNDQ4NiAyLjA0MTIxIDMuOTM0MzYgMS44NjA0NEMzLjY0OTk0IDEuNzYxMDQgMy40MTkwMSAxLjg0Mjc5IDMuMjU4NjggMi4wMTA1MkMzLjA4NzQ2IDIuMTg5NjIgMi45OTc2IDIuNDcwNjUgMy4wNjI3IDIuNzUzOTlDMy4yMTQ2IDMuMzQ0MjQgMy40NDYyNyAzLjkxNjcgMy42OTgzNiA0LjUxODAyQzMuNzIwODIgNC41NzE1OCAzLjc0MzQ2IDQuNjI1NDMgMy43NjYyMSA0LjY3OTU0QzMuOTk1NCA1LjIyNDU3IDQuMjM2MTkgNS43OTcyIDQuNDE2NDQgNi4zOTA4MUw0LjQxNjkxIDYuMzkyMzhDNC41NjIgNi44NzU4NiA0LjY1NjQ2IDcuMjU5NSA0LjczMDg2IDcuNTYxNjVDNC43NjAzNCA3LjY4MTM4IDQuNzg2NjcgNy43ODgzMSA0LjgxMTc1IDcuODgzNTlDNC44Njc2OCA4LjA5NjA2IDQuNzc4MzYgOC4zMjAxNCA0LjU5MTYxIDguNDM1ODhDNC40MDQ4NiA4LjU1MTYxIDQuMTY0NDUgOC41MzE4OCAzLjk5OTA3IDguMzg3MjVDMy43Mzc0OSA4LjE1ODQ4IDMuNTE1IDcuOTI3ODQgMy4zMTgxNyA3LjcxODAyQzMuMjc2MjcgNy42NzMzNSAzLjIzNjAyIDcuNjMwMTggMy4xOTcwNSA3LjU4ODM4QzMuMDQ3NzcgNy40MjgyNiAyLjkxNzEyIDcuMjg4MTIgMi43ODMzNCA3LjE2MDI5QzIuNDU5ODkgNi44NTEyMiAyLjE4Mzk4IDYuNjgwMDQgMS44MDU4NSA2LjY0MzY5TDEuODAzMjQgNi42NDM0M0MxLjU2MTE3IDYuNjE4ODggMS40MTQwMiA2LjY2NDQxIDEuMzE3NTYgNi43MjYyN0MxLjIxODk5IDYuNzg5NDcgMS4xMTk4OCA2LjkwNDE0IDEuMDM3ODQgNy4xMTIzQzAuOTc2NTc2IDcuMjg0OTIgMS4wMTUxNSA3LjYyOTg3IDEuMTkyOSA3Ljk2OTExTDEuMTk3MjggNy45Nzc0N0MxLjQwMDg2IDguMzg0NTIgMS43NDQ3NSA4LjgxNTg3IDIuMTgxNDEgOS4yOTI5OUMyLjM5NzM5IDkuNTI4OTggMi42Mjg3MiA5Ljc2ODQ5IDIuODY5MzQgMTAuMDE3NEwyLjg3OTY2IDEwLjAyODFDMy4xMTU0NiAxMC4yNzIxIDMuMzU5NjIgMTAuNTI0NyAzLjU5NzEzIDEwLjc4MjdDNC40Mjg4IDExLjY4NjMgNS4yNzcwNiAxMi43NTM4IDUuNDYyNyAxNEgxMS41MDg3QzExLjU2MzYgMTIuNDM1MyAxMS44NzU2IDExLjI2OCAxMi4yODc1IDEwLjEzNDZDMTIuNDQ1NCA5LjcwMDQxIDEyLjYxMjEgOS4yODQxMiAxMi43ODI2IDguODU4MjlDMTMuMTA5NyA4LjA0MTM5IDEzLjQ1MDkgNy4xODkzNyAxMy43NzA1IDYuMTA4MjRDMTQuMDk4OSA0Ljk5NzM3IDE0LjAwOTcgNC4zNzAzMyAxMy44NjEzIDQuMDM5ODRDMTMuNzE3IDMuNzE4NTggMTMuNDkxNCAzLjYxNzg2IDEzLjM4MTYgMy41OTYwNkMxMy4xMzgxIDMuNTQ3NzQgMTMuMDM4NCAzLjYwOTQ3IDEyLjk2OTggMy42NzkwMUMxMi44NjcgMy43ODMxNiAxMi43Njk4IDMuOTgyNzMgMTIuNjkyMSA0LjMwMjY5QzEyLjYxNjYgNC42MTM0NSAxMi41NzUyIDQuOTY1MTcgMTIuNTMzIDUuMzI1MDFMMTIuNTI5OCA1LjM1Mjg1QzEyLjQ5MjQgNS42NzI0MiAxMi40NTA1IDYuMDMwMTYgMTIuMzY2NSA2LjMwMDk4QzEyLjMzODMgNi40MDY5OSAxMi4yODE5IDYuNTA0MDcgMTIuMTk3OSA2LjU3NTM5QzEyLjEzODIgNi42MjYxIDEyLjAxMDQgNi43MDgxOCAxMS44MzA5IDYuNjkzMTJDMTEuNTQyNCA2LjY2ODkxIDExLjM3MTIgNi40MjE0MyAxMS4zNjUgNi4xNDc4M0MxMS4zNTYgNS43NTQ1NCAxMS4zODgzIDUuMzU4NjQgMTEuNDA3NCA0Ljk2NjA4QzExLjQ0MjggNC4yMzY0NiAxMS40NzcgMy41MzM3IDExLjQyNDUgMi44MzQyTDExLjQyNDIgMi44MjkzNEMxMS4zOTE2IDIuMzI5OTcgMTEuMDQ5MyAyLjAwMjI4IDEwLjcwMDcgMS45MjI4QzEwLjUzMDUgMS44ODQwMSAxMC4zNjkgMS45MDYwMSAxMC4yMzQ3IDEuOTgzNUMxMC4xMDMgMi4wNTk0NiA5Ljk1NTM1IDIuMjEzMTggOS44NTc0IDIuNTEzOTRMOS44NTYzMSAyLjUxNzI2QzkuODE1MjUgMi42NDA0IDkuNzcyOTggMi44Nzc1MyA5LjczNjA2IDMuMjEyNEM5LjcwMDQ0IDMuNTM1NDIgOS42NzMzNyAzLjkxMjc5IDkuNjUxNTYgNC4yOTQxOEM5LjYzMjkgNC42MjAzMyA5LjYxNzg1IDQuOTU4NCA5LjYwNDM0IDUuMjYxOTRDOS41ODcyOCA1LjY0NTI5IDkuNTcyNjcgNS45NzM1NyA5LjU1NjMzIDYuMTUzMkM5LjU0OTgzIDYuMjI0NTkgOS41MjkzOSA2LjI5NDkzIDkuNDk1MDEgNi4zNTc4NUM5LjQ3MzU2IDYuMzk3MTEgOS4zNjExNSA2LjYwOTQ3IDkuMDcxMDYgNi42MTg0M0M4Ljc3OTE3IDYuNjI3NDQgOC42Mzk3NSA2LjQwMDU3IDguNjE2OTggNi4zNTkxOUM4LjU1NjM0IDYuMjQ4OTkgOC41NTA2NiA2LjExODA3IDguNTQ3NTQgNS45OTI4M0M4LjU0NDc0IDUuODgwNjQgOC41NDI5NCA1LjcxNzk4IDguNTQxNzQgNS41NDc2N0M4LjUzOTM1IDUuMjA1ODIgOC41MzkzNSA0LjgxOTE5IDguNTM5MzUgNC43MDk1MkM4LjUzOTM1IDMuNjY1NyA4LjUzODM4IDIuNjUzNzIgOC40NDcxNCAxLjY0MzcyQzguMzkxODMgMS4yNDEyNyA4LjA2Mjc4IDEuMDA0NTUgNy42NDM2IDEuMDAwMDVDNy4yMjM5OSAwLjk5NTU1MiA2Ljg3OTE4IDEuMjI3MDQgNi44MTEzIDEuNjQ3MDZaTTkuNDEyMTkgMS4zNjE3QzkuMjE0NjkgMC40NDg0ODQgOC4zOTkxMyAwLjAwODEwMzI0IDcuNjU0MzMgMC4wMDAxMTE1NEM2Ljg2NDUyIC0wLjAwODM2MzA4IDUuOTg3NjEgMC40NjU4ODEgNS44MjM2NSAxLjQ5MDM3TDUuODIzMTggMS40OTMzNEM1Ljc4MjM5IDEuNzU4NCA1Ljc1MjI5IDIuMDE0ODEgNS43MzA5IDIuMjY2NTJDNS4zOTQyMyAxLjY3MzY0IDQuOTI2MjIgMS4xNDg5NCA0LjI2NTUgMC45MTY4NTlDMy41ODY2MSAwLjY3OTMxMiAyLjk0OTIgMC44ODcwODcgMi41MzU4MiAxLjMxOTUyQzIuMTM0MTUgMS43Mzk3MSAxLjk0NDM4IDIuMzY3NDIgMi4wOTAzMSAyLjk4NzQ2TDIuMDkyNjkgMi45OTcxM0MyLjI2NDc4IDMuNjY4MDggMi41MjM5NiA0LjMwMzE2IDIuNzc2MTMgNC45MDQ2NUMyLjc5ODE0IDQuOTU3MTcgMi44MjAxIDUuMDA5NDEgMi44NDE5NCA1LjA2MTM5QzMuMDIxMzkgNS40ODg0MiAzLjE5Mzc4IDUuODk4NjYgMy4zMzg3MSA2LjMxMjU2QzIuOTY0MDQgNS45ODE0MiAyLjUxOTI1IDUuNzA3OTYgMS45MDI3NiA1LjY0ODRDMS40ODg2NSA1LjYwNjYzIDEuMTAzOTEgNS42NzUzNiAwLjc3NzgwNSA1Ljg4NDQ0QzAuNDU0MjM5IDYuMDkxOSAwLjI0MDY3MSA2LjQwNDA1IDAuMTA0MTg3IDYuNzU0MDZMMC4xMDA4NjggNi43NjI4MUMtMC4xMDE4NCA3LjMxMjg2IDAuMDY2MzMxMiA3Ljk3MTU3IDAuMzA0ODk1IDguNDI4OTdDMC41NzM3MDQgOC45NjQ3NCAwLjk5NjEwNCA5LjQ3OTA0IDEuNDQzNzIgOS45NjgxM0MxLjY3MDQ2IDEwLjIxNTkgMS45MTEzNiAxMC40NjUyIDIuMTUwMzMgMTAuNzEyNEwyLjE1NjgyIDEwLjcxOTFDMi4zOTUyNCAxMC45NjU4IDIuNjMyMTcgMTEuMjEwOSAyLjg2MTM0IDExLjQ1OTlDMy44MDkzNyAxMi40OSA0LjUwMDAyIDEzLjQ2MzIgNC41MDAwMiAxNC41QzQuNTAwMDIgMTQuNzc2MSA0LjcyMzg4IDE1IDUuMDAwMDIgMTVIMTJDMTIuMjc2MiAxNSAxMi41IDE0Ljc3NjEgMTIuNSAxNC41QzEyLjUgMTIuODIxMiAxMi44MDIxIDExLjY0NjIgMTMuMjI3NCAxMC40NzYyQzEzLjM2NTMgMTAuMDk2OCAxMy41MjE2IDkuNzA1NzkgMTMuNjg2OCA5LjI5MjQ3QzE0LjAyMzggOC40NDkyMiAxNC4zOTggNy41MTI5OCAxNC43Mjk1IDYuMzkxNzVDMTUuMDk1NiA1LjE1MzI0IDE1LjA1NTkgNC4yNTkwNCAxNC43NzM1IDMuNjMwMTdDMTQuNDg3IDIuOTkyMDggMTMuOTc5OCAyLjY5NTMgMTMuNTc2MyAyLjYxNTJDMTMuMTI3NiAyLjUyNjE0IDEyLjczNjcgMi42MDQ3NSAxMi40MjY4IDIuODMwODFDMTIuNDI1MyAyLjgwNzczIDEyLjQyMzYgMi43ODQ2OCAxMi40MjE5IDIuNzYxNjdDMTIuMzU4NyAxLjgxMDUgMTEuNjkwNyAxLjEyMjg1IDEwLjkyMyAwLjk0NzgyMUMxMC41MzQ2IDAuODU5Mjg3IDEwLjExMTEgMC45MDAzOTMgOS43MzUwOSAxLjExNzI0QzkuNjE4NTIgMS4xODQ0NiA5LjUxMDU1IDEuMjY2MjMgOS40MTIxOSAxLjM2MTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxxdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC43NTQzMiAyLjA1MDJDOC41MDU3OSAyLjA1MDIgOC4zMDQzMiAyLjI1MTY3IDguMzA0MzIgMi41MDAyQzguMzA0MzIgMi43NDg3MyA4LjUwNTc5IDIuOTUwMiA4Ljc1NDMyIDIuOTUwMkg5Ljk0OTk3VjcuMDUwMDRINS4wNDk5N1YyLjk1MDJINi4yNTQzMkM2LjUwMjg1IDIuOTUwMiA2LjcwNDMyIDIuNzQ4NzMgNi43MDQzMiAyLjUwMDJDNi43MDQzMiAyLjI1MTY3IDYuNTAyODUgMi4wNTAyIDYuMjU0MzIgMi4wNTAySDIuNzU0MzJDMi41MDU3OSAyLjA1MDIgMi4zMDQzMiAyLjI1MTY3IDIuMzA0MzIgMi41MDAyQzIuMzA0MzIgMi43NDg3MyAyLjUwNTc5IDIuOTUwMiAyLjc1NDMyIDIuOTUwMkgzLjk0OTk3VjEyLjA1MDJIMi43NTQzMkMyLjUwNTc5IDEyLjA1MDIgMi4zMDQzMiAxMi4yNTE3IDIuMzA0MzIgMTIuNTAwMkMyLjMwNDMyIDEyLjc0ODcgMi41MDU3OSAxMi45NTAyIDIuNzU0MzIgMTIuOTUwMkg2LjI1NDMyQzYuNTAyODUgMTIuOTUwMiA2LjcwNDMyIDEyLjc0ODcgNi43MDQzMiAxMi41MDAyQzYuNzA0MzIgMTIuMjUxNyA2LjUwMjg1IDEyLjA1MDIgNi4yNTQzMiAxMi4wNTAySDUuMDQ5OTdWNy45NTAwNEg5Ljk0OTk3VjEyLjA1MDJIOC43NTQzMkM4LjUwNTc5IDEyLjA1MDIgOC4zMDQzMiAxMi4yNTE3IDguMzA0MzIgMTIuNTAwMkM4LjMwNDMyIDEyLjc0ODcgOC41MDU3OSAxMi45NTAyIDguNzU0MzIgMTIuOTUwMkgxMi4yNTQzQzEyLjUwMjggMTIuOTUwMiAxMi43MDQzIDEyLjc0ODcgMTIuNzA0MyAxMi41MDAyQzEyLjcwNDMgMTIuMjUxNyAxMi41MDI4IDEyLjA1MDIgMTIuMjU0MyAxMi4wNTAySDExLjA1VjIuOTUwMkgxMi4yNTQzQzEyLjUwMjggMi45NTAyIDEyLjcwNDMgMi43NDg3MyAxMi43MDQzIDIuNTAwMkMxMi43MDQzIDIuMjUxNjcgMTIuNTAyOCAyLjA1MDIgMTIuMjU0MyAyLjA1MDJIOC43NTQzMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFl0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjE4MTMgMS42ODE3OUM3LjM1NzA0IDEuNTA2MDUgNy42NDE5NiAxLjUwNjA1IDcuODE3NyAxLjY4MTc5TDEwLjMxNzcgNC4xODE3OUMxMC40OTM0IDQuMzU3NTMgMTAuNDkzNCA0LjY0MjQ1IDEwLjMxNzcgNC44MTgxOUMxMC4xNDIgNC45OTM5MiA5Ljg1NzA0IDQuOTkzOTIgOS42ODEzIDQuODE4MTlMNy45NDk1IDMuMDg2MzhMNy45NDk1IDExLjkxMzZMOS42ODEzIDEwLjE4MThDOS44NTcwNCAxMC4wMDYxIDEwLjE0MiAxMC4wMDYxIDEwLjMxNzcgMTAuMTgxOEMxMC40OTM0IDEwLjM1NzUgMTAuNDkzNCAxMC42NDI0IDEwLjMxNzcgMTAuODE4Mkw3LjgxNzcgMTMuMzE4MkM3LjczMzMxIDEzLjQwMjYgNy42MTg4NSAxMy40NSA3LjQ5OTUgMTMuNDVDNy4zODAxNSAxMy40NSA3LjI2NTY5IDEzLjQwMjYgNy4xODEzIDEzLjMxODJMNC42ODEzIDEwLjgxODJDNC41MDU1NyAxMC42NDI0IDQuNTA1NTcgMTAuMzU3NSA0LjY4MTMgMTAuMTgxOEM0Ljg1NzA0IDEwLjAwNjEgNS4xNDE5NiAxMC4wMDYxIDUuMzE3NyAxMC4xODE4TDcuMDQ5NSAxMS45MTM2TDcuMDQ5NSAzLjA4NjM4TDUuMzE3NyA0LjgxODE5QzUuMTQxOTYgNC45OTM5MiA0Ljg1NzA0IDQuOTkzOTIgNC42ODEzIDQuODE4MTlDNC41MDU1NyA0LjY0MjQ1IDQuNTA1NTcgNC4zNTc1MyA0LjY4MTMgNC4xODE3OUw3LjE4MTMgMS42ODE3OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEt0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjA3OTI2IDAuMjIyMjUzQzcuMzEyNzUgLTAuMDA3NDM0IDcuNjg3MyAtMC4wMDc0MzQgNy45MjA3OSAwLjIyMjI1M0wxNC42NzA4IDYuODYyMjdDMTQuOTA3IDcuMDk0NjUgMTQuOTEwMSA3LjQ3NDUzIDE0LjY3NzggNy43MTA3NkMxNC40NDU0IDcuOTQ3IDE0LjA2NTUgNy45NTAxMiAxMy44MjkzIDcuNzE3NzNMMTMgNi45MDIwMVYxMi41QzEzIDEyLjc3NjEgMTIuNzc2MiAxMyAxMi41IDEzSDIuNTAwMDJDMi4yMjM4OCAxMyAyLjAwMDAyIDEyLjc3NjEgMi4wMDAwMiAxMi41VjYuOTAyMDFMMS4xNzA3OSA3LjcxNzczQzAuOTM0NTU4IDcuOTUwMTIgMC41NTQ2NzIgNy45NDcgMC4zMjIyOSA3LjcxMDc2QzAuMDg5OTA3OSA3LjQ3NDUzIDAuMDkzMDI4MyA3LjA5NDY1IDAuMzI5MjYgNi44NjIyN0w3LjA3OTI2IDAuMjIyMjUzWk03LjUwMDAyIDEuNDkxNjNMMTIgNS45MTgzMVYxMkgxMFY4LjQ5OTk5QzEwIDguMjIzODUgOS43NzYxNyA3Ljk5OTk5IDkuNTAwMDIgNy45OTk5OUg2LjUwMDAyQzYuMjIzODggNy45OTk5OSA2LjAwMDAyIDguMjIzODUgNi4wMDAwMiA4LjQ5OTk5VjEySDMuMDAwMDJWNS45MTgzMUw3LjUwMDAyIDEuNDkxNjNaTTcuMDAwMDIgMTJIOS4wMDAwMlY4Ljk5OTk5SDcuMDAwMDJWMTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxYdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDAuMDAzMjk1OUM2LjgwNDczIDAuMDAzMjk1OSA2LjI0OTUzIDAuMjgxMTA2IDYuMjUgMC43NDk5OTVDNi4yNSAwLjk5NzI1OCA2LjQyNDQ2IDEuMTIwMTQgNi41NzY4NyAxLjIyNzQ5QzYuNjk1MDcgMS4zMTA3NCA2LjggMS4zODQ2NSA2LjggMS41QzYuOCAxLjcwNzEgNi4wNjIyNCAxLjc0MjY0IDUuMTk3ODkgMS43ODQyN0MzLjk3NTUzIDEuODQzMTQgMi41IDEuOTE0MjEgMi41IDIuNUMyLjUgMi43NzYxNCAyLjcyMzg2IDMgMyAzSDEyQzEyLjI3NjEgMyAxMi41IDIuNzc2MTQgMTIuNSAyLjVDMTIuNSAxLjkxNDIxIDExLjAyNDUgMS44NDMxNCA5LjgwMjExIDEuNzg0MjdDOC45Mzc3NiAxLjc0MjY0IDguMiAxLjcwNzEgOC4yIDEuNUM4LjIgMS4zODQ2NSA4LjMwNDkzIDEuMzEwNzQgOC40MjMxMyAxLjIyNzQ5QzguNTc1NTQgMS4xMjAxNCA4Ljc1IDAuOTk3MjU4IDguNzUgMC43NDk5OTVDOC43NTA0NyAwLjI4MTEwNiA4LjE5NTI3IDAuMDAzMjk1OSA3LjUgMC4wMDMyOTU5Wk0yLjg5NDUxIDYuMTIyNjZDMi4yNTgwNiA2LjUyNDcxIDEuOTA0MTcgNy4zMTExOCAyLjAyNDczIDguMDU1NkwyLjgzNTg4IDEyLjQ3NzJDMy4wMDk5MyAxMy4zNTYyIDMuNzYyOSAxNCA0LjY2MDYxIDE0SDEwLjMzNzNDMTEuMjM1NCAxNCAxMS45ODg0IDEzLjM1NjIgMTIuMTYyNSAxMi40NzcyTDEyLjk3MzYgOC4wNTYwN0MxMy4wODkgNy4zMjM1OCAxMi44Mjg0IDYuNTMyNzYgMTIuMTMzMSA2LjA5MzczQzExLjcyODMgNS44MzAxMyAxMS42NDEyIDUuMzMyMzEgMTIuMTMzMSA1LjEyNzk2QzEyLjgyODQgNC44NjQzNSAxMi42OTQ4IDQgMTIgNEgxMC4zMDAxSDYuODAwMDVIMi45OTk5NkMyLjMwNDY5IDQgMi4xOTg3OCA0Ljg5MzI4IDIuODk0NTEgNS4xNTY4OUMzLjM4NjQyIDUuMzMyMzEgMy4yOTkzOSA1LjgzMDEzIDIuODk0NTEgNi4xMjI2NlpNOC4yMDAwNiA2LjI1QzguMjAwMDYgNS44MTc2OSA4LjA4NTcyIDUuMzc2MTUgNy45MDYzNSA1TDQuMTEwOTMgNUM0LjIwNjI2IDUuMjEzMTIgNC4yNDE5IDUuNDM4ODkgNC4yMjkwNCA1LjY1NTIxQzQuMTk1MjIgNi4yMjQxMiAzLjg0NTg3IDYuNjY4OTkgMy40ODAxNiA2LjkzMzIyTDMuNDU0OTIgNi45NTE0NkwzLjQyODU4IDYuOTY4MUMzLjEzNDA3IDcuMTU0MTQgMi45NTgwMSA3LjUzOTg5IDMuMDEwNTggNy44ODc0OUwzLjgxNzk3IDEyLjI4ODZDMy45MDUxMyAxMi43MTU0IDQuMjYxNDggMTMgNC42NjA2MSAxM0gxMC4zMzczQzEwLjczNyAxMyAxMS4wOTMyIDEyLjcxNTMgMTEuMTgwNCAxMi4yODg2TDExLjk4NzQgNy44ODk4QzEyLjA0OCA3LjQ4MjQ3IDExLjg5NTQgNy4xMjYzMSAxMS41OTkyIDYuOTM5MjdMMTEuNTg3NSA2LjkzMTg0TDExLjU4NzUgNi45MzE3NkMxMS4xOTQ3IDYuNjc2MDIgMTAuODMzMSA2LjIyNzg1IDEwLjc5ODYgNS42NDc5OEMxMC43ODQ2IDUuNDEyIDEwLjgyNjQgNS4xOTM5NyAxMC45MTEyIDVIOS4wNTUxN0M5LjAxOTg3IDUuMTQ2MTEgOS4wMDAwNiA1LjMxMjAxIDkuMDAwMDYgNS41QzkuMDAwMDYgNS45NzQ1IDkuMjE2NzkgNi4zNzEyNyA5LjQ0MzY3IDYuNzg2NjJDOS42OTI4NCA3LjI0Mjc4IDkuOTU0MjUgNy43MjEzNiA5Ljk1NDI1IDguMzQ5OTNDOS45NTQyNSA5LjI2OTggOS40OTg2OCA5Ljg0MjA1IDguNjIxODkgOS44NDIwNUM4LjEzMjA2IDkuODQyMDUgNy41NzgxOCA5LjQ2MDk3IDcuNTc4MTggOC43NTc4MUM3LjU3ODE4IDguMzUyNzkgNy43MTU1OCA4LjAxNjQ2IDcuODYxMjEgNy42NTk5OEM4LjAyNTQgNy4yNTgwNiA4LjIwMDA2IDYuODMwNTEgOC4yMDAwNiA2LjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTE0IDExLjAwMDFWNC4wMDAwNkwxIDQuMDAwMDZMMSAxMS4wMDAxSDE0Wk0xNSA0LjAwMDA2VjExLjAwMDFDMTUgMTEuNTUyMyAxNC41NTIzIDEyLjAwMDEgMTQgMTIuMDAwMUgxQzAuNDQ3NzE1IDEyLjAwMDEgMCAxMS41NTIzIDAgMTEuMDAwMVY0LjAwMDA2QzAgMy40NDc3OCAwLjQ0NzcxNSAzLjAwMDA2IDEgMy4wMDAwNkgxNEMxNC41NTIzIDMuMDAwMDYgMTUgMy40NDc3OCAxNSA0LjAwMDA2Wk0yIDUuMjVDMiA1LjExMTkzIDIuMTExOTMgNSAyLjI1IDVINS43NUM1Ljg4ODA3IDUgNiA1LjExMTkzIDYgNS4yNVY5Ljc1QzYgOS44ODgwNyA1Ljg4ODA3IDEwIDUuNzUgMTBIMi4yNUMyLjExMTkzIDEwIDIgOS44ODgwNyAyIDkuNzVWNS4yNVpNNy41IDdDNy4yMjM4NiA3IDcgNy4yMjM4NiA3IDcuNUM3IDcuNzc2MTQgNy4yMjM4NiA4IDcuNSA4SDEwLjVDMTAuNzc2MSA4IDExIDcuNzc2MTQgMTEgNy41QzExIDcuMjIzODYgMTAuNzc2MSA3IDEwLjUgN0g3LjVaTTcgOS41QzcgOS4yMjM4NiA3LjIyMzg2IDkgNy41IDlIMTIuNUMxMi43NzYxIDkgMTMgOS4yMjM4NiAxMyA5LjVDMTMgOS43NzYxNCAxMi43NzYxIDEwIDEyLjUgMTBINy41QzcuMjIzODYgMTAgNyA5Ljc3NjE0IDcgOS41Wk03LjUgNUM3LjIyMzg2IDUgNyA1LjIyMzg2IDcgNS41QzcgNS43NzYxNCA3LjIyMzg2IDYgNy41IDZIMTEuNUMxMS43NzYxIDYgMTIgNS43NzYxNCAxMiA1LjVDMTIgNS4yMjM4NiAxMS43NzYxIDUgMTEuNSA1SDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFF0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjUgMUgxMi41QzEzLjMyODQgMSAxNCAxLjY3MTU3IDE0IDIuNVYxMi41QzE0IDEzLjMyODQgMTMuMzI4NCAxNCAxMi41IDE0SDIuNUMxLjY3MTU3IDE0IDEgMTMuMzI4NCAxIDEyLjVWMi41QzEgMS42NzE1NyAxLjY3MTU3IDEgMi41IDFaTTIuNSAyQzIuMjIzODYgMiAyIDIuMjIzODYgMiAyLjVWOC4zNjM2TDMuNjgxOCA2LjY4MThDMy43NjgwOSA2LjU5NTUxIDMuODg1NzIgNi41NDc5NyA0LjAwNzc0IDYuNTUwMDdDNC4xMjk3NSA2LjU1MjE2IDQuMjQ1NjggNi42MDM3MiA0LjMyODk1IDYuNjkyOTNMNy44NzM1NSAxMC40OTAxTDEwLjY4MTggNy42ODE4QzEwLjg1NzUgNy41MDYwNyAxMS4xNDI1IDcuNTA2MDcgMTEuMzE4MiA3LjY4MThMMTMgOS4zNjM2VjIuNUMxMyAyLjIyMzg2IDEyLjc3NjEgMiAxMi41IDJIMi41Wk0yIDEyLjVWOS42MzY0TDMuOTg4ODcgNy42NDc1M0w3LjUzMTEgMTEuNDQyMUw4Ljk0MTEzIDEzSDIuNUMyLjIyMzg2IDEzIDIgMTIuNzc2MSAyIDEyLjVaTTEyLjUgMTNIMTAuMTU1TDguNDgzMzYgMTEuMTUzTDExIDguNjM2NEwxMyAxMC42MzY0VjEyLjVDMTMgMTIuNzc2MSAxMi43NzYxIDEzIDEyLjUgMTNaTTYuNjQ5MjIgNS41QzYuNjQ5MjIgNS4wMzAxMyA3LjAzMDEzIDQuNjQ5MjIgNy41IDQuNjQ5MjJDNy45Njk4NyA0LjY0OTIyIDguMzUwNzggNS4wMzAxMyA4LjM1MDc4IDUuNUM4LjM1MDc4IDUuOTY5ODcgNy45Njk4NyA2LjM1MDc4IDcuNSA2LjM1MDc4QzcuMDMwMTMgNi4zNTA3OCA2LjY0OTIyIDUuOTY5ODcgNi42NDkyMiA1LjVaTTcuNSAzLjc0OTIyQzYuNTMzMDcgMy43NDkyMiA1Ljc0OTIyIDQuNTMzMDcgNS43NDkyMiA1LjVDNS43NDkyMiA2LjQ2NjkzIDYuNTMzMDcgNy4yNTA3OCA3LjUgNy4yNTA3OEM4LjQ2NjkzIDcuMjUwNzggOS4yNTA3OCA2LjQ2NjkzIDkuMjUwNzggNS41QzkuMjUwNzggNC41MzMwNyA4LjQ2NjkzIDMuNzQ5MjIgNy41IDMuNzQ5MjJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxlbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3Njg5MkMzLjg0MjIyIDAuODc2ODkyIDAuODc3MDc1IDMuODQyMDQgMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAxMS4xNTc0IDMuODQyMjIgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMTEuMTU3NiAxNC4xMjI2IDE0LjEyMjcgMTEuMTU3NCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAzLjg0MjA0IDExLjE1NzYgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MlpNMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgNC4zNjY3MSA0LjM2Njg5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5QzEwLjYzMjkgMS44MjY4OSAxMy4xNzI3IDQuMzY2NzEgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgMTAuNjMyNyAxMC42MzI5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzQuMzY2ODkgMTMuMTcyNiAxLjgyNzA3IDEwLjYzMjcgMS44MjcwNyA3LjQ5OTcyWk04LjI0OTkyIDQuNDk5OTlDOC4yNDk5MiA0LjkxNDIgNy45MTQxMyA1LjI0OTk5IDcuNDk5OTIgNS4yNDk5OUM3LjA4NTcxIDUuMjQ5OTkgNi43NDk5MiA0LjkxNDIgNi43NDk5MiA0LjQ5OTk5QzYuNzQ5OTIgNC4wODU3NyA3LjA4NTcxIDMuNzQ5OTkgNy40OTk5MiAzLjc0OTk5QzcuOTE0MTMgMy43NDk5OSA4LjI0OTkyIDQuMDg1NzcgOC4yNDk5MiA0LjQ5OTk5Wk02LjAwMDAzIDUuOTk5OTlINi41MDAwM0g3LjUwMDAzQzcuNzc2MTggNS45OTk5OSA4LjAwMDAzIDYuMjIzODQgOC4wMDAwMyA2LjQ5OTk5VjkuOTk5OTlIOC41MDAwM0g5LjAwMDAzVjExSDguNTAwMDNINy41MDAwM0g2LjUwMDAzSDYuMDAwMDNWOS45OTk5OUg2LjUwMDAzSDcuMDAwMDNWNi45OTk5OUg2LjUwMDAzSDYuMDAwMDNWNS45OTk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHRuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02LjUgMUM2LjIyMzg2IDEgNiAxLjIyMzg2IDYgMS41QzYgMS43NzYxNCA2LjIyMzg2IDIgNi41IDJDNy4xMjY3MSAyIDcuNDU3MTggMi4yMDAyOCA3LjY1NTYzIDIuNDc4MTJDNy44NzgxIDIuNzg5NTcgOCAzLjI4ODM3IDggNFYxMUM4IDExLjcxMTYgNy44NzgxIDEyLjIxMDQgNy42NTU2MyAxMi41MjE5QzcuNDU3MTggMTIuNzk5NyA3LjEyNjcxIDEzIDYuNSAxM0M2LjIyMzg2IDEzIDYgMTMuMjIzOSA2IDEzLjVDNiAxMy43NzYxIDYuMjIzODYgMTQgNi41IDE0QzcuMzczMjkgMTQgOC4wNDI4MiAxMy43MDAzIDguNDY5MzcgMTMuMTAzMUM4LjQ3OTc2IDEzLjA4ODYgOC40ODk5NyAxMy4wNzM5IDguNSAxMy4wNTkxQzguNTEwMDMgMTMuMDczOSA4LjUyMDI0IDEzLjA4ODYgOC41MzA2MyAxMy4xMDMxQzguOTU3MTggMTMuNzAwMyA5LjYyNjcxIDE0IDEwLjUgMTRDMTAuNzc2MSAxNCAxMSAxMy43NzYxIDExIDEzLjVDMTEgMTMuMjIzOSAxMC43NzYxIDEzIDEwLjUgMTNDOS44NzMyOSAxMyA5LjU0MjgyIDEyLjc5OTcgOS4zNDQzNyAxMi41MjE5QzkuMTIxOSAxMi4yMTA0IDkgMTEuNzExNiA5IDExVjRDOSAzLjI4ODM3IDkuMTIxOSAyLjc4OTU3IDkuMzQ0MzcgMi40NzgxMkM5LjU0MjgyIDIuMjAwMjggOS44NzMyOSAyIDEwLjUgMkMxMC43NzYxIDIgMTEgMS43NzYxNCAxMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxQzkuNjI2NzEgMSA4Ljk1NzE4IDEuMjk5NzIgOC41MzA2MyAxLjg5Njg4QzguNTIwMjQgMS45MTE0MyA4LjUxMDAzIDEuOTI2MTEgOC41IDEuOTQwOUM4LjQ4OTk3IDEuOTI2MTEgOC40Nzk3NiAxLjkxMTQzIDguNDY5MzcgMS44OTY4OEM4LjA0MjgyIDEuMjk5NzIgNy4zNzMyOSAxIDYuNSAxWk0xNCA1SDExVjRIMTRDMTQuNTUyMyA0IDE1IDQuNDQ3NzIgMTUgNVYxMEMxNSAxMC41NTIzIDE0LjU1MjMgMTEgMTQgMTFIMTFWMTBIMTRWNVpNNiA0VjVIMUwxIDEwSDZWMTFIMUMwLjQ0NzcxNSAxMSAwIDEwLjU1MjMgMCAxMFY1QzAgNC40NDc3MiAwLjQ0NzcxNSA0IDEgNEg2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNDk5OTggMC41QzUuNDk5OTggMC4yMjM4NTggNS43MjM4MyAwIDUuOTk5OTggMEg3LjQ5OTk4SDguOTk5OThDOS4yNzYxMiAwIDkuNDk5OTggMC4yMjM4NTggOS40OTk5OCAwLjVDOS40OTk5OCAwLjc3NjE0MiA5LjI3NjEyIDEgOC45OTk5OCAxSDcuOTk5OThWMi4xMTkyMkM5LjA5ODMyIDIuMjA0MDkgMTAuMTE5IDIuNTY2MjIgMTAuOTkyIDMuMTM1NzJDMTEuMDExNiAzLjEwODUxIDExLjAzMzYgMy4wODI1MiAxMS4wNTggMy4wNTgwNkwxMi4wNTggMi4wNTgwNkMxMi4zMDIxIDEuODEzOTggMTIuNjk3OCAxLjgxMzk4IDEyLjk0MTkgMi4wNTgwNkMxMy4xODYgMi4zMDIxNCAxMy4xODYgMi42OTc4NiAxMi45NDE5IDIuOTQxOTRMMTEuOTY3IDMuOTE2ODJDMTMuMTU5NSA1LjA3OTI1IDEzLjkgNi43MDMxNCAxMy45IDguNDk5OThDMTMuOSAxMi4wMzQ2IDExLjAzNDYgMTQuOSA3LjQ5OTk4IDE0LjlDMy45NjUzNSAxNC45IDEuMDk5OTggMTIuMDM0NiAxLjA5OTk4IDguNDk5OThDMS4wOTk5OCA1LjEzMzYxIDMuNjk5MDQgMi4zNzQzIDYuOTk5OTggMi4xMTkyMlYxSDUuOTk5OThDNS43MjM4MyAxIDUuNDk5OTggMC43NzYxNDIgNS40OTk5OCAwLjVaTTIuMDk5OTggOC40OTk5OEMyLjA5OTk4IDUuNTE3NjQgNC41MTc2NCAzLjA5OTk4IDcuNDk5OTggMy4wOTk5OEMxMC40ODIzIDMuMDk5OTggMTIuOSA1LjUxNzY0IDEyLjkgOC40OTk5OEMxMi45IDExLjQ4MjMgMTAuNDgyMyAxMy45IDcuNDk5OTggMTMuOUM0LjUxNzY0IDEzLjkgMi4wOTk5OCAxMS40ODIzIDIuMDk5OTggOC40OTk5OFpNNy40OTk5OCA4LjQ5OTk4VjQuMDk5OThDNS4wNjk5MiA0LjA5OTk4IDMuMDk5OTggNi4wNjk5MiAzLjA5OTk4IDguNDk5OThDMy4wOTk5OCAxMC45MyA1LjA2OTkyIDEyLjkgNy40OTk5OCAxMi45QzguNzE1IDEyLjkgOS44MTUgMTIuNDA3NSAxMC42MTEyIDExLjYxMTJMNy40OTk5OCA4LjQ5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNzU0MzIgMC44MTk1MzdDNy41OTc0MiAwLjcyNjgyMSA3LjQwMjUgMC43MjY4MjEgNy4yNDU1OSAwLjgxOTUzN0wxLjc0NTU5IDQuMDY5NTRDMS41OTMzNiA0LjE1OTQ5IDEuNDk5OTYgNC4zMjMxNyAxLjQ5OTk2IDQuNUMxLjQ5OTk2IDQuNjc2ODMgMS41OTMzNiA0Ljg0MDUxIDEuNzQ1NTkgNC45MzA0Nkw3LjI0NTU5IDguMTgwNDZDNy40MDI1IDguMjczMTggNy41OTc0MiA4LjI3MzE4IDcuNzU0MzIgOC4xODA0NkwxMy4yNTQzIDQuOTMwNDZDMTMuNDA2NiA0Ljg0MDUxIDEzLjUgNC42NzY4MyAxMy41IDQuNUMxMy41IDQuMzIzMTcgMTMuNDA2NiA0LjE1OTQ5IDEzLjI1NDMgNC4wNjk1NEw3Ljc1NDMyIDAuODE5NTM3Wk03LjQ5OTk2IDcuMTY5MjNMMi45ODI4IDQuNUw3LjQ5OTk2IDEuODMwNzdMMTIuMDE3MSA0LjVMNy40OTk5NiA3LjE2OTIzWk0xLjU2OTUgNy40OTU2NEMxLjcwOTk4IDcuMjU3OSAyLjAxNjU5IDcuMTc5MDYgMi4yNTQzMiA3LjMxOTU0TDcuNDk5OTYgMTAuNDE5MkwxMi43NDU2IDcuMzE5NTRDMTIuOTgzMyA3LjE3OTA2IDEzLjI4OTkgNy4yNTc5IDEzLjQzMDQgNy40OTU2NEMxMy41NzA5IDcuNzMzMzcgMTMuNDkyMSA4LjAzOTk4IDEzLjI1NDMgOC4xODA0Nkw3Ljc1NDMyIDExLjQzMDVDNy41OTc0MiAxMS41MjMyIDcuNDAyNSAxMS41MjMyIDcuMjQ1NTkgMTEuNDMwNUwxLjc0NTU5IDguMTgwNDZDMS41MDc4NiA4LjAzOTk4IDEuNDI5MDEgNy43MzMzNyAxLjU2OTUgNy40OTU2NFpNMS41Njk0OSAxMC40OTU2QzEuNzA5OTggMTAuMjU3OSAyLjAxNjU4IDEwLjE3OTEgMi4yNTQzMiAxMC4zMTk1TDcuNDk5OTYgMTMuNDE5MkwxMi43NDU2IDEwLjMxOTVDMTIuOTgzMyAxMC4xNzkxIDEzLjI4OTkgMTAuMjU3OSAxMy40MzA0IDEwLjQ5NTZDMTMuNTcwOSAxMC43MzM0IDEzLjQ5MjEgMTEuMDQgMTMuMjU0MyAxMS4xODA1TDcuNzU0MzIgMTQuNDMwNUM3LjU5NzQyIDE0LjUyMzIgNy40MDI1IDE0LjUyMzIgNy4yNDU1OSAxNC40MzA1TDEuNzQ1NTkgMTEuMTgwNUMxLjUwNzg1IDExLjA0IDEuNDI5MDEgMTAuNzMzNCAxLjU2OTQ5IDEwLjQ5NTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxvbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOSAySDZWMTNIOVYyWk0xMCAyVjEzSDEyLjVDMTIuNzc2MSAxMyAxMyAxMi43NzYxIDEzIDEyLjVWMi41QzEzIDIuMjIzODYgMTIuNzc2MSAyIDEyLjUgMkgxMFpNMi41IDJINVYxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41VjIuNUMyIDIuMjIzODYgMi4yMjM4NiAyIDIuNSAyWk0yLjUgMUMxLjY3MTU3IDEgMSAxLjY3MTU3IDEgMi41VjEyLjVDMSAxMy4zMjg0IDEuNjcxNTcgMTQgMi41IDE0SDEyLjVDMTMuMzI4NCAxNCAxNCAxMy4zMjg0IDE0IDEyLjVWMi41QzE0IDEuNjcxNTcgMTMuMzI4NCAxIDEyLjUgMUgyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy42ODk3OSAyLjc1QzMuODk2NjcgMi43NDk3OSA0LjA4MjMyIDIuODc3MDEgNC4xNTY3OSAzLjA3MDAzTDcuMzY2NjIgMTEuMzlDNy40NjYwMiAxMS42NDc3IDcuMzM3NzQgMTEuOTM3MSA3LjA4MDEgMTIuMDM2NUM2LjgyMjQ3IDEyLjEzNTkgNi41MzMwNCAxMi4wMDc2IDYuNDMzNjUgMTEuNzVMNS4zODI1IDkuMDI1MzdIMi4wMTEzM0wwLjk2Njk5MiAxMS43NDlDMC44NjgxMjggMTIuMDA2OCAwLjU3ODk2NCAxMi4xMzU3IDAuMzIxMTI2IDEyLjAzNjlDMC4wNjMyODc4IDExLjkzOCAtMC4wNjU1ODY0IDExLjY0ODggMC4wMzMyNzc0IDExLjM5MUwzLjIyMzQ0IDMuMDcwOTlDMy4yOTc1MSAyLjg3NzgyIDMuNDgyOSAyLjc1MDIxIDMuNjg5NzkgMi43NVpNMy42OTE3NCA0LjY0Mjg0TDUuMDU0NTggOC4xNzUzN0gyLjMzNzI0TDMuNjkxNzQgNC42NDI4NFpNMTAuODk4OSA1LjIwNzAzQzkuMjU4MTggNS4yMDcwMyA4LjAwOTE1IDYuNjg1NjkgOC4wMDkxNSA4LjYwOTcyQzguMDA5MTUgMTAuNjMzNyA5LjM1ODE4IDEyLjAxMjQgMTAuODk4OSAxMi4wMTI0QzExLjcyMTQgMTIuMDEyNCAxMi41NzQ0IDExLjY2OTIgMTMuMTU0MyAxMS4wMjE5VjExLjUzQzEzLjE1NDMgMTEuNzc4NSAxMy4zNTU3IDExLjk4IDEzLjYwNDMgMTEuOThDMTMuODUyOCAxMS45OCAxNC4wNTQzIDExLjc3ODUgMTQuMDU0MyAxMS41M1Y1LjcyQzE0LjA1NDMgNS40NzE0NyAxMy44NTI4IDUuMjcgMTMuNjA0MyA1LjI3QzEzLjM1NTcgNS4yNyAxMy4xNTQzIDUuNDcxNDcgMTMuMTU0MyA1LjcyVjYuMjIzMTdDMTIuNjA1NCA1LjYwMDk1IDExLjc5MjQgNS4yMDcwMyAxMC44OTg5IDUuMjA3MDNaTTEzLjE1NDMgOS43OTgyM1Y3LjMwMTk1QzEyLjc2MzkgNi41ODEwMSAxMS45NDE0IDYuMDU3NTcgMTEuMDg2OCA2LjA1NzU3QzEwLjEwODggNi4wNTc1NyA5LjAzNTAzIDYuOTY1ODEgOS4wMzUwMyA4LjYwOTU1QzkuMDM1MDMgMTAuMTUzMyAxMC4wMDg4IDExLjE2MTUgMTEuMDg2OCAxMS4xNjE1QzExLjk3MDEgMTEuMTYxNSAxMi43NzE5IDEwLjQ5NTIgMTMuMTU0MyA5Ljc5ODIzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjk4OTkgNS4yMDcwM0MyLjA1ODIzIDUuMjA3MDMgMC44MDkyMDQgNi42ODU2OSAwLjgwOTIwNCA4LjYwOTcyQzAuODA5MjA0IDEwLjYzMzcgMi4xNTgyMyAxMi4wMTI0IDMuNjk4OTkgMTIuMDEyNEM0LjUyMTI2IDEyLjAxMjQgNS4zNzQwMiAxMS42NjkzIDUuOTUzOSAxMS4wMjIzVjExLjUzQzUuOTUzOSAxMS43Nzg1IDYuMTU1MzcgMTEuOTggNi40MDM5IDExLjk4QzYuNjUyNDMgMTEuOTggNi44NTM5IDExLjc3ODUgNi44NTM5IDExLjUzVjUuNzIwMDFDNi44NTM5IDUuNDcxNDkgNi42NTI0MyA1LjI3MDAxIDYuNDAzOSA1LjI3MDAxQzYuMTU1MzcgNS4yNzAwMSA1Ljk1MzkgNS40NzE0OSA1Ljk1MzkgNS43MjAwMVY2LjIyMjY5QzUuNDA1MDYgNS42MDA3NSA0LjU5MjE4IDUuMjA3MDMgMy42OTg5OSA1LjIwNzAzWk01Ljk1MzkgOS43OTlWNy4zMDExN0M1LjU2MzM5IDYuNTgwNjQgNC43NDExOCA2LjA1NzU3IDMuODg2OCA2LjA1NzU3QzIuOTA4OSA2LjA1NzU3IDEuODM1MDggNi45NjU4MSAxLjgzNTA4IDguNjA5NTVDMS44MzUwOCAxMC4xNTMzIDIuODA4ODkgMTEuMTYxNSAzLjg4NjggMTEuMTYxNUM0Ljc2OTg0IDExLjE2MTUgNS41NzE0MSAxMC40OTU3IDUuOTUzOSA5Ljc5OVpNMTAuNzk5IDUuMjA3MDNDOS4xNTgyMyA1LjIwNzAzIDcuOTA5MiA2LjY4NTY5IDcuOTA5MiA4LjYwOTcyQzcuOTA5MiAxMC42MzM3IDkuMjU4MjMgMTIuMDEyNCAxMC43OTkgMTIuMDEyNEMxMS42MjE1IDEyLjAxMjQgMTIuNDc0NCAxMS42NjkyIDEzLjA1NDMgMTEuMDIxOFYxMS41M0MxMy4wNTQzIDExLjc3ODUgMTMuMjU1OCAxMS45OCAxMy41MDQzIDExLjk4QzEzLjc1MjkgMTEuOTggMTMuOTU0MyAxMS43Nzg1IDEzLjk1NDMgMTEuNTNWNS43MkMxMy45NTQzIDUuNDcxNDcgMTMuNzUyOSA1LjI3IDEzLjUwNDMgNS4yN0MxMy4yNTU4IDUuMjcgMTMuMDU0MyA1LjQ3MTQ3IDEzLjA1NDMgNS43MlY2LjIyMzE4QzEyLjUwNTUgNS42MDA5NSAxMS42OTI0IDUuMjA3MDMgMTAuNzk5IDUuMjA3MDNaTTEzLjA1NDMgOS43OTgyMlY3LjMwMTk2QzEyLjY2NCA2LjU4MTAyIDExLjg0MTUgNi4wNTc1NyAxMC45ODY4IDYuMDU3NTdDMTAuMDA4OSA2LjA1NzU3IDguOTM1MDggNi45NjU4MSA4LjkzNTA4IDguNjA5NTVDOC45MzUwOCAxMC4xNTMzIDkuOTA4ODkgMTEuMTYxNSAxMC45ODY4IDExLjE2MTVDMTEuODcwMiAxMS4xNjE1IDEyLjY3MiAxMC40OTUyIDEzLjA1NDMgOS43OTgyMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHNuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS4yODk1IDIuNzVDMTEuNDk2NCAyLjc0OTc5IDExLjY4MjEgMi44NzcwMSAxMS43NTY1IDMuMDcwMDNMMTQuOTY2NCAxMS4zOUMxNS4wNjU3IDExLjY0NzcgMTQuOTM3NSAxMS45MzcxIDE0LjY3OTggMTIuMDM2NUMxNC40MjIyIDEyLjEzNTkgMTQuMTMyOCAxMi4wMDc2IDE0LjAzMzQgMTEuNzVMMTIuOTgyMiA5LjAyNTM3SDkuNjExMDZMOC41NjY3MiAxMS43NDlDOC40Njc4NiAxMi4wMDY4IDguMTc4NyAxMi4xMzU3IDcuOTIwODYgMTIuMDM2OUM3LjY2MzAyIDExLjkzOCA3LjUzNDE0IDExLjY0ODggNy42MzMwMSAxMS4zOTFMMTAuODIzMiAzLjA3MDk5QzEwLjg5NzIgMi44Nzc4MiAxMS4wODI2IDIuNzUwMjEgMTEuMjg5NSAyLjc1Wk0xMS4yOTE1IDQuNjQyODRMMTIuNjU0MyA4LjE3NTM3SDkuOTM2OThMMTEuMjkxNSA0LjY0Mjg0Wk0yLjg5ODk1IDUuMjA3MDNDMS4yNTgxOCA1LjIwNzAzIDAuMDA5MTU1MjcgNi42ODU2OSAwLjAwOTE1NTI3IDguNjA5NzJDMC4wMDkxNTUyNyAxMC42MzM3IDEuMzU4MTggMTIuMDEyNCAyLjg5ODk1IDEyLjAxMjRDMy43MjE0MSAxMi4wMTI0IDQuNTc0MzggMTEuNjY5MiA1LjE1NDI3IDExLjAyMTlWMTEuNTNDNS4xNTQyNyAxMS43Nzg1IDUuMzU1NzQgMTEuOTggNS42MDQyNyAxMS45OEM1Ljg1MjggMTEuOTggNi4wNTQyNyAxMS43Nzg1IDYuMDU0MjcgMTEuNTNWNS43MkM2LjA1NDI3IDUuNDcxNDcgNS44NTI4IDUuMjcgNS42MDQyNyA1LjI3QzUuMzU1NzQgNS4yNyA1LjE1NDI3IDUuNDcxNDcgNS4xNTQyNyA1LjcyVjYuMjIzMTdDNC42MDU0MyA1LjYwMDk1IDMuNzkyMzYgNS4yMDcwMyAyLjg5ODk1IDUuMjA3MDNaTTUuMTU0MjcgOS43OTgyM1Y3LjMwMTk1QzQuNzYzOTMgNi41ODEwMSAzLjk0MTQ0IDYuMDU3NTcgMy4wODY3NSA2LjA1NzU3QzIuMTA4ODUgNi4wNTc1NyAxLjAzNTAzIDYuOTY1ODEgMS4wMzUwMyA4LjYwOTU1QzEuMDM1MDMgMTAuMTUzMyAyLjAwODg1IDExLjE2MTUgMy4wODY3NSAxMS4xNjE1QzMuOTcwMTEgMTEuMTYxNSA0Ljc3MTk1IDEwLjQ5NTIgNS4xNTQyNyA5Ljc5ODIzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sY249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjI1NSAyLjc1QzMuODM0NzggMi43NSA0LjAyMTkyIDIuODgwMzQgNC4wOTQ0OCAzLjA3NjY0TDcuMTY5ODUgMTEuMzk2MkM3LjI2NTYgMTEuNjU1MiA3LjEzMzI0IDExLjk0MjggNi44NzQyMyAxMi4wMzg2QzYuNjE1MjIgMTIuMTM0MyA2LjMyNzYzIDEyLjAwMiA2LjIzMTg4IDExLjc0MjlMNS4yMjM4NyA5LjAxNjAzSDIuMDI3MTJMMS4wMTkxMSAxMS43NDI5QzAuOTIzMzYyIDEyLjAwMiAwLjYzNTc3NCAxMi4xMzQzIDAuMzc2NzYyIDEyLjAzODZDMC4xMTc3NDkgMTEuOTQyOCAtMC4wMTQ2MDUyIDExLjY1NTIgMC4wODExNDAxIDExLjM5NjJMMy4xNTY1MSAzLjA3NjY0QzMuMjI5MDggMi44ODAzNCAzLjQxNjIxIDIuNzUgMy42MjU1IDIuNzVaTTMuNjI1NSA0LjY5MjA3TDQuOTA5NjYgOC4xNjYwM0gyLjM0MTMzTDMuNjI1NSA0LjY5MjA3Wk0xMS4zNzE5IDIuNzVDMTEuNTgxMSAyLjc1IDExLjc2ODMgMi44ODAzNCAxMS44NDA4IDMuMDc2NjRMMTQuOTE2MiAxMS4zOTYyQzE1LjAxMiAxMS42NTUyIDE0Ljg3OTYgMTEuOTQyOCAxNC42MjA2IDEyLjAzODZDMTQuMzYxNiAxMi4xMzQzIDE0LjA3NCAxMi4wMDIgMTMuOTc4MiAxMS43NDI5TDEyLjk3MDIgOS4wMTYwM0g5Ljc3MzQ4TDguNzY1NDcgMTEuNzQyOUM4LjY2OTcyIDEyLjAwMiA4LjM4MjEzIDEyLjEzNDMgOC4xMjMxMiAxMi4wMzg2QzcuODY0MTEgMTEuOTQyOCA3LjczMTc1IDExLjY1NTIgNy44Mjc1IDExLjM5NjJMMTAuOTAyOSAzLjA3NjY0QzEwLjk3NTQgMi44ODAzNCAxMS4xNjI2IDIuNzUgMTEuMzcxOSAyLjc1Wk0xMS4zNzE5IDQuNjkyMDdMMTIuNjU2IDguMTY2MDNIMTAuMDg3N0wxMS4zNzE5IDQuNjkyMDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41NTI5MyAwLjk5OTk2OUM0Ljc1Mjk1IDAuOTk5OTY5IDQuOTMzNzIgMS4xMTkxNyA1LjAxMjUgMS4zMDMwMUw4LjAxMTA2IDguMjk5ODJDOC4xMTk4NCA4LjU1MzYzIDguMDAyMjYgOC44NDc1NyA3Ljc0ODQ0IDguOTU2MzVDNy40OTQ2MyA5LjA2NTEyIDcuMjAwNjkgOC45NDc1NCA3LjA5MTkxIDguNjkzNzNMNi4xMTYxMyA2LjQxNjg1SDIuOTg5NzNMMi4wMTM5NSA4LjY5MzczQzEuOTA1MTcgOC45NDc1NCAxLjYxMTIzIDkuMDY1MTIgMS4zNTc0MiA4Ljk1NjM1QzEuMTAzNiA4Ljg0NzU3IDAuOTg2MDIzIDguNTUzNjMgMS4wOTQ4IDguMjk5ODJMNC4wOTMzNiAxLjMwMzAxQzQuMTcyMTQgMS4xMTkxNyA0LjM1MjkxIDAuOTk5OTY5IDQuNTUyOTMgMC45OTk5NjlaTTQuNTUyOTMgMi43NjkyOUw1Ljc1MTg2IDUuNTY2ODVIMy4zNTRMNC41NTI5MyAyLjc2OTI5Wk0xMS4wNTYyIDkuMDAyMTRDMTEuMjYxNyA5LjAwMjE0IDExLjQ0NjMgOC44NzYzMyAxMS41MjE1IDguNjg1MDJMMTQuMjczMyAxLjY4Mjk5QzE0LjM3NDMgMS40MjU5OCAxNC4yNDc4IDEuMTM1NzUgMTMuOTkwOCAxLjAzNDc1QzEzLjczMzggMC45MzM3NDcgMTMuNDQzNiAxLjA2MDIxIDEzLjM0MjYgMS4zMTcyMkwxMS4wNTYyIDcuMTM1MTRMOC43Njk3MyAxLjMxNzIyQzguNjY4NzMgMS4wNjAyMSA4LjM3ODUgMC45MzM3NDcgOC4xMjE1IDEuMDM0NzVDNy44NjQ0OSAxLjEzNTc1IDcuNzM4MDIgMS40MjU5OCA3LjgzOTAyIDEuNjgyOTlMMTAuNTkwOCA4LjY4NTAyQzEwLjY2NiA4Ljg3NjMzIDEwLjg1MDYgOS4wMDIxNCAxMS4wNTYyIDkuMDAyMTRaTTE0Ljk1MzcgMTIuNDk5OUMxNC45NTM3IDEyLjYwNiAxNC45MTE1IDEyLjcwNzcgMTQuODM2NSAxMi43ODI4TDEyLjgzNjUgMTQuNzgyOEMxMi42ODAzIDE0LjkzOSAxMi40MjcxIDE0LjkzOSAxMi4yNzA4IDE0Ljc4MjhDMTIuMTE0NiAxNC42MjY1IDEyLjExNDYgMTQuMzczMyAxMi4yNzA4IDE0LjIxNzFMMTMuNTg4IDEyLjg5OTlIMS41MTkzN0wyLjgzNjUzIDE0LjIxNzFDMi45OTI3NCAxNC4zNzMzIDIuOTkyNzQgMTQuNjI2NSAyLjgzNjUzIDE0Ljc4MjhDMi42ODAzMiAxNC45MzkgMi40MjcwNSAxNC45MzkgMi4yNzA4NCAxNC43ODI4TDAuMjcwODQzIDEyLjc4MjhDMC4xOTU4MjggMTIuNzA3NyAwLjE1MzY4NyAxMi42MDYgMC4xNTM2ODcgMTIuNDk5OUMwLjE1MzY4NyAxMi4zOTM4IDAuMTk1ODI4IDEyLjI5MjEgMC4yNzA4NDMgMTIuMjE3MUwyLjI3MDg0IDEwLjIxNzFDMi40MjcwNSAxMC4wNjA5IDIuNjgwMzIgMTAuMDYwOSAyLjgzNjUzIDEwLjIxNzFDMi45OTI3NCAxMC4zNzMzIDIuOTkyNzQgMTAuNjI2NSAyLjgzNjUzIDEwLjc4MjhMMS41MTkzNyAxMi4wOTk5TDEzLjU4OCAxMi4wOTk5TDEyLjI3MDggMTAuNzgyOEMxMi4xMTQ2IDEwLjYyNjUgMTIuMTE0NiAxMC4zNzMzIDEyLjI3MDggMTAuMjE3MUMxMi40MjcxIDEwLjA2MDkgMTIuNjgwMyAxMC4wNjA5IDEyLjgzNjUgMTAuMjE3MUwxNC44MzY1IDEyLjIxNzFDMTQuOTExNSAxMi4yOTIxIDE0Ljk1MzcgMTIuMzkzOCAxNC45NTM3IDEyLjQ5OTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxmbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC42OTY2NiAwLjA0MDM1NEM4LjkwODU5IDAuMTMxMDM4IDkuMDMxMDUgMC4zNTQ4NTYgOC45OTMxNSAwLjU4MjIzNUw4LjA5MDE5IDYuMDAwMDFIMTIuNDk5OUMxMi42ODkzIDYuMDAwMDEgMTIuODYyNSA2LjEwNzAxIDEyLjk0NzIgNi4yNzY0QzEzLjAzMTggNi40NDU3OSAxMy4wMTM2IDYuNjQ4NSAxMi44OTk5IDYuOEw2Ljg5OTk3IDE0LjhDNi43NjE2NiAxNC45ODQ0IDYuNTE1MiAxNS4wNTAzIDYuMzAzMjcgMTQuOTU5NkM2LjA5MTM0IDE0Ljg2OSA1Ljk2ODg4IDE0LjY0NTEgNi4wMDY3OCAxNC40MTc4TDYuOTA5NzQgOC45OTk5OUgyLjQ5OTk5QzIuMzEwNjEgOC45OTk5OSAyLjEzNzQ3IDguODkyOTkgMi4wNTI3OCA4LjcyMzZDMS45NjgwOCA4LjU1NDIxIDEuOTg2MzYgOC4zNTE1IDIuMDk5OTkgOC4yTDguMDk5OTYgMC4yMDAwMzdDOC4yMzgyNyAwLjAxNTYyNTUgOC40ODQ3MyAtMC4wNTAzMzAxIDguNjk2NjYgMC4wNDAzNTRaTTMuNDk5OTkgOEg3LjQ5OTk2QzcuNjQ2OTQgOCA3Ljc4NjQ3IDguMDY0NjYgNy44ODE0NyA4LjE3NjgxQzcuOTc2NDcgOC4yODg5NSA4LjAxNzMyIDguNDM3MjIgNy45OTMxNiA4LjU4MjE5TDcuMzMwMjYgMTIuNTU5NkwxMS40OTk5IDdINy40OTk5NkM3LjM1Mjk5IDcgNy4yMTM0NiA2LjkzNTM0IDcuMTE4NDYgNi44MjMxOUM3LjAyMzQ2IDYuNzExMDUgNi45ODI2MSA2LjU2Mjc4IDcuMDA2NzcgNi40MTc4MUw3LjY2OTY3IDIuNDQwNDJMMy40OTk5OSA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNzgyMzMgMi4yMTcxM0MzLjcwNzMyIDIuMTQyMTIgMy42MDU1NyAyLjA5OTk4IDMuNDk5NDkgMi4wOTk5OEMzLjM5MzQgMi4wOTk5OCAzLjI5MTY2IDIuMTQyMTIgMy4yMTY2NCAyLjIxNzEzTDEuMjE2NjQgNC4yMTcxM0MxLjA2MDQ0IDQuMzczMzQgMS4wNjA0NCA0LjYyNjYxIDEuMjE2NjQgNC43ODI4MkMxLjM3Mjg1IDQuOTM5MDMgMS42MjYxMiA0LjkzOTAzIDEuNzgyMzMgNC43ODI4MkwzLjA5OTQ5IDMuNDY1NjZMMy4wOTk0OSAxMS41MzQzTDEuNzgyMzMgMTAuMjE3MUMxLjYyNjEyIDEwLjA2MDkgMS4zNzI4NSAxMC4wNjA5IDEuMjE2NjQgMTAuMjE3MUMxLjA2MDQzIDEwLjM3MzMgMS4wNjA0MyAxMC42MjY2IDEuMjE2NjQgMTAuNzgyOEwzLjIxNjY0IDEyLjc4MjhDMy4yOTE2NiAxMi44NTc4IDMuMzkzNCAxMi45IDMuNDk5NDkgMTIuOUMzLjYwNTU3IDEyLjkgMy43MDczMSAxMi44NTc4IDMuNzgyMzMgMTIuNzgyOEw1Ljc4MjMzIDEwLjc4MjhDNS45Mzg1NCAxMC42MjY2IDUuOTM4NTQgMTAuMzczMyA1Ljc4MjMzIDEwLjIxNzFDNS42MjYxMiAxMC4wNjA5IDUuMzcyODUgMTAuMDYwOSA1LjIxNjY0IDEwLjIxNzFMMy44OTk0OSAxMS41MzQzTDMuODk5NDkgMy40NjU2Nkw1LjIxNjY0IDQuNzgyODJDNS4zNzI4NSA0LjkzOTAzIDUuNjI2MTIgNC45MzkwMyA1Ljc4MjMzIDQuNzgyODJDNS45Mzg1NCA0LjYyNjYxIDUuOTM4NTQgNC4zNzMzNCA1Ljc4MjMzIDQuMjE3MTNMMy43ODIzMyAyLjIxNzEzWk04LjQ5OTk4IDMuOTk5OTdDOC4yMjM4MyAzLjk5OTk3IDcuOTk5OTggNC4yMjM4MiA3Ljk5OTk4IDQuNDk5OTdDNy45OTk5OCA0Ljc3NjExIDguMjIzODMgNC45OTk5NyA4LjQ5OTk4IDQuOTk5OTdIMTQuNUMxNC43NzYxIDQuOTk5OTcgMTUgNC43NzYxMSAxNSA0LjQ5OTk3QzE1IDQuMjIzODIgMTQuNzc2MSAzLjk5OTk3IDE0LjUgMy45OTk5N0g4LjQ5OTk4Wk03Ljk5OTk4IDcuNDk5OTdDNy45OTk5OCA3LjIyMzgyIDguMjIzODMgNi45OTk5NyA4LjQ5OTk4IDYuOTk5OTdIMTQuNUMxNC43NzYxIDYuOTk5OTcgMTUgNy4yMjM4MiAxNSA3LjQ5OTk3QzE1IDcuNzc2MTEgMTQuNzc2MSA3Ljk5OTk3IDE0LjUgNy45OTk5N0g4LjQ5OTk4QzguMjIzODMgNy45OTk5NyA3Ljk5OTk4IDcuNzc2MTEgNy45OTk5OCA3LjQ5OTk3Wk04LjQ5OTk4IDkuOTk5OTdDOC4yMjM4MyA5Ljk5OTk3IDcuOTk5OTggMTAuMjIzOCA3Ljk5OTk4IDEwLjVDNy45OTk5OCAxMC43NzYxIDguMjIzODMgMTEgOC40OTk5OCAxMUgxNC41QzE0Ljc3NjEgMTEgMTUgMTAuNzc2MSAxNSAxMC41QzE1IDEwLjIyMzggMTQuNzc2MSA5Ljk5OTk3IDE0LjUgOS45OTk5N0g4LjQ5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNjI0NzEgNC4wMDAwMUw0LjU2NDAyIDQuMDAwMDFDNC4wNDEzNCAzLjk5OTkzIDMuNzA2ODcgMy45OTk4OCAzLjQxODIgNC4wNTVDMi4yMzc5IDQuMjgwMzkgMS4yOTg0NiA1LjE3MDUzIDEuMDU4MTUgNi4zMzAzNUMwLjk5OTUzOCA2LjYxMzIxIDAuOTk5NjA0IDYuOTM5OTggMC45OTk3MDMgNy40MzY4OUwwLjk5OTcxMSA3LjUwMDAxTDAuOTk5NzAzIDcuNTYzMTNDMC45OTk2MDQgOC4wNjAwNCAwLjk5OTUzOCA4LjM4NjgxIDEuMDU4MTUgOC42Njk2N0MxLjI5ODQ2IDkuODI5NSAyLjIzNzkgMTAuNzE5NiAzLjQxODIgMTAuOTQ1QzMuNzA2ODggMTEuMDAwMSA0LjA0MTM1IDExLjAwMDEgNC41NjQwMyAxMUw0LjYyNDcxIDExSDUuNDk5NzFDNS43NzU4NSAxMSA1Ljk5OTcxIDEwLjc3NjIgNS45OTk3MSAxMC41QzUuOTk5NzEgMTAuMjIzOSA1Ljc3NTg1IDEwIDUuNDk5NzEgMTBINC42MjQ3MUM0LjAyMDg0IDEwIDMuNzg5MDcgOS45OTc3NyAzLjYwNTc3IDkuOTYyNzdDMi44MDI2MiA5LjgwOTQgMi4xOTE1NyA5LjIxMTA4IDIuMDM3MzUgOC40NjY3OEMyLjAwMjMzIDguMjk3NzggMS45OTk3MSA4LjA4MjUxIDEuOTk5NzEgNy41MDAwMUMxLjk5OTcxIDYuOTE3NTIgMi4wMDIzMyA2LjcwMjI1IDIuMDM3MzUgNi41MzMyNEMyLjE5MTU3IDUuNzg4OTUgMi44MDI2MiA1LjE5MDYyIDMuNjA1NzcgNS4wMzcyNUMzLjc4OTA3IDUuMDAyMjUgNC4wMjA4NCA1LjAwMDAxIDQuNjI0NzEgNS4wMDAwMUg1LjQ5OTcxQzUuNzc1ODUgNS4wMDAwMSA1Ljk5OTcxIDQuNzc2MTUgNS45OTk3MSA0LjUwMDAxQzUuOTk5NzEgNC4yMjM4NyA1Ljc3NTg1IDQuMDAwMDEgNS40OTk3MSA0LjAwMDAxSDQuNjI0NzFaTTEwLjM3NDcgNS4wMDAwMUMxMC45Nzg2IDUuMDAwMDEgMTEuMjEwNCA1LjAwMjI1IDExLjM5MzcgNS4wMzcyNUMxMi4xOTY4IDUuMTkwNjIgMTIuODA3OSA1Ljc4ODk1IDEyLjk2MjEgNi41MzMyNEMxMi45OTcxIDYuNzAyMjUgMTIuOTk5NyA2LjkxNzUyIDEyLjk5OTcgNy41MDAwMUMxMi45OTk3IDguMDgyNTEgMTIuOTk3MSA4LjI5Nzc4IDEyLjk2MjEgOC40NjY3OEMxMi44MDc5IDkuMjExMDggMTIuMTk2OCA5LjgwOTQgMTEuMzkzNyA5Ljk2Mjc3QzExLjIxMDQgOS45OTc3NyAxMC45Nzg2IDEwIDEwLjM3NDcgMTBIOS40OTk3MUM5LjIyMzU3IDEwIDguOTk5NzEgMTAuMjIzOSA4Ljk5OTcxIDEwLjVDOC45OTk3MSAxMC43NzYyIDkuMjIzNTcgMTEgOS40OTk3MSAxMUgxMC4zNzQ3TDEwLjQzNTQgMTFDMTAuOTU4MSAxMS4wMDAxIDExLjI5MjUgMTEuMDAwMSAxMS41ODEyIDEwLjk0NUMxMi43NjE1IDEwLjcxOTYgMTMuNzAxIDkuODI5NSAxMy45NDEzIDguNjY5NjdDMTMuOTk5OSA4LjM4NjgxIDEzLjk5OTggOC4wNjAwNSAxMy45OTk3IDcuNTYzMTRMMTMuOTk5NyA3LjUwMDAxTDEzLjk5OTcgNy40MzY4OEMxMy45OTk4IDYuOTM5OTggMTMuOTk5OSA2LjYxMzIxIDEzLjk0MTMgNi4zMzAzNUMxMy43MDEgNS4xNzA1MyAxMi43NjE1IDQuMjgwMzkgMTEuNTgxMiA0LjA1NUMxMS4yOTI1IDMuOTk5ODggMTAuOTU4MSAzLjk5OTkzIDEwLjQzNTQgNC4wMDAwMUwxMC4zNzQ3IDQuMDAwMDFIOS40OTk3MUM5LjIyMzU3IDQuMDAwMDEgOC45OTk3MSA0LjIyMzg3IDguOTk5NzEgNC41MDAwMUM4Ljk5OTcxIDQuNzc2MTUgOS4yMjM1NyA1LjAwMDAxIDkuNDk5NzEgNS4wMDAwMUgxMC4zNzQ3Wk01LjAwMDM4IDdDNC43MjQyNCA3IDQuNTAwMzggNy4yMjM4NiA0LjUwMDM4IDcuNUM0LjUwMDM4IDcuNzc2MTQgNC43MjQyNCA4IDUuMDAwMzggOEgxMC4wMDA0QzEwLjI3NjUgOCAxMC41MDA0IDcuNzc2MTQgMTAuNTAwNCA3LjVDMTAuNTAwNCA3LjIyMzg2IDEwLjI3NjUgNyAxMC4wMDA0IDdINS4wMDAzOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGhuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04LjUxMTk0IDMuMDA1NDFDOS4xODgyOSAyLjU0NTk0IDEwLjA0MzUgMi41MzY5NCAxMC42Nzg4IDIuOTU0MTlDMTAuODIzMSAzLjA0ODkzIDEwLjk3NzEgMy4xOTkzIDExLjM4OSAzLjYxMTE5QzExLjgwMDkgNC4wMjMwNyAxMS45NTEzIDQuMTc3MTQgMTIuMDQ2IDQuMzIxNDFDMTIuNDYzMyA0Ljk1Njc1IDEyLjQ1NDMgNS44MTE5MiAxMS45OTQ4IDYuNDg4MjdDMTEuODg5OSA2LjY0MjY0IDExLjcyNzYgNi44MDgxMSAxMS4zMDA2IDcuMjM1MTFMMTAuNjgxOSA3Ljg1MzgzQzEwLjQ4NjcgOC4wNDkwOSAxMC40ODY3IDguMzY1NjcgMTAuNjgxOSA4LjU2MDkzQzEwLjg3NzIgOC43NTYyIDExLjE5MzggOC43NTYyIDExLjM4OSA4LjU2MDkzTDEyLjAwNzcgNy45NDIyMUwxMi4wNTA3IDcuODk5MjlDMTIuNDIwMyA3LjUyOTc2IDEyLjY1NjggNy4yOTMzIDEyLjgyMiA3LjA1MDJDMTMuNDk3MiA2LjA1NjIzIDEzLjUzMjEgNC43NjI1MiAxMi44ODE5IDMuNzcyNDhDMTIuNzIzMyAzLjUzMTAyIDEyLjQ5MjIgMy4zMDAwMSAxMi4xNDA4IDIuOTQ4NzFMMTIuMDk2MSAyLjkwNDA4TDEyLjA1MTUgMi44NTk0MkMxMS43MDAyIDIuNTA4IDExLjQ2OTIgMi4yNzY4OSAxMS4yMjc3IDIuMTE4MzJDMTAuMjM3NyAxLjQ2ODEzIDguOTQzOTggMS41MDI5OSA3Ljk1MDAxIDIuMTc4MjJDNy43MDY5MSAyLjM0MzM2IDcuNDcwNDQgMi41Nzk5MSA3LjEwMDkgMi45NDk1NUw3LjA1OCAyLjk5MjQ3TDYuNDM5MjggMy42MTExOUM2LjI0NDAxIDMuODA2NDUgNi4yNDQwMSA0LjEyMzAzIDYuNDM5MjggNC4zMTgyOUM2LjYzNDU0IDQuNTEzNTUgNi45NTExMiA0LjUxMzU1IDcuMTQ2MzggNC4zMTgyOUw3Ljc2NTEgMy42OTk1N0M4LjE5MjEgMy4yNzI1NyA4LjM1NzU3IDMuMTEwMjcgOC41MTE5NCAzLjAwNTQxWk00LjMxNzk2IDcuMTQ2NzJDNC41MTMyMiA2Ljk1MTQ2IDQuNTEzMjIgNi42MzQ4NyA0LjMxNzk2IDYuNDM5NjFDNC4xMjI2OSA2LjI0NDM1IDMuODA2MTEgNi4yNDQzNSAzLjYxMDg1IDYuNDM5NjFMMi45OTIxMyA3LjA1ODMzTDIuOTQ5MjIgNy4xMDEyNEMyLjU3OTU3IDcuNDcwNzcgMi4zNDMwMyA3LjcwNzI0IDIuMTc3ODggNy45NTAzNUMxLjUwMjY1IDguOTQ0MzIgMS40Njc4IDEwLjIzOCAyLjExNzk5IDExLjIyODFDMi4yNzY1NiAxMS40Njk1IDIuNTA3NjYgMTEuNzAwNSAyLjg1OTEgMTIuMDUxOEwyLjkwMzc0IDEyLjA5NjVMMi45NDgzNyAxMi4xNDExQzMuMjk5NjcgMTIuNDkyNSAzLjUzMDY4IDEyLjcyMzcgMy43NzIxNCAxMi44ODIyQzQuNzYyMTkgMTMuNTMyNCA2LjA1NTg5IDEzLjQ5NzYgNy4wNDk4NiAxMi44MjIzQzcuMjkyOTYgMTIuNjU3MiA3LjUyOTQzIDEyLjQyMDYgNy44OTg5NiAxMi4wNTFMNy44OTg5NyAxMi4wNTFMNy45NDE4OCAxMi4wMDgxTDguNTYwNiAxMS4zODk0QzguNzU1ODYgMTEuMTk0MSA4Ljc1NTg2IDEwLjg3NzUgOC41NjA2IDEwLjY4MjNDOC4zNjUzMyAxMC40ODcgOC4wNDg3NSAxMC40ODcgNy44NTM0OSAxMC42ODIzTDcuMjM0NzcgMTEuMzAxQzYuODA3NzcgMTEuNzI4IDYuNjQyMyAxMS44OTAzIDYuNDg3OTQgMTEuOTk1MUM1LjgxMTU4IDEyLjQ1NDYgNC45NTY0MiAxMi40NjM2IDQuMzIxMDcgMTIuMDQ2NEM0LjE3NjgxIDExLjk1MTYgNC4wMjI3NCAxMS44MDEyIDMuNjEwODUgMTEuMzg5NEMzLjE5ODk2IDEwLjk3NzUgMy4wNDg2IDEwLjgyMzQgMi45NTM4NSAxMC42NzkxQzIuNTM2NjEgMTAuMDQzOCAyLjU0NTYxIDkuMTg4NjMgMy4wMDUwNyA4LjUxMjI3QzMuMTA5OTMgOC4zNTc5MSAzLjI3MjI0IDguMTkyNDQgMy42OTkyNCA3Ljc2NTQ0TDQuMzE3OTYgNy4xNDY3MlpNOS42MjE3MiA2LjA4NTU4QzkuODE2OTggNS44OTAzMiA5LjgxNjk4IDUuNTczNzMgOS42MjE3MiA1LjM3ODQ3QzkuNDI2NDYgNS4xODMyMSA5LjEwOTg4IDUuMTgzMjEgOC45MTQ2MSA1LjM3ODQ3TDUuMzc5MDggOC45MTQwMUM1LjE4MzgyIDkuMTA5MjcgNS4xODM4MiA5LjQyNTg1IDUuMzc5MDggOS42MjExMUM1LjU3NDM0IDkuODE2MzcgNS44OTA5MiA5LjgxNjM3IDYuMDg2MTkgOS42MjExMUw5LjYyMTcyIDYuMDg1NThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxnbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMzUzNiAyLjM1MzU1QzEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDEuODQxNzEgMTMuMzUzNiAxLjY0NjQ1QzEzLjE1ODMgMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTIuNjQ2NCAxLjY0NjQ1TDEuNjQ2NDUgMTIuNjQ2NEMxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMy4xNTgzIDEuNjQ2NDUgMTMuMzUzNkMxLjg0MTcxIDEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDIuMzUzNTUgMTMuMzUzNkwxMy4zNTM2IDIuMzUzNTVaTTIuMDM3MzUgOC40NjY3OEMyLjE3Mzk4IDkuMTI2MTkgMi42NjkxOCA5LjY3MTAzIDMuMzM4ODYgOS44OTMzOEwyLjU3ODMzIDEwLjY1MzlDMS44MDg0MyAxMC4yNTM0IDEuMjM3ODQgOS41MzY5MyAxLjA1ODE1IDguNjY5NjdDMC45OTk1MzggOC4zODY4MSAwLjk5OTYwNCA4LjA2MDA0IDAuOTk5NzAzIDcuNTYzMTNMMC45OTk3MTEgNy41MDAwMUwwLjk5OTcwMyA3LjQzNjg5QzAuOTk5NjA0IDYuOTM5OTggMC45OTk1MzggNi42MTMyMSAxLjA1ODE1IDYuMzMwMzVDMS4yOTg0NiA1LjE3MDUzIDIuMjM3OSA0LjI4MDM5IDMuNDE4MiA0LjA1NUMzLjcwNjg3IDMuOTk5ODggNC4wNDEzNCAzLjk5OTkzIDQuNTY0MDIgNC4wMDAwMUw0LjYyNDcxIDQuMDAwMDFINS40OTk3MUM1Ljc3NTg1IDQuMDAwMDEgNS45OTk3MSA0LjIyMzg3IDUuOTk5NzEgNC41MDAwMUM1Ljk5OTcxIDQuNzc2MTUgNS43NzU4NSA1LjAwMDAxIDUuNDk5NzEgNS4wMDAwMUg0LjYyNDcxQzQuMDIwODQgNS4wMDAwMSAzLjc4OTA3IDUuMDAyMjUgMy42MDU3NyA1LjAzNzI1QzIuODAyNjIgNS4xOTA2MiAyLjE5MTU3IDUuNzg4OTUgMi4wMzczNSA2LjUzMzI0QzIuMDAyMzMgNi43MDIyNSAxLjk5OTcxIDYuOTE3NTIgMS45OTk3MSA3LjUwMDAxQzEuOTk5NzEgOC4wODI1MSAyLjAwMjMzIDguMjk3NzggMi4wMzczNSA4LjQ2Njc4Wk0xMi45NjIxIDYuNTMzMjRDMTIuODI1NSA1Ljg3Mzk3IDEyLjMzMDQgNS4zMjkyMiAxMS42NjEgNS4xMDY3OUwxMi40MjE1IDQuMzQ2MzFDMTMuMTkxMiA0Ljc0Njg2IDEzLjc2MTYgNS40NjMyMyAxMy45NDEzIDYuMzMwMzVDMTMuOTk5OSA2LjYxMzIxIDEzLjk5OTggNi45Mzk5OCAxMy45OTk3IDcuNDM2ODhMMTMuOTk5NyA3LjUwMDAxTDEzLjk5OTcgNy41NjMxNEMxMy45OTk4IDguMDYwMDUgMTMuOTk5OSA4LjM4NjgxIDEzLjk0MTMgOC42Njk2N0MxMy43MDEgOS44Mjk1IDEyLjc2MTUgMTAuNzE5NiAxMS41ODEyIDEwLjk0NUMxMS4yOTI1IDExLjAwMDEgMTAuOTU4MSAxMS4wMDAxIDEwLjQzNTQgMTFMMTAuMzc0NyAxMUg5LjQ5OTcxQzkuMjIzNTcgMTEgOC45OTk3MSAxMC43NzYyIDguOTk5NzEgMTAuNUM4Ljk5OTcxIDEwLjIyMzkgOS4yMjM1NyAxMCA5LjQ5OTcxIDEwSDEwLjM3NDdDMTAuOTc4NiAxMCAxMS4yMTA0IDkuOTk3NzcgMTEuMzkzNyA5Ljk2Mjc3QzEyLjE5NjggOS44MDk0IDEyLjgwNzkgOS4yMTEwOCAxMi45NjIxIDguNDY2NzhDMTIuOTk3MSA4LjI5Nzc4IDEyLjk5OTcgOC4wODI1MSAxMi45OTk3IDcuNTAwMDFDMTIuOTk5NyA2LjkxNzUyIDEyLjk5NzEgNi43MDIyNSAxMi45NjIxIDYuNTMzMjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx2bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41MDAyMSAwQzQuNzc2MzUgMCA1LjAwMDIgMC4yMjM4NTMgNS4wMDAyIDAuNDk5OTlWMi40OTk5NUM1LjAwMDIgMi43NzYwOSA0Ljc3NjM1IDIuOTk5OTQgNC41MDAyMSAyLjk5OTk0QzQuMjI0MDggMi45OTk5NCA0LjAwMDIyIDIuNzc2MDkgNC4wMDAyMiAyLjQ5OTk1VjAuNDk5OTlDNC4wMDAyMiAwLjIyMzg1MyA0LjIyNDA4IDAgNC41MDAyMSAwWk0wLjY0NjQ1MSAwLjY0NjQ3QzAuODQxNzEgMC40NTEyMTIgMS4xNTgyOSAwLjQ1MTIxMiAxLjM1MzU0IDAuNjQ2NDdMMi44NTM1MSAyLjE0NjQ0QzMuMDQ4NzcgMi4zNDE3IDMuMDQ4NzcgMi42NTgyNyAyLjg1MzUxIDIuODUzNTNDMi42NTgyNiAzLjA0ODc5IDIuMzQxNjggMy4wNDg3OSAyLjE0NjQyIDIuODUzNTNMMC42NDY0NTIgMS4zNTM1NkMwLjQ1MTE5MyAxLjE1ODMgMC40NTExOTMgMC44NDE3MjggMC42NDY0NTEgMC42NDY0N1pNMC4wMDAzMDUxNyA0LjQ5OTkxQzAuMDAwMzA1MTcgNC4yMjM3NyAwLjIyNDE1OCAzLjk5OTkyIDAuNTAwMjk1IDMuOTk5OTJIMi41MDAyNUMyLjc3NjM5IDMuOTk5OTIgMy4wMDAyNCA0LjIyMzc3IDMuMDAwMjQgNC40OTk5MUMzLjAwMDI0IDQuNzc2MDUgMi43NzYzOSA0Ljk5OTkgMi41MDAyNSA0Ljk5OTlIMC41MDAyOTVDMC4yMjQxNTggNC45OTk5IDAuMDAwMzA1MTcgNC43NzYwNSAwLjAwMDMwNTE3IDQuNDk5OTFaTTEyLjAwMDEgMTAuNDk5OEMxMi4wMDAxIDEwLjIyMzYgMTIuMjIzOSA5Ljk5OTggMTIuNTAwMSA5Ljk5OThIMTQuNUMxNC43NzYxIDkuOTk5OCAxNSAxMC4yMjM2IDE1IDEwLjQ5OThDMTUgMTAuNzc1OSAxNC43NzYxIDEwLjk5OTggMTQuNSAxMC45OTk4SDEyLjUwMDFDMTIuMjIzOSAxMC45OTk4IDEyLjAwMDEgMTAuNzc1OSAxMi4wMDAxIDEwLjQ5OThaTTEwLjUwMDEgMTEuOTk5OEMxMC43NzYyIDExLjk5OTggMTEuMDAwMSAxMi4yMjM2IDExLjAwMDEgMTIuNDk5N1YxNC40OTk3QzExLjAwMDEgMTQuNzc1OCAxMC43NzYyIDE0Ljk5OTcgMTAuNTAwMSAxNC45OTk3QzEwLjIyNCAxNC45OTk3IDEwLjAwMDEgMTQuNzc1OCAxMC4wMDAxIDE0LjQ5OTdWMTIuNDk5N0MxMC4wMDAxIDEyLjIyMzYgMTAuMjI0IDExLjk5OTggMTAuNTAwMSAxMS45OTk4Wk0xMi4xNDYyIDEyLjE0NjJDMTIuMzQxNSAxMS45NTEgMTIuNjU4IDExLjk1MSAxMi44NTMzIDEyLjE0NjJMMTQuMzUzMyAxMy42NDYyQzE0LjU0ODUgMTMuODQxNSAxNC41NDg1IDE0LjE1OCAxNC4zNTMzIDE0LjM1MzNDMTQuMTU4IDE0LjU0ODUgMTMuODQxNCAxNC41NDg1IDEzLjY0NjIgMTQuMzUzM0wxMi4xNDYyIDEyLjg1MzNDMTEuOTUxIDEyLjY1ODEgMTEuOTUxIDEyLjM0MTUgMTIuMTQ2MiAxMi4xNDYyWk03Ljc2NDc4IDMuNjk5MzhDOC4xOTE3NyAzLjI3MjM4IDguMzU3MjQgMy4xMTAwOCA4LjUxMTYgMy4wMDUyMkM5LjE4Nzk0IDIuNTQ1NzcgMTAuMDQzMSAyLjUzNjc3IDEwLjY3ODQgMi45NTQwMUMxMC44MjI3IDMuMDQ4NzUgMTAuOTc2NyAzLjE5OTExIDExLjM4ODYgMy42MTA5OUMxMS44MDA1IDQuMDIyODcgMTEuOTUwOSA0LjE3Njk0IDEyLjA0NTYgNC4zMjEyQzEyLjQ2MjggNC45NTY1MyAxMi40NTM5IDUuODExNjggMTEuOTk0NCA2LjQ4ODAyQzExLjg4OTUgNi42NDIzOCAxMS43MjcyIDYuODA3ODUgMTEuMzAwMiA3LjIzNDg0TDEwLjY4MTUgNy44NTM1NEMxMC40ODYzIDguMDQ4OCAxMC40ODYzIDguMzY1MzggMTAuNjgxNSA4LjU2MDY0QzEwLjg3NjggOC43NTU4OSAxMS4xOTM0IDguNzU1ODkgMTEuMzg4NiA4LjU2MDY0TDEyLjAwNzMgNy45NDE5M0wxMi4wNTAyIDcuODk5MDNDMTIuNDE5OSA3LjUyOTUgMTIuNjU2NCA3LjI5MzAzIDEyLjgyMTYgNy4wNDk5M0MxMy40OTY4IDYuMDU1OTggMTMuNTMxNiA0Ljc2MjMgMTIuODgxNSAzLjc3MjI4QzEyLjcyMjkgMy41MzA4MyAxMi40OTE4IDMuMjk5ODIgMTIuMTQwNCAyLjk0ODUzTDEyLjA5NTcgMi45MDM5TDEyLjA1MTEgMi44NTkyNUMxMS42OTk4IDIuNTA3ODIgMTEuNDY4OCAyLjI3NjcyIDExLjIyNzMgMi4xMTgxNkMxMC4yMzczIDEuNDY3OTggOC45NDM2NCAxLjUwMjg0IDcuOTQ5NjggMi4xNzgwNUM3LjcwNjU5IDIuMzQzMTkgNy40NzAxMiAyLjU3OTczIDcuMTAwNiAyLjk0OTM2TDcuMTAwNiAyLjk0OTM3TDcuMDU3NjkgMi45OTIyOEw2LjQzODk4IDMuNjEwOTlDNi4yNDM3MiAzLjgwNjI1IDYuMjQzNzIgNC4xMjI4MiA2LjQzODk4IDQuMzE4MDhDNi42MzQyNCA0LjUxMzM0IDYuOTUwODEgNC41MTMzNCA3LjE0NjA3IDQuMzE4MDhMNy43NjQ3OCAzLjY5OTM4Wk0yLjk5MTkxIDcuMDU4MDdMMi45NDg5OSA3LjEwMDk3QzIuNTc5MzUgNy40NzA1IDIuMzQyODIgNy43MDY5NyAyLjE3NzY3IDcuOTUwMDZDMS41MDI0NiA4Ljk0NDAxIDEuNDY3NiAxMC4yMzc3IDIuMTE3NzggMTEuMjI3N0MyLjI3NjM0IDExLjQ2OTIgMi41MDc0NCAxMS43MDAyIDIuODU4ODYgMTIuMDUxNUwyLjg1ODg4IDEyLjA1MTVMMi45MDM1MiAxMi4wOTYxTDIuOTQ4MTUgMTIuMTQwN0wyLjk0ODE1IDEyLjE0MDdMMi45NDgxNyAxMi4xNDA4QzMuMjk5NDUgMTIuNDkyMiAzLjUzMDQ1IDEyLjcyMzMgMy43NzE5IDEyLjg4MThDNC43NjE5MyAxMy41MzIgNi4wNTU2IDEzLjQ5NzIgNy4wNDk1NiAxMi44MjE5QzcuMjkyNjUgMTIuNjU2OCA3LjUyOTEyIDEyLjQyMDMgNy44OTg2NSAxMi4wNTA2TDcuOTQxNTUgMTIuMDA3N0w4LjU2MDI2IDExLjM4OUM4Ljc1NTUyIDExLjE5MzcgOC43NTU1MiAxMC44NzcyIDguNTYwMjYgMTAuNjgxOUM4LjM2NSAxMC40ODY3IDguMDQ4NDIgMTAuNDg2NyA3Ljg1MzE3IDEwLjY4MTlMNy4yMzQ0NiAxMS4zMDA2QzYuODA3NDcgMTEuNzI3NiA2LjY0MiAxMS44ODk5IDYuNDg3NjQgMTEuOTk0OEM1LjgxMTMgMTIuNDU0MiA0Ljk1NjE1IDEyLjQ2MzIgNC4zMjA4MiAxMi4wNDZDNC4xNzY1NiAxMS45NTEyIDQuMDIyNDkgMTEuODAwOSAzLjYxMDYxIDExLjM4OUMzLjE5ODczIDEwLjk3NzEgMy4wNDgzNyAxMC44MjMxIDIuOTUzNjMgMTAuNjc4OEMyLjUzNjM5IDEwLjA0MzUgMi41NDUzOSA5LjE4ODMyIDMuMDA0ODQgOC41MTE5OEMzLjEwOTcxIDguMzU3NjEgMy4yNzIwMSA4LjE5MjE1IDMuNjk5IDcuNzY1MTZMNC4zMTc3IDcuMTQ2NDVDNC41MTI5NiA2Ljk1MTE5IDQuNTEyOTYgNi42MzQ2MiA0LjMxNzcgNi40MzkzNkM0LjEyMjQ1IDYuMjQ0MSAzLjgwNTg3IDYuMjQ0MSAzLjYxMDYxIDYuNDM5MzZMMi45OTE5MSA3LjA1ODA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNTY0MjcgMy45OTk4OEM0LjU4NDIyIDMuOTk5ODkgNC42MDQ0NSAzLjk5OTg5IDQuNjI0OTYgMy45OTk4OUg1LjQ5OTk2QzUuNzc2MSAzLjk5OTg5IDUuOTk5OTYgNC4yMjM3NSA1Ljk5OTk2IDQuNDk5ODlDNS45OTk5NiA0Ljc3NjAzIDUuNzc2MSA0Ljk5OTg5IDUuNDk5OTYgNC45OTk4OUg0LjYyNDk2QzQuMDIxMDggNC45OTk4OSAzLjc4OTMyIDUuMDAyMTMgMy42MDYwMSA1LjAzNzEzQzIuODAyODcgNS4xOTA1IDIuMTkxODEgNS43ODg4MyAyLjAzNzU5IDYuNTMzMTJDMi4wMDI1NyA2LjcwMjEyIDEuOTk5OTYgNi45MTczOSAxLjk5OTk2IDcuNDk5ODlDMS45OTk5NiA4LjA4MjM5IDIuMDAyNTcgOC4yOTc2NiAyLjAzNzU5IDguNDY2NjZDMi4xOTE4MSA5LjIxMDk1IDIuODAyODcgOS44MDkyOCAzLjYwNjAxIDkuOTYyNjVDMy43ODkzMiA5Ljk5NzY1IDQuMDIxMDggOS45OTk4OSA0LjYyNDk2IDkuOTk5ODlINS40OTk5NkM1Ljc3NjEgOS45OTk4OSA1Ljk5OTk2IDEwLjIyMzcgNS45OTk5NiAxMC40OTk5QzUuOTk5OTYgMTAuNzc2IDUuNzc2MSAxMC45OTk5IDUuNDk5OTYgMTAuOTk5OUg0LjYyNDk2QzQuNjA0NDUgMTAuOTk5OSA0LjU4NDIyIDEwLjk5OTkgNC41NjQyNyAxMC45OTk5QzQuMDQxNTkgMTEgMy43MDcxMiAxMSAzLjQxODQ1IDEwLjk0NDlDMi4yMzgxNCAxMC43MTk1IDEuMjk4NzEgOS44MjkzNyAxLjA1ODM5IDguNjY5NTVDMC45OTk3ODIgOC4zODY2OSAwLjk5OTg0OCA4LjA1OTkyIDAuOTk5OTQ3IDcuNTYzMDFDMC45OTk5NTEgNy41NDIyNyAwLjk5OTk1NSA3LjUyMTIzIDAuOTk5OTU1IDcuNDk5ODlDMC45OTk5NTUgNy40Nzg1NSAwLjk5OTk1MSA3LjQ1NzUxIDAuOTk5OTQ3IDcuNDM2NzdDMC45OTk4NDggNi45Mzk4NiAwLjk5OTc4MiA2LjYxMzA5IDEuMDU4MzkgNi4zMzAyM0MxLjI5ODcxIDUuMTcwNDEgMi4yMzgxNCA0LjI4MDI3IDMuNDE4NDUgNC4wNTQ4OEMzLjcwNzEyIDMuOTk5NzYgNC4wNDE1OSAzLjk5OTgxIDQuNTY0MjcgMy45OTk4OFpNMTEuMzkzOSA1LjAzNzEzQzExLjIxMDYgNS4wMDIxMyAxMC45Nzg4IDQuOTk5ODkgMTAuMzc1IDQuOTk5ODlIOS40OTk5NkM5LjIyMzgxIDQuOTk5ODkgOC45OTk5NiA0Ljc3NjAzIDguOTk5OTYgNC40OTk4OUM4Ljk5OTk2IDQuMjIzNzUgOS4yMjM4MSAzLjk5OTg5IDkuNDk5OTYgMy45OTk4OUgxMC4zNzVDMTAuMzk1NSAzLjk5OTg5IDEwLjQxNTcgMy45OTk4OSAxMC40MzU2IDMuOTk5ODhDMTAuOTU4MyAzLjk5OTgxIDExLjI5MjggMy45OTk3NiAxMS41ODE1IDQuMDU0ODhDMTIuNzYxOCA0LjI4MDI3IDEzLjcwMTIgNS4xNzA0MSAxMy45NDE1IDYuMzMwMjNDMTQuMDAwMSA2LjYxMzA5IDE0LjAwMDEgNi45Mzk4NSAxNCA3LjQzNjc2QzE0IDcuNDU3NSAxNCA3LjQ3ODU0IDE0IDcuNDk5ODlDMTQgNy41MjEyNCAxNCA3LjU0MjI4IDE0IDcuNTYzMDJDMTQuMDAwMSA4LjA1OTkyIDE0LjAwMDEgOC4zODY2OSAxMy45NDE1IDguNjY5NTVDMTMuNzAxMiA5LjgyOTM3IDEyLjc2MTggMTAuNzE5NSAxMS41ODE1IDEwLjk0NDlDMTEuMjkyOCAxMSAxMC45NTgzIDExIDEwLjQzNTYgMTAuOTk5OUMxMC40MTU3IDEwLjk5OTkgMTAuMzk1NSAxMC45OTk5IDEwLjM3NSAxMC45OTk5SDkuNDk5OTZDOS4yMjM4MSAxMC45OTk5IDguOTk5OTYgMTAuNzc2IDguOTk5OTYgMTAuNDk5OUM4Ljk5OTk2IDEwLjIyMzcgOS4yMjM4MSA5Ljk5OTg5IDkuNDk5OTYgOS45OTk4OUgxMC4zNzVDMTAuOTc4OCA5Ljk5OTg5IDExLjIxMDYgOS45OTc2NSAxMS4zOTM5IDkuOTYyNjVDMTIuMTk3IDkuODA5MjggMTIuODA4MSA5LjIxMDk1IDEyLjk2MjMgOC40NjY2NkMxMi45OTczIDguMjk3NjYgMTMgOC4wODIzOSAxMyA3LjQ5OTg5QzEzIDYuOTE3MzkgMTIuOTk3MyA2LjcwMjEyIDEyLjk2MjMgNi41MzMxMkMxMi44MDgxIDUuNzg4ODMgMTIuMTk3IDUuMTkwNSAxMS4zOTM5IDUuMDM3MTNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxDbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuNjc4OCAyLjk1NDE5QzEwLjA0MzUgMi41MzY5NCA5LjE4ODI5IDIuNTQ1OTQgOC41MTE5NCAzLjAwNTQxQzguMzU3NTcgMy4xMTAyNyA4LjE5MjEgMy4yNzI1NyA3Ljc2NTEgMy42OTk1N0w3LjE0NjM4IDQuMzE4MjlDNi45NTExMiA0LjUxMzU1IDYuNjM0NTQgNC41MTM1NSA2LjQzOTI4IDQuMzE4MjlDNi4yNDQwMSA0LjEyMzAzIDYuMjQ0MDEgMy44MDY0NSA2LjQzOTI4IDMuNjExMTlMNy4wNTggMi45OTI0N0M3LjA3MjUgMi45Nzc5NyA3LjA4Njc5IDIuOTYzNjYgNy4xMDA5IDIuOTQ5NTVDNy40NzA0NCAyLjU3OTkxIDcuNzA2OTEgMi4zNDMzNiA3Ljk1MDAxIDIuMTc4MjJDOC45NDM5OCAxLjUwMjk5IDEwLjIzNzcgMS40NjgxMyAxMS4yMjc3IDIuMTE4MzJDMTEuNDY5MiAyLjI3Njg5IDExLjcwMDIgMi41MDggMTIuMDUxNSAyLjg1OTQyQzEyLjA2NjIgMi44NzQxIDEyLjA4MSAyLjg4ODk4IDEyLjA5NjEgMi45MDQwOEMxMi4xMTEyIDIuOTE5MTcgMTIuMTI2MSAyLjkzNDA1IDEyLjE0MDggMi45NDg3MUMxMi40OTIyIDMuMzAwMDEgMTIuNzIzMyAzLjUzMTAyIDEyLjg4MTkgMy43NzI0OEMxMy41MzIxIDQuNzYyNTIgMTMuNDk3MiA2LjA1NjIzIDEyLjgyMiA3LjA1MDJDMTIuNjU2OCA3LjI5MzMgMTIuNDIwMyA3LjUyOTc2IDEyLjA1MDcgNy44OTkyOUMxMi4wMzY2IDcuOTEzNCAxMi4wMjIyIDcuOTI3NzEgMTIuMDA3NyA3Ljk0MjIxTDExLjM4OSA4LjU2MDkzQzExLjE5MzggOC43NTYyIDEwLjg3NzIgOC43NTYyIDEwLjY4MTkgOC41NjA5M0MxMC40ODY3IDguMzY1NjcgMTAuNDg2NyA4LjA0OTA5IDEwLjY4MTkgNy44NTM4M0wxMS4zMDA2IDcuMjM1MTFDMTEuNzI3NiA2LjgwODExIDExLjg4OTkgNi42NDI2NCAxMS45OTQ4IDYuNDg4MjdDMTIuNDU0MyA1LjgxMTkyIDEyLjQ2MzMgNC45NTY3NSAxMi4wNDYgNC4zMjE0MUMxMS45NTEzIDQuMTc3MTQgMTEuODAwOSA0LjAyMzA3IDExLjM4OSAzLjYxMTE5QzEwLjk3NzEgMy4xOTkzIDEwLjgyMzEgMy4wNDg5MyAxMC42Nzg4IDIuOTU0MTlaTTQuMzE3OTYgNi40Mzk2MUM0LjUxMzIyIDYuNjM0ODcgNC41MTMyMiA2Ljk1MTQ2IDQuMzE3OTYgNy4xNDY3MkwzLjY5OTI0IDcuNzY1NDRDMy4yNzIyNCA4LjE5MjQ0IDMuMTA5OTMgOC4zNTc5MSAzLjAwNTA3IDguNTEyMjdDMi41NDU2MSA5LjE4ODYzIDIuNTM2NjEgMTAuMDQzOCAyLjk1Mzg1IDEwLjY3OTFDMy4wNDg2IDEwLjgyMzQgMy4xOTg5NiAxMC45Nzc1IDMuNjEwODUgMTEuMzg5NEM0LjAyMjc0IDExLjgwMTIgNC4xNzY4MSAxMS45NTE2IDQuMzIxMDcgMTIuMDQ2NEM0Ljk1NjQyIDEyLjQ2MzYgNS44MTE1OCAxMi40NTQ2IDYuNDg3OTQgMTEuOTk1MUM2LjY0MjMgMTEuODkwMyA2LjgwNzc3IDExLjcyOCA3LjIzNDc3IDExLjMwMUw3Ljg1MzQ5IDEwLjY4MjNDOC4wNDg3NSAxMC40ODcgOC4zNjUzMyAxMC40ODcgOC41NjA2IDEwLjY4MjNDOC43NTU4NiAxMC44Nzc1IDguNzU1ODYgMTEuMTk0MSA4LjU2MDYgMTEuMzg5NEw3Ljk0MTg4IDEyLjAwODFDNy45MjczOCAxMi4wMjI2IDcuOTEzMDcgMTIuMDM2OSA3Ljg5ODk3IDEyLjA1MUM3LjUyOTQzIDEyLjQyMDYgNy4yOTI5NiAxMi42NTcyIDcuMDQ5ODYgMTIuODIyM0M2LjA1NTg5IDEzLjQ5NzYgNC43NjIxOSAxMy41MzI0IDMuNzcyMTQgMTIuODgyMkMzLjUzMDY4IDEyLjcyMzcgMy4yOTk2NyAxMi40OTI1IDIuOTQ4MzcgMTIuMTQxMUMyLjkzMzcxIDEyLjEyNjQgMi45MTg4MyAxMi4xMTE2IDIuOTAzNzQgMTIuMDk2NUMyLjg4ODY1IDEyLjA4MTQgMi44NzM3NyAxMi4wNjY1IDIuODU5MSAxMi4wNTE4QzIuNTA3NjYgMTEuNzAwNSAyLjI3NjU2IDExLjQ2OTUgMi4xMTc5OSAxMS4yMjgxQzEuNDY3OCAxMC4yMzggMS41MDI2NSA4Ljk0NDMyIDIuMTc3ODggNy45NTAzNUMyLjM0MzAzIDcuNzA3MjQgMi41Nzk1NyA3LjQ3MDc3IDIuOTQ5MjIgNy4xMDEyNEMyLjk2MzMzIDcuMDg3MTMgMi45Nzc2MyA3LjA3MjgzIDIuOTkyMTMgNy4wNTgzM0wzLjYxMDg1IDYuNDM5NjFDMy44MDYxMSA2LjI0NDM1IDQuMTIyNjkgNi4yNDQzNSA0LjMxNzk2IDYuNDM5NjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS41IDUuMjVDMS45MTQyMSA1LjI1IDIuMjUgNC45MTQyMSAyLjI1IDQuNUMyLjI1IDQuMDg1NzkgMS45MTQyMSAzLjc1IDEuNSAzLjc1QzEuMDg1NzkgMy43NSAwLjc1IDQuMDg1NzkgMC43NSA0LjVDMC43NSA0LjkxNDIxIDEuMDg1NzkgNS4yNSAxLjUgNS4yNVpNNCA0LjVDNCA0LjIyMzg2IDQuMjIzODYgNCA0LjUgNEgxMy41QzEzLjc3NjEgNCAxNCA0LjIyMzg2IDE0IDQuNUMxNCA0Ljc3NjE0IDEzLjc3NjEgNSAxMy41IDVINC41QzQuMjIzODYgNSA0IDQuNzc2MTQgNCA0LjVaTTQuNSA3QzQuMjIzODYgNyA0IDcuMjIzODYgNCA3LjVDNCA3Ljc3NjE0IDQuMjIzODYgOCA0LjUgOEgxMy41QzEzLjc3NjEgOCAxNCA3Ljc3NjE0IDE0IDcuNUMxNCA3LjIyMzg2IDEzLjc3NjEgNyAxMy41IDdINC41Wk00LjUgMTBDNC4yMjM4NiAxMCA0IDEwLjIyMzkgNCAxMC41QzQgMTAuNzc2MSA0LjIyMzg2IDExIDQuNSAxMUgxMy41QzEzLjc3NjEgMTEgMTQgMTAuNzc2MSAxNCAxMC41QzE0IDEwLjIyMzkgMTMuNzc2MSAxMCAxMy41IDEwSDQuNVpNMi4yNSA3LjVDMi4yNSA3LjkxNDIxIDEuOTE0MjEgOC4yNSAxLjUgOC4yNUMxLjA4NTc5IDguMjUgMC43NSA3LjkxNDIxIDAuNzUgNy41QzAuNzUgNy4wODU3OSAxLjA4NTc5IDYuNzUgMS41IDYuNzVDMS45MTQyMSA2Ljc1IDIuMjUgNy4wODU3OSAyLjI1IDcuNVpNMS41IDExLjI1QzEuOTE0MjEgMTEuMjUgMi4yNSAxMC45MTQyIDIuMjUgMTAuNUMyLjI1IDEwLjA4NTggMS45MTQyMSA5Ljc1IDEuNSA5Ljc1QzEuMDg1NzkgOS43NSAwLjc1IDEwLjA4NTggMC43NSAxMC41QzAuNzUgMTAuOTE0MiAxLjA4NTc5IDExLjI1IDEuNSAxMS4yNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHduPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01IDQuNjM2MDFDNSAzLjc2MDMxIDUuMjQyMTkgMy4xMDU0IDUuNjQzMjMgMi42NzM1N0M2LjAzOTM0IDIuMjQ3MDUgNi42NDU4MiAxLjk3ODMgNy41MDE0IDEuOTc4M0M4LjM1NzQ1IDEuOTc4MyA4Ljk2MzA2IDIuMjQ2NTIgOS4zNTgyMyAyLjY3MjA4QzkuNzU4MzggMy4xMDI5OSAxMCAzLjc1NzA4IDEwIDQuNjMzMjVWNS45OTk5OUg1VjQuNjM2MDFaTTQgNS45OTk5OVY0LjYzNjAxQzQgMy41ODE0OCA0LjI5MzM5IDIuNjU3NTQgNC45MTA0OSAxLjk5MzA3QzUuNTMyNTIgMS4zMjMyOSA2LjQyNjc1IDAuOTc4MzAyIDcuNTAxNCAwLjk3ODMwMkM4LjU3NTgzIDAuOTc4MzAyIDkuNDY5NTIgMS4zMjIzMyAxMC4wOTEgMS45OTE2MkMxMC43MDc2IDIuNjU1NTcgMTEgMy41Nzg5NiAxMSA0LjYzMzI1VjUuOTk5OTlIMTJDMTIuNTUyMyA1Ljk5OTk5IDEzIDYuNDQ3NzEgMTMgNi45OTk5OVYxM0MxMyAxMy41NTIzIDEyLjU1MjMgMTQgMTIgMTRIM0MyLjQ0NzcyIDE0IDIgMTMuNTUyMyAyIDEzVjYuOTk5OTlDMiA2LjQ0NzcxIDIuNDQ3NzIgNS45OTk5OSAzIDUuOTk5OTlINFpNMyA2Ljk5OTk5SDEyVjEzSDNWNi45OTk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5ODYgMEM2LjMyNTcgMCA1LjM2MTA3IDAuMzg5NDMgNC43Mzc1MyAxLjE5MzYxQzQuMjM3NDUgMS44Mzg1NiA0IDIuNjgyNDIgNCAzLjYzMzI1SDVDNSAyLjg0MzEzIDUuMTk2OTEgMi4yMzMxMiA1LjUyNzggMS44MDYzNkM1LjkxNjE1IDEuMzA1NTIgNi41NTE1MiAxIDcuNDk4NiAxQzguMzU2ODMgMSA4Ljk2MzM2IDEuMjY1MDIgOS4zNTg0NiAxLjY4NjIzQzkuNzU3OTMgMi4xMTIxMSAxMCAyLjc2MDQ0IDEwIDMuNjM2MDFWNkgzQzIuNDQ3NzIgNiAyIDYuNDQ3NzIgMiA3VjEzQzIgMTMuNTUyMyAyLjQ0NzcyIDE0IDMgMTRIMTJDMTIuNTUyMyAxNCAxMyAxMy41NTIzIDEzIDEzVjdDMTMgNi40NDc3MSAxMi41NTIzIDYgMTIgNkgxMVYzLjYzNjAxQzExIDIuNTgxMzUgMTAuNzA2NSAxLjY2MTY3IDEwLjA4NzggMS4wMDIxQzkuNDY0NzcgMC4zMzc4NzEgOC41NzA2MSAwIDcuNDk4NiAwWk0zIDdIMTJWMTNIM1Y3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkgMy42MzYwMUM5IDIuNzYwNDQgOS4yNDIwNyAyLjExMjExIDkuNjQxNTQgMS42ODYyM0MxMC4wMzY2IDEuMjY1MDIgMTAuNjQzMiAxIDExLjUwMTQgMUMxMi40NDg1IDEgMTMuMDgzOSAxLjMwNTUyIDEzLjQ3MjIgMS44MDYzNkMxMy44MDMxIDIuMjMzMTIgMTQgMi44NDMxMyAxNCAzLjYzMzI1SDE1QzE1IDIuNjgyNDIgMTQuNzYyNiAxLjgzODU2IDE0LjI2MjUgMS4xOTM2MUMxMy42Mzg5IDAuMzg5NDMgMTIuNjc0MyAwIDExLjUwMTQgMEMxMC40Mjk0IDAgOS41MzUyMyAwLjMzNzg3MSA4LjkxMjE4IDEuMDAyMUM4LjI5MzUxIDEuNjYxNjcgOCAyLjU4MTM1IDggMy42MzYwMVY2SDFDMC40NDc3MTUgNiAwIDYuNDQ3NzIgMCA3VjEzQzAgMTMuNTUyMyAwLjQ0NzcxNSAxNCAxIDE0SDEwQzEwLjU1MjMgMTQgMTEgMTMuNTUyMyAxMSAxM1Y3QzExIDYuNDQ3NzIgMTAuNTUyMyA2IDEwIDZIOVYzLjYzNjAxWk0xIDdIMTBWMTNIMVY3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sX249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMzUzNTUgMS44NTM1NUMzLjU0ODgyIDEuNjU4MjkgMy41NDg4MiAxLjM0MTcxIDMuMzUzNTUgMS4xNDY0NUMzLjE1ODI5IDAuOTUxMTg0IDIuODQxNzEgMC45NTExODQgMi42NDY0NSAxLjE0NjQ1TDAuNjQ2NDQ3IDMuMTQ2NDVDMC40NTExODQgMy4zNDE3MSAwLjQ1MTE4NCAzLjY1ODI5IDAuNjQ2NDQ3IDMuODUzNTVMMi42NDY0NSA1Ljg1MzU1QzIuODQxNzEgNi4wNDg4MiAzLjE1ODI5IDYuMDQ4ODIgMy4zNTM1NSA1Ljg1MzU1QzMuNTQ4ODIgNS42NTgyOSAzLjU0ODgyIDUuMzQxNzEgMy4zNTM1NSA1LjE0NjQ1TDIuMjA3MTEgNEg5LjVDMTEuNDMzIDQgMTMgNS41NjcgMTMgNy41QzEzIDcuNzc2MTQgMTMuMjIzOSA4IDEzLjUgOEMxMy43NzYxIDggMTQgNy43NzYxNCAxNCA3LjVDMTQgNS4wMTQ3MiAxMS45ODUzIDMgOS41IDNIMi4yMDcxMUwzLjM1MzU1IDEuODUzNTVaTTIgNy41QzIgNy4yMjM4NiAxLjc3NjE0IDcgMS41IDdDMS4yMjM4NiA3IDEgNy4yMjM4NiAxIDcuNUMxIDkuOTg1MjggMy4wMTQ3MiAxMiA1LjUgMTJIMTIuNzkyOUwxMS42NDY0IDEzLjE0NjRDMTEuNDUxMiAxMy4zNDE3IDExLjQ1MTIgMTMuNjU4MyAxMS42NDY0IDEzLjg1MzZDMTEuODQxNyAxNC4wNDg4IDEyLjE1ODMgMTQuMDQ4OCAxMi4zNTM2IDEzLjg1MzZMMTQuMzUzNiAxMS44NTM2QzE0LjU0ODggMTEuNjU4MyAxNC41NDg4IDExLjM0MTcgMTQuMzUzNiAxMS4xNDY0TDEyLjM1MzYgOS4xNDY0NUMxMi4xNTgzIDguOTUxMTggMTEuODQxNyA4Ljk1MTE4IDExLjY0NjQgOS4xNDY0NUMxMS40NTEyIDkuMzQxNzEgMTEuNDUxMiA5LjY1ODI5IDExLjY0NjQgOS44NTM1NUwxMi43OTI5IDExSDUuNUMzLjU2NyAxMSAyIDkuNDMzIDIgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sT249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjkgMC40OTk5NzZDMTMuOSAwLjI3OTA2MiAxMy43MjA5IDAuMDk5OTc1NiAxMy41IDAuMDk5OTc1NkMxMy4yNzkxIDAuMDk5OTc1NiAxMy4xIDAuMjc5MDYyIDEzLjEgMC40OTk5NzZWMS4wOTk5OEgxMi41QzEyLjI3OTEgMS4wOTk5OCAxMi4xIDEuMjc5MDYgMTIuMSAxLjQ5OTk4QzEyLjEgMS43MjA4OSAxMi4yNzkxIDEuODk5OTggMTIuNSAxLjg5OTk4SDEzLjFWMi40OTk5OEMxMy4xIDIuNzIwODkgMTMuMjc5MSAyLjg5OTk4IDEzLjUgMi44OTk5OEMxMy43MjA5IDIuODk5OTggMTMuOSAyLjcyMDg5IDEzLjkgMi40OTk5OFYxLjg5OTk4SDE0LjVDMTQuNzIwOSAxLjg5OTk4IDE0LjkgMS43MjA4OSAxNC45IDEuNDk5OThDMTQuOSAxLjI3OTA2IDE0LjcyMDkgMS4wOTk5OCAxNC41IDEuMDk5OThIMTMuOVYwLjQ5OTk3NlpNMTEuODUzNiAzLjE0NjQyQzEyLjA0ODggMy4zNDE2OCAxMi4wNDg4IDMuNjU4MjYgMTEuODUzNiAzLjg1MzUzTDEwLjg1MzYgNC44NTM1M0MxMC42NTgzIDUuMDQ4NzkgMTAuMzQxNyA1LjA0ODc5IDEwLjE0NjUgNC44NTM1M0M5Ljk1MTIgNC42NTgyNyA5Ljk1MTIgNC4zNDE2OSAxMC4xNDY1IDQuMTQ2NDJMMTEuMTQ2NCAzLjE0NjQzQzExLjM0MTcgMi45NTExNiAxMS42NTgzIDIuOTUxMTYgMTEuODUzNiAzLjE0NjQyWk05Ljg1MzU3IDUuMTQ2NDJDMTAuMDQ4OCA1LjM0MTY4IDEwLjA0ODggNS42NTgyNyA5Ljg1MzU3IDUuODUzNTNMMi44NTM1NSAxMi44NTM1QzIuNjU4MjkgMTMuMDQ4OCAyLjM0MTcxIDEzLjA0ODggMi4xNDY0NSAxMi44NTM1QzEuOTUxMTggMTIuNjU4MyAxLjk1MTE4IDEyLjM0MTcgMi4xNDY0NSAxMi4xNDY0TDkuMTQ2NDYgNS4xNDY0MkM5LjM0MTcyIDQuOTUxMTYgOS42NTgzMSA0Ljk1MTE2IDkuODUzNTcgNS4xNDY0MlpNMTMuNSA1LjA5OTk4QzEzLjcyMDkgNS4wOTk5OCAxMy45IDUuMjc5MDYgMTMuOSA1LjQ5OTk4VjYuMDk5OThIMTQuNUMxNC43MjA5IDYuMDk5OTggMTQuOSA2LjI3OTA2IDE0LjkgNi40OTk5OEMxNC45IDYuNzIwODkgMTQuNzIwOSA2Ljg5OTk4IDE0LjUgNi44OTk5OEgxMy45VjcuNDk5OThDMTMuOSA3LjcyMDg5IDEzLjcyMDkgNy44OTk5OCAxMy41IDcuODk5OThDMTMuMjc5MSA3Ljg5OTk4IDEzLjEgNy43MjA4OSAxMy4xIDcuNDk5OThWNi44OTk5OEgxMi41QzEyLjI3OTEgNi44OTk5OCAxMi4xIDYuNzIwODkgMTIuMSA2LjQ5OTk4QzEyLjEgNi4yNzkwNiAxMi4yNzkxIDYuMDk5OTggMTIuNSA2LjA5OTk4SDEzLjFWNS40OTk5OEMxMy4xIDUuMjc5MDYgMTMuMjc5MSA1LjA5OTk4IDEzLjUgNS4wOTk5OFpNOC45MDAwMiAwLjQ5OTk3NkM4LjkwMDAyIDAuMjc5MDYyIDguNzIwOTMgMC4wOTk5NzU2IDguNTAwMDIgMC4wOTk5NzU2QzguMjc5MSAwLjA5OTk3NTYgOC4xMDAwMiAwLjI3OTA2MiA4LjEwMDAyIDAuNDk5OTc2VjEuMDk5OThINy41MDAwMkM3LjI3OTEgMS4wOTk5OCA3LjEwMDAyIDEuMjc5MDYgNy4xMDAwMiAxLjQ5OTk4QzcuMTAwMDIgMS43MjA4OSA3LjI3OTEgMS44OTk5OCA3LjUwMDAyIDEuODk5OThIOC4xMDAwMlYyLjQ5OTk4QzguMTAwMDIgMi43MjA4OSA4LjI3OTEgMi44OTk5OCA4LjUwMDAyIDIuODk5OThDOC43MjA5MyAyLjg5OTk4IDguOTAwMDIgMi43MjA4OSA4LjkwMDAyIDIuNDk5OThWMS44OTk5OEg5LjUwMDAyQzkuNzIwOTMgMS44OTk5OCA5LjkwMDAyIDEuNzIwODkgOS45MDAwMiAxLjQ5OTk4QzkuOTAwMDIgMS4yNzkwNiA5LjcyMDkzIDEuMDk5OTggOS41MDAwMiAxLjA5OTk4SDguOTAwMDJWMC40OTk5NzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxMbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAgNi41QzEwIDguNDMzIDguNDMzIDEwIDYuNSAxMEM0LjU2NyAxMCAzIDguNDMzIDMgNi41QzMgNC41NjcgNC41NjcgMyA2LjUgM0M4LjQzMyAzIDEwIDQuNTY3IDEwIDYuNVpNOS4zMDg4NCAxMC4wMTU5QzguNTM5MDEgMTAuNjMxOCA3LjU2MjUxIDExIDYuNSAxMUM0LjAxNDcyIDExIDIgOC45ODUyOCAyIDYuNUMyIDQuMDE0NzIgNC4wMTQ3MiAyIDYuNSAyQzguOTg1MjggMiAxMSA0LjAxNDcyIDExIDYuNUMxMSA3LjU2MjUxIDEwLjYzMTggOC41MzkwMSAxMC4wMTU5IDkuMzA4ODRMMTIuODUzNiAxMi4xNDY0QzEzLjA0ODggMTIuMzQxNyAxMy4wNDg4IDEyLjY1ODMgMTIuODUzNiAxMi44NTM2QzEyLjY1ODMgMTMuMDQ4OCAxMi4zNDE3IDEzLjA0ODggMTIuMTQ2NCAxMi44NTM2TDkuMzA4ODQgMTAuMDE1OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEVuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjQ5OTg4IDIuMDAwMTJDMS43NzYwMiAyLjAwMDEyIDEuOTk5ODggMS43NzYyNiAxLjk5OTg4IDEuNTAwMTJDMS45OTk4OCAxLjIyMzk4IDEuNzc2MDIgMS4wMDAxMiAxLjQ5OTg4IDEuMDAwMTJDMS4yMjM3NCAxLjAwMDEyIDAuOTk5ODc4IDEuMjIzOTggMC45OTk4NzggMS41MDAxMkMwLjk5OTg3OCAxLjc3NjI2IDEuMjIzNzQgMi4wMDAxMiAxLjQ5OTg4IDIuMDAwMTJaTTQuNDk5ODggMi4wMDAxMkM0Ljc3NjAyIDIuMDAwMTIgNC45OTk4OCAxLjc3NjI2IDQuOTk5ODggMS41MDAxMkM0Ljk5OTg4IDEuMjIzOTggNC43NzYwMiAxLjAwMDEyIDQuNDk5ODggMS4wMDAxMkM0LjIyMzc0IDEuMDAwMTIgMy45OTk4OCAxLjIyMzk4IDMuOTk5ODggMS41MDAxMkMzLjk5OTg4IDEuNzc2MjYgNC4yMjM3NCAyLjAwMDEyIDQuNDk5ODggMi4wMDAxMlpNNy45OTk4OCAxLjUwMDEyQzcuOTk5ODggMS43NzYyNiA3Ljc3NjAyIDIuMDAwMTIgNy40OTk4OCAyLjAwMDEyQzcuMjIzNzQgMi4wMDAxMiA2Ljk5OTg4IDEuNzc2MjYgNi45OTk4OCAxLjUwMDEyQzYuOTk5ODggMS4yMjM5OCA3LjIyMzc0IDEuMDAwMTIgNy40OTk4OCAxLjAwMDEyQzcuNzc2MDIgMS4wMDAxMiA3Ljk5OTg4IDEuMjIzOTggNy45OTk4OCAxLjUwMDEyWk0xMC40OTk5IDIuMDAwMTJDMTAuNzc2IDIuMDAwMTIgMTAuOTk5OSAxLjc3NjI2IDEwLjk5OTkgMS41MDAxMkMxMC45OTk5IDEuMjIzOTggMTAuNzc2IDEuMDAwMTIgMTAuNDk5OSAxLjAwMDEyQzEwLjIyMzcgMS4wMDAxMiA5Ljk5OTg4IDEuMjIzOTggOS45OTk4OCAxLjUwMDEyQzkuOTk5ODggMS43NzYyNiAxMC4yMjM3IDIuMDAwMTIgMTAuNDk5OSAyLjAwMDEyWk0xMy45OTk5IDEuNTAwMTJDMTMuOTk5OSAxLjc3NjI2IDEzLjc3NiAyLjAwMDEyIDEzLjQ5OTkgMi4wMDAxMkMxMy4yMjM3IDIuMDAwMTIgMTIuOTk5OSAxLjc3NjI2IDEyLjk5OTkgMS41MDAxMkMxMi45OTk5IDEuMjIzOTggMTMuMjIzNyAxLjAwMDEyIDEzLjQ5OTkgMS4wMDAxMkMxMy43NzYgMS4wMDAxMiAxMy45OTk5IDEuMjIzOTggMTMuOTk5OSAxLjUwMDEyWk0xLjQ5OTg4IDE0LjAwMDFDMS43NzYwMiAxNC4wMDAxIDEuOTk5ODggMTMuNzc2MyAxLjk5OTg4IDEzLjUwMDFDMS45OTk4OCAxMy4yMjQgMS43NzYwMiAxMy4wMDAxIDEuNDk5ODggMTMuMDAwMUMxLjIyMzc0IDEzLjAwMDEgMC45OTk4NzggMTMuMjI0IDAuOTk5ODc4IDEzLjUwMDFDMC45OTk4NzggMTMuNzc2MyAxLjIyMzc0IDE0LjAwMDEgMS40OTk4OCAxNC4wMDAxWk0xLjk5OTg4IDEwLjUwMDFDMS45OTk4OCAxMC43NzYzIDEuNzc2MDIgMTEuMDAwMSAxLjQ5OTg4IDExLjAwMDFDMS4yMjM3NCAxMS4wMDAxIDAuOTk5ODc4IDEwLjc3NjMgMC45OTk4NzggMTAuNTAwMUMwLjk5OTg3OCAxMC4yMjQgMS4yMjM3NCAxMC4wMDAxIDEuNDk5ODggMTAuMDAwMUMxLjc3NjAyIDEwLjAwMDEgMS45OTk4OCAxMC4yMjQgMS45OTk4OCAxMC41MDAxWk0xLjQ5OTg4IDguMDAwMTJDMS43NzYwMiA4LjAwMDEyIDEuOTk5ODggNy43NzYyNiAxLjk5OTg4IDcuNTAwMTJDMS45OTk4OCA3LjIyMzk4IDEuNzc2MDIgNy4wMDAxMiAxLjQ5OTg4IDcuMDAwMTJDMS4yMjM3NCA3LjAwMDEyIDAuOTk5ODc4IDcuMjIzOTggMC45OTk4NzggNy41MDAxMkMwLjk5OTg3OCA3Ljc3NjI2IDEuMjIzNzQgOC4wMDAxMiAxLjQ5OTg4IDguMDAwMTJaTTEuOTk5ODggNC41MDAxMkMxLjk5OTg4IDQuNzc2MjYgMS43NzYwMiA1LjAwMDEyIDEuNDk5ODggNS4wMDAxMkMxLjIyMzc0IDUuMDAwMTIgMC45OTk4NzggNC43NzYyNiAwLjk5OTg3OCA0LjUwMDEyQzAuOTk5ODc4IDQuMjIzOTggMS4yMjM3NCA0LjAwMDEyIDEuNDk5ODggNC4wMDAxMkMxLjc3NjAyIDQuMDAwMTIgMS45OTk4OCA0LjIyMzk4IDEuOTk5ODggNC41MDAxMlpNMTMuNDk5OSAxMS4wMDAxQzEzLjc3NiAxMS4wMDAxIDEzLjk5OTkgMTAuNzc2MyAxMy45OTk5IDEwLjUwMDFDMTMuOTk5OSAxMC4yMjQgMTMuNzc2IDEwLjAwMDEgMTMuNDk5OSAxMC4wMDAxQzEzLjIyMzcgMTAuMDAwMSAxMi45OTk5IDEwLjIyNCAxMi45OTk5IDEwLjUwMDFDMTIuOTk5OSAxMC43NzYzIDEzLjIyMzcgMTEuMDAwMSAxMy40OTk5IDExLjAwMDFaTTEzLjk5OTkgNy41MDAxMkMxMy45OTk5IDcuNzc2MjYgMTMuNzc2IDguMDAwMTIgMTMuNDk5OSA4LjAwMDEyQzEzLjIyMzcgOC4wMDAxMiAxMi45OTk5IDcuNzc2MjYgMTIuOTk5OSA3LjUwMDEyQzEyLjk5OTkgNy4yMjM5OCAxMy4yMjM3IDcuMDAwMTIgMTMuNDk5OSA3LjAwMDEyQzEzLjc3NiA3LjAwMDEyIDEzLjk5OTkgNy4yMjM5OCAxMy45OTk5IDcuNTAwMTJaTTEzLjQ5OTkgNS4wMDAxMkMxMy43NzYgNS4wMDAxMiAxMy45OTk5IDQuNzc2MjYgMTMuOTk5OSA0LjUwMDEyQzEzLjk5OTkgNC4yMjM5OCAxMy43NzYgNC4wMDAxMiAxMy40OTk5IDQuMDAwMTJDMTMuMjIzNyA0LjAwMDEyIDEyLjk5OTkgNC4yMjM5OCAxMi45OTk5IDQuNTAwMTJDMTIuOTk5OSA0Ljc3NjI2IDEzLjIyMzcgNS4wMDAxMiAxMy40OTk5IDUuMDAwMTJaTTQuOTk5ODggMTMuNTAwMUM0Ljk5OTg4IDEzLjc3NjMgNC43NzYwMiAxNC4wMDAxIDQuNDk5ODggMTQuMDAwMUM0LjIyMzc0IDE0LjAwMDEgMy45OTk4OCAxMy43NzYzIDMuOTk5ODggMTMuNTAwMUMzLjk5OTg4IDEzLjIyNCA0LjIyMzc0IDEzLjAwMDEgNC40OTk4OCAxMy4wMDAxQzQuNzc2MDIgMTMuMDAwMSA0Ljk5OTg4IDEzLjIyNCA0Ljk5OTg4IDEzLjUwMDFaTTcuNDk5ODggMTQuMDAwMUM3Ljc3NjAyIDE0LjAwMDEgNy45OTk4OCAxMy43NzYzIDcuOTk5ODggMTMuNTAwMUM3Ljk5OTg4IDEzLjIyNCA3Ljc3NjAyIDEzLjAwMDEgNy40OTk4OCAxMy4wMDAxQzcuMjIzNzQgMTMuMDAwMSA2Ljk5OTg4IDEzLjIyNCA2Ljk5OTg4IDEzLjUwMDFDNi45OTk4OCAxMy43NzYzIDcuMjIzNzQgMTQuMDAwMSA3LjQ5OTg4IDE0LjAwMDFaTTEwLjk5OTkgMTMuNTAwMUMxMC45OTk5IDEzLjc3NjMgMTAuNzc2IDE0LjAwMDEgMTAuNDk5OSAxNC4wMDAxQzEwLjIyMzcgMTQuMDAwMSA5Ljk5OTg4IDEzLjc3NjMgOS45OTk4OCAxMy41MDAxQzkuOTk5ODggMTMuMjI0IDEwLjIyMzcgMTMuMDAwMSAxMC40OTk5IDEzLjAwMDFDMTAuNzc2IDEzLjAwMDEgMTAuOTk5OSAxMy4yMjQgMTAuOTk5OSAxMy41MDAxWk0xMy40OTk5IDE0LjAwMDFDMTMuNzc2IDE0LjAwMDEgMTMuOTk5OSAxMy43NzYzIDEzLjk5OTkgMTMuNTAwMUMxMy45OTk5IDEzLjIyNCAxMy43NzYgMTMuMDAwMSAxMy40OTk5IDEzLjAwMDFDMTMuMjIzNyAxMy4wMDAxIDEyLjk5OTkgMTMuMjI0IDEyLjk5OTkgMTMuNTAwMUMxMi45OTk5IDEzLjc3NjMgMTMuMjIzNyAxNC4wMDAxIDEzLjQ5OTkgMTQuMDAwMVpNMy45OTk4OCA1LjAwMDEyQzMuOTk5ODggNC40NDc4NCA0LjQ0NzU5IDQuMDAwMTIgNC45OTk4OCA0LjAwMDEySDkuOTk5ODhDMTAuNTUyMiA0LjAwMDEyIDEwLjk5OTkgNC40NDc4NCAxMC45OTk5IDUuMDAwMTJWMTAuMDAwMUMxMC45OTk5IDEwLjU1MjQgMTAuNTUyMiAxMS4wMDAxIDkuOTk5ODggMTEuMDAwMUg0Ljk5OTg4QzQuNDQ3NTkgMTEuMDAwMSAzLjk5OTg4IDEwLjU1MjQgMy45OTk4OCAxMC4wMDAxVjUuMDAwMTJaTTQuOTk5ODggNS4wMDAxMkg5Ljk5OTg4VjEwLjAwMDFINC45OTk4OFY1LjAwMDEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sU249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgMkgxNFYxM0gxTDEgMlpNMCAyQzAgMS40NDc3MiAwLjQ0NzcxNSAxIDEgMUgxNEMxNC41NTIzIDEgMTUgMS40NDc3MiAxNSAyVjEzQzE1IDEzLjU1MjMgMTQuNTUyMyAxNCAxNCAxNEgxQzAuNDQ3NzE1IDE0IDAgMTMuNTUyMyAwIDEzVjJaTTQuODc1IDcuNUM0Ljg3NSA2LjA1MDI1IDYuMDUwMjUgNC44NzUgNy41IDQuODc1QzguOTQ5NzUgNC44NzUgMTAuMTI1IDYuMDUwMjUgMTAuMTI1IDcuNUMxMC4xMjUgOC45NDk3NSA4Ljk0OTc1IDEwLjEyNSA3LjUgMTAuMTI1QzYuMDUwMjUgMTAuMTI1IDQuODc1IDguOTQ5NzUgNC44NzUgNy41Wk03LjUgMy44NzVDNS40OTc5NyAzLjg3NSAzLjg3NSA1LjQ5Nzk3IDMuODc1IDcuNUMzLjg3NSA5LjUwMjAzIDUuNDk3OTcgMTEuMTI1IDcuNSAxMS4xMjVDOS41MDIwMyAxMS4xMjUgMTEuMTI1IDkuNTAyMDMgMTEuMTI1IDcuNUMxMS4xMjUgNS40OTc5NyA5LjUwMjAzIDMuODc1IDcuNSAzLjg3NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDFDMC40NDc3MTUgMSAwIDEuNDQ3NzIgMCAyVjEzQzAgMTMuNTUyMyAwLjQ0NzcxNSAxNCAxIDE0SDE0QzE0LjU1MjMgMTQgMTUgMTMuNTUyMyAxNSAxM1YyQzE1IDEuNDQ3NzIgMTQuNTUyMyAxIDE0IDFIMVpNNy41IDEwLjYyNUM5LjIyNTg5IDEwLjYyNSAxMC42MjUgOS4yMjU4OSAxMC42MjUgNy41QzEwLjYyNSA1Ljc3NDExIDkuMjI1ODkgNC4zNzUgNy41IDQuMzc1QzUuNzc0MTEgNC4zNzUgNC4zNzUgNS43NzQxMSA0LjM3NSA3LjVDNC4zNzUgOS4yMjU4OSA1Ljc3NDExIDEwLjYyNSA3LjUgMTAuNjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuMjUgNy41QzIuMjUgNy4yMjM4NiAyLjQ3Mzg2IDcgMi43NSA3SDEyLjI1QzEyLjUyNjEgNyAxMi43NSA3LjIyMzg2IDEyLjc1IDcuNUMxMi43NSA3Ljc3NjE0IDEyLjUyNjEgOCAxMi4yNSA4SDIuNzVDMi40NzM4NiA4IDIuMjUgNy43NzYxNCAyLjI1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGtuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk0xLjgyNzA3IDcuNDk5NzJDMS44MjcwNyA0LjM2NjcxIDQuMzY2ODkgMS44MjY4OSA3LjQ5OTkxIDEuODI2ODlDMTAuNjMyOSAxLjgyNjg5IDEzLjE3MjcgNC4zNjY3MSAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyAxMC42MzI3IDEwLjYzMjkgMTMuMTcyNiA3LjQ5OTkxIDEzLjE3MjZDNC4zNjY4OSAxMy4xNzI2IDEuODI3MDcgMTAuNjMyNyAxLjgyNzA3IDcuNDk5NzJaTTQuNTAwMDMgN0M0LjIyMzg5IDcgNC4wMDAwMyA3LjIyMzg2IDQuMDAwMDMgNy41QzQuMDAwMDMgNy43NzYxNCA0LjIyMzg5IDggNC41MDAwMyA4SDEwLjVDMTAuNzc2MiA4IDExIDcuNzc2MTQgMTEgNy41QzExIDcuMjIzODYgMTAuNzc2MiA3IDEwLjUgN0g0LjUwMDAzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuMTQ5MjEgMy45OTk5NkMyLjE0OTIxIDIuOTc3NzggMi45Nzc4NCAyLjE0OTE1IDQuMDAwMDIgMi4xNDkxNUM1LjAyMjE5IDIuMTQ5MTUgNS44NTA4MyAyLjk3Nzc4IDUuODUwODMgMy45OTk5NkM1Ljg1MDgzIDUuMDIyMTMgNS4wMjIxOSA1Ljg1MDc3IDQuMDAwMDIgNS44NTA3N0MyLjk3Nzg0IDUuODUwNzcgMi4xNDkyMSA1LjAyMjEzIDIuMTQ5MjEgMy45OTk5NlpNNC4wMDAwMiAxLjI0OTE1QzIuNDgwNzkgMS4yNDkxNSAxLjI0OTIxIDIuNDgwNzMgMS4yNDkyMSAzLjk5OTk2QzEuMjQ5MjEgNS41MTkxOSAyLjQ4MDc5IDYuNzUwNzcgNC4wMDAwMiA2Ljc1MDc3QzUuNTE5MjUgNi43NTA3NyA2Ljc1MDgzIDUuNTE5MTkgNi43NTA4MyAzLjk5OTk2QzYuNzUwODMgMi40ODA3MyA1LjUxOTI1IDEuMjQ5MTUgNC4wMDAwMiAxLjI0OTE1Wk01LjgyMDM0IDExLjAwMDFMMi40OTk5OCAxMi44MzY5VjkuMTYzMzFMNS44MjAzNCAxMS4wMDAxWk0yLjYzODgzIDguMjExNTlDMi4xNzIyOCA3Ljk1MzUgMS41OTk5OCA4LjI5MDkzIDEuNTk5OTggOC44MjQxMVYxMy4xNzYxQzEuNTk5OTggMTMuNzA5MyAyLjE3MjI4IDE0LjA0NjcgMi42Mzg4MyAxMy43ODg2TDYuNTcyMzUgMTEuNjEyNkM3LjA1Mzg5IDExLjM0NjIgNy4wNTM4OSAxMC42NTQgNi41NzIzNSAxMC4zODc2TDIuNjM4ODMgOC4yMTE1OVpNOC4zMDAwMSA5LjAwMDAzQzguMzAwMDEgOC42MTM0MyA4LjYxMzQxIDguMzAwMDMgOS4wMDAwMSA4LjMwMDAzSDEzQzEzLjM4NjYgOC4zMDAwMyAxMy43IDguNjEzNDMgMTMuNyA5LjAwMDAzVjEzQzEzLjcgMTMuMzg2NiAxMy4zODY2IDEzLjcgMTMgMTMuN0g5LjAwMDAxQzguNjEzNDEgMTMuNyA4LjMwMDAxIDEzLjM4NjYgOC4zMDAwMSAxM1Y5LjAwMDAzWk05LjIwMDAxIDkuMjAwMDNWMTIuOEgxMi44VjkuMjAwMDNIOS4yMDAwMVpNMTMuNDQzMiAyLjE5MzExQzEzLjYxODkgMi4wMTczNyAxMy42MTg5IDEuNzMyNDUgMTMuNDQzMiAxLjU1NjcxQzEzLjI2NzUgMS4zODA5OCAxMi45ODI2IDEuMzgwOTggMTIuODA2OCAxLjU1NjcxTDExIDMuMzYzNTNMOS4xOTMyMSAxLjU1Njc0QzkuMDE3NDggMS4zODEgOC43MzI1NSAxLjM4MSA4LjU1NjgyIDEuNTU2NzRDOC4zODEwOCAxLjczMjQ3IDguMzgxMDggMi4wMTc0IDguNTU2ODIgMi4xOTMxM0wxMC4zNjM2IDMuOTk5OTJMOC41NTY4MiA1LjgwNjcxQzguMzgxMDggNS45ODI0NSA4LjM4MTA4IDYuMjY3MzcgOC41NTY4MiA2LjQ0MzExQzguNzMyNTUgNi42MTg4NSA5LjAxNzQ4IDYuNjE4ODUgOS4xOTMyMSA2LjQ0MzExTDExIDQuNjM2MzJMMTIuODA2OCA2LjQ0MzE0QzEyLjk4MjYgNi42MTg4NyAxMy4yNjc1IDYuNjE4ODcgMTMuNDQzMiA2LjQ0MzE0QzEzLjYxODkgNi4yNjc0IDEzLjYxODkgNS45ODI0NyAxMy40NDMyIDUuODA2NzRMMTEuNjM2NCAzLjk5OTkyTDEzLjQ0MzIgMi4xOTMxMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFBuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjUgM0M0LjY3MTU3IDMgNCAzLjY3MTU3IDQgNC41QzQgNS4zMjg0MyA0LjY3MTU3IDYgNS41IDZDNi4zMjg0MyA2IDcgNS4zMjg0MyA3IDQuNUM3IDMuNjcxNTcgNi4zMjg0MyAzIDUuNSAzWk0zIDVDMy4wMTY3MSA1IDMuMDMzMjMgNC45OTkxOCAzLjA0OTUyIDQuOTk3NThDMy4yODAyMiA2LjEzOTkgNC4yODk2NyA3IDUuNSA3QzYuNzEwMzMgNyA3LjcxOTc4IDYuMTM5OSA3Ljk1MDQ4IDQuOTk3NThDNy45NjY3NyA0Ljk5OTE4IDcuOTgzMjkgNSA4IDVIMTMuNUMxMy43NzYxIDUgMTQgNC43NzYxNCAxNCA0LjVDMTQgNC4yMjM4NiAxMy43NzYxIDQgMTMuNSA0SDhDNy45ODMyOSA0IDcuOTY2NzcgNC4wMDA4MiA3Ljk1MDQ4IDQuMDAyNDJDNy43MTk3OCAyLjg2MDA5IDYuNzEwMzMgMiA1LjUgMkM0LjI4OTY3IDIgMy4yODAyMiAyLjg2MDA5IDMuMDQ5NTIgNC4wMDI0MkMzLjAzMzIzIDQuMDAwODIgMy4wMTY3MSA0IDMgNEgxLjVDMS4yMjM4NiA0IDEgNC4yMjM4NiAxIDQuNUMxIDQuNzc2MTQgMS4yMjM4NiA1IDEuNSA1SDNaTTExLjk1MDUgMTAuOTk3NkMxMS43MTk4IDEyLjEzOTkgMTAuNzEwMyAxMyA5LjUgMTNDOC4yODk2NyAxMyA3LjI4MDIyIDEyLjEzOTkgNy4wNDk1MiAxMC45OTc2QzcuMDMzMjMgMTAuOTk5MiA3LjAxNjcxIDExIDcgMTFIMS41QzEuMjIzODYgMTEgMSAxMC43NzYxIDEgMTAuNUMxIDEwLjIyMzkgMS4yMjM4NiAxMCAxLjUgMTBIN0M3LjAxNjcxIDEwIDcuMDMzMjMgMTAuMDAwOCA3LjA0OTUyIDEwLjAwMjRDNy4yODAyMiA4Ljg2MDEgOC4yODk2NyA4IDkuNSA4QzEwLjcxMDMgOCAxMS43MTk4IDguODYwMSAxMS45NTA1IDEwLjAwMjRDMTEuOTY2OCAxMC4wMDA4IDExLjk4MzMgMTAgMTIgMTBIMTMuNUMxMy43NzYxIDEwIDE0IDEwLjIyMzkgMTQgMTAuNUMxNCAxMC43NzYxIDEzLjc3NjEgMTEgMTMuNSAxMUgxMkMxMS45ODMzIDExIDExLjk2NjggMTAuOTk5MiAxMS45NTA1IDEwLjk5NzZaTTggMTAuNUM4IDkuNjcxNTcgOC42NzE1NyA5IDkuNSA5QzEwLjMyODQgOSAxMSA5LjY3MTU3IDExIDEwLjVDMTEgMTEuMzI4NCAxMC4zMjg0IDEyIDkuNSAxMkM4LjY3MTU3IDEyIDggMTEuMzI4NCA4IDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxJbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSAxLjVDNSAxLjIyMzg2IDQuNzc2MTQgMSA0LjUgMUM0LjIyMzg2IDEgNCAxLjIyMzg2IDQgMS41TDQgN0M0IDcuMDE2NzEgNC4wMDA4MiA3LjAzMzIzIDQuMDAyNDIgNy4wNDk1MkMyLjg2MDA5IDcuMjgwMjIgMiA4LjI4OTY3IDIgOS41QzIgMTAuNzEwMyAyLjg2MDA5IDExLjcxOTggNC4wMDI0MiAxMS45NTA1QzQuMDAwODIgMTEuOTY2OCA0IDExLjk4MzMgNCAxMlYxMy41QzQgMTMuNzc2MSA0LjIyMzg2IDE0IDQuNSAxNEM0Ljc3NjE0IDE0IDUgMTMuNzc2MSA1IDEzLjVWMTJDNSAxMS45ODMzIDQuOTk5MTggMTEuOTY2OCA0Ljk5NzU4IDExLjk1MDVDNi4xMzk5IDExLjcxOTggNyAxMC43MTAzIDcgOS41QzcgOC4yODk2NyA2LjEzOTkgNy4yODAyMiA0Ljk5NzU4IDcuMDQ5NTJDNC45OTkxOCA3LjAzMzIzIDUgNy4wMTY3MSA1IDdMNSAxLjVaTTExIDEuNUMxMSAxLjIyMzg2IDEwLjc3NjEgMSAxMC41IDFDMTAuMjIzOSAxIDEwIDEuMjIzODYgMTAgMS41VjNDMTAgMy4wMTY3MSAxMC4wMDA4IDMuMDMzMjMgMTAuMDAyNCAzLjA0OTUyQzguODYwMSAzLjI4MDIyIDggNC4yODk2NyA4IDUuNUM4IDYuNzEwMzMgOC44NjAxIDcuNzE5NzggMTAuMDAyNCA3Ljk1MDQ4QzEwLjAwMDggNy45NjY3NyAxMCA3Ljk4MzI5IDEwIDhWMTMuNUMxMCAxMy43NzYxIDEwLjIyMzkgMTQgMTAuNSAxNEMxMC43NzYxIDE0IDExIDEzLjc3NjEgMTEgMTMuNVY4QzExIDcuOTgzMjkgMTAuOTk5MiA3Ljk2Njc3IDEwLjk5NzYgNy45NTA0OEMxMi4xMzk5IDcuNzE5NzggMTMgNi43MTAzMyAxMyA1LjVDMTMgNC4yODk2NyAxMi4xMzk5IDMuMjgwMjIgMTAuOTk3NiAzLjA0OTUyQzEwLjk5OTIgMy4wMzMyMyAxMSAzLjAxNjcxIDExIDNWMS41Wk00LjUgOEMzLjY3MTU3IDggMyA4LjY3MTU3IDMgOS41QzMgMTAuMzI4NCAzLjY3MTU3IDExIDQuNSAxMUM1LjMyODQzIDExIDYgMTAuMzI4NCA2IDkuNUM2IDguNjcxNTcgNS4zMjg0MyA4IDQuNSA4Wk05IDUuNUM5IDQuNjcxNTcgOS42NzE1NyA0IDEwLjUgNEMxMS4zMjg0IDQgMTIgNC42NzE1NyAxMiA1LjVDMTIgNi4zMjg0MyAxMS4zMjg0IDcgMTAuNSA3QzkuNjcxNTcgNyA5IDYuMzI4NDMgOSA1LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxBbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4yNTkyNSAzLjE2NjY3TDQuMzcwMzYgNS4zMzMzM1YxTDcuMjU5MjUgMy4xNjY2N1pNMSA4LjIyMjIyTDMuODg4ODkgNi4wNTU1NUwxIDMuODg4ODlWOC4yMjIyMlpNMSAxNEwzLjg4ODg5IDExLjgzMzNMMSA5LjY2NjY2VjE0Wk03Ljc0MDcyIDguMjIyMjJMMTAuNjI5NiA2LjA1NTU1TDcuNzQwNzIgMy44ODg4OVY4LjIyMjIyWk0xNCAzLjE2NjY3TDExLjExMTEgNS4zMzMzM1YxTDE0IDMuMTY2NjdaTTExLjExMTEgMTEuMTExMUwxNCA4Ljk0NDQ0TDExLjExMTEgNi43Nzc3N1YxMS4xMTExWk0zLjg4ODg5IDExLjExMTFMMSA4Ljk0NDQ0TDMuODg4ODkgNi43Nzc3N1YxMS4xMTExWk00LjM3MDM2IDYuMDU1NTVMNy4yNTkyNSA4LjIyMjIyVjMuODg4ODlMNC4zNzAzNiA2LjA1NTU1Wk0zLjg4ODg5IDUuMzMzMzNMMSAzLjE2NjY3TDMuODg4ODkgMVY1LjMzMzMzWk03Ljc0MDcyIDMuMTY2NjdMMTAuNjI5NiA1LjMzMzMzVjFMNy43NDA3MiAzLjE2NjY3Wk0xNCA4LjIyMjIyTDExLjExMTEgNi4wNTU1NUwxNCAzLjg4ODg5VjguMjIyMjJaTTExLjExMTEgMTEuODMzM0wxNCAxNFY5LjY2NjY2TDExLjExMTEgMTEuODMzM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFRuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjg5OTk4IDAuNDk5OTc2QzIuODk5OTggMC4yNzkwNjIgMi43MjA4OSAwLjA5OTk3NTYgMi40OTk5OCAwLjA5OTk3NTZDMi4yNzkwNiAwLjA5OTk3NTYgMi4wOTk5OCAwLjI3OTA2MiAyLjA5OTk4IDAuNDk5OTc2VjEuMDk5OThIMS40OTk5OEMxLjI3OTA2IDEuMDk5OTggMS4wOTk5OCAxLjI3OTA2IDEuMDk5OTggMS40OTk5OEMxLjA5OTk4IDEuNzIwODkgMS4yNzkwNiAxLjg5OTk4IDEuNDk5OTggMS44OTk5OEgyLjA5OTk4VjIuNDk5OThDMi4wOTk5OCAyLjcyMDg5IDIuMjc5MDYgMi44OTk5OCAyLjQ5OTk4IDIuODk5OThDMi43MjA4OSAyLjg5OTk4IDIuODk5OTggMi43MjA4OSAyLjg5OTk4IDIuNDk5OThWMS44OTk5OEgzLjQ5OTk4QzMuNzIwODkgMS44OTk5OCAzLjg5OTk4IDEuNzIwODkgMy44OTk5OCAxLjQ5OTk4QzMuODk5OTggMS4yNzkwNiAzLjcyMDg5IDEuMDk5OTggMy40OTk5OCAxLjA5OTk4SDIuODk5OThWMC40OTk5NzZaTTUuODk5OTggMy40OTk5OEM1Ljg5OTk4IDMuMjc5MDYgNS43MjA4OSAzLjA5OTk4IDUuNDk5OTggMy4wOTk5OEM1LjI3OTA2IDMuMDk5OTggNS4wOTk5OCAzLjI3OTA2IDUuMDk5OTggMy40OTk5OFY0LjA5OTk4SDQuNDk5OThDNC4yNzkwNiA0LjA5OTk4IDQuMDk5OTggNC4yNzkwNiA0LjA5OTk4IDQuNDk5OThDNC4wOTk5OCA0LjcyMDg5IDQuMjc5MDYgNC44OTk5OCA0LjQ5OTk4IDQuODk5OThINS4wOTk5OFY1LjQ5OTk4QzUuMDk5OTggNS43MjA4OSA1LjI3OTA2IDUuODk5OTggNS40OTk5OCA1Ljg5OTk4QzUuNzIwODkgNS44OTk5OCA1Ljg5OTk4IDUuNzIwODkgNS44OTk5OCA1LjQ5OTk4VjQuODk5OThINi40OTk5OEM2LjcyMDg5IDQuODk5OTggNi44OTk5OCA0LjcyMDg5IDYuODk5OTggNC40OTk5OEM2Ljg5OTk4IDQuMjc5MDYgNi43MjA4OSA0LjA5OTk4IDYuNDk5OTggNC4wOTk5OEg1Ljg5OTk4VjMuNDk5OThaTTEuODk5OTggNi40OTk5OEMxLjg5OTk4IDYuMjc5MDYgMS43MjA4OSA2LjA5OTk4IDEuNDk5OTggNi4wOTk5OEMxLjI3OTA2IDYuMDk5OTggMS4wOTk5OCA2LjI3OTA2IDEuMDk5OTggNi40OTk5OFY3LjA5OTk4SDAuNDk5OTc2QzAuMjc5MDYyIDcuMDk5OTggMC4wOTk5NzU2IDcuMjc5MDYgMC4wOTk5NzU2IDcuNDk5OThDMC4wOTk5NzU2IDcuNzIwODkgMC4yNzkwNjIgNy44OTk5OCAwLjQ5OTk3NiA3Ljg5OTk4SDEuMDk5OThWOC40OTk5OEMxLjA5OTk4IDguNzIwODkgMS4yNzkwNiA4Ljg5OTk3IDEuNDk5OTggOC44OTk5N0MxLjcyMDg5IDguODk5OTcgMS44OTk5OCA4LjcyMDg5IDEuODk5OTggOC40OTk5OFY3Ljg5OTk4SDIuNDk5OThDMi43MjA4OSA3Ljg5OTk4IDIuODk5OTggNy43MjA4OSAyLjg5OTk4IDcuNDk5OThDMi44OTk5OCA3LjI3OTA2IDIuNzIwODkgNy4wOTk5OCAyLjQ5OTk4IDcuMDk5OThIMS44OTk5OFY2LjQ5OTk4Wk04LjU0NDA2IDAuOTgxODRMOC4yNDYxOCAwLjk0MTU4NkM4LjAzMjc1IDAuOTE3Njc2IDcuOTA2OTIgMS4xNjU1IDguMDI5MzYgMS4zNDE5NEM4LjE3MDEzIDEuNTQ0NzkgOC4yOTk4MSAxLjc1NTkyIDguNDE3NTQgMS45NzQ0NUM4LjkxODc4IDIuOTA0ODUgOS4yMDMyMiAzLjk2OTMyIDkuMjAzMjIgNS4xMDAyMkM5LjIwMzIyIDguMzcyMDEgNi44MjI0NyAxMS4wODc4IDMuNjk4ODcgMTEuNjA5N0MzLjQ1NzM2IDExLjY1IDMuMjA5ODggMTEuNjc3MiAyLjk2MDA4IDExLjY5MDZDMi43NDU2MyAxMS43MDIgMi42MjcyOSAxMS45NTM1IDIuNzc3MjEgMTIuMTA3MkMyLjg0NTUxIDEyLjE3NzMgMi45MTUzNSAxMi4yNDU4IDIuOTg2NjcgMTIuMzEyOEwzLjA1ODgzIDEyLjM3OTVMMy4zMTg4MyAxMi42MDQ1TDMuNTA2ODQgMTIuNzUzMkwzLjYyNzk2IDEyLjg0MzNMMy44MTQ5MSAxMi45NzQyTDMuOTkwNzkgMTMuMDg5QzQuMTExNzUgMTMuMTY1MSA0LjIzNTM2IDEzLjIzNzUgNC4zNjE1NyAxMy4zMDU5TDQuNjI0OTYgMTMuNDQxMkw0Ljg4NTUzIDEzLjU2MDdMNS4xODgzNyAxMy42ODI4TDUuNDMxNjkgMTMuNzY4NkM1LjU2NTY0IDEzLjgxMjggNS43MDE0OSAxMy44NTI5IDUuODM4NTcgMTMuODg4NUM1Ljk0MjYyIDEzLjkxNTUgNi4wNDc2NyAxMy45NDAxIDYuMTU0MDUgMTMuOTYyMkM2LjI3OTkzIDEzLjk4ODMgNi40MDcxMyAxNC4wMTA5IDYuNTM1NDQgMTQuMDI5OEw2Ljg1MjQxIDE0LjA2ODVMNy4xMTkzNCAxNC4wODkyQzcuMjQ2MzcgMTQuMDk2NSA3LjM3NDM2IDE0LjEwMDIgNy41MDMyMiAxNC4xMDAyQzExLjE0ODMgMTQuMTAwMiAxNC4xMDMyIDExLjE0NTMgMTQuMTAzMiA3LjUwMDIzQzE0LjEwMzIgNy4yNTA0NCAxNC4wODkzIDcuMDAzODkgMTQuMDYyMyA2Ljc2MTMxTDE0LjAyNTUgNi40ODQwN0MxMy45OTEgNi4yNjA4MyAxMy45NDUzIDYuMDQxMjkgMTMuODg5MSA1LjgyNjQyQzEzLjgyMTMgNS41NjcwOSAxMy43MzgyIDUuMzEzOTggMTMuNjQwOSA1LjA2ODgxTDEzLjUyNzkgNC44MDEzMkwxMy40NTA3IDQuNjM1NDJMMTMuMzc2NiA0LjQ4NjY2QzEzLjIxNzggNC4xNzc3MyAxMy4wMzUzIDMuODgyOTUgMTIuODMxMiAzLjYwNDIzTDEyLjY3ODIgMy40MDM1MkwxMi40NzkzIDMuMTY0MzJMMTIuMzE1NyAyLjk4MzYxTDEyLjE5NjEgMi44NTk1MUwxMi4wMzU1IDIuNzAyNDZMMTEuODEzNCAyLjUwMTg0TDExLjQ5MjUgMi4yNDE5MUwxMS4yNDgzIDIuMDY0OThMMTAuOTU2MiAxLjg3NDQ2TDEwLjYzNDYgMS42ODg5NEwxMC4zMDczIDEuNTIzNzhMMTAuMTkzOCAxLjQ3MTc2TDkuOTU0ODggMS4zNzA2TDkuNjc3OTEgMS4yNjY5TDkuNDI1NjYgMS4xODQ2TDkuMTAwNzUgMS4wOTQ4OUw4LjgzNTk5IDEuMDM0ODZMOC41NDQwNiAwLjk4MTg0Wk0xMC40MDMyIDUuMzAwMjNDMTAuNDAzMiA0LjI3NTg4IDEwLjIwMDIgMy4yOTgyOSA5LjgzMjQ0IDIuNDA2MDRDMTEuNzYyMyAzLjI4OTk1IDEzLjEwMzIgNS4yMzg2MiAxMy4xMDMyIDcuNTAwMjNDMTMuMTAzMiAxMC41OTMgMTAuNTk2IDEzLjEwMDIgNy41MDMyMiAxMy4xMDAyQzYuNjM2NDYgMTMuMTAwMiA1LjgxNTk3IDEyLjkwMzYgNS4wODM1NSAxMi41NTIyQzYuNTQxOSAxMi4wOTQxIDcuODEwODEgMTEuMjA4MiA4Ljc0MzIyIDEwLjA0MTZDOC44Nzk2MyAxMC4yMjg0IDkuMTAwMjggMTAuMzQ5NyA5LjM0OTI4IDEwLjM0OTdDOS43NjM0OSAxMC4zNDk3IDEwLjA5OTMgMTAuMDEzOSAxMC4wOTkzIDkuNTk5NzFDMTAuMDk5MyA5LjI0MjU2IDkuODQ5NjUgOC45NDM3MyA5LjUxNTM1IDguODY4MTZDOS41Nzc0MSA4Ljc1MTY1IDkuNjM2NTMgOC42MzMzNCA5LjY5MjYgOC41MTMzMkM5Ljg4MzU4IDguNjMxNjMgMTAuMTA4OCA4LjY5OTkzIDEwLjM1IDguNjk5OTNDMTEuMDQwMyA4LjY5OTkzIDExLjYgOC4xNDAyOCAxMS42IDcuNDQ5OTNDMTEuNiA2Ljc1OTc2IDExLjA0MDYgNi4yMDAyNCAxMC4zNTA1IDYuMTk5OTNDMTAuMzg1MyA1LjkwNDg3IDEwLjQwMzIgNS42MDQ2NCAxMC40MDMyIDUuMzAwMjNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy44MTgxOSAwLjkzMTc5QzcuNjQyNDUgMC43NTYwNTQgNy4zNTc1MyAwLjc1NjA1NCA3LjE4MTc5IDAuOTMxNzlMNS40MzE3OSAyLjY4MTc5QzUuMjU2MDUgMi44NTc1MyA1LjI1NjA1IDMuMTQyNDUgNS40MzE3OSAzLjMxODE5QzUuNjA3NTMgMy40OTM5MiA1Ljg5MjQ1IDMuNDkzOTIgNi4wNjgxOSAzLjMxODE5TDYuOTk5OTkgMi4zODYzOFY1LjQ5OTk5QzYuOTk5OTkgNS43NzYxMyA3LjIyMzg1IDUuOTk5OTkgNy40OTk5OSA1Ljk5OTk5QzcuNzc2MTMgNS45OTk5OSA3Ljk5OTk5IDUuNzc2MTMgNy45OTk5OSA1LjQ5OTk5VjIuMzg2MzhMOC45MzE3OSAzLjMxODE5QzkuMTA3NTMgMy40OTM5MiA5LjM5MjQ1IDMuNDkzOTIgOS41NjgxOSAzLjMxODE5QzkuNzQzOTIgMy4xNDI0NSA5Ljc0MzkyIDIuODU3NTMgOS41NjgxOSAyLjY4MTc5TDcuODE4MTkgMC45MzE3OVpNNy45OTk5OSA5LjQ5OTk5QzcuOTk5OTkgOS4yMjM4NSA3Ljc3NjEzIDguOTk5OTkgNy40OTk5OSA4Ljk5OTk5QzcuMjIzODUgOC45OTk5OSA2Ljk5OTk5IDkuMjIzODUgNi45OTk5OSA5LjQ5OTk5VjEyLjYxMzZMNi4wNjgxOSAxMS42ODE4QzUuODkyNDUgMTEuNTA2MSA1LjYwNzUzIDExLjUwNjEgNS40MzE3OSAxMS42ODE4QzUuMjU2MDUgMTEuODU3NSA1LjI1NjA1IDEyLjE0MjQgNS40MzE3OSAxMi4zMTgyTDcuMTgxNzkgMTQuMDY4MkM3LjM1NzUzIDE0LjI0MzkgNy42NDI0NSAxNC4yNDM5IDcuODE4MTkgMTQuMDY4Mkw5LjU2ODE5IDEyLjMxODJDOS43NDM5MiAxMi4xNDI0IDkuNzQzOTIgMTEuODU3NSA5LjU2ODE5IDExLjY4MThDOS4zOTI0NSAxMS41MDYxIDkuMTA3NTMgMTEuNTA2MSA4LjkzMTc5IDExLjY4MThMNy45OTk5OSAxMi42MTM2VjkuNDk5OTlaTTguOTk5OTkgNy40OTk5OUM4Ljk5OTk5IDcuMjIzODUgOS4yMjM4NSA2Ljk5OTk5IDkuNDk5OTkgNi45OTk5OUgxMi42MTM2TDExLjY4MTggNi4wNjgxOUMxMS41MDYxIDUuODkyNDUgMTEuNTA2MSA1LjYwNzUzIDExLjY4MTggNS40MzE3OUMxMS44NTc1IDUuMjU2MDUgMTIuMTQyNCA1LjI1NjA1IDEyLjMxODIgNS40MzE3OUwxNC4wNjgyIDcuMTgxNzlDMTQuMjQzOSA3LjM1NzUzIDE0LjI0MzkgNy42NDI0NSAxNC4wNjgyIDcuODE4MTlMMTIuMzE4MiA5LjU2ODE5QzEyLjE0MjQgOS43NDM5MiAxMS44NTc1IDkuNzQzOTIgMTEuNjgxOCA5LjU2ODE5QzExLjUwNjEgOS4zOTI0NSAxMS41MDYxIDkuMTA3NTMgMTEuNjgxOCA4LjkzMTc5TDEyLjYxMzYgNy45OTk5OUg5LjQ5OTk5QzkuMjIzODUgNy45OTk5OSA4Ljk5OTk5IDcuNzc2MTMgOC45OTk5OSA3LjQ5OTk5Wk0zLjMxODE5IDYuMDY4MTlMMi4zODYzOCA2Ljk5OTk5SDUuNDk5OTlDNS43NzYxMyA2Ljk5OTk5IDUuOTk5OTkgNy4yMjM4NSA1Ljk5OTk5IDcuNDk5OTlDNS45OTk5OSA3Ljc3NjEzIDUuNzc2MTMgNy45OTk5OSA1LjQ5OTk5IDcuOTk5OTlIMi4zODYzOEwzLjMxODE5IDguOTMxNzlDMy40OTM5MiA5LjEwNzUzIDMuNDkzOTIgOS4zOTI0NSAzLjMxODE5IDkuNTY4MTlDMy4xNDI0NSA5Ljc0MzkyIDIuODU3NTMgOS43NDM5MiAyLjY4MTc5IDkuNTY4MTlMMC45MzE3OSA3LjgxODE5QzAuNzU2MDU0IDcuNjQyNDUgMC43NTYwNTQgNy4zNTc1MyAwLjkzMTc5IDcuMTgxNzlMMi42ODE3OSA1LjQzMTc5QzIuODU3NTMgNS4yNTYwNSAzLjE0MjQ1IDUuMjU2MDUgMy4zMTgxOSA1LjQzMTc5QzMuNDkzOTIgNS42MDc1MyAzLjQ5MzkyIDUuODkyNDUgMy4zMTgxOSA2LjA2ODE5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMjU3ODEgMy4xMTY4NEMzLjY3NzcxIDMuNDU3OTYgMy44MzUyMyAzLjQzMTkzIDQuNjIzNjkgMy4zNzkzM0wxMi4wNTcxIDIuOTMyOTlDMTIuMjE0NyAyLjkzMjk5IDEyLjA4MzYgMi43NzU3MSAxMi4wMzExIDIuNzQ5NTdMMTAuNzk2NSAxLjg1NzExQzEwLjU2IDEuNjczNDcgMTAuMjQ0OCAxLjQ2MzE1IDkuNjQwODMgMS41MTU3NkwyLjQ0MzA4IDIuMDQwNzRDMi4xODA1OSAyLjA2Njc3IDIuMTI4MTUgMi4xOTgwMSAyLjIzMjcgMi4zMDMyMkwzLjI1NzgxIDMuMTE2ODRaTTMuNzA0MSA0Ljg0OTE3VjEyLjY3MDRDMy43MDQxIDEzLjA5MDcgMy45MTQxNSAxMy4yNDggNC4zODY5MyAxMy4yMjJMMTIuNTU2MiAxMi43NDkzQzEzLjAyOTIgMTIuNzIzMyAxMy4wODE5IDEyLjQzNDEgMTMuMDgxOSAxMi4wOTI3VjQuMzIzOTdDMTMuMDgxOSAzLjk4MzA2IDEyLjk1MDggMy43OTkyMSAxMi42NjEyIDMuODI1NDVMNC4xMjQyMiA0LjMyMzk3QzMuODA5MTggNC4zNTA0NCAzLjcwNDEgNC41MDgwMyAzLjcwNDEgNC44NDkxN1pNMTEuNzY4OCA1LjI2ODcyQzExLjgyMTIgNS41MDUxOCAxMS43Njg4IDUuNzQxNDIgMTEuNTMxOSA1Ljc2Nzk5TDExLjEzODMgNS44NDY0MVYxMS42MjA1QzEwLjc5NjUgMTEuODA0MiAxMC40ODE0IDExLjkwOTIgMTAuMjE4OCAxMS45MDkyQzkuNzk4MzUgMTEuOTA5MiA5LjY5MzA1IDExLjc3NzkgOS4zNzgxMiAxMS4zODQ0TDYuODAzNDUgNy4zNDI0OVYxMS4yNTMyTDcuNjE4MTYgMTEuNDM3QzcuNjE4MTYgMTEuNDM3IDcuNjE4MTYgMTEuOTA5MiA2Ljk2MDg2IDExLjkwOTJMNS4xNDg3OSAxMi4wMTQzQzUuMDk2MTUgMTEuOTA5MiA1LjE0ODc5IDExLjY0NyA1LjMzMjU5IDExLjU5NDRMNS44MDU0NiAxMS40NjM0VjYuMjkyNzZMNS4xNDg5IDYuMjQwMTVDNS4wOTYyNSA2LjAwMzY5IDUuMjI3MzkgNS42NjI3OCA1LjU5NTQgNS42MzYzMUw3LjUzOTM1IDUuNTA1MjhMMTAuMjE4OCA5LjU5OThWNS45Nzc2NUw5LjUzNTY0IDUuODk5MjRDOS40ODMyIDUuNjEwMTggOS42OTMwNSA1LjQwMDI4IDkuOTU1NzYgNS4zNzQyNUwxMS43Njg4IDUuMjY4NzJaTTEuODM4NzQgMS4zMzIxMkw5LjMyNTU3IDAuNzgwNzg3QzEwLjI0NSAwLjcwMTkzMiAxMC40ODE1IDAuNzU0NzUzIDExLjA1OTQgMS4xNzQ1MkwxMy40NDkyIDIuODU0MjRDMTMuODQzNiAzLjE0MzA5IDEzLjk3NSAzLjIyMTczIDEzLjk3NSAzLjUzNjYxVjEyLjc0OTNDMTMuOTc1IDEzLjMyNjYgMTMuNzY0NyAxMy42NjgxIDEzLjAyOTMgMTMuNzIwM0w0LjMzNDkyIDE0LjI0NTRDMy43ODI5MSAxNC4yNzE3IDMuNTIwMTkgMTQuMTkzIDMuMjMxMTEgMTMuODI1M0wxLjQ3MTE2IDExLjU0MTlDMS4xNTU4IDExLjEyMTYgMS4wMjQ2NiAxMC44MDcxIDEuMDI0NjYgMTAuNDM5MlYyLjI1MDQxQzEuMDI0NjYgMS43NzgyNSAxLjIzNTA0IDEuMzg0NDEgMS44Mzg3NCAxLjMzMjEyWlwiLGZpbGw6bn0pKX0sVm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAxLjVDNC41IDQuMjUgMyA2LjUgMyA5QzMgMTEuNDg1MyA1LjAxNDcyIDEzLjUgNy41IDEzLjVDOS45ODUyOCAxMy41IDEyIDExLjQ4NTMgMTIgOUMxMiA2LjUgMTAuNSA0LjI1IDcuNSAxLjVaTTExIDlDMTEgNy4xMTIwMyA5Ljk3MzE1IDUuMjcxOTUgNy41IDIuODczNTdDNS4wMjY4NiA1LjI3MTk1IDQgNy4xMTIwMyA0IDlDNCAxMC45MzMgNS41NjcgMTIuNSA3LjUgMTIuNUM5LjQzMyAxMi41IDExIDEwLjkzMyAxMSA5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNDk5ODUgMS4xMDAwMUMzLjI3ODk0IDEuMTAwMDEgMy4wOTk4NSAxLjI3OTA5IDMuMDk5ODUgMS41MDAwMUMzLjA5OTg1IDEuNzIwOTIgMy4yNzg5NCAxLjkwMDAxIDMuNDk5ODUgMS45MDAwMUgxMS40OTk5QzExLjcyMDggMS45MDAwMSAxMS44OTk5IDEuNzIwOTIgMTEuODk5OSAxLjUwMDAxQzExLjg5OTkgMS4yNzkwOSAxMS43MjA4IDEuMTAwMDEgMTEuNDk5OSAxLjEwMDAxSDMuNDk5ODVaTTQuOTk5OTUgNC4yNTAwMUM0Ljk5OTk1IDMuOTczODcgNC43NzYwOSAzLjc1MDAxIDQuNDk5OTUgMy43NTAwMUM0LjIyMzgxIDMuNzUwMDEgMy45OTk5NSAzLjk3Mzg3IDMuOTk5OTUgNC4yNTAwMVY5LjU1MDAxQzMuOTk5OTUgMTEuNDgzIDUuNTY2OTUgMTMuMDUgNy40OTk5NSAxMy4wNUM5LjQzMjk1IDEzLjA1IDExIDExLjQ4MyAxMSA5LjU1MDAxVjQuMjUwMDFDMTEgMy45NzM4NyAxMC43NzYxIDMuNzUwMDEgMTAuNSAzLjc1MDAxQzEwLjIyMzggMy43NTAwMSA5Ljk5OTk1IDMuOTczODcgOS45OTk5NSA0LjI1MDAxVjkuNTUwMDFDOS45OTk5NSAxMC45MzA3IDguODgwNjYgMTIuMDUgNy40OTk5NSAxMi4wNUM2LjExOTI0IDEyLjA1IDQuOTk5OTUgMTAuOTMwNyA0Ljk5OTk1IDkuNTUwMDFWNC4yNTAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjg1NzE0IDJIMTIuMTQyOUMxMi42MTYyIDIgMTMgMi4zODM3NiAxMyAyLjg1NzE0VjEyLjE0MjlDMTMgMTIuNjE2MiAxMi42MTYyIDEzIDEyLjE0MjkgMTNIMi44NTcxNEMyLjM4Mzc2IDEzIDIgMTIuNjE2MiAyIDEyLjE0MjlWMi44NTcxNEMyIDIuMzgzNzYgMi4zODM3NiAyIDIuODU3MTQgMlpNMSAyLjg1NzE0QzEgMS44MzE0NyAxLjgzMTQ3IDEgMi44NTcxNCAxSDEyLjE0MjlDMTMuMTY4NSAxIDE0IDEuODMxNDcgMTQgMi44NTcxNFYxMi4xNDI5QzE0IDEzLjE2ODUgMTMuMTY4NSAxNCAxMi4xNDI5IDE0SDIuODU3MTRDMS44MzE0NyAxNCAxIDEzLjE2ODUgMSAxMi4xNDI5VjIuODU3MTRaTTcuNDk5ODggNS4wMDAxMkM3Ljc3NjAyIDUuMDAwMTIgNy45OTk4OCA0Ljc3NjI2IDcuOTk5ODggNC41MDAxMkM3Ljk5OTg4IDQuMjIzOTggNy43NzYwMiA0LjAwMDEyIDcuNDk5ODggNC4wMDAxMkM3LjIyMzc0IDQuMDAwMTIgNi45OTk4OCA0LjIyMzk4IDYuOTk5ODggNC41MDAxMkM2Ljk5OTg4IDQuNzc2MjYgNy4yMjM3NCA1LjAwMDEyIDcuNDk5ODggNS4wMDAxMlpNNC40OTk4OCAxMS4wMDAxQzQuNzc2MDIgMTEuMDAwMSA0Ljk5OTg4IDEwLjc3NjMgNC45OTk4OCAxMC41MDAxQzQuOTk5ODggMTAuMjI0IDQuNzc2MDIgMTAuMDAwMSA0LjQ5OTg4IDEwLjAwMDFDNC4yMjM3NCAxMC4wMDAxIDMuOTk5ODggMTAuMjI0IDMuOTk5ODggMTAuNTAwMUMzLjk5OTg4IDEwLjc3NjMgNC4yMjM3NCAxMS4wMDAxIDQuNDk5ODggMTEuMDAwMVpNNC45OTk4OCA3LjUwMDEyQzQuOTk5ODggNy43NzYyNiA0Ljc3NjAyIDguMDAwMTIgNC40OTk4OCA4LjAwMDEyQzQuMjIzNzQgOC4wMDAxMiAzLjk5OTg4IDcuNzc2MjYgMy45OTk4OCA3LjUwMDEyQzMuOTk5ODggNy4yMjM5OCA0LjIyMzc0IDcuMDAwMTIgNC40OTk4OCA3LjAwMDEyQzQuNzc2MDIgNy4wMDAxMiA0Ljk5OTg4IDcuMjIzOTggNC45OTk4OCA3LjUwMDEyWk00LjQ5OTg4IDUuMDAwMTJDNC43NzYwMiA1LjAwMDEyIDQuOTk5ODggNC43NzYyNiA0Ljk5OTg4IDQuNTAwMTJDNC45OTk4OCA0LjIyMzk4IDQuNzc2MDIgNC4wMDAxMiA0LjQ5OTg4IDQuMDAwMTJDNC4yMjM3NCA0LjAwMDEyIDMuOTk5ODggNC4yMjM5OCAzLjk5OTg4IDQuNTAwMTJDMy45OTk4OCA0Ljc3NjI2IDQuMjIzNzQgNS4wMDAxMiA0LjQ5OTg4IDUuMDAwMTJaTTEwLjk5OTkgMTAuNTAwMUMxMC45OTk5IDEwLjc3NjMgMTAuNzc2IDExLjAwMDEgMTAuNDk5OSAxMS4wMDAxQzEwLjIyMzcgMTEuMDAwMSA5Ljk5OTg4IDEwLjc3NjMgOS45OTk4OCAxMC41MDAxQzkuOTk5ODggMTAuMjI0IDEwLjIyMzcgMTAuMDAwMSAxMC40OTk5IDEwLjAwMDFDMTAuNzc2IDEwLjAwMDEgMTAuOTk5OSAxMC4yMjQgMTAuOTk5OSAxMC41MDAxWk0xMC40OTk5IDguMDAwMTJDMTAuNzc2IDguMDAwMTIgMTAuOTk5OSA3Ljc3NjI2IDEwLjk5OTkgNy41MDAxMkMxMC45OTk5IDcuMjIzOTggMTAuNzc2IDcuMDAwMTIgMTAuNDk5OSA3LjAwMDEyQzEwLjIyMzcgNy4wMDAxMiA5Ljk5OTg4IDcuMjIzOTggOS45OTk4OCA3LjUwMDEyQzkuOTk5ODggNy43NzYyNiAxMC4yMjM3IDguMDAwMTIgMTAuNDk5OSA4LjAwMDEyWk0xMC45OTk5IDQuNTAwMTJDMTAuOTk5OSA0Ljc3NjI2IDEwLjc3NiA1LjAwMDEyIDEwLjQ5OTkgNS4wMDAxMkMxMC4yMjM3IDUuMDAwMTIgOS45OTk4OCA0Ljc3NjI2IDkuOTk5ODggNC41MDAxMkM5Ljk5OTg4IDQuMjIzOTggMTAuMjIzNyA0LjAwMDEyIDEwLjQ5OTkgNC4wMDAxMkMxMC43NzYgNC4wMDAxMiAxMC45OTk5IDQuMjIzOTggMTAuOTk5OSA0LjUwMDEyWk03LjQ5OTg4IDExLjAwMDFDNy43NzYwMiAxMS4wMDAxIDcuOTk5ODggMTAuNzc2MyA3Ljk5OTg4IDEwLjUwMDFDNy45OTk4OCAxMC4yMjQgNy43NzYwMiAxMC4wMDAxIDcuNDk5ODggMTAuMDAwMUM3LjIyMzc0IDEwLjAwMDEgNi45OTk4OCAxMC4yMjQgNi45OTk4OCAxMC41MDAxQzYuOTk5ODggMTAuNzc2MyA3LjIyMzc0IDExLjAwMDEgNy40OTk4OCAxMS4wMDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sJG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuMjAzMDcgMS4wNDMxMkMxLjAwNDgxIDAuOTU0OTk4IDAuNzcyMzQgMS4wMDQ4IDAuNjI3NTc3IDEuMTY2NDFDMC40ODI4MTMgMS4zMjgwMiAwLjQ1ODc5NCAxLjU2NDU1IDAuNTY4MTE2IDEuNzUxOTZMMy45MjExNSA3LjUwMDAyTDAuNTY4MTE2IDEzLjI0ODFDMC40NTg3OTQgMTMuNDM1NSAwLjQ4MjgxMyAxMy42NzIgMC42Mjc1NzcgMTMuODMzNkMwLjc3MjM0IDEzLjk5NTIgMS4wMDQ4MSAxNC4wNDUgMS4yMDMwNyAxMy45NTY5TDE0LjcwMzEgNy45NTY5MkMxNC44ODM2IDcuODc2NjcgMTUgNy42OTc2MSAxNSA3LjUwMDAyQzE1IDcuMzAyNDIgMTQuODgzNiA3LjEyMzM2IDE0LjcwMzEgNy4wNDMxMUwxLjIwMzA3IDEuMDQzMTJaTTQuODQ1NTIgNy4xMDAwMkwyLjIxMjM0IDIuNTg2TDEzLjI2ODkgNy41MDAwMkwyLjIxMjM0IDEyLjQxNEw0Ljg0NTUyIDcuOTAwMDJIOUM5LjIyMDkxIDcuOTAwMDIgOS40IDcuNzIwOTQgOS40IDcuNTAwMDJDOS40IDcuMjc5MTEgOS4yMjA5MSA3LjEwMDAyIDkgNy4xMDAwMkg0Ljg0NTUyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuMDQ5OTUgMi43NDk5OEM2LjA0OTk1IDIuNDQ2MjMgNS44MDM3MSAyLjE5OTk4IDUuNDk5OTUgMi4xOTk5OEM1LjE5NjE5IDIuMTk5OTggNC45NDk5NSAyLjQ0NjIzIDQuOTQ5OTUgMi43NDk5OFYxMi4yNUM0Ljk0OTk1IDEyLjU1MzcgNS4xOTYxOSAxMi44IDUuNDk5OTUgMTIuOEM1LjgwMzcxIDEyLjggNi4wNDk5NSAxMi41NTM3IDYuMDQ5OTUgMTIuMjVWMi43NDk5OFpNMTAuMDUgMi43NDk5OEMxMC4wNSAyLjQ0NjIzIDkuODAzNzEgMi4xOTk5OCA5LjQ5OTk1IDIuMTk5OThDOS4xOTYxOSAyLjE5OTk4IDguOTQ5OTUgMi40NDYyMyA4Ljk0OTk1IDIuNzQ5OThWMTIuMjVDOC45NDk5NSAxMi41NTM3IDkuMTk2MTkgMTIuOCA5LjQ5OTk1IDEyLjhDOS44MDM3MSAxMi44IDEwLjA1IDEyLjU1MzcgMTAuMDUgMTIuMjVWMi43NDk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEZuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS44NTM2IDEuMTQ2NDVDMTEuNjU4MyAwLjk1MTE4NCAxMS4zNDE3IDAuOTUxMTg0IDExLjE0NjUgMS4xNDY0NUwzLjcxNDU1IDguNTc4MzZDMy42MjQ1OSA4LjY2ODMyIDMuNTUyNjMgOC43NzQ2MSAzLjUwMjUxIDguODkxNTVMMi4wNDA0NCAxMi4zMDNDMS45NTk5IDEyLjQ5MSAyLjAwMTg5IDEyLjcwOSAyLjE0NjQ2IDEyLjg1MzZDMi4yOTEwMyAxMi45OTgxIDIuNTA5MDUgMTMuMDQwMSAyLjY5Njk3IDEyLjk1OTZMNi4xMDg0NyAxMS40OTc1QzYuMjI1NCAxMS40NDc0IDYuMzMxNyAxMS4zNzU0IDYuNDIxNjYgMTEuMjg1NUwxMy44NTM2IDMuODUzNTVDMTQuMDQ4OCAzLjY1ODI5IDE0LjA0ODggMy4zNDE3MSAxMy44NTM2IDMuMTQ2NDVMMTEuODUzNiAxLjE0NjQ1Wk00LjQyMTY2IDkuMjg1NDdMMTEuNSAyLjIwNzExTDEyLjc5MjkgMy41TDUuNzE0NTUgMTAuNTc4NEw0LjIxOTI0IDExLjIxOTJMMy43ODA4MSAxMC43ODA4TDQuNDIxNjYgOS4yODU0N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFVuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi4xNDY0IDEuMTQ2NDVDMTIuMzQxNyAwLjk1MTE4NCAxMi42NTgzIDAuOTUxMTg0IDEyLjg1MzUgMS4xNDY0NUwxNC44NTM1IDMuMTQ2NDVDMTUuMDQ4OCAzLjM0MTcxIDE1LjA0ODggMy42NTgyOSAxNC44NTM1IDMuODUzNTVMMTAuOTEwOSA3Ljc5NjE4QzEwLjgzNDkgNy44NzIxOCAxMC43NDcxIDcuOTM1NDMgMTAuNjUxIDcuOTgzNUw2LjcyMzU5IDkuOTQ3MjFDNi41MzEwOSAxMC4wNDM1IDYuMjk4NjEgMTAuMDA1NyA2LjE0NjQzIDkuODUzNTVDNS45OTQyNSA5LjcwMTM3IDUuOTU2NTIgOS40Njg4OSA2LjA1Mjc3IDkuMjc2MzlMOC4wMTY0OCA1LjM0ODk3QzguMDY0NTUgNS4yNTI4MyA4LjEyNzggNS4xNjUwNyA4LjIwMzggNS4wODkwN0wxMi4xNDY0IDEuMTQ2NDVaTTEyLjUgMi4yMDcxMUw4LjkxMDkxIDUuNzk2MThMNy44NzI2NiA3Ljg3MjY3TDguMTI3MzEgOC4xMjczMkwxMC4yMDM4IDcuMDg5MDdMMTMuNzkyOSAzLjVMMTIuNSAyLjIwNzExWk05Ljk5OTk4IDJMOC45OTk5OCAzSDQuOUM0LjQ3MTcxIDMgNC4xODA1NiAzLjAwMDM5IDMuOTU1NTIgMy4wMTg3N0MzLjczNjMxIDMuMDM2NjggMy42MjQyMSAzLjA2OTE1IDMuNTQ2MDEgMy4xMDg5OUMzLjM1Nzg1IDMuMjA0ODcgMy4yMDQ4NyAzLjM1Nzg1IDMuMTA4OTkgMy41NDYwMUMzLjA2OTE1IDMuNjI0MjEgMy4wMzY2OSAzLjczNjMxIDMuMDE4NzggMy45NTU1MkMzLjAwMDM5IDQuMTgwNTYgMyA0LjQ3MTcxIDMgNC45VjExLjFDMyAxMS41MjgzIDMuMDAwMzkgMTEuODE5NCAzLjAxODc4IDEyLjA0NDVDMy4wMzY2OSAxMi4yNjM3IDMuMDY5MTUgMTIuMzc1OCAzLjEwODk5IDEyLjQ1NEMzLjIwNDg3IDEyLjY0MjIgMy4zNTc4NSAxMi43OTUxIDMuNTQ2MDEgMTIuODkxQzMuNjI0MjEgMTIuOTMwOSAzLjczNjMxIDEyLjk2MzMgMy45NTU1MiAxMi45ODEyQzQuMTgwNTYgMTIuOTk5NiA0LjQ3MTcxIDEzIDQuOSAxM0gxMS4xQzExLjUyODMgMTMgMTEuODE5NCAxMi45OTk2IDEyLjA0NDUgMTIuOTgxMkMxMi4yNjM3IDEyLjk2MzMgMTIuMzc1OCAxMi45MzA5IDEyLjQ1NCAxMi44OTFDMTIuNjQyMiAxMi43OTUxIDEyLjc5NTEgMTIuNjQyMiAxMi44OTEgMTIuNDU0QzEyLjkzMDkgMTIuMzc1OCAxMi45NjMzIDEyLjI2MzcgMTIuOTgxMiAxMi4wNDQ1QzEyLjk5OTYgMTEuODE5NCAxMyAxMS41MjgzIDEzIDExLjFWNi45OTk5OEwxNCA1Ljk5OTk4VjExLjFWMTEuMTIwN0MxNCAxMS41MjMxIDE0IDExLjg1NTMgMTMuOTc3OSAxMi4xMjU5QzEzLjk1NDkgMTIuNDA3IDEzLjkwNTcgMTIuNjY1MyAxMy43ODIgMTIuOTA4QzEzLjU5MDMgMTMuMjg0MyAxMy4yODQzIDEzLjU5MDMgMTIuOTA4IDEzLjc4MkMxMi42NjUzIDEzLjkwNTcgMTIuNDA3IDEzLjk1NDkgMTIuMTI1OSAxMy45Nzc5QzExLjg1NTMgMTQgMTEuNTIzMSAxNCAxMS4xMjA3IDE0SDExLjFINC45SDQuODc5MzRDNC40NzY4NiAxNCA0LjE0NDY4IDE0IDMuODc0MDkgMTMuOTc3OUMzLjU5MzA0IDEzLjk1NDkgMy4zMzQ2OSAxMy45MDU3IDMuMDkyMDIgMTMuNzgyQzIuNzE1NyAxMy41OTAzIDIuNDA5NzMgMTMuMjg0MyAyLjIxNzk5IDEyLjkwOEMyLjA5NDM0IDEyLjY2NTMgMi4wNDUwNiAxMi40MDcgMi4wMjIxIDEyLjEyNTlDMS45OTk5OSAxMS44NTUzIDEuOTk5OTkgMTEuNTIzMSAyIDExLjEyMDdWMTEuMTIwNlYxMS4xVjQuOVY0Ljg3OTM1VjQuODc5MzJWNC44NzkzMUMxLjk5OTk5IDQuNDc2ODUgMS45OTk5OSA0LjE0NDY4IDIuMDIyMSAzLjg3NDA5QzIuMDQ1MDYgMy41OTMwNCAyLjA5NDM0IDMuMzM0NjkgMi4yMTc5OSAzLjA5MjAyQzIuNDA5NzMgMi43MTU2OSAyLjcxNTcgMi40MDk3MyAzLjA5MjAyIDIuMjE3OTlDMy4zMzQ2OSAyLjA5NDM0IDMuNTkzMDQgMi4wNDUwNiAzLjg3NDA5IDIuMDIyMUM0LjE0NDY4IDEuOTk5OTkgNC40NzY4NSAxLjk5OTk5IDQuODc5MzIgMkg0Ljg3OTM1SDQuOUg5Ljk5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sV249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAwLjg3NUM1LjQ5Nzk3IDAuODc1IDMuODc1IDIuNDk3OTcgMy44NzUgNC41QzMuODc1IDYuMTUyODggNC45ODEyNCA3LjU0NzM4IDYuNDkzNzMgNy45ODM1MUM1LjI5OTcgOC4xMjkwMSA0LjI3NTU3IDguNTUxMzQgMy41MDQwNyA5LjMxMTY3QzIuNTIyMTYgMTAuMjc5NCAyLjAyNTAyIDExLjcyIDIuMDI1MDIgMTMuNTk5OUMyLjAyNTAyIDEzLjg2MjMgMi4yMzc2OSAxNC4wNzQ5IDIuNTAwMDIgMTQuMDc0OUMyLjc2MjM2IDE0LjA3NDkgMi45NzUwMiAxMy44NjIzIDIuOTc1MDIgMTMuNTk5OUMyLjk3NTAyIDExLjg3OTkgMy40Mjc4NiAxMC43MjA2IDQuMTcwOTEgOS45ODgzQzQuOTE1MzYgOS4yNTQ2MyA2LjAyNjc0IDguODc0OTkgNy40OTk5NSA4Ljg3NDk5QzguOTczMTcgOC44NzQ5OSAxMC4wODQ2IDkuMjU0NjMgMTAuODI5MSA5Ljk4ODMxQzExLjU3MjEgMTAuNzIwNiAxMi4wMjUgMTEuODc5OSAxMi4wMjUgMTMuNTk5OUMxMi4wMjUgMTMuODYyMyAxMi4yMzc2IDE0LjA3NDkgMTIuNSAxNC4wNzQ5QzEyLjc2MjMgMTQuMDc1IDEyLjk3NSAxMy44NjIzIDEyLjk3NSAxMy42QzEyLjk3NSAxMS43MiAxMi40Nzc4IDEwLjI3OTQgMTEuNDk1OSA5LjMxMTY2QzEwLjcyNDQgOC41NTEzNSA5LjcwMDI1IDguMTI5MDMgOC41MDYyNSA3Ljk4MzUyQzEwLjAxODcgNy41NDc0IDExLjEyNSA2LjE1Mjg5IDExLjEyNSA0LjVDMTEuMTI1IDIuNDk3OTcgOS41MDIwMyAwLjg3NSA3LjUgMC44NzVaTTQuODI1IDQuNUM0LjgyNSAzLjAyMjY0IDYuMDIyNjQgMS44MjUgNy41IDEuODI1QzguOTc3MzYgMS44MjUgMTAuMTc1IDMuMDIyNjQgMTAuMTc1IDQuNUMxMC4xNzUgNS45NzczNiA4Ljk3NzM2IDcuMTc1IDcuNSA3LjE3NUM2LjAyMjY0IDcuMTc1IDQuODI1IDUuOTc3MzYgNC44MjUgNC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sem49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuODUwMDEgNy41MDA0M0MxLjg1MDAxIDQuMzc5NzUgNC4zNzk2MyAxLjg1MDAxIDcuNTAwMDEgMS44NTAwMUMxMC42MjA0IDEuODUwMDEgMTMuMTUgNC4zNzk3NSAxMy4xNSA3LjUwMDQzQzEzLjE1IDEwLjYyMTEgMTAuNjIwNCAxMy4xNTA5IDcuNTAwMDEgMTMuMTUwOUM0LjM3OTYzIDEzLjE1MDkgMS44NTAwMSAxMC42MjExIDEuODUwMDEgNy41MDA0M1pNNy41MDAwMSAwLjg1MDAwNkMzLjgyNzI4IDAuODUwMDA2IDAuODUwMDA2IDMuODI3NTMgMC44NTAwMDYgNy41MDA0M0MwLjg1MDAwNiAxMS4xNzMzIDMuODI3MjggMTQuMTUwOSA3LjUwMDAxIDE0LjE1MDlDMTEuMTcyNyAxNC4xNTA5IDE0LjE1IDExLjE3MzMgMTQuMTUgNy41MDA0M0MxNC4xNSAzLjgyNzUzIDExLjE3MjcgMC44NTAwMDYgNy41MDAwMSAwLjg1MDAwNlpNNy4wMDAwMSA4LjAwMDAxVjMuMTI4MTFDNy4xNjQxMSAzLjEwOTU0IDcuMzMwOTQgMy4xMDAwMSA3LjUwMDAxIDMuMTAwMDFDOS45MzAwNiAzLjEwMDAxIDExLjkgNS4wNzAxNCAxMS45IDcuNTAwNDNDMTEuOSA3LjY2OTM1IDExLjg5MDUgNy44MzYwNCAxMS44NzIgOC4wMDAwMUg3LjAwMDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sR249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgNS41QzMgNy45ODMgNC45OTE2OSA5IDcgOVYxMi41QzcgMTIuNzc2MSA3LjIyMzg2IDEzIDcuNSAxM0M3Ljc3NjE0IDEzIDggMTIuNzc2MSA4IDEyLjVWOVYzLjFIOVYxMi41QzkgMTIuNzc2MSA5LjIyMzg2IDEzIDkuNSAxM0M5Ljc3NjE0IDEzIDEwIDEyLjc3NjEgMTAgMTIuNVYzLjFIMTEuNUMxMS44MDM4IDMuMSAxMi4wNSAyLjg1Mzc2IDEyLjA1IDIuNTVDMTIuMDUgMi4yNDYyNCAxMS44MDM4IDIgMTEuNSAySDkuNUg4SDcuNUg3QzQuOTkxNjkgMiAzIDMuMDE3IDMgNS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjUgMTMuOTVDMTMuNzQ4NSAxMy45NSAxMy45NSAxMy43NDg1IDEzLjk1IDEzLjVDMTMuOTUgMTMuMjUxNCAxMy43NDg1IDEzLjA1IDEzLjUgMTMuMDVMMS40OTk5NSAxMy4wNUMxLjI1MTQyIDEzLjA1IDEuMDQ5OTUgMTMuMjUxNCAxLjA0OTk1IDEzLjVDMS4wNDk5NSAxMy43NDg1IDEuMjUxNDIgMTMuOTUgMS40OTk5NSAxMy45NUwxMy41IDEzLjk1Wk0xMS4wNjgxIDcuNTY4M0MxMS4yNDM5IDcuMzkyNTcgMTEuMjQzOSA3LjEwNzY0IDExLjA2ODEgNi45MzE5MUMxMC44OTI0IDYuNzU2MTcgMTAuNjA3NSA2Ljc1NjE3IDEwLjQzMTcgNi45MzE5MUw3Ljk0OTkzIDkuNDEzNzFMNy45NDk5MyAxLjQ5OTk4QzcuOTQ5OTMgMS4yNTE0NiA3Ljc0ODQ2IDEuMDQ5OTggNy40OTk5MyAxLjA0OTk4QzcuMjUxNCAxLjA0OTk4IDcuMDQ5OTMgMS4yNTE0NiA3LjA0OTkzIDEuNDk5OThMNy4wNDk5MyA5LjQxMzcxTDQuNTY4MTMgNi45MzE5MUM0LjM5MjM5IDYuNzU2MTcgNC4xMDc0NiA2Ljc1NjE3IDMuOTMxNzMgNi45MzE5MUMzLjc1NTk5IDcuMTA3NjQgMy43NTU5OSA3LjM5MjU3IDMuOTMxNzMgNy41NjgzTDcuMTgxNzMgMTAuODE4M0M3LjM1NzQ2IDEwLjk5NCA3LjY0MjM5IDEwLjk5NCA3LjgxODEyIDEwLjgxODNMMTEuMDY4MSA3LjU2ODNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxZbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi4wNTAwNSAxMy41QzIuMDUwMDUgMTMuNzQ4NSAyLjI1MTUyIDEzLjk1IDIuNTAwMDUgMTMuOTVDMi43NDg1OCAxMy45NSAyLjk1MDA1IDEzLjc0ODUgMi45NTAwNSAxMy41TDIuOTUwMDUgMS40OTk5NUMyLjk1MDA1IDEuMjUxNDIgMi43NDg1OCAxLjA0OTk1IDIuNTAwMDUgMS4wNDk5NUMyLjI1MTUyIDEuMDQ5OTUgMi4wNTAwNSAxLjI1MTQyIDIuMDUwMDUgMS40OTk5NUwyLjA1MDA1IDEzLjVaTTguNDMxNyAxMS4wNjgxQzguNjA3NDMgMTEuMjQzOSA4Ljg5MjM2IDExLjI0MzkgOS4wNjgwOSAxMS4wNjgxQzkuMjQzODMgMTAuODkyNCA5LjI0MzgzIDEwLjYwNzUgOS4wNjgwOSAxMC40MzE3TDYuNTg2MjkgNy45NDk5M0wxNC41IDcuOTQ5OTNDMTQuNzQ4NSA3Ljk0OTkzIDE0Ljk1IDcuNzQ4NDYgMTQuOTUgNy40OTk5M0MxNC45NSA3LjI1MTQgMTQuNzQ4NSA3LjA0OTkzIDE0LjUgNy4wNDk5M0w2LjU4NjI5IDcuMDQ5OTNMOS4wNjgwOSA0LjU2ODEzQzkuMjQzODMgNC4zOTIzOSA5LjI0MzgzIDQuMTA3NDYgOS4wNjgwOSAzLjkzMTczQzguODkyMzYgMy43NTU5OSA4LjYwNzQzIDMuNzU1OTkgOC40MzE3IDMuOTMxNzNMNS4xODE3IDcuMTgxNzNDNS4wMDU5NiA3LjM1NzQ2IDUuMDA1OTYgNy42NDIzOSA1LjE4MTcgNy44MTgxMkw4LjQzMTcgMTEuMDY4MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEtuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi45NSAxLjUwMDA1QzEyLjk1IDEuMjUxNTIgMTIuNzQ4NSAxLjA1MDA1IDEyLjUgMS4wNTAwNUMxMi4yNTE0IDEuMDUwMDUgMTIuMDUgMS4yNTE1MiAxMi4wNSAxLjUwMDA1TDEyLjA1IDEzLjVDMTIuMDUgMTMuNzQ4NiAxMi4yNTE0IDEzLjk1IDEyLjUgMTMuOTVDMTIuNzQ4NSAxMy45NSAxMi45NSAxMy43NDg2IDEyLjk1IDEzLjVMMTIuOTUgMS41MDAwNVpNNi41NjgzIDMuOTMxODhDNi4zOTI1NyAzLjc1NjE0IDYuMTA3NjQgMy43NTYxNCA1LjkzMTkxIDMuOTMxODhDNS43NTYxNyA0LjEwNzYxIDUuNzU2MTcgNC4zOTI1NCA1LjkzMTkxIDQuNTY4MjdMOC40MTM3MSA3LjA1MDA3TDAuNDk5OTg0IDcuMDUwMDdDMC4yNTE0NTYgNy4wNTAwNyAwLjA0OTk4NDcgNy4yNTE1NSAwLjA0OTk4NDcgNy41MDAwN0MwLjA0OTk4NDYgNy43NDg2IDAuMjUxNDU3IDcuOTUwMDcgMC40OTk5ODQgNy45NTAwN0w4LjQxMzcxIDcuOTUwMDdMNS45MzE5MSAxMC40MzE5QzUuNzU2MTcgMTAuNjA3NiA1Ljc1NjE3IDEwLjg5MjUgNS45MzE5MSAxMS4wNjgzQzYuMTA3NjQgMTEuMjQ0IDYuMzkyNTcgMTEuMjQ0IDYuNTY4MzEgMTEuMDY4M0w5LjgxODMgNy44MTgyN0M5Ljk5NDA0IDcuNjQyNTQgOS45OTQwNCA3LjM1NzYxIDkuODE4MyA3LjE4MTg4TDYuNTY4MyAzLjkzMTg4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNTAwMDUgMS4wNTAwNUMxLjI1MTUyIDEuMDUwMDUgMS4wNTAwNSAxLjI1MTUyIDEuMDUwMDUgMS41MDAwNUMxLjA1MDA1IDEuNzQ4NTggMS4yNTE1MiAxLjk1MDA1IDEuNTAwMDUgMS45NTAwNUwxMy41IDEuOTUwMDVDMTMuNzQ4NiAxLjk1MDA1IDEzLjk1IDEuNzQ4NTggMTMuOTUgMS41MDAwNUMxMy45NSAxLjI1MTUyIDEzLjc0ODYgMS4wNTAwNSAxMy41IDEuMDUwMDVIMS41MDAwNVpNMy45MzE4OCA3LjQzMTY5QzMuNzU2MTQgNy42MDc0MyAzLjc1NjE0IDcuODkyMzYgMy45MzE4OCA4LjA2ODA5QzQuMTA3NjEgOC4yNDM4MyA0LjM5MjU0IDguMjQzODMgNC41NjgyNyA4LjA2ODA5TDcuMDUwMDcgNS41ODYyOVYxMy41QzcuMDUwMDcgMTMuNzQ4NSA3LjI1MTU1IDEzLjk1IDcuNTAwMDcgMTMuOTVDNy43NDg2IDEzLjk1IDcuOTUwMDcgMTMuNzQ4NSA3Ljk1MDA3IDEzLjVMNy45NTAwNyA1LjU4NjI5TDEwLjQzMTkgOC4wNjgwOUMxMC42MDc2IDguMjQzODMgMTAuODkyNSA4LjI0MzgzIDExLjA2ODMgOC4wNjgwOUMxMS4yNDQgNy44OTIzNSAxMS4yNDQgNy42MDc0MyAxMS4wNjgzIDcuNDMxNjlMNy44MTgyNyA0LjE4MTY5QzcuNjQyNTQgNC4wMDU5NiA3LjM1NzYxIDQuMDA1OTYgNy4xODE4OCA0LjE4MTY5TDMuOTMxODggNy40MzE2OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjI0MTgyIDIuMzIxODFDMy4zOTE5IDIuMjMxMzIgMy41Nzg0IDIuMjI2MDEgMy43MzMzOCAyLjMwNzgxTDEyLjczMzQgNy4wNTc4MUMxMi44OTc0IDcuMTQ0MzYgMTMgNy4zMTQ1NyAxMyA3LjVDMTMgNy42ODU0MyAxMi44OTc0IDcuODU1NjQgMTIuNzMzNCA3Ljk0MjE5TDMuNzMzMzggMTIuNjkyMkMzLjU3ODQgMTIuNzc0IDMuMzkxOSAxMi43Njg3IDMuMjQxODIgMTIuNjc4MkMzLjA5MTc1IDEyLjU4NzcgMyAxMi40MjUyIDMgMTIuMjVWMi43NUMzIDIuNTc0NzYgMy4wOTE3NSAyLjQxMjMgMy4yNDE4MiAyLjMyMTgxWk00IDMuNTc5MjVWMTEuNDIwN0wxMS40Mjg4IDcuNUw0IDMuNTc5MjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxRbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOCAyLjc1QzggMi40NzM4NiA3Ljc3NjE0IDIuMjUgNy41IDIuMjVDNy4yMjM4NiAyLjI1IDcgMi40NzM4NiA3IDIuNzVWN0gyLjc1QzIuNDczODYgNyAyLjI1IDcuMjIzODYgMi4yNSA3LjVDMi4yNSA3Ljc3NjE0IDIuNDczODYgOCAyLjc1IDhIN1YxMi4yNUM3IDEyLjUyNjEgNy4yMjM4NiAxMi43NSA3LjUgMTIuNzVDNy43NzYxNCAxMi43NSA4IDEyLjUyNjEgOCAxMi4yNVY4SDEyLjI1QzEyLjUyNjEgOCAxMi43NSA3Ljc3NjE0IDEyLjc1IDcuNUMxMi43NSA3LjIyMzg2IDEyLjUyNjEgNyAxMi4yNSA3SDhWMi43NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGVyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk0xLjgyNzA3IDcuNDk5NzJDMS44MjcwNyA0LjM2NjcxIDQuMzY2ODkgMS44MjY4OSA3LjQ5OTkxIDEuODI2ODlDMTAuNjMyOSAxLjgyNjg5IDEzLjE3MjcgNC4zNjY3MSAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyAxMC42MzI3IDEwLjYzMjkgMTMuMTcyNiA3LjQ5OTkxIDEzLjE3MjZDNC4zNjY4OSAxMy4xNzI2IDEuODI3MDcgMTAuNjMyNyAxLjgyNzA3IDcuNDk5NzJaTTcuNTAwMDMgNEM3Ljc3NjE3IDQgOC4wMDAwMyA0LjIyMzg2IDguMDAwMDMgNC41VjdIMTAuNUMxMC43NzYyIDcgMTEgNy4yMjM4NiAxMSA3LjVDMTEgNy43NzYxNCAxMC43NzYyIDggMTAuNSA4SDguMDAwMDNWMTAuNUM4LjAwMDAzIDEwLjc3NjEgNy43NzYxNyAxMSA3LjUwMDAzIDExQzcuMjIzODkgMTEgNy4wMDAwMyAxMC43NzYxIDcuMDAwMDMgMTAuNVY4SDQuNTAwMDNDNC4yMjM4OSA4IDQuMDAwMDMgNy43NzYxNCA0LjAwMDAzIDcuNUM0LjAwMDAzIDcuMjIzODYgNC4yMjM4OSA3IDQuNTAwMDMgN0g3LjAwMDAzVjQuNUM3LjAwMDAzIDQuMjIzODYgNy4yMjM4OSA0IDcuNTAwMDMgNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHRyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjA3NTA1IDQuMTAwMDFDNS4wNzUwNSAyLjkxMTAzIDYuMjU3MjcgMS45MjUwMiA3LjUwMDA1IDEuOTI1MDJDOC43NDI4MyAxLjkyNTAyIDkuOTI1MDUgMi45MTEwMyA5LjkyNTA1IDQuMTAwMDFDOS45MjUwNSA1LjE5ODYxIDkuMzY3ODIgNS43MTQzNiA4LjYxODU0IDYuMzc4ODRMOC41ODc1NyA2LjQwNjNDNy44NDQ4MSA3LjA2NDY3IDYuOTI1MDUgNy44Nzk5NSA2LjkyNTA1IDkuNUM2LjkyNTA1IDkuODE3NTcgNy4xODI0OCAxMC4wNzUgNy41MDAwNSAxMC4wNzVDNy44MTc2MSAxMC4wNzUgOC4wNzUwNSA5LjgxNzU3IDguMDc1MDUgOS41QzguMDc1MDUgOC40MTUxNyA4LjYyOTQ1IDcuOTA2MjMgOS4zODE1NiA3LjIzOTI1TDkuNDAyMzggNy4yMjA3OUMxMC4xNDk2IDYuNTU4MjkgMTEuMDc1IDUuNzM3NzUgMTEuMDc1IDQuMTAwMDFDMTEuMDc1IDIuMTI3NTcgOS4yMTg2OSAwLjc3NTAyNCA3LjUwMDA1IDAuNzc1MDI0QzUuNzgxNCAwLjc3NTAyNCAzLjkyNTA1IDIuMTI3NTcgMy45MjUwNSA0LjEwMDAxQzMuOTI1MDUgNC40MTc1OCA0LjE4MjQ5IDQuNjc1MDEgNC41MDAwNSA0LjY3NTAxQzQuODE3NjEgNC42NzUwMSA1LjA3NTA1IDQuNDE3NTggNS4wNzUwNSA0LjEwMDAxWk03LjUwMDA1IDEzLjM1NzVDNy45ODMzIDEzLjM1NzUgOC4zNzUwNSAxMi45NjU3IDguMzc1MDUgMTIuNDgyNUM4LjM3NTA1IDExLjk5OTIgNy45ODMzIDExLjYwNzUgNy41MDAwNSAxMS42MDc1QzcuMDE2OCAxMS42MDc1IDYuNjI1MDUgMTEuOTk5MiA2LjYyNTA1IDEyLjQ4MjVDNi42MjUwNSAxMi45NjU3IDcuMDE2OCAxMy4zNTc1IDcuNTAwMDUgMTMuMzU3NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG5yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDMuODQyMDQgMy44NDIyMiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyQzExLjE1NzYgMC44NzY4OTIgMTQuMTIyNyAzLjg0MjA0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDExLjE1NzQgMTEuMTU3NiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMzLjg0MjIyIDE0LjEyMjYgMC44NzcwNzUgMTEuMTU3NCAwLjg3NzA3NSA3LjQ5OTcyWk03LjQ5OTkxIDEuODI2ODlDNC4zNjY4OSAxLjgyNjg5IDEuODI3MDggNC4zNjY3MSAxLjgyNzA4IDcuNDk5NzJDMS44MjcwOCAxMC42MzI3IDQuMzY2ODkgMTMuMTcyNiA3LjQ5OTkxIDEzLjE3MjZDMTAuNjMyOSAxMy4xNzI2IDEzLjE3MjcgMTAuNjMyNyAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyA0LjM2NjcxIDEwLjYzMjkgMS44MjY4OSA3LjQ5OTkxIDEuODI2ODlaTTguMjQ5OTMgMTAuNUM4LjI0OTkzIDEwLjkxNDIgNy45MTQxNCAxMS4yNSA3LjQ5OTkzIDExLjI1QzcuMDg1NzEgMTEuMjUgNi43NDk5MyAxMC45MTQyIDYuNzQ5OTMgMTAuNUM2Ljc0OTkzIDEwLjA4NTggNy4wODU3MSA5Ljc1IDcuNDk5OTMgOS43NUM3LjkxNDE0IDkuNzUgOC4yNDk5MyAxMC4wODU4IDguMjQ5OTMgMTAuNVpNNi4wNTAwMyA2LjI1QzYuMDUwMDMgNS41NzIxMSA2LjYzNTExIDQuOTI1IDcuNTAwMDMgNC45MjVDOC4zNjQ5NiA0LjkyNSA4Ljk1MDAzIDUuNTcyMTEgOC45NTAwMyA2LjI1QzguOTUwMDMgNi43NDExOCA4LjY4MDAyIDYuOTkyMTIgOC4yMTQ0NyA3LjI3NDk0QzguMTYyNTEgNy4zMDY1MSA4LjEwMjU4IDcuMzQxMzEgOC4wMzg0NyA3LjM3ODU0TDguMDM4NDEgNy4zNzg1OEM3Ljg1NTIxIDcuNDg0OTcgNy42Mzc4OCA3LjYxMTE5IDcuNDc0NDkgNy43Mzg0OUM3LjIzMjE0IDcuOTI3MzIgNi45NTAwMyA4LjIzMTk4IDYuOTUwMDMgOC43QzYuOTUwMDQgOS4wMDM3NiA3LjE5NjI4IDkuMjUgNy41MDAwNCA5LjI1QzcuODAyNCA5LjI1IDguMDQ3NzggOS4wMDYwMSA4LjA1MDAyIDguNzA0MTdMOC4wNTA1NiA4LjcwMzNDOC4wNTkyNCA4LjY4OTYgOC4wODQ5MyA4LjY1NzM1IDguMTUwNTggOC42MDYyQzguMjUyMDcgOC41MjcxMiA4LjM2NTA4IDguNDYxNjMgOC41MTU2NyA4LjM3NDM2TDguNTE1NzEgOC4zNzQzM0M4LjU5NDIyIDguMzI4ODMgOC42ODI5NiA4LjI3NzQxIDguNzg1NTkgOC4yMTUwNkM5LjMyMDA0IDcuODkwMzggMTAuMDUgNy4zNTM4MiAxMC4wNSA2LjI1QzEwLjA1IDQuOTI3ODkgOC45MzUxMSAzLjgyNSA3LjUwMDAzIDMuODI1QzYuMDY0OTYgMy44MjUgNC45NTAwMyA0LjkyNzg5IDQuOTUwMDMgNi4yNUM0Ljk1MDAzIDYuNTUzNzYgNS4xOTYyOCA2LjggNS41MDAwMyA2LjhDNS44MDM3OSA2LjggNi4wNTAwMyA2LjU1Mzc2IDYuMDUwMDMgNi4yNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHJyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05LjQyNTAzIDMuNDQxMzZDMTAuMDU2MSAzLjIzNjU0IDEwLjc4MzcgMy4yNDAyIDExLjM3OTIgMy41NDYyM0MxMi43NTMyIDQuMjUyMjQgMTMuMzQ3NyA2LjA3MTkxIDEyLjc5NDYgOEMxMi41NDY1IDguODY0OSAxMi4xMTAyIDkuNzA0NzIgMTEuMTg2MSAxMC41NTI0QzEwLjI2MiAxMS40IDguOTgwMzQgMTEuOSA4LjM4NTcxIDExLjlDOC4xNzI2OSAxMS45IDggMTEuNzMyMSA4IDExLjUyNUM4IDExLjMxNzkgOC4xNzY0NCAxMS4xNSA4LjM4NTcxIDExLjE1QzkuMDY0OTcgMTEuMTUgOS42NzE4OSAxMC43ODA0IDEwLjM5MDYgMTAuMjM2QzEwLjk0MDYgOS44MTkzIDExLjM3MDEgOS4yODYzMyAxMS42MDggOC44MjE5MUMxMi4wNjI4IDcuOTMzNjcgMTIuMDc4MiA2LjY4MTc0IDExLjM0MzMgNi4zNDkwMUMxMC45OTA0IDYuNzM0NTUgMTAuNTI5NSA2Ljk1OTQ2IDkuOTc3MjUgNi45NTk0NkM4Ljc3NzMgNi45NTk0NiA4LjA3MDEgNS45OTQxMiA4LjEwMDUxIDUuMTIwMDlDOC4xMjk1NyA0LjI4NDc0IDguNjYwMzIgMy42ODk1NCA5LjQyNTAzIDMuNDQxMzZaTTMuNDI1MDMgMy40NDEzNkM0LjA1NjE0IDMuMjM2NTQgNC43ODM2NiAzLjI0MDIgNS4zNzkyMyAzLjU0NjIzQzYuNzUzMiA0LjI1MjI0IDcuMzQ3NjYgNi4wNzE5MSA2Ljc5NDYyIDhDNi41NDY1NCA4Ljg2NDkgNi4xMTAxOSA5LjcwNDcyIDUuMTg2MSAxMC41NTI0QzQuMjYyMDEgMTEuNCAyLjk4MDM0IDExLjkgMi4zODU3MSAxMS45QzIuMTcyNjkgMTEuOSAyIDExLjczMjEgMiAxMS41MjVDMiAxMS4zMTc5IDIuMTc2NDQgMTEuMTUgMi4zODU3MSAxMS4xNUMzLjA2NDk3IDExLjE1IDMuNjcxODkgMTAuNzgwNCA0LjM5MDU4IDEwLjIzNkM0Ljk0MDY1IDkuODE5MyA1LjM3MDE0IDkuMjg2MzMgNS42MDc5NyA4LjgyMTkxQzYuMDYyODIgNy45MzM2NyA2LjA3ODIxIDYuNjgxNzQgNS4zNDMzIDYuMzQ5MDFDNC45OTAzNyA2LjczNDU1IDQuNTI5NDggNi45NTk0NiAzLjk3NzI1IDYuOTU5NDZDMi43NzczIDYuOTU5NDYgMi4wNzAxIDUuOTk0MTIgMi4xMDA1MSA1LjEyMDA5QzIuMTI5NTcgNC4yODQ3NCAyLjY2MDMyIDMuNjg5NTQgMy40MjUwMyAzLjQ0MTM2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5ODUgMC44NzcwNDVDMy44NDIxNiAwLjg3NzA0NSAwLjg3NzAxNCAzLjg0MjE5IDAuODc3MDE0IDcuNDk5ODhDMC44NzcwMTQgMTEuMTU3NSAzLjg0MjE2IDE0LjEyMjcgNy40OTk4NSAxNC4xMjI3QzExLjE1NzUgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMy44NDIxOSAxMS4xNTc1IDAuODc3MDQ1IDcuNDk5ODUgMC44NzcwNDVaTTEuODI3MDEgNy40OTk4OEMxLjgyNzAxIDQuMzY2ODYgNC4zNjY4MyAxLjgyNzA0IDcuNDk5ODUgMS44MjcwNEMxMC42MzI4IDEuODI3MDQgMTMuMTcyNyA0LjM2Njg2IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDEwLjYzMjkgMTAuNjMyOCAxMy4xNzI3IDcuNDk5ODUgMTMuMTcyN0M0LjM2NjgzIDEzLjE3MjcgMS44MjcwMSAxMC42MzI5IDEuODI3MDEgNy40OTk4OFpNNy40OTk5OSA5LjQ5OTk5QzguNjA0NTYgOS40OTk5OSA5LjQ5OTk5IDguNjA0NTYgOS40OTk5OSA3LjQ5OTk5QzkuNDk5OTkgNi4zOTU0MiA4LjYwNDU2IDUuNDk5OTkgNy40OTk5OSA1LjQ5OTk5QzYuMzk1NDIgNS40OTk5OSA1LjQ5OTk5IDYuMzk1NDIgNS40OTk5OSA3LjQ5OTk5QzUuNDk5OTkgOC42MDQ1NiA2LjM5NTQyIDkuNDk5OTkgNy40OTk5OSA5LjQ5OTk5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMiAxSDQuMTc3NDFINC4xNzc0QzMuODY5MzYgMC45OTk5ODggMy42MDM2OCAwLjk5OTk3OCAzLjM4NjA5IDEuMDIwNjdDMy4xNTU3NiAxLjA0MjU3IDIuOTI4MjUgMS4wOTExMyAyLjcxNjI1IDEuMjIxMDRDMi41MTQ0MiAxLjM0NDcyIDIuMzQ0NzMgMS41MTQ0MiAyLjIyMTA0IDEuNzE2MjVDMi4wOTExMyAxLjkyODI1IDIuMDQyNTcgMi4xNTU3NiAyLjAyMDY3IDIuMzg2MDlDMS45OTk5OCAyLjYwMzY3IDEuOTk5OTkgMi44NjkzNSAyIDMuMTc3MzhWMy4xNzc0VjMuMlYxMS44VjExLjgyMjZWMTEuODIyNkMxLjk5OTk5IDEyLjEzMDcgMS45OTk5OCAxMi4zOTYzIDIuMDIwNjcgMTIuNjEzOUMyLjA0MjU3IDEyLjg0NDIgMi4wOTExMyAxMy4wNzE3IDIuMjIxMDQgMTMuMjgzN0MyLjM0NDczIDEzLjQ4NTYgMi41MTQ0MiAxMy42NTUzIDIuNzE2MjUgMTMuNzc5QzIuOTI4MjUgMTMuOTA4OSAzLjE1NTc2IDEzLjk1NzQgMy4zODYwOSAxMy45NzkzQzMuNjAzNjggMTQgMy44NjkzNyAxNCA0LjE3NzQxIDE0SDQuMkgxMC44SDEwLjgyMjZDMTEuMTMwNiAxNCAxMS4zOTYzIDE0IDExLjYxMzkgMTMuOTc5M0MxMS44NDQyIDEzLjk1NzQgMTIuMDcxNyAxMy45MDg5IDEyLjI4MzcgMTMuNzc5QzEyLjQ4NTYgMTMuNjU1MyAxMi42NTUzIDEzLjQ4NTYgMTIuNzc5IDEzLjI4MzdDMTIuOTA4OSAxMy4wNzE3IDEyLjk1NzQgMTIuODQ0MiAxMi45NzkzIDEyLjYxMzlDMTMgMTIuMzk2MyAxMyAxMi4xMzA2IDEzIDExLjgyMjZWMTEuOFYzLjJWMy4xNzc0MUMxMyAyLjg2OTM2IDEzIDIuNjAzNjggMTIuOTc5MyAyLjM4NjA5QzEyLjk1NzQgMi4xNTU3NiAxMi45MDg5IDEuOTI4MjUgMTIuNzc5IDEuNzE2MjVDMTIuNjU1MyAxLjUxNDQyIDEyLjQ4NTYgMS4zNDQ3MiAxMi4yODM3IDEuMjIxMDRDMTIuMDcxNyAxLjA5MTEzIDExLjg0NDIgMS4wNDI1NyAxMS42MTM5IDEuMDIwNjdDMTEuMzk2MyAwLjk5OTk3OCAxMS4xMzA2IDAuOTk5OTg4IDEwLjgyMjYgMUgxMC44SDQuMlpNMy4yMzg3NSAyLjA3MzY4QzMuMjY3MjIgMi4wNTYyMyAzLjMyMzYyIDIuMDMxMTIgMy40ODA3NSAyLjAxNjE4QzMuNjQ1MzIgMi4wMDA1MyAzLjg2Mjk4IDIgNC4yIDJIMTAuOEMxMS4xMzcgMiAxMS4zNTQ3IDIuMDAwNTMgMTEuNTE5MyAyLjAxNjE4QzExLjY3NjQgMi4wMzExMiAxMS43MzI4IDIuMDU2MjMgMTEuNzYxMyAyLjA3MzY4QzExLjgyODUgMi4xMTQ5MSAxMS44ODUxIDIuMTcxNDcgMTEuOTI2MyAyLjIzODc1QzExLjk0MzggMi4yNjcyMiAxMS45Njg5IDIuMzIzNjIgMTEuOTgzOCAyLjQ4MDc1QzExLjk5OTUgMi42NDUzMiAxMiAyLjg2Mjk4IDEyIDMuMlYxMS44QzEyIDEyLjEzNyAxMS45OTk1IDEyLjM1NDcgMTEuOTgzOCAxMi41MTkzQzExLjk2ODkgMTIuNjc2NCAxMS45NDM4IDEyLjczMjggMTEuOTI2MyAxMi43NjEzQzExLjg4NTEgMTIuODI4NSAxMS44Mjg1IDEyLjg4NTEgMTEuNzYxMyAxMi45MjYzQzExLjczMjggMTIuOTQzOCAxMS42NzY0IDEyLjk2ODkgMTEuNTE5MyAxMi45ODM4QzExLjM1NDcgMTIuOTk5NSAxMS4xMzcgMTMgMTAuOCAxM0g0LjJDMy44NjI5OCAxMyAzLjY0NTMyIDEyLjk5OTUgMy40ODA3NSAxMi45ODM4QzMuMzIzNjIgMTIuOTY4OSAzLjI2NzIyIDEyLjk0MzggMy4yMzg3NSAxMi45MjYzQzMuMTcxNDcgMTIuODg1MSAzLjExNDkxIDEyLjgyODUgMy4wNzM2OCAxMi43NjEzQzMuMDU2MjQgMTIuNzMyOCAzLjAzMTEyIDEyLjY3NjQgMy4wMTYxOCAxMi41MTkzQzMuMDAwNTMgMTIuMzU0NyAzIDEyLjEzNyAzIDExLjhWMy4yQzMgMi44NjI5OCAzLjAwMDUzIDIuNjQ1MzIgMy4wMTYxOCAyLjQ4MDc1QzMuMDMxMTIgMi4zMjM2MiAzLjA1NjI0IDIuMjY3MjIgMy4wNzM2OCAyLjIzODc1QzMuMTE0OTEgMi4xNzE0NyAzLjE3MTQ3IDIuMTE0OTEgMy4yMzg3NSAyLjA3MzY4Wk01IDEwQzQuNzIzODYgMTAgNC41IDEwLjIyMzkgNC41IDEwLjVDNC41IDEwLjc3NjEgNC43MjM4NiAxMSA1IDExSDhDOC4yNzYxNCAxMSA4LjUgMTAuNzc2MSA4LjUgMTAuNUM4LjUgMTAuMjIzOSA4LjI3NjE0IDEwIDggMTBINVpNNC41IDcuNUM0LjUgNy4yMjM4NiA0LjcyMzg2IDcgNSA3SDEwQzEwLjI3NjEgNyAxMC41IDcuMjIzODYgMTAuNSA3LjVDMTAuNSA3Ljc3NjE0IDEwLjI3NjEgOCAxMCA4SDVDNC43MjM4NiA4IDQuNSA3Ljc3NjE0IDQuNSA3LjVaTTUgNEM0LjcyMzg2IDQgNC41IDQuMjIzODYgNC41IDQuNUM0LjUgNC43NzYxNCA0LjcyMzg2IDUgNSA1SDEwQzEwLjI3NjEgNSAxMC41IDQuNzc2MTQgMTAuNSA0LjVDMTAuNSA0LjIyMzg2IDEwLjI3NjEgNCAxMCA0SDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS44NDk5OCA3LjQ5OTk4QzEuODQ5OTggNC42NjQ1OCA0LjA1OTc5IDEuODQ5OTggNy40OTk5OCAxLjg0OTk4QzEwLjI3ODMgMS44NDk5OCAxMS42NTE1IDMuOTA2NCAxMi4yMzY3IDVIMTAuNUMxMC4yMjM5IDUgMTAgNS4yMjM4NiAxMCA1LjVDMTAgNS43NzYxNCAxMC4yMjM5IDYgMTAuNSA2SDEzLjVDMTMuNzc2MSA2IDE0IDUuNzc2MTQgMTQgNS41VjIuNUMxNCAyLjIyMzg2IDEzLjc3NjEgMiAxMy41IDJDMTMuMjIzOSAyIDEzIDIuMjIzODYgMTMgMi41VjQuMzEzMThDMTIuMjk1NSAzLjA3MTI2IDEwLjY2NTkgMC44NDk5NzYgNy40OTk5OCAwLjg0OTk3NkMzLjQzNzE2IDAuODQ5OTc2IDAuODQ5OTc2IDQuMTg1MzcgMC44NDk5NzYgNy40OTk5OEMwLjg0OTk3NiAxMC44MTQ2IDMuNDM3MTYgMTQuMTUgNy40OTk5OCAxNC4xNUM5LjQ0MzgyIDE0LjE1IDExLjA2MjIgMTMuMzgwOCAxMi4yMTQ1IDEyLjIwODRDMTIuODMxNSAxMS41ODA2IDEzLjMxMzMgMTAuODM5IDEzLjY0MTggMTAuMDQwN0MxMy43NDY5IDkuNzg1MzYgMTMuNjI1MSA5LjQ5MzE1IDEzLjM2OTggOS4zODgwNkMxMy4xMTQ0IDkuMjgyOTYgMTIuODIyMiA5LjQwNDc4IDEyLjcxNzEgOS42NjAxNEMxMi40MzYzIDEwLjM0MjUgMTIuMDI1MSAxMC45NzQ1IDExLjUwMTMgMTEuNTA3NEMxMC41Mjk1IDEyLjQ5NjMgOS4xNjUwNCAxMy4xNSA3LjQ5OTk4IDEzLjE1QzQuMDU5NzkgMTMuMTUgMS44NDk5OCAxMC4zMzU0IDEuODQ5OTggNy40OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGxyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00Ljg1MzU1IDIuMTQ2NDVDNS4wNDg4MiAyLjM0MTcxIDUuMDQ4ODIgMi42NTgyOSA0Ljg1MzU1IDIuODUzNTVMMy43MDcxMSA0SDlDMTEuNDg1MyA0IDEzLjUgNi4wMTQ3MiAxMy41IDguNUMxMy41IDEwLjk4NTMgMTEuNDg1MyAxMyA5IDEzSDVDNC43MjM4NiAxMyA0LjUgMTIuNzc2MSA0LjUgMTIuNUM0LjUgMTIuMjIzOSA0LjcyMzg2IDEyIDUgMTJIOUMxMC45MzMgMTIgMTIuNSAxMC40MzMgMTIuNSA4LjVDMTIuNSA2LjU2NyAxMC45MzMgNSA5IDVIMy43MDcxMUw0Ljg1MzU1IDYuMTQ2NDVDNS4wNDg4MiA2LjM0MTcxIDUuMDQ4ODIgNi42NTgyOSA0Ljg1MzU1IDYuODUzNTVDNC42NTgyOSA3LjA0ODgyIDQuMzQxNzEgNy4wNDg4MiA0LjE0NjQ1IDYuODUzNTVMMi4xNDY0NSA0Ljg1MzU1QzEuOTUxMTggNC42NTgyOSAxLjk1MTE4IDQuMzQxNzEgMi4xNDY0NSA0LjE0NjQ1TDQuMTQ2NDUgMi4xNDY0NUM0LjM0MTcxIDEuOTUxMTggNC42NTgyOSAxLjk1MTE4IDQuODUzNTUgMi4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHNyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjA0OTk1IDIuNzQ5OTVDMy4wNDk5NSAyLjQ0NjE5IDIuODAzNzEgMi4xOTk5NSAyLjQ5OTk1IDIuMTk5OTVDMi4xOTYxOSAyLjE5OTk1IDEuOTQ5OTUgMi40NDYxOSAxLjk0OTk1IDIuNzQ5OTVWMTIuMjVDMS45NDk5NSAxMi41NTM3IDIuMTk2MTkgMTIuOCAyLjQ5OTk1IDEyLjhDMi44MDM3MSAxMi44IDMuMDQ5OTUgMTIuNTUzNyAzLjA0OTk1IDEyLjI1VjIuNzQ5OTVaTTUuNzMzMzMgMi4zMDc3NkM1LjU3ODM1IDIuMjI1OTYgNS4zOTE4NSAyLjIzMTI3IDUuMjQxNzcgMi4zMjE3NkM1LjA5MTcgMi40MTIyNSA0Ljk5OTk1IDIuNTc0NzEgNC45OTk5NSAyLjc0OTk1VjEyLjI1QzQuOTk5OTUgMTIuNDI1MiA1LjA5MTcgMTIuNTg3NyA1LjI0MTc3IDEyLjY3ODFDNS4zOTE4NSAxMi43Njg2IDUuNTc4MzUgMTIuNzczOSA1LjczMzMzIDEyLjY5MjFMMTQuNzMzMyA3Ljk0MjE0QzE0Ljg5NzMgNy44NTU1OSAxNSA3LjY4NTM5IDE1IDcuNDk5OTVDMTUgNy4zMTQ1MiAxNC44OTczIDcuMTQ0MzEgMTQuNzMzMyA3LjA1Nzc2TDUuNzMzMzMgMi4zMDc3NlpNNS45OTk5NSAxMS40MjA3VjMuNTc5MkwxMy40Mjg3IDcuNDk5OTVMNS45OTk5NSAxMS40MjA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sY3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuODUzNTcgMy44NTM1NUw3LjY1MzU1IDMuMDUzNTNDOC4yOTgxIDIuNDA5MDEgOS40Mjg1OCAxLjk2MTcyIDEwLjU1MiAxLjgwMTI1QzExLjEwNTYgMS43MjIxNyAxMS42MjkxIDEuNzE3MjUgMTIuMDU2NCAxLjc4MTI0QzEyLjQ5ODcgMS44NDc0OCAxMi43Njk4IDEuOTc2OTYgMTIuODk2NSAyLjEwMzU3QzEzLjAyMzEgMi4yMzAxOCAxMy4xNTI2IDIuNTAxMjUgMTMuMjE4OCAyLjk0MzU3QzEzLjI4MjggMy4zNzA4NiAxMy4yNzc5IDMuODk0MzkgMTMuMTk4OCA0LjQ0ODAxQzEzLjAzODMgNS41NzEzOSAxMi41OTEgNi43MDE4OCAxMS45NDY0IDcuMzQ2NDVMNy40OTk5OSAxMS43OTI5TDYuMzUzNTQgMTAuNjQ2NUM2LjE1ODI3IDEwLjQ1MTIgNS44NDE2OSAxMC40NTEyIDUuNjQ2NDMgMTAuNjQ2NUM1LjQ1MTE3IDEwLjg0MTcgNS40NTExNyAxMS4xNTgzIDUuNjQ2NDMgMTEuMzUzNkw3LjE0NjQ0IDEyLjg1MzZDNy4zNDE3MSAxMy4wNDg4IDcuNjU4MjkgMTMuMDQ4OCA3Ljg1MzU1IDEyLjg1MzZMOC40MDA3MyAxMi4zMDY0TDkuNTcxMjQgMTQuMjU3MkM5LjY1MDQ2IDE0LjM4OTMgOS43ODYwOCAxNC40Nzc0IDkuOTM4OSAxNC40OTYzQzEwLjA5MTcgMTQuNTE1MSAxMC4yNDQ3IDE0LjQ2MjQgMTAuMzUzNSAxNC4zNTM2TDEyLjM1MzUgMTIuMzUzNkMxMi40NjQ4IDEyLjI0MjMgMTIuNTE3MiAxMi4wODUxIDEyLjQ5NSAxMS45MjkzTDEyLjAzMDMgOC42NzY3OUwxMi42NTM2IDguMDUzNTVDMTMuNTA5IDcuMTk4MDggMTQuMDExNyA1LjgyODU1IDE0LjE4ODcgNC41ODk0M0MxNC4yNzg0IDMuOTYxOCAxNC4yODkxIDMuMzM4NDcgMTQuMjA3OCAyLjc5NTQ2QzE0LjEyODcgMi4yNjc0OCAxMy45NTE5IDEuNzQ0ODIgMTMuNjAzNSAxLjM5NjQ1QzEzLjI1NTIgMS4wNDgwOSAxMi43MzI1IDAuODcxMzMyIDEyLjIwNDUgMC43OTIyNjRDMTEuNjYxNSAwLjcxMDk0NSAxMS4wMzgyIDAuNzIxNjQ0IDEwLjQxMDUgMC44MTEzQzkuMTcxNDMgMC45ODgzMDYgNy44MDE4OSAxLjQ5MSA2Ljk0NjQ0IDIuMzQ2NDJMNi4zMjMyMiAyLjk2OTY4TDMuMDcwNzEgMi41MDUwNEMyLjkxNDkyIDIuNDgyNzggMi43NTc3MyAyLjUzNTE3IDIuNjQ2NDUgMi42NDY0NkwwLjY0NjQ1MSA0LjY0NjQ1QzAuNTM3NTc5IDQuNzU1MzMgMC40ODQ5MzggNC45MDgyOSAwLjUwMzc1IDUuMDYxMUMwLjUyMjU2MyA1LjIxMzkxIDAuNjEwNzMgNS4zNDk1NCAwLjc0Mjc1NyA1LjQyODc2TDIuNjkzNjQgNi41OTkyOEwyLjE0NjQ2IDcuMTQ2NDVDMi4wNTI3IDcuMjQwMjIgMi4wMDAwMiA3LjM2NzQgMi4wMDAwMiA3LjUwMDAxQzIuMDAwMDIgNy42MzI2MSAyLjA1MjcgNy43NTk3OSAyLjE0NjQ2IDcuODUzNTZMMy42NDY0NyA5LjM1MzU2QzMuODQxNzMgOS41NDg4MyA0LjE1ODMxIDkuNTQ4ODMgNC4zNTM1NyA5LjM1MzU2QzQuNTQ4ODQgOS4xNTgzIDQuNTQ4ODQgOC44NDE3MiA0LjM1MzU3IDguNjQ2NDZMMy4yMDcxMiA3LjUwMDAxTDMuODUzNTcgNi44NTM1Nkw2Ljg1MzU3IDMuODUzNTVaTTEwLjA5OTMgMTMuMTkzNkw5LjEyOTU5IDExLjU3NzVMMTEuMTQ2NCA5LjU2MDY3TDExLjQ2OTcgMTEuODIzMkwxMC4wOTkzIDEzLjE5MzZaTTMuNDIyNTEgNS44NzA0MUw1LjQzOTM1IDMuODUzNTZMMy4xNzY3OCAzLjUzMDM0TDEuODA2MzggNC45MDA3NEwzLjQyMjUxIDUuODcwNDFaTTIuMzUzNTYgMTAuMzUzNUMyLjU0ODgyIDEwLjE1ODMgMi41NDg4MiA5Ljg0MTcgMi4zNTM1NiA5LjY0NjQ0QzIuMTU4MyA5LjQ1MTE4IDEuODQxNzEgOS40NTExOCAxLjY0NjQ1IDkuNjQ2NDRMMC42NDY0NTEgMTAuNjQ2NEMwLjQ1MTE4OCAxMC44NDE3IDAuNDUxMTg4IDExLjE1ODMgMC42NDY0NTEgMTEuMzUzNUMwLjg0MTcxMyAxMS41NDg4IDEuMTU4MyAxMS41NDg4IDEuMzUzNTYgMTEuMzUzNUwyLjM1MzU2IDEwLjM1MzVaTTMuODUzNTggMTEuODUzNkM0LjA0ODg0IDExLjY1ODMgNC4wNDg4NSAxMS4zNDE3IDMuODUzNTkgMTEuMTQ2NUMzLjY1ODMzIDEwLjk1MTIgMy4zNDE3NSAxMC45NTEyIDMuMTQ2NDggMTEuMTQ2NUwxLjE0NjQ1IDEzLjE0NjRDMC45NTExOSAxMy4zNDE3IDAuOTUxMTg3IDEzLjY1ODMgMS4xNDY0NSAxMy44NTM1QzEuMzQxNzEgMTQuMDQ4OCAxLjY1ODI5IDE0LjA0ODggMS44NTM1NSAxMy44NTM2TDMuODUzNTggMTEuODUzNlpNNS4zNTM1NiAxMy4zNTM1QzUuNTQ4ODIgMTMuMTU4MyA1LjU0ODgyIDEyLjg0MTcgNS4zNTM1NiAxMi42NDY0QzUuMTU4MyAxMi40NTEyIDQuODQxNzEgMTIuNDUxMiA0LjY0NjQ1IDEyLjY0NjRMMy42NDY0NSAxMy42NDY0QzMuNDUxMTkgMTMuODQxNyAzLjQ1MTE5IDE0LjE1ODMgMy42NDY0NSAxNC4zNTM1QzMuODQxNzEgMTQuNTQ4OCA0LjE1ODMgMTQuNTQ4OCA0LjM1MzU2IDE0LjM1MzVMNS4zNTM1NiAxMy4zNTM1Wk05LjQ5OTk3IDYuNzQ4ODFDMTAuMTg5NyA2Ljc0ODgxIDEwLjc0ODggNi4xODk3IDEwLjc0ODggNS41QzEwLjc0ODggNC44MTAzIDEwLjE4OTcgNC4yNTExOCA5LjQ5OTk3IDQuMjUxMThDOC44MTAyNiA0LjI1MTE4IDguMjUxMTUgNC44MTAzIDguMjUxMTUgNS41QzguMjUxMTUgNi4xODk3IDguODEwMjYgNi43NDg4MSA5LjQ5OTk3IDYuNzQ4ODFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41OTY2NCAyLjkzNjI4QzcuNzYwODUgMy4wNjQwMSA4LjAwMDEyIDIuOTQ2OTggOC4wMDAxMiAyLjczODk1VjEuOTk5OThDOS45ODE0MyAyIDExLjE4NDggMi4zNjM3IDExLjkxMDUgMy4wODk0NUMxMi42MzYzIDMuODE1MjIgMTMgNS4wMTg2IDEzIDYuOTk5OThDMTMgNy4yNzYxMyAxMy4yMjM5IDcuNDk5OTggMTMuNSA3LjQ5OTk4QzEzLjc3NjEgNy40OTk5OCAxNCA3LjI3NjEzIDE0IDYuOTk5OThDMTQgNC45NDM4IDEzLjYzMjUgMy4zOTcxOSAxMi42MTc2IDIuMzgyMzRDMTEuNjAyOCAxLjM2NzUyIDEwLjA1NjIgMC45OTk5OTkgOC4wMDAxMiAwLjk5OTk4NFYwLjI2MTI2NkM4LjAwMDEyIDAuMDUzMjI5MyA3Ljc2MDg1IC0wLjA2Mzc5NDQgNy41OTY2NCAwLjA2MzkyOEw2LjAwMzg0IDEuMzAyNzdDNS44NzUxNiAxLjQwMjg2IDUuODc1MTYgMS41OTczNSA2LjAwMzg0IDEuNjk3NDRMNy41OTY2NCAyLjkzNjI4Wk05LjUgNUgyLjVDMi4yMjM4NiA1IDIgNS4yMjM4NiAyIDUuNVYxMi41QzIgMTIuNzc2MSAyLjIyMzg2IDEzIDIuNSAxM0g5LjVDOS43NzYxNCAxMyAxMCAxMi43NzYxIDEwIDEyLjVWNS41QzEwIDUuMjIzODYgOS43NzYxNCA1IDkuNSA1Wk0yLjUgNEMxLjY3MTU3IDQgMSA0LjY3MTU3IDEgNS41VjEyLjVDMSAxMy4zMjg0IDEuNjcxNTcgMTQgMi41IDE0SDkuNUMxMC4zMjg0IDE0IDExIDEzLjMyODQgMTEgMTIuNVY1LjVDMTEgNC42NzE1NyAxMC4zMjg0IDQgOS41IDRIMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuODE4MzIgMC42ODE3OUM3LjY0MjU4IDAuNTA2MDU0IDcuMzU3NjYgMC41MDYwNTQgNy4xODE5MiAwLjY4MTc5TDUuMTgxOTIgMi42ODE3OUM1LjAwNjE5IDIuODU3NTMgNS4wMDYxOSAzLjE0MjQ1IDUuMTgxOTIgMy4zMTgxOUM1LjM1NzY2IDMuNDkzOTIgNS42NDI1OCAzLjQ5MzkyIDUuODE4MzIgMy4zMTgxOUw3LjA1MDEyIDIuMDg2MzhMNy4wNTAxMiA1LjUwMDIzQzcuMDUwMTIgNS43NDg3NiA3LjI1MTU5IDUuOTUwMjMgNy41MDAxMiA1Ljk1MDIzQzcuNzQ4NjUgNS45NTAyMyA3Ljk1MDEyIDUuNzQ4NzYgNy45NTAxMiA1LjUwMDIzTDcuOTUwMTIgMi4wODYzOEw5LjE4MTkyIDMuMzE4MTlDOS4zNTc2NiAzLjQ5MzkyIDkuNjQyNTggMy40OTM5MiA5LjgxODMyIDMuMzE4MTlDOS45OTQwNiAzLjE0MjQ1IDkuOTk0MDYgMi44NTc1MyA5LjgxODMyIDIuNjgxNzlMNy44MTgzMiAwLjY4MTc5Wk03Ljk1MDEyIDEyLjkxMzZWOS41MDAyM0M3Ljk1MDEyIDkuMjUxNyA3Ljc0ODY1IDkuMDUwMjMgNy41MDAxMiA5LjA1MDIzQzcuMjUxNTkgOS4wNTAyMyA3LjA1MDEyIDkuMjUxNyA3LjA1MDEyIDkuNTAwMjNWMTIuOTEzNkw1LjgxODMyIDExLjY4MThDNS42NDI1OCAxMS41MDYxIDUuMzU3NjYgMTEuNTA2MSA1LjE4MTkyIDExLjY4MThDNS4wMDYxOSAxMS44NTc1IDUuMDA2MTkgMTIuMTQyNCA1LjE4MTkyIDEyLjMxODJMNy4xODE5MiAxNC4zMTgyQzcuMjY2MzIgMTQuNDAyNiA3LjM4MDc3IDE0LjQ1IDcuNTAwMTIgMTQuNDVDNy42MTk0NyAxNC40NSA3LjczMzkzIDE0LjQwMjYgNy44MTgzMiAxNC4zMTgyTDkuODE4MzIgMTIuMzE4MkM5Ljk5NDA2IDEyLjE0MjQgOS45OTQwNiAxMS44NTc1IDkuODE4MzIgMTEuNjgxOEM5LjY0MjU4IDExLjUwNjEgOS4zNTc2NiAxMS41MDYxIDkuMTgxOTIgMTEuNjgxOEw3Ljk1MDEyIDEyLjkxMzZaTTEuNDk5OTQgNy4wMDAxN0MxLjIyMzggNy4wMDAxNyAwLjk5OTkzOSA3LjIyNDAzIDAuOTk5OTM5IDcuNTAwMTdDMC45OTk5MzkgNy43NzYzMSAxLjIyMzggOC4wMDAxNyAxLjQ5OTk0IDguMDAwMTdMMTMuNDk5OSA4LjAwMDE3QzEzLjc3NjEgOC4wMDAxNyAxMy45OTk5IDcuNzc2MzEgMTMuOTk5OSA3LjUwMDE3QzEzLjk5OTkgNy4yMjQwMyAxMy43NzYxIDcuMDAwMTcgMTMuNDk5OSA3LjAwMDE3TDEuNDk5OTQgNy4wMDAxN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGRyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCAxMi44NUwxIDEyLjg1TDEgMTQuMTVMMTQgMTQuMTVMMTQgMTIuODVaTTE0IDguODUwMDJMMSA4Ljg1MDAyTDEgMTAuMTVMMTQgMTAuMTVMMTQgOC44NTAwMlpNMSA0Ljg1MDAzTDE0IDQuODUwMDNMMTQgNi4xNTAwM0wxIDYuMTUwMDJMMSA0Ljg1MDAzWk0xNCAwLjg1MDAyNUwxIDAuODUwMDI1TDEgMi4xNTAwMkwxNCAyLjE1MDAyTDE0IDAuODUwMDI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuNSA0QzAuMjIzODU4IDQgMCA0LjIyMzg2IDAgNC41VjEwLjVDMCAxMC43NzYxIDAuMjIzODU4IDExIDAuNSAxMUgxNC41QzE0Ljc3NjEgMTEgMTUgMTAuNzc2MSAxNSAxMC41VjQuNUMxNSA0LjIyMzg2IDE0Ljc3NjEgNCAxNC41IDRIMC41Wk0xIDEwVjVIMi4wNzVWNy41QzIuMDc1IDcuNzM0NzIgMi4yNjUyOCA3LjkyNSAyLjUgNy45MjVDMi43MzQ3MiA3LjkyNSAyLjkyNSA3LjczNDcyIDIuOTI1IDcuNVY1SDQuMDc1VjYuNUM0LjA3NSA2LjczNDcyIDQuMjY1MjggNi45MjUgNC41IDYuOTI1QzQuNzM0NzIgNi45MjUgNC45MjUgNi43MzQ3MiA0LjkyNSA2LjVWNUg2LjA3NVY2LjVDNi4wNzUgNi43MzQ3MiA2LjI2NTI4IDYuOTI1IDYuNSA2LjkyNUM2LjczNDcyIDYuOTI1IDYuOTI1IDYuNzM0NzIgNi45MjUgNi41VjVIOC4wNzVWNy41QzguMDc1IDcuNzM0NzIgOC4yNjUyOCA3LjkyNSA4LjUgNy45MjVDOC43MzQ3MiA3LjkyNSA4LjkyNSA3LjczNDcyIDguOTI1IDcuNVY1SDEwLjA3NVY2LjVDMTAuMDc1IDYuNzM0NzIgMTAuMjY1MyA2LjkyNSAxMC41IDYuOTI1QzEwLjczNDcgNi45MjUgMTAuOTI1IDYuNzM0NzIgMTAuOTI1IDYuNVY1SDEyLjA3NVY2LjVDMTIuMDc1IDYuNzM0NzIgMTIuMjY1MyA2LjkyNSAxMi41IDYuOTI1QzEyLjczNDcgNi45MjUgMTIuOTI1IDYuNzM0NzIgMTIuOTI1IDYuNVY1SDE0VjEwSDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxocj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC41IDBDMC4yMjM4NTggMCAwIDAuMjIzODU4IDAgMC41VjE0LjVDMCAxNC43NzYxIDAuMjIzODU4IDE1IDAuNSAxNUg0LjVDNC43NzYxNCAxNSA1IDE0Ljc3NjEgNSAxNC41VjVIMTQuNUMxNC43NzYxIDUgMTUgNC43NzYxNCAxNSA0LjVWMC41QzE1IDAuMjIzODU4IDE0Ljc3NjEgMCAxNC41IDBIMC41Wk0xIDQuMDc1MDVMMSAxSDQuMDc1MDJDNC4wNzUwMiAxIDQuMDc1MDIgMSA0LjA3NTAyIDFMNC4wNzUwNSA0LjA3NTA3TDEgNC4wNzUwNVpNMC45OTk5OTcgNC45MjUwNUwxIDE0SDRWMTIuOTI1SDIuNzUwMDJDMi41MTUzIDEyLjkyNSAyLjMyNTAyIDEyLjczNDggMi4zMjUwMiAxMi41QzIuMzI1MDIgMTIuMjY1MyAyLjUxNTMgMTIuMDc1IDIuNzUwMDIgMTIuMDc1SDRWMTAuOTI1SDIuMjUwMDJDMi4wMTUzIDEwLjkyNSAxLjgyNTAyIDEwLjczNDcgMS44MjUwMiAxMC41QzEuODI1MDIgMTAuMjY1MyAyLjAxNTMgMTAuMDc1IDIuMjUwMDIgMTAuMDc1SDRWOC45MjUwNEwyLjc1MDAyIDguOTI1MDJDMi41MTUzIDguOTI1MDIgMi4zMjUwMiA4LjczNDc0IDIuMzI1MDIgOC41MDAwMkMyLjMyNTAzIDguMjY1MjkgMi41MTUzMSA4LjA3NTAyIDIuNzUwMDMgOC4wNzUwMkw0IDguMDc1MDRWNi45MjUwMkwyLjc0OTk5IDYuOTI1QzIuNTE1MjcgNi45MjUgMi4zMjUgNi43MzQ3MiAyLjMyNSA2LjVDMi4zMjUgNi4yNjUyOCAyLjUxNTI5IDYuMDc1IDIuNzUwMDEgNi4wNzVMNCA2LjA3NTAyVjQuOTI1MDdMMC45OTk5OTcgNC45MjUwNVpNNC45MjUwNSA0SDYuMDc1VjIuNzUwMDZDNi4wNzUgMi41MTUzNCA2LjI2NTI4IDIuMzI1MDYgNi41IDIuMzI1MDZDNi43MzQ3MiAyLjMyNTA2IDYuOTI1IDIuNTE1MzQgNi45MjUgMi43NTAwNlY0SDguMDc1MDJWMi43NTAwNUM4LjA3NTAyIDIuNTE1MzMgOC4yNjUzIDIuMzI1MDUgOC41MDAwMiAyLjMyNTA1QzguNzM0NzQgMi4zMjUwNSA4LjkyNTAyIDIuNTE1MzMgOC45MjUwMiAyLjc1MDA1VjRIMTAuMDc1MVYyLjI1MDA1QzEwLjA3NTEgMi4wMTUzMyAxMC4yNjUzIDEuODI1MDUgMTAuNTAwMSAxLjgyNTA1QzEwLjczNDggMS44MjUwNSAxMC45MjUxIDIuMDE1MzMgMTAuOTI1MSAyLjI1MDA1VjRIMTIuMDc1MVYyLjc1MDA1QzEyLjA3NTEgMi41MTUzMyAxMi4yNjU0IDIuMzI1MDUgMTIuNTAwMSAyLjMyNTA1QzEyLjczNDggMi4zMjUwNSAxMi45MjUxIDIuNTE1MzMgMTIuOTI1MSAyLjc1MDA1VjRIMTRWMUg0LjkyNTAyTDQuOTI1MDUgNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDEuNUMyIDEuNzc2MTQgMS43NzYxNCAyIDEuNSAyQzEuMjIzODYgMiAxIDEuNzc2MTQgMSAxLjVDMSAxLjIyMzg2IDEuMjIzODYgMSAxLjUgMUMxLjc3NjE0IDEgMiAxLjIyMzg2IDIgMS41Wk0yIDVMMiAxMEgxM1Y1SDJaTTIgNEMxLjQ0NzcyIDQgMSA0LjQ0NzcyIDEgNVYxMEMxIDEwLjU1MjMgMS40NDc3MiAxMSAyIDExSDEzQzEzLjU1MjMgMTEgMTQgMTAuNTUyMyAxNCAxMFY1QzE0IDQuNDQ3NzIgMTMuNTUyMyA0IDEzIDRIMlpNMS41IDE0QzEuNzc2MTQgMTQgMiAxMy43NzYxIDIgMTMuNUMyIDEzLjIyMzkgMS43NzYxNCAxMyAxLjUgMTNDMS4yMjM4NiAxMyAxIDEzLjIyMzkgMSAxMy41QzEgMTMuNzc2MSAxLjIyMzg2IDE0IDEuNSAxNFpNNCAxLjVDNCAxLjc3NjE0IDMuNzc2MTQgMiAzLjUgMkMzLjIyMzg2IDIgMyAxLjc3NjE0IDMgMS41QzMgMS4yMjM4NiAzLjIyMzg2IDEgMy41IDFDMy43NzYxNCAxIDQgMS4yMjM4NiA0IDEuNVpNMy41IDE0QzMuNzc2MTQgMTQgNCAxMy43NzYxIDQgMTMuNUM0IDEzLjIyMzkgMy43NzYxNCAxMyAzLjUgMTNDMy4yMjM4NiAxMyAzIDEzLjIyMzkgMyAxMy41QzMgMTMuNzc2MSAzLjIyMzg2IDE0IDMuNSAxNFpNNiAxLjVDNiAxLjc3NjE0IDUuNzc2MTQgMiA1LjUgMkM1LjIyMzg2IDIgNSAxLjc3NjE0IDUgMS41QzUgMS4yMjM4NiA1LjIyMzg2IDEgNS41IDFDNS43NzYxNCAxIDYgMS4yMjM4NiA2IDEuNVpNNS41IDE0QzUuNzc2MTQgMTQgNiAxMy43NzYxIDYgMTMuNUM2IDEzLjIyMzkgNS43NzYxNCAxMyA1LjUgMTNDNS4yMjM4NiAxMyA1IDEzLjIyMzkgNSAxMy41QzUgMTMuNzc2MSA1LjIyMzg2IDE0IDUuNSAxNFpNOCAxLjVDOCAxLjc3NjE0IDcuNzc2MTQgMiA3LjUgMkM3LjIyMzg2IDIgNyAxLjc3NjE0IDcgMS41QzcgMS4yMjM4NiA3LjIyMzg2IDEgNy41IDFDNy43NzYxNCAxIDggMS4yMjM4NiA4IDEuNVpNNy41IDE0QzcuNzc2MTQgMTQgOCAxMy43NzYxIDggMTMuNUM4IDEzLjIyMzkgNy43NzYxNCAxMyA3LjUgMTNDNy4yMjM4NiAxMyA3IDEzLjIyMzkgNyAxMy41QzcgMTMuNzc2MSA3LjIyMzg2IDE0IDcuNSAxNFpNMTAgMS41QzEwIDEuNzc2MTQgOS43NzYxNCAyIDkuNSAyQzkuMjIzODYgMiA5IDEuNzc2MTQgOSAxLjVDOSAxLjIyMzg2IDkuMjIzODYgMSA5LjUgMUM5Ljc3NjE0IDEgMTAgMS4yMjM4NiAxMCAxLjVaTTkuNSAxNEM5Ljc3NjE0IDE0IDEwIDEzLjc3NjEgMTAgMTMuNUMxMCAxMy4yMjM5IDkuNzc2MTQgMTMgOS41IDEzQzkuMjIzODYgMTMgOSAxMy4yMjM5IDkgMTMuNUM5IDEzLjc3NjEgOS4yMjM4NiAxNCA5LjUgMTRaTTEyIDEuNUMxMiAxLjc3NjE0IDExLjc3NjEgMiAxMS41IDJDMTEuMjIzOSAyIDExIDEuNzc2MTQgMTEgMS41QzExIDEuMjIzODYgMTEuMjIzOSAxIDExLjUgMUMxMS43NzYxIDEgMTIgMS4yMjM4NiAxMiAxLjVaTTExLjUgMTRDMTEuNzc2MSAxNCAxMiAxMy43NzYxIDEyIDEzLjVDMTIgMTMuMjIzOSAxMS43NzYxIDEzIDExLjUgMTNDMTEuMjIzOSAxMyAxMSAxMy4yMjM5IDExIDEzLjVDMTEgMTMuNzc2MSAxMS4yMjM5IDE0IDExLjUgMTRaTTE0IDEuNUMxNCAxLjc3NjE0IDEzLjc3NjEgMiAxMy41IDJDMTMuMjIzOSAyIDEzIDEuNzc2MTQgMTMgMS41QzEzIDEuMjIzODYgMTMuMjIzOSAxIDEzLjUgMUMxMy43NzYxIDEgMTQgMS4yMjM4NiAxNCAxLjVaTTEzLjUgMTRDMTMuNzc2MSAxNCAxNCAxMy43NzYxIDE0IDEzLjVDMTQgMTMuMjIzOSAxMy43NzYxIDEzIDEzLjUgMTNDMTMuMjIzOSAxMyAxMyAxMy4yMjM5IDEzIDEzLjVDMTMgMTMuNzc2MSAxMy4yMjM5IDE0IDEzLjUgMTRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx2cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNiAzLjVDNiAyLjY3MTU3IDYuNjcxNTcgMiA3LjUgMkM4LjMyODQzIDIgOSAyLjY3MTU3IDkgMy41QzkgNC4zMjg0MyA4LjMyODQzIDUgNy41IDVDNi42NzE1NyA1IDYgNC4zMjg0MyA2IDMuNVpNOCA1Ljk0OTk5QzkuMTQxMTIgNS43MTgzNiAxMCA0LjcwOTQ4IDEwIDMuNUMxMCAyLjExOTI5IDguODgwNzEgMSA3LjUgMUM2LjExOTI5IDEgNSAyLjExOTI5IDUgMy41QzUgNC43MDk0OCA1Ljg1ODg4IDUuNzE4MzYgNyA1Ljk0OTk5VjEzLjVDNyAxMy43NzYxIDcuMjIzODYgMTQgNy41IDE0QzcuNzc2MTQgMTQgOCAxMy43NzYxIDggMTMuNVY1Ljk0OTk5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwIDMuNUMxMCA0LjcwOTQ4IDkuMTQxMTIgNS43MTgzNiA4IDUuOTQ5OTlWMTMuNUM4IDEzLjc3NjEgNy43NzYxNCAxNCA3LjUgMTRDNy4yMjM4NiAxNCA3IDEzLjc3NjEgNyAxMy41VjUuOTQ5OTlDNS44NTg4OCA1LjcxODM2IDUgNC43MDk0OCA1IDMuNUM1IDIuMTE5MjkgNi4xMTkyOSAxIDcuNSAxQzguODgwNzEgMSAxMCAyLjExOTI5IDEwIDMuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LENyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjg3NzA3NSA3LjQ5OTg4QzAuODc3MDc1IDMuODQyMTkgMy44NDIyMiAwLjg3NzA0NSA3LjQ5OTkxIDAuODc3MDQ1QzExLjE1NzYgMC44NzcwNDUgMTQuMTIyNyAzLjg0MjE5IDE0LjEyMjcgNy40OTk4OEMxNC4xMjI3IDExLjE1NzUgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MzLjg0MjIyIDE0LjEyMjcgMC44NzcwNzUgMTEuMTU3NSAwLjg3NzA3NSA3LjQ5OTg4Wk03LjQ5OTkxIDEuODI3MDRDNC4zNjY4OSAxLjgyNzA0IDEuODI3MDggNC4zNjY4NiAxLjgyNzA4IDcuNDk5ODhDMS44MjcwOCAxMC42MzI5IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDMTAuNjMyOSAxMy4xNzI3IDEzLjE3MjcgMTAuNjMyOSAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyA0LjM2Njg2IDEwLjYzMjkgMS44MjcwNCA3LjQ5OTkxIDEuODI3MDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4wNVwiLGQ6XCJNNi43ODI5NiAxMy4zNzZDOC43MzkwNCA5Ljk1Mjg0IDguNzM5MDQgNS4wNDcxOSA2Ljc4Mjk2IDEuNjI0MDVMNy4yMTcwOCAxLjM3NTk4QzkuMjYxIDQuOTUyODMgOS4yNjEgMTAuMDQ3MiA3LjIxNzA4IDEzLjYyNEw2Ljc4Mjk2IDEzLjM3NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjFcIixkOlwiTTcuMjgyMDQgMTMuNDc3NUM5LjIzOTI5IDkuOTk1MjMgOS4yMzkyOSA1LjAwNDc1IDcuMjgyMDQgMS41MjI0OEw3LjcxNzkxIDEuMjc3NUM5Ljc2MDY3IDQuOTExOSA5Ljc2MDY3IDEwLjA4ODEgNy43MTc5MSAxMy43MjI1TDcuMjgyMDQgMTMuNDc3NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjE1XCIsZDpcIk03LjgyMDk4IDEzLjUwNjRDOS43MjUwMiA5Ljk5NTIzIDkuNzI2MzYgNS4wMTQxMSA3LjgyNDkyIDEuNTAwODRMOC4yNjQ2NSAxLjI2Mjg1QzEwLjI0NjUgNC45MjQ2NiAxMC4yNDUxIDEwLjA4NSA4LjI2MDUyIDEzLjc0NDhMNy44MjA5OCAxMy41MDY0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMlwiLGQ6XCJNOC40MTI4NCAxMy40MjlDMTAuMTk1MiA5LjkyODQyIDEwLjE5NTcgNS4wNzUzNyA4LjQxNDM1IDEuNTc0MDJMOC44NTk5OSAxLjM0NzI5QzEwLjcxMzkgNC45OTExMyAxMC43MTMzIDEwLjAxMjggOC44NTg0MSAxMy42NTU5TDguNDEyODQgMTMuNDI5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMjVcIixkOlwiTTkuMDI0NDEgMTMuMjk1NkMxMC42NTY3IDkuODM3OSAxMC42NTg2IDUuMTc3MTUgOS4wMzAwNSAxLjcxNjU2TDkuNDgyNDUgMS41MDM2NkMxMS4xNzQ1IDUuMDk5MTkgMTEuMTcyNiA5LjkxNjI5IDkuNDc2NTcgMTMuNTA5MUw5LjAyNDQxIDEzLjI5NTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zXCIsZDpcIk05LjY2ODA5IDEzLjA2NTVDMTEuMTA5NyA5LjY5NTcyIDExLjExMDcgNS4zMTIxIDkuNjcwODggMS45NDA5NUwxMC4xMzA3IDEuNzQ0NTdDMTEuNjI0MSA1LjI0MTIxIDExLjYyMzEgOS43NjY4MyAxMC4xMjc4IDEzLjI2MjJMOS42NjgwOSAxMy4wNjU1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMzVcIixkOlwiTTEwLjMzMSAxMi43NDU2QzExLjU1NTEgOS41MjA3MyAxMS41NTY0IDUuNDkxMDMgMTAuMzM0NyAyLjI2NDQ0TDEwLjgwMjQgMi4wODc0QzEyLjA2NzIgNS40MjgxNSAxMi4wNjU5IDkuNTgzOTQgMTAuNzk4NSAxMi45MjMxTDEwLjMzMSAxMi43NDU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNFwiLGQ6XCJNMTEuMDE1NSAxMi4yOTg2QzExLjk5MzggOS4yOTc0NCAxMS45OTQ4IDUuNzEyOTYgMTEuMDE4NCAyLjcxMDY3TDExLjQ5MzkgMi41NTYwM0MxMi41MDMgNS42NTg5IDEyLjUwMiA5LjM1MTc4IDExLjQ5MDkgMTIuNDUzNUwxMS4wMTU1IDEyLjI5ODZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi40NVwiLGQ6XCJNMTEuNzIxNCAxMS42NjhDMTIuNDI1NCA5LjAxMzAzIDEyLjQyNjIgNS45OTY5MSAxMS43MjM3IDMuMzQxMTZMMTIuMjA3MSAzLjIxMzI5QzEyLjkzMTggNS45NTI5MiAxMi45MzEgOS4wNTcyOCAxMi4yMDQ3IDExLjc5NjFMMTEuNzIxNCAxMS42NjhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi41XCIsZDpcIk0xMi40NDMyIDEwLjc1MkMxMi44NTI0IDguNjM3NjIgMTIuODUyMyA2LjM2MDg5IDEyLjQ0MjkgNC4yNDY2TDEyLjkzMzggNC4xNTE1NUMxMy4zNTUzIDYuMzI4NjEgMTMuMzU1NCA4LjY2OTg1IDEyLjkzNDEgMTAuODQ3TDEyLjQ0MzIgMTAuNzUyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNDk5ODhDMC44NzcwNzUgMy44NDIxOSAzLjg0MjIyIDAuODc3MDQ1IDcuNDk5OTEgMC44NzcwNDVDMTEuMTU3NiAwLjg3NzA0NSAxNC4xMjI3IDMuODQyMTkgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMTEuMTU3NSAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzMuODQyMjIgMTQuMTIyNyAwLjg3NzA3NSAxMS4xNTc1IDAuODc3MDc1IDcuNDk5ODhaTTcuNDk5OTEgMS44MjcwNEM0LjM2Njg5IDEuODI3MDQgMS44MjcwOCA0LjM2Njg2IDEuODI3MDggNy40OTk4OEMxLjgyNzA4IDEwLjYzMjkgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0MxMC42MzI5IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDQuMzY2ODYgMTAuNjMyOSAxLjgyNzA0IDcuNDk5OTEgMS44MjcwNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjA1XCIsZDpcIk0xMi4xNjE5IDMuODUxODJDOC4zNTgxNyA0Ljg4OTE4IDQuODg5MzYgOC4zNTggMy44NTE5OSAxMi4xNjE3TDMuMzY5NiAxMi4wMzAxQzQuNDUzNTYgOC4wNTU2NCA4LjA1NTgxIDQuNDUzMzkgMTIuMDMwMyAzLjM2OTQzTDEyLjE2MTkgMy44NTE4MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjFcIixkOlwiTTExLjg4MDcgMy40MjcwN0M4LjAzNDQxIDQuNTA1NDIgNC41MDU2MSA4LjAzNDIyIDMuNDI3MjYgMTEuODgwNUwyLjk0NTgyIDExLjc0NTZDNC4wNzEyOSA3LjczMTIxIDcuNzMxNCA0LjA3MTEgMTEuNzQ1OCAyLjk0NTYzTDExLjg4MDcgMy40MjcwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjE1XCIsZDpcIk0xMS41MjAxIDMuMDI1NTZDNy42OTA5MiA0LjE2MTk5IDQuMTY3NzkgNy42ODMyMyAzLjAyODA1IDExLjUxMkwyLjU0ODgzIDExLjM2OTRDMy43MzY3NiA3LjM3ODY5IDcuMzg2NTkgMy43MzA3NiAxMS4zNzc4IDIuNTQ2MjNMMTEuNTIwMSAzLjAyNTU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMlwiLGQ6XCJNMTEuMDQ2OCAyLjY2MTY5QzcuMzExMTcgMy44NzY2NCAzLjg3OTE4IDcuMzA3OSAyLjY2Mjk4IDExLjA0MzRMMi4xODc1NCAxMC44ODg2QzMuNDUzMjQgNy4wMDEwOSA3LjAwNDQ1IDMuNDUwNjIgMTAuODkyMSAyLjE4NjIxTDExLjA0NjggMi42NjE2OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjI1XCIsZDpcIk0xMC41MjAxIDIuMzIzNjVDNi45MjA5MSAzLjYxNDQ3IDMuNjIzOTEgNi45MDg3NiAyLjMyODQ1IDEwLjUwNzNMMS44NTggMTAuMzM4QzMuMjAzOTggNi41OTkwOSA2LjYxMTU1IDMuMTk0MjQgMTAuMzUxMyAxLjg1MzAxTDEwLjUyMDEgMi4zMjM2NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjNcIixkOlwiTTkuOTAyMjIgMi4wMzEyMkM2LjUwMDAzIDMuMzk0NjUgMy4zOTk2OCA2LjQ5MzY3IDIuMDMzOTkgOS44OTU1MUwxLjU2OTk4IDkuNzA5MjRDMi45ODY1MSA2LjE4MDc2IDYuMTg3MjggMi45ODEzMyA5LjcxNjIyIDEuNTY3MUw5LjkwMjIyIDIuMDMxMjJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zNVwiLGQ6XCJNOS4yMDcyNyAxLjc4ODczQzYuMDYxMzYgMy4yMDM0OSAzLjIxMTAzIDYuMDUyMDMgMS43OTMzMSA5LjE5NzM4TDEuMzM3NDcgOC45OTE5MkMyLjgwNTM2IDUuNzM1MjggNS43NDQ4NSAyLjc5NzYgOS4wMDIyIDEuMzMyNzJMOS4yMDcyNyAxLjc4ODczWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNFwiLGQ6XCJNOC40MDcxMyAxLjYyMDg1QzUuNTkzMjMgMy4wNTExNyAzLjA1Nzk0IDUuNTg1MDkgMS42MjU0NCA4LjM5ODQ3TDEuMTc5ODcgOC4xNzE2QzIuNjYwMzYgNS4yNjM5NyA1LjI3MjMyIDIuNjUzNCA4LjE4MDU3IDEuMTc1MTNMOC40MDcxMyAxLjYyMDg1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNDVcIixkOlwiTTcuNDYyMDcgMS41Njc0N0M1LjA4Njg5IDIuOTQ2OTUgMi45NTM2MiA1LjA3OTEyIDEuNTcyNDkgNy40NTM3OUwxLjE0MDI4IDcuMjAyNDFDMi41NjUwMyA0Ljc1MjczIDQuNzYwNyAyLjU1ODE4IDcuMjEwOTYgMS4xMzUxTDcuNDYyMDcgMS41Njc0N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjVcIixkOlwiTTYuMzA0MDcgMS43MDQ4N0M0LjUxOTY0IDIuOTEwNjMgMi45MDk4MyA0LjUyMDYxIDEuNzA0MyA2LjMwNTEzTDEuMjg5OTggNi4wMjUyNEMyLjUzMTMgNC4xODc3MyA0LjE4NjczIDIuNTMyMTQgNi4wMjQxMyAxLjI5MDU5TDYuMzA0MDcgMS43MDQ4N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc3MDQ1QzMuODQyMjIgMC44NzcwNDUgMC44NzcwNzUgMy44NDIxOSAwLjg3NzA3NSA3LjQ5OTg4QzAuODc3MDc1IDkuMTQ4OCAxLjQ3OTY5IDEwLjY1NyAyLjQ3NjcgMTEuODE2MkwxLjY0NjQ3IDEyLjY0NjRDMS40NTEyMSAxMi44NDE3IDEuNDUxMjEgMTMuMTU4MyAxLjY0NjQ3IDEzLjM1MzVDMS44NDE3MyAxMy41NDg4IDIuMTU4MzIgMTMuNTQ4OCAyLjM1MzU4IDEzLjM1MzVMMy4xODM4MyAxMi41MjMzQzQuMzQzMDIgMTMuNTIwMiA1Ljg1MTEgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMTEuMTU3NiAxNC4xMjI3IDE0LjEyMjcgMTEuMTU3NSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyA1Ljg1MTA3IDEzLjUyMDIgNC4zNDI5OCAxMi41MjMzIDMuMTgzOEwxMy4zNTM2IDIuMzUzNTVDMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMS44NDE3IDEzLjM1MzYgMS42NDY0NEMxMy4xNTgzIDEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEyLjY0NjUgMS42NDY0NEwxMS44MTYyIDIuNDc2NjdDMTAuNjU3IDEuNDc5NjYgOS4xNDg4MyAwLjg3NzA0NSA3LjQ5OTkxIDAuODc3MDQ1Wk0xMS4xNDIzIDMuMTUwNjVDMTAuMTU2OCAyLjMyNDQ5IDguODg2NDQgMS44MjcwNCA3LjQ5OTkxIDEuODI3MDRDNC4zNjY4OSAxLjgyNzA0IDEuODI3MDggNC4zNjY4NiAxLjgyNzA4IDcuNDk5ODhDMS44MjcwOCA4Ljg4NjQxIDIuMzI0NTIgMTAuMTU2OCAzLjE1MDY5IDExLjE0MjJMMTEuMTQyMyAzLjE1MDY1Wk0zLjg1NzgxIDExLjg0OTNDNC44NDMyMiAxMi42NzUzIDYuMTEzNDggMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDMTAuNjMyOSAxMy4xNzI3IDEzLjE3MjcgMTAuNjMyOSAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyA2LjExMzQ1IDEyLjY3NTQgNC44NDMxOSAxMS44NDkzIDMuODU3NzhMMy44NTc4MSAxMS44NDkzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMDVcIixkOlwiTTYuNzgyOTYgMTMuMzc2QzguNzM5MDQgOS45NTI4NCA4LjczOTA0IDUuMDQ3MTkgNi43ODI5NiAxLjYyNDA1TDcuMjE3MDggMS4zNzU5OEM5LjI2MSA0Ljk1MjgzIDkuMjYxIDEwLjA0NzIgNy4yMTcwOCAxMy42MjRMNi43ODI5NiAxMy4zNzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xXCIsZDpcIk03LjI4MjA0IDEzLjQ3NzVDOS4yMzkyOSA5Ljk5NTIzIDkuMjM5MjkgNS4wMDQ3NSA3LjI4MjA0IDEuNTIyNDhMNy43MTc5MSAxLjI3NzVDOS43NjA2NyA0LjkxMTkgOS43NjA2NyAxMC4wODgxIDcuNzE3OTEgMTMuNzIyNUw3LjI4MjA0IDEzLjQ3NzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xNVwiLGQ6XCJNNy44MjA5OCAxMy41MDY0QzkuNzI1MDIgOS45OTUyMyA5LjcyNjM2IDUuMDE0MTEgNy44MjQ5MiAxLjUwMDg0TDguMjY0NjUgMS4yNjI4NUMxMC4yNDY1IDQuOTI0NjYgMTAuMjQ1MSAxMC4wODUgOC4yNjA1MiAxMy43NDQ4TDcuODIwOTggMTMuNTA2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjJcIixkOlwiTTguNDEyODQgMTMuNDI5QzEwLjE5NTIgOS45Mjg0MiAxMC4xOTU3IDUuMDc1MzcgOC40MTQzNSAxLjU3NDAyTDguODU5OTkgMS4zNDcyOUMxMC43MTM5IDQuOTkxMTMgMTAuNzEzMyAxMC4wMTI4IDguODU4NDEgMTMuNjU1OUw4LjQxMjg0IDEzLjQyOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjI1XCIsZDpcIk05LjAyNDQxIDEzLjI5NTZDMTAuNjU2NyA5LjgzNzkgMTAuNjU4NiA1LjE3NzE1IDkuMDMwMDUgMS43MTY1Nkw5LjQ4MjQ1IDEuNTAzNjZDMTEuMTc0NSA1LjA5OTE5IDExLjE3MjYgOS45MTYyOSA5LjQ3NjU3IDEzLjUwOTFMOS4wMjQ0MSAxMy4yOTU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuM1wiLGQ6XCJNOS42NjgwOSAxMy4wNjU1QzExLjEwOTcgOS42OTU3MiAxMS4xMTA3IDUuMzEyMSA5LjY3MDg4IDEuOTQwOTVMMTAuMTMwNyAxLjc0NDU3QzExLjYyNDEgNS4yNDEyMSAxMS42MjMxIDkuNzY2ODMgMTAuMTI3OCAxMy4yNjIyTDkuNjY4MDkgMTMuMDY1NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjM1XCIsZDpcIk0xMC4zMzEgMTIuNzQ1NkMxMS41NTUxIDkuNTIwNzMgMTEuNTU2NCA1LjQ5MTAzIDEwLjMzNDcgMi4yNjQ0NEwxMC44MDI0IDIuMDg3NEMxMi4wNjcyIDUuNDI4MTUgMTIuMDY1OSA5LjU4Mzk0IDEwLjc5ODUgMTIuOTIzMUwxMC4zMzEgMTIuNzQ1NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjRcIixkOlwiTTExLjAxNTUgMTIuMjk4NkMxMS45OTM4IDkuMjk3NDQgMTEuOTk0OCA1LjcxMjk2IDExLjAxODQgMi43MTA2N0wxMS40OTM5IDIuNTU2MDNDMTIuNTAzIDUuNjU4OSAxMi41MDIgOS4zNTE3OCAxMS40OTA5IDEyLjQ1MzVMMTEuMDE1NSAxMi4yOTg2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNDVcIixkOlwiTTExLjcyMTQgMTEuNjY4QzEyLjQyNTQgOS4wMTMwMyAxMi40MjYyIDUuOTk2OTEgMTEuNzIzNyAzLjM0MTE2TDEyLjIwNzEgMy4yMTMyOUMxMi45MzE4IDUuOTUyOTIgMTIuOTMxIDkuMDU3MjggMTIuMjA0NyAxMS43OTYxTDExLjcyMTQgMTEuNjY4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNVwiLGQ6XCJNMTIuNDQzMiAxMC43NTJDMTIuODUyNCA4LjYzNzYyIDEyLjg1MjMgNi4zNjA4OSAxMi40NDI5IDQuMjQ2NkwxMi45MzM4IDQuMTUxNTVDMTMuMzU1MyA2LjMyODYxIDEzLjM1NTQgOC42Njk4NSAxMi45MzQxIDEwLjg0N0wxMi40NDMyIDEwLjc1MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4wNVwiLGQ6XCJNMTIuMTM5OCAzLjg4NjE2QzEzLjg1NTMgNC45NDE1OSAxNSA2LjgzNyAxNSA4Ljk5OTk5QzE1IDEyLjMxMzcgMTIuMzEzNyAxNSA5LjAwMDAxIDE1QzYuODQzNSAxNSA0Ljk1Mjk1IDEzLjg2MjEgMy44OTU2OSAxMi4xNTUyTDQuMzIwNzUgMTEuODkxOUM1LjI5MDY5IDEzLjQ1NzggNy4wMjM3NSAxNC41IDkuMDAwMDEgMTQuNUMxMi4wMzc1IDE0LjUgMTQuNSAxMi4wMzc1IDE0LjUgOC45OTk5OUMxNC41IDcuMDE3OCAxMy40NTE2IDUuMjgwMjYgMTEuODc3OCA0LjMxMjAyTDEyLjEzOTggMy44ODYxNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjJcIixkOlwiTTEyLjg1MSA1LjA3MzJDMTMuODY4NCA2LjA3MTA1IDE0LjUgNy40NjE5OCAxNC41IDguOTk5OTlDMTQuNSAxMi4wMzc1IDEyLjAzNzYgMTQuNSA5LjAwMDAyIDE0LjVDNy40NjIxNCAxNC41IDYuMDcxMzEgMTMuODY4NSA1LjA3MzQ4IDEyLjg1MTJMNS40MzA0MiAxMi41MDExQzYuMzM4MDkgMTMuNDI2NCA3LjYwMTg1IDE0IDkuMDAwMDIgMTRDMTEuNzYxNCAxNCAxNCAxMS43NjE0IDE0IDguOTk5OTlDMTQgNy42MDE3IDEzLjQyNjQgNi4zMzc4NSAxMi41MDA5IDUuNDMwMTdMMTIuODUxIDUuMDczMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjM1XCIsZDpcIk0xMy4zMDIxIDYuNDUwNzFDMTMuNzQ1NSA3LjE5NzM3IDE0IDguMDY5MzQgMTQgOUMxNCAxMS43NjE0IDExLjc2MTQgMTQgOS4wMDAwMSAxNEM4LjA0ODY3IDE0IDcuMTU4NjcgMTMuNzM0MSA2LjQwMTE4IDEzLjI3MjNMNi42NjE0MSAxMi44NDU0QzcuMzQyNzQgMTMuMjYwNyA4LjE0MzA1IDEzLjUgOS4wMDAwMSAxMy41QzExLjQ4NTMgMTMuNSAxMy41IDExLjQ4NTMgMTMuNSA5QzEzLjUgOC4xNjE2NCAxMy4yNzEgNy4zNzc1MyAxMi44NzIyIDYuNzA1OThMMTMuMzAyMSA2LjQ1MDcxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNVwiLGQ6XCJNMTMuMzc0NCA3Ljk0MDIxQzEzLjQ1NjYgOC4yODAzIDEzLjUgOC42MzUyNCAxMy41IDlDMTMuNSAxMS40ODUzIDExLjQ4NTMgMTMuNSA5LjAwMDAyIDEzLjVDOC42MTEwMyAxMy41IDguMjMzMjEgMTMuNDUwNiA3Ljg3MjY3IDEzLjM1NzZMNy45OTc1OCAxMi44NzM0QzguMzE3NjcgMTIuOTU2IDguNjUzNTIgMTMgOS4wMDAwMiAxM0MxMS4yMDkxIDEzIDEzIDExLjIwOTEgMTMgOUMxMyA4LjY3NTA3IDEyLjk2MTMgOC4zNTk1MiAxMi44ODg0IDguMDU3NTZMMTMuMzc0NCA3Ljk0MDIxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNjVcIixkOlwiTTEyLjkxNTUgOS44MjEzMkMxMi41ODk4IDExLjM4MTMgMTEuMzU2MiAxMi42MDcyIDkuNzkyMDMgMTIuOTIxNUw5LjY5MzUzIDEyLjQzMTNDMTEuMDYxMyAxMi4xNTY1IDEyLjE0MTMgMTEuMDgzMyAxMi40MjYxIDkuNzE5MTNMMTIuOTE1NSA5LjgyMTMyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS4yNzcxIDcuNTAyNTJDMS4yNzcxIDQuMDY0NTUgNC4wNjQxMyAxLjI3NzUzIDcuNTAyMDkgMS4yNzc1M0MxMC45NCAxLjI3NzUzIDEzLjcyNzEgNC4wNjQ1NSAxMy43MjcxIDcuNTAyNTJDMTMuNzI3MSAxMC45NDA1IDEwLjk0IDEzLjcyNzUgNy41MDIwOSAxMy43Mjc1QzQuMDY0MTIgMTMuNzI3NSAxLjI3NzEgMTAuOTQwNSAxLjI3NzEgNy41MDI1MlpNNy41MDIwOSAyLjIyNzUyQzQuNTg4OCAyLjIyNzUyIDIuMjI3MSA0LjU4OTIyIDIuMjI3MSA3LjUwMjUyQzIuMjI3MSAxMC40MTU4IDQuNTg4OCAxMi43Nzc1IDcuNTAyMDkgMTIuNzc3NUMxMC40MTU0IDEyLjc3NzUgMTIuNzc3MSAxMC40MTU4IDEyLjc3NzEgNy41MDI1MkMxMi43NzcxIDQuNTg5MjIgMTAuNDE1NCAyLjIyNzUyIDcuNTAyMDkgMi4yMjc1MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHhyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01IDcuNTAwMDNDNSA4LjMyODQ1IDQuMzI4NDMgOS4wMDAwMyAzLjUgOS4wMDAwM0MyLjY3MTU3IDkuMDAwMDMgMiA4LjMyODQ1IDIgNy41MDAwM0MyIDYuNjcxNiAyLjY3MTU3IDYuMDAwMDMgMy41IDYuMDAwMDNDNC4zMjg0MyA2LjAwMDAzIDUgNi42NzE2IDUgNy41MDAwM1pNNS43MTMxMyA4LjY2Mzg4QzUuMjk0NDUgOS40NTgzOCA0LjQ2MDQ4IDEwIDMuNSAxMEMyLjExOTI5IDEwIDEgOC44ODA3NCAxIDcuNTAwMDNDMSA2LjExOTMxIDIuMTE5MjkgNS4wMDAwMyAzLjUgNS4wMDAwM0M0LjQ2MDQ4IDUuMDAwMDMgNS4yOTQ0NSA1LjU0MTY3IDUuNzEzMTMgNi4zMzYxNkw5LjEwNDI0IDQuMjE2NzFDOS4wMzY0MyAzLjk4OTY4IDkgMy43NDkxMSA5IDMuNTAwMDNDOSAyLjExOTMyIDEwLjExOTMgMS4wMDAwMyAxMS41IDEuMDAwMDNDMTIuODgwNyAxLjAwMDAzIDE0IDIuMTE5MzIgMTQgMy41MDAwM0MxNCA0Ljg4MDc0IDEyLjg4MDcgNi4wMDAwMyAxMS41IDYuMDAwMDNDMTAuNjkxNSA2LjAwMDAzIDkuOTcyNjQgNS42MTYyNCA5LjUxNTY2IDUuMDIwOUw1Ljk4NTMgNy4yMjczOEM1Ljk5NTAyIDcuMzE2OTIgNiA3LjQwNzg5IDYgNy41MDAwM0M2IDcuNTkyMTYgNS45OTUwMiA3LjY4MzEyIDUuOTg1MyA3Ljc3MjY3TDkuNTE1NjcgOS45NzkxNUM5Ljk3MjY1IDkuMzgzODIgMTAuNjkxNSA5LjAwMDAzIDExLjUgOS4wMDAwM0MxMi44ODA3IDkuMDAwMDMgMTQgMTAuMTE5MyAxNCAxMS41QzE0IDEyLjg4MDcgMTIuODgwNyAxNCAxMS41IDE0QzEwLjExOTMgMTQgOSAxMi44ODA3IDkgMTEuNUM5IDExLjI1MDkgOS4wMzY0MyAxMS4wMTA0IDkuMTA0MjUgMTAuNzgzM0w1LjcxMzEzIDguNjYzODhaTTExLjUgNS4wMDAwM0MxMi4zMjg0IDUuMDAwMDMgMTMgNC4zMjg0NiAxMyAzLjUwMDAzQzEzIDIuNjcxNiAxMi4zMjg0IDIuMDAwMDMgMTEuNSAyLjAwMDAzQzEwLjY3MTYgMi4wMDAwMyAxMCAyLjY3MTYgMTAgMy41MDAwM0MxMCA0LjMyODQ2IDEwLjY3MTYgNS4wMDAwMyAxMS41IDUuMDAwMDNaTTEzIDExLjVDMTMgMTIuMzI4NSAxMi4zMjg0IDEzIDExLjUgMTNDMTAuNjcxNiAxMyAxMCAxMi4zMjg1IDEwIDExLjVDMTAgMTAuNjcxNiAxMC42NzE2IDEwIDExLjUgMTBDMTIuMzI4NCAxMCAxMyAxMC42NzE2IDEzIDExLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxfcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDUuMDAwMDZDMy4yMjM4NiA1LjAwMDA2IDMgNS4yMjM5MiAzIDUuNTAwMDZMMyAxMS41MDAxQzMgMTEuNzc2MiAzLjIyMzg2IDEyLjAwMDEgMy41IDEyLjAwMDFMMTEuNSAxMi4wMDAxQzExLjc3NjEgMTIuMDAwMSAxMiAxMS43NzYyIDEyIDExLjUwMDFMMTIgNS41MDAwNkMxMiA1LjIyMzkyIDExLjc3NjEgNS4wMDAwNiAxMS41IDUuMDAwMDZMMTAuMjUgNS4wMDAwNkM5Ljk3Mzg2IDUuMDAwMDYgOS43NSA0Ljc3NjIgOS43NSA0LjUwMDA2QzkuNzUgNC4yMjM5MiA5Ljk3Mzg2IDQuMDAwMDYgMTAuMjUgNC4wMDAwNkwxMS41IDQuMDAwMDZDMTIuMzI4NCA0LjAwMDA2IDEzIDQuNjcxNjMgMTMgNS41MDAwNkwxMyAxMS41MDAxQzEzIDEyLjMyODUgMTIuMzI4NCAxMy4wMDAxIDExLjUgMTMuMDAwMUwzLjUgMTMuMDAwMUMyLjY3MTU3IDEzLjAwMDEgMiAxMi4zMjg1IDIgMTEuNTAwMUwyIDUuNTAwMDZDMiA0LjY3MTYzIDIuNjcxNTcgNC4wMDAwNiAzLjUgNC4wMDAwNkw0Ljc1IDQuMDAwMDZDNS4wMjYxNCA0LjAwMDA2IDUuMjUgNC4yMjM5MiA1LjI1IDQuNTAwMDZDNS4yNSA0Ljc3NjIgNS4wMjYxNCA1LjAwMDA2IDQuNzUgNS4wMDAwNkwzLjUgNS4wMDAwNlpNNyAxLjYzNjRMNS41NjgyIDMuMDY4MkM1LjM5MjQ2IDMuMjQzOTMgNS4xMDc1NCAzLjI0MzkzIDQuOTMxOCAzLjA2ODJDNC43NTYwNyAyLjg5MjQ2IDQuNzU2MDcgMi42MDc1NCA0LjkzMTggMi40MzE4TDcuMTgxOCAwLjE4MTgwMkM3LjI2NjE5IDAuMDk3NDEgNy4zODA2NSAwLjA0OTk5OSA3LjUgMC4wNDk5OTlDNy42MTkzNSAwLjA0OTk5OSA3LjczMzgxIDAuMDk3NDEgNy44MTgyIDAuMTgxODAyTDEwLjA2ODIgMi40MzE4QzEwLjI0MzkgMi42MDc1NCAxMC4yNDM5IDIuODkyNDYgMTAuMDY4MiAzLjA2ODJDOS44OTI0NiAzLjI0MzkzIDkuNjA3NTQgMy4yNDM5MyA5LjQzMTggMy4wNjgyTDggMS42MzY0TDggOC41QzggOC43NzYxNCA3Ljc3NjE0IDkgNy41IDlDNy4yMjM4NiA5IDcgOC43NzYxNCA3IDguNUw3IDEuNjM2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE9yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi4zNTM2IDEuMTQ2NDVDMTIuMTU4MyAwLjk1MTE4NCAxMS44NDE3IDAuOTUxMTg0IDExLjY0NjQgMS4xNDY0NUMxMS40NTEyIDEuMzQxNzEgMTEuNDUxMiAxLjY1ODI5IDExLjY0NjQgMS44NTM1NUwxMi43OTI5IDNIMTJDMTAuNzAzNyAzIDkuNzExMTEgMy41ODQyMyA4Ljg3MjQ4IDQuMzg5MzFDOC4yMDA2NSA1LjAzNDI3IDcuNTkzNDkgNS44NTY4NCA2Ljk5NDYxIDYuNjY4MkM2Ljg2Mjg3IDYuODQ2NjggNi43MzE1NCA3LjAyNDYyIDYuNiA3LjJDNS4xMDg3NCA5LjE4ODM1IDMuNDkwMzcgMTEgMC41IDExQzAuMjIzODU4IDExIDAgMTEuMjIzOSAwIDExLjVDMCAxMS43NzYxIDAuMjIzODU4IDEyIDAuNSAxMkM0LjAwOTYzIDEyIDUuODkxMjYgOS44MTE2NSA3LjQgNy44QzcuNTQzNjcgNy42MDg0NSA3LjY4MzIgNy40MTk2MiA3LjgxOTk2IDcuMjM0NTRMNy44MjAwNSA3LjIzNDQzTDcuODIwMDYgNy4yMzQ0MUM4LjQxNjc0IDYuNDI2OTUgOC45NjA2OSA1LjY5MDg1IDkuNTY1MDIgNS4xMTA2OUMxMC4yODg5IDQuNDE1NzcgMTEuMDQ2MyA0IDEyIDRIMTIuNzkyOUwxMS42NDY0IDUuMTQ2NDVDMTEuNDUxMiA1LjM0MTcxIDExLjQ1MTIgNS42NTgyOSAxMS42NDY0IDUuODUzNTVDMTEuODQxNyA2LjA0ODgyIDEyLjE1ODMgNi4wNDg4MiAxMi4zNTM2IDUuODUzNTVMMTQuMzUzNiAzLjg1MzU1QzE0LjU0ODggMy42NTgyOSAxNC41NDg4IDMuMzQxNzEgMTQuMzUzNiAzLjE0NjQ1TDEyLjM1MzYgMS4xNDY0NVpNMC41IDNDMy4zNTI3OCAzIDUuMTI5OTIgNC40NDU4OCA2LjUwNTQ4IDYuMDY3NDZMNi4zNzYyIDYuMjQyNjZDNi4yNDgzIDYuNDE2MSA2LjEyMjkzIDYuNTg2MDkgNiA2Ljc1QzUuOTYzOTcgNi43OTgwNCA1LjkyNzk4IDYuODQ1ODEgNS44OTIgNi44OTMzMUM0LjU3MzQ4IDUuMjkzMDYgMy4wMjYzNyA0IDAuNSA0QzAuMjIzODU4IDQgMCAzLjc3NjE0IDAgMy41QzAgMy4yMjM4NiAwLjIyMzg1OCAzIDAuNSAzWk04Ljg3MjQ4IDEwLjYxMDdDOC4zNzI4NCAxMC4xMzEgNy45MDg5NyA5LjU1MzE0IDcuNDU3NjcgOC45NTQ2OEM3LjY0Njg4IDguNzE2OTMgNy44MjcwNCA4LjQ4MDYxIDggOC4yNUw4LjA4OTg3IDguMTI5ODdDOC41ODQxMiA4Ljc5NDAyIDkuMDUyODggOS4zOTc2NiA5LjU2NTAyIDkuODg5MzFDMTAuMjg4OSAxMC41ODQyIDExLjA0NjMgMTEgMTIgMTFIMTIuNzkyOUwxMS42NDY0IDkuODUzNTVDMTEuNDUxMiA5LjY1ODI5IDExLjQ1MTIgOS4zNDE3MSAxMS42NDY0IDkuMTQ2NDVDMTEuODQxNyA4Ljk1MTE4IDEyLjE1ODMgOC45NTExOCAxMi4zNTM2IDkuMTQ2NDVMMTQuMzUzNiAxMS4xNDY0QzE0LjU0ODggMTEuMzQxNyAxNC41NDg4IDExLjY1ODMgMTQuMzUzNiAxMS44NTM2TDEyLjM1MzYgMTMuODUzNkMxMi4xNTgzIDE0LjA0ODggMTEuODQxNyAxNC4wNDg4IDExLjY0NjQgMTMuODUzNkMxMS40NTEyIDEzLjY1ODMgMTEuNDUxMiAxMy4zNDE3IDExLjY0NjQgMTMuMTQ2NEwxMi43OTI5IDEySDEyQzEwLjcwMzcgMTIgOS43MTExMSAxMS40MTU4IDguODcyNDggMTAuNjEwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LExyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS41IDMuMDQ5OTlDMTEuNzQ4NSAzLjA0OTk5IDExLjk1IDMuMjUxNDYgMTEuOTUgMy40OTk5OVY3LjQ5OTk5QzExLjk1IDcuNzQ4NTIgMTEuNzQ4NSA3Ljk0OTk5IDExLjUgNy45NDk5OUMxMS4yNTE1IDcuOTQ5OTkgMTEuMDUgNy43NDg1MiAxMS4wNSA3LjQ5OTk5VjQuNTg2MzlMNC41ODYzOCAxMS4wNUg3LjQ5OTk5QzcuNzQ4NTIgMTEuMDUgNy45NDk5OSAxMS4yNTE1IDcuOTQ5OTkgMTEuNUM3Ljk0OTk5IDExLjc0ODUgNy43NDg1MiAxMS45NSA3LjQ5OTk5IDExLjk1TDMuNDk5OTkgMTEuOTVDMy4zODA2NCAxMS45NSAzLjI2NjE4IDExLjkwMjYgMy4xODE3OSAxMS44MTgyQzMuMDk3NCAxMS43MzM4IDMuMDQ5OTkgMTEuNjE5MyAzLjA0OTk5IDExLjVMMy4wNDk5OSA3LjQ5OTk5QzMuMDQ5OTkgNy4yNTE0NiAzLjI1MTQ2IDcuMDQ5OTkgMy40OTk5OSA3LjA0OTk5QzMuNzQ4NTIgNy4wNDk5OSAzLjk0OTk5IDcuMjUxNDYgMy45NDk5OSA3LjQ5OTk5TDMuOTQ5OTkgMTAuNDEzNkwxMC40MTM2IDMuOTQ5OTlMNy40OTk5OSAzLjk0OTk5QzcuMjUxNDYgMy45NDk5OSA3LjA0OTk5IDMuNzQ4NTIgNy4wNDk5OSAzLjQ5OTk5QzcuMDQ5OTkgMy4yNTE0NiA3LjI1MTQ2IDMuMDQ5OTkgNy40OTk5OSAzLjA0OTk5TDExLjUgMy4wNDk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEVyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUzNzMxIDAuODI2ODczQzcuNTEyNSAwLjgyNDM5MiA3LjQ4NzUgMC44MjQzOTIgNy40NjI2OSAwLjgyNjg3M0wzLjk2MjY5IDEuMTc2ODdDMy44NTY3MiAxLjE4NzQ3IDMuNzYwMjUgMS4yNDI2MiAzLjY5NzM2IDEuMzI4NTdMMC42OTk3NzEgNS40MjUyOEMwLjY1NDA0NiA1LjQ4NjI3IDAuNjI2NDcgNS41NjE2NSAwLjYyNTA1NyA1LjY0MzRDMC42MjUwMTkgNS42NDU2IDAuNjI1IDUuNjQ3ODEgMC42MjUgNS42NTAwMUMwLjYyNSA1LjY1MDUyIDAuNjI1MDAxIDUuNjUxMDMgMC42MjUwMDMgNS42NTE1M0MwLjYyNTM2MyA1Ljc0MjM3IDAuNjU4MDIxIDUuODI1NTkgMC43MTIwODcgNS44OTAzTDcuMjEwNDIgMTMuNzg4M0M3LjI4MTY1IDEzLjg3NDkgNy4zODc4OSAxMy45MjUgNy41IDEzLjkyNUM3LjYxMjExIDEzLjkyNSA3LjcxODM1IDEzLjg3NDkgNy43ODk1OCAxMy43ODgzTDE0LjI4NzkgNS44OTAzMUMxNC4zNDIgNS44MjU2IDE0LjM3NDYgNS43NDIzNyAxNC4zNzUgNS42NTE1M0MxNC4zNzUgNS42NTEwMyAxNC4zNzUgNS42NTA1MiAxNC4zNzUgNS42NTAwMUMxNC4zNzUgNS42NDg0OSAxNC4zNzUgNS42NDY5NyAxNC4zNzUgNS42NDU0NUMxNC4zNzQ5IDUuNjM5NjMgMTQuMzc0NyA1LjYzMzgyIDE0LjM3NDQgNS42MjgwMUMxNC4zNyA1LjU1MjE5IDE0LjM0MzEgNS40ODI0MiAxNC4zMDAyIDUuNDI1MjdMMTEuMzAyNiAxLjMyODU3QzExLjIzOTcgMS4yNDI2MiAxMS4xNDMzIDEuMTg3NDcgMTEuMDM3MyAxLjE3Njg3TDcuNTM3MzEgMC44MjY4NzNaTTEwLjkyNSA1LjI3NTAxVjUuMjUyMzZMMTAuOTIyMyA1LjI3NTAxSDEwLjkyNVpNMTAuOTM0MiA1LjE3NDk4SDEzLjE4NzdMMTEuMjQ5NSAyLjUyNjFMMTAuOTM0MiA1LjE3NDk4Wk0xMC41NzA3IDEuODgzOTVMOC4wNDQzMiAxLjYzMTMxTDEwLjE3NDcgNS4yMTAzNEwxMC41NzA3IDEuODgzOTVaTTYuOTU1NjggMS42MzEzMUw0LjQyOTMxIDEuODgzOTVMNC44MjUzMSA1LjIxMDM0TDYuOTU1NjggMS42MzEzMVpNMy43NTA0NiAyLjUyNjFMMS44MTIyNiA1LjE3NDk4SDQuMDY1OEwzLjc1MDQ2IDIuNTI2MVpNMS43OTQxNiA2LjAyNTAxTDYuNzU4NjEgMTIuMDU4N0w0LjIyMzcxIDYuMDY2OUM0LjIxNzg3IDYuMDUzMSA0LjIxMzE0IDYuMDM5MSA0LjIwOTQ5IDYuMDI1MDFIMS43OTQxNlpNNS4xNTA1NSA2LjAyNTAxTDcuNDk5OTkgMTIuMTA4NUw5Ljg0OTQzIDYuMDI1MDFIOS43ODY4MUg1LjIxMzE5SDUuMTUwNTVaTTEwLjc5MDUgNi4wMjUwMUMxMC43ODY5IDYuMDM5MSAxMC43ODIxIDYuMDUzMSAxMC43NzYzIDYuMDY2OUw4LjI0MTM5IDEyLjA1ODdMMTMuMjA1OCA2LjAyNTAxSDEwLjc5MDVaTTcuNSAyLjE4MzE3TDkuMzQwMzggNS4yNzUwMUg1LjY1OTYyTDcuNSAyLjE4MzE3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sU3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMTA4NzYgMTRMOS40NjU4MiAxSDEwLjgxNzhMNS40NjA3NCAxNEg0LjEwODc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sanI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwLjMwMDQgNy40OTk5MUMxMC4zMDA0IDguNDk0MyA5LjQ5NDI2IDkuMzAwNDEgOC40OTk4OCA5LjMwMDQxQzcuNTA1NDkgOS4zMDA0MSA2LjY5OTM4IDguNDk0MyA2LjY5OTM4IDcuNDk5OTFDNi42OTkzOCA2LjUwNTUzIDcuNTA1NDkgNS42OTk0MiA4LjQ5OTg4IDUuNjk5NDJDOS40OTQyNiA1LjY5OTQyIDEwLjMwMDQgNi41MDU1MyAxMC4zMDA0IDcuNDk5OTFaTTExLjIwNSA4QzEwLjk2OTkgOS4yODAyOSA5Ljg0ODE2IDEwLjI1MDQgOC40OTk4OCAxMC4yNTA0QzcuMTUxNiAxMC4yNTA0IDYuMDI5OSA5LjI4MDI5IDUuNzk0NzMgOEgwLjVDMC4yMjM4NTggOCAwIDcuNzc2MTQgMCA3LjVDMCA3LjIyMzg2IDAuMjIzODU4IDcgMC41IDdINS43OTQ3QzYuMDI5OCA1LjcxOTYyIDcuMTUxNTQgNC43NDk0MiA4LjQ5OTg4IDQuNzQ5NDJDOS44NDgyMiA0Ljc0OTQyIDEwLjk2OTkgNS43MTk2MiAxMS4yMDUxIDdIMTQuNUMxNC43NzYxIDcgMTUgNy4yMjM4NiAxNSA3LjVDMTUgNy43NzYxNCAxNC43NzYxIDggMTQuNSA4SDExLjIwNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE1yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNC40OTk5IDAuOTk5OTk0QzE0LjIyMzcgMC45OTk5OTQgMTMuOTk5OSAxLjIyMzg1IDEzLjk5OTkgMS40OTk5OUwxMy45OTk5IDUuOTk5OTVMOS45OTk5MiA1Ljk5OTk1QzkuNDQ3NjQgNS45OTk5NSA4Ljk5OTkzIDYuNDQ3NjYgOC45OTk5MyA2Ljk5OTk0TDguOTk5OTMgNy45OTk5NEM4Ljk5OTkzIDguNTUyMjIgOS40NDc2NCA4Ljk5OTkzIDkuOTk5OTIgOC45OTk5M0wxMy45OTk5IDguOTk5OTNMMTMuOTk5OSAxMy40OTk5QzEzLjk5OTkgMTMuNzc2IDE0LjIyMzcgMTMuOTk5OSAxNC40OTk5IDEzLjk5OTlDMTQuNzc2IDEzLjk5OTkgMTQuOTk5OSAxMy43NzYgMTQuOTk5OSAxMy40OTk5TDE0Ljk5OTkgMS40OTk5OUMxNC45OTk5IDEuMjIzODUgMTQuNzc2IDAuOTk5OTk0IDE0LjQ5OTkgMC45OTk5OTRaTTQuOTk5OTYgNS45OTk5NUwwLjk5OTk5MiA1Ljk5OTk1TDAuOTk5OTkyIDEuNDk5OTlDMC45OTk5OTIgMS4yMjM4NSAwLjc3NjEzNiAwLjk5OTk5NCAwLjQ5OTk5NiAwLjk5OTk5NEMwLjIyMzg1NiAwLjk5OTk5NCAtOS43ODUyZS0wOSAxLjIyMzg1IC0yLjE4NTU3ZS0wOCAxLjQ5OTk5TDQuMDcyNzllLTA3IDEzLjQ5OTlDMy45NTIwOGUtMDcgMTMuNzc2IDAuMjIzODU1IDEzLjk5OTkgMC40OTk5OTYgMTMuOTk5OUMwLjc3NjEzNiAxMy45OTk5IDAuOTk5OTkyIDEzLjc3NiAwLjk5OTk5MiAxMy40OTk5TDAuOTk5OTkyIDguOTk5OTNMNC45OTk5NiA4Ljk5OTkzQzUuNTUyMjQgOC45OTk5MyA1Ljk5OTk1IDguNTUyMjIgNS45OTk5NSA3Ljk5OTkzTDUuOTk5OTUgNi45OTk5NEM1Ljk5OTk1IDYuNDQ3NjYgNS41NTIyNCA1Ljk5OTk1IDQuOTk5OTYgNS45OTk5NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGtyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjk5OTg3OCAwLjVDMC45OTk4NzggMC4yMjM4NTggMS4yMjM3NCAwIDEuNDk5ODggMEgxMy40OTk5QzEzLjc3NiAwIDEzLjk5OTkgMC4yMjM4NTggMTMuOTk5OSAwLjVDMTMuOTk5OSAwLjc3NjE0MiAxMy43NzYgMSAxMy40OTk5IDFMOSAxVjVDOSA1LjU1MjI4IDguNTUyMjggNiA4IDZIN0M2LjQ0NzcyIDYgNiA1LjU1MjI4IDYgNVYxSDEuNDk5ODhDMS4yMjM3NCAxIDAuOTk5ODc4IDAuNzc2MTQyIDAuOTk5ODc4IDAuNVpNNyA5QzYuNDQ3NzIgOSA2IDkuNDQ3NzEgNiAxMFYxNEgxLjQ5OTg4QzEuMjIzNzQgMTQgMC45OTk4NzggMTQuMjIzOSAwLjk5OTg3OCAxNC41QzAuOTk5ODc4IDE0Ljc3NjEgMS4yMjM3NCAxNSAxLjQ5OTg4IDE1SDEzLjQ5OTlDMTMuNzc2IDE1IDEzLjk5OTkgMTQuNzc2MSAxMy45OTk5IDE0LjVDMTMuOTk5OSAxNC4yMjM5IDEzLjc3NiAxNCAxMy40OTk5IDE0SDlWMTBDOSA5LjQ0NzcyIDguNTUyMjggOSA4IDlIN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFJyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNC40OTk5IDAuOTk5OTkyQzE0LjIyMzcgMC45OTk5OTIgMTMuOTk5OSAxLjIyMzg1IDEzLjk5OTkgMS40OTk5OUwxMy45OTk5IDEzLjQ5OTlDMTMuOTk5OSAxMy43NzYgMTQuMjIzNyAxMy45OTk5IDE0LjQ5OTkgMTMuOTk5OUMxNC43NzYgMTMuOTk5OSAxNC45OTk5IDEzLjc3NiAxNC45OTk5IDEzLjQ5OTlMMTQuOTk5OSAxLjQ5OTk5QzE0Ljk5OTkgMS4yMjM4NSAxNC43NzYgMC45OTk5OTIgMTQuNDk5OSAwLjk5OTk5MlpNMC40OTk5OTYgMC45OTk5OTJDMC4yMjM4NTYgMC45OTk5OTIgLTkuNzg1MDllLTA5IDEuMjIzODUgLTIuMTg1NTZlLTA4IDEuNDk5OTlMNC4wNzI3OWUtMDcgMTMuNDk5OUMzLjk1MjA4ZS0wNyAxMy43NzYgMC4yMjM4NTUgMTMuOTk5OSAwLjQ5OTk5NiAxMy45OTk5QzAuNzc2MTM2IDEzLjk5OTkgMC45OTk5OTIgMTMuNzc2IDAuOTk5OTkyIDEzLjQ5OTlMMC45OTk5OTIgMS40OTk5OUMwLjk5OTk5MiAxLjIyMzg1IDAuNzc2MTM2IDAuOTk5OTkyIDAuNDk5OTk2IDAuOTk5OTkyWk0xLjk5OTk4IDYuOTk5OTRDMS45OTk5OCA2LjQ0NzY2IDIuNDQ3NjkgNS45OTk5NSAyLjk5OTk4IDUuOTk5OTVMNS45OTk5NSA1Ljk5OTk1QzYuNTUyMjMgNS45OTk5NSA2Ljk5OTk0IDYuNDQ3NjYgNi45OTk5NCA2Ljk5OTk0TDYuOTk5OTQgNy45OTk5M0M2Ljk5OTk0IDguNTUyMjEgNi41NTIyMyA4Ljk5OTkyIDUuOTk5OTUgOC45OTk5MkwyLjk5OTk4IDguOTk5OTJDMi40NDc3IDguOTk5OTIgMS45OTk5OCA4LjU1MjIxIDEuOTk5OTggNy45OTk5M0wxLjk5OTk4IDYuOTk5OTRaTTguOTk5OTMgNS45OTk5NUM4LjQ0NzY1IDUuOTk5OTUgNy45OTk5MyA2LjQ0NzY2IDcuOTk5OTMgNi45OTk5NEw3Ljk5OTkzIDcuOTk5OTNDNy45OTk5MyA4LjU1MjIxIDguNDQ3NjUgOC45OTk5MiA4Ljk5OTkzIDguOTk5OTJMMTEuOTk5OSA4Ljk5OTkyQzEyLjU1MjIgOC45OTk5MiAxMi45OTk5IDguNTUyMjEgMTIuOTk5OSA3Ljk5OTkzTDEyLjk5OTkgNi45OTk5NEMxMi45OTk5IDYuNDQ3NjYgMTIuNTUyMiA1Ljk5OTk1IDExLjk5OTkgNS45OTk5NUw4Ljk5OTkzIDUuOTk5OTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC45OTk4NzggMC41QzAuOTk5ODc4IDAuMjIzODU4IDEuMjIzNzQgMCAxLjQ5OTg4IDBIMTMuNDk5OUMxMy43NzYgMCAxMy45OTk5IDAuMjIzODU4IDEzLjk5OTkgMC41QzEzLjk5OTkgMC43NzYxNDIgMTMuNzc2IDEgMTMuNDk5OSAxSDEuNDk5ODhDMS4yMjM3NCAxIDAuOTk5ODc4IDAuNzc2MTQyIDAuOTk5ODc4IDAuNVpNNyAyQzYuNDQ3NzIgMiA2IDIuNDQ3NzIgNiAzVjZDNiA2LjU1MjI4IDYuNDQ3NzIgNyA3IDdIOEM4LjU1MjI4IDcgOSA2LjU1MjI4IDkgNlYzQzkgMi40NDc3MiA4LjU1MjI4IDIgOCAySDdaTTcgOEM2LjQ0NzcyIDggNiA4LjQ0NzcxIDYgOVYxMkM2IDEyLjU1MjMgNi40NDc3MiAxMyA3IDEzSDhDOC41NTIyOCAxMyA5IDEyLjU1MjMgOSAxMlY5QzkgOC40NDc3MiA4LjU1MjI4IDggOCA4SDdaTTEuNDk5ODggMTRDMS4yMjM3NCAxNCAwLjk5OTg3OCAxNC4yMjM5IDAuOTk5ODc4IDE0LjVDMC45OTk4NzggMTQuNzc2MSAxLjIyMzc0IDE1IDEuNDk5ODggMTVIMTMuNDk5OUMxMy43NzYgMTUgMTMuOTk5OSAxNC43NzYxIDEzLjk5OTkgMTQuNUMxMy45OTk5IDE0LjIyMzkgMTMuNzc2IDE0IDEzLjQ5OTkgMTRIMS40OTk4OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LElyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ2OTY4IDEuMDUwODVDNy42NDEyMiAxLjEzNDc1IDcuNzUgMS4zMDkwNCA3Ljc1IDEuNVYxMy41QzcuNzUgMTMuNjkxIDcuNjQxMjIgMTMuODY1MyA3LjQ2OTY4IDEzLjk0OTJDNy4yOTgxMyAxNC4wMzMxIDcuMDkzNzcgMTQuMDExOSA2Ljk0MzAzIDEzLjg5NDdMMy4yMjEzIDExSDEuNUMwLjY3MTU3MSAxMSAwIDEwLjMyODQgMCA5LjVWNS41QzAgNC42NzE1OCAwLjY3MTU3MyA0IDEuNSA0SDMuMjIxM0w2Ljk0MzAzIDEuMTA1MzNDNy4wOTM3NyAwLjk4ODA4NSA3LjI5ODEzIDAuOTY2OTQ1IDcuNDY5NjggMS4wNTA4NVpNNi43NSAyLjUyMjMyTDMuNjk5ODMgNC44OTQ2OEMzLjYxMjA2IDQuOTYyOTQgMy41MDQwNSA1IDMuMzkyODYgNUgxLjVDMS4yMjM4NiA1IDEgNS4yMjM4NiAxIDUuNVY5LjVDMSA5Ljc3NjE1IDEuMjIzODYgMTAgMS41IDEwSDMuMzkyODZDMy41MDQwNSAxMCAzLjYxMjA2IDEwLjAzNzEgMy42OTk4MyAxMC4xMDUzTDYuNzUgMTIuNDc3N1YyLjUyMjMyWk0xMC4yNzg0IDMuODQ4MDRDMTAuNDYyMyAzLjcyNTY3IDEwLjcxMDYgMy43NzU1NyAxMC44MzMgMy45NTk0OUMxMi4yNTU4IDYuMDk3OTggMTIuMjU1OCA4LjkwMTk5IDEwLjgzMyAxMS4wNDA1QzEwLjcxMDYgMTEuMjI0NCAxMC40NjIzIDExLjI3NDMgMTAuMjc4NCAxMS4xNTE5QzEwLjA5NDQgMTEuMDI5NiAxMC4wNDQ1IDEwLjc4MTMgMTAuMTY2OSAxMC41OTczQzExLjQxMTEgOC43MjcyOCAxMS40MTExIDYuMjcyNjkgMTAuMTY2OSA0LjQwMjY0QzEwLjA0NDUgNC4yMTg3MSAxMC4wOTQ0IDMuOTcwNDEgMTAuMjc4NCAzLjg0ODA0Wk0xMi42Nzg1IDEuNDMwNDRDMTIuNTM1NiAxLjI2MTkgMTIuMjgzMiAxLjI0MTA0IDEyLjExNDcgMS4zODM4NkMxMS45NDYyIDEuNTI2NjcgMTEuOTI1MyAxLjc3OTA4IDEyLjA2ODEgMS45NDc2MkMxNC43NzczIDUuMTQ0ODggMTQuNzc3MyA5Ljg1NTEzIDEyLjA2ODEgMTMuMDUyNEMxMS45MjUzIDEzLjIyMDkgMTEuOTQ2MiAxMy40NzMzIDEyLjExNDcgMTMuNjE2MUMxMi4yODMyIDEzLjc1OSAxMi41MzU2IDEzLjczODEgMTIuNjc4NSAxMy41Njk2QzE1LjY0MDYgMTAuMDczOSAxNS42NDA2IDQuOTI2MTIgMTIuNjc4NSAxLjQzMDQ0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTggMS41QzggMS4zMTA2MiA3Ljg5MyAxLjEzNzQ5IDcuNzIzNjEgMS4wNTI3OUM3LjU1NDIxIDAuOTY4MDkzIDcuMzUxNTEgMC45ODYzNzEgNy4yIDEuMUwzLjMzMzMzIDRIMS41QzAuNjcxNTczIDQgMCA0LjY3MTU4IDAgNS41VjkuNUMwIDEwLjMyODQgMC42NzE1NzMgMTEgMS41IDExSDMuMzMzMzNMNy4yIDEzLjlDNy4zNTE1MSAxNC4wMTM2IDcuNTU0MjEgMTQuMDMxOSA3LjcyMzYxIDEzLjk0NzJDNy44OTMgMTMuODYyNSA4IDEzLjY4OTQgOCAxMy41VjEuNVpNMy44IDQuOUw3IDIuNVYxMi41TDMuOCAxMC4xQzMuNzEzNDUgMTAuMDM1MSAzLjYwODE5IDEwIDMuNSAxMEgxLjVDMS4yMjM4NiAxMCAxIDkuNzc2MTQgMSA5LjVWNS41QzEgNS4yMjM4NiAxLjIyMzg2IDUgMS41IDVIMy41QzMuNjA4MTkgNSAzLjcxMzQ1IDQuOTY0OTEgMy44IDQuOVpNMTAuODMzIDMuOTU5NDlDMTAuNzEwNiAzLjc3NTU3IDEwLjQ2MjMgMy43MjU2NyAxMC4yNzg0IDMuODQ4MDRDMTAuMDk0NCAzLjk3MDQxIDEwLjA0NDUgNC4yMTg3MSAxMC4xNjY5IDQuNDAyNjRDMTEuNDExMSA2LjI3MjY4IDExLjQxMTEgOC43MjcyOCAxMC4xNjY5IDEwLjU5NzNDMTAuMDQ0NSAxMC43ODEzIDEwLjA5NDQgMTEuMDI5NiAxMC4yNzg0IDExLjE1MTlDMTAuNDYyMyAxMS4yNzQzIDEwLjcxMDYgMTEuMjI0NCAxMC44MzMgMTEuMDQwNUMxMi4yNTU4IDguOTAxOTkgMTIuMjU1OCA2LjA5Nzk4IDEwLjgzMyAzLjk1OTQ5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNzIzNjEgMS4wNTI3OUM3Ljg5MyAxLjEzNzQ5IDggMS4zMTA2MiA4IDEuNVYxMy41QzggMTMuNjg5NCA3Ljg5MyAxMy44NjI1IDcuNzIzNjEgMTMuOTQ3MkM3LjU1NDIxIDE0LjAzMTkgNy4zNTE1MSAxNC4wMTM2IDcuMiAxMy45TDMuMzMzMzMgMTFIMS41QzAuNjcxNTczIDExIDAgMTAuMzI4NCAwIDkuNVY1LjVDMCA0LjY3MTU4IDAuNjcxNTczIDQgMS41IDRIMy4zMzMzM0w3LjIgMS4xQzcuMzUxNTEgMC45ODYzNzEgNy41NTQyMSAwLjk2ODA5MyA3LjcyMzYxIDEuMDUyNzlaTTcgMi41TDMuOCA0LjlDMy43MTM0NSA0Ljk2NDkxIDMuNjA4MTkgNSAzLjUgNUgxLjVDMS4yMjM4NiA1IDEgNS4yMjM4NiAxIDUuNVY5LjVDMSA5Ljc3NjE0IDEuMjIzODYgMTAgMS41IDEwSDMuNUMzLjYwODE5IDEwIDMuNzEzNDUgMTAuMDM1MSAzLjggMTAuMUw3IDEyLjVWMi41Wk0xNC44NTM2IDUuMTQ2NDVDMTUuMDQ4OCA1LjM0MTcxIDE1LjA0ODggNS42NTgyOSAxNC44NTM2IDUuODUzNTVMMTMuMjA3MSA3LjVMMTQuODUzNiA5LjE0NjQ1QzE1LjA0ODggOS4zNDE3MSAxNS4wNDg4IDkuNjU4MjkgMTQuODUzNiA5Ljg1MzU1QzE0LjY1ODMgMTAuMDQ4OCAxNC4zNDE3IDEwLjA0ODggMTQuMTQ2NCA5Ljg1MzU1TDEyLjUgOC4yMDcxMUwxMC44NTM2IDkuODUzNTVDMTAuNjU4MyAxMC4wNDg4IDEwLjM0MTcgMTAuMDQ4OCAxMC4xNDY0IDkuODUzNTVDOS45NTExOCA5LjY1ODI5IDkuOTUxMTggOS4zNDE3MSAxMC4xNDY0IDkuMTQ2NDVMMTEuNzkyOSA3LjVMMTAuMTQ2NCA1Ljg1MzU1QzkuOTUxMTggNS42NTgyOSA5Ljk1MTE4IDUuMzQxNzEgMTAuMTQ2NCA1LjE0NjQ1QzEwLjM0MTcgNC45NTExOCAxMC42NTgzIDQuOTUxMTggMTAuODUzNiA1LjE0NjQ1TDEyLjUgNi43OTI4OUwxNC4xNDY0IDUuMTQ2NDVDMTQuMzQxNyA0Ljk1MTE4IDE0LjY1ODMgNC45NTExOCAxNC44NTM2IDUuMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOCAxLjVDOCAxLjMxMDYyIDcuODkzIDEuMTM3NDkgNy43MjM2MSAxLjA1Mjc5QzcuNTU0MjEgMC45NjgwOTMgNy4zNTE1MSAwLjk4NjM3MSA3LjIgMS4xTDMuMzMzMzMgNEgxLjVDMC42NzE1NzMgNCAwIDQuNjcxNTggMCA1LjVWOS41QzAgMTAuMzI4NCAwLjY3MTU3MyAxMSAxLjUgMTFIMy4zMzMzM0w3LjIgMTMuOUM3LjM1MTUxIDE0LjAxMzYgNy41NTQyMSAxNC4wMzE5IDcuNzIzNjEgMTMuOTQ3MkM3Ljg5MyAxMy44NjI1IDggMTMuNjg5NCA4IDEzLjVWMS41Wk0zLjggNC45TDcgMi41VjEyLjVMMy44IDEwLjFDMy43MTM0NSAxMC4wMzUxIDMuNjA4MTkgMTAgMy41IDEwSDEuNUMxLjIyMzg2IDEwIDEgOS43NzYxNCAxIDkuNVY1LjVDMSA1LjIyMzg2IDEuMjIzODYgNSAxLjUgNUgzLjVDMy42MDgxOSA1IDMuNzEzNDUgNC45NjQ5MSAzLjggNC45Wk0xMC4wODMgNS4wNTU3N0M5Ljk2MDY2IDQuODcxODUgOS43MTIzNSA0LjgyMTk1IDkuNTI4NDMgNC45NDQzMkM5LjM0NDUgNS4wNjY2OSA5LjI5NDYgNS4zMTQ5OSA5LjQxNjk3IDUuNDk4OTJDMTAuMjIwNyA2LjcwNjkzIDEwLjIyMDcgOC4yOTMwMyA5LjQxNjk3IDkuNTAxMDRDOS4yOTQ2IDkuNjg0OTYgOS4zNDQ1IDkuOTMzMjYgOS41Mjg0MyAxMC4wNTU2QzkuNzEyMzUgMTAuMTc4IDkuOTYwNjYgMTAuMTI4MSAxMC4wODMgOS45NDQxOEMxMS4wNjUzIDguNDY3NzMgMTEuMDY1MyA2LjUzMjIyIDEwLjA4MyA1LjA1NTc3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgMUgxLjVIMTMuNUgxNFYxLjVWMTMuNVYxNEgxMy41SDEuNUgxVjEzLjVWMS41VjFaTTIgMlYxM0gxM1YySDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxWcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy43NTQzMiAxLjgxOTU0QzcuNTk3NDIgMS43MjY4MiA3LjQwMjUgMS43MjY4MiA3LjI0NTU5IDEuODE5NTRMMS43NDU1OSA1LjA2OTU0QzEuNTkzMzYgNS4xNTk0OSAxLjQ5OTk2IDUuMzIzMTcgMS40OTk5NiA1LjVDMS40OTk5NiA1LjY3NjgzIDEuNTkzMzYgNS44NDA1MSAxLjc0NTU5IDUuOTMwNDZMNy4yNDU1OSA5LjE4MDQ2QzcuNDAyNSA5LjI3MzE4IDcuNTk3NDIgOS4yNzMxOCA3Ljc1NDMyIDkuMTgwNDZMMTMuMjU0MyA1LjkzMDQ2QzEzLjQwNjYgNS44NDA1MSAxMy41IDUuNjc2ODMgMTMuNSA1LjVDMTMuNSA1LjMyMzE3IDEzLjQwNjYgNS4xNTk0OSAxMy4yNTQzIDUuMDY5NTRMNy43NTQzMiAxLjgxOTU0Wk03LjQ5OTk2IDguMTY5MjNMMi45ODI4IDUuNUw3LjQ5OTk2IDIuODMwNzdMMTIuMDE3MSA1LjVMNy40OTk5NiA4LjE2OTIzWk0yLjI1NDMyIDguMzE5NTRDMi4wMTY1OCA4LjE3OTA2IDEuNzA5OTggOC4yNTc5IDEuNTY5NDkgOC40OTU2NEMxLjQyOTAxIDguNzMzMzcgMS41MDc4NSA5LjAzOTk4IDEuNzQ1NTkgOS4xODA0Nkw3LjI0NTU5IDEyLjQzMDVDNy40MDI1IDEyLjUyMzIgNy41OTc0MiAxMi41MjMyIDcuNzU0MzIgMTIuNDMwNUwxMy4yNTQzIDkuMTgwNDZDMTMuNDkyMSA5LjAzOTk4IDEzLjU3MDkgOC43MzMzNyAxMy40MzA0IDguNDk1NjRDMTMuMjg5OSA4LjI1NzkgMTIuOTgzMyA4LjE3OTA2IDEyLjc0NTYgOC4zMTk1NEw3LjQ5OTk2IDExLjQxOTJMMi4yNTQzMiA4LjMxOTU0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuOTc5NDIgMS4yNTE3MUw2Ljk1ODUgMS4zMDE5OUw1LjU4NjYyIDQuNjAwMzlDNS41NDM0MiA0LjcwNDI2IDUuNDQ1NzMgNC43NzUyMyA1LjMzMzYgNC43ODQyMkwxLjc3MjcgNS4wNjk3TDEuNzE4NDEgNS4wNzQwNUwxLjM4Njg3IDUuMTAwNjNMMS4wODYwOCA1LjEyNDc1QzAuODIwMDg1IDUuMTQ2MDcgMC43MTIyMjggNS40NzgwMiAwLjkxNDg4OSA1LjY1MTYyTDEuMTQ0MDYgNS44NDc5M0wxLjM5NjY2IDYuMDY0MzFMMS40MzgwMiA2LjA5OTc0TDQuMTUxMDUgOC40MjM3NEM0LjIzNjQ4IDguNDk2OTIgNC4yNzM4IDguNjExNzYgNC4yNDc2OSA4LjcyMTE4TDMuNDE4ODIgMTIuMTk2TDMuNDA2MTggMTIuMjQ5TDMuMzI5MDEgMTIuNTcyNUwzLjI1ODk5IDEyLjg2NkMzLjE5NzA4IDEzLjEyNTYgMy40Nzk0NSAxMy4zMzA4IDMuNzA3MTggMTMuMTkxN0wzLjk2NDcgMTMuMDM0NEw0LjI0ODU0IDEyLjg2MUw0LjI5NTAyIDEyLjgzMjZMNy4zNDM2NSAxMC45NzA1QzcuNDM5NjUgMTAuOTExOSA3LjU2MDQgMTAuOTExOSA3LjY1NjQgMTAuOTcwNUwxMC43MDUgMTIuODMyNkwxMC43NTE1IDEyLjg2MUwxMS4wMzU0IDEzLjAzNDRMMTEuMjkyOSAxMy4xOTE3QzExLjUyMDYgMTMuMzMwOCAxMS44MDMgMTMuMTI1NiAxMS43NDExIDEyLjg2NkwxMS42NzEgMTIuNTcyNUwxMS41OTM5IDEyLjI0OUwxMS41ODEyIDEyLjE5NkwxMC43NTI0IDguNzIxMThDMTAuNzI2MyA4LjYxMTc2IDEwLjc2MzYgOC40OTY5MiAxMC44NDkgOC40MjM3NEwxMy41NjIgNi4wOTk3NEwxMy42MDM0IDYuMDY0MzFMMTMuODU2IDUuODQ3OTNMMTQuMDg1MiA1LjY1MTYyQzE0LjI4NzggNS40NzgwMiAxNC4xOCA1LjE0NjA3IDEzLjkxNCA1LjEyNDc1TDEzLjYxMzIgNS4xMDA2M0wxMy4yODE2IDUuMDc0MDVMMTMuMjI3NCA1LjA2OTdMOS42NjY0NSA0Ljc4NDIyQzkuNTU0MzIgNC43NzUyMyA5LjQ1NjYzIDQuNzA0MjYgOS40MTM0MyA0LjYwMDM5TDguMDQxNTUgMS4zMDE5OUw4LjAyMDY0IDEuMjUxNzFMNy44OTI5MSAwLjk0NDYwOUw3Ljc3NzAyIDAuNjY1OTkyQzcuNjc0NTQgMC40MTk2MDQgNy4zMjU1MSAwLjQxOTYwNCA3LjIyMzAzIDAuNjY1OTkyTDcuMTA3MTUgMC45NDQ2MDlMNi45Nzk0MiAxLjI1MTcxWk03LjUwMDAzIDIuNjAzOTdMNi41MDk5NCA0Ljk4NDQyQzYuMzIyNzMgNS40MzQ1MyA1Ljg5OTQ0IDUuNzQyMDcgNS40MTM1MSA1Ljc4MTAzTDIuODQzNjEgNS45ODcwNUw0LjgwMTYgNy42NjQyOEM1LjE3MTgzIDcuOTgxNDIgNS4zMzM1MSA4LjQ3OTAzIDUuMjIwNCA4Ljk1MzIxTDQuNjIyMjEgMTEuNDYxTDYuODIyNCAxMC4xMTcxQzcuMjM4NDIgOS44NjMwMiA3Ljc2MTY0IDkuODYzMDIgOC4xNzc2NiAxMC4xMTcxTDEwLjM3NzggMTEuNDYxTDkuNzc5NjUgOC45NTMyMUM5LjY2NjU0IDguNDc5MDMgOS44MjgyMiA3Ljk4MTQyIDEwLjE5ODQgNy42NjQyOEwxMi4xNTY0IDUuOTg3MDVMOS41ODY1NCA1Ljc4MTAzQzkuMTAwNjEgNS43NDIwNyA4LjY3NzMyIDUuNDM0NTMgOC40OTAxMSA0Ljk4NDQyTDcuNTAwMDMgMi42MDM5N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFpyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjIyMzAzIDAuNjY1OTkyQzcuMzI1NTEgMC40MTk2MDQgNy42NzQ1NCAwLjQxOTYwNCA3Ljc3NzAyIDAuNjY1OTkyTDkuNDEzNDMgNC42MDAzOUM5LjQ1NjYzIDQuNzA0MjYgOS41NTQzMiA0Ljc3NTIzIDkuNjY2NDUgNC43ODQyMkwxMy45MTQgNS4xMjQ3NUMxNC4xOCA1LjE0NjA3IDE0LjI4NzggNS40NzgwMiAxNC4wODUyIDUuNjUxNjJMMTAuODQ5IDguNDIzNzRDMTAuNzYzNiA4LjQ5NjkyIDEwLjcyNjMgOC42MTE3NiAxMC43NTI0IDguNzIxMThMMTEuNzQxMSAxMi44NjZDMTEuODAzIDEzLjEyNTYgMTEuNTIwNiAxMy4zMzA4IDExLjI5MjkgMTMuMTkxN0w3LjY1NjQgMTAuOTcwNUM3LjU2MDQgMTAuOTExOSA3LjQzOTY1IDEwLjkxMTkgNy4zNDM2NSAxMC45NzA1TDMuNzA3MTggMTMuMTkxN0MzLjQ3OTQ1IDEzLjMzMDggMy4xOTcwOCAxMy4xMjU2IDMuMjU4OTkgMTIuODY2TDQuMjQ3NjkgOC43MjExOEM0LjI3MzggOC42MTE3NiA0LjIzNjQ4IDguNDk2OTIgNC4xNTEwNSA4LjQyMzc0TDAuOTE0ODg5IDUuNjUxNjJDMC43MTIyMjggNS40NzgwMiAwLjgyMDA4NiA1LjE0NjA3IDEuMDg2MDggNS4xMjQ3NUw1LjMzMzYgNC43ODQyMkM1LjQ0NTczIDQuNzc1MjMgNS41NDM0MiA0LjcwNDI2IDUuNTg2NjIgNC42MDAzOUw3LjIyMzAzIDAuNjY1OTkyWlwiLGZpbGw6bn0pKX0sJHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuODQ5OTggNy40OTk5OEMxLjg0OTk4IDcuMjEzMjEgMS44NzEzNCA2LjkzMTQzIDEuOTEyNTYgNi42NTYxNUw5LjU2Mzc0IDIuMjM4NzVDOS44NjMxMSAyLjM1NjI3IDEwLjE1IDIuNDk4NjEgMTAuNDIxOSAyLjY2MzIyTDMuNzcwNjUgNi41MDMzMkMzLjczNjY5IDYuNTIxODMgMy43MDQ4MiA2LjU0NDkgMy42NzYwMiA2LjU3MjM4QzMuNTkxMSA2LjY1MzA4IDMuNTQyNDUgNi43NjI4NiAzLjUzNjgyIDYuODc2NThDMy41MzM1OSA2Ljk0MTggMy41NDQ1MSA3LjAwODMxIDMuNTcwODYgNy4wNzEzN0MzLjU4OTI3IDcuMTE1NyAzLjYxNDkgNy4xNTc0MiAzLjY0NzQ0IDcuMTk0NThDMy42NzMwNiA3LjIyMzk2IDMuNzAyIDcuMjQ5NDEgMy43MzMzNyA3LjI3MDY5TDcuMzI1MzMgOS44MzgxM0wzLjg3MjMyIDExLjgzMTdDMi42MzYwNCAxMC43OTUzIDEuODQ5OTggOS4yMzk0NCAxLjg0OTk4IDcuNDk5OThaTTguMzY4NDMgMTAuMjc1MUM4LjM3NjgyIDEwLjI3MDYgOC4zODUwOSAxMC4yNjU5IDguMzkzMjIgMTAuMjYwOEw5Ljg0MDkxIDkuNDI0OTlDOS44NDcwNiA5LjQyMTYzIDkuODUzMTQgOS40MTgxMiA5Ljg1OTE1IDkuNDE0NDZMMTEuMzEwMSA4LjU3Njc3QzExLjM2NTUgOC41NDY0OSAxMS40MTU0IDguNTA0IDExLjQ1NTQgOC40NDk5NUMxMS42MDM0IDguMjUwMzEgMTEuNTYxNiA3Ljk2ODQ4IDExLjM2MiA3LjgyMDQ2TDcuODI3NzkgNS4yMDAxN0wxMS4yMTYxIDMuMjQzOTNDMTIuNDAxMyA0LjI3OTYzIDEzLjE1IDUuODAyMzcgMTMuMTUgNy40OTk5OEMxMy4xNSA3LjgzNTQ2IDEzLjEyMDcgOC4xNjQxMSAxMy4wNjQ3IDguNDgzNTNMNS41Njg3NSAxMi44MTEzQzUuMjYxMzggMTIuNjk5NSA0Ljk2NjQ2IDEyLjU2MTggNC42ODY2MiAxMi40MDA4TDguMzY4NDMgMTAuMjc1MVpNOC4xODE0OSA5LjM0MzgzTDQuODE2NTkgNi45Mzg2OEw1LjUwOTE4IDYuNTM4ODFMOC44MDYwNCA4Ljk4MzI0TDguMTgxNDkgOS4zNDM4M1pNNi4zNTg3NSA2LjA0ODMyTDYuOTc4MjIgNS42OTA2N0wxMC4yNzUxIDguMTM1MDZMOS42NTU2IDguNDkyNzVMNi4zNTg3NSA2LjA0ODMyWk04LjMzMTggMS45MTA3OEwyLjI0MjYzIDUuNDI2MzZDMy4wNjk0MSAzLjMzMTg4IDUuMTExNjQgMS44NDk5OCA3LjQ5OTk4IDEuODQ5OThDNy43ODI1OCAxLjg0OTk4IDguMDYwMzMgMS44NzA3MiA4LjMzMTggMS45MTA3OFpNNi44NDY4NCAxMy4xMTI2QzcuMDYxMTQgMTMuMTM3MyA3LjI3OTA4IDEzLjE1IDcuNDk5OTggMTMuMTVDOS44MjQ2IDEzLjE1IDExLjgyMTMgMTEuNzQ2MSAxMi42ODg2IDkuNzM5OUw2Ljg0Njg0IDEzLjExMjZaTTcuNDk5OTggMC44NDk5NzZDMy44MjcyOCAwLjg0OTk3NiAwLjg0OTk3NiAzLjgyNzI4IDAuODQ5OTc2IDcuNDk5OThDMC44NDk5NzYgMTEuMTcyNyAzLjgyNzI4IDE0LjE1IDcuNDk5OTggMTQuMTVDMTEuMTcyNyAxNC4xNSAxNC4xNSAxMS4xNzI3IDE0LjE1IDcuNDk5OThDMTQuMTUgMy44MjcyOCAxMS4xNzI3IDAuODQ5OTc2IDcuNDk5OTggMC44NDk5NzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxOcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAzQzIgMi40NDc3MiAyLjQ0NzcyIDIgMyAySDEyQzEyLjU1MjMgMiAxMyAyLjQ0NzcyIDEzIDNWMTJDMTMgMTIuNTUyMyAxMi41NTIzIDEzIDEyIDEzSDNDMi40NDc3MiAxMyAyIDEyLjU1MjMgMiAxMlYzWk0xMiAzSDNWMTJIMTJWM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEZyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjQ5OTk4IDAuNUM1LjQ5OTk4IDAuMjIzODU4IDUuNzIzODMgMCA1Ljk5OTk4IDBINy40OTk5OEg4Ljk5OTk4QzkuMjc2MTIgMCA5LjQ5OTk4IDAuMjIzODU4IDkuNDk5OTggMC41QzkuNDk5OTggMC43NzYxNDIgOS4yNzYxMiAxIDguOTk5OTggMUg3Ljk5OTk4VjIuMTE5MjJDOS4wOTgzMiAyLjIwNDA5IDEwLjExOSAyLjU2NjIyIDEwLjk5MiAzLjEzNTcyQzExLjAxMTYgMy4xMDg1MSAxMS4wMzM2IDMuMDgyNTIgMTEuMDU4IDMuMDU4MDZMMTEuODU4IDIuMjU4MDZDMTIuMTAyMSAyLjAxMzk4IDEyLjQ5NzggMi4wMTM5OCAxMi43NDE5IDIuMjU4MDZDMTIuOTg2IDIuNTAyMTQgMTIuOTg2IDIuODk3ODYgMTIuNzQxOSAzLjE0MTk0TDExLjk2NyAzLjkxNjgyQzEzLjE1OTUgNS4wNzkyNSAxMy45IDYuNzAzMTQgMTMuOSA4LjQ5OTk4QzEzLjkgMTIuMDM0NiAxMS4wMzQ2IDE0LjkgNy40OTk5OCAxNC45QzMuOTY1MzUgMTQuOSAxLjA5OTk4IDEyLjAzNDYgMS4wOTk5OCA4LjQ5OTk4QzEuMDk5OTggNS4xMzM2MiAzLjY5OTA0IDIuMzc0MyA2Ljk5OTk4IDIuMTE5MjJWMUg1Ljk5OTk4QzUuNzIzODMgMSA1LjQ5OTk4IDAuNzc2MTQyIDUuNDk5OTggMC41Wk0yLjA5OTk4IDguNDk5OThDMi4wOTk5OCA1LjUxNzY0IDQuNTE3NjQgMy4wOTk5OCA3LjQ5OTk4IDMuMDk5OThDMTAuNDgyMyAzLjA5OTk4IDEyLjkgNS41MTc2NCAxMi45IDguNDk5OThDMTIuOSAxMS40ODIzIDEwLjQ4MjMgMTMuOSA3LjQ5OTk4IDEzLjlDNC41MTc2NCAxMy45IDIuMDk5OTggMTEuNDgyMyAyLjA5OTk4IDguNDk5OThaTTcuOTk5OTggNC41QzcuOTk5OTggNC4yMjM4NiA3Ljc3NjEyIDQgNy40OTk5OCA0QzcuMjIzODMgNCA2Ljk5OTk4IDQuMjIzODYgNi45OTk5OCA0LjVWOS41QzYuOTk5OTggOS43NzYxNCA3LjIyMzgzIDEwIDcuNDk5OTggMTBDNy43NzYxMiAxMCA3Ljk5OTk4IDkuNzc2MTQgNy45OTk5OCA5LjVWNC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTE0LjQ5OTkgMC45OTk5OTJDMTQuMjIzNyAwLjk5OTk5MiAxMy45OTk5IDEuMjIzODUgMTMuOTk5OSAxLjQ5OTk5TDEzLjk5OTkgNS45OTk5NUwwLjk5OTk5MiA1Ljk5OTk1TDAuOTk5OTkyIDEuNDk5OTlDMC45OTk5OTIgMS4yMjM4NSAwLjc3NjEzNiAwLjk5OTk5MiAwLjQ5OTk5NiAwLjk5OTk5MkMwLjIyMzg1NiAwLjk5OTk5MiAtOS43ODUwOWUtMDkgMS4yMjM4NSAtMi4xODU1NmUtMDggMS40OTk5OUw0LjA3Mjc5ZS0wNyAxMy40OTk5QzMuOTUyMDhlLTA3IDEzLjc3NiAwLjIyMzg1NSAxMy45OTk5IDAuNDk5OTk2IDEzLjk5OTlDMC43NzYxMzYgMTMuOTk5OSAwLjk5OTk5MiAxMy43NzYgMC45OTk5OTIgMTMuNDk5OUwwLjk5OTk5MiA4Ljk5OTkyTDEzLjk5OTkgOC45OTk5MkwxMy45OTk5IDEzLjQ5OTlDMTMuOTk5OSAxMy43NzYgMTQuMjIzNyAxMy45OTk5IDE0LjQ5OTkgMTMuOTk5OUMxNC43NzYgMTMuOTk5OSAxNC45OTk5IDEzLjc3NiAxNC45OTk5IDEzLjQ5OTlMMTQuOTk5OSAxLjQ5OTk5QzE0Ljk5OTkgMS4yMjM4NSAxNC43NzYgMC45OTk5OTIgMTQuNDk5OSAwLjk5OTk5MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjk5OTg3OCAwLjVDMC45OTk4NzggMC4yMjM4NTggMS4yMjM3NCAwIDEuNDk5ODggMEgxMy40OTk5QzEzLjc3NiAwIDEzLjk5OTkgMC4yMjM4NTggMTMuOTk5OSAwLjVDMTMuOTk5OSAwLjc3NjE0MiAxMy43NzYgMSAxMy40OTk5IDFINkgxLjQ5OTg4QzEuMjIzNzQgMSAwLjk5OTg3OCAwLjc3NjE0MiAwLjk5OTg3OCAwLjVaTTkgMTRWMUw2IDFWMTRIMS40OTk4OEMxLjIyMzc0IDE0IDAuOTk5ODc4IDE0LjIyMzkgMC45OTk4NzggMTQuNUMwLjk5OTg3OCAxNC43NzYxIDEuMjIzNzQgMTUgMS40OTk4OCAxNUgxMy40OTk5QzEzLjc3NiAxNSAxMy45OTk5IDE0Ljc3NjEgMTMuOTk5OSAxNC41QzEzLjk5OTkgMTQuMjIzOSAxMy43NzYgMTQgMTMuNDk5OSAxNEg5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0senI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuMDAwMDMgMy4yNUM1LjAwMDAzIDIuOTczODYgNC43NzYxNyAyLjc1IDQuNTAwMDMgMi43NUM0LjIyMzg5IDIuNzUgNC4wMDAwMyAyLjk3Mzg2IDQuMDAwMDMgMy4yNVY3LjEwMDAzSDIuNDk5OThDMi4yNzkwNiA3LjEwMDAzIDIuMDk5OTggNy4yNzkxMiAyLjA5OTk4IDcuNTAwMDNDMi4wOTk5OCA3LjcyMDk0IDIuMjc5MDYgNy45MDAwMyAyLjQ5OTk4IDcuOTAwMDNINC4wMDAwM1Y4LjU1QzQuMDAwMDMgMTAuNDgzIDUuNTY3MDMgMTIuMDUgNy41MDAwMyAxMi4wNUM5LjQzMzAzIDEyLjA1IDExIDEwLjQ4MyAxMSA4LjU1VjcuOTAwMDNIMTIuNUMxMi43MjA5IDcuOTAwMDMgMTIuOSA3LjcyMDk0IDEyLjkgNy41MDAwM0MxMi45IDcuMjc5MTIgMTIuNzIwOSA3LjEwMDAzIDEyLjUgNy4xMDAwM0gxMVYzLjI1QzExIDIuOTczODYgMTAuNzc2MiAyLjc1IDEwLjUgMi43NUMxMC4yMjM5IDIuNzUgMTAgMi45NzM4NiAxMCAzLjI1VjcuMTAwMDNINS4wMDAwM1YzLjI1Wk01LjAwMDAzIDcuOTAwMDNWOC41NUM1LjAwMDAzIDkuOTMwNzEgNi4xMTkzMiAxMS4wNSA3LjUwMDAzIDExLjA1QzguODgwNzQgMTEuMDUgMTAgOS45MzA3MSAxMCA4LjU1VjcuOTAwMDNINS4wMDAwM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMEM3Ljc3NjE0IDAgOCAwLjIyMzg1OCA4IDAuNVYyLjVDOCAyLjc3NjE0IDcuNzc2MTQgMyA3LjUgM0M3LjIyMzg2IDMgNyAyLjc3NjE0IDcgMi41VjAuNUM3IDAuMjIzODU4IDcuMjIzODYgMCA3LjUgMFpNMi4xOTY3IDIuMTk2N0MyLjM5MTk2IDIuMDAxNDQgMi43MDg1NCAyLjAwMTQ0IDIuOTAzODEgMi4xOTY3TDQuMzE4MDIgMy42MTA5MUM0LjUxMzI4IDMuODA2MTcgNC41MTMyOCA0LjEyMjc2IDQuMzE4MDIgNC4zMTgwMkM0LjEyMjc2IDQuNTEzMjggMy44MDYxNyA0LjUxMzI4IDMuNjEwOTEgNC4zMTgwMkwyLjE5NjcgMi45MDM4MUMyLjAwMTQ0IDIuNzA4NTQgMi4wMDE0NCAyLjM5MTk2IDIuMTk2NyAyLjE5NjdaTTAuNSA3QzAuMjIzODU4IDcgMCA3LjIyMzg2IDAgNy41QzAgNy43NzYxNCAwLjIyMzg1OCA4IDAuNSA4SDIuNUMyLjc3NjE0IDggMyA3Ljc3NjE0IDMgNy41QzMgNy4yMjM4NiAyLjc3NjE0IDcgMi41IDdIMC41Wk0yLjE5NjcgMTIuODAzM0MyLjAwMTQ0IDEyLjYwOCAyLjAwMTQ0IDEyLjI5MTUgMi4xOTY3IDEyLjA5NjJMMy42MTA5MSAxMC42ODJDMy44MDYxNyAxMC40ODY3IDQuMTIyNzYgMTAuNDg2NyA0LjMxODAyIDEwLjY4MkM0LjUxMzI4IDEwLjg3NzIgNC41MTMyOCAxMS4xOTM4IDQuMzE4MDIgMTEuMzg5MUwyLjkwMzgxIDEyLjgwMzNDMi43MDg1NCAxMi45OTg2IDIuMzkxOTYgMTIuOTk4NiAyLjE5NjcgMTIuODAzM1pNMTIuNSA3QzEyLjIyMzkgNyAxMiA3LjIyMzg2IDEyIDcuNUMxMiA3Ljc3NjE0IDEyLjIyMzkgOCAxMi41IDhIMTQuNUMxNC43NzYxIDggMTUgNy43NzYxNCAxNSA3LjVDMTUgNy4yMjM4NiAxNC43NzYxIDcgMTQuNSA3SDEyLjVaTTEwLjY4MiA0LjMxODAyQzEwLjQ4NjcgNC4xMjI3NiAxMC40ODY3IDMuODA2MTcgMTAuNjgyIDMuNjEwOTFMMTIuMDk2MiAyLjE5NjdDMTIuMjkxNSAyLjAwMTQ0IDEyLjYwOCAyLjAwMTQ0IDEyLjgwMzMgMi4xOTY3QzEyLjk5ODYgMi4zOTE5NiAxMi45OTg2IDIuNzA4NTQgMTIuODAzMyAyLjkwMzgxTDExLjM4OTEgNC4zMTgwMkMxMS4xOTM4IDQuNTEzMjggMTAuODc3MiA0LjUxMzI4IDEwLjY4MiA0LjMxODAyWk04IDEyLjVDOCAxMi4yMjM5IDcuNzc2MTQgMTIgNy41IDEyQzcuMjIzODYgMTIgNyAxMi4yMjM5IDcgMTIuNVYxNC41QzcgMTQuNzc2MSA3LjIyMzg2IDE1IDcuNSAxNUM3Ljc3NjE0IDE1IDggMTQuNzc2MSA4IDE0LjVWMTIuNVpNMTAuNjgyIDEwLjY4MkMxMC44NzcyIDEwLjQ4NjcgMTEuMTkzOCAxMC40ODY3IDExLjM4OTEgMTAuNjgyTDEyLjgwMzMgMTIuMDk2MkMxMi45OTg2IDEyLjI5MTUgMTIuOTk4NiAxMi42MDggMTIuODAzMyAxMi44MDMzQzEyLjYwOCAxMi45OTg2IDEyLjI5MTUgMTIuOTk4NiAxMi4wOTYyIDEyLjgwMzNMMTAuNjgyIDExLjM4OTFDMTAuNDg2NyAxMS4xOTM4IDEwLjQ4NjcgMTAuODc3MiAxMC42ODIgMTAuNjgyWk01LjUgNy41QzUuNSA2LjM5NTQzIDYuMzk1NDMgNS41IDcuNSA1LjVDOC42MDQ1NyA1LjUgOS41IDYuMzk1NDMgOS41IDcuNUM5LjUgOC42MDQ1NyA4LjYwNDU3IDkuNSA3LjUgOS41QzYuMzk1NDMgOS41IDUuNSA4LjYwNDU3IDUuNSA3LjVaTTcuNSA0LjVDNS44NDMxNSA0LjUgNC41IDUuODQzMTUgNC41IDcuNUM0LjUgOS4xNTY4NSA1Ljg0MzE1IDEwLjUgNy41IDEwLjVDOS4xNTY4NSAxMC41IDEwLjUgOS4xNTY4NSAxMC41IDcuNUMxMC41IDUuODQzMTUgOS4xNTY4NSA0LjUgNy41IDQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHFyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMC41IDRDOC41NjcgNCA3IDUuNTY3IDcgNy41QzcgOS40MzMgOC41NjcgMTEgMTAuNSAxMUMxMi40MzMgMTEgMTQgOS40MzMgMTQgNy41QzE0IDUuNTY3IDEyLjQzMyA0IDEwLjUgNFpNNy42NzEzMyAxMUM2LjY1MTgzIDEwLjE3NSA2IDguOTEzNjMgNiA3LjVDNiA2LjA4NjM3IDYuNjUxODMgNC44MjQ5OCA3LjY3MTMzIDRINC41QzIuNTY3IDQgMSA1LjU2NyAxIDcuNUMxIDkuNDMzIDIuNTY3IDExIDQuNSAxMUg3LjY3MTMzWk0wIDcuNUMwIDUuMDE0NzIgMi4wMTQ3MiAzIDQuNSAzSDEwLjVDMTIuOTg1MyAzIDE1IDUuMDE0NzIgMTUgNy41QzE1IDkuOTg1MjggMTIuOTg1MyAxMiAxMC41IDEySDQuNUMyLjAxNDcyIDEyIDAgOS45ODUyOCAwIDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFlyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjkwMzIxIDcuMjk2NzdDMS45MDMyMSAxMC4zNDEgNC4xMTA0MSAxMi40MTQ3IDYuNTg4OTMgMTIuODQzOUM2Ljg3MjU1IDEyLjg5MyA3LjA2MjY2IDEzLjE2MjcgNy4wMTM1NSAxMy40NDY0QzYuOTY0NDQgMTMuNzMgNi42OTQ3MSAxMy45MjAxIDYuNDExMDkgMTMuODcxQzMuNDk5NDIgMTMuMzY2OCAwLjg2MDg0IDEwLjkxMjcgMC44NjA4NCA3LjI5Njc3QzAuODYwODM5IDUuNzYwMDkgMS41NTk5NiA0LjU1MjQ1IDIuMzc2MzkgMy42MzM3N0MyLjk2MTI0IDIuOTc1NjggMy42MzAzNCAyLjQ0MTM1IDQuMTY4NDYgMi4wMzIwMkwyLjUzMjA1IDIuMDMyMDJDMi4yNTU5MSAyLjAzMjAyIDIuMDMyMDUgMS44MDgxNiAyLjAzMjA1IDEuNTMyMDJDMi4wMzIwNSAxLjI1NTg4IDIuMjU1OTEgMS4wMzIwMiAyLjUzMjA1IDEuMDMyMDJMNS41MzIwNSAxLjAzMjAyQzUuODA4MTkgMS4wMzIwMiA2LjAzMjA1IDEuMjU1ODggNi4wMzIwNSAxLjUzMjAyTDYuMDMyMDUgNC41MzIwMkM2LjAzMjA1IDQuODA4MTYgNS44MDgxOSA1LjAzMjAyIDUuNTMyMDUgNS4wMzIwMkM1LjI1NTkxIDUuMDMyMDIgNS4wMzIwNSA0LjgwODE2IDUuMDMyMDUgNC41MzIwMkw1LjAzMjA1IDIuNjg2NDVMNS4wMzA1NCAyLjY4NzU5TDUuMDMwNDUgMi42ODc2Nkw1LjAzMDQ0IDIuNjg3NjdMNS4wMzA0MyAyLjY4NzY3QzQuNDU4OTYgMy4xMTg2OCAzLjc2MDU5IDMuNjQ1MzggMy4xNTU1NCA0LjMyNjJDMi40NDEwMiA1LjEzMDIxIDEuOTAzMjEgNi4xMDE1NCAxLjkwMzIxIDcuMjk2NzdaTTEzLjAxMDkgNy43MDMyMUMxMy4wMTA5IDQuNjkxMTUgMTAuODUwNSAyLjYyOTYgOC40MDM4NCAyLjE3MDI5QzguMTIwOTMgMi4xMTcxOCA3LjkzNDY1IDEuODQ0NzkgNy45ODc3NiAxLjU2MTg4QzguMDQwODcgMS4yNzg5OCA4LjMxMzI2IDEuMDkyNyA4LjU5NjE2IDEuMTQ1ODFDMTEuNDcwNCAxLjY4NTQxIDE0LjA1MzIgNC4xMjYwNSAxNC4wNTMyIDcuNzAzMjFDMTQuMDUzMiA5LjIzOTg4IDEzLjM1NDEgMTAuNDQ3NSAxMi41Mzc3IDExLjM2NjJDMTEuOTUyOCAxMi4wMjQzIDExLjI4MzcgMTIuNTU4NiAxMC43NDU2IDEyLjk2OEwxMi4zODIxIDEyLjk2OEMxMi42NTgyIDEyLjk2OCAxMi44ODIxIDEzLjE5MTggMTIuODgyMSAxMy40NjhDMTIuODgyMSAxMy43NDQxIDEyLjY1ODIgMTMuOTY4IDEyLjM4MjEgMTMuOTY4TDkuMzgyMDUgMTMuOTY4QzkuMTA1OTEgMTMuOTY4IDguODgyMDUgMTMuNzQ0MSA4Ljg4MjA1IDEzLjQ2OEw4Ljg4MjA1IDEwLjQ2OEM4Ljg4MjA1IDEwLjE5MTggOS4xMDU5MSA5Ljk2Nzk2IDkuMzgyMDUgOS45Njc5NkM5LjY1ODE5IDkuOTY3OTYgOS44ODIwNSAxMC4xOTE4IDkuODgyMDUgMTAuNDY4TDkuODgyMDUgMTIuMzEzNUw5Ljg4MzYyIDEyLjMxMjNDMTAuNDU1MSAxMS44ODEzIDExLjE1MzUgMTEuMzU0NiAxMS43NTg1IDEwLjY3MzhDMTIuNDczMSA5Ljg2OTc2IDEzLjAxMDkgOC44OTg0NCAxMy4wMTA5IDcuNzAzMjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxLcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOCAySDEyLjVDMTIuNzc2MSAyIDEzIDIuMjIzODYgMTMgMi41VjVIOFYyWk03IDVWMkgyLjVDMi4yMjM4NiAyIDIgMi4yMjM4NiAyIDIuNVY1SDdaTTIgNlY5SDdWNkgyWk04IDZIMTNWOUg4VjZaTTggMTBIMTNWMTIuNUMxMyAxMi43NzYxIDEyLjc3NjEgMTMgMTIuNSAxM0g4VjEwWk0yIDEyLjVWMTBIN1YxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41Wk0xIDIuNUMxIDEuNjcxNTcgMS42NzE1NyAxIDIuNSAxSDEyLjVDMTMuMzI4NCAxIDE0IDEuNjcxNTcgMTQgMi41VjEyLjVDMTQgMTMuMzI4NCAxMy4zMjg0IDE0IDEyLjUgMTRIMi41QzEuNjcxNTcgMTQgMSAxMy4zMjg0IDEgMTIuNVYyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxYcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC45MDAwMjQgNy41MDAwMkMwLjkwMDAyNCAzLjg1NDk1IDMuODU0OTUgMC45MDAwMjQgNy41MDAwMiAwLjkwMDAyNEMxMS4xNDUxIDAuOTAwMDI0IDE0LjEgMy44NTQ5NSAxNC4xIDcuNTAwMDJDMTQuMSAxMS4xNDUxIDExLjE0NTEgMTQuMSA3LjUwMDAyIDE0LjFDMy44NTQ5NSAxNC4xIDAuOTAwMDI0IDExLjE0NTEgMC45MDAwMjQgNy41MDAwMlpNNy41MDAwMiAxLjgwMDAyQzQuMzUyMDEgMS44MDAwMiAxLjgwMDAyIDQuMzUyMDEgMS44MDAwMiA3LjUwMDAyQzEuODAwMDIgMTAuNjQ4IDQuMzUyMDEgMTMuMiA3LjUwMDAyIDEzLjJDMTAuNjQ4IDEzLjIgMTMuMiAxMC42NDggMTMuMiA3LjUwMDAyQzEzLjIgNC4zNTIwMSAxMC42NDggMS44MDAwMiA3LjUwMDAyIDEuODAwMDJaTTMuMDc1MDQgNy41MDAwMkMzLjA3NTA0IDUuMDU2MTcgNS4wNTYxOCAzLjA3NTAyIDcuNTAwMDQgMy4wNzUwMkM5Ljk0Mzg4IDMuMDc1MDIgMTEuOTI1IDUuMDU2MTcgMTEuOTI1IDcuNTAwMDJDMTEuOTI1IDkuOTQzODYgOS45NDM4OCAxMS45MjUgNy41MDAwNCAxMS45MjVDNS4wNTYxOCAxMS45MjUgMy4wNzUwNCA5Ljk0Mzg2IDMuMDc1MDQgNy41MDAwMlpNNy41MDAwNCAzLjkyNTAyQzUuNTI1NjIgMy45MjUwMiAzLjkyNTA0IDUuNTI1NjEgMy45MjUwNCA3LjUwMDAyQzMuOTI1MDQgOS40NzQ0MiA1LjUyNTYzIDExLjA3NSA3LjUwMDA0IDExLjA3NUM5LjQ3NDQ0IDExLjA3NSAxMS4wNzUgOS40NzQ0MiAxMS4wNzUgNy41MDAwMkMxMS4wNzUgNS41MjU2MSA5LjQ3NDQ0IDMuOTI1MDIgNy41MDAwNCAzLjkyNTAyWk03LjUwMDA0IDUuMjUwMDJDNi4yNTc0IDUuMjUwMDIgNS4yNTAwNCA2LjI1NzM5IDUuMjUwMDQgNy41MDAwMkM1LjI1MDA0IDguNzQyNjYgNi4yNTc0IDkuNzUwMDIgNy41MDAwNCA5Ljc1MDAyQzguNzQyNjcgOS43NTAwMiA5Ljc1MDA0IDguNzQyNjYgOS43NTAwNCA3LjUwMDAyQzkuNzUwMDQgNi4yNTczOCA4Ljc0MjY3IDUuMjUwMDIgNy41MDAwNCA1LjI1MDAyWk02LjA1MDA0IDcuNTAwMDJDNi4wNTAwNCA2LjY5OTIxIDYuNjk5MjMgNi4wNTAwMiA3LjUwMDA0IDYuMDUwMDJDOC4zMDA4NCA2LjA1MDAyIDguOTUwMDQgNi42OTkyMSA4Ljk1MDA0IDcuNTAwMDJDOC45NTAwNCA4LjMwMDgzIDguMzAwODQgOC45NTAwMiA3LjUwMDA0IDguOTUwMDJDNi42OTkyMyA4Ljk1MDAyIDYuMDUwMDQgOC4zMDA4MyA2LjA1MDA0IDcuNTAwMDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxKcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy45NDk5MyAyLjk1MDAyTDMuOTQ5OTMgNC40OTk5OEMzLjk0OTkzIDQuNzQ4NTEgMy43NDg0NSA0Ljk0OTk4IDMuNDk5OTMgNC45NDk5OEMzLjI1MTQgNC45NDk5OCAzLjA0OTkzIDQuNzQ4NTEgMy4wNDk5MyA0LjQ5OTk4VjIuNTAwMDRDMy4wNDk5MyAyLjQ1MjQ2IDMuMDU3MzEgMi40MDY2MSAzLjA3MDk5IDIuMzYzNTdDMy4xMjg3OCAyLjE4MTc1IDMuMjk4OTcgMi4wNTAwMiAzLjQ5OTkzIDIuMDUwMDJIMTEuNDk5OUMxMS42NTUzIDIuMDUwMDIgMTEuNzkyMiAyLjEyODcyIDExLjg3MzEgMi4yNDg0MkMxMS45MjE2IDIuMzIwMjQgMTEuOTQ5OSAyLjQwNjgyIDExLjk0OTkgMi41MDAwMkwxMS45NDk5IDIuNTAwMDRWNC40OTk5OEMxMS45NDk5IDQuNzQ4NTEgMTEuNzQ4NSA0Ljk0OTk4IDExLjQ5OTkgNC45NDk5OEMxMS4yNTE0IDQuOTQ5OTggMTEuMDQ5OSA0Ljc0ODUxIDExLjA0OTkgNC40OTk5OFYyLjk1MDAySDguMDQ5OTNWMTIuMDVIOS4yNTQyOEM5LjUwMjgxIDEyLjA1IDkuNzA0MjggMTIuMjUxNSA5LjcwNDI4IDEyLjVDOS43MDQyOCAxMi43NDg2IDkuNTAyODEgMTIuOTUgOS4yNTQyOCAxMi45NUg1Ljc1NDI4QzUuNTA1NzUgMTIuOTUgNS4zMDQyOCAxMi43NDg2IDUuMzA0MjggMTIuNUM1LjMwNDI4IDEyLjI1MTUgNS41MDU3NSAxMi4wNSA1Ljc1NDI4IDEyLjA1SDYuOTQ5OTNWMi45NTAwMkgzLjk0OTkzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgNC41QzIgNC4yMjM4NiAyLjIyMzg2IDQgMi41IDRIMTIuNUMxMi43NzYxIDQgMTMgNC4yMjM4NiAxMyA0LjVDMTMgNC43NzYxNCAxMi43NzYxIDUgMTIuNSA1SDIuNUMyLjIyMzg2IDUgMiA0Ljc3NjE0IDIgNC41Wk00IDcuNUM0IDcuMjIzODYgNC4yMjM4NiA3IDQuNSA3SDEwLjVDMTAuNzc2MSA3IDExIDcuMjIzODYgMTEgNy41QzExIDcuNzc2MTQgMTAuNzc2MSA4IDEwLjUgOEg0LjVDNC4yMjM4NiA4IDQgNy43NzYxNCA0IDcuNVpNMyAxMC41QzMgMTAuMjIzOSAzLjIyMzg2IDEwIDMuNSAxMEgxMS41QzExLjc3NjEgMTAgMTIgMTAuMjIzOSAxMiAxMC41QzEyIDEwLjc3NjEgMTEuNzc2MSAxMSAxMS41IDExSDMuNUMzLjIyMzg2IDExIDMgMTAuNzc2MSAzIDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxlbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi41IDRDMi4yMjM4NiA0IDIgNC4yMjM4NiAyIDQuNUMyIDQuNzc2MTQgMi4yMjM4NiA1IDIuNSA1SDEyLjVDMTIuNzc2MSA1IDEzIDQuNzc2MTQgMTMgNC41QzEzIDQuMjIzODYgMTIuNzc2MSA0IDEyLjUgNEgyLjVaTTIgNy41QzIgNy4yMjM4NiAyLjIyMzg2IDcgMi41IDdIMTIuNUMxMi43NzYxIDcgMTMgNy4yMjM4NiAxMyA3LjVDMTMgNy43NzYxNCAxMi43NzYxIDggMTIuNSA4SDIuNUMyLjIyMzg2IDggMiA3Ljc3NjE0IDIgNy41Wk0yIDEwLjVDMiAxMC4yMjM5IDIuMjIzODYgMTAgMi41IDEwSDEyLjVDMTIuNzc2MSAxMCAxMyAxMC4yMjM5IDEzIDEwLjVDMTMgMTAuNzc2MSAxMi43NzYxIDExIDEyLjUgMTFIMi41QzIuMjIzODYgMTEgMiAxMC43NzYxIDIgMTAuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHRvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDQuNUMyIDQuMjIzODYgMi4yMjM4NiA0IDIuNSA0SDEyLjVDMTIuNzc2MSA0IDEzIDQuMjIzODYgMTMgNC41QzEzIDQuNzc2MTQgMTIuNzc2MSA1IDEyLjUgNUgyLjVDMi4yMjM4NiA1IDIgNC43NzYxNCAyIDQuNVpNMiA3LjVDMiA3LjIyMzg2IDIuMjIzODYgNyAyLjUgN0g3LjVDNy43NzYxNCA3IDggNy4yMjM4NiA4IDcuNUM4IDcuNzc2MTQgNy43NzYxNCA4IDcuNSA4SDIuNUMyLjIyMzg2IDggMiA3Ljc3NjE0IDIgNy41Wk0yIDEwLjVDMiAxMC4yMjM5IDIuMjIzODYgMTAgMi41IDEwSDEwLjVDMTAuNzc2MSAxMCAxMSAxMC4yMjM5IDExIDEwLjVDMTEgMTAuNzc2MSAxMC43NzYxIDExIDEwLjUgMTFIMi41QzIuMjIzODYgMTEgMiAxMC43NzYxIDIgMTAuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG5vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDQuNUMyIDQuMjIzODYgMi4yMjM4NiA0IDIuNSA0SDEyLjVDMTIuNzc2MSA0IDEzIDQuMjIzODYgMTMgNC41QzEzIDQuNzc2MTQgMTIuNzc2MSA1IDEyLjUgNUgyLjVDMi4yMjM4NiA1IDIgNC43NzYxNCAyIDQuNVpNNyA3LjVDNyA3LjIyMzg2IDcuMjIzODYgNyA3LjUgN0gxMi41QzEyLjc3NjEgNyAxMyA3LjIyMzg2IDEzIDcuNUMxMyA3Ljc3NjE0IDEyLjc3NjEgOCAxMi41IDhINy41QzcuMjIzODYgOCA3IDcuNzc2MTQgNyA3LjVaTTQgMTAuNUM0IDEwLjIyMzkgNC4yMjM4NiAxMCA0LjUgMTBIMTIuNUMxMi43NzYxIDEwIDEzIDEwLjIyMzkgMTMgMTAuNUMxMyAxMC43NzYxIDEyLjc3NjEgMTEgMTIuNSAxMUg0LjVDNC4yMjM4NiAxMSA0IDEwLjc3NjEgNCAxMC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scm89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjM1MzYgMi4zNTM1NUMxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAxLjg0MTcxIDEzLjM1MzYgMS42NDY0NUMxMy4xNTgzIDEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEyLjY0NjQgMS42NDY0NUwxMS45MjkxIDIuMzYzODNDMTEuOTE1OSAyLjMyMjQ2IDExLjg5NyAyLjI4MzY4IDExLjg3MzIgMi4yNDg0NUMxMS43OTIzIDIuMTI4NzUgMTEuNjU1NCAyLjA1MDA1IDExLjUwMDEgMi4wNTAwNUgzLjUwMDA1QzMuMjk5MDkgMi4wNTAwNSAzLjEyODkgMi4xODE3OCAzLjA3MTExIDIuMzYzNkMzLjA1NzQzIDIuNDA2NjUgMy4wNTAwNSAyLjQ1MjQ5IDMuMDUwMDUgMi41MDAwN1Y0LjUwMDAxQzMuMDUwMDUgNC43NDg1NCAzLjI1MTUyIDQuOTUwMDEgMy41MDAwNSA0Ljk1MDAxQzMuNzQ4NTggNC45NTAwMSAzLjk1MDA1IDQuNzQ4NTQgMy45NTAwNSA0LjUwMDAxVjIuOTUwMDVINi45NTAwNlY3LjM0Mjg0TDEuNjQ2NDUgMTIuNjQ2NEMxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMy4xNTgzIDEuNjQ2NDUgMTMuMzUzNkMxLjg0MTcxIDEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDIuMzUzNTUgMTMuMzUzNkw2Ljk1MDA2IDguNzU3MDVWMTIuMDUwMUg1Ljc1NDRDNS41MDU4NyAxMi4wNTAxIDUuMzA0NCAxMi4yNTE1IDUuMzA0NCAxMi41MDAxQzUuMzA0NCAxMi43NDg2IDUuNTA1ODcgMTIuOTUwMSA1Ljc1NDQgMTIuOTUwMUg5LjI1NDRDOS41MDI5MyAxMi45NTAxIDkuNzA0NCAxMi43NDg2IDkuNzA0NCAxMi41MDAxQzkuNzA0NCAxMi4yNTE1IDkuNTAyOTMgMTIuMDUwMSA5LjI1NDQgMTIuMDUwMUg4LjA1MDA2VjcuNjU3MDVMMTMuMzUzNiAyLjM1MzU1Wk04LjA1MDA2IDYuMjQyODRMMTEuMDUwMSAzLjI0MjgzVjIuOTUwMDVIOC4wNTAwNlY2LjI0Mjg0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sb289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMy41QzUgMy4yMjM4NiA1LjIyMzg2IDMgNS41IDNIOS41QzkuNzc2MTQgMyAxMCAzLjIyMzg2IDEwIDMuNVY2SDEyLjVDMTIuNjg3MyA2IDEyLjg1ODkgNi4xMDQ2NyAxMi45NDQ2IDYuMjcxMjFDMTMuMDMwMyA2LjQzNzc0IDEzLjAxNTcgNi42MzgyMSAxMi45MDY5IDYuNzkwNjJMNy45MDY4NyAxMy43OTA2QzcuODEzMDEgMTMuOTIyIDcuNjYxNDggMTQgNy41IDE0QzcuMzM4NTMgMTQgNy4xODY5OSAxMy45MjIgNy4wOTMxNCAxMy43OTA2TDIuMDkzMTQgNi43OTA2MkMxLjk4NDI3IDYuNjM4MjEgMS45Njk3MiA2LjQzNzc0IDIuMDU1NDIgNi4yNzEyMUMyLjE0MTEyIDYuMTA0NjcgMi4zMTI3MSA2IDIuNSA2SDVWMy41Wk02IDRWNi41QzYgNi43NzYxNCA1Ljc3NjE0IDcgNS41IDdIMy40NzE2TDcuNSAxMi42Mzk4TDExLjUyODQgN0g5LjVDOS4yMjM4NiA3IDkgNi43NzYxNCA5IDYuNVY0SDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxpbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSA3LjVDMSA3LjY2MTQ4IDEuMDc3OTggNy44MTMwMSAxLjIwOTM4IDcuOTA2ODdMOC4yMDkzOCAxMi45MDY5QzguMzYxNzkgMTMuMDE1NyA4LjU2MjI2IDEzLjAzMDMgOC43Mjg3OSAxMi45NDQ2QzguODk1MzMgMTIuODU4OSA5IDEyLjY4NzMgOSAxMi41TDkgMTBMMTEuNSAxMEMxMS43NzYxIDEwIDEyIDkuNzc2MTQgMTIgOS41TDEyIDUuNUMxMiA1LjIyMzg2IDExLjc3NjEgNSAxMS41IDVMOSA1TDkgMi41QzkgMi4zMTI3MSA4Ljg5NTMzIDIuMTQxMTIgOC43Mjg3OSAyLjA1NTQyQzguNTYyMjYgMS45Njk3MiA4LjM2MTc5IDEuOTg0MjcgOC4yMDkzOCAyLjA5MzEzTDEuMjA5MzggNy4wOTMxNEMxLjA3Nzk4IDcuMTg2OTkgMSA3LjMzODUzIDEgNy41Wk04IDMuNDcxNkw4IDUuNUM4IDUuNzc2MTQgOC4yMjM4NiA2IDguNSA2TDExIDZMMTEgOUw4LjUgOUM4LjIyMzg2IDkgOCA5LjIyMzg2IDggOS41TDggMTEuNTI4NEwyLjM2MDIzIDcuNUw4IDMuNDcxNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGFvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCA3LjVDMTQgNy42NjE0OCAxMy45MjIgNy44MTMwMSAxMy43OTA2IDcuOTA2ODdMNi43OTA2MiAxMi45MDY5QzYuNjM4MjEgMTMuMDE1NyA2LjQzNzc0IDEzLjAzMDMgNi4yNzEyMSAxMi45NDQ2QzYuMTA0NjcgMTIuODU4OSA2IDEyLjY4NzMgNiAxMi41TDYgMTBMMy41IDEwQzMuMjIzODYgMTAgMyA5Ljc3NjE0IDMgOS41TDMgNS41QzMgNS4yMjM4NiAzLjIyMzg2IDUgMy41IDVMNiA1TDYgMi41QzYgMi4zMTI3MSA2LjEwNDY3IDIuMTQxMTIgNi4yNzEyMSAyLjA1NTQyQzYuNDM3NzQgMS45Njk3MiA2LjYzODIxIDEuOTg0MjcgNi43OTA2MiAyLjA5MzEzTDEzLjc5MDYgNy4wOTMxNEMxMy45MjIgNy4xODY5OSAxNCA3LjMzODUzIDE0IDcuNVpNNyAzLjQ3MTZMNyA1LjVDNyA1Ljc3NjE0IDYuNzc2MTQgNiA2LjUgNkw0IDZMNCA5TDYuNSA5QzYuNzc2MTQgOSA3IDkuMjIzODYgNyA5LjVMNyAxMS41Mjg0TDEyLjYzOTggNy41TDcgMy40NzE2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAxQzcuNjYxNDggMSA3LjgxMzAxIDEuMDc3OTggNy45MDY4NyAxLjIwOTM4TDEyLjkwNjkgOC4yMDkzOEMxMy4wMTU3IDguMzYxNzkgMTMuMDMwMyA4LjU2MjI2IDEyLjk0NDYgOC43Mjg3OUMxMi44NTg5IDguODk1MzMgMTIuNjg3MyA5IDEyLjUgOUgxMFYxMS41QzEwIDExLjc3NjEgOS43NzYxNCAxMiA5LjUgMTJINS41QzUuMjIzODYgMTIgNSAxMS43NzYxIDUgMTEuNVY5SDIuNUMyLjMxMjcxIDkgMi4xNDExMiA4Ljg5NTMzIDIuMDU1NDIgOC43Mjg3OUMxLjk2OTcyIDguNTYyMjYgMS45ODQyNyA4LjM2MTc5IDIuMDkzMTQgOC4yMDkzOEw3LjA5MzE0IDEuMjA5MzhDNy4xODY5OSAxLjA3Nzk4IDcuMzM4NTMgMSA3LjUgMVpNMy40NzE2IDhINS41QzUuNzc2MTQgOCA2IDguMjIzODYgNiA4LjVWMTFIOVY4LjVDOSA4LjIyMzg2IDkuMjIzODYgOCA5LjUgOEgxMS41Mjg0TDcuNSAyLjM2MDIzTDMuNDcxNiA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sc289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTggMC44NDk5NzZDNy4yMjM4MyAwLjg0OTk3NiA2Ljk5OTk4IDEuMDczODMgNi45OTk5OCAxLjM0OTk4VjMuNTIyMzRDNi45OTk5OCAzLjc5ODQ4IDcuMjIzODMgNC4wMjIzNCA3LjQ5OTk4IDQuMDIyMzRDNy43NzYxMiA0LjAyMjM0IDcuOTk5OTggMy43OTg0OCA3Ljk5OTk4IDMuNTIyMzRWMS44NzE4QzEwLjg4NjIgMi4xMjQ4OCAxMy4xNSA0LjU0ODA2IDEzLjE1IDcuNDk5OThDMTMuMTUgMTAuNjIwNCAxMC42MjA0IDEzLjE1IDcuNDk5OTggMTMuMTVDNC4zNzk1NyAxMy4xNSAxLjg0OTk4IDEwLjYyMDQgMS44NDk5OCA3LjQ5OTk4QzEuODQ5OTggNi4xMDYxMiAyLjM1NDA3IDQuODMxMjggMy4xOTA0OSAzLjg0NTlDMy4zNjkxOSAzLjYzNTM4IDMuMzQzMzkgMy4zMTk4NSAzLjEzMjg2IDMuMTQxMTVDMi45MjIzNCAyLjk2MjQ1IDIuNjA2ODEgMi45ODgyNSAyLjQyODExIDMuMTk4NzdDMS40NDQwNSA0LjM1ODA4IDAuODQ5OTc2IDUuODYwMjkgMC44NDk5NzYgNy40OTk5OEMwLjg0OTk3NiAxMS4xNzI3IDMuODI3MjggMTQuMTUgNy40OTk5OCAxNC4xNUMxMS4xNzI3IDE0LjE1IDE0LjE1IDExLjE3MjcgMTQuMTUgNy40OTk5OEMxNC4xNSAzLjgyNzI4IDExLjE3MjcgMC44NDk5NzYgNy40OTk5OCAwLjg0OTk3NlpNNi43NDA0OSA4LjA4MDcyTDQuMjIzNjMgNC41NzIzN0M0LjE1MjMxIDQuNDcyOTUgNC4xNjM0NiA0LjMzNjUyIDQuMjQ5OTggNC4yNUM0LjMzNjQ5IDQuMTYzNDggNC40NzI5MyA0LjE1MjMzIDQuNTcyMzQgNC4yMjM2NUw4LjA4MDY5IDYuNzQwNTFDOC41NjIyNyA3LjA4NTk5IDguNjE5MDYgNy43ODA5MSA4LjE5OTk4IDguMkM3Ljc4MDg5IDguNjE5MDkgNy4wODU5NyA4LjU2MjI5IDYuNzQwNDkgOC4wODA3MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGNvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjUgMkMzLjExOTI5IDIgMiAzLjExOTI5IDIgNC41QzIgNS44ODA3MiAzLjExOTI5IDcgNC41IDdDNS44ODA3MiA3IDcgNS44ODA3MiA3IDQuNUM3IDMuMTE5MjkgNS44ODA3MiAyIDQuNSAyWk0zIDQuNUMzIDMuNjcxNTcgMy42NzE1NyAzIDQuNSAzQzUuMzI4NDMgMyA2IDMuNjcxNTcgNiA0LjVDNiA1LjMyODQzIDUuMzI4NDMgNiA0LjUgNkMzLjY3MTU3IDYgMyA1LjMyODQzIDMgNC41Wk0xMC41IDJDOS4xMTkyOSAyIDggMy4xMTkyOSA4IDQuNUM4IDUuODgwNzIgOS4xMTkyOSA3IDEwLjUgN0MxMS44ODA3IDcgMTMgNS44ODA3MiAxMyA0LjVDMTMgMy4xMTkyOSAxMS44ODA3IDIgMTAuNSAyWk05IDQuNUM5IDMuNjcxNTcgOS42NzE1NyAzIDEwLjUgM0MxMS4zMjg0IDMgMTIgMy42NzE1NyAxMiA0LjVDMTIgNS4zMjg0MyAxMS4zMjg0IDYgMTAuNSA2QzkuNjcxNTcgNiA5IDUuMzI4NDMgOSA0LjVaTTIgMTAuNUMyIDkuMTE5MjkgMy4xMTkyOSA4IDQuNSA4QzUuODgwNzIgOCA3IDkuMTE5MjkgNyAxMC41QzcgMTEuODgwNyA1Ljg4MDcyIDEzIDQuNSAxM0MzLjExOTI5IDEzIDIgMTEuODgwNyAyIDEwLjVaTTQuNSA5QzMuNjcxNTcgOSAzIDkuNjcxNTcgMyAxMC41QzMgMTEuMzI4NCAzLjY3MTU3IDEyIDQuNSAxMkM1LjMyODQzIDEyIDYgMTEuMzI4NCA2IDEwLjVDNiA5LjY3MTU3IDUuMzI4NDMgOSA0LjUgOVpNMTAuNSA4QzkuMTE5MjkgOCA4IDkuMTE5MjkgOCAxMC41QzggMTEuODgwNyA5LjExOTI5IDEzIDEwLjUgMTNDMTEuODgwNyAxMyAxMyAxMS44ODA3IDEzIDEwLjVDMTMgOS4xMTkyOSAxMS44ODA3IDggMTAuNSA4Wk05IDEwLjVDOSA5LjY3MTU3IDkuNjcxNTcgOSAxMC41IDlDMTEuMzI4NCA5IDEyIDkuNjcxNTcgMTIgMTAuNUMxMiAxMS4zMjg0IDExLjMyODQgMTIgMTAuNSAxMkM5LjY3MTU3IDEyIDkgMTEuMzI4NCA5IDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1bz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMDUwMiAyLjc0OTg5QzEzLjA1MDIgMi40NDYxMyAxMi44MDQgMi4xOTk4OSAxMi41MDAyIDIuMTk5ODlDMTIuMTk2NSAyLjE5OTg5IDExLjk1MDIgMi40NDYxMyAxMS45NTAyIDIuNzQ5ODlWNy4yODI1QzExLjkwNDYgNy4xODgwMiAxMS44Mjk1IDcuMTA4NTEgMTEuNzMzNCA3LjA1Nzc2TDIuNzMzMzggMi4zMDc3NkMyLjU3ODQgMi4yMjU5NiAyLjM5MTkgMi4yMzEyNyAyLjI0MTgyIDIuMzIxNzZDMi4wOTE3NSAyLjQxMjI1IDIgMi41NzQ3MSAyIDIuNzQ5OTVWMTIuMjVDMiAxMi40MjUyIDIuMDkxNzUgMTIuNTg3NyAyLjI0MTgyIDEyLjY3ODFDMi4zOTE5IDEyLjc2ODYgMi41Nzg0IDEyLjc3MzkgMi43MzMzOCAxMi42OTIxTDExLjczMzQgNy45NDIxNEMxMS44Mjk1IDcuODkxMzkgMTEuOTA0NiA3LjgxMTg4IDExLjk1MDIgNy43MTc0VjEyLjI0OTlDMTEuOTUwMiAxMi41NTM2IDEyLjE5NjUgMTIuNzk5OSAxMi41MDAyIDEyLjc5OTlDMTIuODA0IDEyLjc5OTkgMTMuMDUwMiAxMi41NTM2IDEzLjA1MDIgMTIuMjQ5OVYyLjc0OTg5Wk0zIDExLjQyMDdWMy41NzkyTDEwLjQyODggNy40OTk5NUwzIDExLjQyMDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxmbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS45NDk3NiAyLjc0OTg5QzEuOTQ5NzYgMi40NDYxMyAyLjE5NiAyLjE5OTg5IDIuNDk5NzYgMi4xOTk4OUMyLjgwMzUxIDIuMTk5ODkgMy4wNDk3NiAyLjQ0NjEzIDMuMDQ5NzYgMi43NDk4OVY3LjI4MjVDMy4wOTU0IDcuMTg4MDIgMy4xNzA0NiA3LjEwODUxIDMuMjY2NjIgNy4wNTc3NkwxMi4yNjY2IDIuMzA3NzZDMTIuNDIxNiAyLjIyNTk2IDEyLjYwODEgMi4yMzEyNyAxMi43NTgyIDIuMzIxNzZDMTIuOTA4MyAyLjQxMjI1IDEzIDIuNTc0NzEgMTMgMi43NDk5NVYxMi4yNUMxMyAxMi40MjUyIDEyLjkwODMgMTIuNTg3NyAxMi43NTgyIDEyLjY3ODFDMTIuNjA4MSAxMi43Njg2IDEyLjQyMTYgMTIuNzczOSAxMi4yNjY2IDEyLjY5MjFMMy4yNjY2MiA3Ljk0MjE0QzMuMTcwNDYgNy44OTEzOSAzLjA5NTQgNy44MTE4OCAzLjA0OTc2IDcuNzE3NFYxMi4yNDk5QzMuMDQ5NzYgMTIuNTUzNiAyLjgwMzUxIDEyLjc5OTkgMi40OTk3NiAxMi43OTk5QzIuMTk2IDEyLjc5OTkgMS45NDk3NiAxMi41NTM2IDEuOTQ5NzYgMTIuMjQ5OVYyLjc0OTg5Wk00LjU3MTIyIDcuNDk5OTVMMTIgMTEuNDIwN1YzLjU3OTJMNC41NzEyMiA3LjQ5OTk1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjI1XCIsZDpcIk0wIDBIM1YzSDBWMFpNNiAzSDNWNkgwVjlIM1YxMkgwVjE1SDNWMTJINlYxNUg5VjEySDEyVjE1SDE1VjEySDEyVjlIMTVWNkgxMlYzSDE1VjBIMTJWM0g5VjBINlYzWk02IDZWM0g5VjZINlpNNiA5SDNWNkg2VjlaTTkgOVY2SDEyVjlIOVpNOSA5SDZWMTJIOVY5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNSAxQzUuMjIzODYgMSA1IDEuMjIzODYgNSAxLjVDNSAxLjc3NjE0IDUuMjIzODYgMiA1LjUgMkg5LjVDOS43NzYxNCAyIDEwIDEuNzc2MTQgMTAgMS41QzEwIDEuMjIzODYgOS43NzYxNCAxIDkuNSAxSDUuNVpNMyAzLjVDMyAzLjIyMzg2IDMuMjIzODYgMyAzLjUgM0g1SDEwSDExLjVDMTEuNzc2MSAzIDEyIDMuMjIzODYgMTIgMy41QzEyIDMuNzc2MTQgMTEuNzc2MSA0IDExLjUgNEgxMVYxMkMxMSAxMi41NTIzIDEwLjU1MjMgMTMgMTAgMTNINUM0LjQ0NzcyIDEzIDQgMTIuNTUyMyA0IDEyVjRMMy41IDRDMy4yMjM4NiA0IDMgMy43NzYxNCAzIDMuNVpNNSA0SDEwVjEySDVWNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGdvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00IDZIMTFMNy41IDEwLjVMNCA2WlwiLGZpbGw6bn0pKX0sdm89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkgNEw5IDExTDQuNSA3LjVMOSA0WlwiLGZpbGw6bn0pKX0sbW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYgMTFMNiA0TDEwLjUgNy41TDYgMTFaXCIsZmlsbDpufSkpfSxDbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNCA5SDExTDcuNSA0LjVMNCA5WlwiLGZpbGw6bn0pKX0seW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMjMzMzYgNC42OTYyOUM3LjIzMzM2IDIuOTY4ODQgOC42MzMzNSAxLjU2ODU3IDEwLjM2IDEuNTY4NTdDMTEuMzczNiAxLjU2ODU3IDEyLjE4MyAyLjA0ODA0IDEyLjcyNTQgMi43NDM4NUMxMy4zMDc5IDIuNjI0NjcgMTMuODU1NyAyLjQwOTEzIDE0LjM1MTMgMi4xMTUwOEMxNC4xNTU5IDIuNzI1OTggMTMuNzQyNCAzLjIzOTYgMTMuMjAzMyAzLjU2NDYzQzEzLjIwMzggMy41NjU2OCAxMy4yMDQyIDMuNTY2NzQgMTMuMjA0NyAzLjU2Nzc5QzEzLjczMzQgMy41MDM2MSAxNC4yMzY0IDMuMzYzMDIgMTQuNzA0OCAzLjE1NTQ2TDE0LjcwMzcgMy4xNTcxNUMxNC4zNjY3IDMuNjYxODMgMTMuOTQzMSA0LjEwNzM2IDEzLjQ1NjEgNC40NzAzNEMxMy40ODIzIDQuNjQ2NzIgMTMuNDk1NiA0LjgyNDI3IDEzLjQ5NTYgNS4wMDA3OUMxMy40OTU2IDguNjg3MSAxMC42ODczIDEyLjk3NDYgNS41MjEyMiAxMi45NzQ2QzMuOTM5MDYgMTIuOTc0NiAyLjQ2NTQ0IDEyLjUxMSAxLjIyNTA1IDExLjcxNTJDMC45OTI2MzIgMTEuNTY2MSAwLjkyNTEwOCAxMS4yNTY4IDEuMDc0MjMgMTEuMDI0NEMxLjA4NzQgMTEuMDAzOCAxLjEwMTgzIDEwLjk4NDYgMS4xMTczNCAxMC45NjY2QzEuMjA1ODIgMTAuODIwMiAxLjM3NDM4IDEwLjczMDkgMS41NTU0IDEwLjc1MjJDMi40NzA2NiAxMC44NjAxIDMuMzg1NjggMTAuNzQ4NSA0LjE5MjE5IDEwLjM5NjJDMy4zOTIyNiAxMC4wNDM0IDIuNzcxMjkgOS4zNTk3NSAyLjUwMjA0IDguNTE5NzRDMi40NTM1OSA4LjM2ODYgMi40ODgzNSA4LjIwMzExIDIuNTkzNTEgOC4wODQyMkMyLjU5NzE2IDguMDgwMSAyLjYwMDg3IDguMDc2MDYgMi42MDQ2NCA4LjA3MjFDMS45NjM5MSA3LjUwODE5IDEuNTU5NzMgNi42ODIwOCAxLjU1OTczIDUuNzYxNDNWNS43Mjc1OUMxLjU1OTczIDUuNTY4MTQgMS42NDQxMSA1LjQyMDU5IDEuNzgxNTUgNS4zMzk3NEMxLjgyNjcxIDUuMzEzMTcgMS44NzUzNyA1LjI5NTExIDEuOTI1MzIgNS4yODU1OEMxLjcwNTQ5IDQuODYxNTQgMS41ODExNiA0LjM3OTg0IDEuNTgxMTYgMy44Njk1OEMxLjU4MTE2IDMuNDAxNjUgMS41ODM4NCAyLjgxMTkyIDEuOTEzMzIgMi4yODA4MUMxLjk4NzE4IDIuMTYxNzUgMi4xMDc1OCAyLjA4OTE1IDIuMjM2NCAyLjA3MTk1QzIuNDI1ODggMi4wMTIzNyAyLjY0MDg3IDIuMDY5NjkgMi43NzQwNiAyLjIzMzAyQzMuODY1MzYgMy41NzEyNiA1LjQ0MDY2IDQuNDk1ODMgNy4yMzM2NiA0LjczOTYxTDcuMjMzMzYgNC42OTYyOVpNNS41MjEyMiAxMS45NzQ2QzQuNzMzODcgMTEuOTc0NiAzLjk3NzgxIDExLjg0MzUgMy4yNzI0OCAxMS42MDIzQzQuMTMwMTIgMTEuNDUzOCA0Ljk1MzA3IDExLjExNTkgNS42NjIxOCAxMC41NjAyQzUuODEyMTEgMTAuNDQyNyA1Ljg3MTgyIDEwLjI0MzUgNS44MTEyNiAxMC4wNjI5QzUuNzUwNyA5Ljg4MjM0IDUuNTgzIDkuNzU5NDMgNS4zOTI1NSA5Ljc1NjA3QzQuNjg5NjggOS43NDM2NiA0LjA2NzEyIDkuMzk3MTYgMy42Nzc5MyA4Ljg2ODQ1QzMuODY4MjggOC44NTMwNiA0LjA1NDI4IDguODIwMzkgNC4yMzQ0NSA4Ljc3MTY3QzQuNDM2MDMgOC43MTcxNiA0LjU3MzYzIDguNTMxMTQgNC41NjY3NCA4LjMyMjQzQzQuNTU5ODUgOC4xMTM3MiA0LjQxMDI5IDcuOTM3MTggNC4yMDU1NSA3Ljg5NjA3QzMuNDI2OTQgNy43Mzk3NyAyLjc5ODgzIDcuMTY3NjQgMi41NjE2OSA2LjQyMTc0QzIuNzYyNTUgNi40NzAyNSAyLjk3MTAyIDYuNDk5MSAzLjE4NDgyIDYuNTA2MUMzLjM4NTYzIDYuNTEyNjcgMy41NjY0NiA2LjM4NTMzIDMuNjI3OTUgNi4xOTQwNUMzLjY4OTQzIDYuMDAyNzcgMy42MTY2NiA1Ljc5MzkxIDMuNDQ5NjMgNS42ODIyNEMyLjg2NTIzIDUuMjkxNTUgMi40ODExNiA0LjYyNDY0IDIuNDgxMTYgMy44Njk1OEMyLjQ4MTE2IDMuNzAyMTMgMi40ODM1MiAzLjU1MjY4IDIuNDkzNTUgMy40MTcxOUMzLjg1MTE1IDQuNzk5MTMgNS43MDg3MyA1LjY4OTMxIDcuNzc1ODggNS43OTMzOEM3LjkzMjI1IDUuODAxMjYgOC4wODMyOCA1LjczNTQzIDguMTgzOTUgNS42MTU1M0M4LjI4NDYzIDUuNDk1NjIgOC4zMjMzMiA1LjMzNTQ4IDguMjg4NTEgNS4xODI4NEM4LjI1MjU1IDUuMDI1MTcgOC4yMzMzNiA0Ljg2Mjg0IDguMjMzMzYgNC42OTYyOUM4LjIzMzM2IDMuNTIwODUgOS4xODU5MSAyLjU2ODU3IDEwLjM2IDIuNTY4NTdDMTEuNTk0MyAyLjU2ODU3IDEyLjQ5NTYgMy43MTIwOCAxMi40OTU2IDUuMDAwNzlDMTIuNDk1NiA4LjI1NzA5IDEwLjAyMDIgMTEuOTc0NiA1LjUyMTIyIDExLjk3NDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx3bz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS4wMDAwMSAyLjc1QzUuMDAwMDEgMi40NzM4NiA0Ljc3NjE1IDIuMjUgNC41MDAwMSAyLjI1QzQuMjIzODcgMi4yNSA0LjAwMDAxIDIuNDczODYgNC4wMDAwMSAyLjc1VjguMDVDNC4wMDAwMSA5Ljk4MyA1LjU2NzAyIDExLjU1IDcuNTAwMDEgMTEuNTVDOS40MzMwMSAxMS41NSAxMSA5Ljk4MyAxMSA4LjA1VjIuNzVDMTEgMi40NzM4NiAxMC43NzYyIDIuMjUgMTAuNSAyLjI1QzEwLjIyMzkgMi4yNSAxMCAyLjQ3Mzg2IDEwIDIuNzVWOC4wNUMxMCA5LjQzMDcxIDguODgwNzIgMTAuNTUgNy41MDAwMSAxMC41NUM2LjExOTMgMTAuNTUgNS4wMDAwMSA5LjQzMDcxIDUuMDAwMDEgOC4wNVYyLjc1Wk0zLjQ5OTk4IDEzLjEwMDFDMy4yNzkwNiAxMy4xMDAxIDMuMDk5OTggMTMuMjc5MSAzLjA5OTk4IDEzLjUwMDFDMy4wOTk5OCAxMy43MjEgMy4yNzkwNiAxMy45MDAxIDMuNDk5OTggMTMuOTAwMUgxMS41QzExLjcyMDkgMTMuOTAwMSAxMS45IDEzLjcyMSAxMS45IDEzLjUwMDFDMTEuOSAxMy4yNzkxIDExLjcyMDkgMTMuMTAwMSAxMS41IDEzLjEwMDFIMy40OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjkwMzIxIDcuMjk2NzdDMS45MDMyMSAxMC4zNDEgNC4xMTA0MSAxMi40MTQ3IDYuNTg4OTMgMTIuODQzOUM2Ljg3MjU1IDEyLjg5MyA3LjA2MjY2IDEzLjE2MjcgNy4wMTM1NSAxMy40NDY0QzYuOTY0NDQgMTMuNzMgNi42OTQ3MSAxMy45MjAxIDYuNDExMDkgMTMuODcxQzMuNDk5NDIgMTMuMzY2OCAwLjg2MDg0IDEwLjkxMjcgMC44NjA4NCA3LjI5Njc3QzAuODYwODM5IDUuNzYwMDkgMS41NTk5NiA0LjU1MjQ1IDIuMzc2MzkgMy42MzM3N0MyLjk2MTI0IDIuOTc1NjggMy42MzAzNCAyLjQ0MTM1IDQuMTY4NDYgMi4wMzIwMkwyLjUzMjA1IDIuMDMyMDJDMi4yNTU5MSAyLjAzMjAyIDIuMDMyMDUgMS44MDgxNiAyLjAzMjA1IDEuNTMyMDJDMi4wMzIwNSAxLjI1NTg4IDIuMjU1OTEgMS4wMzIwMiAyLjUzMjA1IDEuMDMyMDJMNS41MzIwNSAxLjAzMjAyQzUuODA4MTkgMS4wMzIwMiA2LjAzMjA1IDEuMjU1ODggNi4wMzIwNSAxLjUzMjAyTDYuMDMyMDUgNC41MzIwMkM2LjAzMjA1IDQuODA4MTYgNS44MDgxOSA1LjAzMjAyIDUuNTMyMDUgNS4wMzIwMkM1LjI1NTkxIDUuMDMyMDIgNS4wMzIwNSA0LjgwODE2IDUuMDMyMDUgNC41MzIwMkw1LjAzMjA1IDIuNjg2NDVMNS4wMzA1NCAyLjY4NzU5TDUuMDMwNDUgMi42ODc2Nkw1LjAzMDQ0IDIuNjg3NjdMNS4wMzA0MyAyLjY4NzY3QzQuNDU4OTYgMy4xMTg2OCAzLjc2MDU5IDMuNjQ1MzggMy4xNTU1NCA0LjMyNjJDMi40NDEwMiA1LjEzMDIxIDEuOTAzMjEgNi4xMDE1NCAxLjkwMzIxIDcuMjk2NzdaTTEzLjAxMDkgNy43MDMyMUMxMy4wMTA5IDQuNjkxMTUgMTAuODUwNSAyLjYyOTYgOC40MDM4NCAyLjE3MDI5QzguMTIwOTMgMi4xMTcxOCA3LjkzNDY1IDEuODQ0NzkgNy45ODc3NiAxLjU2MTg4QzguMDQwODcgMS4yNzg5OCA4LjMxMzI2IDEuMDkyNyA4LjU5NjE2IDEuMTQ1ODFDMTEuNDcwNCAxLjY4NTQxIDE0LjA1MzIgNC4xMjYwNSAxNC4wNTMyIDcuNzAzMjFDMTQuMDUzMiA5LjIzOTg4IDEzLjM1NDEgMTAuNDQ3NSAxMi41Mzc3IDExLjM2NjJDMTEuOTUyOCAxMi4wMjQzIDExLjI4MzcgMTIuNTU4NiAxMC43NDU2IDEyLjk2OEwxMi4zODIxIDEyLjk2OEMxMi42NTgyIDEyLjk2OCAxMi44ODIxIDEzLjE5MTggMTIuODgyMSAxMy40NjhDMTIuODgyMSAxMy43NDQxIDEyLjY1ODIgMTMuOTY4IDEyLjM4MjEgMTMuOTY4TDkuMzgyMDUgMTMuOTY4QzkuMTA1OTEgMTMuOTY4IDguODgyMDUgMTMuNzQ0MSA4Ljg4MjA1IDEzLjQ2OEw4Ljg4MjA1IDEwLjQ2OEM4Ljg4MjA1IDEwLjE5MTggOS4xMDU5MSA5Ljk2Nzk2IDkuMzgyMDUgOS45Njc5NkM5LjY1ODE5IDkuOTY3OTYgOS44ODIwNSAxMC4xOTE4IDkuODgyMDUgMTAuNDY4TDkuODgyMDUgMTIuMzEzNUw5Ljg4MzYyIDEyLjMxMjNDMTAuNDU1MSAxMS44ODEzIDExLjE1MzUgMTEuMzU0NiAxMS43NTg1IDEwLjY3MzhDMTIuNDczMSA5Ljg2OTc2IDEzLjAxMDkgOC44OTg0NCAxMy4wMTA5IDcuNzAzMjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4bz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy44MTgyNSAxLjE4MTg4QzcuNjQyNTEgMS4wMDYxNSA3LjM1NzU5IDEuMDA2MTUgNy4xODE4NSAxLjE4MTg4TDQuMTgxODUgNC4xODE4OEM0LjAwNjExIDQuMzU3NjIgNC4wMDYxMSA0LjY0MjU0IDQuMTgxODUgNC44MTgyOEM0LjM1NzU5IDQuOTk0MDEgNC42NDI1MSA0Ljk5NDAxIDQuODE4MjUgNC44MTgyOEw3LjA1MDA1IDIuNTg2NDhWOS40OTk5NkM3LjA1MDA1IDkuNzQ4NDkgNy4yNTE1MiA5Ljk0OTk2IDcuNTAwMDUgOS45NDk5NkM3Ljc0ODU4IDkuOTQ5OTYgNy45NTAwNSA5Ljc0ODQ5IDcuOTUwMDUgOS40OTk5NlYyLjU4NjQ4TDEwLjE4MTkgNC44MTgyOEMxMC4zNTc2IDQuOTk0MDEgMTAuNjQyNSA0Ljk5NDAxIDEwLjgxODIgNC44MTgyOEMxMC45OTQgNC42NDI1NCAxMC45OTQgNC4zNTc2MiAxMC44MTgyIDQuMTgxODhMNy44MTgyNSAxLjE4MTg4Wk0yLjUgOS45OTk5N0MyLjc3NjE0IDkuOTk5OTcgMyAxMC4yMjM4IDMgMTAuNVYxMkMzIDEyLjU1MzggMy40NDU2NSAxMyAzLjk5NjM1IDEzSDExLjAwMTJDMTEuNTUyOSAxMyAxMiAxMi41NTI4IDEyIDEyVjEwLjVDMTIgMTAuMjIzOCAxMi4yMjM5IDkuOTk5OTcgMTIuNSA5Ljk5OTk3QzEyLjc3NjEgOS45OTk5NyAxMyAxMC4yMjM4IDEzIDEwLjVWMTJDMTMgMTMuMTA0IDEyLjEwNjIgMTQgMTEuMDAxMiAxNEgzLjk5NjM1QzIuODkwMTkgMTQgMiAxMy4xMDMgMiAxMlYxMC41QzIgMTAuMjIzOCAyLjIyMzg2IDkuOTk5OTcgMi41IDkuOTk5OTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxfbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy40OTk4OEMwLjg3NzA3NSAzLjg0MjE5IDMuODQyMjIgMC44NzcwNDUgNy40OTk5MSAwLjg3NzA0NUMxMS4xNTc2IDAuODc3MDQ1IDE0LjEyMjcgMy44NDIxOSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyAxMS4xNTc1IDExLjE1NzYgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMy44NDIyMiAxNC4xMjI3IDAuODc3MDc1IDExLjE1NzUgMC44NzcwNzUgNy40OTk4OFpNNy40OTk5MSAxLjgyNzA0QzQuMzY2ODkgMS44MjcwNCAxLjgyNzA4IDQuMzY2ODYgMS44MjcwOCA3LjQ5OTg4QzEuODI3MDggMTAuNjMyOSA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzEwLjYzMjkgMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNC4zNjY4NiAxMC42MzI5IDEuODI3MDQgNy40OTk5MSAxLjgyNzA0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sT289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5ODUgMC44NzcwNDVDMy44NDIxNiAwLjg3NzA0NSAwLjg3NzAxNCAzLjg0MjE5IDAuODc3MDE0IDcuNDk5ODhDMC44NzcwMTQgOS4xNDg4IDEuNDc5NjMgMTAuNjU3IDIuNDc2NjUgMTEuODE2MkwxLjY0NjQzIDEyLjY0NjRDMS40NTExNyAxMi44NDE3IDEuNDUxMTcgMTMuMTU4MyAxLjY0NjQzIDEzLjM1MzVDMS44NDE3IDEzLjU0ODggMi4xNTgyOCAxMy41NDg4IDIuMzUzNTQgMTMuMzUzNUwzLjE4Mzc3IDEyLjUyMzNDNC4zNDI5NiAxMy41MjAyIDUuODUxMDQgMTQuMTIyNyA3LjQ5OTg1IDE0LjEyMjdDMTEuMTU3NSAxNC4xMjI3IDE0LjEyMjcgMTEuMTU3NSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyA1Ljg1MTA3IDEzLjUyMDIgNC4zNDI5OSAxMi41MjMzIDMuMTgzOEwxMy4zNTM1IDIuMzUzNTRDMTMuNTQ4OCAyLjE1ODI3IDEzLjU0ODggMS44NDE2OSAxMy4zNTM1IDEuNjQ2NDNDMTMuMTU4MyAxLjQ1MTE3IDEyLjg0MTcgMS40NTExNyAxMi42NDY0IDEuNjQ2NDNMMTEuODE2MiAyLjQ3NjY4QzEwLjY1NyAxLjQ3OTY2IDkuMTQ4NzcgMC44NzcwNDUgNy40OTk4NSAwLjg3NzA0NVpNMTEuMTQyMiAzLjE1MDY2QzEwLjE1NjcgMi4zMjQ0OSA4Ljg4NjM5IDEuODI3MDQgNy40OTk4NSAxLjgyNzA0QzQuMzY2ODMgMS44MjcwNCAxLjgyNzAxIDQuMzY2ODYgMS44MjcwMSA3LjQ5OTg4QzEuODI3MDEgOC44ODY0MiAyLjMyNDQ2IDEwLjE1NjggMy4xNTA2MyAxMS4xNDIyTDExLjE0MjIgMy4xNTA2NlpNMy44NTc3NiAxMS44NDkzQzQuODQzMTcgMTIuNjc1MyA2LjExMzQzIDEzLjE3MjcgNy40OTk4NSAxMy4xNzI3QzEwLjYzMjggMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNi4xMTM0NiAxMi42NzUzIDQuODQzMiAxMS44NDkzIDMuODU3NzlMMy44NTc3NiAxMS44NDkzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTggMUw2LjkyMzIxIDIuMDAzMDdMMS4xNzQ5OCAxMkwwLjU5OTk3NiAxM0gxLjc1MzVIMTMuMjQ2NEgxNC40TDEzLjgyNSAxMkw4LjA3Njc0IDIuMDAzMDdMNy40OTk5OCAxWk03LjQ5OTk4IDMuMDA2MTNMMi4zMjg1IDEySDEyLjY3MTRMNy40OTk5OCAzLjAwNjEzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNzY0NDcgMy4xMjE5OUM1LjYzMTUxIDMuMDQ4NTkgNi41NjA4MiAzIDcuNSAzQzguNDM5MTggMyA5LjM2ODQ5IDMuMDQ4NTkgMTAuMjM1NSAzLjEyMTk5QzExLjI3OTYgMy4yMTAzNyAxMS45NTUzIDMuMjcwMDggMTIuNDcyIDMuMzkyMDNDMTIuOTQyNSAzLjUwMzA0IDEzLjIwNDggMy42NDk3NiAxMy40MzA2IDMuODgwODZDMTMuNDU1MyAzLjkwNjE4IDEzLjQ5MDIgMy45NDQxNCAxMy41MTMzIDMuOTcwOTJDMTMuNzEyNiA0LjIwMTQ5IDEzLjg0MzUgNC40ODg3IDEzLjkxOCA1LjAzMjgzQzEzLjk5NzggNS42MTU2IDE0IDYuMzc2NDQgMTQgNy41MjQ5M0MxNCA4LjY2MDI2IDEzLjk5NzggOS40MTAxOSAxMy45MTgxIDkuOTg1MzhDMTMuODQzOSAxMC41MjA2IDEzLjcxMzcgMTAuODA2MSAxMy41MTI1IDExLjAzODdDMTMuNDg5NiAxMS4wNjUxIDEzLjQ1NDEgMTEuMTAzOCAxMy40Mjk2IDExLjEyODdDMTMuMjAwOSAxMS4zNjI1IDEyLjk0MDYgMTEuNTA3NiAxMi40ODE4IDExLjYxNjRDMTEuOTc1MiAxMS43MzY1IDExLjMxNDMgMTEuNzk0MiAxMC4yODc4IDExLjg3OTdDOS40MTk0OCAxMS45NTIxIDguNDc1NjYgMTIgNy41IDEyQzYuNTI0MzQgMTIgNS41ODA1MiAxMS45NTIxIDQuNzEyMiAxMS44Nzk3QzMuNjg1NzIgMTEuNzk0MiAzLjAyNDc3IDExLjczNjUgMi41MTgxNiAxMS42MTY0QzIuMDU5MzYgMTEuNTA3NiAxLjc5OTEgMTEuMzYyNSAxLjU3MDM3IDExLjEyODdDMS41NDU5MyAxMS4xMDM4IDEuNTEwMzUgMTEuMDY1MSAxLjQ4NzQ4IDExLjAzODdDMS4yODYyOCAxMC44MDYxIDEuMTU2MTIgMTAuNTIwNiAxLjA4MTkzIDkuOTg1MzhDMS4wMDIyMSA5LjQxMDE5IDEgOC42NjAyNiAxIDcuNTI0OTNDMSA2LjM3NjQ0IDEuMDAyMTYgNS42MTU2IDEuMDgyIDUuMDMyODNDMS4xNTY1NCA0LjQ4ODcgMS4yODc0NCA0LjIwMTQ5IDEuNDg2NjYgMy45NzA5MkMxLjUwOTggMy45NDQxNCAxLjU0NDY4IDMuOTA2MTggMS41Njk0MiAzLjg4MDg2QzEuNzk1MiAzLjY0OTc2IDIuMDU3NTIgMy41MDMwNCAyLjUyNzk2IDMuMzkyMDNDMy4wNDQ3MyAzLjI3MDA4IDMuNzIwNCAzLjIxMDM3IDQuNzY0NDcgMy4xMjE5OVpNMCA3LjUyNDkzQzAgNS4yODI5NiAwIDQuMTYxOTggMC43Mjk5ODUgMy4zMTcxM0MwLjc2NjQ1NyAzLjI3NDkxIDAuODE1MTM5IDMuMjIxOTQgMC44NTQxMjMgMy4xODIwNEMxLjYzNDM5IDIuMzgzMzkgMi42NDk2MyAyLjI5NzQ0IDQuNjgwMTIgMi4xMjU1NUM1LjU2OTIzIDIuMDUwMjggNi41MjcyNCAyIDcuNSAyQzguNDcyNzYgMiA5LjQzMDc3IDIuMDUwMjggMTAuMzE5OSAyLjEyNTU1QzEyLjM1MDQgMi4yOTc0NCAxMy4zNjU2IDIuMzgzMzkgMTQuMTQ1OSAzLjE4MjA0QzE0LjE4NDkgMy4yMjE5NCAxNC4yMzM1IDMuMjc0OTEgMTQuMjcgMy4zMTcxM0MxNSA0LjE2MTk4IDE1IDUuMjgyOTYgMTUgNy41MjQ5M0MxNSA5Ljc0MDEyIDE1IDEwLjg0NzcgMTQuMjY4OCAxMS42OTI5QzE0LjIzMjYgMTEuNzM0OCAxNC4xODMyIDExLjc4ODUgMTQuMTQ0NCAxMS44MjgxQzEzLjM2MjkgMTIuNjI2OSAxMi4zNjU1IDEyLjcxIDEwLjM3MDkgMTIuODc2M0M5LjQ3OTcxIDEyLjk1MDUgOC41MDc4MiAxMyA3LjUgMTNDNi40OTIxOCAxMyA1LjUyMDI4IDEyLjk1MDUgNC42MjkxNSAxMi44NzYzQzIuNjM0NDYgMTIuNzEgMS42MzcxMiAxMi42MjY5IDAuODU1NTU4IDExLjgyODFDMC44MTY4NDQgMTEuNzg4NSAwLjc2NzQ0MiAxMS43MzQ4IDAuNzMxMjIxIDExLjY5MjlDMCAxMC44NDc3IDAgOS43NDAxMiAwIDcuNTI0OTNaTTUuMjUgNS4zODI2NEM1LjI1IDUuMjAyMjUgNS40MzUyMiA1LjA4MTI0IDUuNjAwNDEgNS4xNTM2OUwxMC40MjggNy4yNzEwNUMxMC42Mjc0IDcuMzU4NTMgMTAuNjI3NCA3LjY0MTQ3IDEwLjQyOCA3LjcyODk1TDUuNjAwNDEgOS44NDYzMUM1LjQzNTIyIDkuOTE4NzYgNS4yNSA5Ljc5Nzc1IDUuMjUgOS42MTczNlY1LjM4MjY0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sU289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcgMkgxLjVDMS4yMjM4NiAyIDEgMi4yMjM4NiAxIDIuNVY3SDdWMlpNOCAyVjdIMTRWMi41QzE0IDIuMjIzODYgMTMuNzc2MSAyIDEzLjUgMkg4Wk03IDhIMVYxMi41QzEgMTIuNzc2MSAxLjIyMzg2IDEzIDEuNSAxM0g3VjhaTTggMTNWOEgxNFYxMi41QzE0IDEyLjc3NjEgMTMuNzc2MSAxMyAxMy41IDEzSDhaTTEuNSAxQzAuNjcxNTczIDEgMCAxLjY3MTU3IDAgMi41VjEyLjVDMCAxMy4zMjg0IDAuNjcxNTczIDE0IDEuNSAxNEgxMy41QzE0LjMyODQgMTQgMTUgMTMuMzI4NCAxNSAxMi41VjIuNUMxNSAxLjY3MTU3IDE0LjMyODQgMSAxMy41IDFIMS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sam89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSAySDEzLjVDMTMuNzc2MSAyIDE0IDIuMjIzODYgMTQgMi41VjdIMVYyLjVDMSAyLjIyMzg2IDEuMjIzODYgMiAxLjUgMlpNMSA4VjEyLjVDMSAxMi43NzYxIDEuMjIzODYgMTMgMS41IDEzSDEzLjVDMTMuNzc2MSAxMyAxNCAxMi43NzYxIDE0IDEyLjVWOEgxWk0wIDIuNUMwIDEuNjcxNTcgMC42NzE1NzMgMSAxLjUgMUgxMy41QzE0LjMyODQgMSAxNSAxLjY3MTU3IDE1IDIuNVYxMi41QzE1IDEzLjMyODQgMTQuMzI4NCAxNCAxMy41IDE0SDEuNUMwLjY3MTU3MyAxNCAwIDEzLjMyODQgMCAxMi41VjIuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE1vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCAyLjU4NzExTDEuODUxNjMgMTNIMTMuNUMxMy43NzYxIDEzIDE0IDEyLjc3NjEgMTQgMTIuNVYyLjU4NzExWk0wLjc2Mjg3OSAxMy44MDY3TDAuODI1Mzk2IDEzLjg3OTZMMC44NTQ3MTcgMTMuODU0NUMxLjA1MDE3IDEzLjk0NzggMS4yNjg5OSAxNCAxLjUgMTRIMTMuNUMxNC4zMjg0IDE0IDE1IDEzLjMyODQgMTUgMTIuNVYyLjVDMTUgMS45Mzk0OSAxNC42OTI2IDEuNDUwNzggMTQuMjM3MSAxLjE5MzMxTDE0LjE3NDYgMS4xMjAzN0wxNC4xNDUzIDEuMTQ1NUMxMy45NDk4IDEuMDUyMjIgMTMuNzMxIDEgMTMuNSAxSDEuNUMwLjY3MTU3MyAxIDAgMS42NzE1NyAwIDIuNVYxMi41QzAgMTMuMDYwNSAwLjMwNzQzNSAxMy41NDkyIDAuNzYyODc5IDEzLjgwNjdaTTEgMTIuNDEyOUwxMy4xNDg0IDJIMS41QzEuMjIzODYgMiAxIDIuMjIzODYgMSAyLjVWMTIuNDEyOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGtvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04IDJIMTMuNUMxMy43NzYxIDIgMTQgMi4yMjM4NiAxNCAyLjVWMTIuNUMxNCAxMi43NzYxIDEzLjc3NjEgMTMgMTMuNSAxM0g4VjJaTTcgMkgxLjVDMS4yMjM4NiAyIDEgMi4yMjM4NiAxIDIuNVYxMi41QzEgMTIuNzc2MSAxLjIyMzg2IDEzIDEuNSAxM0g3VjJaTTAgMi41QzAgMS42NzE1NyAwLjY3MTU3MyAxIDEuNSAxSDEzLjVDMTQuMzI4NCAxIDE1IDEuNjcxNTcgMTUgMi41VjEyLjVDMTUgMTMuMzI4NCAxNC4zMjg0IDE0IDEzLjUgMTRIMS41QzAuNjcxNTczIDE0IDAgMTMuMzI4NCAwIDEyLjVWMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUm89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuODE4MTIgNC42ODE2MUM0Ljk5Mzg2IDQuODU3MzQgNC45OTM4NiA1LjE0MjI3IDQuODE4MTIgNS4zMThMMy4wODYzMiA3LjA0OThIMTEuOTEzNUwxMC4xODE3IDUuMzE4QzEwLjAwNiA1LjE0MjI3IDEwLjAwNiA0Ljg1NzM0IDEwLjE4MTcgNC42ODE2MUMxMC4zNTc1IDQuNTA1ODcgMTAuNjQyNCA0LjUwNTg3IDEwLjgxODEgNC42ODE2MUwxMy4zMTgxIDcuMTgxNjFDMTMuNDkzOSA3LjM1NzM0IDEzLjQ5MzkgNy42NDIyNyAxMy4zMTgxIDcuODE4TDEwLjgxODEgMTAuMzE4QzEwLjY0MjQgMTAuNDkzNyAxMC4zNTc1IDEwLjQ5MzcgMTAuMTgxNyAxMC4zMThDMTAuMDA2IDEwLjE0MjMgMTAuMDA2IDkuODU3MzQgMTAuMTgxNyA5LjY4MTYxTDExLjkxMzUgNy45NDk4SDMuMDg2MzJMNC44MTgxMiA5LjY4MTYxQzQuOTkzODYgOS44NTczNCA0Ljk5Mzg2IDEwLjE0MjMgNC44MTgxMiAxMC4zMThDNC42NDIzOSAxMC40OTM3IDQuMzU3NDYgMTAuNDkzNyA0LjE4MTczIDEwLjMxOEwxLjY4MTczIDcuODE4QzEuNTA1OTkgNy42NDIyNyAxLjUwNTk5IDcuMzU3MzQgMS42ODE3MyA3LjE4MTYxTDQuMTgxNzMgNC42ODE2MUM0LjM1NzQ2IDQuNTA1ODcgNC42NDIzOSA0LjUwNTg3IDQuODE4MTIgNC42ODE2MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFBvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMCA2LjVDMTAgOC40MzMgOC40MzMgMTAgNi41IDEwQzQuNTY3IDEwIDMgOC40MzMgMyA2LjVDMyA0LjU2NyA0LjU2NyAzIDYuNSAzQzguNDMzIDMgMTAgNC41NjcgMTAgNi41Wk05LjMwODg0IDEwLjAxNTlDOC41MzkwMSAxMC42MzE4IDcuNTYyNTEgMTEgNi41IDExQzQuMDE0NzIgMTEgMiA4Ljk4NTI4IDIgNi41QzIgNC4wMTQ3MiA0LjAxNDcyIDIgNi41IDJDOC45ODUyOCAyIDExIDQuMDE0NzIgMTEgNi41QzExIDcuNTYyNTEgMTAuNjMxOCA4LjUzOTAxIDEwLjAxNTkgOS4zMDg4NEwxMi44NTM2IDEyLjE0NjRDMTMuMDQ4OCAxMi4zNDE3IDEzLjA0ODggMTIuNjU4MyAxMi44NTM2IDEyLjg1MzZDMTIuNjU4MyAxMy4wNDg4IDEyLjM0MTcgMTMuMDQ4OCAxMi4xNDY0IDEyLjg1MzZMOS4zMDg4NCAxMC4wMTU5Wk00LjI1IDYuNUM0LjI1IDYuMjIzODYgNC40NzM4NiA2IDQuNzUgNkg2VjQuNzVDNiA0LjQ3Mzg2IDYuMjIzODYgNC4yNSA2LjUgNC4yNUM2Ljc3NjE0IDQuMjUgNyA0LjQ3Mzg2IDcgNC43NVY2SDguMjVDOC41MjYxNCA2IDguNzUgNi4yMjM4NiA4Ljc1IDYuNUM4Ljc1IDYuNzc2MTQgOC41MjYxNCA3IDguMjUgN0g3VjguMjVDNyA4LjUyNjE0IDYuNzc2MTQgOC43NSA2LjUgOC43NUM2LjIyMzg2IDguNzUgNiA4LjUyNjE0IDYgOC4yNVY3SDQuNzVDNC40NzM4NiA3IDQuMjUgNi43NzYxNCA0LjI1IDYuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LElvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02LjUgMTBDOC40MzMgMTAgMTAgOC40MzMgMTAgNi41QzEwIDQuNTY3IDguNDMzIDMgNi41IDNDNC41NjcgMyAzIDQuNTY3IDMgNi41QzMgOC40MzMgNC41NjcgMTAgNi41IDEwWk02LjUgMTFDNy41NjI1MSAxMSA4LjUzOTAxIDEwLjYzMTggOS4zMDg4NCAxMC4wMTU5TDEyLjE0NjQgMTIuODUzNkMxMi4zNDE3IDEzLjA0ODggMTIuNjU4MyAxMy4wNDg4IDEyLjg1MzYgMTIuODUzNkMxMy4wNDg4IDEyLjY1ODMgMTMuMDQ4OCAxMi4zNDE3IDEyLjg1MzYgMTIuMTQ2NEwxMC4wMTU5IDkuMzA4ODRDMTAuNjMxOCA4LjUzOTAxIDExIDcuNTYyNTEgMTEgNi41QzExIDQuMDE0NzIgOC45ODUyOCAyIDYuNSAyQzQuMDE0NzIgMiAyIDQuMDE0NzIgMiA2LjVDMiA4Ljk4NTI4IDQuMDE0NzIgMTEgNi41IDExWk00Ljc1IDZDNC40NzM4NiA2IDQuMjUgNi4yMjM4NiA0LjI1IDYuNUM0LjI1IDYuNzc2MTQgNC40NzM4NiA3IDQuNzUgN0g4LjI1QzguNTI2MTQgNyA4Ljc1IDYuNzc2MTQgOC43NSA2LjVDOC43NSA2LjIyMzg2IDguNTI2MTQgNiA4LjI1IDZINC43NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9fSw1Mjk5OihlLHQsbik9PntuLnIodCksbi5kKHQse2RlZmF1bHQ6KCk9Pmx9KTt2YXIgcj1uKDgwODEpLG89bi5uKHIpLGk9bigzNjQ1KSxhPW4ubihpKSgpKG8oKSk7YS5wdXNoKFtlLmlkLFwiLnJlYWN0LWNhbGVuZGFyIHtcXG4gIHdpZHRoOiAzNTBweDtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIGJhY2tncm91bmQ6IHdoaXRlO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2EwYTA5NjtcXG4gIGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xcbiAgbGluZS1oZWlnaHQ6IDEuMTI1ZW07XFxufVxcbi5yZWFjdC1jYWxlbmRhci0tZG91YmxlVmlldyB7XFxuICB3aWR0aDogNzAwcHg7XFxufVxcbi5yZWFjdC1jYWxlbmRhci0tZG91YmxlVmlldyAucmVhY3QtY2FsZW5kYXJfX3ZpZXdDb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG1hcmdpbjogLTAuNWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXItLWRvdWJsZVZpZXcgLnJlYWN0LWNhbGVuZGFyX192aWV3Q29udGFpbmVyID4gKiB7XFxuICB3aWR0aDogNTAlO1xcbiAgbWFyZ2luOiAwLjVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyLFxcbi5yZWFjdC1jYWxlbmRhciAqLFxcbi5yZWFjdC1jYWxlbmRhciAqOmJlZm9yZSxcXG4ucmVhY3QtY2FsZW5kYXIgKjphZnRlciB7XFxuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXIgYnV0dG9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGJvcmRlcjogMDtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcbi5yZWFjdC1jYWxlbmRhciBidXR0b246ZW5hYmxlZDpob3ZlciB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiA0NHB4O1xcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24gYnV0dG9uIHtcXG4gIG1pbi13aWR0aDogNDRweDtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiBidXR0b246ZGlzYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uIGJ1dHRvbjplbmFibGVkOmhvdmVyLFxcbi5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiBidXR0b246ZW5hYmxlZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtkYXlzIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG4gIGZvbnQtc2l6ZTogMC43NWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtkYXlzX193ZWVrZGF5IHtcXG4gIHBhZGRpbmc6IDAuNWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtOdW1iZXJzIC5yZWFjdC1jYWxlbmRhcl9fdGlsZSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgZm9udC1zaXplOiAwLjc1ZW07XFxuICBmb250LXdlaWdodDogYm9sZDtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X19kYXlzX19kYXktLXdlZWtlbmQge1xcbiAgY29sb3I6ICNkMTAwMDA7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbW9udGgtdmlld19fZGF5c19fZGF5LS1uZWlnaGJvcmluZ01vbnRoIHtcXG4gIGNvbG9yOiAjNzU3NTc1O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3llYXItdmlldyAucmVhY3QtY2FsZW5kYXJfX3RpbGUsXFxuLnJlYWN0LWNhbGVuZGFyX19kZWNhZGUtdmlldyAucmVhY3QtY2FsZW5kYXJfX3RpbGUsXFxuLnJlYWN0LWNhbGVuZGFyX19jZW50dXJ5LXZpZXcgLnJlYWN0LWNhbGVuZGFyX190aWxlIHtcXG4gIHBhZGRpbmc6IDJlbSAwLjVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlIHtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDEwcHggNi42NjY3cHg7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgbGluZS1oZWlnaHQ6IDE2cHg7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZTpkaXNhYmxlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGU6ZW5hYmxlZDpob3ZlcixcXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGU6ZW5hYmxlZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLW5vdyB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmZjc2O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLW5vdzplbmFibGVkOmhvdmVyLFxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tbm93OmVuYWJsZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZDogI2ZmZmZhOTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1oYXNBY3RpdmUge1xcbiAgYmFja2dyb3VuZDogIzc2YmFmZjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1oYXNBY3RpdmU6ZW5hYmxlZDpob3ZlcixcXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLWhhc0FjdGl2ZTplbmFibGVkOmZvY3VzIHtcXG4gIGJhY2tncm91bmQ6ICNhOWQ0ZmY7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tYWN0aXZlIHtcXG4gIGJhY2tncm91bmQ6ICMwMDZlZGM7XFxuICBjb2xvcjogd2hpdGU7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tYWN0aXZlOmVuYWJsZWQ6aG92ZXIsXFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1hY3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kOiAjMTA4N2ZmO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXItLXNlbGVjdFJhbmdlIC5yZWFjdC1jYWxlbmRhcl9fdGlsZS0taG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcXG59XFxuXCIsXCJcIl0pO2NvbnN0IGw9YX0sMzY0NTplPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKChmdW5jdGlvbih0KXt2YXIgbj1cIlwiLHI9dm9pZCAwIT09dFs1XTtyZXR1cm4gdFs0XSYmKG4rPVwiQHN1cHBvcnRzIChcIi5jb25jYXQodFs0XSxcIikge1wiKSksdFsyXSYmKG4rPVwiQG1lZGlhIFwiLmNvbmNhdCh0WzJdLFwiIHtcIikpLHImJihuKz1cIkBsYXllclwiLmNvbmNhdCh0WzVdLmxlbmd0aD4wP1wiIFwiLmNvbmNhdCh0WzVdKTpcIlwiLFwiIHtcIikpLG4rPWUodCksciYmKG4rPVwifVwiKSx0WzJdJiYobis9XCJ9XCIpLHRbNF0mJihuKz1cIn1cIiksbn0pKS5qb2luKFwiXCIpfSx0Lmk9ZnVuY3Rpb24oZSxuLHIsbyxpKXtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W1tudWxsLGUsdm9pZCAwXV0pO3ZhciBhPXt9O2lmKHIpZm9yKHZhciBsPTA7bDx0aGlzLmxlbmd0aDtsKyspe3ZhciBzPXRoaXNbbF1bMF07bnVsbCE9cyYmKGFbc109ITApfWZvcih2YXIgYz0wO2M8ZS5sZW5ndGg7YysrKXt2YXIgdT1bXS5jb25jYXQoZVtjXSk7ciYmYVt1WzBdXXx8KHZvaWQgMCE9PWkmJih2b2lkIDA9PT11WzVdfHwodVsxXT1cIkBsYXllclwiLmNvbmNhdCh1WzVdLmxlbmd0aD4wP1wiIFwiLmNvbmNhdCh1WzVdKTpcIlwiLFwiIHtcIikuY29uY2F0KHVbMV0sXCJ9XCIpKSx1WzVdPWkpLG4mJih1WzJdPyh1WzFdPVwiQG1lZGlhIFwiLmNvbmNhdCh1WzJdLFwiIHtcIikuY29uY2F0KHVbMV0sXCJ9XCIpLHVbMl09bik6dVsyXT1uKSxvJiYodVs0XT8odVsxXT1cIkBzdXBwb3J0cyAoXCIuY29uY2F0KHVbNF0sXCIpIHtcIikuY29uY2F0KHVbMV0sXCJ9XCIpLHVbNF09byk6dVs0XT1cIlwiLmNvbmNhdChvKSksdC5wdXNoKHUpKX19LHR9fSw4MDgxOmU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV19fSw0NDgzOihlLHQsbik9PntmdW5jdGlvbiByKGUpe3JldHVybiByPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LHIoZSl9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBvPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbyhlLHQpfWZ1bmN0aW9uIGkoZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIGV9ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sYShlKX1mdW5jdGlvbiBsKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIiE9PXIoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1uKXt2YXIgbz1uLmNhbGwoZSxcInN0cmluZ1wiKTtpZihcIm9iamVjdFwiIT09cihvKSlyZXR1cm4gbzt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIil9cmV0dXJuIFN0cmluZyhlKX0oZSk7cmV0dXJuXCJzeW1ib2xcIj09PXIodCk/dDpTdHJpbmcodCl9dmFyIHM9big2Njg5KSxjPW4oNTY5NyksdT1uKDUzMDMpLmNyZWF0ZUZvY3VzVHJhcCxmPW4oODM4OCkuaXNGb2N1c2FibGUsZD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksdCYmbyhlLHQpfShwLGUpO3ZhciB0LG4sYyx1LGQ9KGM9cCx1PWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PWEoYyk7aWYodSl7dmFyIG49YSh0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KHQsYXJndW1lbnRzLG4pfWVsc2UgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoXCJvYmplY3RcIj09PXIodCl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBpKGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gcChlKXt2YXIgdCxuLHIsbzshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLHApLG49aSh0PWQuY2FsbCh0aGlzLGUpKSxvPWZ1bmN0aW9uKGUpe3ZhciB0LG49bnVsbCE9PSh0PXRoaXMuaW50ZXJuYWxPcHRpb25zW2VdKSYmdm9pZCAwIT09dD90OnRoaXMub3JpZ2luYWxPcHRpb25zW2VdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLG89bmV3IEFycmF5KHI+MT9yLTE6MCksaT0xO2k8cjtpKyspb1tpLTFdPWFyZ3VtZW50c1tpXTtuPW4uYXBwbHkodm9pZCAwLG8pfWlmKCEwPT09biYmKG49dm9pZCAwKSwhbil7aWYodm9pZCAwPT09bnx8ITE9PT1uKXJldHVybiBuO3Rocm93IG5ldyBFcnJvcihcImBcIi5jb25jYXQoZSxcImAgd2FzIHNwZWNpZmllZCBidXQgd2FzIG5vdCBhIG5vZGUsIG9yIGRpZCBub3QgcmV0dXJuIGEgbm9kZVwiKSl9dmFyIGEsbD1uO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuJiYhKGw9bnVsbD09PShhPXRoaXMuZ2V0RG9jdW1lbnQoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEucXVlcnlTZWxlY3RvcihuKSkpdGhyb3cgbmV3IEVycm9yKFwiYFwiLmNvbmNhdChlLFwiYCBhcyBzZWxlY3RvciByZWZlcnMgdG8gbm8ga25vd24gbm9kZVwiKSk7cmV0dXJuIGx9LChyPWwocj1cImdldE5vZGVGb3JPcHRpb25cIikpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobixyLHt2YWx1ZTpvLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bltyXT1vLHQuaGFuZGxlRGVhY3RpdmF0ZT10LmhhbmRsZURlYWN0aXZhdGUuYmluZChpKHQpKSx0LmhhbmRsZVBvc3REZWFjdGl2YXRlPXQuaGFuZGxlUG9zdERlYWN0aXZhdGUuYmluZChpKHQpKSx0LmhhbmRsZUNsaWNrT3V0c2lkZURlYWN0aXZhdGVzPXQuaGFuZGxlQ2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXMuYmluZChpKHQpKSx0LmludGVybmFsT3B0aW9ucz17cmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6ITEsY2hlY2tDYW5SZXR1cm5Gb2N1czpudWxsLG9uRGVhY3RpdmF0ZTp0LmhhbmRsZURlYWN0aXZhdGUsb25Qb3N0RGVhY3RpdmF0ZTp0LmhhbmRsZVBvc3REZWFjdGl2YXRlLGNsaWNrT3V0c2lkZURlYWN0aXZhdGVzOnQuaGFuZGxlQ2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXN9LHQub3JpZ2luYWxPcHRpb25zPXtyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZTohMCxvbkRlYWN0aXZhdGU6bnVsbCxvblBvc3REZWFjdGl2YXRlOm51bGwsY2hlY2tDYW5SZXR1cm5Gb2N1czpudWxsLGNsaWNrT3V0c2lkZURlYWN0aXZhdGVzOiExfTt2YXIgYT1lLmZvY3VzVHJhcE9wdGlvbnM7Zm9yKHZhciBzIGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEscykmJihcInJldHVybkZvY3VzT25EZWFjdGl2YXRlXCIhPT1zJiZcIm9uRGVhY3RpdmF0ZVwiIT09cyYmXCJvblBvc3REZWFjdGl2YXRlXCIhPT1zJiZcImNoZWNrQ2FuUmV0dXJuRm9jdXNcIiE9PXMmJlwiY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXNcIiE9PXM/dC5pbnRlcm5hbE9wdGlvbnNbc109YVtzXTp0Lm9yaWdpbmFsT3B0aW9uc1tzXT1hW3NdKTtyZXR1cm4gdC5vdXRzaWRlQ2xpY2s9bnVsbCx0LmZvY3VzVHJhcEVsZW1lbnRzPWUuY29udGFpbmVyRWxlbWVudHN8fFtdLHQudXBkYXRlUHJldmlvdXNFbGVtZW50KCksdH1yZXR1cm4gdD1wLChuPVt7a2V5OlwiZ2V0RG9jdW1lbnRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmZvY3VzVHJhcE9wdGlvbnMuZG9jdW1lbnR8fChcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQ6dm9pZCAwKX19LHtrZXk6XCJnZXRSZXR1cm5Gb2N1c05vZGVcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Tm9kZUZvck9wdGlvbihcInNldFJldHVybkZvY3VzXCIsdGhpcy5wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQpO3JldHVybiBlfHwhMSE9PWUmJnRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50fX0se2tleTpcInVwZGF0ZVByZXZpb3VzRWxlbWVudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXREb2N1bWVudCgpO2UmJih0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudD1lLmFjdGl2ZUVsZW1lbnQpfX0se2tleTpcImRlYWN0aXZhdGVUcmFwXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmZvY3VzVHJhcCYmdGhpcy5mb2N1c1RyYXAuYWN0aXZlJiZ0aGlzLmZvY3VzVHJhcC5kZWFjdGl2YXRlKHtyZXR1cm5Gb2N1czohMSxjaGVja0NhblJldHVybkZvY3VzOm51bGwsb25EZWFjdGl2YXRlOnRoaXMub3JpZ2luYWxPcHRpb25zLm9uRGVhY3RpdmF0ZX0pfX0se2tleTpcImhhbmRsZUNsaWNrT3V0c2lkZURlYWN0aXZhdGVzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcmlnaW5hbE9wdGlvbnMuY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXM/dGhpcy5vcmlnaW5hbE9wdGlvbnMuY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXMuY2FsbChudWxsLGUpOnRoaXMub3JpZ2luYWxPcHRpb25zLmNsaWNrT3V0c2lkZURlYWN0aXZhdGVzO3JldHVybiB0JiYodGhpcy5vdXRzaWRlQ2xpY2s9e3RhcmdldDplLnRhcmdldCxhbGxvd0RlYWN0aXZhdGlvbjp0fSksdH19LHtrZXk6XCJoYW5kbGVEZWFjdGl2YXRlXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm9yaWdpbmFsT3B0aW9ucy5vbkRlYWN0aXZhdGUmJnRoaXMub3JpZ2luYWxPcHRpb25zLm9uRGVhY3RpdmF0ZS5jYWxsKG51bGwpLHRoaXMuZGVhY3RpdmF0ZVRyYXAoKX19LHtrZXk6XCJoYW5kbGVQb3N0RGVhY3RpdmF0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWZ1bmN0aW9uKCl7dmFyIHQ9ZS5nZXRSZXR1cm5Gb2N1c05vZGUoKSxuPSEoIWUub3JpZ2luYWxPcHRpb25zLnJldHVybkZvY3VzT25EZWFjdGl2YXRlfHxudWxsPT10fHwhdC5mb2N1c3x8ZS5vdXRzaWRlQ2xpY2smJighZS5vdXRzaWRlQ2xpY2suYWxsb3dEZWFjdGl2YXRpb258fGYoZS5vdXRzaWRlQ2xpY2sudGFyZ2V0LGUuaW50ZXJuYWxPcHRpb25zLnRhYmJhYmxlT3B0aW9ucykpKSxyPWUuaW50ZXJuYWxPcHRpb25zLnByZXZlbnRTY3JvbGwsbz12b2lkIDAhPT1yJiZyO24mJnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6b30pLGUub3JpZ2luYWxPcHRpb25zLm9uUG9zdERlYWN0aXZhdGUmJmUub3JpZ2luYWxPcHRpb25zLm9uUG9zdERlYWN0aXZhdGUuY2FsbChudWxsKSxlLm91dHNpZGVDbGljaz1udWxsfTt0aGlzLm9yaWdpbmFsT3B0aW9ucy5jaGVja0NhblJldHVybkZvY3VzP3RoaXMub3JpZ2luYWxPcHRpb25zLmNoZWNrQ2FuUmV0dXJuRm9jdXMuY2FsbChudWxsLHRoaXMuZ2V0UmV0dXJuRm9jdXNOb2RlKCkpLnRoZW4odCx0KTp0KCl9fSx7a2V5Olwic2V0dXBGb2N1c1RyYXBcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZm9jdXNUcmFwP3RoaXMucHJvcHMuYWN0aXZlJiYhdGhpcy5mb2N1c1RyYXAuYWN0aXZlJiYodGhpcy5mb2N1c1RyYXAuYWN0aXZhdGUoKSx0aGlzLnByb3BzLnBhdXNlZCYmdGhpcy5mb2N1c1RyYXAucGF1c2UoKSk6dGhpcy5mb2N1c1RyYXBFbGVtZW50cy5zb21lKEJvb2xlYW4pJiYodGhpcy5mb2N1c1RyYXA9dGhpcy5wcm9wcy5fY3JlYXRlRm9jdXNUcmFwKHRoaXMuZm9jdXNUcmFwRWxlbWVudHMsdGhpcy5pbnRlcm5hbE9wdGlvbnMpLHRoaXMucHJvcHMuYWN0aXZlJiZ0aGlzLmZvY3VzVHJhcC5hY3RpdmF0ZSgpLHRoaXMucHJvcHMucGF1c2VkJiZ0aGlzLmZvY3VzVHJhcC5wYXVzZSgpKX19LHtrZXk6XCJjb21wb25lbnREaWRNb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5hY3RpdmUmJnRoaXMuc2V0dXBGb2N1c1RyYXAoKX19LHtrZXk6XCJjb21wb25lbnREaWRVcGRhdGVcIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmZvY3VzVHJhcCl7ZS5jb250YWluZXJFbGVtZW50cyE9PXRoaXMucHJvcHMuY29udGFpbmVyRWxlbWVudHMmJnRoaXMuZm9jdXNUcmFwLnVwZGF0ZUNvbnRhaW5lckVsZW1lbnRzKHRoaXMucHJvcHMuY29udGFpbmVyRWxlbWVudHMpO3ZhciB0PSFlLmFjdGl2ZSYmdGhpcy5wcm9wcy5hY3RpdmUsbj1lLmFjdGl2ZSYmIXRoaXMucHJvcHMuYWN0aXZlLHI9IWUucGF1c2VkJiZ0aGlzLnByb3BzLnBhdXNlZCxvPWUucGF1c2VkJiYhdGhpcy5wcm9wcy5wYXVzZWQ7aWYodCYmKHRoaXMudXBkYXRlUHJldmlvdXNFbGVtZW50KCksdGhpcy5mb2N1c1RyYXAuYWN0aXZhdGUoKSksbilyZXR1cm4gdm9pZCB0aGlzLmRlYWN0aXZhdGVUcmFwKCk7ciYmdGhpcy5mb2N1c1RyYXAucGF1c2UoKSxvJiZ0aGlzLmZvY3VzVHJhcC51bnBhdXNlKCl9ZWxzZSBlLmNvbnRhaW5lckVsZW1lbnRzIT09dGhpcy5wcm9wcy5jb250YWluZXJFbGVtZW50cyYmKHRoaXMuZm9jdXNUcmFwRWxlbWVudHM9dGhpcy5wcm9wcy5jb250YWluZXJFbGVtZW50cyksdGhpcy5wcm9wcy5hY3RpdmUmJih0aGlzLnVwZGF0ZVByZXZpb3VzRWxlbWVudCgpLHRoaXMuc2V0dXBGb2N1c1RyYXAoKSl9fSx7a2V5OlwiY29tcG9uZW50V2lsbFVubW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGVhY3RpdmF0ZVRyYXAoKX19LHtrZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLmNoaWxkcmVuP3MuQ2hpbGRyZW4ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKTp2b2lkIDA7aWYodCl7aWYodC50eXBlJiZ0LnR5cGU9PT1zLkZyYWdtZW50KXRocm93IG5ldyBFcnJvcihcIkEgZm9jdXMtdHJhcCBjYW5ub3QgdXNlIGEgRnJhZ21lbnQgYXMgaXRzIGNoaWxkIGNvbnRhaW5lci4gVHJ5IHJlcGxhY2luZyBpdCB3aXRoIGEgPGRpdj4gZWxlbWVudC5cIik7cmV0dXJuIHMuY2xvbmVFbGVtZW50KHQse3JlZjpmdW5jdGlvbihuKXt2YXIgcj1lLnByb3BzLmNvbnRhaW5lckVsZW1lbnRzO3QmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnJlZj90LnJlZihuKTp0LnJlZiYmKHQucmVmLmN1cnJlbnQ9bikpLGUuZm9jdXNUcmFwRWxlbWVudHM9cnx8W25dfX0pfXJldHVybiBudWxsfX1dKSYmZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbChyLmtleSkscil9fSh0LnByb3RvdHlwZSxuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcInByb3RvdHlwZVwiLHt3cml0YWJsZTohMX0pLHB9KHMuQ29tcG9uZW50KSxwPVwidW5kZWZpbmVkXCI9PXR5cGVvZiBFbGVtZW50P0Z1bmN0aW9uOkVsZW1lbnQ7ZC5wcm9wVHlwZXM9e2FjdGl2ZTpjLmJvb2wscGF1c2VkOmMuYm9vbCxmb2N1c1RyYXBPcHRpb25zOmMuc2hhcGUoe2RvY3VtZW50OmMub2JqZWN0LG9uQWN0aXZhdGU6Yy5mdW5jLG9uUG9zdEFjdGl2YXRlOmMuZnVuYyxjaGVja0NhbkZvY3VzVHJhcDpjLmZ1bmMsb25EZWFjdGl2YXRlOmMuZnVuYyxvblBvc3REZWFjdGl2YXRlOmMuZnVuYyxjaGVja0NhblJldHVybkZvY3VzOmMuZnVuYyxpbml0aWFsRm9jdXM6Yy5vbmVPZlR5cGUoW2MuaW5zdGFuY2VPZihwKSxjLnN0cmluZyxjLmJvb2wsYy5mdW5jXSksZmFsbGJhY2tGb2N1czpjLm9uZU9mVHlwZShbYy5pbnN0YW5jZU9mKHApLGMuc3RyaW5nLGMuZnVuY10pLGVzY2FwZURlYWN0aXZhdGVzOmMub25lT2ZUeXBlKFtjLmJvb2wsYy5mdW5jXSksY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXM6Yy5vbmVPZlR5cGUoW2MuYm9vbCxjLmZ1bmNdKSxyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZTpjLmJvb2wsc2V0UmV0dXJuRm9jdXM6Yy5vbmVPZlR5cGUoW2MuaW5zdGFuY2VPZihwKSxjLnN0cmluZyxjLmJvb2wsYy5mdW5jXSksYWxsb3dPdXRzaWRlQ2xpY2s6Yy5vbmVPZlR5cGUoW2MuYm9vbCxjLmZ1bmNdKSxwcmV2ZW50U2Nyb2xsOmMuYm9vbCx0YWJiYWJsZU9wdGlvbnM6Yy5zaGFwZSh7ZGlzcGxheUNoZWNrOmMub25lT2YoW1wiZnVsbFwiLFwibGVnYWN5LWZ1bGxcIixcIm5vbi16ZXJvLWFyZWFcIixcIm5vbmVcIl0pLGdldFNoYWRvd1Jvb3Q6Yy5vbmVPZlR5cGUoW2MuYm9vbCxjLmZ1bmNdKX0pLHRyYXBTdGFjazpjLmFycmF5LGlzS2V5Rm9yd2FyZDpjLmZ1bmMsaXNLZXlCYWNrd2FyZDpjLmZ1bmN9KSxjb250YWluZXJFbGVtZW50czpjLmFycmF5T2YoYy5pbnN0YW5jZU9mKHApKSxjaGlsZHJlbjpjLm9uZU9mVHlwZShbYy5lbGVtZW50LGMuaW5zdGFuY2VPZihwKV0pfSxkLmRlZmF1bHRQcm9wcz17YWN0aXZlOiEwLHBhdXNlZDohMSxmb2N1c1RyYXBPcHRpb25zOnt9LF9jcmVhdGVGb2N1c1RyYXA6dX0sZS5leHBvcnRzPWR9LDUzMDM6KGUsdCxuKT0+e24ucih0KSxuLmQodCx7Y3JlYXRlRm9jdXNUcmFwOigpPT5nfSk7dmFyIHI9big4Mzg4KTtmdW5jdGlvbiBvKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBpKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP28oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXthKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpvKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIGEoZSx0LG4pe3JldHVybih0PWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGV8fG51bGw9PT1lKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1uKXt2YXIgcj1uLmNhbGwoZSxcInN0cmluZ1wiKTtpZihcIm9iamVjdFwiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIil9cmV0dXJuIFN0cmluZyhlKX0oZSk7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHQ/dDpTdHJpbmcodCl9KHQpKWluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfXZhciBsPWZ1bmN0aW9uKGUpe3JldHVyblwiVGFiXCI9PT1lLmtleXx8OT09PWUua2V5Q29kZX0scz1mdW5jdGlvbihlKXtyZXR1cm4gbChlKSYmIWUuc2hpZnRLZXl9LGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSkmJmUuc2hpZnRLZXl9LHU9ZnVuY3Rpb24oZSl7cmV0dXJuIHNldFRpbWVvdXQoZSwwKX0sZj1mdW5jdGlvbihlLHQpe3ZhciBuPS0xO3JldHVybiBlLmV2ZXJ5KChmdW5jdGlvbihlLHIpe3JldHVybiF0KGUpfHwobj1yLCExKX0pKSxufSxkPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UuYXBwbHkodm9pZCAwLG4pOmV9LHA9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFyZ2V0LnNoYWRvd1Jvb3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY29tcG9zZWRQYXRoP2UuY29tcG9zZWRQYXRoKClbMF06ZS50YXJnZXR9LGg9W10sZz1mdW5jdGlvbihlLHQpe3ZhciBuLG89KG51bGw9PXQ/dm9pZCAwOnQuZG9jdW1lbnQpfHxkb2N1bWVudCxhPShudWxsPT10P3ZvaWQgMDp0LnRyYXBTdGFjayl8fGgsZz1pKHtyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZTohMCxlc2NhcGVEZWFjdGl2YXRlczohMCxkZWxheUluaXRpYWxGb2N1czohMCxpc0tleUZvcndhcmQ6cyxpc0tleUJhY2t3YXJkOmN9LHQpLHY9e2NvbnRhaW5lcnM6W10sY29udGFpbmVyR3JvdXBzOltdLHRhYmJhYmxlR3JvdXBzOltdLG5vZGVGb2N1c2VkQmVmb3JlQWN0aXZhdGlvbjpudWxsLG1vc3RSZWNlbnRseUZvY3VzZWROb2RlOm51bGwsYWN0aXZlOiExLHBhdXNlZDohMSxkZWxheUluaXRpYWxGb2N1c1RpbWVyOnZvaWQgMH0sbT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJnZvaWQgMCE9PWVbdF0/ZVt0XTpnW258fHRdfSxDPWZ1bmN0aW9uKGUpe3JldHVybiB2LmNvbnRhaW5lckdyb3Vwcy5maW5kSW5kZXgoKGZ1bmN0aW9uKHQpe3ZhciBuPXQuY29udGFpbmVyLHI9dC50YWJiYWJsZU5vZGVzO3JldHVybiBuLmNvbnRhaW5zKGUpfHxyLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZX0pKX0pKX0seT1mdW5jdGlvbihlKXt2YXIgdD1nW2VdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+MT9uLTE6MCksaT0xO2k8bjtpKyspcltpLTFdPWFyZ3VtZW50c1tpXTt0PXQuYXBwbHkodm9pZCAwLHIpfWlmKCEwPT09dCYmKHQ9dm9pZCAwKSwhdCl7aWYodm9pZCAwPT09dHx8ITE9PT10KXJldHVybiB0O3Rocm93IG5ldyBFcnJvcihcImBcIi5jb25jYXQoZSxcImAgd2FzIHNwZWNpZmllZCBidXQgd2FzIG5vdCBhIG5vZGUsIG9yIGRpZCBub3QgcmV0dXJuIGEgbm9kZVwiKSl9dmFyIGE9dDtpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmIShhPW8ucXVlcnlTZWxlY3Rvcih0KSkpdGhyb3cgbmV3IEVycm9yKFwiYFwiLmNvbmNhdChlLFwiYCBhcyBzZWxlY3RvciByZWZlcnMgdG8gbm8ga25vd24gbm9kZVwiKSk7cmV0dXJuIGF9LHc9ZnVuY3Rpb24oKXt2YXIgZT15KFwiaW5pdGlhbEZvY3VzXCIpO2lmKCExPT09ZSlyZXR1cm4hMTtpZih2b2lkIDA9PT1lKWlmKEMoby5hY3RpdmVFbGVtZW50KT49MCllPW8uYWN0aXZlRWxlbWVudDtlbHNle3ZhciB0PXYudGFiYmFibGVHcm91cHNbMF07ZT10JiZ0LmZpcnN0VGFiYmFibGVOb2RlfHx5KFwiZmFsbGJhY2tGb2N1c1wiKX1pZighZSl0aHJvdyBuZXcgRXJyb3IoXCJZb3VyIGZvY3VzLXRyYXAgbmVlZHMgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgZm9jdXNhYmxlIGVsZW1lbnRcIik7cmV0dXJuIGV9LGI9ZnVuY3Rpb24oKXtpZih2LmNvbnRhaW5lckdyb3Vwcz12LmNvbnRhaW5lcnMubWFwKChmdW5jdGlvbihlKXt2YXIgdD0oMCxyLnRhYmJhYmxlKShlLGcudGFiYmFibGVPcHRpb25zKSxuPSgwLHIuZm9jdXNhYmxlKShlLGcudGFiYmFibGVPcHRpb25zKTtyZXR1cm57Y29udGFpbmVyOmUsdGFiYmFibGVOb2Rlczp0LGZvY3VzYWJsZU5vZGVzOm4sZmlyc3RUYWJiYWJsZU5vZGU6dC5sZW5ndGg+MD90WzBdOm51bGwsbGFzdFRhYmJhYmxlTm9kZTp0Lmxlbmd0aD4wP3RbdC5sZW5ndGgtMV06bnVsbCxuZXh0VGFiYmFibGVOb2RlOmZ1bmN0aW9uKGUpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sbz1uLmZpbmRJbmRleCgoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lfSkpO2lmKCEobzwwKSlyZXR1cm4gdD9uLnNsaWNlKG8rMSkuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5pc1RhYmJhYmxlKShlLGcudGFiYmFibGVPcHRpb25zKX0pKTpuLnNsaWNlKDAsbykucmV2ZXJzZSgpLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybigwLHIuaXNUYWJiYWJsZSkoZSxnLnRhYmJhYmxlT3B0aW9ucyl9KSl9fX0pKSx2LnRhYmJhYmxlR3JvdXBzPXYuY29udGFpbmVyR3JvdXBzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFiYmFibGVOb2Rlcy5sZW5ndGg+MH0pKSx2LnRhYmJhYmxlR3JvdXBzLmxlbmd0aDw9MCYmIXkoXCJmYWxsYmFja0ZvY3VzXCIpKXRocm93IG5ldyBFcnJvcihcIllvdXIgZm9jdXMtdHJhcCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGNvbnRhaW5lciB3aXRoIGF0IGxlYXN0IG9uZSB0YWJiYWJsZSBub2RlIGluIGl0IGF0IGFsbCB0aW1lc1wiKX0seD1mdW5jdGlvbiBlKHQpeyExIT09dCYmdCE9PW8uYWN0aXZlRWxlbWVudCYmKHQmJnQuZm9jdXM/KHQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ISFnLnByZXZlbnRTY3JvbGx9KSx2Lm1vc3RSZWNlbnRseUZvY3VzZWROb2RlPXQsZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFnTmFtZSYmXCJpbnB1dFwiPT09ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuc2VsZWN0fSh0KSYmdC5zZWxlY3QoKSk6ZSh3KCkpKX0sXz1mdW5jdGlvbihlKXt2YXIgdD15KFwic2V0UmV0dXJuRm9jdXNcIixlKTtyZXR1cm4gdHx8ITEhPT10JiZlfSxPPWZ1bmN0aW9uKGUpe3ZhciB0PXAoZSk7Qyh0KT49MHx8KGQoZy5jbGlja091dHNpZGVEZWFjdGl2YXRlcyxlKT9uLmRlYWN0aXZhdGUoe3JldHVybkZvY3VzOmcucmV0dXJuRm9jdXNPbkRlYWN0aXZhdGV9KTpkKGcuYWxsb3dPdXRzaWRlQ2xpY2ssZSl8fGUucHJldmVudERlZmF1bHQoKSl9LEw9ZnVuY3Rpb24oZSl7dmFyIHQ9cChlKSxuPUModCk+PTA7bnx8dCBpbnN0YW5jZW9mIERvY3VtZW50P24mJih2Lm1vc3RSZWNlbnRseUZvY3VzZWROb2RlPXQpOihlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHgodi5tb3N0UmVjZW50bHlGb2N1c2VkTm9kZXx8dygpKSl9LEU9ZnVuY3Rpb24oZSl7aWYoKFwiRXNjYXBlXCI9PT0odD1lKS5rZXl8fFwiRXNjXCI9PT10LmtleXx8Mjc9PT10LmtleUNvZGUpJiYhMSE9PWQoZy5lc2NhcGVEZWFjdGl2YXRlcyxlKSlyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgbi5kZWFjdGl2YXRlKCk7dmFyIHQ7KGcuaXNLZXlGb3J3YXJkKGUpfHxnLmlzS2V5QmFja3dhcmQoZSkpJiZmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLG49cChlKTtiKCk7dmFyIG89bnVsbDtpZih2LnRhYmJhYmxlR3JvdXBzLmxlbmd0aD4wKXt2YXIgaT1DKG4pLGE9aT49MD92LmNvbnRhaW5lckdyb3Vwc1tpXTp2b2lkIDA7aWYoaTwwKW89dD92LnRhYmJhYmxlR3JvdXBzW3YudGFiYmFibGVHcm91cHMubGVuZ3RoLTFdLmxhc3RUYWJiYWJsZU5vZGU6di50YWJiYWJsZUdyb3Vwc1swXS5maXJzdFRhYmJhYmxlTm9kZTtlbHNlIGlmKHQpe3ZhciBzPWYodi50YWJiYWJsZUdyb3VwcywoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5maXJzdFRhYmJhYmxlTm9kZTtyZXR1cm4gbj09PXR9KSk7aWYoczwwJiYoYS5jb250YWluZXI9PT1ufHwoMCxyLmlzRm9jdXNhYmxlKShuLGcudGFiYmFibGVPcHRpb25zKSYmISgwLHIuaXNUYWJiYWJsZSkobixnLnRhYmJhYmxlT3B0aW9ucykmJiFhLm5leHRUYWJiYWJsZU5vZGUobiwhMSkpJiYocz1pKSxzPj0wKXt2YXIgYz0wPT09cz92LnRhYmJhYmxlR3JvdXBzLmxlbmd0aC0xOnMtMTtvPXYudGFiYmFibGVHcm91cHNbY10ubGFzdFRhYmJhYmxlTm9kZX1lbHNlIGwoZSl8fChvPWEubmV4dFRhYmJhYmxlTm9kZShuLCExKSl9ZWxzZXt2YXIgdT1mKHYudGFiYmFibGVHcm91cHMsKGZ1bmN0aW9uKGUpe3ZhciB0PWUubGFzdFRhYmJhYmxlTm9kZTtyZXR1cm4gbj09PXR9KSk7aWYodTwwJiYoYS5jb250YWluZXI9PT1ufHwoMCxyLmlzRm9jdXNhYmxlKShuLGcudGFiYmFibGVPcHRpb25zKSYmISgwLHIuaXNUYWJiYWJsZSkobixnLnRhYmJhYmxlT3B0aW9ucykmJiFhLm5leHRUYWJiYWJsZU5vZGUobikpJiYodT1pKSx1Pj0wKXt2YXIgZD11PT09di50YWJiYWJsZUdyb3Vwcy5sZW5ndGgtMT8wOnUrMTtvPXYudGFiYmFibGVHcm91cHNbZF0uZmlyc3RUYWJiYWJsZU5vZGV9ZWxzZSBsKGUpfHwobz1hLm5leHRUYWJiYWJsZU5vZGUobikpfX1lbHNlIG89eShcImZhbGxiYWNrRm9jdXNcIik7byYmKGwoZSkmJmUucHJldmVudERlZmF1bHQoKSx4KG8pKX0oZSxnLmlzS2V5QmFja3dhcmQoZSkpfSxTPWZ1bmN0aW9uKGUpe3ZhciB0PXAoZSk7Qyh0KT49MHx8ZChnLmNsaWNrT3V0c2lkZURlYWN0aXZhdGVzLGUpfHxkKGcuYWxsb3dPdXRzaWRlQ2xpY2ssZSl8fChlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9LGo9ZnVuY3Rpb24oKXtpZih2LmFjdGl2ZSlyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZihlLmxlbmd0aD4wKXt2YXIgbj1lW2UubGVuZ3RoLTFdO24hPT10JiZuLnBhdXNlKCl9dmFyIHI9ZS5pbmRleE9mKHQpOy0xPT09cnx8ZS5zcGxpY2UociwxKSxlLnB1c2godCl9KGEsbiksdi5kZWxheUluaXRpYWxGb2N1c1RpbWVyPWcuZGVsYXlJbml0aWFsRm9jdXM/dSgoZnVuY3Rpb24oKXt4KHcoKSl9KSk6eCh3KCkpLG8uYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzaW5cIixMLCEwKSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixPLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsTyx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksby5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixTLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsRSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksbn0sTT1mdW5jdGlvbigpe2lmKHYuYWN0aXZlKXJldHVybiBvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsTCwhMCksby5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsTywhMCksby5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLE8sITApLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsUywhMCksby5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLEUsITApLG59O3JldHVybihuPXtnZXQgYWN0aXZlKCl7cmV0dXJuIHYuYWN0aXZlfSxnZXQgcGF1c2VkKCl7cmV0dXJuIHYucGF1c2VkfSxhY3RpdmF0ZTpmdW5jdGlvbihlKXtpZih2LmFjdGl2ZSlyZXR1cm4gdGhpczt2YXIgdD1tKGUsXCJvbkFjdGl2YXRlXCIpLG49bShlLFwib25Qb3N0QWN0aXZhdGVcIikscj1tKGUsXCJjaGVja0NhbkZvY3VzVHJhcFwiKTtyfHxiKCksdi5hY3RpdmU9ITAsdi5wYXVzZWQ9ITEsdi5ub2RlRm9jdXNlZEJlZm9yZUFjdGl2YXRpb249by5hY3RpdmVFbGVtZW50LHQmJnQoKTt2YXIgaT1mdW5jdGlvbigpe3ImJmIoKSxqKCksbiYmbigpfTtyZXR1cm4gcj8ocih2LmNvbnRhaW5lcnMuY29uY2F0KCkpLnRoZW4oaSxpKSx0aGlzKTooaSgpLHRoaXMpfSxkZWFjdGl2YXRlOmZ1bmN0aW9uKGUpe2lmKCF2LmFjdGl2ZSlyZXR1cm4gdGhpczt2YXIgdD1pKHtvbkRlYWN0aXZhdGU6Zy5vbkRlYWN0aXZhdGUsb25Qb3N0RGVhY3RpdmF0ZTpnLm9uUG9zdERlYWN0aXZhdGUsY2hlY2tDYW5SZXR1cm5Gb2N1czpnLmNoZWNrQ2FuUmV0dXJuRm9jdXN9LGUpO2NsZWFyVGltZW91dCh2LmRlbGF5SW5pdGlhbEZvY3VzVGltZXIpLHYuZGVsYXlJbml0aWFsRm9jdXNUaW1lcj12b2lkIDAsTSgpLHYuYWN0aXZlPSExLHYucGF1c2VkPSExLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5pbmRleE9mKHQpOy0xIT09biYmZS5zcGxpY2UobiwxKSxlLmxlbmd0aD4wJiZlW2UubGVuZ3RoLTFdLnVucGF1c2UoKX0oYSxuKTt2YXIgcj1tKHQsXCJvbkRlYWN0aXZhdGVcIiksbz1tKHQsXCJvblBvc3REZWFjdGl2YXRlXCIpLGw9bSh0LFwiY2hlY2tDYW5SZXR1cm5Gb2N1c1wiKSxzPW0odCxcInJldHVybkZvY3VzXCIsXCJyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZVwiKTtyJiZyKCk7dmFyIGM9ZnVuY3Rpb24oKXt1KChmdW5jdGlvbigpe3MmJngoXyh2Lm5vZGVGb2N1c2VkQmVmb3JlQWN0aXZhdGlvbikpLG8mJm8oKX0pKX07cmV0dXJuIHMmJmw/KGwoXyh2Lm5vZGVGb2N1c2VkQmVmb3JlQWN0aXZhdGlvbikpLnRoZW4oYyxjKSx0aGlzKTooYygpLHRoaXMpfSxwYXVzZTpmdW5jdGlvbigpe3JldHVybiB2LnBhdXNlZHx8IXYuYWN0aXZlfHwodi5wYXVzZWQ9ITAsTSgpKSx0aGlzfSx1bnBhdXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHYucGF1c2VkJiZ2LmFjdGl2ZT8odi5wYXVzZWQ9ITEsYigpLGooKSx0aGlzKTp0aGlzfSx1cGRhdGVDb250YWluZXJFbGVtZW50czpmdW5jdGlvbihlKXt2YXIgdD1bXS5jb25jYXQoZSkuZmlsdGVyKEJvb2xlYW4pO3JldHVybiB2LmNvbnRhaW5lcnM9dC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP28ucXVlcnlTZWxlY3RvcihlKTplfSkpLHYuYWN0aXZlJiZiKCksdGhpc319KS51cGRhdGVDb250YWluZXJFbGVtZW50cyhlKSxufX0sOTE0MTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9big2NTUpLG89big2Njg5KSxpPW4oNDM5NCksYT1uKDM1NzMpLGw9big5Mjk0KSxzPW4oNDgzOSk7ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB1PWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBlJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXtpZihcImRlZmF1bHRcIiE9PW4pe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHIuZ2V0P3I6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbbl19fSl9fSkpLHQuZGVmYXVsdD1lLE9iamVjdC5mcmVlemUodCl9KG8pLGY9YyhvKSxkPWMocykscD1mdW5jdGlvbihlKXtyZXR1cm57aXNFbmFibGVkOmZ1bmN0aW9uKHQpe3JldHVybiBlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiEhdFtlXX0pKX19fSxoPXttZWFzdXJlTGF5b3V0OnAoW1wibGF5b3V0XCIsXCJsYXlvdXRJZFwiLFwiZHJhZ1wiLFwiX2xheW91dFJlc2V0VHJhbnNmb3JtXCJdKSxhbmltYXRpb246cChbXCJhbmltYXRlXCIsXCJleGl0XCIsXCJ2YXJpYW50c1wiLFwid2hpbGVIb3ZlclwiLFwid2hpbGVUYXBcIixcIndoaWxlRm9jdXNcIixcIndoaWxlRHJhZ1wiXSksZXhpdDpwKFtcImV4aXRcIl0pLGRyYWc6cChbXCJkcmFnXCIsXCJkcmFnQ29udHJvbHNcIl0pLGZvY3VzOnAoW1wid2hpbGVGb2N1c1wiXSksaG92ZXI6cChbXCJ3aGlsZUhvdmVyXCIsXCJvbkhvdmVyU3RhcnRcIixcIm9uSG92ZXJFbmRcIl0pLHRhcDpwKFtcIndoaWxlVGFwXCIsXCJvblRhcFwiLFwib25UYXBTdGFydFwiLFwib25UYXBDYW5jZWxcIl0pLHBhbjpwKFtcIm9uUGFuXCIsXCJvblBhblN0YXJ0XCIsXCJvblBhblNlc3Npb25TdGFydFwiLFwib25QYW5FbmRcIl0pLGxheW91dEFuaW1hdGlvbjpwKFtcImxheW91dFwiLFwibGF5b3V0SWRcIl0pfTtmdW5jdGlvbiBnKGUpe2Zvcih2YXIgdCBpbiBlKXt2YXIgbj1lW3RdO251bGwhPT1uJiYoaFt0XS5Db21wb25lbnQ9bil9fXZhciB2PW8uY3JlYXRlQ29udGV4dCh7c3RyaWN0OiExfSksbT1PYmplY3Qua2V5cyhoKSxDPW0ubGVuZ3RoLHk9by5jcmVhdGVDb250ZXh0KHt0cmFuc2Zvcm1QYWdlUG9pbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGlzU3RhdGljOiExfSksdz1vLmNyZWF0ZUNvbnRleHQoe30pO2Z1bmN0aW9uIGIoKXtyZXR1cm4gby51c2VDb250ZXh0KHcpLnZpc3VhbEVsZW1lbnR9dmFyIHg9by5jcmVhdGVDb250ZXh0KG51bGwpO2Z1bmN0aW9uIF8oZSl7dmFyIHQ9by51c2VSZWYobnVsbCk7cmV0dXJuIG51bGw9PT10LmN1cnJlbnQmJih0LmN1cnJlbnQ9ZSgpKSx0LmN1cnJlbnR9ZnVuY3Rpb24gTygpe3ZhciBlPW8udXNlQ29udGV4dCh4KTtpZihudWxsPT09ZSlyZXR1cm5bITAsbnVsbF07dmFyIHQ9ZS5pc1ByZXNlbnQsbj1lLm9uRXhpdENvbXBsZXRlLHI9ZS5yZWdpc3RlcixpPWooKTtyZXR1cm4gby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHIoaSl9KSxbXSksIXQmJm4/WyExLGZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PW4/dm9pZCAwOm4oaSl9XTpbITBdfWZ1bmN0aW9uIEwoZSl7cmV0dXJuIG51bGw9PT1lfHxlLmlzUHJlc2VudH12YXIgRT0wLFM9ZnVuY3Rpb24oKXtyZXR1cm4gRSsrfSxqPWZ1bmN0aW9uKCl7cmV0dXJuIF8oUyl9LE09by5jcmVhdGVDb250ZXh0KG51bGwpLGs9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyxSPWs/by51c2VMYXlvdXRFZmZlY3Q6by51c2VFZmZlY3Q7ZnVuY3Rpb24gUChlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJjdXJyZW50XCIpfWZ1bmN0aW9uIEkoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gQShlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZXx8SShlKX1mdW5jdGlvbiBUKGUsdCxuLHIsbyl7dmFyIGk7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSx2b2lkIDA9PT1vJiYobz17fSksXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PW51bGw9PT0oaT1lLnZhcmlhbnRzKXx8dm9pZCAwPT09aT92b2lkIDA6aVt0XSksXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KG51bGwhPW4/bjplLmN1c3RvbSxyLG8pOnR9ZnVuY3Rpb24gSChlLHQsbil7dmFyIHI9ZS5nZXRQcm9wcygpO3JldHVybiBUKHIsdCxudWxsIT1uP246ci5jdXN0b20sZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIGUuZm9yRWFjaFZhbHVlKChmdW5jdGlvbihlLG4pe3JldHVybiB0W25dPWUuZ2V0KCl9KSksdH0oZSksZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIGUuZm9yRWFjaFZhbHVlKChmdW5jdGlvbihlLG4pe3JldHVybiB0W25dPWUuZ2V0VmVsb2NpdHkoKX0pKSx0fShlKSl9ZnVuY3Rpb24gQihlKXt2YXIgdDtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZihudWxsPT09KHQ9ZS5hbmltYXRlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5zdGFydCl8fEEoZS5pbml0aWFsKXx8QShlLmFuaW1hdGUpfHxBKGUud2hpbGVIb3Zlcil8fEEoZS53aGlsZURyYWcpfHxBKGUud2hpbGVUYXApfHxBKGUud2hpbGVGb2N1cyl8fEEoZS5leGl0KX1mdW5jdGlvbiBWKGUpe3JldHVybiBCb29sZWFuKEIoZSl8fGUudmFyaWFudHMpfWZ1bmN0aW9uIEQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5qb2luKFwiIFwiKTplfWZ1bmN0aW9uIFooZSl7dmFyIHQ9ZS5wcmVsb2FkZWRGZWF0dXJlcyxuPWUuY3JlYXRlVmlzdWFsRWxlbWVudCxpPWUudXNlUmVuZGVyLGE9ZS51c2VWaXN1YWxTdGF0ZSxsPWUuQ29tcG9uZW50O3JldHVybiB0JiZnKHQpLG8uZm9yd2FyZFJlZigoZnVuY3Rpb24oZSx0KXt2YXIgcz1vLnVzZUNvbnRleHQoeSkuaXNTdGF0aWMsYz1udWxsLGY9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlLHQpe2lmKEIoZSkpe3ZhciBuPWUuaW5pdGlhbCxyPWUuYW5pbWF0ZTtyZXR1cm57aW5pdGlhbDohMT09PW58fEEobik/bjp2b2lkIDAsYW5pbWF0ZTpBKHIpP3I6dm9pZCAwfX1yZXR1cm4hMSE9PWUuaW5oZXJpdD90Ont9fShlLG8udXNlQ29udGV4dCh3KSkscj1uLmluaXRpYWwsaT1uLmFuaW1hdGU7cmV0dXJuIG8udXNlTWVtbygoZnVuY3Rpb24oKXtyZXR1cm57aW5pdGlhbDpyLGFuaW1hdGU6aX19KSx0P1tEKHIpLEQoaSldOltdKX0oZSxzKSxkPWEoZSxzKTtyZXR1cm4hcyYmayYmKGYudmlzdWFsRWxlbWVudD1mdW5jdGlvbihlLHQsbixpKXt2YXIgYT1vLnVzZUNvbnRleHQoeSksbD1vLnVzZUNvbnRleHQodikscz1iKCksYz1vLnVzZUNvbnRleHQoeCksdT1mdW5jdGlvbihlKXt2YXIgdD1lLmxheW91dElkLG49by51c2VDb250ZXh0KE0pO3JldHVybiBuJiZ2b2lkIDAhPT10P24rXCItXCIrdDp0fShuKSxmPW8udXNlUmVmKHZvaWQgMCk7aXx8KGk9bC5yZW5kZXJlciksIWYuY3VycmVudCYmaSYmKGYuY3VycmVudD1pKGUse3Zpc3VhbFN0YXRlOnQscGFyZW50OnMscHJvcHM6ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG4pLHtsYXlvdXRJZDp1fSkscHJlc2VuY2VJZDpudWxsPT1jP3ZvaWQgMDpjLmlkLGJsb2NrSW5pdGlhbEFuaW1hdGlvbjohMT09PShudWxsPT1jP3ZvaWQgMDpjLmluaXRpYWwpfSkpO3ZhciBkPWYuY3VycmVudDtyZXR1cm4gUigoZnVuY3Rpb24oKXtkJiYoZC5zZXRQcm9wcyhyLl9fYXNzaWduKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxhKSxuKSx7bGF5b3V0SWQ6dX0pKSxkLmlzUHJlc2VudD1MKGMpLGQuaXNQcmVzZW5jZVJvb3Q9IXN8fHMucHJlc2VuY2VJZCE9PShudWxsPT1jP3ZvaWQgMDpjLmlkKSxkLnN5bmNSZW5kZXIoKSl9KSksby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7dmFyIGU7ZCYmKG51bGw9PT0oZT1kLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZXx8ZS5hbmltYXRlQ2hhbmdlcygpKX0pKSxSKChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBudWxsPT1kP3ZvaWQgMDpkLm5vdGlmeVVubW91bnQoKX19KSxbXSksZH0obCxkLGUsbiksYz1mdW5jdGlvbihlLHQsbil7dmFyIGk9W107aWYoby51c2VDb250ZXh0KHYpLCF0KXJldHVybiBudWxsO2Zvcih2YXIgYT0wO2E8QzthKyspe3ZhciBsPW1bYV0scz1oW2xdLGM9cy5pc0VuYWJsZWQsZj1zLkNvbXBvbmVudDtjKGUpJiZmJiZpLnB1c2godS5jcmVhdGVFbGVtZW50KGYsci5fX2Fzc2lnbih7a2V5Omx9LGUse3Zpc3VhbEVsZW1lbnQ6dH0pKSl9cmV0dXJuIGl9KGUsZi52aXN1YWxFbGVtZW50KSksdS5jcmVhdGVFbGVtZW50KHUuRnJhZ21lbnQsbnVsbCx1LmNyZWF0ZUVsZW1lbnQody5Qcm92aWRlcix7dmFsdWU6Zn0saShsLGUsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBvLnVzZUNhbGxiYWNrKChmdW5jdGlvbihyKXt2YXIgbztyJiYobnVsbD09PShvPWUubW91bnQpfHx2b2lkIDA9PT1vfHxvLmNhbGwoZSxyKSksdCYmKHI/dC5tb3VudChyKTp0LnVubW91bnQoKSksbiYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bihyKTpQKG4pJiYobi5jdXJyZW50PXIpKX0pLFt0XSl9KGQsZi52aXN1YWxFbGVtZW50LHQpLGQscykpLGMpfSkpfWZ1bmN0aW9uICQoZSl7ZnVuY3Rpb24gdCh0LG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksWihlKHQsbikpfXZhciBuPW5ldyBNYXA7cmV0dXJuIG5ldyBQcm94eSh0LHtnZXQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbi5oYXMocil8fG4uc2V0KHIsdChyKSksbi5nZXQocil9fSl9dmFyIE49W1wiYW5pbWF0ZVwiLFwiY2lyY2xlXCIsXCJkZWZzXCIsXCJkZXNjXCIsXCJlbGxpcHNlXCIsXCJnXCIsXCJpbWFnZVwiLFwibGluZVwiLFwiZmlsdGVyXCIsXCJtYXJrZXJcIixcIm1hc2tcIixcIm1ldGFkYXRhXCIsXCJwYXRoXCIsXCJwYXR0ZXJuXCIsXCJwb2x5Z29uXCIsXCJwb2x5bGluZVwiLFwicmVjdFwiLFwic3RvcFwiLFwic3ZnXCIsXCJzd2l0Y2hcIixcInN5bWJvbFwiLFwidGV4dFwiLFwidHNwYW5cIixcInVzZVwiLFwidmlld1wiXTtmdW5jdGlvbiBGKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYhZS5pbmNsdWRlcyhcIi1cIikmJiEhKE4uaW5kZXhPZihlKT4tMXx8L1tBLVpdLy50ZXN0KGUpKX12YXIgVT17fTtmdW5jdGlvbiBXKGUpe2Zvcih2YXIgdCBpbiBlKVVbdF09ZVt0XX12YXIgej1bXCJcIixcIlhcIixcIllcIixcIlpcIl0sRz1bXCJ0cmFuc2Zvcm1QZXJzcGVjdGl2ZVwiLFwieFwiLFwieVwiLFwielwiXTtmdW5jdGlvbiBxKGUsdCl7cmV0dXJuIEcuaW5kZXhPZihlKS1HLmluZGV4T2YodCl9W1widHJhbnNsYXRlXCIsXCJzY2FsZVwiLFwicm90YXRlXCIsXCJza2V3XCJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB6LmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBHLnB1c2goZSt0KX0pKX0pKTt2YXIgWT1uZXcgU2V0KEcpO2Z1bmN0aW9uIEsoZSl7cmV0dXJuIFkuaGFzKGUpfXZhciBYPW5ldyBTZXQoW1wib3JpZ2luWFwiLFwib3JpZ2luWVwiLFwib3JpZ2luWlwiXSk7ZnVuY3Rpb24gSihlKXtyZXR1cm4gWC5oYXMoZSl9ZnVuY3Rpb24gUShlLHQpe3ZhciBuPXQubGF5b3V0LHI9dC5sYXlvdXRJZDtyZXR1cm4gSyhlKXx8SihlKXx8KG58fHZvaWQgMCE9PXIpJiYoISFVW2VdfHxcIm9wYWNpdHlcIj09PWUpfXZhciBlZT1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLmdldFZlbG9jaXR5fSx0ZT17eDpcInRyYW5zbGF0ZVhcIix5OlwidHJhbnNsYXRlWVwiLHo6XCJ0cmFuc2xhdGVaXCIsdHJhbnNmb3JtUGVyc3BlY3RpdmU6XCJwZXJzcGVjdGl2ZVwifTtmdW5jdGlvbiBuZShlKXtyZXR1cm4gZS5zdGFydHNXaXRoKFwiLS1cIil9dmFyIHJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQmJlwibnVtYmVyXCI9PXR5cGVvZiBlP3QudHJhbnNmb3JtKGUpOmV9LG9lPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxhLm51bWJlcikse3RyYW5zZm9ybTpNYXRoLnJvdW5kfSksaWU9e2JvcmRlcldpZHRoOmEucHgsYm9yZGVyVG9wV2lkdGg6YS5weCxib3JkZXJSaWdodFdpZHRoOmEucHgsYm9yZGVyQm90dG9tV2lkdGg6YS5weCxib3JkZXJMZWZ0V2lkdGg6YS5weCxib3JkZXJSYWRpdXM6YS5weCxyYWRpdXM6YS5weCxib3JkZXJUb3BMZWZ0UmFkaXVzOmEucHgsYm9yZGVyVG9wUmlnaHRSYWRpdXM6YS5weCxib3JkZXJCb3R0b21SaWdodFJhZGl1czphLnB4LGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6YS5weCx3aWR0aDphLnB4LG1heFdpZHRoOmEucHgsaGVpZ2h0OmEucHgsbWF4SGVpZ2h0OmEucHgsc2l6ZTphLnB4LHRvcDphLnB4LHJpZ2h0OmEucHgsYm90dG9tOmEucHgsbGVmdDphLnB4LHBhZGRpbmc6YS5weCxwYWRkaW5nVG9wOmEucHgscGFkZGluZ1JpZ2h0OmEucHgscGFkZGluZ0JvdHRvbTphLnB4LHBhZGRpbmdMZWZ0OmEucHgsbWFyZ2luOmEucHgsbWFyZ2luVG9wOmEucHgsbWFyZ2luUmlnaHQ6YS5weCxtYXJnaW5Cb3R0b206YS5weCxtYXJnaW5MZWZ0OmEucHgscm90YXRlOmEuZGVncmVlcyxyb3RhdGVYOmEuZGVncmVlcyxyb3RhdGVZOmEuZGVncmVlcyxyb3RhdGVaOmEuZGVncmVlcyxzY2FsZTphLnNjYWxlLHNjYWxlWDphLnNjYWxlLHNjYWxlWTphLnNjYWxlLHNjYWxlWjphLnNjYWxlLHNrZXc6YS5kZWdyZWVzLHNrZXdYOmEuZGVncmVlcyxza2V3WTphLmRlZ3JlZXMsZGlzdGFuY2U6YS5weCx0cmFuc2xhdGVYOmEucHgsdHJhbnNsYXRlWTphLnB4LHRyYW5zbGF0ZVo6YS5weCx4OmEucHgseTphLnB4LHo6YS5weCxwZXJzcGVjdGl2ZTphLnB4LHRyYW5zZm9ybVBlcnNwZWN0aXZlOmEucHgsb3BhY2l0eTphLmFscGhhLG9yaWdpblg6YS5wcm9ncmVzc1BlcmNlbnRhZ2Usb3JpZ2luWTphLnByb2dyZXNzUGVyY2VudGFnZSxvcmlnaW5aOmEucHgsekluZGV4Om9lLGZpbGxPcGFjaXR5OmEuYWxwaGEsc3Ryb2tlT3BhY2l0eTphLmFscGhhLG51bU9jdGF2ZXM6b2V9O2Z1bmN0aW9uIGFlKGUsdCxuLHIsbyxpLGEsbCl7dmFyIHMsYz1lLnN0eWxlLHU9ZS52YXJzLGY9ZS50cmFuc2Zvcm0sZD1lLnRyYW5zZm9ybUtleXMscD1lLnRyYW5zZm9ybU9yaWdpbjtkLmxlbmd0aD0wO3ZhciBoPSExLGc9ITEsdj0hMDtmb3IodmFyIG0gaW4gdCl7dmFyIEM9dFttXTtpZihuZShtKSl1W21dPUM7ZWxzZXt2YXIgeT1pZVttXSx3PXJlKEMseSk7aWYoSyhtKSl7aWYoaD0hMCxmW21dPXcsZC5wdXNoKG0pLCF2KWNvbnRpbnVlO0MhPT0obnVsbCE9PShzPXkuZGVmYXVsdCkmJnZvaWQgMCE9PXM/czowKSYmKHY9ITEpfWVsc2UgaWYoSihtKSlwW21dPXcsZz0hMDtlbHNlIGlmKChudWxsPT1uP3ZvaWQgMDpuLmlzSHlkcmF0ZWQpJiYobnVsbD09cj92b2lkIDA6ci5pc0h5ZHJhdGVkKSYmVVttXSl7dmFyIGI9VVttXS5wcm9jZXNzKEMscixuKSx4PVVbbV0uYXBwbHlUbztpZih4KWZvcih2YXIgXz14Lmxlbmd0aCxPPTA7TzxfO08rKyljW3hbT11dPWI7ZWxzZSBjW21dPWJ9ZWxzZSBjW21dPXd9fXImJm4mJmEmJmw/KGMudHJhbnNmb3JtPWEoci5kZWx0YUZpbmFsLHIudHJlZVNjYWxlLGg/Zjp2b2lkIDApLGkmJihjLnRyYW5zZm9ybT1pKGYsYy50cmFuc2Zvcm0pKSxjLnRyYW5zZm9ybU9yaWdpbj1sKHIpKTooaCYmKGMudHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPWUudHJhbnNmb3JtLGk9ZS50cmFuc2Zvcm1LZXlzLGE9dC5lbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbixsPXZvaWQgMD09PWF8fGEscz10LmFsbG93VHJhbnNmb3JtTm9uZSxjPXZvaWQgMD09PXN8fHMsdT1cIlwiO2kuc29ydChxKTtmb3IodmFyIGY9ITEsZD1pLmxlbmd0aCxwPTA7cDxkO3ArKyl7dmFyIGg9aVtwXTt1Kz0odGVbaF18fGgpK1wiKFwiK29baF0rXCIpIFwiLFwielwiPT09aCYmKGY9ITApfXJldHVybiFmJiZsP3UrPVwidHJhbnNsYXRlWigwKVwiOnU9dS50cmltKCkscj91PXIobyxuP1wiXCI6dSk6YyYmbiYmKHU9XCJub25lXCIpLHV9KGUsbyx2LGkpKSxnJiYoYy50cmFuc2Zvcm1PcmlnaW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vcmlnaW5YLG49dm9pZCAwPT09dD9cIjUwJVwiOnQscj1lLm9yaWdpblksbz12b2lkIDA9PT1yP1wiNTAlXCI6cixpPWUub3JpZ2luWjtyZXR1cm4gbitcIiBcIitvK1wiIFwiKyh2b2lkIDA9PT1pPzA6aSl9KHApKSl9dmFyIGxlPWZ1bmN0aW9uKCl7cmV0dXJue3N0eWxlOnt9LHRyYW5zZm9ybTp7fSx0cmFuc2Zvcm1LZXlzOltdLHRyYW5zZm9ybU9yaWdpbjp7fSx2YXJzOnt9fX07ZnVuY3Rpb24gc2UoZSx0LG4pe2Zvcih2YXIgciBpbiB0KWVlKHRbcl0pfHxRKHIsbil8fChlW3JdPXRbcl0pfWZ1bmN0aW9uIGNlKGUsdCxuKXt2YXIgaT17fSxhPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT17fTtyZXR1cm4gc2UoaSxlLnN0eWxlfHx7fSxlKSxPYmplY3QuYXNzaWduKGksZnVuY3Rpb24oZSx0LG4pe3ZhciBpPWUudHJhbnNmb3JtVGVtcGxhdGU7cmV0dXJuIG8udXNlTWVtbygoZnVuY3Rpb24oKXt2YXIgZT1sZSgpO2FlKGUsdCx2b2lkIDAsdm9pZCAwLHtlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjohbn0saSk7dmFyIG89ZS52YXJzLGE9ZS5zdHlsZTtyZXR1cm4gci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG8pLGEpfSksW3RdKX0oZSx0LG4pKSxlLnRyYW5zZm9ybVZhbHVlcyYmKGk9ZS50cmFuc2Zvcm1WYWx1ZXMoaSkpLGl9KGUsdCxuKTtyZXR1cm4gQm9vbGVhbihlLmRyYWcpJiYoaS5kcmFnZ2FibGU9ITEsYS51c2VyU2VsZWN0PWEuV2Via2l0VXNlclNlbGVjdD1hLldlYmtpdFRvdWNoQ2FsbG91dD1cIm5vbmVcIixhLnRvdWNoQWN0aW9uPSEwPT09ZS5kcmFnP1wibm9uZVwiOlwicGFuLVwiKyhcInhcIj09PWUuZHJhZz9cInlcIjpcInhcIikpLGkuc3R5bGU9YSxpfXZhciB1ZT1uZXcgU2V0KFtcImluaXRpYWxcIixcImFuaW1hdGVcIixcImV4aXRcIixcInN0eWxlXCIsXCJ2YXJpYW50c1wiLFwidHJhbnNpdGlvblwiLFwidHJhbnNmb3JtVGVtcGxhdGVcIixcInRyYW5zZm9ybVZhbHVlc1wiLFwiY3VzdG9tXCIsXCJpbmhlcml0XCIsXCJsYXlvdXRcIixcImxheW91dElkXCIsXCJfbGF5b3V0UmVzZXRUcmFuc2Zvcm1cIixcIm9uTGF5b3V0QW5pbWF0aW9uQ29tcGxldGVcIixcIm9uVmlld3BvcnRCb3hVcGRhdGVcIixcIm9uTGF5b3V0TWVhc3VyZVwiLFwib25CZWZvcmVMYXlvdXRNZWFzdXJlXCIsXCJvbkFuaW1hdGlvblN0YXJ0XCIsXCJvbkFuaW1hdGlvbkNvbXBsZXRlXCIsXCJvblVwZGF0ZVwiLFwib25EcmFnU3RhcnRcIixcIm9uRHJhZ1wiLFwib25EcmFnRW5kXCIsXCJvbk1lYXN1cmVEcmFnQ29uc3RyYWludHNcIixcIm9uRGlyZWN0aW9uTG9ja1wiLFwib25EcmFnVHJhbnNpdGlvbkVuZFwiLFwiZHJhZ1wiLFwiZHJhZ0NvbnRyb2xzXCIsXCJkcmFnTGlzdGVuZXJcIixcImRyYWdDb25zdHJhaW50c1wiLFwiZHJhZ0RpcmVjdGlvbkxvY2tcIixcIl9kcmFnWFwiLFwiX2RyYWdZXCIsXCJkcmFnRWxhc3RpY1wiLFwiZHJhZ01vbWVudHVtXCIsXCJkcmFnUHJvcGFnYXRpb25cIixcImRyYWdUcmFuc2l0aW9uXCIsXCJ3aGlsZURyYWdcIixcIm9uUGFuXCIsXCJvblBhblN0YXJ0XCIsXCJvblBhbkVuZFwiLFwib25QYW5TZXNzaW9uU3RhcnRcIixcIm9uVGFwXCIsXCJvblRhcFN0YXJ0XCIsXCJvblRhcENhbmNlbFwiLFwib25Ib3ZlclN0YXJ0XCIsXCJvbkhvdmVyRW5kXCIsXCJ3aGlsZUZvY3VzXCIsXCJ3aGlsZVRhcFwiLFwid2hpbGVIb3ZlclwiXSk7ZnVuY3Rpb24gZmUoZSl7cmV0dXJuIHVlLmhhcyhlKX12YXIgZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIWZlKGUpfTt0cnl7dmFyIHBlPW4oODU5NCkuWjtkZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKFwib25cIik/IWZlKGUpOnBlKGUpfX1jYXRjaChlKXt9ZnVuY3Rpb24gaGUoZSx0LG4pe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP2U6YS5weC50cmFuc2Zvcm0odCtuKmUpfXZhciBnZT1mdW5jdGlvbihlLHQpe3JldHVybiBhLnB4LnRyYW5zZm9ybShlKnQpfSx2ZT17b2Zmc2V0Olwic3Ryb2tlLWRhc2hvZmZzZXRcIixhcnJheTpcInN0cm9rZS1kYXNoYXJyYXlcIn0sbWU9e29mZnNldDpcInN0cm9rZURhc2hvZmZzZXRcIixhcnJheTpcInN0cm9rZURhc2hhcnJheVwifTtmdW5jdGlvbiBDZShlLHQsbixvLGksYSxsLHMpe3ZhciBjPXQuYXR0clgsdT10LmF0dHJZLGY9dC5vcmlnaW5YLGQ9dC5vcmlnaW5ZLHA9dC5wYXRoTGVuZ3RoLGg9dC5wYXRoU3BhY2luZyxnPXZvaWQgMD09PWg/MTpoLHY9dC5wYXRoT2Zmc2V0LG09dm9pZCAwPT09dj8wOnY7YWUoZSxyLl9fcmVzdCh0LFtcImF0dHJYXCIsXCJhdHRyWVwiLFwib3JpZ2luWFwiLFwib3JpZ2luWVwiLFwicGF0aExlbmd0aFwiLFwicGF0aFNwYWNpbmdcIixcInBhdGhPZmZzZXRcIl0pLG4sbyxpLGEsbCxzKSxlLmF0dHJzPWUuc3R5bGUsZS5zdHlsZT17fTt2YXIgQz1lLmF0dHJzLHk9ZS5zdHlsZSx3PWUuZGltZW5zaW9ucyxiPWUudG90YWxQYXRoTGVuZ3RoO0MudHJhbnNmb3JtJiYodyYmKHkudHJhbnNmb3JtPUMudHJhbnNmb3JtKSxkZWxldGUgQy50cmFuc2Zvcm0pLHcmJih2b2lkIDAhPT1mfHx2b2lkIDAhPT1kfHx5LnRyYW5zZm9ybSkmJih5LnRyYW5zZm9ybU9yaWdpbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGhlKHQsZS54LGUud2lkdGgpK1wiIFwiK2hlKG4sZS55LGUuaGVpZ2h0KX0odyx2b2lkIDAhPT1mP2Y6LjUsdm9pZCAwIT09ZD9kOi41KSksdm9pZCAwIT09YyYmKEMueD1jKSx2b2lkIDAhPT11JiYoQy55PXUpLHZvaWQgMCE9PWImJnZvaWQgMCE9PXAmJmZ1bmN0aW9uKGUsdCxuLHIsbyxpKXt2b2lkIDA9PT1yJiYocj0xKSx2b2lkIDA9PT1vJiYobz0wKSx2b2lkIDA9PT1pJiYoaT0hMCk7dmFyIGE9aT92ZTptZTtlW2Eub2Zmc2V0XT1nZSgtbyx0KTt2YXIgbD1nZShuLHQpLHM9Z2Uocix0KTtlW2EuYXJyYXldPWwrXCIgXCIrc30oQyxiLHAsZyxtLCExKX12YXIgeWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGxlKCkpLHthdHRyczp7fX0pfTtmdW5jdGlvbiB3ZShlLHQpe3ZhciBuPW8udXNlTWVtbygoZnVuY3Rpb24oKXt2YXIgbj15ZSgpO3JldHVybiBDZShuLHQsdm9pZCAwLHZvaWQgMCx7ZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246ITF9LGUudHJhbnNmb3JtVGVtcGxhdGUpLHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxuLmF0dHJzKSx7c3R5bGU6ci5fX2Fzc2lnbih7fSxuLnN0eWxlKX0pfSksW3RdKTtpZihlLnN0eWxlKXt2YXIgaT17fTtzZShpLGUuc3R5bGUsZSksbi5zdHlsZT1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30saSksbi5zdHlsZSl9cmV0dXJuIG59ZnVuY3Rpb24gYmUoZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxmdW5jdGlvbih0LG4saSxhLGwpe3ZhciBzPWEubGF0ZXN0VmFsdWVzLGM9KEYodCk/d2U6Y2UpKG4scyxsKSx1PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj17fTtmb3IodmFyIG8gaW4gZSkoZGUobyl8fCEwPT09biYmZmUobyl8fCF0JiYhZmUobykpJiYocltvXT1lW29dKTtyZXR1cm4gcn0obixcInN0cmluZ1wiPT10eXBlb2YgdCxlKSxmPXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHUpLGMpLHtyZWY6aX0pO3JldHVybiBvLmNyZWF0ZUVsZW1lbnQodCxmKX19dmFyIHhlPS8oW2Etel0pKFtBLVpdKS9nLF9lPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoeGUsXCIkMS0kMlwiKS50b0xvd2VyQ2FzZSgpfTtmdW5jdGlvbiBPZShlLHQpe3ZhciBuPXQuc3R5bGUscj10LnZhcnM7Zm9yKHZhciBvIGluIE9iamVjdC5hc3NpZ24oZS5zdHlsZSxuKSxyKWUuc3R5bGUuc2V0UHJvcGVydHkobyxyW29dKX12YXIgTGU9bmV3IFNldChbXCJiYXNlRnJlcXVlbmN5XCIsXCJkaWZmdXNlQ29uc3RhbnRcIixcImtlcm5lbE1hdHJpeFwiLFwia2VybmVsVW5pdExlbmd0aFwiLFwia2V5U3BsaW5lc1wiLFwia2V5VGltZXNcIixcImxpbWl0aW5nQ29uZUFuZ2xlXCIsXCJtYXJrZXJIZWlnaHRcIixcIm1hcmtlcldpZHRoXCIsXCJudW1PY3RhdmVzXCIsXCJ0YXJnZXRYXCIsXCJ0YXJnZXRZXCIsXCJzdXJmYWNlU2NhbGVcIixcInNwZWN1bGFyQ29uc3RhbnRcIixcInNwZWN1bGFyRXhwb25lbnRcIixcInN0ZERldmlhdGlvblwiLFwidGFibGVWYWx1ZXNcIixcInZpZXdCb3hcIixcImdyYWRpZW50VHJhbnNmb3JtXCJdKTtmdW5jdGlvbiBFZShlLHQpe2Zvcih2YXIgbiBpbiBPZShlLHQpLHQuYXR0cnMpZS5zZXRBdHRyaWJ1dGUoTGUuaGFzKG4pP246X2UobiksdC5hdHRyc1tuXSl9ZnVuY3Rpb24gU2UoZSl7dmFyIHQ9ZS5zdHlsZSxuPXt9O2Zvcih2YXIgciBpbiB0KShlZSh0W3JdKXx8UShyLGUpKSYmKG5bcl09dFtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gamUoZSl7dmFyIHQ9U2UoZSk7Zm9yKHZhciBuIGluIGUpZWUoZVtuXSkmJih0W1wieFwiPT09bnx8XCJ5XCI9PT1uP1wiYXR0clwiK24udG9VcHBlckNhc2UoKTpuXT1lW25dKTtyZXR1cm4gdH1mdW5jdGlvbiBNZShlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5zdGFydH12YXIga2U9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9LFJlPWZ1bmN0aW9uKGUpe3JldHVybiBCb29sZWFuKGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLm1peCYmZS50b1ZhbHVlKX0sUGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGtlKGUpP2VbZS5sZW5ndGgtMV18fDA6ZX07ZnVuY3Rpb24gSWUoZSl7dmFyIHQ9ZWUoZSk/ZS5nZXQoKTplO3JldHVybiBSZSh0KT90LnRvVmFsdWUoKTp0fWZ1bmN0aW9uIEFlKGUsdCxuLHIpe3ZhciBvPWUuc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzLGk9ZS5jcmVhdGVSZW5kZXJTdGF0ZSxhPWUub25Nb3VudCxsPXtsYXRlc3RWYWx1ZXM6SGUodCxuLHIsbykscmVuZGVyU3RhdGU6aSgpfTtyZXR1cm4gYSYmKGwubW91bnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGEodCxlLGwpfSksbH12YXIgVGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9by51c2VDb250ZXh0KHcpLGk9by51c2VDb250ZXh0KHgpO3JldHVybiBuP0FlKGUsdCxyLGkpOl8oKGZ1bmN0aW9uKCl7cmV0dXJuIEFlKGUsdCxyLGkpfSkpfX07ZnVuY3Rpb24gSGUoZSx0LG4sbyl7dmFyIGk9e30sYT0hMT09PShudWxsPT1uP3ZvaWQgMDpuLmluaXRpYWwpLGw9byhlKTtmb3IodmFyIHMgaW4gbClpW3NdPUllKGxbc10pO3ZhciBjPWUuaW5pdGlhbCx1PWUuYW5pbWF0ZSxmPUIoZSksZD1WKGUpO3QmJmQmJiFmJiYhMSE9PWUuaW5oZXJpdCYmKG51bGwhPWN8fChjPXQuaW5pdGlhbCksbnVsbCE9dXx8KHU9dC5hbmltYXRlKSk7dmFyIHA9YXx8ITE9PT1jP3U6YztyZXR1cm4gcCYmXCJib29sZWFuXCIhPXR5cGVvZiBwJiYhTWUocCkmJihBcnJheS5pc0FycmF5KHApP3A6W3BdKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1UKGUsdCk7aWYobil7dmFyIG89bi50cmFuc2l0aW9uRW5kO24udHJhbnNpdGlvbjt2YXIgYT1yLl9fcmVzdChuLFtcInRyYW5zaXRpb25FbmRcIixcInRyYW5zaXRpb25cIl0pO2Zvcih2YXIgbCBpbiBhKWlbbF09YVtsXTtmb3IodmFyIGwgaW4gbylpW2xdPW9bbF19fSkpLGl9dmFyIEJlLFZlPXt1c2VWaXN1YWxTdGF0ZTpUZSh7c2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOmplLGNyZWF0ZVJlbmRlclN0YXRlOnllLG9uTW91bnQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4ucmVuZGVyU3RhdGUsbz1uLmxhdGVzdFZhbHVlczt0cnl7ci5kaW1lbnNpb25zPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZ2V0QkJveD90LmdldEJCb3goKTp0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWNhdGNoKGUpe3IuZGltZW5zaW9ucz17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfX1cInBhdGhcIj09PXQudGFnTmFtZSYmKHIudG90YWxQYXRoTGVuZ3RoPXQuZ2V0VG90YWxMZW5ndGgoKSksQ2UocixvLHZvaWQgMCx2b2lkIDAse2VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiExfSxlLnRyYW5zZm9ybVRlbXBsYXRlKSxFZSh0LHIpfX0pfSxEZT17dXNlVmlzdWFsU3RhdGU6VGUoe3NjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczpTZSxjcmVhdGVSZW5kZXJTdGF0ZTpsZX0pfTtmdW5jdGlvbiBaZShlLHQsbixvKXt2YXIgaT10LmZvcndhcmRNb3Rpb25Qcm9wcyxhPXZvaWQgMCE9PWkmJmksbD1GKGUpP1ZlOkRlO3JldHVybiByLl9fYXNzaWduKHIuX19hc3NpZ24oe30sbCkse3ByZWxvYWRlZEZlYXR1cmVzOm4sdXNlUmVuZGVyOmJlKGEpLGNyZWF0ZVZpc3VhbEVsZW1lbnQ6byxDb21wb25lbnQ6ZX0pfWZ1bmN0aW9uICRlKGUsdCxuLHIpe3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIodCxuLHIpLGZ1bmN0aW9uKCl7cmV0dXJuIGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4scil9fWZ1bmN0aW9uIE5lKGUsdCxuLHIpe28udXNlRWZmZWN0KChmdW5jdGlvbigpe3ZhciBvPWUuY3VycmVudDtpZihuJiZvKXJldHVybiAkZShvLHQsbixyKX0pLFtlLHQsbixyXSl9ZnVuY3Rpb24gRmUoZSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFBvaW50ZXJFdmVudCYmZSBpbnN0YW5jZW9mIFBvaW50ZXJFdmVudD8hKFwibW91c2VcIiE9PWUucG9pbnRlclR5cGUpOmUgaW5zdGFuY2VvZiBNb3VzZUV2ZW50fWZ1bmN0aW9uIFVlKGUpe3JldHVybiEhZS50b3VjaGVzfSFmdW5jdGlvbihlKXtlLkFuaW1hdGU9XCJhbmltYXRlXCIsZS5Ib3Zlcj1cIndoaWxlSG92ZXJcIixlLlRhcD1cIndoaWxlVGFwXCIsZS5EcmFnPVwid2hpbGVEcmFnXCIsZS5Gb2N1cz1cIndoaWxlRm9jdXNcIixlLkV4aXQ9XCJleGl0XCJ9KEJlfHwoQmU9e30pKTt2YXIgV2U9e3BhZ2VYOjAscGFnZVk6MH07ZnVuY3Rpb24gemUoZSx0KXt2b2lkIDA9PT10JiYodD1cInBhZ2VcIik7dmFyIG49ZS50b3VjaGVzWzBdfHxlLmNoYW5nZWRUb3VjaGVzWzBdfHxXZTtyZXR1cm57eDpuW3QrXCJYXCJdLHk6blt0K1wiWVwiXX19ZnVuY3Rpb24gR2UoZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9XCJwYWdlXCIpLHt4OmVbdCtcIlhcIl0seTplW3QrXCJZXCJdfX1mdW5jdGlvbiBxZShlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1cInBhZ2VcIikse3BvaW50OlVlKGUpP3plKGUsdCk6R2UoZSx0KX19dmFyIFllPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBuLHI9ZnVuY3Rpb24odCl7cmV0dXJuIGUodCxxZSh0KSl9O3JldHVybiB0PyhuPXIsZnVuY3Rpb24oZSl7dmFyIHQ9ZSBpbnN0YW5jZW9mIE1vdXNlRXZlbnQ7KCF0fHx0JiYwPT09ZS5idXR0b24pJiZuKGUpfSk6cn0sS2U9ZnVuY3Rpb24oKXtyZXR1cm4gayYmbnVsbD09PXdpbmRvdy5vbnBvaW50ZXJkb3dufSxYZT1mdW5jdGlvbigpe3JldHVybiBrJiZudWxsPT09d2luZG93Lm9udG91Y2hzdGFydH0sSmU9ZnVuY3Rpb24oKXtyZXR1cm4gayYmbnVsbD09PXdpbmRvdy5vbm1vdXNlZG93bn0sUWU9e3BvaW50ZXJkb3duOlwibW91c2Vkb3duXCIscG9pbnRlcm1vdmU6XCJtb3VzZW1vdmVcIixwb2ludGVydXA6XCJtb3VzZXVwXCIscG9pbnRlcmNhbmNlbDpcIm1vdXNlY2FuY2VsXCIscG9pbnRlcm92ZXI6XCJtb3VzZW92ZXJcIixwb2ludGVyb3V0OlwibW91c2VvdXRcIixwb2ludGVyZW50ZXI6XCJtb3VzZWVudGVyXCIscG9pbnRlcmxlYXZlOlwibW91c2VsZWF2ZVwifSxldD17cG9pbnRlcmRvd246XCJ0b3VjaHN0YXJ0XCIscG9pbnRlcm1vdmU6XCJ0b3VjaG1vdmVcIixwb2ludGVydXA6XCJ0b3VjaGVuZFwiLHBvaW50ZXJjYW5jZWw6XCJ0b3VjaGNhbmNlbFwifTtmdW5jdGlvbiB0dChlKXtyZXR1cm4gS2UoKT9lOlhlKCk/ZXRbZV06SmUoKT9RZVtlXTplfWZ1bmN0aW9uIG50KGUsdCxuLHIpe3JldHVybiAkZShlLHR0KHQpLFllKG4sXCJwb2ludGVyZG93blwiPT09dCkscil9ZnVuY3Rpb24gcnQoZSx0LG4scil7cmV0dXJuIE5lKGUsdHQodCksbiYmWWUobixcInBvaW50ZXJkb3duXCI9PT10KSxyKX1mdW5jdGlvbiBvdChlKXt2YXIgdD1udWxsO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBudWxsPT09dCYmKHQ9ZSxmdW5jdGlvbigpe3Q9bnVsbH0pfX12YXIgaXQ9b3QoXCJkcmFnSG9yaXpvbnRhbFwiKSxhdD1vdChcImRyYWdWZXJ0aWNhbFwiKTtmdW5jdGlvbiBsdChlKXt2YXIgdD0hMTtpZihcInlcIj09PWUpdD1hdCgpO2Vsc2UgaWYoXCJ4XCI9PT1lKXQ9aXQoKTtlbHNle3ZhciBuPWl0KCkscj1hdCgpO24mJnI/dD1mdW5jdGlvbigpe24oKSxyKCl9OihuJiZuKCksciYmcigpKX1yZXR1cm4gdH1mdW5jdGlvbiBzdCgpe3ZhciBlPWx0KCEwKTtyZXR1cm4hZXx8KGUoKSwhMSl9ZnVuY3Rpb24gY3QoZSx0LG4pe3JldHVybiBmdW5jdGlvbihyLG8pe3ZhciBpO0ZlKHIpJiYhc3QoKSYmKG51bGw9PW58fG4ocixvKSxudWxsPT09KGk9ZS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PWl8fGkuc2V0QWN0aXZlKEJlLkhvdmVyLHQpKX19dmFyIHV0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuISF0JiYoZT09PXR8fHV0KGUsdC5wYXJlbnRFbGVtZW50KSl9O2Z1bmN0aW9uIGZ0KGUpe3JldHVybiBvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSgpfX0pLFtdKX12YXIgZHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpLG51bGx9fSxwdD17dGFwOmR0KChmdW5jdGlvbihlKXt2YXIgdD1lLm9uVGFwLG49ZS5vblRhcFN0YXJ0LHI9ZS5vblRhcENhbmNlbCxpPWUud2hpbGVUYXAsYT1lLnZpc3VhbEVsZW1lbnQscz10fHxufHxyfHxpLGM9by51c2VSZWYoITEpLHU9by51c2VSZWYobnVsbCk7ZnVuY3Rpb24gZigpe3ZhciBlO251bGw9PT0oZT11LmN1cnJlbnQpfHx2b2lkIDA9PT1lfHxlLmNhbGwodSksdS5jdXJyZW50PW51bGx9ZnVuY3Rpb24gZCgpe3ZhciBlO3JldHVybiBmKCksYy5jdXJyZW50PSExLG51bGw9PT0oZT1hLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZXx8ZS5zZXRBY3RpdmUoQmUuVGFwLCExKSwhc3QoKX1mdW5jdGlvbiBwKGUsbil7ZCgpJiYodXQoYS5nZXRJbnN0YW5jZSgpLGUudGFyZ2V0KT9udWxsPT10fHx0KGUsbik6bnVsbD09cnx8cihlLG4pKX1mdW5jdGlvbiBoKGUsdCl7ZCgpJiYobnVsbD09cnx8cihlLHQpKX1ydChhLFwicG9pbnRlcmRvd25cIixzP2Z1bmN0aW9uKGUsdCl7dmFyIHI7ZigpLGMuY3VycmVudHx8KGMuY3VycmVudD0hMCx1LmN1cnJlbnQ9bC5waXBlKG50KHdpbmRvdyxcInBvaW50ZXJ1cFwiLHApLG50KHdpbmRvdyxcInBvaW50ZXJjYW5jZWxcIixoKSksbnVsbD09bnx8bihlLHQpLG51bGw9PT0ocj1hLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09cnx8ci5zZXRBY3RpdmUoQmUuVGFwLCEwKSl9OnZvaWQgMCksZnQoZil9KSksZm9jdXM6ZHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUud2hpbGVGb2N1cyxuPWUudmlzdWFsRWxlbWVudDtOZShuLFwiZm9jdXNcIix0P2Z1bmN0aW9uKCl7dmFyIGU7bnVsbD09PShlPW4uYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1lfHxlLnNldEFjdGl2ZShCZS5Gb2N1cywhMCl9OnZvaWQgMCksTmUobixcImJsdXJcIix0P2Z1bmN0aW9uKCl7dmFyIGU7bnVsbD09PShlPW4uYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1lfHxlLnNldEFjdGl2ZShCZS5Gb2N1cywhMSl9OnZvaWQgMCl9KSksaG92ZXI6ZHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUub25Ib3ZlclN0YXJ0LG49ZS5vbkhvdmVyRW5kLHI9ZS53aGlsZUhvdmVyLG89ZS52aXN1YWxFbGVtZW50O3J0KG8sXCJwb2ludGVyZW50ZXJcIix0fHxyP2N0KG8sITAsdCk6dm9pZCAwKSxydChvLFwicG9pbnRlcmxlYXZlXCIsbnx8cj9jdChvLCExLG4pOnZvaWQgMCl9KSl9O2Z1bmN0aW9uIGh0KGUsdCl7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuITE7dmFyIG49dC5sZW5ndGg7aWYobiE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wO3I8bjtyKyspaWYodFtyXSE9PWVbcl0pcmV0dXJuITE7cmV0dXJuITB9dmFyIGd0PWZ1bmN0aW9uKGUpe3JldHVybiAxZTMqZX0sdnQ9e2xpbmVhcjpsLmxpbmVhcixlYXNlSW46bC5lYXNlSW4sZWFzZUluT3V0OmwuZWFzZUluT3V0LGVhc2VPdXQ6bC5lYXNlT3V0LGNpcmNJbjpsLmNpcmNJbixjaXJjSW5PdXQ6bC5jaXJjSW5PdXQsY2lyY091dDpsLmNpcmNPdXQsYmFja0luOmwuYmFja0luLGJhY2tJbk91dDpsLmJhY2tJbk91dCxiYWNrT3V0OmwuYmFja091dCxhbnRpY2lwYXRlOmwuYW50aWNpcGF0ZSxib3VuY2VJbjpsLmJvdW5jZUluLGJvdW5jZUluT3V0OmwuYm91bmNlSW5PdXQsYm91bmNlT3V0OmwuYm91bmNlT3V0fSxtdD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtpLmludmFyaWFudCg0PT09ZS5sZW5ndGgsXCJDdWJpYyBiZXppZXIgYXJyYXlzIG11c3QgY29udGFpbiBmb3VyIG51bWVyaWNhbCB2YWx1ZXMuXCIpO3ZhciB0PXIuX19yZWFkKGUsNCksbj10WzBdLG89dFsxXSxhPXRbMl0scz10WzNdO3JldHVybiBsLmN1YmljQmV6aWVyKG4sbyxhLHMpfXJldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlPyhpLmludmFyaWFudCh2b2lkIDAhPT12dFtlXSxcIkludmFsaWQgZWFzaW5nIHR5cGUgJ1wiK2UrXCInXCIpLHZ0W2VdKTplfSxDdD1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmXCJudW1iZXJcIiE9dHlwZW9mIGVbMF19LHl0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIShcInpJbmRleFwiPT09ZXx8XCJudW1iZXJcIiE9dHlwZW9mIHQmJiFBcnJheS5pc0FycmF5KHQpJiYoXCJzdHJpbmdcIiE9dHlwZW9mIHR8fCFhLmNvbXBsZXgudGVzdCh0KXx8dC5zdGFydHNXaXRoKFwidXJsKFwiKSkpfSx3dD1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwic3ByaW5nXCIsc3RpZmZuZXNzOjUwMCxkYW1waW5nOjI1LHJlc3REZWx0YTouNSxyZXN0U3BlZWQ6MTB9fSxidD1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTpcInNwcmluZ1wiLHN0aWZmbmVzczo1NTAsZGFtcGluZzowPT09ZT8yKk1hdGguc3FydCg1NTApOjMwLHJlc3REZWx0YTouMDEscmVzdFNwZWVkOjEwfX0seHQ9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcImtleWZyYW1lc1wiLGVhc2U6XCJsaW5lYXJcIixkdXJhdGlvbjouM319LF90PWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOlwia2V5ZnJhbWVzXCIsZHVyYXRpb246LjgsdmFsdWVzOmV9fSxPdD17eDp3dCx5Ond0LHo6d3Qscm90YXRlOnd0LHJvdGF0ZVg6d3Qscm90YXRlWTp3dCxyb3RhdGVaOnd0LHNjYWxlWDpidCxzY2FsZVk6YnQsc2NhbGU6YnQsb3BhY2l0eTp4dCxiYWNrZ3JvdW5kQ29sb3I6eHQsY29sb3I6eHQsZGVmYXVsdDpidH0sTHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbj1rZSh0KT9fdDpPdFtlXXx8T3QuZGVmYXVsdCxyLl9fYXNzaWduKHt0bzp0fSxuKHQpKX0sRXQ9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGllKSx7Y29sb3I6YS5jb2xvcixiYWNrZ3JvdW5kQ29sb3I6YS5jb2xvcixvdXRsaW5lQ29sb3I6YS5jb2xvcixmaWxsOmEuY29sb3Isc3Ryb2tlOmEuY29sb3IsYm9yZGVyQ29sb3I6YS5jb2xvcixib3JkZXJUb3BDb2xvcjphLmNvbG9yLGJvcmRlclJpZ2h0Q29sb3I6YS5jb2xvcixib3JkZXJCb3R0b21Db2xvcjphLmNvbG9yLGJvcmRlckxlZnRDb2xvcjphLmNvbG9yLGZpbHRlcjphLmZpbHRlcixXZWJraXRGaWx0ZXI6YS5maWx0ZXJ9KSxTdD1mdW5jdGlvbihlKXtyZXR1cm4gRXRbZV19O2Z1bmN0aW9uIGp0KGUsdCl7dmFyIG4scj1TdChlKTtyZXR1cm4gciE9PWEuZmlsdGVyJiYocj1hLmNvbXBsZXgpLG51bGw9PT0obj1yLmdldEFuaW1hdGFibGVOb25lKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jYWxsKHIsdCl9dmFyIE10PSExO2Z1bmN0aW9uIGt0KGUpe3JldHVybiAwPT09ZXx8XCJzdHJpbmdcIj09dHlwZW9mIGUmJjA9PT1wYXJzZUZsb2F0KGUpJiYtMT09PWUuaW5kZXhPZihcIiBcIil9ZnVuY3Rpb24gUnQoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/MDpqdChcIlwiLGUpfWZ1bmN0aW9uIFB0KGUsdCl7cmV0dXJuIGVbdF18fGUuZGVmYXVsdHx8ZX1mdW5jdGlvbiBJdChlLHQsbixvKXtyZXR1cm4gdm9pZCAwPT09byYmKG89e30pLHQuc3RhcnQoKGZ1bmN0aW9uKGEpe3ZhciBzLGMsdT1mdW5jdGlvbihlLHQsbixvLGEpe3ZhciBzLGM9UHQobyxlKSx1PW51bGwhPT0ocz1jLmZyb20pJiZ2b2lkIDAhPT1zP3M6dC5nZXQoKSxmPXl0KGUsbik7XCJub25lXCI9PT11JiZmJiZcInN0cmluZ1wiPT10eXBlb2Ygbj91PWp0KGUsbik6a3QodSkmJlwic3RyaW5nXCI9PXR5cGVvZiBuP3U9UnQobik6IUFycmF5LmlzQXJyYXkobikmJmt0KG4pJiZcInN0cmluZ1wiPT10eXBlb2YgdSYmKG49UnQodSkpO3ZhciBkPXl0KGUsdSk7cmV0dXJuIGkud2FybmluZyhkPT09ZixcIllvdSBhcmUgdHJ5aW5nIHRvIGFuaW1hdGUgXCIrZSsnIGZyb20gXCInK3UrJ1wiIHRvIFwiJytuKydcIi4gJyt1K1wiIGlzIG5vdCBhbiBhbmltYXRhYmxlIHZhbHVlIC0gdG8gZW5hYmxlIHRoaXMgYW5pbWF0aW9uIHNldCBcIit1K1wiIHRvIGEgdmFsdWUgYW5pbWF0YWJsZSB0byBcIituK1wiIHZpYSB0aGUgYHN0eWxlYCBwcm9wZXJ0eS5cIiksZCYmZiYmITEhPT1jLnR5cGU/ZnVuY3Rpb24oKXt2YXIgbz17ZnJvbTp1LHRvOm4sdmVsb2NpdHk6dC5nZXRWZWxvY2l0eSgpLG9uQ29tcGxldGU6YSxvblVwZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5zZXQoZSl9fTtyZXR1cm5cImluZXJ0aWFcIj09PWMudHlwZXx8XCJkZWNheVwiPT09Yy50eXBlP2wuaW5lcnRpYShyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sbyksYykpOmwuYW5pbWF0ZShyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sZnVuY3Rpb24oZSx0LG4pe3ZhciBvO3JldHVybiBBcnJheS5pc0FycmF5KHQudG8pJiYobnVsbCE9PShvPWUuZHVyYXRpb24pJiZ2b2lkIDAhPT1vfHwoZS5kdXJhdGlvbj0uOCkpLGZ1bmN0aW9uKGUpe0FycmF5LmlzQXJyYXkoZS50bykmJm51bGw9PT1lLnRvWzBdJiYoZS50bz1yLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQoZS50bykpLGUudG9bMF09ZS5mcm9tKX0odCksZnVuY3Rpb24oZSl7ZS53aGVuLGUuZGVsYXksZS5kZWxheUNoaWxkcmVuLGUuc3RhZ2dlckNoaWxkcmVuLGUuc3RhZ2dlckRpcmVjdGlvbixlLnJlcGVhdCxlLnJlcGVhdFR5cGUsZS5yZXBlYXREZWxheSxlLmZyb207dmFyIHQ9ci5fX3Jlc3QoZSxbXCJ3aGVuXCIsXCJkZWxheVwiLFwiZGVsYXlDaGlsZHJlblwiLFwic3RhZ2dlckNoaWxkcmVuXCIsXCJzdGFnZ2VyRGlyZWN0aW9uXCIsXCJyZXBlYXRcIixcInJlcGVhdFR5cGVcIixcInJlcGVhdERlbGF5XCIsXCJmcm9tXCJdKTtyZXR1cm4hIU9iamVjdC5rZXlzKHQpLmxlbmd0aH0oZSl8fChlPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxlKSxMdChuLHQudG8pKSksci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHQpLGZ1bmN0aW9uKGUpe3ZhciB0PWUuZWFzZSxuPWUudGltZXMsbz1lLnlveW8sYT1lLmZsaXAsbD1lLmxvb3Ascz1yLl9fcmVzdChlLFtcImVhc2VcIixcInRpbWVzXCIsXCJ5b3lvXCIsXCJmbGlwXCIsXCJsb29wXCJdKSxjPXIuX19hc3NpZ24oe30scyk7cmV0dXJuIG4mJihjLm9mZnNldD1uKSxzLmR1cmF0aW9uJiYoYy5kdXJhdGlvbj1ndChzLmR1cmF0aW9uKSkscy5yZXBlYXREZWxheSYmKGMucmVwZWF0RGVsYXk9Z3Qocy5yZXBlYXREZWxheSkpLHQmJihjLmVhc2U9Q3QodCk/dC5tYXAobXQpOm10KHQpKSxcInR3ZWVuXCI9PT1zLnR5cGUmJihjLnR5cGU9XCJrZXlmcmFtZXNcIiksKG98fGx8fGEpJiYoaS53YXJuaW5nKCFNdCxcInlveW8sIGxvb3AgYW5kIGZsaXAgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgQVBJLiBSZXBsYWNlIHdpdGggcmVwZWF0IGFuZCByZXBlYXRUeXBlIG9wdGlvbnMuXCIpLE10PSEwLG8/Yy5yZXBlYXRUeXBlPVwicmV2ZXJzZVwiOmw/Yy5yZXBlYXRUeXBlPVwibG9vcFwiOmEmJihjLnJlcGVhdFR5cGU9XCJtaXJyb3JcIiksYy5yZXBlYXQ9bHx8b3x8YXx8cy5yZXBlYXQpLFwic3ByaW5nXCIhPT1zLnR5cGUmJihjLnR5cGU9XCJrZXlmcmFtZXNcIiksY30oZSkpfShjLG8sZSkpLHtvblVwZGF0ZTpmdW5jdGlvbihlKXt2YXIgdDtvLm9uVXBkYXRlKGUpLG51bGw9PT0odD1jLm9uVXBkYXRlKXx8dm9pZCAwPT09dHx8dC5jYWxsKGMsZSl9LG9uQ29tcGxldGU6ZnVuY3Rpb24oKXt2YXIgZTtvLm9uQ29tcGxldGUoKSxudWxsPT09KGU9Yy5vbkNvbXBsZXRlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKGMpfX0pKX06ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdC5zZXQobiksYSgpLG51bGw9PT0oZT1udWxsPT1jP3ZvaWQgMDpjLm9uQ29tcGxldGUpfHx2b2lkIDA9PT1lfHxlLmNhbGwoYykse3N0b3A6ZnVuY3Rpb24oKXt9fX19KGUsdCxuLG8sYSksZj1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsIT09KG49KFB0KGUsdCl8fHt9KS5kZWxheSkmJnZvaWQgMCE9PW4/bjowfShvLGUpLGQ9ZnVuY3Rpb24oKXtyZXR1cm4gYz11KCl9O3JldHVybiBmP3M9c2V0VGltZW91dChkLGd0KGYpKTpkKCksZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQocyksbnVsbD09Y3x8Yy5zdG9wKCl9fSkpfWZ1bmN0aW9uIEF0KGUsdCl7LTE9PT1lLmluZGV4T2YodCkmJmUucHVzaCh0KX1mdW5jdGlvbiBUdChlLHQpe3ZhciBuPWUuaW5kZXhPZih0KTtuPi0xJiZlLnNwbGljZShuLDEpfXZhciBIdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnN1YnNjcmlwdGlvbnM9W119cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBBdCh0aGlzLnN1YnNjcmlwdGlvbnMsZSksZnVuY3Rpb24oKXtyZXR1cm4gVHQodC5zdWJzY3JpcHRpb25zLGUpfX0sZS5wcm90b3R5cGUubm90aWZ5PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLnN1YnNjcmlwdGlvbnMubGVuZ3RoO2lmKHIpaWYoMT09PXIpdGhpcy5zdWJzY3JpcHRpb25zWzBdKGUsdCxuKTtlbHNlIGZvcih2YXIgbz0wO288cjtvKyspe3ZhciBpPXRoaXMuc3Vic2NyaXB0aW9uc1tvXTtpJiZpKGUsdCxuKX19LGUucHJvdG90eXBlLmdldFNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aH0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnN1YnNjcmlwdGlvbnMubGVuZ3RoPTB9LGV9KCksQnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0LG49dGhpczt0aGlzLnRpbWVEZWx0YT0wLHRoaXMubGFzdFVwZGF0ZWQ9MCx0aGlzLnVwZGF0ZVN1YnNjcmliZXJzPW5ldyBIdCx0aGlzLnZlbG9jaXR5VXBkYXRlU3Vic2NyaWJlcnM9bmV3IEh0LHRoaXMucmVuZGVyU3Vic2NyaWJlcnM9bmV3IEh0LHRoaXMuY2FuVHJhY2tWZWxvY2l0eT0hMSx0aGlzLnVwZGF0ZUFuZE5vdGlmeT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSEwKSxuLnByZXY9bi5jdXJyZW50LG4uY3VycmVudD1lO3ZhciByPXMuZ2V0RnJhbWVEYXRhKCksbz1yLmRlbHRhLGk9ci50aW1lc3RhbXA7bi5sYXN0VXBkYXRlZCE9PWkmJihuLnRpbWVEZWx0YT1vLG4ubGFzdFVwZGF0ZWQ9aSxkLmRlZmF1bHQucG9zdFJlbmRlcihuLnNjaGVkdWxlVmVsb2NpdHlDaGVjaykpLG4ucHJldiE9PW4uY3VycmVudCYmbi51cGRhdGVTdWJzY3JpYmVycy5ub3RpZnkobi5jdXJyZW50KSxuLnZlbG9jaXR5VXBkYXRlU3Vic2NyaWJlcnMuZ2V0U2l6ZSgpJiZuLnZlbG9jaXR5VXBkYXRlU3Vic2NyaWJlcnMubm90aWZ5KG4uZ2V0VmVsb2NpdHkoKSksdCYmbi5yZW5kZXJTdWJzY3JpYmVycy5ub3RpZnkobi5jdXJyZW50KX0sdGhpcy5zY2hlZHVsZVZlbG9jaXR5Q2hlY2s9ZnVuY3Rpb24oKXtyZXR1cm4gZC5kZWZhdWx0LnBvc3RSZW5kZXIobi52ZWxvY2l0eUNoZWNrKX0sdGhpcy52ZWxvY2l0eUNoZWNrPWZ1bmN0aW9uKGUpe2UudGltZXN0YW1wIT09bi5sYXN0VXBkYXRlZCYmKG4ucHJldj1uLmN1cnJlbnQsbi52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLm5vdGlmeShuLmdldFZlbG9jaXR5KCkpKX0sdGhpcy5oYXNBbmltYXRlZD0hMSx0aGlzLnByZXY9dGhpcy5jdXJyZW50PWUsdGhpcy5jYW5UcmFja1ZlbG9jaXR5PSh0PXRoaXMuY3VycmVudCwhaXNOYU4ocGFyc2VGbG9hdCh0KSkpfXJldHVybiBlLnByb3RvdHlwZS5vbkNoYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51cGRhdGVTdWJzY3JpYmVycy5hZGQoZSl9LGUucHJvdG90eXBlLmNsZWFyTGlzdGVuZXJzPWZ1bmN0aW9uKCl7dGhpcy51cGRhdGVTdWJzY3JpYmVycy5jbGVhcigpfSxlLnByb3RvdHlwZS5vblJlbmRlclJlcXVlc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGUodGhpcy5nZXQoKSksdGhpcy5yZW5kZXJTdWJzY3JpYmVycy5hZGQoZSl9LGUucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbihlKXt0aGlzLnBhc3NpdmVFZmZlY3Q9ZX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITApLHQmJnRoaXMucGFzc2l2ZUVmZmVjdD90aGlzLnBhc3NpdmVFZmZlY3QoZSx0aGlzLnVwZGF0ZUFuZE5vdGlmeSk6dGhpcy51cGRhdGVBbmROb3RpZnkoZSx0KX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sZS5wcm90b3R5cGUuZ2V0UHJldmlvdXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2fSxlLnByb3RvdHlwZS5nZXRWZWxvY2l0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhblRyYWNrVmVsb2NpdHk/bC52ZWxvY2l0eVBlclNlY29uZChwYXJzZUZsb2F0KHRoaXMuY3VycmVudCktcGFyc2VGbG9hdCh0aGlzLnByZXYpLHRoaXMudGltZURlbHRhKTowfSxlLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLnN0b3AoKSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24obil7dC5oYXNBbmltYXRlZD0hMCx0LnN0b3BBbmltYXRpb249ZShuKX0pKS50aGVuKChmdW5jdGlvbigpe3JldHVybiB0LmNsZWFyQW5pbWF0aW9uKCl9KSl9LGUucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXt0aGlzLnN0b3BBbmltYXRpb24mJnRoaXMuc3RvcEFuaW1hdGlvbigpLHRoaXMuY2xlYXJBbmltYXRpb24oKX0sZS5wcm90b3R5cGUuaXNBbmltYXRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuc3RvcEFuaW1hdGlvbn0sZS5wcm90b3R5cGUuY2xlYXJBbmltYXRpb249ZnVuY3Rpb24oKXt0aGlzLnN0b3BBbmltYXRpb249bnVsbH0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMudXBkYXRlU3Vic2NyaWJlcnMuY2xlYXIoKSx0aGlzLnJlbmRlclN1YnNjcmliZXJzLmNsZWFyKCksdGhpcy5zdG9wKCl9LGV9KCk7ZnVuY3Rpb24gVnQoZSl7cmV0dXJuIG5ldyBCdChlKX12YXIgRHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnRlc3QoZSl9fSxadD1bYS5udW1iZXIsYS5weCxhLnBlcmNlbnQsYS5kZWdyZWVzLGEudncsYS52aCx7dGVzdDpmdW5jdGlvbihlKXtyZXR1cm5cImF1dG9cIj09PWV9LHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlfX1dLCR0PWZ1bmN0aW9uKGUpe3JldHVybiBadC5maW5kKER0KGUpKX0sTnQ9ci5fX3NwcmVhZEFycmF5KHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChadCkpLFthLmNvbG9yLGEuY29tcGxleF0pO2Z1bmN0aW9uIEZ0KGUsdCxuKXtlLmhhc1ZhbHVlKHQpP2UuZ2V0VmFsdWUodCkuc2V0KG4pOmUuYWRkVmFsdWUodCxWdChuKSl9ZnVuY3Rpb24gVXQoZSx0KXt2YXIgbj1IKGUsdCksbz1uP2UubWFrZVRhcmdldEFuaW1hdGFibGUobiwhMSk6e30saT1vLnRyYW5zaXRpb25FbmQsYT12b2lkIDA9PT1pP3t9Omk7by50cmFuc2l0aW9uO3ZhciBsPXIuX19yZXN0KG8sW1widHJhbnNpdGlvbkVuZFwiLFwidHJhbnNpdGlvblwiXSk7Zm9yKHZhciBzIGluIGw9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGwpLGEpKUZ0KGUscyxQZShsW3NdKSl9ZnVuY3Rpb24gV3QoZSx0KXtyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQodCkpLnJldmVyc2UoKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcixvPWUuZ2V0VmFyaWFudChuKTtvJiZVdChlLG8pLG51bGw9PT0ocj1lLnZhcmlhbnRDaGlsZHJlbil8fHZvaWQgMD09PXJ8fHIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7V3QoZSx0KX0pKX0pKX1mdW5jdGlvbiB6dChlLHQsbil7dmFyIHIsbyxpLGwscyxjPU9iamVjdC5rZXlzKHQpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIWUuaGFzVmFsdWUodCl9KSksdT1jLmxlbmd0aDtpZih1KWZvcih2YXIgZj0wO2Y8dTtmKyspe3ZhciBkPWNbZl0scD10W2RdLGg9bnVsbDtBcnJheS5pc0FycmF5KHApJiYoaD1wWzBdKSxudWxsPT09aCYmKGg9bnVsbCE9PShvPW51bGwhPT0ocj1uW2RdKSYmdm9pZCAwIT09cj9yOmUucmVhZFZhbHVlKGQpKSYmdm9pZCAwIT09bz9vOnRbZF0pLG51bGwhPWgmJihcInN0cmluZ1wiPT10eXBlb2YgaCYmL15cXC0/XFxkKlxcLj9cXGQrJC8udGVzdChoKT9oPXBhcnNlRmxvYXQoaCk6KHM9aCwhTnQuZmluZChEdChzKSkmJmEuY29tcGxleC50ZXN0KHApJiYoaD1qdChkLHApKSksZS5hZGRWYWx1ZShkLFZ0KGgpKSxudWxsIT09KGk9KGw9bilbZF0pJiZ2b2lkIDAhPT1pfHwobFtkXT1oKSxlLnNldEJhc2VUYXJnZXQoZCxoKSl9fWZ1bmN0aW9uIEd0KGUsdCl7aWYodClyZXR1cm4odFtlXXx8dC5kZWZhdWx0fHx0KS5mcm9tfWZ1bmN0aW9uIHF0KGUsdCxuKXt2YXIgcixvLGk9e307Zm9yKHZhciBhIGluIGUpaVthXT1udWxsIT09KHI9R3QoYSx0KSkmJnZvaWQgMCE9PXI/cjpudWxsPT09KG89bi5nZXRWYWx1ZShhKSl8fHZvaWQgMD09PW8/dm9pZCAwOm8uZ2V0KCk7cmV0dXJuIGl9ZnVuY3Rpb24gWXQoZSx0LG4pe3ZhciByO2lmKHZvaWQgMD09PW4mJihuPXt9KSxlLm5vdGlmeUFuaW1hdGlvblN0YXJ0KCksQXJyYXkuaXNBcnJheSh0KSl7dmFyIG89dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBLdChlLHQsbil9KSk7cj1Qcm9taXNlLmFsbChvKX1lbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXI9S3QoZSx0LG4pO2Vsc2V7dmFyIGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdD9IKGUsdCxuLmN1c3RvbSk6dDtyPVh0KGUsaSxuKX1yZXR1cm4gci50aGVuKChmdW5jdGlvbigpe3JldHVybiBlLm5vdGlmeUFuaW1hdGlvbkNvbXBsZXRlKHQpfSkpfWZ1bmN0aW9uIEt0KGUsdCxuKXt2YXIgbzt2b2lkIDA9PT1uJiYobj17fSk7dmFyIGk9SChlLHQsbi5jdXN0b20pLGE9KGl8fHt9KS50cmFuc2l0aW9uLGw9dm9pZCAwPT09YT9lLmdldERlZmF1bHRUcmFuc2l0aW9uKCl8fHt9OmE7bi50cmFuc2l0aW9uT3ZlcnJpZGUmJihsPW4udHJhbnNpdGlvbk92ZXJyaWRlKTt2YXIgcz1pP2Z1bmN0aW9uKCl7cmV0dXJuIFh0KGUsaSxuKX06ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LGM9KG51bGw9PT0obz1lLnZhcmlhbnRDaGlsZHJlbil8fHZvaWQgMD09PW8/dm9pZCAwOm8uc2l6ZSk/ZnVuY3Rpb24obyl7dm9pZCAwPT09byYmKG89MCk7dmFyIGk9bC5kZWxheUNoaWxkcmVuLGE9dm9pZCAwPT09aT8wOmkscz1sLnN0YWdnZXJDaGlsZHJlbixjPWwuc3RhZ2dlckRpcmVjdGlvbjtyZXR1cm4gZnVuY3Rpb24oZSx0LG4sbyxpLGEpe3ZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PW8mJihvPTApLHZvaWQgMD09PWkmJihpPTEpO3ZhciBsPVtdLHM9KGUudmFyaWFudENoaWxkcmVuLnNpemUtMSkqbyxjPTE9PT1pP2Z1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0wKSxlKm99OmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0wKSxzLWUqb307cmV0dXJuIEFycmF5LmZyb20oZS52YXJpYW50Q2hpbGRyZW4pLnNvcnQoSnQpLmZvckVhY2goKGZ1bmN0aW9uKGUsbyl7bC5wdXNoKEt0KGUsdCxyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sYSkse2RlbGF5Om4rYyhvKX0pKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBlLm5vdGlmeUFuaW1hdGlvbkNvbXBsZXRlKHQpfSkpKX0pKSxQcm9taXNlLmFsbChsKX0oZSx0LGErbyxzLGMsbil9OmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSx1PWwud2hlbjtpZih1KXt2YXIgZj1yLl9fcmVhZChcImJlZm9yZUNoaWxkcmVuXCI9PT11P1tzLGNdOltjLHNdLDIpLGQ9ZlswXSxwPWZbMV07cmV0dXJuIGQoKS50aGVuKHApfXJldHVybiBQcm9taXNlLmFsbChbcygpLGMobi5kZWxheSldKX1mdW5jdGlvbiBYdChlLHQsbil7dmFyIG8saT12b2lkIDA9PT1uP3t9Om4sYT1pLmRlbGF5LGw9dm9pZCAwPT09YT8wOmEscz1pLnRyYW5zaXRpb25PdmVycmlkZSxjPWkudHlwZSx1PWUubWFrZVRhcmdldEFuaW1hdGFibGUodCksZj11LnRyYW5zaXRpb24sZD12b2lkIDA9PT1mP2UuZ2V0RGVmYXVsdFRyYW5zaXRpb24oKTpmLHA9dS50cmFuc2l0aW9uRW5kLGg9ci5fX3Jlc3QodSxbXCJ0cmFuc2l0aW9uXCIsXCJ0cmFuc2l0aW9uRW5kXCJdKTtzJiYoZD1zKTt2YXIgZz1bXSx2PWMmJihudWxsPT09KG89ZS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8uZ2V0U3RhdGUoKVtjXSk7Zm9yKHZhciBtIGluIGgpe3ZhciBDPWUuZ2V0VmFsdWUobSkseT1oW21dO2lmKCEoIUN8fHZvaWQgMD09PXl8fHYmJlF0KHYsbSkpKXt2YXIgdz1JdChtLEMseSxyLl9fYXNzaWduKHtkZWxheTpsfSxkKSk7Zy5wdXNoKHcpfX1yZXR1cm4gUHJvbWlzZS5hbGwoZykudGhlbigoZnVuY3Rpb24oKXtwJiZVdChlLHApfSkpfWZ1bmN0aW9uIEp0KGUsdCl7cmV0dXJuIGUuc29ydE5vZGVQb3NpdGlvbih0KX1mdW5jdGlvbiBRdChlLHQpe3ZhciBuPWUucHJvdGVjdGVkS2V5cyxyPWUubmVlZHNBbmltYXRpbmcsbz1uLmhhc093blByb3BlcnR5KHQpJiYhMCE9PXJbdF07cmV0dXJuIHJbdF09ITEsb312YXIgZW49W0JlLkFuaW1hdGUsQmUuSG92ZXIsQmUuVGFwLEJlLkRyYWcsQmUuRm9jdXMsQmUuRXhpdF0sdG49ci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKGVuKSkucmV2ZXJzZSgpLG5uPWVuLmxlbmd0aDtmdW5jdGlvbiBybihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLHtpc0FjdGl2ZTplLHByb3RlY3RlZEtleXM6e30sbmVlZHNBbmltYXRpbmc6e30scHJldlJlc29sdmVkVmFsdWVzOnt9fX12YXIgb249e2FuaW1hdGlvbjpkdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS52aXN1YWxFbGVtZW50LG49ZS5hbmltYXRlO3QuYW5pbWF0aW9uU3RhdGV8fCh0LmFuaW1hdGlvblN0YXRlPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLmFsbCh0Lm1hcCgoZnVuY3Rpb24odCl7dmFyIG49dC5hbmltYXRpb24scj10Lm9wdGlvbnM7cmV0dXJuIFl0KGUsbixyKX0pKSl9fShlKSxvPSgodD17fSlbQmUuQW5pbWF0ZV09cm4oITApLHRbQmUuSG92ZXJdPXJuKCksdFtCZS5UYXBdPXJuKCksdFtCZS5EcmFnXT1ybigpLHRbQmUuRm9jdXNdPXJuKCksdFtCZS5FeGl0XT1ybigpLHQpLGk9e30sYT0hMCxsPWZ1bmN0aW9uKHQsbil7dmFyIG89SChlLG4pO2lmKG8pe28udHJhbnNpdGlvbjt2YXIgaT1vLnRyYW5zaXRpb25FbmQsYT1yLl9fcmVzdChvLFtcInRyYW5zaXRpb25cIixcInRyYW5zaXRpb25FbmRcIl0pO3Q9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdCksYSksaSl9cmV0dXJuIHR9O2Z1bmN0aW9uIHModCxzKXtmb3IodmFyIGMsdT1lLmdldFByb3BzKCksZj1lLmdldFZhcmlhbnRDb250ZXh0KCEwKXx8e30sZD1bXSxwPW5ldyBTZXQsaD17fSxnPTEvMCx2PWZ1bmN0aW9uKG4pe3ZhciBpPXRuW25dLHY9b1tpXSxtPW51bGwhPT0oYz11W2ldKSYmdm9pZCAwIT09Yz9jOmZbaV0sQz1BKG0pLHk9aT09PXM/di5pc0FjdGl2ZTpudWxsOyExPT09eSYmKGc9bik7dmFyIHc9bT09PWZbaV0mJm0hPT11W2ldJiZDO2lmKHcmJmEmJmUubWFudWFsbHlBbmltYXRlT25Nb3VudCYmKHc9ITEpLHYucHJvdGVjdGVkS2V5cz1yLl9fYXNzaWduKHt9LGgpLCF2LmlzQWN0aXZlJiZudWxsPT09eXx8IW0mJiF2LnByZXZQcm9wfHxNZShtKXx8XCJib29sZWFuXCI9PXR5cGVvZiBtKXJldHVyblwiY29udGludWVcIjt2YXIgYj1mdW5jdGlvbihlLHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0P3QhPT1lOiEhSSh0KSYmIWh0KHQsZSl9KHYucHJldlByb3AsbSl8fGk9PT1zJiZ2LmlzQWN0aXZlJiYhdyYmQ3x8bj5nJiZDLHg9QXJyYXkuaXNBcnJheShtKT9tOlttXSxfPXgucmVkdWNlKGwse30pOyExPT09eSYmKF89e30pO3ZhciBPPXYucHJldlJlc29sdmVkVmFsdWVzLEw9dm9pZCAwPT09Tz97fTpPLEU9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LEwpLF8pLFM9ZnVuY3Rpb24oZSl7Yj0hMCxwLmRlbGV0ZShlKSx2Lm5lZWRzQW5pbWF0aW5nW2VdPSEwfTtmb3IodmFyIGogaW4gRSl7dmFyIE09X1tqXSxrPUxbal07aC5oYXNPd25Qcm9wZXJ0eShqKXx8KE0hPT1rP2tlKE0pJiZrZShrKT9odChNLGspP3YucHJvdGVjdGVkS2V5c1tqXT0hMDpTKGopOnZvaWQgMCE9PU0/UyhqKTpwLmFkZChqKTp2b2lkIDAhPT1NJiZwLmhhcyhqKT9TKGopOnYucHJvdGVjdGVkS2V5c1tqXT0hMCl9di5wcmV2UHJvcD1tLHYucHJldlJlc29sdmVkVmFsdWVzPV8sdi5pc0FjdGl2ZSYmKGg9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGgpLF8pKSxhJiZlLmJsb2NrSW5pdGlhbEFuaW1hdGlvbiYmKGI9ITEpLGImJiF3JiZkLnB1c2guYXBwbHkoZCxyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQoeC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybnthbmltYXRpb246ZSxvcHRpb25zOnIuX19hc3NpZ24oe3R5cGU6aX0sdCl9fSkpKSkpfSxtPTA7bTxubjttKyspdihtKTtpZihpPXIuX19hc3NpZ24oe30saCkscC5zaXplKXt2YXIgQz17fTtwLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUuZ2V0QmFzZVRhcmdldCh0KTt2b2lkIDAhPT1uJiYoQ1t0XT1uKX0pKSxkLnB1c2goe2FuaW1hdGlvbjpDfSl9dmFyIHk9Qm9vbGVhbihkLmxlbmd0aCk7cmV0dXJuIGEmJiExPT09dS5pbml0aWFsJiYhZS5tYW51YWxseUFuaW1hdGVPbk1vdW50JiYoeT0hMSksYT0hMSx5P24oZCk6UHJvbWlzZS5yZXNvbHZlKCl9cmV0dXJue2lzQW5pbWF0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWlbZV19LGFuaW1hdGVDaGFuZ2VzOnMsc2V0QWN0aXZlOmZ1bmN0aW9uKHQsbixyKXt2YXIgaTtyZXR1cm4gb1t0XS5pc0FjdGl2ZT09PW4/UHJvbWlzZS5yZXNvbHZlKCk6KG51bGw9PT0oaT1lLnZhcmlhbnRDaGlsZHJlbil8fHZvaWQgMD09PWl8fGkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI7cmV0dXJuIG51bGw9PT0ocj1lLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zZXRBY3RpdmUodCxuKX0pKSxvW3RdLmlzQWN0aXZlPW4scyhyLHQpKX0sc2V0QW5pbWF0ZUZ1bmN0aW9uOmZ1bmN0aW9uKHQpe249dChlKX0sZ2V0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gb319fSh0KSksTWUobikmJm8udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiBuLnN1YnNjcmliZSh0KX0pLFtuXSl9KSksZXhpdDpkdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jdXN0b20sbj1lLnZpc3VhbEVsZW1lbnQsaT1yLl9fcmVhZChPKCksMiksYT1pWzBdLGw9aVsxXSxzPW8udXNlQ29udGV4dCh4KTtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXt2YXIgZSxyLG89bnVsbD09PShlPW4uYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnNldEFjdGl2ZShCZS5FeGl0LCFhLHtjdXN0b206bnVsbCE9PShyPW51bGw9PXM/dm9pZCAwOnMuY3VzdG9tKSYmdm9pZCAwIT09cj9yOnR9KTshYSYmKG51bGw9PW98fG8udGhlbihsKSl9KSxbYV0pfSkpfSxhbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3ZhciBvPXRoaXMsaT0odm9pZCAwPT09bj97fTpuKS50cmFuc2Zvcm1QYWdlUG9pbnQ7aWYodGhpcy5zdGFydEV2ZW50PW51bGwsdGhpcy5sYXN0TW92ZUV2ZW50PW51bGwsdGhpcy5sYXN0TW92ZUV2ZW50SW5mbz1udWxsLHRoaXMuaGFuZGxlcnM9e30sdGhpcy51cGRhdGVQb2ludD1mdW5jdGlvbigpe2lmKG8ubGFzdE1vdmVFdmVudCYmby5sYXN0TW92ZUV2ZW50SW5mbyl7dmFyIGU9Y24oby5sYXN0TW92ZUV2ZW50SW5mbyxvLmhpc3RvcnkpLHQ9bnVsbCE9PW8uc3RhcnRFdmVudCxuPWwuZGlzdGFuY2UoZS5vZmZzZXQse3g6MCx5OjB9KT49MztpZih0fHxuKXt2YXIgaT1lLnBvaW50LGE9cy5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXA7by5oaXN0b3J5LnB1c2goci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGkpLHt0aW1lc3RhbXA6YX0pKTt2YXIgYz1vLmhhbmRsZXJzLHU9Yy5vblN0YXJ0LGY9Yy5vbk1vdmU7dHx8KHUmJnUoby5sYXN0TW92ZUV2ZW50LGUpLG8uc3RhcnRFdmVudD1vLmxhc3RNb3ZlRXZlbnQpLGYmJmYoby5sYXN0TW92ZUV2ZW50LGUpfX19LHRoaXMuaGFuZGxlUG9pbnRlck1vdmU9ZnVuY3Rpb24oZSx0KXtvLmxhc3RNb3ZlRXZlbnQ9ZSxvLmxhc3RNb3ZlRXZlbnRJbmZvPWxuKHQsby50cmFuc2Zvcm1QYWdlUG9pbnQpLEZlKGUpJiYwPT09ZS5idXR0b25zP28uaGFuZGxlUG9pbnRlclVwKGUsdCk6ZC5kZWZhdWx0LnVwZGF0ZShvLnVwZGF0ZVBvaW50LCEwKX0sdGhpcy5oYW5kbGVQb2ludGVyVXA9ZnVuY3Rpb24oZSx0KXtvLmVuZCgpO3ZhciBuPW8uaGFuZGxlcnMscj1uLm9uRW5kLGk9bi5vblNlc3Npb25FbmQsYT1jbihsbih0LG8udHJhbnNmb3JtUGFnZVBvaW50KSxvLmhpc3RvcnkpO28uc3RhcnRFdmVudCYmciYmcihlLGEpLGkmJmkoZSxhKX0sIShVZShlKSYmZS50b3VjaGVzLmxlbmd0aD4xKSl7dGhpcy5oYW5kbGVycz10LHRoaXMudHJhbnNmb3JtUGFnZVBvaW50PWk7dmFyIGE9bG4ocWUoZSksdGhpcy50cmFuc2Zvcm1QYWdlUG9pbnQpLGM9YS5wb2ludCx1PXMuZ2V0RnJhbWVEYXRhKCkudGltZXN0YW1wO3RoaXMuaGlzdG9yeT1bci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGMpLHt0aW1lc3RhbXA6dX0pXTt2YXIgZj10Lm9uU2Vzc2lvblN0YXJ0O2YmJmYoZSxjbihhLHRoaXMuaGlzdG9yeSkpLHRoaXMucmVtb3ZlTGlzdGVuZXJzPWwucGlwZShudCh3aW5kb3csXCJwb2ludGVybW92ZVwiLHRoaXMuaGFuZGxlUG9pbnRlck1vdmUpLG50KHdpbmRvdyxcInBvaW50ZXJ1cFwiLHRoaXMuaGFuZGxlUG9pbnRlclVwKSxudCh3aW5kb3csXCJwb2ludGVyY2FuY2VsXCIsdGhpcy5oYW5kbGVQb2ludGVyVXApKX19cmV0dXJuIGUucHJvdG90eXBlLnVwZGF0ZUhhbmRsZXJzPWZ1bmN0aW9uKGUpe3RoaXMuaGFuZGxlcnM9ZX0sZS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVMaXN0ZW5lcnMmJnRoaXMucmVtb3ZlTGlzdGVuZXJzKCkscy5jYW5jZWxTeW5jLnVwZGF0ZSh0aGlzLnVwZGF0ZVBvaW50KX0sZX0oKTtmdW5jdGlvbiBsbihlLHQpe3JldHVybiB0P3twb2ludDp0KGUucG9pbnQpfTplfWZ1bmN0aW9uIHNuKGUsdCl7cmV0dXJue3g6ZS54LXQueCx5OmUueS10Lnl9fWZ1bmN0aW9uIGNuKGUsdCl7dmFyIG49ZS5wb2ludDtyZXR1cm57cG9pbnQ6bixkZWx0YTpzbihuLGZuKHQpKSxvZmZzZXQ6c24obix1bih0KSksdmVsb2NpdHk6ZG4odCwuMSl9fWZ1bmN0aW9uIHVuKGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIGZuKGUpe3JldHVybiBlW2UubGVuZ3RoLTFdfWZ1bmN0aW9uIGRuKGUsdCl7aWYoZS5sZW5ndGg8MilyZXR1cm57eDowLHk6MH07Zm9yKHZhciBuPWUubGVuZ3RoLTEscj1udWxsLG89Zm4oZSk7bj49MCYmKHI9ZVtuXSwhKG8udGltZXN0YW1wLXIudGltZXN0YW1wPmd0KHQpKSk7KW4tLTtpZighcilyZXR1cm57eDowLHk6MH07dmFyIGk9KG8udGltZXN0YW1wLXIudGltZXN0YW1wKS8xZTM7aWYoMD09PWkpcmV0dXJue3g6MCx5OjB9O3ZhciBhPXt4OihvLngtci54KS9pLHk6KG8ueS1yLnkpL2l9O3JldHVybiBhLng9PT0xLzAmJihhLng9MCksYS55PT09MS8wJiYoYS55PTApLGF9ZnVuY3Rpb24gcG4oZSl7cmV0dXJuIGV9ZnVuY3Rpb24gaG4oZSl7dmFyIHQ9ZS50b3A7cmV0dXJue3g6e21pbjplLmxlZnQsbWF4OmUucmlnaHR9LHk6e21pbjp0LG1heDplLmJvdHRvbX19fXZhciBnbj17dHJhbnNsYXRlOjAsc2NhbGU6MSxvcmlnaW46MCxvcmlnaW5Qb2ludDowfTtmdW5jdGlvbiB2bigpe3JldHVybnt4OnIuX19hc3NpZ24oe30sZ24pLHk6ci5fX2Fzc2lnbih7fSxnbil9fWZ1bmN0aW9uIG1uKGUpe3JldHVybltlKFwieFwiKSxlKFwieVwiKV19ZnVuY3Rpb24gQ24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj0uMDEpLGwuZGlzdGFuY2UoZSx0KTxufWZ1bmN0aW9uIHluKGUpe3JldHVybiBlLm1heC1lLm1pbn1mdW5jdGlvbiB3bihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj0uNSksZS5vcmlnaW49cixlLm9yaWdpblBvaW50PWwubWl4KHQubWluLHQubWF4LGUub3JpZ2luKSxlLnNjYWxlPXluKG4pL3luKHQpLENuKGUuc2NhbGUsMSwxZS00KSYmKGUuc2NhbGU9MSksZS50cmFuc2xhdGU9bC5taXgobi5taW4sbi5tYXgsZS5vcmlnaW4pLWUub3JpZ2luUG9pbnQsQ24oZS50cmFuc2xhdGUpJiYoZS50cmFuc2xhdGU9MCl9ZnVuY3Rpb24gYm4oZSx0LG4scil7d24oZS54LHQueCxuLngseG4oci5vcmlnaW5YKSksd24oZS55LHQueSxuLnkseG4oci5vcmlnaW5ZKSl9ZnVuY3Rpb24geG4oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/ZTouNX1mdW5jdGlvbiBfbihlLHQsbil7ZS5taW49bi5taW4rdC5taW4sZS5tYXg9ZS5taW4reW4odCl9ZnVuY3Rpb24gT24oZSx0LG4pe3ZhciByPXQubWluLG89dC5tYXg7cmV0dXJuIHZvaWQgMCE9PXImJmU8cj9lPW4/bC5taXgocixlLG4ubWluKTpNYXRoLm1heChlLHIpOnZvaWQgMCE9PW8mJmU+byYmKGU9bj9sLm1peChvLGUsbi5tYXgpOk1hdGgubWluKGUsbykpLGV9ZnVuY3Rpb24gTG4oZSx0LG4pe3JldHVybnttaW46dm9pZCAwIT09dD9lLm1pbit0OnZvaWQgMCxtYXg6dm9pZCAwIT09bj9lLm1heCtuLShlLm1heC1lLm1pbik6dm9pZCAwfX1mdW5jdGlvbiBFbihlLHQpe3ZhciBuLG89dC5taW4tZS5taW4saT10Lm1heC1lLm1heDtyZXR1cm4gdC5tYXgtdC5taW48ZS5tYXgtZS5taW4mJihvPShuPXIuX19yZWFkKFtpLG9dLDIpKVswXSxpPW5bMV0pLHttaW46ZS5taW4rbyxtYXg6ZS5taW4raX19ZnVuY3Rpb24gU24oZSx0LG4pe3JldHVybnttaW46am4oZSx0KSxtYXg6am4oZSxuKX19ZnVuY3Rpb24gam4oZSx0KXt2YXIgbjtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZT9lOm51bGwhPT0obj1lW3RdKSYmdm9pZCAwIT09bj9uOjB9ZnVuY3Rpb24gTW4oZSx0KXtyZXR1cm4gaG4oZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnRvcCxyPWUubGVmdCxvPWUuYm90dG9tLGk9ZS5yaWdodDt2b2lkIDA9PT10JiYodD1wbik7dmFyIGE9dCh7eDpyLHk6bn0pLGw9dCh7eDppLHk6b30pO3JldHVybnt0b3A6YS55LGxlZnQ6YS54LGJvdHRvbTpsLnkscmlnaHQ6bC54fX0oZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0KSl9dmFyIGtuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGVwdGgtdC5kZXB0aH07ZnVuY3Rpb24gUm4oZSl7cmV0dXJuIGUucHJvamVjdGlvbi5pc0VuYWJsZWR8fGUuc2hvdWxkUmVzZXRUcmFuc2Zvcm0oKX1mdW5jdGlvbiBQbihlLHQpe3ZvaWQgMD09PXQmJih0PVtdKTt2YXIgbj1lLnBhcmVudDtyZXR1cm4gbiYmUG4obix0KSxSbihlKSYmdC5wdXNoKGUpLHR9ZnVuY3Rpb24gSW4oZSl7aWYoIWUuc2hvdWxkUmVzZXRUcmFuc2Zvcm0oKSl7dmFyIHQsbj1lLmdldExheW91dFN0YXRlKCk7ZS5ub3RpZnlCZWZvcmVMYXlvdXRNZWFzdXJlKG4ubGF5b3V0KSxuLmlzSHlkcmF0ZWQ9ITAsbi5sYXlvdXQ9ZS5tZWFzdXJlVmlld3BvcnRCb3goKSxuLmxheW91dENvcnJlY3RlZD0odD1uLmxheW91dCx7eDpyLl9fYXNzaWduKHt9LHQueCkseTpyLl9fYXNzaWduKHt9LHQueSl9KSxlLm5vdGlmeUxheW91dE1lYXN1cmUobi5sYXlvdXQsZS5wcmV2Vmlld3BvcnRCb3h8fG4ubGF5b3V0KSxkLmRlZmF1bHQudXBkYXRlKChmdW5jdGlvbigpe3JldHVybiBlLnJlYmFzZVByb2plY3Rpb25UYXJnZXQoKX0pKX19ZnVuY3Rpb24gQW4oZSl7ZS5zaG91bGRSZXNldFRyYW5zZm9ybSgpfHwoZS5wcmV2Vmlld3BvcnRCb3g9ZS5tZWFzdXJlVmlld3BvcnRCb3goITEpLGUucmViYXNlUHJvamVjdGlvblRhcmdldCghMSxlLnByZXZWaWV3cG9ydEJveCkpfWZ1bmN0aW9uIFRuKGUsdCl7cmV0dXJue21pbjp0Lm1pbi1lLm1pbixtYXg6dC5tYXgtZS5taW59fWZ1bmN0aW9uIEhuKGUsdCl7cmV0dXJue3g6VG4oZS54LHQueCkseTpUbihlLnksdC55KX19ZnVuY3Rpb24gQm4oZSl7dmFyIHQ9ZS5nZXRQcm9wcygpLG49dC5kcmFnLHI9dC5fZHJhZ1g7cmV0dXJuIG4mJiFyfWZ1bmN0aW9uIFZuKGUsdCl7ZS5taW49dC5taW4sZS5tYXg9dC5tYXh9ZnVuY3Rpb24gRG4oZSx0LG4pe3JldHVybiBuK3QqKGUtbil9ZnVuY3Rpb24gWm4oZSx0LG4scixvKXtyZXR1cm4gdm9pZCAwIT09byYmKGU9RG4oZSxvLHIpKSxEbihlLG4scikrdH1mdW5jdGlvbiAkbihlLHQsbixyLG8pe3ZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PW4mJihuPTEpLGUubWluPVpuKGUubWluLHQsbixyLG8pLGUubWF4PVpuKGUubWF4LHQsbixyLG8pfWZ1bmN0aW9uIE5uKGUsdCl7dmFyIG49dC54LHI9dC55OyRuKGUueCxuLnRyYW5zbGF0ZSxuLnNjYWxlLG4ub3JpZ2luUG9pbnQpLCRuKGUueSxyLnRyYW5zbGF0ZSxyLnNjYWxlLHIub3JpZ2luUG9pbnQpfWZ1bmN0aW9uIEZuKGUsdCxuLG8pe3ZhciBpPXIuX19yZWFkKG8sMyksYT1pWzBdLHM9aVsxXSxjPWlbMl07ZS5taW49dC5taW4sZS5tYXg9dC5tYXg7dmFyIHU9dm9pZCAwIT09bltjXT9uW2NdOi41LGY9bC5taXgodC5taW4sdC5tYXgsdSk7JG4oZSxuW2FdLG5bc10sZixuLnNjYWxlKX12YXIgVW49W1wieFwiLFwic2NhbGVYXCIsXCJvcmlnaW5YXCJdLFduPVtcInlcIixcInNjYWxlWVwiLFwib3JpZ2luWVwiXTtmdW5jdGlvbiB6bihlLHQsbil7Rm4oZS54LHQueCxuLFVuKSxGbihlLnksdC55LG4sV24pfWZ1bmN0aW9uIEduKGUsdCxuLHIsbyl7cmV0dXJuIGU9RG4oZS09dCwxL24sciksdm9pZCAwIT09byYmKGU9RG4oZSwxL28scikpLGV9ZnVuY3Rpb24gcW4oZSx0LG4pe3ZhciBvPXIuX19yZWFkKG4sMyksaT1vWzBdLGE9b1sxXSxzPW9bMl07IWZ1bmN0aW9uKGUsdCxuLHIsbyl7dm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09biYmKG49MSksdm9pZCAwPT09ciYmKHI9LjUpO3ZhciBpPWwubWl4KGUubWluLGUubWF4LHIpLXQ7ZS5taW49R24oZS5taW4sdCxuLGksbyksZS5tYXg9R24oZS5tYXgsdCxuLGksbyl9KGUsdFtpXSx0W2FdLHRbc10sdC5zY2FsZSl9ZnVuY3Rpb24gWW4oZSx0KXtxbihlLngsdCxVbikscW4oZS55LHQsV24pfXZhciBLbj1uZXcgU2V0O2Z1bmN0aW9uIFhuKGUsdCxuKXtlW25dfHwoZVtuXT1bXSksZVtuXS5wdXNoKHQpfWZ1bmN0aW9uIEpuKGUpe3JldHVybiBLbi5hZGQoZSksZnVuY3Rpb24oKXtyZXR1cm4gS24uZGVsZXRlKGUpfX1mdW5jdGlvbiBRbigpe2lmKEtuLnNpemUpe3ZhciBlPTAsdD1bW11dLG49W10scj1mdW5jdGlvbihuKXtyZXR1cm4gWG4odCxuLGUpfSxvPWZ1bmN0aW9uKHQpe1huKG4sdCxlKSxlKyt9O0tuLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QocixvKSxlPTB9KSksS24uY2xlYXIoKTtmb3IodmFyIGk9bi5sZW5ndGgsYT0wO2E8PWk7YSsrKXRbYV0mJnRbYV0uZm9yRWFjaCh0ciksblthXSYmblthXS5mb3JFYWNoKHRyKX19dmFyIGVyLHRyPWZ1bmN0aW9uKGUpe3JldHVybiBlKCl9LG5yPW5ldyBXZWFrTWFwLHJyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD1lLnZpc3VhbEVsZW1lbnQ7dGhpcy5pc0RyYWdnaW5nPSExLHRoaXMuY3VycmVudERpcmVjdGlvbj1udWxsLHRoaXMuY29uc3RyYWludHM9ITEsdGhpcy5lbGFzdGljPXt4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSx0aGlzLnByb3BzPXt9LHRoaXMuaGFzTXV0YXRlZENvbnN0cmFpbnRzPSExLHRoaXMuY3Vyc29yUHJvZ3Jlc3M9e3g6LjUseTouNX0sdGhpcy5vcmlnaW5Qb2ludD17fSx0aGlzLm9wZW5HbG9iYWxMb2NrPW51bGwsdGhpcy5wYW5TZXNzaW9uPW51bGwsdGhpcy52aXN1YWxFbGVtZW50PXQsdGhpcy52aXN1YWxFbGVtZW50LmVuYWJsZUxheW91dFByb2plY3Rpb24oKSxuci5zZXQodCx0aGlzKX1yZXR1cm4gZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLG89dm9pZCAwPT09dD97fTp0LGk9by5zbmFwVG9DdXJzb3IsYT12b2lkIDAhPT1pJiZpLGM9by5jdXJzb3JQcm9ncmVzcyx1PXRoaXMucHJvcHMudHJhbnNmb3JtUGFnZVBvaW50O3RoaXMucGFuU2Vzc2lvbj1uZXcgYW4oZSx7b25TZXNzaW9uU3RhcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ7bi5zdG9wTW90aW9uKCk7dmFyIG89ZnVuY3Rpb24oZSl7cmV0dXJuIHFlKGUsXCJjbGllbnRcIil9KGUpLnBvaW50O251bGw9PT0odD1uLmNhbmNlbExheW91dCl8fHZvaWQgMD09PXR8fHQuY2FsbChuKSxuLmNhbmNlbExheW91dD1KbigoZnVuY3Rpb24oZSx0KXt2YXIgaT1QbihuLnZpc3VhbEVsZW1lbnQpLHU9ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1mdW5jdGlvbihlKXtSbihlKSYmdC5wdXNoKGUpLGUuY2hpbGRyZW4uZm9yRWFjaChuKX07cmV0dXJuIGUuY2hpbGRyZW4uZm9yRWFjaChuKSx0LnNvcnQoa24pfShuLnZpc3VhbEVsZW1lbnQpLGY9ci5fX3NwcmVhZEFycmF5KHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChpKSksci5fX3JlYWQodSkpLGQ9ITE7bi5pc0xheW91dERyYWcoKSYmbi52aXN1YWxFbGVtZW50LmxvY2tQcm9qZWN0aW9uVGFyZ2V0KCksdCgoZnVuY3Rpb24oKXtmLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc2V0VHJhbnNmb3JtKCl9KSl9KSksZSgoZnVuY3Rpb24oKXtJbihuLnZpc3VhbEVsZW1lbnQpLHUuZm9yRWFjaChJbil9KSksdCgoZnVuY3Rpb24oKXtmLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc3RvcmVUcmFuc2Zvcm0oKX0pKSxhJiYoZD1uLnNuYXBUb0N1cnNvcihvKSl9KSksZSgoZnVuY3Rpb24oKXtCb29sZWFuKG4uZ2V0QXhpc01vdGlvblZhbHVlKFwieFwiKSYmIW4uaXNFeHRlcm5hbERyYWcoKSl8fG4udmlzdWFsRWxlbWVudC5yZWJhc2VQcm9qZWN0aW9uVGFyZ2V0KCEwLG4udmlzdWFsRWxlbWVudC5tZWFzdXJlVmlld3BvcnRCb3goITEpKSxuLnZpc3VhbEVsZW1lbnQuc2NoZWR1bGVVcGRhdGVMYXlvdXRQcm9qZWN0aW9uKCk7dmFyIGU9bi52aXN1YWxFbGVtZW50LnByb2plY3Rpb247bW4oKGZ1bmN0aW9uKHQpe2lmKCFkKXt2YXIgcj1lLnRhcmdldFt0XSxpPXIubWluLGE9ci5tYXg7bi5jdXJzb3JQcm9ncmVzc1t0XT1jP2NbdF06bC5wcm9ncmVzcyhpLGEsb1t0XSl9dmFyIHM9bi5nZXRBeGlzTW90aW9uVmFsdWUodCk7cyYmKG4ub3JpZ2luUG9pbnRbdF09cy5nZXQoKSl9KSl9KSksdCgoZnVuY3Rpb24oKXtzLmZsdXNoU3luYy51cGRhdGUoKSxzLmZsdXNoU3luYy5wcmVSZW5kZXIoKSxzLmZsdXNoU3luYy5yZW5kZXIoKSxzLmZsdXNoU3luYy5wb3N0UmVuZGVyKCl9KSksZSgoZnVuY3Rpb24oKXtyZXR1cm4gbi5yZXNvbHZlRHJhZ0NvbnN0cmFpbnRzKCl9KSl9KSl9LG9uU3RhcnQ6ZnVuY3Rpb24oZSx0KXt2YXIgcixvLGksYT1uLnByb3BzLGw9YS5kcmFnLHM9YS5kcmFnUHJvcGFnYXRpb247KCFsfHxzfHwobi5vcGVuR2xvYmFsTG9jayYmbi5vcGVuR2xvYmFsTG9jaygpLG4ub3Blbkdsb2JhbExvY2s9bHQobCksbi5vcGVuR2xvYmFsTG9jaykpJiYoUW4oKSxuLmlzRHJhZ2dpbmc9ITAsbi5jdXJyZW50RGlyZWN0aW9uPW51bGwsbnVsbD09PShvPShyPW4ucHJvcHMpLm9uRHJhZ1N0YXJ0KXx8dm9pZCAwPT09b3x8by5jYWxsKHIsZSx0KSxudWxsPT09KGk9bi52aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09aXx8aS5zZXRBY3RpdmUoQmUuRHJhZywhMCkpfSxvbk1vdmU6ZnVuY3Rpb24oZSx0KXt2YXIgcixvLGksYSxsPW4ucHJvcHMscz1sLmRyYWdQcm9wYWdhdGlvbixjPWwuZHJhZ0RpcmVjdGlvbkxvY2s7aWYoc3x8bi5vcGVuR2xvYmFsTG9jayl7dmFyIHU9dC5vZmZzZXQ7aWYoYyYmbnVsbD09PW4uY3VycmVudERpcmVjdGlvbilyZXR1cm4gbi5jdXJyZW50RGlyZWN0aW9uPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9MTApO3ZhciBuPW51bGw7cmV0dXJuIE1hdGguYWJzKGUueSk+dD9uPVwieVwiOk1hdGguYWJzKGUueCk+dCYmKG49XCJ4XCIpLG59KHUpLHZvaWQobnVsbCE9PW4uY3VycmVudERpcmVjdGlvbiYmKG51bGw9PT0obz0ocj1uLnByb3BzKS5vbkRpcmVjdGlvbkxvY2spfHx2b2lkIDA9PT1vfHxvLmNhbGwocixuLmN1cnJlbnREaXJlY3Rpb24pKSk7bi51cGRhdGVBeGlzKFwieFwiLHQucG9pbnQsdSksbi51cGRhdGVBeGlzKFwieVwiLHQucG9pbnQsdSksbnVsbD09PShhPShpPW4ucHJvcHMpLm9uRHJhZyl8fHZvaWQgMD09PWF8fGEuY2FsbChpLGUsdCksZXI9ZX19LG9uU2Vzc2lvbkVuZDpmdW5jdGlvbihlLHQpe3JldHVybiBuLnN0b3AoZSx0KX19LHt0cmFuc2Zvcm1QYWdlUG9pbnQ6dX0pfSxlLnByb3RvdHlwZS5yZXNvbHZlRHJhZ0NvbnN0cmFpbnRzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmRyYWdDb25zdHJhaW50cyxyPXQuZHJhZ0VsYXN0aWMsbz10aGlzLnZpc3VhbEVsZW1lbnQuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXRDb3JyZWN0ZWQ7dGhpcy5jb25zdHJhaW50cz0hIW4mJihQKG4pP3RoaXMucmVzb2x2ZVJlZkNvbnN0cmFpbnRzKG8sbik6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnRvcCxyPXQubGVmdCxvPXQuYm90dG9tLGk9dC5yaWdodDtyZXR1cm57eDpMbihlLngscixpKSx5OkxuKGUueSxuLG8pfX0obyxuKSksdGhpcy5lbGFzdGljPWZ1bmN0aW9uKGUpe3JldHVybiExPT09ZT9lPTA6ITA9PT1lJiYoZT0uMzUpLHt4OlNuKGUsXCJsZWZ0XCIsXCJyaWdodFwiKSx5OlNuKGUsXCJ0b3BcIixcImJvdHRvbVwiKX19KHIpLHRoaXMuY29uc3RyYWludHMmJiF0aGlzLmhhc011dGF0ZWRDb25zdHJhaW50cyYmbW4oKGZ1bmN0aW9uKHQpe2UuZ2V0QXhpc01vdGlvblZhbHVlKHQpJiYoZS5jb25zdHJhaW50c1t0XT1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O3JldHVybiB2b2lkIDAhPT10Lm1pbiYmKG4ubWluPXQubWluLWUubWluKSx2b2lkIDAhPT10Lm1heCYmKG4ubWF4PXQubWF4LWUubWluKSxufShvW3RdLGUuY29uc3RyYWludHNbdF0pKX0pKX0sZS5wcm90b3R5cGUucmVzb2x2ZVJlZkNvbnN0cmFpbnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5wcm9wcyxyPW4ub25NZWFzdXJlRHJhZ0NvbnN0cmFpbnRzLG89bi50cmFuc2Zvcm1QYWdlUG9pbnQsYT10LmN1cnJlbnQ7aS5pbnZhcmlhbnQobnVsbCE9PWEsXCJJZiBgZHJhZ0NvbnN0cmFpbnRzYCBpcyBzZXQgYXMgYSBSZWFjdCByZWYsIHRoYXQgcmVmIG11c3QgYmUgcGFzc2VkIHRvIGFub3RoZXIgY29tcG9uZW50J3MgYHJlZmAgcHJvcC5cIiksdGhpcy5jb25zdHJhaW50c0JveD1NbihhLG8pO3ZhciBsPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3g6RW4oZS54LHQueCkseTpFbihlLnksdC55KX19KGUsdGhpcy5jb25zdHJhaW50c0JveCk7aWYocil7dmFyIHM9cihmdW5jdGlvbihlKXt2YXIgdD1lLngsbj1lLnk7cmV0dXJue3RvcDpuLm1pbixib3R0b206bi5tYXgsbGVmdDp0Lm1pbixyaWdodDp0Lm1heH19KGwpKTt0aGlzLmhhc011dGF0ZWRDb25zdHJhaW50cz0hIXMscyYmKGw9aG4ocykpfXJldHVybiBsfSxlLnByb3RvdHlwZS5jYW5jZWxEcmFnPWZ1bmN0aW9uKCl7dmFyIGUsdDt0aGlzLnZpc3VhbEVsZW1lbnQudW5sb2NrUHJvamVjdGlvblRhcmdldCgpLG51bGw9PT0oZT10aGlzLmNhbmNlbExheW91dCl8fHZvaWQgMD09PWV8fGUuY2FsbCh0aGlzKSx0aGlzLmlzRHJhZ2dpbmc9ITEsdGhpcy5wYW5TZXNzaW9uJiZ0aGlzLnBhblNlc3Npb24uZW5kKCksdGhpcy5wYW5TZXNzaW9uPW51bGwsIXRoaXMucHJvcHMuZHJhZ1Byb3BhZ2F0aW9uJiZ0aGlzLm9wZW5HbG9iYWxMb2NrJiYodGhpcy5vcGVuR2xvYmFsTG9jaygpLHRoaXMub3Blbkdsb2JhbExvY2s9bnVsbCksbnVsbD09PSh0PXRoaXMudmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PXR8fHQuc2V0QWN0aXZlKEJlLkRyYWcsITEpfSxlLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvO251bGw9PT0obj10aGlzLnBhblNlc3Npb24pfHx2b2lkIDA9PT1ufHxuLmVuZCgpLHRoaXMucGFuU2Vzc2lvbj1udWxsO3ZhciBpPXRoaXMuaXNEcmFnZ2luZztpZih0aGlzLmNhbmNlbERyYWcoKSxpKXt2YXIgYT10LnZlbG9jaXR5O3RoaXMuYW5pbWF0ZURyYWdFbmQoYSksbnVsbD09PShvPShyPXRoaXMucHJvcHMpLm9uRHJhZ0VuZCl8fHZvaWQgMD09PW98fG8uY2FsbChyLGUsdCl9fSxlLnByb3RvdHlwZS5zbmFwVG9DdXJzb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gbW4oKGZ1bmN0aW9uKG4pe2lmKG9yKG4sdC5wcm9wcy5kcmFnLHQuY3VycmVudERpcmVjdGlvbikpe3ZhciByPXQuZ2V0QXhpc01vdGlvblZhbHVlKG4pO2lmKCFyKXJldHVybiB0LmN1cnNvclByb2dyZXNzW25dPS41LCEwO3ZhciBvPXQudmlzdWFsRWxlbWVudC5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCxpPW9bbl0ubWF4LW9bbl0ubWluLGE9b1tuXS5taW4raS8yLGw9ZVtuXS1hO3Qub3JpZ2luUG9pbnRbbl09ZVtuXSxyLnNldChsKX19KSkuaW5jbHVkZXMoITApfSxlLnByb3RvdHlwZS51cGRhdGVBeGlzPWZ1bmN0aW9uKGUsdCxuKXtpZihvcihlLHRoaXMucHJvcHMuZHJhZyx0aGlzLmN1cnJlbnREaXJlY3Rpb24pKXJldHVybiB0aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShlKT90aGlzLnVwZGF0ZUF4aXNNb3Rpb25WYWx1ZShlLG4pOnRoaXMudXBkYXRlVmlzdWFsRWxlbWVudEF4aXMoZSx0KX0sZS5wcm90b3R5cGUudXBkYXRlQXhpc01vdGlvblZhbHVlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoZSk7aWYodCYmbil7dmFyIHI9dGhpcy5vcmlnaW5Qb2ludFtlXSt0W2VdLG89dGhpcy5jb25zdHJhaW50cz9PbihyLHRoaXMuY29uc3RyYWludHNbZV0sdGhpcy5lbGFzdGljW2VdKTpyO24uc2V0KG8pfX0sZS5wcm90b3R5cGUudXBkYXRlVmlzdWFsRWxlbWVudEF4aXM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMudmlzdWFsRWxlbWVudC5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dFtlXSxvPXIubWF4LXIubWluLGk9dGhpcy5jdXJzb3JQcm9ncmVzc1tlXSxhPWZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGk9ZS10Km47cmV0dXJuIHI/T24oaSxyLG8pOml9KHRbZV0sbyxpLG51bGw9PT0obj10aGlzLmNvbnN0cmFpbnRzKXx8dm9pZCAwPT09bj92b2lkIDA6bltlXSx0aGlzLmVsYXN0aWNbZV0pO3RoaXMudmlzdWFsRWxlbWVudC5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyhlLGEsYStvKX0sZS5wcm90b3R5cGUuc2V0UHJvcHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kcmFnLG49dm9pZCAwIT09dCYmdCxvPWUuZHJhZ0RpcmVjdGlvbkxvY2ssaT12b2lkIDAhPT1vJiZvLGE9ZS5kcmFnUHJvcGFnYXRpb24sbD12b2lkIDAhPT1hJiZhLHM9ZS5kcmFnQ29uc3RyYWludHMsYz12b2lkIDAhPT1zJiZzLHU9ZS5kcmFnRWxhc3RpYyxmPXZvaWQgMD09PXU/LjM1OnUsZD1lLmRyYWdNb21lbnR1bSxwPXZvaWQgMD09PWR8fGQsaD1yLl9fcmVzdChlLFtcImRyYWdcIixcImRyYWdEaXJlY3Rpb25Mb2NrXCIsXCJkcmFnUHJvcGFnYXRpb25cIixcImRyYWdDb25zdHJhaW50c1wiLFwiZHJhZ0VsYXN0aWNcIixcImRyYWdNb21lbnR1bVwiXSk7dGhpcy5wcm9wcz1yLl9fYXNzaWduKHtkcmFnOm4sZHJhZ0RpcmVjdGlvbkxvY2s6aSxkcmFnUHJvcGFnYXRpb246bCxkcmFnQ29uc3RyYWludHM6YyxkcmFnRWxhc3RpYzpmLGRyYWdNb21lbnR1bTpwfSxoKX0sZS5wcm90b3R5cGUuZ2V0QXhpc01vdGlvblZhbHVlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMsbj10LmxheW91dCxyPXQubGF5b3V0SWQsbz1cIl9kcmFnXCIrZS50b1VwcGVyQ2FzZSgpO3JldHVybiB0aGlzLnByb3BzW29dP3RoaXMucHJvcHNbb106bnx8dm9pZCAwIT09cj92b2lkIDA6dGhpcy52aXN1YWxFbGVtZW50LmdldFZhbHVlKGUsMCl9LGUucHJvdG90eXBlLmlzTGF5b3V0RHJhZz1mdW5jdGlvbigpe3JldHVybiF0aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShcInhcIil9LGUucHJvdG90eXBlLmlzRXh0ZXJuYWxEcmFnPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuX2RyYWdYLG49ZS5fZHJhZ1k7cmV0dXJuIHR8fG59LGUucHJvdG90eXBlLmFuaW1hdGVEcmFnRW5kPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLnByb3BzLG89bi5kcmFnLGk9bi5kcmFnTW9tZW50dW0sYT1uLmRyYWdFbGFzdGljLGw9bi5kcmFnVHJhbnNpdGlvbixzPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITApO3ZhciBuLHI9ZS5nZXRQcm9qZWN0aW9uUGFyZW50KCk7cmV0dXJuISFyJiYodD9ZbihuPUhuKHIucHJvamVjdGlvbi50YXJnZXQsZS5wcm9qZWN0aW9uLnRhcmdldCksci5nZXRMYXRlc3RWYWx1ZXMoKSk6bj1IbihyLmdldExheW91dFN0YXRlKCkubGF5b3V0LGUuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXQpLG1uKChmdW5jdGlvbih0KXtyZXR1cm4gZS5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyh0LG5bdF0ubWluLG5bdF0ubWF4LCEwKX0pKSwhMCl9KHRoaXMudmlzdWFsRWxlbWVudCx0aGlzLmlzTGF5b3V0RHJhZygpJiYhdGhpcy5pc0V4dGVybmFsRHJhZygpKSxjPXRoaXMuY29uc3RyYWludHN8fHt9O2lmKHMmJk9iamVjdC5rZXlzKGMpLmxlbmd0aCYmdGhpcy5pc0xheW91dERyYWcoKSl7dmFyIHU9dGhpcy52aXN1YWxFbGVtZW50LmdldFByb2plY3Rpb25QYXJlbnQoKTtpZih1KXt2YXIgZj1Ibih1LnByb2plY3Rpb24udGFyZ2V0RmluYWwsYyk7bW4oKGZ1bmN0aW9uKGUpe3ZhciB0PWZbZV0sbj10Lm1pbixyPXQubWF4O2NbZV09e21pbjppc05hTihuKT92b2lkIDA6bixtYXg6aXNOYU4ocik/dm9pZCAwOnJ9fSkpfX12YXIgZD1tbigoZnVuY3Rpb24obil7dmFyIHU7aWYob3IobixvLHQuY3VycmVudERpcmVjdGlvbikpe3ZhciBmPW51bGwhPT0odT1udWxsPT1jP3ZvaWQgMDpjW25dKSYmdm9pZCAwIT09dT91Ont9LGQ9YT8yMDA6MWU2LHA9YT80MDoxZTcsaD1yLl9fYXNzaWduKHIuX19hc3NpZ24oe3R5cGU6XCJpbmVydGlhXCIsdmVsb2NpdHk6aT9lW25dOjAsYm91bmNlU3RpZmZuZXNzOmQsYm91bmNlRGFtcGluZzpwLHRpbWVDb25zdGFudDo3NTAscmVzdERlbHRhOjEscmVzdFNwZWVkOjEwfSxsKSxmKTtyZXR1cm4gdC5nZXRBeGlzTW90aW9uVmFsdWUobik/dC5zdGFydEF4aXNWYWx1ZUFuaW1hdGlvbihuLGgpOnQudmlzdWFsRWxlbWVudC5zdGFydExheW91dEFuaW1hdGlvbihuLGgscyl9fSkpO3JldHVybiBQcm9taXNlLmFsbChkKS50aGVuKChmdW5jdGlvbigpe3ZhciBlLG47bnVsbD09PShuPShlPXQucHJvcHMpLm9uRHJhZ1RyYW5zaXRpb25FbmQpfHx2b2lkIDA9PT1ufHxuLmNhbGwoZSl9KSl9LGUucHJvdG90eXBlLnN0b3BNb3Rpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzO21uKChmdW5jdGlvbih0KXt2YXIgbj1lLmdldEF4aXNNb3Rpb25WYWx1ZSh0KTtuP24uc3RvcCgpOmUudmlzdWFsRWxlbWVudC5zdG9wTGF5b3V0QW5pbWF0aW9uKCl9KSl9LGUucHJvdG90eXBlLnN0YXJ0QXhpc1ZhbHVlQW5pbWF0aW9uPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoZSk7aWYobil7dmFyIHI9bi5nZXQoKTtyZXR1cm4gbi5zZXQociksbi5zZXQociksSXQoZSxuLDAsdCl9fSxlLnByb3RvdHlwZS5zY2FsZVBvaW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmRyYWc7aWYoUCh0LmRyYWdDb25zdHJhaW50cykmJnRoaXMuY29uc3RyYWludHNCb3gpe3RoaXMuc3RvcE1vdGlvbigpO3ZhciByPXt4OjAseTowfTttbigoZnVuY3Rpb24odCl7dmFyIG4sbyxpLGEscyxjO3JbdF09KG49ZS52aXN1YWxFbGVtZW50LnByb2plY3Rpb24udGFyZ2V0W3RdLG89ZS5jb25zdHJhaW50c0JveFt0XSxhPS41LHM9eW4obiksKGM9eW4obykpPnM/YT1sLnByb2dyZXNzKG8ubWluLG8ubWF4LXMsbi5taW4pOnM+YyYmKGE9bC5wcm9ncmVzcyhuLm1pbixuLm1heC1jLG8ubWluKSksaT1hLGwuY2xhbXAoMCwxLGkpKX0pKSx0aGlzLnVwZGF0ZUNvbnN0cmFpbnRzKChmdW5jdGlvbigpe21uKChmdW5jdGlvbih0KXtpZihvcih0LG4sbnVsbCkpe3ZhciBvPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLm1heC1lLm1pbixvPWwubWl4KHQubWluLHQubWF4LXIsbik7cmV0dXJue21pbjpvLG1heDpvK3J9fShlLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbi50YXJnZXRbdF0sZS5jb25zdHJhaW50c0JveFt0XSxyW3RdKSxpPW8ubWluLGE9by5tYXg7ZS52aXN1YWxFbGVtZW50LnNldFByb2plY3Rpb25UYXJnZXRBeGlzKHQsaSxhKX19KSl9KSksc2V0VGltZW91dChRbiwxKX19LGUucHJvdG90eXBlLnVwZGF0ZUNvbnN0cmFpbnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5jYW5jZWxMYXlvdXQ9Sm4oKGZ1bmN0aW9uKG4scil7dmFyIG89UG4odC52aXN1YWxFbGVtZW50KTtyKChmdW5jdGlvbigpe3JldHVybiBvLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc2V0VHJhbnNmb3JtKCl9KSl9KSksbigoZnVuY3Rpb24oKXtyZXR1cm4gSW4odC52aXN1YWxFbGVtZW50KX0pKSxyKChmdW5jdGlvbigpe3JldHVybiBvLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc3RvcmVUcmFuc2Zvcm0oKX0pKX0pKSxuKChmdW5jdGlvbigpe3QucmVzb2x2ZURyYWdDb25zdHJhaW50cygpfSkpLGUmJnIoZSl9KSl9LGUucHJvdG90eXBlLm1vdW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1udChlLmdldEluc3RhbmNlKCksXCJwb2ludGVyZG93blwiLChmdW5jdGlvbihlKXt2YXIgbj10LnByb3BzLHI9bi5kcmFnLG89bi5kcmFnTGlzdGVuZXI7ciYmKHZvaWQgMD09PW98fG8pJiZ0LnN0YXJ0KGUpfSkpLHI9JGUod2luZG93LFwicmVzaXplXCIsKGZ1bmN0aW9uKCl7dC5zY2FsZVBvaW50KCl9KSksbz1lLm9uTGF5b3V0VXBkYXRlKChmdW5jdGlvbigpe3QuaXNEcmFnZ2luZyYmdC5yZXNvbHZlRHJhZ0NvbnN0cmFpbnRzKCl9KSksaT1lLnByZXZEcmFnQ3Vyc29yO3JldHVybiBpJiZ0aGlzLnN0YXJ0KGVyLHtjdXJzb3JQcm9ncmVzczppfSksZnVuY3Rpb24oKXtudWxsPT1ufHxuKCksbnVsbD09cnx8cigpLG51bGw9PW98fG8oKSx0LmNhbmNlbERyYWcoKX19LGV9KCk7ZnVuY3Rpb24gb3IoZSx0LG4pe3JldHVybiEoITAhPT10JiZ0IT09ZXx8bnVsbCE9PW4mJm4hPT1lKX12YXIgaXIsYXIsbHI9e3BhbjpkdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vblBhbixuPWUub25QYW5TdGFydCxyPWUub25QYW5FbmQsaT1lLm9uUGFuU2Vzc2lvblN0YXJ0LGE9ZS52aXN1YWxFbGVtZW50LGw9dHx8bnx8cnx8aSxzPW8udXNlUmVmKG51bGwpLGM9by51c2VDb250ZXh0KHkpLnRyYW5zZm9ybVBhZ2VQb2ludCx1PXtvblNlc3Npb25TdGFydDppLG9uU3RhcnQ6bixvbk1vdmU6dCxvbkVuZDpmdW5jdGlvbihlLHQpe3MuY3VycmVudD1udWxsLHImJnIoZSx0KX19O28udXNlRWZmZWN0KChmdW5jdGlvbigpe251bGwhPT1zLmN1cnJlbnQmJnMuY3VycmVudC51cGRhdGVIYW5kbGVycyh1KX0pKSxydChhLFwicG9pbnRlcmRvd25cIixsJiZmdW5jdGlvbihlKXtzLmN1cnJlbnQ9bmV3IGFuKGUsdSx7dHJhbnNmb3JtUGFnZVBvaW50OmN9KX0pLGZ0KChmdW5jdGlvbigpe3JldHVybiBzLmN1cnJlbnQmJnMuY3VycmVudC5lbmQoKX0pKX0pKSxkcmFnOmR0KChmdW5jdGlvbihlKXt2YXIgdD1lLmRyYWdDb250cm9scyxuPWUudmlzdWFsRWxlbWVudCxpPW8udXNlQ29udGV4dCh5KS50cmFuc2Zvcm1QYWdlUG9pbnQsYT1fKChmdW5jdGlvbigpe3JldHVybiBuZXcgcnIoe3Zpc3VhbEVsZW1lbnQ6bn0pfSkpO2Euc2V0UHJvcHMoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGUpLHt0cmFuc2Zvcm1QYWdlUG9pbnQ6aX0pKSxvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdCYmdC5zdWJzY3JpYmUoYSl9KSxbYV0pLG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiBhLm1vdW50KG4pfSksW10pfSkpfTtmdW5jdGlvbiBzcihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmZS5zdGFydHNXaXRoKFwidmFyKC0tXCIpfSFmdW5jdGlvbihlKXtlW2UuRW50ZXJpbmc9MF09XCJFbnRlcmluZ1wiLGVbZS5QcmVzZW50PTFdPVwiUHJlc2VudFwiLGVbZS5FeGl0aW5nPTJdPVwiRXhpdGluZ1wifShpcnx8KGlyPXt9KSksdC5WaXNpYmlsaXR5QWN0aW9uPXZvaWQgMCwoYXI9dC5WaXNpYmlsaXR5QWN0aW9ufHwodC5WaXNpYmlsaXR5QWN0aW9uPXt9KSlbYXIuSGlkZT0wXT1cIkhpZGVcIixhclthci5TaG93PTFdPVwiU2hvd1wiO3ZhciBjcj0vdmFyXFwoKC0tW2EtekEtWjAtOS1fXSspLD8gPyhbYS16QS1aMC05ICgpJSMuLC1dKyk/XFwpLztmdW5jdGlvbiB1cihlLHQsbil7dm9pZCAwPT09biYmKG49MSksaS5pbnZhcmlhbnQobjw9NCwnTWF4IENTUyB2YXJpYWJsZSBmYWxsYmFjayBkZXB0aCBkZXRlY3RlZCBpbiBwcm9wZXJ0eSBcIicrZSsnXCIuIFRoaXMgbWF5IGluZGljYXRlIGEgY2lyY3VsYXIgZmFsbGJhY2sgZGVwZW5kZW5jeS4nKTt2YXIgbz1yLl9fcmVhZChmdW5jdGlvbihlKXt2YXIgdD1jci5leGVjKGUpO2lmKCF0KXJldHVyblssXTt2YXIgbj1yLl9fcmVhZCh0LDMpO3JldHVybltuWzFdLG5bMl1dfShlKSwyKSxhPW9bMF0sbD1vWzFdO2lmKGEpe3ZhciBzPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLmdldFByb3BlcnR5VmFsdWUoYSk7cmV0dXJuIHM/cy50cmltKCk6c3IobCk/dXIobCx0LG4rMSk6bH19ZnVuY3Rpb24gZnIoZSx0KXtyZXR1cm4gZS8odC5tYXgtdC5taW4pKjEwMH12YXIgZHI9XCJfJGNzc1wiLHByPXtwcm9jZXNzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLnRhcmdldDtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7aWYoIWEucHgudGVzdChlKSlyZXR1cm4gZTtlPXBhcnNlRmxvYXQoZSl9cmV0dXJuIGZyKGUsci54KStcIiUgXCIrZnIoZSxyLnkpK1wiJVwifX0saHI9e2JvcmRlclJhZGl1czpyLl9fYXNzaWduKHIuX19hc3NpZ24oe30scHIpLHthcHBseVRvOltcImJvcmRlclRvcExlZnRSYWRpdXNcIixcImJvcmRlclRvcFJpZ2h0UmFkaXVzXCIsXCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzXCIsXCJib3JkZXJCb3R0b21SaWdodFJhZGl1c1wiXX0pLGJvcmRlclRvcExlZnRSYWRpdXM6cHIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6cHIsYm9yZGVyQm90dG9tTGVmdFJhZGl1czpwcixib3JkZXJCb3R0b21SaWdodFJhZGl1czpwcixib3hTaGFkb3c6e3Byb2Nlc3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmRlbHRhLHI9dC50cmVlU2NhbGUsbz1lLGk9ZS5pbmNsdWRlcyhcInZhcihcIikscz1bXTtpJiYoZT1lLnJlcGxhY2UoY3IsKGZ1bmN0aW9uKGUpe3JldHVybiBzLnB1c2goZSksZHJ9KSkpO3ZhciBjPWEuY29tcGxleC5wYXJzZShlKTtpZihjLmxlbmd0aD41KXJldHVybiBvO3ZhciB1PWEuY29tcGxleC5jcmVhdGVUcmFuc2Zvcm1lcihlKSxmPVwibnVtYmVyXCIhPXR5cGVvZiBjWzBdPzE6MCxkPW4ueC5zY2FsZSpyLngscD1uLnkuc2NhbGUqci55O2NbMCtmXS89ZCxjWzErZl0vPXA7dmFyIGg9bC5taXgoZCxwLC41KTtcIm51bWJlclwiPT10eXBlb2YgY1syK2ZdJiYoY1syK2ZdLz1oKSxcIm51bWJlclwiPT10eXBlb2YgY1szK2ZdJiYoY1szK2ZdLz1oKTt2YXIgZz11KGMpO2lmKGkpe3ZhciB2PTA7Zz1nLnJlcGxhY2UoZHIsKGZ1bmN0aW9uKCl7dmFyIGU9c1t2XTtyZXR1cm4gdisrLGV9KSl9cmV0dXJuIGd9fX0sZ3I9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3ZhciBuPW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gbi5mcmFtZVRhcmdldD17eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sbi5jdXJyZW50QW5pbWF0aW9uVGFyZ2V0PXt4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSxuLmlzQW5pbWF0aW5nPXt4OiExLHk6ITF9LG4uc3RvcEF4aXNBbmltYXRpb249e3g6dm9pZCAwLHk6dm9pZCAwfSxuLmlzQW5pbWF0aW5nVHJlZT0hMSxuLmFuaW1hdGU9ZnVuY3Rpb24oZSxvLGkpe3ZvaWQgMD09PWkmJihpPXt9KTt2YXIgYT1pLm9yaWdpbkJveCxsPWkudGFyZ2V0Qm94LHM9aS52aXNpYmlsaXR5QWN0aW9uLGM9aS5zaG91bGRTdGFja0FuaW1hdGUsdT1pLm9uQ29tcGxldGUsZj1pLnByZXZQYXJlbnQsZD1yLl9fcmVzdChpLFtcIm9yaWdpbkJveFwiLFwidGFyZ2V0Qm94XCIsXCJ2aXNpYmlsaXR5QWN0aW9uXCIsXCJzaG91bGRTdGFja0FuaW1hdGVcIixcIm9uQ29tcGxldGVcIixcInByZXZQYXJlbnRcIl0pLHA9bi5wcm9wcyxoPXAudmlzdWFsRWxlbWVudCxnPXAubGF5b3V0O2lmKCExPT09YylyZXR1cm4gbi5pc0FuaW1hdGluZ1RyZWU9ITEsbi5zYWZlVG9SZW1vdmUoKTtpZighbi5pc0FuaW1hdGluZ1RyZWV8fCEwPT09Yyl7YyYmKG4uaXNBbmltYXRpbmdUcmVlPSEwKSxvPWF8fG8sZT1sfHxlO3ZhciB2LG0sQyx5PSExLHc9aC5nZXRQcm9qZWN0aW9uUGFyZW50KCk7aWYodyl7dmFyIGI9dy5wcmV2Vmlld3BvcnRCb3gseD13LmdldExheW91dFN0YXRlKCkubGF5b3V0O2YmJihsJiYoeD1mLmdldExheW91dFN0YXRlKCkubGF5b3V0KSxhJiYobT13LCh2PWYpLmdldExheW91dElkKCk9PT0oQz1tLmdldExheW91dElkKCkpJiYodm9pZCAwIT09Q3x8dj09PW0pKSYmZi5wcmV2Vmlld3BvcnRCb3gmJihiPWYucHJldlZpZXdwb3J0Qm94KSksYiYmZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlfHwhZSYmISh0fHxuKX0oZixhLGwpJiYoeT0hMCxvPUhuKGIsbyksZT1Ibih4LGUpKX12YXIgXyxPLEw9KE89ZSwhKG1yKF89byl8fG1yKE8pfHxDcihfLngsTy54KSYmQ3IoXy55LE8ueSkpKSxFPW1uKChmdW5jdGlvbihpKXt2YXIgYSxsO2lmKFwicG9zaXRpb25cIj09PWcpe3ZhciBjPWVbaV0ubWF4LWVbaV0ubWluO29baV0ubWF4PW9baV0ubWluK2N9aWYoIWgucHJvamVjdGlvbi5pc1RhcmdldExvY2tlZClyZXR1cm4gdm9pZCAwPT09cz9MP24uYW5pbWF0ZUF4aXMoaSxlW2ldLG9baV0sci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGQpLHtpc1JlbGF0aXZlOnl9KSk6KG51bGw9PT0obD0oYT1uLnN0b3BBeGlzQW5pbWF0aW9uKVtpXSl8fHZvaWQgMD09PWx8fGwuY2FsbChhKSxoLnNldFByb2plY3Rpb25UYXJnZXRBeGlzKGksZVtpXS5taW4sZVtpXS5tYXgseSkpOnZvaWQgaC5zZXRWaXNpYmlsaXR5KHM9PT10LlZpc2liaWxpdHlBY3Rpb24uU2hvdyl9KSk7cmV0dXJuIGguc3luY1JlbmRlcigpLFByb21pc2UuYWxsKEUpLnRoZW4oKGZ1bmN0aW9uKCl7bi5pc0FuaW1hdGluZ1RyZWU9ITEsdSYmdSgpLGgubm90aWZ5TGF5b3V0QW5pbWF0aW9uQ29tcGxldGUoKX0pKX19LG59cmV0dXJuIHIuX19leHRlbmRzKG4sZSksbi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcy52aXN1YWxFbGVtZW50O3QuYW5pbWF0ZU1vdGlvblZhbHVlPUl0LHQuZW5hYmxlTGF5b3V0UHJvamVjdGlvbigpLHRoaXMudW5zdWJMYXlvdXRSZWFkeT10Lm9uTGF5b3V0VXBkYXRlKHRoaXMuYW5pbWF0ZSksdC5sYXlvdXRTYWZlVG9SZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5zYWZlVG9SZW1vdmUoKX0sVyhocil9LG4ucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnVuc3ViTGF5b3V0UmVhZHkoKSxtbigoZnVuY3Rpb24odCl7dmFyIG4scjtyZXR1cm4gbnVsbD09PShyPShuPWUuc3RvcEF4aXNBbmltYXRpb24pW3RdKXx8dm9pZCAwPT09cj92b2lkIDA6ci5jYWxsKG4pfSkpfSxuLnByb3RvdHlwZS5hbmltYXRlQXhpcz1mdW5jdGlvbihlLHQsbixyKXt2YXIgbyxpLGE9dGhpcyxzPXZvaWQgMD09PXI/e306cixjPXMudHJhbnNpdGlvbix1PXMuaXNSZWxhdGl2ZTtpZighdGhpcy5pc0FuaW1hdGluZ1tlXXx8IUNyKHQsdGhpcy5jdXJyZW50QW5pbWF0aW9uVGFyZ2V0W2VdKSl7bnVsbD09PShpPShvPXRoaXMuc3RvcEF4aXNBbmltYXRpb24pW2VdKXx8dm9pZCAwPT09aXx8aS5jYWxsKG8pLHRoaXMuaXNBbmltYXRpbmdbZV09ITA7dmFyIGY9dGhpcy5wcm9wcy52aXN1YWxFbGVtZW50LGQ9dGhpcy5mcmFtZVRhcmdldFtlXSxwPWYuZ2V0UHJvamVjdGlvbkFuaW1hdGlvblByb2dyZXNzKClbZV07cC5jbGVhckxpc3RlbmVycygpLHAuc2V0KDApLHAuc2V0KDApO3ZhciBoPWZ1bmN0aW9uKCl7dmFyIHI9cC5nZXQoKS8xZTM7IWZ1bmN0aW9uKGUsdCxuLHIpe2UubWluPWwubWl4KHQubWluLG4ubWluLHIpLGUubWF4PWwubWl4KHQubWF4LG4ubWF4LHIpfShkLG4sdCxyKSxmLnNldFByb2plY3Rpb25UYXJnZXRBeGlzKGUsZC5taW4sZC5tYXgsdSl9O2goKTt2YXIgZz1wLm9uQ2hhbmdlKGgpO3RoaXMuc3RvcEF4aXNBbmltYXRpb25bZV09ZnVuY3Rpb24oKXthLmlzQW5pbWF0aW5nW2VdPSExLHAuc3RvcCgpLGcoKX0sdGhpcy5jdXJyZW50QW5pbWF0aW9uVGFyZ2V0W2VdPXQ7dmFyIHY9Y3x8Zi5nZXREZWZhdWx0VHJhbnNpdGlvbigpfHx5cjtyZXR1cm4gSXQoXCJ4XCI9PT1lP1wibGF5b3V0WFwiOlwibGF5b3V0WVwiLHAsMWUzLHYmJlB0KHYsXCJsYXlvdXRcIikpLnRoZW4odGhpcy5zdG9wQXhpc0FuaW1hdGlvbltlXSl9fSxuLnByb3RvdHlwZS5zYWZlVG9SZW1vdmU9ZnVuY3Rpb24oKXt2YXIgZSx0O251bGw9PT0odD0oZT10aGlzLnByb3BzKS5zYWZlVG9SZW1vdmUpfHx2b2lkIDA9PT10fHx0LmNhbGwoZSl9LG4ucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxufSh1LkNvbXBvbmVudCksdnI9e21pbjowLG1heDowfTtmdW5jdGlvbiBtcihlKXtyZXR1cm4gQ3IoZS54LHZyKSYmQ3IoZS55LHZyKX1mdW5jdGlvbiBDcihlLHQpe3JldHVybiBlLm1pbj09PXQubWluJiZlLm1heD09PXQubWF4fXZhciB5cj17ZHVyYXRpb246LjQ1LGVhc2U6Wy40LDAsLjEsMV19LHdyPXtsYXlvdXRSZWFkeTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub3RpZnlMYXlvdXRSZWFkeSgpfX07ZnVuY3Rpb24gYnIoKXt2YXIgZT1uZXcgU2V0O3JldHVybnthZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYWRkKHQpfSxmbHVzaDpmdW5jdGlvbih0KXt2YXIgbj12b2lkIDA9PT10P3dyOnQsbz1uLmxheW91dFJlYWR5LGk9bi5wYXJlbnQ7Sm4oKGZ1bmN0aW9uKHQsbil7dmFyIGE9QXJyYXkuZnJvbShlKS5zb3J0KGtuKSxsPWk/UG4oaSk6W107bigoZnVuY3Rpb24oKXtyLl9fc3ByZWFkQXJyYXkoci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKGwpKSxyLl9fcmVhZChhKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVzZXRUcmFuc2Zvcm0oKX0pKX0pKSx0KChmdW5jdGlvbigpe2EuZm9yRWFjaChJbil9KSksbigoZnVuY3Rpb24oKXtsLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc3RvcmVUcmFuc2Zvcm0oKX0pKSxhLmZvckVhY2gobyl9KSksdCgoZnVuY3Rpb24oKXthLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuaXNQcmVzZW50JiYoZS5wcmVzZW5jZT1pci5QcmVzZW50KX0pKX0pKSxuKChmdW5jdGlvbigpe3MuZmx1c2hTeW5jLnByZVJlbmRlcigpLHMuZmx1c2hTeW5jLnJlbmRlcigpfSkpLHQoKGZ1bmN0aW9uKCl7ZC5kZWZhdWx0LnBvc3RSZW5kZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIGEuZm9yRWFjaCh4cil9KSksZS5jbGVhcigpfSkpfSkpLFFuKCl9fX1mdW5jdGlvbiB4cihlKXtlLnByZXZWaWV3cG9ydEJveD1lLnByb2plY3Rpb24udGFyZ2V0fXZhciBfcj1vLmNyZWF0ZUNvbnRleHQoYnIoKSksT3I9by5jcmVhdGVDb250ZXh0KGJyKCkpO2Z1bmN0aW9uIExyKGUpe3JldHVybiEhZS5mb3JjZVVwZGF0ZX12YXIgRXI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHIuX19leHRlbmRzKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zeW5jTGF5b3V0LG49ZS5mcmFtZXJTeW5jTGF5b3V0LHI9ZS52aXN1YWxFbGVtZW50O0xyKHQpJiZ0LnJlZ2lzdGVyKHIpLExyKG4pJiZuLnJlZ2lzdGVyKHIpLHIub25Vbm1vdW50KChmdW5jdGlvbigpe0xyKHQpJiZ0LnJlbW92ZShyKSxMcihuKSYmbi5yZW1vdmUocil9KSl9LHQucHJvdG90eXBlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuc3luY0xheW91dCxuPWUudmlzdWFsRWxlbWVudDtyZXR1cm4gTHIodCk/dC5zeW5jVXBkYXRlKCk6KEFuKG4pLHQuYWRkKG4pKSxudWxsfSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLnN5bmNMYXlvdXQ7THIoZSl8fGUuZmx1c2goKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHR9KGYuZGVmYXVsdC5Db21wb25lbnQpLFNyPXttZWFzdXJlTGF5b3V0OmZ1bmN0aW9uKGUpe3ZhciB0PW8udXNlQ29udGV4dChfciksbj1vLnVzZUNvbnRleHQoT3IpO3JldHVybiBmLmRlZmF1bHQuY3JlYXRlRWxlbWVudChFcixyLl9fYXNzaWduKHt9LGUse3N5bmNMYXlvdXQ6dCxmcmFtZXJTeW5jTGF5b3V0Om59KSl9LGxheW91dEFuaW1hdGlvbjpmdW5jdGlvbihlKXt2YXIgdD1yLl9fcmVhZChPKCksMilbMV07cmV0dXJuIHUuY3JlYXRlRWxlbWVudChncixyLl9fYXNzaWduKHt9LGUse3NhZmVUb1JlbW92ZTp0fSkpfX07ZnVuY3Rpb24ganIoKXtyZXR1cm57aXNIeWRyYXRlZDohMSxsYXlvdXQ6e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19LGxheW91dENvcnJlY3RlZDp7eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sdHJlZVNjYWxlOnt4OjEseToxfSxkZWx0YTp2bigpLGRlbHRhRmluYWw6dm4oKSxkZWx0YVRyYW5zZm9ybTpcIlwifX12YXIgTXI9anIoKTtmdW5jdGlvbiBrcihlLHQsbil7dmFyIHI9ZS54LG89ZS55LGk9XCJ0cmFuc2xhdGUzZChcIityLnRyYW5zbGF0ZS90LngrXCJweCwgXCIrby50cmFuc2xhdGUvdC55K1wicHgsIDApIFwiO2lmKG4pe3ZhciBhPW4ucm90YXRlLGw9bi5yb3RhdGVYLHM9bi5yb3RhdGVZO2EmJihpKz1cInJvdGF0ZShcIithK1wiKSBcIiksbCYmKGkrPVwicm90YXRlWChcIitsK1wiKSBcIikscyYmKGkrPVwicm90YXRlWShcIitzK1wiKSBcIil9cmV0dXJuIGkrPVwic2NhbGUoXCIrci5zY2FsZStcIiwgXCIrby5zY2FsZStcIilcIixufHxpIT09UHI/aTpcIlwifWZ1bmN0aW9uIFJyKGUpe3ZhciB0PWUuZGVsdGFGaW5hbDtyZXR1cm4gMTAwKnQueC5vcmlnaW4rXCIlIFwiKzEwMCp0Lnkub3JpZ2luK1wiJSAwXCJ9dmFyIFByPWtyKE1yLmRlbHRhLE1yLnRyZWVTY2FsZSx7eDoxLHk6MX0pLElyPVtcIkxheW91dE1lYXN1cmVcIixcIkJlZm9yZUxheW91dE1lYXN1cmVcIixcIkxheW91dFVwZGF0ZVwiLFwiVmlld3BvcnRCb3hVcGRhdGVcIixcIlVwZGF0ZVwiLFwiUmVuZGVyXCIsXCJBbmltYXRpb25Db21wbGV0ZVwiLFwiTGF5b3V0QW5pbWF0aW9uQ29tcGxldGVcIixcIkFuaW1hdGlvblN0YXJ0XCIsXCJTZXRBeGlzVGFyZ2V0XCIsXCJVbm1vdW50XCJdLEFyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuY2hpbGRyZW49W10sdGhpcy5pc0RpcnR5PSExfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7QXQodGhpcy5jaGlsZHJlbixlKSx0aGlzLmlzRGlydHk9ITB9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXtUdCh0aGlzLmNoaWxkcmVuLGUpLHRoaXMuaXNEaXJ0eT0hMH0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXt0aGlzLmlzRGlydHkmJnRoaXMuY2hpbGRyZW4uc29ydChrbiksdGhpcy5pc0RpcnR5PSExLHRoaXMuY2hpbGRyZW4uZm9yRWFjaChlKX0sZX0oKSxUcj1mdW5jdGlvbihlKXt2YXIgdD1lLnRyZWVUeXBlLG49dm9pZCAwPT09dD9cIlwiOnQsbz1lLmJ1aWxkLGk9ZS5nZXRCYXNlVGFyZ2V0LGE9ZS5tYWtlVGFyZ2V0QW5pbWF0YWJsZSxjPWUubWVhc3VyZVZpZXdwb3J0Qm94LHU9ZS5yZW5kZXIsZj1lLnJlYWRWYWx1ZUZyb21JbnN0YW5jZSxwPWUucmVzZXRUcmFuc2Zvcm0saD1lLnJlc3RvcmVUcmFuc2Zvcm0sZz1lLnJlbW92ZVZhbHVlRnJvbVJlbmRlclN0YXRlLHY9ZS5zb3J0Tm9kZVBvc2l0aW9uLG09ZS5zY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIEM9ZS5wYXJlbnQseT1lLnByb3BzLHc9ZS5wcmVzZW5jZUlkLGI9ZS5ibG9ja0luaXRpYWxBbmltYXRpb24seD1lLnZpc3VhbFN0YXRlO3ZvaWQgMD09PXQmJih0PXt9KTt2YXIgXyxPLEwsRSxTLGosTT14LmxhdGVzdFZhbHVlcyxrPXgucmVuZGVyU3RhdGUsUj1mdW5jdGlvbigpe3ZhciBlPUlyLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEh0fSkpLHQ9e30sbj17Y2xlYXJBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGVhcigpfSkpfSx1cGRhdGVQcm9wTGlzdGVuZXJzOmZ1bmN0aW9uKGUpe3JldHVybiBJci5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbztudWxsPT09KG89dFtyXSl8fHZvaWQgMD09PW98fG8uY2FsbCh0KTt2YXIgaT1cIm9uXCIrcixhPWVbaV07YSYmKHRbcl09bltpXShhKSl9KSl9fTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe25bXCJvblwiK0lyW3RdXT1mdW5jdGlvbih0KXtyZXR1cm4gZS5hZGQodCl9LG5bXCJub3RpZnlcIitJclt0XV09ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUubm90aWZ5LmFwcGx5KGUsci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKHQpKSl9fSkpLG59KCksUD17aXNFbmFibGVkOiExLGlzSHlkcmF0ZWQ6ITEsaXNUYXJnZXRMb2NrZWQ6ITEsdGFyZ2V0Ont4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSx0YXJnZXRGaW5hbDp7eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX19LEk9UCxUPU0sSD1qcigpLEQ9ITEsWj1uZXcgTWFwLCQ9bmV3IE1hcCxOPXt9LEY9ci5fX2Fzc2lnbih7fSxNKTtmdW5jdGlvbiBVKCl7XyYmKFEuaXNQcm9qZWN0aW9uUmVhZHkoKSYmKHpuKEkudGFyZ2V0RmluYWwsSS50YXJnZXQsVCksYm4oSC5kZWx0YUZpbmFsLEgubGF5b3V0Q29ycmVjdGVkLEkudGFyZ2V0RmluYWwsTSkpLFcoKSx1KF8saykpfWZ1bmN0aW9uIFcoKXt2YXIgZT1NO2lmKEUmJkUuaXNBY3RpdmUoKSl7dmFyIG49RS5nZXRDcm9zc2ZhZGVTdGF0ZShRKTtuJiYoZT1uKX1vKFEsayxlLEksSCx0LHkpfWZ1bmN0aW9uIHooKXtSLm5vdGlmeVVwZGF0ZShNKX1mdW5jdGlvbiBHKCl7US5sYXlvdXRUcmVlLmZvckVhY2goQnIpfXZhciBxPW0oeSk7Zm9yKHZhciBZIGluIHEpe3ZhciBLPXFbWV07dm9pZCAwIT09TVtZXSYmZWUoSykmJksuc2V0KE1bWV0sITEpfXZhciBYPUIoeSksSj1WKHkpLFE9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt0cmVlVHlwZTpuLGN1cnJlbnQ6bnVsbCxkZXB0aDpDP0MuZGVwdGgrMTowLHBhcmVudDpDLGNoaWxkcmVuOm5ldyBTZXQscGF0aDpDP3IuX19zcHJlYWRBcnJheShyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQoQy5wYXRoKSksW0NdKTpbXSxsYXlvdXRUcmVlOkM/Qy5sYXlvdXRUcmVlOm5ldyBBcixwcmVzZW5jZUlkOncscHJvamVjdGlvbjpQLHZhcmlhbnRDaGlsZHJlbjpKP25ldyBTZXQ6dm9pZCAwLGlzVmlzaWJsZTp2b2lkIDAsbWFudWFsbHlBbmltYXRlT25Nb3VudDpCb29sZWFuKG51bGw9PUM/dm9pZCAwOkMuaXNNb3VudGVkKCkpLGJsb2NrSW5pdGlhbEFuaW1hdGlvbjpiLGlzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKF8pfSxtb3VudDpmdW5jdGlvbihlKXtfPVEuY3VycmVudD1lLFEucG9pbnRUbyhRKSxKJiZDJiYhWCYmKGo9bnVsbD09Qz92b2lkIDA6Qy5hZGRWYXJpYW50Q2hpbGQoUSkpLG51bGw9PUN8fEMuY2hpbGRyZW4uYWRkKFEpfSx1bm1vdW50OmZ1bmN0aW9uKCl7cy5jYW5jZWxTeW5jLnVwZGF0ZSh6KSxzLmNhbmNlbFN5bmMucmVuZGVyKFUpLHMuY2FuY2VsU3luYy5wcmVSZW5kZXIoUS51cGRhdGVMYXlvdXRQcm9qZWN0aW9uKSwkLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KSksUS5zdG9wTGF5b3V0QW5pbWF0aW9uKCksUS5sYXlvdXRUcmVlLnJlbW92ZShRKSxudWxsPT1qfHxqKCksbnVsbD09Q3x8Qy5jaGlsZHJlbi5kZWxldGUoUSksbnVsbD09THx8TCgpLFIuY2xlYXJBbGxMaXN0ZW5lcnMoKX0sYWRkVmFyaWFudENoaWxkOmZ1bmN0aW9uKGUpe3ZhciB0LG49US5nZXRDbG9zZXN0VmFyaWFudE5vZGUoKTtpZihuKXJldHVybiBudWxsPT09KHQ9bi52YXJpYW50Q2hpbGRyZW4pfHx2b2lkIDA9PT10fHx0LmFkZChlKSxmdW5jdGlvbigpe3JldHVybiBuLnZhcmlhbnRDaGlsZHJlbi5kZWxldGUoZSl9fSxzb3J0Tm9kZVBvc2l0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiB2JiZuPT09ZS50cmVlVHlwZT92KFEuZ2V0SW5zdGFuY2UoKSxlLmdldEluc3RhbmNlKCkpOjB9LGdldENsb3Nlc3RWYXJpYW50Tm9kZTpmdW5jdGlvbigpe3JldHVybiBKP1E6bnVsbD09Qz92b2lkIDA6Qy5nZXRDbG9zZXN0VmFyaWFudE5vZGUoKX0sc2NoZWR1bGVVcGRhdGVMYXlvdXRQcm9qZWN0aW9uOkM/Qy5zY2hlZHVsZVVwZGF0ZUxheW91dFByb2plY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gZC5kZWZhdWx0LnByZVJlbmRlcihRLnVwZGF0ZVRyZWVMYXlvdXRQcm9qZWN0aW9uLCExLCEwKX0sZ2V0TGF5b3V0SWQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5sYXlvdXRJZH0sZ2V0SW5zdGFuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gX30sZ2V0U3RhdGljVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1bZV19LHNldFN0YXRpY1ZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1bZV09dH0sZ2V0TGF0ZXN0VmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIE19LHNldFZpc2liaWxpdHk6ZnVuY3Rpb24oZSl7US5pc1Zpc2libGUhPT1lJiYoUS5pc1Zpc2libGU9ZSxRLnNjaGVkdWxlUmVuZGVyKCkpfSxtYWtlVGFyZ2V0QW5pbWF0YWJsZTpmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksYShRLGUseSx0KX0sYWRkVmFsdWU6ZnVuY3Rpb24oZSx0KXtRLmhhc1ZhbHVlKGUpJiZRLnJlbW92ZVZhbHVlKGUpLFouc2V0KGUsdCksTVtlXT10LmdldCgpLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vbkNoYW5nZSgoZnVuY3Rpb24odCl7TVtlXT10LHkub25VcGRhdGUmJmQuZGVmYXVsdC51cGRhdGUoeiwhMSwhMCl9KSkscj10Lm9uUmVuZGVyUmVxdWVzdChRLnNjaGVkdWxlUmVuZGVyKTskLnNldChlLChmdW5jdGlvbigpe24oKSxyKCl9KSl9KGUsdCl9LHJlbW92ZVZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0O1ouZGVsZXRlKGUpLG51bGw9PT0odD0kLmdldChlKSl8fHZvaWQgMD09PXR8fHQoKSwkLmRlbGV0ZShlKSxkZWxldGUgTVtlXSxnKGUsayl9LGhhc1ZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBaLmhhcyhlKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1aLmdldChlKTtyZXR1cm4gdm9pZCAwPT09biYmdm9pZCAwIT09dCYmKG49VnQodCksUS5hZGRWYWx1ZShlLG4pKSxufSxmb3JFYWNoVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFouZm9yRWFjaChlKX0scmVhZFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBudWxsIT09KG49TVtlXSkmJnZvaWQgMCE9PW4/bjpmKF8sZSx0KX0sc2V0QmFzZVRhcmdldDpmdW5jdGlvbihlLHQpe0ZbZV09dH0sZ2V0QmFzZVRhcmdldDpmdW5jdGlvbihlKXtpZihpKXt2YXIgdD1pKHksZSk7aWYodm9pZCAwIT09dCYmIWVlKHQpKXJldHVybiB0fXJldHVybiBGW2VdfX0sUikse2J1aWxkOmZ1bmN0aW9uKCl7cmV0dXJuIFcoKSxrfSxzY2hlZHVsZVJlbmRlcjpmdW5jdGlvbigpe2QuZGVmYXVsdC5yZW5kZXIoVSwhMSwhMCl9LHN5bmNSZW5kZXI6VSxzZXRQcm9wczpmdW5jdGlvbihlKXt5PWUsUi51cGRhdGVQcm9wTGlzdGVuZXJzKGUpLE49ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2Zvcih2YXIgbyBpbiB0KXt2YXIgaT10W29dLGE9bltvXTtpZihlZShpKSllLmFkZFZhbHVlKG8saSk7ZWxzZSBpZihlZShhKSllLmFkZFZhbHVlKG8sVnQoaSkpO2Vsc2UgaWYoYSE9PWkpaWYoZS5oYXNWYWx1ZShvKSl7dmFyIGw9ZS5nZXRWYWx1ZShvKTshbC5oYXNBbmltYXRlZCYmbC5zZXQoaSl9ZWxzZSBlLmFkZFZhbHVlKG8sVnQobnVsbCE9PShyPWUuZ2V0U3RhdGljVmFsdWUobykpJiZ2b2lkIDAhPT1yP3I6aSkpfWZvcih2YXIgbyBpbiBuKXZvaWQgMD09PXRbb10mJmUucmVtb3ZlVmFsdWUobyk7cmV0dXJuIHR9KFEsbSh5KSxOKX0sZ2V0UHJvcHM6ZnVuY3Rpb24oKXtyZXR1cm4geX0sZ2V0VmFyaWFudDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbnVsbD09PSh0PXkudmFyaWFudHMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0W2VdfSxnZXREZWZhdWx0VHJhbnNpdGlvbjpmdW5jdGlvbigpe3JldHVybiB5LnRyYW5zaXRpb259LGdldFZhcmlhbnRDb250ZXh0OmZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUmJihlPSExKSxlKXJldHVybiBudWxsPT1DP3ZvaWQgMDpDLmdldFZhcmlhbnRDb250ZXh0KCk7aWYoIVgpe3ZhciB0PShudWxsPT1DP3ZvaWQgMDpDLmdldFZhcmlhbnRDb250ZXh0KCkpfHx7fTtyZXR1cm4gdm9pZCAwIT09eS5pbml0aWFsJiYodC5pbml0aWFsPXkuaW5pdGlhbCksdH1mb3IodmFyIG49e30scj0wO3I8WnI7cisrKXt2YXIgbz1EcltyXSxpPXlbb107KEEoaSl8fCExPT09aSkmJihuW29dPWkpfXJldHVybiBufSxlbmFibGVMYXlvdXRQcm9qZWN0aW9uOmZ1bmN0aW9uKCl7UC5pc0VuYWJsZWQ9ITAsUS5sYXlvdXRUcmVlLmFkZChRKX0sbG9ja1Byb2plY3Rpb25UYXJnZXQ6ZnVuY3Rpb24oKXtQLmlzVGFyZ2V0TG9ja2VkPSEwfSx1bmxvY2tQcm9qZWN0aW9uVGFyZ2V0OmZ1bmN0aW9uKCl7US5zdG9wTGF5b3V0QW5pbWF0aW9uKCksUC5pc1RhcmdldExvY2tlZD0hMX0sZ2V0TGF5b3V0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gSH0sc2V0Q3Jvc3NmYWRlcjpmdW5jdGlvbihlKXtFPWV9LGlzUHJvamVjdGlvblJlYWR5OmZ1bmN0aW9uKCl7cmV0dXJuIFAuaXNFbmFibGVkJiZQLmlzSHlkcmF0ZWQmJkguaXNIeWRyYXRlZH0sc3RhcnRMYXlvdXRBbmltYXRpb246ZnVuY3Rpb24oZSx0LG4pe3ZvaWQgMD09PW4mJihuPSExKTt2YXIgcj1RLmdldFByb2plY3Rpb25BbmltYXRpb25Qcm9ncmVzcygpW2VdLG89bj9QLnJlbGF0aXZlVGFyZ2V0W2VdOlAudGFyZ2V0W2VdLGk9by5taW4sYT1vLm1heC1pO3JldHVybiByLmNsZWFyTGlzdGVuZXJzKCksci5zZXQoaSksci5zZXQoaSksci5vbkNoYW5nZSgoZnVuY3Rpb24odCl7US5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyhlLHQsdCthLG4pfSkpLFEuYW5pbWF0ZU1vdGlvblZhbHVlKGUsciwwLHQpfSxzdG9wTGF5b3V0QW5pbWF0aW9uOmZ1bmN0aW9uKCl7bW4oKGZ1bmN0aW9uKGUpe3JldHVybiBRLmdldFByb2plY3Rpb25BbmltYXRpb25Qcm9ncmVzcygpW2VdLnN0b3AoKX0pKX0sbWVhc3VyZVZpZXdwb3J0Qm94OmZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPSEwKTt2YXIgbj1jKF8sdCk7cmV0dXJuIGV8fFluKG4sTSksbn0sZ2V0UHJvamVjdGlvbkFuaW1hdGlvblByb2dyZXNzOmZ1bmN0aW9uKCl7cmV0dXJuIFN8fChTPXt4OlZ0KDApLHk6VnQoMCl9KSxTfSxzZXRQcm9qZWN0aW9uVGFyZ2V0QXhpczpmdW5jdGlvbihlLHQsbixyKXt2YXIgbzt2b2lkIDA9PT1yJiYocj0hMSkscj8oUC5yZWxhdGl2ZVRhcmdldHx8KFAucmVsYXRpdmVUYXJnZXQ9e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19KSxvPVAucmVsYXRpdmVUYXJnZXRbZV0pOihQLnJlbGF0aXZlVGFyZ2V0PXZvaWQgMCxvPVAudGFyZ2V0W2VdKSxQLmlzSHlkcmF0ZWQ9ITAsby5taW49dCxvLm1heD1uLEQ9ITAsUi5ub3RpZnlTZXRBeGlzVGFyZ2V0KCl9LHJlYmFzZVByb2plY3Rpb25UYXJnZXQ6ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD1ILmxheW91dCk7dmFyIG49US5nZXRQcm9qZWN0aW9uQW5pbWF0aW9uUHJvZ3Jlc3MoKSxyPW4ueCxvPW4ueSxpPSEoUC5yZWxhdGl2ZVRhcmdldHx8UC5pc1RhcmdldExvY2tlZHx8ci5pc0FuaW1hdGluZygpfHxvLmlzQW5pbWF0aW5nKCkpOyhlfHxpKSYmbW4oKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV0scj1uLm1pbixvPW4ubWF4O1Euc2V0UHJvamVjdGlvblRhcmdldEF4aXMoZSxyLG8pfSkpfSxub3RpZnlMYXlvdXRSZWFkeTpmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRQcm9qZWN0aW9uUGFyZW50KCk7aWYodCl7dmFyIG49SG4odC5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCxlLmdldExheW91dFN0YXRlKCkubGF5b3V0KTttbigoZnVuY3Rpb24odCl7ZS5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyh0LG5bdF0ubWluLG5bdF0ubWF4LCEwKX0pKX1lbHNlIGUucmViYXNlUHJvamVjdGlvblRhcmdldCgpfShRKSxRLm5vdGlmeUxheW91dFVwZGF0ZShILmxheW91dCxRLnByZXZWaWV3cG9ydEJveHx8SC5sYXlvdXQsZSl9LHJlc2V0VHJhbnNmb3JtOmZ1bmN0aW9uKCl7cmV0dXJuIHAoUSxfLHkpfSxyZXN0b3JlVHJhbnNmb3JtOmZ1bmN0aW9uKCl7cmV0dXJuIGgoXyxrKX0sdXBkYXRlTGF5b3V0UHJvamVjdGlvbjpmdW5jdGlvbigpe2lmKFEuaXNQcm9qZWN0aW9uUmVhZHkoKSl7dmFyIGU9SC5kZWx0YSx0PUgudHJlZVNjYWxlLG49dC54LHI9dC55LG89SC5kZWx0YVRyYW5zZm9ybTsoZnVuY3Rpb24oZSx0LG4scil7dmFyIG8saSxhPWUuZGVsdGEsbD1lLmxheW91dCxzPWUubGF5b3V0Q29ycmVjdGVkLGM9ZS50cmVlU2NhbGUsdT10LnRhcmdldDtpPWwsVm4oKG89cykueCxpLngpLFZuKG8ueSxpLnkpLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLmxlbmd0aDtpZihyKXt2YXIgbyxpO3QueD10Lnk9MTtmb3IodmFyIGE9MDthPHI7YSsrKWk9KG89blthXSkuZ2V0TGF5b3V0U3RhdGUoKS5kZWx0YSx0LngqPWkueC5zY2FsZSx0LnkqPWkueS5zY2FsZSxObihlLGkpLEJuKG8pJiZ6bihlLGUsby5nZXRMYXRlc3RWYWx1ZXMoKSl9fShzLGMsbiksYm4oYSxzLHUscil9KShILEksUS5wYXRoLE0pLEQmJlEubm90aWZ5Vmlld3BvcnRCb3hVcGRhdGUoSS50YXJnZXQsZSksRD0hMTt2YXIgaT1rcihlLHQpO2k9PT1vJiZuPT09dC54JiZyPT09dC55fHxRLnNjaGVkdWxlUmVuZGVyKCksSC5kZWx0YVRyYW5zZm9ybT1pfX0sdXBkYXRlVHJlZUxheW91dFByb2plY3Rpb246ZnVuY3Rpb24oKXtRLmxheW91dFRyZWUuZm9yRWFjaChIciksZC5kZWZhdWx0LnByZVJlbmRlcihHLCExLCEwKX0sZ2V0UHJvamVjdGlvblBhcmVudDpmdW5jdGlvbigpe2lmKHZvaWQgMD09PU8pe2Zvcih2YXIgZT0hMSx0PVEucGF0aC5sZW5ndGgtMTt0Pj0wO3QtLSl7dmFyIG49US5wYXRoW3RdO2lmKG4ucHJvamVjdGlvbi5pc0VuYWJsZWQpe2U9bjticmVha319Tz1lfXJldHVybiBPfSxyZXNvbHZlUmVsYXRpdmVUYXJnZXRCb3g6ZnVuY3Rpb24oKXt2YXIgZT1RLmdldFByb2plY3Rpb25QYXJlbnQoKTtpZihQLnJlbGF0aXZlVGFyZ2V0JiZlJiYoZnVuY3Rpb24oZSx0KXtfbihlLnRhcmdldC54LGUucmVsYXRpdmVUYXJnZXQueCx0LnRhcmdldC54KSxfbihlLnRhcmdldC55LGUucmVsYXRpdmVUYXJnZXQueSx0LnRhcmdldC55KX0oUCxlLnByb2plY3Rpb24pLEJuKGUpKSl7dmFyIHQ9UC50YXJnZXQ7em4odCx0LGUuZ2V0TGF0ZXN0VmFsdWVzKCkpfX0sc2hvdWxkUmVzZXRUcmFuc2Zvcm06ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbih5Ll9sYXlvdXRSZXNldFRyYW5zZm9ybSl9LHBvaW50VG86ZnVuY3Rpb24oZSl7ST1lLnByb2plY3Rpb24sVD1lLmdldExhdGVzdFZhbHVlcygpLG51bGw9PUx8fEwoKSxMPWwucGlwZShlLm9uU2V0QXhpc1RhcmdldChRLnNjaGVkdWxlVXBkYXRlTGF5b3V0UHJvamVjdGlvbiksZS5vbkxheW91dEFuaW1hdGlvbkNvbXBsZXRlKChmdW5jdGlvbigpe3ZhciBlO1EuaXNQcmVzZW50P1EucHJlc2VuY2U9aXIuUHJlc2VudDpudWxsPT09KGU9US5sYXlvdXRTYWZlVG9SZW1vdmUpfHx2b2lkIDA9PT1lfHxlLmNhbGwoUSl9KSkpfSxpc1ByZXNlbnQ6ITAscHJlc2VuY2U6aXIuRW50ZXJpbmd9KTtyZXR1cm4gUX19O2Z1bmN0aW9uIEhyKGUpe2UucmVzb2x2ZVJlbGF0aXZlVGFyZ2V0Qm94KCl9ZnVuY3Rpb24gQnIoZSl7ZS51cGRhdGVMYXlvdXRQcm9qZWN0aW9uKCl9dmFyIFZyLERyPXIuX19zcHJlYWRBcnJheShbXCJpbml0aWFsXCJdLHIuX19yZWFkKGVuKSksWnI9RHIubGVuZ3RoLCRyPW5ldyBTZXQoW1wid2lkdGhcIixcImhlaWdodFwiLFwidG9wXCIsXCJsZWZ0XCIsXCJyaWdodFwiLFwiYm90dG9tXCIsXCJ4XCIsXCJ5XCJdKSxOcj1mdW5jdGlvbihlKXtyZXR1cm4gJHIuaGFzKGUpfSxGcj1mdW5jdGlvbihlLHQpe2Uuc2V0KHQsITEpLGUuc2V0KHQpfSxVcj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PWEubnVtYmVyfHxlPT09YS5weH07IWZ1bmN0aW9uKGUpe2Uud2lkdGg9XCJ3aWR0aFwiLGUuaGVpZ2h0PVwiaGVpZ2h0XCIsZS5sZWZ0PVwibGVmdFwiLGUucmlnaHQ9XCJyaWdodFwiLGUudG9wPVwidG9wXCIsZS5ib3R0b209XCJib3R0b21cIn0oVnJ8fChWcj17fSkpO3ZhciBXcj1mdW5jdGlvbihlLHQpe3JldHVybiBwYXJzZUZsb2F0KGUuc3BsaXQoXCIsIFwiKVt0XSl9LHpyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIG89ci50cmFuc2Zvcm07aWYoXCJub25lXCI9PT1vfHwhbylyZXR1cm4gMDt2YXIgaT1vLm1hdGNoKC9ebWF0cml4M2RcXCgoLispXFwpJC8pO2lmKGkpcmV0dXJuIFdyKGlbMV0sdCk7dmFyIGE9by5tYXRjaCgvXm1hdHJpeFxcKCguKylcXCkkLyk7cmV0dXJuIGE/V3IoYVsxXSxlKTowfX0sR3I9bmV3IFNldChbXCJ4XCIsXCJ5XCIsXCJ6XCJdKSxxcj1HLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIUdyLmhhcyhlKX0pKSxZcj17d2lkdGg6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS54O3JldHVybiB0Lm1heC10Lm1pbn0saGVpZ2h0OmZ1bmN0aW9uKGUpe3ZhciB0PWUueTtyZXR1cm4gdC5tYXgtdC5taW59LHRvcDpmdW5jdGlvbihlLHQpe3ZhciBuPXQudG9wO3JldHVybiBwYXJzZUZsb2F0KG4pfSxsZWZ0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZWZ0O3JldHVybiBwYXJzZUZsb2F0KG4pfSxib3R0b206ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnkscj10LnRvcDtyZXR1cm4gcGFyc2VGbG9hdChyKSsobi5tYXgtbi5taW4pfSxyaWdodDpmdW5jdGlvbihlLHQpe3ZhciBuPWUueCxyPXQubGVmdDtyZXR1cm4gcGFyc2VGbG9hdChyKSsobi5tYXgtbi5taW4pfSx4OnpyKDQsMTMpLHk6enIoNSwxNCl9O2Z1bmN0aW9uIEtyKGUsdCxuLG8pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuc29tZShOcil9KHQpP2Z1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW4mJihuPXt9KSx2b2lkIDA9PT1vJiYobz17fSksdD1yLl9fYXNzaWduKHt9LHQpLG89ci5fX2Fzc2lnbih7fSxvKTt2YXIgbD1PYmplY3Qua2V5cyh0KS5maWx0ZXIoTnIpLHM9W10sYz0hMSx1PVtdO2lmKGwuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIGw9ZS5nZXRWYWx1ZShyKTtpZihlLmhhc1ZhbHVlKHIpKXt2YXIgZixkPW5bcl0scD10W3JdLGg9JHQoZCk7aWYoa2UocCkpZm9yKHZhciBnPXAubGVuZ3RoLHY9bnVsbD09PXBbMF0/MTowO3Y8Zzt2KyspZj9pLmludmFyaWFudCgkdChwW3ZdKT09PWYsXCJBbGwga2V5ZnJhbWVzIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZVwiKTooZj0kdChwW3ZdKSxpLmludmFyaWFudChmPT09aHx8VXIoaCkmJlVyKGYpLFwiS2V5ZnJhbWVzIG11c3QgYmUgb2YgdGhlIHNhbWUgZGltZW5zaW9uIGFzIHRoZSBjdXJyZW50IHZhbHVlXCIpKTtlbHNlIGY9JHQocCk7aWYoaCE9PWYpaWYoVXIoaCkmJlVyKGYpKXt2YXIgbT1sLmdldCgpO1wic3RyaW5nXCI9PXR5cGVvZiBtJiZsLnNldChwYXJzZUZsb2F0KG0pKSxcInN0cmluZ1wiPT10eXBlb2YgcD90W3JdPXBhcnNlRmxvYXQocCk6QXJyYXkuaXNBcnJheShwKSYmZj09PWEucHgmJih0W3JdPXAubWFwKHBhcnNlRmxvYXQpKX1lbHNlKG51bGw9PWg/dm9pZCAwOmgudHJhbnNmb3JtKSYmKG51bGw9PWY/dm9pZCAwOmYudHJhbnNmb3JtKSYmKDA9PT1kfHwwPT09cCk/MD09PWQ/bC5zZXQoZi50cmFuc2Zvcm0oZCkpOnRbcl09aC50cmFuc2Zvcm0ocCk6KGN8fChzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBxci5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1lLmdldFZhbHVlKG4pO3ZvaWQgMCE9PXImJih0LnB1c2goW24sci5nZXQoKV0pLHIuc2V0KG4uc3RhcnRzV2l0aChcInNjYWxlXCIpPzE6MCkpfSkpLHQubGVuZ3RoJiZlLnN5bmNSZW5kZXIoKSx0fShlKSxjPSEwKSx1LnB1c2gociksb1tyXT12b2lkIDAhPT1vW3JdP29bcl06dFtyXSxGcihsLHApKX19KSksdS5sZW5ndGgpe3ZhciBmPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10Lm1lYXN1cmVWaWV3cG9ydEJveCgpLG89dC5nZXRJbnN0YW5jZSgpLGk9Z2V0Q29tcHV0ZWRTdHlsZShvKSxhPWkuZGlzcGxheSxsPXt0b3A6aS50b3AsbGVmdDppLmxlZnQsYm90dG9tOmkuYm90dG9tLHJpZ2h0OmkucmlnaHQsdHJhbnNmb3JtOmkudHJhbnNmb3JtfTtcIm5vbmVcIj09PWEmJnQuc2V0U3RhdGljVmFsdWUoXCJkaXNwbGF5XCIsZS5kaXNwbGF5fHxcImJsb2NrXCIpLHQuc3luY1JlbmRlcigpO3ZhciBzPXQubWVhc3VyZVZpZXdwb3J0Qm94KCk7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIG89dC5nZXRWYWx1ZShuKTtGcihvLFlyW25dKHIsbCkpLGVbbl09WXJbbl0ocyxpKX0pKSxlfSh0LGUsdSk7cmV0dXJuIHMubGVuZ3RoJiZzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXIuX19yZWFkKHQsMiksbz1uWzBdLGk9blsxXTtlLmdldFZhbHVlKG8pLnNldChpKX0pKSxlLnN5bmNSZW5kZXIoKSx7dGFyZ2V0OmYsdHJhbnNpdGlvbkVuZDpvfX1yZXR1cm57dGFyZ2V0OnQsdHJhbnNpdGlvbkVuZDpvfX0oZSx0LG4sbyk6e3RhcmdldDp0LHRyYW5zaXRpb25FbmQ6b319dmFyIFhyPXt0cmVlVHlwZTpcImRvbVwiLHJlYWRWYWx1ZUZyb21JbnN0YW5jZTpmdW5jdGlvbihlLHQpe2lmKEsodCkpe3ZhciBuPVN0KHQpO3JldHVybiBuJiZuLmRlZmF1bHR8fDB9dmFyIHIsbz0ocj1lLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHIpKTtyZXR1cm4obmUodCk/by5nZXRQcm9wZXJ0eVZhbHVlKHQpOm9bdF0pfHwwfSxzb3J0Tm9kZVBvc2l0aW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDImZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KT8xOi0xfSxnZXRCYXNlVGFyZ2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG51bGw9PT0obj1lLnN0eWxlKXx8dm9pZCAwPT09bj92b2lkIDA6blt0XX0sbWVhc3VyZVZpZXdwb3J0Qm94OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1uKGUsdC50cmFuc2Zvcm1QYWdlUG9pbnQpfSxyZXNldFRyYW5zZm9ybTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bi50cmFuc2Zvcm1UZW1wbGF0ZTt0LnN0eWxlLnRyYW5zZm9ybT1yP3Ioe30sXCJcIik6XCJub25lXCIsZS5zY2hlZHVsZVJlbmRlcigpfSxyZXN0b3JlVHJhbnNmb3JtOmZ1bmN0aW9uKGUsdCl7ZS5zdHlsZS50cmFuc2Zvcm09dC5zdHlsZS50cmFuc2Zvcm19LHJlbW92ZVZhbHVlRnJvbVJlbmRlclN0YXRlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC52YXJzLHI9dC5zdHlsZTtkZWxldGUgbltlXSxkZWxldGUgcltlXX0sbWFrZVRhcmdldEFuaW1hdGFibGU6ZnVuY3Rpb24oZSx0LG4sbyl7dmFyIGk9bi50cmFuc2Zvcm1WYWx1ZXM7dm9pZCAwPT09byYmKG89ITApO3ZhciBhPXQudHJhbnNpdGlvbixsPXQudHJhbnNpdGlvbkVuZCxzPXIuX19yZXN0KHQsW1widHJhbnNpdGlvblwiLFwidHJhbnNpdGlvbkVuZFwiXSksYz1xdChzLGF8fHt9LGUpO2lmKGkmJihsJiYobD1pKGwpKSxzJiYocz1pKHMpKSxjJiYoYz1pKGMpKSksbyl7enQoZSxzLGMpO3ZhciB1PWZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBpPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbyxpPXIuX19yZXN0KHQsW10pLGE9ZS5nZXRJbnN0YW5jZSgpO2lmKCEoYSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSlyZXR1cm57dGFyZ2V0OmksdHJhbnNpdGlvbkVuZDpufTtmb3IodmFyIGwgaW4gbiYmKG49ci5fX2Fzc2lnbih7fSxuKSksZS5mb3JFYWNoVmFsdWUoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0KCk7aWYoc3IodCkpe3ZhciBuPXVyKHQsYSk7biYmZS5zZXQobil9fSkpLGkpe3ZhciBzPWlbbF07aWYoc3Iocykpe3ZhciBjPXVyKHMsYSk7YyYmKGlbbF09YyxuJiYobnVsbCE9PShvPW5bbF0pJiZ2b2lkIDAhPT1vfHwobltsXT1zKSkpfX1yZXR1cm57dGFyZ2V0OmksdHJhbnNpdGlvbkVuZDpufX0oZSx0LG8pO3JldHVybiBLcihlLHQ9aS50YXJnZXQsbixvPWkudHJhbnNpdGlvbkVuZCl9KGUscyxjLGwpO2w9dS50cmFuc2l0aW9uRW5kLHM9dS50YXJnZXR9cmV0dXJuIHIuX19hc3NpZ24oe3RyYW5zaXRpb246YSx0cmFuc2l0aW9uRW5kOmx9LHMpfSxzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6U2UsYnVpbGQ6ZnVuY3Rpb24oZSx0LG4scixvLGksYSl7dm9pZCAwIT09ZS5pc1Zpc2libGUmJih0LnN0eWxlLnZpc2liaWxpdHk9ZS5pc1Zpc2libGU/XCJ2aXNpYmxlXCI6XCJoaWRkZW5cIik7dmFyIGw9ci5pc0VuYWJsZWQmJm8uaXNIeWRyYXRlZDthZSh0LG4scixvLGksYS50cmFuc2Zvcm1UZW1wbGF0ZSxsP2tyOnZvaWQgMCxsP1JyOnZvaWQgMCl9LHJlbmRlcjpPZX0sSnI9VHIoWHIpLFFyPVRyKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxYcikse2dldEJhc2VUYXJnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XX0scmVhZFZhbHVlRnJvbUluc3RhbmNlOmZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIEsodCk/KG51bGw9PT0obj1TdCh0KSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGVmYXVsdCl8fDA6KHQ9TGUuaGFzKHQpP3Q6X2UodCksZS5nZXRBdHRyaWJ1dGUodCkpfSxzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6amUsYnVpbGQ6ZnVuY3Rpb24oZSx0LG4scixvLGksYSl7dmFyIGw9ci5pc0VuYWJsZWQmJm8uaXNIeWRyYXRlZDtDZSh0LG4scixvLGksYS50cmFuc2Zvcm1UZW1wbGF0ZSxsP2tyOnZvaWQgMCxsP1JyOnZvaWQgMCl9LHJlbmRlcjpFZX0pKSxlbz1mdW5jdGlvbihlLHQpe3JldHVybiBGKGUpP1FyKHQse2VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiExfSk6SnIodCx7ZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246ITB9KX0sdG89ci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxvbikscHQpLGxyKSxTciksbm89JCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gWmUoZSx0LHRvLGVvKX0pKSxybz0kKFplKSxvbz0wO2Z1bmN0aW9uIGlvKCl7dmFyIGU9b287cmV0dXJuIG9vKyssZX12YXIgYW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPWUuaW5pdGlhbCxyPWUuaXNQcmVzZW50LGk9ZS5vbkV4aXRDb21wbGV0ZSxhPWUuY3VzdG9tLGw9ZS5wcmVzZW5jZUFmZmVjdHNMYXlvdXQscz1fKGxvKSxjPV8oaW8pLGY9by51c2VNZW1vKChmdW5jdGlvbigpe3JldHVybntpZDpjLGluaXRpYWw6bixpc1ByZXNlbnQ6cixjdXN0b206YSxvbkV4aXRDb21wbGV0ZTpmdW5jdGlvbihlKXtzLnNldChlLCEwKTt2YXIgdD0hMDtzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2V8fCh0PSExKX0pKSx0JiYobnVsbD09aXx8aSgpKX0scmVnaXN0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHMuc2V0KGUsITEpLGZ1bmN0aW9uKCl7cmV0dXJuIHMuZGVsZXRlKGUpfX19fSksbD92b2lkIDA6W3JdKTtyZXR1cm4gby51c2VNZW1vKChmdW5jdGlvbigpe3MuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gcy5zZXQodCwhMSl9KSl9KSxbcl0pLHUudXNlRWZmZWN0KChmdW5jdGlvbigpeyFyJiYhcy5zaXplJiYobnVsbD09aXx8aSgpKX0pLFtyXSksdS5jcmVhdGVFbGVtZW50KHguUHJvdmlkZXIse3ZhbHVlOmZ9LHQpfTtmdW5jdGlvbiBsbygpe3JldHVybiBuZXcgTWFwfWZ1bmN0aW9uIHNvKGUpe3JldHVybiBlLmtleXx8XCJcIn1mdW5jdGlvbiBjbyhlLHQsbil7dm9pZCAwPT09biYmKG49e30pO3ZhciByPWVlKGUpP2U6VnQoZSk7cmV0dXJuIEl0KFwiXCIscix0LG4pLHtzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHIuc3RvcCgpfX19ZnVuY3Rpb24gdW8oKXt2YXIgZT1WdCgxKSx0PXtsZWFkOnZvaWQgMCxmb2xsb3c6dm9pZCAwLGNyb3NzZmFkZU9wYWNpdHk6ITEscHJlc2VydmVGb2xsb3dPcGFjaXR5OiExfSxuPXIuX19hc3NpZ24oe30sdCksbz17fSxpPXt9LGE9ITEsYz1udWxsLHU9MDtmdW5jdGlvbiBmKG4sbyl7dmFyIGk9dC5sZWFkLGw9dC5mb2xsb3c7YT0hMCxjPW51bGw7dmFyIHU9ITEsZj1mdW5jdGlvbigpe3U9ITAsaSYmaS5zY2hlZHVsZVJlbmRlcigpLGwmJmwuc2NoZWR1bGVSZW5kZXIoKX0scD1mdW5jdGlvbigpe2E9ITEsYz1zLmdldEZyYW1lRGF0YSgpLnRpbWVzdGFtcH07cmV0dXJuIG89byYmUHQobyxcImNyb3NzZmFkZVwiKSxjbyhlLG4sci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG8pLHtvblVwZGF0ZTpmLG9uQ29tcGxldGU6ZnVuY3Rpb24oKXt1P3AoKTooZS5zZXQobiksZC5kZWZhdWx0LnJlYWQocCkpLGYoKX19KSl9cmV0dXJue2lzQWN0aXZlOmZ1bmN0aW9uKCl7cmV0dXJuIG8mJihhfHxzLmdldEZyYW1lRGF0YSgpLnRpbWVzdGFtcD09PWMpfSxmcm9tTGVhZDpmdW5jdGlvbihlKXtyZXR1cm4gZigwLGUpfSx0b0xlYWQ6ZnVuY3Rpb24ocil7dmFyIG89MDtyZXR1cm4gdC5wcmV2VmFsdWVzfHx0LmZvbGxvdz9uLmxlYWQ9PT10LmZvbGxvdyYmbi5mb2xsb3c9PT10LmxlYWQmJihvPTEtZS5nZXQoKSk6bz0xLGUuc2V0KG8pLGYoMSxyKX0scmVzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXQoMSl9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zdG9wKCl9LGdldENyb3NzZmFkZVN0YXRlOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBuLHIsYT1zLmdldEZyYW1lRGF0YSgpLnRpbWVzdGFtcCxjPXQubGVhZCxmPXQuZm9sbG93O2lmKGEhPT11JiZjKXt1PWE7dmFyIGQ9Yy5nZXRMYXRlc3RWYWx1ZXMoKTtPYmplY3QuYXNzaWduKG8sZCk7dmFyIHA9Zj9mLmdldExhdGVzdFZhbHVlcygpOnQucHJldlZhbHVlcztPYmplY3QuYXNzaWduKGkscCk7dmFyIGg9ZS5nZXQoKSxnPW51bGwhPT0obj1kLm9wYWNpdHkpJiZ2b2lkIDAhPT1uP246MSx2PW51bGwhPT0ocj1udWxsPT1wP3ZvaWQgMDpwLm9wYWNpdHkpJiZ2b2lkIDAhPT1yP3I6MTt0LmNyb3NzZmFkZU9wYWNpdHkmJmY/KG8ub3BhY2l0eT1sLm1peCghMSE9PWYuaXNWaXNpYmxlPzA6dixnLGZvKGgpKSxpLm9wYWNpdHk9dC5wcmVzZXJ2ZUZvbGxvd09wYWNpdHk/djpsLm1peCh2LDAscG8oaCkpKTpmfHwoby5vcGFjaXR5PWwubWl4KHYsZyxoKSksZnVuY3Rpb24oZSx0LG4scixvLGkpe2Zvcih2YXIgYT0wO2E8dm87YSsrKXt2YXIgcz1cImJvcmRlclwiK2dvW2FdK1wiUmFkaXVzXCIsYz1tbyhyLHMpLHU9bW8obixzKTtpZigodm9pZCAwIT09Y3x8dm9pZCAwIT09dSkmJihjfHwoYz0wKSx1fHwodT0wKSxcIm51bWJlclwiPT10eXBlb2YgYyYmXCJudW1iZXJcIj09dHlwZW9mIHUpKXt2YXIgZj1NYXRoLm1heChsLm1peChjLHUsaSksMCk7ZVtzXT10W3NdPWZ9fWlmKHIucm90YXRlfHxuLnJvdGF0ZSl7dmFyIGQ9bC5taXgoci5yb3RhdGV8fDAsbi5yb3RhdGV8fDAsaSk7ZS5yb3RhdGU9dC5yb3RhdGU9ZH0hbyYmbi5iYWNrZ3JvdW5kQ29sb3ImJnIuYmFja2dyb3VuZENvbG9yJiYoZS5iYWNrZ3JvdW5kQ29sb3I9dC5iYWNrZ3JvdW5kQ29sb3I9bC5taXhDb2xvcihyLmJhY2tncm91bmRDb2xvcixuLmJhY2tncm91bmRDb2xvcikoaSkpfShvLGksZCxwfHx7fSxCb29sZWFuKGYpLGgpfX0oKSxuPT09dC5sZWFkP286bj09PXQuZm9sbG93P2k6dm9pZCAwfSxzZXRPcHRpb25zOmZ1bmN0aW9uKGUpe249dCx0PWUsbz17fSxpPXt9fSxnZXRMYXRlc3RWYWx1ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gb319fXZhciBmbz1obygwLC41LGwuY2lyY091dCkscG89aG8oLjUsLjk1LGwubGluZWFyKTtmdW5jdGlvbiBobyhlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByPGU/MDpyPnQ/MTpuKGwucHJvZ3Jlc3MoZSx0LHIpKX19dmFyIGdvPVtcIlRvcExlZnRcIixcIlRvcFJpZ2h0XCIsXCJCb3R0b21MZWZ0XCIsXCJCb3R0b21SaWdodFwiXSx2bz1nby5sZW5ndGg7ZnVuY3Rpb24gbW8oZSx0KXt2YXIgbjtyZXR1cm4gbnVsbCE9PShuPWVbdF0pJiZ2b2lkIDAhPT1uP246ZS5ib3JkZXJSYWRpdXN9dmFyIENvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuY2hpbGRyZW49bmV3IFNldCx0LnN0YWNrcz1uZXcgTWFwLHQuaGFzTW91bnRlZD0hMSx0LnVwZGF0ZVNjaGVkdWxlZD0hMSx0LnJlbmRlclNjaGVkdWxlZD0hMSx0LnN5bmNDb250ZXh0PXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxicigpKSx7c3luY1VwZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5zY2hlZHVsZVVwZGF0ZShlKX0sZm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt0LnN5bmNDb250ZXh0PXIuX19hc3NpZ24oe30sdC5zeW5jQ29udGV4dCksdC5zY2hlZHVsZVVwZGF0ZSghMCl9LHJlZ2lzdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0LmFkZENoaWxkKGUpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQucmVtb3ZlQ2hpbGQoZSl9fSksdH1yZXR1cm4gci5fX2V4dGVuZHModCxlKSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3RoaXMuaGFzTW91bnRlZD0hMH0sdC5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5zdGFydExheW91dEFuaW1hdGlvbigpfSx0LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJTY2hlZHVsZWQ9ITAsITB9LHQucHJvdG90eXBlLnN0YXJ0TGF5b3V0QW5pbWF0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnJlbmRlclNjaGVkdWxlZD10aGlzLnVwZGF0ZVNjaGVkdWxlZD0hMTt2YXIgdD10aGlzLnByb3BzLnR5cGU7dGhpcy5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmlzUHJlc2VudD9lLnByZXNlbmNlIT09aXIuRW50ZXJpbmcmJihlLnByZXNlbmNlPWUucHJlc2VuY2U9PT1pci5FeGl0aW5nP2lyLkVudGVyaW5nOmlyLlByZXNlbnQpOmUucHJlc2VuY2U9aXIuRXhpdGluZ30pKSx0aGlzLnVwZGF0ZVN0YWNrcygpO3ZhciBuPXtsYXlvdXRSZWFkeTpmdW5jdGlvbihuKXt2b2lkIDAhPT1uLmdldExheW91dElkKCk/ZS5nZXRTdGFjayhuKS5hbmltYXRlKG4sXCJjcm9zc2ZhZGVcIj09PXQpOm4ubm90aWZ5TGF5b3V0UmVhZHkoKX0scGFyZW50OnRoaXMuY29udGV4dC52aXN1YWxFbGVtZW50fTt0aGlzLmNoaWxkcmVuLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLnN5bmNDb250ZXh0LmFkZCh0KX0pKSx0aGlzLnN5bmNDb250ZXh0LmZsdXNoKG4pLHRoaXMuc3RhY2tzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsZWFyU25hcHNob3QoKX0pKX0sdC5wcm90b3R5cGUudXBkYXRlU3RhY2tzPWZ1bmN0aW9uKCl7dGhpcy5zdGFja3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudXBkYXRlTGVhZEFuZEZvbGxvdygpfSkpfSx0LnByb3RvdHlwZS5zY2hlZHVsZVVwZGF0ZT1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT0hMSksIWUmJnRoaXMudXBkYXRlU2NoZWR1bGVkfHwodGhpcy51cGRhdGVTY2hlZHVsZWQ9ITAsdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSExLG49e30scj0wO3I8ei5sZW5ndGg7cisrKXt2YXIgbz1cInJvdGF0ZVwiK3pbcl07ZS5oYXNWYWx1ZShvKSYmMCE9PWUuZ2V0U3RhdGljVmFsdWUobykmJih0PSEwLG5bb109ZS5nZXRTdGF0aWNWYWx1ZShvKSxlLnNldFN0YXRpY1ZhbHVlKG8sMCkpfWlmKHQpe2Zvcih2YXIgbyBpbiBlLnN5bmNSZW5kZXIoKSxuKWUuc2V0U3RhdGljVmFsdWUobyxuW29dKTtlLnNjaGVkdWxlUmVuZGVyKCl9fShlKSxlLnNob3VsZFJlc2V0VHJhbnNmb3JtKCkmJmUucmVzZXRUcmFuc2Zvcm0oKX0pKSx0aGlzLmNoaWxkcmVuLmZvckVhY2goQW4pLHRoaXMuc3RhY2tzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnVwZGF0ZVNuYXBzaG90KCl9KSksIWUmJnRoaXMucmVuZGVyU2NoZWR1bGVkfHwodGhpcy5yZW5kZXJTY2hlZHVsZWQ9ITAsdGhpcy5mb3JjZVVwZGF0ZSgpKSl9LHQucHJvdG90eXBlLmFkZENoaWxkPWZ1bmN0aW9uKGUpe3RoaXMuY2hpbGRyZW4uYWRkKGUpLHRoaXMuYWRkVG9TdGFjayhlKSxlLnByZXNlbmNlPXRoaXMuaGFzTW91bnRlZD9pci5FbnRlcmluZzppci5QcmVzZW50fSx0LnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbihlKXt0aGlzLnNjaGVkdWxlVXBkYXRlKCksdGhpcy5jaGlsZHJlbi5kZWxldGUoZSksdGhpcy5yZW1vdmVGcm9tU3RhY2soZSl9LHQucHJvdG90eXBlLmFkZFRvU3RhY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRTdGFjayhlKTtudWxsPT10fHx0LmFkZChlKX0sdC5wcm90b3R5cGUucmVtb3ZlRnJvbVN0YWNrPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0U3RhY2soZSk7bnVsbD09dHx8dC5yZW1vdmUoZSl9LHQucHJvdG90eXBlLmdldFN0YWNrPWZ1bmN0aW9uKGUpe3ZhciB0LG4sbyxpLGEsbCxzLGMsdT1lLmdldExheW91dElkKCk7aWYodm9pZCAwIT09dSlyZXR1cm4hdGhpcy5zdGFja3MuaGFzKHUpJiZ0aGlzLnN0YWNrcy5zZXQodSwoaT1uZXcgU2V0LGE9e2xlYWRJc0V4aXRpbmc6ITF9LGw9ci5fX2Fzc2lnbih7fSxhKSxzPXVvKCksYz0hMSx7YWRkOmZ1bmN0aW9uKGUpe2Uuc2V0Q3Jvc3NmYWRlcihzKSxpLmFkZChlKSxvJiYoZS5wcmV2RHJhZ0N1cnNvcj1vKSxhLmxlYWR8fChhLmxlYWQ9ZSl9LHJlbW92ZTpmdW5jdGlvbihlKXtpLmRlbGV0ZShlKX0sZ2V0TGVhZDpmdW5jdGlvbigpe3JldHVybiBhLmxlYWR9LHVwZGF0ZVNuYXBzaG90OmZ1bmN0aW9uKCl7aWYoYS5sZWFkKXt0PXMuaXNBY3RpdmUoKT9zLmdldExhdGVzdFZhbHVlcygpOmEubGVhZC5nZXRMYXRlc3RWYWx1ZXMoKSxuPWEubGVhZC5wcmV2Vmlld3BvcnRCb3g7dmFyIGU9bnIuZ2V0KGEubGVhZCk7ZSYmZS5pc0RyYWdnaW5nJiYobz1lLmN1cnNvclByb2dyZXNzKX19LGNsZWFyU25hcHNob3Q6ZnVuY3Rpb24oKXtvPW49dm9pZCAwfSx1cGRhdGVMZWFkQW5kRm9sbG93OmZ1bmN0aW9uKCl7dmFyIGUsbixvO2w9ci5fX2Fzc2lnbih7fSxhKTtmb3IodmFyIHU9QXJyYXkuZnJvbShpKSxmPXUubGVuZ3RoO2YtLTtmPj0wKXt2YXIgZD11W2ZdO2lmKG4mJihudWxsIT1vfHwobz1kKSksbnVsbCE9bnx8KG49ZCksbiYmbylicmVha31hLmxlYWQ9bixhLmZvbGxvdz1vLGEubGVhZElzRXhpdGluZz0obnVsbD09PShlPWEubGVhZCl8fHZvaWQgMD09PWU/dm9pZCAwOmUucHJlc2VuY2UpPT09aXIuRXhpdGluZyxzLnNldE9wdGlvbnMoe2xlYWQ6bixmb2xsb3c6byxwcmV2VmFsdWVzOnQsY3Jvc3NmYWRlT3BhY2l0eToobnVsbD09bz92b2lkIDA6by5pc1ByZXNlbmNlUm9vdCl8fChudWxsPT1uP3ZvaWQgMDpuLmlzUHJlc2VuY2VSb290KX0pLGEubGVhZD09PWwuZm9sbG93fHxsLmxlYWQ9PT1hLmxlYWQmJmwubGVhZElzRXhpdGluZz09PWEubGVhZElzRXhpdGluZ3x8KGM9ITApfSxhbmltYXRlOmZ1bmN0aW9uKGUsdCl7dmFyIHI7aWYodm9pZCAwPT09dCYmKHQ9ITEpLGU9PT1hLmxlYWQpe3Q/ZS5wb2ludFRvKGEubGVhZCk6ZS5zZXRWaXNpYmlsaXR5KCEwKTt2YXIgbz17fSxpPW51bGw9PT0ocj1hLmZvbGxvdyl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0UHJvamVjdGlvblBhcmVudCgpO2lmKGkmJihvLnByZXZQYXJlbnQ9aSksZS5wcmVzZW5jZT09PWlyLkVudGVyaW5nP28ub3JpZ2luQm94PWEuZm9sbG93P2EuZm9sbG93LnByZXZWaWV3cG9ydEJveDpuOmUucHJlc2VuY2U9PT1pci5FeGl0aW5nJiYoby50YXJnZXRCb3g9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gbnVsbD09PShlPWEuZm9sbG93KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dH0oKSksYyl7Yz0hMTt2YXIgbD1lLmdldERlZmF1bHRUcmFuc2l0aW9uKCk7ZS5wcmVzZW5jZT09PWlyLkVudGVyaW5nP3MudG9MZWFkKGwpOnMuZnJvbUxlYWQobCl9ZS5ub3RpZnlMYXlvdXRSZWFkeShvKX1lbHNlIHQ/YS5sZWFkJiZlLnBvaW50VG8oYS5sZWFkKTplLnNldFZpc2liaWxpdHkoITEpfX0pKSx0aGlzLnN0YWNrcy5nZXQodSl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB1LmNyZWF0ZUVsZW1lbnQoX3IuUHJvdmlkZXIse3ZhbHVlOnRoaXMuc3luY0NvbnRleHR9LHRoaXMucHJvcHMuY2hpbGRyZW4pfSx0LmNvbnRleHRUeXBlPXcsdH0odS5Db21wb25lbnQpO2Z1bmN0aW9uIHlvKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGV9dmFyIHdvPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7cmVuZGVyZXI6ZW99LG9uKSxwdCksYm89ci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sd28pLGxyKSxTcik7ZnVuY3Rpb24geG8oZSl7dmFyIHQ9XygoZnVuY3Rpb24oKXtyZXR1cm4gVnQoZSl9KSk7aWYoby51c2VDb250ZXh0KHkpLmlzU3RhdGljKXt2YXIgbj1yLl9fcmVhZChvLnVzZVN0YXRlKGUpLDIpWzFdO28udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiB0Lm9uQ2hhbmdlKG4pfSksW10pfXJldHVybiB0fWZ1bmN0aW9uIF9vKGUsdCl7by51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7aWYoZWUoZSkpcmV0dXJuIGUub25DaGFuZ2UodCl9KSxbdF0pfWZ1bmN0aW9uIE9vKGUsdCl7dmFyIG49eG8odCgpKSxyPWZ1bmN0aW9uKCl7cmV0dXJuIG4uc2V0KHQoKSl9O3JldHVybiByKCksZnVuY3Rpb24oZSx0KXtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXt2YXIgbj1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUub25DaGFuZ2UodCl9KSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUoKX0pKX19KSl9KGUsKGZ1bmN0aW9uKCl7cmV0dXJuIGQuZGVmYXVsdC51cGRhdGUociwhMSwhMCl9KSksbn12YXIgTG8sRW89ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLm1peH0oZSk/ZS5taXg6dm9pZCAwfTtmdW5jdGlvbiBTbygpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTt2YXIgbj0hQXJyYXkuaXNBcnJheShlWzBdKSxvPW4/MDotMSxpPWVbMCtvXSxhPWVbMStvXSxzPWVbMitvXSxjPWVbMytvXSx1PWwuaW50ZXJwb2xhdGUoYSxzLHIuX19hc3NpZ24oe21peGVyOkVvKHNbMF0pfSxjKSk7cmV0dXJuIG4/dShpKTp1fWZ1bmN0aW9uIGpvKGUsdCxuLG8pe3ZhciBpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpTbyh0LG4sbyk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/TW8oZSxpKTpNbyhbZV0sKGZ1bmN0aW9uKGUpe3ZhciB0PXIuX19yZWFkKGUsMSlbMF07cmV0dXJuIGkodCl9KSl9ZnVuY3Rpb24gTW8oZSx0KXt2YXIgbj1fKChmdW5jdGlvbigpe3JldHVybltdfSkpO3JldHVybiBPbyhlLChmdW5jdGlvbigpe24ubGVuZ3RoPTA7Zm9yKHZhciByPWUubGVuZ3RoLG89MDtvPHI7bysrKW5bb109ZVtvXS5nZXQoKTtyZXR1cm4gdChuKX0pKX1mdW5jdGlvbiBrbygpe3JldHVybntzY3JvbGxYOlZ0KDApLHNjcm9sbFk6VnQoMCksc2Nyb2xsWFByb2dyZXNzOlZ0KDApLHNjcm9sbFlQcm9ncmVzczpWdCgwKX19ZnVuY3Rpb24gUm8oZSx0LG4pe24uc2V0KGUmJnQ/ZS90OjApfWZ1bmN0aW9uIFBvKGUsdCl7dmFyIG49ZnVuY3Rpb24oKXt2YXIgbj10KCkscj1uLnhPZmZzZXQsbz1uLnlPZmZzZXQsaT1uLnhNYXhPZmZzZXQsYT1uLnlNYXhPZmZzZXQ7ZS5zY3JvbGxYLnNldChyKSxlLnNjcm9sbFkuc2V0KG8pLFJvKHIsaSxlLnNjcm9sbFhQcm9ncmVzcyksUm8obyxhLGUuc2Nyb2xsWVByb2dyZXNzKX07cmV0dXJuIG4oKSxufWZ1bmN0aW9uIElvKCl7cmV0dXJue3hPZmZzZXQ6d2luZG93LnBhZ2VYT2Zmc2V0LHlPZmZzZXQ6d2luZG93LnBhZ2VZT2Zmc2V0LHhNYXhPZmZzZXQ6ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aC13aW5kb3cuaW5uZXJXaWR0aCx5TWF4T2Zmc2V0OmRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0LXdpbmRvdy5pbm5lckhlaWdodH19dmFyIEFvLFRvPSExO2Z1bmN0aW9uIEhvKCl7dmFyIGU9ITEsdD1bXSxuPW5ldyBTZXQsbz17c3Vic2NyaWJlOmZ1bmN0aW9uKGUpe3JldHVybiBuLmFkZChlKSxmdW5jdGlvbigpe24uZGVsZXRlKGUpfX0sc3RhcnQ6ZnVuY3Rpb24ocixvKXtpZihlKXt2YXIgaT1bXTtyZXR1cm4gbi5mb3JFYWNoKChmdW5jdGlvbihlKXtpLnB1c2goWXQoZSxyLHt0cmFuc2l0aW9uT3ZlcnJpZGU6b30pKX0pKSxQcm9taXNlLmFsbChpKX1yZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3QucHVzaCh7YW5pbWF0aW9uOltyLG9dLHJlc29sdmU6ZX0pfSkpfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGkuaW52YXJpYW50KGUsXCJjb250cm9scy5zZXQoKSBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBjb21wb25lbnQgaGFzIG1vdW50ZWQuIENvbnNpZGVyIGNhbGxpbmcgd2l0aGluIGEgdXNlRWZmZWN0IGhvb2suXCIpLG4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7QXJyYXkuaXNBcnJheSh0KT9XdChlLHQpOlwic3RyaW5nXCI9PXR5cGVvZiB0P1d0KGUsW3RdKTpVdChlLHQpfShlLHQpfSkpfSxzdG9wOmZ1bmN0aW9uKCl7bi5mb3JFYWNoKChmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7ZS5mb3JFYWNoVmFsdWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0b3AoKX0pKX0oZSl9KSl9LG1vdW50OmZ1bmN0aW9uKCl7cmV0dXJuIGU9ITAsdC5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmFuaW1hdGlvbixuPWUucmVzb2x2ZTtvLnN0YXJ0LmFwcGx5KG8sci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKHQpKSkudGhlbihuKX0pKSxmdW5jdGlvbigpe2U9ITEsby5zdG9wKCl9fX07cmV0dXJuIG99dmFyIEJvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuY29tcG9uZW50Q29udHJvbHM9bmV3IFNldH1yZXR1cm4gZS5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuY29tcG9uZW50Q29udHJvbHMuYWRkKGUpLGZ1bmN0aW9uKCl7cmV0dXJuIHQuY29tcG9uZW50Q29udHJvbHMuZGVsZXRlKGUpfX0sZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmNvbXBvbmVudENvbnRyb2xzLmZvckVhY2goKGZ1bmN0aW9uKG4pe24uc3RhcnQoZS5uYXRpdmVFdmVudHx8ZSx0KX0pKX0sZS5wcm90b3R5cGUudXBkYXRlQ29uc3RyYWludHM9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9ITApLHRoaXMuY29tcG9uZW50Q29udHJvbHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS51cGRhdGVDb25zdHJhaW50cygpfSkpLGUmJlFuKCl9LGV9KCksVm89ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEJvfSxEbz1mdW5jdGlvbigpe3JldHVybnt9fSxabz1Ucih7YnVpbGQ6ZnVuY3Rpb24oKXt9LG1lYXN1cmVWaWV3cG9ydEJveDpmdW5jdGlvbigpe3JldHVybnt4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fX0scmVzZXRUcmFuc2Zvcm06ZnVuY3Rpb24oKXt9LHJlc3RvcmVUcmFuc2Zvcm06ZnVuY3Rpb24oKXt9LHJlbW92ZVZhbHVlRnJvbVJlbmRlclN0YXRlOmZ1bmN0aW9uKCl7fSxyZW5kZXI6ZnVuY3Rpb24oKXt9LHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczpEbyxyZWFkVmFsdWVGcm9tSW5zdGFuY2U6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuLmluaXRpYWxTdGF0ZVt0XXx8MH0sbWFrZVRhcmdldEFuaW1hdGFibGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnRyYW5zaXRpb24sbz10LnRyYW5zaXRpb25FbmQsaT1yLl9fcmVzdCh0LFtcInRyYW5zaXRpb25cIixcInRyYW5zaXRpb25FbmRcIl0pO3JldHVybiB6dChlLGkscXQoaSxufHx7fSxlKSksci5fX2Fzc2lnbih7dHJhbnNpdGlvbjpuLHRyYW5zaXRpb25FbmQ6b30saSl9fSksJG89VGUoe3NjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczpEbyxjcmVhdGVSZW5kZXJTdGF0ZTpEb30pLE5vPWZ1bmN0aW9uKGUpe3JldHVybiBlPi4wMDE/MS9lOjFlNX0sRm89ITE7dC5BbmltYXRlUHJlc2VuY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPWUuY3VzdG9tLGk9ZS5pbml0aWFsLGE9dm9pZCAwPT09aXx8aSxsPWUub25FeGl0Q29tcGxldGUscz1lLmV4aXRCZWZvcmVFbnRlcixjPWUucHJlc2VuY2VBZmZlY3RzTGF5b3V0LGY9dm9pZCAwPT09Y3x8YyxkPWZ1bmN0aW9uKCl7dmFyIGU9by51c2VSZWYoITEpLHQ9ci5fX3JlYWQoby51c2VTdGF0ZSgwKSwyKSxuPXRbMF0saT10WzFdO3JldHVybiBmdCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5jdXJyZW50PSEwfSkpLG8udXNlQ2FsbGJhY2soKGZ1bmN0aW9uKCl7IWUuY3VycmVudCYmaShuKzEpfSksW25dKX0oKSxwPW8udXNlQ29udGV4dChfcik7THIocCkmJihkPXAuZm9yY2VVcGRhdGUpO3ZhciBoPW8udXNlUmVmKCEwKSxnPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBvLkNoaWxkcmVuLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7by5pc1ZhbGlkRWxlbWVudChlKSYmdC5wdXNoKGUpfSkpLHR9KHQpLHY9by51c2VSZWYoZyksbT1vLnVzZVJlZihuZXcgTWFwKS5jdXJyZW50LEM9by51c2VSZWYobmV3IFNldCkuY3VycmVudDtpZihmdW5jdGlvbihlLHQpe2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49c28oZSk7dC5zZXQobixlKX0pKX0oZyxtKSxoLmN1cnJlbnQpcmV0dXJuIGguY3VycmVudD0hMSx1LmNyZWF0ZUVsZW1lbnQodS5GcmFnbWVudCxudWxsLGcubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdS5jcmVhdGVFbGVtZW50KGFvLHtrZXk6c28oZSksaXNQcmVzZW50OiEwLGluaXRpYWw6ISFhJiZ2b2lkIDAscHJlc2VuY2VBZmZlY3RzTGF5b3V0OmZ9LGUpfSkpKTtmb3IodmFyIHk9ci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKGcpKSx3PXYuY3VycmVudC5tYXAoc28pLGI9Zy5tYXAoc28pLHg9dy5sZW5ndGgsXz0wO188eDtfKyspe3ZhciBPPXdbX107LTE9PT1iLmluZGV4T2YoTyk/Qy5hZGQoTyk6Qy5kZWxldGUoTyl9cmV0dXJuIHMmJkMuc2l6ZSYmKHk9W10pLEMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoLTE9PT1iLmluZGV4T2YoZSkpe3ZhciB0PW0uZ2V0KGUpO2lmKHQpe3ZhciByPXcuaW5kZXhPZihlKTt5LnNwbGljZShyLDAsdS5jcmVhdGVFbGVtZW50KGFvLHtrZXk6c28odCksaXNQcmVzZW50OiExLG9uRXhpdENvbXBsZXRlOmZ1bmN0aW9uKCl7bS5kZWxldGUoZSksQy5kZWxldGUoZSk7dmFyIHQ9di5jdXJyZW50LmZpbmRJbmRleCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5PT09ZX0pKTt2LmN1cnJlbnQuc3BsaWNlKHQsMSksQy5zaXplfHwodi5jdXJyZW50PWcsZCgpLGwmJmwoKSl9LGN1c3RvbTpuLHByZXNlbmNlQWZmZWN0c0xheW91dDpmfSx0KSl9fX0pKSx5PXkubWFwKChmdW5jdGlvbihlKXt2YXIgdD1lLmtleTtyZXR1cm4gQy5oYXModCk/ZTp1LmNyZWF0ZUVsZW1lbnQoYW8se2tleTpzbyhlKSxpc1ByZXNlbnQ6ITAscHJlc2VuY2VBZmZlY3RzTGF5b3V0OmZ9LGUpfSkpLHYuY3VycmVudD15LHUuY3JlYXRlRWxlbWVudCh1LkZyYWdtZW50LG51bGwsQy5zaXplP3k6eS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBvLmNsb25lRWxlbWVudChlKX0pKSl9LHQuQW5pbWF0ZVNoYXJlZExheW91dD1Dbyx0LkRyYWdDb250cm9scz1Cbyx0LkZsYXRUcmVlPUFyLHQuRnJhbWVyVHJlZUxheW91dENvbnRleHQ9T3IsdC5MYXlvdXRHcm91cENvbnRleHQ9TSx0LkxhenlNb3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPWUuZmVhdHVyZXMsaT1lLnN0cmljdCxhPXZvaWQgMCE9PWkmJmksbD1yLl9fcmVhZChvLnVzZVN0YXRlKCF5byhuKSksMilbMV0scz1vLnVzZVJlZih2b2lkIDApO2lmKCF5byhuKSl7dmFyIGM9bi5yZW5kZXJlcixmPXIuX19yZXN0KG4sW1wicmVuZGVyZXJcIl0pO3MuY3VycmVudD1jLGcoZil9cmV0dXJuIG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3lvKG4pJiZuKCkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZW5kZXJlcjtnKHIuX19yZXN0KGUsW1wicmVuZGVyZXJcIl0pKSxzLmN1cnJlbnQ9dCxsKCEwKX0pKX0pLFtdKSx1LmNyZWF0ZUVsZW1lbnQodi5Qcm92aWRlcix7dmFsdWU6e3JlbmRlcmVyOnMuY3VycmVudCxzdHJpY3Q6YX19LHQpfSx0Lk1vdGlvbkNvbmZpZz1mdW5jdGlvbihlKXt2YXIgdD1lLmNoaWxkcmVuLG49ci5fX3Jlc3QoZSxbXCJjaGlsZHJlblwiXSk7KG49ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG8udXNlQ29udGV4dCh5KSksbikpLmlzU3RhdGljPV8oKGZ1bmN0aW9uKCl7cmV0dXJuIG4uaXNTdGF0aWN9KSk7dmFyIGk9XCJvYmplY3RcIj09dHlwZW9mIG4udHJhbnNpdGlvbj9uLnRyYW5zaXRpb24udG9TdHJpbmcoKTpcIlwiLGE9by51c2VNZW1vKChmdW5jdGlvbigpe3JldHVybiBufSksW2ksbi50cmFuc2Zvcm1QYWdlUG9pbnRdKTtyZXR1cm4gdS5jcmVhdGVFbGVtZW50KHkuUHJvdmlkZXIse3ZhbHVlOmF9LHQpfSx0Lk1vdGlvbkNvbmZpZ0NvbnRleHQ9eSx0Lk1vdGlvblZhbHVlPUJ0LHQuUHJlc2VuY2VDb250ZXh0PXgsdC5TaGFyZWRMYXlvdXRDb250ZXh0PV9yLHQuYWRkU2NhbGVDb3JyZWN0aW9uPVcsdC5hbmltYXRlPWNvLHQuYW5pbWF0ZVZpc3VhbEVsZW1lbnQ9WXQsdC5hbmltYXRpb25Db250cm9scz1Ibyx0LmJhdGNoTGF5b3V0PUpuLHQuY3JlYXRlQmF0Y2hlcj1icix0LmNyZWF0ZUNyb3NzZmFkZXI9dW8sdC5jcmVhdGVEb21Nb3Rpb25Db21wb25lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFooWmUoZSx7Zm9yd2FyZE1vdGlvblByb3BzOiExfSx0byxlbykpfSx0LmNyZWF0ZU1vdGlvbkNvbXBvbmVudD1aLHQuZG9tQW5pbWF0aW9uPXdvLHQuZG9tTWF4PWJvLHQuZmx1c2hMYXlvdXQ9UW4sdC5pc1ZhbGlkTW90aW9uUHJvcD1mZSx0Lm09cm8sdC5tb3Rpb249bm8sdC5tb3Rpb25WYWx1ZT1WdCx0LnJlc29sdmVNb3Rpb25WYWx1ZT1JZSx0LnNuYXBzaG90Vmlld3BvcnRCb3g9QW4sdC50cmFuc2Zvcm09U28sdC51c2VBbmltYXRpb249ZnVuY3Rpb24oKXt2YXIgZT1fKEhvKTtyZXR1cm4gby51c2VFZmZlY3QoZS5tb3VudCxbXSksZX0sdC51c2VDeWNsZT1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTt2YXIgbj1vLnVzZVJlZigwKSxpPXIuX19yZWFkKG8udXNlU3RhdGUoZVtuLmN1cnJlbnRdKSwyKSxhPWlbMF0scz1pWzFdO3JldHVyblthLGZ1bmN0aW9uKHQpe24uY3VycmVudD1cIm51bWJlclwiIT10eXBlb2YgdD9sLndyYXAoMCxlLmxlbmd0aCxuLmN1cnJlbnQrMSk6dCxzKGVbbi5jdXJyZW50XSl9XX0sdC51c2VEZXByZWNhdGVkQW5pbWF0ZWRTdGF0ZT1mdW5jdGlvbihlKXt2YXIgdD1yLl9fcmVhZChvLnVzZVN0YXRlKGUpLDIpLG49dFswXSxpPXRbMV0sYT0kbyh7fSwhMSksbD1fKChmdW5jdGlvbigpe3JldHVybiBabyh7cHJvcHM6e30sdmlzdWFsU3RhdGU6YX0se2luaXRpYWxTdGF0ZTplfSl9KSk7cmV0dXJuIG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiBsLm1vdW50KHt9KSxsLnVubW91bnQoKX0pLFtdKSxvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtsLnNldFByb3BzKHtvblVwZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gaShyLl9fYXNzaWduKHt9LGUpKX19KX0pKSxbbixfKChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gWXQobCxlKX19KSldfSx0LnVzZURlcHJlY2F0ZWRJbnZlcnRlZFNjYWxlPWZ1bmN0aW9uKGUpe3ZhciB0PXhvKDEpLG49eG8oMSkscj1iKCk7cmV0dXJuIGkuaW52YXJpYW50KCEoIWUmJiFyKSxcIklmIG5vIHNjYWxlIHZhbHVlcyBhcmUgcHJvdmlkZWQsIHVzZUludmVydGVkU2NhbGUgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIGNoaWxkIG9mIGFub3RoZXIgbW90aW9uIGNvbXBvbmVudC5cIiksaS53YXJuaW5nKEZvLFwidXNlSW52ZXJ0ZWRTY2FsZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gMy4wLiBVc2UgdGhlIGxheW91dCBwcm9wIGluc3RlYWQuXCIpLEZvPSEwLGU/KHQ9ZS5zY2FsZVh8fHQsbj1lLnNjYWxlWXx8bik6ciYmKHQ9ci5nZXRWYWx1ZShcInNjYWxlWFwiLDEpLG49ci5nZXRWYWx1ZShcInNjYWxlWVwiLDEpKSx7c2NhbGVYOmpvKHQsTm8pLHNjYWxlWTpqbyhuLE5vKX19LHQudXNlRG9tRXZlbnQ9TmUsdC51c2VEcmFnQ29udHJvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gXyhWbyl9LHQudXNlRWxlbWVudFNjcm9sbD1mdW5jdGlvbihlKXt2YXIgdD1fKGtvKTtyZXR1cm4gUigoZnVuY3Rpb24oKXt2YXIgbj1lLmN1cnJlbnQ7aWYoaS5pbnZhcmlhbnQoISFuLFwicmVmIHByb3ZpZGVkIHRvIHVzZVNjcm9sbCBtdXN0IGJlIHBhc3NlZCBpbnRvIGEgSFRNTCBlbGVtZW50LlwiKSxuKXt2YXIgcj1Qbyh0LGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybnt4T2Zmc2V0OmUuc2Nyb2xsTGVmdCx5T2Zmc2V0OmUuc2Nyb2xsVG9wLHhNYXhPZmZzZXQ6ZS5zY3JvbGxXaWR0aC1lLm9mZnNldFdpZHRoLHlNYXhPZmZzZXQ6ZS5zY3JvbGxIZWlnaHQtZS5vZmZzZXRIZWlnaHR9fX0obikpLG89JGUobixcInNjcm9sbFwiLHIse3Bhc3NpdmU6ITB9KSxhPSRlKG4sXCJyZXNpemVcIixyKTtyZXR1cm4gZnVuY3Rpb24oKXtvJiZvKCksYSYmYSgpfX19KSxbXSksdH0sdC51c2VJc1ByZXNlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gTChvLnVzZUNvbnRleHQoeCkpfSx0LnVzZU1vdGlvblRlbXBsYXRlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3ZhciByPWUubGVuZ3RoO3JldHVybiBPbyh0LChmdW5jdGlvbigpe2Zvcih2YXIgbj1cIlwiLG89MDtvPHI7bysrKW4rPWVbb10sdFtvXSYmKG4rPXRbb10uZ2V0KCkpO3JldHVybiBufSkpfSx0LnVzZU1vdGlvblZhbHVlPXhvLHQudXNlUHJlc2VuY2U9Tyx0LnVzZVJlZHVjZWRNb3Rpb249ZnVuY3Rpb24oKXshQW8mJmZ1bmN0aW9uKCl7aWYoQW89VnQobnVsbCksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdylpZih3aW5kb3cubWF0Y2hNZWRpYSl7dmFyIGU9d2luZG93Lm1hdGNoTWVkaWEoXCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbilcIiksdD1mdW5jdGlvbigpe3JldHVybiBBby5zZXQoZS5tYXRjaGVzKX07ZS5hZGRMaXN0ZW5lcih0KSx0KCl9ZWxzZSBBby5zZXQoITEpfSgpO3ZhciBlPXIuX19yZWFkKG8udXNlU3RhdGUoQW8uZ2V0KCkpLDIpLHQ9ZVswXSxuPWVbMV07cmV0dXJuIF9vKEFvLG4pLHR9LHQudXNlU3ByaW5nPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9e30pO3ZhciBuPW8udXNlQ29udGV4dCh5KS5pc1N0YXRpYyxpPW8udXNlUmVmKG51bGwpLGE9eG8oZWUoZSk/ZS5nZXQoKTplKTtyZXR1cm4gby51c2VNZW1vKChmdW5jdGlvbigpe3JldHVybiBhLmF0dGFjaCgoZnVuY3Rpb24oZSxvKXtyZXR1cm4gbj9vKGUpOihpLmN1cnJlbnQmJmkuY3VycmVudC5zdG9wKCksaS5jdXJyZW50PWwuYW5pbWF0ZShyLl9fYXNzaWduKHIuX19hc3NpZ24oe2Zyb206YS5nZXQoKSx0bzplLHZlbG9jaXR5OmEuZ2V0VmVsb2NpdHkoKX0sdCkse29uVXBkYXRlOm99KSksYS5nZXQoKSl9KSl9KSxPYmplY3QudmFsdWVzKHQpKSxfbyhlLChmdW5jdGlvbihlKXtyZXR1cm4gYS5zZXQocGFyc2VGbG9hdChlKSl9KSksYX0sdC51c2VUcmFuc2Zvcm09am8sdC51c2VWZWxvY2l0eT1mdW5jdGlvbihlKXt2YXIgdD14byhlLmdldFZlbG9jaXR5KCkpO3JldHVybiBvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gZS52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLmFkZCgoZnVuY3Rpb24oZSl7dC5zZXQoZSl9KSl9KSxbZV0pLHR9LHQudXNlVmlld3BvcnRTY3JvbGw9ZnVuY3Rpb24oKXtyZXR1cm4gTG98fChMbz1rbygpKSxSKChmdW5jdGlvbigpeyFUbyYmZnVuY3Rpb24oKXtpZihUbz0hMCxcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXt2YXIgZT1QbyhMbyxJbyk7JGUod2luZG93LFwic2Nyb2xsXCIsZSx7cGFzc2l2ZTohMH0pLCRlKHdpbmRvdyxcInJlc2l6ZVwiLGUpfX0oKX0pLFtdKSxMb30sdC52aXN1YWxFbGVtZW50PVRyfSw0ODM5OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49MS82MCoxZTMscj1cInVuZGVmaW5lZFwiIT10eXBlb2YgcGVyZm9ybWFuY2U/ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OmZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9LG89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz9mdW5jdGlvbihlKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIGUocigpKX0pLG4pfSxpPSEwLGE9ITEsbD0hMSxzPXtkZWx0YTowLHRpbWVzdGFtcDowfSxjPVtcInJlYWRcIixcInVwZGF0ZVwiLFwicHJlUmVuZGVyXCIsXCJyZW5kZXJcIixcInBvc3RSZW5kZXJcIl0sdT1jLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XT1mdW5jdGlvbihlKXt2YXIgdD1bXSxuPVtdLHI9MCxvPSExLGk9bmV3IFdlYWtTZXQsYT17c2NoZWR1bGU6ZnVuY3Rpb24oZSxhLGwpe3ZvaWQgMD09PWEmJihhPSExKSx2b2lkIDA9PT1sJiYobD0hMSk7dmFyIHM9bCYmbyxjPXM/dDpuO3JldHVybiBhJiZpLmFkZChlKSwtMT09PWMuaW5kZXhPZihlKSYmKGMucHVzaChlKSxzJiZvJiYocj10Lmxlbmd0aCkpLGV9LGNhbmNlbDpmdW5jdGlvbihlKXt2YXIgdD1uLmluZGV4T2YoZSk7LTEhPT10JiZuLnNwbGljZSh0LDEpLGkuZGVsZXRlKGUpfSxwcm9jZXNzOmZ1bmN0aW9uKGwpe3ZhciBzO2lmKG89ITAsdD0ocz1bbix0XSlbMF0sKG49c1sxXSkubGVuZ3RoPTAscj10Lmxlbmd0aClmb3IodmFyIGM9MDtjPHI7YysrKXt2YXIgdT10W2NdO3UobCksaS5oYXModSkmJihhLnNjaGVkdWxlKHUpLGUoKSl9bz0hMX19O3JldHVybiBhfSgoZnVuY3Rpb24oKXtyZXR1cm4gYT0hMH0pKSxlfSkse30pLGY9Yy5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7dmFyIG49dVt0XTtyZXR1cm4gZVt0XT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHZvaWQgMD09PXQmJih0PSExKSx2b2lkIDA9PT1yJiYocj0hMSksYXx8digpLG4uc2NoZWR1bGUoZSx0LHIpfSxlfSkse30pLGQ9Yy5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09dVt0XS5jYW5jZWwsZX0pLHt9KSxwPWMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPWZ1bmN0aW9uKCl7cmV0dXJuIHVbdF0ucHJvY2VzcyhzKX0sZX0pLHt9KSxoPWZ1bmN0aW9uKGUpe3JldHVybiB1W2VdLnByb2Nlc3Mocyl9LGc9ZnVuY3Rpb24oZSl7YT0hMSxzLmRlbHRhPWk/bjpNYXRoLm1heChNYXRoLm1pbihlLXMudGltZXN0YW1wLDQwKSwxKSxzLnRpbWVzdGFtcD1lLGw9ITAsYy5mb3JFYWNoKGgpLGw9ITEsYSYmKGk9ITEsbyhnKSl9LHY9ZnVuY3Rpb24oKXthPSEwLGk9ITAsbHx8byhnKX07dC5jYW5jZWxTeW5jPWQsdC5kZWZhdWx0PWYsdC5mbHVzaFN5bmM9cCx0LmdldEZyYW1lRGF0YT1mdW5jdGlvbigpe3JldHVybiBzfX0sNDM5NDooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtpbnZhcmlhbnQ6KCk9Pm8sd2FybmluZzooKT0+cn0pO3ZhciByPWZ1bmN0aW9uKCl7fSxvPWZ1bmN0aW9uKCl7fX0sNzczOihlLHQsbik9Pnt2YXIgcixvPVwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfX1wiLGk9L15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLyxhPVwib2JqZWN0XCI9PXR5cGVvZiBuLmcmJm4uZyYmbi5nLk9iamVjdD09PU9iamVjdCYmbi5nLGw9XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLHM9YXx8bHx8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpLGM9QXJyYXkucHJvdG90eXBlLHU9RnVuY3Rpb24ucHJvdG90eXBlLGY9T2JqZWN0LnByb3RvdHlwZSxkPXNbXCJfX2NvcmUtanNfc2hhcmVkX19cIl0scD0ocj0vW14uXSskLy5leGVjKGQmJmQua2V5cyYmZC5rZXlzLklFX1BST1RPfHxcIlwiKSk/XCJTeW1ib2woc3JjKV8xLlwiK3I6XCJcIixoPXUudG9TdHJpbmcsZz1mLmhhc093blByb3BlcnR5LHY9Zi50b1N0cmluZyxtPVJlZ0V4cChcIl5cIitoLmNhbGwoZykucmVwbGFjZSgvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csXCJcXFxcJCZcIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZyxcIiQxLio/XCIpK1wiJFwiKSxDPWMuc3BsaWNlLHk9RShzLFwiTWFwXCIpLHc9RShPYmplY3QsXCJjcmVhdGVcIik7ZnVuY3Rpb24gYihlKXt2YXIgdD0tMSxuPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiB4KGUpe3ZhciB0PS0xLG49ZT9lLmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PG47KXt2YXIgcj1lW3RdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWZ1bmN0aW9uIF8oZSl7dmFyIHQ9LTEsbj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gTyhlLHQpe2Zvcih2YXIgbixyLG89ZS5sZW5ndGg7by0tOylpZigobj1lW29dWzBdKT09PShyPXQpfHxuIT1uJiZyIT1yKXJldHVybiBvO3JldHVybi0xfWZ1bmN0aW9uIEwoZSx0KXt2YXIgbixyLG89ZS5fX2RhdGFfXztyZXR1cm4oXCJzdHJpbmdcIj09KHI9dHlwZW9mKG49dCkpfHxcIm51bWJlclwiPT1yfHxcInN5bWJvbFwiPT1yfHxcImJvb2xlYW5cIj09cj9cIl9fcHJvdG9fX1wiIT09bjpudWxsPT09bik/b1tcInN0cmluZ1wiPT10eXBlb2YgdD9cInN0cmluZ1wiOlwiaGFzaFwiXTpvLm1hcH1mdW5jdGlvbiBFKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZVt0XX0oZSx0KTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoIWooZSl8fHAmJnAgaW4gZSlyZXR1cm4hMTt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdD1qKGUpP3YuY2FsbChlKTpcIlwiO3JldHVyblwiW29iamVjdCBGdW5jdGlvbl1cIj09dHx8XCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXVwiPT10fShlKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9ITE7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZS50b1N0cmluZyl0cnl7dD0hIShlK1wiXCIpfWNhdGNoKGUpe31yZXR1cm4gdH0oZSk/bTppO3JldHVybiB0LnRlc3QoZnVuY3Rpb24oZSl7aWYobnVsbCE9ZSl7dHJ5e3JldHVybiBoLmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZStcIlwifWNhdGNoKGUpe319cmV0dXJuXCJcIn0oZSkpfShuKT9uOnZvaWQgMH1mdW5jdGlvbiBTKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZXx8dCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiKTt2YXIgbj1mdW5jdGlvbigpe3ZhciByPWFyZ3VtZW50cyxvPXQ/dC5hcHBseSh0aGlzLHIpOnJbMF0saT1uLmNhY2hlO2lmKGkuaGFzKG8pKXJldHVybiBpLmdldChvKTt2YXIgYT1lLmFwcGx5KHRoaXMscik7cmV0dXJuIG4uY2FjaGU9aS5zZXQobyxhKSxhfTtyZXR1cm4gbi5jYWNoZT1uZXcoUy5DYWNoZXx8Xyksbn1mdW5jdGlvbiBqKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiEhZSYmKFwib2JqZWN0XCI9PXR8fFwiZnVuY3Rpb25cIj09dCl9Yi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPXc/dyhudWxsKTp7fX0sYi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV19LGIucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKHcpe3ZhciBuPXRbZV07cmV0dXJuIG49PT1vP3ZvaWQgMDpufXJldHVybiBnLmNhbGwodCxlKT90W2VdOnZvaWQgMH0sYi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIHc/dm9pZCAwIT09dFtlXTpnLmNhbGwodCxlKX0sYi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX19kYXRhX19bZV09dyYmdm9pZCAwPT09dD9vOnQsdGhpc30seC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVtdfSx4LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPU8odCxlKTtyZXR1cm4hKG48MHx8KG49PXQubGVuZ3RoLTE/dC5wb3AoKTpDLmNhbGwodCxuLDEpLDApKX0seC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1PKHQsZSk7cmV0dXJuIG48MD92b2lkIDA6dFtuXVsxXX0seC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBPKHRoaXMuX19kYXRhX18sZSk+LTF9LHgucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX19kYXRhX18scj1PKG4sZSk7cmV0dXJuIHI8MD9uLnB1c2goW2UsdF0pOm5bcl1bMV09dCx0aGlzfSxfLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189e2hhc2g6bmV3IGIsbWFwOm5ldyh5fHx4KSxzdHJpbmc6bmV3IGJ9fSxfLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7cmV0dXJuIEwodGhpcyxlKS5kZWxldGUoZSl9LF8ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gTCh0aGlzLGUpLmdldChlKX0sXy5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBMKHRoaXMsZSkuaGFzKGUpfSxfLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTCh0aGlzLGUpLnNldChlLHQpLHRoaXN9LFMuQ2FjaGU9XyxlLmV4cG9ydHM9U30sNjQ4NjpmdW5jdGlvbihlLHQsbil7dmFyIHI7ZT1uLm5tZChlKSxmdW5jdGlvbigpe3ZhciBvLGk9XCJFeHBlY3RlZCBhIGZ1bmN0aW9uXCIsYT1cIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX19cIixsPVwiX19sb2Rhc2hfcGxhY2Vob2xkZXJfX1wiLHM9MzIsYz0xMjgsdT0xLzAsZj05MDA3MTk5MjU0NzQwOTkxLGQ9TmFOLHA9NDI5NDk2NzI5NSxoPVtbXCJhcnlcIixjXSxbXCJiaW5kXCIsMV0sW1wiYmluZEtleVwiLDJdLFtcImN1cnJ5XCIsOF0sW1wiY3VycnlSaWdodFwiLDE2XSxbXCJmbGlwXCIsNTEyXSxbXCJwYXJ0aWFsXCIsc10sW1wicGFydGlhbFJpZ2h0XCIsNjRdLFtcInJlYXJnXCIsMjU2XV0sZz1cIltvYmplY3QgQXJndW1lbnRzXVwiLHY9XCJbb2JqZWN0IEFycmF5XVwiLG09XCJbb2JqZWN0IEJvb2xlYW5dXCIsQz1cIltvYmplY3QgRGF0ZV1cIix5PVwiW29iamVjdCBFcnJvcl1cIix3PVwiW29iamVjdCBGdW5jdGlvbl1cIixiPVwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIix4PVwiW29iamVjdCBNYXBdXCIsXz1cIltvYmplY3QgTnVtYmVyXVwiLE89XCJbb2JqZWN0IE9iamVjdF1cIixMPVwiW29iamVjdCBQcm9taXNlXVwiLEU9XCJbb2JqZWN0IFJlZ0V4cF1cIixTPVwiW29iamVjdCBTZXRdXCIsaj1cIltvYmplY3QgU3RyaW5nXVwiLE09XCJbb2JqZWN0IFN5bWJvbF1cIixrPVwiW29iamVjdCBXZWFrTWFwXVwiLFI9XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiLFA9XCJbb2JqZWN0IERhdGFWaWV3XVwiLEk9XCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIixBPVwiW29iamVjdCBGbG9hdDY0QXJyYXldXCIsVD1cIltvYmplY3QgSW50OEFycmF5XVwiLEg9XCJbb2JqZWN0IEludDE2QXJyYXldXCIsQj1cIltvYmplY3QgSW50MzJBcnJheV1cIixWPVwiW29iamVjdCBVaW50OEFycmF5XVwiLEQ9XCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiLFo9XCJbb2JqZWN0IFVpbnQxNkFycmF5XVwiLCQ9XCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiLE49L1xcYl9fcCBcXCs9ICcnOy9nLEY9L1xcYihfX3AgXFwrPSkgJycgXFwrL2csVT0vKF9fZVxcKC4qP1xcKXxcXGJfX3RcXCkpIFxcK1xcbicnOy9nLFc9LyYoPzphbXB8bHR8Z3R8cXVvdHwjMzkpOy9nLHo9L1smPD5cIiddL2csRz1SZWdFeHAoVy5zb3VyY2UpLHE9UmVnRXhwKHouc291cmNlKSxZPS88JS0oW1xcc1xcU10rPyklPi9nLEs9LzwlKFtcXHNcXFNdKz8pJT4vZyxYPS88JT0oW1xcc1xcU10rPyklPi9nLEo9L1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxRPS9eXFx3KiQvLGVlPS9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZyx0ZT0vW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csbmU9UmVnRXhwKHRlLnNvdXJjZSkscmU9L15cXHMrLyxvZT0vXFxzLyxpZT0vXFx7KD86XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAuK1xcXSBcXCpcXC8pP1xcbj8vLGFlPS9cXHtcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoICguKylcXF0gXFwqLyxsZT0vLD8gJiAvLHNlPS9bXlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceDdmXSsvZyxjZT0vWygpPSx7fVxcW1xcXVxcL1xcc10vLHVlPS9cXFxcKFxcXFwpPy9nLGZlPS9cXCRcXHsoW15cXFxcfV0qKD86XFxcXC5bXlxcXFx9XSopKilcXH0vZyxkZT0vXFx3KiQvLHBlPS9eWy0rXTB4WzAtOWEtZl0rJC9pLGhlPS9eMGJbMDFdKyQvaSxnZT0vXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvLHZlPS9eMG9bMC03XSskL2ksbWU9L14oPzowfFsxLTldXFxkKikkLyxDZT0vW1xceGMwLVxceGQ2XFx4ZDgtXFx4ZjZcXHhmOC1cXHhmZlxcdTAxMDAtXFx1MDE3Zl0vZyx5ZT0vKCReKS8sd2U9L1snXFxuXFxyXFx1MjAyOFxcdTIwMjlcXFxcXS9nLGJlPVwiXFxcXHVkODAwLVxcXFx1ZGZmZlwiLHhlPVwiXFxcXHUwMzAwLVxcXFx1MDM2ZlxcXFx1ZmUyMC1cXFxcdWZlMmZcXFxcdTIwZDAtXFxcXHUyMGZmXCIsX2U9XCJcXFxcdTI3MDAtXFxcXHUyN2JmXCIsT2U9XCJhLXpcXFxceGRmLVxcXFx4ZjZcXFxceGY4LVxcXFx4ZmZcIixMZT1cIkEtWlxcXFx4YzAtXFxcXHhkNlxcXFx4ZDgtXFxcXHhkZVwiLEVlPVwiXFxcXHVmZTBlXFxcXHVmZTBmXCIsU2U9XCJcXFxceGFjXFxcXHhiMVxcXFx4ZDdcXFxceGY3XFxcXHgwMC1cXFxceDJmXFxcXHgzYS1cXFxceDQwXFxcXHg1Yi1cXFxceDYwXFxcXHg3Yi1cXFxceGJmXFxcXHUyMDAwLVxcXFx1MjA2ZiBcXFxcdFxcXFx4MGJcXFxcZlxcXFx4YTBcXFxcdWZlZmZcXFxcblxcXFxyXFxcXHUyMDI4XFxcXHUyMDI5XFxcXHUxNjgwXFxcXHUxODBlXFxcXHUyMDAwXFxcXHUyMDAxXFxcXHUyMDAyXFxcXHUyMDAzXFxcXHUyMDA0XFxcXHUyMDA1XFxcXHUyMDA2XFxcXHUyMDA3XFxcXHUyMDA4XFxcXHUyMDA5XFxcXHUyMDBhXFxcXHUyMDJmXFxcXHUyMDVmXFxcXHUzMDAwXCIsamU9XCJbXCIrYmUrXCJdXCIsTWU9XCJbXCIrU2UrXCJdXCIsa2U9XCJbXCIreGUrXCJdXCIsUmU9XCJcXFxcZCtcIixQZT1cIltcIitfZStcIl1cIixJZT1cIltcIitPZStcIl1cIixBZT1cIlteXCIrYmUrU2UrUmUrX2UrT2UrTGUrXCJdXCIsVGU9XCJcXFxcdWQ4M2NbXFxcXHVkZmZiLVxcXFx1ZGZmZl1cIixIZT1cIlteXCIrYmUrXCJdXCIsQmU9XCIoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9XCIsVmU9XCJbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl1cIixEZT1cIltcIitMZStcIl1cIixaZT1cIlxcXFx1MjAwZFwiLCRlPVwiKD86XCIrSWUrXCJ8XCIrQWUrXCIpXCIsTmU9XCIoPzpcIitEZStcInxcIitBZStcIilcIixGZT1cIig/Olsn4oCZXSg/OmR8bGx8bXxyZXxzfHR8dmUpKT9cIixVZT1cIig/Olsn4oCZXSg/OkR8TEx8TXxSRXxTfFR8VkUpKT9cIixXZT1cIig/OlwiK2tlK1wifFwiK1RlK1wiKT9cIix6ZT1cIltcIitFZStcIl0/XCIsR2U9emUrV2UrXCIoPzpcIitaZStcIig/OlwiK1tIZSxCZSxWZV0uam9pbihcInxcIikrXCIpXCIremUrV2UrXCIpKlwiLHFlPVwiKD86XCIrW1BlLEJlLFZlXS5qb2luKFwifFwiKStcIilcIitHZSxZZT1cIig/OlwiK1tIZStrZStcIj9cIixrZSxCZSxWZSxqZV0uam9pbihcInxcIikrXCIpXCIsS2U9UmVnRXhwKFwiWyfigJldXCIsXCJnXCIpLFhlPVJlZ0V4cChrZSxcImdcIiksSmU9UmVnRXhwKFRlK1wiKD89XCIrVGUrXCIpfFwiK1llK0dlLFwiZ1wiKSxRZT1SZWdFeHAoW0RlK1wiP1wiK0llK1wiK1wiK0ZlK1wiKD89XCIrW01lLERlLFwiJFwiXS5qb2luKFwifFwiKStcIilcIixOZStcIitcIitVZStcIig/PVwiK1tNZSxEZSskZSxcIiRcIl0uam9pbihcInxcIikrXCIpXCIsRGUrXCI/XCIrJGUrXCIrXCIrRmUsRGUrXCIrXCIrVWUsXCJcXFxcZCooPzoxU1R8Mk5EfDNSRHwoPyFbMTIzXSlcXFxcZFRIKSg/PVxcXFxifFthLXpfXSlcIixcIlxcXFxkKig/OjFzdHwybmR8M3JkfCg/IVsxMjNdKVxcXFxkdGgpKD89XFxcXGJ8W0EtWl9dKVwiLFJlLHFlXS5qb2luKFwifFwiKSxcImdcIiksZXQ9UmVnRXhwKFwiW1wiK1plK2JlK3hlK0VlK1wiXVwiKSx0dD0vW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyxudD1bXCJBcnJheVwiLFwiQnVmZmVyXCIsXCJEYXRhVmlld1wiLFwiRGF0ZVwiLFwiRXJyb3JcIixcIkZsb2F0MzJBcnJheVwiLFwiRmxvYXQ2NEFycmF5XCIsXCJGdW5jdGlvblwiLFwiSW50OEFycmF5XCIsXCJJbnQxNkFycmF5XCIsXCJJbnQzMkFycmF5XCIsXCJNYXBcIixcIk1hdGhcIixcIk9iamVjdFwiLFwiUHJvbWlzZVwiLFwiUmVnRXhwXCIsXCJTZXRcIixcIlN0cmluZ1wiLFwiU3ltYm9sXCIsXCJUeXBlRXJyb3JcIixcIlVpbnQ4QXJyYXlcIixcIlVpbnQ4Q2xhbXBlZEFycmF5XCIsXCJVaW50MTZBcnJheVwiLFwiVWludDMyQXJyYXlcIixcIldlYWtNYXBcIixcIl9cIixcImNsZWFyVGltZW91dFwiLFwiaXNGaW5pdGVcIixcInBhcnNlSW50XCIsXCJzZXRUaW1lb3V0XCJdLHJ0PS0xLG90PXt9O290W0ldPW90W0FdPW90W1RdPW90W0hdPW90W0JdPW90W1ZdPW90W0RdPW90W1pdPW90WyRdPSEwLG90W2ddPW90W3ZdPW90W1JdPW90W21dPW90W1BdPW90W0NdPW90W3ldPW90W3ddPW90W3hdPW90W19dPW90W09dPW90W0VdPW90W1NdPW90W2pdPW90W2tdPSExO3ZhciBpdD17fTtpdFtnXT1pdFt2XT1pdFtSXT1pdFtQXT1pdFttXT1pdFtDXT1pdFtJXT1pdFtBXT1pdFtUXT1pdFtIXT1pdFtCXT1pdFt4XT1pdFtfXT1pdFtPXT1pdFtFXT1pdFtTXT1pdFtqXT1pdFtNXT1pdFtWXT1pdFtEXT1pdFtaXT1pdFskXT0hMCxpdFt5XT1pdFt3XT1pdFtrXT0hMTt2YXIgYXQ9e1wiXFxcXFwiOlwiXFxcXFwiLFwiJ1wiOlwiJ1wiLFwiXFxuXCI6XCJuXCIsXCJcXHJcIjpcInJcIixcIlxcdTIwMjhcIjpcInUyMDI4XCIsXCJcXHUyMDI5XCI6XCJ1MjAyOVwifSxsdD1wYXJzZUZsb2F0LHN0PXBhcnNlSW50LGN0PVwib2JqZWN0XCI9PXR5cGVvZiBuLmcmJm4uZyYmbi5nLk9iamVjdD09PU9iamVjdCYmbi5nLHV0PVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmdD1jdHx8dXR8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxkdD10JiYhdC5ub2RlVHlwZSYmdCxwdD1kdCYmZSYmIWUubm9kZVR5cGUmJmUsaHQ9cHQmJnB0LmV4cG9ydHM9PT1kdCxndD1odCYmY3QucHJvY2Vzcyx2dD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gcHQmJnB0LnJlcXVpcmUmJnB0LnJlcXVpcmUoXCJ1dGlsXCIpLnR5cGVzfHxndCYmZ3QuYmluZGluZyYmZ3QuYmluZGluZyhcInV0aWxcIil9Y2F0Y2goZSl7fX0oKSxtdD12dCYmdnQuaXNBcnJheUJ1ZmZlcixDdD12dCYmdnQuaXNEYXRlLHl0PXZ0JiZ2dC5pc01hcCx3dD12dCYmdnQuaXNSZWdFeHAsYnQ9dnQmJnZ0LmlzU2V0LHh0PXZ0JiZ2dC5pc1R5cGVkQXJyYXk7ZnVuY3Rpb24gX3QoZSx0LG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodCk7Y2FzZSAxOnJldHVybiBlLmNhbGwodCxuWzBdKTtjYXNlIDI6cmV0dXJuIGUuY2FsbCh0LG5bMF0sblsxXSk7Y2FzZSAzOnJldHVybiBlLmNhbGwodCxuWzBdLG5bMV0sblsyXSl9cmV0dXJuIGUuYXBwbHkodCxuKX1mdW5jdGlvbiBPdChlLHQsbixyKXtmb3IodmFyIG89LTEsaT1udWxsPT1lPzA6ZS5sZW5ndGg7KytvPGk7KXt2YXIgYT1lW29dO3QocixhLG4oYSksZSl9cmV0dXJuIHJ9ZnVuY3Rpb24gTHQoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7KytuPHImJiExIT09dChlW25dLG4sZSk7KTtyZXR1cm4gZX1mdW5jdGlvbiBFdChlLHQpe2Zvcih2YXIgbj1udWxsPT1lPzA6ZS5sZW5ndGg7bi0tJiYhMSE9PXQoZVtuXSxuLGUpOyk7cmV0dXJuIGV9ZnVuY3Rpb24gU3QoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7KytuPHI7KWlmKCF0KGVbbl0sbixlKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBqdChlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aCxvPTAsaT1bXTsrK248cjspe3ZhciBhPWVbbl07dChhLG4sZSkmJihpW28rK109YSl9cmV0dXJuIGl9ZnVuY3Rpb24gTXQoZSx0KXtyZXR1cm4hKG51bGw9PWV8fCFlLmxlbmd0aCkmJkR0KGUsdCwwKT4tMX1mdW5jdGlvbiBrdChlLHQsbil7Zm9yKHZhciByPS0xLG89bnVsbD09ZT8wOmUubGVuZ3RoOysrcjxvOylpZihuKHQsZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gUnQoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGgsbz1BcnJheShyKTsrK248cjspb1tuXT10KGVbbl0sbixlKTtyZXR1cm4gb31mdW5jdGlvbiBQdChlLHQpe2Zvcih2YXIgbj0tMSxyPXQubGVuZ3RoLG89ZS5sZW5ndGg7KytuPHI7KWVbbytuXT10W25dO3JldHVybiBlfWZ1bmN0aW9uIEl0KGUsdCxuLHIpe3ZhciBvPS0xLGk9bnVsbD09ZT8wOmUubGVuZ3RoO2ZvcihyJiZpJiYobj1lWysrb10pOysrbzxpOyluPXQobixlW29dLG8sZSk7cmV0dXJuIG59ZnVuY3Rpb24gQXQoZSx0LG4scil7dmFyIG89bnVsbD09ZT8wOmUubGVuZ3RoO2ZvcihyJiZvJiYobj1lWy0tb10pO28tLTspbj10KG4sZVtvXSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIFR0KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoOysrbjxyOylpZih0KGVbbl0sbixlKSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgSHQ9RnQoXCJsZW5ndGhcIik7ZnVuY3Rpb24gQnQoZSx0LG4pe3ZhciByO3JldHVybiBuKGUsKGZ1bmN0aW9uKGUsbixvKXtpZih0KGUsbixvKSlyZXR1cm4gcj1uLCExfSkpLHJ9ZnVuY3Rpb24gVnQoZSx0LG4scil7Zm9yKHZhciBvPWUubGVuZ3RoLGk9bisocj8xOi0xKTtyP2ktLTorK2k8bzspaWYodChlW2ldLGksZSkpcmV0dXJuIGk7cmV0dXJuLTF9ZnVuY3Rpb24gRHQoZSx0LG4pe3JldHVybiB0PT10P2Z1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bi0xLG89ZS5sZW5ndGg7KytyPG87KWlmKGVbcl09PT10KXJldHVybiByO3JldHVybi0xfShlLHQsbik6VnQoZSwkdCxuKX1mdW5jdGlvbiBadChlLHQsbixyKXtmb3IodmFyIG89bi0xLGk9ZS5sZW5ndGg7KytvPGk7KWlmKHIoZVtvXSx0KSlyZXR1cm4gbztyZXR1cm4tMX1mdW5jdGlvbiAkdChlKXtyZXR1cm4gZSE9ZX1mdW5jdGlvbiBOdChlLHQpe3ZhciBuPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gbj96dChlLHQpL246ZH1mdW5jdGlvbiBGdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bzp0W2VdfX1mdW5jdGlvbiBVdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PWU/bzplW3RdfX1mdW5jdGlvbiBXdChlLHQsbixyLG8pe3JldHVybiBvKGUsKGZ1bmN0aW9uKGUsbyxpKXtuPXI/KHI9ITEsZSk6dChuLGUsbyxpKX0pKSxufWZ1bmN0aW9uIHp0KGUsdCl7Zm9yKHZhciBuLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspe3ZhciBhPXQoZVtyXSk7YSE9PW8mJihuPW49PT1vP2E6bithKX1yZXR1cm4gbn1mdW5jdGlvbiBHdChlLHQpe2Zvcih2YXIgbj0tMSxyPUFycmF5KGUpOysrbjxlOylyW25dPXQobik7cmV0dXJuIHJ9ZnVuY3Rpb24gcXQoZSl7cmV0dXJuIGU/ZS5zbGljZSgwLGZuKGUpKzEpLnJlcGxhY2UocmUsXCJcIik6ZX1mdW5jdGlvbiBZdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCl9fWZ1bmN0aW9uIEt0KGUsdCl7cmV0dXJuIFJ0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkpfWZ1bmN0aW9uIFh0KGUsdCl7cmV0dXJuIGUuaGFzKHQpfWZ1bmN0aW9uIEp0KGUsdCl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGg7KytuPHImJkR0KHQsZVtuXSwwKT4tMTspO3JldHVybiBufWZ1bmN0aW9uIFF0KGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoO24tLSYmRHQodCxlW25dLDApPi0xOyk7cmV0dXJuIG59dmFyIGVuPVV0KHvDgDpcIkFcIizDgTpcIkFcIizDgjpcIkFcIizDgzpcIkFcIizDhDpcIkFcIizDhTpcIkFcIizDoDpcImFcIizDoTpcImFcIizDojpcImFcIizDozpcImFcIizDpDpcImFcIizDpTpcImFcIizDhzpcIkNcIizDpzpcImNcIizDkDpcIkRcIizDsDpcImRcIizDiDpcIkVcIizDiTpcIkVcIizDijpcIkVcIizDizpcIkVcIizDqDpcImVcIizDqTpcImVcIizDqjpcImVcIizDqzpcImVcIizDjDpcIklcIizDjTpcIklcIizDjjpcIklcIizDjzpcIklcIizDrDpcImlcIizDrTpcImlcIizDrjpcImlcIizDrzpcImlcIizDkTpcIk5cIizDsTpcIm5cIizDkjpcIk9cIizDkzpcIk9cIizDlDpcIk9cIizDlTpcIk9cIizDljpcIk9cIizDmDpcIk9cIizDsjpcIm9cIizDszpcIm9cIizDtDpcIm9cIizDtTpcIm9cIizDtjpcIm9cIizDuDpcIm9cIizDmTpcIlVcIizDmjpcIlVcIizDmzpcIlVcIizDnDpcIlVcIizDuTpcInVcIizDujpcInVcIizDuzpcInVcIizDvDpcInVcIizDnTpcIllcIizDvTpcInlcIizDvzpcInlcIizDhjpcIkFlXCIsw6Y6XCJhZVwiLMOeOlwiVGhcIizDvjpcInRoXCIsw586XCJzc1wiLMSAOlwiQVwiLMSCOlwiQVwiLMSEOlwiQVwiLMSBOlwiYVwiLMSDOlwiYVwiLMSFOlwiYVwiLMSGOlwiQ1wiLMSIOlwiQ1wiLMSKOlwiQ1wiLMSMOlwiQ1wiLMSHOlwiY1wiLMSJOlwiY1wiLMSLOlwiY1wiLMSNOlwiY1wiLMSOOlwiRFwiLMSQOlwiRFwiLMSPOlwiZFwiLMSROlwiZFwiLMSSOlwiRVwiLMSUOlwiRVwiLMSWOlwiRVwiLMSYOlwiRVwiLMSaOlwiRVwiLMSTOlwiZVwiLMSVOlwiZVwiLMSXOlwiZVwiLMSZOlwiZVwiLMSbOlwiZVwiLMScOlwiR1wiLMSeOlwiR1wiLMSgOlwiR1wiLMSiOlwiR1wiLMSdOlwiZ1wiLMSfOlwiZ1wiLMShOlwiZ1wiLMSjOlwiZ1wiLMSkOlwiSFwiLMSmOlwiSFwiLMSlOlwiaFwiLMSnOlwiaFwiLMSoOlwiSVwiLMSqOlwiSVwiLMSsOlwiSVwiLMSuOlwiSVwiLMSwOlwiSVwiLMSpOlwiaVwiLMSrOlwiaVwiLMStOlwiaVwiLMSvOlwiaVwiLMSxOlwiaVwiLMS0OlwiSlwiLMS1OlwialwiLMS2OlwiS1wiLMS3Olwia1wiLMS4Olwia1wiLMS5OlwiTFwiLMS7OlwiTFwiLMS9OlwiTFwiLMS/OlwiTFwiLMWBOlwiTFwiLMS6OlwibFwiLMS8OlwibFwiLMS+OlwibFwiLMWAOlwibFwiLMWCOlwibFwiLMWDOlwiTlwiLMWFOlwiTlwiLMWHOlwiTlwiLMWKOlwiTlwiLMWEOlwiblwiLMWGOlwiblwiLMWIOlwiblwiLMWLOlwiblwiLMWMOlwiT1wiLMWOOlwiT1wiLMWQOlwiT1wiLMWNOlwib1wiLMWPOlwib1wiLMWROlwib1wiLMWUOlwiUlwiLMWWOlwiUlwiLMWYOlwiUlwiLMWVOlwiclwiLMWXOlwiclwiLMWZOlwiclwiLMWaOlwiU1wiLMWcOlwiU1wiLMWeOlwiU1wiLMWgOlwiU1wiLMWbOlwic1wiLMWdOlwic1wiLMWfOlwic1wiLMWhOlwic1wiLMWiOlwiVFwiLMWkOlwiVFwiLMWmOlwiVFwiLMWjOlwidFwiLMWlOlwidFwiLMWnOlwidFwiLMWoOlwiVVwiLMWqOlwiVVwiLMWsOlwiVVwiLMWuOlwiVVwiLMWwOlwiVVwiLMWyOlwiVVwiLMWpOlwidVwiLMWrOlwidVwiLMWtOlwidVwiLMWvOlwidVwiLMWxOlwidVwiLMWzOlwidVwiLMW0OlwiV1wiLMW1Olwid1wiLMW2OlwiWVwiLMW3OlwieVwiLMW4OlwiWVwiLMW5OlwiWlwiLMW7OlwiWlwiLMW9OlwiWlwiLMW6OlwielwiLMW8OlwielwiLMW+OlwielwiLMSyOlwiSUpcIizEszpcImlqXCIsxZI6XCJPZVwiLMWTOlwib2VcIizFiTpcIiduXCIsxb86XCJzXCJ9KSx0bj1VdCh7XCImXCI6XCImYW1wO1wiLFwiPFwiOlwiJmx0O1wiLFwiPlwiOlwiJmd0O1wiLCdcIic6XCImcXVvdDtcIixcIidcIjpcIiYjMzk7XCJ9KTtmdW5jdGlvbiBubihlKXtyZXR1cm5cIlxcXFxcIithdFtlXX1mdW5jdGlvbiBybihlKXtyZXR1cm4gZXQudGVzdChlKX1mdW5jdGlvbiBvbihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtuWysrdF09W3IsZV19KSksbn1mdW5jdGlvbiBhbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZSh0KG4pKX19ZnVuY3Rpb24gbG4oZSx0KXtmb3IodmFyIG49LTEscj1lLmxlbmd0aCxvPTAsaT1bXTsrK248cjspe3ZhciBhPWVbbl07YSE9PXQmJmEhPT1sfHwoZVtuXT1sLGlbbysrXT1uKX1yZXR1cm4gaX1mdW5jdGlvbiBzbihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7blsrK3RdPWV9KSksbn1mdW5jdGlvbiBjbihlKXtyZXR1cm4gcm4oZSk/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PUplLmxhc3RJbmRleD0wO0plLnRlc3QoZSk7KSsrdDtyZXR1cm4gdH0oZSk6SHQoZSl9ZnVuY3Rpb24gdW4oZSl7cmV0dXJuIHJuKGUpP2Z1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKEplKXx8W119KGUpOmZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KFwiXCIpfShlKX1mdW5jdGlvbiBmbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7dC0tJiZvZS50ZXN0KGUuY2hhckF0KHQpKTspO3JldHVybiB0fXZhciBkbj1VdCh7XCImYW1wO1wiOlwiJlwiLFwiJmx0O1wiOlwiPFwiLFwiJmd0O1wiOlwiPlwiLFwiJnF1b3Q7XCI6J1wiJyxcIiYjMzk7XCI6XCInXCJ9KSxwbj1mdW5jdGlvbiBlKHQpe3ZhciBuLHI9KHQ9bnVsbD09dD9mdDpwbi5kZWZhdWx0cyhmdC5PYmplY3QoKSx0LHBuLnBpY2soZnQsbnQpKSkuQXJyYXksb2U9dC5EYXRlLGJlPXQuRXJyb3IseGU9dC5GdW5jdGlvbixfZT10Lk1hdGgsT2U9dC5PYmplY3QsTGU9dC5SZWdFeHAsRWU9dC5TdHJpbmcsU2U9dC5UeXBlRXJyb3IsamU9ci5wcm90b3R5cGUsTWU9eGUucHJvdG90eXBlLGtlPU9lLnByb3RvdHlwZSxSZT10W1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdLFBlPU1lLnRvU3RyaW5nLEllPWtlLmhhc093blByb3BlcnR5LEFlPTAsVGU9KG49L1teLl0rJC8uZXhlYyhSZSYmUmUua2V5cyYmUmUua2V5cy5JRV9QUk9UT3x8XCJcIikpP1wiU3ltYm9sKHNyYylfMS5cIituOlwiXCIsSGU9a2UudG9TdHJpbmcsQmU9UGUuY2FsbChPZSksVmU9ZnQuXyxEZT1MZShcIl5cIitQZS5jYWxsKEllKS5yZXBsYWNlKHRlLFwiXFxcXCQmXCIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csXCIkMS4qP1wiKStcIiRcIiksWmU9aHQ/dC5CdWZmZXI6bywkZT10LlN5bWJvbCxOZT10LlVpbnQ4QXJyYXksRmU9WmU/WmUuYWxsb2NVbnNhZmU6byxVZT1hbihPZS5nZXRQcm90b3R5cGVPZixPZSksV2U9T2UuY3JlYXRlLHplPWtlLnByb3BlcnR5SXNFbnVtZXJhYmxlLEdlPWplLnNwbGljZSxxZT0kZT8kZS5pc0NvbmNhdFNwcmVhZGFibGU6byxZZT0kZT8kZS5pdGVyYXRvcjpvLEplPSRlPyRlLnRvU3RyaW5nVGFnOm8sZXQ9ZnVuY3Rpb24oKXt0cnl7dmFyIGU9c2koT2UsXCJkZWZpbmVQcm9wZXJ0eVwiKTtyZXR1cm4gZSh7fSxcIlwiLHt9KSxlfWNhdGNoKGUpe319KCksYXQ9dC5jbGVhclRpbWVvdXQhPT1mdC5jbGVhclRpbWVvdXQmJnQuY2xlYXJUaW1lb3V0LGN0PW9lJiZvZS5ub3chPT1mdC5EYXRlLm5vdyYmb2Uubm93LHV0PXQuc2V0VGltZW91dCE9PWZ0LnNldFRpbWVvdXQmJnQuc2V0VGltZW91dCxkdD1fZS5jZWlsLHB0PV9lLmZsb29yLGd0PU9lLmdldE93blByb3BlcnR5U3ltYm9scyx2dD1aZT9aZS5pc0J1ZmZlcjpvLEh0PXQuaXNGaW5pdGUsVXQ9amUuam9pbixobj1hbihPZS5rZXlzLE9lKSxnbj1fZS5tYXgsdm49X2UubWluLG1uPW9lLm5vdyxDbj10LnBhcnNlSW50LHluPV9lLnJhbmRvbSx3bj1qZS5yZXZlcnNlLGJuPXNpKHQsXCJEYXRhVmlld1wiKSx4bj1zaSh0LFwiTWFwXCIpLF9uPXNpKHQsXCJQcm9taXNlXCIpLE9uPXNpKHQsXCJTZXRcIiksTG49c2kodCxcIldlYWtNYXBcIiksRW49c2koT2UsXCJjcmVhdGVcIiksU249TG4mJm5ldyBMbixqbj17fSxNbj1IaShibiksa249SGkoeG4pLFJuPUhpKF9uKSxQbj1IaShPbiksSW49SGkoTG4pLEFuPSRlPyRlLnByb3RvdHlwZTpvLFRuPUFuP0FuLnZhbHVlT2Y6byxIbj1Bbj9Bbi50b1N0cmluZzpvO2Z1bmN0aW9uIEJuKGUpe2lmKFFhKGUpJiYhTmEoZSkmJiEoZSBpbnN0YW5jZW9mICRuKSl7aWYoZSBpbnN0YW5jZW9mIFpuKXJldHVybiBlO2lmKEllLmNhbGwoZSxcIl9fd3JhcHBlZF9fXCIpKXJldHVybiBCaShlKX1yZXR1cm4gbmV3IFpuKGUpfXZhciBWbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCFKYSh0KSlyZXR1cm57fTtpZihXZSlyZXR1cm4gV2UodCk7ZS5wcm90b3R5cGU9dDt2YXIgbj1uZXcgZTtyZXR1cm4gZS5wcm90b3R5cGU9byxufX0oKTtmdW5jdGlvbiBEbigpe31mdW5jdGlvbiBabihlLHQpe3RoaXMuX193cmFwcGVkX189ZSx0aGlzLl9fYWN0aW9uc19fPVtdLHRoaXMuX19jaGFpbl9fPSEhdCx0aGlzLl9faW5kZXhfXz0wLHRoaXMuX192YWx1ZXNfXz1vfWZ1bmN0aW9uICRuKGUpe3RoaXMuX193cmFwcGVkX189ZSx0aGlzLl9fYWN0aW9uc19fPVtdLHRoaXMuX19kaXJfXz0xLHRoaXMuX19maWx0ZXJlZF9fPSExLHRoaXMuX19pdGVyYXRlZXNfXz1bXSx0aGlzLl9fdGFrZUNvdW50X189cCx0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBObihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBGbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBVbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBXbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgVW47Kyt0PG47KXRoaXMuYWRkKGVbdF0pfWZ1bmN0aW9uIHpuKGUpe3ZhciB0PXRoaXMuX19kYXRhX189bmV3IEZuKGUpO3RoaXMuc2l6ZT10LnNpemV9ZnVuY3Rpb24gR24oZSx0KXt2YXIgbj1OYShlKSxyPSFuJiYkYShlKSxvPSFuJiYhciYmemEoZSksaT0hbiYmIXImJiFvJiZsbChlKSxhPW58fHJ8fG98fGksbD1hP0d0KGUubGVuZ3RoLEVlKTpbXSxzPWwubGVuZ3RoO2Zvcih2YXIgYyBpbiBlKSF0JiYhSWUuY2FsbChlLGMpfHxhJiYoXCJsZW5ndGhcIj09Y3x8byYmKFwib2Zmc2V0XCI9PWN8fFwicGFyZW50XCI9PWMpfHxpJiYoXCJidWZmZXJcIj09Y3x8XCJieXRlTGVuZ3RoXCI9PWN8fFwiYnl0ZU9mZnNldFwiPT1jKXx8Z2koYyxzKSl8fGwucHVzaChjKTtyZXR1cm4gbH1mdW5jdGlvbiBxbihlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gdD9lW1VyKDAsdC0xKV06b31mdW5jdGlvbiBZbihlLHQpe3JldHVybiBSaShFbyhlKSxvcih0LDAsZS5sZW5ndGgpKX1mdW5jdGlvbiBLbihlKXtyZXR1cm4gUmkoRW8oZSkpfWZ1bmN0aW9uIFhuKGUsdCxuKXsobiE9PW8mJiFWYShlW3RdLG4pfHxuPT09byYmISh0IGluIGUpKSYmbnIoZSx0LG4pfWZ1bmN0aW9uIEpuKGUsdCxuKXt2YXIgcj1lW3RdO0llLmNhbGwoZSx0KSYmVmEocixuKSYmKG4hPT1vfHx0IGluIGUpfHxucihlLHQsbil9ZnVuY3Rpb24gUW4oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7bi0tOylpZihWYShlW25dWzBdLHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIGVyKGUsdCxuLHIpe3JldHVybiBjcihlLChmdW5jdGlvbihlLG8saSl7dChyLGUsbihlKSxpKX0pKSxyfWZ1bmN0aW9uIHRyKGUsdCl7cmV0dXJuIGUmJlNvKHQsTWwodCksZSl9ZnVuY3Rpb24gbnIoZSx0LG4pe1wiX19wcm90b19fXCI9PXQmJmV0P2V0KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6bix3cml0YWJsZTohMH0pOmVbdF09bn1mdW5jdGlvbiBycihlLHQpe2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLGE9cihpKSxsPW51bGw9PWU7KytuPGk7KWFbbl09bD9vOk9sKGUsdFtuXSk7cmV0dXJuIGF9ZnVuY3Rpb24gb3IoZSx0LG4pe3JldHVybiBlPT1lJiYobiE9PW8mJihlPWU8PW4/ZTpuKSx0IT09byYmKGU9ZT49dD9lOnQpKSxlfWZ1bmN0aW9uIGlyKGUsdCxuLHIsaSxhKXt2YXIgbCxzPTEmdCxjPTImdCx1PTQmdDtpZihuJiYobD1pP24oZSxyLGksYSk6bihlKSksbCE9PW8pcmV0dXJuIGw7aWYoIUphKGUpKXJldHVybiBlO3ZhciBmPU5hKGUpO2lmKGYpe2lmKGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj1uZXcgZS5jb25zdHJ1Y3Rvcih0KTtyZXR1cm4gdCYmXCJzdHJpbmdcIj09dHlwZW9mIGVbMF0mJkllLmNhbGwoZSxcImluZGV4XCIpJiYobi5pbmRleD1lLmluZGV4LG4uaW5wdXQ9ZS5pbnB1dCksbn0oZSksIXMpcmV0dXJuIEVvKGUsbCl9ZWxzZXt2YXIgZD1maShlKSxwPWQ9PXd8fGQ9PWI7aWYoemEoZSkpcmV0dXJuIHdvKGUscyk7aWYoZD09T3x8ZD09Z3x8cCYmIWkpe2lmKGw9Y3x8cD97fTpwaShlKSwhcylyZXR1cm4gYz9mdW5jdGlvbihlLHQpe3JldHVybiBTbyhlLHVpKGUpLHQpfShlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJlNvKHQsa2wodCksZSl9KGwsZSkpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFNvKGUsY2koZSksdCl9KGUsdHIobCxlKSl9ZWxzZXtpZighaXRbZF0pcmV0dXJuIGk/ZTp7fTtsPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvPWUuY29uc3RydWN0b3I7c3dpdGNoKHQpe2Nhc2UgUjpyZXR1cm4gYm8oZSk7Y2FzZSBtOmNhc2UgQzpyZXR1cm4gbmV3IG8oK2UpO2Nhc2UgUDpyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj10P2JvKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IobixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKX0oZSxuKTtjYXNlIEk6Y2FzZSBBOmNhc2UgVDpjYXNlIEg6Y2FzZSBCOmNhc2UgVjpjYXNlIEQ6Y2FzZSBaOmNhc2UgJDpyZXR1cm4geG8oZSxuKTtjYXNlIHg6cmV0dXJuIG5ldyBvO2Nhc2UgXzpjYXNlIGo6cmV0dXJuIG5ldyBvKGUpO2Nhc2UgRTpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5zb3VyY2UsZGUuZXhlYyhlKSk7cmV0dXJuIHQubGFzdEluZGV4PWUubGFzdEluZGV4LHR9KGUpO2Nhc2UgUzpyZXR1cm4gbmV3IG87Y2FzZSBNOnJldHVybiByPWUsVG4/T2UoVG4uY2FsbChyKSk6e319fShlLGQscyl9fWF8fChhPW5ldyB6bik7dmFyIGg9YS5nZXQoZSk7aWYoaClyZXR1cm4gaDthLnNldChlLGwpLG9sKGUpP2UuZm9yRWFjaCgoZnVuY3Rpb24ocil7bC5hZGQoaXIocix0LG4scixlLGEpKX0pKTplbChlKSYmZS5mb3JFYWNoKChmdW5jdGlvbihyLG8pe2wuc2V0KG8saXIocix0LG4sbyxlLGEpKX0pKTt2YXIgdj1mP286KHU/Yz90aTplaTpjP2tsOk1sKShlKTtyZXR1cm4gTHQodnx8ZSwoZnVuY3Rpb24ocixvKXt2JiYocj1lW289cl0pLEpuKGwsbyxpcihyLHQsbixvLGUsYSkpfSkpLGx9ZnVuY3Rpb24gYXIoZSx0LG4pe3ZhciByPW4ubGVuZ3RoO2lmKG51bGw9PWUpcmV0dXJuIXI7Zm9yKGU9T2UoZSk7ci0tOyl7dmFyIGk9bltyXSxhPXRbaV0sbD1lW2ldO2lmKGw9PT1vJiYhKGkgaW4gZSl8fCFhKGwpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGxyKGUsdCxuKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTtyZXR1cm4gU2koKGZ1bmN0aW9uKCl7ZS5hcHBseShvLG4pfSksdCl9ZnVuY3Rpb24gc3IoZSx0LG4scil7dmFyIG89LTEsaT1NdCxhPSEwLGw9ZS5sZW5ndGgscz1bXSxjPXQubGVuZ3RoO2lmKCFsKXJldHVybiBzO24mJih0PVJ0KHQsWXQobikpKSxyPyhpPWt0LGE9ITEpOnQubGVuZ3RoPj0yMDAmJihpPVh0LGE9ITEsdD1uZXcgV24odCkpO2U6Zm9yKDsrK288bDspe3ZhciB1PWVbb10sZj1udWxsPT1uP3U6bih1KTtpZih1PXJ8fDAhPT11P3U6MCxhJiZmPT1mKXtmb3IodmFyIGQ9YztkLS07KWlmKHRbZF09PT1mKWNvbnRpbnVlIGU7cy5wdXNoKHUpfWVsc2UgaSh0LGYscil8fHMucHVzaCh1KX1yZXR1cm4gc31Cbi50ZW1wbGF0ZVNldHRpbmdzPXtlc2NhcGU6WSxldmFsdWF0ZTpLLGludGVycG9sYXRlOlgsdmFyaWFibGU6XCJcIixpbXBvcnRzOntfOkJufX0sQm4ucHJvdG90eXBlPURuLnByb3RvdHlwZSxCbi5wcm90b3R5cGUuY29uc3RydWN0b3I9Qm4sWm4ucHJvdG90eXBlPVZuKERuLnByb3RvdHlwZSksWm4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPVpuLCRuLnByb3RvdHlwZT1WbihEbi5wcm90b3R5cGUpLCRuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0kbixObi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPUVuP0VuKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxObi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fSxObi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX187aWYoRW4pe3ZhciBuPXRbZV07cmV0dXJuIG49PT1hP286bn1yZXR1cm4gSWUuY2FsbCh0LGUpP3RbZV06b30sTm4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBFbj90W2VdIT09bzpJZS5jYWxsKHQsZSl9LE5uLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKGUpPzA6MSxuW2VdPUVuJiZ0PT09bz9hOnQsdGhpc30sRm4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sRm4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49UW4odCxlKTtyZXR1cm4hKG48MHx8KG49PXQubGVuZ3RoLTE/dC5wb3AoKTpHZS5jYWxsKHQsbiwxKSwtLXRoaXMuc2l6ZSwwKSl9LEZuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPVFuKHQsZSk7cmV0dXJuIG48MD9vOnRbbl1bMV19LEZuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIFFuKHRoaXMuX19kYXRhX18sZSk+LTF9LEZuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fLHI9UW4obixlKTtyZXR1cm4gcjwwPygrK3RoaXMuc2l6ZSxuLnB1c2goW2UsdF0pKTpuW3JdWzFdPXQsdGhpc30sVW4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgTm4sbWFwOm5ldyh4bnx8Rm4pLHN0cmluZzpuZXcgTm59fSxVbi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWFpKHRoaXMsZSkuZGVsZXRlKGUpO3JldHVybiB0aGlzLnNpemUtPXQ/MTowLHR9LFVuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFpKHRoaXMsZSkuZ2V0KGUpfSxVbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBhaSh0aGlzLGUpLmhhcyhlKX0sVW4ucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciBuPWFpKHRoaXMsZSkscj1uLnNpemU7cmV0dXJuIG4uc2V0KGUsdCksdGhpcy5zaXplKz1uLnNpemU9PXI/MDoxLHRoaXN9LFduLnByb3RvdHlwZS5hZGQ9V24ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KGUsYSksdGhpc30sV24ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9LHpuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189bmV3IEZuLHRoaXMuc2l6ZT0wfSx6bi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj10LmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplPXQuc2l6ZSxufSx6bi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChlKX0sem4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9LHpuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO2lmKG4gaW5zdGFuY2VvZiBGbil7dmFyIHI9bi5fX2RhdGFfXztpZigheG58fHIubGVuZ3RoPDE5OSlyZXR1cm4gci5wdXNoKFtlLHRdKSx0aGlzLnNpemU9KytuLnNpemUsdGhpcztuPXRoaXMuX19kYXRhX189bmV3IFVuKHIpfXJldHVybiBuLnNldChlLHQpLHRoaXMuc2l6ZT1uLnNpemUsdGhpc307dmFyIGNyPWtvKG1yKSx1cj1rbyhDciwhMCk7ZnVuY3Rpb24gZnIoZSx0KXt2YXIgbj0hMDtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLG8pe3JldHVybiBuPSEhdChlLHIsbyl9KSksbn1mdW5jdGlvbiBkcihlLHQsbil7Zm9yKHZhciByPS0xLGk9ZS5sZW5ndGg7KytyPGk7KXt2YXIgYT1lW3JdLGw9dChhKTtpZihudWxsIT1sJiYocz09PW8/bD09bCYmIWFsKGwpOm4obCxzKSkpdmFyIHM9bCxjPWF9cmV0dXJuIGN9ZnVuY3Rpb24gcHIoZSx0KXt2YXIgbj1bXTtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLG8pe3QoZSxyLG8pJiZuLnB1c2goZSl9KSksbn1mdW5jdGlvbiBocihlLHQsbixyLG8pe3ZhciBpPS0xLGE9ZS5sZW5ndGg7Zm9yKG58fChuPWhpKSxvfHwobz1bXSk7KytpPGE7KXt2YXIgbD1lW2ldO3Q+MCYmbihsKT90PjE/aHIobCx0LTEsbixyLG8pOlB0KG8sbCk6cnx8KG9bby5sZW5ndGhdPWwpfXJldHVybiBvfXZhciBncj1SbygpLHZyPVJvKCEwKTtmdW5jdGlvbiBtcihlLHQpe3JldHVybiBlJiZncihlLHQsTWwpfWZ1bmN0aW9uIENyKGUsdCl7cmV0dXJuIGUmJnZyKGUsdCxNbCl9ZnVuY3Rpb24geXIoZSx0KXtyZXR1cm4ganQodCwoZnVuY3Rpb24odCl7cmV0dXJuIFlhKGVbdF0pfSkpfWZ1bmN0aW9uIHdyKGUsdCl7Zm9yKHZhciBuPTAscj0odD12byh0LGUpKS5sZW5ndGg7bnVsbCE9ZSYmbjxyOyllPWVbVGkodFtuKytdKV07cmV0dXJuIG4mJm49PXI/ZTpvfWZ1bmN0aW9uIGJyKGUsdCxuKXt2YXIgcj10KGUpO3JldHVybiBOYShlKT9yOlB0KHIsbihlKSl9ZnVuY3Rpb24geHIoZSl7cmV0dXJuIG51bGw9PWU/ZT09PW8/XCJbb2JqZWN0IFVuZGVmaW5lZF1cIjpcIltvYmplY3QgTnVsbF1cIjpKZSYmSmUgaW4gT2UoZSk/ZnVuY3Rpb24oZSl7dmFyIHQ9SWUuY2FsbChlLEplKSxuPWVbSmVdO3RyeXtlW0plXT1vO3ZhciByPSEwfWNhdGNoKGUpe312YXIgaT1IZS5jYWxsKGUpO3JldHVybiByJiYodD9lW0plXT1uOmRlbGV0ZSBlW0plXSksaX0oZSk6ZnVuY3Rpb24oZSl7cmV0dXJuIEhlLmNhbGwoZSl9KGUpfWZ1bmN0aW9uIF9yKGUsdCl7cmV0dXJuIGU+dH1mdW5jdGlvbiBPcihlLHQpe3JldHVybiBudWxsIT1lJiZJZS5jYWxsKGUsdCl9ZnVuY3Rpb24gTHIoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmdCBpbiBPZShlKX1mdW5jdGlvbiBFcihlLHQsbil7Zm9yKHZhciBpPW4/a3Q6TXQsYT1lWzBdLmxlbmd0aCxsPWUubGVuZ3RoLHM9bCxjPXIobCksdT0xLzAsZj1bXTtzLS07KXt2YXIgZD1lW3NdO3MmJnQmJihkPVJ0KGQsWXQodCkpKSx1PXZuKGQubGVuZ3RoLHUpLGNbc109IW4mJih0fHxhPj0xMjAmJmQubGVuZ3RoPj0xMjApP25ldyBXbihzJiZkKTpvfWQ9ZVswXTt2YXIgcD0tMSxoPWNbMF07ZTpmb3IoOysrcDxhJiZmLmxlbmd0aDx1Oyl7dmFyIGc9ZFtwXSx2PXQ/dChnKTpnO2lmKGc9bnx8MCE9PWc/ZzowLCEoaD9YdChoLHYpOmkoZix2LG4pKSl7Zm9yKHM9bDstLXM7KXt2YXIgbT1jW3NdO2lmKCEobT9YdChtLHYpOmkoZVtzXSx2LG4pKSljb250aW51ZSBlfWgmJmgucHVzaCh2KSxmLnB1c2goZyl9fXJldHVybiBmfWZ1bmN0aW9uIFNyKGUsdCxuKXt2YXIgcj1udWxsPT0oZT1PaShlLHQ9dm8odCxlKSkpP2U6ZVtUaShxaSh0KSldO3JldHVybiBudWxsPT1yP286X3QocixlLG4pfWZ1bmN0aW9uIGpyKGUpe3JldHVybiBRYShlKSYmeHIoZSk9PWd9ZnVuY3Rpb24gTXIoZSx0LG4scixpKXtyZXR1cm4gZT09PXR8fChudWxsPT1lfHxudWxsPT10fHwhUWEoZSkmJiFRYSh0KT9lIT1lJiZ0IT10OmZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2YXIgbD1OYShlKSxzPU5hKHQpLGM9bD92OmZpKGUpLHU9cz92OmZpKHQpLGY9KGM9Yz09Zz9POmMpPT1PLGQ9KHU9dT09Zz9POnUpPT1PLHA9Yz09dTtpZihwJiZ6YShlKSl7aWYoIXphKHQpKXJldHVybiExO2w9ITAsZj0hMX1pZihwJiYhZilyZXR1cm4gYXx8KGE9bmV3IHpuKSxsfHxsbChlKT9KbyhlLHQsbixyLGksYSk6ZnVuY3Rpb24oZSx0LG4scixvLGksYSl7c3dpdGNoKG4pe2Nhc2UgUDppZihlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8ZS5ieXRlT2Zmc2V0IT10LmJ5dGVPZmZzZXQpcmV0dXJuITE7ZT1lLmJ1ZmZlcix0PXQuYnVmZmVyO2Nhc2UgUjpyZXR1cm4hKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHwhaShuZXcgTmUoZSksbmV3IE5lKHQpKSk7Y2FzZSBtOmNhc2UgQzpjYXNlIF86cmV0dXJuIFZhKCtlLCt0KTtjYXNlIHk6cmV0dXJuIGUubmFtZT09dC5uYW1lJiZlLm1lc3NhZ2U9PXQubWVzc2FnZTtjYXNlIEU6Y2FzZSBqOnJldHVybiBlPT10K1wiXCI7Y2FzZSB4OnZhciBsPW9uO2Nhc2UgUzp2YXIgcz0xJnI7aWYobHx8KGw9c24pLGUuc2l6ZSE9dC5zaXplJiYhcylyZXR1cm4hMTt2YXIgYz1hLmdldChlKTtpZihjKXJldHVybiBjPT10O3J8PTIsYS5zZXQoZSx0KTt2YXIgdT1KbyhsKGUpLGwodCkscixvLGksYSk7cmV0dXJuIGEuZGVsZXRlKGUpLHU7Y2FzZSBNOmlmKFRuKXJldHVybiBUbi5jYWxsKGUpPT1Ubi5jYWxsKHQpfXJldHVybiExfShlLHQsYyxuLHIsaSxhKTtpZighKDEmbikpe3ZhciBoPWYmJkllLmNhbGwoZSxcIl9fd3JhcHBlZF9fXCIpLHc9ZCYmSWUuY2FsbCh0LFwiX193cmFwcGVkX19cIik7aWYoaHx8dyl7dmFyIGI9aD9lLnZhbHVlKCk6ZSxMPXc/dC52YWx1ZSgpOnQ7cmV0dXJuIGF8fChhPW5ldyB6biksaShiLEwsbixyLGEpfX1yZXR1cm4hIXAmJihhfHwoYT1uZXcgem4pLGZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2YXIgbD0xJm4scz1laShlKSxjPXMubGVuZ3RoO2lmKGMhPWVpKHQpLmxlbmd0aCYmIWwpcmV0dXJuITE7Zm9yKHZhciB1PWM7dS0tOyl7dmFyIGY9c1t1XTtpZighKGw/ZiBpbiB0OkllLmNhbGwodCxmKSkpcmV0dXJuITF9dmFyIGQ9YS5nZXQoZSkscD1hLmdldCh0KTtpZihkJiZwKXJldHVybiBkPT10JiZwPT1lO3ZhciBoPSEwO2Euc2V0KGUsdCksYS5zZXQodCxlKTtmb3IodmFyIGc9bDsrK3U8Yzspe3ZhciB2PWVbZj1zW3VdXSxtPXRbZl07aWYocil2YXIgQz1sP3IobSx2LGYsdCxlLGEpOnIodixtLGYsZSx0LGEpO2lmKCEoQz09PW8/dj09PW18fGkodixtLG4scixhKTpDKSl7aD0hMTticmVha31nfHwoZz1cImNvbnN0cnVjdG9yXCI9PWYpfWlmKGgmJiFnKXt2YXIgeT1lLmNvbnN0cnVjdG9yLHc9dC5jb25zdHJ1Y3Rvcjt5PT13fHwhKFwiY29uc3RydWN0b3JcImluIGUpfHwhKFwiY29uc3RydWN0b3JcImluIHQpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB5JiZ5IGluc3RhbmNlb2YgeSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdyYmdyBpbnN0YW5jZW9mIHd8fChoPSExKX1yZXR1cm4gYS5kZWxldGUoZSksYS5kZWxldGUodCksaH0oZSx0LG4scixpLGEpKX0oZSx0LG4scixNcixpKSl9ZnVuY3Rpb24ga3IoZSx0LG4scil7dmFyIGk9bi5sZW5ndGgsYT1pLGw9IXI7aWYobnVsbD09ZSlyZXR1cm4hYTtmb3IoZT1PZShlKTtpLS07KXt2YXIgcz1uW2ldO2lmKGwmJnNbMl0/c1sxXSE9PWVbc1swXV06IShzWzBdaW4gZSkpcmV0dXJuITF9Zm9yKDsrK2k8YTspe3ZhciBjPShzPW5baV0pWzBdLHU9ZVtjXSxmPXNbMV07aWYobCYmc1syXSl7aWYodT09PW8mJiEoYyBpbiBlKSlyZXR1cm4hMX1lbHNle3ZhciBkPW5ldyB6bjtpZihyKXZhciBwPXIodSxmLGMsZSx0LGQpO2lmKCEocD09PW8/TXIoZix1LDMscixkKTpwKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gUnIoZSl7cmV0dXJuISghSmEoZSl8fCh0PWUsVGUmJlRlIGluIHQpKSYmKFlhKGUpP0RlOmdlKS50ZXN0KEhpKGUpKTt2YXIgdH1mdW5jdGlvbiBQcihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6bnVsbD09ZT90czpcIm9iamVjdFwiPT10eXBlb2YgZT9OYShlKT9CcihlWzBdLGVbMV0pOkhyKGUpOnVzKGUpfWZ1bmN0aW9uIElyKGUpe2lmKCF3aShlKSlyZXR1cm4gaG4oZSk7dmFyIHQ9W107Zm9yKHZhciBuIGluIE9lKGUpKUllLmNhbGwoZSxuKSYmXCJjb25zdHJ1Y3RvclwiIT1uJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gQXIoZSx0KXtyZXR1cm4gZTx0fWZ1bmN0aW9uIFRyKGUsdCl7dmFyIG49LTEsbz1VYShlKT9yKGUubGVuZ3RoKTpbXTtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLGkpe29bKytuXT10KGUscixpKX0pKSxvfWZ1bmN0aW9uIEhyKGUpe3ZhciB0PWxpKGUpO3JldHVybiAxPT10Lmxlbmd0aCYmdFswXVsyXT94aSh0WzBdWzBdLHRbMF1bMV0pOmZ1bmN0aW9uKG4pe3JldHVybiBuPT09ZXx8a3IobixlLHQpfX1mdW5jdGlvbiBCcihlLHQpe3JldHVybiBtaShlKSYmYmkodCk/eGkoVGkoZSksdCk6ZnVuY3Rpb24obil7dmFyIHI9T2wobixlKTtyZXR1cm4gcj09PW8mJnI9PT10P0xsKG4sZSk6TXIodCxyLDMpfX1mdW5jdGlvbiBWcihlLHQsbixyLGkpe2UhPT10JiZncih0LChmdW5jdGlvbihhLGwpe2lmKGl8fChpPW5ldyB6biksSmEoYSkpIWZ1bmN0aW9uKGUsdCxuLHIsaSxhLGwpe3ZhciBzPUxpKGUsbiksYz1MaSh0LG4pLHU9bC5nZXQoYyk7aWYodSlYbihlLG4sdSk7ZWxzZXt2YXIgZj1hP2EocyxjLG4rXCJcIixlLHQsbCk6byxkPWY9PT1vO2lmKGQpe3ZhciBwPU5hKGMpLGg9IXAmJnphKGMpLGc9IXAmJiFoJiZsbChjKTtmPWMscHx8aHx8Zz9OYShzKT9mPXM6V2Eocyk/Zj1FbyhzKTpoPyhkPSExLGY9d28oYywhMCkpOmc/KGQ9ITEsZj14byhjLCEwKSk6Zj1bXTpubChjKXx8JGEoYyk/KGY9cywkYShzKT9mPWdsKHMpOkphKHMpJiYhWWEocyl8fChmPXBpKGMpKSk6ZD0hMX1kJiYobC5zZXQoYyxmKSxpKGYsYyxyLGEsbCksbC5kZWxldGUoYykpLFhuKGUsbixmKX19KGUsdCxsLG4sVnIscixpKTtlbHNle3ZhciBzPXI/cihMaShlLGwpLGEsbCtcIlwiLGUsdCxpKTpvO3M9PT1vJiYocz1hKSxYbihlLGwscyl9fSksa2wpfWZ1bmN0aW9uIERyKGUsdCl7dmFyIG49ZS5sZW5ndGg7aWYobilyZXR1cm4gZ2kodCs9dDwwP246MCxuKT9lW3RdOm99ZnVuY3Rpb24gWnIoZSx0LG4pe3Q9dC5sZW5ndGg/UnQodCwoZnVuY3Rpb24oZSl7cmV0dXJuIE5hKGUpP2Z1bmN0aW9uKHQpe3JldHVybiB3cih0LDE9PT1lLmxlbmd0aD9lWzBdOmUpfTplfSkpOlt0c107dmFyIHI9LTE7dD1SdCh0LFl0KGlpKCkpKTt2YXIgbz1UcihlLChmdW5jdGlvbihlLG4sbyl7dmFyIGk9UnQodCwoZnVuY3Rpb24odCl7cmV0dXJuIHQoZSl9KSk7cmV0dXJue2NyaXRlcmlhOmksaW5kZXg6KytyLHZhbHVlOmV9fSkpO3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciByPWUubGVuZ3RoO2ZvcihlLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9LTEsbz1lLmNyaXRlcmlhLGk9dC5jcml0ZXJpYSxhPW8ubGVuZ3RoLGw9bi5sZW5ndGg7KytyPGE7KXt2YXIgcz1fbyhvW3JdLGlbcl0pO2lmKHMpcmV0dXJuIHI+PWw/czpzKihcImRlc2NcIj09bltyXT8tMToxKX1yZXR1cm4gZS5pbmRleC10LmluZGV4fShlLHQsbil9KSk7ci0tOyllW3JdPWVbcl0udmFsdWU7cmV0dXJuIGV9KG8pfWZ1bmN0aW9uICRyKGUsdCxuKXtmb3IodmFyIHI9LTEsbz10Lmxlbmd0aCxpPXt9OysrcjxvOyl7dmFyIGE9dFtyXSxsPXdyKGUsYSk7bihsLGEpJiZZcihpLHZvKGEsZSksbCl9cmV0dXJuIGl9ZnVuY3Rpb24gTnIoZSx0LG4scil7dmFyIG89cj9adDpEdCxpPS0xLGE9dC5sZW5ndGgsbD1lO2ZvcihlPT09dCYmKHQ9RW8odCkpLG4mJihsPVJ0KGUsWXQobikpKTsrK2k8YTspZm9yKHZhciBzPTAsYz10W2ldLHU9bj9uKGMpOmM7KHM9byhsLHUscyxyKSk+LTE7KWwhPT1lJiZHZS5jYWxsKGwscywxKSxHZS5jYWxsKGUscywxKTtyZXR1cm4gZX1mdW5jdGlvbiBGcihlLHQpe2Zvcih2YXIgbj1lP3QubGVuZ3RoOjAscj1uLTE7bi0tOyl7dmFyIG89dFtuXTtpZihuPT1yfHxvIT09aSl7dmFyIGk9bztnaShvKT9HZS5jYWxsKGUsbywxKTpsbyhlLG8pfX1yZXR1cm4gZX1mdW5jdGlvbiBVcihlLHQpe3JldHVybiBlK3B0KHluKCkqKHQtZSsxKSl9ZnVuY3Rpb24gV3IoZSx0KXt2YXIgbj1cIlwiO2lmKCFlfHx0PDF8fHQ+ZilyZXR1cm4gbjtkb3t0JTImJihuKz1lKSwodD1wdCh0LzIpKSYmKGUrPWUpfXdoaWxlKHQpO3JldHVybiBufWZ1bmN0aW9uIHpyKGUsdCl7cmV0dXJuIGppKF9pKGUsdCx0cyksZStcIlwiKX1mdW5jdGlvbiBHcihlKXtyZXR1cm4gcW4oVmwoZSkpfWZ1bmN0aW9uIHFyKGUsdCl7dmFyIG49VmwoZSk7cmV0dXJuIFJpKG4sb3IodCwwLG4ubGVuZ3RoKSl9ZnVuY3Rpb24gWXIoZSx0LG4scil7aWYoIUphKGUpKXJldHVybiBlO2Zvcih2YXIgaT0tMSxhPSh0PXZvKHQsZSkpLmxlbmd0aCxsPWEtMSxzPWU7bnVsbCE9cyYmKytpPGE7KXt2YXIgYz1UaSh0W2ldKSx1PW47aWYoXCJfX3Byb3RvX19cIj09PWN8fFwiY29uc3RydWN0b3JcIj09PWN8fFwicHJvdG90eXBlXCI9PT1jKXJldHVybiBlO2lmKGkhPWwpe3ZhciBmPXNbY107KHU9cj9yKGYsYyxzKTpvKT09PW8mJih1PUphKGYpP2Y6Z2kodFtpKzFdKT9bXTp7fSl9Sm4ocyxjLHUpLHM9c1tjXX1yZXR1cm4gZX12YXIgS3I9U24/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gU24uc2V0KGUsdCksZX06dHMsWHI9ZXQ/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZXQoZSxcInRvU3RyaW5nXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOkpsKHQpLHdyaXRhYmxlOiEwfSl9OnRzO2Z1bmN0aW9uIEpyKGUpe3JldHVybiBSaShWbChlKSl9ZnVuY3Rpb24gUXIoZSx0LG4pe3ZhciBvPS0xLGk9ZS5sZW5ndGg7dDwwJiYodD0tdD5pPzA6aSt0KSwobj1uPmk/aTpuKTwwJiYobis9aSksaT10Pm4/MDpuLXQ+Pj4wLHQ+Pj49MDtmb3IodmFyIGE9cihpKTsrK288aTspYVtvXT1lW28rdF07cmV0dXJuIGF9ZnVuY3Rpb24gZW8oZSx0KXt2YXIgbjtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLG8pe3JldHVybiEobj10KGUscixvKSl9KSksISFufWZ1bmN0aW9uIHRvKGUsdCxuKXt2YXIgcj0wLG89bnVsbD09ZT9yOmUubGVuZ3RoO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0PT10JiZvPD0yMTQ3NDgzNjQ3KXtmb3IoO3I8bzspe3ZhciBpPXIrbz4+PjEsYT1lW2ldO251bGwhPT1hJiYhYWwoYSkmJihuP2E8PXQ6YTx0KT9yPWkrMTpvPWl9cmV0dXJuIG99cmV0dXJuIG5vKGUsdCx0cyxuKX1mdW5jdGlvbiBubyhlLHQsbixyKXt2YXIgaT0wLGE9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKDA9PT1hKXJldHVybiAwO2Zvcih2YXIgbD0odD1uKHQpKSE9dCxzPW51bGw9PT10LGM9YWwodCksdT10PT09bztpPGE7KXt2YXIgZj1wdCgoaSthKS8yKSxkPW4oZVtmXSkscD1kIT09byxoPW51bGw9PT1kLGc9ZD09ZCx2PWFsKGQpO2lmKGwpdmFyIG09cnx8ZztlbHNlIG09dT9nJiYocnx8cCk6cz9nJiZwJiYocnx8IWgpOmM/ZyYmcCYmIWgmJihyfHwhdik6IWgmJiF2JiYocj9kPD10OmQ8dCk7bT9pPWYrMTphPWZ9cmV0dXJuIHZuKGEsNDI5NDk2NzI5NCl9ZnVuY3Rpb24gcm8oZSx0KXtmb3IodmFyIG49LTEscj1lLmxlbmd0aCxvPTAsaT1bXTsrK248cjspe3ZhciBhPWVbbl0sbD10P3QoYSk6YTtpZighbnx8IVZhKGwscykpe3ZhciBzPWw7aVtvKytdPTA9PT1hPzA6YX19cmV0dXJuIGl9ZnVuY3Rpb24gb28oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/ZTphbChlKT9kOitlfWZ1bmN0aW9uIGlvKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBlO2lmKE5hKGUpKXJldHVybiBSdChlLGlvKStcIlwiO2lmKGFsKGUpKXJldHVybiBIbj9Ibi5jYWxsKGUpOlwiXCI7dmFyIHQ9ZStcIlwiO3JldHVyblwiMFwiPT10JiYxL2U9PS0xLzA/XCItMFwiOnR9ZnVuY3Rpb24gYW8oZSx0LG4pe3ZhciByPS0xLG89TXQsaT1lLmxlbmd0aCxhPSEwLGw9W10scz1sO2lmKG4pYT0hMSxvPWt0O2Vsc2UgaWYoaT49MjAwKXt2YXIgYz10P251bGw6em8oZSk7aWYoYylyZXR1cm4gc24oYyk7YT0hMSxvPVh0LHM9bmV3IFdufWVsc2Ugcz10P1tdOmw7ZTpmb3IoOysrcjxpOyl7dmFyIHU9ZVtyXSxmPXQ/dCh1KTp1O2lmKHU9bnx8MCE9PXU/dTowLGEmJmY9PWYpe2Zvcih2YXIgZD1zLmxlbmd0aDtkLS07KWlmKHNbZF09PT1mKWNvbnRpbnVlIGU7dCYmcy5wdXNoKGYpLGwucHVzaCh1KX1lbHNlIG8ocyxmLG4pfHwocyE9PWwmJnMucHVzaChmKSxsLnB1c2godSkpfXJldHVybiBsfWZ1bmN0aW9uIGxvKGUsdCl7cmV0dXJuIG51bGw9PShlPU9pKGUsdD12byh0LGUpKSl8fGRlbGV0ZSBlW1RpKHFpKHQpKV19ZnVuY3Rpb24gc28oZSx0LG4scil7cmV0dXJuIFlyKGUsdCxuKHdyKGUsdCkpLHIpfWZ1bmN0aW9uIGNvKGUsdCxuLHIpe2Zvcih2YXIgbz1lLmxlbmd0aCxpPXI/bzotMTsocj9pLS06KytpPG8pJiZ0KGVbaV0saSxlKTspO3JldHVybiBuP1FyKGUscj8wOmkscj9pKzE6byk6UXIoZSxyP2krMTowLHI/bzppKX1mdW5jdGlvbiB1byhlLHQpe3ZhciBuPWU7cmV0dXJuIG4gaW5zdGFuY2VvZiAkbiYmKG49bi52YWx1ZSgpKSxJdCh0LChmdW5jdGlvbihlLHQpe3JldHVybiB0LmZ1bmMuYXBwbHkodC50aGlzQXJnLFB0KFtlXSx0LmFyZ3MpKX0pLG4pfWZ1bmN0aW9uIGZvKGUsdCxuKXt2YXIgbz1lLmxlbmd0aDtpZihvPDIpcmV0dXJuIG8/YW8oZVswXSk6W107Zm9yKHZhciBpPS0xLGE9cihvKTsrK2k8bzspZm9yKHZhciBsPWVbaV0scz0tMTsrK3M8bzspcyE9aSYmKGFbaV09c3IoYVtpXXx8bCxlW3NdLHQsbikpO3JldHVybiBhbyhocihhLDEpLHQsbil9ZnVuY3Rpb24gcG8oZSx0LG4pe2Zvcih2YXIgcj0tMSxpPWUubGVuZ3RoLGE9dC5sZW5ndGgsbD17fTsrK3I8aTspe3ZhciBzPXI8YT90W3JdOm87bihsLGVbcl0scyl9cmV0dXJuIGx9ZnVuY3Rpb24gaG8oZSl7cmV0dXJuIFdhKGUpP2U6W119ZnVuY3Rpb24gZ28oZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOnRzfWZ1bmN0aW9uIHZvKGUsdCl7cmV0dXJuIE5hKGUpP2U6bWkoZSx0KT9bZV06QWkodmwoZSkpfXZhciBtbz16cjtmdW5jdGlvbiBDbyhlLHQsbil7dmFyIHI9ZS5sZW5ndGg7cmV0dXJuIG49bj09PW8/cjpuLCF0JiZuPj1yP2U6UXIoZSx0LG4pfXZhciB5bz1hdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGZ0LmNsZWFyVGltZW91dChlKX07ZnVuY3Rpb24gd28oZSx0KXtpZih0KXJldHVybiBlLnNsaWNlKCk7dmFyIG49ZS5sZW5ndGgscj1GZT9GZShuKTpuZXcgZS5jb25zdHJ1Y3RvcihuKTtyZXR1cm4gZS5jb3B5KHIpLHJ9ZnVuY3Rpb24gYm8oZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IE5lKHQpLnNldChuZXcgTmUoZSkpLHR9ZnVuY3Rpb24geG8oZSx0KXt2YXIgbj10P2JvKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IobixlLmJ5dGVPZmZzZXQsZS5sZW5ndGgpfWZ1bmN0aW9uIF9vKGUsdCl7aWYoZSE9PXQpe3ZhciBuPWUhPT1vLHI9bnVsbD09PWUsaT1lPT1lLGE9YWwoZSksbD10IT09byxzPW51bGw9PT10LGM9dD09dCx1PWFsKHQpO2lmKCFzJiYhdSYmIWEmJmU+dHx8YSYmbCYmYyYmIXMmJiF1fHxyJiZsJiZjfHwhbiYmY3x8IWkpcmV0dXJuIDE7aWYoIXImJiFhJiYhdSYmZTx0fHx1JiZuJiZpJiYhciYmIWF8fHMmJm4mJml8fCFsJiZpfHwhYylyZXR1cm4tMX1yZXR1cm4gMH1mdW5jdGlvbiBPbyhlLHQsbixvKXtmb3IodmFyIGk9LTEsYT1lLmxlbmd0aCxsPW4ubGVuZ3RoLHM9LTEsYz10Lmxlbmd0aCx1PWduKGEtbCwwKSxmPXIoYyt1KSxkPSFvOysrczxjOylmW3NdPXRbc107Zm9yKDsrK2k8bDspKGR8fGk8YSkmJihmW25baV1dPWVbaV0pO2Zvcig7dS0tOylmW3MrK109ZVtpKytdO3JldHVybiBmfWZ1bmN0aW9uIExvKGUsdCxuLG8pe2Zvcih2YXIgaT0tMSxhPWUubGVuZ3RoLGw9LTEscz1uLmxlbmd0aCxjPS0xLHU9dC5sZW5ndGgsZj1nbihhLXMsMCksZD1yKGYrdSkscD0hbzsrK2k8ZjspZFtpXT1lW2ldO2Zvcih2YXIgaD1pOysrYzx1OylkW2grY109dFtjXTtmb3IoOysrbDxzOykocHx8aTxhKSYmKGRbaCtuW2xdXT1lW2krK10pO3JldHVybiBkfWZ1bmN0aW9uIEVvKGUsdCl7dmFyIG49LTEsbz1lLmxlbmd0aDtmb3IodHx8KHQ9cihvKSk7KytuPG87KXRbbl09ZVtuXTtyZXR1cm4gdH1mdW5jdGlvbiBTbyhlLHQsbixyKXt2YXIgaT0hbjtufHwobj17fSk7Zm9yKHZhciBhPS0xLGw9dC5sZW5ndGg7KythPGw7KXt2YXIgcz10W2FdLGM9cj9yKG5bc10sZVtzXSxzLG4sZSk6bztjPT09byYmKGM9ZVtzXSksaT9ucihuLHMsYyk6Sm4obixzLGMpfXJldHVybiBufWZ1bmN0aW9uIGpvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIG89TmEobik/T3Q6ZXIsaT10P3QoKTp7fTtyZXR1cm4gbyhuLGUsaWkociwyKSxpKX19ZnVuY3Rpb24gTW8oZSl7cmV0dXJuIHpyKChmdW5jdGlvbih0LG4pe3ZhciByPS0xLGk9bi5sZW5ndGgsYT1pPjE/bltpLTFdOm8sbD1pPjI/blsyXTpvO2ZvcihhPWUubGVuZ3RoPjMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGE/KGktLSxhKTpvLGwmJnZpKG5bMF0sblsxXSxsKSYmKGE9aTwzP286YSxpPTEpLHQ9T2UodCk7KytyPGk7KXt2YXIgcz1uW3JdO3MmJmUodCxzLHIsYSl9cmV0dXJuIHR9KSl9ZnVuY3Rpb24ga28oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtpZihudWxsPT1uKXJldHVybiBuO2lmKCFVYShuKSlyZXR1cm4gZShuLHIpO2Zvcih2YXIgbz1uLmxlbmd0aCxpPXQ/bzotMSxhPU9lKG4pOyh0P2ktLTorK2k8bykmJiExIT09cihhW2ldLGksYSk7KTtyZXR1cm4gbn19ZnVuY3Rpb24gUm8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtmb3IodmFyIG89LTEsaT1PZSh0KSxhPXIodCksbD1hLmxlbmd0aDtsLS07KXt2YXIgcz1hW2U/bDorK29dO2lmKCExPT09bihpW3NdLHMsaSkpYnJlYWt9cmV0dXJuIHR9fWZ1bmN0aW9uIFBvKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1ybih0PXZsKHQpKT91bih0KTpvLHI9bj9uWzBdOnQuY2hhckF0KDApLGk9bj9DbyhuLDEpLmpvaW4oXCJcIik6dC5zbGljZSgxKTtyZXR1cm4gcltlXSgpK2l9fWZ1bmN0aW9uIElvKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSXQoWWwoJGwodCkucmVwbGFjZShLZSxcIlwiKSksZSxcIlwiKX19ZnVuY3Rpb24gQW8oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgZTtjYXNlIDE6cmV0dXJuIG5ldyBlKHRbMF0pO2Nhc2UgMjpyZXR1cm4gbmV3IGUodFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdKTtjYXNlIDQ6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10pO2Nhc2UgNTpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSx0WzRdKTtjYXNlIDY6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSx0WzVdKTtjYXNlIDc6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSx0WzVdLHRbNl0pfXZhciBuPVZuKGUucHJvdG90eXBlKSxyPWUuYXBwbHkobix0KTtyZXR1cm4gSmEocik/cjpufX1mdW5jdGlvbiBUbyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe3ZhciBpPU9lKHQpO2lmKCFVYSh0KSl7dmFyIGE9aWkobiwzKTt0PU1sKHQpLG49ZnVuY3Rpb24oZSl7cmV0dXJuIGEoaVtlXSxlLGkpfX12YXIgbD1lKHQsbixyKTtyZXR1cm4gbD4tMT9pW2E/dFtsXTpsXTpvfX1mdW5jdGlvbiBIbyhlKXtyZXR1cm4gUW8oKGZ1bmN0aW9uKHQpe3ZhciBuPXQubGVuZ3RoLHI9bixhPVpuLnByb3RvdHlwZS50aHJ1O2ZvcihlJiZ0LnJldmVyc2UoKTtyLS07KXt2YXIgbD10W3JdO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGwpdGhyb3cgbmV3IFNlKGkpO2lmKGEmJiFzJiZcIndyYXBwZXJcIj09cmkobCkpdmFyIHM9bmV3IFpuKFtdLCEwKX1mb3Iocj1zP3I6bjsrK3I8bjspe3ZhciBjPXJpKGw9dFtyXSksdT1cIndyYXBwZXJcIj09Yz9uaShsKTpvO3M9dSYmQ2kodVswXSkmJjQyND09dVsxXSYmIXVbNF0ubGVuZ3RoJiYxPT11WzldP3NbcmkodVswXSldLmFwcGx5KHMsdVszXSk6MT09bC5sZW5ndGgmJkNpKGwpP3NbY10oKTpzLnRocnUobCl9cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLHI9ZVswXTtpZihzJiYxPT1lLmxlbmd0aCYmTmEocikpcmV0dXJuIHMucGxhbnQocikudmFsdWUoKTtmb3IodmFyIG89MCxpPW4/dFtvXS5hcHBseSh0aGlzLGUpOnI7KytvPG47KWk9dFtvXS5jYWxsKHRoaXMsaSk7cmV0dXJuIGl9fSkpfWZ1bmN0aW9uIEJvKGUsdCxuLGksYSxsLHMsdSxmLGQpe3ZhciBwPXQmYyxoPTEmdCxnPTImdCx2PTI0JnQsbT01MTImdCxDPWc/bzpBbyhlKTtyZXR1cm4gZnVuY3Rpb24gYygpe2Zvcih2YXIgeT1hcmd1bWVudHMubGVuZ3RoLHc9cih5KSxiPXk7Yi0tOyl3W2JdPWFyZ3VtZW50c1tiXTtpZih2KXZhciB4PW9pKGMpLF89ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgscj0wO24tLTspZVtuXT09PXQmJisrcjtyZXR1cm4gcn0odyx4KTtpZihpJiYodz1Pbyh3LGksYSx2KSksbCYmKHc9TG8odyxsLHMsdikpLHktPV8sdiYmeTxkKXt2YXIgTz1sbih3LHgpO3JldHVybiBVbyhlLHQsQm8sYy5wbGFjZWhvbGRlcixuLHcsTyx1LGYsZC15KX12YXIgTD1oP246dGhpcyxFPWc/TFtlXTplO3JldHVybiB5PXcubGVuZ3RoLHU/dz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aCxyPXZuKHQubGVuZ3RoLG4pLGk9RW8oZSk7ci0tOyl7dmFyIGE9dFtyXTtlW3JdPWdpKGEsbik/aVthXTpvfXJldHVybiBlfSh3LHUpOm0mJnk+MSYmdy5yZXZlcnNlKCkscCYmZjx5JiYody5sZW5ndGg9ZiksdGhpcyYmdGhpcyE9PWZ0JiZ0aGlzIGluc3RhbmNlb2YgYyYmKEU9Q3x8QW8oRSkpLEUuYXBwbHkoTCx3KX19ZnVuY3Rpb24gVm8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG1yKGUsKGZ1bmN0aW9uKGUsbyxpKXt0KHIsbihlKSxvLGkpfSkpLHJ9KG4sZSx0KHIpLHt9KX19ZnVuY3Rpb24gRG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2YXIgaTtpZihuPT09byYmcj09PW8pcmV0dXJuIHQ7aWYobiE9PW8mJihpPW4pLHIhPT1vKXtpZihpPT09bylyZXR1cm4gcjtcInN0cmluZ1wiPT10eXBlb2Ygbnx8XCJzdHJpbmdcIj09dHlwZW9mIHI/KG49aW8obikscj1pbyhyKSk6KG49b28obikscj1vbyhyKSksaT1lKG4scil9cmV0dXJuIGl9fWZ1bmN0aW9uIFpvKGUpe3JldHVybiBRbygoZnVuY3Rpb24odCl7cmV0dXJuIHQ9UnQodCxZdChpaSgpKSksenIoKGZ1bmN0aW9uKG4pe3ZhciByPXRoaXM7cmV0dXJuIGUodCwoZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUscixuKX0pKX0pKX0pKX1mdW5jdGlvbiAkbyhlLHQpe3ZhciBuPSh0PXQ9PT1vP1wiIFwiOmlvKHQpKS5sZW5ndGg7aWYobjwyKXJldHVybiBuP1dyKHQsZSk6dDt2YXIgcj1Xcih0LGR0KGUvY24odCkpKTtyZXR1cm4gcm4odCk/Q28odW4ociksMCxlKS5qb2luKFwiXCIpOnIuc2xpY2UoMCxlKX1mdW5jdGlvbiBObyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuLGkpe3JldHVybiBpJiZcIm51bWJlclwiIT10eXBlb2YgaSYmdmkodCxuLGkpJiYobj1pPW8pLHQ9ZmwodCksbj09PW8/KG49dCx0PTApOm49ZmwobiksZnVuY3Rpb24oZSx0LG4sbyl7Zm9yKHZhciBpPS0xLGE9Z24oZHQoKHQtZSkvKG58fDEpKSwwKSxsPXIoYSk7YS0tOylsW28/YTorK2ldPWUsZSs9bjtyZXR1cm4gbH0odCxuLGk9aT09PW8/dDxuPzE6LTE6ZmwoaSksZSl9fWZ1bmN0aW9uIEZvKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiZcInN0cmluZ1wiPT10eXBlb2Ygbnx8KHQ9aGwodCksbj1obChuKSksZSh0LG4pfX1mdW5jdGlvbiBVbyhlLHQsbixyLGksYSxsLGMsdSxmKXt2YXIgZD04JnQ7dHw9ZD9zOjY0LDQmKHQmPX4oZD82NDpzKSl8fCh0Jj0tNCk7dmFyIHA9W2UsdCxpLGQ/YTpvLGQ/bDpvLGQ/bzphLGQ/bzpsLGMsdSxmXSxoPW4uYXBwbHkobyxwKTtyZXR1cm4gQ2koZSkmJkVpKGgscCksaC5wbGFjZWhvbGRlcj1yLE1pKGgsZSx0KX1mdW5jdGlvbiBXbyhlKXt2YXIgdD1fZVtlXTtyZXR1cm4gZnVuY3Rpb24oZSxuKXtpZihlPWhsKGUpLChuPW51bGw9PW4/MDp2bihkbChuKSwyOTIpKSYmSHQoZSkpe3ZhciByPSh2bChlKStcImVcIikuc3BsaXQoXCJlXCIpO3JldHVybisoKHI9KHZsKHQoclswXStcImVcIisoK3JbMV0rbikpKStcImVcIikuc3BsaXQoXCJlXCIpKVswXStcImVcIisoK3JbMV0tbikpfXJldHVybiB0KGUpfX12YXIgem89T24mJjEvc24obmV3IE9uKFssLTBdKSlbMV09PXU/ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBPbihlKX06YXM7ZnVuY3Rpb24gR28oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPWZpKHQpO3JldHVybiBuPT14P29uKHQpOm49PVM/ZnVuY3Rpb24oZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe25bKyt0XT1bZSxlXX0pKSxufSh0KTpmdW5jdGlvbihlLHQpe3JldHVybiBSdCh0LChmdW5jdGlvbih0KXtyZXR1cm5bdCxlW3RdXX0pKX0odCxlKHQpKX19ZnVuY3Rpb24gcW8oZSx0LG4sYSx1LGYsZCxwKXt2YXIgaD0yJnQ7aWYoIWgmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFNlKGkpO3ZhciBnPWE/YS5sZW5ndGg6MDtpZihnfHwodCY9LTk3LGE9dT1vKSxkPWQ9PT1vP2Q6Z24oZGwoZCksMCkscD1wPT09bz9wOmRsKHApLGctPXU/dS5sZW5ndGg6MCw2NCZ0KXt2YXIgdj1hLG09dTthPXU9b312YXIgQz1oP286bmkoZSkseT1bZSx0LG4sYSx1LHYsbSxmLGQscF07aWYoQyYmZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdLHI9dFsxXSxvPW58cixpPW88MTMxLGE9cj09YyYmOD09bnx8cj09YyYmMjU2PT1uJiZlWzddLmxlbmd0aDw9dFs4XXx8Mzg0PT1yJiZ0WzddLmxlbmd0aDw9dFs4XSYmOD09bjtpZighaSYmIWEpcmV0dXJuIGU7MSZyJiYoZVsyXT10WzJdLG98PTEmbj8wOjQpO3ZhciBzPXRbM107aWYocyl7dmFyIHU9ZVszXTtlWzNdPXU/T28odSxzLHRbNF0pOnMsZVs0XT11P2xuKGVbM10sbCk6dFs0XX0ocz10WzVdKSYmKHU9ZVs1XSxlWzVdPXU/TG8odSxzLHRbNl0pOnMsZVs2XT11P2xuKGVbNV0sbCk6dFs2XSksKHM9dFs3XSkmJihlWzddPXMpLHImYyYmKGVbOF09bnVsbD09ZVs4XT90WzhdOnZuKGVbOF0sdFs4XSkpLG51bGw9PWVbOV0mJihlWzldPXRbOV0pLGVbMF09dFswXSxlWzFdPW99KHksQyksZT15WzBdLHQ9eVsxXSxuPXlbMl0sYT15WzNdLHU9eVs0XSwhKHA9eVs5XT15WzldPT09bz9oPzA6ZS5sZW5ndGg6Z24oeVs5XS1nLDApKSYmMjQmdCYmKHQmPS0yNSksdCYmMSE9dCl3PTg9PXR8fDE2PT10P2Z1bmN0aW9uKGUsdCxuKXt2YXIgaT1BbyhlKTtyZXR1cm4gZnVuY3Rpb24gYSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLHM9cihsKSxjPWwsdT1vaShhKTtjLS07KXNbY109YXJndW1lbnRzW2NdO3ZhciBmPWw8MyYmc1swXSE9PXUmJnNbbC0xXSE9PXU/W106bG4ocyx1KTtyZXR1cm4obC09Zi5sZW5ndGgpPG4/VW8oZSx0LEJvLGEucGxhY2Vob2xkZXIsbyxzLGYsbyxvLG4tbCk6X3QodGhpcyYmdGhpcyE9PWZ0JiZ0aGlzIGluc3RhbmNlb2YgYT9pOmUsdGhpcyxzKX19KGUsdCxwKTp0IT1zJiYzMyE9dHx8dS5sZW5ndGg/Qm8uYXBwbHkobyx5KTpmdW5jdGlvbihlLHQsbixvKXt2YXIgaT0xJnQsYT1BbyhlKTtyZXR1cm4gZnVuY3Rpb24gdCgpe2Zvcih2YXIgbD0tMSxzPWFyZ3VtZW50cy5sZW5ndGgsYz0tMSx1PW8ubGVuZ3RoLGY9cih1K3MpLGQ9dGhpcyYmdGhpcyE9PWZ0JiZ0aGlzIGluc3RhbmNlb2YgdD9hOmU7KytjPHU7KWZbY109b1tjXTtmb3IoO3MtLTspZltjKytdPWFyZ3VtZW50c1srK2xdO3JldHVybiBfdChkLGk/bjp0aGlzLGYpfX0oZSx0LG4sYSk7ZWxzZSB2YXIgdz1mdW5jdGlvbihlLHQsbil7dmFyIHI9MSZ0LG89QW8oZSk7cmV0dXJuIGZ1bmN0aW9uIHQoKXtyZXR1cm4odGhpcyYmdGhpcyE9PWZ0JiZ0aGlzIGluc3RhbmNlb2YgdD9vOmUpLmFwcGx5KHI/bjp0aGlzLGFyZ3VtZW50cyl9fShlLHQsbik7cmV0dXJuIE1pKChDP0tyOkVpKSh3LHkpLGUsdCl9ZnVuY3Rpb24gWW8oZSx0LG4scil7cmV0dXJuIGU9PT1vfHxWYShlLGtlW25dKSYmIUllLmNhbGwocixuKT90OmV9ZnVuY3Rpb24gS28oZSx0LG4scixpLGEpe3JldHVybiBKYShlKSYmSmEodCkmJihhLnNldCh0LGUpLFZyKGUsdCxvLEtvLGEpLGEuZGVsZXRlKHQpKSxlfWZ1bmN0aW9uIFhvKGUpe3JldHVybiBubChlKT9vOmV9ZnVuY3Rpb24gSm8oZSx0LG4scixpLGEpe3ZhciBsPTEmbixzPWUubGVuZ3RoLGM9dC5sZW5ndGg7aWYocyE9YyYmIShsJiZjPnMpKXJldHVybiExO3ZhciB1PWEuZ2V0KGUpLGY9YS5nZXQodCk7aWYodSYmZilyZXR1cm4gdT09dCYmZj09ZTt2YXIgZD0tMSxwPSEwLGg9MiZuP25ldyBXbjpvO2ZvcihhLnNldChlLHQpLGEuc2V0KHQsZSk7KytkPHM7KXt2YXIgZz1lW2RdLHY9dFtkXTtpZihyKXZhciBtPWw/cih2LGcsZCx0LGUsYSk6cihnLHYsZCxlLHQsYSk7aWYobSE9PW8pe2lmKG0pY29udGludWU7cD0hMTticmVha31pZihoKXtpZighVHQodCwoZnVuY3Rpb24oZSx0KXtpZighWHQoaCx0KSYmKGc9PT1lfHxpKGcsZSxuLHIsYSkpKXJldHVybiBoLnB1c2godCl9KSkpe3A9ITE7YnJlYWt9fWVsc2UgaWYoZyE9PXYmJiFpKGcsdixuLHIsYSkpe3A9ITE7YnJlYWt9fXJldHVybiBhLmRlbGV0ZShlKSxhLmRlbGV0ZSh0KSxwfWZ1bmN0aW9uIFFvKGUpe3JldHVybiBqaShfaShlLG8sRmkpLGUrXCJcIil9ZnVuY3Rpb24gZWkoZSl7cmV0dXJuIGJyKGUsTWwsY2kpfWZ1bmN0aW9uIHRpKGUpe3JldHVybiBicihlLGtsLHVpKX12YXIgbmk9U24/ZnVuY3Rpb24oZSl7cmV0dXJuIFNuLmdldChlKX06YXM7ZnVuY3Rpb24gcmkoZSl7Zm9yKHZhciB0PWUubmFtZStcIlwiLG49am5bdF0scj1JZS5jYWxsKGpuLHQpP24ubGVuZ3RoOjA7ci0tOyl7dmFyIG89bltyXSxpPW8uZnVuYztpZihudWxsPT1pfHxpPT1lKXJldHVybiBvLm5hbWV9cmV0dXJuIHR9ZnVuY3Rpb24gb2koZSl7cmV0dXJuKEllLmNhbGwoQm4sXCJwbGFjZWhvbGRlclwiKT9CbjplKS5wbGFjZWhvbGRlcn1mdW5jdGlvbiBpaSgpe3ZhciBlPUJuLml0ZXJhdGVlfHxucztyZXR1cm4gZT1lPT09bnM/UHI6ZSxhcmd1bWVudHMubGVuZ3RoP2UoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSk6ZX1mdW5jdGlvbiBhaShlLHQpe3ZhciBuLHIsbz1lLl9fZGF0YV9fO3JldHVybihcInN0cmluZ1wiPT0ocj10eXBlb2Yobj10KSl8fFwibnVtYmVyXCI9PXJ8fFwic3ltYm9sXCI9PXJ8fFwiYm9vbGVhblwiPT1yP1wiX19wcm90b19fXCIhPT1uOm51bGw9PT1uKT9vW1wic3RyaW5nXCI9PXR5cGVvZiB0P1wic3RyaW5nXCI6XCJoYXNoXCJdOm8ubWFwfWZ1bmN0aW9uIGxpKGUpe2Zvcih2YXIgdD1NbChlKSxuPXQubGVuZ3RoO24tLTspe3ZhciByPXRbbl0sbz1lW3JdO3Rbbl09W3IsbyxiaShvKV19cmV0dXJuIHR9ZnVuY3Rpb24gc2koZSx0KXt2YXIgbj1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP286ZVt0XX0oZSx0KTtyZXR1cm4gUnIobik/bjpvfXZhciBjaT1ndD9mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9bXTooZT1PZShlKSxqdChndChlKSwoZnVuY3Rpb24odCl7cmV0dXJuIHplLmNhbGwoZSx0KX0pKSl9OnBzLHVpPWd0P2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXTtlOylQdCh0LGNpKGUpKSxlPVVlKGUpO3JldHVybiB0fTpwcyxmaT14cjtmdW5jdGlvbiBkaShlLHQsbil7Zm9yKHZhciByPS0xLG89KHQ9dm8odCxlKSkubGVuZ3RoLGk9ITE7KytyPG87KXt2YXIgYT1UaSh0W3JdKTtpZighKGk9bnVsbCE9ZSYmbihlLGEpKSlicmVhaztlPWVbYV19cmV0dXJuIGl8fCsrciE9bz9pOiEhKG89bnVsbD09ZT8wOmUubGVuZ3RoKSYmWGEobykmJmdpKGEsbykmJihOYShlKXx8JGEoZSkpfWZ1bmN0aW9uIHBpKGUpe3JldHVyblwiZnVuY3Rpb25cIiE9dHlwZW9mIGUuY29uc3RydWN0b3J8fHdpKGUpP3t9OlZuKFVlKGUpKX1mdW5jdGlvbiBoaShlKXtyZXR1cm4gTmEoZSl8fCRhKGUpfHwhIShxZSYmZSYmZVtxZV0pfWZ1bmN0aW9uIGdpKGUsdCl7dmFyIG49dHlwZW9mIGU7cmV0dXJuISEodD1udWxsPT10P2Y6dCkmJihcIm51bWJlclwiPT1ufHxcInN5bWJvbFwiIT1uJiZtZS50ZXN0KGUpKSYmZT4tMSYmZSUxPT0wJiZlPHR9ZnVuY3Rpb24gdmkoZSx0LG4pe2lmKCFKYShuKSlyZXR1cm4hMTt2YXIgcj10eXBlb2YgdDtyZXR1cm4hIShcIm51bWJlclwiPT1yP1VhKG4pJiZnaSh0LG4ubGVuZ3RoKTpcInN0cmluZ1wiPT1yJiZ0IGluIG4pJiZWYShuW3RdLGUpfWZ1bmN0aW9uIG1pKGUsdCl7aWYoTmEoZSkpcmV0dXJuITE7dmFyIG49dHlwZW9mIGU7cmV0dXJuIShcIm51bWJlclwiIT1uJiZcInN5bWJvbFwiIT1uJiZcImJvb2xlYW5cIiE9biYmbnVsbCE9ZSYmIWFsKGUpKXx8US50ZXN0KGUpfHwhSi50ZXN0KGUpfHxudWxsIT10JiZlIGluIE9lKHQpfWZ1bmN0aW9uIENpKGUpe3ZhciB0PXJpKGUpLG49Qm5bdF07aWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygbnx8ISh0IGluICRuLnByb3RvdHlwZSkpcmV0dXJuITE7aWYoZT09PW4pcmV0dXJuITA7dmFyIHI9bmkobik7cmV0dXJuISFyJiZlPT09clswXX0oYm4mJmZpKG5ldyBibihuZXcgQXJyYXlCdWZmZXIoMSkpKSE9UHx8eG4mJmZpKG5ldyB4bikhPXh8fF9uJiZmaShfbi5yZXNvbHZlKCkpIT1MfHxPbiYmZmkobmV3IE9uKSE9U3x8TG4mJmZpKG5ldyBMbikhPWspJiYoZmk9ZnVuY3Rpb24oZSl7dmFyIHQ9eHIoZSksbj10PT1PP2UuY29uc3RydWN0b3I6byxyPW4/SGkobik6XCJcIjtpZihyKXN3aXRjaChyKXtjYXNlIE1uOnJldHVybiBQO2Nhc2Uga246cmV0dXJuIHg7Y2FzZSBSbjpyZXR1cm4gTDtjYXNlIFBuOnJldHVybiBTO2Nhc2UgSW46cmV0dXJuIGt9cmV0dXJuIHR9KTt2YXIgeWk9UmU/WWE6aHM7ZnVuY3Rpb24gd2koZSl7dmFyIHQ9ZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4gZT09PShcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZ0LnByb3RvdHlwZXx8a2UpfWZ1bmN0aW9uIGJpKGUpe3JldHVybiBlPT1lJiYhSmEoZSl9ZnVuY3Rpb24geGkoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW4mJm5bZV09PT10JiYodCE9PW98fGUgaW4gT2UobikpfX1mdW5jdGlvbiBfaShlLHQsbil7cmV0dXJuIHQ9Z24odD09PW8/ZS5sZW5ndGgtMTp0LDApLGZ1bmN0aW9uKCl7Zm9yKHZhciBvPWFyZ3VtZW50cyxpPS0xLGE9Z24oby5sZW5ndGgtdCwwKSxsPXIoYSk7KytpPGE7KWxbaV09b1t0K2ldO2k9LTE7Zm9yKHZhciBzPXIodCsxKTsrK2k8dDspc1tpXT1vW2ldO3JldHVybiBzW3RdPW4obCksX3QoZSx0aGlzLHMpfX1mdW5jdGlvbiBPaShlLHQpe3JldHVybiB0Lmxlbmd0aDwyP2U6d3IoZSxRcih0LDAsLTEpKX1mdW5jdGlvbiBMaShlLHQpe2lmKChcImNvbnN0cnVjdG9yXCIhPT10fHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlW3RdKSYmXCJfX3Byb3RvX19cIiE9dClyZXR1cm4gZVt0XX12YXIgRWk9a2koS3IpLFNpPXV0fHxmdW5jdGlvbihlLHQpe3JldHVybiBmdC5zZXRUaW1lb3V0KGUsdCl9LGppPWtpKFhyKTtmdW5jdGlvbiBNaShlLHQsbil7dmFyIHI9dCtcIlwiO3JldHVybiBqaShlLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZW5ndGg7aWYoIW4pcmV0dXJuIGU7dmFyIHI9bi0xO3JldHVybiB0W3JdPShuPjE/XCImIFwiOlwiXCIpK3Rbcl0sdD10LmpvaW4obj4yP1wiLCBcIjpcIiBcIiksZS5yZXBsYWNlKGllLFwie1xcbi8qIFt3cmFwcGVkIHdpdGggXCIrdCtcIl0gKi9cXG5cIil9KHIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTHQoaCwoZnVuY3Rpb24obil7dmFyIHI9XCJfLlwiK25bMF07dCZuWzFdJiYhTXQoZSxyKSYmZS5wdXNoKHIpfSkpLGUuc29ydCgpfShmdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKGFlKTtyZXR1cm4gdD90WzFdLnNwbGl0KGxlKTpbXX0ociksbikpKX1mdW5jdGlvbiBraShlKXt2YXIgdD0wLG49MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1tbigpLGk9MTYtKHItbik7aWYobj1yLGk+MCl7aWYoKyt0Pj04MDApcmV0dXJuIGFyZ3VtZW50c1swXX1lbHNlIHQ9MDtyZXR1cm4gZS5hcHBseShvLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFJpKGUsdCl7dmFyIG49LTEscj1lLmxlbmd0aCxpPXItMTtmb3IodD10PT09bz9yOnQ7KytuPHQ7KXt2YXIgYT1VcihuLGkpLGw9ZVthXTtlW2FdPWVbbl0sZVtuXT1sfXJldHVybiBlLmxlbmd0aD10LGV9dmFyIFBpLElpLEFpPShQaT1QYSgoZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIDQ2PT09ZS5jaGFyQ29kZUF0KDApJiZ0LnB1c2goXCJcIiksZS5yZXBsYWNlKGVlLChmdW5jdGlvbihlLG4scixvKXt0LnB1c2gocj9vLnJlcGxhY2UodWUsXCIkMVwiKTpufHxlKX0pKSx0fSksKGZ1bmN0aW9uKGUpe3JldHVybiA1MDA9PT1JaS5zaXplJiZJaS5jbGVhcigpLGV9KSksSWk9UGkuY2FjaGUsUGkpO2Z1bmN0aW9uIFRpKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxhbChlKSlyZXR1cm4gZTt2YXIgdD1lK1wiXCI7cmV0dXJuXCIwXCI9PXQmJjEvZT09LTEvMD9cIi0wXCI6dH1mdW5jdGlvbiBIaShlKXtpZihudWxsIT1lKXt0cnl7cmV0dXJuIFBlLmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZStcIlwifWNhdGNoKGUpe319cmV0dXJuXCJcIn1mdW5jdGlvbiBCaShlKXtpZihlIGluc3RhbmNlb2YgJG4pcmV0dXJuIGUuY2xvbmUoKTt2YXIgdD1uZXcgWm4oZS5fX3dyYXBwZWRfXyxlLl9fY2hhaW5fXyk7cmV0dXJuIHQuX19hY3Rpb25zX189RW8oZS5fX2FjdGlvbnNfXyksdC5fX2luZGV4X189ZS5fX2luZGV4X18sdC5fX3ZhbHVlc19fPWUuX192YWx1ZXNfXyx0fXZhciBWaT16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gV2EoZSk/c3IoZSxocih0LDEsV2EsITApKTpbXX0pKSxEaT16cigoZnVuY3Rpb24oZSx0KXt2YXIgbj1xaSh0KTtyZXR1cm4gV2EobikmJihuPW8pLFdhKGUpP3NyKGUsaHIodCwxLFdhLCEwKSxpaShuLDIpKTpbXX0pKSxaaT16cigoZnVuY3Rpb24oZSx0KXt2YXIgbj1xaSh0KTtyZXR1cm4gV2EobikmJihuPW8pLFdhKGUpP3NyKGUsaHIodCwxLFdhLCEwKSxvLG4pOltdfSkpO2Z1bmN0aW9uICRpKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIG89bnVsbD09bj8wOmRsKG4pO3JldHVybiBvPDAmJihvPWduKHIrbywwKSksVnQoZSxpaSh0LDMpLG8pfWZ1bmN0aW9uIE5pKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIGk9ci0xO3JldHVybiBuIT09byYmKGk9ZGwobiksaT1uPDA/Z24ocitpLDApOnZuKGksci0xKSksVnQoZSxpaSh0LDMpLGksITApfWZ1bmN0aW9uIEZpKGUpe3JldHVybiBudWxsIT1lJiZlLmxlbmd0aD9ocihlLDEpOltdfWZ1bmN0aW9uIFVpKGUpe3JldHVybiBlJiZlLmxlbmd0aD9lWzBdOm99dmFyIFdpPXpyKChmdW5jdGlvbihlKXt2YXIgdD1SdChlLGhvKTtyZXR1cm4gdC5sZW5ndGgmJnRbMF09PT1lWzBdP0VyKHQpOltdfSkpLHppPXpyKChmdW5jdGlvbihlKXt2YXIgdD1xaShlKSxuPVJ0KGUsaG8pO3JldHVybiB0PT09cWkobik/dD1vOm4ucG9wKCksbi5sZW5ndGgmJm5bMF09PT1lWzBdP0VyKG4saWkodCwyKSk6W119KSksR2k9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PXFpKGUpLG49UnQoZSxobyk7cmV0dXJuKHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8pJiZuLnBvcCgpLG4ubGVuZ3RoJiZuWzBdPT09ZVswXT9FcihuLG8sdCk6W119KSk7ZnVuY3Rpb24gcWkoZSl7dmFyIHQ9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiB0P2VbdC0xXTpvfXZhciBZaT16cihLaSk7ZnVuY3Rpb24gS2koZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGgmJnQmJnQubGVuZ3RoP05yKGUsdCk6ZX12YXIgWGk9UW8oKGZ1bmN0aW9uKGUsdCl7dmFyIG49bnVsbD09ZT8wOmUubGVuZ3RoLHI9cnIoZSx0KTtyZXR1cm4gRnIoZSxSdCh0LChmdW5jdGlvbihlKXtyZXR1cm4gZ2koZSxuKT8rZTplfSkpLnNvcnQoX28pKSxyfSkpO2Z1bmN0aW9uIEppKGUpe3JldHVybiBudWxsPT1lP2U6d24uY2FsbChlKX12YXIgUWk9enIoKGZ1bmN0aW9uKGUpe3JldHVybiBhbyhocihlLDEsV2EsITApKX0pKSxlYT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9cWkoZSk7cmV0dXJuIFdhKHQpJiYodD1vKSxhbyhocihlLDEsV2EsITApLGlpKHQsMikpfSkpLHRhPXpyKChmdW5jdGlvbihlKXt2YXIgdD1xaShlKTtyZXR1cm4gdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byxhbyhocihlLDEsV2EsITApLG8sdCl9KSk7ZnVuY3Rpb24gbmEoZSl7aWYoIWV8fCFlLmxlbmd0aClyZXR1cm5bXTt2YXIgdD0wO3JldHVybiBlPWp0KGUsKGZ1bmN0aW9uKGUpe2lmKFdhKGUpKXJldHVybiB0PWduKGUubGVuZ3RoLHQpLCEwfSkpLEd0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiBSdChlLEZ0KHQpKX0pKX1mdW5jdGlvbiByYShlLHQpe2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuW107dmFyIG49bmEoZSk7cmV0dXJuIG51bGw9PXQ/bjpSdChuLChmdW5jdGlvbihlKXtyZXR1cm4gX3QodCxvLGUpfSkpfXZhciBvYT16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gV2EoZSk/c3IoZSx0KTpbXX0pKSxpYT16cigoZnVuY3Rpb24oZSl7cmV0dXJuIGZvKGp0KGUsV2EpKX0pKSxhYT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9cWkoZSk7cmV0dXJuIFdhKHQpJiYodD1vKSxmbyhqdChlLFdhKSxpaSh0LDIpKX0pKSxsYT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9cWkoZSk7cmV0dXJuIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8sZm8oanQoZSxXYSksbyx0KX0pKSxzYT16cihuYSksY2E9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49dD4xP2VbdC0xXTpvO3JldHVybiBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/KGUucG9wKCksbik6byxyYShlLG4pfSkpO2Z1bmN0aW9uIHVhKGUpe3ZhciB0PUJuKGUpO3JldHVybiB0Ll9fY2hhaW5fXz0hMCx0fWZ1bmN0aW9uIGZhKGUsdCl7cmV0dXJuIHQoZSl9dmFyIGRhPVFvKChmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxuPXQ/ZVswXTowLHI9dGhpcy5fX3dyYXBwZWRfXyxpPWZ1bmN0aW9uKHQpe3JldHVybiBycih0LGUpfTtyZXR1cm4hKHQ+MXx8dGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgpJiZyIGluc3RhbmNlb2YgJG4mJmdpKG4pPygocj1yLnNsaWNlKG4sK24rKHQ/MTowKSkpLl9fYWN0aW9uc19fLnB1c2goe2Z1bmM6ZmEsYXJnczpbaV0sdGhpc0FyZzpvfSksbmV3IFpuKHIsdGhpcy5fX2NoYWluX18pLnRocnUoKGZ1bmN0aW9uKGUpe3JldHVybiB0JiYhZS5sZW5ndGgmJmUucHVzaChvKSxlfSkpKTp0aGlzLnRocnUoaSl9KSkscGE9am8oKGZ1bmN0aW9uKGUsdCxuKXtJZS5jYWxsKGUsbik/KytlW25dOm5yKGUsbiwxKX0pKSxoYT1UbygkaSksZ2E9VG8oTmkpO2Z1bmN0aW9uIHZhKGUsdCl7cmV0dXJuKE5hKGUpP0x0OmNyKShlLGlpKHQsMykpfWZ1bmN0aW9uIG1hKGUsdCl7cmV0dXJuKE5hKGUpP0V0OnVyKShlLGlpKHQsMykpfXZhciBDYT1qbygoZnVuY3Rpb24oZSx0LG4pe0llLmNhbGwoZSxuKT9lW25dLnB1c2godCk6bnIoZSxuLFt0XSl9KSkseWE9enIoKGZ1bmN0aW9uKGUsdCxuKXt2YXIgbz0tMSxpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQsYT1VYShlKT9yKGUubGVuZ3RoKTpbXTtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSl7YVsrK29dPWk/X3QodCxlLG4pOlNyKGUsdCxuKX0pKSxhfSkpLHdhPWpvKChmdW5jdGlvbihlLHQsbil7bnIoZSxuLHQpfSkpO2Z1bmN0aW9uIGJhKGUsdCl7cmV0dXJuKE5hKGUpP1J0OlRyKShlLGlpKHQsMykpfXZhciB4YT1qbygoZnVuY3Rpb24oZSx0LG4pe2Vbbj8wOjFdLnB1c2godCl9KSwoZnVuY3Rpb24oKXtyZXR1cm5bW10sW11dfSkpLF9hPXpyKChmdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJuW107dmFyIG49dC5sZW5ndGg7cmV0dXJuIG4+MSYmdmkoZSx0WzBdLHRbMV0pP3Q9W106bj4yJiZ2aSh0WzBdLHRbMV0sdFsyXSkmJih0PVt0WzBdXSksWnIoZSxocih0LDEpLFtdKX0pKSxPYT1jdHx8ZnVuY3Rpb24oKXtyZXR1cm4gZnQuRGF0ZS5ub3coKX07ZnVuY3Rpb24gTGEoZSx0LG4pe3JldHVybiB0PW4/bzp0LHQ9ZSYmbnVsbD09dD9lLmxlbmd0aDp0LHFvKGUsYyxvLG8sbyxvLHQpfWZ1bmN0aW9uIEVhKGUsdCl7dmFyIG47aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgU2UoaSk7cmV0dXJuIGU9ZGwoZSksZnVuY3Rpb24oKXtyZXR1cm4tLWU+MCYmKG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGU8PTEmJih0PW8pLG59fXZhciBTYT16cigoZnVuY3Rpb24oZSx0LG4pe3ZhciByPTE7aWYobi5sZW5ndGgpe3ZhciBvPWxuKG4sb2koU2EpKTtyfD1zfXJldHVybiBxbyhlLHIsdCxuLG8pfSkpLGphPXpyKChmdW5jdGlvbihlLHQsbil7dmFyIHI9MztpZihuLmxlbmd0aCl7dmFyIG89bG4obixvaShqYSkpO3J8PXN9cmV0dXJuIHFvKHQscixlLG4sbyl9KSk7ZnVuY3Rpb24gTWEoZSx0LG4pe3ZhciByLGEsbCxzLGMsdSxmPTAsZD0hMSxwPSExLGg9ITA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgU2UoaSk7ZnVuY3Rpb24gZyh0KXt2YXIgbj1yLGk9YTtyZXR1cm4gcj1hPW8sZj10LHM9ZS5hcHBseShpLG4pfWZ1bmN0aW9uIHYoZSl7dmFyIG49ZS11O3JldHVybiB1PT09b3x8bj49dHx8bjwwfHxwJiZlLWY+PWx9ZnVuY3Rpb24gbSgpe3ZhciBlPU9hKCk7aWYodihlKSlyZXR1cm4gQyhlKTtjPVNpKG0sZnVuY3Rpb24oZSl7dmFyIG49dC0oZS11KTtyZXR1cm4gcD92bihuLGwtKGUtZikpOm59KGUpKX1mdW5jdGlvbiBDKGUpe3JldHVybiBjPW8saCYmcj9nKGUpOihyPWE9byxzKX1mdW5jdGlvbiB5KCl7dmFyIGU9T2EoKSxuPXYoZSk7aWYocj1hcmd1bWVudHMsYT10aGlzLHU9ZSxuKXtpZihjPT09bylyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGY9ZSxjPVNpKG0sdCksZD9nKGUpOnN9KHUpO2lmKHApcmV0dXJuIHlvKGMpLGM9U2kobSx0KSxnKHUpfXJldHVybiBjPT09byYmKGM9U2kobSx0KSksc31yZXR1cm4gdD1obCh0KXx8MCxKYShuKSYmKGQ9ISFuLmxlYWRpbmcsbD0ocD1cIm1heFdhaXRcImluIG4pP2duKGhsKG4ubWF4V2FpdCl8fDAsdCk6bCxoPVwidHJhaWxpbmdcImluIG4/ISFuLnRyYWlsaW5nOmgpLHkuY2FuY2VsPWZ1bmN0aW9uKCl7YyE9PW8mJnlvKGMpLGY9MCxyPXU9YT1jPW99LHkuZmx1c2g9ZnVuY3Rpb24oKXtyZXR1cm4gYz09PW8/czpDKE9hKCkpfSx5fXZhciBrYT16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbHIoZSwxLHQpfSkpLFJhPXpyKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGxyKGUsaGwodCl8fDAsbil9KSk7ZnVuY3Rpb24gUGEoZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlfHxudWxsIT10JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBTZShpKTt2YXIgbj1mdW5jdGlvbigpe3ZhciByPWFyZ3VtZW50cyxvPXQ/dC5hcHBseSh0aGlzLHIpOnJbMF0saT1uLmNhY2hlO2lmKGkuaGFzKG8pKXJldHVybiBpLmdldChvKTt2YXIgYT1lLmFwcGx5KHRoaXMscik7cmV0dXJuIG4uY2FjaGU9aS5zZXQobyxhKXx8aSxhfTtyZXR1cm4gbi5jYWNoZT1uZXcoUGEuQ2FjaGV8fFVuKSxufWZ1bmN0aW9uIElhKGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFNlKGkpO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cztzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4hZS5jYWxsKHRoaXMpO2Nhc2UgMTpyZXR1cm4hZS5jYWxsKHRoaXMsdFswXSk7Y2FzZSAyOnJldHVybiFlLmNhbGwodGhpcyx0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4hZS5jYWxsKHRoaXMsdFswXSx0WzFdLHRbMl0pfXJldHVybiFlLmFwcGx5KHRoaXMsdCl9fVBhLkNhY2hlPVVuO3ZhciBBYT1tbygoZnVuY3Rpb24oZSx0KXt2YXIgbj0odD0xPT10Lmxlbmd0aCYmTmEodFswXSk/UnQodFswXSxZdChpaSgpKSk6UnQoaHIodCwxKSxZdChpaSgpKSkpLmxlbmd0aDtyZXR1cm4genIoKGZ1bmN0aW9uKHIpe2Zvcih2YXIgbz0tMSxpPXZuKHIubGVuZ3RoLG4pOysrbzxpOylyW29dPXRbb10uY2FsbCh0aGlzLHJbb10pO3JldHVybiBfdChlLHRoaXMscil9KSl9KSksVGE9enIoKGZ1bmN0aW9uKGUsdCl7dmFyIG49bG4odCxvaShUYSkpO3JldHVybiBxbyhlLHMsbyx0LG4pfSkpLEhhPXpyKChmdW5jdGlvbihlLHQpe3ZhciBuPWxuKHQsb2koSGEpKTtyZXR1cm4gcW8oZSw2NCxvLHQsbil9KSksQmE9UW8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHFvKGUsMjU2LG8sbyxvLHQpfSkpO2Z1bmN0aW9uIFZhKGUsdCl7cmV0dXJuIGU9PT10fHxlIT1lJiZ0IT10fXZhciBEYT1GbyhfciksWmE9Rm8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+PXR9KSksJGE9anIoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9qcjpmdW5jdGlvbihlKXtyZXR1cm4gUWEoZSkmJkllLmNhbGwoZSxcImNhbGxlZVwiKSYmIXplLmNhbGwoZSxcImNhbGxlZVwiKX0sTmE9ci5pc0FycmF5LEZhPW10P1l0KG10KTpmdW5jdGlvbihlKXtyZXR1cm4gUWEoZSkmJnhyKGUpPT1SfTtmdW5jdGlvbiBVYShlKXtyZXR1cm4gbnVsbCE9ZSYmWGEoZS5sZW5ndGgpJiYhWWEoZSl9ZnVuY3Rpb24gV2EoZSl7cmV0dXJuIFFhKGUpJiZVYShlKX12YXIgemE9dnR8fGhzLEdhPUN0P1l0KEN0KTpmdW5jdGlvbihlKXtyZXR1cm4gUWEoZSkmJnhyKGUpPT1DfTtmdW5jdGlvbiBxYShlKXtpZighUWEoZSkpcmV0dXJuITE7dmFyIHQ9eHIoZSk7cmV0dXJuIHQ9PXl8fFwiW29iamVjdCBET01FeGNlcHRpb25dXCI9PXR8fFwic3RyaW5nXCI9PXR5cGVvZiBlLm1lc3NhZ2UmJlwic3RyaW5nXCI9PXR5cGVvZiBlLm5hbWUmJiFubChlKX1mdW5jdGlvbiBZYShlKXtpZighSmEoZSkpcmV0dXJuITE7dmFyIHQ9eHIoZSk7cmV0dXJuIHQ9PXd8fHQ9PWJ8fFwiW29iamVjdCBBc3luY0Z1bmN0aW9uXVwiPT10fHxcIltvYmplY3QgUHJveHldXCI9PXR9ZnVuY3Rpb24gS2EoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJmU9PWRsKGUpfWZ1bmN0aW9uIFhhKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPi0xJiZlJTE9PTAmJmU8PWZ9ZnVuY3Rpb24gSmEoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIG51bGwhPWUmJihcIm9iamVjdFwiPT10fHxcImZ1bmN0aW9uXCI9PXQpfWZ1bmN0aW9uIFFhKGUpe3JldHVybiBudWxsIT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZX12YXIgZWw9eXQ/WXQoeXQpOmZ1bmN0aW9uKGUpe3JldHVybiBRYShlKSYmZmkoZSk9PXh9O2Z1bmN0aW9uIHRsKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlfHxRYShlKSYmeHIoZSk9PV99ZnVuY3Rpb24gbmwoZSl7aWYoIVFhKGUpfHx4cihlKSE9TylyZXR1cm4hMTt2YXIgdD1VZShlKTtpZihudWxsPT09dClyZXR1cm4hMDt2YXIgbj1JZS5jYWxsKHQsXCJjb25zdHJ1Y3RvclwiKSYmdC5jb25zdHJ1Y3RvcjtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiZuIGluc3RhbmNlb2YgbiYmUGUuY2FsbChuKT09QmV9dmFyIHJsPXd0P1l0KHd0KTpmdW5jdGlvbihlKXtyZXR1cm4gUWEoZSkmJnhyKGUpPT1FfSxvbD1idD9ZdChidCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFhKGUpJiZmaShlKT09U307ZnVuY3Rpb24gaWwoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fCFOYShlKSYmUWEoZSkmJnhyKGUpPT1qfWZ1bmN0aW9uIGFsKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfHxRYShlKSYmeHIoZSk9PU19dmFyIGxsPXh0P1l0KHh0KTpmdW5jdGlvbihlKXtyZXR1cm4gUWEoZSkmJlhhKGUubGVuZ3RoKSYmISFvdFt4cihlKV19LHNsPUZvKEFyKSxjbD1GbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTw9dH0pKTtmdW5jdGlvbiB1bChlKXtpZighZSlyZXR1cm5bXTtpZihVYShlKSlyZXR1cm4gaWwoZSk/dW4oZSk6RW8oZSk7aWYoWWUmJmVbWWVdKXJldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQsbj1bXTshKHQ9ZS5uZXh0KCkpLmRvbmU7KW4ucHVzaCh0LnZhbHVlKTtyZXR1cm4gbn0oZVtZZV0oKSk7dmFyIHQ9ZmkoZSk7cmV0dXJuKHQ9PXg/b246dD09Uz9zbjpWbCkoZSl9ZnVuY3Rpb24gZmwoZSl7cmV0dXJuIGU/KGU9aGwoZSkpPT09dXx8ZT09PS0xLzA/MTc5NzY5MzEzNDg2MjMxNTdlMjkyKihlPDA/LTE6MSk6ZT09ZT9lOjA6MD09PWU/ZTowfWZ1bmN0aW9uIGRsKGUpe3ZhciB0PWZsKGUpLG49dCUxO3JldHVybiB0PT10P24/dC1uOnQ6MH1mdW5jdGlvbiBwbChlKXtyZXR1cm4gZT9vcihkbChlKSwwLHApOjB9ZnVuY3Rpb24gaGwoZSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoYWwoZSkpcmV0dXJuIGQ7aWYoSmEoZSkpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGUudmFsdWVPZj9lLnZhbHVlT2YoKTplO2U9SmEodCk/dCtcIlwiOnR9aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuIDA9PT1lP2U6K2U7ZT1xdChlKTt2YXIgbj1oZS50ZXN0KGUpO3JldHVybiBufHx2ZS50ZXN0KGUpP3N0KGUuc2xpY2UoMiksbj8yOjgpOnBlLnRlc3QoZSk/ZDorZX1mdW5jdGlvbiBnbChlKXtyZXR1cm4gU28oZSxrbChlKSl9ZnVuY3Rpb24gdmwoZSl7cmV0dXJuIG51bGw9PWU/XCJcIjppbyhlKX12YXIgbWw9TW8oKGZ1bmN0aW9uKGUsdCl7aWYod2kodCl8fFVhKHQpKVNvKHQsTWwodCksZSk7ZWxzZSBmb3IodmFyIG4gaW4gdClJZS5jYWxsKHQsbikmJkpuKGUsbix0W25dKX0pKSxDbD1NbygoZnVuY3Rpb24oZSx0KXtTbyh0LGtsKHQpLGUpfSkpLHlsPU1vKChmdW5jdGlvbihlLHQsbixyKXtTbyh0LGtsKHQpLGUscil9KSksd2w9TW8oKGZ1bmN0aW9uKGUsdCxuLHIpe1NvKHQsTWwodCksZSxyKX0pKSxibD1RbyhycikseGw9enIoKGZ1bmN0aW9uKGUsdCl7ZT1PZShlKTt2YXIgbj0tMSxyPXQubGVuZ3RoLGk9cj4yP3RbMl06bztmb3IoaSYmdmkodFswXSx0WzFdLGkpJiYocj0xKTsrK248cjspZm9yKHZhciBhPXRbbl0sbD1rbChhKSxzPS0xLGM9bC5sZW5ndGg7KytzPGM7KXt2YXIgdT1sW3NdLGY9ZVt1XTsoZj09PW98fFZhKGYsa2VbdV0pJiYhSWUuY2FsbChlLHUpKSYmKGVbdV09YVt1XSl9cmV0dXJuIGV9KSksX2w9enIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnB1c2gobyxLbyksX3QoUGwsbyxlKX0pKTtmdW5jdGlvbiBPbChlLHQsbil7dmFyIHI9bnVsbD09ZT9vOndyKGUsdCk7cmV0dXJuIHI9PT1vP246cn1mdW5jdGlvbiBMbChlLHQpe3JldHVybiBudWxsIT1lJiZkaShlLHQsTHIpfXZhciBFbD1WbygoZnVuY3Rpb24oZSx0LG4pe251bGwhPXQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQudG9TdHJpbmcmJih0PUhlLmNhbGwodCkpLGVbdF09bn0pLEpsKHRzKSksU2w9Vm8oKGZ1bmN0aW9uKGUsdCxuKXtudWxsIT10JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LnRvU3RyaW5nJiYodD1IZS5jYWxsKHQpKSxJZS5jYWxsKGUsdCk/ZVt0XS5wdXNoKG4pOmVbdF09W25dfSksaWkpLGpsPXpyKFNyKTtmdW5jdGlvbiBNbChlKXtyZXR1cm4gVWEoZSk/R24oZSk6SXIoZSl9ZnVuY3Rpb24ga2woZSl7cmV0dXJuIFVhKGUpP0duKGUsITApOmZ1bmN0aW9uKGUpe2lmKCFKYShlKSlyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9W107aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gT2UoZSkpdC5wdXNoKG4pO3JldHVybiB0fShlKTt2YXIgdD13aShlKSxuPVtdO2Zvcih2YXIgciBpbiBlKShcImNvbnN0cnVjdG9yXCIhPXJ8fCF0JiZJZS5jYWxsKGUscikpJiZuLnB1c2gocik7cmV0dXJuIG59KGUpfXZhciBSbD1NbygoZnVuY3Rpb24oZSx0LG4pe1ZyKGUsdCxuKX0pKSxQbD1NbygoZnVuY3Rpb24oZSx0LG4scil7VnIoZSx0LG4scil9KSksSWw9UW8oKGZ1bmN0aW9uKGUsdCl7dmFyIG49e307aWYobnVsbD09ZSlyZXR1cm4gbjt2YXIgcj0hMTt0PVJ0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiB0PXZvKHQsZSkscnx8KHI9dC5sZW5ndGg+MSksdH0pKSxTbyhlLHRpKGUpLG4pLHImJihuPWlyKG4sNyxYbykpO2Zvcih2YXIgbz10Lmxlbmd0aDtvLS07KWxvKG4sdFtvXSk7cmV0dXJuIG59KSksQWw9UW8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/e306ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJHIoZSx0LChmdW5jdGlvbih0LG4pe3JldHVybiBMbChlLG4pfSkpfShlLHQpfSkpO2Z1bmN0aW9uIFRsKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbj1SdCh0aShlKSwoZnVuY3Rpb24oZSl7cmV0dXJuW2VdfSkpO3JldHVybiB0PWlpKHQpLCRyKGUsbiwoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG5bMF0pfSkpfXZhciBIbD1HbyhNbCksQmw9R28oa2wpO2Z1bmN0aW9uIFZsKGUpe3JldHVybiBudWxsPT1lP1tdOkt0KGUsTWwoZSkpfXZhciBEbD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXQudG9Mb3dlckNhc2UoKSxlKyhuP1psKHQpOnQpfSkpO2Z1bmN0aW9uIFpsKGUpe3JldHVybiBxbCh2bChlKS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiAkbChlKXtyZXR1cm4oZT12bChlKSkmJmUucmVwbGFjZShDZSxlbikucmVwbGFjZShYZSxcIlwiKX12YXIgTmw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIi1cIjpcIlwiKSt0LnRvTG93ZXJDYXNlKCl9KSksRmw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIiBcIjpcIlwiKSt0LnRvTG93ZXJDYXNlKCl9KSksVWw9UG8oXCJ0b0xvd2VyQ2FzZVwiKSxXbD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiX1wiOlwiXCIpK3QudG9Mb3dlckNhc2UoKX0pKSx6bD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiIFwiOlwiXCIpK3FsKHQpfSkpLEdsPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKG4/XCIgXCI6XCJcIikrdC50b1VwcGVyQ2FzZSgpfSkpLHFsPVBvKFwidG9VcHBlckNhc2VcIik7ZnVuY3Rpb24gWWwoZSx0LG4pe3JldHVybiBlPXZsKGUpLCh0PW4/bzp0KT09PW8/ZnVuY3Rpb24oZSl7cmV0dXJuIHR0LnRlc3QoZSl9KGUpP2Z1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKFFlKXx8W119KGUpOmZ1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKHNlKXx8W119KGUpOmUubWF0Y2godCl8fFtdfXZhciBLbD16cigoZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIF90KGUsbyx0KX1jYXRjaChlKXtyZXR1cm4gcWEoZSk/ZTpuZXcgYmUoZSl9fSkpLFhsPVFvKChmdW5jdGlvbihlLHQpe3JldHVybiBMdCh0LChmdW5jdGlvbih0KXt0PVRpKHQpLG5yKGUsdCxTYShlW3RdLGUpKX0pKSxlfSkpO2Z1bmN0aW9uIEpsKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgUWw9SG8oKSxlcz1IbyghMCk7ZnVuY3Rpb24gdHMoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gbnMoZSl7cmV0dXJuIFByKFwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTppcihlLDEpKX12YXIgcnM9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBTcihuLGUsdCl9fSkpLG9zPXpyKChmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gU3IoZSxuLHQpfX0pKTtmdW5jdGlvbiBpcyhlLHQsbil7dmFyIHI9TWwodCksbz15cih0LHIpO251bGwhPW58fEphKHQpJiYoby5sZW5ndGh8fCFyLmxlbmd0aCl8fChuPXQsdD1lLGU9dGhpcyxvPXlyKHQsTWwodCkpKTt2YXIgaT0hKEphKG4pJiZcImNoYWluXCJpbiBuJiYhbi5jaGFpbiksYT1ZYShlKTtyZXR1cm4gTHQobywoZnVuY3Rpb24obil7dmFyIHI9dFtuXTtlW25dPXIsYSYmKGUucHJvdG90eXBlW25dPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX2NoYWluX187aWYoaXx8dCl7dmFyIG49ZSh0aGlzLl9fd3JhcHBlZF9fKTtyZXR1cm4obi5fX2FjdGlvbnNfXz1Fbyh0aGlzLl9fYWN0aW9uc19fKSkucHVzaCh7ZnVuYzpyLGFyZ3M6YXJndW1lbnRzLHRoaXNBcmc6ZX0pLG4uX19jaGFpbl9fPXQsbn1yZXR1cm4gci5hcHBseShlLFB0KFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfSl9KSksZX1mdW5jdGlvbiBhcygpe312YXIgbHM9Wm8oUnQpLHNzPVpvKFN0KSxjcz1abyhUdCk7ZnVuY3Rpb24gdXMoZSl7cmV0dXJuIG1pKGUpP0Z0KFRpKGUpKTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHdyKHQsZSl9fShlKX12YXIgZnM9Tm8oKSxkcz1ObyghMCk7ZnVuY3Rpb24gcHMoKXtyZXR1cm5bXX1mdW5jdGlvbiBocygpe3JldHVybiExfXZhciBncyx2cz1EbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSksMCksbXM9V28oXCJjZWlsXCIpLENzPURvKChmdW5jdGlvbihlLHQpe3JldHVybiBlL3R9KSwxKSx5cz1XbyhcImZsb29yXCIpLHdzPURvKChmdW5jdGlvbihlLHQpe3JldHVybiBlKnR9KSwxKSxicz1XbyhcInJvdW5kXCIpLHhzPURvKChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KSwwKTtyZXR1cm4gQm4uYWZ0ZXI9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBTZShpKTtyZXR1cm4gZT1kbChlKSxmdW5jdGlvbigpe2lmKC0tZTwxKXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LEJuLmFyeT1MYSxCbi5hc3NpZ249bWwsQm4uYXNzaWduSW49Q2wsQm4uYXNzaWduSW5XaXRoPXlsLEJuLmFzc2lnbldpdGg9d2wsQm4uYXQ9YmwsQm4uYmVmb3JlPUVhLEJuLmJpbmQ9U2EsQm4uYmluZEFsbD1YbCxCbi5iaW5kS2V5PWphLEJuLmNhc3RBcnJheT1mdW5jdGlvbigpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltdO3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gTmEoZSk/ZTpbZV19LEJuLmNoYWluPXVhLEJuLmNodW5rPWZ1bmN0aW9uKGUsdCxuKXt0PShuP3ZpKGUsdCxuKTp0PT09byk/MTpnbihkbCh0KSwwKTt2YXIgaT1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIWl8fHQ8MSlyZXR1cm5bXTtmb3IodmFyIGE9MCxsPTAscz1yKGR0KGkvdCkpO2E8aTspc1tsKytdPVFyKGUsYSxhKz10KTtyZXR1cm4gc30sQm4uY29tcGFjdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGgscj0wLG89W107Kyt0PG47KXt2YXIgaT1lW3RdO2kmJihvW3IrK109aSl9cmV0dXJuIG99LEJuLmNvbmNhdD1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg7aWYoIWUpcmV0dXJuW107Zm9yKHZhciB0PXIoZS0xKSxuPWFyZ3VtZW50c1swXSxvPWU7by0tOyl0W28tMV09YXJndW1lbnRzW29dO3JldHVybiBQdChOYShuKT9FbyhuKTpbbl0saHIodCwxKSl9LEJuLmNvbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbD09ZT8wOmUubGVuZ3RoLG49aWkoKTtyZXR1cm4gZT10P1J0KGUsKGZ1bmN0aW9uKGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGVbMV0pdGhyb3cgbmV3IFNlKGkpO3JldHVybltuKGVbMF0pLGVbMV1dfSkpOltdLHpyKChmdW5jdGlvbihuKXtmb3IodmFyIHI9LTE7KytyPHQ7KXt2YXIgbz1lW3JdO2lmKF90KG9bMF0sdGhpcyxuKSlyZXR1cm4gX3Qob1sxXSx0aGlzLG4pfX0pKX0sQm4uY29uZm9ybXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PU1sKGUpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gYXIobixlLHQpfX0oaXIoZSwxKSl9LEJuLmNvbnN0YW50PUpsLEJuLmNvdW50Qnk9cGEsQm4uY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49Vm4oZSk7cmV0dXJuIG51bGw9PXQ/bjp0cihuLHQpfSxCbi5jdXJyeT1mdW5jdGlvbiBlKHQsbixyKXt2YXIgaT1xbyh0LDgsbyxvLG8sbyxvLG49cj9vOm4pO3JldHVybiBpLnBsYWNlaG9sZGVyPWUucGxhY2Vob2xkZXIsaX0sQm4uY3VycnlSaWdodD1mdW5jdGlvbiBlKHQsbixyKXt2YXIgaT1xbyh0LDE2LG8sbyxvLG8sbyxuPXI/bzpuKTtyZXR1cm4gaS5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyLGl9LEJuLmRlYm91bmNlPU1hLEJuLmRlZmF1bHRzPXhsLEJuLmRlZmF1bHRzRGVlcD1fbCxCbi5kZWZlcj1rYSxCbi5kZWxheT1SYSxCbi5kaWZmZXJlbmNlPVZpLEJuLmRpZmZlcmVuY2VCeT1EaSxCbi5kaWZmZXJlbmNlV2l0aD1aaSxCbi5kcm9wPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/UXIoZSwodD1ufHx0PT09bz8xOmRsKHQpKTwwPzA6dCxyKTpbXX0sQm4uZHJvcFJpZ2h0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/UXIoZSwwLCh0PXItKHQ9bnx8dD09PW8/MTpkbCh0KSkpPDA/MDp0KTpbXX0sQm4uZHJvcFJpZ2h0V2hpbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/Y28oZSxpaSh0LDMpLCEwLCEwKTpbXX0sQm4uZHJvcFdoaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2NvKGUsaWkodCwzKSwhMCk6W119LEJuLmZpbGw9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiBpPyhuJiZcIm51bWJlclwiIT10eXBlb2YgbiYmdmkoZSx0LG4pJiYobj0wLHI9aSksZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9ZS5sZW5ndGg7Zm9yKChuPWRsKG4pKTwwJiYobj0tbj5pPzA6aStuKSwocj1yPT09b3x8cj5pP2k6ZGwocikpPDAmJihyKz1pKSxyPW4+cj8wOnBsKHIpO248cjspZVtuKytdPXQ7cmV0dXJuIGV9KGUsdCxuLHIpKTpbXX0sQm4uZmlsdGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKE5hKGUpP2p0OnByKShlLGlpKHQsMykpfSxCbi5mbGF0TWFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGhyKGJhKGUsdCksMSl9LEJuLmZsYXRNYXBEZWVwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGhyKGJhKGUsdCksdSl9LEJuLmZsYXRNYXBEZXB0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj09PW8/MTpkbChuKSxocihiYShlLHQpLG4pfSxCbi5mbGF0dGVuPUZpLEJuLmZsYXR0ZW5EZWVwPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlLmxlbmd0aD9ocihlLHUpOltdfSxCbi5mbGF0dGVuRGVwdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbCE9ZSYmZS5sZW5ndGg/aHIoZSx0PXQ9PT1vPzE6ZGwodCkpOltdfSxCbi5mbGlwPWZ1bmN0aW9uKGUpe3JldHVybiBxbyhlLDUxMil9LEJuLmZsb3c9UWwsQm4uZmxvd1JpZ2h0PWVzLEJuLmZyb21QYWlycz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGgscj17fTsrK3Q8bjspe3ZhciBvPWVbdF07cltvWzBdXT1vWzFdfXJldHVybiByfSxCbi5mdW5jdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/W106eXIoZSxNbChlKSl9LEJuLmZ1bmN0aW9uc0luPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOnlyKGUsa2woZSkpfSxCbi5ncm91cEJ5PUNhLEJuLmluaXRpYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJmUubGVuZ3RoP1FyKGUsMCwtMSk6W119LEJuLmludGVyc2VjdGlvbj1XaSxCbi5pbnRlcnNlY3Rpb25CeT16aSxCbi5pbnRlcnNlY3Rpb25XaXRoPUdpLEJuLmludmVydD1FbCxCbi5pbnZlcnRCeT1TbCxCbi5pbnZva2VNYXA9eWEsQm4uaXRlcmF0ZWU9bnMsQm4ua2V5Qnk9d2EsQm4ua2V5cz1NbCxCbi5rZXlzSW49a2wsQm4ubWFwPWJhLEJuLm1hcEtleXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtyZXR1cm4gdD1paSh0LDMpLG1yKGUsKGZ1bmN0aW9uKGUscixvKXtucihuLHQoZSxyLG8pLGUpfSkpLG59LEJuLm1hcFZhbHVlcz1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O3JldHVybiB0PWlpKHQsMyksbXIoZSwoZnVuY3Rpb24oZSxyLG8pe25yKG4scix0KGUscixvKSl9KSksbn0sQm4ubWF0Y2hlcz1mdW5jdGlvbihlKXtyZXR1cm4gSHIoaXIoZSwxKSl9LEJuLm1hdGNoZXNQcm9wZXJ0eT1mdW5jdGlvbihlLHQpe3JldHVybiBCcihlLGlyKHQsMSkpfSxCbi5tZW1vaXplPVBhLEJuLm1lcmdlPVJsLEJuLm1lcmdlV2l0aD1QbCxCbi5tZXRob2Q9cnMsQm4ubWV0aG9kT2Y9b3MsQm4ubWl4aW49aXMsQm4ubmVnYXRlPUlhLEJuLm50aEFyZz1mdW5jdGlvbihlKXtyZXR1cm4gZT1kbChlKSx6cigoZnVuY3Rpb24odCl7cmV0dXJuIERyKHQsZSl9KSl9LEJuLm9taXQ9SWwsQm4ub21pdEJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFRsKGUsSWEoaWkodCkpKX0sQm4ub25jZT1mdW5jdGlvbihlKXtyZXR1cm4gRWEoMixlKX0sQm4ub3JkZXJCeT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbnVsbD09ZT9bXTooTmEodCl8fCh0PW51bGw9PXQ/W106W3RdKSxOYShuPXI/bzpuKXx8KG49bnVsbD09bj9bXTpbbl0pLFpyKGUsdCxuKSl9LEJuLm92ZXI9bHMsQm4ub3ZlckFyZ3M9QWEsQm4ub3ZlckV2ZXJ5PXNzLEJuLm92ZXJTb21lPWNzLEJuLnBhcnRpYWw9VGEsQm4ucGFydGlhbFJpZ2h0PUhhLEJuLnBhcnRpdGlvbj14YSxCbi5waWNrPUFsLEJuLnBpY2tCeT1UbCxCbi5wcm9wZXJ0eT11cyxCbi5wcm9wZXJ0eU9mPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09ZT9vOndyKGUsdCl9fSxCbi5wdWxsPVlpLEJuLnB1bGxBbGw9S2ksQm4ucHVsbEFsbEJ5PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSYmZS5sZW5ndGgmJnQmJnQubGVuZ3RoP05yKGUsdCxpaShuLDIpKTplfSxCbi5wdWxsQWxsV2l0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJmUubGVuZ3RoJiZ0JiZ0Lmxlbmd0aD9OcihlLHQsbyxuKTplfSxCbi5wdWxsQXQ9WGksQm4ucmFuZ2U9ZnMsQm4ucmFuZ2VSaWdodD1kcyxCbi5yZWFyZz1CYSxCbi5yZWplY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oTmEoZSk/anQ6cHIpKGUsSWEoaWkodCwzKSkpfSxCbi5yZW1vdmU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtpZighZXx8IWUubGVuZ3RoKXJldHVybiBuO3ZhciByPS0xLG89W10saT1lLmxlbmd0aDtmb3IodD1paSh0LDMpOysrcjxpOyl7dmFyIGE9ZVtyXTt0KGEscixlKSYmKG4ucHVzaChhKSxvLnB1c2gocikpfXJldHVybiBGcihlLG8pLG59LEJuLnJlc3Q9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTtyZXR1cm4genIoZSx0PXQ9PT1vP3Q6ZGwodCkpfSxCbi5yZXZlcnNlPUppLEJuLnNhbXBsZVNpemU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PShuP3ZpKGUsdCxuKTp0PT09byk/MTpkbCh0KSwoTmEoZSk/WW46cXIpKGUsdCl9LEJuLnNldD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PWU/ZTpZcihlLHQsbil9LEJuLnNldFdpdGg9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHI9XCJmdW5jdGlvblwiPT10eXBlb2Ygcj9yOm8sbnVsbD09ZT9lOllyKGUsdCxuLHIpfSxCbi5zaHVmZmxlPWZ1bmN0aW9uKGUpe3JldHVybihOYShlKT9LbjpKcikoZSl9LEJuLnNsaWNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/KG4mJlwibnVtYmVyXCIhPXR5cGVvZiBuJiZ2aShlLHQsbik/KHQ9MCxuPXIpOih0PW51bGw9PXQ/MDpkbCh0KSxuPW49PT1vP3I6ZGwobikpLFFyKGUsdCxuKSk6W119LEJuLnNvcnRCeT1fYSxCbi5zb3J0ZWRVbmlxPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD9ybyhlKTpbXX0sQm4uc29ydGVkVW5pcUJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP3JvKGUsaWkodCwyKSk6W119LEJuLnNwbGl0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbiYmXCJudW1iZXJcIiE9dHlwZW9mIG4mJnZpKGUsdCxuKSYmKHQ9bj1vKSwobj1uPT09bz9wOm4+Pj4wKT8oZT12bChlKSkmJihcInN0cmluZ1wiPT10eXBlb2YgdHx8bnVsbCE9dCYmIXJsKHQpKSYmISh0PWlvKHQpKSYmcm4oZSk/Q28odW4oZSksMCxuKTplLnNwbGl0KHQsbik6W119LEJuLnNwcmVhZD1mdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFNlKGkpO3JldHVybiB0PW51bGw9PXQ/MDpnbihkbCh0KSwwKSx6cigoZnVuY3Rpb24obil7dmFyIHI9blt0XSxvPUNvKG4sMCx0KTtyZXR1cm4gciYmUHQobyxyKSxfdChlLHRoaXMsbyl9KSl9LEJuLnRhaWw9ZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiB0P1FyKGUsMSx0KTpbXX0sQm4udGFrZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJmUubGVuZ3RoP1FyKGUsMCwodD1ufHx0PT09bz8xOmRsKHQpKTwwPzA6dCk6W119LEJuLnRha2VSaWdodD1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiByP1FyKGUsKHQ9ci0odD1ufHx0PT09bz8xOmRsKHQpKSk8MD8wOnQscik6W119LEJuLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2NvKGUsaWkodCwzKSwhMSwhMCk6W119LEJuLnRha2VXaGlsZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9jbyhlLGlpKHQsMykpOltdfSxCbi50YXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdChlKSxlfSxCbi50aHJvdHRsZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ITAsbz0hMDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTtyZXR1cm4gSmEobikmJihyPVwibGVhZGluZ1wiaW4gbj8hIW4ubGVhZGluZzpyLG89XCJ0cmFpbGluZ1wiaW4gbj8hIW4udHJhaWxpbmc6byksTWEoZSx0LHtsZWFkaW5nOnIsbWF4V2FpdDp0LHRyYWlsaW5nOm99KX0sQm4udGhydT1mYSxCbi50b0FycmF5PXVsLEJuLnRvUGFpcnM9SGwsQm4udG9QYWlyc0luPUJsLEJuLnRvUGF0aD1mdW5jdGlvbihlKXtyZXR1cm4gTmEoZSk/UnQoZSxUaSk6YWwoZSk/W2VdOkVvKEFpKHZsKGUpKSl9LEJuLnRvUGxhaW5PYmplY3Q9Z2wsQm4udHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1OYShlKSxvPXJ8fHphKGUpfHxsbChlKTtpZih0PWlpKHQsNCksbnVsbD09bil7dmFyIGk9ZSYmZS5jb25zdHJ1Y3RvcjtuPW8/cj9uZXcgaTpbXTpKYShlKSYmWWEoaSk/Vm4oVWUoZSkpOnt9fXJldHVybihvP0x0Om1yKShlLChmdW5jdGlvbihlLHIsbyl7cmV0dXJuIHQobixlLHIsbyl9KSksbn0sQm4udW5hcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIExhKGUsMSl9LEJuLnVuaW9uPVFpLEJuLnVuaW9uQnk9ZWEsQm4udW5pb25XaXRoPXRhLEJuLnVuaXE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2FvKGUpOltdfSxCbi51bmlxQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/YW8oZSxpaSh0LDIpKTpbXX0sQm4udW5pcVdpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byxlJiZlLmxlbmd0aD9hbyhlLG8sdCk6W119LEJuLnVuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWV8fGxvKGUsdCl9LEJuLnVuemlwPW5hLEJuLnVuemlwV2l0aD1yYSxCbi51cGRhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT1lP2U6c28oZSx0LGdvKG4pKX0sQm4udXBkYXRlV2l0aD1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiByP3I6byxudWxsPT1lP2U6c28oZSx0LGdvKG4pLHIpfSxCbi52YWx1ZXM9VmwsQm4udmFsdWVzSW49ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/W106S3QoZSxrbChlKSl9LEJuLndpdGhvdXQ9b2EsQm4ud29yZHM9WWwsQm4ud3JhcD1mdW5jdGlvbihlLHQpe3JldHVybiBUYShnbyh0KSxlKX0sQm4ueG9yPWlhLEJuLnhvckJ5PWFhLEJuLnhvcldpdGg9bGEsQm4uemlwPXNhLEJuLnppcE9iamVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBwbyhlfHxbXSx0fHxbXSxKbil9LEJuLnppcE9iamVjdERlZXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcG8oZXx8W10sdHx8W10sWXIpfSxCbi56aXBXaXRoPWNhLEJuLmVudHJpZXM9SGwsQm4uZW50cmllc0luPUJsLEJuLmV4dGVuZD1DbCxCbi5leHRlbmRXaXRoPXlsLGlzKEJuLEJuKSxCbi5hZGQ9dnMsQm4uYXR0ZW1wdD1LbCxCbi5jYW1lbENhc2U9RGwsQm4uY2FwaXRhbGl6ZT1abCxCbi5jZWlsPW1zLEJuLmNsYW1wPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj09PW8mJihuPXQsdD1vKSxuIT09byYmKG49KG49aGwobikpPT1uP246MCksdCE9PW8mJih0PSh0PWhsKHQpKT09dD90OjApLG9yKGhsKGUpLHQsbil9LEJuLmNsb25lPWZ1bmN0aW9uKGUpe3JldHVybiBpcihlLDQpfSxCbi5jbG9uZURlZXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGlyKGUsNSl9LEJuLmNsb25lRGVlcFdpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaXIoZSw1LHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8pfSxCbi5jbG9uZVdpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaXIoZSw0LHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8pfSxCbi5jb25mb3Jtc1RvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PXR8fGFyKGUsdCxNbCh0KSl9LEJuLmRlYnVycj0kbCxCbi5kZWZhdWx0VG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZXx8ZSE9ZT90OmV9LEJuLmRpdmlkZT1DcyxCbi5lbmRzV2l0aD1mdW5jdGlvbihlLHQsbil7ZT12bChlKSx0PWlvKHQpO3ZhciByPWUubGVuZ3RoLGk9bj1uPT09bz9yOm9yKGRsKG4pLDAscik7cmV0dXJuKG4tPXQubGVuZ3RoKT49MCYmZS5zbGljZShuLGkpPT10fSxCbi5lcT1WYSxCbi5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dmwoZSkpJiZxLnRlc3QoZSk/ZS5yZXBsYWNlKHosdG4pOmV9LEJuLmVzY2FwZVJlZ0V4cD1mdW5jdGlvbihlKXtyZXR1cm4oZT12bChlKSkmJm5lLnRlc3QoZSk/ZS5yZXBsYWNlKHRlLFwiXFxcXCQmXCIpOmV9LEJuLmV2ZXJ5PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1OYShlKT9TdDpmcjtyZXR1cm4gbiYmdmkoZSx0LG4pJiYodD1vKSxyKGUsaWkodCwzKSl9LEJuLmZpbmQ9aGEsQm4uZmluZEluZGV4PSRpLEJuLmZpbmRLZXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQnQoZSxpaSh0LDMpLG1yKX0sQm4uZmluZExhc3Q9Z2EsQm4uZmluZExhc3RJbmRleD1OaSxCbi5maW5kTGFzdEtleT1mdW5jdGlvbihlLHQpe3JldHVybiBCdChlLGlpKHQsMyksQ3IpfSxCbi5mbG9vcj15cyxCbi5mb3JFYWNoPXZhLEJuLmZvckVhY2hSaWdodD1tYSxCbi5mb3JJbj1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP2U6Z3IoZSxpaSh0LDMpLGtsKX0sQm4uZm9ySW5SaWdodD1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP2U6dnIoZSxpaSh0LDMpLGtsKX0sQm4uZm9yT3duPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJm1yKGUsaWkodCwzKSl9LEJuLmZvck93blJpZ2h0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJkNyKGUsaWkodCwzKSl9LEJuLmdldD1PbCxCbi5ndD1EYSxCbi5ndGU9WmEsQm4uaGFzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGwhPWUmJmRpKGUsdCxPcil9LEJuLmhhc0luPUxsLEJuLmhlYWQ9VWksQm4uaWRlbnRpdHk9dHMsQm4uaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LG4scil7ZT1VYShlKT9lOlZsKGUpLG49biYmIXI/ZGwobik6MDt2YXIgbz1lLmxlbmd0aDtyZXR1cm4gbjwwJiYobj1nbihvK24sMCkpLGlsKGUpP248PW8mJmUuaW5kZXhPZih0LG4pPi0xOiEhbyYmRHQoZSx0LG4pPi0xfSxCbi5pbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIG89bnVsbD09bj8wOmRsKG4pO3JldHVybiBvPDAmJihvPWduKHIrbywwKSksRHQoZSx0LG8pfSxCbi5pblJhbmdlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD1mbCh0KSxuPT09bz8obj10LHQ9MCk6bj1mbChuKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU+PXZuKHQsbikmJmU8Z24odCxuKX0oZT1obChlKSx0LG4pfSxCbi5pbnZva2U9amwsQm4uaXNBcmd1bWVudHM9JGEsQm4uaXNBcnJheT1OYSxCbi5pc0FycmF5QnVmZmVyPUZhLEJuLmlzQXJyYXlMaWtlPVVhLEJuLmlzQXJyYXlMaWtlT2JqZWN0PVdhLEJuLmlzQm9vbGVhbj1mdW5jdGlvbihlKXtyZXR1cm4hMD09PWV8fCExPT09ZXx8UWEoZSkmJnhyKGUpPT1tfSxCbi5pc0J1ZmZlcj16YSxCbi5pc0RhdGU9R2EsQm4uaXNFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBRYShlKSYmMT09PWUubm9kZVR5cGUmJiFubChlKX0sQm4uaXNFbXB0eT1mdW5jdGlvbihlKXtpZihudWxsPT1lKXJldHVybiEwO2lmKFVhKGUpJiYoTmEoZSl8fFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnNwbGljZXx8emEoZSl8fGxsKGUpfHwkYShlKSkpcmV0dXJuIWUubGVuZ3RoO3ZhciB0PWZpKGUpO2lmKHQ9PXh8fHQ9PVMpcmV0dXJuIWUuc2l6ZTtpZih3aShlKSlyZXR1cm4hSXIoZSkubGVuZ3RoO2Zvcih2YXIgbiBpbiBlKWlmKEllLmNhbGwoZSxuKSlyZXR1cm4hMTtyZXR1cm4hMH0sQm4uaXNFcXVhbD1mdW5jdGlvbihlLHQpe3JldHVybiBNcihlLHQpfSxCbi5pc0VxdWFsV2l0aD1mdW5jdGlvbihlLHQsbil7dmFyIHI9KG49XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOm8pP24oZSx0KTpvO3JldHVybiByPT09bz9NcihlLHQsbyxuKTohIXJ9LEJuLmlzRXJyb3I9cWEsQm4uaXNGaW5pdGU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJkh0KGUpfSxCbi5pc0Z1bmN0aW9uPVlhLEJuLmlzSW50ZWdlcj1LYSxCbi5pc0xlbmd0aD1YYSxCbi5pc01hcD1lbCxCbi5pc01hdGNoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10fHxrcihlLHQsbGkodCkpfSxCbi5pc01hdGNoV2l0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOm8sa3IoZSx0LGxpKHQpLG4pfSxCbi5pc05hTj1mdW5jdGlvbihlKXtyZXR1cm4gdGwoZSkmJmUhPStlfSxCbi5pc05hdGl2ZT1mdW5jdGlvbihlKXtpZih5aShlKSl0aHJvdyBuZXcgYmUoXCJVbnN1cHBvcnRlZCBjb3JlLWpzIHVzZS4gVHJ5IGh0dHBzOi8vbnBtcy5pby9zZWFyY2g/cT1wb255ZmlsbC5cIik7cmV0dXJuIFJyKGUpfSxCbi5pc05pbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZX0sQm4uaXNOdWxsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZX0sQm4uaXNOdW1iZXI9dGwsQm4uaXNPYmplY3Q9SmEsQm4uaXNPYmplY3RMaWtlPVFhLEJuLmlzUGxhaW5PYmplY3Q9bmwsQm4uaXNSZWdFeHA9cmwsQm4uaXNTYWZlSW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4gS2EoZSkmJmU+PS05MDA3MTk5MjU0NzQwOTkxJiZlPD1mfSxCbi5pc1NldD1vbCxCbi5pc1N0cmluZz1pbCxCbi5pc1N5bWJvbD1hbCxCbi5pc1R5cGVkQXJyYXk9bGwsQm4uaXNVbmRlZmluZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1vfSxCbi5pc1dlYWtNYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIFFhKGUpJiZmaShlKT09a30sQm4uaXNXZWFrU2V0PWZ1bmN0aW9uKGUpe3JldHVybiBRYShlKSYmXCJbb2JqZWN0IFdlYWtTZXRdXCI9PXhyKGUpfSxCbi5qb2luPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/XCJcIjpVdC5jYWxsKGUsdCl9LEJuLmtlYmFiQ2FzZT1ObCxCbi5sYXN0PXFpLEJuLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIGk9cjtyZXR1cm4gbiE9PW8mJihpPShpPWRsKG4pKTwwP2duKHIraSwwKTp2bihpLHItMSkpLHQ9PXQ/ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uKzE7ci0tOylpZihlW3JdPT09dClyZXR1cm4gcjtyZXR1cm4gcn0oZSx0LGkpOlZ0KGUsJHQsaSwhMCl9LEJuLmxvd2VyQ2FzZT1GbCxCbi5sb3dlckZpcnN0PVVsLEJuLmx0PXNsLEJuLmx0ZT1jbCxCbi5tYXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2RyKGUsdHMsX3IpOm99LEJuLm1heEJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2RyKGUsaWkodCwyKSxfcik6b30sQm4ubWVhbj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoZSx0cyl9LEJuLm1lYW5CeT1mdW5jdGlvbihlLHQpe3JldHVybiBOdChlLGlpKHQsMikpfSxCbi5taW49ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2RyKGUsdHMsQXIpOm99LEJuLm1pbkJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2RyKGUsaWkodCwyKSxBcik6b30sQm4uc3R1YkFycmF5PXBzLEJuLnN0dWJGYWxzZT1ocyxCbi5zdHViT2JqZWN0PWZ1bmN0aW9uKCl7cmV0dXJue319LEJuLnN0dWJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIlwifSxCbi5zdHViVHJ1ZT1mdW5jdGlvbigpe3JldHVybiEwfSxCbi5tdWx0aXBseT13cyxCbi5udGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/RHIoZSxkbCh0KSk6b30sQm4ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBmdC5fPT09dGhpcyYmKGZ0Ll89VmUpLHRoaXN9LEJuLm5vb3A9YXMsQm4ubm93PU9hLEJuLnBhZD1mdW5jdGlvbihlLHQsbil7ZT12bChlKTt2YXIgcj0odD1kbCh0KSk/Y24oZSk6MDtpZighdHx8cj49dClyZXR1cm4gZTt2YXIgbz0odC1yKS8yO3JldHVybiAkbyhwdChvKSxuKStlKyRvKGR0KG8pLG4pfSxCbi5wYWRFbmQ9ZnVuY3Rpb24oZSx0LG4pe2U9dmwoZSk7dmFyIHI9KHQ9ZGwodCkpP2NuKGUpOjA7cmV0dXJuIHQmJnI8dD9lKyRvKHQtcixuKTplfSxCbi5wYWRTdGFydD1mdW5jdGlvbihlLHQsbil7ZT12bChlKTt2YXIgcj0odD1kbCh0KSk/Y24oZSk6MDtyZXR1cm4gdCYmcjx0PyRvKHQtcixuKStlOmV9LEJuLnBhcnNlSW50PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnx8bnVsbD09dD90PTA6dCYmKHQ9K3QpLENuKHZsKGUpLnJlcGxhY2UocmUsXCJcIiksdHx8MCl9LEJuLnJhbmRvbT1mdW5jdGlvbihlLHQsbil7aWYobiYmXCJib29sZWFuXCIhPXR5cGVvZiBuJiZ2aShlLHQsbikmJih0PW49byksbj09PW8mJihcImJvb2xlYW5cIj09dHlwZW9mIHQ/KG49dCx0PW8pOlwiYm9vbGVhblwiPT10eXBlb2YgZSYmKG49ZSxlPW8pKSxlPT09byYmdD09PW8/KGU9MCx0PTEpOihlPWZsKGUpLHQ9PT1vPyh0PWUsZT0wKTp0PWZsKHQpKSxlPnQpe3ZhciByPWU7ZT10LHQ9cn1pZihufHxlJTF8fHQlMSl7dmFyIGk9eW4oKTtyZXR1cm4gdm4oZStpKih0LWUrbHQoXCIxZS1cIisoKGkrXCJcIikubGVuZ3RoLTEpKSksdCl9cmV0dXJuIFVyKGUsdCl9LEJuLnJlZHVjZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmEoZSk/SXQ6V3Qsbz1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIHIoZSxpaSh0LDQpLG4sbyxjcil9LEJuLnJlZHVjZVJpZ2h0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1OYShlKT9BdDpXdCxvPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gcihlLGlpKHQsNCksbixvLHVyKX0sQm4ucmVwZWF0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD0obj92aShlLHQsbik6dD09PW8pPzE6ZGwodCksV3IodmwoZSksdCl9LEJuLnJlcGxhY2U9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMsdD12bChlWzBdKTtyZXR1cm4gZS5sZW5ndGg8Mz90OnQucmVwbGFjZShlWzFdLGVbMl0pfSxCbi5yZXN1bHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPS0xLGk9KHQ9dm8odCxlKSkubGVuZ3RoO2ZvcihpfHwoaT0xLGU9byk7KytyPGk7KXt2YXIgYT1udWxsPT1lP286ZVtUaSh0W3JdKV07YT09PW8mJihyPWksYT1uKSxlPVlhKGEpP2EuY2FsbChlKTphfXJldHVybiBlfSxCbi5yb3VuZD1icyxCbi5ydW5JbkNvbnRleHQ9ZSxCbi5zYW1wbGU9ZnVuY3Rpb24oZSl7cmV0dXJuKE5hKGUpP3FuOkdyKShlKX0sQm4uc2l6ZT1mdW5jdGlvbihlKXtpZihudWxsPT1lKXJldHVybiAwO2lmKFVhKGUpKXJldHVybiBpbChlKT9jbihlKTplLmxlbmd0aDt2YXIgdD1maShlKTtyZXR1cm4gdD09eHx8dD09Uz9lLnNpemU6SXIoZSkubGVuZ3RofSxCbi5zbmFrZUNhc2U9V2wsQm4uc29tZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmEoZSk/VHQ6ZW87cmV0dXJuIG4mJnZpKGUsdCxuKSYmKHQ9bykscihlLGlpKHQsMykpfSxCbi5zb3J0ZWRJbmRleD1mdW5jdGlvbihlLHQpe3JldHVybiB0byhlLHQpfSxCbi5zb3J0ZWRJbmRleEJ5PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbm8oZSx0LGlpKG4sMikpfSxCbi5zb3J0ZWRJbmRleE9mPWZ1bmN0aW9uKGUsdCl7dmFyIG49bnVsbD09ZT8wOmUubGVuZ3RoO2lmKG4pe3ZhciByPXRvKGUsdCk7aWYocjxuJiZWYShlW3JdLHQpKXJldHVybiByfXJldHVybi0xfSxCbi5zb3J0ZWRMYXN0SW5kZXg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdG8oZSx0LCEwKX0sQm4uc29ydGVkTGFzdEluZGV4Qnk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBubyhlLHQsaWkobiwyKSwhMCl9LEJuLnNvcnRlZExhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9ZSYmZS5sZW5ndGgpe3ZhciBuPXRvKGUsdCwhMCktMTtpZihWYShlW25dLHQpKXJldHVybiBufXJldHVybi0xfSxCbi5zdGFydENhc2U9emwsQm4uc3RhcnRzV2l0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9dmwoZSksbj1udWxsPT1uPzA6b3IoZGwobiksMCxlLmxlbmd0aCksdD1pbyh0KSxlLnNsaWNlKG4sbit0Lmxlbmd0aCk9PXR9LEJuLnN1YnRyYWN0PXhzLEJuLnN1bT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/enQoZSx0cyk6MH0sQm4uc3VtQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/enQoZSxpaSh0LDIpKTowfSxCbi50ZW1wbGF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9Qm4udGVtcGxhdGVTZXR0aW5ncztuJiZ2aShlLHQsbikmJih0PW8pLGU9dmwoZSksdD15bCh7fSx0LHIsWW8pO3ZhciBpLGEsbD15bCh7fSx0LmltcG9ydHMsci5pbXBvcnRzLFlvKSxzPU1sKGwpLGM9S3QobCxzKSx1PTAsZj10LmludGVycG9sYXRlfHx5ZSxkPVwiX19wICs9ICdcIixwPUxlKCh0LmVzY2FwZXx8eWUpLnNvdXJjZStcInxcIitmLnNvdXJjZStcInxcIisoZj09PVg/ZmU6eWUpLnNvdXJjZStcInxcIisodC5ldmFsdWF0ZXx8eWUpLnNvdXJjZStcInwkXCIsXCJnXCIpLGg9XCIvLyMgc291cmNlVVJMPVwiKyhJZS5jYWxsKHQsXCJzb3VyY2VVUkxcIik/KHQuc291cmNlVVJMK1wiXCIpLnJlcGxhY2UoL1xccy9nLFwiIFwiKTpcImxvZGFzaC50ZW1wbGF0ZVNvdXJjZXNbXCIrICsrcnQrXCJdXCIpK1wiXFxuXCI7ZS5yZXBsYWNlKHAsKGZ1bmN0aW9uKHQsbixyLG8sbCxzKXtyZXR1cm4gcnx8KHI9byksZCs9ZS5zbGljZSh1LHMpLnJlcGxhY2Uod2Usbm4pLG4mJihpPSEwLGQrPVwiJyArXFxuX19lKFwiK24rXCIpICtcXG4nXCIpLGwmJihhPSEwLGQrPVwiJztcXG5cIitsK1wiO1xcbl9fcCArPSAnXCIpLHImJihkKz1cIicgK1xcbigoX190ID0gKFwiK3IrXCIpKSA9PSBudWxsID8gJycgOiBfX3QpICtcXG4nXCIpLHU9cyt0Lmxlbmd0aCx0fSkpLGQrPVwiJztcXG5cIjt2YXIgZz1JZS5jYWxsKHQsXCJ2YXJpYWJsZVwiKSYmdC52YXJpYWJsZTtpZihnKXtpZihjZS50ZXN0KGcpKXRocm93IG5ldyBiZShcIkludmFsaWQgYHZhcmlhYmxlYCBvcHRpb24gcGFzc2VkIGludG8gYF8udGVtcGxhdGVgXCIpfWVsc2UgZD1cIndpdGggKG9iaikge1xcblwiK2QrXCJcXG59XFxuXCI7ZD0oYT9kLnJlcGxhY2UoTixcIlwiKTpkKS5yZXBsYWNlKEYsXCIkMVwiKS5yZXBsYWNlKFUsXCIkMTtcIiksZD1cImZ1bmN0aW9uKFwiKyhnfHxcIm9ialwiKStcIikge1xcblwiKyhnP1wiXCI6XCJvYmogfHwgKG9iaiA9IHt9KTtcXG5cIikrXCJ2YXIgX190LCBfX3AgPSAnJ1wiKyhpP1wiLCBfX2UgPSBfLmVzY2FwZVwiOlwiXCIpKyhhP1wiLCBfX2ogPSBBcnJheS5wcm90b3R5cGUuam9pbjtcXG5mdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH1cXG5cIjpcIjtcXG5cIikrZCtcInJldHVybiBfX3BcXG59XCI7dmFyIHY9S2woKGZ1bmN0aW9uKCl7cmV0dXJuIHhlKHMsaCtcInJldHVybiBcIitkKS5hcHBseShvLGMpfSkpO2lmKHYuc291cmNlPWQscWEodikpdGhyb3cgdjtyZXR1cm4gdn0sQm4udGltZXM9ZnVuY3Rpb24oZSx0KXtpZigoZT1kbChlKSk8MXx8ZT5mKXJldHVybltdO3ZhciBuPXAscj12bihlLHApO3Q9aWkodCksZS09cDtmb3IodmFyIG89R3Qocix0KTsrK248ZTspdChuKTtyZXR1cm4gb30sQm4udG9GaW5pdGU9ZmwsQm4udG9JbnRlZ2VyPWRsLEJuLnRvTGVuZ3RoPXBsLEJuLnRvTG93ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHZsKGUpLnRvTG93ZXJDYXNlKCl9LEJuLnRvTnVtYmVyPWhsLEJuLnRvU2FmZUludGVnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/b3IoZGwoZSksLTkwMDcxOTkyNTQ3NDA5OTEsZik6MD09PWU/ZTowfSxCbi50b1N0cmluZz12bCxCbi50b1VwcGVyPWZ1bmN0aW9uKGUpe3JldHVybiB2bChlKS50b1VwcGVyQ2FzZSgpfSxCbi50cmltPWZ1bmN0aW9uKGUsdCxuKXtpZigoZT12bChlKSkmJihufHx0PT09bykpcmV0dXJuIHF0KGUpO2lmKCFlfHwhKHQ9aW8odCkpKXJldHVybiBlO3ZhciByPXVuKGUpLGk9dW4odCk7cmV0dXJuIENvKHIsSnQocixpKSxRdChyLGkpKzEpLmpvaW4oXCJcIil9LEJuLnRyaW1FbmQ9ZnVuY3Rpb24oZSx0LG4pe2lmKChlPXZsKGUpKSYmKG58fHQ9PT1vKSlyZXR1cm4gZS5zbGljZSgwLGZuKGUpKzEpO2lmKCFlfHwhKHQ9aW8odCkpKXJldHVybiBlO3ZhciByPXVuKGUpO3JldHVybiBDbyhyLDAsUXQocix1bih0KSkrMSkuam9pbihcIlwiKX0sQm4udHJpbVN0YXJ0PWZ1bmN0aW9uKGUsdCxuKXtpZigoZT12bChlKSkmJihufHx0PT09bykpcmV0dXJuIGUucmVwbGFjZShyZSxcIlwiKTtpZighZXx8ISh0PWlvKHQpKSlyZXR1cm4gZTt2YXIgcj11bihlKTtyZXR1cm4gQ28ocixKdChyLHVuKHQpKSkuam9pbihcIlwiKX0sQm4udHJ1bmNhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj0zMCxyPVwiLi4uXCI7aWYoSmEodCkpe3ZhciBpPVwic2VwYXJhdG9yXCJpbiB0P3Quc2VwYXJhdG9yOmk7bj1cImxlbmd0aFwiaW4gdD9kbCh0Lmxlbmd0aCk6bixyPVwib21pc3Npb25cImluIHQ/aW8odC5vbWlzc2lvbik6cn12YXIgYT0oZT12bChlKSkubGVuZ3RoO2lmKHJuKGUpKXt2YXIgbD11bihlKTthPWwubGVuZ3RofWlmKG4+PWEpcmV0dXJuIGU7dmFyIHM9bi1jbihyKTtpZihzPDEpcmV0dXJuIHI7dmFyIGM9bD9DbyhsLDAscykuam9pbihcIlwiKTplLnNsaWNlKDAscyk7aWYoaT09PW8pcmV0dXJuIGMrcjtpZihsJiYocys9Yy5sZW5ndGgtcykscmwoaSkpe2lmKGUuc2xpY2Uocykuc2VhcmNoKGkpKXt2YXIgdSxmPWM7Zm9yKGkuZ2xvYmFsfHwoaT1MZShpLnNvdXJjZSx2bChkZS5leGVjKGkpKStcImdcIikpLGkubGFzdEluZGV4PTA7dT1pLmV4ZWMoZik7KXZhciBkPXUuaW5kZXg7Yz1jLnNsaWNlKDAsZD09PW8/czpkKX19ZWxzZSBpZihlLmluZGV4T2YoaW8oaSkscykhPXMpe3ZhciBwPWMubGFzdEluZGV4T2YoaSk7cD4tMSYmKGM9Yy5zbGljZSgwLHApKX1yZXR1cm4gYytyfSxCbi51bmVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4oZT12bChlKSkmJkcudGVzdChlKT9lLnJlcGxhY2UoVyxkbik6ZX0sQm4udW5pcXVlSWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9KytBZTtyZXR1cm4gdmwoZSkrdH0sQm4udXBwZXJDYXNlPUdsLEJuLnVwcGVyRmlyc3Q9cWwsQm4uZWFjaD12YSxCbi5lYWNoUmlnaHQ9bWEsQm4uZmlyc3Q9VWksaXMoQm4sKGdzPXt9LG1yKEJuLChmdW5jdGlvbihlLHQpe0llLmNhbGwoQm4ucHJvdG90eXBlLHQpfHwoZ3NbdF09ZSl9KSksZ3MpLHtjaGFpbjohMX0pLEJuLlZFUlNJT049XCI0LjE3LjIxXCIsTHQoW1wiYmluZFwiLFwiYmluZEtleVwiLFwiY3VycnlcIixcImN1cnJ5UmlnaHRcIixcInBhcnRpYWxcIixcInBhcnRpYWxSaWdodFwiXSwoZnVuY3Rpb24oZSl7Qm5bZV0ucGxhY2Vob2xkZXI9Qm59KSksTHQoW1wiZHJvcFwiLFwidGFrZVwiXSwoZnVuY3Rpb24oZSx0KXskbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24obil7bj1uPT09bz8xOmduKGRsKG4pLDApO3ZhciByPXRoaXMuX19maWx0ZXJlZF9fJiYhdD9uZXcgJG4odGhpcyk6dGhpcy5jbG9uZSgpO3JldHVybiByLl9fZmlsdGVyZWRfXz9yLl9fdGFrZUNvdW50X189dm4obixyLl9fdGFrZUNvdW50X18pOnIuX192aWV3c19fLnB1c2goe3NpemU6dm4obixwKSx0eXBlOmUrKHIuX19kaXJfXzwwP1wiUmlnaHRcIjpcIlwiKX0pLHJ9LCRuLnByb3RvdHlwZVtlK1wiUmlnaHRcIl09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpW2VdKHQpLnJldmVyc2UoKX19KSksTHQoW1wiZmlsdGVyXCIsXCJtYXBcIixcInRha2VXaGlsZVwiXSwoZnVuY3Rpb24oZSx0KXt2YXIgbj10KzEscj0xPT1ufHwzPT1uOyRuLnByb3RvdHlwZVtlXT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNsb25lKCk7cmV0dXJuIHQuX19pdGVyYXRlZXNfXy5wdXNoKHtpdGVyYXRlZTppaShlLDMpLHR5cGU6bn0pLHQuX19maWx0ZXJlZF9fPXQuX19maWx0ZXJlZF9ffHxyLHR9fSkpLEx0KFtcImhlYWRcIixcImxhc3RcIl0sKGZ1bmN0aW9uKGUsdCl7dmFyIG49XCJ0YWtlXCIrKHQ/XCJSaWdodFwiOlwiXCIpOyRuLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW25dKDEpLnZhbHVlKClbMF19fSkpLEx0KFtcImluaXRpYWxcIixcInRhaWxcIl0sKGZ1bmN0aW9uKGUsdCl7dmFyIG49XCJkcm9wXCIrKHQ/XCJcIjpcIlJpZ2h0XCIpOyRuLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZmlsdGVyZWRfXz9uZXcgJG4odGhpcyk6dGhpc1tuXSgxKX19KSksJG4ucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIodHMpfSwkbi5wcm90b3R5cGUuZmluZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWx0ZXIoZSkuaGVhZCgpfSwkbi5wcm90b3R5cGUuZmluZExhc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQoZSl9LCRuLnByb3RvdHlwZS5pbnZva2VNYXA9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9uZXcgJG4odGhpcyk6dGhpcy5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBTcihuLGUsdCl9KSl9KSksJG4ucHJvdG90eXBlLnJlamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWx0ZXIoSWEoaWkoZSkpKX0sJG4ucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7ZT1kbChlKTt2YXIgbj10aGlzO3JldHVybiBuLl9fZmlsdGVyZWRfXyYmKGU+MHx8dDwwKT9uZXcgJG4obik6KGU8MD9uPW4udGFrZVJpZ2h0KC1lKTplJiYobj1uLmRyb3AoZSkpLHQhPT1vJiYobj0odD1kbCh0KSk8MD9uLmRyb3BSaWdodCgtdCk6bi50YWtlKHQtZSkpLG4pfSwkbi5wcm90b3R5cGUudGFrZVJpZ2h0V2hpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLnRha2VXaGlsZShlKS5yZXZlcnNlKCl9LCRuLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFrZShwKX0sbXIoJG4ucHJvdG90eXBlLChmdW5jdGlvbihlLHQpe3ZhciBuPS9eKD86ZmlsdGVyfGZpbmR8bWFwfHJlamVjdCl8V2hpbGUkLy50ZXN0KHQpLHI9L14oPzpoZWFkfGxhc3QpJC8udGVzdCh0KSxpPUJuW3I/XCJ0YWtlXCIrKFwibGFzdFwiPT10P1wiUmlnaHRcIjpcIlwiKTp0XSxhPXJ8fC9eZmluZC8udGVzdCh0KTtpJiYoQm4ucHJvdG90eXBlW3RdPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX3dyYXBwZWRfXyxsPXI/WzFdOmFyZ3VtZW50cyxzPXQgaW5zdGFuY2VvZiAkbixjPWxbMF0sdT1zfHxOYSh0KSxmPWZ1bmN0aW9uKGUpe3ZhciB0PWkuYXBwbHkoQm4sUHQoW2VdLGwpKTtyZXR1cm4gciYmZD90WzBdOnR9O3UmJm4mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGMmJjEhPWMubGVuZ3RoJiYocz11PSExKTt2YXIgZD10aGlzLl9fY2hhaW5fXyxwPSEhdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgsaD1hJiYhZCxnPXMmJiFwO2lmKCFhJiZ1KXt0PWc/dDpuZXcgJG4odGhpcyk7dmFyIHY9ZS5hcHBseSh0LGwpO3JldHVybiB2Ll9fYWN0aW9uc19fLnB1c2goe2Z1bmM6ZmEsYXJnczpbZl0sdGhpc0FyZzpvfSksbmV3IFpuKHYsZCl9cmV0dXJuIGgmJmc/ZS5hcHBseSh0aGlzLGwpOih2PXRoaXMudGhydShmKSxoP3I/di52YWx1ZSgpWzBdOnYudmFsdWUoKTp2KX0pfSkpLEx0KFtcInBvcFwiLFwicHVzaFwiLFwic2hpZnRcIixcInNvcnRcIixcInNwbGljZVwiLFwidW5zaGlmdFwiXSwoZnVuY3Rpb24oZSl7dmFyIHQ9amVbZV0sbj0vXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QoZSk/XCJ0YXBcIjpcInRocnVcIixyPS9eKD86cG9wfHNoaWZ0KSQvLnRlc3QoZSk7Qm4ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzO2lmKHImJiF0aGlzLl9fY2hhaW5fXyl7dmFyIG89dGhpcy52YWx1ZSgpO3JldHVybiB0LmFwcGx5KE5hKG8pP286W10sZSl9cmV0dXJuIHRoaXNbbl0oKGZ1bmN0aW9uKG4pe3JldHVybiB0LmFwcGx5KE5hKG4pP246W10sZSl9KSl9fSkpLG1yKCRuLnByb3RvdHlwZSwoZnVuY3Rpb24oZSx0KXt2YXIgbj1Cblt0XTtpZihuKXt2YXIgcj1uLm5hbWUrXCJcIjtJZS5jYWxsKGpuLHIpfHwoam5bcl09W10pLGpuW3JdLnB1c2goe25hbWU6dCxmdW5jOm59KX19KSksam5bQm8obywyKS5uYW1lXT1be25hbWU6XCJ3cmFwcGVyXCIsZnVuYzpvfV0sJG4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGU9bmV3ICRuKHRoaXMuX193cmFwcGVkX18pO3JldHVybiBlLl9fYWN0aW9uc19fPUVvKHRoaXMuX19hY3Rpb25zX18pLGUuX19kaXJfXz10aGlzLl9fZGlyX18sZS5fX2ZpbHRlcmVkX189dGhpcy5fX2ZpbHRlcmVkX18sZS5fX2l0ZXJhdGVlc19fPUVvKHRoaXMuX19pdGVyYXRlZXNfXyksZS5fX3Rha2VDb3VudF9fPXRoaXMuX190YWtlQ291bnRfXyxlLl9fdmlld3NfXz1Fbyh0aGlzLl9fdmlld3NfXyksZX0sJG4ucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24oKXtpZih0aGlzLl9fZmlsdGVyZWRfXyl7dmFyIGU9bmV3ICRuKHRoaXMpO2UuX19kaXJfXz0tMSxlLl9fZmlsdGVyZWRfXz0hMH1lbHNlKGU9dGhpcy5jbG9uZSgpKS5fX2Rpcl9fKj0tMTtyZXR1cm4gZX0sJG4ucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX3dyYXBwZWRfXy52YWx1ZSgpLHQ9dGhpcy5fX2Rpcl9fLG49TmEoZSkscj10PDAsbz1uP2UubGVuZ3RoOjAsaT1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPS0xLG89bi5sZW5ndGg7KytyPG87KXt2YXIgaT1uW3JdLGE9aS5zaXplO3N3aXRjaChpLnR5cGUpe2Nhc2VcImRyb3BcIjplKz1hO2JyZWFrO2Nhc2VcImRyb3BSaWdodFwiOnQtPWE7YnJlYWs7Y2FzZVwidGFrZVwiOnQ9dm4odCxlK2EpO2JyZWFrO2Nhc2VcInRha2VSaWdodFwiOmU9Z24oZSx0LWEpfX1yZXR1cm57c3RhcnQ6ZSxlbmQ6dH19KDAsbyx0aGlzLl9fdmlld3NfXyksYT1pLnN0YXJ0LGw9aS5lbmQscz1sLWEsYz1yP2w6YS0xLHU9dGhpcy5fX2l0ZXJhdGVlc19fLGY9dS5sZW5ndGgsZD0wLHA9dm4ocyx0aGlzLl9fdGFrZUNvdW50X18pO2lmKCFufHwhciYmbz09cyYmcD09cylyZXR1cm4gdW8oZSx0aGlzLl9fYWN0aW9uc19fKTt2YXIgaD1bXTtlOmZvcig7cy0tJiZkPHA7KXtmb3IodmFyIGc9LTEsdj1lW2MrPXRdOysrZzxmOyl7dmFyIG09dVtnXSxDPW0uaXRlcmF0ZWUseT1tLnR5cGUsdz1DKHYpO2lmKDI9PXkpdj13O2Vsc2UgaWYoIXcpe2lmKDE9PXkpY29udGludWUgZTticmVhayBlfX1oW2QrK109dn1yZXR1cm4gaH0sQm4ucHJvdG90eXBlLmF0PWRhLEJuLnByb3RvdHlwZS5jaGFpbj1mdW5jdGlvbigpe3JldHVybiB1YSh0aGlzKX0sQm4ucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbigpe3JldHVybiBuZXcgWm4odGhpcy52YWx1ZSgpLHRoaXMuX19jaGFpbl9fKX0sQm4ucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt0aGlzLl9fdmFsdWVzX189PT1vJiYodGhpcy5fX3ZhbHVlc19fPXVsKHRoaXMudmFsdWUoKSkpO3ZhciBlPXRoaXMuX19pbmRleF9fPj10aGlzLl9fdmFsdWVzX18ubGVuZ3RoO3JldHVybntkb25lOmUsdmFsdWU6ZT9vOnRoaXMuX192YWx1ZXNfX1t0aGlzLl9faW5kZXhfXysrXX19LEJuLnByb3RvdHlwZS5wbGFudD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj10aGlzO24gaW5zdGFuY2VvZiBEbjspe3ZhciByPUJpKG4pO3IuX19pbmRleF9fPTAsci5fX3ZhbHVlc19fPW8sdD9pLl9fd3JhcHBlZF9fPXI6dD1yO3ZhciBpPXI7bj1uLl9fd3JhcHBlZF9ffXJldHVybiBpLl9fd3JhcHBlZF9fPWUsdH0sQm4ucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fd3JhcHBlZF9fO2lmKGUgaW5zdGFuY2VvZiAkbil7dmFyIHQ9ZTtyZXR1cm4gdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgmJih0PW5ldyAkbih0aGlzKSksKHQ9dC5yZXZlcnNlKCkpLl9fYWN0aW9uc19fLnB1c2goe2Z1bmM6ZmEsYXJnczpbSmldLHRoaXNBcmc6b30pLG5ldyBabih0LHRoaXMuX19jaGFpbl9fKX1yZXR1cm4gdGhpcy50aHJ1KEppKX0sQm4ucHJvdG90eXBlLnRvSlNPTj1Cbi5wcm90b3R5cGUudmFsdWVPZj1Cbi5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdW8odGhpcy5fX3dyYXBwZWRfXyx0aGlzLl9fYWN0aW9uc19fKX0sQm4ucHJvdG90eXBlLmZpcnN0PUJuLnByb3RvdHlwZS5oZWFkLFllJiYoQm4ucHJvdG90eXBlW1llXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksQm59KCk7ZnQuXz1wbiwocj1mdW5jdGlvbigpe3JldHVybiBwbn0uY2FsbCh0LG4sdCxlKSk9PT1vfHwoZS5leHBvcnRzPXIpfS5jYWxsKHRoaXMpfSw3NDE4OmU9Pnt2YXIgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxyPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciBlPW5ldyBTdHJpbmcoXCJhYmNcIik7aWYoZVs1XT1cImRlXCIsXCI1XCI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKVswXSlyZXR1cm4hMTtmb3IodmFyIHQ9e30sbj0wO248MTA7bisrKXRbXCJfXCIrU3RyaW5nLmZyb21DaGFyQ29kZShuKV09bjtpZihcIjAxMjM0NTY3ODlcIiE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSkuam9pbihcIlwiKSlyZXR1cm4hMTt2YXIgcj17fTtyZXR1cm5cImFiY2RlZmdoaWprbG1ub3BxcnN0XCIuc3BsaXQoXCJcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cltlXT1lfSkpLFwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIj09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30scikpLmpvaW4oXCJcIil9Y2F0Y2goZSl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24oZSxvKXtmb3IodmFyIGksYSxsPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBPYmplY3QoZSl9KGUpLHM9MTtzPGFyZ3VtZW50cy5sZW5ndGg7cysrKXtmb3IodmFyIGMgaW4gaT1PYmplY3QoYXJndW1lbnRzW3NdKSluLmNhbGwoaSxjKSYmKGxbY109aVtjXSk7aWYodCl7YT10KGkpO2Zvcih2YXIgdT0wO3U8YS5sZW5ndGg7dSsrKXIuY2FsbChpLGFbdV0pJiYobFthW3VdXT1pW2FbdV1dKX19cmV0dXJuIGx9fSw5Mjk0OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1uKDY1NSksbz1uKDQzOTQpLGk9bigzNTczKSxhPW4oNDgzOSk7dmFyIGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX0oYSkscz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIE1hdGgubWluKE1hdGgubWF4KG4sZSksdCl9LGM9LjAwMSx1PS4wMSxmPTEwLGQ9LjA1LHA9MSxoPTEyO2Z1bmN0aW9uIGcoZSx0KXtyZXR1cm4gZSpNYXRoLnNxcnQoMS10KnQpfXZhciB2PVtcImR1cmF0aW9uXCIsXCJib3VuY2VcIl0sbT1bXCJzdGlmZm5lc3NcIixcImRhbXBpbmdcIixcIm1hc3NcIl07ZnVuY3Rpb24gQyhlLHQpe3JldHVybiB0LnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT1lW3RdfSkpfWZ1bmN0aW9uIHkoZSl7dmFyIHQ9ZS5mcm9tLG49dm9pZCAwPT09dD8wOnQsaT1lLnRvLGE9dm9pZCAwPT09aT8xOmksbD1lLnJlc3RTcGVlZCx5PXZvaWQgMD09PWw/MjpsLGI9ZS5yZXN0RGVsdGEseD1yLl9fcmVzdChlLFtcImZyb21cIixcInRvXCIsXCJyZXN0U3BlZWRcIixcInJlc3REZWx0YVwiXSksXz17ZG9uZTohMSx2YWx1ZTpufSxPPWZ1bmN0aW9uKGUpe3ZhciB0PXIuX19hc3NpZ24oe3ZlbG9jaXR5OjAsc3RpZmZuZXNzOjEwMCxkYW1waW5nOjEwLG1hc3M6MSxpc1Jlc29sdmVkRnJvbUR1cmF0aW9uOiExfSxlKTtpZighQyhlLG0pJiZDKGUsdikpe3ZhciBuPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lLmR1cmF0aW9uLGk9dm9pZCAwPT09cj84MDA6cixhPWUuYm91bmNlLGw9dm9pZCAwPT09YT8uMjU6YSx2PWUudmVsb2NpdHksbT12b2lkIDA9PT12PzA6dixDPWUubWFzcyx5PXZvaWQgMD09PUM/MTpDO28ud2FybmluZyhpPD0xZTMqZixcIlNwcmluZyBkdXJhdGlvbiBtdXN0IGJlIDEwIHNlY29uZHMgb3IgbGVzc1wiKTt2YXIgdz0xLWw7dz1zKGQscCx3KSxpPXModSxmLGkvMWUzKSx3PDE/KHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSp3LG49dCppLHI9dC1tLG89ZyhlLHcpLGE9TWF0aC5leHAoLW4pO3JldHVybiBjLXIvbyphfSxuPWZ1bmN0aW9uKGUpe3ZhciBuPWUqdyppLHI9biptK20sbz1NYXRoLnBvdyh3LDIpKk1hdGgucG93KGUsMikqaSxhPU1hdGguZXhwKC1uKSxsPWcoTWF0aC5wb3coZSwyKSx3KTtyZXR1cm4oLXQoZSkrYz4wPy0xOjEpKigoci1vKSphKS9sfSk6KHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZXhwKC1lKmkpKigoZS1tKSppKzEpLWN9LG49ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZXhwKC1lKmkpKihpKmkqKG0tZSkpfSk7dmFyIGI9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uLG89MTtvPGg7bysrKXItPWUocikvdChyKTtyZXR1cm4gcn0odCxuLDUvaSk7aWYoaSo9MWUzLGlzTmFOKGIpKXJldHVybntzdGlmZm5lc3M6MTAwLGRhbXBpbmc6MTAsZHVyYXRpb246aX07dmFyIHg9TWF0aC5wb3coYiwyKSp5O3JldHVybntzdGlmZm5lc3M6eCxkYW1waW5nOjIqdypNYXRoLnNxcnQoeSp4KSxkdXJhdGlvbjppfX0oZSk7KHQ9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdCksbikse3ZlbG9jaXR5OjAsbWFzczoxfSkpLmlzUmVzb2x2ZWRGcm9tRHVyYXRpb249ITB9cmV0dXJuIHR9KHgpLEw9Ty5zdGlmZm5lc3MsRT1PLmRhbXBpbmcsUz1PLm1hc3Msaj1PLnZlbG9jaXR5LE09Ty5kdXJhdGlvbixrPU8uaXNSZXNvbHZlZEZyb21EdXJhdGlvbixSPXcsUD13O2Z1bmN0aW9uIEkoKXt2YXIgZT1qPy1qLzFlMzowLHQ9YS1uLHI9RS8oMipNYXRoLnNxcnQoTCpTKSksbz1NYXRoLnNxcnQoTC9TKS8xZTM7aWYobnVsbCE9Ynx8KGI9TWF0aC5hYnMoYS1uKTw9MT8uMDE6LjQpLHI8MSl7dmFyIGk9ZyhvLHIpO1I9ZnVuY3Rpb24obil7dmFyIGw9TWF0aC5leHAoLXIqbypuKTtyZXR1cm4gYS1sKigoZStyKm8qdCkvaSpNYXRoLnNpbihpKm4pK3QqTWF0aC5jb3MoaSpuKSl9LFA9ZnVuY3Rpb24obil7dmFyIGE9TWF0aC5leHAoLXIqbypuKTtyZXR1cm4gcipvKmEqKE1hdGguc2luKGkqbikqKGUrcipvKnQpL2krdCpNYXRoLmNvcyhpKm4pKS1hKihNYXRoLmNvcyhpKm4pKihlK3Iqbyp0KS1pKnQqTWF0aC5zaW4oaSpuKSl9fWVsc2UgaWYoMT09PXIpUj1mdW5jdGlvbihuKXtyZXR1cm4gYS1NYXRoLmV4cCgtbypuKSoodCsoZStvKnQpKm4pfTtlbHNle3ZhciBsPW8qTWF0aC5zcXJ0KHIqci0xKTtSPWZ1bmN0aW9uKG4pe3ZhciBpPU1hdGguZXhwKC1yKm8qbikscz1NYXRoLm1pbihsKm4sMzAwKTtyZXR1cm4gYS1pKigoZStyKm8qdCkqTWF0aC5zaW5oKHMpK2wqdCpNYXRoLmNvc2gocykpL2x9fX1yZXR1cm4gSSgpLHtuZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PVIoZSk7aWYoaylfLmRvbmU9ZT49TTtlbHNle3ZhciBuPTFlMypQKGUpLHI9TWF0aC5hYnMobik8PXksbz1NYXRoLmFicyhhLXQpPD1iO18uZG9uZT1yJiZvfXJldHVybiBfLnZhbHVlPV8uZG9uZT9hOnQsX30sZmxpcFRhcmdldDpmdW5jdGlvbigpe3ZhciBlO2o9LWosbj0oZT1bYSxuXSlbMF0sYT1lWzFdLEkoKX19fXkubmVlZHNJbnRlcnBvbGF0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwic3RyaW5nXCI9PXR5cGVvZiB0fTt2YXIgdz1mdW5jdGlvbihlKXtyZXR1cm4gMH0sYj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC1lO3JldHVybiAwPT09cj8xOihuLWUpL3J9LHg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybi1uKmUrbip0K2V9LF89ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUqZSxvPXQqdDtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgubWF4KDAsbiooby1yKStyKSl9LE89W2kuaGV4LGkucmdiYSxpLmhzbGFdLEw9ZnVuY3Rpb24oZSl7cmV0dXJuIE8uZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGVzdChlKX0pKX0sRT1mdW5jdGlvbihlKXtyZXR1cm5cIidcIitlK1wiJyBpcyBub3QgYW4gYW5pbWF0YWJsZSBjb2xvci4gVXNlIHRoZSBlcXVpdmFsZW50IGNvbG9yIGNvZGUgaW5zdGVhZC5cIn0sUz1mdW5jdGlvbihlLHQpe3ZhciBuPUwoZSksYT1MKHQpO28uaW52YXJpYW50KCEhbixFKGUpKSxvLmludmFyaWFudCghIWEsRSh0KSksby5pbnZhcmlhbnQobi50cmFuc2Zvcm09PT1hLnRyYW5zZm9ybSxcIkJvdGggY29sb3JzIG11c3QgYmUgaGV4L1JHQkEsIE9SIGJvdGggbXVzdCBiZSBIU0xBLlwiKTt2YXIgbD1uLnBhcnNlKGUpLHM9YS5wYXJzZSh0KSxjPXIuX19hc3NpZ24oe30sbCksdT1uPT09aS5oc2xhP3g6XztyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIGMpXCJhbHBoYVwiIT09dCYmKGNbdF09dShsW3RdLHNbdF0sZSkpO3JldHVybiBjLmFscGhhPXgobC5hbHBoYSxzLmFscGhhLGUpLG4udHJhbnNmb3JtKGMpfX0saj17eDowLHk6MCx6OjB9LE09ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGV9LGs9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQoZShuKSl9fSxSPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO3JldHVybiBlLnJlZHVjZShrKX07ZnVuY3Rpb24gUChlLHQpe3JldHVybiBNKGUpP2Z1bmN0aW9uKG4pe3JldHVybiB4KGUsdCxuKX06aS5jb2xvci50ZXN0KGUpP1MoZSx0KTpIKGUsdCl9dmFyIEk9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yLl9fc3ByZWFkQXJyYXkoW10sZSksbz1uLmxlbmd0aCxpPWUubWFwKChmdW5jdGlvbihlLG4pe3JldHVybiBQKGUsdFtuXSl9KSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8bzt0Kyspblt0XT1pW3RdKGUpO3JldHVybiBufX0sQT1mdW5jdGlvbihlLHQpe3ZhciBuPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxlKSx0KSxvPXt9O2Zvcih2YXIgaSBpbiBuKXZvaWQgMCE9PWVbaV0mJnZvaWQgMCE9PXRbaV0mJihvW2ldPVAoZVtpXSx0W2ldKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBvKW5bdF09b1t0XShlKTtyZXR1cm4gbn19O2Z1bmN0aW9uIFQoZSl7Zm9yKHZhciB0PWkuY29tcGxleC5wYXJzZShlKSxuPXQubGVuZ3RoLHI9MCxvPTAsYT0wLGw9MDtsPG47bCsrKXJ8fFwibnVtYmVyXCI9PXR5cGVvZiB0W2xdP3IrKzp2b2lkIDAhPT10W2xdLmh1ZT9hKys6bysrO3JldHVybntwYXJzZWQ6dCxudW1OdW1iZXJzOnIsbnVtUkdCOm8sbnVtSFNMOmF9fXZhciBIPWZ1bmN0aW9uKGUsdCl7dmFyIG49aS5jb21wbGV4LmNyZWF0ZVRyYW5zZm9ybWVyKHQpLHI9VChlKSxhPVQodCk7cmV0dXJuIG8uaW52YXJpYW50KHIubnVtSFNMPT09YS5udW1IU0wmJnIubnVtUkdCPT09YS5udW1SR0ImJnIubnVtTnVtYmVycz49YS5udW1OdW1iZXJzLFwiQ29tcGxleCB2YWx1ZXMgJ1wiK2UrXCInIGFuZCAnXCIrdCtcIicgdG9vIGRpZmZlcmVudCB0byBtaXguIEVuc3VyZSBhbGwgY29sb3JzIGFyZSBvZiB0aGUgc2FtZSB0eXBlLlwiKSxSKEkoci5wYXJzZWQsYS5wYXJzZWQpLG4pfSxCPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB4KGUsdCxuKX19O2Z1bmN0aW9uIFYoZSx0LG4pe3ZhciByPXZvaWQgMD09PW4/e306bixhPXIuY2xhbXAsbD12b2lkIDA9PT1hfHxhLGM9ci5lYXNlLHU9ci5taXhlcixmPWUubGVuZ3RoO28uaW52YXJpYW50KGY9PT10Lmxlbmd0aCxcIkJvdGggaW5wdXQgYW5kIG91dHB1dCByYW5nZXMgbXVzdCBiZSB0aGUgc2FtZSBsZW5ndGhcIiksby5pbnZhcmlhbnQoIWN8fCFBcnJheS5pc0FycmF5KGMpfHxjLmxlbmd0aD09PWYtMSxcIkFycmF5IG9mIGVhc2luZyBmdW5jdGlvbnMgbXVzdCBiZSBvZiBsZW5ndGggYGlucHV0Lmxlbmd0aCAtIDFgLCBhcyBpdCBhcHBsaWVzIHRvIHRoZSB0cmFuc2l0aW9ucyAqKmJldHdlZW4qKiB0aGUgZGVmaW5lZCB2YWx1ZXMuXCIpLGVbMF0+ZVtmLTFdJiYoZT1bXS5jb25jYXQoZSksdD1bXS5jb25jYXQodCksZS5yZXZlcnNlKCksdC5yZXZlcnNlKCkpO3ZhciBkPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHIsbz1bXSxhPW58fChcIm51bWJlclwiPT10eXBlb2Yocj1lWzBdKT9COlwic3RyaW5nXCI9PXR5cGVvZiByP2kuY29sb3IudGVzdChyKT9TOkg6QXJyYXkuaXNBcnJheShyKT9JOlwib2JqZWN0XCI9PXR5cGVvZiByP0E6dm9pZCAwKSxsPWUubGVuZ3RoLTEscz0wO3M8bDtzKyspe3ZhciBjPWEoZVtzXSxlW3MrMV0pO2lmKHQpe3ZhciB1PUFycmF5LmlzQXJyYXkodCk/dFtzXTp0O2M9Uih1LGMpfW8ucHVzaChjKX1yZXR1cm4gb30odCxjLHUpLHA9Mj09PWY/ZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzBdLHI9ZVsxXSxvPXRbMF07cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBvKGIobixyLGUpKX19KGUsZCk6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPW4tMTtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIGk9MCxhPSExO2lmKG88PWVbMF0/YT0hMDpvPj1lW3JdJiYoaT1yLTEsYT0hMCksIWEpe2Zvcih2YXIgbD0xO2w8biYmIShlW2xdPm98fGw9PT1yKTtsKyspO2k9bC0xfXZhciBzPWIoZVtpXSxlW2krMV0sbyk7cmV0dXJuIHRbaV0ocyl9fShlLGQpO3JldHVybiBsP2Z1bmN0aW9uKHQpe3JldHVybiBwKHMoZVswXSxlW2YtMV0sdCkpfTpwfXZhciBEPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gMS1lKDEtdCl9fSxaPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDw9LjU/ZSgyKnQpLzI6KDItZSgyKigxLXQpKSkvMn19LCQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LGUpfX0sTj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQqdCooKGUrMSkqdC1lKX19LEY9ZnVuY3Rpb24oZSl7dmFyIHQ9TihlKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuKGUqPTIpPDE/LjUqdChlKTouNSooMi1NYXRoLnBvdygyLC0xMCooZS0xKSkpfX0sVT1mdW5jdGlvbihlKXtyZXR1cm4gZX0sVz0kKDIpLHo9RChXKSxHPVooVykscT1mdW5jdGlvbihlKXtyZXR1cm4gMS1NYXRoLnNpbihNYXRoLmFjb3MoZSkpfSxZPUQocSksSz1aKFkpLFg9TigxLjUyNSksSj1EKFgpLFE9WihYKSxlZT1GKDEuNTI1KSx0ZT1mdW5jdGlvbihlKXtpZigxPT09ZXx8MD09PWUpcmV0dXJuIGU7dmFyIHQ9ZSplO3JldHVybiBlPC4zNjM2MzYzNjM2MzYzNjM2NT83LjU2MjUqdDplPC43MjcyNzI3MjcyNzI3MjczPzkuMDc1KnQtOS45KmUrMy40OmU8Ljk/MTIuMDY2NDgxOTk0NDU5ODMzKnQtMTkuNjM1NDU3MDYzNzExOTEqZSs4Ljg5ODA2MDk0MTgyODI1NToxMC44KmUqZS0yMC41MiplKzEwLjcyfSxuZT1EKHRlKTtmdW5jdGlvbiByZShlLHQpe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gdHx8R30pKS5zcGxpY2UoMCxlLmxlbmd0aC0xKX1mdW5jdGlvbiBvZShlKXt2YXIgdD1lLmZyb20sbj12b2lkIDA9PT10PzA6dCxyPWUudG8sbz12b2lkIDA9PT1yPzE6cixpPWUuZWFzZSxhPWUub2Zmc2V0LGw9ZS5kdXJhdGlvbixzPXZvaWQgMD09PWw/MzAwOmwsYz17ZG9uZTohMSx2YWx1ZTpufSx1PUFycmF5LmlzQXJyYXkobyk/bzpbbixvXSxmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZSp0fSkpfShhJiZhLmxlbmd0aD09PXUubGVuZ3RoP2E6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGUubWFwKChmdW5jdGlvbihlLG4pe3JldHVybiAwIT09bj9uLyh0LTEpOjB9KSl9KHUpLHMpO2Z1bmN0aW9uIGQoKXtyZXR1cm4gVihmLHUse2Vhc2U6QXJyYXkuaXNBcnJheShpKT9pOnJlKHUsaSl9KX12YXIgcD1kKCk7cmV0dXJue25leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGMudmFsdWU9cChlKSxjLmRvbmU9ZT49cyxjfSxmbGlwVGFyZ2V0OmZ1bmN0aW9uKCl7dS5yZXZlcnNlKCkscD1kKCl9fX1mdW5jdGlvbiBpZShlKXt2YXIgdD1lLnZlbG9jaXR5LG49dm9pZCAwPT09dD8wOnQscj1lLmZyb20sbz12b2lkIDA9PT1yPzA6cixpPWUucG93ZXIsYT12b2lkIDA9PT1pPy44OmksbD1lLnRpbWVDb25zdGFudCxzPXZvaWQgMD09PWw/MzUwOmwsYz1lLnJlc3REZWx0YSx1PXZvaWQgMD09PWM/LjU6YyxmPWUubW9kaWZ5VGFyZ2V0LGQ9e2RvbmU6ITEsdmFsdWU6b30scD1hKm4saD1vK3AsZz12b2lkIDA9PT1mP2g6ZihoKTtyZXR1cm4gZyE9PWgmJihwPWctbykse25leHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9LXAqTWF0aC5leHAoLWUvcyk7cmV0dXJuIGQuZG9uZT0hKHQ+dXx8dDwtdSksZC52YWx1ZT1kLmRvbmU/ZzpnK3QsZH0sZmxpcFRhcmdldDpmdW5jdGlvbigpe319fXZhciBhZT17a2V5ZnJhbWVzOm9lLHNwcmluZzp5LGRlY2F5OmllfTtmdW5jdGlvbiBsZShlLHQsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTApLGUtdC1ufXZhciBzZT1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbih0KXt2YXIgbj10LmRlbHRhO3JldHVybiBlKG4pfTtyZXR1cm57c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5kZWZhdWx0LnVwZGF0ZSh0LCEwKX0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBhLmNhbmNlbFN5bmMudXBkYXRlKHQpfX19O2Z1bmN0aW9uIGNlKGUpe3ZhciB0LG4sbyxpLGEsbD1lLmZyb20scz1lLmF1dG9wbGF5LGM9dm9pZCAwPT09c3x8cyx1PWUuZHJpdmVyLGY9dm9pZCAwPT09dT9zZTp1LGQ9ZS5lbGFwc2VkLHA9dm9pZCAwPT09ZD8wOmQsaD1lLnJlcGVhdCxnPXZvaWQgMD09PWg/MDpoLHY9ZS5yZXBlYXRUeXBlLG09dm9pZCAwPT09dj9cImxvb3BcIjp2LEM9ZS5yZXBlYXREZWxheSx3PXZvaWQgMD09PUM/MDpDLGI9ZS5vblBsYXkseD1lLm9uU3RvcCxfPWUub25Db21wbGV0ZSxPPWUub25SZXBlYXQsTD1lLm9uVXBkYXRlLEU9ci5fX3Jlc3QoZSxbXCJmcm9tXCIsXCJhdXRvcGxheVwiLFwiZHJpdmVyXCIsXCJlbGFwc2VkXCIsXCJyZXBlYXRcIixcInJlcGVhdFR5cGVcIixcInJlcGVhdERlbGF5XCIsXCJvblBsYXlcIixcIm9uU3RvcFwiLFwib25Db21wbGV0ZVwiLFwib25SZXBlYXRcIixcIm9uVXBkYXRlXCJdKSxTPUUudG8saj0wLE09RS5kdXJhdGlvbixrPSExLFI9ITAsUD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUudG8pKXJldHVybiBvZTtpZihhZVtlLnR5cGVdKXJldHVybiBhZVtlLnR5cGVdO3ZhciB0PW5ldyBTZXQoT2JqZWN0LmtleXMoZSkpO3JldHVybiB0LmhhcyhcImVhc2VcIil8fHQuaGFzKFwiZHVyYXRpb25cIikmJiF0LmhhcyhcImRhbXBpbmdSYXRpb1wiKT9vZTp0LmhhcyhcImRhbXBpbmdSYXRpb1wiKXx8dC5oYXMoXCJzdGlmZm5lc3NcIil8fHQuaGFzKFwibWFzc1wiKXx8dC5oYXMoXCJkYW1waW5nXCIpfHx0LmhhcyhcInJlc3RTcGVlZFwiKXx8dC5oYXMoXCJyZXN0RGVsdGFcIik/eTpvZX0oRSk7KG51bGw9PT0obj0odD1QKS5uZWVkc0ludGVycG9sYXRpb24pfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmNhbGwodCxsLFMpKSYmKGE9VihbMCwxMDBdLFtsLFNdLHtjbGFtcDohMX0pLGw9MCxTPTEwMCk7dmFyIEk9UChyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sRSkse2Zyb206bCx0bzpTfSkpO3JldHVybiBjJiYobnVsbD09Ynx8YigpLChvPWYoKGZ1bmN0aW9uKGUpe2lmKFJ8fChlPS1lKSxwKz1lLCFrKXt2YXIgdD1JLm5leHQoTWF0aC5tYXgoMCxwKSk7aT10LnZhbHVlLGEmJihpPWEoaSkpLGs9Uj90LmRvbmU6cDw9MH1udWxsPT1MfHxMKGkpLGsmJigwPT09aiYmKG51bGwhPU18fChNPXApKSxqPGc/ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHI/ZT49dCtuOmU8PS1ufShwLE0sdyxSKSYmKGorKyxcInJldmVyc2VcIj09PW0/cD1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09ciYmKHI9ITApLHI/bGUodCstZSx0LG4pOnQtKGUtdCkrbn0ocCxNLHcsUj1qJTI9PTApOihwPWxlKHAsTSx3KSxcIm1pcnJvclwiPT09bSYmSS5mbGlwVGFyZ2V0KCkpLGs9ITEsTyYmTygpKTooby5zdG9wKCksXyYmXygpKSl9KSkpLnN0YXJ0KCkpLHtzdG9wOmZ1bmN0aW9uKCl7bnVsbD09eHx8eCgpLG8uc3RvcCgpfX19ZnVuY3Rpb24gdWUoZSx0KXtyZXR1cm4gdD9lKigxZTMvdCk6MH12YXIgZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIDE4MCplL01hdGguUEl9LGRlPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxwZT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ZGUpLGZ1bmN0aW9uKHQsbixyKXt2YXIgbz1uLXIsaT0tKDAtdCsxKSooMC1lKE1hdGguYWJzKG8pKSk7cmV0dXJuIG88PTA/bitpOm4taX19LGhlPXBlKCksZ2U9cGUoTWF0aC5zcXJ0KSx2ZT1mdW5jdGlvbihlKXtyZXR1cm4gZSpNYXRoLlBJLzE4MH0sbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaGFzT3duUHJvcGVydHkoXCJ4XCIpJiZlLmhhc093blByb3BlcnR5KFwieVwiKX0sQ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG1lKGUpJiZlLmhhc093blByb3BlcnR5KFwielwiKX0seWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5hYnMoZS10KX0sd2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MiksdD1NYXRoLnBvdygxMCx0KSxNYXRoLnJvdW5kKGUqdCkvdH0sYmU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHZvaWQgMD09PXImJihyPTApLHdlKGUrbioodC1lKS9NYXRoLm1heChyLG4pKX0seGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMS0zKnQrMyplfSxfZT1mdW5jdGlvbihlLHQpe3JldHVybiAzKnQtNiplfSxPZT1mdW5jdGlvbihlKXtyZXR1cm4gMyplfSxMZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuKCh4ZSh0LG4pKmUrX2UodCxuKSkqZStPZSh0KSkqZX0sRWU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAzKnhlKHQsbikqZSplKzIqX2UodCxuKSplK09lKHQpfSxTZT0uMTt0LmFuZ2xlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PWopLGZlKE1hdGguYXRhbjIodC55LWUueSx0LngtZS54KSl9LHQuYW5pbWF0ZT1jZSx0LmFudGljaXBhdGU9ZWUsdC5hcHBseU9mZnNldD1mdW5jdGlvbihlLHQpe3ZhciBuPSEwO3JldHVybiB2b2lkIDA9PT10JiYodD1lLG49ITEpLGZ1bmN0aW9uKHIpe3JldHVybiBuP3ItZSt0OihlPXIsbj0hMCx0KX19LHQuYXR0cmFjdD1oZSx0LmF0dHJhY3RFeHBvPWdlLHQuYmFja0luPVgsdC5iYWNrSW5PdXQ9USx0LmJhY2tPdXQ9Six0LmJvdW5jZUluPW5lLHQuYm91bmNlSW5PdXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU8LjU/LjUqKDEtdGUoMS0yKmUpKTouNSp0ZSgyKmUtMSkrLjV9LHQuYm91bmNlT3V0PXRlLHQuY2lyY0luPXEsdC5jaXJjSW5PdXQ9Syx0LmNpcmNPdXQ9WSx0LmNsYW1wPXMsdC5jcmVhdGVBbnRpY2lwYXRlPUYsdC5jcmVhdGVBdHRyYWN0b3I9cGUsdC5jcmVhdGVCYWNrSW49Tix0LmNyZWF0ZUV4cG9Jbj0kLHQuY3ViaWNCZXppZXI9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT09PXQmJm49PT1yKXJldHVybiBVO2Zvcih2YXIgbz1uZXcgRmxvYXQzMkFycmF5KDExKSxpPTA7aTwxMTsrK2kpb1tpXT1MZShpKlNlLGUsbik7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiAwPT09aXx8MT09PWk/aTpMZShmdW5jdGlvbih0KXtmb3IodmFyIHI9MCxpPTE7MTAhPT1pJiZvW2ldPD10OysraSlyKz1TZTstLWk7dmFyIGE9cisodC1vW2ldKS8ob1tpKzFdLW9baV0pKlNlLGw9RWUoYSxlLG4pO3JldHVybiBsPj0uMDAxP2Z1bmN0aW9uKGUsdCxuLHIpe2Zvcih2YXIgbz0wO288ODsrK28pe3ZhciBpPUVlKHQsbixyKTtpZigwPT09aSlyZXR1cm4gdDt0LT0oTGUodCxuLHIpLWUpL2l9cmV0dXJuIHR9KHQsYSxlLG4pOjA9PT1sP2E6ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgaSxhLGw9MDtkb3soaT1MZShhPXQrKG4tdCkvMixyLG8pLWUpPjA/bj1hOnQ9YX13aGlsZShNYXRoLmFicyhpKT4xZS03JiYrK2w8MTApO3JldHVybiBhfSh0LHIscitTZSxlLG4pfShpKSx0LHIpfX0sdC5kZWNheT1pZSx0LmRlZ3JlZXNUb1JhZGlhbnM9dmUsdC5kaXN0YW5jZT1mdW5jdGlvbihlLHQpe2lmKE0oZSkmJk0odCkpcmV0dXJuIHllKGUsdCk7aWYobWUoZSkmJm1lKHQpKXt2YXIgbj15ZShlLngsdC54KSxyPXllKGUueSx0LnkpLG89Q2UoZSkmJkNlKHQpP3llKGUueix0LnopOjA7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhuLDIpK01hdGgucG93KHIsMikrTWF0aC5wb3cobywyKSl9fSx0LmVhc2VJbj1XLHQuZWFzZUluT3V0PUcsdC5lYXNlT3V0PXosdC5pbmVydGlhPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5mcm9tLG89dm9pZCAwPT09bj8wOm4saT1lLnZlbG9jaXR5LGw9dm9pZCAwPT09aT8wOmkscz1lLm1pbixjPWUubWF4LHU9ZS5wb3dlcixmPXZvaWQgMD09PXU/Ljg6dSxkPWUudGltZUNvbnN0YW50LHA9dm9pZCAwPT09ZD83NTA6ZCxoPWUuYm91bmNlU3RpZmZuZXNzLGc9dm9pZCAwPT09aD81MDA6aCx2PWUuYm91bmNlRGFtcGluZyxtPXZvaWQgMD09PXY/MTA6dixDPWUucmVzdERlbHRhLHk9dm9pZCAwPT09Qz8xOkMsdz1lLm1vZGlmeVRhcmdldCxiPWUuZHJpdmVyLHg9ZS5vblVwZGF0ZSxfPWUub25Db21wbGV0ZTtmdW5jdGlvbiBPKGUpe3JldHVybiB2b2lkIDAhPT1zJiZlPHN8fHZvaWQgMCE9PWMmJmU+Y31mdW5jdGlvbiBMKGUpe3JldHVybiB2b2lkIDA9PT1zP2M6dm9pZCAwPT09Y3x8TWF0aC5hYnMocy1lKTxNYXRoLmFicyhjLWUpP3M6Y31mdW5jdGlvbiBFKGUpe251bGw9PXR8fHQuc3RvcCgpLHQ9Y2Uoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGUpLHtkcml2ZXI6YixvblVwZGF0ZTpmdW5jdGlvbih0KXt2YXIgbjtudWxsPT14fHx4KHQpLG51bGw9PT0obj1lLm9uVXBkYXRlKXx8dm9pZCAwPT09bnx8bi5jYWxsKGUsdCl9LG9uQ29tcGxldGU6X30pKX1mdW5jdGlvbiBTKGUpe0Uoci5fX2Fzc2lnbih7dHlwZTpcInNwcmluZ1wiLHN0aWZmbmVzczpnLGRhbXBpbmc6bSxyZXN0RGVsdGE6eX0sZSkpfWlmKE8obykpUyh7ZnJvbTpvLHZlbG9jaXR5OmwsdG86TChvKX0pO2Vsc2V7dmFyIGo9ZipsK287dm9pZCAwIT09dyYmKGo9dyhqKSk7dmFyIE0sayxSPUwoaiksUD1SPT09cz8tMToxO0Uoe3R5cGU6XCJkZWNheVwiLGZyb206byx2ZWxvY2l0eTpsLHRpbWVDb25zdGFudDpwLHBvd2VyOmYscmVzdERlbHRhOnksbW9kaWZ5VGFyZ2V0Oncsb25VcGRhdGU6TyhqKT9mdW5jdGlvbihlKXtNPWssaz1lLGw9dWUoZS1NLGEuZ2V0RnJhbWVEYXRhKCkuZGVsdGEpLCgxPT09UCYmZT5SfHwtMT09PVAmJmU8UikmJlMoe2Zyb206ZSx0bzpSLHZlbG9jaXR5Omx9KX06dm9pZCAwfSl9cmV0dXJue3N0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dC5zdG9wKCl9fX0sdC5pbnRlcnBvbGF0ZT1WLHQuaXNQb2ludD1tZSx0LmlzUG9pbnQzRD1DZSx0LmtleWZyYW1lcz1vZSx0LmxpbmVhcj1VLHQubWlycm9yRWFzaW5nPVosdC5taXg9eCx0Lm1peENvbG9yPVMsdC5taXhDb21wbGV4PUgsdC5waXBlPVIsdC5wb2ludEZyb21WZWN0b3I9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXZlKHQpLHt4Om4qTWF0aC5jb3ModCkrZS54LHk6bipNYXRoLnNpbih0KStlLnl9fSx0LnByb2dyZXNzPWIsdC5yYWRpYW5zVG9EZWdyZWVzPWZlLHQucmV2ZXJzZUVhc2luZz1ELHQuc21vb3RoPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPTUwKTt2YXIgdD0wLG49MDtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG89YS5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXAsaT1vIT09bj9vLW46MCxsPWk/YmUodCxyLGksZSk6dDtyZXR1cm4gbj1vLHQ9bCxsfX0sdC5zbW9vdGhGcmFtZT1iZSx0LnNuYXA9ZnVuY3Rpb24oZSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQvZSkqZX07dmFyIHQ9MCxuPWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbz1NYXRoLmFicyhlWzBdLXIpO2Zvcih0PTE7dDxuO3QrKyl7dmFyIGk9ZVt0XSxhPU1hdGguYWJzKGktcik7aWYoMD09PWEpcmV0dXJuIGk7aWYoYT5vKXJldHVybiBlW3QtMV07aWYodD09PW4tMSlyZXR1cm4gaTtvPWF9fX0sdC5zcHJpbmc9eSx0LnN0ZXBzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PVwiZW5kXCIpLGZ1bmN0aW9uKG4pe3ZhciByPShuPVwiZW5kXCI9PT10P01hdGgubWluKG4sLjk5OSk6TWF0aC5tYXgobiwuMDAxKSkqZSxvPVwiZW5kXCI9PT10P01hdGguZmxvb3Iocik6TWF0aC5jZWlsKHIpO3JldHVybiBzKDAsMSxvL2UpfX0sdC50b0RlY2ltYWw9d2UsdC52ZWxvY2l0eVBlckZyYW1lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUvKDFlMy90KX0sdC52ZWxvY2l0eVBlclNlY29uZD11ZSx0LndyYXA9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQtZTtyZXR1cm4oKG4tZSklcityKSVyK2V9fSwyNzAzOihlLHQsbik9Pnt2YXIgcj1uKDQxNCk7ZnVuY3Rpb24gbygpe31mdW5jdGlvbiBpKCl7fWkucmVzZXRXYXJuaW5nQ2FjaGU9byxlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLG8saSxhKXtpZihhIT09cil7dmFyIGw9bmV3IEVycm9yKFwiQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlc1wiKTt0aHJvdyBsLm5hbWU9XCJJbnZhcmlhbnQgVmlvbGF0aW9uXCIsbH19ZnVuY3Rpb24gdCgpe3JldHVybiBlfWUuaXNSZXF1aXJlZD1lO3ZhciBuPXthcnJheTplLGJpZ2ludDplLGJvb2w6ZSxmdW5jOmUsbnVtYmVyOmUsb2JqZWN0OmUsc3RyaW5nOmUsc3ltYm9sOmUsYW55OmUsYXJyYXlPZjp0LGVsZW1lbnQ6ZSxlbGVtZW50VHlwZTplLGluc3RhbmNlT2Y6dCxub2RlOmUsb2JqZWN0T2Y6dCxvbmVPZjp0LG9uZU9mVHlwZTp0LHNoYXBlOnQsZXhhY3Q6dCxjaGVja1Byb3BUeXBlczppLHJlc2V0V2FybmluZ0NhY2hlOm99O3JldHVybiBuLlByb3BUeXBlcz1uLG59fSw1Njk3OihlLHQsbik9PntlLmV4cG9ydHM9bigyNzAzKSgpfSw0MTQ6ZT0+e2UuZXhwb3J0cz1cIlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEXCJ9LDcyOTI6KGUsdCxuKT0+e24ucih0KSxuLmQodCx7Q2FsZW5kYXI6KCk9PkpuLENlbnR1cnlWaWV3OigpPT5rdCxEZWNhZGVWaWV3OigpPT5OdCxNb250aFZpZXc6KCk9PlNuLE5hdmlnYXRpb246KCk9Pk5lLFllYXJWaWV3OigpPT50bixkZWZhdWx0OigpPT50cn0pO3ZhciByPW4oNjY4OSksbz1uLm4ociksaT1uKDU2OTcpLGE9bi5uKGkpO2Z1bmN0aW9uIGwoZSl7dmFyIHQsbixyPVwiXCI7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwibnVtYmVyXCI9PXR5cGVvZiBlKXIrPWU7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgZSlpZihBcnJheS5pc0FycmF5KGUpKWZvcih0PTA7dDxlLmxlbmd0aDt0KyspZVt0XSYmKG49bChlW3RdKSkmJihyJiYocis9XCIgXCIpLHIrPW4pO2Vsc2UgZm9yKHQgaW4gZSllW3RdJiYociYmKHIrPVwiIFwiKSxyKz10KTtyZXR1cm4gcn1jb25zdCBzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQsbj0wLHI9XCJcIjtuPGFyZ3VtZW50cy5sZW5ndGg7KShlPWFyZ3VtZW50c1tuKytdKSYmKHQ9bChlKSkmJihyJiYocis9XCIgXCIpLHIrPXQpO3JldHVybiByfTt2YXIgYz1uKDc3MyksdT1uLm4oYyk7ZnVuY3Rpb24gZihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9dmFyIGQ9dSgpKChmdW5jdGlvbihlKXt2YXIgdCxuPXZvaWQgMD09PWU/e306ZSxyPW4udXNlRmFsbGJhY2tMb2NhbGUsbz12b2lkIDA9PT1yfHxyLGk9bi5mYWxsYmFja0xvY2FsZSxhPXZvaWQgMD09PWk/XCJlbi1VU1wiOmksbD1bXTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXt2YXIgcz13aW5kb3cubmF2aWdhdG9yO2w9bC5jb25jYXQocy5sYW5ndWFnZXMscy5sYW5ndWFnZSxzLnVzZXJMYW5ndWFnZSxzLmJyb3dzZXJMYW5ndWFnZSxzLnN5c3RlbUxhbmd1YWdlKX1yZXR1cm4gbyYmbC5wdXNoKGEpLGZ1bmN0aW9uKGUpe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7aWYoIWV8fC0xPT09ZS5pbmRleE9mKFwiLVwiKXx8ZS50b0xvd2VyQ2FzZSgpIT09ZSlyZXR1cm4gZTt2YXIgdD1lLnNwbGl0KFwiLVwiKTtyZXR1cm4gdFswXStcIi1cIit0WzFdLnRvVXBwZXJDYXNlKCl9KSl9KCh0PWwpLmZpbHRlcigoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZSYmdC5pbmRleE9mKGUpPT09bn0pKSl9KSxmKSxwPXUoKSgoZnVuY3Rpb24oZSl7cmV0dXJuIGQoZSlbMF18fG51bGx9KSxmKTtjb25zdCBoPXA7ZnVuY3Rpb24gZyhlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIsbyl7dm9pZCAwPT09byYmKG89bik7dmFyIGk9ZShyKStvO3JldHVybiB0KGkpfX1mdW5jdGlvbiB2KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbmV3IERhdGUoZSh0KS5nZXRUaW1lKCktMSl9fWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuW2UobiksdChuKV19fWZ1bmN0aW9uIEMoZSl7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGUuZ2V0RnVsbFllYXIoKTtpZihcIm51bWJlclwiPT10eXBlb2YgZSlyZXR1cm4gZTt2YXIgdD1wYXJzZUludChlLDEwKTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmIWlzTmFOKHQpKXJldHVybiB0O3Rocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgeWVhciBmcm9tIGRhdGU6IFwiLmNvbmNhdChlLFwiLlwiKSl9ZnVuY3Rpb24geShlKXtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gZS5nZXRNb250aCgpO3Rocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgbW9udGggZnJvbSBkYXRlOiBcIi5jb25jYXQoZSxcIi5cIikpfWZ1bmN0aW9uIHcoZSl7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGUuZ2V0RGF0ZSgpO3Rocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgeWVhciBmcm9tIGRhdGU6IFwiLmNvbmNhdChlLFwiLlwiKSl9ZnVuY3Rpb24gYihlKXt2YXIgdD1DKGUpLG49dCsoMS10KSUxMDAscj1uZXcgRGF0ZTtyZXR1cm4gci5zZXRGdWxsWWVhcihuLDAsMSksci5zZXRIb3VycygwLDAsMCwwKSxyfXZhciB4PWcoQyxiLC0xMDApLF89ZyhDLGIsMTAwKSxPPXYoXyksTD1nKEMsTywtMTAwKSxFPShnKEMsTywxMDApLG0oYixPKSk7ZnVuY3Rpb24gUyhlKXt2YXIgdD1DKGUpLG49dCsoMS10KSUxMCxyPW5ldyBEYXRlO3JldHVybiByLnNldEZ1bGxZZWFyKG4sMCwxKSxyLnNldEhvdXJzKDAsMCwwLDApLHJ9dmFyIGo9ZyhDLFMsLTEwKSxNPWcoQyxTLDEwKSxrPXYoTSksUj1nKEMsaywtMTApLFA9KGcoQyxrLDEwKSxtKFMsaykpO2Z1bmN0aW9uIEkoZSl7dmFyIHQ9QyhlKSxuPW5ldyBEYXRlO3JldHVybiBuLnNldEZ1bGxZZWFyKHQsMCwxKSxuLnNldEhvdXJzKDAsMCwwLDApLG59dmFyIEE9ZyhDLEksLTEpLFQ9ZyhDLEksMSksSD12KFQpLEI9ZyhDLEgsLTEpLFY9KGcoQyxILDEpLG0oSSxIKSk7ZnVuY3Rpb24gRChlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZvaWQgMD09PXImJihyPXQpO3ZhciBvPUMobiksaT15KG4pK3IsYT1uZXcgRGF0ZTtyZXR1cm4gYS5zZXRGdWxsWWVhcihvLGksMSksYS5zZXRIb3VycygwLDAsMCwwKSxlKGEpfX1mdW5jdGlvbiBaKGUpe3ZhciB0PUMoZSksbj15KGUpLHI9bmV3IERhdGU7cmV0dXJuIHIuc2V0RnVsbFllYXIodCxuLDEpLHIuc2V0SG91cnMoMCwwLDAsMCkscn12YXIgJD1EKFosLTEpLE49RChaLDEpLEY9dihOKSxVPUQoRiwtMSksVz0oRChGLDEpLG0oWixGKSk7ZnVuY3Rpb24geihlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZvaWQgMD09PXImJihyPXQpO3ZhciBvPUMobiksaT15KG4pLGE9dyhuKStyLGw9bmV3IERhdGU7cmV0dXJuIGwuc2V0RnVsbFllYXIobyxpLGEpLGwuc2V0SG91cnMoMCwwLDAsMCksZShsKX19ZnVuY3Rpb24gRyhlKXt2YXIgdD1DKGUpLG49eShlKSxyPXcoZSksbz1uZXcgRGF0ZTtyZXR1cm4gby5zZXRGdWxsWWVhcih0LG4sciksby5zZXRIb3VycygwLDAsMCwwKSxvfXooRywtMSk7dmFyIHEsWT12KHooRywxKSksSz0oeihZLC0xKSx6KFksMSksbShHLFkpKTtmdW5jdGlvbiBYKGUpe3JldHVybiB3KEYoZSkpfWZ1bmN0aW9uIEooZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBRKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX12YXIgZWUsdGU9e0FSQUJJQzpcIkFyYWJpY1wiLEhFQlJFVzpcIkhlYnJld1wiLElTT184NjAxOlwiSVNPIDg2MDFcIixVUzpcIlVTXCJ9LG5lPShRKHE9e30sdGUuVVMsW1wiZW4tQ0FcIixcImVuLVVTXCIsXCJlcy1BUlwiLFwiZXMtQk9cIixcImVzLUNMXCIsXCJlcy1DT1wiLFwiZXMtQ1JcIixcImVzLURPXCIsXCJlcy1FQ1wiLFwiZXMtR1RcIixcImVzLUhOXCIsXCJlcy1NWFwiLFwiZXMtTklcIixcImVzLVBBXCIsXCJlcy1QRVwiLFwiZXMtUFJcIixcImVzLVNWXCIsXCJlcy1WRVwiLFwicHQtQlJcIl0pLFEocSx0ZS5BUkFCSUMsW1wiYXJcIixcImFyLUFFXCIsXCJhci1CSFwiLFwiYXItRFpcIixcImFyLUVHXCIsXCJhci1JUVwiLFwiYXItSk9cIixcImFyLUtXXCIsXCJhci1MWVwiLFwiYXItT01cIixcImFyLVFBXCIsXCJhci1TQVwiLFwiYXItU0RcIixcImFyLVNZXCIsXCJhci1ZRVwiLFwiZHZcIixcImR2LU1WXCIsXCJwc1wiLFwicHMtQVJcIl0pLFEocSx0ZS5IRUJSRVcsW1wiaGVcIixcImhlLUlMXCJdKSxxKSxyZT0oZWU9QXJyYXkoNyksZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gSihlKX0oZWUpfHxmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlZSl8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIEooZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuXCJPYmplY3RcIj09PW4mJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW58fFwiU2V0XCI9PT1uP0FycmF5LmZyb20oZSk6XCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP0ooZSx0KTp2b2lkIDB9fShlZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0pKSxvZT1uZXcgTWFwO2Z1bmN0aW9uIGllKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcj10fHxoKCk7b2UuaGFzKHIpfHxvZS5zZXQocixuZXcgTWFwKTt2YXIgbz1vZS5nZXQocik7cmV0dXJuIG8uaGFzKGUpfHxvLnNldChlLG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHIsZSkuZm9ybWF0KSxvLmdldChlKShuKX19KGUpKHQsZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGUoZSk7cmV0dXJuIG5ldyBEYXRlKHQuc2V0SG91cnMoMTIpKX0obikpfX1pZSh7ZGF5OlwibnVtZXJpY1wiLG1vbnRoOlwibnVtZXJpY1wiLHllYXI6XCJudW1lcmljXCJ9KTt2YXIgYWU9aWUoe2RheTpcIm51bWVyaWNcIn0pLGxlPWllKHtkYXk6XCJudW1lcmljXCIsbW9udGg6XCJsb25nXCIseWVhcjpcIm51bWVyaWNcIn0pLHNlPWllKHttb250aDpcImxvbmdcIn0pLGNlPWllKHttb250aDpcImxvbmdcIix5ZWFyOlwibnVtZXJpY1wifSksdWU9aWUoe3dlZWtkYXk6XCJzaG9ydFwifSksZmU9aWUoe3dlZWtkYXk6XCJsb25nXCJ9KSxkZT1pZSh7eWVhcjpcIm51bWVyaWNcIn0pLHBlPXJlWzBdLGhlPXJlWzVdLGdlPXJlWzZdO2Z1bmN0aW9uIHZlKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0ZS5JU09fODYwMSxuPWUuZ2V0RGF5KCk7c3dpdGNoKHQpe2Nhc2UgdGUuSVNPXzg2MDE6cmV0dXJuKG4rNiklNztjYXNlIHRlLkFSQUJJQzpyZXR1cm4obisxKSU3O2Nhc2UgdGUuSEVCUkVXOmNhc2UgdGUuVVM6cmV0dXJuIG47ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBjYWxlbmRhciB0eXBlLlwiKX19ZnVuY3Rpb24gbWUoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRlLklTT184NjAxLG49QyhlKSxyPXkoZSksbz1lLmdldERhdGUoKS12ZShlLHQpO3JldHVybiBuZXcgRGF0ZShuLHIsbyl9ZnVuY3Rpb24gQ2UoZSx0KXtzd2l0Y2goZSl7Y2FzZVwiY2VudHVyeVwiOnJldHVybiBiKHQpO2Nhc2VcImRlY2FkZVwiOnJldHVybiBTKHQpO2Nhc2VcInllYXJcIjpyZXR1cm4gSSh0KTtjYXNlXCJtb250aFwiOnJldHVybiBaKHQpO2Nhc2VcImRheVwiOnJldHVybiBHKHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fWZ1bmN0aW9uIHllKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4gXyh0KTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gTSh0KTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIFQodCk7Y2FzZVwibW9udGhcIjpyZXR1cm4gTih0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX12YXIgd2U9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIGoodCwtMTAwKTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIEEodCwtMTApO2Nhc2VcIm1vbnRoXCI6cmV0dXJuICQodCwtMTIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fSxiZT1mdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gTSh0LDEwMCk7Y2FzZVwieWVhclwiOnJldHVybiBUKHQsMTApO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIE4odCwxMik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19O2Z1bmN0aW9uIHhlKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4gTyh0KTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gayh0KTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIEgodCk7Y2FzZVwibW9udGhcIjpyZXR1cm4gRih0KTtjYXNlXCJkYXlcIjpyZXR1cm4gWSh0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX12YXIgX2U9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIFIodCwtMTAwKTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIEIodCwtMTApO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIFUodCwtMTIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fTtmdW5jdGlvbiBPZShlLHQpe3N3aXRjaChlKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIEUodCk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIFAodCk7Y2FzZVwieWVhclwiOnJldHVybiBWKHQpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIFcodCk7Y2FzZVwiZGF5XCI6cmV0dXJuIEsodCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19ZnVuY3Rpb24gTGUoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmRlO3JldHVybihhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCkubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSkpLmpvaW4oXCIg4oCTIFwiKX1mdW5jdGlvbiBFZShlLHQsbil7cmV0dXJuIExlKGUsdCxQKG4pKX1mdW5jdGlvbiBTZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGUuSVNPXzg2MDEsbj1lLmdldERheSgpO3N3aXRjaCh0KXtjYXNlIHRlLkFSQUJJQzpjYXNlIHRlLkhFQlJFVzpyZXR1cm4gbj09PWhlfHxuPT09Z2U7Y2FzZSB0ZS5JU09fODYwMTpjYXNlIHRlLlVTOnJldHVybiBuPT09Z2V8fG49PT1wZTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGNhbGVuZGFyIHR5cGUuXCIpfX1mdW5jdGlvbiBqZShlKXtyZXR1cm4gamU9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0samUoZSl9dmFyIE1lPU9iamVjdC52YWx1ZXModGUpLGtlPVtcImNlbnR1cnlcIixcImRlY2FkZVwiLFwieWVhclwiLFwibW9udGhcIl0sUmU9YSgpLm9uZU9mKE1lKSxQZT1hKCkub25lT2ZUeXBlKFthKCkuc3RyaW5nLGEoKS5hcnJheU9mKGEoKS5zdHJpbmcpXSksSWU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWVbdF07aWYoIXIpcmV0dXJuIG51bGw7aWYoIShyIGluc3RhbmNlb2YgRGF0ZSkpcmV0dXJuIG5ldyBFcnJvcihcIkludmFsaWQgcHJvcCBgXCIuY29uY2F0KHQsXCJgIG9mIHR5cGUgYFwiKS5jb25jYXQoamUociksXCJgIHN1cHBsaWVkIHRvIGBcIikuY29uY2F0KG4sXCJgLCBleHBlY3RlZCBpbnN0YW5jZSBvZiBgRGF0ZWAuXCIpKTt2YXIgbz1lLm1heERhdGU7cmV0dXJuIG8mJnI+bz9uZXcgRXJyb3IoXCJJbnZhbGlkIHByb3AgYFwiLmNvbmNhdCh0LFwiYCBvZiB0eXBlIGBcIikuY29uY2F0KGplKHIpLFwiYCBzdXBwbGllZCB0byBgXCIpLmNvbmNhdChuLFwiYCwgbWluRGF0ZSBjYW5ub3QgYmUgbGFyZ2VyIHRoYW4gbWF4RGF0ZS5cIikpOm51bGx9LEFlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lW3RdO2lmKCFyKXJldHVybiBudWxsO2lmKCEociBpbnN0YW5jZW9mIERhdGUpKXJldHVybiBuZXcgRXJyb3IoXCJJbnZhbGlkIHByb3AgYFwiLmNvbmNhdCh0LFwiYCBvZiB0eXBlIGBcIikuY29uY2F0KGplKHIpLFwiYCBzdXBwbGllZCB0byBgXCIpLmNvbmNhdChuLFwiYCwgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgYERhdGVgLlwiKSk7dmFyIG89ZS5taW5EYXRlO3JldHVybiBvJiZyPG8/bmV3IEVycm9yKFwiSW52YWxpZCBwcm9wIGBcIi5jb25jYXQodCxcImAgb2YgdHlwZSBgXCIpLmNvbmNhdChqZShyKSxcImAgc3VwcGxpZWQgdG8gYFwiKS5jb25jYXQobixcImAsIG1heERhdGUgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiBtaW5EYXRlLlwiKSk6bnVsbH0sVGU9YSgpLm9uZU9mVHlwZShbYSgpLmZ1bmMsYSgpLnNoYXBlKHtjdXJyZW50OmEoKS5hbnl9KV0pLEhlPWEoKS5vbmVPZlR5cGUoW2EoKS5pbnN0YW5jZU9mKERhdGUpLGEoKS5hcnJheU9mKGEoKS5pbnN0YW5jZU9mKERhdGUpKV0pLEJlPWEoKS5hcnJheU9mKGEoKS5vbmVPZihrZSkpLFZlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lW3RdLG89ZS52aWV3c3x8a2U7cmV0dXJuIHZvaWQgMCE9PXImJi0xPT09by5pbmRleE9mKHIpP25ldyBFcnJvcihcIkludmFsaWQgcHJvcCBgXCIuY29uY2F0KHQsXCJgIG9mIHZhbHVlIGBcIikuY29uY2F0KHIsXCJgIHN1cHBsaWVkIHRvIGBcIikuY29uY2F0KG4sXCJgLCBleHBlY3RlZCBvbmUgb2YgW1wiKS5jb25jYXQoby5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybidcIicuY29uY2F0KGUsJ1wiJyl9KSkuam9pbihcIiwgXCIpLFwiXS5cIikpOm51bGx9O1ZlLmlzUmVxdWlyZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWVbdF07cmV0dXJuIHI/VmUoZSx0LG4pOm5ldyBFcnJvcihcIlRoZSBwcm9wIGBcIi5jb25jYXQodCxcImAgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluIGBcIikuY29uY2F0KG4sXCJgLCBidXQgaXRzIHZhbHVlIGlzIGBcIikuY29uY2F0KHIsXCJgLlwiKSl9O3ZhciBEZT17YWN0aXZlU3RhcnREYXRlOmEoKS5pbnN0YW5jZU9mKERhdGUpLmlzUmVxdWlyZWQsaG92ZXI6YSgpLmluc3RhbmNlT2YoRGF0ZSksbG9jYWxlOmEoKS5zdHJpbmcsbWF4RGF0ZTpBZSxtaW5EYXRlOkllLG9uQ2xpY2s6YSgpLmZ1bmMsb25Nb3VzZU92ZXI6YSgpLmZ1bmMsdGlsZUNsYXNzTmFtZTphKCkub25lT2ZUeXBlKFthKCkuZnVuYyxQZV0pLHRpbGVDb250ZW50OmEoKS5vbmVPZlR5cGUoW2EoKS5mdW5jLGEoKS5ub2RlXSksdmFsdWU6SGUsdmFsdWVUeXBlOmEoKS5zdHJpbmd9LFplPXthY3RpdmVTdGFydERhdGU6YSgpLmluc3RhbmNlT2YoRGF0ZSkuaXNSZXF1aXJlZCxjbGFzc2VzOmEoKS5hcnJheU9mKGEoKS5zdHJpbmcpLmlzUmVxdWlyZWQsZGF0ZTphKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGxvY2FsZTphKCkuc3RyaW5nLG1heERhdGU6QWUsbWluRGF0ZTpJZSxvbkNsaWNrOmEoKS5mdW5jLG9uTW91c2VPdmVyOmEoKS5mdW5jLHN0eWxlOmEoKS5vYmplY3RPZihhKCkub25lT2ZUeXBlKFthKCkuc3RyaW5nLGEoKS5udW1iZXJdKSksdGlsZUNsYXNzTmFtZTphKCkub25lT2ZUeXBlKFthKCkuZnVuYyxQZV0pLHRpbGVDb250ZW50OmEoKS5vbmVPZlR5cGUoW2EoKS5mdW5jLGEoKS5ub2RlXSksdGlsZURpc2FibGVkOmEoKS5mdW5jfSwkZT1cInJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uXCI7ZnVuY3Rpb24gTmUoZSl7dmFyIHQsbj1lLmFjdGl2ZVN0YXJ0RGF0ZSxyPWUuZHJpbGxVcCxpPWUuZm9ybWF0TW9udGhZZWFyLGE9dm9pZCAwPT09aT9jZTppLGw9ZS5mb3JtYXRZZWFyLHM9dm9pZCAwPT09bD9kZTpsLGM9ZS5sb2NhbGUsdT1lLm1heERhdGUsZj1lLm1pbkRhdGUsZD1lLm5hdmlnYXRpb25BcmlhTGFiZWwsaD12b2lkIDA9PT1kP1wiXCI6ZCxnPWUubmF2aWdhdGlvbkFyaWFMaXZlLHY9ZS5uYXZpZ2F0aW9uTGFiZWwsbT1lLm5leHQyQXJpYUxhYmVsLEM9dm9pZCAwPT09bT9cIlwiOm0seT1lLm5leHQyTGFiZWwsdz12b2lkIDA9PT15P1wiwrtcIjp5LGI9ZS5uZXh0QXJpYUxhYmVsLF89dm9pZCAwPT09Yj9cIlwiOmIsTz1lLm5leHRMYWJlbCxTPXZvaWQgMD09PU8/XCLigLpcIjpPLE09ZS5wcmV2MkFyaWFMYWJlbCxrPXZvaWQgMD09PU0/XCJcIjpNLFA9ZS5wcmV2MkxhYmVsLEk9dm9pZCAwPT09UD9cIsKrXCI6UCxUPWUucHJldkFyaWFMYWJlbCxIPXZvaWQgMD09PVQ/XCJcIjpULFY9ZS5wcmV2TGFiZWwsRD12b2lkIDA9PT1WP1wi4oC5XCI6VixaPWUuc2V0QWN0aXZlU3RhcnREYXRlLE49ZS5zaG93RG91YmxlVmlldyxGPWUudmlldyxXPWUudmlld3MuaW5kZXhPZihGKT4wLHo9XCJjZW50dXJ5XCIhPT1GLEc9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiY2VudHVyeVwiOnJldHVybiB4KHQpO2Nhc2VcImRlY2FkZVwiOnJldHVybiBqKHQpO2Nhc2VcInllYXJcIjpyZXR1cm4gQSh0KTtjYXNlXCJtb250aFwiOnJldHVybiAkKHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fShGLG4pLHE9eiYmd2UoRixuKSxZPXllKEYsbiksSz16JiZiZShGLG4pLFg9ZnVuY3Rpb24oKXtpZihHLmdldEZ1bGxZZWFyKCk8MClyZXR1cm4hMDt2YXIgZT1mdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIEwodCk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIFIodCk7Y2FzZVwieWVhclwiOnJldHVybiBCKHQpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIFUodCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19KEYsbik7cmV0dXJuIGYmJmY+PWV9KCksSj16JiZmdW5jdGlvbigpe2lmKHEuZ2V0RnVsbFllYXIoKTwwKXJldHVybiEwO3ZhciBlPV9lKEYsbik7cmV0dXJuIGYmJmY+PWV9KCksUT11JiZ1PFksZWU9eiYmdSYmdTxLO2Z1bmN0aW9uIHRlKGUpe3ZhciB0PWZ1bmN0aW9uKCl7c3dpdGNoKEYpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiBMZShlLHQsRShuKSl9KGMscyxlKTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gRWUoYyxzLGUpO2Nhc2VcInllYXJcIjpyZXR1cm4gcyhjLGUpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIGEoYyxlKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdmlldzogXCIuY29uY2F0KEYsXCIuXCIpKX19KCk7cmV0dXJuIHY/dih7ZGF0ZTplLGxhYmVsOnQsbG9jYWxlOmN8fHAoKSx2aWV3OkZ9KTp0fXJldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6JGV9LG51bGwhPT1JJiZ6JiZvKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHtcImFyaWEtbGFiZWxcIjprLGNsYXNzTmFtZTpcIlwiLmNvbmNhdCgkZSxcIl9fYXJyb3cgXCIpLmNvbmNhdCgkZSxcIl9fcHJldjItYnV0dG9uXCIpLGRpc2FibGVkOkosb25DbGljazpmdW5jdGlvbigpe1oocSxcInByZXYyXCIpfSx0eXBlOlwiYnV0dG9uXCJ9LEkpLG51bGwhPT1EJiZvKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHtcImFyaWEtbGFiZWxcIjpILGNsYXNzTmFtZTpcIlwiLmNvbmNhdCgkZSxcIl9fYXJyb3cgXCIpLmNvbmNhdCgkZSxcIl9fcHJldi1idXR0b25cIiksZGlzYWJsZWQ6WCxvbkNsaWNrOmZ1bmN0aW9uKCl7WihHLFwicHJldlwiKX0sdHlwZTpcImJ1dHRvblwifSxEKSwodD1cIlwiLmNvbmNhdCgkZSxcIl9fbGFiZWxcIiksbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6aCxcImFyaWEtbGl2ZVwiOmcsY2xhc3NOYW1lOnQsZGlzYWJsZWQ6IVcsb25DbGljazpyLHN0eWxlOntmbGV4R3JvdzoxfSx0eXBlOlwiYnV0dG9uXCJ9LG8oKS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJcIi5jb25jYXQodCxcIl9fbGFiZWxUZXh0IFwiKS5jb25jYXQodCxcIl9fbGFiZWxUZXh0LS1mcm9tXCIpfSx0ZShuKSksTiYmbygpLmNyZWF0ZUVsZW1lbnQobygpLkZyYWdtZW50LG51bGwsbygpLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpcIlwiLmNvbmNhdCh0LFwiX19kaXZpZGVyXCIpfSxcIiDigJMgXCIpLG8oKS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJcIi5jb25jYXQodCxcIl9fbGFiZWxUZXh0IFwiKS5jb25jYXQodCxcIl9fbGFiZWxUZXh0LS10b1wiKX0sdGUoWSkpKSkpLG51bGwhPT1TJiZvKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHtcImFyaWEtbGFiZWxcIjpfLGNsYXNzTmFtZTpcIlwiLmNvbmNhdCgkZSxcIl9fYXJyb3cgXCIpLmNvbmNhdCgkZSxcIl9fbmV4dC1idXR0b25cIiksZGlzYWJsZWQ6USxvbkNsaWNrOmZ1bmN0aW9uKCl7WihZLFwibmV4dFwiKX0sdHlwZTpcImJ1dHRvblwifSxTKSxudWxsIT09dyYmeiYmbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6QyxjbGFzc05hbWU6XCJcIi5jb25jYXQoJGUsXCJfX2Fycm93IFwiKS5jb25jYXQoJGUsXCJfX25leHQyLWJ1dHRvblwiKSxkaXNhYmxlZDplZSxvbkNsaWNrOmZ1bmN0aW9uKCl7WihLLFwibmV4dDJcIil9LHR5cGU6XCJidXR0b25cIn0sdykpfU5lLnByb3BUeXBlcz17YWN0aXZlU3RhcnREYXRlOmEoKS5pbnN0YW5jZU9mKERhdGUpLmlzUmVxdWlyZWQsZHJpbGxVcDphKCkuZnVuYy5pc1JlcXVpcmVkLGZvcm1hdE1vbnRoWWVhcjphKCkuZnVuYyxmb3JtYXRZZWFyOmEoKS5mdW5jLGxvY2FsZTphKCkuc3RyaW5nLG1heERhdGU6YSgpLmluc3RhbmNlT2YoRGF0ZSksbWluRGF0ZTphKCkuaW5zdGFuY2VPZihEYXRlKSxuYXZpZ2F0aW9uQXJpYUxhYmVsOmEoKS5zdHJpbmcsbmF2aWdhdGlvbkFyaWFMaXZlOmEoKS5zdHJpbmcsbmF2aWdhdGlvbkxhYmVsOmEoKS5mdW5jLG5leHQyQXJpYUxhYmVsOmEoKS5zdHJpbmcsbmV4dDJMYWJlbDphKCkubm9kZSxuZXh0QXJpYUxhYmVsOmEoKS5zdHJpbmcsbmV4dExhYmVsOmEoKS5ub2RlLHByZXYyQXJpYUxhYmVsOmEoKS5zdHJpbmcscHJldjJMYWJlbDphKCkubm9kZSxwcmV2QXJpYUxhYmVsOmEoKS5zdHJpbmcscHJldkxhYmVsOmEoKS5ub2RlLHNldEFjdGl2ZVN0YXJ0RGF0ZTphKCkuZnVuYy5pc1JlcXVpcmVkLHNob3dEb3VibGVWaWV3OmEoKS5ib29sLHZpZXc6VmUuaXNSZXF1aXJlZCx2aWV3czpCZS5pc1JlcXVpcmVkfTt2YXIgRmU9W1wiY2hpbGRyZW5cIixcImNsYXNzTmFtZVwiLFwiZGlyZWN0aW9uXCIsXCJjb3VudFwiLFwib2Zmc2V0XCIsXCJzdHlsZVwiLFwid3JhcFwiXTtmdW5jdGlvbiBVZSgpe3JldHVybiBVZT1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LFVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBXZShlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gemUoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/V2UoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtHZShlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6V2UoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gR2UoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIHFlKGUpe3JldHVyblwiXCIuY29uY2F0KGUsXCIlXCIpfWZ1bmN0aW9uIFllKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmNsYXNzTmFtZSxyPWUuZGlyZWN0aW9uLGk9ZS5jb3VudCxhPWUub2Zmc2V0LGw9ZS5zdHlsZSxzPWUud3JhcCxjPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxpPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxGZSk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsVWUoe2NsYXNzTmFtZTpuLHN0eWxlOnplKHtkaXNwbGF5OlwiZmxleFwiLGZsZXhEaXJlY3Rpb246cixmbGV4V3JhcDpzP1wid3JhcFwiOlwibm8td3JhcFwifSxsKX0sYyksbygpLkNoaWxkcmVuLm1hcCh0LChmdW5jdGlvbihlLHQpe3JldHVybiBvKCkuY2xvbmVFbGVtZW50KGUsemUoemUoe30sZS5wcm9wcykse30se3N0eWxlOntmbGV4QmFzaXM6cWUoMTAwL2kpLGZsZXhTaHJpbms6MCxmbGV4R3JvdzowLG92ZXJmbG93OlwiaGlkZGVuXCIsbWFyZ2luTGVmdDphJiYwPT09dD9xZSgxMDAqYS9pKTpudWxsfX0pKX0pKSl9ZnVuY3Rpb24gS2UoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIFhlKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIFhlKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVyblwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bj9BcnJheS5mcm9tKGUpOlwiQXJndW1lbnRzXCI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9YZShlLHQpOnZvaWQgMH19KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIFhlKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gSmUoZSx0KXtyZXR1cm4gdFswXTw9ZSYmdFsxXT49ZX1mdW5jdGlvbiBRZShlLHQpe3JldHVybiBKZShlWzBdLHQpfHxKZShlWzFdLHQpfWZ1bmN0aW9uIGV0KGUsdCxuKXt2YXIgcj1bXTtpZihRZSh0LGUpKXtyLnB1c2gobik7dmFyIG89SmUoZVswXSx0KSxpPUplKGVbMV0sdCk7byYmci5wdXNoKFwiXCIuY29uY2F0KG4sXCJTdGFydFwiKSksaSYmci5wdXNoKFwiXCIuY29uY2F0KG4sXCJFbmRcIikpLG8mJmkmJnIucHVzaChcIlwiLmNvbmNhdChuLFwiQm90aEVuZHNcIikpfXJldHVybiByfWZ1bmN0aW9uIHR0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS52YWx1ZSxuPWUudmFsdWVUeXBlLHI9ZS5kYXRlLG89ZS5kYXRlVHlwZSxpPWUuaG92ZXIsYT1cInJlYWN0LWNhbGVuZGFyX190aWxlXCIsbD1bYV07aWYoIXIpcmV0dXJuIGw7aWYoIUFycmF5LmlzQXJyYXkocikmJiFvKXRocm93IG5ldyBFcnJvcihcImdldFRpbGVDbGFzc2VzKCk6IFVuYWJsZSB0byBnZXQgdGlsZSBhY3Rpdml0eSBjbGFzc2VzIGJlY2F1c2Ugb25lIG9yIG1vcmUgcmVxdWlyZWQgYXJndW1lbnRzIHdlcmUgbm90IHBhc3NlZC5cIik7dmFyIHM9bmV3IERhdGUsYz1BcnJheS5pc0FycmF5KHIpP3I6T2UobyxyKTtpZihKZShzLGMpJiZsLnB1c2goXCJcIi5jb25jYXQoYSxcIi0tbm93XCIpKSwhdClyZXR1cm4gbDtpZighQXJyYXkuaXNBcnJheSh0KSYmIW4pdGhyb3cgbmV3IEVycm9yKFwiZ2V0VGlsZUNsYXNzZXMoKTogVW5hYmxlIHRvIGdldCB0aWxlIGFjdGl2aXR5IGNsYXNzZXMgYmVjYXVzZSBvbmUgb3IgbW9yZSByZXF1aXJlZCBhcmd1bWVudHMgd2VyZSBub3QgcGFzc2VkLlwiKTt2YXIgdSxmLGQ9QXJyYXkuaXNBcnJheSh0KT90Ok9lKG4sdCk7Zj1jLCh1PWQpWzBdPD1mWzBdJiZ1WzFdPj1mWzFdP2wucHVzaChcIlwiLmNvbmNhdChhLFwiLS1hY3RpdmVcIikpOlFlKGQsYykmJmwucHVzaChcIlwiLmNvbmNhdChhLFwiLS1oYXNBY3RpdmVcIikpO3ZhciBwPWV0KGQsYyxcIlwiLmNvbmNhdChhLFwiLS1yYW5nZVwiKSk7bC5wdXNoLmFwcGx5KGwsS2UocCkpO3ZhciBoPVtdLmNvbmNhdCh0KTtpZihpJiYxPT09aC5sZW5ndGgpe3ZhciBnPWV0KGk+ZFswXT9bZFswXSxpXTpbaSxkWzBdXSxjLFwiXCIuY29uY2F0KGEsXCItLWhvdmVyXCIpKTtsLnB1c2guYXBwbHkobCxLZShnKSl9cmV0dXJuIGx9WWUucHJvcFR5cGVzPXtjaGlsZHJlbjphKCkubm9kZSxjbGFzc05hbWU6YSgpLnN0cmluZyxjb3VudDphKCkubnVtYmVyLmlzUmVxdWlyZWQsZGlyZWN0aW9uOmEoKS5zdHJpbmcsb2Zmc2V0OmEoKS5udW1iZXIsc3R5bGU6YSgpLm9iamVjdE9mKGEoKS5vbmVPZlR5cGUoW2EoKS5zdHJpbmcsYSgpLm51bWJlcl0pKSx3cmFwOmEoKS5ib29sfTt2YXIgbnQ9W1wiY2xhc3NOYW1lXCIsXCJjb3VudFwiLFwiZGF0ZVRyYW5zZm9ybVwiLFwiZGF0ZVR5cGVcIixcImVuZFwiLFwiaG92ZXJcIixcIm9mZnNldFwiLFwic3RhcnRcIixcInN0ZXBcIixcInRpbGVcIixcInZhbHVlXCIsXCJ2YWx1ZVR5cGVcIl07ZnVuY3Rpb24gcnQoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIG90KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP3J0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7aXQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOnJ0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIGl0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBhdCgpe3JldHVybiBhdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGF0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBsdChlKXtmb3IodmFyIHQ9ZS5jbGFzc05hbWUsbj1lLmNvdW50LHI9dm9pZCAwPT09bj8zOm4saT1lLmRhdGVUcmFuc2Zvcm0sYT1lLmRhdGVUeXBlLGw9ZS5lbmQscz1lLmhvdmVyLGM9ZS5vZmZzZXQsdT1lLnN0YXJ0LGY9ZS5zdGVwLGQ9dm9pZCAwPT09Zj8xOmYscD1lLnRpbGUsaD1lLnZhbHVlLGc9ZS52YWx1ZVR5cGUsdj1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30saT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsbnQpLG09W10sQz11O0M8PWw7Qys9ZCl7dmFyIHk9aShDKTttLnB1c2gobygpLmNyZWF0ZUVsZW1lbnQocCxhdCh7a2V5OnkuZ2V0VGltZSgpLGNsYXNzZXM6dHQoe3ZhbHVlOmgsdmFsdWVUeXBlOmcsZGF0ZTp5LGRhdGVUeXBlOmEsaG92ZXI6c30pLGRhdGU6eSxwb2ludDpDfSx2KSkpfXJldHVybiBvKCkuY3JlYXRlRWxlbWVudChZZSx7Y2xhc3NOYW1lOnQsY291bnQ6cixvZmZzZXQ6Yyx3cmFwOiEwfSxtKX1mdW5jdGlvbiBzdChlKXtyZXR1cm4gc3Q9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0sc3QoZSl9ZnVuY3Rpb24gY3QoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIHV0KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP2N0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7Z3QoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOmN0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIGZ0KGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1mdW5jdGlvbiBkdChlLHQpe3JldHVybiBkdD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGR0KGUsdCl9ZnVuY3Rpb24gcHQoZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIGV9ZnVuY3Rpb24gaHQoZSl7cmV0dXJuIGh0PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxodChlKX1mdW5jdGlvbiBndChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gdnQoZSx0KXtyZXR1cm4gZSYmIXR8fCFlJiZ0fHxlJiZ0JiZlLmdldFRpbWUoKSE9PXQuZ2V0VGltZSgpfWZ1bmN0aW9uIG10KGUsdCl7dmFyIG49ZS5hY3RpdmVTdGFydERhdGUscj1lLmRhdGUsbz1lLnZpZXc7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KHthY3RpdmVTdGFydERhdGU6bixkYXRlOnIsdmlldzpvfSk6dH1sdC5wcm9wVHlwZXM9b3Qob3Qoe30sRGUpLHt9LHthY3RpdmVTdGFydERhdGU6YSgpLmluc3RhbmNlT2YoRGF0ZSksY291bnQ6YSgpLm51bWJlcixkYXRlVHJhbnNmb3JtOmEoKS5mdW5jLmlzUmVxdWlyZWQsZGF0ZVR5cGU6YSgpLnN0cmluZyxvZmZzZXQ6YSgpLm51bWJlcixzdGVwOmEoKS5udW1iZXIsdGlsZTphKCkuZnVuYy5pc1JlcXVpcmVkfSk7dmFyIEN0PWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KSx0JiZkdChlLHQpfShjLGUpO3ZhciB0LG4scixpLGEsbD0oaT1jLGE9ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9aHQoaSk7aWYoYSl7dmFyIG49aHQodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxuKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKFwib2JqZWN0XCI9PT1zdCh0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7cmV0dXJuIHB0KGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gYygpe3ZhciBlOyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsYyk7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07cmV0dXJuIGd0KHB0KGU9bC5jYWxsLmFwcGx5KGwsW3RoaXNdLmNvbmNhdChuKSkpLFwic3RhdGVcIix7fSksZX1yZXR1cm4gdD1jLHI9W3trZXk6XCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWUuYWN0aXZlU3RhcnREYXRlLHI9ZS50aWxlQ2xhc3NOYW1lLG89ZS50aWxlQ29udGVudCxpPXt9O3JldHVybihyIT09dC50aWxlQ2xhc3NOYW1lUHJvcHN8fHZ0KG4sdC5hY3RpdmVTdGFydERhdGVQcm9wcykpJiYoaS50aWxlQ2xhc3NOYW1lPW10KGUsciksaS50aWxlQ2xhc3NOYW1lUHJvcHM9ciksKG8hPT10LnRpbGVDb250ZW50UHJvcHN8fHZ0KG4sdC5hY3RpdmVTdGFydERhdGVQcm9wcykpJiYoaS50aWxlQ29udGVudD1tdChlLG8pLGkudGlsZUNvbnRlbnRQcm9wcz1vKSxpLmFjdGl2ZVN0YXJ0RGF0ZVByb3BzPW4saX19XSwobj1be2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuYWN0aXZlU3RhcnREYXRlLG49ZS5jaGlsZHJlbixyPWUuY2xhc3NlcyxpPWUuZGF0ZSxhPWUuZm9ybWF0QWJicixsPWUubG9jYWxlLGM9ZS5tYXhEYXRlLHU9ZS5tYXhEYXRlVHJhbnNmb3JtLGY9ZS5taW5EYXRlLGQ9ZS5taW5EYXRlVHJhbnNmb3JtLHA9ZS5vbkNsaWNrLGg9ZS5vbk1vdXNlT3ZlcixnPWUuc3R5bGUsdj1lLnRpbGVEaXNhYmxlZCxtPWUudmlldyxDPXRoaXMuc3RhdGUseT1DLnRpbGVDbGFzc05hbWUsdz1DLnRpbGVDb250ZW50O3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHtjbGFzc05hbWU6cyhyLHkpLGRpc2FibGVkOmYmJmQoZik+aXx8YyYmdShjKTxpfHx2JiZ2KHthY3RpdmVTdGFydERhdGU6dCxkYXRlOmksdmlldzptfSksb25DbGljazpwJiZmdW5jdGlvbihlKXtyZXR1cm4gcChpLGUpfSxvbkZvY3VzOmgmJmZ1bmN0aW9uKCl7cmV0dXJuIGgoaSl9LG9uTW91c2VPdmVyOmgmJmZ1bmN0aW9uKCl7cmV0dXJuIGgoaSl9LHN0eWxlOmcsdHlwZTpcImJ1dHRvblwifSxhP28oKS5jcmVhdGVFbGVtZW50KFwiYWJiclwiLHtcImFyaWEtbGFiZWxcIjphKGwsaSl9LG4pOm4sdyl9fV0pJiZmdCh0LnByb3RvdHlwZSxuKSxyJiZmdCh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksY30oci5Db21wb25lbnQpO0N0LnByb3BUeXBlcz11dCh1dCh7fSxaZSkse30se2NoaWxkcmVuOmEoKS5ub2RlLmlzUmVxdWlyZWQsZm9ybWF0QWJicjphKCkuZnVuYyxtYXhEYXRlVHJhbnNmb3JtOmEoKS5mdW5jLmlzUmVxdWlyZWQsbWluRGF0ZVRyYW5zZm9ybTphKCkuZnVuYy5pc1JlcXVpcmVkfSk7dmFyIHl0PVtcImNsYXNzZXNcIixcImZvcm1hdFllYXJcIl07ZnVuY3Rpb24gd3QoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIGJ0KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP3d0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7eHQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOnd0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIHh0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBfdCgpe3JldHVybiBfdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LF90LmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgT3Q9XCJyZWFjdC1jYWxlbmRhcl9fY2VudHVyeS12aWV3X19kZWNhZGVzX19kZWNhZGVcIjtmdW5jdGlvbiBMdChlKXt2YXIgdD1lLmNsYXNzZXMsbj1lLmZvcm1hdFllYXIscj12b2lkIDA9PT1uP2RlOm4saT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30saT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUseXQpLGE9aS5kYXRlLGw9aS5sb2NhbGU7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KEN0LF90KHt9LGkse2NsYXNzZXM6W10uY29uY2F0KHQsT3QpLG1heERhdGVUcmFuc2Zvcm06ayxtaW5EYXRlVHJhbnNmb3JtOlMsdmlldzpcImNlbnR1cnlcIn0pLEVlKGwscixhKSl9ZnVuY3Rpb24gRXQoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIFN0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBqdCgpe3JldHVybiBqdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBNdChlKXt2YXIgdD1DKGIoZS5hY3RpdmVTdGFydERhdGUpKSxuPXQrOTk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KGx0LGp0KHt9LGUse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19jZW50dXJ5LXZpZXdfX2RlY2FkZXNcIixkYXRlVHJhbnNmb3JtOlMsZGF0ZVR5cGU6XCJkZWNhZGVcIixlbmQ6bixzdGFydDp0LHN0ZXA6MTAsdGlsZTpMdH0pKX1mdW5jdGlvbiBrdChlKXtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX2NlbnR1cnktdmlld1wifSxvKCkuY3JlYXRlRWxlbWVudChNdCxlKSl9THQucHJvcFR5cGVzPWJ0KGJ0KHt9LFplKSx7fSx7Zm9ybWF0WWVhcjphKCkuZnVuY30pLE10LnByb3BUeXBlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9FdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe1N0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpFdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX0oe30sRGUpO3ZhciBSdD1bXCJjbGFzc2VzXCIsXCJmb3JtYXRZZWFyXCJdO2Z1bmN0aW9uIFB0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBJdChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9QdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe0F0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpQdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBBdChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gVHQoKXtyZXR1cm4gVHQ9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxUdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIEh0PVwicmVhY3QtY2FsZW5kYXJfX2RlY2FkZS12aWV3X195ZWFyc19feWVhclwiO2Z1bmN0aW9uIEJ0KGUpe3ZhciB0PWUuY2xhc3NlcyxuPWUuZm9ybWF0WWVhcixyPXZvaWQgMD09PW4/ZGU6bixpPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxpPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxSdCksYT1pLmRhdGUsbD1pLmxvY2FsZTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoQ3QsVHQoe30saSx7Y2xhc3NlczpbXS5jb25jYXQodCxIdCksbWF4RGF0ZVRyYW5zZm9ybTpILG1pbkRhdGVUcmFuc2Zvcm06SSx2aWV3OlwiZGVjYWRlXCJ9KSxyKGwsYSkpfWZ1bmN0aW9uIFZ0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBEdChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gWnQoKXtyZXR1cm4gWnQ9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxadC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gJHQoZSl7dmFyIHQ9QyhTKGUuYWN0aXZlU3RhcnREYXRlKSksbj10Kzk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KGx0LFp0KHt9LGUse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19kZWNhZGUtdmlld19feWVhcnNcIixkYXRlVHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBEYXRlO3JldHVybiB0LnNldEZ1bGxZZWFyKGUsMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApLHR9LGRhdGVUeXBlOlwieWVhclwiLGVuZDpuLHN0YXJ0OnQsdGlsZTpCdH0pKX1mdW5jdGlvbiBOdChlKXtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX2RlY2FkZS12aWV3XCJ9LG8oKS5jcmVhdGVFbGVtZW50KCR0LGUpKX1CdC5wcm9wVHlwZXM9SXQoSXQoe30sWmUpLHt9LHtmb3JtYXRZZWFyOmEoKS5mdW5jfSksJHQucHJvcFR5cGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1Z0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7RHQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlZ0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfSh7fSxEZSk7dmFyIEZ0PVtcImNsYXNzZXNcIixcImZvcm1hdE1vbnRoXCIsXCJmb3JtYXRNb250aFllYXJcIl07ZnVuY3Rpb24gVXQoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIFd0KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1V0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7enQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlV0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIHp0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBHdCgpe3JldHVybiBHdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LEd0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgcXQ9XCJyZWFjdC1jYWxlbmRhcl9feWVhci12aWV3X19tb250aHNfX21vbnRoXCI7ZnVuY3Rpb24gWXQoZSl7dmFyIHQ9ZS5jbGFzc2VzLG49ZS5mb3JtYXRNb250aCxyPXZvaWQgMD09PW4/c2U6bixpPWUuZm9ybWF0TW9udGhZZWFyLGE9dm9pZCAwPT09aT9jZTppLGw9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGk9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLEZ0KSxzPWwuZGF0ZSxjPWwubG9jYWxlO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChDdCxHdCh7fSxsLHtjbGFzc2VzOltdLmNvbmNhdCh0LHF0KSxmb3JtYXRBYmJyOmEsbWF4RGF0ZVRyYW5zZm9ybTpGLG1pbkRhdGVUcmFuc2Zvcm06Wix2aWV3OlwieWVhclwifSkscihjLHMpKX1mdW5jdGlvbiBLdChlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gWHQoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/S3QoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtKdChlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6S3QoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gSnQoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIFF0KCl7cmV0dXJuIFF0PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sUXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGVuKGUpe3ZhciB0PUMoZS5hY3RpdmVTdGFydERhdGUpO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChsdCxRdCh7fSxlLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9feWVhci12aWV3X19tb250aHNcIixkYXRlVHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3ZhciBuPW5ldyBEYXRlO3JldHVybiBuLnNldEZ1bGxZZWFyKHQsZSwxKSxuLnNldEhvdXJzKDAsMCwwLDApLG59LGRhdGVUeXBlOlwibW9udGhcIixlbmQ6MTEsc3RhcnQ6MCx0aWxlOll0fSkpfWZ1bmN0aW9uIHRuKGUpe3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9feWVhci12aWV3XCJ9LG8oKS5jcmVhdGVFbGVtZW50KGVuLGUpKX1ZdC5wcm9wVHlwZXM9V3QoV3Qoe30sWmUpLHt9LHtmb3JtYXRNb250aDphKCkuZnVuYyxmb3JtYXRNb250aFllYXI6YSgpLmZ1bmN9KSxlbi5wcm9wVHlwZXM9WHQoWHQoe30sRGUpLHt9LHtsb2NhbGU6YSgpLnN0cmluZ30pO3ZhciBubj1bXCJmb3JtYXREYXlcIixcImZvcm1hdExvbmdEYXRlXCIsXCJjYWxlbmRhclR5cGVcIixcImNsYXNzZXNcIixcImN1cnJlbnRNb250aEluZGV4XCJdO2Z1bmN0aW9uIHJuKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9ybihPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe2FuKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpybihPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBhbihlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gbG4oKXtyZXR1cm4gbG49T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxsbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIHNuPVwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX2RheXNfX2RheVwiO2Z1bmN0aW9uIGNuKGUpe3ZhciB0PWUuZm9ybWF0RGF5LG49dm9pZCAwPT09dD9hZTp0LHI9ZS5mb3JtYXRMb25nRGF0ZSxpPXZvaWQgMD09PXI/bGU6cixhPWUuY2FsZW5kYXJUeXBlLGw9ZS5jbGFzc2VzLHM9ZS5jdXJyZW50TW9udGhJbmRleCxjPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxpPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxubiksdT1jLmRhdGUsZj1jLmxvY2FsZTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoQ3QsbG4oe30sYyx7Y2xhc3NlczpbXS5jb25jYXQobCxzbixTZSh1LGEpP1wiXCIuY29uY2F0KHNuLFwiLS13ZWVrZW5kXCIpOm51bGwsdS5nZXRNb250aCgpIT09cz9cIlwiLmNvbmNhdChzbixcIi0tbmVpZ2hib3JpbmdNb250aFwiKTpudWxsKSxmb3JtYXRBYmJyOmksbWF4RGF0ZVRyYW5zZm9ybTpZLG1pbkRhdGVUcmFuc2Zvcm06Ryx2aWV3OlwibW9udGhcIn0pLG4oZix1KSl9Y24ucHJvcFR5cGVzPW9uKG9uKHt9LFplKSx7fSx7Y3VycmVudE1vbnRoSW5kZXg6YSgpLm51bWJlci5pc1JlcXVpcmVkLGZvcm1hdERheTphKCkuZnVuYyxmb3JtYXRMb25nRGF0ZTphKCkuZnVuY30pO3ZhciB1bj1bXCJzaG93Rml4ZWROdW1iZXJPZldlZWtzXCIsXCJzaG93TmVpZ2hib3JpbmdNb250aFwiXTtmdW5jdGlvbiBmbihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gZG4oZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIHBuKCl7cmV0dXJuIHBuPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0scG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGhuKGUpe3ZhciB0PWUuYWN0aXZlU3RhcnREYXRlLG49ZS5jYWxlbmRhclR5cGUscj1lLnNob3dGaXhlZE51bWJlck9mV2Vla3MsaT1lLnNob3dOZWlnaGJvcmluZ01vbnRoLGE9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGk9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLHVuKSxsPUModCkscz15KHQpLGM9cnx8aSx1PXZlKHQsbiksZj1jPzA6dSxkPTErKGM/LXU6MCkscD1mdW5jdGlvbigpe2lmKHIpcmV0dXJuIGQrNDItMTt2YXIgZT1YKHQpO2lmKGkpe3ZhciBvPW5ldyBEYXRlO3JldHVybiBvLnNldEZ1bGxZZWFyKGwscyxlKSxvLnNldEhvdXJzKDAsMCwwLDApLGUrKDctdmUobyxuKS0xKX1yZXR1cm4gZX0oKTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQobHQscG4oe30sYSx7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX2RheXNcIixjb3VudDo3LGN1cnJlbnRNb250aEluZGV4OnMsZGF0ZVRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgRGF0ZTtyZXR1cm4gdC5zZXRGdWxsWWVhcihsLHMsZSksdC5zZXRIb3VycygwLDAsMCwwKSx0fSxkYXRlVHlwZTpcImRheVwiLGVuZDpwLG9mZnNldDpmLHN0YXJ0OmQsdGlsZTpjbn0pKX1obi5wcm9wVHlwZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/Zm4oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtkbihlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6Zm4oT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9KHtjYWxlbmRhclR5cGU6UmUuaXNSZXF1aXJlZCxzaG93Rml4ZWROdW1iZXJPZldlZWtzOmEoKS5ib29sLHNob3dOZWlnaGJvcmluZ01vbnRoOmEoKS5ib29sfSxEZSk7dmFyIGduPVwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtkYXlzXCIsdm49XCJcIi5jb25jYXQoZ24sXCJfX3dlZWtkYXlcIik7ZnVuY3Rpb24gbW4oZSl7Zm9yKHZhciB0PWUuY2FsZW5kYXJUeXBlLG49ZS5mb3JtYXRTaG9ydFdlZWtkYXkscj12b2lkIDA9PT1uP3VlOm4saT1lLmZvcm1hdFdlZWtkYXksYT12b2lkIDA9PT1pP2ZlOmksbD1lLmxvY2FsZSxjPWUub25Nb3VzZUxlYXZlLHU9WihuZXcgRGF0ZSksZj1DKHUpLGQ9eSh1KSxwPVtdLGg9MTtoPD03O2grPTEpe3ZhciBnPW5ldyBEYXRlKGYsZCxoLXZlKHUsdCkpLHY9YShsLGcpO3AucHVzaChvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtrZXk6aCxjbGFzc05hbWU6cyh2bixTZShnLHQpJiZcIlwiLmNvbmNhdCh2bixcIi0td2Vla2VuZFwiKSl9LG8oKS5jcmVhdGVFbGVtZW50KFwiYWJiclwiLHtcImFyaWEtbGFiZWxcIjp2LHRpdGxlOnZ9LHIobCxnKS5yZXBsYWNlKFwiLlwiLFwiXCIpKSkpfXJldHVybiBvKCkuY3JlYXRlRWxlbWVudChZZSx7Y2xhc3NOYW1lOmduLGNvdW50Ojcsb25Gb2N1czpjLG9uTW91c2VPdmVyOmN9LHApfW1uLnByb3BUeXBlcz17Y2FsZW5kYXJUeXBlOlJlLmlzUmVxdWlyZWQsZm9ybWF0U2hvcnRXZWVrZGF5OmEoKS5mdW5jLGZvcm1hdFdlZWtkYXk6YSgpLmZ1bmMsbG9jYWxlOmEoKS5zdHJpbmcsb25Nb3VzZUxlYXZlOmEoKS5mdW5jfTt2YXIgQ249W1wiZGF0ZVwiLFwib25DbGlja1dlZWtOdW1iZXJcIixcIndlZWtOdW1iZXJcIl07ZnVuY3Rpb24geW4oKXtyZXR1cm4geW49T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSx5bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gd24oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIGJuKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX12YXIgeG49XCJyZWFjdC1jYWxlbmRhcl9fdGlsZVwiO2Z1bmN0aW9uIF9uKGUpe3ZhciB0PWUuZGF0ZSxuPWUub25DbGlja1dlZWtOdW1iZXIscj1lLndlZWtOdW1iZXIsaT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30saT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsQ24pLGE9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/d24oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtibihlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6d24oT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9KHtjbGFzc05hbWU6eG59LGkpLGw9bygpLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsbnVsbCxyKTtyZXR1cm4gbj9vKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHluKHt9LGEse29uQ2xpY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIG4ocix0LGUpfSx0eXBlOlwiYnV0dG9uXCJ9KSxsKTpvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLGEsbCl9ZnVuY3Rpb24gT24oZSl7dmFyIHQ9ZS5hY3RpdmVTdGFydERhdGUsbj1lLmNhbGVuZGFyVHlwZSxyPWUub25DbGlja1dlZWtOdW1iZXIsaT1lLm9uTW91c2VMZWF2ZSxhPWUuc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrcyxsPWZ1bmN0aW9uKCl7aWYoYSlyZXR1cm4gNjt2YXIgZT1YKHQpLSg3LXZlKHQsbikpO3JldHVybiAxK01hdGguY2VpbChlLzcpfSgpLHM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9Qyh0KSxyPXkodCksbz13KHQpLGk9W10sYT0wO2E8bDthKz0xKWkucHVzaChtZShuZXcgRGF0ZShlLHIsbys3KmEpLG4pKTtyZXR1cm4gaX0oKSxjPXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGUuSVNPXzg2MDEscj1uPT09dGUuVVM/dGUuVVM6dGUuSVNPXzg2MDEsbz1tZShlLG4pLGk9QyhlKSsxO2Rve3Q9bWUobmV3IERhdGUoaSwwLHI9PT10ZS5JU09fODYwMT80OjEpLG4pLGktPTF9d2hpbGUoZTx0KTtyZXR1cm4gTWF0aC5yb3VuZCgoby10KS82MDQ4ZTUpKzF9KGUsbil9KSk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFllLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9fbW9udGgtdmlld19fd2Vla051bWJlcnNcIixjb3VudDpsLGRpcmVjdGlvbjpcImNvbHVtblwiLG9uRm9jdXM6aSxvbk1vdXNlT3ZlcjppLHN0eWxlOntmbGV4QmFzaXM6XCJjYWxjKDEwMCUgKiAoMSAvIDgpXCIsZmxleFNocmluazowfX0sYy5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KF9uLHtrZXk6ZSxkYXRlOnNbdF0sb25DbGlja1dlZWtOdW1iZXI6cix3ZWVrTnVtYmVyOmV9KX0pKSl9X24ucHJvcFR5cGVzPXtkYXRlOmEoKS5pbnN0YW5jZU9mKERhdGUpLmlzUmVxdWlyZWQsb25DbGlja1dlZWtOdW1iZXI6YSgpLmZ1bmMsd2Vla051bWJlcjphKCkubm9kZS5pc1JlcXVpcmVkfSxPbi5wcm9wVHlwZXM9e2FjdGl2ZVN0YXJ0RGF0ZTphKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGNhbGVuZGFyVHlwZTpSZS5pc1JlcXVpcmVkLG9uQ2xpY2tXZWVrTnVtYmVyOmEoKS5mdW5jLG9uTW91c2VMZWF2ZTphKCkuZnVuYyxzaG93Rml4ZWROdW1iZXJPZldlZWtzOmEoKS5ib29sfTt2YXIgTG49W1wiY2FsZW5kYXJUeXBlXCIsXCJmb3JtYXRTaG9ydFdlZWtkYXlcIixcImZvcm1hdFdlZWtkYXlcIixcIm9uQ2xpY2tXZWVrTnVtYmVyXCIsXCJzaG93V2Vla051bWJlcnNcIl07ZnVuY3Rpb24gRW4oKXtyZXR1cm4gRW49T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxFbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gU24oZSl7dmFyIHQ9ZS5hY3RpdmVTdGFydERhdGUsbj1lLmxvY2FsZSxyPWUub25Nb3VzZUxlYXZlLGk9ZS5zaG93Rml4ZWROdW1iZXJPZldlZWtzLGE9ZS5jYWxlbmRhclR5cGUsbD12b2lkIDA9PT1hP2Z1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhuZSkuZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuIG5lW3RdLmluY2x1ZGVzKGUpfSkpfHx0ZS5JU09fODYwMX0obik6YSxjPWUuZm9ybWF0U2hvcnRXZWVrZGF5LHU9ZS5mb3JtYXRXZWVrZGF5LGY9ZS5vbkNsaWNrV2Vla051bWJlcixkPWUuc2hvd1dlZWtOdW1iZXJzLHA9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGk9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLExuKSxoPVwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdcIjtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOnMoaCxkP1wiXCIuY29uY2F0KGgsXCItLXdlZWtOdW1iZXJzXCIpOlwiXCIpfSxvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtzdHlsZTp7ZGlzcGxheTpcImZsZXhcIixhbGlnbkl0ZW1zOlwiZmxleC1lbmRcIn19LGQ/bygpLmNyZWF0ZUVsZW1lbnQoT24se2FjdGl2ZVN0YXJ0RGF0ZTp0LGNhbGVuZGFyVHlwZTpsLG9uQ2xpY2tXZWVrTnVtYmVyOmYsb25Nb3VzZUxlYXZlOnIsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczppfSk6bnVsbCxvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtzdHlsZTp7ZmxleEdyb3c6MSx3aWR0aDpcIjEwMCVcIn19LG8oKS5jcmVhdGVFbGVtZW50KG1uLHtjYWxlbmRhclR5cGU6bCxmb3JtYXRTaG9ydFdlZWtkYXk6Yyxmb3JtYXRXZWVrZGF5OnUsbG9jYWxlOm4sb25Nb3VzZUxlYXZlOnJ9KSxvKCkuY3JlYXRlRWxlbWVudChobixFbih7Y2FsZW5kYXJUeXBlOmx9LHApKSkpKX1Tbi5wcm9wVHlwZXM9e2FjdGl2ZVN0YXJ0RGF0ZTphKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGNhbGVuZGFyVHlwZTpSZSxmb3JtYXRTaG9ydFdlZWtkYXk6YSgpLmZ1bmMsZm9ybWF0V2Vla2RheTphKCkuZnVuYyxsb2NhbGU6YSgpLnN0cmluZyxvbkNsaWNrV2Vla051bWJlcjphKCkuZnVuYyxvbk1vdXNlTGVhdmU6YSgpLmZ1bmMsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczphKCkuYm9vbCxzaG93V2Vla051bWJlcnM6YSgpLmJvb2x9O3ZhciBqbj1bXCJhY3RpdmVTdGFydERhdGVcIixcImRlZmF1bHRBY3RpdmVTdGFydERhdGVcIixcImRlZmF1bHRWYWx1ZVwiLFwiZGVmYXVsdFZpZXdcIixcIm1heERldGFpbFwiLFwibWluRGV0YWlsXCIsXCJ2YWx1ZVwiLFwidmlld1wiXTtmdW5jdGlvbiBNbigpe3JldHVybiBNbj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LE1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBrbihlKXtyZXR1cm4ga249XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0sa24oZSl9ZnVuY3Rpb24gUm4oZSx0KXtyZXR1cm4gUm49T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxSbihlLHQpfWZ1bmN0aW9uIFBuKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiBlfWZ1bmN0aW9uIEluKGUpe3JldHVybiBJbj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sSW4oZSl9ZnVuY3Rpb24gQW4oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIFRuKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP0FuKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7SG4oZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOkFuKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIEhuKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBCbihlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfXZhciBWbj1uZXcgRGF0ZTtWbi5zZXRGdWxsWWVhcigxLDAsMSksVm4uc2V0SG91cnMoMCwwLDAsMCk7dmFyIERuPW5ldyBEYXRlKDg2NGUxMyksWm49XCJyZWFjdC1jYWxlbmRhclwiLCRuPVtcImNlbnR1cnlcIixcImRlY2FkZVwiLFwieWVhclwiLFwibW9udGhcIl0sTm49W10uY29uY2F0KGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBCbihlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVtcIkBAaXRlcmF0b3JcIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBCbihlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm5cIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4/QXJyYXkuZnJvbShlKTpcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/Qm4oZSx0KTp2b2lkIDB9fShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX0oJG4uc2xpY2UoMSkpLFtcImRheVwiXSk7ZnVuY3Rpb24gRm4oZSx0KXtyZXR1cm4gJG4uc2xpY2UoJG4uaW5kZXhPZihlKSwkbi5pbmRleE9mKHQpKzEpfWZ1bmN0aW9uIFVuKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybi0xIT09Rm4odCxuKS5pbmRleE9mKGUpfShlLHQsbik/ZTpufWZ1bmN0aW9uIFduKGUpe3JldHVybiBOblskbi5pbmRleE9mKGUpXX1mdW5jdGlvbiB6bihlLHQpe3ZhciBuPWUudmFsdWUscj1lLm1pbkRhdGUsbz1lLm1heERhdGUsaT1lLm1heERldGFpbCxhPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuIG51bGw7dmFyIG49QXJyYXkuaXNBcnJheShlKSYmMj09PWUubGVuZ3RoP2VbdF06ZTtpZighbilyZXR1cm4gbnVsbDt2YXIgcj1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERhdGU/ZTpuZXcgRGF0ZShlKX0obik7aWYoaXNOYU4oci5nZXRUaW1lKCkpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZGF0ZTogXCIuY29uY2F0KGUpKTtyZXR1cm4gcn0obix0KTtpZighYSlyZXR1cm4gbnVsbDt2YXIgbD1XbihpKTtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZ0PmU/dDpuJiZuPGU/bjplfShbQ2UseGVdW3RdKGwsYSkscixvKX12YXIgR249ZnVuY3Rpb24oZSl7cmV0dXJuIHpuKGUsMCl9LHFuPWZ1bmN0aW9uKGUpe3JldHVybiB6bihlLDEpfSxZbj1mdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlO3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6W0duLHFuXS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0KGUpfSkpfTtmdW5jdGlvbiBLbihlKXt2YXIgdD1lLm1heERhdGUsbj1lLm1heERldGFpbCxyPWUubWluRGF0ZSxvPWUubWluRGV0YWlsLGk9ZS52YWx1ZTtyZXR1cm4gQ2UoVW4oZS52aWV3LG8sbiksR24oe3ZhbHVlOmksbWluRGF0ZTpyLG1heERhdGU6dCxtYXhEZXRhaWw6bn0pfHxuZXcgRGF0ZSl9dmFyIFhuPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYxPT09W10uY29uY2F0KGUpLmxlbmd0aH0sSm49ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcInByb3RvdHlwZVwiLHt3cml0YWJsZTohMX0pLHQmJlJuKGUsdCl9KGwsZSk7dmFyIHQsbixyLGksYT0ocj1sLGk9ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9SW4ocik7aWYoaSl7dmFyIG49SW4odGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxuKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKFwib2JqZWN0XCI9PT1rbih0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7cmV0dXJuIFBuKGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gbCgpe3ZhciBlOyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsbCk7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07cmV0dXJuIEhuKFBuKGU9YS5jYWxsLmFwcGx5KGEsW3RoaXNdLmNvbmNhdChuKSkpLFwic3RhdGVcIix7YWN0aXZlU3RhcnREYXRlOmUucHJvcHMuZGVmYXVsdEFjdGl2ZVN0YXJ0RGF0ZSx2YWx1ZTplLnByb3BzLmRlZmF1bHRWYWx1ZSx2aWV3OmUucHJvcHMuZGVmYXVsdFZpZXd9KSxIbihQbihlKSxcInNldFN0YXRlQW5kQ2FsbENhbGxiYWNrc1wiLChmdW5jdGlvbih0LG4scil7dmFyIG89UG4oZSksaT1vLmFjdGl2ZVN0YXJ0RGF0ZSxhPW8udmlldyxsPWUucHJvcHMscz1sLmFsbG93UGFydGlhbFJhbmdlLGM9bC5vbkFjdGl2ZVN0YXJ0RGF0ZUNoYW5nZSx1PWwub25DaGFuZ2UsZj1sLm9uVmlld0NoYW5nZSxkPWwuc2VsZWN0UmFuZ2UscD17YWN0aXZlU3RhcnREYXRlOmksdmlldzphfTtlLnNldFN0YXRlKHQsKGZ1bmN0aW9uKCl7dmFyIG89e2FjdGlvbjp0LmFjdGlvbixhY3RpdmVTdGFydERhdGU6dC5hY3RpdmVTdGFydERhdGV8fGUuYWN0aXZlU3RhcnREYXRlLHZhbHVlOnQudmFsdWV8fGUudmFsdWUsdmlldzp0LnZpZXd8fGUudmlld307ZnVuY3Rpb24gaShlKXtyZXR1cm4gZSBpbiB0JiYoa24odFtlXSkhPT1rbihwW2VdKXx8KHRbZV1pbnN0YW5jZW9mIERhdGU/dFtlXS5nZXRUaW1lKCkhPT1wW2VdLmdldFRpbWUoKTp0W2VdIT09cFtlXSkpfWkoXCJhY3RpdmVTdGFydERhdGVcIikmJmMmJmMobyksaShcInZpZXdcIikmJmYmJmYobyksaShcInZhbHVlXCIpJiZ1JiYoZCYmWG4odC52YWx1ZSk/cyYmdShbdC52YWx1ZV0sbik6dSh0LnZhbHVlLG4pKSxyJiZyKG8pfSkpfSkpLEhuKFBuKGUpLFwic2V0QWN0aXZlU3RhcnREYXRlXCIsKGZ1bmN0aW9uKHQsbil7ZS5zZXRTdGF0ZUFuZENhbGxDYWxsYmFja3Moe2FjdGlvbjpuLGFjdGl2ZVN0YXJ0RGF0ZTp0fSl9KSksSG4oUG4oZSksXCJkcmlsbERvd25cIiwoZnVuY3Rpb24odCxuKXtpZihlLmRyaWxsRG93bkF2YWlsYWJsZSl7ZS5vbkNsaWNrVGlsZSh0LG4pO3ZhciByPVBuKGUpLG89ci52aWV3LGk9ci52aWV3cyxhPWUucHJvcHMub25EcmlsbERvd24sbD1pW2kuaW5kZXhPZihvKSsxXTtlLnNldFN0YXRlQW5kQ2FsbENhbGxiYWNrcyh7YWN0aW9uOlwiZHJpbGxEb3duXCIsYWN0aXZlU3RhcnREYXRlOnQsdmlldzpsfSx2b2lkIDAsYSl9fSkpLEhuKFBuKGUpLFwiZHJpbGxVcFwiLChmdW5jdGlvbigpe2lmKGUuZHJpbGxVcEF2YWlsYWJsZSl7dmFyIHQ9UG4oZSksbj10LmFjdGl2ZVN0YXJ0RGF0ZSxyPXQudmlldyxvPXQudmlld3MsaT1lLnByb3BzLm9uRHJpbGxVcCxhPW9bby5pbmRleE9mKHIpLTFdLGw9Q2UoYSxuKTtlLnNldFN0YXRlQW5kQ2FsbENhbGxiYWNrcyh7YWN0aW9uOlwiZHJpbGxVcFwiLGFjdGl2ZVN0YXJ0RGF0ZTpsLHZpZXc6YX0sdm9pZCAwLGkpfX0pKSxIbihQbihlKSxcIm9uQ2hhbmdlXCIsKGZ1bmN0aW9uKHQsbil7dmFyIHI9UG4oZSkudmFsdWUsbz1lLnByb3BzLGk9by5nb1RvUmFuZ2VTdGFydE9uU2VsZWN0LGE9by5zZWxlY3RSYW5nZTtlLm9uQ2xpY2tUaWxlKHQsbik7dmFyIGwscyxjLHU9YSYmIVhuKHIpO2lmKGEpe3ZhciBmPVBuKGUpLnZhbHVlVHlwZTtsPXU/Q2UoZix0KTpbQ2Uocz1mLChjPVtyLHRdLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pKSlbMF0pLHhlKHMsY1sxXSldfWVsc2UgbD1lLmdldFByb2Nlc3NlZFZhbHVlKHQpO3ZhciBkPSFhfHx1fHxpP0tuKFRuKFRuKHt9LGUucHJvcHMpLHt9LHt2YWx1ZTpsfSkpOm51bGw7bi5wZXJzaXN0KCksZS5zZXRTdGF0ZUFuZENhbGxDYWxsYmFja3Moe2FjdGlvbjpcIm9uQ2hhbmdlXCIsYWN0aXZlU3RhcnREYXRlOmQsdmFsdWU6bH0sbil9KSksSG4oUG4oZSksXCJvbkNsaWNrVGlsZVwiLChmdW5jdGlvbih0LG4pe3ZhciByPVBuKGUpLnZpZXcsbz1lLnByb3BzLGk9by5vbkNsaWNrRGF5LGE9by5vbkNsaWNrRGVjYWRlLGw9by5vbkNsaWNrTW9udGgscz1vLm9uQ2xpY2tZZWFyLGM9ZnVuY3Rpb24oKXtzd2l0Y2gocil7Y2FzZVwiY2VudHVyeVwiOnJldHVybiBhO2Nhc2VcImRlY2FkZVwiOnJldHVybiBzO2Nhc2VcInllYXJcIjpyZXR1cm4gbDtjYXNlXCJtb250aFwiOnJldHVybiBpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB2aWV3OiBcIi5jb25jYXQocixcIi5cIikpfX0oKTtjJiZjKHQsbil9KSksSG4oUG4oZSksXCJvbk1vdXNlT3ZlclwiLChmdW5jdGlvbih0KXtlLnNldFN0YXRlKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ob3ZlciYmZS5ob3Zlci5nZXRUaW1lKCk9PT10LmdldFRpbWUoKT9udWxsOntob3Zlcjp0fX0pKX0pKSxIbihQbihlKSxcIm9uTW91c2VMZWF2ZVwiLChmdW5jdGlvbigpe2Uuc2V0U3RhdGUoe2hvdmVyOm51bGx9KX0pKSxlfXJldHVybiB0PWwsbj1be2tleTpcImFjdGl2ZVN0YXJ0RGF0ZVwiLGdldDpmdW5jdGlvbigpe3ZhciBlLHQsbixyLG8saSxhLGwscyxjLHUsZixkPXRoaXMucHJvcHMuYWN0aXZlU3RhcnREYXRlLHA9dGhpcy5zdGF0ZS5hY3RpdmVTdGFydERhdGU7cmV0dXJuIGR8fHB8fCh0PShlPXRoaXMucHJvcHMpLmFjdGl2ZVN0YXJ0RGF0ZSxuPWUuZGVmYXVsdEFjdGl2ZVN0YXJ0RGF0ZSxyPWUuZGVmYXVsdFZhbHVlLG89ZS5kZWZhdWx0VmlldyxpPWUubWF4RGV0YWlsLGE9ZS5taW5EZXRhaWwsbD1lLnZhbHVlLHM9ZS52aWV3LGM9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGk9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLGpuKSx1PVVuKHMsYSxpKSwoZj10fHxuKT9DZSh1LGYpOktuKFRuKHttYXhEZXRhaWw6aSxtaW5EZXRhaWw6YSx2YWx1ZTpsfHxyLHZpZXc6c3x8b30sYykpKX19LHtrZXk6XCJ2YWx1ZVwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnNlbGVjdFJhbmdlLG49ZS52YWx1ZSxyPXRoaXMuc3RhdGUudmFsdWU7cmV0dXJuIHQmJlhuKHIpP3I6dm9pZCAwIT09bj9uOnJ9fSx7a2V5OlwidmFsdWVUeXBlXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFduKHRoaXMucHJvcHMubWF4RGV0YWlsKX19LHtrZXk6XCJ2aWV3XCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUubWluRGV0YWlsLG49ZS5tYXhEZXRhaWwscj1lLnZpZXcsbz10aGlzLnN0YXRlLnZpZXc7cmV0dXJuIFVuKHJ8fG8sdCxuKX19LHtrZXk6XCJ2aWV3c1wiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHM7cmV0dXJuIEZuKGUubWluRGV0YWlsLGUubWF4RGV0YWlsKX19LHtrZXk6XCJob3ZlclwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuc2VsZWN0UmFuZ2UsdD10aGlzLnN0YXRlLmhvdmVyO3JldHVybiBlP3Q6bnVsbH19LHtrZXk6XCJkcmlsbERvd25BdmFpbGFibGVcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnZpZXcsdD10aGlzLnZpZXdzO3JldHVybiB0LmluZGV4T2YoZSk8dC5sZW5ndGgtMX19LHtrZXk6XCJkcmlsbFVwQXZhaWxhYmxlXCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52aWV3O3JldHVybiB0aGlzLnZpZXdzLmluZGV4T2YoZSk+MH19LHtrZXk6XCJnZXRQcm9jZXNzZWRWYWx1ZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMsbj10Lm1pbkRhdGUscj10Lm1heERhdGUsbz10Lm1heERldGFpbCxpPXQucmV0dXJuVmFsdWU7cmV0dXJuIGZ1bmN0aW9uKCl7c3dpdGNoKGkpe2Nhc2VcInN0YXJ0XCI6cmV0dXJuIEduO2Nhc2VcImVuZFwiOnJldHVybiBxbjtjYXNlXCJyYW5nZVwiOnJldHVybiBZbjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmV0dXJuVmFsdWUuXCIpfX0oKSh7dmFsdWU6ZSxtaW5EYXRlOm4sbWF4RGF0ZTpyLG1heERldGFpbDpvfSl9fSx7a2V5OlwicmVuZGVyQ29udGVudFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYWN0aXZlU3RhcnREYXRlLG49dGhpcy5vbk1vdXNlT3ZlcixyPXRoaXMudmFsdWVUeXBlLGk9dGhpcy52YWx1ZSxhPXRoaXMudmlldyxsPXRoaXMucHJvcHMscz1sLmNhbGVuZGFyVHlwZSxjPWwubG9jYWxlLHU9bC5tYXhEYXRlLGY9bC5taW5EYXRlLGQ9bC5zZWxlY3RSYW5nZSxwPWwudGlsZUNsYXNzTmFtZSxoPWwudGlsZUNvbnRlbnQsZz1sLnRpbGVEaXNhYmxlZCx2PXRoaXMuaG92ZXIsbT17YWN0aXZlU3RhcnREYXRlOmU/eWUoYSx0KTpDZShhLHQpLGhvdmVyOnYsbG9jYWxlOmMsbWF4RGF0ZTp1LG1pbkRhdGU6ZixvbkNsaWNrOnRoaXMuZHJpbGxEb3duQXZhaWxhYmxlP3RoaXMuZHJpbGxEb3duOnRoaXMub25DaGFuZ2Usb25Nb3VzZU92ZXI6ZD9uOm51bGwsdGlsZUNsYXNzTmFtZTpwLHRpbGVDb250ZW50OmgsdGlsZURpc2FibGVkOmcsdmFsdWU6aSx2YWx1ZVR5cGU6cn07c3dpdGNoKGEpe2Nhc2VcImNlbnR1cnlcIjp2YXIgQz10aGlzLnByb3BzLmZvcm1hdFllYXI7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KGt0LE1uKHtmb3JtYXRZZWFyOkN9LG0pKTtjYXNlXCJkZWNhZGVcIjp2YXIgeT10aGlzLnByb3BzLmZvcm1hdFllYXI7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KE50LE1uKHtmb3JtYXRZZWFyOnl9LG0pKTtjYXNlXCJ5ZWFyXCI6dmFyIHc9dGhpcy5wcm9wcyxiPXcuZm9ybWF0TW9udGgseD13LmZvcm1hdE1vbnRoWWVhcjtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQodG4sTW4oe2Zvcm1hdE1vbnRoOmIsZm9ybWF0TW9udGhZZWFyOnh9LG0pKTtjYXNlXCJtb250aFwiOnZhciBfPXRoaXMucHJvcHMsTz1fLmZvcm1hdERheSxMPV8uZm9ybWF0TG9uZ0RhdGUsRT1fLmZvcm1hdFNob3J0V2Vla2RheSxTPV8uZm9ybWF0V2Vla2RheSxqPV8ub25DbGlja1dlZWtOdW1iZXIsTT1fLnNob3dEb3VibGVWaWV3LGs9Xy5zaG93Rml4ZWROdW1iZXJPZldlZWtzLFI9Xy5zaG93TmVpZ2hib3JpbmdNb250aCxQPV8uc2hvd1dlZWtOdW1iZXJzLEk9dGhpcy5vbk1vdXNlTGVhdmU7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFNuLE1uKHtjYWxlbmRhclR5cGU6cyxmb3JtYXREYXk6Tyxmb3JtYXRMb25nRGF0ZTpMLGZvcm1hdFNob3J0V2Vla2RheTpFLGZvcm1hdFdlZWtkYXk6UyxvbkNsaWNrV2Vla051bWJlcjpqLG9uTW91c2VMZWF2ZTpkP0k6bnVsbCxzaG93Rml4ZWROdW1iZXJPZldlZWtzOnZvaWQgMCE9PWs/azpNLHNob3dOZWlnaGJvcmluZ01vbnRoOlIsc2hvd1dlZWtOdW1iZXJzOlB9LG0pKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdmlldzogXCIuY29uY2F0KGEsXCIuXCIpKX19fSx7a2V5OlwicmVuZGVyTmF2aWdhdGlvblwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMucHJvcHMuc2hvd05hdmlnYXRpb24pcmV0dXJuIG51bGw7dmFyIGU9dGhpcy5hY3RpdmVTdGFydERhdGUsdD10aGlzLnZpZXcsbj10aGlzLnZpZXdzLHI9dGhpcy5wcm9wcyxpPXIuZm9ybWF0TW9udGhZZWFyLGE9ci5mb3JtYXRZZWFyLGw9ci5sb2NhbGUscz1yLm1heERhdGUsYz1yLm1pbkRhdGUsdT1yLm5hdmlnYXRpb25BcmlhTGFiZWwsZj1yLm5hdmlnYXRpb25BcmlhTGl2ZSxkPXIubmF2aWdhdGlvbkxhYmVsLHA9ci5uZXh0MkFyaWFMYWJlbCxoPXIubmV4dDJMYWJlbCxnPXIubmV4dEFyaWFMYWJlbCx2PXIubmV4dExhYmVsLG09ci5wcmV2MkFyaWFMYWJlbCxDPXIucHJldjJMYWJlbCx5PXIucHJldkFyaWFMYWJlbCx3PXIucHJldkxhYmVsLGI9ci5zaG93RG91YmxlVmlldztyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoTmUse2FjdGl2ZVN0YXJ0RGF0ZTplLGRyaWxsVXA6dGhpcy5kcmlsbFVwLGZvcm1hdE1vbnRoWWVhcjppLGZvcm1hdFllYXI6YSxsb2NhbGU6bCxtYXhEYXRlOnMsbWluRGF0ZTpjLG5hdmlnYXRpb25BcmlhTGFiZWw6dSxuYXZpZ2F0aW9uQXJpYUxpdmU6ZixuYXZpZ2F0aW9uTGFiZWw6ZCxuZXh0MkFyaWFMYWJlbDpwLG5leHQyTGFiZWw6aCxuZXh0QXJpYUxhYmVsOmcsbmV4dExhYmVsOnYscHJldjJBcmlhTGFiZWw6bSxwcmV2MkxhYmVsOkMscHJldkFyaWFMYWJlbDp5LHByZXZMYWJlbDp3LHNldEFjdGl2ZVN0YXJ0RGF0ZTp0aGlzLnNldEFjdGl2ZVN0YXJ0RGF0ZSxzaG93RG91YmxlVmlldzpiLHZpZXc6dCx2aWV3czpufSl9fSx7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jbGFzc05hbWUsbj1lLmlucHV0UmVmLHI9ZS5zZWxlY3RSYW5nZSxpPWUuc2hvd0RvdWJsZVZpZXcsYT10aGlzLm9uTW91c2VMZWF2ZSxsPXRoaXMudmFsdWUsYz1bXS5jb25jYXQobCk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpzKFpuLHImJjE9PT1jLmxlbmd0aCYmXCJcIi5jb25jYXQoWm4sXCItLXNlbGVjdFJhbmdlXCIpLGkmJlwiXCIuY29uY2F0KFpuLFwiLS1kb3VibGVWaWV3XCIpLHQpLHJlZjpufSx0aGlzLnJlbmRlck5hdmlnYXRpb24oKSxvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJcIi5jb25jYXQoWm4sXCJfX3ZpZXdDb250YWluZXJcIiksb25CbHVyOnI/YTpudWxsLG9uTW91c2VMZWF2ZTpyP2E6bnVsbH0sdGhpcy5yZW5kZXJDb250ZW50KCksaSYmdGhpcy5yZW5kZXJDb250ZW50KCEwKSkpfX1dLG4mJmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX0odC5wcm90b3R5cGUsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KSxsfShyLkNvbXBvbmVudCk7Sm4uZGVmYXVsdFByb3BzPXtnb1RvUmFuZ2VTdGFydE9uU2VsZWN0OiEwLG1heERhdGU6RG4sbWF4RGV0YWlsOlwibW9udGhcIixtaW5EYXRlOlZuLG1pbkRldGFpbDpcImNlbnR1cnlcIixyZXR1cm5WYWx1ZTpcInN0YXJ0XCIsc2hvd05hdmlnYXRpb246ITAsc2hvd05laWdoYm9yaW5nTW9udGg6ITB9O3ZhciBRbj1hKCkuaW5zdGFuY2VPZihEYXRlKSxlcj1hKCkub25lT2ZUeXBlKFthKCkuc3RyaW5nLEhlXSk7Sm4ucHJvcFR5cGVzPXthY3RpdmVTdGFydERhdGU6UW4sYWxsb3dQYXJ0aWFsUmFuZ2U6YSgpLmJvb2wsY2FsZW5kYXJUeXBlOlJlLGNsYXNzTmFtZTpQZSxkZWZhdWx0QWN0aXZlU3RhcnREYXRlOlFuLGRlZmF1bHRWYWx1ZTplcixkZWZhdWx0VmlldzpWZSxmb3JtYXREYXk6YSgpLmZ1bmMsZm9ybWF0TG9uZ0RhdGU6YSgpLmZ1bmMsZm9ybWF0TW9udGg6YSgpLmZ1bmMsZm9ybWF0TW9udGhZZWFyOmEoKS5mdW5jLGZvcm1hdFNob3J0V2Vla2RheTphKCkuZnVuYyxmb3JtYXRXZWVrZGF5OmEoKS5mdW5jLGZvcm1hdFllYXI6YSgpLmZ1bmMsZ29Ub1JhbmdlU3RhcnRPblNlbGVjdDphKCkuYm9vbCxpbnB1dFJlZjpUZSxsb2NhbGU6YSgpLnN0cmluZyxtYXhEYXRlOkFlLG1heERldGFpbDphKCkub25lT2YoJG4pLG1pbkRhdGU6SWUsbWluRGV0YWlsOmEoKS5vbmVPZigkbiksbmF2aWdhdGlvbkFyaWFMYWJlbDphKCkuc3RyaW5nLG5hdmlnYXRpb25BcmlhTGl2ZTphKCkub25lT2YoW1wib2ZmXCIsXCJwb2xpdGVcIixcImFzc2VydGl2ZVwiXSksbmF2aWdhdGlvbkxhYmVsOmEoKS5mdW5jLG5leHQyQXJpYUxhYmVsOmEoKS5zdHJpbmcsbmV4dDJMYWJlbDphKCkubm9kZSxuZXh0QXJpYUxhYmVsOmEoKS5zdHJpbmcsbmV4dExhYmVsOmEoKS5ub2RlLG9uQWN0aXZlU3RhcnREYXRlQ2hhbmdlOmEoKS5mdW5jLG9uQ2hhbmdlOmEoKS5mdW5jLG9uQ2xpY2tEYXk6YSgpLmZ1bmMsb25DbGlja0RlY2FkZTphKCkuZnVuYyxvbkNsaWNrTW9udGg6YSgpLmZ1bmMsb25DbGlja1dlZWtOdW1iZXI6YSgpLmZ1bmMsb25DbGlja1llYXI6YSgpLmZ1bmMsb25EcmlsbERvd246YSgpLmZ1bmMsb25EcmlsbFVwOmEoKS5mdW5jLG9uVmlld0NoYW5nZTphKCkuZnVuYyxwcmV2MkFyaWFMYWJlbDphKCkuc3RyaW5nLHByZXYyTGFiZWw6YSgpLm5vZGUscHJldkFyaWFMYWJlbDphKCkuc3RyaW5nLHByZXZMYWJlbDphKCkubm9kZSxyZXR1cm5WYWx1ZTphKCkub25lT2YoW1wic3RhcnRcIixcImVuZFwiLFwicmFuZ2VcIl0pLHNlbGVjdFJhbmdlOmEoKS5ib29sLHNob3dEb3VibGVWaWV3OmEoKS5ib29sLHNob3dGaXhlZE51bWJlck9mV2Vla3M6YSgpLmJvb2wsc2hvd05hdmlnYXRpb246YSgpLmJvb2wsc2hvd05laWdoYm9yaW5nTW9udGg6YSgpLmJvb2wsc2hvd1dlZWtOdW1iZXJzOmEoKS5ib29sLHRpbGVDbGFzc05hbWU6YSgpLm9uZU9mVHlwZShbYSgpLmZ1bmMsUGVdKSx0aWxlQ29udGVudDphKCkub25lT2ZUeXBlKFthKCkuZnVuYyxhKCkubm9kZV0pLHRpbGVEaXNhYmxlZDphKCkuZnVuYyx2YWx1ZTplcix2aWV3OlZlfTtjb25zdCB0cj1Kbn0sNTI1MTooZSx0LG4pPT57big3NDE4KTt2YXIgcj1uKDY2ODkpLG89NjAxMDM7aWYodC5GcmFnbWVudD02MDEwNyxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciBpPVN5bWJvbC5mb3I7bz1pKFwicmVhY3QuZWxlbWVudFwiKSx0LkZyYWdtZW50PWkoXCJyZWFjdC5mcmFnbWVudFwiKX12YXIgYT1yLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0Q3VycmVudE93bmVyLGw9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxzPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gYyhlLHQsbil7dmFyIHIsaT17fSxjPW51bGwsdT1udWxsO2ZvcihyIGluIHZvaWQgMCE9PW4mJihjPVwiXCIrbiksdm9pZCAwIT09dC5rZXkmJihjPVwiXCIrdC5rZXkpLHZvaWQgMCE9PXQucmVmJiYodT10LnJlZiksdClsLmNhbGwodCxyKSYmIXMuaGFzT3duUHJvcGVydHkocikmJihpW3JdPXRbcl0pO2lmKGUmJmUuZGVmYXVsdFByb3BzKWZvcihyIGluIHQ9ZS5kZWZhdWx0UHJvcHMpdm9pZCAwPT09aVtyXSYmKGlbcl09dFtyXSk7cmV0dXJueyQkdHlwZW9mOm8sdHlwZTplLGtleTpjLHJlZjp1LHByb3BzOmksX293bmVyOmEuY3VycmVudH19dC5qc3g9Yyx0LmpzeHM9Y30sNTg5MzooZSx0LG4pPT57ZS5leHBvcnRzPW4oNTI1MSl9LDM1NzM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPW4oNjU1KSxvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLm1heChNYXRoLm1pbihuLHQpLGUpfX0saT1mdW5jdGlvbihlKXtyZXR1cm4gZSUxP051bWJlcihlLnRvRml4ZWQoNSkpOmV9LGE9LygtKT8oW1xcZF0qXFwuP1tcXGRdKSsvZyxsPS8oI1swLTlhLWZdezZ9fCNbMC05YS1mXXszfXwjKD86WzAtOWEtZl17Mn0pezIsNH18KHJnYnxoc2wpYT9cXCgoLT9bXFxkXFwuXSslP1ssXFxzXSspezIsM31cXHMqXFwvKlxccypbXFxkXFwuXSslP1xcKSkvZ2kscz0vXigjWzAtOWEtZl17M318Iyg/OlswLTlhLWZdezJ9KXsyLDR9fChyZ2J8aHNsKWE/XFwoKC0/W1xcZFxcLl0rJT9bLFxcc10rKXsyLDN9XFxzKlxcLypcXHMqW1xcZFxcLl0rJT9cXCkpJC9pO2Z1bmN0aW9uIGMoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV9dmFyIHU9e3Rlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGV9LHBhcnNlOnBhcnNlRmxvYXQsdHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3JldHVybiBlfX0sZj1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdSkse3RyYW5zZm9ybTpvKDAsMSl9KSxkPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSx1KSx7ZGVmYXVsdDoxfSkscD1mdW5jdGlvbihlKXtyZXR1cm57dGVzdDpmdW5jdGlvbih0KXtyZXR1cm4gYyh0KSYmdC5lbmRzV2l0aChlKSYmMT09PXQuc3BsaXQoXCIgXCIpLmxlbmd0aH0scGFyc2U6cGFyc2VGbG9hdCx0cmFuc2Zvcm06ZnVuY3Rpb24odCl7cmV0dXJuXCJcIit0K2V9fX0saD1wKFwiZGVnXCIpLGc9cChcIiVcIiksdj1wKFwicHhcIiksbT1wKFwidmhcIiksQz1wKFwidndcIikseT1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sZykse3BhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBnLnBhcnNlKGUpLzEwMH0sdHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3JldHVybiBnLnRyYW5zZm9ybSgxMDAqZSl9fSksdz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gQm9vbGVhbihjKG4pJiZzLnRlc3QobikmJm4uc3RhcnRzV2l0aChlKXx8dCYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sdCkpfX0sYj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBvO2lmKCFjKHIpKXJldHVybiByO3ZhciBpPXIubWF0Y2goYSksbD1pWzBdLHM9aVsxXSx1PWlbMl0sZj1pWzNdO3JldHVybihvPXt9KVtlXT1wYXJzZUZsb2F0KGwpLG9bdF09cGFyc2VGbG9hdChzKSxvW25dPXBhcnNlRmxvYXQodSksby5hbHBoYT12b2lkIDAhPT1mP3BhcnNlRmxvYXQoZik6MSxvfX0seD17dGVzdDp3KFwiaHNsXCIsXCJodWVcIikscGFyc2U6YihcImh1ZVwiLFwic2F0dXJhdGlvblwiLFwibGlnaHRuZXNzXCIpLHRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgdD1lLmh1ZSxuPWUuc2F0dXJhdGlvbixyPWUubGlnaHRuZXNzLG89ZS5hbHBoYSxhPXZvaWQgMD09PW8/MTpvO3JldHVyblwiaHNsYShcIitNYXRoLnJvdW5kKHQpK1wiLCBcIitnLnRyYW5zZm9ybShpKG4pKStcIiwgXCIrZy50cmFuc2Zvcm0oaShyKSkrXCIsIFwiK2koZi50cmFuc2Zvcm0oYSkpK1wiKVwifX0sXz1vKDAsMjU1KSxPPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSx1KSx7dHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKF8oZSkpfX0pLEw9e3Rlc3Q6dyhcInJnYlwiLFwicmVkXCIpLHBhcnNlOmIoXCJyZWRcIixcImdyZWVuXCIsXCJibHVlXCIpLHRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgdD1lLnJlZCxuPWUuZ3JlZW4scj1lLmJsdWUsbz1lLmFscGhhLGE9dm9pZCAwPT09bz8xOm87cmV0dXJuXCJyZ2JhKFwiK08udHJhbnNmb3JtKHQpK1wiLCBcIitPLnRyYW5zZm9ybShuKStcIiwgXCIrTy50cmFuc2Zvcm0ocikrXCIsIFwiK2koZi50cmFuc2Zvcm0oYSkpK1wiKVwifX0sRT17dGVzdDp3KFwiI1wiKSxwYXJzZTpmdW5jdGlvbihlKXt2YXIgdD1cIlwiLG49XCJcIixyPVwiXCIsbz1cIlwiO3JldHVybiBlLmxlbmd0aD41Pyh0PWUuc3Vic3RyKDEsMiksbj1lLnN1YnN0cigzLDIpLHI9ZS5zdWJzdHIoNSwyKSxvPWUuc3Vic3RyKDcsMikpOih0PWUuc3Vic3RyKDEsMSksbj1lLnN1YnN0cigyLDEpLHI9ZS5zdWJzdHIoMywxKSxvPWUuc3Vic3RyKDQsMSksdCs9dCxuKz1uLHIrPXIsbys9bykse3JlZDpwYXJzZUludCh0LDE2KSxncmVlbjpwYXJzZUludChuLDE2KSxibHVlOnBhcnNlSW50KHIsMTYpLGFscGhhOm8/cGFyc2VJbnQobywxNikvMjU1OjF9fSx0cmFuc2Zvcm06TC50cmFuc2Zvcm19LFM9e3Rlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIEwudGVzdChlKXx8RS50ZXN0KGUpfHx4LnRlc3QoZSl9LHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBMLnRlc3QoZSk/TC5wYXJzZShlKTp4LnRlc3QoZSk/eC5wYXJzZShlKTpFLnBhcnNlKGUpfSx0cmFuc2Zvcm06ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSk/ZTplLmhhc093blByb3BlcnR5KFwicmVkXCIpP0wudHJhbnNmb3JtKGUpOngudHJhbnNmb3JtKGUpfX0saj1cIiR7Y31cIixNPVwiJHtufVwiO2Z1bmN0aW9uIGsoZSl7dmFyIHQ9W10sbj0wLHI9ZS5tYXRjaChsKTtyJiYobj1yLmxlbmd0aCxlPWUucmVwbGFjZShsLGopLHQucHVzaC5hcHBseSh0LHIubWFwKFMucGFyc2UpKSk7dmFyIG89ZS5tYXRjaChhKTtyZXR1cm4gbyYmKGU9ZS5yZXBsYWNlKGEsTSksdC5wdXNoLmFwcGx5KHQsby5tYXAodS5wYXJzZSkpKSx7dmFsdWVzOnQsbnVtQ29sb3JzOm4sdG9rZW5pc2VkOmV9fWZ1bmN0aW9uIFIoZSl7cmV0dXJuIGsoZSkudmFsdWVzfWZ1bmN0aW9uIFAoZSl7dmFyIHQ9ayhlKSxuPXQudmFsdWVzLHI9dC5udW1Db2xvcnMsbz10LnRva2VuaXNlZCxhPW4ubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9byxuPTA7bjxhO24rKyl0PXQucmVwbGFjZShuPHI/ajpNLG48cj9TLnRyYW5zZm9ybShlW25dKTppKGVbbl0pKTtyZXR1cm4gdH19dmFyIEk9ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/MDplfSxBPXt0ZXN0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scixvO3JldHVybiBpc05hTihlKSYmYyhlKSYmKG51bGwhPT0obj1udWxsPT09KHQ9ZS5tYXRjaChhKSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubGVuZ3RoKSYmdm9pZCAwIT09bj9uOjApKyhudWxsIT09KG89bnVsbD09PShyPWUubWF0Y2gobCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmxlbmd0aCkmJnZvaWQgMCE9PW8/bzowKT4wfSxwYXJzZTpSLGNyZWF0ZVRyYW5zZm9ybWVyOlAsZ2V0QW5pbWF0YWJsZU5vbmU6ZnVuY3Rpb24oZSl7dmFyIHQ9UihlKTtyZXR1cm4gUChlKSh0Lm1hcChJKSl9fSxUPW5ldyBTZXQoW1wiYnJpZ2h0bmVzc1wiLFwiY29udHJhc3RcIixcInNhdHVyYXRlXCIsXCJvcGFjaXR5XCJdKTtmdW5jdGlvbiBIKGUpe3ZhciB0PWUuc2xpY2UoMCwtMSkuc3BsaXQoXCIoXCIpLG49dFswXSxyPXRbMV07aWYoXCJkcm9wLXNoYWRvd1wiPT09bilyZXR1cm4gZTt2YXIgbz0oci5tYXRjaChhKXx8W10pWzBdO2lmKCFvKXJldHVybiBlO3ZhciBpPXIucmVwbGFjZShvLFwiXCIpLGw9VC5oYXMobik/MTowO3JldHVybiBvIT09ciYmKGwqPTEwMCksbitcIihcIitsK2krXCIpXCJ9dmFyIEI9LyhbYS16LV0qKVxcKC4qP1xcKS9nLFY9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LEEpLHtnZXRBbmltYXRhYmxlTm9uZTpmdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKEIpO3JldHVybiB0P3QubWFwKEgpLmpvaW4oXCIgXCIpOmV9fSk7dC5hbHBoYT1mLHQuY29sb3I9Uyx0LmNvbXBsZXg9QSx0LmRlZ3JlZXM9aCx0LmZpbHRlcj1WLHQuaGV4PUUsdC5oc2xhPXgsdC5udW1iZXI9dSx0LnBlcmNlbnQ9Zyx0LnByb2dyZXNzUGVyY2VudGFnZT15LHQucHg9dix0LnJnYlVuaXQ9Tyx0LnJnYmE9TCx0LnNjYWxlPWQsdC52aD1tLHQudnc9Q30sODM4ODooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtmb2N1c2FibGU6KCk9PncsaXNGb2N1c2FibGU6KCk9Pl8saXNUYWJiYWJsZTooKT0+Yix0YWJiYWJsZTooKT0+eX0pO3ZhciByPVtcImlucHV0Om5vdChbaW5lcnRdKVwiLFwic2VsZWN0Om5vdChbaW5lcnRdKVwiLFwidGV4dGFyZWE6bm90KFtpbmVydF0pXCIsXCJhW2hyZWZdOm5vdChbaW5lcnRdKVwiLFwiYnV0dG9uOm5vdChbaW5lcnRdKVwiLFwiW3RhYmluZGV4XTpub3Qoc2xvdCk6bm90KFtpbmVydF0pXCIsXCJhdWRpb1tjb250cm9sc106bm90KFtpbmVydF0pXCIsXCJ2aWRlb1tjb250cm9sc106bm90KFtpbmVydF0pXCIsJ1tjb250ZW50ZWRpdGFibGVdOm5vdChbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0pOm5vdChbaW5lcnRdKScsXCJkZXRhaWxzPnN1bW1hcnk6Zmlyc3Qtb2YtdHlwZTpub3QoW2luZXJ0XSlcIixcImRldGFpbHM6bm90KFtpbmVydF0pXCJdLG89ci5qb2luKFwiLFwiKSxpPVwidW5kZWZpbmVkXCI9PXR5cGVvZiBFbGVtZW50LGE9aT9mdW5jdGlvbigpe306RWxlbWVudC5wcm90b3R5cGUubWF0Y2hlc3x8RWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3J8fEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvcixsPSFpJiZFbGVtZW50LnByb3RvdHlwZS5nZXRSb290Tm9kZT9mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbnVsbD09ZXx8bnVsbD09PSh0PWUuZ2V0Um9vdE5vZGUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNhbGwoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplLm93bmVyRG9jdW1lbnR9LHM9ZnVuY3Rpb24gZSh0LG4pe3ZhciByO3ZvaWQgMD09PW4mJihuPSEwKTt2YXIgbz1udWxsPT10fHxudWxsPT09KHI9dC5nZXRBdHRyaWJ1dGUpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmNhbGwodCxcImluZXJ0XCIpO3JldHVyblwiXCI9PT1vfHxcInRydWVcIj09PW98fG4mJnQmJmUodC5wYXJlbnROb2RlKX0sYz1mdW5jdGlvbihlLHQsbil7aWYocyhlKSlyZXR1cm5bXTt2YXIgcj1BcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoZS5xdWVyeVNlbGVjdG9yQWxsKG8pKTtyZXR1cm4gdCYmYS5jYWxsKGUsbykmJnIudW5zaGlmdChlKSxyLmZpbHRlcihuKX0sdT1mdW5jdGlvbiBlKHQsbixyKXtmb3IodmFyIGk9W10sbD1BcnJheS5mcm9tKHQpO2wubGVuZ3RoOyl7dmFyIGM9bC5zaGlmdCgpO2lmKCFzKGMsITEpKWlmKFwiU0xPVFwiPT09Yy50YWdOYW1lKXt2YXIgdT1jLmFzc2lnbmVkRWxlbWVudHMoKSxmPWUodS5sZW5ndGg/dTpjLmNoaWxkcmVuLCEwLHIpO3IuZmxhdHRlbj9pLnB1c2guYXBwbHkoaSxmKTppLnB1c2goe3Njb3BlUGFyZW50OmMsY2FuZGlkYXRlczpmfSl9ZWxzZXthLmNhbGwoYyxvKSYmci5maWx0ZXIoYykmJihufHwhdC5pbmNsdWRlcyhjKSkmJmkucHVzaChjKTt2YXIgZD1jLnNoYWRvd1Jvb3R8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHIuZ2V0U2hhZG93Um9vdCYmci5nZXRTaGFkb3dSb290KGMpLHA9IXMoZCwhMSkmJighci5zaGFkb3dSb290RmlsdGVyfHxyLnNoYWRvd1Jvb3RGaWx0ZXIoYykpO2lmKGQmJnApe3ZhciBoPWUoITA9PT1kP2MuY2hpbGRyZW46ZC5jaGlsZHJlbiwhMCxyKTtyLmZsYXR0ZW4/aS5wdXNoLmFwcGx5KGksaCk6aS5wdXNoKHtzY29wZVBhcmVudDpjLGNhbmRpZGF0ZXM6aH0pfWVsc2UgbC51bnNoaWZ0LmFwcGx5KGwsYy5jaGlsZHJlbil9fXJldHVybiBpfSxmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudGFiSW5kZXg8MCYmKHR8fC9eKEFVRElPfFZJREVPfERFVEFJTFMpJC8udGVzdChlLnRhZ05hbWUpfHxmdW5jdGlvbihlKXt2YXIgdCxuPW51bGw9PWV8fG51bGw9PT0odD1lLmdldEF0dHJpYnV0ZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuY2FsbChlLFwiY29udGVudGVkaXRhYmxlXCIpO3JldHVyblwiXCI9PT1ufHxcInRydWVcIj09PW59KGUpKSYmaXNOYU4ocGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKSwxMCkpPzA6ZS50YWJJbmRleH0sZD1mdW5jdGlvbihlLHQpe3JldHVybiBlLnRhYkluZGV4PT09dC50YWJJbmRleD9lLmRvY3VtZW50T3JkZXItdC5kb2N1bWVudE9yZGVyOmUudGFiSW5kZXgtdC50YWJJbmRleH0scD1mdW5jdGlvbihlKXtyZXR1cm5cIklOUFVUXCI9PT1lLnRhZ05hbWV9LGg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXQud2lkdGgscj10LmhlaWdodDtyZXR1cm4gMD09PW4mJjA9PT1yfSxnPWZ1bmN0aW9uKGUsdCl7cmV0dXJuISh0LmRpc2FibGVkfHxzKHQpfHxmdW5jdGlvbihlKXtyZXR1cm4gcChlKSYmXCJoaWRkZW5cIj09PWUudHlwZX0odCl8fGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5kaXNwbGF5Q2hlY2sscj10LmdldFNoYWRvd1Jvb3Q7aWYoXCJoaWRkZW5cIj09PWdldENvbXB1dGVkU3R5bGUoZSkudmlzaWJpbGl0eSlyZXR1cm4hMDt2YXIgbz1hLmNhbGwoZSxcImRldGFpbHM+c3VtbWFyeTpmaXJzdC1vZi10eXBlXCIpP2UucGFyZW50RWxlbWVudDplO2lmKGEuY2FsbChvLFwiZGV0YWlsczpub3QoW29wZW5dKSAqXCIpKXJldHVybiEwO2lmKG4mJlwiZnVsbFwiIT09biYmXCJsZWdhY3ktZnVsbFwiIT09bil7aWYoXCJub24temVyby1hcmVhXCI9PT1uKXJldHVybiBoKGUpfWVsc2V7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygcil7Zm9yKHZhciBpPWU7ZTspe3ZhciBzPWUucGFyZW50RWxlbWVudCxjPWwoZSk7aWYocyYmIXMuc2hhZG93Um9vdCYmITA9PT1yKHMpKXJldHVybiBoKGUpO2U9ZS5hc3NpZ25lZFNsb3Q/ZS5hc3NpZ25lZFNsb3Q6c3x8Yz09PWUub3duZXJEb2N1bWVudD9zOmMuaG9zdH1lPWl9aWYoZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8saT1lJiZsKGUpLGE9bnVsbD09PSh0PWkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmhvc3Qscz0hMTtpZihpJiZpIT09ZSlmb3Iocz0hIShudWxsIT09KG49YSkmJnZvaWQgMCE9PW4mJm51bGwhPT0ocj1uLm93bmVyRG9jdW1lbnQpJiZ2b2lkIDAhPT1yJiZyLmNvbnRhaW5zKGEpfHxudWxsIT1lJiZudWxsIT09KG89ZS5vd25lckRvY3VtZW50KSYmdm9pZCAwIT09byYmby5jb250YWlucyhlKSk7IXMmJmE7KXt2YXIgYyx1LGY7cz0hKG51bGw9PT0odT1hPW51bGw9PT0oYz1pPWwoYSkpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLmhvc3QpfHx2b2lkIDA9PT11fHxudWxsPT09KGY9dS5vd25lckRvY3VtZW50KXx8dm9pZCAwPT09Znx8IWYuY29udGFpbnMoYSkpfXJldHVybiBzfShlKSlyZXR1cm4hZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aDtpZihcImxlZ2FjeS1mdWxsXCIhPT1uKXJldHVybiEwfXJldHVybiExfSh0LGUpfHxmdW5jdGlvbihlKXtyZXR1cm5cIkRFVEFJTFNcIj09PWUudGFnTmFtZSYmQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGUuY2hpbGRyZW4pLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVyblwiU1VNTUFSWVwiPT09ZS50YWdOYW1lfSkpfSh0KXx8ZnVuY3Rpb24oZSl7aWYoL14oSU5QVVR8QlVUVE9OfFNFTEVDVHxURVhUQVJFQSkkLy50ZXN0KGUudGFnTmFtZSkpZm9yKHZhciB0PWUucGFyZW50RWxlbWVudDt0Oyl7aWYoXCJGSUVMRFNFVFwiPT09dC50YWdOYW1lJiZ0LmRpc2FibGVkKXtmb3IodmFyIG49MDtuPHQuY2hpbGRyZW4ubGVuZ3RoO24rKyl7dmFyIHI9dC5jaGlsZHJlbi5pdGVtKG4pO2lmKFwiTEVHRU5EXCI9PT1yLnRhZ05hbWUpcmV0dXJuISFhLmNhbGwodCxcImZpZWxkc2V0W2Rpc2FibGVkXSAqXCIpfHwhci5jb250YWlucyhlKX1yZXR1cm4hMH10PXQucGFyZW50RWxlbWVudH1yZXR1cm4hMX0odCkpfSx2PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIShmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHAoZSkmJlwicmFkaW9cIj09PWUudHlwZX0oZSkmJiFmdW5jdGlvbihlKXtpZighZS5uYW1lKXJldHVybiEwO3ZhciB0LG49ZS5mb3JtfHxsKGUpLHI9ZnVuY3Rpb24oZSl7cmV0dXJuIG4ucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cInJhZGlvXCJdW25hbWU9XCInK2UrJ1wiXScpfTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cuQ1NTJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cuQ1NTLmVzY2FwZSl0PXIod2luZG93LkNTUy5lc2NhcGUoZS5uYW1lKSk7ZWxzZSB0cnl7dD1yKGUubmFtZSl9Y2F0Y2goZSl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJMb29rcyBsaWtlIHlvdSBoYXZlIGEgcmFkaW8gYnV0dG9uIHdpdGggYSBuYW1lIGF0dHJpYnV0ZSBjb250YWluaW5nIGludmFsaWQgQ1NTIHNlbGVjdG9yIGNoYXJhY3RlcnMgYW5kIG5lZWQgdGhlIENTUy5lc2NhcGUgcG9seWZpbGw6ICVzXCIsZS5tZXNzYWdlKSwhMX12YXIgbz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKGVbbl0uY2hlY2tlZCYmZVtuXS5mb3JtPT09dClyZXR1cm4gZVtuXX0odCxlLmZvcm0pO3JldHVybiFvfHxvPT09ZX0oZSl9KHQpfHxmKHQpPDB8fCFnKGUsdCkpfSxtPWZ1bmN0aW9uKGUpe3ZhciB0PXBhcnNlSW50KGUuZ2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiksMTApO3JldHVybiEhKGlzTmFOKHQpfHx0Pj0wKX0sQz1mdW5jdGlvbiBlKHQpe3ZhciBuPVtdLHI9W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxvKXt2YXIgaT0hIXQuc2NvcGVQYXJlbnQsYT1pP3Quc2NvcGVQYXJlbnQ6dCxsPWYoYSxpKSxzPWk/ZSh0LmNhbmRpZGF0ZXMpOmE7MD09PWw/aT9uLnB1c2guYXBwbHkobixzKTpuLnB1c2goYSk6ci5wdXNoKHtkb2N1bWVudE9yZGVyOm8sdGFiSW5kZXg6bCxpdGVtOnQsaXNTY29wZTppLGNvbnRlbnQ6c30pfSkpLHIuc29ydChkKS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuaXNTY29wZT9lLnB1c2guYXBwbHkoZSx0LmNvbnRlbnQpOmUucHVzaCh0LmNvbnRlbnQpLGV9KSxbXSkuY29uY2F0KG4pfSx5PWZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG49KHQ9dHx8e30pLmdldFNoYWRvd1Jvb3Q/dShbZV0sdC5pbmNsdWRlQ29udGFpbmVyLHtmaWx0ZXI6di5iaW5kKG51bGwsdCksZmxhdHRlbjohMSxnZXRTaGFkb3dSb290OnQuZ2V0U2hhZG93Um9vdCxzaGFkb3dSb290RmlsdGVyOm19KTpjKGUsdC5pbmNsdWRlQ29udGFpbmVyLHYuYmluZChudWxsLHQpKSxDKG4pfSx3PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ9dHx8e30pLmdldFNoYWRvd1Jvb3Q/dShbZV0sdC5pbmNsdWRlQ29udGFpbmVyLHtmaWx0ZXI6Zy5iaW5kKG51bGwsdCksZmxhdHRlbjohMCxnZXRTaGFkb3dSb290OnQuZ2V0U2hhZG93Um9vdH0pOmMoZSx0LmluY2x1ZGVDb250YWluZXIsZy5iaW5kKG51bGwsdCkpfSxiPWZ1bmN0aW9uKGUsdCl7aWYodD10fHx7fSwhZSl0aHJvdyBuZXcgRXJyb3IoXCJObyBub2RlIHByb3ZpZGVkXCIpO3JldHVybiExIT09YS5jYWxsKGUsbykmJnYodCxlKX0seD1yLmNvbmNhdChcImlmcmFtZVwiKS5qb2luKFwiLFwiKSxfPWZ1bmN0aW9uKGUsdCl7aWYodD10fHx7fSwhZSl0aHJvdyBuZXcgRXJyb3IoXCJObyBub2RlIHByb3ZpZGVkXCIpO3JldHVybiExIT09YS5jYWxsKGUseCkmJmcodCxlKX19LDk4Mjg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRm9udHM9dm9pZCAwO2NvbnN0IG89cihuKDQ2NjgpKSxpPXIobig2MDM2KSksYT1yKG4oNTk0MSkpLGw9cihuKDI4MTMpKTt0LkZvbnRzPXtyZWd1bGFyOm8uZGVmYXVsdCxpdGFsaWM6aS5kZWZhdWx0LHNlbWlCb2xkOmEuZGVmYXVsdCxzZW1pQm9sZEl0YWxpYzpsLmRlZmF1bHR9fSw2MjE4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5ODI4KSx0KX0sNDI0OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJ1dHRvblRleHRPbmx5PXQuQnV0dG9uU2Vjb25kYXJ5PXQuQnV0dG9uUHJpbWFyeT10LkJ1dHRvbj12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGE9byhuKDc1MTgpKSxsPW4oMTMzNSkscz1uKDk1MDcpLGM9big2MTI2KTt0LkJ1dHRvbj1lPT57dmFye2xhYmVsOnQsY2hpbGRyZW46bixzaXplOm89XCJiYXNlXCIsc2hhcGU6YT1cInNxdWFyZVwiLGtpbmQ6bD1cInByaW1hcnlcIixsYXlvdXQ6cz1cImZpdFwiLGhyZWY6Y309ZSxkPXIoZSxbXCJsYWJlbFwiLFwiY2hpbGRyZW5cIixcInNpemVcIixcInNoYXBlXCIsXCJraW5kXCIsXCJsYXlvdXRcIixcImhyZWZcIl0pO3JldHVybigwLGkuanN4KSh1LE9iamVjdC5hc3NpZ24oe2FzOmM/XCJhXCI6XCJidXR0b25cIixzaXplOm8sc2hhcGU6YSxraW5kOmwsbGF5b3V0OnN9LGQse2NoaWxkcmVuOnQ/KDAsaS5qc3gpKGYsT2JqZWN0LmFzc2lnbih7YWxpZ25JdGVtczpcImNlbnRlclwiLGp1c3RpZnlDb250ZW50OlwiY2VudGVyXCJ9LHtjaGlsZHJlbjp0fSkpOm59KSl9O2NvbnN0IHU9YS5kZWZhdWx0LmJ1dHRvbmBcbiAgLyogRGVmYXVsdCB2YWx1ZXMgdGhhdCBnZXQgb3ZlcnJpZGRlbiBieSB2YXJpYW50cyAqL1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRCYWNrZ3JvdW5kfTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0QmFja2dyb3VuZH07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5VGV4dH07XG5cbiAgLyogSW5qZWN0IHZhcmlhbnRzICovXG4gICR7KDAscy5nZXRWYXJpYW50Q1NTKShjLnZhcmlhbnRzLGMuVmFyaWFudC5zaXplKX1cbiAgJHsoMCxzLmdldFZhcmlhbnRDU1MpKGMudmFyaWFudHMsYy5WYXJpYW50LnNoYXBlKX1cbiAgJHsoMCxzLmdldFZhcmlhbnRDU1MpKGMudmFyaWFudHMsYy5WYXJpYW50LmtpbmQpfVxuICAkeygwLHMuZ2V0VmFyaWFudENTUykoYy52YXJpYW50cyxjLlZhcmlhbnQubGF5b3V0KX1cblxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgb3V0bGluZTogbm9uZTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LnVpfTtcbiAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ib2xkfTtcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbik7XG5cbiAgJjpub3QoOmRpc2FibGVkKSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgJjpkaXNhYmxlZCxcbiAgJjphY3RpdmU6ZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0UGxhY2Vob2xkZXJ9O1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIH1cbmAsZj0oMCxhLmRlZmF1bHQpKGwuQm94KWBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4LnhzbWFsbH1gfTtcbmA7dC5CdXR0b25QcmltYXJ5PWU9PigwLGkuanN4KSh0LkJ1dHRvbixPYmplY3QuYXNzaWduKHt9LGUse2tpbmQ6XCJwcmltYXJ5XCJ9KSksdC5CdXR0b25TZWNvbmRhcnk9ZT0+KDAsaS5qc3gpKHQuQnV0dG9uLE9iamVjdC5hc3NpZ24oe30sZSx7a2luZDpcInNlY29uZGFyeVwifSkpLHQuQnV0dG9uVGV4dE9ubHk9ZT0+KDAsaS5qc3gpKHQuQnV0dG9uLE9iamVjdC5hc3NpZ24oe30sZSx7a2luZDpcInRleHRPbmx5XCJ9KSl9LDYxMjY6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudmFyaWFudHM9dC5CdXR0b25TaGFwZT10LkJ1dHRvbkxheW91dD10LkJ1dHRvblNpemU9dC5CdXR0b25LaW5kPXQuVmFyaWFudD12b2lkIDA7Y29uc3Qgcj1uKDc1MTgpO3QuVmFyaWFudD17c2hhcGU6XCJzaGFwZVwiLHNpemU6XCJzaXplXCIsa2luZDpcImtpbmRcIixsYXlvdXQ6XCJsYXlvdXRcIn0sdC5CdXR0b25LaW5kPXtwcmltYXJ5OlwicHJpbWFyeVwiLHNlY29uZGFyeTpcInNlY29uZGFyeVwiLHRleHRPbmx5OlwidGV4dE9ubHlcIn0sdC5CdXR0b25TaXplPXtzbWFsbDpcInNtYWxsXCIsYmFzZTpcImJhc2VcIixsYXJnZTpcImxhcmdlXCJ9LHQuQnV0dG9uTGF5b3V0PXtmaXQ6XCJmaXRcIixmdWxsOlwiZnVsbFwifSx0LkJ1dHRvblNoYXBlPXtzcXVhcmU6XCJzcXVhcmVcIixwaWxsOlwicGlsbFwifSx0LnZhcmlhbnRzPXtbdC5WYXJpYW50LnNpemVdOntbdC5CdXR0b25TaXplLmJhc2VdOnIuY3NzYFxuICAgICAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gJHtlLnB4LmxhcmdlfWB9O1xuICAgICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICAgIGAsW3QuQnV0dG9uU2l6ZS5zbWFsbF06ci5jc3NgXG4gICAgICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnhzbWFsbH0gJHtlLnB4LmJhc2V9YH07XG4gICAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuc21hbGx9O1xuICAgIGAsW3QuQnV0dG9uU2l6ZS5sYXJnZV06ci5jc3NgXG4gICAgICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LmJhc2V9ICR7ZS5weC54bGFyZ2V9YH07XG4gICAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUubGFyZ2V9O1xuICAgIGB9LFt0LlZhcmlhbnQuc2hhcGVdOntbdC5CdXR0b25TaGFwZS5zcXVhcmVdOnIuY3NzYFxuICAgICAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICAgIGAsW3QuQnV0dG9uU2hhcGUucGlsbF06ci5jc3NgXG4gICAgICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5waWxsfTtcbiAgICBgfSxbdC5WYXJpYW50LmxheW91dF06e1t0LkJ1dHRvbkxheW91dC5maXRdOnIuY3NzYFxuICAgICAgd2lkdGg6IGZpdC1jb250ZW50O1xuICAgIGAsW3QuQnV0dG9uTGF5b3V0LmZ1bGxdOnIuY3NzYFxuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgYH0sW3QuVmFyaWFudC5raW5kXTp7W3QuQnV0dG9uS2luZC5wcmltYXJ5XTpyLmNzc2BcbiAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnl9O1xuICAgICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlIb3Zlcn07XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeUFjdGl2ZX07XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlGb2N1c2VkfTtcbiAgICAgIH1cbiAgICBgLFt0LkJ1dHRvbktpbmQuc2Vjb25kYXJ5XTpyLmNzc2BcbiAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeX07XG4gICAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeX07XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kU2Vjb25kYXJ5VGV4dH07XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRTZWNvbmRhcnlIb3Zlcn07XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kU2Vjb25kYXJ5QWN0aXZlfTtcbiAgICAgIH1cblxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kU2Vjb25kYXJ5Rm9jdXNlZH07XG4gICAgICB9XG4gICAgYCxbdC5CdXR0b25LaW5kLnRleHRPbmx5XTpyLmNzc2BcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIG9wYWNpdHk6IDAuODtcbiAgICAgIH1cblxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gICAgICB9XG4gICAgYH19fSw0MTMwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig0MjQ5KSx0KSxvKG4oNjEyNiksdCl9LDM5MTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2FyZENvbnRhaW5lcj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9cihuKDc1MTgpKSxhPW4oOTUwNyksbD1uKDEzMzUpO3QuQ2FyZENvbnRhaW5lcj1lPT4oMCxvLmpzeCkocyxPYmplY3QuYXNzaWduKHtzdHlsZTp7bWF4SGVpZ2h0OmUubWF4SGVpZ2h0LG92ZXJmbG93WTpcImF1dG9cIn0saWQ6XCJjYXJkLWNvbnRhaW5lclwiLFwiZGF0YS10ZXN0aWRcIjpcImNhcmQtY29udGFpbmVyXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoYyx7Y2hpbGRyZW46ZS5jaGlsZHJlbn0pfSkpO2NvbnN0IHM9KDAsaS5kZWZhdWx0KShsLkJveClgXG4gIGRpc3BsYXk6IGJsb2NrO1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDN9O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ1fTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfVxuICAgICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9IDBweDtcbiAgd2lkdGg6IDEwMCU7XG4gICR7YS5NaXhpbnMuc2Nyb2xsYmFyLmJhc2V9O1xuICBnYXA6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG5gLGM9aS5kZWZhdWx0LmRpdmBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH0gJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH0gMHB4XG4gICAgJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgd2lkdGg6IDEwMCU7XG5gfSwxMjQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29sbGFwc2libGVDYXJkU3RhdGVsZXNzPXQuQ29sbGFwc2libGVDYXJkPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1uKDY2ODkpLGE9cihuKDc1MTgpKSxsPW4oMzEzNikscz1uKDk2MzQpLGM9bigxMzM1KSx1PW4oMzkxMSksZj1uKDc3NjkpLGQ9big5NTA3KTt0LkNvbGxhcHNpYmxlQ2FyZD0oMCxpLmZvcndhcmRSZWYpKCgoZSxuKT0+e2NvbnN0W3IsYV09KDAsaS51c2VTdGF0ZSkoZS5leHBhbmRlZHx8ITEpO3JldHVybigwLG8uanN4KSh0LkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzcyxPYmplY3QuYXNzaWduKHt9LGUse3JlZjpuLGV4cGFuZGVkOnIsb25FeHBhbmQ6ZT0+YSghZSl9KSl9KSksdC5Db2xsYXBzaWJsZUNhcmQuZGlzcGxheU5hbWU9XCJDb2xsYXBzaWJsZUNhcmRcIix0LkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzcz0oMCxpLmZvcndhcmRSZWYpKCgoZSx0KT0+e3ZhciBuLHI7cmV0dXJuKDAsby5qc3hzKShwLE9iamVjdC5hc3NpZ24oe1wiZGF0YS10ZXN0aWRcIjpcImNvbGxhcHNpYmxlLWNhcmRcIn0se2NoaWxkcmVuOlsoMCxvLmpzeHMpKGcsT2JqZWN0LmFzc2lnbih7XCJhcmlhLWV4cGFuZGVkXCI6ZS5leHBhbmRlZCxcImRhdGEtdGVzdGlkXCI6XCJoZWFkaW5nLWNvbnRhaW5lclwiLHJlZjp0LHpJbmRleDpudWxsPT09KG49ZS5oZWFkZXJTZXR0aW5ncyl8fHZvaWQgMD09PW4/dm9pZCAwOm4uekluZGV4LGZpeGVkSGVhZGVyOm51bGw9PT0ocj1lLmhlYWRlclNldHRpbmdzKXx8dm9pZCAwPT09cj92b2lkIDA6ci5maXhlZEhlYWRlcixvbkNsaWNrOigpPT5lLm9uRXhwYW5kKGUuZXhwYW5kZWQpLHRhYkluZGV4OjAsb25LZXlEb3duOnQ9Pntzd2l0Y2godC5jb2RlKXtjYXNlXCJFbnRlclwiOmNhc2VcIlNwYWNlXCI6dC5wcmV2ZW50RGVmYXVsdCgpLGUub25FeHBhbmQoZS5leHBhbmRlZCl9fX0se2NoaWxkcmVuOlsoMCxvLmpzeCkoaCx7Y2hpbGRyZW46ZS50aXRsZX0pLCgwLG8uanN4cykoXCJkaXZcIixPYmplY3QuYXNzaWduKHtpZDpcImljb24tY29udGFpbmVyXCJ9LHtjaGlsZHJlbjpbdm9pZCAwIT09ZS5iYWRnZVRleHQmJigwLG8uanN4KShsLkJhZGdlLHtjb3VudDplLmJhZGdlVGV4dCxpZDpcImNvbGxhcHNpYmxlLWNhcmQtaGVhZGluZy1iYWRnZVwiLFwiZGF0YS10ZXN0aWRcIjpcImNvbGxhcHNpYmxlLWNhcmQtaGVhZGluZy1iYWRnZVwifSksKDAsby5qc3gpKHMuSWNvbix7aWNvbjplLmV4cGFuZGVkP1wiQ2hldnJvblVwSWNvblwiOlwiQ2hldnJvbkRvd25JY29uXCJ9KV19KSldfSkpLGUuZXhwYW5kZWQmJigwLG8uanN4KSh1LkNhcmRDb250YWluZXIsT2JqZWN0LmFzc2lnbih7bWF4SGVpZ2h0OmUubWF4SGVpZ2h0fHxcIm5vbmVcIn0se2NoaWxkcmVuOigwLG8uanN4KShcImRpdlwiLHtjaGlsZHJlbjplLmNoaWxkcmVufSl9KSldfSkpfSkpLHQuQ29sbGFwc2libGVDYXJkU3RhdGVsZXNzLmRpc3BsYXlOYW1lPVwiQ29sbGFwc2libGVDYXJkU3RhdGVsZXNzXCI7Y29uc3QgcD1hLmRlZmF1bHQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDEwMCU7XG5gLGg9KDAsYS5kZWZhdWx0KShmLlRleHQpYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgJHtkLk1peGlucy50ZXh0T3ZlcmZsb3d9O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuYCxnPSgwLGEuZGVmYXVsdCkoYy5Cb3gpYFxuICBwb3NpdGlvbjogJHsoe2ZpeGVkSGVhZGVyOmV9KT0+ZT9cInN0aWNreVwiOlwicmVsYXRpdmVcIn07XG4gIHRvcDogJHsoe2ZpeGVkSGVhZGVyOmV9KT0+ZT8wOnZvaWQgMH07XG4gIHotaW5kZXg6ICR7KHt6SW5kZXg6ZX0pPT5lfTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQzfTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNX07XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDV9O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBnYXA6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQuaGVhZGluZ307XG4gIG91dGxpbmU6IG5vbmU7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuICB3aWR0aDogMTAwJTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAjaWNvbi1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgfVxuXG4gICNjb2xsYXBzaWJsZS1jYXJkLWhlYWRpbmctYmFkZ2Uge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnl9O1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgfVxuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMn07XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNX07XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNX07XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJvcmRlck5ldXRyYWx9O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYm9yZGVyTmV1dHJhbH07XG4gIH1cbmB9LDc0MDE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDEyNCksdCl9LDkzMTg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ3VzdG9tQ29udGV4dE1lbnU9dC5DT05URVhUX01FTlVfQU5JTUFUSU9OX0RVUkFUSU9OPXQuUFJJT1JfQ09OVEVYVF9NRU5VX0NMQVNTPXQuQkFTRV9DT05URVhUX01FTlU9dC5BQ1RJVkVfQ09OVEVYVF9NRU5VX0NMQVNTPXQuQ09OVEVYVF9NRU5VX0ZSQU1FX0lEPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1uKDY2ODkpLGE9cihuKDc1MTgpKSxsPW4oNzY0MSkscz1uKDEzMzUpLGM9big5MzA2KSx1PW4oNzMzNiksZj1uKDQ3MjUpLGQ9big0NzQwKSxwPW4oNjQ0OSk7dC5DT05URVhUX01FTlVfRlJBTUVfSUQ9XCJjb250ZXh0X21lbnVfZnJhbWVcIix0LkFDVElWRV9DT05URVhUX01FTlVfQ0xBU1M9XCJhY3RpdmVfY29udGV4dF9tZW51XCIsdC5CQVNFX0NPTlRFWFRfTUVOVT1cImJhc2VfY29udGV4dF9tZW51XCIsdC5QUklPUl9DT05URVhUX01FTlVfQ0xBU1M9XCJwcmV2aW91c19jb250ZXh0X21lbnVcIix0LkNPTlRFWFRfTUVOVV9BTklNQVRJT05fRFVSQVRJT049MjAwLHQuQ3VzdG9tQ29udGV4dE1lbnU9KHttZW51VGVtcGxhdGU6ZSxvbkNsaWNrOm4saWNvbjpyLG9uTWVudVJlc2l6ZTphLG9uQ29udGV4dE1lbnVSZWFkeTpzLGlzV2luZG93czp2PSEwfSk9Pnt2YXIgbTtjb25zdCBDPSgwLGkudXNlUmVmKShudWxsKSxbeSx3XT0oMCxpLnVzZVN0YXRlKSghMSksW2IseF09KDAsaS51c2VTdGF0ZSkoe3dpZHRoOjE2MCxoZWlnaHQ6MTYwfSksW18sT109KDAsaS51c2VTdGF0ZSkoMCksW0wsRV09KDAsaS51c2VTdGF0ZSkoW10pLFtTLGpdPSgwLGkudXNlU3RhdGUpKCksW00sa109KDAsaS51c2VTdGF0ZSkoW10pLFtSLFBdPSgwLGkudXNlU3RhdGUpKGUubWFwKChlPT5lLmxhYmVsfHxcIlwiKSkpLFtJLEFdPSgwLGkudXNlU3RhdGUpKC0xKTsoMCxpLnVzZUVmZmVjdCkoKCgpPT57UChlLm1hcCgoZT0+ZS5sYWJlbHx8XCJcIikpKSxBKFIuZmluZEluZGV4KChlPT5lPT09UykpKX0pLFtlXSk7Y29uc3R7d2lkdGg6VCxoZWlnaHQ6SH09KDAsYy51c2VSZXNpemVDb250ZXh0TWVudSkoUykse2hhbmRsZU5hdmlnYXRlVG9TdWJtZW51OkIsaGFuZGxlTmF2aWdhdGVCYWNrVG9QYXJlbnQ6VixoYW5kbGVOYXZpZ2F0ZVRvQmFzZTpEfT0oMCxmLnVzZUNvbnRleHRNZW51TmF2aWdhdGlvbikoXyxPLE0sayxTLGoseCxBLEwsYSk7cmV0dXJuKDAsaS51c2VFZmZlY3QpKCgoKT0+e0UoKDAsdS5nZXRNZW51TmF2aWdhdGlvbk9yZGVyKShlKSksaih0LkJBU0VfQ09OVEVYVF9NRU5VKSxrKFtdKSx4KHt3aWR0aDpULGhlaWdodDpIfSl9KSxbZV0pLCgwLGQudXNlQ29udGV4dE1lbnVLZXlib2FyZE5hdmlnYXRpb24pKG51bGw9PT0obT1MLmZpbmQoKGU9PmUucGFyZW50TGFiZWw9PT1TKSkpfHx2b2lkIDA9PT1tP3ZvaWQgMDptLm1lbnVUZW1wbGF0ZSxNLFMsSSxBLG4sQixWLEQpLCgwLGkudXNlRWZmZWN0KSgoKCk9PntDLmN1cnJlbnQmJih5fHwocyYmcygpLHcoITApKSl9KSxbQy5jdXJyZW50XSksKDAsby5qc3gpKGgsT2JqZWN0LmFzc2lnbih7aWQ6dC5DT05URVhUX01FTlVfRlJBTUVfSUQsdHJhbnNpdGlvblNwZWVkOl8saXNXaW5kb3dzOnZ9LHtjaGlsZHJlbjpMLm1hcCgoKHtwYXJlbnRMYWJlbDplLG1lbnVUZW1wbGF0ZTppfSk9PigwLG8uanN4KShcImRpdlwiLE9iamVjdC5hc3NpZ24oe3JlZjplPT09Uz9DOnZvaWQgMH0se2NoaWxkcmVuOigwLG8uanN4cykoZyxPYmplY3QuYXNzaWduKHtjbGFzc05hbWU6KDAsdS5nZXRDbGFzc05hbWUpKGUsUyxNKSxhY3RpdmVNZW51V2lkdGg6Yi53aWR0aCx0cmFuc2l0aW9uU3BlZWQ6XyxpZDplfSx7Y2hpbGRyZW46W2UhPT10LkJBU0VfQ09OVEVYVF9NRU5VPygwLG8uanN4KShsLkN1c3RvbUNvbnRleHRNZW51SXRlbSx7dHlwZTpcInN1Ym1lbnVIZWFkZXJcIixsYWJlbDplLG9uQmFjazooKT0+VihlLFwiY2xpY2tcIiksb25DbG9zZTpELHNob3dTaG91bGRIb21lQnV0dG9uOk0uc2xpY2UoMikuaW5jbHVkZXMoZSl8fE0ubGVuZ3RoPj0yJiZTPT09ZSxzZWxlY3RlZDotMT09PUl9LGAke2V9LXN1Ym1lbnUtaGVhZGVyYCk6ciYmKDAsby5qc3gpKHAuUm9vdE1lbnVIZWFkZXIse2ljb246cn0pLGkubWFwKCgodCxyKT0+KDAsby5qc3gpKGwuQ3VzdG9tQ29udGV4dE1lbnVJdGVtLE9iamVjdC5hc3NpZ24oe29uQ2xpY2s6KCk9Pnt0Lmhhc1N1Yk1lbnU/Qih0LmxhYmVsfHxcIlwiKTpuKHQuZGF0YSksQSgtMil9fSx0LHtzdWJtZW51OnQuaGFzU3ViTWVudSxzZWxlY3RlZDpJPT09cn0pLGAke2V9LSR7dC5sYWJlbH0tJHtyfWApKSldfSkpfSksZSkpKX0pKX07Y29uc3QgaD1hLmRlZmF1bHQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1pbi13aWR0aDogZml0LWNvbnRlbnQ7XG4gIG1pbi1oZWlnaHQ6IGZpdC1jb250ZW50O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMX07XG4gIHRyYW5zaXRpb246ICR7KHt0cmFuc2l0aW9uU3BlZWQ6ZX0pPT5gYWxsICR7ZX1tcyBsaW5lYXJgfTtcbiAgYm9yZGVyOiAkeyh7dGhlbWU6ZX0pPT5gMXB4IHNvbGlkICR7ZS5wYWxldHRlLmJhY2tncm91bmQyfWB9O1xuICBib3JkZXItcmFkaXVzOiAkeyh7aXNXaW5kb3dzOmV9KT0+IWUmJlwiMTBweFwifTtcbmAsZz0oMCxhLmRlZmF1bHQpKHMuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMX07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9IDAgJHtlLnB4LnNtYWxsfSAwYH07XG5cbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKCR7KHthY3RpdmVNZW51V2lkdGg6ZX0pPT5gJHtlfXB4YH0pO1xuICB0cmFuc2l0aW9uOiAkeyh7dHJhbnNpdGlvblNwZWVkOmV9KT0+YGFsbCAke2V9bXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuNTgsIDEpYH07XG4gIG9wYWNpdHk6IDAlO1xuXG4gICYuYWN0aXZlX2NvbnRleHRfbWVudSB7XG4gICAgdHJhbnNmb3JtOiB1bnNldDtcbiAgICBvcGFjaXR5OiAxMDAlO1xuICB9XG5cbiAgJi5wcmV2aW91c19jb250ZXh0X21lbnUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XG4gICAgb3BhY2l0eTogMCU7XG4gIH1cbmB9LDc2NDE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ3VzdG9tQ29udGV4dE1lbnVJdGVtPXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1uKDM2MDApLGk9bigyMDgwKSxhPW4oOTA2OCksbD17bm9ybWFsOmkuTm9ybWFsQ3VzdG9tQ29udGV4dE1lbnVJdGVtLGNoZWNrYm94OmkuTm9ybWFsQ3VzdG9tQ29udGV4dE1lbnVJdGVtLHN1Ym1lbnU6aS5Ob3JtYWxDdXN0b21Db250ZXh0TWVudUl0ZW0sc2VwYXJhdG9yOm8uU2VwYXJhdG9yQ3VzdG9tQ29udGV4dE1lbnVJdGVtLHN1Ym1lbnVIZWFkZXI6YS5TdWJtZW51SGVhZGVyQ3VzdG9tQ29udGV4dE1lbnVJdGVtfTt0LkN1c3RvbUNvbnRleHRNZW51SXRlbT0oe3R5cGU6ZT1cIm5vcm1hbFwiLGljb246dCxsYWJlbDpuLGVuYWJsZWQ6bz0hMCxjaGVja2VkOmksc3VibWVudTphLHNob3dTaG91bGRIb21lQnV0dG9uOnMsb25DbGljazpjLG9uQ2xvc2U6dSxvbkJhY2s6ZixzZWxlY3RlZDpkfSk9Pntjb25zdCBwPWxbZV07bGV0IGg7c3dpdGNoKGUpe2Nhc2VcIm5vcm1hbFwiOmNhc2VcImNoZWNrYm94XCI6aD17dHlwZTplLGxhYmVsOm4saWNvbjp0LGVuYWJsZWQ6byxjaGVja2VkOmksc2VsZWN0ZWQ6ZH07YnJlYWs7Y2FzZVwic3VibWVudVwiOmg9e2xhYmVsOm4sZW5hYmxlZDpvLGNoZWNrZWQ6aSxzdWJtZW51OmEsc2VsZWN0ZWQ6ZH07YnJlYWs7Y2FzZVwic3VibWVudUhlYWRlclwiOmg9e2xhYmVsOm4sc2hvd1Nob3VsZEhvbWVCdXR0b246cyxvbkNsb3NlOnUsb25CYWNrOmYsc2VsZWN0ZWQ6ZH07YnJlYWs7Y2FzZVwic2VwYXJhdG9yXCI6aD17fX1yZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKHAsT2JqZWN0LmFzc2lnbih7fSxoLHtrZXk6bixvbkNsaWNrOmN9KSl9fSwyMDgwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk5vcm1hbEN1c3RvbUNvbnRleHRNZW51SXRlbT12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9cihuKDc1MTgpKSxhPW4oMTMzNSksbD1uKDc3NjkpLHM9big5NjM0KTt0Lk5vcm1hbEN1c3RvbUNvbnRleHRNZW51SXRlbT0oe3R5cGU6ZSxsYWJlbDp0LGVuYWJsZWQ6bj0hMCxjaGVja2VkOnIsc3VibWVudTppLG9uQ2xpY2s6YSxzZWxlY3RlZDpsfSk9PigwLG8uanN4KShjLHtjaGlsZHJlbjooMCxvLmpzeHMpKHUsT2JqZWN0LmFzc2lnbih7b25DbGljazpuP2E6dm9pZCAwLGVuYWJsZWQ6bi50b1N0cmluZygpLHNlbGVjdGVkOmx9LHtjaGlsZHJlbjpbXCJjaGVja2JveFwiPT09ZSYmKDAsby5qc3gpKGYsT2JqZWN0LmFzc2lnbih7c2lkZTpcImxlZnRcIn0se2NoaWxkcmVuOigwLG8uanN4KShkLHtpY29uOlwiQ2hlY2tJY29uXCIsZW5hYmxlZDpuLnRvU3RyaW5nKCksY2hlY2tlZDpyfSl9KSksKDAsby5qc3gpKGgsT2JqZWN0LmFzc2lnbih7c2l6ZTpcImJhc2VcIix3ZWlnaHQ6XCJub3JtYWxcIixlbmFibGVkOm59LHtjaGlsZHJlbjp0fSkpLGkmJigwLG8uanN4KShmLE9iamVjdC5hc3NpZ24oe3NpZGU6XCJyaWdodFwifSx7Y2hpbGRyZW46KDAsby5qc3gpKHAse2ljb246XCJDaGV2cm9uUmlnaHRJY29uXCIsZW5hYmxlZDpuLnRvU3RyaW5nKCl9KX0pKV19KSl9KTtjb25zdCBjPSgwLGkuZGVmYXVsdCkoYS5Cb3gpYFxuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4LnNtYWxsfSAwICR7ZS5weC5zbWFsbH1gfTtcbmAsdT0oMCxpLmRlZmF1bHQpKGEuQm94KWBcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMjhweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplLHNlbGVjdGVkOnQsZW5hYmxlZDpufSk9PlwiZmFsc2VcIiE9PW4mJnQ/ZS5wYWxldHRlLmJhY2tncm91bmQzOlwidHJhbnNwYXJlbnRcIn07XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmUsZW5hYmxlZDp0fSk9PlwiZmFsc2VcIiE9PXQ/ZS5wYWxldHRlLmJhY2tncm91bmQzOlwidHJhbnNwYXJlbnRcIn07XG4gIH1cbmAsZj0oMCxpLmRlZmF1bHQpKGEuQm94KWBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmUsc2lkZTp0fSk9PlwicmlnaHRcIj09PXQ/YDAgJHtlLnB4LnNtYWxsfSAwIDBgOmAwIDAgMCAke2UucHguc21hbGx9YH07XG4gIG1hcmdpbi1sZWZ0OiAkeyh7c2lkZTplfSk9PlwicmlnaHRcIj09PWU/XCJhdXRvXCI6MH07XG5gLGQ9KDAsaS5kZWZhdWx0KShzLkljb24pYFxuICBzdmcgcGF0aCB7XG4gICAgZmlsbDogJHsoe3RoZW1lOmUsZW5hYmxlZDp0LGNoZWNrZWQ6bn0pPT5cInRydWVcIj09PXQ/bj9lLnBhbGV0dGUudGV4dERlZmF1bHQ6XCJ0cmFuc3BhcmVudFwiOmUucGFsZXR0ZS50ZXh0SW5hY3RpdmV9O1xuICAgIHN0cm9rZS13aWR0aDogMS4yNTtcbiAgfVxuYCxwPSgwLGkuZGVmYXVsdCkocy5JY29uKWBcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG5cbiAgc3ZnIHBhdGgge1xuICAgIGZpbGw6ICR7KHt0aGVtZTplLGVuYWJsZWQ6dH0pPT5cInRydWVcIj09PXQ/ZS5wYWxldHRlLnRleHREZWZhdWx0OmUucGFsZXR0ZS50ZXh0SW5hY3RpdmV9O1xuICAgIHN0cm9rZS13aWR0aDogMS4yNTtcbiAgfVxuYCxoPSgwLGkuZGVmYXVsdCkobC5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplLGVuYWJsZWQ6dH0pPT50P2UucGFsZXR0ZS50ZXh0RGVmYXVsdDplLnBhbGV0dGUudGV4dEluYWN0aXZlfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4Lnh4eGxhcmdlfSAwICR7ZS5weC5zbWFsbH1gfTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuYH0sNjQ0OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Sb290TWVudUhlYWRlcj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9cihuKDc1MTgpKSxhPW4oMTMzNSksbD1uKDM2MDApO3QuUm9vdE1lbnVIZWFkZXI9KHtpY29uOmV9KT0+KDAsby5qc3hzKShvLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsby5qc3gpKHMse2NoaWxkcmVuOmV9KSwoMCxvLmpzeCkobC5TZXBhcmF0b3JDdXN0b21Db250ZXh0TWVudUl0ZW0se30pXX0pO2NvbnN0IHM9KDAsaS5kZWZhdWx0KShhLkJveClgXG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDI4cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gMCAwIDAgJHtlLnB4LmxhcmdlfWB9O1xuYH0sMzYwMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TZXBhcmF0b3JDdXN0b21Db250ZXh0TWVudUl0ZW09dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPW4oMTMzNSksYT1yKG4oNzUxOCkpO3QuU2VwYXJhdG9yQ3VzdG9tQ29udGV4dE1lbnVJdGVtPSgpPT4oMCxvLmpzeCkobCxPYmplY3QuYXNzaWduKHtcImRhdGEtdGVzdGlkXCI6XCJjdXN0b20tY29udGV4dC1tZW51LXNlcGFyYXRvclwifSx7Y2hpbGRyZW46KDAsby5qc3gpKHMse30pfSkpO2NvbnN0IGw9KDAsYS5kZWZhdWx0KShpLkJveClgXG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfSAwO1xuYCxzPWEuZGVmYXVsdC5ocmBcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMXB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMn07XG5gfSw5MDY4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlN1Ym1lbnVIZWFkZXJDdXN0b21Db250ZXh0TWVudUl0ZW09dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPW4oNjY4OSksYT1yKG4oNzUxOCkpLGw9big5NjM0KSxzPW4oNzc2OSksYz1uKDEzMzUpLHU9bigzNjAwKTt0LlN1Ym1lbnVIZWFkZXJDdXN0b21Db250ZXh0TWVudUl0ZW09KHtsYWJlbDplLHNob3dTaG91bGRIb21lQnV0dG9uOnQsb25DbG9zZTpuLG9uQmFjazpyLHNlbGVjdGVkOmF9KT0+e2NvbnN0IGw9KDAsaS51c2VDYWxsYmFjaykoKGU9PntlLnN0b3BQcm9wYWdhdGlvbigpLG51bGw9PXJ8fHIoKX0pLFtyXSkscz0oMCxpLnVzZUNhbGxiYWNrKSgoZT0+e2Uuc3RvcFByb3BhZ2F0aW9uKCksbnVsbD09bnx8bigpfSksW25dKTtyZXR1cm4oMCxvLmpzeHMpKG8uRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxvLmpzeHMpKGYse2NoaWxkcmVuOlsoMCxvLmpzeCkoZCxPYmplY3QuYXNzaWduKHtzaWRlOlwibGVmdFwiLHNlbGVjdGVkOmF9LHtjaGlsZHJlbjooMCxvLmpzeCkocCx7aWNvbjpcIkFycm93TGVmdEljb25cIixvbkNsaWNrOmwsaWQ6XCJiYWNrLWljb25cIixzZWxlY3RlZDphfSl9KSksKDAsby5qc3gpKGgsT2JqZWN0LmFzc2lnbih7c2l6ZTpcImJhc2VcIix3ZWlnaHQ6XCJub3JtYWxcIn0se2NoaWxkcmVuOmV9KSksdCYmKDAsby5qc3gpKGQsT2JqZWN0LmFzc2lnbih7c2lkZTpcInJpZ2h0XCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoZyx7aWNvbjpcIkNyb3NzMUljb25cIixvbkNsaWNrOnMsaWQ6XCJjbG9zZS1pY29uXCJ9KX0pKV19KSwoMCxvLmpzeCkodS5TZXBhcmF0b3JDdXN0b21Db250ZXh0TWVudUl0ZW0se30pXX0pfTtjb25zdCBmPSgwLGEuZGVmYXVsdCkoYy5Cb3gpYFxuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAyOHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4LnNtYWxsfSAwICR7ZS5weC5zbWFsbH1gfTtcbmAsZD0oMCxhLmRlZmF1bHQpKGMuQm94KWBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmUsc2lkZTp0fSk9PlwicmlnaHRcIj09PXQ/YDAgJHtlLnB4LnNtYWxsfSAwIDBgOmAwIDAgMCAke2UucHguc21hbGx9YH07XG4gIG1hcmdpbi1sZWZ0OiAkeyh7c2lkZTplfSk9PlwicmlnaHRcIj09PWU/XCJhdXRvXCI6MH07XG5gLHA9KDAsYS5kZWZhdWx0KShsLkljb24pYFxuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHtzZWxlY3RlZDplLHRoZW1lOnR9KT0+ZT90LnBhbGV0dGUuYmFja2dyb3VuZDM6XCJ0cmFuc3BhcmVudFwifTtcbiAgY29sb3I6ICR7KHt0aGVtZTplLHNlbGVjdGVkOnR9KT0+dD9lLnBhbGV0dGUudGV4dERlZmF1bHQ6ZS5wYWxldHRlLnRleHRIZWxwfTtcbiAgc3Ryb2tlLXdpZHRoOiAxLjI1O1xuXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICB9XG5gLGg9KDAsYS5kZWZhdWx0KShzLlRleHQpYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRIZWxwfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4Lnh4eGxhcmdlfSAwICR7ZS5weC5zbWFsbH1gfTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuYCxnPSgwLGEuZGVmYXVsdCkobC5JY29uKWBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBzdHJva2Utd2lkdGg6IDEuMjU7XG5cbiAgJjpob3ZlciB7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gIH1cbmB9LDk1MDE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDkzMTgpLHQpfSw0NzQwOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUNvbnRleHRNZW51S2V5Ym9hcmROYXZpZ2F0aW9uPXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1uKDkzMTgpO3QudXNlQ29udGV4dE1lbnVLZXlib2FyZE5hdmlnYXRpb249KGUsdCxuLGksYSxsLHMsYyx1KT0+e2NvbnN0IGY9dD0+e3ZhciBuLHIsbztyZXR1cm5cInNlcGFyYXRvclwiPT09KG51bGw9PT0obj1lW3RdKXx8dm9pZCAwPT09bj92b2lkIDA6bi50eXBlKXx8ITE9PT0obnVsbD09PShyPWVbdF0pfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmVuYWJsZWQpfHwhMT09PShudWxsPT09KG89ZVt0XSl8fHZvaWQgMD09PW8/dm9pZCAwOm8udmlzaWJsZSl9LGQ9KDAsci51c2VDYWxsYmFjaykoKCgpPT57YSgodD0+e2xldCBuPXQ7ZG97aWYobj09PShudWxsPT1lP3ZvaWQgMDplLmxlbmd0aCktMSlicmVhaztuKz0xfXdoaWxlKGYobikpO3JldHVybiBmKG4pP3Q6bn0pKX0pLFthLGVdKSxwPSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+e2EoKGU9PntsZXQgdD1lO2Rve2lmKG49PT1vLkJBU0VfQ09OVEVYVF9NRU5VJiYwPT09dHx8LTE9PT10KWJyZWFrO3QtPTF9d2hpbGUoZih0KSk7cmV0dXJuIHR9KSl9KSxbYSxlXSksaD0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9PnthKG49PT1vLkJBU0VfQ09OVEVYVF9NRU5VPzA6LTEpfSksW2Esbl0pLGc9KDAsci51c2VDYWxsYmFjaykoKCgpPT57YSgodD0+e2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+PXQ7bi0tKWlmKCFmKG4pKXJldHVybiBuO3JldHVybiB0fSkpfSksW251bGw9PWU/dm9pZCAwOmUubGVuZ3RoLGFdKSx2PSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+e3ZhciB0LHI7aWYobnVsbD09PSh0PWVbaV0pfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmhhc1N1Yk1lbnUpcygobnVsbD09PShyPWVbaV0pfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmxhYmVsKXx8XCJcIik7ZWxzZXtpZigtMT09PWkpcmV0dXJuIHZvaWQgYyhuLFwia2V5Ym9hcmRcIik7bChlW2ldLmRhdGEpfWEoLTEpfSksW2EsbCxzLGUsaSxjLG5dKSxtPSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+e3ZhciB0LG47KG51bGw9PT0odD1lW2ldKXx8dm9pZCAwPT09dD92b2lkIDA6dC5oYXNTdWJNZW51KSYmKHMoKG51bGw9PT0obj1lW2ldKXx8dm9pZCAwPT09bj92b2lkIDA6bi5sYWJlbCl8fFwiXCIpLGEoLTEpKX0pLFthLHMsZSxpXSksQz0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9PnsodC5zbGljZSgxKS5pbmNsdWRlcyhuKXx8KG51bGw9PXQ/dm9pZCAwOnQubGVuZ3RoKT49MSkmJmMobixcImtleWJvYXJkXCIpfSksW2MsdCxuXSkseT0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9Pnt0LnNsaWNlKDIpLmluY2x1ZGVzKG4pfHwobnVsbD09dD92b2lkIDA6dC5sZW5ndGgpPj0yP3UoKTpsKHt0eXBlOlwiY2xvc2VcIn0pfSksW3UsdCxuXSk7KDAsci51c2VFZmZlY3QpKCgoKT0+e2NvbnN0IGU9ZT0+e3N3aXRjaChlLmtleSl7Y2FzZVwiQXJyb3dEb3duXCI6ZCgpO2JyZWFrO2Nhc2VcIkFycm93VXBcIjpwKCk7YnJlYWs7Y2FzZVwiSG9tZVwiOmNhc2VcIlBhZ2VVcFwiOmgoKTticmVhaztjYXNlXCJFbmRcIjpjYXNlXCJQYWdlRG93blwiOmcoKTticmVhaztjYXNlXCJFbnRlclwiOnYoKTticmVhaztjYXNlXCJBcnJvd1JpZ2h0XCI6bSgpO2JyZWFrO2Nhc2VcIkFycm93TGVmdFwiOkMoKTticmVhaztjYXNlXCJFc2NhcGVcIjp5KCl9fTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixlKSwoKT0+e2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZSl9fSksW2QscCxoLGcsdixtLEMseV0pfX0sNDcyNTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VDb250ZXh0TWVudU5hdmlnYXRpb249dm9pZCAwO2NvbnN0IHI9big2Njg5KSxvPW4oOTMxOCk7dC51c2VDb250ZXh0TWVudU5hdmlnYXRpb249KGUsdCxuLGksYSxsLHMsYyx1LGYpPT57Y29uc3QgZD0oMCxyLnVzZUNhbGxiYWNrKSgoZT0+e2NvbnN0IHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSksbj1udWxsPT10P3ZvaWQgMDp0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybntoZWlnaHQ6KG51bGw9PW4/dm9pZCAwOm4uaGVpZ2h0KXx8MCx3aWR0aDoobnVsbD09bj92b2lkIDA6bi53aWR0aCl8fDB9fSksW10pO3JldHVybntoYW5kbGVOYXZpZ2F0ZVRvU3VibWVudTooMCxyLnVzZUNhbGxiYWNrKSgocj0+e2NvbnN0e2hlaWdodDpjLHdpZHRoOnV9PWQocik7ZiYmZihjLHUpLGV8fHQoby5DT05URVhUX01FTlVfQU5JTUFUSU9OX0RVUkFUSU9OKSxzKHt3aWR0aDp1LGhlaWdodDpjfSksbChyKSxpKFsuLi5uLGFdKX0pLFthLG4saSxmLHQsZF0pLGhhbmRsZU5hdmlnYXRlQmFja1RvUGFyZW50OigwLHIudXNlQ2FsbGJhY2spKCgoZSx0PVwiY2xpY2tcIik9PntpZihmKXtjb25zdCBlPTE9PT1uLmxlbmd0aD9vLkJBU0VfQ09OVEVYVF9NRU5VOm5bbi5sZW5ndGgtMV0se2hlaWdodDp0LHdpZHRoOnJ9PWQoZSk7Zih0LHIpfWNvbnN0IHI9bixhPXIucG9wKCkscz11LmZpbmQoKGU9PmUucGFyZW50TGFiZWw9PT1hKSk7bChhKSxpKHIpLGMoXCJrZXlib2FyZFwiPT09dD8obnVsbD09cz92b2lkIDA6cy5tZW51VGVtcGxhdGUuZmluZEluZGV4KCh0PT50LmxhYmVsPT09ZSkpKXx8MDotMSl9KSxbbixpLGMsZCxmLHVdKSxoYW5kbGVOYXZpZ2F0ZVRvQmFzZTooMCxyLnVzZUNhbGxiYWNrKSgoKCk9PntpZihmKXtjb25zdHtoZWlnaHQ6ZSx3aWR0aDp0fT1kKG8uQkFTRV9DT05URVhUX01FTlUpO2YoZSx0KX1sKG8uQkFTRV9DT05URVhUX01FTlUpLGkoW10pLGMoLTEpfSksW2wsaSxjLGQsZl0pfX19LDkzMDY6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlUmVzaXplQ29udGV4dE1lbnU9dm9pZCAwO2NvbnN0IHI9big2Njg5KSxvPW4oOTMxOCk7dC51c2VSZXNpemVDb250ZXh0TWVudT1lPT57Y29uc3RbdCxuXT0oMCxyLnVzZVN0YXRlKSh7aGVpZ2h0OjE2MCx3aWR0aDoxNjB9KTtyZXR1cm4oMCxyLnVzZUVmZmVjdCkoKCgpPT57Y29uc3QgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSxyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG8uQ09OVEVYVF9NRU5VX0ZSQU1FX0lEKTtpZighdClyZXR1cm47Y29uc3QgaT1uZXcgUmVzaXplT2JzZXJ2ZXIoKGU9Pntmb3IoY29uc3QgdCBvZiBlKXtjb25zdHt3aWR0aDplLGhlaWdodDpvfT10LnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyJiYoci5zdHlsZS5oZWlnaHQ9YCR7b31weGAsci5zdHlsZS53aWR0aD1gJHtlfXB4YCxuKHt3aWR0aDplLGhlaWdodDpvfSkpfX0pKTtyZXR1cm4gaS5vYnNlcnZlKHQpLCgpPT57aS51bm9ic2VydmUodCl9fSksW2VdKSx0fX0sNzMzNjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5nZXRNZW51TmF2aWdhdGlvbk9yZGVyPXQuZ2V0Q2xhc3NOYW1lPXZvaWQgMDtjb25zdCByPW4oOTMxOCk7dC5nZXRDbGFzc05hbWU9KGUsdCxuKT0+dD09PWU/ci5BQ1RJVkVfQ09OVEVYVF9NRU5VX0NMQVNTOm4uaW5jbHVkZXMoZSk/ci5QUklPUl9DT05URVhUX01FTlVfQ0xBU1M6XCJcIix0LmdldE1lbnVOYXZpZ2F0aW9uT3JkZXI9ZT0+e2lmKCFlKXJldHVybltdO2NvbnN0IHQ9W3twYXJlbnRMYWJlbDpyLkJBU0VfQ09OVEVYVF9NRU5VLHRlbXBsYXRlOmV9XSxuPVtdO2Zvcig7dC5sZW5ndGg7KXtjb25zdHt0ZW1wbGF0ZTplLHBhcmVudExhYmVsOnJ9PXQucG9wKCk7ZS5mb3JFYWNoKCgoe3N1Ym1lbnU6bixsYWJlbDpyfSxvKT0+e24mJih0LnB1c2goe3BhcmVudExhYmVsOnJ8fFwiXCIsdGVtcGxhdGU6bn0pLGRlbGV0ZSBlW29dLnN1Ym1lbnUsZVtvXS5oYXNTdWJNZW51PSEwKX0pKSxuLnB1c2goe3BhcmVudExhYmVsOnIsbWVudVRlbXBsYXRlOmV9KX1yZXR1cm4gbn19LDk2NDQ6KGUsdCk9Pnt2YXIgbjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkV4cGFuZERpcmVjdGlvbj12b2lkIDAsKG49dC5FeHBhbmREaXJlY3Rpb258fCh0LkV4cGFuZERpcmVjdGlvbj17fSkpW24uVXA9MF09XCJVcFwiLG5bbi5Eb3duPTFdPVwiRG93blwifSw0MDIxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkV4cGFuZGFibGVCdXR0b249dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPW4oNjY4OSksYT1uKDQxMzApLGw9cihuKDc1MTgpKSxzPW4oOTYzNCksYz1uKDkxNDEpLHU9bigzMDMwKSxmPW4oMTMzNSksZD1uKDk2NDQpO3QuRXhwYW5kYWJsZUJ1dHRvbj1lPT57dmFyIHQsbixyLGwscyxwO2NvbnN0W3csYl09KDAsaS51c2VTdGF0ZSkoe3Nob3c6ITEscmVxdWVzdGVkQnlDb2xsYXBzZTohMX0pLHg9e3NpemU6ZS5zaXplLGtpbmQ6ZS5raW5kLGRpc2FibGVkOmUuZGlzYWJsZWQsdGFiSW5kZXg6ZS50YWJJbmRleH0sXz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse3NoYXBlOmEuQnV0dG9uU2hhcGUuc3F1YXJlLFwiYXJpYS1sYWJlbFwiOm51bGwhPT0odD1lW1wiYXJpYS1sYWJlbFwiXSkmJnZvaWQgMCE9PXQ/dDpgUHJpbWFyeSBCdXR0b24gJHtlLnRpdGxlfWB9KSxPPW51bGwhPT0obj1lLmV4cGFuZERpcmVjdGlvbikmJnZvaWQgMCE9PW4/bjpkLkV4cGFuZERpcmVjdGlvbi5Eb3duO3JldHVybigwLGkudXNlRWZmZWN0KSgoKCk9PntpZighdy5yZXF1ZXN0ZWRCeUNvbGxhcHNlKXJldHVybjtjb25zdCBlPXNldFRpbWVvdXQoKCgpPT5iKHtyZXF1ZXN0ZWRCeUNvbGxhcHNlOiExLHNob3c6ITF9KSksMjAwKTtyZXR1cm4oKT0+Y2xlYXJUaW1lb3V0KGUpfSksW3cucmVxdWVzdGVkQnlDb2xsYXBzZV0pLCgwLG8uanN4cykoeSx7Y2hpbGRyZW46WygwLG8uanN4cykoQyx7Y2hpbGRyZW46WygwLG8uanN4KShnLE9iamVjdC5hc3NpZ24oe30sXyx7Y2hpbGRyZW46KDAsby5qc3gpKHYse2NoaWxkcmVuOm51bGwhPT0ocj1lLmNoaWxkcmVuKSYmdm9pZCAwIT09cj9yOl8udGl0bGV9KX0pKSxlLnNlY29uZGFyeUJ1dHRvbnMmJmUuc2Vjb25kYXJ5QnV0dG9ucy5sZW5ndGg+MCYmKDAsby5qc3gpKGYuQm94LE9iamVjdC5hc3NpZ24oe2lkOlwiZHJvcGRvd24tY29udGFpbmVyXCJ9LHtjaGlsZHJlbjooMCxvLmpzeHMpKG0sT2JqZWN0LmFzc2lnbih7fSx4LHtyb2xlOlwiY29tYm9ib3hcIixvbkNsaWNrOigpPT57dy5yZXF1ZXN0ZWRCeUNvbGxhcHNlfHxiKHtyZXF1ZXN0ZWRCeUNvbGxhcHNlOiExLHNob3c6IXcuc2hvd30pfSxcImFyaWEtbGFiZWxcIjpcIkV4cGFuZCBTZWNvbmRhcnkgQnV0dG9ucyBQYW5lbFwiLFwiYXJpYS1leHBhbmRlZFwiOncuc2hvd30se2NoaWxkcmVuOltPPT09ZC5FeHBhbmREaXJlY3Rpb24uRG93biYmKDAsby5qc3gpKGgse2tpbmQ6bnVsbCE9PShsPWUua2luZCkmJnZvaWQgMCE9PWw/bDphLkJ1dHRvbktpbmQucHJpbWFyeSxpY29uOlwiQ2FyZXREb3duSWNvblwifSksTz09PWQuRXhwYW5kRGlyZWN0aW9uLlVwJiYoMCxvLmpzeCkoaCx7a2luZDpudWxsIT09KHM9ZS5raW5kKSYmdm9pZCAwIT09cz9zOmEuQnV0dG9uS2luZC5wcmltYXJ5LGljb246XCJDYXJldFVwSWNvblwifSldfSkpfSkpXX0pLGUuc2Vjb25kYXJ5QnV0dG9ucyYmZS5zZWNvbmRhcnlCdXR0b25zLmxlbmd0aD4wJiYoMCxvLmpzeCkoYy5BbmltYXRlUHJlc2VuY2Use2NoaWxkcmVuOncuc2hvdyYmKDAsby5qc3gpKHUuRXhwYW5kYWJsZVBhbmVsLHtleHBhbmREaXJlY3Rpb246TyxzZWNvbmRhcnlCdXR0b25zOm51bGwhPT0ocD1lLnNlY29uZGFyeUJ1dHRvbnMpJiZ2b2lkIDAhPT1wP3A6W10sc3RyZXRjaDplLnN0cmV0Y2hFeHBhbmRhYmxlUGFuZWwsY2xvc2VQYW5lbE9uU2Vjb25kYXJ5QnV0dG9uQ2xpY2s6ZS5jbG9zZVBhbmVsT25TZWNvbmRhcnlCdXR0b25DbGljayxvbkNvbGxhcHNlUmVxdWVzdDooKT0+Yih7c2hvdzohMSxyZXF1ZXN0ZWRCeUNvbGxhcHNlOiEwfSksYnV0dG9uU2l6ZTplLnNpemUsZG9jdW1lbnQ6ZS5kb2N1bWVudH0pfSldfSl9O2NvbnN0IHA9e1thLkJ1dHRvbktpbmQucHJpbWFyeV06ZT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeVRleHQsW2EuQnV0dG9uS2luZC5zZWNvbmRhcnldOmU9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeVRleHQsW2EuQnV0dG9uS2luZC50ZXh0T25seV06ZT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fSxoPSgwLGwuZGVmYXVsdCkocy5JY29uKWBcbiAgc3ZnIHBhdGgge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZSxraW5kOnR9KT0+cFt0XShlKX07XG4gIH1cbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC51aX07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQuYm9sZH07XG5gLGc9KDAsbC5kZWZhdWx0KShhLkJ1dHRvbilgXG4gIG1hcmdpbi1yaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuYCx2PSgwLGwuZGVmYXVsdCkoZi5Cb3gpYFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgZGlzcGxheTogYmxvY2s7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5gLG09KDAsbC5kZWZhdWx0KShhLkJ1dHRvbilgXG4gIHdpZHRoOiAke2U9PmUudGhlbWUucHgueHhsYXJnZX07XG4gIHBhZGRpbmc6IDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuYCxDPWwuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gLHk9bC5kZWZhdWx0LmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5gfSwyMTI4OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnNldHVwRXhwYW5kYWJsZVBhbmVsPXZvaWQgMDtjb25zdCByPW4oOTY0NCk7dC5zZXR1cEV4cGFuZGFibGVQYW5lbD0oZSx0LG49ITEpPT57aWYoIWV8fDA9PT1lLmNoaWxkTm9kZXMubGVuZ3RoKXJldHVybjtjb25zdCBvPWUucGFyZW50RWxlbWVudCxpPW51bGw9PW8/dm9pZCAwOm8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFpKXJldHVybjtjb25zdCBsPWEuaGVpZ2h0LHM9YS53aWR0aDw9aS53aWR0aHx8bj9hLndpZHRoOmkud2lkdGgsYz1pLngrcz5kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRofHxzPGkud2lkdGg7ZS5zdHlsZS53aWR0aD1gJHtzfXB4YCxlLnN0eWxlLm9wYWNpdHk9XCIxXCIsYz9lLnN0eWxlLnJpZ2h0PVwiMHB4XCI6ZS5zdHlsZS5sZWZ0PVwiMHB4XCIsdD09PXIuRXhwYW5kRGlyZWN0aW9uLkRvd24mJihlLnN0eWxlLnRvcD1gJHtpLmhlaWdodH1weGApLHQ9PT1yLkV4cGFuZERpcmVjdGlvbi5VcCYmKGUuc3R5bGUudG9wPS0xKmwrXCJweFwiKX19LDMwMzA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRXhwYW5kYWJsZVBhbmVsPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1yKG4oNzUxOCkpLGE9big5MTQxKSxsPW4oNDEzMCkscz1uKDEzMzUpLGM9bigyMTI4KSx1PXIobig0NDgzKSksZj17dHlwZTpcInNwcmluZ1wiLGR1cmF0aW9uOi4yLGJvdW5jZTouMjV9O3QuRXhwYW5kYWJsZVBhbmVsPWU9Pnt2YXIgdDtjb25zdCBuPWAke2UucGFuZWxJZH0tZXhwYW5kYWJsZS1wYW5lbGA7cmV0dXJuKDAsby5qc3gpKHUuZGVmYXVsdCxPYmplY3QuYXNzaWduKHtmb2N1c1RyYXBPcHRpb25zOntmYWxsYmFja0ZvY3VzOmAjJHtufWAsY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXM6ITAsb25EZWFjdGl2YXRlOmUub25Db2xsYXBzZVJlcXVlc3QsaW5pdGlhbEZvY3VzOiExLGRvY3VtZW50OmUuZG9jdW1lbnQscmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6ITF9fSx7Y2hpbGRyZW46KDAsby5qc3gpKGgsT2JqZWN0LmFzc2lnbih7cmVmOnQ9PigwLGMuc2V0dXBFeHBhbmRhYmxlUGFuZWwpKHQsZS5leHBhbmREaXJlY3Rpb24sZS5zdHJldGNoKSx0YWJJbmRleDowLGlkOm4saW5pdGlhbDpcImluaXRpYWxcIixleGl0OlwiaGlkZGVuXCIsYnV0dG9uU2l6ZTpudWxsIT09KHQ9ZS5idXR0b25TaXplKSYmdm9pZCAwIT09dD90OmwuQnV0dG9uU2l6ZS5iYXNlLGFuaW1hdGU6XCJ2aXNpYmxlXCIscm9sZTpcIm1lbnVcIix0cmFuc2l0aW9uOmYsb25Nb3VzZU92ZXI6KCk9Pnt2YXIgZTtyZXR1cm4gbnVsbD09PShlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmJsdXIoKX19LHtjaGlsZHJlbjplLnNlY29uZGFyeUJ1dHRvbnMubWFwKCgodCxuKT0+KDAsby5qc3gpKGwuQnV0dG9uLE9iamVjdC5hc3NpZ24oe2NsYXNzTmFtZTpcIm1lbnUtaXRlbVwiLHRhYkluZGV4Om4rMSx0aXRsZTp0LnRpdGxlLHJvbGU6XCJtZW51aXRlbVwiLHNpemU6ZS5idXR0b25TaXplLGRpc2FibGVkOnQuZGlzYWJsZWQsa2luZDpcInRleHRPbmx5XCIsb25DbGljazpuPT4oKHQsbik9PntlLmNsb3NlUGFuZWxPblNlY29uZGFyeUJ1dHRvbkNsaWNrPyhuLm9uQ2xpY2sodCksZS5vbkNvbGxhcHNlUmVxdWVzdCgpKTpuLm9uQ2xpY2sodCwoKCk9PmUub25Db2xsYXBzZVJlcXVlc3QoKSkpfSkobix0KSxcImFyaWEtbGFiZWxcIjp0LnRpdGxlfSx7Y2hpbGRyZW46KDAsby5qc3gpKGQsT2JqZWN0LmFzc2lnbih7XCJhcmlhLWxhYmVsXCI6dC50aXRsZX0se2NoaWxkcmVuOnQudGl0bGV9KSl9KSxuKSkpfSksXCJleHBhbmRhYmxlUGFuZWxcIil9KSl9O2NvbnN0IGQ9KDAsaS5kZWZhdWx0KShzLkJveClgXG4gIHBhZGRpbmctYm90dG9tOiAxcHg7XG4gIHBhZGRpbmctdG9wOiAxcHg7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBkaXNwbGF5OiBibG9jaztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbmAscD17W2wuQnV0dG9uU2l6ZS5zbWFsbF06ZT0+ZS5weC5zbWFsbCxbbC5CdXR0b25TaXplLmJhc2VdOmU9PmUucHguYmFzZSxbbC5CdXR0b25TaXplLmxhcmdlXTplPT5lLnB4LmxhcmdlfSxoPSgwLGkuZGVmYXVsdCkoYS5tb3Rpb24uZGl2KWBcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBvcGFjaXR5OiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogJHtlPT5lLnRoZW1lLnB4Lnh4eGxhcmdlfTtcbiAgbWF4LXdpZHRoOiBtYXgtY29udGVudDtcbiAgbWluLXdpZHRoOiA4MHB4O1xuICBiYWNrZ3JvdW5kOiAke2U9PmUudGhlbWUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGJveC1zaGFkb3c6ICR7ZT0+ZS50aGVtZS5zaGFkb3cuYmFzZX07XG4gIGhlaWdodDogbWF4LWNvbnRlbnQ7XG4gIHotaW5kZXg6IDEwMDtcblxuICAubWVudS1pdGVtIHtcbiAgICBib3JkZXItcmFkaXVzOiB1bnNldDtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGJvcmRlcjogdHJhbnNwYXJlbnQ7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgb3ZlcmZsb3c6IGNsaXA7XG4gICAgJiA+ICoge1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG4gICAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ub3JtYWx9O1xuICAgIHBhZGRpbmctdG9wOiAkeyh7dGhlbWU6ZSxidXR0b25TaXplOnR9KT0+cFt0XShlKX07XG4gICAgcGFkZGluZy1ib3R0b206ICR7KHt0aGVtZTplLGJ1dHRvblNpemU6dH0pPT5wW3RdKGUpfTtcbiAgICBwYWRkaW5nLWxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuXG4gICAgOmZpcnN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gICAgfVxuXG4gICAgOmxhc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgICB9XG5cbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIge1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBiYWNrZ3JvdW5kOiAke2U9PmUudGhlbWUucGFsZXR0ZS5iYWNrZ3JvdW5kMn07XG4gICAgfVxuXG4gICAgJjpkaXNhYmxlZCxcbiAgICAmOmFjdGl2ZTpkaXNhYmxlZCB7XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRJbmFjdGl2ZX07XG4gICAgICBiYWNrZ3JvdW5kOiAke2U9PmUudGhlbWUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gICAgICBvcGFjaXR5OiB1bnNldDtcbiAgICB9XG4gIH1cbmB9LDQ5MjU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDQwMjEpLHQpLG8obig5NjQ0KSx0KX0sMjYwOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNTk3MSksdCl9LDU5NzE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Ub2dnbGU9dm9pZCAwO2NvbnN0IGk9big1ODkzKSxhPW4oNjY4OSksbD1vKG4oNzUxOCkpLHM9big4NTEwKSxjPW4oMTMzNSksdT1uKDE5NDQpO3QuVG9nZ2xlPWU9Pnt2YXJ7aWQ6dCxsYWJlbDpuLG9uQ2hhbmdlOm8sbGFiZWxTaWRlOmw9XCJyaWdodFwiLHR5cGU6cz1cImNoZWNrYm94XCIsaGVscGVyVGV4dDpjfT1lLGc9cihlLFtcImlkXCIsXCJsYWJlbFwiLFwib25DaGFuZ2VcIixcImxhYmVsU2lkZVwiLFwidHlwZVwiLFwiaGVscGVyVGV4dFwiXSk7Y29uc3RbdixtXT0oMCxhLnVzZVN0YXRlKShnLmNoZWNrZWQpO3JldHVybigwLGEudXNlRWZmZWN0KSgoKCk9PnttKGcuY2hlY2tlZCl9KSxbZy5jaGVja2VkXSksKDAsaS5qc3hzKShmLE9iamVjdC5hc3NpZ24oe2xhYmVsU2lkZTpsfSx7Y2hpbGRyZW46WyhufHxjKSYmKDAsaS5qc3gpKHUuTGFiZWwse2h0bWxGb3I6dCx0ZXh0Om4saGVscGVyVGV4dDpjfSksKDAsaS5qc3hzKShkLE9iamVjdC5hc3NpZ24oe2lzQ2hlY2tlZDp2fSx7Y2hpbGRyZW46WygwLGkuanN4KShoLE9iamVjdC5hc3NpZ24oe30sZyx7aWQ6dCx0eXBlOnMsb25DaGFuZ2U6ZT0+e20oZS50YXJnZXQuY2hlY2tlZCksbnVsbD09b3x8byhlKX19KSksKDAsaS5qc3gpKHAse3RhYkluZGV4Oi0xLFwiYXJpYS1oaWRkZW5cIjpcInRydWVcIixpc0NoZWNrZWQ6dn0pXX0pKV19KSl9O2NvbnN0IGY9bC5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhsYXJnZX07XG4gIGZsZXgtZGlyZWN0aW9uOiAkeyh7bGFiZWxTaWRlOmV9KT0+XCJsZWZ0XCI9PT1lP1wicm93XCI6XCJyb3ctcmV2ZXJzZVwifTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgueGxhcmdlfTtcbmAsZD0oMCxsLmRlZmF1bHQpKGMuQm94KWBcbiAgLS1weC10b2dnbGU6ICR7KHt0aGVtZTplfSk9PmUucHgueGxhcmdlfTtcbiAgLS1weC1rbm9iOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiB2YXIoLS1weC10b2dnbGUpO1xuICB3aWR0aDogY2FsYygyICogdmFyKC0tcHgtdG9nZ2xlKSk7XG4gIGJvcmRlcjogMXB4IHNvbGlkXG4gICAgJHsoe2lzQ2hlY2tlZDplLHRoZW1lOnR9KT0+ZT90LnBhbGV0dGUuYnJhbmRQcmltYXJ5OnQucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIGJvcmRlci1yYWRpdXM6IGNhbGMoMC41ICogdmFyKC0tcHgtdG9nZ2xlKSk7XG5cbiAgYmFja2dyb3VuZDogJHsoe2lzQ2hlY2tlZDplLHRoZW1lOnR9KT0+ZT90LnBhbGV0dGUuYnJhbmRQcmltYXJ5OnQucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uKSxcbiAgICBib3JkZXItY29sb3IgdmFyKC0tLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbik7XG5cbiAgJjpmb2N1cy13aXRoaW4ge1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gIH1cbmAscD1sLmRlZmF1bHQuYnV0dG9uYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiB2YXIoLS1weC1rbm9iKTtcbiAgaGVpZ2h0OiB2YXIoLS1weC1rbm9iKTtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGJhY2tncm91bmQ6ICR7KHtpc0NoZWNrZWQ6ZSx0aGVtZTp0fSk9PmU/dC5wYWxldHRlLmJyYW5kUHJpbWFyeVRleHQ6dC5wYWxldHRlLmlucHV0Q29sb3J9O1xuICBib3JkZXI6IG5vbmU7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHRyYW5zaXRpb246IGxlZnQgdmFyKC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uKSwgYmFja2dyb3VuZCB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTsgLyogQWxsb3cgcGFzcy10aHJ1IGZvciBuYXRpdmUgaW5wdXQgKi9cbmAsaD0oMCxsLmRlZmF1bHQpKHMuUmF3SW5wdXQpYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb3BhY2l0eTogMDtcbiAgYm9yZGVyOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICBhcHBlYXJhbmNlOiBub25lO1xuICBkaXNwbGF5OiBibG9jaztcblxuICAmOmNoZWNrZWQgKyAke3B9IHtcbiAgICBsZWZ0OiBjYWxjKDEwMCUgLSAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfSk7XG4gIH1cbiAgJjpkaXNhYmxlZCArICR7cH0ge1xuICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgfVxuICAmOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cbmB9LDUzMDA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CYWRnZT12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGE9byhuKDc1MTgpKSxsPW4oMTMzNSkscz1uKDM4NzcpO3QuQmFkZ2U9ZT0+e3Zhcntjb3VudDp0PTAsbWF4Om59PWUsbz1yKGUsW1wiY291bnRcIixcIm1heFwiXSk7bGV0IGE9dC50b1N0cmluZygpO3JldHVybiBuJiZ0Pm4mJihhPWAke259K2ApLCgwLGkuanN4KShjLE9iamVjdC5hc3NpZ24oe30sbyx7Y2hpbGRyZW46YX0pKX07Y29uc3QgYz0oMCxhLmRlZmF1bHQpKGwuQm94KWBcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnN0YXR1c0NyaXRpY2FsfTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMucGlsbH07XG4gIGNvbG9yOiAke3MuQ29sb3Iud2hpdGV9O1xuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuc21hbGx9O1xuICBtaW4td2lkdGg6ICR7KHt0aGVtZTplfSk9PmUucHgueGxhcmdlfTtcbiAgcGFkZGluZzogMnB4IDZweDtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBib3gtc2hhZG93OiAkeyh7dGhlbWU6ZX0pPT5lLnNoYWRvdy5iYXNlfTtcbmB9LDMxMzY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDUzMDApLHQpfSw2ODk1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksaT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fSxhPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LGw9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DYWxlbmRhcj12b2lkIDA7Y29uc3Qgcz1uKDU4OTMpLGM9big2Njg5KSx1PWwobig3NTE4KSksZj1uKDcyOTIpLGQ9big0MTMwKSxwPW4oMTMzNSksaD1pKG4oNTI5OSkpO3QuQ2FsZW5kYXI9ZT0+e3Zhcnt2YWx1ZTp0LG9uQ2hhbmdlOm4sb25EaXNtaXNzOnJ9PWUsbz1hKGUsW1widmFsdWVcIixcIm9uQ2hhbmdlXCIsXCJvbkRpc21pc3NcIl0pO2NvbnN0W2ldPSgwLGMudXNlU3RhdGUpKHQpLFtsLHVdPSgwLGMudXNlU3RhdGUpKHQpLGQ9KDAsYy51c2VDYWxsYmFjaykoKGU9Pnt1KGUpLG51bGw9PW58fG4oZSl9KSxbXSkscD0oMCxjLnVzZUNhbGxiYWNrKSgoKCk9PntkKGkpLG51bGw9PXJ8fHIoKX0pLFtdKTtyZXR1cm4oMCxzLmpzeHMpKG0sT2JqZWN0LmFzc2lnbih7XCJkYXRhLXRlc3RpZFwiOlwicmVhY3QtY2FsZW5kYXJcIn0se2NoaWxkcmVuOlsoMCxzLmpzeCkoZi5DYWxlbmRhcixPYmplY3QuYXNzaWduKHt2YWx1ZTpsLG9uQ2hhbmdlOmQsY2FsZW5kYXJUeXBlOlwiVVNcIixkZWZhdWx0VmlldzpcIm1vbnRoXCIsbWluRGV0YWlsOlwieWVhclwiLG5leHQyTGFiZWw6bnVsbCxwcmV2MkxhYmVsOm51bGwsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczohMH0sbykpLCgwLHMuanN4cykoZyx7Y2hpbGRyZW46WygwLHMuanN4KSh2LHtcImRhdGEtdGVzdGlkXCI6XCJjYWxlbmRhci1jYW5jZWwtYnV0dG9uXCIsXCJhcmlhLWxhYmVsXCI6XCJjYW5jZWwtYnV0dG9uXCIsbGFiZWw6XCJDYW5jZWxcIixzaXplOlwiYmFzZVwiLGtpbmQ6XCJ0ZXh0T25seVwiLG9uQ2xpY2s6cH0pLCgwLHMuanN4KSh2LHtcImRhdGEtdGVzdGlkXCI6XCJjYWxlbmRhci1hcHBseS1idXR0b25cIixcImFyaWEtbGFiZWxcIjpcImFwcGx5LWJ1dHRvblwiLGxhYmVsOlwiQXBwbHlcIixzaXplOlwiYmFzZVwiLGtpbmQ6XCJwcmltYXJ5XCIsb25DbGljazpyfSldfSldfSkpfTtjb25zdCBnPSgwLHUuZGVmYXVsdCkocC5Cb3gpYFxuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gMHB4YH07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIG1hcmdpbi1yaWdodDogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH1gfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgYm9yZGVyLXRvcDogbm9uZTtcbmAsdj0oMCx1LmRlZmF1bHQpKGQuQnV0dG9uKWBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gJHtlLnB4LnNtYWxsfWB9O1xuICBtYXJnaW4tcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9YH07XG5gLG09KDAsdS5kZWZhdWx0KShwLkJveClgXG4gICR7aH07XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAucmVhY3QtY2FsZW5kYXIge1xuICAgIG1pbi13aWR0aDogMjMwcHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fTtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gICAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fSAhaW1wb3J0YW50O1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb25fX2Fycm93IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmxhcmdlfTtcblxuICAgIDpkaXNhYmxlZCB7XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICAgIH1cbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbl9fbGFiZWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH0gIWltcG9ydGFudDtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX3ZpZXdDb250YWluZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH0gIWltcG9ydGFudDtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Q29sb3J9O1xuICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fbW9udGgtdmlld19fd2Vla2RheXMge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcblxuICAgIGFiYnIge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fdGlsZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH0gIWltcG9ydGFudDtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgICBhc3BlY3QtcmF0aW86IDEvMTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICA6ZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SW5hY3RpdmV9O1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcblxuICAgICAgOmhvdmVyIHtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIDpob3ZlciB7XG4gICAgICBib3JkZXI6IDJweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICAgIH1cblxuICAgIDpmb2N1cyB7XG4gICAgICBib3JkZXI6IDJweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICAgIH1cbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tbm93IHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fSAhaW1wb3J0YW50O1xuICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICB9XG5cbiAgLnJlYWN0LWNhbGVuZGFyX190aWxlLS1hY3RpdmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnl9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlUZXh0fTtcbiAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcblxuICAgIDpmb2N1cyB7XG4gICAgICBib3JkZXI6IDJweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICAgICAgYm9yZGVyLXJhZGl1czogMTAwcHg7XG4gICAgfVxuICB9XG5gfSw5NzM0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig2ODk1KSx0KX0sMTYyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRyb3Bkb3duQnV0dG9uPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1uKDI3OSksYT1uKDcyNjEpLGw9big5NjM0KSxzPW4oNjY4OSksYz1yKG4oNzUxOCkpLHU9bigxMzM1KSxmPW4oOTUwNyksZD1uKDE5NDQpO3QuRHJvcGRvd25CdXR0b249KDAscy5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXIgbixyLGwscyxjO3JldHVybigwLG8uanN4KShoLHtjaGlsZHJlbjooMCxvLmpzeHMpKHAse2NoaWxkcmVuOlsoZS5sYWJlbHx8ZS5oZWxwZXJUZXh0KSYmKDAsby5qc3gpKGQuTGFiZWwse3RleHQ6ZS5sYWJlbCxoZWxwZXJUZXh0OmUuaGVscGVyVGV4dCxodG1sRm9yOmUubmFtZX0pLCgwLG8uanN4cykodixPYmplY3QuYXNzaWduKHtyb2xlOlwiY29tYm94Ym94XCIscmVmOnQsbmFtZTplLm5hbWUsdGFiSW5kZXg6ZS50YWJJbmRleCxcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOmUuYWN0aXZlRGVzY2VuZGFudCxzdGF0dXM6ZS5zdGF0dXMsXCJhcmlhLWV4cGFuZGVkXCI6ZS5leHBhbmRlZCxcImFyaWEtaGFzcG9wdXBcIjpcImxpc3Rib3hcIixcImFyaWEtY29udHJvbHNcIjpcImRyb3Bkb3duLWxpc3Rib3hcIixvbkNsaWNrOigpPT5lLmhhbmRsZUNsaWNrKCksYXM6XCJidXR0b25cIixcImRhdGEtdGVzdGlkXCI6XCJkcm9wZG93bi1idXR0b25cIix0aXRsZTpudWxsIT09KHI9bnVsbD09PShuPWUuc2VsZWN0ZWQpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnRpdGxlKSYmdm9pZCAwIT09cj9yOmUucGxhY2Vob2xkZXJ9LHtjaGlsZHJlbjpbKG51bGw9PT0obD1lLnNlbGVjdGVkKXx8dm9pZCAwPT09bD92b2lkIDA6bC5pY29uVXJsKSYmKDAsby5qc3gpKGkuQnV0dG9uSW1hZ2Use3NyYzplLnNlbGVjdGVkLmljb25Vcmx9KSwoMCxvLmpzeCkoYS5PcHRpb25UaXRsZSxPYmplY3QuYXNzaWduKHtcImFyaWEtbGl2ZVwiOlwicG9saXRlXCIsXCJkYXRhLXRlc3RpZFwiOlwic2VsZWN0ZWQtb3B0aW9uXCJ9LHtjaGlsZHJlbjpudWxsIT09KGM9bnVsbD09PShzPWUuc2VsZWN0ZWQpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnRpdGxlKSYmdm9pZCAwIT09Yz9jOmUucGxhY2Vob2xkZXJ9KSksKDAsby5qc3gpKGcse3N0YXR1czplLnN0YXR1cyxpY29uOmUuZXhwYW5kZWQ/XCJDaGV2cm9uVXBJY29uXCI6XCJDaGV2cm9uRG93bkljb25cIn0pXX0pKV19KX0pfSkpLHQuRHJvcGRvd25CdXR0b24uZGlzcGxheU5hbWU9XCJEcm9wZG93bkJ1dHRvblwiO2NvbnN0IHA9KDAsYy5kZWZhdWx0KSh1LkJveClgXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIHdpZHRoOiAxMDAlO1xuYCxoPSgwLGMuZGVmYXVsdCkodS5Cb3gpYFxuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIHdpZHRoOiAxMDAlO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbmAsZz0oMCxjLmRlZmF1bHQpKGwuSWNvbilgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxmLmdldFN0YXR1c0NvbG9yKShlLHQsXCJ0ZXh0RGVmYXVsdFwiKX07XG5gLHY9KDAsYy5kZWZhdWx0KSh1LkJveClgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEJhY2tncm91bmR9O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsZi5nZXRTdGF0dXNDb2xvcikoZSx0LFwiaW5wdXRCb3JkZXJcIil9O1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ib2xkfTtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LnVpfTtcbiAgb3V0bGluZTogbm9uZTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gJHtlLnB4LnNtYWxsfWB9O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbik7XG4gIHdpZHRoOiAxMDAlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICR7bC5JY29ufSB7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIH1cblxuICAmOmZvY3VzLXdpdGhpbiB7XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRGb2N1c2VkfTtcbiAgfVxuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IDA7XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxmLmdldFN0YXR1c0NvbG9yKShlLHQsXCJpbnB1dEZvY3VzZWRcIil9O1xuICB9XG5gfSw2MDYyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRyb3Bkb3duTWVudT12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9big2Njg5KSxhPW4oMTMzNSksbD1yKG4oNzUxOCkpLHM9big3MjYxKSxjPW4oMjc5KSx1PW4oMzQ3KSxmPW4oMTYyKTt0LkRyb3Bkb3duTWVudT0oMCxpLmZvcndhcmRSZWYpKCgoe2xhYmVsOmUsb3B0aW9uczp0PVtbXV0scGxhY2Vob2xkZXI6bj1cIlNlbGVjdCBhbiBvcHRpb25cIixzZWxlY3RlZDpyLG9uT3B0aW9uSG92ZXI6bCxvbkNoYW5nZTpoLHJlbmRlckxhYmVsOmcsZml0Q29udGVudDp2fSxtKT0+e2lmKHImJiEoKGUsdCk9PmUuc29tZSgoZT0+ZS5zb21lKChlPT5lLnZhbHVlPT09dC52YWx1ZSkpKSkpKHQscikpdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VsZWN0ZWQgb3B0aW9uICR7ci52YWx1ZX0gaXMgbm90IHByZXNlbnQgaW4gdGhlIG9wdGlvbnMgYXJyYXlgKTtjb25zdFtDLHldPSgwLGkudXNlU3RhdGUpKCExKTsoMCxpLnVzZUVmZmVjdCkoKCgpPT57MT09PXRbMF0ubGVuZ3RoJiZ3KCExKX0pLFt0XSk7Y29uc3Qgdz1lPT57eShudWxsIT1lP2U6IUMpfSx7Zm9jdXNlZE9wdGlvbjpiLGhhbmRsZUtleURvd246eH09KDAsdS51c2VEcm9wZG93bktleWJvYXJkTmF2aWdhdGlvbikodCxyLEMsdyxoKTtyZXR1cm4oMCxvLmpzeCkoZCxPYmplY3QuYXNzaWduKHtyZWY6bSxmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsb25CbHVyOmU9PntlLmN1cnJlbnRUYXJnZXQuY29udGFpbnMoZS5yZWxhdGVkVGFyZ2V0KXx8eSghMSl9LG9uS2V5RG93bjp4fSx7Y2hpbGRyZW46KDAsby5qc3hzKShhLkJveCxPYmplY3QuYXNzaWduKHtnYXA6XCJzbWFsbFwiLGZsZXhEaXJlY3Rpb246XCJjb2x1bW5cIixzdHlsZTp7d2lkdGg6XCIxMDAlXCJ9fSx7Y2hpbGRyZW46W2UmJigwLG8uanN4KShcImxhYmVsXCIsT2JqZWN0LmFzc2lnbih7aHRtbEZvcjpcImRyb3Bkb3duLWJ1dHRvblwifSx7Y2hpbGRyZW46KDAsby5qc3gpKHMuT3B0aW9uVGl0bGUse2NoaWxkcmVuOmV9KX0pKSwoMCxvLmpzeHMpKHAse2NoaWxkcmVuOltnPygwLG8uanN4KShpLkZyYWdtZW50LHtjaGlsZHJlbjpnKHJ8fHt0aXRsZTpuLHZhbHVlOm51bGx9LEMsdyxiKX0sYHJlbmRlci1sYWJlbC0ke3J9YCk6KDAsby5qc3gpKGYuRHJvcGRvd25CdXR0b24se3RhYkluZGV4OjAsYWN0aXZlRGVzY2VuZGFudDpgbWVudS1vcHRpb24tJHtudWxsPT1iP3ZvaWQgMDpiLnZhbHVlfWAsZXhwYW5kZWQ6QyYmdFswXS5sZW5ndGg+MSxoYW5kbGVDbGljazooKT0+dygpLHNlbGVjdGVkOnIscGxhY2Vob2xkZXI6bn0pLHQubGVuZ3RoJiZ0WzBdLmxlbmd0aD4xJiZDJiYoMCxvLmpzeCkoYy5NZW51LHttZW51SWQ6XCJkcm9wZG93bi1saXN0Ym94XCIsb3B0aW9uczp0LHNlbGVjdGVkOnIsaGFuZGxlRXhwYW5kTWVudTp3LG9uT3B0aW9uSG92ZXI6bCxvbkNoYW5nZTpoLGZpdENvbnRlbnQ6dixmb2N1c2VkT3B0aW9uOmIsYWJzb2x1dGVQb3NpdGlvbjohMH0pXX0pXX0pKX0pKX0pKSx0LkRyb3Bkb3duTWVudS5kaXNwbGF5TmFtZT1cIkRyb3Bkb3duTWVudVwiO2NvbnN0IGQ9KDAsbC5kZWZhdWx0KShhLkJveClgXG4gIHVzZXItc2VsZWN0OiBub25lO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gLHA9KDAsbC5kZWZhdWx0KShhLkJveClgYH0sNjAyNjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNjA2MiksdCksbyhuKDI3OSksdCksbyhuKDE2MiksdCl9LDI3OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CdXR0b25JbWFnZT10Lk1lbnU9dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPXIobig2Njg5KSksYT1yKG4oNzUxOCkpLGw9big5NjM0KSxzPW4oMTMzNSksYz1uKDcyNjEpO3QuTWVudT0oe29wdGlvbnM6ZSxzZWxlY3RlZDpuLG1lbnVJZDpyLGhhbmRsZUV4cGFuZE1lbnU6YSxvbk9wdGlvbkhvdmVyOmwsb25DaGFuZ2U6cyx3aWR0aDpnLGhlaWdodDp2LGhlYWRlcjptLGZvY3VzZWRPcHRpb246QyxhYnNvbHV0ZVBvc2l0aW9uOnksZml0Q29udGVudDp3fSk9Pntjb25zdCBiPWU9PntudWxsPT1sfHxsKGUpfTtyZXR1cm4oMCxvLmpzeHMpKHUsT2JqZWN0LmFzc2lnbih7cm9sZTpcImxpc3Rib3hcIixmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsb25Nb3VzZUxlYXZlOigpPT57YihudWxsKX0sXCJkYXRhLXRlc3RpZFwiOlwibWVudVwiLGlkOnIsd2lkdGg6ZyxoZWlnaHQ6dixhYnNvbHV0ZVBvc2l0aW9uOnksZml0Q29udGVudDp3fSx7Y2hpbGRyZW46W20mJigwLG8uanN4cykoaS5kZWZhdWx0LkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsby5qc3gpKGQse2NoaWxkcmVuOigwLG8uanN4KShjLk9wdGlvblRpdGxlLHtjaGlsZHJlbjptfSl9KSwoMCxvLmpzeCkoaCx7fSldfSksZS5tYXAoKChlLHIpPT4oMCxvLmpzeHMpKGkuZGVmYXVsdC5GcmFnbWVudCx7Y2hpbGRyZW46WzAhPT1yJiYoMCxvLmpzeCkoaCx7fSksZS5tYXAoKChlLHIpPT4oMCxvLmpzeHMpKGYsT2JqZWN0LmFzc2lnbih7cm9sZTpcIm9wdGlvblwiLGlzRm9jdXNlZDoobnVsbD09Qz92b2lkIDA6Qy52YWx1ZSk9PT1lLnZhbHVlLFwiYXJpYS1zZWxlY3RlZFwiOihudWxsPT1uP3ZvaWQgMDpuLnZhbHVlKT09PWUudmFsdWUsYWxpZ25JdGVtczpcImNlbnRlclwiLGFzOlwiYnV0dG9uXCIsXCJkYXRhLXRlc3RpZFwiOmBtZW51LW9wdGlvbi0ke3J9YCxpZDpgbWVudS1vcHRpb24tJHtlLnZhbHVlfWAsdGl0bGU6ZS50aXRsZSxvbkNsaWNrOigpPT57ZS5vdmVycmlkZU9uQ2xpY2s/ZS5vdmVycmlkZU9uQ2xpY2soZSk6cyhlKSxudWxsPT1hfHxhKCl9LG9uTW91c2VPdmVyOigpPT5iKGUudmFsdWUpfSx7Y2hpbGRyZW46WyhudWxsPT1lP3ZvaWQgMDplLmljb25VcmwpJiYoMCxvLmpzeCkodC5CdXR0b25JbWFnZSx7c3JjOmUuaWNvblVybCxzdHlsZTp7bWFyZ2luUmlnaHQ6XCI4cHhcIn19KSwoMCxvLmpzeCkoYy5PcHRpb25UaXRsZSx7Y2hpbGRyZW46ZS50aXRsZX0pLChudWxsPT1uP3ZvaWQgMDpuLnZhbHVlKT09PWUudmFsdWU/KDAsby5qc3gpKHAse2ljb246XCJDaGVja0ljb25cIn0pOigwLG8uanN4KShwLHtjaGlsZHJlbjooMCxvLmpzeCkoby5GcmFnbWVudCx7fSl9KV19KSxyKSkpXX0scikpKV19KSl9O2NvbnN0IHU9KDAsYS5kZWZhdWx0KShzLkJveClgXG4gIHdpZHRoOiAkeyh7d2lkdGg6ZSxmaXRDb250ZW50OnR9KT0+ZXx8KHQ/XCJmaXQtY29udGVudFwiOlwiMTAwJVwiKX07XG4gIG1heC1oZWlnaHQ6ICR7KHtoZWlnaHQ6ZX0pPT5udWxsIT1lP2U6XCJmaXQtY29udGVudFwifTtcbiAgdG9wOiAkeyh7dGhlbWU6ZX0pPT5gY2FsYygxMDAlICsgJHtlLnB4LnhzbWFsbH0pYH07XG4gIGJveC1zaGFkb3c6IDBweCA0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICB6LWluZGV4OiAxMDtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0QmFja2dyb3VuZH07XG4gIHBvc2l0aW9uOiAkeyh7YWJzb2x1dGVQb3NpdGlvbjplfSk9PmU/XCJhYnNvbHV0ZVwiOlwiaW5pdGlhbFwifTtcbmAsZj0oMCxhLmRlZmF1bHQpKHMuQm94KWBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYm9yZGVyOiAkeyh7aXNGb2N1c2VkOmUsdGhlbWU6dH0pPT5lP2AxcHggc29saWQgJHt0LnBhbGV0dGUuYm9yZGVyTmV1dHJhbH1gOlwiMXB4IHNvbGlkIHRyYW5zcGFyZW50XCJ9O1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgb3V0bGluZTogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5zbWFsbH1gfTtcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQyfTtcbiAgfVxuYCxkPSgwLGEuZGVmYXVsdCkocy5Cb3gpYFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5zbWFsbH1gfTtcbmAscD0oMCxhLmRlZmF1bHQpKGwuSWNvbilgXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuYCxoPSgwLGEuZGVmYXVsdCkocy5Cb3gpYFxuICBib3JkZXItdG9wOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0QmFja2dyb3VuZH07XG5gO3QuQnV0dG9uSW1hZ2U9YS5kZWZhdWx0LmltZ2BcbiAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnhsYXJnZX07XG4gIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnhsYXJnZX07XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbmB9LDcyNjE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VUb29sdGlwPXQuaXNFbGVtZW50T3ZlcmZsb3duPXQuT3B0aW9uVGl0bGU9dm9pZCAwO2NvbnN0IGk9big1ODkzKSxhPW4oNjY4OSksbD1uKDc3NjkpLHM9big5NTA3KSxjPW8obig3NTE4KSk7dC5PcHRpb25UaXRsZT1lPT57dmFye2NoaWxkcmVuOm59PWUsbz1yKGUsW1wiY2hpbGRyZW5cIl0pO3JldHVybigwLGkuanN4KSh1LE9iamVjdC5hc3NpZ24oe3JlZjooMCx0LnVzZVRvb2x0aXApKG4pfSxvLHtjaGlsZHJlbjooMCxpLmpzeCkoXCJkaXZcIix7Y2hpbGRyZW46bn0pfSkpfTtjb25zdCB1PSgwLGMuZGVmYXVsdCkobC5UZXh0KWBcbiAgJHtzLk1peGlucy50ZXh0T3ZlcmZsb3d9O1xuICBtYXJnaW4tbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuYDtmdW5jdGlvbiBmKGUpe3JldHVybiBlLnNjcm9sbEhlaWdodD5lLmNsaWVudEhlaWdodHx8ZS5zY3JvbGxXaWR0aD5lLmNsaWVudFdpZHRofXQuaXNFbGVtZW50T3ZlcmZsb3duPWYsdC51c2VUb29sdGlwPWU9PigwLGEudXNlQ2FsbGJhY2spKCh0PT57dCYmZSYmZih0KSYmKHQudGl0bGU9ZSl9KSxbXSl9LDcwMDY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5JY29uPXZvaWQgMDtjb25zdCBpPW4oNTg5MyksYT1vKG4oNzUxOCkpLGw9bigxMzM1KSxzPW4oOTUwNyksYz1uKDM0NzEpLHU9big5NjY5KTt0Lkljb249KDAsYS5kZWZhdWx0KSgoZT0+e3Zhcnt0YWJJbmRleDp0LGljb246bixjaGlsZHJlbjpvLHNpemU6YT1cImJhc2VcIixjb250YWluZXJTaXplOmwsXCJkYXRhLXRlc3RpZFwiOnN9PWUsYz1yKGUsW1widGFiSW5kZXhcIixcImljb25cIixcImNoaWxkcmVuXCIsXCJzaXplXCIsXCJjb250YWluZXJTaXplXCIsXCJkYXRhLXRlc3RpZFwiXSk7cmV0dXJuKDAsaS5qc3gpKGQsT2JqZWN0LmFzc2lnbih7fSxjLHtpY29uU2l6ZTphLGNvbnRhaW5lclNpemU6bHx8YSxqdXN0aWZ5Q29udGVudDpcImNlbnRlclwiLGFsaWduSXRlbXM6XCJjZW50ZXJcIixcImRhdGEtdGVzdGlkXCI6cyx0YWJJbmRleDp0fSx7Y2hpbGRyZW46bj8oMCxpLmpzeCkoZixPYmplY3QuYXNzaWduKHthcmlhTGFiZWw6Y1tcImFyaWEtbGFiZWxcIl0saWNvbjpufSxjKSk6b30pKX0pKWBgO2NvbnN0IGY9KDAsYS5kZWZhdWx0KSgoZT0+e3ZhcntpY29uOnQsYXJpYUxhYmVsOm59PWUsbz1yKGUsW1wiaWNvblwiLFwiYXJpYUxhYmVsXCJdKTtjb25zdCBhPWMuSWNvblNldFt0XTtyZXR1cm4oMCxpLmpzeCkoYSxPYmplY3QuYXNzaWduKHtyb2xlOlwiaW1nXCIsXCJhcmlhLWxhYmVsXCI6bn0sbykpfSkpYGAsZD0oMCxhLmRlZmF1bHQpKGwuQm94KWBcbiAgLyoqXG4gICAqIDEuIEluaXRpYWxpemUgbG9jYWwgdmFyaWFibGVzIHdpdGggcmVhc29uYWJsZSBkZWZhdWx0c1xuICAgKi9cbiAgLS1weC1kZWZhdWx0OiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLmJhc2V9O1xuXG4gIC8qKlxuICAgKiAyLiBJbmplY3QgdmFyaWFudHMgLS0gPyBXaGF0IGFyZSBWYXJpYW50c1xuICAgKi9cbiAgJHsoMCxzLmdldFZhcmlhbnRDU1MpKHUudmFyaWFudHMsdS5WYXJpYW50LmNvbnRhaW5lclNpemUpfVxuICAkeygwLHMuZ2V0VmFyaWFudENTUykodS52YXJpYW50cyx1LlZhcmlhbnQuaWNvblNpemUpfVxuXG4gIHdpZHRoOiB2YXIoLS1weC1jb250YWluZXIsIHZhcigtLXB4LWRlZmF1bHQpKTtcbiAgaGVpZ2h0OiB2YXIoLS1weC1jb250YWluZXIsIHZhcigtLXB4LWRlZmF1bHQpKTtcblxuICAvKiBTVkcgQXNzZXQgKi9cbiAgJiA+ICosXG4gICR7Zn0ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiB2YXIoLS1weC1pY29uLCB2YXIoLS1weC1kZWZhdWx0KSk7XG4gICAgaGVpZ2h0OiB2YXIoLS1weC1pY29uLCB2YXIoLS1weC1kZWZhdWx0KSk7XG4gICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcbiAgfVxuYH0sOTY2OTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC52YXJpYW50cz10LlZhcmlhbnQ9dm9pZCAwO2NvbnN0IHI9big3NTE4KTt0LlZhcmlhbnQ9e2ljb25TaXplOlwiaWNvblNpemVcIixjb250YWluZXJTaXplOlwiY29udGFpbmVyU2l6ZVwifSx0LnZhcmlhbnRzPXtbdC5WYXJpYW50Lmljb25TaXplXTp7eHNtYWxsOnIuY3NzYFxuICAgICAgLS1weC1pY29uOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnhzbWFsbH07XG4gICAgYCxzbWFsbDpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5zbWFsbH07XG4gICAgYCxiYXNlOnIuY3NzYFxuICAgICAgLS1weC1pY29uOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLmJhc2V9O1xuICAgIGAsbGFyZ2U6ci5jc3NgXG4gICAgICAtLXB4LWljb246ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUubGFyZ2V9O1xuICAgIGAseGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1pY29uOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnhsYXJnZX07XG4gICAgYCx4eGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1pY29uOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnh4bGFyZ2V9O1xuICAgIGAseHh4bGFyZ2U6ci5jc3NgXG4gICAgICAtLXB4LWljb246ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUueHh4bGFyZ2V9O1xuICAgIGB9LFt0LlZhcmlhbnQuY29udGFpbmVyU2l6ZV06e3hzbWFsbDpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnhzbWFsbH07XG4gICAgYCxzbWFsbDpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnNtYWxsfTtcbiAgICBgLGJhc2U6ci5jc3NgXG4gICAgICAtLXB4LWNvbnRhaW5lcjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5iYXNlfTtcbiAgICBgLGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1jb250YWluZXI6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUubGFyZ2V9O1xuICAgIGAseGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1jb250YWluZXI6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUueGxhcmdlfTtcbiAgICBgLHh4bGFyZ2U6ci5jc3NgXG4gICAgICAtLXB4LWNvbnRhaW5lcjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54eGxhcmdlfTtcbiAgICBgLHh4eGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1jb250YWluZXI6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUueHh4bGFyZ2V9O1xuICAgIGB9fX0sOTYzNDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNzAwNiksdCl9LDkyODU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQmVsbEZpbGxlZEljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkJlbGxGaWxsZWRJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeHMpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIyMFwiLGhlaWdodDpcIjIwXCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjpbKDAsby5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTEyIDJDMTEuMjI5NiAyIDEwLjU4NDUgMi41ODM3OSAxMC41MDc4IDMuMzUwNDFDMTAuNDk1MiAzLjQ3Njc3IDEwLjQwNTcgMy41ODE1NyAxMC4yODQ2IDMuNjE5NzFDOC4wNjU1NCA0LjMxODUxIDYuNDIyMzggNi4zMzc5NiA2LjMwMDMzIDguNzc4OTNMNi4xMjM4MiAxMi4zMDkxQzYuMDk5MzYgMTIuNzk4MiA1LjgxMzMxIDEzLjIzNjIgNS4zNzUzIDEzLjQ1NTJMNC42MDczOSAxMy44MzkyQzQuMTQ3NjEgMTQuMDY5MSAzLjg1NzE4IDE0LjUzOSAzLjg1NzE4IDE1LjA1MzFWMTYuMjVDMy44NTcxOCAxNi42MjQ4IDQuMTYwOTggMTYuOTI4NiA0LjUzNTc1IDE2LjkyODZIMTkuNDY0M0MxOS44MzkxIDE2LjkyODYgMjAuMTQyOSAxNi42MjQ4IDIwLjE0MjkgMTYuMjVWMTUuMDUzMUMyMC4xNDI5IDE0LjUzOSAxOS44NTI1IDE0LjA2OTEgMTkuMzkyNyAxMy44MzkyTDE4LjYyNDcgMTMuNDU1MkMxOC4xODY3IDEzLjIzNjIgMTcuOTAwNiAxMi43OTgyIDE3Ljg3NjIgMTIuMzA5MUwxNy42OTk3IDguNzc4OTNDMTcuNTc3NiA2LjMzNzk2IDE1LjkzNDQgNC4zMTg1MSAxMy43MTU0IDMuNjE5NzJDMTMuNTk0MiAzLjU4MTU3IDEzLjUwNDggMy40NzY3OCAxMy40OTIyIDMuMzUwNDFDMTMuNDE1NSAyLjU4MzggMTIuNzcwNCAyIDEyIDJaXCIsZmlsbDp0fSksKDAsby5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTkuMjg1NzEgMTguMjg1N0M5LjI4NTcxIDE5Ljc4NDggMTAuNTAwOSAyMSAxMiAyMUMxMy40OTkxIDIxIDE0LjcxNDMgMTkuNzg0OCAxNC43MTQzIDE4LjI4NTdMOS4yODU3MSAxOC4yODU3WlwiLGZpbGw6dH0pXX0pKX19LDQ3MTg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQmVsbEljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkJlbGxJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk03LjQ3MzA2IDEuMjI5NDNDNi41MTkzIDEuMjI5NDMgNS44NzI5MSAxLjk4Mzk5IDUuNjUzNzEgMi43MjY5N0M1LjY1MjA3IDIuNzI5MzIgNS42NDkyMSAyLjczMzAzIDUuNjQ0ODUgMi43Mzc1NkM1LjYzOTIgMi43NDM0MiA1LjYzMjY0IDIuNzQ4OTYgNS42MjU5OSAyLjc1MzU1QzUuNjE5MjYgMi43NTgxOSA1LjYxNDUyIDIuNzYwNCA1LjYxMyAyLjc2MTAyTDUuNjEyNjUgMi43NjExN0M1LjA1MDg4IDIuOTkyNTEgNC4zOTE5MyAzLjM2MDIyIDMuODc2OTcgNC4wMzM1N0MzLjM1ODE1IDQuNzExOTYgMy4wMTk0OSA1LjY1NTcxIDMuMDE5NDUgNi45Nzc0OUw1LjY1MzcxIDIuNzI2OTdMMy4wMTk0NSA2Ljk3Nzc2QzMuMDE4NjYgOC4zMDE2NSAyLjg3ODcxIDkuMDMxMyAyLjY3MDkxIDkuNTM0MzlDMi40ODg3OSA5Ljk3NTMxIDIuMjQ4ODkgMTAuMjY1OCAxLjkxMiAxMC42NzM4TDEuOTExODUgMTAuNjc0QzEuODYyNjMgMTAuNzMzNiAxLjgxMTM1IDEwLjc5NTcgMS43NTc4NyAxMC44NjEyQzEuMTQ5MjMgMTEuNjA2IDEuNzI3MjkgMTIuNjQxOSAyLjY1OTg2IDEyLjY0MTlINS4wOTAxOUM1LjIxMTkxIDEyLjk4IDUuNDA3MjYgMTMuMjkwNiA1LjY2NjE4IDEzLjU0OTVDNi4xMjgyNyAxNC4wMTE2IDYuNzU0OTkgMTQuMjcxMiA3LjQwODQ4IDE0LjI3MTJDOC4wNjE5NyAxNC4yNzEyIDguNjg4NyAxNC4wMTE2IDkuMTUwNzggMTMuNTQ5NUM5LjQwOTcxIDEzLjI5MDYgOS42MDUwNSAxMi45OCA5LjcyNjc4IDEyLjY0MTlIMTIuMjg5NEMxMy4yMjM0IDEyLjY0MTkgMTMuNzkyIDExLjYwMDggMTMuMTg4NCAxMC44NjEzTDEzLjE4ODMgMTAuODYxMkMxMy4xMzQ4IDEwLjc5NTcgMTMuMDgzNSAxMC43MzM2IDEzLjAzNDIgMTAuNjc0QzEyLjY5NzMgMTAuMjY1OSAxMi40NTc0IDkuOTc1NCAxMi4yNzU1IDkuNTM0NTFDMTIuMDY3OCA5LjAzMTQ3IDExLjkyODIgOC4zMDE4MiAxMS45MjgyIDYuOTc3NzZDMTEuOTI4MiA1LjY1Njg4IDExLjU4OTEgNC43MTI5OSAxMS4wNzAzIDQuMDM0MzNDMTAuNTU1MyAzLjM2MDc1IDkuODk2NTIgMi45OTIzNCA5LjMzNDk5IDIuNzYxMTVMOS4zMzQ2NyAyLjc2MTAyQzkuMzM0MDkgMi43NjA3OSA5LjMyOTgyIDIuNzU4ODggOS4zMjMxMyAyLjc1NDI0QzkuMzE2NTUgMi43NDk2NyA5LjMwOTgxIDIuNzQzOTQgOS4zMDM4MiAyLjczNzdDOS4yOTg3NSAyLjczMjQxIDkuMjk1NDUgMi43MjgwMyA5LjI5MzYzIDIuNzI1MzFDOS4wNzI2NCAxLjk4Mzc4IDguNDI2OTEgMS4yMjk0MyA3LjQ3MzA2IDEuMjI5NDNaTTguNjg2NTQgMTIuNjQxOUg2LjEzMDQyQzYuMTg3NiAxMi43Mjk1IDYuMjU0MDMgMTIuODExNSA2LjMyOTEgMTIuODg2NkM2LjYxNTM3IDEzLjE3MjkgNy4wMDM2MyAxMy4zMzM3IDcuNDA4NDggMTMuMzMzN0M3LjgxMzMzIDEzLjMzMzcgOC4yMDE2IDEzLjE3MjkgOC40ODc4NyAxMi44ODY2QzguNTYyOTMgMTIuODExNSA4LjYyOTM3IDEyLjcyOTUgOC42ODY1NCAxMi42NDE5Wk02LjU1MTQ1IDIuOTk3MTZDNi42OTU3MSAyLjUwMDg1IDcuMDcxMjEgMi4xNjY5MyA3LjQ3MzA2IDIuMTY2OTNDNy44NzQ5MiAyLjE2NjkzIDguMjUwNSAyLjUwMDYxIDguMzk2NiAyLjk5Nzg1TDguMzk2OTUgMi45OTkwNEM4LjQ4NDk5IDMuMjk1NzUgOC43Mjg0MyAzLjUyNTM4IDguOTc4MDkgMy42MjgwNkM5LjQ1NjI1IDMuODI0OTIgOS45NDg5NCA0LjExMTE5IDEwLjMyNTUgNC42MDM3M0MxMC42OTgyIDUuMDkxMTkgMTAuOTkwNyA1LjgyNDg2IDEwLjk5MDcgNi45Nzc3NkMxMC45OTA3IDguMzU1MDYgMTEuMTMzNyA5LjIyNTUgMTEuNDA4OSA5Ljg5MjE3QzExLjY0ODMgMTAuNDcyMyAxMS45ODIzIDEwLjg3NDkgMTIuMzE2NyAxMS4yNzhDMTIuMzY1MyAxMS4zMzY2IDEyLjQxMzkgMTEuMzk1MSAxMi40NjIyIDExLjQ1NDJDMTIuNTAxNiAxMS41MDI1IDEyLjUwNDYgMTEuNTU1MiAxMi40NzkzIDExLjYwNUMxMi40NTUzIDExLjY1MjQgMTIuMzk5NiAxMS43MDQ0IDEyLjI4OTQgMTEuNzA0NEgyLjY1OTg2QzIuNTQ2MDQgMTEuNzA0NCAyLjQ4OTU1IDExLjY1MDkgMi40NjU4OCAxMS42MDQ1QzIuNDQxMTkgMTEuNTU2MiAyLjQ0MzI1IDExLjUwNCAyLjQ4MzggMTEuNDU0NEwyLjQ4MzgzIDExLjQ1NDRDMi41MzIxNSAxMS4zOTUyIDIuNTgwNzUgMTEuMzM2NiAyLjYyOTM0IDExLjI3ODFMMi42Mjk0NiAxMS4yNzc5QzIuOTYzODkgMTAuODc0OCAzLjI5Nzg1IDEwLjQ3MjMgMy41Mzc0IDkuODkyMjlDMy44MTI3MyA5LjIyNTcxIDMuOTU2MTUgOC4zNTUzMyAzLjk1Njk1IDYuOTc4MDNWNi45Nzc3NkMzLjk1Njk1IDUuODIzNDEgNC4yNDkyOCA1LjA4OTk5IDQuNjIxNjUgNC42MDMwOUM0Ljk5NzkyIDQuMTExMSA1LjQ5MDQ0IDMuODI1MzcgNS45Njk2MyAzLjYyODA1QzYuMjE2NjEgMy41MjY0NSA2LjQ2MjU3IDMuMzAwMDIgNi41NTExMSAyLjk5ODMzTDYuNTUxNDUgMi45OTcxNlpcIixmaWxsOnQscm9sZTpcImltZ1wifSl9KSl9fSw4MjY1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJyb2tlbkxpbmtJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5Ccm9rZW5MaW5rSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMzJcIixoZWlnaHQ6XCIzMlwiLHZpZXdCb3g6XCIwIDAgMzIgMzJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46WygwLG8uanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk02LjMzMzUgMy43MDAyQzYuMDU3MzUgMy43MDAyIDUuODMzNSAzLjkyNDA1IDUuODMzNSA0LjIwMDJWMjcuODAwMkM1LjgzMzUgMjguMDc2MyA2LjA1NzM1IDI4LjMwMDIgNi4zMzM1IDI4LjMwMDJIMjUuNjY2OEMyNS45NDMgMjguMzAwMiAyNi4xNjY4IDI4LjA3NjMgMjYuMTY2OCAyNy44MDAyVjEyLjIzMzVIMTguMTMzNUMxNy44NTc0IDEyLjIzMzUgMTcuNjMzNSAxMi4wMDk3IDE3LjYzMzUgMTEuNzMzNVYzLjcwMDJINi4zMzM1Wk0xOC42MzM1IDQuNDA3M0wyNS40NTk3IDExLjIzMzVIMTguNjMzNVY0LjQwNzNaTTQuODMzNSA0LjIwMDJDNC44MzM1IDMuMzcxNzcgNS41MDUwNyAyLjcwMDIgNi4zMzM1IDIuNzAwMkgxOC4xMzM1QzE4LjI2NjEgMi43MDAyIDE4LjM5MzMgMi43NTI4NyAxOC40ODcgMi44NDY2NEwyNy4wMjA0IDExLjM4QzI3LjExNDEgMTEuNDczNyAyNy4xNjY4IDExLjYwMDkgMjcuMTY2OCAxMS43MzM1VjI3LjgwMDJDMjcuMTY2OCAyOC42Mjg2IDI2LjQ5NTMgMjkuMzAwMiAyNS42NjY4IDI5LjMwMDJINi4zMzM1QzUuNTA1MDcgMjkuMzAwMiA0LjgzMzUgMjguNjI4NiA0LjgzMzUgMjcuODAwMlY0LjIwMDJaXCIsZmlsbDp0fSksKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTE0LjI0OCAyMS45MDg0VjIxLjg0MDlDMTQuMjUyOCAyMS40MDA2IDE0LjI5NjYgMjEuMDUwMiAxNC4zNzk0IDIwLjc4OThDMTQuNDY0NyAyMC41Mjk0IDE0LjU4NTQgMjAuMzE4NyAxNC43NDE3IDIwLjE1NzdDMTQuODk3OSAxOS45OTY3IDE1LjA4NjEgMTkuODQ5OSAxNS4zMDYzIDE5LjcxNzNDMTUuNDQ4MyAxOS42Mjc0IDE1LjU3NjIgMTkuNTI2OCAxNS42ODk4IDE5LjQxNTVDMTUuODAzNCAxOS4zMDQyIDE1Ljg5MzQgMTkuMTc2NCAxNS45NTk3IDE5LjAzMkMxNi4wMjYgMTguODg3NSAxNi4wNTkxIDE4LjcyNzcgMTYuMDU5MSAxOC41NTI2QzE2LjA1OTEgMTguMzQxOSAxNi4wMDk0IDE4LjE1OTYgMTUuOTEgMTguMDA1N0MxNS44MTA1IDE3Ljg1MTggMTUuNjc4IDE3LjczMzQgMTUuNTEyMyAxNy42NTA2QzE1LjM0ODkgMTcuNTY1MyAxNS4xNjY2IDE3LjUyMjcgMTQuOTY1NCAxNy41MjI3QzE0Ljc4MzEgMTcuNTIyNyAxNC42MDkxIDE3LjU2MDYgMTQuNDQzNCAxNy42MzY0QzE0LjI3NzYgMTcuNzEyMSAxNC4xNDAzIDE3LjgzMDUgMTQuMDMxNCAxNy45OTE1QzEzLjkyMjUgMTguMTUwMSAxMy44NTk4IDE4LjM1NDkgMTMuODQzMiAxOC42MDU4SDEyLjc2MzdDMTIuNzgwMiAxOC4xNzk3IDEyLjg4OCAxNy44MTk4IDEzLjA4NjggMTcuNTI2M0MxMy4yODU3IDE3LjIzMDQgMTMuNTQ4NSAxNy4wMDY2IDEzLjg3NTIgMTYuODU1MUMxNC4yMDQyIDE2LjcwMzYgMTQuNTY3NiAxNi42Mjc4IDE0Ljk2NTQgMTYuNjI3OEMxNS40MDEgMTYuNjI3OCAxNS43ODIxIDE2LjcwOTUgMTYuMTA4OCAxNi44NzI5QzE2LjQzNTUgMTcuMDMzOSAxNi42ODg5IDE3LjI1OTkgMTYuODY4OCAxNy41NTExQzE3LjA1MTEgMTcuODQgMTcuMTQyMiAxOC4xNzczIDE3LjE0MjIgMTguNTYzMkMxNy4xNDIyIDE4LjgyODQgMTcuMTAwOCAxOS4wNjc1IDE3LjAxNzkgMTkuMjgwNUMxNi45MzUxIDE5LjQ5MTIgMTYuODE2NyAxOS42Nzk1IDE2LjY2MjggMTkuODQ1MkMxNi41MTEzIDIwLjAxMDkgMTYuMzI5IDIwLjE1NzcgMTYuMTE1OSAyMC4yODU1QzE1LjkxNDcgMjAuNDExIDE1Ljc1MTQgMjAuNTQxMiAxNS42MjU5IDIwLjY3NjFDMTUuNTAyOCAyMC44MTExIDE1LjQxMjggMjAuOTcwOSAxNS4zNTYgMjEuMTU1NUMxNS4yOTkyIDIxLjM0MDIgMTUuMjY4NCAyMS41Njg3IDE1LjI2MzcgMjEuODQwOVYyMS45MDg0SDE0LjI0OFpNMTQuNzg0MyAyNC4wNjc1QzE0LjU5MDEgMjQuMDY3NSAxNC40MjMyIDIzLjk5ODggMTQuMjgzNiAyMy44NjE1QzE0LjE0MzkgMjMuNzIxOCAxNC4wNzQgMjMuNTUzNyAxNC4wNzQgMjMuMzU3MkMxNC4wNzQgMjMuMTYzMSAxNC4xNDM5IDIyLjk5NzQgMTQuMjgzNiAyMi44NjAxQzE0LjQyMzIgMjIuNzIwNCAxNC41OTAxIDIyLjY1MDYgMTQuNzg0MyAyMi42NTA2QzE0Ljk3NiAyMi42NTA2IDE1LjE0MTcgMjIuNzIwNCAxNS4yODE0IDIyLjg2MDFDMTUuNDIzNSAyMi45OTc0IDE1LjQ5NDUgMjMuMTYzMSAxNS40OTQ1IDIzLjM1NzJDMTUuNDk0NSAyMy40ODc1IDE1LjQ2MTQgMjMuNjA3IDE1LjM5NTEgMjMuNzE1OUMxNS4zMzExIDIzLjgyMjQgMTUuMjQ1OSAyMy45MDc3IDE1LjEzOTQgMjMuOTcxNkMxNS4wMzI4IDI0LjAzNTUgMTQuOTE0NSAyNC4wNjc1IDE0Ljc4NDMgMjQuMDY3NVpcIixmaWxsOnR9KV19KSl9fSw2NDQ3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNoZXZyb25Eb3duSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQ2hldnJvbkRvd25JY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIyNFwiLGhlaWdodDpcIjI0XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk01LjA1MjgyIDkuODg3MDdDNS4zMzYxMiA5LjU4NDg5IDUuODEwNzUgOS41Njk1OCA2LjExMjkzIDkuODUyODdMMTIgMTUuMzcyTDE3Ljg4NyA5Ljg1Mjg3QzE4LjE4OTIgOS41Njk1OCAxOC42NjM4IDkuNTg0ODkgMTguOTQ3MSA5Ljg4NzA3QzE5LjIzMDQgMTAuMTg5MyAxOS4yMTUxIDEwLjY2MzkgMTguOTEyOSAxMC45NDcyTDEyLjUxMjkgMTYuOTQ3MkMxMi4yMjQ0IDE3LjIxNzYgMTEuNzc1NSAxNy4yMTc2IDExLjQ4NyAxNi45NDcyTDUuMDg3MDIgMTAuOTQ3MkM0Ljc4NDg0IDEwLjY2MzkgNC43Njk1MiAxMC4xODkzIDUuMDUyODIgOS44ODcwN1pcIixmaWxsOnR9LG4pKX0pKX19LDIxNDc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2hldnJvbkxlZnRJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5DaGV2cm9uTGVmdEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3htbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix3aWR0aDpcIjI0XCIsaGVpZ2h0OlwiMjRcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsZmlsbDpcIm5vbmVcIn0se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIixPYmplY3QuYXNzaWduKHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTE0LjExMjcgNS4wNTI3MkMxNC40MTQ5IDUuMzM2MDEgMTQuNDMwMiA1LjgxMDY0IDE0LjE0NjkgNi4xMTI4Mkw4LjYyNzg0IDExLjk5OTlMMTQuMTQ2OSAxNy44ODY5QzE0LjQzMDIgMTguMTg5MSAxNC40MTQ5IDE4LjY2MzcgMTQuMTEyNyAxOC45NDdDMTMuODEwNiAxOS4yMzAzIDEzLjMzNTkgMTkuMjE1IDEzLjA1MjYgMTguOTEyOEw3LjA1MjY0IDEyLjUxMjhDNi43ODIxOCAxMi4yMjQzIDYuNzgyMTggMTEuNzc1NCA3LjA1MjY0IDExLjQ4NjlMMTMuMDUyNiA1LjA4NjkxQzEzLjMzNTkgNC43ODQ3MyAxMy44MTA2IDQuNzY5NDIgMTQuMTEyNyA1LjA1MjcyWlwiLGZpbGw6dH0sbikpfSkpfX0sMjQwMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGV2cm9uUmlnaHRJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5DaGV2cm9uUmlnaHRJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIyNFwiLGhlaWdodDpcIjI0XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk05Ljg4NzYyIDUuMDUyNTZDMTAuMTg5OCA0Ljc2OTI2IDEwLjY2NDQgNC43ODQ1NyAxMC45NDc3IDUuMDg2NzZMMTYuOTQ3NyAxMS40ODY4QzE3LjIxODIgMTEuNzc1MyAxNy4yMTgyIDEyLjIyNDIgMTYuOTQ3NyAxMi41MTI3TDEwLjk0NzcgMTguOTEyN0MxMC42NjQ0IDE5LjIxNDkgMTAuMTg5OCAxOS4yMzAyIDkuODg3NjIgMTguOTQ2OUM5LjU4NTQzIDE4LjY2MzYgOS41NzAxMiAxOC4xODg5IDkuODUzNDIgMTcuODg2OEwxNS4zNzI1IDExLjk5OTdMOS44NTM0MiA2LjExMjY3QzkuNTcwMTIgNS44MTA0OSA5LjU4NTQ0IDUuMzM1ODYgOS44ODc2MiA1LjA1MjU2WlwiLGZpbGw6dH0sbikpfSkpfX0sNDgyNTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGV2cm9uVXBJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5DaGV2cm9uVXBJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIyNFwiLGhlaWdodDpcIjI0XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk01LjA1Mjg1IDE0LjExMjlDNS4zMzYxNSAxNC40MTUxIDUuODEwNzggMTQuNDMwNCA2LjExMjk2IDE0LjE0NzFMMTIgOC42MjgwMkwxNy44ODcgMTQuMTQ3MUMxOC4xODkyIDE0LjQzMDQgMTguNjYzOSAxNC40MTUxIDE4Ljk0NzIgMTQuMTEyOUMxOS4yMzA1IDEzLjgxMDcgMTkuMjE1MSAxMy4zMzYxIDE4LjkxMyAxMy4wNTI4TDEyLjUxMyA3LjA1MjgyQzEyLjIyNDUgNi43ODIzNiAxMS43NzU1IDYuNzgyMzYgMTEuNDg3MSA3LjA1MjgyTDUuMDg3MDUgMTMuMDUyOEM0Ljc4NDg3IDEzLjMzNjEgNC43Njk1NiAxMy44MTA3IDUuMDUyODUgMTQuMTEyOVpcIixmaWxsOnR9LG4pKX0pKX19LDEyODE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRXhjbGFtYXRpb25DaXJjbGVkRmlsbGVkSWNvbj12b2lkIDA7Y29uc3Qgcj1uKDU4OTMpO3QuRXhjbGFtYXRpb25DaXJjbGVkRmlsbGVkSWNvbj1lPT4oMCxyLmpzeHMpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE3XCIsdmlld0JveDpcIjAgMCAxNiAxN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlLHtjaGlsZHJlbjpbKDAsci5qc3gpKFwicGF0aFwiLHtkOlwiTTcuOTk5ODggMTUuMzMxN0MxMS43NzI5IDE1LjMzMTcgMTQuODMxNiAxMi4yNzMxIDE0LjgzMTYgOC41MDAwN0MxNC44MzE2IDQuNzI3MDQgMTEuNzcyOSAxLjY2ODQgNy45OTk4OCAxLjY2ODRDNC4yMjY4NiAxLjY2ODQgMS4xNjgyMSA0LjcyNzA0IDEuMTY4MjEgOC41MDAwN0MxLjE2ODIxIDEyLjI3MzEgNC4yMjY4NiAxNS4zMzE3IDcuOTk5ODggMTUuMzMxN1pcIixmaWxsOlwicmVkXCJ9KSwoMCxyLmpzeCkoXCJtYXNrXCIsT2JqZWN0LmFzc2lnbih7aWQ6XCJwYXRoLTItaW5zaWRlLTFfNl8yNjIwMzNcIixmaWxsOlwid2hpdGVcIn0se2NoaWxkcmVuOigwLHIuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk03Ljk5OTkzIDQuMzczODRDNy41NzUyNSA0LjM3Mzg0IDcuMjM1NjQgNC43MjY3NiA3LjI1MTk2IDUuMTUxMTNMNy40MjI5NiA5LjU5NzA2QzcuNDM0ODkgOS45MDcwOCA3LjY4OTY4IDEwLjE1MjMgNy45OTk5MyAxMC4xNTIzQzguMzEwMTkgMTAuMTUyMyA4LjU2NDk4IDkuOTA3MDggOC41NzY5IDkuNTk3MDZMOC43NDc5IDUuMTUxMTNDOC43NjQyMiA0LjcyNjc2IDguNDI0NjEgNC4zNzM4NCA3Ljk5OTkzIDQuMzczODRaTTcuOTk5OTMgMTIuNjQwNkM4LjQ2MDIyIDEyLjY0MDYgOC44MzMzNSAxMi4yNjc1IDguODMzMzUgMTEuODA3MkM4LjgzMzM1IDExLjM0NjkgOC40NjAyMiAxMC45NzM4IDcuOTk5OTMgMTAuOTczOEM3LjUzOTY0IDEwLjk3MzggNy4xNjY1IDExLjM0NjkgNy4xNjY1IDExLjgwNzJDNy4xNjY1IDEyLjI2NzUgNy41Mzk2NCAxMi42NDA2IDcuOTk5OTMgMTIuNjQwNlpcIn0pfSkpLCgwLHIuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk03Ljk5OTkzIDQuMzczODRDNy41NzUyNSA0LjM3Mzg0IDcuMjM1NjQgNC43MjY3NiA3LjI1MTk2IDUuMTUxMTNMNy40MjI5NiA5LjU5NzA2QzcuNDM0ODkgOS45MDcwOCA3LjY4OTY4IDEwLjE1MjMgNy45OTk5MyAxMC4xNTIzQzguMzEwMTkgMTAuMTUyMyA4LjU2NDk4IDkuOTA3MDggOC41NzY5IDkuNTk3MDZMOC43NDc5IDUuMTUxMTNDOC43NjQyMiA0LjcyNjc2IDguNDI0NjEgNC4zNzM4NCA3Ljk5OTkzIDQuMzczODRaTTcuOTk5OTMgMTIuNjQwNkM4LjQ2MDIyIDEyLjY0MDYgOC44MzMzNSAxMi4yNjc1IDguODMzMzUgMTEuODA3MkM4LjgzMzM1IDExLjM0NjkgOC40NjAyMiAxMC45NzM4IDcuOTk5OTMgMTAuOTczOEM3LjUzOTY0IDEwLjk3MzggNy4xNjY1IDExLjM0NjkgNy4xNjY1IDExLjgwNzJDNy4xNjY1IDEyLjI2NzUgNy41Mzk2NCAxMi42NDA2IDcuOTk5OTMgMTIuNjQwNlpcIixmaWxsOlwid2hpdGVcIn0pLCgwLHIuanN4KShcInBhdGhcIix7ZDpcIk03LjI1MTk2IDUuMTUxMTNMNS42NDg3NCA1LjIxMjc5TDUuNjQ4NzQgNS4yMTI3OUw3LjI1MTk2IDUuMTUxMTNaTTcuNDIyOTYgOS41OTcwNkw5LjAyNjE4IDkuNTM1NEw5LjAyNjE4IDkuNTM1NEw3LjQyMjk2IDkuNTk3MDZaTTguNTc2OSA5LjU5NzA2TDEwLjE4MDEgOS42NTg3Mkw4LjU3NjkgOS41OTcwNlpNOC43NDc5IDUuMTUxMTNMMTAuMzUxMSA1LjIxMjc5TDEwLjM1MTEgNS4yMTI3OUw4Ljc0NzkgNS4xNTExM1pNOC44NTUxOSA1LjA4OTQ3QzguODczODUgNS41NzQ3IDguNDg1NTMgNS45NzgyNSA3Ljk5OTkzIDUuOTc4MjVWMi43Njk0M0M2LjY2NDk4IDIuNzY5NDMgNS41OTc0NCAzLjg3ODgyIDUuNjQ4NzQgNS4yMTI3OUw4Ljg1NTE5IDUuMDg5NDdaTTkuMDI2MTggOS41MzU0TDguODU1MTkgNS4wODk0N0w1LjY0ODc0IDUuMjEyNzlMNS44MTk3NCA5LjY1ODcyTDkuMDI2MTggOS41MzU0Wk03Ljk5OTkzIDguNTQ3ODZDOC41NTE3NyA4LjU0Nzg2IDkuMDA0OTggOC45ODM5NiA5LjAyNjE4IDkuNTM1NEw1LjgxOTc0IDkuNjU4NzJDNS44NjQ4IDEwLjgzMDIgNi44Mjc1OCAxMS43NTY3IDcuOTk5OTMgMTEuNzU2N1Y4LjU0Nzg2Wk02Ljk3MzY4IDkuNTM1NEM2Ljk5NDg5IDguOTgzOTYgNy40NDgwOSA4LjU0Nzg2IDcuOTk5OTMgOC41NDc4NlYxMS43NTY3QzkuMTcyMjggMTEuNzU2NyAxMC4xMzUxIDEwLjgzMDIgMTAuMTgwMSA5LjY1ODcyTDYuOTczNjggOS41MzU0Wk03LjE0NDY4IDUuMDg5NDdMNi45NzM2OCA5LjUzNTRMMTAuMTgwMSA5LjY1ODcyTDEwLjM1MTEgNS4yMTI3OUw3LjE0NDY4IDUuMDg5NDdaTTcuOTk5OTMgNS45NzgyNUM3LjUxNDM0IDUuOTc4MjUgNy4xMjYwMiA1LjU3NDcgNy4xNDQ2OCA1LjA4OTQ3TDEwLjM1MTEgNS4yMTI3OUMxMC40MDI0IDMuODc4ODIgOS4zMzQ4OSAyLjc2OTQzIDcuOTk5OTMgMi43Njk0M1Y1Ljk3ODI1Wk03LjIyODk1IDExLjgwNzJDNy4yMjg5NSAxMS4zODE0IDcuNTc0MTMgMTEuMDM2MiA3Ljk5OTkzIDExLjAzNjJWMTQuMjQ1QzkuMzQ2MzEgMTQuMjQ1IDEwLjQzNzggMTMuMTUzNiAxMC40Mzc4IDExLjgwNzJINy4yMjg5NVpNNy45OTk5MyAxMi41NzgyQzcuNTc0MTMgMTIuNTc4MiA3LjIyODk1IDEyLjIzMyA3LjIyODk1IDExLjgwNzJIMTAuNDM3OEMxMC40Mzc4IDEwLjQ2MDggOS4zNDYzMSA5LjM2OTM3IDcuOTk5OTMgOS4zNjkzN1YxMi41NzgyWk04Ljc3MDkxIDExLjgwNzJDOC43NzA5MSAxMi4yMzMgOC40MjU3MyAxMi41NzgyIDcuOTk5OTMgMTIuNTc4MlY5LjM2OTM3QzYuNjUzNTUgOS4zNjkzNyA1LjU2MjEgMTAuNDYwOCA1LjU2MjEgMTEuODA3Mkg4Ljc3MDkxWk03Ljk5OTkzIDExLjAzNjJDOC40MjU3MyAxMS4wMzYyIDguNzcwOTEgMTEuMzgxNCA4Ljc3MDkxIDExLjgwNzJINS41NjIxQzUuNTYyMSAxMy4xNTM2IDYuNjUzNTUgMTQuMjQ1IDcuOTk5OTMgMTQuMjQ1VjExLjAzNjJaXCIsZmlsbDpcIndoaXRlXCIsbWFzazpcInVybCgjcGF0aC0yLWluc2lkZS0xXzZfMjYyMDMzKVwifSldfSkpfSw3NDI5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZpbGxlZENpcmNsZUljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkZpbGxlZENpcmNsZUljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwiZ1wiLE9iamVjdC5hc3NpZ24oe2lkOlwiLlNsb3RcIn0se2NoaWxkcmVuOigwLG8uanN4KShcImNpcmNsZVwiLHtpZDpcIkVsbGlwc2UgMVwiLGN4OlwiOFwiLGN5OlwiOFwiLHI6XCI4XCIsZmlsbDp0fSl9KSl9KSl9fSw2Nzk1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZpbHRlckljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkZpbHRlckljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTJcIixoZWlnaHQ6XCI3XCIsdmlld0JveDpcIjAgMCAxMiA3XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk00IDYuNUM0IDYuMzY3MzkgNC4wNTI2OCA2LjI0MDIxIDQuMTQ2NDUgNi4xNDY0NUM0LjI0MDIxIDYuMDUyNjggNC4zNjczOSA2IDQuNSA2SDcuNUM3LjYzMjYxIDYgNy43NTk3OSA2LjA1MjY4IDcuODUzNTUgNi4xNDY0NUM3Ljk0NzMyIDYuMjQwMjEgOCA2LjM2NzM5IDggNi41QzggNi42MzI2MSA3Ljk0NzMyIDYuNzU5NzkgNy44NTM1NSA2Ljg1MzU1QzcuNzU5NzkgNi45NDczMiA3LjYzMjYxIDcgNy41IDdINC41QzQuMzY3MzkgNyA0LjI0MDIxIDYuOTQ3MzIgNC4xNDY0NSA2Ljg1MzU1QzQuMDUyNjggNi43NTk3OSA0IDYuNjMyNjEgNCA2LjVaTTIgMy41QzIgMy4zNjczOSAyLjA1MjY4IDMuMjQwMjEgMi4xNDY0NSAzLjE0NjQ1QzIuMjQwMjEgMy4wNTI2OCAyLjM2NzM5IDMgMi41IDNIOS41QzkuNjMyNjEgMyA5Ljc1OTc5IDMuMDUyNjggOS44NTM1NSAzLjE0NjQ1QzkuOTQ3MzIgMy4yNDAyMSAxMCAzLjM2NzM5IDEwIDMuNUMxMCAzLjYzMjYxIDkuOTQ3MzIgMy43NTk3OSA5Ljg1MzU1IDMuODUzNTVDOS43NTk3OSAzLjk0NzMyIDkuNjMyNjEgNCA5LjUgNEgyLjVDMi4zNjczOSA0IDIuMjQwMjEgMy45NDczMiAyLjE0NjQ1IDMuODUzNTVDMi4wNTI2OCAzLjc1OTc5IDIgMy42MzI2MSAyIDMuNVpNMCAwLjVDMCAwLjM2NzM5MiAwLjA1MjY3ODUgMC4yNDAyMTUgMC4xNDY0NDcgMC4xNDY0NDdDMC4yNDAyMTUgMC4wNTI2Nzg1IDAuMzY3MzkyIDAgMC41IDBIMTEuNUMxMS42MzI2IDAgMTEuNzU5OCAwLjA1MjY3ODUgMTEuODUzNiAwLjE0NjQ0N0MxMS45NDczIDAuMjQwMjE1IDEyIDAuMzY3MzkyIDEyIDAuNUMxMiAwLjYzMjYwOCAxMS45NDczIDAuNzU5Nzg1IDExLjg1MzYgMC44NTM1NTNDMTEuNzU5OCAwLjk0NzMyMSAxMS42MzI2IDEgMTEuNSAxSDAuNUMwLjM2NzM5MiAxIDAuMjQwMjE1IDAuOTQ3MzIxIDAuMTQ2NDQ3IDAuODUzNTUzQzAuMDUyNjc4NSAwLjc1OTc4NSAwIDAuNjMyNjA4IDAgMC41WlwiLGZpbGw6dH0pfSkpfX0sMTE3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZsb3BweURpc2tJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5GbG9wcHlEaXNrSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxMlwiLGhlaWdodDpcIjEyXCIsdmlld0JveDpcIjAgMCAxMiAxMlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMS44NzUgMi4xODc1QzEuODc1IDIuMTUyOTggMS45MDI5OCAyLjEyNSAxLjkzNzUgMi4xMjVIOC4yMzAzOUM4LjI0Njk3IDIuMTI1IDguMjYyODcgMi4xMzE1OCA4LjI3NDU5IDIuMTQzMzFMOS45ODE2OSAzLjg1MDQxQzkuOTkzNDEgMy44NjIxMyAxMCAzLjg3ODAzIDEwIDMuODk0NjFWMTAuMTg3NUMxMCAxMC4yMjIgOS45NzIwMiAxMC4yNSA5LjkzNzUgMTAuMjVIMS45Mzc1QzEuOTAyOTggMTAuMjUgMS44NzUgMTAuMjIyIDEuODc1IDEwLjE4NzVWMi4xODc1Wk0xLjkzNzUgMS4yNUMxLjQxOTczIDEuMjUgMSAxLjY2OTczIDEgMi4xODc1VjEwLjE4NzVDMSAxMC43MDUzIDEuNDE5NzMgMTEuMTI1IDEuOTM3NSAxMS4xMjVIOS45Mzc1QzEwLjQ1NTMgMTEuMTI1IDEwLjg3NSAxMC43MDUzIDEwLjg3NSAxMC4xODc1VjMuODk0NjFDMTAuODc1IDMuNjQ1OTcgMTAuNzc2MiAzLjQwNzUxIDEwLjYwMDQgMy4yMzE2OUw4Ljg5MzMxIDEuNTI0NTlDOC43MTc0OSAxLjM0ODc3IDguNDc5MDMgMS4yNSA4LjIzMDM5IDEuMjVIMS45Mzc1Wk0yLjg0OTI0IDMuNDA4MUMyLjg0OTI0IDMuMjM3NTQgMi45ODc1MSAzLjA5OTI3IDMuMTU4MDcgMy4wOTkyN0g3LjQ4MTZDNy42NTIxNSAzLjA5OTI3IDcuNzkwNDIgMy4yMzc1NCA3Ljc5MDQyIDMuNDA4MVY0LjY0MzM5QzcuNzkwNDIgNC44MTM5NSA3LjY1MjE1IDQuOTUyMjEgNy40ODE2IDQuOTUyMjFIMy4xNTgwN0MyLjk4NzUxIDQuOTUyMjEgMi44NDkyNCA0LjgxMzk1IDIuODQ5MjQgNC42NDMzOVYzLjQwODFaTTQuNTM2OCA2LjYzOTc3QzQuODI2MzggNi4zNTAxOSA1LjIxOTEzIDYuMTg3NTEgNS42Mjg2NSA2LjE4NzUxQzYuMDM4MTggNi4xODc1MSA2LjQzMDkzIDYuMzUwMTkgNi43MjA1MSA2LjYzOTc3QzcuMDEwMDkgNi45MjkzNSA3LjE3Mjc3IDcuMzIyMSA3LjE3Mjc3IDcuNzMxNjNDNy4xNzI3NyA4LjE0MTE1IDcuMDEwMDkgOC41MzM5IDYuNzIwNTEgOC44MjM0OEM2LjQzMDkzIDkuMTEzMDYgNi4wMzgxOCA5LjI3NTc0IDUuNjI4NjUgOS4yNzU3NEM1LjIxOTEzIDkuMjc1NzQgNC44MjYzOCA5LjExMzA2IDQuNTM2OCA4LjgyMzQ4QzQuMjQ3MjIgOC41MzM5IDQuMDg0NTQgOC4xNDExNSA0LjA4NDU0IDcuNzMxNjNDNC4wODQ1NCA3LjMyMjEgNC4yNDcyMiA2LjkyOTM1IDQuNTM2OCA2LjYzOTc3WlwiLGZpbGw6dCxyb2xlOlwiaW1nXCJ9KX0pKX19LDUyOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GcmFnbWVudHNJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5GcmFnbWVudHNJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjIwXCIsaGVpZ2h0OlwiMjBcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk04LjgwMDAxIDQuODAwMDJINC44MDAwMUMzLjkxNzYxIDQuODAwMDIgMy4yMDAwMSA1LjUxNzYyIDMuMjAwMDEgNi40MDAwMlYxMC40QzMuMjAwMDEgMTEuMjgyNCAzLjkxNzYxIDEyIDQuODAwMDEgMTJIOC44MDAwMUM5LjY4MjQxIDEyIDEwLjQgMTEuMjgyNCAxMC40IDEwLjRWNi40MDAwMkMxMC40IDUuNTE3NjIgOS42ODI0MSA0LjgwMDAyIDguODAwMDEgNC44MDAwMlpNMjAuMzU5MiA2LjQ2ODgyTDE3LjUzMTIgMy42NDAwMkMxNi45MDggMy4wMTYwMiAxNS44OTIgMy4wMTYwMiAxNS4yNjg4IDMuNjQwMDJMMTIuNDQwOCA2LjQ2ODgyQzExLjgxNjggNy4wOTI4MiAxMS44MTY4IDguMTA3MjIgMTIuNDQwOCA4LjczMTIyTDE1LjI2ODggMTEuNTZDMTUuNTgwOCAxMS44NzIgMTUuOTkwNCAxMi4wMjggMTYuNCAxMi4wMjhDMTYuODA5NiAxMi4wMjggMTcuMjE5MiAxMS44NzIgMTcuNTMxMiAxMS41NkwyMC4zNTkyIDguNzMxMjJDMjAuOTgzMiA4LjEwNzIyIDIwLjk4MzIgNy4wOTI4MiAyMC4zNTkyIDYuNDY4ODJaTTguODAwMDEgMTMuNkg0LjgwMDAxQzMuOTE3NjEgMTMuNiAzLjIwMDAxIDE0LjMxNzYgMy4yMDAwMSAxNS4yVjE5LjJDMy4yMDAwMSAyMC4wODI0IDMuOTE3NjEgMjAuOCA0LjgwMDAxIDIwLjhIOC44MDAwMUM5LjY4MjQxIDIwLjggMTAuNCAyMC4wODI0IDEwLjQgMTkuMlYxNS4yQzEwLjQgMTQuMzE3NiA5LjY4MjQxIDEzLjYgOC44MDAwMSAxMy42Wk0xNy42IDEzLjZIMTMuNkMxMi43MTc2IDEzLjYgMTIgMTQuMzE3NiAxMiAxNS4yVjE5LjJDMTIgMjAuMDgyNCAxMi43MTc2IDIwLjggMTMuNiAyMC44SDE3LjZDMTguNDgyNCAyMC44IDE5LjIgMjAuMDgyNCAxOS4yIDE5LjJWMTUuMkMxOS4yIDE0LjMxNzYgMTguNDgyNCAxMy42IDE3LjYgMTMuNlpcIixmaWxsOnR9KX0pKX19LDc3ODg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGlnaHRCdWxiRmlsbGVkSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuTGlnaHRCdWxiRmlsbGVkSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTBcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTAgMTJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46WygwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xLjgzIDEuMzEwMDhDMi4yNDQwOSAwLjg5MTY2NyAyLjczNzY4IDAuNTYwMzA3IDMuMjgxNzQgMC4zMzU1MDRDMy44MjU4MSAwLjExMDcwMSA0LjQwOTM0IC0wLjAwMzAwMzMzIDQuOTk4IDAuMDAxMDgyOTFDNi4xODYyOCAtMC4wMDMxMDc4NSA3LjMyOTA1IDAuNDU3NzMzIDguMTgyIDEuMjg1MDhDOC41OTg4MSAxLjY4NzE5IDguOTMwNDYgMi4xNjkwMyA5LjE1NzIzIDIuNzAxOTRDOS4zODQgMy4yMzQ4NSA5LjUwMTI1IDMuODA3OTMgOS41MDIgNC4zODcwOEM5LjUwMiA1LjY4MDA4IDguOTE3IDYuODMwMDggNy44ODMgNy44MjUwOEw3LjU3NyA5LjAwMDA4SDIuNDY2TDIuMjM2IDguMDM3MDhDMS4xNTQgNi45MDcwOCAwLjU1NiA1LjgxOTA4IDAuNSA0LjU4MjA4VjQuNTQ0MDhDMC41NCAzLjI0ODA4IDEuMDMzIDIuMTIxMDggMS44MzEgMS4zMTEwOEwxLjgzIDEuMzEwMDhaXCIsZmlsbDp0fSksKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTIuNzA0MSAxMEwyLjkzNzEgMTAuOTc4TDIuOTQ1MSAxMUMzLjA0NTEgMTEuMjk3IDMuMjM3MSAxMS41NDQgMy40NzkxIDExLjcxN0MzLjczMDEgMTEuODk3IDQuMDM3MSAxMS45OTkgNC4zNjExIDExLjk5OUg0LjM2MzFMNS43NDYxIDExLjk5NUw1Ljc2NzEgMTEuOTkzQzYuMDc1ODcgMTEuOTY2OSA2LjM2OTEzIDExLjg0NjUgNi42MDcxIDExLjY0OEM2LjgzODEgMTEuNDU0IDcuMDEzMSAxMS4xODggNy4wODcxIDEwLjg3NEw3LjMxNjEgMTBIMi43MDQxVjEwWlwiLGZpbGw6dH0pXX0pKX19LDM3MDM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGlnaHRCdWxiT3V0bGluZWRJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5MaWdodEJ1bGJPdXRsaW5lZEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTBcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTAgMTJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTQuOTk3NjYgMC4wMDEwMDE0OUMzLjc2ODY2IDAuMDAxMDAxNDkgMi42NDc2NiAwLjQ4MjAwMiAxLjgyOTY2IDEuMzExQzEuMDMxNjYgMi4xMjEgMC41Mzk2NTcgMy4yNDggMC40OTk2NTcgNC41NDRMMC40OTg2NTcgNC41NjNWNC41ODNDMC41NTU2NTcgNS44MTkgMS4xNTM2NiA2LjkwNyAyLjIzNTY2IDguMDM3TDIuOTM3NjYgMTAuOTc4TDIuOTQ0NjYgMTFDMy4wNDQ2NiAxMS4yOTcgMy4yMzY2NiAxMS41NDQgMy40Nzg2NiAxMS43MTdDMy43Mjk2NiAxMS44OTcgNC4wMzY2NiAxMS45OTkgNC4zNjE2NiAxMS45OTlMNS43NDU2NiAxMS45OTVMNS43NjY2NiAxMS45OTNDNi4wNzU0MiAxMS45NjY5IDYuMzY4NjkgMTEuODQ2NSA2LjYwNjY2IDExLjY0OEM2LjgzNzY2IDExLjQ1NCA3LjAxMjY2IDExLjE4OCA3LjA4NjY2IDEwLjg3NEw3Ljg4MjY2IDcuODI0QzguOTE2NjYgNi44MyA5LjUwMDY2IDUuNjggOS41MDA2NiA0LjM4N0M5LjQ5OTkxIDMuODA3ODUgOS4zODI2NiAzLjIzNDc3IDkuMTU1ODkgMi43MDE4NkM4LjkyOTEyIDIuMTY4OTUgOC41OTc0NiAxLjY4NzExIDguMTgwNjYgMS4yODVDNy4zMjc5NiAwLjQ1Nzg5NCA2LjE4NTU5IC0wLjAwMjkyNzg4IDQuOTk3NjYgMC4wMDEwMDE0OVpNMi41NDI2NiAyLjAxM0MyLjg2MzQ0IDEuNjg4NzEgMy4yNDU5NiAxLjQzMTk4IDMuNjY3NjIgMS4yNThDNC4wODkyOCAxLjA4NDAxIDQuNTQxNTMgMC45OTYyODMgNC45OTc2NiAxQzUuOTI1MTQgMC45OTU3ODQgNi44MTc0NCAxLjM1NDcxIDcuNDgzNjYgMkM3LjgwNDcxIDIuMzA5MDQgOC4wNjAyMyAyLjY3OTU3IDguMjM0OTYgMy4wODk1MUM4LjQwOTY5IDMuNDk5NDUgOC41MDAwNSAzLjk0MDM4IDguNTAwNjYgNC4zODZDOC41MDA2NiA1LjM3NyA4LjA0NzY2IDYuMzEyIDcuMDk2NjYgNy4xOTFMNi45ODg2NiA3LjI5MUw2LjU0MjY2IDlIMy40OTM2NkwzLjE0NDY2IDcuNTM2TDMuMDQ3NjYgNy40MzZDMS45OTk2NiA2LjM3MiAxLjU0NzY2IDUuNDggMS40OTg2NiA0LjU1N0MxLjUzNjY2IDMuNTA5IDEuOTMyNjYgMi42MzIgMi41NDI2NiAyLjAxNFYyLjAxM1pNMy43MzI2NiAxMEg2LjI4MjY2TDYuMTE3NjYgMTAuNjI3TDYuMTE0NjYgMTAuNjRDNi4wOTIxMSAxMC43MzQyIDYuMDM5NDQgMTAuODE4NSA1Ljk2NDY2IDEwLjg4QzUuODg4NzMgMTAuOTQzNSA1Ljc5NTk1IDEwLjk4MzQgNS42OTc2NiAxMC45OTVMNC4zNjA2NiAxMUM0LjI1MzIxIDExLjAwMDMgNC4xNDgzMyAxMC45NjcxIDQuMDYwNjYgMTAuOTA1QzMuOTg3NyAxMC44NTM2IDMuOTMxMzkgMTAuNzgyIDMuODk4NjYgMTAuNjk5TDMuNzMxNjYgMTBIMy43MzI2NlpcIixmaWxsOnR9KX0pKX19LDgzMTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTG9ja2VkQ2xvc2VkRmlsbGVkSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuTG9ja2VkQ2xvc2VkRmlsbGVkSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNNS4wMDAwMyA0LjYzNjIzQzUuMDAwMDMgMy43NjA1MiA1LjI0MjIyIDMuMTA1NjEgNS42NDMyNyAyLjY3Mzc4QzYuMDM5MzggMi4yNDcyNyA2LjY0NTg1IDEuOTc4NTIgNy41MDE0MyAxLjk3ODUyQzguMzU3NDggMS45Nzg1MiA4Ljk2MzA5IDIuMjQ2NzMgOS4zNTgyNyAyLjY3MjNDOS43NTg0MSAzLjEwMzIxIDEwIDMuNzU3MjkgMTAgNC42MzM0NlY2LjUwMDIxSDExVjQuNjMzNDZDMTEgMy41NzkxNyAxMC43MDc2IDIuNjU1NzggMTAuMDkxMSAxLjk5MTgzQzkuNDY5NTUgMS4zMjI1NCA4LjU3NTg2IDAuOTc4NTE2IDcuNTAxNDMgMC45Nzg1MTZDNi40MjY3OCAwLjk3ODUxNiA1LjUzMjU1IDEuMzIzNSA0LjkxMDUyIDEuOTkzMjhDNC4yOTM0MiAyLjY1Nzc1IDQuMDAwMDMgMy41ODE2OSA0LjAwMDAzIDQuNjM2MjNWNi41MDAyMUg1LjAwMDAzVjQuNjM2MjNaTTMgNi41MDAyMUMyLjcyMzg2IDYuNTAwMjEgMi41IDYuNzI0MDcgMi41IDcuMDAwMjFWMTMuMDAwMkMyLjUgMTMuMjc2NCAyLjcyMzg2IDEzLjUwMDIgMyAxMy41MDAySDEyQzEyLjI3NjEgMTMuNTAwMiAxMi41IDEzLjI3NjQgMTIuNSAxMy4wMDAyVjcuMDAwMjFDMTIuNSA2LjcyNDA3IDEyLjI3NjEgNi41MDAyMSAxMiA2LjUwMDIxSDNaXCIsZmlsbDp0LHJvbGU6XCJpbWdcIn0pfSkpfX0sNTcyOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5NaW5pbWl6ZUljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0Lk1pbmltaXplSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMi4xNjYwMiAxMkMyLjE2NjAyIDExLjcyMzkgMi4zODk4NyAxMS41IDIuNjY2MDIgMTEuNUgxMy4zMzI3QzEzLjYwODggMTEuNSAxMy44MzI3IDExLjcyMzkgMTMuODMyNyAxMkMxMy44MzI3IDEyLjI3NjEgMTMuNjA4OCAxMi41IDEzLjMzMjcgMTIuNUgyLjY2NjAyQzIuMzg5ODcgMTIuNSAyLjE2NjAyIDEyLjI3NjEgMi4xNjYwMiAxMlpcIixmaWxsOnQscm9sZTpcImltZ1wifSl9KSl9fSwzNzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuT3BlbkZpbkljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0Lk9wZW5GaW5JY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xNC4yNjg1IDUuNzM5MTZDMTQuMTc4NSA1LjY0OTA2IDE0LjA4MTcgNS41NjU5MiAxMy45NzkgNS40OTA0N0wxMy45NDEyIDUuNDY0MjlDMTMuOTE5NiA1LjQ0OTE5IDEzLjg5ODQgNS40MzM1OCAxMy44NzYzIDUuNDE4OThDMTMuODU0MSA1LjQwNDM4IDEzLjgyODQgNS4zODg3OCAxMy44MDQ4IDUuMzc0MThMMTMuNzcxNSA1LjM1MzU0QzEzLjc0MTggNS4zMzU5MiAxMy43MTE2IDUuMzE5MyAxMy42ODE0IDUuMzAzMTlMMTMuNjYzOCA1LjI5MzYzQzEzLjMwNjUgNS4xMDYxOCAxMi45MDkxIDUuMDA4MDcgMTIuNTA1NyA1LjAwNzY4QzExLjg0MTcgNS4wMDcxNSAxMS4yMDUyIDQuNzQyOTEgMTAuNzM2MiA0LjI3MzFDMTAuMjY3MSAzLjgwMzMgMTAuMDA0IDMuMTY2NDIgMTAuMDA0NiAyLjUwMjYyQzEwLjAwNjUgMS40OTIyMiA5LjM5OTMzIDAuNTgwMjE5IDguNDY2MzQgMC4xOTE5MTFDNy41MzMzNSAtMC4xOTYzOTcgNi40NTgyNiAwLjAxNTQ2NiA1Ljc0MjQ0IDAuNzI4NzAxQzUuMDI2NjEgMS40NDE5NCA0LjgxMTAzIDIuNTE2MDcgNS4xOTYyMSAzLjQ1MDJDNS41ODE0IDQuMzg0MzMgNi40OTE1IDQuOTk0NDcgNy41MDIxIDQuOTk2MUM4LjE2NjAzIDQuOTk2NjQgOC44MDI1NiA1LjI2MDg4IDkuMjcxNjEgNS43MzA2OEM5Ljc0MDY2IDYuMjAwNDkgMTAuMDAzOCA2LjgzNzM2IDEwLjAwMzEgNy41MDExN0MxMC4wMDI2IDguMTY0OTcgOS43MzgzIDguODAxMzcgOS4yNjg0IDkuMjcwMzJDOC43OTg1IDkuNzM5MjggOC4xNjE1IDEwLjAwMjQgNy40OTc1NiAxMC4wMDE3QzYuODM0MTMgMTAuMDAyMiA2LjE5NzcyIDkuNzM4OTQgNS43Mjg2NSA5LjI2OTg3QzUuMjU5NTggOC44MDA4IDQuOTk2MzYgOC4xNjQ0NyA0Ljk5NzAzIDcuNTAxMTdDNC45OTcwMyA2LjEyMTU1IDMuODc4NDEgNS4wMDMxNSAyLjQ5ODUyIDUuMDAzMTVDMS4xMTg2MiA1LjAwMzE1IDAgNi4xMjE1NSAwIDcuNTAxMTdDMCA4Ljg4MDc4IDEuMTE4NjIgOS45OTkxOCAyLjQ5ODUyIDkuOTk5MThDMy44Nzg0MSA5Ljk5OTE4IDQuOTk3MDMgMTEuMTE3NiA0Ljk5NzAzIDEyLjQ5NzJDNC45OTcwMyAxMy44Nzk1IDYuMTE3OCAxNSA3LjUwMDMzIDE1QzguODgyODcgMTUgMTAuMDAzNiAxMy44Nzk1IDEwLjAwMzYgMTIuNDk3MkMxMC4wMDM2IDExLjExNzYgMTEuMTIyMyA5Ljk5OTE4IDEyLjUwMjEgOS45OTkxOEMxMi45NDgyIDkuOTk5NDggMTMuMzg2MiA5Ljg4MDIyIDEzLjc3MDUgOS42NTM4M0MxMy44MDM4IDkuNjM0MiAxMy44MzY1IDkuNjEzNTYgMTMuODcxMiA5LjU5MjQxTDEzLjg3ODMgOS41ODc4OEMxMy45MDg1IDkuNTY3NzUgMTMuOTM4NyA5LjU0NjYgMTMuOTY3OSA5LjUyNTQ2TDEzLjk4MSA5LjUxNjRDMTQuMDA3MiA5LjQ5NzI3IDE0LjAzMTQgOS40NzY2MiAxNC4wNTkxIDkuNDU1OThMMTQuMDgxMiA5LjQzODg3QzE0LjEwNTQgOS40MTkyMyAxNC4xMjg2IDkuMzk4NTkgMTQuMTUyMiA5LjM3Nzk1TDE0LjE3NzkgOS4zNTU4QzE0LjIwODEgOS4zMjg2MiAxNC4yMzc4IDkuMzAwNDIgMTQuMjY3IDkuMjcxMjNMMTQuMjcxNiA5LjI2NzJDMTQuMzc5NCA5LjE1ODg3IDE0LjQ3NzIgOS4wNDA5MSAxNC41NjM2IDguOTE0OEMxNC41ODI0IDguODg3NjEgMTQuNjAwNSA4Ljg2MDA5IDE0LjYxOCA4LjgzMjIzQzE1LjIzNyA3Ljg0NTg0IDE1LjA5MiA2LjU2MjY3IDE0LjI2ODUgNS43MzkxNlpcIixmaWxsOnQscm9sZTpcImltZ1wifSl9KSl9fSw5OTQwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlBhZ2VJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5QYWdlSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNFwiLGhlaWdodDpcIjE4XCIsdmlld0JveDpcIjAgMCAxNCAxOFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMTEuOTk5NyAwLjY2Njk5MkgxLjk5OTY3QzEuMDgwNTEgMC42NjY5OTIgMC4zMzMwMDggMS40MTQ0OSAwLjMzMzAwOCAyLjMzMzY2VjE1LjY2N0MwLjMzMzAwOCAxNi41ODYyIDEuMDgwNTEgMTcuMzMzNyAxLjk5OTY3IDE3LjMzMzdIMTEuOTk5N0MxMi45MTg4IDE3LjMzMzcgMTMuNjY2MyAxNi41ODYyIDEzLjY2NjMgMTUuNjY3VjIuMzMzNjZDMTMuNjY2MyAxLjQxNDQ5IDEyLjkxODggMC42NjY5OTIgMTEuOTk5NyAwLjY2Njk5MlpNNy40MTYzNCA4LjE2Njk5SDMuMjQ5NjdDMy4wMTk2NyA4LjE2Njk5IDIuODMzMDEgNy45ODAzMyAyLjgzMzAxIDcuNzUwMzNWNi45MTY5OUMyLjgzMzAxIDYuNjg2OTkgMy4wMTk2NyA2LjUwMDMzIDMuMjQ5NjcgNi41MDAzM0g3LjQxNjM0QzcuNjQ2MzQgNi41MDAzMyA3LjgzMzAxIDYuNjg2OTkgNy44MzMwMSA2LjkxNjk5VjcuNzUwMzNDNy44MzMwMSA3Ljk4MDMzIDcuNjQ2MzQgOC4xNjY5OSA3LjQxNjM0IDguMTY2OTlaTTEwLjc0OTcgNC44MzM2NkgzLjI0OTY3QzMuMDE5NjcgNC44MzM2NiAyLjgzMzAxIDQuNjQ2OTkgMi44MzMwMSA0LjQxNjk5VjMuNTgzNjZDMi44MzMwMSAzLjM1MzY2IDMuMDE5NjcgMy4xNjY5OSAzLjI0OTY3IDMuMTY2OTlIMTAuNzQ5N0MxMC45Nzk3IDMuMTY2OTkgMTEuMTY2MyAzLjM1MzY2IDExLjE2NjMgMy41ODM2NlY0LjQxNjk5QzExLjE2NjMgNC42NDY5OSAxMC45Nzk3IDQuODMzNjYgMTAuNzQ5NyA0LjgzMzY2WlwiLGZpbGw6dH0pfSkpfX0sMTAwMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5SZWREb3RJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5SZWREb3RJY29uPWU9Pnt2YXIgdD1yKGUsW10pO3JldHVybigwLG8uanN4cykoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjhcIixoZWlnaHQ6XCI4XCIsdmlld0JveDpcIjAgMCA4IDhcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sdCx7Y2hpbGRyZW46WygwLG8uanN4KShcInJlY3RcIix7eDpcIjAuNVwiLHk6XCIwLjVcIix3aWR0aDpcIjdcIixoZWlnaHQ6XCI3XCIscng6XCIzLjVcIixmaWxsOlwiI0MyMTMxM1wifSksKDAsby5qc3gpKFwicmVjdFwiLHt4OlwiMC41XCIseTpcIjAuNVwiLHdpZHRoOlwiN1wiLGhlaWdodDpcIjdcIixyeDpcIjMuNVwiLHN0cm9rZTpcIiNGMUYwRjFcIn0pXX0pKX19LDE1Mzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU3RhY2tJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5TdGFja0ljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMjBcIixoZWlnaHQ6XCIyMFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTE0LjIxNzggMy4wMDA5MkMxNC4xNTA0IDMuMDA1MTQgMTQuMDgzOSAzLjAxODQ0IDE0LjAyIDMuMDQwNDdMMy41MTk4NiA2LjQyODdDMy4zNjg2NCA2LjQ3NzQzIDMuMjM2ODEgNi41NzI5MSAzLjE0MzM1IDYuNzAxMzhDMy4wNDk4OSA2LjgyOTg2IDIuOTk5NjQgNi45ODQ2OSAyLjk5OTgzIDcuMTQzNTZWMTUuNzU0QzIuOTk4NDMgMTUuODUzNCAzLjAxNjc5IDE1Ljk1MjEgMy4wNTM4NSAxNi4wNDQzQzMuMDkwOTEgMTYuMTM2NiAzLjE0NTkzIDE2LjIyMDUgMy4yMTU3MSAxNi4yOTEzQzMuMjg1NSAxNi4zNjIxIDMuMzY4NjUgMTYuNDE4MyAzLjQ2MDM1IDE2LjQ1NjZDMy41NTIwNCAxNi40OTUgMy42NTA0NSAxNi41MTQ3IDMuNzQ5ODQgMTYuNTE0N0MzLjg0OTI0IDE2LjUxNDcgMy45NDc2NCAxNi40OTUgNC4wMzkzNCAxNi40NTY2QzQuMTMxMDMgMTYuNDE4MyA0LjIxNDE5IDE2LjM2MjEgNC4yODM5NyAxNi4yOTEzQzQuMzUzNzUgMTYuMjIwNSA0LjQwODc4IDE2LjEzNjYgNC40NDU4NCAxNi4wNDQzQzQuNDgyOSAxNS45NTIxIDQuNTAxMjYgMTUuODUzNCA0LjQ5OTg1IDE1Ljc1NFY3LjY4ODQ5TDE0LjQ4IDQuNDY3MjVDMTQuNjQ5IDQuNDE1MjkgMTQuNzk0MiA0LjMwNTMyIDE0Ljg5IDQuMTU2NzRDMTQuOTg1OCA0LjAwODE1IDE1LjAyNiAzLjgzMDUgMTUuMDAzNiAzLjY1NTE0QzE0Ljk4MTIgMy40Nzk3NyAxNC44OTc1IDMuMzE3OTcgMTQuNzY3NCAzLjE5ODI3QzE0LjYzNzMgMy4wNzg1NyAxNC40NjkxIDMuMDA4NjggMTQuMjkyNSAzLjAwMDkyQzE0LjI2NzYgMi45OTk2NyAxNC4yNDI3IDIuOTk5NjcgMTQuMjE3OCAzLjAwMDkyWk0xNy4yMTc4IDUuMjUwOTVDMTcuMTUwNCA1LjI1NTE3IDE3LjA4MzkgNS4yNjg0OCAxNy4wMjAxIDUuMjkwNUw2LjUxOTkgOC42Nzg3NEM2LjM2ODY5IDguNzI3NDYgNi4yMzY4NSA4LjgyMjk0IDYuMTQzMzkgOC45NTE0MkM2LjA0OTkzIDkuMDc5ODkgNS45OTk2OCA5LjIzNDcyIDUuOTk5ODggOS4zOTM1OVYxOC4wMDQxQzUuOTk4NDcgMTguMTAzNSA2LjAxNjgzIDE4LjIwMjEgNi4wNTM4OSAxOC4yOTQ0QzYuMDkwOTUgMTguMzg2NiA2LjE0NTk3IDE4LjQ3MDUgNi4yMTU3NiAxOC41NDEzQzYuMjg1NTQgMTguNjEyMSA2LjM2ODcgMTguNjY4MyA2LjQ2MDM5IDE4LjcwNjZDNi41NTIwOSAxOC43NDUgNi42NTA0OSAxOC43NjQ4IDYuNzQ5ODkgMTguNzY0OEM2Ljg0OTI4IDE4Ljc2NDggNi45NDc2OSAxOC43NDUgNy4wMzkzOCAxOC43MDY2QzcuMTMxMDggMTguNjY4MyA3LjIxNDIzIDE4LjYxMjEgNy4yODQwMiAxOC41NDEzQzcuMzUzOCAxOC40NzA1IDcuNDA4ODIgMTguMzg2NiA3LjQ0NTg4IDE4LjI5NDRDNy40ODI5NCAxOC4yMDIxIDcuNTAxMyAxOC4xMDM1IDcuNDk5OSAxOC4wMDQxVjkuOTM4NTJMMTcuNDggNi43MTcyOEMxNy42NDkgNi42NjUzMyAxNy43OTQyIDYuNTU1MzUgMTcuODkgNi40MDY3N0MxNy45ODU4IDYuMjU4MTggMTguMDI2MSA2LjA4MDU0IDE4LjAwMzYgNS45MDUxN0MxNy45ODEyIDUuNzI5ODEgMTcuODk3NiA1LjU2OCAxNy43Njc1IDUuNDQ4M0MxNy42Mzc0IDUuMzI4NjEgMTcuNDY5MSA1LjI1ODcxIDE3LjI5MjUgNS4yNTA5NUMxNy4yNjc2IDUuMjQ5NzEgMTcuMjQyNyA1LjI0OTcxIDE3LjIxNzggNS4yNTA5NVpNMjAuMTkzIDcuNTA1MzhDMjAuMTM0NCA3LjUwOTgyIDIwLjA3NTggNy41MjE5NyAyMC4wMTg2IDcuNTQwNTNMOS41MTg0OCAxMC45Mjg4QzkuMjA5NDggMTEuMDI5MyA4Ljk5OTkyIDExLjMxODEgOC45OTk5MiAxMS42NDM2VjIwLjI1NDFDOC45OTk5MiAyMC40OTc5IDkuMTE4MjkgMjAuNzI2MiA5LjMxNzggMjAuODY2NEM5LjQ0NjA1IDIwLjk1NzIgOS41OTY5MyAyMS4wMDQxIDkuNzQ5OTMgMjEuMDA0MUM5LjgzNDY4IDIxLjAwNDEgOS45MjAxNCAyMC45ODk0IDEwLjAwMTkgMjAuOTYwMkwyMC41MDIgMTcuMjEwMUMyMC44MDA2IDE3LjEwNDQgMjEuMDAwMSAxNi44MjEzIDIxLjAwMDEgMTYuNTA0VjguMjUzOTJDMjEuMDAwMSA4LjAxNDY3IDIwLjg4NTMgNy43ODkyMiAyMC42OTEgNy42NDc0N0MyMC41NDU5IDcuNTQxNzIgMjAuMzY4OCA3LjQ5MjA1IDIwLjE5MyA3LjUwNTM4WlwiLGZpbGw6dH0pfSkpfX0sNDAyMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TdG9yZWZyb250SWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuU3RvcmVmcm9udEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMjBcIixoZWlnaHQ6XCIyMFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTUgM0M0LjQ0OCAzIDQgMy40NDggNCA0QzQgNC41NTIgNC40NDggNSA1IDVIMTlDMTkuNTUyIDUgMjAgNC41NTIgMjAgNEMyMCAzLjQ0OCAxOS41NTIgMyAxOSAzSDVaTTQuNjE3MTkgN0M0LjIzODE5IDcgMy44OTM2MSA3LjIxMzczIDMuNzI0NjEgNy41NTI3M0wyLjEwNTQ3IDEwLjc4OTFDMi4wMzU0NyAxMC45MjgxIDIgMTEuMDgxMyAyIDExLjIzNjNWMTJDMiAxMi41NTIgMi40NDggMTMgMyAxM1YxOUMzIDIwLjEwNSAzLjg5NSAyMSA1IDIxSDE5QzIwLjEwNSAyMSAyMSAyMC4xMDUgMjEgMTlWMTNDMjEuNTUyIDEzIDIyIDEyLjU1MiAyMiAxMlYxMS4yMzYzQzIyIDExLjA4MTMgMjEuOTY0NSAxMC45MjgxIDIxLjg5NDUgMTAuNzg5MUwyMC4yNzU0IDcuNTUyNzNDMjAuMTA2NCA3LjIxMzczIDE5Ljc2MTggNyAxOS4zODI4IDdINC42MTcxOVpNNiAxM0gxOEMxOC41NTIgMTMgMTkgMTMuNDQ4IDE5IDE0VjE4QzE5IDE4LjU1MiAxOC41NTIgMTkgMTggMTlINkM1LjQ0OCAxOSA1IDE4LjU1MiA1IDE4VjE0QzUgMTMuNDQ4IDUuNDQ4IDEzIDYgMTNaXCIsZmlsbDp0fSl9KSl9fSw3OTM3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LldvcmtzcGFjZUljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LldvcmtzcGFjZUljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4cykoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIscm9sZTpcImltZ1wifSxuLHtjaGlsZHJlbjpbKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTYuNzM4MTEgMi44MTI1SDMuNTMxMzdDMy4xMzQ0MiAyLjgxMjUgMi44MTI2MiAzLjEzNDMgMi44MTI2MiAzLjUzMTI1VjcuNTEyMDRDMi44MTI2MiA3LjkwOSAzLjEzNDQyIDguMjMwNzkgMy41MzEzNyA4LjIzMDc5SDYuNzM4MTFDNy4xMzUwNiA4LjIzMDc5IDcuNDU2ODYgNy45MDkgNy40NTY4NiA3LjUxMjA0VjMuNTMxMjVDNy40NTY4NiAzLjEzNDMgNy4xMzUwNiAyLjgxMjUgNi43MzgxMSAyLjgxMjVaXCIsZmlsbDp0fSksKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTEyLjE1NjUgNi4yNjc1OEg4Ljk0OTcxQzguNzUxMjMgNi4yNjc1OCA4LjU5MDMzIDYuNDI4NDggOC41OTAzMyA2LjYyNjk2VjExLjM4MThDOC41OTAzMyAxMS41ODAzIDguNzUxMjMgMTEuNzQxMiA4Ljk0OTcxIDExLjc0MTJIMTIuMTU2NUMxMi4zNTQ5IDExLjc0MTIgMTIuNTE1OCAxMS41ODAzIDEyLjUxNTggMTEuMzgxOFY2LjYyNjk2QzEyLjUxNTggNi40Mjg0OCAxMi4zNTQ5IDYuMjY3NTggMTIuMTU2NSA2LjI2NzU4WlwiLHN0cm9rZTp0LHN0cm9rZVdpZHRoOlwiMC43MTg3NTNcIn0pLCgwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xMi4xNTY0IDIuODEyNUg4Ljk0OTcxQzguNTUyNzUgMi44MTI1IDguMjMwOTYgMy4xMzQzIDguMjMwOTYgMy41MzEyNVY0LjQxNTg3QzguMjMwOTYgNC44MTI4MyA4LjU1Mjc1IDUuMTM0NjMgOC45NDk3MSA1LjEzNDYzSDEyLjE1NjRDMTIuNTUzNCA1LjEzNDYzIDEyLjg3NTIgNC44MTI4MyAxMi44NzUyIDQuNDE1ODdWMy41MzEyNUMxMi44NzUyIDMuMTM0MyAxMi41NTM0IDIuODEyNSAxMi4xNTY0IDIuODEyNVpcIixmaWxsOnR9KSwoMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNNi43Mzc5OCA5LjAwNDg4SDMuNTMxMjVDMy4xMzQzIDkuMDA0ODggMi44MTI1IDkuMzI2NjggMi44MTI1IDkuNzIzNjRWMTEuMzgyM0MyLjgxMjUgMTEuNzc5MyAzLjEzNDMgMTIuMTAxMSAzLjUzMTI1IDEyLjEwMTFINi43Mzc5OEM3LjEzNDk0IDEyLjEwMTEgNy40NTY3NCAxMS43NzkzIDcuNDU2NzQgMTEuMzgyM1Y5LjcyMzY0QzcuNDU2NzQgOS4zMjY2OCA3LjEzNDk0IDkuMDA0ODggNi43Mzc5OCA5LjAwNDg4WlwiLGZpbGw6dH0pXX0pKX19LDI3NzI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDM3OSksdCksbyhuKDQ3MTgpLHQpLG8obig3OTM3KSx0KSxvKG4oODMxMSksdCksbyhuKDU3MjkpLHQpLG8obig3Nzg4KSx0KSxvKG4oMzcwMyksdCksbyhuKDY3OTUpLHQpLG8obig4MjY1KSx0KSxvKG4oMTE3KSx0KSxvKG4oMTUzOSksdCksbyhuKDkyODUpLHQpLG8obig0MDIwKSx0KSxvKG4oNTI5KSx0KSxvKG4oMjQwMiksdCksbyhuKDIxNDcpLHQpLG8obig0ODI1KSx0KSxvKG4oNjQ0NyksdCksbyhuKDEyODEpLHQpLG8obig3NDI5KSx0KSxvKG4oOTk0MCksdCksbyhuKDEwMDIpLHQpfSwzMTE3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuSWNvbldpdGhCYWRnZT12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGE9byhuKDc1MTgpKSxsPW4oNzAwNikscz1uKDMxMzYpLGM9bigxMzM1KTt0Lkljb25XaXRoQmFkZ2U9ZT0+e3Zhcntjb3VudDp0PTAsbWF4Om59PWUsbz1yKGUsW1wiY291bnRcIixcIm1heFwiXSk7cmV0dXJuKDAsaS5qc3hzKSh1LHtjaGlsZHJlbjpbKDAsaS5qc3gpKGwuSWNvbixPYmplY3QuYXNzaWduKHt9LG8pKSx0PjAmJigwLGkuanN4KShmLHtjb3VudDp0LG1heDpufSldfSl9O2NvbnN0IHU9KDAsYS5kZWZhdWx0KShjLkJveClgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmAsZj0oMCxhLmRlZmF1bHQpKHMuQmFkZ2UpYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRyYW5zZm9ybTogc2NhbGUoNzAlKTtcbiAgcmlnaHQ6IC0keyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICB0b3A6IC0keyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmB9LDE0NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMzExNyksdCl9LDE5NDQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGFiZWw9dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPXIobig3NTE4KSksYT1uKDEzMzUpLGw9big3NzY5KSxzPW4oOTYzNCk7dC5MYWJlbD0oe2ljb246ZSx0ZXh0OnQsaGVscGVyVGV4dDpuLGh0bWxGb3I6cixpbmxpbmU6aX0pPT4oMCxvLmpzeHMpKGQsT2JqZWN0LmFzc2lnbih7aW5saW5lOml9LHtjaGlsZHJlbjpbKDAsby5qc3hzKShcImRpdlwiLE9iamVjdC5hc3NpZ24oe3N0eWxlOntkaXNwbGF5OlwiZmxleFwifX0se2NoaWxkcmVuOltcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UoKTplPygwLG8uanN4KShmLHtpY29uOmV9KTpudWxsLCgwLG8uanN4KSh1LE9iamVjdC5hc3NpZ24oe2FzOlwibGFiZWxcIixodG1sRm9yOnIsd2VpZ2h0OlwiYm9sZFwifSx7Y2hpbGRyZW46dH0pKV19KSksbiYmKDAsby5qc3gpKGMse2NoaWxkcmVuOm59KV19KSk7Y29uc3QgYz0oMCxpLmRlZmF1bHQpKGwuVGV4dClgXG4gIHNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuYCx1PSgwLGkuZGVmYXVsdCkobC5UZXh0KWBcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuYCxmPSgwLGkuZGVmYXVsdCkocy5JY29uKWBcbiAgbWFyZ2luLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH07XG4gIG1pbi13aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5zbWFsbH07XG4gIG1pbi1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuc21hbGx9O1xuICBhbGlnbi1zZWxmOiBjZW50ZXI7XG5gLGQ9KDAsaS5kZWZhdWx0KShhLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbi1ib3R0b206ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuXG4gICR7KHtpbmxpbmU6ZSx0aGVtZTp0fSk9PmUmJmBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgICAgbWFyZ2luLWxlZnQ6ICR7dC5weC5zbWFsbH07XFxuICAgICBmb250LXdlaWdodDogJHt0LmZvbnRXZWlnaHQubm9ybWFsfTtcXG4gIGB9XG5gfSw5MjM5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig4Mjc1KSx0KSxvKG4oNjkzKSx0KX0sODI3NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxvYWRlcj12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGE9byhuKDc1MTgpKSxsPW4oOTYzNCk7dC5Mb2FkZXI9KDAsYS5kZWZhdWx0KSgoZT0+e3ZhciB0PXIoZSxbXSk7cmV0dXJuKDAsaS5qc3gpKGwuSWNvbixPYmplY3QuYXNzaWduKHt9LHQse2NoaWxkcmVuOigwLGkuanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTAwJVwiLGhlaWdodDpcIjEwMCVcIix2aWV3Qm94OlwiMCAwIDM4IDM4XCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwifSx7Y2hpbGRyZW46KDAsaS5qc3gpKFwiZ1wiLE9iamVjdC5hc3NpZ24oe2ZpbGw6XCJub25lXCIsZmlsbFJ1bGU6XCJldmVub2RkXCJ9LHtjaGlsZHJlbjooMCxpLmpzeHMpKFwiZ1wiLE9iamVjdC5hc3NpZ24oe3RyYW5zZm9ybTpcInRyYW5zbGF0ZSgxIDEpXCIsc3Ryb2tlV2lkdGg6XCIyXCJ9LHtjaGlsZHJlbjpbKDAsaS5qc3gpKFwiY2lyY2xlXCIse3N0cm9rZU9wYWNpdHk6XCIuNVwiLGN4OlwiMThcIixjeTpcIjE4XCIscjpcIjE4XCJ9KSwoMCxpLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZDpcIk0zNiAxOGMwLTkuOTQtOC4wNi0xOC0xOC0xOFwifSx7Y2hpbGRyZW46KDAsaS5qc3gpKFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDE4IDE4XCIsdG86XCIzNjAgMTggMThcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifSl9KSldfSkpfSkpfSkpfSkpfSkpYGB9LDY5MzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGk9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH0sYT10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk9wZW5maW5Mb2FkZXI9dm9pZCAwO2NvbnN0IGw9big1ODkzKSxzPWkobig3NTE4KSksYz1uKDk2MzQpO3QuT3BlbmZpbkxvYWRlcj0oMCxzLmRlZmF1bHQpKChlPT57dmFyIHQ9YShlLFtdKTtyZXR1cm4oMCxsLmpzeCkoYy5JY29uLE9iamVjdC5hc3NpZ24oe30sdCx7Y2hpbGRyZW46KDAsbC5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTAwJVwiLGhlaWdodDpcIjEwMCVcIix2aWV3Qm94OlwiMCAwIDE4IDE4XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LHtjaGlsZHJlbjpbKDAsbC5qc3gpKHUse2Q6XCJcXG4gICAgICAgICAgICBNIDE3LjEyMjIgNi44ODdcXG4gICAgICAgICAgICBDIDE3LjAxNDEgNi43Nzg4NyAxNi44OTggNi42NzkxMSAxNi43NzQ4IDYuNTg4NTZcXG4gICAgICAgICAgICBMIDE2LjcyOTUgNi41NTcxNVxcbiAgICAgICAgICAgIEMgMTYuNzAzNSA2LjUzOTAzIDE2LjY3ODEgNi41MjAzIDE2LjY1MTUgNi41MDI3OFxcbiAgICAgICAgICAgIEMgMTYuNjI1IDYuNDg1MjYgMTYuNTk0MSA2LjQ2NjUzIDE2LjU2NTcgNi40NDkwMVxcbiAgICAgICAgICAgIEwgMTYuNTI1OSA2LjQyNDI0XFxuICAgICAgICAgICAgQyAxNi40OTAyIDYuNDAzMSAxNi40NTQgNi4zODMxNiAxNi40MTc3IDYuMzYzODNcXG4gICAgICAgICAgICBMIDE2LjM5NjYgNi4zNTIzNlxcbiAgICAgICAgICAgIEMgMTUuOTY3OCA2LjEyNzQyIDE1LjQ5MSA2LjAwOTY4IDE1LjAwNjggNi4wMDkyMlxcbiAgICAgICAgICAgIEMgMTQuMjEwMSA2LjAwODU4IDEzLjQ0NjMgNS42OTE0OSAxMi44ODM0IDUuMTI3NzJcXG4gICAgICAgICAgICBDIDEyLjMyMDUgNC41NjM5NSAxMi4wMDQ4IDMuNzk5NzEgMTIuMDA1NiAzLjAwMzE0XFxuICAgICAgICAgICAgQyAxMi4wMDc4IDEuNzkwNjYgMTEuMjc5MiAwLjY5NjI2MyAxMC4xNTk2IDAuMjMwMjkzXFxuICAgICAgICAgICAgQyA5LjA0MDAyIC0wLjIzNTY3NiA3Ljc0OTkyIDAuMDE4NTU5MiA2Ljg5MDkzIDAuODc0NDQxXFxuICAgICAgICAgICAgQyA2LjAzMTk0IDEuNzMwMzIgNS43NzMyMyAzLjAxOTI4IDYuMjM1NDYgNC4xNDAyNFxcbiAgICAgICAgICAgIEMgNi42OTc2OCA1LjI2MTE5IDcuNzg5OCA1Ljk5MzM3IDkuMDAyNTEgNS45OTUzMlxcbiAgICAgICAgICAgIEMgOS43OTkyNCA1Ljk5NTk2IDEwLjU2MzEgNi4zMTMwNSAxMS4xMjU5IDYuODc2ODJcXG4gICAgICAgICAgICBDIDExLjY4ODggNy40NDA1OSAxMi4wMDQ2IDguMjA0ODQgMTIuMDAzOCA5LjAwMTRcXG4gICAgICAgICAgICBDIDEyLjAwMzEgOS43OTc5NyAxMS42ODYgMTAuNTYxNiAxMS4xMjIxIDExLjEyNDRcXG4gICAgICAgICAgICBDIDEwLjU1ODIgMTEuNjg3MSA5Ljc5MzggMTIuMDAyOCA4Ljk5NzA4IDEyLjAwMlxcbiAgICAgICAgICAgIEMgOC4yMDA5NiAxMi4wMDI3IDcuNDM3MjcgMTEuNjg2NyA2Ljg3NDM4IDExLjEyMzhcXG4gICAgICAgICAgICBDIDYuMzExNSAxMC41NjEgNS45OTU2NCA5Ljc5NzM2IDUuOTk2NDQgOS4wMDE0XFxuICAgICAgICAgICAgQyA1Ljk5NjQ0IDcuMzQ1ODYgNC42NTQwOSA2LjAwMzc4IDIuOTk4MjIgNi4wMDM3OFxcbiAgICAgICAgICAgIEMgMS4zNDIzNSA2LjAwMzc4IDAgNy4zNDU4NiAwIDkuMDAxNFxcbiAgICAgICAgICAgIEMgMCAxMC42NTY5IDEuMzQyMzUgMTEuOTk5IDIuOTk4MjIgMTEuOTk5XFxuICAgICAgICAgICAgQyA0LjY1NDA5IDExLjk5OSA1Ljk5NjQ0IDEzLjM0MTEgNS45OTY0NCAxNC45OTY2XFxuICAgICAgICAgICAgQyA1Ljk5NjQ0IDE2LjY1NTMgNy4zNDEzNiAxOCA5LjAwMDQgMThcXG4gICAgICAgICAgICBDIDEwLjY1OTQgMTggMTIuMDA0NCAxNi42NTUzIDEyLjAwNDQgMTQuOTk2NlxcbiAgICAgICAgICAgIEMgMTIuMDA0NCAxMy4zNDExIDEzLjM0NjcgMTEuOTk5IDE1LjAwMjYgMTEuOTk5XFxuICAgICAgICAgICAgQyAxNS41Mzc5IDExLjk5OTQgMTYuMDYzNSAxMS44NTYzIDE2LjUyNDcgMTEuNTg0NlxcbiAgICAgICAgICAgIEMgMTYuNTY0NSAxMS41NjEgMTYuNjAzOCAxMS41MzYzIDE2LjY0NTUgMTEuNTEwOVxcbiAgICAgICAgICAgIEwgMTYuNjU0IDExLjUwNTVcXG4gICAgICAgICAgICBDIDE2LjY5MDIgMTEuNDgxMyAxNi43MjY1IDExLjQ1NTkgMTYuNzYxNSAxMS40MzA1XFxuICAgICAgICAgICAgTCAxNi43NzcyIDExLjQxOTdcXG4gICAgICAgICAgICBDIDE2LjgwODYgMTEuMzk2NyAxNi44Mzc2IDExLjM3MiAxNi44NzA5IDExLjM0NzJcXG4gICAgICAgICAgICBMIDE2Ljg5NzUgMTEuMzI2NlxcbiAgICAgICAgICAgIEMgMTYuOTI2NSAxMS4zMDMxIDE2Ljk1NDMgMTEuMjc4MyAxNi45ODI3IDExLjI1MzVcXG4gICAgICAgICAgICBMIDE3LjAxMzUgMTEuMjI3XFxuICAgICAgICAgICAgQyAxNy4wNDk3IDExLjE5NDMgMTcuMDg1NCAxMS4xNjA1IDE3LjEyMDQgMTEuMTI1NVxcbiAgICAgICAgICAgIEwgMTcuMTI1OSAxMS4xMjA2XFxuICAgICAgICAgICAgQyAxNy4yNTUzIDEwLjk5MDYgMTcuMzcyNiAxMC44NDkxIDE3LjQ3NjMgMTAuNjk3OFxcbiAgICAgICAgICAgIEMgMTcuNDk4OSAxMC42NjUxIDE3LjUyMDYgMTAuNjMyMSAxNy41NDE2IDEwLjU5ODdcXG4gICAgICAgICAgICBDIDE4LjI4NDMgOS40MTUgMTguMTEwNCA3Ljg3NTIgMTcuMTIyMiA2Ljg4N1pcXG4gICAgICAgICAgICBcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KSwoMCxsLmpzeCkoZix7Y3g6XCI5XCIsY3k6XCIzXCIscjpcIjIuOVwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixhbmdsZTowfSksKDAsbC5qc3gpKGYse2N4OlwiMTVcIixjeTpcIjlcIixyOlwiMi43NVwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixhbmdsZTotOTB9KSwoMCxsLmpzeCkoZix7Y3g6XCI5XCIsY3k6XCIxNVwiLHI6XCIyLjVcIixmaWxsOlwiY3VycmVudENvbG9yXCIsYW5nbGU6LTE4MH0pLCgwLGwuanN4KShmLHtjeDpcIjNcIixjeTpcIjlcIixyOlwiMi4yNVwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixhbmdsZTotMjcwfSldfSkpfSkpfSkpYGA7Y29uc3QgdT1zLmRlZmF1bHQucGF0aGBcbiAgQGtleWZyYW1lcyBsb2dvQW5pbWF0aW9uIHtcbiAgICAwJSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICAyNSUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgMzUlIHtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICAgIDYwJSB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgICA3NSUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgMTAwJSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgfVxuXG4gIGFuaW1hdGlvbjogbG9nb0FuaW1hdGlvbiAycyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmAsZj1zLmRlZmF1bHQuY2lyY2xlYFxuICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XG4gIGFuaW1hdGlvbjogJHsoe2FuZ2xlOmV9KT0+KGU9PnMua2V5ZnJhbWVzYFxuICAgIDAlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gICAgMjUlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgMzAlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNTAlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKCR7ZX1kZWcpO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNzAlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0zNjBkZWcpO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNzUlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0zNjBkZWcpO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gICAgMTAwJSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMzYwZGVnKTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuYCkoZSl9IDJzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYH0sNzAzMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5WYWxpZGF0aW9uRXJyb3I9dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPXIobig3NTE4KSksYT1uKDc3NjkpLGw9big5NjM0KTt0LlZhbGlkYXRpb25FcnJvcj0oe2NoaWxkcmVuOmV9KT0+KDAsby5qc3hzKShzLHtjaGlsZHJlbjpbKDAsby5qc3gpKGwuSWNvbix7aWNvbjpcIkV4Y2xhbWF0aW9uQ2lyY2xlZEZpbGxlZEljb25cIn0pLCgwLG8uanN4KShjLHtjaGlsZHJlbjplfSldfSk7Y29uc3Qgcz1pLmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW4tdG9wOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmAsYz0oMCxpLmRlZmF1bHQpKGEuVGV4dClgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuYH0sMzU4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU3R5bGVkSW5wdXRGaWVsZD10LkJhc2VJbnB1dD12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGE9big2Njg5KSxsPW8obig3NTE4KSkscz1uKDEzMzUpLGM9big5NTA3KSx1PW4oNzc2OSksZj1uKDcwMzApLGQ9bigxOTQ0KTt0LkJhc2VJbnB1dD0oMCxhLmZvcndhcmRSZWYpKCgoZSxuKT0+e3ZhcntjbGFzc05hbWU6byxyZW5kZXJJbnB1dDphLG1lc3NhZ2U6bCxsYWJlbDpzLHN0YXR1czpjLG5hbWU6dSxpY29uOnYsdHlwZTptPVwidGV4dFwiLGhlbHBlclRleHQ6QyxwbGFjZWhvbGRlcjp5fT1lLHc9cihlLFtcImNsYXNzTmFtZVwiLFwicmVuZGVySW5wdXRcIixcIm1lc3NhZ2VcIixcImxhYmVsXCIsXCJzdGF0dXNcIixcIm5hbWVcIixcImljb25cIixcInR5cGVcIixcImhlbHBlclRleHRcIixcInBsYWNlaG9sZGVyXCJdKTtjb25zdCBiPVwiY2hlY2tib3hcIj09PW18fFwicmFkaW9cIj09PW07cmV0dXJuKDAsaS5qc3hzKShnLE9iamVjdC5hc3NpZ24oe2ZsZXhEaXJlY3Rpb246XCJjb2x1bW5cIixhbGlnbkl0ZW1zOlwiZmxleC1zdGFydFwifSx7Y2hpbGRyZW46WygwLGkuanN4cykocCxPYmplY3QuYXNzaWduKHtpbmxpbmU6Yn0se2NoaWxkcmVuOlshIXMmJigwLGkuanN4KShkLkxhYmVsLHtpbmxpbmU6YixpY29uOnYsdGV4dDpzLGhlbHBlclRleHQ6QyxodG1sRm9yOnV9KSwhIWEmJmEoT2JqZWN0LmFzc2lnbih7bmFtZTp1LHN0YXR1czpjLHR5cGU6bX0sdykpLCFhJiYoMCxpLmpzeCkodC5TdHlsZWRJbnB1dEZpZWxkLE9iamVjdC5hc3NpZ24oe2NsYXNzTmFtZTpvLG5hbWU6dSxwbGFjZWhvbGRlcjp5LHN0YXR1czpjLHR5cGU6bX0sdyx7cmVmOm59KSldfSkpLGwmJihcImNyaXRpY2FsXCI9PT1jPygwLGkuanN4KShmLlZhbGlkYXRpb25FcnJvcix7Y2hpbGRyZW46bH0pOigwLGkuanN4KShoLE9iamVjdC5hc3NpZ24oe3N0YXR1czpjfSx7Y2hpbGRyZW46bH0pKSldfSkpfSkpLHQuQmFzZUlucHV0LmRpc3BsYXlOYW1lPVwiQmFzZUlucHV0XCI7Y29uc3QgcD0oMCxsLmRlZmF1bHQpKHMuQm94KWBcbiAgYWxpZ24taXRlbXM6ICR7KHtpbmxpbmU6ZX0pPT5lP1wiY2VudGVyXCI6XCJmbGV4LXN0YXJ0XCJ9O1xuICBmbGV4LWRpcmVjdGlvbjogJHsoe2lubGluZTplfSk9PmU/XCJyb3ctcmV2ZXJzZVwiOlwiY29sdW1uXCJ9O1xuICBqdXN0aWZ5LWNvbnRlbnQ6ICR7KHtpbmxpbmU6ZX0pPT5lP1wiZmxleC1lbmRcIjpcImZsZXgtc3RhcnRcIn07XG4gIHdpZHRoOiAxMDAlO1xuYCxoPSgwLGwuZGVmYXVsdCkodS5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplLHN0YXR1czp0fSk9PigwLGMuZ2V0U3RhdHVzQ29sb3IpKGUsdCxcInRleHRIZWxwXCIpfTtcbmAsZz0oMCxsLmRlZmF1bHQpKHMuQm94KWBcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbmA7dC5TdHlsZWRJbnB1dEZpZWxkPWwuZGVmYXVsdC5pbnB1dGBcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxjLmdldFN0YXR1c0NvbG9yKShlLHQsYy5QYWxldHRlLmlucHV0Qm9yZGVyKX07XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgYm94LXNoYWRvdzogJHsoe3RoZW1lOmV9KT0+ZS5zaGFkb3cuYmFzZX07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRDb2xvcn07XG4gIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gJHtlLnB4LmJhc2V9YH07XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuICB3aWR0aDogMTAwJTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsYy5nZXRTdGF0dXNDb2xvcikoZSx0LGMuUGFsZXR0ZS5pbnB1dEZvY3VzZWQpfTtcbiAgfVxuXG4gICY6ZGlzYWJsZWQge1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIH1cblxuICAmOmRpc2FibGVkOjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgaGFjayB0byBpbnZlcnQgdGhlIGNhbGVuZGFyIGljb24uIFRoaXMgb25seSB3b3JrcyBpbiBkYXJrIG1vZGUuXG4gICAqIFVudGlsIGVpdGhlciBsaWdodCBtb2RlIGlzIGEgdGhpbmcgb3Igd2UgZ2V0IGEgZGF0ZXRpbWUgcGlja2VyIGRlc2lnbiwgdGhpcyB3aWxsIGRvLlxuICAgKi9cblxuICA6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7XG4gICAgZmlsdGVyOiBpbnZlcnQoMSk7XG4gIH1cbmB9LDg4Nzg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDM1OCksdCl9LDE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9KSxpPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZyKHQsZSxuKTtyZXR1cm4gbyh0LGUpLHR9LGE9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbD10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNoZWNrYm94PXZvaWQgMDtjb25zdCBzPW4oNTg5MyksYz1pKG4oNjY4OSkpLHU9bChuKDc1MTgpKSxmPW4oODg3OCksZD1uKDk2MzQpLHA9big5NTA3KTt0LkNoZWNrYm94PWMuZm9yd2FyZFJlZigoKGUsdCk9Pnt2YXJ7c3RhdHVzOm59PWUscj1hKGUsW1wic3RhdHVzXCJdKTtyZXR1cm4oMCxzLmpzeCkoZi5CYXNlSW5wdXQsT2JqZWN0LmFzc2lnbih7fSxyLHt0eXBlOlwiY2hlY2tib3hcIixzdGF0dXM6bixyZW5kZXJJbnB1dDplPT57dmFyIHI9YShlLFtdKTtyZXR1cm4oMCxzLmpzeHMpKGgse2NoaWxkcmVuOlsoMCxzLmpzeCkobSxPYmplY3QuYXNzaWduKHtyZWY6dCxpZDpyLm5hbWUsdHlwZTpcImNoZWNrYm94XCJ9LHIpKSwoMCxzLmpzeCkoZyxPYmplY3QuYXNzaWduKHtzdGF0dXM6bn0se2NoaWxkcmVuOigwLHMuanN4KSh2LHt9KX0pKV19KX19KSl9KSksdC5DaGVja2JveC5kaXNwbGF5TmFtZT1cIkNoZWNrYm94XCI7Y29uc3QgaD11LmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmAsZz11LmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxwLmdldFN0YXR1c0NvbG9yKShlLHQsXCJ0ZXh0RGVmYXVsdFwiKX07XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5gLHY9KDAsdS5kZWZhdWx0KShkLkljb24pLmF0dHJzKHtpY29uOlwiQ2hlY2tJY29uXCIsc2l6ZTpcInNtYWxsXCJ9KWBcbiAgb3BhY2l0eTogMDtcbmAsbT11LmRlZmF1bHQuaW5wdXRgXG4gIG9wYWNpdHk6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICY6Y2hlY2tlZCArICR7ZytcIiBcIit2fSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gICY6aG92ZXIgKyAke2d9IHtcbiAgICBib3gtc2hhZG93OiAwIDAgMXB4IDFweCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRGb2N1c2VkfTtcbiAgfVxuXG4gICY6Zm9jdXMgKyAke2d9IHtcbiAgICBib3gtc2hhZG93OiAwIDAgMXB4IDFweCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRGb2N1c2VkfTtcbiAgfVxuXG4gICY6ZGlzYWJsZWQge1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIH1cblxuICAmOmRpc2FibGVkICsgJHtnfSB7XG4gICAgb3BhY2l0eTogMC41O1xuICB9XG5gfSw4MDUxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigxKSx0KX0sOTAyMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGk9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGVja2JveEdyb3VwPXZvaWQgMDtjb25zdCBhPW4oNTg5MyksbD1pKG4oNjY4OSkpLHM9aShuKDc1MTgpKSxjPW4oMTMzNSksdT1uKDc3NjkpLGY9big4MDUxKSxkPW4oNzAzMCk7dC5DaGVja2JveEdyb3VwPSh7ZGlzYWJsZWQ6ZSxnYXA6dD1cInNtYWxsXCIsaGVscGVyVGV4dDpuLGxhYmVsOnIsbWVzc2FnZTpvLGNoaWxkcmVuOmksdmFsaWRhdGlvbkVycm9yTWVzc2FnZTpzLHZhbHVlczpjLG9uQ2hhbmdlOnV9KT0+e2NvbnN0W3ksd109bC51c2VTdGF0ZShudWxsIT1jP2M6W10pLGI9ZT0+e2NvbnN0IHQ9ZS50YXJnZXQudmFsdWUsbj15LmluY2x1ZGVzKHQpP3kuZmlsdGVyKChlPT5lIT09dCkpOlsuLi55LHRdO3cobiksdSYmdShuKX07cmV0dXJuKDAsYS5qc3hzKSh2LHtjaGlsZHJlbjpbciYmKDAsYS5qc3hzKShwLHtjaGlsZHJlbjpbKDAsYS5qc3gpKGgsT2JqZWN0LmFzc2lnbih7d2VpZ2h0OlwiYm9sZFwifSx7Y2hpbGRyZW46cn0pKSxuJiYoMCxhLmpzeCkoZyx7Y2hpbGRyZW46bn0pXX0pLCgwLGEuanN4KShtLE9iamVjdC5hc3NpZ24oe2dhcDp0fSx7Y2hpbGRyZW46bC5DaGlsZHJlbi5tYXAoaSwodD0+e2NvbnN0IG49dDtyZXR1cm4gbi50eXBlPT09Zi5DaGVja2JveD9sLmNsb25lRWxlbWVudChuLHtkaXNhYmxlZDplLG9uQ2hhbmdlOmIsY2hlY2tlZDp5LmluY2x1ZGVzKG4ucHJvcHMudmFsdWUpfSk6bn0pKX0pKSwheS5sZW5ndGgmJnMmJigwLGEuanN4KShkLlZhbGlkYXRpb25FcnJvcix7Y2hpbGRyZW46c30pLG8/KDAsYS5qc3gpKEMsT2JqZWN0LmFzc2lnbih7ZGlzYWJsZWQ6ZX0se2NoaWxkcmVuOm99KSk6bnVsbF19KX07Y29uc3QgcD0oMCxzLmRlZmF1bHQpKGMuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWFyZ2luLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5gLGg9KDAscy5kZWZhdWx0KSh1LlRleHQpYFxuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbmAsZz0oMCxzLmRlZmF1bHQpKHUuVGV4dClgXG4gIHNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuYCx2PSgwLHMuZGVmYXVsdCkoYy5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogbWF4LWNvbnRlbnQ7XG5gLG09KDAscy5kZWZhdWx0KShjLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xuYCxDPSgwLHMuZGVmYXVsdCkodS5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyfTtcbiAgbWFyZ2luLXRvcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcblxuICAkeyh7ZGlzYWJsZWQ6ZX0pPT5lJiZzLmNzc2BcbiAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gICAgYH1cbmB9LDQxNjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDkwMjIpLHQpfSw5MzY4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRGF0ZUlucHV0PXZvaWQgMDtjb25zdCBpPW4oNTg5MyksYT1uKDY2ODkpLGw9byhuKDc1MTgpKSxzPW4oOTYzNCksYz1uKDEzMzUpLHU9big4ODc4KTt0LkRhdGVJbnB1dD0oMCxhLmZvcndhcmRSZWYpKCgoZSx0KT0+e3Zhcnt2YWx1ZTpuPVwiXCIsdHlwZTpvPVwiZGF0ZVwiLGV4cGFuZGVkOmw9ITEsb25DaGFuZ2U6c309ZSxjPXIoZSxbXCJ2YWx1ZVwiLFwidHlwZVwiLFwiZXhwYW5kZWRcIixcIm9uQ2hhbmdlXCJdKTtjb25zdFtkLHBdPSgwLGEudXNlU3RhdGUpKG4pO3JldHVybigwLGEudXNlRWZmZWN0KSgoKCk9PnAobikpLFtdKSwoMCxpLmpzeCkodS5CYXNlSW5wdXQsT2JqZWN0LmFzc2lnbih7dHlwZTpvfSxjLHtyZW5kZXJJbnB1dDplPT57dmFyIG49cihlLFtdKTtyZXR1cm4oMCxpLmpzeCkoZixPYmplY3QuYXNzaWduKHtyZWY6dCx0eXBlOm8sb25DaGFuZ2U6ZT0+e2NvbnN0e3ZhbHVlOnR9PWUudGFyZ2V0O3QmJnAodCksbnVsbD09c3x8cyhlKX0sdmFsdWU6ZCxleHBhbmRlZDpsfSxuKSl9fSkpfSkpLHQuRGF0ZUlucHV0LmRpc3BsYXlOYW1lPVwiRGF0ZUlucHV0XCI7Y29uc3QgZj0oMCxhLmZvcndhcmRSZWYpKCgoZSx0KT0+e3Zhcnt0eXBlOm4sZXhwYW5kZWQ6byxvbkV4cGFuZDphfT1lLGw9cihlLFtcInR5cGVcIixcImV4cGFuZGVkXCIsXCJvbkV4cGFuZFwiXSk7cmV0dXJuKDAsaS5qc3hzKShkLHtjaGlsZHJlbjpbKDAsaS5qc3gpKGgse2NoaWxkcmVuOigwLGkuanN4KShzLkljb24se2ljb246XCJ0aW1lXCI9PT1uP1wiQ2xvY2tJY29uXCI6XCJDYWxlbmRhckljb25cIn0pfSksKDAsaS5qc3gpKHYsT2JqZWN0LmFzc2lnbih7cmVmOnQsdHlwZTpuLG9uS2V5RG93bjplPT57XCIgXCI9PT1lLmtleSYmZS5wcmV2ZW50RGVmYXVsdCgpfX0sbCkpLCgwLGkuanN4KShnLE9iamVjdC5hc3NpZ24oe2ZsZXhEaXJlY3Rpb246XCJjb2x1bW5cIixkaXNhYmxlZDpsLmRpc2FibGVkLG9uQ2xpY2s6YX0se2NoaWxkcmVuOigwLGkuanN4KShzLkljb24se2ljb246bz9cIkNoZXZyb25VcEljb25cIjpcIkNoZXZyb25Eb3duSWNvblwifSl9KSldfSl9KSk7Zi5kaXNwbGF5TmFtZT1cIlN0eWxlZERhdGVJbnB1dFwiO2NvbnN0IGQ9bC5kZWZhdWx0LmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIHdpZHRoOiAxMDAlO1xuYCxwPSgwLGwuZGVmYXVsdCkoYy5Cb3gpYFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDFweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpO1xuYCxoPSgwLGwuZGVmYXVsdCkocClgXG4gIGxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbmAsZz0oMCxsLmRlZmF1bHQpKHApYFxuICByaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIHBvaW50ZXItZXZlbnRzOiAkeyh7ZGlzYWJsZWQ6ZX0pPT5lP1wibm9uZVwiOnZvaWQgMH07XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgcGFkZGluZy1sZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmAsdj0oMCxsLmRlZmF1bHQpKHUuU3R5bGVkSW5wdXRGaWVsZClgXG4gIGFwcGVhcmFuY2U6IHRleHRmaWVsZDtcbiAgcGFkZGluZy1yaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC54eHhsYXJnZX07XG4gIHBhZGRpbmctbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC54eHhsYXJnZX07XG4gIDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3Ige1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgfVxuYH0sOTY1NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTM2OCksdCl9LDE5Nzg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDY4ODQpLHQpfSw2ODg0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTnVtYmVySW5wdXQ9dC5EaXJlY3Rpb249dm9pZCAwO2NvbnN0IGk9big1ODkzKSxhPW4oNjY4OSksbD1vKG4oNzUxOCkpLHM9big5NjM0KSxjPW4oMTMzNSksdT1uKDg4NzgpO3ZhciBmOyFmdW5jdGlvbihlKXtlW2UuVXA9MV09XCJVcFwiLGVbZS5Eb3duPS0xXT1cIkRvd25cIn0oZj10LkRpcmVjdGlvbnx8KHQuRGlyZWN0aW9uPXt9KSksdC5OdW1iZXJJbnB1dD0oMCxhLmZvcndhcmRSZWYpKCgoZSx0KT0+e3ZhcnttaW46bixtYXg6byxzdGVwOmE9MSxvblRha2VTdGVwOmwsdmFsdWU6c309ZSxjPXIoZSxbXCJtaW5cIixcIm1heFwiLFwic3RlcFwiLFwib25UYWtlU3RlcFwiLFwidmFsdWVcIl0pO3JldHVybigwLGkuanN4KSh1LkJhc2VJbnB1dCxPYmplY3QuYXNzaWduKHt0eXBlOlwibnVtYmVyXCJ9LGMse3JlbmRlcklucHV0OmU9Pnt2YXIgdT1yKGUsW10pO3JldHVybigwLGkuanN4KShkLE9iamVjdC5hc3NpZ24oe3ByZXBlbmRJY29uOmMucHJlcGVuZEljb24scHJlcGVuZFN0cmluZzpjLnByZXBlbmRTdHJpbmcscmVmOnQsb25JbmNyZW1lbnQ6KCk9PmwmJmwoZi5VcCxhKSxvbkRlY3JlbWVudDooKT0+bCYmbChmLkRvd24sYSksbWluOm4sbWF4Om8sc3RlcDphfSx1LHtwbGFjZWhvbGRlcjpjLnBsYWNlaG9sZGVyLHZhbHVlOnMsXCJhcmlhLXZhbHVlbm93XCI6cyxcImFyaWEtdmFsdWVtaW5cIjpuLFwiYXJpYS12YWx1ZW1heFwiOm99KSl9fSkpfSkpLHQuTnVtYmVySW5wdXQuZGlzcGxheU5hbWU9XCJOdW1iZXJJbnB1dFwiO2NvbnN0IGQ9KDAsYS5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXJ7b25JbmNyZW1lbnQ6bixvbkRlY3JlbWVudDpvLHByZXBlbmRJY29uOmwscHJlcGVuZFN0cmluZzpjfT1lLHU9cihlLFtcIm9uSW5jcmVtZW50XCIsXCJvbkRlY3JlbWVudFwiLFwicHJlcGVuZEljb25cIixcInByZXBlbmRTdHJpbmdcIl0pO2NvbnN0IGY9KGUsdCk9PntcIkVudGVyXCIhPT1lLmtleSYmXCIgXCIhPT1lLmtleXx8KGUucHJldmVudERlZmF1bHQoKSx0P24oKTpvKCkpfSxkPSgwLGEudXNlUmVmKShudWxsKSxbQyx5XT0oMCxhLnVzZVN0YXRlKSgwKTtyZXR1cm4oMCxhLnVzZUVmZmVjdCkoKCgpPT57ZC5jdXJyZW50P3koZC5jdXJyZW50Lm9mZnNldFdpZHRoKTp5KDApfSksW2QuY3VycmVudCxsLGNdKSwoMCxpLmpzeHMpKHAse2NoaWxkcmVuOlsoISFsfHwhIWMpJiYoMCxpLmpzeHMpKGgsT2JqZWN0LmFzc2lnbih7aGFzSWNvbjohIWwscmVmOmQsYWxpZ25JdGVtczpcImNlbnRlclwiLGp1c3RpZnlDb250ZW50OlwiY2VudGVyXCJ9LHtjaGlsZHJlbjpbbCYmKDAsaS5qc3gpKHMuSWNvbix7aWNvbjpsLHNpemU6XCJiYXNlXCJ9KSxjJiYhbCYmY119KSksKDAsaS5qc3gpKG0sT2JqZWN0LmFzc2lnbih7cHJlcGVuZENvbnRhaW5lcldpZHRoOkMscmVmOnR9LHUpKSwoMCxpLmpzeHMpKGcsT2JqZWN0LmFzc2lnbih7ZmxleERpcmVjdGlvbjpcImNvbHVtblwiLGRpc2FibGVkOnUuZGlzYWJsZWR9LHtjaGlsZHJlbjpbKDAsaS5qc3gpKHYsT2JqZWN0LmFzc2lnbih7b25DbGljazpuLG9uS2V5RG93bjplPT5mKGUsITApLGRpc2FibGVkOnUuZGlzYWJsZWQsXCJhcmlhLWxhYmVsXCI6XCJJbmNyZW1lbnQgdmFsdWVcIix0YWJJbmRleDowfSx7Y2hpbGRyZW46KDAsaS5qc3gpKHMuSWNvbix7aWNvbjpcIlRyaWFuZ2xlVXBJY29uXCJ9KX0pKSwoMCxpLmpzeCkodixPYmplY3QuYXNzaWduKHtvbktleURvd246ZT0+ZihlKSxvbkNsaWNrOm8sXCJhcmlhLWxhYmVsXCI6XCJEZWNyZW1lbnQgdmFsdWVcIixkaXNhYmxlZDp1LmRpc2FibGVkLHRhYkluZGV4OjB9LHtjaGlsZHJlbjooMCxpLmpzeCkocy5JY29uLHtpY29uOlwiVHJpYW5nbGVEb3duSWNvblwifSl9KSldfSkpXX0pfSkpO2QuZGlzcGxheU5hbWU9XCJTdHlsZWROdW1iZXJJbnB1dFwiO2NvbnN0IHA9bC5kZWZhdWx0LmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIHdpZHRoOiAxMDAlO1xuYCxoPSgwLGwuZGVmYXVsdCkoYy5Cb3gpYFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDFweDtcbiAgdG9wOiAxcHg7XG4gIHdpZHRoOiAkeyh7dGhlbWU6ZSxoYXNJY29uOnR9KT0+dD9lLnB4Lnh4bGFyZ2U6XCJmaXQtY29udGVudFwifTtcbiAgcGFkZGluZzogMCAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpO1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnJhZGl1cy5zbWFsbH0gMCAwICR7ZS5yYWRpdXMuc21hbGx9YH07XG5gLGc9KDAsbC5kZWZhdWx0KShjLkJveClgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDFweDtcbiAgdG9wOiAxcHg7XG4gIGdhcDogMXB4O1xuICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDJweCk7XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5yYWRpdXMuc21hbGx9ICR7ZS5yYWRpdXMuc21hbGx9IDBgfTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICBwb2ludGVyLWV2ZW50czogJHsoe2Rpc2FibGVkOmV9KT0+ZT9cIm5vbmVcIjp2b2lkIDB9O1xuYCx2PSgwLGwuZGVmYXVsdCkoYy5Cb3gpYFxuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIHBhZGRpbmc6IDAgJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgaGVpZ2h0OiA1MCU7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gIGNvbG9yOiAkeyh7ZGlzYWJsZWQ6ZSx0aGVtZTp0fSk9PmU/dC5wYWxldHRlLnRleHRIZWxwOnQucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gIH1cblxuICAmOmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Q29sb3J9O1xuICB9XG5gLG09KDAsbC5kZWZhdWx0KSh1LlN0eWxlZElucHV0RmllbGQpYFxuICBhcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIHBhZGRpbmctbGVmdDogJHsoe3ByZXBlbmRDb250YWluZXJXaWR0aDplfSk9PmAke2UrMTB9cHhgfTtcblxuICA6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gIDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gIH1cbmB9LDUyMTU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDIyNTUpLHQpfSwyMjU1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksaT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJhZGlvR3JvdXA9dm9pZCAwO2NvbnN0IGE9big1ODkzKSxsPWkobig2Njg5KSkscz1pKG4oNzUxOCkpLGM9bigxMzM1KSx1PW4oNzc2OSksZj1uKDI1NjUpLGQ9big3MDMwKTt0LlJhZGlvR3JvdXA9KHtkaXJlY3Rpb246ZT1cImNvbHVtblwiLGxhYmVsOnQsZGlzYWJsZWQ6bixsYWJlbFNpZGU6cj1cInJpZ2h0XCIsZ2FwOm89XCJzbWFsbFwiLG1lc3NhZ2U6aSxoZWxwZXJUZXh0OnMsbmFtZTpjLGNoaWxkcmVuOnUsdmFsaWRhdGlvbkVycm9yTWVzc2FnZTp5LG9uQ2hhbmdlOncsdmFsdWU6Yn0pPT57Y29uc3RbeCxfXT1sLnVzZVN0YXRlKGIpLE89ZT0+e18oZS50YXJnZXQudmFsdWUpLHcmJncoZSl9O3JldHVybiBsLnVzZUVmZmVjdCgoKCk9PntfKGIpfSksW2JdKSwoMCxhLmpzeHMpKGgse2NoaWxkcmVuOlsoMCxhLmpzeHMpKHAse2NoaWxkcmVuOlsoMCxhLmpzeCkoQyxPYmplY3QuYXNzaWduKHt3ZWlnaHQ6XCJib2xkXCJ9LHtjaGlsZHJlbjp0fSkpLHMmJigwLGEuanN4KShnLHtjaGlsZHJlbjpzfSldfSksKDAsYS5qc3gpKHYsT2JqZWN0LmFzc2lnbih7ZGlyZWN0aW9uOmUsbGFiZWxTaWRlOnIsZ2FwOm99LHtjaGlsZHJlbjpsLkNoaWxkcmVuLm1hcCh1LChlPT57Y29uc3QgdD1lO3JldHVybiB0LnR5cGU9PT1mLlJhZGlvSW5wdXQ/bC5jbG9uZUVsZW1lbnQodCx7bmFtZTpjLGxhYmVsU2lkZTpyLGRpc2FibGVkOm4sb25DaGFuZ2U6TyxjaGVja2VkOnQucHJvcHMudmFsdWU9PT14fSk6dH0pKX0pKSwheCYmeSYmKDAsYS5qc3gpKGQuVmFsaWRhdGlvbkVycm9yLHtjaGlsZHJlbjp5fSksaT8oMCxhLmpzeCkobSxPYmplY3QuYXNzaWduKHtkaXNhYmxlZDpufSx7Y2hpbGRyZW46aX0pKTpudWxsXX0pfTtjb25zdCBwPSgwLHMuZGVmYXVsdCkoYy5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtYXJnaW4tYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmAsaD0oMCxzLmRlZmF1bHQpKGMuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IG1heC1jb250ZW50O1xuYCxnPSgwLHMuZGVmYXVsdCkodS5UZXh0KWBcbiAgc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG5gLHY9KDAscy5kZWZhdWx0KShjLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiAke2U9PmUuZGlyZWN0aW9ufTtcbiAgYWxpZ24taXRlbXM6ICR7ZT0+e3N3aXRjaChlLmxhYmVsU2lkZSl7Y2FzZVwibGVmdFwiOnJldHVyblwiZW5kXCI7Y2FzZVwicmlnaHRcIjpyZXR1cm5cInN0YXJ0XCI7ZGVmYXVsdDpyZXR1cm5cImNlbnRlclwifX19O1xuICB3aWR0aDogZml0LWNvbnRlbnQ7XG5gLG09KDAscy5kZWZhdWx0KSh1LlRleHQpYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0UGxhY2Vob2xkZXJ9O1xuICBtYXJnaW4tdG9wOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuXG4gICR7KHtkaXNhYmxlZDplfSk9PmUmJnMuY3NzYFxuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICBgfVxuYCxDPSgwLHMuZGVmYXVsdCkodS5UZXh0KWBcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG5gfSwzNjQxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigyNTY1KSx0KX0sMjU2NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGk9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH0sYT10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJhZGlvSW5wdXQ9dm9pZCAwO2NvbnN0IGw9big1ODkzKSxzPW4oNzc2OSksYz1pKG4oNjY4OSkpLHU9aShuKDc1MTgpKSxmPW4oMTMzNSksZD1uKDk2MzQpO3QuUmFkaW9JbnB1dD1jLmZvcndhcmRSZWYoKChlLHQpPT57dmFye2Rpc2FibGVkOm4saWQ6cixsYWJlbDpvLGxhYmVsU2lkZTppLGljb246c309ZSxjPWEoZSxbXCJkaXNhYmxlZFwiLFwiaWRcIixcImxhYmVsXCIsXCJsYWJlbFNpZGVcIixcImljb25cIl0pO3JldHVybigwLGwuanN4KShwLHtjaGlsZHJlbjooMCxsLmpzeHMpKHYsT2JqZWN0LmFzc2lnbih7YXM6XCJsYWJlbFwiLGh0bWxGb3I6cixsYWJlbFNpZGU6aSxkaXNhYmxlZDpufSx7Y2hpbGRyZW46WygwLGwuanN4KShnLE9iamVjdC5hc3NpZ24oe3JlZjp0LHR5cGU6XCJyYWRpb1wiLGRpc2FibGVkOm59LGMpKSwoMCxsLmpzeCkoaCx7fSksISFzJiYoMCxsLmpzeCkoZC5JY29uLHtpY29uOnN9KSxvfHxcIlwiXX0pKX0pfSkpLHQuUmFkaW9JbnB1dC5kaXNwbGF5TmFtZT1cIlJhZGlvSW5wdXRcIjtjb25zdCBwPSgwLHUuZGVmYXVsdCkoZi5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuYCxoPXUuZGVmYXVsdC5kaXZgXG4gIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG5cbiAgaW5wdXQ6Y2hlY2tlZCB+ICY6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbjogMnB4IDFweCAwcHggMnB4O1xuICAgIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICB9XG5cbiAgaW5wdXQ6ZGlzYWJsZWQgfiAmIHtcbiAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgfVxuXG4gIGlucHV0OmRpc2FibGVkIH4gJjphZnRlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICB9XG5gLGc9dS5kZWZhdWx0LmlucHV0YFxuICBvcGFjaXR5OiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAmOmRpc2FibGVkIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gIH1cbmAsdj0oMCx1LmRlZmF1bHQpKHMuVGV4dClgXG4gIHdpZHRoOiBmaXQtY29udGVudDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZmxleC1kaXJlY3Rpb246ICR7KHtsYWJlbFNpZGU6ZX0pPT57c3dpdGNoKGV8fFwicmlnaHRcIil7Y2FzZVwibGVmdFwiOnJldHVyblwicm93LXJldmVyc2VcIjtjYXNlXCJyaWdodFwiOnJldHVyblwicm93XCI7Y2FzZVwidG9wXCI6cmV0dXJuXCJjb2x1bW4tcmV2ZXJzZVwiO2Nhc2VcImJvdHRvbVwiOnJldHVyblwiY29sdW1uXCJ9fX07XG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAkeyh7ZGlzYWJsZWQ6ZX0pPT5lP3UuY3NzYFxuICAgICAgICAgICYge1xuICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gICAgICAgIGA6bnVsbH1cbmB9LDg1MTA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDcwNjgpLHQpfSw3MDY4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJhd0lucHV0PXZvaWQgMDtjb25zdCBvPXIobig3NTE4KSk7dC5SYXdJbnB1dD1vLmRlZmF1bHQuaW5wdXRgYCx0LlJhd0lucHV0LmRpc3BsYXlOYW1lPVwiUmF3SW5wdXRcIn0sMzExOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNzk5KSx0KX0sNzk5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlRleHRBcmVhPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1uKDY2ODkpLGE9cihuKDc1MTgpKSxsPW4oOTUwNykscz1uKDk1MDcpLGM9bigxMzM1KSx1PW4oMTk0NCk7dC5UZXh0QXJlYT0oMCxpLmZvcndhcmRSZWYpKCgoZSx0KT0+KDAsby5qc3gpKGQsT2JqZWN0LmFzc2lnbih7ZmxleERpcmVjdGlvbjpcImNvbHVtblwiLGFsaWduSXRlbXM6XCJmbGV4LXN0YXJ0XCJ9LHtjaGlsZHJlbjooMCxvLmpzeHMpKGYse2NoaWxkcmVuOlshIWUubGFiZWwmJigwLG8uanN4KSh1LkxhYmVsLHt0ZXh0OmUubGFiZWwsaHRtbEZvcjplLm5hbWUsaGVscGVyVGV4dDplLmhlbHBlclRleHR9KSwoMCxvLmpzeCkocCxPYmplY3QuYXNzaWduKHtyZWY6dH0sZSx7b25DaGFuZ2U6ZS5vbkNoYW5nZX0pKV19KX0pKSkpLHQuVGV4dEFyZWEuZGlzcGxheU5hbWU9XCJUZXh0QXJlYVwiO2NvbnN0IGY9KDAsYS5kZWZhdWx0KShjLkJveClgXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIHdpZHRoOiAxMDAlO1xuYCxkPSgwLGEuZGVmYXVsdCkoYy5Cb3gpYFxuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIHVzZXItc2VsZWN0OiBub25lO1xuYCxwPWEuZGVmYXVsdC50ZXh0YXJlYWBcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Qm9yZGVyfTtcbiAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxzLmdldFN0YXR1c0NvbG9yKShlLHQsXCJpbnB1dEJvcmRlclwiKX07XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgd2lkdGg6IDEwMCU7XG4gIHJlc2l6ZTogbm9uZTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgJHtsLk1peGlucy5zY3JvbGxiYXIuc21hbGx9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Q29sb3J9O1xuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQudGV4dH07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQubm9ybWFsfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH0gJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH0gMHB4ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IDA7XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxzLmdldFN0YXR1c0NvbG9yKShlLHQsXCJpbnB1dEZvY3VzZWRcIil9O1xuICB9XG5cbiAgJjpkaXNhYmxlZDo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gIH1cbmB9LDg5NTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDIzNTIpLHQpfSwyMzUyOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlRleHRJbnB1dD12b2lkIDA7Y29uc3Qgcj1uKDU4OTMpLG89big2Njg5KSxpPW4oODg3OCk7dC5UZXh0SW5wdXQ9KDAsby5mb3J3YXJkUmVmKSgoKGUsdCk9PigwLHIuanN4KShpLkJhc2VJbnB1dCxPYmplY3QuYXNzaWduKHtyZWY6dCx0eXBlOlwidGV4dFwifSxlKSkpKSx0LlRleHRJbnB1dC5kaXNwbGF5TmFtZT1cIlRleHRJbnB1dFwifSwzMzM5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJveD12b2lkIDA7Y29uc3Qgbz1yKG4oNzUxOCkpLGk9big4NzMyKSxhPW4oNTQ1OSksbD17MTphLlBhbGV0dGUuYmFja2dyb3VuZDEsMjphLlBhbGV0dGUuYmFja2dyb3VuZDIsMzphLlBhbGV0dGUuYmFja2dyb3VuZDMsNDphLlBhbGV0dGUuYmFja2dyb3VuZDQsNTphLlBhbGV0dGUuYmFja2dyb3VuZDUsNjphLlBhbGV0dGUuYmFja2dyb3VuZDZ9O3QuQm94PW8uZGVmYXVsdC5kaXZgXG4gIC8qKlxuICAgKiBTdHlsZSBTY3JvbGxiYXIgZm9yIEJveGVzIHdpdGggb3ZlcmZsb3dcbiAgICovXG4gICR7aS5NaXhpbnMuc2Nyb2xsYmFyLmJhc2V9XG5cbiAgZGlzcGxheTogJHsoe2Rpc3BsYXk6ZT1cImZsZXhcIn0pPT5lfTtcbiAgZmxleC1kaXJlY3Rpb246ICR7KHtmbGV4RGlyZWN0aW9uOmU9XCJyb3dcIn0pPT5lfTtcbiAgZmxleC13cmFwOiAkeyh7ZmxleFdyYXA6ZT1cIm5vd3JhcFwifSk9PmV9O1xuICBhbGlnbi1pdGVtczogJHsoe2FsaWduSXRlbXM6ZX0pPT5lfTtcbiAganVzdGlmeS1jb250ZW50OiAkeyh7anVzdGlmeUNvbnRlbnQ6ZX0pPT5lfTtcbiAgZ2FwOiAkeyh7dGhlbWU6ZSxnYXA6dH0pPT50JiZlLnB4W3RdfTtcbiAgYWxpZ24tc2VsZjogJHsoe2FsaWduU2VsZjplfSk9PmV9O1xuICBmbGV4LWJhc2lzOiAkeyh7ZmxleEJhc2lzOmV9KT0+ZX07XG4gIGZsZXgtZ3JvdzogJHsoe2ZsZXhHcm93OmV9KT0+ZX07XG4gIGZsZXgtc2hyaW5rOiAkeyh7ZmxleFNocmluazplfSk9PmV9O1xuICBvcmRlcjogJHsoe29yZGVyOmV9KT0+ZX07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplLHBhZGRpbmc6dH0pPT50JiZlLnB4W3RdfTtcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmUsYmFja2dyb3VuZDp0fSk9PnQmJmUucGFsZXR0ZVtsW3RdXX07XG5gLHQuQm94LmRpc3BsYXlOYW1lPVwiQm94XCJ9LDEzMzU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDMzMzkpLHQpfSw2NzEwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRGVmaW5pdGlvbkxpc3Q9dm9pZCAwO2NvbnN0IGk9big1ODkzKSxhPW8obig3NTE4KSk7dC5EZWZpbml0aW9uTGlzdD1lPT57dmFye2RlZmluaXRpb25zOnR9PWUsbj1yKGUsW1wiZGVmaW5pdGlvbnNcIl0pO3JldHVybigwLGkuanN4KShzLE9iamVjdC5hc3NpZ24oe30sbix7cm9sZTpcImxpc3RcIn0se2NoaWxkcmVuOihBcnJheS5pc0FycmF5KHQpP3Q6QXJyYXkuZnJvbSh0KSkubWFwKCgoW2UsdF0sbik9PigwLGkuanN4cykobCxPYmplY3QuYXNzaWduKHtyb2xlOlwibGlzdGl0ZW1cIn0se2NoaWxkcmVuOlsoMCxpLmpzeCkoYyxPYmplY3QuYXNzaWduKHtpZDpgdGVybSR7bn1gfSx7Y2hpbGRyZW46ZX0pKSwoMCxpLmpzeCkodSxPYmplY3QuYXNzaWduKHtcImFyaWEtbGFiZWxsZWRieVwiOmB0ZXJtJHtufWB9LHtjaGlsZHJlbjp0fSkpXX0pLGAke2V9LSR7bn1gKSkpfSkpfTtjb25zdCBsPWEuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDNmcjtcbmAscz1hLmRlZmF1bHQuZGxgXG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4LmxhcmdlfWB9O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfSAke2UucHguYmFzZX1gfTtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbmAsYz1hLmRlZmF1bHQuZHRgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuc21hbGx9O1xuICBmb250LXdlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5mb250V2VpZ2h0Lm5vcm1hbH07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBwYWRkaW5nLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5gLHU9YS5kZWZhdWx0LmRkYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLnNtYWxsfTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHBhZGRpbmctYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmB9LDUzNzc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDY3MTApLHQpfSw5NDMxOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lkdsb2JhbFN0eWxlcz12b2lkIDA7Y29uc3Qgcj1uKDc1MTgpLG89big1NzUpLGk9big5NTA3KSxhPW4oNjIxOCk7dC5HbG9iYWxTdHlsZXM9ci5jcmVhdGVHbG9iYWxTdHlsZWBcbiAgLyoqIC0+IERlZmluZSBHbG9iYWwgQ1NTIFZhcnMgKi9cbiAgOnJvb3Qge1xuICAgIC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uOiAkeyh7dGhlbWU6ZX0pPT5lLnRyYW5zaXRpb24uYmFzZX07XG5cbiAgICBmb250LWZhbWlseTogJHsoe3RoZW1lOmV9KT0+ZS5mb250RmFtaWx5fTtcbiAgICAvKiBNYXAgb3ZlciB0aGUgcGFsZXR0ZSBrZXlzIGFuZCBjcmVhdGUgdmFyaWFibGVzIG91dCBvZiB0aGVtICovXG4gICAgJHtvLmdldFJvb3RDc3NWYXJzfVxuICB9XG5cbiAgLyoqIC0+IEBmb250LWZhY2UgRGVjbGFyYXRpb24gKi9cbiAgJHsoMCxpLmNyZWF0ZUZvbnRGYWNlQ3NzKShhLkZvbnRzKX1cblxuICAvKiogLT4gTWljcm8gUmVzZXQgKi9cbiAgKiB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICAvKipcbiAgICAgKiBQcmV2ZW50IGJyb3dzZXIgYXV0by13ZWlnaHRpbmdcbiAgICAgKiBAbGluayBodHRwczovL2Nzcy10cmlja3MuY29tL2FsbWFuYWMvcHJvcGVydGllcy9mL2ZvbnQtc3ludGhlc2lzL1xuICAgICAqL1xuICAgIGZvbnQtc3ludGhlc2lzOiBub25lO1xuICB9XG5cbiAgLyoqIC0+IEFwcGx5IEdsb2JhbCBTdHlsZXMgKi9cblxuICBib2R5LFxuICA6cm9vdCB7XG4gICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQxfTtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBmb250LWZhbWlseTogJHsoe3RoZW1lOmV9KT0+ZS5mb250RmFtaWx5fTtcbiAgICBmb250LXdlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5mb250V2VpZ2h0Lm5vcm1hbH07XG4gICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICAgIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQudGV4dH07XG4gIH1cblxuICA6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0UGxhY2Vob2xkZXJ9O1xuICB9XG5cbiAgLyoqIC0+IFJlZHVjZWQgTW90aW9uIChBY2Nlc3NpYmlsaXR5KSAqL1xuICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pIHtcbiAgICA6cm9vdCB7XG4gICAgICAtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbjogJHsoe3RoZW1lOmV9KT0+ZS50cmFuc2l0aW9uLm5vbmV9O1xuICAgIH1cbiAgfVxuYH0sMTA2OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTQzMSksdCl9LDEzMTA6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sOTUwNzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTYzOCksdCksbyhuKDQyMCksdCl9LDk5ODQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZ2V0TW9zdFJlYWRhYmxlPXQuZGFya2VuQ29sb3I9dC5saWdodGVuQ29sb3I9dm9pZCAwO2NvbnN0IG89cihuKDgyMDcpKTt0LmxpZ2h0ZW5Db2xvcj0oZSx0KT0+aShlLFwibGlnaHRlblwiLHQpLHQuZGFya2VuQ29sb3I9KGUsdCk9PmkoZSxcImRhcmtlblwiLHQpO2NvbnN0IGk9KGUsdCxuKT0+e2lmKG4mJihuPDB8fG4+MTAwKSl0aHJvdyBuZXcgRXJyb3IoYCR7bn0gbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEwMGApO3JldHVybigwLG8uZGVmYXVsdCkoZSlbdF0obikudG9TdHJpbmcoKX07dC5nZXRNb3N0UmVhZGFibGU9KGUsdCk9Pm8uZGVmYXVsdC5tb3N0UmVhZGFibGUoZSx0KS50b0hleFN0cmluZygpfSwzNDcxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksaT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lkljb25TaXplPXQuSWNvblNldD10LlRyYW5zaXRpb249dC5MaW5lSGVpZ2h0PXQuRm9udFdlaWdodD10LkZvbnRTaXplPXQuRm9udEZhbWlseT10LlNoYWRvdz10LlJhZGl1cz10LlVuaXRQeD10LlVuaXQ9dC5TaXplTmFtZT10LlNpemU9dC5Db2xvcj12b2lkIDA7Y29uc3QgYT1pKG4oMTUyMSkpLGw9aShuKDI3NzIpKTt0LkNvbG9yPXt3aGl0ZTpcIiNGRkZGRkZcIixsaWdodEdyYXkxOlwiI0ZBRkJGRVwiLGxpZ2h0R3JheTI6XCIjRjNGNUY4XCIsbGlnaHRHcmF5MzpcIiNFQ0VFRjFcIixsaWdodEdyYXk0OlwiI0REREZFNFwiLGxpZ2h0R3JheTU6XCIjQzlDQkQyXCIsbmV1dHJhbEdyYXk6XCIjN0Q4MDhBXCIsbmV1dHJhbEdyYXk4MDpcInJnYmEoMTI1LDEyOCwxMzgsMC44KVwiLHNpbHZlckdyYXk6XCIjQzBDMUMyXCIsZGFya0dyYXkxOlwiIzUzNTY1RlwiLGRhcmtHcmF5MjpcIiMzODNBNDBcIixkYXJrR3JheTM6XCIjMkYzMTM2XCIsZGFya0dyYXk0OlwiIzI0MjYyQlwiLGRhcmtHcmF5NTpcIiMxRTFGMjNcIixkYXJrR3JheTY6XCIjMTExMjE0XCIsb3BlbkZpbkRhcmtlc3Q6XCIjM0QzOUNEXCIsb3BlbkZpbkRhcmtlcjpcIiM0NjQyRTBcIixvcGVuRmluOlwiIzUwNENGRlwiLG9wZW5GaW5MaWdodDpcIiM1MjU0RkJcIixvcGVuRmluTGlnaHRlcjpcIiM1QzVFRkVcIixvcGVuRmluTGlnaHRlc3Q6XCIjNjg2NEZGXCIsZnVuY3Rpb25hbDE6XCIjMjA3NzM1XCIsZnVuY3Rpb25hbDI6XCIjNDZDOEYxXCIsZnVuY3Rpb25hbDM6XCIjMEE3NkQzXCIsZnVuY3Rpb25hbDQ6XCIjNkNBREU1XCIsZnVuY3Rpb25hbDU6XCIjMEE3NkQzXCIsZnVuY3Rpb25hbDY6XCIjODgyQkZFXCIsZnVuY3Rpb25hbDc6XCIjRjMxODE4XCIsZnVuY3Rpb25hbDg6XCIjQzkzNDAwXCIsZnVuY3Rpb25hbDk6XCIjRkY1RTYwXCIsZnVuY3Rpb25hbDEwOlwiI0Y0OEYwMFwiLHB1cnBsZTpcIiM4QzYxRkZcIixsaWdodGJsdWU6XCIjMzZDM0ZFXCIsYXF1YTpcIiMwMENDODhcIix5ZWxsb3c6XCIjRkZFQjAwXCIsc2FsbW9uOlwiI0ZGOEM0Q1wiLHBpbms6XCIjRkY1RTYwXCIsbGlnaHRwaW5rOlwiI0ZGOEZCOFwiLHdoaXRlMDA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMClcIix3aGl0ZTEwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjEpXCIsd2hpdGUyMDpcInJnYmEoMjU1LDI1NSwyNTUsMC4yKVwiLHdoaXRlMzA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMylcIix3aGl0ZTQwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjQpXCIsd2hpdGU1MDpcInJnYmEoMjU1LDI1NSwyNTUsMC41KVwiLHdoaXRlNjA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNilcIix3aGl0ZTcwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjcpXCIsd2hpdGU4MDpcInJnYmEoMjU1LDI1NSwyNTUsMC44KVwiLHdoaXRlOTA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuOSlcIixibGFjazAwOlwicmdiYSgwLDAsMCwwLjApXCIsYmxhY2sxMDpcInJnYmEoMCwwLDAsMC4xKVwiLGJsYWNrMjA6XCJyZ2JhKDAsMCwwLDAuMilcIixibGFjazMwOlwicmdiYSgwLDAsMCwwLjMpXCIsYmxhY2s0MDpcInJnYmEoMCwwLDAsMC40KVwiLGJsYWNrNTA6XCJyZ2JhKDAsMCwwLDAuNSlcIixibGFjazYwOlwicmdiYSgwLDAsMCwwLjYpXCIsYmxhY2s3MDpcInJnYmEoMCwwLDAsMC43KVwiLGJsYWNrODA6XCJyZ2JhKDAsMCwwLDAuOClcIixibGFjazkwOlwicmdiYSgwLDAsMCwwLjkpXCIsdHJhbnNwYXJlbnQ6XCJ0cmFuc3BhcmVudFwifSx0LlNpemU9e3hzbWFsbDpcInhzbWFsbFwiLHNtYWxsOlwic21hbGxcIixiYXNlOlwiYmFzZVwiLGxhcmdlOlwibGFyZ2VcIix4bGFyZ2U6XCJ4bGFyZ2VcIix4eGxhcmdlOlwieHhsYXJnZVwiLHh4eGxhcmdlOlwieHh4bGFyZ2VcIix4eHh4bGFyZ2U6XCJ4eHh4bGFyZ2VcIn0sdC5TaXplTmFtZT17W3QuU2l6ZS54c21hbGxdOlwiRXh0cmEgU21hbGxcIixbdC5TaXplLnNtYWxsXTpcIlNtYWxsXCIsW3QuU2l6ZS5iYXNlXTpcIkJhc2VcIixbdC5TaXplLmxhcmdlXTpcIkxhcmdlXCIsW3QuU2l6ZS54bGFyZ2VdOlwiRXh0cmEgTGFyZ2VcIixbdC5TaXplLnh4bGFyZ2VdOlwiMlggTGFyZ2VcIixbdC5TaXplLnh4eGxhcmdlXTpcIjNYIExhcmdlXCIsW3QuU2l6ZS54eHh4bGFyZ2VdOlwiNFggTGFyZ2VcIn0sdC5Vbml0PXtbdC5TaXplLnhzbWFsbF06NCxbdC5TaXplLnNtYWxsXTo4LFt0LlNpemUuYmFzZV06MTIsW3QuU2l6ZS5sYXJnZV06MTYsW3QuU2l6ZS54bGFyZ2VdOjIwLFt0LlNpemUueHhsYXJnZV06MjQsW3QuU2l6ZS54eHhsYXJnZV06MzIsW3QuU2l6ZS54eHh4bGFyZ2VdOjQ4fSx0LlVuaXRQeD17W3QuU2l6ZS54c21hbGxdOlwiNHB4XCIsW3QuU2l6ZS5zbWFsbF06XCI4cHhcIixbdC5TaXplLmJhc2VdOlwiMTJweFwiLFt0LlNpemUubGFyZ2VdOlwiMTZweFwiLFt0LlNpemUueGxhcmdlXTpcIjIwcHhcIixbdC5TaXplLnh4bGFyZ2VdOlwiMjRweFwiLFt0LlNpemUueHh4bGFyZ2VdOlwiMzJweFwiLFt0LlNpemUueHh4eGxhcmdlXTpcIjQ4cHhcIn0sdC5SYWRpdXM9e1t0LlNpemUueHNtYWxsXTpcIjJweFwiLFt0LlNpemUuc21hbGxdOlwiNHB4XCIsW3QuU2l6ZS5iYXNlXTpcIjhweFwiLFt0LlNpemUubGFyZ2VdOlwiMjRweFwiLHBpbGw6XCIxMDB2aFwiLHJvdW5kOlwiNTAlXCIsbm9uZTpcIjBcIn0sdC5TaGFkb3c9e1t0LlNpemUuYmFzZV06XCIwIDRweCA0cHggcmdiYSgwLCAwLCAwLCAwLjI1KVwifSx0LkZvbnRGYW1pbHk9W1wiSW50ZXJcIixcInN5c3RlbS11aVwiLFwiQmxpbmtNYWNTeXN0ZW1Gb250XCIsXCJTZWdvZSBVSVwiLFwiUm9ib3RvXCIsXCJPeHlnZW4tU2Fuc1wiLFwiVWJ1bnR1XCIsXCJDYW50YXJlbGxcIixcIkhlbHZldGljYSBOZXVlXCIsXCJzYW5zLXNlcmlmXCJdLmpvaW4oXCIsXCIpLHQuRm9udFNpemU9e1t0LlNpemUueHNtYWxsXTpcIjhweFwiLFt0LlNpemUuc21hbGxdOlwiMTBweFwiLFt0LlNpemUuYmFzZV06XCIxMnB4XCIsW3QuU2l6ZS5sYXJnZV06XCIxNHB4XCIsW3QuU2l6ZS54bGFyZ2VdOlwiMTZweFwiLFt0LlNpemUueHhsYXJnZV06XCIxOHB4XCIsW3QuU2l6ZS54eHhsYXJnZV06XCIyMHB4XCIsW3QuU2l6ZS54eHh4bGFyZ2VdOlwiNDBweFwifSx0LkZvbnRXZWlnaHQ9e25vcm1hbDo0MDAsYm9sZDo2MDB9LHQuTGluZUhlaWdodD17dWk6MSxoZWFkaW5nOjEuMix0ZXh0OjEuNX0sdC5UcmFuc2l0aW9uPXtiYXNlOlwiMjAwbXMgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSlcIixub25lOlwiMG1zXCJ9LHQuSWNvblNldD1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSksbCksdC5JY29uU2l6ZT17W3QuU2l6ZS54c21hbGxdOnQuVW5pdFB4LnNtYWxsLFt0LlNpemUuc21hbGxdOnQuVW5pdFB4LmJhc2UsW3QuU2l6ZS5iYXNlXTpcIjE1cHhcIixbdC5TaXplLmxhcmdlXTp0LlVuaXRQeC54bGFyZ2UsW3QuU2l6ZS54bGFyZ2VdOnQuVW5pdFB4Lnh4bGFyZ2UsW3QuU2l6ZS54eGxhcmdlXTp0LlVuaXRQeC54eHhsYXJnZSxbdC5TaXplLnh4eGxhcmdlXTp0LlVuaXRQeC54eHh4bGFyZ2V9fSw5MjcyOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmNyZWF0ZUZvbnRGYWNlQ3NzPXZvaWQgMDtjb25zdCByPW4oNzUxOCksbz1uKDM0NzEpO3QuY3JlYXRlRm9udEZhY2VDc3M9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuY3NzYFxuICAgICR7ZS5yZWd1bGFyJiZyLmNzc2BcbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgICAgICAgc3JjOiB1cmwoJHtlLnJlZ3VsYXJ9KSBmb3JtYXQoJ3dvZmYyJyk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAke28uRm9udFdlaWdodC5ub3JtYWx9O1xuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgIGZvbnQtZGlzcGxheTogZmFsbGJhY2s7XG4gICAgICB9XG4gICAgYH1cbiAgICAke2UuaXRhbGljJiZyLmNzc2BcbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgICAgICAgc3JjOiB1cmwoJHtlLml0YWxpY30pIGZvcm1hdCgnd29mZjInKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6ICR7by5Gb250V2VpZ2h0Lm5vcm1hbH07XG4gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgICAgZm9udC1kaXNwbGF5OiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICBgfVxuICAgICR7ZS5zZW1pQm9sZCYmci5jc3NgXG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gICAgICAgIHNyYzogdXJsKCR7ZS5zZW1pQm9sZH0pIGZvcm1hdCgnd29mZjInKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6ICR7by5Gb250V2VpZ2h0LmJvbGR9O1xuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgIGZvbnQtZGlzcGxheTogZmFsbGJhY2s7XG4gICAgICB9XG4gICAgYH1cbiAgICAke2Uuc2VtaUJvbGRJdGFsaWMmJnIuY3NzYFxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICAgICAgICBzcmM6IHVybCgke2Uuc2VtaUJvbGRJdGFsaWN9KSBmb3JtYXQoJ3dvZmYyJyk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAke28uRm9udFdlaWdodC5ib2xkfTtcbiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICBmb250LWRpc3BsYXk6IGZhbGxiYWNrO1xuICAgICAgfVxuICAgIGB9XG4gIGB9fSw2NzE0OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmNyZWF0ZVRoZW1lPXZvaWQgMDtjb25zdCByPW4oMzQ3MSksbz1uKDk5ODQpLGk9big1NDU5KSxhPXtmb250RmFtaWx5OnIuRm9udEZhbWlseSxmb250U2l6ZTpyLkZvbnRTaXplLGZvbnRXZWlnaHQ6ci5Gb250V2VpZ2h0LGxpbmVIZWlnaHQ6ci5MaW5lSGVpZ2h0LGljb25TaXplOnIuSWNvblNpemUscmFkaXVzOnIuUmFkaXVzLHNoYWRvdzpyLlNoYWRvdyx0cmFuc2l0aW9uOnIuVHJhbnNpdGlvbix1bml0OnIuVW5pdCxweDpyLlVuaXRQeH0sbD0oZSx0KT0+KHtbYCR7ZX1BY3RpdmVgXTooMCxvLmRhcmtlbkNvbG9yKSh0LDIpLFtgJHtlfUhvdmVyYF06KDAsby5saWdodGVuQ29sb3IpKHQsNSksW2Ake2V9Rm9jdXNlZGBdOigwLG8uZ2V0TW9zdFJlYWRhYmxlKSh0LFtyLkNvbG9yLndoaXRlLHIuQ29sb3IuZGFya0dyYXk1XSksW2Ake2V9VGV4dGBdOigwLG8uZ2V0TW9zdFJlYWRhYmxlKSh0LFtyLkNvbG9yLndoaXRlLHIuQ29sb3IuZGFya0dyYXk1XSl9KTt0LmNyZWF0ZVRoZW1lPWU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7cGFsZXR0ZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSxsKGkuUGFsZXR0ZS5icmFuZFByaW1hcnksZS5icmFuZFByaW1hcnkpKSxsKGkuUGFsZXR0ZS5icmFuZFNlY29uZGFyeSxlLmJyYW5kU2Vjb25kYXJ5KSl9KX0sNTc1OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlNVUFBPUlRFRF9MQU5HVUFHRVM9dC5nZXRTdGF0dXNDb2xvcj10LmdldFJvb3RDc3NWYXJzPXQuZ2V0VmFyaWFudENTUz12b2lkIDA7Y29uc3Qgcj1uKDU0NTkpO3QuZ2V0VmFyaWFudENTUz0oZSx0KT0+bj0+ZVt0XVtuW3RdXSx0LmdldFJvb3RDc3NWYXJzPSh7dGhlbWU6ZX0pPT5PYmplY3Qua2V5cyhyLlBhbGV0dGUpLm1hcCgodD0+YC0tb3BlbmZpbi11aS0ke3R9OiAke2UucGFsZXR0ZVt0XX07YCkpLmpvaW4oXCJcXG5cIiksdC5nZXRTdGF0dXNDb2xvcj0oZSx0LG4pPT57c3dpdGNoKHQpe2Nhc2VcImFjdGl2ZVwiOnJldHVybiBlLnBhbGV0dGUuc3RhdHVzQWN0aXZlO2Nhc2VcImNyaXRpY2FsXCI6cmV0dXJuIGUucGFsZXR0ZS5zdGF0dXNDcml0aWNhbDtjYXNlXCJ3YXJuaW5nXCI6cmV0dXJuIGUucGFsZXR0ZS5zdGF0dXNXYXJuaW5nO2Nhc2VcInN1Y2Nlc3NcIjpyZXR1cm4gZS5wYWxldHRlLnN0YXR1c1N1Y2Nlc3M7ZGVmYXVsdDpyZXR1cm4gbj9lLnBhbGV0dGVbbl06XCJpbmhlcml0XCJ9fSx0LlNVUFBPUlRFRF9MQU5HVUFHRVM9W1wiZW4tVVNcIixcImphLUpQXCIsXCJ6aC1DTlwiLFwia28tS1JcIixcInJ1LVJVXCIsXCJkZS1ERVwiLFwiemgtSGFudFwiXX0sOTYzODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTk4NCksdCksbyhuKDM0NzEpLHQpLG8obig5MjcyKSx0KSxvKG4oNjcxNCksdCksbyhuKDU3NSksdCksbyhuKDE0NDEpLHQpLG8obig4NzMyKSx0KSxvKG4oNTQ1OSksdCksbyhuKDUzMTcpLHQpfSwxNDQxOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LDg3MzI6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTWl4aW5zPXZvaWQgMDtjb25zdCByPW4oMzQ3MSksbz1uKDc1MTgpLGk9by5jc3NgXG4gIHVzZXItc2VsZWN0OiBub25lO1xuYCxhPW8uY3NzYFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbmAsbD1vLmNzc2BcbiAgJjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgIHdpZHRoOiB2YXIoLS1zY3JvbGxiYXJTaXplLCAke3IuVW5pdFB4LnhzbWFsbH0pO1xuICAgIGhlaWdodDogdmFyKC0tc2Nyb2xsYmFyU2l6ZSwgJHtyLlVuaXRQeC54c21hbGx9KTtcbiAgfVxuXG4gICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgICBiYWNrZ3JvdW5kOiAke3IuQ29sb3IubmV1dHJhbEdyYXk4MH07XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2Nyb2xsYmFyU2l6ZSwgJHtyLlVuaXRQeC54c21hbGx9KTtcbiAgICBvcGFjaXR5OiAwLjg7XG4gIH1cblxuICAmOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgYmFja2dyb3VuZDogJHtyLkNvbG9yLndoaXRlODB9O1xuICAgIHdpZHRoOiB2YXIoLS1zY3JvbGxiYXJTaXplLCAke3IuVW5pdFB4LnhzbWFsbH0pO1xuICAgIGhlaWdodDogdmFyKC0tc2Nyb2xsYmFyU2l6ZSwgJHtyLlVuaXRQeC54c21hbGx9KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1zY3JvbGxiYXJTaXplLCAke3IuVW5pdFB4LnhzbWFsbH0pO1xuICAgIG9wYWNpdHk6IDAuODtcbiAgfVxuYCxzPW8uY3NzYFxuICAtLXNjcm9sbGJhclNpemU6IDJweDtcbiAgJHtsfTtcbmAsYz1vLmNzc2BcbiAgLXdlYmtpdC1hcHAtcmVnaW9uOiBkcmFnO1xuYCx1PW8uY3NzYFxuICAtd2Via2l0LWFwcC1yZWdpb246IG5vLWRyYWc7XG5gO3QuTWl4aW5zPXtub1NlbGVjdDppLHRleHRPdmVyZmxvdzphLHNjcm9sbGJhcjp7W3IuU2l6ZS5iYXNlXTpsLFtyLlNpemUuc21hbGxdOnN9LGFwcFJlZ2lvbjp7ZHJhZzpjLG5vRHJhZzp1fX19LDU0NTk6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlBhbGV0dGU9dm9pZCAwLHQuUGFsZXR0ZT17YmFja2dyb3VuZDE6XCJiYWNrZ3JvdW5kMVwiLGJhY2tncm91bmQyOlwiYmFja2dyb3VuZDJcIixiYWNrZ3JvdW5kMzpcImJhY2tncm91bmQzXCIsYmFja2dyb3VuZDQ6XCJiYWNrZ3JvdW5kNFwiLGJhY2tncm91bmQ1OlwiYmFja2dyb3VuZDVcIixiYWNrZ3JvdW5kNjpcImJhY2tncm91bmQ2XCIsYnJhbmRQcmltYXJ5OlwiYnJhbmRQcmltYXJ5XCIsYnJhbmRTZWNvbmRhcnk6XCJicmFuZFNlY29uZGFyeVwiLGJyYW5kUHJpbWFyeUFjdGl2ZTpcImJyYW5kUHJpbWFyeUFjdGl2ZVwiLGJyYW5kUHJpbWFyeUhvdmVyOlwiYnJhbmRQcmltYXJ5SG92ZXJcIixicmFuZFByaW1hcnlGb2N1c2VkOlwiYnJhbmRQcmltYXJ5Rm9jdXNlZFwiLGJyYW5kUHJpbWFyeVRleHQ6XCJicmFuZFByaW1hcnlUZXh0XCIsYnJhbmRTZWNvbmRhcnlBY3RpdmU6XCJicmFuZFNlY29uZGFyeUFjdGl2ZVwiLGJyYW5kU2Vjb25kYXJ5SG92ZXI6XCJicmFuZFNlY29uZGFyeUhvdmVyXCIsYnJhbmRTZWNvbmRhcnlGb2N1c2VkOlwiYnJhbmRTZWNvbmRhcnlGb2N1c2VkXCIsYnJhbmRTZWNvbmRhcnlUZXh0OlwiYnJhbmRTZWNvbmRhcnlUZXh0XCIsaW5wdXRCYWNrZ3JvdW5kOlwiaW5wdXRCYWNrZ3JvdW5kXCIsaW5wdXRDb2xvcjpcImlucHV0Q29sb3JcIixpbnB1dFBsYWNlaG9sZGVyOlwiaW5wdXRQbGFjZWhvbGRlclwiLGlucHV0RGlzYWJsZWQ6XCJpbnB1dERpc2FibGVkXCIsaW5wdXRGb2N1c2VkOlwiaW5wdXRGb2N1c2VkXCIsaW5wdXRCb3JkZXI6XCJpbnB1dEJvcmRlclwiLHN0YXR1c1N1Y2Nlc3M6XCJzdGF0dXNTdWNjZXNzXCIsc3RhdHVzV2FybmluZzpcInN0YXR1c1dhcm5pbmdcIixzdGF0dXNDcml0aWNhbDpcInN0YXR1c0NyaXRpY2FsXCIsc3RhdHVzQWN0aXZlOlwic3RhdHVzQWN0aXZlXCIsdGV4dERlZmF1bHQ6XCJ0ZXh0RGVmYXVsdFwiLHRleHRIZWxwOlwidGV4dEhlbHBcIix0ZXh0SW5hY3RpdmU6XCJ0ZXh0SW5hY3RpdmVcIixib3JkZXJOZXV0cmFsOlwiYm9yZGVyTmV1dHJhbFwiLGNvbnRlbnRCYWNrZ3JvdW5kMTpcImNvbnRlbnRCYWNrZ3JvdW5kMVwiLGNvbnRlbnRCYWNrZ3JvdW5kMjpcImNvbnRlbnRCYWNrZ3JvdW5kMlwiLGNvbnRlbnRCYWNrZ3JvdW5kMzpcImNvbnRlbnRCYWNrZ3JvdW5kM1wiLGNvbnRlbnRCYWNrZ3JvdW5kNDpcImNvbnRlbnRCYWNrZ3JvdW5kNFwiLGNvbnRlbnRCYWNrZ3JvdW5kNTpcImNvbnRlbnRCYWNrZ3JvdW5kNVwiLGxpbmtEZWZhdWx0OlwibGlua0RlZmF1bHRcIixsaW5rSG92ZXI6XCJsaW5rSG92ZXJcIn19LDUzMTc6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sNDI2NjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTQ4MyksdCl9LDk0ODM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuT3BlbkZpbkRhcmtUaGVtZT10Lk9wZW5GaW5MaWdodFRoZW1lPXZvaWQgMDtjb25zdCByPW4oNTQ1OSksbz1uKDM0NzEpLGk9big2NzE0KSxhPXtbci5QYWxldHRlLmJyYW5kUHJpbWFyeV06by5Db2xvci5vcGVuRmluLFtyLlBhbGV0dGUuc3RhdHVzU3VjY2Vzc106by5Db2xvci5mdW5jdGlvbmFsMSxbci5QYWxldHRlLnN0YXR1c1dhcm5pbmddOm8uQ29sb3IuZnVuY3Rpb25hbDEwLFtyLlBhbGV0dGUuc3RhdHVzQ3JpdGljYWxdOm8uQ29sb3IuZnVuY3Rpb25hbDcsW3IuUGFsZXR0ZS5zdGF0dXNBY3RpdmVdOm8uQ29sb3IuZnVuY3Rpb25hbDMsW3IuUGFsZXR0ZS5ib3JkZXJOZXV0cmFsXTpvLkNvbG9yLnNpbHZlckdyYXksW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDFdOm8uQ29sb3Iub3BlbkZpbixbci5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kMl06XCIjMDAwMDAwXCIsW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDNdOlwiIzAwMDAwMFwiLFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQ0XTpcIiMwMDAwMDBcIixbci5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kNV06XCIjMDAwMDAwXCIsW3IuUGFsZXR0ZS5saW5rRGVmYXVsdF06by5Db2xvci5mdW5jdGlvbmFsNCxbci5QYWxldHRlLmxpbmtIb3Zlcl06by5Db2xvci5mdW5jdGlvbmFsNX07dC5PcGVuRmluTGlnaHRUaGVtZT0oMCxpLmNyZWF0ZVRoZW1lKShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse1tyLlBhbGV0dGUuYmFja2dyb3VuZDFdOm8uQ29sb3Iud2hpdGUsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kMl06by5Db2xvci5saWdodEdyYXkxLFtyLlBhbGV0dGUuYmFja2dyb3VuZDNdOm8uQ29sb3IubGlnaHRHcmF5Mixbci5QYWxldHRlLmJhY2tncm91bmQ0XTpvLkNvbG9yLmxpZ2h0R3JheTMsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNV06by5Db2xvci5saWdodEdyYXkzLFtyLlBhbGV0dGUuYmFja2dyb3VuZDZdOm8uQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLmJyYW5kU2Vjb25kYXJ5XTpvLkNvbG9yLmxpZ2h0R3JheTQsW3IuUGFsZXR0ZS5pbnB1dEJhY2tncm91bmRdOm8uQ29sb3IubGlnaHRHcmF5Myxbci5QYWxldHRlLmlucHV0Q29sb3JdOm8uQ29sb3IuZGFya0dyYXk1LFtyLlBhbGV0dGUuaW5wdXRQbGFjZWhvbGRlcl06by5Db2xvci5kYXJrR3JheTIsW3IuUGFsZXR0ZS5pbnB1dERpc2FibGVkXTpvLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUuaW5wdXRGb2N1c2VkXTpvLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS5pbnB1dEJvcmRlcl06by5Db2xvci5uZXV0cmFsR3JheSxbci5QYWxldHRlLnRleHREZWZhdWx0XTpvLkNvbG9yLmRhcmtHcmF5NSxbci5QYWxldHRlLnRleHRIZWxwXTpvLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUudGV4dEluYWN0aXZlXTpvLkNvbG9yLm5ldXRyYWxHcmF5fSkpLHQuT3BlbkZpbkRhcmtUaGVtZT0oMCxpLmNyZWF0ZVRoZW1lKShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse1tyLlBhbGV0dGUuYmFja2dyb3VuZDFdOm8uQ29sb3IuZGFya0dyYXk2LFtyLlBhbGV0dGUuYmFja2dyb3VuZDJdOm8uQ29sb3IuZGFya0dyYXk1LFtyLlBhbGV0dGUuYmFja2dyb3VuZDNdOm8uQ29sb3IuZGFya0dyYXk0LFtyLlBhbGV0dGUuYmFja2dyb3VuZDRdOm8uQ29sb3IuZGFya0dyYXkzLFtyLlBhbGV0dGUuYmFja2dyb3VuZDVdOm8uQ29sb3IuZGFya0dyYXkyLFtyLlBhbGV0dGUuYmFja2dyb3VuZDZdOm8uQ29sb3IuZGFya0dyYXkxLFtyLlBhbGV0dGUuYnJhbmRTZWNvbmRhcnldOm8uQ29sb3IuZGFya0dyYXkyLFtyLlBhbGV0dGUuaW5wdXRCYWNrZ3JvdW5kXTpvLkNvbG9yLmRhcmtHcmF5MSxbci5QYWxldHRlLmlucHV0Q29sb3JdOm8uQ29sb3Iud2hpdGUsW3IuUGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyXTpvLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS5pbnB1dERpc2FibGVkXTpvLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUuaW5wdXRGb2N1c2VkXTpvLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS5pbnB1dEJvcmRlcl06by5Db2xvci5uZXV0cmFsR3JheSxbci5QYWxldHRlLnRleHREZWZhdWx0XTpvLkNvbG9yLndoaXRlLFtyLlBhbGV0dGUudGV4dEhlbHBdOm8uQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLnRleHRJbmFjdGl2ZV06by5Db2xvci5uZXV0cmFsR3JheX0pKX0sNDIwOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlRoZW1lUHJvdmlkZXI9dm9pZCAwO2NvbnN0IHI9big1ODkzKSxvPW4oNzUxOCksaT1uKDMxOTApLGE9big3MDg4KSxsPW4oMTA2OSk7dC5UaGVtZVByb3ZpZGVyPSh7Y2hpbGRyZW46ZSx0aGVtZXM6dCxzY2hlbWU6bj1pLkNvbG9yU2NoZW1lLnN5c3RlbX0pPT57Y29uc3Qgcz0oMCxhLnVzZVRoZW1lKSh7dGhlbWVzOnQsc2NoZW1lOm59KTtyZXR1cm4oMCxyLmpzeCkoby5UaGVtZVByb3ZpZGVyLE9iamVjdC5hc3NpZ24oe3RoZW1lOnN9LHtjaGlsZHJlbjooMCxyLmpzeHMpKHIuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxyLmpzeCkobC5HbG9iYWxTdHlsZXMse30pLGVdfSl9KSl9fSwzODc3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigxMDY5KSx0KSxvKG4oMTMxMCksdCksbyhuKDk1MDcpLHQpfSw5NzU4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbnRhY3RTdGF0dXNJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1yKG4oNzUxOCkpLGE9bigxMzMzKSxsPXthdmFpbGFibGU6KDAsby5qc3gpKGEuQ2hlY2tTVkcse30pLGF3YXk6KDAsby5qc3gpKGEuQnVzeVNWRyx7fSksXCJkby1ub3QtZGlzdHVyYlwiOigwLG8uanN4KShhLkRvTm90RGlzdHVyYlNWRyx7fSksb2ZmbGluZTooMCxvLmpzeCkoYS5PZmZsaW5lU1ZHLHt9KSxidXN5Om51bGx9O3QuQ29udGFjdFN0YXR1c0ljb249KHtvbmxpbmVTdGF0dXM6ZX0pPT5lPygwLG8uanN4KShzLE9iamVjdC5hc3NpZ24oe29ubGluZVN0YXR1czplfSx7Y2hpbGRyZW46bFtlXXx8bnVsbH0pKTpudWxsO2NvbnN0IHM9aS5kZWZhdWx0LmRpdmBcbiAgYm9yZGVyOiAxLjZweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDF9O1xuXG4gIGJhY2tncm91bmQ6ICR7KHtvbmxpbmVTdGF0dXM6ZX0pPT5cImJ1c3lcIj09PWU/XCIjQzIxMzEzXCI6XCJ3aGl0ZVwifTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuXG4gIGhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG4gIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDc4Ljk1JTtcbiAgcmlnaHQ6IC03LjAyJTtcbiAgdG9wOiA3Ny4xMiU7XG4gIGJvdHRvbTogLTQuMjQlO1xuYH0sMTMzMzooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5PZmZsaW5lU1ZHPXQuRG9Ob3REaXN0dXJiU1ZHPXQuQnVzeVNWRz10LkNoZWNrU1ZHPXZvaWQgMDtjb25zdCByPW4oNTg5Myk7dC5DaGVja1NWRz0oKT0+KDAsci5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSx7Y2hpbGRyZW46KDAsci5qc3gpKFwicGF0aFwiLHtkOlwiTTggMEM4LjczNDM4IDAgOS40NDAxIDAuMDk2MzU0MiAxMC4xMTcyIDAuMjg5MDYzQzEwLjc5NDMgMC40ODE3NzEgMTEuNDI5NyAwLjc1MjYwNCAxMi4wMjM0IDEuMTAxNTZDMTIuNjE3MiAxLjQ1MDUyIDEzLjE1NjMgMS44Njk3OSAxMy42NDA2IDIuMzU5MzhDMTQuMTMwMiAyLjg0Mzc1IDE0LjU0OTUgMy4zODI4MSAxNC44OTg0IDMuOTc2NTZDMTUuMjQ3NCA0LjU3MDMxIDE1LjUxODIgNS4yMDU3MyAxNS43MTA5IDUuODgyODFDMTUuOTAzNiA2LjU1OTkgMTYgNy4yNjU2MyAxNiA4QzE2IDguNzI5MTcgMTUuOTAzNiA5LjQzNDkgMTUuNzEwOSAxMC4xMTcyQzE1LjUxODIgMTAuNzk0MyAxNS4yNDc0IDExLjQyOTcgMTQuODk4NCAxMi4wMjM0QzE0LjU0OTUgMTIuNjE3MiAxNC4xMzAyIDEzLjE1ODkgMTMuNjQwNiAxMy42NDg0QzEzLjE1NjMgMTQuMTMyOCAxMi42MTcyIDE0LjU0OTUgMTIuMDIzNCAxNC44OTg0QzExLjQyOTcgMTUuMjQ3NCAxMC43OTE3IDE1LjUxODIgMTAuMTA5NCAxNS43MTA5QzkuNDMyMjkgMTUuOTAzNiA4LjcyOTE3IDE2IDggMTZDNy4yNzA4MyAxNiA2LjU2NTEgMTUuOTAzNiA1Ljg4MjgxIDE1LjcxMDlDNS4yMDU3MyAxNS41MTgyIDQuNTcwMzEgMTUuMjQ3NCAzLjk3NjU2IDE0Ljg5ODRDMy4zODI4MSAxNC41NDk1IDIuODQxMTUgMTQuMTMyOCAyLjM1MTU2IDEzLjY0ODRDMS44NjcxOSAxMy4xNTg5IDEuNDUwNTIgMTIuNjE3MiAxLjEwMTU2IDEyLjAyMzRDMC43NTI2MDQgMTEuNDI5NyAwLjQ4MTc3MSAxMC43OTQzIDAuMjg5MDYzIDEwLjExNzJDMC4wOTYzNTQyIDkuNDM0OSAwIDguNzI5MTcgMCA4QzAgNy4yNzA4MyAwLjA5NjM1NDIgNi41Njc3MSAwLjI4OTA2MyA1Ljg5MDYzQzAuNDgxNzcxIDUuMjA4MzMgMC43NTI2MDQgNC41NzAzMSAxLjEwMTU2IDMuOTc2NTZDMS40NTA1MiAzLjM4MjgxIDEuODY3MTkgMi44NDM3NSAyLjM1MTU2IDIuMzU5MzhDMi44NDExNSAxLjg2OTc5IDMuMzgyODEgMS40NTA1MiAzLjk3NjU2IDEuMTAxNTZDNC41NzAzMSAwLjc1MjYwNCA1LjIwNTczIDAuNDgxNzcxIDUuODgyODEgMC4yODkwNjNDNi41NjUxIDAuMDk2MzU0MiA3LjI3MDgzIDAgOCAwWk0xMC42MzI4IDUuNjg3NUMxMC40MjQ1IDUuNjg3NSAxMC4yNDc0IDUuNzYwNDIgMTAuMTAxNiA1LjkwNjI1TDcuMjczNDQgOC43NUw2LjI2NTYzIDcuNzVDNi4xMTk3OSA3LjYwNDE3IDUuOTQ1MzEgNy41MzEyNSA1Ljc0MjE5IDcuNTMxMjVDNS42NDMyMyA3LjUzMTI1IDUuNTQ5NDggNy41NTIwOCA1LjQ2MDk0IDcuNTkzNzVDNS4zNzI0IDcuNjM1NDIgNS4yOTE2NyA3LjY5MjcxIDUuMjE4NzUgNy43NjU2M0M1LjE1MTA0IDcuODMzMzMgNS4wOTYzNSA3LjkxMTQ2IDUuMDU0NjkgOEM1LjAxMzAyIDguMDg4NTQgNC45OTIxOSA4LjE4MjI5IDQuOTkyMTkgOC4yODEyNUM0Ljk5MjE5IDguNDg5NTggNS4wNjUxIDguNjY2NjcgNS4yMTA5NCA4LjgxMjVMNi43NDIxOSAxMC4zNDM4QzYuODg4MDIgMTAuNDg5NiA3LjA2NTEgMTAuNTYyNSA3LjI3MzQ0IDEwLjU2MjVDNy40ODE3NyAxMC41NjI1IDcuNjU4ODUgMTAuNDg5NiA3LjgwNDY5IDEwLjM0MzhMMTEuMTY0MSA2Ljk2ODc1QzExLjMwOTkgNi44MjI5MiAxMS4zODI4IDYuNjQ1ODMgMTEuMzgyOCA2LjQzNzVDMTEuMzgyOCA2LjMzODU0IDExLjM2MiA2LjI0NDc5IDExLjMyMDMgNi4xNTYyNUMxMS4yNzg2IDYuMDY3NzEgMTEuMjIxNCA1Ljk4OTU4IDExLjE0ODQgNS45MjE4OEMxMS4wODA3IDUuODQ4OTYgMTEuMDAyNiA1Ljc5MTY3IDEwLjkxNDEgNS43NUMxMC44MjU1IDUuNzA4MzMgMTAuNzMxOCA1LjY4NzUgMTAuNjMyOCA1LjY4NzVaXCIsZmlsbDpcIiMyMDc3MzVcIn0pfSkpLHQuQnVzeVNWRz0oKT0+KDAsci5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE3XCIsdmlld0JveDpcIjAgMCAxNiAxN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSx7Y2hpbGRyZW46KDAsci5qc3gpKFwicGF0aFwiLHtkOlwiTTggMC43OTAyMzdDOC43MzQzOCAwLjc5MDIzNyA5LjQ0MDEgMC44ODY1OTIgMTAuMTE3MiAxLjA3OTNDMTAuNzk0MyAxLjI3MjAxIDExLjQyOTcgMS41NDI4NCAxMi4wMjM0IDEuODkxOEMxMi42MTcyIDIuMjQwNzYgMTMuMTU2MyAyLjY2MDAzIDEzLjY0MDYgMy4xNDk2MUMxNC4xMzAyIDMuNjMzOTkgMTQuNTQ5NSA0LjE3MzA1IDE0Ljg5ODQgNC43NjY4QzE1LjI0NzQgNS4zNjA1NSAxNS41MTgyIDUuOTk1OTcgMTUuNzEwOSA2LjY3MzA1QzE1LjkwMzYgNy4zNTAxMyAxNiA4LjA1NTg2IDE2IDguNzkwMjRDMTYgOS41MTk0IDE1LjkwMzYgMTAuMjI1MSAxNS43MTA5IDEwLjkwNzRDMTUuNTE4MiAxMS41ODQ1IDE1LjI0NzQgMTIuMjE5OSAxNC44OTg0IDEyLjgxMzdDMTQuNTQ5NSAxMy40MDc0IDE0LjEzMDIgMTMuOTQ5MSAxMy42NDA2IDE0LjQzODdDMTMuMTU2MyAxNC45MjMxIDEyLjYxNzIgMTUuMzM5NyAxMi4wMjM0IDE1LjY4ODdDMTEuNDI5NyAxNi4wMzc2IDEwLjc5MTcgMTYuMzA4NSAxMC4xMDk0IDE2LjUwMTJDOS40MzIyOSAxNi42OTM5IDguNzI5MTcgMTYuNzkwMiA4IDE2Ljc5MDJDNy4yNzA4MyAxNi43OTAyIDYuNTY1MSAxNi42OTM5IDUuODgyODEgMTYuNTAxMkM1LjIwNTczIDE2LjMwODUgNC41NzAzMSAxNi4wMzc2IDMuOTc2NTYgMTUuNjg4N0MzLjM4MjgxIDE1LjMzOTcgMi44NDExNSAxNC45MjMxIDIuMzUxNTYgMTQuNDM4N0MxLjg2NzE5IDEzLjk0OTEgMS40NTA1MiAxMy40MDc0IDEuMTAxNTYgMTIuODEzN0MwLjc1MjYwNCAxMi4yMTk5IDAuNDgxNzcxIDExLjU4NDUgMC4yODkwNjMgMTAuOTA3NEMwLjA5NjM1NDIgMTAuMjI1MSAwIDkuNTE5NCAwIDguNzkwMjRDMCA4LjA2MTA3IDAuMDk2MzU0MiA3LjM1Nzk1IDAuMjg5MDYzIDYuNjgwODZDMC40ODE3NzEgNS45OTg1NyAwLjc1MjYwNCA1LjM2MDU1IDEuMTAxNTYgNC43NjY4QzEuNDUwNTIgNC4xNzMwNSAxLjg2NzE5IDMuNjMzOTkgMi4zNTE1NiAzLjE0OTYxQzIuODQxMTUgMi42NjAwMyAzLjM4MjgxIDIuMjQwNzYgMy45NzY1NiAxLjg5MThDNC41NzAzMSAxLjU0Mjg0IDUuMjA1NzMgMS4yNzIwMSA1Ljg4MjgxIDEuMDc5M0M2LjU2NTEgMC44ODY1OTIgNy4yNzA4MyAwLjc5MDIzNyA4IDAuNzkwMjM3Wk03LjMyMDMxIDQuMDQ4MDVDNy4yMTA5NCA0LjA0ODA1IDcuMTA2NzcgNC4wNzE0OSA3LjAwNzgxIDQuMTE4MzZDNi45MTQwNiA0LjE2MDAzIDYuODI4MTMgNC4yMTk5MiA2Ljc1IDQuMjk4MDVDNi42NzcwOCA0LjM3MDk3IDYuNjE3MTkgNC40NTY5IDYuNTcwMzEgNC41NTU4NkM2LjUyODY1IDQuNjQ5NjEgNi41MDc4MSA0Ljc1MTE3IDYuNTA3ODEgNC44NjA1NVY5LjE5NjQ5QzYuNTA3ODEgOS4zMDU4NiA2LjUyODY1IDkuNDEyNjMgNi41NzAzMSA5LjUxNjhDNi42MTE5OCA5LjYyMDk3IDYuNjcxODggOS43MTIxMSA2Ljc1IDkuNzkwMjRMOS4xODc1IDEyLjIxMjFDOS4zNDg5NiAxMi4zNzM2IDkuNTQxNjcgMTIuNDU0MyA5Ljc2NTYzIDEyLjQ1NDNDOS44NzUgMTIuNDU0MyA5Ljk3OTE3IDEyLjQzMzUgMTAuMDc4MSAxMi4zOTE4QzEwLjE3NzEgMTIuMzQ0OSAxMC4yNjMgMTIuMjg1IDEwLjMzNTkgMTIuMjEyMUMxMC40MDg5IDEyLjEzNCAxMC40NjYxIDEyLjA0NTQgMTAuNTA3OCAxMS45NDY1QzEwLjU1NDcgMTEuODQ3NSAxMC41NzgxIDExLjc0MzQgMTAuNTc4MSAxMS42MzRDMTAuNTc4MSAxMS41Mjk4IDEwLjU1NDcgMTEuNDI4MyAxMC41MDc4IDExLjMyOTNDMTAuNDY2MSAxMS4yMjUxIDEwLjQwODkgMTEuMTM2NiAxMC4zMzU5IDExLjA2MzdMOC4xMzI4MSA4Ljg3NjE4VjQuODYwNTVDOC4xMzI4MSA0Ljc1MTE3IDguMTA5MzggNC42NDcwMSA4LjA2MjUgNC41NDgwNUM4LjAyMDgzIDQuNDQ5MDkgNy45NjM1NCA0LjM2MzE1IDcuODkwNjMgNC4yOTAyNEM3LjgxNzcxIDQuMjE3MzIgNy43MzE3NyA0LjE2MDAzIDcuNjMyODEgNC4xMTgzNkM3LjUzMzg1IDQuMDcxNDkgNy40Mjk2OSA0LjA0ODA1IDcuMzIwMzEgNC4wNDgwNVpcIixmaWxsOlwiI0ZFOUY0RFwifSl9KSksdC5Eb05vdERpc3R1cmJTVkc9KCk9PigwLHIuanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxN1wiLHZpZXdCb3g6XCIwIDAgMTYgMTdcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0se2NoaWxkcmVuOigwLHIuanN4KShcInBhdGhcIix7ZDpcIk04IDAuNTkwMjU2QzguNzM0MzggMC41OTAyNTYgOS40NDAxIDAuNjg2NjEgMTAuMTE3MiAwLjg3OTMxOEMxMC43OTQzIDEuMDcyMDMgMTEuNDI5NyAxLjM0Mjg2IDEyLjAyMzQgMS42OTE4MkMxMi42MTcyIDIuMDQwNzggMTMuMTU2MiAyLjQ2MDA1IDEzLjY0MDYgMi45NDk2M0MxNC4xMzAyIDMuNDM0MDEgMTQuNTQ5NSAzLjk3MzA3IDE0Ljg5ODQgNC41NjY4MkMxNS4yNDc0IDUuMTYwNTcgMTUuNTE4MiA1Ljc5NTk4IDE1LjcxMDkgNi40NzMwN0MxNS45MDM2IDcuMTUwMTUgMTYgNy44NTU4OCAxNiA4LjU5MDI2QzE2IDkuMzE5NDIgMTUuOTAzNiAxMC4wMjUyIDE1LjcxMDkgMTAuNzA3NEMxNS41MTgyIDExLjM4NDUgMTUuMjQ3NCAxMi4wMTk5IDE0Ljg5ODQgMTIuNjEzN0MxNC41NDk1IDEzLjIwNzQgMTQuMTMwMiAxMy43NDkxIDEzLjY0MDYgMTQuMjM4N0MxMy4xNTYyIDE0LjcyMzEgMTIuNjE3MiAxNS4xMzk3IDEyLjAyMzQgMTUuNDg4N0MxMS40Mjk3IDE1LjgzNzcgMTAuNzkxNyAxNi4xMDg1IDEwLjEwOTQgMTYuMzAxMkM5LjQzMjI5IDE2LjQ5MzkgOC43MjkxNyAxNi41OTAzIDggMTYuNTkwM0M3LjI3MDgzIDE2LjU5MDMgNi41NjUxIDE2LjQ5MzkgNS44ODI4MSAxNi4zMDEyQzUuMjA1NzMgMTYuMTA4NSA0LjU3MDMxIDE1LjgzNzcgMy45NzY1NiAxNS40ODg3QzMuMzgyODEgMTUuMTM5NyAyLjg0MTE1IDE0LjcyMzEgMi4zNTE1NiAxNC4yMzg3QzEuODY3MTkgMTMuNzQ5MSAxLjQ1MDUyIDEzLjIwNzQgMS4xMDE1NiAxMi42MTM3QzAuNzUyNjA0IDEyLjAxOTkgMC40ODE3NzEgMTEuMzg0NSAwLjI4OTA2MiAxMC43MDc0QzAuMDk2MzU0MiAxMC4wMjUyIDAgOS4zMTk0MiAwIDguNTkwMjZDMCA3Ljg2MTA5IDAuMDk2MzU0MiA3LjE1Nzk2IDAuMjg5MDYyIDYuNDgwODhDMC40ODE3NzEgNS43OTg1OSAwLjc1MjYwNCA1LjE2MDU3IDEuMTAxNTYgNC41NjY4MkMxLjQ1MDUyIDMuOTczMDcgMS44NjcxOSAzLjQzNDAxIDIuMzUxNTYgMi45NDk2M0MyLjg0MTE1IDIuNDYwMDUgMy4zODI4MSAyLjA0MDc4IDMuOTc2NTYgMS42OTE4MkM0LjU3MDMxIDEuMzQyODYgNS4yMDU3MyAxLjA3MjAzIDUuODgyODEgMC44NzkzMThDNi41NjUxIDAuNjg2NjEgNy4yNzA4MyAwLjU5MDI1NiA4IDAuNTkwMjU2Wk01LjQ3NjU2IDcuNzQ2NTFDNS4zNjcxOSA3Ljc0NjUxIDUuMjYwNDIgNy43Njk5NCA1LjE1NjI1IDcuODE2ODJDNS4wNTcyOSA3Ljg2MzY5IDQuOTY4NzUgNy45MjYxOSA0Ljg5MDYyIDguMDA0MzJDNC44MTI1IDguMDgyNDQgNC43NSA4LjE3MzU5IDQuNzAzMTIgOC4yNzc3NkM0LjY1NjI1IDguMzc2NzEgNC42MzI4MSA4LjQ4MDg4IDQuNjMyODEgOC41OTAyNkM0LjYzMjgxIDguNjk5NjMgNC42NTYyNSA4LjgwNjQgNC43MDMxMiA4LjkxMDU3QzQuNzUgOS4wMDk1MyA0LjgxMjUgOS4wOTgwNyA0Ljg5MDYyIDkuMTc2MTlDNC45Njg3NSA5LjI1NDMyIDUuMDU3MjkgOS4zMTY4MiA1LjE1NjI1IDkuMzYzNjlDNS4yNjA0MiA5LjQxMDU3IDUuMzY3MTkgOS40MzQwMSA1LjQ3NjU2IDkuNDM0MDFIMTAuNTIzNEMxMC42MzI4IDkuNDM0MDEgMTAuNzM3IDkuNDEwNTcgMTAuODM1OSA5LjM2MzY5QzEwLjk0MDEgOS4zMTY4MiAxMS4wMzEyIDkuMjU0MzIgMTEuMTA5NCA5LjE3NjE5QzExLjE4NzUgOS4wOTgwNyAxMS4yNSA5LjAwOTUzIDExLjI5NjkgOC45MTA1N0MxMS4zNDM4IDguODA2NCAxMS4zNjcyIDguNjk5NjMgMTEuMzY3MiA4LjU5MDI2QzExLjM2NzIgOC40ODA4OCAxMS4zNDM4IDguMzc2NzEgMTEuMjk2OSA4LjI3Nzc2QzExLjI1IDguMTczNTkgMTEuMTg3NSA4LjA4MjQ0IDExLjEwOTQgOC4wMDQzMkMxMS4wMzEyIDcuOTI2MTkgMTAuOTQwMSA3Ljg2MzY5IDEwLjgzNTkgNy44MTY4MkMxMC43MzcgNy43Njk5NCAxMC42MzI4IDcuNzQ2NTEgMTAuNTIzNCA3Ljc0NjUxSDUuNDc2NTZaXCIsZmlsbDpcIiNDMjEzMTNcIn0pfSkpLHQuT2ZmbGluZVNWRz0oKT0+KDAsci5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE3XCIsdmlld0JveDpcIjAgMCAxNiAxN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSx7Y2hpbGRyZW46KDAsci5qc3gpKFwicGF0aFwiLHtkOlwiTTggMC45OTAyNTJDOC43MzQzOCAwLjk5MDI1MiA5LjQ0MDEgMS4wODY2MSAxMC4xMTcyIDEuMjc5MzFDMTAuNzk0MyAxLjQ3MjAyIDExLjQyOTcgMS43NDI4NiAxMi4wMjM0IDIuMDkxODFDMTIuNjE3MiAyLjQ0MDc3IDEzLjE1NjIgMi44NjAwNCAxMy42NDA2IDMuMzQ5NjNDMTQuMTMwMiAzLjgzNCAxNC41NDk1IDQuMzczMDYgMTQuODk4NCA0Ljk2NjgxQzE1LjI0NzQgNS41NjA1NiAxNS41MTgyIDYuMTk1OTggMTUuNzEwOSA2Ljg3MzA2QzE1LjkwMzYgNy41NTAxNSAxNiA4LjI1NTg4IDE2IDguOTkwMjVDMTYgOS43MTk0MiAxNS45MDM2IDEwLjQyNTEgMTUuNzEwOSAxMS4xMDc0QzE1LjUxODIgMTEuNzg0NSAxNS4yNDc0IDEyLjQxOTkgMTQuODk4NCAxMy4wMTM3QzE0LjU0OTUgMTMuNjA3NCAxNC4xMzAyIDE0LjE0OTEgMTMuNjQwNiAxNC42Mzg3QzEzLjE1NjIgMTUuMTIzMSAxMi42MTcyIDE1LjUzOTcgMTIuMDIzNCAxNS44ODg3QzExLjQyOTcgMTYuMjM3NiAxMC43OTE3IDE2LjUwODUgMTAuMTA5NCAxNi43MDEyQzkuNDMyMjkgMTYuODkzOSA4LjcyOTE3IDE2Ljk5MDMgOCAxNi45OTAzQzcuMjcwODMgMTYuOTkwMyA2LjU2NTEgMTYuODkzOSA1Ljg4MjgxIDE2LjcwMTJDNS4yMDU3MyAxNi41MDg1IDQuNTcwMzEgMTYuMjM3NiAzLjk3NjU2IDE1Ljg4ODdDMy4zODI4MSAxNS41Mzk3IDIuODQxMTUgMTUuMTIzMSAyLjM1MTU2IDE0LjYzODdDMS44NjcxOSAxNC4xNDkxIDEuNDUwNTIgMTMuNjA3NCAxLjEwMTU2IDEzLjAxMzdDMC43NTI2MDQgMTIuNDE5OSAwLjQ4MTc3MSAxMS43ODQ1IDAuMjg5MDYyIDExLjEwNzRDMC4wOTYzNTQyIDEwLjQyNTEgMCA5LjcxOTQyIDAgOC45OTAyNUMwIDguMjYxMDkgMC4wOTYzNTQyIDcuNTU3OTYgMC4yODkwNjIgNi44ODA4OEMwLjQ4MTc3MSA2LjE5ODU5IDAuNzUyNjA0IDUuNTYwNTYgMS4xMDE1NiA0Ljk2NjgxQzEuNDUwNTIgNC4zNzMwNiAxLjg2NzE5IDMuODM0IDIuMzUxNTYgMy4zNDk2M0MyLjg0MTE1IDIuODYwMDQgMy4zODI4MSAyLjQ0MDc3IDMuOTc2NTYgMi4wOTE4MUM0LjU3MDMxIDEuNzQyODYgNS4yMDU3MyAxLjQ3MjAyIDUuODgyODEgMS4yNzkzMUM2LjU2NTEgMS4wODY2MSA3LjI3MDgzIDAuOTkwMjUyIDggMC45OTAyNTJaTTggMi42Nzc3NUM3LjQyMTg4IDIuNjc3NzUgNi44NjQ1OCAyLjc1MzI3IDYuMzI4MTIgMi45MDQzMUM1Ljc5MTY3IDMuMDU1MzYgNS4yODkwNiAzLjI2ODkgNC44MjAzMSAzLjU0NDk0QzQuMzUxNTYgMy44MjA5OCAzLjkyNDQ4IDQuMTUxNzEgMy41MzkwNiA0LjUzNzEzQzMuMTU4ODUgNC45MTczNCAyLjgzMDczIDUuMzQxODEgMi41NTQ2OSA1LjgxMDU2QzIuMjc4NjUgNi4yNzkzMSAyLjA2NTEgNi43ODE5MiAxLjkxNDA2IDcuMzE4MzhDMS43NjMwMiA3Ljg1NDg0IDEuNjg3NSA4LjQxMjEzIDEuNjg3NSA4Ljk5MDI1QzEuNjg3NSA5LjU2ODM4IDEuNzYzMDIgMTAuMTI1NyAxLjkxNDA2IDEwLjY2MjFDMi4wNjUxIDExLjE5ODYgMi4yNzg2NSAxMS43MDEyIDIuNTU0NjkgMTIuMTY5OUMyLjgzMDczIDEyLjYzODcgMy4xNTg4NSAxMy4wNjU4IDMuNTM5MDYgMTMuNDUxMkMzLjkyNDQ4IDEzLjgzMTQgNC4zNTE1NiAxNC4xNTk1IDQuODIwMzEgMTQuNDM1NkM1LjI4OTA2IDE0LjcxMTYgNS43OTE2NyAxNC45MjUxIDYuMzI4MTIgMTUuMDc2MkM2Ljg2NDU4IDE1LjIyNzIgNy40MjE4OCAxNS4zMDI4IDggMTUuMzAyOEM4LjU3ODEyIDE1LjMwMjggOS4xMzU0MiAxNS4yMjcyIDkuNjcxODggMTUuMDc2MkMxMC4yMDgzIDE0LjkyNTEgMTAuNzEwOSAxNC43MTE2IDExLjE3OTcgMTQuNDM1NkMxMS42NDg0IDE0LjE1OTUgMTIuMDcyOSAxMy44MzE0IDEyLjQ1MzEgMTMuNDUxMkMxMi44Mzg1IDEzLjA2NTggMTMuMTY5MyAxMi42Mzg3IDEzLjQ0NTMgMTIuMTY5OUMxMy43MjE0IDExLjcwMTIgMTMuOTM0OSAxMS4xOTg2IDE0LjA4NTkgMTAuNjYyMUMxNC4yMzcgMTAuMTI1NyAxNC4zMTI1IDkuNTY4MzggMTQuMzEyNSA4Ljk5MDI1QzE0LjMxMjUgOC40MTIxMyAxNC4yMzcgNy44NTQ4NCAxNC4wODU5IDcuMzE4MzhDMTMuOTM0OSA2Ljc4MTkyIDEzLjcyMTQgNi4yNzkzMSAxMy40NDUzIDUuODEwNTZDMTMuMTY5MyA1LjM0MTgxIDEyLjgzODUgNC45MTczNCAxMi40NTMxIDQuNTM3MTNDMTIuMDcyOSA0LjE1MTcxIDExLjY0ODQgMy44MjA5OCAxMS4xNzk3IDMuNTQ0OTRDMTAuNzEwOSAzLjI2ODkgMTAuMjA4MyAzLjA1NTM2IDkuNjcxODggMi45MDQzMUM5LjEzNTQyIDIuNzUzMjcgOC41NzgxMiAyLjY3Nzc1IDggMi42Nzc3NVpcIixmaWxsOlwiIzk3OTc5N1wifSl9KSl9LDM0Mjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9KSxpPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZyKHQsZSxuKTtyZXR1cm4gbyh0LGUpLHR9LGE9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbD10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbnRhY3RDYXJkPXZvaWQgMDtjb25zdCBzPW4oNTg5MyksYz1pKG4oNjY4OSkpLHU9bChuKDc1MTgpKSxmPW4oNTM3NyksZD1uKDc0NDQpLHA9big5NzU4KSxoPW4oODgzMik7dC5Db250YWN0Q2FyZD1lPT57dmFye25hbWU6dCx0aXRsZTpuLHBob3RvVXJsOnIsdXNlSW5pdGlhbHM6bz0hMSxkZXRhaWxzOmksb25saW5lU3RhdHVzOmx9PWUsdT1hKGUsW1wibmFtZVwiLFwidGl0bGVcIixcInBob3RvVXJsXCIsXCJ1c2VJbml0aWFsc1wiLFwiZGV0YWlsc1wiLFwib25saW5lU3RhdHVzXCJdKTtjb25zdCBmPXJ8fG8sRT0oMCxjLnVzZU1lbW8pKCgoKT0+KDAsZC5nZXRJbml0aWFscykodCkpLFt0XSksUz0oMCxjLnVzZU1lbW8pKCgoKT0+KDAsaC5nZW5lcmF0ZUNvbG9yRnJvbVN0cmluZykodCkpLFt0XSksaj0oMCxjLmNyZWF0ZVJlZikoKTtyZXR1cm4oMCxjLnVzZUVmZmVjdCkoKCgpPT57dmFyIGU7bnVsbD09PShlPWouY3VycmVudCl8fHZvaWQgMD09PWV8fGUuc2Nyb2xsVG8oMCwwKX0pKSwoMCxzLmpzeHMpKGcsT2JqZWN0LmFzc2lnbih7fSx1LHtjaGlsZHJlbjpbKDAscy5qc3hzKSh2LHtjaGlsZHJlbjpbZiYmKDAscy5qc3hzKShtLE9iamVjdC5hc3NpZ24oe2ljb25Db2xvcjpTfSx7Y2hpbGRyZW46W3I/KDAscy5qc3gpKHkse2FsdDpuLHNyYzpyfSk6KDAscy5qc3gpKEMse2NoaWxkcmVuOkV9KSwoMCxzLmpzeCkocC5Db250YWN0U3RhdHVzSWNvbix7b25saW5lU3RhdHVzOmx9KV19KSksKDAscy5qc3hzKSh3LHtjaGlsZHJlbjpbKDAscy5qc3hzKShiLHtjaGlsZHJlbjpbXCIgXCIsdCxcIiBcIl19KSxuJiYoMCxzLmpzeHMpKHgse2NoaWxkcmVuOltcIiBcIixuLFwiIFwiXX0pXX0pXX0pLCgwLHMuanN4KShPLHt9KSwoMCxzLmpzeCkoXyxPYmplY3QuYXNzaWduKHtyZWY6an0se2NoaWxkcmVuOihudWxsPT1pP3ZvaWQgMDppLmxlbmd0aCk+MD9pLm1hcCgoKGUsbik9PigwLHMuanN4cykoYy5kZWZhdWx0LkZyYWdtZW50LHtjaGlsZHJlbjpbKDAscy5qc3gpKEwse2RlZmluaXRpb25zOmV9KSxuPGkubGVuZ3RoLTEmJigwLHMuanN4KShPLHtwYWRkaW5nOiEwfSldfSxgJHt0fS1kZXRhaWxzLSR7bn1gKSkpOigwLHMuanN4KShcInBcIix7Y2hpbGRyZW46XCJObyBpbmZvcm1hdGlvbiBhdmFpbGFibGUuXCJ9KX0pKV19KSl9O2NvbnN0IGc9dS5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiAxMDAlO1xuYCx2PXUuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmctYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbmAsbT11LmRlZmF1bHQuZGl2YFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2U9PmUuaWNvbkNvbG9yfTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICBoZWlnaHQ6IDYwcHg7XG4gIHdpZHRoOiA2MHB4O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmAsQz11LmRlZmF1bHQuc3BhbmBcbiAgZm9udC1zaXplOiAyNHB4O1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuYCx5PXUuZGVmYXVsdC5pbWdgXG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgb2JqZWN0LWZpdDogY292ZXI7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuYCx3PXUuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgbWluLXdpZHRoOiAwO1xuICBtYXJnaW4tbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbmAsYj11LmRlZmF1bHQuc3BhbmBcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmxhcmdlfTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwYWRkaW5nLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICBmb250LXdlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5mb250V2VpZ2h0LmJvbGR9O1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbmAseD11LmRlZmF1bHQuc3BhbmBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwYWRkaW5nLWJvdHRvbTogMnB4O1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbmAsXz11LmRlZmF1bHQuZGl2YFxuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIGZsZXg6IDE7XG4gIG1hcmdpbi10b3A6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICBtYXJnaW4tYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBwYWRkaW5nLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuYCxPPXUuZGVmYXVsdC5kaXZgXG4gIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICBtYXJnaW4tYm90dG9tOiAkeyh7dGhlbWU6ZSxwYWRkaW5nOnR9KT0+dCYmZS5weC5iYXNlfTtcbmAsTD0oMCx1LmRlZmF1bHQpKGYuRGVmaW5pdGlvbkxpc3QpYFxuICBkdCB7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgfVxuXG4gIGRkIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cbmB9LDMxODg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDM0MjkpLHQpfSw3NDQ0OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5nZXRJbml0aWFscz12b2lkIDAsdC5nZXRJbml0aWFscz1lPT57Y29uc3QgdD1lLnRyaW0oKSxuPXQubGFzdEluZGV4T2YoXCIgXCIpO3JldHVybiBuPi0xP1t0LmNoYXJBdCgwKSx0LmNoYXJBdChuKzEpXS5qb2luKFwiXCIpOnQuc2xpY2UoMCwyKX19LDE5OTY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5INj10Lkg1PXQuSDQ9dC5IMz10LkgyPXQuSDE9dC5IZWFkaW5nPXQuZGVmYXVsdFNpemU9dm9pZCAwO2NvbnN0IGk9big1ODkzKSxhPW8obig3NTE4KSksbD1uKDM0NzEpLHM9big3NzY5KTt0LmRlZmF1bHRTaXplPXtoMTpsLlNpemUueHh4bGFyZ2UsaDI6bC5TaXplLnh4bGFyZ2UsaDM6bC5TaXplLnhsYXJnZSxoNDpsLlNpemUubGFyZ2UsaDU6bC5TaXplLmJhc2UsaDY6bC5TaXplLnNtYWxsfSx0LkhlYWRpbmc9ZT0+e3ZhcntsZXZlbDpuPTEsY2xhc3NOYW1lOm99PWUsYT1yKGUsW1wibGV2ZWxcIixcImNsYXNzTmFtZVwiXSk7Y29uc3QgbD1gaCR7bn1gO3JldHVybigwLGkuanN4KShjLE9iamVjdC5hc3NpZ24oe2NsYXNzTmFtZTpvLGFzOmwsc2l6ZTp0LmRlZmF1bHRTaXplW2xdLHdlaWdodDpcImJvbGRcIn0sYSkpfTtjb25zdCBjPSgwLGEuZGVmYXVsdCkocy5UZXh0KWBcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC5oZWFkaW5nfTtcbmA7dC5IMT0oMCxhLmRlZmF1bHQpKHQuSGVhZGluZykuYXR0cnMoKGU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bGV2ZWw6MX0pKSlgYCx0LkgyPSgwLGEuZGVmYXVsdCkodC5IZWFkaW5nKS5hdHRycygoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtsZXZlbDoyfSkpKWBgLHQuSDM9KDAsYS5kZWZhdWx0KSh0LkhlYWRpbmcpLmF0dHJzKChlPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2xldmVsOjN9KSkpYGAsdC5IND0oMCxhLmRlZmF1bHQpKHQuSGVhZGluZykuYXR0cnMoKGU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bGV2ZWw6NH0pKSlgYCx0Lkg1PSgwLGEuZGVmYXVsdCkodC5IZWFkaW5nKS5hdHRycygoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtsZXZlbDo1fSkpKWBgLHQuSDY9KDAsYS5kZWZhdWx0KSh0LkhlYWRpbmcpLmF0dHJzKChlPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2xldmVsOjZ9KSkpYGB9LDcwNjM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDE5OTYpLHQpfSw3NzY5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig1NDMxKSx0KX0sNTQzMTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5UZXh0PXZvaWQgMDtjb25zdCBvPXIobig3NTE4KSk7dC5UZXh0PW8uZGVmYXVsdC5zcGFuYFxuICBjb2xvcjogJHsoe3RoZW1lOmUsY29sb3I6dD1cInRleHREZWZhdWx0XCJ9KT0+ZS5wYWxldHRlW3RdfTtcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZSxzaXplOnQ9XCJiYXNlXCJ9KT0+ZS5mb250U2l6ZVt0XX07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZSx3ZWlnaHQ6dD1cIm5vcm1hbFwifSk9PmUuZm9udFdlaWdodFt0XX07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQudGV4dH07XG5gLHQuVGV4dC5kaXNwbGF5TmFtZT1cIlRleHRcIn0sMzE5MDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VDb2xvclNjaGVtZT10LkNvbG9yU2NoZW1lPXZvaWQgMDtjb25zdCByPW4oNjY4OSk7dC5Db2xvclNjaGVtZT17ZGFyazpcImRhcmtcIixsaWdodDpcImxpZ2h0XCIsc3lzdGVtOlwic3lzdGVtXCJ9LHQudXNlQ29sb3JTY2hlbWU9KHtjb2xvclNjaGVtZTplLGZhbGxiYWNrU2NoZW1lOm49dC5Db2xvclNjaGVtZS5saWdodH0pPT57Y29uc3RbaSxhXT0oMCxyLnVzZVN0YXRlKShlJiZlIT09dC5Db2xvclNjaGVtZS5zeXN0ZW0/ZTpuKSxsPXQ9PnthKG8odCxlfHxuKSl9O3JldHVybigwLHIudXNlRWZmZWN0KSgoKCk9Pntjb25zdCB0PXdpbmRvdy5tYXRjaE1lZGlhKFwiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKVwiKTtyZXR1cm4gYShvKHQsZXx8bikpLHQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLGwpLCgpPT50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixsKX0pLFtlLGldKSxpfTtjb25zdCBvPShlLG4pPT5uPT09dC5Db2xvclNjaGVtZS5zeXN0ZW0/ZS5tYXRjaGVzP3QuQ29sb3JTY2hlbWUuZGFyazp0LkNvbG9yU2NoZW1lLmxpZ2h0Om59LDM0NzooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VEcm9wZG93bktleWJvYXJkTmF2aWdhdGlvbj12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpO3QudXNlRHJvcGRvd25LZXlib2FyZE5hdmlnYXRpb249KGUsdCxuLG8saSk9Pntjb25zdFthLGxdPSgwLHIudXNlU3RhdGUpKDApLFtzLGNdPSgwLHIudXNlU3RhdGUpKFwiXCIpO2xldCB1O2lmKCgwLHIudXNlRWZmZWN0KSgoKCk9PntpZih0JiYhbil7Y29uc3Qgbj1lLmZsYXQoKS5maW5kSW5kZXgoKGU9PmUudmFsdWU9PT10LnZhbHVlKSk7bj49MCYmbChuKX19KSxbZSx0LG5dKSwoMCxyLnVzZUVmZmVjdCkoKCgpPT57bnx8YyhcIlwiKX0pLFtuXSksKDAsci51c2VFZmZlY3QpKCgoKT0+e2lmKHMpe2NvbnN0IHQ9ZS5mbGF0KCkuZmluZEluZGV4KChlPT5lLnRpdGxlLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChzLnRvTG93ZXJDYXNlKCkpKSk7dD49MCYmbCh0KX19KSxbZSxzXSksZVswXS5sZW5ndGg+MCYmZS5mbGF0KCkubGVuZ3RoPmEpe2NvbnN0W3Qsbl09W01hdGguZmxvb3IoYS9lWzBdLmxlbmd0aCksYSVlWzBdLmxlbmd0aF07dT1lW3RdW25dfXJldHVybigwLHIudXNlRWZmZWN0KSgoKCk9Pntjb25zdCBlPXNldFRpbWVvdXQoKCgpPT57YyhcIlwiKX0pLDUwMCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dChlKX0pLFtzXSkse2ZvY3VzZWRPcHRpb246dSxoYW5kbGVLZXlEb3duOnQ9Pntzd2l0Y2godC5jb2RlKXtjYXNlXCJBcnJvd1VwXCI6dC5wcmV2ZW50RGVmYXVsdCgpLGE+MCYmbChhLTEpO2JyZWFrO2Nhc2VcIkFycm93RG93blwiOnQucHJldmVudERlZmF1bHQoKSxhPGUuZmxhdCgpLmxlbmd0aC0xJiZsKGErMSk7YnJlYWs7Y2FzZVwiRW50ZXJcIjpjYXNlXCJTcGFjZVwiOnQucHJldmVudERlZmF1bHQoKSxuPygobnVsbD09dT92b2lkIDA6dS5vdmVycmlkZU9uQ2xpY2spP3Uub3ZlcnJpZGVPbkNsaWNrKCk6aShudWxsIT11P3U6ZVswXVswXSksbygpKTpvKCk7YnJlYWs7Y2FzZVwiRXNjYXBlXCI6dC5wcmV2ZW50RGVmYXVsdCgpLG8oITEpO2JyZWFrO2RlZmF1bHQ6L15bYS16MC05XSQvaS50ZXN0KHQua2V5KSYmYygoZT0+ZSt0LmtleSkpfX19fX0sNDQ4MTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VMYXlvdXRNZWRpYVF1ZXJ5PXQudXNlTWVkaWFRdWVyeT12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpLG89ZT0+dD0+e2NvbnN0W24sb109KDAsci51c2VTdGF0ZSkoITEpO3JldHVybiBlKCgoKT0+e2NvbnN0IGU9d2luZG93Lm1hdGNoTWVkaWEodCk7aWYoZSl7ZS5tYXRjaGVzIT09biYmbyhlLm1hdGNoZXMpO2NvbnN0IHQ9KCk9Pm8oZS5tYXRjaGVzKSxyPSgpPT5lLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIix0KTtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsdCkscn19KSxbbix0XSksbn07dC51c2VNZWRpYVF1ZXJ5PW8oci51c2VFZmZlY3QpLHQudXNlTGF5b3V0TWVkaWFRdWVyeT1vKHIudXNlTGF5b3V0RWZmZWN0KX0sMjc3NjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VQcmV2aW91cz12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpO3QudXNlUHJldmlvdXM9ZT0+e2NvbnN0IHQ9KDAsci51c2VSZWYpKCk7cmV0dXJuKDAsci51c2VFZmZlY3QpKCgoKT0+e3QuY3VycmVudD1lfSksW2VdKSx0LmN1cnJlbnR9fSw3MDg4OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVRoZW1lPXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1uKDQyNjYpLGk9bigzMTkwKSxhPW4oOTUwNyksbD1uKDY0ODYpLHM9e1tpLkNvbG9yU2NoZW1lLmRhcmtdOm8uT3BlbkZpbkRhcmtUaGVtZSxbaS5Db2xvclNjaGVtZS5saWdodF06by5PcGVuRmluTGlnaHRUaGVtZX07dC51c2VUaGVtZT0oe3RoZW1lczplLHNjaGVtZTp0fSk9PntsZXQgbj17fTtjb25zdCBvPSgwLGkudXNlQ29sb3JTY2hlbWUpKHtjb2xvclNjaGVtZTp0fSk7dHJ5e249KDAsci51c2VNZW1vKSgoKCk9PigoZSx0KT0+e2NvbnN0IG49bnVsbD09dD92b2lkIDA6dFtlXTtsZXQgcj1PYmplY3QuYXNzaWduKHt9LHNbZV0pO3JldHVybiBuJiZuLnBhbGV0dGUmJihyPSgwLGwubWVyZ2UpKHIsbiwoMCxhLmNyZWF0ZVRoZW1lKShuLnBhbGV0dGUpKSkscn0pKG8sZSkpLFtlLG9dKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfXJldHVybiBufX0sMzQxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig0MTMwKSx0KSxvKG4oNzQwMSksdCksbyhuKDk1MDEpLHQpLG8obig0OTI1KSx0KSxvKG4oMjYwOSksdCksbyhuKDMxMzYpLHQpLG8obig5NzM0KSx0KSxvKG4oNjAyNiksdCksbyhuKDk2MzQpLHQpLG8obigxNDQpLHQpLG8obig5MjM5KSx0KSxvKG4oODg3OCksdCksbyhuKDg1MTApLHQpLG8obig4OTUxKSx0KSxvKG4oMTk3OCksdCksbyhuKDgwNTEpLHQpLG8obig0MTY5KSx0KSxvKG4oMzY0MSksdCksbyhuKDUyMTUpLHQpLG8obig5NjU0KSx0KSxvKG4oMzExOSksdCksbyhuKDEzMzUpLHQpLG8obig1Mzc3KSx0KSxvKG4oMzg3NyksdCksbyhuKDMxODgpLHQpLG8obig3MDYzKSx0KSxvKG4oNzc2OSksdCksbyhuKDMxOTApLHQpLG8obig0NDgxKSx0KSxvKG4oMjc3NiksdCksbyhuKDM0NyksdCksbyhuKDQ5OTEpLHQpLG8obig4ODMyKSx0KSxvKG4oNzAzMCksdCksbyhuKDYyMTgpLHQpfSw4ODMyOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5nZW5lcmF0ZUNvbG9yRnJvbVN0cmluZz12b2lkIDAsdC5nZW5lcmF0ZUNvbG9yRnJvbVN0cmluZz1mdW5jdGlvbihlPVwiXCIsdD03MCxuPTUwKXtsZXQgcj0wO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXI9ZS5jaGFyQ29kZUF0KHQpKygocjw8NSktciksciY9cjtyZXR1cm5gaHNsKCR7ciUzNjB9LCAke3R9JSwgJHtufSUpYH19LDQ5OTE6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LndoZW5GaW49dm9pZCAwLHQud2hlbkZpbj1mdW5jdGlvbihlLHQpe2NvbnN0IG49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGZpbj9lOnQ7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uKCk6bn19LDY1NTooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtfX2Fzc2lnbjooKT0+aSxfX2FzeW5jRGVsZWdhdG9yOigpPT5MLF9fYXN5bmNHZW5lcmF0b3I6KCk9Pk8sX19hc3luY1ZhbHVlczooKT0+RSxfX2F3YWl0OigpPT5fLF9fYXdhaXRlcjooKT0+aCxfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0OigpPT5SLF9fY2xhc3NQcml2YXRlRmllbGRJbjooKT0+SSxfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0OigpPT5QLF9fY3JlYXRlQmluZGluZzooKT0+dixfX2RlY29yYXRlOigpPT5sLF9fZXNEZWNvcmF0ZTooKT0+YyxfX2V4cG9ydFN0YXI6KCk9Pm0sX19leHRlbmRzOigpPT5vLF9fZ2VuZXJhdG9yOigpPT5nLF9faW1wb3J0RGVmYXVsdDooKT0+ayxfX2ltcG9ydFN0YXI6KCk9Pk0sX19tYWtlVGVtcGxhdGVPYmplY3Q6KCk9PlMsX19tZXRhZGF0YTooKT0+cCxfX3BhcmFtOigpPT5zLF9fcHJvcEtleTooKT0+ZixfX3JlYWQ6KCk9PnksX19yZXN0OigpPT5hLF9fcnVuSW5pdGlhbGl6ZXJzOigpPT51LF9fc2V0RnVuY3Rpb25OYW1lOigpPT5kLF9fc3ByZWFkOigpPT53LF9fc3ByZWFkQXJyYXk6KCk9PngsX19zcHJlYWRBcnJheXM6KCk9PmIsX192YWx1ZXM6KCk9PkN9KTt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybiByPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX0scihlLHQpfTtmdW5jdGlvbiBvKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIrU3RyaW5nKHQpK1wiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1yKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfXZhciBpPWZ1bmN0aW9uKCl7cmV0dXJuIGk9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbbl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZnVuY3Rpb24gYShlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59ZnVuY3Rpb24gbChlLHQsbixyKXt2YXIgbyxpPWFyZ3VtZW50cy5sZW5ndGgsYT1pPDM/dDpudWxsPT09cj9yPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTpyO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKWE9UmVmbGVjdC5kZWNvcmF0ZShlLHQsbixyKTtlbHNlIGZvcih2YXIgbD1lLmxlbmd0aC0xO2w+PTA7bC0tKShvPWVbbF0pJiYoYT0oaTwzP28oYSk6aT4zP28odCxuLGEpOm8odCxuKSl8fGEpO3JldHVybiBpPjMmJmEmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4sYSksYX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dChuLHIsZSl9fWZ1bmN0aW9uIGMoZSx0LG4scixvLGkpe2Z1bmN0aW9uIGEoZSl7aWYodm9pZCAwIT09ZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7cmV0dXJuIGV9Zm9yKHZhciBsLHM9ci5raW5kLGM9XCJnZXR0ZXJcIj09PXM/XCJnZXRcIjpcInNldHRlclwiPT09cz9cInNldFwiOlwidmFsdWVcIix1PSF0JiZlP3Iuc3RhdGljP2U6ZS5wcm90b3R5cGU6bnVsbCxmPXR8fCh1P09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodSxyLm5hbWUpOnt9KSxkPSExLHA9bi5sZW5ndGgtMTtwPj0wO3AtLSl7dmFyIGg9e307Zm9yKHZhciBnIGluIHIpaFtnXT1cImFjY2Vzc1wiPT09Zz97fTpyW2ddO2Zvcih2YXIgZyBpbiByLmFjY2VzcyloLmFjY2Vzc1tnXT1yLmFjY2Vzc1tnXTtoLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKGUpe2lmKGQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTtpLnB1c2goYShlfHxudWxsKSl9O3ZhciB2PSgwLG5bcF0pKFwiYWNjZXNzb3JcIj09PXM/e2dldDpmLmdldCxzZXQ6Zi5zZXR9OmZbY10saCk7aWYoXCJhY2Nlc3NvclwiPT09cyl7aWYodm9pZCAwPT09diljb250aW51ZTtpZihudWxsPT09dnx8XCJvYmplY3RcIiE9dHlwZW9mIHYpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTsobD1hKHYuZ2V0KSkmJihmLmdldD1sKSwobD1hKHYuc2V0KSkmJihmLnNldD1sKSwobD1hKHYuaW5pdCkpJiZvLnB1c2gobCl9ZWxzZShsPWEodikpJiYoXCJmaWVsZFwiPT09cz9vLnB1c2gobCk6ZltjXT1sKX11JiZPYmplY3QuZGVmaW5lUHJvcGVydHkodSxyLm5hbWUsZiksZD0hMH1mdW5jdGlvbiB1KGUsdCxuKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLG89MDtvPHQubGVuZ3RoO28rKyluPXI/dFtvXS5jYWxsKGUsbik6dFtvXS5jYWxsKGUpO3JldHVybiByP246dm9pZCAwfWZ1bmN0aW9uIGYoZSl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIGU/ZTpcIlwiLmNvbmNhdChlKX1mdW5jdGlvbiBkKGUsdCxuKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdCYmKHQ9dC5kZXNjcmlwdGlvbj9cIltcIi5jb25jYXQodC5kZXNjcmlwdGlvbixcIl1cIik6XCJcIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJuYW1lXCIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpuP1wiXCIuY29uY2F0KG4sXCIgXCIsdCk6dH0pfWZ1bmN0aW9uIHAoZSx0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSlyZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShlLHQpfWZ1bmN0aW9uIGgoZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKG8saSl7ZnVuY3Rpb24gYShlKXt0cnl7cyhyLm5leHQoZSkpfWNhdGNoKGUpe2koZSl9fWZ1bmN0aW9uIGwoZSl7dHJ5e3Moci50aHJvdyhlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gcyhlKXt2YXIgdDtlLmRvbmU/byhlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYSxsKX1zKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9ZnVuY3Rpb24gZyhlLHQpe3ZhciBuLHIsbyxpLGE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmb1swXSl0aHJvdyBvWzFdO3JldHVybiBvWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGk9e25leHQ6bCgwKSx0aHJvdzpsKDEpLHJldHVybjpsKDIpfSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihpW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGk7ZnVuY3Rpb24gbChsKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKGwpe2lmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7Zm9yKDtpJiYoaT0wLGxbMF0mJihhPTApKSxhOyl0cnl7aWYobj0xLHImJihvPTImbFswXT9yLnJldHVybjpsWzBdP3IudGhyb3d8fCgobz1yLnJldHVybikmJm8uY2FsbChyKSwwKTpyLm5leHQpJiYhKG89by5jYWxsKHIsbFsxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKHI9MCxvJiYobD1bMiZsWzBdLG8udmFsdWVdKSxsWzBdKXtjYXNlIDA6Y2FzZSAxOm89bDticmVhaztjYXNlIDQ6cmV0dXJuIGEubGFiZWwrKyx7dmFsdWU6bFsxXSxkb25lOiExfTtjYXNlIDU6YS5sYWJlbCsrLHI9bFsxXSxsPVswXTtjb250aW51ZTtjYXNlIDc6bD1hLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChvPShvPWEudHJ5cykubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pfHw2IT09bFswXSYmMiE9PWxbMF0pKXthPTA7Y29udGludWV9aWYoMz09PWxbMF0mJighb3x8bFsxXT5vWzBdJiZsWzFdPG9bM10pKXthLmxhYmVsPWxbMV07YnJlYWt9aWYoNj09PWxbMF0mJmEubGFiZWw8b1sxXSl7YS5sYWJlbD1vWzFdLG89bDticmVha31pZihvJiZhLmxhYmVsPG9bMl0pe2EubGFiZWw9b1syXSxhLm9wcy5wdXNoKGwpO2JyZWFrfW9bMl0mJmEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZX1sPXQuY2FsbChlLGEpfWNhdGNoKGUpe2w9WzYsZV0scj0wfWZpbmFsbHl7bj1vPTB9aWYoNSZsWzBdKXRocm93IGxbMV07cmV0dXJue3ZhbHVlOmxbMF0/bFsxXTp2b2lkIDAsZG9uZTohMH19KFtsLHNdKX19fXZhciB2PU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX07ZnVuY3Rpb24gbShlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHYodCxlLG4pfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3Isbj10JiZlW3RdLHI9MDtpZihuKXJldHVybiBuLmNhbGwoZSk7aWYoZSYmXCJudW1iZXJcIj09dHlwZW9mIGUubGVuZ3RoKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGUmJnI+PWUubGVuZ3RoJiYoZT12b2lkIDApLHt2YWx1ZTplJiZlW3IrK10sZG9uZTohZX19fTt0aHJvdyBuZXcgVHlwZUVycm9yKHQ/XCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiOlwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKX1mdW5jdGlvbiB5KGUsdCl7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIGU7dmFyIHIsbyxpPW4uY2FsbChlKSxhPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT10fHx0LS0gPjApJiYhKHI9aS5uZXh0KCkpLmRvbmU7KWEucHVzaChyLnZhbHVlKX1jYXRjaChlKXtvPXtlcnJvcjplfX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYobj1pLnJldHVybikmJm4uY2FsbChpKX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIGF9ZnVuY3Rpb24gdygpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllPWUuY29uY2F0KHkoYXJndW1lbnRzW3RdKSk7cmV0dXJuIGV9ZnVuY3Rpb24gYigpe2Zvcih2YXIgZT0wLHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGg7dDxuO3QrKyllKz1hcmd1bWVudHNbdF0ubGVuZ3RoO3ZhciByPUFycmF5KGUpLG89MDtmb3IodD0wO3Q8bjt0KyspZm9yKHZhciBpPWFyZ3VtZW50c1t0XSxhPTAsbD1pLmxlbmd0aDthPGw7YSsrLG8rKylyW29dPWlbYV07cmV0dXJuIHJ9ZnVuY3Rpb24geChlLHQsbil7aWYobnx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciByLG89MCxpPXQubGVuZ3RoO288aTtvKyspIXImJm8gaW4gdHx8KHJ8fChyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsMCxvKSkscltvXT10W29dKTtyZXR1cm4gZS5jb25jYXQocnx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpfWZ1bmN0aW9uIF8oZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfPyh0aGlzLnY9ZSx0aGlzKTpuZXcgXyhlKX1mdW5jdGlvbiBPKGUsdCxuKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTt2YXIgcixvPW4uYXBwbHkoZSx0fHxbXSksaT1bXTtyZXR1cm4gcj17fSxhKFwibmV4dFwiKSxhKFwidGhyb3dcIiksYShcInJldHVyblwiKSxyW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxyO2Z1bmN0aW9uIGEoZSl7b1tlXSYmKHJbZV09ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLHIpe2kucHVzaChbZSx0LG4scl0pPjF8fGwoZSx0KX0pKX0pfWZ1bmN0aW9uIGwoZSx0KXt0cnl7KG49b1tlXSh0KSkudmFsdWUgaW5zdGFuY2VvZiBfP1Byb21pc2UucmVzb2x2ZShuLnZhbHVlLnYpLnRoZW4ocyxjKTp1KGlbMF1bMl0sbil9Y2F0Y2goZSl7dShpWzBdWzNdLGUpfXZhciBufWZ1bmN0aW9uIHMoZSl7bChcIm5leHRcIixlKX1mdW5jdGlvbiBjKGUpe2woXCJ0aHJvd1wiLGUpfWZ1bmN0aW9uIHUoZSx0KXtlKHQpLGkuc2hpZnQoKSxpLmxlbmd0aCYmbChpWzBdWzBdLGlbMF1bMV0pfX1mdW5jdGlvbiBMKGUpe3ZhciB0LG47cmV0dXJuIHQ9e30scihcIm5leHRcIikscihcInRocm93XCIsKGZ1bmN0aW9uKGUpe3Rocm93IGV9KSkscihcInJldHVyblwiKSx0W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdDtmdW5jdGlvbiByKHIsbyl7dFtyXT1lW3JdP2Z1bmN0aW9uKHQpe3JldHVybihuPSFuKT97dmFsdWU6XyhlW3JdKHQpKSxkb25lOiExfTpvP28odCk6dH06b319ZnVuY3Rpb24gRShlKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTt2YXIgdCxuPWVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdO3JldHVybiBuP24uY2FsbChlKTooZT1DKGUpLHQ9e30scihcIm5leHRcIikscihcInRocm93XCIpLHIoXCJyZXR1cm5cIiksdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdCk7ZnVuY3Rpb24gcihuKXt0W25dPWVbbl0mJmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixvKXshZnVuY3Rpb24oZSx0LG4scil7UHJvbWlzZS5yZXNvbHZlKHIpLnRoZW4oKGZ1bmN0aW9uKHQpe2Uoe3ZhbHVlOnQsZG9uZTpufSl9KSx0KX0ocixvLCh0PWVbbl0odCkpLmRvbmUsdC52YWx1ZSl9KSl9fX1mdW5jdGlvbiBTKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcInJhd1wiLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfXZhciBqPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9O2Z1bmN0aW9uIE0oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdih0LGUsbik7cmV0dXJuIGoodCxlKSx0fWZ1bmN0aW9uIGsoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIFIoZSx0LG4scil7aWYoXCJhXCI9PT1uJiYhcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZSE9PXR8fCFyOiF0LmhhcyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO3JldHVyblwibVwiPT09bj9yOlwiYVwiPT09bj9yLmNhbGwoZSk6cj9yLnZhbHVlOnQuZ2V0KGUpfWZ1bmN0aW9uIFAoZSx0LG4scixvKXtpZihcIm1cIj09PXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtpZihcImFcIj09PXImJiFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD9lIT09dHx8IW86IXQuaGFzKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtyZXR1cm5cImFcIj09PXI/by5jYWxsKGUsbik6bz9vLnZhbHVlPW46dC5zZXQoZSxuKSxufWZ1bmN0aW9uIEkoZSx0KXtpZihudWxsPT09dHx8XCJvYmplY3RcIiE9dHlwZW9mIHQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/dD09PWU6ZS5oYXModCl9fSw2MDM2OmU9PntlLmV4cG9ydHM9XCJodHRwczovL2Nkbi5vcGVuZmluLmNvL3VpLWxpYnJhcnkvZm9udHMvSW50ZXItSXRhbGljLndvZmYyXCJ9LDQ2Njg6ZT0+e2UuZXhwb3J0cz1cImh0dHBzOi8vY2RuLm9wZW5maW4uY28vdWktbGlicmFyeS9mb250cy9JbnRlci1SZWd1bGFyLndvZmYyXCJ9LDU5NDE6ZT0+e2UuZXhwb3J0cz1cImh0dHBzOi8vY2RuLm9wZW5maW4uY28vdWktbGlicmFyeS9mb250cy9JbnRlci1TZW1pQm9sZC53b2ZmMlwifSwyODEzOmU9PntlLmV4cG9ydHM9XCJodHRwczovL2Nkbi5vcGVuZmluLmNvL3VpLWxpYnJhcnkvZm9udHMvSW50ZXItU2VtaUJvbGRJdGFsaWMud29mZjJcIn0sNjY4OTplPT57ZS5leHBvcnRzPW4oNzM3OCl9LDc1MTg6ZT0+e2UuZXhwb3J0cz1uKDI5MjEpfSw4MjA3OmZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cmV0dXJuKGU9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0pKHQpfXZhciB0PS9eXFxzKy8sbj0vXFxzKyQvO2Z1bmN0aW9uIHIobyxpKXtpZihpPWl8fHt9LChvPW98fFwiXCIpaW5zdGFuY2VvZiByKXJldHVybiBvO2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBuZXcgcihvLGkpO3ZhciBhPWZ1bmN0aW9uKHIpe3ZhciBvLGksYSxsPXtyOjAsZzowLGI6MH0scz0xLGM9bnVsbCx1PW51bGwsZj1udWxsLGQ9ITEscD0hMTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgciYmKHI9ZnVuY3Rpb24oZSl7ZT1lLnJlcGxhY2UodCxcIlwiKS5yZXBsYWNlKG4sXCJcIikudG9Mb3dlckNhc2UoKTt2YXIgcixvPSExO2lmKHdbZV0pZT13W2VdLG89ITA7ZWxzZSBpZihcInRyYW5zcGFyZW50XCI9PWUpcmV0dXJue3I6MCxnOjAsYjowLGE6MCxmb3JtYXQ6XCJuYW1lXCJ9O3JldHVybihyPUkucmdiLmV4ZWMoZSkpP3tyOnJbMV0sZzpyWzJdLGI6clszXX06KHI9SS5yZ2JhLmV4ZWMoZSkpP3tyOnJbMV0sZzpyWzJdLGI6clszXSxhOnJbNF19OihyPUkuaHNsLmV4ZWMoZSkpP3toOnJbMV0sczpyWzJdLGw6clszXX06KHI9SS5oc2xhLmV4ZWMoZSkpP3toOnJbMV0sczpyWzJdLGw6clszXSxhOnJbNF19OihyPUkuaHN2LmV4ZWMoZSkpP3toOnJbMV0sczpyWzJdLHY6clszXX06KHI9SS5oc3ZhLmV4ZWMoZSkpP3toOnJbMV0sczpyWzJdLHY6clszXSxhOnJbNF19OihyPUkuaGV4OC5leGVjKGUpKT97cjpMKHJbMV0pLGc6TChyWzJdKSxiOkwoclszXSksYTpNKHJbNF0pLGZvcm1hdDpvP1wibmFtZVwiOlwiaGV4OFwifToocj1JLmhleDYuZXhlYyhlKSk/e3I6TChyWzFdKSxnOkwoclsyXSksYjpMKHJbM10pLGZvcm1hdDpvP1wibmFtZVwiOlwiaGV4XCJ9OihyPUkuaGV4NC5leGVjKGUpKT97cjpMKHJbMV0rXCJcIityWzFdKSxnOkwoclsyXStcIlwiK3JbMl0pLGI6TChyWzNdK1wiXCIrclszXSksYTpNKHJbNF0rXCJcIityWzRdKSxmb3JtYXQ6bz9cIm5hbWVcIjpcImhleDhcIn06ISEocj1JLmhleDMuZXhlYyhlKSkmJntyOkwoclsxXStcIlwiK3JbMV0pLGc6TChyWzJdK1wiXCIrclsyXSksYjpMKHJbM10rXCJcIityWzNdKSxmb3JtYXQ6bz9cIm5hbWVcIjpcImhleFwifX0ocikpLFwib2JqZWN0XCI9PWUocikmJihBKHIucikmJkEoci5nKSYmQShyLmIpPyhvPXIucixpPXIuZyxhPXIuYixsPXtyOjI1NSpfKG8sMjU1KSxnOjI1NSpfKGksMjU1KSxiOjI1NSpfKGEsMjU1KX0sZD0hMCxwPVwiJVwiPT09U3RyaW5nKHIucikuc3Vic3RyKC0xKT9cInByZ2JcIjpcInJnYlwiKTpBKHIuaCkmJkEoci5zKSYmQShyLnYpPyhjPVMoci5zKSx1PVMoci52KSxsPWZ1bmN0aW9uKGUsdCxuKXtlPTYqXyhlLDM2MCksdD1fKHQsMTAwKSxuPV8obiwxMDApO3ZhciByPU1hdGguZmxvb3IoZSksbz1lLXIsaT1uKigxLXQpLGE9biooMS1vKnQpLGw9biooMS0oMS1vKSp0KSxzPXIlNjtyZXR1cm57cjoyNTUqW24sYSxpLGksbCxuXVtzXSxnOjI1NSpbbCxuLG4sYSxpLGldW3NdLGI6MjU1KltpLGksbCxuLG4sYV1bc119fShyLmgsYyx1KSxkPSEwLHA9XCJoc3ZcIik6QShyLmgpJiZBKHIucykmJkEoci5sKSYmKGM9UyhyLnMpLGY9UyhyLmwpLGw9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8saTtmdW5jdGlvbiBhKGUsdCxuKXtyZXR1cm4gbjwwJiYobis9MSksbj4xJiYobi09MSksbjwxLzY/ZSs2Kih0LWUpKm46bjwuNT90Om48Mi8zP2UrKHQtZSkqKDIvMy1uKSo2OmV9aWYoZT1fKGUsMzYwKSx0PV8odCwxMDApLG49XyhuLDEwMCksMD09PXQpcj1vPWk9bjtlbHNle3ZhciBsPW48LjU/biooMSt0KTpuK3Qtbip0LHM9MipuLWw7cj1hKHMsbCxlKzEvMyksbz1hKHMsbCxlKSxpPWEocyxsLGUtMS8zKX1yZXR1cm57cjoyNTUqcixnOjI1NSpvLGI6MjU1Kml9fShyLmgsYyxmKSxkPSEwLHA9XCJoc2xcIiksci5oYXNPd25Qcm9wZXJ0eShcImFcIikmJihzPXIuYSkpLHM9eChzKSx7b2s6ZCxmb3JtYXQ6ci5mb3JtYXR8fHAscjpNYXRoLm1pbigyNTUsTWF0aC5tYXgobC5yLDApKSxnOk1hdGgubWluKDI1NSxNYXRoLm1heChsLmcsMCkpLGI6TWF0aC5taW4oMjU1LE1hdGgubWF4KGwuYiwwKSksYTpzfX0obyk7dGhpcy5fb3JpZ2luYWxJbnB1dD1vLHRoaXMuX3I9YS5yLHRoaXMuX2c9YS5nLHRoaXMuX2I9YS5iLHRoaXMuX2E9YS5hLHRoaXMuX3JvdW5kQT1NYXRoLnJvdW5kKDEwMCp0aGlzLl9hKS8xMDAsdGhpcy5fZm9ybWF0PWkuZm9ybWF0fHxhLmZvcm1hdCx0aGlzLl9ncmFkaWVudFR5cGU9aS5ncmFkaWVudFR5cGUsdGhpcy5fcjwxJiYodGhpcy5fcj1NYXRoLnJvdW5kKHRoaXMuX3IpKSx0aGlzLl9nPDEmJih0aGlzLl9nPU1hdGgucm91bmQodGhpcy5fZykpLHRoaXMuX2I8MSYmKHRoaXMuX2I9TWF0aC5yb3VuZCh0aGlzLl9iKSksdGhpcy5fb2s9YS5va31mdW5jdGlvbiBvKGUsdCxuKXtlPV8oZSwyNTUpLHQ9Xyh0LDI1NSksbj1fKG4sMjU1KTt2YXIgcixvLGk9TWF0aC5tYXgoZSx0LG4pLGE9TWF0aC5taW4oZSx0LG4pLGw9KGkrYSkvMjtpZihpPT1hKXI9bz0wO2Vsc2V7dmFyIHM9aS1hO3N3aXRjaChvPWw+LjU/cy8oMi1pLWEpOnMvKGkrYSksaSl7Y2FzZSBlOnI9KHQtbikvcysodDxuPzY6MCk7YnJlYWs7Y2FzZSB0OnI9KG4tZSkvcysyO2JyZWFrO2Nhc2UgbjpyPShlLXQpL3MrNH1yLz02fXJldHVybntoOnIsczpvLGx9fWZ1bmN0aW9uIGkoZSx0LG4pe2U9XyhlLDI1NSksdD1fKHQsMjU1KSxuPV8obiwyNTUpO3ZhciByLG8saT1NYXRoLm1heChlLHQsbiksYT1NYXRoLm1pbihlLHQsbiksbD1pLHM9aS1hO2lmKG89MD09PWk/MDpzL2ksaT09YSlyPTA7ZWxzZXtzd2l0Y2goaSl7Y2FzZSBlOnI9KHQtbikvcysodDxuPzY6MCk7YnJlYWs7Y2FzZSB0OnI9KG4tZSkvcysyO2JyZWFrO2Nhc2UgbjpyPShlLXQpL3MrNH1yLz02fXJldHVybntoOnIsczpvLHY6bH19ZnVuY3Rpb24gYShlLHQsbixyKXt2YXIgbz1bRShNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KSksRShNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KSksRShNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KSldO3JldHVybiByJiZvWzBdLmNoYXJBdCgwKT09b1swXS5jaGFyQXQoMSkmJm9bMV0uY2hhckF0KDApPT1vWzFdLmNoYXJBdCgxKSYmb1syXS5jaGFyQXQoMCk9PW9bMl0uY2hhckF0KDEpP29bMF0uY2hhckF0KDApK29bMV0uY2hhckF0KDApK29bMl0uY2hhckF0KDApOm8uam9pbihcIlwiKX1mdW5jdGlvbiBsKGUsdCxuLHIpe3JldHVybltFKGoocikpLEUoTWF0aC5yb3VuZChlKS50b1N0cmluZygxNikpLEUoTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikpLEUoTWF0aC5yb3VuZChuKS50b1N0cmluZygxNikpXS5qb2luKFwiXCIpfWZ1bmN0aW9uIHMoZSx0KXt0PTA9PT10PzA6dHx8MTA7dmFyIG49cihlKS50b0hzbCgpO3JldHVybiBuLnMtPXQvMTAwLG4ucz1PKG4ucykscihuKX1mdW5jdGlvbiBjKGUsdCl7dD0wPT09dD8wOnR8fDEwO3ZhciBuPXIoZSkudG9Ic2woKTtyZXR1cm4gbi5zKz10LzEwMCxuLnM9TyhuLnMpLHIobil9ZnVuY3Rpb24gdShlKXtyZXR1cm4gcihlKS5kZXNhdHVyYXRlKDEwMCl9ZnVuY3Rpb24gZihlLHQpe3Q9MD09PXQ/MDp0fHwxMDt2YXIgbj1yKGUpLnRvSHNsKCk7cmV0dXJuIG4ubCs9dC8xMDAsbi5sPU8obi5sKSxyKG4pfWZ1bmN0aW9uIGQoZSx0KXt0PTA9PT10PzA6dHx8MTA7dmFyIG49cihlKS50b1JnYigpO3JldHVybiBuLnI9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsbi5yLU1hdGgucm91bmQoLXQvMTAwKjI1NSkpKSxuLmc9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsbi5nLU1hdGgucm91bmQoLXQvMTAwKjI1NSkpKSxuLmI9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsbi5iLU1hdGgucm91bmQoLXQvMTAwKjI1NSkpKSxyKG4pfWZ1bmN0aW9uIHAoZSx0KXt0PTA9PT10PzA6dHx8MTA7dmFyIG49cihlKS50b0hzbCgpO3JldHVybiBuLmwtPXQvMTAwLG4ubD1PKG4ubCkscihuKX1mdW5jdGlvbiBoKGUsdCl7dmFyIG49cihlKS50b0hzbCgpLG89KG4uaCt0KSUzNjA7cmV0dXJuIG4uaD1vPDA/MzYwK286byxyKG4pfWZ1bmN0aW9uIGcoZSl7dmFyIHQ9cihlKS50b0hzbCgpO3JldHVybiB0Lmg9KHQuaCsxODApJTM2MCxyKHQpfWZ1bmN0aW9uIHYoZSx0KXtpZihpc05hTih0KXx8dDw9MCl0aHJvdyBuZXcgRXJyb3IoXCJBcmd1bWVudCB0byBwb2x5YWQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclwiKTtmb3IodmFyIG49cihlKS50b0hzbCgpLG89W3IoZSldLGk9MzYwL3QsYT0xO2E8dDthKyspby5wdXNoKHIoe2g6KG4uaCthKmkpJTM2MCxzOm4ucyxsOm4ubH0pKTtyZXR1cm4gb31mdW5jdGlvbiBtKGUpe3ZhciB0PXIoZSkudG9Ic2woKSxuPXQuaDtyZXR1cm5bcihlKSxyKHtoOihuKzcyKSUzNjAsczp0LnMsbDp0Lmx9KSxyKHtoOihuKzIxNiklMzYwLHM6dC5zLGw6dC5sfSldfWZ1bmN0aW9uIEMoZSx0LG4pe3Q9dHx8NixuPW58fDMwO3ZhciBvPXIoZSkudG9Ic2woKSxpPTM2MC9uLGE9W3IoZSldO2ZvcihvLmg9KG8uaC0oaSp0Pj4xKSs3MjApJTM2MDstLXQ7KW8uaD0oby5oK2kpJTM2MCxhLnB1c2gocihvKSk7cmV0dXJuIGF9ZnVuY3Rpb24geShlLHQpe3Q9dHx8Njtmb3IodmFyIG49cihlKS50b0hzdigpLG89bi5oLGk9bi5zLGE9bi52LGw9W10scz0xL3Q7dC0tOylsLnB1c2gocih7aDpvLHM6aSx2OmF9KSksYT0oYStzKSUxO3JldHVybiBsfXIucHJvdG90eXBlPXtpc0Rhcms6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCcmlnaHRuZXNzKCk8MTI4fSxpc0xpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNEYXJrKCl9LGlzVmFsaWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb2t9LGdldE9yaWdpbmFsSW5wdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxJbnB1dH0sZ2V0Rm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Zvcm1hdH0sZ2V0QWxwaGE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYX0sZ2V0QnJpZ2h0bmVzczpmdW5jdGlvbigpe3ZhciBlPXRoaXMudG9SZ2IoKTtyZXR1cm4oMjk5KmUucis1ODcqZS5nKzExNCplLmIpLzFlM30sZ2V0THVtaW5hbmNlOmZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI9dGhpcy50b1JnYigpO3JldHVybiBlPXIuci8yNTUsdD1yLmcvMjU1LG49ci5iLzI1NSwuMjEyNiooZTw9LjAzOTI4P2UvMTIuOTI6TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KSkrLjcxNTIqKHQ8PS4wMzkyOD90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCkpKy4wNzIyKihuPD0uMDM5Mjg/bi8xMi45MjpNYXRoLnBvdygobisuMDU1KS8xLjA1NSwyLjQpKX0sc2V0QWxwaGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2E9eChlKSx0aGlzLl9yb3VuZEE9TWF0aC5yb3VuZCgxMDAqdGhpcy5fYSkvMTAwLHRoaXN9LHRvSHN2OmZ1bmN0aW9uKCl7dmFyIGU9aSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKmUuaCxzOmUucyx2OmUudixhOnRoaXMuX2F9fSx0b0hzdlN0cmluZzpmdW5jdGlvbigpe3ZhciBlPWkodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLHQ9TWF0aC5yb3VuZCgzNjAqZS5oKSxuPU1hdGgucm91bmQoMTAwKmUucykscj1NYXRoLnJvdW5kKDEwMCplLnYpO3JldHVybiAxPT10aGlzLl9hP1wiaHN2KFwiK3QrXCIsIFwiK24rXCIlLCBcIityK1wiJSlcIjpcImhzdmEoXCIrdCtcIiwgXCIrbitcIiUsIFwiK3IrXCIlLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvSHNsOmZ1bmN0aW9uKCl7dmFyIGU9byh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKmUuaCxzOmUucyxsOmUubCxhOnRoaXMuX2F9fSx0b0hzbFN0cmluZzpmdW5jdGlvbigpe3ZhciBlPW8odGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLHQ9TWF0aC5yb3VuZCgzNjAqZS5oKSxuPU1hdGgucm91bmQoMTAwKmUucykscj1NYXRoLnJvdW5kKDEwMCplLmwpO3JldHVybiAxPT10aGlzLl9hP1wiaHNsKFwiK3QrXCIsIFwiK24rXCIlLCBcIityK1wiJSlcIjpcImhzbGEoXCIrdCtcIiwgXCIrbitcIiUsIFwiK3IrXCIlLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvSGV4OmZ1bmN0aW9uKGUpe3JldHVybiBhKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLGUpfSx0b0hleFN0cmluZzpmdW5jdGlvbihlKXtyZXR1cm5cIiNcIit0aGlzLnRvSGV4KGUpfSx0b0hleDg6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGk9W0UoTWF0aC5yb3VuZChlKS50b1N0cmluZygxNikpLEUoTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikpLEUoTWF0aC5yb3VuZChuKS50b1N0cmluZygxNikpLEUoaihyKSldO3JldHVybiBvJiZpWzBdLmNoYXJBdCgwKT09aVswXS5jaGFyQXQoMSkmJmlbMV0uY2hhckF0KDApPT1pWzFdLmNoYXJBdCgxKSYmaVsyXS5jaGFyQXQoMCk9PWlbMl0uY2hhckF0KDEpJiZpWzNdLmNoYXJBdCgwKT09aVszXS5jaGFyQXQoMSk/aVswXS5jaGFyQXQoMCkraVsxXS5jaGFyQXQoMCkraVsyXS5jaGFyQXQoMCkraVszXS5jaGFyQXQoMCk6aS5qb2luKFwiXCIpfSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0aGlzLl9hLGUpfSx0b0hleDhTdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuXCIjXCIrdGhpcy50b0hleDgoZSl9LHRvUmdiOmZ1bmN0aW9uKCl7cmV0dXJue3I6TWF0aC5yb3VuZCh0aGlzLl9yKSxnOk1hdGgucm91bmQodGhpcy5fZyksYjpNYXRoLnJvdW5kKHRoaXMuX2IpLGE6dGhpcy5fYX19LHRvUmdiU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PXRoaXMuX2E/XCJyZ2IoXCIrTWF0aC5yb3VuZCh0aGlzLl9yKStcIiwgXCIrTWF0aC5yb3VuZCh0aGlzLl9nKStcIiwgXCIrTWF0aC5yb3VuZCh0aGlzLl9iKStcIilcIjpcInJnYmEoXCIrTWF0aC5yb3VuZCh0aGlzLl9yKStcIiwgXCIrTWF0aC5yb3VuZCh0aGlzLl9nKStcIiwgXCIrTWF0aC5yb3VuZCh0aGlzLl9iKStcIiwgXCIrdGhpcy5fcm91bmRBK1wiKVwifSx0b1BlcmNlbnRhZ2VSZ2I6ZnVuY3Rpb24oKXtyZXR1cm57cjpNYXRoLnJvdW5kKDEwMCpfKHRoaXMuX3IsMjU1KSkrXCIlXCIsZzpNYXRoLnJvdW5kKDEwMCpfKHRoaXMuX2csMjU1KSkrXCIlXCIsYjpNYXRoLnJvdW5kKDEwMCpfKHRoaXMuX2IsMjU1KSkrXCIlXCIsYTp0aGlzLl9hfX0sdG9QZXJjZW50YWdlUmdiU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PXRoaXMuX2E/XCJyZ2IoXCIrTWF0aC5yb3VuZCgxMDAqXyh0aGlzLl9yLDI1NSkpK1wiJSwgXCIrTWF0aC5yb3VuZCgxMDAqXyh0aGlzLl9nLDI1NSkpK1wiJSwgXCIrTWF0aC5yb3VuZCgxMDAqXyh0aGlzLl9iLDI1NSkpK1wiJSlcIjpcInJnYmEoXCIrTWF0aC5yb3VuZCgxMDAqXyh0aGlzLl9yLDI1NSkpK1wiJSwgXCIrTWF0aC5yb3VuZCgxMDAqXyh0aGlzLl9nLDI1NSkpK1wiJSwgXCIrTWF0aC5yb3VuZCgxMDAqXyh0aGlzLl9iLDI1NSkpK1wiJSwgXCIrdGhpcy5fcm91bmRBK1wiKVwifSx0b05hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuX2E/XCJ0cmFuc3BhcmVudFwiOiEodGhpcy5fYTwxKSYmKGJbYSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiwhMCldfHwhMSl9LHRvRmlsdGVyOmZ1bmN0aW9uKGUpe3ZhciB0PVwiI1wiK2wodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdGhpcy5fYSksbj10LG89dGhpcy5fZ3JhZGllbnRUeXBlP1wiR3JhZGllbnRUeXBlID0gMSwgXCI6XCJcIjtpZihlKXt2YXIgaT1yKGUpO249XCIjXCIrbChpLl9yLGkuX2csaS5fYixpLl9hKX1yZXR1cm5cInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChcIitvK1wic3RhcnRDb2xvcnN0cj1cIit0K1wiLGVuZENvbG9yc3RyPVwiK24rXCIpXCJ9LHRvU3RyaW5nOmZ1bmN0aW9uKGUpe3ZhciB0PSEhZTtlPWV8fHRoaXMuX2Zvcm1hdDt2YXIgbj0hMSxyPXRoaXMuX2E8MSYmdGhpcy5fYT49MDtyZXR1cm4gdHx8IXJ8fFwiaGV4XCIhPT1lJiZcImhleDZcIiE9PWUmJlwiaGV4M1wiIT09ZSYmXCJoZXg0XCIhPT1lJiZcImhleDhcIiE9PWUmJlwibmFtZVwiIT09ZT8oXCJyZ2JcIj09PWUmJihuPXRoaXMudG9SZ2JTdHJpbmcoKSksXCJwcmdiXCI9PT1lJiYobj10aGlzLnRvUGVyY2VudGFnZVJnYlN0cmluZygpKSxcImhleFwiIT09ZSYmXCJoZXg2XCIhPT1lfHwobj10aGlzLnRvSGV4U3RyaW5nKCkpLFwiaGV4M1wiPT09ZSYmKG49dGhpcy50b0hleFN0cmluZyghMCkpLFwiaGV4NFwiPT09ZSYmKG49dGhpcy50b0hleDhTdHJpbmcoITApKSxcImhleDhcIj09PWUmJihuPXRoaXMudG9IZXg4U3RyaW5nKCkpLFwibmFtZVwiPT09ZSYmKG49dGhpcy50b05hbWUoKSksXCJoc2xcIj09PWUmJihuPXRoaXMudG9Ic2xTdHJpbmcoKSksXCJoc3ZcIj09PWUmJihuPXRoaXMudG9Ic3ZTdHJpbmcoKSksbnx8dGhpcy50b0hleFN0cmluZygpKTpcIm5hbWVcIj09PWUmJjA9PT10aGlzLl9hP3RoaXMudG9OYW1lKCk6dGhpcy50b1JnYlN0cmluZygpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiByKHRoaXMudG9TdHJpbmcoKSl9LF9hcHBseU1vZGlmaWNhdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuPWUuYXBwbHkobnVsbCxbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwodCkpKTtyZXR1cm4gdGhpcy5fcj1uLl9yLHRoaXMuX2c9bi5fZyx0aGlzLl9iPW4uX2IsdGhpcy5zZXRBbHBoYShuLl9hKSx0aGlzfSxsaWdodGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGYsYXJndW1lbnRzKX0sYnJpZ2h0ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZCxhcmd1bWVudHMpfSxkYXJrZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24ocCxhcmd1bWVudHMpfSxkZXNhdHVyYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHMsYXJndW1lbnRzKX0sc2F0dXJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oYyxhcmd1bWVudHMpfSxncmV5c2NhbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24odSxhcmd1bWVudHMpfSxzcGluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGgsYXJndW1lbnRzKX0sX2FwcGx5Q29tYmluYXRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5hcHBseShudWxsLFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbCh0KSkpfSxhbmFsb2dvdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihDLGFyZ3VtZW50cyl9LGNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihnLGFyZ3VtZW50cyl9LG1vbm9jaHJvbWF0aWM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbih5LGFyZ3VtZW50cyl9LHNwbGl0Y29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKG0sYXJndW1lbnRzKX0sdHJpYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbih2LFszXSl9LHRldHJhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHYsWzRdKX19LHIuZnJvbVJhdGlvPWZ1bmN0aW9uKHQsbil7aWYoXCJvYmplY3RcIj09ZSh0KSl7dmFyIG89e307Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKG9baV09XCJhXCI9PT1pP3RbaV06Uyh0W2ldKSk7dD1vfXJldHVybiByKHQsbil9LHIuZXF1YWxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuISghZXx8IXQpJiZyKGUpLnRvUmdiU3RyaW5nKCk9PXIodCkudG9SZ2JTdHJpbmcoKX0sci5yYW5kb209ZnVuY3Rpb24oKXtyZXR1cm4gci5mcm9tUmF0aW8oe3I6TWF0aC5yYW5kb20oKSxnOk1hdGgucmFuZG9tKCksYjpNYXRoLnJhbmRvbSgpfSl9LHIubWl4PWZ1bmN0aW9uKGUsdCxuKXtuPTA9PT1uPzA6bnx8NTA7dmFyIG89cihlKS50b1JnYigpLGk9cih0KS50b1JnYigpLGE9bi8xMDA7cmV0dXJuIHIoe3I6KGkuci1vLnIpKmErby5yLGc6KGkuZy1vLmcpKmErby5nLGI6KGkuYi1vLmIpKmErby5iLGE6KGkuYS1vLmEpKmErby5hfSl9LHIucmVhZGFiaWxpdHk9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yKGUpLG89cih0KTtyZXR1cm4oTWF0aC5tYXgobi5nZXRMdW1pbmFuY2UoKSxvLmdldEx1bWluYW5jZSgpKSsuMDUpLyhNYXRoLm1pbihuLmdldEx1bWluYW5jZSgpLG8uZ2V0THVtaW5hbmNlKCkpKy4wNSl9LHIuaXNSZWFkYWJsZT1mdW5jdGlvbihlLHQsbil7dmFyIG8saSxhLGwscyxjPXIucmVhZGFiaWxpdHkoZSx0KTtzd2l0Y2goaT0hMSwoYT1uLFwiQUFcIiE9PShsPSgoYT1hfHx7bGV2ZWw6XCJBQVwiLHNpemU6XCJzbWFsbFwifSkubGV2ZWx8fFwiQUFcIikudG9VcHBlckNhc2UoKSkmJlwiQUFBXCIhPT1sJiYobD1cIkFBXCIpLFwic21hbGxcIiE9PShzPShhLnNpemV8fFwic21hbGxcIikudG9Mb3dlckNhc2UoKSkmJlwibGFyZ2VcIiE9PXMmJihzPVwic21hbGxcIiksbz17bGV2ZWw6bCxzaXplOnN9KS5sZXZlbCtvLnNpemUpe2Nhc2VcIkFBc21hbGxcIjpjYXNlXCJBQUFsYXJnZVwiOmk9Yz49NC41O2JyZWFrO2Nhc2VcIkFBbGFyZ2VcIjppPWM+PTM7YnJlYWs7Y2FzZVwiQUFBc21hbGxcIjppPWM+PTd9cmV0dXJuIGl9LHIubW9zdFJlYWRhYmxlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbyxpLGEsbCxzPW51bGwsYz0wO2k9KG49bnx8e30pLmluY2x1ZGVGYWxsYmFja0NvbG9ycyxhPW4ubGV2ZWwsbD1uLnNpemU7Zm9yKHZhciB1PTA7dTx0Lmxlbmd0aDt1KyspKG89ci5yZWFkYWJpbGl0eShlLHRbdV0pKT5jJiYoYz1vLHM9cih0W3VdKSk7cmV0dXJuIHIuaXNSZWFkYWJsZShlLHMse2xldmVsOmEsc2l6ZTpsfSl8fCFpP3M6KG4uaW5jbHVkZUZhbGxiYWNrQ29sb3JzPSExLHIubW9zdFJlYWRhYmxlKGUsW1wiI2ZmZlwiLFwiIzAwMFwiXSxuKSl9O3ZhciB3PXIubmFtZXM9e2FsaWNlYmx1ZTpcImYwZjhmZlwiLGFudGlxdWV3aGl0ZTpcImZhZWJkN1wiLGFxdWE6XCIwZmZcIixhcXVhbWFyaW5lOlwiN2ZmZmQ0XCIsYXp1cmU6XCJmMGZmZmZcIixiZWlnZTpcImY1ZjVkY1wiLGJpc3F1ZTpcImZmZTRjNFwiLGJsYWNrOlwiMDAwXCIsYmxhbmNoZWRhbG1vbmQ6XCJmZmViY2RcIixibHVlOlwiMDBmXCIsYmx1ZXZpb2xldDpcIjhhMmJlMlwiLGJyb3duOlwiYTUyYTJhXCIsYnVybHl3b29kOlwiZGViODg3XCIsYnVybnRzaWVubmE6XCJlYTdlNWRcIixjYWRldGJsdWU6XCI1ZjllYTBcIixjaGFydHJldXNlOlwiN2ZmZjAwXCIsY2hvY29sYXRlOlwiZDI2OTFlXCIsY29yYWw6XCJmZjdmNTBcIixjb3JuZmxvd2VyYmx1ZTpcIjY0OTVlZFwiLGNvcm5zaWxrOlwiZmZmOGRjXCIsY3JpbXNvbjpcImRjMTQzY1wiLGN5YW46XCIwZmZcIixkYXJrYmx1ZTpcIjAwMDA4YlwiLGRhcmtjeWFuOlwiMDA4YjhiXCIsZGFya2dvbGRlbnJvZDpcImI4ODYwYlwiLGRhcmtncmF5OlwiYTlhOWE5XCIsZGFya2dyZWVuOlwiMDA2NDAwXCIsZGFya2dyZXk6XCJhOWE5YTlcIixkYXJra2hha2k6XCJiZGI3NmJcIixkYXJrbWFnZW50YTpcIjhiMDA4YlwiLGRhcmtvbGl2ZWdyZWVuOlwiNTU2YjJmXCIsZGFya29yYW5nZTpcImZmOGMwMFwiLGRhcmtvcmNoaWQ6XCI5OTMyY2NcIixkYXJrcmVkOlwiOGIwMDAwXCIsZGFya3NhbG1vbjpcImU5OTY3YVwiLGRhcmtzZWFncmVlbjpcIjhmYmM4ZlwiLGRhcmtzbGF0ZWJsdWU6XCI0ODNkOGJcIixkYXJrc2xhdGVncmF5OlwiMmY0ZjRmXCIsZGFya3NsYXRlZ3JleTpcIjJmNGY0ZlwiLGRhcmt0dXJxdW9pc2U6XCIwMGNlZDFcIixkYXJrdmlvbGV0OlwiOTQwMGQzXCIsZGVlcHBpbms6XCJmZjE0OTNcIixkZWVwc2t5Ymx1ZTpcIjAwYmZmZlwiLGRpbWdyYXk6XCI2OTY5NjlcIixkaW1ncmV5OlwiNjk2OTY5XCIsZG9kZ2VyYmx1ZTpcIjFlOTBmZlwiLGZpcmVicmljazpcImIyMjIyMlwiLGZsb3JhbHdoaXRlOlwiZmZmYWYwXCIsZm9yZXN0Z3JlZW46XCIyMjhiMjJcIixmdWNoc2lhOlwiZjBmXCIsZ2FpbnNib3JvOlwiZGNkY2RjXCIsZ2hvc3R3aGl0ZTpcImY4ZjhmZlwiLGdvbGQ6XCJmZmQ3MDBcIixnb2xkZW5yb2Q6XCJkYWE1MjBcIixncmF5OlwiODA4MDgwXCIsZ3JlZW46XCIwMDgwMDBcIixncmVlbnllbGxvdzpcImFkZmYyZlwiLGdyZXk6XCI4MDgwODBcIixob25leWRldzpcImYwZmZmMFwiLGhvdHBpbms6XCJmZjY5YjRcIixpbmRpYW5yZWQ6XCJjZDVjNWNcIixpbmRpZ286XCI0YjAwODJcIixpdm9yeTpcImZmZmZmMFwiLGtoYWtpOlwiZjBlNjhjXCIsbGF2ZW5kZXI6XCJlNmU2ZmFcIixsYXZlbmRlcmJsdXNoOlwiZmZmMGY1XCIsbGF3bmdyZWVuOlwiN2NmYzAwXCIsbGVtb25jaGlmZm9uOlwiZmZmYWNkXCIsbGlnaHRibHVlOlwiYWRkOGU2XCIsbGlnaHRjb3JhbDpcImYwODA4MFwiLGxpZ2h0Y3lhbjpcImUwZmZmZlwiLGxpZ2h0Z29sZGVucm9keWVsbG93OlwiZmFmYWQyXCIsbGlnaHRncmF5OlwiZDNkM2QzXCIsbGlnaHRncmVlbjpcIjkwZWU5MFwiLGxpZ2h0Z3JleTpcImQzZDNkM1wiLGxpZ2h0cGluazpcImZmYjZjMVwiLGxpZ2h0c2FsbW9uOlwiZmZhMDdhXCIsbGlnaHRzZWFncmVlbjpcIjIwYjJhYVwiLGxpZ2h0c2t5Ymx1ZTpcIjg3Y2VmYVwiLGxpZ2h0c2xhdGVncmF5OlwiNzg5XCIsbGlnaHRzbGF0ZWdyZXk6XCI3ODlcIixsaWdodHN0ZWVsYmx1ZTpcImIwYzRkZVwiLGxpZ2h0eWVsbG93OlwiZmZmZmUwXCIsbGltZTpcIjBmMFwiLGxpbWVncmVlbjpcIjMyY2QzMlwiLGxpbmVuOlwiZmFmMGU2XCIsbWFnZW50YTpcImYwZlwiLG1hcm9vbjpcIjgwMDAwMFwiLG1lZGl1bWFxdWFtYXJpbmU6XCI2NmNkYWFcIixtZWRpdW1ibHVlOlwiMDAwMGNkXCIsbWVkaXVtb3JjaGlkOlwiYmE1NWQzXCIsbWVkaXVtcHVycGxlOlwiOTM3MGRiXCIsbWVkaXVtc2VhZ3JlZW46XCIzY2IzNzFcIixtZWRpdW1zbGF0ZWJsdWU6XCI3YjY4ZWVcIixtZWRpdW1zcHJpbmdncmVlbjpcIjAwZmE5YVwiLG1lZGl1bXR1cnF1b2lzZTpcIjQ4ZDFjY1wiLG1lZGl1bXZpb2xldHJlZDpcImM3MTU4NVwiLG1pZG5pZ2h0Ymx1ZTpcIjE5MTk3MFwiLG1pbnRjcmVhbTpcImY1ZmZmYVwiLG1pc3R5cm9zZTpcImZmZTRlMVwiLG1vY2Nhc2luOlwiZmZlNGI1XCIsbmF2YWpvd2hpdGU6XCJmZmRlYWRcIixuYXZ5OlwiMDAwMDgwXCIsb2xkbGFjZTpcImZkZjVlNlwiLG9saXZlOlwiODA4MDAwXCIsb2xpdmVkcmFiOlwiNmI4ZTIzXCIsb3JhbmdlOlwiZmZhNTAwXCIsb3JhbmdlcmVkOlwiZmY0NTAwXCIsb3JjaGlkOlwiZGE3MGQ2XCIscGFsZWdvbGRlbnJvZDpcImVlZThhYVwiLHBhbGVncmVlbjpcIjk4ZmI5OFwiLHBhbGV0dXJxdW9pc2U6XCJhZmVlZWVcIixwYWxldmlvbGV0cmVkOlwiZGI3MDkzXCIscGFwYXlhd2hpcDpcImZmZWZkNVwiLHBlYWNocHVmZjpcImZmZGFiOVwiLHBlcnU6XCJjZDg1M2ZcIixwaW5rOlwiZmZjMGNiXCIscGx1bTpcImRkYTBkZFwiLHBvd2RlcmJsdWU6XCJiMGUwZTZcIixwdXJwbGU6XCI4MDAwODBcIixyZWJlY2NhcHVycGxlOlwiNjYzMzk5XCIscmVkOlwiZjAwXCIscm9zeWJyb3duOlwiYmM4ZjhmXCIscm95YWxibHVlOlwiNDE2OWUxXCIsc2FkZGxlYnJvd246XCI4YjQ1MTNcIixzYWxtb246XCJmYTgwNzJcIixzYW5keWJyb3duOlwiZjRhNDYwXCIsc2VhZ3JlZW46XCIyZThiNTdcIixzZWFzaGVsbDpcImZmZjVlZVwiLHNpZW5uYTpcImEwNTIyZFwiLHNpbHZlcjpcImMwYzBjMFwiLHNreWJsdWU6XCI4N2NlZWJcIixzbGF0ZWJsdWU6XCI2YTVhY2RcIixzbGF0ZWdyYXk6XCI3MDgwOTBcIixzbGF0ZWdyZXk6XCI3MDgwOTBcIixzbm93OlwiZmZmYWZhXCIsc3ByaW5nZ3JlZW46XCIwMGZmN2ZcIixzdGVlbGJsdWU6XCI0NjgyYjRcIix0YW46XCJkMmI0OGNcIix0ZWFsOlwiMDA4MDgwXCIsdGhpc3RsZTpcImQ4YmZkOFwiLHRvbWF0bzpcImZmNjM0N1wiLHR1cnF1b2lzZTpcIjQwZTBkMFwiLHZpb2xldDpcImVlODJlZVwiLHdoZWF0OlwiZjVkZWIzXCIsd2hpdGU6XCJmZmZcIix3aGl0ZXNtb2tlOlwiZjVmNWY1XCIseWVsbG93OlwiZmYwXCIseWVsbG93Z3JlZW46XCI5YWNkMzJcIn0sYj1yLmhleE5hbWVzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJih0W2Vbbl1dPW4pO3JldHVybiB0fSh3KTtmdW5jdGlvbiB4KGUpe3JldHVybiBlPXBhcnNlRmxvYXQoZSksKGlzTmFOKGUpfHxlPDB8fGU+MSkmJihlPTEpLGV9ZnVuY3Rpb24gXyhlLHQpeyhmdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmLTEhPWUuaW5kZXhPZihcIi5cIikmJjE9PT1wYXJzZUZsb2F0KGUpfSkoZSkmJihlPVwiMTAwJVwiKTt2YXIgbj1mdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmLTEhPWUuaW5kZXhPZihcIiVcIil9KGUpO3JldHVybiBlPU1hdGgubWluKHQsTWF0aC5tYXgoMCxwYXJzZUZsb2F0KGUpKSksbiYmKGU9cGFyc2VJbnQoZSp0LDEwKS8xMDApLE1hdGguYWJzKGUtdCk8MWUtNj8xOmUldC9wYXJzZUZsb2F0KHQpfWZ1bmN0aW9uIE8oZSl7cmV0dXJuIE1hdGgubWluKDEsTWF0aC5tYXgoMCxlKSl9ZnVuY3Rpb24gTChlKXtyZXR1cm4gcGFyc2VJbnQoZSwxNil9ZnVuY3Rpb24gRShlKXtyZXR1cm4gMT09ZS5sZW5ndGg/XCIwXCIrZTpcIlwiK2V9ZnVuY3Rpb24gUyhlKXtyZXR1cm4gZTw9MSYmKGU9MTAwKmUrXCIlXCIpLGV9ZnVuY3Rpb24gaihlKXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqcGFyc2VGbG9hdChlKSkudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIEwoZSkvMjU1fXZhciBrLFIsUCxJPShSPVwiW1xcXFxzfFxcXFwoXSsoXCIrKGs9XCIoPzpbLVxcXFwrXT9cXFxcZCpcXFxcLlxcXFxkKyU/KXwoPzpbLVxcXFwrXT9cXFxcZCslPylcIikrXCIpWyx8XFxcXHNdKyhcIitrK1wiKVssfFxcXFxzXSsoXCIraytcIilcXFxccypcXFxcKT9cIixQPVwiW1xcXFxzfFxcXFwoXSsoXCIraytcIilbLHxcXFxcc10rKFwiK2srXCIpWyx8XFxcXHNdKyhcIitrK1wiKVssfFxcXFxzXSsoXCIraytcIilcXFxccypcXFxcKT9cIix7Q1NTX1VOSVQ6bmV3IFJlZ0V4cChrKSxyZ2I6bmV3IFJlZ0V4cChcInJnYlwiK1IpLHJnYmE6bmV3IFJlZ0V4cChcInJnYmFcIitQKSxoc2w6bmV3IFJlZ0V4cChcImhzbFwiK1IpLGhzbGE6bmV3IFJlZ0V4cChcImhzbGFcIitQKSxoc3Y6bmV3IFJlZ0V4cChcImhzdlwiK1IpLGhzdmE6bmV3IFJlZ0V4cChcImhzdmFcIitQKSxoZXgzOi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg2Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkLyxoZXg0Oi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4ODovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvfSk7ZnVuY3Rpb24gQShlKXtyZXR1cm4hIUkuQ1NTX1VOSVQuZXhlYyhlKX1yZXR1cm4gcn0oKX19LG89e307ZnVuY3Rpb24gaShlKXt2YXIgdD1vW2VdO2lmKHZvaWQgMCE9PXQpcmV0dXJuIHQuZXhwb3J0czt2YXIgbj1vW2VdPXtpZDplLGxvYWRlZDohMSxleHBvcnRzOnt9fTtyZXR1cm4gcltlXS5jYWxsKG4uZXhwb3J0cyxuLG4uZXhwb3J0cyxpKSxuLmxvYWRlZD0hMCxuLmV4cG9ydHN9aS5uPWU9Pnt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/KCk9PmUuZGVmYXVsdDooKT0+ZTtyZXR1cm4gaS5kKHQse2E6dH0pLHR9LGkuZD0oZSx0KT0+e2Zvcih2YXIgbiBpbiB0KWkubyh0LG4pJiYhaS5vKGUsbikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0saS5nPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksaS5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxpLnI9ZT0+e1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LGkubm1kPWU9PihlLnBhdGhzPVtdLGUuY2hpbGRyZW58fChlLmNoaWxkcmVuPVtdKSxlKTt2YXIgYT1pKDM0MSksbD10O2Zvcih2YXIgcyBpbiBhKWxbc109YVtzXTthLl9fZXNNb2R1bGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSwzMTk4OihlLHQsbik9Pnt2YXIgcj1OYU4sbz1cIltvYmplY3QgU3ltYm9sXVwiLGk9L15cXHMrfFxccyskL2csYT0vXlstK10weFswLTlhLWZdKyQvaSxsPS9eMGJbMDFdKyQvaSxzPS9eMG9bMC03XSskL2ksYz1wYXJzZUludCx1PVwib2JqZWN0XCI9PXR5cGVvZiBuLmcmJm4uZyYmbi5nLk9iamVjdD09PU9iamVjdCYmbi5nLGY9XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGQ9dXx8Znx8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpLHA9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxoPU1hdGgubWF4LGc9TWF0aC5taW4sdj1mdW5jdGlvbigpe3JldHVybiBkLkRhdGUubm93KCl9O2Z1bmN0aW9uIG0oZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuISFlJiYoXCJvYmplY3RcIj09dHx8XCJmdW5jdGlvblwiPT10KX1mdW5jdGlvbiBDKGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiBlO2lmKGZ1bmN0aW9uKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfHxmdW5jdGlvbihlKXtyZXR1cm4hIWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfShlKSYmcC5jYWxsKGUpPT1vfShlKSlyZXR1cm4gcjtpZihtKGUpKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnZhbHVlT2Y/ZS52YWx1ZU9mKCk6ZTtlPW0odCk/dCtcIlwiOnR9aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuIDA9PT1lP2U6K2U7ZT1lLnJlcGxhY2UoaSxcIlwiKTt2YXIgbj1sLnRlc3QoZSk7cmV0dXJuIG58fHMudGVzdChlKT9jKGUuc2xpY2UoMiksbj8yOjgpOmEudGVzdChlKT9yOitlfWUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIHIsbyxpLGEsbCxzLGM9MCx1PSExLGY9ITEsZD0hMDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIGZ1bmN0aW9uXCIpO2Z1bmN0aW9uIHAodCl7dmFyIG49cixpPW87cmV0dXJuIHI9bz12b2lkIDAsYz10LGE9ZS5hcHBseShpLG4pfWZ1bmN0aW9uIHkoZSl7dmFyIG49ZS1zO3JldHVybiB2b2lkIDA9PT1zfHxuPj10fHxuPDB8fGYmJmUtYz49aX1mdW5jdGlvbiB3KCl7dmFyIGU9digpO2lmKHkoZSkpcmV0dXJuIGIoZSk7bD1zZXRUaW1lb3V0KHcsZnVuY3Rpb24oZSl7dmFyIG49dC0oZS1zKTtyZXR1cm4gZj9nKG4saS0oZS1jKSk6bn0oZSkpfWZ1bmN0aW9uIGIoZSl7cmV0dXJuIGw9dm9pZCAwLGQmJnI/cChlKToocj1vPXZvaWQgMCxhKX1mdW5jdGlvbiB4KCl7dmFyIGU9digpLG49eShlKTtpZihyPWFyZ3VtZW50cyxvPXRoaXMscz1lLG4pe2lmKHZvaWQgMD09PWwpcmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBjPWUsbD1zZXRUaW1lb3V0KHcsdCksdT9wKGUpOmF9KHMpO2lmKGYpcmV0dXJuIGw9c2V0VGltZW91dCh3LHQpLHAocyl9cmV0dXJuIHZvaWQgMD09PWwmJihsPXNldFRpbWVvdXQodyx0KSksYX1yZXR1cm4gdD1DKHQpfHwwLG0obikmJih1PSEhbi5sZWFkaW5nLGk9KGY9XCJtYXhXYWl0XCJpbiBuKT9oKEMobi5tYXhXYWl0KXx8MCx0KTppLGQ9XCJ0cmFpbGluZ1wiaW4gbj8hIW4udHJhaWxpbmc6ZCkseC5jYW5jZWw9ZnVuY3Rpb24oKXt2b2lkIDAhPT1sJiZjbGVhclRpbWVvdXQobCksYz0wLHI9cz1vPWw9dm9pZCAwfSx4LmZsdXNoPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PWw/YTpiKHYoKSl9LHh9fSwyNTI1OmU9PntcInVzZSBzdHJpY3RcIjt2YXIgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxyPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciBlPW5ldyBTdHJpbmcoXCJhYmNcIik7aWYoZVs1XT1cImRlXCIsXCI1XCI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKVswXSlyZXR1cm4hMTtmb3IodmFyIHQ9e30sbj0wO248MTA7bisrKXRbXCJfXCIrU3RyaW5nLmZyb21DaGFyQ29kZShuKV09bjtpZihcIjAxMjM0NTY3ODlcIiE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSkuam9pbihcIlwiKSlyZXR1cm4hMTt2YXIgcj17fTtyZXR1cm5cImFiY2RlZmdoaWprbG1ub3BxcnN0XCIuc3BsaXQoXCJcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cltlXT1lfSkpLFwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIj09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30scikpLmpvaW4oXCJcIil9Y2F0Y2goZSl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24oZSxvKXtmb3IodmFyIGksYSxsPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBPYmplY3QoZSl9KGUpLHM9MTtzPGFyZ3VtZW50cy5sZW5ndGg7cysrKXtmb3IodmFyIGMgaW4gaT1PYmplY3QoYXJndW1lbnRzW3NdKSluLmNhbGwoaSxjKSYmKGxbY109aVtjXSk7aWYodCl7YT10KGkpO2Zvcih2YXIgdT0wO3U8YS5sZW5ndGg7dSsrKXIuY2FsbChpLGFbdV0pJiYobFthW3VdXT1pW2FbdV1dKX19cmV0dXJuIGx9fSw4NzAyOihlLHQpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLHI9bj9TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTo2MDEwMyxvPW4/U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKTo2MDEwNixpPW4/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LGE9bj9TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik6NjAxMDgsbD1uP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTo2MDExNCxzPW4/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LGM9bj9TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTo2MDExMCx1PW4/U3ltYm9sLmZvcihcInJlYWN0LmFzeW5jX21vZGVcIik6NjAxMTEsZj1uP1N5bWJvbC5mb3IoXCJyZWFjdC5jb25jdXJyZW50X21vZGVcIik6NjAxMTEsZD1uP1N5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTo2MDExMixwPW4/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpOjYwMTEzLGg9bj9TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKTo2MDEyMCxnPW4/U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIik6NjAxMTUsdj1uP1N5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpOjYwMTE2LG09bj9TeW1ib2wuZm9yKFwicmVhY3QuYmxvY2tcIik6NjAxMjEsQz1uP1N5bWJvbC5mb3IoXCJyZWFjdC5mdW5kYW1lbnRhbFwiKTo2MDExNyx5PW4/U3ltYm9sLmZvcihcInJlYWN0LnJlc3BvbmRlclwiKTo2MDExOCx3PW4/U3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpOjYwMTE5O2Z1bmN0aW9uIGIoZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lKXt2YXIgdD1lLiQkdHlwZW9mO3N3aXRjaCh0KXtjYXNlIHI6c3dpdGNoKGU9ZS50eXBlKXtjYXNlIHU6Y2FzZSBmOmNhc2UgaTpjYXNlIGw6Y2FzZSBhOmNhc2UgcDpyZXR1cm4gZTtkZWZhdWx0OnN3aXRjaChlPWUmJmUuJCR0eXBlb2Ype2Nhc2UgYzpjYXNlIGQ6Y2FzZSB2OmNhc2UgZzpjYXNlIHM6cmV0dXJuIGU7ZGVmYXVsdDpyZXR1cm4gdH19Y2FzZSBvOnJldHVybiB0fX19ZnVuY3Rpb24geChlKXtyZXR1cm4gYihlKT09PWZ9dC5Gb3J3YXJkUmVmPWQsdC5pc1ZhbGlkRWxlbWVudFR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGV8fGU9PT1pfHxlPT09Znx8ZT09PWx8fGU9PT1hfHxlPT09cHx8ZT09PWh8fFwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmKGUuJCR0eXBlb2Y9PT12fHxlLiQkdHlwZW9mPT09Z3x8ZS4kJHR5cGVvZj09PXN8fGUuJCR0eXBlb2Y9PT1jfHxlLiQkdHlwZW9mPT09ZHx8ZS4kJHR5cGVvZj09PUN8fGUuJCR0eXBlb2Y9PT15fHxlLiQkdHlwZW9mPT09d3x8ZS4kJHR5cGVvZj09PW0pfX0sOTE4NTooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPW4oODcwMil9LDE1MzU6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByPW4oMjUyNSksbz02MDEwMyxpPTYwMTA2O3QuRnJhZ21lbnQ9NjAxMDcsdC5TdHJpY3RNb2RlPTYwMTA4LHQuUHJvZmlsZXI9NjAxMTQ7dmFyIGE9NjAxMDksbD02MDExMCxzPTYwMTEyO3QuU3VzcGVuc2U9NjAxMTM7dmFyIGM9NjAxMTUsdT02MDExNjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciBmPVN5bWJvbC5mb3I7bz1mKFwicmVhY3QuZWxlbWVudFwiKSxpPWYoXCJyZWFjdC5wb3J0YWxcIiksdC5GcmFnbWVudD1mKFwicmVhY3QuZnJhZ21lbnRcIiksdC5TdHJpY3RNb2RlPWYoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSx0LlByb2ZpbGVyPWYoXCJyZWFjdC5wcm9maWxlclwiKSxhPWYoXCJyZWFjdC5wcm92aWRlclwiKSxsPWYoXCJyZWFjdC5jb250ZXh0XCIpLHM9ZihcInJlYWN0LmZvcndhcmRfcmVmXCIpLHQuU3VzcGVuc2U9ZihcInJlYWN0LnN1c3BlbnNlXCIpLGM9ZihcInJlYWN0Lm1lbW9cIiksdT1mKFwicmVhY3QubGF6eVwiKX12YXIgZD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBwKGUpe2Zvcih2YXIgdD1cImh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PVwiK2Usbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdCs9XCImYXJnc1tdPVwiK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbbl0pO3JldHVyblwiTWluaWZpZWQgUmVhY3QgZXJyb3IgI1wiK2UrXCI7IHZpc2l0IFwiK3QrXCIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLlwifXZhciBoPXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fSxnPXt9O2Z1bmN0aW9uIHYoZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9Zyx0aGlzLnVwZGF0ZXI9bnx8aH1mdW5jdGlvbiBtKCl7fWZ1bmN0aW9uIEMoZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9Zyx0aGlzLnVwZGF0ZXI9bnx8aH12LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9LHYucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPWUpdGhyb3cgRXJyb3IocCg4NSkpO3RoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxlLHQsXCJzZXRTdGF0ZVwiKX0sdi5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLGUsXCJmb3JjZVVwZGF0ZVwiKX0sbS5wcm90b3R5cGU9di5wcm90b3R5cGU7dmFyIHk9Qy5wcm90b3R5cGU9bmV3IG07eS5jb25zdHJ1Y3Rvcj1DLHIoeSx2LnByb3RvdHlwZSkseS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgdz17Y3VycmVudDpudWxsfSxiPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkseD17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O2Z1bmN0aW9uIF8oZSx0LG4pe3ZhciByLGk9e30sYT1udWxsLGw9bnVsbDtpZihudWxsIT10KWZvcihyIGluIHZvaWQgMCE9PXQucmVmJiYobD10LnJlZiksdm9pZCAwIT09dC5rZXkmJihhPVwiXCIrdC5rZXkpLHQpYi5jYWxsKHQscikmJiF4Lmhhc093blByb3BlcnR5KHIpJiYoaVtyXT10W3JdKTt2YXIgcz1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PXMpaS5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxzKXtmb3IodmFyIGM9QXJyYXkocyksdT0wO3U8czt1KyspY1t1XT1hcmd1bWVudHNbdSsyXTtpLmNoaWxkcmVuPWN9aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKHIgaW4gcz1lLmRlZmF1bHRQcm9wcyl2b2lkIDA9PT1pW3JdJiYoaVtyXT1zW3JdKTtyZXR1cm57JCR0eXBlb2Y6byx0eXBlOmUsa2V5OmEscmVmOmwscHJvcHM6aSxfb3duZXI6dy5jdXJyZW50fX1mdW5jdGlvbiBPKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmZS4kJHR5cGVvZj09PW99dmFyIEw9L1xcLysvZztmdW5jdGlvbiBFKGUsdCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZudWxsIT1lLmtleT9mdW5jdGlvbihlKXt2YXIgdD17XCI9XCI6XCI9MFwiLFwiOlwiOlwiPTJcIn07cmV0dXJuXCIkXCIrZS5yZXBsYWNlKC9bPTpdL2csKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpfShcIlwiK2Uua2V5KTp0LnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBTKGUsdCxuLHIsYSl7dmFyIGw9dHlwZW9mIGU7XCJ1bmRlZmluZWRcIiE9PWwmJlwiYm9vbGVhblwiIT09bHx8KGU9bnVsbCk7dmFyIHM9ITE7aWYobnVsbD09PWUpcz0hMDtlbHNlIHN3aXRjaChsKXtjYXNlXCJzdHJpbmdcIjpjYXNlXCJudW1iZXJcIjpzPSEwO2JyZWFrO2Nhc2VcIm9iamVjdFwiOnN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIG86Y2FzZSBpOnM9ITB9fWlmKHMpcmV0dXJuIGE9YShzPWUpLGU9XCJcIj09PXI/XCIuXCIrRShzLDApOnIsQXJyYXkuaXNBcnJheShhKT8obj1cIlwiLG51bGwhPWUmJihuPWUucmVwbGFjZShMLFwiJCYvXCIpK1wiL1wiKSxTKGEsdCxuLFwiXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpKTpudWxsIT1hJiYoTyhhKSYmKGE9ZnVuY3Rpb24oZSx0KXtyZXR1cm57JCR0eXBlb2Y6byx0eXBlOmUudHlwZSxrZXk6dCxyZWY6ZS5yZWYscHJvcHM6ZS5wcm9wcyxfb3duZXI6ZS5fb3duZXJ9fShhLG4rKCFhLmtleXx8cyYmcy5rZXk9PT1hLmtleT9cIlwiOihcIlwiK2Eua2V5KS5yZXBsYWNlKEwsXCIkJi9cIikrXCIvXCIpK2UpKSx0LnB1c2goYSkpLDE7aWYocz0wLHI9XCJcIj09PXI/XCIuXCI6citcIjpcIixBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgYz0wO2M8ZS5sZW5ndGg7YysrKXt2YXIgdT1yK0UobD1lW2NdLGMpO3MrPVMobCx0LG4sdSxhKX1lbHNlIGlmKHU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfHxcIm9iamVjdFwiIT10eXBlb2YgZT9udWxsOlwiZnVuY3Rpb25cIj09dHlwZW9mKGU9ZCYmZVtkXXx8ZVtcIkBAaXRlcmF0b3JcIl0pP2U6bnVsbH0oZSksXCJmdW5jdGlvblwiPT10eXBlb2YgdSlmb3IoZT11LmNhbGwoZSksYz0wOyEobD1lLm5leHQoKSkuZG9uZTspcys9UyhsPWwudmFsdWUsdCxuLHU9citFKGwsYysrKSxhKTtlbHNlIGlmKFwib2JqZWN0XCI9PT1sKXRocm93IHQ9XCJcIitlLEVycm9yKHAoMzEsXCJbb2JqZWN0IE9iamVjdF1cIj09PXQ/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhlKS5qb2luKFwiLCBcIikrXCJ9XCI6dCkpO3JldHVybiBzfWZ1bmN0aW9uIGooZSx0LG4pe2lmKG51bGw9PWUpcmV0dXJuIGU7dmFyIHI9W10sbz0wO3JldHVybiBTKGUscixcIlwiLFwiXCIsKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwobixlLG8rKyl9KSkscn1mdW5jdGlvbiBNKGUpe2lmKC0xPT09ZS5fc3RhdHVzKXt2YXIgdD1lLl9yZXN1bHQ7dD10KCksZS5fc3RhdHVzPTAsZS5fcmVzdWx0PXQsdC50aGVuKChmdW5jdGlvbih0KXswPT09ZS5fc3RhdHVzJiYodD10LmRlZmF1bHQsZS5fc3RhdHVzPTEsZS5fcmVzdWx0PXQpfSksKGZ1bmN0aW9uKHQpezA9PT1lLl9zdGF0dXMmJihlLl9zdGF0dXM9MixlLl9yZXN1bHQ9dCl9KSl9aWYoMT09PWUuX3N0YXR1cylyZXR1cm4gZS5fcmVzdWx0O3Rocm93IGUuX3Jlc3VsdH12YXIgaz17Y3VycmVudDpudWxsfTtmdW5jdGlvbiBSKCl7dmFyIGU9ay5jdXJyZW50O2lmKG51bGw9PT1lKXRocm93IEVycm9yKHAoMzIxKSk7cmV0dXJuIGV9dmFyIFA9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6ayxSZWFjdEN1cnJlbnRCYXRjaENvbmZpZzp7dHJhbnNpdGlvbjowfSxSZWFjdEN1cnJlbnRPd25lcjp3LElzU29tZVJlbmRlcmVyQWN0aW5nOntjdXJyZW50OiExfSxhc3NpZ246cn07dC5DaGlsZHJlbj17bWFwOmosZm9yRWFjaDpmdW5jdGlvbihlLHQsbil7aihlLChmdW5jdGlvbigpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksbil9LGNvdW50OmZ1bmN0aW9uKGUpe3ZhciB0PTA7cmV0dXJuIGooZSwoZnVuY3Rpb24oKXt0Kyt9KSksdH0sdG9BcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gaihlLChmdW5jdGlvbihlKXtyZXR1cm4gZX0pKXx8W119LG9ubHk6ZnVuY3Rpb24oZSl7aWYoIU8oZSkpdGhyb3cgRXJyb3IocCgxNDMpKTtyZXR1cm4gZX19LHQuQ29tcG9uZW50PXYsdC5QdXJlQ29tcG9uZW50PUMsdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD1QLHQuY2xvbmVFbGVtZW50PWZ1bmN0aW9uKGUsdCxuKXtpZihudWxsPT1lKXRocm93IEVycm9yKHAoMjY3LGUpKTt2YXIgaT1yKHt9LGUucHJvcHMpLGE9ZS5rZXksbD1lLnJlZixzPWUuX293bmVyO2lmKG51bGwhPXQpe2lmKHZvaWQgMCE9PXQucmVmJiYobD10LnJlZixzPXcuY3VycmVudCksdm9pZCAwIT09dC5rZXkmJihhPVwiXCIrdC5rZXkpLGUudHlwZSYmZS50eXBlLmRlZmF1bHRQcm9wcyl2YXIgYz1lLnR5cGUuZGVmYXVsdFByb3BzO2Zvcih1IGluIHQpYi5jYWxsKHQsdSkmJiF4Lmhhc093blByb3BlcnR5KHUpJiYoaVt1XT12b2lkIDA9PT10W3VdJiZ2b2lkIDAhPT1jP2NbdV06dFt1XSl9dmFyIHU9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT11KWkuY2hpbGRyZW49bjtlbHNlIGlmKDE8dSl7Yz1BcnJheSh1KTtmb3IodmFyIGY9MDtmPHU7ZisrKWNbZl09YXJndW1lbnRzW2YrMl07aS5jaGlsZHJlbj1jfXJldHVybnskJHR5cGVvZjpvLHR5cGU6ZS50eXBlLGtleTphLHJlZjpsLHByb3BzOmksX293bmVyOnN9fSx0LmNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9bnVsbCksKGU9eyQkdHlwZW9mOmwsX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOnQsX2N1cnJlbnRWYWx1ZTplLF9jdXJyZW50VmFsdWUyOmUsX3RocmVhZENvdW50OjAsUHJvdmlkZXI6bnVsbCxDb25zdW1lcjpudWxsfSkuUHJvdmlkZXI9eyQkdHlwZW9mOmEsX2NvbnRleHQ6ZX0sZS5Db25zdW1lcj1lfSx0LmNyZWF0ZUVsZW1lbnQ9Xyx0LmNyZWF0ZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9Xy5iaW5kKG51bGwsZSk7cmV0dXJuIHQudHlwZT1lLHR9LHQuY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19LHQuZm9yd2FyZFJlZj1mdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6cyxyZW5kZXI6ZX19LHQuaXNWYWxpZEVsZW1lbnQ9Tyx0Lmxhenk9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOnUsX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDplfSxfaW5pdDpNfX0sdC5tZW1vPWZ1bmN0aW9uKGUsdCl7cmV0dXJueyQkdHlwZW9mOmMsdHlwZTplLGNvbXBhcmU6dm9pZCAwPT09dD9udWxsOnR9fSx0LnVzZUNhbGxiYWNrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFIoKS51c2VDYWxsYmFjayhlLHQpfSx0LnVzZUNvbnRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUigpLnVzZUNvbnRleHQoZSx0KX0sdC51c2VEZWJ1Z1ZhbHVlPWZ1bmN0aW9uKCl7fSx0LnVzZUVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBSKCkudXNlRWZmZWN0KGUsdCl9LHQudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFIoKS51c2VJbXBlcmF0aXZlSGFuZGxlKGUsdCxuKX0sdC51c2VMYXlvdXRFZmZlY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUigpLnVzZUxheW91dEVmZmVjdChlLHQpfSx0LnVzZU1lbW89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUigpLnVzZU1lbW8oZSx0KX0sdC51c2VSZWR1Y2VyPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUigpLnVzZVJlZHVjZXIoZSx0LG4pfSx0LnVzZVJlZj1mdW5jdGlvbihlKXtyZXR1cm4gUigpLnVzZVJlZihlKX0sdC51c2VTdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gUigpLnVzZVN0YXRlKGUpfSx0LnZlcnNpb249XCIxNy4wLjJcIn0sNzM3ODooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPW4oMTUzNSl9LDI5MjE6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24ucih0KSxuLmQodCx7U2VydmVyU3R5bGVTaGVldDooKT0+cHQsU3R5bGVTaGVldENvbnN1bWVyOigpPT5ndCxTdHlsZVNoZWV0Q29udGV4dDooKT0+aHQsU3R5bGVTaGVldE1hbmFnZXI6KCk9PnZ0LFRoZW1lQ29uc3VtZXI6KCk9PmZ0LFRoZW1lQ29udGV4dDooKT0+dXQsVGhlbWVQcm92aWRlcjooKT0+ZHQsX19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0hBVU5URURfQllfU1BPT0tZX0dIT1NUUzooKT0+RXQsY3JlYXRlR2xvYmFsU3R5bGU6KCk9Pnh0LGNzczooKT0+QmUsZGVmYXVsdDooKT0+U3QsaXNTdHlsZWRDb21wb25lbnQ6KCk9Pk4sa2V5ZnJhbWVzOigpPT5PdCx3aXRoVGhlbWU6KCk9Pkx0fSk7dmFyIHI9bigxOTQ2KSxvPW4ubihyKSxpPW4oNTI0NiksYT1uLm4oaSksbD1uKDczNzgpO2NvbnN0IHM9e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OjEsYm9yZGVySW1hZ2VPdXRzZXQ6MSxib3JkZXJJbWFnZVNsaWNlOjEsYm9yZGVySW1hZ2VXaWR0aDoxLGJveEZsZXg6MSxib3hGbGV4R3JvdXA6MSxib3hPcmRpbmFsR3JvdXA6MSxjb2x1bW5Db3VudDoxLGNvbHVtbnM6MSxmbGV4OjEsZmxleEdyb3c6MSxmbGV4UG9zaXRpdmU6MSxmbGV4U2hyaW5rOjEsZmxleE5lZ2F0aXZlOjEsZmxleE9yZGVyOjEsZ3JpZFJvdzoxLGdyaWRSb3dFbmQ6MSxncmlkUm93U3BhbjoxLGdyaWRSb3dTdGFydDoxLGdyaWRDb2x1bW46MSxncmlkQ29sdW1uRW5kOjEsZ3JpZENvbHVtblNwYW46MSxncmlkQ29sdW1uU3RhcnQ6MSxtc0dyaWRSb3c6MSxtc0dyaWRSb3dTcGFuOjEsbXNHcmlkQ29sdW1uOjEsbXNHcmlkQ29sdW1uU3BhbjoxLGZvbnRXZWlnaHQ6MSxsaW5lSGVpZ2h0OjEsb3BhY2l0eToxLG9yZGVyOjEsb3JwaGFuczoxLHRhYlNpemU6MSx3aWRvd3M6MSx6SW5kZXg6MSx6b29tOjEsV2Via2l0TGluZUNsYW1wOjEsZmlsbE9wYWNpdHk6MSxmbG9vZE9wYWNpdHk6MSxzdG9wT3BhY2l0eToxLHN0cm9rZURhc2hhcnJheToxLHN0cm9rZURhc2hvZmZzZXQ6MSxzdHJva2VNaXRlcmxpbWl0OjEsc3Ryb2tlT3BhY2l0eToxLHN0cm9rZVdpZHRoOjF9O3ZhciBjPW4oOTE4NSksdT1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZlIT1lfTtmdW5jdGlvbiBmKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihyPWVbbl0sbz10W25dLCEocj09PW98fHUocikmJnUobykpKXJldHVybiExO3ZhciByLG87cmV0dXJuITB9Y29uc3QgZD1mdW5jdGlvbihlLHQpe3ZhciBuO3ZvaWQgMD09PXQmJih0PWYpO3ZhciByLG89W10saT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGE9W10sbD0wO2w8YXJndW1lbnRzLmxlbmd0aDtsKyspYVtsXT1hcmd1bWVudHNbbF07cmV0dXJuIGkmJm49PT10aGlzJiZ0KGEsbyl8fChyPWUuYXBwbHkodGhpcyxhKSxpPSEwLG49dGhpcyxvPWEpLHJ9fTt2YXIgcD0vXigoY2hpbGRyZW58ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUx8a2V5fHJlZnxhdXRvRm9jdXN8ZGVmYXVsdFZhbHVlfGRlZmF1bHRDaGVja2VkfGlubmVySFRNTHxzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmd8c3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nfHZhbHVlTGlua3xhY2NlcHR8YWNjZXB0Q2hhcnNldHxhY2Nlc3NLZXl8YWN0aW9ufGFsbG93fGFsbG93VXNlck1lZGlhfGFsbG93UGF5bWVudFJlcXVlc3R8YWxsb3dGdWxsU2NyZWVufGFsbG93VHJhbnNwYXJlbmN5fGFsdHxhc3luY3xhdXRvQ29tcGxldGV8YXV0b1BsYXl8Y2FwdHVyZXxjZWxsUGFkZGluZ3xjZWxsU3BhY2luZ3xjaGFsbGVuZ2V8Y2hhclNldHxjaGVja2VkfGNpdGV8Y2xhc3NJRHxjbGFzc05hbWV8Y29sc3xjb2xTcGFufGNvbnRlbnR8Y29udGVudEVkaXRhYmxlfGNvbnRleHRNZW51fGNvbnRyb2xzfGNvbnRyb2xzTGlzdHxjb29yZHN8Y3Jvc3NPcmlnaW58ZGF0YXxkYXRlVGltZXxkZWNvZGluZ3xkZWZhdWx0fGRlZmVyfGRpcnxkaXNhYmxlZHxkaXNhYmxlUGljdHVyZUluUGljdHVyZXxkb3dubG9hZHxkcmFnZ2FibGV8ZW5jVHlwZXxmb3JtfGZvcm1BY3Rpb258Zm9ybUVuY1R5cGV8Zm9ybU1ldGhvZHxmb3JtTm9WYWxpZGF0ZXxmb3JtVGFyZ2V0fGZyYW1lQm9yZGVyfGhlYWRlcnN8aGVpZ2h0fGhpZGRlbnxoaWdofGhyZWZ8aHJlZkxhbmd8aHRtbEZvcnxodHRwRXF1aXZ8aWR8aW5wdXRNb2RlfGludGVncml0eXxpc3xrZXlQYXJhbXN8a2V5VHlwZXxraW5kfGxhYmVsfGxhbmd8bGlzdHxsb2FkaW5nfGxvb3B8bG93fG1hcmdpbkhlaWdodHxtYXJnaW5XaWR0aHxtYXh8bWF4TGVuZ3RofG1lZGlhfG1lZGlhR3JvdXB8bWV0aG9kfG1pbnxtaW5MZW5ndGh8bXVsdGlwbGV8bXV0ZWR8bmFtZXxub25jZXxub1ZhbGlkYXRlfG9wZW58b3B0aW11bXxwYXR0ZXJufHBsYWNlaG9sZGVyfHBsYXlzSW5saW5lfHBvc3RlcnxwcmVsb2FkfHByb2ZpbGV8cmFkaW9Hcm91cHxyZWFkT25seXxyZWZlcnJlclBvbGljeXxyZWx8cmVxdWlyZWR8cmV2ZXJzZWR8cm9sZXxyb3dzfHJvd1NwYW58c2FuZGJveHxzY29wZXxzY29wZWR8c2Nyb2xsaW5nfHNlYW1sZXNzfHNlbGVjdGVkfHNoYXBlfHNpemV8c2l6ZXN8c2xvdHxzcGFufHNwZWxsQ2hlY2t8c3JjfHNyY0RvY3xzcmNMYW5nfHNyY1NldHxzdGFydHxzdGVwfHN0eWxlfHN1bW1hcnl8dGFiSW5kZXh8dGFyZ2V0fHRpdGxlfHR5cGV8dXNlTWFwfHZhbHVlfHdpZHRofHdtb2RlfHdyYXB8YWJvdXR8ZGF0YXR5cGV8aW5saXN0fHByZWZpeHxwcm9wZXJ0eXxyZXNvdXJjZXx0eXBlb2Z8dm9jYWJ8YXV0b0NhcGl0YWxpemV8YXV0b0NvcnJlY3R8YXV0b1NhdmV8Y29sb3J8aW5lcnR8aXRlbVByb3B8aXRlbVNjb3BlfGl0ZW1UeXBlfGl0ZW1JRHxpdGVtUmVmfG9ufHJlc3VsdHN8c2VjdXJpdHl8dW5zZWxlY3RhYmxlfGFjY2VudEhlaWdodHxhY2N1bXVsYXRlfGFkZGl0aXZlfGFsaWdubWVudEJhc2VsaW5lfGFsbG93UmVvcmRlcnxhbHBoYWJldGljfGFtcGxpdHVkZXxhcmFiaWNGb3JtfGFzY2VudHxhdHRyaWJ1dGVOYW1lfGF0dHJpYnV0ZVR5cGV8YXV0b1JldmVyc2V8YXppbXV0aHxiYXNlRnJlcXVlbmN5fGJhc2VsaW5lU2hpZnR8YmFzZVByb2ZpbGV8YmJveHxiZWdpbnxiaWFzfGJ5fGNhbGNNb2RlfGNhcEhlaWdodHxjbGlwfGNsaXBQYXRoVW5pdHN8Y2xpcFBhdGh8Y2xpcFJ1bGV8Y29sb3JJbnRlcnBvbGF0aW9ufGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnN8Y29sb3JQcm9maWxlfGNvbG9yUmVuZGVyaW5nfGNvbnRlbnRTY3JpcHRUeXBlfGNvbnRlbnRTdHlsZVR5cGV8Y3Vyc29yfGN4fGN5fGR8ZGVjZWxlcmF0ZXxkZXNjZW50fGRpZmZ1c2VDb25zdGFudHxkaXJlY3Rpb258ZGlzcGxheXxkaXZpc29yfGRvbWluYW50QmFzZWxpbmV8ZHVyfGR4fGR5fGVkZ2VNb2RlfGVsZXZhdGlvbnxlbmFibGVCYWNrZ3JvdW5kfGVuZHxleHBvbmVudHxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkfGZpbGx8ZmlsbE9wYWNpdHl8ZmlsbFJ1bGV8ZmlsdGVyfGZpbHRlclJlc3xmaWx0ZXJVbml0c3xmbG9vZENvbG9yfGZsb29kT3BhY2l0eXxmb2N1c2FibGV8Zm9udEZhbWlseXxmb250U2l6ZXxmb250U2l6ZUFkanVzdHxmb250U3RyZXRjaHxmb250U3R5bGV8Zm9udFZhcmlhbnR8Zm9udFdlaWdodHxmb3JtYXR8ZnJvbXxmcnxmeHxmeXxnMXxnMnxnbHlwaE5hbWV8Z2x5cGhPcmllbnRhdGlvbkhvcml6b250YWx8Z2x5cGhPcmllbnRhdGlvblZlcnRpY2FsfGdseXBoUmVmfGdyYWRpZW50VHJhbnNmb3JtfGdyYWRpZW50VW5pdHN8aGFuZ2luZ3xob3JpekFkdlh8aG9yaXpPcmlnaW5YfGlkZW9ncmFwaGljfGltYWdlUmVuZGVyaW5nfGlufGluMnxpbnRlcmNlcHR8a3xrMXxrMnxrM3xrNHxrZXJuZWxNYXRyaXh8a2VybmVsVW5pdExlbmd0aHxrZXJuaW5nfGtleVBvaW50c3xrZXlTcGxpbmVzfGtleVRpbWVzfGxlbmd0aEFkanVzdHxsZXR0ZXJTcGFjaW5nfGxpZ2h0aW5nQ29sb3J8bGltaXRpbmdDb25lQW5nbGV8bG9jYWx8bWFya2VyRW5kfG1hcmtlck1pZHxtYXJrZXJTdGFydHxtYXJrZXJIZWlnaHR8bWFya2VyVW5pdHN8bWFya2VyV2lkdGh8bWFza3xtYXNrQ29udGVudFVuaXRzfG1hc2tVbml0c3xtYXRoZW1hdGljYWx8bW9kZXxudW1PY3RhdmVzfG9mZnNldHxvcGFjaXR5fG9wZXJhdG9yfG9yZGVyfG9yaWVudHxvcmllbnRhdGlvbnxvcmlnaW58b3ZlcmZsb3d8b3ZlcmxpbmVQb3NpdGlvbnxvdmVybGluZVRoaWNrbmVzc3xwYW5vc2UxfHBhaW50T3JkZXJ8cGF0aExlbmd0aHxwYXR0ZXJuQ29udGVudFVuaXRzfHBhdHRlcm5UcmFuc2Zvcm18cGF0dGVyblVuaXRzfHBvaW50ZXJFdmVudHN8cG9pbnRzfHBvaW50c0F0WHxwb2ludHNBdFl8cG9pbnRzQXRafHByZXNlcnZlQWxwaGF8cHJlc2VydmVBc3BlY3RSYXRpb3xwcmltaXRpdmVVbml0c3xyfHJhZGl1c3xyZWZYfHJlZll8cmVuZGVyaW5nSW50ZW50fHJlcGVhdENvdW50fHJlcGVhdER1cnxyZXF1aXJlZEV4dGVuc2lvbnN8cmVxdWlyZWRGZWF0dXJlc3xyZXN0YXJ0fHJlc3VsdHxyb3RhdGV8cnh8cnl8c2NhbGV8c2VlZHxzaGFwZVJlbmRlcmluZ3xzbG9wZXxzcGFjaW5nfHNwZWN1bGFyQ29uc3RhbnR8c3BlY3VsYXJFeHBvbmVudHxzcGVlZHxzcHJlYWRNZXRob2R8c3RhcnRPZmZzZXR8c3RkRGV2aWF0aW9ufHN0ZW1ofHN0ZW12fHN0aXRjaFRpbGVzfHN0b3BDb2xvcnxzdG9wT3BhY2l0eXxzdHJpa2V0aHJvdWdoUG9zaXRpb258c3RyaWtldGhyb3VnaFRoaWNrbmVzc3xzdHJpbmd8c3Ryb2tlfHN0cm9rZURhc2hhcnJheXxzdHJva2VEYXNob2Zmc2V0fHN0cm9rZUxpbmVjYXB8c3Ryb2tlTGluZWpvaW58c3Ryb2tlTWl0ZXJsaW1pdHxzdHJva2VPcGFjaXR5fHN0cm9rZVdpZHRofHN1cmZhY2VTY2FsZXxzeXN0ZW1MYW5ndWFnZXx0YWJsZVZhbHVlc3x0YXJnZXRYfHRhcmdldFl8dGV4dEFuY2hvcnx0ZXh0RGVjb3JhdGlvbnx0ZXh0UmVuZGVyaW5nfHRleHRMZW5ndGh8dG98dHJhbnNmb3JtfHUxfHUyfHVuZGVybGluZVBvc2l0aW9ufHVuZGVybGluZVRoaWNrbmVzc3x1bmljb2RlfHVuaWNvZGVCaWRpfHVuaWNvZGVSYW5nZXx1bml0c1BlckVtfHZBbHBoYWJldGljfHZIYW5naW5nfHZJZGVvZ3JhcGhpY3x2TWF0aGVtYXRpY2FsfHZhbHVlc3x2ZWN0b3JFZmZlY3R8dmVyc2lvbnx2ZXJ0QWR2WXx2ZXJ0T3JpZ2luWHx2ZXJ0T3JpZ2luWXx2aWV3Qm94fHZpZXdUYXJnZXR8dmlzaWJpbGl0eXx3aWR0aHN8d29yZFNwYWNpbmd8d3JpdGluZ01vZGV8eHx4SGVpZ2h0fHgxfHgyfHhDaGFubmVsU2VsZWN0b3J8eGxpbmtBY3R1YXRlfHhsaW5rQXJjcm9sZXx4bGlua0hyZWZ8eGxpbmtSb2xlfHhsaW5rU2hvd3x4bGlua1RpdGxlfHhsaW5rVHlwZXx4bWxCYXNlfHhtbG5zfHhtbG5zWGxpbmt8eG1sTGFuZ3x4bWxTcGFjZXx5fHkxfHkyfHlDaGFubmVsU2VsZWN0b3J8enx6b29tQW5kUGFufGZvcnxjbGFzc3xhdXRvZm9jdXMpfCgoW0RkXVtBYV1bVHRdW0FhXXxbQWFdW1JyXVtJaV1bQWFdfHgpLS4qKSkkLztjb25zdCBoPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwPT09dFtuXSYmKHRbbl09ZShuKSksdFtuXX19KChmdW5jdGlvbihlKXtyZXR1cm4gcC50ZXN0KGUpfHwxMTE9PT1lLmNoYXJDb2RlQXQoMCkmJjExMD09PWUuY2hhckNvZGVBdCgxKSYmZS5jaGFyQ29kZUF0KDIpPDkxfSkpO2Z1bmN0aW9uIGcoZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKX1mdW5jdGlvbiB2KGUpe3JldHVyblwiVW5kZWZpbmVkXCI9PT1nKGUpfWZ1bmN0aW9uIG0oZSl7cmV0dXJuXCJOdWxsXCI9PT1nKGUpfWZ1bmN0aW9uIEMoZSl7cmV0dXJuXCJPYmplY3RcIj09PWcoZSkmJihlLmNvbnN0cnVjdG9yPT09T2JqZWN0JiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1PYmplY3QucHJvdG90eXBlKX1mdW5jdGlvbiB5KGUpe3JldHVyblwiQXJyYXlcIj09PWcoZSl9ZnVuY3Rpb24gdyhlKXtyZXR1cm5cIlN5bWJvbFwiPT09ZyhlKX12YXIgYix4LF8sTyxMO2I9bSx4PXY7ZnVuY3Rpb24gRSgpe2Zvcih2YXIgZT0wLHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGg7dDxuO3QrKyllKz1hcmd1bWVudHNbdF0ubGVuZ3RoO3ZhciByPUFycmF5KGUpLG89MDtmb3IodD0wO3Q8bjt0KyspZm9yKHZhciBpPWFyZ3VtZW50c1t0XSxhPTAsbD1pLmxlbmd0aDthPGw7YSsrLG8rKylyW29dPWlbYV07cmV0dXJuIHJ9ZnVuY3Rpb24gUyhlLHQsbixyKXt2YXIgbz1yLnByb3BlcnR5SXNFbnVtZXJhYmxlKHQpP1wiZW51bWVyYWJsZVwiOlwibm9uZW51bWVyYWJsZVwiO1wiZW51bWVyYWJsZVwiPT09byYmKGVbdF09biksXCJub25lbnVtZXJhYmxlXCI9PT1vJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9ZnVuY3Rpb24gaihlLHQsbil7aWYoIUModCkpcmV0dXJuIG4mJnkobikmJm4uZm9yRWFjaCgoZnVuY3Rpb24obil7dD1uKGUsdCl9KSksdDt2YXIgcj17fTtDKGUpJiYocj1FKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSkpLnJlZHVjZSgoZnVuY3Rpb24obixyKXt2YXIgbz1lW3JdO3JldHVybighdyhyKSYmIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmluY2x1ZGVzKHIpfHx3KHIpJiYhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5pbmNsdWRlcyhyKSkmJlMobixyLG8sZSksbn0pLHt9KSk7cmV0dXJuIEUoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCksT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KSkucmVkdWNlKChmdW5jdGlvbihyLG8pe3ZhciBpPXRbb10sYT1DKGUpP2Vbb106dm9pZCAwO3JldHVybiBuJiZ5KG4pJiZuLmZvckVhY2goKGZ1bmN0aW9uKGUpe2k9ZShhLGkpfSkpLHZvaWQgMCE9PWEmJkMoaSkmJihpPWooYSxpLG4pKSxTKHIsbyxpLHQpLHJ9KSxyKX1jb25zdCBNPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3ZhciByPW51bGwsbz1lO3JldHVybiBDKGUpJiZlLmV4dGVuc2lvbnMmJjE9PT1PYmplY3Qua2V5cyhlKS5sZW5ndGgmJihvPXt9LHI9ZS5leHRlbnNpb25zKSx0LnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gaihlLHQscil9KSxvKX07dmFyIGs9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W2VbMF1dLHI9MCxvPXQubGVuZ3RoO3I8bztyKz0xKW4ucHVzaCh0W3JdLGVbcisxXSk7cmV0dXJuIG59LFI9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0sUD1mdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9LEk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxBPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LFQ9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX0sSD1mdW5jdGlvbihlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hdHx8XCJvYmplY3RcIiE9dHlwZW9mIHQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQ/ZTp0fSxCPWZ1bmN0aW9uKGUpe3JldHVyblwib2JqZWN0XCI9PT0odm9pZCAwPT09ZT9cInVuZGVmaW5lZFwiOlIoZSkpJiZlLmNvbnN0cnVjdG9yPT09T2JqZWN0fSxWPU9iamVjdC5mcmVlemUoW10pLEQ9T2JqZWN0LmZyZWV6ZSh7fSk7ZnVuY3Rpb24gWihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlfWZ1bmN0aW9uICQoZSl7cmV0dXJuIGUuZGlzcGxheU5hbWV8fGUubmFtZXx8XCJDb21wb25lbnRcIn1mdW5jdGlvbiBOKGUpe3JldHVybiBlJiZcInN0cmluZ1wiPT10eXBlb2YgZS5zdHlsZWRDb21wb25lbnRJZH12YXIgRj1cInVuZGVmaW5lZFwiIT10eXBlb2YgcHJvY2VzcyYmKHByb2Nlc3MuZW52LlJFQUNUX0FQUF9TQ19BVFRSfHxwcm9jZXNzLmVudi5TQ19BVFRSKXx8XCJkYXRhLXN0eWxlZFwiLFU9XCJkYXRhLXN0eWxlZC12ZXJzaW9uXCIsVz1cImRhdGEtc3R5bGVkLXN0cmVhbWVkXCIsej1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZcIkhUTUxFbGVtZW50XCJpbiB3aW5kb3csRz1cImJvb2xlYW5cIj09dHlwZW9mIFNDX0RJU0FCTEVfU1BFRURZJiZTQ19ESVNBQkxFX1NQRUVEWXx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHByb2Nlc3MmJihwcm9jZXNzLmVudi5SRUFDVF9BUFBfU0NfRElTQUJMRV9TUEVFRFl8fHByb2Nlc3MuZW52LlNDX0RJU0FCTEVfU1BFRURZKXx8ITEscT17fTt2YXIgWT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe1AodGhpcyx0KTtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxvPUFycmF5KHI+MT9yLTE6MCksaT0xO2k8cjtpKyspb1tpLTFdPWFyZ3VtZW50c1tpXTt2YXIgYT1IKHRoaXMsZS5jYWxsKHRoaXMsXCJBbiBlcnJvciBvY2N1cnJlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdHlsZWQtY29tcG9uZW50cy9zdHlsZWQtY29tcG9uZW50cy9ibG9iL21hc3Rlci9wYWNrYWdlcy9zdHlsZWQtY29tcG9uZW50cy9zcmMvdXRpbHMvZXJyb3JzLm1kI1wiK24rXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIrKG8ubGVuZ3RoPjA/XCIgQWRkaXRpb25hbCBhcmd1bWVudHM6IFwiK28uam9pbihcIiwgXCIpOlwiXCIpKSk7cmV0dXJuIEgoYSl9cmV0dXJuIFQodCxlKSx0fShFcnJvciksSz0vXlteXFxTXFxuXSo/XFwvXFwqIHNjLWNvbXBvbmVudC1pZDpcXHMqKFxcUyspXFxzK1xcKlxcLy9nbSxYPWZ1bmN0aW9uKGUpe3ZhciB0PVwiXCIrKGV8fFwiXCIpLG49W107cmV0dXJuIHQucmVwbGFjZShLLChmdW5jdGlvbihlLHQscil7cmV0dXJuIG4ucHVzaCh7Y29tcG9uZW50SWQ6dCxtYXRjaEluZGV4OnJ9KSxlfSkpLG4ubWFwKChmdW5jdGlvbihlLHIpe3ZhciBvPWUuY29tcG9uZW50SWQsaT1lLm1hdGNoSW5kZXgsYT1uW3IrMV07cmV0dXJue2NvbXBvbmVudElkOm8sY3NzRnJvbURPTTphP3Quc2xpY2UoaSxhLm1hdGNoSW5kZXgpOnQuc2xpY2UoaSl9fSkpfSxKPS9eXFxzKlxcL1xcLy4qJC9nbSxRPW5ldyhvKCkpKHtnbG9iYWw6ITEsY2FzY2FkZTohMCxrZXlmcmFtZTohMSxwcmVmaXg6ITEsY29tcHJlc3M6ITEsc2VtaWNvbG9uOiEwfSksZWU9bmV3KG8oKSkoe2dsb2JhbDohMSxjYXNjYWRlOiEwLGtleWZyYW1lOiExLHByZWZpeDohMCxjb21wcmVzczohMSxzZW1pY29sb246ITF9KSx0ZT1bXSxuZT1mdW5jdGlvbihlKXtpZigtMj09PWUpe3ZhciB0PXRlO3JldHVybiB0ZT1bXSx0fX0scmU9YSgpKChmdW5jdGlvbihlKXt0ZS5wdXNoKGUpfSkpLG9lPXZvaWQgMCxpZT12b2lkIDAsYWU9dm9pZCAwLGxlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD4wJiYtMSE9PW4uc2xpY2UoMCx0KS5pbmRleE9mKGllKSYmbi5zbGljZSh0LWllLmxlbmd0aCx0KSE9PWllP1wiLlwiK29lOmV9O2VlLnVzZShbZnVuY3Rpb24oZSx0LG4pezI9PT1lJiZuLmxlbmd0aCYmblswXS5sYXN0SW5kZXhPZihpZSk+MCYmKG5bMF09blswXS5yZXBsYWNlKGFlLGxlKSl9LHJlLG5lXSksUS51c2UoW3JlLG5lXSk7dmFyIHNlPWZ1bmN0aW9uKGUpe3JldHVybiBRKFwiXCIsZSl9O2Z1bmN0aW9uIGNlKGUsdCxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106XCImXCIsbz1lLmpvaW4oXCJcIikucmVwbGFjZShKLFwiXCIpLGk9dCYmbj9uK1wiIFwiK3QrXCIgeyBcIitvK1wiIH1cIjpvO3JldHVybiBvZT1yLGllPXQsYWU9bmV3IFJlZ0V4cChcIlxcXFxcIitpZStcIlxcXFxiXCIsXCJnXCIpLGVlKG58fCF0P1wiXCI6dCxpKX12YXIgdWU9ZnVuY3Rpb24oKXtyZXR1cm4gbi5uY30sZmU9ZnVuY3Rpb24oZSx0LG4pe24mJigoZVt0XXx8KGVbdF09T2JqZWN0LmNyZWF0ZShudWxsKSkpW25dPSEwKX0sZGU9ZnVuY3Rpb24oZSx0KXtlW3RdPU9iamVjdC5jcmVhdGUobnVsbCl9LHBlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiB2b2lkIDAhPT1lW3RdJiZlW3RdW25dfX0saGU9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIjtmb3IodmFyIG4gaW4gZSl0Kz1PYmplY3Qua2V5cyhlW25dKS5qb2luKFwiIFwiKStcIiBcIjtyZXR1cm4gdC50cmltKCl9LGdlPWZ1bmN0aW9uKGUpe2lmKGUuc2hlZXQpcmV0dXJuIGUuc2hlZXQ7Zm9yKHZhciB0PWUub3duZXJEb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGgsbj0wO248dDtuKz0xKXt2YXIgcj1lLm93bmVyRG9jdW1lbnQuc3R5bGVTaGVldHNbbl07aWYoci5vd25lck5vZGU9PT1lKXJldHVybiByfXRocm93IG5ldyBZKDEwKX0sdmU9ZnVuY3Rpb24oZSx0LG4pe2lmKCF0KXJldHVybiExO3ZhciByPWUuY3NzUnVsZXMubGVuZ3RoO3RyeXtlLmluc2VydFJ1bGUodCxuPD1yP246cil9Y2F0Y2goZSl7cmV0dXJuITF9cmV0dXJuITB9LG1lPWZ1bmN0aW9uKGUpe3JldHVyblwiXFxuLyogc2MtY29tcG9uZW50LWlkOiBcIitlK1wiICovXFxuXCJ9LENlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj0wO3I8PXQ7cis9MSluKz1lW3JdO3JldHVybiBufSx5ZT1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj11ZSgpO3JldHVyblwiPHN0eWxlIFwiK1tyJiYnbm9uY2U9XCInK3IrJ1wiJyxGKyc9XCInK2hlKHQpKydcIicsVSsnPVwiNC40LjFcIicsbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpK1wiPlwiK2UoKStcIjwvc3R5bGU+XCJ9fSx3ZT1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuLHI9KChuPXt9KVtGXT1oZSh0KSxuW1VdPVwiNC40LjFcIixuKSxvPXVlKCk7cmV0dXJuIG8mJihyLm5vbmNlPW8pLGwuY3JlYXRlRWxlbWVudChcInN0eWxlXCIsQSh7fSxyLHtkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOmUoKX19KSl9fSxiZT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoZSl9fSx4ZT1mdW5jdGlvbihlLHQpe3JldHVybiBlLmNyZWF0ZVRleHROb2RlKG1lKHQpKX0sX2U9ZnVuY3Rpb24gZSh0LG4pe3ZhciByPXZvaWQgMD09PXQ/T2JqZWN0LmNyZWF0ZShudWxsKTp0LG89dm9pZCAwPT09bj9PYmplY3QuY3JlYXRlKG51bGwpOm4saT1mdW5jdGlvbihlKXt2YXIgdD1vW2VdO3JldHVybiB2b2lkIDAhPT10P3Q6b1tlXT1bXCJcIl19LGE9ZnVuY3Rpb24oKXt2YXIgZT1cIlwiO2Zvcih2YXIgdCBpbiBvKXt2YXIgbj1vW3RdWzBdO24mJihlKz1tZSh0KStuKX1yZXR1cm4gZX0sbD17Y2xvbmU6ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgbiBpbiBlKXRbbl09QSh7fSxlW25dKTtyZXR1cm4gdH0ociksbj1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgaSBpbiBvKW5baV09W29baV1bMF1dO3JldHVybiBlKHQsbil9LGNzczphLGdldElkczpiZShvKSxoYXNOYW1lRm9ySWQ6cGUociksaW5zZXJ0TWFya2VyOmksaW5zZXJ0UnVsZXM6ZnVuY3Rpb24oZSx0LG4pe2koZSlbMF0rPXQuam9pbihcIiBcIiksZmUocixlLG4pfSxyZW1vdmVSdWxlczpmdW5jdGlvbihlKXt2YXIgdD1vW2VdO3ZvaWQgMCE9PXQmJih0WzBdPVwiXCIsZGUocixlKSl9LHNlYWxlZDohMSxzdHlsZVRhZzpudWxsLHRvRWxlbWVudDp3ZShhLHIpLHRvSFRNTDp5ZShhLHIpfTtyZXR1cm4gbH0sT2U9ZnVuY3Rpb24oZSx0LG4scixvKXtpZih6JiYhbil7dmFyIGk9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWRvY3VtZW50O2U/cj1lLm93bmVyRG9jdW1lbnQ6dCYmKHI9dC5vd25lckRvY3VtZW50KTt2YXIgbz1yLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtvLnNldEF0dHJpYnV0ZShGLFwiXCIpLG8uc2V0QXR0cmlidXRlKFUsXCI0LjQuMVwiKTt2YXIgaT11ZSgpO2lmKGkmJm8uc2V0QXR0cmlidXRlKFwibm9uY2VcIixpKSxvLmFwcGVuZENoaWxkKHIuY3JlYXRlVGV4dE5vZGUoXCJcIikpLGUmJiF0KWUuYXBwZW5kQ2hpbGQobyk7ZWxzZXtpZighdHx8IWV8fCF0LnBhcmVudE5vZGUpdGhyb3cgbmV3IFkoNik7dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLG4/dDp0Lm5leHRTaWJsaW5nKX1yZXR1cm4gb30oZSx0LHIpO3JldHVybiBHP2Z1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPU9iamVjdC5jcmVhdGUobnVsbCksbz12b2lkIDAhPT10LGk9ITEsYT1mdW5jdGlvbih0KXt2YXIgbz1yW3RdO3JldHVybiB2b2lkIDAhPT1vP286KHJbdF09eGUoZS5vd25lckRvY3VtZW50LHQpLGUuYXBwZW5kQ2hpbGQoclt0XSksblt0XT1PYmplY3QuY3JlYXRlKG51bGwpLHJbdF0pfSxsPWZ1bmN0aW9uKCl7dmFyIGU9XCJcIjtmb3IodmFyIHQgaW4gcillKz1yW3RdLmRhdGE7cmV0dXJuIGV9O3JldHVybntjbG9uZTpmdW5jdGlvbigpe3Rocm93IG5ldyBZKDUpfSxjc3M6bCxnZXRJZHM6YmUociksaGFzTmFtZUZvcklkOnBlKG4pLGluc2VydE1hcmtlcjphLGluc2VydFJ1bGVzOmZ1bmN0aW9uKGUscixsKXtmb3IodmFyIHM9YShlKSxjPVtdLHU9ci5sZW5ndGgsZj0wO2Y8dTtmKz0xKXt2YXIgZD1yW2ZdLHA9bztpZihwJiYtMSE9PWQuaW5kZXhPZihcIkBpbXBvcnRcIikpYy5wdXNoKGQpO2Vsc2V7cD0hMTt2YXIgaD1mPT09dS0xP1wiXCI6XCIgXCI7cy5hcHBlbmREYXRhKFwiXCIrZCtoKX19ZmUobixlLGwpLG8mJmMubGVuZ3RoPjAmJihpPSEwLHQoKS5pbnNlcnRSdWxlcyhlK1wiLWltcG9ydFwiLGMpKX0scmVtb3ZlUnVsZXM6ZnVuY3Rpb24oYSl7dmFyIGw9clthXTtpZih2b2lkIDAhPT1sKXt2YXIgcz14ZShlLm93bmVyRG9jdW1lbnQsYSk7ZS5yZXBsYWNlQ2hpbGQocyxsKSxyW2FdPXMsZGUobixhKSxvJiZpJiZ0KCkucmVtb3ZlUnVsZXMoYStcIi1pbXBvcnRcIil9fSxzZWFsZWQ6ITEsc3R5bGVUYWc6ZSx0b0VsZW1lbnQ6d2UobCxuKSx0b0hUTUw6eWUobCxuKX19KGksbyk6ZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxvPVtdLGk9dm9pZCAwIT09dCxhPSExLGw9ZnVuY3Rpb24oZSl7dmFyIHQ9cltlXTtyZXR1cm4gdm9pZCAwIT09dD90OihyW2VdPW8ubGVuZ3RoLG8ucHVzaCgwKSxkZShuLGUpLHJbZV0pfSxzPWZ1bmN0aW9uKCl7dmFyIHQ9Z2UoZSkuY3NzUnVsZXMsbj1cIlwiO2Zvcih2YXIgaSBpbiByKXtuKz1tZShpKTtmb3IodmFyIGE9cltpXSxsPUNlKG8sYSkscz1sLW9bYV07czxsO3MrPTEpe3ZhciBjPXRbc107dm9pZCAwIT09YyYmKG4rPWMuY3NzVGV4dCl9fXJldHVybiBufTtyZXR1cm57Y2xvbmU6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgWSg1KX0sY3NzOnMsZ2V0SWRzOmJlKHIpLGhhc05hbWVGb3JJZDpwZShuKSxpbnNlcnRNYXJrZXI6bCxpbnNlcnRSdWxlczpmdW5jdGlvbihyLHMsYyl7Zm9yKHZhciB1PWwociksZj1nZShlKSxkPUNlKG8sdSkscD0wLGg9W10sZz1zLmxlbmd0aCx2PTA7djxnO3YrPTEpe3ZhciBtPXNbdl0sQz1pO0MmJi0xIT09bS5pbmRleE9mKFwiQGltcG9ydFwiKT9oLnB1c2gobSk6dmUoZixtLGQrcCkmJihDPSExLHArPTEpfWkmJmgubGVuZ3RoPjAmJihhPSEwLHQoKS5pbnNlcnRSdWxlcyhyK1wiLWltcG9ydFwiLGgpKSxvW3VdKz1wLGZlKG4scixjKX0scmVtb3ZlUnVsZXM6ZnVuY3Rpb24obCl7dmFyIHM9cltsXTtpZih2b2lkIDAhPT1zJiYhMSE9PWUuaXNDb25uZWN0ZWQpe3ZhciBjPW9bc107IWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9dC1uLG89dDtvPnI7by09MSllLmRlbGV0ZVJ1bGUobyl9KGdlKGUpLENlKG8scyktMSxjKSxvW3NdPTAsZGUobixsKSxpJiZhJiZ0KCkucmVtb3ZlUnVsZXMobCtcIi1pbXBvcnRcIil9fSxzZWFsZWQ6ITEsc3R5bGVUYWc6ZSx0b0VsZW1lbnQ6d2UocyxuKSx0b0hUTUw6eWUocyxuKX19KGksbyl9cmV0dXJuIF9lKCl9LExlPS9cXHMrLyxFZT12b2lkIDA7RWU9ej9HPzQwOjFlMzotMTt2YXIgU2U9MCxqZT12b2lkIDAsTWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp6P2RvY3VtZW50LmhlYWQ6bnVsbCxyPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07UCh0aGlzLGUpLHRoaXMuZ2V0SW1wb3J0UnVsZVRhZz1mdW5jdGlvbigpe3ZhciBlPXQuaW1wb3J0UnVsZVRhZztpZih2b2lkIDAhPT1lKXJldHVybiBlO3ZhciBuPXQudGFnc1swXTtyZXR1cm4gdC5pbXBvcnRSdWxlVGFnPU9lKHQudGFyZ2V0LG4/bi5zdHlsZVRhZzpudWxsLHQuZm9yY2VTZXJ2ZXIsITApfSxTZSs9MSx0aGlzLmlkPVNlLHRoaXMuZm9yY2VTZXJ2ZXI9cix0aGlzLnRhcmdldD1yP251bGw6bix0aGlzLnRhZ01hcD17fSx0aGlzLmRlZmVycmVkPXt9LHRoaXMucmVoeWRyYXRlZE5hbWVzPXt9LHRoaXMuaWdub3JlUmVoeWRyYXRlZE5hbWVzPXt9LHRoaXMudGFncz1bXSx0aGlzLmNhcGFjaXR5PTEsdGhpcy5jbG9uZXM9W119cmV0dXJuIGUucHJvdG90eXBlLnJlaHlkcmF0ZT1mdW5jdGlvbigpe2lmKCF6fHx0aGlzLmZvcmNlU2VydmVyKXJldHVybiB0aGlzO3ZhciBlPVtdLHQ9W10sbj0hMSxyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtcIitGK1wiXVtcIitVKyc9XCI0LjQuMVwiXScpLG89ci5sZW5ndGg7aWYoIW8pcmV0dXJuIHRoaXM7Zm9yKHZhciBpPTA7aTxvO2krPTEpe3ZhciBhPXJbaV07bnx8KG49ISFhLmdldEF0dHJpYnV0ZShXKSk7Zm9yKHZhciBsLHM9KGEuZ2V0QXR0cmlidXRlKEYpfHxcIlwiKS50cmltKCkuc3BsaXQoTGUpLGM9cy5sZW5ndGgsdT0wO3U8Yzt1Kz0xKWw9c1t1XSx0aGlzLnJlaHlkcmF0ZWROYW1lc1tsXT0hMDt0LnB1c2guYXBwbHkodCxYKGEudGV4dENvbnRlbnQpKSxlLnB1c2goYSl9dmFyIGY9dC5sZW5ndGg7aWYoIWYpcmV0dXJuIHRoaXM7dmFyIGQ9dGhpcy5tYWtlVGFnKG51bGwpOyFmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsbz1uLmxlbmd0aDtyPG87cis9MSl7dmFyIGk9bltyXSxhPWkuY29tcG9uZW50SWQsbD1pLmNzc0Zyb21ET00scz1zZShsKTtlLmluc2VydFJ1bGVzKGEscyl9Zm9yKHZhciBjPTAsdT10Lmxlbmd0aDtjPHU7Yys9MSl7dmFyIGY9dFtjXTtmLnBhcmVudE5vZGUmJmYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmKX19KGQsZSx0KSx0aGlzLmNhcGFjaXR5PU1hdGgubWF4KDEsRWUtZiksdGhpcy50YWdzLnB1c2goZCk7Zm9yKHZhciBwPTA7cDxmO3ArPTEpdGhpcy50YWdNYXBbdFtwXS5jb21wb25lbnRJZF09ZDtyZXR1cm4gdGhpc30sZS5yZXNldD1mdW5jdGlvbigpe2plPW5ldyBlKHZvaWQgMCxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKS5yZWh5ZHJhdGUoKX0sZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZSh0aGlzLnRhcmdldCx0aGlzLmZvcmNlU2VydmVyKTtyZXR1cm4gdGhpcy5jbG9uZXMucHVzaCh0KSx0LnRhZ3M9dGhpcy50YWdzLm1hcCgoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPWUuZ2V0SWRzKCkscj1lLmNsb25lKCksbz0wO288bi5sZW5ndGg7bys9MSl0LnRhZ01hcFtuW29dXT1yO3JldHVybiByfSkpLHQucmVoeWRyYXRlZE5hbWVzPUEoe30sdGhpcy5yZWh5ZHJhdGVkTmFtZXMpLHQuZGVmZXJyZWQ9QSh7fSx0aGlzLmRlZmVycmVkKSx0fSxlLnByb3RvdHlwZS5zZWFsQWxsVGFncz1mdW5jdGlvbigpe3RoaXMuY2FwYWNpdHk9MSx0aGlzLnRhZ3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5zZWFsZWQ9ITB9KSl9LGUucHJvdG90eXBlLm1ha2VUYWc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZT9lLnN0eWxlVGFnOm51bGw7cmV0dXJuIE9lKHRoaXMudGFyZ2V0LHQsdGhpcy5mb3JjZVNlcnZlciwhMSx0aGlzLmdldEltcG9ydFJ1bGVUYWcpfSxlLnByb3RvdHlwZS5nZXRUYWdGb3JJZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnRhZ01hcFtlXTtpZih2b2lkIDAhPT10JiYhdC5zZWFsZWQpcmV0dXJuIHQ7dmFyIG49dGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGgtMV07cmV0dXJuIHRoaXMuY2FwYWNpdHktPTEsMD09PXRoaXMuY2FwYWNpdHkmJih0aGlzLmNhcGFjaXR5PUVlLG49dGhpcy5tYWtlVGFnKG4pLHRoaXMudGFncy5wdXNoKG4pKSx0aGlzLnRhZ01hcFtlXT1ufSxlLnByb3RvdHlwZS5oYXNJZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy50YWdNYXBbZV19LGUucHJvdG90eXBlLmhhc05hbWVGb3JJZD1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXRoaXMuaWdub3JlUmVoeWRyYXRlZE5hbWVzW2VdJiZ0aGlzLnJlaHlkcmF0ZWROYW1lc1t0XSlyZXR1cm4hMDt2YXIgbj10aGlzLnRhZ01hcFtlXTtyZXR1cm4gdm9pZCAwIT09biYmbi5oYXNOYW1lRm9ySWQoZSx0KX0sZS5wcm90b3R5cGUuZGVmZXJyZWRJbmplY3Q9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10aGlzLnRhZ01hcFtlXSl7Zm9yKHZhciBuPXRoaXMuY2xvbmVzLHI9MDtyPG4ubGVuZ3RoO3IrPTEpbltyXS5kZWZlcnJlZEluamVjdChlLHQpO3RoaXMuZ2V0VGFnRm9ySWQoZSkuaW5zZXJ0TWFya2VyKGUpLHRoaXMuZGVmZXJyZWRbZV09dH19LGUucHJvdG90eXBlLmluamVjdD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPXRoaXMuY2xvbmVzLG89MDtvPHIubGVuZ3RoO28rPTEpcltvXS5pbmplY3QoZSx0LG4pO3ZhciBpPXRoaXMuZ2V0VGFnRm9ySWQoZSk7aWYodm9pZCAwIT09dGhpcy5kZWZlcnJlZFtlXSl7dmFyIGE9dGhpcy5kZWZlcnJlZFtlXS5jb25jYXQodCk7aS5pbnNlcnRSdWxlcyhlLGEsbiksdGhpcy5kZWZlcnJlZFtlXT12b2lkIDB9ZWxzZSBpLmluc2VydFJ1bGVzKGUsdCxuKX0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudGFnTWFwW2VdO2lmKHZvaWQgMCE9PXQpe2Zvcih2YXIgbj10aGlzLmNsb25lcyxyPTA7cjxuLmxlbmd0aDtyKz0xKW5bcl0ucmVtb3ZlKGUpO3QucmVtb3ZlUnVsZXMoZSksdGhpcy5pZ25vcmVSZWh5ZHJhdGVkTmFtZXNbZV09ITAsdGhpcy5kZWZlcnJlZFtlXT12b2lkIDB9fSxlLnByb3RvdHlwZS50b0hUTUw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YWdzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9IVE1MKCl9KSkuam9pbihcIlwiKX0sZS5wcm90b3R5cGUudG9SZWFjdEVsZW1lbnRzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5pZDtyZXR1cm4gdGhpcy50YWdzLm1hcCgoZnVuY3Rpb24odCxuKXt2YXIgcj1cInNjLVwiK2UrXCItXCIrbjtyZXR1cm4oMCxsLmNsb25lRWxlbWVudCkodC50b0VsZW1lbnQoKSx7a2V5OnJ9KX0pKX0sSShlLG51bGwsW3trZXk6XCJtYXN0ZXJcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gamV8fChqZT0obmV3IGUpLnJlaHlkcmF0ZSgpKX19LHtrZXk6XCJpbnN0YW5jZVwiLGdldDpmdW5jdGlvbigpe3JldHVybiBlLm1hc3Rlcn19XSksZX0oKSxrZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXt2YXIgcj10aGlzO1AodGhpcyxlKSx0aGlzLmluamVjdD1mdW5jdGlvbihlKXtlLmhhc05hbWVGb3JJZChyLmlkLHIubmFtZSl8fGUuaW5qZWN0KHIuaWQsci5ydWxlcyxyLm5hbWUpfSx0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IFkoMTIsU3RyaW5nKHIubmFtZSkpfSx0aGlzLm5hbWU9dCx0aGlzLnJ1bGVzPW4sdGhpcy5pZD1cInNjLWtleWZyYW1lcy1cIit0fXJldHVybiBlLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZX0sZX0oKSxSZT0vKFtBLVpdKS9nLFBlPS9ebXMtLztmdW5jdGlvbiBJZShlKXtyZXR1cm4gZS5yZXBsYWNlKFJlLFwiLSQxXCIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShQZSxcIi1tcy1cIil9dmFyIEFlPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfHwhMT09PWV8fFwiXCI9PT1lfSxUZT1mdW5jdGlvbiBlKHQsbil7dmFyIHI9W107cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe2lmKCFBZSh0W25dKSl7aWYoQih0W25dKSlyZXR1cm4gci5wdXNoLmFwcGx5KHIsZSh0W25dLG4pKSxyO2lmKFoodFtuXSkpcmV0dXJuIHIucHVzaChJZShuKStcIjpcIix0W25dLFwiO1wiKSxyO3IucHVzaChJZShuKStcIjogXCIrKG89biwobnVsbD09KGk9dFtuXSl8fFwiYm9vbGVhblwiPT10eXBlb2YgaXx8XCJcIj09PWk/XCJcIjpcIm51bWJlclwiIT10eXBlb2YgaXx8MD09PWl8fG8gaW4gcz9TdHJpbmcoaSkudHJpbSgpOmkrXCJweFwiKStcIjtcIikpfXZhciBvLGk7cmV0dXJuIHJ9KSksbj9bbitcIiB7XCJdLmNvbmNhdChyLFtcIn1cIl0pOnJ9O2Z1bmN0aW9uIEhlKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHIsbz1bXSxpPTAsYT1lLmxlbmd0aDtpPGE7aSs9MSludWxsIT09KHI9SGUoZVtpXSx0LG4pKSYmKEFycmF5LmlzQXJyYXkocik/by5wdXNoLmFwcGx5KG8scik6by5wdXNoKHIpKTtyZXR1cm4gb31yZXR1cm4gQWUoZSk/bnVsbDpOKGUpP1wiLlwiK2Uuc3R5bGVkQ29tcG9uZW50SWQ6WihlKT9cImZ1bmN0aW9uXCIhPXR5cGVvZihsPWUpfHxsLnByb3RvdHlwZSYmbC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudHx8IXQ/ZTpIZShlKHQpLHQsbik6ZSBpbnN0YW5jZW9mIGtlP24/KGUuaW5qZWN0KG4pLGUuZ2V0TmFtZSgpKTplOkIoZSk/VGUoZSk6ZS50b1N0cmluZygpO3ZhciBsfWZ1bmN0aW9uIEJlKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3JldHVybiBaKGUpfHxCKGUpP0hlKGsoVixbZV0uY29uY2F0KG4pKSk6SGUoayhlLG4pKX1mdW5jdGlvbiBWZShlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpEO2lmKCEoMCxjLmlzVmFsaWRFbGVtZW50VHlwZSkodCkpdGhyb3cgbmV3IFkoMSxTdHJpbmcodCkpO3ZhciByPWZ1bmN0aW9uKCl7cmV0dXJuIGUodCxuLEJlLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX07cmV0dXJuIHIud2l0aENvbmZpZz1mdW5jdGlvbihyKXtyZXR1cm4gVmUoZSx0LEEoe30sbixyKSl9LHIuYXR0cnM9ZnVuY3Rpb24ocil7cmV0dXJuIFZlKGUsdCxBKHt9LG4se2F0dHJzOkFycmF5LnByb3RvdHlwZS5jb25jYXQobi5hdHRycyxyKS5maWx0ZXIoQm9vbGVhbil9KSl9LHJ9ZnVuY3Rpb24gRGUoZSl7Zm9yKHZhciB0LG49MHxlLmxlbmd0aCxyPTB8bixvPTA7bj49NDspdD0xNTQwNDgzNDc3Kig2NTUzNSYodD0yNTUmZS5jaGFyQ29kZUF0KG8pfCgyNTUmZS5jaGFyQ29kZUF0KCsrbykpPDw4fCgyNTUmZS5jaGFyQ29kZUF0KCsrbykpPDwxNnwoMjU1JmUuY2hhckNvZGVBdCgrK28pKTw8MjQpKSsoKDE1NDA0ODM0NzcqKHQ+Pj4xNikmNjU1MzUpPDwxNikscj0xNTQwNDgzNDc3Kig2NTUzNSZyKSsoKDE1NDA0ODM0NzcqKHI+Pj4xNikmNjU1MzUpPDwxNileKHQ9MTU0MDQ4MzQ3NyooNjU1MzUmKHRePXQ+Pj4yNCkpKygoMTU0MDQ4MzQ3NyoodD4+PjE2KSY2NTUzNSk8PDE2KSksbi09NCwrK287c3dpdGNoKG4pe2Nhc2UgMzpyXj0oMjU1JmUuY2hhckNvZGVBdChvKzIpKTw8MTY7Y2FzZSAyOnJePSgyNTUmZS5jaGFyQ29kZUF0KG8rMSkpPDw4O2Nhc2UgMTpyPTE1NDA0ODM0NzcqKDY1NTM1JihyXj0yNTUmZS5jaGFyQ29kZUF0KG8pKSkrKCgxNTQwNDgzNDc3KihyPj4+MTYpJjY1NTM1KTw8MTYpfXJldHVybigocj0xNTQwNDgzNDc3Kig2NTUzNSYocl49cj4+PjEzKSkrKCgxNTQwNDgzNDc3KihyPj4+MTYpJjY1NTM1KTw8MTYpKV5yPj4+MTUpPj4+MH12YXIgWmU9NTIsJGU9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZSsoZT4yNT8zOTo5NykpfTtmdW5jdGlvbiBOZShlKXt2YXIgdD1cIlwiLG49dm9pZCAwO2ZvcihuPWU7bj5aZTtuPU1hdGguZmxvb3Iobi9aZSkpdD0kZShuJVplKSt0O3JldHVybiAkZShuJVplKSt0fWZ1bmN0aW9uIEZlKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKz0xKXt2YXIgcj1lW25dO2lmKEFycmF5LmlzQXJyYXkocikmJiFGZShyLHQpKXJldHVybiExO2lmKFoocikmJiFOKHIpKXJldHVybiExfXJldHVybiF0LnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBaKGUpfHxmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSlpZihaKGVbdF0pKXJldHVybiEwO3JldHVybiExfShlKX0pKX12YXIgVWUsV2U9ZnVuY3Rpb24oZSl7cmV0dXJuIE5lKERlKGUpKX0semU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbixyKXtQKHRoaXMsZSksdGhpcy5ydWxlcz10LHRoaXMuaXNTdGF0aWM9RmUodCxuKSx0aGlzLmNvbXBvbmVudElkPXIsTWUubWFzdGVyLmhhc0lkKHIpfHxNZS5tYXN0ZXIuZGVmZXJyZWRJbmplY3QocixbXSl9cmV0dXJuIGUucHJvdG90eXBlLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5pc1N0YXRpYyxyPXRoaXMuY29tcG9uZW50SWQsbz10aGlzLmxhc3RDbGFzc05hbWU7aWYoeiYmbiYmXCJzdHJpbmdcIj09dHlwZW9mIG8mJnQuaGFzTmFtZUZvcklkKHIsbykpcmV0dXJuIG87dmFyIGk9SGUodGhpcy5ydWxlcyxlLHQpLGE9V2UodGhpcy5jb21wb25lbnRJZCtpLmpvaW4oXCJcIikpO3JldHVybiB0Lmhhc05hbWVGb3JJZChyLGEpfHx0LmluamVjdCh0aGlzLmNvbXBvbmVudElkLGNlKGksXCIuXCIrYSx2b2lkIDAsciksYSksdGhpcy5sYXN0Q2xhc3NOYW1lPWEsYX0sZS5nZW5lcmF0ZU5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFdlKGUpfSxlfSgpLEdlPWZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOkQscj0hIW4mJmUudGhlbWU9PT1uLnRoZW1lO3JldHVybiBlLnRoZW1lJiYhcj9lLnRoZW1lOnR8fG4udGhlbWV9LHFlPS9bW1xcXS4jKiQ+PCt+PXxeOigpLFwiJ2AtXSsvZyxZZT0vKF4tfC0kKS9nO2Z1bmN0aW9uIEtlKGUpe3JldHVybiBlLnJlcGxhY2UocWUsXCItXCIpLnJlcGxhY2UoWWUsXCJcIil9ZnVuY3Rpb24gWGUoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJiEwfXZhciBKZT17Y2hpbGRDb250ZXh0VHlwZXM6ITAsY29udGV4dFR5cGVzOiEwLGRlZmF1bHRQcm9wczohMCxkaXNwbGF5TmFtZTohMCxnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6ITAscHJvcFR5cGVzOiEwLHR5cGU6ITB9LFFlPXtuYW1lOiEwLGxlbmd0aDohMCxwcm90b3R5cGU6ITAsY2FsbGVyOiEwLGNhbGxlZTohMCxhcmd1bWVudHM6ITAsYXJpdHk6ITB9LGV0PSgoVWU9e30pW2MuRm9yd2FyZFJlZl09eyQkdHlwZW9mOiEwLHJlbmRlcjohMH0sVWUpLHR0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxudD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxydD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLG90PXZvaWQgMD09PXJ0P2Z1bmN0aW9uKCl7cmV0dXJuW119OnJ0LGl0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsYXQ9T2JqZWN0LmdldFByb3RvdHlwZU9mLGx0PU9iamVjdC5wcm90b3R5cGUsc3Q9QXJyYXkucHJvdG90eXBlO2Z1bmN0aW9uIGN0KGUsdCxuKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl7dmFyIHI9YXQodCk7ciYmciE9PWx0JiZjdChlLHIsbik7Zm9yKHZhciBvPXN0LmNvbmNhdChudCh0KSxvdCh0KSksaT1ldFtlLiQkdHlwZW9mXXx8SmUsYT1ldFt0LiQkdHlwZW9mXXx8SmUsbD1vLmxlbmd0aCxzPXZvaWQgMCxjPXZvaWQgMDtsLS07KWlmKGM9b1tsXSwhKFFlW2NdfHxuJiZuW2NdfHxhJiZhW2NdfHxpJiZpW2NdKSYmKHM9aXQodCxjKSkpdHJ5e3R0KGUsYyxzKX1jYXRjaChlKXt9cmV0dXJuIGV9cmV0dXJuIGV9dmFyIHV0PSgwLGwuY3JlYXRlQ29udGV4dCkoKSxmdD11dC5Db25zdW1lcixkdD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe1AodGhpcyx0KTt2YXIgcj1IKHRoaXMsZS5jYWxsKHRoaXMsbikpO3JldHVybiByLmdldENvbnRleHQ9ZChyLmdldENvbnRleHQuYmluZChyKSksci5yZW5kZXJJbm5lcj1yLnJlbmRlcklubmVyLmJpbmQocikscn1yZXR1cm4gVCh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuP2wuY3JlYXRlRWxlbWVudCh1dC5Db25zdW1lcixudWxsLHRoaXMucmVuZGVySW5uZXIpOm51bGx9LHQucHJvdG90eXBlLnJlbmRlcklubmVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0Q29udGV4dCh0aGlzLnByb3BzLnRoZW1lLGUpO3JldHVybiBsLmNyZWF0ZUVsZW1lbnQodXQuUHJvdmlkZXIse3ZhbHVlOnR9LHRoaXMucHJvcHMuY2hpbGRyZW4pfSx0LnByb3RvdHlwZS5nZXRUaGVtZT1mdW5jdGlvbihlLHQpe2lmKFooZSkpcmV0dXJuIGUodCk7aWYobnVsbD09PWV8fEFycmF5LmlzQXJyYXkoZSl8fFwib2JqZWN0XCIhPT0odm9pZCAwPT09ZT9cInVuZGVmaW5lZFwiOlIoZSkpKXRocm93IG5ldyBZKDgpO3JldHVybiBBKHt9LHQsZSl9LHQucHJvdG90eXBlLmdldENvbnRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5nZXRUaGVtZShlLHQpfSx0fShsLkNvbXBvbmVudCkscHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7UCh0aGlzLGUpLHRoaXMubWFzdGVyU2hlZXQ9TWUubWFzdGVyLHRoaXMuaW5zdGFuY2U9dGhpcy5tYXN0ZXJTaGVldC5jbG9uZSgpLHRoaXMuc2VhbGVkPSExfXJldHVybiBlLnByb3RvdHlwZS5zZWFsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc2VhbGVkKXt2YXIgZT10aGlzLm1hc3RlclNoZWV0LmNsb25lcy5pbmRleE9mKHRoaXMuaW5zdGFuY2UpO3RoaXMubWFzdGVyU2hlZXQuY2xvbmVzLnNwbGljZShlLDEpLHRoaXMuc2VhbGVkPSEwfX0sZS5wcm90b3R5cGUuY29sbGVjdFN0eWxlcz1mdW5jdGlvbihlKXtpZih0aGlzLnNlYWxlZCl0aHJvdyBuZXcgWSgyKTtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KHZ0LHtzaGVldDp0aGlzLmluc3RhbmNlfSxlKX0sZS5wcm90b3R5cGUuZ2V0U3R5bGVUYWdzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VhbCgpLHRoaXMuaW5zdGFuY2UudG9IVE1MKCl9LGUucHJvdG90eXBlLmdldFN0eWxlRWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlYWwoKSx0aGlzLmluc3RhbmNlLnRvUmVhY3RFbGVtZW50cygpfSxlLnByb3RvdHlwZS5pbnRlcmxlYXZlV2l0aE5vZGVTdHJlYW09ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IFkoMyl9LGV9KCksaHQ9KDAsbC5jcmVhdGVDb250ZXh0KSgpLGd0PWh0LkNvbnN1bWVyLHZ0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7UCh0aGlzLHQpO3ZhciByPUgodGhpcyxlLmNhbGwodGhpcyxuKSk7cmV0dXJuIHIuZ2V0Q29udGV4dD1kKHIuZ2V0Q29udGV4dCkscn1yZXR1cm4gVCh0LGUpLHQucHJvdG90eXBlLmdldENvbnRleHQ9ZnVuY3Rpb24oZSx0KXtpZihlKXJldHVybiBlO2lmKHQpcmV0dXJuIG5ldyBNZSh0KTt0aHJvdyBuZXcgWSg0KX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2hpbGRyZW4sbj1lLnNoZWV0LHI9ZS50YXJnZXQ7cmV0dXJuIGwuY3JlYXRlRWxlbWVudChodC5Qcm92aWRlcix7dmFsdWU6dGhpcy5nZXRDb250ZXh0KG4scil9LHQpfSx0fShsLkNvbXBvbmVudCksbXQ9e307dmFyIEN0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtQKHRoaXMsdCk7dmFyIG49SCh0aGlzLGUuY2FsbCh0aGlzKSk7cmV0dXJuIG4uYXR0cnM9e30sbi5yZW5kZXJPdXRlcj1uLnJlbmRlck91dGVyLmJpbmQobiksbi5yZW5kZXJJbm5lcj1uLnJlbmRlcklubmVyLmJpbmQobiksbn1yZXR1cm4gVCh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBsLmNyZWF0ZUVsZW1lbnQoZ3QsbnVsbCx0aGlzLnJlbmRlck91dGVyKX0sdC5wcm90b3R5cGUucmVuZGVyT3V0ZXI9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06TWUubWFzdGVyO3JldHVybiB0aGlzLnN0eWxlU2hlZXQ9ZSx0aGlzLnByb3BzLmZvcndhcmRlZENvbXBvbmVudC5jb21wb25lbnRTdHlsZS5pc1N0YXRpYz90aGlzLnJlbmRlcklubmVyKCk6bC5jcmVhdGVFbGVtZW50KGZ0LG51bGwsdGhpcy5yZW5kZXJJbm5lcil9LHQucHJvdG90eXBlLnJlbmRlcklubmVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMuZm9yd2FyZGVkQ29tcG9uZW50LG49dC5jb21wb25lbnRTdHlsZSxyPXQuZGVmYXVsdFByb3BzLG89KHQuZGlzcGxheU5hbWUsdC5mb2xkZWRDb21wb25lbnRJZHMpLGk9dC5zdHlsZWRDb21wb25lbnRJZCxhPXQudGFyZ2V0LHM9dm9pZCAwO3M9bi5pc1N0YXRpYz90aGlzLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKEQsdGhpcy5wcm9wcyk6dGhpcy5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcyhHZSh0aGlzLnByb3BzLGUscil8fEQsdGhpcy5wcm9wcyk7dmFyIGM9dGhpcy5wcm9wcy5hc3x8dGhpcy5hdHRycy5hc3x8YSx1PVhlKGMpLGY9e30sZD1BKHt9LHRoaXMucHJvcHMsdGhpcy5hdHRycykscD12b2lkIDA7Zm9yKHAgaW4gZClcImZvcndhcmRlZENvbXBvbmVudFwiIT09cCYmXCJhc1wiIT09cCYmKFwiZm9yd2FyZGVkUmVmXCI9PT1wP2YucmVmPWRbcF06XCJmb3J3YXJkZWRBc1wiPT09cD9mLmFzPWRbcF06dSYmIWgocCl8fChmW3BdPWRbcF0pKTtyZXR1cm4gdGhpcy5wcm9wcy5zdHlsZSYmdGhpcy5hdHRycy5zdHlsZSYmKGYuc3R5bGU9QSh7fSx0aGlzLmF0dHJzLnN0eWxlLHRoaXMucHJvcHMuc3R5bGUpKSxmLmNsYXNzTmFtZT1BcnJheS5wcm90b3R5cGUuY29uY2F0KG8saSxzIT09aT9zOm51bGwsdGhpcy5wcm9wcy5jbGFzc05hbWUsdGhpcy5hdHRycy5jbGFzc05hbWUpLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSwoMCxsLmNyZWF0ZUVsZW1lbnQpKGMsZil9LHQucHJvdG90eXBlLmJ1aWxkRXhlY3V0aW9uQ29udGV4dD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxvPUEoe30sdCx7dGhlbWU6ZX0pO3JldHVybiBuLmxlbmd0aD8odGhpcy5hdHRycz17fSxuLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0LG49ZSxpPSExLGE9dm9pZCAwLGw9dm9pZCAwO2ZvcihsIGluIFoobikmJihuPW4obyksaT0hMCksbilhPW5bbF0saXx8IVooYSl8fCh0PWEpJiZ0LnByb3RvdHlwZSYmdC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudHx8TihhKXx8KGE9YShvKSksci5hdHRyc1tsXT1hLG9bbF09YX0pKSxvKTpvfSx0LnByb3RvdHlwZS5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcz1mdW5jdGlvbihlLHQpe3ZhciBuPXQuZm9yd2FyZGVkQ29tcG9uZW50LHI9bi5hdHRycyxvPW4uY29tcG9uZW50U3R5bGU7bi53YXJuVG9vTWFueUNsYXNzZXM7cmV0dXJuIG8uaXNTdGF0aWMmJiFyLmxlbmd0aD9vLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKEQsdGhpcy5zdHlsZVNoZWV0KTpvLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKHRoaXMuYnVpbGRFeGVjdXRpb25Db250ZXh0KGUsdCxyKSx0aGlzLnN0eWxlU2hlZXQpfSx0fShsLkNvbXBvbmVudCk7ZnVuY3Rpb24geXQoZSx0LG4pe3ZhciByPU4oZSksbz0hWGUoZSksaT10LmRpc3BsYXlOYW1lLGE9dm9pZCAwPT09aT9mdW5jdGlvbihlKXtyZXR1cm4gWGUoZSk/XCJzdHlsZWQuXCIrZTpcIlN0eWxlZChcIiskKGUpK1wiKVwifShlKTppLHM9dC5jb21wb25lbnRJZCxjPXZvaWQgMD09PXM/ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVwic3RyaW5nXCIhPXR5cGVvZiB0P1wic2NcIjpLZSh0KSxvPShtdFtyXXx8MCkrMTttdFtyXT1vO3ZhciBpPXIrXCItXCIrZS5nZW5lcmF0ZU5hbWUocitvKTtyZXR1cm4gbj9uK1wiLVwiK2k6aX0oemUsdC5kaXNwbGF5TmFtZSx0LnBhcmVudENvbXBvbmVudElkKTpzLHU9dC5QYXJlbnRDb21wb25lbnQsZj12b2lkIDA9PT11P0N0OnUsZD10LmF0dHJzLHA9dm9pZCAwPT09ZD9WOmQsaD10LmRpc3BsYXlOYW1lJiZ0LmNvbXBvbmVudElkP0tlKHQuZGlzcGxheU5hbWUpK1wiLVwiK3QuY29tcG9uZW50SWQ6dC5jb21wb25lbnRJZHx8YyxnPXImJmUuYXR0cnM/QXJyYXkucHJvdG90eXBlLmNvbmNhdChlLmF0dHJzLHApLmZpbHRlcihCb29sZWFuKTpwLHY9bmV3IHplKHI/ZS5jb21wb25lbnRTdHlsZS5ydWxlcy5jb25jYXQobik6bixnLGgpLG09dm9pZCAwLEM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KGYsQSh7fSxlLHtmb3J3YXJkZWRDb21wb25lbnQ6bSxmb3J3YXJkZWRSZWY6dH0pKX07cmV0dXJuIEMuZGlzcGxheU5hbWU9YSwobT1sLmZvcndhcmRSZWYoQykpLmRpc3BsYXlOYW1lPWEsbS5hdHRycz1nLG0uY29tcG9uZW50U3R5bGU9dixtLmZvbGRlZENvbXBvbmVudElkcz1yP0FycmF5LnByb3RvdHlwZS5jb25jYXQoZS5mb2xkZWRDb21wb25lbnRJZHMsZS5zdHlsZWRDb21wb25lbnRJZCk6VixtLnN0eWxlZENvbXBvbmVudElkPWgsbS50YXJnZXQ9cj9lLnRhcmdldDplLG0ud2l0aENvbXBvbmVudD1mdW5jdGlvbihlKXt2YXIgcj10LmNvbXBvbmVudElkLG89ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn0odCxbXCJjb21wb25lbnRJZFwiXSksaT1yJiZyK1wiLVwiKyhYZShlKT9lOktlKCQoZSkpKTtyZXR1cm4geXQoZSxBKHt9LG8se2F0dHJzOmcsY29tcG9uZW50SWQ6aSxQYXJlbnRDb21wb25lbnQ6Zn0pLG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxcImRlZmF1bHRQcm9wc1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9sZGVkRGVmYXVsdFByb3BzfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZm9sZGVkRGVmYXVsdFByb3BzPXI/TShlLmRlZmF1bHRQcm9wcyx0KTp0fX0pLG0udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIi5cIittLnN0eWxlZENvbXBvbmVudElkfSxvJiZjdChtLGUse2F0dHJzOiEwLGNvbXBvbmVudFN0eWxlOiEwLGRpc3BsYXlOYW1lOiEwLGZvbGRlZENvbXBvbmVudElkczohMCxzdHlsZWRDb21wb25lbnRJZDohMCx0YXJnZXQ6ITAsd2l0aENvbXBvbmVudDohMH0pLG19dmFyIHd0PWZ1bmN0aW9uKGUpe3JldHVybiBWZSh5dCxlKX07W1wiYVwiLFwiYWJiclwiLFwiYWRkcmVzc1wiLFwiYXJlYVwiLFwiYXJ0aWNsZVwiLFwiYXNpZGVcIixcImF1ZGlvXCIsXCJiXCIsXCJiYXNlXCIsXCJiZGlcIixcImJkb1wiLFwiYmlnXCIsXCJibG9ja3F1b3RlXCIsXCJib2R5XCIsXCJiclwiLFwiYnV0dG9uXCIsXCJjYW52YXNcIixcImNhcHRpb25cIixcImNpdGVcIixcImNvZGVcIixcImNvbFwiLFwiY29sZ3JvdXBcIixcImRhdGFcIixcImRhdGFsaXN0XCIsXCJkZFwiLFwiZGVsXCIsXCJkZXRhaWxzXCIsXCJkZm5cIixcImRpYWxvZ1wiLFwiZGl2XCIsXCJkbFwiLFwiZHRcIixcImVtXCIsXCJlbWJlZFwiLFwiZmllbGRzZXRcIixcImZpZ2NhcHRpb25cIixcImZpZ3VyZVwiLFwiZm9vdGVyXCIsXCJmb3JtXCIsXCJoMVwiLFwiaDJcIixcImgzXCIsXCJoNFwiLFwiaDVcIixcImg2XCIsXCJoZWFkXCIsXCJoZWFkZXJcIixcImhncm91cFwiLFwiaHJcIixcImh0bWxcIixcImlcIixcImlmcmFtZVwiLFwiaW1nXCIsXCJpbnB1dFwiLFwiaW5zXCIsXCJrYmRcIixcImtleWdlblwiLFwibGFiZWxcIixcImxlZ2VuZFwiLFwibGlcIixcImxpbmtcIixcIm1haW5cIixcIm1hcFwiLFwibWFya1wiLFwibWFycXVlZVwiLFwibWVudVwiLFwibWVudWl0ZW1cIixcIm1ldGFcIixcIm1ldGVyXCIsXCJuYXZcIixcIm5vc2NyaXB0XCIsXCJvYmplY3RcIixcIm9sXCIsXCJvcHRncm91cFwiLFwib3B0aW9uXCIsXCJvdXRwdXRcIixcInBcIixcInBhcmFtXCIsXCJwaWN0dXJlXCIsXCJwcmVcIixcInByb2dyZXNzXCIsXCJxXCIsXCJycFwiLFwicnRcIixcInJ1YnlcIixcInNcIixcInNhbXBcIixcInNjcmlwdFwiLFwic2VjdGlvblwiLFwic2VsZWN0XCIsXCJzbWFsbFwiLFwic291cmNlXCIsXCJzcGFuXCIsXCJzdHJvbmdcIixcInN0eWxlXCIsXCJzdWJcIixcInN1bW1hcnlcIixcInN1cFwiLFwidGFibGVcIixcInRib2R5XCIsXCJ0ZFwiLFwidGV4dGFyZWFcIixcInRmb290XCIsXCJ0aFwiLFwidGhlYWRcIixcInRpbWVcIixcInRpdGxlXCIsXCJ0clwiLFwidHJhY2tcIixcInVcIixcInVsXCIsXCJ2YXJcIixcInZpZGVvXCIsXCJ3YnJcIixcImNpcmNsZVwiLFwiY2xpcFBhdGhcIixcImRlZnNcIixcImVsbGlwc2VcIixcImZvcmVpZ25PYmplY3RcIixcImdcIixcImltYWdlXCIsXCJsaW5lXCIsXCJsaW5lYXJHcmFkaWVudFwiLFwibWFya2VyXCIsXCJtYXNrXCIsXCJwYXRoXCIsXCJwYXR0ZXJuXCIsXCJwb2x5Z29uXCIsXCJwb2x5bGluZVwiLFwicmFkaWFsR3JhZGllbnRcIixcInJlY3RcIixcInN0b3BcIixcInN2Z1wiLFwidGV4dFwiLFwidHNwYW5cIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7d3RbZV09d3QoZSl9KSk7dmFyIGJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4pe1AodGhpcyxlKSx0aGlzLnJ1bGVzPXQsdGhpcy5jb21wb25lbnRJZD1uLHRoaXMuaXNTdGF0aWM9RmUodCxWKSxNZS5tYXN0ZXIuaGFzSWQobil8fE1lLm1hc3Rlci5kZWZlcnJlZEluamVjdChuLFtdKX1yZXR1cm4gZS5wcm90b3R5cGUuY3JlYXRlU3R5bGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49Y2UoSGUodGhpcy5ydWxlcyxlLHQpLFwiXCIpO3QuaW5qZWN0KHRoaXMuY29tcG9uZW50SWQsbil9LGUucHJvdG90eXBlLnJlbW92ZVN0eWxlcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbXBvbmVudElkO2UuaGFzSWQodCkmJmUucmVtb3ZlKHQpfSxlLnByb3RvdHlwZS5yZW5kZXJTdHlsZXM9ZnVuY3Rpb24oZSx0KXt0aGlzLnJlbW92ZVN0eWxlcyh0KSx0aGlzLmNyZWF0ZVN0eWxlcyhlLHQpfSxlfSgpO2Z1bmN0aW9uIHh0KGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3ZhciBvPUJlLmFwcGx5KHZvaWQgMCxbZV0uY29uY2F0KG4pKSxpPVwic2MtZ2xvYmFsLVwiK0RlKEpTT04uc3RyaW5naWZ5KG8pKSxhPW5ldyBidChvLGkpLHM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtQKHRoaXMsdCk7dmFyIHI9SCh0aGlzLGUuY2FsbCh0aGlzLG4pKSxvPXIuY29uc3RydWN0b3IsaT1vLmdsb2JhbFN0eWxlLGE9by5zdHlsZWRDb21wb25lbnRJZDtyZXR1cm4geiYmKHdpbmRvdy5zY0NHU0hNUkNhY2hlW2FdPSh3aW5kb3cuc2NDR1NITVJDYWNoZVthXXx8MCkrMSksci5zdGF0ZT17Z2xvYmFsU3R5bGU6aSxzdHlsZWRDb21wb25lbnRJZDphfSxyfXJldHVybiBUKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt3aW5kb3cuc2NDR1NITVJDYWNoZVt0aGlzLnN0YXRlLnN0eWxlZENvbXBvbmVudElkXSYmKHdpbmRvdy5zY0NHU0hNUkNhY2hlW3RoaXMuc3RhdGUuc3R5bGVkQ29tcG9uZW50SWRdLT0xKSwwPT09d2luZG93LnNjQ0dTSE1SQ2FjaGVbdGhpcy5zdGF0ZS5zdHlsZWRDb21wb25lbnRJZF0mJnRoaXMuc3RhdGUuZ2xvYmFsU3R5bGUucmVtb3ZlU3R5bGVzKHRoaXMuc3R5bGVTaGVldCl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGwuY3JlYXRlRWxlbWVudChndCxudWxsLChmdW5jdGlvbih0KXtlLnN0eWxlU2hlZXQ9dHx8TWUubWFzdGVyO3ZhciBuPWUuc3RhdGUuZ2xvYmFsU3R5bGU7cmV0dXJuIG4uaXNTdGF0aWM/KG4ucmVuZGVyU3R5bGVzKHEsZS5zdHlsZVNoZWV0KSxudWxsKTpsLmNyZWF0ZUVsZW1lbnQoZnQsbnVsbCwoZnVuY3Rpb24odCl7dmFyIHI9ZS5jb25zdHJ1Y3Rvci5kZWZhdWx0UHJvcHMsbz1BKHt9LGUucHJvcHMpO3JldHVybiB2b2lkIDAhPT10JiYoby50aGVtZT1HZShlLnByb3BzLHQscikpLG4ucmVuZGVyU3R5bGVzKG8sZS5zdHlsZVNoZWV0KSxudWxsfSkpfSkpfSx0fShsLkNvbXBvbmVudCk7cmV0dXJuIHMuZ2xvYmFsU3R5bGU9YSxzLnN0eWxlZENvbXBvbmVudElkPWksc316JiYod2luZG93LnNjQ0dTSE1SQ2FjaGU9e30pO3ZhciBfdD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cXHN8XFxcXG4vZyxcIlwiKX07ZnVuY3Rpb24gT3QoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07dmFyIG89QmUuYXBwbHkodm9pZCAwLFtlXS5jb25jYXQobikpLGk9TmUoRGUoX3QoSlNPTi5zdHJpbmdpZnkobykpKSk7cmV0dXJuIG5ldyBrZShpLGNlKG8saSxcIkBrZXlmcmFtZXNcIikpfXZhciBMdD1mdW5jdGlvbihlKXt2YXIgdD1sLmZvcndhcmRSZWYoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGwuY3JlYXRlRWxlbWVudChmdCxudWxsLChmdW5jdGlvbihyKXt2YXIgbz1lLmRlZmF1bHRQcm9wcyxpPUdlKHQscixvKTtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KGUsQSh7fSx0LHt0aGVtZTppLHJlZjpufSkpfSkpfSkpO3JldHVybiBjdCh0LGUpLHQuZGlzcGxheU5hbWU9XCJXaXRoVGhlbWUoXCIrJChlKStcIilcIix0fSxFdD17U3R5bGVTaGVldDpNZX07Y29uc3QgU3Q9d3R9LDUyNDY6ZT0+e2UuZXhwb3J0cz1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1cIi8qfCovXCIsbj10K1wifVwiO2Z1bmN0aW9uIHIodCl7aWYodCl0cnl7ZSh0K1wifVwiKX1jYXRjaChlKXt9fXJldHVybiBmdW5jdGlvbihvLGksYSxsLHMsYyx1LGYsZCxwKXtzd2l0Y2gobyl7Y2FzZSAxOmlmKDA9PT1kJiY2ND09PWkuY2hhckNvZGVBdCgwKSlyZXR1cm4gZShpK1wiO1wiKSxcIlwiO2JyZWFrO2Nhc2UgMjppZigwPT09ZilyZXR1cm4gaSt0O2JyZWFrO2Nhc2UgMzpzd2l0Y2goZil7Y2FzZSAxMDI6Y2FzZSAxMTI6cmV0dXJuIGUoYVswXStpKSxcIlwiO2RlZmF1bHQ6cmV0dXJuIGkrKDA9PT1wP3Q6XCJcIil9Y2FzZS0yOmkuc3BsaXQobikuZm9yRWFjaChyKX19fX0oKX0sMTk0NjplPT57ZS5leHBvcnRzPWZ1bmN0aW9uIGUodCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49L15cXDArL2cscj0vW1xcMFxcclxcZl0vZyxvPS86ICovZyxpPS96b298Z3JhLyxhPS8oWyw6IF0pKHRyYW5zZm9ybSkvZyxsPS8sK1xccyooPyFbXihdKlspXSkvZyxzPS8gK1xccyooPyFbXihdKlspXSkvZyxjPS8gKltcXDBdICovZyx1PS8sXFxyKz8vZyxmPS8oW1xcdFxcclxcbiBdKSpcXGY/Ji9nLGQ9LzpnbG9iYWxcXCgoKD86W15cXChcXClcXFtcXF1dKnxcXFsuKlxcXXxcXChbXlxcKFxcKV0qXFwpKSopXFwpL2cscD0vXFxXKy9nLGg9L0Aoa1xcdyspXFxzKihcXFMqKVxccyovLGc9Lzo6KHBsYWNlKS9nLHY9LzoocmVhZC1vbmx5KS9nLG09L1xccysoPz1be1xcXTs9Oj5dKS9nLEM9LyhbW309Oj5dKVxccysvZyx5PS8oXFx7W157XSs/KTsoPz1cXH0pL2csdz0vXFxzezIsfS9nLGI9LyhbXlxcKF0pKDorKSAqL2cseD0vW3N2aF1cXHcrLVt0YmxyXXsyfS8sXz0vXFwoXFxzKiguKilcXHMqXFwpL2csTz0vKFtcXHNcXFNdKj8pOy9nLEw9Ly1zZWxmfGZsZXgtL2csRT0vW15dKj8oOltycF1bZWxdYVtcXHctXSspW15dKi8sUz0vc3RyZXRjaHw6XFxzKlxcdytcXC0oPzpjb250ZXxhdmFpbCkvLGo9LyhbXi1dKShpbWFnZS1zZXRcXCgpLyxNPVwiLXdlYmtpdC1cIixrPVwiLW1vei1cIixSPVwiLW1zLVwiLFA9NTksST0xMjUsQT0xMjMsVD00MCxIPTQxLEI9OTEsVj05MyxEPTEwLFo9MTMsJD05LE49NjQsRj0zMixVPTM4LFc9NDUsej05NSxHPTQyLHE9NDQsWT01OCxLPTM5LFg9MzQsSj00NyxRPTYyLGVlPTQzLHRlPTEyNixuZT0wLHJlPTEyLG9lPTExLGllPTEwNyxhZT0xMDksbGU9MTE1LHNlPTExMixjZT0xMTEsdWU9MTA1LGZlPTk5LGRlPTEwMCxwZT0xMTIsaGU9MSxnZT0xLHZlPTAsbWU9MSxDZT0xLHllPTEsd2U9MCxiZT0wLHhlPTAsX2U9W10sT2U9W10sTGU9MCxFZT1udWxsLFNlPS0yLGplPS0xLE1lPTAsa2U9MSxSZT0yLFBlPTMsSWU9MCxBZT0xLFRlPVwiXCIsSGU9XCJcIixCZT1cIlwiO2Z1bmN0aW9uIFZlKGUsdCxvLGksYSl7Zm9yKHZhciBsLHMsdT0wLGY9MCxkPTAscD0wLG09MCxDPTAseT0wLHc9MCx4PTAsTz0wLEw9MCxFPTAsUz0wLGo9MCx6PTAsd2U9MCxPZT0wLEVlPTAsU2U9MCxqZT1vLmxlbmd0aCxaZT1qZS0xLHplPVwiXCIsR2U9XCJcIixxZT1cIlwiLFllPVwiXCIsS2U9XCJcIixYZT1cIlwiO3o8amU7KXtpZih5PW8uY2hhckNvZGVBdCh6KSx6PT09WmUmJmYrcCtkK3UhPT0wJiYoMCE9PWYmJih5PWY9PT1KP0Q6SikscD1kPXU9MCxqZSsrLFplKyspLGYrcCtkK3U9PT0wKXtpZih6PT09WmUmJih3ZT4wJiYoR2U9R2UucmVwbGFjZShyLFwiXCIpKSxHZS50cmltKCkubGVuZ3RoPjApKXtzd2l0Y2goeSl7Y2FzZSBGOmNhc2UgJDpjYXNlIFA6Y2FzZSBaOmNhc2UgRDpicmVhaztkZWZhdWx0OkdlKz1vLmNoYXJBdCh6KX15PVB9aWYoMT09PU9lKXN3aXRjaCh5KXtjYXNlIEE6Y2FzZSBJOmNhc2UgUDpjYXNlIFg6Y2FzZSBLOmNhc2UgVDpjYXNlIEg6Y2FzZSBxOk9lPTA7Y2FzZSAkOmNhc2UgWjpjYXNlIEQ6Y2FzZSBGOmJyZWFrO2RlZmF1bHQ6Zm9yKE9lPTAsU2U9eixtPXksei0tLHk9UDtTZTxqZTspc3dpdGNoKG8uY2hhckNvZGVBdChTZSsrKSl7Y2FzZSBEOmNhc2UgWjpjYXNlIFA6Kyt6LHk9bSxTZT1qZTticmVhaztjYXNlIFk6d2U+MCYmKCsreix5PW0pO2Nhc2UgQTpTZT1qZX19c3dpdGNoKHkpe2Nhc2UgQTpmb3IobT0oR2U9R2UudHJpbSgpKS5jaGFyQ29kZUF0KDApLEw9MSxTZT0rK3o7ejxqZTspe3N3aXRjaCh5PW8uY2hhckNvZGVBdCh6KSl7Y2FzZSBBOkwrKzticmVhaztjYXNlIEk6TC0tO2JyZWFrO2Nhc2UgSjpzd2l0Y2goQz1vLmNoYXJDb2RlQXQoeisxKSl7Y2FzZSBHOmNhc2UgSjp6PVdlKEMseixaZSxvKX1icmVhaztjYXNlIEI6eSsrO2Nhc2UgVDp5Kys7Y2FzZSBYOmNhc2UgSzpmb3IoO3orKzxaZSYmby5jaGFyQ29kZUF0KHopIT09eTspO31pZigwPT09TClicmVhazt6Kyt9aWYocWU9by5zdWJzdHJpbmcoU2UseiksbT09PW5lJiYobT0oR2U9R2UucmVwbGFjZShuLFwiXCIpLnRyaW0oKSkuY2hhckNvZGVBdCgwKSksbT09PU4pe3N3aXRjaCh3ZT4wJiYoR2U9R2UucmVwbGFjZShyLFwiXCIpKSxDPUdlLmNoYXJDb2RlQXQoMSkpe2Nhc2UgZGU6Y2FzZSBhZTpjYXNlIGxlOmNhc2UgVzpsPXQ7YnJlYWs7ZGVmYXVsdDpsPV9lfWlmKFNlPShxZT1WZSh0LGwscWUsQyxhKzEpKS5sZW5ndGgseGU+MCYmMD09PVNlJiYoU2U9R2UubGVuZ3RoKSxMZT4wJiYobD1EZShfZSxHZSxFZSkscz1VZShQZSxxZSxsLHQsZ2UsaGUsU2UsQyxhLGkpLEdlPWwuam9pbihcIlwiKSx2b2lkIDAhPT1zJiYwPT09KFNlPShxZT1zLnRyaW0oKSkubGVuZ3RoKSYmKEM9MCxxZT1cIlwiKSksU2U+MClzd2l0Y2goQyl7Y2FzZSBsZTpHZT1HZS5yZXBsYWNlKF8sRmUpO2Nhc2UgZGU6Y2FzZSBhZTpjYXNlIFc6cWU9R2UrXCJ7XCIrcWUrXCJ9XCI7YnJlYWs7Y2FzZSBpZTpxZT0oR2U9R2UucmVwbGFjZShoLFwiJDEgJDJcIisoQWU+MD9UZTpcIlwiKSkpK1wie1wiK3FlK1wifVwiLHFlPTE9PT1DZXx8Mj09PUNlJiZOZShcIkBcIitxZSwzKT9cIkBcIitNK3FlK1wiQFwiK3FlOlwiQFwiK3FlO2JyZWFrO2RlZmF1bHQ6cWU9R2UrcWUsaT09PXBlJiYoWWUrPXFlLHFlPVwiXCIpfWVsc2UgcWU9XCJcIn1lbHNlIHFlPVZlKHQsRGUodCxHZSxFZSkscWUsaSxhKzEpO0tlKz1xZSxFPTAsT2U9MCxqPTAsd2U9MCxFZT0wLFM9MCxHZT1cIlwiLHFlPVwiXCIseT1vLmNoYXJDb2RlQXQoKyt6KTticmVhaztjYXNlIEk6Y2FzZSBQOmlmKChTZT0oR2U9KHdlPjA/R2UucmVwbGFjZShyLFwiXCIpOkdlKS50cmltKCkpLmxlbmd0aCk+MSlzd2l0Y2goMD09PWomJigobT1HZS5jaGFyQ29kZUF0KDApKT09PVd8fG0+OTYmJm08MTIzKSYmKFNlPShHZT1HZS5yZXBsYWNlKFwiIFwiLFwiOlwiKSkubGVuZ3RoKSxMZT4wJiZ2b2lkIDAhPT0ocz1VZShrZSxHZSx0LGUsZ2UsaGUsWWUubGVuZ3RoLGksYSxpKSkmJjA9PT0oU2U9KEdlPXMudHJpbSgpKS5sZW5ndGgpJiYoR2U9XCJcXDBcXDBcIiksbT1HZS5jaGFyQ29kZUF0KDApLEM9R2UuY2hhckNvZGVBdCgxKSxtKXtjYXNlIG5lOmJyZWFrO2Nhc2UgTjppZihDPT09dWV8fEM9PT1mZSl7WGUrPUdlK28uY2hhckF0KHopO2JyZWFrfWRlZmF1bHQ6aWYoR2UuY2hhckNvZGVBdChTZS0xKT09PVkpYnJlYWs7WWUrPSRlKEdlLG0sQyxHZS5jaGFyQ29kZUF0KDIpKX1FPTAsT2U9MCxqPTAsd2U9MCxFZT0wLEdlPVwiXCIseT1vLmNoYXJDb2RlQXQoKyt6KX19c3dpdGNoKHkpe2Nhc2UgWjpjYXNlIEQ6aWYoZitwK2QrdStiZT09PTApc3dpdGNoKE8pe2Nhc2UgSDpjYXNlIEs6Y2FzZSBYOmNhc2UgTjpjYXNlIHRlOmNhc2UgUTpjYXNlIEc6Y2FzZSBlZTpjYXNlIEo6Y2FzZSBXOmNhc2UgWTpjYXNlIHE6Y2FzZSBQOmNhc2UgQTpjYXNlIEk6YnJlYWs7ZGVmYXVsdDpqPjAmJihPZT0xKX1mPT09Sj9mPTA6bWUrRT09PTAmJmkhPT1pZSYmR2UubGVuZ3RoPjAmJih3ZT0xLEdlKz1cIlxcMFwiKSxMZSpJZT4wJiZVZShNZSxHZSx0LGUsZ2UsaGUsWWUubGVuZ3RoLGksYSxpKSxoZT0xLGdlKys7YnJlYWs7Y2FzZSBQOmNhc2UgSTppZihmK3ArZCt1PT09MCl7aGUrKzticmVha31kZWZhdWx0OnN3aXRjaChoZSsrLHplPW8uY2hhckF0KHopLHkpe2Nhc2UgJDpjYXNlIEY6aWYocCt1K2Y9PT0wKXN3aXRjaCh3KXtjYXNlIHE6Y2FzZSBZOmNhc2UgJDpjYXNlIEY6emU9XCJcIjticmVhaztkZWZhdWx0OnkhPT1GJiYoemU9XCIgXCIpfWJyZWFrO2Nhc2UgbmU6emU9XCJcXFxcMFwiO2JyZWFrO2Nhc2UgcmU6emU9XCJcXFxcZlwiO2JyZWFrO2Nhc2Ugb2U6emU9XCJcXFxcdlwiO2JyZWFrO2Nhc2UgVTpwK2YrdT09PTAmJm1lPjAmJihFZT0xLHdlPTEsemU9XCJcXGZcIit6ZSk7YnJlYWs7Y2FzZSAxMDg6aWYocCtmK3UrdmU9PT0wJiZqPjApc3dpdGNoKHotail7Y2FzZSAyOnc9PT1zZSYmby5jaGFyQ29kZUF0KHotMyk9PT1ZJiYodmU9dyk7Y2FzZSA4Ong9PT1jZSYmKHZlPXgpfWJyZWFrO2Nhc2UgWTpwK2YrdT09PTAmJihqPXopO2JyZWFrO2Nhc2UgcTpmK2QrcCt1PT09MCYmKHdlPTEsemUrPVwiXFxyXCIpO2JyZWFrO2Nhc2UgWDpjYXNlIEs6MD09PWYmJihwPXA9PT15PzA6MD09PXA/eTpwKTticmVhaztjYXNlIEI6cCtmK2Q9PT0wJiZ1Kys7YnJlYWs7Y2FzZSBWOnArZitkPT09MCYmdS0tO2JyZWFrO2Nhc2UgSDpwK2YrdT09PTAmJmQtLTticmVhaztjYXNlIFQ6cCtmK3U9PT0wJiYoMD09PUUmJigyKncrMyp4PT01MzN8fChMPTAsRT0xKSksZCsrKTticmVhaztjYXNlIE46ZitkK3ArdStqK1M9PT0wJiYoUz0xKTticmVhaztjYXNlIEc6Y2FzZSBKOmlmKHArdStkPjApYnJlYWs7c3dpdGNoKGYpe2Nhc2UgMDpzd2l0Y2goMip5KzMqby5jaGFyQ29kZUF0KHorMSkpe2Nhc2UgMjM1OmY9SjticmVhaztjYXNlIDIyMDpTZT16LGY9R31icmVhaztjYXNlIEc6eT09PUomJnc9PT1HJiZTZSsyIT09eiYmKDMzPT09by5jaGFyQ29kZUF0KFNlKzIpJiYoWWUrPW8uc3Vic3RyaW5nKFNlLHorMSkpLHplPVwiXCIsZj0wKX19aWYoMD09PWYpe2lmKG1lK3ArdStTPT09MCYmaSE9PWllJiZ5IT09UClzd2l0Y2goeSl7Y2FzZSBxOmNhc2UgdGU6Y2FzZSBROmNhc2UgZWU6Y2FzZSBIOmNhc2UgVDppZigwPT09RSl7c3dpdGNoKHcpe2Nhc2UgJDpjYXNlIEY6Y2FzZSBEOmNhc2UgWjp6ZSs9XCJcXDBcIjticmVhaztkZWZhdWx0OnplPVwiXFwwXCIremUrKHk9PT1xP1wiXCI6XCJcXDBcIil9d2U9MX1lbHNlIHN3aXRjaCh5KXtjYXNlIFQ6ais3PT09eiYmMTA4PT09dyYmKGo9MCksRT0rK0w7YnJlYWs7Y2FzZSBIOjA9PShFPS0tTCkmJih3ZT0xLHplKz1cIlxcMFwiKX1icmVhaztjYXNlICQ6Y2FzZSBGOnN3aXRjaCh3KXtjYXNlIG5lOmNhc2UgQTpjYXNlIEk6Y2FzZSBQOmNhc2UgcTpjYXNlIHJlOmNhc2UgJDpjYXNlIEY6Y2FzZSBEOmNhc2UgWjpicmVhaztkZWZhdWx0OjA9PT1FJiYod2U9MSx6ZSs9XCJcXDBcIil9fUdlKz16ZSx5IT09RiYmeSE9PSQmJihPPXkpfX14PXcsdz15LHorK31pZihTZT1ZZS5sZW5ndGgseGU+MCYmMD09PVNlJiYwPT09S2UubGVuZ3RoJiYwPT09dFswXS5sZW5ndGg9PTAmJihpIT09YWV8fDE9PT10Lmxlbmd0aCYmKG1lPjA/SGU6QmUpPT09dFswXSkmJihTZT10LmpvaW4oXCIsXCIpLmxlbmd0aCsyKSxTZT4wKXtpZihsPTA9PT1tZSYmaSE9PWllP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLG89MCxpPWUubGVuZ3RoLGE9QXJyYXkoaSk7bzxpOysrbyl7Zm9yKHZhciBsPWVbb10uc3BsaXQoYykscz1cIlwiLHU9MCxmPTAsZD0wLHA9MCxoPWwubGVuZ3RoO3U8aDsrK3UpaWYoISgwPT09KGY9KG49bFt1XSkubGVuZ3RoKSYmaD4xKSl7aWYoZD1zLmNoYXJDb2RlQXQocy5sZW5ndGgtMSkscD1uLmNoYXJDb2RlQXQoMCksdD1cIlwiLDAhPT11KXN3aXRjaChkKXtjYXNlIEc6Y2FzZSB0ZTpjYXNlIFE6Y2FzZSBlZTpjYXNlIEY6Y2FzZSBUOmJyZWFrO2RlZmF1bHQ6dD1cIiBcIn1zd2l0Y2gocCl7Y2FzZSBVOm49dCtIZTtjYXNlIHRlOmNhc2UgUTpjYXNlIGVlOmNhc2UgRjpjYXNlIEg6Y2FzZSBUOmJyZWFrO2Nhc2UgQjpuPXQrbitIZTticmVhaztjYXNlIFk6c3dpdGNoKDIqbi5jaGFyQ29kZUF0KDEpKzMqbi5jaGFyQ29kZUF0KDIpKXtjYXNlIDUzMDppZih5ZT4wKXtuPXQrbi5zdWJzdHJpbmcoOCxmLTEpO2JyZWFrfWRlZmF1bHQ6KHU8MXx8bFt1LTFdLmxlbmd0aDwxKSYmKG49dCtIZStuKX1icmVhaztjYXNlIHE6dD1cIlwiO2RlZmF1bHQ6bj1mPjEmJm4uaW5kZXhPZihcIjpcIik+MD90K24ucmVwbGFjZShiLFwiJDFcIitIZStcIiQyXCIpOnQrbitIZX1zKz1ufWFbb109cy5yZXBsYWNlKHIsXCJcIikudHJpbSgpfXJldHVybiBhfSh0KTp0LExlPjAmJnZvaWQgMCE9PShzPVVlKFJlLFllLGwsZSxnZSxoZSxTZSxpLGEsaSkpJiYwPT09KFllPXMpLmxlbmd0aClyZXR1cm4gWGUrWWUrS2U7aWYoWWU9bC5qb2luKFwiLFwiKStcIntcIitZZStcIn1cIixDZSp2ZSE9MCl7c3dpdGNoKDIhPT1DZXx8TmUoWWUsMil8fCh2ZT0wKSx2ZSl7Y2FzZSBjZTpZZT1ZZS5yZXBsYWNlKHYsXCI6XCIraytcIiQxXCIpK1llO2JyZWFrO2Nhc2Ugc2U6WWU9WWUucmVwbGFjZShnLFwiOjpcIitNK1wiaW5wdXQtJDFcIikrWWUucmVwbGFjZShnLFwiOjpcIitrK1wiJDFcIikrWWUucmVwbGFjZShnLFwiOlwiK1IrXCJpbnB1dC0kMVwiKStZZX12ZT0wfX1yZXR1cm4gWGUrWWUrS2V9ZnVuY3Rpb24gRGUoZSx0LG4pe3ZhciByPXQudHJpbSgpLnNwbGl0KHUpLG89cixpPXIubGVuZ3RoLGE9ZS5sZW5ndGg7c3dpdGNoKGEpe2Nhc2UgMDpjYXNlIDE6Zm9yKHZhciBsPTAscz0wPT09YT9cIlwiOmVbMF0rXCIgXCI7bDxpOysrbClvW2xdPVplKHMsb1tsXSxuLGEpLnRyaW0oKTticmVhaztkZWZhdWx0Omw9MDt2YXIgYz0wO2ZvcihvPVtdO2w8aTsrK2wpZm9yKHZhciBmPTA7ZjxhOysrZilvW2MrK109WmUoZVtmXStcIiBcIixyW2xdLG4sYSkudHJpbSgpfXJldHVybiBvfWZ1bmN0aW9uIFplKGUsdCxuLHIpe3ZhciBvPXQsaT1vLmNoYXJDb2RlQXQoMCk7c3dpdGNoKGk8MzMmJihpPShvPW8udHJpbSgpKS5jaGFyQ29kZUF0KDApKSxpKXtjYXNlIFU6c3dpdGNoKG1lK3Ipe2Nhc2UgMDpjYXNlIDE6aWYoMD09PWUudHJpbSgpLmxlbmd0aClicmVhaztkZWZhdWx0OnJldHVybiBvLnJlcGxhY2UoZixcIiQxXCIrZS50cmltKCkpfWJyZWFrO2Nhc2UgWTppZigxMDMhPT1vLmNoYXJDb2RlQXQoMSkpcmV0dXJuIGUudHJpbSgpK28ucmVwbGFjZShmLFwiJDFcIitlLnRyaW0oKSk7aWYoeWU+MCYmbWU+MClyZXR1cm4gby5yZXBsYWNlKGQsXCIkMVwiKS5yZXBsYWNlKGYsXCIkMVwiK0JlKTtkZWZhdWx0OmlmKG4qbWU+MCYmby5pbmRleE9mKFwiXFxmXCIpPjApcmV0dXJuIG8ucmVwbGFjZShmLChlLmNoYXJDb2RlQXQoMCk9PT1ZP1wiXCI6XCIkMVwiKStlLnRyaW0oKSl9cmV0dXJuIGUrb31mdW5jdGlvbiAkZShlLHQsbixyKXt2YXIgYyx1PTAsZj1lK1wiO1wiLGQ9Mip0KzMqbis0KnI7aWYoOTQ0PT09ZClyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj1lLmluZGV4T2YoXCI6XCIsOSkrMSxyPWUuc3Vic3RyaW5nKDAsbikudHJpbSgpLG89ZS5zdWJzdHJpbmcobix0LTEpLnRyaW0oKTtzd2l0Y2goZS5jaGFyQ29kZUF0KDkpKkFlKXtjYXNlIDA6YnJlYWs7Y2FzZSBXOmlmKDExMCE9PWUuY2hhckNvZGVBdCgxMCkpYnJlYWs7ZGVmYXVsdDp2YXIgaT1vLnNwbGl0KChvPVwiXCIsbCkpLGE9MDtmb3Iobj0wLHQ9aS5sZW5ndGg7YTx0O249MCwrK2Epe2Zvcih2YXIgYz1pW2FdLHU9Yy5zcGxpdChzKTtjPXVbbl07KXt2YXIgZj1jLmNoYXJDb2RlQXQoMCk7aWYoMT09PUFlJiYoZj5OJiZmPDkwfHxmPjk2JiZmPDEyM3x8Zj09PXp8fGY9PT1XJiZjLmNoYXJDb2RlQXQoMSkhPT1XKSYmaXNOYU4ocGFyc2VGbG9hdChjKSkrKC0xIT09Yy5pbmRleE9mKFwiKFwiKSk9PT0xKXN3aXRjaChjKXtjYXNlXCJpbmZpbml0ZVwiOmNhc2VcImFsdGVybmF0ZVwiOmNhc2VcImJhY2t3YXJkc1wiOmNhc2VcInJ1bm5pbmdcIjpjYXNlXCJub3JtYWxcIjpjYXNlXCJmb3J3YXJkc1wiOmNhc2VcImJvdGhcIjpjYXNlXCJub25lXCI6Y2FzZVwibGluZWFyXCI6Y2FzZVwiZWFzZVwiOmNhc2VcImVhc2UtaW5cIjpjYXNlXCJlYXNlLW91dFwiOmNhc2VcImVhc2UtaW4tb3V0XCI6Y2FzZVwicGF1c2VkXCI6Y2FzZVwicmV2ZXJzZVwiOmNhc2VcImFsdGVybmF0ZS1yZXZlcnNlXCI6Y2FzZVwiaW5oZXJpdFwiOmNhc2VcImluaXRpYWxcIjpjYXNlXCJ1bnNldFwiOmNhc2VcInN0ZXAtc3RhcnRcIjpjYXNlXCJzdGVwLWVuZFwiOmJyZWFrO2RlZmF1bHQ6Yys9VGV9dVtuKytdPWN9bys9KDA9PT1hP1wiXCI6XCIsXCIpK3Uuam9pbihcIiBcIil9fXJldHVybiBvPXIrbytcIjtcIiwxPT09Q2V8fDI9PT1DZSYmTmUobywxKT9NK28rbzpvfShmKTtpZigwPT09Q2V8fDI9PT1DZSYmIU5lKGYsMSkpcmV0dXJuIGY7c3dpdGNoKGQpe2Nhc2UgMTAxNTpyZXR1cm4gOTc9PT1mLmNoYXJDb2RlQXQoMTApP00rZitmOmY7Y2FzZSA5NTE6cmV0dXJuIDExNj09PWYuY2hhckNvZGVBdCgzKT9NK2YrZjpmO2Nhc2UgOTYzOnJldHVybiAxMTA9PT1mLmNoYXJDb2RlQXQoNSk/TStmK2Y6ZjtjYXNlIDEwMDk6aWYoMTAwIT09Zi5jaGFyQ29kZUF0KDQpKWJyZWFrO2Nhc2UgOTY5OmNhc2UgOTQyOnJldHVybiBNK2YrZjtjYXNlIDk3ODpyZXR1cm4gTStmK2srZitmO2Nhc2UgMTAxOTpjYXNlIDk4MzpyZXR1cm4gTStmK2srZitSK2YrZjtjYXNlIDg4MzpyZXR1cm4gZi5jaGFyQ29kZUF0KDgpPT09Vz9NK2YrZjpmLmluZGV4T2YoXCJpbWFnZS1zZXQoXCIsMTEpPjA/Zi5yZXBsYWNlKGosXCIkMVwiK00rXCIkMlwiKStmOmY7Y2FzZSA5MzI6aWYoZi5jaGFyQ29kZUF0KDQpPT09Vylzd2l0Y2goZi5jaGFyQ29kZUF0KDUpKXtjYXNlIDEwMzpyZXR1cm4gTStcImJveC1cIitmLnJlcGxhY2UoXCItZ3Jvd1wiLFwiXCIpK00rZitSK2YucmVwbGFjZShcImdyb3dcIixcInBvc2l0aXZlXCIpK2Y7Y2FzZSAxMTU6cmV0dXJuIE0rZitSK2YucmVwbGFjZShcInNocmlua1wiLFwibmVnYXRpdmVcIikrZjtjYXNlIDk4OnJldHVybiBNK2YrUitmLnJlcGxhY2UoXCJiYXNpc1wiLFwicHJlZmVycmVkLXNpemVcIikrZn1yZXR1cm4gTStmK1IrZitmO2Nhc2UgOTY0OnJldHVybiBNK2YrUitcImZsZXgtXCIrZitmO2Nhc2UgMTAyMzppZig5OSE9PWYuY2hhckNvZGVBdCg4KSlicmVhaztyZXR1cm4gYz1mLnN1YnN0cmluZyhmLmluZGV4T2YoXCI6XCIsMTUpKS5yZXBsYWNlKFwiZmxleC1cIixcIlwiKS5yZXBsYWNlKFwic3BhY2UtYmV0d2VlblwiLFwianVzdGlmeVwiKSxNK1wiYm94LXBhY2tcIitjK00rZitSK1wiZmxleC1wYWNrXCIrYytmO2Nhc2UgMTAwNTpyZXR1cm4gaS50ZXN0KGYpP2YucmVwbGFjZShvLFwiOlwiK00pK2YucmVwbGFjZShvLFwiOlwiK2spK2Y6ZjtjYXNlIDFlMzpzd2l0Y2godT0oYz1mLnN1YnN0cmluZygxMykudHJpbSgpKS5pbmRleE9mKFwiLVwiKSsxLGMuY2hhckNvZGVBdCgwKStjLmNoYXJDb2RlQXQodSkpe2Nhc2UgMjI2OmM9Zi5yZXBsYWNlKHgsXCJ0YlwiKTticmVhaztjYXNlIDIzMjpjPWYucmVwbGFjZSh4LFwidGItcmxcIik7YnJlYWs7Y2FzZSAyMjA6Yz1mLnJlcGxhY2UoeCxcImxyXCIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIGZ9cmV0dXJuIE0rZitSK2MrZjtjYXNlIDEwMTc6aWYoLTE9PT1mLmluZGV4T2YoXCJzdGlja3lcIiw5KSlyZXR1cm4gZjtjYXNlIDk3NTpzd2l0Y2godT0oZj1lKS5sZW5ndGgtMTAsZD0oYz0oMzM9PT1mLmNoYXJDb2RlQXQodSk/Zi5zdWJzdHJpbmcoMCx1KTpmKS5zdWJzdHJpbmcoZS5pbmRleE9mKFwiOlwiLDcpKzEpLnRyaW0oKSkuY2hhckNvZGVBdCgwKSsoMHxjLmNoYXJDb2RlQXQoNykpKXtjYXNlIDIwMzppZihjLmNoYXJDb2RlQXQoOCk8MTExKWJyZWFrO2Nhc2UgMTE1OmY9Zi5yZXBsYWNlKGMsTStjKStcIjtcIitmO2JyZWFrO2Nhc2UgMjA3OmNhc2UgMTAyOmY9Zi5yZXBsYWNlKGMsTSsoZD4xMDI/XCJpbmxpbmUtXCI6XCJcIikrXCJib3hcIikrXCI7XCIrZi5yZXBsYWNlKGMsTStjKStcIjtcIitmLnJlcGxhY2UoYyxSK2MrXCJib3hcIikrXCI7XCIrZn1yZXR1cm4gZitcIjtcIjtjYXNlIDkzODppZihmLmNoYXJDb2RlQXQoNSk9PT1XKXN3aXRjaChmLmNoYXJDb2RlQXQoNikpe2Nhc2UgMTA1OnJldHVybiBjPWYucmVwbGFjZShcIi1pdGVtc1wiLFwiXCIpLE0rZitNK1wiYm94LVwiK2MrUitcImZsZXgtXCIrYytmO2Nhc2UgMTE1OnJldHVybiBNK2YrUitcImZsZXgtaXRlbS1cIitmLnJlcGxhY2UoTCxcIlwiKStmO2RlZmF1bHQ6cmV0dXJuIE0rZitSK1wiZmxleC1saW5lLXBhY2tcIitmLnJlcGxhY2UoXCJhbGlnbi1jb250ZW50XCIsXCJcIikucmVwbGFjZShMLFwiXCIpK2Z9YnJlYWs7Y2FzZSA5NzM6Y2FzZSA5ODk6aWYoZi5jaGFyQ29kZUF0KDMpIT09V3x8MTIyPT09Zi5jaGFyQ29kZUF0KDQpKWJyZWFrO2Nhc2UgOTMxOmNhc2UgOTUzOmlmKCEwPT09Uy50ZXN0KGUpKXJldHVybiAxMTU9PT0oYz1lLnN1YnN0cmluZyhlLmluZGV4T2YoXCI6XCIpKzEpKS5jaGFyQ29kZUF0KDApPyRlKGUucmVwbGFjZShcInN0cmV0Y2hcIixcImZpbGwtYXZhaWxhYmxlXCIpLHQsbixyKS5yZXBsYWNlKFwiOmZpbGwtYXZhaWxhYmxlXCIsXCI6c3RyZXRjaFwiKTpmLnJlcGxhY2UoYyxNK2MpK2YucmVwbGFjZShjLGsrYy5yZXBsYWNlKFwiZmlsbC1cIixcIlwiKSkrZjticmVhaztjYXNlIDk2MjppZihmPU0rZisoMTAyPT09Zi5jaGFyQ29kZUF0KDUpP1IrZjpcIlwiKStmLG4rcj09PTIxMSYmMTA1PT09Zi5jaGFyQ29kZUF0KDEzKSYmZi5pbmRleE9mKFwidHJhbnNmb3JtXCIsMTApPjApcmV0dXJuIGYuc3Vic3RyaW5nKDAsZi5pbmRleE9mKFwiO1wiLDI3KSsxKS5yZXBsYWNlKGEsXCIkMVwiK00rXCIkMlwiKStmfXJldHVybiBmfWZ1bmN0aW9uIE5lKGUsdCl7dmFyIG49ZS5pbmRleE9mKDE9PT10P1wiOlwiOlwie1wiKSxyPWUuc3Vic3RyaW5nKDAsMyE9PXQ/bjoxMCksbz1lLnN1YnN0cmluZyhuKzEsZS5sZW5ndGgtMSk7cmV0dXJuIEVlKDIhPT10P3I6ci5yZXBsYWNlKEUsXCIkMVwiKSxvLHQpfWZ1bmN0aW9uIEZlKGUsdCl7dmFyIG49JGUodCx0LmNoYXJDb2RlQXQoMCksdC5jaGFyQ29kZUF0KDEpLHQuY2hhckNvZGVBdCgyKSk7cmV0dXJuIG4hPT10K1wiO1wiP24ucmVwbGFjZShPLFwiIG9yICgkMSlcIikuc3Vic3RyaW5nKDQpOlwiKFwiK3QrXCIpXCJ9ZnVuY3Rpb24gVWUoZSx0LG4scixvLGksYSxsLHMsYyl7Zm9yKHZhciB1LGY9MCxkPXQ7ZjxMZTsrK2Ypc3dpdGNoKHU9T2VbZl0uY2FsbChHZSxlLGQsbixyLG8saSxhLGwscyxjKSl7Y2FzZSB2b2lkIDA6Y2FzZSExOmNhc2UhMDpjYXNlIG51bGw6YnJlYWs7ZGVmYXVsdDpkPXV9aWYoZCE9PXQpcmV0dXJuIGR9ZnVuY3Rpb24gV2UoZSx0LG4scil7Zm9yKHZhciBvPXQrMTtvPG47KytvKXN3aXRjaChyLmNoYXJDb2RlQXQobykpe2Nhc2UgSjppZihlPT09RyYmci5jaGFyQ29kZUF0KG8tMSk9PT1HJiZ0KzIhPT1vKXJldHVybiBvKzE7YnJlYWs7Y2FzZSBEOmlmKGU9PT1KKXJldHVybiBvKzF9cmV0dXJuIG99ZnVuY3Rpb24gemUoZSl7Zm9yKHZhciB0IGluIGUpe3ZhciBuPWVbdF07c3dpdGNoKHQpe2Nhc2VcImtleWZyYW1lXCI6QWU9MHxuO2JyZWFrO2Nhc2VcImdsb2JhbFwiOnllPTB8bjticmVhaztjYXNlXCJjYXNjYWRlXCI6bWU9MHxuO2JyZWFrO2Nhc2VcImNvbXByZXNzXCI6d2U9MHxuO2JyZWFrO2Nhc2VcInNlbWljb2xvblwiOmJlPTB8bjticmVhaztjYXNlXCJwcmVzZXJ2ZVwiOnhlPTB8bjticmVhaztjYXNlXCJwcmVmaXhcIjpFZT1udWxsLG4/XCJmdW5jdGlvblwiIT10eXBlb2Ygbj9DZT0xOihDZT0yLEVlPW4pOkNlPTB9fXJldHVybiB6ZX1mdW5jdGlvbiBHZSh0LG4pe2lmKHZvaWQgMCE9PXRoaXMmJnRoaXMuY29uc3RydWN0b3I9PT1HZSlyZXR1cm4gZSh0KTt2YXIgbz10LGk9by5jaGFyQ29kZUF0KDApO2k8MzMmJihpPShvPW8udHJpbSgpKS5jaGFyQ29kZUF0KDApKSxBZT4wJiYoVGU9by5yZXBsYWNlKHAsaT09PUI/XCJcIjpcIi1cIikpLGk9MSwxPT09bWU/QmU9bzpIZT1vO3ZhciBhLGw9W0JlXTtMZT4wJiZ2b2lkIDAhPT0oYT1VZShqZSxuLGwsbCxnZSxoZSwwLDAsMCwwKSkmJlwic3RyaW5nXCI9PXR5cGVvZiBhJiYobj1hKTt2YXIgcz1WZShfZSxsLG4sMCwwKTtyZXR1cm4gTGU+MCYmdm9pZCAwIT09KGE9VWUoU2UscyxsLGwsZ2UsaGUscy5sZW5ndGgsMCwwLDApKSYmXCJzdHJpbmdcIiE9dHlwZW9mKHM9YSkmJihpPTApLFRlPVwiXCIsQmU9XCJcIixIZT1cIlwiLHZlPTAsZ2U9MSxoZT0xLHdlKmk9PTA/czpzLnJlcGxhY2UocixcIlwiKS5yZXBsYWNlKG0sXCJcIikucmVwbGFjZShDLFwiJDFcIikucmVwbGFjZSh5LFwiJDFcIikucmVwbGFjZSh3LFwiIFwiKX1yZXR1cm4gR2UudXNlPWZ1bmN0aW9uIGUodCl7c3dpdGNoKHQpe2Nhc2Ugdm9pZCAwOmNhc2UgbnVsbDpMZT1PZS5sZW5ndGg9MDticmVhaztkZWZhdWx0OmlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpT2VbTGUrK109dDtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiB0KWZvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyOysrbillKHRbbl0pO2Vsc2UgSWU9MHwhIXR9cmV0dXJuIGV9LEdlLnNldD16ZSx2b2lkIDAhPT10JiZ6ZSh0KSxHZX0obnVsbCl9LDM5MjY6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHthOigpPT52fSk7dmFyIHI9big2Njc4KSxvPW4oNTQzOCksaT1uKDcxMDApLGE9bigxMjEpLGw9big3Mjc4KSxzPW4oOTYxMCk7dmFyIGM9bigxMTI3KTtjb25zdCB1PSgwLG4oOTExNykuWikoYCR7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGZpbiYmZmluPy5tZS5pZGVudGl0eS51dWlkfS1lbnRlcnByaXNlLWJvb2ttYXJrc2ApO3ZhciBmPW4oODYzNik7Y29uc3QgZD1lPT4oe2lkZW50aXR5OmUsb3BlbmZpbldpbmRvdzpmaW4uV2luZG93LndyYXBTeW5jKGUpLF9ib29rbWFya3M6e19jcmVhdGVCb29rbWFya05vZGU6YXN5bmMgZT0+KGFzeW5jIGU9Pihhd2FpdCB1KCkpLmRpc3BhdGNoKGMuYiQuQ3JlYXRlQm9va21hcmtOb2RlLGUpKShlKSxfZ2V0Qm9va21hcmtOb2RlOmFzeW5jIGU9Pihhc3luYyBlPT4oYXdhaXQgdSgpKS5kaXNwYXRjaChjLmIkLkdldEJvb2ttYXJrTm9kZSxlKSkoZSksX3NlYXJjaEJvb2ttYXJrTm9kZXM6YXN5bmMgZT0+KGFzeW5jIGU9Pihhd2FpdCB1KCkpLmRpc3BhdGNoKGMuYiQuU2VhcmNoQm9va21hcmtOb2RlcyxlKSkoZSksX3VwZGF0ZUJvb2ttYXJrTm9kZTphc3luYyBlPT4oYXN5bmMgZT0+KGF3YWl0IHUoKSkuZGlzcGF0Y2goYy5iJC5VcGRhdGVCb29rbWFya05vZGUsZSkpKGUpLF9kZWxldGVCb29rbWFya05vZGU6YXN5bmMgZT0+KGFzeW5jIGU9Pihhd2FpdCB1KCkpLmRpc3BhdGNoKGMuYiQuRGVsZXRlQm9va21hcmtOb2RlLGUpKShlKX0sZ2V0UGFnZXM6YXN5bmMoKT0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uR2V0UGFnZXNGb3JXaW5kb3csZSksZ2V0UGFnZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5HZXRQYWdlRm9yV2luZG93LHtpZGVudGl0eTplLHBhZ2VJZDp0fSksYWRkUGFnZTphc3luYyB0PT4oMCxmLmFBKSgpLkJyb3dzZXIud3JhcFN5bmMoZSkuX2FkZFBhZ2UodCksX2FkZFBhZ2U6YXN5bmModCxuKT0+e2NvbnN0IHI9YXdhaXQoMCxvLnhwKShlKSxpPXtpZGVudGl0eTplLHBhZ2U6dCxpbnNlcnRpb25JbmRleDpuPy5pbmRleH07cmV0dXJuIHIuZGlzcGF0Y2goby5mbi5BZGRQYWdlLGkpfSxyZW1vdmVQYWdlOmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLkRldGFjaFBhZ2VzRnJvbVdpbmRvdyx7aWRlbnRpdHk6ZSxwYWdlSWRzOlt0XX0pLHJlcGFyZW50UGFnZTphc3luYyB0PT4oMCxmLmFBKSgpLkJyb3dzZXIud3JhcFN5bmMoZSkuX3JlcGFyZW50UGFnZSh0KSxfcmVwYXJlbnRQYWdlOmFzeW5jIHQ9Pntjb25zdHtwYWdlSWQ6bn09dCxyPWF3YWl0KDAsby54cCkoZSksaT0oYXdhaXQgci5kaXNwYXRjaChvLmZuLkdldEFsbEF0dGFjaGVkUGFnZXMsdm9pZCAwKSkuZmluZCgoKHtwYWdlSWQ6ZX0pPT5lPT09bikpO2lmKCFpKXRocm93IG5ldyBFcnJvcihgUmVwYXJlbnQgUGFnZSBFcnJvcjogVGFyZ2V0IHBhZ2Ugd2l0aCBwYWdlSWQgJHtufSBub3QgZm91bmRgKTtpLm11bHRpSW5zdGFuY2VWaWV3QmVoYXZpb3I9XCJyZXBhcmVudFwiO2NvbnN0IGE9e2lkZW50aXR5OmUscGFnZXM6W2ldLGluc2VydGlvbkluZGV4OnQuaW5kZXh9O3JldHVybiByLmRpc3BhdGNoKG8uZm4uQXR0YWNoUGFnZXNUb1dpbmRvdyxhKX0sc2V0QWN0aXZlUGFnZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5TZXRBY3RpdmVQYWdlLHtpZGVudGl0eTplLHBhZ2VJZDp0fSksdXBkYXRlUGFnZTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCgwLG8ueHApKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaChvLmZuLlVwZGF0ZVBhZ2VGb3JXaW5kb3csdCl9LHJlb3JkZXJQYWdlczphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCgwLG8ueHApKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaChvLmZuLlJlb3JkZXJQYWdlc0ZvcldpbmRvdyx0KX0sX29wZW5HbG9iYWxDb250ZXh0TWVudTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCgwLG8ueHApKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaChvLmZuLk9wZW5HbG9iYWxDb250ZXh0TWVudUludGVybmFsLHQpfSxyZXBsYWNlVG9vbGJhck9wdGlvbnM6YXN5bmMgdD0+e2F3YWl0KDAsby54cCkoZSk7Y29uc3Qgbj1maW4uV2luZG93LndyYXBTeW5jKGUpO2F3YWl0IG4udXBkYXRlT3B0aW9ucyh7d29ya3NwYWNlUGxhdGZvcm06e3Rvb2xiYXJPcHRpb25zOnR9fSl9LHJlcGxhY2VXaW5kb3dTdGF0ZUJ1dHRvbk9wdGlvbnM6YXN5bmMgdD0+e2F3YWl0KDAsby54cCkoZSk7Y29uc3Qgbj1maW4uV2luZG93LndyYXBTeW5jKGUpO2F3YWl0IG4udXBkYXRlT3B0aW9ucyh7d29ya3NwYWNlUGxhdGZvcm06e3dpbmRvd1N0YXRlQnV0dG9uT3B0aW9uczp0fX0pfSx1cGRhdGVCcm93c2VyV2luZG93VGl0bGU6YXN5bmMgdD0+e2NvbnN0IG49ZmluLldpbmRvdy53cmFwU3luYyhlKTtcInN0cmluZ1wiIT10eXBlb2YgdD9hd2FpdCBuLnVwZGF0ZU9wdGlvbnMoe3dvcmtzcGFjZVBsYXRmb3JtOnt0aXRsZTp0fX0pOmNvbnNvbGUud2FybihcIlR5cGUgc3RyaW5nIGZvciB3aW5kb3cgdGl0bGUgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBXaW5kb3dUaXRsZSB0eXBlIGluc3RlYWRcIix0KX0sX29wZW5WaWV3VGFiQ29udGV4dE1lbnU6YXN5bmMgdD0+e2NvbnN0IG49YXdhaXQoMCxvLnhwKShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goby5mbi5PcGVuVmlld1RhYkNvbnRleHRNZW51SW50ZXJuYWwsdCl9LF9vcGVuUGFnZVRhYkNvbnRleHRNZW51OmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0KDAsby54cCkoZSk7cmV0dXJuIHQuaWRlbnRpdHk9ZSxuLmRpc3BhdGNoKG8uZm4uT3BlblBhZ2VUYWJDb250ZXh0TWVudUludGVybmFsLHQpfSxfb3BlblNhdmVNb2RhbDphc3luYyB0PT57YXdhaXQoMCxvLnhwKShlKTtyZXR1cm4oYXdhaXQoMCxjLkRtKShlKSkuZGlzcGF0Y2goYy55ei5PcGVuU2F2ZU1vZGFsSW50ZXJuYWwsdCl9LF9vcGVuU2F2ZUJ1dHRvbkNvbnRleHRNZW51OmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0KDAsby54cCkoZSk7cmV0dXJuIHQuaWRlbnRpdHk9ZSxuLmRpc3BhdGNoKG8uZm4uT3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsLHQpfSxfYWRkRGVmYXVsdFBhZ2U6YXN5bmMgdD0+e2NvbnN0IG49YXdhaXQoMCxvLnhwKShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goby5mbi5BZGREZWZhdWx0UGFnZSx0KX0sX3RyYWNrUmVtb3ZlZFRhYjphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5UcmFja1JlbW92ZWRUYWJJbnRlcm5hbCx0KSxfcmVzdG9yZVJlbW92ZWRUYWI6YXN5bmMgdD0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uUmVzdG9yZVJlbW92ZWRUYWJJbnRlcm5hbCx0KSxfdHJhY2tWaXNpdGVkU2l0ZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5UcmFja1Zpc2l0ZWRTaXRlSW50ZXJuYWwsdCksX2dldFJlY2VudGx5VmlzaXRlZFNpdGVzOmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLkdldFJlY2VudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWwsdCksX2dldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXM6YXN5bmMgdD0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uR2V0RnJlcXVlbnRseVZpc2l0ZWRTaXRlc0ludGVybmFsLHQpLF9zZWFyY2hTaXRlczphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5TZWFyY2hTaXRlc0ludGVybmFsLHtpZGVudGl0eTplLHJlcTp0fSksX2dldEN1cmF0ZWRDb250ZW50OmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLkdldEN1cmF0ZWRDb250ZW50SW50ZXJuYWwse2lkZW50aXR5OmUscmVxOnR9KSxfaGFuZGxlUmVxdWVzdE5hdmlnYXRpb246YXN5bmMgdD0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uSGFuZGxlUmVxdWVzdE5hdmlnYXRpb25JbnRlcm5hbCx0KX0pLHA9ZT0+e2NvbnN0IHQ9ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpO3JldHVybnt3cmFwU3luYzplPT5kKGUpLGNyZWF0ZVdpbmRvdzphc3luYyBuPT57Y29uc3Qgcj0oKCk9Pntjb25zdCBlPWBicm93c2VyLXdpbmRvdy1zdGFydHVwLSR7KDAscy5IKSgpfWA7cmV0dXJuIGwuWi5tYXJrU3RhcnQoZSksZX0pKCk7KGU9PntmaW4uQXBwbGljYXRpb24ud3JhcFN5bmMoe3V1aWQ6ZmluLm1lLmlkZW50aXR5LnV1aWR9KS5vbmNlKFwid2luZG93LXNob3duXCIsKCgpPT57bC5aLm1hcmtBbmRNZWFzdXJlKFwiYnJvd3Nlci13aW5kb3ctc2hvd25cIixlKX0pKX0pKHIpLGF3YWl0KDAsby54cCkoZSk7Y29uc3QgaT1hd2FpdCB0LmNyZWF0ZVdpbmRvdyhuKTtyZXR1cm4oZT0+e2wuWi5tYXJrQW5kTWVhc3VyZShcImJyb3dzZXItd2luZG93LXN0YXJ0ZWRcIixlKX0pKHIpLGQoaS5pZGVudGl0eSl9LGdldEFsbEF0dGFjaGVkUGFnZXM6YXN5bmMoKT0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uR2V0QWxsQXR0YWNoZWRQYWdlcyx2b2lkIDApLGdldEFsbFdpbmRvd3M6YXN5bmMoKT0+e2F3YWl0KDAsby54cCkoZSk7cmV0dXJuKGF3YWl0KDAsYS5HUCkoKSkubWFwKChlPT5kKGUuaWRlbnRpdHkpKSl9LGdldFVuaXF1ZVBhZ2VUaXRsZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5HZXRVbmlxdWVQYWdlVGl0bGUsdCksZ2V0TGFzdEZvY3VzZWRXaW5kb3c6YXN5bmMoKT0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uR2V0TGFzdEZvY3VzZWRCcm93c2VyV2luZG93LHZvaWQgMCl9fSxoPWU9Pih7Y3JlYXRlUGFnZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5DcmVhdGVTYXZlZFBhZ2VJbnRlcm5hbCx0KSxkZWxldGVQYWdlOmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLkRlbGV0ZVNhdmVkUGFnZUludGVybmFsLHQpLHVwZGF0ZVBhZ2U6YXN5bmMgdD0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uVXBkYXRlU2F2ZWRQYWdlSW50ZXJuYWwsdCksZ2V0UGFnZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5HZXRTYXZlZFBhZ2UsdCksZ2V0UGFnZXM6YXN5bmMgdD0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uR2V0U2F2ZWRQYWdlcyx0KSxzYXZlUGFnZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5TYXZlUGFnZSx0KSxjcmVhdGVXb3Jrc3BhY2U6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uQ3JlYXRlU2F2ZWRXb3Jrc3BhY2UsdCksZGVsZXRlV29ya3NwYWNlOmFzeW5jIHQ9Pntjb25zdCBuPXYoKSxyPWF3YWl0IG4uZ2V0Q3VycmVudFdvcmtzcGFjZSgpO2lmKHIud29ya3NwYWNlSWQ9PT10KXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGRlbGV0ZSBjdXJyZW50IGFjdGl2ZSB3b3Jrc3BhY2UgJHtyLnRpdGxlfWApO3JldHVybihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLkRlbGV0ZVNhdmVkV29ya3NwYWNlLHQpfSx1cGRhdGVXb3Jrc3BhY2U6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uVXBkYXRlU2F2ZWRXb3Jrc3BhY2UsdCksZ2V0V29ya3NwYWNlOmFzeW5jIHQ9Pihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLkdldFNhdmVkV29ya3NwYWNlLHQpLGdldFdvcmtzcGFjZXM6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uR2V0U2F2ZWRXb3Jrc3BhY2VzLHQpLHNhdmVXb3Jrc3BhY2U6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uU2F2ZVdvcmtzcGFjZSx0KSxnZXREb2NrUHJvdmlkZXJDb25maWc6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uR2V0RG9ja1Byb3ZpZGVyQ29uZmlnLHQpLHNhdmVEb2NrUHJvdmlkZXJDb25maWc6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uU2F2ZURvY2tQcm92aWRlckNvbmZpZyx0KX0pO3ZhciBnPW4oNzA1KTtjb25zdCB2PSgpPT4oZT0+e2NvbnN0IHQ9ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpO2xldCBuO3JldHVybiBPYmplY3QuYXNzaWduKHQse2FwcGx5U25hcHNob3Q6YXN5bmModCxuKT0+e2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0JiYhdD8ud2luZG93cyl0aHJvdyBuZXcgRXJyb3IoXCJOb3QgYSB2YWxpZCBicm93c2VyIHNuYXBzaG90XCIpO3JldHVybiBmaW4uUGxhdGZvcm0ud3JhcFN5bmMoZSkuYXBwbHlTbmFwc2hvdCh0LG4pfSxnZXRTbmFwc2hvdDooKT0+ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmdldFNuYXBzaG90KCkudGhlbigoZT0+ZSkpLGdldFZpZXdTbmFwc2hvdDp0PT5maW4uUGxhdGZvcm0ud3JhcFN5bmMoZSkuZ2V0Vmlld1NuYXBzaG90KHQpLGNyZWF0ZVZpZXc6KHQsbixyKT0+ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmNyZWF0ZVZpZXcodCxuLHIpLGxhdW5jaEFwcDphc3luYyB0PT4oY29uc29sZS53YXJuKFwibGF1bmNoQXBwIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgY3JlYXRlVmlldyAtIGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuZmluLmNvL29mLWRvY3MvZG9jcy9wbGF0Zm9ybS1nZXR0aW5nLXN0YXJ0ZWQjYWRkLWEtdmlldy10by1hbi1leGlzdGluZy13aW5kb3cgb3IgIGNyZWF0ZVdpbmRvdyAtIGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuZmluLmNvL29mLWRvY3MvZG9jcy9wbGF0Zm9ybS1nZXR0aW5nLXN0YXJ0ZWQjY3JlYXRlLWEtcGxhdGZvcm0td2luZG93IGluc3RlYWQuXCIpLHQudGFyZ2V0fHwodC50YXJnZXQ9e3V1aWQ6ci5BQixuYW1lOnIub0MsZW50aXR5VHlwZTpyLkNMfHxcInVua25vd25cIn0pLChhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLkxhdW5jaEFwcCx0KSksX2ludm9rZUN1c3RvbUFjdGlvbjphc3luYyh0LG4pPT57Y29uc3Qgcj1hd2FpdCgwLG8uajcpKGUpLGE9e2FjdGlvbklkOnQscGF5bG9hZDp7Li4ubixjYWxsZXJUeXBlOm4uY2FsbGVyVHlwZXx8aS4kZy5BUEl9fTtyZXR1cm4gci5kaXNwYXRjaChvLmZuLkludm9rZUN1c3RvbUFjdGlvbkludGVybmFsLGEpfSxfcmVxdWVzdFF1aXRQbGF0Zm9ybURpYWxvZzphc3luYyB0PT4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5SZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nSW50ZXJuYWwsdCksZ2V0Q3VycmVudFdvcmtzcGFjZTphc3luYygpPT4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5HZXRDdXJyZW50V29ya3NwYWNlLHZvaWQgMCksYXBwbHlXb3Jrc3BhY2U6YXN5bmModCxuKT0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uQXBwbHlXb3Jrc3BhY2Usey4uLnQsb3B0aW9uczpufSksc2V0QWN0aXZlV29ya3NwYWNlOmFzeW5jIHQ9Pihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLlNldEFjdGl2ZVdvcmtzcGFjZSx0KSxnZXRMYW5ndWFnZTphc3luYygpPT4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5HZXRMYW5ndWFnZSksX2dldExhbmd1YWdlUmVzb3VyY2VzOmFzeW5jKCk9Pihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLkdldExhbmd1YWdlUmVzb3VyY2VzSW50ZXJuYWwpLHNldExhbmd1YWdlOmFzeW5jIHQ9Pihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLlNldExhbmd1YWdlLHQpLF9yYWlzZUFuYWx5dGljczphc3luYyB0PT57aWYobnx8KG49YXdhaXQoMCxvLkhoKShlKSksXCJvYmplY3RcIj09dHlwZW9mIG4mJm4/LmFuYWx5dGljcz8uaXNTdXBwb3J0ZWQpcmV0dXJuKGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uQW5hbHl0aWNzLHQpO2UudXVpZH0sZ2V0Tm90aWZpY2F0aW9uc0NvbmZpZzphc3luYygpPT4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5HZXROb3RpZmljYXRpb25zQ29uZmlnKSxfcmVmcmVzaEJvb2ttYXJrc0ludGVybmFsOmFzeW5jKCk9Pihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLlJlZnJlc2hCb29rbWFya3NJbnRlcm5hbCksVGhlbWU6KDAsZy5QMCkoZSksQnJvd3NlcjpwKGUpLFN0b3JhZ2U6aChlKX0pfSkoZmluLm1lLmlkZW50aXR5KX0sNzA1OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7UDA6KCk9PmF9KTtuKDgwNjEpLG4oNDcyOCksbig2MDA1KSxuKDEyMSksbigxMTI3KTt2YXIgcj1uKDkxMTcpO3ZhciBvOyFmdW5jdGlvbihlKXtlLlVwZGF0ZVBsYXRmb3JtVGhlbWVTY2hlbWU9XCJ1cGRhdGUtcGxhdGZvcm0tdGhlbWUtc2NoZW1lXCJ9KG98fChvPXt9KSk7KDAsci5aKShcIm9mLXdvcmtzcGFjZS1ub3RpZmljYXRpb25zLXN5bmNcIik7big1MTUwKTt2YXIgaT1uKDU0MzgpO2NvbnN0IGE9ZT0+KHtnZXRUaGVtZXM6YXN5bmMoKT0+KGF3YWl0KDAsaS5qNykoZSkpLmRpc3BhdGNoKGkuZm4uR2V0VGhlbWVzLHZvaWQgMCksc2V0U2VsZWN0ZWRTY2hlbWU6YXN5bmMgdD0+KGF3YWl0KDAsaS5qNykoZSkpLmRpc3BhdGNoKGkuZm4uU2V0U2VsZWN0ZWRTY2hlbWUsdCksZ2V0U2VsZWN0ZWRTY2hlbWU6YXN5bmMoKT0+KGF3YWl0KDAsaS5qNykoZSkpLmRpc3BhdGNoKGkuZm4uR2V0U2VsZWN0ZWRTY2hlbWUsdm9pZCAwKX0pfSw4NjM2OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7YUE6KCk9PnEuYX0pO24oNzEwMCksbig4NDIzKTt2YXIgcj1uKDY2NzgpLG89KG4oNjUzMiksbig3Mzc4KSk7dmFyIGk9big1ODA2KTt2YXIgYT1uKDYwMDUpLGw9bigxMjEpO24oODMxMSksbigyMzA0KTtPYmplY3QuY3JlYXRlKG51bGwpOygwLG8uY3JlYXRlQ29udGV4dCkoKTtjb25zdCBzPXt0eXBlOlwibG9nZ2VyXCIsbG9nKGUpe3RoaXMub3V0cHV0KFwibG9nXCIsZSl9LHdhcm4oZSl7dGhpcy5vdXRwdXQoXCJ3YXJuXCIsZSl9LGVycm9yKGUpe3RoaXMub3V0cHV0KFwiZXJyb3JcIixlKX0sb3V0cHV0KGUsdCl7Y29uc29sZSYmY29uc29sZVtlXSYmY29uc29sZVtlXS5hcHBseShjb25zb2xlLHQpfX07Y2xhc3MgY3tjb25zdHJ1Y3RvcihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307dGhpcy5pbml0KGUsdCl9aW5pdChlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307dGhpcy5wcmVmaXg9dC5wcmVmaXh8fFwiaTE4bmV4dDpcIix0aGlzLmxvZ2dlcj1lfHxzLHRoaXMub3B0aW9ucz10LHRoaXMuZGVidWc9dC5kZWJ1Z31sb2coKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gdGhpcy5mb3J3YXJkKHQsXCJsb2dcIixcIlwiLCEwKX13YXJuKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHRoaXMuZm9yd2FyZCh0LFwid2FyblwiLFwiXCIsITApfWVycm9yKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHRoaXMuZm9yd2FyZCh0LFwiZXJyb3JcIixcIlwiKX1kZXByZWNhdGUoKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gdGhpcy5mb3J3YXJkKHQsXCJ3YXJuXCIsXCJXQVJOSU5HIERFUFJFQ0FURUQ6IFwiLCEwKX1mb3J3YXJkKGUsdCxuLHIpe3JldHVybiByJiYhdGhpcy5kZWJ1Zz9udWxsOihcInN0cmluZ1wiPT10eXBlb2YgZVswXSYmKGVbMF09YCR7bn0ke3RoaXMucHJlZml4fSAke2VbMF19YCksdGhpcy5sb2dnZXJbdF0oZSkpfWNyZWF0ZShlKXtyZXR1cm4gbmV3IGModGhpcy5sb2dnZXIse3ByZWZpeDpgJHt0aGlzLnByZWZpeH06JHtlfTpgLC4uLnRoaXMub3B0aW9uc30pfWNsb25lKGUpe3JldHVybihlPWV8fHRoaXMub3B0aW9ucykucHJlZml4PWUucHJlZml4fHx0aGlzLnByZWZpeCxuZXcgYyh0aGlzLmxvZ2dlcixlKX19dmFyIHU9bmV3IGM7Y2xhc3MgZntjb25zdHJ1Y3Rvcigpe3RoaXMub2JzZXJ2ZXJzPXt9fW9uKGUsdCl7cmV0dXJuIGUuc3BsaXQoXCIgXCIpLmZvckVhY2goKGU9Pnt0aGlzLm9ic2VydmVyc1tlXXx8KHRoaXMub2JzZXJ2ZXJzW2VdPW5ldyBNYXApO2NvbnN0IG49dGhpcy5vYnNlcnZlcnNbZV0uZ2V0KHQpfHwwO3RoaXMub2JzZXJ2ZXJzW2VdLnNldCh0LG4rMSl9KSksdGhpc31vZmYoZSx0KXt0aGlzLm9ic2VydmVyc1tlXSYmKHQ/dGhpcy5vYnNlcnZlcnNbZV0uZGVsZXRlKHQpOmRlbGV0ZSB0aGlzLm9ic2VydmVyc1tlXSl9ZW1pdChlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07aWYodGhpcy5vYnNlcnZlcnNbZV0pe0FycmF5LmZyb20odGhpcy5vYnNlcnZlcnNbZV0uZW50cmllcygpKS5mb3JFYWNoKChlPT57bGV0W3Qscl09ZTtmb3IobGV0IGU9MDtlPHI7ZSsrKXQoLi4ubil9KSl9aWYodGhpcy5vYnNlcnZlcnNbXCIqXCJdKXtBcnJheS5mcm9tKHRoaXMub2JzZXJ2ZXJzW1wiKlwiXS5lbnRyaWVzKCkpLmZvckVhY2goKHQ9PntsZXRbcixvXT10O2ZvcihsZXQgdD0wO3Q8bzt0Kyspci5hcHBseShyLFtlLC4uLm5dKX0pKX19fWZ1bmN0aW9uIGQoKXtsZXQgZSx0O2NvbnN0IG49bmV3IFByb21pc2UoKChuLHIpPT57ZT1uLHQ9cn0pKTtyZXR1cm4gbi5yZXNvbHZlPWUsbi5yZWplY3Q9dCxufWZ1bmN0aW9uIHAoZSl7cmV0dXJuIG51bGw9PWU/XCJcIjpcIlwiK2V9Y29uc3QgaD0vIyMjL2c7ZnVuY3Rpb24gZyhlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5pbmRleE9mKFwiIyMjXCIpPi0xP2UucmVwbGFjZShoLFwiLlwiKTplfWZ1bmN0aW9uIG8oKXtyZXR1cm4hZXx8XCJzdHJpbmdcIj09dHlwZW9mIGV9Y29uc3QgaT1cInN0cmluZ1wiIT10eXBlb2YgdD90OnQuc3BsaXQoXCIuXCIpO2xldCBhPTA7Zm9yKDthPGkubGVuZ3RoLTE7KXtpZihvKCkpcmV0dXJue307Y29uc3QgdD1yKGlbYV0pOyFlW3RdJiZuJiYoZVt0XT1uZXcgbiksZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KT9lW3RdOnt9LCsrYX1yZXR1cm4gbygpP3t9OntvYmo6ZSxrOnIoaVthXSl9fWZ1bmN0aW9uIHYoZSx0LG4pe2NvbnN0e29iajpyLGs6b309ZyhlLHQsT2JqZWN0KTtpZih2b2lkIDAhPT1yfHwxPT09dC5sZW5ndGgpcmV0dXJuIHZvaWQocltvXT1uKTtsZXQgaT10W3QubGVuZ3RoLTFdLGE9dC5zbGljZSgwLHQubGVuZ3RoLTEpLGw9ZyhlLGEsT2JqZWN0KTtmb3IoO3ZvaWQgMD09PWwub2JqJiZhLmxlbmd0aDspaT1gJHthW2EubGVuZ3RoLTFdfS4ke2l9YCxhPWEuc2xpY2UoMCxhLmxlbmd0aC0xKSxsPWcoZSxhLE9iamVjdCksbCYmbC5vYmomJnZvaWQgMCE9PWwub2JqW2Ake2wua30uJHtpfWBdJiYobC5vYmo9dm9pZCAwKTtsLm9ialtgJHtsLmt9LiR7aX1gXT1ufWZ1bmN0aW9uIG0oZSx0KXtjb25zdHtvYmo6bixrOnJ9PWcoZSx0KTtpZihuKXJldHVybiBuW3JdfWZ1bmN0aW9uIEMoZSx0LG4pe2Zvcihjb25zdCByIGluIHQpXCJfX3Byb3RvX19cIiE9PXImJlwiY29uc3RydWN0b3JcIiE9PXImJihyIGluIGU/XCJzdHJpbmdcIj09dHlwZW9mIGVbcl18fGVbcl1pbnN0YW5jZW9mIFN0cmluZ3x8XCJzdHJpbmdcIj09dHlwZW9mIHRbcl18fHRbcl1pbnN0YW5jZW9mIFN0cmluZz9uJiYoZVtyXT10W3JdKTpDKGVbcl0sdFtyXSxuKTplW3JdPXRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIHkoZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xcLVxcW1xcXVxcL1xce1xcfVxcKFxcKVxcKlxcK1xcP1xcLlxcXFxcXF5cXCRcXHxdL2csXCJcXFxcJCZcIil9dmFyIHc9e1wiJlwiOlwiJmFtcDtcIixcIjxcIjpcIiZsdDtcIixcIj5cIjpcIiZndDtcIiwnXCInOlwiJnF1b3Q7XCIsXCInXCI6XCImIzM5O1wiLFwiL1wiOlwiJiN4MkY7XCJ9O2Z1bmN0aW9uIGIoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/ZS5yZXBsYWNlKC9bJjw+XCInXFwvXS9nLChlPT53W2VdKSk6ZX1jb25zdCB4PVtcIiBcIixcIixcIixcIj9cIixcIiFcIixcIjtcIl0sXz1uZXcgY2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5jYXBhY2l0eT1lLHRoaXMucmVnRXhwTWFwPW5ldyBNYXAsdGhpcy5yZWdFeHBRdWV1ZT1bXX1nZXRSZWdFeHAoZSl7Y29uc3QgdD10aGlzLnJlZ0V4cE1hcC5nZXQoZSk7aWYodm9pZCAwIT09dClyZXR1cm4gdDtjb25zdCBuPW5ldyBSZWdFeHAoZSk7cmV0dXJuIHRoaXMucmVnRXhwUXVldWUubGVuZ3RoPT09dGhpcy5jYXBhY2l0eSYmdGhpcy5yZWdFeHBNYXAuZGVsZXRlKHRoaXMucmVnRXhwUXVldWUuc2hpZnQoKSksdGhpcy5yZWdFeHBNYXAuc2V0KGUsbiksdGhpcy5yZWdFeHBRdWV1ZS5wdXNoKGUpLG59fSgyMCk7ZnVuY3Rpb24gTyhlLHQpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpcIi5cIjtpZighZSlyZXR1cm47aWYoZVt0XSlyZXR1cm4gZVt0XTtjb25zdCByPXQuc3BsaXQobik7bGV0IG89ZTtmb3IobGV0IGU9MDtlPHIubGVuZ3RoOyl7aWYoIW98fFwib2JqZWN0XCIhPXR5cGVvZiBvKXJldHVybjtsZXQgdCxpPVwiXCI7Zm9yKGxldCBhPWU7YTxyLmxlbmd0aDsrK2EpaWYoYSE9PWUmJihpKz1uKSxpKz1yW2FdLHQ9b1tpXSx2b2lkIDAhPT10KXtpZihbXCJzdHJpbmdcIixcIm51bWJlclwiLFwiYm9vbGVhblwiXS5pbmRleE9mKHR5cGVvZiB0KT4tMSYmYTxyLmxlbmd0aC0xKWNvbnRpbnVlO2UrPWEtZSsxO2JyZWFrfW89dH1yZXR1cm4gb31mdW5jdGlvbiBMKGUpe3JldHVybiBlJiZlLmluZGV4T2YoXCJfXCIpPjA/ZS5yZXBsYWNlKFwiX1wiLFwiLVwiKTplfWNsYXNzIEUgZXh0ZW5kcyBme2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7bnM6W1widHJhbnNsYXRpb25cIl0sZGVmYXVsdE5TOlwidHJhbnNsYXRpb25cIn07c3VwZXIoKSx0aGlzLmRhdGE9ZXx8e30sdGhpcy5vcHRpb25zPXQsdm9pZCAwPT09dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciYmKHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I9XCIuXCIpLHZvaWQgMD09PXRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlJiYodGhpcy5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmU9ITApfWFkZE5hbWVzcGFjZXMoZSl7dGhpcy5vcHRpb25zLm5zLmluZGV4T2YoZSk8MCYmdGhpcy5vcHRpb25zLm5zLnB1c2goZSl9cmVtb3ZlTmFtZXNwYWNlcyhlKXtjb25zdCB0PXRoaXMub3B0aW9ucy5ucy5pbmRleE9mKGUpO3Q+LTEmJnRoaXMub3B0aW9ucy5ucy5zcGxpY2UodCwxKX1nZXRSZXNvdXJjZShlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O2NvbnN0IG89dm9pZCAwIT09ci5rZXlTZXBhcmF0b3I/ci5rZXlTZXBhcmF0b3I6dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcixpPXZvaWQgMCE9PXIuaWdub3JlSlNPTlN0cnVjdHVyZT9yLmlnbm9yZUpTT05TdHJ1Y3R1cmU6dGhpcy5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmU7bGV0IGE7ZS5pbmRleE9mKFwiLlwiKT4tMT9hPWUuc3BsaXQoXCIuXCIpOihhPVtlLHRdLG4mJihBcnJheS5pc0FycmF5KG4pP2EucHVzaCguLi5uKTpcInN0cmluZ1wiPT10eXBlb2YgbiYmbz9hLnB1c2goLi4ubi5zcGxpdChvKSk6YS5wdXNoKG4pKSk7Y29uc3QgbD1tKHRoaXMuZGF0YSxhKTtyZXR1cm4hbCYmIXQmJiFuJiZlLmluZGV4T2YoXCIuXCIpPi0xJiYoZT1hWzBdLHQ9YVsxXSxuPWEuc2xpY2UoMikuam9pbihcIi5cIikpLGx8fCFpfHxcInN0cmluZ1wiIT10eXBlb2Ygbj9sOk8odGhpcy5kYXRhJiZ0aGlzLmRhdGFbZV0mJnRoaXMuZGF0YVtlXVt0XSxuLG8pfWFkZFJlc291cmNlKGUsdCxuLHIpe2xldCBvPWFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdP2FyZ3VtZW50c1s0XTp7c2lsZW50OiExfTtjb25zdCBpPXZvaWQgMCE9PW8ua2V5U2VwYXJhdG9yP28ua2V5U2VwYXJhdG9yOnRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I7bGV0IGE9W2UsdF07biYmKGE9YS5jb25jYXQoaT9uLnNwbGl0KGkpOm4pKSxlLmluZGV4T2YoXCIuXCIpPi0xJiYoYT1lLnNwbGl0KFwiLlwiKSxyPXQsdD1hWzFdKSx0aGlzLmFkZE5hbWVzcGFjZXModCksdih0aGlzLmRhdGEsYSxyKSxvLnNpbGVudHx8dGhpcy5lbWl0KFwiYWRkZWRcIixlLHQsbixyKX1hZGRSZXNvdXJjZXMoZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7c2lsZW50OiExfTtmb3IoY29uc3QgciBpbiBuKVwic3RyaW5nXCIhPXR5cGVvZiBuW3JdJiZcIltvYmplY3QgQXJyYXldXCIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KG5bcl0pfHx0aGlzLmFkZFJlc291cmNlKGUsdCxyLG5bcl0se3NpbGVudDohMH0pO3Iuc2lsZW50fHx0aGlzLmVtaXQoXCJhZGRlZFwiLGUsdCxuKX1hZGRSZXNvdXJjZUJ1bmRsZShlLHQsbixyLG8pe2xldCBpPWFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdP2FyZ3VtZW50c1s1XTp7c2lsZW50OiExfSxhPVtlLHRdO2UuaW5kZXhPZihcIi5cIik+LTEmJihhPWUuc3BsaXQoXCIuXCIpLHI9bixuPXQsdD1hWzFdKSx0aGlzLmFkZE5hbWVzcGFjZXModCk7bGV0IGw9bSh0aGlzLmRhdGEsYSl8fHt9O3I/QyhsLG4sbyk6bD17Li4ubCwuLi5ufSx2KHRoaXMuZGF0YSxhLGwpLGkuc2lsZW50fHx0aGlzLmVtaXQoXCJhZGRlZFwiLGUsdCxuKX1yZW1vdmVSZXNvdXJjZUJ1bmRsZShlLHQpe3RoaXMuaGFzUmVzb3VyY2VCdW5kbGUoZSx0KSYmZGVsZXRlIHRoaXMuZGF0YVtlXVt0XSx0aGlzLnJlbW92ZU5hbWVzcGFjZXModCksdGhpcy5lbWl0KFwicmVtb3ZlZFwiLGUsdCl9aGFzUmVzb3VyY2VCdW5kbGUoZSx0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5nZXRSZXNvdXJjZShlLHQpfWdldFJlc291cmNlQnVuZGxlKGUsdCl7cmV0dXJuIHR8fCh0PXRoaXMub3B0aW9ucy5kZWZhdWx0TlMpLFwidjFcIj09PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJP3suLi50aGlzLmdldFJlc291cmNlKGUsdCl9OnRoaXMuZ2V0UmVzb3VyY2UoZSx0KX1nZXREYXRhQnlMYW5ndWFnZShlKXtyZXR1cm4gdGhpcy5kYXRhW2VdfWhhc0xhbmd1YWdlU29tZVRyYW5zbGF0aW9ucyhlKXtjb25zdCB0PXRoaXMuZ2V0RGF0YUJ5TGFuZ3VhZ2UoZSk7cmV0dXJuISEodCYmT2JqZWN0LmtleXModCl8fFtdKS5maW5kKChlPT50W2VdJiZPYmplY3Qua2V5cyh0W2VdKS5sZW5ndGg+MCkpfXRvSlNPTigpe3JldHVybiB0aGlzLmRhdGF9fXZhciBTPXtwcm9jZXNzb3JzOnt9LGFkZFBvc3RQcm9jZXNzb3IoZSl7dGhpcy5wcm9jZXNzb3JzW2UubmFtZV09ZX0saGFuZGxlKGUsdCxuLHIsbyl7cmV0dXJuIGUuZm9yRWFjaCgoZT0+e3RoaXMucHJvY2Vzc29yc1tlXSYmKHQ9dGhpcy5wcm9jZXNzb3JzW2VdLnByb2Nlc3ModCxuLHIsbykpfSkpLHR9fTtjb25zdCBqPXt9O2NsYXNzIE0gZXh0ZW5kcyBme2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtzdXBlcigpLGZ1bmN0aW9uKGUsdCxuKXtlLmZvckVhY2goKGU9Pnt0W2VdJiYobltlXT10W2VdKX0pKX0oW1wicmVzb3VyY2VTdG9yZVwiLFwibGFuZ3VhZ2VVdGlsc1wiLFwicGx1cmFsUmVzb2x2ZXJcIixcImludGVycG9sYXRvclwiLFwiYmFja2VuZENvbm5lY3RvclwiLFwiaTE4bkZvcm1hdFwiLFwidXRpbHNcIl0sZSx0aGlzKSx0aGlzLm9wdGlvbnM9dCx2b2lkIDA9PT10aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yJiYodGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcj1cIi5cIiksdGhpcy5sb2dnZXI9dS5jcmVhdGUoXCJ0cmFuc2xhdG9yXCIpfWNoYW5nZUxhbmd1YWdlKGUpe2UmJih0aGlzLmxhbmd1YWdlPWUpfWV4aXN0cyhlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2ludGVycG9sYXRpb246e319O2lmKG51bGw9PWUpcmV0dXJuITE7Y29uc3Qgbj10aGlzLnJlc29sdmUoZSx0KTtyZXR1cm4gbiYmdm9pZCAwIT09bi5yZXN9ZXh0cmFjdEZyb21LZXkoZSx0KXtsZXQgbj12b2lkIDAhPT10Lm5zU2VwYXJhdG9yP3QubnNTZXBhcmF0b3I6dGhpcy5vcHRpb25zLm5zU2VwYXJhdG9yO3ZvaWQgMD09PW4mJihuPVwiOlwiKTtjb25zdCByPXZvaWQgMCE9PXQua2V5U2VwYXJhdG9yP3Qua2V5U2VwYXJhdG9yOnRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I7bGV0IG89dC5uc3x8dGhpcy5vcHRpb25zLmRlZmF1bHROU3x8W107Y29uc3QgaT1uJiZlLmluZGV4T2Yobik+LTEsYT0hKHRoaXMub3B0aW9ucy51c2VyRGVmaW5lZEtleVNlcGFyYXRvcnx8dC5rZXlTZXBhcmF0b3J8fHRoaXMub3B0aW9ucy51c2VyRGVmaW5lZE5zU2VwYXJhdG9yfHx0Lm5zU2VwYXJhdG9yfHxmdW5jdGlvbihlLHQsbil7dD10fHxcIlwiLG49bnx8XCJcIjtjb25zdCByPXguZmlsdGVyKChlPT50LmluZGV4T2YoZSk8MCYmbi5pbmRleE9mKGUpPDApKTtpZigwPT09ci5sZW5ndGgpcmV0dXJuITA7Y29uc3Qgbz1fLmdldFJlZ0V4cChgKCR7ci5tYXAoKGU9PlwiP1wiPT09ZT9cIlxcXFw/XCI6ZSkpLmpvaW4oXCJ8XCIpfSlgKTtsZXQgaT0hby50ZXN0KGUpO2lmKCFpKXtjb25zdCB0PWUuaW5kZXhPZihuKTt0PjAmJiFvLnRlc3QoZS5zdWJzdHJpbmcoMCx0KSkmJihpPSEwKX1yZXR1cm4gaX0oZSxuLHIpKTtpZihpJiYhYSl7Y29uc3QgdD1lLm1hdGNoKHRoaXMuaW50ZXJwb2xhdG9yLm5lc3RpbmdSZWdleHApO2lmKHQmJnQubGVuZ3RoPjApcmV0dXJue2tleTplLG5hbWVzcGFjZXM6b307Y29uc3QgaT1lLnNwbGl0KG4pOyhuIT09cnx8bj09PXImJnRoaXMub3B0aW9ucy5ucy5pbmRleE9mKGlbMF0pPi0xKSYmKG89aS5zaGlmdCgpKSxlPWkuam9pbihyKX1yZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgbyYmKG89W29dKSx7a2V5OmUsbmFtZXNwYWNlczpvfX10cmFuc2xhdGUoZSx0LG4pe2lmKFwib2JqZWN0XCIhPXR5cGVvZiB0JiZ0aGlzLm9wdGlvbnMub3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXImJih0PXRoaXMub3B0aW9ucy5vdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlcihhcmd1bWVudHMpKSxcIm9iamVjdFwiPT10eXBlb2YgdCYmKHQ9ey4uLnR9KSx0fHwodD17fSksbnVsbD09ZSlyZXR1cm5cIlwiO0FycmF5LmlzQXJyYXkoZSl8fChlPVtTdHJpbmcoZSldKTtjb25zdCByPXZvaWQgMCE9PXQucmV0dXJuRGV0YWlscz90LnJldHVybkRldGFpbHM6dGhpcy5vcHRpb25zLnJldHVybkRldGFpbHMsbz12b2lkIDAhPT10LmtleVNlcGFyYXRvcj90LmtleVNlcGFyYXRvcjp0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yLHtrZXk6aSxuYW1lc3BhY2VzOmF9PXRoaXMuZXh0cmFjdEZyb21LZXkoZVtlLmxlbmd0aC0xXSx0KSxsPWFbYS5sZW5ndGgtMV0scz10LmxuZ3x8dGhpcy5sYW5ndWFnZSxjPXQuYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGV8fHRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb0NJTW9kZTtpZihzJiZcImNpbW9kZVwiPT09cy50b0xvd2VyQ2FzZSgpKXtpZihjKXtjb25zdCBlPXQubnNTZXBhcmF0b3J8fHRoaXMub3B0aW9ucy5uc1NlcGFyYXRvcjtyZXR1cm4gcj97cmVzOmAke2x9JHtlfSR7aX1gLHVzZWRLZXk6aSxleGFjdFVzZWRLZXk6aSx1c2VkTG5nOnMsdXNlZE5TOmwsdXNlZFBhcmFtczp0aGlzLmdldFVzZWRQYXJhbXNEZXRhaWxzKHQpfTpgJHtsfSR7ZX0ke2l9YH1yZXR1cm4gcj97cmVzOmksdXNlZEtleTppLGV4YWN0VXNlZEtleTppLHVzZWRMbmc6cyx1c2VkTlM6bCx1c2VkUGFyYW1zOnRoaXMuZ2V0VXNlZFBhcmFtc0RldGFpbHModCl9Oml9Y29uc3QgdT10aGlzLnJlc29sdmUoZSx0KTtsZXQgZj11JiZ1LnJlcztjb25zdCBkPXUmJnUudXNlZEtleXx8aSxwPXUmJnUuZXhhY3RVc2VkS2V5fHxpLGg9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShmKSxnPXZvaWQgMCE9PXQuam9pbkFycmF5cz90LmpvaW5BcnJheXM6dGhpcy5vcHRpb25zLmpvaW5BcnJheXMsdj0hdGhpcy5pMThuRm9ybWF0fHx0aGlzLmkxOG5Gb3JtYXQuaGFuZGxlQXNPYmplY3Q7aWYodiYmZiYmKFwic3RyaW5nXCIhPXR5cGVvZiBmJiZcImJvb2xlYW5cIiE9dHlwZW9mIGYmJlwibnVtYmVyXCIhPXR5cGVvZiBmKSYmW1wiW29iamVjdCBOdW1iZXJdXCIsXCJbb2JqZWN0IEZ1bmN0aW9uXVwiLFwiW29iamVjdCBSZWdFeHBdXCJdLmluZGV4T2YoaCk8MCYmKFwic3RyaW5nXCIhPXR5cGVvZiBnfHxcIltvYmplY3QgQXJyYXldXCIhPT1oKSl7aWYoIXQucmV0dXJuT2JqZWN0cyYmIXRoaXMub3B0aW9ucy5yZXR1cm5PYmplY3RzKXt0aGlzLm9wdGlvbnMucmV0dXJuZWRPYmplY3RIYW5kbGVyfHx0aGlzLmxvZ2dlci53YXJuKFwiYWNjZXNzaW5nIGFuIG9iamVjdCAtIGJ1dCByZXR1cm5PYmplY3RzIG9wdGlvbnMgaXMgbm90IGVuYWJsZWQhXCIpO2NvbnN0IGU9dGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlcj90aGlzLm9wdGlvbnMucmV0dXJuZWRPYmplY3RIYW5kbGVyKGQsZix7Li4udCxuczphfSk6YGtleSAnJHtpfSAoJHt0aGlzLmxhbmd1YWdlfSknIHJldHVybmVkIGFuIG9iamVjdCBpbnN0ZWFkIG9mIHN0cmluZy5gO3JldHVybiByPyh1LnJlcz1lLHUudXNlZFBhcmFtcz10aGlzLmdldFVzZWRQYXJhbXNEZXRhaWxzKHQpLHUpOmV9aWYobyl7Y29uc3QgZT1cIltvYmplY3QgQXJyYXldXCI9PT1oLG49ZT9bXTp7fSxyPWU/cDpkO2Zvcihjb25zdCBlIGluIGYpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsZSkpe2NvbnN0IGk9YCR7cn0ke299JHtlfWA7bltlXT10aGlzLnRyYW5zbGF0ZShpLHsuLi50LGpvaW5BcnJheXM6ITEsbnM6YX0pLG5bZV09PT1pJiYobltlXT1mW2VdKX1mPW59fWVsc2UgaWYodiYmXCJzdHJpbmdcIj09dHlwZW9mIGcmJlwiW29iamVjdCBBcnJheV1cIj09PWgpZj1mLmpvaW4oZyksZiYmKGY9dGhpcy5leHRlbmRUcmFuc2xhdGlvbihmLGUsdCxuKSk7ZWxzZXtsZXQgcj0hMSxhPSExO2NvbnN0IGM9dm9pZCAwIT09dC5jb3VudCYmXCJzdHJpbmdcIiE9dHlwZW9mIHQuY291bnQsZD1NLmhhc0RlZmF1bHRWYWx1ZSh0KSxwPWM/dGhpcy5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXgocyx0LmNvdW50LHQpOlwiXCIsaD10Lm9yZGluYWwmJmM/dGhpcy5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXgocyx0LmNvdW50LHtvcmRpbmFsOiExfSk6XCJcIixnPWMmJiF0Lm9yZGluYWwmJjA9PT10LmNvdW50JiZ0aGlzLnBsdXJhbFJlc29sdmVyLnNob3VsZFVzZUludGxBcGkoKSx2PWcmJnRbYGRlZmF1bHRWYWx1ZSR7dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcn16ZXJvYF18fHRbYGRlZmF1bHRWYWx1ZSR7cH1gXXx8dFtgZGVmYXVsdFZhbHVlJHtofWBdfHx0LmRlZmF1bHRWYWx1ZTshdGhpcy5pc1ZhbGlkTG9va3VwKGYpJiZkJiYocj0hMCxmPXYpLHRoaXMuaXNWYWxpZExvb2t1cChmKXx8KGE9ITAsZj1pKTtjb25zdCBtPSh0Lm1pc3NpbmdLZXlOb1ZhbHVlRmFsbGJhY2tUb0tleXx8dGhpcy5vcHRpb25zLm1pc3NpbmdLZXlOb1ZhbHVlRmFsbGJhY2tUb0tleSkmJmE/dm9pZCAwOmYsQz1kJiZ2IT09ZiYmdGhpcy5vcHRpb25zLnVwZGF0ZU1pc3Npbmc7aWYoYXx8cnx8Qyl7aWYodGhpcy5sb2dnZXIubG9nKEM/XCJ1cGRhdGVLZXlcIjpcIm1pc3NpbmdLZXlcIixzLGwsaSxDP3Y6Ziksbyl7Y29uc3QgZT10aGlzLnJlc29sdmUoaSx7Li4udCxrZXlTZXBhcmF0b3I6ITF9KTtlJiZlLnJlcyYmdGhpcy5sb2dnZXIud2FybihcIlNlZW1zIHRoZSBsb2FkZWQgdHJhbnNsYXRpb25zIHdlcmUgaW4gZmxhdCBKU09OIGZvcm1hdCBpbnN0ZWFkIG9mIG5lc3RlZC4gRWl0aGVyIHNldCBrZXlTZXBhcmF0b3I6IGZhbHNlIG9uIGluaXQgb3IgbWFrZSBzdXJlIHlvdXIgdHJhbnNsYXRpb25zIGFyZSBwdWJsaXNoZWQgaW4gbmVzdGVkIGZvcm1hdC5cIil9bGV0IGU9W107Y29uc3Qgbj10aGlzLmxhbmd1YWdlVXRpbHMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcsdC5sbmd8fHRoaXMubGFuZ3VhZ2UpO2lmKFwiZmFsbGJhY2tcIj09PXRoaXMub3B0aW9ucy5zYXZlTWlzc2luZ1RvJiZuJiZuWzBdKWZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKWUucHVzaChuW3RdKTtlbHNlXCJhbGxcIj09PXRoaXMub3B0aW9ucy5zYXZlTWlzc2luZ1RvP2U9dGhpcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeSh0LmxuZ3x8dGhpcy5sYW5ndWFnZSk6ZS5wdXNoKHQubG5nfHx0aGlzLmxhbmd1YWdlKTtjb25zdCByPShlLG4scik9Pntjb25zdCBvPWQmJnIhPT1mP3I6bTt0aGlzLm9wdGlvbnMubWlzc2luZ0tleUhhbmRsZXI/dGhpcy5vcHRpb25zLm1pc3NpbmdLZXlIYW5kbGVyKGUsbCxuLG8sQyx0KTp0aGlzLmJhY2tlbmRDb25uZWN0b3ImJnRoaXMuYmFja2VuZENvbm5lY3Rvci5zYXZlTWlzc2luZyYmdGhpcy5iYWNrZW5kQ29ubmVjdG9yLnNhdmVNaXNzaW5nKGUsbCxuLG8sQyx0KSx0aGlzLmVtaXQoXCJtaXNzaW5nS2V5XCIsZSxsLG4sZil9O3RoaXMub3B0aW9ucy5zYXZlTWlzc2luZyYmKHRoaXMub3B0aW9ucy5zYXZlTWlzc2luZ1BsdXJhbHMmJmM/ZS5mb3JFYWNoKChlPT57Y29uc3Qgbj10aGlzLnBsdXJhbFJlc29sdmVyLmdldFN1ZmZpeGVzKGUsdCk7ZyYmdFtgZGVmYXVsdFZhbHVlJHt0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yfXplcm9gXSYmbi5pbmRleE9mKGAke3RoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3J9emVyb2ApPDAmJm4ucHVzaChgJHt0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yfXplcm9gKSxuLmZvckVhY2goKG49PntyKFtlXSxpK24sdFtgZGVmYXVsdFZhbHVlJHtufWBdfHx2KX0pKX0pKTpyKGUsaSx2KSl9Zj10aGlzLmV4dGVuZFRyYW5zbGF0aW9uKGYsZSx0LHUsbiksYSYmZj09PWkmJnRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb01pc3NpbmdLZXkmJihmPWAke2x9OiR7aX1gKSwoYXx8cikmJnRoaXMub3B0aW9ucy5wYXJzZU1pc3NpbmdLZXlIYW5kbGVyJiYoZj1cInYxXCIhPT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQST90aGlzLm9wdGlvbnMucGFyc2VNaXNzaW5nS2V5SGFuZGxlcih0aGlzLm9wdGlvbnMuYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5P2Ake2x9OiR7aX1gOmkscj9mOnZvaWQgMCk6dGhpcy5vcHRpb25zLnBhcnNlTWlzc2luZ0tleUhhbmRsZXIoZikpfXJldHVybiByPyh1LnJlcz1mLHUudXNlZFBhcmFtcz10aGlzLmdldFVzZWRQYXJhbXNEZXRhaWxzKHQpLHUpOmZ9ZXh0ZW5kVHJhbnNsYXRpb24oZSx0LG4scixvKXt2YXIgaT10aGlzO2lmKHRoaXMuaTE4bkZvcm1hdCYmdGhpcy5pMThuRm9ybWF0LnBhcnNlKWU9dGhpcy5pMThuRm9ybWF0LnBhcnNlKGUsey4uLnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMsLi4ubn0sbi5sbmd8fHRoaXMubGFuZ3VhZ2V8fHIudXNlZExuZyxyLnVzZWROUyxyLnVzZWRLZXkse3Jlc29sdmVkOnJ9KTtlbHNlIGlmKCFuLnNraXBJbnRlcnBvbGF0aW9uKXtuLmludGVycG9sYXRpb24mJnRoaXMuaW50ZXJwb2xhdG9yLmluaXQoey4uLm4saW50ZXJwb2xhdGlvbjp7Li4udGhpcy5vcHRpb25zLmludGVycG9sYXRpb24sLi4ubi5pbnRlcnBvbGF0aW9ufX0pO2NvbnN0IGE9XCJzdHJpbmdcIj09dHlwZW9mIGUmJihuJiZuLmludGVycG9sYXRpb24mJnZvaWQgMCE9PW4uaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM/bi5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlczp0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXMpO2xldCBsO2lmKGEpe2NvbnN0IHQ9ZS5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTtsPXQmJnQubGVuZ3RofWxldCBzPW4ucmVwbGFjZSYmXCJzdHJpbmdcIiE9dHlwZW9mIG4ucmVwbGFjZT9uLnJlcGxhY2U6bjtpZih0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzJiYocz17Li4udGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcywuLi5zfSksZT10aGlzLmludGVycG9sYXRvci5pbnRlcnBvbGF0ZShlLHMsbi5sbmd8fHRoaXMubGFuZ3VhZ2UsbiksYSl7Y29uc3QgdD1lLm1hdGNoKHRoaXMuaW50ZXJwb2xhdG9yLm5lc3RpbmdSZWdleHApO2w8KHQmJnQubGVuZ3RoKSYmKG4ubmVzdD0hMSl9IW4ubG5nJiZcInYxXCIhPT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQSSYmciYmci5yZXMmJihuLmxuZz1yLnVzZWRMbmcpLCExIT09bi5uZXN0JiYoZT10aGlzLmludGVycG9sYXRvci5uZXN0KGUsKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksYT0wO2E8ZTthKyspclthXT1hcmd1bWVudHNbYV07cmV0dXJuIG8mJm9bMF09PT1yWzBdJiYhbi5jb250ZXh0PyhpLmxvZ2dlci53YXJuKGBJdCBzZWVtcyB5b3UgYXJlIG5lc3RpbmcgcmVjdXJzaXZlbHkga2V5OiAke3JbMF19IGluIGtleTogJHt0WzBdfWApLG51bGwpOmkudHJhbnNsYXRlKC4uLnIsdCl9KSxuKSksbi5pbnRlcnBvbGF0aW9uJiZ0aGlzLmludGVycG9sYXRvci5yZXNldCgpfWNvbnN0IGE9bi5wb3N0UHJvY2Vzc3x8dGhpcy5vcHRpb25zLnBvc3RQcm9jZXNzLGw9XCJzdHJpbmdcIj09dHlwZW9mIGE/W2FdOmE7cmV0dXJuIG51bGwhPWUmJmwmJmwubGVuZ3RoJiYhMSE9PW4uYXBwbHlQb3N0UHJvY2Vzc29yJiYoZT1TLmhhbmRsZShsLGUsdCx0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5wb3N0UHJvY2Vzc1Bhc3NSZXNvbHZlZD97aTE4blJlc29sdmVkOnsuLi5yLHVzZWRQYXJhbXM6dGhpcy5nZXRVc2VkUGFyYW1zRGV0YWlscyhuKX0sLi4ubn06bix0aGlzKSksZX1yZXNvbHZlKGUpe2xldCB0LG4scixvLGksYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtlXSksZS5mb3JFYWNoKChlPT57aWYodGhpcy5pc1ZhbGlkTG9va3VwKHQpKXJldHVybjtjb25zdCBsPXRoaXMuZXh0cmFjdEZyb21LZXkoZSxhKSxzPWwua2V5O249cztsZXQgYz1sLm5hbWVzcGFjZXM7dGhpcy5vcHRpb25zLmZhbGxiYWNrTlMmJihjPWMuY29uY2F0KHRoaXMub3B0aW9ucy5mYWxsYmFja05TKSk7Y29uc3QgdT12b2lkIDAhPT1hLmNvdW50JiZcInN0cmluZ1wiIT10eXBlb2YgYS5jb3VudCxmPXUmJiFhLm9yZGluYWwmJjA9PT1hLmNvdW50JiZ0aGlzLnBsdXJhbFJlc29sdmVyLnNob3VsZFVzZUludGxBcGkoKSxkPXZvaWQgMCE9PWEuY29udGV4dCYmKFwic3RyaW5nXCI9PXR5cGVvZiBhLmNvbnRleHR8fFwibnVtYmVyXCI9PXR5cGVvZiBhLmNvbnRleHQpJiZcIlwiIT09YS5jb250ZXh0LHA9YS5sbmdzP2EubG5nczp0aGlzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGEubG5nfHx0aGlzLmxhbmd1YWdlLGEuZmFsbGJhY2tMbmcpO2MuZm9yRWFjaCgoZT0+e3RoaXMuaXNWYWxpZExvb2t1cCh0KXx8KGk9ZSwhaltgJHtwWzBdfS0ke2V9YF0mJnRoaXMudXRpbHMmJnRoaXMudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlJiYhdGhpcy51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UoaSkmJihqW2Ake3BbMF19LSR7ZX1gXT0hMCx0aGlzLmxvZ2dlci53YXJuKGBrZXkgXCIke259XCIgZm9yIGxhbmd1YWdlcyBcIiR7cC5qb2luKFwiLCBcIil9XCIgd29uJ3QgZ2V0IHJlc29sdmVkIGFzIG5hbWVzcGFjZSBcIiR7aX1cIiB3YXMgbm90IHlldCBsb2FkZWRgLFwiVGhpcyBtZWFucyBzb21ldGhpbmcgSVMgV1JPTkcgaW4geW91ciBzZXR1cC4gWW91IGFjY2VzcyB0aGUgdCBmdW5jdGlvbiBiZWZvcmUgaTE4bmV4dC5pbml0IC8gaTE4bmV4dC5sb2FkTmFtZXNwYWNlIC8gaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSB3YXMgZG9uZS4gV2FpdCBmb3IgdGhlIGNhbGxiYWNrIG9yIFByb21pc2UgdG8gcmVzb2x2ZSBiZWZvcmUgYWNjZXNzaW5nIGl0ISEhXCIpKSxwLmZvckVhY2goKG49PntpZih0aGlzLmlzVmFsaWRMb29rdXAodCkpcmV0dXJuO289bjtjb25zdCBpPVtzXTtpZih0aGlzLmkxOG5Gb3JtYXQmJnRoaXMuaTE4bkZvcm1hdC5hZGRMb29rdXBLZXlzKXRoaXMuaTE4bkZvcm1hdC5hZGRMb29rdXBLZXlzKGkscyxuLGUsYSk7ZWxzZXtsZXQgZTt1JiYoZT10aGlzLnBsdXJhbFJlc29sdmVyLmdldFN1ZmZpeChuLGEuY291bnQsYSkpO2NvbnN0IHQ9YCR7dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcn16ZXJvYCxyPWAke3RoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3J9b3JkaW5hbCR7dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcn1gO2lmKHUmJihpLnB1c2gocytlKSxhLm9yZGluYWwmJjA9PT1lLmluZGV4T2YocikmJmkucHVzaChzK2UucmVwbGFjZShyLHRoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3IpKSxmJiZpLnB1c2gocyt0KSksZCl7Y29uc3Qgbj1gJHtzfSR7dGhpcy5vcHRpb25zLmNvbnRleHRTZXBhcmF0b3J9JHthLmNvbnRleHR9YDtpLnB1c2gobiksdSYmKGkucHVzaChuK2UpLGEub3JkaW5hbCYmMD09PWUuaW5kZXhPZihyKSYmaS5wdXNoKG4rZS5yZXBsYWNlKHIsdGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcikpLGYmJmkucHVzaChuK3QpKX19bGV0IGw7Zm9yKDtsPWkucG9wKCk7KXRoaXMuaXNWYWxpZExvb2t1cCh0KXx8KHI9bCx0PXRoaXMuZ2V0UmVzb3VyY2UobixlLGwsYSkpfSkpKX0pKX0pKSx7cmVzOnQsdXNlZEtleTpuLGV4YWN0VXNlZEtleTpyLHVzZWRMbmc6byx1c2VkTlM6aX19aXNWYWxpZExvb2t1cChlKXtyZXR1cm4hKHZvaWQgMD09PWV8fCF0aGlzLm9wdGlvbnMucmV0dXJuTnVsbCYmbnVsbD09PWV8fCF0aGlzLm9wdGlvbnMucmV0dXJuRW1wdHlTdHJpbmcmJlwiXCI9PT1lKX1nZXRSZXNvdXJjZShlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O3JldHVybiB0aGlzLmkxOG5Gb3JtYXQmJnRoaXMuaTE4bkZvcm1hdC5nZXRSZXNvdXJjZT90aGlzLmkxOG5Gb3JtYXQuZ2V0UmVzb3VyY2UoZSx0LG4scik6dGhpcy5yZXNvdXJjZVN0b3JlLmdldFJlc291cmNlKGUsdCxuLHIpfWdldFVzZWRQYXJhbXNEZXRhaWxzKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2NvbnN0IHQ9W1wiZGVmYXVsdFZhbHVlXCIsXCJvcmRpbmFsXCIsXCJjb250ZXh0XCIsXCJyZXBsYWNlXCIsXCJsbmdcIixcImxuZ3NcIixcImZhbGxiYWNrTG5nXCIsXCJuc1wiLFwia2V5U2VwYXJhdG9yXCIsXCJuc1NlcGFyYXRvclwiLFwicmV0dXJuT2JqZWN0c1wiLFwicmV0dXJuRGV0YWlsc1wiLFwiam9pbkFycmF5c1wiLFwicG9zdFByb2Nlc3NcIixcImludGVycG9sYXRpb25cIl0sbj1lLnJlcGxhY2UmJlwic3RyaW5nXCIhPXR5cGVvZiBlLnJlcGxhY2U7bGV0IHI9bj9lLnJlcGxhY2U6ZTtpZihuJiZ2b2lkIDAhPT1lLmNvdW50JiYoci5jb3VudD1lLmNvdW50KSx0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzJiYocj17Li4udGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcywuLi5yfSksIW4pe3I9ey4uLnJ9O2Zvcihjb25zdCBlIG9mIHQpZGVsZXRlIHJbZV19cmV0dXJuIHJ9c3RhdGljIGhhc0RlZmF1bHRWYWx1ZShlKXtjb25zdCB0PVwiZGVmYXVsdFZhbHVlXCI7Zm9yKGNvbnN0IG4gaW4gZSlpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdD09PW4uc3Vic3RyaW5nKDAsMTIpJiZ2b2lkIDAhPT1lW25dKXJldHVybiEwO3JldHVybiExfX1mdW5jdGlvbiBrKGUpe3JldHVybiBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSl9Y2xhc3MgUntjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZSx0aGlzLnN1cHBvcnRlZExuZ3M9dGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3N8fCExLHRoaXMubG9nZ2VyPXUuY3JlYXRlKFwibGFuZ3VhZ2VVdGlsc1wiKX1nZXRTY3JpcHRQYXJ0RnJvbUNvZGUoZSl7aWYoIShlPUwoZSkpfHxlLmluZGV4T2YoXCItXCIpPDApcmV0dXJuIG51bGw7Y29uc3QgdD1lLnNwbGl0KFwiLVwiKTtyZXR1cm4gMj09PXQubGVuZ3RoP251bGw6KHQucG9wKCksXCJ4XCI9PT10W3QubGVuZ3RoLTFdLnRvTG93ZXJDYXNlKCk/bnVsbDp0aGlzLmZvcm1hdExhbmd1YWdlQ29kZSh0LmpvaW4oXCItXCIpKSl9Z2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSl7aWYoIShlPUwoZSkpfHxlLmluZGV4T2YoXCItXCIpPDApcmV0dXJuIGU7Y29uc3QgdD1lLnNwbGl0KFwiLVwiKTtyZXR1cm4gdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUodFswXSl9Zm9ybWF0TGFuZ3VhZ2VDb2RlKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiZlLmluZGV4T2YoXCItXCIpPi0xKXtjb25zdCB0PVtcImhhbnNcIixcImhhbnRcIixcImxhdG5cIixcImN5cmxcIixcImNhbnNcIixcIm1vbmdcIixcImFyYWJcIl07bGV0IG49ZS5zcGxpdChcIi1cIik7cmV0dXJuIHRoaXMub3B0aW9ucy5sb3dlckNhc2VMbmc/bj1uLm1hcCgoZT0+ZS50b0xvd2VyQ2FzZSgpKSk6Mj09PW4ubGVuZ3RoPyhuWzBdPW5bMF0udG9Mb3dlckNhc2UoKSxuWzFdPW5bMV0udG9VcHBlckNhc2UoKSx0LmluZGV4T2YoblsxXS50b0xvd2VyQ2FzZSgpKT4tMSYmKG5bMV09ayhuWzFdLnRvTG93ZXJDYXNlKCkpKSk6Mz09PW4ubGVuZ3RoJiYoblswXT1uWzBdLnRvTG93ZXJDYXNlKCksMj09PW5bMV0ubGVuZ3RoJiYoblsxXT1uWzFdLnRvVXBwZXJDYXNlKCkpLFwic2duXCIhPT1uWzBdJiYyPT09blsyXS5sZW5ndGgmJihuWzJdPW5bMl0udG9VcHBlckNhc2UoKSksdC5pbmRleE9mKG5bMV0udG9Mb3dlckNhc2UoKSk+LTEmJihuWzFdPWsoblsxXS50b0xvd2VyQ2FzZSgpKSksdC5pbmRleE9mKG5bMl0udG9Mb3dlckNhc2UoKSk+LTEmJihuWzJdPWsoblsyXS50b0xvd2VyQ2FzZSgpKSkpLG4uam9pbihcIi1cIil9cmV0dXJuIHRoaXMub3B0aW9ucy5jbGVhbkNvZGV8fHRoaXMub3B0aW9ucy5sb3dlckNhc2VMbmc/ZS50b0xvd2VyQ2FzZSgpOmV9aXNTdXBwb3J0ZWRDb2RlKGUpe3JldHVybihcImxhbmd1YWdlT25seVwiPT09dGhpcy5vcHRpb25zLmxvYWR8fHRoaXMub3B0aW9ucy5ub25FeHBsaWNpdFN1cHBvcnRlZExuZ3MpJiYoZT10aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpKSwhdGhpcy5zdXBwb3J0ZWRMbmdzfHwhdGhpcy5zdXBwb3J0ZWRMbmdzLmxlbmd0aHx8dGhpcy5zdXBwb3J0ZWRMbmdzLmluZGV4T2YoZSk+LTF9Z2V0QmVzdE1hdGNoRnJvbUNvZGVzKGUpe2lmKCFlKXJldHVybiBudWxsO2xldCB0O3JldHVybiBlLmZvckVhY2goKGU9PntpZih0KXJldHVybjtjb25zdCBuPXRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGUpO3RoaXMub3B0aW9ucy5zdXBwb3J0ZWRMbmdzJiYhdGhpcy5pc1N1cHBvcnRlZENvZGUobil8fCh0PW4pfSkpLCF0JiZ0aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncyYmZS5mb3JFYWNoKChlPT57aWYodClyZXR1cm47Y29uc3Qgbj10aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpO2lmKHRoaXMuaXNTdXBwb3J0ZWRDb2RlKG4pKXJldHVybiB0PW47dD10aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncy5maW5kKChlPT5lPT09bj9lOmUuaW5kZXhPZihcIi1cIik8MCYmbi5pbmRleE9mKFwiLVwiKTwwP3ZvaWQgMDowPT09ZS5pbmRleE9mKG4pP2U6dm9pZCAwKSl9KSksdHx8KHQ9dGhpcy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZylbMF0pLHR9Z2V0RmFsbGJhY2tDb2RlcyhlLHQpe2lmKCFlKXJldHVybltdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihlPWUodCkpLFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1bZV0pLFwiW29iamVjdCBBcnJheV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkoZSkpcmV0dXJuIGU7aWYoIXQpcmV0dXJuIGUuZGVmYXVsdHx8W107bGV0IG49ZVt0XTtyZXR1cm4gbnx8KG49ZVt0aGlzLmdldFNjcmlwdFBhcnRGcm9tQ29kZSh0KV0pLG58fChuPWVbdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUodCldKSxufHwobj1lW3RoaXMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUodCldKSxufHwobj1lLmRlZmF1bHQpLG58fFtdfXRvUmVzb2x2ZUhpZXJhcmNoeShlLHQpe2NvbnN0IG49dGhpcy5nZXRGYWxsYmFja0NvZGVzKHR8fHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZ3x8W10sZSkscj1bXSxvPWU9PntlJiYodGhpcy5pc1N1cHBvcnRlZENvZGUoZSk/ci5wdXNoKGUpOnRoaXMubG9nZ2VyLndhcm4oYHJlamVjdGluZyBsYW5ndWFnZSBjb2RlIG5vdCBmb3VuZCBpbiBzdXBwb3J0ZWRMbmdzOiAke2V9YCkpfTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmKGUuaW5kZXhPZihcIi1cIik+LTF8fGUuaW5kZXhPZihcIl9cIik+LTEpPyhcImxhbmd1YWdlT25seVwiIT09dGhpcy5vcHRpb25zLmxvYWQmJm8odGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoZSkpLFwibGFuZ3VhZ2VPbmx5XCIhPT10aGlzLm9wdGlvbnMubG9hZCYmXCJjdXJyZW50T25seVwiIT09dGhpcy5vcHRpb25zLmxvYWQmJm8odGhpcy5nZXRTY3JpcHRQYXJ0RnJvbUNvZGUoZSkpLFwiY3VycmVudE9ubHlcIiE9PXRoaXMub3B0aW9ucy5sb2FkJiZvKHRoaXMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSkpKTpcInN0cmluZ1wiPT10eXBlb2YgZSYmbyh0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShlKSksbi5mb3JFYWNoKChlPT57ci5pbmRleE9mKGUpPDAmJm8odGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoZSkpfSkpLHJ9fWxldCBQPVt7bG5nczpbXCJhY2hcIixcImFrXCIsXCJhbVwiLFwiYXJuXCIsXCJiclwiLFwiZmlsXCIsXCJndW5cIixcImxuXCIsXCJtZmVcIixcIm1nXCIsXCJtaVwiLFwib2NcIixcInB0XCIsXCJwdC1CUlwiLFwidGdcIixcInRsXCIsXCJ0aVwiLFwidHJcIixcInV6XCIsXCJ3YVwiXSxucjpbMSwyXSxmYzoxfSx7bG5nczpbXCJhZlwiLFwiYW5cIixcImFzdFwiLFwiYXpcIixcImJnXCIsXCJiblwiLFwiY2FcIixcImRhXCIsXCJkZVwiLFwiZGV2XCIsXCJlbFwiLFwiZW5cIixcImVvXCIsXCJlc1wiLFwiZXRcIixcImV1XCIsXCJmaVwiLFwiZm9cIixcImZ1clwiLFwiZnlcIixcImdsXCIsXCJndVwiLFwiaGFcIixcImhpXCIsXCJodVwiLFwiaHlcIixcImlhXCIsXCJpdFwiLFwia2tcIixcImtuXCIsXCJrdVwiLFwibGJcIixcIm1haVwiLFwibWxcIixcIm1uXCIsXCJtclwiLFwibmFoXCIsXCJuYXBcIixcIm5iXCIsXCJuZVwiLFwibmxcIixcIm5uXCIsXCJub1wiLFwibnNvXCIsXCJwYVwiLFwicGFwXCIsXCJwbXNcIixcInBzXCIsXCJwdC1QVFwiLFwicm1cIixcInNjb1wiLFwic2VcIixcInNpXCIsXCJzb1wiLFwic29uXCIsXCJzcVwiLFwic3ZcIixcInN3XCIsXCJ0YVwiLFwidGVcIixcInRrXCIsXCJ1clwiLFwieW9cIl0sbnI6WzEsMl0sZmM6Mn0se2xuZ3M6W1wiYXlcIixcImJvXCIsXCJjZ2dcIixcImZhXCIsXCJodFwiLFwiaWRcIixcImphXCIsXCJqYm9cIixcImthXCIsXCJrbVwiLFwia29cIixcImt5XCIsXCJsb1wiLFwibXNcIixcInNhaFwiLFwic3VcIixcInRoXCIsXCJ0dFwiLFwidWdcIixcInZpXCIsXCJ3b1wiLFwiemhcIl0sbnI6WzFdLGZjOjN9LHtsbmdzOltcImJlXCIsXCJic1wiLFwiY25yXCIsXCJkelwiLFwiaHJcIixcInJ1XCIsXCJzclwiLFwidWtcIl0sbnI6WzEsMiw1XSxmYzo0fSx7bG5nczpbXCJhclwiXSxucjpbMCwxLDIsMywxMSwxMDBdLGZjOjV9LHtsbmdzOltcImNzXCIsXCJza1wiXSxucjpbMSwyLDVdLGZjOjZ9LHtsbmdzOltcImNzYlwiLFwicGxcIl0sbnI6WzEsMiw1XSxmYzo3fSx7bG5nczpbXCJjeVwiXSxucjpbMSwyLDMsOF0sZmM6OH0se2xuZ3M6W1wiZnJcIl0sbnI6WzEsMl0sZmM6OX0se2xuZ3M6W1wiZ2FcIl0sbnI6WzEsMiwzLDcsMTFdLGZjOjEwfSx7bG5nczpbXCJnZFwiXSxucjpbMSwyLDMsMjBdLGZjOjExfSx7bG5nczpbXCJpc1wiXSxucjpbMSwyXSxmYzoxMn0se2xuZ3M6W1wianZcIl0sbnI6WzAsMV0sZmM6MTN9LHtsbmdzOltcImt3XCJdLG5yOlsxLDIsMyw0XSxmYzoxNH0se2xuZ3M6W1wibHRcIl0sbnI6WzEsMiwxMF0sZmM6MTV9LHtsbmdzOltcImx2XCJdLG5yOlsxLDIsMF0sZmM6MTZ9LHtsbmdzOltcIm1rXCJdLG5yOlsxLDJdLGZjOjE3fSx7bG5nczpbXCJtbmtcIl0sbnI6WzAsMSwyXSxmYzoxOH0se2xuZ3M6W1wibXRcIl0sbnI6WzEsMiwxMSwyMF0sZmM6MTl9LHtsbmdzOltcIm9yXCJdLG5yOlsyLDFdLGZjOjJ9LHtsbmdzOltcInJvXCJdLG5yOlsxLDIsMjBdLGZjOjIwfSx7bG5nczpbXCJzbFwiXSxucjpbNSwxLDIsM10sZmM6MjF9LHtsbmdzOltcImhlXCIsXCJpd1wiXSxucjpbMSwyLDIwLDIxXSxmYzoyMn1dLEk9ezE6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlPjEpfSwyOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMSE9ZSl9LDM6ZnVuY3Rpb24oZSl7cmV0dXJuIDB9LDQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlJTEwPT0xJiZlJTEwMCE9MTE/MDplJTEwPj0yJiZlJTEwPD00JiYoZSUxMDA8MTB8fGUlMTAwPj0yMCk/MToyKX0sNTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDA9PWU/MDoxPT1lPzE6Mj09ZT8yOmUlMTAwPj0zJiZlJTEwMDw9MTA/MzplJTEwMD49MTE/NDo1KX0sNjpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDplPj0yJiZlPD00PzE6Mil9LDc6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6ZSUxMD49MiYmZSUxMDw9NCYmKGUlMTAwPDEwfHxlJTEwMD49MjApPzE6Mil9LDg6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOjghPWUmJjExIT1lPzI6Myl9LDk6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlPj0yKX0sMTA6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOmU8Nz8yOmU8MTE/Mzo0KX0sMTE6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lfHwxMT09ZT8wOjI9PWV8fDEyPT1lPzE6ZT4yJiZlPDIwPzI6Myl9LDEyOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMCE9MXx8ZSUxMDA9PTExKX0sMTM6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigwIT09ZSl9LDE0OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMT09ZT8wOjI9PWU/MTozPT1lPzI6Myl9LDE1OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMD09MSYmZSUxMDAhPTExPzA6ZSUxMD49MiYmKGUlMTAwPDEwfHxlJTEwMD49MjApPzE6Mil9LDE2OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMD09MSYmZSUxMDAhPTExPzA6MCE9PWU/MToyKX0sMTc6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lfHxlJTEwPT0xJiZlJTEwMCE9MTE/MDoxKX0sMTg6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigwPT1lPzA6MT09ZT8xOjIpfSwxOTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDowPT1lfHxlJTEwMD4xJiZlJTEwMDwxMT8xOmUlMTAwPjEwJiZlJTEwMDwyMD8yOjMpfSwyMDpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDowPT1lfHxlJTEwMD4wJiZlJTEwMDwyMD8xOjIpfSwyMTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGUlMTAwPT0xPzE6ZSUxMDA9PTI/MjplJTEwMD09M3x8ZSUxMDA9PTQ/MzowKX0sMjI6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOihlPDB8fGU+MTApJiZlJTEwPT0wPzI6Myl9fTtjb25zdCBBPVtcInYxXCIsXCJ2MlwiLFwidjNcIl0sVD1bXCJ2NFwiXSxIPXt6ZXJvOjAsb25lOjEsdHdvOjIsZmV3OjMsbWFueTo0LG90aGVyOjV9O2NsYXNzIEJ7Y29uc3RydWN0b3IoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3RoaXMubGFuZ3VhZ2VVdGlscz1lLHRoaXMub3B0aW9ucz10LHRoaXMubG9nZ2VyPXUuY3JlYXRlKFwicGx1cmFsUmVzb2x2ZXJcIiksdGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OJiYhVC5pbmNsdWRlcyh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04pfHxcInVuZGVmaW5lZFwiIT10eXBlb2YgSW50bCYmSW50bC5QbHVyYWxSdWxlc3x8KHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTj1cInYzXCIsdGhpcy5sb2dnZXIuZXJyb3IoXCJZb3VyIGVudmlyb25tZW50IHNlZW1zIG5vdCB0byBiZSBJbnRsIEFQSSBjb21wYXRpYmxlLCB1c2UgYW4gSW50bC5QbHVyYWxSdWxlcyBwb2x5ZmlsbC4gV2lsbCBmYWxsYmFjayB0byB0aGUgY29tcGF0aWJpbGl0eUpTT04gdjMgZm9ybWF0IGhhbmRsaW5nLlwiKSksdGhpcy5ydWxlcz1mdW5jdGlvbigpe2NvbnN0IGU9e307cmV0dXJuIFAuZm9yRWFjaCgodD0+e3QubG5ncy5mb3JFYWNoKChuPT57ZVtuXT17bnVtYmVyczp0Lm5yLHBsdXJhbHM6SVt0LmZjXX19KSl9KSksZX0oKX1hZGRSdWxlKGUsdCl7dGhpcy5ydWxlc1tlXT10fWdldFJ1bGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKHRoaXMuc2hvdWxkVXNlSW50bEFwaSgpKXRyeXtyZXR1cm4gbmV3IEludGwuUGx1cmFsUnVsZXMoTChcImRldlwiPT09ZT9cImVuXCI6ZSkse3R5cGU6dC5vcmRpbmFsP1wib3JkaW5hbFwiOlwiY2FyZGluYWxcIn0pfWNhdGNoKGUpe3JldHVybn1yZXR1cm4gdGhpcy5ydWxlc1tlXXx8dGhpcy5ydWxlc1t0aGlzLmxhbmd1YWdlVXRpbHMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSldfW5lZWRzUGx1cmFsKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtjb25zdCBuPXRoaXMuZ2V0UnVsZShlLHQpO3JldHVybiB0aGlzLnNob3VsZFVzZUludGxBcGkoKT9uJiZuLnJlc29sdmVkT3B0aW9ucygpLnBsdXJhbENhdGVnb3JpZXMubGVuZ3RoPjE6biYmbi5udW1iZXJzLmxlbmd0aD4xfWdldFBsdXJhbEZvcm1zT2ZLZXkoZSx0KXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307cmV0dXJuIHRoaXMuZ2V0U3VmZml4ZXMoZSxuKS5tYXAoKGU9PmAke3R9JHtlfWApKX1nZXRTdWZmaXhlcyhlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Y29uc3Qgbj10aGlzLmdldFJ1bGUoZSx0KTtyZXR1cm4gbj90aGlzLnNob3VsZFVzZUludGxBcGkoKT9uLnJlc29sdmVkT3B0aW9ucygpLnBsdXJhbENhdGVnb3JpZXMuc29ydCgoKGUsdCk9PkhbZV0tSFt0XSkpLm1hcCgoZT0+YCR7dGhpcy5vcHRpb25zLnByZXBlbmR9JHt0Lm9yZGluYWw/YG9yZGluYWwke3RoaXMub3B0aW9ucy5wcmVwZW5kfWA6XCJcIn0ke2V9YCkpOm4ubnVtYmVycy5tYXAoKG49PnRoaXMuZ2V0U3VmZml4KGUsbix0KSkpOltdfWdldFN1ZmZpeChlLHQpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdCByPXRoaXMuZ2V0UnVsZShlLG4pO3JldHVybiByP3RoaXMuc2hvdWxkVXNlSW50bEFwaSgpP2Ake3RoaXMub3B0aW9ucy5wcmVwZW5kfSR7bi5vcmRpbmFsP2BvcmRpbmFsJHt0aGlzLm9wdGlvbnMucHJlcGVuZH1gOlwiXCJ9JHtyLnNlbGVjdCh0KX1gOnRoaXMuZ2V0U3VmZml4UmV0cm9Db21wYXRpYmxlKHIsdCk6KHRoaXMubG9nZ2VyLndhcm4oYG5vIHBsdXJhbCBydWxlIGZvdW5kIGZvcjogJHtlfWApLFwiXCIpfWdldFN1ZmZpeFJldHJvQ29tcGF0aWJsZShlLHQpe2NvbnN0IG49ZS5ub0Ficz9lLnBsdXJhbHModCk6ZS5wbHVyYWxzKE1hdGguYWJzKHQpKTtsZXQgcj1lLm51bWJlcnNbbl07dGhpcy5vcHRpb25zLnNpbXBsaWZ5UGx1cmFsU3VmZml4JiYyPT09ZS5udW1iZXJzLmxlbmd0aCYmMT09PWUubnVtYmVyc1swXSYmKDI9PT1yP3I9XCJwbHVyYWxcIjoxPT09ciYmKHI9XCJcIikpO2NvbnN0IG89KCk9PnRoaXMub3B0aW9ucy5wcmVwZW5kJiZyLnRvU3RyaW5nKCk/dGhpcy5vcHRpb25zLnByZXBlbmQrci50b1N0cmluZygpOnIudG9TdHJpbmcoKTtyZXR1cm5cInYxXCI9PT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04/MT09PXI/XCJcIjpcIm51bWJlclwiPT10eXBlb2Ygcj9gX3BsdXJhbF8ke3IudG9TdHJpbmcoKX1gOm8oKTpcInYyXCI9PT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT058fHRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeCYmMj09PWUubnVtYmVycy5sZW5ndGgmJjE9PT1lLm51bWJlcnNbMF0/bygpOnRoaXMub3B0aW9ucy5wcmVwZW5kJiZuLnRvU3RyaW5nKCk/dGhpcy5vcHRpb25zLnByZXBlbmQrbi50b1N0cmluZygpOm4udG9TdHJpbmcoKX1zaG91bGRVc2VJbnRsQXBpKCl7cmV0dXJuIUEuaW5jbHVkZXModGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OKX19ZnVuY3Rpb24gVihlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOlwiLlwiLG89IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XSxpPWZ1bmN0aW9uKGUsdCxuKXtjb25zdCByPW0oZSxuKTtyZXR1cm4gdm9pZCAwIT09cj9yOm0odCxuKX0oZSx0LG4pO3JldHVybiFpJiZvJiZcInN0cmluZ1wiPT10eXBlb2YgbiYmKGk9TyhlLG4sciksdm9pZCAwPT09aSYmKGk9Tyh0LG4scikpKSxpfWNsYXNzIER7Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307dGhpcy5sb2dnZXI9dS5jcmVhdGUoXCJpbnRlcnBvbGF0b3JcIiksdGhpcy5vcHRpb25zPWUsdGhpcy5mb3JtYXQ9ZS5pbnRlcnBvbGF0aW9uJiZlLmludGVycG9sYXRpb24uZm9ybWF0fHwoZT0+ZSksdGhpcy5pbml0KGUpfWluaXQoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307ZS5pbnRlcnBvbGF0aW9ufHwoZS5pbnRlcnBvbGF0aW9uPXtlc2NhcGVWYWx1ZTohMH0pO2NvbnN0IHQ9ZS5pbnRlcnBvbGF0aW9uO3RoaXMuZXNjYXBlPXZvaWQgMCE9PXQuZXNjYXBlP3QuZXNjYXBlOmIsdGhpcy5lc2NhcGVWYWx1ZT12b2lkIDA9PT10LmVzY2FwZVZhbHVlfHx0LmVzY2FwZVZhbHVlLHRoaXMudXNlUmF3VmFsdWVUb0VzY2FwZT12b2lkIDAhPT10LnVzZVJhd1ZhbHVlVG9Fc2NhcGUmJnQudXNlUmF3VmFsdWVUb0VzY2FwZSx0aGlzLnByZWZpeD10LnByZWZpeD95KHQucHJlZml4KTp0LnByZWZpeEVzY2FwZWR8fFwie3tcIix0aGlzLnN1ZmZpeD10LnN1ZmZpeD95KHQuc3VmZml4KTp0LnN1ZmZpeEVzY2FwZWR8fFwifX1cIix0aGlzLmZvcm1hdFNlcGFyYXRvcj10LmZvcm1hdFNlcGFyYXRvcj90LmZvcm1hdFNlcGFyYXRvcjp0LmZvcm1hdFNlcGFyYXRvcnx8XCIsXCIsdGhpcy51bmVzY2FwZVByZWZpeD10LnVuZXNjYXBlU3VmZml4P1wiXCI6dC51bmVzY2FwZVByZWZpeHx8XCItXCIsdGhpcy51bmVzY2FwZVN1ZmZpeD10aGlzLnVuZXNjYXBlUHJlZml4P1wiXCI6dC51bmVzY2FwZVN1ZmZpeHx8XCJcIix0aGlzLm5lc3RpbmdQcmVmaXg9dC5uZXN0aW5nUHJlZml4P3kodC5uZXN0aW5nUHJlZml4KTp0Lm5lc3RpbmdQcmVmaXhFc2NhcGVkfHx5KFwiJHQoXCIpLHRoaXMubmVzdGluZ1N1ZmZpeD10Lm5lc3RpbmdTdWZmaXg/eSh0Lm5lc3RpbmdTdWZmaXgpOnQubmVzdGluZ1N1ZmZpeEVzY2FwZWR8fHkoXCIpXCIpLHRoaXMubmVzdGluZ09wdGlvbnNTZXBhcmF0b3I9dC5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcj90Lm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yOnQubmVzdGluZ09wdGlvbnNTZXBhcmF0b3J8fFwiLFwiLHRoaXMubWF4UmVwbGFjZXM9dC5tYXhSZXBsYWNlcz90Lm1heFJlcGxhY2VzOjFlMyx0aGlzLmFsd2F5c0Zvcm1hdD12b2lkIDAhPT10LmFsd2F5c0Zvcm1hdCYmdC5hbHdheXNGb3JtYXQsdGhpcy5yZXNldFJlZ0V4cCgpfXJlc2V0KCl7dGhpcy5vcHRpb25zJiZ0aGlzLmluaXQodGhpcy5vcHRpb25zKX1yZXNldFJlZ0V4cCgpe2NvbnN0IGU9KGUsdCk9PmUmJmUuc291cmNlPT09dD8oZS5sYXN0SW5kZXg9MCxlKTpuZXcgUmVnRXhwKHQsXCJnXCIpO3RoaXMucmVnZXhwPWUodGhpcy5yZWdleHAsYCR7dGhpcy5wcmVmaXh9KC4rPykke3RoaXMuc3VmZml4fWApLHRoaXMucmVnZXhwVW5lc2NhcGU9ZSh0aGlzLnJlZ2V4cFVuZXNjYXBlLGAke3RoaXMucHJlZml4fSR7dGhpcy51bmVzY2FwZVByZWZpeH0oLis/KSR7dGhpcy51bmVzY2FwZVN1ZmZpeH0ke3RoaXMuc3VmZml4fWApLHRoaXMubmVzdGluZ1JlZ2V4cD1lKHRoaXMubmVzdGluZ1JlZ2V4cCxgJHt0aGlzLm5lc3RpbmdQcmVmaXh9KC4rPykke3RoaXMubmVzdGluZ1N1ZmZpeH1gKX1pbnRlcnBvbGF0ZShlLHQsbixyKXtsZXQgbyxpLGE7Y29uc3QgbD10aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uJiZ0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzfHx7fTtmdW5jdGlvbiBzKGUpe3JldHVybiBlLnJlcGxhY2UoL1xcJC9nLFwiJCQkJFwiKX1jb25zdCBjPWU9PntpZihlLmluZGV4T2YodGhpcy5mb3JtYXRTZXBhcmF0b3IpPDApe2NvbnN0IG89Vih0LGwsZSx0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yLHRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlKTtyZXR1cm4gdGhpcy5hbHdheXNGb3JtYXQ/dGhpcy5mb3JtYXQobyx2b2lkIDAsbix7Li4uciwuLi50LGludGVycG9sYXRpb25rZXk6ZX0pOm99Y29uc3Qgbz1lLnNwbGl0KHRoaXMuZm9ybWF0U2VwYXJhdG9yKSxpPW8uc2hpZnQoKS50cmltKCksYT1vLmpvaW4odGhpcy5mb3JtYXRTZXBhcmF0b3IpLnRyaW0oKTtyZXR1cm4gdGhpcy5mb3JtYXQoVih0LGwsaSx0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yLHRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlKSxhLG4sey4uLnIsLi4udCxpbnRlcnBvbGF0aW9ua2V5Oml9KX07dGhpcy5yZXNldFJlZ0V4cCgpO2NvbnN0IHU9ciYmci5taXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXJ8fHRoaXMub3B0aW9ucy5taXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXIsZj1yJiZyLmludGVycG9sYXRpb24mJnZvaWQgMCE9PXIuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM/ci5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlczp0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM7cmV0dXJuW3tyZWdleDp0aGlzLnJlZ2V4cFVuZXNjYXBlLHNhZmVWYWx1ZTplPT5zKGUpfSx7cmVnZXg6dGhpcy5yZWdleHAsc2FmZVZhbHVlOmU9PnRoaXMuZXNjYXBlVmFsdWU/cyh0aGlzLmVzY2FwZShlKSk6cyhlKX1dLmZvckVhY2goKHQ9Pntmb3IoYT0wO289dC5yZWdleC5leGVjKGUpOyl7Y29uc3Qgbj1vWzFdLnRyaW0oKTtpZihpPWMobiksdm9pZCAwPT09aSlpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB1KXtjb25zdCB0PXUoZSxvLHIpO2k9XCJzdHJpbmdcIj09dHlwZW9mIHQ/dDpcIlwifWVsc2UgaWYociYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikpaT1cIlwiO2Vsc2V7aWYoZil7aT1vWzBdO2NvbnRpbnVlfXRoaXMubG9nZ2VyLndhcm4oYG1pc3NlZCB0byBwYXNzIGluIHZhcmlhYmxlICR7bn0gZm9yIGludGVycG9sYXRpbmcgJHtlfWApLGk9XCJcIn1lbHNlXCJzdHJpbmdcIj09dHlwZW9mIGl8fHRoaXMudXNlUmF3VmFsdWVUb0VzY2FwZXx8KGk9cChpKSk7Y29uc3QgbD10LnNhZmVWYWx1ZShpKTtpZihlPWUucmVwbGFjZShvWzBdLGwpLGY/KHQucmVnZXgubGFzdEluZGV4Kz1pLmxlbmd0aCx0LnJlZ2V4Lmxhc3RJbmRleC09b1swXS5sZW5ndGgpOnQucmVnZXgubGFzdEluZGV4PTAsYSsrLGE+PXRoaXMubWF4UmVwbGFjZXMpYnJlYWt9fSkpLGV9bmVzdChlLHQpe2xldCBuLHIsbyxpPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtmdW5jdGlvbiBhKGUsdCl7Y29uc3Qgbj10aGlzLm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yO2lmKGUuaW5kZXhPZihuKTwwKXJldHVybiBlO2NvbnN0IHI9ZS5zcGxpdChuZXcgUmVnRXhwKGAke259WyBdKntgKSk7bGV0IGk9YHske3JbMV19YDtlPXJbMF0saT10aGlzLmludGVycG9sYXRlKGksbyk7Y29uc3QgYT1pLm1hdGNoKC8nL2cpLGw9aS5tYXRjaCgvXCIvZyk7KGEmJmEubGVuZ3RoJTI9PTAmJiFsfHxsLmxlbmd0aCUyIT0wKSYmKGk9aS5yZXBsYWNlKC8nL2csJ1wiJykpO3RyeXtvPUpTT04ucGFyc2UoaSksdCYmKG89ey4uLnQsLi4ub30pfWNhdGNoKHQpe3JldHVybiB0aGlzLmxvZ2dlci53YXJuKGBmYWlsZWQgcGFyc2luZyBvcHRpb25zIHN0cmluZyBpbiBuZXN0aW5nIGZvciBrZXkgJHtlfWAsdCksYCR7ZX0ke259JHtpfWB9cmV0dXJuIGRlbGV0ZSBvLmRlZmF1bHRWYWx1ZSxlfWZvcig7bj10aGlzLm5lc3RpbmdSZWdleHAuZXhlYyhlKTspe2xldCBsPVtdO289ey4uLml9LG89by5yZXBsYWNlJiZcInN0cmluZ1wiIT10eXBlb2Ygby5yZXBsYWNlP28ucmVwbGFjZTpvLG8uYXBwbHlQb3N0UHJvY2Vzc29yPSExLGRlbGV0ZSBvLmRlZmF1bHRWYWx1ZTtsZXQgcz0hMTtpZigtMSE9PW5bMF0uaW5kZXhPZih0aGlzLmZvcm1hdFNlcGFyYXRvcikmJiEvey4qfS8udGVzdChuWzFdKSl7Y29uc3QgZT1uWzFdLnNwbGl0KHRoaXMuZm9ybWF0U2VwYXJhdG9yKS5tYXAoKGU9PmUudHJpbSgpKSk7blsxXT1lLnNoaWZ0KCksbD1lLHM9ITB9aWYocj10KGEuY2FsbCh0aGlzLG5bMV0udHJpbSgpLG8pLG8pLHImJm5bMF09PT1lJiZcInN0cmluZ1wiIT10eXBlb2YgcilyZXR1cm4gcjtcInN0cmluZ1wiIT10eXBlb2YgciYmKHI9cChyKSkscnx8KHRoaXMubG9nZ2VyLndhcm4oYG1pc3NlZCB0byByZXNvbHZlICR7blsxXX0gZm9yIG5lc3RpbmcgJHtlfWApLHI9XCJcIikscyYmKHI9bC5yZWR1Y2UoKChlLHQpPT50aGlzLmZvcm1hdChlLHQsaS5sbmcsey4uLmksaW50ZXJwb2xhdGlvbmtleTpuWzFdLnRyaW0oKX0pKSxyLnRyaW0oKSkpLGU9ZS5yZXBsYWNlKG5bMF0sciksdGhpcy5yZWdleHAubGFzdEluZGV4PTB9cmV0dXJuIGV9fWZ1bmN0aW9uIFooZSl7Y29uc3QgdD17fTtyZXR1cm4gZnVuY3Rpb24obixyLG8pe2NvbnN0IGk9citKU09OLnN0cmluZ2lmeShvKTtsZXQgYT10W2ldO3JldHVybiBhfHwoYT1lKEwociksbyksdFtpXT1hKSxhKG4pfX1jbGFzcyAke2NvbnN0cnVjdG9yKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3RoaXMubG9nZ2VyPXUuY3JlYXRlKFwiZm9ybWF0dGVyXCIpLHRoaXMub3B0aW9ucz1lLHRoaXMuZm9ybWF0cz17bnVtYmVyOlooKChlLHQpPT57Y29uc3Qgbj1uZXcgSW50bC5OdW1iZXJGb3JtYXQoZSx7Li4udH0pO3JldHVybiBlPT5uLmZvcm1hdChlKX0pKSxjdXJyZW5jeTpaKCgoZSx0KT0+e2NvbnN0IG49bmV3IEludGwuTnVtYmVyRm9ybWF0KGUsey4uLnQsc3R5bGU6XCJjdXJyZW5jeVwifSk7cmV0dXJuIGU9Pm4uZm9ybWF0KGUpfSkpLGRhdGV0aW1lOlooKChlLHQpPT57Y29uc3Qgbj1uZXcgSW50bC5EYXRlVGltZUZvcm1hdChlLHsuLi50fSk7cmV0dXJuIGU9Pm4uZm9ybWF0KGUpfSkpLHJlbGF0aXZldGltZTpaKCgoZSx0KT0+e2NvbnN0IG49bmV3IEludGwuUmVsYXRpdmVUaW1lRm9ybWF0KGUsey4uLnR9KTtyZXR1cm4gZT0+bi5mb3JtYXQoZSx0LnJhbmdlfHxcImRheVwiKX0pKSxsaXN0OlooKChlLHQpPT57Y29uc3Qgbj1uZXcgSW50bC5MaXN0Rm9ybWF0KGUsey4uLnR9KTtyZXR1cm4gZT0+bi5mb3JtYXQoZSl9KSl9LHRoaXMuaW5pdChlKX1pbml0KGUpe2NvbnN0IHQ9KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7aW50ZXJwb2xhdGlvbjp7fX0pLmludGVycG9sYXRpb247dGhpcy5mb3JtYXRTZXBhcmF0b3I9dC5mb3JtYXRTZXBhcmF0b3I/dC5mb3JtYXRTZXBhcmF0b3I6dC5mb3JtYXRTZXBhcmF0b3J8fFwiLFwifWFkZChlLHQpe3RoaXMuZm9ybWF0c1tlLnRvTG93ZXJDYXNlKCkudHJpbSgpXT10fWFkZENhY2hlZChlLHQpe3RoaXMuZm9ybWF0c1tlLnRvTG93ZXJDYXNlKCkudHJpbSgpXT1aKHQpfWZvcm1hdChlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O3JldHVybiB0LnNwbGl0KHRoaXMuZm9ybWF0U2VwYXJhdG9yKS5yZWR1Y2UoKChlLHQpPT57Y29uc3R7Zm9ybWF0TmFtZTpvLGZvcm1hdE9wdGlvbnM6aX09ZnVuY3Rpb24oZSl7bGV0IHQ9ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtjb25zdCBuPXt9O2lmKGUuaW5kZXhPZihcIihcIik+LTEpe2NvbnN0IHI9ZS5zcGxpdChcIihcIik7dD1yWzBdLnRvTG93ZXJDYXNlKCkudHJpbSgpO2NvbnN0IG89clsxXS5zdWJzdHJpbmcoMCxyWzFdLmxlbmd0aC0xKTtcImN1cnJlbmN5XCI9PT10JiZvLmluZGV4T2YoXCI6XCIpPDA/bi5jdXJyZW5jeXx8KG4uY3VycmVuY3k9by50cmltKCkpOlwicmVsYXRpdmV0aW1lXCI9PT10JiZvLmluZGV4T2YoXCI6XCIpPDA/bi5yYW5nZXx8KG4ucmFuZ2U9by50cmltKCkpOm8uc3BsaXQoXCI7XCIpLmZvckVhY2goKGU9PntpZighZSlyZXR1cm47Y29uc3RbdCwuLi5yXT1lLnNwbGl0KFwiOlwiKSxvPXIuam9pbihcIjpcIikudHJpbSgpLnJlcGxhY2UoL14nK3wnKyQvZyxcIlwiKTtuW3QudHJpbSgpXXx8KG5bdC50cmltKCldPW8pLFwiZmFsc2VcIj09PW8mJihuW3QudHJpbSgpXT0hMSksXCJ0cnVlXCI9PT1vJiYoblt0LnRyaW0oKV09ITApLGlzTmFOKG8pfHwoblt0LnRyaW0oKV09cGFyc2VJbnQobywxMCkpfSkpfXJldHVybntmb3JtYXROYW1lOnQsZm9ybWF0T3B0aW9uczpufX0odCk7aWYodGhpcy5mb3JtYXRzW29dKXtsZXQgdD1lO3RyeXtjb25zdCBhPXImJnIuZm9ybWF0UGFyYW1zJiZyLmZvcm1hdFBhcmFtc1tyLmludGVycG9sYXRpb25rZXldfHx7fSxsPWEubG9jYWxlfHxhLmxuZ3x8ci5sb2NhbGV8fHIubG5nfHxuO3Q9dGhpcy5mb3JtYXRzW29dKGUsbCx7Li4uaSwuLi5yLC4uLmF9KX1jYXRjaChlKXt0aGlzLmxvZ2dlci53YXJuKGUpfXJldHVybiB0fXJldHVybiB0aGlzLmxvZ2dlci53YXJuKGB0aGVyZSB3YXMgbm8gZm9ybWF0IGZ1bmN0aW9uIGZvciAke299YCksZX0pLGUpfX1jbGFzcyBOIGV4dGVuZHMgZntjb25zdHJ1Y3RvcihlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O3N1cGVyKCksdGhpcy5iYWNrZW5kPWUsdGhpcy5zdG9yZT10LHRoaXMuc2VydmljZXM9bix0aGlzLmxhbmd1YWdlVXRpbHM9bi5sYW5ndWFnZVV0aWxzLHRoaXMub3B0aW9ucz1yLHRoaXMubG9nZ2VyPXUuY3JlYXRlKFwiYmFja2VuZENvbm5lY3RvclwiKSx0aGlzLndhaXRpbmdSZWFkcz1bXSx0aGlzLm1heFBhcmFsbGVsUmVhZHM9ci5tYXhQYXJhbGxlbFJlYWRzfHwxMCx0aGlzLnJlYWRpbmdDYWxscz0wLHRoaXMubWF4UmV0cmllcz1yLm1heFJldHJpZXM+PTA/ci5tYXhSZXRyaWVzOjUsdGhpcy5yZXRyeVRpbWVvdXQ9ci5yZXRyeVRpbWVvdXQ+PTE/ci5yZXRyeVRpbWVvdXQ6MzUwLHRoaXMuc3RhdGU9e30sdGhpcy5xdWV1ZT1bXSx0aGlzLmJhY2tlbmQmJnRoaXMuYmFja2VuZC5pbml0JiZ0aGlzLmJhY2tlbmQuaW5pdChuLHIuYmFja2VuZCxyKX1xdWV1ZUxvYWQoZSx0LG4scil7Y29uc3Qgbz17fSxpPXt9LGE9e30sbD17fTtyZXR1cm4gZS5mb3JFYWNoKChlPT57bGV0IHI9ITA7dC5mb3JFYWNoKCh0PT57Y29uc3QgYT1gJHtlfXwke3R9YDshbi5yZWxvYWQmJnRoaXMuc3RvcmUuaGFzUmVzb3VyY2VCdW5kbGUoZSx0KT90aGlzLnN0YXRlW2FdPTI6dGhpcy5zdGF0ZVthXTwwfHwoMT09PXRoaXMuc3RhdGVbYV0/dm9pZCAwPT09aVthXSYmKGlbYV09ITApOih0aGlzLnN0YXRlW2FdPTEscj0hMSx2b2lkIDA9PT1pW2FdJiYoaVthXT0hMCksdm9pZCAwPT09b1thXSYmKG9bYV09ITApLHZvaWQgMD09PWxbdF0mJihsW3RdPSEwKSkpfSkpLHJ8fChhW2VdPSEwKX0pKSwoT2JqZWN0LmtleXMobykubGVuZ3RofHxPYmplY3Qua2V5cyhpKS5sZW5ndGgpJiZ0aGlzLnF1ZXVlLnB1c2goe3BlbmRpbmc6aSxwZW5kaW5nQ291bnQ6T2JqZWN0LmtleXMoaSkubGVuZ3RoLGxvYWRlZDp7fSxlcnJvcnM6W10sY2FsbGJhY2s6cn0pLHt0b0xvYWQ6T2JqZWN0LmtleXMobykscGVuZGluZzpPYmplY3Qua2V5cyhpKSx0b0xvYWRMYW5ndWFnZXM6T2JqZWN0LmtleXMoYSksdG9Mb2FkTmFtZXNwYWNlczpPYmplY3Qua2V5cyhsKX19bG9hZGVkKGUsdCxuKXtjb25zdCByPWUuc3BsaXQoXCJ8XCIpLG89clswXSxpPXJbMV07dCYmdGhpcy5lbWl0KFwiZmFpbGVkTG9hZGluZ1wiLG8saSx0KSxuJiZ0aGlzLnN0b3JlLmFkZFJlc291cmNlQnVuZGxlKG8saSxuKSx0aGlzLnN0YXRlW2VdPXQ/LTE6Mjtjb25zdCBhPXt9O3RoaXMucXVldWUuZm9yRWFjaCgobj0+eyFmdW5jdGlvbihlLHQsbixyKXtjb25zdHtvYmo6byxrOml9PWcoZSx0LE9iamVjdCk7b1tpXT1vW2ldfHxbXSxyJiYob1tpXT1vW2ldLmNvbmNhdChuKSkscnx8b1tpXS5wdXNoKG4pfShuLmxvYWRlZCxbb10saSksZnVuY3Rpb24oZSx0KXt2b2lkIDAhPT1lLnBlbmRpbmdbdF0mJihkZWxldGUgZS5wZW5kaW5nW3RdLGUucGVuZGluZ0NvdW50LS0pfShuLGUpLHQmJm4uZXJyb3JzLnB1c2godCksMCE9PW4ucGVuZGluZ0NvdW50fHxuLmRvbmV8fChPYmplY3Qua2V5cyhuLmxvYWRlZCkuZm9yRWFjaCgoZT0+e2FbZV18fChhW2VdPXt9KTtjb25zdCB0PW4ubG9hZGVkW2VdO3QubGVuZ3RoJiZ0LmZvckVhY2goKHQ9Pnt2b2lkIDA9PT1hW2VdW3RdJiYoYVtlXVt0XT0hMCl9KSl9KSksbi5kb25lPSEwLG4uZXJyb3JzLmxlbmd0aD9uLmNhbGxiYWNrKG4uZXJyb3JzKTpuLmNhbGxiYWNrKCkpfSkpLHRoaXMuZW1pdChcImxvYWRlZFwiLGEpLHRoaXMucXVldWU9dGhpcy5xdWV1ZS5maWx0ZXIoKGU9PiFlLmRvbmUpKX1yZWFkKGUsdCxuKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MCxvPWFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdP2FyZ3VtZW50c1s0XTp0aGlzLnJldHJ5VGltZW91dCxpPWFyZ3VtZW50cy5sZW5ndGg+NT9hcmd1bWVudHNbNV06dm9pZCAwO2lmKCFlLmxlbmd0aClyZXR1cm4gaShudWxsLHt9KTtpZih0aGlzLnJlYWRpbmdDYWxscz49dGhpcy5tYXhQYXJhbGxlbFJlYWRzKXJldHVybiB2b2lkIHRoaXMud2FpdGluZ1JlYWRzLnB1c2goe2xuZzplLG5zOnQsZmNOYW1lOm4sdHJpZWQ6cix3YWl0Om8sY2FsbGJhY2s6aX0pO3RoaXMucmVhZGluZ0NhbGxzKys7Y29uc3QgYT0oYSxsKT0+e2lmKHRoaXMucmVhZGluZ0NhbGxzLS0sdGhpcy53YWl0aW5nUmVhZHMubGVuZ3RoPjApe2NvbnN0IGU9dGhpcy53YWl0aW5nUmVhZHMuc2hpZnQoKTt0aGlzLnJlYWQoZS5sbmcsZS5ucyxlLmZjTmFtZSxlLnRyaWVkLGUud2FpdCxlLmNhbGxiYWNrKX1hJiZsJiZyPHRoaXMubWF4UmV0cmllcz9zZXRUaW1lb3V0KCgoKT0+e3RoaXMucmVhZC5jYWxsKHRoaXMsZSx0LG4scisxLDIqbyxpKX0pLG8pOmkoYSxsKX0sbD10aGlzLmJhY2tlbmRbbl0uYmluZCh0aGlzLmJhY2tlbmQpO2lmKDIhPT1sLmxlbmd0aClyZXR1cm4gbChlLHQsYSk7dHJ5e2NvbnN0IG49bChlLHQpO24mJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4udGhlbj9uLnRoZW4oKGU9PmEobnVsbCxlKSkpLmNhdGNoKGEpOmEobnVsbCxuKX1jYXRjaChlKXthKGUpfX1wcmVwYXJlTG9hZGluZyhlLHQpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fSxyPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO2lmKCF0aGlzLmJhY2tlbmQpcmV0dXJuIHRoaXMubG9nZ2VyLndhcm4oXCJObyBiYWNrZW5kIHdhcyBhZGRlZCB2aWEgaTE4bmV4dC51c2UuIFdpbGwgbm90IGxvYWQgcmVzb3VyY2VzLlwiKSxyJiZyKCk7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPXRoaXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkoZSkpLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1bdF0pO2NvbnN0IG89dGhpcy5xdWV1ZUxvYWQoZSx0LG4scik7aWYoIW8udG9Mb2FkLmxlbmd0aClyZXR1cm4gby5wZW5kaW5nLmxlbmd0aHx8cigpLG51bGw7by50b0xvYWQuZm9yRWFjaCgoZT0+e3RoaXMubG9hZE9uZShlKX0pKX1sb2FkKGUsdCxuKXt0aGlzLnByZXBhcmVMb2FkaW5nKGUsdCx7fSxuKX1yZWxvYWQoZSx0LG4pe3RoaXMucHJlcGFyZUxvYWRpbmcoZSx0LHtyZWxvYWQ6ITB9LG4pfWxvYWRPbmUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOlwiXCI7Y29uc3Qgbj1lLnNwbGl0KFwifFwiKSxyPW5bMF0sbz1uWzFdO3RoaXMucmVhZChyLG8sXCJyZWFkXCIsdm9pZCAwLHZvaWQgMCwoKG4saSk9PntuJiZ0aGlzLmxvZ2dlci53YXJuKGAke3R9bG9hZGluZyBuYW1lc3BhY2UgJHtvfSBmb3IgbGFuZ3VhZ2UgJHtyfSBmYWlsZWRgLG4pLCFuJiZpJiZ0aGlzLmxvZ2dlci5sb2coYCR7dH1sb2FkZWQgbmFtZXNwYWNlICR7b30gZm9yIGxhbmd1YWdlICR7cn1gLGkpLHRoaXMubG9hZGVkKGUsbixpKX0pKX1zYXZlTWlzc2luZyhlLHQsbixyLG8pe2xldCBpPWFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdP2FyZ3VtZW50c1s1XTp7fSxhPWFyZ3VtZW50cy5sZW5ndGg+NiYmdm9pZCAwIT09YXJndW1lbnRzWzZdP2FyZ3VtZW50c1s2XTooKT0+e307aWYodGhpcy5zZXJ2aWNlcy51dGlscyYmdGhpcy5zZXJ2aWNlcy51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UmJiF0aGlzLnNlcnZpY2VzLnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSh0KSl0aGlzLmxvZ2dlci53YXJuKGBkaWQgbm90IHNhdmUga2V5IFwiJHtufVwiIGFzIHRoZSBuYW1lc3BhY2UgXCIke3R9XCIgd2FzIG5vdCB5ZXQgbG9hZGVkYCxcIlRoaXMgbWVhbnMgc29tZXRoaW5nIElTIFdST05HIGluIHlvdXIgc2V0dXAuIFlvdSBhY2Nlc3MgdGhlIHQgZnVuY3Rpb24gYmVmb3JlIGkxOG5leHQuaW5pdCAvIGkxOG5leHQubG9hZE5hbWVzcGFjZSAvIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2Ugd2FzIGRvbmUuIFdhaXQgZm9yIHRoZSBjYWxsYmFjayBvciBQcm9taXNlIHRvIHJlc29sdmUgYmVmb3JlIGFjY2Vzc2luZyBpdCEhIVwiKTtlbHNlIGlmKG51bGwhPW4mJlwiXCIhPT1uKXtpZih0aGlzLmJhY2tlbmQmJnRoaXMuYmFja2VuZC5jcmVhdGUpe2NvbnN0IGw9ey4uLmksaXNVcGRhdGU6b30scz10aGlzLmJhY2tlbmQuY3JlYXRlLmJpbmQodGhpcy5iYWNrZW5kKTtpZihzLmxlbmd0aDw2KXRyeXtsZXQgbztvPTU9PT1zLmxlbmd0aD9zKGUsdCxuLHIsbCk6cyhlLHQsbixyKSxvJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBvLnRoZW4/by50aGVuKChlPT5hKG51bGwsZSkpKS5jYXRjaChhKTphKG51bGwsbyl9Y2F0Y2goZSl7YShlKX1lbHNlIHMoZSx0LG4scixhLGwpfWUmJmVbMF0mJnRoaXMuc3RvcmUuYWRkUmVzb3VyY2UoZVswXSx0LG4scil9fX1mdW5jdGlvbiBGKCl7cmV0dXJue2RlYnVnOiExLGluaXRJbW1lZGlhdGU6ITAsbnM6W1widHJhbnNsYXRpb25cIl0sZGVmYXVsdE5TOltcInRyYW5zbGF0aW9uXCJdLGZhbGxiYWNrTG5nOltcImRldlwiXSxmYWxsYmFja05TOiExLHN1cHBvcnRlZExuZ3M6ITEsbm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzOiExLGxvYWQ6XCJhbGxcIixwcmVsb2FkOiExLHNpbXBsaWZ5UGx1cmFsU3VmZml4OiEwLGtleVNlcGFyYXRvcjpcIi5cIixuc1NlcGFyYXRvcjpcIjpcIixwbHVyYWxTZXBhcmF0b3I6XCJfXCIsY29udGV4dFNlcGFyYXRvcjpcIl9cIixwYXJ0aWFsQnVuZGxlZExhbmd1YWdlczohMSxzYXZlTWlzc2luZzohMSx1cGRhdGVNaXNzaW5nOiExLHNhdmVNaXNzaW5nVG86XCJmYWxsYmFja1wiLHNhdmVNaXNzaW5nUGx1cmFsczohMCxtaXNzaW5nS2V5SGFuZGxlcjohMSxtaXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXI6ITEscG9zdFByb2Nlc3M6ITEscG9zdFByb2Nlc3NQYXNzUmVzb2x2ZWQ6ITEscmV0dXJuTnVsbDohMSxyZXR1cm5FbXB0eVN0cmluZzohMCxyZXR1cm5PYmplY3RzOiExLGpvaW5BcnJheXM6ITEscmV0dXJuZWRPYmplY3RIYW5kbGVyOiExLHBhcnNlTWlzc2luZ0tleUhhbmRsZXI6ITEsYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5OiExLGFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlOiExLG92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyOmZ1bmN0aW9uKGUpe2xldCB0PXt9O2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlWzFdJiYodD1lWzFdKSxcInN0cmluZ1wiPT10eXBlb2YgZVsxXSYmKHQuZGVmYXVsdFZhbHVlPWVbMV0pLFwic3RyaW5nXCI9PXR5cGVvZiBlWzJdJiYodC50RGVzY3JpcHRpb249ZVsyXSksXCJvYmplY3RcIj09dHlwZW9mIGVbMl18fFwib2JqZWN0XCI9PXR5cGVvZiBlWzNdKXtjb25zdCBuPWVbM118fGVbMl07T2JqZWN0LmtleXMobikuZm9yRWFjaCgoZT0+e3RbZV09bltlXX0pKX1yZXR1cm4gdH0saW50ZXJwb2xhdGlvbjp7ZXNjYXBlVmFsdWU6ITAsZm9ybWF0OmU9PmUscHJlZml4Olwie3tcIixzdWZmaXg6XCJ9fVwiLGZvcm1hdFNlcGFyYXRvcjpcIixcIix1bmVzY2FwZVByZWZpeDpcIi1cIixuZXN0aW5nUHJlZml4OlwiJHQoXCIsbmVzdGluZ1N1ZmZpeDpcIilcIixuZXN0aW5nT3B0aW9uc1NlcGFyYXRvcjpcIixcIixtYXhSZXBsYWNlczoxZTMsc2tpcE9uVmFyaWFibGVzOiEwfX19ZnVuY3Rpb24gVShlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZS5ucyYmKGUubnM9W2UubnNdKSxcInN0cmluZ1wiPT10eXBlb2YgZS5mYWxsYmFja0xuZyYmKGUuZmFsbGJhY2tMbmc9W2UuZmFsbGJhY2tMbmddKSxcInN0cmluZ1wiPT10eXBlb2YgZS5mYWxsYmFja05TJiYoZS5mYWxsYmFja05TPVtlLmZhbGxiYWNrTlNdKSxlLnN1cHBvcnRlZExuZ3MmJmUuc3VwcG9ydGVkTG5ncy5pbmRleE9mKFwiY2ltb2RlXCIpPDAmJihlLnN1cHBvcnRlZExuZ3M9ZS5zdXBwb3J0ZWRMbmdzLmNvbmNhdChbXCJjaW1vZGVcIl0pKSxlfWZ1bmN0aW9uIFcoKXt9Y2xhc3MgeiBleHRlbmRzIGZ7Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDt2YXIgbjtpZihzdXBlcigpLHRoaXMub3B0aW9ucz1VKGUpLHRoaXMuc2VydmljZXM9e30sdGhpcy5sb2dnZXI9dSx0aGlzLm1vZHVsZXM9e2V4dGVybmFsOltdfSxuPXRoaXMsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pKS5mb3JFYWNoKChlPT57XCJmdW5jdGlvblwiPT10eXBlb2YgbltlXSYmKG5bZV09bltlXS5iaW5kKG4pKX0pKSx0JiYhdGhpcy5pc0luaXRpYWxpemVkJiYhZS5pc0Nsb25lKXtpZighdGhpcy5vcHRpb25zLmluaXRJbW1lZGlhdGUpcmV0dXJuIHRoaXMuaW5pdChlLHQpLHRoaXM7c2V0VGltZW91dCgoKCk9Pnt0aGlzLmluaXQoZSx0KX0pLDApfX1pbml0KCl7dmFyIGU9dGhpcztsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sbj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYobj10LHQ9e30pLCF0LmRlZmF1bHROUyYmITEhPT10LmRlZmF1bHROUyYmdC5ucyYmKFwic3RyaW5nXCI9PXR5cGVvZiB0Lm5zP3QuZGVmYXVsdE5TPXQubnM6dC5ucy5pbmRleE9mKFwidHJhbnNsYXRpb25cIik8MCYmKHQuZGVmYXVsdE5TPXQubnNbMF0pKTtjb25zdCByPUYoKTtmdW5jdGlvbiBvKGUpe3JldHVybiBlP1wiZnVuY3Rpb25cIj09dHlwZW9mIGU/bmV3IGU6ZTpudWxsfWlmKHRoaXMub3B0aW9ucz17Li4uciwuLi50aGlzLm9wdGlvbnMsLi4uVSh0KX0sXCJ2MVwiIT09dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkmJih0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbj17Li4uci5pbnRlcnBvbGF0aW9uLC4uLnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9ufSksdm9pZCAwIT09dC5rZXlTZXBhcmF0b3ImJih0aGlzLm9wdGlvbnMudXNlckRlZmluZWRLZXlTZXBhcmF0b3I9dC5rZXlTZXBhcmF0b3IpLHZvaWQgMCE9PXQubnNTZXBhcmF0b3ImJih0aGlzLm9wdGlvbnMudXNlckRlZmluZWROc1NlcGFyYXRvcj10Lm5zU2VwYXJhdG9yKSwhdGhpcy5vcHRpb25zLmlzQ2xvbmUpe2xldCB0O3RoaXMubW9kdWxlcy5sb2dnZXI/dS5pbml0KG8odGhpcy5tb2R1bGVzLmxvZ2dlciksdGhpcy5vcHRpb25zKTp1LmluaXQobnVsbCx0aGlzLm9wdGlvbnMpLHRoaXMubW9kdWxlcy5mb3JtYXR0ZXI/dD10aGlzLm1vZHVsZXMuZm9ybWF0dGVyOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBJbnRsJiYodD0kKTtjb25zdCBuPW5ldyBSKHRoaXMub3B0aW9ucyk7dGhpcy5zdG9yZT1uZXcgRSh0aGlzLm9wdGlvbnMucmVzb3VyY2VzLHRoaXMub3B0aW9ucyk7Y29uc3QgaT10aGlzLnNlcnZpY2VzO2kubG9nZ2VyPXUsaS5yZXNvdXJjZVN0b3JlPXRoaXMuc3RvcmUsaS5sYW5ndWFnZVV0aWxzPW4saS5wbHVyYWxSZXNvbHZlcj1uZXcgQihuLHtwcmVwZW5kOnRoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3IsY29tcGF0aWJpbGl0eUpTT046dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OLHNpbXBsaWZ5UGx1cmFsU3VmZml4OnRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeH0pLCF0fHx0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQmJnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdCE9PXIuaW50ZXJwb2xhdGlvbi5mb3JtYXR8fChpLmZvcm1hdHRlcj1vKHQpLGkuZm9ybWF0dGVyLmluaXQoaSx0aGlzLm9wdGlvbnMpLHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdD1pLmZvcm1hdHRlci5mb3JtYXQuYmluZChpLmZvcm1hdHRlcikpLGkuaW50ZXJwb2xhdG9yPW5ldyBEKHRoaXMub3B0aW9ucyksaS51dGlscz17aGFzTG9hZGVkTmFtZXNwYWNlOnRoaXMuaGFzTG9hZGVkTmFtZXNwYWNlLmJpbmQodGhpcyl9LGkuYmFja2VuZENvbm5lY3Rvcj1uZXcgTihvKHRoaXMubW9kdWxlcy5iYWNrZW5kKSxpLnJlc291cmNlU3RvcmUsaSx0aGlzLm9wdGlvbnMpLGkuYmFja2VuZENvbm5lY3Rvci5vbihcIipcIiwoZnVuY3Rpb24odCl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4xP24tMTowKSxvPTE7bzxuO28rKylyW28tMV09YXJndW1lbnRzW29dO2UuZW1pdCh0LC4uLnIpfSkpLHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yJiYoaS5sYW5ndWFnZURldGVjdG9yPW8odGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3IpLGkubGFuZ3VhZ2VEZXRlY3Rvci5pbml0JiZpLmxhbmd1YWdlRGV0ZWN0b3IuaW5pdChpLHRoaXMub3B0aW9ucy5kZXRlY3Rpb24sdGhpcy5vcHRpb25zKSksdGhpcy5tb2R1bGVzLmkxOG5Gb3JtYXQmJihpLmkxOG5Gb3JtYXQ9byh0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdCksaS5pMThuRm9ybWF0LmluaXQmJmkuaTE4bkZvcm1hdC5pbml0KHRoaXMpKSx0aGlzLnRyYW5zbGF0b3I9bmV3IE0odGhpcy5zZXJ2aWNlcyx0aGlzLm9wdGlvbnMpLHRoaXMudHJhbnNsYXRvci5vbihcIipcIiwoZnVuY3Rpb24odCl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4xP24tMTowKSxvPTE7bzxuO28rKylyW28tMV09YXJndW1lbnRzW29dO2UuZW1pdCh0LC4uLnIpfSkpLHRoaXMubW9kdWxlcy5leHRlcm5hbC5mb3JFYWNoKChlPT57ZS5pbml0JiZlLmluaXQodGhpcyl9KSl9aWYodGhpcy5mb3JtYXQ9dGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZm9ybWF0LG58fChuPVcpLHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyYmIXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciYmIXRoaXMub3B0aW9ucy5sbmcpe2NvbnN0IGU9dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nKTtlLmxlbmd0aD4wJiZcImRldlwiIT09ZVswXSYmKHRoaXMub3B0aW9ucy5sbmc9ZVswXSl9dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yfHx0aGlzLm9wdGlvbnMubG5nfHx0aGlzLmxvZ2dlci53YXJuKFwiaW5pdDogbm8gbGFuZ3VhZ2VEZXRlY3RvciBpcyB1c2VkIGFuZCBubyBsbmcgaXMgZGVmaW5lZFwiKTtbXCJnZXRSZXNvdXJjZVwiLFwiaGFzUmVzb3VyY2VCdW5kbGVcIixcImdldFJlc291cmNlQnVuZGxlXCIsXCJnZXREYXRhQnlMYW5ndWFnZVwiXS5mb3JFYWNoKCh0PT57dGhpc1t0XT1mdW5jdGlvbigpe3JldHVybiBlLnN0b3JlW3RdKC4uLmFyZ3VtZW50cyl9fSkpO1tcImFkZFJlc291cmNlXCIsXCJhZGRSZXNvdXJjZXNcIixcImFkZFJlc291cmNlQnVuZGxlXCIsXCJyZW1vdmVSZXNvdXJjZUJ1bmRsZVwiXS5mb3JFYWNoKCh0PT57dGhpc1t0XT1mdW5jdGlvbigpe3JldHVybiBlLnN0b3JlW3RdKC4uLmFyZ3VtZW50cyksZX19KSk7Y29uc3QgaT1kKCksYT0oKT0+e2NvbnN0IGU9KGUsdCk9Pnt0aGlzLmlzSW5pdGlhbGl6ZWQmJiF0aGlzLmluaXRpYWxpemVkU3RvcmVPbmNlJiZ0aGlzLmxvZ2dlci53YXJuKFwiaW5pdDogaTE4bmV4dCBpcyBhbHJlYWR5IGluaXRpYWxpemVkLiBZb3Ugc2hvdWxkIGNhbGwgaW5pdCBqdXN0IG9uY2UhXCIpLHRoaXMuaXNJbml0aWFsaXplZD0hMCx0aGlzLm9wdGlvbnMuaXNDbG9uZXx8dGhpcy5sb2dnZXIubG9nKFwiaW5pdGlhbGl6ZWRcIix0aGlzLm9wdGlvbnMpLHRoaXMuZW1pdChcImluaXRpYWxpemVkXCIsdGhpcy5vcHRpb25zKSxpLnJlc29sdmUodCksbihlLHQpfTtpZih0aGlzLmxhbmd1YWdlcyYmXCJ2MVwiIT09dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkmJiF0aGlzLmlzSW5pdGlhbGl6ZWQpcmV0dXJuIGUobnVsbCx0aGlzLnQuYmluZCh0aGlzKSk7dGhpcy5jaGFuZ2VMYW5ndWFnZSh0aGlzLm9wdGlvbnMubG5nLGUpfTtyZXR1cm4gdGhpcy5vcHRpb25zLnJlc291cmNlc3x8IXRoaXMub3B0aW9ucy5pbml0SW1tZWRpYXRlP2EoKTpzZXRUaW1lb3V0KGEsMCksaX1sb2FkUmVzb3VyY2VzKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpXO2NvbnN0IG49XCJzdHJpbmdcIj09dHlwZW9mIGU/ZTp0aGlzLmxhbmd1YWdlO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJih0PWUpLCF0aGlzLm9wdGlvbnMucmVzb3VyY2VzfHx0aGlzLm9wdGlvbnMucGFydGlhbEJ1bmRsZWRMYW5ndWFnZXMpe2lmKG4mJlwiY2ltb2RlXCI9PT1uLnRvTG93ZXJDYXNlKCkmJighdGhpcy5vcHRpb25zLnByZWxvYWR8fDA9PT10aGlzLm9wdGlvbnMucHJlbG9hZC5sZW5ndGgpKXJldHVybiB0KCk7Y29uc3QgZT1bXSxyPXQ9PntpZighdClyZXR1cm47aWYoXCJjaW1vZGVcIj09PXQpcmV0dXJuO3RoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkodCkuZm9yRWFjaCgodD0+e1wiY2ltb2RlXCIhPT10JiZlLmluZGV4T2YodCk8MCYmZS5wdXNoKHQpfSkpfTtpZihuKXIobik7ZWxzZXt0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpLmZvckVhY2goKGU9PnIoZSkpKX10aGlzLm9wdGlvbnMucHJlbG9hZCYmdGhpcy5vcHRpb25zLnByZWxvYWQuZm9yRWFjaCgoZT0+cihlKSkpLHRoaXMuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5sb2FkKGUsdGhpcy5vcHRpb25zLm5zLChlPT57ZXx8dGhpcy5yZXNvbHZlZExhbmd1YWdlfHwhdGhpcy5sYW5ndWFnZXx8dGhpcy5zZXRSZXNvbHZlZExhbmd1YWdlKHRoaXMubGFuZ3VhZ2UpLHQoZSl9KSl9ZWxzZSB0KG51bGwpfXJlbG9hZFJlc291cmNlcyhlLHQsbil7Y29uc3Qgcj1kKCk7cmV0dXJuIGV8fChlPXRoaXMubGFuZ3VhZ2VzKSx0fHwodD10aGlzLm9wdGlvbnMubnMpLG58fChuPVcpLHRoaXMuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5yZWxvYWQoZSx0LChlPT57ci5yZXNvbHZlKCksbihlKX0pKSxyfXVzZShlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJZb3UgYXJlIHBhc3NpbmcgYW4gdW5kZWZpbmVkIG1vZHVsZSEgUGxlYXNlIGNoZWNrIHRoZSBvYmplY3QgeW91IGFyZSBwYXNzaW5nIHRvIGkxOG5leHQudXNlKClcIik7aWYoIWUudHlwZSl0aHJvdyBuZXcgRXJyb3IoXCJZb3UgYXJlIHBhc3NpbmcgYSB3cm9uZyBtb2R1bGUhIFBsZWFzZSBjaGVjayB0aGUgb2JqZWN0IHlvdSBhcmUgcGFzc2luZyB0byBpMThuZXh0LnVzZSgpXCIpO3JldHVyblwiYmFja2VuZFwiPT09ZS50eXBlJiYodGhpcy5tb2R1bGVzLmJhY2tlbmQ9ZSksKFwibG9nZ2VyXCI9PT1lLnR5cGV8fGUubG9nJiZlLndhcm4mJmUuZXJyb3IpJiYodGhpcy5tb2R1bGVzLmxvZ2dlcj1lKSxcImxhbmd1YWdlRGV0ZWN0b3JcIj09PWUudHlwZSYmKHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yPWUpLFwiaTE4bkZvcm1hdFwiPT09ZS50eXBlJiYodGhpcy5tb2R1bGVzLmkxOG5Gb3JtYXQ9ZSksXCJwb3N0UHJvY2Vzc29yXCI9PT1lLnR5cGUmJlMuYWRkUG9zdFByb2Nlc3NvcihlKSxcImZvcm1hdHRlclwiPT09ZS50eXBlJiYodGhpcy5tb2R1bGVzLmZvcm1hdHRlcj1lKSxcIjNyZFBhcnR5XCI9PT1lLnR5cGUmJnRoaXMubW9kdWxlcy5leHRlcm5hbC5wdXNoKGUpLHRoaXN9c2V0UmVzb2x2ZWRMYW5ndWFnZShlKXtpZihlJiZ0aGlzLmxhbmd1YWdlcyYmIShbXCJjaW1vZGVcIixcImRldlwiXS5pbmRleE9mKGUpPi0xKSlmb3IobGV0IGU9MDtlPHRoaXMubGFuZ3VhZ2VzLmxlbmd0aDtlKyspe2NvbnN0IHQ9dGhpcy5sYW5ndWFnZXNbZV07aWYoIShbXCJjaW1vZGVcIixcImRldlwiXS5pbmRleE9mKHQpPi0xKSYmdGhpcy5zdG9yZS5oYXNMYW5ndWFnZVNvbWVUcmFuc2xhdGlvbnModCkpe3RoaXMucmVzb2x2ZWRMYW5ndWFnZT10O2JyZWFrfX19Y2hhbmdlTGFuZ3VhZ2UoZSx0KXt2YXIgbj10aGlzO3RoaXMuaXNMYW5ndWFnZUNoYW5naW5nVG89ZTtjb25zdCByPWQoKTt0aGlzLmVtaXQoXCJsYW5ndWFnZUNoYW5naW5nXCIsZSk7Y29uc3Qgbz1lPT57dGhpcy5sYW5ndWFnZT1lLHRoaXMubGFuZ3VhZ2VzPXRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkoZSksdGhpcy5yZXNvbHZlZExhbmd1YWdlPXZvaWQgMCx0aGlzLnNldFJlc29sdmVkTGFuZ3VhZ2UoZSl9LGk9KGUsaSk9PntpPyhvKGkpLHRoaXMudHJhbnNsYXRvci5jaGFuZ2VMYW5ndWFnZShpKSx0aGlzLmlzTGFuZ3VhZ2VDaGFuZ2luZ1RvPXZvaWQgMCx0aGlzLmVtaXQoXCJsYW5ndWFnZUNoYW5nZWRcIixpKSx0aGlzLmxvZ2dlci5sb2coXCJsYW5ndWFnZUNoYW5nZWRcIixpKSk6dGhpcy5pc0xhbmd1YWdlQ2hhbmdpbmdUbz12b2lkIDAsci5yZXNvbHZlKChmdW5jdGlvbigpe3JldHVybiBuLnQoLi4uYXJndW1lbnRzKX0pKSx0JiZ0KGUsKGZ1bmN0aW9uKCl7cmV0dXJuIG4udCguLi5hcmd1bWVudHMpfSkpfSxhPXQ9PntlfHx0fHwhdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yfHwodD1bXSk7Y29uc3Qgbj1cInN0cmluZ1wiPT10eXBlb2YgdD90OnRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5nZXRCZXN0TWF0Y2hGcm9tQ29kZXModCk7biYmKHRoaXMubGFuZ3VhZ2V8fG8obiksdGhpcy50cmFuc2xhdG9yLmxhbmd1YWdlfHx0aGlzLnRyYW5zbGF0b3IuY2hhbmdlTGFuZ3VhZ2UobiksdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yJiZ0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuY2FjaGVVc2VyTGFuZ3VhZ2UmJnRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5jYWNoZVVzZXJMYW5ndWFnZShuKSksdGhpcy5sb2FkUmVzb3VyY2VzKG4sKGU9PntpKGUsbil9KSl9O3JldHVybiBlfHwhdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yfHx0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuYXN5bmM/IWUmJnRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciYmdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmFzeW5jPzA9PT10aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0Lmxlbmd0aD90aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0KCkudGhlbihhKTp0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0KGEpOmEoZSk6YSh0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0KCkpLHJ9Z2V0Rml4ZWRUKGUsdCxuKXt2YXIgcj10aGlzO2NvbnN0IG89ZnVuY3Rpb24oZSx0KXtsZXQgaTtpZihcIm9iamVjdFwiIT10eXBlb2YgdCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYT4yP2EtMjowKSxzPTI7czxhO3MrKylsW3MtMl09YXJndW1lbnRzW3NdO2k9ci5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyKFtlLHRdLmNvbmNhdChsKSl9ZWxzZSBpPXsuLi50fTtpLmxuZz1pLmxuZ3x8by5sbmcsaS5sbmdzPWkubG5nc3x8by5sbmdzLGkubnM9aS5uc3x8by5ucyxpLmtleVByZWZpeD1pLmtleVByZWZpeHx8bnx8by5rZXlQcmVmaXg7Y29uc3QgYz1yLm9wdGlvbnMua2V5U2VwYXJhdG9yfHxcIi5cIjtsZXQgdTtyZXR1cm4gdT1pLmtleVByZWZpeCYmQXJyYXkuaXNBcnJheShlKT9lLm1hcCgoZT0+YCR7aS5rZXlQcmVmaXh9JHtjfSR7ZX1gKSk6aS5rZXlQcmVmaXg/YCR7aS5rZXlQcmVmaXh9JHtjfSR7ZX1gOmUsci50KHUsaSl9O3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP28ubG5nPWU6by5sbmdzPWUsby5ucz10LG8ua2V5UHJlZml4PW4sb310KCl7cmV0dXJuIHRoaXMudHJhbnNsYXRvciYmdGhpcy50cmFuc2xhdG9yLnRyYW5zbGF0ZSguLi5hcmd1bWVudHMpfWV4aXN0cygpe3JldHVybiB0aGlzLnRyYW5zbGF0b3ImJnRoaXMudHJhbnNsYXRvci5leGlzdHMoLi4uYXJndW1lbnRzKX1zZXREZWZhdWx0TmFtZXNwYWNlKGUpe3RoaXMub3B0aW9ucy5kZWZhdWx0TlM9ZX1oYXNMb2FkZWROYW1lc3BhY2UoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCF0aGlzLmlzSW5pdGlhbGl6ZWQpcmV0dXJuIHRoaXMubG9nZ2VyLndhcm4oXCJoYXNMb2FkZWROYW1lc3BhY2U6IGkxOG5leHQgd2FzIG5vdCBpbml0aWFsaXplZFwiLHRoaXMubGFuZ3VhZ2VzKSwhMTtpZighdGhpcy5sYW5ndWFnZXN8fCF0aGlzLmxhbmd1YWdlcy5sZW5ndGgpcmV0dXJuIHRoaXMubG9nZ2VyLndhcm4oXCJoYXNMb2FkZWROYW1lc3BhY2U6IGkxOG4ubGFuZ3VhZ2VzIHdlcmUgdW5kZWZpbmVkIG9yIGVtcHR5XCIsdGhpcy5sYW5ndWFnZXMpLCExO2NvbnN0IG49dC5sbmd8fHRoaXMucmVzb2x2ZWRMYW5ndWFnZXx8dGhpcy5sYW5ndWFnZXNbMF0scj0hIXRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nLG89dGhpcy5sYW5ndWFnZXNbdGhpcy5sYW5ndWFnZXMubGVuZ3RoLTFdO2lmKFwiY2ltb2RlXCI9PT1uLnRvTG93ZXJDYXNlKCkpcmV0dXJuITA7Y29uc3QgaT0oZSx0KT0+e2NvbnN0IG49dGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLnN0YXRlW2Ake2V9fCR7dH1gXTtyZXR1cm4tMT09PW58fDI9PT1ufTtpZih0LnByZWNoZWNrKXtjb25zdCBlPXQucHJlY2hlY2sodGhpcyxpKTtpZih2b2lkIDAhPT1lKXJldHVybiBlfXJldHVybiEhdGhpcy5oYXNSZXNvdXJjZUJ1bmRsZShuLGUpfHwoISh0aGlzLnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IuYmFja2VuZCYmKCF0aGlzLm9wdGlvbnMucmVzb3VyY2VzfHx0aGlzLm9wdGlvbnMucGFydGlhbEJ1bmRsZWRMYW5ndWFnZXMpKXx8ISghaShuLGUpfHxyJiYhaShvLGUpKSl9bG9hZE5hbWVzcGFjZXMoZSx0KXtjb25zdCBuPWQoKTtyZXR1cm4gdGhpcy5vcHRpb25zLm5zPyhcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W2VdKSxlLmZvckVhY2goKGU9Pnt0aGlzLm9wdGlvbnMubnMuaW5kZXhPZihlKTwwJiZ0aGlzLm9wdGlvbnMubnMucHVzaChlKX0pKSx0aGlzLmxvYWRSZXNvdXJjZXMoKGU9PntuLnJlc29sdmUoKSx0JiZ0KGUpfSkpLG4pOih0JiZ0KCksUHJvbWlzZS5yZXNvbHZlKCkpfWxvYWRMYW5ndWFnZXMoZSx0KXtjb25zdCBuPWQoKTtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W2VdKTtjb25zdCByPXRoaXMub3B0aW9ucy5wcmVsb2FkfHxbXSxvPWUuZmlsdGVyKChlPT5yLmluZGV4T2YoZSk8MCkpO3JldHVybiBvLmxlbmd0aD8odGhpcy5vcHRpb25zLnByZWxvYWQ9ci5jb25jYXQobyksdGhpcy5sb2FkUmVzb3VyY2VzKChlPT57bi5yZXNvbHZlKCksdCYmdChlKX0pKSxuKToodCYmdCgpLFByb21pc2UucmVzb2x2ZSgpKX1kaXIoZSl7aWYoZXx8KGU9dGhpcy5yZXNvbHZlZExhbmd1YWdlfHwodGhpcy5sYW5ndWFnZXMmJnRoaXMubGFuZ3VhZ2VzLmxlbmd0aD4wP3RoaXMubGFuZ3VhZ2VzWzBdOnRoaXMubGFuZ3VhZ2UpKSwhZSlyZXR1cm5cInJ0bFwiO2NvbnN0IHQ9dGhpcy5zZXJ2aWNlcyYmdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzfHxuZXcgUihGKCkpO3JldHVybltcImFyXCIsXCJzaHVcIixcInNxclwiLFwic3NoXCIsXCJ4YWFcIixcInloZFwiLFwieXVkXCIsXCJhYW9cIixcImFiaFwiLFwiYWJ2XCIsXCJhY21cIixcImFjcVwiLFwiYWN3XCIsXCJhY3hcIixcImFjeVwiLFwiYWRmXCIsXCJhZHNcIixcImFlYlwiLFwiYWVjXCIsXCJhZmJcIixcImFqcFwiLFwiYXBjXCIsXCJhcGRcIixcImFyYlwiLFwiYXJxXCIsXCJhcnNcIixcImFyeVwiLFwiYXJ6XCIsXCJhdXpcIixcImF2bFwiLFwiYXloXCIsXCJheWxcIixcImF5blwiLFwiYXlwXCIsXCJiYnpcIixcInBnYVwiLFwiaGVcIixcIml3XCIsXCJwc1wiLFwicGJ0XCIsXCJwYnVcIixcInBzdFwiLFwicHJwXCIsXCJwcmRcIixcInVnXCIsXCJ1clwiLFwieWRkXCIsXCJ5ZHNcIixcInlpaFwiLFwiamlcIixcInlpXCIsXCJoYm9cIixcIm1lblwiLFwieG1uXCIsXCJmYVwiLFwianByXCIsXCJwZW9cIixcInBlc1wiLFwicHJzXCIsXCJkdlwiLFwic2FtXCIsXCJja2JcIl0uaW5kZXhPZih0LmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpKT4tMXx8ZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCItYXJhYlwiKT4xP1wicnRsXCI6XCJsdHJcIn1zdGF0aWMgY3JlYXRlSW5zdGFuY2UoKXtyZXR1cm4gbmV3IHooYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX1jbG9uZUluc3RhbmNlKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOlc7Y29uc3Qgbj1lLmZvcmtSZXNvdXJjZVN0b3JlO24mJmRlbGV0ZSBlLmZvcmtSZXNvdXJjZVN0b3JlO2NvbnN0IHI9ey4uLnRoaXMub3B0aW9ucywuLi5lLGlzQ2xvbmU6ITB9LG89bmV3IHoocik7dm9pZCAwPT09ZS5kZWJ1ZyYmdm9pZCAwPT09ZS5wcmVmaXh8fChvLmxvZ2dlcj1vLmxvZ2dlci5jbG9uZShlKSk7cmV0dXJuW1wic3RvcmVcIixcInNlcnZpY2VzXCIsXCJsYW5ndWFnZVwiXS5mb3JFYWNoKChlPT57b1tlXT10aGlzW2VdfSkpLG8uc2VydmljZXM9ey4uLnRoaXMuc2VydmljZXN9LG8uc2VydmljZXMudXRpbHM9e2hhc0xvYWRlZE5hbWVzcGFjZTpvLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKG8pfSxuJiYoby5zdG9yZT1uZXcgRSh0aGlzLnN0b3JlLmRhdGEsciksby5zZXJ2aWNlcy5yZXNvdXJjZVN0b3JlPW8uc3RvcmUpLG8udHJhbnNsYXRvcj1uZXcgTShvLnNlcnZpY2VzLHIpLG8udHJhbnNsYXRvci5vbihcIipcIiwoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO28uZW1pdChlLC4uLm4pfSkpLG8uaW5pdChyLHQpLG8udHJhbnNsYXRvci5vcHRpb25zPXIsby50cmFuc2xhdG9yLmJhY2tlbmRDb25uZWN0b3Iuc2VydmljZXMudXRpbHM9e2hhc0xvYWRlZE5hbWVzcGFjZTpvLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKG8pfSxvfXRvSlNPTigpe3JldHVybntvcHRpb25zOnRoaXMub3B0aW9ucyxzdG9yZTp0aGlzLnN0b3JlLGxhbmd1YWdlOnRoaXMubGFuZ3VhZ2UsbGFuZ3VhZ2VzOnRoaXMubGFuZ3VhZ2VzLHJlc29sdmVkTGFuZ3VhZ2U6dGhpcy5yZXNvbHZlZExhbmd1YWdlfX19Y29uc3QgRz16LmNyZWF0ZUluc3RhbmNlKCk7Ry5jcmVhdGVJbnN0YW5jZT16LmNyZWF0ZUluc3RhbmNlO0cuY3JlYXRlSW5zdGFuY2UsRy5kaXIsRy5pbml0LEcubG9hZFJlc291cmNlcyxHLnJlbG9hZFJlc291cmNlcyxHLnVzZSxHLmNoYW5nZUxhbmd1YWdlLEcuZ2V0Rml4ZWRULEcudCxHLmV4aXN0cyxHLnNldERlZmF1bHROYW1lc3BhY2UsRy5oYXNMb2FkZWROYW1lc3BhY2UsRy5sb2FkTmFtZXNwYWNlcyxHLmxvYWRMYW5ndWFnZXM7Ry50O24oMzQyMCksbigxMTI3KTtuKDU0MzgpO3ZhciBxPW4oMzkyNik7bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5xdWV1ZT1bXSx0aGlzLmxvY2tlZD0hMX1sb2NrKCl7cmV0dXJuIG5ldyBQcm9taXNlKChlPT57dGhpcy5sb2NrZWQ/dGhpcy5xdWV1ZS5wdXNoKGUpOih0aGlzLmxvY2tlZD0hMCxlKCkpfSkpfXVubG9jaygpe2lmKHRoaXMucXVldWUubGVuZ3RoPjApe2NvbnN0IGU9dGhpcy5xdWV1ZS5zaGlmdCgpO2UmJmUoKX1lbHNlIHRoaXMubG9ja2VkPSExfX07bmV3IE1hcDt2YXIgWTshZnVuY3Rpb24oZSl7ZS5FUlJPUj1cImVycm9yXCIsZS5TVUNDRVNTPVwic3VjY2Vzc1wiLGUuSU5GTz1cImluZm9cIn0oWXx8KFk9e30pKTtjb25zdCBLPSgoZSx0KT0+e2NvbnN0IG49ZTtyZXR1cm4gbi53b3Jrc3BhY2VQbGF0Zm9ybXx8KG4ud29ya3NwYWNlUGxhdGZvcm09e30pLG4ud29ya3NwYWNlUGxhdGZvcm0uX2ludGVybmFsRGVmZXJTaG93T3B0aW9ucz17c2V0QXNGb3JlZ3JvdW5kOiEhdCxkZWZlclNob3dFbmFibGVkOiEwLGF1dG9TaG93Om4ud29ya3NwYWNlUGxhdGZvcm0/Ll9pbnRlcm5hbEF1dG9TaG93fHxuLndvcmtzcGFjZVBsYXRmb3JtPy5faW50ZXJuYWxEZWZlclNob3dPcHRpb25zPy5hdXRvU2hvd3x8dm9pZCAwPT09bi5hdXRvU2hvd3x8bi5hdXRvU2hvd30sbi5hdXRvU2hvdz0hMSxufSkoe2Fsd2F5c09uVG9wOiEwLGF1dG9TaG93OiExLGZyYW1lOiExLHJlc2l6YWJsZTohMSxzaG93VGFza2Jhckljb246ITF9KTt2YXIgWDshZnVuY3Rpb24oZSl7ZS5Mb2NrZWQ9XCJMb2NrQ2xvc2VkSWNvblwiLGUuVW5sb2NrZWQ9XCJMb2NrT3BlbjFJY29uXCJ9KFh8fChYPXt9KSk7IWZ1bmN0aW9uKGU9Syl7Y29uc3QgdD1uZXcgTWFwfSgpO3ZhciBKPW4oODA2MSksUT1uKDQ3MjgpO24oNjY1MCk7Y29uc3QgZWU9KGUsdD0wKT0+e2xldCBuLHIsbz0hMTtjb25zdCBpPWFzeW5jIHI9Pntjb25zdCBhPWF3YWl0IGUoLi4ucik7aWYobyl7YXdhaXQgbmV3IFByb21pc2UoKGU9PnNldFRpbWVvdXQoZSx0KSkpO2NvbnN0IGU9bjtyZXR1cm4gbj12b2lkIDAsbz0hMSxpKGUpfXJldHVybiBhfTtyZXR1cm4oLi4uZSk9PihyPyhvPSEwLG49ZSk6cj1pKGUpLmNhdGNoKChlPT57dGhyb3cgY29uc29sZS5lcnJvcihcIm1ha2VEZWJvdW5jZWRGdW5jXCIsZSksZX0pKS5maW5hbGx5KCgoKT0+e3I9dm9pZCAwfSkpLHIpfTtmdW5jdGlvbiB0ZShlLHQpe3JldHVybiBhc3luYyhuLC4uLnIpPT57ZS5oYXMobikmJmUuZ2V0KG4pLmZvckVhY2goKGU9PmUoLi4ucikpKSx0JiZhd2FpdCB0KHtldmVudDpuLHBheWxvYWQ6cn0pfX1mdW5jdGlvbiBuZShlLHQpe3JldHVybiB0JiZ0KCh0PT57Y29uc3R7ZXZlbnQ6bixwYXlsb2FkOnJ9PXQ7ZS5oYXMobikmJmUuZ2V0KG4pLmZvckVhY2goKGU9PmUoLi4ucikpKX0pKSwodCxuKT0+e2UuaGFzKHQpfHxlLnNldCh0LG5ldyBTZXQpLGUuZ2V0KHQpLmFkZChuKX19ZnVuY3Rpb24gcmUoZSl7cmV0dXJuKHQsbik9PntlLmhhcyh0KXx8ZS5zZXQodCxuZXcgU2V0KTtjb25zdCByPWUuZ2V0KHQpLG89KC4uLmUpPT57biguLi5lKSxyLmRlbGV0ZShvKX07ci5hZGQobyl9fWZ1bmN0aW9uIG9lKGUpe3JldHVybih0LG4pPT57ZS5oYXModCkmJmUuZ2V0KHQpLmRlbGV0ZShuKX19bigxMDY1KTtsLklBLkJyb3dzZXJNZW51OyhmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dGUodCwodD0+ci5zUyYmZmluLkludGVyQXBwbGljYXRpb25CdXMucHVibGlzaChlLHQpKSksbmUodCwodD0+ci5zUyYmZmluLkludGVyQXBwbGljYXRpb25CdXMuc3Vic2NyaWJlKHt1dWlkOmZpbi5tZS51dWlkfSxlLHQpKSksb2UodCkscmUodCl9KShcIndpbmRvdy5tZW51XCIpLGVlKCgoKT0+KDAsaS5EOSkoKS5nZXRDaGlsZFdpbmRvd3MoKSksNTAwKTtuZXcgTWFwO3ZhciBpZT1uKDMxOTgpO24ubihpZSkoKSgoYXN5bmMoKT0+e2NvbnN0IGU9YXdhaXQgZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkuQXBwbGljYXRpb24uZ2V0Q2hpbGRXaW5kb3dzKCk7bGV0IHQsbj0hMTtmb3IoY29uc3QgciBvZiBlKWlmKHIuaWRlbnRpdHkubmFtZT09PWwuSUEuQnJvd3Nlck1lbnV8fHIuaWRlbnRpdHkubmFtZT09PWwuSUEuQnJvd3NlclNhdmVNZW51P3Q9cjphd2FpdCgwLGwuQikoci5pZGVudGl0eSkmJihuPSEwKSxuKWJyZWFrOyFuJiZ0JiZ0LmNsb3NlKCl9KSwxMDAse2xlYWRpbmc6ITEsdHJhaWxpbmc6ITB9KTt2YXIgYWU7IWZ1bmN0aW9uKGUpe2UuTGFiZWw9XCJub3JtYWxcIixlLlNlcGFyYXRvcj1cInNlcGFyYXRvclwiLGUuU3VibWVudT1cInN1Ym1lbnVcIixlLkNoZWNrYm94PVwiY2hlY2tib3hcIn0oYWV8fChhZT17fSkpO2FlLlNlcGFyYXRvcjt2YXIgbGU7IWZ1bmN0aW9uKGUpe2UuU2F2ZT1cIlNhdmVcIixlLlNhdmVBcz1cIlNhdmVBc1wifShsZXx8KGxlPXt9KSk7dmFyIHNlOyFmdW5jdGlvbihlKXtlLkdsb2JhbE1lbnU9XCJnbG9iYWwtbWVudVwiLGUuQ29udGV4dE1lbnU9XCJjb250ZXh0LW1lbnVcIixlLlJlbmFtZVN1cGVydGFiPVwicmVuYW1lLXN1cGVydGFiXCIsZS5BZGRFZGl0Qm9va21hcms9XCJhZGQtZWRpdC1ib29rbWFya1wiLGUuRHJvcGRvd25NZW51PVwiZHJvcGRvd24tbWVudVwifShzZXx8KHNlPXt9KSk7big1OTEyKTtmdW5jdGlvbiBjZShlKXtyZXR1cm4gbmV3IFByb21pc2UoKCh0LG4pPT57ZS5vbmNvbXBsZXRlPWUub25zdWNjZXNzPSgpPT50KGUucmVzdWx0KSxlLm9uYWJvcnQ9ZS5vbmVycm9yPSgpPT5uKGUuZXJyb3IpfSkpfWZ1bmN0aW9uIHVlKGUsdCl7Y29uc3Qgbj1pbmRleGVkREIub3BlbihlKTtuLm9udXBncmFkZW5lZWRlZD0oKT0+bi5yZXN1bHQuY3JlYXRlT2JqZWN0U3RvcmUodCk7Y29uc3Qgcj1jZShuKTtyZXR1cm4oZSxuKT0+ci50aGVuKChyPT5uKHIudHJhbnNhY3Rpb24odCxlKS5vYmplY3RTdG9yZSh0KSkpKX1sZXQgZmU7ZnVuY3Rpb24gZGUoKXtyZXR1cm4gZmV8fChmZT11ZShcImtleXZhbC1zdG9yZVwiLFwia2V5dmFsXCIpKSxmZX1mdW5jdGlvbiBwZShlLHQpe3JldHVybiBlLm9wZW5DdXJzb3IoKS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt0aGlzLnJlc3VsdCYmKHQodGhpcy5yZXN1bHQpLHRoaXMucmVzdWx0LmNvbnRpbnVlKCkpfSxjZShlLnRyYW5zYWN0aW9uKX1jb25zdCBoZT1hc3luYyhlLHQsbik9Pntjb25zdCByPVEuclYoSi5aLkhhc01vdmVkU3RvcmUpLG89cj9KU09OLnBhcnNlKHIpOnt9O2lmKG8mJm9bbl0pcmV0dXJuO29bbl09ITAsUS5MUyhKLlouSGFzTW92ZWRTdG9yZSxKU09OLnN0cmluZ2lmeShvKSk7Y29uc3QgaT1hd2FpdCBmdW5jdGlvbihlPWRlKCkpe3JldHVybiBlKFwicmVhZG9ubHlcIiwodD0+e2lmKHQuZ2V0QWxsJiZ0LmdldEFsbEtleXMpcmV0dXJuIFByb21pc2UuYWxsKFtjZSh0LmdldEFsbEtleXMoKSksY2UodC5nZXRBbGwoKSldKS50aGVuKCgoW2UsdF0pPT5lLm1hcCgoKGUsbik9PltlLHRbbl1dKSkpKTtjb25zdCBuPVtdO3JldHVybiBlKFwicmVhZG9ubHlcIiwoZT0+cGUoZSwoZT0+bi5wdXNoKFtlLmtleSxlLnZhbHVlXSkpKS50aGVuKCgoKT0+bikpKSl9KSl9KGUpO2F3YWl0IGZ1bmN0aW9uKGUsdD1kZSgpKXtyZXR1cm4gdChcInJlYWR3cml0ZVwiLCh0PT4oZS5mb3JFYWNoKChlPT50LnB1dChlWzFdLGVbMF0pKSksY2UodC50cmFuc2FjdGlvbikpKSl9KGksdCl9LGdlPShlLHQpPT51ZShlK1wiLVwiK2Zpbi5tZS51dWlkLHQpLHZlPShlLHQpPT57Y29uc3Qgbj1nZShlLHQpLHI9dWUoZSx0KTtyZXR1cm4gaGUocixuLGUpLG59O3IuX1YmJnIuc1MmJnZlKFwib3BlbmZpbi1ob21lLXBhZ2VzXCIsXCJwYWdlc1wiKTtyLl9WJiZyLnNTJiZnZShcIm9wZW5maW4tZW50ZXJwcmlzZS10YWItaGlzdG9yeVwiLFwicmVtb3ZlZC10YWItc3RhY2tcIiksci5fViYmci5zUyYmZ2UoXCJvcGVuZmluLWVudGVycHJpc2Utc2l0ZS1oaXN0b3J5XCIsXCJ2aXNpdGVkLXNpdGVzXCIpO24oMTY0Nik7dmFyIG1lOyFmdW5jdGlvbihlKXtlW2UuQm90dG9tTGVmdD0wXT1cIkJvdHRvbUxlZnRcIixlW2UuQm90dG9tUmlnaHQ9MV09XCJCb3R0b21SaWdodFwiLGVbZS5DZW50ZXI9Ml09XCJDZW50ZXJcIn0obWV8fChtZT17fSkpO3IuX1YmJnIuc1MmJmdlKFwiZG9jay1wcm92aWRlci1jb25maWdzXCIsXCJkb2NrLXByb3ZpZGVyLWNvbmZpZ3NcIik7big3MDUpO3IuX1YmJnIuc1MmJnZlKFwib3BlbmZpbi13b3Jrc3BhY2UtcGxhdGZvcm0td29ya3NwYWNlc1wiLFwid29ya3NwYWNlc1wiKTtuKDY0OTUpO3IucngsYS5aUC5Ccm93c2VyLGwuR2kudXVpZCxsLklBLkJyb3dzZXJBZGRyZXNzU2VhcmNoUHJlZml4O24oNzA5OCksbig3NTY0KSxuKDkxMTcpfSw3MDk4OihlLHQsbik9PntcInVzZSBzdHJpY3RcIn0sNzEwMDooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQseyRnOigpPT5wfSk7dmFyIHIsbyxpLGEsbCxzLGMsdSxmLGQscCxoO24oNzU2NCksbig2NDk1KSxuKDUzMDQpOyFmdW5jdGlvbihlKXtlLlVybENoYW5nZT1cIlVSTF9DSEFOR0VcIixlLlZpZXdBZGRlZD1cIlZJRVdfQURERURcIixlLlZpZXdSZW1vdmVkPVwiVklFV19SRU1PVkVEXCIsZS5QYWdlQ29udGV4dEFkZGVkPVwiUEFHRV9DT05URVhUX0FEREVEXCIsZS5QYWdlQ29udGV4dFJlbW92ZWQ9XCJQQUdFX0NPTlRFWFRfUkVNT1ZFRFwifShyfHwocj17fSkpLGZ1bmN0aW9uKGUpe2UuTmV3V2luZG93PVwiTmV3V2luZG93XCIsZS5OZXdQYWdlPVwiTmV3UGFnZVwiLGUuU2F2ZVBhZ2U9XCJTYXZlUGFnZVwiLGUuU2F2ZVBhZ2VBcz1cIlNhdmVQYWdlQXNcIixlLlByaW50PVwiUHJpbnRcIixlLlByaW50QWxsPVwiUHJpbnRBbGxcIixlLlByaW50U2NyZWVuPVwiUHJpbnRTY3JlZW5cIixlLkNsb3NlV2luZG93PVwiQ2xvc2VXaW5kb3dcIixlLlJlc3RvcmVDaGFuZ2VzPVwiUmVzdG9yZUNoYW5nZXNcIixlLlNhdmVXb3Jrc3BhY2U9XCJTYXZlV29ya3NwYWNlXCIsZS5TYXZlV29ya3NwYWNlQXM9XCJTYXZlV29ya3NwYWNlQXNcIixlLlJlbmFtZVdvcmtzcGFjZT1cIlJlbmFtZVdvcmtzcGFjZVwiLGUuU3dpdGNoV29ya3NwYWNlPVwiU3dpdGNoV29ya3NwYWNlXCIsZS5EZWxldGVXb3Jrc3BhY2U9XCJEZWxldGVXb3Jrc3BhY2VcIixlLkRvd25sb2Fkcz1cIkRvd25sb2Fkc1wiLGUuT3BlblN0b3JlZnJvbnQ9XCJPcGVuU3RvcmVmcm9udFwiLGUuQXBwZWFyYW5jZT1cIkFwcGVhcmFuY2VcIixlLlF1aXQ9XCJRdWl0XCIsZS5DdXN0b209XCJDdXN0b21cIn0ob3x8KG89e30pKSxmdW5jdGlvbihlKXtlLkxpZ2h0PVwibGlnaHRcIixlLkRhcms9XCJkYXJrXCIsZS5TeXN0ZW09XCJzeXN0ZW1cIn0oaXx8KGk9e30pKSxmdW5jdGlvbihlKXtlLkNsb3NlPVwiQ2xvc2VcIixlLkR1cGxpY2F0ZT1cIkR1cGxpY2F0ZVwiLGUuUmVuYW1lPVwiUmVuYW1lXCIsZS5TYXZlPVwiU2F2ZVwiLGUuU2F2ZUFzPVwiU2F2ZSBBc1wiLGUuTmV3UGFnZT1cIk5ldyBQYWdlXCIsZS5EZWxldGVQYWdlPVwiRGVsZXRlIFBhZ2VcIixlLlNhdmVXb3Jrc3BhY2VBcz1cIlNhdmVXb3Jrc3BhY2VBc1wiLGUuUmVmcmVzaD1cIlJlZnJlc2hcIixlLkNsb3NlT3RoZXJzPVwiQ2xvc2Ugb3RoZXJzXCIsZS5EZWxldGU9XCJEZWxldGVcIixlLkN1c3RvbT1cIkN1c3RvbVwifShhfHwoYT17fSkpLGZ1bmN0aW9uKGUpe2UuTG9jaz1cIkxvY2tcIixlLlNob3dIaWRlVGFicz1cIlNob3dIaWRlVGFic1wiLGUuQWRkVG9DaGFuZWw9XCJBZGRUb0NoYW5uZWxcIixlLlByaW50PVwiUHJpbnRcIixlLlBpbj1cIlBpblwifShsfHwobD17fSkpLGZ1bmN0aW9uKGUpe2UuRWRpdE5hbWU9XCJFZGl0IE5hbWVcIixlLk1vdmU9XCJNb3ZlXCIsZS5EZWxldGU9XCJEZWxldGVcIn0oc3x8KHM9e30pKSxmdW5jdGlvbihlKXtlLk5ld1ZpZXc9XCJOZXdWaWV3XCIsZS5EdXBsaWNhdGVWaWV3cz1cIkR1cGxpY2F0ZVZpZXdcIixlLk9wZW5XaXRoRGVmYXVsdEJyb3dzZXI9XCJPcGVuV2l0aERlZmF1bHRCcm93c2VyXCIsZS5SZWxvYWRWaWV3cz1cIlJlbG9hZFRhYlwiLGUuQ2xvc2VWaWV3cz1cIkNsb3NlVGFiXCIsZS5BZGRUb0NoYW5uZWw9XCJBZGRUb0NoYW5uZWxcIixlLlJlbW92ZUZyb21DaGFubmVsPVwiUmVtb3ZlRnJvbUNoYW5uZWxcIixlLkJhY2s9XCJCYWNrXCIsZS5Gb3J3YXJkPVwiRm9yd2FyZFwiLGUuUHJpbnQ9XCJQcmludFwiLGUuUHJpbnRBbGw9XCJQcmludEFsbFwiLGUuUHJpbnRTY3JlZW49XCJQcmludFNjcmVlblwiLGUuQ3VzdG9tPVwiQ3VzdG9tXCJ9KGN8fChjPXt9KSksZnVuY3Rpb24oZSl7ZS5TaG93SGlkZVRhYnM9XCJTaG93SGlkZVRhYnNcIixlLkNvbG9yTGlua2luZz1cIkNvbG9yTGlua2luZ1wiLGUuUHJlc2V0TGF5b3V0cz1cIlByZXNldExheW91dHNcIixlLkxvY2tVbmxvY2tQYWdlPVwiTG9ja1VubG9ja1BhZ2VcIixlLlNhdmVNZW51PVwiU2F2ZU1lbnVcIixlLlNhdmVQYWdlPVwiU2F2ZVBhZ2VcIixlLk1pbmltaXNlPVwiTWluaW1pc2VcIixlLk1heGltaXNlPVwiTWF4aW1pc2VcIixlLkNsb3NlPVwiQ2xvc2VcIixlLkN1c3RvbT1cIkN1c3RvbVwifSh1fHwodT17fSkpLGZ1bmN0aW9uKGUpe2UuU2F2ZVBhZ2U9XCJTYXZlUGFnZVwiLGUuU2F2ZVdvcmtzcGFjZT1cIlNhdmVXb3Jrc3BhY2VcIixlLlNhdmVQYWdlQXM9XCJTYXZlUGFnZUFzXCIsZS5TYXZlV29ya3NwYWNlQXM9XCJTYXZlV29ya3NwYWNlQXNcIixlLkN1c3RvbT1cIkN1c3RvbVwifShmfHwoZj17fSkpLGZ1bmN0aW9uKGUpe2UuQnJvd3Nlcj1cImJyb3dzZXJcIixlLlBsYXRmb3JtPVwicGxhdGZvcm1cIn0oZHx8KGQ9e30pKSxmdW5jdGlvbihlKXtlLkN1c3RvbUJ1dHRvbj1cIkN1c3RvbUJ1dHRvblwiLGUuU3RvcmVDdXN0b21CdXR0b249XCJTdG9yZUN1c3RvbUJ1dHRvblwiLGUuQ3VzdG9tRHJvcGRvd25JdGVtPVwiQ3VzdG9tRHJvcGRvd25JdGVtXCIsZS5HbG9iYWxDb250ZXh0TWVudT1cIkdsb2JhbENvbnRleHRNZW51XCIsZS5WaWV3VGFiQ29udGV4dE1lbnU9XCJWaWV3VGFiQ29udGV4dE1lbnVcIixlLlBhZ2VUYWJDb250ZXh0TWVudT1cIlBhZ2VUYWJDb250ZXh0TWVudVwiLGUuU2F2ZUJ1dHRvbkNvbnRleHRNZW51PVwiU2F2ZUJ1dHRvbkNvbnRleHRNZW51XCIsZS5BUEk9XCJBUElcIn0ocHx8KHA9e30pKSxmdW5jdGlvbihlKXtlLlNBVkVfUEFHRT1cIlNBVkVfUEFHRVwiLGUuU0FWRV9XT1JLU1BBQ0U9XCJTQVZFX1dPUktTUEFDRVwiLGUuU0FWRV9QQUdFX0FTPVwiU0FWRV9QQUdFX0FTXCIsZS5TQVZFX1dPUktTUEFDRV9BUz1cIlNBVkVfV09SS1NQQUNFX0FTXCIsZS5SRU5BTUVfUEFHRT1cIlJFTkFNRV9QQUdFXCIsZS5SRU5BTUVfV09SS1NQQUNFPVwiUkVOQU1FX1dPUktTUEFDRVwifShofHwoaD17fSkpfSwyNjkzOihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7RTooKT0+aX0pO3ZhciByPW4oNTgwNiksbz1uKDcyNzgpO2NvbnN0IGk9KGUsdCk9PntvLloubWFya1N0YXJ0KGAke2V9LXJlZ2lzdHJhdGlvbmApLCgwLHIuVFopKCkub25jZShcInN0YXJ0ZWRcIiwoKCk9Pm8uWi5tYXJrQW5kTWVhc3VyZShcIndvcmtzcGFjZS1hcHAtc3RhcnRlZFwiLGAke2V9LXJlZ2lzdHJhdGlvbmApKSk7Y29uc3Qgbj1maW4uV2luZG93LndyYXBTeW5jKHQpO24ub25jZShcImluaXRpYWxpemVkXCIsKCgpPT5vLloubWFya0FuZE1lYXN1cmUoYCR7ZX0td2luZG93LWluaXRpYWxpemVkYCxgJHtlfS1yZWdpc3RyYXRpb25gKSkpLG4ub25jZShcInNob3duXCIsKCgpPT57by5aLm1hcmtBbmRNZWFzdXJlKGAke2V9LXNob3dgLGAke2V9LXJlZ2lzdHJhdGlvbmApfSkpfX0sMzI2MTooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5yKHQpLG4uZCh0LHtDTElBY3Rpb246KCk9Pl8uUHQsQ0xJRmlsdGVyT3B0aW9uVHlwZTooKT0+Xy5lbCxDTElUZW1wbGF0ZTooKT0+Xy55VyxkZXJlZ2lzdGVyOigpPT5FLGhpZGU6KCk9PmoscmVnaXN0ZXI6KCk9Pkwsc2hvdzooKT0+U30pO3ZhciByPW4oNjY3OCksbz1uKDcyNzgpLGk9big2NTMyKSxhPW4oMTIxKTtjb25zdCBsPXtyZW1vdGVQcm92aWRlckRhdGFTdHJlYW1JZDpcIjBcIixyZW1vdGVDbGllbnRTZWFyY2hTdHJlYW1JZDpcIjFcIixyZW1vdGVQcm92aWRlclJlZ2lzdHJhdGlvblN0cmVhbUlkOlwiMlwiLHJlbW90ZVByb3ZpZGVyRGVyZWdpc3RyYXRpb25TdHJlYW1JZDpcIjNcIixyZW1vdGVQcm92aWRlckluZm9TdHJlYW1JZDpcIjRcIixyZW1vdGVQcm92aWRlckRpc3BhdGNoU3RyZWFtSWQ6XCI1XCIscmVtb3RlU2VhcmNoQ2xvc2VTdHJlYW1JZDpcIjZcIn07dmFyIHM9big1MTUwKSxjPW4oNTQzOCksdT1uKDMyNjQpO3ZhciBmPW4oNzA0Nik7Y29uc3QgZD0oKT0+e307ZnVuY3Rpb24gcChlKXtjb25zdCB0PXt9O2xldCBuPVtdO2xldCByPVtdO2xldCBvPW51bGw7bGV0IGk9Zi53MS5Jbml0aWFsO3QuZ2V0U3RhdHVzPSgpPT5pLHQuZ2V0UmVzdWx0QnVmZmVyPSgpPT5uLHQuc2V0UmVzdWx0QnVmZmVyPWU9PntuPWUsbj8ubGVuZ3RoJiZ0Lm9uQ2hhbmdlKCl9LHQuZ2V0UmV2b2tlZEJ1ZmZlcj0oKT0+cix0LnNldFJldm9rZWRCdWZmZXI9ZT0+e3I9ZSxyPy5sZW5ndGgmJnQub25DaGFuZ2UoKX0sdC5zZXRVcGRhdGVkQ29udGV4dD1lPT57bz1lLG51bGwhPT1vJiZ0Lm9uQ2hhbmdlKCl9LHQuZ2V0VXBkYXRlZENvbnRleHQ9KCk9Pm8sdC5vbkNoYW5nZT1kO2NvbnN0IGE9e307cmV0dXJuIHQucmVzPWEsYS5jbG9zZT0oKT0+e2khPT1mLncxLkNsb3NlJiYoaT1mLncxLkNsb3NlLHQub25DaGFuZ2UoKSl9LGEub3Blbj0oKT0+e2khPT1mLncxLk9wZW4mJihpPWYudzEuT3Blbix0Lm9uQ2hhbmdlKCkpfSxhLnJlc3BvbmQ9bj0+e2NvbnN0IHI9ZnVuY3Rpb24oZT1bXSx0PVtdLG49XCJhc2NlbmRpbmdcIil7Y29uc3Qgcj1bXSxvPW5ldyBNYXA7dC5mb3JFYWNoKChlPT57aWYoZS5rZXkpcmV0dXJuIG8uc2V0KGUua2V5LGUpO3IucHVzaChlKX0pKTtsZXQgaT1lLm1hcCgoZT0+e2lmKGUua2V5KXtjb25zdCB0PW8uZ2V0KGUua2V5KTtpZih0KXJldHVybiBvLmRlbGV0ZShlLmtleSksdH1yZXR1cm4gZX0pKTtyZXR1cm4gaS5wdXNoKC4uLm8udmFsdWVzKCksLi4uciksaT1cImFzY2VuZGluZ1wiPT09bj9pLnNvcnQoKChlLHQpPT4oZT8uc2NvcmU/PzEvMCktKHQ/LnNjb3JlPz8xLzApKSk6aS5zb3J0KCgoZSx0KT0+KHQ/LnNjb3JlPz8xLzApLShlPy5zY29yZT8/MS8wKSkpLGl9KHQuZ2V0UmVzdWx0QnVmZmVyKCksbixlKTt0LnNldFJlc3VsdEJ1ZmZlcihyKX0sYS5yZXZva2U9KC4uLmUpPT57Y29uc3Qgbj1uZXcgU2V0KGUpLHI9dC5nZXRSZXN1bHRCdWZmZXIoKS5maWx0ZXIoKCh7a2V5OmV9KT0+e2NvbnN0IHQ9bi5oYXMoZSk7cmV0dXJuIHQmJm4uZGVsZXRlKGUpLCF0fSkpO3Quc2V0UmVzdWx0QnVmZmVyKHIpLG4uc2l6ZSYmKHQuZ2V0UmV2b2tlZEJ1ZmZlcigpLmZvckVhY2goKGU9Pm4uYWRkKGUpKSksdC5zZXRSZXZva2VkQnVmZmVyKFsuLi5uXSkpfSxhLnVwZGF0ZUNvbnRleHQ9ZT0+e3Quc2V0VXBkYXRlZENvbnRleHQoZSl9LHR9Y29uc3QgaD1uZXcgTWFwLGc9MTAwO2FzeW5jIGZ1bmN0aW9uIHYoZSl7Y29uc3R7aWQ6dCxwcm92aWRlcklkOm59PWUscj13LmdldFByb3ZpZGVyT3JGYWlsKG4pO2xldCBvPWguZ2V0KHQpO298fChvPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1uZXcgU2V0O2xldCByPSExO3JldHVybntjbG9zZTooKT0+e3I9ITA7Zm9yKGNvbnN0IGUgb2YgbillKCl9LHJlcTp7aWQ6ZSwuLi50LGNvbnRleHQ6dD8uY29udGV4dHx8e30sb25DbG9zZTplPT57bi5hZGQoZSksciYmZSgpfSxyZW1vdmVMaXN0ZW5lcjplPT57bi5kZWxldGUoZSl9fX19KHQsZSksaC5zZXQodCxvKSk7Y29uc3QgaT1wKCksYT0oKT0+e2NvbnN0IGU9aS5nZXRSZXN1bHRCdWZmZXIoKTtpLnNldFJlc3VsdEJ1ZmZlcihbXSk7Y29uc3Qgcj1pLmdldFJldm9rZWRCdWZmZXIoKTtpLnNldFJldm9rZWRCdWZmZXIoW10pO2NvbnN0IG89aS5nZXRVcGRhdGVkQ29udGV4dCgpO2kuc2V0VXBkYXRlZENvbnRleHQobnVsbCk7Y29uc3QgYT1pLmdldFN0YXR1cygpOyFhc3luYyBmdW5jdGlvbihlKXsoYXdhaXQoMCxzLlZEKSgpKS5kaXNwYXRjaChsLnJlbW90ZVByb3ZpZGVyRGF0YVN0cmVhbUlkLGUpfSh7aWQ6dCxwcm92aWRlcklkOm4scmVzdWx0czplLHJldm9rZWQ6cixzdGF0dXM6YSxjb250ZXh0Om99KX07bGV0IGM9ITAsdT0hMTtpLm9uQ2hhbmdlPSgpPT57aWYoYylyZXR1cm4gYz0hMSx2b2lkIGEoKTt1fHwodT0hMCxzZXRUaW1lb3V0KCgoKT0+e3U9ITEsYSgpfSksZykpfTt0cnl7Y29uc3R7cmVzdWx0czplLGNvbnRleHQ6YX09YXdhaXQgci5vblVzZXJJbnB1dChvLnJlcSxpLnJlcyksbD1pLmdldFN0YXR1cygpO3JldHVybntpZDp0LHByb3ZpZGVySWQ6bixzdGF0dXM6bCxyZXN1bHRzOmUsY29udGV4dDphfX1jYXRjaChlKXtyZXR1cm4gY29uc29sZS5lcnJvcihgT3BlbkZpbi9Xb3Jrc3BhY2UvSG9tZS4gVW5jYXVnaHQgZXhjZXB0aW9uIGluIHNlYXJjaCBwcm92aWRlciAke259IGZvciBzZWFyY2ggJHt0fWAsXCJUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNlYXJjaCBwcm92aWRlci5cIixlKSx7aWQ6dCxwcm92aWRlcklkOm4sZXJyb3I6ZT8ubWVzc2FnZX19fWFzeW5jIGZ1bmN0aW9uIG0oKXtmb3IoY29uc3R7cmVxOmUsY2xvc2U6dH1vZiBoLnZhbHVlcygpKXQoKSxoLmRlbGV0ZShlLmlkKX1hc3luYyBmdW5jdGlvbiBDKGUsdCl7Y29uc3Qgbj13LmdldFByb3ZpZGVyT3JGYWlsKGUucHJvdmlkZXJJZCk7cmV0dXJuIGUucmVzdWx0LmRpc3BhdGNoZXJJZGVudGl0eT10LG4ub25SZXN1bHREaXNwYXRjaD8uKGUucmVzdWx0KX1mdW5jdGlvbiB5KGUpe2NvbnN0IHQ9aC5nZXQoZS5pZCk7dD8uY2xvc2UoKSxoLmRlbGV0ZShlLmlkKX1jb25zdCB3PW5ldyB1LmxUKFwiaG9tZVwiKSxiPWFzeW5jIGU9Pnthd2FpdCgwLHMuYUIpKCk7IShcInNraXBQbGF0Zm9ybUluaXRDaGVja1wiaW4gZSYmITA9PT1lLnNraXBQbGF0Zm9ybUluaXRDaGVjaykmJmF3YWl0KDAsYy5IaCkoZmluLm1lLmlkZW50aXR5KTt3LmFzc2VydE5vdEFscmVhZHlSZWdpc3RlcmVkKGUuaWQpLHcuc2V0UHJvdmlkZXIoZSk7Y29uc3QgdD1hd2FpdCgwLHMuVkQpKCk7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuaG9tZUNoYW5uZWxBY3Rpb25zUmVnaXN0ZXJlZHx8KGUuaG9tZUNoYW5uZWxBY3Rpb25zUmVnaXN0ZXJlZD0hMCxlLnJlZ2lzdGVyKGwucmVtb3RlUHJvdmlkZXJEYXRhU3RyZWFtSWQsdiksZS5yZWdpc3RlcihsLnJlbW90ZVNlYXJjaENsb3NlU3RyZWFtSWQseSksZS5yZWdpc3RlcihsLnJlbW90ZVByb3ZpZGVyRGlzcGF0Y2hTdHJlYW1JZCxDKSxlLmFkZERpc2Nvbm5lY3Rpb25MaXN0ZW5lcihtKSl9KHQpLHQuZGlzcGF0Y2gobC5yZW1vdGVQcm92aWRlclJlZ2lzdHJhdGlvblN0cmVhbUlkLHtpZDplLmlkLHRpdGxlOmUudGl0bGUsaWNvbjplLmljb24sY2xpZW50QVBJVmVyc2lvbjpyLnUwLGlkZW50aXR5OmZpbi5tZS5pZGVudGl0eSxzY29yZU9yZGVyOmUuc2NvcmVPcmRlcixjb21tYW5kQ29kZTplLmNvbW1hbmRDb2RlLGRlc2NyaXB0aW9uOmUuZGVzY3JpcHRpb24saGlkZGVuOmUuaGlkZGVuLGxpc3RUaXRsZTplLmxpc3RUaXRsZSxpbnB1dFBsYWNlaG9sZGVyOmUuaW5wdXRQbGFjZWhvbGRlcixsb2dvVXJsOmUubG9nb1VybCxkaXNwYXRjaEZvY3VzRXZlbnRzOmUuZGlzcGF0Y2hGb2N1c0V2ZW50c30pfTt2YXIgeD1uKDI2OTMpLF89bigzNzU4KTtsZXQgTztjb25zdCBMPWFzeW5jIGU9PntpZighZS5pY29uKXRocm93IG5ldyBFcnJvcihgJHtlLmlkfSBwcm92aWRlciBuZWVkcyB0byBoYXZlIGljb24gcHJvcGVydHkgZGVmaW5lZC5gKTsoMCx4LkUpKFwiaG9tZVwiLGEuT0kpO2NvbnN0IHQ9YXdhaXQgYihlKTtyZXR1cm4gTz1uZXcgUHJvbWlzZSgoKG4sYSk9Pnt0cnl7KDAsaS5jaykoe2FsbG93ZWQ6ITAsY29tcG9uZW50VmVyc2lvbjp0Py53b3Jrc3BhY2VWZXJzaW9ufSksci51MCxuKHsuLi50LGNsaWVudEFQSVZlcnNpb246ci51MCxzZXRTZWFyY2hRdWVyeTphc3luYyB0PT4oYXdhaXQoMCxzLnhaKSgpKS5kaXNwYXRjaChcInNldC1zZWFyY2gtcXVlcnlcIix7cXVlcnk6dCxwcm92aWRlcklEOmUuaWR9KX0pfWNhdGNoKGUpeygwLGkuY2spKHthbGxvd2VkOiExLHJlamVjdGlvbkNvZGU6ZSBpbnN0YW5jZW9mIEVycm9yP2UubWVzc2FnZTpcInVua25vd25cIn0pLGEoZSl9ZmluYWxseXtvLloubWFya0VuZEFuZE1lYXN1cmUoXCJob21lLXJlZ2lzdHJhdGlvblwiKX19KSksT30sRT1hc3luYyBlPT57dy5kZWxldGVQcm92aWRlcihlKTtjb25zdCB0PWF3YWl0KDAscy5WRCkoKTthd2FpdCB0LmRpc3BhdGNoKGwucmVtb3RlUHJvdmlkZXJEZXJlZ2lzdHJhdGlvblN0cmVhbUlkLGUpfTthc3luYyBmdW5jdGlvbiBTKCl7by5aLm1hcmtTdGFydChcImhvbWUtc2hvd1wiKSxhd2FpdCBPO2NvbnN0IGU9YXdhaXQoMCxzLnhaKSgpO2F3YWl0IGUuZGlzcGF0Y2goXCJzaG93LWhvbWVcIix2b2lkIDApfWFzeW5jIGZ1bmN0aW9uIGooKXthd2FpdCBPO2NvbnN0IGU9YXdhaXQoMCxzLnhaKSgpO2F3YWl0IGUuZGlzcGF0Y2goXCJoaWRlLWhvbWVcIix2b2lkIDApfX0sMzI2NDooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse2xUOigpPT5kfSk7dmFyIHI9L1xcYig/OmFuP2Q/fGFbc3RdfGJlY2F1c2V8YnV0fGJ5fGVufGZvcnxpW2ZuXXxuZWl0aGVyfG5vcnxvW2Zucl18b25seXxvdmVyfHBlcnxzb3xzb21lfHRoYVt0bl18dGhlfHRvfHVwfHVwb258dnM/XFwuP3x2ZXJzdXN8dmlhfHdoZW58d2l0aHx3aXRob3V0fHlldClcXGIvaSxvPS9bXlxcczrigJPigJQtXSt8Li9nLGk9L1xccy8sYT0vLig/PVtBLVpdfFxcLi4pLyxsPS9bQS1aYS16MC05XFx1MDBDMC1cXHUwMEZGXS87ZnVuY3Rpb24gcyhlKXtmb3IodmFyIHQsbj1cIlwiO251bGwhPT0odD1vLmV4ZWMoZSkpOyl7dmFyIHM9dFswXSxjPXQuaW5kZXg7YS50ZXN0KHMpfHxyLnRlc3QocykmJjAhPT1jJiZjK3MubGVuZ3RoIT09ZS5sZW5ndGh8fFwiOlwiPT09ZS5jaGFyQXQoYytzLmxlbmd0aCkmJiFpLnRlc3QoZS5jaGFyQXQoYytzLmxlbmd0aCsxKSk/bis9czpuKz1zLnJlcGxhY2UobCwoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9VcHBlckNhc2UoKX0pKX1yZXR1cm4gbn1jbGFzcyBjIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0KXtjb25zdCBuPXMoZSk7c3VwZXIoYCR7bn0gUHJvdmlkZXIuICR7bn0gUHJvdmlkZXIke3Q/YCB3aXRoIGlkICR7dH1gOlwiXCJ9IGlzIG5vdCBjdXJyZW50bHkgcmVnaXN0ZXJlZC5gKX19Y2xhc3MgdSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCl7Y29uc3Qgbj1zKGUpO3N1cGVyKGAke259IFByb3ZpZGVyLiAke259IFByb3ZpZGVyJHt0P2Agd2l0aCBpZCAke3R9YDpcIlwifSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuIENhbGwgXFxgZGVyZWdpc3RlclxcYCBiZWZvcmUgcmVnaXN0ZXJpbmcgYWdhaW4uYCl9fWNsYXNzIGYgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlLHQpe2NvbnN0IG49cyhlKTtzdXBlcihgRmFpbGVkIHRvIGdldCAke259IFByb3ZpZGVyLiAke259IFByb3ZpZGVyIHdpdGggaWQgJHt0fSBpcyBub3QgY3VycmVudGx5IHJlZ2lzdGVyZWQuYCl9fWNsYXNzIGR7Y29uc3RydWN0b3IoZSl7dGhpcy5wcm92aWRlcnNNYXA9bmV3IE1hcCx0aGlzLnByb3ZpZGVyVHlwZT1lfWFzc2VydE5vdEFscmVhZHlSZWdpc3RlcmVkKGUpe2lmKHRoaXMuaGFzUHJvdmlkZXIoZSkpdGhyb3cgbmV3IHUodGhpcy5wcm92aWRlclR5cGUsZSl9YXNzZXJ0UmVnaXN0ZXJlZChlKXtpZighdGhpcy5oYXNQcm92aWRlcihlKSl0aHJvdyBuZXcgYyh0aGlzLnByb3ZpZGVyVHlwZSxlKX1nZXRQcm92aWRlcihlKXtyZXR1cm4gdGhpcy5wcm92aWRlcnNNYXAuZ2V0KGUpfWhhc1Byb3ZpZGVyKGUpe3JldHVybiB0aGlzLnByb3ZpZGVyc01hcC5oYXMoZSl9c2V0UHJvdmlkZXIoZSl7dGhpcy5wcm92aWRlcnNNYXAuc2V0KGUuaWQsZSl9ZGVsZXRlUHJvdmlkZXIoZSl7dGhpcy5wcm92aWRlcnNNYXAuZGVsZXRlKGUpfWdldFByb3ZpZGVyT3JGYWlsKGUpe2NvbnN0IHQ9dGhpcy5nZXRQcm92aWRlcihlKTtpZighdCl0aHJvdyBuZXcgZih0aGlzLnByb3ZpZGVyVHlwZSxlKTtyZXR1cm4gdH1jbGVhclByb3ZpZGVycygpe3RoaXMucHJvdmlkZXJzTWFwLmNsZWFyKCl9fX0sMTIyMjooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIHIsbyxpO24uZCh0LHtwOigpPT5vLHc6KCk9Pml9KSxmdW5jdGlvbihlKXtlLkZldGNoaW5nPVwiZmV0Y2hpbmdcIixlLkZldGNoZWQ9XCJmZXRjaGVkXCIsZS5Db21wbGV0ZT1cImNvbXBsZXRlXCJ9KHJ8fChyPXt9KSksZnVuY3Rpb24oZSl7ZS5Vc2VyQWN0aW9uPVwidXNlci1hY3Rpb25cIixlLkZvY3VzQ2hhbmdlPVwiZm9jdXMtY2hhbmdlXCIsZS5SZWxvYWQ9XCJyZWxvYWRcIn0ob3x8KG89e30pKSxmdW5jdGlvbihlKXtlLkFjdGl2ZT1cImFjdGl2ZVwiLGUuRGVmYXVsdD1cImRlZmF1bHRcIn0oaXx8KGk9e30pKX0sNzQyNzooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIHI7bi5kKHQse3Y6KCk9PnJ9KSxmdW5jdGlvbihlKXtlLkFjdGlvbkJ1dHRvbj1cIkFjdGlvbkJ1dHRvblwiLGUuRHJvcGRvd25CdXR0b249XCJEcm9wZG93bkJ1dHRvblwifShyfHwocj17fSkpfSwzNzU4OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjt2YXIgcixvLGk7bi5kKHQse1B0OigpPT5yLGVsOigpPT5pLHlXOigpPT5vfSksZnVuY3Rpb24oZSl7ZS5TdWdnZXN0aW9uPVwic3VnZ2VzdGlvblwifShyfHwocj17fSkpLGZ1bmN0aW9uKGUpe2UuQ29udGFjdD1cIkNvbnRhY3RcIixlLkN1c3RvbT1cIkN1c3RvbVwiLGUuTGlzdD1cIkxpc3RcIixlLlBsYWluPVwiUGxhaW5cIixlLlNpbXBsZVRleHQ9XCJTaW1wbGVUZXh0XCIsZS5Mb2FkaW5nPVwiTG9hZGluZ1wiLGUuRXJyb3I9XCJFcnJvclwifShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe2UuTXVsdGlTZWxlY3Q9XCJNdWx0aVNlbGVjdFwifShpfHwoaT17fSkpfSw3NTY0OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuKDEyMjIpLG4oMzc1OCksbig2MTE0KSxuKDIxMDkpLG4oNzQyNyl9LDYxMTQ6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByLG87bi5kKHQse0w6KCk9PnIsVDooKT0+b30pLGZ1bmN0aW9uKGUpe2UuU25hcHNob3Q9XCJzbmFwc2hvdFwiLGUuTWFuaWZlc3Q9XCJtYW5pZmVzdFwiLGUuVmlldz1cInZpZXdcIixlLkV4dGVybmFsPVwiZXh0ZXJuYWxcIn0ocnx8KHI9e30pKSxmdW5jdGlvbihlKXtlLkxhbmRpbmdQYWdlPVwibGFuZGluZ1BhZ2VcIixlLkFwcEdyaWQ9XCJhcHBHcmlkXCJ9KG98fChvPXt9KSl9LDIxMDk6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtHbzooKT0+byxaSjooKT0+YSxiSTooKT0+aSxwNjooKT0+cn0pO2NvbnN0IHI9e0NvbnRhaW5lcjpcIkNvbnRhaW5lclwiLEJ1dHRvbjpcIkJ1dHRvblwiLFNwbGl0QnV0dG9uOlwiU3BsaXRCdXR0b25cIn0sbz17VGV4dDpcIlRleHRcIixJbWFnZTpcIkltYWdlXCIsTGlzdDpcIkxpc3RcIn0saT17Li4uciwuLi5vfTt2YXIgYTshZnVuY3Rpb24oZSl7ZS5QcmltYXJ5PVwicHJpbWFyeVwiLGUuU2Vjb25kYXJ5PVwic2Vjb25kYXJ5XCIsZS5UZXh0T25seT1cInRleHRPbmx5XCJ9KGF8fChhPXt9KSl9LDI1Mjg6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24ucih0KSxuLmQodCx7QXBwTWFuaWZlc3RUeXBlOigpPT5pLkwsU3RvcmVmcm9udFRlbXBsYXRlOigpPT5pLlQsZGVyZWdpc3RlcjooKT0+QyxoaWRlOigpPT55LHJlZ2lzdGVyOigpPT5tLHNob3c6KCk9Pnd9KTt2YXIgcj1uKDY1MzIpLG89big1MTUwKSxpPW4oNjExNCksYT1uKDY2NzgpLGw9big3Mjc4KSxzPW4oMTIxKSxjPW4oNTQzOCksdT1uKDMyNjQpO2xldCBmPSExO2FzeW5jIGZ1bmN0aW9uIGQoZSx0LG4pe2NvbnN0IHI9YXdhaXQoMCxvLkRtKSgpO3RyeXtyZXR1cm4gYXdhaXQgci5kaXNwYXRjaChlLmFjdGlvbixlLnBheWxvYWQpfWNhdGNoKG8pe2lmKG8gaW5zdGFuY2VvZiBFcnJvciYmLTEhPT1vLnRvU3RyaW5nKCkuaW5kZXhPZihlLmFjdGlvbikpcmV0dXJuIGZ8fGNvbnNvbGUud2FybihcIllvdSBhcmUgdXNpbmcgYSBuZXdlciB2ZXJzaW9uIG9mIHRoZSBXb3Jrc3BhY2UgY2xpZW50IGxpYnJhcnkgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50bHkgcnVubmluZyB3b3Jrc3BhY2UgcHJvdmlkZXIuIFBsZWFzZSB1cGdyYWRlIHRoZSBXb3Jrc3BhY2UgdG8gdmVyc2lvbiA5LjAgb3IgbGF0ZXIuXCIpLGY9ITAsYXdhaXQgci5kaXNwYXRjaCh0LmFjdGlvbix0LnBheWxvYWQpLG47dGhyb3cgb319Y29uc3QgcD1uZXcgdS5sVChcInN0b3JlZnJvbnRcIiksaD1hc3luYyBlPT57YXdhaXQoMCxjLkhoKShmaW4ubWUuaWRlbnRpdHkpO2NvbnN0IHQ9YXdhaXQoMCxvLnhaKSgpO3JldHVybiBwLmFzc2VydE5vdEFscmVhZHlSZWdpc3RlcmVkKGUuaWQpLHAuc2V0UHJvdmlkZXIoZSksKGU9PntlLnN0b3JlZnJvbnRDaGFubmVsQWN0aW9uc1JlZ2lzdGVyZWR8fChlLnN0b3JlZnJvbnRDaGFubmVsQWN0aW9uc1JlZ2lzdGVyZWQ9ITAsZS5yZWdpc3RlcihcImdldC1zdG9yZWZyb250LXByb3ZpZGVyLWFwcHNcIiwoZT0+cC5nZXRQcm92aWRlck9yRmFpbChlKS5nZXRBcHBzKCkpKSxlLnJlZ2lzdGVyKFwiZ2V0LXN0b3JlZnJvbnQtcHJvdmlkZXItZm9vdGVyXCIsKGU9PnAuZ2V0UHJvdmlkZXJPckZhaWwoZSkuZ2V0Rm9vdGVyKCkpKSxlLnJlZ2lzdGVyKFwiZ2V0LXN0b3JlZnJvbnQtcHJvdmlkZXItbGFuZGluZy1wYWdlXCIsKGU9PnAuZ2V0UHJvdmlkZXJPckZhaWwoZSkuZ2V0TGFuZGluZ1BhZ2UoKSkpLGUucmVnaXN0ZXIoXCJnZXQtc3RvcmVmcm9udC1wcm92aWRlci1uYXZpZ2F0aW9uXCIsKGU9PnAuZ2V0UHJvdmlkZXJPckZhaWwoZSkuZ2V0TmF2aWdhdGlvbigpKSksZS5yZWdpc3RlcihcImxhdW5jaC1zdG9yZWZyb250LXByb3ZpZGVyLWFwcFwiLCgoe2lkOmUsYXBwOnR9KT0+cC5nZXRQcm92aWRlck9yRmFpbChlKS5sYXVuY2hBcHAodCkpKSl9KSh0KSxlLmNsaWVudEFQSVZlcnNpb249YS51MCxkKHthY3Rpb246XCJyZWdpc3Rlci1wcm92aWRlclwiLHBheWxvYWQ6e3Byb3ZpZGVyVHlwZTpcInN0b3JlZnJvbnRcIixpbmZvOmV9fSx7YWN0aW9uOlwicmVnaXN0ZXItc3RvcmVmcm9udC1wcm92aWRlclwiLHBheWxvYWQ6ZX0se3dvcmtzcGFjZVZlcnNpb246XCJ1bmtub3duXCJ9KX07dmFyIGc9bigyNjkzKTtsZXQgdjtjb25zdCBtPWFzeW5jIGU9PnsoMCxnLkUpKFwic3RvcmVcIixzLm5kKTtjb25zdCB0PWF3YWl0IGgoZSk7cmV0dXJuIHY9bmV3IFByb21pc2UoKChuLGkpPT57dHJ5eygwLHIuZDkpKHthbGxvd2VkOiEwLGNvbXBvbmVudFZlcnNpb246dD8ud29ya3NwYWNlVmVyc2lvbn0pLGEudTAsbih7Y2xpZW50QVBJVmVyc2lvbjphLnUwLHdvcmtzcGFjZVZlcnNpb246dD8ud29ya3NwYWNlVmVyc2lvbj8/XCJcIix1cGRhdGVBcHBDYXJkQnV0dG9uczphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCgwLG8uWGwpKCk7YXdhaXQgbi5kaXNwYXRjaChcInVwZGF0ZS1hcHAtY2FyZC1idXR0b24tY29uZmlnXCIsey4uLnQsaWQ6ZS5pZCx0aXRsZTplLnRpdGxlLGljb246ZS5pY29uLHBsYXRmb3JtSWRlbnRpdHk6ZmluLm1lLmlkZW50aXR5fSl9fSl9Y2F0Y2goZSl7KDAsci5kOSkoe2FsbG93ZWQ6ITEscmVqZWN0aW9uQ29kZTplIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOlwidW5rbm93blwifSksaShlKX1maW5hbGx5e2wuWi5tYXJrRW5kQW5kTWVhc3VyZShcInN0b3JlLXJlZ2lzdHJhdGlvblwiKX19KSksdn0sQz1hc3luYyBlPT4oYXdhaXQgdixwLmFzc2VydFJlZ2lzdGVyZWQoZSkscC5kZWxldGVQcm92aWRlcihlKSxhd2FpdCgwLG8uYUIpKCksZCh7YWN0aW9uOlwiZGVyZWdpc3Rlci1wcm92aWRlclwiLHBheWxvYWQ6e3Byb3ZpZGVyVHlwZTpcInN0b3JlZnJvbnRcIixpZDplfX0se2FjdGlvbjpcImRlcmVnaXN0ZXItc3RvcmVmcm9udC1wcm92aWRlclwiLHBheWxvYWQ6ZX0pKSx5PWFzeW5jKCk9Pihhd2FpdCB2LGF3YWl0KDAsby5hQikoKSxkKHthY3Rpb246XCJoaWRlLXByb3ZpZGVyLXdpbmRvd1wiLHBheWxvYWQ6e3Byb3ZpZGVyVHlwZTpcInN0b3JlZnJvbnRcIn19LHthY3Rpb246XCJoaWRlLXN0b3JlZnJvbnRcIn0pKSx3PWFzeW5jKCk9PihsLloubWFya1N0YXJ0KFwic3RvcmUtc2hvd1wiKSxhd2FpdCB2LGF3YWl0KDAsby5hQikoKSxkKHthY3Rpb246XCJzaG93LXByb3ZpZGVyLXdpbmRvd1wiLHBheWxvYWQ6e3Byb3ZpZGVyVHlwZTpcInN0b3JlZnJvbnRcIn19LHthY3Rpb246XCJzaG93LXN0b3JlZnJvbnRcIn0pKX0sMzQyMDooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1ZSOigpPT5jLGhkOigpPT5sfSk7dmFyIHI9big4MzExKSxvPW4oNTkxMiksaT1uKDk2MTApLGE9big1MTUwKTthc3luYyBmdW5jdGlvbiBsKCl7cmV0dXJuKGF3YWl0KDAsYS5EbSkoKSkuZGlzcGF0Y2goXCJnZXQtbGVnYWN5LXBhZ2VzXCIsdm9pZCAwKX1jb25zdCBzPWFzeW5jIGU9Pih7Li4uZSxsYXlvdXREZXRhaWxzOnttYWNoaW5lSWQ6YXdhaXQoMCxvLiR3KSgpLG1hY2hpbmVOYW1lOigwLG8uWDUpKCl9fSksYz1hc3luYyBlPT57Y29uc3QgdD1hd2FpdChhc3luYyhlLHQpPT4oe3BhZ2VJZDooMCxpLkgpKCksdGl0bGU6ZSxsYXlvdXQ6YXdhaXQgcyh0KSxpc1JlYWRPbmx5OiExfSkpKGUudGl0bGUsKDAsci5kRykoZS5sYXlvdXQpKTtyZXR1cm4gZS5wYW5lbHMmJih0LnBhbmVscz1lLnBhbmVscy5tYXAoKGU9Pih7Li4uZSx2aWV3T3B0aW9uczooMCxyLlpTKShlLnZpZXdPcHRpb25zKX0pKSkpLHsuLi5lLC4uLnR9fX0sNjQ5NTooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIHI7IWZ1bmN0aW9uKGUpe2UuTGVmdD1cIkxlZnRcIixlLlJpZ2h0PVwiUmlnaHRcIixlLlRvcD1cIlRvcFwiLGUuQm90dG9tPVwiQm90dG9tXCJ9KHJ8fChyPXt9KSl9LDExMjc6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtEbTooKT0+YSxiJDooKT0+dSx5ejooKT0+Zn0pO3ZhciByPW4oOTExNyk7bigxMjEpO2NvbnN0IG89KGUsdCk9PnQ/YCR7dH0tJHtlLnV1aWR9LSR7ZS5uYW1lfWA6YF9fYnJvd3Nlcl93aW5kb3dfXy0ke2UudXVpZH0tJHtlLm5hbWV9YCxpPW5ldyBNYXAsYT0oZSx0KT0+e2NvbnN0IG49byhlLHQpO3JldHVybiBpLmhhcyhuKXx8aS5zZXQobiwoMCxyLlopKG4pKSxpLmdldChuKSgpfTt2YXIgbCxzLGMsdTshZnVuY3Rpb24oZSl7ZS5DbG9zZUJyb3dzZXJXaW5kb3c9XCJjbG9zZS1icm93c2VyLXdpbmRvd1wiLGUuUXVpdFBsYXRmb3JtPVwicXVpdC1wbGF0Zm9ybVwiLGUuQ2xvc2VQYWdlPVwiY2xvc2UtcGFnZVwiLGUuQWRkVG9DaGFubmVsPVwiYWRkLXRvLWNoYW5uZWxcIixlLlJlbW92ZUZyb21DaGFubmVsPVwicmVtb3ZlLWZyb20tY2hhbm5lbFwiLGUuT3BlblNhdmVNb2RhbEludGVybmFsPVwib3Blbi1zYXZlLW1vZGFsLWludGVybmFsXCIsZS5EdXBsaWNhdGVQYWdlPVwiZHVwbGljYXRlLXBhZ2VcIixlLlNldFNlbGVjdGVkU2NoZW1lPVwic2V0LXNlbGVjdGVkLXNjaGVtZVwiLGUuU2hvd0Jyb3dzZXJJbmRpY2F0b3I9XCJzaG93LWJyb3dzZXItaW5kaWNhdG9yXCIsZS5TZXRTZWxlY3RlZExhbmd1YWdlPVwic2V0LXNlbGVjdGVkLWxhbmd1YWdlXCIsZS5SZWZyZXNoQm9va21hcmtzSW50ZXJuYWw9XCJyZWZyZXNoLWJvb2ttYXJrc1wifShsfHwobD17fSkpLGZ1bmN0aW9uKGUpe2UuR2V0UGFnZXM9XCJnZXQtcGFnZXNcIixlLkdldEFjdGl2ZVBhZ2VGb3JXaW5kb3c9XCJnZXQtYWN0aXZlLXBhZ2UtZm9yLXdpbmRvd1wiLGUuQXR0YWNoUGFnZXNUb1dpbmRvdz1cImF0dGFjaC1wYWdlcy10by13aW5kb3dcIixlLkRldGFjaFBhZ2VzRnJvbVdpbmRvdz1cImRldGFjaC1wYWdlcy1mcm9tLXdpbmRvd1wiLGUuU2V0QWN0aXZlUGFnZUZvcldpbmRvdz1cInNldC1hY3RpdmUtcGFnZS1mb3Itd2luZG93XCIsZS5SZW5hbWVQYWdlPVwicmVuYW1lLXBhZ2VcIixlLlJlb3JkZXJQYWdlc0ZvcldpbmRvdz1cInJlb3JkZXItcGFnZXMtZm9yLXdpbmRvd1wiLGUuVXBkYXRlUGFnZUZvcldpbmRvdz1cInVwZGF0ZS1wYWdlLWZvci13aW5kb3dcIixlLlVwZGF0ZVBhZ2VzV2luZG93T3B0aW9ucz1cInVwZGF0ZS1wYWdlcy13aW5kb3ctb3B0aW9uc1wiLGUuSXNEZXRhY2hpbmdQYWdlcz1cImlzLWRldGFjaGluZy1wYWdlc1wiLGUuSXNBY3RpdmVQYWdlQ2hhbmdpbmc9XCJpcy1hY3RpdmUtcGFnZS1jaGFuZ2luZ1wifShzfHwocz17fSkpLGZ1bmN0aW9uKGUpe2UuR2V0QXBwcz1cImdldC1hcHBzXCIsZS5HZXRDdXJhdGVkQ29udGVudD1cImdldC1jdXJhdGVkLWNvbnRlbnRcIixlLkdldFJlY2VudGx5VmlzaXRlZD1cImdldC1yZWNlbnRseS12aXNpdGVkXCJ9KGN8fChjPXt9KSksZnVuY3Rpb24oZSl7ZS5DcmVhdGVCb29rbWFya05vZGU9XCJjcmVhdGUtYm9va21hcmstbm9kZVwiLGUuR2V0Qm9va21hcmtOb2RlPVwiZ2V0LWJvb2ttYXJrLW5vZGVcIixlLlNlYXJjaEJvb2ttYXJrTm9kZXM9XCJzZWFyY2gtYm9va21hcmstbm9kZXNcIixlLlVwZGF0ZUJvb2ttYXJrTm9kZT1cInVwZGF0ZS1ib29rbWFyay1ub2RlXCIsZS5EZWxldGVCb29rbWFya05vZGU9XCJkZWxldGUtYm9va21hcmstbm9kZVwifSh1fHwodT17fSkpO2NvbnN0IGY9ey4uLmwsLi4uc319LDU0Mzg6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByO24uZCh0LHtIaDooKT0+aSxmbjooKT0+cixqNzooKT0+YSx4cDooKT0+bH0pLGZ1bmN0aW9uKGUpe2UuTGF1bmNoQXBwPVwibGF1bmNoQXBwXCIsZS5TYXZlUGFnZT1cInNhdmVQYWdlXCIsZS5HZXRTYXZlZFBhZ2U9XCJnZXRTYXZlZFBhZ2VcIixlLkNyZWF0ZVNhdmVkUGFnZT1cImNyZWF0ZVNhdmVkUGFnZVwiLGUuVXBkYXRlU2F2ZWRQYWdlPVwidXBkYXRlU2F2ZWRQYWdlXCIsZS5EZWxldGVTYXZlZFBhZ2U9XCJkZWxldGVTYXZlZFBhZ2VcIixlLkdldFNhdmVkUGFnZXM9XCJnZXRTYXZlZFBhZ2VzXCIsZS5DcmVhdGVTYXZlZFBhZ2VJbnRlcm5hbD1cImNyZWF0ZVNhdmVkUGFnZUludGVybmFsXCIsZS5VcGRhdGVTYXZlZFBhZ2VJbnRlcm5hbD1cInVwZGF0ZVNhdmVkUGFnZUludGVybmFsXCIsZS5EZWxldGVTYXZlZFBhZ2VJbnRlcm5hbD1cImRlbGV0ZVNhdmVkUGFnZUludGVybmFsXCIsZS5VcGRhdGVQYWdlRm9yV2luZG93PVwidXBkYXRlUGFnZUZvcldpbmRvd1wiLGUuQXR0YWNoUGFnZXNUb1dpbmRvdz1cImF0dGFjaFBhZ2VzVG9XaW5kb3dcIixlLkRldGFjaFBhZ2VzRnJvbVdpbmRvdz1cImRldGFjaFBhZ2VzRnJvbVdpbmRvd1wiLGUuUmVvcmRlclBhZ2VzRm9yV2luZG93PVwicmVvcmRlclBhZ2VzRm9yV2luZG93XCIsZS5TZXRBY3RpdmVQYWdlPVwic2V0QWN0aXZlUGFnZVwiLGUuQWRkUGFnZT1cImFkZFBhZ2VcIixlLkFkZERlZmF1bHRQYWdlPVwiYWRkRGVmYXVsdFBhZ2VcIixlLkdldEFsbEF0dGFjaGVkUGFnZXM9XCJnZXRBbGxBdHRhY2hlZFBhZ2VzXCIsZS5HZXRBY3RpdmVQYWdlSWRGb3JXaW5kb3c9XCJnZXRBY3RpdmVQYWdlSWRGb3JXaW5kb3dcIixlLkdldFBhZ2VzRm9yV2luZG93PVwiZ2V0UGFnZXNGb3JXaW5kb3dcIixlLkdldFBhZ2VGb3JXaW5kb3c9XCJnZXRQYWdlRm9yV2luZG93XCIsZS5HZXRTYXZlZFBhZ2VNZXRhZGF0YT1cImdldFNhdmVkUGFnZU1ldGFkYXRhXCIsZS5HZXRVbmlxdWVQYWdlVGl0bGU9XCJnZXRVbmlxdWVQYWdlVGl0bGVcIixlLkdldExhc3RGb2N1c2VkQnJvd3NlcldpbmRvdz1cImdldExhc3RGb2N1c2VkQnJvd3NlcldpbmRvd1wiLGUuR2V0VGhlbWVzPVwiZ2V0VGhlbWVzXCIsZS5HZXRTZWxlY3RlZFNjaGVtZT1cImdldFNlbGVjdGVkU2NoZW1lXCIsZS5TZXRTZWxlY3RlZFNjaGVtZT1cInNldFNlbGVjdGVkU2NoZW1lXCIsZS5PcGVuR2xvYmFsQ29udGV4dE1lbnVJbnRlcm5hbD1cIm9wZW5HbG9iYWxDb250ZXh0TWVudUludGVybmFsXCIsZS5PcGVuVmlld1RhYkNvbnRleHRNZW51SW50ZXJuYWw9XCJvcGVuVmlld1RhYkNvbnRleHRNZW51SW50ZXJuYWxcIixlLk9wZW5QYWdlVGFiQ29udGV4dE1lbnVJbnRlcm5hbD1cIm9wZW5QYWdlVGFiQ29udGV4dE1lbnVJbnRlcm5hbFwiLGUuT3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsPVwib3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsXCIsZS5JbnZva2VDdXN0b21BY3Rpb25JbnRlcm5hbD1cImludm9rZUN1c3RvbUFjdGlvbkludGVybmFsXCIsZS5SZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nSW50ZXJuYWw9XCJyZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nSW50ZXJuYWxcIixlLkdldFNhdmVkV29ya3NwYWNlPVwiZ2V0U2F2ZWRXb3Jrc3BhY2VcIixlLkNyZWF0ZVNhdmVkV29ya3NwYWNlPVwiY3JlYXRlU2F2ZWRXb3Jrc3BhY2VcIixlLlVwZGF0ZVNhdmVkV29ya3NwYWNlPVwidXBkYXRlU2F2ZWRXb3Jrc3BhY2VcIixlLkRlbGV0ZVNhdmVkV29ya3NwYWNlPVwiZGVsZXRlU2F2ZWRXb3Jrc3BhY2VcIixlLkdldFNhdmVkV29ya3NwYWNlcz1cImdldFNhdmVkV29ya3NwYWNlc1wiLGUuU2F2ZVdvcmtzcGFjZT1cInNhdmVXb3Jrc3BhY2VcIixlLkdldEN1cnJlbnRXb3Jrc3BhY2U9XCJnZXRDdXJyZW50V29ya3NwYWNlXCIsZS5BcHBseVdvcmtzcGFjZT1cImFwcGx5V29ya3NwYWNlXCIsZS5TZXRBY3RpdmVXb3Jrc3BhY2U9XCJzZXRBY3RpdmVXb3Jrc3BhY2VcIixlLklzQnJvd3NlckluaXRpYWxpemVkPVwiaXNCcm93c2VySW5pdGlhbGl6ZWRcIixlLkFuYWx5dGljcz1cImFuYWx5dGljc0ludGVybmFsXCIsZS5HZXRMYW5ndWFnZT1cImdldExhbmd1YWdlXCIsZS5HZXRMYW5ndWFnZVJlc291cmNlc0ludGVybmFsPVwiZ2V0TGFuZ3VhZ2VSZXNvdXJjZXNJbnRlcm5hbFwiLGUuU2V0TGFuZ3VhZ2U9XCJzZXRMYW5ndWFnZVwiLGUuR2V0RG9ja1Byb3ZpZGVyQ29uZmlnPVwiZ2V0RG9ja1Byb3ZpZGVyQ29uZmlnXCIsZS5TYXZlRG9ja1Byb3ZpZGVyQ29uZmlnPVwic2F2ZURvY2tQcm92aWRlckNvbmZpZ1wiLGUuSGFuZGxlU2F2ZU1vZGFsT25QYWdlQ2xvc2U9XCJoYW5kbGVTYXZlTW9kYWxPblBhZ2VDbG9zZVwiLGUuU2hvdWxkUGFnZUNsb3NlPVwic2hvdWxkUGFnZUNsb3NlXCIsZS5TaG91bGRXaW5kb3dDbG9zZT1cInNob3VsZFdpbmRvd0Nsb3NlXCIsZS5Db3B5UGFnZT1cImNvcHlQYWdlXCIsZS5IYW5kbGVQYWdlQ2hhbmdlcz1cImhhbmRsZVBhZ2VDaGFuZ2VzXCIsZS5NYXJrVW5zYXZlZFBhZ2VzQXNTYXZlZEludGVybmFsPVwibWFya1Vuc2F2ZWRQYWdlc0FzU2F2ZWRJbnRlcm5hbFwiLGUuVHJhY2tSZW1vdmVkVGFiSW50ZXJuYWw9XCJ0cmFja1JlbW92ZWRUYWJJbnRlcm5hbFwiLGUuUmVzdG9yZVJlbW92ZWRUYWJJbnRlcm5hbD1cInJlc3RvcmVSZW1vdmVkVGFiSW50ZXJuYWxcIixlLlRyYWNrVmlzaXRlZFNpdGVJbnRlcm5hbD1cInRyYWNrVmlzaXRlZFNpdGVJbnRlcm5hbFwiLGUuR2V0UmVjZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbD1cImdldFJlY2VudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWxcIixlLkdldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbD1cImdldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbFwiLGUuU2VhcmNoU2l0ZXNJbnRlcm5hbD1cInNlYXJjaFNpdGVzSW50ZXJuYWxcIixlLkdldEN1cmF0ZWRDb250ZW50SW50ZXJuYWw9XCJnZXRDdXJhdGVkQ29udGVudEludGVybmFsXCIsZS5IYW5kbGVSZXF1ZXN0TmF2aWdhdGlvbkludGVybmFsPVwiaGFuZGxlUmVxdWVzdE5hdmlnYXRpb25JbnRlcm5hbFwiLGUuUmVmcmVzaEJvb2ttYXJrc0ludGVybmFsPVwicmVmcmVzaEJvb2ttYXJrc0ludGVybmFsXCIsZS5HZXROb3RpZmljYXRpb25zQ29uZmlnPVwiZ2V0Tm90aWZpY2F0aW9uc0NvbmZpZ1wifShyfHwocj17fSkpO2NvbnN0IG89YXN5bmMgZT0+ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmdldENsaWVudCgpLGk9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgbyhlKSxuPVwiVGFyZ2V0IGlzIG5vdCBhIFdvcmtzcGFjZSBQbGF0Zm9ybS4gVGFyZ2V0IG11c3QgY2FsbCBXb3Jrc3BhY2VQbGF0Zm9ybS5pbml0XCI7bGV0IHI7dHJ5e3I9YXdhaXQgdC5kaXNwYXRjaChcImlzV29ya3NwYWNlUGxhdGZvcm1cIil9Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKG4pfWlmKFwiYm9vbGVhblwiPT10eXBlb2YgciYmcilyZXR1cm4gY29uc29sZS53YXJuKFwiWW91IGFyZSB1c2luZyBhbiBvbGRlciB2ZXJzaW9uIG9mIHRoZSB3b3Jrc3BhY2UgcGxhdGZvcm0uIFBsZWFzZSB1cGRhdGUgeW91ciB3b3Jrc3BhY2UgcGxhdGZvcm0uXCIpLHI7aWYoXCJvYmplY3RcIj09dHlwZW9mIHImJnIuaXNXb3Jrc3BhY2VQbGF0Zm9ybSlyZXR1cm4gcjt0aHJvdyBuZXcgRXJyb3Iobil9LGE9YXN5bmMgZT0+KGF3YWl0IGkoZSksbyhlKSksbD1hc3luYyBlPT57Y29uc3QgdD1hd2FpdCBpKGUpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0JiYhMCE9PXQ/LmlzQnJvd3NlckluaXRpYWxpemVkKXRocm93IG5ldyBFcnJvcihcIlRhcmdldCBpcyBub3QgYSBCcm93c2VyLWVuYWJsZWQgV29ya3NwYWNlIFBsYXRmb3JtLlwiKTtyZXR1cm4gbyhlKX19LDUxNTA6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtEbTooKT0+cyxWRDooKT0+dSxYbDooKT0+cCxhQjooKT0+ZCx4WjooKT0+aH0pO3ZhciByPW4oOTExNyksbz1uKDY2NzgpLGk9bigxMjEpLGE9big3MDQ2KTtjb25zdCBsPSgwLHIuWikoXCJfX29mX3dvcmtzcGFjZV9wcm90b2NvbF9fXCIpLHM9bCxjPWwsdT0oMCxyLlopKGEuUXgpLGY9ZT0+e2NvbnN0IHQ9bmV3IFVSTChlKTtyZXR1cm4gdC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwiaXNMYXVuY2hlZFZpYUxpYlwiLFwidHJ1ZVwiKSx0LnRvU3RyaW5nKCl9LGQ9YXN5bmMoKT0+e2lmKCFhd2FpdCgwLGkuSlYpKGkuaVcpKXtpZihvLlpLfHwtMT09PW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIldpblwiKSlyZXR1cm4gdm9pZCBhd2FpdCBmaW4uQXBwbGljYXRpb24uc3RhcnRGcm9tTWFuaWZlc3QoZihvLmFXKSk7YXdhaXQgZmluLlN5c3RlbS5vcGVuVXJsV2l0aEJyb3dzZXIoZihvLkdYKSl9fSxwPWFzeW5jKCk9Pihhd2FpdCBkKCkscygpKSxoPWFzeW5jKCk9Pihhd2FpdCBkKCksYygpKX0sNzA0NjooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1F4OigpPT5yLHcxOigpPT5pfSk7Y29uc3Qgcj1cIl9fc2VhcmNoLW9wZW5maW4tYnJvd3Nlci1ob21lLXRvcGljX19cIjt2YXIgbyxpOyFmdW5jdGlvbihlKXtlLkZldGNoaW5nPVwiZmV0Y2hpbmdcIixlLkZldGNoZWQ9XCJmZXRjaGVkXCIsZS5Db21wbGV0ZT1cImNvbXBsZXRlXCJ9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkluaXRpYWw9MF09XCJJbml0aWFsXCIsZVtlLk9wZW49MV09XCJPcGVuXCIsZVtlLkNsb3NlPTJdPVwiQ2xvc2VcIn0oaXx8KGk9e30pKX0sMTY0NjooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse2U6KCk9Pm99KTt2YXIgcj1uKDg0MjMpO2NvbnN0IG89ZT0+e2NvbnN0IHQ9ZmluLlBsYXRmb3JtLkxheW91dC53cmFwU3luYyhlKTtyZXR1cm57c2hvdzphc3luYygpPT57Y29uc3Qgbj1hd2FpdCB0LmdldENvbmZpZygpLHtzZXR0aW5nczpvLGRpbWVuc2lvbnM6aX09bixhPWF3YWl0KDAsci5ZUSkoZSk7YXdhaXQgdC5yZXBsYWNlKHsuLi5uLHNldHRpbmdzOnsuLi5vLGhhc0hlYWRlcnM6ITAscmVvcmRlckVuYWJsZWQ6ITB9LGRpbWVuc2lvbnM6ey4uLmksaGVhZGVySGVpZ2h0OmE/Mjg6MzB9fSl9LGhpZGU6YXN5bmMgZT0+e2NvbnN0IG49YXdhaXQgdC5nZXRDb25maWcoKSx7c2V0dGluZ3M6cixkaW1lbnNpb25zOm99PWF3YWl0IG47YXdhaXQgdC5yZXBsYWNlKHsuLi5uLHNldHRpbmdzOnsuLi5yLGhhc0hlYWRlcnM6ITEscmVvcmRlckVuYWJsZWQ6ZT8uc2V0dGluZ3M/LnJlb3JkZXJFbmFibGVkPz8hMX0sZGltZW5zaW9uczp7Li4ubyxoZWFkZXJIZWlnaHQ6MH19KX0saXNTaG93aW5nVGFiczphc3luYygpPT57dHJ5e2NvbnN0IGU9YXdhaXQgdC5nZXRDb25maWcoKSx7c2V0dGluZ3M6bn09YXdhaXQgZTtyZXR1cm4gbi5oYXNIZWFkZXJzfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLmVycm9yKFwiZmFpbGVkIHRvIGdldCBsYXlvdXQgY29uZmlnOiBcIixlKSwhMH19fX19LDEwNjU6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByPW4oNTMwNCk7bigxMjEpLG4oODYzNiksbig3MTAwKSxuKDUxNTApLG4oNTQzOCk7Y29uc3Qgbz17W3IuUGFsZXR0ZS5icmFuZFByaW1hcnldOlwiIzBBNzZEM1wiLFtyLlBhbGV0dGUuc3RhdHVzU3VjY2Vzc106ci5Db2xvci5mdW5jdGlvbmFsMSxbci5QYWxldHRlLnN0YXR1c1dhcm5pbmddOnIuQ29sb3IuZnVuY3Rpb25hbDEwLFtyLlBhbGV0dGUuc3RhdHVzQ3JpdGljYWxdOnIuQ29sb3IuZnVuY3Rpb25hbDcsW3IuUGFsZXR0ZS5zdGF0dXNBY3RpdmVdOnIuQ29sb3IuZnVuY3Rpb25hbDMsW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDFdOlwiIzBBNzZEM1wiLFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQyXTpcIiMwMDAwMDBcIixbci5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kM106XCIjMDAwMDAwXCIsW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDRdOlwiIzAwMDAwMFwiLFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQ1XTpcIiMwMDAwMDBcIn0saT17Li4ubyxbci5QYWxldHRlLmJhY2tncm91bmQxXTpyLkNvbG9yLndoaXRlLFtyLlBhbGV0dGUuYmFja2dyb3VuZDJdOnIuQ29sb3IubGlnaHRHcmF5MSxbci5QYWxldHRlLmJhY2tncm91bmQzXTpyLkNvbG9yLmxpZ2h0R3JheTIsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNF06ci5Db2xvci5saWdodEdyYXkzLFtyLlBhbGV0dGUuYmFja2dyb3VuZDVdOnIuQ29sb3IubGlnaHRHcmF5NCxbci5QYWxldHRlLmJhY2tncm91bmQ2XTpyLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS5icmFuZFNlY29uZGFyeV06ci5Db2xvci5saWdodEdyYXk0LFtyLlBhbGV0dGUuaW5wdXRCYWNrZ3JvdW5kXTpyLkNvbG9yLmxpZ2h0R3JheTMsW3IuUGFsZXR0ZS5pbnB1dENvbG9yXTpyLkNvbG9yLmRhcmtHcmF5NSxbci5QYWxldHRlLmlucHV0UGxhY2Vob2xkZXJdOnIuQ29sb3IuZGFya0dyYXkyLFtyLlBhbGV0dGUuaW5wdXREaXNhYmxlZF06ci5Db2xvci5uZXV0cmFsR3JheSxbci5QYWxldHRlLmlucHV0Rm9jdXNlZF06ci5Db2xvci5saWdodEdyYXk1LFtyLlBhbGV0dGUuaW5wdXRCb3JkZXJdOnIuQ29sb3IubmV1dHJhbEdyYXksW3IuUGFsZXR0ZS50ZXh0RGVmYXVsdF06ci5Db2xvci5kYXJrR3JheTUsW3IuUGFsZXR0ZS50ZXh0SGVscF06ci5Db2xvci5kYXJrR3JheTMsW3IuUGFsZXR0ZS50ZXh0SW5hY3RpdmVdOnIuQ29sb3IubmV1dHJhbEdyYXl9LGE9ey4uLm8sW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kMV06ci5Db2xvci5kYXJrR3JheTYsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kMl06ci5Db2xvci5kYXJrR3JheTUsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kM106ci5Db2xvci5kYXJrR3JheTQsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNF06ci5Db2xvci5kYXJrR3JheTMsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNV06ci5Db2xvci5kYXJrR3JheTIsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNl06ci5Db2xvci5kYXJrR3JheTEsW3IuUGFsZXR0ZS5icmFuZFNlY29uZGFyeV06ci5Db2xvci5kYXJrR3JheTIsW3IuUGFsZXR0ZS5pbnB1dEJhY2tncm91bmRdOnIuQ29sb3IuZGFya0dyYXkxLFtyLlBhbGV0dGUuaW5wdXRDb2xvcl06ci5Db2xvci53aGl0ZSxbci5QYWxldHRlLmlucHV0UGxhY2Vob2xkZXJdOnIuQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLmlucHV0RGlzYWJsZWRdOnIuQ29sb3IubmV1dHJhbEdyYXksW3IuUGFsZXR0ZS5pbnB1dEZvY3VzZWRdOnIuQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLmlucHV0Qm9yZGVyXTpyLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUudGV4dERlZmF1bHRdOnIuQ29sb3Iud2hpdGUsW3IuUGFsZXR0ZS50ZXh0SGVscF06ci5Db2xvci5saWdodEdyYXk1LFtyLlBhbGV0dGUudGV4dEluYWN0aXZlXTpyLkNvbG9yLm5ldXRyYWxHcmF5fTtyLkNvbG9yLmxpZ2h0R3JheTQsci5Db2xvci5kYXJrR3JheTUsci5Db2xvci5kYXJrR3JheTIsci5Db2xvci5kYXJrR3JheTV9LDU4MDY6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtEOTooKT0+YyxUWjooKT0+dSxxOTooKT0+cn0pO3ZhciByLG8saT1uKDY2NzgpOyFmdW5jdGlvbihlKXtlLldvcmtzcGFjZT1cIm9wZW5maW4td29ya3NwYWNlXCIsZS5PbGRXb3Jrc3BhY2U9XCJvcGVuZmluLWJyb3dzZXJcIn0ocnx8KHI9e30pKSxmdW5jdGlvbihlKXtlLkZpblByb3RvY29sPVwiZmluLXByb3RvY29sXCJ9KG98fChvPXt9KSk7Y29uc3QgYT17dXVpZDppLkFCfSxsPXt1dWlkOnIuV29ya3NwYWNlfSxzPWU9PntpZighaS5zUyl0aHJvdyBuZXcgRXJyb3IoXCJnZXRBcHBsaWNhdGlvbiBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbiBPcGVuRmluIGVudi4gQXZvaWQgdXNpbmcgdGhpcyBkdXJpbmcgcHJlLXJlbmRlcmluZy5cIik7cmV0dXJuIGZpbi5BcHBsaWNhdGlvbi53cmFwU3luYyhlKX0sYz0oKT0+cyhhKSx1PSgpPT5zKGwpfSw5MTE3OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7WjooKT0+aX0pO3ZhciByPW4oNjY3OCk7Y29uc3Qgbz1yLkF4JiZcImNvbXBsZXRlXCIhPT1kb2N1bWVudC5yZWFkeVN0YXRlJiZuZXcgUHJvbWlzZSgoZT0+ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInJlYWR5c3RhdGVjaGFuZ2VcIiwoKCk9PntcImNvbXBsZXRlXCI9PT1kb2N1bWVudC5yZWFkeVN0YXRlJiZlKCl9KSkpKTtmdW5jdGlvbiBpKGUpe2xldCB0O2NvbnN0IG49bmV3IFNldDtyZXR1cm4oKT0+e2lmKCFyLnNTKXRocm93IG5ldyBFcnJvcihcImdldENoYW5uZWxDbGllbnQgY2Fubm90IGJlIHVzZWQgb3V0c2lkZSBhbiBPcGVuRmluIGVudi4gQXZvaWQgdXNpbmcgdGhpcyBtZXRob2QgZHVyaW5nIHByZS1yZW5kZXJpbmcuXCIpO3JldHVybiB0fHwodD0oYXN5bmMoKT0+e2F3YWl0IG87Y29uc3QgaT17Y2xpZW50QVBJVmVyc2lvbjpyLnUwfSxhPWF3YWl0IGZpbi5JbnRlckFwcGxpY2F0aW9uQnVzLkNoYW5uZWwuY29ubmVjdChlLHtwYXlsb2FkOml9KTtyZXR1cm4gYS5vbkRpc2Nvbm5lY3Rpb24oKGFzeW5jKCk9PntuLmZvckVhY2goKGU9PmUoKSkpLG4uY2xlYXIoKSxjb25zb2xlLndhcm4oYGRpc2Nvbm5lY3RlZCBmcm9tIGNoYW5uZWwgcHJvdmlkZXIgJHtlfWApLHQ9dm9pZCAwfSkpLGF9KSgpLnRoZW4oKGU9PihlLmFkZERpc2Nvbm5lY3Rpb25MaXN0ZW5lcj1lPT57bi5hZGQoZSl9LGUpKSkuY2F0Y2goKG49Pnt0aHJvdyB0PXZvaWQgMCxuZXcgRXJyb3IoYGZhaWxlZCB0byBjb25uZWN0IHRvIGNoYW5uZWwgcHJvdmlkZXIgJHtlfTogJHtufWApfSkpKSx0fX19LDg0MjM6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtZUTooKT0+cn0pO24oNjAwNSksbigxMjEpO2NvbnN0IHI9YXN5bmMgZT0+e2NvbnN0IHQ9ZT9maW4uV2luZG93LndyYXBTeW5jKGUpOmZpbi5XaW5kb3cuZ2V0Q3VycmVudFN5bmMoKSxuPWF3YWl0IHQuZ2V0T3B0aW9ucygpO3JldHVybiBuLndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlJiZcImVudGVycHJpc2VcIj09PW4ud29ya3NwYWNlUGxhdGZvcm0ud2luZG93VHlwZX19LDY2Nzg6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByO24uZCh0LHtBQjooKT0+cyxBeDooKT0+aSxDTDooKT0+dSxHWDooKT0+ZCxaSzooKT0+ZixfVjooKT0+YSxhVzooKT0+cCxvQzooKT0+YyxyeDooKT0+ZyxzUzooKT0+byx1MDooKT0+dn0pLGZ1bmN0aW9uKGUpe2UuTG9jYWw9XCJsb2NhbFwiLGUuRGV2PVwiZGV2XCIsZS5TdGFnaW5nPVwic3RhZ2luZ1wiLGUuUHJvZD1cInByb2RcIn0ocnx8KHI9e30pKTtjb25zdCBvPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBmaW4saT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHByb2Nlc3N8fHByb2Nlc3MuZW52LFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpLGE9aSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGluZGV4ZWREQixsPWk/d2luZG93Lm9yaWdpbjpyLkxvY2FsLHM9byYmZmluLm1lLnV1aWQsYz1vJiZmaW4ubWUubmFtZSx1PW8mJmZpbi5tZS5lbnRpdHlUeXBlLGY9XCJwcm9kXCI9PT1yLkxvY2FsLGQ9KHIuRGV2LHIuU3RhZ2luZyxyLlByb2QsXCJmaW5zOi8vc3lzdGVtLWFwcHMvd29ya3NwYWNlXCIpLHA9XCJodHRwczovL3dvcmtzcGFjZS5vcGVuZmluLmNvL3dvcmtzcGFjZS8yMC4wLjUvYXBwLmpzb25cIixoPWU9PmUuc3RhcnRzV2l0aChcImh0dHA6Ly9cIil8fGUuc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpP2U6bCtlLGc9KGgoXCJodHRwczovL3dvcmtzcGFjZS5vcGVuZmluLmNvL3dvcmtzcGFjZS8yMC4wLjVcIiksaChcImh0dHBzOi8vd29ya3NwYWNlLm9wZW5maW4uY28vd29ya3NwYWNlLzIwLjAuNVwiKSksdj0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFdPUktTUEFDRV9ET0NTX1BMQVRGT1JNX1VSTCYmaChXT1JLU1BBQ0VfRE9DU19QTEFURk9STV9VUkwpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBXT1JLU1BBQ0VfRE9DU19DTElFTlRfVVJMJiZoKFdPUktTUEFDRV9ET0NTX0NMSUVOVF9VUkwpLFwiMjAuMC41XCIpO1widW5kZWZpbmVkXCIhPXR5cGVvZiBXT1JLU1BBQ0VfQlVJTERfU0hBJiZXT1JLU1BBQ0VfQlVJTERfU0hBfSw4MzExOihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7WlM6KCk9PnUsZEc6KCk9PmZ9KTt2YXIgcj1uKDMxOTgpLG89bi5uKHIpLGk9KG4oNjY3OCksbigzNDIwKSksYT1uKDE2NDYpLGw9bigzOTI2KSxzPShuKDcwOTgpLG4oMTIxKSk7Y29uc3QgYz0oZSx0KT0+ZS5jb250ZW50P3suLi5lLGNvbnRlbnQ6ZS5jb250ZW50Lm1hcCgoZT0+YyhlLHQpKSl9OnsuLi5lLGNvbXBvbmVudFN0YXRlOnQoZS5jb21wb25lbnRTdGF0ZSl9LHU9ZT0+KHsuLi5lLG5hbWU6dm9pZCAwfSksZj1lPT57Y29uc3QgdD17Li4uZX07cmV0dXJuIGModCx1KX0sZD1lPT57Y29uc3QgdD1bXTtyZXR1cm4oZSYmQXJyYXkuaXNBcnJheShlKT9lOltdKS5mb3JFYWNoKChlPT57aWYoXCJjb21wb25lbnRcIj09PWUudHlwZSlyZXR1cm4gdC5wdXNoKGUuY29tcG9uZW50U3RhdGUpO2NvbnN0IG49ZChlLmNvbnRlbnQpO3QucHVzaCguLi5uKX0pKSx0fTtuZXcgTWFwLG5ldyBNYXA7bygpKChhc3luYyBlPT57dHJ5e2NvbnN0IHQ9YXdhaXQoYXN5bmMgZT0+ZmluLlBsYXRmb3JtLkxheW91dC53cmFwU3luYyh7Li4uZmluLm1lLmlkZW50aXR5LGxheW91dE5hbWU6ZX0pLmdldENvbmZpZygpKShlLmxheW91dENvbnRhaW5lcktleSksbj10LmNvbnRlbnQ/ZCh0LmNvbnRlbnQpOltdLHI9bi5sZW5ndGg7cj4xPyhlPT57XCJtdWx0aVZpZXdcIiE9PWUuYXR0YWNoZWRQYWdlVHlwZSYmKDAsbC5hKSgpLkJyb3dzZXIud3JhcFN5bmMocy5HaSkudXBkYXRlUGFnZSh7cGFnZUlkOmUucGFnZUlkLHBhZ2U6e3NpbmdsZVZpZXdOYW1lOm51bGwsYXR0YWNoZWRQYWdlVHlwZTpcIm11bHRpVmlld1wifX0pfSkoZSk6MT09PXImJihhc3luYyhlLHQpPT57Y29uc3Qgbj0oMCxsLmEpKCkuQnJvd3Nlci53cmFwU3luYyhzLkdpKTtpZihcInNpbmdsZVZpZXdcIiE9PWUuYXR0YWNoZWRQYWdlVHlwZSl7Y29uc3Qgcj1hd2FpdCgwLGkuVlIpKGUpLG89YXdhaXQoMCxsLmEpKCkuQnJvd3Nlci5nZXRVbmlxdWVQYWdlVGl0bGUoKTtkZWxldGUgci5sYXlvdXQ7Y29uc3QgYT17Li4ucixzaW5nbGVWaWV3TmFtZTp0LHRpdGxlOm8saGFzVW5zYXZlZENoYW5nZXM6ITEsYXR0YWNoZWRQYWdlVHlwZTpcInNpbmdsZVZpZXdcIn07YXdhaXQgbi51cGRhdGVQYWdlKHtwYWdlSWQ6ZS5wYWdlSWQscGFnZTphfSl9fSkoZSxuWzBdLm5hbWUpLGF3YWl0KGFzeW5jKGUsdCk9Pntjb25zdCBuPSgwLGEuZSkoey4uLnMuR2ksbGF5b3V0TmFtZTplLmxheW91dENvbnRhaW5lcktleX0pLHI9YXdhaXQgbi5pc1Nob3dpbmdUYWJzKCk7dD4xP3J8fGF3YWl0IG4uc2hvdygpOjE9PT10JiZyJiZhd2FpdCBuLmhpZGUoe3NldHRpbmdzOntyZW9yZGVyRW5hYmxlZDohMH19KX0pKGUscil9Y2F0Y2goZSl7fX0pLDUwLHtsZWFkaW5nOiExLHRyYWlsaW5nOiEwfSl9LDgwNjE6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByO24uZCh0LHtaOigpPT5vfSksZnVuY3Rpb24oZSl7ZS5DdXJyZW50V29ya3NwYWNlSWQ9XCJjdXJyZW50V29ya3NwYWNlSWRcIixlLkxhc3RGb2N1c2VkQnJvd3NlcldpbmRvdz1cImxhc3RGb2N1c2VkQnJvd3NlcldpbmRvd1wiLGUuTWFjaGluZU5hbWU9XCJtYWNoaW5lTmFtZVwiLGUuTmV3VGFiUGFnZUxheW91dD1cIk5ld1RhYlBhZ2VMYXlvdXRcIixlLk5ld1RhYlBhZ2VTb3J0PVwiTmV3VGFiUGFnZVNvcnRcIixlLkRvY2tQb3NpdGlvbj1cIkRvY2tQb3NpdGlvblwiLGUuU2VsZWN0ZWRDb2xvclNjaGVtZT1cIlNlbGVjdGVkQ29sb3JTY2hlbWVcIixlLkhhc01vdmVkU3RvcmU9XCJIYXNNb3ZlZFN0b3JlXCIsZS5QYWdlRHJhZ1N0YXRlPVwiQnJvd3NlclBhZ2VEcmFnU3RhdGVcIn0ocnx8KHI9e30pKTtjb25zdCBvPXJ9LDQ3Mjg6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtMUzooKT0+byxyVjooKT0+aX0pO3ZhciByPW4oNjY3OCk7Y29uc3Qgbz0oZSx0KT0+e2xvY2FsU3RvcmFnZS5zZXRJdGVtKGAke3IuQUJ9LSR7ZX1gLHQpfSxpPWU9PmxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke3IuQUJ9LSR7ZX1gKX0sNzI3ODooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1o6KCk9Pm99KTtjb25zdCByPVwib2Ytd29ya3NwYWNlLVwiO2NvbnN0IG89bmV3IGNsYXNze21hcmsoZSl7cGVyZm9ybWFuY2UubWFyayhgJHtyfSR7ZX1gKX1tYXJrU3RhcnQoZSl7cGVyZm9ybWFuY2UubWFyayhgJHtyfSR7ZX0tc3RhcnRgKX1tYXJrRW5kKGUpe3BlcmZvcm1hbmNlLm1hcmsoYCR7cn0ke2V9LWVuZGApfW1hcmtFbmRBbmRNZWFzdXJlKGUpe3BlcmZvcm1hbmNlLm1hcmsoYCR7cn0ke2V9LWVuZGApO3RyeXtyZXR1cm4gcGVyZm9ybWFuY2UubWVhc3VyZShgJHtyfSR7ZX1gLGAke3J9JHtlfS1zdGFydGAsYCR7cn0ke2V9LWVuZGApfWNhdGNoKGUpezB9fW1hcmtBbmRNZWFzdXJlKGUsdCl7cGVyZm9ybWFuY2UubWFyayhgJHtyfSR7ZX1gKTt0cnl7cmV0dXJuIHBlcmZvcm1hbmNlLm1lYXN1cmUoYCR7cn0ke2V9LW1lYXN1cmVgLGAke3J9JHt0fS1zdGFydGAsYCR7cn0ke2V9YCl9Y2F0Y2goZSl7MH19cmVwb3J0V29ya3NwYWNlUGVyZm9ybWFuY2VFbnRyaWVzKCl7cmV0dXJuIHBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUoXCJtZWFzdXJlXCIpLmZpbHRlcigoZT0+ZS5uYW1lLnN0YXJ0c1dpdGgocikpKX1yZXBvcnRXb3Jrc3BhY2VQZXJmb3JtYW5jZSgpe3JldHVybiB0aGlzLnJlcG9ydFdvcmtzcGFjZVBlcmZvcm1hbmNlRW50cmllcygpLm1hcCgoZT0+KHtuYW1lOmUubmFtZS5yZXBsYWNlKGAke3J9YCxcIlwiKS5yZXBsYWNlKFwiLW1lYXN1cmVcIixcIlwiKSxkdXJhdGlvbjplLmR1cmF0aW9ufSkpKX19fSw2MDA1OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjt2YXIgcjtuLmQodCx7WlA6KCk9PmwsZGU6KCk9Pml9KSxmdW5jdGlvbihlKXtlLkhvbWU9XCIvaG9tZS9cIixlLkhvbWVTZWFyY2g9XCIvaG9tZS8/ZGVlcGxpbms9c2VhcmNoXCIsZS5Ib21lUGFnZXNSZW5hbWU9XCIvaG9tZS9wYWdlcy9yZW5hbWUvXCIsZS5Eb2NrPVwiL2RvY2svXCIsZS5Ccm93c2VyPVwiL2Jyb3dzZXIvXCIsZS5Ccm93c2VyUG9wdXBNZW51PVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9cIixlLlByb3ZpZGVyPVwiL3Byb3ZpZGVyL1wiLGUuQnJvd3NlclBvcHVwTWVudVNhdmVNb2RhbD1cIi9icm93c2VyL3BvcHVwLW1lbnUvc2F2ZS1tb2RhbC9cIixlLkJyb3dzZXJQb3B1cE1lbnVMYXlvdXRzPVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9sYXlvdXRzL2xheW91dHMvXCIsZS5Ccm93c2VyUG9wdXBNZW51Q29sb3JMaW5raW5nPVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9jb2xvci1saW5raW5nL2NvbG9yLWxpbmtpbmcvXCIsZS5Ccm93c2VySW5kaWNhdG9yPVwiL2Jyb3dzZXIvaW5kaWNhdG9yL1wiLGUuQnJvd3NlclBvcHVwTWVudUFkZHJlc3NTZWFyY2hSZXN1bHRzVmlldz1cIi9icm93c2VyL3BvcHVwLW1lbnUvYWRkcmVzcy1zZWFyY2gtcmVzdWx0cy12aWV3L1wiLGUuUmVzcG9uc2VNb2RhbD1cIi9icm93c2VyL3BvcHVwLW1lbnUvcmVzcG9uc2UtbW9kYWwvXCIsZS5DbG9zZUNvbmZpcm1hdGlvbk1vZGFsPVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9jbG9zZS1jb25maXJtYXRpb24tbW9kYWwvXCIsZS5Eb2NzPVwiL3Byb3ZpZGVyL2RvY3MvXCIsZS5TdG9yZWZyb250PVwiL3N0b3JlZnJvbnQvXCIsZS5EZXByZWNhdGVkQWxlcnQ9XCIvcHJvdmlkZXIvZGVwcmVjYXRlZC1hbGVydC9cIixlLkFuYWx5dGljcz1cIi9wcm92aWRlci9hbmFseXRpY3MvXCIsZS5FbnRlcnByaXNlQnJvd3Nlcj1cIi9icm93c2VyL2VudGVycHJpc2UvXCIsZS5FbnRlcnByaXNlQ29udGV4dE1lbnU9XCIvYnJvd3Nlci9lbnRlcnByaXNlL2NvbnRleHQtbWVudS9cIixlLkVudGVycHJpc2VCb29rbWFya0RpYWxvZz1cIi9icm93c2VyL2VudGVycHJpc2UvYm9va21hcmstZGlhbG9nL1wiLGUuRHJvcGRvd25NZW51PVwiL2Jyb3dzZXIvZW50ZXJwcmlzZS9kcm9wZG93bi1tZW51L1wifShyfHwocj17fSkpO2NvbnN0IG89XCIvbWljcm9zb2Z0LTM2NS1pbnRlZ3JhdGlvbi1hc3NldHMvXCIsaT17SWNvbk9wZW5GaW5Mb2dvOlwiL2ljb25zL29wZW5maW5sb2dvLnN2Z1wiLEljb25GaWx0ZXI6XCIvaWNvbnMvZmlsdGVyLnN2Z1wiLExpZ2h0U3RvcmVmcm9udDpcIi9pY29ucy9zdG9yZS1pY29uLWxpZ2h0LnBuZ1wiLERhcmtTdG9yZWZyb250OlwiL2ljb25zL3N0b3JlLWljb24tZGFyay5wbmdcIixDYWxsSWNvbkxpZ2h0OlwiL2ljb25zL2NhbGwtaWNvbi1saWdodC5zdmdcIixDYWxsSWNvbkRhcms6XCIvaWNvbnMvY2FsbC1pY29uLWRhcmsuc3ZnXCIsQ2hhdEljb25MaWdodDpcIi9pY29ucy9jaGF0LWljb24tbGlnaHQuc3ZnXCIsQ2hhdEljb25EYXJrOlwiL2ljb25zL2NoYXQtaWNvbi1kYXJrLnN2Z1wiLE1lc3NhZ2VJY29uTGlnaHQ6XCIvaWNvbnMvbWVzc2FnZS1pY29uLWxpZ2h0LnN2Z1wiLE1lc3NhZ2VJY29uRGFyazpcIi9pY29ucy9tZXNzYWdlLWljb24tZGFyay5zdmdcIixNaWNyb3NvZnQzNjVBc3NldHM6e01pY3Jvc29mdDM2NURvY3VtZW50SWNvbjpgJHtvfW1pY3Jvc29mdC0zNjUtZG9jdW1lbnQtaWNvbi5zdmdgLE1pY3Jvc29mdDM2NUV4Y2VsSWNvbjpgJHtvfW1pY3Jvc29mdC0zNjUtZXhjZWwtaWNvbi5zdmdgLE1pY3Jvc29mdDM2NVBvd2VycG9pbnRJY29uOmAke299bWljcm9zb2Z0LTM2NS1wb3dlcnBvaW50LWljb24uc3ZnYCxNaWNyb3NvZnQzNjVPdXRsb29rSWNvbjpgJHtvfW1pY3Jvc29mdC0zNjUtb3V0bG9vay1pY29uLnN2Z2AsTWljcm9zb2Z0MzY1VGVhbXNJY29uOmAke299bWljcm9zb2Z0LTM2NS10ZWFtcy1pY29uLnN2Z2AsTWljcm9zb2Z0MzY1SWNvbjpgJHtvfW1pY3Jvc29mdC0zNjUtaWNvbi5zdmdgLFBERkZpbGVJY29uOmAke299cGRmLWZpbGUtaWNvbi5zdmdgfSxEb2NrSWNvbkxpZ2h0OlwiL2ljb25zL2RvY2staWNvbi1saWdodC5wbmdcIixEb2NrSWNvbkRhcms6XCIvaWNvbnMvZG9jay1pY29uLWRhcmsucG5nXCJ9O3ZhciBhOyFmdW5jdGlvbihlKXtlLlNlYXJjaD1cInNlYXJjaFwifShhfHwoYT17fSkpO2NvbnN0IGw9cn0sNjY1MDooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse0szOigpPT5pfSk7dmFyIHI7big2Njc4KTshZnVuY3Rpb24oZSl7ZS5Ib21lPVwiL2hvbWVcIixlLkJyb3dzZXI9XCIvYnJvd3NlclwiLGUuUHJvdmlkZXI9XCIvcHJvdmlkZXJcIixlLlN0b3JlZnJvbnQ9XCIvc3RvcmVmcm9udFwiLGUuRG9jaz1cIi9kb2NrXCJ9KHJ8fChyPXt9KSk7Y29uc3Qgbz1cIi93b3Jrc3BhY2UvMjAuMC41XCI7ZnVuY3Rpb24gaShlKXtyZXR1cm4gbytlfX0sNTkxMjooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQseyR3OigpPT5hLFg1OigpPT5vfSk7big4MzExKTt2YXIgcj1uKDgwNjEpO2Z1bmN0aW9uIG8oKXtyZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oci5aLk1hY2hpbmVOYW1lKT8/XCJ1bmtub3duXCJ9bGV0IGk7YXN5bmMgZnVuY3Rpb24gYSgpe3JldHVybiBpfHwoaT1hd2FpdCBmaW4uU3lzdGVtLmdldE1hY2hpbmVJZCgpKSxpfX0sNjUzMjooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1duOigpPT5jLGNrOigpPT5sLGQ5OigpPT5zfSk7dmFyIHIsbz1uKDY2NzgpLGk9bigxMjEpO24oODYzNik7IWZ1bmN0aW9uKGUpe2UuQnJvd3Nlcj1cIkJyb3dzZXJcIixlLkRvY2s9XCJEb2NrXCIsZS5Ib21lPVwiSG9tZVwiLGUuTm90aWZpY2F0aW9uPVwiTm90aWZpY2F0aW9uXCIsZS5TdG9yZWZyb250PVwiU3RvcmVmcm9udFwiLGUuUGxhdGZvcm09XCJQbGF0Zm9ybVwiLGUuVGhlbWluZz1cIlRoZW1pbmdcIixlLk1pY3JvZmxvdz1cIk1pY3JvZmxvd1wifShyfHwocj17fSkpO2NvbnN0IGE9YXN5bmMoZSx0LG49XCJ3b3Jrc3BhY2UtbGljZW5zaW5nXCIpPT57Y29uc3Qgcj17YXBpVmVyc2lvbjp0LmFwaVZlcnNpb258fG8udTAsY29tcG9uZW50TmFtZTplLGNvbXBvbmVudFZlcnNpb246dC5jb21wb25lbnRWZXJzaW9ufHxvLnUwLGFsbG93ZWQ6dC5hbGxvd2VkLHJlamVjdGlvbkNvZGU6dC5yZWplY3Rpb25Db2RlfTtmaW4uU3lzdGVtLnJlZ2lzdGVyVXNhZ2Uoe3R5cGU6bixkYXRhOnJ9KX07Y29uc3QgbD1lPT57aS5PSS51dWlkPT09aS5HaS51dWlkJiZpLk9JLm5hbWU9PT1pLkdpLm5hbWV8fGEoci5Ib21lLGUpfSxzPWU9PnthKHIuU3RvcmVmcm9udCxlKX0sYz1lPT57YShyLkRvY2ssZSl9O25ldyBNYXB9LDk2MTA6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIoKXtyZXR1cm4gdm9pZCAwIT09dHlwZW9mIGNyeXB0byYmXCJyYW5kb21VVUlEXCJpbiBjcnlwdG8mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGNyeXB0by5yYW5kb21VVUlEP2NyeXB0by5yYW5kb21VVUlEKCk6XCIxMDAwMDAwMC0xMDAwLTQwMDAtODAwMC0xMDAwMDAwMDAwMDBcIi5yZXBsYWNlKC9bMDE4XS9nLChlPT4oZV5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSYxNT4+ZS80KS50b1N0cmluZygxNikpKX1uLmQodCx7SDooKT0+cn0pfSwxMjE6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtCOigpPT5kLEdQOigpPT5wLEdpOigpPT5sLElBOigpPT5yLEpWOigpPT5oLE9JOigpPT5zLFpKOigpPT5jLGlXOigpPT5mLG5kOigpPT51fSk7dmFyIHIsbz1uKDU4MDYpLGk9big2Njc4KTshZnVuY3Rpb24oZSl7ZS5Ib21lPVwib3BlbmZpbi1ob21lXCIsZS5Eb2NrPVwib3BlbmZpbi1kb2NrXCIsZS5TdG9yZWZyb250PVwib3BlbmZpbi1zdG9yZWZyb250XCIsZS5Ib21lSW50ZXJuYWw9XCJvcGVuZmluLWhvbWUtaW50ZXJuYWxcIixlLkJyb3dzZXJNZW51PVwib3BlbmZpbi1icm93c2VyLW1lbnVcIixlLkJyb3dzZXJTYXZlTWVudT1cIm9wZW5maW4tYnJvd3Nlci1zYXZlLW1lbnVcIixlLkJyb3dzZXJJbmRpY2F0b3I9XCJvcGVuZmluLWJyb3dzZXItaW5kaWNhdG9yXCIsZS5Ccm93c2VyV2luZG93PVwiaW50ZXJuYWwtZ2VuZXJhdGVkLXdpbmRvd1wiLGUuQ2xhc3NpY1dpbmRvdz1cImludGVybmFsLWdlbmVyYXRlZC1jbGFzc2ljLXdpbmRvd1wiLGUuRW50ZXJwcmlzZUNvbnRleHRNZW51PVwib3BlbmZpbi1lbnRlcnByaXNlLWNvbnRleHQtbWVudVwiLGUuQnJvd3NlckFkZHJlc3NTZWFyY2hQcmVmaXg9XCJvcGVuZmluLWJyb3dzZXItbWVudS1hZGRyZXNzLXNlYXJjaC1cIixlLkVudGVycHJpc2VCb29rbWFya0RpYWxvZ1dpbmRvdz1cIm9wZW5maW4tZW50ZXJwcmlzZS1ib29rbWFyay1kaWFsb2dcIixlLkRyb3Bkb3duTWVudT1cIm9wZW5maW4tZW50ZXJwcmlzZS1kcm9wZG93bi1tZW51XCJ9KHJ8fChyPXt9KSk7ZnVuY3Rpb24gYShlKXtpZighaS5zUyl0aHJvdyBuZXcgRXJyb3IoXCJnZXRPRldpbmRvdyBjYW4gb25seSBiZSB1c2VkIGluIGFuIE9wZW5GaW4gZW52LiBBdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kIGR1cmluZyBwcmUtcmVuZGVyaW5nLlwiKTtyZXR1cm4gZmluLldpbmRvdy53cmFwU3luYyhlKX1jb25zdCBsPXtuYW1lOmkub0MsdXVpZDppLkFCfTtjb25zdCBzPXtuYW1lOnIuSG9tZSx1dWlkOm8ucTkuV29ya3NwYWNlfSxjPXtuYW1lOnIuRG9jayx1dWlkOm8ucTkuV29ya3NwYWNlfSx1PXtuYW1lOnIuU3RvcmVmcm9udCx1dWlkOm8ucTkuV29ya3NwYWNlfSxmPXtuYW1lOm8ucTkuV29ya3NwYWNlLHV1aWQ6by5xOS5Xb3Jrc3BhY2V9O2NvbnN0IGQ9YXN5bmMgZT0+e3RyeXtjb25zdCB0PWF3YWl0IGZpbi5XaW5kb3cud3JhcFN5bmMoe25hbWU6ZS5uYW1lLHV1aWQ6ZS51dWlkPz9maW4ubWUudXVpZH0pLmdldE9wdGlvbnMoKTtyZXR1cm4oXCJicm93c2VyXCI9PT10LndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlfHxcImVudGVycHJpc2VcIj09PXQud29ya3NwYWNlUGxhdGZvcm0/LndpbmRvd1R5cGUpJiZ0LndvcmtzcGFjZVBsYXRmb3JtPy5wYWdlc31jYXRjaChlKXtyZXR1cm4gY29uc29sZS53YXJuKFwiaXNCcm93c2VyV2luZG93IGVycm9yOiBcIixlKSwhMX19O2FzeW5jIGZ1bmN0aW9uIHAoKXtjb25zdCBlPWF3YWl0IGZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpLmdldENoaWxkV2luZG93cygpLHQ9YXdhaXQgUHJvbWlzZS5hbGwoZS5tYXAoKGFzeW5jIGU9PmQoZS5pZGVudGl0eSkpKSk7cmV0dXJuIGUuZmlsdGVyKCgoZSxuKT0+dFtuXSkpfWNvbnN0IGg9ZT0+YShlKS5nZXRPcHRpb25zKCkudGhlbigoKCk9PiEwKSkuY2F0Y2goKCgpPT4hMSkpfSwyMzA0OmU9PntlLmV4cG9ydHM9e2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsZW1iZWQ6ITAsaHI6ITAsaW1nOiEwLGlucHV0OiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfX19LHQ9e307ZnVuY3Rpb24gbihyKXt2YXIgbz10W3JdO2lmKHZvaWQgMCE9PW8pcmV0dXJuIG8uZXhwb3J0czt2YXIgaT10W3JdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVtyXShpLGkuZXhwb3J0cyxuKSxpLmV4cG9ydHN9bi5uPWU9Pnt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/KCk9PmUuZGVmYXVsdDooKT0+ZTtyZXR1cm4gbi5kKHQse2E6dH0pLHR9LG4uZD0oZSx0KT0+e2Zvcih2YXIgciBpbiB0KW4ubyh0LHIpJiYhbi5vKGUscikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse2VudW1lcmFibGU6ITAsZ2V0OnRbcl19KX0sbi5nPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksbi5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxuLnI9ZT0+e1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LG4ubmM9dm9pZCAwO3ZhciByPXt9OygoKT0+e1widXNlIHN0cmljdFwiO24ucihyKSxuLmQocix7QWN0aW9uVHJpZ2dlcjooKT0+R2UucCxBcHBNYW5pZmVzdFR5cGU6KCk9PlllLkwsQnV0dG9uU3R5bGU6KCk9PnFlLlpKLENMSUFjdGlvbjooKT0+JC5QdCxDTElGaWx0ZXJPcHRpb25UeXBlOigpPT4kLmVsLENMSVRlbXBsYXRlOigpPT4kLnlXLENvbnRhaW5lclRlbXBsYXRlRnJhZ21lbnROYW1lczooKT0+cWUucDYsRG9jazooKT0+ZSxEb2NrQnV0dG9uTmFtZXM6KCk9PmQudixIb21lOigpPT5fLEludGVncmF0aW9uczooKT0+dCxMZWdhY3k6KCk9Pm8sUHJlc2VudGF0aW9uVGVtcGxhdGVGcmFnbWVudE5hbWVzOigpPT5xZS5HbyxTZWFyY2hUYWdCYWNrZ3JvdW5kOigpPT5HZS53LFN0b3JlZnJvbnQ6KCk9PnplLFN0b3JlZnJvbnRUZW1wbGF0ZTooKT0+WWUuVCxUZW1wbGF0ZUZyYWdtZW50VHlwZXM6KCk9PnFlLmJJfSk7dmFyIGU9e307bi5yKGUpLG4uZChlLHtEb2NrQnV0dG9uTmFtZXM6KCk9PmQudixkZXJlZ2lzdGVyOigpPT5tLG1pbmltaXplOigpPT5DLHJlZ2lzdGVyOigpPT52LHNob3c6KCk9Pnl9KTt2YXIgdD17fTtuLnIodCksbi5kKHQse01pY3Jvc29mdDM2NVdvcmtmbG93SW50ZWdyYXRpb246KCk9Pk5lfSk7dmFyIG89e307bi5yKG8pLG4uZChvLHtnZXRQYWdlczooKT0+VWUsZ2V0V29ya3NwYWNlczooKT0+V2V9KTt2YXIgaT1uKDY2NzgpLGE9big3Mjc4KSxsPW4oNjUzMikscz1uKDEyMSksYz1uKDUxNTApLHU9big1NDM4KTt2YXIgZj1uKDI2OTMpLGQ9big3NDI3KTtsZXQgcCxoO2NvbnN0IGc9KGU9W10pPT57Y29uc3QgdD1lLmZpbHRlcigoZT0+ISFlLmlkKSkubWFwKChlPT5lLmlkKSk7aWYobmV3IFNldCh0KS5zaXplIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiRG9jayBwcm92aWRlciBidXR0b25zIG11c3QgaGF2ZSB1bmlxdWUgaWRlbnRpZmllcnMgaWYgc3BlY2lmaWVkLlwiKX0sdj1hc3luYyBlPT57KDAsZi5FKShcImRvY2tcIixzLlpKKTtjb25zdCB0PWF3YWl0KGFzeW5jIGU9Pnthd2FpdCgwLHUuSGgpKGZpbi5tZS5pZGVudGl0eSk7Y29uc3QgdD1hd2FpdCgwLGMueFopKCk7aWYoaCl0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciB1c2luZyBgRG9jay5yZWdpc3RlcmAuIEEgRG9jayBwcm92aWRlciBmb3IgdGhpcyBXb3Jrc3BhY2UgUGxhdGZvcm0gaXMgYWxyZWFkeSByZWdpc3RlcmVkLiBDYWxsIGBEb2NrLmRlcmVnaXN0ZXJgIGJlZm9yZSBjYWxsaW5nIGBEb2NrLnJlZ2lzdGVyYCBhZ2Fpbi5cIik7cmV0dXJuIGg9ZSxlLmNsaWVudEFQSVZlcnNpb249aS51MCx0LmRpc3BhdGNoKFwicmVnaXN0ZXItcHJvdmlkZXJcIix7cHJvdmlkZXJUeXBlOlwiZG9ja1wiLGluZm86ZX0pfSkoZSk7cmV0dXJuIHA9bmV3IFByb21pc2UoKChuLHIpPT57dHJ5eyhlPT57ZS53b3Jrc3BhY2VDb21wb25lbnRzJiYhQXJyYXkuaXNBcnJheShlLndvcmtzcGFjZUNvbXBvbmVudHMpJiZjb25zb2xlLndhcm4oXCJVc2luZyB0aGUgYFdvcmtzcGFjZUNvbXBvbmVudEJ1dHRvbk9wdGlvbnNgIHR5cGUgdG8gY29uZmlndXJlIHRoZSBXb3Jrc3BhY2UgQ29tcG9uZW50cyBCdXR0b25zIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYFdvcmtzcGFjZUJ1dHRvbnNDb25maWdgIGluc3RlYWQuXCIpfSkoZSksZyhlLmJ1dHRvbnMpLCgwLGwuV24pKHthbGxvd2VkOiEwLGNvbXBvbmVudFZlcnNpb246dD8ud29ya3NwYWNlVmVyc2lvbn0pLGkudTAsbih7Y2xpZW50QVBJVmVyc2lvbjppLnUwLHdvcmtzcGFjZVZlcnNpb246dD8ud29ya3NwYWNlVmVyc2lvbj8/XCJcIix1cGRhdGVEb2NrUHJvdmlkZXJDb25maWc6YXN5bmMgdD0+e2lmKCFoKXRocm93IG5ldyBFcnJvcihcIkVycm9yIHVzaW5nIGBEb2NrLnVwZGF0ZURvY2tQcm92aWRlckNvbmZpZ2AuIERvY2sgcHJvdmlkZXIgaXMgbm90IHJlZ2lzdGVyZWQuIE1ha2Ugc3VyZSB0byBjYWxsIGBEb2NrLnJlZ2lzdGVyYCBmaXJzdC5cIik7Zyh0LmJ1dHRvbnMpO2NvbnN0IG49YXdhaXQoMCxjLnhaKSgpO2F3YWl0IG4uZGlzcGF0Y2goXCJ1cGRhdGUtcHJvdmlkZXJcIix7cHJvdmlkZXJUeXBlOlwiZG9ja1wiLHByb3ZpZGVyOnsuLi5lLHdvcmtzcGFjZUNvbXBvbmVudHM6dC53b3Jrc3BhY2VDb21wb25lbnRzLGJ1dHRvbnM6dC5idXR0b25zLHRpdGxlOnQudGl0bGUsaWNvbjp0Lmljb24sZGlzYWJsZVVzZXJSZWFycmFuZ2VtZW50OnQuZGlzYWJsZVVzZXJSZWFycmFuZ2VtZW50LGlkOmUuaWR9fSl9fSl9Y2F0Y2goZSl7KDAsbC5Xbikoe2FsbG93ZWQ6ITEscmVqZWN0aW9uQ29kZTplIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOlwidW5rbm93blwifSkscihlKSxwPXZvaWQgMH1maW5hbGx5e2EuWi5tYXJrRW5kQW5kTWVhc3VyZShcImRvY2stcmVnaXN0cmF0aW9uXCIpfX0pKSxwfSxtPWFzeW5jKCk9PntpZihhd2FpdCBwLCFoKXRocm93IG5ldyBFcnJvcihcIkVycm9yIHVzaW5nIGBEb2NrLmRlcmVnaXN0ZXJgLiBEb2NrIHByb3ZpZGVyIGlzIG5vdCByZWdpc3RlcmVkLiBDYWxsIGBEb2NrLnJlZ2lzdGVyYCBiZWZvcmUgY2FsbGluZyBgRG9jay5kZXJlZ2lzdGVyYC5cIik7Y29uc3QgZT1hd2FpdCgwLGMueFopKCk7YXdhaXQgZS5kaXNwYXRjaChcImRlcmVnaXN0ZXItcHJvdmlkZXJcIix7cHJvdmlkZXJUeXBlOlwiZG9ja1wiLGlkOmguaWR9KSxoPXZvaWQgMCxwPXZvaWQgMH0sQz1hc3luYygpPT57YXdhaXQgcCxhd2FpdCgwLGMuYUIpKCksYXdhaXQoYXN5bmMgZT0+KGF3YWl0KDAsYy5EbSkoKSkuZGlzcGF0Y2goXCJoaWRlLXByb3ZpZGVyLXdpbmRvd1wiLHtwcm92aWRlclR5cGU6ZX0pKShcImRvY2tcIil9LHk9YXN5bmMoKT0+e2EuWi5tYXJrU3RhcnQoXCJkb2NrLXNob3dcIiksYXdhaXQgcCxhd2FpdCgwLGMuYUIpKCksYXdhaXQoYXN5bmMgZT0+KGF3YWl0KDAsYy5EbSkoKSkuZGlzcGF0Y2goXCJzaG93LXByb3ZpZGVyLXdpbmRvd1wiLHtwcm92aWRlclR5cGU6ZX0pKShcImRvY2tcIil9O3ZhciB3LGIseCxfPW4oMzI2MSksTz1mdW5jdGlvbihlLHQsbixyLG8pe2lmKFwibVwiPT09cil0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO2lmKFwiYVwiPT09ciYmIW8pdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2UhPT10fHwhbzohdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO3JldHVyblwiYVwiPT09cj9vLmNhbGwoZSxuKTpvP28udmFsdWU9bjp0LnNldChlLG4pLG59LEw9ZnVuY3Rpb24oZSx0LG4scil7aWYoXCJhXCI9PT1uJiYhcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZSE9PXR8fCFyOiF0LmhhcyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO3JldHVyblwibVwiPT09bj9yOlwiYVwiPT09bj9yLmNhbGwoZSk6cj9yLnZhbHVlOnQuZ2V0KGUpfTt3PW5ldyBXZWFrTWFwLGI9bmV3IFdlYWtNYXAseD1uZXcgV2Vha01hcDtjb25zdCBFPWNsYXNze2NvbnN0cnVjdG9yKGUpe3cuc2V0KHRoaXMsdm9pZCAwKSxiLnNldCh0aGlzLHZvaWQgMCkseC5zZXQodGhpcyx2b2lkIDApLE8odGhpcyx3LGUsXCJmXCIpLE8odGhpcyxiLG5ldyBNYXAsXCJmXCIpLE8odGhpcyx4LFtdLFwiZlwiKX1nZXQoZSl7aWYoTCh0aGlzLGIsXCJmXCIpLmhhcyhlKSlyZXR1cm4gdGhpcy51cGRhdGVRdWV1ZShlKSxMKHRoaXMsYixcImZcIikuZ2V0KGUpfWhhcyhlKXtyZXR1cm4gTCh0aGlzLGIsXCJmXCIpLmhhcyhlKX1wdXQoZSx0KXtpZihMKHRoaXMsYixcImZcIikuaGFzKGUpKUwodGhpcyxiLFwiZlwiKS5zZXQoZSx0KSx0aGlzLnVwZGF0ZVF1ZXVlKGUpO2Vsc2V7aWYoTCh0aGlzLHgsXCJmXCIpLmxlbmd0aD09PUwodGhpcyx3LFwiZlwiKSl7Y29uc3QgZT1MKHRoaXMseCxcImZcIikuc2hpZnQoKTtlJiZMKHRoaXMsYixcImZcIikuZGVsZXRlKGUpfUwodGhpcyxiLFwiZlwiKS5zZXQoZSx0KSxMKHRoaXMseCxcImZcIikucHVzaChlKX19dXBkYXRlUXVldWUoZSl7Y29uc3QgdD1MKHRoaXMseCxcImZcIikuaW5kZXhPZihlKTstMSE9PXQmJihMKHRoaXMseCxcImZcIikuc3BsaWNlKHQsMSksTCh0aGlzLHgsXCJmXCIpLnB1c2goZSkpfX07ZnVuY3Rpb24gUyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJiFBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIGooZSwuLi50KXtpZighdC5sZW5ndGgpcmV0dXJuIGU7Y29uc3Qgbj10LnNoaWZ0KCk7cmV0dXJuIFMoZSkmJlMobikmJk9iamVjdC5lbnRyaWVzKG4pLmZvckVhY2goKChbdCxuXSk9PntpZihTKG4pKXJldHVybiBlW3RdfHwoZVt0XT17fSksaihlW3RdLG4pO2VbdF09bn0pKSxqKGUsLi4udCl9dmFyIE0sayxSLFAsSSxBPW4oNjAwNSksVD1uKDY2NTApLEg9ZnVuY3Rpb24oZSx0LG4scixvKXtpZihcIm1cIj09PXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtpZihcImFcIj09PXImJiFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD9lIT09dHx8IW86IXQuaGFzKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtyZXR1cm5cImFcIj09PXI/by5jYWxsKGUsbik6bz9vLnZhbHVlPW46dC5zZXQoZSxuKSxufSxCPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKFwiYVwiPT09biYmIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2UhPT10fHwhcjohdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtyZXR1cm5cIm1cIj09PW4/cjpcImFcIj09PW4/ci5jYWxsKGUpOnI/ci52YWx1ZTp0LmdldChlKX07az1uZXcgV2Vha01hcCxSPW5ldyBXZWFrTWFwLFA9bmV3IFdlYWtNYXAsTT1uZXcgV2Vha1NldCxJPWZ1bmN0aW9uKCl7Y29uc3QgZT1BcnJheS5mcm9tKEIodGhpcyxrLFwiZlwiKS5lbnRyaWVzKCkpLnJlZHVjZSgoKGUsdCk9PiFlfHx0WzFdLnRpbWVzdGFtcDxlWzFdLnRpbWVzdGFtcD90OmUpLG51bGwpO3JldHVybiBlP2VbMF06bnVsbH07Y29uc3QgVj1jbGFzc3tjb25zdHJ1Y3RvcihlPTNlNSx0PTEwMCl7TS5hZGQodGhpcyksay5zZXQodGhpcyx2b2lkIDApLFIuc2V0KHRoaXMsdm9pZCAwKSxQLnNldCh0aGlzLHZvaWQgMCksSCh0aGlzLGssbmV3IE1hcCxcImZcIiksSCh0aGlzLFIsZSxcImZcIiksSCh0aGlzLFAsdCxcImZcIil9Z2V0KGUpe2NvbnN0IHQ9Qih0aGlzLGssXCJmXCIpLmdldChlKTtpZighdClyZXR1cm4gbnVsbDtyZXR1cm4gRGF0ZS5ub3coKS10LnRpbWVzdGFtcDxCKHRoaXMsUixcImZcIik/dC52YWx1ZTooQih0aGlzLGssXCJmXCIpLmRlbGV0ZShlKSxudWxsKX1wdXQoZSx0KXtpZihCKHRoaXMsayxcImZcIikuc2l6ZT49Qih0aGlzLFAsXCJmXCIpKXtjb25zdCBlPUIodGhpcyxNLFwibVwiLEkpLmNhbGwodGhpcyk7bnVsbCE9ZSYmQih0aGlzLGssXCJmXCIpLmRlbGV0ZShlKX1CKHRoaXMsayxcImZcIikuc2V0KGUse3ZhbHVlOnQsdGltZXN0YW1wOkRhdGUubm93KCl9KX1yZW1vdmUoZSl7Qih0aGlzLGssXCJmXCIpLmRlbGV0ZShlKX1jbGVhcigpe0IodGhpcyxrLFwiZlwiKS5jbGVhcigpfX07dmFyIEQsWj1uKDk2MTApLCQ9bigzNzU4KSxOPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKFwiYVwiPT09biYmIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2UhPT10fHwhcjohdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtyZXR1cm5cIm1cIj09PW4/cjpcImFcIj09PW4/ci5jYWxsKGUpOnI/ci52YWx1ZTp0LmdldChlKX07Y29uc3QgRj17fTtjbGFzcyBVe2NvbnN0cnVjdG9yKGUpe0Quc2V0KHRoaXMsbmV3IFNldCksdGhpcy5faW5pdGlhbGl6ZVdvcmtmbG93cz1hc3luYyhlPXRoaXMuY29uZmlnKT0+e2NvbnN0e3dvcmtmbG93czp0fT1lO2Zvcihjb25zdCBlIGluIHQpe2lmKCF0W2VdLmRpc2FibGVBdXRvSW5pdGlhbGl6ZSl0cnl7Tih0aGlzLEQsXCJmXCIpLmhhcyhlKT9jb25zb2xlLndhcm4oYFdvcmtmbG93ICR7ZX0gYWxyZWFkeSBpbml0aWFsaXplZC5gKTooTih0aGlzLEQsXCJmXCIpLmFkZChlKSxhd2FpdCB0aGlzLmluaXRpYWxpemVXb3JrZmxvdyhlKSl9Y2F0Y2godCl7Tih0aGlzLEQsXCJmXCIpLmRlbGV0ZShlKSxjb25zb2xlLmVycm9yKGBFcnJvciByZWdpc3RlcmluZyAke2V9OmAsdCl9fX07Y29uc3QgdD1qKHt9LEYsZSk7dGhpcy5jb25maWc9dH1hc3luYyBpbml0aWFsaXplV29ya2Zsb3coZSl7Tih0aGlzLEQsXCJmXCIpLmFkZChlKX19RD1uZXcgV2Vha01hcDt2YXIgVz17ODc2OmU9Pntjb25zdHtBYm9ydENvbnRyb2xsZXI6dCxBYm9ydFNpZ25hbDpufT1cInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMDtlLmV4cG9ydHM9dCxlLmV4cG9ydHMuQWJvcnRTaWduYWw9bixlLmV4cG9ydHMuZGVmYXVsdD10fSw2MDooZSx0KT0+e3QuYnl0ZUxlbmd0aD1mdW5jdGlvbihlKXt2YXIgdD1sKGUpLG49dFswXSxyPXRbMV07cmV0dXJuIDMqKG4rcikvNC1yfSx0LnRvQnl0ZUFycmF5PWZ1bmN0aW9uKGUpe3ZhciB0LG4saT1sKGUpLGE9aVswXSxzPWlbMV0sYz1uZXcgbyhmdW5jdGlvbihlLHQsbil7cmV0dXJuIDMqKHQrbikvNC1ufSgwLGEscykpLHU9MCxmPXM+MD9hLTQ6YTtmb3Iobj0wO248ZjtuKz00KXQ9cltlLmNoYXJDb2RlQXQobildPDwxOHxyW2UuY2hhckNvZGVBdChuKzEpXTw8MTJ8cltlLmNoYXJDb2RlQXQobisyKV08PDZ8cltlLmNoYXJDb2RlQXQobiszKV0sY1t1KytdPXQ+PjE2JjI1NSxjW3UrK109dD4+OCYyNTUsY1t1KytdPTI1NSZ0O3JldHVybiAyPT09cyYmKHQ9cltlLmNoYXJDb2RlQXQobildPDwyfHJbZS5jaGFyQ29kZUF0KG4rMSldPj40LGNbdSsrXT0yNTUmdCksMT09PXMmJih0PXJbZS5jaGFyQ29kZUF0KG4pXTw8MTB8cltlLmNoYXJDb2RlQXQobisxKV08PDR8cltlLmNoYXJDb2RlQXQobisyKV0+PjIsY1t1KytdPXQ+PjgmMjU1LGNbdSsrXT0yNTUmdCksY30sdC5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWUubGVuZ3RoLG89ciUzLGk9W10sYT0xNjM4MyxsPTAsYz1yLW87bDxjO2wrPWEpaS5wdXNoKHMoZSxsLGwrYT5jP2M6bCthKSk7cmV0dXJuIDE9PT1vPyh0PWVbci0xXSxpLnB1c2goblt0Pj4yXStuW3Q8PDQmNjNdK1wiPT1cIikpOjI9PT1vJiYodD0oZVtyLTJdPDw4KStlW3ItMV0saS5wdXNoKG5bdD4+MTBdK25bdD4+NCY2M10rblt0PDwyJjYzXStcIj1cIikpLGkuam9pbihcIlwiKX07Zm9yKHZhciBuPVtdLHI9W10sbz1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LGk9XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIsYT0wO2E8NjQ7KythKW5bYV09aVthXSxyW2kuY2hhckNvZGVBdChhKV09YTtmdW5jdGlvbiBsKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQlND4wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDRcIik7dmFyIG49ZS5pbmRleE9mKFwiPVwiKTtyZXR1cm4tMT09PW4mJihuPXQpLFtuLG49PT10PzA6NC1uJTRdfWZ1bmN0aW9uIHMoZSx0LHIpe2Zvcih2YXIgbyxpLGE9W10sbD10O2w8cjtsKz0zKW89KGVbbF08PDE2JjE2NzExNjgwKSsoZVtsKzFdPDw4JjY1MjgwKSsoMjU1JmVbbCsyXSksYS5wdXNoKG5bKGk9byk+PjE4JjYzXStuW2k+PjEyJjYzXStuW2k+PjYmNjNdK25bNjMmaV0pO3JldHVybiBhLmpvaW4oXCJcIil9cltcIi1cIi5jaGFyQ29kZUF0KDApXT02MixyW1wiX1wiLmNoYXJDb2RlQXQoMCldPTYzfSw0ODU6KGUsdCxuKT0+e2NvbnN0IHI9big2MCksbz1uKDIxNSksaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcihcIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tXCIpOm51bGw7dC5CdWZmZXI9cyx0LlNsb3dCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLHMuYWxsb2MoK2UpfSx0LklOU1BFQ1RfTUFYX0JZVEVTPTUwO2NvbnN0IGE9MjE0NzQ4MzY0NztmdW5jdGlvbiBsKGUpe2lmKGU+YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJytlKydcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKTtjb25zdCB0PW5ldyBVaW50OEFycmF5KGUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YodCxzLnByb3RvdHlwZSksdH1mdW5jdGlvbiBzKGUsdCxuKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gZihlKX1yZXR1cm4gYyhlLHQsbil9ZnVuY3Rpb24gYyhlLHQsbil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJlwiXCIhPT10fHwodD1cInV0ZjhcIiksIXMuaXNFbmNvZGluZyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrdCk7Y29uc3Qgbj0wfGcoZSx0KTtsZXQgcj1sKG4pO2NvbnN0IG89ci53cml0ZShlLHQpO3JldHVybiBvIT09biYmKHI9ci5zbGljZSgwLG8pKSxyfShlLHQpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhlKSlyZXR1cm4gZnVuY3Rpb24oZSl7aWYoWShlLFVpbnQ4QXJyYXkpKXtjb25zdCB0PW5ldyBVaW50OEFycmF5KGUpO3JldHVybiBwKHQuYnVmZmVyLHQuYnl0ZU9mZnNldCx0LmJ5dGVMZW5ndGgpfXJldHVybiBkKGUpfShlKTtpZihudWxsPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSBcIit0eXBlb2YgZSk7aWYoWShlLEFycmF5QnVmZmVyKXx8ZSYmWShlLmJ1ZmZlcixBcnJheUJ1ZmZlcikpcmV0dXJuIHAoZSx0LG4pO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciYmKFkoZSxTaGFyZWRBcnJheUJ1ZmZlcil8fGUmJlkoZS5idWZmZXIsU2hhcmVkQXJyYXlCdWZmZXIpKSlyZXR1cm4gcChlLHQsbik7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtjb25zdCByPWUudmFsdWVPZiYmZS52YWx1ZU9mKCk7aWYobnVsbCE9ciYmciE9PWUpcmV0dXJuIHMuZnJvbShyLHQsbik7Y29uc3Qgbz1mdW5jdGlvbihlKXtpZihzLmlzQnVmZmVyKGUpKXtjb25zdCB0PTB8aChlLmxlbmd0aCksbj1sKHQpO3JldHVybiAwPT09bi5sZW5ndGh8fGUuY29weShuLDAsMCx0KSxufXJldHVybiB2b2lkIDAhPT1lLmxlbmd0aD9cIm51bWJlclwiIT10eXBlb2YgZS5sZW5ndGh8fEsoZS5sZW5ndGgpP2woMCk6ZChlKTpcIkJ1ZmZlclwiPT09ZS50eXBlJiZBcnJheS5pc0FycmF5KGUuZGF0YSk/ZChlLmRhdGEpOnZvaWQgMH0oZSk7aWYobylyZXR1cm4gbztpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGVbU3ltYm9sLnRvUHJpbWl0aXZlXSlyZXR1cm4gcy5mcm9tKGVbU3ltYm9sLnRvUHJpbWl0aXZlXShcInN0cmluZ1wiKSx0LG4pO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSBcIit0eXBlb2YgZSl9ZnVuY3Rpb24gdShlKXtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInK2UrJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIHUoZSksbChlPDA/MDowfGgoZSkpfWZ1bmN0aW9uIGQoZSl7Y29uc3QgdD1lLmxlbmd0aDwwPzA6MHxoKGUubGVuZ3RoKSxuPWwodCk7Zm9yKGxldCByPTA7cjx0O3IrPTEpbltyXT0yNTUmZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBwKGUsdCxuKXtpZih0PDB8fGUuYnl0ZUxlbmd0aDx0KXRocm93IG5ldyBSYW5nZUVycm9yKCdcIm9mZnNldFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKGUuYnl0ZUxlbmd0aDx0KyhufHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJsZW5ndGhcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtsZXQgcjtyZXR1cm4gcj12b2lkIDA9PT10JiZ2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KGUpOnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkoZSx0KTpuZXcgVWludDhBcnJheShlLHQsbiksT2JqZWN0LnNldFByb3RvdHlwZU9mKHIscy5wcm90b3R5cGUpLHJ9ZnVuY3Rpb24gaChlKXtpZihlPj1hKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweFwiK2EudG9TdHJpbmcoMTYpK1wiIGJ5dGVzXCIpO3JldHVybiAwfGV9ZnVuY3Rpb24gZyhlLHQpe2lmKHMuaXNCdWZmZXIoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8WShlLEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoO2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGUpO2NvbnN0IG49ZS5sZW5ndGgscj1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFyJiYwPT09bilyZXR1cm4gMDtsZXQgbz0hMTtmb3IoOzspc3dpdGNoKHQpe2Nhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIG47Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIHooZSkubGVuZ3RoO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiAyKm47Y2FzZVwiaGV4XCI6cmV0dXJuIG4+Pj4xO2Nhc2VcImJhc2U2NFwiOnJldHVybiBHKGUpLmxlbmd0aDtkZWZhdWx0OmlmKG8pcmV0dXJuIHI/LTE6eihlKS5sZW5ndGg7dD0oXCJcIit0KS50b0xvd2VyQ2FzZSgpLG89ITB9fWZ1bmN0aW9uIHYoZSx0LG4pe2xldCByPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVyblwiXCI7aWYoKHZvaWQgMD09PW58fG4+dGhpcy5sZW5ndGgpJiYobj10aGlzLmxlbmd0aCksbjw9MClyZXR1cm5cIlwiO2lmKChuPj4+PTApPD0odD4+Pj0wKSlyZXR1cm5cIlwiO2ZvcihlfHwoZT1cInV0ZjhcIik7Oylzd2l0Y2goZSl7Y2FzZVwiaGV4XCI6cmV0dXJuIGsodGhpcyx0LG4pO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBFKHRoaXMsdCxuKTtjYXNlXCJhc2NpaVwiOnJldHVybiBqKHRoaXMsdCxuKTtjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gTSh0aGlzLHQsbik7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIEwodGhpcyx0LG4pO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiBSKHRoaXMsdCxuKTtkZWZhdWx0OmlmKHIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2UpO2U9KGUrXCJcIikudG9Mb3dlckNhc2UoKSxyPSEwfX1mdW5jdGlvbiBtKGUsdCxuKXtjb25zdCByPWVbdF07ZVt0XT1lW25dLGVbbl09cn1mdW5jdGlvbiBDKGUsdCxuLHIsbyl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuPyhyPW4sbj0wKTpuPjIxNDc0ODM2NDc/bj0yMTQ3NDgzNjQ3Om48LTIxNDc0ODM2NDgmJihuPS0yMTQ3NDgzNjQ4KSxLKG49K24pJiYobj1vPzA6ZS5sZW5ndGgtMSksbjwwJiYobj1lLmxlbmd0aCtuKSxuPj1lLmxlbmd0aCl7aWYobylyZXR1cm4tMTtuPWUubGVuZ3RoLTF9ZWxzZSBpZihuPDApe2lmKCFvKXJldHVybi0xO249MH1pZihcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9cy5mcm9tKHQscikpLHMuaXNCdWZmZXIodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTp5KGUsdCxuLHIsbyk7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpcmV0dXJuIHQmPTI1NSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP28/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxuKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxuKTp5KGUsW3RdLG4scixvKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyXCIpfWZ1bmN0aW9uIHkoZSx0LG4scixvKXtsZXQgaSxhPTEsbD1lLmxlbmd0aCxzPXQubGVuZ3RoO2lmKHZvaWQgMCE9PXImJihcInVjczJcIj09PShyPVN0cmluZyhyKS50b0xvd2VyQ2FzZSgpKXx8XCJ1Y3MtMlwiPT09cnx8XCJ1dGYxNmxlXCI9PT1yfHxcInV0Zi0xNmxlXCI9PT1yKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTthPTIsbC89MixzLz0yLG4vPTJ9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiAxPT09YT9lW3RdOmUucmVhZFVJbnQxNkJFKHQqYSl9aWYobyl7bGV0IHI9LTE7Zm9yKGk9bjtpPGw7aSsrKWlmKGMoZSxpKT09PWModCwtMT09PXI/MDppLXIpKXtpZigtMT09PXImJihyPWkpLGktcisxPT09cylyZXR1cm4gciphfWVsc2UtMSE9PXImJihpLT1pLXIpLHI9LTF9ZWxzZSBmb3IobitzPmwmJihuPWwtcyksaT1uO2k+PTA7aS0tKXtsZXQgbj0hMDtmb3IobGV0IHI9MDtyPHM7cisrKWlmKGMoZSxpK3IpIT09Yyh0LHIpKXtuPSExO2JyZWFrfWlmKG4pcmV0dXJuIGl9cmV0dXJuLTF9ZnVuY3Rpb24gdyhlLHQsbixyKXtuPU51bWJlcihuKXx8MDtjb25zdCBvPWUubGVuZ3RoLW47cj8ocj1OdW1iZXIocikpPm8mJihyPW8pOnI9bztjb25zdCBpPXQubGVuZ3RoO2xldCBhO2ZvcihyPmkvMiYmKHI9aS8yKSxhPTA7YTxyOysrYSl7Y29uc3Qgcj1wYXJzZUludCh0LnN1YnN0cigyKmEsMiksMTYpO2lmKEsocikpcmV0dXJuIGE7ZVtuK2FdPXJ9cmV0dXJuIGF9ZnVuY3Rpb24gYihlLHQsbixyKXtyZXR1cm4gcSh6KHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIHgoZSx0LG4scil7cmV0dXJuIHEoZnVuY3Rpb24oZSl7Y29uc3QgdD1bXTtmb3IobGV0IG49MDtuPGUubGVuZ3RoOysrbil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChuKSk7cmV0dXJuIHR9KHQpLGUsbixyKX1mdW5jdGlvbiBfKGUsdCxuLHIpe3JldHVybiBxKEcodCksZSxuLHIpfWZ1bmN0aW9uIE8oZSx0LG4scil7cmV0dXJuIHEoZnVuY3Rpb24oZSx0KXtsZXQgbixyLG87Y29uc3QgaT1bXTtmb3IobGV0IGE9MDthPGUubGVuZ3RoJiYhKCh0LT0yKTwwKTsrK2Epbj1lLmNoYXJDb2RlQXQoYSkscj1uPj44LG89biUyNTYsaS5wdXNoKG8pLGkucHVzaChyKTtyZXR1cm4gaX0odCxlLmxlbmd0aC1uKSxlLG4scil9ZnVuY3Rpb24gTChlLHQsbil7cmV0dXJuIDA9PT10JiZuPT09ZS5sZW5ndGg/ci5mcm9tQnl0ZUFycmF5KGUpOnIuZnJvbUJ5dGVBcnJheShlLnNsaWNlKHQsbikpfWZ1bmN0aW9uIEUoZSx0LG4pe249TWF0aC5taW4oZS5sZW5ndGgsbik7Y29uc3Qgcj1bXTtsZXQgbz10O2Zvcig7bzxuOyl7Y29uc3QgdD1lW29dO2xldCBpPW51bGwsYT10PjIzOT80OnQ+MjIzPzM6dD4xOTE/MjoxO2lmKG8rYTw9bil7bGV0IG4scixsLHM7c3dpdGNoKGEpe2Nhc2UgMTp0PDEyOCYmKGk9dCk7YnJlYWs7Y2FzZSAyOm49ZVtvKzFdLDEyOD09KDE5MiZuKSYmKHM9KDMxJnQpPDw2fDYzJm4scz4xMjcmJihpPXMpKTticmVhaztjYXNlIDM6bj1lW28rMV0scj1lW28rMl0sMTI4PT0oMTkyJm4pJiYxMjg9PSgxOTImcikmJihzPSgxNSZ0KTw8MTJ8KDYzJm4pPDw2fDYzJnIscz4yMDQ3JiYoczw1NTI5Nnx8cz41NzM0MykmJihpPXMpKTticmVhaztjYXNlIDQ6bj1lW28rMV0scj1lW28rMl0sbD1lW28rM10sMTI4PT0oMTkyJm4pJiYxMjg9PSgxOTImcikmJjEyOD09KDE5MiZsKSYmKHM9KDE1JnQpPDwxOHwoNjMmbik8PDEyfCg2MyZyKTw8Nnw2MyZsLHM+NjU1MzUmJnM8MTExNDExMiYmKGk9cykpfX1udWxsPT09aT8oaT02NTUzMyxhPTEpOmk+NjU1MzUmJihpLT02NTUzNixyLnB1c2goaT4+PjEwJjEwMjN8NTUyOTYpLGk9NTYzMjB8MTAyMyZpKSxyLnB1c2goaSksbys9YX1yZXR1cm4gZnVuY3Rpb24oZSl7Y29uc3QgdD1lLmxlbmd0aDtpZih0PD1TKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTtsZXQgbj1cIlwiLHI9MDtmb3IoO3I8dDspbis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShyLHIrPVMpKTtyZXR1cm4gbn0ocil9dC5rTWF4TGVuZ3RoPWEscy5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uKCl7dHJ5e2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkoMSksdD17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih0LFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KSw0Mj09PWUuZm9vKCl9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLHMuVFlQRURfQVJSQVlfU1VQUE9SVHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIGNvbnNvbGV8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGNvbnNvbGUuZXJyb3J8fGNvbnNvbGUuZXJyb3IoXCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC5cIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMucHJvdG90eXBlLFwicGFyZW50XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYocy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMucHJvdG90eXBlLFwib2Zmc2V0XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYocy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLHMucG9vbFNpemU9ODE5MixzLmZyb209ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBjKGUsdCxuKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mKHMucHJvdG90eXBlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YocyxVaW50OEFycmF5KSxzLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB1KGUpLGU8PTA/bChlKTp2b2lkIDAhPT10P1wic3RyaW5nXCI9PXR5cGVvZiBuP2woZSkuZmlsbCh0LG4pOmwoZSkuZmlsbCh0KTpsKGUpfShlLHQsbil9LHMuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSl9LHMuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBmKGUpfSxzLmlzQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiYhMD09PWUuX2lzQnVmZmVyJiZlIT09cy5wcm90b3R5cGV9LHMuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKFkoZSxVaW50OEFycmF5KSYmKGU9cy5mcm9tKGUsZS5vZmZzZXQsZS5ieXRlTGVuZ3RoKSksWSh0LFVpbnQ4QXJyYXkpJiYodD1zLmZyb20odCx0Lm9mZnNldCx0LmJ5dGVMZW5ndGgpKSwhcy5pc0J1ZmZlcihlKXx8IXMuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiYnVmMVwiLCBcImJ1ZjJcIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKGU9PT10KXJldHVybiAwO2xldCBuPWUubGVuZ3RoLHI9dC5sZW5ndGg7Zm9yKGxldCBvPTAsaT1NYXRoLm1pbihuLHIpO288aTsrK28paWYoZVtvXSE9PXRbb10pe249ZVtvXSxyPXRbb107YnJlYWt9cmV0dXJuIG48cj8tMTpyPG4/MTowfSxzLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxzLmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gcy5hbGxvYygwKTtsZXQgbjtpZih2b2lkIDA9PT10KWZvcih0PTAsbj0wO248ZS5sZW5ndGg7KytuKXQrPWVbbl0ubGVuZ3RoO2NvbnN0IHI9cy5hbGxvY1Vuc2FmZSh0KTtsZXQgbz0wO2ZvcihuPTA7bjxlLmxlbmd0aDsrK24pe2xldCB0PWVbbl07aWYoWSh0LFVpbnQ4QXJyYXkpKW8rdC5sZW5ndGg+ci5sZW5ndGg/KHMuaXNCdWZmZXIodCl8fCh0PXMuZnJvbSh0KSksdC5jb3B5KHIsbykpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKHIsdCxvKTtlbHNle2lmKCFzLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO3QuY29weShyLG8pfW8rPXQubGVuZ3RofXJldHVybiByfSxzLmJ5dGVMZW5ndGg9ZyxzLnByb3RvdHlwZS5faXNCdWZmZXI9ITAscy5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLmxlbmd0aDtpZihlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0c1wiKTtmb3IobGV0IHQ9MDt0PGU7dCs9MiltKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXtjb25zdCBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzXCIpO2ZvcihsZXQgdD0wO3Q8ZTt0Kz00KW0odGhpcyx0LHQrMyksbSh0aGlzLHQrMSx0KzIpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXtjb25zdCBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzXCIpO2ZvcihsZXQgdD0wO3Q8ZTt0Kz04KW0odGhpcyx0LHQrNyksbSh0aGlzLHQrMSx0KzYpLG0odGhpcyx0KzIsdCs1KSxtKHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LHMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLmxlbmd0aDtyZXR1cm4gMD09PWU/XCJcIjowPT09YXJndW1lbnRzLmxlbmd0aD9FKHRoaXMsMCxlKTp2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0scy5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9cy5wcm90b3R5cGUudG9TdHJpbmcscy5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCFzLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO3JldHVybiB0aGlzPT09ZXx8MD09PXMuY29tcGFyZSh0aGlzLGUpfSxzLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7bGV0IGU9XCJcIjtjb25zdCBuPXQuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIGU9dGhpcy50b1N0cmluZyhcImhleFwiLDAsbikucmVwbGFjZSgvKC57Mn0pL2csXCIkMSBcIikudHJpbSgpLHRoaXMubGVuZ3RoPm4mJihlKz1cIiAuLi4gXCIpLFwiPEJ1ZmZlciBcIitlK1wiPlwifSxpJiYocy5wcm90b3R5cGVbaV09cy5wcm90b3R5cGUuaW5zcGVjdCkscy5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlLHQsbixyLG8pe2lmKFkoZSxVaW50OEFycmF5KSYmKGU9cy5mcm9tKGUsZS5vZmZzZXQsZS5ieXRlTGVuZ3RoKSksIXMuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidGFyZ2V0XCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBlKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PW8mJihvPXRoaXMubGVuZ3RoKSx0PDB8fG4+ZS5sZW5ndGh8fHI8MHx8bz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm91dCBvZiByYW5nZSBpbmRleFwiKTtpZihyPj1vJiZ0Pj1uKXJldHVybiAwO2lmKHI+PW8pcmV0dXJuLTE7aWYodD49bilyZXR1cm4gMTtpZih0aGlzPT09ZSlyZXR1cm4gMDtsZXQgaT0obz4+Pj0wKS0ocj4+Pj0wKSxhPShuPj4+PTApLSh0Pj4+PTApO2NvbnN0IGw9TWF0aC5taW4oaSxhKSxjPXRoaXMuc2xpY2UocixvKSx1PWUuc2xpY2UodCxuKTtmb3IobGV0IGU9MDtlPGw7KytlKWlmKGNbZV0hPT11W2VdKXtpPWNbZV0sYT11W2VdO2JyZWFrfXJldHVybiBpPGE/LTE6YTxpPzE6MH0scy5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGUsdCxuKX0scy5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIEModGhpcyxlLHQsbiwhMCl9LHMucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gQyh0aGlzLGUsdCxuLCExKX0scy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LG4scil7aWYodm9pZCAwPT09dClyPVwidXRmOFwiLG49dGhpcy5sZW5ndGgsdD0wO2Vsc2UgaWYodm9pZCAwPT09biYmXCJzdHJpbmdcIj09dHlwZW9mIHQpcj10LG49dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcihcIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkXCIpO3Q+Pj49MCxpc0Zpbml0ZShuKT8obj4+Pj0wLHZvaWQgMD09PXImJihyPVwidXRmOFwiKSk6KHI9bixuPXZvaWQgMCl9Y29uc3Qgbz10aGlzLmxlbmd0aC10O2lmKCh2b2lkIDA9PT1ufHxuPm8pJiYobj1vKSxlLmxlbmd0aD4wJiYobjwwfHx0PDApfHx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHNcIik7cnx8KHI9XCJ1dGY4XCIpO2xldCBpPSExO2Zvcig7Oylzd2l0Y2gocil7Y2FzZVwiaGV4XCI6cmV0dXJuIHcodGhpcyxlLHQsbik7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIGIodGhpcyxlLHQsbik7Y2FzZVwiYXNjaWlcIjpjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4geCh0aGlzLGUsdCxuKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gXyh0aGlzLGUsdCxuKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gTyh0aGlzLGUsdCxuKTtkZWZhdWx0OmlmKGkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK3IpO3I9KFwiXCIrcikudG9Mb3dlckNhc2UoKSxpPSEwfX0scy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJCdWZmZXJcIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2NvbnN0IFM9NDA5NjtmdW5jdGlvbiBqKGUsdCxuKXtsZXQgcj1cIlwiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKGxldCBvPXQ7bzxuOysrbylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZlW29dKTtyZXR1cm4gcn1mdW5jdGlvbiBNKGUsdCxuKXtsZXQgcj1cIlwiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKGxldCBvPXQ7bzxuOysrbylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbb10pO3JldHVybiByfWZ1bmN0aW9uIGsoZSx0LG4pe2NvbnN0IHI9ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIW58fG48MHx8bj5yKSYmKG49cik7bGV0IG89XCJcIjtmb3IobGV0IHI9dDtyPG47KytyKW8rPVhbZVtyXV07cmV0dXJuIG99ZnVuY3Rpb24gUihlLHQsbil7Y29uc3Qgcj1lLnNsaWNlKHQsbik7bGV0IG89XCJcIjtmb3IobGV0IGU9MDtlPHIubGVuZ3RoLTE7ZSs9MilvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHJbZV0rMjU2KnJbZSsxXSk7cmV0dXJuIG99ZnVuY3Rpb24gUChlLHQsbil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvZmZzZXQgaXMgbm90IHVpbnRcIik7aWYoZSt0Pm4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoXCIpfWZ1bmN0aW9uIEkoZSx0LG4scixvLGkpe2lmKCFzLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+b3x8dDxpKXRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBBKGUsdCxuLHIsbyl7Tih0LHIsbyxlLG4sNyk7bGV0IGk9TnVtYmVyKHQmQmlnSW50KDQyOTQ5NjcyOTUpKTtlW24rK109aSxpPj49OCxlW24rK109aSxpPj49OCxlW24rK109aSxpPj49OCxlW24rK109aTtsZXQgYT1OdW1iZXIodD4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiBlW24rK109YSxhPj49OCxlW24rK109YSxhPj49OCxlW24rK109YSxhPj49OCxlW24rK109YSxufWZ1bmN0aW9uIFQoZSx0LG4scixvKXtOKHQscixvLGUsbiw3KTtsZXQgaT1OdW1iZXIodCZCaWdJbnQoNDI5NDk2NzI5NSkpO2Vbbis3XT1pLGk+Pj04LGVbbis2XT1pLGk+Pj04LGVbbis1XT1pLGk+Pj04LGVbbis0XT1pO2xldCBhPU51bWJlcih0Pj5CaWdJbnQoMzIpJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7cmV0dXJuIGVbbiszXT1hLGE+Pj04LGVbbisyXT1hLGE+Pj04LGVbbisxXT1hLGE+Pj04LGVbbl09YSxuKzh9ZnVuY3Rpb24gSChlLHQsbixyLG8saSl7aWYobityPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBCKGUsdCxuLHIsaSl7cmV0dXJuIHQ9K3Qsbj4+Pj0wLGl8fEgoZSwwLG4sNCksby53cml0ZShlLHQsbixyLDIzLDQpLG4rNH1mdW5jdGlvbiBWKGUsdCxuLHIsaSl7cmV0dXJuIHQ9K3Qsbj4+Pj0wLGl8fEgoZSwwLG4sOCksby53cml0ZShlLHQsbixyLDUyLDgpLG4rOH1zLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe2NvbnN0IG49dGhpcy5sZW5ndGg7KGU9fn5lKTwwPyhlKz1uKTwwJiYoZT0wKTplPm4mJihlPW4pLCh0PXZvaWQgMD09PXQ/bjp+fnQpPDA/KHQrPW4pPDAmJih0PTApOnQ+biYmKHQ9biksdDxlJiYodD1lKTtjb25zdCByPXRoaXMuc3ViYXJyYXkoZSx0KTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHIscy5wcm90b3R5cGUpLHJ9LHMucHJvdG90eXBlLnJlYWRVaW50TEU9cy5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQsbil7ZT4+Pj0wLHQ+Pj49MCxufHxQKGUsdCx0aGlzLmxlbmd0aCk7bGV0IHI9dGhpc1tlXSxvPTEsaT0wO2Zvcig7KytpPHQmJihvKj0yNTYpOylyKz10aGlzW2UraV0qbztyZXR1cm4gcn0scy5wcm90b3R5cGUucmVhZFVpbnRCRT1zLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGUsdCxuKXtlPj4+PTAsdD4+Pj0wLG58fFAoZSx0LHRoaXMubGVuZ3RoKTtsZXQgcj10aGlzW2UrLS10XSxvPTE7Zm9yKDt0PjAmJihvKj0yNTYpOylyKz10aGlzW2UrLS10XSpvO3JldHVybiByfSxzLnByb3RvdHlwZS5yZWFkVWludDg9cy5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxQKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0scy5wcm90b3R5cGUucmVhZFVpbnQxNkxFPXMucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8UChlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxzLnByb3RvdHlwZS5yZWFkVWludDE2QkU9cy5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxQKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LHMucHJvdG90eXBlLnJlYWRVaW50MzJMRT1zLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxzLnByb3RvdHlwZS5yZWFkVWludDMyQkU9cy5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxQKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0scy5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NExFPUooKGZ1bmN0aW9uKGUpe0YoZT4+Pj0wLFwib2Zmc2V0XCIpO2NvbnN0IHQ9dGhpc1tlXSxuPXRoaXNbZSs3XTt2b2lkIDAhPT10JiZ2b2lkIDAhPT1ufHxVKGUsdGhpcy5sZW5ndGgtOCk7Y29uc3Qgcj10KzI1Nip0aGlzWysrZV0rNjU1MzYqdGhpc1srK2VdK3RoaXNbKytlXSoyKioyNCxvPXRoaXNbKytlXSsyNTYqdGhpc1srK2VdKzY1NTM2KnRoaXNbKytlXStuKjIqKjI0O3JldHVybiBCaWdJbnQocikrKEJpZ0ludChvKTw8QmlnSW50KDMyKSl9KSkscy5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NEJFPUooKGZ1bmN0aW9uKGUpe0YoZT4+Pj0wLFwib2Zmc2V0XCIpO2NvbnN0IHQ9dGhpc1tlXSxuPXRoaXNbZSs3XTt2b2lkIDAhPT10JiZ2b2lkIDAhPT1ufHxVKGUsdGhpcy5sZW5ndGgtOCk7Y29uc3Qgcj10KjIqKjI0KzY1NTM2KnRoaXNbKytlXSsyNTYqdGhpc1srK2VdK3RoaXNbKytlXSxvPXRoaXNbKytlXSoyKioyNCs2NTUzNip0aGlzWysrZV0rMjU2KnRoaXNbKytlXStuO3JldHVybihCaWdJbnQocik8PEJpZ0ludCgzMikpK0JpZ0ludChvKX0pKSxzLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LG4pe2U+Pj49MCx0Pj4+PTAsbnx8UChlLHQsdGhpcy5sZW5ndGgpO2xldCByPXRoaXNbZV0sbz0xLGk9MDtmb3IoOysraTx0JiYobyo9MjU2KTspcis9dGhpc1tlK2ldKm87cmV0dXJuIG8qPTEyOCxyPj1vJiYoci09TWF0aC5wb3coMiw4KnQpKSxyfSxzLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oZSx0LG4pe2U+Pj49MCx0Pj4+PTAsbnx8UChlLHQsdGhpcy5sZW5ndGgpO2xldCByPXQsbz0xLGk9dGhpc1tlKy0tcl07Zm9yKDtyPjAmJihvKj0yNTYpOylpKz10aGlzW2UrLS1yXSpvO3JldHVybiBvKj0xMjgsaT49byYmKGktPU1hdGgucG93KDIsOCp0KSksaX0scy5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tlXT8tMSooMjU1LXRoaXNbZV0rMSk6dGhpc1tlXX0scy5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXtlPj4+PTAsdHx8UChlLDIsdGhpcy5sZW5ndGgpO2NvbnN0IG49dGhpc1tlXXx0aGlzW2UrMV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LHMucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7ZT4+Pj0wLHR8fFAoZSwyLHRoaXMubGVuZ3RoKTtjb25zdCBuPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxzLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8UChlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0scy5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdPDwyNHx0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM119LHMucHJvdG90eXBlLnJlYWRCaWdJbnQ2NExFPUooKGZ1bmN0aW9uKGUpe0YoZT4+Pj0wLFwib2Zmc2V0XCIpO2NvbnN0IHQ9dGhpc1tlXSxuPXRoaXNbZSs3XTt2b2lkIDAhPT10JiZ2b2lkIDAhPT1ufHxVKGUsdGhpcy5sZW5ndGgtOCk7Y29uc3Qgcj10aGlzW2UrNF0rMjU2KnRoaXNbZSs1XSs2NTUzNip0aGlzW2UrNl0rKG48PDI0KTtyZXR1cm4oQmlnSW50KHIpPDxCaWdJbnQoMzIpKStCaWdJbnQodCsyNTYqdGhpc1srK2VdKzY1NTM2KnRoaXNbKytlXSt0aGlzWysrZV0qMioqMjQpfSkpLHMucHJvdG90eXBlLnJlYWRCaWdJbnQ2NEJFPUooKGZ1bmN0aW9uKGUpe0YoZT4+Pj0wLFwib2Zmc2V0XCIpO2NvbnN0IHQ9dGhpc1tlXSxuPXRoaXNbZSs3XTt2b2lkIDAhPT10JiZ2b2lkIDAhPT1ufHxVKGUsdGhpcy5sZW5ndGgtOCk7Y29uc3Qgcj0odDw8MjQpKzY1NTM2KnRoaXNbKytlXSsyNTYqdGhpc1srK2VdK3RoaXNbKytlXTtyZXR1cm4oQmlnSW50KHIpPDxCaWdJbnQoMzIpKStCaWdJbnQodGhpc1srK2VdKjIqKjI0KzY1NTM2KnRoaXNbKytlXSsyNTYqdGhpc1srK2VdK24pfSkpLHMucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxQKGUsNCx0aGlzLmxlbmd0aCksby5yZWFkKHRoaXMsZSwhMCwyMyw0KX0scy5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSw0LHRoaXMubGVuZ3RoKSxvLnJlYWQodGhpcyxlLCExLDIzLDQpfSxzLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSw4LHRoaXMubGVuZ3RoKSxvLnJlYWQodGhpcyxlLCEwLDUyLDgpfSxzLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSw4LHRoaXMubGVuZ3RoKSxvLnJlYWQodGhpcyxlLCExLDUyLDgpfSxzLnByb3RvdHlwZS53cml0ZVVpbnRMRT1zLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXtlPStlLHQ+Pj49MCxuPj4+PTAscnx8SSh0aGlzLGUsdCxuLE1hdGgucG93KDIsOCpuKS0xLDApO2xldCBvPTEsaT0wO2Zvcih0aGlzW3RdPTI1NSZlOysraTxuJiYobyo9MjU2KTspdGhpc1t0K2ldPWUvbyYyNTU7cmV0dXJuIHQrbn0scy5wcm90b3R5cGUud3JpdGVVaW50QkU9cy5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LG4scil7ZT0rZSx0Pj4+PTAsbj4+Pj0wLHJ8fEkodGhpcyxlLHQsbixNYXRoLnBvdygyLDgqbiktMSwwKTtsZXQgbz1uLTEsaT0xO2Zvcih0aGlzW3Qrb109MjU1JmU7LS1vPj0wJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrbn0scy5wcm90b3R5cGUud3JpdGVVaW50OD1zLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCwxLDI1NSwwKSx0aGlzW3RdPTI1NSZlLHQrMX0scy5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1zLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCwyLDY1NTM1LDApLHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHQrMn0scy5wcm90b3R5cGUud3JpdGVVaW50MTZCRT1zLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCwyLDY1NTM1LDApLHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlLHQrMn0scy5wcm90b3R5cGUud3JpdGVVaW50MzJMRT1zLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksdGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlLHQrNH0scy5wcm90b3R5cGUud3JpdGVVaW50MzJCRT1zLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksdGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlLHQrNH0scy5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRMRT1KKChmdW5jdGlvbihlLHQ9MCl7cmV0dXJuIEEodGhpcyxlLHQsQmlnSW50KDApLEJpZ0ludChcIjB4ZmZmZmZmZmZmZmZmZmZmZlwiKSl9KSkscy5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRCRT1KKChmdW5jdGlvbihlLHQ9MCl7cmV0dXJuIFQodGhpcyxlLHQsQmlnSW50KDApLEJpZ0ludChcIjB4ZmZmZmZmZmZmZmZmZmZmZlwiKSl9KSkscy5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHQ+Pj49MCwhcil7Y29uc3Qgcj1NYXRoLnBvdygyLDgqbi0xKTtJKHRoaXMsZSx0LG4sci0xLC1yKX1sZXQgbz0wLGk9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPG4mJihpKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9pPj4wKS1hJjI1NTtyZXR1cm4gdCtufSxzLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9K2UsdD4+Pj0wLCFyKXtjb25zdCByPU1hdGgucG93KDIsOCpuLTEpO0kodGhpcyxlLHQsbixyLTEsLXIpfWxldCBvPW4tMSxpPTEsYT0wO2Zvcih0aGlzW3Qrb109MjU1JmU7LS1vPj0wJiYoaSo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvKzFdJiYoYT0xKSx0aGlzW3Qrb109KGUvaT4+MCktYSYyNTU7cmV0dXJuIHQrbn0scy5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCwxLDEyNywtMTI4KSxlPDAmJihlPTI1NStlKzEpLHRoaXNbdF09MjU1JmUsdCsxfSxzLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHQ+Pj49MCxufHxJKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSx0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0KzJ9LHMucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdD4+Pj0wLG58fEkodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlLHQrMn0scy5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzNdPWU+Pj4yNCx0KzR9LHMucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdD4+Pj0wLG58fEkodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSx0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUsdCs0fSxzLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEU9SigoZnVuY3Rpb24oZSx0PTApe3JldHVybiBBKHRoaXMsZSx0LC1CaWdJbnQoXCIweDgwMDAwMDAwMDAwMDAwMDBcIiksQmlnSW50KFwiMHg3ZmZmZmZmZmZmZmZmZmZmXCIpKX0pKSxzLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0QkU9SigoZnVuY3Rpb24oZSx0PTApe3JldHVybiBUKHRoaXMsZSx0LC1CaWdJbnQoXCIweDgwMDAwMDAwMDAwMDAwMDBcIiksQmlnSW50KFwiMHg3ZmZmZmZmZmZmZmZmZmZmXCIpKX0pKSxzLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBCKHRoaXMsZSx0LCEwLG4pfSxzLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBCKHRoaXMsZSx0LCExLG4pfSxzLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gVih0aGlzLGUsdCwhMCxuKX0scy5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFYodGhpcyxlLHQsITEsbil9LHMucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LG4scil7aWYoIXMuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlclwiKTtpZihufHwobj0wKSxyfHwwPT09cnx8KHI9dGhpcy5sZW5ndGgpLHQ+PWUubGVuZ3RoJiYodD1lLmxlbmd0aCksdHx8KHQ9MCkscj4wJiZyPG4mJihyPW4pLHI9PT1uKXJldHVybiAwO2lmKDA9PT1lLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHNcIik7aWYobjwwfHxuPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kc1wiKTtyPnRoaXMubGVuZ3RoJiYocj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxyLW4mJihyPWUubGVuZ3RoLXQrbik7Y29uc3Qgbz1yLW47cmV0dXJuIHRoaXM9PT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluP3RoaXMuY29weVdpdGhpbih0LG4scik6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZSx0aGlzLnN1YmFycmF5KG4sciksdCksb30scy5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQsbixyKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQ/KHI9dCx0PTAsbj10aGlzLmxlbmd0aCk6XCJzdHJpbmdcIj09dHlwZW9mIG4mJihyPW4sbj10aGlzLmxlbmd0aCksdm9pZCAwIT09ciYmXCJzdHJpbmdcIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmdcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHImJiFzLmlzRW5jb2RpbmcocikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK3IpO2lmKDE9PT1lLmxlbmd0aCl7Y29uc3QgdD1lLmNoYXJDb2RlQXQoMCk7KFwidXRmOFwiPT09ciYmdDwxMjh8fFwibGF0aW4xXCI9PT1yKSYmKGU9dCl9fWVsc2VcIm51bWJlclwiPT10eXBlb2YgZT9lJj0yNTU6XCJib29sZWFuXCI9PXR5cGVvZiBlJiYoZT1OdW1iZXIoZSkpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk91dCBvZiByYW5nZSBpbmRleFwiKTtpZihuPD10KXJldHVybiB0aGlzO2xldCBvO2lmKHQ+Pj49MCxuPXZvaWQgMD09PW4/dGhpcy5sZW5ndGg6bj4+PjAsZXx8KGU9MCksXCJudW1iZXJcIj09dHlwZW9mIGUpZm9yKG89dDtvPG47KytvKXRoaXNbb109ZTtlbHNle2NvbnN0IGk9cy5pc0J1ZmZlcihlKT9lOnMuZnJvbShlLHIpLGE9aS5sZW5ndGg7aWYoMD09PWEpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlIFwiJytlKydcIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCBcInZhbHVlXCInKTtmb3Iobz0wO288bi10Oysrbyl0aGlzW28rdF09aVtvJWFdfXJldHVybiB0aGlzfTtjb25zdCBEPXt9O2Z1bmN0aW9uIFooZSx0LG4pe0RbZV09Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIm1lc3NhZ2VcIix7dmFsdWU6dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdGhpcy5uYW1lPWAke3RoaXMubmFtZX0gWyR7ZX1dYCx0aGlzLnN0YWNrLGRlbGV0ZSB0aGlzLm5hbWV9Z2V0IGNvZGUoKXtyZXR1cm4gZX1zZXQgY29kZShlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImNvZGVcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZSx3cml0YWJsZTohMH0pfXRvU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy5uYW1lfSBbJHtlfV06ICR7dGhpcy5tZXNzYWdlfWB9fX1mdW5jdGlvbiAkKGUpe2xldCB0PVwiXCIsbj1lLmxlbmd0aDtjb25zdCByPVwiLVwiPT09ZVswXT8xOjA7Zm9yKDtuPj1yKzQ7bi09Myl0PWBfJHtlLnNsaWNlKG4tMyxuKX0ke3R9YDtyZXR1cm5gJHtlLnNsaWNlKDAsbil9JHt0fWB9ZnVuY3Rpb24gTihlLHQsbixyLG8saSl7aWYoZT5ufHxlPHQpe2NvbnN0IHI9XCJiaWdpbnRcIj09dHlwZW9mIHQ/XCJuXCI6XCJcIjtsZXQgbzt0aHJvdyBvPWk+Mz8wPT09dHx8dD09PUJpZ0ludCgwKT9gPj0gMCR7cn0gYW5kIDwgMiR7cn0gKiogJHs4KihpKzEpfSR7cn1gOmA+PSAtKDIke3J9ICoqICR7OCooaSsxKS0xfSR7cn0pIGFuZCA8IDIgKiogJHs4KihpKzEpLTF9JHtyfWA6YD49ICR7dH0ke3J9IGFuZCA8PSAke259JHtyfWAsbmV3IEQuRVJSX09VVF9PRl9SQU5HRShcInZhbHVlXCIsbyxlKX0hZnVuY3Rpb24oZSx0LG4pe0YodCxcIm9mZnNldFwiKSx2b2lkIDAhPT1lW3RdJiZ2b2lkIDAhPT1lW3Qrbl18fFUodCxlLmxlbmd0aC0obisxKSl9KHIsbyxpKX1mdW5jdGlvbiBGKGUsdCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEQuRVJSX0lOVkFMSURfQVJHX1RZUEUodCxcIm51bWJlclwiLGUpfWZ1bmN0aW9uIFUoZSx0LG4pe2lmKE1hdGguZmxvb3IoZSkhPT1lKXRocm93IEYoZSxuKSxuZXcgRC5FUlJfT1VUX09GX1JBTkdFKG58fFwib2Zmc2V0XCIsXCJhbiBpbnRlZ2VyXCIsZSk7aWYodDwwKXRocm93IG5ldyBELkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUzt0aHJvdyBuZXcgRC5FUlJfT1VUX09GX1JBTkdFKG58fFwib2Zmc2V0XCIsYD49ICR7bj8xOjB9IGFuZCA8PSAke3R9YCxlKX1aKFwiRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBlP2Ake2V9IGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kc2A6XCJBdHRlbXB0IHRvIGFjY2VzcyBtZW1vcnkgb3V0c2lkZSBidWZmZXIgYm91bmRzXCJ9KSxSYW5nZUVycm9yKSxaKFwiRVJSX0lOVkFMSURfQVJHX1RZUEVcIiwoZnVuY3Rpb24oZSx0KXtyZXR1cm5gVGhlIFwiJHtlfVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgdH1gfSksVHlwZUVycm9yKSxaKFwiRVJSX09VVF9PRl9SQU5HRVwiLChmdW5jdGlvbihlLHQsbil7bGV0IHI9YFRoZSB2YWx1ZSBvZiBcIiR7ZX1cIiBpcyBvdXQgb2YgcmFuZ2UuYCxvPW47cmV0dXJuIE51bWJlci5pc0ludGVnZXIobikmJk1hdGguYWJzKG4pPjIqKjMyP289JChTdHJpbmcobikpOlwiYmlnaW50XCI9PXR5cGVvZiBuJiYobz1TdHJpbmcobiksKG4+QmlnSW50KDIpKipCaWdJbnQoMzIpfHxuPC0oQmlnSW50KDIpKipCaWdJbnQoMzIpKSkmJihvPSQobykpLG8rPVwiblwiKSxyKz1gIEl0IG11c3QgYmUgJHt0fS4gUmVjZWl2ZWQgJHtvfWAscn0pLFJhbmdlRXJyb3IpO2NvbnN0IFc9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiB6KGUsdCl7bGV0IG47dD10fHwxLzA7Y29uc3Qgcj1lLmxlbmd0aDtsZXQgbz1udWxsO2NvbnN0IGk9W107Zm9yKGxldCBhPTA7YTxyOysrYSl7aWYobj1lLmNoYXJDb2RlQXQoYSksbj41NTI5NSYmbjw1NzM0NCl7aWYoIW8pe2lmKG4+NTYzMTkpeyh0LT0zKT4tMSYmaS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihhKzE9PT1yKXsodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9bz1uO2NvbnRpbnVlfWlmKG48NTYzMjApeyh0LT0zKT4tMSYmaS5wdXNoKDIzOSwxOTEsMTg5KSxvPW47Y29udGludWV9bj02NTUzNisoby01NTI5Njw8MTB8bi01NjMyMCl9ZWxzZSBvJiYodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSk7aWYobz1udWxsLG48MTI4KXtpZigodC09MSk8MClicmVhaztpLnB1c2gobil9ZWxzZSBpZihuPDIwNDgpe2lmKCh0LT0yKTwwKWJyZWFrO2kucHVzaChuPj42fDE5Miw2MyZufDEyOCl9ZWxzZSBpZihuPDY1NTM2KXtpZigodC09Myk8MClicmVhaztpLnB1c2gobj4+MTJ8MjI0LG4+PjYmNjN8MTI4LDYzJm58MTI4KX1lbHNle2lmKCEobjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvZGUgcG9pbnRcIik7aWYoKHQtPTQpPDApYnJlYWs7aS5wdXNoKG4+PjE4fDI0MCxuPj4xMiY2M3wxMjgsbj4+NiY2M3wxMjgsNjMmbnwxMjgpfX1yZXR1cm4gaX1mdW5jdGlvbiBHKGUpe3JldHVybiByLnRvQnl0ZUFycmF5KGZ1bmN0aW9uKGUpe2lmKChlPShlPWUuc3BsaXQoXCI9XCIpWzBdKS50cmltKCkucmVwbGFjZShXLFwiXCIpKS5sZW5ndGg8MilyZXR1cm5cIlwiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9XCI9XCI7cmV0dXJuIGV9KGUpKX1mdW5jdGlvbiBxKGUsdCxuLHIpe2xldCBvO2ZvcihvPTA7bzxyJiYhKG8rbj49dC5sZW5ndGh8fG8+PWUubGVuZ3RoKTsrK28pdFtvK25dPWVbb107cmV0dXJuIG99ZnVuY3Rpb24gWShlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgdHx8bnVsbCE9ZSYmbnVsbCE9ZS5jb25zdHJ1Y3RvciYmbnVsbCE9ZS5jb25zdHJ1Y3Rvci5uYW1lJiZlLmNvbnN0cnVjdG9yLm5hbWU9PT10Lm5hbWV9ZnVuY3Rpb24gSyhlKXtyZXR1cm4gZSE9ZX1jb25zdCBYPWZ1bmN0aW9uKCl7Y29uc3QgZT1cIjAxMjM0NTY3ODlhYmNkZWZcIix0PW5ldyBBcnJheSgyNTYpO2ZvcihsZXQgbj0wO248MTY7KytuKXtjb25zdCByPTE2Km47Zm9yKGxldCBvPTA7bzwxNjsrK28pdFtyK29dPWVbbl0rZVtvXX1yZXR1cm4gdH0oKTtmdW5jdGlvbiBKKGUpe3JldHVyblwidW5kZWZpbmVkXCI9PXR5cGVvZiBCaWdJbnQ/UTplfWZ1bmN0aW9uIFEoKXt0aHJvdyBuZXcgRXJyb3IoXCJCaWdJbnQgbm90IHN1cHBvcnRlZFwiKX19LDQ2NTplPT57dmFyIHQsbj1cIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51bGwscj1uJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLmFwcGx5P24uYXBwbHk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChlLHQsbil9O3Q9biYmXCJmdW5jdGlvblwiPT10eXBlb2Ygbi5vd25LZXlzP24ub3duS2V5czpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKSl9OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKX07dmFyIG89TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihlKXtyZXR1cm4gZSE9ZX07ZnVuY3Rpb24gaSgpe2kuaW5pdC5jYWxsKHRoaXMpfWUuZXhwb3J0cz1pLGUuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLHIpe2Z1bmN0aW9uIG8obil7ZS5yZW1vdmVMaXN0ZW5lcih0LGkpLHIobil9ZnVuY3Rpb24gaSgpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGUucmVtb3ZlTGlzdGVuZXImJmUucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLG8pLG4oW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX1nKGUsdCxpLHtvbmNlOiEwfSksXCJlcnJvclwiIT09dCYmZnVuY3Rpb24oZSx0LG4pe1wiZnVuY3Rpb25cIj09dHlwZW9mIGUub24mJmcoZSxcImVycm9yXCIsdCx7b25jZTohMH0pfShlLG8pfSkpfSxpLkV2ZW50RW1pdHRlcj1pLGkucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLGkucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLGkucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciBhPTEwO2Z1bmN0aW9uIGwoZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBlKX1mdW5jdGlvbiBzKGUpe3JldHVybiB2b2lkIDA9PT1lLl9tYXhMaXN0ZW5lcnM/aS5kZWZhdWx0TWF4TGlzdGVuZXJzOmUuX21heExpc3RlbmVyc31mdW5jdGlvbiBjKGUsdCxuLHIpe3ZhciBvLGksYSxjO2lmKGwobiksdm9pZCAwPT09KGk9ZS5fZXZlbnRzKT8oaT1lLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxlLl9ldmVudHNDb3VudD0wKToodm9pZCAwIT09aS5uZXdMaXN0ZW5lciYmKGUuZW1pdChcIm5ld0xpc3RlbmVyXCIsdCxuLmxpc3RlbmVyP24ubGlzdGVuZXI6biksaT1lLl9ldmVudHMpLGE9aVt0XSksdm9pZCAwPT09YSlhPWlbdF09biwrK2UuX2V2ZW50c0NvdW50O2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYT9hPWlbdF09cj9bbixhXTpbYSxuXTpyP2EudW5zaGlmdChuKTphLnB1c2gobiksKG89cyhlKSk+MCYmYS5sZW5ndGg+byYmIWEud2FybmVkKXthLndhcm5lZD0hMDt2YXIgdT1uZXcgRXJyb3IoXCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuIFwiK2EubGVuZ3RoK1wiIFwiK1N0cmluZyh0KStcIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0XCIpO3UubmFtZT1cIk1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZ1wiLHUuZW1pdHRlcj1lLHUudHlwZT10LHUuY291bnQ9YS5sZW5ndGgsYz11LGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKGMpfXJldHVybiBlfWZ1bmN0aW9uIHUoKXtpZighdGhpcy5maXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1bWVudHMpfWZ1bmN0aW9uIGYoZSx0LG4pe3ZhciByPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDplLHR5cGU6dCxsaXN0ZW5lcjpufSxvPXUuYmluZChyKTtyZXR1cm4gby5saXN0ZW5lcj1uLHIud3JhcEZuPW8sb31mdW5jdGlvbiBkKGUsdCxuKXt2YXIgcj1lLl9ldmVudHM7aWYodm9pZCAwPT09cilyZXR1cm5bXTt2YXIgbz1yW3RdO3JldHVybiB2b2lkIDA9PT1vP1tdOlwiZnVuY3Rpb25cIj09dHlwZW9mIG8/bj9bby5saXN0ZW5lcnx8b106W29dOm4/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBBcnJheShlLmxlbmd0aCksbj0wO248dC5sZW5ndGg7KytuKXRbbl09ZVtuXS5saXN0ZW5lcnx8ZVtuXTtyZXR1cm4gdH0obyk6aChvLG8ubGVuZ3RoKX1mdW5jdGlvbiBwKGUpe3ZhciB0PXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT10KXt2YXIgbj10W2VdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pcmV0dXJuIDE7aWYodm9pZCAwIT09bilyZXR1cm4gbi5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgbj1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3IpbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGcoZSx0LG4scil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5vbilyLm9uY2U/ZS5vbmNlKHQsbik6ZS5vbih0LG4pO2Vsc2V7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZS5hZGRFdmVudExpc3RlbmVyKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImVtaXR0ZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGUpO2UuYWRkRXZlbnRMaXN0ZW5lcih0LChmdW5jdGlvbiBvKGkpe3Iub25jZSYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbyksbihpKX0pKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KGksXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldDpmdW5jdGlvbihlKXtpZihcIm51bWJlclwiIT10eXBlb2YgZXx8ZTwwfHxvKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytlK1wiLlwiKTthPWV9fSksaS5pbml0PWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5fZXZlbnRzJiZ0aGlzLl9ldmVudHMhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0saS5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKGUpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlfHxlPDB8fG8oZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK2UrXCIuXCIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9ZSx0aGlzfSxpLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gcyh0aGlzKX0saS5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdC5wdXNoKGFyZ3VtZW50c1tuXSk7dmFyIG89XCJlcnJvclwiPT09ZSxpPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1pKW89byYmdm9pZCAwPT09aS5lcnJvcjtlbHNlIGlmKCFvKXJldHVybiExO2lmKG8pe3ZhciBhO2lmKHQubGVuZ3RoPjAmJihhPXRbMF0pLGEgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBhO3ZhciBsPW5ldyBFcnJvcihcIlVuaGFuZGxlZCBlcnJvci5cIisoYT9cIiAoXCIrYS5tZXNzYWdlK1wiKVwiOlwiXCIpKTt0aHJvdyBsLmNvbnRleHQ9YSxsfXZhciBzPWlbZV07aWYodm9pZCAwPT09cylyZXR1cm4hMTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBzKXIocyx0aGlzLHQpO2Vsc2V7dmFyIGM9cy5sZW5ndGgsdT1oKHMsYyk7Zm9yKG49MDtuPGM7KytuKXIodVtuXSx0aGlzLHQpfXJldHVybiEwfSxpLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3JldHVybiBjKHRoaXMsZSx0LCExKX0saS5wcm90b3R5cGUub249aS5wcm90b3R5cGUuYWRkTGlzdGVuZXIsaS5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGModGhpcyxlLHQsITApfSxpLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwodCksdGhpcy5vbihlLGYodGhpcyxlLHQpKSx0aGlzfSxpLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwodCksdGhpcy5wcmVwZW5kTGlzdGVuZXIoZSxmKHRoaXMsZSx0KSksdGhpc30saS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8saSxhO2lmKGwodCksdm9pZCAwPT09KHI9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT0obj1yW2VdKSlyZXR1cm4gdGhpcztpZihuPT09dHx8bi5saXN0ZW5lcj09PXQpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTooZGVsZXRlIHJbZV0sci5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIixlLG4ubGlzdGVuZXJ8fHQpKTtlbHNlIGlmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIG4pe2ZvcihvPS0xLGk9bi5sZW5ndGgtMTtpPj0wO2ktLSlpZihuW2ldPT09dHx8bltpXS5saXN0ZW5lcj09PXQpe2E9bltpXS5saXN0ZW5lcixvPWk7YnJlYWt9aWYobzwwKXJldHVybiB0aGlzOzA9PT1vP24uc2hpZnQoKTpmdW5jdGlvbihlLHQpe2Zvcig7dCsxPGUubGVuZ3RoO3QrKyllW3RdPWVbdCsxXTtlLnBvcCgpfShuLG8pLDE9PT1uLmxlbmd0aCYmKHJbZV09blswXSksdm9pZCAwIT09ci5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIixlLGF8fHQpfXJldHVybiB0aGlzfSxpLnByb3RvdHlwZS5vZmY9aS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIsaS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3ZhciB0LG4scjtpZih2b2lkIDA9PT0obj10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PW4ucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTp2b2lkIDAhPT1uW2VdJiYoMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTpkZWxldGUgbltlXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIG8saT1PYmplY3Qua2V5cyhuKTtmb3Iocj0wO3I8aS5sZW5ndGg7KytyKVwicmVtb3ZlTGlzdGVuZXJcIiE9PShvPWlbcl0pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhvKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJyZW1vdmVMaXN0ZW5lclwiKSx0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoXCJmdW5jdGlvblwiPT10eXBlb2YodD1uW2VdKSl0aGlzLnJlbW92ZUxpc3RlbmVyKGUsdCk7ZWxzZSBpZih2b2lkIDAhPT10KWZvcihyPXQubGVuZ3RoLTE7cj49MDtyLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihlLHRbcl0pO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGQodGhpcyxlLCEwKX0saS5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybiBkKHRoaXMsZSwhMSl9LGkubGlzdGVuZXJDb3VudD1mdW5jdGlvbihlLHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGUubGlzdGVuZXJDb3VudD9lLmxpc3RlbmVyQ291bnQodCk6cC5jYWxsKGUsdCl9LGkucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9cCxpLnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/dCh0aGlzLl9ldmVudHMpOltdfX0sMjE1OihlLHQpPT57dC5yZWFkPWZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGksYSxsPTgqby1yLTEscz0oMTw8bCktMSxjPXM+PjEsdT0tNyxmPW4/by0xOjAsZD1uPy0xOjEscD1lW3QrZl07Zm9yKGYrPWQsaT1wJigxPDwtdSktMSxwPj49LXUsdSs9bDt1PjA7aT0yNTYqaStlW3QrZl0sZis9ZCx1LT04KTtmb3IoYT1pJigxPDwtdSktMSxpPj49LXUsdSs9cjt1PjA7YT0yNTYqYStlW3QrZl0sZis9ZCx1LT04KTtpZigwPT09aSlpPTEtYztlbHNle2lmKGk9PT1zKXJldHVybiBhP05hTjoxLzAqKHA/LTE6MSk7YSs9TWF0aC5wb3coMixyKSxpLT1jfXJldHVybihwPy0xOjEpKmEqTWF0aC5wb3coMixpLXIpfSx0LndyaXRlPWZ1bmN0aW9uKGUsdCxuLHIsbyxpKXt2YXIgYSxsLHMsYz04Kmktby0xLHU9KDE8PGMpLTEsZj11Pj4xLGQ9MjM9PT1vP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxwPXI/MDppLTEsaD1yPzE6LTEsZz10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGw9aXNOYU4odCk/MTowLGE9dSk6KGE9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCoocz1NYXRoLnBvdygyLC1hKSk8MSYmKGEtLSxzKj0yKSwodCs9YStmPj0xP2QvczpkKk1hdGgucG93KDIsMS1mKSkqcz49MiYmKGErKyxzLz0yKSxhK2Y+PXU/KGw9MCxhPXUpOmErZj49MT8obD0odCpzLTEpKk1hdGgucG93KDIsbyksYSs9Zik6KGw9dCpNYXRoLnBvdygyLGYtMSkqTWF0aC5wb3coMixvKSxhPTApKTtvPj04O2VbbitwXT0yNTUmbCxwKz1oLGwvPTI1NixvLT04KTtmb3IoYT1hPDxvfGwsYys9bztjPjA7ZVtuK3BdPTI1NSZhLHArPWgsYS89MjU2LGMtPTgpO2VbbitwLWhdfD0xMjgqZ319LDk1MTpmdW5jdGlvbihlLHQsbil7dmFyIHI7ZT1uLm5tZChlKSxmdW5jdGlvbigpe3ZhciBvLGk9XCJFeHBlY3RlZCBhIGZ1bmN0aW9uXCIsYT1cIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX19cIixsPVwiX19sb2Rhc2hfcGxhY2Vob2xkZXJfX1wiLHM9MzIsYz0xMjgsdT0xLzAsZj05MDA3MTk5MjU0NzQwOTkxLGQ9TmFOLHA9NDI5NDk2NzI5NSxoPVtbXCJhcnlcIixjXSxbXCJiaW5kXCIsMV0sW1wiYmluZEtleVwiLDJdLFtcImN1cnJ5XCIsOF0sW1wiY3VycnlSaWdodFwiLDE2XSxbXCJmbGlwXCIsNTEyXSxbXCJwYXJ0aWFsXCIsc10sW1wicGFydGlhbFJpZ2h0XCIsNjRdLFtcInJlYXJnXCIsMjU2XV0sZz1cIltvYmplY3QgQXJndW1lbnRzXVwiLHY9XCJbb2JqZWN0IEFycmF5XVwiLG09XCJbb2JqZWN0IEJvb2xlYW5dXCIsQz1cIltvYmplY3QgRGF0ZV1cIix5PVwiW29iamVjdCBFcnJvcl1cIix3PVwiW29iamVjdCBGdW5jdGlvbl1cIixiPVwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIix4PVwiW29iamVjdCBNYXBdXCIsXz1cIltvYmplY3QgTnVtYmVyXVwiLE89XCJbb2JqZWN0IE9iamVjdF1cIixMPVwiW29iamVjdCBQcm9taXNlXVwiLEU9XCJbb2JqZWN0IFJlZ0V4cF1cIixTPVwiW29iamVjdCBTZXRdXCIsaj1cIltvYmplY3QgU3RyaW5nXVwiLE09XCJbb2JqZWN0IFN5bWJvbF1cIixrPVwiW29iamVjdCBXZWFrTWFwXVwiLFI9XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiLFA9XCJbb2JqZWN0IERhdGFWaWV3XVwiLEk9XCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIixBPVwiW29iamVjdCBGbG9hdDY0QXJyYXldXCIsVD1cIltvYmplY3QgSW50OEFycmF5XVwiLEg9XCJbb2JqZWN0IEludDE2QXJyYXldXCIsQj1cIltvYmplY3QgSW50MzJBcnJheV1cIixWPVwiW29iamVjdCBVaW50OEFycmF5XVwiLEQ9XCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiLFo9XCJbb2JqZWN0IFVpbnQxNkFycmF5XVwiLCQ9XCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiLE49L1xcYl9fcCBcXCs9ICcnOy9nLEY9L1xcYihfX3AgXFwrPSkgJycgXFwrL2csVT0vKF9fZVxcKC4qP1xcKXxcXGJfX3RcXCkpIFxcK1xcbicnOy9nLFc9LyYoPzphbXB8bHR8Z3R8cXVvdHwjMzkpOy9nLHo9L1smPD5cIiddL2csRz1SZWdFeHAoVy5zb3VyY2UpLHE9UmVnRXhwKHouc291cmNlKSxZPS88JS0oW1xcc1xcU10rPyklPi9nLEs9LzwlKFtcXHNcXFNdKz8pJT4vZyxYPS88JT0oW1xcc1xcU10rPyklPi9nLEo9L1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxRPS9eXFx3KiQvLGVlPS9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZyx0ZT0vW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csbmU9UmVnRXhwKHRlLnNvdXJjZSkscmU9L15cXHMrLyxvZT0vXFxzLyxpZT0vXFx7KD86XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAuK1xcXSBcXCpcXC8pP1xcbj8vLGFlPS9cXHtcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoICguKylcXF0gXFwqLyxsZT0vLD8gJiAvLHNlPS9bXlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceDdmXSsvZyxjZT0vWygpPSx7fVxcW1xcXVxcL1xcc10vLHVlPS9cXFxcKFxcXFwpPy9nLGZlPS9cXCRcXHsoW15cXFxcfV0qKD86XFxcXC5bXlxcXFx9XSopKilcXH0vZyxkZT0vXFx3KiQvLHBlPS9eWy0rXTB4WzAtOWEtZl0rJC9pLGhlPS9eMGJbMDFdKyQvaSxnZT0vXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvLHZlPS9eMG9bMC03XSskL2ksbWU9L14oPzowfFsxLTldXFxkKikkLyxDZT0vW1xceGMwLVxceGQ2XFx4ZDgtXFx4ZjZcXHhmOC1cXHhmZlxcdTAxMDAtXFx1MDE3Zl0vZyx5ZT0vKCReKS8sd2U9L1snXFxuXFxyXFx1MjAyOFxcdTIwMjlcXFxcXS9nLGJlPVwiXFxcXHVkODAwLVxcXFx1ZGZmZlwiLHhlPVwiXFxcXHUwMzAwLVxcXFx1MDM2ZlxcXFx1ZmUyMC1cXFxcdWZlMmZcXFxcdTIwZDAtXFxcXHUyMGZmXCIsX2U9XCJcXFxcdTI3MDAtXFxcXHUyN2JmXCIsT2U9XCJhLXpcXFxceGRmLVxcXFx4ZjZcXFxceGY4LVxcXFx4ZmZcIixMZT1cIkEtWlxcXFx4YzAtXFxcXHhkNlxcXFx4ZDgtXFxcXHhkZVwiLEVlPVwiXFxcXHVmZTBlXFxcXHVmZTBmXCIsU2U9XCJcXFxceGFjXFxcXHhiMVxcXFx4ZDdcXFxceGY3XFxcXHgwMC1cXFxceDJmXFxcXHgzYS1cXFxceDQwXFxcXHg1Yi1cXFxceDYwXFxcXHg3Yi1cXFxceGJmXFxcXHUyMDAwLVxcXFx1MjA2ZiBcXFxcdFxcXFx4MGJcXFxcZlxcXFx4YTBcXFxcdWZlZmZcXFxcblxcXFxyXFxcXHUyMDI4XFxcXHUyMDI5XFxcXHUxNjgwXFxcXHUxODBlXFxcXHUyMDAwXFxcXHUyMDAxXFxcXHUyMDAyXFxcXHUyMDAzXFxcXHUyMDA0XFxcXHUyMDA1XFxcXHUyMDA2XFxcXHUyMDA3XFxcXHUyMDA4XFxcXHUyMDA5XFxcXHUyMDBhXFxcXHUyMDJmXFxcXHUyMDVmXFxcXHUzMDAwXCIsamU9XCJbXCIrYmUrXCJdXCIsTWU9XCJbXCIrU2UrXCJdXCIsa2U9XCJbXCIreGUrXCJdXCIsUmU9XCJcXFxcZCtcIixQZT1cIltcIitfZStcIl1cIixJZT1cIltcIitPZStcIl1cIixBZT1cIlteXCIrYmUrU2UrUmUrX2UrT2UrTGUrXCJdXCIsVGU9XCJcXFxcdWQ4M2NbXFxcXHVkZmZiLVxcXFx1ZGZmZl1cIixIZT1cIlteXCIrYmUrXCJdXCIsQmU9XCIoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9XCIsVmU9XCJbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl1cIixEZT1cIltcIitMZStcIl1cIixaZT1cIlxcXFx1MjAwZFwiLCRlPVwiKD86XCIrSWUrXCJ8XCIrQWUrXCIpXCIsTmU9XCIoPzpcIitEZStcInxcIitBZStcIilcIixGZT1cIig/Olsn4oCZXSg/OmR8bGx8bXxyZXxzfHR8dmUpKT9cIixVZT1cIig/Olsn4oCZXSg/OkR8TEx8TXxSRXxTfFR8VkUpKT9cIixXZT1cIig/OlwiK2tlK1wifFwiK1RlK1wiKT9cIix6ZT1cIltcIitFZStcIl0/XCIsR2U9emUrV2UrXCIoPzpcIitaZStcIig/OlwiK1tIZSxCZSxWZV0uam9pbihcInxcIikrXCIpXCIremUrV2UrXCIpKlwiLHFlPVwiKD86XCIrW1BlLEJlLFZlXS5qb2luKFwifFwiKStcIilcIitHZSxZZT1cIig/OlwiK1tIZStrZStcIj9cIixrZSxCZSxWZSxqZV0uam9pbihcInxcIikrXCIpXCIsS2U9UmVnRXhwKFwiWyfigJldXCIsXCJnXCIpLFhlPVJlZ0V4cChrZSxcImdcIiksSmU9UmVnRXhwKFRlK1wiKD89XCIrVGUrXCIpfFwiK1llK0dlLFwiZ1wiKSxRZT1SZWdFeHAoW0RlK1wiP1wiK0llK1wiK1wiK0ZlK1wiKD89XCIrW01lLERlLFwiJFwiXS5qb2luKFwifFwiKStcIilcIixOZStcIitcIitVZStcIig/PVwiK1tNZSxEZSskZSxcIiRcIl0uam9pbihcInxcIikrXCIpXCIsRGUrXCI/XCIrJGUrXCIrXCIrRmUsRGUrXCIrXCIrVWUsXCJcXFxcZCooPzoxU1R8Mk5EfDNSRHwoPyFbMTIzXSlcXFxcZFRIKSg/PVxcXFxifFthLXpfXSlcIixcIlxcXFxkKig/OjFzdHwybmR8M3JkfCg/IVsxMjNdKVxcXFxkdGgpKD89XFxcXGJ8W0EtWl9dKVwiLFJlLHFlXS5qb2luKFwifFwiKSxcImdcIiksZXQ9UmVnRXhwKFwiW1wiK1plK2JlK3hlK0VlK1wiXVwiKSx0dD0vW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyxudD1bXCJBcnJheVwiLFwiQnVmZmVyXCIsXCJEYXRhVmlld1wiLFwiRGF0ZVwiLFwiRXJyb3JcIixcIkZsb2F0MzJBcnJheVwiLFwiRmxvYXQ2NEFycmF5XCIsXCJGdW5jdGlvblwiLFwiSW50OEFycmF5XCIsXCJJbnQxNkFycmF5XCIsXCJJbnQzMkFycmF5XCIsXCJNYXBcIixcIk1hdGhcIixcIk9iamVjdFwiLFwiUHJvbWlzZVwiLFwiUmVnRXhwXCIsXCJTZXRcIixcIlN0cmluZ1wiLFwiU3ltYm9sXCIsXCJUeXBlRXJyb3JcIixcIlVpbnQ4QXJyYXlcIixcIlVpbnQ4Q2xhbXBlZEFycmF5XCIsXCJVaW50MTZBcnJheVwiLFwiVWludDMyQXJyYXlcIixcIldlYWtNYXBcIixcIl9cIixcImNsZWFyVGltZW91dFwiLFwiaXNGaW5pdGVcIixcInBhcnNlSW50XCIsXCJzZXRUaW1lb3V0XCJdLHJ0PS0xLG90PXt9O290W0ldPW90W0FdPW90W1RdPW90W0hdPW90W0JdPW90W1ZdPW90W0RdPW90W1pdPW90WyRdPSEwLG90W2ddPW90W3ZdPW90W1JdPW90W21dPW90W1BdPW90W0NdPW90W3ldPW90W3ddPW90W3hdPW90W19dPW90W09dPW90W0VdPW90W1NdPW90W2pdPW90W2tdPSExO3ZhciBpdD17fTtpdFtnXT1pdFt2XT1pdFtSXT1pdFtQXT1pdFttXT1pdFtDXT1pdFtJXT1pdFtBXT1pdFtUXT1pdFtIXT1pdFtCXT1pdFt4XT1pdFtfXT1pdFtPXT1pdFtFXT1pdFtTXT1pdFtqXT1pdFtNXT1pdFtWXT1pdFtEXT1pdFtaXT1pdFskXT0hMCxpdFt5XT1pdFt3XT1pdFtrXT0hMTt2YXIgYXQ9e1wiXFxcXFwiOlwiXFxcXFwiLFwiJ1wiOlwiJ1wiLFwiXFxuXCI6XCJuXCIsXCJcXHJcIjpcInJcIixcIlxcdTIwMjhcIjpcInUyMDI4XCIsXCJcXHUyMDI5XCI6XCJ1MjAyOVwifSxsdD1wYXJzZUZsb2F0LHN0PXBhcnNlSW50LGN0PVwib2JqZWN0XCI9PXR5cGVvZiBuLmcmJm4uZyYmbi5nLk9iamVjdD09PU9iamVjdCYmbi5nLHV0PVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmdD1jdHx8dXR8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxkdD10JiYhdC5ub2RlVHlwZSYmdCxwdD1kdCYmZSYmIWUubm9kZVR5cGUmJmUsaHQ9cHQmJnB0LmV4cG9ydHM9PT1kdCxndD1odCYmY3QucHJvY2Vzcyx2dD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gcHQmJnB0LnJlcXVpcmUmJnB0LnJlcXVpcmUoXCJ1dGlsXCIpLnR5cGVzfHxndCYmZ3QuYmluZGluZyYmZ3QuYmluZGluZyhcInV0aWxcIil9Y2F0Y2goZSl7fX0oKSxtdD12dCYmdnQuaXNBcnJheUJ1ZmZlcixDdD12dCYmdnQuaXNEYXRlLHl0PXZ0JiZ2dC5pc01hcCx3dD12dCYmdnQuaXNSZWdFeHAsYnQ9dnQmJnZ0LmlzU2V0LHh0PXZ0JiZ2dC5pc1R5cGVkQXJyYXk7ZnVuY3Rpb24gX3QoZSx0LG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodCk7Y2FzZSAxOnJldHVybiBlLmNhbGwodCxuWzBdKTtjYXNlIDI6cmV0dXJuIGUuY2FsbCh0LG5bMF0sblsxXSk7Y2FzZSAzOnJldHVybiBlLmNhbGwodCxuWzBdLG5bMV0sblsyXSl9cmV0dXJuIGUuYXBwbHkodCxuKX1mdW5jdGlvbiBPdChlLHQsbixyKXtmb3IodmFyIG89LTEsaT1udWxsPT1lPzA6ZS5sZW5ndGg7KytvPGk7KXt2YXIgYT1lW29dO3QocixhLG4oYSksZSl9cmV0dXJuIHJ9ZnVuY3Rpb24gTHQoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7KytuPHImJiExIT09dChlW25dLG4sZSk7KTtyZXR1cm4gZX1mdW5jdGlvbiBFdChlLHQpe2Zvcih2YXIgbj1udWxsPT1lPzA6ZS5sZW5ndGg7bi0tJiYhMSE9PXQoZVtuXSxuLGUpOyk7cmV0dXJuIGV9ZnVuY3Rpb24gU3QoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7KytuPHI7KWlmKCF0KGVbbl0sbixlKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBqdChlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aCxvPTAsaT1bXTsrK248cjspe3ZhciBhPWVbbl07dChhLG4sZSkmJihpW28rK109YSl9cmV0dXJuIGl9ZnVuY3Rpb24gTXQoZSx0KXtyZXR1cm4hKG51bGw9PWV8fCFlLmxlbmd0aCkmJkR0KGUsdCwwKT4tMX1mdW5jdGlvbiBrdChlLHQsbil7Zm9yKHZhciByPS0xLG89bnVsbD09ZT8wOmUubGVuZ3RoOysrcjxvOylpZihuKHQsZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gUnQoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGgsbz1BcnJheShyKTsrK248cjspb1tuXT10KGVbbl0sbixlKTtyZXR1cm4gb31mdW5jdGlvbiBQdChlLHQpe2Zvcih2YXIgbj0tMSxyPXQubGVuZ3RoLG89ZS5sZW5ndGg7KytuPHI7KWVbbytuXT10W25dO3JldHVybiBlfWZ1bmN0aW9uIEl0KGUsdCxuLHIpe3ZhciBvPS0xLGk9bnVsbD09ZT8wOmUubGVuZ3RoO2ZvcihyJiZpJiYobj1lWysrb10pOysrbzxpOyluPXQobixlW29dLG8sZSk7cmV0dXJuIG59ZnVuY3Rpb24gQXQoZSx0LG4scil7dmFyIG89bnVsbD09ZT8wOmUubGVuZ3RoO2ZvcihyJiZvJiYobj1lWy0tb10pO28tLTspbj10KG4sZVtvXSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIFR0KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoOysrbjxyOylpZih0KGVbbl0sbixlKSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgSHQ9RnQoXCJsZW5ndGhcIik7ZnVuY3Rpb24gQnQoZSx0LG4pe3ZhciByO3JldHVybiBuKGUsKGZ1bmN0aW9uKGUsbixvKXtpZih0KGUsbixvKSlyZXR1cm4gcj1uLCExfSkpLHJ9ZnVuY3Rpb24gVnQoZSx0LG4scil7Zm9yKHZhciBvPWUubGVuZ3RoLGk9bisocj8xOi0xKTtyP2ktLTorK2k8bzspaWYodChlW2ldLGksZSkpcmV0dXJuIGk7cmV0dXJuLTF9ZnVuY3Rpb24gRHQoZSx0LG4pe3JldHVybiB0PT10P2Z1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bi0xLG89ZS5sZW5ndGg7KytyPG87KWlmKGVbcl09PT10KXJldHVybiByO3JldHVybi0xfShlLHQsbik6VnQoZSwkdCxuKX1mdW5jdGlvbiBadChlLHQsbixyKXtmb3IodmFyIG89bi0xLGk9ZS5sZW5ndGg7KytvPGk7KWlmKHIoZVtvXSx0KSlyZXR1cm4gbztyZXR1cm4tMX1mdW5jdGlvbiAkdChlKXtyZXR1cm4gZSE9ZX1mdW5jdGlvbiBOdChlLHQpe3ZhciBuPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gbj96dChlLHQpL246ZH1mdW5jdGlvbiBGdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bzp0W2VdfX1mdW5jdGlvbiBVdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PWU/bzplW3RdfX1mdW5jdGlvbiBXdChlLHQsbixyLG8pe3JldHVybiBvKGUsKGZ1bmN0aW9uKGUsbyxpKXtuPXI/KHI9ITEsZSk6dChuLGUsbyxpKX0pKSxufWZ1bmN0aW9uIHp0KGUsdCl7Zm9yKHZhciBuLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspe3ZhciBhPXQoZVtyXSk7YSE9PW8mJihuPW49PT1vP2E6bithKX1yZXR1cm4gbn1mdW5jdGlvbiBHdChlLHQpe2Zvcih2YXIgbj0tMSxyPUFycmF5KGUpOysrbjxlOylyW25dPXQobik7cmV0dXJuIHJ9ZnVuY3Rpb24gcXQoZSl7cmV0dXJuIGU/ZS5zbGljZSgwLGZuKGUpKzEpLnJlcGxhY2UocmUsXCJcIik6ZX1mdW5jdGlvbiBZdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCl9fWZ1bmN0aW9uIEt0KGUsdCl7cmV0dXJuIFJ0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkpfWZ1bmN0aW9uIFh0KGUsdCl7cmV0dXJuIGUuaGFzKHQpfWZ1bmN0aW9uIEp0KGUsdCl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGg7KytuPHImJkR0KHQsZVtuXSwwKT4tMTspO3JldHVybiBufWZ1bmN0aW9uIFF0KGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoO24tLSYmRHQodCxlW25dLDApPi0xOyk7cmV0dXJuIG59dmFyIGVuPVV0KHvDgDpcIkFcIizDgTpcIkFcIizDgjpcIkFcIizDgzpcIkFcIizDhDpcIkFcIizDhTpcIkFcIizDoDpcImFcIizDoTpcImFcIizDojpcImFcIizDozpcImFcIizDpDpcImFcIizDpTpcImFcIizDhzpcIkNcIizDpzpcImNcIizDkDpcIkRcIizDsDpcImRcIizDiDpcIkVcIizDiTpcIkVcIizDijpcIkVcIizDizpcIkVcIizDqDpcImVcIizDqTpcImVcIizDqjpcImVcIizDqzpcImVcIizDjDpcIklcIizDjTpcIklcIizDjjpcIklcIizDjzpcIklcIizDrDpcImlcIizDrTpcImlcIizDrjpcImlcIizDrzpcImlcIizDkTpcIk5cIizDsTpcIm5cIizDkjpcIk9cIizDkzpcIk9cIizDlDpcIk9cIizDlTpcIk9cIizDljpcIk9cIizDmDpcIk9cIizDsjpcIm9cIizDszpcIm9cIizDtDpcIm9cIizDtTpcIm9cIizDtjpcIm9cIizDuDpcIm9cIizDmTpcIlVcIizDmjpcIlVcIizDmzpcIlVcIizDnDpcIlVcIizDuTpcInVcIizDujpcInVcIizDuzpcInVcIizDvDpcInVcIizDnTpcIllcIizDvTpcInlcIizDvzpcInlcIizDhjpcIkFlXCIsw6Y6XCJhZVwiLMOeOlwiVGhcIizDvjpcInRoXCIsw586XCJzc1wiLMSAOlwiQVwiLMSCOlwiQVwiLMSEOlwiQVwiLMSBOlwiYVwiLMSDOlwiYVwiLMSFOlwiYVwiLMSGOlwiQ1wiLMSIOlwiQ1wiLMSKOlwiQ1wiLMSMOlwiQ1wiLMSHOlwiY1wiLMSJOlwiY1wiLMSLOlwiY1wiLMSNOlwiY1wiLMSOOlwiRFwiLMSQOlwiRFwiLMSPOlwiZFwiLMSROlwiZFwiLMSSOlwiRVwiLMSUOlwiRVwiLMSWOlwiRVwiLMSYOlwiRVwiLMSaOlwiRVwiLMSTOlwiZVwiLMSVOlwiZVwiLMSXOlwiZVwiLMSZOlwiZVwiLMSbOlwiZVwiLMScOlwiR1wiLMSeOlwiR1wiLMSgOlwiR1wiLMSiOlwiR1wiLMSdOlwiZ1wiLMSfOlwiZ1wiLMShOlwiZ1wiLMSjOlwiZ1wiLMSkOlwiSFwiLMSmOlwiSFwiLMSlOlwiaFwiLMSnOlwiaFwiLMSoOlwiSVwiLMSqOlwiSVwiLMSsOlwiSVwiLMSuOlwiSVwiLMSwOlwiSVwiLMSpOlwiaVwiLMSrOlwiaVwiLMStOlwiaVwiLMSvOlwiaVwiLMSxOlwiaVwiLMS0OlwiSlwiLMS1OlwialwiLMS2OlwiS1wiLMS3Olwia1wiLMS4Olwia1wiLMS5OlwiTFwiLMS7OlwiTFwiLMS9OlwiTFwiLMS/OlwiTFwiLMWBOlwiTFwiLMS6OlwibFwiLMS8OlwibFwiLMS+OlwibFwiLMWAOlwibFwiLMWCOlwibFwiLMWDOlwiTlwiLMWFOlwiTlwiLMWHOlwiTlwiLMWKOlwiTlwiLMWEOlwiblwiLMWGOlwiblwiLMWIOlwiblwiLMWLOlwiblwiLMWMOlwiT1wiLMWOOlwiT1wiLMWQOlwiT1wiLMWNOlwib1wiLMWPOlwib1wiLMWROlwib1wiLMWUOlwiUlwiLMWWOlwiUlwiLMWYOlwiUlwiLMWVOlwiclwiLMWXOlwiclwiLMWZOlwiclwiLMWaOlwiU1wiLMWcOlwiU1wiLMWeOlwiU1wiLMWgOlwiU1wiLMWbOlwic1wiLMWdOlwic1wiLMWfOlwic1wiLMWhOlwic1wiLMWiOlwiVFwiLMWkOlwiVFwiLMWmOlwiVFwiLMWjOlwidFwiLMWlOlwidFwiLMWnOlwidFwiLMWoOlwiVVwiLMWqOlwiVVwiLMWsOlwiVVwiLMWuOlwiVVwiLMWwOlwiVVwiLMWyOlwiVVwiLMWpOlwidVwiLMWrOlwidVwiLMWtOlwidVwiLMWvOlwidVwiLMWxOlwidVwiLMWzOlwidVwiLMW0OlwiV1wiLMW1Olwid1wiLMW2OlwiWVwiLMW3OlwieVwiLMW4OlwiWVwiLMW5OlwiWlwiLMW7OlwiWlwiLMW9OlwiWlwiLMW6OlwielwiLMW8OlwielwiLMW+OlwielwiLMSyOlwiSUpcIizEszpcImlqXCIsxZI6XCJPZVwiLMWTOlwib2VcIizFiTpcIiduXCIsxb86XCJzXCJ9KSx0bj1VdCh7XCImXCI6XCImYW1wO1wiLFwiPFwiOlwiJmx0O1wiLFwiPlwiOlwiJmd0O1wiLCdcIic6XCImcXVvdDtcIixcIidcIjpcIiYjMzk7XCJ9KTtmdW5jdGlvbiBubihlKXtyZXR1cm5cIlxcXFxcIithdFtlXX1mdW5jdGlvbiBybihlKXtyZXR1cm4gZXQudGVzdChlKX1mdW5jdGlvbiBvbihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtuWysrdF09W3IsZV19KSksbn1mdW5jdGlvbiBhbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZSh0KG4pKX19ZnVuY3Rpb24gbG4oZSx0KXtmb3IodmFyIG49LTEscj1lLmxlbmd0aCxvPTAsaT1bXTsrK248cjspe3ZhciBhPWVbbl07YSE9PXQmJmEhPT1sfHwoZVtuXT1sLGlbbysrXT1uKX1yZXR1cm4gaX1mdW5jdGlvbiBzbihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7blsrK3RdPWV9KSksbn1mdW5jdGlvbiBjbihlKXtyZXR1cm4gcm4oZSk/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PUplLmxhc3RJbmRleD0wO0plLnRlc3QoZSk7KSsrdDtyZXR1cm4gdH0oZSk6SHQoZSl9ZnVuY3Rpb24gdW4oZSl7cmV0dXJuIHJuKGUpP2Z1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKEplKXx8W119KGUpOmZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KFwiXCIpfShlKX1mdW5jdGlvbiBmbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7dC0tJiZvZS50ZXN0KGUuY2hhckF0KHQpKTspO3JldHVybiB0fXZhciBkbj1VdCh7XCImYW1wO1wiOlwiJlwiLFwiJmx0O1wiOlwiPFwiLFwiJmd0O1wiOlwiPlwiLFwiJnF1b3Q7XCI6J1wiJyxcIiYjMzk7XCI6XCInXCJ9KSxwbj1mdW5jdGlvbiBlKHQpe3ZhciBuLHI9KHQ9bnVsbD09dD9mdDpwbi5kZWZhdWx0cyhmdC5PYmplY3QoKSx0LHBuLnBpY2soZnQsbnQpKSkuQXJyYXksb2U9dC5EYXRlLGJlPXQuRXJyb3IseGU9dC5GdW5jdGlvbixfZT10Lk1hdGgsT2U9dC5PYmplY3QsTGU9dC5SZWdFeHAsRWU9dC5TdHJpbmcsU2U9dC5UeXBlRXJyb3IsamU9ci5wcm90b3R5cGUsTWU9eGUucHJvdG90eXBlLGtlPU9lLnByb3RvdHlwZSxSZT10W1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdLFBlPU1lLnRvU3RyaW5nLEllPWtlLmhhc093blByb3BlcnR5LEFlPTAsVGU9KG49L1teLl0rJC8uZXhlYyhSZSYmUmUua2V5cyYmUmUua2V5cy5JRV9QUk9UT3x8XCJcIikpP1wiU3ltYm9sKHNyYylfMS5cIituOlwiXCIsSGU9a2UudG9TdHJpbmcsQmU9UGUuY2FsbChPZSksVmU9ZnQuXyxEZT1MZShcIl5cIitQZS5jYWxsKEllKS5yZXBsYWNlKHRlLFwiXFxcXCQmXCIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csXCIkMS4qP1wiKStcIiRcIiksWmU9aHQ/dC5CdWZmZXI6bywkZT10LlN5bWJvbCxOZT10LlVpbnQ4QXJyYXksRmU9WmU/WmUuYWxsb2NVbnNhZmU6byxVZT1hbihPZS5nZXRQcm90b3R5cGVPZixPZSksV2U9T2UuY3JlYXRlLHplPWtlLnByb3BlcnR5SXNFbnVtZXJhYmxlLEdlPWplLnNwbGljZSxxZT0kZT8kZS5pc0NvbmNhdFNwcmVhZGFibGU6byxZZT0kZT8kZS5pdGVyYXRvcjpvLEplPSRlPyRlLnRvU3RyaW5nVGFnOm8sZXQ9ZnVuY3Rpb24oKXt0cnl7dmFyIGU9c2koT2UsXCJkZWZpbmVQcm9wZXJ0eVwiKTtyZXR1cm4gZSh7fSxcIlwiLHt9KSxlfWNhdGNoKGUpe319KCksYXQ9dC5jbGVhclRpbWVvdXQhPT1mdC5jbGVhclRpbWVvdXQmJnQuY2xlYXJUaW1lb3V0LGN0PW9lJiZvZS5ub3chPT1mdC5EYXRlLm5vdyYmb2Uubm93LHV0PXQuc2V0VGltZW91dCE9PWZ0LnNldFRpbWVvdXQmJnQuc2V0VGltZW91dCxkdD1fZS5jZWlsLHB0PV9lLmZsb29yLGd0PU9lLmdldE93blByb3BlcnR5U3ltYm9scyx2dD1aZT9aZS5pc0J1ZmZlcjpvLEh0PXQuaXNGaW5pdGUsVXQ9amUuam9pbixobj1hbihPZS5rZXlzLE9lKSxnbj1fZS5tYXgsdm49X2UubWluLG1uPW9lLm5vdyxDbj10LnBhcnNlSW50LHluPV9lLnJhbmRvbSx3bj1qZS5yZXZlcnNlLGJuPXNpKHQsXCJEYXRhVmlld1wiKSx4bj1zaSh0LFwiTWFwXCIpLF9uPXNpKHQsXCJQcm9taXNlXCIpLE9uPXNpKHQsXCJTZXRcIiksTG49c2kodCxcIldlYWtNYXBcIiksRW49c2koT2UsXCJjcmVhdGVcIiksU249TG4mJm5ldyBMbixqbj17fSxNbj1BaShibiksa249QWkoeG4pLFJuPUFpKF9uKSxQbj1BaShPbiksSW49QWkoTG4pLEFuPSRlPyRlLnByb3RvdHlwZTpvLFRuPUFuP0FuLnZhbHVlT2Y6byxIbj1Bbj9Bbi50b1N0cmluZzpvO2Z1bmN0aW9uIEJuKGUpe2lmKFhhKGUpJiYhWmEoZSkmJiEoZSBpbnN0YW5jZW9mICRuKSl7aWYoZSBpbnN0YW5jZW9mIFpuKXJldHVybiBlO2lmKEllLmNhbGwoZSxcIl9fd3JhcHBlZF9fXCIpKXJldHVybiBUaShlKX1yZXR1cm4gbmV3IFpuKGUpfXZhciBWbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCFLYSh0KSlyZXR1cm57fTtpZihXZSlyZXR1cm4gV2UodCk7ZS5wcm90b3R5cGU9dDt2YXIgbj1uZXcgZTtyZXR1cm4gZS5wcm90b3R5cGU9byxufX0oKTtmdW5jdGlvbiBEbigpe31mdW5jdGlvbiBabihlLHQpe3RoaXMuX193cmFwcGVkX189ZSx0aGlzLl9fYWN0aW9uc19fPVtdLHRoaXMuX19jaGFpbl9fPSEhdCx0aGlzLl9faW5kZXhfXz0wLHRoaXMuX192YWx1ZXNfXz1vfWZ1bmN0aW9uICRuKGUpe3RoaXMuX193cmFwcGVkX189ZSx0aGlzLl9fYWN0aW9uc19fPVtdLHRoaXMuX19kaXJfXz0xLHRoaXMuX19maWx0ZXJlZF9fPSExLHRoaXMuX19pdGVyYXRlZXNfXz1bXSx0aGlzLl9fdGFrZUNvdW50X189cCx0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBObihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBGbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBVbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBXbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgVW47Kyt0PG47KXRoaXMuYWRkKGVbdF0pfWZ1bmN0aW9uIHpuKGUpe3ZhciB0PXRoaXMuX19kYXRhX189bmV3IEZuKGUpO3RoaXMuc2l6ZT10LnNpemV9ZnVuY3Rpb24gR24oZSx0KXt2YXIgbj1aYShlKSxyPSFuJiZEYShlKSxvPSFuJiYhciYmVWEoZSksaT0hbiYmIXImJiFvJiZpbChlKSxhPW58fHJ8fG98fGksbD1hP0d0KGUubGVuZ3RoLEVlKTpbXSxzPWwubGVuZ3RoO2Zvcih2YXIgYyBpbiBlKSF0JiYhSWUuY2FsbChlLGMpfHxhJiYoXCJsZW5ndGhcIj09Y3x8byYmKFwib2Zmc2V0XCI9PWN8fFwicGFyZW50XCI9PWMpfHxpJiYoXCJidWZmZXJcIj09Y3x8XCJieXRlTGVuZ3RoXCI9PWN8fFwiYnl0ZU9mZnNldFwiPT1jKXx8Z2koYyxzKSl8fGwucHVzaChjKTtyZXR1cm4gbH1mdW5jdGlvbiBxbihlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gdD9lW1VyKDAsdC0xKV06b31mdW5jdGlvbiBZbihlLHQpe3JldHVybiBSaShFbyhlKSxvcih0LDAsZS5sZW5ndGgpKX1mdW5jdGlvbiBLbihlKXtyZXR1cm4gUmkoRW8oZSkpfWZ1bmN0aW9uIFhuKGUsdCxuKXsobiE9PW8mJiFIYShlW3RdLG4pfHxuPT09byYmISh0IGluIGUpKSYmbnIoZSx0LG4pfWZ1bmN0aW9uIEpuKGUsdCxuKXt2YXIgcj1lW3RdO0llLmNhbGwoZSx0KSYmSGEocixuKSYmKG4hPT1vfHx0IGluIGUpfHxucihlLHQsbil9ZnVuY3Rpb24gUW4oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7bi0tOylpZihIYShlW25dWzBdLHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIGVyKGUsdCxuLHIpe3JldHVybiBjcihlLChmdW5jdGlvbihlLG8saSl7dChyLGUsbihlKSxpKX0pKSxyfWZ1bmN0aW9uIHRyKGUsdCl7cmV0dXJuIGUmJlNvKHQsU2wodCksZSl9ZnVuY3Rpb24gbnIoZSx0LG4pe1wiX19wcm90b19fXCI9PXQmJmV0P2V0KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6bix3cml0YWJsZTohMH0pOmVbdF09bn1mdW5jdGlvbiBycihlLHQpe2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLGE9cihpKSxsPW51bGw9PWU7KytuPGk7KWFbbl09bD9vOnhsKGUsdFtuXSk7cmV0dXJuIGF9ZnVuY3Rpb24gb3IoZSx0LG4pe3JldHVybiBlPT1lJiYobiE9PW8mJihlPWU8PW4/ZTpuKSx0IT09byYmKGU9ZT49dD9lOnQpKSxlfWZ1bmN0aW9uIGlyKGUsdCxuLHIsaSxhKXt2YXIgbCxzPTEmdCxjPTImdCx1PTQmdDtpZihuJiYobD1pP24oZSxyLGksYSk6bihlKSksbCE9PW8pcmV0dXJuIGw7aWYoIUthKGUpKXJldHVybiBlO3ZhciBmPVphKGUpO2lmKGYpe2lmKGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj1uZXcgZS5jb25zdHJ1Y3Rvcih0KTtyZXR1cm4gdCYmXCJzdHJpbmdcIj09dHlwZW9mIGVbMF0mJkllLmNhbGwoZSxcImluZGV4XCIpJiYobi5pbmRleD1lLmluZGV4LG4uaW5wdXQ9ZS5pbnB1dCksbn0oZSksIXMpcmV0dXJuIEVvKGUsbCl9ZWxzZXt2YXIgZD1maShlKSxwPWQ9PXd8fGQ9PWI7aWYoVWEoZSkpcmV0dXJuIHdvKGUscyk7aWYoZD09T3x8ZD09Z3x8cCYmIWkpe2lmKGw9Y3x8cD97fTpwaShlKSwhcylyZXR1cm4gYz9mdW5jdGlvbihlLHQpe3JldHVybiBTbyhlLHVpKGUpLHQpfShlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJlNvKHQsamwodCksZSl9KGwsZSkpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFNvKGUsY2koZSksdCl9KGUsdHIobCxlKSl9ZWxzZXtpZighaXRbZF0pcmV0dXJuIGk/ZTp7fTtsPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvPWUuY29uc3RydWN0b3I7c3dpdGNoKHQpe2Nhc2UgUjpyZXR1cm4gYm8oZSk7Y2FzZSBtOmNhc2UgQzpyZXR1cm4gbmV3IG8oK2UpO2Nhc2UgUDpyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj10P2JvKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IobixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKX0oZSxuKTtjYXNlIEk6Y2FzZSBBOmNhc2UgVDpjYXNlIEg6Y2FzZSBCOmNhc2UgVjpjYXNlIEQ6Y2FzZSBaOmNhc2UgJDpyZXR1cm4geG8oZSxuKTtjYXNlIHg6cmV0dXJuIG5ldyBvO2Nhc2UgXzpjYXNlIGo6cmV0dXJuIG5ldyBvKGUpO2Nhc2UgRTpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5zb3VyY2UsZGUuZXhlYyhlKSk7cmV0dXJuIHQubGFzdEluZGV4PWUubGFzdEluZGV4LHR9KGUpO2Nhc2UgUzpyZXR1cm4gbmV3IG87Y2FzZSBNOnJldHVybiByPWUsVG4/T2UoVG4uY2FsbChyKSk6e319fShlLGQscyl9fWF8fChhPW5ldyB6bik7dmFyIGg9YS5nZXQoZSk7aWYoaClyZXR1cm4gaDthLnNldChlLGwpLG5sKGUpP2UuZm9yRWFjaCgoZnVuY3Rpb24ocil7bC5hZGQoaXIocix0LG4scixlLGEpKX0pKTpKYShlKSYmZS5mb3JFYWNoKChmdW5jdGlvbihyLG8pe2wuc2V0KG8saXIocix0LG4sbyxlLGEpKX0pKTt2YXIgdj1mP286KHU/Yz90aTplaTpjP2psOlNsKShlKTtyZXR1cm4gTHQodnx8ZSwoZnVuY3Rpb24ocixvKXt2JiYocj1lW289cl0pLEpuKGwsbyxpcihyLHQsbixvLGUsYSkpfSkpLGx9ZnVuY3Rpb24gYXIoZSx0LG4pe3ZhciByPW4ubGVuZ3RoO2lmKG51bGw9PWUpcmV0dXJuIXI7Zm9yKGU9T2UoZSk7ci0tOyl7dmFyIGk9bltyXSxhPXRbaV0sbD1lW2ldO2lmKGw9PT1vJiYhKGkgaW4gZSl8fCFhKGwpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGxyKGUsdCxuKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTtyZXR1cm4gU2koKGZ1bmN0aW9uKCl7ZS5hcHBseShvLG4pfSksdCl9ZnVuY3Rpb24gc3IoZSx0LG4scil7dmFyIG89LTEsaT1NdCxhPSEwLGw9ZS5sZW5ndGgscz1bXSxjPXQubGVuZ3RoO2lmKCFsKXJldHVybiBzO24mJih0PVJ0KHQsWXQobikpKSxyPyhpPWt0LGE9ITEpOnQubGVuZ3RoPj0yMDAmJihpPVh0LGE9ITEsdD1uZXcgV24odCkpO2U6Zm9yKDsrK288bDspe3ZhciB1PWVbb10sZj1udWxsPT1uP3U6bih1KTtpZih1PXJ8fDAhPT11P3U6MCxhJiZmPT1mKXtmb3IodmFyIGQ9YztkLS07KWlmKHRbZF09PT1mKWNvbnRpbnVlIGU7cy5wdXNoKHUpfWVsc2UgaSh0LGYscil8fHMucHVzaCh1KX1yZXR1cm4gc31Cbi50ZW1wbGF0ZVNldHRpbmdzPXtlc2NhcGU6WSxldmFsdWF0ZTpLLGludGVycG9sYXRlOlgsdmFyaWFibGU6XCJcIixpbXBvcnRzOntfOkJufX0sQm4ucHJvdG90eXBlPURuLnByb3RvdHlwZSxCbi5wcm90b3R5cGUuY29uc3RydWN0b3I9Qm4sWm4ucHJvdG90eXBlPVZuKERuLnByb3RvdHlwZSksWm4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPVpuLCRuLnByb3RvdHlwZT1WbihEbi5wcm90b3R5cGUpLCRuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0kbixObi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPUVuP0VuKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxObi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fSxObi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX187aWYoRW4pe3ZhciBuPXRbZV07cmV0dXJuIG49PT1hP286bn1yZXR1cm4gSWUuY2FsbCh0LGUpP3RbZV06b30sTm4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBFbj90W2VdIT09bzpJZS5jYWxsKHQsZSl9LE5uLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKGUpPzA6MSxuW2VdPUVuJiZ0PT09bz9hOnQsdGhpc30sRm4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sRm4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49UW4odCxlKTtyZXR1cm4hKG48MHx8KG49PXQubGVuZ3RoLTE/dC5wb3AoKTpHZS5jYWxsKHQsbiwxKSwtLXRoaXMuc2l6ZSwwKSl9LEZuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPVFuKHQsZSk7cmV0dXJuIG48MD9vOnRbbl1bMV19LEZuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIFFuKHRoaXMuX19kYXRhX18sZSk+LTF9LEZuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fLHI9UW4obixlKTtyZXR1cm4gcjwwPygrK3RoaXMuc2l6ZSxuLnB1c2goW2UsdF0pKTpuW3JdWzFdPXQsdGhpc30sVW4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgTm4sbWFwOm5ldyh4bnx8Rm4pLHN0cmluZzpuZXcgTm59fSxVbi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWFpKHRoaXMsZSkuZGVsZXRlKGUpO3JldHVybiB0aGlzLnNpemUtPXQ/MTowLHR9LFVuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFpKHRoaXMsZSkuZ2V0KGUpfSxVbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBhaSh0aGlzLGUpLmhhcyhlKX0sVW4ucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciBuPWFpKHRoaXMsZSkscj1uLnNpemU7cmV0dXJuIG4uc2V0KGUsdCksdGhpcy5zaXplKz1uLnNpemU9PXI/MDoxLHRoaXN9LFduLnByb3RvdHlwZS5hZGQ9V24ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KGUsYSksdGhpc30sV24ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9LHpuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189bmV3IEZuLHRoaXMuc2l6ZT0wfSx6bi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj10LmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplPXQuc2l6ZSxufSx6bi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChlKX0sem4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9LHpuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO2lmKG4gaW5zdGFuY2VvZiBGbil7dmFyIHI9bi5fX2RhdGFfXztpZigheG58fHIubGVuZ3RoPDE5OSlyZXR1cm4gci5wdXNoKFtlLHRdKSx0aGlzLnNpemU9KytuLnNpemUsdGhpcztuPXRoaXMuX19kYXRhX189bmV3IFVuKHIpfXJldHVybiBuLnNldChlLHQpLHRoaXMuc2l6ZT1uLnNpemUsdGhpc307dmFyIGNyPWtvKG1yKSx1cj1rbyhDciwhMCk7ZnVuY3Rpb24gZnIoZSx0KXt2YXIgbj0hMDtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLG8pe3JldHVybiBuPSEhdChlLHIsbyl9KSksbn1mdW5jdGlvbiBkcihlLHQsbil7Zm9yKHZhciByPS0xLGk9ZS5sZW5ndGg7KytyPGk7KXt2YXIgYT1lW3JdLGw9dChhKTtpZihudWxsIT1sJiYocz09PW8/bD09bCYmIW9sKGwpOm4obCxzKSkpdmFyIHM9bCxjPWF9cmV0dXJuIGN9ZnVuY3Rpb24gcHIoZSx0KXt2YXIgbj1bXTtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLG8pe3QoZSxyLG8pJiZuLnB1c2goZSl9KSksbn1mdW5jdGlvbiBocihlLHQsbixyLG8pe3ZhciBpPS0xLGE9ZS5sZW5ndGg7Zm9yKG58fChuPWhpKSxvfHwobz1bXSk7KytpPGE7KXt2YXIgbD1lW2ldO3Q+MCYmbihsKT90PjE/aHIobCx0LTEsbixyLG8pOlB0KG8sbCk6cnx8KG9bby5sZW5ndGhdPWwpfXJldHVybiBvfXZhciBncj1SbygpLHZyPVJvKCEwKTtmdW5jdGlvbiBtcihlLHQpe3JldHVybiBlJiZncihlLHQsU2wpfWZ1bmN0aW9uIENyKGUsdCl7cmV0dXJuIGUmJnZyKGUsdCxTbCl9ZnVuY3Rpb24geXIoZSx0KXtyZXR1cm4ganQodCwoZnVuY3Rpb24odCl7cmV0dXJuIEdhKGVbdF0pfSkpfWZ1bmN0aW9uIHdyKGUsdCl7Zm9yKHZhciBuPTAscj0odD12byh0LGUpKS5sZW5ndGg7bnVsbCE9ZSYmbjxyOyllPWVbSWkodFtuKytdKV07cmV0dXJuIG4mJm49PXI/ZTpvfWZ1bmN0aW9uIGJyKGUsdCxuKXt2YXIgcj10KGUpO3JldHVybiBaYShlKT9yOlB0KHIsbihlKSl9ZnVuY3Rpb24geHIoZSl7cmV0dXJuIG51bGw9PWU/ZT09PW8/XCJbb2JqZWN0IFVuZGVmaW5lZF1cIjpcIltvYmplY3QgTnVsbF1cIjpKZSYmSmUgaW4gT2UoZSk/ZnVuY3Rpb24oZSl7dmFyIHQ9SWUuY2FsbChlLEplKSxuPWVbSmVdO3RyeXtlW0plXT1vO3ZhciByPSEwfWNhdGNoKGUpe312YXIgaT1IZS5jYWxsKGUpO3JldHVybiByJiYodD9lW0plXT1uOmRlbGV0ZSBlW0plXSksaX0oZSk6ZnVuY3Rpb24oZSl7cmV0dXJuIEhlLmNhbGwoZSl9KGUpfWZ1bmN0aW9uIF9yKGUsdCl7cmV0dXJuIGU+dH1mdW5jdGlvbiBPcihlLHQpe3JldHVybiBudWxsIT1lJiZJZS5jYWxsKGUsdCl9ZnVuY3Rpb24gTHIoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmdCBpbiBPZShlKX1mdW5jdGlvbiBFcihlLHQsbil7Zm9yKHZhciBpPW4/a3Q6TXQsYT1lWzBdLmxlbmd0aCxsPWUubGVuZ3RoLHM9bCxjPXIobCksdT0xLzAsZj1bXTtzLS07KXt2YXIgZD1lW3NdO3MmJnQmJihkPVJ0KGQsWXQodCkpKSx1PXZuKGQubGVuZ3RoLHUpLGNbc109IW4mJih0fHxhPj0xMjAmJmQubGVuZ3RoPj0xMjApP25ldyBXbihzJiZkKTpvfWQ9ZVswXTt2YXIgcD0tMSxoPWNbMF07ZTpmb3IoOysrcDxhJiZmLmxlbmd0aDx1Oyl7dmFyIGc9ZFtwXSx2PXQ/dChnKTpnO2lmKGc9bnx8MCE9PWc/ZzowLCEoaD9YdChoLHYpOmkoZix2LG4pKSl7Zm9yKHM9bDstLXM7KXt2YXIgbT1jW3NdO2lmKCEobT9YdChtLHYpOmkoZVtzXSx2LG4pKSljb250aW51ZSBlfWgmJmgucHVzaCh2KSxmLnB1c2goZyl9fXJldHVybiBmfWZ1bmN0aW9uIFNyKGUsdCxuKXt2YXIgcj1udWxsPT0oZT1PaShlLHQ9dm8odCxlKSkpP2U6ZVtJaSh6aSh0KSldO3JldHVybiBudWxsPT1yP286X3QocixlLG4pfWZ1bmN0aW9uIGpyKGUpe3JldHVybiBYYShlKSYmeHIoZSk9PWd9ZnVuY3Rpb24gTXIoZSx0LG4scixpKXtyZXR1cm4gZT09PXR8fChudWxsPT1lfHxudWxsPT10fHwhWGEoZSkmJiFYYSh0KT9lIT1lJiZ0IT10OmZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2YXIgbD1aYShlKSxzPVphKHQpLGM9bD92OmZpKGUpLHU9cz92OmZpKHQpLGY9KGM9Yz09Zz9POmMpPT1PLGQ9KHU9dT09Zz9POnUpPT1PLHA9Yz09dTtpZihwJiZVYShlKSl7aWYoIVVhKHQpKXJldHVybiExO2w9ITAsZj0hMX1pZihwJiYhZilyZXR1cm4gYXx8KGE9bmV3IHpuKSxsfHxpbChlKT9KbyhlLHQsbixyLGksYSk6ZnVuY3Rpb24oZSx0LG4scixvLGksYSl7c3dpdGNoKG4pe2Nhc2UgUDppZihlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8ZS5ieXRlT2Zmc2V0IT10LmJ5dGVPZmZzZXQpcmV0dXJuITE7ZT1lLmJ1ZmZlcix0PXQuYnVmZmVyO2Nhc2UgUjpyZXR1cm4hKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHwhaShuZXcgTmUoZSksbmV3IE5lKHQpKSk7Y2FzZSBtOmNhc2UgQzpjYXNlIF86cmV0dXJuIEhhKCtlLCt0KTtjYXNlIHk6cmV0dXJuIGUubmFtZT09dC5uYW1lJiZlLm1lc3NhZ2U9PXQubWVzc2FnZTtjYXNlIEU6Y2FzZSBqOnJldHVybiBlPT10K1wiXCI7Y2FzZSB4OnZhciBsPW9uO2Nhc2UgUzp2YXIgcz0xJnI7aWYobHx8KGw9c24pLGUuc2l6ZSE9dC5zaXplJiYhcylyZXR1cm4hMTt2YXIgYz1hLmdldChlKTtpZihjKXJldHVybiBjPT10O3J8PTIsYS5zZXQoZSx0KTt2YXIgdT1KbyhsKGUpLGwodCkscixvLGksYSk7cmV0dXJuIGEuZGVsZXRlKGUpLHU7Y2FzZSBNOmlmKFRuKXJldHVybiBUbi5jYWxsKGUpPT1Ubi5jYWxsKHQpfXJldHVybiExfShlLHQsYyxuLHIsaSxhKTtpZighKDEmbikpe3ZhciBoPWYmJkllLmNhbGwoZSxcIl9fd3JhcHBlZF9fXCIpLHc9ZCYmSWUuY2FsbCh0LFwiX193cmFwcGVkX19cIik7aWYoaHx8dyl7dmFyIGI9aD9lLnZhbHVlKCk6ZSxMPXc/dC52YWx1ZSgpOnQ7cmV0dXJuIGF8fChhPW5ldyB6biksaShiLEwsbixyLGEpfX1yZXR1cm4hIXAmJihhfHwoYT1uZXcgem4pLGZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2YXIgbD0xJm4scz1laShlKSxjPXMubGVuZ3RoO2lmKGMhPWVpKHQpLmxlbmd0aCYmIWwpcmV0dXJuITE7Zm9yKHZhciB1PWM7dS0tOyl7dmFyIGY9c1t1XTtpZighKGw/ZiBpbiB0OkllLmNhbGwodCxmKSkpcmV0dXJuITF9dmFyIGQ9YS5nZXQoZSkscD1hLmdldCh0KTtpZihkJiZwKXJldHVybiBkPT10JiZwPT1lO3ZhciBoPSEwO2Euc2V0KGUsdCksYS5zZXQodCxlKTtmb3IodmFyIGc9bDsrK3U8Yzspe3ZhciB2PWVbZj1zW3VdXSxtPXRbZl07aWYocil2YXIgQz1sP3IobSx2LGYsdCxlLGEpOnIodixtLGYsZSx0LGEpO2lmKCEoQz09PW8/dj09PW18fGkodixtLG4scixhKTpDKSl7aD0hMTticmVha31nfHwoZz1cImNvbnN0cnVjdG9yXCI9PWYpfWlmKGgmJiFnKXt2YXIgeT1lLmNvbnN0cnVjdG9yLHc9dC5jb25zdHJ1Y3Rvcjt5PT13fHwhKFwiY29uc3RydWN0b3JcImluIGUpfHwhKFwiY29uc3RydWN0b3JcImluIHQpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB5JiZ5IGluc3RhbmNlb2YgeSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdyYmdyBpbnN0YW5jZW9mIHd8fChoPSExKX1yZXR1cm4gYS5kZWxldGUoZSksYS5kZWxldGUodCksaH0oZSx0LG4scixpLGEpKX0oZSx0LG4scixNcixpKSl9ZnVuY3Rpb24ga3IoZSx0LG4scil7dmFyIGk9bi5sZW5ndGgsYT1pLGw9IXI7aWYobnVsbD09ZSlyZXR1cm4hYTtmb3IoZT1PZShlKTtpLS07KXt2YXIgcz1uW2ldO2lmKGwmJnNbMl0/c1sxXSE9PWVbc1swXV06IShzWzBdaW4gZSkpcmV0dXJuITF9Zm9yKDsrK2k8YTspe3ZhciBjPShzPW5baV0pWzBdLHU9ZVtjXSxmPXNbMV07aWYobCYmc1syXSl7aWYodT09PW8mJiEoYyBpbiBlKSlyZXR1cm4hMX1lbHNle3ZhciBkPW5ldyB6bjtpZihyKXZhciBwPXIodSxmLGMsZSx0LGQpO2lmKCEocD09PW8/TXIoZix1LDMscixkKTpwKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gUnIoZSl7cmV0dXJuISghS2EoZSl8fCh0PWUsVGUmJlRlIGluIHQpKSYmKEdhKGUpP0RlOmdlKS50ZXN0KEFpKGUpKTt2YXIgdH1mdW5jdGlvbiBQcihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6bnVsbD09ZT9RbDpcIm9iamVjdFwiPT10eXBlb2YgZT9aYShlKT9CcihlWzBdLGVbMV0pOkhyKGUpOnNzKGUpfWZ1bmN0aW9uIElyKGUpe2lmKCF3aShlKSlyZXR1cm4gaG4oZSk7dmFyIHQ9W107Zm9yKHZhciBuIGluIE9lKGUpKUllLmNhbGwoZSxuKSYmXCJjb25zdHJ1Y3RvclwiIT1uJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gQXIoZSx0KXtyZXR1cm4gZTx0fWZ1bmN0aW9uIFRyKGUsdCl7dmFyIG49LTEsbz1OYShlKT9yKGUubGVuZ3RoKTpbXTtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLGkpe29bKytuXT10KGUscixpKX0pKSxvfWZ1bmN0aW9uIEhyKGUpe3ZhciB0PWxpKGUpO3JldHVybiAxPT10Lmxlbmd0aCYmdFswXVsyXT94aSh0WzBdWzBdLHRbMF1bMV0pOmZ1bmN0aW9uKG4pe3JldHVybiBuPT09ZXx8a3IobixlLHQpfX1mdW5jdGlvbiBCcihlLHQpe3JldHVybiBtaShlKSYmYmkodCk/eGkoSWkoZSksdCk6ZnVuY3Rpb24obil7dmFyIHI9eGwobixlKTtyZXR1cm4gcj09PW8mJnI9PT10P19sKG4sZSk6TXIodCxyLDMpfX1mdW5jdGlvbiBWcihlLHQsbixyLGkpe2UhPT10JiZncih0LChmdW5jdGlvbihhLGwpe2lmKGl8fChpPW5ldyB6biksS2EoYSkpIWZ1bmN0aW9uKGUsdCxuLHIsaSxhLGwpe3ZhciBzPUxpKGUsbiksYz1MaSh0LG4pLHU9bC5nZXQoYyk7aWYodSlYbihlLG4sdSk7ZWxzZXt2YXIgZj1hP2EocyxjLG4rXCJcIixlLHQsbCk6byxkPWY9PT1vO2lmKGQpe3ZhciBwPVphKGMpLGg9IXAmJlVhKGMpLGc9IXAmJiFoJiZpbChjKTtmPWMscHx8aHx8Zz9aYShzKT9mPXM6RmEocyk/Zj1FbyhzKTpoPyhkPSExLGY9d28oYywhMCkpOmc/KGQ9ITEsZj14byhjLCEwKSk6Zj1bXTplbChjKXx8RGEoYyk/KGY9cyxEYShzKT9mPXBsKHMpOkthKHMpJiYhR2Eocyl8fChmPXBpKGMpKSk6ZD0hMX1kJiYobC5zZXQoYyxmKSxpKGYsYyxyLGEsbCksbC5kZWxldGUoYykpLFhuKGUsbixmKX19KGUsdCxsLG4sVnIscixpKTtlbHNle3ZhciBzPXI/cihMaShlLGwpLGEsbCtcIlwiLGUsdCxpKTpvO3M9PT1vJiYocz1hKSxYbihlLGwscyl9fSksamwpfWZ1bmN0aW9uIERyKGUsdCl7dmFyIG49ZS5sZW5ndGg7aWYobilyZXR1cm4gZ2kodCs9dDwwP246MCxuKT9lW3RdOm99ZnVuY3Rpb24gWnIoZSx0LG4pe3Q9dC5sZW5ndGg/UnQodCwoZnVuY3Rpb24oZSl7cmV0dXJuIFphKGUpP2Z1bmN0aW9uKHQpe3JldHVybiB3cih0LDE9PT1lLmxlbmd0aD9lWzBdOmUpfTplfSkpOltRbF07dmFyIHI9LTE7dD1SdCh0LFl0KGlpKCkpKTt2YXIgbz1UcihlLChmdW5jdGlvbihlLG4sbyl7dmFyIGk9UnQodCwoZnVuY3Rpb24odCl7cmV0dXJuIHQoZSl9KSk7cmV0dXJue2NyaXRlcmlhOmksaW5kZXg6KytyLHZhbHVlOmV9fSkpO3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciBuPWUubGVuZ3RoO2ZvcihlLnNvcnQodCk7bi0tOyllW25dPWVbbl0udmFsdWU7cmV0dXJuIGV9KG8sKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9LTEsbz1lLmNyaXRlcmlhLGk9dC5jcml0ZXJpYSxhPW8ubGVuZ3RoLGw9bi5sZW5ndGg7KytyPGE7KXt2YXIgcz1fbyhvW3JdLGlbcl0pO2lmKHMpcmV0dXJuIHI+PWw/czpzKihcImRlc2NcIj09bltyXT8tMToxKX1yZXR1cm4gZS5pbmRleC10LmluZGV4fShlLHQsbil9KSl9ZnVuY3Rpb24gJHIoZSx0LG4pe2Zvcih2YXIgcj0tMSxvPXQubGVuZ3RoLGk9e307KytyPG87KXt2YXIgYT10W3JdLGw9d3IoZSxhKTtuKGwsYSkmJllyKGksdm8oYSxlKSxsKX1yZXR1cm4gaX1mdW5jdGlvbiBOcihlLHQsbixyKXt2YXIgbz1yP1p0OkR0LGk9LTEsYT10Lmxlbmd0aCxsPWU7Zm9yKGU9PT10JiYodD1Fbyh0KSksbiYmKGw9UnQoZSxZdChuKSkpOysraTxhOylmb3IodmFyIHM9MCxjPXRbaV0sdT1uP24oYyk6Yzsocz1vKGwsdSxzLHIpKT4tMTspbCE9PWUmJkdlLmNhbGwobCxzLDEpLEdlLmNhbGwoZSxzLDEpO3JldHVybiBlfWZ1bmN0aW9uIEZyKGUsdCl7Zm9yKHZhciBuPWU/dC5sZW5ndGg6MCxyPW4tMTtuLS07KXt2YXIgbz10W25dO2lmKG49PXJ8fG8hPT1pKXt2YXIgaT1vO2dpKG8pP0dlLmNhbGwoZSxvLDEpOmxvKGUsbyl9fXJldHVybiBlfWZ1bmN0aW9uIFVyKGUsdCl7cmV0dXJuIGUrcHQoeW4oKSoodC1lKzEpKX1mdW5jdGlvbiBXcihlLHQpe3ZhciBuPVwiXCI7aWYoIWV8fHQ8MXx8dD5mKXJldHVybiBuO2Rve3QlMiYmKG4rPWUpLCh0PXB0KHQvMikpJiYoZSs9ZSl9d2hpbGUodCk7cmV0dXJuIG59ZnVuY3Rpb24genIoZSx0KXtyZXR1cm4gamkoX2koZSx0LFFsKSxlK1wiXCIpfWZ1bmN0aW9uIEdyKGUpe3JldHVybiBxbihIbChlKSl9ZnVuY3Rpb24gcXIoZSx0KXt2YXIgbj1IbChlKTtyZXR1cm4gUmkobixvcih0LDAsbi5sZW5ndGgpKX1mdW5jdGlvbiBZcihlLHQsbixyKXtpZighS2EoZSkpcmV0dXJuIGU7Zm9yKHZhciBpPS0xLGE9KHQ9dm8odCxlKSkubGVuZ3RoLGw9YS0xLHM9ZTtudWxsIT1zJiYrK2k8YTspe3ZhciBjPUlpKHRbaV0pLHU9bjtpZihcIl9fcHJvdG9fX1wiPT09Y3x8XCJjb25zdHJ1Y3RvclwiPT09Y3x8XCJwcm90b3R5cGVcIj09PWMpcmV0dXJuIGU7aWYoaSE9bCl7dmFyIGY9c1tjXTsodT1yP3IoZixjLHMpOm8pPT09byYmKHU9S2EoZik/ZjpnaSh0W2krMV0pP1tdOnt9KX1KbihzLGMsdSkscz1zW2NdfXJldHVybiBlfXZhciBLcj1Tbj9mdW5jdGlvbihlLHQpe3JldHVybiBTbi5zZXQoZSx0KSxlfTpRbCxYcj1ldD9mdW5jdGlvbihlLHQpe3JldHVybiBldChlLFwidG9TdHJpbmdcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6S2wodCksd3JpdGFibGU6ITB9KX06UWw7ZnVuY3Rpb24gSnIoZSl7cmV0dXJuIFJpKEhsKGUpKX1mdW5jdGlvbiBRcihlLHQsbil7dmFyIG89LTEsaT1lLmxlbmd0aDt0PDAmJih0PS10Pmk/MDppK3QpLChuPW4+aT9pOm4pPDAmJihuKz1pKSxpPXQ+bj8wOm4tdD4+PjAsdD4+Pj0wO2Zvcih2YXIgYT1yKGkpOysrbzxpOylhW29dPWVbbyt0XTtyZXR1cm4gYX1mdW5jdGlvbiBlbyhlLHQpe3ZhciBuO3JldHVybiBjcihlLChmdW5jdGlvbihlLHIsbyl7cmV0dXJuIShuPXQoZSxyLG8pKX0pKSwhIW59ZnVuY3Rpb24gdG8oZSx0LG4pe3ZhciByPTAsbz1udWxsPT1lP3I6ZS5sZW5ndGg7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ9PXQmJm88PTIxNDc0ODM2NDcpe2Zvcig7cjxvOyl7dmFyIGk9citvPj4+MSxhPWVbaV07bnVsbCE9PWEmJiFvbChhKSYmKG4/YTw9dDphPHQpP3I9aSsxOm89aX1yZXR1cm4gb31yZXR1cm4gbm8oZSx0LFFsLG4pfWZ1bmN0aW9uIG5vKGUsdCxuLHIpe3ZhciBpPTAsYT1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoMD09PWEpcmV0dXJuIDA7Zm9yKHZhciBsPSh0PW4odCkpIT10LHM9bnVsbD09PXQsYz1vbCh0KSx1PXQ9PT1vO2k8YTspe3ZhciBmPXB0KChpK2EpLzIpLGQ9bihlW2ZdKSxwPWQhPT1vLGg9bnVsbD09PWQsZz1kPT1kLHY9b2woZCk7aWYobCl2YXIgbT1yfHxnO2Vsc2UgbT11P2cmJihyfHxwKTpzP2cmJnAmJihyfHwhaCk6Yz9nJiZwJiYhaCYmKHJ8fCF2KTohaCYmIXYmJihyP2Q8PXQ6ZDx0KTttP2k9ZisxOmE9Zn1yZXR1cm4gdm4oYSw0Mjk0OTY3Mjk0KX1mdW5jdGlvbiBybyhlLHQpe2Zvcih2YXIgbj0tMSxyPWUubGVuZ3RoLG89MCxpPVtdOysrbjxyOyl7dmFyIGE9ZVtuXSxsPXQ/dChhKTphO2lmKCFufHwhSGEobCxzKSl7dmFyIHM9bDtpW28rK109MD09PWE/MDphfX1yZXR1cm4gaX1mdW5jdGlvbiBvbyhlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZT9lOm9sKGUpP2Q6K2V9ZnVuY3Rpb24gaW8oZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoWmEoZSkpcmV0dXJuIFJ0KGUsaW8pK1wiXCI7aWYob2woZSkpcmV0dXJuIEhuP0huLmNhbGwoZSk6XCJcIjt2YXIgdD1lK1wiXCI7cmV0dXJuXCIwXCI9PXQmJjEvZT09LTEvMD9cIi0wXCI6dH1mdW5jdGlvbiBhbyhlLHQsbil7dmFyIHI9LTEsbz1NdCxpPWUubGVuZ3RoLGE9ITAsbD1bXSxzPWw7aWYobilhPSExLG89a3Q7ZWxzZSBpZihpPj0yMDApe3ZhciBjPXQ/bnVsbDp6byhlKTtpZihjKXJldHVybiBzbihjKTthPSExLG89WHQscz1uZXcgV259ZWxzZSBzPXQ/W106bDtlOmZvcig7KytyPGk7KXt2YXIgdT1lW3JdLGY9dD90KHUpOnU7aWYodT1ufHwwIT09dT91OjAsYSYmZj09Zil7Zm9yKHZhciBkPXMubGVuZ3RoO2QtLTspaWYoc1tkXT09PWYpY29udGludWUgZTt0JiZzLnB1c2goZiksbC5wdXNoKHUpfWVsc2UgbyhzLGYsbil8fChzIT09bCYmcy5wdXNoKGYpLGwucHVzaCh1KSl9cmV0dXJuIGx9ZnVuY3Rpb24gbG8oZSx0KXtyZXR1cm4gbnVsbD09KGU9T2koZSx0PXZvKHQsZSkpKXx8ZGVsZXRlIGVbSWkoemkodCkpXX1mdW5jdGlvbiBzbyhlLHQsbixyKXtyZXR1cm4gWXIoZSx0LG4od3IoZSx0KSkscil9ZnVuY3Rpb24gY28oZSx0LG4scil7Zm9yKHZhciBvPWUubGVuZ3RoLGk9cj9vOi0xOyhyP2ktLTorK2k8bykmJnQoZVtpXSxpLGUpOyk7cmV0dXJuIG4/UXIoZSxyPzA6aSxyP2krMTpvKTpRcihlLHI/aSsxOjAscj9vOmkpfWZ1bmN0aW9uIHVvKGUsdCl7dmFyIG49ZTtyZXR1cm4gbiBpbnN0YW5jZW9mICRuJiYobj1uLnZhbHVlKCkpLEl0KHQsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZnVuYy5hcHBseSh0LnRoaXNBcmcsUHQoW2VdLHQuYXJncykpfSksbil9ZnVuY3Rpb24gZm8oZSx0LG4pe3ZhciBvPWUubGVuZ3RoO2lmKG88MilyZXR1cm4gbz9hbyhlWzBdKTpbXTtmb3IodmFyIGk9LTEsYT1yKG8pOysraTxvOylmb3IodmFyIGw9ZVtpXSxzPS0xOysrczxvOylzIT1pJiYoYVtpXT1zcihhW2ldfHxsLGVbc10sdCxuKSk7cmV0dXJuIGFvKGhyKGEsMSksdCxuKX1mdW5jdGlvbiBwbyhlLHQsbil7Zm9yKHZhciByPS0xLGk9ZS5sZW5ndGgsYT10Lmxlbmd0aCxsPXt9OysrcjxpOyl7dmFyIHM9cjxhP3Rbcl06bztuKGwsZVtyXSxzKX1yZXR1cm4gbH1mdW5jdGlvbiBobyhlKXtyZXR1cm4gRmEoZSk/ZTpbXX1mdW5jdGlvbiBnbyhlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6UWx9ZnVuY3Rpb24gdm8oZSx0KXtyZXR1cm4gWmEoZSk/ZTptaShlLHQpP1tlXTpQaShobChlKSl9dmFyIG1vPXpyO2Z1bmN0aW9uIENvKGUsdCxuKXt2YXIgcj1lLmxlbmd0aDtyZXR1cm4gbj1uPT09bz9yOm4sIXQmJm4+PXI/ZTpRcihlLHQsbil9dmFyIHlvPWF0fHxmdW5jdGlvbihlKXtyZXR1cm4gZnQuY2xlYXJUaW1lb3V0KGUpfTtmdW5jdGlvbiB3byhlLHQpe2lmKHQpcmV0dXJuIGUuc2xpY2UoKTt2YXIgbj1lLmxlbmd0aCxyPUZlP0ZlKG4pOm5ldyBlLmNvbnN0cnVjdG9yKG4pO3JldHVybiBlLmNvcHkocikscn1mdW5jdGlvbiBibyhlKXt2YXIgdD1uZXcgZS5jb25zdHJ1Y3RvcihlLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgTmUodCkuc2V0KG5ldyBOZShlKSksdH1mdW5jdGlvbiB4byhlLHQpe3ZhciBuPXQ/Ym8oZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihuLGUuYnl0ZU9mZnNldCxlLmxlbmd0aCl9ZnVuY3Rpb24gX28oZSx0KXtpZihlIT09dCl7dmFyIG49ZSE9PW8scj1udWxsPT09ZSxpPWU9PWUsYT1vbChlKSxsPXQhPT1vLHM9bnVsbD09PXQsYz10PT10LHU9b2wodCk7aWYoIXMmJiF1JiYhYSYmZT50fHxhJiZsJiZjJiYhcyYmIXV8fHImJmwmJmN8fCFuJiZjfHwhaSlyZXR1cm4gMTtpZighciYmIWEmJiF1JiZlPHR8fHUmJm4mJmkmJiFyJiYhYXx8cyYmbiYmaXx8IWwmJml8fCFjKXJldHVybi0xfXJldHVybiAwfWZ1bmN0aW9uIE9vKGUsdCxuLG8pe2Zvcih2YXIgaT0tMSxhPWUubGVuZ3RoLGw9bi5sZW5ndGgscz0tMSxjPXQubGVuZ3RoLHU9Z24oYS1sLDApLGY9cihjK3UpLGQ9IW87KytzPGM7KWZbc109dFtzXTtmb3IoOysraTxsOykoZHx8aTxhKSYmKGZbbltpXV09ZVtpXSk7Zm9yKDt1LS07KWZbcysrXT1lW2krK107cmV0dXJuIGZ9ZnVuY3Rpb24gTG8oZSx0LG4sbyl7Zm9yKHZhciBpPS0xLGE9ZS5sZW5ndGgsbD0tMSxzPW4ubGVuZ3RoLGM9LTEsdT10Lmxlbmd0aCxmPWduKGEtcywwKSxkPXIoZit1KSxwPSFvOysraTxmOylkW2ldPWVbaV07Zm9yKHZhciBoPWk7KytjPHU7KWRbaCtjXT10W2NdO2Zvcig7KytsPHM7KShwfHxpPGEpJiYoZFtoK25bbF1dPWVbaSsrXSk7cmV0dXJuIGR9ZnVuY3Rpb24gRW8oZSx0KXt2YXIgbj0tMSxvPWUubGVuZ3RoO2Zvcih0fHwodD1yKG8pKTsrK248bzspdFtuXT1lW25dO3JldHVybiB0fWZ1bmN0aW9uIFNvKGUsdCxuLHIpe3ZhciBpPSFuO258fChuPXt9KTtmb3IodmFyIGE9LTEsbD10Lmxlbmd0aDsrK2E8bDspe3ZhciBzPXRbYV0sYz1yP3IobltzXSxlW3NdLHMsbixlKTpvO2M9PT1vJiYoYz1lW3NdKSxpP25yKG4scyxjKTpKbihuLHMsYyl9cmV0dXJuIG59ZnVuY3Rpb24gam8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2YXIgbz1aYShuKT9PdDplcixpPXQ/dCgpOnt9O3JldHVybiBvKG4sZSxpaShyLDIpLGkpfX1mdW5jdGlvbiBNbyhlKXtyZXR1cm4genIoKGZ1bmN0aW9uKHQsbil7dmFyIHI9LTEsaT1uLmxlbmd0aCxhPWk+MT9uW2ktMV06byxsPWk+Mj9uWzJdOm87Zm9yKGE9ZS5sZW5ndGg+MyYmXCJmdW5jdGlvblwiPT10eXBlb2YgYT8oaS0tLGEpOm8sbCYmdmkoblswXSxuWzFdLGwpJiYoYT1pPDM/bzphLGk9MSksdD1PZSh0KTsrK3I8aTspe3ZhciBzPW5bcl07cyYmZSh0LHMscixhKX1yZXR1cm4gdH0pKX1mdW5jdGlvbiBrbyhlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe2lmKG51bGw9PW4pcmV0dXJuIG47aWYoIU5hKG4pKXJldHVybiBlKG4scik7Zm9yKHZhciBvPW4ubGVuZ3RoLGk9dD9vOi0xLGE9T2Uobik7KHQ/aS0tOisraTxvKSYmITEhPT1yKGFbaV0saSxhKTspO3JldHVybiBufX1mdW5jdGlvbiBSbyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe2Zvcih2YXIgbz0tMSxpPU9lKHQpLGE9cih0KSxsPWEubGVuZ3RoO2wtLTspe3ZhciBzPWFbZT9sOisrb107aWYoITE9PT1uKGlbc10scyxpKSlicmVha31yZXR1cm4gdH19ZnVuY3Rpb24gUG8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXJuKHQ9aGwodCkpP3VuKHQpOm8scj1uP25bMF06dC5jaGFyQXQoMCksaT1uP0NvKG4sMSkuam9pbihcIlwiKTp0LnNsaWNlKDEpO3JldHVybiByW2VdKCkraX19ZnVuY3Rpb24gSW8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBJdChHbChEbCh0KS5yZXBsYWNlKEtlLFwiXCIpKSxlLFwiXCIpfX1mdW5jdGlvbiBBbyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHM7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBlO2Nhc2UgMTpyZXR1cm4gbmV3IGUodFswXSk7Y2FzZSAyOnJldHVybiBuZXcgZSh0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSk7Y2FzZSA1OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0pO2Nhc2UgNjpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0pO2Nhc2UgNzpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0sdFs2XSl9dmFyIG49Vm4oZS5wcm90b3R5cGUpLHI9ZS5hcHBseShuLHQpO3JldHVybiBLYShyKT9yOm59fWZ1bmN0aW9uIFRvKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7dmFyIGk9T2UodCk7aWYoIU5hKHQpKXt2YXIgYT1paShuLDMpO3Q9U2wodCksbj1mdW5jdGlvbihlKXtyZXR1cm4gYShpW2VdLGUsaSl9fXZhciBsPWUodCxuLHIpO3JldHVybiBsPi0xP2lbYT90W2xdOmxdOm99fWZ1bmN0aW9uIEhvKGUpe3JldHVybiBRbygoZnVuY3Rpb24odCl7dmFyIG49dC5sZW5ndGgscj1uLGE9Wm4ucHJvdG90eXBlLnRocnU7Zm9yKGUmJnQucmV2ZXJzZSgpO3ItLTspe3ZhciBsPXRbcl07aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgbCl0aHJvdyBuZXcgU2UoaSk7aWYoYSYmIXMmJlwid3JhcHBlclwiPT1yaShsKSl2YXIgcz1uZXcgWm4oW10sITApfWZvcihyPXM/cjpuOysrcjxuOyl7dmFyIGM9cmkobD10W3JdKSx1PVwid3JhcHBlclwiPT1jP25pKGwpOm87cz11JiZDaSh1WzBdKSYmNDI0PT11WzFdJiYhdVs0XS5sZW5ndGgmJjE9PXVbOV0/c1tyaSh1WzBdKV0uYXBwbHkocyx1WzNdKToxPT1sLmxlbmd0aCYmQ2kobCk/c1tjXSgpOnMudGhydShsKX1yZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMscj1lWzBdO2lmKHMmJjE9PWUubGVuZ3RoJiZaYShyKSlyZXR1cm4gcy5wbGFudChyKS52YWx1ZSgpO2Zvcih2YXIgbz0wLGk9bj90W29dLmFwcGx5KHRoaXMsZSk6cjsrK288bjspaT10W29dLmNhbGwodGhpcyxpKTtyZXR1cm4gaX19KSl9ZnVuY3Rpb24gQm8oZSx0LG4saSxhLGwscyx1LGYsZCl7dmFyIHA9dCZjLGg9MSZ0LGc9MiZ0LHY9MjQmdCxtPTUxMiZ0LEM9Zz9vOkFvKGUpO3JldHVybiBmdW5jdGlvbiBjKCl7Zm9yKHZhciB5PWFyZ3VtZW50cy5sZW5ndGgsdz1yKHkpLGI9eTtiLS07KXdbYl09YXJndW1lbnRzW2JdO2lmKHYpdmFyIHg9b2koYyksXz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aCxyPTA7bi0tOyllW25dPT09dCYmKytyO3JldHVybiByfSh3LHgpO2lmKGkmJih3PU9vKHcsaSxhLHYpKSxsJiYodz1Mbyh3LGwscyx2KSkseS09Xyx2JiZ5PGQpe3ZhciBPPWxuKHcseCk7cmV0dXJuIFVvKGUsdCxCbyxjLnBsYWNlaG9sZGVyLG4sdyxPLHUsZixkLXkpfXZhciBMPWg/bjp0aGlzLEU9Zz9MW2VdOmU7cmV0dXJuIHk9dy5sZW5ndGgsdT93PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9dm4odC5sZW5ndGgsbiksaT1FbyhlKTtyLS07KXt2YXIgYT10W3JdO2Vbcl09Z2koYSxuKT9pW2FdOm99cmV0dXJuIGV9KHcsdSk6bSYmeT4xJiZ3LnJldmVyc2UoKSxwJiZmPHkmJih3Lmxlbmd0aD1mKSx0aGlzJiZ0aGlzIT09ZnQmJnRoaXMgaW5zdGFuY2VvZiBjJiYoRT1DfHxBbyhFKSksRS5hcHBseShMLHcpfX1mdW5jdGlvbiBWbyhlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3JldHVybiBmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbXIoZSwoZnVuY3Rpb24oZSxvLGkpe3QocixuKGUpLG8saSl9KSkscn0obixlLHQocikse30pfX1mdW5jdGlvbiBEbyhlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBpO2lmKG49PT1vJiZyPT09bylyZXR1cm4gdDtpZihuIT09byYmKGk9biksciE9PW8pe2lmKGk9PT1vKXJldHVybiByO1wic3RyaW5nXCI9PXR5cGVvZiBufHxcInN0cmluZ1wiPT10eXBlb2Ygcj8obj1pbyhuKSxyPWlvKHIpKToobj1vbyhuKSxyPW9vKHIpKSxpPWUobixyKX1yZXR1cm4gaX19ZnVuY3Rpb24gWm8oZSl7cmV0dXJuIFFvKChmdW5jdGlvbih0KXtyZXR1cm4gdD1SdCh0LFl0KGlpKCkpKSx6cigoZnVuY3Rpb24obil7dmFyIHI9dGhpcztyZXR1cm4gZSh0LChmdW5jdGlvbihlKXtyZXR1cm4gX3QoZSxyLG4pfSkpfSkpfSkpfWZ1bmN0aW9uICRvKGUsdCl7dmFyIG49KHQ9dD09PW8/XCIgXCI6aW8odCkpLmxlbmd0aDtpZihuPDIpcmV0dXJuIG4/V3IodCxlKTp0O3ZhciByPVdyKHQsZHQoZS9jbih0KSkpO3JldHVybiBybih0KT9Dbyh1bihyKSwwLGUpLmpvaW4oXCJcIik6ci5zbGljZSgwLGUpfWZ1bmN0aW9uIE5vKGUpe3JldHVybiBmdW5jdGlvbih0LG4saSl7cmV0dXJuIGkmJlwibnVtYmVyXCIhPXR5cGVvZiBpJiZ2aSh0LG4saSkmJihuPWk9byksdD1jbCh0KSxuPT09bz8obj10LHQ9MCk6bj1jbChuKSxmdW5jdGlvbihlLHQsbixvKXtmb3IodmFyIGk9LTEsYT1nbihkdCgodC1lKS8obnx8MSkpLDApLGw9cihhKTthLS07KWxbbz9hOisraV09ZSxlKz1uO3JldHVybiBsfSh0LG4saT1pPT09bz90PG4/MTotMTpjbChpKSxlKX19ZnVuY3Rpb24gRm8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJlwic3RyaW5nXCI9PXR5cGVvZiBufHwodD1kbCh0KSxuPWRsKG4pKSxlKHQsbil9fWZ1bmN0aW9uIFVvKGUsdCxuLHIsaSxhLGwsYyx1LGYpe3ZhciBkPTgmdDt0fD1kP3M6NjQsNCYodCY9fihkPzY0OnMpKXx8KHQmPS00KTt2YXIgcD1bZSx0LGksZD9hOm8sZD9sOm8sZD9vOmEsZD9vOmwsYyx1LGZdLGg9bi5hcHBseShvLHApO3JldHVybiBDaShlKSYmRWkoaCxwKSxoLnBsYWNlaG9sZGVyPXIsTWkoaCxlLHQpfWZ1bmN0aW9uIFdvKGUpe3ZhciB0PV9lW2VdO3JldHVybiBmdW5jdGlvbihlLG4pe2lmKGU9ZGwoZSksKG49bnVsbD09bj8wOnZuKHVsKG4pLDI5MikpJiZIdChlKSl7dmFyIHI9KGhsKGUpK1wiZVwiKS5zcGxpdChcImVcIik7cmV0dXJuKygocj0oaGwodChyWzBdK1wiZVwiKygrclsxXStuKSkpK1wiZVwiKS5zcGxpdChcImVcIikpWzBdK1wiZVwiKygrclsxXS1uKSl9cmV0dXJuIHQoZSl9fXZhciB6bz1PbiYmMS9zbihuZXcgT24oWywtMF0pKVsxXT09dT9mdW5jdGlvbihlKXtyZXR1cm4gbmV3IE9uKGUpfTpvcztmdW5jdGlvbiBHbyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49ZmkodCk7cmV0dXJuIG49PXg/b24odCk6bj09Uz9mdW5jdGlvbihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7blsrK3RdPVtlLGVdfSkpLG59KHQpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFJ0KHQsKGZ1bmN0aW9uKHQpe3JldHVyblt0LGVbdF1dfSkpfSh0LGUodCkpfX1mdW5jdGlvbiBxbyhlLHQsbixhLHUsZixkLHApe3ZhciBoPTImdDtpZighaCYmXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgU2UoaSk7dmFyIGc9YT9hLmxlbmd0aDowO2lmKGd8fCh0Jj0tOTcsYT11PW8pLGQ9ZD09PW8/ZDpnbih1bChkKSwwKSxwPXA9PT1vP3A6dWwocCksZy09dT91Lmxlbmd0aDowLDY0JnQpe3ZhciB2PWEsbT11O2E9dT1vfXZhciBDPWg/bzpuaShlKSx5PVtlLHQsbixhLHUsdixtLGYsZCxwXTtpZihDJiZmdW5jdGlvbihlLHQpe3ZhciBuPWVbMV0scj10WzFdLG89bnxyLGk9bzwxMzEsYT1yPT1jJiY4PT1ufHxyPT1jJiYyNTY9PW4mJmVbN10ubGVuZ3RoPD10WzhdfHwzODQ9PXImJnRbN10ubGVuZ3RoPD10WzhdJiY4PT1uO2lmKCFpJiYhYSlyZXR1cm4gZTsxJnImJihlWzJdPXRbMl0sb3w9MSZuPzA6NCk7dmFyIHM9dFszXTtpZihzKXt2YXIgdT1lWzNdO2VbM109dT9Pbyh1LHMsdFs0XSk6cyxlWzRdPXU/bG4oZVszXSxsKTp0WzRdfShzPXRbNV0pJiYodT1lWzVdLGVbNV09dT9Mbyh1LHMsdFs2XSk6cyxlWzZdPXU/bG4oZVs1XSxsKTp0WzZdKSwocz10WzddKSYmKGVbN109cyksciZjJiYoZVs4XT1udWxsPT1lWzhdP3RbOF06dm4oZVs4XSx0WzhdKSksbnVsbD09ZVs5XSYmKGVbOV09dFs5XSksZVswXT10WzBdLGVbMV09b30oeSxDKSxlPXlbMF0sdD15WzFdLG49eVsyXSxhPXlbM10sdT15WzRdLCEocD15WzldPXlbOV09PT1vP2g/MDplLmxlbmd0aDpnbih5WzldLWcsMCkpJiYyNCZ0JiYodCY9LTI1KSx0JiYxIT10KXc9OD09dHx8MTY9PXQ/ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPUFvKGUpO3JldHVybiBmdW5jdGlvbiBhKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgscz1yKGwpLGM9bCx1PW9pKGEpO2MtLTspc1tjXT1hcmd1bWVudHNbY107dmFyIGY9bDwzJiZzWzBdIT09dSYmc1tsLTFdIT09dT9bXTpsbihzLHUpO3JldHVybihsLT1mLmxlbmd0aCk8bj9VbyhlLHQsQm8sYS5wbGFjZWhvbGRlcixvLHMsZixvLG8sbi1sKTpfdCh0aGlzJiZ0aGlzIT09ZnQmJnRoaXMgaW5zdGFuY2VvZiBhP2k6ZSx0aGlzLHMpfX0oZSx0LHApOnQhPXMmJjMzIT10fHx1Lmxlbmd0aD9Cby5hcHBseShvLHkpOmZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBpPTEmdCxhPUFvKGUpO3JldHVybiBmdW5jdGlvbiB0KCl7Zm9yKHZhciBsPS0xLHM9YXJndW1lbnRzLmxlbmd0aCxjPS0xLHU9by5sZW5ndGgsZj1yKHUrcyksZD10aGlzJiZ0aGlzIT09ZnQmJnRoaXMgaW5zdGFuY2VvZiB0P2E6ZTsrK2M8dTspZltjXT1vW2NdO2Zvcig7cy0tOylmW2MrK109YXJndW1lbnRzWysrbF07cmV0dXJuIF90KGQsaT9uOnRoaXMsZil9fShlLHQsbixhKTtlbHNlIHZhciB3PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0xJnQsbz1BbyhlKTtyZXR1cm4gZnVuY3Rpb24gdCgpe3JldHVybih0aGlzJiZ0aGlzIT09ZnQmJnRoaXMgaW5zdGFuY2VvZiB0P286ZSkuYXBwbHkocj9uOnRoaXMsYXJndW1lbnRzKX19KGUsdCxuKTtyZXR1cm4gTWkoKEM/S3I6RWkpKHcseSksZSx0KX1mdW5jdGlvbiBZbyhlLHQsbixyKXtyZXR1cm4gZT09PW98fEhhKGUsa2Vbbl0pJiYhSWUuY2FsbChyLG4pP3Q6ZX1mdW5jdGlvbiBLbyhlLHQsbixyLGksYSl7cmV0dXJuIEthKGUpJiZLYSh0KSYmKGEuc2V0KHQsZSksVnIoZSx0LG8sS28sYSksYS5kZWxldGUodCkpLGV9ZnVuY3Rpb24gWG8oZSl7cmV0dXJuIGVsKGUpP286ZX1mdW5jdGlvbiBKbyhlLHQsbixyLGksYSl7dmFyIGw9MSZuLHM9ZS5sZW5ndGgsYz10Lmxlbmd0aDtpZihzIT1jJiYhKGwmJmM+cykpcmV0dXJuITE7dmFyIHU9YS5nZXQoZSksZj1hLmdldCh0KTtpZih1JiZmKXJldHVybiB1PT10JiZmPT1lO3ZhciBkPS0xLHA9ITAsaD0yJm4/bmV3IFduOm87Zm9yKGEuc2V0KGUsdCksYS5zZXQodCxlKTsrK2Q8czspe3ZhciBnPWVbZF0sdj10W2RdO2lmKHIpdmFyIG09bD9yKHYsZyxkLHQsZSxhKTpyKGcsdixkLGUsdCxhKTtpZihtIT09byl7aWYobSljb250aW51ZTtwPSExO2JyZWFrfWlmKGgpe2lmKCFUdCh0LChmdW5jdGlvbihlLHQpe2lmKCFYdChoLHQpJiYoZz09PWV8fGkoZyxlLG4scixhKSkpcmV0dXJuIGgucHVzaCh0KX0pKSl7cD0hMTticmVha319ZWxzZSBpZihnIT09diYmIWkoZyx2LG4scixhKSl7cD0hMTticmVha319cmV0dXJuIGEuZGVsZXRlKGUpLGEuZGVsZXRlKHQpLHB9ZnVuY3Rpb24gUW8oZSl7cmV0dXJuIGppKF9pKGUsbywkaSksZStcIlwiKX1mdW5jdGlvbiBlaShlKXtyZXR1cm4gYnIoZSxTbCxjaSl9ZnVuY3Rpb24gdGkoZSl7cmV0dXJuIGJyKGUsamwsdWkpfXZhciBuaT1Tbj9mdW5jdGlvbihlKXtyZXR1cm4gU24uZ2V0KGUpfTpvcztmdW5jdGlvbiByaShlKXtmb3IodmFyIHQ9ZS5uYW1lK1wiXCIsbj1qblt0XSxyPUllLmNhbGwoam4sdCk/bi5sZW5ndGg6MDtyLS07KXt2YXIgbz1uW3JdLGk9by5mdW5jO2lmKG51bGw9PWl8fGk9PWUpcmV0dXJuIG8ubmFtZX1yZXR1cm4gdH1mdW5jdGlvbiBvaShlKXtyZXR1cm4oSWUuY2FsbChCbixcInBsYWNlaG9sZGVyXCIpP0JuOmUpLnBsYWNlaG9sZGVyfWZ1bmN0aW9uIGlpKCl7dmFyIGU9Qm4uaXRlcmF0ZWV8fGVzO3JldHVybiBlPWU9PT1lcz9QcjplLGFyZ3VtZW50cy5sZW5ndGg/ZShhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdKTplfWZ1bmN0aW9uIGFpKGUsdCl7dmFyIG4scixvPWUuX19kYXRhX187cmV0dXJuKFwic3RyaW5nXCI9PShyPXR5cGVvZihuPXQpKXx8XCJudW1iZXJcIj09cnx8XCJzeW1ib2xcIj09cnx8XCJib29sZWFuXCI9PXI/XCJfX3Byb3RvX19cIiE9PW46bnVsbD09PW4pP29bXCJzdHJpbmdcIj09dHlwZW9mIHQ/XCJzdHJpbmdcIjpcImhhc2hcIl06by5tYXB9ZnVuY3Rpb24gbGkoZSl7Zm9yKHZhciB0PVNsKGUpLG49dC5sZW5ndGg7bi0tOyl7dmFyIHI9dFtuXSxvPWVbcl07dFtuXT1bcixvLGJpKG8pXX1yZXR1cm4gdH1mdW5jdGlvbiBzaShlLHQpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/bzplW3RdfShlLHQpO3JldHVybiBScihuKT9uOm99dmFyIGNpPWd0P2Z1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOihlPU9lKGUpLGp0KGd0KGUpLChmdW5jdGlvbih0KXtyZXR1cm4gemUuY2FsbChlLHQpfSkpKX06ZnMsdWk9Z3Q/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdO2U7KVB0KHQsY2koZSkpLGU9VWUoZSk7cmV0dXJuIHR9OmZzLGZpPXhyO2Z1bmN0aW9uIGRpKGUsdCxuKXtmb3IodmFyIHI9LTEsbz0odD12byh0LGUpKS5sZW5ndGgsaT0hMTsrK3I8bzspe3ZhciBhPUlpKHRbcl0pO2lmKCEoaT1udWxsIT1lJiZuKGUsYSkpKWJyZWFrO2U9ZVthXX1yZXR1cm4gaXx8KytyIT1vP2k6ISEobz1udWxsPT1lPzA6ZS5sZW5ndGgpJiZZYShvKSYmZ2koYSxvKSYmKFphKGUpfHxEYShlKSl9ZnVuY3Rpb24gcGkoZSl7cmV0dXJuXCJmdW5jdGlvblwiIT10eXBlb2YgZS5jb25zdHJ1Y3Rvcnx8d2koZSk/e306Vm4oVWUoZSkpfWZ1bmN0aW9uIGhpKGUpe3JldHVybiBaYShlKXx8RGEoZSl8fCEhKHFlJiZlJiZlW3FlXSl9ZnVuY3Rpb24gZ2koZSx0KXt2YXIgbj10eXBlb2YgZTtyZXR1cm4hISh0PW51bGw9PXQ/Zjp0KSYmKFwibnVtYmVyXCI9PW58fFwic3ltYm9sXCIhPW4mJm1lLnRlc3QoZSkpJiZlPi0xJiZlJTE9PTAmJmU8dH1mdW5jdGlvbiB2aShlLHQsbil7aWYoIUthKG4pKXJldHVybiExO3ZhciByPXR5cGVvZiB0O3JldHVybiEhKFwibnVtYmVyXCI9PXI/TmEobikmJmdpKHQsbi5sZW5ndGgpOlwic3RyaW5nXCI9PXImJnQgaW4gbikmJkhhKG5bdF0sZSl9ZnVuY3Rpb24gbWkoZSx0KXtpZihaYShlKSlyZXR1cm4hMTt2YXIgbj10eXBlb2YgZTtyZXR1cm4hKFwibnVtYmVyXCIhPW4mJlwic3ltYm9sXCIhPW4mJlwiYm9vbGVhblwiIT1uJiZudWxsIT1lJiYhb2woZSkpfHxRLnRlc3QoZSl8fCFKLnRlc3QoZSl8fG51bGwhPXQmJmUgaW4gT2UodCl9ZnVuY3Rpb24gQ2koZSl7dmFyIHQ9cmkoZSksbj1Cblt0XTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBufHwhKHQgaW4gJG4ucHJvdG90eXBlKSlyZXR1cm4hMTtpZihlPT09bilyZXR1cm4hMDt2YXIgcj1uaShuKTtyZXR1cm4hIXImJmU9PT1yWzBdfShibiYmZmkobmV3IGJuKG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1QfHx4biYmZmkobmV3IHhuKSE9eHx8X24mJmZpKF9uLnJlc29sdmUoKSkhPUx8fE9uJiZmaShuZXcgT24pIT1TfHxMbiYmZmkobmV3IExuKSE9aykmJihmaT1mdW5jdGlvbihlKXt2YXIgdD14cihlKSxuPXQ9PU8/ZS5jb25zdHJ1Y3RvcjpvLHI9bj9BaShuKTpcIlwiO2lmKHIpc3dpdGNoKHIpe2Nhc2UgTW46cmV0dXJuIFA7Y2FzZSBrbjpyZXR1cm4geDtjYXNlIFJuOnJldHVybiBMO2Nhc2UgUG46cmV0dXJuIFM7Y2FzZSBJbjpyZXR1cm4ga31yZXR1cm4gdH0pO3ZhciB5aT1SZT9HYTpkcztmdW5jdGlvbiB3aShlKXt2YXIgdD1lJiZlLmNvbnN0cnVjdG9yO3JldHVybiBlPT09KFwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJnQucHJvdG90eXBlfHxrZSl9ZnVuY3Rpb24gYmkoZSl7cmV0dXJuIGU9PWUmJiFLYShlKX1mdW5jdGlvbiB4aShlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbnVsbCE9biYmbltlXT09PXQmJih0IT09b3x8ZSBpbiBPZShuKSl9fWZ1bmN0aW9uIF9pKGUsdCxuKXtyZXR1cm4gdD1nbih0PT09bz9lLmxlbmd0aC0xOnQsMCksZnVuY3Rpb24oKXtmb3IodmFyIG89YXJndW1lbnRzLGk9LTEsYT1nbihvLmxlbmd0aC10LDApLGw9cihhKTsrK2k8YTspbFtpXT1vW3QraV07aT0tMTtmb3IodmFyIHM9cih0KzEpOysraTx0OylzW2ldPW9baV07cmV0dXJuIHNbdF09bihsKSxfdChlLHRoaXMscyl9fWZ1bmN0aW9uIE9pKGUsdCl7cmV0dXJuIHQubGVuZ3RoPDI/ZTp3cihlLFFyKHQsMCwtMSkpfWZ1bmN0aW9uIExpKGUsdCl7aWYoKFwiY29uc3RydWN0b3JcIiE9PXR8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGVbdF0pJiZcIl9fcHJvdG9fX1wiIT10KXJldHVybiBlW3RdfXZhciBFaT1raShLciksU2k9dXR8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ0LnNldFRpbWVvdXQoZSx0KX0samk9a2koWHIpO2Z1bmN0aW9uIE1pKGUsdCxuKXt2YXIgcj10K1wiXCI7cmV0dXJuIGppKGUsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lmxlbmd0aDtpZighbilyZXR1cm4gZTt2YXIgcj1uLTE7cmV0dXJuIHRbcl09KG4+MT9cIiYgXCI6XCJcIikrdFtyXSx0PXQuam9pbihuPjI/XCIsIFwiOlwiIFwiKSxlLnJlcGxhY2UoaWUsXCJ7XFxuLyogW3dyYXBwZWQgd2l0aCBcIit0K1wiXSAqL1xcblwiKX0ocixmdW5jdGlvbihlLHQpe3JldHVybiBMdChoLChmdW5jdGlvbihuKXt2YXIgcj1cIl8uXCIrblswXTt0Jm5bMV0mJiFNdChlLHIpJiZlLnB1c2gocil9KSksZS5zb3J0KCl9KGZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goYWUpO3JldHVybiB0P3RbMV0uc3BsaXQobGUpOltdfShyKSxuKSkpfWZ1bmN0aW9uIGtpKGUpe3ZhciB0PTAsbj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciByPW1uKCksaT0xNi0oci1uKTtpZihuPXIsaT4wKXtpZigrK3Q+PTgwMClyZXR1cm4gYXJndW1lbnRzWzBdfWVsc2UgdD0wO3JldHVybiBlLmFwcGx5KG8sYXJndW1lbnRzKX19ZnVuY3Rpb24gUmkoZSx0KXt2YXIgbj0tMSxyPWUubGVuZ3RoLGk9ci0xO2Zvcih0PXQ9PT1vP3I6dDsrK248dDspe3ZhciBhPVVyKG4saSksbD1lW2FdO2VbYV09ZVtuXSxlW25dPWx9cmV0dXJuIGUubGVuZ3RoPXQsZX12YXIgUGk9ZnVuY3Rpb24oZSl7dmFyIHQ9a2EoKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiA0Nj09PWUuY2hhckNvZGVBdCgwKSYmdC5wdXNoKFwiXCIpLGUucmVwbGFjZShlZSwoZnVuY3Rpb24oZSxuLHIsbyl7dC5wdXNoKHI/by5yZXBsYWNlKHVlLFwiJDFcIik6bnx8ZSl9KSksdH0pLChmdW5jdGlvbihlKXtyZXR1cm4gNTAwPT09bi5zaXplJiZuLmNsZWFyKCksZX0pKSxuPXQuY2FjaGU7cmV0dXJuIHR9KCk7ZnVuY3Rpb24gSWkoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGV8fG9sKGUpKXJldHVybiBlO3ZhciB0PWUrXCJcIjtyZXR1cm5cIjBcIj09dCYmMS9lPT0tMS8wP1wiLTBcIjp0fWZ1bmN0aW9uIEFpKGUpe2lmKG51bGwhPWUpe3RyeXtyZXR1cm4gUGUuY2FsbChlKX1jYXRjaChlKXt9dHJ5e3JldHVybiBlK1wiXCJ9Y2F0Y2goZSl7fX1yZXR1cm5cIlwifWZ1bmN0aW9uIFRpKGUpe2lmKGUgaW5zdGFuY2VvZiAkbilyZXR1cm4gZS5jbG9uZSgpO3ZhciB0PW5ldyBabihlLl9fd3JhcHBlZF9fLGUuX19jaGFpbl9fKTtyZXR1cm4gdC5fX2FjdGlvbnNfXz1FbyhlLl9fYWN0aW9uc19fKSx0Ll9faW5kZXhfXz1lLl9faW5kZXhfXyx0Ll9fdmFsdWVzX189ZS5fX3ZhbHVlc19fLHR9dmFyIEhpPXpyKChmdW5jdGlvbihlLHQpe3JldHVybiBGYShlKT9zcihlLGhyKHQsMSxGYSwhMCkpOltdfSkpLEJpPXpyKChmdW5jdGlvbihlLHQpe3ZhciBuPXppKHQpO3JldHVybiBGYShuKSYmKG49byksRmEoZSk/c3IoZSxocih0LDEsRmEsITApLGlpKG4sMikpOltdfSkpLFZpPXpyKChmdW5jdGlvbihlLHQpe3ZhciBuPXppKHQpO3JldHVybiBGYShuKSYmKG49byksRmEoZSk/c3IoZSxocih0LDEsRmEsITApLG8sbik6W119KSk7ZnVuY3Rpb24gRGkoZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtpZighcilyZXR1cm4tMTt2YXIgbz1udWxsPT1uPzA6dWwobik7cmV0dXJuIG88MCYmKG89Z24ocitvLDApKSxWdChlLGlpKHQsMyksbyl9ZnVuY3Rpb24gWmkoZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtpZighcilyZXR1cm4tMTt2YXIgaT1yLTE7cmV0dXJuIG4hPT1vJiYoaT11bChuKSxpPW48MD9nbihyK2ksMCk6dm4oaSxyLTEpKSxWdChlLGlpKHQsMyksaSwhMCl9ZnVuY3Rpb24gJGkoZSl7cmV0dXJuIG51bGwhPWUmJmUubGVuZ3RoP2hyKGUsMSk6W119ZnVuY3Rpb24gTmkoZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2VbMF06b312YXIgRmk9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PVJ0KGUsaG8pO3JldHVybiB0Lmxlbmd0aCYmdFswXT09PWVbMF0/RXIodCk6W119KSksVWk9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PXppKGUpLG49UnQoZSxobyk7cmV0dXJuIHQ9PT16aShuKT90PW86bi5wb3AoKSxuLmxlbmd0aCYmblswXT09PWVbMF0/RXIobixpaSh0LDIpKTpbXX0pKSxXaT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9emkoZSksbj1SdChlLGhvKTtyZXR1cm4odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6bykmJm4ucG9wKCksbi5sZW5ndGgmJm5bMF09PT1lWzBdP0VyKG4sbyx0KTpbXX0pKTtmdW5jdGlvbiB6aShlKXt2YXIgdD1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHQ/ZVt0LTFdOm99dmFyIEdpPXpyKHFpKTtmdW5jdGlvbiBxaShlLHQpe3JldHVybiBlJiZlLmxlbmd0aCYmdCYmdC5sZW5ndGg/TnIoZSx0KTplfXZhciBZaT1RbygoZnVuY3Rpb24oZSx0KXt2YXIgbj1udWxsPT1lPzA6ZS5sZW5ndGgscj1ycihlLHQpO3JldHVybiBGcihlLFJ0KHQsKGZ1bmN0aW9uKGUpe3JldHVybiBnaShlLG4pPytlOmV9KSkuc29ydChfbykpLHJ9KSk7ZnVuY3Rpb24gS2koZSl7cmV0dXJuIG51bGw9PWU/ZTp3bi5jYWxsKGUpfXZhciBYaT16cigoZnVuY3Rpb24oZSl7cmV0dXJuIGFvKGhyKGUsMSxGYSwhMCkpfSkpLEppPXpyKChmdW5jdGlvbihlKXt2YXIgdD16aShlKTtyZXR1cm4gRmEodCkmJih0PW8pLGFvKGhyKGUsMSxGYSwhMCksaWkodCwyKSl9KSksUWk9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PXppKGUpO3JldHVybiB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvLGFvKGhyKGUsMSxGYSwhMCksbyx0KX0pKTtmdW5jdGlvbiBlYShlKXtpZighZXx8IWUubGVuZ3RoKXJldHVybltdO3ZhciB0PTA7cmV0dXJuIGU9anQoZSwoZnVuY3Rpb24oZSl7aWYoRmEoZSkpcmV0dXJuIHQ9Z24oZS5sZW5ndGgsdCksITB9KSksR3QodCwoZnVuY3Rpb24odCl7cmV0dXJuIFJ0KGUsRnQodCkpfSkpfWZ1bmN0aW9uIHRhKGUsdCl7aWYoIWV8fCFlLmxlbmd0aClyZXR1cm5bXTt2YXIgbj1lYShlKTtyZXR1cm4gbnVsbD09dD9uOlJ0KG4sKGZ1bmN0aW9uKGUpe3JldHVybiBfdCh0LG8sZSl9KSl9dmFyIG5hPXpyKChmdW5jdGlvbihlLHQpe3JldHVybiBGYShlKT9zcihlLHQpOltdfSkpLHJhPXpyKChmdW5jdGlvbihlKXtyZXR1cm4gZm8oanQoZSxGYSkpfSkpLG9hPXpyKChmdW5jdGlvbihlKXt2YXIgdD16aShlKTtyZXR1cm4gRmEodCkmJih0PW8pLGZvKGp0KGUsRmEpLGlpKHQsMikpfSkpLGlhPXpyKChmdW5jdGlvbihlKXt2YXIgdD16aShlKTtyZXR1cm4gdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byxmbyhqdChlLEZhKSxvLHQpfSkpLGFhPXpyKGVhKSxsYT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj10PjE/ZVt0LTFdOm87cmV0dXJuIG49XCJmdW5jdGlvblwiPT10eXBlb2Ygbj8oZS5wb3AoKSxuKTpvLHRhKGUsbil9KSk7ZnVuY3Rpb24gc2EoZSl7dmFyIHQ9Qm4oZSk7cmV0dXJuIHQuX19jaGFpbl9fPSEwLHR9ZnVuY3Rpb24gY2EoZSx0KXtyZXR1cm4gdChlKX12YXIgdWE9UW8oKGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49dD9lWzBdOjAscj10aGlzLl9fd3JhcHBlZF9fLGk9ZnVuY3Rpb24odCl7cmV0dXJuIHJyKHQsZSl9O3JldHVybiEodD4xfHx0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCkmJnIgaW5zdGFuY2VvZiAkbiYmZ2kobik/KChyPXIuc2xpY2UobiwrbisodD8xOjApKSkuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpjYSxhcmdzOltpXSx0aGlzQXJnOm99KSxuZXcgWm4ocix0aGlzLl9fY2hhaW5fXykudGhydSgoZnVuY3Rpb24oZSl7cmV0dXJuIHQmJiFlLmxlbmd0aCYmZS5wdXNoKG8pLGV9KSkpOnRoaXMudGhydShpKX0pKSxmYT1qbygoZnVuY3Rpb24oZSx0LG4pe0llLmNhbGwoZSxuKT8rK2Vbbl06bnIoZSxuLDEpfSkpLGRhPVRvKERpKSxwYT1UbyhaaSk7ZnVuY3Rpb24gaGEoZSx0KXtyZXR1cm4oWmEoZSk/THQ6Y3IpKGUsaWkodCwzKSl9ZnVuY3Rpb24gZ2EoZSx0KXtyZXR1cm4oWmEoZSk/RXQ6dXIpKGUsaWkodCwzKSl9dmFyIHZhPWpvKChmdW5jdGlvbihlLHQsbil7SWUuY2FsbChlLG4pP2Vbbl0ucHVzaCh0KTpucihlLG4sW3RdKX0pKSxtYT16cigoZnVuY3Rpb24oZSx0LG4pe3ZhciBvPS0xLGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdCxhPU5hKGUpP3IoZS5sZW5ndGgpOltdO3JldHVybiBjcihlLChmdW5jdGlvbihlKXthWysrb109aT9fdCh0LGUsbik6U3IoZSx0LG4pfSkpLGF9KSksQ2E9am8oKGZ1bmN0aW9uKGUsdCxuKXtucihlLG4sdCl9KSk7ZnVuY3Rpb24geWEoZSx0KXtyZXR1cm4oWmEoZSk/UnQ6VHIpKGUsaWkodCwzKSl9dmFyIHdhPWpvKChmdW5jdGlvbihlLHQsbil7ZVtuPzA6MV0ucHVzaCh0KX0pLChmdW5jdGlvbigpe3JldHVybltbXSxbXV19KSksYmE9enIoKGZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm5bXTt2YXIgbj10Lmxlbmd0aDtyZXR1cm4gbj4xJiZ2aShlLHRbMF0sdFsxXSk/dD1bXTpuPjImJnZpKHRbMF0sdFsxXSx0WzJdKSYmKHQ9W3RbMF1dKSxacihlLGhyKHQsMSksW10pfSkpLHhhPWN0fHxmdW5jdGlvbigpe3JldHVybiBmdC5EYXRlLm5vdygpfTtmdW5jdGlvbiBfYShlLHQsbil7cmV0dXJuIHQ9bj9vOnQsdD1lJiZudWxsPT10P2UubGVuZ3RoOnQscW8oZSxjLG8sbyxvLG8sdCl9ZnVuY3Rpb24gT2EoZSx0KXt2YXIgbjtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBTZShpKTtyZXR1cm4gZT11bChlKSxmdW5jdGlvbigpe3JldHVybi0tZT4wJiYobj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksZTw9MSYmKHQ9byksbn19dmFyIExhPXpyKChmdW5jdGlvbihlLHQsbil7dmFyIHI9MTtpZihuLmxlbmd0aCl7dmFyIG89bG4obixvaShMYSkpO3J8PXN9cmV0dXJuIHFvKGUscix0LG4sbyl9KSksRWE9enIoKGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0zO2lmKG4ubGVuZ3RoKXt2YXIgbz1sbihuLG9pKEVhKSk7cnw9c31yZXR1cm4gcW8odCxyLGUsbixvKX0pKTtmdW5jdGlvbiBTYShlLHQsbil7dmFyIHIsYSxsLHMsYyx1LGY9MCxkPSExLHA9ITEsaD0hMDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTtmdW5jdGlvbiBnKHQpe3ZhciBuPXIsaT1hO3JldHVybiByPWE9byxmPXQscz1lLmFwcGx5KGksbil9ZnVuY3Rpb24gdihlKXt2YXIgbj1lLXU7cmV0dXJuIHU9PT1vfHxuPj10fHxuPDB8fHAmJmUtZj49bH1mdW5jdGlvbiBtKCl7dmFyIGU9eGEoKTtpZih2KGUpKXJldHVybiBDKGUpO2M9U2kobSxmdW5jdGlvbihlKXt2YXIgbj10LShlLXUpO3JldHVybiBwP3ZuKG4sbC0oZS1mKSk6bn0oZSkpfWZ1bmN0aW9uIEMoZSl7cmV0dXJuIGM9byxoJiZyP2coZSk6KHI9YT1vLHMpfWZ1bmN0aW9uIHkoKXt2YXIgZT14YSgpLG49dihlKTtpZihyPWFyZ3VtZW50cyxhPXRoaXMsdT1lLG4pe2lmKGM9PT1vKXJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZj1lLGM9U2kobSx0KSxkP2coZSk6c30odSk7aWYocClyZXR1cm4geW8oYyksYz1TaShtLHQpLGcodSl9cmV0dXJuIGM9PT1vJiYoYz1TaShtLHQpKSxzfXJldHVybiB0PWRsKHQpfHwwLEthKG4pJiYoZD0hIW4ubGVhZGluZyxsPShwPVwibWF4V2FpdFwiaW4gbik/Z24oZGwobi5tYXhXYWl0KXx8MCx0KTpsLGg9XCJ0cmFpbGluZ1wiaW4gbj8hIW4udHJhaWxpbmc6aCkseS5jYW5jZWw9ZnVuY3Rpb24oKXtjIT09byYmeW8oYyksZj0wLHI9dT1hPWM9b30seS5mbHVzaD1mdW5jdGlvbigpe3JldHVybiBjPT09bz9zOkMoeGEoKSl9LHl9dmFyIGphPXpyKChmdW5jdGlvbihlLHQpe3JldHVybiBscihlLDEsdCl9KSksTWE9enIoKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbHIoZSxkbCh0KXx8MCxuKX0pKTtmdW5jdGlvbiBrYShlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGV8fG51bGwhPXQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFNlKGkpO3ZhciBuPWZ1bmN0aW9uKCl7dmFyIHI9YXJndW1lbnRzLG89dD90LmFwcGx5KHRoaXMscik6clswXSxpPW4uY2FjaGU7aWYoaS5oYXMobykpcmV0dXJuIGkuZ2V0KG8pO3ZhciBhPWUuYXBwbHkodGhpcyxyKTtyZXR1cm4gbi5jYWNoZT1pLnNldChvLGEpfHxpLGF9O3JldHVybiBuLmNhY2hlPW5ldyhrYS5DYWNoZXx8VW4pLG59ZnVuY3Rpb24gUmEoZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgU2UoaSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiFlLmNhbGwodGhpcyk7Y2FzZSAxOnJldHVybiFlLmNhbGwodGhpcyx0WzBdKTtjYXNlIDI6cmV0dXJuIWUuY2FsbCh0aGlzLHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiFlLmNhbGwodGhpcyx0WzBdLHRbMV0sdFsyXSl9cmV0dXJuIWUuYXBwbHkodGhpcyx0KX19a2EuQ2FjaGU9VW47dmFyIFBhPW1vKChmdW5jdGlvbihlLHQpe3ZhciBuPSh0PTE9PXQubGVuZ3RoJiZaYSh0WzBdKT9SdCh0WzBdLFl0KGlpKCkpKTpSdChocih0LDEpLFl0KGlpKCkpKSkubGVuZ3RoO3JldHVybiB6cigoZnVuY3Rpb24ocil7Zm9yKHZhciBvPS0xLGk9dm4oci5sZW5ndGgsbik7KytvPGk7KXJbb109dFtvXS5jYWxsKHRoaXMscltvXSk7cmV0dXJuIF90KGUsdGhpcyxyKX0pKX0pKSxJYT16cigoZnVuY3Rpb24oZSx0KXt2YXIgbj1sbih0LG9pKElhKSk7cmV0dXJuIHFvKGUscyxvLHQsbil9KSksQWE9enIoKGZ1bmN0aW9uKGUsdCl7dmFyIG49bG4odCxvaShBYSkpO3JldHVybiBxbyhlLDY0LG8sdCxuKX0pKSxUYT1RbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gcW8oZSwyNTYsbyxvLG8sdCl9KSk7ZnVuY3Rpb24gSGEoZSx0KXtyZXR1cm4gZT09PXR8fGUhPWUmJnQhPXR9dmFyIEJhPUZvKF9yKSxWYT1GbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT49dH0pKSxEYT1qcihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP2pyOmZ1bmN0aW9uKGUpe3JldHVybiBYYShlKSYmSWUuY2FsbChlLFwiY2FsbGVlXCIpJiYhemUuY2FsbChlLFwiY2FsbGVlXCIpfSxaYT1yLmlzQXJyYXksJGE9bXQ/WXQobXQpOmZ1bmN0aW9uKGUpe3JldHVybiBYYShlKSYmeHIoZSk9PVJ9O2Z1bmN0aW9uIE5hKGUpe3JldHVybiBudWxsIT1lJiZZYShlLmxlbmd0aCkmJiFHYShlKX1mdW5jdGlvbiBGYShlKXtyZXR1cm4gWGEoZSkmJk5hKGUpfXZhciBVYT12dHx8ZHMsV2E9Q3Q/WXQoQ3QpOmZ1bmN0aW9uKGUpe3JldHVybiBYYShlKSYmeHIoZSk9PUN9O2Z1bmN0aW9uIHphKGUpe2lmKCFYYShlKSlyZXR1cm4hMTt2YXIgdD14cihlKTtyZXR1cm4gdD09eXx8XCJbb2JqZWN0IERPTUV4Y2VwdGlvbl1cIj09dHx8XCJzdHJpbmdcIj09dHlwZW9mIGUubWVzc2FnZSYmXCJzdHJpbmdcIj09dHlwZW9mIGUubmFtZSYmIWVsKGUpfWZ1bmN0aW9uIEdhKGUpe2lmKCFLYShlKSlyZXR1cm4hMTt2YXIgdD14cihlKTtyZXR1cm4gdD09d3x8dD09Ynx8XCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dXCI9PXR8fFwiW29iamVjdCBQcm94eV1cIj09dH1mdW5jdGlvbiBxYShlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmZT09dWwoZSl9ZnVuY3Rpb24gWWEoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJmU+LTEmJmUlMT09MCYmZTw9Zn1mdW5jdGlvbiBLYShlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4gbnVsbCE9ZSYmKFwib2JqZWN0XCI9PXR8fFwiZnVuY3Rpb25cIj09dCl9ZnVuY3Rpb24gWGEoZSl7cmV0dXJuIG51bGwhPWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfXZhciBKYT15dD9ZdCh5dCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFhhKGUpJiZmaShlKT09eH07ZnVuY3Rpb24gUWEoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGV8fFhhKGUpJiZ4cihlKT09X31mdW5jdGlvbiBlbChlKXtpZighWGEoZSl8fHhyKGUpIT1PKXJldHVybiExO3ZhciB0PVVlKGUpO2lmKG51bGw9PT10KXJldHVybiEwO3ZhciBuPUllLmNhbGwodCxcImNvbnN0cnVjdG9yXCIpJiZ0LmNvbnN0cnVjdG9yO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJm4gaW5zdGFuY2VvZiBuJiZQZS5jYWxsKG4pPT1CZX12YXIgdGw9d3Q/WXQod3QpOmZ1bmN0aW9uKGUpe3JldHVybiBYYShlKSYmeHIoZSk9PUV9LG5sPWJ0P1l0KGJ0KTpmdW5jdGlvbihlKXtyZXR1cm4gWGEoZSkmJmZpKGUpPT1TfTtmdW5jdGlvbiBybChlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZXx8IVphKGUpJiZYYShlKSYmeHIoZSk9PWp9ZnVuY3Rpb24gb2woZSl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIGV8fFhhKGUpJiZ4cihlKT09TX12YXIgaWw9eHQ/WXQoeHQpOmZ1bmN0aW9uKGUpe3JldHVybiBYYShlKSYmWWEoZS5sZW5ndGgpJiYhIW90W3hyKGUpXX0sYWw9Rm8oQXIpLGxsPUZvKChmdW5jdGlvbihlLHQpe3JldHVybiBlPD10fSkpO2Z1bmN0aW9uIHNsKGUpe2lmKCFlKXJldHVybltdO2lmKE5hKGUpKXJldHVybiBybChlKT91bihlKTpFbyhlKTtpZihZZSYmZVtZZV0pcmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPVtdOyEodD1lLm5leHQoKSkuZG9uZTspbi5wdXNoKHQudmFsdWUpO3JldHVybiBufShlW1llXSgpKTt2YXIgdD1maShlKTtyZXR1cm4odD09eD9vbjp0PT1TP3NuOkhsKShlKX1mdW5jdGlvbiBjbChlKXtyZXR1cm4gZT8oZT1kbChlKSk9PT11fHxlPT09LTEvMD8xNzk3NjkzMTM0ODYyMzE1N2UyOTIqKGU8MD8tMToxKTplPT1lP2U6MDowPT09ZT9lOjB9ZnVuY3Rpb24gdWwoZSl7dmFyIHQ9Y2woZSksbj10JTE7cmV0dXJuIHQ9PXQ/bj90LW46dDowfWZ1bmN0aW9uIGZsKGUpe3JldHVybiBlP29yKHVsKGUpLDAscCk6MH1mdW5jdGlvbiBkbChlKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSlyZXR1cm4gZTtpZihvbChlKSlyZXR1cm4gZDtpZihLYShlKSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZS52YWx1ZU9mP2UudmFsdWVPZigpOmU7ZT1LYSh0KT90K1wiXCI6dH1pZihcInN0cmluZ1wiIT10eXBlb2YgZSlyZXR1cm4gMD09PWU/ZTorZTtlPXF0KGUpO3ZhciBuPWhlLnRlc3QoZSk7cmV0dXJuIG58fHZlLnRlc3QoZSk/c3QoZS5zbGljZSgyKSxuPzI6OCk6cGUudGVzdChlKT9kOitlfWZ1bmN0aW9uIHBsKGUpe3JldHVybiBTbyhlLGpsKGUpKX1mdW5jdGlvbiBobChlKXtyZXR1cm4gbnVsbD09ZT9cIlwiOmlvKGUpfXZhciBnbD1NbygoZnVuY3Rpb24oZSx0KXtpZih3aSh0KXx8TmEodCkpU28odCxTbCh0KSxlKTtlbHNlIGZvcih2YXIgbiBpbiB0KUllLmNhbGwodCxuKSYmSm4oZSxuLHRbbl0pfSkpLHZsPU1vKChmdW5jdGlvbihlLHQpe1NvKHQsamwodCksZSl9KSksbWw9TW8oKGZ1bmN0aW9uKGUsdCxuLHIpe1NvKHQsamwodCksZSxyKX0pKSxDbD1NbygoZnVuY3Rpb24oZSx0LG4scil7U28odCxTbCh0KSxlLHIpfSkpLHlsPVFvKHJyKSx3bD16cigoZnVuY3Rpb24oZSx0KXtlPU9lKGUpO3ZhciBuPS0xLHI9dC5sZW5ndGgsaT1yPjI/dFsyXTpvO2ZvcihpJiZ2aSh0WzBdLHRbMV0saSkmJihyPTEpOysrbjxyOylmb3IodmFyIGE9dFtuXSxsPWpsKGEpLHM9LTEsYz1sLmxlbmd0aDsrK3M8Yzspe3ZhciB1PWxbc10sZj1lW3VdOyhmPT09b3x8SGEoZixrZVt1XSkmJiFJZS5jYWxsKGUsdSkpJiYoZVt1XT1hW3VdKX1yZXR1cm4gZX0pKSxibD16cigoZnVuY3Rpb24oZSl7cmV0dXJuIGUucHVzaChvLEtvKSxfdChrbCxvLGUpfSkpO2Z1bmN0aW9uIHhsKGUsdCxuKXt2YXIgcj1udWxsPT1lP286d3IoZSx0KTtyZXR1cm4gcj09PW8/bjpyfWZ1bmN0aW9uIF9sKGUsdCl7cmV0dXJuIG51bGwhPWUmJmRpKGUsdCxMcil9dmFyIE9sPVZvKChmdW5jdGlvbihlLHQsbil7bnVsbCE9dCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdC50b1N0cmluZyYmKHQ9SGUuY2FsbCh0KSksZVt0XT1ufSksS2woUWwpKSxMbD1WbygoZnVuY3Rpb24oZSx0LG4pe251bGwhPXQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQudG9TdHJpbmcmJih0PUhlLmNhbGwodCkpLEllLmNhbGwoZSx0KT9lW3RdLnB1c2gobik6ZVt0XT1bbl19KSxpaSksRWw9enIoU3IpO2Z1bmN0aW9uIFNsKGUpe3JldHVybiBOYShlKT9HbihlKTpJcihlKX1mdW5jdGlvbiBqbChlKXtyZXR1cm4gTmEoZSk/R24oZSwhMCk6ZnVuY3Rpb24oZSl7aWYoIUthKGUpKXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1bXTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBPZShlKSl0LnB1c2gobik7cmV0dXJuIHR9KGUpO3ZhciB0PXdpKGUpLG49W107Zm9yKHZhciByIGluIGUpKFwiY29uc3RydWN0b3JcIiE9cnx8IXQmJkllLmNhbGwoZSxyKSkmJm4ucHVzaChyKTtyZXR1cm4gbn0oZSl9dmFyIE1sPU1vKChmdW5jdGlvbihlLHQsbil7VnIoZSx0LG4pfSkpLGtsPU1vKChmdW5jdGlvbihlLHQsbixyKXtWcihlLHQsbixyKX0pKSxSbD1RbygoZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtpZihudWxsPT1lKXJldHVybiBuO3ZhciByPSExO3Q9UnQodCwoZnVuY3Rpb24odCl7cmV0dXJuIHQ9dm8odCxlKSxyfHwocj10Lmxlbmd0aD4xKSx0fSkpLFNvKGUsdGkoZSksbiksciYmKG49aXIobiw3LFhvKSk7Zm9yKHZhciBvPXQubGVuZ3RoO28tLTspbG8obix0W29dKTtyZXR1cm4gbn0pKSxQbD1RbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT97fTpmdW5jdGlvbihlLHQpe3JldHVybiAkcihlLHQsKGZ1bmN0aW9uKHQsbil7cmV0dXJuIF9sKGUsbil9KSl9KGUsdCl9KSk7ZnVuY3Rpb24gSWwoZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuPVJ0KHRpKGUpLChmdW5jdGlvbihlKXtyZXR1cm5bZV19KSk7cmV0dXJuIHQ9aWkodCksJHIoZSxuLChmdW5jdGlvbihlLG4pe3JldHVybiB0KGUsblswXSl9KSl9dmFyIEFsPUdvKFNsKSxUbD1HbyhqbCk7ZnVuY3Rpb24gSGwoZSl7cmV0dXJuIG51bGw9PWU/W106S3QoZSxTbChlKSl9dmFyIEJsPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9dC50b0xvd2VyQ2FzZSgpLGUrKG4/VmwodCk6dCl9KSk7ZnVuY3Rpb24gVmwoZSl7cmV0dXJuIHpsKGhsKGUpLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIERsKGUpe3JldHVybihlPWhsKGUpKSYmZS5yZXBsYWNlKENlLGVuKS5yZXBsYWNlKFhlLFwiXCIpfXZhciBabD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiLVwiOlwiXCIpK3QudG9Mb3dlckNhc2UoKX0pKSwkbD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiIFwiOlwiXCIpK3QudG9Mb3dlckNhc2UoKX0pKSxObD1QbyhcInRvTG93ZXJDYXNlXCIpLEZsPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKG4/XCJfXCI6XCJcIikrdC50b0xvd2VyQ2FzZSgpfSkpLFVsPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKG4/XCIgXCI6XCJcIikremwodCl9KSksV2w9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIiBcIjpcIlwiKSt0LnRvVXBwZXJDYXNlKCl9KSksemw9UG8oXCJ0b1VwcGVyQ2FzZVwiKTtmdW5jdGlvbiBHbChlLHQsbil7cmV0dXJuIGU9aGwoZSksKHQ9bj9vOnQpPT09bz9mdW5jdGlvbihlKXtyZXR1cm4gdHQudGVzdChlKX0oZSk/ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2goUWUpfHxbXX0oZSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2goc2UpfHxbXX0oZSk6ZS5tYXRjaCh0KXx8W119dmFyIHFsPXpyKChmdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gX3QoZSxvLHQpfWNhdGNoKGUpe3JldHVybiB6YShlKT9lOm5ldyBiZShlKX19KSksWWw9UW8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIEx0KHQsKGZ1bmN0aW9uKHQpe3Q9SWkodCksbnIoZSx0LExhKGVbdF0sZSkpfSkpLGV9KSk7ZnVuY3Rpb24gS2woZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBYbD1IbygpLEpsPUhvKCEwKTtmdW5jdGlvbiBRbChlKXtyZXR1cm4gZX1mdW5jdGlvbiBlcyhlKXtyZXR1cm4gUHIoXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOmlyKGUsMSkpfXZhciB0cz16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIFNyKG4sZSx0KX19KSksbnM9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBTcihlLG4sdCl9fSkpO2Z1bmN0aW9uIHJzKGUsdCxuKXt2YXIgcj1TbCh0KSxvPXlyKHQscik7bnVsbCE9bnx8S2EodCkmJihvLmxlbmd0aHx8IXIubGVuZ3RoKXx8KG49dCx0PWUsZT10aGlzLG89eXIodCxTbCh0KSkpO3ZhciBpPSEoS2EobikmJlwiY2hhaW5cImluIG4mJiFuLmNoYWluKSxhPUdhKGUpO3JldHVybiBMdChvLChmdW5jdGlvbihuKXt2YXIgcj10W25dO2Vbbl09cixhJiYoZS5wcm90b3R5cGVbbl09ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fY2hhaW5fXztpZihpfHx0KXt2YXIgbj1lKHRoaXMuX193cmFwcGVkX18pO3JldHVybihuLl9fYWN0aW9uc19fPUVvKHRoaXMuX19hY3Rpb25zX18pKS5wdXNoKHtmdW5jOnIsYXJnczphcmd1bWVudHMsdGhpc0FyZzplfSksbi5fX2NoYWluX189dCxufXJldHVybiByLmFwcGx5KGUsUHQoW3RoaXMudmFsdWUoKV0sYXJndW1lbnRzKSl9KX0pKSxlfWZ1bmN0aW9uIG9zKCl7fXZhciBpcz1abyhSdCksYXM9Wm8oU3QpLGxzPVpvKFR0KTtmdW5jdGlvbiBzcyhlKXtyZXR1cm4gbWkoZSk/RnQoSWkoZSkpOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gd3IodCxlKX19KGUpfXZhciBjcz1ObygpLHVzPU5vKCEwKTtmdW5jdGlvbiBmcygpe3JldHVybltdfWZ1bmN0aW9uIGRzKCl7cmV0dXJuITF9dmFyIHBzLGhzPURvKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSwwKSxncz1XbyhcImNlaWxcIiksdnM9RG8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUvdH0pLDEpLG1zPVdvKFwiZmxvb3JcIiksQ3M9RG8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqdH0pLDEpLHlzPVdvKFwicm91bmRcIiksd3M9RG8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pLDApO3JldHVybiBCbi5hZnRlcj1mdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFNlKGkpO3JldHVybiBlPXVsKGUpLGZ1bmN0aW9uKCl7aWYoLS1lPDEpcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sQm4uYXJ5PV9hLEJuLmFzc2lnbj1nbCxCbi5hc3NpZ25Jbj12bCxCbi5hc3NpZ25JbldpdGg9bWwsQm4uYXNzaWduV2l0aD1DbCxCbi5hdD15bCxCbi5iZWZvcmU9T2EsQm4uYmluZD1MYSxCbi5iaW5kQWxsPVlsLEJuLmJpbmRLZXk9RWEsQm4uY2FzdEFycmF5PWZ1bmN0aW9uKCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW107dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBaYShlKT9lOltlXX0sQm4uY2hhaW49c2EsQm4uY2h1bms9ZnVuY3Rpb24oZSx0LG4pe3Q9KG4/dmkoZSx0LG4pOnQ9PT1vKT8xOmduKHVsKHQpLDApO3ZhciBpPW51bGw9PWU/MDplLmxlbmd0aDtpZighaXx8dDwxKXJldHVybltdO2Zvcih2YXIgYT0wLGw9MCxzPXIoZHQoaS90KSk7YTxpOylzW2wrK109UXIoZSxhLGErPXQpO3JldHVybiBzfSxCbi5jb21wYWN0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aCxyPTAsbz1bXTsrK3Q8bjspe3ZhciBpPWVbdF07aSYmKG9bcisrXT1pKX1yZXR1cm4gb30sQm4uY29uY2F0PWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDtpZighZSlyZXR1cm5bXTtmb3IodmFyIHQ9cihlLTEpLG49YXJndW1lbnRzWzBdLG89ZTtvLS07KXRbby0xXT1hcmd1bWVudHNbb107cmV0dXJuIFB0KFphKG4pP0VvKG4pOltuXSxocih0LDEpKX0sQm4uY29uZD1mdW5jdGlvbihlKXt2YXIgdD1udWxsPT1lPzA6ZS5sZW5ndGgsbj1paSgpO3JldHVybiBlPXQ/UnQoZSwoZnVuY3Rpb24oZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZVsxXSl0aHJvdyBuZXcgU2UoaSk7cmV0dXJuW24oZVswXSksZVsxXV19KSk6W10senIoKGZ1bmN0aW9uKG4pe2Zvcih2YXIgcj0tMTsrK3I8dDspe3ZhciBvPWVbcl07aWYoX3Qob1swXSx0aGlzLG4pKXJldHVybiBfdChvWzFdLHRoaXMsbil9fSkpfSxCbi5jb25mb3Jtcz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9U2woZSk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBhcihuLGUsdCl9fShpcihlLDEpKX0sQm4uY29uc3RhbnQ9S2wsQm4uY291bnRCeT1mYSxCbi5jcmVhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1WbihlKTtyZXR1cm4gbnVsbD09dD9uOnRyKG4sdCl9LEJuLmN1cnJ5PWZ1bmN0aW9uIGUodCxuLHIpe3ZhciBpPXFvKHQsOCxvLG8sbyxvLG8sbj1yP286bik7cmV0dXJuIGkucGxhY2Vob2xkZXI9ZS5wbGFjZWhvbGRlcixpfSxCbi5jdXJyeVJpZ2h0PWZ1bmN0aW9uIGUodCxuLHIpe3ZhciBpPXFvKHQsMTYsbyxvLG8sbyxvLG49cj9vOm4pO3JldHVybiBpLnBsYWNlaG9sZGVyPWUucGxhY2Vob2xkZXIsaX0sQm4uZGVib3VuY2U9U2EsQm4uZGVmYXVsdHM9d2wsQm4uZGVmYXVsdHNEZWVwPWJsLEJuLmRlZmVyPWphLEJuLmRlbGF5PU1hLEJuLmRpZmZlcmVuY2U9SGksQm4uZGlmZmVyZW5jZUJ5PUJpLEJuLmRpZmZlcmVuY2VXaXRoPVZpLEJuLmRyb3A9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gcj9RcihlLCh0PW58fHQ9PT1vPzE6dWwodCkpPDA/MDp0LHIpOltdfSxCbi5kcm9wUmlnaHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gcj9RcihlLDAsKHQ9ci0odD1ufHx0PT09bz8xOnVsKHQpKSk8MD8wOnQpOltdfSxCbi5kcm9wUmlnaHRXaGlsZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9jbyhlLGlpKHQsMyksITAsITApOltdfSxCbi5kcm9wV2hpbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/Y28oZSxpaSh0LDMpLCEwKTpbXX0sQm4uZmlsbD1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIGk/KG4mJlwibnVtYmVyXCIhPXR5cGVvZiBuJiZ2aShlLHQsbikmJihuPTAscj1pKSxmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1lLmxlbmd0aDtmb3IoKG49dWwobikpPDAmJihuPS1uPmk/MDppK24pLChyPXI9PT1vfHxyPmk/aTp1bChyKSk8MCYmKHIrPWkpLHI9bj5yPzA6Zmwocik7bjxyOyllW24rK109dDtyZXR1cm4gZX0oZSx0LG4scikpOltdfSxCbi5maWx0ZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oWmEoZSk/anQ6cHIpKGUsaWkodCwzKSl9LEJuLmZsYXRNYXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaHIoeWEoZSx0KSwxKX0sQm4uZmxhdE1hcERlZXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaHIoeWEoZSx0KSx1KX0sQm4uZmxhdE1hcERlcHRoPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPT09bz8xOnVsKG4pLGhyKHlhKGUsdCksbil9LEJuLmZsYXR0ZW49JGksQm4uZmxhdHRlbkRlZXA9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJmUubGVuZ3RoP2hyKGUsdSk6W119LEJuLmZsYXR0ZW5EZXB0aD1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsIT1lJiZlLmxlbmd0aD9ocihlLHQ9dD09PW8/MTp1bCh0KSk6W119LEJuLmZsaXA9ZnVuY3Rpb24oZSl7cmV0dXJuIHFvKGUsNTEyKX0sQm4uZmxvdz1YbCxCbi5mbG93UmlnaHQ9SmwsQm4uZnJvbVBhaXJzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aCxyPXt9OysrdDxuOyl7dmFyIG89ZVt0XTtyW29bMF1dPW9bMV19cmV0dXJuIHJ9LEJuLmZ1bmN0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9bXTp5cihlLFNsKGUpKX0sQm4uZnVuY3Rpb25zSW49ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/W106eXIoZSxqbChlKSl9LEJuLmdyb3VwQnk9dmEsQm4uaW5pdGlhbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZS5sZW5ndGg/UXIoZSwwLC0xKTpbXX0sQm4uaW50ZXJzZWN0aW9uPUZpLEJuLmludGVyc2VjdGlvbkJ5PVVpLEJuLmludGVyc2VjdGlvbldpdGg9V2ksQm4uaW52ZXJ0PU9sLEJuLmludmVydEJ5PUxsLEJuLmludm9rZU1hcD1tYSxCbi5pdGVyYXRlZT1lcyxCbi5rZXlCeT1DYSxCbi5rZXlzPVNsLEJuLmtleXNJbj1qbCxCbi5tYXA9eWEsQm4ubWFwS2V5cz1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O3JldHVybiB0PWlpKHQsMyksbXIoZSwoZnVuY3Rpb24oZSxyLG8pe25yKG4sdChlLHIsbyksZSl9KSksbn0sQm4ubWFwVmFsdWVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49e307cmV0dXJuIHQ9aWkodCwzKSxtcihlLChmdW5jdGlvbihlLHIsbyl7bnIobixyLHQoZSxyLG8pKX0pKSxufSxCbi5tYXRjaGVzPWZ1bmN0aW9uKGUpe3JldHVybiBIcihpcihlLDEpKX0sQm4ubWF0Y2hlc1Byb3BlcnR5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEJyKGUsaXIodCwxKSl9LEJuLm1lbW9pemU9a2EsQm4ubWVyZ2U9TWwsQm4ubWVyZ2VXaXRoPWtsLEJuLm1ldGhvZD10cyxCbi5tZXRob2RPZj1ucyxCbi5taXhpbj1ycyxCbi5uZWdhdGU9UmEsQm4ubnRoQXJnPWZ1bmN0aW9uKGUpe3JldHVybiBlPXVsKGUpLHpyKChmdW5jdGlvbih0KXtyZXR1cm4gRHIodCxlKX0pKX0sQm4ub21pdD1SbCxCbi5vbWl0Qnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSWwoZSxSYShpaSh0KSkpfSxCbi5vbmNlPWZ1bmN0aW9uKGUpe3JldHVybiBPYSgyLGUpfSxCbi5vcmRlckJ5PWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBudWxsPT1lP1tdOihaYSh0KXx8KHQ9bnVsbD09dD9bXTpbdF0pLFphKG49cj9vOm4pfHwobj1udWxsPT1uP1tdOltuXSksWnIoZSx0LG4pKX0sQm4ub3Zlcj1pcyxCbi5vdmVyQXJncz1QYSxCbi5vdmVyRXZlcnk9YXMsQm4ub3ZlclNvbWU9bHMsQm4ucGFydGlhbD1JYSxCbi5wYXJ0aWFsUmlnaHQ9QWEsQm4ucGFydGl0aW9uPXdhLEJuLnBpY2s9UGwsQm4ucGlja0J5PUlsLEJuLnByb3BlcnR5PXNzLEJuLnByb3BlcnR5T2Y9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT1lP286d3IoZSx0KX19LEJuLnB1bGw9R2ksQm4ucHVsbEFsbD1xaSxCbi5wdWxsQWxsQnk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlJiZlLmxlbmd0aCYmdCYmdC5sZW5ndGg/TnIoZSx0LGlpKG4sMikpOmV9LEJuLnB1bGxBbGxXaXRoPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSYmZS5sZW5ndGgmJnQmJnQubGVuZ3RoP05yKGUsdCxvLG4pOmV9LEJuLnB1bGxBdD1ZaSxCbi5yYW5nZT1jcyxCbi5yYW5nZVJpZ2h0PXVzLEJuLnJlYXJnPVRhLEJuLnJlamVjdD1mdW5jdGlvbihlLHQpe3JldHVybihaYShlKT9qdDpwcikoZSxSYShpaSh0LDMpKSl9LEJuLnJlbW92ZT1mdW5jdGlvbihlLHQpe3ZhciBuPVtdO2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuIG47dmFyIHI9LTEsbz1bXSxpPWUubGVuZ3RoO2Zvcih0PWlpKHQsMyk7KytyPGk7KXt2YXIgYT1lW3JdO3QoYSxyLGUpJiYobi5wdXNoKGEpLG8ucHVzaChyKSl9cmV0dXJuIEZyKGUsbyksbn0sQm4ucmVzdD1mdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFNlKGkpO3JldHVybiB6cihlLHQ9dD09PW8/dDp1bCh0KSl9LEJuLnJldmVyc2U9S2ksQm4uc2FtcGxlU2l6ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9KG4/dmkoZSx0LG4pOnQ9PT1vKT8xOnVsKHQpLChaYShlKT9ZbjpxcikoZSx0KX0sQm4uc2V0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09ZT9lOllyKGUsdCxuKX0sQm4uc2V0V2l0aD1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiByP3I6byxudWxsPT1lP2U6WXIoZSx0LG4scil9LEJuLnNodWZmbGU9ZnVuY3Rpb24oZSl7cmV0dXJuKFphKGUpP0tuOkpyKShlKX0sQm4uc2xpY2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gcj8obiYmXCJudW1iZXJcIiE9dHlwZW9mIG4mJnZpKGUsdCxuKT8odD0wLG49cik6KHQ9bnVsbD09dD8wOnVsKHQpLG49bj09PW8/cjp1bChuKSksUXIoZSx0LG4pKTpbXX0sQm4uc29ydEJ5PWJhLEJuLnNvcnRlZFVuaXE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP3JvKGUpOltdfSxCbi5zb3J0ZWRVbmlxQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/cm8oZSxpaSh0LDIpKTpbXX0sQm4uc3BsaXQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuJiZcIm51bWJlclwiIT10eXBlb2YgbiYmdmkoZSx0LG4pJiYodD1uPW8pLChuPW49PT1vP3A6bj4+PjApPyhlPWhsKGUpKSYmKFwic3RyaW5nXCI9PXR5cGVvZiB0fHxudWxsIT10JiYhdGwodCkpJiYhKHQ9aW8odCkpJiZybihlKT9Dbyh1bihlKSwwLG4pOmUuc3BsaXQodCxuKTpbXX0sQm4uc3ByZWFkPWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgU2UoaSk7cmV0dXJuIHQ9bnVsbD09dD8wOmduKHVsKHQpLDApLHpyKChmdW5jdGlvbihuKXt2YXIgcj1uW3RdLG89Q28obiwwLHQpO3JldHVybiByJiZQdChvLHIpLF90KGUsdGhpcyxvKX0pKX0sQm4udGFpbD1mdW5jdGlvbihlKXt2YXIgdD1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHQ/UXIoZSwxLHQpOltdfSxCbi50YWtlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSYmZS5sZW5ndGg/UXIoZSwwLCh0PW58fHQ9PT1vPzE6dWwodCkpPDA/MDp0KTpbXX0sQm4udGFrZVJpZ2h0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/UXIoZSwodD1yLSh0PW58fHQ9PT1vPzE6dWwodCkpKTwwPzA6dCxyKTpbXX0sQm4udGFrZVJpZ2h0V2hpbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/Y28oZSxpaSh0LDMpLCExLCEwKTpbXX0sQm4udGFrZVdoaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2NvKGUsaWkodCwzKSk6W119LEJuLnRhcD1mdW5jdGlvbihlLHQpe3JldHVybiB0KGUpLGV9LEJuLnRocm90dGxlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0hMCxvPSEwO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFNlKGkpO3JldHVybiBLYShuKSYmKHI9XCJsZWFkaW5nXCJpbiBuPyEhbi5sZWFkaW5nOnIsbz1cInRyYWlsaW5nXCJpbiBuPyEhbi50cmFpbGluZzpvKSxTYShlLHQse2xlYWRpbmc6cixtYXhXYWl0OnQsdHJhaWxpbmc6b30pfSxCbi50aHJ1PWNhLEJuLnRvQXJyYXk9c2wsQm4udG9QYWlycz1BbCxCbi50b1BhaXJzSW49VGwsQm4udG9QYXRoPWZ1bmN0aW9uKGUpe3JldHVybiBaYShlKT9SdChlLElpKTpvbChlKT9bZV06RW8oUGkoaGwoZSkpKX0sQm4udG9QbGFpbk9iamVjdD1wbCxCbi50cmFuc2Zvcm09ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVphKGUpLG89cnx8VWEoZSl8fGlsKGUpO2lmKHQ9aWkodCw0KSxudWxsPT1uKXt2YXIgaT1lJiZlLmNvbnN0cnVjdG9yO249bz9yP25ldyBpOltdOkthKGUpJiZHYShpKT9WbihVZShlKSk6e319cmV0dXJuKG8/THQ6bXIpKGUsKGZ1bmN0aW9uKGUscixvKXtyZXR1cm4gdChuLGUscixvKX0pKSxufSxCbi51bmFyeT1mdW5jdGlvbihlKXtyZXR1cm4gX2EoZSwxKX0sQm4udW5pb249WGksQm4udW5pb25CeT1KaSxCbi51bmlvbldpdGg9UWksQm4udW5pcT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/YW8oZSk6W119LEJuLnVuaXFCeT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9hbyhlLGlpKHQsMikpOltdfSxCbi51bmlxV2l0aD1mdW5jdGlvbihlLHQpe3JldHVybiB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvLGUmJmUubGVuZ3RoP2FvKGUsbyx0KTpbXX0sQm4udW5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZXx8bG8oZSx0KX0sQm4udW56aXA9ZWEsQm4udW56aXBXaXRoPXRhLEJuLnVwZGF0ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PWU/ZTpzbyhlLHQsZ28obikpfSxCbi51cGRhdGVXaXRoPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiByPVwiZnVuY3Rpb25cIj09dHlwZW9mIHI/cjpvLG51bGw9PWU/ZTpzbyhlLHQsZ28obikscil9LEJuLnZhbHVlcz1IbCxCbi52YWx1ZXNJbj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9bXTpLdChlLGpsKGUpKX0sQm4ud2l0aG91dD1uYSxCbi53b3Jkcz1HbCxCbi53cmFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIElhKGdvKHQpLGUpfSxCbi54b3I9cmEsQm4ueG9yQnk9b2EsQm4ueG9yV2l0aD1pYSxCbi56aXA9YWEsQm4uemlwT2JqZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHBvKGV8fFtdLHR8fFtdLEpuKX0sQm4uemlwT2JqZWN0RGVlcD1mdW5jdGlvbihlLHQpe3JldHVybiBwbyhlfHxbXSx0fHxbXSxZcil9LEJuLnppcFdpdGg9bGEsQm4uZW50cmllcz1BbCxCbi5lbnRyaWVzSW49VGwsQm4uZXh0ZW5kPXZsLEJuLmV4dGVuZFdpdGg9bWwscnMoQm4sQm4pLEJuLmFkZD1ocyxCbi5hdHRlbXB0PXFsLEJuLmNhbWVsQ2FzZT1CbCxCbi5jYXBpdGFsaXplPVZsLEJuLmNlaWw9Z3MsQm4uY2xhbXA9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPT09byYmKG49dCx0PW8pLG4hPT1vJiYobj0obj1kbChuKSk9PW4/bjowKSx0IT09byYmKHQ9KHQ9ZGwodCkpPT10P3Q6MCksb3IoZGwoZSksdCxuKX0sQm4uY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGlyKGUsNCl9LEJuLmNsb25lRGVlcD1mdW5jdGlvbihlKXtyZXR1cm4gaXIoZSw1KX0sQm4uY2xvbmVEZWVwV2l0aD1mdW5jdGlvbihlLHQpe3JldHVybiBpcihlLDUsdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byl9LEJuLmNsb25lV2l0aD1mdW5jdGlvbihlLHQpe3JldHVybiBpcihlLDQsdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byl9LEJuLmNvbmZvcm1zVG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09dHx8YXIoZSx0LFNsKHQpKX0sQm4uZGVidXJyPURsLEJuLmRlZmF1bHRUbz1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lfHxlIT1lP3Q6ZX0sQm4uZGl2aWRlPXZzLEJuLmVuZHNXaXRoPWZ1bmN0aW9uKGUsdCxuKXtlPWhsKGUpLHQ9aW8odCk7dmFyIHI9ZS5sZW5ndGgsaT1uPW49PT1vP3I6b3IodWwobiksMCxyKTtyZXR1cm4obi09dC5sZW5ndGgpPj0wJiZlLnNsaWNlKG4saSk9PXR9LEJuLmVxPUhhLEJuLmVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4oZT1obChlKSkmJnEudGVzdChlKT9lLnJlcGxhY2Uoeix0bik6ZX0sQm4uZXNjYXBlUmVnRXhwPWZ1bmN0aW9uKGUpe3JldHVybihlPWhsKGUpKSYmbmUudGVzdChlKT9lLnJlcGxhY2UodGUsXCJcXFxcJCZcIik6ZX0sQm4uZXZlcnk9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVphKGUpP1N0OmZyO3JldHVybiBuJiZ2aShlLHQsbikmJih0PW8pLHIoZSxpaSh0LDMpKX0sQm4uZmluZD1kYSxCbi5maW5kSW5kZXg9RGksQm4uZmluZEtleT1mdW5jdGlvbihlLHQpe3JldHVybiBCdChlLGlpKHQsMyksbXIpfSxCbi5maW5kTGFzdD1wYSxCbi5maW5kTGFzdEluZGV4PVppLEJuLmZpbmRMYXN0S2V5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEJ0KGUsaWkodCwzKSxDcil9LEJuLmZsb29yPW1zLEJuLmZvckVhY2g9aGEsQm4uZm9yRWFjaFJpZ2h0PWdhLEJuLmZvckluPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/ZTpncihlLGlpKHQsMyksamwpfSxCbi5mb3JJblJpZ2h0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/ZTp2cihlLGlpKHQsMyksamwpfSxCbi5mb3JPd249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmbXIoZSxpaSh0LDMpKX0sQm4uZm9yT3duUmlnaHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmQ3IoZSxpaSh0LDMpKX0sQm4uZ2V0PXhsLEJuLmd0PUJhLEJuLmd0ZT1WYSxCbi5oYXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbCE9ZSYmZGkoZSx0LE9yKX0sQm4uaGFzSW49X2wsQm4uaGVhZD1OaSxCbi5pZGVudGl0eT1RbCxCbi5pbmNsdWRlcz1mdW5jdGlvbihlLHQsbixyKXtlPU5hKGUpP2U6SGwoZSksbj1uJiYhcj91bChuKTowO3ZhciBvPWUubGVuZ3RoO3JldHVybiBuPDAmJihuPWduKG8rbiwwKSkscmwoZSk/bjw9byYmZS5pbmRleE9mKHQsbik+LTE6ISFvJiZEdChlLHQsbik+LTF9LEJuLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtpZighcilyZXR1cm4tMTt2YXIgbz1udWxsPT1uPzA6dWwobik7cmV0dXJuIG88MCYmKG89Z24ocitvLDApKSxEdChlLHQsbyl9LEJuLmluUmFuZ2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PWNsKHQpLG49PT1vPyhuPXQsdD0wKTpuPWNsKG4pLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT49dm4odCxuKSYmZTxnbih0LG4pfShlPWRsKGUpLHQsbil9LEJuLmludm9rZT1FbCxCbi5pc0FyZ3VtZW50cz1EYSxCbi5pc0FycmF5PVphLEJuLmlzQXJyYXlCdWZmZXI9JGEsQm4uaXNBcnJheUxpa2U9TmEsQm4uaXNBcnJheUxpa2VPYmplY3Q9RmEsQm4uaXNCb29sZWFuPWZ1bmN0aW9uKGUpe3JldHVybiEwPT09ZXx8ITE9PT1lfHxYYShlKSYmeHIoZSk9PW19LEJuLmlzQnVmZmVyPVVhLEJuLmlzRGF0ZT1XYSxCbi5pc0VsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFhhKGUpJiYxPT09ZS5ub2RlVHlwZSYmIWVsKGUpfSxCbi5pc0VtcHR5PWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpcmV0dXJuITA7aWYoTmEoZSkmJihaYShlKXx8XCJzdHJpbmdcIj09dHlwZW9mIGV8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuc3BsaWNlfHxVYShlKXx8aWwoZSl8fERhKGUpKSlyZXR1cm4hZS5sZW5ndGg7dmFyIHQ9ZmkoZSk7aWYodD09eHx8dD09UylyZXR1cm4hZS5zaXplO2lmKHdpKGUpKXJldHVybiFJcihlKS5sZW5ndGg7Zm9yKHZhciBuIGluIGUpaWYoSWUuY2FsbChlLG4pKXJldHVybiExO3JldHVybiEwfSxCbi5pc0VxdWFsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1yKGUsdCl9LEJuLmlzRXF1YWxXaXRoPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0obj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246byk/bihlLHQpOm87cmV0dXJuIHI9PT1vP01yKGUsdCxvLG4pOiEhcn0sQm4uaXNFcnJvcj16YSxCbi5pc0Zpbml0ZT1mdW5jdGlvbihlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmSHQoZSl9LEJuLmlzRnVuY3Rpb249R2EsQm4uaXNJbnRlZ2VyPXFhLEJuLmlzTGVuZ3RoPVlhLEJuLmlzTWFwPUphLEJuLmlzTWF0Y2g9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR8fGtyKGUsdCxsaSh0KSl9LEJuLmlzTWF0Y2hXaXRoPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246byxrcihlLHQsbGkodCksbil9LEJuLmlzTmFOPWZ1bmN0aW9uKGUpe3JldHVybiBRYShlKSYmZSE9K2V9LEJuLmlzTmF0aXZlPWZ1bmN0aW9uKGUpe2lmKHlpKGUpKXRocm93IG5ldyBiZShcIlVuc3VwcG9ydGVkIGNvcmUtanMgdXNlLiBUcnkgaHR0cHM6Ly9ucG1zLmlvL3NlYXJjaD9xPXBvbnlmaWxsLlwiKTtyZXR1cm4gUnIoZSl9LEJuLmlzTmlsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfSxCbi5pc051bGw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfSxCbi5pc051bWJlcj1RYSxCbi5pc09iamVjdD1LYSxCbi5pc09iamVjdExpa2U9WGEsQm4uaXNQbGFpbk9iamVjdD1lbCxCbi5pc1JlZ0V4cD10bCxCbi5pc1NhZmVJbnRlZ2VyPWZ1bmN0aW9uKGUpe3JldHVybiBxYShlKSYmZT49LTkwMDcxOTkyNTQ3NDA5OTEmJmU8PWZ9LEJuLmlzU2V0PW5sLEJuLmlzU3RyaW5nPXJsLEJuLmlzU3ltYm9sPW9sLEJuLmlzVHlwZWRBcnJheT1pbCxCbi5pc1VuZGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PW99LEJuLmlzV2Vha01hcD1mdW5jdGlvbihlKXtyZXR1cm4gWGEoZSkmJmZpKGUpPT1rfSxCbi5pc1dlYWtTZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFhhKGUpJiZcIltvYmplY3QgV2Vha1NldF1cIj09eHIoZSl9LEJuLmpvaW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT9cIlwiOlV0LmNhbGwoZSx0KX0sQm4ua2ViYWJDYXNlPVpsLEJuLmxhc3Q9emksQm4ubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtpZighcilyZXR1cm4tMTt2YXIgaT1yO3JldHVybiBuIT09byYmKGk9KGk9dWwobikpPDA/Z24ocitpLDApOnZuKGksci0xKSksdD09dD9mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW4rMTtyLS07KWlmKGVbcl09PT10KXJldHVybiByO3JldHVybiByfShlLHQsaSk6VnQoZSwkdCxpLCEwKX0sQm4ubG93ZXJDYXNlPSRsLEJuLmxvd2VyRmlyc3Q9TmwsQm4ubHQ9YWwsQm4ubHRlPWxsLEJuLm1heD1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/ZHIoZSxRbCxfcik6b30sQm4ubWF4Qnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/ZHIoZSxpaSh0LDIpLF9yKTpvfSxCbi5tZWFuPWZ1bmN0aW9uKGUpe3JldHVybiBOdChlLFFsKX0sQm4ubWVhbkJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE50KGUsaWkodCwyKSl9LEJuLm1pbj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/ZHIoZSxRbCxBcik6b30sQm4ubWluQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/ZHIoZSxpaSh0LDIpLEFyKTpvfSxCbi5zdHViQXJyYXk9ZnMsQm4uc3R1YkZhbHNlPWRzLEJuLnN0dWJPYmplY3Q9ZnVuY3Rpb24oKXtyZXR1cm57fX0sQm4uc3R1YlN0cmluZz1mdW5jdGlvbigpe3JldHVyblwiXCJ9LEJuLnN0dWJUcnVlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEJuLm11bHRpcGx5PUNzLEJuLm50aD1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9EcihlLHVsKHQpKTpvfSxCbi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGZ0Ll89PT10aGlzJiYoZnQuXz1WZSksdGhpc30sQm4ubm9vcD1vcyxCbi5ub3c9eGEsQm4ucGFkPWZ1bmN0aW9uKGUsdCxuKXtlPWhsKGUpO3ZhciByPSh0PXVsKHQpKT9jbihlKTowO2lmKCF0fHxyPj10KXJldHVybiBlO3ZhciBvPSh0LXIpLzI7cmV0dXJuICRvKHB0KG8pLG4pK2UrJG8oZHQobyksbil9LEJuLnBhZEVuZD1mdW5jdGlvbihlLHQsbil7ZT1obChlKTt2YXIgcj0odD11bCh0KSk/Y24oZSk6MDtyZXR1cm4gdCYmcjx0P2UrJG8odC1yLG4pOmV9LEJuLnBhZFN0YXJ0PWZ1bmN0aW9uKGUsdCxuKXtlPWhsKGUpO3ZhciByPSh0PXVsKHQpKT9jbihlKTowO3JldHVybiB0JiZyPHQ/JG8odC1yLG4pK2U6ZX0sQm4ucGFyc2VJbnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBufHxudWxsPT10P3Q9MDp0JiYodD0rdCksQ24oaGwoZSkucmVwbGFjZShyZSxcIlwiKSx0fHwwKX0sQm4ucmFuZG9tPWZ1bmN0aW9uKGUsdCxuKXtpZihuJiZcImJvb2xlYW5cIiE9dHlwZW9mIG4mJnZpKGUsdCxuKSYmKHQ9bj1vKSxuPT09byYmKFwiYm9vbGVhblwiPT10eXBlb2YgdD8obj10LHQ9byk6XCJib29sZWFuXCI9PXR5cGVvZiBlJiYobj1lLGU9bykpLGU9PT1vJiZ0PT09bz8oZT0wLHQ9MSk6KGU9Y2woZSksdD09PW8/KHQ9ZSxlPTApOnQ9Y2wodCkpLGU+dCl7dmFyIHI9ZTtlPXQsdD1yfWlmKG58fGUlMXx8dCUxKXt2YXIgaT15bigpO3JldHVybiB2bihlK2kqKHQtZStsdChcIjFlLVwiKygoaStcIlwiKS5sZW5ndGgtMSkpKSx0KX1yZXR1cm4gVXIoZSx0KX0sQm4ucmVkdWNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1aYShlKT9JdDpXdCxvPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gcihlLGlpKHQsNCksbixvLGNyKX0sQm4ucmVkdWNlUmlnaHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVphKGUpP0F0Old0LG89YXJndW1lbnRzLmxlbmd0aDwzO3JldHVybiByKGUsaWkodCw0KSxuLG8sdXIpfSxCbi5yZXBlYXQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PShuP3ZpKGUsdCxuKTp0PT09byk/MTp1bCh0KSxXcihobChlKSx0KX0sQm4ucmVwbGFjZT1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cyx0PWhsKGVbMF0pO3JldHVybiBlLmxlbmd0aDwzP3Q6dC5yZXBsYWNlKGVbMV0sZVsyXSl9LEJuLnJlc3VsdD1mdW5jdGlvbihlLHQsbil7dmFyIHI9LTEsaT0odD12byh0LGUpKS5sZW5ndGg7Zm9yKGl8fChpPTEsZT1vKTsrK3I8aTspe3ZhciBhPW51bGw9PWU/bzplW0lpKHRbcl0pXTthPT09byYmKHI9aSxhPW4pLGU9R2EoYSk/YS5jYWxsKGUpOmF9cmV0dXJuIGV9LEJuLnJvdW5kPXlzLEJuLnJ1bkluQ29udGV4dD1lLEJuLnNhbXBsZT1mdW5jdGlvbihlKXtyZXR1cm4oWmEoZSk/cW46R3IpKGUpfSxCbi5zaXplPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpcmV0dXJuIDA7aWYoTmEoZSkpcmV0dXJuIHJsKGUpP2NuKGUpOmUubGVuZ3RoO3ZhciB0PWZpKGUpO3JldHVybiB0PT14fHx0PT1TP2Uuc2l6ZTpJcihlKS5sZW5ndGh9LEJuLnNuYWtlQ2FzZT1GbCxCbi5zb21lPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1aYShlKT9UdDplbztyZXR1cm4gbiYmdmkoZSx0LG4pJiYodD1vKSxyKGUsaWkodCwzKSl9LEJuLnNvcnRlZEluZGV4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRvKGUsdCl9LEJuLnNvcnRlZEluZGV4Qnk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBubyhlLHQsaWkobiwyKSl9LEJuLnNvcnRlZEluZGV4T2Y9ZnVuY3Rpb24oZSx0KXt2YXIgbj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYobil7dmFyIHI9dG8oZSx0KTtpZihyPG4mJkhhKGVbcl0sdCkpcmV0dXJuIHJ9cmV0dXJuLTF9LEJuLnNvcnRlZExhc3RJbmRleD1mdW5jdGlvbihlLHQpe3JldHVybiB0byhlLHQsITApfSxCbi5zb3J0ZWRMYXN0SW5kZXhCeT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5vKGUsdCxpaShuLDIpLCEwKX0sQm4uc29ydGVkTGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT1lJiZlLmxlbmd0aCl7dmFyIG49dG8oZSx0LCEwKS0xO2lmKEhhKGVbbl0sdCkpcmV0dXJuIG59cmV0dXJuLTF9LEJuLnN0YXJ0Q2FzZT1VbCxCbi5zdGFydHNXaXRoPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT1obChlKSxuPW51bGw9PW4/MDpvcih1bChuKSwwLGUubGVuZ3RoKSx0PWlvKHQpLGUuc2xpY2UobixuK3QubGVuZ3RoKT09dH0sQm4uc3VidHJhY3Q9d3MsQm4uc3VtPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD96dChlLFFsKTowfSxCbi5zdW1CeT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD96dChlLGlpKHQsMikpOjB9LEJuLnRlbXBsYXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1Cbi50ZW1wbGF0ZVNldHRpbmdzO24mJnZpKGUsdCxuKSYmKHQ9byksZT1obChlKSx0PW1sKHt9LHQscixZbyk7dmFyIGksYSxsPW1sKHt9LHQuaW1wb3J0cyxyLmltcG9ydHMsWW8pLHM9U2wobCksYz1LdChsLHMpLHU9MCxmPXQuaW50ZXJwb2xhdGV8fHllLGQ9XCJfX3AgKz0gJ1wiLHA9TGUoKHQuZXNjYXBlfHx5ZSkuc291cmNlK1wifFwiK2Yuc291cmNlK1wifFwiKyhmPT09WD9mZTp5ZSkuc291cmNlK1wifFwiKyh0LmV2YWx1YXRlfHx5ZSkuc291cmNlK1wifCRcIixcImdcIiksaD1cIi8vIyBzb3VyY2VVUkw9XCIrKEllLmNhbGwodCxcInNvdXJjZVVSTFwiKT8odC5zb3VyY2VVUkwrXCJcIikucmVwbGFjZSgvXFxzL2csXCIgXCIpOlwibG9kYXNoLnRlbXBsYXRlU291cmNlc1tcIisgKytydCtcIl1cIikrXCJcXG5cIjtlLnJlcGxhY2UocCwoZnVuY3Rpb24odCxuLHIsbyxsLHMpe3JldHVybiByfHwocj1vKSxkKz1lLnNsaWNlKHUscykucmVwbGFjZSh3ZSxubiksbiYmKGk9ITAsZCs9XCInICtcXG5fX2UoXCIrbitcIikgK1xcbidcIiksbCYmKGE9ITAsZCs9XCInO1xcblwiK2wrXCI7XFxuX19wICs9ICdcIiksciYmKGQrPVwiJyArXFxuKChfX3QgPSAoXCIrcitcIikpID09IG51bGwgPyAnJyA6IF9fdCkgK1xcbidcIiksdT1zK3QubGVuZ3RoLHR9KSksZCs9XCInO1xcblwiO3ZhciBnPUllLmNhbGwodCxcInZhcmlhYmxlXCIpJiZ0LnZhcmlhYmxlO2lmKGcpe2lmKGNlLnRlc3QoZykpdGhyb3cgbmV3IGJlKFwiSW52YWxpZCBgdmFyaWFibGVgIG9wdGlvbiBwYXNzZWQgaW50byBgXy50ZW1wbGF0ZWBcIil9ZWxzZSBkPVwid2l0aCAob2JqKSB7XFxuXCIrZCtcIlxcbn1cXG5cIjtkPShhP2QucmVwbGFjZShOLFwiXCIpOmQpLnJlcGxhY2UoRixcIiQxXCIpLnJlcGxhY2UoVSxcIiQxO1wiKSxkPVwiZnVuY3Rpb24oXCIrKGd8fFwib2JqXCIpK1wiKSB7XFxuXCIrKGc/XCJcIjpcIm9iaiB8fCAob2JqID0ge30pO1xcblwiKStcInZhciBfX3QsIF9fcCA9ICcnXCIrKGk/XCIsIF9fZSA9IF8uZXNjYXBlXCI6XCJcIikrKGE/XCIsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xcbmZ1bmN0aW9uIHByaW50KCkgeyBfX3AgKz0gX19qLmNhbGwoYXJndW1lbnRzLCAnJykgfVxcblwiOlwiO1xcblwiKStkK1wicmV0dXJuIF9fcFxcbn1cIjt2YXIgdj1xbCgoZnVuY3Rpb24oKXtyZXR1cm4geGUocyxoK1wicmV0dXJuIFwiK2QpLmFwcGx5KG8sYyl9KSk7aWYodi5zb3VyY2U9ZCx6YSh2KSl0aHJvdyB2O3JldHVybiB2fSxCbi50aW1lcz1mdW5jdGlvbihlLHQpe2lmKChlPXVsKGUpKTwxfHxlPmYpcmV0dXJuW107dmFyIG49cCxyPXZuKGUscCk7dD1paSh0KSxlLT1wO2Zvcih2YXIgbz1HdChyLHQpOysrbjxlOyl0KG4pO3JldHVybiBvfSxCbi50b0Zpbml0ZT1jbCxCbi50b0ludGVnZXI9dWwsQm4udG9MZW5ndGg9ZmwsQm4udG9Mb3dlcj1mdW5jdGlvbihlKXtyZXR1cm4gaGwoZSkudG9Mb3dlckNhc2UoKX0sQm4udG9OdW1iZXI9ZGwsQm4udG9TYWZlSW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4gZT9vcih1bChlKSwtOTAwNzE5OTI1NDc0MDk5MSxmKTowPT09ZT9lOjB9LEJuLnRvU3RyaW5nPWhsLEJuLnRvVXBwZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGhsKGUpLnRvVXBwZXJDYXNlKCl9LEJuLnRyaW09ZnVuY3Rpb24oZSx0LG4pe2lmKChlPWhsKGUpKSYmKG58fHQ9PT1vKSlyZXR1cm4gcXQoZSk7aWYoIWV8fCEodD1pbyh0KSkpcmV0dXJuIGU7dmFyIHI9dW4oZSksaT11bih0KTtyZXR1cm4gQ28ocixKdChyLGkpLFF0KHIsaSkrMSkuam9pbihcIlwiKX0sQm4udHJpbUVuZD1mdW5jdGlvbihlLHQsbil7aWYoKGU9aGwoZSkpJiYobnx8dD09PW8pKXJldHVybiBlLnNsaWNlKDAsZm4oZSkrMSk7aWYoIWV8fCEodD1pbyh0KSkpcmV0dXJuIGU7dmFyIHI9dW4oZSk7cmV0dXJuIENvKHIsMCxRdChyLHVuKHQpKSsxKS5qb2luKFwiXCIpfSxCbi50cmltU3RhcnQ9ZnVuY3Rpb24oZSx0LG4pe2lmKChlPWhsKGUpKSYmKG58fHQ9PT1vKSlyZXR1cm4gZS5yZXBsYWNlKHJlLFwiXCIpO2lmKCFlfHwhKHQ9aW8odCkpKXJldHVybiBlO3ZhciByPXVuKGUpO3JldHVybiBDbyhyLEp0KHIsdW4odCkpKS5qb2luKFwiXCIpfSxCbi50cnVuY2F0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPTMwLHI9XCIuLi5cIjtpZihLYSh0KSl7dmFyIGk9XCJzZXBhcmF0b3JcImluIHQ/dC5zZXBhcmF0b3I6aTtuPVwibGVuZ3RoXCJpbiB0P3VsKHQubGVuZ3RoKTpuLHI9XCJvbWlzc2lvblwiaW4gdD9pbyh0Lm9taXNzaW9uKTpyfXZhciBhPShlPWhsKGUpKS5sZW5ndGg7aWYocm4oZSkpe3ZhciBsPXVuKGUpO2E9bC5sZW5ndGh9aWYobj49YSlyZXR1cm4gZTt2YXIgcz1uLWNuKHIpO2lmKHM8MSlyZXR1cm4gcjt2YXIgYz1sP0NvKGwsMCxzKS5qb2luKFwiXCIpOmUuc2xpY2UoMCxzKTtpZihpPT09bylyZXR1cm4gYytyO2lmKGwmJihzKz1jLmxlbmd0aC1zKSx0bChpKSl7aWYoZS5zbGljZShzKS5zZWFyY2goaSkpe3ZhciB1LGY9Yztmb3IoaS5nbG9iYWx8fChpPUxlKGkuc291cmNlLGhsKGRlLmV4ZWMoaSkpK1wiZ1wiKSksaS5sYXN0SW5kZXg9MDt1PWkuZXhlYyhmKTspdmFyIGQ9dS5pbmRleDtjPWMuc2xpY2UoMCxkPT09bz9zOmQpfX1lbHNlIGlmKGUuaW5kZXhPZihpbyhpKSxzKSE9cyl7dmFyIHA9Yy5sYXN0SW5kZXhPZihpKTtwPi0xJiYoYz1jLnNsaWNlKDAscCkpfXJldHVybiBjK3J9LEJuLnVuZXNjYXBlPWZ1bmN0aW9uKGUpe3JldHVybihlPWhsKGUpKSYmRy50ZXN0KGUpP2UucmVwbGFjZShXLGRuKTplfSxCbi51bmlxdWVJZD1mdW5jdGlvbihlKXt2YXIgdD0rK0FlO3JldHVybiBobChlKSt0fSxCbi51cHBlckNhc2U9V2wsQm4udXBwZXJGaXJzdD16bCxCbi5lYWNoPWhhLEJuLmVhY2hSaWdodD1nYSxCbi5maXJzdD1OaSxycyhCbiwocHM9e30sbXIoQm4sKGZ1bmN0aW9uKGUsdCl7SWUuY2FsbChCbi5wcm90b3R5cGUsdCl8fChwc1t0XT1lKX0pKSxwcykse2NoYWluOiExfSksQm4uVkVSU0lPTj1cIjQuMTcuMjFcIixMdChbXCJiaW5kXCIsXCJiaW5kS2V5XCIsXCJjdXJyeVwiLFwiY3VycnlSaWdodFwiLFwicGFydGlhbFwiLFwicGFydGlhbFJpZ2h0XCJdLChmdW5jdGlvbihlKXtCbltlXS5wbGFjZWhvbGRlcj1Cbn0pKSxMdChbXCJkcm9wXCIsXCJ0YWtlXCJdLChmdW5jdGlvbihlLHQpeyRuLnByb3RvdHlwZVtlXT1mdW5jdGlvbihuKXtuPW49PT1vPzE6Z24odWwobiksMCk7dmFyIHI9dGhpcy5fX2ZpbHRlcmVkX18mJiF0P25ldyAkbih0aGlzKTp0aGlzLmNsb25lKCk7cmV0dXJuIHIuX19maWx0ZXJlZF9fP3IuX190YWtlQ291bnRfXz12bihuLHIuX190YWtlQ291bnRfXyk6ci5fX3ZpZXdzX18ucHVzaCh7c2l6ZTp2bihuLHApLHR5cGU6ZSsoci5fX2Rpcl9fPDA/XCJSaWdodFwiOlwiXCIpfSkscn0sJG4ucHJvdG90eXBlW2UrXCJSaWdodFwiXT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXZlcnNlKClbZV0odCkucmV2ZXJzZSgpfX0pKSxMdChbXCJmaWx0ZXJcIixcIm1hcFwiLFwidGFrZVdoaWxlXCJdLChmdW5jdGlvbihlLHQpe3ZhciBuPXQrMSxyPTE9PW58fDM9PW47JG4ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gdC5fX2l0ZXJhdGVlc19fLnB1c2goe2l0ZXJhdGVlOmlpKGUsMyksdHlwZTpufSksdC5fX2ZpbHRlcmVkX189dC5fX2ZpbHRlcmVkX198fHIsdH19KSksTHQoW1wiaGVhZFwiLFwibGFzdFwiXSwoZnVuY3Rpb24oZSx0KXt2YXIgbj1cInRha2VcIisodD9cIlJpZ2h0XCI6XCJcIik7JG4ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbbl0oMSkudmFsdWUoKVswXX19KSksTHQoW1wiaW5pdGlhbFwiLFwidGFpbFwiXSwoZnVuY3Rpb24oZSx0KXt2YXIgbj1cImRyb3BcIisodD9cIlwiOlwiUmlnaHRcIik7JG4ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19maWx0ZXJlZF9fP25ldyAkbih0aGlzKTp0aGlzW25dKDEpfX0pKSwkbi5wcm90b3R5cGUuY29tcGFjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbHRlcihRbCl9LCRuLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZpbHRlcihlKS5oZWFkKCl9LCRuLnByb3RvdHlwZS5maW5kTGFzdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZXZlcnNlKCkuZmluZChlKX0sJG4ucHJvdG90eXBlLmludm9rZU1hcD16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP25ldyAkbih0aGlzKTp0aGlzLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIFNyKG4sZSx0KX0pKX0pKSwkbi5wcm90b3R5cGUucmVqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZpbHRlcihSYShpaShlKSkpfSwkbi5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXtlPXVsKGUpO3ZhciBuPXRoaXM7cmV0dXJuIG4uX19maWx0ZXJlZF9fJiYoZT4wfHx0PDApP25ldyAkbihuKTooZTwwP249bi50YWtlUmlnaHQoLWUpOmUmJihuPW4uZHJvcChlKSksdCE9PW8mJihuPSh0PXVsKHQpKTwwP24uZHJvcFJpZ2h0KC10KTpuLnRha2UodC1lKSksbil9LCRuLnByb3RvdHlwZS50YWtlUmlnaHRXaGlsZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZXZlcnNlKCkudGFrZVdoaWxlKGUpLnJldmVyc2UoKX0sJG4ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YWtlKHApfSxtcigkbi5wcm90b3R5cGUsKGZ1bmN0aW9uKGUsdCl7dmFyIG49L14oPzpmaWx0ZXJ8ZmluZHxtYXB8cmVqZWN0KXxXaGlsZSQvLnRlc3QodCkscj0vXig/OmhlYWR8bGFzdCkkLy50ZXN0KHQpLGk9Qm5bcj9cInRha2VcIisoXCJsYXN0XCI9PXQ/XCJSaWdodFwiOlwiXCIpOnRdLGE9cnx8L15maW5kLy50ZXN0KHQpO2kmJihCbi5wcm90b3R5cGVbdF09ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fd3JhcHBlZF9fLGw9cj9bMV06YXJndW1lbnRzLHM9dCBpbnN0YW5jZW9mICRuLGM9bFswXSx1PXN8fFphKHQpLGY9ZnVuY3Rpb24oZSl7dmFyIHQ9aS5hcHBseShCbixQdChbZV0sbCkpO3JldHVybiByJiZkP3RbMF06dH07dSYmbiYmXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmMSE9Yy5sZW5ndGgmJihzPXU9ITEpO3ZhciBkPXRoaXMuX19jaGFpbl9fLHA9ISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxoPWEmJiFkLGc9cyYmIXA7aWYoIWEmJnUpe3Q9Zz90Om5ldyAkbih0aGlzKTt2YXIgdj1lLmFwcGx5KHQsbCk7cmV0dXJuIHYuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpjYSxhcmdzOltmXSx0aGlzQXJnOm99KSxuZXcgWm4odixkKX1yZXR1cm4gaCYmZz9lLmFwcGx5KHRoaXMsbCk6KHY9dGhpcy50aHJ1KGYpLGg/cj92LnZhbHVlKClbMF06di52YWx1ZSgpOnYpfSl9KSksTHQoW1wicG9wXCIsXCJwdXNoXCIsXCJzaGlmdFwiLFwic29ydFwiLFwic3BsaWNlXCIsXCJ1bnNoaWZ0XCJdLChmdW5jdGlvbihlKXt2YXIgdD1qZVtlXSxuPS9eKD86cHVzaHxzb3J0fHVuc2hpZnQpJC8udGVzdChlKT9cInRhcFwiOlwidGhydVwiLHI9L14oPzpwb3B8c2hpZnQpJC8udGVzdChlKTtCbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7aWYociYmIXRoaXMuX19jaGFpbl9fKXt2YXIgbz10aGlzLnZhbHVlKCk7cmV0dXJuIHQuYXBwbHkoWmEobyk/bzpbXSxlKX1yZXR1cm4gdGhpc1tuXSgoZnVuY3Rpb24obil7cmV0dXJuIHQuYXBwbHkoWmEobik/bjpbXSxlKX0pKX19KSksbXIoJG4ucHJvdG90eXBlLChmdW5jdGlvbihlLHQpe3ZhciBuPUJuW3RdO2lmKG4pe3ZhciByPW4ubmFtZStcIlwiO0llLmNhbGwoam4scil8fChqbltyXT1bXSksam5bcl0ucHVzaCh7bmFtZTp0LGZ1bmM6bn0pfX0pKSxqbltCbyhvLDIpLm5hbWVdPVt7bmFtZTpcIndyYXBwZXJcIixmdW5jOm99XSwkbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgJG4odGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuIGUuX19hY3Rpb25zX189RW8odGhpcy5fX2FjdGlvbnNfXyksZS5fX2Rpcl9fPXRoaXMuX19kaXJfXyxlLl9fZmlsdGVyZWRfXz10aGlzLl9fZmlsdGVyZWRfXyxlLl9faXRlcmF0ZWVzX189RW8odGhpcy5fX2l0ZXJhdGVlc19fKSxlLl9fdGFrZUNvdW50X189dGhpcy5fX3Rha2VDb3VudF9fLGUuX192aWV3c19fPUVvKHRoaXMuX192aWV3c19fKSxlfSwkbi5wcm90b3R5cGUucmV2ZXJzZT1mdW5jdGlvbigpe2lmKHRoaXMuX19maWx0ZXJlZF9fKXt2YXIgZT1uZXcgJG4odGhpcyk7ZS5fX2Rpcl9fPS0xLGUuX19maWx0ZXJlZF9fPSEwfWVsc2UoZT10aGlzLmNsb25lKCkpLl9fZGlyX18qPS0xO3JldHVybiBlfSwkbi5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksdD10aGlzLl9fZGlyX18sbj1aYShlKSxyPXQ8MCxvPW4/ZS5sZW5ndGg6MCxpPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9LTEsbz1uLmxlbmd0aDsrK3I8bzspe3ZhciBpPW5bcl0sYT1pLnNpemU7c3dpdGNoKGkudHlwZSl7Y2FzZVwiZHJvcFwiOmUrPWE7YnJlYWs7Y2FzZVwiZHJvcFJpZ2h0XCI6dC09YTticmVhaztjYXNlXCJ0YWtlXCI6dD12bih0LGUrYSk7YnJlYWs7Y2FzZVwidGFrZVJpZ2h0XCI6ZT1nbihlLHQtYSl9fXJldHVybntzdGFydDplLGVuZDp0fX0oMCxvLHRoaXMuX192aWV3c19fKSxhPWkuc3RhcnQsbD1pLmVuZCxzPWwtYSxjPXI/bDphLTEsdT10aGlzLl9faXRlcmF0ZWVzX18sZj11Lmxlbmd0aCxkPTAscD12bihzLHRoaXMuX190YWtlQ291bnRfXyk7aWYoIW58fCFyJiZvPT1zJiZwPT1zKXJldHVybiB1byhlLHRoaXMuX19hY3Rpb25zX18pO3ZhciBoPVtdO2U6Zm9yKDtzLS0mJmQ8cDspe2Zvcih2YXIgZz0tMSx2PWVbYys9dF07KytnPGY7KXt2YXIgbT11W2ddLEM9bS5pdGVyYXRlZSx5PW0udHlwZSx3PUModik7aWYoMj09eSl2PXc7ZWxzZSBpZighdyl7aWYoMT09eSljb250aW51ZSBlO2JyZWFrIGV9fWhbZCsrXT12fXJldHVybiBofSxCbi5wcm90b3R5cGUuYXQ9dWEsQm4ucHJvdG90eXBlLmNoYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHNhKHRoaXMpfSxCbi5wcm90b3R5cGUuY29tbWl0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBabih0aGlzLnZhbHVlKCksdGhpcy5fX2NoYWluX18pfSxCbi5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3RoaXMuX192YWx1ZXNfXz09PW8mJih0aGlzLl9fdmFsdWVzX189c2wodGhpcy52YWx1ZSgpKSk7dmFyIGU9dGhpcy5fX2luZGV4X18+PXRoaXMuX192YWx1ZXNfXy5sZW5ndGg7cmV0dXJue2RvbmU6ZSx2YWx1ZTplP286dGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdfX0sQm4ucHJvdG90eXBlLnBsYW50PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPXRoaXM7biBpbnN0YW5jZW9mIERuOyl7dmFyIHI9VGkobik7ci5fX2luZGV4X189MCxyLl9fdmFsdWVzX189byx0P2kuX193cmFwcGVkX189cjp0PXI7dmFyIGk9cjtuPW4uX193cmFwcGVkX199cmV0dXJuIGkuX193cmFwcGVkX189ZSx0fSxCbi5wcm90b3R5cGUucmV2ZXJzZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX193cmFwcGVkX187aWYoZSBpbnN0YW5jZW9mICRuKXt2YXIgdD1lO3JldHVybiB0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCYmKHQ9bmV3ICRuKHRoaXMpKSwodD10LnJldmVyc2UoKSkuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpjYSxhcmdzOltLaV0sdGhpc0FyZzpvfSksbmV3IFpuKHQsdGhpcy5fX2NoYWluX18pfXJldHVybiB0aGlzLnRocnUoS2kpfSxCbi5wcm90b3R5cGUudG9KU09OPUJuLnByb3RvdHlwZS52YWx1ZU9mPUJuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3JldHVybiB1byh0aGlzLl9fd3JhcHBlZF9fLHRoaXMuX19hY3Rpb25zX18pfSxCbi5wcm90b3R5cGUuZmlyc3Q9Qm4ucHJvdG90eXBlLmhlYWQsWWUmJihCbi5wcm90b3R5cGVbWWVdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxCbn0oKTtmdC5fPXBuLChyPWZ1bmN0aW9uKCl7cmV0dXJuIHBufS5jYWxsKHQsbix0LGUpKT09PW98fChlLmV4cG9ydHM9cil9LmNhbGwodGhpcyl9LDMwMDooZSx0LG4pPT57dmFyIHIsbztlPW4ubm1kKGUpLGZ1bmN0aW9uKHQpe3QucnVubmluZ0luTm9kZUpTPWZ1bmN0aW9uKCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHByb2Nlc3MmJlwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzLnZlcnNpb25zJiZcInN0cmluZ1wiPT10eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlfSx0LnJ1bm5pbmdJbk1haW5Ob2RlSlNNb2R1bGU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5ydW5uaW5nSW5Ob2RlSlMoKSYmbi5jW24uc109PT1lfSx0LmNvbW1vbkpTQXZhaWxhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUuZXhwb3J0c30sdC5ydW5uaW5nSW5XZWJXb3JrZXI9ZnVuY3Rpb24oKXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2Ygd2luZG93JiZcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmXCJmdW5jdGlvblwiPT10eXBlb2Ygc2VsZi5hZGRFdmVudExpc3RlbmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBzZWxmLmNsb3NlfSx0LnJ1bm5pbmdJbk5vZGVDaGlsZFByb2Nlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdC5ydW5uaW5nSW5Ob2RlSlMoKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgcHJvY2Vzcy5zZW5kfSx0LnJ1bm5pbmdJbk51bGxPcmlnaW49ZnVuY3Rpb24oKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93LmxvY2F0aW9uJiZcIm9iamVjdFwiPT10eXBlb2YgZG9jdW1lbnQmJlwiaHR0cDpcIiE9PWRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sJiZcImh0dHBzOlwiIT09ZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2x9LHQud2ViV29ya2Vyc0F2YWlsYWJsZT1mdW5jdGlvbigpe3JldHVybiEoXCJmdW5jdGlvblwiIT10eXBlb2YgV29ya2VyfHx0LnJ1bm5pbmdJbk51bGxPcmlnaW4oKXx8dC5ydW5uaW5nSW5Ob2RlSlMoKXx8bmF2aWdhdG9yJiZuYXZpZ2F0b3IudXNlckFnZW50JiZuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJBbmRyb2lkIDQuM1wiKT49MCl9LHQubG9nPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpLFwib2JqZWN0XCI9PXR5cGVvZiBjb25zb2xlJiZ0JiZcIm9iamVjdFwiPT10eXBlb2YgZG9jdW1lbnQmJihkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9ZStcIjxici8+XCIpfSx0LmNyZWF0ZUVycm9yTWVzc2FnZT1mdW5jdGlvbihlLG4pe2lmKHZvaWQgMD09PW4mJihuPVwiVW5oYW5kbGVkIGV4Y2VwdGlvblwiKSxudWxsPT1lKXJldHVybiBuO2lmKG4rPVwiOiBcIixcIm9iamVjdFwiPT10eXBlb2YgZS5jb250ZW50KXtpZih0LnJ1bm5pbmdJbk5vZGVKUygpKXJldHVybiBuK2UuY29udGVudC5zdGFjazt2YXIgcj1KU09OLnN0cmluZ2lmeShlLmNvbnRlbnQpO3JldHVyblwie31cIiE9PXI/bityOm4rZS5jb250ZW50fXJldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlLmNvbnRlbnQ/bitlLmNvbnRlbnQ6bitlfSx0LnByaW50RXhjZXB0aW9uQW5kU3RhY2tUcmFjZVRvQ29uc29sZT1mdW5jdGlvbihlLG4pe3ZvaWQgMD09PW4mJihuPVwiVW5oYW5kbGVkIGV4Y2VwdGlvblwiKSx0LmxvZyh0LmNyZWF0ZUVycm9yTWVzc2FnZShlLG4pKX0sdC5nZXRHbG9iYWxPYmplY3Q9ZnVuY3Rpb24oKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2Ygbi5nP24uZzpcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93P3dpbmRvdzpcIm9iamVjdFwiPT10eXBlb2Ygc2VsZj9zZWxmOnt9fSx0LnRvU3RyaW5nPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsdC5jb21tb25KU0F2YWlsYWJsZSgpJiYoZS5leHBvcnRzPXQpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFVpbnQ4QXJyYXkmJjAhPT1uZXcgVWludDhBcnJheSgxKS5zdWJhcnJheSgxKS5ieXRlTGVuZ3RoKXt2YXIgdD1mdW5jdGlvbihlLHQpe3ZhciBuPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZTx0P3Q6ZT5uP246ZX07ZXw9MCx0fD0wLGFyZ3VtZW50cy5sZW5ndGg8MSYmKGU9MCksYXJndW1lbnRzLmxlbmd0aDwyJiYodD10aGlzLmxlbmd0aCksZTwwJiYoZT10aGlzLmxlbmd0aCtlKSx0PDAmJih0PXRoaXMubGVuZ3RoK3QpLGU9bihlLDAsdGhpcy5sZW5ndGgpO3ZhciByPSh0PW4odCwwLHRoaXMubGVuZ3RoKSktZTtyZXR1cm4gcjwwJiYocj0wKSxuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmJ1ZmZlcix0aGlzLmJ5dGVPZmZzZXQrZSp0aGlzLkJZVEVTX1BFUl9FTEVNRU5ULHIpfSxuPVtcIkludDhBcnJheVwiLFwiVWludDhBcnJheVwiLFwiVWludDhDbGFtcGVkQXJyYXlcIixcIkludDE2QXJyYXlcIixcIlVpbnQxNkFycmF5XCIsXCJJbnQzMkFycmF5XCIsXCJVaW50MzJBcnJheVwiLFwiRmxvYXQzMkFycmF5XCIsXCJGbG9hdDY0QXJyYXlcIl0scj12b2lkIDA7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdz9yPXdpbmRvdzpcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmKHI9c2VsZiksdm9pZCAwIT09cilmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKylyW25bb11dJiYocltuW29dXS5wcm90b3R5cGUuc3ViYXJyYXk9dCl9fShyfHwocj17fSkpLGZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5jb21wcmVzc0FzeW5jPWZ1bmN0aW9uKHQsbixyKXt2YXIgbz1uZXcgZS5UaW1lcixpPW5ldyBlLkNvbXByZXNzb3I7aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImNvbXByZXNzQXN5bmM6IE5vIGNhbGxiYWNrIGFyZ3VtZW50IGdpdmVuXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXQ9ZS5lbmNvZGVVVEY4KHQpO2Vsc2UgaWYobnVsbD09dHx8ISh0IGluc3RhbmNlb2YgVWludDhBcnJheSkpcmV0dXJuIHZvaWQgcih2b2lkIDAsbmV3IFR5cGVFcnJvcihcImNvbXByZXNzQXN5bmM6IEludmFsaWQgaW5wdXQgYXJndW1lbnQsIG9ubHkgJ3N0cmluZycgYW5kICdVaW50OEFycmF5JyBhcmUgc3VwcG9ydGVkXCIpKTt2YXIgYT1lLkFycmF5VG9vbHMuc3BsaXRCeXRlQXJyYXkodCxuLmJsb2NrU2l6ZSksbD1bXSxzPWZ1bmN0aW9uKHQpe2lmKHQ8YS5sZW5ndGgpe3ZhciBjPXZvaWQgMDt0cnl7Yz1pLmNvbXByZXNzQmxvY2soYVt0XSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcih2b2lkIDAsZSl9bC5wdXNoKGMpLG8uZ2V0RWxhcHNlZFRpbWUoKTw9MjA/cyh0KzEpOihlLmVucXVldWVJbW1lZGlhdGUoKGZ1bmN0aW9uKCl7cmV0dXJuIHModCsxKX0pKSxvLnJlc3RhcnQoKSl9ZWxzZXt2YXIgdT1lLkFycmF5VG9vbHMuY29uY2F0VWludDhBcnJheXMobCk7ZS5lbnF1ZXVlSW1tZWRpYXRlKChmdW5jdGlvbigpe3ZhciB0O3RyeXt0PWUuQ29tcHJlc3Npb25Db21tb24uZW5jb2RlQ29tcHJlc3NlZEJ5dGVzKHUsbi5vdXRwdXRFbmNvZGluZyl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcih2b2lkIDAsZSl9ZS5lbnF1ZXVlSW1tZWRpYXRlKChmdW5jdGlvbigpe3JldHVybiByKHQpfSkpfSkpfX07ZS5lbnF1ZXVlSW1tZWRpYXRlKChmdW5jdGlvbigpe3JldHVybiBzKDApfSkpfSx0LmNyZWF0ZUNvbXByZXNzaW9uU3RyZWFtPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGUuQ29tcHJlc3NvcixyPW5ldyhuKDk5KS5UcmFuc2Zvcm0pKHtkZWNvZGVTdHJpbmdzOiEwLGhpZ2hXYXRlck1hcms6NjU1MzZ9KTtyZXR1cm4gci5fdHJhbnNmb3JtPWZ1bmN0aW9uKG4sbyxpKXt2YXIgYTt0cnl7YT1lLkJ1ZmZlclRvb2xzLnVpbnQ4QXJyYXlUb0J1ZmZlcih0LmNvbXByZXNzQmxvY2soZS5CdWZmZXJUb29scy5idWZmZXJUb1VpbnQ4QXJyYXkobikpKX1jYXRjaChlKXtyZXR1cm4gdm9pZCByLmVtaXQoXCJlcnJvclwiLGUpfXIucHVzaChhKSxpKCl9LHJ9LHR9KCk7ZS5Bc3luY0NvbXByZXNzb3I9dH0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuZGVjb21wcmVzc0FzeW5jPWZ1bmN0aW9uKHQsbixyKXtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGVjb21wcmVzc0FzeW5jOiBObyBjYWxsYmFjayBhcmd1bWVudCBnaXZlblwiKTt2YXIgbz1uZXcgZS5UaW1lcjt0cnl7dD1lLkNvbXByZXNzaW9uQ29tbW9uLmRlY29kZUNvbXByZXNzZWRCeXRlcyh0LG4uaW5wdXRFbmNvZGluZyl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcih2b2lkIDAsZSl9dmFyIGk9bmV3IGUuRGVjb21wcmVzc29yLGE9ZS5BcnJheVRvb2xzLnNwbGl0Qnl0ZUFycmF5KHQsbi5ibG9ja1NpemUpLGw9W10scz1mdW5jdGlvbih0KXtpZih0PGEubGVuZ3RoKXt2YXIgYz12b2lkIDA7dHJ5e2M9aS5kZWNvbXByZXNzQmxvY2soYVt0XSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcih2b2lkIDAsZSl9bC5wdXNoKGMpLG8uZ2V0RWxhcHNlZFRpbWUoKTw9MjA/cyh0KzEpOihlLmVucXVldWVJbW1lZGlhdGUoKGZ1bmN0aW9uKCl7cmV0dXJuIHModCsxKX0pKSxvLnJlc3RhcnQoKSl9ZWxzZXt2YXIgdT1lLkFycmF5VG9vbHMuY29uY2F0VWludDhBcnJheXMobCk7ZS5lbnF1ZXVlSW1tZWRpYXRlKChmdW5jdGlvbigpe3ZhciB0O3RyeXt0PWUuQ29tcHJlc3Npb25Db21tb24uZW5jb2RlRGVjb21wcmVzc2VkQnl0ZXModSxuLm91dHB1dEVuY29kaW5nKX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKHZvaWQgMCxlKX1lLmVucXVldWVJbW1lZGlhdGUoKGZ1bmN0aW9uKCl7cmV0dXJuIHIodCl9KSl9KSl9fTtlLmVucXVldWVJbW1lZGlhdGUoKGZ1bmN0aW9uKCl7cmV0dXJuIHMoMCl9KSl9LHQuY3JlYXRlRGVjb21wcmVzc2lvblN0cmVhbT1mdW5jdGlvbigpe3ZhciB0PW5ldyBlLkRlY29tcHJlc3NvcixyPW5ldyhuKDk5KS5UcmFuc2Zvcm0pKHtkZWNvZGVTdHJpbmdzOiEwLGhpZ2hXYXRlck1hcms6NjU1MzZ9KTtyZXR1cm4gci5fdHJhbnNmb3JtPWZ1bmN0aW9uKG4sbyxpKXt2YXIgYTt0cnl7YT1lLkJ1ZmZlclRvb2xzLnVpbnQ4QXJyYXlUb0J1ZmZlcih0LmRlY29tcHJlc3NCbG9jayhlLkJ1ZmZlclRvb2xzLmJ1ZmZlclRvVWludDhBcnJheShuKSkpfWNhdGNoKGUpe3JldHVybiB2b2lkIHIuZW1pdChcImVycm9yXCIsZSl9ci5wdXNoKGEpLGkoKX0scn0sdH0oKTtlLkFzeW5jRGVjb21wcmVzc29yPXR9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7dmFyIHQ7IWZ1bmN0aW9uKHQpe3QuY29tcHJlc3NBc3luYz1mdW5jdGlvbihlLG4scil7aWYoXCJCeXRlQXJyYXlcIiE9bi5pbnB1dEVuY29kaW5nfHxlIGluc3RhbmNlb2YgVWludDhBcnJheSl7dmFyIG89e3Rva2VuOk1hdGgucmFuZG9tKCkudG9TdHJpbmcoKSx0eXBlOlwiY29tcHJlc3NcIixkYXRhOmUsaW5wdXRFbmNvZGluZzpuLmlucHV0RW5jb2Rpbmcsb3V0cHV0RW5jb2Rpbmc6bi5vdXRwdXRFbmNvZGluZ30saT1mdW5jdGlvbihlKXt2YXIgbj1lLmRhdGE7biYmbi50b2tlbj09by50b2tlbiYmKHQuZ2xvYmFsV29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsaSksXCJlcnJvclwiPT1uLnR5cGU/cih2b2lkIDAsbmV3IEVycm9yKG4uZXJyb3IpKTpyKG4uZGF0YSkpfTt0Lmdsb2JhbFdvcmtlci5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLGkpLHQuZ2xvYmFsV29ya2VyLnBvc3RNZXNzYWdlKG8sW10pfWVsc2Ugcih2b2lkIDAsbmV3IFR5cGVFcnJvcihcImNvbXByZXNzQXN5bmM6IGlucHV0IGlzIG5vdCBhIFVpbnQ4QXJyYXlcIikpfSx0LmRlY29tcHJlc3NBc3luYz1mdW5jdGlvbihlLG4scil7dmFyIG89e3Rva2VuOk1hdGgucmFuZG9tKCkudG9TdHJpbmcoKSx0eXBlOlwiZGVjb21wcmVzc1wiLGRhdGE6ZSxpbnB1dEVuY29kaW5nOm4uaW5wdXRFbmNvZGluZyxvdXRwdXRFbmNvZGluZzpuLm91dHB1dEVuY29kaW5nfSxpPWZ1bmN0aW9uKGUpe3ZhciBuPWUuZGF0YTtuJiZuLnRva2VuPT1vLnRva2VuJiYodC5nbG9iYWxXb3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIixpKSxcImVycm9yXCI9PW4udHlwZT9yKHZvaWQgMCxuZXcgRXJyb3Iobi5lcnJvcikpOnIobi5kYXRhKSl9O3QuZ2xvYmFsV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsaSksdC5nbG9iYWxXb3JrZXIucG9zdE1lc3NhZ2UobyxbXSl9LHQuaW5zdGFsbFdlYldvcmtlcklmTmVlZGVkPWZ1bmN0aW9uKCl7XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnZvaWQgMD09PXNlbGYuZG9jdW1lbnQmJm51bGwhPXNlbGYuYWRkRXZlbnRMaXN0ZW5lciYmKHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwoZnVuY3Rpb24odCl7dmFyIG49dC5kYXRhO2lmKFwiY29tcHJlc3NcIj09bi50eXBlKXt2YXIgcj12b2lkIDA7dHJ5e3I9ZS5jb21wcmVzcyhuLmRhdGEse291dHB1dEVuY29kaW5nOm4ub3V0cHV0RW5jb2Rpbmd9KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBzZWxmLnBvc3RNZXNzYWdlKHt0b2tlbjpuLnRva2VuLHR5cGU6XCJlcnJvclwiLGVycm9yOmUuY3JlYXRlRXJyb3JNZXNzYWdlKHQpfSxbXSl9KG89e3Rva2VuOm4udG9rZW4sdHlwZTpcImNvbXByZXNzaW9uUmVzdWx0XCIsZGF0YTpyLGVuY29kaW5nOm4ub3V0cHV0RW5jb2Rpbmd9KS5kYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSYmLTE9PT1uYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKFwiTVNJRSAxMFwiKT9zZWxmLnBvc3RNZXNzYWdlKG8sW28uZGF0YS5idWZmZXJdKTpzZWxmLnBvc3RNZXNzYWdlKG8sW10pfWVsc2UgaWYoXCJkZWNvbXByZXNzXCI9PW4udHlwZSl7dmFyIG8saT12b2lkIDA7dHJ5e2k9ZS5kZWNvbXByZXNzKG4uZGF0YSx7aW5wdXRFbmNvZGluZzpuLmlucHV0RW5jb2Rpbmcsb3V0cHV0RW5jb2Rpbmc6bi5vdXRwdXRFbmNvZGluZ30pfWNhdGNoKHQpe3JldHVybiB2b2lkIHNlbGYucG9zdE1lc3NhZ2Uoe3Rva2VuOm4udG9rZW4sdHlwZTpcImVycm9yXCIsZXJyb3I6ZS5jcmVhdGVFcnJvck1lc3NhZ2UodCl9LFtdKX0obz17dG9rZW46bi50b2tlbix0eXBlOlwiZGVjb21wcmVzc2lvblJlc3VsdFwiLGRhdGE6aSxlbmNvZGluZzpuLm91dHB1dEVuY29kaW5nfSkuZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJi0xPT09bmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZihcIk1TSUUgMTBcIik/c2VsZi5wb3N0TWVzc2FnZShvLFtvLmRhdGEuYnVmZmVyXSk6c2VsZi5wb3N0TWVzc2FnZShvLFtdKX19KSksc2VsZi5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwoZnVuY3Rpb24odCl7ZS5sb2coZS5jcmVhdGVFcnJvck1lc3NhZ2UodC5lcnJvcixcIlVuZXhwZWN0ZWQgTFpVVEY4IFdlYldvcmtlciBleGNlcHRpb25cIikpfSkpKX0sdC5jcmVhdGVHbG9iYWxXb3JrZXJJZk5lZWRlZD1mdW5jdGlvbigpe2lmKHQuZ2xvYmFsV29ya2VyKXJldHVybiEwO2lmKCFlLndlYldvcmtlcnNBdmFpbGFibGUoKSlyZXR1cm4hMTtpZighdC5zY3JpcHRVUkkmJlwib2JqZWN0XCI9PXR5cGVvZiBkb2N1bWVudCl7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsenV0ZjhcIik7bnVsbCE9biYmKHQuc2NyaXB0VVJJPW4uZ2V0QXR0cmlidXRlKFwic3JjXCIpfHx2b2lkIDApfXJldHVybiEhdC5zY3JpcHRVUkkmJih0Lmdsb2JhbFdvcmtlcj1uZXcgV29ya2VyKHQuc2NyaXB0VVJJKSwhMCl9LHQudGVybWluYXRlPWZ1bmN0aW9uKCl7dC5nbG9iYWxXb3JrZXImJih0Lmdsb2JhbFdvcmtlci50ZXJtaW5hdGUoKSx0Lmdsb2JhbFdvcmtlcj12b2lkIDApfX0odD1lLldlYldvcmtlcnx8KGUuV2ViV29ya2VyPXt9KSksdC5pbnN0YWxsV2ViV29ya2VySWZOZWVkZWQoKX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMuY29udGFpbmVyPWUsdGhpcy5zdGFydFBvc2l0aW9uPXQsdGhpcy5sZW5ndGg9bn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvbnRhaW5lclt0aGlzLnN0YXJ0UG9zaXRpb24rZV19LGUucHJvdG90eXBlLmdldEluUmV2ZXJzZWRPcmRlcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb250YWluZXJbdGhpcy5zdGFydFBvc2l0aW9uK3RoaXMubGVuZ3RoLTEtZV19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3RoaXMuY29udGFpbmVyW3RoaXMuc3RhcnRQb3NpdGlvbitlXT10fSxlfSgpO2UuQXJyYXlTZWdtZW50PXR9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe2UuY29weUVsZW1lbnRzPWZ1bmN0aW9uKGUsdCxuLHIsbyl7Zm9yKDtvLS07KW5bcisrXT1lW3QrK119LGUuemVyb0VsZW1lbnRzPWZ1bmN0aW9uKGUsdCxuKXtmb3IoO24tLTspZVt0KytdPTB9LGUuY291bnROb256ZXJvVmFsdWVzSW5BcnJheT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPTA7bjxlLmxlbmd0aDtuKyspZVtuXSYmdCsrO3JldHVybiB0fSxlLnRydW5jYXRlU3RhcnRpbmdFbGVtZW50cz1mdW5jdGlvbihlLHQpe2lmKGUubGVuZ3RoPD10KXRocm93IG5ldyBSYW5nZUVycm9yKFwidHJ1bmNhdGVTdGFydGluZ0VsZW1lbnRzOiBSZXF1ZXN0ZWQgbGVuZ3RoIHNob3VsZCBiZSBzbWFsbGVyIHRoYW4gYXJyYXkgbGVuZ3RoXCIpO2Zvcih2YXIgbj1lLmxlbmd0aC10LHI9MDtyPHQ7cisrKWVbcl09ZVtuK3JdO2UubGVuZ3RoPXR9LGUuZG91YmxlQnl0ZUFycmF5Q2FwYWNpdHk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoMiplLmxlbmd0aCk7cmV0dXJuIHQuc2V0KGUpLHR9LGUuY29uY2F0VWludDhBcnJheXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj0wLHI9ZTtuPHIubGVuZ3RoO24rKyl0Kz0ocz1yW25dKS5sZW5ndGg7Zm9yKHZhciBvPW5ldyBVaW50OEFycmF5KHQpLGk9MCxhPTAsbD1lO2E8bC5sZW5ndGg7YSsrKXt2YXIgcz1sW2FdO28uc2V0KHMsaSksaSs9cy5sZW5ndGh9cmV0dXJuIG99LGUuc3BsaXRCeXRlQXJyYXk9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W10scj0wO3I8ZS5sZW5ndGg7KXt2YXIgbz1NYXRoLm1pbih0LGUubGVuZ3RoLXIpO24ucHVzaChlLnN1YmFycmF5KHIscitvKSkscis9b31yZXR1cm4gbn19KGUuQXJyYXlUb29sc3x8KGUuQXJyYXlUb29scz17fSkpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlKXtlLmNvbnZlcnRUb1VpbnQ4QXJyYXlJZk5lZWRlZD1mdW5jdGlvbih0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBCdWZmZXImJkJ1ZmZlci5pc0J1ZmZlcih0KT9lLmJ1ZmZlclRvVWludDhBcnJheSh0KTp0fSxlLnVpbnQ4QXJyYXlUb0J1ZmZlcj1mdW5jdGlvbihlKXtpZihCdWZmZXIucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih0LEJ1ZmZlci5wcm90b3R5cGUpLHR9Zm9yKHZhciBuPWUubGVuZ3RoLHI9bmV3IEJ1ZmZlcihuKSxvPTA7bzxuO28rKylyW29dPWVbb107cmV0dXJuIHJ9LGUuYnVmZmVyVG9VaW50OEFycmF5PWZ1bmN0aW9uKGUpe2lmKEJ1ZmZlci5wcm90b3R5cGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBuZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKTtmb3IodmFyIHQ9ZS5sZW5ndGgsbj1uZXcgVWludDhBcnJheSh0KSxyPTA7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59fShlLkJ1ZmZlclRvb2xzfHwoZS5CdWZmZXJUb29scz17fSkpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0KXt0LmdldENyb3BwZWRCdWZmZXI9ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9MCk7dmFyIG89bmV3IFVpbnQ4QXJyYXkobityKTtyZXR1cm4gby5zZXQoZS5zdWJhcnJheSh0LHQrbikpLG99LHQuZ2V0Q3JvcHBlZEFuZEFwcGVuZGVkQnl0ZUFycmF5PWZ1bmN0aW9uKHQsbixyLG8pe3JldHVybiBlLkFycmF5VG9vbHMuY29uY2F0VWludDhBcnJheXMoW3Quc3ViYXJyYXkobixuK3IpLG9dKX0sdC5kZXRlY3RDb21wcmVzc2lvblNvdXJjZUVuY29kaW5nPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcImRldGVjdENvbXByZXNzaW9uU291cmNlRW5jb2Rpbmc6IGlucHV0IGlzIG51bGwgb3IgdW5kZWZpbmVkXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVyblwiU3RyaW5nXCI7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIEJ1ZmZlciYmQnVmZmVyLmlzQnVmZmVyKGUpKXJldHVyblwiQnl0ZUFycmF5XCI7dGhyb3cgbmV3IFR5cGVFcnJvcihcImRldGVjdENvbXByZXNzaW9uU291cmNlRW5jb2Rpbmc6IGlucHV0IG11c3QgYmUgb2YgdHlwZSAnc3RyaW5nJywgJ1VpbnQ4QXJyYXknIG9yICdCdWZmZXInXCIpfSx0LmVuY29kZUNvbXByZXNzZWRCeXRlcz1mdW5jdGlvbih0LG4pe3N3aXRjaChuKXtjYXNlXCJCeXRlQXJyYXlcIjpyZXR1cm4gdDtjYXNlXCJCdWZmZXJcIjpyZXR1cm4gZS5CdWZmZXJUb29scy51aW50OEFycmF5VG9CdWZmZXIodCk7Y2FzZVwiQmFzZTY0XCI6cmV0dXJuIGUuZW5jb2RlQmFzZTY0KHQpO2Nhc2VcIkJpbmFyeVN0cmluZ1wiOnJldHVybiBlLmVuY29kZUJpbmFyeVN0cmluZyh0KTtjYXNlXCJTdG9yYWdlQmluYXJ5U3RyaW5nXCI6cmV0dXJuIGUuZW5jb2RlU3RvcmFnZUJpbmFyeVN0cmluZyh0KTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoXCJlbmNvZGVDb21wcmVzc2VkQnl0ZXM6IGludmFsaWQgb3V0cHV0IGVuY29kaW5nIHJlcXVlc3RlZFwiKX19LHQuZGVjb2RlQ29tcHJlc3NlZEJ5dGVzPWZ1bmN0aW9uKHQsbil7aWYobnVsbD09bil0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGVjb2RlQ29tcHJlc3NlZERhdGE6IElucHV0IGlzIG51bGwgb3IgdW5kZWZpbmVkXCIpO3N3aXRjaChuKXtjYXNlXCJCeXRlQXJyYXlcIjpjYXNlXCJCdWZmZXJcIjp2YXIgcj1lLkJ1ZmZlclRvb2xzLmNvbnZlcnRUb1VpbnQ4QXJyYXlJZk5lZWRlZCh0KTtpZighKHIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGVjb2RlQ29tcHJlc3NlZERhdGE6ICdCeXRlQXJyYXknIG9yICdCdWZmZXInIGlucHV0IHR5cGUgd2FzIHNwZWNpZmllZCBidXQgaW5wdXQgaXMgbm90IGEgVWludDhBcnJheSBvciBCdWZmZXJcIik7cmV0dXJuIHI7Y2FzZVwiQmFzZTY0XCI6aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImRlY29kZUNvbXByZXNzZWREYXRhOiAnQmFzZTY0JyBpbnB1dCB0eXBlIHdhcyBzcGVjaWZpZWQgYnV0IGlucHV0IGlzIG5vdCBhIHN0cmluZ1wiKTtyZXR1cm4gZS5kZWNvZGVCYXNlNjQodCk7Y2FzZVwiQmluYXJ5U3RyaW5nXCI6aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImRlY29kZUNvbXByZXNzZWREYXRhOiAnQmluYXJ5U3RyaW5nJyBpbnB1dCB0eXBlIHdhcyBzcGVjaWZpZWQgYnV0IGlucHV0IGlzIG5vdCBhIHN0cmluZ1wiKTtyZXR1cm4gZS5kZWNvZGVCaW5hcnlTdHJpbmcodCk7Y2FzZVwiU3RvcmFnZUJpbmFyeVN0cmluZ1wiOmlmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJkZWNvZGVDb21wcmVzc2VkRGF0YTogJ1N0b3JhZ2VCaW5hcnlTdHJpbmcnIGlucHV0IHR5cGUgd2FzIHNwZWNpZmllZCBidXQgaW5wdXQgaXMgbm90IGEgc3RyaW5nXCIpO3JldHVybiBlLmRlY29kZVN0b3JhZ2VCaW5hcnlTdHJpbmcodCk7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGVjb2RlQ29tcHJlc3NlZERhdGE6IGludmFsaWQgaW5wdXQgZW5jb2RpbmcgcmVxdWVzdGVkOiAnXCIuY29uY2F0KG4sXCInXCIpKX19LHQuZW5jb2RlRGVjb21wcmVzc2VkQnl0ZXM9ZnVuY3Rpb24odCxuKXtzd2l0Y2gobil7Y2FzZVwiU3RyaW5nXCI6cmV0dXJuIGUuZGVjb2RlVVRGOCh0KTtjYXNlXCJCeXRlQXJyYXlcIjpyZXR1cm4gdDtjYXNlXCJCdWZmZXJcIjppZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBCdWZmZXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImVuY29kZURlY29tcHJlc3NlZEJ5dGVzOiBhICdCdWZmZXInIHR5cGUgd2FzIHNwZWNpZmllZCBidXQgaXMgbm90IHN1cHBvcnRlZCBhdCB0aGUgY3VycmVudCBlbnZpcm5tZW50XCIpO3JldHVybiBlLkJ1ZmZlclRvb2xzLnVpbnQ4QXJyYXlUb0J1ZmZlcih0KTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoXCJlbmNvZGVEZWNvbXByZXNzZWRCeXRlczogaW52YWxpZCBvdXRwdXQgZW5jb2RpbmcgcmVxdWVzdGVkXCIpfX19KGUuQ29tcHJlc3Npb25Db21tb258fChlLkNvbXByZXNzaW9uQ29tbW9uPXt9KSl9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7dmFyIHQ7IWZ1bmN0aW9uKHQpe3ZhciBuLHI9W107dC5lbnF1ZXVlSW1tZWRpYXRlPWZ1bmN0aW9uKGUpe3IucHVzaChlKSwxPT09ci5sZW5ndGgmJm4oKX0sdC5pbml0aWFsaXplU2NoZWR1bGVyPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxuPXI7dDxuLmxlbmd0aDt0Kyspe3ZhciBvPW5bdF07dHJ5e28uY2FsbCh2b2lkIDApfWNhdGNoKHQpe2UucHJpbnRFeGNlcHRpb25BbmRTdGFja1RyYWNlVG9Db25zb2xlKHQsXCJlbnF1ZXVlSW1tZWRpYXRlIGV4Y2VwdGlvblwiKX19ci5sZW5ndGg9MH07aWYoZS5ydW5uaW5nSW5Ob2RlSlMoKSluPWZ1bmN0aW9uKCl7cmV0dXJuIHNldEltbWVkaWF0ZSgoZnVuY3Rpb24oKXtyZXR1cm4gdCgpfSkpfTtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cucG9zdE1lc3NhZ2Upe3ZhciBvLGk9XCJlbnF1ZXVlSW1tZWRpYXRlLVwiK01hdGgucmFuZG9tKCkudG9TdHJpbmcoKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwoZnVuY3Rpb24oZSl7ZS5kYXRhPT09aSYmdCgpfSkpLG89ZS5ydW5uaW5nSW5OdWxsT3JpZ2luKCk/XCIqXCI6d2luZG93LmxvY2F0aW9uLmhyZWYsbj1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cucG9zdE1lc3NhZ2UoaSxvKX19ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCYmXCJmdW5jdGlvblwiPT10eXBlb2YgTWVzc2FnZVBvcnQpe3ZhciBhPW5ldyBNZXNzYWdlQ2hhbm5lbDthLnBvcnQxLm9ubWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiB0KCl9LG49ZnVuY3Rpb24oKXtyZXR1cm4gYS5wb3J0Mi5wb3N0TWVzc2FnZSgwKX19ZWxzZSBuPWZ1bmN0aW9uKCl7cmV0dXJuIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIHQoKX0pLDApfX0sdC5pbml0aWFsaXplU2NoZWR1bGVyKCl9KHQ9ZS5FdmVudExvb3B8fChlLkV2ZW50TG9vcD17fSkpLGUuZW5xdWV1ZUltbWVkaWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdC5lbnF1ZXVlSW1tZWRpYXRlKGUpfX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7ZS5vdmVycmlkZT1mdW5jdGlvbih0LG4pe3JldHVybiBlLmV4dGVuZCh0LG4pfSxlLmV4dGVuZD1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9iaiBpcyBudWxsIG9yIHVuZGVmaW5lZFwiKTtpZihcIm9iamVjdFwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwib2JqIGlzIG5vdCBhbiBvYmplY3RcIik7aWYobnVsbD09dCYmKHQ9e30pLFwib2JqZWN0XCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJuZXdQcm9wZXJ0aWVzIGlzIG5vdCBhbiBvYmplY3RcIik7aWYobnVsbCE9dClmb3IodmFyIG4gaW4gdCllW25dPXRbbl07cmV0dXJuIGV9fShlLk9iamVjdFRvb2xzfHwoZS5PYmplY3RUb29scz17fSkpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe2UuZ2V0UmFuZG9tSW50ZWdlckluUmFuZ2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZStNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKHQtZSkpfSxlLmdldFJhbmRvbVVURjE2U3RyaW5nT2ZMZW5ndGg9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPVwiXCIscj0wO3I8dDtyKyspe3ZhciBvPXZvaWQgMDtkb3tvPWUuZ2V0UmFuZG9tSW50ZWdlckluUmFuZ2UoMCwxMTE0MTEyKX13aGlsZShvPj01NTI5NiYmbzw9NTczNDMpO24rPWUuRW5jb2RpbmcuQ29kZVBvaW50LmRlY29kZVRvU3RyaW5nKG8pfXJldHVybiBufX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9MTAyNCksdGhpcy5vdXRwdXRCdWZmZXJDYXBhY2l0eT1lLHRoaXMub3V0cHV0UG9zaXRpb249MCx0aGlzLm91dHB1dFN0cmluZz1cIlwiLHRoaXMub3V0cHV0QnVmZmVyPW5ldyBVaW50MTZBcnJheSh0aGlzLm91dHB1dEJ1ZmZlckNhcGFjaXR5KX1yZXR1cm4gZS5wcm90b3R5cGUuYXBwZW5kQ2hhckNvZGU9ZnVuY3Rpb24oZSl7dGhpcy5vdXRwdXRCdWZmZXJbdGhpcy5vdXRwdXRQb3NpdGlvbisrXT1lLHRoaXMub3V0cHV0UG9zaXRpb249PT10aGlzLm91dHB1dEJ1ZmZlckNhcGFjaXR5JiZ0aGlzLmZsdXNoQnVmZmVyVG9PdXRwdXRTdHJpbmcoKX0sZS5wcm90b3R5cGUuYXBwZW5kQ2hhckNvZGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl0aGlzLmFwcGVuZENoYXJDb2RlKGVbdF0pfSxlLnByb3RvdHlwZS5hcHBlbmRTdHJpbmc9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXRoaXMuYXBwZW5kQ2hhckNvZGUoZS5jaGFyQ29kZUF0KHQpKX0sZS5wcm90b3R5cGUuYXBwZW5kQ29kZVBvaW50PWZ1bmN0aW9uKGUpe2lmKGU8PTY1NTM1KXRoaXMuYXBwZW5kQ2hhckNvZGUoZSk7ZWxzZXtpZighKGU8PTExMTQxMTEpKXRocm93IG5ldyBFcnJvcihcImFwcGVuZENvZGVQb2ludDogQSBjb2RlIHBvaW50IG9mIFwiLmNvbmNhdChlLFwiIGNhbm5vdCBiZSBlbmNvZGVkIGluIFVURi0xNlwiKSk7dGhpcy5hcHBlbmRDaGFyQ29kZSg1NTI5NisoZS02NTUzNj4+PjEwKSksdGhpcy5hcHBlbmRDaGFyQ29kZSg1NjMyMCsoZS02NTUzNiYxMDIzKSl9fSxlLnByb3RvdHlwZS5nZXRPdXRwdXRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mbHVzaEJ1ZmZlclRvT3V0cHV0U3RyaW5nKCksdGhpcy5vdXRwdXRTdHJpbmd9LGUucHJvdG90eXBlLmZsdXNoQnVmZmVyVG9PdXRwdXRTdHJpbmc9ZnVuY3Rpb24oKXt0aGlzLm91dHB1dFBvc2l0aW9uPT09dGhpcy5vdXRwdXRCdWZmZXJDYXBhY2l0eT90aGlzLm91dHB1dFN0cmluZys9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHRoaXMub3V0cHV0QnVmZmVyKTp0aGlzLm91dHB1dFN0cmluZys9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHRoaXMub3V0cHV0QnVmZmVyLnN1YmFycmF5KDAsdGhpcy5vdXRwdXRQb3NpdGlvbikpLHRoaXMub3V0cHV0UG9zaXRpb249MH0sZX0oKTtlLlN0cmluZ0J1aWxkZXI9dH0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLnJlc3RhcnQoKX1yZXR1cm4gdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMuc3RhcnRUaW1lPXQuZ2V0VGltZXN0YW1wKCl9LHQucHJvdG90eXBlLmdldEVsYXBzZWRUaW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2V0VGltZXN0YW1wKCktdGhpcy5zdGFydFRpbWV9LHQucHJvdG90eXBlLmdldEVsYXBzZWRUaW1lQW5kUmVzdGFydD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0RWxhcHNlZFRpbWUoKTtyZXR1cm4gdGhpcy5yZXN0YXJ0KCksZX0sdC5wcm90b3R5cGUubG9nQW5kUmVzdGFydD1mdW5jdGlvbih0LG4pe3ZvaWQgMD09PW4mJihuPSEwKTt2YXIgcj10aGlzLmdldEVsYXBzZWRUaW1lKCksbz1cIlwiLmNvbmNhdCh0LFwiOiBcIikuY29uY2F0KHIudG9GaXhlZCgzKSxcIm1zXCIpO3JldHVybiBlLmxvZyhvLG4pLHRoaXMucmVzdGFydCgpLHJ9LHQuZ2V0VGltZXN0YW1wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGltZXN0YW1wRnVuY3x8dGhpcy5jcmVhdGVHbG9iYWxUaW1lc3RhbXBGdW5jdGlvbigpLHRoaXMudGltZXN0YW1wRnVuYygpfSx0LmdldE1pY3Jvc2Vjb25kVGltZXN0YW1wPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IoMWUzKnQuZ2V0VGltZXN0YW1wKCkpfSx0LmNyZWF0ZUdsb2JhbFRpbWVzdGFtcEZ1bmN0aW9uPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHByb2Nlc3MmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHByb2Nlc3MuaHJ0aW1lKXt2YXIgZT0wO3RoaXMudGltZXN0YW1wRnVuYz1mdW5jdGlvbigpe3ZhciB0PXByb2Nlc3MuaHJ0aW1lKCksbj0xZTMqdFswXSt0WzFdLzFlNjtyZXR1cm4gZStufSxlPURhdGUubm93KCktdGhpcy50aW1lc3RhbXBGdW5jKCl9ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgY2hyb21lJiZjaHJvbWUuSW50ZXJ2YWwpe3ZhciB0PURhdGUubm93KCksbj1uZXcgY2hyb21lLkludGVydmFsO24uc3RhcnQoKSx0aGlzLnRpbWVzdGFtcEZ1bmM9ZnVuY3Rpb24oKXtyZXR1cm4gdCtuLm1pY3Jvc2Vjb25kcygpLzFlM319ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdyl7dmFyIHI9RGF0ZS5ub3coKS1wZXJmb3JtYW5jZS5ub3coKTt0aGlzLnRpbWVzdGFtcEZ1bmM9ZnVuY3Rpb24oKXtyZXR1cm4gcitwZXJmb3JtYW5jZS5ub3coKX19ZWxzZSBEYXRlLm5vdz90aGlzLnRpbWVzdGFtcEZ1bmM9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKX06dGhpcy50aW1lc3RhbXBGdW5jPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9fSx0fSgpO2UuVGltZXI9dH0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dm9pZCAwPT09dCYmKHQ9ITApLHRoaXMuTWluaW11bVNlcXVlbmNlTGVuZ3RoPTQsdGhpcy5NYXhpbXVtU2VxdWVuY2VMZW5ndGg9MzEsdGhpcy5NYXhpbXVtTWF0Y2hEaXN0YW5jZT0zMjc2Nyx0aGlzLlByZWZpeEhhc2hUYWJsZVNpemU9NjU1MzcsdGhpcy5pbnB1dEJ1ZmZlclN0cmVhbU9mZnNldD0xLHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFVpbnQzMkFycmF5P3RoaXMucHJlZml4SGFzaFRhYmxlPW5ldyBlLkNvbXByZXNzb3JDdXN0b21IYXNoVGFibGUodGhpcy5QcmVmaXhIYXNoVGFibGVTaXplKTp0aGlzLnByZWZpeEhhc2hUYWJsZT1uZXcgZS5Db21wcmVzc29yU2ltcGxlSGFzaFRhYmxlKHRoaXMuUHJlZml4SGFzaFRhYmxlU2l6ZSl9cmV0dXJuIHQucHJvdG90eXBlLmNvbXByZXNzQmxvY2s9ZnVuY3Rpb24odCl7aWYobnVsbD09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiY29tcHJlc3NCbG9jazogdW5kZWZpbmVkIG9yIG51bGwgaW5wdXQgcmVjZWl2ZWRcIik7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PWUuZW5jb2RlVVRGOCh0KSksdD1lLkJ1ZmZlclRvb2xzLmNvbnZlcnRUb1VpbnQ4QXJyYXlJZk5lZWRlZCh0KSx0aGlzLmNvbXByZXNzVXRmOEJsb2NrKHQpfSx0LnByb3RvdHlwZS5jb21wcmVzc1V0ZjhCbG9jaz1mdW5jdGlvbihlKXtpZighZXx8MD09ZS5sZW5ndGgpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO3ZhciB0PXRoaXMuY3JvcEFuZEFkZE5ld0J5dGVzVG9JbnB1dEJ1ZmZlcihlKSxuPXRoaXMuaW5wdXRCdWZmZXIscj10aGlzLmlucHV0QnVmZmVyLmxlbmd0aDt0aGlzLm91dHB1dEJ1ZmZlcj1uZXcgVWludDhBcnJheShlLmxlbmd0aCksdGhpcy5vdXRwdXRCdWZmZXJQb3NpdGlvbj0wO2Zvcih2YXIgbz0wLGk9dDtpPHI7aSsrKXt2YXIgYT1uW2ldLGw9aTxvO2lmKGk+ci10aGlzLk1pbmltdW1TZXF1ZW5jZUxlbmd0aClsfHx0aGlzLm91dHB1dFJhd0J5dGUoYSk7ZWxzZXt2YXIgcz10aGlzLmdldEJ1Y2tldEluZGV4Rm9yUHJlZml4KGkpO2lmKCFsKXt2YXIgYz10aGlzLmZpbmRMb25nZXN0TWF0Y2goaSxzKTtudWxsIT1jJiYodGhpcy5vdXRwdXRQb2ludGVyQnl0ZXMoYy5sZW5ndGgsYy5kaXN0YW5jZSksbz1pK2MubGVuZ3RoLGw9ITApfWx8fHRoaXMub3V0cHV0UmF3Qnl0ZShhKTt2YXIgdT10aGlzLmlucHV0QnVmZmVyU3RyZWFtT2Zmc2V0K2k7dGhpcy5wcmVmaXhIYXNoVGFibGUuYWRkVmFsdWVUb0J1Y2tldChzLHUpfX1yZXR1cm4gdGhpcy5vdXRwdXRCdWZmZXIuc3ViYXJyYXkoMCx0aGlzLm91dHB1dEJ1ZmZlclBvc2l0aW9uKX0sdC5wcm90b3R5cGUuZmluZExvbmdlc3RNYXRjaD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucHJlZml4SGFzaFRhYmxlLmdldEFycmF5U2VnbWVudEZvckJ1Y2tldEluZGV4KHQsdGhpcy5yZXVzYWJsZUFycmF5U2VnbWVudE9iamVjdCk7aWYobnVsbD09bilyZXR1cm4gbnVsbDtmb3IodmFyIHIsbz10aGlzLmlucHV0QnVmZmVyLGk9MCxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBsLHM9bi5nZXRJblJldmVyc2VkT3JkZXIoYSktdGhpcy5pbnB1dEJ1ZmZlclN0cmVhbU9mZnNldCxjPWUtcztpZihsPXZvaWQgMD09PXI/dGhpcy5NaW5pbXVtU2VxdWVuY2VMZW5ndGgtMTpyPDEyOCYmYz49MTI4P2krKGk+Pj4xKTppLGM+dGhpcy5NYXhpbXVtTWF0Y2hEaXN0YW5jZXx8bD49dGhpcy5NYXhpbXVtU2VxdWVuY2VMZW5ndGh8fGUrbD49by5sZW5ndGgpYnJlYWs7aWYob1tzK2xdPT09b1tlK2xdKWZvcih2YXIgdT0wOzt1Kyspe2lmKGUrdT09PW8ubGVuZ3RofHxvW3MrdV0hPT1vW2UrdV0pe3U+bCYmKHI9YyxpPXUpO2JyZWFrfWlmKHU9PT10aGlzLk1heGltdW1TZXF1ZW5jZUxlbmd0aClyZXR1cm57ZGlzdGFuY2U6YyxsZW5ndGg6dGhpcy5NYXhpbXVtU2VxdWVuY2VMZW5ndGh9fX1yZXR1cm4gdm9pZCAwIT09cj97ZGlzdGFuY2U6cixsZW5ndGg6aX06bnVsbH0sdC5wcm90b3R5cGUuZ2V0QnVja2V0SW5kZXhGb3JQcmVmaXg9ZnVuY3Rpb24oZSl7cmV0dXJuKDc4ODA1OTkqdGhpcy5pbnB1dEJ1ZmZlcltlXSszOTYwMSp0aGlzLmlucHV0QnVmZmVyW2UrMV0rMTk5KnRoaXMuaW5wdXRCdWZmZXJbZSsyXSt0aGlzLmlucHV0QnVmZmVyW2UrM10pJXRoaXMuUHJlZml4SGFzaFRhYmxlU2l6ZX0sdC5wcm90b3R5cGUub3V0cHV0UG9pbnRlckJ5dGVzPWZ1bmN0aW9uKGUsdCl7dDwxMjg/KHRoaXMub3V0cHV0UmF3Qnl0ZSgxOTJ8ZSksdGhpcy5vdXRwdXRSYXdCeXRlKHQpKToodGhpcy5vdXRwdXRSYXdCeXRlKDIyNHxlKSx0aGlzLm91dHB1dFJhd0J5dGUodD4+PjgpLHRoaXMub3V0cHV0UmF3Qnl0ZSgyNTUmdCkpfSx0LnByb3RvdHlwZS5vdXRwdXRSYXdCeXRlPWZ1bmN0aW9uKGUpe3RoaXMub3V0cHV0QnVmZmVyW3RoaXMub3V0cHV0QnVmZmVyUG9zaXRpb24rK109ZX0sdC5wcm90b3R5cGUuY3JvcEFuZEFkZE5ld0J5dGVzVG9JbnB1dEJ1ZmZlcj1mdW5jdGlvbih0KXtpZih2b2lkIDA9PT10aGlzLmlucHV0QnVmZmVyKXJldHVybiB0aGlzLmlucHV0QnVmZmVyPXQsMDt2YXIgbj1NYXRoLm1pbih0aGlzLmlucHV0QnVmZmVyLmxlbmd0aCx0aGlzLk1heGltdW1NYXRjaERpc3RhbmNlKSxyPXRoaXMuaW5wdXRCdWZmZXIubGVuZ3RoLW47cmV0dXJuIHRoaXMuaW5wdXRCdWZmZXI9ZS5Db21wcmVzc2lvbkNvbW1vbi5nZXRDcm9wcGVkQW5kQXBwZW5kZWRCeXRlQXJyYXkodGhpcy5pbnB1dEJ1ZmZlcixyLG4sdCksdGhpcy5pbnB1dEJ1ZmZlclN0cmVhbU9mZnNldCs9cixufSx0fSgpO2UuQ29tcHJlc3Nvcj10fShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt0aGlzLm1pbmltdW1CdWNrZXRDYXBhY2l0eT00LHRoaXMubWF4aW11bUJ1Y2tldENhcGFjaXR5PTY0LHRoaXMuYnVja2V0TG9jYXRvcnM9bmV3IFVpbnQzMkFycmF5KDIqZSksdGhpcy5zdG9yYWdlPW5ldyBVaW50MzJBcnJheSgyKmUpLHRoaXMuc3RvcmFnZUluZGV4PTF9cmV0dXJuIHQucHJvdG90eXBlLmFkZFZhbHVlVG9CdWNrZXQ9ZnVuY3Rpb24odCxuKXt0PDw9MSx0aGlzLnN0b3JhZ2VJbmRleD49dGhpcy5zdG9yYWdlLmxlbmd0aD4+PjEmJnRoaXMuY29tcGFjdCgpO3ZhciByLG89dGhpcy5idWNrZXRMb2NhdG9yc1t0XTtpZigwPT09bylvPXRoaXMuc3RvcmFnZUluZGV4LHI9MSx0aGlzLnN0b3JhZ2VbdGhpcy5zdG9yYWdlSW5kZXhdPW4sdGhpcy5zdG9yYWdlSW5kZXgrPXRoaXMubWluaW11bUJ1Y2tldENhcGFjaXR5O2Vsc2V7KHI9dGhpcy5idWNrZXRMb2NhdG9yc1t0KzFdKT09PXRoaXMubWF4aW11bUJ1Y2tldENhcGFjaXR5LTEmJihyPXRoaXMudHJ1bmNhdGVCdWNrZXRUb05ld2VyRWxlbWVudHMobyxyLHRoaXMubWF4aW11bUJ1Y2tldENhcGFjaXR5LzIpKTt2YXIgaT1vK3I7MD09PXRoaXMuc3RvcmFnZVtpXT8odGhpcy5zdG9yYWdlW2ldPW4saT09PXRoaXMuc3RvcmFnZUluZGV4JiYodGhpcy5zdG9yYWdlSW5kZXgrPXIpKTooZS5BcnJheVRvb2xzLmNvcHlFbGVtZW50cyh0aGlzLnN0b3JhZ2Usbyx0aGlzLnN0b3JhZ2UsdGhpcy5zdG9yYWdlSW5kZXgsciksbz10aGlzLnN0b3JhZ2VJbmRleCx0aGlzLnN0b3JhZ2VJbmRleCs9cix0aGlzLnN0b3JhZ2VbdGhpcy5zdG9yYWdlSW5kZXgrK109bix0aGlzLnN0b3JhZ2VJbmRleCs9cikscisrfXRoaXMuYnVja2V0TG9jYXRvcnNbdF09byx0aGlzLmJ1Y2tldExvY2F0b3JzW3QrMV09cn0sdC5wcm90b3R5cGUudHJ1bmNhdGVCdWNrZXRUb05ld2VyRWxlbWVudHM9ZnVuY3Rpb24odCxuLHIpe3ZhciBvPXQrbi1yO3JldHVybiBlLkFycmF5VG9vbHMuY29weUVsZW1lbnRzKHRoaXMuc3RvcmFnZSxvLHRoaXMuc3RvcmFnZSx0LHIpLGUuQXJyYXlUb29scy56ZXJvRWxlbWVudHModGhpcy5zdG9yYWdlLHQrcixuLXIpLHJ9LHQucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmJ1Y2tldExvY2F0b3JzLG49dGhpcy5zdG9yYWdlO3RoaXMuYnVja2V0TG9jYXRvcnM9bmV3IFVpbnQzMkFycmF5KHRoaXMuYnVja2V0TG9jYXRvcnMubGVuZ3RoKSx0aGlzLnN0b3JhZ2VJbmRleD0xO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cis9Mil7dmFyIG89dFtyKzFdOzAhPT1vJiYodGhpcy5idWNrZXRMb2NhdG9yc1tyXT10aGlzLnN0b3JhZ2VJbmRleCx0aGlzLmJ1Y2tldExvY2F0b3JzW3IrMV09byx0aGlzLnN0b3JhZ2VJbmRleCs9TWF0aC5tYXgoTWF0aC5taW4oMipvLHRoaXMubWF4aW11bUJ1Y2tldENhcGFjaXR5KSx0aGlzLm1pbmltdW1CdWNrZXRDYXBhY2l0eSkpfWZvcih0aGlzLnN0b3JhZ2U9bmV3IFVpbnQzMkFycmF5KDgqdGhpcy5zdG9yYWdlSW5kZXgpLHI9MDtyPHQubGVuZ3RoO3IrPTIpe3ZhciBpPXRbcl07aWYoMCE9PWkpe3ZhciBhPXRoaXMuYnVja2V0TG9jYXRvcnNbcl0sbD10aGlzLmJ1Y2tldExvY2F0b3JzW3IrMV07ZS5BcnJheVRvb2xzLmNvcHlFbGVtZW50cyhuLGksdGhpcy5zdG9yYWdlLGEsbCl9fX0sdC5wcm90b3R5cGUuZ2V0QXJyYXlTZWdtZW50Rm9yQnVja2V0SW5kZXg9ZnVuY3Rpb24odCxuKXt0PDw9MTt2YXIgcj10aGlzLmJ1Y2tldExvY2F0b3JzW3RdO3JldHVybiAwPT09cj9udWxsOih2b2lkIDA9PT1uJiYobj1uZXcgZS5BcnJheVNlZ21lbnQodGhpcy5zdG9yYWdlLHIsdGhpcy5idWNrZXRMb2NhdG9yc1t0KzFdKSksbil9LHQucHJvdG90eXBlLmdldFVzZWRCdWNrZXRDb3VudD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKGUuQXJyYXlUb29scy5jb3VudE5vbnplcm9WYWx1ZXNJbkFycmF5KHRoaXMuYnVja2V0TG9jYXRvcnMpLzIpfSx0LnByb3RvdHlwZS5nZXRUb3RhbEVsZW1lbnRDb3VudD1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9MDt0PHRoaXMuYnVja2V0TG9jYXRvcnMubGVuZ3RoO3QrPTIpZSs9dGhpcy5idWNrZXRMb2NhdG9yc1t0KzFdO3JldHVybiBlfSx0fSgpO2UuQ29tcHJlc3NvckN1c3RvbUhhc2hUYWJsZT10fShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt0aGlzLm1heGltdW1CdWNrZXRDYXBhY2l0eT02NCx0aGlzLmJ1Y2tldHM9bmV3IEFycmF5KGUpfXJldHVybiB0LnByb3RvdHlwZS5hZGRWYWx1ZVRvQnVja2V0PWZ1bmN0aW9uKHQsbil7dmFyIHI9dGhpcy5idWNrZXRzW3RdO3ZvaWQgMD09PXI/dGhpcy5idWNrZXRzW3RdPVtuXTooci5sZW5ndGg9PT10aGlzLm1heGltdW1CdWNrZXRDYXBhY2l0eS0xJiZlLkFycmF5VG9vbHMudHJ1bmNhdGVTdGFydGluZ0VsZW1lbnRzKHIsdGhpcy5tYXhpbXVtQnVja2V0Q2FwYWNpdHkvMiksci5wdXNoKG4pKX0sdC5wcm90b3R5cGUuZ2V0QXJyYXlTZWdtZW50Rm9yQnVja2V0SW5kZXg9ZnVuY3Rpb24odCxuKXt2YXIgcj10aGlzLmJ1Y2tldHNbdF07cmV0dXJuIHZvaWQgMD09PXI/bnVsbDoodm9pZCAwPT09biYmKG49bmV3IGUuQXJyYXlTZWdtZW50KHIsMCxyLmxlbmd0aCkpLG4pfSx0LnByb3RvdHlwZS5nZXRVc2VkQnVja2V0Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5BcnJheVRvb2xzLmNvdW50Tm9uemVyb1ZhbHVlc0luQXJyYXkodGhpcy5idWNrZXRzKX0sdC5wcm90b3R5cGUuZ2V0VG90YWxFbGVtZW50Q291bnQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PTA7dDx0aGlzLmJ1Y2tldHMubGVuZ3RoO3QrKyl2b2lkIDAhPT10aGlzLmJ1Y2tldHNbdF0mJihlKz10aGlzLmJ1Y2tldHNbdF0ubGVuZ3RoKTtyZXR1cm4gZX0sdH0oKTtlLkNvbXByZXNzb3JTaW1wbGVIYXNoVGFibGU9dH0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLk1heGltdW1NYXRjaERpc3RhbmNlPTMyNzY3LHRoaXMub3V0cHV0UG9zaXRpb249MH1yZXR1cm4gdC5wcm90b3R5cGUuZGVjb21wcmVzc0Jsb2NrVG9TdHJpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9ZS5CdWZmZXJUb29scy5jb252ZXJ0VG9VaW50OEFycmF5SWZOZWVkZWQodCksZS5kZWNvZGVVVEY4KHRoaXMuZGVjb21wcmVzc0Jsb2NrKHQpKX0sdC5wcm90b3R5cGUuZGVjb21wcmVzc0Jsb2NrPWZ1bmN0aW9uKHQpe3RoaXMuaW5wdXRCdWZmZXJSZW1haW5kZXImJih0PWUuQXJyYXlUb29scy5jb25jYXRVaW50OEFycmF5cyhbdGhpcy5pbnB1dEJ1ZmZlclJlbWFpbmRlcix0XSksdGhpcy5pbnB1dEJ1ZmZlclJlbWFpbmRlcj12b2lkIDApO2Zvcih2YXIgbj10aGlzLmNyb3BPdXRwdXRCdWZmZXJUb1dpbmRvd0FuZEluaXRpYWxpemUoTWF0aC5tYXgoNCp0Lmxlbmd0aCwxMDI0KSkscj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7dmFyIGk9dFtyXTtpZihpPj4+Nj09Myl7dmFyIGE9aT4+PjU7aWYocj09by0xfHxyPT1vLTImJjc9PWEpe3RoaXMuaW5wdXRCdWZmZXJSZW1haW5kZXI9dC5zdWJhcnJheShyKTticmVha31pZih0W3IrMV0+Pj43PT0xKXRoaXMub3V0cHV0Qnl0ZShpKTtlbHNle3ZhciBsPTMxJmkscz12b2lkIDA7Nj09YT8ocz10W3IrMV0scis9MSk6KHM9dFtyKzFdPDw4fHRbcisyXSxyKz0yKTtmb3IodmFyIGM9dGhpcy5vdXRwdXRQb3NpdGlvbi1zLHU9MDt1PGw7dSsrKXRoaXMub3V0cHV0Qnl0ZSh0aGlzLm91dHB1dEJ1ZmZlcltjK3VdKX19ZWxzZSB0aGlzLm91dHB1dEJ5dGUoaSl9cmV0dXJuIHRoaXMucm9sbEJhY2tJZk91dHB1dEJ1ZmZlckVuZHNXaXRoQVRydW5jYXRlZE11bHRpYnl0ZVNlcXVlbmNlKCksZS5Db21wcmVzc2lvbkNvbW1vbi5nZXRDcm9wcGVkQnVmZmVyKHRoaXMub3V0cHV0QnVmZmVyLG4sdGhpcy5vdXRwdXRQb3NpdGlvbi1uKX0sdC5wcm90b3R5cGUub3V0cHV0Qnl0ZT1mdW5jdGlvbih0KXt0aGlzLm91dHB1dFBvc2l0aW9uPT09dGhpcy5vdXRwdXRCdWZmZXIubGVuZ3RoJiYodGhpcy5vdXRwdXRCdWZmZXI9ZS5BcnJheVRvb2xzLmRvdWJsZUJ5dGVBcnJheUNhcGFjaXR5KHRoaXMub3V0cHV0QnVmZmVyKSksdGhpcy5vdXRwdXRCdWZmZXJbdGhpcy5vdXRwdXRQb3NpdGlvbisrXT10fSx0LnByb3RvdHlwZS5jcm9wT3V0cHV0QnVmZmVyVG9XaW5kb3dBbmRJbml0aWFsaXplPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLm91dHB1dEJ1ZmZlcilyZXR1cm4gdGhpcy5vdXRwdXRCdWZmZXI9bmV3IFVpbnQ4QXJyYXkodCksMDt2YXIgbj1NYXRoLm1pbih0aGlzLm91dHB1dFBvc2l0aW9uLHRoaXMuTWF4aW11bU1hdGNoRGlzdGFuY2UpO2lmKHRoaXMub3V0cHV0QnVmZmVyPWUuQ29tcHJlc3Npb25Db21tb24uZ2V0Q3JvcHBlZEJ1ZmZlcih0aGlzLm91dHB1dEJ1ZmZlcix0aGlzLm91dHB1dFBvc2l0aW9uLW4sbix0KSx0aGlzLm91dHB1dFBvc2l0aW9uPW4sdGhpcy5vdXRwdXRCdWZmZXJSZW1haW5kZXIpe2Zvcih2YXIgcj0wO3I8dGhpcy5vdXRwdXRCdWZmZXJSZW1haW5kZXIubGVuZ3RoO3IrKyl0aGlzLm91dHB1dEJ5dGUodGhpcy5vdXRwdXRCdWZmZXJSZW1haW5kZXJbcl0pO3RoaXMub3V0cHV0QnVmZmVyUmVtYWluZGVyPXZvaWQgMH1yZXR1cm4gbn0sdC5wcm90b3R5cGUucm9sbEJhY2tJZk91dHB1dEJ1ZmZlckVuZHNXaXRoQVRydW5jYXRlZE11bHRpYnl0ZVNlcXVlbmNlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTE7ZTw9NCYmdGhpcy5vdXRwdXRQb3NpdGlvbi1lPj0wO2UrKyl7dmFyIHQ9dGhpcy5vdXRwdXRCdWZmZXJbdGhpcy5vdXRwdXRQb3NpdGlvbi1lXTtpZihlPDQmJnQ+Pj4zPT0zMHx8ZTwzJiZ0Pj4+ND09MTR8fGU8MiYmdD4+PjU9PTYpcmV0dXJuIHRoaXMub3V0cHV0QnVmZmVyUmVtYWluZGVyPXRoaXMub3V0cHV0QnVmZmVyLnN1YmFycmF5KHRoaXMub3V0cHV0UG9zaXRpb24tZSx0aGlzLm91dHB1dFBvc2l0aW9uKSx2b2lkKHRoaXMub3V0cHV0UG9zaXRpb24tPWUpfX0sdH0oKTtlLkRlY29tcHJlc3Nvcj10fShvfHwobz17fSkpLGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0KXshZnVuY3Rpb24odCl7dmFyIG49bmV3IFVpbnQ4QXJyYXkoWzY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNDMsNDddKSxyPW5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsNjIsMjU1LDI1NSwyNTUsNjMsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsMjU1LDI1NSwyNTUsMCwyNTUsMjU1LDI1NSwwLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDI1NSwyNTUsMjU1LDI1NV0pO3QuZW5jb2RlPWZ1bmN0aW9uKG4pe3JldHVybiBuJiYwIT1uLmxlbmd0aD9lLnJ1bm5pbmdJbk5vZGVKUygpP2UuQnVmZmVyVG9vbHMudWludDhBcnJheVRvQnVmZmVyKG4pLnRvU3RyaW5nKFwiYmFzZTY0XCIpOnQuZW5jb2RlV2l0aEpTKG4pOlwiXCJ9LHQuZGVjb2RlPWZ1bmN0aW9uKG4pe3JldHVybiBuP2UucnVubmluZ0luTm9kZUpTKCk/ZS5CdWZmZXJUb29scy5idWZmZXJUb1VpbnQ4QXJyYXkoQnVmZmVyLmZyb20obixcImJhc2U2NFwiKSk6dC5kZWNvZGVXaXRoSlMobik6bmV3IFVpbnQ4QXJyYXkoMCl9LHQuZW5jb2RlV2l0aEpTPWZ1bmN0aW9uKHQscil7aWYodm9pZCAwPT09ciYmKHI9ITApLCF0fHwwPT10Lmxlbmd0aClyZXR1cm5cIlwiO2Zvcih2YXIgbyxpPW4sYT1uZXcgZS5TdHJpbmdCdWlsZGVyLGw9MCxzPXQubGVuZ3RoO2w8cztsKz0zKWw8PXMtMz8obz10W2xdPDwxNnx0W2wrMV08PDh8dFtsKzJdLGEuYXBwZW5kQ2hhckNvZGUoaVtvPj4+MTgmNjNdKSxhLmFwcGVuZENoYXJDb2RlKGlbbz4+PjEyJjYzXSksYS5hcHBlbmRDaGFyQ29kZShpW28+Pj42JjYzXSksYS5hcHBlbmRDaGFyQ29kZShpWzYzJm9dKSxvPTApOmw9PT1zLTI/KG89dFtsXTw8MTZ8dFtsKzFdPDw4LGEuYXBwZW5kQ2hhckNvZGUoaVtvPj4+MTgmNjNdKSxhLmFwcGVuZENoYXJDb2RlKGlbbz4+PjEyJjYzXSksYS5hcHBlbmRDaGFyQ29kZShpW28+Pj42JjYzXSksciYmYS5hcHBlbmRDaGFyQ29kZSg2MSkpOmw9PT1zLTEmJihvPXRbbF08PDE2LGEuYXBwZW5kQ2hhckNvZGUoaVtvPj4+MTgmNjNdKSxhLmFwcGVuZENoYXJDb2RlKGlbbz4+PjEyJjYzXSksciYmKGEuYXBwZW5kQ2hhckNvZGUoNjEpLGEuYXBwZW5kQ2hhckNvZGUoNjEpKSk7cmV0dXJuIGEuZ2V0T3V0cHV0U3RyaW5nKCl9LHQuZGVjb2RlV2l0aEpTPWZ1bmN0aW9uKGUsdCl7aWYoIWV8fDA9PWUubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgbj1lLmxlbmd0aCU0O2lmKDE9PT1uKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgQmFzZTY0IHN0cmluZzogbGVuZ3RoICUgNCA9PSAxXCIpOzI9PT1uP2UrPVwiPT1cIjozPT09biYmKGUrPVwiPVwiKSx0fHwodD1uZXcgVWludDhBcnJheShlLmxlbmd0aCkpO2Zvcih2YXIgbz0wLGk9ZS5sZW5ndGgsYT0wO2E8aTthKz00KXt2YXIgbD1yW2UuY2hhckNvZGVBdChhKV08PDE4fHJbZS5jaGFyQ29kZUF0KGErMSldPDwxMnxyW2UuY2hhckNvZGVBdChhKzIpXTw8NnxyW2UuY2hhckNvZGVBdChhKzMpXTt0W28rK109bD4+PjE2JjI1NSx0W28rK109bD4+PjgmMjU1LHRbbysrXT0yNTUmbH1yZXR1cm4gNjE9PWUuY2hhckNvZGVBdChpLTEpJiZvLS0sNjE9PWUuY2hhckNvZGVBdChpLTIpJiZvLS0sdC5zdWJhcnJheSgwLG8pfX0odC5CYXNlNjR8fCh0LkJhc2U2ND17fSkpfShlLkVuY29kaW5nfHwoZS5FbmNvZGluZz17fSkpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0KXshZnVuY3Rpb24odCl7dC5lbmNvZGU9ZnVuY3Rpb24odCl7aWYobnVsbD09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQmluYXJ5U3RyaW5nLmVuY29kZTogdW5kZWZpbmVkIG9yIG51bGwgaW5wdXQgcmVjZWl2ZWRcIik7aWYoMD09PXQubGVuZ3RoKXJldHVyblwiXCI7Zm9yKHZhciBuPXQubGVuZ3RoLHI9bmV3IGUuU3RyaW5nQnVpbGRlcixvPTAsaT0xLGE9MDthPG47YSs9Mil7dmFyIGw7bD1hPT1uLTE/dFthXTw8ODp0W2FdPDw4fHRbYSsxXSxyLmFwcGVuZENoYXJDb2RlKG88PDE2LWl8bD4+PmkpLG89bCYoMTw8aSktMSwxNT09PWk/KHIuYXBwZW5kQ2hhckNvZGUobyksbz0wLGk9MSk6aSs9MSxhPj1uLTImJnIuYXBwZW5kQ2hhckNvZGUobzw8MTYtaSl9cmV0dXJuIHIuYXBwZW5kQ2hhckNvZGUoMzI3Njh8biUyKSxyLmdldE91dHB1dFN0cmluZygpfSx0LmRlY29kZT1mdW5jdGlvbihlKXtpZihcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQmluYXJ5U3RyaW5nLmRlY29kZTogaW52YWxpZCBpbnB1dCB0eXBlXCIpO2lmKFwiXCI9PWUpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO2Zvcih2YXIgdD1uZXcgVWludDhBcnJheSgzKmUubGVuZ3RoKSxuPTAscj1mdW5jdGlvbihlKXt0W24rK109ZT4+PjgsdFtuKytdPTI1NSZlfSxvPTAsaT0wLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIGw9ZS5jaGFyQ29kZUF0KGEpO2w+PTMyNzY4PygzMjc2OT09bCYmbi0tLGk9MCk6KDA9PWk/bz1sOihyKG88PGl8bD4+PjE1LWkpLG89bCYoMTw8MTUtaSktMSksMTU9PWk/aT0wOmkrPTEpfXJldHVybiB0LnN1YmFycmF5KDAsbil9fSh0LkJpbmFyeVN0cmluZ3x8KHQuQmluYXJ5U3RyaW5nPXt9KSl9KGUuRW5jb2Rpbmd8fChlLkVuY29kaW5nPXt9KSl9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlKXtlLmVuY29kZUZyb21TdHJpbmc9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmNoYXJDb2RlQXQodCk7aWYobjw1NTI5Nnx8bj41NjMxOSlyZXR1cm4gbjt2YXIgcj1lLmNoYXJDb2RlQXQodCsxKTtpZihyPj01NjMyMCYmcjw9NTczNDMpcmV0dXJuIHItNTYzMjArKG4tNTUyOTY8PDEwKSs2NTUzNjt0aHJvdyBuZXcgRXJyb3IoXCJnZXRVbmljb2RlQ29kZVBvaW50OiBSZWNlaXZlZCBhIGxlYWQgc3Vycm9nYXRlIGNoYXJhY3RlciwgY2hhciBjb2RlIFwiLmNvbmNhdChuLFwiLCBmb2xsb3dlZCBieSBcIikuY29uY2F0KHIsXCIsIHdoaWNoIGlzIG5vdCBhIHRyYWlsaW5nIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIgY29kZS5cIikpfSxlLmRlY29kZVRvU3RyaW5nPWZ1bmN0aW9uKGUpe2lmKGU8PTY1NTM1KXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpO2lmKGU8PTExMTQxMTEpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKGUtNjU1MzY+Pj4xMCksNTYzMjArKGUtNjU1MzYmMTAyMykpO3Rocm93IG5ldyBFcnJvcihcImdldFN0cmluZ0Zyb21Vbmljb2RlQ29kZVBvaW50OiBBIGNvZGUgcG9pbnQgb2YgXCIuY29uY2F0KGUsXCIgY2Fubm90IGJlIGVuY29kZWQgaW4gVVRGLTE2XCIpKX19KGUuQ29kZVBvaW50fHwoZS5Db2RlUG9pbnQ9e30pKX0oZS5FbmNvZGluZ3x8KGUuRW5jb2Rpbmc9e30pKX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe3ZhciB0PVtcIjAwMFwiLFwiMDAxXCIsXCIwMDJcIixcIjAwM1wiLFwiMDA0XCIsXCIwMDVcIixcIjAwNlwiLFwiMDA3XCIsXCIwMDhcIixcIjAwOVwiLFwiMDEwXCIsXCIwMTFcIixcIjAxMlwiLFwiMDEzXCIsXCIwMTRcIixcIjAxNVwiLFwiMDE2XCIsXCIwMTdcIixcIjAxOFwiLFwiMDE5XCIsXCIwMjBcIixcIjAyMVwiLFwiMDIyXCIsXCIwMjNcIixcIjAyNFwiLFwiMDI1XCIsXCIwMjZcIixcIjAyN1wiLFwiMDI4XCIsXCIwMjlcIixcIjAzMFwiLFwiMDMxXCIsXCIwMzJcIixcIjAzM1wiLFwiMDM0XCIsXCIwMzVcIixcIjAzNlwiLFwiMDM3XCIsXCIwMzhcIixcIjAzOVwiLFwiMDQwXCIsXCIwNDFcIixcIjA0MlwiLFwiMDQzXCIsXCIwNDRcIixcIjA0NVwiLFwiMDQ2XCIsXCIwNDdcIixcIjA0OFwiLFwiMDQ5XCIsXCIwNTBcIixcIjA1MVwiLFwiMDUyXCIsXCIwNTNcIixcIjA1NFwiLFwiMDU1XCIsXCIwNTZcIixcIjA1N1wiLFwiMDU4XCIsXCIwNTlcIixcIjA2MFwiLFwiMDYxXCIsXCIwNjJcIixcIjA2M1wiLFwiMDY0XCIsXCIwNjVcIixcIjA2NlwiLFwiMDY3XCIsXCIwNjhcIixcIjA2OVwiLFwiMDcwXCIsXCIwNzFcIixcIjA3MlwiLFwiMDczXCIsXCIwNzRcIixcIjA3NVwiLFwiMDc2XCIsXCIwNzdcIixcIjA3OFwiLFwiMDc5XCIsXCIwODBcIixcIjA4MVwiLFwiMDgyXCIsXCIwODNcIixcIjA4NFwiLFwiMDg1XCIsXCIwODZcIixcIjA4N1wiLFwiMDg4XCIsXCIwODlcIixcIjA5MFwiLFwiMDkxXCIsXCIwOTJcIixcIjA5M1wiLFwiMDk0XCIsXCIwOTVcIixcIjA5NlwiLFwiMDk3XCIsXCIwOThcIixcIjA5OVwiLFwiMTAwXCIsXCIxMDFcIixcIjEwMlwiLFwiMTAzXCIsXCIxMDRcIixcIjEwNVwiLFwiMTA2XCIsXCIxMDdcIixcIjEwOFwiLFwiMTA5XCIsXCIxMTBcIixcIjExMVwiLFwiMTEyXCIsXCIxMTNcIixcIjExNFwiLFwiMTE1XCIsXCIxMTZcIixcIjExN1wiLFwiMTE4XCIsXCIxMTlcIixcIjEyMFwiLFwiMTIxXCIsXCIxMjJcIixcIjEyM1wiLFwiMTI0XCIsXCIxMjVcIixcIjEyNlwiLFwiMTI3XCIsXCIxMjhcIixcIjEyOVwiLFwiMTMwXCIsXCIxMzFcIixcIjEzMlwiLFwiMTMzXCIsXCIxMzRcIixcIjEzNVwiLFwiMTM2XCIsXCIxMzdcIixcIjEzOFwiLFwiMTM5XCIsXCIxNDBcIixcIjE0MVwiLFwiMTQyXCIsXCIxNDNcIixcIjE0NFwiLFwiMTQ1XCIsXCIxNDZcIixcIjE0N1wiLFwiMTQ4XCIsXCIxNDlcIixcIjE1MFwiLFwiMTUxXCIsXCIxNTJcIixcIjE1M1wiLFwiMTU0XCIsXCIxNTVcIixcIjE1NlwiLFwiMTU3XCIsXCIxNThcIixcIjE1OVwiLFwiMTYwXCIsXCIxNjFcIixcIjE2MlwiLFwiMTYzXCIsXCIxNjRcIixcIjE2NVwiLFwiMTY2XCIsXCIxNjdcIixcIjE2OFwiLFwiMTY5XCIsXCIxNzBcIixcIjE3MVwiLFwiMTcyXCIsXCIxNzNcIixcIjE3NFwiLFwiMTc1XCIsXCIxNzZcIixcIjE3N1wiLFwiMTc4XCIsXCIxNzlcIixcIjE4MFwiLFwiMTgxXCIsXCIxODJcIixcIjE4M1wiLFwiMTg0XCIsXCIxODVcIixcIjE4NlwiLFwiMTg3XCIsXCIxODhcIixcIjE4OVwiLFwiMTkwXCIsXCIxOTFcIixcIjE5MlwiLFwiMTkzXCIsXCIxOTRcIixcIjE5NVwiLFwiMTk2XCIsXCIxOTdcIixcIjE5OFwiLFwiMTk5XCIsXCIyMDBcIixcIjIwMVwiLFwiMjAyXCIsXCIyMDNcIixcIjIwNFwiLFwiMjA1XCIsXCIyMDZcIixcIjIwN1wiLFwiMjA4XCIsXCIyMDlcIixcIjIxMFwiLFwiMjExXCIsXCIyMTJcIixcIjIxM1wiLFwiMjE0XCIsXCIyMTVcIixcIjIxNlwiLFwiMjE3XCIsXCIyMThcIixcIjIxOVwiLFwiMjIwXCIsXCIyMjFcIixcIjIyMlwiLFwiMjIzXCIsXCIyMjRcIixcIjIyNVwiLFwiMjI2XCIsXCIyMjdcIixcIjIyOFwiLFwiMjI5XCIsXCIyMzBcIixcIjIzMVwiLFwiMjMyXCIsXCIyMzNcIixcIjIzNFwiLFwiMjM1XCIsXCIyMzZcIixcIjIzN1wiLFwiMjM4XCIsXCIyMzlcIixcIjI0MFwiLFwiMjQxXCIsXCIyNDJcIixcIjI0M1wiLFwiMjQ0XCIsXCIyNDVcIixcIjI0NlwiLFwiMjQ3XCIsXCIyNDhcIixcIjI0OVwiLFwiMjUwXCIsXCIyNTFcIixcIjI1MlwiLFwiMjUzXCIsXCIyNTRcIixcIjI1NVwiXTtlLmVuY29kZT1mdW5jdGlvbihlKXtmb3IodmFyIG49W10scj0wO3I8ZS5sZW5ndGg7cisrKW4ucHVzaCh0W2Vbcl1dKTtyZXR1cm4gbi5qb2luKFwiIFwiKX19KGUuRGVjaW1hbFN0cmluZ3x8KGUuRGVjaW1hbFN0cmluZz17fSkpfShlLkVuY29kaW5nfHwoZS5FbmNvZGluZz17fSkpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlKXshZnVuY3Rpb24odCl7dC5lbmNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGUuQmluYXJ5U3RyaW5nLmVuY29kZSh0KS5yZXBsYWNlKC9cXDAvZyxcIuiAglwiKX0sdC5kZWNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGUuQmluYXJ5U3RyaW5nLmRlY29kZSh0LnJlcGxhY2UoL1xcdTgwMDIvZyxcIlxcMFwiKSl9fShlLlN0b3JhZ2VCaW5hcnlTdHJpbmd8fChlLlN0b3JhZ2VCaW5hcnlTdHJpbmc9e30pKX0oZS5FbmNvZGluZ3x8KGUuRW5jb2Rpbmc9e30pKX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXshZnVuY3Rpb24odCl7IWZ1bmN0aW9uKG4pe3ZhciByLG87bi5lbmNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJjAhPXQubGVuZ3RoP2UucnVubmluZ0luTm9kZUpTKCk/ZS5CdWZmZXJUb29scy5idWZmZXJUb1VpbnQ4QXJyYXkoQnVmZmVyLmZyb20odCxcInV0ZjhcIikpOm4uY3JlYXRlTmF0aXZlVGV4dEVuY29kZXJBbmREZWNvZGVySWZBdmFpbGFibGUoKT9yLmVuY29kZSh0KTpuLmVuY29kZVdpdGhKUyh0KTpuZXcgVWludDhBcnJheSgwKX0sbi5kZWNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJjAhPXQubGVuZ3RoP2UucnVubmluZ0luTm9kZUpTKCk/ZS5CdWZmZXJUb29scy51aW50OEFycmF5VG9CdWZmZXIodCkudG9TdHJpbmcoXCJ1dGY4XCIpOm4uY3JlYXRlTmF0aXZlVGV4dEVuY29kZXJBbmREZWNvZGVySWZBdmFpbGFibGUoKT9vLmRlY29kZSh0KTpuLmRlY29kZVdpdGhKUyh0KTpcIlwifSxuLmVuY29kZVdpdGhKUz1mdW5jdGlvbihlLG4pe2lmKCFlfHwwPT1lLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7bnx8KG49bmV3IFVpbnQ4QXJyYXkoNCplLmxlbmd0aCkpO2Zvcih2YXIgcj0wLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGk9dC5Db2RlUG9pbnQuZW5jb2RlRnJvbVN0cmluZyhlLG8pO2lmKGk8PTEyNyluW3IrK109aTtlbHNlIGlmKGk8PTIwNDcpbltyKytdPTE5MnxpPj4+NixuW3IrK109MTI4fDYzJmk7ZWxzZSBpZihpPD02NTUzNSluW3IrK109MjI0fGk+Pj4xMixuW3IrK109MTI4fGk+Pj42JjYzLG5bcisrXT0xMjh8NjMmaTtlbHNle2lmKCEoaTw9MTExNDExMSkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBVVEYtMTYgc3RyaW5nOiBFbmNvdW50ZXJlZCBhIGNoYXJhY3RlciB1bnN1cHBvcnRlZCBieSBVVEYtOC8xNiAoUkZDIDM2MjkpXCIpO25bcisrXT0yNDB8aT4+PjE4LG5bcisrXT0xMjh8aT4+PjEyJjYzLG5bcisrXT0xMjh8aT4+PjYmNjMsbltyKytdPTEyOHw2MyZpLG8rK319cmV0dXJuIG4uc3ViYXJyYXkoMCxyKX0sbi5kZWNvZGVXaXRoSlM9ZnVuY3Rpb24odCxuLHIpe2lmKHZvaWQgMD09PW4mJihuPTApLCF0fHwwPT10Lmxlbmd0aClyZXR1cm5cIlwiO3ZvaWQgMD09PXImJihyPXQubGVuZ3RoKTtmb3IodmFyIG8saSxhPW5ldyBlLlN0cmluZ0J1aWxkZXIsbD1uLHM9cjtsPHM7KXtpZigoaT10W2xdKT4+Pjc9PTApbz1pLGwrPTE7ZWxzZSBpZihpPj4+NT09Nil7aWYobCsxPj1yKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgVVRGLTggc3RyZWFtOiBUcnVuY2F0ZWQgY29kZXBvaW50IHNlcXVlbmNlIGVuY291bnRlcmVkIGF0IHBvc2l0aW9uIFwiK2wpO289KDMxJmkpPDw2fDYzJnRbbCsxXSxsKz0yfWVsc2UgaWYoaT4+PjQ9PTE0KXtpZihsKzI+PXIpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBVVEYtOCBzdHJlYW06IFRydW5jYXRlZCBjb2RlcG9pbnQgc2VxdWVuY2UgZW5jb3VudGVyZWQgYXQgcG9zaXRpb24gXCIrbCk7bz0oMTUmaSk8PDEyfCg2MyZ0W2wrMV0pPDw2fDYzJnRbbCsyXSxsKz0zfWVsc2V7aWYoaT4+PjMhPTMwKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgVVRGLTggc3RyZWFtOiBBbiBpbnZhbGlkIGxlYWQgYnl0ZSB2YWx1ZSBlbmNvdW50ZXJlZCBhdCBwb3NpdGlvbiBcIitsKTtpZihsKzM+PXIpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBVVEYtOCBzdHJlYW06IFRydW5jYXRlZCBjb2RlcG9pbnQgc2VxdWVuY2UgZW5jb3VudGVyZWQgYXQgcG9zaXRpb24gXCIrbCk7bz0oNyZpKTw8MTh8KDYzJnRbbCsxXSk8PDEyfCg2MyZ0W2wrMl0pPDw2fDYzJnRbbCszXSxsKz00fWEuYXBwZW5kQ29kZVBvaW50KG8pfXJldHVybiBhLmdldE91dHB1dFN0cmluZygpfSxuLmNyZWF0ZU5hdGl2ZVRleHRFbmNvZGVyQW5kRGVjb2RlcklmQXZhaWxhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuISFyfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBUZXh0RW5jb2RlciYmKHI9bmV3IFRleHRFbmNvZGVyKFwidXRmLThcIiksbz1uZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiKSwhMCl9fSh0LlVURjh8fCh0LlVURjg9e30pKX0oZS5FbmNvZGluZ3x8KGUuRW5jb2Rpbmc9e30pKX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXtlLmNvbXByZXNzPWZ1bmN0aW9uKHQsbil7aWYodm9pZCAwPT09biYmKG49e30pLG51bGw9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImNvbXByZXNzOiB1bmRlZmluZWQgb3IgbnVsbCBpbnB1dCByZWNlaXZlZFwiKTt2YXIgcj1lLkNvbXByZXNzaW9uQ29tbW9uLmRldGVjdENvbXByZXNzaW9uU291cmNlRW5jb2RpbmcodCk7bj1lLk9iamVjdFRvb2xzLm92ZXJyaWRlKHtpbnB1dEVuY29kaW5nOnIsb3V0cHV0RW5jb2Rpbmc6XCJCeXRlQXJyYXlcIn0sbik7dmFyIG89KG5ldyBlLkNvbXByZXNzb3IpLmNvbXByZXNzQmxvY2sodCk7cmV0dXJuIGUuQ29tcHJlc3Npb25Db21tb24uZW5jb2RlQ29tcHJlc3NlZEJ5dGVzKG8sbi5vdXRwdXRFbmNvZGluZyl9LGUuZGVjb21wcmVzcz1mdW5jdGlvbih0LG4pe2lmKHZvaWQgMD09PW4mJihuPXt9KSxudWxsPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJkZWNvbXByZXNzOiB1bmRlZmluZWQgb3IgbnVsbCBpbnB1dCByZWNlaXZlZFwiKTtuPWUuT2JqZWN0VG9vbHMub3ZlcnJpZGUoe2lucHV0RW5jb2Rpbmc6XCJCeXRlQXJyYXlcIixvdXRwdXRFbmNvZGluZzpcIlN0cmluZ1wifSxuKTt2YXIgcj1lLkNvbXByZXNzaW9uQ29tbW9uLmRlY29kZUNvbXByZXNzZWRCeXRlcyh0LG4uaW5wdXRFbmNvZGluZyksbz0obmV3IGUuRGVjb21wcmVzc29yKS5kZWNvbXByZXNzQmxvY2socik7cmV0dXJuIGUuQ29tcHJlc3Npb25Db21tb24uZW5jb2RlRGVjb21wcmVzc2VkQnl0ZXMobyxuLm91dHB1dEVuY29kaW5nKX0sZS5jb21wcmVzc0FzeW5jPWZ1bmN0aW9uKHQsbixyKXt2YXIgbztudWxsPT1yJiYocj1mdW5jdGlvbigpe30pO3RyeXtvPWUuQ29tcHJlc3Npb25Db21tb24uZGV0ZWN0Q29tcHJlc3Npb25Tb3VyY2VFbmNvZGluZyh0KX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKHZvaWQgMCxlKX1uPWUuT2JqZWN0VG9vbHMub3ZlcnJpZGUoe2lucHV0RW5jb2Rpbmc6byxvdXRwdXRFbmNvZGluZzpcIkJ5dGVBcnJheVwiLHVzZVdlYldvcmtlcjohMCxibG9ja1NpemU6NjU1MzZ9LG4pLGUuZW5xdWV1ZUltbWVkaWF0ZSgoZnVuY3Rpb24oKXtuLnVzZVdlYldvcmtlciYmZS5XZWJXb3JrZXIuY3JlYXRlR2xvYmFsV29ya2VySWZOZWVkZWQoKT9lLldlYldvcmtlci5jb21wcmVzc0FzeW5jKHQsbixyKTplLkFzeW5jQ29tcHJlc3Nvci5jb21wcmVzc0FzeW5jKHQsbixyKX0pKX0sZS5kZWNvbXByZXNzQXN5bmM9ZnVuY3Rpb24odCxuLHIpe2lmKG51bGw9PXImJihyPWZ1bmN0aW9uKCl7fSksbnVsbCE9dCl7bj1lLk9iamVjdFRvb2xzLm92ZXJyaWRlKHtpbnB1dEVuY29kaW5nOlwiQnl0ZUFycmF5XCIsb3V0cHV0RW5jb2Rpbmc6XCJTdHJpbmdcIix1c2VXZWJXb3JrZXI6ITAsYmxvY2tTaXplOjY1NTM2fSxuKTt2YXIgbz1lLkJ1ZmZlclRvb2xzLmNvbnZlcnRUb1VpbnQ4QXJyYXlJZk5lZWRlZCh0KTtlLkV2ZW50TG9vcC5lbnF1ZXVlSW1tZWRpYXRlKChmdW5jdGlvbigpe24udXNlV2ViV29ya2VyJiZlLldlYldvcmtlci5jcmVhdGVHbG9iYWxXb3JrZXJJZk5lZWRlZCgpP2UuV2ViV29ya2VyLmRlY29tcHJlc3NBc3luYyhvLG4scik6ZS5Bc3luY0RlY29tcHJlc3Nvci5kZWNvbXByZXNzQXN5bmModCxuLHIpfSkpfWVsc2Ugcih2b2lkIDAsbmV3IFR5cGVFcnJvcihcImRlY29tcHJlc3NBc3luYzogdW5kZWZpbmVkIG9yIG51bGwgaW5wdXQgcmVjZWl2ZWRcIikpfSxlLmNyZWF0ZUNvbXByZXNzaW9uU3RyZWFtPWZ1bmN0aW9uKCl7cmV0dXJuIGUuQXN5bmNDb21wcmVzc29yLmNyZWF0ZUNvbXByZXNzaW9uU3RyZWFtKCl9LGUuY3JlYXRlRGVjb21wcmVzc2lvblN0cmVhbT1mdW5jdGlvbigpe3JldHVybiBlLkFzeW5jRGVjb21wcmVzc29yLmNyZWF0ZURlY29tcHJlc3Npb25TdHJlYW0oKX0sZS5lbmNvZGVVVEY4PWZ1bmN0aW9uKHQpe3JldHVybiBlLkVuY29kaW5nLlVURjguZW5jb2RlKHQpfSxlLmRlY29kZVVURjg9ZnVuY3Rpb24odCl7cmV0dXJuIGUuRW5jb2RpbmcuVVRGOC5kZWNvZGUodCl9LGUuZW5jb2RlQmFzZTY0PWZ1bmN0aW9uKHQpe3JldHVybiBlLkVuY29kaW5nLkJhc2U2NC5lbmNvZGUodCl9LGUuZGVjb2RlQmFzZTY0PWZ1bmN0aW9uKHQpe3JldHVybiBlLkVuY29kaW5nLkJhc2U2NC5kZWNvZGUodCl9LGUuZW5jb2RlQmluYXJ5U3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBlLkVuY29kaW5nLkJpbmFyeVN0cmluZy5lbmNvZGUodCl9LGUuZGVjb2RlQmluYXJ5U3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBlLkVuY29kaW5nLkJpbmFyeVN0cmluZy5kZWNvZGUodCl9LGUuZW5jb2RlU3RvcmFnZUJpbmFyeVN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gZS5FbmNvZGluZy5TdG9yYWdlQmluYXJ5U3RyaW5nLmVuY29kZSh0KX0sZS5kZWNvZGVTdG9yYWdlQmluYXJ5U3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBlLkVuY29kaW5nLlN0b3JhZ2VCaW5hcnlTdHJpbmcuZGVjb2RlKHQpfX0ob3x8KG89e30pKX0sMzc0OihlLHQsbik9Pntjb25zdHtBYm9ydEVycm9yOnIsY29kZXM6b309bigxNDEpLHtpc05vZGVTdHJlYW06aSxpc1dlYlN0cmVhbTphLGtDb250cm9sbGVyRXJyb3JGdW5jdGlvbjpsfT1uKDEzMikscz1uKDg2KSx7RVJSX0lOVkFMSURfQVJHX1RZUEU6Y309bztlLmV4cG9ydHMuYWRkQWJvcnRTaWduYWw9ZnVuY3Rpb24odCxuKXtpZigoKGUsdCk9PntpZihcIm9iamVjdFwiIT10eXBlb2YgZXx8IShcImFib3J0ZWRcImluIGUpKXRocm93IG5ldyBjKFwic2lnbmFsXCIsXCJBYm9ydFNpZ25hbFwiLGUpfSkodCksIWkobikmJiFhKG4pKXRocm93IG5ldyBjKFwic3RyZWFtXCIsW1wiUmVhZGFibGVTdHJlYW1cIixcIldyaXRhYmxlU3RyZWFtXCIsXCJTdHJlYW1cIl0sbik7cmV0dXJuIGUuZXhwb3J0cy5hZGRBYm9ydFNpZ25hbE5vVmFsaWRhdGUodCxuKX0sZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZT1mdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiBlfHwhKFwiYWJvcnRlZFwiaW4gZSkpcmV0dXJuIHQ7Y29uc3Qgbj1pKHQpPygpPT57dC5kZXN0cm95KG5ldyByKHZvaWQgMCx7Y2F1c2U6ZS5yZWFzb259KSl9OigpPT57dFtsXShuZXcgcih2b2lkIDAse2NhdXNlOmUucmVhc29ufSkpfTtyZXR1cm4gZS5hYm9ydGVkP24oKTooZS5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIixuKSxzKHQsKCgpPT5lLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLG4pKSkpLHR9fSw2MTY6KGUsdCxuKT0+e2NvbnN0e1N0cmluZ1Byb3RvdHlwZVNsaWNlOnIsU3ltYm9sSXRlcmF0b3I6byxUeXBlZEFycmF5UHJvdG90eXBlU2V0OmksVWludDhBcnJheTphfT1uKDE5MSkse0J1ZmZlcjpsfT1uKDQ4NSkse2luc3BlY3Q6c309big3NzUpO2UuZXhwb3J0cz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cHVzaChlKXtjb25zdCB0PXtkYXRhOmUsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PXQ6dGhpcy5oZWFkPXQsdGhpcy50YWlsPXQsKyt0aGlzLmxlbmd0aH11bnNoaWZ0KGUpe2NvbnN0IHQ9e2RhdGE6ZSxuZXh0OnRoaXMuaGVhZH07MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPXQpLHRoaXMuaGVhZD10LCsrdGhpcy5sZW5ndGh9c2hpZnQoKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuO2NvbnN0IGU9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIDE9PT10aGlzLmxlbmd0aD90aGlzLmhlYWQ9dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkPXRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsZX1jbGVhcigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfWpvaW4oZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVyblwiXCI7bGV0IHQ9dGhpcy5oZWFkLG49XCJcIit0LmRhdGE7Zm9yKDtudWxsIT09KHQ9dC5uZXh0KTspbis9ZSt0LmRhdGE7cmV0dXJuIG59Y29uY2F0KGUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gbC5hbGxvYygwKTtjb25zdCB0PWwuYWxsb2NVbnNhZmUoZT4+PjApO2xldCBuPXRoaXMuaGVhZCxyPTA7Zm9yKDtuOylpKHQsbi5kYXRhLHIpLHIrPW4uZGF0YS5sZW5ndGgsbj1uLm5leHQ7cmV0dXJuIHR9Y29uc3VtZShlLHQpe2NvbnN0IG49dGhpcy5oZWFkLmRhdGE7aWYoZTxuLmxlbmd0aCl7Y29uc3QgdD1uLnNsaWNlKDAsZSk7cmV0dXJuIHRoaXMuaGVhZC5kYXRhPW4uc2xpY2UoZSksdH1yZXR1cm4gZT09PW4ubGVuZ3RoP3RoaXMuc2hpZnQoKTp0P3RoaXMuX2dldFN0cmluZyhlKTp0aGlzLl9nZXRCdWZmZXIoZSl9Zmlyc3QoKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9KltvXSgpe2ZvcihsZXQgZT10aGlzLmhlYWQ7ZTtlPWUubmV4dCl5aWVsZCBlLmRhdGF9X2dldFN0cmluZyhlKXtsZXQgdD1cIlwiLG49dGhpcy5oZWFkLG89MDtkb3tjb25zdCBpPW4uZGF0YTtpZighKGU+aS5sZW5ndGgpKXtlPT09aS5sZW5ndGg/KHQrPWksKytvLG4ubmV4dD90aGlzLmhlYWQ9bi5uZXh0OnRoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCk6KHQrPXIoaSwwLGUpLHRoaXMuaGVhZD1uLG4uZGF0YT1yKGksZSkpO2JyZWFrfXQrPWksZS09aS5sZW5ndGgsKytvfXdoaWxlKG51bGwhPT0obj1uLm5leHQpKTtyZXR1cm4gdGhpcy5sZW5ndGgtPW8sdH1fZ2V0QnVmZmVyKGUpe2NvbnN0IHQ9bC5hbGxvY1Vuc2FmZShlKSxuPWU7bGV0IHI9dGhpcy5oZWFkLG89MDtkb3tjb25zdCBsPXIuZGF0YTtpZighKGU+bC5sZW5ndGgpKXtlPT09bC5sZW5ndGg/KGkodCxsLG4tZSksKytvLHIubmV4dD90aGlzLmhlYWQ9ci5uZXh0OnRoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCk6KGkodCxuZXcgYShsLmJ1ZmZlcixsLmJ5dGVPZmZzZXQsZSksbi1lKSx0aGlzLmhlYWQ9cixyLmRhdGE9bC5zbGljZShlKSk7YnJlYWt9aSh0LGwsbi1lKSxlLT1sLmxlbmd0aCwrK299d2hpbGUobnVsbCE9PShyPXIubmV4dCkpO3JldHVybiB0aGlzLmxlbmd0aC09byx0fVtTeW1ib2wuZm9yKFwibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b21cIildKGUsdCl7cmV0dXJuIHModGhpcyx7Li4udCxkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KX19fSw4MTg6KGUsdCxuKT0+e2NvbnN0e3BpcGVsaW5lOnJ9PW4oNzU0KSxvPW4oMTgyKSx7ZGVzdHJveWVyOml9PW4oMjMwKSx7aXNOb2RlU3RyZWFtOmEsaXNSZWFkYWJsZTpsLGlzV3JpdGFibGU6cyxpc1dlYlN0cmVhbTpjLGlzVHJhbnNmb3JtU3RyZWFtOnUsaXNXcml0YWJsZVN0cmVhbTpmLGlzUmVhZGFibGVTdHJlYW06ZH09bigxMzIpLHtBYm9ydEVycm9yOnAsY29kZXM6e0VSUl9JTlZBTElEX0FSR19WQUxVRTpoLEVSUl9NSVNTSU5HX0FSR1M6Z319PW4oMTQxKSx2PW4oODYpO2UuZXhwb3J0cz1mdW5jdGlvbiguLi5lKXtpZigwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IGcoXCJzdHJlYW1zXCIpO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gby5mcm9tKGVbMF0pO2NvbnN0IHQ9Wy4uLmVdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGVbMF0mJihlWzBdPW8uZnJvbShlWzBdKSksXCJmdW5jdGlvblwiPT10eXBlb2YgZVtlLmxlbmd0aC0xXSl7Y29uc3QgdD1lLmxlbmd0aC0xO2VbdF09by5mcm9tKGVbdF0pfWZvcihsZXQgbj0wO248ZS5sZW5ndGg7KytuKWlmKGEoZVtuXSl8fGMoZVtuXSkpe2lmKG48ZS5sZW5ndGgtMSYmIShsKGVbbl0pfHxkKGVbbl0pfHx1KGVbbl0pKSl0aHJvdyBuZXcgaChgc3RyZWFtc1ske259XWAsdFtuXSxcIm11c3QgYmUgcmVhZGFibGVcIik7aWYobj4wJiYhKHMoZVtuXSl8fGYoZVtuXSl8fHUoZVtuXSkpKXRocm93IG5ldyBoKGBzdHJlYW1zWyR7bn1dYCx0W25dLFwibXVzdCBiZSB3cml0YWJsZVwiKX1sZXQgbixtLEMseSx3O2NvbnN0IGI9ZVswXSx4PXIoZSwoZnVuY3Rpb24oZSl7Y29uc3QgdD15O3k9bnVsbCx0P3QoZSk6ZT93LmRlc3Ryb3koZSk6T3x8X3x8dy5kZXN0cm95KCl9KSksXz0hIShzKGIpfHxmKGIpfHx1KGIpKSxPPSEhKGwoeCl8fGQoeCl8fHUoeCkpO2lmKHc9bmV3IG8oe3dyaXRhYmxlT2JqZWN0TW9kZTohKG51bGw9PWJ8fCFiLndyaXRhYmxlT2JqZWN0TW9kZSkscmVhZGFibGVPYmplY3RNb2RlOiEobnVsbD09eHx8IXgud3JpdGFibGVPYmplY3RNb2RlKSx3cml0YWJsZTpfLHJlYWRhYmxlOk99KSxfKXtpZihhKGIpKXcuX3dyaXRlPWZ1bmN0aW9uKGUsdCxyKXtiLndyaXRlKGUsdCk/cigpOm49cn0sdy5fZmluYWw9ZnVuY3Rpb24oZSl7Yi5lbmQoKSxtPWV9LGIub24oXCJkcmFpblwiLChmdW5jdGlvbigpe2lmKG4pe2NvbnN0IGU9bjtuPW51bGwsZSgpfX0pKTtlbHNlIGlmKGMoYikpe2NvbnN0IGU9KHUoYik/Yi53cml0YWJsZTpiKS5nZXRXcml0ZXIoKTt3Ll93cml0ZT1hc3luYyBmdW5jdGlvbih0LG4scil7dHJ5e2F3YWl0IGUucmVhZHksZS53cml0ZSh0KS5jYXRjaCgoKCk9Pnt9KSkscigpfWNhdGNoKGUpe3IoZSl9fSx3Ll9maW5hbD1hc3luYyBmdW5jdGlvbih0KXt0cnl7YXdhaXQgZS5yZWFkeSxlLmNsb3NlKCkuY2F0Y2goKCgpPT57fSkpLG09dH1jYXRjaChlKXt0KGUpfX19Y29uc3QgZT11KHgpP3gucmVhZGFibGU6eDt2KGUsKCgpPT57aWYobSl7Y29uc3QgZT1tO209bnVsbCxlKCl9fSkpfWlmKE8paWYoYSh4KSl4Lm9uKFwicmVhZGFibGVcIiwoZnVuY3Rpb24oKXtpZihDKXtjb25zdCBlPUM7Qz1udWxsLGUoKX19KSkseC5vbihcImVuZFwiLChmdW5jdGlvbigpe3cucHVzaChudWxsKX0pKSx3Ll9yZWFkPWZ1bmN0aW9uKCl7Zm9yKDs7KXtjb25zdCBlPXgucmVhZCgpO2lmKG51bGw9PT1lKXJldHVybiB2b2lkKEM9dy5fcmVhZCk7aWYoIXcucHVzaChlKSlyZXR1cm59fTtlbHNlIGlmKGMoeCkpe2NvbnN0IGU9KHUoeCk/eC5yZWFkYWJsZTp4KS5nZXRSZWFkZXIoKTt3Ll9yZWFkPWFzeW5jIGZ1bmN0aW9uKCl7Zm9yKDs7KXRyeXtjb25zdHt2YWx1ZTp0LGRvbmU6bn09YXdhaXQgZS5yZWFkKCk7aWYoIXcucHVzaCh0KSlyZXR1cm47aWYobilyZXR1cm4gdm9pZCB3LnB1c2gobnVsbCl9Y2F0Y2h7cmV0dXJufX19cmV0dXJuIHcuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSx0KXtlfHxudWxsPT09eXx8KGU9bmV3IHApLEM9bnVsbCxuPW51bGwsbT1udWxsLG51bGw9PT15P3QoZSk6KHk9dCxhKHgpJiZpKHgsZSkpfSx3fX0sMjMwOihlLHQsbik9Pntjb25zdCByPW4oNTMzKSx7YWdncmVnYXRlVHdvRXJyb3JzOm8sY29kZXM6e0VSUl9NVUxUSVBMRV9DQUxMQkFDSzppfSxBYm9ydEVycm9yOmF9PW4oMTQxKSx7U3ltYm9sOmx9PW4oMTkxKSx7a0Rlc3Ryb3llZDpzLGlzRGVzdHJveWVkOmMsaXNGaW5pc2hlZDp1LGlzU2VydmVyUmVxdWVzdDpmfT1uKDEzMiksZD1sKFwia0Rlc3Ryb3lcIikscD1sKFwia0NvbnN0cnVjdFwiKTtmdW5jdGlvbiBoKGUsdCxuKXtlJiYoZS5zdGFjayx0JiYhdC5lcnJvcmVkJiYodC5lcnJvcmVkPWUpLG4mJiFuLmVycm9yZWQmJihuLmVycm9yZWQ9ZSkpfWZ1bmN0aW9uIGcoZSx0LG4pe2xldCBvPSExO2Z1bmN0aW9uIGkodCl7aWYobylyZXR1cm47bz0hMDtjb25zdCBpPWUuX3JlYWRhYmxlU3RhdGUsYT1lLl93cml0YWJsZVN0YXRlO2godCxhLGkpLGEmJihhLmNsb3NlZD0hMCksaSYmKGkuY2xvc2VkPSEwKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiZuKHQpLHQ/ci5uZXh0VGljayh2LGUsdCk6ci5uZXh0VGljayhtLGUpfXRyeXtlLl9kZXN0cm95KHR8fG51bGwsaSl9Y2F0Y2godCl7aSh0KX19ZnVuY3Rpb24gdihlLHQpe0MoZSx0KSxtKGUpfWZ1bmN0aW9uIG0oZSl7Y29uc3QgdD1lLl9yZWFkYWJsZVN0YXRlLG49ZS5fd3JpdGFibGVTdGF0ZTtuJiYobi5jbG9zZUVtaXR0ZWQ9ITApLHQmJih0LmNsb3NlRW1pdHRlZD0hMCksKG51bGwhPW4mJm4uZW1pdENsb3NlfHxudWxsIT10JiZ0LmVtaXRDbG9zZSkmJmUuZW1pdChcImNsb3NlXCIpfWZ1bmN0aW9uIEMoZSx0KXtjb25zdCBuPWUuX3JlYWRhYmxlU3RhdGUscj1lLl93cml0YWJsZVN0YXRlO251bGwhPXImJnIuZXJyb3JFbWl0dGVkfHxudWxsIT1uJiZuLmVycm9yRW1pdHRlZHx8KHImJihyLmVycm9yRW1pdHRlZD0hMCksbiYmKG4uZXJyb3JFbWl0dGVkPSEwKSxlLmVtaXQoXCJlcnJvclwiLHQpKX1mdW5jdGlvbiB5KGUsdCxuKXtjb25zdCBvPWUuX3JlYWRhYmxlU3RhdGUsaT1lLl93cml0YWJsZVN0YXRlO2lmKG51bGwhPWkmJmkuZGVzdHJveWVkfHxudWxsIT1vJiZvLmRlc3Ryb3llZClyZXR1cm4gdGhpcztudWxsIT1vJiZvLmF1dG9EZXN0cm95fHxudWxsIT1pJiZpLmF1dG9EZXN0cm95P2UuZGVzdHJveSh0KTp0JiYodC5zdGFjayxpJiYhaS5lcnJvcmVkJiYoaS5lcnJvcmVkPXQpLG8mJiFvLmVycm9yZWQmJihvLmVycm9yZWQ9dCksbj9yLm5leHRUaWNrKEMsZSx0KTpDKGUsdCkpfWZ1bmN0aW9uIHcoZSl7bGV0IHQ9ITE7ZnVuY3Rpb24gbihuKXtpZih0KXJldHVybiB2b2lkIHkoZSxudWxsIT1uP246bmV3IGkpO3Q9ITA7Y29uc3Qgbz1lLl9yZWFkYWJsZVN0YXRlLGE9ZS5fd3JpdGFibGVTdGF0ZSxsPWF8fG87byYmKG8uY29uc3RydWN0ZWQ9ITApLGEmJihhLmNvbnN0cnVjdGVkPSEwKSxsLmRlc3Ryb3llZD9lLmVtaXQoZCxuKTpuP3koZSxuLCEwKTpyLm5leHRUaWNrKGIsZSl9dHJ5e2UuX2NvbnN0cnVjdCgoZT0+e3IubmV4dFRpY2sobixlKX0pKX1jYXRjaChlKXtyLm5leHRUaWNrKG4sZSl9fWZ1bmN0aW9uIGIoZSl7ZS5lbWl0KHApfWZ1bmN0aW9uIHgoZSl7cmV0dXJuKG51bGw9PWU/dm9pZCAwOmUuc2V0SGVhZGVyKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5hYm9ydH1mdW5jdGlvbiBfKGUpe2UuZW1pdChcImNsb3NlXCIpfWZ1bmN0aW9uIE8oZSx0KXtlLmVtaXQoXCJlcnJvclwiLHQpLHIubmV4dFRpY2soXyxlKX1lLmV4cG9ydHM9e2NvbnN0cnVjdDpmdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUuX2NvbnN0cnVjdClyZXR1cm47Y29uc3Qgbj1lLl9yZWFkYWJsZVN0YXRlLG89ZS5fd3JpdGFibGVTdGF0ZTtuJiYobi5jb25zdHJ1Y3RlZD0hMSksbyYmKG8uY29uc3RydWN0ZWQ9ITEpLGUub25jZShwLHQpLGUubGlzdGVuZXJDb3VudChwKT4xfHxyLm5leHRUaWNrKHcsZSl9LGRlc3Ryb3llcjpmdW5jdGlvbihlLHQpe2UmJiFjKGUpJiYodHx8dShlKXx8KHQ9bmV3IGEpLGYoZSk/KGUuc29ja2V0PW51bGwsZS5kZXN0cm95KHQpKTp4KGUpP2UuYWJvcnQoKTp4KGUucmVxKT9lLnJlcS5hYm9ydCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZGVzdHJveT9lLmRlc3Ryb3kodCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZS5jbG9zZT9lLmNsb3NlKCk6dD9yLm5leHRUaWNrKE8sZSx0KTpyLm5leHRUaWNrKF8sZSksZS5kZXN0cm95ZWR8fChlW3NdPSEwKSl9LGRlc3Ryb3k6ZnVuY3Rpb24oZSx0KXtjb25zdCBuPXRoaXMuX3JlYWRhYmxlU3RhdGUscj10aGlzLl93cml0YWJsZVN0YXRlLGk9cnx8bjtyZXR1cm4gbnVsbCE9ciYmci5kZXN0cm95ZWR8fG51bGwhPW4mJm4uZGVzdHJveWVkPyhcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZ0KCksdGhpcyk6KGgoZSxyLG4pLHImJihyLmRlc3Ryb3llZD0hMCksbiYmKG4uZGVzdHJveWVkPSEwKSxpLmNvbnN0cnVjdGVkP2codGhpcyxlLHQpOnRoaXMub25jZShkLChmdW5jdGlvbihuKXtnKHRoaXMsbyhuLGUpLHQpfSkpLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24oKXtjb25zdCBlPXRoaXMuX3JlYWRhYmxlU3RhdGUsdD10aGlzLl93cml0YWJsZVN0YXRlO2UmJihlLmNvbnN0cnVjdGVkPSEwLGUuY2xvc2VkPSExLGUuY2xvc2VFbWl0dGVkPSExLGUuZGVzdHJveWVkPSExLGUuZXJyb3JlZD1udWxsLGUuZXJyb3JFbWl0dGVkPSExLGUucmVhZGluZz0hMSxlLmVuZGVkPSExPT09ZS5yZWFkYWJsZSxlLmVuZEVtaXR0ZWQ9ITE9PT1lLnJlYWRhYmxlKSx0JiYodC5jb25zdHJ1Y3RlZD0hMCx0LmRlc3Ryb3llZD0hMSx0LmNsb3NlZD0hMSx0LmNsb3NlRW1pdHRlZD0hMSx0LmVycm9yZWQ9bnVsbCx0LmVycm9yRW1pdHRlZD0hMSx0LmZpbmFsQ2FsbGVkPSExLHQucHJlZmluaXNoZWQ9ITEsdC5lbmRlZD0hMT09PXQud3JpdGFibGUsdC5lbmRpbmc9ITE9PT10LndyaXRhYmxlLHQuZmluaXNoZWQ9ITE9PT10LndyaXRhYmxlKX0sZXJyb3JPckRlc3Ryb3k6eX19LDE4MjooZSx0LG4pPT57Y29uc3R7T2JqZWN0RGVmaW5lUHJvcGVydGllczpyLE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcjpvLE9iamVjdEtleXM6aSxPYmplY3RTZXRQcm90b3R5cGVPZjphfT1uKDE5MSk7ZS5leHBvcnRzPWM7Y29uc3QgbD1uKDg1OCkscz1uKDM3Myk7YShjLnByb3RvdHlwZSxsLnByb3RvdHlwZSksYShjLGwpO3tjb25zdCBlPWkocy5wcm90b3R5cGUpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtjb25zdCBuPWVbdF07Yy5wcm90b3R5cGVbbl18fChjLnByb3RvdHlwZVtuXT1zLnByb3RvdHlwZVtuXSl9fWZ1bmN0aW9uIGMoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgYykpcmV0dXJuIG5ldyBjKGUpO2wuY2FsbCh0aGlzLGUpLHMuY2FsbCh0aGlzLGUpLGU/KHRoaXMuYWxsb3dIYWxmT3Blbj0hMSE9PWUuYWxsb3dIYWxmT3BlbiwhMT09PWUucmVhZGFibGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSEwKSwhMT09PWUud3JpdGFibGUmJih0aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSEwLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITAsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMCkpOnRoaXMuYWxsb3dIYWxmT3Blbj0hMH1sZXQgdSxmO2Z1bmN0aW9uIGQoKXtyZXR1cm4gdm9pZCAwPT09dSYmKHU9e30pLHV9cihjLnByb3RvdHlwZSx7d3JpdGFibGU6e19fcHJvdG9fXzpudWxsLC4uLm8ocy5wcm90b3R5cGUsXCJ3cml0YWJsZVwiKX0sd3JpdGFibGVIaWdoV2F0ZXJNYXJrOntfX3Byb3RvX186bnVsbCwuLi5vKHMucHJvdG90eXBlLFwid3JpdGFibGVIaWdoV2F0ZXJNYXJrXCIpfSx3cml0YWJsZU9iamVjdE1vZGU6e19fcHJvdG9fXzpudWxsLC4uLm8ocy5wcm90b3R5cGUsXCJ3cml0YWJsZU9iamVjdE1vZGVcIil9LHdyaXRhYmxlQnVmZmVyOntfX3Byb3RvX186bnVsbCwuLi5vKHMucHJvdG90eXBlLFwid3JpdGFibGVCdWZmZXJcIil9LHdyaXRhYmxlTGVuZ3RoOntfX3Byb3RvX186bnVsbCwuLi5vKHMucHJvdG90eXBlLFwid3JpdGFibGVMZW5ndGhcIil9LHdyaXRhYmxlRmluaXNoZWQ6e19fcHJvdG9fXzpudWxsLC4uLm8ocy5wcm90b3R5cGUsXCJ3cml0YWJsZUZpbmlzaGVkXCIpfSx3cml0YWJsZUNvcmtlZDp7X19wcm90b19fOm51bGwsLi4ubyhzLnByb3RvdHlwZSxcIndyaXRhYmxlQ29ya2VkXCIpfSx3cml0YWJsZUVuZGVkOntfX3Byb3RvX186bnVsbCwuLi5vKHMucHJvdG90eXBlLFwid3JpdGFibGVFbmRlZFwiKX0sd3JpdGFibGVOZWVkRHJhaW46e19fcHJvdG9fXzpudWxsLC4uLm8ocy5wcm90b3R5cGUsXCJ3cml0YWJsZU5lZWREcmFpblwiKX0sZGVzdHJveWVkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQoZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPWUsdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ZSl9fX0pLGMuZnJvbVdlYj1mdW5jdGlvbihlLHQpe3JldHVybiBkKCkubmV3U3RyZWFtRHVwbGV4RnJvbVJlYWRhYmxlV3JpdGFibGVQYWlyKGUsdCl9LGMudG9XZWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGQoKS5uZXdSZWFkYWJsZVdyaXRhYmxlUGFpckZyb21EdXBsZXgoZSl9LGMuZnJvbT1mdW5jdGlvbihlKXtyZXR1cm4gZnx8KGY9big3NDkpKSxmKGUsXCJib2R5XCIpfX0sNzQ5OihlLHQsbik9Pntjb25zdCByPW4oNTMzKSxvPW4oNDg1KSx7aXNSZWFkYWJsZTppLGlzV3JpdGFibGU6YSxpc0l0ZXJhYmxlOmwsaXNOb2RlU3RyZWFtOnMsaXNSZWFkYWJsZU5vZGVTdHJlYW06Yyxpc1dyaXRhYmxlTm9kZVN0cmVhbTp1LGlzRHVwbGV4Tm9kZVN0cmVhbTpmfT1uKDEzMiksZD1uKDg2KSx7QWJvcnRFcnJvcjpwLGNvZGVzOntFUlJfSU5WQUxJRF9BUkdfVFlQRTpoLEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRTpnfX09bigxNDEpLHtkZXN0cm95ZXI6dn09bigyMzApLG09bigxODIpLEM9big4NTgpLHtjcmVhdGVEZWZlcnJlZFByb21pc2U6eX09big3NzUpLHc9big5MTMpLGI9Z2xvYmFsVGhpcy5CbG9ifHxvLkJsb2IseD12b2lkIDAhPT1iP2Z1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgYn06ZnVuY3Rpb24oZSl7cmV0dXJuITF9LF89Z2xvYmFsVGhpcy5BYm9ydENvbnRyb2xsZXJ8fG4oODc2KS5BYm9ydENvbnRyb2xsZXIse0Z1bmN0aW9uUHJvdG90eXBlQ2FsbDpPfT1uKDE5MSk7Y2xhc3MgTCBleHRlbmRzIG17Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksITE9PT0obnVsbD09ZT92b2lkIDA6ZS5yZWFkYWJsZSkmJih0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSEwKSwhMT09PShudWxsPT1lP3ZvaWQgMDplLndyaXRhYmxlKSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUud3JpdGFibGU9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITAsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMCx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSEwKX19ZnVuY3Rpb24gRShlKXtjb25zdCB0PWUucmVhZGFibGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUucmVhZGFibGUucmVhZD9DLndyYXAoZS5yZWFkYWJsZSk6ZS5yZWFkYWJsZSxuPWUud3JpdGFibGU7bGV0IHIsbyxsLHMsYyx1PSEhaSh0KSxmPSEhYShuKTtmdW5jdGlvbiBoKGUpe2NvbnN0IHQ9cztzPW51bGwsdD90KGUpOmUmJmMuZGVzdHJveShlKX1yZXR1cm4gYz1uZXcgTCh7cmVhZGFibGVPYmplY3RNb2RlOiEobnVsbD09dHx8IXQucmVhZGFibGVPYmplY3RNb2RlKSx3cml0YWJsZU9iamVjdE1vZGU6IShudWxsPT1ufHwhbi53cml0YWJsZU9iamVjdE1vZGUpLHJlYWRhYmxlOnUsd3JpdGFibGU6Zn0pLGYmJihkKG4sKGU9PntmPSExLGUmJnYodCxlKSxoKGUpfSkpLGMuX3dyaXRlPWZ1bmN0aW9uKGUsdCxvKXtuLndyaXRlKGUsdCk/bygpOnI9b30sYy5fZmluYWw9ZnVuY3Rpb24oZSl7bi5lbmQoKSxvPWV9LG4ub24oXCJkcmFpblwiLChmdW5jdGlvbigpe2lmKHIpe2NvbnN0IGU9cjtyPW51bGwsZSgpfX0pKSxuLm9uKFwiZmluaXNoXCIsKGZ1bmN0aW9uKCl7aWYobyl7Y29uc3QgZT1vO289bnVsbCxlKCl9fSkpKSx1JiYoZCh0LChlPT57dT0hMSxlJiZ2KHQsZSksaChlKX0pKSx0Lm9uKFwicmVhZGFibGVcIiwoZnVuY3Rpb24oKXtpZihsKXtjb25zdCBlPWw7bD1udWxsLGUoKX19KSksdC5vbihcImVuZFwiLChmdW5jdGlvbigpe2MucHVzaChudWxsKX0pKSxjLl9yZWFkPWZ1bmN0aW9uKCl7Zm9yKDs7KXtjb25zdCBlPXQucmVhZCgpO2lmKG51bGw9PT1lKXJldHVybiB2b2lkKGw9Yy5fcmVhZCk7aWYoIWMucHVzaChlKSlyZXR1cm59fSksYy5fZGVzdHJveT1mdW5jdGlvbihlLGkpe2V8fG51bGw9PT1zfHwoZT1uZXcgcCksbD1udWxsLHI9bnVsbCxvPW51bGwsbnVsbD09PXM/aShlKToocz1pLHYobixlKSx2KHQsZSkpfSxjfWUuZXhwb3J0cz1mdW5jdGlvbiBlKHQsbil7aWYoZih0KSlyZXR1cm4gdDtpZihjKHQpKXJldHVybiBFKHtyZWFkYWJsZTp0fSk7aWYodSh0KSlyZXR1cm4gRSh7d3JpdGFibGU6dH0pO2lmKHModCkpcmV0dXJuIEUoe3dyaXRhYmxlOiExLHJlYWRhYmxlOiExfSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdCl7Y29uc3R7dmFsdWU6ZSx3cml0ZTpvLGZpbmFsOmksZGVzdHJveTphfT1mdW5jdGlvbihlKXtsZXR7cHJvbWlzZTp0LHJlc29sdmU6bn09eSgpO2NvbnN0IG89bmV3IF8saT1vLnNpZ25hbCxhPWUoYXN5bmMgZnVuY3Rpb24qKCl7Zm9yKDs7KXtjb25zdCBlPXQ7dD1udWxsO2NvbnN0e2NodW5rOm8sZG9uZTphLGNiOmx9PWF3YWl0IGU7aWYoci5uZXh0VGljayhsKSxhKXJldHVybjtpZihpLmFib3J0ZWQpdGhyb3cgbmV3IHAodm9pZCAwLHtjYXVzZTppLnJlYXNvbn0pOyh7cHJvbWlzZTp0LHJlc29sdmU6bn09eSgpKSx5aWVsZCBvfX0oKSx7c2lnbmFsOml9KTtyZXR1cm57dmFsdWU6YSx3cml0ZShlLHQscil7Y29uc3Qgbz1uO249bnVsbCxvKHtjaHVuazplLGRvbmU6ITEsY2I6cn0pfSxmaW5hbChlKXtjb25zdCB0PW47bj1udWxsLHQoe2RvbmU6ITAsY2I6ZX0pfSxkZXN0cm95KGUsdCl7by5hYm9ydCgpLHQoZSl9fX0odCk7aWYobChlKSlyZXR1cm4gdyhMLGUse29iamVjdE1vZGU6ITAsd3JpdGU6byxmaW5hbDppLGRlc3Ryb3k6YX0pO2NvbnN0IHM9bnVsbD09ZT92b2lkIDA6ZS50aGVuO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHMpe2xldCB0O2NvbnN0IG49TyhzLGUsKGU9PntpZihudWxsIT1lKXRocm93IG5ldyBnKFwibnVsbHlcIixcImJvZHlcIixlKX0pLChlPT57dih0LGUpfSkpO3JldHVybiB0PW5ldyBMKHtvYmplY3RNb2RlOiEwLHJlYWRhYmxlOiExLHdyaXRlOm8sZmluYWwoZSl7aSgoYXN5bmMoKT0+e3RyeXthd2FpdCBuLHIubmV4dFRpY2soZSxudWxsKX1jYXRjaCh0KXtyLm5leHRUaWNrKGUsdCl9fSkpfSxkZXN0cm95OmF9KX10aHJvdyBuZXcgZyhcIkl0ZXJhYmxlLCBBc3luY0l0ZXJhYmxlIG9yIEFzeW5jRnVuY3Rpb25cIixuLGUpfWlmKHgodCkpcmV0dXJuIGUodC5hcnJheUJ1ZmZlcigpKTtpZihsKHQpKXJldHVybiB3KEwsdCx7b2JqZWN0TW9kZTohMCx3cml0YWJsZTohMX0pO2lmKFwib2JqZWN0XCI9PXR5cGVvZihudWxsPT10P3ZvaWQgMDp0LndyaXRhYmxlKXx8XCJvYmplY3RcIj09dHlwZW9mKG51bGw9PXQ/dm9pZCAwOnQucmVhZGFibGUpKXJldHVybiBFKHtyZWFkYWJsZTpudWxsIT10JiZ0LnJlYWRhYmxlP2MobnVsbD09dD92b2lkIDA6dC5yZWFkYWJsZSk/bnVsbD09dD92b2lkIDA6dC5yZWFkYWJsZTplKHQucmVhZGFibGUpOnZvaWQgMCx3cml0YWJsZTpudWxsIT10JiZ0LndyaXRhYmxlP3UobnVsbD09dD92b2lkIDA6dC53cml0YWJsZSk/bnVsbD09dD92b2lkIDA6dC53cml0YWJsZTplKHQud3JpdGFibGUpOnZvaWQgMH0pO2NvbnN0IG89bnVsbD09dD92b2lkIDA6dC50aGVuO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG8pe2xldCBlO3JldHVybiBPKG8sdCwodD0+e251bGwhPXQmJmUucHVzaCh0KSxlLnB1c2gobnVsbCl9KSwodD0+e3YoZSx0KX0pKSxlPW5ldyBMKHtvYmplY3RNb2RlOiEwLHdyaXRhYmxlOiExLHJlYWQoKXt9fSl9dGhyb3cgbmV3IGgobixbXCJCbG9iXCIsXCJSZWFkYWJsZVN0cmVhbVwiLFwiV3JpdGFibGVTdHJlYW1cIixcIlN0cmVhbVwiLFwiSXRlcmFibGVcIixcIkFzeW5jSXRlcmFibGVcIixcIkZ1bmN0aW9uXCIsXCJ7IHJlYWRhYmxlLCB3cml0YWJsZSB9IHBhaXJcIixcIlByb21pc2VcIl0sdCl9fSw4NjooZSx0LG4pPT57Y29uc3Qgcj1uKDUzMykse0Fib3J0RXJyb3I6byxjb2RlczppfT1uKDE0MSkse0VSUl9JTlZBTElEX0FSR19UWVBFOmEsRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U6bH09aSx7a0VtcHR5T2JqZWN0OnMsb25jZTpjfT1uKDc3NSkse3ZhbGlkYXRlQWJvcnRTaWduYWw6dSx2YWxpZGF0ZUZ1bmN0aW9uOmYsdmFsaWRhdGVPYmplY3Q6ZCx2YWxpZGF0ZUJvb2xlYW46cH09big5MDQpLHtQcm9taXNlOmgsUHJvbWlzZVByb3RvdHlwZVRoZW46Z309bigxOTEpLHtpc0Nsb3NlZDp2LGlzUmVhZGFibGU6bSxpc1JlYWRhYmxlTm9kZVN0cmVhbTpDLGlzUmVhZGFibGVTdHJlYW06eSxpc1JlYWRhYmxlRmluaXNoZWQ6dyxpc1JlYWRhYmxlRXJyb3JlZDpiLGlzV3JpdGFibGU6eCxpc1dyaXRhYmxlTm9kZVN0cmVhbTpfLGlzV3JpdGFibGVTdHJlYW06Tyxpc1dyaXRhYmxlRmluaXNoZWQ6TCxpc1dyaXRhYmxlRXJyb3JlZDpFLGlzTm9kZVN0cmVhbTpTLHdpbGxFbWl0Q2xvc2U6aixrSXNDbG9zZWRQcm9taXNlOk19PW4oMTMyKSxrPSgpPT57fTtmdW5jdGlvbiBSKGUsdCxuKXt2YXIgaSxwO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoPyhuPXQsdD1zKTpudWxsPT10P3Q9czpkKHQsXCJvcHRpb25zXCIpLGYobixcImNhbGxiYWNrXCIpLHUodC5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKSxuPWMobikseShlKXx8TyhlKSlyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe2xldCBpPSExLGE9aztpZih0LnNpZ25hbClpZihhPSgpPT57aT0hMCxuLmNhbGwoZSxuZXcgbyh2b2lkIDAse2NhdXNlOnQuc2lnbmFsLnJlYXNvbn0pKX0sdC5zaWduYWwuYWJvcnRlZClyLm5leHRUaWNrKGEpO2Vsc2V7Y29uc3Qgcj1uO249YygoKC4uLm4pPT57dC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsYSksci5hcHBseShlLG4pfSkpLHQuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGEpfWNvbnN0IGw9KC4uLnQpPT57aXx8ci5uZXh0VGljaygoKCk9Pm4uYXBwbHkoZSx0KSkpfTtyZXR1cm4gZyhlW01dLnByb21pc2UsbCxsKSxrfShlLHQsbik7aWYoIVMoZSkpdGhyb3cgbmV3IGEoXCJzdHJlYW1cIixbXCJSZWFkYWJsZVN0cmVhbVwiLFwiV3JpdGFibGVTdHJlYW1cIixcIlN0cmVhbVwiXSxlKTtjb25zdCBoPW51bGwhPT0oaT10LnJlYWRhYmxlKSYmdm9pZCAwIT09aT9pOkMoZSksUj1udWxsIT09KHA9dC53cml0YWJsZSkmJnZvaWQgMCE9PXA/cDpfKGUpLFA9ZS5fd3JpdGFibGVTdGF0ZSxJPWUuX3JlYWRhYmxlU3RhdGUsQT0oKT0+e2Uud3JpdGFibGV8fEIoKX07bGV0IFQ9aihlKSYmQyhlKT09PWgmJl8oZSk9PT1SLEg9TChlLCExKTtjb25zdCBCPSgpPT57SD0hMCxlLmRlc3Ryb3llZCYmKFQ9ITEpLCghVHx8ZS5yZWFkYWJsZSYmIWgpJiYoaCYmIVZ8fG4uY2FsbChlKSl9O2xldCBWPXcoZSwhMSk7Y29uc3QgRD0oKT0+e1Y9ITAsZS5kZXN0cm95ZWQmJihUPSExKSwoIVR8fGUud3JpdGFibGUmJiFSKSYmKFImJiFIfHxuLmNhbGwoZSkpfSxaPXQ9PntuLmNhbGwoZSx0KX07bGV0ICQ9dihlKTtjb25zdCBOPSgpPT57JD0hMDtjb25zdCB0PUUoZSl8fGIoZSk7cmV0dXJuIHQmJlwiYm9vbGVhblwiIT10eXBlb2YgdD9uLmNhbGwoZSx0KTpoJiYhViYmQyhlLCEwKSYmIXcoZSwhMSk/bi5jYWxsKGUsbmV3IGwpOiFSfHxIfHxMKGUsITEpP3ZvaWQgbi5jYWxsKGUpOm4uY2FsbChlLG5ldyBsKX0sRj0oKT0+eyQ9ITA7Y29uc3QgdD1FKGUpfHxiKGUpO2lmKHQmJlwiYm9vbGVhblwiIT10eXBlb2YgdClyZXR1cm4gbi5jYWxsKGUsdCk7bi5jYWxsKGUpfSxVPSgpPT57ZS5yZXEub24oXCJmaW5pc2hcIixCKX07IWZ1bmN0aW9uKGUpe3JldHVybiBlLnNldEhlYWRlciYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5hYm9ydH0oZSk/UiYmIVAmJihlLm9uKFwiZW5kXCIsQSksZS5vbihcImNsb3NlXCIsQSkpOihlLm9uKFwiY29tcGxldGVcIixCKSxUfHxlLm9uKFwiYWJvcnRcIixOKSxlLnJlcT9VKCk6ZS5vbihcInJlcXVlc3RcIixVKSksVHx8XCJib29sZWFuXCIhPXR5cGVvZiBlLmFib3J0ZWR8fGUub24oXCJhYm9ydGVkXCIsTiksZS5vbihcImVuZFwiLEQpLGUub24oXCJmaW5pc2hcIixCKSwhMSE9PXQuZXJyb3ImJmUub24oXCJlcnJvclwiLFopLGUub24oXCJjbG9zZVwiLE4pLCQ/ci5uZXh0VGljayhOKTpudWxsIT1QJiZQLmVycm9yRW1pdHRlZHx8bnVsbCE9SSYmSS5lcnJvckVtaXR0ZWQ/VHx8ci5uZXh0VGljayhGKTooaHx8VCYmIW0oZSl8fCFIJiYhMSE9PXgoZSkpJiYoUnx8VCYmIXgoZSl8fCFWJiYhMSE9PW0oZSkpP0kmJmUucmVxJiZlLmFib3J0ZWQmJnIubmV4dFRpY2soRik6ci5uZXh0VGljayhGKTtjb25zdCBXPSgpPT57bj1rLGUucmVtb3ZlTGlzdGVuZXIoXCJhYm9ydGVkXCIsTiksZS5yZW1vdmVMaXN0ZW5lcihcImNvbXBsZXRlXCIsQiksZS5yZW1vdmVMaXN0ZW5lcihcImFib3J0XCIsTiksZS5yZW1vdmVMaXN0ZW5lcihcInJlcXVlc3RcIixVKSxlLnJlcSYmZS5yZXEucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIixCKSxlLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsQSksZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsQSksZS5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLEIpLGUucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixEKSxlLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixaKSxlLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixOKX07aWYodC5zaWduYWwmJiEkKXtjb25zdCBpPSgpPT57Y29uc3Qgcj1uO1coKSxyLmNhbGwoZSxuZXcgbyh2b2lkIDAse2NhdXNlOnQuc2lnbmFsLnJlYXNvbn0pKX07aWYodC5zaWduYWwuYWJvcnRlZClyLm5leHRUaWNrKGkpO2Vsc2V7Y29uc3Qgcj1uO249YygoKC4uLm4pPT57dC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsaSksci5hcHBseShlLG4pfSkpLHQuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGkpfX1yZXR1cm4gV31lLmV4cG9ydHM9UixlLmV4cG9ydHMuZmluaXNoZWQ9ZnVuY3Rpb24oZSx0KXt2YXIgbjtsZXQgcj0hMTtyZXR1cm4gbnVsbD09PXQmJih0PXMpLG51bGwhPT0obj10KSYmdm9pZCAwIT09biYmbi5jbGVhbnVwJiYocCh0LmNsZWFudXAsXCJjbGVhbnVwXCIpLHI9dC5jbGVhbnVwKSxuZXcgaCgoKG4sbyk9Pntjb25zdCBpPVIoZSx0LChlPT57ciYmaSgpLGU/byhlKTpuKCl9KSl9KSl9fSw5MTM6KGUsdCxuKT0+e2NvbnN0IHI9big1MzMpLHtQcm9taXNlUHJvdG90eXBlVGhlbjpvLFN5bWJvbEFzeW5jSXRlcmF0b3I6aSxTeW1ib2xJdGVyYXRvcjphfT1uKDE5MSkse0J1ZmZlcjpsfT1uKDQ4NSkse0VSUl9JTlZBTElEX0FSR19UWVBFOnMsRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUzpjfT1uKDE0MSkuY29kZXM7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtsZXQgdSxmO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgbClyZXR1cm4gbmV3IGUoe29iamVjdE1vZGU6ITAsLi4ubixyZWFkKCl7dGhpcy5wdXNoKHQpLHRoaXMucHVzaChudWxsKX19KTtpZih0JiZ0W2ldKWY9ITAsdT10W2ldKCk7ZWxzZXtpZighdHx8IXRbYV0pdGhyb3cgbmV3IHMoXCJpdGVyYWJsZVwiLFtcIkl0ZXJhYmxlXCJdLHQpO2Y9ITEsdT10W2FdKCl9Y29uc3QgZD1uZXcgZSh7b2JqZWN0TW9kZTohMCxoaWdoV2F0ZXJNYXJrOjEsLi4ubn0pO2xldCBwPSExO3JldHVybiBkLl9yZWFkPWZ1bmN0aW9uKCl7cHx8KHA9ITAsYXN5bmMgZnVuY3Rpb24oKXtmb3IoOzspe3RyeXtjb25zdHt2YWx1ZTplLGRvbmU6dH09Zj9hd2FpdCB1Lm5leHQoKTp1Lm5leHQoKTtpZih0KWQucHVzaChudWxsKTtlbHNle2NvbnN0IHQ9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS50aGVuP2F3YWl0IGU6ZTtpZihudWxsPT09dCl0aHJvdyBwPSExLG5ldyBjO2lmKGQucHVzaCh0KSljb250aW51ZTtwPSExfX1jYXRjaChlKXtkLmRlc3Ryb3koZSl9YnJlYWt9fSgpKX0sZC5fZGVzdHJveT1mdW5jdGlvbihlLHQpe28oYXN5bmMgZnVuY3Rpb24oZSl7Y29uc3QgdD1udWxsIT1lLG49XCJmdW5jdGlvblwiPT10eXBlb2YgdS50aHJvdztpZih0JiZuKXtjb25zdHt2YWx1ZTp0LGRvbmU6bn09YXdhaXQgdS50aHJvdyhlKTtpZihhd2FpdCB0LG4pcmV0dXJufWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHUucmV0dXJuKXtjb25zdHt2YWx1ZTplfT1hd2FpdCB1LnJldHVybigpO2F3YWl0IGV9fShlKSwoKCk9PnIubmV4dFRpY2sodCxlKSksKG49PnIubmV4dFRpY2sodCxufHxlKSkpfSxkfX0sMjAwOihlLHQsbik9Pntjb25zdHtBcnJheUlzQXJyYXk6cixPYmplY3RTZXRQcm90b3R5cGVPZjpvfT1uKDE5MSkse0V2ZW50RW1pdHRlcjppfT1uKDQ2NSk7ZnVuY3Rpb24gYShlKXtpLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBsKGUsdCxuKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gZS5wcmVwZW5kTGlzdGVuZXIodCxuKTtlLl9ldmVudHMmJmUuX2V2ZW50c1t0XT9yKGUuX2V2ZW50c1t0XSk/ZS5fZXZlbnRzW3RdLnVuc2hpZnQobik6ZS5fZXZlbnRzW3RdPVtuLGUuX2V2ZW50c1t0XV06ZS5vbih0LG4pfW8oYS5wcm90b3R5cGUsaS5wcm90b3R5cGUpLG8oYSxpKSxhLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj10aGlzO2Z1bmN0aW9uIHIodCl7ZS53cml0YWJsZSYmITE9PT1lLndyaXRlKHQpJiZuLnBhdXNlJiZuLnBhdXNlKCl9ZnVuY3Rpb24gbygpe24ucmVhZGFibGUmJm4ucmVzdW1lJiZuLnJlc3VtZSgpfW4ub24oXCJkYXRhXCIsciksZS5vbihcImRyYWluXCIsbyksZS5faXNTdGRpb3x8dCYmITE9PT10LmVuZHx8KG4ub24oXCJlbmRcIixzKSxuLm9uKFwiY2xvc2VcIixjKSk7bGV0IGE9ITE7ZnVuY3Rpb24gcygpe2F8fChhPSEwLGUuZW5kKCkpfWZ1bmN0aW9uIGMoKXthfHwoYT0hMCxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmRlc3Ryb3kmJmUuZGVzdHJveSgpKX1mdW5jdGlvbiB1KGUpe2YoKSwwPT09aS5saXN0ZW5lckNvdW50KHRoaXMsXCJlcnJvclwiKSYmdGhpcy5lbWl0KFwiZXJyb3JcIixlKX1mdW5jdGlvbiBmKCl7bi5yZW1vdmVMaXN0ZW5lcihcImRhdGFcIixyKSxlLnJlbW92ZUxpc3RlbmVyKFwiZHJhaW5cIixvKSxuLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIscyksbi5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsYyksbi5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsdSksZS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsdSksbi5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLGYpLG4ucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLGYpLGUucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLGYpfXJldHVybiBsKG4sXCJlcnJvclwiLHUpLGwoZSxcImVycm9yXCIsdSksbi5vbihcImVuZFwiLGYpLG4ub24oXCJjbG9zZVwiLGYpLGUub24oXCJjbG9zZVwiLGYpLGUuZW1pdChcInBpcGVcIixuKSxlfSxlLmV4cG9ydHM9e1N0cmVhbTphLHByZXBlbmRMaXN0ZW5lcjpsfX0sNTU0OihlLHQsbik9Pntjb25zdCByPWdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyfHxuKDg3NikuQWJvcnRDb250cm9sbGVyLHtjb2Rlczp7RVJSX0lOVkFMSURfQVJHX1ZBTFVFOm8sRVJSX0lOVkFMSURfQVJHX1RZUEU6aSxFUlJfTUlTU0lOR19BUkdTOmEsRVJSX09VVF9PRl9SQU5HRTpsfSxBYm9ydEVycm9yOnN9PW4oMTQxKSx7dmFsaWRhdGVBYm9ydFNpZ25hbDpjLHZhbGlkYXRlSW50ZWdlcjp1LHZhbGlkYXRlT2JqZWN0OmZ9PW4oOTA0KSxkPW4oMTkxKS5TeW1ib2woXCJrV2Vha1wiKSx7ZmluaXNoZWQ6cH09big4NiksaD1uKDgxOCkse2FkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZTpnfT1uKDM3NCkse2lzV3JpdGFibGU6dixpc05vZGVTdHJlYW06bX09bigxMzIpLHtBcnJheVByb3RvdHlwZVB1c2g6QyxNYXRoRmxvb3I6eSxOdW1iZXI6dyxOdW1iZXJJc05hTjpiLFByb21pc2U6eCxQcm9taXNlUmVqZWN0Ol8sUHJvbWlzZVByb3RvdHlwZVRoZW46TyxTeW1ib2w6TH09bigxOTEpLEU9TChcImtFbXB0eVwiKSxTPUwoXCJrRW9mXCIpO2Z1bmN0aW9uIGooZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBpKFwiZm5cIixbXCJGdW5jdGlvblwiLFwiQXN5bmNGdW5jdGlvblwiXSxlKTtudWxsIT10JiZmKHQsXCJvcHRpb25zXCIpLG51bGwhPShudWxsPT10P3ZvaWQgMDp0LnNpZ25hbCkmJmModC5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKTtsZXQgbj0xO3JldHVybiBudWxsIT0obnVsbD09dD92b2lkIDA6dC5jb25jdXJyZW5jeSkmJihuPXkodC5jb25jdXJyZW5jeSkpLHUobixcImNvbmN1cnJlbmN5XCIsMSksYXN5bmMgZnVuY3Rpb24qKCl7dmFyIG8saTtjb25zdCBhPW5ldyByLGw9dGhpcyxjPVtdLHU9YS5zaWduYWwsZj17c2lnbmFsOnV9LGQ9KCk9PmEuYWJvcnQoKTtsZXQgcCxoO251bGwhPXQmJm51bGwhPT0obz10LnNpZ25hbCkmJnZvaWQgMCE9PW8mJm8uYWJvcnRlZCYmZCgpLG51bGw9PXR8fG51bGw9PT0oaT10LnNpZ25hbCl8fHZvaWQgMD09PWl8fGkuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsZCk7bGV0IGc9ITE7ZnVuY3Rpb24gdigpe2c9ITB9IWFzeW5jIGZ1bmN0aW9uKCl7dHJ5e2ZvciBhd2FpdChsZXQgdCBvZiBsKXt2YXIgcjtpZihnKXJldHVybjtpZih1LmFib3J0ZWQpdGhyb3cgbmV3IHM7dHJ5e3Q9ZSh0LGYpfWNhdGNoKGUpe3Q9XyhlKX10IT09RSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mKG51bGw9PT0ocj10KXx8dm9pZCAwPT09cj92b2lkIDA6ci5jYXRjaCkmJnQuY2F0Y2godiksYy5wdXNoKHQpLHAmJihwKCkscD1udWxsKSwhZyYmYy5sZW5ndGgmJmMubGVuZ3RoPj1uJiZhd2FpdCBuZXcgeCgoZT0+e2g9ZX0pKSl9Yy5wdXNoKFMpfWNhdGNoKGUpe2NvbnN0IHQ9XyhlKTtPKHQsdm9pZCAwLHYpLGMucHVzaCh0KX1maW5hbGx5e3ZhciBvO2c9ITAscCYmKHAoKSxwPW51bGwpLG51bGw9PXR8fG51bGw9PT0obz10LnNpZ25hbCl8fHZvaWQgMD09PW98fG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsZCl9fSgpO3RyeXtmb3IoOzspe2Zvcig7Yy5sZW5ndGg+MDspe2NvbnN0IGU9YXdhaXQgY1swXTtpZihlPT09UylyZXR1cm47aWYodS5hYm9ydGVkKXRocm93IG5ldyBzO2UhPT1FJiYoeWllbGQgZSksYy5zaGlmdCgpLGgmJihoKCksaD1udWxsKX1hd2FpdCBuZXcgeCgoZT0+e3A9ZX0pKX19ZmluYWxseXthLmFib3J0KCksZz0hMCxoJiYoaCgpLGg9bnVsbCl9fS5jYWxsKHRoaXMpfWFzeW5jIGZ1bmN0aW9uIE0oZSx0PXZvaWQgMCl7Zm9yIGF3YWl0KGNvbnN0IG4gb2Ygay5jYWxsKHRoaXMsZSx0KSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBrKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgaShcImZuXCIsW1wiRnVuY3Rpb25cIixcIkFzeW5jRnVuY3Rpb25cIl0sZSk7cmV0dXJuIGouY2FsbCh0aGlzLChhc3luYyBmdW5jdGlvbih0LG4pe3JldHVybiBhd2FpdCBlKHQsbik/dDpFfSksdCl9Y2xhc3MgUiBleHRlbmRzIGF7Y29uc3RydWN0b3IoKXtzdXBlcihcInJlZHVjZVwiKSx0aGlzLm1lc3NhZ2U9XCJSZWR1Y2Ugb2YgYW4gZW1wdHkgc3RyZWFtIHJlcXVpcmVzIGFuIGluaXRpYWwgdmFsdWVcIn19ZnVuY3Rpb24gUChlKXtpZihlPXcoZSksYihlKSlyZXR1cm4gMDtpZihlPDApdGhyb3cgbmV3IGwoXCJudW1iZXJcIixcIj49IDBcIixlKTtyZXR1cm4gZX1lLmV4cG9ydHMuc3RyZWFtUmV0dXJuaW5nT3BlcmF0b3JzPXthc0luZGV4ZWRQYWlyczpmdW5jdGlvbihlPXZvaWQgMCl7cmV0dXJuIG51bGwhPWUmJmYoZSxcIm9wdGlvbnNcIiksbnVsbCE9KG51bGw9PWU/dm9pZCAwOmUuc2lnbmFsKSYmYyhlLnNpZ25hbCxcIm9wdGlvbnMuc2lnbmFsXCIpLGFzeW5jIGZ1bmN0aW9uKigpe2xldCB0PTA7Zm9yIGF3YWl0KGNvbnN0IHIgb2YgdGhpcyl7dmFyIG47aWYobnVsbCE9ZSYmbnVsbCE9PShuPWUuc2lnbmFsKSYmdm9pZCAwIT09biYmbi5hYm9ydGVkKXRocm93IG5ldyBzKHtjYXVzZTplLnNpZ25hbC5yZWFzb259KTt5aWVsZFt0Kysscl19fS5jYWxsKHRoaXMpfSxkcm9wOmZ1bmN0aW9uKGUsdD12b2lkIDApe3JldHVybiBudWxsIT10JiZmKHQsXCJvcHRpb25zXCIpLG51bGwhPShudWxsPT10P3ZvaWQgMDp0LnNpZ25hbCkmJmModC5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKSxlPVAoZSksYXN5bmMgZnVuY3Rpb24qKCl7dmFyIG47aWYobnVsbCE9dCYmbnVsbCE9PShuPXQuc2lnbmFsKSYmdm9pZCAwIT09biYmbi5hYm9ydGVkKXRocm93IG5ldyBzO2ZvciBhd2FpdChjb25zdCBuIG9mIHRoaXMpe3ZhciByO2lmKG51bGwhPXQmJm51bGwhPT0ocj10LnNpZ25hbCkmJnZvaWQgMCE9PXImJnIuYWJvcnRlZCl0aHJvdyBuZXcgcztlLS08PTAmJih5aWVsZCBuKX19LmNhbGwodGhpcyl9LGZpbHRlcjprLGZsYXRNYXA6ZnVuY3Rpb24oZSx0KXtjb25zdCBuPWouY2FsbCh0aGlzLGUsdCk7cmV0dXJuIGFzeW5jIGZ1bmN0aW9uKigpe2ZvciBhd2FpdChjb25zdCBlIG9mIG4peWllbGQqZX0uY2FsbCh0aGlzKX0sbWFwOmosdGFrZTpmdW5jdGlvbihlLHQ9dm9pZCAwKXtyZXR1cm4gbnVsbCE9dCYmZih0LFwib3B0aW9uc1wiKSxudWxsIT0obnVsbD09dD92b2lkIDA6dC5zaWduYWwpJiZjKHQuc2lnbmFsLFwib3B0aW9ucy5zaWduYWxcIiksZT1QKGUpLGFzeW5jIGZ1bmN0aW9uKigpe3ZhciBuO2lmKG51bGwhPXQmJm51bGwhPT0obj10LnNpZ25hbCkmJnZvaWQgMCE9PW4mJm4uYWJvcnRlZCl0aHJvdyBuZXcgcztmb3IgYXdhaXQoY29uc3QgbiBvZiB0aGlzKXt2YXIgcjtpZihudWxsIT10JiZudWxsIT09KHI9dC5zaWduYWwpJiZ2b2lkIDAhPT1yJiZyLmFib3J0ZWQpdGhyb3cgbmV3IHM7aWYoIShlLS0gPjApKXJldHVybjt5aWVsZCBufX0uY2FsbCh0aGlzKX0sY29tcG9zZTpmdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJmYodCxcIm9wdGlvbnNcIiksbnVsbCE9KG51bGw9PXQ/dm9pZCAwOnQuc2lnbmFsKSYmYyh0LnNpZ25hbCxcIm9wdGlvbnMuc2lnbmFsXCIpLG0oZSkmJiF2KGUpKXRocm93IG5ldyBvKFwic3RyZWFtXCIsZSxcIm11c3QgYmUgd3JpdGFibGVcIik7Y29uc3Qgbj1oKHRoaXMsZSk7cmV0dXJuIG51bGwhPXQmJnQuc2lnbmFsJiZnKHQuc2lnbmFsLG4pLG59fSxlLmV4cG9ydHMucHJvbWlzZVJldHVybmluZ09wZXJhdG9ycz17ZXZlcnk6YXN5bmMgZnVuY3Rpb24oZSx0PXZvaWQgMCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgaShcImZuXCIsW1wiRnVuY3Rpb25cIixcIkFzeW5jRnVuY3Rpb25cIl0sZSk7cmV0dXJuIWF3YWl0IE0uY2FsbCh0aGlzLChhc3luYyguLi50KT0+IWF3YWl0IGUoLi4udCkpLHQpfSxmb3JFYWNoOmFzeW5jIGZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgaShcImZuXCIsW1wiRnVuY3Rpb25cIixcIkFzeW5jRnVuY3Rpb25cIl0sZSk7Zm9yIGF3YWl0KGNvbnN0IG4gb2Ygai5jYWxsKHRoaXMsKGFzeW5jIGZ1bmN0aW9uKHQsbil7cmV0dXJuIGF3YWl0IGUodCxuKSxFfSksdCkpO30scmVkdWNlOmFzeW5jIGZ1bmN0aW9uKGUsdCxuKXt2YXIgbztpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBpKFwicmVkdWNlclwiLFtcIkZ1bmN0aW9uXCIsXCJBc3luY0Z1bmN0aW9uXCJdLGUpO251bGwhPW4mJmYobixcIm9wdGlvbnNcIiksbnVsbCE9KG51bGw9PW4/dm9pZCAwOm4uc2lnbmFsKSYmYyhuLnNpZ25hbCxcIm9wdGlvbnMuc2lnbmFsXCIpO2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MTtpZihudWxsIT1uJiZudWxsIT09KG89bi5zaWduYWwpJiZ2b2lkIDAhPT1vJiZvLmFib3J0ZWQpe2NvbnN0IGU9bmV3IHModm9pZCAwLHtjYXVzZTpuLnNpZ25hbC5yZWFzb259KTt0aHJvdyB0aGlzLm9uY2UoXCJlcnJvclwiLCgoKT0+e30pKSxhd2FpdCBwKHRoaXMuZGVzdHJveShlKSksZX1jb25zdCBsPW5ldyByLHU9bC5zaWduYWw7aWYobnVsbCE9biYmbi5zaWduYWwpe2NvbnN0IGU9e29uY2U6ITAsW2RdOnRoaXN9O24uc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCgoKT0+bC5hYm9ydCgpKSxlKX1sZXQgaD0hMTt0cnl7Zm9yIGF3YWl0KGNvbnN0IHIgb2YgdGhpcyl7dmFyIGc7aWYoaD0hMCxudWxsIT1uJiZudWxsIT09KGc9bi5zaWduYWwpJiZ2b2lkIDAhPT1nJiZnLmFib3J0ZWQpdGhyb3cgbmV3IHM7YT90PWF3YWl0IGUodCxyLHtzaWduYWw6dX0pOih0PXIsYT0hMCl9aWYoIWgmJiFhKXRocm93IG5ldyBSfWZpbmFsbHl7bC5hYm9ydCgpfXJldHVybiB0fSx0b0FycmF5OmFzeW5jIGZ1bmN0aW9uKGUpe251bGwhPWUmJmYoZSxcIm9wdGlvbnNcIiksbnVsbCE9KG51bGw9PWU/dm9pZCAwOmUuc2lnbmFsKSYmYyhlLnNpZ25hbCxcIm9wdGlvbnMuc2lnbmFsXCIpO2NvbnN0IHQ9W107Zm9yIGF3YWl0KGNvbnN0IHIgb2YgdGhpcyl7dmFyIG47aWYobnVsbCE9ZSYmbnVsbCE9PShuPWUuc2lnbmFsKSYmdm9pZCAwIT09biYmbi5hYm9ydGVkKXRocm93IG5ldyBzKHZvaWQgMCx7Y2F1c2U6ZS5zaWduYWwucmVhc29ufSk7Qyh0LHIpfXJldHVybiB0fSxzb21lOk0sZmluZDphc3luYyBmdW5jdGlvbihlLHQpe2ZvciBhd2FpdChjb25zdCBuIG9mIGsuY2FsbCh0aGlzLGUsdCkpcmV0dXJuIG59fX0sNDY3OihlLHQsbik9Pntjb25zdHtPYmplY3RTZXRQcm90b3R5cGVPZjpyfT1uKDE5MSk7ZS5leHBvcnRzPWk7Y29uc3Qgbz1uKDIxMCk7ZnVuY3Rpb24gaShlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBpKSlyZXR1cm4gbmV3IGkoZSk7by5jYWxsKHRoaXMsZSl9cihpLnByb3RvdHlwZSxvLnByb3RvdHlwZSkscihpLG8pLGkucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oZSx0LG4pe24obnVsbCxlKX19LDc1NDooZSx0LG4pPT57Y29uc3Qgcj1uKDUzMykse0FycmF5SXNBcnJheTpvLFByb21pc2U6aSxTeW1ib2xBc3luY0l0ZXJhdG9yOmF9PW4oMTkxKSxsPW4oODYpLHtvbmNlOnN9PW4oNzc1KSxjPW4oMjMwKSx1PW4oMTgyKSx7YWdncmVnYXRlVHdvRXJyb3JzOmYsY29kZXM6e0VSUl9JTlZBTElEX0FSR19UWVBFOmQsRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFOnAsRVJSX01JU1NJTkdfQVJHUzpoLEVSUl9TVFJFQU1fREVTVFJPWUVEOmcsRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U6dn0sQWJvcnRFcnJvcjptfT1uKDE0MSkse3ZhbGlkYXRlRnVuY3Rpb246Qyx2YWxpZGF0ZUFib3J0U2lnbmFsOnl9PW4oOTA0KSx7aXNJdGVyYWJsZTp3LGlzUmVhZGFibGU6Yixpc1JlYWRhYmxlTm9kZVN0cmVhbTp4LGlzTm9kZVN0cmVhbTpfLGlzVHJhbnNmb3JtU3RyZWFtOk8saXNXZWJTdHJlYW06TCxpc1JlYWRhYmxlU3RyZWFtOkUsaXNSZWFkYWJsZUVuZGVkOlN9PW4oMTMyKSxqPWdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyfHxuKDg3NikuQWJvcnRDb250cm9sbGVyO2xldCBNLGs7ZnVuY3Rpb24gUihlLHQsbil7bGV0IHI9ITE7cmV0dXJuIGUub24oXCJjbG9zZVwiLCgoKT0+e3I9ITB9KSkse2Rlc3Ryb3k6dD0+e3J8fChyPSEwLGMuZGVzdHJveWVyKGUsdHx8bmV3IGcoXCJwaXBlXCIpKSl9LGNsZWFudXA6bChlLHtyZWFkYWJsZTp0LHdyaXRhYmxlOm59LChlPT57cj0hZX0pKX19ZnVuY3Rpb24gUChlKXtpZih3KGUpKXJldHVybiBlO2lmKHgoZSkpcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKihlKXtrfHwoaz1uKDg1OCkpLHlpZWxkKmsucHJvdG90eXBlW2FdLmNhbGwoZSl9KGUpO3Rocm93IG5ldyBkKFwidmFsXCIsW1wiUmVhZGFibGVcIixcIkl0ZXJhYmxlXCIsXCJBc3luY0l0ZXJhYmxlXCJdLGUpfWFzeW5jIGZ1bmN0aW9uIEkoZSx0LG4se2VuZDpyfSl7bGV0IG8sYT1udWxsO2NvbnN0IHM9ZT0+e2lmKGUmJihvPWUpLGEpe2NvbnN0IGU9YTthPW51bGwsZSgpfX0sYz0oKT0+bmV3IGkoKChlLHQpPT57bz90KG8pOmE9KCk9PntvP3Qobyk6ZSgpfX0pKTt0Lm9uKFwiZHJhaW5cIixzKTtjb25zdCB1PWwodCx7cmVhZGFibGU6ITF9LHMpO3RyeXt0LndyaXRhYmxlTmVlZERyYWluJiZhd2FpdCBjKCk7Zm9yIGF3YWl0KGNvbnN0IG4gb2YgZSl0LndyaXRlKG4pfHxhd2FpdCBjKCk7ciYmdC5lbmQoKSxhd2FpdCBjKCksbigpfWNhdGNoKGUpe24obyE9PWU/ZihvLGUpOmUpfWZpbmFsbHl7dSgpLHQub2ZmKFwiZHJhaW5cIixzKX19YXN5bmMgZnVuY3Rpb24gQShlLHQsbix7ZW5kOnJ9KXtPKHQpJiYodD10LndyaXRhYmxlKTtjb25zdCBvPXQuZ2V0V3JpdGVyKCk7dHJ5e2ZvciBhd2FpdChjb25zdCB0IG9mIGUpYXdhaXQgby5yZWFkeSxvLndyaXRlKHQpLmNhdGNoKCgoKT0+e30pKTthd2FpdCBvLnJlYWR5LHImJmF3YWl0IG8uY2xvc2UoKSxuKCl9Y2F0Y2goZSl7dHJ5e2F3YWl0IG8uYWJvcnQoZSksbihlKX1jYXRjaChlKXtuKGUpfX19ZnVuY3Rpb24gVChlLHQsaSl7aWYoMT09PWUubGVuZ3RoJiZvKGVbMF0pJiYoZT1lWzBdKSxlLmxlbmd0aDwyKXRocm93IG5ldyBoKFwic3RyZWFtc1wiKTtjb25zdCBhPW5ldyBqLGw9YS5zaWduYWwscz1udWxsPT1pP3ZvaWQgMDppLnNpZ25hbCxjPVtdO2Z1bmN0aW9uIGYoKXtCKG5ldyBtKX1sZXQgZyx2O3kocyxcIm9wdGlvbnMuc2lnbmFsXCIpLG51bGw9PXN8fHMuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsZik7Y29uc3QgQz1bXTtsZXQgUyxrPTA7ZnVuY3Rpb24gVChlKXtCKGUsMD09LS1rKX1mdW5jdGlvbiBCKGUsbil7aWYoIWV8fGcmJlwiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0VcIiE9PWcuY29kZXx8KGc9ZSksZ3x8bil7Zm9yKDtDLmxlbmd0aDspQy5zaGlmdCgpKGcpO251bGw9PXN8fHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsZiksYS5hYm9ydCgpLG4mJihnfHxjLmZvckVhY2goKGU9PmUoKSkpLHIubmV4dFRpY2sodCxnLHYpKX19Zm9yKGxldCBaPTA7WjxlLmxlbmd0aDtaKyspe2NvbnN0ICQ9ZVtaXSxOPVo8ZS5sZW5ndGgtMSxGPVo+MCxVPU58fCExIT09KG51bGw9PWk/dm9pZCAwOmkuZW5kKSxXPVo9PT1lLmxlbmd0aC0xO2lmKF8oJCkpe2lmKFUpe2NvbnN0e2Rlc3Ryb3k6RyxjbGVhbnVwOnF9PVIoJCxOLEYpO0MucHVzaChHKSxiKCQpJiZXJiZjLnB1c2gocSl9ZnVuY3Rpb24geihlKXtlJiZcIkFib3J0RXJyb3JcIiE9PWUubmFtZSYmXCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRVwiIT09ZS5jb2RlJiZUKGUpfSQub24oXCJlcnJvclwiLHopLGIoJCkmJlcmJmMucHVzaCgoKCk9PnskLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIix6KX0pKX1pZigwPT09WilpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiAkKXtpZihTPSQoe3NpZ25hbDpsfSksIXcoUykpdGhyb3cgbmV3IHAoXCJJdGVyYWJsZSwgQXN5bmNJdGVyYWJsZSBvciBTdHJlYW1cIixcInNvdXJjZVwiLFMpfWVsc2UgUz13KCQpfHx4KCQpfHxPKCQpPyQ6dS5mcm9tKCQpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgJCl7dmFyIFY7aWYoUz1PKFMpP1AobnVsbD09PShWPVMpfHx2b2lkIDA9PT1WP3ZvaWQgMDpWLnJlYWRhYmxlKTpQKFMpLFM9JChTLHtzaWduYWw6bH0pLE4pe2lmKCF3KFMsITApKXRocm93IG5ldyBwKFwiQXN5bmNJdGVyYWJsZVwiLGB0cmFuc2Zvcm1bJHtaLTF9XWAsUyl9ZWxzZXt2YXIgRDtNfHwoTT1uKDQ2NykpO2NvbnN0IFk9bmV3IE0oe29iamVjdE1vZGU6ITB9KSxLPW51bGw9PT0oRD1TKXx8dm9pZCAwPT09RD92b2lkIDA6RC50aGVuO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIEspaysrLEsuY2FsbChTLChlPT57dj1lLG51bGwhPWUmJlkud3JpdGUoZSksVSYmWS5lbmQoKSxyLm5leHRUaWNrKFQpfSksKGU9PntZLmRlc3Ryb3koZSksci5uZXh0VGljayhULGUpfSkpO2Vsc2UgaWYodyhTLCEwKSlrKyssSShTLFksVCx7ZW5kOlV9KTtlbHNle2lmKCFFKFMpJiYhTyhTKSl0aHJvdyBuZXcgcChcIkFzeW5jSXRlcmFibGUgb3IgUHJvbWlzZVwiLFwiZGVzdGluYXRpb25cIixTKTt7Y29uc3QgUT1TLnJlYWRhYmxlfHxTO2srKyxJKFEsWSxULHtlbmQ6VX0pfX1TPVk7Y29uc3R7ZGVzdHJveTpYLGNsZWFudXA6Sn09UihTLCExLCEwKTtDLnB1c2goWCksVyYmYy5wdXNoKEopfX1lbHNlIGlmKF8oJCkpe2lmKHgoUykpe2srPTI7Y29uc3QgZWU9SChTLCQsVCx7ZW5kOlV9KTtiKCQpJiZXJiZjLnB1c2goZWUpfWVsc2UgaWYoTyhTKXx8RShTKSl7Y29uc3QgdGU9Uy5yZWFkYWJsZXx8UztrKyssSSh0ZSwkLFQse2VuZDpVfSl9ZWxzZXtpZighdyhTKSl0aHJvdyBuZXcgZChcInZhbFwiLFtcIlJlYWRhYmxlXCIsXCJJdGVyYWJsZVwiLFwiQXN5bmNJdGVyYWJsZVwiLFwiUmVhZGFibGVTdHJlYW1cIixcIlRyYW5zZm9ybVN0cmVhbVwiXSxTKTtrKyssSShTLCQsVCx7ZW5kOlV9KX1TPSR9ZWxzZSBpZihMKCQpKXtpZih4KFMpKWsrKyxBKFAoUyksJCxULHtlbmQ6VX0pO2Vsc2UgaWYoRShTKXx8dyhTKSlrKyssQShTLCQsVCx7ZW5kOlV9KTtlbHNle2lmKCFPKFMpKXRocm93IG5ldyBkKFwidmFsXCIsW1wiUmVhZGFibGVcIixcIkl0ZXJhYmxlXCIsXCJBc3luY0l0ZXJhYmxlXCIsXCJSZWFkYWJsZVN0cmVhbVwiLFwiVHJhbnNmb3JtU3RyZWFtXCJdLFMpO2srKyxBKFMucmVhZGFibGUsJCxULHtlbmQ6VX0pfVM9JH1lbHNlIFM9dS5mcm9tKCQpfXJldHVybihudWxsIT1sJiZsLmFib3J0ZWR8fG51bGwhPXMmJnMuYWJvcnRlZCkmJnIubmV4dFRpY2soZiksU31mdW5jdGlvbiBIKGUsdCxuLHtlbmQ6b30pe2xldCBpPSExO2lmKHQub24oXCJjbG9zZVwiLCgoKT0+e2l8fG4obmV3IHYpfSkpLGUucGlwZSh0LHtlbmQ6ITF9KSxvKXtmdW5jdGlvbiBhKCl7aT0hMCx0LmVuZCgpfVMoZSk/ci5uZXh0VGljayhhKTplLm9uY2UoXCJlbmRcIixhKX1lbHNlIG4oKTtyZXR1cm4gbChlLHtyZWFkYWJsZTohMCx3cml0YWJsZTohMX0sKHQ9Pntjb25zdCByPWUuX3JlYWRhYmxlU3RhdGU7dCYmXCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRVwiPT09dC5jb2RlJiZyJiZyLmVuZGVkJiYhci5lcnJvcmVkJiYhci5lcnJvckVtaXR0ZWQ/ZS5vbmNlKFwiZW5kXCIsbikub25jZShcImVycm9yXCIsbik6bih0KX0pKSxsKHQse3JlYWRhYmxlOiExLHdyaXRhYmxlOiEwfSxuKX1lLmV4cG9ydHM9e3BpcGVsaW5lSW1wbDpULHBpcGVsaW5lOmZ1bmN0aW9uKC4uLmUpe3JldHVybiBUKGUscyhmdW5jdGlvbihlKXtyZXR1cm4gQyhlW2UubGVuZ3RoLTFdLFwic3RyZWFtc1tzdHJlYW0ubGVuZ3RoIC0gMV1cIiksZS5wb3AoKX0oZSkpKX19fSw4NTg6KGUsdCxuKT0+e2NvbnN0IHI9big1MzMpLHtBcnJheVByb3RvdHlwZUluZGV4T2Y6byxOdW1iZXJJc0ludGVnZXI6aSxOdW1iZXJJc05hTjphLE51bWJlclBhcnNlSW50OmwsT2JqZWN0RGVmaW5lUHJvcGVydGllczpzLE9iamVjdEtleXM6YyxPYmplY3RTZXRQcm90b3R5cGVPZjp1LFByb21pc2U6ZixTYWZlU2V0OmQsU3ltYm9sQXN5bmNJdGVyYXRvcjpwLFN5bWJvbDpofT1uKDE5MSk7ZS5leHBvcnRzPUQsRC5SZWFkYWJsZVN0YXRlPVY7Y29uc3R7RXZlbnRFbWl0dGVyOmd9PW4oNDY1KSx7U3RyZWFtOnYscHJlcGVuZExpc3RlbmVyOm19PW4oMjAwKSx7QnVmZmVyOkN9PW4oNDg1KSx7YWRkQWJvcnRTaWduYWw6eX09bigzNzQpLHc9big4Nik7bGV0IGI9big3NzUpLmRlYnVnbG9nKFwic3RyZWFtXCIsKGU9PntiPWV9KSk7Y29uc3QgeD1uKDYxNiksXz1uKDIzMCkse2dldEhpZ2hXYXRlck1hcms6TyxnZXREZWZhdWx0SGlnaFdhdGVyTWFyazpMfT1uKDQ5OCkse2FnZ3JlZ2F0ZVR3b0Vycm9yczpFLGNvZGVzOntFUlJfSU5WQUxJRF9BUkdfVFlQRTpTLEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEOmosRVJSX09VVF9PRl9SQU5HRTpNLEVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0Y6ayxFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UOlJ9fT1uKDE0MSkse3ZhbGlkYXRlT2JqZWN0OlB9PW4oOTA0KSxJPWgoXCJrUGF1c2VkXCIpLHtTdHJpbmdEZWNvZGVyOkF9PW4oNDY0KSxUPW4oOTEzKTt1KEQucHJvdG90eXBlLHYucHJvdG90eXBlKSx1KEQsdik7Y29uc3QgSD0oKT0+e30se2Vycm9yT3JEZXN0cm95OkJ9PV87ZnVuY3Rpb24gVihlLHQscil7XCJib29sZWFuXCIhPXR5cGVvZiByJiYocj10IGluc3RhbmNlb2YgbigxODIpKSx0aGlzLm9iamVjdE1vZGU9ISghZXx8IWUub2JqZWN0TW9kZSksciYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEoIWV8fCFlLnJlYWRhYmxlT2JqZWN0TW9kZSkpLHRoaXMuaGlnaFdhdGVyTWFyaz1lP08odGhpcyxlLFwicmVhZGFibGVIaWdoV2F0ZXJNYXJrXCIscik6TCghMSksdGhpcy5idWZmZXI9bmV3IHgsdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPVtdLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLmNvbnN0cnVjdGVkPSEwLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXNbSV09bnVsbCx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmVtaXRDbG9zZT0hZXx8ITEhPT1lLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSFlfHwhMSE9PWUuYXV0b0Rlc3Ryb3ksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5lcnJvcmVkPW51bGwsdGhpcy5jbG9zZWQ9ITEsdGhpcy5jbG9zZUVtaXR0ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9ZSYmZS5kZWZhdWx0RW5jb2Rpbmd8fFwidXRmOFwiLHRoaXMuYXdhaXREcmFpbldyaXRlcnM9bnVsbCx0aGlzLm11bHRpQXdhaXREcmFpbj0hMSx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGF0YUVtaXR0ZWQ9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLGUmJmUuZW5jb2RpbmcmJih0aGlzLmRlY29kZXI9bmV3IEEoZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1lLmVuY29kaW5nKX1mdW5jdGlvbiBEKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEQpKXJldHVybiBuZXcgRChlKTtjb25zdCB0PXRoaXMgaW5zdGFuY2VvZiBuKDE4Mik7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgVihlLHRoaXMsdCksZSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUucmVhZCYmKHRoaXMuX3JlYWQ9ZS5yZWFkKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PWUuZGVzdHJveSksXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jb25zdHJ1Y3QmJih0aGlzLl9jb25zdHJ1Y3Q9ZS5jb25zdHJ1Y3QpLGUuc2lnbmFsJiYhdCYmeShlLnNpZ25hbCx0aGlzKSksdi5jYWxsKHRoaXMsZSksXy5jb25zdHJ1Y3QodGhpcywoKCk9Pnt0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZSYmVyh0aGlzLHRoaXMuX3JlYWRhYmxlU3RhdGUpfSkpfWZ1bmN0aW9uIFooZSx0LG4scil7YihcInJlYWRhYmxlQWRkQ2h1bmtcIix0KTtjb25zdCBvPWUuX3JlYWRhYmxlU3RhdGU7bGV0IGk7aWYoby5vYmplY3RNb2RlfHwoXCJzdHJpbmdcIj09dHlwZW9mIHQ/KG49bnx8by5kZWZhdWx0RW5jb2Rpbmcsby5lbmNvZGluZyE9PW4mJihyJiZvLmVuY29kaW5nP3Q9Qy5mcm9tKHQsbikudG9TdHJpbmcoby5lbmNvZGluZyk6KHQ9Qy5mcm9tKHQsbiksbj1cIlwiKSkpOnQgaW5zdGFuY2VvZiBDP249XCJcIjp2Ll9pc1VpbnQ4QXJyYXkodCk/KHQ9di5fdWludDhBcnJheVRvQnVmZmVyKHQpLG49XCJcIik6bnVsbCE9dCYmKGk9bmV3IFMoXCJjaHVua1wiLFtcInN0cmluZ1wiLFwiQnVmZmVyXCIsXCJVaW50OEFycmF5XCJdLHQpKSksaSlCKGUsaSk7ZWxzZSBpZihudWxsPT09dClvLnJlYWRpbmc9ITEsZnVuY3Rpb24oZSx0KXtpZihiKFwib25Fb2ZDaHVua1wiKSwhdC5lbmRlZCl7aWYodC5kZWNvZGVyKXtjb25zdCBlPXQuZGVjb2Rlci5lbmQoKTtlJiZlLmxlbmd0aCYmKHQuYnVmZmVyLnB1c2goZSksdC5sZW5ndGgrPXQub2JqZWN0TW9kZT8xOmUubGVuZ3RoKX10LmVuZGVkPSEwLHQuc3luYz9GKGUpOih0Lm5lZWRSZWFkYWJsZT0hMSx0LmVtaXR0ZWRSZWFkYWJsZT0hMCxVKGUpKX19KGUsbyk7ZWxzZSBpZihvLm9iamVjdE1vZGV8fHQmJnQubGVuZ3RoPjApaWYocilpZihvLmVuZEVtaXR0ZWQpQihlLG5ldyBSKTtlbHNle2lmKG8uZGVzdHJveWVkfHxvLmVycm9yZWQpcmV0dXJuITE7JChlLG8sdCwhMCl9ZWxzZSBpZihvLmVuZGVkKUIoZSxuZXcgayk7ZWxzZXtpZihvLmRlc3Ryb3llZHx8by5lcnJvcmVkKXJldHVybiExO28ucmVhZGluZz0hMSxvLmRlY29kZXImJiFuPyh0PW8uZGVjb2Rlci53cml0ZSh0KSxvLm9iamVjdE1vZGV8fDAhPT10Lmxlbmd0aD8kKGUsbyx0LCExKTpXKGUsbykpOiQoZSxvLHQsITEpfWVsc2Ugcnx8KG8ucmVhZGluZz0hMSxXKGUsbykpO3JldHVybiFvLmVuZGVkJiYoby5sZW5ndGg8by5oaWdoV2F0ZXJNYXJrfHwwPT09by5sZW5ndGgpfWZ1bmN0aW9uICQoZSx0LG4scil7dC5mbG93aW5nJiYwPT09dC5sZW5ndGgmJiF0LnN5bmMmJmUubGlzdGVuZXJDb3VudChcImRhdGFcIik+MD8odC5tdWx0aUF3YWl0RHJhaW4/dC5hd2FpdERyYWluV3JpdGVycy5jbGVhcigpOnQuYXdhaXREcmFpbldyaXRlcnM9bnVsbCx0LmRhdGFFbWl0dGVkPSEwLGUuZW1pdChcImRhdGFcIixuKSk6KHQubGVuZ3RoKz10Lm9iamVjdE1vZGU/MTpuLmxlbmd0aCxyP3QuYnVmZmVyLnVuc2hpZnQobik6dC5idWZmZXIucHVzaChuKSx0Lm5lZWRSZWFkYWJsZSYmRihlKSksVyhlLHQpfWZ1bmN0aW9uIE4oZSx0KXtyZXR1cm4gZTw9MHx8MD09PXQubGVuZ3RoJiZ0LmVuZGVkPzA6dC5vYmplY3RNb2RlPzE6YShlKT90LmZsb3dpbmcmJnQubGVuZ3RoP3QuYnVmZmVyLmZpcnN0KCkubGVuZ3RoOnQubGVuZ3RoOmU8PXQubGVuZ3RoP2U6dC5lbmRlZD90Lmxlbmd0aDowfWZ1bmN0aW9uIEYoZSl7Y29uc3QgdD1lLl9yZWFkYWJsZVN0YXRlO2IoXCJlbWl0UmVhZGFibGVcIix0Lm5lZWRSZWFkYWJsZSx0LmVtaXR0ZWRSZWFkYWJsZSksdC5uZWVkUmVhZGFibGU9ITEsdC5lbWl0dGVkUmVhZGFibGV8fChiKFwiZW1pdFJlYWRhYmxlXCIsdC5mbG93aW5nKSx0LmVtaXR0ZWRSZWFkYWJsZT0hMCxyLm5leHRUaWNrKFUsZSkpfWZ1bmN0aW9uIFUoZSl7Y29uc3QgdD1lLl9yZWFkYWJsZVN0YXRlO2IoXCJlbWl0UmVhZGFibGVfXCIsdC5kZXN0cm95ZWQsdC5sZW5ndGgsdC5lbmRlZCksdC5kZXN0cm95ZWR8fHQuZXJyb3JlZHx8IXQubGVuZ3RoJiYhdC5lbmRlZHx8KGUuZW1pdChcInJlYWRhYmxlXCIpLHQuZW1pdHRlZFJlYWRhYmxlPSExKSx0Lm5lZWRSZWFkYWJsZT0hdC5mbG93aW5nJiYhdC5lbmRlZCYmdC5sZW5ndGg8PXQuaGlnaFdhdGVyTWFyayxLKGUpfWZ1bmN0aW9uIFcoZSx0KXshdC5yZWFkaW5nTW9yZSYmdC5jb25zdHJ1Y3RlZCYmKHQucmVhZGluZ01vcmU9ITAsci5uZXh0VGljayh6LGUsdCkpfWZ1bmN0aW9uIHooZSx0KXtmb3IoOyF0LnJlYWRpbmcmJiF0LmVuZGVkJiYodC5sZW5ndGg8dC5oaWdoV2F0ZXJNYXJrfHx0LmZsb3dpbmcmJjA9PT10Lmxlbmd0aCk7KXtjb25zdCBuPXQubGVuZ3RoO2lmKGIoXCJtYXliZVJlYWRNb3JlIHJlYWQgMFwiKSxlLnJlYWQoMCksbj09PXQubGVuZ3RoKWJyZWFrfXQucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gRyhlKXtjb25zdCB0PWUuX3JlYWRhYmxlU3RhdGU7dC5yZWFkYWJsZUxpc3RlbmluZz1lLmxpc3RlbmVyQ291bnQoXCJyZWFkYWJsZVwiKT4wLHQucmVzdW1lU2NoZWR1bGVkJiYhMT09PXRbSV0/dC5mbG93aW5nPSEwOmUubGlzdGVuZXJDb3VudChcImRhdGFcIik+MD9lLnJlc3VtZSgpOnQucmVhZGFibGVMaXN0ZW5pbmd8fCh0LmZsb3dpbmc9bnVsbCl9ZnVuY3Rpb24gcShlKXtiKFwicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwXCIpLGUucmVhZCgwKX1mdW5jdGlvbiBZKGUsdCl7YihcInJlc3VtZVwiLHQucmVhZGluZyksdC5yZWFkaW5nfHxlLnJlYWQoMCksdC5yZXN1bWVTY2hlZHVsZWQ9ITEsZS5lbWl0KFwicmVzdW1lXCIpLEsoZSksdC5mbG93aW5nJiYhdC5yZWFkaW5nJiZlLnJlYWQoMCl9ZnVuY3Rpb24gSyhlKXtjb25zdCB0PWUuX3JlYWRhYmxlU3RhdGU7Zm9yKGIoXCJmbG93XCIsdC5mbG93aW5nKTt0LmZsb3dpbmcmJm51bGwhPT1lLnJlYWQoKTspO31mdW5jdGlvbiBYKGUsdCl7XCJmdW5jdGlvblwiIT10eXBlb2YgZS5yZWFkJiYoZT1ELndyYXAoZSx7b2JqZWN0TW9kZTohMH0pKTtjb25zdCBuPWFzeW5jIGZ1bmN0aW9uKihlLHQpe2xldCBuLHI9SDtmdW5jdGlvbiBvKHQpe3RoaXM9PT1lPyhyKCkscj1IKTpyPXR9ZS5vbihcInJlYWRhYmxlXCIsbyk7Y29uc3QgaT13KGUse3dyaXRhYmxlOiExfSwoZT0+e249ZT9FKG4sZSk6bnVsbCxyKCkscj1IfSkpO3RyeXtmb3IoOzspe2NvbnN0IHQ9ZS5kZXN0cm95ZWQ/bnVsbDplLnJlYWQoKTtpZihudWxsIT09dCl5aWVsZCB0O2Vsc2V7aWYobil0aHJvdyBuO2lmKG51bGw9PT1uKXJldHVybjthd2FpdCBuZXcgZihvKX19fWNhdGNoKGUpe3Rocm93IG49RShuLGUpLG59ZmluYWxseXshbiYmITE9PT0obnVsbD09dD92b2lkIDA6dC5kZXN0cm95T25SZXR1cm4pfHx2b2lkIDAhPT1uJiYhZS5fcmVhZGFibGVTdGF0ZS5hdXRvRGVzdHJveT8oZS5vZmYoXCJyZWFkYWJsZVwiLG8pLGkoKSk6Xy5kZXN0cm95ZXIoZSxudWxsKX19KGUsdCk7cmV0dXJuIG4uc3RyZWFtPWUsbn1mdW5jdGlvbiBKKGUsdCl7aWYoMD09PXQubGVuZ3RoKXJldHVybiBudWxsO2xldCBuO3JldHVybiB0Lm9iamVjdE1vZGU/bj10LmJ1ZmZlci5zaGlmdCgpOiFlfHxlPj10Lmxlbmd0aD8obj10LmRlY29kZXI/dC5idWZmZXIuam9pbihcIlwiKToxPT09dC5idWZmZXIubGVuZ3RoP3QuYnVmZmVyLmZpcnN0KCk6dC5idWZmZXIuY29uY2F0KHQubGVuZ3RoKSx0LmJ1ZmZlci5jbGVhcigpKTpuPXQuYnVmZmVyLmNvbnN1bWUoZSx0LmRlY29kZXIpLG59ZnVuY3Rpb24gUShlKXtjb25zdCB0PWUuX3JlYWRhYmxlU3RhdGU7YihcImVuZFJlYWRhYmxlXCIsdC5lbmRFbWl0dGVkKSx0LmVuZEVtaXR0ZWR8fCh0LmVuZGVkPSEwLHIubmV4dFRpY2soZWUsdCxlKSl9ZnVuY3Rpb24gZWUoZSx0KXtpZihiKFwiZW5kUmVhZGFibGVOVFwiLGUuZW5kRW1pdHRlZCxlLmxlbmd0aCksIWUuZXJyb3JlZCYmIWUuY2xvc2VFbWl0dGVkJiYhZS5lbmRFbWl0dGVkJiYwPT09ZS5sZW5ndGgpaWYoZS5lbmRFbWl0dGVkPSEwLHQuZW1pdChcImVuZFwiKSx0LndyaXRhYmxlJiYhMT09PXQuYWxsb3dIYWxmT3BlbilyLm5leHRUaWNrKHRlLHQpO2Vsc2UgaWYoZS5hdXRvRGVzdHJveSl7Y29uc3QgZT10Ll93cml0YWJsZVN0YXRlOyghZXx8ZS5hdXRvRGVzdHJveSYmKGUuZmluaXNoZWR8fCExPT09ZS53cml0YWJsZSkpJiZ0LmRlc3Ryb3koKX19ZnVuY3Rpb24gdGUoZSl7ZS53cml0YWJsZSYmIWUud3JpdGFibGVFbmRlZCYmIWUuZGVzdHJveWVkJiZlLmVuZCgpfWxldCBuZTtmdW5jdGlvbiByZSgpe3JldHVybiB2b2lkIDA9PT1uZSYmKG5lPXt9KSxuZX1ELnByb3RvdHlwZS5kZXN0cm95PV8uZGVzdHJveSxELnByb3RvdHlwZS5fdW5kZXN0cm95PV8udW5kZXN0cm95LEQucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGUsdCl7dChlKX0sRC5wcm90b3R5cGVbZy5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sXT1mdW5jdGlvbihlKXt0aGlzLmRlc3Ryb3koZSl9LEQucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gWih0aGlzLGUsdCwhMSl9LEQucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gWih0aGlzLGUsdCwhMCl9LEQucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiEwPT09ZVtJXXx8ITE9PT1lLmZsb3dpbmd9LEQucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IEEoZSk7dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPXQsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz10aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIuZW5jb2Rpbmc7Y29uc3Qgbj10aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcjtsZXQgcj1cIlwiO2Zvcihjb25zdCBlIG9mIG4pcis9dC53cml0ZShlKTtyZXR1cm4gbi5jbGVhcigpLFwiXCIhPT1yJiZuLnB1c2gociksdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg9ci5sZW5ndGgsdGhpc30sRC5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihlKXtiKFwicmVhZFwiLGUpLHZvaWQgMD09PWU/ZT1OYU46aShlKXx8KGU9bChlLDEwKSk7Y29uc3QgdD10aGlzLl9yZWFkYWJsZVN0YXRlLG49ZTtpZihlPnQuaGlnaFdhdGVyTWFyayYmKHQuaGlnaFdhdGVyTWFyaz1mdW5jdGlvbihlKXtpZihlPjEwNzM3NDE4MjQpdGhyb3cgbmV3IE0oXCJzaXplXCIsXCI8PSAxR2lCXCIsZSk7cmV0dXJuIGUtLSxlfD1lPj4+MSxlfD1lPj4+MixlfD1lPj4+NCxlfD1lPj4+OCxlfD1lPj4+MTYsKytlfShlKSksMCE9PWUmJih0LmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PWUmJnQubmVlZFJlYWRhYmxlJiYoKDAhPT10LmhpZ2hXYXRlck1hcms/dC5sZW5ndGg+PXQuaGlnaFdhdGVyTWFyazp0Lmxlbmd0aD4wKXx8dC5lbmRlZCkpcmV0dXJuIGIoXCJyZWFkOiBlbWl0UmVhZGFibGVcIix0Lmxlbmd0aCx0LmVuZGVkKSwwPT09dC5sZW5ndGgmJnQuZW5kZWQ/USh0aGlzKTpGKHRoaXMpLG51bGw7aWYoMD09PShlPU4oZSx0KSkmJnQuZW5kZWQpcmV0dXJuIDA9PT10Lmxlbmd0aCYmUSh0aGlzKSxudWxsO2xldCByLG89dC5uZWVkUmVhZGFibGU7aWYoYihcIm5lZWQgcmVhZGFibGVcIixvKSwoMD09PXQubGVuZ3RofHx0Lmxlbmd0aC1lPHQuaGlnaFdhdGVyTWFyaykmJihvPSEwLGIoXCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFya1wiLG8pKSx0LmVuZGVkfHx0LnJlYWRpbmd8fHQuZGVzdHJveWVkfHx0LmVycm9yZWR8fCF0LmNvbnN0cnVjdGVkKW89ITEsYihcInJlYWRpbmcsIGVuZGVkIG9yIGNvbnN0cnVjdGluZ1wiLG8pO2Vsc2UgaWYobyl7YihcImRvIHJlYWRcIiksdC5yZWFkaW5nPSEwLHQuc3luYz0hMCwwPT09dC5sZW5ndGgmJih0Lm5lZWRSZWFkYWJsZT0hMCk7dHJ5e3RoaXMuX3JlYWQodC5oaWdoV2F0ZXJNYXJrKX1jYXRjaChlKXtCKHRoaXMsZSl9dC5zeW5jPSExLHQucmVhZGluZ3x8KGU9TihuLHQpKX1yZXR1cm4gcj1lPjA/SihlLHQpOm51bGwsbnVsbD09PXI/KHQubmVlZFJlYWRhYmxlPXQubGVuZ3RoPD10LmhpZ2hXYXRlck1hcmssZT0wKToodC5sZW5ndGgtPWUsdC5tdWx0aUF3YWl0RHJhaW4/dC5hd2FpdERyYWluV3JpdGVycy5jbGVhcigpOnQuYXdhaXREcmFpbldyaXRlcnM9bnVsbCksMD09PXQubGVuZ3RoJiYodC5lbmRlZHx8KHQubmVlZFJlYWRhYmxlPSEwKSxuIT09ZSYmdC5lbmRlZCYmUSh0aGlzKSksbnVsbD09PXJ8fHQuZXJyb3JFbWl0dGVkfHx0LmNsb3NlRW1pdHRlZHx8KHQuZGF0YUVtaXR0ZWQ9ITAsdGhpcy5lbWl0KFwiZGF0YVwiLHIpKSxyfSxELnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihlKXt0aHJvdyBuZXcgaihcIl9yZWFkKClcIil9LEQucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPXRoaXMsbz10aGlzLl9yZWFkYWJsZVN0YXRlOzE9PT1vLnBpcGVzLmxlbmd0aCYmKG8ubXVsdGlBd2FpdERyYWlufHwoby5tdWx0aUF3YWl0RHJhaW49ITAsby5hd2FpdERyYWluV3JpdGVycz1uZXcgZChvLmF3YWl0RHJhaW5Xcml0ZXJzP1tvLmF3YWl0RHJhaW5Xcml0ZXJzXTpbXSkpKSxvLnBpcGVzLnB1c2goZSksYihcInBpcGUgY291bnQ9JWQgb3B0cz0lalwiLG8ucGlwZXMubGVuZ3RoLHQpO2NvbnN0IGk9dCYmITE9PT10LmVuZHx8ZT09PXIuc3Rkb3V0fHxlPT09ci5zdGRlcnI/ZzphO2Z1bmN0aW9uIGEoKXtiKFwib25lbmRcIiksZS5lbmQoKX1sZXQgbDtvLmVuZEVtaXR0ZWQ/ci5uZXh0VGljayhpKTpuLm9uY2UoXCJlbmRcIixpKSxlLm9uKFwidW5waXBlXCIsKGZ1bmN0aW9uIHQocixpKXtiKFwib251bnBpcGVcIikscj09PW4mJmkmJiExPT09aS5oYXNVbnBpcGVkJiYoaS5oYXNVbnBpcGVkPSEwLGIoXCJjbGVhbnVwXCIpLGUucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLHApLGUucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIixoKSxsJiZlLnJlbW92ZUxpc3RlbmVyKFwiZHJhaW5cIixsKSxlLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixmKSxlLnJlbW92ZUxpc3RlbmVyKFwidW5waXBlXCIsdCksbi5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLGEpLG4ucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixnKSxuLnJlbW92ZUxpc3RlbmVyKFwiZGF0YVwiLHUpLHM9ITAsbCYmby5hd2FpdERyYWluV3JpdGVycyYmKCFlLl93cml0YWJsZVN0YXRlfHxlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbikmJmwoKSl9KSk7bGV0IHM9ITE7ZnVuY3Rpb24gYygpe3N8fCgxPT09by5waXBlcy5sZW5ndGgmJm8ucGlwZXNbMF09PT1lPyhiKFwiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlXCIsMCksby5hd2FpdERyYWluV3JpdGVycz1lLG8ubXVsdGlBd2FpdERyYWluPSExKTpvLnBpcGVzLmxlbmd0aD4xJiZvLnBpcGVzLmluY2x1ZGVzKGUpJiYoYihcImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZVwiLG8uYXdhaXREcmFpbldyaXRlcnMuc2l6ZSksby5hd2FpdERyYWluV3JpdGVycy5hZGQoZSkpLG4ucGF1c2UoKSksbHx8KGw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtjb25zdCBuPWUuX3JlYWRhYmxlU3RhdGU7bi5hd2FpdERyYWluV3JpdGVycz09PXQ/KGIoXCJwaXBlT25EcmFpblwiLDEpLG4uYXdhaXREcmFpbldyaXRlcnM9bnVsbCk6bi5tdWx0aUF3YWl0RHJhaW4mJihiKFwicGlwZU9uRHJhaW5cIixuLmF3YWl0RHJhaW5Xcml0ZXJzLnNpemUpLG4uYXdhaXREcmFpbldyaXRlcnMuZGVsZXRlKHQpKSxuLmF3YWl0RHJhaW5Xcml0ZXJzJiYwIT09bi5hd2FpdERyYWluV3JpdGVycy5zaXplfHwhZS5saXN0ZW5lckNvdW50KFwiZGF0YVwiKXx8ZS5yZXN1bWUoKX19KG4sZSksZS5vbihcImRyYWluXCIsbCkpfWZ1bmN0aW9uIHUodCl7YihcIm9uZGF0YVwiKTtjb25zdCBuPWUud3JpdGUodCk7YihcImRlc3Qud3JpdGVcIixuKSwhMT09PW4mJmMoKX1mdW5jdGlvbiBmKHQpe2lmKGIoXCJvbmVycm9yXCIsdCksZygpLGUucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLGYpLDA9PT1lLmxpc3RlbmVyQ291bnQoXCJlcnJvclwiKSl7Y29uc3Qgbj1lLl93cml0YWJsZVN0YXRlfHxlLl9yZWFkYWJsZVN0YXRlO24mJiFuLmVycm9yRW1pdHRlZD9CKGUsdCk6ZS5lbWl0KFwiZXJyb3JcIix0KX19ZnVuY3Rpb24gcCgpe2UucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIixoKSxnKCl9ZnVuY3Rpb24gaCgpe2IoXCJvbmZpbmlzaFwiKSxlLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixwKSxnKCl9ZnVuY3Rpb24gZygpe2IoXCJ1bnBpcGVcIiksbi51bnBpcGUoZSl9cmV0dXJuIG4ub24oXCJkYXRhXCIsdSksbShlLFwiZXJyb3JcIixmKSxlLm9uY2UoXCJjbG9zZVwiLHApLGUub25jZShcImZpbmlzaFwiLGgpLGUuZW1pdChcInBpcGVcIixuKSwhMD09PWUud3JpdGFibGVOZWVkRHJhaW4/by5mbG93aW5nJiZjKCk6by5mbG93aW5nfHwoYihcInBpcGUgcmVzdW1lXCIpLG4ucmVzdW1lKCkpLGV9LEQucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihlKXtjb25zdCB0PXRoaXMuX3JlYWRhYmxlU3RhdGU7aWYoMD09PXQucGlwZXMubGVuZ3RoKXJldHVybiB0aGlzO2lmKCFlKXtjb25zdCBlPXQucGlwZXM7dC5waXBlcz1bXSx0aGlzLnBhdXNlKCk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5lbWl0KFwidW5waXBlXCIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfWNvbnN0IG49byh0LnBpcGVzLGUpO3JldHVybi0xPT09bnx8KHQucGlwZXMuc3BsaWNlKG4sMSksMD09PXQucGlwZXMubGVuZ3RoJiZ0aGlzLnBhdXNlKCksZS5lbWl0KFwidW5waXBlXCIsdGhpcyx7aGFzVW5waXBlZDohMX0pKSx0aGlzfSxELnByb3RvdHlwZS5vbj1mdW5jdGlvbihlLHQpe2NvbnN0IG49di5wcm90b3R5cGUub24uY2FsbCh0aGlzLGUsdCksbz10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVyblwiZGF0YVwiPT09ZT8oby5yZWFkYWJsZUxpc3RlbmluZz10aGlzLmxpc3RlbmVyQ291bnQoXCJyZWFkYWJsZVwiKT4wLCExIT09by5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpKTpcInJlYWRhYmxlXCI9PT1lJiYoby5lbmRFbWl0dGVkfHxvLnJlYWRhYmxlTGlzdGVuaW5nfHwoby5yZWFkYWJsZUxpc3RlbmluZz1vLm5lZWRSZWFkYWJsZT0hMCxvLmZsb3dpbmc9ITEsby5lbWl0dGVkUmVhZGFibGU9ITEsYihcIm9uIHJlYWRhYmxlXCIsby5sZW5ndGgsby5yZWFkaW5nKSxvLmxlbmd0aD9GKHRoaXMpOm8ucmVhZGluZ3x8ci5uZXh0VGljayhxLHRoaXMpKSksbn0sRC5wcm90b3R5cGUuYWRkTGlzdGVuZXI9RC5wcm90b3R5cGUub24sRC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPXYucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyxlLHQpO3JldHVyblwicmVhZGFibGVcIj09PWUmJnIubmV4dFRpY2soRyx0aGlzKSxufSxELnByb3RvdHlwZS5vZmY9RC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIsRC5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9di5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm5cInJlYWRhYmxlXCIhPT1lJiZ2b2lkIDAhPT1lfHxyLm5leHRUaWNrKEcsdGhpcyksdH0sRC5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBlLmZsb3dpbmd8fChiKFwicmVzdW1lXCIpLGUuZmxvd2luZz0hZS5yZWFkYWJsZUxpc3RlbmluZyxmdW5jdGlvbihlLHQpe3QucmVzdW1lU2NoZWR1bGVkfHwodC5yZXN1bWVTY2hlZHVsZWQ9ITAsci5uZXh0VGljayhZLGUsdCkpfSh0aGlzLGUpKSxlW0ldPSExLHRoaXN9LEQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIGIoXCJjYWxsIHBhdXNlIGZsb3dpbmc9JWpcIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoYihcInBhdXNlXCIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoXCJwYXVzZVwiKSksdGhpcy5fcmVhZGFibGVTdGF0ZVtJXT0hMCx0aGlzfSxELnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKGUpe2xldCB0PSExO2Uub24oXCJkYXRhXCIsKG49PnshdGhpcy5wdXNoKG4pJiZlLnBhdXNlJiYodD0hMCxlLnBhdXNlKCkpfSkpLGUub24oXCJlbmRcIiwoKCk9Pnt0aGlzLnB1c2gobnVsbCl9KSksZS5vbihcImVycm9yXCIsKGU9PntCKHRoaXMsZSl9KSksZS5vbihcImNsb3NlXCIsKCgpPT57dGhpcy5kZXN0cm95KCl9KSksZS5vbihcImRlc3Ryb3lcIiwoKCk9Pnt0aGlzLmRlc3Ryb3koKX0pKSx0aGlzLl9yZWFkPSgpPT57dCYmZS5yZXN1bWUmJih0PSExLGUucmVzdW1lKCkpfTtjb25zdCBuPWMoZSk7Zm9yKGxldCB0PTE7dDxuLmxlbmd0aDt0Kyspe2NvbnN0IHI9blt0XTt2b2lkIDA9PT10aGlzW3JdJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlW3JdJiYodGhpc1tyXT1lW3JdLmJpbmQoZSkpfXJldHVybiB0aGlzfSxELnByb3RvdHlwZVtwXT1mdW5jdGlvbigpe3JldHVybiBYKHRoaXMpfSxELnByb3RvdHlwZS5pdGVyYXRvcj1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmUChlLFwib3B0aW9uc1wiKSxYKHRoaXMsZSl9LHMoRC5wcm90b3R5cGUse3JlYWRhYmxlOntfX3Byb3RvX186bnVsbCxnZXQoKXtjb25zdCBlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuISghZXx8ITE9PT1lLnJlYWRhYmxlfHxlLmRlc3Ryb3llZHx8ZS5lcnJvckVtaXR0ZWR8fGUuZW5kRW1pdHRlZCl9LHNldChlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkYWJsZT0hIWUpfX0scmVhZGFibGVEaWRSZWFkOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkfX0scmVhZGFibGVBYm9ydGVkOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiEoITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlfHwhdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJiF0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yZWR8fHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCl9fSxyZWFkYWJsZUhpZ2hXYXRlck1hcms6e19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319LHJlYWRhYmxlQnVmZmVyOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcn19LHJlYWRhYmxlRmxvd2luZzp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz1lKX19LHJlYWRhYmxlTGVuZ3RoOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19LHJlYWRhYmxlT2JqZWN0TW9kZTp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4hIXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUub2JqZWN0TW9kZX19LHJlYWRhYmxlRW5jb2Rpbmc6e19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGU/dGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZzpudWxsfX0sZXJyb3JlZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZT90aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQ6bnVsbH19LGNsb3NlZDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuISF0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmNsb3NlZH19LGRlc3Ryb3llZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4hIXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQoZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPWUpfX0scmVhZGFibGVFbmRlZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4hIXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZH19fSkscyhWLnByb3RvdHlwZSx7cGlwZXNDb3VudDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHRoaXMucGlwZXMubGVuZ3RofX0scGF1c2VkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4hMSE9PXRoaXNbSV19LHNldChlKXt0aGlzW0ldPSEhZX19fSksRC5fZnJvbUxpc3Q9SixELmZyb209ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVChELGUsdCl9LEQuZnJvbVdlYj1mdW5jdGlvbihlLHQpe3JldHVybiByZSgpLm5ld1N0cmVhbVJlYWRhYmxlRnJvbVJlYWRhYmxlU3RyZWFtKGUsdCl9LEQudG9XZWI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcmUoKS5uZXdSZWFkYWJsZVN0cmVhbUZyb21TdHJlYW1SZWFkYWJsZShlLHQpfSxELndyYXA9ZnVuY3Rpb24oZSx0KXt2YXIgbixyO3JldHVybiBuZXcgRCh7b2JqZWN0TW9kZTpudWxsPT09KG49bnVsbCE9PShyPWUucmVhZGFibGVPYmplY3RNb2RlKSYmdm9pZCAwIT09cj9yOmUub2JqZWN0TW9kZSl8fHZvaWQgMD09PW58fG4sLi4udCxkZXN0cm95KHQsbil7Xy5kZXN0cm95ZXIoZSx0KSxuKHQpfX0pLndyYXAoZSl9fSw0OTg6KGUsdCxuKT0+e2NvbnN0e01hdGhGbG9vcjpyLE51bWJlcklzSW50ZWdlcjpvfT1uKDE5MSkse0VSUl9JTlZBTElEX0FSR19WQUxVRTppfT1uKDE0MSkuY29kZXM7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZT8xNjoxNjM4NH1lLmV4cG9ydHM9e2dldEhpZ2hXYXRlck1hcms6ZnVuY3Rpb24oZSx0LG4sbCl7Y29uc3Qgcz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGwhPWUuaGlnaFdhdGVyTWFyaz9lLmhpZ2hXYXRlck1hcms6dD9lW25dOm51bGx9KHQsbCxuKTtpZihudWxsIT1zKXtpZighbyhzKXx8czwwKXRocm93IG5ldyBpKGw/YG9wdGlvbnMuJHtufWA6XCJvcHRpb25zLmhpZ2hXYXRlck1hcmtcIixzKTtyZXR1cm4gcihzKX1yZXR1cm4gYShlLm9iamVjdE1vZGUpfSxnZXREZWZhdWx0SGlnaFdhdGVyTWFyazphfX0sMjEwOihlLHQsbik9Pntjb25zdHtPYmplY3RTZXRQcm90b3R5cGVPZjpyLFN5bWJvbDpvfT1uKDE5MSk7ZS5leHBvcnRzPWM7Y29uc3R7RVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQ6aX09bigxNDEpLmNvZGVzLGE9bigxODIpLHtnZXRIaWdoV2F0ZXJNYXJrOmx9PW4oNDk4KTtyKGMucHJvdG90eXBlLGEucHJvdG90eXBlKSxyKGMsYSk7Y29uc3Qgcz1vKFwia0NhbGxiYWNrXCIpO2Z1bmN0aW9uIGMoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgYykpcmV0dXJuIG5ldyBjKGUpO2NvbnN0IHQ9ZT9sKHRoaXMsZSxcInJlYWRhYmxlSGlnaFdhdGVyTWFya1wiLCEwKTpudWxsOzA9PT10JiYoZT17Li4uZSxoaWdoV2F0ZXJNYXJrOm51bGwscmVhZGFibGVIaWdoV2F0ZXJNYXJrOnQsd3JpdGFibGVIaWdoV2F0ZXJNYXJrOmUud3JpdGFibGVIaWdoV2F0ZXJNYXJrfHwwfSksYS5jYWxsKHRoaXMsZSksdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLHRoaXNbc109bnVsbCxlJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09ZS50cmFuc2Zvcm0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZmx1c2gmJih0aGlzLl9mbHVzaD1lLmZsdXNoKSksdGhpcy5vbihcInByZWZpbmlzaFwiLGYpfWZ1bmN0aW9uIHUoZSl7XCJmdW5jdGlvblwiIT10eXBlb2YgdGhpcy5fZmx1c2h8fHRoaXMuZGVzdHJveWVkPyh0aGlzLnB1c2gobnVsbCksZSYmZSgpKTp0aGlzLl9mbHVzaCgoKHQsbik9Pnt0P2U/ZSh0KTp0aGlzLmRlc3Ryb3kodCk6KG51bGwhPW4mJnRoaXMucHVzaChuKSx0aGlzLnB1c2gobnVsbCksZSYmZSgpKX0pKX1mdW5jdGlvbiBmKCl7dGhpcy5fZmluYWwhPT11JiZ1LmNhbGwodGhpcyl9Yy5wcm90b3R5cGUuX2ZpbmFsPXUsYy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihlLHQsbil7dGhyb3cgbmV3IGkoXCJfdHJhbnNmb3JtKClcIil9LGMucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihlLHQsbil7Y29uc3Qgcj10aGlzLl9yZWFkYWJsZVN0YXRlLG89dGhpcy5fd3JpdGFibGVTdGF0ZSxpPXIubGVuZ3RoO3RoaXMuX3RyYW5zZm9ybShlLHQsKChlLHQpPT57ZT9uKGUpOihudWxsIT10JiZ0aGlzLnB1c2godCksby5lbmRlZHx8aT09PXIubGVuZ3RofHxyLmxlbmd0aDxyLmhpZ2hXYXRlck1hcms/bigpOnRoaXNbc109bil9KSl9LGMucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKCl7aWYodGhpc1tzXSl7Y29uc3QgZT10aGlzW3NdO3RoaXNbc109bnVsbCxlKCl9fX0sMTMyOihlLHQsbik9Pntjb25zdHtTeW1ib2w6cixTeW1ib2xBc3luY0l0ZXJhdG9yOm8sU3ltYm9sSXRlcmF0b3I6aSxTeW1ib2xGb3I6YX09bigxOTEpLGw9cihcImtEZXN0cm95ZWRcIikscz1yKFwia0lzRXJyb3JlZFwiKSxjPXIoXCJrSXNSZWFkYWJsZVwiKSx1PXIoXCJrSXNEaXN0dXJiZWRcIiksZj1hKFwibm9kZWpzLndlYnN0cmVhbS5pc0Nsb3NlZFByb21pc2VcIiksZD1hKFwibm9kZWpzLndlYnN0cmVhbS5jb250cm9sbGVyRXJyb3JGdW5jdGlvblwiKTtmdW5jdGlvbiBwKGUsdD0hMSl7dmFyIG47cmV0dXJuISghZXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5waXBlfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLm9ufHx0JiYoXCJmdW5jdGlvblwiIT10eXBlb2YgZS5wYXVzZXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5yZXN1bWUpfHxlLl93cml0YWJsZVN0YXRlJiYhMT09PShudWxsPT09KG49ZS5fcmVhZGFibGVTdGF0ZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4ucmVhZGFibGUpfHxlLl93cml0YWJsZVN0YXRlJiYhZS5fcmVhZGFibGVTdGF0ZSl9ZnVuY3Rpb24gaChlKXt2YXIgdDtyZXR1cm4hKCFlfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLndyaXRlfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLm9ufHxlLl9yZWFkYWJsZVN0YXRlJiYhMT09PShudWxsPT09KHQ9ZS5fd3JpdGFibGVTdGF0ZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQud3JpdGFibGUpKX1mdW5jdGlvbiBnKGUpe3JldHVybiBlJiYoZS5fcmVhZGFibGVTdGF0ZXx8ZS5fd3JpdGFibGVTdGF0ZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZS53cml0ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5vbnx8XCJmdW5jdGlvblwiPT10eXBlb2YgZS5waXBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLm9uKX1mdW5jdGlvbiB2KGUpe3JldHVybiEoIWV8fGcoZSl8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUucGlwZVRocm91Z2h8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUuZ2V0UmVhZGVyfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLmNhbmNlbCl9ZnVuY3Rpb24gbShlKXtyZXR1cm4hKCFlfHxnKGUpfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLmdldFdyaXRlcnx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5hYm9ydCl9ZnVuY3Rpb24gQyhlKXtyZXR1cm4hKCFlfHxnKGUpfHxcIm9iamVjdFwiIT10eXBlb2YgZS5yZWFkYWJsZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUud3JpdGFibGUpfWZ1bmN0aW9uIHkoZSl7aWYoIWcoZSkpcmV0dXJuIG51bGw7Y29uc3QgdD1lLl93cml0YWJsZVN0YXRlLG49ZS5fcmVhZGFibGVTdGF0ZSxyPXR8fG47cmV0dXJuISEoZS5kZXN0cm95ZWR8fGVbbF18fG51bGwhPXImJnIuZGVzdHJveWVkKX1mdW5jdGlvbiB3KGUpe2lmKCFoKGUpKXJldHVybiBudWxsO2lmKCEwPT09ZS53cml0YWJsZUVuZGVkKXJldHVybiEwO2NvbnN0IHQ9ZS5fd3JpdGFibGVTdGF0ZTtyZXR1cm4obnVsbD09dHx8IXQuZXJyb3JlZCkmJihcImJvb2xlYW5cIiE9dHlwZW9mKG51bGw9PXQ/dm9pZCAwOnQuZW5kZWQpP251bGw6dC5lbmRlZCl9ZnVuY3Rpb24gYihlLHQpe2lmKCFwKGUpKXJldHVybiBudWxsO2NvbnN0IG49ZS5fcmVhZGFibGVTdGF0ZTtyZXR1cm4obnVsbD09bnx8IW4uZXJyb3JlZCkmJihcImJvb2xlYW5cIiE9dHlwZW9mKG51bGw9PW4/dm9pZCAwOm4uZW5kRW1pdHRlZCk/bnVsbDohIShuLmVuZEVtaXR0ZWR8fCExPT09dCYmITA9PT1uLmVuZGVkJiYwPT09bi5sZW5ndGgpKX1mdW5jdGlvbiB4KGUpe3JldHVybiBlJiZudWxsIT1lW2NdP2VbY106XCJib29sZWFuXCIhPXR5cGVvZihudWxsPT1lP3ZvaWQgMDplLnJlYWRhYmxlKT9udWxsOiF5KGUpJiZwKGUpJiZlLnJlYWRhYmxlJiYhYihlKX1mdW5jdGlvbiBfKGUpe3JldHVyblwiYm9vbGVhblwiIT10eXBlb2YobnVsbD09ZT92b2lkIDA6ZS53cml0YWJsZSk/bnVsbDoheShlKSYmaChlKSYmZS53cml0YWJsZSYmIXcoZSl9ZnVuY3Rpb24gTyhlKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGUuX2Nsb3NlZCYmXCJib29sZWFuXCI9PXR5cGVvZiBlLl9kZWZhdWx0S2VlcEFsaXZlJiZcImJvb2xlYW5cIj09dHlwZW9mIGUuX3JlbW92ZWRDb25uZWN0aW9uJiZcImJvb2xlYW5cIj09dHlwZW9mIGUuX3JlbW92ZWRDb250TGVufWZ1bmN0aW9uIEwoZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlLl9zZW50MTAwJiZPKGUpfWUuZXhwb3J0cz17a0Rlc3Ryb3llZDpsLGlzRGlzdHVyYmVkOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiEoIWV8fCEobnVsbCE9PSh0PWVbdV0pJiZ2b2lkIDAhPT10P3Q6ZS5yZWFkYWJsZURpZFJlYWR8fGUucmVhZGFibGVBYm9ydGVkKSl9LGtJc0Rpc3R1cmJlZDp1LGlzRXJyb3JlZDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxpLGEsbCxjLHUsZjtyZXR1cm4hKCFlfHwhKG51bGwhPT0odD1udWxsIT09KG49bnVsbCE9PShyPW51bGwhPT0obz1udWxsIT09KGk9bnVsbCE9PShhPWVbc10pJiZ2b2lkIDAhPT1hP2E6ZS5yZWFkYWJsZUVycm9yZWQpJiZ2b2lkIDAhPT1pP2k6ZS53cml0YWJsZUVycm9yZWQpJiZ2b2lkIDAhPT1vP286bnVsbD09PShsPWUuX3JlYWRhYmxlU3RhdGUpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmVycm9yRW1pdHRlZCkmJnZvaWQgMCE9PXI/cjpudWxsPT09KGM9ZS5fd3JpdGFibGVTdGF0ZSl8fHZvaWQgMD09PWM/dm9pZCAwOmMuZXJyb3JFbWl0dGVkKSYmdm9pZCAwIT09bj9uOm51bGw9PT0odT1lLl9yZWFkYWJsZVN0YXRlKXx8dm9pZCAwPT09dT92b2lkIDA6dS5lcnJvcmVkKSYmdm9pZCAwIT09dD90Om51bGw9PT0oZj1lLl93cml0YWJsZVN0YXRlKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5lcnJvcmVkKSl9LGtJc0Vycm9yZWQ6cyxpc1JlYWRhYmxlOngsa0lzUmVhZGFibGU6YyxrSXNDbG9zZWRQcm9taXNlOmYsa0NvbnRyb2xsZXJFcnJvckZ1bmN0aW9uOmQsaXNDbG9zZWQ6ZnVuY3Rpb24oZSl7aWYoIWcoZSkpcmV0dXJuIG51bGw7aWYoXCJib29sZWFuXCI9PXR5cGVvZiBlLmNsb3NlZClyZXR1cm4gZS5jbG9zZWQ7Y29uc3QgdD1lLl93cml0YWJsZVN0YXRlLG49ZS5fcmVhZGFibGVTdGF0ZTtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mKG51bGw9PXQ/dm9pZCAwOnQuY2xvc2VkKXx8XCJib29sZWFuXCI9PXR5cGVvZihudWxsPT1uP3ZvaWQgMDpuLmNsb3NlZCk/KG51bGw9PXQ/dm9pZCAwOnQuY2xvc2VkKXx8KG51bGw9PW4/dm9pZCAwOm4uY2xvc2VkKTpcImJvb2xlYW5cIj09dHlwZW9mIGUuX2Nsb3NlZCYmTyhlKT9lLl9jbG9zZWQ6bnVsbH0saXNEZXN0cm95ZWQ6eSxpc0R1cGxleE5vZGVTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5waXBlfHwhZS5fcmVhZGFibGVTdGF0ZXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5vbnx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS53cml0ZSl9LGlzRmluaXNoZWQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyhlKT8hKCF5KGUpJiYoITEhPT0obnVsbD09dD92b2lkIDA6dC5yZWFkYWJsZSkmJngoZSl8fCExIT09KG51bGw9PXQ/dm9pZCAwOnQud3JpdGFibGUpJiZfKGUpKSk6bnVsbH0saXNJdGVyYWJsZTpmdW5jdGlvbihlLHQpe3JldHVybiBudWxsIT1lJiYoITA9PT10P1wiZnVuY3Rpb25cIj09dHlwZW9mIGVbb106ITE9PT10P1wiZnVuY3Rpb25cIj09dHlwZW9mIGVbaV06XCJmdW5jdGlvblwiPT10eXBlb2YgZVtvXXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZVtpXSl9LGlzUmVhZGFibGVOb2RlU3RyZWFtOnAsaXNSZWFkYWJsZVN0cmVhbTp2LGlzUmVhZGFibGVFbmRlZDpmdW5jdGlvbihlKXtpZighcChlKSlyZXR1cm4gbnVsbDtpZighMD09PWUucmVhZGFibGVFbmRlZClyZXR1cm4hMDtjb25zdCB0PWUuX3JlYWRhYmxlU3RhdGU7cmV0dXJuISghdHx8dC5lcnJvcmVkKSYmKFwiYm9vbGVhblwiIT10eXBlb2YobnVsbD09dD92b2lkIDA6dC5lbmRlZCk/bnVsbDp0LmVuZGVkKX0saXNSZWFkYWJsZUZpbmlzaGVkOmIsaXNSZWFkYWJsZUVycm9yZWQ6ZnVuY3Rpb24oZSl7dmFyIHQsbjtyZXR1cm4gZyhlKT9lLnJlYWRhYmxlRXJyb3JlZD9lLnJlYWRhYmxlRXJyb3JlZDpudWxsIT09KHQ9bnVsbD09PShuPWUuX3JlYWRhYmxlU3RhdGUpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmVycm9yZWQpJiZ2b2lkIDAhPT10P3Q6bnVsbDpudWxsfSxpc05vZGVTdHJlYW06Zyxpc1dlYlN0cmVhbTpmdW5jdGlvbihlKXtyZXR1cm4gdihlKXx8bShlKXx8QyhlKX0saXNXcml0YWJsZTpfLGlzV3JpdGFibGVOb2RlU3RyZWFtOmgsaXNXcml0YWJsZVN0cmVhbTptLGlzV3JpdGFibGVFbmRlZDp3LGlzV3JpdGFibGVGaW5pc2hlZDpmdW5jdGlvbihlLHQpe2lmKCFoKGUpKXJldHVybiBudWxsO2lmKCEwPT09ZS53cml0YWJsZUZpbmlzaGVkKXJldHVybiEwO2NvbnN0IG49ZS5fd3JpdGFibGVTdGF0ZTtyZXR1cm4obnVsbD09bnx8IW4uZXJyb3JlZCkmJihcImJvb2xlYW5cIiE9dHlwZW9mKG51bGw9PW4/dm9pZCAwOm4uZmluaXNoZWQpP251bGw6ISEobi5maW5pc2hlZHx8ITE9PT10JiYhMD09PW4uZW5kZWQmJjA9PT1uLmxlbmd0aCkpfSxpc1dyaXRhYmxlRXJyb3JlZDpmdW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiBnKGUpP2Uud3JpdGFibGVFcnJvcmVkP2Uud3JpdGFibGVFcnJvcmVkOm51bGwhPT0odD1udWxsPT09KG49ZS5fd3JpdGFibGVTdGF0ZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZXJyb3JlZCkmJnZvaWQgMCE9PXQ/dDpudWxsOm51bGx9LGlzU2VydmVyUmVxdWVzdDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGUuX2NvbnN1bWluZyYmXCJib29sZWFuXCI9PXR5cGVvZiBlLl9kdW1wZWQmJnZvaWQgMD09PShudWxsPT09KHQ9ZS5yZXEpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LnVwZ3JhZGVPckNvbm5lY3QpfSxpc1NlcnZlclJlc3BvbnNlOkwsd2lsbEVtaXRDbG9zZTpmdW5jdGlvbihlKXtpZighZyhlKSlyZXR1cm4gbnVsbDtjb25zdCB0PWUuX3dyaXRhYmxlU3RhdGUsbj1lLl9yZWFkYWJsZVN0YXRlLHI9dHx8bjtyZXR1cm4hciYmTChlKXx8ISEociYmci5hdXRvRGVzdHJveSYmci5lbWl0Q2xvc2UmJiExPT09ci5jbG9zZWQpfSxpc1RyYW5zZm9ybVN0cmVhbTpDfX0sMzczOihlLHQsbik9Pntjb25zdCByPW4oNTMzKSx7QXJyYXlQcm90b3R5cGVTbGljZTpvLEVycm9yOmksRnVuY3Rpb25Qcm90b3R5cGVTeW1ib2xIYXNJbnN0YW5jZTphLE9iamVjdERlZmluZVByb3BlcnR5OmwsT2JqZWN0RGVmaW5lUHJvcGVydGllczpzLE9iamVjdFNldFByb3RvdHlwZU9mOmMsU3RyaW5nUHJvdG90eXBlVG9Mb3dlckNhc2U6dSxTeW1ib2w6ZixTeW1ib2xIYXNJbnN0YW5jZTpkfT1uKDE5MSk7ZS5leHBvcnRzPUEsQS5Xcml0YWJsZVN0YXRlPVA7Y29uc3R7RXZlbnRFbWl0dGVyOnB9PW4oNDY1KSxoPW4oMjAwKS5TdHJlYW0se0J1ZmZlcjpnfT1uKDQ4NSksdj1uKDIzMCkse2FkZEFib3J0U2lnbmFsOm19PW4oMzc0KSx7Z2V0SGlnaFdhdGVyTWFyazpDLGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrOnl9PW4oNDk4KSx7RVJSX0lOVkFMSURfQVJHX1RZUEU6dyxFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRDpiLEVSUl9NVUxUSVBMRV9DQUxMQkFDSzp4LEVSUl9TVFJFQU1fQ0FOTk9UX1BJUEU6XyxFUlJfU1RSRUFNX0RFU1RST1lFRDpPLEVSUl9TVFJFQU1fQUxSRUFEWV9GSU5JU0hFRDpMLEVSUl9TVFJFQU1fTlVMTF9WQUxVRVM6RSxFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORDpTLEVSUl9VTktOT1dOX0VOQ09ESU5HOmp9PW4oMTQxKS5jb2Rlcyx7ZXJyb3JPckRlc3Ryb3k6TX09djtmdW5jdGlvbiBrKCl7fWMoQS5wcm90b3R5cGUsaC5wcm90b3R5cGUpLGMoQSxoKTtjb25zdCBSPWYoXCJrT25GaW5pc2hlZFwiKTtmdW5jdGlvbiBQKGUsdCxyKXtcImJvb2xlYW5cIiE9dHlwZW9mIHImJihyPXQgaW5zdGFuY2VvZiBuKDE4MikpLHRoaXMub2JqZWN0TW9kZT0hKCFlfHwhZS5vYmplY3RNb2RlKSxyJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISghZXx8IWUud3JpdGFibGVPYmplY3RNb2RlKSksdGhpcy5oaWdoV2F0ZXJNYXJrPWU/Qyh0aGlzLGUsXCJ3cml0YWJsZUhpZ2hXYXRlck1hcmtcIixyKTp5KCExKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMTtjb25zdCBvPSEoIWV8fCExIT09ZS5kZWNvZGVTdHJpbmdzKTt0aGlzLmRlY29kZVN0cmluZ3M9IW8sdGhpcy5kZWZhdWx0RW5jb2Rpbmc9ZSYmZS5kZWZhdWx0RW5jb2Rpbmd8fFwidXRmOFwiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9Vi5iaW5kKHZvaWQgMCx0KSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5hZnRlcldyaXRlVGlja0luZm89bnVsbCxJKHRoaXMpLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5jb25zdHJ1Y3RlZD0hMCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuZW1pdENsb3NlPSFlfHwhMSE9PWUuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9IWV8fCExIT09ZS5hdXRvRGVzdHJveSx0aGlzLmVycm9yZWQ9bnVsbCx0aGlzLmNsb3NlZD0hMSx0aGlzLmNsb3NlRW1pdHRlZD0hMSx0aGlzW1JdPVtdfWZ1bmN0aW9uIEkoZSl7ZS5idWZmZXJlZD1bXSxlLmJ1ZmZlcmVkSW5kZXg9MCxlLmFsbEJ1ZmZlcnM9ITAsZS5hbGxOb29wPSEwfWZ1bmN0aW9uIEEoZSl7Y29uc3QgdD10aGlzIGluc3RhbmNlb2YgbigxODIpO2lmKCF0JiYhYShBLHRoaXMpKXJldHVybiBuZXcgQShlKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBQKGUsdGhpcyx0KSxlJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS53cml0ZSYmKHRoaXMuX3dyaXRlPWUud3JpdGUpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUud3JpdGV2JiYodGhpcy5fd3JpdGV2PWUud3JpdGV2KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PWUuZGVzdHJveSksXCJmdW5jdGlvblwiPT10eXBlb2YgZS5maW5hbCYmKHRoaXMuX2ZpbmFsPWUuZmluYWwpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY29uc3RydWN0JiYodGhpcy5fY29uc3RydWN0PWUuY29uc3RydWN0KSxlLnNpZ25hbCYmbShlLnNpZ25hbCx0aGlzKSksaC5jYWxsKHRoaXMsZSksdi5jb25zdHJ1Y3QodGhpcywoKCk9Pntjb25zdCBlPXRoaXMuX3dyaXRhYmxlU3RhdGU7ZS53cml0aW5nfHxOKHRoaXMsZSksVSh0aGlzLGUpfSkpfWZ1bmN0aW9uIFQoZSx0LG4sbyl7Y29uc3QgaT1lLl93cml0YWJsZVN0YXRlO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pbz1uLG49aS5kZWZhdWx0RW5jb2Rpbmc7ZWxzZXtpZihuKXtpZihcImJ1ZmZlclwiIT09biYmIWcuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgaihuKX1lbHNlIG49aS5kZWZhdWx0RW5jb2Rpbmc7XCJmdW5jdGlvblwiIT10eXBlb2YgbyYmKG89ayl9aWYobnVsbD09PXQpdGhyb3cgbmV3IEU7aWYoIWkub2JqZWN0TW9kZSlpZihcInN0cmluZ1wiPT10eXBlb2YgdCkhMSE9PWkuZGVjb2RlU3RyaW5ncyYmKHQ9Zy5mcm9tKHQsbiksbj1cImJ1ZmZlclwiKTtlbHNlIGlmKHQgaW5zdGFuY2VvZiBnKW49XCJidWZmZXJcIjtlbHNle2lmKCFoLl9pc1VpbnQ4QXJyYXkodCkpdGhyb3cgbmV3IHcoXCJjaHVua1wiLFtcInN0cmluZ1wiLFwiQnVmZmVyXCIsXCJVaW50OEFycmF5XCJdLHQpO3Q9aC5fdWludDhBcnJheVRvQnVmZmVyKHQpLG49XCJidWZmZXJcIn1sZXQgYTtyZXR1cm4gaS5lbmRpbmc/YT1uZXcgUzppLmRlc3Ryb3llZCYmKGE9bmV3IE8oXCJ3cml0ZVwiKSksYT8oci5uZXh0VGljayhvLGEpLE0oZSxhLCEwKSxhKTooaS5wZW5kaW5nY2IrKyxmdW5jdGlvbihlLHQsbixyLG8pe2NvbnN0IGk9dC5vYmplY3RNb2RlPzE6bi5sZW5ndGg7dC5sZW5ndGgrPWk7Y29uc3QgYT10Lmxlbmd0aDx0LmhpZ2hXYXRlck1hcms7cmV0dXJuIGF8fCh0Lm5lZWREcmFpbj0hMCksdC53cml0aW5nfHx0LmNvcmtlZHx8dC5lcnJvcmVkfHwhdC5jb25zdHJ1Y3RlZD8odC5idWZmZXJlZC5wdXNoKHtjaHVuazpuLGVuY29kaW5nOnIsY2FsbGJhY2s6b30pLHQuYWxsQnVmZmVycyYmXCJidWZmZXJcIiE9PXImJih0LmFsbEJ1ZmZlcnM9ITEpLHQuYWxsTm9vcCYmbyE9PWsmJih0LmFsbE5vb3A9ITEpKToodC53cml0ZWxlbj1pLHQud3JpdGVjYj1vLHQud3JpdGluZz0hMCx0LnN5bmM9ITAsZS5fd3JpdGUobixyLHQub253cml0ZSksdC5zeW5jPSExKSxhJiYhdC5lcnJvcmVkJiYhdC5kZXN0cm95ZWR9KGUsaSx0LG4sbykpfWZ1bmN0aW9uIEgoZSx0LG4scixvLGksYSl7dC53cml0ZWxlbj1yLHQud3JpdGVjYj1hLHQud3JpdGluZz0hMCx0LnN5bmM9ITAsdC5kZXN0cm95ZWQ/dC5vbndyaXRlKG5ldyBPKFwid3JpdGVcIikpOm4/ZS5fd3JpdGV2KG8sdC5vbndyaXRlKTplLl93cml0ZShvLGksdC5vbndyaXRlKSx0LnN5bmM9ITF9ZnVuY3Rpb24gQihlLHQsbixyKXstLXQucGVuZGluZ2NiLHIobiksJCh0KSxNKGUsbil9ZnVuY3Rpb24gVihlLHQpe2NvbnN0IG49ZS5fd3JpdGFibGVTdGF0ZSxvPW4uc3luYyxpPW4ud3JpdGVjYjtcImZ1bmN0aW9uXCI9PXR5cGVvZiBpPyhuLndyaXRpbmc9ITEsbi53cml0ZWNiPW51bGwsbi5sZW5ndGgtPW4ud3JpdGVsZW4sbi53cml0ZWxlbj0wLHQ/KHQuc3RhY2ssbi5lcnJvcmVkfHwobi5lcnJvcmVkPXQpLGUuX3JlYWRhYmxlU3RhdGUmJiFlLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQmJihlLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQ9dCksbz9yLm5leHRUaWNrKEIsZSxuLHQsaSk6QihlLG4sdCxpKSk6KG4uYnVmZmVyZWQubGVuZ3RoPm4uYnVmZmVyZWRJbmRleCYmTihlLG4pLG8/bnVsbCE9PW4uYWZ0ZXJXcml0ZVRpY2tJbmZvJiZuLmFmdGVyV3JpdGVUaWNrSW5mby5jYj09PWk/bi5hZnRlcldyaXRlVGlja0luZm8uY291bnQrKzoobi5hZnRlcldyaXRlVGlja0luZm89e2NvdW50OjEsY2I6aSxzdHJlYW06ZSxzdGF0ZTpufSxyLm5leHRUaWNrKEQsbi5hZnRlcldyaXRlVGlja0luZm8pKTpaKGUsbiwxLGkpKSk6TShlLG5ldyB4KX1mdW5jdGlvbiBEKHtzdHJlYW06ZSxzdGF0ZTp0LGNvdW50Om4sY2I6cn0pe3JldHVybiB0LmFmdGVyV3JpdGVUaWNrSW5mbz1udWxsLFooZSx0LG4scil9ZnVuY3Rpb24gWihlLHQsbixyKXtmb3IoIXQuZW5kaW5nJiYhZS5kZXN0cm95ZWQmJjA9PT10Lmxlbmd0aCYmdC5uZWVkRHJhaW4mJih0Lm5lZWREcmFpbj0hMSxlLmVtaXQoXCJkcmFpblwiKSk7bi0tID4wOyl0LnBlbmRpbmdjYi0tLHIoKTt0LmRlc3Ryb3llZCYmJCh0KSxVKGUsdCl9ZnVuY3Rpb24gJChlKXtpZihlLndyaXRpbmcpcmV0dXJuO2ZvcihsZXQgbj1lLmJ1ZmZlcmVkSW5kZXg7bjxlLmJ1ZmZlcmVkLmxlbmd0aDsrK24pe3ZhciB0O2NvbnN0e2NodW5rOnIsY2FsbGJhY2s6b309ZS5idWZmZXJlZFtuXSxpPWUub2JqZWN0TW9kZT8xOnIubGVuZ3RoO2UubGVuZ3RoLT1pLG8obnVsbCE9PSh0PWUuZXJyb3JlZCkmJnZvaWQgMCE9PXQ/dDpuZXcgTyhcIndyaXRlXCIpKX1jb25zdCBuPWVbUl0uc3BsaWNlKDApO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcjtuW3RdKG51bGwhPT0ocj1lLmVycm9yZWQpJiZ2b2lkIDAhPT1yP3I6bmV3IE8oXCJlbmRcIikpfUkoZSl9ZnVuY3Rpb24gTihlLHQpe2lmKHQuY29ya2VkfHx0LmJ1ZmZlclByb2Nlc3Npbmd8fHQuZGVzdHJveWVkfHwhdC5jb25zdHJ1Y3RlZClyZXR1cm47Y29uc3R7YnVmZmVyZWQ6bixidWZmZXJlZEluZGV4OnIsb2JqZWN0TW9kZTppfT10LGE9bi5sZW5ndGgtcjtpZighYSlyZXR1cm47bGV0IGw9cjtpZih0LmJ1ZmZlclByb2Nlc3Npbmc9ITAsYT4xJiZlLl93cml0ZXYpe3QucGVuZGluZ2NiLT1hLTE7Y29uc3Qgcj10LmFsbE5vb3A/azplPT57Zm9yKGxldCB0PWw7dDxuLmxlbmd0aDsrK3Qpblt0XS5jYWxsYmFjayhlKX0saT10LmFsbE5vb3AmJjA9PT1sP246byhuLGwpO2kuYWxsQnVmZmVycz10LmFsbEJ1ZmZlcnMsSChlLHQsITAsdC5sZW5ndGgsaSxcIlwiLHIpLEkodCl9ZWxzZXtkb3tjb25zdHtjaHVuazpyLGVuY29kaW5nOm8sY2FsbGJhY2s6YX09bltsXTtuW2wrK109bnVsbCxIKGUsdCwhMSxpPzE6ci5sZW5ndGgscixvLGEpfXdoaWxlKGw8bi5sZW5ndGgmJiF0LndyaXRpbmcpO2w9PT1uLmxlbmd0aD9JKHQpOmw+MjU2PyhuLnNwbGljZSgwLGwpLHQuYnVmZmVyZWRJbmRleD0wKTp0LmJ1ZmZlcmVkSW5kZXg9bH10LmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gRihlKXtyZXR1cm4gZS5lbmRpbmcmJiFlLmRlc3Ryb3llZCYmZS5jb25zdHJ1Y3RlZCYmMD09PWUubGVuZ3RoJiYhZS5lcnJvcmVkJiYwPT09ZS5idWZmZXJlZC5sZW5ndGgmJiFlLmZpbmlzaGVkJiYhZS53cml0aW5nJiYhZS5lcnJvckVtaXR0ZWQmJiFlLmNsb3NlRW1pdHRlZH1mdW5jdGlvbiBVKGUsdCxuKXtGKHQpJiYoZnVuY3Rpb24oZSx0KXt0LnByZWZpbmlzaGVkfHx0LmZpbmFsQ2FsbGVkfHwoXCJmdW5jdGlvblwiIT10eXBlb2YgZS5fZmluYWx8fHQuZGVzdHJveWVkPyh0LnByZWZpbmlzaGVkPSEwLGUuZW1pdChcInByZWZpbmlzaFwiKSk6KHQuZmluYWxDYWxsZWQ9ITAsZnVuY3Rpb24oZSx0KXtsZXQgbj0hMTtmdW5jdGlvbiBvKG8pe2lmKG4pTShlLG51bGwhPW8/bzp4KCkpO2Vsc2UgaWYobj0hMCx0LnBlbmRpbmdjYi0tLG8pe2NvbnN0IG49dFtSXS5zcGxpY2UoMCk7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspbltlXShvKTtNKGUsbyx0LnN5bmMpfWVsc2UgRih0KSYmKHQucHJlZmluaXNoZWQ9ITAsZS5lbWl0KFwicHJlZmluaXNoXCIpLHQucGVuZGluZ2NiKyssci5uZXh0VGljayhXLGUsdCkpfXQuc3luYz0hMCx0LnBlbmRpbmdjYisrO3RyeXtlLl9maW5hbChvKX1jYXRjaChlKXtvKGUpfXQuc3luYz0hMX0oZSx0KSkpfShlLHQpLDA9PT10LnBlbmRpbmdjYiYmKG4/KHQucGVuZGluZ2NiKyssci5uZXh0VGljaygoKGUsdCk9PntGKHQpP1coZSx0KTp0LnBlbmRpbmdjYi0tfSksZSx0KSk6Rih0KSYmKHQucGVuZGluZ2NiKyssVyhlLHQpKSkpfWZ1bmN0aW9uIFcoZSx0KXt0LnBlbmRpbmdjYi0tLHQuZmluaXNoZWQ9ITA7Y29uc3Qgbj10W1JdLnNwbGljZSgwKTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyluW2VdKCk7aWYoZS5lbWl0KFwiZmluaXNoXCIpLHQuYXV0b0Rlc3Ryb3kpe2NvbnN0IHQ9ZS5fcmVhZGFibGVTdGF0ZTsoIXR8fHQuYXV0b0Rlc3Ryb3kmJih0LmVuZEVtaXR0ZWR8fCExPT09dC5yZWFkYWJsZSkpJiZlLmRlc3Ryb3koKX19UC5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5idWZmZXJlZCx0aGlzLmJ1ZmZlcmVkSW5kZXgpfSxsKFAucHJvdG90eXBlLFwiYnVmZmVyZWRSZXF1ZXN0Q291bnRcIix7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHRoaXMuYnVmZmVyZWQubGVuZ3RoLXRoaXMuYnVmZmVyZWRJbmRleH19KSxsKEEsZCx7X19wcm90b19fOm51bGwsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuISFhKHRoaXMsZSl8fHRoaXM9PT1BJiZlJiZlLl93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgUH19KSxBLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7TSh0aGlzLG5ldyBfKX0sQS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiEwPT09VCh0aGlzLGUsdCxuKX0sQS5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LEEucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe2NvbnN0IGU9dGhpcy5fd3JpdGFibGVTdGF0ZTtlLmNvcmtlZCYmKGUuY29ya2VkLS0sZS53cml0aW5nfHxOKHRoaXMsZSkpfSxBLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24oZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPXUoZSkpLCFnLmlzRW5jb2RpbmcoZSkpdGhyb3cgbmV3IGooZSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPWUsdGhpc30sQS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGUsdCxuKXtpZighdGhpcy5fd3JpdGV2KXRocm93IG5ldyBiKFwiX3dyaXRlKClcIik7dGhpcy5fd3JpdGV2KFt7Y2h1bms6ZSxlbmNvZGluZzp0fV0sbil9LEEucHJvdG90eXBlLl93cml0ZXY9bnVsbCxBLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oZSx0LG4pe2NvbnN0IG89dGhpcy5fd3JpdGFibGVTdGF0ZTtsZXQgYTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlPyhuPWUsZT1udWxsLHQ9bnVsbCk6XCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKG49dCx0PW51bGwpLG51bGwhPWUpe2NvbnN0IG49VCh0aGlzLGUsdCk7biBpbnN0YW5jZW9mIGkmJihhPW4pfXJldHVybiBvLmNvcmtlZCYmKG8uY29ya2VkPTEsdGhpcy51bmNvcmsoKSksYXx8KG8uZXJyb3JlZHx8by5lbmRpbmc/by5maW5pc2hlZD9hPW5ldyBMKFwiZW5kXCIpOm8uZGVzdHJveWVkJiYoYT1uZXcgTyhcImVuZFwiKSk6KG8uZW5kaW5nPSEwLFUodGhpcyxvLCEwKSxvLmVuZGVkPSEwKSksXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKGF8fG8uZmluaXNoZWQ/ci5uZXh0VGljayhuLGEpOm9bUl0ucHVzaChuKSksdGhpc30scyhBLnByb3RvdHlwZSx7Y2xvc2VkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4hIXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuY2xvc2VkfX0sZGVzdHJveWVkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4hIXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQoZSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPWUpfX0sd3JpdGFibGU6e19fcHJvdG9fXzpudWxsLGdldCgpe2NvbnN0IGU9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4hKCFlfHwhMT09PWUud3JpdGFibGV8fGUuZGVzdHJveWVkfHxlLmVycm9yZWR8fGUuZW5kaW5nfHxlLmVuZGVkKX0sc2V0KGUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlPSEhZSl9fSx3cml0YWJsZUZpbmlzaGVkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4hIXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWR9fSx3cml0YWJsZU9iamVjdE1vZGU6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiEhdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5vYmplY3RNb2RlfX0sd3JpdGFibGVCdWZmZXI6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0sd3JpdGFibGVFbmRlZDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuISF0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZ319LHdyaXRhYmxlTmVlZERyYWluOntfX3Byb3RvX186bnVsbCxnZXQoKXtjb25zdCBlPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuISFlJiYhZS5kZXN0cm95ZWQmJiFlLmVuZGluZyYmZS5uZWVkRHJhaW59fSx3cml0YWJsZUhpZ2hXYXRlck1hcms6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSx3cml0YWJsZUNvcmtlZDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQ6MH19LHdyaXRhYmxlTGVuZ3RoOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSxlcnJvcmVkOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JlZDpudWxsfX0sd3JpdGFibGVBYm9ydGVkOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiEoITE9PT10aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlfHwhdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQmJiF0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQpfX19KTtjb25zdCB6PXYuZGVzdHJveTtsZXQgRztmdW5jdGlvbiBxKCl7cmV0dXJuIHZvaWQgMD09PUcmJihHPXt9KSxHfUEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuIW4uZGVzdHJveWVkJiYobi5idWZmZXJlZEluZGV4PG4uYnVmZmVyZWQubGVuZ3RofHxuW1JdLmxlbmd0aCkmJnIubmV4dFRpY2soJCxuKSx6LmNhbGwodGhpcyxlLHQpLHRoaXN9LEEucHJvdG90eXBlLl91bmRlc3Ryb3k9di51bmRlc3Ryb3ksQS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSx0KXt0KGUpfSxBLnByb3RvdHlwZVtwLmNhcHR1cmVSZWplY3Rpb25TeW1ib2xdPWZ1bmN0aW9uKGUpe3RoaXMuZGVzdHJveShlKX0sQS5mcm9tV2ViPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHEoKS5uZXdTdHJlYW1Xcml0YWJsZUZyb21Xcml0YWJsZVN0cmVhbShlLHQpfSxBLnRvV2ViPWZ1bmN0aW9uKGUpe3JldHVybiBxKCkubmV3V3JpdGFibGVTdHJlYW1Gcm9tU3RyZWFtV3JpdGFibGUoZSl9fSw5MDQ6KGUsdCxuKT0+e2NvbnN0e0FycmF5SXNBcnJheTpyLEFycmF5UHJvdG90eXBlSW5jbHVkZXM6byxBcnJheVByb3RvdHlwZUpvaW46aSxBcnJheVByb3RvdHlwZU1hcDphLE51bWJlcklzSW50ZWdlcjpsLE51bWJlcklzTmFOOnMsTnVtYmVyTUFYX1NBRkVfSU5URUdFUjpjLE51bWJlck1JTl9TQUZFX0lOVEVHRVI6dSxOdW1iZXJQYXJzZUludDpmLE9iamVjdFByb3RvdHlwZUhhc093blByb3BlcnR5OmQsUmVnRXhwUHJvdG90eXBlRXhlYzpwLFN0cmluZzpoLFN0cmluZ1Byb3RvdHlwZVRvVXBwZXJDYXNlOmcsU3RyaW5nUHJvdG90eXBlVHJpbTp2fT1uKDE5MSkse2hpZGVTdGFja0ZyYW1lczptLGNvZGVzOntFUlJfU09DS0VUX0JBRF9QT1JUOkMsRVJSX0lOVkFMSURfQVJHX1RZUEU6eSxFUlJfSU5WQUxJRF9BUkdfVkFMVUU6dyxFUlJfT1VUX09GX1JBTkdFOmIsRVJSX1VOS05PV05fU0lHTkFMOnh9fT1uKDE0MSkse25vcm1hbGl6ZUVuY29kaW5nOl99PW4oNzc1KSx7aXNBc3luY0Z1bmN0aW9uOk8saXNBcnJheUJ1ZmZlclZpZXc6TH09big3NzUpLnR5cGVzLEU9e30sUz0vXlswLTddKyQvLGo9bSgoKGUsdCxuPXUscj1jKT0+e2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyB5KHQsXCJudW1iZXJcIixlKTtpZighbChlKSl0aHJvdyBuZXcgYih0LFwiYW4gaW50ZWdlclwiLGUpO2lmKGU8bnx8ZT5yKXRocm93IG5ldyBiKHQsYD49ICR7bn0gJiYgPD0gJHtyfWAsZSl9KSksTT1tKCgoZSx0LG49LTIxNDc0ODM2NDgscj0yMTQ3NDgzNjQ3KT0+e2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyB5KHQsXCJudW1iZXJcIixlKTtpZighbChlKSl0aHJvdyBuZXcgYih0LFwiYW4gaW50ZWdlclwiLGUpO2lmKGU8bnx8ZT5yKXRocm93IG5ldyBiKHQsYD49ICR7bn0gJiYgPD0gJHtyfWAsZSl9KSksaz1tKCgoZSx0LG49ITEpPT57aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHkodCxcIm51bWJlclwiLGUpO2lmKCFsKGUpKXRocm93IG5ldyBiKHQsXCJhbiBpbnRlZ2VyXCIsZSk7Y29uc3Qgcj1uPzE6MCxvPTQyOTQ5NjcyOTU7aWYoZTxyfHxlPm8pdGhyb3cgbmV3IGIodCxgPj0gJHtyfSAmJiA8PSAke299YCxlKX0pKTtmdW5jdGlvbiBSKGUsdCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHkodCxcInN0cmluZ1wiLGUpfWNvbnN0IFA9bSgoKGUsdCxuKT0+e2lmKCFvKG4sZSkpe2NvbnN0IHI9aShhKG4sKGU9Plwic3RyaW5nXCI9PXR5cGVvZiBlP2AnJHtlfSdgOmgoZSkpKSxcIiwgXCIpO3Rocm93IG5ldyB3KHQsZSxcIm11c3QgYmUgb25lIG9mOiBcIityKX19KSk7ZnVuY3Rpb24gSShlLHQpe2lmKFwiYm9vbGVhblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgeSh0LFwiYm9vbGVhblwiLGUpfWZ1bmN0aW9uIEEoZSx0LG4pe3JldHVybiBudWxsIT1lJiZkKGUsdCk/ZVt0XTpufWNvbnN0IFQ9bSgoKGUsdCxuPW51bGwpPT57Y29uc3Qgbz1BKG4sXCJhbGxvd0FycmF5XCIsITEpLGk9QShuLFwiYWxsb3dGdW5jdGlvblwiLCExKTtpZighQShuLFwibnVsbGFibGVcIiwhMSkmJm51bGw9PT1lfHwhbyYmcihlKXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJighaXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZSkpdGhyb3cgbmV3IHkodCxcIk9iamVjdFwiLGUpfSkpLEg9bSgoKGUsdCk9PntpZihudWxsIT1lJiZcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgeSh0LFwiYSBkaWN0aW9uYXJ5XCIsZSl9KSksQj1tKCgoZSx0LG49MCk9PntpZighcihlKSl0aHJvdyBuZXcgeSh0LFwiQXJyYXlcIixlKTtpZihlLmxlbmd0aDxuKXRocm93IG5ldyB3KHQsZSxgbXVzdCBiZSBsb25nZXIgdGhhbiAke259YCl9KSksVj1tKCgoZSx0PVwiYnVmZmVyXCIpPT57aWYoIUwoZSkpdGhyb3cgbmV3IHkodCxbXCJCdWZmZXJcIixcIlR5cGVkQXJyYXlcIixcIkRhdGFWaWV3XCJdLGUpfSkpLEQ9bSgoKGUsdCk9PntpZih2b2lkIDAhPT1lJiYobnVsbD09PWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlfHwhKFwiYWJvcnRlZFwiaW4gZSkpKXRocm93IG5ldyB5KHQsXCJBYm9ydFNpZ25hbFwiLGUpfSkpLFo9bSgoKGUsdCk9PntpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyB5KHQsXCJGdW5jdGlvblwiLGUpfSkpLCQ9bSgoKGUsdCk9PntpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlfHxPKGUpKXRocm93IG5ldyB5KHQsXCJGdW5jdGlvblwiLGUpfSkpLE49bSgoKGUsdCk9PntpZih2b2lkIDAhPT1lKXRocm93IG5ldyB5KHQsXCJ1bmRlZmluZWRcIixlKX0pKSxGPS9eKD86PFtePl0qPikoPzpcXHMqO1xccypbXjtcIlxcc10rKD86PShcIik/W147XCJcXHNdKlxcMSk/KSokLztmdW5jdGlvbiBVKGUsdCl7aWYodm9pZCAwPT09ZXx8IXAoRixlKSl0aHJvdyBuZXcgdyh0LGUsJ211c3QgYmUgYW4gYXJyYXkgb3Igc3RyaW5nIG9mIGZvcm1hdCBcIjwvc3R5bGVzLmNzcz47IHJlbD1wcmVsb2FkOyBhcz1zdHlsZVwiJyl9ZS5leHBvcnRzPXtpc0ludDMyOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09KDB8ZSl9LGlzVWludDMyOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09ZT4+PjB9LHBhcnNlRmlsZU1vZGU6ZnVuY3Rpb24oZSx0LG4pe2lmKHZvaWQgMD09PWUmJihlPW4pLFwic3RyaW5nXCI9PXR5cGVvZiBlKXtpZihudWxsPT09cChTLGUpKXRocm93IG5ldyB3KHQsZSxcIm11c3QgYmUgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBvciBhbiBvY3RhbCBzdHJpbmdcIik7ZT1mKGUsOCl9cmV0dXJuIGsoZSx0KSxlfSx2YWxpZGF0ZUFycmF5OkIsdmFsaWRhdGVTdHJpbmdBcnJheTpmdW5jdGlvbihlLHQpe0IoZSx0KTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKylSKGVbbl0sYCR7dH1bJHtufV1gKX0sdmFsaWRhdGVCb29sZWFuQXJyYXk6ZnVuY3Rpb24oZSx0KXtCKGUsdCk7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspSShlW25dLGAke3R9WyR7bn1dYCl9LHZhbGlkYXRlQm9vbGVhbjpJLHZhbGlkYXRlQnVmZmVyOlYsdmFsaWRhdGVEaWN0aW9uYXJ5OkgsdmFsaWRhdGVFbmNvZGluZzpmdW5jdGlvbihlLHQpe2NvbnN0IG49Xyh0KSxyPWUubGVuZ3RoO2lmKFwiaGV4XCI9PT1uJiZyJTIhPTApdGhyb3cgbmV3IHcoXCJlbmNvZGluZ1wiLHQsYGlzIGludmFsaWQgZm9yIGRhdGEgb2YgbGVuZ3RoICR7cn1gKX0sdmFsaWRhdGVGdW5jdGlvbjpaLHZhbGlkYXRlSW50MzI6TSx2YWxpZGF0ZUludGVnZXI6aix2YWxpZGF0ZU51bWJlcjpmdW5jdGlvbihlLHQsbj12b2lkIDAscil7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHkodCxcIm51bWJlclwiLGUpO2lmKG51bGwhPW4mJmU8bnx8bnVsbCE9ciYmZT5yfHwobnVsbCE9bnx8bnVsbCE9cikmJnMoZSkpdGhyb3cgbmV3IGIodCxgJHtudWxsIT1uP2A+PSAke259YDpcIlwifSR7bnVsbCE9biYmbnVsbCE9cj9cIiAmJiBcIjpcIlwifSR7bnVsbCE9cj9gPD0gJHtyfWA6XCJcIn1gLGUpfSx2YWxpZGF0ZU9iamVjdDpULHZhbGlkYXRlT25lT2Y6UCx2YWxpZGF0ZVBsYWluRnVuY3Rpb246JCx2YWxpZGF0ZVBvcnQ6ZnVuY3Rpb24oZSx0PVwiUG9ydFwiLG49ITApe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlJiZcInN0cmluZ1wiIT10eXBlb2YgZXx8XCJzdHJpbmdcIj09dHlwZW9mIGUmJjA9PT12KGUpLmxlbmd0aHx8K2UhPStlPj4+MHx8ZT42NTUzNXx8MD09PWUmJiFuKXRocm93IG5ldyBDKHQsZSxuKTtyZXR1cm4gMHxlfSx2YWxpZGF0ZVNpZ25hbE5hbWU6ZnVuY3Rpb24oZSx0PVwic2lnbmFsXCIpe2lmKFIoZSx0KSx2b2lkIDA9PT1FW2VdKXtpZih2b2lkIDAhPT1FW2coZSldKXRocm93IG5ldyB4KGUrXCIgKHNpZ25hbHMgbXVzdCB1c2UgYWxsIGNhcGl0YWwgbGV0dGVycylcIik7dGhyb3cgbmV3IHgoZSl9fSx2YWxpZGF0ZVN0cmluZzpSLHZhbGlkYXRlVWludDMyOmssdmFsaWRhdGVVbmRlZmluZWQ6Tix2YWxpZGF0ZVVuaW9uOmZ1bmN0aW9uKGUsdCxuKXtpZighbyhuLGUpKXRocm93IG5ldyB5KHQsYCgnJHtpKG4sXCJ8XCIpfScpYCxlKX0sdmFsaWRhdGVBYm9ydFNpZ25hbDpELHZhbGlkYXRlTGlua0hlYWRlclZhbHVlOmZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBVKGUsXCJoaW50c1wiKSxlO2lmKHIoZSkpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IG49XCJcIjtpZigwPT09dClyZXR1cm4gbjtmb3IobGV0IHI9MDtyPHQ7cisrKXtjb25zdCBvPWVbcl07VShvLFwiaGludHNcIiksbis9byxyIT09dC0xJiYobis9XCIsIFwiKX1yZXR1cm4gbn10aHJvdyBuZXcgdyhcImhpbnRzXCIsZSwnbXVzdCBiZSBhbiBhcnJheSBvciBzdHJpbmcgb2YgZm9ybWF0IFwiPC9zdHlsZXMuY3NzPjsgcmVsPXByZWxvYWQ7IGFzPXN0eWxlXCInKX19fSw5OTooZSx0LG4pPT57Y29uc3Qgcj1uKDI5Miksbz1uKDc2MCksaT1yLlJlYWRhYmxlLmRlc3Ryb3k7ZS5leHBvcnRzPXIuUmVhZGFibGUsZS5leHBvcnRzLl91aW50OEFycmF5VG9CdWZmZXI9ci5fdWludDhBcnJheVRvQnVmZmVyLGUuZXhwb3J0cy5faXNVaW50OEFycmF5PXIuX2lzVWludDhBcnJheSxlLmV4cG9ydHMuaXNEaXN0dXJiZWQ9ci5pc0Rpc3R1cmJlZCxlLmV4cG9ydHMuaXNFcnJvcmVkPXIuaXNFcnJvcmVkLGUuZXhwb3J0cy5pc1JlYWRhYmxlPXIuaXNSZWFkYWJsZSxlLmV4cG9ydHMuUmVhZGFibGU9ci5SZWFkYWJsZSxlLmV4cG9ydHMuV3JpdGFibGU9ci5Xcml0YWJsZSxlLmV4cG9ydHMuRHVwbGV4PXIuRHVwbGV4LGUuZXhwb3J0cy5UcmFuc2Zvcm09ci5UcmFuc2Zvcm0sZS5leHBvcnRzLlBhc3NUaHJvdWdoPXIuUGFzc1Rocm91Z2gsZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsPXIuYWRkQWJvcnRTaWduYWwsZS5leHBvcnRzLmZpbmlzaGVkPXIuZmluaXNoZWQsZS5leHBvcnRzLmRlc3Ryb3k9ci5kZXN0cm95LGUuZXhwb3J0cy5kZXN0cm95PWksZS5leHBvcnRzLnBpcGVsaW5lPXIucGlwZWxpbmUsZS5leHBvcnRzLmNvbXBvc2U9ci5jb21wb3NlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwicHJvbWlzZXNcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OigpPT5vfSksZS5leHBvcnRzLlN0cmVhbT1yLlN0cmVhbSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHN9LDE0MTooZSx0LG4pPT57Y29uc3R7Zm9ybWF0OnIsaW5zcGVjdDpvLEFnZ3JlZ2F0ZUVycm9yOml9PW4oNzc1KSxhPWdsb2JhbFRoaXMuQWdncmVnYXRlRXJyb3J8fGksbD1TeW1ib2woXCJrSXNOb2RlRXJyb3JcIikscz1bXCJzdHJpbmdcIixcImZ1bmN0aW9uXCIsXCJudW1iZXJcIixcIm9iamVjdFwiLFwiRnVuY3Rpb25cIixcIk9iamVjdFwiLFwiYm9vbGVhblwiLFwiYmlnaW50XCIsXCJzeW1ib2xcIl0sYz0vXihbQS1aXVthLXowLTldKikrJC8sdT17fTtmdW5jdGlvbiBmKGUsdCl7aWYoIWUpdGhyb3cgbmV3IHUuRVJSX0lOVEVSTkFMX0FTU0VSVElPTih0KX1mdW5jdGlvbiBkKGUpe2xldCB0PVwiXCIsbj1lLmxlbmd0aDtjb25zdCByPVwiLVwiPT09ZVswXT8xOjA7Zm9yKDtuPj1yKzQ7bi09Myl0PWBfJHtlLnNsaWNlKG4tMyxuKX0ke3R9YDtyZXR1cm5gJHtlLnNsaWNlKDAsbil9JHt0fWB9ZnVuY3Rpb24gcChlLHQsbil7bnx8KG49RXJyb3IpO2NsYXNzIG8gZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLm4pe3N1cGVyKGZ1bmN0aW9uKGUsdCxuKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXJldHVybiBmKHQubGVuZ3RoPD1uLmxlbmd0aCxgQ29kZTogJHtlfTsgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBsZW5ndGggKCR7bi5sZW5ndGh9KSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgb25lcyAoJHt0Lmxlbmd0aH0pLmApLHQoLi4ubik7Y29uc3Qgbz0odC5tYXRjaCgvJVtkZmlqb09zXS9nKXx8W10pLmxlbmd0aDtyZXR1cm4gZihvPT09bi5sZW5ndGgsYENvZGU6ICR7ZX07IFRoZSBwcm92aWRlZCBhcmd1bWVudHMgbGVuZ3RoICgke24ubGVuZ3RofSkgZG9lcyBub3QgbWF0Y2ggdGhlIHJlcXVpcmVkIG9uZXMgKCR7b30pLmApLDA9PT1uLmxlbmd0aD90OnIodCwuLi5uKX0oZSx0LG4pKX10b1N0cmluZygpe3JldHVybmAke3RoaXMubmFtZX0gWyR7ZX1dOiAke3RoaXMubWVzc2FnZX1gfX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhvLnByb3RvdHlwZSx7bmFtZTp7dmFsdWU6bi5uYW1lLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSx0b1N0cmluZzp7dmFsdWUoKXtyZXR1cm5gJHt0aGlzLm5hbWV9IFske2V9XTogJHt0aGlzLm1lc3NhZ2V9YH0sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9fSksby5wcm90b3R5cGUuY29kZT1lLG8ucHJvdG90eXBlW2xdPSEwLHVbZV09b31mdW5jdGlvbiBoKGUpe2NvbnN0IHQ9XCJfX25vZGVfaW50ZXJuYWxfXCIrZS5uYW1lO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIm5hbWVcIix7dmFsdWU6dH0pLGV9Y2xhc3MgZyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGU9XCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkXCIsdD12b2lkIDApe2lmKHZvaWQgMCE9PXQmJlwib2JqZWN0XCIhPXR5cGVvZiB0KXRocm93IG5ldyB1LkVSUl9JTlZBTElEX0FSR19UWVBFKFwib3B0aW9uc1wiLFwiT2JqZWN0XCIsdCk7c3VwZXIoZSx0KSx0aGlzLmNvZGU9XCJBQk9SVF9FUlJcIix0aGlzLm5hbWU9XCJBYm9ydEVycm9yXCJ9fXAoXCJFUlJfQVNTRVJUSU9OXCIsXCIlc1wiLEVycm9yKSxwKFwiRVJSX0lOVkFMSURfQVJHX1RZUEVcIiwoKGUsdCxuKT0+e2YoXCJzdHJpbmdcIj09dHlwZW9mIGUsXCInbmFtZScgbXVzdCBiZSBhIHN0cmluZ1wiKSxBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO2xldCByPVwiVGhlIFwiO2UuZW5kc1dpdGgoXCIgYXJndW1lbnRcIik/cis9YCR7ZX0gYDpyKz1gXCIke2V9XCIgJHtlLmluY2x1ZGVzKFwiLlwiKT9cInByb3BlcnR5XCI6XCJhcmd1bWVudFwifSBgLHIrPVwibXVzdCBiZSBcIjtjb25zdCBpPVtdLGE9W10sbD1bXTtmb3IoY29uc3QgZSBvZiB0KWYoXCJzdHJpbmdcIj09dHlwZW9mIGUsXCJBbGwgZXhwZWN0ZWQgZW50cmllcyBoYXZlIHRvIGJlIG9mIHR5cGUgc3RyaW5nXCIpLHMuaW5jbHVkZXMoZSk/aS5wdXNoKGUudG9Mb3dlckNhc2UoKSk6Yy50ZXN0KGUpP2EucHVzaChlKTooZihcIm9iamVjdFwiIT09ZSwnVGhlIHZhbHVlIFwib2JqZWN0XCIgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgXCJPYmplY3RcIicpLGwucHVzaChlKSk7aWYoYS5sZW5ndGg+MCl7Y29uc3QgZT1pLmluZGV4T2YoXCJvYmplY3RcIik7LTEhPT1lJiYoaS5zcGxpY2UoaSxlLDEpLGEucHVzaChcIk9iamVjdFwiKSl9aWYoaS5sZW5ndGg+MCl7c3dpdGNoKGkubGVuZ3RoKXtjYXNlIDE6cis9YG9mIHR5cGUgJHtpWzBdfWA7YnJlYWs7Y2FzZSAyOnIrPWBvbmUgb2YgdHlwZSAke2lbMF19IG9yICR7aVsxXX1gO2JyZWFrO2RlZmF1bHQ6e2NvbnN0IGU9aS5wb3AoKTtyKz1gb25lIG9mIHR5cGUgJHtpLmpvaW4oXCIsIFwiKX0sIG9yICR7ZX1gfX0oYS5sZW5ndGg+MHx8bC5sZW5ndGg+MCkmJihyKz1cIiBvciBcIil9aWYoYS5sZW5ndGg+MCl7c3dpdGNoKGEubGVuZ3RoKXtjYXNlIDE6cis9YGFuIGluc3RhbmNlIG9mICR7YVswXX1gO2JyZWFrO2Nhc2UgMjpyKz1gYW4gaW5zdGFuY2Ugb2YgJHthWzBdfSBvciAke2FbMV19YDticmVhaztkZWZhdWx0Ontjb25zdCBlPWEucG9wKCk7cis9YGFuIGluc3RhbmNlIG9mICR7YS5qb2luKFwiLCBcIil9LCBvciAke2V9YH19bC5sZW5ndGg+MCYmKHIrPVwiIG9yIFwiKX1zd2l0Y2gobC5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6bFswXS50b0xvd2VyQ2FzZSgpIT09bFswXSYmKHIrPVwiYW4gXCIpLHIrPWAke2xbMF19YDticmVhaztjYXNlIDI6cis9YG9uZSBvZiAke2xbMF19IG9yICR7bFsxXX1gO2JyZWFrO2RlZmF1bHQ6e2NvbnN0IGU9bC5wb3AoKTtyKz1gb25lIG9mICR7bC5qb2luKFwiLCBcIil9LCBvciAke2V9YH19aWYobnVsbD09bilyKz1gLiBSZWNlaXZlZCAke259YDtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJm4ubmFtZSlyKz1gLiBSZWNlaXZlZCBmdW5jdGlvbiAke24ubmFtZX1gO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIG4pe3ZhciB1O251bGwhPT0odT1uLmNvbnN0cnVjdG9yKSYmdm9pZCAwIT09dSYmdS5uYW1lP3IrPWAuIFJlY2VpdmVkIGFuIGluc3RhbmNlIG9mICR7bi5jb25zdHJ1Y3Rvci5uYW1lfWA6cis9YC4gUmVjZWl2ZWQgJHtvKG4se2RlcHRoOi0xfSl9YH1lbHNle2xldCBlPW8obix7Y29sb3JzOiExfSk7ZS5sZW5ndGg+MjUmJihlPWAke2Uuc2xpY2UoMCwyNSl9Li4uYCkscis9YC4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBufSAoJHtlfSlgfXJldHVybiByfSksVHlwZUVycm9yKSxwKFwiRVJSX0lOVkFMSURfQVJHX1ZBTFVFXCIsKChlLHQsbj1cImlzIGludmFsaWRcIik9PntsZXQgcj1vKHQpO3JldHVybiByLmxlbmd0aD4xMjgmJihyPXIuc2xpY2UoMCwxMjgpK1wiLi4uXCIpLGBUaGUgJHtlLmluY2x1ZGVzKFwiLlwiKT9cInByb3BlcnR5XCI6XCJhcmd1bWVudFwifSAnJHtlfScgJHtufS4gUmVjZWl2ZWQgJHtyfWB9KSxUeXBlRXJyb3IpLHAoXCJFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUVcIiwoKGUsdCxuKT0+e3ZhciByO3JldHVybmBFeHBlY3RlZCAke2V9IHRvIGJlIHJldHVybmVkIGZyb20gdGhlIFwiJHt0fVwiIGZ1bmN0aW9uIGJ1dCBnb3QgJHtudWxsIT1uJiZudWxsIT09KHI9bi5jb25zdHJ1Y3RvcikmJnZvaWQgMCE9PXImJnIubmFtZT9gaW5zdGFuY2Ugb2YgJHtuLmNvbnN0cnVjdG9yLm5hbWV9YDpcInR5cGUgXCIrdHlwZW9mIG59LmB9KSxUeXBlRXJyb3IpLHAoXCJFUlJfTUlTU0lOR19BUkdTXCIsKCguLi5lKT0+e2xldCB0O2YoZS5sZW5ndGg+MCxcIkF0IGxlYXN0IG9uZSBhcmcgbmVlZHMgdG8gYmUgc3BlY2lmaWVkXCIpO2NvbnN0IG49ZS5sZW5ndGg7c3dpdGNoKGU9KEFycmF5LmlzQXJyYXkoZSk/ZTpbZV0pLm1hcCgoZT0+YFwiJHtlfVwiYCkpLmpvaW4oXCIgb3IgXCIpLG4pe2Nhc2UgMTp0Kz1gVGhlICR7ZVswXX0gYXJndW1lbnRgO2JyZWFrO2Nhc2UgMjp0Kz1gVGhlICR7ZVswXX0gYW5kICR7ZVsxXX0gYXJndW1lbnRzYDticmVhaztkZWZhdWx0Ontjb25zdCBuPWUucG9wKCk7dCs9YFRoZSAke2Uuam9pbihcIiwgXCIpfSwgYW5kICR7bn0gYXJndW1lbnRzYH19cmV0dXJuYCR7dH0gbXVzdCBiZSBzcGVjaWZpZWRgfSksVHlwZUVycm9yKSxwKFwiRVJSX09VVF9PRl9SQU5HRVwiLCgoZSx0LG4pPT57bGV0IHI7cmV0dXJuIGYodCwnTWlzc2luZyBcInJhbmdlXCIgYXJndW1lbnQnKSxOdW1iZXIuaXNJbnRlZ2VyKG4pJiZNYXRoLmFicyhuKT4yKiozMj9yPWQoU3RyaW5nKG4pKTpcImJpZ2ludFwiPT10eXBlb2Ygbj8ocj1TdHJpbmcobiksKG4+Mm4qKjMybnx8bjwtKDJuKiozMm4pKSYmKHI9ZChyKSkscis9XCJuXCIpOnI9byhuKSxgVGhlIHZhbHVlIG9mIFwiJHtlfVwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSAke3R9LiBSZWNlaXZlZCAke3J9YH0pLFJhbmdlRXJyb3IpLHAoXCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0tcIixcIkNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lc1wiLEVycm9yKSxwKFwiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URURcIixcIlRoZSAlcyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkXCIsRXJyb3IpLHAoXCJFUlJfU1RSRUFNX0FMUkVBRFlfRklOSVNIRURcIixcIkNhbm5vdCBjYWxsICVzIGFmdGVyIGEgc3RyZWFtIHdhcyBmaW5pc2hlZFwiLEVycm9yKSxwKFwiRVJSX1NUUkVBTV9DQU5OT1RfUElQRVwiLFwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZVwiLEVycm9yKSxwKFwiRVJSX1NUUkVBTV9ERVNUUk9ZRURcIixcIkNhbm5vdCBjYWxsICVzIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWRcIixFcnJvcikscChcIkVSUl9TVFJFQU1fTlVMTF9WQUxVRVNcIixcIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtXCIsVHlwZUVycm9yKSxwKFwiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0VcIixcIlByZW1hdHVyZSBjbG9zZVwiLEVycm9yKSxwKFwiRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRlwiLFwic3RyZWFtLnB1c2goKSBhZnRlciBFT0ZcIixFcnJvcikscChcIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlRcIixcInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50XCIsRXJyb3IpLHAoXCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORFwiLFwid3JpdGUgYWZ0ZXIgZW5kXCIsRXJyb3IpLHAoXCJFUlJfVU5LTk9XTl9FTkNPRElOR1wiLFwiVW5rbm93biBlbmNvZGluZzogJXNcIixUeXBlRXJyb3IpLGUuZXhwb3J0cz17QWJvcnRFcnJvcjpnLGFnZ3JlZ2F0ZVR3b0Vycm9yczpoKChmdW5jdGlvbihlLHQpe2lmKGUmJnQmJmUhPT10KXtpZihBcnJheS5pc0FycmF5KHQuZXJyb3JzKSlyZXR1cm4gdC5lcnJvcnMucHVzaChlKSx0O2NvbnN0IG49bmV3IGEoW3QsZV0sdC5tZXNzYWdlKTtyZXR1cm4gbi5jb2RlPXQuY29kZSxufXJldHVybiBlfHx0fSkpLGhpZGVTdGFja0ZyYW1lczpoLGNvZGVzOnV9fSwxOTE6ZT0+e2UuZXhwb3J0cz17QXJyYXlJc0FycmF5OmU9PkFycmF5LmlzQXJyYXkoZSksQXJyYXlQcm90b3R5cGVJbmNsdWRlczooZSx0KT0+ZS5pbmNsdWRlcyh0KSxBcnJheVByb3RvdHlwZUluZGV4T2Y6KGUsdCk9PmUuaW5kZXhPZih0KSxBcnJheVByb3RvdHlwZUpvaW46KGUsdCk9PmUuam9pbih0KSxBcnJheVByb3RvdHlwZU1hcDooZSx0KT0+ZS5tYXAodCksQXJyYXlQcm90b3R5cGVQb3A6KGUsdCk9PmUucG9wKHQpLEFycmF5UHJvdG90eXBlUHVzaDooZSx0KT0+ZS5wdXNoKHQpLEFycmF5UHJvdG90eXBlU2xpY2U6KGUsdCxuKT0+ZS5zbGljZSh0LG4pLEVycm9yLEZ1bmN0aW9uUHJvdG90eXBlQ2FsbDooZSx0LC4uLm4pPT5lLmNhbGwodCwuLi5uKSxGdW5jdGlvblByb3RvdHlwZVN5bWJvbEhhc0luc3RhbmNlOihlLHQpPT5GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXS5jYWxsKGUsdCksTWF0aEZsb29yOk1hdGguZmxvb3IsTnVtYmVyLE51bWJlcklzSW50ZWdlcjpOdW1iZXIuaXNJbnRlZ2VyLE51bWJlcklzTmFOOk51bWJlci5pc05hTixOdW1iZXJNQVhfU0FGRV9JTlRFR0VSOk51bWJlci5NQVhfU0FGRV9JTlRFR0VSLE51bWJlck1JTl9TQUZFX0lOVEVHRVI6TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsTnVtYmVyUGFyc2VJbnQ6TnVtYmVyLnBhcnNlSW50LE9iamVjdERlZmluZVByb3BlcnRpZXM6KGUsdCk9Pk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsdCksT2JqZWN0RGVmaW5lUHJvcGVydHk6KGUsdCxuKT0+T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxuKSxPYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6KGUsdCk9Pk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KSxPYmplY3RLZXlzOmU9Pk9iamVjdC5rZXlzKGUpLE9iamVjdFNldFByb3RvdHlwZU9mOihlLHQpPT5PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KSxQcm9taXNlLFByb21pc2VQcm90b3R5cGVDYXRjaDooZSx0KT0+ZS5jYXRjaCh0KSxQcm9taXNlUHJvdG90eXBlVGhlbjooZSx0LG4pPT5lLnRoZW4odCxuKSxQcm9taXNlUmVqZWN0OmU9PlByb21pc2UucmVqZWN0KGUpLFJlZmxlY3RBcHBseTpSZWZsZWN0LmFwcGx5LFJlZ0V4cFByb3RvdHlwZVRlc3Q6KGUsdCk9PmUudGVzdCh0KSxTYWZlU2V0OlNldCxTdHJpbmcsU3RyaW5nUHJvdG90eXBlU2xpY2U6KGUsdCxuKT0+ZS5zbGljZSh0LG4pLFN0cmluZ1Byb3RvdHlwZVRvTG93ZXJDYXNlOmU9PmUudG9Mb3dlckNhc2UoKSxTdHJpbmdQcm90b3R5cGVUb1VwcGVyQ2FzZTplPT5lLnRvVXBwZXJDYXNlKCksU3RyaW5nUHJvdG90eXBlVHJpbTplPT5lLnRyaW0oKSxTeW1ib2wsU3ltYm9sRm9yOlN5bWJvbC5mb3IsU3ltYm9sQXN5bmNJdGVyYXRvcjpTeW1ib2wuYXN5bmNJdGVyYXRvcixTeW1ib2xIYXNJbnN0YW5jZTpTeW1ib2wuaGFzSW5zdGFuY2UsU3ltYm9sSXRlcmF0b3I6U3ltYm9sLml0ZXJhdG9yLFR5cGVkQXJyYXlQcm90b3R5cGVTZXQ6KGUsdCxuKT0+ZS5zZXQodCxuKSxVaW50OEFycmF5fX0sNzc1OihlLHQsbik9Pntjb25zdCByPW4oNDg1KSxvPU9iamVjdC5nZXRQcm90b3R5cGVPZigoYXN5bmMgZnVuY3Rpb24oKXt9KSkuY29uc3RydWN0b3IsaT1nbG9iYWxUaGlzLkJsb2J8fHIuQmxvYixhPXZvaWQgMCE9PWk/ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBpfTpmdW5jdGlvbihlKXtyZXR1cm4hMX07Y2xhc3MgbCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBpbnB1dCB0byBiZSBhbiBBcnJheSwgZ290IFwiK3R5cGVvZiBlKTtsZXQgdD1cIlwiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPWAgICAgJHtlW25dLnN0YWNrfVxcbmA7c3VwZXIodCksdGhpcy5uYW1lPVwiQWdncmVnYXRlRXJyb3JcIix0aGlzLmVycm9ycz1lfX1lLmV4cG9ydHM9e0FnZ3JlZ2F0ZUVycm9yOmwsa0VtcHR5T2JqZWN0Ok9iamVjdC5mcmVlemUoe30pLG9uY2UoZSl7bGV0IHQ9ITE7cmV0dXJuIGZ1bmN0aW9uKC4uLm4pe3R8fCh0PSEwLGUuYXBwbHkodGhpcyxuKSl9fSxjcmVhdGVEZWZlcnJlZFByb21pc2U6ZnVuY3Rpb24oKXtsZXQgZSx0O3JldHVybntwcm9taXNlOm5ldyBQcm9taXNlKCgobixyKT0+e2U9bix0PXJ9KSkscmVzb2x2ZTplLHJlamVjdDp0fX0scHJvbWlzaWZ5OmU9Pm5ldyBQcm9taXNlKCgodCxuKT0+e2UoKChlLC4uLnIpPT5lP24oZSk6dCguLi5yKSkpfSkpLGRlYnVnbG9nOigpPT5mdW5jdGlvbigpe30sZm9ybWF0OihlLC4uLnQpPT5lLnJlcGxhY2UoLyUoW3NkaWZqXSkvZywoZnVuY3Rpb24oLi4uW2Usbl0pe2NvbnN0IHI9dC5zaGlmdCgpO3JldHVyblwiZlwiPT09bj9yLnRvRml4ZWQoNik6XCJqXCI9PT1uP0pTT04uc3RyaW5naWZ5KHIpOlwic1wiPT09biYmXCJvYmplY3RcIj09dHlwZW9mIHI/YCR7ci5jb25zdHJ1Y3RvciE9PU9iamVjdD9yLmNvbnN0cnVjdG9yLm5hbWU6XCJcIn0ge31gLnRyaW0oKTpyLnRvU3RyaW5nKCl9KSksaW5zcGVjdChlKXtzd2l0Y2godHlwZW9mIGUpe2Nhc2VcInN0cmluZ1wiOmlmKGUuaW5jbHVkZXMoXCInXCIpKXtpZighZS5pbmNsdWRlcygnXCInKSlyZXR1cm5gXCIke2V9XCJgO2lmKCFlLmluY2x1ZGVzKFwiYFwiKSYmIWUuaW5jbHVkZXMoXCIke1wiKSlyZXR1cm5gXFxgJHtlfVxcYGB9cmV0dXJuYCcke2V9J2A7Y2FzZVwibnVtYmVyXCI6cmV0dXJuIGlzTmFOKGUpP1wiTmFOXCI6T2JqZWN0LmlzKGUsLTApP1N0cmluZyhlKTplO2Nhc2VcImJpZ2ludFwiOnJldHVybmAke1N0cmluZyhlKX1uYDtjYXNlXCJib29sZWFuXCI6Y2FzZVwidW5kZWZpbmVkXCI6cmV0dXJuIFN0cmluZyhlKTtjYXNlXCJvYmplY3RcIjpyZXR1cm5cInt9XCJ9fSx0eXBlczp7aXNBc3luY0Z1bmN0aW9uOmU9PmUgaW5zdGFuY2VvZiBvLGlzQXJyYXlCdWZmZXJWaWV3OmU9PkFycmF5QnVmZmVyLmlzVmlldyhlKX0saXNCbG9iOmF9LGUuZXhwb3J0cy5wcm9taXNpZnkuY3VzdG9tPVN5bWJvbC5mb3IoXCJub2RlanMudXRpbC5wcm9taXNpZnkuY3VzdG9tXCIpfSwyOTI6KGUsdCxuKT0+e2NvbnN0e0J1ZmZlcjpyfT1uKDQ4NSkse09iamVjdERlZmluZVByb3BlcnR5Om8sT2JqZWN0S2V5czppLFJlZmxlY3RBcHBseTphfT1uKDE5MSkse3Byb21pc2lmeTp7Y3VzdG9tOmx9fT1uKDc3NSkse3N0cmVhbVJldHVybmluZ09wZXJhdG9yczpzLHByb21pc2VSZXR1cm5pbmdPcGVyYXRvcnM6Y309big1NTQpLHtjb2Rlczp7RVJSX0lMTEVHQUxfQ09OU1RSVUNUT1I6dX19PW4oMTQxKSxmPW4oODE4KSx7cGlwZWxpbmU6ZH09big3NTQpLHtkZXN0cm95ZXI6cH09bigyMzApLGg9big4NiksZz1uKDc2MCksdj1uKDEzMiksbT1lLmV4cG9ydHM9bigyMDApLlN0cmVhbTttLmlzRGlzdHVyYmVkPXYuaXNEaXN0dXJiZWQsbS5pc0Vycm9yZWQ9di5pc0Vycm9yZWQsbS5pc1JlYWRhYmxlPXYuaXNSZWFkYWJsZSxtLlJlYWRhYmxlPW4oODU4KTtmb3IoY29uc3QgeSBvZiBpKHMpKXtjb25zdCB3PXNbeV07ZnVuY3Rpb24gYiguLi5lKXtpZihuZXcudGFyZ2V0KXRocm93IHUoKTtyZXR1cm4gbS5SZWFkYWJsZS5mcm9tKGEodyx0aGlzLGUpKX1vKGIsXCJuYW1lXCIse19fcHJvdG9fXzpudWxsLHZhbHVlOncubmFtZX0pLG8oYixcImxlbmd0aFwiLHtfX3Byb3RvX186bnVsbCx2YWx1ZTp3Lmxlbmd0aH0pLG8obS5SZWFkYWJsZS5wcm90b3R5cGUseSx7X19wcm90b19fOm51bGwsdmFsdWU6YixlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWZvcihjb25zdCB4IG9mIGkoYykpe2NvbnN0IF89Y1t4XTtmdW5jdGlvbiBPKC4uLmUpe2lmKG5ldy50YXJnZXQpdGhyb3cgdSgpO3JldHVybiBhKF8sdGhpcyxlKX1vKE8sXCJuYW1lXCIse19fcHJvdG9fXzpudWxsLHZhbHVlOl8ubmFtZX0pLG8oTyxcImxlbmd0aFwiLHtfX3Byb3RvX186bnVsbCx2YWx1ZTpfLmxlbmd0aH0pLG8obS5SZWFkYWJsZS5wcm90b3R5cGUseCx7X19wcm90b19fOm51bGwsdmFsdWU6TyxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfW0uV3JpdGFibGU9bigzNzMpLG0uRHVwbGV4PW4oMTgyKSxtLlRyYW5zZm9ybT1uKDIxMCksbS5QYXNzVGhyb3VnaD1uKDQ2NyksbS5waXBlbGluZT1kO2NvbnN0e2FkZEFib3J0U2lnbmFsOkN9PW4oMzc0KTttLmFkZEFib3J0U2lnbmFsPUMsbS5maW5pc2hlZD1oLG0uZGVzdHJveT1wLG0uY29tcG9zZT1mLG8obSxcInByb21pc2VzXCIse19fcHJvdG9fXzpudWxsLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDooKT0+Z30pLG8oZCxsLHtfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiEwLGdldDooKT0+Zy5waXBlbGluZX0pLG8oaCxsLHtfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiEwLGdldDooKT0+Zy5maW5pc2hlZH0pLG0uU3RyZWFtPW0sbS5faXNVaW50OEFycmF5PWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgVWludDhBcnJheX0sbS5fdWludDhBcnJheVRvQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiByLmZyb20oZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCl9fSw3NjA6KGUsdCxuKT0+e2NvbnN0e0FycmF5UHJvdG90eXBlUG9wOnIsUHJvbWlzZTpvfT1uKDE5MSkse2lzSXRlcmFibGU6aSxpc05vZGVTdHJlYW06YSxpc1dlYlN0cmVhbTpsfT1uKDEzMikse3BpcGVsaW5lSW1wbDpzfT1uKDc1NCkse2ZpbmlzaGVkOmN9PW4oODYpO24oOTEpLGUuZXhwb3J0cz17ZmluaXNoZWQ6YyxwaXBlbGluZTpmdW5jdGlvbiguLi5lKXtyZXR1cm4gbmV3IG8oKCh0LG4pPT57bGV0IG8sYztjb25zdCB1PWVbZS5sZW5ndGgtMV07aWYodSYmXCJvYmplY3RcIj09dHlwZW9mIHUmJiFhKHUpJiYhaSh1KSYmIWwodSkpe2NvbnN0IHQ9cihlKTtvPXQuc2lnbmFsLGM9dC5lbmR9cyhlLCgoZSxyKT0+e2U/bihlKTp0KHIpfSkse3NpZ25hbDpvLGVuZDpjfSl9KSl9fX0sNTMzOmU9Pnt2YXIgdCxuLHI9ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIG8oKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIGkoKXt0aHJvdyBuZXcgRXJyb3IoXCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gYShlKXtpZih0PT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKCh0PT09b3x8IXQpJiZzZXRUaW1lb3V0KXJldHVybiB0PXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gdChlLDApfWNhdGNoKG4pe3RyeXtyZXR1cm4gdC5jYWxsKG51bGwsZSwwKX1jYXRjaChuKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSwwKX19fSFmdW5jdGlvbigpe3RyeXt0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpvfWNhdGNoKGUpe3Q9b310cnl7bj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0Oml9Y2F0Y2goZSl7bj1pfX0oKTt2YXIgbCxzPVtdLGM9ITEsdT0tMTtmdW5jdGlvbiBmKCl7YyYmbCYmKGM9ITEsbC5sZW5ndGg/cz1sLmNvbmNhdChzKTp1PS0xLHMubGVuZ3RoJiZkKCkpfWZ1bmN0aW9uIGQoKXtpZighYyl7dmFyIGU9YShmKTtjPSEwO2Zvcih2YXIgdD1zLmxlbmd0aDt0Oyl7Zm9yKGw9cyxzPVtdOysrdTx0OylsJiZsW3VdLnJ1bigpO3U9LTEsdD1zLmxlbmd0aH1sPW51bGwsYz0hMSxmdW5jdGlvbihlKXtpZihuPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoZSk7aWYoKG49PT1pfHwhbikmJmNsZWFyVGltZW91dClyZXR1cm4gbj1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXtyZXR1cm4gbihlKX1jYXRjaCh0KXt0cnl7cmV0dXJuIG4uY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBuLmNhbGwodGhpcyxlKX19fShlKX19ZnVuY3Rpb24gcChlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fWZ1bmN0aW9uIGgoKXt9ci5uZXh0VGljaz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3MucHVzaChuZXcgcChlLHQpKSwxIT09cy5sZW5ndGh8fGN8fGEoZCl9LHAucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LHIudGl0bGU9XCJicm93c2VyXCIsci5icm93c2VyPSEwLHIuZW52PXt9LHIuYXJndj1bXSxyLnZlcnNpb249XCJcIixyLnZlcnNpb25zPXt9LHIub249aCxyLmFkZExpc3RlbmVyPWgsci5vbmNlPWgsci5vZmY9aCxyLnJlbW92ZUxpc3RlbmVyPWgsci5yZW1vdmVBbGxMaXN0ZW5lcnM9aCxyLmVtaXQ9aCxyLnByZXBlbmRMaXN0ZW5lcj1oLHIucHJlcGVuZE9uY2VMaXN0ZW5lcj1oLHIubGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybltdfSxyLmJpbmRpbmc9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWRcIil9LHIuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuXCIvXCJ9LHIuY2hkaXI9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkXCIpfSxyLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSwzNzc6KGUsdCxuKT0+e3ZhciByPW4oNDg1KSxvPXIuQnVmZmVyO2Z1bmN0aW9uIGkoZSx0KXtmb3IodmFyIG4gaW4gZSl0W25dPWVbbl19ZnVuY3Rpb24gYShlLHQsbil7cmV0dXJuIG8oZSx0LG4pfW8uZnJvbSYmby5hbGxvYyYmby5hbGxvY1Vuc2FmZSYmby5hbGxvY1Vuc2FmZVNsb3c/ZS5leHBvcnRzPXI6KGkocix0KSx0LkJ1ZmZlcj1hKSxpKG8sYSksYS5mcm9tPWZ1bmN0aW9uKGUsdCxuKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXJcIik7cmV0dXJuIG8oZSx0LG4pfSxhLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlclwiKTt2YXIgcj1vKGUpO3JldHVybiB2b2lkIDAhPT10P1wic3RyaW5nXCI9PXR5cGVvZiBuP3IuZmlsbCh0LG4pOnIuZmlsbCh0KTpyLmZpbGwoMCkscn0sYS5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlclwiKTtyZXR1cm4gbyhlKX0sYS5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXJcIik7cmV0dXJuIHIuU2xvd0J1ZmZlcihlKX19LDQ2NDooZSx0LG4pPT57dmFyIHI9bigzNzcpLkJ1ZmZlcixvPXIuaXNFbmNvZGluZ3x8ZnVuY3Rpb24oZSl7c3dpdGNoKChlPVwiXCIrZSkmJmUudG9Mb3dlckNhc2UoKSl7Y2FzZVwiaGV4XCI6Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6Y2FzZVwiYXNjaWlcIjpjYXNlXCJiaW5hcnlcIjpjYXNlXCJiYXNlNjRcIjpjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpjYXNlXCJyYXdcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX07ZnVuY3Rpb24gaShlKXt2YXIgdDtzd2l0Y2godGhpcy5lbmNvZGluZz1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlKXtpZighZSlyZXR1cm5cInV0ZjhcIjtmb3IodmFyIHQ7Oylzd2l0Y2goZSl7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuXCJ1dGY4XCI7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuXCJ1dGYxNmxlXCI7Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuXCJsYXRpbjFcIjtjYXNlXCJiYXNlNjRcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImhleFwiOnJldHVybiBlO2RlZmF1bHQ6aWYodClyZXR1cm47ZT0oXCJcIitlKS50b0xvd2VyQ2FzZSgpLHQ9ITB9fShlKTtpZihcInN0cmluZ1wiIT10eXBlb2YgdCYmKHIuaXNFbmNvZGluZz09PW98fCFvKGUpKSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIitlKTtyZXR1cm4gdHx8ZX0oZSksdGhpcy5lbmNvZGluZyl7Y2FzZVwidXRmMTZsZVwiOnRoaXMudGV4dD1zLHRoaXMuZW5kPWMsdD00O2JyZWFrO2Nhc2VcInV0ZjhcIjp0aGlzLmZpbGxMYXN0PWwsdD00O2JyZWFrO2Nhc2VcImJhc2U2NFwiOnRoaXMudGV4dD11LHRoaXMuZW5kPWYsdD0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9ZCx2b2lkKHRoaXMuZW5kPXApfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9ci5hbGxvY1Vuc2FmZSh0KX1mdW5jdGlvbiBhKGUpe3JldHVybiBlPD0xMjc/MDplPj41PT02PzI6ZT4+ND09MTQ/MzplPj4zPT0zMD80OmU+PjY9PTI/LTE6LTJ9ZnVuY3Rpb24gbChlKXt2YXIgdD10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLG49ZnVuY3Rpb24oZSx0LG4pe2lmKDEyOCE9KDE5MiZ0WzBdKSlyZXR1cm4gZS5sYXN0TmVlZD0wLFwi77+9XCI7aWYoZS5sYXN0TmVlZD4xJiZ0Lmxlbmd0aD4xKXtpZigxMjghPSgxOTImdFsxXSkpcmV0dXJuIGUubGFzdE5lZWQ9MSxcIu+/vVwiO2lmKGUubGFzdE5lZWQ+MiYmdC5sZW5ndGg+MiYmMTI4IT0oMTkyJnRbMl0pKXJldHVybiBlLmxhc3ROZWVkPTIsXCLvv71cIn19KHRoaXMsZSk7cmV0dXJuIHZvaWQgMCE9PW4/bjp0aGlzLmxhc3ROZWVkPD1lLmxlbmd0aD8oZS5jb3B5KHRoaXMubGFzdENoYXIsdCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KGUuY29weSh0aGlzLmxhc3RDaGFyLHQsMCxlLmxlbmd0aCksdm9pZCh0aGlzLmxhc3ROZWVkLT1lLmxlbmd0aCkpfWZ1bmN0aW9uIHMoZSx0KXtpZigoZS5sZW5ndGgtdCklMj09MCl7dmFyIG49ZS50b1N0cmluZyhcInV0ZjE2bGVcIix0KTtpZihuKXt2YXIgcj1uLmNoYXJDb2RlQXQobi5sZW5ndGgtMSk7aWYocj49NTUyOTYmJnI8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPWVbZS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1lW2UubGVuZ3RoLTFdLG4uc2xpY2UoMCwtMSl9cmV0dXJuIG59cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09ZVtlLmxlbmd0aC0xXSxlLnRvU3RyaW5nKFwidXRmMTZsZVwiLHQsZS5sZW5ndGgtMSl9ZnVuY3Rpb24gYyhlKXt2YXIgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOlwiXCI7aWYodGhpcy5sYXN0TmVlZCl7dmFyIG49dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZDtyZXR1cm4gdCt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKFwidXRmMTZsZVwiLDAsbil9cmV0dXJuIHR9ZnVuY3Rpb24gdShlLHQpe3ZhciBuPShlLmxlbmd0aC10KSUzO3JldHVybiAwPT09bj9lLnRvU3RyaW5nKFwiYmFzZTY0XCIsdCk6KHRoaXMubGFzdE5lZWQ9My1uLHRoaXMubGFzdFRvdGFsPTMsMT09PW4/dGhpcy5sYXN0Q2hhclswXT1lW2UubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPWVbZS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1lW2UubGVuZ3RoLTFdKSxlLnRvU3RyaW5nKFwiYmFzZTY0XCIsdCxlLmxlbmd0aC1uKSl9ZnVuY3Rpb24gZihlKXt2YXIgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOlwiXCI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dCt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKFwiYmFzZTY0XCIsMCwzLXRoaXMubGFzdE5lZWQpOnR9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBwKGUpe3JldHVybiBlJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOlwiXCJ9dC5TdHJpbmdEZWNvZGVyPWksaS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSl7aWYoMD09PWUubGVuZ3RoKXJldHVyblwiXCI7dmFyIHQsbjtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0odD10aGlzLmZpbGxMYXN0KGUpKSlyZXR1cm5cIlwiO249dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSBuPTA7cmV0dXJuIG48ZS5sZW5ndGg/dD90K3RoaXMudGV4dChlLG4pOnRoaXMudGV4dChlLG4pOnR8fFwiXCJ9LGkucHJvdG90eXBlLmVuZD1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOlwiXCI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dCtcIu+/vVwiOnR9LGkucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC5sZW5ndGgtMTtpZihyPG4pcmV0dXJuIDA7dmFyIG89YSh0W3JdKTtyZXR1cm4gbz49MD8obz4wJiYoZS5sYXN0TmVlZD1vLTEpLG8pOi0tcjxufHwtMj09PW8/MDoobz1hKHRbcl0pKT49MD8obz4wJiYoZS5sYXN0TmVlZD1vLTIpLG8pOi0tcjxufHwtMj09PW8/MDoobz1hKHRbcl0pKT49MD8obz4wJiYoMj09PW8/bz0wOmUubGFzdE5lZWQ9by0zKSxvKTowfSh0aGlzLGUsdCk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIGUudG9TdHJpbmcoXCJ1dGY4XCIsdCk7dGhpcy5sYXN0VG90YWw9bjt2YXIgcj1lLmxlbmd0aC0obi10aGlzLmxhc3ROZWVkKTtyZXR1cm4gZS5jb3B5KHRoaXMubGFzdENoYXIsMCxyKSxlLnRvU3RyaW5nKFwidXRmOFwiLHQscil9LGkucHJvdG90eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKGUpe2lmKHRoaXMubGFzdE5lZWQ8PWUubGVuZ3RoKXJldHVybiBlLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO2UuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCxlLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09ZS5sZW5ndGh9fSw1NDooZSx0LG4pPT57bi5kKHQse01TOigpPT5rLGNGOigpPT5SLEFLOigpPT5QLE1fOigpPT5JLGNYOigpPT5BLEJUOigpPT5yZSxfVzooKT0+SCxQZzooKT0+aGUsJGo6KCk9PnRlLFUkOigpPT5OLFU3OigpPT5GfSk7dmFyIHI9e2Q6KGUsdCk9Pntmb3IodmFyIG4gaW4gdClyLm8odCxuKSYmIXIubyhlLG4pJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiEwLGdldDp0W25dfSl9LG86KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxvPXt9O3IuZChvLHtNUzooKT0+aSxjRjooKT0+YSxBSzooKT0+cyxNXzooKT0+bCxjWDooKT0+YyxZZDooKT0+dixuajooKT0+dSxPNDooKT0+TSxfVzooKT0+ZixVJDooKT0+cCxVNzooKT0+aH0pO2NsYXNzIGkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlLHQpe3ZhciBuLHI7c3VwZXIoZT1udWxsIT09KG49bnVsbCE9ZT9lOm51bGw9PXQ/dm9pZCAwOnQubWVzc2FnZSkmJnZvaWQgMCE9PW4/bjpcIkFuIHVuZXhwZWN0ZWQgZXJyb3IgaGFzIG9jY3VycmVkXCIpLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdGhpcy5zdGFjaz0oZT90aGlzLnN0YWNrOm51bGwhPT0ocj1udWxsPT10P3ZvaWQgMDp0LnN0YWNrKSYmdm9pZCAwIT09cj9yOnRoaXMuc3RhY2spLnJlcGxhY2UoL14oXFx3KkVycm9yKS8sYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfWApfX1jbGFzcyBhIGV4dGVuZHMgaXtjb25zdHJ1Y3RvcihlLHQsbil7dmFyIHI7c3VwZXIoZT1udWxsIT09KHI9bnVsbCE9ZT9lOm51bGw9PW4/dm9pZCAwOm4ubWVzc2FnZSkmJnZvaWQgMCE9PXI/cjpcIkFuIGVycm9yIG9jY3VycmVkIHdoZW4gZXhlY3V0aW5nIHRoZSBBUEkgcmVxdWVzdFwiLG4pLHRoaXMuc3RhdHVzPXR9fWNsYXNzIGwgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUsdCl7dmFyIG47c3VwZXIoZT1udWxsIT09KG49bnVsbCE9ZT9lOm51bGw9PXQ/dm9pZCAwOnQubWVzc2FnZSkmJnZvaWQgMCE9PW4/bjpcIkFuIGF1dGhvcml6YXRpb24gZXJyb3Igb2NjdXJyZWRcIix0KX19Y2xhc3MgcyBleHRlbmRzIGl7Y29uc3RydWN0b3IoZSx0KXt2YXIgbjtzdXBlcihlPW51bGwhPT0obj1udWxsIT1lP2U6bnVsbD09dD92b2lkIDA6dC5tZXNzYWdlKSYmdm9pZCAwIT09bj9uOlwiVGhlIEFQSSByZXF1ZXN0IGZhaWxlZCBhcyB0aGUgYXV0aG9yaXphdGlvbiB0b2tlbnMgaGF2ZSBleHBpcmVkXCIsdCl9fWNsYXNzIGMgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUsdCl7dmFyIG47c3VwZXIoZT1udWxsIT09KG49bnVsbCE9ZT9lOm51bGw9PXQ/dm9pZCAwOnQubWVzc2FnZSkmJnZvaWQgMCE9PW4/bjpcIkFuIGluaXRpYWxpemF0aW9uIGVycm9yIG9jY3VycmVkXCIsdCl9fWNsYXNzIHUgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUsdCl7dmFyIG47c3VwZXIoZT1udWxsIT09KG49bnVsbCE9ZT9lOm51bGw9PXQ/dm9pZCAwOnQubWVzc2FnZSkmJnZvaWQgMCE9PW4/bjpcIlRoZSBtZXRob2QgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkXCIsdCl9fWNsYXNzIGYgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGU9bnVsbCE9ZT9lOlwiSW52YWxpZCBwYXJhbWV0ZXIgZGV0ZWN0ZWRcIil9fWNvbnN0IGQ9ZT0+e2xldCB0PWZpbi5JbnRlZ3JhdGlvbnM7dHx8KGZpbi5JbnRlZ3JhdGlvbnM9e30sdD1maW4uSW50ZWdyYXRpb25zKTtsZXQgbj10W2VdO3JldHVybiBufHwodFtlXT17fSxuPXRbZV0pLG59LHA9ZT0+e2QoZSkubG9nZ2luZ0VuYWJsZWQ9ITF9LGg9KGUsdD1cIjAuMC4wXCIpPT57ZChlKS5sb2dnaW5nRW5hYmxlZD0hMCxnKGUpfSxnPWU9PmBbQG9wZW5maW4vJHtlLnRvTG93ZXJDYXNlKCl9XWA7Y2xhc3Mgdntjb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWU9ZSx0aGlzLnByZWZpeD1nKGUpLHRoaXMuaXNMb2dnaW5nRW5hYmxlZD10aGlzLmlzTG9nZ2luZ0VuYWJsZWQuYmluZCh0aGlzKSx0aGlzLmxvZ0Vycm9yPXRoaXMubG9nRXJyb3IuYmluZCh0aGlzKSx0aGlzLmxvZ0luZm89dGhpcy5sb2dJbmZvLmJpbmQodGhpcyksdGhpcy5sb2dXYXJuaW5nPXRoaXMubG9nV2FybmluZy5iaW5kKHRoaXMpfWlzTG9nZ2luZ0VuYWJsZWQoKXtyZXR1cm4gZCh0aGlzLm5hbWUpLmxvZ2dpbmdFbmFibGVkfWxvZ0Vycm9yKGUpe3RoaXMuaXNMb2dnaW5nRW5hYmxlZCgpJiYoZS5pbm5lckVycm9yP2NvbnNvbGUuZXJyb3IodGhpcy5wcmVmaXgsZSxcIlxcblxcbihpbm5lcilcIixlLmlubmVyRXJyb3IpOmNvbnNvbGUuZXJyb3IodGhpcy5wcmVmaXgsZSkpfWxvZ0luZm8oLi4uZSl7dGhpcy5pc0xvZ2dpbmdFbmFibGVkKCkmJnRoaXMucHJlZml4fWxvZ1dhcm5pbmcoLi4uZSl7dGhpcy5pc0xvZ2dpbmdFbmFibGVkKCkmJmNvbnNvbGUud2Fybih0aGlzLnByZWZpeCwuLi5lKX19Y29uc3QgbT1cIm9hdXRoLWFwaS1hdXRoLWZsb3dcIixDPShlLHQsbixyLG8sYSxsLHMpPT5hc3luYyBjPT57Y29uc3QgdT1uZXcgVVJMKGMpO2lmKDAhPT11LmhyZWYudG9Mb3dlckNhc2UoKS5pbmRleE9mKG8udG9Mb3dlckNhc2UoKSkpcmV0dXJuITE7aWYod2luZG93LmNsZWFySW50ZXJ2YWwocyksd2luZG93LmNsZWFyVGltZW91dCh0KSx3aW5kb3cuY2xlYXJUaW1lb3V0KG4pLGUucmVtb3ZlQWxsTGlzdGVuZXJzKCksZS5jbG9zZSghMCksdS5zZWFyY2hQYXJhbXMuZ2V0KFwiZXJyb3JcIikpe2NvbnN0IGU9bmV3IGkoXCJBdXRob3JpemF0aW9uIGVycm9yXCIpO3JldHVybiBlLmRhdGE9dS50b1N0cmluZygpLGwoZSksITB9aWYodS5zZWFyY2hQYXJhbXMuZ2V0KFwic3RhdGVcIikhPT1yKXtjb25zdCBlPW5ldyBpKFwiU3RhdGUgbWlzbWF0Y2hcIik7cmV0dXJuIGUuZGF0YT11LnRvU3RyaW5nKCksbChlKSwhMH1jb25zdCBmPXUuc2VhcmNoUGFyYW1zLmdldChcImNvZGVcIik7aWYoIWYpe2NvbnN0IGU9bmV3IGkoXCJBdXRob3JpemF0aW9uIGNvZGUgbWlzc2luZ1wiKTtyZXR1cm4gZS5kYXRhPXUudG9TdHJpbmcoKSxsKGUpLCEwfXJldHVybiBhKGYpLCEwfSx5PShlLHQsbixyKT0+YXN5bmMobyxhKT0+e2xldCBsO2NvbnN0IHM9d2luZG93LnNldFRpbWVvdXQoKCgpPT57d2luZG93LmNsZWFySW50ZXJ2YWwobCksd2luZG93LmNsZWFyVGltZW91dChzKSxlLnJlbW92ZUFsbExpc3RlbmVycygpLGUuY2xvc2UoITApLGEobmV3IGkoXCJBdXRob3JpemF0aW9uIHRpbWVkIG91dFwiKSl9KSwzZTUpO2UuYWRkTGlzdGVuZXIoXCJjbG9zaW5nXCIsKGFzeW5jKCk9PntyLmxvZ0luZm8oXCJVc2VyIGNsb3NlZCBhdXRoIHdpbmRvd1wiKSx3aW5kb3cuY2xlYXJJbnRlcnZhbChsKSx3aW5kb3cuY2xlYXJUaW1lb3V0KHMpLGUucmVtb3ZlQWxsTGlzdGVuZXJzKCksYShuZXcgaShcIkZhaWxlZCB0byBjb21wbGV0ZSBhdXRob3JpemF0aW9uIGNvZGUgZmxvd1wiKSl9KSk7Y29uc3QgYz13aW5kb3cuc2V0VGltZW91dCgoYXN5bmMoKT0+e3RyeXthd2FpdCBlLmlzU2hvd2luZygpfHwoci5sb2dJbmZvKFwiU2hvd2luZyBhdXRoIHdpbmRvd1wiKSxhd2FpdCBlLnNob3coITApLGF3YWl0IGUuZm9jdXMoKSl9Y2F0Y2goZSl7ci5sb2dXYXJuaW5nKFwiVW5hYmxlIHRvIHNob3cgYXV0aCB3aW5kb3dcIil9fSksMmUzKSx7dmVyc2lvbjp1fT1hd2FpdCBmaW4uU3lzdGVtLmdldFJ1bnRpbWVJbmZvKCk7cGFyc2VJbnQodS5zcGxpdChcIi5cIilbMF0sMTApPj0zMD9hd2FpdCBDKGUscyxjLHQsbixvLGEpKChhd2FpdCBlLmdldEluZm8oKSkudXJsKXx8YXdhaXQgZS5hZGRMaXN0ZW5lcihcInVybC1jaGFuZ2VkXCIsKGk9PntyLmxvZ0luZm8oXCJBdXRoIHdpbmRvdyBuYXZpZ2F0ZWQgdG9cIixpLnVybCksQyhlLHMsYyx0LG4sbyxhKShpLnVybCl9KSk6bD13aW5kb3cuc2V0SW50ZXJ2YWwoKCgpPT4oYXN5bmMoZSx0LG4scixvLGEsbCxzKT0+e2xldCBjO3RyeXtjPWF3YWl0IGUuZ2V0SW5mbygpfWNhdGNoKGUpe3JldHVybiB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0KSx3aW5kb3cuY2xlYXJUaW1lb3V0KG4pLHdpbmRvdy5jbGVhclRpbWVvdXQocikscyhuZXcgaShcIkNvdWxkIG5vdCBsb2NhdGUgYXV0aCB3aW5kb3dcIikpLCExfXJldHVybiBDKGUsbixyLG8sYSxsLHMsdCkoYy51cmwpfSkoZSxsLHMsYyx0LG4sbyxhKSksNTAwKX0sdz0oKT0+e2xldCBlLHQsbixyO2NvbnN0IG89YXN5bmModCxuPSExKT0+e2NvbnN0e2NvbW1hbmQ6cixkYXRhOmEsaWQ6bH09dCxzPXtjb21tYW5kOnIsaWQ6bH07dHJ5e2lmKCFlKXRocm93IG5ldyBFcnJvcihcIkFjY2VzcyB0b2tlbiBub3QgZm91bmRcIik7Y29uc3R7YXBpUmVxdWVzdFVybDpyLGRhdGE6bCxoZWFkZXJzOmMsaHR0cE1ldGhvZDp1LGluY2x1ZGVBdXRob3JpemF0aW9uOmZ9PWEsZD1hd2FpdChhc3luYyh0LG4scixvLGkpPT57dmFyIGEsbDtjb25zdCBzPU9iamVjdC5hc3NpZ24oe0FjY2VwdDpcImFwcGxpY2F0aW9uL2pzb25cIn0sbyk7XCJQQVRDSFwiIT09biYmXCJQT1NUXCIhPT1uJiZcIlBVVFwiIT09bnx8L2NvbnRlbnQtdHlwZS9pLnRlc3QoT2JqZWN0LmtleXMocykuam9pbihcIixcIikpfHwoc1tcIkNvbnRlbnQtVHlwZVwiXT1cImFwcGxpY2F0aW9uL2pzb25cIiksaSYmKHMuQXV0aG9yaXphdGlvbj1gQmVhcmVyICR7ZX1gKTtjb25zdCBjPWF3YWl0IGZldGNoKHQse2JvZHk6XCJvYmplY3RcIj09dHlwZW9mIHI/SlNPTi5zdHJpbmdpZnkocik6cixoZWFkZXJzOnMsbWV0aG9kOm59KTtpZighYy5vayl7Y29uc3QgZT17bWVzc2FnZTpcIkZhaWxlZCB0byBleGVjdXRlIEFQSSByZXF1ZXN0XCJ9O3JldHVybihudWxsPT09KGE9Yy5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaW5jbHVkZXMoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSYmKGUuZGF0YT1hd2FpdCBjLmpzb24oKSksW2Muc3RhdHVzLHZvaWQgMCx2b2lkIDAsZV19bGV0IHU7Y29uc3QgZj1udWxsIT09KGw9Yy5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKSkmJnZvaWQgMCE9PWw/bDpcIlwiO3N3aXRjaCghMCl7Y2FzZSFmOmJyZWFrO2Nhc2UvXmFwcGxpY2F0aW9uXFwvKFxcdytcXCspP2pzb24vaS50ZXN0KGYpOnU9YXdhaXQgYy5qc29uKCk7YnJlYWs7Y2FzZS9ebXVsdGlwYXJ0XFwvZm9ybS0/ZGF0YXxeYXBwbGljYXRpb25cXC94LT93d3ctP2Zvcm0tP3VybGVuY29kZWQvaS50ZXN0KGYpOnU9YXdhaXQgYy5mb3JtRGF0YSgpO2JyZWFrO2Nhc2UvXmFwcGxpY2F0aW9uXFwvKChbXi9dKyk/eG1sfHZuZFxcLm9wZW54bWxmb3JtYXRzKXxedGV4dFxcL3xeaW1hZ2VcXC9zdmcvaS50ZXN0KGYpOnU9YXdhaXQgYy50ZXh0KCk7YnJlYWs7ZGVmYXVsdDp1PWF3YWl0IGMuYXJyYXlCdWZmZXIoKX1yZXR1cm5bYy5zdGF0dXMsdSxmLHZvaWQgMF19KShyLHUsbCxjLGYpLFtwLGgsZyx2XT1kO2lmKHMuc3RhdHVzPXAsdil7aWYoIW4mJjQwMT09PXApe2NvbnN0W2Usbl09YXdhaXQgaSgpO3JldHVybiBuPyhzLnN0YXR1cz1lLHMuZXJyb3I9bixzKTphd2FpdCBvKHQsITApfXMuZXJyb3I9dn1lbHNlIGgmJihzLmRhdGE9aCxzLnR5cGU9Zyl9Y2F0Y2goZSl7ZSBpbnN0YW5jZW9mIEVycm9yP3MuZXJyb3I9e21lc3NhZ2U6ZS5tZXNzYWdlfTpzLmVycm9yPXttZXNzYWdlOlwiRmFpbGVkIHRvIGV4ZWN1dGUgQVBJIHJlcXVlc3RcIn19cmV0dXJuIFByb21pc2UucmVzb2x2ZShzKX0saT1hc3luYygpPT57dmFyIG87aWYoIW4pdGhyb3cgbmV3IEVycm9yKFwiQXV0aG9yaXphdGlvbiBzZXJ2ZXIgbWV0YWRhdGEgbm90IHNldFwiKTtpZighdCl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgSUQgbm90IHNldFwiKTtjb25zdCBpPWBncmFudF90eXBlPXJlZnJlc2hfdG9rZW4mY2xpZW50X2lkPSR7dH0mcmVmcmVzaF90b2tlbj0ke3J9YCxhPWF3YWl0IGZldGNoKG4udG9rZW5fZW5kcG9pbnQse2JvZHk6aSxoZWFkZXJzOntBY2NlcHQ6XCJhcHBsaWNhdGlvbi9qc29uXCIsXCJDb250ZW50LVR5cGVcIjpcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwifSxtZXRob2Q6XCJQT1NUXCJ9KTtpZighYS5vayl7Y29uc3QgZT17bWVzc2FnZTpcIkZhaWxlZCB0byByZWZyZXNoIGFjY2VzcyB0b2tlblwifTtyZXR1cm4obnVsbD09PShvPWEuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIikpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmluY2x1ZGVzKFwiYXBwbGljYXRpb24vanNvblwiKSkmJihlLmRhdGE9YXdhaXQgYS5qc29uKCkpLFthLnN0YXR1cyxlXX1jb25zdCBsPWF3YWl0IGEuanNvbigpO3JldHVybiBlPWwuYWNjZXNzX3Rva2VuLFthLnN0YXR1c119O3NlbGYub25tZXNzYWdlPWFzeW5jIGk9Pntjb25zdHtjb21tYW5kOmEsaWQ6bH09aS5kYXRhO2xldCBzPXtjb21tYW5kOmEsaWQ6bH07c3dpdGNoKGEpe2Nhc2VcIkFQSV9SRVFVRVNUXCI6cz1hd2FpdCBvKGkuZGF0YSk7YnJlYWs7Y2FzZVwiQ09ERV9FWENIQU5HRVwiOnM9YXdhaXQoYXN5bmMgbz0+e3ZhciBpO2NvbnN0e2NvbW1hbmQ6YSxkYXRhOmwsaWQ6c309byxjPXtjb21tYW5kOmEsaWQ6c307dHJ5e2lmKCFuKXRocm93IG5ldyBFcnJvcihcIkF1dGhvcml6YXRpb24gc2VydmVyIG1ldGFkYXRhIG5vdCBzZXRcIik7aWYoIXQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IElEIG5vdCBzZXRcIik7Y29uc3R7Y29kZTpvLGNvZGVWZXJpZmllcjphLHJlZGlyZWN0VXJpOnN9PWwsdT1gZ3JhbnRfdHlwZT1hdXRob3JpemF0aW9uX2NvZGUmY2xpZW50X2lkPSR7dH0mY29kZT0ke299JmNvZGVfdmVyaWZpZXI9JHthfSZyZWRpcmVjdF91cmk9JHtzfWAsZj1hd2FpdCBmZXRjaChuLnRva2VuX2VuZHBvaW50LHtib2R5OnUsaGVhZGVyczp7QWNjZXB0OlwiYXBwbGljYXRpb24vanNvblwiLFwiQ29udGVudC1UeXBlXCI6XCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIn0sbWV0aG9kOlwiUE9TVFwifSk7aWYoZi5vayl7Y29uc3QgdD1hd2FpdCBmLmpzb24oKTtlPXQuYWNjZXNzX3Rva2VuLHI9dC5yZWZyZXNoX3Rva2VufWVsc2V7Y29uc3QgZT17bWVzc2FnZTpcIkZhaWxlZCB0byByZXRyaWV2ZSB0b2tlbnNcIn07KG51bGw9PT0oaT1mLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpKXx8dm9pZCAwPT09aT92b2lkIDA6aS5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL2pzb25cIikpJiYoZS5kYXRhPWF3YWl0IGYuanNvbigpKSxjLmVycm9yPWV9fWNhdGNoKGUpe2UgaW5zdGFuY2VvZiBFcnJvcj9jLmVycm9yPXttZXNzYWdlOmUubWVzc2FnZX06Yy5lcnJvcj17bWVzc2FnZTpcIkZhaWxlZCB0byByZXRyaWV2ZSB0b2tlbnNcIn19cmV0dXJuIFByb21pc2UucmVzb2x2ZShjKX0pKGkuZGF0YSk7YnJlYWs7Y2FzZVwiRVhQSVJFX1RPS0VOU1wiOnM9YXdhaXQoYXN5bmMgdD0+e3ZhciBvO2NvbnN0e2NvbW1hbmQ6aSxleHBpcmVBY2Nlc3NUb2tlbk9ubHk6YSxpZDpsfT10LHM9e2NvbW1hbmQ6aSxpZDpsfTt0cnl7aWYoIWEmJiFyKXRocm93IG5ldyBFcnJvcihcIlJlZnJlc2ggdG9rZW4gbm90IGZvdW5kXCIpO2lmKCFuKXRocm93IG5ldyBFcnJvcihcIkF1dGhvcml6YXRpb24gc2VydmVyIG1ldGFkYXRhIG5vdCBzZXRcIik7aWYoIW4ucmV2b2NhdGlvbl9lbmRwb2ludCl0aHJvdyBuZXcgRXJyb3IoXCJSZXZvY2F0aW9uIGVuZHBvaW50IG1pc3NpbmcgaW4gYXV0aG9yaXphdGlvbiBzZXJ2ZXIgbWV0YWRhdGFcIik7Y29uc3QgdD1hP2U6cixpPWF3YWl0IGZldGNoKGAke24ucmV2b2NhdGlvbl9lbmRwb2ludH0/dG9rZW49JHt0fWAse2hlYWRlcnM6e0FjY2VwdDpcImFwcGxpY2F0aW9uL2pzb25cIn19KTtpZighaS5vayl7Y29uc3QgZT17bWVzc2FnZTpcIkZhaWxlZCB0byByZXZva2UgdG9rZW5zXCJ9OyhudWxsPT09KG89aS5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKSl8fHZvaWQgMD09PW8/dm9pZCAwOm8uaW5jbHVkZXMoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSYmKGUuZGF0YT1hd2FpdCBpLmpzb24oKSkscy5lcnJvcj1lfX1jYXRjaChlKXtlIGluc3RhbmNlb2YgRXJyb3I/cy5lcnJvcj17bWVzc2FnZTplLm1lc3NhZ2V9OnMuZXJyb3I9e21lc3NhZ2U6XCJGYWlsZWQgdG8gcmV2b2tlIHRva2Vuc1wifX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHMpfSkoaS5kYXRhKTticmVhaztjYXNlXCJJTklUXCI6cz1hd2FpdChhc3luYyBlPT57Y29uc3R7Y29tbWFuZDpyLGRhdGE6byxpZDppfT1lLGE9e2NvbW1hbmQ6cixpZDppfTtyZXR1cm4gdD1vLmNsaWVudElkLG49by5tZXRhZGF0YSxQcm9taXNlLnJlc29sdmUoYSl9KShpLmRhdGEpO2JyZWFrO2RlZmF1bHQ6cy5lcnJvcj1uZXcgRXJyb3IoYFVuZXhwZWN0ZWQgb2F1dGggd29ya2VyIGNvbW1hbmQ6ICR7YX1gKX1zZWxmLnBvc3RNZXNzYWdlKHMpfX07dmFyIGI7IWZ1bmN0aW9uKGUpe2UuQXBpUmVxdWVzdD1cIkFQSV9SRVFVRVNUXCIsZS5Db2RlRXhjaGFuZ2U9XCJDT0RFX0VYQ0hBTkdFXCIsZS5FeHBpcmVUb2tlbnM9XCJFWFBJUkVfVE9LRU5TXCIsZS5Jbml0PVwiSU5JVFwifShifHwoYj17fSkpO2NvbnN0IHg9W10sXz1lPT57eC5wdXNoKGUpfSxPPShlLHQpPT4obixyLG8pPT5uZXcgUHJvbWlzZSgoKGksYSk9Pntjb25zdCBsPXtjb21tYW5kOmIuQ29kZUV4Y2hhbmdlLGRhdGE6e2NvZGU6bixjb2RlVmVyaWZpZXI6cixyZWRpcmVjdFVyaTpvfSxpZDpEYXRlLm5vdygpLnRvU3RyaW5nKCl9LHtjb21tYW5kOnMsaWQ6Y309bDtfKHtjb21tYW5kOnMsaWQ6YyxyZWplY3Q6YSxyZXNvbHZlOml9KSxlLnBvc3RNZXNzYWdlKGwpLHQubG9nSW5mbyhcIldvcmtlciByZXF1ZXN0IHNlbnRcIixsKX0pKSxMPShlLHQsbik9PihyLG8saSxhLGwpPT5uZXcgUHJvbWlzZSgoKHMsYyk9Pntjb25zdCB1PXtjb21tYW5kOmIuQXBpUmVxdWVzdCxkYXRhOnthcGlSZXF1ZXN0VXJsOnIsY2xpZW50SWQ6ZSxkYXRhOmksaGVhZGVyczphLGh0dHBNZXRob2Q6byxpbmNsdWRlQXV0aG9yaXphdGlvbjpsfSxpZDpEYXRlLm5vdygpLnRvU3RyaW5nKCl9LHtjb21tYW5kOmYsaWQ6ZH09dTtfKHtjb21tYW5kOmYsaWQ6ZCxyZWplY3Q6YyxyZXNvbHZlOnN9KSx0LnBvc3RNZXNzYWdlKHUpLG4ubG9nSW5mbyhcIldvcmtlciByZXF1ZXN0IHNlbnRcIix1KX0pKSxFPShlLHQpPT5uPT5uZXcgUHJvbWlzZSgoKHIsbyk9Pntjb25zdCBpPXtjb21tYW5kOmIuRXhwaXJlVG9rZW5zLGV4cGlyZUFjY2Vzc1Rva2VuT25seTpuLGlkOkRhdGUubm93KCkudG9TdHJpbmcoKX0se2NvbW1hbmQ6YSxpZDpsfT1pO18oe2NvbW1hbmQ6YSxpZDpsLHJlamVjdDpvLHJlc29sdmU6cn0pLGUucG9zdE1lc3NhZ2UoaSksdC5sb2dJbmZvKFwiV29ya2VyIHJlcXVlc3Qgc2VudFwiLGkpfSkpLFM9KGUsdCk9Pntjb25zdCBuPXguZmluZEluZGV4KChuPT5uLmNvbW1hbmQ9PT10JiZuLmlkPT09ZSkpO24+PTAmJnguc3BsaWNlKG4sMSl9LGo9KGUsdCk9PmFzeW5jKCk9Pnt0cnl7YXdhaXQgRShlLHQpKCExKX1jYXRjaChlKXt0LmxvZ1dhcm5pbmcoZS5tZXNzYWdlKX1lLnRlcm1pbmF0ZSgpLHQubG9nSW5mbyhcIldvcmtlciB0ZXJtaW5hdGVkXCIpfTtjbGFzcyBNe2dldCBhcGlPcmlnaW4oKXtyZXR1cm4gdGhpcy5fYXBpT3JpZ2lufWdldCBjbGllbnRJZCgpe3JldHVybiB0aGlzLl9jbGllbnRJZH1nZXQgbG9nZ2VyKCl7cmV0dXJuIHRoaXMuX2xvZ2dlcn1nZXQgbWV0YWRhdGEoKXtyZXR1cm4gdGhpcy5fbWV0YWRhdGF9Z2V0IHdvcmtlcigpe3JldHVybiB0aGlzLl93b3JrZXJ9Y29uc3RydWN0b3IoZSx0LG4scixvKXtpZih0aGlzLmV4ZWN1dGVBcGlSZXF1ZXN0PWFzeW5jKGUsdD1cIkdFVFwiLG4scixvPSEwLGk9ITEpPT57dGhpcy5fbG9nZ2VyLmxvZ0luZm8oXCJFeGVjdXRlQXBpUmVxdWVzdCBzdGFydGVkXCIsZSx0LG4scik7dHJ5e2NvbnN0IGk9YXdhaXQoKGUsdCk9PmFzeW5jKG4scixvLGksbCk9Pnt0cnl7cmV0dXJuIGF3YWl0IHQuZXhlY3V0ZUFwaVJlcXVlc3QoYCR7ZX0ke259YCxyLG8saSxsKX1jYXRjaChlKXtsZXQgdDtjb25zdHtkYXRhOm4sbWVzc2FnZTpyLHN0YXR1czpvfT1lO3Rocm93IHQ9ZSBpbnN0YW5jZW9mIEVycm9yP25ldyBhKHIsbyk6XCJGYWlsZWQgdG8gcmVmcmVzaCBhY2Nlc3MgdG9rZW5cIj09PXI/bmV3IHMocik6bmV3IGEocixvKSx0LmRhdGE9bix0fX0pKHRoaXMuX2FwaU9yaWdpbix0aGlzLl93b3JrZXIpKGUsdCxuLHIsbyk7cmV0dXJuIHRoaXMuX2xvZ2dlci5sb2dJbmZvKFwiRXhlY3V0ZUFwaVJlcXVlc3QgY29tcGxldGVkXCIsaSksaX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgYSl7Y29uc3R7ZGF0YTp0LG1lc3NhZ2U6bixuYW1lOnIsc3RhY2s6b309ZSxpPXRoaXMuZ2V0RXJyb3JNZXNzYWdlRnJvbVNlcnZlclJlc3BvbnNlKHQpO2kmJihlLm1lc3NhZ2U9aSxlLnN0YWNrPW51bGw9PW8/dm9pZCAwOm8ucmVwbGFjZShgJHtyfTogJHtufWAsYCR7cn06ICR7aX1gKSl9dGhyb3cgaSYmdGhpcy5sb2dnZXIubG9nRXJyb3IoZSksZX19LCEoZSYmdCYmbiYmciYmbykpdGhyb3cgbmV3IGMoXCJQcm92aWRlciBoYXMgbm90IGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGNhbGwgaW5pdCB0byBjcmVhdGUgbmV3IGluc3RhbmNlcylcIik7dGhpcy5fYXBpT3JpZ2luPWUsdGhpcy5fY2xpZW50SWQ9dCx0aGlzLl9tZXRhZGF0YT1uLHRoaXMuX3dvcmtlcj1yLHRoaXMuX2xvZ2dlcj1vLHRoaXMuYXV0aG9yaXplPXRoaXMuYXV0aG9yaXplLmJpbmQodGhpcyksdGhpcy5jbG9zZT10aGlzLmNsb3NlLmJpbmQodGhpcyksdGhpcy5leGVjdXRlQXBpUmVxdWVzdD10aGlzLmV4ZWN1dGVBcGlSZXF1ZXN0LmJpbmQodGhpcyksdGhpcy5leHBpcmVUb2tlbnM9dGhpcy5leHBpcmVUb2tlbnMuYmluZCh0aGlzKSx0aGlzLmdldEVycm9yTWVzc2FnZUZyb21TZXJ2ZXJSZXNwb25zZT10aGlzLmdldEVycm9yTWVzc2FnZUZyb21TZXJ2ZXJSZXNwb25zZS5iaW5kKHRoaXMpfWFzeW5jIGF1dGhvcml6ZShlLHQsbil7aWYodGhpcy5fbG9nZ2VyLmxvZ0luZm8oXCJBdXRob3JpemUgc3RhcnRlZFwiLGUsdCxuKSwhdGhpcy5fbWV0YWRhdGF8fCF0aGlzLl9jbGllbnRJZHx8IXRoaXMuX3dvcmtlcil0aHJvdyBuZXcgYyhcIlByb3ZpZGVyIGhhcyBub3QgYmVlbiBwcm9wZXJseSBpbml0aWFsaXplZCAoY2FsbCBpbml0IHRvIGNyZWF0ZSBuZXcgaW5zdGFuY2VzKVwiKTt0cnl7YXdhaXQocj10aGlzLl9tZXRhZGF0YSxvPXRoaXMuX2NsaWVudElkLGE9dGhpcy5fd29ya2VyLHM9dGhpcy5fbG9nZ2VyLGFzeW5jKGUsdCxuKT0+e2NvbnN0e2F1dGhvcml6YXRpb25fZW5kcG9pbnQ6aX09cixsPWZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpLGM9KGF3YWl0IGwuZ2V0Q2hpbGRXaW5kb3dzKCkpLmZpbmQoKGU9PmUuaWRlbnRpdHkubmFtZT09PW0pKTtjJiZhd2FpdCBjLmNsb3NlKCEwKTtjb25zdCB1PShuZXcgRGF0ZSkuZ2V0VGltZSgpLnRvU3RyaW5nKCksZj0oKCk9Pntjb25zdCBlPW5ldyBVaW50MzJBcnJheSg2NCk7cmV0dXJuIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGUpLEFycmF5LmZyb20oZSwoZT0+YDAke2UudG9TdHJpbmcoMTYpfWAuc2xpY2UoLTIpKSkuam9pbihcIlwiKX0pKCksZD0oYXdhaXQoYXN5bmMgZT0+e2NvbnN0IHQ9KG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKGUpLG49YXdhaXQgd2luZG93LmNyeXB0by5zdWJ0bGUuZGlnZXN0KFwiU0hBLTI1NlwiLHQpLHI9YXdhaXQoZT0+bmV3IFByb21pc2UoKCh0LG4pPT57dHJ5e2NvbnN0IHI9bmV3IEJsb2IoW2VdKSxvPW5ldyBGaWxlUmVhZGVyO28ub25sb2FkPWU9Pnt2YXIgcixvO2NvbnN0IGk9bnVsbD09PShyPWUudGFyZ2V0KXx8dm9pZCAwPT09cj92b2lkIDA6ci5yZXN1bHQ7aWYoaSl7Y29uc3RbLGVdPUFycmF5LmZyb20obnVsbCE9PShvPWkubWF0Y2goL2Jhc2U2NCwoLiopJC9pKSkmJnZvaWQgMCE9PW8/bzpbXSk7dChudWxsIT1lP2U6XCJcIil9bihuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVtcHR5IHJlc3VsdFwiKSl9LG8ucmVhZEFzRGF0YVVSTChyKX1jYXRjaChlKXtuKGUpfX0pKSkobik7cmV0dXJuIHIucmVwbGFjZSgvXFwrL2csXCItXCIpLnJlcGxhY2UoL1xcLy9nLFwiX1wiKX0pKGYpKS5yZXBsYWNlKC89KyQvLFwiXCIpO2xldCBwPVwiXCI7dCYmKHA9XCImXCIscCs9T2JqZWN0LmVudHJpZXModCkubWFwKChlPT5gJHtlbmNvZGVVUklDb21wb25lbnQoZVswXSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGVbMV0pfWApKS5qb2luKFwiJlwiKSk7Y29uc3QgaD1gJHtpfT9jbGllbnRfaWQ9JHtlbmNvZGVVUklDb21wb25lbnQobyl9JnJlZGlyZWN0X3VyaT0ke2VuY29kZVVSSUNvbXBvbmVudChlKX0mcmVzcG9uc2VfdHlwZT1jb2RlJnN0YXRlPSR7dX0mY29kZV9jaGFsbGVuZ2U9JHtkfSZjb2RlX2NoYWxsZW5nZV9tZXRob2Q9UzI1NiR7cH1gLGc9bnVsbCE9bj9uOnt9LHtkZWZhdWx0SGVpZ2h0OnYsZGVmYXVsdFdpZHRoOkN9PWcsdz1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59KGcsW1wiZGVmYXVsdEhlaWdodFwiLFwiZGVmYXVsdFdpZHRoXCJdKTtzLmxvZ0luZm8oXCJTdGFydGluZyBPQXV0aCBmbG93XCIsaCk7Y29uc3QgYj1hd2FpdCBmaW4uV2luZG93LmNyZWF0ZShPYmplY3QuYXNzaWduKHthbHdheXNPblRvcDohMCxtYXhpbWl6YWJsZTohMSxtaW5pbWl6YWJsZTohMSxhdXRvU2hvdzohMSxkZWZhdWx0Q2VudGVyZWQ6ITAsZGVmYXVsdEhlaWdodDpudWxsIT12P3Y6NzAwLGRlZmF1bHRXaWR0aDpudWxsIT1DP0M6NjAwLGluY2x1ZGVJblNuYXBzaG90czohMSxuYW1lOm0scmVzaXphYmxlOiExLHNhdmVXaW5kb3dTdGF0ZTohMSxzaG93VGFza2Jhckljb246ITEsdXJsOmh9LHcpKSx4PWF3YWl0IG5ldyBQcm9taXNlKHkoYix1LGUscykpO3MubG9nSW5mbyhcIlJlY2VpdmVkIGF1dGhvcml6YXRpb24gY29kZVwiKSxhd2FpdCBhLmV4Y2hhbmdlQ29kZUZvclRva2Vucyh4LGYsZSkscy5sb2dJbmZvKFwiUmVjZWl2ZWQgdG9rZW5zXCIpfSkoZSx0LG4pLHRoaXMuX2xvZ2dlci5sb2dJbmZvKFwiQXV0aG9yaXplIGNvbXBsZXRlZFwiKX1jYXRjaChlKXtsZXQgdDtpZihlIGluc3RhbmNlb2YgaSl7Y29uc3R7ZGF0YTpufT1lLHI9dGhpcy5nZXRFcnJvck1lc3NhZ2VGcm9tU2VydmVyUmVzcG9uc2Uobik7dD1uZXcgbChyLGUpLHQuZGF0YT1ufWVsc2UgdD1uZXcgbCh2b2lkIDAsZSk7dGhyb3cgdGhpcy5sb2dnZXIubG9nRXJyb3IodCksdH12YXIgcixvLGEsc31hc3luYyBjbG9zZSgpe3ZhciBlO3RoaXMuX2xvZ2dlci5sb2dJbmZvKFwiQ2xvc2Ugc3RhcnRlZFwiKTt0cnl7YXdhaXQobnVsbD09PShlPXRoaXMuX3dvcmtlcil8fHZvaWQgMD09PWU/dm9pZCAwOmUudGVybWluYXRlKCkpLHRoaXMuX3dvcmtlcj12b2lkIDAsdGhpcy5fYXBpT3JpZ2luPXZvaWQgMCx0aGlzLl9jbGllbnRJZD12b2lkIDAsdGhpcy5fbWV0YWRhdGE9dm9pZCAwLHRoaXMuX2xvZ2dlci5sb2dJbmZvKFwiQ2xvc2UgY29tcGxldGVkXCIpfWNhdGNoKGUpe2NvbnN0IHQ9bmV3IGkodm9pZCAwLGUpO3Rocm93IHRoaXMuX2xvZ2dlci5sb2dFcnJvcih0KSx0fX1hc3luYyBleHBpcmVUb2tlbnMoZT0hMSl7dmFyIHQ7dGhpcy5fbG9nZ2VyLmxvZ0luZm8oXCJFeHBpcmVUb2tlbnMgc3RhcnRlZFwiKTt0cnl7YXdhaXQobnVsbD09PSh0PXRoaXMuX3dvcmtlcil8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZXhwaXJlVG9rZW5zKGUpKSx0aGlzLl9sb2dnZXIubG9nSW5mbyhcIkV4cGlyZVRva2VucyBjb21wbGV0ZWRcIil9Y2F0Y2goZSl7Y29uc3QgdD1uZXcgaSh2b2lkIDAsZSk7dGhyb3cgdGhpcy5fbG9nZ2VyLmxvZ0Vycm9yKHQpLHR9fWdldEVycm9yTWVzc2FnZUZyb21TZXJ2ZXJSZXNwb25zZShlKXtlJiZ0aGlzLl9sb2dnZXIubG9nV2FybmluZyhlKX1zdGF0aWMgYXN5bmMgaW5pdChlLHQsbixyLC4uLm8pe2NvbnN0IGE9bmV3IHYocik7bGV0IGw7YS5sb2dJbmZvKFwiSW5pdCBzdGFydGVkXCIsZSx0LG4pO3RyeXtsPW5ldyBVUkwodCl9Y2F0Y2goZSl7Y29uc3QgdD1uZXcgZihcIlVuZXhwZWN0ZWQgaW52YWxpZCBBUEkgb3JpZ2luXCIpO3Rocm93IGEubG9nRXJyb3IodCksdH10cnl7Y29uc3QgdD1hd2FpdChhc3luYyBlPT57bGV0IHQ7dHJ5e3Q9bmV3IFVSTChlKX1jYXRjaChlKXt0aHJvdyBuZXcgZihcIlVuZXhwZWN0ZWQgaW52YWxpZCBtZXRhZGF0YSBVUkxcIil9Y29uc3Qgbj1hd2FpdCBmZXRjaCh0LHtoZWFkZXJzOntBY2NlcHQ6XCJhcHBsaWNhdGlvbi9qc29uXCJ9fSk7aWYoIW4ub2spdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJldHJpZXZlIGF1dGhvcml6YXRpb24gc2VydmVyIG1ldGFkYXRhXCIpO2NvbnN0IHI9YXdhaXQgbi5qc29uKCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBlbXB0eSBhdXRob3JpemF0aW9uIHNlcnZlciBtZXRhZGF0YSByZXNwb25zZVwiKTtpZighci5yZXNwb25zZV90eXBlc19zdXBwb3J0ZWQuZmluZCgoZT0+XCJjb2RlXCI9PT1lLnRvTG93ZXJDYXNlKCkpKSl0aHJvdyBuZXcgRXJyb3IoXCJBdXRob3JpemF0aW9uIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmVzcG9uc2UgdHlwZVwiKTtyZXR1cm4gcn0pKGUpLHI9YXdhaXQoYXN5bmMoZSx0LG4pPT57Y29uc3Qgcj1uZXcgQmxvYihbYCgke3d9KSgpYF0se3R5cGU6XCJ0ZXh0L2phdmFzY3JpcHRcIn0pLG89VVJMLmNyZWF0ZU9iamVjdFVSTChyKSxpPW5ldyBXb3JrZXIobyk7cmV0dXJuIGkub25tZXNzYWdlPShlPT50PT57ZS5sb2dJbmZvKFwiV29ya2VyIHJlc3BvbnNlIHJlY2VpdmVkXCIsdC5kYXRhKTtjb25zdCBuPXQuZGF0YSx7Y29tbWFuZDpyLGVycm9yOm8saWQ6aX09bixhPWZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0obixbXCJjb21tYW5kXCIsXCJlcnJvclwiLFwiaWRcIl0pLGw9KChlLHQpPT54LmZpbmQoKG49Pm4uY29tbWFuZD09PXQmJm4uaWQ9PT1lKSkpKGkscik7bD8obz8oXCJzdGF0dXNcImluIGEmJnZvaWQgMCE9PWEuc3RhdHVzJiYoby5zdGF0dXM9YS5zdGF0dXMpLGwucmVqZWN0KG8pKTpsLnJlc29sdmUoYSksUyhpLHIpKTplLmxvZ0Vycm9yKG5ldyBFcnJvcihcIlVuYWJsZSB0byBsb2NhdGUgYXdhaXRlZCByZXF1ZXN0XCIpKX0pKG4pLGF3YWl0KChlLHQsbixyKT0+bmV3IFByb21pc2UoKChvLGkpPT57Y29uc3QgYT17Y29tbWFuZDpiLkluaXQsZGF0YTp7Y2xpZW50SWQ6dCxtZXRhZGF0YTplfSxpZDpEYXRlLm5vdygpLnRvU3RyaW5nKCl9LHtjb21tYW5kOmwsaWQ6c309YTtfKHtjb21tYW5kOmwsaWQ6cyxyZWplY3Q6aSxyZXNvbHZlOm99KSxuLnBvc3RNZXNzYWdlKGEpLHIubG9nSW5mbyhcIldvcmtlciByZXF1ZXN0IHNlbnRcIixhKX0pKSkoZSx0LGksbikse2V4Y2hhbmdlQ29kZUZvclRva2VuczpPKGksbiksZXhlY3V0ZUFwaVJlcXVlc3Q6TCh0LGksbiksZXhwaXJlVG9rZW5zOkUoaSxuKSx0ZXJtaW5hdGU6aihpLG4pfX0pKHQsbixhKTtyZXR1cm4gYS5sb2dJbmZvKFwiSW5pdCBjb21wbGV0ZWRcIix0KSxuZXcgTShsLm9yaWdpbixuLHQscixhKX1jYXRjaChlKXtsZXQgdDt0aHJvdyB0PWUgaW5zdGFuY2VvZiBpP2U6bmV3IGModm9pZCAwLGUpLGEubG9nRXJyb3IodCksdH19fXZhciBrPW8uTVMsUj1vLmNGLFA9by5BSyxJPW8uTV8sQT1vLmNYLFQ9by5PNCxIPW8uX1csQj1vLlUkLFY9by5VNyxEPW4oOTUxKTtjb25zdCBaPVwiMS4wLjFcIiwkPVwiTWljcm9zb2Z0MzY1XCIsTj0oKT0+e0IoJCl9LEY9KCk9PntWKCQsWil9O1widW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJihcInVuZGVmaW5lZFwiPT10eXBlb2YgZmluJiZPYmplY3QuYXNzaWduKHdpbmRvdyx7ZmluOnt9fSksT2JqZWN0LmFzc2lnbihmaW4se0ludGVncmF0aW9uczp7TWljcm9zb2Z0MzY1OntlbmFibGVMb2dnaW5nOkYsZGlzYWJsZUxvZ2dpbmc6Tn19fSkpO2NvbnN0IFU9ZT0+YXN5bmModCxuLHIsbyxpKT0+e3ZhciBhO3JldHVybiB0PShhPXQpLnN0YXJ0c1dpdGgoXCIvXCIpP2E6YC8ke2F9YCxlLmV4ZWN1dGVBcGlSZXF1ZXN0KHQsbixyLG8saSwhMCl9LFc9YXN5bmMoZSx0LG49W10pPT57Y29uc3Qgcj1bXCJpZFwiLFwidXNlclByaW5jaXBhbE5hbWVcIixcInVzZXJUeXBlXCIsLi4ubl0uam9pbihcIixcIiksbz1hd2FpdChhc3luYyhlLHQ9W10pPT57aWYoIShudWxsPT10P3ZvaWQgMDp0Lmxlbmd0aCkpcmV0dXJuW107Y29uc3Qgbj1bXTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrPTIwKXtjb25zdCBvPXtyZXF1ZXN0czp0LnNsaWNlKHIscisyMCkubWFwKChlPT4oZS5pZD1jcnlwdG8ucmFuZG9tVVVJRCgpLGUpKSl9O24ucHVzaChlLmV4ZWN1dGVBcGlSZXF1ZXN0KFwiL3YxLjAvJGJhdGNoXCIsXCJQT1NUXCIsbykpfWNvbnN0IHI9KGF3YWl0IFByb21pc2UuYWxsKG4pKS5mbGF0TWFwKChlPT5lLmRhdGEucmVzcG9uc2VzKSk7cmV0dXJuIHQubWFwKChlPT57dmFyIHQ7cmV0dXJuIG51bGw9PT0odD1yLmZpbmQoKHQ9PnQuaWQ9PT1lLmlkKSkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmJvZHl9KSl9KShlLHQubWFwKChlPT4oe21ldGhvZDpcIkdFVFwiLHVybDpgL3VzZXJzPyRmaWx0ZXI9bWFpbCBlcSAnJHtlbmNvZGVVUklDb21wb25lbnQoZSl9JyYkc2VsZWN0PSR7cn1gfSkpKSksaT1vLm1hcCgoZT0+e3ZhciB0O3JldHVybiBudWxsPT09KHQ9ZS52YWx1ZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnRbMF19KSk7cmV0dXJuIGUubG9nZ2VyLmxvZ0luZm8oXCJSZXNvbHZlZCB1c2VycyBmcm9tIGVtYWlsIGFkZHJlc3Nlc1wiLGksdCksaX07dmFyIHo9bigzMDApO2NvbnN0IEc9ZT0+ZS5tYXAoKGU9PmU/e2lkOmUudXNlclByaW5jaXBhbE5hbWUsZW1haWxBZGRyZXNzOmUubWFpbCxuYW1lOmUuZGlzcGxheU5hbWV9OnZvaWQgMCkpLHE9YXN5bmMoZSx0KT0+e3RyeXthd2FpdCBmaW4uU3lzdGVtLnJlZ2lzdGVyVXNhZ2Uoe3R5cGU6XCJpbnRlZ3JhdGlvbi1mZWF0dXJlXCIsZGF0YTp7YXBpVmVyc2lvbjpaLGNvbXBvbmVudE5hbWU6ZX19KX1jYXRjaChuKXt0LmxvZ1dhcm5pbmcoYFVuYWJsZSB0byByZWdpc3RlciB1c2FnZSBmb3IgZmVhdHVyZSAke2V9OiAke251bGw9PW4/dm9pZCAwOm4ubWVzc2FnZX1gKX19LFk9ZT0+e2xldCB0PWU7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5maWx0ZXIoQm9vbGVhbikubWFwKFkpOihcIm9iamVjdFwiPT10eXBlb2YgZSYmKHQ9T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoKFssZV0pPT52b2lkIDAhPT0obnVsbCE9ZT9lOnZvaWQgMCkpKS5tYXAoKChbZSx0XSk9PltlLFkodCldKSkpKSx0KX0sSz1lPT4vI0VYVCNALy50ZXN0KGUudXNlclByaW5jaXBhbE5hbWUpO3ZhciBYOyFmdW5jdGlvbihlKXtlLk1TMzY1PVwiTVMtMzY1XCIsZS5UZWFtcz1cIk1TLVRFQU1TXCJ9KFh8fChYPXt9KSk7Y2xhc3MgSiBleHRlbmRzIFR7Z2V0IGN1cnJlbnRVc2VyKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRVc2VyfWdldCByZWRpcmVjdFVyaSgpe3JldHVybiB0aGlzLl9yZWRpcmVjdFVyaX1nZXQgcGVybWlzc2lvbnMoKXtyZXR1cm4gdGhpcy5fcGVybWlzc2lvbnN9Z2V0IHRlbmFudElkKCl7cmV0dXJuIHRoaXMuX3RlbmFudElkfWNvbnN0cnVjdG9yKGUsdCxuLHIsbyxpLGEsbCl7c3VwZXIoZSx0LGksYSxsKSx0aGlzLl9wZXJtaXNzaW9ucz1vLHRoaXMuX3JlZGlyZWN0VXJpPXIsdGhpcy5fdGVuYW50SWQ9bixxKFguTVMzNjUsbCl9YXN5bmMgYXV0aG9yaXplKGUsdCxuKXthd2FpdCBzdXBlci5hdXRob3JpemUoZSx0LG4pO2NvbnN0IHI9YXdhaXQoYXN5bmMgZT0+e2NvbnN0e2RhdGE6dH09YXdhaXQgZS5leGVjdXRlQXBpUmVxdWVzdChcIi92MS4wL21lXCIpO3JldHVybiB0fSkodGhpcyk7dGhpcy5fY3VycmVudFVzZXI9cn1nZXRFcnJvck1lc3NhZ2VGcm9tU2VydmVyUmVzcG9uc2UoZSl7dmFyIHQsbixyO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXRyeXtyZXR1cm4gbnVsbD09PShuPW51bGw9PT0odD1uZXcgVVJMKGUpLnNlYXJjaFBhcmFtcy5nZXQoXCJlcnJvcl9kZXNjcmlwdGlvblwiKSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuc3BsaXQoL1xcclxcbi8pKXx8dm9pZCAwPT09bj92b2lkIDA6blswXX1jYXRjaChlKXtyZXR1cm59cmV0dXJuIG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLmVycm9yKXx8dm9pZCAwPT09cj92b2lkIDA6ci5tZXNzYWdlfXN0YXRpYyBhc3luYyBpbml0KGUsdCxuLHIsbyxpLGEpe2NvbnN0IGw9YXdhaXQgc3VwZXIuaW5pdChlLHQsbixyKTtyZXR1cm4gbmV3IEoodCxuLG8saSxhLG51bGw9PWw/dm9pZCAwOmwubWV0YWRhdGEsbnVsbD09bD92b2lkIDA6bC53b3JrZXIsbnVsbD09bD92b2lkIDA6bC5sb2dnZXIpfX1jb25zdCBRPVtcIlVzZXIuUmVhZEJhc2ljLkFsbFwiLFwiVGVhbS5SZWFkQmFzaWMuQWxsXCIsXCJDaGFubmVsLlJlYWRCYXNpYy5BbGxcIixcIkNoYW5uZWxNZXNzYWdlLlNlbmRcIixcIkNoYXQuQ3JlYXRlXCIsXCJDaGF0TWVzc2FnZS5TZW5kXCIsXCJvZmZsaW5lX2FjY2Vzc1wiXTtsZXQgZWU7Y29uc3QgdGU9YXN5bmMoZSx0LG4scj1bXSxvLGkpPT57YXdhaXQgbmUoZSx0LG4scik7Y29uc3QgYT1PYmplY3QuYXNzaWduKHtzY29wZTpbLi4uUSwuLi5yXS5qb2luKFwiIFwiKX0sbyksbD1PYmplY3QuYXNzaWduKHtkZWZhdWx0SGVpZ2h0OjYwMCxkZWZhdWx0V2lkdGg6NTUwfSxpKTtyZXR1cm4gYXdhaXQgZWUuYXV0aG9yaXplKG4sYSxsKSx7Y2xpZW50SWQ6ZSxjdXJyZW50VXNlcjplZS5jdXJyZW50VXNlcixkaXNjb25uZWN0OmVlLmNsb3NlLGV4ZWN1dGVBcGlSZXF1ZXN0OlUoZWUpLHByb3ZpZGVyOmVlLHRlbmFudElkOnR9fSxuZT1hc3luYyhlLHQsbixyKT0+e2lmKCFlKXRocm93IG5ldyBIKFwiSW52YWxpZCBjbGllbnQgSURcIik7aWYoIXQpdGhyb3cgbmV3IEgoXCJJbnZhbGlkIHRlbmFudCBJRFwiKTtpZighbil0aHJvdyBuZXcgSChcIkludmFsaWQgcmVkaXJlY3QgVVJJXCIpO2NvbnN0IG89YGh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbS8ke3R9L3YyLjAvLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb25gOyghZWV8fGVlLmNsaWVudElkIT09ZXx8ZWUudGVuYW50SWQhPT10fHxlZS5yZWRpcmVjdFVyaSE9PW58fCgwLEQueG9yKShlZS5wZXJtaXNzaW9ucyxyKS5sZW5ndGg+MCkmJihlZT1hd2FpdCBKLmluaXQobyxcImh0dHBzOi8vZ3JhcGgubWljcm9zb2Z0LmNvbVwiLGUsJCx0LG4scikpfTtjbGFzcyByZSBleHRlbmRzIGt7Y29uc3RydWN0b3IoZSx0KXt2YXIgbjtzdXBlcihlPW51bGwhPT0obj1udWxsIT1lP2U6bnVsbD09dD92b2lkIDA6dC5tZXNzYWdlKSYmdm9pZCAwIT09bj9uOlwiQW4gaW50ZXJvcCBlcnJvciBvY2N1cnJlZFwiLHQpfX12YXIgb2UsaWUsYWUsbGUsc2UsY2U7IWZ1bmN0aW9uKGUpe2UuQXBwTm90Rm91bmQ9XCJBcHBOb3RGb3VuZFwiLGUuRXJyb3JPbkxhdW5jaD1cIkVycm9yT25MYXVuY2hcIixlLkFwcFRpbWVvdXQ9XCJBcHBUaW1lb3V0XCIsZS5SZXNvbHZlclVuYXZhaWxhYmxlPVwiUmVzb2x2ZXJVbmF2YWlsYWJsZVwifShvZXx8KG9lPXt9KSksZnVuY3Rpb24oZSl7ZS5Ob0FwcHNGb3VuZD1cIk5vQXBwc0ZvdW5kXCIsZS5SZXNvbHZlclVuYXZhaWxhYmxlPVwiUmVzb2x2ZXJVbmF2YWlsYWJsZVwiLGUuUmVzb2x2ZXJUaW1lb3V0PVwiUmVzb2x2ZXJUaW1lb3V0XCJ9KGllfHwoaWU9e30pKSxmdW5jdGlvbihlKXtlLk5vQ2hhbm5lbEZvdW5kPVwiTm9DaGFubmVsRm91bmRcIixlLkFjY2Vzc0RlbmllZD1cIkFjY2Vzc0RlbmllZFwiLGUuQ3JlYXRpb25GYWlsZWQ9XCJDcmVhdGlvbkZhaWxlZFwifShhZXx8KGFlPXt9KSksbGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj1PYmplY3QucHJvdG90eXBlLHI9bi5oYXNPd25Qcm9wZXJ0eSxvPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1vLml0ZXJhdG9yfHxcIkBAaXRlcmF0b3JcIixhPW8uYXN5bmNJdGVyYXRvcnx8XCJAQGFzeW5jSXRlcmF0b3JcIixsPW8udG9TdHJpbmdUYWd8fFwiQEB0b1N0cmluZ1RhZ1wiO2Z1bmN0aW9uIHMoZSx0LG4pe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7cyh7fSxcIlwiKX1jYXRjaChlKXtzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZVt0XT1ufX1mdW5jdGlvbiBjKGUsdCxuLHIpe3ZhciBvPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2Ygdj90OnYsaT1PYmplY3QuY3JlYXRlKG8ucHJvdG90eXBlKSxhPW5ldyBqKHJ8fFtdKTtyZXR1cm4gaS5faW52b2tlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mO3JldHVybiBmdW5jdGlvbihvLGkpe2lmKHI9PT1wKXRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7aWYocj09PWgpe2lmKFwidGhyb3dcIj09PW8pdGhyb3cgaTtyZXR1cm4gaygpfWZvcihuLm1ldGhvZD1vLG4uYXJnPWk7Oyl7dmFyIGE9bi5kZWxlZ2F0ZTtpZihhKXt2YXIgbD1MKGEsbik7aWYobCl7aWYobD09PWcpY29udGludWU7cmV0dXJuIGx9fWlmKFwibmV4dFwiPT09bi5tZXRob2Qpbi5zZW50PW4uX3NlbnQ9bi5hcmc7ZWxzZSBpZihcInRocm93XCI9PT1uLm1ldGhvZCl7aWYocj09PWYpdGhyb3cgcj1oLG4uYXJnO24uZGlzcGF0Y2hFeGNlcHRpb24obi5hcmcpfWVsc2VcInJldHVyblwiPT09bi5tZXRob2QmJm4uYWJydXB0KFwicmV0dXJuXCIsbi5hcmcpO3I9cDt2YXIgcz11KGUsdCxuKTtpZihcIm5vcm1hbFwiPT09cy50eXBlKXtpZihyPW4uZG9uZT9oOmQscy5hcmc9PT1nKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpzLmFyZyxkb25lOm4uZG9uZX19XCJ0aHJvd1wiPT09cy50eXBlJiYocj1oLG4ubWV0aG9kPVwidGhyb3dcIixuLmFyZz1zLmFyZyl9fX0oZSxuLGEpLGl9ZnVuY3Rpb24gdShlLHQsbil7dHJ5e3JldHVybnt0eXBlOlwibm9ybWFsXCIsYXJnOmUuY2FsbCh0LG4pfX1jYXRjaChlKXtyZXR1cm57dHlwZTpcInRocm93XCIsYXJnOmV9fX1lLndyYXA9Yzt2YXIgZj1cInN1c3BlbmRlZFN0YXJ0XCIsZD1cInN1c3BlbmRlZFlpZWxkXCIscD1cImV4ZWN1dGluZ1wiLGg9XCJjb21wbGV0ZWRcIixnPXt9O2Z1bmN0aW9uIHYoKXt9ZnVuY3Rpb24gbSgpe31mdW5jdGlvbiBDKCl7fXZhciB5PXt9O3lbaV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dmFyIHc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9dyYmdyh3KE0oW10pKSk7YiYmYiE9PW4mJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgeD1DLnByb3RvdHlwZT12LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIF8oZSl7W1wibmV4dFwiLFwidGhyb3dcIixcInJldHVyblwiXS5mb3JFYWNoKChmdW5jdGlvbih0KXtzKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIE8oZSx0KXtmdW5jdGlvbiBuKG8saSxhLGwpe3ZhciBzPXUoZVtvXSxlLGkpO2lmKFwidGhyb3dcIiE9PXMudHlwZSl7dmFyIGM9cy5hcmcsZj1jLnZhbHVlO3JldHVybiBmJiZcIm9iamVjdFwiPT10eXBlb2YgZiYmci5jYWxsKGYsXCJfX2F3YWl0XCIpP3QucmVzb2x2ZShmLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe24oXCJuZXh0XCIsZSxhLGwpfSksKGZ1bmN0aW9uKGUpe24oXCJ0aHJvd1wiLGUsYSxsKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7Yy52YWx1ZT1lLGEoYyl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIG4oXCJ0aHJvd1wiLGUsYSxsKX0pKX1sKHMuYXJnKX12YXIgbzt0aGlzLl9pbnZva2U9ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBpKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG8pe24oZSxyLHQsbyl9KSl9cmV0dXJuIG89bz9vLnRoZW4oaSxpKTppKCl9fWZ1bmN0aW9uIEwoZSxuKXt2YXIgcj1lLml0ZXJhdG9yW24ubWV0aG9kXTtpZihyPT09dCl7aWYobi5kZWxlZ2F0ZT1udWxsLFwidGhyb3dcIj09PW4ubWV0aG9kKXtpZihlLml0ZXJhdG9yLnJldHVybiYmKG4ubWV0aG9kPVwicmV0dXJuXCIsbi5hcmc9dCxMKGUsbiksXCJ0aHJvd1wiPT09bi5tZXRob2QpKXJldHVybiBnO24ubWV0aG9kPVwidGhyb3dcIixuLmFyZz1uZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKX1yZXR1cm4gZ312YXIgbz11KHIsZS5pdGVyYXRvcixuLmFyZyk7aWYoXCJ0aHJvd1wiPT09by50eXBlKXJldHVybiBuLm1ldGhvZD1cInRocm93XCIsbi5hcmc9by5hcmcsbi5kZWxlZ2F0ZT1udWxsLGc7dmFyIGk9by5hcmc7cmV0dXJuIGk/aS5kb25lPyhuW2UucmVzdWx0TmFtZV09aS52YWx1ZSxuLm5leHQ9ZS5uZXh0TG9jLFwicmV0dXJuXCIhPT1uLm1ldGhvZCYmKG4ubWV0aG9kPVwibmV4dFwiLG4uYXJnPXQpLG4uZGVsZWdhdGU9bnVsbCxnKTppOihuLm1ldGhvZD1cInRocm93XCIsbi5hcmc9bmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpLG4uZGVsZWdhdGU9bnVsbCxnKX1mdW5jdGlvbiBFKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIFMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9XCJub3JtYWxcIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gaihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6XCJyb290XCJ9XSxlLmZvckVhY2goRSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBNKGUpe2lmKGUpe3ZhciBuPWVbaV07aWYobilyZXR1cm4gbi5jYWxsKGUpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbz0tMSxhPWZ1bmN0aW9uIG4oKXtmb3IoOysrbzxlLmxlbmd0aDspaWYoci5jYWxsKGUsbykpcmV0dXJuIG4udmFsdWU9ZVtvXSxuLmRvbmU9ITEsbjtyZXR1cm4gbi52YWx1ZT10LG4uZG9uZT0hMCxufTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0Omt9fWZ1bmN0aW9uIGsoKXtyZXR1cm57dmFsdWU6dCxkb25lOiEwfX1yZXR1cm4gbS5wcm90b3R5cGU9eC5jb25zdHJ1Y3Rvcj1DLEMuY29uc3RydWN0b3I9bSxtLmRpc3BsYXlOYW1lPXMoQyxsLFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PW18fFwiR2VuZXJhdG9yRnVuY3Rpb25cIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsQyk6KGUuX19wcm90b19fPUMscyhlLGwsXCJHZW5lcmF0b3JGdW5jdGlvblwiKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4KSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxfKE8ucHJvdG90eXBlKSxPLnByb3RvdHlwZVthXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLkFzeW5jSXRlcmF0b3I9TyxlLmFzeW5jPWZ1bmN0aW9uKHQsbixyLG8saSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIGE9bmV3IE8oYyh0LG4scixvKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG4pP2E6YS5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOmEubmV4dCgpfSkpfSxfKHgpLHMoeCxsLFwiR2VuZXJhdG9yXCIpLHhbaV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30seC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiW29iamVjdCBHZW5lcmF0b3JdXCJ9LGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIG4gaW4gZSl0LnB1c2gobik7cmV0dXJuIHQucmV2ZXJzZSgpLGZ1bmN0aW9uIG4oKXtmb3IoO3QubGVuZ3RoOyl7dmFyIHI9dC5wb3AoKTtpZihyIGluIGUpcmV0dXJuIG4udmFsdWU9cixuLmRvbmU9ITEsbn1yZXR1cm4gbi5kb25lPSEwLG59fSxlLnZhbHVlcz1NLGoucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpqLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXQsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD1cIm5leHRcIix0aGlzLmFyZz10LHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKFMpLCFlKWZvcih2YXIgbiBpbiB0aGlzKVwidFwiPT09bi5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLG4pJiYhaXNOYU4oK24uc2xpY2UoMSkpJiYodGhpc1tuXT10KX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZihcInRocm93XCI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIG49dGhpcztmdW5jdGlvbiBvKHIsbyl7cmV0dXJuIGwudHlwZT1cInRocm93XCIsbC5hcmc9ZSxuLm5leHQ9cixvJiYobi5tZXRob2Q9XCJuZXh0XCIsbi5hcmc9dCksISFvfWZvcih2YXIgaT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBhPXRoaXMudHJ5RW50cmllc1tpXSxsPWEuY29tcGxldGlvbjtpZihcInJvb3RcIj09PWEudHJ5TG9jKXJldHVybiBvKFwiZW5kXCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLFwiY2F0Y2hMb2NcIiksYz1yLmNhbGwoYSxcImZpbmFsbHlMb2NcIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG8oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbyhhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG8oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBvKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBvPXRoaXMudHJ5RW50cmllc1tuXTtpZihvLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwobyxcImZpbmFsbHlMb2NcIikmJnRoaXMucHJldjxvLmZpbmFsbHlMb2Mpe3ZhciBpPW87YnJlYWt9fWkmJihcImJyZWFrXCI9PT1lfHxcImNvbnRpbnVlXCI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIGE9aT9pLmNvbXBsZXRpb246e307cmV0dXJuIGEudHlwZT1lLGEuYXJnPXQsaT8odGhpcy5tZXRob2Q9XCJuZXh0XCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxnKTp0aGlzLmNvbXBsZXRlKGEpfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKFwidGhyb3dcIj09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm5cImJyZWFrXCI9PT1lLnR5cGV8fFwiY29udGludWVcIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6XCJyZXR1cm5cIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPVwicmV0dXJuXCIsdGhpcy5uZXh0PVwiZW5kXCIpOlwibm9ybWFsXCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZ30sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciBuPXRoaXMudHJ5RW50cmllc1t0XTtpZihuLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKG4uY29tcGxldGlvbixuLmFmdGVyTG9jKSxTKG4pLGd9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgbj10aGlzLnRyeUVudHJpZXNbdF07aWYobi50cnlMb2M9PT1lKXt2YXIgcj1uLmNvbXBsZXRpb247aWYoXCJ0aHJvd1wiPT09ci50eXBlKXt2YXIgbz1yLmFyZztTKG4pfXJldHVybiBvfX10aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpNKGUpLHJlc3VsdE5hbWU6bixuZXh0TG9jOnJ9LFwibmV4dFwiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz10KSxnfX0sZX0oZS5leHBvcnRzKTt0cnl7cmVnZW5lcmF0b3JSdW50aW1lPXR9Y2F0Y2goZSl7RnVuY3Rpb24oXCJyXCIsXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHQpfX0sbGUoe2V4cG9ydHM6e319KSxmdW5jdGlvbihlKXtlLkNvbnRhY3Q9XCJmZGMzLmNvbnRhY3RcIixlLkNvbnRhY3RMaXN0PVwiZmRjMy5jb250YWN0TGlzdFwiLGUuQ291bnRyeT1cImZkYzMuY291bnRyeVwiLGUuSW5zdHJ1bWVudD1cImZkYzMuaW5zdHJ1bWVudFwiLGUuT3JnYW5pemF0aW9uPVwiZmRjMy5vcmdhbml6YXRpb25cIixlLlBvcnRmb2xpbz1cImZkYzMucG9ydGZvbGlvXCIsZS5Qb3NpdGlvbj1cImZkYzMucG9zaXRpb25cIn0oc2V8fChzZT17fSkpLGZ1bmN0aW9uKGUpe2UuU3RhcnRDYWxsPVwiU3RhcnRDYWxsXCIsZS5TdGFydENoYXQ9XCJTdGFydENoYXRcIixlLlZpZXdDaGFydD1cIlZpZXdDaGFydFwiLGUuVmlld0NvbnRhY3Q9XCJWaWV3Q29udGFjdFwiLGUuVmlld1F1b3RlPVwiVmlld1F1b3RlXCIsZS5WaWV3TmV3cz1cIlZpZXdOZXdzXCIsZS5WaWV3SW5zdHJ1bWVudD1cIlZpZXdJbnN0cnVtZW50XCIsZS5WaWV3QW5hbHlzaXM9XCJWaWV3QW5hbHlzaXNcIn0oY2V8fChjZT17fSkpO2NvbnN0IHVlPVwib2ZtczM2NWFjdGlvblwiLGZlPWU9PmU/XCJtc3RlYW1zOlwiOlwiaHR0cHM6Ly90ZWFtcy5taWNyb3NvZnQuY29tXCIsZGU9YXN5bmMgZT0+e2NvbnN0IHQ9bnVsbD09ZT92b2lkIDA6ZVt1ZV07aWYodCl0cnl7Y29uc3QgZT0oZT0+e2NvbnN0IHQ9KDAsei5kZWNvbXByZXNzKShlLHtpbnB1dEVuY29kaW5nOlwiQmFzZTY0XCIsb3V0cHV0RW5jb2Rpbmc6XCJTdHJpbmdcIn0pO3JldHVybiBKU09OLnBhcnNlKHQpfSkodCkse2NvbnRleHQ6bixpbnRlbnQ6cn09ZSxvPXtjb250ZXh0Om4sbmFtZTpyfTtyZXR1cm4gYXdhaXQgZmluLm1lLmludGVyb3AuZmlyZUludGVudChvKSxvfWNhdGNoKGUpe2NvbnN0IHQ9ZS5tZXNzYWdlO3Rocm93IG5ldyBrKFwiRmFpbGVkIHRvIGRlY29tcHJlc3Mgc2hhcmUgcGF5bG9hZFwiKyh0P2AgKCR7dH0pYDpcIlwiKSxlKX19LHBlPWFzeW5jKGUsdCxuKT0+e2NvbnN0IHI9YXdhaXQoYXN5bmMoZSx0LG49W10pPT57dHJ5e2NvbnN0IHI9W1wiaWRcIiwuLi5uXS5qb2luKFwiLFwiKSx7ZGF0YTpvfT1hd2FpdCBlLmV4ZWN1dGVBcGlSZXF1ZXN0KGAvdjEuMC90ZWFtcy8ke2VuY29kZVVSSUNvbXBvbmVudCh0KX0/JHNlbGVjdD0ke3J9YCk7cmV0dXJuIG99Y2F0Y2goZSl7aWYoNDA0IT09ZS5zdGF0dXMpdGhyb3cgZX19KShlLHQsW1wiZGlzcGxheU5hbWVcIl0pO2lmKCFyKXJldHVybjtsZXQgbztpZihlLmxvZ2dlci5sb2dJbmZvKFwiUmVzb2x2ZWQgdGVhbVwiLHIpLG4pe2lmKG89YXdhaXQoYXN5bmMoZSx0LG4scj1bXSk9Pnt0cnl7Y29uc3Qgbz1bXCJpZFwiLC4uLnJdLmpvaW4oXCIsXCIpLHtkYXRhOml9PWF3YWl0IGUuZXhlY3V0ZUFwaVJlcXVlc3QoYC92MS4wL3RlYW1zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG4pfS9jaGFubmVscy8ke2VuY29kZVVSSUNvbXBvbmVudCh0KX0/JHNlbGVjdD0ke299YCk7cmV0dXJuIGl9Y2F0Y2goZSl7aWYoNDA0IT09ZS5zdGF0dXMpdGhyb3cgZX19KShlLG4sdCxbXCJkaXNwbGF5TmFtZVwiXSksIW8pcmV0dXJuIHZvaWQgZS5sb2dnZXIubG9nV2FybmluZyhgQ291bGQgbm90IHJlc29sdmUgY2hhbm5lbCBmcm9tIGlkICR7bn1gKX1lbHNle2UubG9nZ2VyLmxvZ0luZm8oXCJObyBjaGFubmVsIGlkIHN1cHBsaWVkLCB1c2luZyBwcmltYXJ5IGNoYW5uZWxcIik7Y29uc3R7ZGF0YTpufT1hd2FpdCBlLmV4ZWN1dGVBcGlSZXF1ZXN0KGAvdjEuMC90ZWFtcy8ke2VuY29kZVVSSUNvbXBvbmVudCh0KX0vcHJpbWFyeUNoYW5uZWw/JHNlbGVjdD1kaXNwbGF5TmFtZSxpZGApO289bn1jb25zdCBpPXtjaGFubmVsSWQ6by5pZCxjaGFubmVsTmFtZTpvLmRpc3BsYXlOYW1lLHRlYW1JZDpyLmlkLHRlYW1OYW1lOnIuZGlzcGxheU5hbWV9O3JldHVybiBlLmxvZ2dlci5sb2dJbmZvKFwiUmVzb2x2ZWQgdGVhbSBjaGFubmVsXCIsdCxuLGkpLGl9O2NsYXNzIGhle2NvbnN0cnVjdG9yKGUsdD0hMCl7dGhpcy5sb2dnZXI9ZS5wcm92aWRlci5sb2dnZXIsdGhpcy5wcm92aWRlcj1lLnByb3ZpZGVyLHRoaXMudXNlTXNUZWFtc1Byb3RvY29sPXQsdGhpcy5yZWdpc3RlckludGVudEhhbmRsZXJzPXRoaXMucmVnaXN0ZXJJbnRlbnRIYW5kbGVycy5iaW5kKHRoaXMpLHRoaXMuc2hhcmU9dGhpcy5zaGFyZS5iaW5kKHRoaXMpLHRoaXMuc3RhcnRDYWxsPXRoaXMuc3RhcnRDYWxsLmJpbmQodGhpcyksdGhpcy5zdGFydENoYXQ9dGhpcy5zdGFydENoYXQuYmluZCh0aGlzKSx0aGlzLmVuYWJsZVNoYXJlUGF5bG9hZEhhbmRsZXIoKSxxKFguVGVhbXMsdGhpcy5sb2dnZXIpfWFzeW5jIGVuYWJsZVNoYXJlUGF5bG9hZEhhbmRsZXIoKXtjb25zdHtpbml0aWFsT3B0aW9uczplfT1hd2FpdCBmaW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudFN5bmMoKS5nZXRJbmZvKCkse3VzZXJBcHBDb25maWdBcmdzOnR9PWUsbj1hd2FpdCBkZSh0KTtuJiZ0aGlzLmxvZ2dlci5sb2dJbmZvKFwiRmlyaW5nIGludGVudFwiLG4pLGZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpLmFkZExpc3RlbmVyKFwicnVuLXJlcXVlc3RlZFwiLChhc3luYyBlPT57dHJ5e2NvbnN0IHQ9YXdhaXQgZGUoZS51c2VyQXBwQ29uZmlnQXJncyk7dCYmdGhpcy5sb2dnZXIubG9nSW5mbyhcIkZpcmluZyBpbnRlbnRcIix0KX1jYXRjaChlKXt0aGlzLmxvZ2dlci5sb2dFcnJvcihlKX19KSl9YXN5bmMgb3BlblVybChlKXt0aGlzLmxvZ2dlci5sb2dJbmZvKFwib3BlblVybCBzdGFydGVkXCIsZSk7dHJ5e2NvbnN0IHQ9dGhpcy51c2VNc1RlYW1zUHJvdG9jb2w/ZS5yZXBsYWNlKC9eaHR0cHM6XFwvXFwvdGVhbXMubWljcm9zb2Z0LmNvbVxcLy9pLFwibXN0ZWFtczpcIik6ZTt0aGlzLmxvZ2dlci5sb2dJbmZvKFwiT3BlbmluZyB1cmxcIix0KSxhd2FpdCBmaW4uU3lzdGVtLm9wZW5VcmxXaXRoQnJvd3Nlcih0KSx0aGlzLmxvZ2dlci5sb2dJbmZvKFwib3BlblVybCBjb21wbGV0ZWRcIil9Y2F0Y2goZSl7dGhyb3cgdGhpcy5sb2dnZXIubG9nRXJyb3IoZSksZX19YXN5bmMgcmVnaXN0ZXJJbnRlbnRIYW5kbGVycygpe2lmKHRoaXMubG9nZ2VyLmxvZ0luZm8oXCJyZWdpc3RlckludGVudEhhbmRsZXJzIHN0YXJ0ZWRcIiksdGhpcy51bnN1YnNjcmliZUludGVudEhhbmRsZXJzKXJldHVybnt1bnN1YnNjcmliZTp0aGlzLnVuc3Vic2NyaWJlSW50ZW50SGFuZGxlcnN9O3RyeXthd2FpdCBmaW4ubWUuaW50ZXJvcC5nZXRDb250ZXh0R3JvdXBzKCk7Y29uc3QgZT1hd2FpdCBmaW4ubWUuaW50ZXJvcC5yZWdpc3RlckludGVudEhhbmRsZXIoKGFzeW5jIGU9Pnt0cnl7YXdhaXQoKGUsdCk9PmFzeW5jIG49Pnt2YXIgcixvLGksYTtpZihlLmxvZ2dlci5sb2dJbmZvKFwiaGFuZGxlU3RhcnRDYWxsSW50ZW50IHN0YXJ0ZWRcIixuKSwobnVsbD09PShyPW4ubmFtZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIudG9Mb3dlckNhc2UoKSkhPT1jZS5TdGFydENhbGwudG9Mb3dlckNhc2UoKSl0aHJvdyBuZXcgayhgVW5leHBlY3RlZCBpbnRlbnQgdHlwZTogJHtuLm5hbWV9YCk7Y29uc3R7Y29udGV4dDpsfT1uO2lmKChudWxsPT09KG89bC50eXBlKXx8dm9pZCAwPT09bz92b2lkIDA6by50b0xvd2VyQ2FzZSgpKSE9PXNlLkNvbnRhY3QudG9Mb3dlckNhc2UoKSYmKG51bGw9PT0oaT1sLnR5cGUpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnRvTG93ZXJDYXNlKCkpIT09c2UuQ29udGFjdExpc3QudG9Mb3dlckNhc2UoKSl0aHJvdyBuZXcgayhgVW5leHBlY3RlZCBjb250ZXh0IHR5cGU6ICR7bC50eXBlfWApO2NvbnN0IHM9KG51bGw9PT0oYT1sLnR5cGUpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnRvTG93ZXJDYXNlKCkpPT09c2UuQ29udGFjdExpc3QudG9Mb3dlckNhc2UoKT9sLmNvbnRhY3RzLm1hcCgoZT0+ZS5pZC5lbWFpbCkpLmZpbHRlcihCb29sZWFuKTpbbC5pZC5lbWFpbF0sYz1hd2FpdCB0KHMpO2UubG9nZ2VyLmxvZ0luZm8oXCJoYW5kbGVTdGFydENhbGxJbnRlbnQgY29tcGxldGVkXCIsYyl9KSh0aGlzLnByb3ZpZGVyLHRoaXMuc3RhcnRDYWxsKShlKX1jYXRjaChlKXt0aHJvdyB0aGlzLmxvZ2dlci5sb2dFcnJvcihlKSxlfX0pLFwiU3RhcnRDYWxsXCIpLHQ9YXdhaXQgZmluLm1lLmludGVyb3AucmVnaXN0ZXJJbnRlbnRIYW5kbGVyKChhc3luYyBlPT57dHJ5e2F3YWl0KChlLHQpPT5hc3luYyBuPT57dmFyIHIsbyxpLGE7aWYoZS5sb2dnZXIubG9nSW5mbyhcImhhbmRsZVN0YXJ0Q2hhdEludGVudCBzdGFydGVkXCIsbiksKG51bGw9PT0ocj1uLm5hbWUpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnRvTG93ZXJDYXNlKCkpIT09Y2UuU3RhcnRDaGF0LnRvTG93ZXJDYXNlKCkpdGhyb3cgbmV3IGsoYFVuZXhwZWN0ZWQgaW50ZW50IHR5cGU6ICR7bi5uYW1lfWApO2NvbnN0e2NvbnRleHQ6bH09bjtpZigobnVsbD09PShvPWwudHlwZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8udG9Mb3dlckNhc2UoKSkhPT1zZS5Db250YWN0LnRvTG93ZXJDYXNlKCkmJihudWxsPT09KGk9bC50eXBlKXx8dm9pZCAwPT09aT92b2lkIDA6aS50b0xvd2VyQ2FzZSgpKSE9PXNlLkNvbnRhY3RMaXN0LnRvTG93ZXJDYXNlKCkpdGhyb3cgbmV3IGsoYFVuZXhwZWN0ZWQgY29udGV4dCB0eXBlOiAke2wudHlwZX1gKTtjb25zdCBzPShudWxsPT09KGE9bC50eXBlKXx8dm9pZCAwPT09YT92b2lkIDA6YS50b0xvd2VyQ2FzZSgpKT09PXNlLkNvbnRhY3RMaXN0LnRvTG93ZXJDYXNlKCk/bC5jb250YWN0cy5tYXAoKGU9PmUuaWQuZW1haWwpKS5maWx0ZXIoQm9vbGVhbik6W2wuaWQuZW1haWxdLGM9YXdhaXQgdCh7ZW1haWxBZGRyZXNzZXM6cyx0b3BpY05hbWU6bC5uYW1lfSk7ZS5sb2dnZXIubG9nSW5mbyhcImhhbmRsZVN0YXJ0Q2hhdEludGVudCBjb21wbGV0ZWRcIixjKX0pKHRoaXMucHJvdmlkZXIsdGhpcy5zdGFydENoYXQpKGUpfWNhdGNoKGUpe3Rocm93IHRoaXMubG9nZ2VyLmxvZ0Vycm9yKGUpLGV9fSksXCJTdGFydENoYXRcIik7cmV0dXJuIHRoaXMudW5zdWJzY3JpYmVJbnRlbnRIYW5kbGVycz1hc3luYygpPT57dGhpcy5sb2dnZXIubG9nSW5mbyhcInVuc3Vic2NyaWJlSW50ZW50SGFuZGxlcnMgc3RhcnRlZFwiKSxhd2FpdCBlLnVuc3Vic2NyaWJlKCksYXdhaXQgdC51bnN1YnNjcmliZSgpLHRoaXMudW5zdWJzY3JpYmVJbnRlbnRIYW5kbGVycz12b2lkIDAsdGhpcy5sb2dnZXIubG9nSW5mbyhcInVuc3Vic2NyaWJlSW50ZW50SGFuZGxlcnMgY29tcGxldGVkXCIpfSx0aGlzLmxvZ2dlci5sb2dJbmZvKFwicmVnaXN0ZXJJbnRlbnRIYW5kbGVycyBjb21wbGV0ZWRcIikse3Vuc3Vic2NyaWJlOnRoaXMudW5zdWJzY3JpYmVJbnRlbnRIYW5kbGVyc319Y2F0Y2goZSl7Y29uc3QgdD1uZXcgcmUoZS5tZXNzYWdlKTt0aHJvdyB0aGlzLmxvZ2dlci5sb2dFcnJvcih0KSx0fX1hc3luYyBzaGFyZShlKXt2YXIgdCxuLHIsbzt0aGlzLmxvZ2dlci5sb2dJbmZvKFwic2hhcmUgc3RhcnRlZFwiLGUpO3RyeXtpZighZS50YXJnZXQpdGhyb3cgbmV3IEgoXCJUYXJnZXQgbm90IHByb3ZpZGVkXCIpO2lmKChudWxsPT09KHQ9ZS5jb250ZXh0KXx8dm9pZCAwPT09dD92b2lkIDA6dC50eXBlLnRvTG93ZXJDYXNlKCkpIT09c2UuSW5zdHJ1bWVudC50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyBIKFwiVW5zdXBwb3J0ZWQgY29udGV4dCB0eXBlXCIpO2lmKCEobnVsbD09PShyPW51bGw9PT0obj1lLmNvbnRleHQpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmlkKXx8dm9pZCAwPT09cj92b2lkIDA6ci50aWNrZXIpKXRocm93IG5ldyBIKFwiVGlja2VyIG5vdCBwcm92aWRlZFwiKTtpZighZS5jaGFydEltYWdlJiZudWxsPT1lLnByaWNlQ3VycmVudCl0aHJvdyBuZXcgSChcIkN1cnJlbnQgcHJpY2Ugbm90IHByb3ZpZGVkXCIpO2NvbnN0IGk9bnVsbD09PShvPWUuc2hvd01lc3NhZ2UpfHx2b2lkIDA9PT1vfHxvLGE9YXdhaXQoYXN5bmMoZSx0KT0+e3ZhciBuLHIsbyxpO2NvbnN0e2NoYXJ0SW1hZ2U6YSxjb250ZXh0Omx9PXQse3ByaWNlQ3VycmVudDpzLHByaWNlSGlnaDpjLHByaWNlTG93OnUscHJpY2VPcGVuOmZ9PXQsZD0obnVsbD09PShyPW51bGw9PT0obj1sLmlkKXx8dm9pZCAwPT09bj92b2lkIDA6bi50aWNrZXIpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnRyaW0oKSl8fHZvaWQgMCxwPShudWxsPT09KG89bC5uYW1lKXx8dm9pZCAwPT09bz92b2lkIDA6by50cmltKCkpfHx2b2lkIDA7bGV0IGgsZyx2LG0sQyx5O2lmKG51bGwhPXQudGltZXN0YW1wfHwhYSl0cnl7aD1uZXcgRGF0ZShudWxsIT09KGk9dC50aW1lc3RhbXApJiZ2b2lkIDAhPT1pP2k6RGF0ZS5ub3coKSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cXC5cXGQrWiQvLFwiKzAwOjAwXCIpfWNhdGNoKG4pe2UubG9nZ2VyLmxvZ1dhcm5pbmcoXCJJbnZhbGlkIHRpbWVzdGFtcFwiLHQudGltZXN0YW1wKX1pZihudWxsIT1zJiZudWxsIT1mJiYoZz1zLWYsdj1nL2YqMTAwLEM9Zz4wP1wi4payXCI6ZzwwP1wi4pa8XCI6XCLil49cIixtPWc+MD9cIkdvb2RcIjpnPDA/XCJBdHRlbnRpb25cIjpcIldhcm5pbmdcIiksYSl7aWYoIS9eaW1hZ2VcXC8oZ2lmfGpwKGV8ZT9nKXxwbmcpJC9pLnRlc3QoYS50eXBlKSl0aHJvdyBuZXcgSChcIkNoYXJ0IGltYWdlIE1JTUUgdHlwZSBub3Qgc3VwcG9ydGVkXCIpO3RyeXt5PWF3YWl0KGFzeW5jIGU9Pm5ldyBQcm9taXNlKCgodCxuKT0+e2NvbnN0IHI9bmV3IEZpbGVSZWFkZXI7ci5vbmxvYWRlbmQ9KCk9PnQoci5yZXN1bHQpLHIub25lcnJvcj0oKT0+bihuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY29udmVydCBibG9iIHRvIGJhc2U2NFwiKSksci5yZWFkQXNEYXRhVVJMKGUpfSkpKShhKX1jYXRjaChlKXt0aHJvdyBuZXcgayhcIkZhaWxlZCB0byBjb252ZXJ0IGJsb2IgdG8gYmFzZTY0XCIsZSl9fWNvbnN0IHc9KGF3YWl0IGZpbi5TeXN0ZW0uZ2V0UnVudGltZUluZm8oKSkubWFuaWZlc3RVcmwsYj0oeD17Y29udGV4dDpsLGludGVudDphP2NlLlZpZXdDaGFydDpjZS5WaWV3SW5zdHJ1bWVudCx2ZXJzaW9uOlp9LCgwLHouY29tcHJlc3MpKEpTT04uc3RyaW5naWZ5KHgpLHtvdXRwdXRFbmNvZGluZzpcIkJhc2U2NFwifSkpO3ZhciB4O2NvbnN0IF89YCR7d30/JCQke3VlfT0ke2VuY29kZVVSSUNvbXBvbmVudChiKX1gLE89YGh0dHBzOi8vc3RhcnQub3BlbmZpbi5jby8/bWFuaWZlc3Q9JHtlbmNvZGVVUklDb21wb25lbnQoXyl9YCxMPXskc2NoZW1hOlwiaHR0cDovL2FkYXB0aXZlY2FyZHMuaW8vc2NoZW1hcy9hZGFwdGl2ZS1jYXJkLmpzb25cIix0eXBlOlwiQWRhcHRpdmVDYXJkXCIsdmVyc2lvbjpcIjEuNFwiLGJvZHk6W3t0eXBlOlwiQ29sdW1uU2V0XCIsY29sdW1uczpbe3R5cGU6XCJDb2x1bW5cIix3aWR0aDpcInN0cmV0Y2hcIixpdGVtczpbe3R5cGU6XCJDb250YWluZXJcIixpdGVtczpbe3R5cGU6XCJUZXh0QmxvY2tcIix0ZXh0Om51bGwhPXA/cDpkLnRvVXBwZXJDYXNlKCksd3JhcDohMCxzaXplOlwiTGFyZ2VcIixzcGFjaW5nOlwiTm9uZVwifSxwJiZ7dHlwZTpcIlRleHRCbG9ja1wiLHRleHQ6ZC50b1VwcGVyQ2FzZSgpLGlzU3VidGxlOiEwLHdyYXA6ITAsc3BhY2luZzpcIk5vbmVcIn0saCYme3R5cGU6XCJUZXh0QmxvY2tcIix0ZXh0OmB7e0RBVEUoJHtofSwgU0hPUlQpfX0ge3tUSU1FKCR7aH0pfX1gLHdyYXA6ITAsc2l6ZTpcIlNtYWxsXCJ9XX1dfSxudWxsIT1zJiYheSYme3R5cGU6XCJDb2x1bW5cIix3aWR0aDpcInN0cmV0Y2hcIixpdGVtczpbe3R5cGU6XCJUZXh0QmxvY2tcIix0ZXh0OnMudG9GaXhlZCgyKSxzaXplOlwiRXh0cmFMYXJnZVwiLHdyYXA6ITAsaG9yaXpvbnRhbEFsaWdubWVudDpcIlJpZ2h0XCJ9LG51bGwhPWcmJm51bGwhPXYmJnt0eXBlOlwiVGV4dEJsb2NrXCIsdGV4dDpgJHtDfSAke2cudG9GaXhlZCgyKX0gKCR7di50b0ZpeGVkKDIpfSUpYCxjb2xvcjptLHNwYWNpbmc6XCJOb25lXCIsd3JhcDohMCxob3Jpem9udGFsQWxpZ25tZW50OlwiUmlnaHRcIn0sKG51bGwhPWZ8fG51bGwhPWN8fG51bGwhPXUpJiZ7dHlwZTpcIkNvbnRhaW5lclwiLGhvcml6b250YWxBbGlnbm1lbnQ6XCJSaWdodFwiLGl0ZW1zOlt7dHlwZTpcIkNvbHVtblNldFwiLGNvbHVtbnM6W3t0eXBlOlwiQ29sdW1uXCIsd2lkdGg6XCJzdHJldGNoXCIsaXRlbXM6W251bGwhPWYmJnt0eXBlOlwiVGV4dEJsb2NrXCIsdGV4dDpcIk9wZW5cIix3cmFwOiEwLGhvcml6b250YWxBbGlnbm1lbnQ6XCJSaWdodFwiLHNpemU6XCJTbWFsbFwiLHdlaWdodDpcIkJvbGRlclwiLHNwYWNpbmc6XCJOb25lXCJ9LG51bGwhPWMmJnt0eXBlOlwiVGV4dEJsb2NrXCIsdGV4dDpcIkhpZ2hcIix3cmFwOiEwLHNwYWNpbmc6XCJOb25lXCIsaG9yaXpvbnRhbEFsaWdubWVudDpcIlJpZ2h0XCIsc2l6ZTpcIlNtYWxsXCIsd2VpZ2h0OlwiQm9sZGVyXCJ9LG51bGwhPXUmJnt0eXBlOlwiVGV4dEJsb2NrXCIsdGV4dDpcIkxvd1wiLHdyYXA6ITAsc3BhY2luZzpcIk5vbmVcIixob3Jpem9udGFsQWxpZ25tZW50OlwiUmlnaHRcIixzaXplOlwiU21hbGxcIix3ZWlnaHQ6XCJCb2xkZXJcIn1dfSx7dHlwZTpcIkNvbHVtblwiLHdpZHRoOlwiYXV0b1wiLGl0ZW1zOltudWxsIT1mJiZ7dHlwZTpcIlRleHRCbG9ja1wiLHRleHQ6Zi50b0ZpeGVkKDIpLHdyYXA6ITAsc3BhY2luZzpcIk5vbmVcIixob3Jpem9udGFsQWxpZ25tZW50OlwiUmlnaHRcIixzaXplOlwiU21hbGxcIn0sbnVsbCE9YyYme3R5cGU6XCJUZXh0QmxvY2tcIix0ZXh0OmMudG9GaXhlZCgyKSx3cmFwOiEwLHNwYWNpbmc6XCJOb25lXCIsaG9yaXpvbnRhbEFsaWdubWVudDpcIlJpZ2h0XCIsc2l6ZTpcIlNtYWxsXCJ9LG51bGwhPXUmJnt0eXBlOlwiVGV4dEJsb2NrXCIsdGV4dDp1LnRvRml4ZWQoMiksd3JhcDohMCxzcGFjaW5nOlwiTm9uZVwiLGhvcml6b250YWxBbGlnbm1lbnQ6XCJSaWdodFwiLHNpemU6XCJTbWFsbFwifV19XX1dLHNwYWNpbmc6XCJTbWFsbFwifV19XX0seSYme3R5cGU6XCJJbWFnZVwiLHVybDpcIi4uL2hvc3RlZENvbnRlbnRzLzEvJHZhbHVlXCIsc3BhY2luZzpcIlNtYWxsXCJ9LHt0eXBlOlwiQWN0aW9uU2V0XCIsYWN0aW9uczpbe3R5cGU6XCJBY3Rpb24uT3BlblVybFwiLHVybDpPLHRpdGxlOlwiT3BlblwifV19XX0sRT17YXR0YWNobWVudHM6W3tpZDpcIjFcIixjb250ZW50VHlwZTpcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5hZGFwdGl2ZVwiLGNvbnRlbnQ6SlNPTi5zdHJpbmdpZnkoWShMKSl9XSxib2R5Ontjb250ZW50VHlwZTpcImh0bWxcIixjb250ZW50Oic8YXR0YWNobWVudCBpZD1cIjFcIj48L2F0dGFjaG1lbnQ+J30sc3VtbWFyeTpcIlRlc3Qgc3VtbWFyeVwifTtpZih5KXtjb25zdFssZSx0XT1bLi4ueS5tYXRjaCgvXmRhdGE6KFteO10rKTtiYXNlNjQsKC4rKSQvaSldO0UuaG9zdGVkQ29udGVudHM9W3tcIkBtaWNyb3NvZnQuZ3JhcGgudGVtcG9yYXJ5SWRcIjpcIjFcIixjb250ZW50Qnl0ZXM6dCxjb250ZW50VHlwZTplfV19cmV0dXJuIEV9KSh0aGlzLnByb3ZpZGVyLGUpO2xldCBsO2lmKEFycmF5LmlzQXJyYXkoZS50YXJnZXQpKXtjb25zdHt0YXJnZXQ6dH09ZSxuPWF3YWl0IFcodGhpcy5wcm92aWRlcix0LFtcImRpc3BsYXlOYW1lXCIsXCJtYWlsXCJdKSxyPW4uZmlsdGVyKEJvb2xlYW4pO2lmKCFyLmxlbmd0aClyZXR1cm4gdGhpcy5sb2dnZXIubG9nV2FybmluZyhcIkNvdWxkIG5vdCByZXNvbHZlIGFueSB2YWxpZCB1c2VycyBmcm9tIGVtYWlsIGFkZHJlc3Nlc1wiLHQpLHQubWFwKCgoKT0+e30pKTtjb25zdHtpZDpvLHdlYlVybDpzfT1hd2FpdChhc3luYyhlLHQpPT57Y29uc3Qgbj17Y2hhdFR5cGU6dC5sZW5ndGg+Mj9cImdyb3VwXCI6XCJvbmVPbk9uZVwiLG1lbWJlcnM6dC5tYXAoKHQ9Pih7XCJAb2RhdGEudHlwZVwiOlwiI21pY3Jvc29mdC5ncmFwaC5hYWRVc2VyQ29udmVyc2F0aW9uTWVtYmVyXCIscm9sZXM6Syh0KT9bXCJndWVzdFwiXTpbXCJvd25lclwiXSxcInVzZXJAb2RhdGEuYmluZFwiOmAke2UuYXBpT3JpZ2lufS92MS4wL3VzZXJzKCcke3QuaWR9JylgfSkpKX0se2RhdGE6cn09YXdhaXQgZS5leGVjdXRlQXBpUmVxdWVzdChcIi92MS4wL2NoYXRzXCIsXCJQT1NUXCIsbik7cmV0dXJuIHJ9KSh0aGlzLnByb3ZpZGVyLFt0aGlzLnByb3ZpZGVyLmN1cnJlbnRVc2VyLC4uLnJdKSx7ZGF0YTpjfT1hd2FpdCB0aGlzLnByb3ZpZGVyLmV4ZWN1dGVBcGlSZXF1ZXN0KGAvdjEuMC9jaGF0cy8ke2VuY29kZVVSSUNvbXBvbmVudChvKX0vbWVzc2FnZXNgLFwiUE9TVFwiLGEpO3RoaXMubG9nZ2VyLmxvZ0luZm8oXCJTZW50IGNoYXQgbWVzc2FnZVwiLGMpLGkmJmF3YWl0IHRoaXMub3BlblVybChzKSxsPUcobil9ZWxzZXtjb25zdHt0YXJnZXQ6dH09ZSxuPWF3YWl0IHBlKHRoaXMucHJvdmlkZXIsdC50ZWFtSWQsdC5jaGFubmVsSWQpO2lmKCFuKXJldHVybiB2b2lkIHRoaXMubG9nZ2VyLmxvZ1dhcm5pbmcoXCJDb3VsZCBub3QgcmVzb2x2ZSB0ZWFtL2NoYW5uZWxcIix0LnRlYW1JZCx0LmNoYW5uZWxJZCk7Y29uc3R7Y2hhbm5lbElkOnIsdGVhbUlkOm99PW4se2RhdGE6c309YXdhaXQgdGhpcy5wcm92aWRlci5leGVjdXRlQXBpUmVxdWVzdChgL3YxLjAvdGVhbXMvJHtlbmNvZGVVUklDb21wb25lbnQobyl9L2NoYW5uZWxzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHIpfS9tZXNzYWdlc2AsXCJQT1NUXCIsYSk7dGhpcy5sb2dnZXIubG9nSW5mbyhcIlNlbnQgY2hhdCBtZXNzYWdlXCIscyksaSYmYXdhaXQgdGhpcy5vcGVuVXJsKHMud2ViVXJsKSxsPW59cmV0dXJuIHRoaXMubG9nZ2VyLmxvZ0luZm8oXCJzaGFyZSBjb21wbGV0ZWRcIixsKSxsfWNhdGNoKGUpe3Rocm93IHRoaXMubG9nZ2VyLmxvZ0Vycm9yKGUpLGV9fWFzeW5jIHN0YXJ0Q2FsbChlPVtdLHQ9ITEpe3RoaXMubG9nZ2VyLmxvZ0luZm8oXCJzdGFydENhbGwgc3RhcnRlZFwiLGUpO3RyeXtsZXQgbj1gJHtmZSh0aGlzLnVzZU1zVGVhbXNQcm90b2NvbCl9L2wvY2FsbC8wLzA/YDtjb25zdCByPWF3YWl0IFcodGhpcy5wcm92aWRlcixlLFtcImRpc3BsYXlOYW1lXCIsXCJtYWlsXCJdKSxvPXIuZmlsdGVyKEJvb2xlYW4pLm1hcCgoZT0+ZW5jb2RlVVJJQ29tcG9uZW50KGUudXNlclByaW5jaXBhbE5hbWUpKSk7aWYoIW8ubGVuZ3RoKXJldHVybiB0aGlzLmxvZ2dlci5sb2dXYXJuaW5nKFwiQ291bGQgbm90IHJlc29sdmUgYW55IHZhbGlkIHVzZXJzIGZyb20gc3VwcGxpZWQgZW1haWxzXCIsZSksZS5tYXAoKCgpPT57fSkpO24rPWB1c2Vycz0ke28uam9pbihcIixcIil9JndpdGhWaWRlbz0ke3R9YCx0aGlzLmxvZ2dlci5sb2dJbmZvKFwiT3BlbmluZyBUZWFtc1wiLG4pLGF3YWl0IGZpbi5TeXN0ZW0ub3BlblVybFdpdGhCcm93c2VyKG4pO2NvbnN0IGk9RyhyKTtyZXR1cm4gdGhpcy5sb2dnZXIubG9nSW5mbyhcInN0YXJ0Q2FsbCBjb21wbGV0ZWRcIixpKSxpfWNhdGNoKGUpe3Rocm93IHRoaXMubG9nZ2VyLmxvZ0Vycm9yKGUpLGV9fWFzeW5jIHN0YXJ0Q2hhdChlKXt0aGlzLmxvZ2dlci5sb2dJbmZvKFwic3RhcnRDaGF0IHN0YXJ0ZWRcIixlKTt0cnl7bGV0IHQsbjtpZihcInRlYW1JZFwiaW4gZSl7Y29uc3R7dGVhbUlkOnIsY2hhbm5lbElkOm99PWUsaT1hd2FpdCBwZSh0aGlzLnByb3ZpZGVyLHIsbyk7aWYoIWkpcmV0dXJuIHZvaWQgdGhpcy5sb2dnZXIubG9nV2FybmluZyhcIkNvdWxkIG5vdCByZXNvbHZlIHRlYW0vY2hhbm5lbFwiLHIsbyk7dD1gJHtmZSh0aGlzLnVzZU1zVGVhbXNQcm90b2NvbCl9L2wvY2hhbm5lbC8ke2VuY29kZVVSSUNvbXBvbmVudChpLmNoYW5uZWxJZCl9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGkuY2hhbm5lbE5hbWUpfT9ncm91cElkPSR7aS50ZWFtSWR9JnRlbmFudElkPSR7dGhpcy5wcm92aWRlci50ZW5hbnRJZH1gLG49aX1lbHNle2NvbnN0e2VtYWlsQWRkcmVzc2VzOnIsbWVzc2FnZTpvLHRvcGljTmFtZTppfT1lO3Q9YCR7ZmUodGhpcy51c2VNc1RlYW1zUHJvdG9jb2wpfS9sL2NoYXQvMC8wP2A7Y29uc3QgYT1hd2FpdCBXKHRoaXMucHJvdmlkZXIscixbXCJkaXNwbGF5TmFtZVwiLFwibWFpbFwiXSksbD1hLmZpbHRlcihCb29sZWFuKS5tYXAoKGU9PmVuY29kZVVSSUNvbXBvbmVudChlLnVzZXJQcmluY2lwYWxOYW1lKSkpO2lmKCFsLmxlbmd0aClyZXR1cm4gdGhpcy5sb2dnZXIubG9nV2FybmluZyhcIkNvdWxkIG5vdCByZXNvbHZlIGFueSB2YWxpZCB1c2VycyBmcm9tIGVtYWlsIGFkZHJlc3Nlc1wiLHIpLHIubWFwKCgoKT0+e30pKTt0Kz1gdXNlcnM9JHtsLmpvaW4oXCIsXCIpfWAsaSYmKHQrPWAmdG9waWNOYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGkpfWApLG8mJih0Kz1gJm1lc3NhZ2U9JHtlbmNvZGVVUklDb21wb25lbnQobyl9YCksbj1HKGEpfXJldHVybiB0aGlzLmxvZ2dlci5sb2dJbmZvKFwiT3BlbmluZyBUZWFtc1wiLHQpLGF3YWl0IGZpbi5TeXN0ZW0ub3BlblVybFdpdGhCcm93c2VyKHQpLHRoaXMubG9nZ2VyLmxvZ0luZm8oXCJzdGFydENoYXQgY29tcGxldGVkXCIsbiksbn1jYXRjaChlKXt0aHJvdyB0aGlzLmxvZ2dlci5sb2dFcnJvcihlKSxlfX19fSw5MTooKT0+e319LHo9e307ZnVuY3Rpb24gRyhlKXt2YXIgdD16W2VdO2lmKHZvaWQgMCE9PXQpcmV0dXJuIHQuZXhwb3J0czt2YXIgbj16W2VdPXtpZDplLGxvYWRlZDohMSxleHBvcnRzOnt9fTtyZXR1cm4gV1tlXS5jYWxsKG4uZXhwb3J0cyxuLG4uZXhwb3J0cyxHKSxuLmxvYWRlZD0hMCxuLmV4cG9ydHN9Ry5jPXosRy5kPShlLHQpPT57Zm9yKHZhciBuIGluIHQpRy5vKHQsbikmJiFHLm8oZSxuKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSxHLmc9ZnVuY3Rpb24oKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2goZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxHLm89KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpLEcubm1kPWU9PihlLnBhdGhzPVtdLGUuY2hpbGRyZW58fChlLmNoaWxkcmVuPVtdKSxlKTt2YXIgcT1HKEcucz01NCksWT0ocS5NUyxxLmNGLHEuQUspLEs9KHEuTV8scS5jWCxxLkJULHEuX1cscS5QZyksWD1xLiRqLEo9KHEuVSQscS5VNyk7bGV0IFE9MDtjb25zdCBlZT17Y2hhdE1lc3NhZ2U6XCJDaGF0IE1lc3NhZ2VcIixldmVudDpcIkV2ZW50XCIsbWVzc2FnZTpcIkVtYWlsXCIsZHJpdmU6XCJEb2N1bWVudFwiLGNvbnRhY3Q6XCJDb250YWN0XCIsdXNlcjpcIlVzZXJcIixsaXN0OlwiTGlzdFwifSx0ZT17cGRmOlwiUERGXCIsZG9jeDpcIldvcmRcIixwcHR4OlwiUG93ZXJQb2ludFwiLHhsc3g6XCJFeGNlbFwiLG9uZW5vdGU6XCJPbmVOb3RlXCJ9LG5lPXtjaGF0TWVzc2FnZTpbXCJDaGF0LlJlYWRcIixcIkNoYW5uZWxNZXNzYWdlLlJlYWQuQWxsXCJdLGxpc3Q6W1wiU2l0ZXMuUmVhZC5BbGxcIl0sZXZlbnQ6W1wiQ2FsZW5kYXJzLlJlYWRcIl0sbWVzc2FnZTpbXCJNYWlsLlJlYWRXcml0ZS5TaGFyZWRcIl0sY29udGFjdDpbXCJDb250YWN0cy5SZWFkLlNoYXJlZFwiLFwiTWFpbC5SZWFkV3JpdGUuU2hhcmVkXCJdLHVzZXI6W1wiVXNlci5SZWFkLkFsbFwiLFwiUHJlc2VuY2UuUmVhZC5BbGxcIl19LHJlPVwiTUlDUk9TT0ZUXzM2NV9TRUFSQ0hfVFlQRV9GSUxURVJcIixvZT1cIk1JQ1JPU09GVF8zNjVfU0VBUkNIX0ZJTEVfVFlQRV9GSUxURVJcIixpZT1cIk1JQ1JPU09GVF8zNjVfU0VBUkNIX0RFUEFSVE1FTlRfRklMVEVSXCIsYWU9XCJNSUNST1NPRlRfMzY1X1NFQVJDSF9KT0JfVElUTEVfRklMVEVSXCIsbGU9XCJUZWFtcyBDYWxsXCIsc2U9XCJUZWFtcyBDaGF0XCIsY2U9XCJFbWFpbFwiLHVlPShlLHQpPT57Y29uc3Qgbj1bXSxyPXtpdGVtOmUuY29udGV4dC5zZWxlY3RlZEZpbHRlcnM/LmZpbmQoKGU9PmUuaWQ9PT1yZSkpLGRvY3VtZW50VHlwZTplLmNvbnRleHQuc2VsZWN0ZWRGaWx0ZXJzPy5maW5kKChlPT5lLmlkPT09b2UpKX0sbz1be3ZhbHVlOlwiRG9jdW1lbnRcIixpc1NlbGVjdGVkOiEhci5pdGVtPy5vcHRpb25zPy5maW5kKCgoe3ZhbHVlOmV9KT0+XCJGaWxlXCI9PT1lKSk/LmlzU2VsZWN0ZWR9LHt2YWx1ZTpcIkNvbnRhY3RcIixpc1NlbGVjdGVkOiEhci5pdGVtPy5vcHRpb25zPy5maW5kKCgoe3ZhbHVlOmV9KT0+XCJDb250YWN0XCI9PT1lKSk/LmlzU2VsZWN0ZWR9LHt2YWx1ZTpcIkNoYXQgTWVzc2FnZVwiLGlzU2VsZWN0ZWQ6ISFyLml0ZW0/Lm9wdGlvbnM/LmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkNoYXQgTWVzc2FnZVwiPT09ZSkpPy5pc1NlbGVjdGVkfSx7dmFsdWU6XCJFbWFpbFwiLGlzU2VsZWN0ZWQ6ISFyLml0ZW0/Lm9wdGlvbnM/LmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkVtYWlsXCI9PT1lKSk/LmlzU2VsZWN0ZWR9LHt2YWx1ZTpcIkV2ZW50XCIsaXNTZWxlY3RlZDohIXIuaXRlbT8ub3B0aW9ucz8uZmluZCgoKHt2YWx1ZTplfSk9PlwiRXZlbnRcIj09PWUpKT8uaXNTZWxlY3RlZH0se3ZhbHVlOlwiTGlzdFwiLGlzU2VsZWN0ZWQ6ISFyLml0ZW0/Lm9wdGlvbnM/LmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkxpc3RcIj09PWUpKT8uaXNTZWxlY3RlZH1dO3JldHVybiBuLnB1c2goe2lkOnJlLHRpdGxlOlwiVHlwZVwiLHR5cGU6JC5lbC5NdWx0aVNlbGVjdCxvcHRpb25zOm8uZmlsdGVyKChlPT50LmhhcyhlLnZhbHVlKSkpfSksXCJEb2N1bWVudFwiPT09ci5pdGVtPy5vcHRpb25zPy5maWx0ZXIoKGU9PmUuaXNTZWxlY3RlZCkpPy5bMF0udmFsdWUmJm4ucHVzaCh7aWQ6b2UsdGl0bGU6XCJGaWxlIFR5cGVcIix0eXBlOiQuZWwuTXVsdGlTZWxlY3Qsb3B0aW9uczpPYmplY3QuZW50cmllcyh0ZSkubWFwKCgoWyxlXSk9Pih7dmFsdWU6ZSxpc1NlbGVjdGVkOiEhci5kb2N1bWVudFR5cGU/Lm9wdGlvbnM/LmZpbHRlcigoZT0+ZS5pc1NlbGVjdGVkKSk/LmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkZpbGVcIj09PWUpKT8uaXNTZWxlY3RlZH0pKSl9KSxufSxmZT0oZSx0KT0+e2NvbnN0IG49dC5jb250ZXh0LnNlbGVjdGVkRmlsdGVycz8uZmluZCgoZT0+ZS5pZD09PXJlKSk/Lm9wdGlvbnM7aWYoIUFycmF5LmlzQXJyYXkobil8fCFuLmZpbmQoKGU9PlwiQ29udGFjdFwiPT09ZS52YWx1ZXx8XCJVc2VyXCI9PT1lLnZhbHVlKSk/LmlzU2VsZWN0ZWQpcmV0dXJuW107Y29uc3R7ZGVwYXJ0bWVudDpyLGpvYlRpdGxlOm99PWUucmVkdWNlKCgoZSx0KT0+KHQuZGVwYXJ0bWVudCYmZS5kZXBhcnRtZW50LmFkZCh0LmRlcGFydG1lbnQpLHQuam9iVGl0bGUmJmUuam9iVGl0bGUuYWRkKHQuam9iVGl0bGUpLGUpKSx7ZGVwYXJ0bWVudDpuZXcgU2V0LGpvYlRpdGxlOm5ldyBTZXR9KSxpPXQuY29udGV4dC5zZWxlY3RlZEZpbHRlcnM/LmZpbmQoKGU9PmUuaWQ9PT1pZSkpLGE9QXJyYXkuZnJvbShyKS5tYXAoKGU9Pih7dmFsdWU6ZSxpc1NlbGVjdGVkOiEhaT8ub3B0aW9ucz8uZmluZCgoKHt2YWx1ZTp0fSk9PnQ9PT1lKSk/LmlzU2VsZWN0ZWR9KSkpLGw9dC5jb250ZXh0LnNlbGVjdGVkRmlsdGVycz8uZmluZCgoZT0+ZS5pZD09PWllKSkscz1BcnJheS5mcm9tKG8pLm1hcCgoZT0+KHt2YWx1ZTplLGlzU2VsZWN0ZWQ6ISFsPy5vcHRpb25zPy5maW5kKCgoe3ZhbHVlOnR9KT0+dD09PWUpKT8uaXNTZWxlY3RlZH0pKSk7cmV0dXJuW3tpZDppZSx0aXRsZTpcIkRlcGFydG1lbnRcIix0eXBlOiQuZWwuTXVsdGlTZWxlY3Qsb3B0aW9uczphfSx7aWQ6YWUsdGl0bGU6XCJKb2IgVGl0bGVcIix0eXBlOiQuZWwuTXVsdGlTZWxlY3Qsb3B0aW9uczpzfV19LGRlPWU9Pntjb25zdCB0PWUuY29udGV4dC5zZWxlY3RlZEZpbHRlcnM/LmZpbmQoKGU9PmUuaWQ9PT1pZSkpLG49QXJyYXkuaXNBcnJheSh0Py5vcHRpb25zKT90Lm9wdGlvbnMuZmlsdGVyKChlPT5lLmlzU2VsZWN0ZWQpKS5tYXAoKGU9PmUudmFsdWUpKTpbXSxyPWUuY29udGV4dC5zZWxlY3RlZEZpbHRlcnM/LmZpbmQoKGU9PmUuaWQ9PT1hZSkpLG89QXJyYXkuaXNBcnJheShyPy5vcHRpb25zKT9yLm9wdGlvbnMuZmlsdGVyKChlPT5lLmlzU2VsZWN0ZWQpKS5tYXAoKGU9PmUudmFsdWUpKTpbXTtyZXR1cm57ZGVwYXJ0bWVudDpuLGpvYlRpdGxlOm99fSxwZT0oZSx0KT0+e2NvbnN0e2RlcGFydG1lbnQ6bixqb2JUaXRsZTpyfT10O3JldHVybiBlLmZpbHRlcigoZT0+KCFuLmxlbmd0aHx8bi5pbmNsdWRlcyhlLmRlcGFydG1lbnQpKSYmKCFyLmxlbmd0aHx8ci5pbmNsdWRlcyhlLmpvYlRpdGxlKSkpKX0saGU9ZT0+e2NvbnN0IHQ9QXJyYXkuaXNBcnJheShlLmNvbnRleHQuc2VsZWN0ZWRGaWx0ZXJzPy5maW5kKChlPT5lLmlkPT09b2UpKT8ub3B0aW9ucyk/ZS5jb250ZXh0LnNlbGVjdGVkRmlsdGVycy5maW5kKChlPT5lLmlkPT09b2UpKT8ub3B0aW9uczpbXTtyZXR1cm57ZmlsdGVyRmlsZXM6dCYmdC5zb21lKCgoe2lzU2VsZWN0ZWQ6ZX0pPT5lKSksc2hvd1dvcmQ6dC5maW5kKCgoe3ZhbHVlOmV9KT0+XCJXb3JkXCI9PT1lKSk/LmlzU2VsZWN0ZWQsc2hvd0V4Y2VsOnQuZmluZCgoKHt2YWx1ZTplfSk9PlwiRXhjZWxcIj09PWUpKT8uaXNTZWxlY3RlZCxzaG93UG93ZXJQb2ludDp0LmZpbmQoKCh7dmFsdWU6ZX0pPT5cIlBvd2VyUG9pbnRcIj09PWUpKT8uaXNTZWxlY3RlZCxzaG93UERGOnQuZmluZCgoKHt2YWx1ZTplfSk9PlwiUERGXCI9PT1lKSk/LmlzU2VsZWN0ZWQsc2hvd09uZU5vdGU6dC5maW5kKCgoe3ZhbHVlOmV9KT0+XCJPbmVOb3RlXCI9PT1lKSk/LmlzU2VsZWN0ZWR9fSxnZT0oZSx0KT0+e2NvbnN0IG49W107cmV0dXJuIHQuc2hvd1dvcmQmJm4ucHVzaChcIi5kb2N4XCIpLHQuc2hvd0V4Y2VsJiZuLnB1c2goXCIueGxzeFwiKSx0LnNob3dQb3dlclBvaW50JiZuLnB1c2goXCIucHB0eFwiKSx0LnNob3dQREYmJm4ucHVzaChcIi5wZGZcIiksdC5zaG93T25lTm90ZSYmbi5wdXNoKFwiLm9uZVwiKSxlLmZpbHRlcigoZT0+e2lmKGUuZmlsZSl7Y29uc3QgdD1lLm5hbWUuc3Vic3RyaW5nKGUubmFtZS5sYXN0SW5kZXhPZihcIi5cIikpO3JldHVybiBuLmluY2x1ZGVzKHQpfXJldHVybiExfSkpfSx2ZT0oZT1cIlwiKT0+e3N3aXRjaChlLnNwbGl0KFwiLlwiKS5wb3AoKT8udG9Mb3dlckNhc2UoKT8/XCJcIil7Y2FzZVwiZG9jeFwiOmNhc2VcImRvY1wiOnJldHVyblwiTWljcm9zb2Z0IFdvcmRcIjtjYXNlXCJ4bHN4XCI6Y2FzZVwieGxzXCI6cmV0dXJuXCJNaWNyb3NvZnQgRXhjZWxcIjtjYXNlXCJwcHR4XCI6Y2FzZVwicHB0XCI6cmV0dXJuXCJNaWNyb3NvZnQgUG93ZXJQb2ludFwiO2Nhc2VcInBkZlwiOnJldHVyblwiUERGXCI7Y2FzZVwicG5nXCI6Y2FzZVwianBnXCI6Y2FzZVwianBlZ1wiOmNhc2VcImdpZlwiOnJldHVyblwiSW1hZ2VcIjtjYXNlXCJ0eHRcIjpyZXR1cm5cIlRleHRcIjtkZWZhdWx0OnJldHVyblwiRmlsZVwifX0sbWU9KGU9XCJcIik9Pntzd2l0Y2goZS5zcGxpdChcIi5cIikucG9wKCk/LnRvTG93ZXJDYXNlKCk/P1wiXCIpe2Nhc2VcImRvY3hcIjpjYXNlXCJkb2NcIjpyZXR1cm4oMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVEb2N1bWVudEljb24pO2Nhc2VcInhsc3hcIjpjYXNlXCJ4bHNcIjpyZXR1cm4oMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVFeGNlbEljb24pO2Nhc2VcInBwdHhcIjpjYXNlXCJwcHRcIjpyZXR1cm4oMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVQb3dlcnBvaW50SWNvbik7Y2FzZVwicGRmXCI6cmV0dXJuKDAsVC5LMykoQS5kZS5NaWNyb3NvZnQzNjVBc3NldHMuUERGRmlsZUljb24pO2RlZmF1bHQ6cmV0dXJufX0sQ2U9ZT0+ZS5yZXBsYWNlKC9cXCsvZyxcIl9cIikucmVwbGFjZSgvXFwvL2csXCItXCIpO3ZhciB5ZSx3ZSxiZSx4ZSxfZSxPZSxMZSxFZSxTZSxqZSxNZSxrZSxSZSxQZSxJZSxBZSxUZSxIZSxCZSxWZSxEZSxaZT1mdW5jdGlvbihlLHQsbixyKXtpZihcImFcIj09PW4mJiFyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD9lIT09dHx8IXI6IXQuaGFzKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7cmV0dXJuXCJtXCI9PT1uP3I6XCJhXCI9PT1uP3IuY2FsbChlKTpyP3IudmFsdWU6dC5nZXQoZSl9LCRlPWZ1bmN0aW9uKGUsdCxuLHIsbyl7aWYoXCJtXCI9PT1yKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7aWYoXCJhXCI9PT1yJiYhbyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZSE9PXR8fCFvOiF0LmhhcyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7cmV0dXJuXCJhXCI9PT1yP28uY2FsbChlLG4pOm8/by52YWx1ZT1uOnQuc2V0KGUsbiksbn07Y2xhc3MgTmUgZXh0ZW5kcyBVe2NvbnN0cnVjdG9yKGUpe2NvbnN0IHQ9aih7fSx7d29ya2Zsb3dzOntzZWFyY2g6KFErPTEse2hvbWVQcm92aWRlcjp7ZGVzY3JpcHRpb246XCJNaWNyb3NvZnQgMzY1IHNlYXJjaCByZXN1bHRzIHByb3ZpZGVyXCIsaWQ6YE1TMzY1LSR7ZmluLm1lLmlkZW50aXR5LnV1aWR9LSR7UX1gLGxvZ29Vcmw6KDAsVC5LMykoQS5kZS5NaWNyb3NvZnQzNjVBc3NldHMuTWljcm9zb2Z0MzY1SWNvbiksaWNvbjooMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVJY29uKSx0aXRsZTpcIk1pY3Jvc29mdCAzNjUgU2VhcmNoXCIsaW5wdXRQbGFjZWhvbGRlcjpcIldoYXQgd291bGQgeW91IGxpa2UgdG8gc2VhcmNoIGluIE1pY3Jvc29mdCAzNjUgdG9kYXk/XCIsZGlzcGF0Y2hGb2N1c0V2ZW50czohMH0sbWljcm9zb2Z0RW50aXR5VHlwZUNvbmZpZzp7bWVzc2FnZTohMCxjaGF0TWVzc2FnZTohMCxkcml2ZTohMCxldmVudDohMCx1c2VyOiEwLGNvbnRhY3Q6ITAsbGlzdDohMH0sdXNlVGVhbXNEZWVwTGluazohMH0pfX0sZSk7c3VwZXIodCkseWUuYWRkKHRoaXMpLHdlLnNldCh0aGlzLHZvaWQgMCksdGhpcy53b3JrZmxvd0ludGVncmF0aW9uTmFtZT1cIk1pY3Jvc29mdCAzNjVcIixiZS5zZXQodGhpcyx2b2lkIDApLHhlLnNldCh0aGlzLHZvaWQgMCksX2Uuc2V0KHRoaXMsMSksT2Uuc2V0KHRoaXMsbmV3IFNldCksTGUuc2V0KHRoaXMsbmV3IEUoMTAwKSksRWUuc2V0KHRoaXMsbmV3IFYoNmU0KSksdGhpcy5jb25uZWN0PWFzeW5jKGU9dGhpcy5jb25maWcuY29ubmVjdCk9Pntjb25zdHtjbGllbnRJZDp0LHRlbmFudElkOm4scmVkaXJlY3RVcmk6cn09ZSxvPXRoaXMuY29uZmlnLndvcmtmbG93cz8uc2VhcmNoP09iamVjdC5lbnRyaWVzKHRoaXMuY29uZmlnLndvcmtmbG93cz8uc2VhcmNoPy5taWNyb3NvZnRFbnRpdHlUeXBlQ29uZmlnPz97fSkuZmlsdGVyKCgoW2UsdF0pPT50KSkubWFwKCgoW2VdKT0+bmVbZV0pKS5maWx0ZXIoKGU9PnZvaWQgMCE9PWUpKS5mbGF0KCk6W107dGhpcy5jb25maWcuY29ubmVjdD1lLCRlKHRoaXMsd2UsYXdhaXQgWCh0LG4scixbLi4ubmV3IFNldChvKV0pLFwiZlwiKX0sU2Uuc2V0KHRoaXMsKCgpPT57aWYoIVplKHRoaXMsd2UsXCJmXCIpKXRocm93IG5ldyBFcnJvcihcIk1pY3Jvc29mdDM2NVdvcmtmbG93SW50ZWdyYXRpb24gbm90IGNvbm5lY3RlZFwiKTtyZXR1cm4gWmUodGhpcyx3ZSxcImZcIil9KSksUGUuc2V0KHRoaXMsKGFzeW5jIGU9PntpZigkZSh0aGlzLHhlLGUsXCJmXCIpLGUuZGF0YT8uaXRlbT8uaWQpe2NvbnN0IHQ9WmUodGhpcyxFZSxcImZcIikuZ2V0KGUuZGF0YS5pdGVtLmlkKTtpZih0KXJldHVybiB2b2lkIFplKHRoaXMsYmUsXCJmXCIpLnJlc3BvbmQoW3RdKX1pZihcInVzZXJcIj09PWUuZGF0YT8udHlwZSlaZSh0aGlzLEJlLFwiZlwiKS5jYWxsKHRoaXMsZSl9KSksSWUuc2V0KHRoaXMsKGFzeW5jIGU9Pnthd2FpdCBmaW4uUGxhdGZvcm0uZ2V0Q3VycmVudFN5bmMoKS5jcmVhdGVXaW5kb3coe2xheW91dDp7Y29udGVudDpbe3R5cGU6XCJzdGFja1wiLGNvbnRlbnQ6W3t0eXBlOlwiY29tcG9uZW50XCIsY29tcG9uZW50TmFtZTpcInZpZXdcIixjb21wb25lbnRTdGF0ZTp7dXJsOmV9fV19XX0sd29ya3NwYWNlUGxhdGZvcm06dm9pZCAwfSl9KSksQWUuc2V0KHRoaXMsKGFzeW5jIGU9PntpZihlLmRhdGEuaXRlbS5jaGFubmVsSWRlbnRpdHkudGVhbUlkKXtjb25zdCB0PW5ldyBVUkwoYG1zdGVhbXM6L2wvY2hhbm5lbC8ke2UuZGF0YS5pdGVtLmNoYW5uZWxJZGVudGl0eS5jaGFubmVsSWR9LyR7ZS5kYXRhLml0ZW0uaWR9YCk7cmV0dXJuITE9PT10aGlzLmNvbmZpZy53b3JrZmxvd3M/LnNlYXJjaD8udXNlVGVhbXNEZWVwTGluayYmKHQucHJvdG9jb2w9XCJodHRwczpcIiksdC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwiY29udGV4dFwiLEpTT04uc3RyaW5naWZ5KHtjb250ZXh0VHlwZTpcImNoYW5uZWxcIn0pKSx2b2lkIGF3YWl0IGZpbi5TeXN0ZW0ub3BlblVybFdpdGhCcm93c2VyKHQudG9TdHJpbmcoKSl9Y29uc3QgdD1uZXcgVVJMKGBtc3RlYW1zOi9sL21lc3NhZ2UvJHtlLmRhdGEuaXRlbS5jaGF0SWR9LyR7ZS5kYXRhLml0ZW0uaWR9YCk7ITE9PT10aGlzLmNvbmZpZy53b3JrZmxvd3M/LnNlYXJjaD8udXNlVGVhbXNEZWVwTGluayYmKHQucHJvdG9jb2w9XCJodHRwczpcIiksdC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwiY29udGV4dFwiLEpTT04uc3RyaW5naWZ5KHtjb250ZXh0VHlwZTpcImNoYXRcIn0pKSxhd2FpdCBmaW4uU3lzdGVtLm9wZW5VcmxXaXRoQnJvd3Nlcih0LnRvU3RyaW5nKCkpfSkpLFRlLnNldCh0aGlzLChhc3luYyBlPT57c3dpdGNoKGUuYWN0aW9uLm5hbWUpe2Nhc2UgbGU6e2NvbnN0IHQ9bmV3IEsoWmUodGhpcyxTZSxcImZcIikuY2FsbCh0aGlzKSx0aGlzLmNvbmZpZy53b3JrZmxvd3M/LnNlYXJjaD8udXNlVGVhbXNEZWVwTGluayk7WmUodGhpcyx5ZSxcIm1cIixqZSkuY2FsbCh0aGlzLCgoKT0+dC5zdGFydENhbGwoW2UuZGF0YS5pdGVtLm1haWxdKSkpO2JyZWFrfWNhc2UgY2U6e2NvbnN0IHQ9YXdhaXQgdGhpcy5leGVjdXRlQXBpUmVxdWVzdChcIi92MS4wL21lL21lc3NhZ2VzXCIsXCJQT1NUXCIse3RvUmVjaXBpZW50czpbe2VtYWlsQWRkcmVzczp7YWRkcmVzczplLmRhdGEuaXRlbS5tYWlsfX1dfSk7bGV0IG49dC5kYXRhLndlYkxpbms7Y29uc3Qgcj1uZXcgVVJMKHQuZGF0YS53ZWJMaW5rKTtpZihcIi9vd2EvXCI9PT1yLnBhdGhuYW1lKXtjb25zdCBlPXIuc2VhcmNoLnNsaWNlKDEpLnNwbGl0KFwiJlwiKS5yZWR1Y2UoKChlLHQpPT57Y29uc3RbbixyXT10LnNwbGl0KFwiPVwiKTtyZXR1cm4gZVtuXT1yLGV9KSx7fSk7aWYoZS5JdGVtSUQpe2NvbnN0IHQ9ZS5JdGVtSUQ7bj1gJHtyLm9yaWdpbn0vbWFpbC9kZWVwbGluay9jb21wb3NlLyR7dH0/SXRlbUlEPSR7dH0mZXh2c3VybD0xYH19YXdhaXQgZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkuY3JlYXRlVmlldyh7dXJsOm59KTticmVha31jYXNlIHNlOntjb25zdCB0PVplKHRoaXMsU2UsXCJmXCIpLmNhbGwodGhpcyksbj1uZXcgSyh0LHRoaXMuY29uZmlnLndvcmtmbG93cz8uc2VhcmNoPy51c2VUZWFtc0RlZXBMaW5rKTtaZSh0aGlzLHllLFwibVwiLGplKS5jYWxsKHRoaXMsKCgpPT5uLnN0YXJ0Q2hhdCh7ZW1haWxBZGRyZXNzZXM6W3QuY3VycmVudFVzZXIubWFpbCxlLmRhdGEuaXRlbS5tYWlsXX0pKSk7YnJlYWt9ZGVmYXVsdDpjb25zb2xlLndhcm4oXCJVbmhhbmRsZWQgdXNlciBhY3Rpb24gZm9yIHJlc3VsdDpcIixlLGBVbmtub3duIGFjdGlvbiBcIiR7ZS5hY3Rpb24ubmFtZX1cImApfX0pKSxIZS5zZXQodGhpcywoYXN5bmMgZT0+e3N3aXRjaChlLmRhdGEudHlwZSl7Y2FzZVwiZHJpdmVJdGVtXCI6WmUodGhpcyxJZSxcImZcIikuY2FsbCh0aGlzLGUuZGF0YS5pdGVtLndlYlVybCk7YnJlYWs7Y2FzZVwiZXZlbnRcIjp7Y29uc3QgdD1lLmRhdGEuaXRlbSxuPWF3YWl0IHRoaXMuZXhlY3V0ZUFwaVJlcXVlc3QoYC92MS4wL21lL2V2ZW50cy8ke3QuaWR9YCk7WmUodGhpcyxJZSxcImZcIikuY2FsbCh0aGlzLG4uZGF0YS53ZWJMaW5rKTticmVha31jYXNlXCJjaGF0TWVzc2FnZVwiOlplKHRoaXMsQWUsXCJmXCIpLmNhbGwodGhpcyxlKTticmVhaztjYXNlXCJtZXNzYWdlXCI6WmUodGhpcyxJZSxcImZcIikuY2FsbCh0aGlzLGUuZGF0YS5pdGVtLndlYkxpbmspO2JyZWFrO2Nhc2VcImxpc3RcIjp7Y29uc3QgdD1lLmRhdGEuaXRlbSxuPWF3YWl0IHRoaXMuZXhlY3V0ZUFwaVJlcXVlc3QoYC92MS4wL3NpdGVzLyR7dC5wYXJlbnRSZWZlcmVuY2U/LnNpdGVJZH0vbGlzdHMvJHt0LmlkfWApO1plKHRoaXMsSWUsXCJmXCIpLmNhbGwodGhpcyxuLmRhdGEud2ViVXJsKTticmVha31jYXNlXCJ1c2VyXCI6WmUodGhpcyxUZSxcImZcIikuY2FsbCh0aGlzLGUpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKFwiVW5oYW5kbGVkIHVzZXIgYWN0aW9uIGZvciByZXN1bHQ6XCIsZSxgVW5rbm93biByZXN1bHQgdHlwZSBcIiR7ZS5kYXRhLnR5cGV9XCJgKX19KSksQmUuc2V0KHRoaXMsKGFzeW5jIGU9PntsZXQgdCxuO2NvbnN0IHI9W10sbz1lLmRhdGEuaXRlbTtaZSh0aGlzLExlLFwiZlwiKS5oYXMoby5pZCk/dD1aZSh0aGlzLExlLFwiZlwiKS5nZXQoby5pZCk6ci5wdXNoKHtpZDpcImNvbnRhY3RQaG90b1wiLG1ldGhvZDpcIkdFVFwiLHVybDpgL3VzZXJzLyR7ZS5kYXRhLml0ZW0uaWR9L3Bob3RvLyR2YWx1ZWAsaGVhZGVyczp7Q29uc2lzdGVuY3lMZXZlbDpcImV2ZW50dWFsXCJ9fSksci5wdXNoKHtpZDpcInByZXNlbmNlXCIsbWV0aG9kOlwiR0VUXCIsdXJsOmAvdXNlcnMvJHtlLmRhdGEuaXRlbS5pZH0vcHJlc2VuY2VgfSk7dHJ5e2NvbnN0IGU9YXdhaXQgWmUodGhpcyx5ZSxcIm1cIixNZSkuY2FsbCh0aGlzLHIpLGE9ZS5kYXRhPy5yZXNwb25zZXMuZmluZCgoZT0+XCJjb250YWN0UGhvdG9cIj09PWUuaWQpKTthJiYyMDAhPT1hLnN0YXR1cyYmY29uc29sZS53YXJuKFwiRXJyb3IgZmV0Y2hpbmcgdXNlciBwaG90b1wiLGEpLGE/LmJvZHkmJjIwMD09PWE/LnN0YXR1cyYmKHQ9YGRhdGE6aW1hZ2UvanBlZztiYXNlNjQsJHthLmJvZHl9YCxaZSh0aGlzLExlLFwiZlwiKS5wdXQoby5pZCx0KSk7Y29uc3QgbD1lLmRhdGE/LnJlc3BvbnNlcy5maW5kKChlPT5cInByZXNlbmNlXCI9PT1lLmlkKSk7MjAwIT09bC5zdGF0dXMmJmNvbnNvbGUud2FybihcIkVycm9yIGZldGNoaW5nIHVzZXIgcHJlc2VuY2VcIixsKSxsPy5ib2R5JiYyMDA9PT1sLnN0YXR1cyYmKGk9bC5ib2R5LG49e2F2YWlsYWJsZTpcImF2YWlsYWJsZVwiLGF2YWlsYWJsZWlkbGU6XCJhdmFpbGFibGVcIixhd2F5OlwiYXdheVwiLGJlcmlnaHRiYWNrOlwiYXdheVwiLGJ1c3k6XCJidXN5XCIsYnVzeWlkbGU6XCJidXN5XCIsZG9ub3RkaXN0dXJiOlwiZG8tbm90LWRpc3R1cmJcIixvZmZsaW5lOlwib2ZmbGluZVwiLHByZXNlbmNldW5rbm93bjpcIm9mZmxpbmVcIn1baS5hdmFpbGFiaWxpdHk/LnRvTG93ZXJDYXNlKCldKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgdXNlciBkYXRhXCIsZSl9dmFyIGk7Y29uc3QgYT1bW1wiRGVwYXJ0bWVudFwiLG8uZGVwYXJ0bWVudHx8XCJOL0FcIl0sW1wiRW1haWxcIixvLm1haWx8fFwiTi9BXCJdLFtcIldvcmsgUGhvbmVcIixvLmJ1c2luZXNzUGhvbmVzPy5bMF18fFwiTi9BXCJdLFtcIk1vYmlsZVwiLG8ubW9iaWxlUGhvbmV8fFwiTi9BXCJdLFtcIkxvY2F0aW9uXCIsby5vZmZpY2VMb2NhdGlvbnx8XCJOL0FcIl1dLGw9ey4uLmUsdGVtcGxhdGU6JC55Vy5Db250YWN0LHRlbXBsYXRlQ29udGVudDp7bmFtZTplLmRhdGEuaXRlbS5kaXNwbGF5TmFtZSx0aXRsZTplLmRhdGEuaXRlbS5qb2JUaXRsZSxkZXRhaWxzOlthXSxwaG90b1VybDp0LG9ubGluZVN0YXR1czpuLGJ1dHRvbnM6W3t0eXBlOlwiYnV0dG9uXCIsaWNvbjp7bGlnaHQ6KDAsVC5LMykoQS5kZS5DYWxsSWNvbkxpZ2h0KSxkYXJrOigwLFQuSzMpKEEuZGUuQ2FsbEljb25EYXJrKX0sdG9vbHRpcDpcIlRlYW1zIENhbGxcIixhY3Rpb246bGV9LHt0eXBlOlwiYnV0dG9uXCIsaWNvbjp7bGlnaHQ6KDAsVC5LMykoQS5kZS5DaGF0SWNvbkxpZ2h0KSxkYXJrOigwLFQuSzMpKEEuZGUuQ2hhdEljb25EYXJrKX0sdG9vbHRpcDpcIkNoYXRcIixhY3Rpb246c2V9LHt0eXBlOlwiYnV0dG9uXCIsaWNvbjp7bGlnaHQ6KDAsVC5LMykoQS5kZS5NZXNzYWdlSWNvbkxpZ2h0KSxkYXJrOigwLFQuSzMpKEEuZGUuTWVzc2FnZUljb25EYXJrKX0sdG9vbHRpcDpcIkUtbWFpbFwiLGFjdGlvbjpjZX1dfX07WmUodGhpcyxFZSxcImZcIikucHV0KGUuZGF0YS5pdGVtLmlkLGwpLFplKHRoaXMsYmUsXCJmXCIpLnJlc3BvbmQoW2xdKX0pKSxWZS5zZXQodGhpcywoYXN5bmMoZSx0KT0+e2lmKFplKHRoaXMsYmUsXCJmXCIpJiZaZSh0aGlzLGJlLFwiZlwiKS5jbG9zZSgpLCRlKHRoaXMsYmUsdCxcImZcIiksWmUodGhpcyxiZSxcImZcIikub3BlbigpLGUucXVlcnkubGVuZ3RoPFplKHRoaXMsX2UsXCJmXCIpKXJldHVybntyZXN1bHRzOltdfTtjb25zdCBuPWVuY29kZVVSSUNvbXBvbmVudChlLnF1ZXJ5KSxyPVtdLG89KChlLHQpPT57Y29uc3Qgbj1BcnJheS5pc0FycmF5KGUuY29udGV4dC5zZWxlY3RlZEZpbHRlcnM/LmZpbmQoKGU9PmUuaWQ9PT1yZSkpPy5vcHRpb25zKT9lLmNvbnRleHQuc2VsZWN0ZWRGaWx0ZXJzLmZpbmQoKGU9PmUuaWQ9PT1yZSkpPy5vcHRpb25zOltdLHI9bi5ldmVyeSgoKHtpc1NlbGVjdGVkOmV9KT0+IWUpKTtyZXR1cm57c2hvd0RvY3VtZW50czp0LmhhcyhcIkRvY3VtZW50XCIpJiYocnx8ISFuLmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkRvY3VtZW50XCI9PT1lKSk/LmlzU2VsZWN0ZWQpLHNob3dDb250YWN0czp0LmhhcyhcIkNvbnRhY3RcIikmJihyfHwhIW4uZmluZCgoKHt2YWx1ZTplfSk9PlwiQ29udGFjdFwiPT09ZSkpPy5pc1NlbGVjdGVkKSxzaG93Q2hhdE1lc3NhZ2VzOnQuaGFzKFwiQ2hhdCBNZXNzYWdlXCIpJiYocnx8ISFuLmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkNoYXQgTWVzc2FnZVwiPT09ZSkpPy5pc1NlbGVjdGVkKSxzaG93TWVzc2FnZXM6dC5oYXMoXCJFbWFpbFwiKSYmKHJ8fCEhbi5maW5kKCgoe3ZhbHVlOmV9KT0+XCJFbWFpbFwiPT09ZSkpPy5pc1NlbGVjdGVkKSxzaG93RXZlbnRzOnQuaGFzKFwiRXZlbnRcIikmJihyfHwhIW4uZmluZCgoKHt2YWx1ZTplfSk9PlwiRXZlbnRcIj09PWUpKT8uaXNTZWxlY3RlZCksc2hvd0xpc3RzOnQuaGFzKFwiTGlzdFwiKSYmKHJ8fCEhbi5maW5kKCgoe3ZhbHVlOmV9KT0+XCJMaXN0XCI9PT1lKSk/LmlzU2VsZWN0ZWQpfX0pKGUsWmUodGhpcyxPZSxcImZcIikpO2lmKG8uc2hvd0RvY3VtZW50cyl7Y29uc3QgZT1gJyR7bn0nYDtyLnB1c2goe2lkOlwiZHJpdmVJdGVtXCIsbWV0aG9kOlwiR0VUXCIsdXJsOmAvbWUvZHJpdmUvcm9vdC9zZWFyY2gocT0ke2VuY29kZVVSSUNvbXBvbmVudChlKX0pYCxoZWFkZXJzOntDb25zaXN0ZW5jeUxldmVsOlwiZXZlbnR1YWxcIn19KX1pZihvLnNob3dFdmVudHMmJnIucHVzaCh7aWQ6XCJldmVudFwiLHVybDpcIi9zZWFyY2gvcXVlcnlcIixtZXRob2Q6XCJQT1NUXCIsYm9keTp7cmVxdWVzdHM6W3tlbnRpdHlUeXBlczpbXCJldmVudFwiXSxxdWVyeTp7cXVlcnlTdHJpbmc6ZS5xdWVyeX0sZnJvbTowLHNpemU6MTB9XX0saGVhZGVyczp7XCJDb250ZW50LVR5cGVcIjpcImFwcGxpY2F0aW9uL2pzb25cIn19KSxvLnNob3dDb250YWN0cyl7Y29uc3QgdD1gXCIke2UucXVlcnl9XCJgO3IucHVzaCh7aWQ6XCJjb250YWN0XCIsbWV0aG9kOlwiR0VUXCIsdXJsOmAvbWUvY29udGFjdHM/JHNlYXJjaD0ke2VuY29kZVVSSUNvbXBvbmVudCh0KX0mJHRvcD0xMGB9KTtjb25zdCBuPVtcImRpc3BsYXlOYW1lXCIsXCJnaXZlbk5hbWVcIixcInN1cm5hbWVcIl0ubWFwKCh0PT5gXCIke3R9OiR7ZS5xdWVyeX1cImApKS5qb2luKFwiIE9SIFwiKTtyLnB1c2goe2lkOlwidXNlclwiLG1ldGhvZDpcIkdFVFwiLHVybDpgL3VzZXJzPyRzZWFyY2g9JHtlbmNvZGVVUklDb21wb25lbnQobil9JiR0b3A9MTAmJHNlbGVjdD1pZCxkaXNwbGF5TmFtZSxkZXBhcnRtZW50LG1haWwsYnVzaW5lc3NQaG9uZXMsbW9iaWxlUGhvbmUsb2ZmaWNlTG9jYXRpb24sam9iVGl0bGVgLGhlYWRlcnM6e0NvbnNpc3RlbmN5TGV2ZWw6XCJldmVudHVhbFwifX0pfWlmKG8uc2hvd01lc3NhZ2VzJiZyLnB1c2goe2lkOlwibWVzc2FnZVwiLG1ldGhvZDpcIkdFVFwiLHVybDpgL21lL21lc3NhZ2VzPyRzZWxlY3Q9c2VuZGVyLHN1YmplY3QsYm9keVByZXZpZXcscmVjZWl2ZWREYXRlVGltZSx3ZWJMaW5rJiRzZWFyY2g9JHtlbmNvZGVVUklDb21wb25lbnQoYFwiJHtlLnF1ZXJ5fVwiYCl9JiR0b3A9MTBgfSksby5zaG93Q2hhdE1lc3NhZ2VzJiZyLnB1c2goe2lkOlwiY2hhdE1lc3NhZ2VcIix1cmw6XCIvc2VhcmNoL3F1ZXJ5XCIsbWV0aG9kOlwiUE9TVFwiLGJvZHk6e3JlcXVlc3RzOlt7ZW50aXR5VHlwZXM6W1wiY2hhdE1lc3NhZ2VcIl0scXVlcnk6e3F1ZXJ5U3RyaW5nOmUucXVlcnl9LGZyb206MCxzaXplOjEwfV19LGhlYWRlcnM6e1wiQ29udGVudC1UeXBlXCI6XCJhcHBsaWNhdGlvbi9qc29uXCJ9fSksby5zaG93TGlzdHMmJnIucHVzaCh7aWQ6XCJsaXN0XCIsdXJsOlwiL3NlYXJjaC9xdWVyeVwiLG1ldGhvZDpcIlBPU1RcIixib2R5OntyZXF1ZXN0czpbe2VudGl0eVR5cGVzOltcImxpc3RcIl0scXVlcnk6e3F1ZXJ5U3RyaW5nOmUucXVlcnl9LGZyb206MCxzaXplOjEwfV19LGhlYWRlcnM6e1wiQ29udGVudC1UeXBlXCI6XCJhcHBsaWNhdGlvbi9qc29uXCJ9fSksMD09PXIubGVuZ3RoKXJldHVybntyZXN1bHRzOltdfTtjb25zdHtyZXN1bHRzOmksZmlsdGVyczphfT1hd2FpdCBaZSh0aGlzLHllLFwibVwiLGtlKS5jYWxsKHRoaXMscixlKTtyZXR1cm4gaS5maW5kKChlPT5lLmtleT09PVplKHRoaXMseGUsXCJmXCIpPy5rZXkpKT8udGVtcGxhdGU9PT0kLnlXLkxvYWRpbmcmJlplKHRoaXMsUGUsXCJmXCIpLmNhbGwodGhpcyxaZSh0aGlzLHhlLFwiZlwiKSkse3Jlc3VsdHM6aSxjb250ZXh0OntmaWx0ZXJzOmF9fX0pKSxEZS5zZXQodGhpcywoYXN5bmMgZT0+e3N3aXRjaChlLmFjdGlvbi50cmlnZ2VyKXtjYXNlIEdlLnAuRm9jdXNDaGFuZ2U6WmUodGhpcyxQZSxcImZcIikuY2FsbCh0aGlzLGUpO2JyZWFrO2Nhc2UgR2UucC5Vc2VyQWN0aW9uOlplKHRoaXMsSGUsXCJmXCIpLmNhbGwodGhpcyxlKTticmVhaztjYXNlIEdlLnAuUmVsb2FkOmJyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKGBVbmtub3duIGFjdGlvbiB0cmlnZ2VyOiAke2UuYWN0aW9uLnRyaWdnZXJ9YCl9fSkpLHRoaXMuaW5pdGlhbGl6ZVdvcmtmbG93PWFzeW5jIGU9PntpZihcInNlYXJjaFwiIT09ZSl0aHJvdyBuZXcgRXJyb3IoYEF0dGVtcHRlZCB0byBpbml0aWFsaXplIHVua25vd24gd29ya2Zsb3c6ICR7ZX1gKTthd2FpdCBfLnJlZ2lzdGVyKHsuLi50aGlzLmNvbmZpZy53b3JrZmxvd3Muc2VhcmNoLmhvbWVQcm92aWRlcixvblVzZXJJbnB1dDpaZSh0aGlzLFZlLFwiZlwiKSxvblJlc3VsdERpc3BhdGNoOlplKHRoaXMsRGUsXCJmXCIpfSksSigpLGF3YWl0IHRoaXMuY29ubmVjdCgpLHN1cGVyLmluaXRpYWxpemVXb3JrZmxvdyhlKX0sT2JqZWN0LmVudHJpZXModC53b3JrZmxvd3M/LnNlYXJjaD8ubWljcm9zb2Z0RW50aXR5VHlwZUNvbmZpZ3x8e30pLmZpbHRlcigoKFtlLHRdKT0+dCkpLmZvckVhY2goKChbZV0pPT57WmUodGhpcyxPZSxcImZcIikuYWRkKGVlW2VdKX0pKX1hc3luYyBleGVjdXRlQXBpUmVxdWVzdCguLi5lKXtyZXR1cm4gWmUodGhpcyx5ZSxcIm1cIixqZSkuY2FsbCh0aGlzLCgoKT0+WmUodGhpcyxTZSxcImZcIikuY2FsbCh0aGlzKS5leGVjdXRlQXBpUmVxdWVzdCguLi5lKSkpfX13ZT1uZXcgV2Vha01hcCxiZT1uZXcgV2Vha01hcCx4ZT1uZXcgV2Vha01hcCxfZT1uZXcgV2Vha01hcCxPZT1uZXcgV2Vha01hcCxMZT1uZXcgV2Vha01hcCxFZT1uZXcgV2Vha01hcCxTZT1uZXcgV2Vha01hcCxQZT1uZXcgV2Vha01hcCxJZT1uZXcgV2Vha01hcCxBZT1uZXcgV2Vha01hcCxUZT1uZXcgV2Vha01hcCxIZT1uZXcgV2Vha01hcCxCZT1uZXcgV2Vha01hcCxWZT1uZXcgV2Vha01hcCxEZT1uZXcgV2Vha01hcCx5ZT1uZXcgV2Vha1NldCxqZT1hc3luYyBmdW5jdGlvbihlKXt0cnl7cmV0dXJuIGF3YWl0IGUoKX1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2YgWSlyZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0KCksZSgpO3Rocm93IHR9fSxNZT1hc3luYyBmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5leGVjdXRlQXBpUmVxdWVzdChcIi92MS4wLyRiYXRjaFwiLFwiUE9TVFwiLHtyZXF1ZXN0czplfSl9LGtlPWFzeW5jIGZ1bmN0aW9uKGUsdCl7dHJ5e2NvbnN0IG49YXdhaXQgWmUodGhpcyx5ZSxcIm1cIixNZSkuY2FsbCh0aGlzLGUpLHI9Wy4uLnVlKHQsWmUodGhpcyxPZSxcImZcIikpLC4uLmZlKG4uZGF0YS5yZXNwb25zZXMuZmluZCgoZT0+XCJ1c2VyXCI9PT1lLmlkKSk/LmJvZHk/LnZhbHVlfHxbXSx0KV07cmV0dXJue2ZpbHRlcnM6cixyZXN1bHRzOlplKHRoaXMseWUsXCJtXCIsUmUpLmNhbGwodGhpcyxuLHQpfX1jYXRjaChlKXtyZXR1cm4gY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIGV4ZWN1dGUgQmF0Y2ggQVBJIHJlcXVlc3Q6IFwiLGUpLHtmaWx0ZXJzOltdLHJlc3VsdHM6W3trZXk6KDAsWi5IKSgpLHRpdGxlOlwiRXJyb3IgRmV0Y2hpbmcgU2VhcmNoIFJlc3VsdHNcIixkZXNjcmlwdGlvbjpcIlwiLGFjdGlvbnM6W10sdGVtcGxhdGU6JC55Vy5FcnJvcix0ZW1wbGF0ZUNvbnRlbnQ6YEZhaWxlZCB0byBleGVjdXRlIEJhdGNoIEFQSSByZXF1ZXN0OiAke0pTT04uc3RyaW5naWZ5KGUpfWB9XX19fSxSZT1mdW5jdGlvbihlLHQpe2xldCBuPVtdO2Zvcihjb25zdCByIG9mIGUuZGF0YS5yZXNwb25zZXMpaWYoMjAwPT09ci5zdGF0dXMpc3dpdGNoKHIuaWQpe2Nhc2VcImRyaXZlSXRlbVwiOntjb25zdCBlPWhlKHQpLG89ZS5maWx0ZXJGaWxlcz9nZShyLmJvZHkudmFsdWUsZSk6ci5ib2R5LnZhbHVlO24ucHVzaCguLi4ob3x8W10pLm1hcCgoZT0+KHtrZXk6ZS5pZD8/KDAsWi5IKSgpLHRpdGxlOmUubmFtZT8/XCJcIixkZXNjcmlwdGlvbjplLmZpbGU/Lm1pbWVUeXBlPz9cIlwiLGxhYmVsOnZlKGUubmFtZSksaWNvbjptZShlLm5hbWUpLGRhdGE6e3R5cGU6XCJkcml2ZUl0ZW1cIixpdGVtOmV9LGFjdGlvbnM6W3tuYW1lOlwiTGF1bmNoXCJ9XSx0ZW1wbGF0ZTokLnlXLlBsYWluLHRlbXBsYXRlQ29udGVudDp2b2lkIDB9KSkpKTticmVha31jYXNlXCJldmVudFwiOm4ucHVzaCguLi5yLmJvZHk/LnZhbHVlPy5bMF0/LmhpdHNDb250YWluZXJzPy5bMF0/LmhpdHM/LmZpbHRlcigoZT0+ZS5yZXNvdXJjZS5zdWJqZWN0KSkubWFwKChlPT57Y29uc3QgdD1lLnJlc291cmNlLG49Q2UoZS5oaXRJZCk7cmV0dXJue2tleTpuLHRpdGxlOnQuc3ViamVjdD8/XCJcIixsYWJlbDpcIkNhbGVuZGFyIEV2ZW50XCIsaWNvbjooMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVPdXRsb29rSWNvbiksYWN0aW9uczpbe25hbWU6XCJMYXVuY2hcIn1dLGRhdGE6e3R5cGU6XCJldmVudFwiLGl0ZW06ey4uLnQsaWQ6bn19LHRlbXBsYXRlOiQueVcuUGxhaW4sdGVtcGxhdGVDb250ZW50OnZvaWQgMH19KSl8fFtdKTticmVhaztjYXNlXCJjb250YWN0XCI6e2NvbnN0IGU9ZGUodCksbz1wZShyLmJvZHkudmFsdWV8fFtdLGUpO24ucHVzaCguLi4ob3x8W10pLm1hcCgoZT0+KHtrZXk6ZS5pZD8/KDAsWi5IKSgpLHRpdGxlOmUuZGlzcGxheU5hbWU/P1wiXCIsbGFiZWw6XCJPdXRsb29rIGNvbnRhY3RcIixpY29uOigwLFQuSzMpKEEuZGUuTWljcm9zb2Z0MzY1QXNzZXRzLk1pY3Jvc29mdDM2NU91dGxvb2tJY29uKSxhY3Rpb25zOltdLGRhdGE6e3R5cGU6XCJjb250YWN0XCIsaXRlbTplfSx0ZW1wbGF0ZTokLnlXLlBsYWluLHRlbXBsYXRlQ29udGVudDp2b2lkIDB9KSkpKTticmVha31jYXNlXCJ1c2VyXCI6e2NvbnN0IGU9ZGUodCksbz1wZShyLmJvZHkudmFsdWV8fFtdLGUpO24ucHVzaCguLi4ob3x8W10pLm1hcCgoZT0+KHtrZXk6ZS5pZD8/KDAsWi5IKSgpLHRpdGxlOmUuZGlzcGxheU5hbWU/P1wiXCIsbGFiZWw6XCJUZWFtcyBjb250YWN0XCIsaWNvbjooMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVUZWFtc0ljb24pLGFjdGlvbnM6W10sZGF0YTp7dHlwZTpcInVzZXJcIixpdGVtOmV9LHRlbXBsYXRlOiQueVcuTG9hZGluZyx0ZW1wbGF0ZUNvbnRlbnQ6dm9pZCAwfSkpKSk7YnJlYWt9Y2FzZVwibWVzc2FnZVwiOm4ucHVzaCguLi4oci5ib2R5LnZhbHVlfHxbXSkubWFwKChlPT4oe2tleTplLmlkPz8oMCxaLkgpKCksdGl0bGU6YCR7ZS5zdWJqZWN0Pz9cIlVudGl0bGVkIE1lc3NhZ2VcIn0ke2UuaXNEcmFmdD9cIiAoRHJhZnQpXCI6XCJcIn1gLGxhYmVsOlwiRW1haWxcIixpY29uOigwLFQuSzMpKEEuZGUuTWljcm9zb2Z0MzY1QXNzZXRzLk1pY3Jvc29mdDM2NU91dGxvb2tJY29uKSxhY3Rpb25zOltdLGRhdGE6e3R5cGU6XCJtZXNzYWdlXCIsaXRlbTplfSx0ZW1wbGF0ZTokLnlXLlBsYWluLHRlbXBsYXRlQ29udGVudDp2b2lkIDB9KSkpKTticmVhaztjYXNlXCJjaGF0TWVzc2FnZVwiOm4ucHVzaCguLi5yLmJvZHk/LnZhbHVlPy5bMF0/LmhpdHNDb250YWluZXJzPy5bMF0/LmhpdHM/Lm1hcCgoZT0+e2NvbnN0IHQ9ZS5yZXNvdXJjZTtyZXR1cm57a2V5OnQuaWQ/PygwLFouSCkoKSx0aXRsZTplLnN1bW1hcnk/P1wiVW50aXRsZWQgTWVzc2FnZVwiLGxhYmVsOlwiQ2hhdFwiLGljb246KDAsVC5LMykoQS5kZS5NaWNyb3NvZnQzNjVBc3NldHMuTWljcm9zb2Z0MzY1VGVhbXNJY29uKSxhY3Rpb25zOltdLGRhdGE6e3R5cGU6XCJjaGF0TWVzc2FnZVwiLGl0ZW06dH0sdGVtcGxhdGU6JC55Vy5QbGFpbix0ZW1wbGF0ZUNvbnRlbnQ6dm9pZCAwfX0pKXx8W10pO2JyZWFrO2Nhc2VcImxpc3RcIjpuLnB1c2goLi4uci5ib2R5Py52YWx1ZT8uWzBdPy5oaXRzQ29udGFpbmVycz8uWzBdPy5oaXRzPy5tYXAoKGU9Pntjb25zdCB0PWUucmVzb3VyY2Usbj1DZShlLmhpdElkKTtyZXR1cm57a2V5Om4sdGl0bGU6dC5kaXNwbGF5TmFtZT8/XCJVbnRpdGxlZCBMaXN0XCIsbGFiZWw6XCJMaXN0XCIsYWN0aW9uczpbe25hbWU6XCJMYXVuY2hcIn1dLGRhdGE6e3R5cGU6XCJsaXN0XCIsaXRlbTp7Li4udCxpZDpufX0sdGVtcGxhdGU6JC55Vy5QbGFpbix0ZW1wbGF0ZUNvbnRlbnQ6dm9pZCAwfX0pKXx8W10pO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKGBVbmtub3duIGJhdGNoIHJlc3BvbnNlIGlkOiAke3IuaWR9YCxyLmJvZHkpfWVsc2UgY29uc29sZS53YXJuKFwiQmF0Y2ggQVBJIHJlcXVlc3QgZmFpbGVkOiBcIixyKTtyZXR1cm4gbj1uLm1hcCgoZT0+e2lmKCFlLmRhdGE/Lml0ZW0/LmlkKXJldHVybiBlO2NvbnN0IHQ9WmUodGhpcyxFZSxcImZcIikuZ2V0KGUuZGF0YS5pdGVtLmlkKTtyZXR1cm4gdD97Li4uZSx0ZW1wbGF0ZTp0LnRlbXBsYXRlLHRlbXBsYXRlQ29udGVudDp0LnRlbXBsYXRlQ29udGVudH06ZX0pKSxuLnNvcnQoKChlLHQpPT5lLnRpdGxlPnQudGl0bGU/MTotMSkpfTt2YXIgRmU9bigzNDIwKTtjb25zdCBVZT0oKT0+RmUuaGQoKSxXZT0oKT0+KGFzeW5jKCk9Pihhd2FpdCgwLGMuRG0pKCkpLmRpc3BhdGNoKFwiZ2V0LWxlZ2FjeS13b3Jrc3BhY2VzXCIsdm9pZCAwKSkoKTt2YXIgemU9bigyNTI4KSxHZT1uKDEyMjIpLHFlPW4oMjEwOSksWWU9big2MTE0KX0pKCksbW9kdWxlLmV4cG9ydHM9cn0pKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFWaWV3O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0O1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdlYWtNYXA7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TWFwO1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBhbiBBU0NJSSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXNjaWlUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnNwbGl0KCcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc2NpaVRvQXJyYXk7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNBcmd1bWVudHM7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1R5cGVkQXJyYXk7XG4iLCJ2YXIgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5cztcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsInZhciBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udmFsdWVzYCBhbmQgYF8udmFsdWVzSW5gIHdoaWNoIGNyZWF0ZXMgYW5cbiAqIGFycmF5IG9mIGBvYmplY3RgIHByb3BlcnR5IHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eSBuYW1lc1xuICogb2YgYHByb3BzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIGdldCB2YWx1ZXMgZm9yLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlVmFsdWVzKG9iamVjdCwgcHJvcHMpIHtcbiAgcmV0dXJuIGFycmF5TWFwKHByb3BzLCBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gb2JqZWN0W2tleV07XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VWYWx1ZXM7XG4iLCIvKipcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5QXJyYXk7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3JlSnNEYXRhO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSYXdUYWc7XG4iLCJ2YXIgRGF0YVZpZXcgPSByZXF1aXJlKCcuL19EYXRhVmlldycpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIFByb21pc2UgPSByZXF1aXJlKCcuL19Qcm9taXNlJyksXG4gICAgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgV2Vha01hcCA9IHJlcXVpcmUoJy4vX1dlYWtNYXAnKSxcbiAgICBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cbnZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXG4gICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcbiAgICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcbiAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4vKipcbiAqIEdldHMgdGhlIGB0b1N0cmluZ1RhZ2Agb2YgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG52YXIgZ2V0VGFnID0gYmFzZUdldFRhZztcblxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxuaWYgKChEYXRhVmlldyAmJiBnZXRUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnKSB8fFxuICAgIChNYXAgJiYgZ2V0VGFnKG5ldyBNYXApICE9IG1hcFRhZykgfHxcbiAgICAoUHJvbWlzZSAmJiBnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XG4gICAgKFNldCAmJiBnZXRUYWcobmV3IFNldCkgIT0gc2V0VGFnKSB8fFxuICAgIChXZWFrTWFwICYmIGdldFRhZyhuZXcgV2Vha01hcCkgIT0gd2Vha01hcFRhZykpIHtcbiAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUdldFRhZyh2YWx1ZSksXG4gICAgICAgIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUuY29uc3RydWN0b3IgOiB1bmRlZmluZWQsXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gdG9Tb3VyY2UoQ3RvcikgOiAnJztcblxuICAgIGlmIChjdG9yU3RyaW5nKSB7XG4gICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHtcbiAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xuICAgICAgICBjYXNlIHByb21pc2VDdG9yU3RyaW5nOiByZXR1cm4gcHJvbWlzZVRhZztcbiAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRUYWc7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRWYWx1ZTtcbiIsIi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc1pXSiA9ICdcXFxcdTIwMGQnO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB3aXRoIFt6ZXJvLXdpZHRoIGpvaW5lcnMgb3IgY29kZSBwb2ludHMgZnJvbSB0aGUgYXN0cmFsIHBsYW5lc10oaHR0cDovL2Vldi5lZS9ibG9nLzIwMTUvMDkvMTIvZGFyay1jb3JuZXJzLW9mLXVuaWNvZGUvKS4gKi9cbnZhciByZUhhc1VuaWNvZGUgPSBSZWdFeHAoJ1snICsgcnNaV0ogKyByc0FzdHJhbFJhbmdlICArIHJzQ29tYm9SYW5nZSArIHJzVmFyUmFuZ2UgKyAnXScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBVbmljb2RlIHN5bWJvbHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGEgc3ltYm9sIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1VuaWNvZGUoc3RyaW5nKSB7XG4gIHJldHVybiByZUhhc1VuaWNvZGUudGVzdChzdHJpbmcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1VuaWNvZGU7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUHJvdG90eXBlO1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgaXRlcmF0b3JgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gaXRlcmF0b3IgVGhlIGl0ZXJhdG9yIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gaXRlcmF0b3JUb0FycmF5KGl0ZXJhdG9yKSB7XG4gIHZhciBkYXRhLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgd2hpbGUgKCEoZGF0YSA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgIHJlc3VsdC5wdXNoKGRhdGEudmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXRlcmF0b3JUb0FycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBUb0FycmF5O1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzO1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbm9kZVV0aWw7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJBcmc7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBzZXRgIHRvIGFuIGFycmF5IG9mIGl0cyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXQgVGhlIHNldCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvQXJyYXk7XG4iLCJ2YXIgYXNjaWlUb0FycmF5ID0gcmVxdWlyZSgnLi9fYXNjaWlUb0FycmF5JyksXG4gICAgaGFzVW5pY29kZSA9IHJlcXVpcmUoJy4vX2hhc1VuaWNvZGUnKSxcbiAgICB1bmljb2RlVG9BcnJheSA9IHJlcXVpcmUoJy4vX3VuaWNvZGVUb0FycmF5Jyk7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYW4gYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1RvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBoYXNVbmljb2RlKHN0cmluZylcbiAgICA/IHVuaWNvZGVUb0FycmF5KHN0cmluZylcbiAgICA6IGFzY2lpVG9BcnJheShzdHJpbmcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1RvQXJyYXk7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLCIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBc3RyYWwgPSAnWycgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xudmFyIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgIHJzU3ltYm9sID0gJyg/OicgKyBbcnNOb25Bc3RyYWwgKyByc0NvbWJvICsgJz8nLCByc0NvbWJvLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyLCByc0FzdHJhbF0uam9pbignfCcpICsgJyknO1xuXG4vKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xudmFyIHJlVW5pY29kZSA9IFJlZ0V4cChyc0ZpdHogKyAnKD89JyArIHJzRml0eiArICcpfCcgKyByc1N5bWJvbCArIHJzU2VxLCAnZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gdW5pY29kZVRvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlKSB8fCBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1bmljb2RlVG9BcnJheTtcbiIsInZhciBiYXNlSXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL19iYXNlSXNBcmd1bWVudHMnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FyZ3VtZW50cztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpLFxuICAgIHN0dWJGYWxzZSA9IHJlcXVpcmUoJy4vc3R1YkZhbHNlJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0J1ZmZlcjtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb247XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzdHJpbmcsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N0cmluZygnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N0cmluZygxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHxcbiAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmluZztcbiIsInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gKi9cbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJGYWxzZTtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc1N0cmluZyA9IHJlcXVpcmUoJy4vaXNTdHJpbmcnKSxcbiAgICBpdGVyYXRvclRvQXJyYXkgPSByZXF1aXJlKCcuL19pdGVyYXRvclRvQXJyYXknKSxcbiAgICBtYXBUb0FycmF5ID0gcmVxdWlyZSgnLi9fbWFwVG9BcnJheScpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5JyksXG4gICAgc3RyaW5nVG9BcnJheSA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvQXJyYXknKSxcbiAgICB2YWx1ZXMgPSByZXF1aXJlKCcuL3ZhbHVlcycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bUl0ZXJhdG9yID0gU3ltYm9sID8gU3ltYm9sLml0ZXJhdG9yIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0FycmF5KHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiBfLnRvQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gKlxuICogXy50b0FycmF5KDEpO1xuICogLy8gPT4gW11cbiAqXG4gKiBfLnRvQXJyYXkobnVsbCk7XG4gKiAvLyA9PiBbXVxuICovXG5mdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSkge1xuICAgIHJldHVybiBpc1N0cmluZyh2YWx1ZSkgPyBzdHJpbmdUb0FycmF5KHZhbHVlKSA6IGNvcHlBcnJheSh2YWx1ZSk7XG4gIH1cbiAgaWYgKHN5bUl0ZXJhdG9yICYmIHZhbHVlW3N5bUl0ZXJhdG9yXSkge1xuICAgIHJldHVybiBpdGVyYXRvclRvQXJyYXkodmFsdWVbc3ltSXRlcmF0b3JdKCkpO1xuICB9XG4gIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpLFxuICAgICAgZnVuYyA9IHRhZyA9PSBtYXBUYWcgPyBtYXBUb0FycmF5IDogKHRhZyA9PSBzZXRUYWcgPyBzZXRUb0FycmF5IDogdmFsdWVzKTtcblxuICByZXR1cm4gZnVuYyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9BcnJheTtcbiIsInZhciBiYXNlVmFsdWVzID0gcmVxdWlyZSgnLi9fYmFzZVZhbHVlcycpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHkgdmFsdWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLnZhbHVlcyhuZXcgRm9vKTtcbiAqIC8vID0+IFsxLCAyXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8udmFsdWVzKCdoaScpO1xuICogLy8gPT4gWydoJywgJ2knXVxuICovXG5mdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZVZhbHVlcyhvYmplY3QsIGtleXMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmFsdWVzO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9lbW9qaScpOyIsIi8qanNsaW50IG5vZGU6IHRydWUqL1xudmFyIHRvQXJyYXkgPSByZXF1aXJlKCdsb2Rhc2gvdG9BcnJheScpO1xudmFyIGVtb2ppQnlOYW1lID0gcmVxdWlyZSgnLi9lbW9qaS5qc29uJyk7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIHJlZ2V4IHRvIHBhcnNlIGVtb2ppIGluIGEgc3RyaW5nIC0gZmluZHMgZW1vamksIGUuZy4gOmNvZmZlZTpcbiAqL1xudmFyIGVtb2ppTmFtZVJlZ2V4ID0gLzooW2EtekEtWjAtOV9cXC1cXCtdKyk6L2c7XG5cbi8qKlxuICogcmVnZXggdG8gdHJpbSB3aGl0ZXNwYWNlXG4gKiB1c2UgaW5zdGVhZCBvZiBTdHJpbmcucHJvdG90eXBlLnRyaW0oKSBmb3IgSUU4IHN1cHBvcnRcbiAqL1xudmFyIHRyaW1TcGFjZVJlZ2V4ID0gL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG4vKipcbiAqIFJlbW92ZXMgY29sb25zIG9uIGVpdGhlciBzaWRlXG4gKiBvZiB0aGUgc3RyaW5nIGlmIHByZXNlbnRcbiAqIEBwYXJhbSAge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHN0cmlwQ29sb25zIChzdHIpIHtcbiAgdmFyIGNvbG9uSW5kZXggPSBzdHIuaW5kZXhPZignOicpO1xuICBpZiAoY29sb25JbmRleCA+IC0xKSB7XG4gICAgLy8gOmVtb2ppOiAoaHR0cDovL3d3dy5lbW9qaS1jaGVhdC1zaGVldC5jb20vKVxuICAgIGlmIChjb2xvbkluZGV4ID09PSBzdHIubGVuZ3RoIC0gMSkge1xuICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBjb2xvbkluZGV4KTtcbiAgICAgIHJldHVybiBzdHJpcENvbG9ucyhzdHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBzdHIuc3Vic3RyKGNvbG9uSW5kZXggKyAxKTtcbiAgICAgIHJldHVybiBzdHJpcENvbG9ucyhzdHIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogQWRkcyBjb2xvbnMgdG8gZWl0aGVyIHNpZGVcbiAqIG9mIHRoZSBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gd3JhcENvbG9ucyAoc3RyKSB7XG4gIHJldHVybiAodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgJiYgc3RyLmxlbmd0aCA+IDApID8gJzonICsgc3RyICsgJzonIDogc3RyO1xufVxuXG4vKipcbiAqIEVuc3VyZSB0aGF0IHRoZSB3b3JkIGlzIHdyYXBwZWQgaW4gY29sb25zXG4gKiBieSBvbmx5IGFkZGluZyB0aGVtLCBpZiB0aGV5IGFyZSBub3QgdGhlcmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVuc3VyZUNvbG9ucyAoc3RyKSB7XG4gIHJldHVybiAodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgJiYgc3RyWzBdICE9PSAnOicpID8gd3JhcENvbG9ucyhzdHIpIDogc3RyO1xufVxuXG4vLyBOb24gc3BhY2luZyBtYXJrLCBzb21lIGVtb3RpY29ucyBoYXZlIHRoZW0uIEl0J3MgdGhlICdWYXJpYW50IEZvcm0nLFxuLy8gd2hpY2ggcHJvdmlkZXMgbW9yZSBpbmZvcm1hdGlvbiBzbyB0aGF0IGVtb3RpY29ucyBjYW4gYmUgcmVuZGVyZWQgYXNcbi8vIG1vcmUgY29sb3JmdWwgZ3JhcGhpY3MuIEZFMEUgaXMgYSB1bmljb2RlIHRleHQgdmVyc2lvbiwgd2hlcmUgYXMgRkUwRlxuLy8gc2hvdWxkIGJlIHJlbmRlcmVkIGFzIGEgZ3JhcGhpY2FsIHZlcnNpb24uIFRoZSBjb2RlIGdyYWNlZnVsbHkgZGVncmFkZXMuXG52YXIgTk9OX1NQQUNJTkdfTUFSSyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoNjUwMzkpOyAvLyA2NTAzOSAtICfvuI8nIC0gMHhGRTBGO1xudmFyIG5vblNwYWNpbmdSZWdleCA9IG5ldyBSZWdFeHAoTk9OX1NQQUNJTkdfTUFSSywgJ2cnKVxuXG4vLyBSZW1vdmUgdGhlIG5vbi1zcGFjaW5nLW1hcmsgZnJvbSB0aGUgY29kZSwgbmV2ZXIgc2VuZCBhIHN0cmlwcGVkIHZlcnNpb25cbi8vIHRvIHRoZSBjbGllbnQsIGFzIGl0IGtpbGxzIGdyYXBoaWNhbCBlbW90aWNvbnMuXG5mdW5jdGlvbiBzdHJpcE5TQiAoY29kZSkge1xuICByZXR1cm4gY29kZS5yZXBsYWNlKG5vblNwYWNpbmdSZWdleCwgJycpO1xufTtcblxuLy8gUmV2ZXJzZWQgaGFzaCB0YWJsZSwgd2hlcmUgYXMgZW1vamlCeU5hbWUgY29udGFpbnMgYSB7IGhlYXJ0OiAn4p2kJyB9XG4vLyBkaWN0aW9uYXJ5IGVtb2ppQnlDb2RlIGNvbnRhaW5zIHsg4p2kOiAnaGVhcnQnIH0uIFRoZSBjb2RlcyBhcmUgbm9ybWFsaXplZFxuLy8gdG8gdGhlIHRleHQgdmVyc2lvbi5cbnZhciBlbW9qaUJ5Q29kZSA9IE9iamVjdC5rZXlzKGVtb2ppQnlOYW1lKS5yZWR1Y2UoZnVuY3Rpb24oaCxrKSB7XG4gIGhbc3RyaXBOU0IoZW1vamlCeU5hbWVba10pXSA9IGs7XG4gIHJldHVybiBoO1xufSwge30pO1xuXG4vKipcbiAqIEVtb2ppIG5hbWVzcGFjZVxuICovXG52YXIgRW1vamkgPSB7XG4gIGVtb2ppOiBlbW9qaUJ5TmFtZSxcbn07XG5cbi8qKlxuICogZ2V0IGVtb2ppIGNvZGUgZnJvbSBuYW1lLiByZXR1cm4gZW1vamkgY29kZSBiYWNrIGlmIGNvZGUgaXMgcGFzc2VkIGluLlxuICogQHBhcmFtICB7c3RyaW5nfSBlbW9qaVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5FbW9qaS5fZ2V0ID0gZnVuY3Rpb24gX2dldCAoZW1vamkpIHtcbiAgaWYgKGVtb2ppQnlDb2RlW3N0cmlwTlNCKGVtb2ppKV0pIHtcbiAgICByZXR1cm4gZW1vamk7XG4gIH0gZWxzZSBpZiAoZW1vamlCeU5hbWUuaGFzT3duUHJvcGVydHkoZW1vamkpKSB7XG4gICAgcmV0dXJuIGVtb2ppQnlOYW1lW2Vtb2ppXTtcbiAgfVxuXG4gIHJldHVybiBlbnN1cmVDb2xvbnMoZW1vamkpO1xufTtcblxuLyoqXG4gKiBnZXQgZW1vamkgY29kZSBmcm9tIDplbW9qaTogc3RyaW5nIG9yIG5hbWVcbiAqIEBwYXJhbSAge3N0cmluZ30gZW1vamlcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuRW1vamkuZ2V0ID0gZnVuY3Rpb24gZ2V0IChlbW9qaSkge1xuICBlbW9qaSA9IHN0cmlwQ29sb25zKGVtb2ppKTtcblxuICByZXR1cm4gRW1vamkuX2dldChlbW9qaSk7XG59O1xuXG4vKipcbiAqIGZpbmQgdGhlIGVtb2ppIGJ5IGVpdGhlciBjb2RlIG9yIG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lT3JDb2RlIFRoZSBlbW9qaSB0byBmaW5kLCBlaXRoZXIgYGNvZmZlZWAsIGA6Y29mZmVlOmAgb3IgYOKYlWA7XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbkVtb2ppLmZpbmQgPSBmdW5jdGlvbiBmaW5kIChuYW1lT3JDb2RlKSB7XG4gIHJldHVybiBFbW9qaS5maW5kQnlOYW1lKG5hbWVPckNvZGUpIHx8IEVtb2ppLmZpbmRCeUNvZGUobmFtZU9yQ29kZSk7XG59O1xuXG4vKipcbiAqIGZpbmQgdGhlIGVtb2ppIGJ5IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBlbW9qaSB0byBmaW5kIGVpdGhlciBgY29mZmVlYCBvciBgOmNvZmZlZTpgO1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5FbW9qaS5maW5kQnlOYW1lID0gZnVuY3Rpb24gZmluZEJ5TmFtZSAobmFtZSkge1xuICB2YXIgc3RyaXBwZWQgPSBzdHJpcENvbG9ucyhuYW1lKTtcbiAgdmFyIGVtb2ppID0gZW1vamlCeU5hbWVbc3RyaXBwZWRdO1xuXG4gIHJldHVybiBlbW9qaSA/ICh7IGVtb2ppOiBlbW9qaSwga2V5OiBzdHJpcHBlZCB9KSA6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogZmluZCB0aGUgZW1vamkgYnkgY29kZSAoZW1vamkpXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZSBUaGUgZW1vamkgdG8gZmluZDsgZm9yIGV4YW1wbGUgYOKYlWAgb3IgYOKYlGBcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuRW1vamkuZmluZEJ5Q29kZSA9IGZ1bmN0aW9uIGZpbmRCeUNvZGUgKGNvZGUpIHtcbiAgdmFyIHN0cmlwcGVkID0gc3RyaXBOU0IoY29kZSk7XG4gIHZhciBuYW1lID0gZW1vamlCeUNvZGVbc3RyaXBwZWRdO1xuXG4gIC8vIGxvb2t1cCBlbW9qaSB0byBlbnN1cmUgdGhlIFZhcmlhbnQgRm9ybSBpcyByZXR1cm5lZFxuICByZXR1cm4gbmFtZSA/ICh7IGVtb2ppOiBlbW9qaUJ5TmFtZVtuYW1lXSwga2V5OiBuYW1lIH0pIDogdW5kZWZpbmVkO1xufTtcblxuXG4vKipcbiAqIENoZWNrIGlmIGFuIGVtb2ppIGlzIGtub3duIGJ5IHRoaXMgbGlicmFyeVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVPckNvZGUgVGhlIGVtb2ppIHRvIHZhbGlkYXRlLCBlaXRoZXIgYGNvZmZlZWAsIGA6Y29mZmVlOmAgb3IgYOKYlWA7XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbkVtb2ppLmhhc0Vtb2ppID0gZnVuY3Rpb24gaGFzRW1vamkgKG5hbWVPckNvZGUpIHtcbiAgcmV0dXJuIEVtb2ppLmhhc0Vtb2ppQnlOYW1lKG5hbWVPckNvZGUpIHx8IEVtb2ppLmhhc0Vtb2ppQnlDb2RlKG5hbWVPckNvZGUpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBhbiBlbW9qaSB3aXRoIGdpdmVuIG5hbWUgaXMga25vd24gYnkgdGhpcyBsaWJyYXJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgZW1vamkgdG8gdmFsaWRhdGUgZWl0aGVyIGBjb2ZmZWVgIG9yIGA6Y29mZmVlOmA7XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbkVtb2ppLmhhc0Vtb2ppQnlOYW1lID0gZnVuY3Rpb24gaGFzRW1vamlCeU5hbWUgKG5hbWUpIHtcbiAgdmFyIHJlc3VsdCA9IEVtb2ppLmZpbmRCeU5hbWUobmFtZSk7XG4gIHJldHVybiAhIXJlc3VsdCAmJiByZXN1bHQua2V5ID09PSBzdHJpcENvbG9ucyhuYW1lKTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBnaXZlbiBlbW9qaSBpcyBrbm93biBieSB0aGlzIGxpYnJhcnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIFRoZSBlbW9qaSB0byB2YWxpZGF0ZTsgZm9yIGV4YW1wbGUgYOKYlWAgb3IgYOKYlGBcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuRW1vamkuaGFzRW1vamlCeUNvZGUgPSBmdW5jdGlvbiBoYXNFbW9qaUJ5Q29kZSAoY29kZSkge1xuICB2YXIgcmVzdWx0ID0gRW1vamkuZmluZEJ5Q29kZShjb2RlKTtcbiAgcmV0dXJuICEhcmVzdWx0ICYmIHN0cmlwTlNCKHJlc3VsdC5lbW9qaSkgPT09IHN0cmlwTlNCKGNvZGUpO1xufTtcblxuLyoqXG4gKiBnZXQgZW1vamkgbmFtZSBmcm9tIGNvZGVcbiAqIEBwYXJhbSAge3N0cmluZ30gZW1vamlcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluY2x1ZGVDb2xvbnMgc2hvdWxkIHRoZSByZXN1bHQgaW5jbHVkZSB0aGUgOjpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuRW1vamkud2hpY2ggPSBmdW5jdGlvbiB3aGljaCAoZW1vamlfY29kZSwgaW5jbHVkZUNvbG9ucykge1xuICB2YXIgY29kZSA9IHN0cmlwTlNCKGVtb2ppX2NvZGUpO1xuICB2YXIgd29yZCA9IGVtb2ppQnlDb2RlW2NvZGVdO1xuXG4gIHJldHVybiBpbmNsdWRlQ29sb25zID8gd3JhcENvbG9ucyh3b3JkKSA6IHdvcmQ7XG59O1xuXG4vKipcbiAqIGVtb2ppZnkgYSBzdHJpbmcgKHJlcGxhY2UgOmVtb2ppOiB3aXRoIGFuIGVtb2ppKVxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSAge2Z1bmN0aW9ufSBvbl9taXNzaW5nIChnZXRzIGVtb2ppIG5hbWUgd2l0aG91dCA6OiBhbmQgcmV0dXJucyBhIHByb3BlciBlbW9qaSBpZiBubyBlbW9qaSB3YXMgZm91bmQpXG4gKiBAcGFyYW0gIHtmdW5jdGlvbn0gZm9ybWF0ICh3cmFwIHRoZSByZXR1cm5lZCBlbW9qaSBpbiBhIGN1c3RvbSBlbGVtZW50KVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5FbW9qaS5lbW9qaWZ5ID0gZnVuY3Rpb24gZW1vamlmeSAoc3RyLCBvbl9taXNzaW5nLCBmb3JtYXQpIHtcbiAgaWYgKCFzdHIpIHJldHVybiAnJztcblxuICByZXR1cm4gc3RyLnNwbGl0KGVtb2ppTmFtZVJlZ2V4KSAvLyBwYXJzZSBlbW9qaSB2aWEgcmVnZXhcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gcGFyc2VFbW9qaShzLCBpKSB7XG4gICAgICAgICAgICAgIC8vIGV2ZXJ5IHNlY29uZCBlbGVtZW50IGlzIGFuIGVtb2ppLCBlLmcuIFwidGVzdCA6ZmFzdF9mb3J3YXJkOlwiIC0+IFsgXCJ0ZXN0IFwiLCBcImZhc3RfZm9yd2FyZFwiIF1cbiAgICAgICAgICAgICAgaWYgKGkgJSAyID09PSAwKSByZXR1cm4gcztcbiAgICAgICAgICAgICAgdmFyIGVtb2ppID0gRW1vamkuX2dldChzKTtcbiAgICAgICAgICAgICAgdmFyIGlzTWlzc2luZyA9IGVtb2ppLmluZGV4T2YoJzonKSA+IC0xO1xuXG4gICAgICAgICAgICAgIGlmIChpc01pc3NpbmcgJiYgdHlwZW9mIG9uX21pc3NpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb25fbWlzc2luZyhzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghaXNNaXNzaW5nICYmIHR5cGVvZiBmb3JtYXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0KGVtb2ppLCBzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBlbW9qaTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignJykgLy8gY29udmVydCBiYWNrIHRvIHN0cmluZ1xuICA7XG59O1xuXG4vKipcbiAqIHJldHVybiBhIHJhbmRvbSBlbW9qaVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5FbW9qaS5yYW5kb20gPSBmdW5jdGlvbiByYW5kb20gKCkge1xuICB2YXIgZW1vamlLZXlzID0gT2JqZWN0LmtleXMoZW1vamlCeU5hbWUpO1xuICB2YXIgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBlbW9qaUtleXMubGVuZ3RoKTtcbiAgdmFyIGtleSA9IGVtb2ppS2V5c1tyYW5kb21JbmRleF07XG4gIHZhciBlbW9qaSA9IEVtb2ppLl9nZXQoa2V5KTtcbiAgcmV0dXJuIHsga2V5OiBrZXksIGVtb2ppOiBlbW9qaSB9O1xufVxuXG4vKipcbiAqICByZXR1cm4gYW4gY29sbGVjdGlvbiBvZiBwb3RlbnRpYWwgZW1vamkgbWF0Y2hlc1xuICogIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqICBAcmV0dXJuIHtBcnJheS48T2JqZWN0Pn1cbiAqL1xuRW1vamkuc2VhcmNoID0gZnVuY3Rpb24gc2VhcmNoIChzdHIpIHtcbiAgdmFyIGVtb2ppS2V5cyA9IE9iamVjdC5rZXlzKGVtb2ppQnlOYW1lKTtcbiAgdmFyIG1hdGNoZXIgPSBzdHJpcENvbG9ucyhzdHIpXG4gIHZhciBtYXRjaGluZ0tleXMgPSBlbW9qaUtleXMuZmlsdGVyKGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBrZXkudG9TdHJpbmcoKS5pbmRleE9mKG1hdGNoZXIpID09PSAwO1xuICB9KTtcbiAgcmV0dXJuIG1hdGNoaW5nS2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleToga2V5LFxuICAgICAgZW1vamk6IEVtb2ppLl9nZXQoa2V5KSxcbiAgICB9O1xuICB9KTtcbn1cblxuLyoqXG4gKiB1bmVtb2ppZnkgYSBzdHJpbmcgKHJlcGxhY2UgZW1vamkgd2l0aCA6ZW1vamk6KVxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuRW1vamkudW5lbW9qaWZ5ID0gZnVuY3Rpb24gdW5lbW9qaWZ5IChzdHIpIHtcbiAgaWYgKCFzdHIpIHJldHVybiAnJztcbiAgdmFyIHdvcmRzID0gdG9BcnJheShzdHIpO1xuXG4gIHJldHVybiB3b3Jkcy5tYXAoZnVuY3Rpb24od29yZCkge1xuICAgIHJldHVybiBFbW9qaS53aGljaCh3b3JkLCB0cnVlKSB8fCB3b3JkO1xuICB9KS5qb2luKCcnKTtcbn07XG5cbi8qKlxuICogcmVwbGFjZSBlbW9qaXMgd2l0aCByZXBsYWNlbWVudCB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtmdW5jdGlvbnxzdHJpbmd9IHRoZSBzdHJpbmcgb3IgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmVwbGFjZSB0aGUgZW1vamkgd2l0aFxuICogQHBhcmFtIHtib29sZWFufSBzaG91bGQgdHJhaWxpbmcgd2hpdGVzcGFjZXMgYmUgY2xlYW5lZD8gRGVmYXVsdHMgZmFsc2VcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuRW1vamkucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2UgKHN0ciwgcmVwbGFjZW1lbnQsIGNsZWFuU3BhY2VzKSB7XG4gIGlmICghc3RyKSByZXR1cm4gJyc7XG5cbiAgdmFyIHJlcGxhY2UgPSB0eXBlb2YgcmVwbGFjZW1lbnQgPT09ICdmdW5jdGlvbicgPyByZXBsYWNlbWVudCA6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVwbGFjZW1lbnQ7IH07XG4gIHZhciB3b3JkcyA9IHRvQXJyYXkoc3RyKTtcblxuICB2YXIgcmVwbGFjZWQgPSB3b3Jkcy5tYXAoZnVuY3Rpb24od29yZCwgaWR4KSB7XG4gICAgdmFyIGVtb2ppID0gRW1vamkuZmluZEJ5Q29kZSh3b3JkKTtcblxuICAgIGlmIChlbW9qaSAmJiBjbGVhblNwYWNlcyAmJiB3b3Jkc1tpZHggKyAxXSA9PT0gJyAnKSB7XG4gICAgICB3b3Jkc1tpZHggKyAxXSA9ICcnO1xuICAgIH1cblxuICAgIHJldHVybiBlbW9qaSA/IHJlcGxhY2UoZW1vamkpIDogd29yZDtcbiAgfSkuam9pbignJyk7XG5cbiAgcmV0dXJuIGNsZWFuU3BhY2VzID8gcmVwbGFjZWQucmVwbGFjZSh0cmltU3BhY2VSZWdleCwgJycpIDogcmVwbGFjZWQ7XG59O1xuXG5cbi8qKlxuICogcmVtb3ZlIGFsbCBlbW9qaXMgZnJvbSBhIHN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5FbW9qaS5zdHJpcCA9IGZ1bmN0aW9uIHN0cmlwIChzdHIpIHtcbiAgcmV0dXJuIEVtb2ppLnJlcGxhY2Uoc3RyLCAnJywgdHJ1ZSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVtb2ppO1xuIiwiaW1wb3J0IHtcblx0Q0xJVGVtcGxhdGUsXG5cdEhvbWUsXG5cdHR5cGUgSG9tZURpc3BhdGNoZWRTZWFyY2hSZXN1bHQsXG5cdHR5cGUgSG9tZVByb3ZpZGVyLFxuXHR0eXBlIEhvbWVSZWdpc3RyYXRpb24sXG5cdHR5cGUgSG9tZVNlYXJjaExpc3RlbmVyUmVxdWVzdCxcblx0dHlwZSBIb21lU2VhcmNoTGlzdGVuZXJSZXNwb25zZSxcblx0dHlwZSBIb21lU2VhcmNoUmVzcG9uc2Vcbn0gZnJvbSBcIkBvcGVuZmluL3dvcmtzcGFjZVwiO1xuaW1wb3J0IHsgZ2V0SGVscFNlYXJjaEVudHJpZXMsIGdldFNlYXJjaFJlc3VsdHMsIGluaXRpYWxpemVTb3VyY2VzLCBpdGVtU2VsZWN0aW9uIH0gZnJvbSBcIi4vc291cmNlc1wiO1xuXG4vKipcbiAqIFJlZ2lzdGVyIHdpdGggdGhlIGhvbWUgY29tcG9uZW50LlxuICogQHBhcmFtIGlkIFRoZSBpZCB0byByZWdpc3RlciB0aGUgcHJvdmlkZXIgd2l0aC5cbiAqIEBwYXJhbSB0aXRsZSBUaGUgdGl0bGUgdG8gdXNlIGZvciB0aGUgaG9tZSByZWdpc3RyYXRpb24uXG4gKiBAcGFyYW0gaWNvbiBUaGUgaWNvbiB0byB1c2UgZm9yIHRoZSBob21lIHJlZ2lzdHJhdGlvbi5cbiAqIEByZXR1cm5zIFRoZSByZWdpc3RyYXRpb24gZGV0YWlscyBmb3IgaG9tZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZ2lzdGVyKGlkOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIGljb246IHN0cmluZyk6IFByb21pc2U8SG9tZVJlZ2lzdHJhdGlvbj4ge1xuXHRjb25zb2xlLmxvZyhcIkluaXRpYWxpemluZyBob21lLlwiKTtcblxuXHRsZXQgbGFzdFJlc3BvbnNlOiBIb21lU2VhcmNoTGlzdGVuZXJSZXNwb25zZTtcblxuXHQvKipcblx0ICogVGhlIGNhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHVzZXIgdHlwZXMgaW4gdGhlIGhvbWUgcXVlcnkuXG5cdCAqIEBwYXJhbSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCBmcm9tIHRoZSBob21lIGNvbXBvbmVudC5cblx0ICogQHBhcmFtIHJlc3BvbnNlIFRoZSByZXNwb25zZSB0byB1c2UgZm9yIGFzeW5jIHVwZGF0ZXMuXG5cdCAqIEByZXR1cm5zIFRoZSByZXN1bHRzIHRvIGRpc3BsYXkgaW4gaG9tZS5cblx0ICovXG5cdGFzeW5jIGZ1bmN0aW9uIG9uVXNlcklucHV0KFxuXHRcdHJlcXVlc3Q6IEhvbWVTZWFyY2hMaXN0ZW5lclJlcXVlc3QsXG5cdFx0cmVzcG9uc2U6IEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlXG5cdCk6IFByb21pc2U8SG9tZVNlYXJjaFJlc3BvbnNlPiB7XG5cdFx0Y29uc3QgcXVlcnlMb3dlciA9IHJlcXVlc3QucXVlcnkudG9Mb3dlckNhc2UoKTtcblxuXHRcdC8vIElmIHRoZSBxdWVyeSBzdGFydHMgd2l0aCBhID8gdHJlYXQgdGhpcyBhcyBhIGhlbHAgcmVxdWVzdFxuXHRcdC8vIHNvIHdlIGRvbid0IGhhdmUgYW55IGFkZGl0aW9uYWwgZW50cmllcyB0byBzaG93XG5cdFx0aWYgKHF1ZXJ5TG93ZXIuc3RhcnRzV2l0aChcIj9cIikpIHtcblx0XHRcdHJldHVybiB7IHJlc3VsdHM6IGF3YWl0IGdldEhlbHBTZWFyY2hFbnRyaWVzKCkgfTtcblx0XHR9XG5cblx0XHRpZiAobGFzdFJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGxhc3RSZXNwb25zZS5jbG9zZSgpO1xuXHRcdH1cblx0XHRsYXN0UmVzcG9uc2UgPSByZXNwb25zZTtcblx0XHRsYXN0UmVzcG9uc2Uub3BlbigpO1xuXG5cdFx0aWYgKHF1ZXJ5TG93ZXIuc3RhcnRzV2l0aChcIi9sb2FkaW5nXCIpKSB7XG5cdFx0XHQvLyBFeGFtcGxlIGNvbW1hbmQgc2hvd2luZyB0aGUgZGVmYXVsdCBsb2FkaW5nIHRlbXBsYXRlXG5cdFx0XHQvLyBTZWxlY3RpbmcgdGhlIHRlbXBsYXRlIHdpbGwgc2hvdyBhIGxvYWRlZCBwYWdlXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRyZXN1bHRzOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0a2V5OiBcImxvYWRpbmctMDAwMVwiLFxuXHRcdFx0XHRcdFx0dGl0bGU6IFwiRXhhbXBsZSBsb2FkaW5nIGluZGljYXRvclwiLFxuXHRcdFx0XHRcdFx0bGFiZWw6IFwiSW5mb3JtYXRpb25cIixcblx0XHRcdFx0XHRcdGFjdGlvbnM6IFtdLFxuXHRcdFx0XHRcdFx0ZGF0YToge30sXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZTogQ0xJVGVtcGxhdGUuTG9hZGluZyxcblx0XHRcdFx0XHRcdHRlbXBsYXRlQ29udGVudDogXCJcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XVxuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKHF1ZXJ5TG93ZXIuc3RhcnRzV2l0aChcIi9lcnJvclwiKSkge1xuXHRcdFx0Ly8gRXhhbXBsZSBjb21tYW5kIHNob3dpbmcgdGhlIGRlZmF1bHQgZXJyb3IgdGVtcGxhdGVcblx0XHRcdC8vIFNlbGVjdGluZyBvciByZWxvYWRpbmcgdGhlIHRlbXBsYXRlIHdpbGwgc2hvdyBhIGxvYWRlZCBwYWdlXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRyZXN1bHRzOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0a2V5OiBcImVycm9yLTAwMDFcIixcblx0XHRcdFx0XHRcdHRpdGxlOiBcIkV4YW1wbGUgZXJyb3IgaW5kaWNhdG9yXCIsXG5cdFx0XHRcdFx0XHRsYWJlbDogXCJJbmZvcm1hdGlvblwiLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogW10sXG5cdFx0XHRcdFx0XHRkYXRhOiB7fSxcblx0XHRcdFx0XHRcdHRlbXBsYXRlOiBDTElUZW1wbGF0ZS5FcnJvcixcblx0XHRcdFx0XHRcdHRlbXBsYXRlQ29udGVudDogXCJcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZ2V0U2VhcmNoUmVzdWx0cyhyZXF1ZXN0LnF1ZXJ5LCBbXSwgbGFzdFJlc3BvbnNlLCB7XG5cdFx0XHRpc1N1Z2dlc3Rpb246IHJlcXVlc3QuY29udGV4dD8uaXNTdWdnZXN0aW9uID8/IGZhbHNlXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGNhbGxiYWNrIGZpcmVkIHdoZW4gYSBzZWxlY3Rpb24gaXMgbWFkZSBpbiBob21lLlxuXHQgKiBAcGFyYW0gcmVzdWx0IFRoZSBpdGVtIHRoYXQgd2FzIHNlbGVjdGVkIGluIGhvbWUuXG5cdCAqL1xuXHRhc3luYyBmdW5jdGlvbiBvblNlbGVjdGlvbihyZXN1bHQ6IEhvbWVEaXNwYXRjaGVkU2VhcmNoUmVzdWx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHJlc3VsdC5kYXRhICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGxldCBoYW5kbGVkID0gZmFsc2U7XG5cdFx0XHRpZiAocmVzdWx0LmFjdGlvbi50cmlnZ2VyID09PSBcInVzZXItYWN0aW9uXCIgJiYgcmVzdWx0LmtleSA9PT0gXCJsb2FkaW5nLTAwMDFcIikge1xuXHRcdFx0XHRsYXN0UmVzcG9uc2UucmV2b2tlKFwibG9hZGluZy0wMDAxXCIpO1xuXHRcdFx0XHRsYXN0UmVzcG9uc2UucmVzcG9uZChbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0a2V5OiBcImNvbnRlbnQtMDAwMVwiLFxuXHRcdFx0XHRcdFx0dGl0bGU6IFwiRXhhbXBsZSBDb250ZW50XCIsXG5cdFx0XHRcdFx0XHRsYWJlbDogXCJJbmZvcm1hdGlvblwiLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogW10sXG5cdFx0XHRcdFx0XHRkYXRhOiB7fSxcblx0XHRcdFx0XHRcdHRlbXBsYXRlOiBDTElUZW1wbGF0ZS5TaW1wbGVUZXh0LFxuXHRcdFx0XHRcdFx0dGVtcGxhdGVDb250ZW50OiBcIlJlc3VsdCBsb2FkZWRcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XSk7XG5cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0cmVzdWx0LmtleSA9PT0gXCJlcnJvci0wMDAxXCIgJiZcblx0XHRcdFx0KHJlc3VsdC5hY3Rpb24udHJpZ2dlciA9PT0gXCJ1c2VyLWFjdGlvblwiIHx8IHJlc3VsdC5hY3Rpb24udHJpZ2dlciA9PT0gXCJyZWxvYWRcIilcblx0XHRcdCkge1xuXHRcdFx0XHRsYXN0UmVzcG9uc2UucmV2b2tlKFwiZXJyb3ItMDAwMVwiKTtcblx0XHRcdFx0bGFzdFJlc3BvbnNlLnJlc3BvbmQoW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGtleTogXCJjb250ZW50LTAwMDFcIixcblx0XHRcdFx0XHRcdHRpdGxlOiBcIkV4YW1wbGUgQ29udGVudFwiLFxuXHRcdFx0XHRcdFx0bGFiZWw6IFwiSW5mb3JtYXRpb25cIixcblx0XHRcdFx0XHRcdGFjdGlvbnM6IFtdLFxuXHRcdFx0XHRcdFx0ZGF0YToge30sXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZTogQ0xJVGVtcGxhdGUuU2ltcGxlVGV4dCxcblx0XHRcdFx0XHRcdHRlbXBsYXRlQ29udGVudDogXCJSZXN1bHQgbG9hZGVkXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0pO1xuXHRcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAocmVzdWx0LmFjdGlvbi50cmlnZ2VyID09PSBcInVzZXItYWN0aW9uXCIgJiYgcmVzdWx0LmtleSA9PT0gXCJjb250ZW50LTAwMDFcIikge1xuXHRcdFx0XHRsYXN0UmVzcG9uc2UucmV2b2tlKFwiY29udGVudC0wMDAxXCIpO1xuXHRcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGlmICghaGFuZGxlZCkge1xuXHRcdFx0XHRhd2FpdCBpdGVtU2VsZWN0aW9uKHJlc3VsdCwgbGFzdFJlc3BvbnNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBJbXBvcnRhbnQgdG8gbm90ZSB3ZSBlbmFibGUgdGhlIGRpc3BhdGNoRm9jdXNFdmVudHMgZmxhZ1xuXHQvLyB3aGljaCBtZWFucyB3ZSByZWNlaXZlIGBmb2N1cy1jaGFuZ2VgIGV2ZW50cyBpbiB0aGUgb25TZWxlY3Rpb25cblx0Ly8gY2FsbGJhY2sgYWxsb3dpbmcgdXMgdG8gbGF6eSBsb2FkIGEgdGVtcGxhdGVcblx0Y29uc3QgaG9tZVByb3ZpZGVyOiBIb21lUHJvdmlkZXIgPSB7XG5cdFx0aWQsXG5cdFx0dGl0bGUsXG5cdFx0aWNvbixcblx0XHRvblVzZXJJbnB1dCxcblx0XHRvblJlc3VsdERpc3BhdGNoOiBvblNlbGVjdGlvbixcblx0XHRkaXNwYXRjaEZvY3VzRXZlbnRzOiB0cnVlXG5cdH07XG5cblx0Y29uc3QgaG9tZVJlZ2lzdHJhdGlvbiA9IGF3YWl0IEhvbWUucmVnaXN0ZXIoaG9tZVByb3ZpZGVyKTtcblx0Y29uc29sZS5sb2coXCJIb21lIGNvbmZpZ3VyZWQuXCIpO1xuXHRjb25zb2xlLmxvZyhob21lUmVnaXN0cmF0aW9uKTtcblxuXHQvLyBJbml0aWFsaXplIGFsbCB0aGUgZGF0YSBzb3VyY2VzXG5cdGF3YWl0IGluaXRpYWxpemVTb3VyY2VzKGhvbWVSZWdpc3RyYXRpb24pO1xuXG5cdHJldHVybiBob21lUmVnaXN0cmF0aW9uO1xufVxuIiwiaW1wb3J0IHR5cGUge1xuXHRDTElGaWx0ZXIsXG5cdEhvbWVEaXNwYXRjaGVkU2VhcmNoUmVzdWx0LFxuXHRIb21lUmVnaXN0cmF0aW9uLFxuXHRIb21lU2VhcmNoTGlzdGVuZXJSZXNwb25zZSxcblx0SG9tZVNlYXJjaFJlc3BvbnNlLFxuXHRIb21lU2VhcmNoUmVzdWx0XG59IGZyb20gXCJAb3BlbmZpbi93b3Jrc3BhY2VcIjtcbmltcG9ydCB0eXBlIHsgSVNvdXJjZSwgSVNvdXJjZURlZmluaXRpb24gfSBmcm9tIFwiLi9zaGFwZXNcIjtcbmltcG9ydCB7IEFzeW5jQ29udGFjdHNTb3VyY2UgfSBmcm9tIFwiLi9zb3VyY2VzL2FzeW5jLWNvbnRhY3RzL2FzeW5jLWNvbnRhY3RzLXNvdXJjZVwiO1xuaW1wb3J0IHsgRW1vamlTb3VyY2UgfSBmcm9tIFwiLi9zb3VyY2VzL2Vtb2ppL2Vtb2ppLXNvdXJjZVwiO1xuaW1wb3J0IHsgUXVvdGVTb3VyY2UgfSBmcm9tIFwiLi9zb3VyY2VzL3F1b3RlL3F1b3RlLXNvdXJjZVwiO1xuaW1wb3J0IHsgU3VnZ2VzdGlvblNvdXJjZSB9IGZyb20gXCIuL3NvdXJjZXMvc3VnZ2VzdGlvbnMvc3VnZ2VzdGlvbi1zb3VyY2VcIjtcbmltcG9ydCB7IFRlbXBsYXRlVHlwZXNTb3VyY2UgfSBmcm9tIFwiLi9zb3VyY2VzL3RlbXBsYXRlLXR5cGVzL3RlbXBsYXRlLXR5cGVzLXNvdXJjZVwiO1xuaW1wb3J0IHsgVHJlZUlubGluZVNvdXJjZSB9IGZyb20gXCIuL3NvdXJjZXMvdHJlZS1pbmxpbmUvdHJlZS1pbmxpbmUtc291cmNlXCI7XG5pbXBvcnQgeyBUcmVlUXVlcnlTb3VyY2UgfSBmcm9tIFwiLi9zb3VyY2VzL3RyZWUtcXVlcnkvdHJlZS1xdWVyeS1zb3VyY2VcIjtcblxuLy8gQ29uZmlndXJhdGlvbiBmb3IgYWxsIHRoZSBkYXRhIHNvdXJjZXMuXG5jb25zdCBTT1VSQ0VTOiB7XG5cdGRlZmluaXRpb246IElTb3VyY2VEZWZpbml0aW9uO1xuXHRpbnN0YW5jZTogSVNvdXJjZTtcbn1bXSA9IFtcblx0e1xuXHRcdGRlZmluaXRpb246IHtcblx0XHRcdGlkOiBcInF1b3RlXCIsXG5cdFx0XHRkYXRhOiB7XG5cdFx0XHRcdHJvb3RVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2RhdGEvcXVvdGVzL1wiXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRpbnN0YW5jZTogbmV3IFF1b3RlU291cmNlKClcblx0fSxcblx0e1xuXHRcdGRlZmluaXRpb246IHtcblx0XHRcdGlkOiBcImVtb2ppXCIsXG5cdFx0XHRkYXRhOiB7XG5cdFx0XHRcdHJvb3RVcmw6IFwiXCJcblx0XHRcdH1cblx0XHR9LFxuXHRcdGluc3RhbmNlOiBuZXcgRW1vamlTb3VyY2UoKVxuXHR9LFxuXHR7XG5cdFx0ZGVmaW5pdGlvbjoge1xuXHRcdFx0aWQ6IFwiYXN5bmNcIixcblx0XHRcdGRhdGE6IHtcblx0XHRcdFx0cm9vdFVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODAvZGF0YS9jb250YWN0cy9cIlxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0aW5zdGFuY2U6IG5ldyBBc3luY0NvbnRhY3RzU291cmNlKClcblx0fSxcblx0e1xuXHRcdGRlZmluaXRpb246IHtcblx0XHRcdGlkOiBcInRyZWUtcXVlcnlcIixcblx0XHRcdGRhdGE6IHtcblx0XHRcdFx0cm9vdFVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODAvZGF0YS9vcmdhbml6YXRpb25zL1wiXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRpbnN0YW5jZTogbmV3IFRyZWVRdWVyeVNvdXJjZSgpXG5cdH0sXG5cdHtcblx0XHRkZWZpbml0aW9uOiB7XG5cdFx0XHRpZDogXCJ0cmVlLWlubGluZVwiLFxuXHRcdFx0ZGF0YToge1xuXHRcdFx0XHRyb290VXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9kYXRhL29yZ2FuaXphdGlvbnMvXCJcblx0XHRcdH1cblx0XHR9LFxuXHRcdGluc3RhbmNlOiBuZXcgVHJlZUlubGluZVNvdXJjZSgpXG5cdH0sXG5cdHtcblx0XHRkZWZpbml0aW9uOiB7XG5cdFx0XHRpZDogXCJzdWdnZXN0aW9uc1wiXG5cdFx0fSxcblx0XHRpbnN0YW5jZTogbmV3IFN1Z2dlc3Rpb25Tb3VyY2UoKVxuXHR9LFxuXHR7XG5cdFx0ZGVmaW5pdGlvbjoge1xuXHRcdFx0aWQ6IFwidGVtcGxhdGUtdHlwZXNcIlxuXHRcdH0sXG5cdFx0aW5zdGFuY2U6IG5ldyBUZW1wbGF0ZVR5cGVzU291cmNlKClcblx0fVxuXTtcblxuLyoqXG4gKiBJbml0aWFsaXplIHRoZSBzb3VyY2VzLlxuICogQHBhcmFtIGhvbWVSZWdpc3RyYXRpb24gVGhlIGhvbWUgcmVnaXN0cmF0aW9uIHRvIHVzZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRpYWxpemVTb3VyY2VzKGhvbWVSZWdpc3RyYXRpb246IEhvbWVSZWdpc3RyYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcblx0Zm9yIChjb25zdCBzb3VyY2Ugb2YgU09VUkNFUykge1xuXHRcdGF3YWl0IHNvdXJjZS5pbnN0YW5jZS5pbml0aWFsaXplKHNvdXJjZS5kZWZpbml0aW9uLCAoKSA9PiB7fSwge1xuXHRcdFx0c2V0U2VhcmNoUXVlcnk6IGFzeW5jIChxdWVyeTogc3RyaW5nKSA9PiBob21lUmVnaXN0cmF0aW9uLnNldFNlYXJjaFF1ZXJ5KHF1ZXJ5KSxcblx0XHRcdG9wZW5Vcmw6IGFzeW5jICh1cmw6IHN0cmluZykgPT4gZmluLlN5c3RlbS5vcGVuVXJsV2l0aEJyb3dzZXIodXJsKVxuXHRcdH0pO1xuXHR9XG59XG5cbi8qKlxuICogR2V0IHRoZSBoZWxwIHNlYXJjaCByZXN1bHRzIGJ5IGl0ZXJhdGluZyB0aGUgbGlzdCBvZiBzb3VyY2VzLlxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgaGVscCBlbnRyaWVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0SGVscFNlYXJjaEVudHJpZXMoKTogUHJvbWlzZTxIb21lU2VhcmNoUmVzdWx0W10+IHtcblx0bGV0IGhlbHBSZXN1bHRzOiBIb21lU2VhcmNoUmVzdWx0W10gPSBbXTtcblxuXHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgU09VUkNFUykge1xuXHRcdGhlbHBSZXN1bHRzID0gaGVscFJlc3VsdHMuY29uY2F0KGF3YWl0IGVsZW1lbnQuaW5zdGFuY2UuZ2V0SGVscFNlYXJjaEVudHJpZXMoKSk7XG5cdH1cblxuXHRyZXR1cm4gaGVscFJlc3VsdHM7XG59XG5cbi8qKlxuICogR2V0IHRoZSBzZWFyY2ggcmVzdWx0cyBieSBpdGVyYXRpbmcgdGhlIGxpc3Qgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBxdWVyeSBUaGUgcXVlcnkgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSBmaWx0ZXJzIFRoZSBmaWx0ZXJzIHRvIGFwcGx5LlxuICogQHBhcmFtIGxhc3RSZXNwb25zZSBUaGUgbGFzdCBzZWFyY2ggcmVzcG9uc2UgdXNlZCBmb3IgdXBkYXRpbmcgZXhpc3RpbmcgcmVzdWx0cy5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSBnZXQgc2VhcmNoIHJlc3VsdHMuXG4gKiBAcGFyYW0gb3B0aW9ucy5pc1N1Z2dlc3Rpb24gSXMgdGhlIHF1ZXJ5IGEgc3VnZ2VzdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHNlYXJjaCByZXN1bHRzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2VhcmNoUmVzdWx0cyhcblx0cXVlcnk6IHN0cmluZyxcblx0ZmlsdGVyczogQ0xJRmlsdGVyW10sXG5cdGxhc3RSZXNwb25zZTogSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2UsXG5cdG9wdGlvbnM6IHtcblx0XHRpc1N1Z2dlc3Rpb246IGJvb2xlYW47XG5cdH1cbik6IFByb21pc2U8SG9tZVNlYXJjaFJlc3BvbnNlPiB7XG5cdGNvbnN0IHJlc3BvbnNlOiBIb21lU2VhcmNoUmVzcG9uc2UgPSB7XG5cdFx0cmVzdWx0czogW11cblx0fTtcblxuXHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgU09VUkNFUykge1xuXHRcdGNvbnN0IHNlYXJjaFJlc3BvbnNlID0gYXdhaXQgZWxlbWVudC5pbnN0YW5jZS5nZXRTZWFyY2hSZXN1bHRzKHF1ZXJ5LCBmaWx0ZXJzLCBsYXN0UmVzcG9uc2UsIHtcblx0XHRcdGlzU3VnZ2VzdGlvbjogb3B0aW9ucy5pc1N1Z2dlc3Rpb25cblx0XHR9KTtcblx0XHRyZXNwb25zZS5yZXN1bHRzID0gcmVzcG9uc2UucmVzdWx0cy5jb25jYXQoc2VhcmNoUmVzcG9uc2UucmVzdWx0cyk7XG5cdH1cblxuXHRyZXR1cm4gcmVzcG9uc2U7XG59XG5cbi8qKlxuICogQW4gZW50cnkgaGFzIGJlZW4gc2VsZWN0ZWQsIHNvIGxvb2t1cCB0aGUgcHJvdmlkZXJJZCBpbiB0aGUgZGF0YSBhbmRcbiAqIHBhc3MgdGhlIHJlc3VsdCBkYXRhIHRvIGl0LlxuICogQHBhcmFtIHJlc3VsdCBUaGUgZGlzcGF0Y2hlZCByZXN1bHQuXG4gKiBAcGFyYW0gbGFzdFJlc3BvbnNlIFRoZSBsYXN0IHJlc3BvbnNlLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgaXRlbSB3YXMgaGFuZGxlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGl0ZW1TZWxlY3Rpb24oXG5cdHJlc3VsdDogSG9tZURpc3BhdGNoZWRTZWFyY2hSZXN1bHQsXG5cdGxhc3RSZXNwb25zZTogSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2Vcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRsZXQgcmVzID0gZmFsc2U7XG5cblx0Y29uc3QgZm91bmRJbmRleCA9IFNPVVJDRVMuZmluZEluZGV4KChzb3VyY2UpID0+IHNvdXJjZS5kZWZpbml0aW9uLmlkID09PSByZXN1bHQuZGF0YT8ucHJvdmlkZXJJZCk7XG5cdGlmIChmb3VuZEluZGV4ID49IDApIHtcblx0XHRyZXMgPSBhd2FpdCBTT1VSQ0VTW2ZvdW5kSW5kZXhdLmluc3RhbmNlLml0ZW1TZWxlY3Rpb24ocmVzdWx0LCBsYXN0UmVzcG9uc2UpO1xuXHR9XG5cblx0cmV0dXJuIHJlcztcbn1cbiIsImltcG9ydCB7XG5cdENMSVRlbXBsYXRlLFxuXHR0eXBlIENMSUZpbHRlcixcblx0dHlwZSBIb21lRGlzcGF0Y2hlZFNlYXJjaFJlc3VsdCxcblx0dHlwZSBIb21lU2VhcmNoTGlzdGVuZXJSZXNwb25zZSxcblx0dHlwZSBIb21lU2VhcmNoUmVzcG9uc2UsXG5cdHR5cGUgSG9tZVNlYXJjaFJlc3VsdCxcblx0dHlwZSBMaXN0UGFpcnNcbn0gZnJvbSBcIkBvcGVuZmluL3dvcmtzcGFjZVwiO1xuaW1wb3J0IHR5cGUgeyBBc3luY1NldHRpbmdzLCBDb250YWN0LCBDb250YWN0RnVsbCwgQ29udGFjdHNSZXN1bHQgfSBmcm9tIFwiLi9zaGFwZXNcIjtcblxuLyoqXG4gKiBJbXBsZW1lbnQgdGhlIHNvdXJjZSBmb3IgYXN5bmMgY29udGFjdCByZXN1bHRzLlxuICovXG5leHBvcnQgY2xhc3MgQXN5bmNDb250YWN0c1NvdXJjZSB7XG5cdC8qKlxuXHQgKiBUaGUga2V5IHRvIHVzZSBmb3IgYSBhc3luYyByZXN1bHQuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX0FTWU5DX1BST1ZJREVSX0RFVEFJTFNfQUNUSU9OID0gXCJBc3luYyBEZXRhaWxzXCI7XG5cblx0LyoqXG5cdCAqIFRoZSBoZWxwZXJzIGZvciB0aGUgc291cmNlLlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgX2hlbHBlcnM6IHsgb3BlblVybDogKHVybDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+IH0gfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFRoZSBkZWZpbml0aW9uIGZvciB0aGUgc291cmNlLlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgX2RlZmluaXRpb246IHsgaWQ6IHN0cmluZzsgZGF0YT86IEFzeW5jU2V0dGluZ3MgfSB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogVGhlIHNldHRpbmdzIGZvciB0aGUgc291cmNlLlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgX3NldHRpbmdzOiBBc3luY1NldHRpbmdzIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplIHRoZSBtb2R1bGUuXG5cdCAqIEBwYXJhbSBkZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBtb2R1bGUgZnJvbSBjb25maWd1cmF0aW9uIGluY2x1ZGUgY3VzdG9tIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSBkZWZpbml0aW9uLmlkIFRoZSBpZCBmb3IgdGhlIG1vZHVsZS5cblx0ICogQHBhcmFtIGRlZmluaXRpb24uZGF0YSBUaGUgY3VzdG9tIGRhdGEgZm9yIHRoZSBtb2R1bGUuXG5cdCAqIEBwYXJhbSBsb2dnZXJDcmVhdG9yIEZvciBsb2dnaW5nIGVudHJpZXMuXG5cdCAqIEBwYXJhbSBoZWxwZXJzIEhlbHBlciBtZXRob2RzIGZyb20gdGhlIHBsYXRmb3JtLlxuXHQgKiBAcGFyYW0gaGVscGVycy5vcGVuVXJsIE1ldGhvZCBmb3Igb3BlbmluZyBhIHVybC5cblx0ICogQHJldHVybnMgTm90aGluZy5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBpbml0aWFsaXplKFxuXHRcdGRlZmluaXRpb246IHsgaWQ6IHN0cmluZzsgZGF0YT86IEFzeW5jU2V0dGluZ3MgfSxcblx0XHRsb2dnZXJDcmVhdG9yOiAoKSA9PiB2b2lkLFxuXHRcdGhlbHBlcnM6IHsgb3BlblVybDogKHVybDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+IH1cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5fZGVmaW5pdGlvbiA9IGRlZmluaXRpb247XG5cdFx0dGhpcy5fc2V0dGluZ3MgPSBkZWZpbml0aW9uLmRhdGE7XG5cdFx0dGhpcy5faGVscGVycyA9IGhlbHBlcnM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGEgbGlzdCBvZiB0aGUgc3RhdGljIGhlbHAgZW50cmllcy5cblx0ICogQHJldHVybnMgVGhlIGxpc3Qgb2YgaGVscCBlbnRyaWVzLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGdldEhlbHBTZWFyY2hFbnRyaWVzKCk6IFByb21pc2U8SG9tZVNlYXJjaFJlc3VsdFtdPiB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0a2V5OiBgJHt0aGlzLl9kZWZpbml0aW9uPy5pZH0taGVscDFgLFxuXHRcdFx0XHR0aXRsZTogXCIvY29udGFjdHMtc3luY1wiLFxuXHRcdFx0XHRsYWJlbDogXCJIZWxwXCIsXG5cdFx0XHRcdGFjdGlvbnM6IFtdLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0cHJvdmlkZXJJZDogdGhpcy5fZGVmaW5pdGlvbj8uaWQsXG5cdFx0XHRcdFx0cG9wdWxhdGVRdWVyeTogXCIvY29udGFjdHMtc3luYyBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZW1wbGF0ZTogQ0xJVGVtcGxhdGUuQ3VzdG9tLFxuXHRcdFx0XHR0ZW1wbGF0ZUNvbnRlbnQ6IHtcblx0XHRcdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRcdFx0XHRzdHlsZTogeyBkaXNwbGF5OiBcImZsZXhcIiwgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIiwgcGFkZGluZzogXCIxMHB4XCIgfSxcblx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIlRleHRcIixcblx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcInRpdGxlXCIsXG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbG9yOiBcIiNGRkZGRkZcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZvbnRTaXplOiBcIjE2cHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWFyZ2luQm90dG9tOiBcIjEwcHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGJvcmRlckJvdHRvbTogXCIxcHggc29saWQgIzUzNTY1RlwiXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcImRlc2MtMFwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIHBhZGRpbmc6IFwiNnB4IDBweFwiIH0gfSxcblx0XHRcdFx0XHRcdFx0eyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJkZXNjLTFcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBwYWRkaW5nOiBcIjZweCAwcHhcIiB9IH0sXG5cdFx0XHRcdFx0XHRcdHsgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwiZGVzYy0yXCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiwgcGFkZGluZzogXCI2cHggMHB4XCIgfSB9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJDb250YWluZXJcIixcblx0XHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGlzcGxheTogXCJmbGV4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0cGFkZGluZzogXCIxMHB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXJnaW5Ub3A6IFwiNnB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IFwiIzUzNTY1RlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sb3I6IFwiI0ZGRkZGRlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Ym9yZGVyUmFkaXVzOiBcIjVweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0b3ZlcmZsb3c6IFwiYXV0b1wiXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbjogW1xuXHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIlRleHRcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YUtleTogXCJsaW5lLTBcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBmb250RmFtaWx5OiBcIm1vbm9zcGFjZVwiLCB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwiIH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRcdHRpdGxlOiBcIi9jb250YWN0cy1zeW5jXCIsXG5cdFx0XHRcdFx0XHRcImRlc2MtMFwiOiBcIlRoZSBjb250YWN0cy1zeW5jIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBhIGNvbnRhY3QuXCIsXG5cdFx0XHRcdFx0XHRcImRlc2MtMVwiOlxuXHRcdFx0XHRcdFx0XHRcIkl0IGRlbW9uc3RyYXRlcyBob3cgYSBsb25nIHJ1bm5pbmcgcmV0cmlldmFsIHdvdWxkIGhhdmUgdG8gd2FpdCBmb3IgdGhlIHJlc3BvbnNlIGJlZm9yZSBhbnl0aGluZyBpcyBkaXNwbGF5LlwiLFxuXHRcdFx0XHRcdFx0XCJkZXNjLTJcIjogXCJGb3IgZXhhbXBsZSB0byBzZWFyY2ggZm9yIGEgY29udGFjdCBjb250YWluaW5nIHRoZSBsZXR0ZXIgYS5cIixcblx0XHRcdFx0XHRcdFwibGluZS0wXCI6IFwiL2NvbnRhY3RzLXN5bmMgYVwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRrZXk6IGAke3RoaXMuX2RlZmluaXRpb24/LmlkfS1oZWxwMmAsXG5cdFx0XHRcdHRpdGxlOiBcIi9jb250YWN0cy1wYXJ0aWFsXCIsXG5cdFx0XHRcdGxhYmVsOiBcIkhlbHBcIixcblx0XHRcdFx0YWN0aW9uczogW10sXG5cdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRwcm92aWRlcklkOiB0aGlzLl9kZWZpbml0aW9uPy5pZCxcblx0XHRcdFx0XHRwb3B1bGF0ZVF1ZXJ5OiBcIi9jb250YWN0cy1wYXJ0aWFsIFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbXBsYXRlOiBDTElUZW1wbGF0ZS5DdXN0b20sXG5cdFx0XHRcdHRlbXBsYXRlQ29udGVudDoge1xuXHRcdFx0XHRcdGxheW91dDoge1xuXHRcdFx0XHRcdFx0dHlwZTogXCJDb250YWluZXJcIixcblx0XHRcdFx0XHRcdHN0eWxlOiB7IGRpc3BsYXk6IFwiZmxleFwiLCBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLCBwYWRkaW5nOiBcIjEwcHhcIiB9LFxuXHRcdFx0XHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwidGl0bGVcIixcblx0XHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29sb3I6IFwiI0ZGRkZGRlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9udFNpemU6IFwiMTZweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9udFdlaWdodDogXCJib2xkXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXJnaW5Cb3R0b206IFwiMTBweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Ym9yZGVyQm90dG9tOiBcIjFweCBzb2xpZCAjNTM1NjVGXCJcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHsgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwiZGVzYy0wXCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiwgcGFkZGluZzogXCI2cHggMHB4XCIgfSB9LFxuXHRcdFx0XHRcdFx0XHR7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcImRlc2MtMVwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIHBhZGRpbmc6IFwiNnB4IDBweFwiIH0gfSxcblx0XHRcdFx0XHRcdFx0eyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJkZXNjLTJcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBwYWRkaW5nOiBcIjZweCAwcHhcIiB9IH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5OiBcImZsZXhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRwYWRkaW5nOiBcIjEwcHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdG1hcmdpblRvcDogXCI2cHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCIjNTM1NjVGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRib3JkZXJSYWRpdXM6IFwiNXB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRvdmVyZmxvdzogXCJhdXRvXCJcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcImxpbmUtMFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIGZvbnRGYW1pbHk6IFwibW9ub3NwYWNlXCIsIHdoaXRlU3BhY2U6IFwibm93cmFwXCIgfVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0dGl0bGU6IFwiL2NvbnRhY3RzLXBhcnRpYWxcIixcblx0XHRcdFx0XHRcdFwiZGVzYy0wXCI6IFwiVGhlIGNvbnRhY3RzLXBhcnRpYWwgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBzZWFyY2ggZm9yIGEgY29udGFjdC5cIixcblx0XHRcdFx0XHRcdFwiZGVzYy0xXCI6XG5cdFx0XHRcdFx0XHRcdFwiSXQgZGVtb25zdHJhdGVzIGhvdyB3ZSB3b3VsZCBkaXNwbGF5IHJlc3VsdHMgaW5zdGFudGx5IHdoaWxlIGFzeW5jaHJvbm91c2x5IHJldHJpZXZpbmcgYWxsIHRoZSByZXN1bHRzLlwiLFxuXHRcdFx0XHRcdFx0XCJkZXNjLTJcIjogXCJGb3IgZXhhbXBsZSB0byBzZWFyY2ggZm9yIGEgY29udGFjdCBjb250YWluaW5nIHRoZSBsZXR0ZXIgYS5cIixcblx0XHRcdFx0XHRcdFwibGluZS0wXCI6IFwiL2NvbnRhY3RzLXBhcnRpYWwgYVwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRrZXk6IGAke3RoaXMuX2RlZmluaXRpb24/LmlkfS1oZWxwM2AsXG5cdFx0XHRcdHRpdGxlOiBcIi9jb250YWN0c1wiLFxuXHRcdFx0XHRsYWJlbDogXCJIZWxwXCIsXG5cdFx0XHRcdGFjdGlvbnM6IFtdLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0cHJvdmlkZXJJZDogdGhpcy5fZGVmaW5pdGlvbj8uaWQsXG5cdFx0XHRcdFx0cG9wdWxhdGVRdWVyeTogXCIvY29udGFjdHMgXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0dGVtcGxhdGU6IENMSVRlbXBsYXRlLkN1c3RvbSxcblx0XHRcdFx0dGVtcGxhdGVDb250ZW50OiB7XG5cdFx0XHRcdFx0bGF5b3V0OiB7XG5cdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0c3R5bGU6IHsgZGlzcGxheTogXCJmbGV4XCIsIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsIHBhZGRpbmc6IFwiMTBweFwiIH0sXG5cdFx0XHRcdFx0XHRjaGlsZHJlbjogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUtleTogXCJ0aXRsZVwiLFxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRmb250U2l6ZTogXCIxNnB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRmb250V2VpZ2h0OiBcImJvbGRcIixcblx0XHRcdFx0XHRcdFx0XHRcdG1hcmdpbkJvdHRvbTogXCIxMHB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRib3JkZXJCb3R0b206IFwiMXB4IHNvbGlkICM1MzU2NUZcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0eyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJkZXNjLTBcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBwYWRkaW5nOiBcIjZweCAwcHhcIiB9IH0sXG5cdFx0XHRcdFx0XHRcdHsgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwiZGVzYy0xXCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiwgcGFkZGluZzogXCI2cHggMHB4XCIgfSB9LFxuXHRcdFx0XHRcdFx0XHR7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcImRlc2MtMlwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIHBhZGRpbmc6IFwiNnB4IDBweFwiIH0gfSxcblx0XHRcdFx0XHRcdFx0eyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJkZXNjLTNcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBwYWRkaW5nOiBcIjZweCAwcHhcIiB9IH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5OiBcImZsZXhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRwYWRkaW5nOiBcIjEwcHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdG1hcmdpblRvcDogXCI2cHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCIjNTM1NjVGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRib3JkZXJSYWRpdXM6IFwiNXB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRvdmVyZmxvdzogXCJhdXRvXCJcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcImxpbmUtMFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIGZvbnRGYW1pbHk6IFwibW9ub3NwYWNlXCIsIHdoaXRlU3BhY2U6IFwibm93cmFwXCIgfVxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwibGluZS0xXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiwgZm9udEZhbWlseTogXCJtb25vc3BhY2VcIiwgd2hpdGVTcGFjZTogXCJub3dyYXBcIiB9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0XHR0aXRsZTogXCIvY29udGFjdHNcIixcblx0XHRcdFx0XHRcdFwiZGVzYy0wXCI6IFwiVGhlIGNvbnRhY3RzIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBhIGNvbnRhY3QuXCIsXG5cdFx0XHRcdFx0XHRcImRlc2MtMVwiOlxuXHRcdFx0XHRcdFx0XHRcIkl0IGRlbW9uc3RyYXRlcyBob3cgd2Ugd291bGQgZGlzcGxheSByZXN1bHRzIGluc3RhbnRseSBhbmQgb25seSByZXRyaWV2ZSBmdWxsIGRhdGEgb24gZW50cnkgc2VsZWN0aW9uLlwiLFxuXHRcdFx0XHRcdFx0XCJkZXNjLTJcIjogXCJDb250YWN0cyBzdGFydGluZyB3aXRoIEUgd2lsbCBzaG93IGVycm9yIG9uIGZpcnN0IGxvYWQuXCIsXG5cdFx0XHRcdFx0XHRcImRlc2MtM1wiOiBcIkZvciBleGFtcGxlIHRvIHNlYXJjaCBmb3IgYSBjb250YWN0IGNvbnRhaW5pbmcgdGhlIGxldHRlciBhLlwiLFxuXHRcdFx0XHRcdFx0XCJsaW5lLTBcIjogXCIvY29udGFjdHMgYVwiLFxuXHRcdFx0XHRcdFx0XCJsaW5lLTFcIjogXCIvY29udGFjdHMgZVwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSBsaXN0IG9mIHNlYXJjaCByZXN1bHRzIGJhc2VkIG9uIHRoZSBxdWVyeSBhbmQgZmlsdGVycy5cblx0ICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSB0byBzZWFyY2ggZm9yLlxuXHQgKiBAcGFyYW0gZmlsdGVycyBUaGUgZmlsdGVycyB0byBhcHBseS5cblx0ICogQHBhcmFtIGxhc3RSZXNwb25zZSBUaGUgbGFzdCBzZWFyY2ggcmVzcG9uc2UgdXNlZCBmb3IgdXBkYXRpbmcgZXhpc3RpbmcgcmVzdWx0cy5cblx0ICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIGdldCBzZWFyY2ggcmVzdWx0cy5cblx0ICogQHBhcmFtIG9wdGlvbnMuaXNTdWdnZXN0aW9uIElzIHRoZSBxdWVyeSBhIHN1Z2dlc3Rpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHJlc3VsdHMgYW5kIG5ldyBmaWx0ZXJzLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGdldFNlYXJjaFJlc3VsdHMoXG5cdFx0cXVlcnk6IHN0cmluZyxcblx0XHRmaWx0ZXJzOiBDTElGaWx0ZXJbXSxcblx0XHRsYXN0UmVzcG9uc2U6IEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlLFxuXHRcdG9wdGlvbnM6IHtcblx0XHRcdGlzU3VnZ2VzdGlvbjogYm9vbGVhbjtcblx0XHR9XG5cdCk6IFByb21pc2U8SG9tZVNlYXJjaFJlc3BvbnNlPiB7XG5cdFx0Y29uc3QgcmVzdWx0czogSG9tZVNlYXJjaFJlc3VsdFtdID0gW107XG5cblx0XHRpZiAocXVlcnkuc3RhcnRzV2l0aChcIi9jb250YWN0cy1zeW5jIFwiKSkge1xuXHRcdFx0YXdhaXQgdGhpcy5jb250YWN0c1N5bmMocXVlcnkuc2xpY2UoMTUpLCByZXN1bHRzKTtcblx0XHR9IGVsc2UgaWYgKHF1ZXJ5LnN0YXJ0c1dpdGgoXCIvY29udGFjdHMtcGFydGlhbCBcIikpIHtcblx0XHRcdGF3YWl0IHRoaXMuY29udGFjdHNQYXJ0aWFsKHF1ZXJ5LnNsaWNlKDE4KSwgcmVzdWx0cywgbGFzdFJlc3BvbnNlKTtcblx0XHR9IGVsc2UgaWYgKHF1ZXJ5LnN0YXJ0c1dpdGgoXCIvY29udGFjdHMgXCIpKSB7XG5cdFx0XHRhd2FpdCB0aGlzLmNvbnRhY3RzQXN5bmMocXVlcnkuc2xpY2UoMTApLCByZXN1bHRzLCBsYXN0UmVzcG9uc2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRyZXN1bHRzXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbiBlbnRyeSBoYXMgYmVlbiBzZWxlY3RlZC5cblx0ICogQHBhcmFtIHJlc3VsdCBUaGUgZGlzcGF0Y2hlZCByZXN1bHQuXG5cdCAqIEBwYXJhbSBsYXN0UmVzcG9uc2UgVGhlIGxhc3QgcmVzcG9uc2UuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGl0ZW0gd2FzIGhhbmRsZWQuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgaXRlbVNlbGVjdGlvbihcblx0XHRyZXN1bHQ6IEhvbWVEaXNwYXRjaGVkU2VhcmNoUmVzdWx0LFxuXHRcdGxhc3RSZXNwb25zZTogSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2Vcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3QgZGF0YTogeyB1cmw/OiBzdHJpbmcgfSA9IHJlc3VsdC5kYXRhO1xuXG5cdFx0aWYgKFxuXHRcdFx0cmVzdWx0LmFjdGlvbi50cmlnZ2VyID09PSBcInVzZXItYWN0aW9uXCIgJiZcblx0XHRcdHJlc3VsdC5hY3Rpb24ubmFtZSA9PT0gQXN5bmNDb250YWN0c1NvdXJjZS5fQVNZTkNfUFJPVklERVJfREVUQUlMU19BQ1RJT04gJiZcblx0XHRcdHRoaXMuX2hlbHBlcnM/Lm9wZW5VcmwgJiZcblx0XHRcdGRhdGEudXJsXG5cdFx0KSB7XG5cdFx0XHRhd2FpdCB0aGlzLl9oZWxwZXJzPy5vcGVuVXJsKGRhdGEudXJsKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHQocmVzdWx0LmFjdGlvbi50cmlnZ2VyID09PSBcImZvY3VzLWNoYW5nZVwiICYmIHJlc3VsdC5kYXRhPy5zdGF0ZSA9PT0gXCJsb2FkaW5nXCIpIHx8XG5cdFx0XHQocmVzdWx0LmFjdGlvbi50cmlnZ2VyID09PSBcInJlbG9hZFwiICYmIHJlc3VsdC5kYXRhPy5zdGF0ZSA9PT0gXCJlcnJvclwiKVxuXHRcdCkge1xuXHRcdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbnRhY3RSZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke3RoaXMuX3NldHRpbmdzPy5yb290VXJsfSR7cmVzdWx0LmRhdGEuY29udGFjdC5pZH0uanNvbmApO1xuXG5cdFx0XHRcdGNvbnN0IGNvbnRhY3RGdWxsOiBDb250YWN0RnVsbCA9IGF3YWl0IGNvbnRhY3RSZXNwb25zZS5qc29uKCk7XG5cblx0XHRcdFx0bGFzdFJlc3BvbnNlLnJlc3BvbmQoW3RoaXMuY3JlYXRlUmVzdWx0KGNvbnRhY3RGdWxsKV0pO1xuXHRcdFx0fSwgMCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSBjb250YWN0cyBpbiBhIHN5bmNocm9ub3VzIG1hbm5lci5cblx0ICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSB0byBzZWFyY2ggZm9yXG5cdCAqIEBwYXJhbSByZXN1bHRzIFRoZSByZXN1bHQgbGlzdCB0byBwb3B1bGF0ZS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgY29udGFjdHNTeW5jKHF1ZXJ5OiBzdHJpbmcsIHJlc3VsdHM6IEhvbWVTZWFyY2hSZXN1bHRbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHdpbGRjYXJkID0gcXVlcnkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAod2lsZGNhcmQubGVuZ3RoID4gMCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHt0aGlzLl9zZXR0aW5ncz8ucm9vdFVybH1pbmRleC5qc29uYCk7XG5cblx0XHRcdFx0Y29uc3QganNvbjogQ29udGFjdHNSZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBjb250YWN0IG9mIGpzb24uZGF0YSkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGNvbnRhY3QuZmlyc3ROYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMod2lsZGNhcmQpIHx8XG5cdFx0XHRcdFx0XHRjb250YWN0Lmxhc3ROYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMod2lsZGNhcmQpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBjb250YWN0UmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHt0aGlzLl9zZXR0aW5ncz8ucm9vdFVybH0ke2NvbnRhY3QuaWR9Lmpzb25gKTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgY29udGFjdEZ1bGw6IENvbnRhY3RGdWxsID0gYXdhaXQgY29udGFjdFJlc3BvbnNlLmpzb24oKTtcblxuXHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKHRoaXMuY3JlYXRlUmVzdWx0KGNvbnRhY3RGdWxsKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgY29udGFjdHMgaW4gYSBwYXJ0aWFsbHkgYXN5bmNocm9ub3VzIG1hbm5lci5cblx0ICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSB0byBzZWFyY2ggZm9yXG5cdCAqIEBwYXJhbSByZXN1bHRzIFRoZSByZXN1bHQgbGlzdCB0byBwb3B1bGF0ZS5cblx0ICogQHBhcmFtIGxhc3RSZXNwb25zZSBUaGUgbGFzdCByZXNwb25zZSB0byB1c2UgZm9yIHVwZGF0aW5nIHJlc3VsdHMuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNvbnRhY3RzUGFydGlhbChcblx0XHRxdWVyeTogc3RyaW5nLFxuXHRcdHJlc3VsdHM6IEhvbWVTZWFyY2hSZXN1bHRbXSxcblx0XHRsYXN0UmVzcG9uc2U6IEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHdpbGRjYXJkID0gcXVlcnkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAod2lsZGNhcmQubGVuZ3RoID4gMCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHt0aGlzLl9zZXR0aW5ncz8ucm9vdFVybH1pbmRleC5qc29uYCk7XG5cblx0XHRcdFx0Y29uc3QganNvbjogQ29udGFjdHNSZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cdFx0XHRcdGNvbnN0IGZpbmFsQ29udGFjdHM6IENvbnRhY3RbXSA9IFtdO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgY29udGFjdCBvZiBqc29uLmRhdGEpIHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRjb250YWN0LmZpcnN0TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHdpbGRjYXJkKSB8fFxuXHRcdFx0XHRcdFx0Y29udGFjdC5sYXN0TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHdpbGRjYXJkKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0ZmluYWxDb250YWN0cy5wdXNoKGNvbnRhY3QpO1xuXHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKHRoaXMuY3JlYXRlUmVzdWx0KGNvbnRhY3QpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGNvbnRhY3Qgb2YgZmluYWxDb250YWN0cykge1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udGFjdFJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7dGhpcy5fc2V0dGluZ3M/LnJvb3RVcmx9JHtjb250YWN0LmlkfS5qc29uYCk7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGNvbnRhY3RGdWxsOiBDb250YWN0RnVsbCA9IGF3YWl0IGNvbnRhY3RSZXNwb25zZS5qc29uKCk7XG5cblx0XHRcdFx0XHRcdGxhc3RSZXNwb25zZS5yZXNwb25kKFt0aGlzLmNyZWF0ZVJlc3VsdChjb250YWN0RnVsbCldKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIGNvbnRhY3RzIGluIGFuIGFzeW5jaHJvbm91cyBtYW5uZXIuXG5cdCAqIEBwYXJhbSBxdWVyeSBUaGUgcXVlcnkgdG8gc2VhcmNoIGZvclxuXHQgKiBAcGFyYW0gcmVzdWx0cyBUaGUgcmVzdWx0IGxpc3QgdG8gcG9wdWxhdGUuXG5cdCAqIEBwYXJhbSBsYXN0UmVzcG9uc2UgVGhlIGxhc3QgcmVzcG9uc2UgdG8gdXNlIGZvciB1cGRhdGluZyByZXN1bHRzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBjb250YWN0c0FzeW5jKFxuXHRcdHF1ZXJ5OiBzdHJpbmcsXG5cdFx0cmVzdWx0czogSG9tZVNlYXJjaFJlc3VsdFtdLFxuXHRcdGxhc3RSZXNwb25zZTogSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2Vcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgd2lsZGNhcmQgPSBxdWVyeS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuXHRcdGlmICh3aWxkY2FyZC5sZW5ndGggPiAwKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke3RoaXMuX3NldHRpbmdzPy5yb290VXJsfWluZGV4Lmpzb25gKTtcblxuXHRcdFx0XHRjb25zdCBqc29uOiBDb250YWN0c1Jlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbnRhY3Qgb2YganNvbi5kYXRhKSB7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0Y29udGFjdC5maXJzdE5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh3aWxkY2FyZCkgfHxcblx0XHRcdFx0XHRcdGNvbnRhY3QubGFzdE5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh3aWxkY2FyZClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdC8vIElmIGEgY29udGFjdCBzdGFydHMgd2l0aCBFIHNob3cgaXQgaW4gZXJyb3JlZCBzdGF0ZVxuXHRcdFx0XHRcdFx0aWYgKGNvbnRhY3QuZmlyc3ROYW1lLnN0YXJ0c1dpdGgoXCJFXCIpKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCh0aGlzLmNyZWF0ZVJlc3VsdEVycm9yZWQoY29udGFjdCkpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKHRoaXMuY3JlYXRlUmVzdWx0TG9hZGluZyhjb250YWN0KSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYSBzZWFyY2ggcmVzdWx0LlxuXHQgKiBAcGFyYW0gY29udGFjdCBUaGUgY29udGFjdC5cblx0ICogQHJldHVybnMgVGhlIHNlYXJjaCByZXN1bHQuXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZVJlc3VsdChjb250YWN0OiBQYXJ0aWFsPENvbnRhY3RGdWxsPik6IEhvbWVTZWFyY2hSZXN1bHQge1xuXHRcdGNvbnN0IGZ1bGxOYW1lID0gYCR7Y29udGFjdC5maXJzdE5hbWV9ICR7Y29udGFjdC5sYXN0TmFtZX1gO1xuXHRcdGNvbnN0IGRldGFpbHM6IExpc3RQYWlyc1tdID0gW107XG5cdFx0aWYgKGNvbnRhY3QuZW1haWwpIHtcblx0XHRcdGRldGFpbHMucHVzaChbW1wiRS1tYWlsXCIsIGNvbnRhY3QuZW1haWxdXSk7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRrZXk6IGBjb250YWN0LSR7Y29udGFjdC5pZH1gLFxuXHRcdFx0dGl0bGU6IGZ1bGxOYW1lLFxuXHRcdFx0bGFiZWw6IFwiSW5mb3JtYXRpb25cIixcblx0XHRcdGFjdGlvbnM6IFtdLFxuXHRcdFx0ZGF0YToge1xuXHRcdFx0XHRwcm92aWRlcklkOiB0aGlzLl9kZWZpbml0aW9uPy5pZCxcblx0XHRcdFx0Y29udGFjdFxuXHRcdFx0fSxcblx0XHRcdHRlbXBsYXRlOiBDTElUZW1wbGF0ZS5Db250YWN0LFxuXHRcdFx0dGVtcGxhdGVDb250ZW50OiB7XG5cdFx0XHRcdG5hbWU6IGZ1bGxOYW1lLFxuXHRcdFx0XHRkZXRhaWxzXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYSBzZWFyY2ggcmVzdWx0IGluIGxvYWRpbmcgc3RhdGUuXG5cdCAqIEBwYXJhbSBjb250YWN0IFRoZSBjb250YWN0LlxuXHQgKiBAcmV0dXJucyBUaGUgc2VhcmNoIHJlc3VsdC5cblx0ICovXG5cdHByaXZhdGUgY3JlYXRlUmVzdWx0TG9hZGluZyhjb250YWN0OiBDb250YWN0KTogSG9tZVNlYXJjaFJlc3VsdCB7XG5cdFx0Y29uc3QgZnVsbE5hbWUgPSBgJHtjb250YWN0LmZpcnN0TmFtZX0gJHtjb250YWN0Lmxhc3ROYW1lfWA7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGtleTogYGNvbnRhY3QtJHtjb250YWN0LmlkfWAsXG5cdFx0XHR0aXRsZTogZnVsbE5hbWUsXG5cdFx0XHRsYWJlbDogXCJJbmZvcm1hdGlvblwiLFxuXHRcdFx0YWN0aW9uczogW10sXG5cdFx0XHRkYXRhOiB7XG5cdFx0XHRcdHByb3ZpZGVySWQ6IHRoaXMuX2RlZmluaXRpb24/LmlkLFxuXHRcdFx0XHRjb250YWN0LFxuXHRcdFx0XHRzdGF0ZTogXCJsb2FkaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR0ZW1wbGF0ZTogQ0xJVGVtcGxhdGUuTG9hZGluZyxcblx0XHRcdHRlbXBsYXRlQ29udGVudDogXCJcIlxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIGEgc2VhcmNoIHJlc3VsdCBpbiBlcnJvcmVkIHN0YXRlLlxuXHQgKiBAcGFyYW0gY29udGFjdCBUaGUgY29udGFjdC5cblx0ICogQHJldHVybnMgVGhlIHNlYXJjaCByZXN1bHQuXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZVJlc3VsdEVycm9yZWQoY29udGFjdDogQ29udGFjdCk6IEhvbWVTZWFyY2hSZXN1bHQge1xuXHRcdGNvbnN0IGZ1bGxOYW1lID0gYCR7Y29udGFjdC5maXJzdE5hbWV9ICR7Y29udGFjdC5sYXN0TmFtZX1gO1xuXHRcdHJldHVybiB7XG5cdFx0XHRrZXk6IGBjb250YWN0LSR7Y29udGFjdC5pZH1gLFxuXHRcdFx0dGl0bGU6IGZ1bGxOYW1lLFxuXHRcdFx0bGFiZWw6IFwiSW5mb3JtYXRpb25cIixcblx0XHRcdGFjdGlvbnM6IFtdLFxuXHRcdFx0ZGF0YToge1xuXHRcdFx0XHRwcm92aWRlcklkOiB0aGlzLl9kZWZpbml0aW9uPy5pZCxcblx0XHRcdFx0Y29udGFjdCxcblx0XHRcdFx0c3RhdGU6IFwiZXJyb3JcIlxuXHRcdFx0fSxcblx0XHRcdHRlbXBsYXRlOiBDTElUZW1wbGF0ZS5FcnJvcixcblx0XHRcdHRlbXBsYXRlQ29udGVudDogXCJVbmFibGUgdG8gbG9hZCBkYXRhXCJcblx0XHR9O1xuXHR9XG59XG4iLCJpbXBvcnQge1xuXHRCdXR0b25TdHlsZSxcblx0Q0xJVGVtcGxhdGUsXG5cdHR5cGUgVGVtcGxhdGVGcmFnbWVudCxcblx0dHlwZSBDTElGaWx0ZXIsXG5cdHR5cGUgSG9tZURpc3BhdGNoZWRTZWFyY2hSZXN1bHQsXG5cdHR5cGUgSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2UsXG5cdHR5cGUgSG9tZVNlYXJjaFJlc3BvbnNlLFxuXHR0eXBlIEhvbWVTZWFyY2hSZXN1bHRcbn0gZnJvbSBcIkBvcGVuZmluL3dvcmtzcGFjZVwiO1xuaW1wb3J0ICogYXMgZW1vamkgZnJvbSBcIm5vZGUtZW1vamlcIjtcblxuLyoqXG4gKiBJbXBsZW1lbnQgdGhlIHNvdXJjZSBmb3IgRW1vamlzLlxuICovXG5leHBvcnQgY2xhc3MgRW1vamlTb3VyY2Uge1xuXHQvKipcblx0ICogVGhlIGtleSB0byB1c2UgZm9yIGEgZW1vamkgcmVzdWx0LlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9FTU9KSV9QUk9WSURFUl9ERVRBSUxTX0FDVElPTiA9IFwiRW1vamkgRGV0YWlsc1wiO1xuXG5cdC8qKlxuXHQgKiBUaGUga2V5IHRvIHVzZSBmb3IgYSBlbW9qaSBjb3B5IGtleSBhY3Rpb24uXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX0VNT0pJX1BST1ZJREVSX0NPUFlfS0VZX0FDVElPTiA9IFwiQ29weSBLZXlcIjtcblxuXHQvKipcblx0ICogVGhlIGtleSB0byB1c2UgZm9yIGEgZW1vamkgY29weSBrZXkgYWN0aW9uLlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9FTU9KSV9QUk9WSURFUl9DT1BZX0VNT0pJX0FDVElPTiA9IFwiQ29weSBFbW9qaVwiO1xuXG5cdC8qKlxuXHQgKiBUaGUgaGVscGVycyBmb3IgdGhlIHNvdXJjZS5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIF9oZWxwZXJzOiB7IG9wZW5Vcmw6ICh1cmw6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPiB9IHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgc2V0dGluZ3MgZm9yIHRoZSBzb3VyY2UuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJpdmF0ZSBfZGVmaW5pdGlvbjogeyBpZDogc3RyaW5nOyBkYXRhPzogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplIHRoZSBtb2R1bGUuXG5cdCAqIEBwYXJhbSBkZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBtb2R1bGUgZnJvbSBjb25maWd1cmF0aW9uIGluY2x1ZGUgY3VzdG9tIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSBkZWZpbml0aW9uLmlkIFRoZSBpZCBmb3IgdGhlIG1vZHVsZS5cblx0ICogQHBhcmFtIGRlZmluaXRpb24uZGF0YSBUaGUgY3VzdG9tIGRhdGEgZm9yIHRoZSBtb2R1bGUuXG5cdCAqIEBwYXJhbSBsb2dnZXJDcmVhdG9yIEZvciBsb2dnaW5nIGVudHJpZXMuXG5cdCAqIEBwYXJhbSBoZWxwZXJzIEhlbHBlciBtZXRob2RzIGZyb20gdGhlIHBsYXRmb3JtLlxuXHQgKiBAcGFyYW0gaGVscGVycy5vcGVuVXJsIE1ldGhvZCBmb3Igb3BlbmluZyBhIHVybC5cblx0ICogQHJldHVybnMgTm90aGluZy5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBpbml0aWFsaXplKFxuXHRcdGRlZmluaXRpb246IHtcblx0XHRcdGlkOiBzdHJpbmc7XG5cdFx0XHRkYXRhPzogdW5rbm93bjtcblx0XHR9LFxuXHRcdGxvZ2dlckNyZWF0b3I6ICgpID0+IHZvaWQsXG5cdFx0aGVscGVyczogeyBvcGVuVXJsOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD4gfVxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLl9kZWZpbml0aW9uID0gZGVmaW5pdGlvbjtcblx0XHR0aGlzLl9oZWxwZXJzID0gaGVscGVycztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSBsaXN0IG9mIHRoZSBzdGF0aWMgaGVscCBlbnRyaWVzLlxuXHQgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBoZWxwIGVudHJpZXMuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0SGVscFNlYXJjaEVudHJpZXMoKTogUHJvbWlzZTxIb21lU2VhcmNoUmVzdWx0W10+IHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRrZXk6IGAke3RoaXMuX2RlZmluaXRpb24/LmlkfS1oZWxwYCxcblx0XHRcdFx0dGl0bGU6IFwiL2Vtb2ppXCIsXG5cdFx0XHRcdGxhYmVsOiBcIkhlbHBcIixcblx0XHRcdFx0YWN0aW9uczogW10sXG5cdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRwcm92aWRlcklkOiB0aGlzLl9kZWZpbml0aW9uPy5pZCxcblx0XHRcdFx0XHRwb3B1bGF0ZVF1ZXJ5OiBcIi9lbW9qaSBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZW1wbGF0ZTogQ0xJVGVtcGxhdGUuQ3VzdG9tLFxuXHRcdFx0XHR0ZW1wbGF0ZUNvbnRlbnQ6IHtcblx0XHRcdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRcdFx0XHRzdHlsZTogeyBkaXNwbGF5OiBcImZsZXhcIiwgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIiwgcGFkZGluZzogXCIxMHB4XCIgfSxcblx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIlRleHRcIixcblx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcInRpdGxlXCIsXG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbG9yOiBcIiNGRkZGRkZcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZvbnRTaXplOiBcIjE2cHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWFyZ2luQm90dG9tOiBcIjEwcHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGJvcmRlckJvdHRvbTogXCIxcHggc29saWQgIzUzNTY1RlwiXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcImRlc2MtMFwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIHBhZGRpbmc6IFwiNnB4IDBweFwiIH0gfSxcblx0XHRcdFx0XHRcdFx0eyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJkZXNjLTFcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBwYWRkaW5nOiBcIjZweCAwcHhcIiB9IH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5OiBcImZsZXhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRwYWRkaW5nOiBcIjEwcHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdG1hcmdpblRvcDogXCI2cHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCIjNTM1NjVGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRib3JkZXJSYWRpdXM6IFwiNXB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRvdmVyZmxvdzogXCJhdXRvXCJcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcImxpbmUtMFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIGZvbnRGYW1pbHk6IFwibW9ub3NwYWNlXCIsIHdoaXRlU3BhY2U6IFwibm93cmFwXCIgfVxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwibGluZS0xXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiwgZm9udEZhbWlseTogXCJtb25vc3BhY2VcIiwgd2hpdGVTcGFjZTogXCJub3dyYXBcIiB9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0XHR0aXRsZTogXCIvZW1vamlcIixcblx0XHRcdFx0XHRcdFwiZGVzYy0wXCI6IFwiVGhlIGVtb2ppIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBlbW9qaXMgYnkgbmFtZS5cIixcblx0XHRcdFx0XHRcdFwiZGVzYy0xXCI6IFwiRm9yIGV4YW1wbGUgdG8gc2VhcmNoIGZvciBlbW9qaXMgd2hpY2ggaW5jbHVkZSBgd29tYW5gIG9yIGBtYW5gIGluIHRoZWlyIG5hbWUuXCIsXG5cdFx0XHRcdFx0XHRcImxpbmUtMFwiOiBcIi9lbW9qaSB3b21hblwiLFxuXHRcdFx0XHRcdFx0XCJsaW5lLTFcIjogXCIvZW1vamkgbWFuXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIGxpc3Qgb2Ygc2VhcmNoIHJlc3VsdHMgYmFzZWQgb24gdGhlIHF1ZXJ5IGFuZCBmaWx0ZXJzLlxuXHQgKiBAcGFyYW0gcXVlcnkgVGhlIHF1ZXJ5IHRvIHNlYXJjaCBmb3IuXG5cdCAqIEBwYXJhbSBmaWx0ZXJzIFRoZSBmaWx0ZXJzIHRvIGFwcGx5LlxuXHQgKiBAcGFyYW0gbGFzdFJlc3BvbnNlIFRoZSBsYXN0IHNlYXJjaCByZXNwb25zZSB1c2VkIGZvciB1cGRhdGluZyBleGlzdGluZyByZXN1bHRzLlxuXHQgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgZ2V0IHNlYXJjaCByZXN1bHRzLlxuXHQgKiBAcGFyYW0gb3B0aW9ucy5pc1N1Z2dlc3Rpb24gSXMgdGhlIHF1ZXJ5IGEgc3VnZ2VzdGlvbi5cblx0ICogQHJldHVybnMgVGhlIGxpc3Qgb2YgcmVzdWx0cyBhbmQgbmV3IGZpbHRlcnMuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0U2VhcmNoUmVzdWx0cyhcblx0XHRxdWVyeTogc3RyaW5nLFxuXHRcdGZpbHRlcnM6IENMSUZpbHRlcltdLFxuXHRcdGxhc3RSZXNwb25zZTogSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2UsXG5cdFx0b3B0aW9uczoge1xuXHRcdFx0aXNTdWdnZXN0aW9uOiBib29sZWFuO1xuXHRcdH1cblx0KTogUHJvbWlzZTxIb21lU2VhcmNoUmVzcG9uc2U+IHtcblx0XHRjb25zdCByZXN1bHRzOiBIb21lU2VhcmNoUmVzdWx0W10gPSBbXTtcblxuXHRcdGlmIChxdWVyeS5zdGFydHNXaXRoKFwiL2Vtb2ppIFwiKSkge1xuXHRcdFx0bGV0IGtleSA9IHF1ZXJ5LnNsaWNlKDcpO1xuXG5cdFx0XHRpZiAoa2V5Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0a2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdFx0Ly8gRmluZCBleGFjdCBtYXRjaCBmaXJzdCBpZiB0aGVyZSBpcyBvbmVcblx0XHRcdFx0Y29uc3QgbWF0Y2hFbW9qaSA9IGVtb2ppLmdldChrZXkpO1xuXHRcdFx0XHRpZiAobWF0Y2hFbW9qaSAmJiAhbWF0Y2hFbW9qaS5zdGFydHNXaXRoKFwiOlwiKSkge1xuXHRcdFx0XHRcdHJlc3VsdHMucHVzaChhd2FpdCB0aGlzLmNyZWF0ZVJlc3VsdChrZXksIG1hdGNoRW1vamkpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZpbmQgYWxsIG90aGVyIHBvdGVudGlhbCBtYXRjaGVzXG5cdFx0XHRcdGNvbnN0IHNlYXJjaFJlc3VsdCA9IGVtb2ppLnNlYXJjaChrZXkpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcmVzdWx0IG9mIHNlYXJjaFJlc3VsdCkge1xuXHRcdFx0XHRcdGlmIChyZXN1bHQuZW1vamkgIT09IG1hdGNoRW1vamkpIHtcblx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaChhd2FpdCB0aGlzLmNyZWF0ZVJlc3VsdChyZXN1bHQua2V5LCByZXN1bHQuZW1vamkpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0cmVzdWx0c1xuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQW4gZW50cnkgaGFzIGJlZW4gc2VsZWN0ZWQuXG5cdCAqIEBwYXJhbSByZXN1bHQgVGhlIGRpc3BhdGNoZWQgcmVzdWx0LlxuXHQgKiBAcGFyYW0gbGFzdFJlc3BvbnNlIFRoZSBsYXN0IHJlc3BvbnNlLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBpdGVtIHdhcyBoYW5kbGVkLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGl0ZW1TZWxlY3Rpb24oXG5cdFx0cmVzdWx0OiBIb21lRGlzcGF0Y2hlZFNlYXJjaFJlc3VsdCxcblx0XHRsYXN0UmVzcG9uc2U6IEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmIChyZXN1bHQuYWN0aW9uLnRyaWdnZXIgPT09IFwidXNlci1hY3Rpb25cIikge1xuXHRcdFx0aWYgKHJlc3VsdC5hY3Rpb24ubmFtZSA9PT0gRW1vamlTb3VyY2UuX0VNT0pJX1BST1ZJREVSX0NPUFlfRU1PSklfQUNUSU9OICYmIHJlc3VsdC5kYXRhLmVtb2ppKSB7XG5cdFx0XHRcdGF3YWl0IGZpbi5DbGlwYm9hcmQud3JpdGVUZXh0KHsgZGF0YTogcmVzdWx0LmRhdGEuZW1vamkgfSk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChyZXN1bHQuYWN0aW9uLm5hbWUgPT09IEVtb2ppU291cmNlLl9FTU9KSV9QUk9WSURFUl9DT1BZX0tFWV9BQ1RJT04gJiYgcmVzdWx0LmRhdGEua2V5KSB7XG5cdFx0XHRcdGF3YWl0IGZpbi5DbGlwYm9hcmQud3JpdGVUZXh0KHsgZGF0YTogcmVzdWx0LmRhdGEua2V5IH0pO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdHJlc3VsdC5hY3Rpb24ubmFtZSA9PT0gRW1vamlTb3VyY2UuX0VNT0pJX1BST1ZJREVSX0RFVEFJTFNfQUNUSU9OICYmXG5cdFx0XHRcdHRoaXMuX2hlbHBlcnM/Lm9wZW5VcmwgJiZcblx0XHRcdFx0cmVzdWx0LmRhdGEudXJsXG5cdFx0XHQpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5faGVscGVycz8ub3BlblVybChyZXN1bHQuZGF0YS51cmwgYXMgc3RyaW5nKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZSBhIHNlYXJjaCByZXN1bHQuXG5cdCAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgdGhlIGVtb2ppLlxuXHQgKiBAcGFyYW0gc3ltYm9sIFRoZSBlbW9qaSBzeW1ib2wuXG5cdCAqIEByZXR1cm5zIFRoZSBzZWFyY2ggcmVzdWx0LlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBjcmVhdGVSZXN1bHQoa2V5OiBzdHJpbmcsIHN5bWJvbDogc3RyaW5nKTogUHJvbWlzZTxIb21lU2VhcmNoUmVzdWx0PiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGtleTogYGVtb2ppLSR7a2V5fWAsXG5cdFx0XHR0aXRsZToga2V5LFxuXHRcdFx0bGFiZWw6IFwiSW5mb3JtYXRpb25cIixcblx0XHRcdGFjdGlvbnM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IEVtb2ppU291cmNlLl9FTU9KSV9QUk9WSURFUl9DT1BZX0VNT0pJX0FDVElPTixcblx0XHRcdFx0XHRob3RrZXk6IFwiQ21kT3JDdHJsK0NcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogRW1vamlTb3VyY2UuX0VNT0pJX1BST1ZJREVSX0RFVEFJTFNfQUNUSU9OLFxuXHRcdFx0XHRcdGhvdGtleTogXCJFbnRlclwiXG5cdFx0XHRcdH1cblx0XHRcdF0sXG5cdFx0XHRkYXRhOiB7XG5cdFx0XHRcdHByb3ZpZGVySWQ6IHRoaXMuX2RlZmluaXRpb24/LmlkLFxuXHRcdFx0XHRrZXksXG5cdFx0XHRcdGVtb2ppOiBzeW1ib2wsXG5cdFx0XHRcdHVybDogYGh0dHBzOi8vZW1vamlwZWRpYS5vcmcvJHtrZXkucmVwbGFjZSgvXy9nLCBcIi1cIil9L2Bcblx0XHRcdH0sXG5cdFx0XHR0ZW1wbGF0ZTogQ0xJVGVtcGxhdGUuQ3VzdG9tLFxuXHRcdFx0dGVtcGxhdGVDb250ZW50OiB7XG5cdFx0XHRcdGxheW91dDogYXdhaXQgdGhpcy5nZXRFbW9qaVRlbXBsYXRlKCksXG5cdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHR0aXRsZTogYEVtb2ppICR7a2V5fWAsXG5cdFx0XHRcdFx0Y29weUtleVRpdGxlOiBcIkNvcHkgS2V5XCIsXG5cdFx0XHRcdFx0a2V5LFxuXHRcdFx0XHRcdGNvcHlFbW9qaVRpdGxlOiBcIkNvcHkgRW1vamlcIixcblx0XHRcdFx0XHRlbW9qaTogc3ltYm9sLFxuXHRcdFx0XHRcdGRldGFpbHNUaXRsZTogXCJGdXJ0aGVyIERldGFpbHNcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgdGhlIGRpc3BsYXkgdGVtcGxhdGUuXG5cdCAqIEByZXR1cm5zIFRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGVtb2ppLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRFbW9qaVRlbXBsYXRlKCk6IFByb21pc2U8VGVtcGxhdGVGcmFnbWVudD4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0c3R5bGU6IHsgZGlzcGxheTogXCJmbGV4XCIsIGZsZXg6IFwiMVwiLCBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLCBwYWRkaW5nOiBcIjEwcHhcIiB9LFxuXHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRcdFx0c3R5bGU6IHsgZGlzcGxheTogXCJmbGV4XCIsIGZsZXg6IFwiMVwiLCBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiIH0sXG5cdFx0XHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwidGl0bGVcIixcblx0XHRcdFx0XHRcdFx0c3R5bGU6IHtcblx0XHRcdFx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0XHRcdFx0Zm9udFNpemU6IFwiMTZweFwiLFxuXHRcdFx0XHRcdFx0XHRcdGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuXHRcdFx0XHRcdFx0XHRcdG1hcmdpbkJvdHRvbTogXCIxMHB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyQm90dG9tOiBcIjFweCBzb2xpZCAjNTM1NjVGXCIsXG5cdFx0XHRcdFx0XHRcdFx0d2hpdGVTcGFjZTogXCJub3dyYXBcIixcblx0XHRcdFx0XHRcdFx0XHR0ZXh0T3ZlcmZsb3c6IFwiZWxsaXBzaXNcIixcblx0XHRcdFx0XHRcdFx0XHRvdmVyZmxvdzogXCJoaWRkZW5cIlxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdGRpc3BsYXk6IFwiZmxleFwiLFxuXHRcdFx0XHRcdFx0XHRcdGZsZXhEaXJlY3Rpb246IFwicm93XCIsXG5cdFx0XHRcdFx0XHRcdFx0anVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwiLFxuXHRcdFx0XHRcdFx0XHRcdGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG5cdFx0XHRcdFx0XHRcdFx0Z2FwOiBcIjEwcHhcIixcblx0XHRcdFx0XHRcdFx0XHRtYXJnaW5Cb3R0b206IFwiMTBweFwiXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcImtleVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBjb2xvcjogXCIjRkZGRkZGXCIsIHdvcmRCcmVhazogXCJicmVhay1hbGxcIiB9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkJ1dHRvblwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uU3R5bGU6IEJ1dHRvblN0eWxlLlNlY29uZGFyeSxcblx0XHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbeyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJjb3B5S2V5VGl0bGVcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiIH0gfV0sXG5cdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb246IEVtb2ppU291cmNlLl9FTU9KSV9QUk9WSURFUl9DT1BZX0tFWV9BQ1RJT04sXG5cdFx0XHRcdFx0XHRcdFx0XHRzdHlsZTogeyBib3JkZXI6IFwiMXB4IHNvbGlkICNGRkZGRkZcIiwgZm9udFNpemU6IFwiMTJweFwiIH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0ZGlzcGxheTogXCJmbGV4XCIsXG5cdFx0XHRcdFx0XHRcdFx0ZmxleERpcmVjdGlvbjogXCJyb3dcIixcblx0XHRcdFx0XHRcdFx0XHRqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCIsXG5cdFx0XHRcdFx0XHRcdFx0YWxpZ25JdGVtczogXCJjZW50ZXJcIixcblx0XHRcdFx0XHRcdFx0XHRnYXA6IFwiMTBweFwiLFxuXHRcdFx0XHRcdFx0XHRcdG1hcmdpbkJvdHRvbTogXCIxMHB4XCJcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0XHRcdFx0XHR7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcImVtb2ppXCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjMycHhcIiwgY29sb3I6IFwiI0ZGRkZGRlwiIH0gfSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkJ1dHRvblwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uU3R5bGU6IEJ1dHRvblN0eWxlLlNlY29uZGFyeSxcblx0XHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbeyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJjb3B5RW1vamlUaXRsZVwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIgfSB9XSxcblx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogRW1vamlTb3VyY2UuX0VNT0pJX1BST1ZJREVSX0NPUFlfRU1PSklfQUNUSU9OLFxuXHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHsgYm9yZGVyOiBcIjFweCBzb2xpZCAjRkZGRkZGXCIsIGZvbnRTaXplOiBcIjEycHhcIiB9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogXCJDb250YWluZXJcIixcblx0XHRcdFx0XHRzdHlsZTogeyBkaXNwbGF5OiBcImZsZXhcIiwgZmxleERpcmVjdGlvbjogXCJyb3dcIiwganVzdGlmeUNvbnRlbnQ6IFwiZmxleC1lbmRcIiB9LFxuXHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiQnV0dG9uXCIsXG5cdFx0XHRcdFx0XHRcdGJ1dHRvblN0eWxlOiBCdXR0b25TdHlsZS5QcmltYXJ5LFxuXHRcdFx0XHRcdFx0XHRjaGlsZHJlbjogW3sgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwiZGV0YWlsc1RpdGxlXCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiB9IH1dLFxuXHRcdFx0XHRcdFx0XHRhY3Rpb246IEVtb2ppU291cmNlLl9FTU9KSV9QUk9WSURFUl9ERVRBSUxTX0FDVElPTixcblx0XHRcdFx0XHRcdFx0c3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiIH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHR9XG59XG4iLCJpbXBvcnQge1xuXHRDTElUZW1wbGF0ZSxcblx0dHlwZSBDTElGaWx0ZXIsXG5cdHR5cGUgSG9tZURpc3BhdGNoZWRTZWFyY2hSZXN1bHQsXG5cdHR5cGUgSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2UsXG5cdHR5cGUgSG9tZVNlYXJjaFJlc3BvbnNlLFxuXHR0eXBlIEhvbWVTZWFyY2hSZXN1bHQsXG5cdEJ1dHRvblN0eWxlXG59IGZyb20gXCJAb3BlbmZpbi93b3Jrc3BhY2VcIjtcbmltcG9ydCB7XG5cdENhdGVnb3J5U2NhbGUsXG5cdENoYXJ0LFxuXHRGaWxsZXIsXG5cdExpbmVhclNjYWxlLFxuXHRMaW5lQ29udHJvbGxlcixcblx0TGluZUVsZW1lbnQsXG5cdFBvaW50RWxlbWVudCxcblx0VGltZVNjYWxlXG59IGZyb20gXCJjaGFydC5qc1wiO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCB0eXBlIHsgUXVvdGVSZXN1bHQsIFF1b3RlU2V0dGluZ3MgfSBmcm9tIFwiLi9zaGFwZXNcIjtcblxuLyoqXG4gKiBJbXBsZW1lbnQgdGhlIHNvdXJjZSBmb3IgUXVvdGVzLlxuICovXG5leHBvcnQgY2xhc3MgUXVvdGVTb3VyY2Uge1xuXHQvKipcblx0ICogVGhlIGtleSB0byB1c2UgZm9yIGEgcXVvdGUgcmVzdWx0LlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9RVU9URV9QUk9WSURFUl9ERVRBSUxTX0FDVElPTiA9IFwiUXVvdGUgRGV0YWlsc1wiO1xuXG5cdC8qKlxuXHQgKiBUaGUgaGVscGVycyBmb3IgdGhlIHNvdXJjZS5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIF9oZWxwZXJzOiB7IG9wZW5Vcmw6ICh1cmw6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPiB9IHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgc2V0dGluZ3MgZm9yIHRoZSBzb3VyY2UuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJpdmF0ZSBfZGVmaW5pdGlvbjogeyBpZDogc3RyaW5nOyBkYXRhPzogUXVvdGVTZXR0aW5ncyB9IHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgc2V0dGluZ3MgZm9yIHRoZSBzb3VyY2UuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJpdmF0ZSBfc2V0dGluZ3M6IFF1b3RlU2V0dGluZ3MgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemUgdGhlIG1vZHVsZS5cblx0ICogQHBhcmFtIGRlZmluaXRpb24gVGhlIGRlZmluaXRpb24gb2YgdGhlIG1vZHVsZSBmcm9tIGNvbmZpZ3VyYXRpb24gaW5jbHVkZSBjdXN0b20gb3B0aW9ucy5cblx0ICogQHBhcmFtIGRlZmluaXRpb24uaWQgVGhlIGlkIGZvciB0aGUgbW9kdWxlLlxuXHQgKiBAcGFyYW0gZGVmaW5pdGlvbi5kYXRhIFRoZSBjdXN0b20gZGF0YSBmb3IgdGhlIG1vZHVsZS5cblx0ICogQHBhcmFtIGxvZ2dlckNyZWF0b3IgRm9yIGxvZ2dpbmcgZW50cmllcy5cblx0ICogQHBhcmFtIGhlbHBlcnMgSGVscGVyIG1ldGhvZHMgZnJvbSB0aGUgcGxhdGZvcm0uXG5cdCAqIEBwYXJhbSBoZWxwZXJzLm9wZW5VcmwgTWV0aG9kIGZvciBvcGVuaW5nIGEgdXJsLlxuXHQgKiBAcmV0dXJucyBOb3RoaW5nLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGluaXRpYWxpemUoXG5cdFx0ZGVmaW5pdGlvbjogeyBpZDogc3RyaW5nOyBkYXRhPzogUXVvdGVTZXR0aW5ncyB9LFxuXHRcdGxvZ2dlckNyZWF0b3I6ICgpID0+IHZvaWQsXG5cdFx0aGVscGVyczogeyBvcGVuVXJsOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD4gfVxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLl9kZWZpbml0aW9uID0gZGVmaW5pdGlvbjtcblx0XHR0aGlzLl9zZXR0aW5ncyA9IGRlZmluaXRpb24uZGF0YTtcblx0XHR0aGlzLl9oZWxwZXJzID0gaGVscGVycztcblxuXHRcdENoYXJ0LnJlZ2lzdGVyKExpbmVDb250cm9sbGVyLCBDYXRlZ29yeVNjYWxlLCBMaW5lYXJTY2FsZSwgTGluZUVsZW1lbnQsIFBvaW50RWxlbWVudCwgVGltZVNjYWxlLCBGaWxsZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIGxpc3Qgb2YgdGhlIHN0YXRpYyBoZWxwIGVudHJpZXMuXG5cdCAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIGhlbHAgZW50cmllcy5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBnZXRIZWxwU2VhcmNoRW50cmllcygpOiBQcm9taXNlPEhvbWVTZWFyY2hSZXN1bHRbXT4ge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGtleTogYCR7dGhpcy5fZGVmaW5pdGlvbj8uaWR9LWhlbHBgLFxuXHRcdFx0XHR0aXRsZTogXCIvcXVvdGVcIixcblx0XHRcdFx0bGFiZWw6IFwiSGVscFwiLFxuXHRcdFx0XHRhY3Rpb25zOiBbXSxcblx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdHByb3ZpZGVySWQ6IHRoaXMuX2RlZmluaXRpb24/LmlkLFxuXHRcdFx0XHRcdHBvcHVsYXRlUXVlcnk6IFwiL3F1b3RlIFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbXBsYXRlOiBDTElUZW1wbGF0ZS5DdXN0b20sXG5cdFx0XHRcdHRlbXBsYXRlQ29udGVudDoge1xuXHRcdFx0XHRcdGxheW91dDoge1xuXHRcdFx0XHRcdFx0dHlwZTogXCJDb250YWluZXJcIixcblx0XHRcdFx0XHRcdHN0eWxlOiB7IGRpc3BsYXk6IFwiZmxleFwiLCBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLCBwYWRkaW5nOiBcIjEwcHhcIiB9LFxuXHRcdFx0XHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwidGl0bGVcIixcblx0XHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29sb3I6IFwiI0ZGRkZGRlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9udFNpemU6IFwiMTZweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9udFdlaWdodDogXCJib2xkXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXJnaW5Cb3R0b206IFwiMTBweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Ym9yZGVyQm90dG9tOiBcIjFweCBzb2xpZCAjNTM1NjVGXCJcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHsgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwiZGVzYy0wXCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiwgcGFkZGluZzogXCI2cHggMHB4XCIgfSB9LFxuXHRcdFx0XHRcdFx0XHR7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcImRlc2MtMVwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIHBhZGRpbmc6IFwiNnB4IDBweFwiIH0gfSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHtcblx0XHRcdFx0XHRcdFx0XHRcdGRpc3BsYXk6IFwiZmxleFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIixcblx0XHRcdFx0XHRcdFx0XHRcdHBhZGRpbmc6IFwiMTBweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWFyZ2luVG9wOiBcIjZweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiBcIiM1MzU2NUZcIixcblx0XHRcdFx0XHRcdFx0XHRcdGNvbG9yOiBcIiNGRkZGRkZcIixcblx0XHRcdFx0XHRcdFx0XHRcdGJvcmRlclJhZGl1czogXCI1cHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdG92ZXJmbG93OiBcImF1dG9cIlxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwibGluZS0wXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiwgZm9udEZhbWlseTogXCJtb25vc3BhY2VcIiwgd2hpdGVTcGFjZTogXCJub3dyYXBcIiB9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0XHR0aXRsZTogXCIvcXVvdGVcIixcblx0XHRcdFx0XHRcdFwiZGVzYy0wXCI6IFwiVGhlIHF1b3RlIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBkZXRhaWxzIG9mIGFuIGluc3RydW1lbnQuXCIsXG5cdFx0XHRcdFx0XHRcImRlc2MtMVwiOiBcIkZvciBleGFtcGxlIHRvIHNlYXJjaCBmb3IgTWljcm9zb2Z0IGluc3RydW1lbnQuXCIsXG5cdFx0XHRcdFx0XHRcImxpbmUtMFwiOiBcIi9xdW90ZSBNU0ZUXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIGxpc3Qgb2Ygc2VhcmNoIHJlc3VsdHMgYmFzZWQgb24gdGhlIHF1ZXJ5IGFuZCBmaWx0ZXJzLlxuXHQgKiBAcGFyYW0gcXVlcnkgVGhlIHF1ZXJ5IHRvIHNlYXJjaCBmb3IuXG5cdCAqIEBwYXJhbSBmaWx0ZXJzIFRoZSBmaWx0ZXJzIHRvIGFwcGx5LlxuXHQgKiBAcGFyYW0gbGFzdFJlc3BvbnNlIFRoZSBsYXN0IHNlYXJjaCByZXNwb25zZSB1c2VkIGZvciB1cGRhdGluZyBleGlzdGluZyByZXN1bHRzLlxuXHQgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgZ2V0IHNlYXJjaCByZXN1bHRzLlxuXHQgKiBAcGFyYW0gb3B0aW9ucy5pc1N1Z2dlc3Rpb24gSXMgdGhlIHF1ZXJ5IGEgc3VnZ2VzdGlvbi5cblx0ICogQHJldHVybnMgVGhlIGxpc3Qgb2YgcmVzdWx0cyBhbmQgbmV3IGZpbHRlcnMuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0U2VhcmNoUmVzdWx0cyhcblx0XHRxdWVyeTogc3RyaW5nLFxuXHRcdGZpbHRlcnM6IENMSUZpbHRlcltdLFxuXHRcdGxhc3RSZXNwb25zZTogSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2UsXG5cdFx0b3B0aW9uczoge1xuXHRcdFx0aXNTdWdnZXN0aW9uOiBib29sZWFuO1xuXHRcdH1cblx0KTogUHJvbWlzZTxIb21lU2VhcmNoUmVzcG9uc2U+IHtcblx0XHRjb25zdCByZXN1bHRzID0gW107XG5cblx0XHRpZiAocXVlcnkuc3RhcnRzV2l0aChcIi9xdW90ZSBcIikgJiYgdGhpcy5fc2V0dGluZ3M/LnJvb3RVcmwpIHtcblx0XHRcdGxldCBzeW1ib2wgPSBxdWVyeS5zbGljZSg3KTtcblxuXHRcdFx0aWYgKHN5bWJvbC5sZW5ndGggPiAwICYmIC9eW2Etel0rJC9pLnRlc3Qoc3ltYm9sKSkge1xuXHRcdFx0XHRzeW1ib2wgPSBzeW1ib2wudG9VcHBlckNhc2UoKTtcblxuXHRcdFx0XHRjb25zdCBub3cgPSBEYXRlVGltZS5ub3coKTtcblxuXHRcdFx0XHRjb25zdCBxdW90ZURhdGEgPSBhd2FpdCB0aGlzLmdldFF1b3RlRGF0YShcblx0XHRcdFx0XHRzeW1ib2wsXG5cdFx0XHRcdFx0bm93Lm1pbnVzKHsgbW9udGhzOiAxIH0pLnRvRm9ybWF0KFwieXl5eS1MTC1kZFwiKSxcblx0XHRcdFx0XHRub3cudG9Gb3JtYXQoXCJ5eXl5LUxMLWRkXCIpXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0bGV0IHByaWNlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGxldCBjb21wYW55OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGxldCBkYXRhOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH1bXSB8IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRpZiAocXVvdGVEYXRhPy5kYXRhPy5sYXN0U2FsZVByaWNlKSB7XG5cdFx0XHRcdFx0cHJpY2UgPSBxdW90ZURhdGEuZGF0YS5sYXN0U2FsZVByaWNlO1xuXHRcdFx0XHRcdGNvbXBhbnkgPSBxdW90ZURhdGEuZGF0YS5jb21wYW55O1xuXHRcdFx0XHRcdGRhdGEgPSBxdW90ZURhdGEuZGF0YS5jaGFydDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChwcmljZSAhPT0gdW5kZWZpbmVkICYmIGRhdGEgIT09IHVuZGVmaW5lZCAmJiBjb21wYW55ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjb25zdCBncmFwaEltYWdlID0gYXdhaXQgdGhpcy5yZW5kZXJHcmFwaChkYXRhKTtcblxuXHRcdFx0XHRcdGNvbnN0IHF1b3RlUmVzdWx0OiBIb21lU2VhcmNoUmVzdWx0ID0ge1xuXHRcdFx0XHRcdFx0a2V5OiBgcXVvdGUtJHtzeW1ib2x9YCxcblx0XHRcdFx0XHRcdHRpdGxlOiBzeW1ib2wsXG5cdFx0XHRcdFx0XHRsYWJlbDogXCJJbmZvcm1hdGlvblwiLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogUXVvdGVTb3VyY2UuX1FVT1RFX1BST1ZJREVSX0RFVEFJTFNfQUNUSU9OLFxuXHRcdFx0XHRcdFx0XHRcdGhvdGtleTogXCJFbnRlclwiXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0XHRcdHByb3ZpZGVySWQ6IHRoaXMuX2RlZmluaXRpb24/LmlkLFxuXHRcdFx0XHRcdFx0XHR1cmw6IGBodHRwczovL3d3dy5uYXNkYXEuY29tL21hcmtldC1hY3Rpdml0eS9zdG9ja3MvJHtzeW1ib2wudG9Mb3dlckNhc2UoKX1gXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dGVtcGxhdGU6IENMSVRlbXBsYXRlLkN1c3RvbSxcblx0XHRcdFx0XHRcdHRlbXBsYXRlQ29udGVudDoge1xuXHRcdFx0XHRcdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7IGRpc3BsYXk6IFwiZmxleFwiLCBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLCBwYWRkaW5nOiBcIjEwcHhcIiB9LFxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7IGRpc3BsYXk6IFwiZmxleFwiLCBmbGV4RGlyZWN0aW9uOiBcInJvd1wiLCBqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCIgfSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcInN5bWJvbFwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxOHB4XCIsIGZvbnRXZWlnaHQ6IFwiYm9sZFwiIH0gfSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcInByaWNlXCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjE4cHhcIiB9IH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwiY29tcGFueVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIGNvbG9yOiBcIiNGRkZGRkZcIiwgbWFyZ2luOiBcIjVweCAwcHhcIiB9XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpc3BsYXk6IFwiZmxleFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiBcImJsYWNrXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ym9yZGVyUmFkaXVzOiBcIjVweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhZGRpbmc6IFwiNXB4XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46IFt7IHR5cGU6IFwiSW1hZ2VcIiwgZGF0YUtleTogXCJncmFwaFwiLCBhbHRlcm5hdGl2ZVRleHQ6IFwiSGlzdG9yeVwiLCBzdHlsZToge30gfV1cblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlzcGxheTogXCJmbGV4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmxleERpcmVjdGlvbjogXCJyb3dcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqdXN0aWZ5Q29udGVudDogXCJmbGV4LWVuZFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhZGRpbmdUb3A6IFwiMTBweFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJCdXR0b25cIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJ1dHRvblN0eWxlOiBCdXR0b25TdHlsZS5QcmltYXJ5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46IFt7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcImRldGFpbHNUaXRsZVwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIgfSB9XSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogUXVvdGVTb3VyY2UuX1FVT1RFX1BST1ZJREVSX0RFVEFJTFNfQUNUSU9OLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRcdFx0XHRzeW1ib2wsXG5cdFx0XHRcdFx0XHRcdFx0cHJpY2VUaXRsZTogXCJQcmljZVwiLFxuXHRcdFx0XHRcdFx0XHRcdHByaWNlOiBgJHtwcmljZX1gLFxuXHRcdFx0XHRcdFx0XHRcdGNvbXBhbnksXG5cdFx0XHRcdFx0XHRcdFx0Z3JhcGg6IGdyYXBoSW1hZ2UsXG5cdFx0XHRcdFx0XHRcdFx0ZGV0YWlsc1RpdGxlOiBcIkRldGFpbHNcIlxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRyZXN1bHRzLnB1c2gocXVvdGVSZXN1bHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHJlc3VsdHNcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFuIGVudHJ5IGhhcyBiZWVuIHNlbGVjdGVkLlxuXHQgKiBAcGFyYW0gcmVzdWx0IFRoZSBkaXNwYXRjaGVkIHJlc3VsdC5cblx0ICogQHBhcmFtIGxhc3RSZXNwb25zZSBUaGUgbGFzdCByZXNwb25zZS5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgaXRlbSB3YXMgaGFuZGxlZC5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBpdGVtU2VsZWN0aW9uKFxuXHRcdHJlc3VsdDogSG9tZURpc3BhdGNoZWRTZWFyY2hSZXN1bHQsXG5cdFx0bGFzdFJlc3BvbnNlOiBIb21lU2VhcmNoTGlzdGVuZXJSZXNwb25zZVxuXHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRpZiAoXG5cdFx0XHRyZXN1bHQuYWN0aW9uLnRyaWdnZXIgPT09IFwidXNlci1hY3Rpb25cIiAmJlxuXHRcdFx0cmVzdWx0LmFjdGlvbi5uYW1lID09PSBRdW90ZVNvdXJjZS5fUVVPVEVfUFJPVklERVJfREVUQUlMU19BQ1RJT04gJiZcblx0XHRcdHRoaXMuX2hlbHBlcnM/Lm9wZW5VcmwgJiZcblx0XHRcdHJlc3VsdC5kYXRhLnVybFxuXHRcdCkge1xuXHRcdFx0YXdhaXQgdGhpcy5faGVscGVycy5vcGVuVXJsKHJlc3VsdC5kYXRhLnVybCBhcyBzdHJpbmcpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcXVvdGUgZGF0YSBmcm9tIHRoZSBhcGkuXG5cdCAqIEBwYXJhbSBzeW1ib2wgVGhlIHN5bWJvbCB0byBnZXQuXG5cdCAqIEBwYXJhbSBmcm9tIFRoZSBkYXRlIGZyb20uXG5cdCAqIEBwYXJhbSB0byBUaGUgZGF0ZSB0by5cblx0ICogQHJldHVybnMgVGhlIHJlc3VsdCBkYXRhLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRRdW90ZURhdGEoc3ltYm9sOiBzdHJpbmcsIGZyb206IHN0cmluZywgdG86IHN0cmluZyk6IFByb21pc2U8UXVvdGVSZXN1bHQgfCB1bmRlZmluZWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc3ltYm9sVXJsID0gYCR7dGhpcy5fc2V0dGluZ3M/LnJvb3RVcmx9JHtzeW1ib2x9Lmpzb25gO1xuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChzeW1ib2xVcmwpO1xuXG5cdFx0XHRjb25zdCBqc29uOiBRdW90ZVJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuXHRcdFx0cmV0dXJuIGpzb247XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKGVycik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlbmRlciB0aGUgZGF0YSBhcyBhIGdyYXBoLlxuXHQgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byByZW5kZXIuXG5cdCAqIEByZXR1cm5zIFRoZSBncmFwaCBhcyBhIGJhc2U2NCBlbmNvZGVkIGltYWdlLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyByZW5kZXJHcmFwaChkYXRhOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH1bXSk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcblx0XHRjYW52YXMud2lkdGggPSAyNTA7XG5cdFx0Y2FudmFzLmhlaWdodCA9IDExMDtcblx0XHRjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuXG5cdFx0aWYgKGN0eCkge1xuXHRcdFx0Y29uc3QgY2hhcnQgPSBuZXcgQ2hhcnQoY3R4LCB7XG5cdFx0XHRcdHR5cGU6IFwibGluZVwiLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0bGFiZWxzOiBkYXRhLm1hcCgoZCkgPT4gZC54KSxcblx0XHRcdFx0XHRkYXRhc2V0czogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRmaWxsOiBcIm9yaWdpblwiLFxuXHRcdFx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IFwiZ3JlZW5cIixcblx0XHRcdFx0XHRcdFx0cmFkaXVzOiAwLFxuXHRcdFx0XHRcdFx0XHRkYXRhXG5cdFx0XHRcdFx0XHR9IGFzIG5ldmVyXG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0YW5pbWF0aW9uOiBmYWxzZSxcblx0XHRcdFx0XHRyZXNwb25zaXZlOiBmYWxzZSxcblx0XHRcdFx0XHRzY2FsZXM6IHtcblx0XHRcdFx0XHRcdHg6IHtcblx0XHRcdFx0XHRcdFx0ZGlzcGxheTogZmFsc2Vcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHBsdWdpbnM6IHtcblx0XHRcdFx0XHRcdGxlZ2VuZDoge1xuXHRcdFx0XHRcdFx0XHRkaXNwbGF5OiBmYWxzZVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjaGFydC51cGRhdGUoKTtcblx0XHRcdHJldHVybiBjaGFydC50b0Jhc2U2NEltYWdlKFwiaW1hZ2UvanBlZ1wiLCAxKTtcblx0XHR9XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdENMSUFjdGlvbixcblx0Q0xJVGVtcGxhdGUsXG5cdHR5cGUgQ0xJRmlsdGVyLFxuXHR0eXBlIEhvbWVEaXNwYXRjaGVkU2VhcmNoUmVzdWx0LFxuXHR0eXBlIEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlLFxuXHR0eXBlIEhvbWVTZWFyY2hSZXNwb25zZSxcblx0dHlwZSBIb21lU2VhcmNoUmVzdWx0XG59IGZyb20gXCJAb3BlbmZpbi93b3Jrc3BhY2VcIjtcblxuLyoqXG4gKiBJbXBsZW1lbnQgdGhlIHNvdXJjZSBmb3IgU3VnZ2VzdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdWdnZXN0aW9uU291cmNlIHtcblx0LyoqXG5cdCAqIFRoZSBoZWxwZXJzIGZvciB0aGUgc291cmNlLlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgX2hlbHBlcnM6IHsgb3BlblVybDogKHVybDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+IH0gfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFRoZSBzZXR0aW5ncyBmb3IgdGhlIHNvdXJjZS5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIF9kZWZpbml0aW9uOiB7IGlkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZSB0aGUgbW9kdWxlLlxuXHQgKiBAcGFyYW0gZGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgbW9kdWxlIGZyb20gY29uZmlndXJhdGlvbiBpbmNsdWRlIGN1c3RvbSBvcHRpb25zLlxuXHQgKiBAcGFyYW0gZGVmaW5pdGlvbi5pZCBUaGUgaWQgZm9yIHRoZSBtb2R1bGUuXG5cdCAqIEBwYXJhbSBkZWZpbml0aW9uLmRhdGEgVGhlIGN1c3RvbSBkYXRhIGZvciB0aGUgbW9kdWxlLlxuXHQgKiBAcGFyYW0gbG9nZ2VyQ3JlYXRvciBGb3IgbG9nZ2luZyBlbnRyaWVzLlxuXHQgKiBAcGFyYW0gaGVscGVycyBIZWxwZXIgbWV0aG9kcyBmcm9tIHRoZSBwbGF0Zm9ybS5cblx0ICogQHBhcmFtIGhlbHBlcnMub3BlblVybCBNZXRob2QgZm9yIG9wZW5pbmcgYSB1cmwuXG5cdCAqIEByZXR1cm5zIE5vdGhpbmcuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgaW5pdGlhbGl6ZShcblx0XHRkZWZpbml0aW9uOiB7XG5cdFx0XHRpZDogc3RyaW5nO1xuXHRcdFx0ZGF0YT86IHVua25vd247XG5cdFx0fSxcblx0XHRsb2dnZXJDcmVhdG9yOiAoKSA9PiB2b2lkLFxuXHRcdGhlbHBlcnM6IHsgb3BlblVybDogKHVybDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+IH1cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5fZGVmaW5pdGlvbiA9IGRlZmluaXRpb247XG5cdFx0dGhpcy5faGVscGVycyA9IGhlbHBlcnM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGEgbGlzdCBvZiB0aGUgc3RhdGljIGhlbHAgZW50cmllcy5cblx0ICogQHJldHVybnMgVGhlIGxpc3Qgb2YgaGVscCBlbnRyaWVzLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGdldEhlbHBTZWFyY2hFbnRyaWVzKCk6IFByb21pc2U8SG9tZVNlYXJjaFJlc3VsdFtdPiB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIGxpc3Qgb2Ygc2VhcmNoIHJlc3VsdHMgYmFzZWQgb24gdGhlIHF1ZXJ5IGFuZCBmaWx0ZXJzLlxuXHQgKiBAcGFyYW0gcXVlcnkgVGhlIHF1ZXJ5IHRvIHNlYXJjaCBmb3IuXG5cdCAqIEBwYXJhbSBmaWx0ZXJzIFRoZSBmaWx0ZXJzIHRvIGFwcGx5LlxuXHQgKiBAcGFyYW0gbGFzdFJlc3BvbnNlIFRoZSBsYXN0IHNlYXJjaCByZXNwb25zZSB1c2VkIGZvciB1cGRhdGluZyBleGlzdGluZyByZXN1bHRzLlxuXHQgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgZ2V0IHNlYXJjaCByZXN1bHRzLlxuXHQgKiBAcGFyYW0gb3B0aW9ucy5pc1N1Z2dlc3Rpb24gSXMgdGhlIHF1ZXJ5IGEgc3VnZ2VzdGlvbi5cblx0ICogQHJldHVybnMgVGhlIGxpc3Qgb2YgcmVzdWx0cyBhbmQgbmV3IGZpbHRlcnMuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0U2VhcmNoUmVzdWx0cyhcblx0XHRxdWVyeTogc3RyaW5nLFxuXHRcdGZpbHRlcnM6IENMSUZpbHRlcltdLFxuXHRcdGxhc3RSZXNwb25zZTogSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2UsXG5cdFx0b3B0aW9uczoge1xuXHRcdFx0aXNTdWdnZXN0aW9uOiBib29sZWFuO1xuXHRcdH1cblx0KTogUHJvbWlzZTxIb21lU2VhcmNoUmVzcG9uc2U+IHtcblx0XHRjb25zdCByZXN1bHRzOiBIb21lU2VhcmNoUmVzdWx0W10gPSBbXTtcblxuXHRcdGlmICghb3B0aW9ucy5pc1N1Z2dlc3Rpb24gJiYgcXVlcnkuc3RhcnRzV2l0aChcImRlc3NlcnRzXCIpKSB7XG5cdFx0XHRyZXN1bHRzLnB1c2goe1xuXHRcdFx0XHR0aXRsZTogXCJDYWtlc1wiLFxuXHRcdFx0XHRrZXk6IFwiY2FrZXNcIixcblx0XHRcdFx0YWN0aW9uczogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG5hbWU6IENMSUFjdGlvbi5TdWdnZXN0aW9uLFxuXHRcdFx0XHRcdFx0cXVlcnk6IFwiY2FrZXNcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XSxcblx0XHRcdFx0dGVtcGxhdGU6IENMSVRlbXBsYXRlLlBsYWluLFxuXHRcdFx0XHR0ZW1wbGF0ZUNvbnRlbnQ6IHVuZGVmaW5lZFxuXHRcdFx0fSk7XG5cdFx0XHRyZXN1bHRzLnB1c2goe1xuXHRcdFx0XHR0aXRsZTogXCJJY2UgQ3JlYW1cIixcblx0XHRcdFx0a2V5OiBcImljZS1jcmVhbVwiLFxuXHRcdFx0XHRhY3Rpb25zOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bmFtZTogQ0xJQWN0aW9uLlN1Z2dlc3Rpb24sXG5cdFx0XHRcdFx0XHRxdWVyeTogXCJpY2UtY3JlYW1cIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XSxcblx0XHRcdFx0dGVtcGxhdGU6IENMSVRlbXBsYXRlLlBsYWluLFxuXHRcdFx0XHR0ZW1wbGF0ZUNvbnRlbnQ6IHVuZGVmaW5lZFxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChvcHRpb25zLmlzU3VnZ2VzdGlvbikge1xuXHRcdFx0aWYgKHF1ZXJ5ID09PSBcImNha2VzXCIpIHtcblx0XHRcdFx0cmVzdWx0cy5wdXNoKHtcblx0XHRcdFx0XHR0aXRsZTogXCJDYWtlc1wiLFxuXHRcdFx0XHRcdGtleTogXCJjYWtlc1wiLFxuXHRcdFx0XHRcdGFjdGlvbnM6IFtdLFxuXHRcdFx0XHRcdHRlbXBsYXRlOiBDTElUZW1wbGF0ZS5TaW1wbGVUZXh0LFxuXHRcdFx0XHRcdHRlbXBsYXRlQ29udGVudDogXCJBIHNlbGVjdGlvbiBvZiBjYWtlc1wiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChxdWVyeSA9PT0gXCJpY2UtY3JlYW1cIikge1xuXHRcdFx0XHRyZXN1bHRzLnB1c2goe1xuXHRcdFx0XHRcdHRpdGxlOiBcIkljZSBDcmVhbVwiLFxuXHRcdFx0XHRcdGtleTogXCJpY2UtY3JlYW1cIixcblx0XHRcdFx0XHRhY3Rpb25zOiBbXSxcblx0XHRcdFx0XHR0ZW1wbGF0ZTogQ0xJVGVtcGxhdGUuU2ltcGxlVGV4dCxcblx0XHRcdFx0XHR0ZW1wbGF0ZUNvbnRlbnQ6IFwiQSBzZWxlY3Rpb24gb2YgaWNlIGNyZWFtXCJcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHJlc3VsdHNcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFuIGVudHJ5IGhhcyBiZWVuIHNlbGVjdGVkLlxuXHQgKiBAcGFyYW0gcmVzdWx0IFRoZSBkaXNwYXRjaGVkIHJlc3VsdC5cblx0ICogQHBhcmFtIGxhc3RSZXNwb25zZSBUaGUgbGFzdCByZXNwb25zZS5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgaXRlbSB3YXMgaGFuZGxlZC5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBpdGVtU2VsZWN0aW9uKFxuXHRcdHJlc3VsdDogSG9tZURpc3BhdGNoZWRTZWFyY2hSZXN1bHQsXG5cdFx0bGFzdFJlc3BvbnNlOiBIb21lU2VhcmNoTGlzdGVuZXJSZXNwb25zZVxuXHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRpZiAocmVzdWx0LmFjdGlvbi50cmlnZ2VyID09PSBcInVzZXItYWN0aW9uXCIpIHtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdEJ1dHRvblN0eWxlLFxuXHRDTElUZW1wbGF0ZSxcblx0dHlwZSBDTElGaWx0ZXIsXG5cdHR5cGUgSG9tZURpc3BhdGNoZWRTZWFyY2hSZXN1bHQsXG5cdHR5cGUgSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2UsXG5cdHR5cGUgSG9tZVNlYXJjaFJlc3BvbnNlLFxuXHR0eXBlIEhvbWVTZWFyY2hSZXN1bHRcbn0gZnJvbSBcIkBvcGVuZmluL3dvcmtzcGFjZVwiO1xuXG4vKipcbiAqIEltcGxlbWVudCB0aGUgc291cmNlIGZvciBleGFtcGxlIG9mIHRlbXBsYXRlIHR5cGVzLlxuICovXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVUeXBlc1NvdXJjZSB7XG5cdC8qKlxuXHQgKiBUaGUgaGVscGVycyBmb3IgdGhlIHNvdXJjZS5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIF9oZWxwZXJzOiB7IG9wZW5Vcmw6ICh1cmw6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPiB9IHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgc2V0dGluZ3MgZm9yIHRoZSBzb3VyY2UuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJpdmF0ZSBfZGVmaW5pdGlvbjogeyBpZDogc3RyaW5nOyBkYXRhPzogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplIHRoZSBtb2R1bGUuXG5cdCAqIEBwYXJhbSBkZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBtb2R1bGUgZnJvbSBjb25maWd1cmF0aW9uIGluY2x1ZGUgY3VzdG9tIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSBkZWZpbml0aW9uLmlkIFRoZSBpZCBmb3IgdGhlIG1vZHVsZS5cblx0ICogQHBhcmFtIGRlZmluaXRpb24uZGF0YSBUaGUgY3VzdG9tIGRhdGEgZm9yIHRoZSBtb2R1bGUuXG5cdCAqIEBwYXJhbSBsb2dnZXJDcmVhdG9yIEZvciBsb2dnaW5nIGVudHJpZXMuXG5cdCAqIEBwYXJhbSBoZWxwZXJzIEhlbHBlciBtZXRob2RzIGZyb20gdGhlIHBsYXRmb3JtLlxuXHQgKiBAcGFyYW0gaGVscGVycy5vcGVuVXJsIE1ldGhvZCBmb3Igb3BlbmluZyBhIHVybC5cblx0ICogQHJldHVybnMgTm90aGluZy5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBpbml0aWFsaXplKFxuXHRcdGRlZmluaXRpb246IHtcblx0XHRcdGlkOiBzdHJpbmc7XG5cdFx0XHRkYXRhPzogdW5rbm93bjtcblx0XHR9LFxuXHRcdGxvZ2dlckNyZWF0b3I6ICgpID0+IHZvaWQsXG5cdFx0aGVscGVyczogeyBvcGVuVXJsOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD4gfVxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLl9kZWZpbml0aW9uID0gZGVmaW5pdGlvbjtcblx0XHR0aGlzLl9oZWxwZXJzID0gaGVscGVycztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSBsaXN0IG9mIHRoZSBzdGF0aWMgaGVscCBlbnRyaWVzLlxuXHQgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBoZWxwIGVudHJpZXMuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0SGVscFNlYXJjaEVudHJpZXMoKTogUHJvbWlzZTxIb21lU2VhcmNoUmVzdWx0W10+IHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRrZXk6IGAke3RoaXMuX2RlZmluaXRpb24/LmlkfS1oZWxwYCxcblx0XHRcdFx0dGl0bGU6IFwiL3RlbXBsYXRlc1wiLFxuXHRcdFx0XHRsYWJlbDogXCJIZWxwXCIsXG5cdFx0XHRcdGFjdGlvbnM6IFtdLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0cHJvdmlkZXJJZDogdGhpcy5fZGVmaW5pdGlvbj8uaWQsXG5cdFx0XHRcdFx0cG9wdWxhdGVRdWVyeTogXCIvdGVtcGxhdGVzXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0dGVtcGxhdGU6IENMSVRlbXBsYXRlLkN1c3RvbSxcblx0XHRcdFx0dGVtcGxhdGVDb250ZW50OiB7XG5cdFx0XHRcdFx0bGF5b3V0OiB7XG5cdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0c3R5bGU6IHsgZGlzcGxheTogXCJmbGV4XCIsIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsIHBhZGRpbmc6IFwiMTBweFwiIH0sXG5cdFx0XHRcdFx0XHRjaGlsZHJlbjogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUtleTogXCJ0aXRsZVwiLFxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRmb250U2l6ZTogXCIxNnB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRmb250V2VpZ2h0OiBcImJvbGRcIixcblx0XHRcdFx0XHRcdFx0XHRcdG1hcmdpbkJvdHRvbTogXCIxMHB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRib3JkZXJCb3R0b206IFwiMXB4IHNvbGlkICM1MzU2NUZcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0eyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJkZXNjLTBcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBwYWRkaW5nOiBcIjZweCAwcHhcIiB9IH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5OiBcImZsZXhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRwYWRkaW5nOiBcIjEwcHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdG1hcmdpblRvcDogXCI2cHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCIjNTM1NjVGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRib3JkZXJSYWRpdXM6IFwiNXB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRvdmVyZmxvdzogXCJhdXRvXCJcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcImxpbmUtMFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIGZvbnRGYW1pbHk6IFwibW9ub3NwYWNlXCIsIHdoaXRlU3BhY2U6IFwibm93cmFwXCIgfVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0dGl0bGU6IFwiL3RlbXBsYXRlc1wiLFxuXHRcdFx0XHRcdFx0XCJkZXNjLTBcIjogXCJUaGUgdGVtcGxhdGVzIGNvbW1hbmQgc2hvd3MgYSB0ZW1wbGF0ZSB3aXRoIGFsbCB0aGUgZGlmZmVyZW50IHRlbXBsYXRlIGNvbnRlbnQgdHlwZXMuXCIsXG5cdFx0XHRcdFx0XHRcImxpbmUtMFwiOiBcIi90ZW1wbGF0ZXNcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF07XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGEgbGlzdCBvZiBzZWFyY2ggcmVzdWx0cyBiYXNlZCBvbiB0aGUgcXVlcnkgYW5kIGZpbHRlcnMuXG5cdCAqIEBwYXJhbSBxdWVyeSBUaGUgcXVlcnkgdG8gc2VhcmNoIGZvci5cblx0ICogQHBhcmFtIGZpbHRlcnMgVGhlIGZpbHRlcnMgdG8gYXBwbHkuXG5cdCAqIEBwYXJhbSBsYXN0UmVzcG9uc2UgVGhlIGxhc3Qgc2VhcmNoIHJlc3BvbnNlIHVzZWQgZm9yIHVwZGF0aW5nIGV4aXN0aW5nIHJlc3VsdHMuXG5cdCAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSBnZXQgc2VhcmNoIHJlc3VsdHMuXG5cdCAqIEBwYXJhbSBvcHRpb25zLmlzU3VnZ2VzdGlvbiBJcyB0aGUgcXVlcnkgYSBzdWdnZXN0aW9uLlxuXHQgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiByZXN1bHRzIGFuZCBuZXcgZmlsdGVycy5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBnZXRTZWFyY2hSZXN1bHRzKFxuXHRcdHF1ZXJ5OiBzdHJpbmcsXG5cdFx0ZmlsdGVyczogQ0xJRmlsdGVyW10sXG5cdFx0bGFzdFJlc3BvbnNlOiBIb21lU2VhcmNoTGlzdGVuZXJSZXNwb25zZSxcblx0XHRvcHRpb25zOiB7XG5cdFx0XHRpc1N1Z2dlc3Rpb246IGJvb2xlYW47XG5cdFx0fVxuXHQpOiBQcm9taXNlPEhvbWVTZWFyY2hSZXNwb25zZT4ge1xuXHRcdGNvbnN0IHJlc3VsdHM6IEhvbWVTZWFyY2hSZXN1bHRbXSA9IFtdO1xuXG5cdFx0aWYgKHF1ZXJ5LnN0YXJ0c1dpdGgoXCIvdGVtcGxhdGVzXCIpKSB7XG5cdFx0XHRyZXN1bHRzLnB1c2goe1xuXHRcdFx0XHRrZXk6IFwidGVtcGxhdGVzLWV4YW1wbGVcIixcblx0XHRcdFx0dGl0bGU6IFwiVGVtcGxhdGVzIEV4YW1wbGVcIixcblx0XHRcdFx0bGFiZWw6IFwiSW5mb3JtYXRpb25cIixcblx0XHRcdFx0YWN0aW9uczogW10sXG5cdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRwcm92aWRlcklkOiB0aGlzLl9kZWZpbml0aW9uPy5pZFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZW1wbGF0ZTogQ0xJVGVtcGxhdGUuQ3VzdG9tLFxuXHRcdFx0XHR0ZW1wbGF0ZUNvbnRlbnQ6IHtcblx0XHRcdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRcdFx0XHRzdHlsZTogeyBkaXNwbGF5OiBcImZsZXhcIiwgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIiwgZ2FwOiBcIjEwcHhcIiwgcGFkZGluZzogXCIxMHB4XCIgfSxcblx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIlRleHRcIixcblx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcInRleHRDb250ZW50XCIsXG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbG9yOiBcIiNGRkZGRkZcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZvbnRTaXplOiBcIjE0cHhcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiSW1hZ2VcIixcblx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcImltYWdlQ29udGVudFwiLFxuXHRcdFx0XHRcdFx0XHRcdGFsdGVybmF0aXZlVGV4dDogXCJUaGlzIGlzIGFsdGVybmF0aXZlIHRleHRcIixcblx0XHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg6IFwiMzJweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBcIjMycHhcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiTGlzdFwiLFxuXHRcdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwibGlzdENvbnRlbnRcIlxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJDb250YWluZXJcIixcblx0XHRcdFx0XHRcdFx0XHRzdHlsZTogeyBkaXNwbGF5OiBcImZsZXhcIiwgZmxleERpcmVjdGlvbjogXCJyb3dcIiwgZ2FwOiBcIjVweFwiIH0sXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJCdXR0b25cIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uU3R5bGU6IEJ1dHRvblN0eWxlLlByaW1hcnksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcImJ1dHRvblByaW1hcnlDb250ZW50XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogXCJidXR0b24tcHJpbWFyeS1hY3Rpb25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJCdXR0b25cIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uU3R5bGU6IEJ1dHRvblN0eWxlLlNlY29uZGFyeSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIlRleHRcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwiYnV0dG9uU2Vjb25kYXJ5Q29udGVudFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb246IFwiYnV0dG9uLXNlY29uZGFyeS1hY3Rpb25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJCdXR0b25cIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uU3R5bGU6IEJ1dHRvblN0eWxlLlRleHRPbmx5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbjogW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YUtleTogXCJidXR0b25UZXh0T25seUNvbnRlbnRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uOiBcImJ1dHRvbi10ZXh0LW9ubHktYWN0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIlNwbGl0QnV0dG9uXCIsXG5cdFx0XHRcdFx0XHRcdFx0YnV0dG9uU3R5bGU6IEJ1dHRvblN0eWxlLlByaW1hcnksXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUtleTogXCJidXR0b25TcGxpdDFDb250ZW50XCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0dGV4dENvbnRlbnQ6IFwiVGhpcyBpcyB0ZXh0IGNvbnRlbnRcIixcblx0XHRcdFx0XHRcdGltYWdlQ29udGVudDogXCJodHRwczovL2Nkbi5vcGVuZmluLmNvL3dvcmtzcGFjZS8yMC4wLjUvaWNvbnMvZGVmYXVsdEZhdmljb24uc3ZnXCIsXG5cdFx0XHRcdFx0XHRsaXN0Q29udGVudDogW1xuXHRcdFx0XHRcdFx0XHRbXCJMYWJlbCAxXCIsIFwiVmFsdWUgMVwiXSxcblx0XHRcdFx0XHRcdFx0W1wiTGFiZWwgMlwiLCBcIlZhbHVlIDJcIl1cblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRidXR0b25QcmltYXJ5Q29udGVudDogXCJQcmltYXJ5XCIsXG5cdFx0XHRcdFx0XHRidXR0b25TZWNvbmRhcnlDb250ZW50OiBcIlNlY29uZGFyeVwiLFxuXHRcdFx0XHRcdFx0YnV0dG9uVGV4dE9ubHlDb250ZW50OiBcIlRleHQgT25seVwiLFxuXHRcdFx0XHRcdFx0YnV0dG9uU3BsaXQxQ29udGVudDoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogXCJTcGxpdCBCdXR0b24gMVwiLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiBcIkNsaWNrIG1lXCIsXG5cdFx0XHRcdFx0XHRcdGFjdGlvbjogXCJzcGxpdC1wcmltYXJ5LWFjdGlvblwiLFxuXHRcdFx0XHRcdFx0XHRvcHRpb25zOiBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IFwiTWVudSBPcHRpb24gMVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dG9vbHRpcDogXCJNZW51IE9wdGlvbiAxIFRvb2x0aXBcIixcblx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogXCJzcGxpdC1hY3Rpb24tMVwiXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogXCJNZW51IE9wdGlvbiAyXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwOiBcIk1lbnUgT3B0aW9uIDIgVG9vbHRpcFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uOiBcInNwbGl0LWFjdGlvbi0yXCJcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRyZXN1bHRzXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbiBlbnRyeSBoYXMgYmVlbiBzZWxlY3RlZC5cblx0ICogQHBhcmFtIHJlc3VsdCBUaGUgZGlzcGF0Y2hlZCByZXN1bHQuXG5cdCAqIEBwYXJhbSBsYXN0UmVzcG9uc2UgVGhlIGxhc3QgcmVzcG9uc2UuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGl0ZW0gd2FzIGhhbmRsZWQuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgaXRlbVNlbGVjdGlvbihcblx0XHRyZXN1bHQ6IEhvbWVEaXNwYXRjaGVkU2VhcmNoUmVzdWx0LFxuXHRcdGxhc3RSZXNwb25zZTogSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2Vcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0aWYgKHJlc3VsdC5hY3Rpb24udHJpZ2dlciA9PT0gXCJ1c2VyLWFjdGlvblwiKSB7XG5cdFx0XHRpZiAocmVzdWx0LmFjdGlvbi5uYW1lID09PSBcImJ1dHRvbi1wcmltYXJ5LWFjdGlvblwiKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiQnV0dG9uIFByaW1hcnkgQ2xpY2tlZFwiKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKHJlc3VsdC5hY3Rpb24ubmFtZSA9PT0gXCJidXR0b24tc2Vjb25kYXJ5LWFjdGlvblwiKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiQnV0dG9uIFNlY29uZGFyeSBDbGlja2VkXCIpO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAocmVzdWx0LmFjdGlvbi5uYW1lID09PSBcImJ1dHRvbi10ZXh0LW9ubHktYWN0aW9uXCIpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coXCJCdXR0b24gVGV4dCBPbmx5IENsaWNrZWRcIik7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChyZXN1bHQuYWN0aW9uLm5hbWUgPT09IFwic3BsaXQtcHJpbWFyeS1hY3Rpb25cIikge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhcIlNwbGl0IFByaW1hcnkgQWN0aW9uXCIpO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAocmVzdWx0LmFjdGlvbi5uYW1lID09PSBcInNwbGl0LWFjdGlvbi0xXCIpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coXCJTcGxpdCBBY3Rpb24gMVwiKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKHJlc3VsdC5hY3Rpb24ubmFtZSA9PT0gXCJzcGxpdC1hY3Rpb24tMlwiKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiU3BsaXQgQWN0aW9uIDJcIik7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuIiwiaW1wb3J0IHtcblx0Q0xJVGVtcGxhdGUsXG5cdHR5cGUgQ0xJRmlsdGVyLFxuXHR0eXBlIEhvbWVEaXNwYXRjaGVkU2VhcmNoUmVzdWx0LFxuXHR0eXBlIEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlLFxuXHR0eXBlIEhvbWVTZWFyY2hSZXNwb25zZSxcblx0dHlwZSBIb21lU2VhcmNoUmVzdWx0LFxuXHR0eXBlIFRlbXBsYXRlRnJhZ21lbnQsXG5cdEJ1dHRvblN0eWxlXG59IGZyb20gXCJAb3BlbmZpbi93b3Jrc3BhY2VcIjtcbmltcG9ydCB0eXBlIHtcblx0RW50aXR5RGVwYXJ0bWVudCxcblx0RW50aXR5SXRlbSxcblx0RW50aXR5TWVtYmVyLFxuXHRFbnRpdHlPcmdhbml6YXRpb24sXG5cdFRyZWVJbmxpbmVTZXR0aW5nc1xufSBmcm9tIFwiLi9zaGFwZXNcIjtcblxuLyoqXG4gKiBJbXBsZW1lbnQgdGhlIHNvdXJjZSBmb3IgVHJlZSBzdHJ1Y3R1cmVkIGRhdGEuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmVlSW5saW5lU291cmNlIHtcblx0LyoqXG5cdCAqIFRoZSBrZXkgdG8gdXNlIGZvciBhIGRldGFpbHMgcmVzdWx0LlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9ERVRBSUxTX0FDVElPTiA9IFwiRGV0YWlsc1wiO1xuXG5cdC8qKlxuXHQgKiBUaGUga2V5IHRvIHVzZSBmb3IgYSBiYWNrIHJlc3VsdC5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIHN0YXRpYyByZWFkb25seSBfQkFDS19BQ1RJT04gPSBcIkJhY2tcIjtcblxuXHQvKipcblx0ICogVGhlIHNldHRpbmdzIGZvciB0aGUgc291cmNlLlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgX2RlZmluaXRpb246IHsgaWQ6IHN0cmluZzsgZGF0YT86IFRyZWVJbmxpbmVTZXR0aW5ncyB9IHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgb3JnYW5pemF0aW9uIGRhdGEuXG5cdCAqL1xuXHRwcml2YXRlIF9vcmdEYXRhPzogRW50aXR5T3JnYW5pemF0aW9uW107XG5cblx0LyoqXG5cdCAqIFRoZSBsYXN0IHJlc3VsdHM7XG5cdCAqL1xuXHRwcml2YXRlIF9sYXN0UmVzdWx0cz86IEhvbWVTZWFyY2hSZXN1bHRbXTtcblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZSB0aGUgbW9kdWxlLlxuXHQgKiBAcGFyYW0gZGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgbW9kdWxlIGZyb20gY29uZmlndXJhdGlvbiBpbmNsdWRlIGN1c3RvbSBvcHRpb25zLlxuXHQgKiBAcGFyYW0gZGVmaW5pdGlvbi5pZCBUaGUgaWQgZm9yIHRoZSBtb2R1bGUuXG5cdCAqIEBwYXJhbSBkZWZpbml0aW9uLmRhdGEgVGhlIGN1c3RvbSBkYXRhIGZvciB0aGUgbW9kdWxlLlxuXHQgKiBAcGFyYW0gbG9nZ2VyQ3JlYXRvciBGb3IgbG9nZ2luZyBlbnRyaWVzLlxuXHQgKiBAcmV0dXJucyBOb3RoaW5nLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGluaXRpYWxpemUoXG5cdFx0ZGVmaW5pdGlvbjogeyBpZDogc3RyaW5nOyBkYXRhPzogVHJlZUlubGluZVNldHRpbmdzIH0sXG5cdFx0bG9nZ2VyQ3JlYXRvcjogKCkgPT4gdm9pZFxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLl9kZWZpbml0aW9uID0gZGVmaW5pdGlvbjtcblxuXHRcdGNvbnN0IG9yZ1Jlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7ZGVmaW5pdGlvbi5kYXRhPy5yb290VXJsfW9yZ2FuaXphdGlvbnMtaW5saW5lLmpzb25gKTtcblx0XHR0aGlzLl9vcmdEYXRhID0gYXdhaXQgb3JnUmVzcG9uc2UuanNvbigpO1xuXHRcdHRoaXMuX2xhc3RSZXN1bHRzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGEgbGlzdCBvZiB0aGUgc3RhdGljIGhlbHAgZW50cmllcy5cblx0ICogQHJldHVybnMgVGhlIGxpc3Qgb2YgaGVscCBlbnRyaWVzLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGdldEhlbHBTZWFyY2hFbnRyaWVzKCk6IFByb21pc2U8SG9tZVNlYXJjaFJlc3VsdFtdPiB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0a2V5OiBgJHt0aGlzLl9kZWZpbml0aW9uPy5pZH0taGVscGAsXG5cdFx0XHRcdHRpdGxlOiBcIi90cmVlLWlubGluZVwiLFxuXHRcdFx0XHRsYWJlbDogXCJIZWxwXCIsXG5cdFx0XHRcdGFjdGlvbnM6IFtdLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0cHJvdmlkZXJJZDogdGhpcy5fZGVmaW5pdGlvbj8uaWRcblx0XHRcdFx0fSxcblx0XHRcdFx0dGVtcGxhdGU6IENMSVRlbXBsYXRlLkN1c3RvbSxcblx0XHRcdFx0dGVtcGxhdGVDb250ZW50OiB7XG5cdFx0XHRcdFx0bGF5b3V0OiB7XG5cdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0c3R5bGU6IHsgZGlzcGxheTogXCJmbGV4XCIsIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsIHBhZGRpbmc6IFwiMTBweFwiIH0sXG5cdFx0XHRcdFx0XHRjaGlsZHJlbjogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUtleTogXCJ0aXRsZVwiLFxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRmb250U2l6ZTogXCIxNnB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRmb250V2VpZ2h0OiBcImJvbGRcIixcblx0XHRcdFx0XHRcdFx0XHRcdG1hcmdpbkJvdHRvbTogXCIxMHB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRib3JkZXJCb3R0b206IFwiMXB4IHNvbGlkICM1MzU2NUZcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0eyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJkZXNjLTBcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBwYWRkaW5nOiBcIjZweCAwcHhcIiB9IH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5OiBcImZsZXhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRwYWRkaW5nOiBcIjEwcHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdG1hcmdpblRvcDogXCI2cHhcIixcblx0XHRcdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCIjNTM1NjVGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRib3JkZXJSYWRpdXM6IFwiNXB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRvdmVyZmxvdzogXCJhdXRvXCJcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhS2V5OiBcImxpbmUtMFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIsIGZvbnRGYW1pbHk6IFwibW9ub3NwYWNlXCIsIHdoaXRlU3BhY2U6IFwibm93cmFwXCIgfVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0dGl0bGU6IFwiL3RyZWUtaW5saW5lXCIsXG5cdFx0XHRcdFx0XHRcImRlc2MtMFwiOiBcIlN0YXJ0IHR5cGluZyB0aGUgbmFtZSBvZiBhbiBvcmdhbml6YXRpb24gdG8gZmluZCB0aGUgZGF0YS5cIixcblx0XHRcdFx0XHRcdFwibGluZS0wXCI6IFwiZG9ja1wiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSBsaXN0IG9mIHNlYXJjaCByZXN1bHRzIGJhc2VkIG9uIHRoZSBxdWVyeSBhbmQgZmlsdGVycy5cblx0ICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSB0byBzZWFyY2ggZm9yLlxuXHQgKiBAcGFyYW0gZmlsdGVycyBUaGUgZmlsdGVycyB0byBhcHBseS5cblx0ICogQHBhcmFtIGxhc3RSZXNwb25zZSBUaGUgbGFzdCBzZWFyY2ggcmVzcG9uc2UgdXNlZCBmb3IgdXBkYXRpbmcgZXhpc3RpbmcgcmVzdWx0cy5cblx0ICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIGdldCBzZWFyY2ggcmVzdWx0cy5cblx0ICogQHBhcmFtIG9wdGlvbnMuaXNTdWdnZXN0aW9uIElzIHRoZSBxdWVyeSBhIHN1Z2dlc3Rpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHJlc3VsdHMgYW5kIG5ldyBmaWx0ZXJzLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGdldFNlYXJjaFJlc3VsdHMoXG5cdFx0cXVlcnk6IHN0cmluZyxcblx0XHRmaWx0ZXJzOiBDTElGaWx0ZXJbXSxcblx0XHRsYXN0UmVzcG9uc2U6IEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlLFxuXHRcdG9wdGlvbnM6IHtcblx0XHRcdGlzU3VnZ2VzdGlvbjogYm9vbGVhbjtcblx0XHR9XG5cdCk6IFByb21pc2U8SG9tZVNlYXJjaFJlc3BvbnNlPiB7XG5cdFx0dGhpcy5fbGFzdFJlc3VsdHMgPSBbXTtcblxuXHRcdGlmIChxdWVyeS5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBxdWVyeU9yZyA9IG5ldyBSZWdFeHAocXVlcnksIFwiaVwiKTtcblx0XHRcdGNvbnN0IG1hdGNoaW5nT3JnczogRW50aXR5T3JnYW5pemF0aW9uW10gfCB1bmRlZmluZWQgPSB0aGlzLl9vcmdEYXRhPy5maWx0ZXIoXG5cdFx0XHRcdChvKSA9PiBxdWVyeU9yZy50ZXN0KG8uaWQpIHx8IHF1ZXJ5T3JnLnRlc3Qoby5uYW1lKVxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKG1hdGNoaW5nT3Jncykge1xuXHRcdFx0XHR0aGlzLl9sYXN0UmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKG1hdGNoaW5nT3Jncy5tYXAoYXN5bmMgKG8pID0+IHRoaXMuY3JlYXRlUmVzdWx0KG8sIFtdKSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRyZXN1bHRzOiB0aGlzLl9sYXN0UmVzdWx0c1xuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQW4gZW50cnkgaGFzIGJlZW4gc2VsZWN0ZWQuXG5cdCAqIEBwYXJhbSByZXN1bHQgVGhlIGRpc3BhdGNoZWQgcmVzdWx0LlxuXHQgKiBAcGFyYW0gbGFzdFJlc3BvbnNlIFRoZSBsYXN0IHJlc3BvbnNlLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBpdGVtIHdhcyBoYW5kbGVkLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGl0ZW1TZWxlY3Rpb24oXG5cdFx0cmVzdWx0OiBIb21lRGlzcGF0Y2hlZFNlYXJjaFJlc3VsdCxcblx0XHRsYXN0UmVzcG9uc2U6IEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmIChyZXN1bHQuYWN0aW9uLnRyaWdnZXIgPT09IFwidXNlci1hY3Rpb25cIiAmJiByZXN1bHQuYWN0aW9uLm5hbWUgPT09IFRyZWVJbmxpbmVTb3VyY2UuX0RFVEFJTFNfQUNUSU9OKSB7XG5cdFx0XHRjb25zdCBlbnRpdHk6IEVudGl0eUl0ZW0gPSByZXN1bHQuZGF0YS5lbnRpdHk7XG5cblx0XHRcdGxldCByZXN1bHRzOiBIb21lU2VhcmNoUmVzdWx0W10gfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoZW50aXR5Py50eXBlID09PSBcIm9yZ2FuaXphdGlvblwiKSB7XG5cdFx0XHRcdGNvbnN0IG9yZyA9IGVudGl0eSBhcyBFbnRpdHlPcmdhbml6YXRpb247XG5cdFx0XHRcdHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRvcmcuZGVwYXJ0bWVudHMubWFwKGFzeW5jIChkKSA9PiB0aGlzLmNyZWF0ZVJlc3VsdChkLCB0aGlzLl9sYXN0UmVzdWx0cykpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKGVudGl0eT8udHlwZSA9PT0gXCJkZXBhcnRtZW50XCIpIHtcblx0XHRcdFx0Y29uc3QgZGVwID0gZW50aXR5IGFzIEVudGl0eURlcGFydG1lbnQ7XG5cdFx0XHRcdHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChkZXAubWVtYmVycy5tYXAoYXN5bmMgKG0pID0+IHRoaXMuY3JlYXRlUmVzdWx0KG0sIHRoaXMuX2xhc3RSZXN1bHRzKSkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmVzdWx0cykge1xuXHRcdFx0XHRpZiAodGhpcy5fbGFzdFJlc3VsdHMpIHtcblx0XHRcdFx0XHRsYXN0UmVzcG9uc2UucmV2b2tlKC4uLnRoaXMuX2xhc3RSZXN1bHRzLm1hcCgocikgPT4gci5rZXkpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsYXN0UmVzcG9uc2UucmVzcG9uZChyZXN1bHRzKTtcblx0XHRcdFx0dGhpcy5fbGFzdFJlc3VsdHMgPSByZXN1bHRzO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0cmVzdWx0LmFjdGlvbi50cmlnZ2VyID09PSBcInVzZXItYWN0aW9uXCIgJiZcblx0XHRcdHJlc3VsdC5hY3Rpb24ubmFtZSA9PT0gVHJlZUlubGluZVNvdXJjZS5fQkFDS19BQ1RJT05cblx0XHQpIHtcblx0XHRcdGNvbnN0IHBhcmVudFJlc3VsdHM6IEhvbWVTZWFyY2hSZXN1bHRbXSA9IHJlc3VsdC5kYXRhLnBhcmVudFJlc3VsdHM7XG5cblx0XHRcdGlmIChwYXJlbnRSZXN1bHRzKSB7XG5cdFx0XHRcdGlmICh0aGlzLl9sYXN0UmVzdWx0cykge1xuXHRcdFx0XHRcdGxhc3RSZXNwb25zZS5yZXZva2UoLi4udGhpcy5fbGFzdFJlc3VsdHMubWFwKChyKSA9PiByLmtleSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxhc3RSZXNwb25zZS5yZXNwb25kKHBhcmVudFJlc3VsdHMpO1xuXHRcdFx0XHR0aGlzLl9sYXN0UmVzdWx0cyA9IHBhcmVudFJlc3VsdHM7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIGEgc2VhcmNoIHJlc3VsdC5cblx0ICogQHBhcmFtIGVudGl0eSBUaGUgZW50aXR5IGZvciB0aGUgaXRlbS5cblx0ICogQHBhcmFtIHBhcmVudFJlc3VsdHMgVGhlIHBhcmVudCByZXN1bHRzLlxuXHQgKiBAcmV0dXJucyBUaGUgc2VhcmNoIHJlc3VsdC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgY3JlYXRlUmVzdWx0KFxuXHRcdGVudGl0eTogRW50aXR5SXRlbSxcblx0XHRwYXJlbnRSZXN1bHRzPzogSG9tZVNlYXJjaFJlc3VsdFtdXG5cdCk6IFByb21pc2U8SG9tZVNlYXJjaFJlc3VsdD4ge1xuXHRcdGNvbnN0IGRhdGE6IHsgW2lkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcblx0XHRcdHRpdGxlOiBlbnRpdHkubmFtZSxcblx0XHRcdG5hdmlnYXRlQmFja0FjdGlvbjogXCJCYWNrXCJcblx0XHR9O1xuXG5cdFx0Y29uc3QgY2hpbGRyZW46IFRlbXBsYXRlRnJhZ21lbnRbXSA9IFtcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogXCJUZXh0XCIsXG5cdFx0XHRcdGRhdGFLZXk6IFwidGl0bGVcIixcblx0XHRcdFx0c3R5bGU6IHtcblx0XHRcdFx0XHRjb2xvcjogXCIjRkZGRkZGXCIsXG5cdFx0XHRcdFx0Zm9udFNpemU6IFwiMTZweFwiLFxuXHRcdFx0XHRcdGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuXHRcdFx0XHRcdG1hcmdpbkJvdHRvbTogXCIxMHB4XCIsXG5cdFx0XHRcdFx0Ym9yZGVyQm90dG9tOiBcIjFweCBzb2xpZCAjNTM1NjVGXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF07XG5cblx0XHRjb25zdCBtYWluQ29udGVudDogVGVtcGxhdGVGcmFnbWVudFtdID0gW107XG5cdFx0aWYgKGVudGl0eS50eXBlID09PSBcIm9yZ2FuaXphdGlvblwiKSB7XG5cdFx0XHRtYWluQ29udGVudC5wdXNoKHsgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwiY2hpbGRDb3VudFwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxNHB4XCIgfSB9KTtcblx0XHRcdGRhdGEuY2hpbGRDb3VudCA9IGBEZXBhcnRtZW50czogJHsoZW50aXR5IGFzIEVudGl0eU9yZ2FuaXphdGlvbikuZGVwYXJ0bWVudHMubGVuZ3RoLnRvU3RyaW5nKCl9YDtcblx0XHRcdGRhdGEubmF2aWdhdGVBY3Rpb24gPSBcIkRlcGFydG1lbnRzXCI7XG5cdFx0XHRkZWxldGUgZGF0YS5uYXZpZ2F0ZUJhY2tBY3Rpb247XG5cdFx0fSBlbHNlIGlmIChlbnRpdHkudHlwZSA9PT0gXCJkZXBhcnRtZW50XCIpIHtcblx0XHRcdG1haW5Db250ZW50LnB1c2goeyB0eXBlOiBcIlRleHRcIiwgZGF0YUtleTogXCJjaGlsZENvdW50XCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjE0cHhcIiB9IH0pO1xuXHRcdFx0ZGF0YS5jaGlsZENvdW50ID0gYE1lbWJlcnM6ICR7KGVudGl0eSBhcyBFbnRpdHlEZXBhcnRtZW50KS5tZW1iZXJzLmxlbmd0aC50b1N0cmluZygpfWA7XG5cdFx0XHRkYXRhLm5hdmlnYXRlQWN0aW9uID0gXCJNZW1iZXJzXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGEucm9sZSA9IGBSb2xlOiAkeyhlbnRpdHkgYXMgRW50aXR5TWVtYmVyKS5yb2xlfWA7XG5cdFx0XHRtYWluQ29udGVudC5wdXNoKHsgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwicm9sZVwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxNHB4XCIgfSB9KTtcblx0XHR9XG5cblx0XHRjaGlsZHJlbi5wdXNoKHtcblx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRzdHlsZTogeyBkaXNwbGF5OiBcImZsZXhcIiwgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIiwgZmxleDogMSB9LFxuXHRcdFx0Y2hpbGRyZW46IG1haW5Db250ZW50XG5cdFx0fSk7XG5cblx0XHRjb25zdCBidXR0b25zOiBUZW1wbGF0ZUZyYWdtZW50W10gPSBbXTtcblx0XHRpZiAoZGF0YS5uYXZpZ2F0ZUJhY2tBY3Rpb24pIHtcblx0XHRcdGJ1dHRvbnMucHVzaCh7XG5cdFx0XHRcdHR5cGU6IFwiQnV0dG9uXCIsXG5cdFx0XHRcdGJ1dHRvblN0eWxlOiBCdXR0b25TdHlsZS5QcmltYXJ5LFxuXHRcdFx0XHRjaGlsZHJlbjogW3sgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwibmF2aWdhdGVCYWNrQWN0aW9uXCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiB9IH1dLFxuXHRcdFx0XHRhY3Rpb246IFRyZWVJbmxpbmVTb3VyY2UuX0JBQ0tfQUNUSU9OLFxuXHRcdFx0XHRzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIgfVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKGRhdGEubmF2aWdhdGVBY3Rpb24pIHtcblx0XHRcdGJ1dHRvbnMucHVzaCh7XG5cdFx0XHRcdHR5cGU6IFwiQnV0dG9uXCIsXG5cdFx0XHRcdGJ1dHRvblN0eWxlOiBCdXR0b25TdHlsZS5QcmltYXJ5LFxuXHRcdFx0XHRjaGlsZHJlbjogW3sgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwibmF2aWdhdGVBY3Rpb25cIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiIH0gfV0sXG5cdFx0XHRcdGFjdGlvbjogVHJlZUlubGluZVNvdXJjZS5fREVUQUlMU19BQ1RJT04sXG5cdFx0XHRcdHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiB9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRjaGlsZHJlbi5wdXNoKHtcblx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRzdHlsZTogeyBkaXNwbGF5OiBcImZsZXhcIiwgZmxleERpcmVjdGlvbjogXCJyb3dcIiwganVzdGlmeUNvbnRlbnQ6IFwiZmxleC1lbmRcIiwgZ2FwOiBcIjEwcHhcIiB9LFxuXHRcdFx0Y2hpbGRyZW46IGJ1dHRvbnNcblx0XHR9KTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRrZXk6IGB0cmVlLSR7ZW50aXR5LmlkfWAsXG5cdFx0XHR0aXRsZTogZW50aXR5Lm5hbWUsXG5cdFx0XHRsYWJlbDogZW50aXR5LnR5cGUsXG5cdFx0XHRhY3Rpb25zOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBUcmVlSW5saW5lU291cmNlLl9ERVRBSUxTX0FDVElPTixcblx0XHRcdFx0XHRob3RrZXk6IFwiRW50ZXJcIlxuXHRcdFx0XHR9XG5cdFx0XHRdLFxuXHRcdFx0ZGF0YToge1xuXHRcdFx0XHRwcm92aWRlcklkOiB0aGlzLl9kZWZpbml0aW9uPy5pZCxcblx0XHRcdFx0ZW50aXR5LFxuXHRcdFx0XHRwYXJlbnRSZXN1bHRzXG5cdFx0XHR9LFxuXHRcdFx0dGVtcGxhdGU6IENMSVRlbXBsYXRlLkN1c3RvbSxcblx0XHRcdHRlbXBsYXRlQ29udGVudDoge1xuXHRcdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0XHRcdHN0eWxlOiB7IGRpc3BsYXk6IFwiZmxleFwiLCBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLCBmbGV4OiAxLCBwYWRkaW5nOiBcIjEwcHhcIiB9LFxuXHRcdFx0XHRcdGNoaWxkcmVuXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGRhdGFcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59XG4iLCJpbXBvcnQge1xuXHRDTElUZW1wbGF0ZSxcblx0dHlwZSBDTElGaWx0ZXIsXG5cdHR5cGUgSG9tZURpc3BhdGNoZWRTZWFyY2hSZXN1bHQsXG5cdHR5cGUgSG9tZVNlYXJjaExpc3RlbmVyUmVzcG9uc2UsXG5cdHR5cGUgSG9tZVNlYXJjaFJlc3BvbnNlLFxuXHR0eXBlIEhvbWVTZWFyY2hSZXN1bHQsXG5cdHR5cGUgVGVtcGxhdGVGcmFnbWVudCxcblx0QnV0dG9uU3R5bGVcbn0gZnJvbSBcIkBvcGVuZmluL3dvcmtzcGFjZVwiO1xuaW1wb3J0IHR5cGUge1xuXHRFbnRpdHlEZXBhcnRtZW50LFxuXHRFbnRpdHlJdGVtLFxuXHRFbnRpdHlNZW1iZXIsXG5cdEVudGl0eU9yZ2FuaXphdGlvbixcblx0VHJlZVF1ZXJ5U2V0dGluZ3Ncbn0gZnJvbSBcIi4vc2hhcGVzXCI7XG5cbi8qKlxuICogSW1wbGVtZW50IHRoZSBzb3VyY2UgZm9yIFRyZWUgc3RydWN0dXJlZCBkYXRhLlxuICovXG5leHBvcnQgY2xhc3MgVHJlZVF1ZXJ5U291cmNlIHtcblx0LyoqXG5cdCAqIFRoZSBrZXkgdG8gdXNlIGZvciBhIGRldGFpbHMgcmVzdWx0LlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9ERVRBSUxTX0FDVElPTiA9IFwiRGV0YWlsc1wiO1xuXG5cdC8qKlxuXHQgKiBUaGUga2V5IHRvIHVzZSBmb3IgYSBiYWNrIHJlc3VsdC5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIHN0YXRpYyByZWFkb25seSBfQkFDS19BQ1RJT04gPSBcIkJhY2tcIjtcblxuXHQvKipcblx0ICogVGhlIGhlbHBlcnMgZm9yIHRoZSBzb3VyY2UuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJpdmF0ZSBfaGVscGVyczogeyBzZXRTZWFyY2hRdWVyeTogKHF1ZXJ5OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD4gfSB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogVGhlIHNldHRpbmdzIGZvciB0aGUgc291cmNlLlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgX2RlZmluaXRpb246IHsgaWQ6IHN0cmluZzsgZGF0YT86IFRyZWVRdWVyeVNldHRpbmdzIH0gfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFRoZSBvcmdhbml6YXRpb24gZGF0YS5cblx0ICovXG5cdHByaXZhdGUgX29yZ0RhdGE/OiBFbnRpdHlPcmdhbml6YXRpb25bXTtcblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZSB0aGUgbW9kdWxlLlxuXHQgKiBAcGFyYW0gZGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgbW9kdWxlIGZyb20gY29uZmlndXJhdGlvbiBpbmNsdWRlIGN1c3RvbSBvcHRpb25zLlxuXHQgKiBAcGFyYW0gZGVmaW5pdGlvbi5pZCBUaGUgaWQgZm9yIHRoZSBtb2R1bGUuXG5cdCAqIEBwYXJhbSBkZWZpbml0aW9uLmRhdGEgVGhlIGN1c3RvbSBkYXRhIGZvciB0aGUgbW9kdWxlLlxuXHQgKiBAcGFyYW0gbG9nZ2VyQ3JlYXRvciBGb3IgbG9nZ2luZyBlbnRyaWVzLlxuXHQgKiBAcGFyYW0gaGVscGVycyBIZWxwZXIgbWV0aG9kcyBmb3IgdGhlIG1vZHVsZSB0byBpbnRlcmFjdCB3aXRoIHRoZSBhcHBsaWNhdGlvbiBjb3JlLlxuXHQgKiBAcGFyYW0gaGVscGVycy5zZXRTZWFyY2hRdWVyeSBNZXRob2QgZm9yIHJlcG9wdWxhdGluZyB0aGUgc2VhcmNoIHF1ZXJ5LlxuXHQgKiBAcmV0dXJucyBOb3RoaW5nLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGluaXRpYWxpemUoXG5cdFx0ZGVmaW5pdGlvbjogeyBpZDogc3RyaW5nOyBkYXRhPzogVHJlZVF1ZXJ5U2V0dGluZ3MgfSxcblx0XHRsb2dnZXJDcmVhdG9yOiAoKSA9PiB2b2lkLFxuXHRcdGhlbHBlcnM6IHtcblx0XHRcdHNldFNlYXJjaFF1ZXJ5OiAocXVlcnk6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcblx0XHR9XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRoaXMuX2RlZmluaXRpb24gPSBkZWZpbml0aW9uO1xuXHRcdHRoaXMuX2hlbHBlcnMgPSBoZWxwZXJzO1xuXG5cdFx0Y29uc3Qgb3JnUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtkZWZpbml0aW9uLmRhdGE/LnJvb3RVcmx9b3JnYW5pemF0aW9ucy1xdWVyeS5qc29uYCk7XG5cdFx0dGhpcy5fb3JnRGF0YSA9IGF3YWl0IG9yZ1Jlc3BvbnNlLmpzb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSBsaXN0IG9mIHRoZSBzdGF0aWMgaGVscCBlbnRyaWVzLlxuXHQgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBoZWxwIGVudHJpZXMuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0SGVscFNlYXJjaEVudHJpZXMoKTogUHJvbWlzZTxIb21lU2VhcmNoUmVzdWx0W10+IHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRrZXk6IGAke3RoaXMuX2RlZmluaXRpb24/LmlkfS1oZWxwYCxcblx0XHRcdFx0dGl0bGU6IFwiL3RyZWUtcXVlcnlcIixcblx0XHRcdFx0bGFiZWw6IFwiSGVscFwiLFxuXHRcdFx0XHRhY3Rpb25zOiBbXSxcblx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdHByb3ZpZGVySWQ6IHRoaXMuX2RlZmluaXRpb24/LmlkXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbXBsYXRlOiBDTElUZW1wbGF0ZS5DdXN0b20sXG5cdFx0XHRcdHRlbXBsYXRlQ29udGVudDoge1xuXHRcdFx0XHRcdGxheW91dDoge1xuXHRcdFx0XHRcdFx0dHlwZTogXCJDb250YWluZXJcIixcblx0XHRcdFx0XHRcdHN0eWxlOiB7IGRpc3BsYXk6IFwiZmxleFwiLCBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLCBwYWRkaW5nOiBcIjEwcHhcIiB9LFxuXHRcdFx0XHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRcdFx0XHRcdGRhdGFLZXk6IFwidGl0bGVcIixcblx0XHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29sb3I6IFwiI0ZGRkZGRlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9udFNpemU6IFwiMTZweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9udFdlaWdodDogXCJib2xkXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXJnaW5Cb3R0b206IFwiMTBweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Ym9yZGVyQm90dG9tOiBcIjFweCBzb2xpZCAjNTM1NjVGXCJcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHsgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwiZGVzYy0wXCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjEycHhcIiwgcGFkZGluZzogXCI2cHggMHB4XCIgfSB9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJDb250YWluZXJcIixcblx0XHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGlzcGxheTogXCJmbGV4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0cGFkZGluZzogXCIxMHB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXJnaW5Ub3A6IFwiNnB4XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IFwiIzUzNTY1RlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sb3I6IFwiI0ZGRkZGRlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Ym9yZGVyUmFkaXVzOiBcIjVweFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0b3ZlcmZsb3c6IFwiYXV0b1wiXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbjogW1xuXHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIlRleHRcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YUtleTogXCJsaW5lLTBcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiLCBmb250RmFtaWx5OiBcIm1vbm9zcGFjZVwiLCB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwiIH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRcdHRpdGxlOiBcIi90cmVlLXF1ZXJ5XCIsXG5cdFx0XHRcdFx0XHRcImRlc2MtMFwiOiBcIlN0YXJ0IHR5cGluZyB0aGUgbmFtZSBvZiBhbiBvcmdhbml6YXRpb24gdG8gZmluZCB0aGUgZGF0YS5cIixcblx0XHRcdFx0XHRcdFwibGluZS0wXCI6IFwiYWNtZVwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSBsaXN0IG9mIHNlYXJjaCByZXN1bHRzIGJhc2VkIG9uIHRoZSBxdWVyeSBhbmQgZmlsdGVycy5cblx0ICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSB0byBzZWFyY2ggZm9yLlxuXHQgKiBAcGFyYW0gZmlsdGVycyBUaGUgZmlsdGVycyB0byBhcHBseS5cblx0ICogQHBhcmFtIGxhc3RSZXNwb25zZSBUaGUgbGFzdCBzZWFyY2ggcmVzcG9uc2UgdXNlZCBmb3IgdXBkYXRpbmcgZXhpc3RpbmcgcmVzdWx0cy5cblx0ICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIGdldCBzZWFyY2ggcmVzdWx0cy5cblx0ICogQHBhcmFtIG9wdGlvbnMuaXNTdWdnZXN0aW9uIElzIHRoZSBxdWVyeSBhIHN1Z2dlc3Rpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHJlc3VsdHMgYW5kIG5ldyBmaWx0ZXJzLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGdldFNlYXJjaFJlc3VsdHMoXG5cdFx0cXVlcnk6IHN0cmluZyxcblx0XHRmaWx0ZXJzOiBDTElGaWx0ZXJbXSxcblx0XHRsYXN0UmVzcG9uc2U6IEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlLFxuXHRcdG9wdGlvbnM6IHtcblx0XHRcdGlzU3VnZ2VzdGlvbjogYm9vbGVhbjtcblx0XHR9XG5cdCk6IFByb21pc2U8SG9tZVNlYXJjaFJlc3BvbnNlPiB7XG5cdFx0bGV0IHJlc3VsdHM6IEhvbWVTZWFyY2hSZXN1bHRbXSA9IFtdO1xuXG5cdFx0aWYgKHF1ZXJ5Lmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IHBhcnRzID0gcXVlcnkuc3BsaXQoXCIvXCIpO1xuXG5cdFx0XHRjb25zdCBxdWVyeU9yZyA9IG5ldyBSZWdFeHAocGFydHNbMF0sIFwiaVwiKTtcblx0XHRcdGNvbnN0IG1hdGNoaW5nT3JnczogRW50aXR5T3JnYW5pemF0aW9uW10gfCB1bmRlZmluZWQgPSB0aGlzLl9vcmdEYXRhPy5maWx0ZXIoXG5cdFx0XHRcdChvKSA9PiBxdWVyeU9yZy50ZXN0KG8uaWQpIHx8IHF1ZXJ5T3JnLnRlc3Qoby5uYW1lKVxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKG1hdGNoaW5nT3Jncykge1xuXHRcdFx0XHRpZiAocGFydHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0cmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKG1hdGNoaW5nT3Jncy5tYXAoYXN5bmMgKG8pID0+IHRoaXMuY3JlYXRlUmVzdWx0KG8sIFtvLm5hbWUsIFwiXCJdLCBcIlwiKSkpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHBhcnRzLmxlbmd0aCA+PSAyKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IHF1ZXJ5RGVwID0gbmV3IFJlZ0V4cChwYXJ0c1sxXSwgXCJpXCIpO1xuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBvcmcgb2YgbWF0Y2hpbmdPcmdzKSB7XG5cdFx0XHRcdFx0XHRcdGxldCBkZXBzOiBFbnRpdHlEZXBhcnRtZW50W10gPSBvcmcuZGVwYXJ0bWVudHM7XG5cdFx0XHRcdFx0XHRcdGlmIChwYXJ0c1sxXS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGVwcyA9IGRlcHMuZmlsdGVyKChkKSA9PiBxdWVyeURlcC50ZXN0KGQuaWQpIHx8IHF1ZXJ5RGVwLnRlc3QoZC5uYW1lKSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAocGFydHMubGVuZ3RoID09PSAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KFxuXHRcdFx0XHRcdFx0XHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlcHMubWFwKGFzeW5jIChkKSA9PiB0aGlzLmNyZWF0ZVJlc3VsdChkLCBbb3JnLm5hbWUsIGQubmFtZSwgXCJcIl0sIG9yZy5uYW1lKSlcblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHF1ZXJ5TWVtID0gbmV3IFJlZ0V4cChwYXJ0c1syXSwgXCJpXCIpO1xuXG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBkZXAgb2YgZGVwcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IG1lbXM6IEVudGl0eU1lbWJlcltdID0gZGVwLm1lbWJlcnM7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocGFydHNbMl0ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRtZW1zID0gbWVtcy5maWx0ZXIoKG0pID0+IHF1ZXJ5TWVtLnRlc3QobS5pZCkgfHwgcXVlcnlNZW0udGVzdChtLm5hbWUpKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZW1zLm1hcChhc3luYyAobSkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuY3JlYXRlUmVzdWx0KG0sIFtvcmcubmFtZSwgZGVwLm5hbWUsIG0ubmFtZV0sIGAke29yZy5uYW1lfS9gKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0cmVzdWx0c1xuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQW4gZW50cnkgaGFzIGJlZW4gc2VsZWN0ZWQuXG5cdCAqIEBwYXJhbSByZXN1bHQgVGhlIGRpc3BhdGNoZWQgcmVzdWx0LlxuXHQgKiBAcGFyYW0gbGFzdFJlc3BvbnNlIFRoZSBsYXN0IHJlc3BvbnNlLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBpdGVtIHdhcyBoYW5kbGVkLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGl0ZW1TZWxlY3Rpb24oXG5cdFx0cmVzdWx0OiBIb21lRGlzcGF0Y2hlZFNlYXJjaFJlc3VsdCxcblx0XHRsYXN0UmVzcG9uc2U6IEhvbWVTZWFyY2hMaXN0ZW5lclJlc3BvbnNlXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmIChcblx0XHRcdHJlc3VsdC5hY3Rpb24udHJpZ2dlciA9PT0gXCJ1c2VyLWFjdGlvblwiICYmXG5cdFx0XHRyZXN1bHQuYWN0aW9uLm5hbWUgPT09IFRyZWVRdWVyeVNvdXJjZS5fREVUQUlMU19BQ1RJT04gJiZcblx0XHRcdHRoaXMuX2hlbHBlcnM/LnNldFNlYXJjaFF1ZXJ5XG5cdFx0KSB7XG5cdFx0XHRjb25zdCBwYXRoOiBzdHJpbmdbXSA9IHJlc3VsdC5kYXRhLnBhdGg7XG5cblx0XHRcdGF3YWl0IHRoaXMuX2hlbHBlcnMuc2V0U2VhcmNoUXVlcnkocGF0aC5qb2luKFwiL1wiKSk7XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRyZXN1bHQuYWN0aW9uLnRyaWdnZXIgPT09IFwidXNlci1hY3Rpb25cIiAmJlxuXHRcdFx0cmVzdWx0LmFjdGlvbi5uYW1lID09PSBUcmVlUXVlcnlTb3VyY2UuX0JBQ0tfQUNUSU9OICYmXG5cdFx0XHR0aGlzLl9oZWxwZXJzPy5zZXRTZWFyY2hRdWVyeVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgcXVlcnk6IHN0cmluZyA9IHJlc3VsdC5kYXRhLnF1ZXJ5O1xuXG5cdFx0XHRhd2FpdCB0aGlzLl9oZWxwZXJzLnNldFNlYXJjaFF1ZXJ5KHF1ZXJ5KTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYSBzZWFyY2ggcmVzdWx0LlxuXHQgKiBAcGFyYW0gZW50aXR5IFRoZSBlbnRpdHkgZm9yIHRoZSBpdGVtLlxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBpdGVtLlxuXHQgKiBAcGFyYW0gcXVlcnkgVGhlIG9yaWdpbmFsIHF1ZXJ5LlxuXHQgKiBAcmV0dXJucyBUaGUgc2VhcmNoIHJlc3VsdC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgY3JlYXRlUmVzdWx0KGVudGl0eTogRW50aXR5SXRlbSwgcGF0aDogc3RyaW5nW10sIHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPEhvbWVTZWFyY2hSZXN1bHQ+IHtcblx0XHRjb25zdCBkYXRhOiB7IFtpZDogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG5cdFx0XHR0aXRsZTogZW50aXR5Lm5hbWUsXG5cdFx0XHRuYXZpZ2F0ZUJhY2tBY3Rpb246IFwiQmFja1wiXG5cdFx0fTtcblxuXHRcdGNvbnN0IGNoaWxkcmVuOiBUZW1wbGF0ZUZyYWdtZW50W10gPSBbXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IFwiVGV4dFwiLFxuXHRcdFx0XHRkYXRhS2V5OiBcInRpdGxlXCIsXG5cdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0Y29sb3I6IFwiI0ZGRkZGRlwiLFxuXHRcdFx0XHRcdGZvbnRTaXplOiBcIjE2cHhcIixcblx0XHRcdFx0XHRmb250V2VpZ2h0OiBcImJvbGRcIixcblx0XHRcdFx0XHRtYXJnaW5Cb3R0b206IFwiMTBweFwiLFxuXHRcdFx0XHRcdGJvcmRlckJvdHRvbTogXCIxcHggc29saWQgIzUzNTY1RlwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdO1xuXG5cdFx0Y29uc3QgbWFpbkNvbnRlbnQ6IFRlbXBsYXRlRnJhZ21lbnRbXSA9IFtdO1xuXHRcdGlmIChlbnRpdHkudHlwZSA9PT0gXCJvcmdhbml6YXRpb25cIikge1xuXHRcdFx0bWFpbkNvbnRlbnQucHVzaCh7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcImNoaWxkQ291bnRcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTRweFwiIH0gfSk7XG5cdFx0XHRkYXRhLmNoaWxkQ291bnQgPSBgRGVwYXJ0bWVudHM6ICR7KGVudGl0eSBhcyBFbnRpdHlPcmdhbml6YXRpb24pLmRlcGFydG1lbnRzLmxlbmd0aC50b1N0cmluZygpfWA7XG5cdFx0XHRkYXRhLm5hdmlnYXRlQWN0aW9uID0gXCJEZXBhcnRtZW50c1wiO1xuXHRcdFx0ZGVsZXRlIGRhdGEubmF2aWdhdGVCYWNrQWN0aW9uO1xuXHRcdH0gZWxzZSBpZiAoZW50aXR5LnR5cGUgPT09IFwiZGVwYXJ0bWVudFwiKSB7XG5cdFx0XHRtYWluQ29udGVudC5wdXNoKHsgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwiY2hpbGRDb3VudFwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxNHB4XCIgfSB9KTtcblx0XHRcdGRhdGEuY2hpbGRDb3VudCA9IGBNZW1iZXJzOiAkeyhlbnRpdHkgYXMgRW50aXR5RGVwYXJ0bWVudCkubWVtYmVycy5sZW5ndGgudG9TdHJpbmcoKX1gO1xuXHRcdFx0ZGF0YS5uYXZpZ2F0ZUFjdGlvbiA9IFwiTWVtYmVyc1wiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhLnJvbGUgPSBgUm9sZTogJHsoZW50aXR5IGFzIEVudGl0eU1lbWJlcikucm9sZX1gO1xuXHRcdFx0bWFpbkNvbnRlbnQucHVzaCh7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcInJvbGVcIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTRweFwiIH0gfSk7XG5cdFx0fVxuXG5cdFx0Y2hpbGRyZW4ucHVzaCh7XG5cdFx0XHR0eXBlOiBcIkNvbnRhaW5lclwiLFxuXHRcdFx0c3R5bGU6IHsgZGlzcGxheTogXCJmbGV4XCIsIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsIGZsZXg6IDEgfSxcblx0XHRcdGNoaWxkcmVuOiBtYWluQ29udGVudFxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgYnV0dG9uczogVGVtcGxhdGVGcmFnbWVudFtdID0gW107XG5cdFx0aWYgKGRhdGEubmF2aWdhdGVCYWNrQWN0aW9uKSB7XG5cdFx0XHRidXR0b25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBcIkJ1dHRvblwiLFxuXHRcdFx0XHRidXR0b25TdHlsZTogQnV0dG9uU3R5bGUuUHJpbWFyeSxcblx0XHRcdFx0Y2hpbGRyZW46IFt7IHR5cGU6IFwiVGV4dFwiLCBkYXRhS2V5OiBcIm5hdmlnYXRlQmFja0FjdGlvblwiLCBzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIgfSB9XSxcblx0XHRcdFx0YWN0aW9uOiBUcmVlUXVlcnlTb3VyY2UuX0JBQ0tfQUNUSU9OLFxuXHRcdFx0XHRzdHlsZTogeyBmb250U2l6ZTogXCIxMnB4XCIgfVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKGRhdGEubmF2aWdhdGVBY3Rpb24pIHtcblx0XHRcdGJ1dHRvbnMucHVzaCh7XG5cdFx0XHRcdHR5cGU6IFwiQnV0dG9uXCIsXG5cdFx0XHRcdGJ1dHRvblN0eWxlOiBCdXR0b25TdHlsZS5QcmltYXJ5LFxuXHRcdFx0XHRjaGlsZHJlbjogW3sgdHlwZTogXCJUZXh0XCIsIGRhdGFLZXk6IFwibmF2aWdhdGVBY3Rpb25cIiwgc3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiIH0gfV0sXG5cdFx0XHRcdGFjdGlvbjogVHJlZVF1ZXJ5U291cmNlLl9ERVRBSUxTX0FDVElPTixcblx0XHRcdFx0c3R5bGU6IHsgZm9udFNpemU6IFwiMTJweFwiIH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGNoaWxkcmVuLnB1c2goe1xuXHRcdFx0dHlwZTogXCJDb250YWluZXJcIixcblx0XHRcdHN0eWxlOiB7IGRpc3BsYXk6IFwiZmxleFwiLCBmbGV4RGlyZWN0aW9uOiBcInJvd1wiLCBqdXN0aWZ5Q29udGVudDogXCJmbGV4LWVuZFwiLCBnYXA6IFwiMTBweFwiIH0sXG5cdFx0XHRjaGlsZHJlbjogYnV0dG9uc1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGtleTogYHRyZWUtJHtlbnRpdHkuaWR9YCxcblx0XHRcdHRpdGxlOiBlbnRpdHkubmFtZSxcblx0XHRcdGxhYmVsOiBlbnRpdHkudHlwZSxcblx0XHRcdGFjdGlvbnM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IFRyZWVRdWVyeVNvdXJjZS5fREVUQUlMU19BQ1RJT04sXG5cdFx0XHRcdFx0aG90a2V5OiBcIkVudGVyXCJcblx0XHRcdFx0fVxuXHRcdFx0XSxcblx0XHRcdGRhdGE6IHtcblx0XHRcdFx0cHJvdmlkZXJJZDogdGhpcy5fZGVmaW5pdGlvbj8uaWQsXG5cdFx0XHRcdGVudGl0eSxcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0cXVlcnlcblx0XHRcdH0sXG5cdFx0XHR0ZW1wbGF0ZTogQ0xJVGVtcGxhdGUuQ3VzdG9tLFxuXHRcdFx0dGVtcGxhdGVDb250ZW50OiB7XG5cdFx0XHRcdGxheW91dDoge1xuXHRcdFx0XHRcdHR5cGU6IFwiQ29udGFpbmVyXCIsXG5cdFx0XHRcdFx0c3R5bGU6IHsgZGlzcGxheTogXCJmbGV4XCIsIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsIGZsZXg6IFwiMVwiLCBwYWRkaW5nOiBcIjEwcHhcIiB9LFxuXHRcdFx0XHRcdGNoaWxkcmVuXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGRhdGFcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59XG4iLCIvKiFcbiAqIEBrdXJrbGUvY29sb3IgdjAuMy40XG4gKiBodHRwczovL2dpdGh1Yi5jb20va3Vya2xlL2NvbG9yI3JlYWRtZVxuICogKGMpIDIwMjQgSnVra2EgS3Vya2VsYVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlXG4gKi9cbmZ1bmN0aW9uIHJvdW5kKHYpIHtcbiAgcmV0dXJuIHYgKyAwLjUgfCAwO1xufVxuY29uc3QgbGltID0gKHYsIGwsIGgpID0+IE1hdGgubWF4KE1hdGgubWluKHYsIGgpLCBsKTtcbmZ1bmN0aW9uIHAyYih2KSB7XG4gIHJldHVybiBsaW0ocm91bmQodiAqIDIuNTUpLCAwLCAyNTUpO1xufVxuZnVuY3Rpb24gYjJwKHYpIHtcbiAgcmV0dXJuIGxpbShyb3VuZCh2IC8gMi41NSksIDAsIDEwMCk7XG59XG5mdW5jdGlvbiBuMmIodikge1xuICByZXR1cm4gbGltKHJvdW5kKHYgKiAyNTUpLCAwLCAyNTUpO1xufVxuZnVuY3Rpb24gYjJuKHYpIHtcbiAgcmV0dXJuIGxpbShyb3VuZCh2IC8gMi41NSkgLyAxMDAsIDAsIDEpO1xufVxuZnVuY3Rpb24gbjJwKHYpIHtcbiAgcmV0dXJuIGxpbShyb3VuZCh2ICogMTAwKSwgMCwgMTAwKTtcbn1cblxuY29uc3QgbWFwJDEgPSB7MDogMCwgMTogMSwgMjogMiwgMzogMywgNDogNCwgNTogNSwgNjogNiwgNzogNywgODogOCwgOTogOSwgQTogMTAsIEI6IDExLCBDOiAxMiwgRDogMTMsIEU6IDE0LCBGOiAxNSwgYTogMTAsIGI6IDExLCBjOiAxMiwgZDogMTMsIGU6IDE0LCBmOiAxNX07XG5jb25zdCBoZXggPSBbLi4uJzAxMjM0NTY3ODlBQkNERUYnXTtcbmNvbnN0IGgxID0gYiA9PiBoZXhbYiAmIDB4Rl07XG5jb25zdCBoMiA9IGIgPT4gaGV4WyhiICYgMHhGMCkgPj4gNF0gKyBoZXhbYiAmIDB4Rl07XG5jb25zdCBlcSA9IGIgPT4gKChiICYgMHhGMCkgPj4gNCkgPT09IChiICYgMHhGKTtcbmNvbnN0IGlzU2hvcnQgPSB2ID0+IGVxKHYucikgJiYgZXEodi5nKSAmJiBlcSh2LmIpICYmIGVxKHYuYSk7XG5mdW5jdGlvbiBoZXhQYXJzZShzdHIpIHtcbiAgdmFyIGxlbiA9IHN0ci5sZW5ndGg7XG4gIHZhciByZXQ7XG4gIGlmIChzdHJbMF0gPT09ICcjJykge1xuICAgIGlmIChsZW4gPT09IDQgfHwgbGVuID09PSA1KSB7XG4gICAgICByZXQgPSB7XG4gICAgICAgIHI6IDI1NSAmIG1hcCQxW3N0clsxXV0gKiAxNyxcbiAgICAgICAgZzogMjU1ICYgbWFwJDFbc3RyWzJdXSAqIDE3LFxuICAgICAgICBiOiAyNTUgJiBtYXAkMVtzdHJbM11dICogMTcsXG4gICAgICAgIGE6IGxlbiA9PT0gNSA/IG1hcCQxW3N0cls0XV0gKiAxNyA6IDI1NVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGxlbiA9PT0gNyB8fCBsZW4gPT09IDkpIHtcbiAgICAgIHJldCA9IHtcbiAgICAgICAgcjogbWFwJDFbc3RyWzFdXSA8PCA0IHwgbWFwJDFbc3RyWzJdXSxcbiAgICAgICAgZzogbWFwJDFbc3RyWzNdXSA8PCA0IHwgbWFwJDFbc3RyWzRdXSxcbiAgICAgICAgYjogbWFwJDFbc3RyWzVdXSA8PCA0IHwgbWFwJDFbc3RyWzZdXSxcbiAgICAgICAgYTogbGVuID09PSA5ID8gKG1hcCQxW3N0cls3XV0gPDwgNCB8IG1hcCQxW3N0cls4XV0pIDogMjU1XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuY29uc3QgYWxwaGEgPSAoYSwgZikgPT4gYSA8IDI1NSA/IGYoYSkgOiAnJztcbmZ1bmN0aW9uIGhleFN0cmluZyh2KSB7XG4gIHZhciBmID0gaXNTaG9ydCh2KSA/IGgxIDogaDI7XG4gIHJldHVybiB2XG4gICAgPyAnIycgKyBmKHYucikgKyBmKHYuZykgKyBmKHYuYikgKyBhbHBoYSh2LmEsIGYpXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IEhVRV9SRSA9IC9eKGhzbGE/fGh3Ynxoc3YpXFwoXFxzKihbLSsuZVxcZF0rKSg/OmRlZyk/W1xccyxdKyhbLSsuZVxcZF0rKSVbXFxzLF0rKFstKy5lXFxkXSspJSg/OltcXHMsXSsoWy0rLmVcXGRdKykoJSk/KT9cXHMqXFwpJC87XG5mdW5jdGlvbiBoc2wycmdibihoLCBzLCBsKSB7XG4gIGNvbnN0IGEgPSBzICogTWF0aC5taW4obCwgMSAtIGwpO1xuICBjb25zdCBmID0gKG4sIGsgPSAobiArIGggLyAzMCkgJSAxMikgPT4gbCAtIGEgKiBNYXRoLm1heChNYXRoLm1pbihrIC0gMywgOSAtIGssIDEpLCAtMSk7XG4gIHJldHVybiBbZigwKSwgZig4KSwgZig0KV07XG59XG5mdW5jdGlvbiBoc3YycmdibihoLCBzLCB2KSB7XG4gIGNvbnN0IGYgPSAobiwgayA9IChuICsgaCAvIDYwKSAlIDYpID0+IHYgLSB2ICogcyAqIE1hdGgubWF4KE1hdGgubWluKGssIDQgLSBrLCAxKSwgMCk7XG4gIHJldHVybiBbZig1KSwgZigzKSwgZigxKV07XG59XG5mdW5jdGlvbiBod2IycmdibihoLCB3LCBiKSB7XG4gIGNvbnN0IHJnYiA9IGhzbDJyZ2JuKGgsIDEsIDAuNSk7XG4gIGxldCBpO1xuICBpZiAodyArIGIgPiAxKSB7XG4gICAgaSA9IDEgLyAodyArIGIpO1xuICAgIHcgKj0gaTtcbiAgICBiICo9IGk7XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xuICAgIHJnYltpXSAqPSAxIC0gdyAtIGI7XG4gICAgcmdiW2ldICs9IHc7XG4gIH1cbiAgcmV0dXJuIHJnYjtcbn1cbmZ1bmN0aW9uIGh1ZVZhbHVlKHIsIGcsIGIsIGQsIG1heCkge1xuICBpZiAociA9PT0gbWF4KSB7XG4gICAgcmV0dXJuICgoZyAtIGIpIC8gZCkgKyAoZyA8IGIgPyA2IDogMCk7XG4gIH1cbiAgaWYgKGcgPT09IG1heCkge1xuICAgIHJldHVybiAoYiAtIHIpIC8gZCArIDI7XG4gIH1cbiAgcmV0dXJuIChyIC0gZykgLyBkICsgNDtcbn1cbmZ1bmN0aW9uIHJnYjJoc2wodikge1xuICBjb25zdCByYW5nZSA9IDI1NTtcbiAgY29uc3QgciA9IHYuciAvIHJhbmdlO1xuICBjb25zdCBnID0gdi5nIC8gcmFuZ2U7XG4gIGNvbnN0IGIgPSB2LmIgLyByYW5nZTtcbiAgY29uc3QgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG4gIGNvbnN0IG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuICBjb25zdCBsID0gKG1heCArIG1pbikgLyAyO1xuICBsZXQgaCwgcywgZDtcbiAgaWYgKG1heCAhPT0gbWluKSB7XG4gICAgZCA9IG1heCAtIG1pbjtcbiAgICBzID0gbCA+IDAuNSA/IGQgLyAoMiAtIG1heCAtIG1pbikgOiBkIC8gKG1heCArIG1pbik7XG4gICAgaCA9IGh1ZVZhbHVlKHIsIGcsIGIsIGQsIG1heCk7XG4gICAgaCA9IGggKiA2MCArIDAuNTtcbiAgfVxuICByZXR1cm4gW2ggfCAwLCBzIHx8IDAsIGxdO1xufVxuZnVuY3Rpb24gY2FsbG4oZiwgYSwgYiwgYykge1xuICByZXR1cm4gKFxuICAgIEFycmF5LmlzQXJyYXkoYSlcbiAgICAgID8gZihhWzBdLCBhWzFdLCBhWzJdKVxuICAgICAgOiBmKGEsIGIsIGMpXG4gICkubWFwKG4yYik7XG59XG5mdW5jdGlvbiBoc2wycmdiKGgsIHMsIGwpIHtcbiAgcmV0dXJuIGNhbGxuKGhzbDJyZ2JuLCBoLCBzLCBsKTtcbn1cbmZ1bmN0aW9uIGh3YjJyZ2IoaCwgdywgYikge1xuICByZXR1cm4gY2FsbG4oaHdiMnJnYm4sIGgsIHcsIGIpO1xufVxuZnVuY3Rpb24gaHN2MnJnYihoLCBzLCB2KSB7XG4gIHJldHVybiBjYWxsbihoc3YycmdibiwgaCwgcywgdik7XG59XG5mdW5jdGlvbiBodWUoaCkge1xuICByZXR1cm4gKGggJSAzNjAgKyAzNjApICUgMzYwO1xufVxuZnVuY3Rpb24gaHVlUGFyc2Uoc3RyKSB7XG4gIGNvbnN0IG0gPSBIVUVfUkUuZXhlYyhzdHIpO1xuICBsZXQgYSA9IDI1NTtcbiAgbGV0IHY7XG4gIGlmICghbSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobVs1XSAhPT0gdikge1xuICAgIGEgPSBtWzZdID8gcDJiKCttWzVdKSA6IG4yYigrbVs1XSk7XG4gIH1cbiAgY29uc3QgaCA9IGh1ZSgrbVsyXSk7XG4gIGNvbnN0IHAxID0gK21bM10gLyAxMDA7XG4gIGNvbnN0IHAyID0gK21bNF0gLyAxMDA7XG4gIGlmIChtWzFdID09PSAnaHdiJykge1xuICAgIHYgPSBod2IycmdiKGgsIHAxLCBwMik7XG4gIH0gZWxzZSBpZiAobVsxXSA9PT0gJ2hzdicpIHtcbiAgICB2ID0gaHN2MnJnYihoLCBwMSwgcDIpO1xuICB9IGVsc2Uge1xuICAgIHYgPSBoc2wycmdiKGgsIHAxLCBwMik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICByOiB2WzBdLFxuICAgIGc6IHZbMV0sXG4gICAgYjogdlsyXSxcbiAgICBhOiBhXG4gIH07XG59XG5mdW5jdGlvbiByb3RhdGUodiwgZGVnKSB7XG4gIHZhciBoID0gcmdiMmhzbCh2KTtcbiAgaFswXSA9IGh1ZShoWzBdICsgZGVnKTtcbiAgaCA9IGhzbDJyZ2IoaCk7XG4gIHYuciA9IGhbMF07XG4gIHYuZyA9IGhbMV07XG4gIHYuYiA9IGhbMl07XG59XG5mdW5jdGlvbiBoc2xTdHJpbmcodikge1xuICBpZiAoIXYpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgYSA9IHJnYjJoc2wodik7XG4gIGNvbnN0IGggPSBhWzBdO1xuICBjb25zdCBzID0gbjJwKGFbMV0pO1xuICBjb25zdCBsID0gbjJwKGFbMl0pO1xuICByZXR1cm4gdi5hIDwgMjU1XG4gICAgPyBgaHNsYSgke2h9LCAke3N9JSwgJHtsfSUsICR7YjJuKHYuYSl9KWBcbiAgICA6IGBoc2woJHtofSwgJHtzfSUsICR7bH0lKWA7XG59XG5cbmNvbnN0IG1hcCA9IHtcblx0eDogJ2RhcmsnLFxuXHRaOiAnbGlnaHQnLFxuXHRZOiAncmUnLFxuXHRYOiAnYmx1Jyxcblx0VzogJ2dyJyxcblx0VjogJ21lZGl1bScsXG5cdFU6ICdzbGF0ZScsXG5cdEE6ICdlZScsXG5cdFQ6ICdvbCcsXG5cdFM6ICdvcicsXG5cdEI6ICdyYScsXG5cdEM6ICdsYXRlZycsXG5cdEQ6ICdpZ2h0cycsXG5cdFI6ICdpbicsXG5cdFE6ICd0dXJxdW9pcycsXG5cdEU6ICdoaScsXG5cdFA6ICdybycsXG5cdE86ICdhbCcsXG5cdE46ICdsZScsXG5cdE06ICdkZScsXG5cdEw6ICd5ZWxsbycsXG5cdEY6ICdlbicsXG5cdEs6ICdjaCcsXG5cdEc6ICdhcmtzJyxcblx0SDogJ2VhJyxcblx0STogJ2lnaHRnJyxcblx0SjogJ3doJ1xufTtcbmNvbnN0IG5hbWVzJDEgPSB7XG5cdE9pY2VYZTogJ2YwZjhmZicsXG5cdGFudGlxdWV3RXRlOiAnZmFlYmQ3Jyxcblx0YXF1YTogJ2ZmZmYnLFxuXHRhcXVhbWFyUmU6ICc3ZmZmZDQnLFxuXHRhenVZOiAnZjBmZmZmJyxcblx0YmVpZ2U6ICdmNWY1ZGMnLFxuXHRiaXNxdWU6ICdmZmU0YzQnLFxuXHRibGFjazogJzAnLFxuXHRibGFuS2VkT21vbmQ6ICdmZmViY2QnLFxuXHRYZTogJ2ZmJyxcblx0WGV2aVRldDogJzhhMmJlMicsXG5cdGJQd246ICdhNTJhMmEnLFxuXHRidXJseXdvb2Q6ICdkZWI4ODcnLFxuXHRjYU10WGU6ICc1ZjllYTAnLFxuXHRLYXJ0WXVzZTogJzdmZmYwMCcsXG5cdEtvY1RhdGU6ICdkMjY5MWUnLFxuXHRjU086ICdmZjdmNTAnLFxuXHRjU25mbG93ZXJYZTogJzY0OTVlZCcsXG5cdGNTbnNpbGs6ICdmZmY4ZGMnLFxuXHRjcmltc29uOiAnZGMxNDNjJyxcblx0Y3lhbjogJ2ZmZmYnLFxuXHR4WGU6ICc4YicsXG5cdHhjeWFuOiAnOGI4YicsXG5cdHhnVE1uUGQ6ICdiODg2MGInLFxuXHR4V2F5OiAnYTlhOWE5Jyxcblx0eGdZRjogJzY0MDAnLFxuXHR4Z1l5OiAnYTlhOWE5Jyxcblx0eGtoYWtpOiAnYmRiNzZiJyxcblx0eG1hZ0Z0YTogJzhiMDA4YicsXG5cdHhUaXZlZ1lGOiAnNTU2YjJmJyxcblx0eFNhbmdlOiAnZmY4YzAwJyxcblx0eFNjRWQ6ICc5OTMyY2MnLFxuXHR4WWQ6ICc4YjAwMDAnLFxuXHR4c09tb246ICdlOTk2N2EnLFxuXHR4c0hnWUY6ICc4ZmJjOGYnLFxuXHR4VVhlOiAnNDgzZDhiJyxcblx0eFVXYXk6ICcyZjRmNGYnLFxuXHR4VWdZeTogJzJmNGY0ZicsXG5cdHhRZTogJ2NlZDEnLFxuXHR4dmlUZXQ6ICc5NDAwZDMnLFxuXHRkQXBwUms6ICdmZjE0OTMnLFxuXHRkQXBza3lYZTogJ2JmZmYnLFxuXHRkaW1XYXk6ICc2OTY5NjknLFxuXHRkaW1nWXk6ICc2OTY5NjknLFxuXHRkb2RnZXJYZTogJzFlOTBmZicsXG5cdGZpWWJyaWNrOiAnYjIyMjIyJyxcblx0ZmxTT3dFdGU6ICdmZmZhZjAnLFxuXHRmb1lzdFdBbjogJzIyOGIyMicsXG5cdGZ1S3NpYTogJ2ZmMDBmZicsXG5cdGdhUnNiU286ICdkY2RjZGMnLFxuXHRnaG9zdHdFdGU6ICdmOGY4ZmYnLFxuXHRnVGQ6ICdmZmQ3MDAnLFxuXHRnVE1uUGQ6ICdkYWE1MjAnLFxuXHRXYXk6ICc4MDgwODAnLFxuXHRnWUY6ICc4MDAwJyxcblx0Z1lGTHc6ICdhZGZmMmYnLFxuXHRnWXk6ICc4MDgwODAnLFxuXHRob25leU13OiAnZjBmZmYwJyxcblx0aG90cFJrOiAnZmY2OWI0Jyxcblx0UmRpYW5ZZDogJ2NkNWM1YycsXG5cdFJkaWdvOiAnNGIwMDgyJyxcblx0aXZTeTogJ2ZmZmZmMCcsXG5cdGtoYWtpOiAnZjBlNjhjJyxcblx0bGF2Rk1yOiAnZTZlNmZhJyxcblx0bGF2Rk1yWHNoOiAnZmZmMGY1Jyxcblx0bGF3bmdZRjogJzdjZmMwMCcsXG5cdE5tb25jRWZmb246ICdmZmZhY2QnLFxuXHRaWGU6ICdhZGQ4ZTYnLFxuXHRaY1NPOiAnZjA4MDgwJyxcblx0WmN5YW46ICdlMGZmZmYnLFxuXHRaZ1RNblBkTHc6ICdmYWZhZDInLFxuXHRaV2F5OiAnZDNkM2QzJyxcblx0WmdZRjogJzkwZWU5MCcsXG5cdFpnWXk6ICdkM2QzZDMnLFxuXHRacFJrOiAnZmZiNmMxJyxcblx0WnNPbW9uOiAnZmZhMDdhJyxcblx0WnNIZ1lGOiAnMjBiMmFhJyxcblx0WnNreVhlOiAnODdjZWZhJyxcblx0WlVXYXk6ICc3Nzg4OTknLFxuXHRaVWdZeTogJzc3ODg5OScsXG5cdFpzdEFsWGU6ICdiMGM0ZGUnLFxuXHRaTHc6ICdmZmZmZTAnLFxuXHRsaW1lOiAnZmYwMCcsXG5cdGxpbWVnWUY6ICczMmNkMzInLFxuXHRsUkY6ICdmYWYwZTYnLFxuXHRtYWdGdGE6ICdmZjAwZmYnLFxuXHRtYVBvbjogJzgwMDAwMCcsXG5cdFZhcXVhbWFyUmU6ICc2NmNkYWEnLFxuXHRWWGU6ICdjZCcsXG5cdFZTY0VkOiAnYmE1NWQzJyxcblx0VnB1cnBOOiAnOTM3MGRiJyxcblx0VnNIZ1lGOiAnM2NiMzcxJyxcblx0VlVYZTogJzdiNjhlZScsXG5cdFZzcHJSZ2dZRjogJ2ZhOWEnLFxuXHRWUWU6ICc0OGQxY2MnLFxuXHRWdmlUZXRZZDogJ2M3MTU4NScsXG5cdG1pZG5pZ2h0WGU6ICcxOTE5NzAnLFxuXHRtUnRjWWFtOiAnZjVmZmZhJyxcblx0bWlzdHlQc2U6ICdmZmU0ZTEnLFxuXHRtb2NjYXNSOiAnZmZlNGI1Jyxcblx0bmF2YWpvd0V0ZTogJ2ZmZGVhZCcsXG5cdG5hdnk6ICc4MCcsXG5cdFRkbGFjZTogJ2ZkZjVlNicsXG5cdFRpdmU6ICc4MDgwMDAnLFxuXHRUaXZlZEJiOiAnNmI4ZTIzJyxcblx0U2FuZ2U6ICdmZmE1MDAnLFxuXHRTYW5nZVlkOiAnZmY0NTAwJyxcblx0U2NFZDogJ2RhNzBkNicsXG5cdHBPZWdUTW5QZDogJ2VlZThhYScsXG5cdHBPZWdZRjogJzk4ZmI5OCcsXG5cdHBPZVFlOiAnYWZlZWVlJyxcblx0cE9ldmlUZXRZZDogJ2RiNzA5MycsXG5cdHBhcGF5YXdFcDogJ2ZmZWZkNScsXG5cdHBIS3B1ZmY6ICdmZmRhYjknLFxuXHRwZXJ1OiAnY2Q4NTNmJyxcblx0cFJrOiAnZmZjMGNiJyxcblx0cGx1bTogJ2RkYTBkZCcsXG5cdHBvd01yWGU6ICdiMGUwZTYnLFxuXHRwdXJwTjogJzgwMDA4MCcsXG5cdFliZWNjYXB1cnBOOiAnNjYzMzk5Jyxcblx0WWQ6ICdmZjAwMDAnLFxuXHRQc3licm93bjogJ2JjOGY4ZicsXG5cdFB5T1hlOiAnNDE2OWUxJyxcblx0c2FkZE5iUHduOiAnOGI0NTEzJyxcblx0c09tb246ICdmYTgwNzInLFxuXHRzYW5keWJQd246ICdmNGE0NjAnLFxuXHRzSGdZRjogJzJlOGI1NycsXG5cdHNIc2hlbGw6ICdmZmY1ZWUnLFxuXHRzaUZuYTogJ2EwNTIyZCcsXG5cdHNpbHZlcjogJ2MwYzBjMCcsXG5cdHNreVhlOiAnODdjZWViJyxcblx0VVhlOiAnNmE1YWNkJyxcblx0VVdheTogJzcwODA5MCcsXG5cdFVnWXk6ICc3MDgwOTAnLFxuXHRzbm93OiAnZmZmYWZhJyxcblx0c3ByUmdnWUY6ICdmZjdmJyxcblx0c3RBbFhlOiAnNDY4MmI0Jyxcblx0dGFuOiAnZDJiNDhjJyxcblx0dGVPOiAnODA4MCcsXG5cdHRFc3ROOiAnZDhiZmQ4Jyxcblx0dG9tYXRvOiAnZmY2MzQ3Jyxcblx0UWU6ICc0MGUwZDAnLFxuXHR2aVRldDogJ2VlODJlZScsXG5cdEpIdDogJ2Y1ZGViMycsXG5cdHdFdGU6ICdmZmZmZmYnLFxuXHR3RXRlc21va2U6ICdmNWY1ZjUnLFxuXHRMdzogJ2ZmZmYwMCcsXG5cdEx3Z1lGOiAnOWFjZDMyJ1xufTtcbmZ1bmN0aW9uIHVucGFjaygpIHtcbiAgY29uc3QgdW5wYWNrZWQgPSB7fTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5hbWVzJDEpO1xuICBjb25zdCB0a2V5cyA9IE9iamVjdC5rZXlzKG1hcCk7XG4gIGxldCBpLCBqLCBrLCBvaywgbms7XG4gIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgb2sgPSBuayA9IGtleXNbaV07XG4gICAgZm9yIChqID0gMDsgaiA8IHRrZXlzLmxlbmd0aDsgaisrKSB7XG4gICAgICBrID0gdGtleXNbal07XG4gICAgICBuayA9IG5rLnJlcGxhY2UoaywgbWFwW2tdKTtcbiAgICB9XG4gICAgayA9IHBhcnNlSW50KG5hbWVzJDFbb2tdLCAxNik7XG4gICAgdW5wYWNrZWRbbmtdID0gW2sgPj4gMTYgJiAweEZGLCBrID4+IDggJiAweEZGLCBrICYgMHhGRl07XG4gIH1cbiAgcmV0dXJuIHVucGFja2VkO1xufVxuXG5sZXQgbmFtZXM7XG5mdW5jdGlvbiBuYW1lUGFyc2Uoc3RyKSB7XG4gIGlmICghbmFtZXMpIHtcbiAgICBuYW1lcyA9IHVucGFjaygpO1xuICAgIG5hbWVzLnRyYW5zcGFyZW50ID0gWzAsIDAsIDAsIDBdO1xuICB9XG4gIGNvbnN0IGEgPSBuYW1lc1tzdHIudG9Mb3dlckNhc2UoKV07XG4gIHJldHVybiBhICYmIHtcbiAgICByOiBhWzBdLFxuICAgIGc6IGFbMV0sXG4gICAgYjogYVsyXSxcbiAgICBhOiBhLmxlbmd0aCA9PT0gNCA/IGFbM10gOiAyNTVcbiAgfTtcbn1cblxuY29uc3QgUkdCX1JFID0gL15yZ2JhP1xcKFxccyooWy0rLlxcZF0rKSglKT9bXFxzLF0rKFstKy5lXFxkXSspKCUpP1tcXHMsXSsoWy0rLmVcXGRdKykoJSk/KD86W1xccywvXSsoWy0rLmVcXGRdKykoJSk/KT9cXHMqXFwpJC87XG5mdW5jdGlvbiByZ2JQYXJzZShzdHIpIHtcbiAgY29uc3QgbSA9IFJHQl9SRS5leGVjKHN0cik7XG4gIGxldCBhID0gMjU1O1xuICBsZXQgciwgZywgYjtcbiAgaWYgKCFtKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChtWzddICE9PSByKSB7XG4gICAgY29uc3QgdiA9ICttWzddO1xuICAgIGEgPSBtWzhdID8gcDJiKHYpIDogbGltKHYgKiAyNTUsIDAsIDI1NSk7XG4gIH1cbiAgciA9ICttWzFdO1xuICBnID0gK21bM107XG4gIGIgPSArbVs1XTtcbiAgciA9IDI1NSAmIChtWzJdID8gcDJiKHIpIDogbGltKHIsIDAsIDI1NSkpO1xuICBnID0gMjU1ICYgKG1bNF0gPyBwMmIoZykgOiBsaW0oZywgMCwgMjU1KSk7XG4gIGIgPSAyNTUgJiAobVs2XSA/IHAyYihiKSA6IGxpbShiLCAwLCAyNTUpKTtcbiAgcmV0dXJuIHtcbiAgICByOiByLFxuICAgIGc6IGcsXG4gICAgYjogYixcbiAgICBhOiBhXG4gIH07XG59XG5mdW5jdGlvbiByZ2JTdHJpbmcodikge1xuICByZXR1cm4gdiAmJiAoXG4gICAgdi5hIDwgMjU1XG4gICAgICA/IGByZ2JhKCR7di5yfSwgJHt2Lmd9LCAke3YuYn0sICR7YjJuKHYuYSl9KWBcbiAgICAgIDogYHJnYigke3Yucn0sICR7di5nfSwgJHt2LmJ9KWBcbiAgKTtcbn1cblxuY29uc3QgdG8gPSB2ID0+IHYgPD0gMC4wMDMxMzA4ID8gdiAqIDEyLjkyIDogTWF0aC5wb3codiwgMS4wIC8gMi40KSAqIDEuMDU1IC0gMC4wNTU7XG5jb25zdCBmcm9tID0gdiA9PiB2IDw9IDAuMDQwNDUgPyB2IC8gMTIuOTIgOiBNYXRoLnBvdygodiArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuZnVuY3Rpb24gaW50ZXJwb2xhdGUocmdiMSwgcmdiMiwgdCkge1xuICBjb25zdCByID0gZnJvbShiMm4ocmdiMS5yKSk7XG4gIGNvbnN0IGcgPSBmcm9tKGIybihyZ2IxLmcpKTtcbiAgY29uc3QgYiA9IGZyb20oYjJuKHJnYjEuYikpO1xuICByZXR1cm4ge1xuICAgIHI6IG4yYih0byhyICsgdCAqIChmcm9tKGIybihyZ2IyLnIpKSAtIHIpKSksXG4gICAgZzogbjJiKHRvKGcgKyB0ICogKGZyb20oYjJuKHJnYjIuZykpIC0gZykpKSxcbiAgICBiOiBuMmIodG8oYiArIHQgKiAoZnJvbShiMm4ocmdiMi5iKSkgLSBiKSkpLFxuICAgIGE6IHJnYjEuYSArIHQgKiAocmdiMi5hIC0gcmdiMS5hKVxuICB9O1xufVxuXG5mdW5jdGlvbiBtb2RIU0wodiwgaSwgcmF0aW8pIHtcbiAgaWYgKHYpIHtcbiAgICBsZXQgdG1wID0gcmdiMmhzbCh2KTtcbiAgICB0bXBbaV0gPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0bXBbaV0gKyB0bXBbaV0gKiByYXRpbywgaSA9PT0gMCA/IDM2MCA6IDEpKTtcbiAgICB0bXAgPSBoc2wycmdiKHRtcCk7XG4gICAgdi5yID0gdG1wWzBdO1xuICAgIHYuZyA9IHRtcFsxXTtcbiAgICB2LmIgPSB0bXBbMl07XG4gIH1cbn1cbmZ1bmN0aW9uIGNsb25lKHYsIHByb3RvKSB7XG4gIHJldHVybiB2ID8gT2JqZWN0LmFzc2lnbihwcm90byB8fCB7fSwgdikgOiB2O1xufVxuZnVuY3Rpb24gZnJvbU9iamVjdChpbnB1dCkge1xuICB2YXIgdiA9IHtyOiAwLCBnOiAwLCBiOiAwLCBhOiAyNTV9O1xuICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICBpZiAoaW5wdXQubGVuZ3RoID49IDMpIHtcbiAgICAgIHYgPSB7cjogaW5wdXRbMF0sIGc6IGlucHV0WzFdLCBiOiBpbnB1dFsyXSwgYTogMjU1fTtcbiAgICAgIGlmIChpbnB1dC5sZW5ndGggPiAzKSB7XG4gICAgICAgIHYuYSA9IG4yYihpbnB1dFszXSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHYgPSBjbG9uZShpbnB1dCwge3I6IDAsIGc6IDAsIGI6IDAsIGE6IDF9KTtcbiAgICB2LmEgPSBuMmIodi5hKTtcbiAgfVxuICByZXR1cm4gdjtcbn1cbmZ1bmN0aW9uIGZ1bmN0aW9uUGFyc2Uoc3RyKSB7XG4gIGlmIChzdHIuY2hhckF0KDApID09PSAncicpIHtcbiAgICByZXR1cm4gcmdiUGFyc2Uoc3RyKTtcbiAgfVxuICByZXR1cm4gaHVlUGFyc2Uoc3RyKTtcbn1cbmNsYXNzIENvbG9yIHtcbiAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBDb2xvcikge1xuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIGlucHV0O1xuICAgIGxldCB2O1xuICAgIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgdiA9IGZyb21PYmplY3QoaW5wdXQpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHYgPSBoZXhQYXJzZShpbnB1dCkgfHwgbmFtZVBhcnNlKGlucHV0KSB8fCBmdW5jdGlvblBhcnNlKGlucHV0KTtcbiAgICB9XG4gICAgdGhpcy5fcmdiID0gdjtcbiAgICB0aGlzLl92YWxpZCA9ICEhdjtcbiAgfVxuICBnZXQgdmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkO1xuICB9XG4gIGdldCByZ2IoKSB7XG4gICAgdmFyIHYgPSBjbG9uZSh0aGlzLl9yZ2IpO1xuICAgIGlmICh2KSB7XG4gICAgICB2LmEgPSBiMm4odi5hKTtcbiAgICB9XG4gICAgcmV0dXJuIHY7XG4gIH1cbiAgc2V0IHJnYihvYmopIHtcbiAgICB0aGlzLl9yZ2IgPSBmcm9tT2JqZWN0KG9iaik7XG4gIH1cbiAgcmdiU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl92YWxpZCA/IHJnYlN0cmluZyh0aGlzLl9yZ2IpIDogdW5kZWZpbmVkO1xuICB9XG4gIGhleFN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWQgPyBoZXhTdHJpbmcodGhpcy5fcmdiKSA6IHVuZGVmaW5lZDtcbiAgfVxuICBoc2xTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkID8gaHNsU3RyaW5nKHRoaXMuX3JnYikgOiB1bmRlZmluZWQ7XG4gIH1cbiAgbWl4KGNvbG9yLCB3ZWlnaHQpIHtcbiAgICBpZiAoY29sb3IpIHtcbiAgICAgIGNvbnN0IGMxID0gdGhpcy5yZ2I7XG4gICAgICBjb25zdCBjMiA9IGNvbG9yLnJnYjtcbiAgICAgIGxldCB3MjtcbiAgICAgIGNvbnN0IHAgPSB3ZWlnaHQgPT09IHcyID8gMC41IDogd2VpZ2h0O1xuICAgICAgY29uc3QgdyA9IDIgKiBwIC0gMTtcbiAgICAgIGNvbnN0IGEgPSBjMS5hIC0gYzIuYTtcbiAgICAgIGNvbnN0IHcxID0gKCh3ICogYSA9PT0gLTEgPyB3IDogKHcgKyBhKSAvICgxICsgdyAqIGEpKSArIDEpIC8gMi4wO1xuICAgICAgdzIgPSAxIC0gdzE7XG4gICAgICBjMS5yID0gMHhGRiAmIHcxICogYzEuciArIHcyICogYzIuciArIDAuNTtcbiAgICAgIGMxLmcgPSAweEZGICYgdzEgKiBjMS5nICsgdzIgKiBjMi5nICsgMC41O1xuICAgICAgYzEuYiA9IDB4RkYgJiB3MSAqIGMxLmIgKyB3MiAqIGMyLmIgKyAwLjU7XG4gICAgICBjMS5hID0gcCAqIGMxLmEgKyAoMSAtIHApICogYzIuYTtcbiAgICAgIHRoaXMucmdiID0gYzE7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGludGVycG9sYXRlKGNvbG9yLCB0KSB7XG4gICAgaWYgKGNvbG9yKSB7XG4gICAgICB0aGlzLl9yZ2IgPSBpbnRlcnBvbGF0ZSh0aGlzLl9yZ2IsIGNvbG9yLl9yZ2IsIHQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IENvbG9yKHRoaXMucmdiKTtcbiAgfVxuICBhbHBoYShhKSB7XG4gICAgdGhpcy5fcmdiLmEgPSBuMmIoYSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgY2xlYXJlcihyYXRpbykge1xuICAgIGNvbnN0IHJnYiA9IHRoaXMuX3JnYjtcbiAgICByZ2IuYSAqPSAxIC0gcmF0aW87XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZ3JleXNjYWxlKCkge1xuICAgIGNvbnN0IHJnYiA9IHRoaXMuX3JnYjtcbiAgICBjb25zdCB2YWwgPSByb3VuZChyZ2IuciAqIDAuMyArIHJnYi5nICogMC41OSArIHJnYi5iICogMC4xMSk7XG4gICAgcmdiLnIgPSByZ2IuZyA9IHJnYi5iID0gdmFsO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIG9wYXF1ZXIocmF0aW8pIHtcbiAgICBjb25zdCByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgcmdiLmEgKj0gMSArIHJhdGlvO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIG5lZ2F0ZSgpIHtcbiAgICBjb25zdCB2ID0gdGhpcy5fcmdiO1xuICAgIHYuciA9IDI1NSAtIHYucjtcbiAgICB2LmcgPSAyNTUgLSB2Lmc7XG4gICAgdi5iID0gMjU1IC0gdi5iO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGxpZ2h0ZW4ocmF0aW8pIHtcbiAgICBtb2RIU0wodGhpcy5fcmdiLCAyLCByYXRpbyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZGFya2VuKHJhdGlvKSB7XG4gICAgbW9kSFNMKHRoaXMuX3JnYiwgMiwgLXJhdGlvKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBzYXR1cmF0ZShyYXRpbykge1xuICAgIG1vZEhTTCh0aGlzLl9yZ2IsIDEsIHJhdGlvKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBkZXNhdHVyYXRlKHJhdGlvKSB7XG4gICAgbW9kSFNMKHRoaXMuX3JnYiwgMSwgLXJhdGlvKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICByb3RhdGUoZGVnKSB7XG4gICAgcm90YXRlKHRoaXMuX3JnYiwgZGVnKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5mdW5jdGlvbiBpbmRleF9lc20oaW5wdXQpIHtcbiAgcmV0dXJuIG5ldyBDb2xvcihpbnB1dCk7XG59XG5cbmV4cG9ydCB7IENvbG9yLCBiMm4sIGIycCwgaW5kZXhfZXNtIGFzIGRlZmF1bHQsIGhleFBhcnNlLCBoZXhTdHJpbmcsIGhzbDJyZ2IsIGhzbFN0cmluZywgaHN2MnJnYiwgaHVlUGFyc2UsIGh3YjJyZ2IsIGxpbSwgbjJiLCBuMnAsIG5hbWVQYXJzZSwgcDJiLCByZ2IyaHNsLCByZ2JQYXJzZSwgcmdiU3RyaW5nLCByb3RhdGUsIHJvdW5kIH07XG4iLCIvKiFcbiAqIENoYXJ0LmpzIHY0LjQuNlxuICogaHR0cHM6Ly93d3cuY2hhcnRqcy5vcmdcbiAqIChjKSAyMDI0IENoYXJ0LmpzIENvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlXG4gKi9cbmltcG9ydCB7IHIgYXMgcmVxdWVzdEFuaW1GcmFtZSwgYSBhcyByZXNvbHZlLCBlIGFzIGVmZmVjdHMsIGMgYXMgY29sb3IsIGkgYXMgaXNPYmplY3QsIGQgYXMgZGVmYXVsdHMsIGIgYXMgaXNBcnJheSwgdiBhcyB2YWx1ZU9yRGVmYXVsdCwgdSBhcyB1bmxpc3RlbkFycmF5RXZlbnRzLCBsIGFzIGxpc3RlbkFycmF5RXZlbnRzLCBmIGFzIHJlc29sdmVPYmplY3RLZXksIGcgYXMgaXNOdW1iZXJGaW5pdGUsIGggYXMgZGVmaW5lZCwgcyBhcyBzaWduLCBqIGFzIGNyZWF0ZUNvbnRleHQsIGsgYXMgaXNOdWxsT3JVbmRlZiwgXyBhcyBfYXJyYXlVbmlxdWUsIHQgYXMgdG9SYWRpYW5zLCBtIGFzIHRvUGVyY2VudGFnZSwgbiBhcyB0b0RpbWVuc2lvbiwgVCBhcyBUQVUsIG8gYXMgZm9ybWF0TnVtYmVyLCBwIGFzIF9hbmdsZUJldHdlZW4sIEggYXMgSEFMRl9QSSwgUCBhcyBQSSwgcSBhcyBfZ2V0U3RhcnRBbmRDb3VudE9mVmlzaWJsZVBvaW50cywgdyBhcyBfc2NhbGVSYW5nZXNDaGFuZ2VkLCB4IGFzIGlzTnVtYmVyLCB5IGFzIF9wYXJzZU9iamVjdERhdGFSYWRpYWxTY2FsZSwgeiBhcyBnZXRSZWxhdGl2ZVBvc2l0aW9uLCBBIGFzIF9ybG9va3VwQnlLZXksIEIgYXMgX2xvb2t1cEJ5S2V5LCBDIGFzIF9pc1BvaW50SW5BcmVhLCBEIGFzIGdldEFuZ2xlRnJvbVBvaW50LCBFIGFzIHRvUGFkZGluZywgRiBhcyBlYWNoLCBHIGFzIGdldE1heGltdW1TaXplLCBJIGFzIF9nZXRQYXJlbnROb2RlLCBKIGFzIHJlYWRVc2VkU2l6ZSwgSyBhcyBzdXBwb3J0c0V2ZW50TGlzdGVuZXJPcHRpb25zLCBMIGFzIHRocm90dGxlZCwgTSBhcyBfaXNEb21TdXBwb3J0ZWQsIE4gYXMgX2ZhY3Rvcml6ZSwgTyBhcyBmaW5pdGVPckRlZmF1bHQsIFEgYXMgY2FsbGJhY2ssIFIgYXMgX2FkZEdyYWNlLCBTIGFzIF9saW1pdFZhbHVlLCBVIGFzIHRvRGVncmVlcywgViBhcyBfbWVhc3VyZVRleHQsIFcgYXMgX2ludDE2UmFuZ2UsIFggYXMgX2FsaWduUGl4ZWwsIFkgYXMgY2xpcEFyZWEsIFogYXMgcmVuZGVyVGV4dCwgJCBhcyB1bmNsaXBBcmVhLCBhMCBhcyB0b0ZvbnQsIGExIGFzIF90b0xlZnRSaWdodENlbnRlciwgYTIgYXMgX2FsaWduU3RhcnRFbmQsIGEzIGFzIG92ZXJyaWRlcywgYTQgYXMgbWVyZ2UsIGE1IGFzIF9jYXBpdGFsaXplLCBhNiBhcyBkZXNjcmlwdG9ycywgYTcgYXMgaXNGdW5jdGlvbiwgYTggYXMgX2F0dGFjaENvbnRleHQsIGE5IGFzIF9jcmVhdGVSZXNvbHZlciwgYWEgYXMgX2Rlc2NyaXB0b3JzLCBhYiBhcyBtZXJnZUlmLCBhYyBhcyB1aWQsIGFkIGFzIGRlYm91bmNlLCBhZSBhcyByZXRpbmFTY2FsZSwgYWYgYXMgY2xlYXJDYW52YXMsIGFnIGFzIHNldHNFcXVhbCwgYWggYXMgX2VsZW1lbnRzRXF1YWwsIGFpIGFzIF9pc0NsaWNrRXZlbnQsIGFqIGFzIF9pc0JldHdlZW4sIGFrIGFzIF9yZWFkVmFsdWVUb1Byb3BzLCBhbCBhcyBfdXBkYXRlQmV6aWVyQ29udHJvbFBvaW50cywgYW0gYXMgX2NvbXB1dGVTZWdtZW50cywgYW4gYXMgX2JvdW5kU2VnbWVudHMsIGFvIGFzIF9zdGVwcGVkSW50ZXJwb2xhdGlvbiwgYXAgYXMgX2JlemllckludGVycG9sYXRpb24sIGFxIGFzIF9wb2ludEluTGluZSwgYXIgYXMgX3N0ZXBwZWRMaW5lVG8sIGFzIGFzIF9iZXppZXJDdXJ2ZVRvLCBhdCBhcyBkcmF3UG9pbnQsIGF1IGFzIGFkZFJvdW5kZWRSZWN0UGF0aCwgYXYgYXMgdG9UUkJMLCBhdyBhcyB0b1RSQkxDb3JuZXJzLCBheCBhcyBfYm91bmRTZWdtZW50LCBheSBhcyBfbm9ybWFsaXplQW5nbGUsIGF6IGFzIGdldFJ0bEFkYXB0ZXIsIGFBIGFzIG92ZXJyaWRlVGV4dERpcmVjdGlvbiwgYUIgYXMgX3RleHRYLCBhQyBhcyByZXN0b3JlVGV4dERpcmVjdGlvbiwgYUQgYXMgZHJhd1BvaW50TGVnZW5kLCBhRSBhcyBkaXN0YW5jZUJldHdlZW5Qb2ludHMsIGFGIGFzIG5vb3AsIGFHIGFzIF9zZXRNaW5BbmRNYXhCeUtleSwgYUggYXMgbmljZU51bSwgYUkgYXMgYWxtb3N0V2hvbGUsIGFKIGFzIGFsbW9zdEVxdWFscywgYUsgYXMgX2RlY2ltYWxQbGFjZXMsIGFMIGFzIFRpY2tzLCBhTSBhcyBsb2cxMCwgYU4gYXMgX2xvbmdlc3RUZXh0LCBhTyBhcyBfZmlsdGVyQmV0d2VlbiwgYVAgYXMgX2xvb2t1cCB9IGZyb20gJy4vY2h1bmtzL2hlbHBlcnMuc2VnbWVudC5qcyc7XG5pbXBvcnQgJ0BrdXJrbGUvY29sb3InO1xuXG5jbGFzcyBBbmltYXRvciB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5fcmVxdWVzdCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2NoYXJ0cyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5fcnVubmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9sYXN0RGF0ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gX25vdGlmeShjaGFydCwgYW5pbXMsIGRhdGUsIHR5cGUpIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gYW5pbXMubGlzdGVuZXJzW3R5cGVdO1xuICAgICAgICBjb25zdCBudW1TdGVwcyA9IGFuaW1zLmR1cmF0aW9uO1xuICAgICAgICBjYWxsYmFja3MuZm9yRWFjaCgoZm4pPT5mbih7XG4gICAgICAgICAgICAgICAgY2hhcnQsXG4gICAgICAgICAgICAgICAgaW5pdGlhbDogYW5pbXMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgICBudW1TdGVwcyxcbiAgICAgICAgICAgICAgICBjdXJyZW50U3RlcDogTWF0aC5taW4oZGF0ZSAtIGFuaW1zLnN0YXJ0LCBudW1TdGVwcylcbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG4gX3JlZnJlc2goKSB7XG4gICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcnVubmluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3QgPSByZXF1ZXN0QW5pbUZyYW1lLmNhbGwod2luZG93LCAoKT0+e1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh0aGlzLl9ydW5uaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gX3VwZGF0ZShkYXRlID0gRGF0ZS5ub3coKSkge1xuICAgICAgICBsZXQgcmVtYWluaW5nID0gMDtcbiAgICAgICAgdGhpcy5fY2hhcnRzLmZvckVhY2goKGFuaW1zLCBjaGFydCk9PntcbiAgICAgICAgICAgIGlmICghYW5pbXMucnVubmluZyB8fCAhYW5pbXMuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBhbmltcy5pdGVtcztcbiAgICAgICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGxldCBkcmF3ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgaXRlbTtcbiAgICAgICAgICAgIGZvcig7IGkgPj0gMDsgLS1pKXtcbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uX2FjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5fdG90YWwgPiBhbmltcy5kdXJhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5pbXMuZHVyYXRpb24gPSBpdGVtLl90b3RhbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpdGVtLnRpY2soZGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGRyYXcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zW2ldID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnBvcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkcmF3KSB7XG4gICAgICAgICAgICAgICAgY2hhcnQuZHJhdygpO1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmeShjaGFydCwgYW5pbXMsIGRhdGUsICdwcm9ncmVzcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBhbmltcy5ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZ5KGNoYXJ0LCBhbmltcywgZGF0ZSwgJ2NvbXBsZXRlJyk7XG4gICAgICAgICAgICAgICAgYW5pbXMuaW5pdGlhbCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVtYWluaW5nICs9IGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2xhc3REYXRlID0gZGF0ZTtcbiAgICAgICAgaWYgKHJlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fcnVubmluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuIF9nZXRBbmltcyhjaGFydCkge1xuICAgICAgICBjb25zdCBjaGFydHMgPSB0aGlzLl9jaGFydHM7XG4gICAgICAgIGxldCBhbmltcyA9IGNoYXJ0cy5nZXQoY2hhcnQpO1xuICAgICAgICBpZiAoIWFuaW1zKSB7XG4gICAgICAgICAgICBhbmltcyA9IHtcbiAgICAgICAgICAgICAgICBydW5uaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbml0aWFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiBbXSxcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IFtdLFxuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2hhcnRzLnNldChjaGFydCwgYW5pbXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbmltcztcbiAgICB9XG4gbGlzdGVuKGNoYXJ0LCBldmVudCwgY2IpIHtcbiAgICAgICAgdGhpcy5fZ2V0QW5pbXMoY2hhcnQpLmxpc3RlbmVyc1tldmVudF0ucHVzaChjYik7XG4gICAgfVxuIGFkZChjaGFydCwgaXRlbXMpIHtcbiAgICAgICAgaWYgKCFpdGVtcyB8fCAhaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZ2V0QW5pbXMoY2hhcnQpLml0ZW1zLnB1c2goLi4uaXRlbXMpO1xuICAgIH1cbiBoYXMoY2hhcnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEFuaW1zKGNoYXJ0KS5pdGVtcy5sZW5ndGggPiAwO1xuICAgIH1cbiBzdGFydChjaGFydCkge1xuICAgICAgICBjb25zdCBhbmltcyA9IHRoaXMuX2NoYXJ0cy5nZXQoY2hhcnQpO1xuICAgICAgICBpZiAoIWFuaW1zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYW5pbXMucnVubmluZyA9IHRydWU7XG4gICAgICAgIGFuaW1zLnN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgYW5pbXMuZHVyYXRpb24gPSBhbmltcy5pdGVtcy5yZWR1Y2UoKGFjYywgY3VyKT0+TWF0aC5tYXgoYWNjLCBjdXIuX2R1cmF0aW9uKSwgMCk7XG4gICAgICAgIHRoaXMuX3JlZnJlc2goKTtcbiAgICB9XG4gICAgcnVubmluZyhjaGFydCkge1xuICAgICAgICBpZiAoIXRoaXMuX3J1bm5pbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbmltcyA9IHRoaXMuX2NoYXJ0cy5nZXQoY2hhcnQpO1xuICAgICAgICBpZiAoIWFuaW1zIHx8ICFhbmltcy5ydW5uaW5nIHx8ICFhbmltcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gc3RvcChjaGFydCkge1xuICAgICAgICBjb25zdCBhbmltcyA9IHRoaXMuX2NoYXJ0cy5nZXQoY2hhcnQpO1xuICAgICAgICBpZiAoIWFuaW1zIHx8ICFhbmltcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtcyA9IGFuaW1zLml0ZW1zO1xuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgIGZvcig7IGkgPj0gMDsgLS1pKXtcbiAgICAgICAgICAgIGl0ZW1zW2ldLmNhbmNlbCgpO1xuICAgICAgICB9XG4gICAgICAgIGFuaW1zLml0ZW1zID0gW107XG4gICAgICAgIHRoaXMuX25vdGlmeShjaGFydCwgYW5pbXMsIERhdGUubm93KCksICdjb21wbGV0ZScpO1xuICAgIH1cbiByZW1vdmUoY2hhcnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoYXJ0cy5kZWxldGUoY2hhcnQpO1xuICAgIH1cbn1cbnZhciBhbmltYXRvciA9IC8qICNfX1BVUkVfXyAqLyBuZXcgQW5pbWF0b3IoKTtcblxuY29uc3QgdHJhbnNwYXJlbnQgPSAndHJhbnNwYXJlbnQnO1xuY29uc3QgaW50ZXJwb2xhdG9ycyA9IHtcbiAgICBib29sZWFuIChmcm9tLCB0bywgZmFjdG9yKSB7XG4gICAgICAgIHJldHVybiBmYWN0b3IgPiAwLjUgPyB0byA6IGZyb207XG4gICAgfSxcbiBjb2xvciAoZnJvbSwgdG8sIGZhY3Rvcikge1xuICAgICAgICBjb25zdCBjMCA9IGNvbG9yKGZyb20gfHwgdHJhbnNwYXJlbnQpO1xuICAgICAgICBjb25zdCBjMSA9IGMwLnZhbGlkICYmIGNvbG9yKHRvIHx8IHRyYW5zcGFyZW50KTtcbiAgICAgICAgcmV0dXJuIGMxICYmIGMxLnZhbGlkID8gYzEubWl4KGMwLCBmYWN0b3IpLmhleFN0cmluZygpIDogdG87XG4gICAgfSxcbiAgICBudW1iZXIgKGZyb20sIHRvLCBmYWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZyb20gKyAodG8gLSBmcm9tKSAqIGZhY3RvcjtcbiAgICB9XG59O1xuY2xhc3MgQW5pbWF0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihjZmcsIHRhcmdldCwgcHJvcCwgdG8pe1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0YXJnZXRbcHJvcF07XG4gICAgICAgIHRvID0gcmVzb2x2ZShbXG4gICAgICAgICAgICBjZmcudG8sXG4gICAgICAgICAgICB0byxcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIGNmZy5mcm9tXG4gICAgICAgIF0pO1xuICAgICAgICBjb25zdCBmcm9tID0gcmVzb2x2ZShbXG4gICAgICAgICAgICBjZmcuZnJvbSxcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIHRvXG4gICAgICAgIF0pO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9mbiA9IGNmZy5mbiB8fCBpbnRlcnBvbGF0b3JzW2NmZy50eXBlIHx8IHR5cGVvZiBmcm9tXTtcbiAgICAgICAgdGhpcy5fZWFzaW5nID0gZWZmZWN0c1tjZmcuZWFzaW5nXSB8fCBlZmZlY3RzLmxpbmVhcjtcbiAgICAgICAgdGhpcy5fc3RhcnQgPSBNYXRoLmZsb29yKERhdGUubm93KCkgKyAoY2ZnLmRlbGF5IHx8IDApKTtcbiAgICAgICAgdGhpcy5fZHVyYXRpb24gPSB0aGlzLl90b3RhbCA9IE1hdGguZmxvb3IoY2ZnLmR1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fbG9vcCA9ICEhY2ZnLmxvb3A7XG4gICAgICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldDtcbiAgICAgICAgdGhpcy5fcHJvcCA9IHByb3A7XG4gICAgICAgIHRoaXMuX2Zyb20gPSBmcm9tO1xuICAgICAgICB0aGlzLl90byA9IHRvO1xuICAgICAgICB0aGlzLl9wcm9taXNlcyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgYWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH1cbiAgICB1cGRhdGUoY2ZnLCB0bywgZGF0ZSkge1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5fdGFyZ2V0W3RoaXMuX3Byb3BdO1xuICAgICAgICAgICAgY29uc3QgZWxhcHNlZCA9IGRhdGUgLSB0aGlzLl9zdGFydDtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbiA9IHRoaXMuX2R1cmF0aW9uIC0gZWxhcHNlZDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0ID0gZGF0ZTtcbiAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9uID0gTWF0aC5mbG9vcihNYXRoLm1heChyZW1haW4sIGNmZy5kdXJhdGlvbikpO1xuICAgICAgICAgICAgdGhpcy5fdG90YWwgKz0gZWxhcHNlZDtcbiAgICAgICAgICAgIHRoaXMuX2xvb3AgPSAhIWNmZy5sb29wO1xuICAgICAgICAgICAgdGhpcy5fdG8gPSByZXNvbHZlKFtcbiAgICAgICAgICAgICAgICBjZmcudG8sXG4gICAgICAgICAgICAgICAgdG8sXG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIGNmZy5mcm9tXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIHRoaXMuX2Zyb20gPSByZXNvbHZlKFtcbiAgICAgICAgICAgICAgICBjZmcuZnJvbSxcbiAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUsXG4gICAgICAgICAgICAgICAgdG9cbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhbmNlbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy50aWNrKERhdGUubm93KCkpO1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRpY2soZGF0ZSkge1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gZGF0ZSAtIHRoaXMuX3N0YXJ0O1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMuX2R1cmF0aW9uO1xuICAgICAgICBjb25zdCBwcm9wID0gdGhpcy5fcHJvcDtcbiAgICAgICAgY29uc3QgZnJvbSA9IHRoaXMuX2Zyb207XG4gICAgICAgIGNvbnN0IGxvb3AgPSB0aGlzLl9sb29wO1xuICAgICAgICBjb25zdCB0byA9IHRoaXMuX3RvO1xuICAgICAgICBsZXQgZmFjdG9yO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmcm9tICE9PSB0byAmJiAobG9vcCB8fCBlbGFwc2VkIDwgZHVyYXRpb24pO1xuICAgICAgICBpZiAoIXRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5fdGFyZ2V0W3Byb3BdID0gdG87XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkodHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsYXBzZWQgPCAwKSB7XG4gICAgICAgICAgICB0aGlzLl90YXJnZXRbcHJvcF0gPSBmcm9tO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZhY3RvciA9IGVsYXBzZWQgLyBkdXJhdGlvbiAlIDI7XG4gICAgICAgIGZhY3RvciA9IGxvb3AgJiYgZmFjdG9yID4gMSA/IDIgLSBmYWN0b3IgOiBmYWN0b3I7XG4gICAgICAgIGZhY3RvciA9IHRoaXMuX2Vhc2luZyhNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBmYWN0b3IpKSk7XG4gICAgICAgIHRoaXMuX3RhcmdldFtwcm9wXSA9IHRoaXMuX2ZuKGZyb20sIHRvLCBmYWN0b3IpO1xuICAgIH1cbiAgICB3YWl0KCkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IHRoaXMuX3Byb21pc2VzIHx8ICh0aGlzLl9wcm9taXNlcyA9IFtdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaik9PntcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goe1xuICAgICAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgICAgICByZWpcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX25vdGlmeShyZXNvbHZlZCkge1xuICAgICAgICBjb25zdCBtZXRob2QgPSByZXNvbHZlZCA/ICdyZXMnIDogJ3Jlaic7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gdGhpcy5fcHJvbWlzZXMgfHwgW107XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBwcm9taXNlcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBwcm9taXNlc1tpXVttZXRob2RdKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFuaW1hdGlvbnMge1xuICAgIGNvbnN0cnVjdG9yKGNoYXJ0LCBjb25maWcpe1xuICAgICAgICB0aGlzLl9jaGFydCA9IGNoYXJ0O1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyZShjb25maWcpO1xuICAgIH1cbiAgICBjb25maWd1cmUoY29uZmlnKSB7XG4gICAgICAgIGlmICghaXNPYmplY3QoY29uZmlnKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbk9wdGlvbnMgPSBPYmplY3Qua2V5cyhkZWZhdWx0cy5hbmltYXRpb24pO1xuICAgICAgICBjb25zdCBhbmltYXRlZFByb3BzID0gdGhpcy5fcHJvcGVydGllcztcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY29uZmlnKS5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgICAgICBjb25zdCBjZmcgPSBjb25maWdba2V5XTtcbiAgICAgICAgICAgIGlmICghaXNPYmplY3QoY2ZnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBhbmltYXRpb25PcHRpb25zKXtcbiAgICAgICAgICAgICAgICByZXNvbHZlZFtvcHRpb25dID0gY2ZnW29wdGlvbl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAoaXNBcnJheShjZmcucHJvcGVydGllcykgJiYgY2ZnLnByb3BlcnRpZXMgfHwgW1xuICAgICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgXSkuZm9yRWFjaCgocHJvcCk9PntcbiAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0ga2V5IHx8ICFhbmltYXRlZFByb3BzLmhhcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRlZFByb3BzLnNldChwcm9wLCByZXNvbHZlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiBfYW5pbWF0ZU9wdGlvbnModGFyZ2V0LCB2YWx1ZXMpIHtcbiAgICAgICAgY29uc3QgbmV3T3B0aW9ucyA9IHZhbHVlcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gcmVzb2x2ZVRhcmdldE9wdGlvbnModGFyZ2V0LCBuZXdPcHRpb25zKTtcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW5pbWF0aW9ucyA9IHRoaXMuX2NyZWF0ZUFuaW1hdGlvbnMob3B0aW9ucywgbmV3T3B0aW9ucyk7XG4gICAgICAgIGlmIChuZXdPcHRpb25zLiRzaGFyZWQpIHtcbiAgICAgICAgICAgIGF3YWl0QWxsKHRhcmdldC5vcHRpb25zLiRhbmltYXRpb25zLCBuZXdPcHRpb25zKS50aGVuKCgpPT57XG4gICAgICAgICAgICAgICAgdGFyZ2V0Lm9wdGlvbnMgPSBuZXdPcHRpb25zO1xuICAgICAgICAgICAgfSwgKCk9PntcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbmltYXRpb25zO1xuICAgIH1cbiBfY3JlYXRlQW5pbWF0aW9ucyh0YXJnZXQsIHZhbHVlcykge1xuICAgICAgICBjb25zdCBhbmltYXRlZFByb3BzID0gdGhpcy5fcHJvcGVydGllcztcbiAgICAgICAgY29uc3QgYW5pbWF0aW9ucyA9IFtdO1xuICAgICAgICBjb25zdCBydW5uaW5nID0gdGFyZ2V0LiRhbmltYXRpb25zIHx8ICh0YXJnZXQuJGFuaW1hdGlvbnMgPSB7fSk7XG4gICAgICAgIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXModmFsdWVzKTtcbiAgICAgICAgY29uc3QgZGF0ZSA9IERhdGUubm93KCk7XG4gICAgICAgIGxldCBpO1xuICAgICAgICBmb3IoaSA9IHByb3BzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKXtcbiAgICAgICAgICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICAgICAgICAgIGlmIChwcm9wLmNoYXJBdCgwKSA9PT0gJyQnKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ29wdGlvbnMnKSB7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5wdXNoKC4uLnRoaXMuX2FuaW1hdGVPcHRpb25zKHRhcmdldCwgdmFsdWVzKSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1twcm9wXTtcbiAgICAgICAgICAgIGxldCBhbmltYXRpb24gPSBydW5uaW5nW3Byb3BdO1xuICAgICAgICAgICAgY29uc3QgY2ZnID0gYW5pbWF0ZWRQcm9wcy5nZXQocHJvcCk7XG4gICAgICAgICAgICBpZiAoYW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNmZyAmJiBhbmltYXRpb24uYWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLnVwZGF0ZShjZmcsIHZhbHVlLCBkYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY2ZnIHx8ICFjZmcuZHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJ1bm5pbmdbcHJvcF0gPSBhbmltYXRpb24gPSBuZXcgQW5pbWF0aW9uKGNmZywgdGFyZ2V0LCBwcm9wLCB2YWx1ZSk7XG4gICAgICAgICAgICBhbmltYXRpb25zLnB1c2goYW5pbWF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYW5pbWF0aW9ucztcbiAgICB9XG4gdXBkYXRlKHRhcmdldCwgdmFsdWVzKSB7XG4gICAgICAgIGlmICh0aGlzLl9wcm9wZXJ0aWVzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCB2YWx1ZXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbnMgPSB0aGlzLl9jcmVhdGVBbmltYXRpb25zKHRhcmdldCwgdmFsdWVzKTtcbiAgICAgICAgaWYgKGFuaW1hdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBhbmltYXRvci5hZGQodGhpcy5fY2hhcnQsIGFuaW1hdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBhd2FpdEFsbChhbmltYXRpb25zLCBwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgcnVubmluZyA9IFtdO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKTtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIGNvbnN0IGFuaW0gPSBhbmltYXRpb25zW2tleXNbaV1dO1xuICAgICAgICBpZiAoYW5pbSAmJiBhbmltLmFjdGl2ZSgpKSB7XG4gICAgICAgICAgICBydW5uaW5nLnB1c2goYW5pbS53YWl0KCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLmFsbChydW5uaW5nKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVUYXJnZXRPcHRpb25zKHRhcmdldCwgbmV3T3B0aW9ucykge1xuICAgIGlmICghbmV3T3B0aW9ucykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBvcHRpb25zID0gdGFyZ2V0Lm9wdGlvbnM7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHRhcmdldC5vcHRpb25zID0gbmV3T3B0aW9ucztcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy4kc2hhcmVkKSB7XG4gICAgICAgIHRhcmdldC5vcHRpb25zID0gb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgICAgICRzaGFyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgJGFuaW1hdGlvbnM6IHt9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gc2NhbGVDbGlwKHNjYWxlLCBhbGxvd2VkT3ZlcmZsb3cpIHtcbiAgICBjb25zdCBvcHRzID0gc2NhbGUgJiYgc2NhbGUub3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCByZXZlcnNlID0gb3B0cy5yZXZlcnNlO1xuICAgIGNvbnN0IG1pbiA9IG9wdHMubWluID09PSB1bmRlZmluZWQgPyBhbGxvd2VkT3ZlcmZsb3cgOiAwO1xuICAgIGNvbnN0IG1heCA9IG9wdHMubWF4ID09PSB1bmRlZmluZWQgPyBhbGxvd2VkT3ZlcmZsb3cgOiAwO1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiByZXZlcnNlID8gbWF4IDogbWluLFxuICAgICAgICBlbmQ6IHJldmVyc2UgPyBtaW4gOiBtYXhcbiAgICB9O1xufVxuZnVuY3Rpb24gZGVmYXVsdENsaXAoeFNjYWxlLCB5U2NhbGUsIGFsbG93ZWRPdmVyZmxvdykge1xuICAgIGlmIChhbGxvd2VkT3ZlcmZsb3cgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgeCA9IHNjYWxlQ2xpcCh4U2NhbGUsIGFsbG93ZWRPdmVyZmxvdyk7XG4gICAgY29uc3QgeSA9IHNjYWxlQ2xpcCh5U2NhbGUsIGFsbG93ZWRPdmVyZmxvdyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG9wOiB5LmVuZCxcbiAgICAgICAgcmlnaHQ6IHguZW5kLFxuICAgICAgICBib3R0b206IHkuc3RhcnQsXG4gICAgICAgIGxlZnQ6IHguc3RhcnRcbiAgICB9O1xufVxuZnVuY3Rpb24gdG9DbGlwKHZhbHVlKSB7XG4gICAgbGV0IHQsIHIsIGIsIGw7XG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICB0ID0gdmFsdWUudG9wO1xuICAgICAgICByID0gdmFsdWUucmlnaHQ7XG4gICAgICAgIGIgPSB2YWx1ZS5ib3R0b207XG4gICAgICAgIGwgPSB2YWx1ZS5sZWZ0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHQgPSByID0gYiA9IGwgPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG9wOiB0LFxuICAgICAgICByaWdodDogcixcbiAgICAgICAgYm90dG9tOiBiLFxuICAgICAgICBsZWZ0OiBsLFxuICAgICAgICBkaXNhYmxlZDogdmFsdWUgPT09IGZhbHNlXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldFNvcnRlZERhdGFzZXRJbmRpY2VzKGNoYXJ0LCBmaWx0ZXJWaXNpYmxlKSB7XG4gICAgY29uc3Qga2V5cyA9IFtdO1xuICAgIGNvbnN0IG1ldGFzZXRzID0gY2hhcnQuX2dldFNvcnRlZERhdGFzZXRNZXRhcyhmaWx0ZXJWaXNpYmxlKTtcbiAgICBsZXQgaSwgaWxlbjtcbiAgICBmb3IoaSA9IDAsIGlsZW4gPSBtZXRhc2V0cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICBrZXlzLnB1c2gobWV0YXNldHNbaV0uaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5cztcbn1cbmZ1bmN0aW9uIGFwcGx5U3RhY2soc3RhY2ssIHZhbHVlLCBkc0luZGV4LCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBrZXlzID0gc3RhY2sua2V5cztcbiAgICBjb25zdCBzaW5nbGVNb2RlID0gb3B0aW9ucy5tb2RlID09PSAnc2luZ2xlJztcbiAgICBsZXQgaSwgaWxlbiwgZGF0YXNldEluZGV4LCBvdGhlclZhbHVlO1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgIGZvcihpID0gMCwgaWxlbiA9IGtleXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgZGF0YXNldEluZGV4ID0gK2tleXNbaV07XG4gICAgICAgIGlmIChkYXRhc2V0SW5kZXggPT09IGRzSW5kZXgpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgb3RoZXJWYWx1ZSA9IHN0YWNrLnZhbHVlc1tkYXRhc2V0SW5kZXhdO1xuICAgICAgICBpZiAoaXNOdW1iZXJGaW5pdGUob3RoZXJWYWx1ZSkgJiYgKHNpbmdsZU1vZGUgfHwgdmFsdWUgPT09IDAgfHwgc2lnbih2YWx1ZSkgPT09IHNpZ24ob3RoZXJWYWx1ZSkpKSB7XG4gICAgICAgICAgICB2YWx1ZSArPSBvdGhlclZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghZm91bmQgJiYgIW9wdGlvbnMuYWxsKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBjb252ZXJ0T2JqZWN0RGF0YVRvQXJyYXkoZGF0YSwgbWV0YSkge1xuICAgIGNvbnN0IHsgaVNjYWxlICwgdlNjYWxlICB9ID0gbWV0YTtcbiAgICBjb25zdCBpQXhpc0tleSA9IGlTY2FsZS5heGlzID09PSAneCcgPyAneCcgOiAneSc7XG4gICAgY29uc3QgdkF4aXNLZXkgPSB2U2NhbGUuYXhpcyA9PT0gJ3gnID8gJ3gnIDogJ3knO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgICBjb25zdCBhZGF0YSA9IG5ldyBBcnJheShrZXlzLmxlbmd0aCk7XG4gICAgbGV0IGksIGlsZW4sIGtleTtcbiAgICBmb3IoaSA9IDAsIGlsZW4gPSBrZXlzLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgIGFkYXRhW2ldID0ge1xuICAgICAgICAgICAgW2lBeGlzS2V5XToga2V5LFxuICAgICAgICAgICAgW3ZBeGlzS2V5XTogZGF0YVtrZXldXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBhZGF0YTtcbn1cbmZ1bmN0aW9uIGlzU3RhY2tlZChzY2FsZSwgbWV0YSkge1xuICAgIGNvbnN0IHN0YWNrZWQgPSBzY2FsZSAmJiBzY2FsZS5vcHRpb25zLnN0YWNrZWQ7XG4gICAgcmV0dXJuIHN0YWNrZWQgfHwgc3RhY2tlZCA9PT0gdW5kZWZpbmVkICYmIG1ldGEuc3RhY2sgIT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldFN0YWNrS2V5KGluZGV4U2NhbGUsIHZhbHVlU2NhbGUsIG1ldGEpIHtcbiAgICByZXR1cm4gYCR7aW5kZXhTY2FsZS5pZH0uJHt2YWx1ZVNjYWxlLmlkfS4ke21ldGEuc3RhY2sgfHwgbWV0YS50eXBlfWA7XG59XG5mdW5jdGlvbiBnZXRVc2VyQm91bmRzKHNjYWxlKSB7XG4gICAgY29uc3QgeyBtaW4gLCBtYXggLCBtaW5EZWZpbmVkICwgbWF4RGVmaW5lZCAgfSA9IHNjYWxlLmdldFVzZXJCb3VuZHMoKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBtaW46IG1pbkRlZmluZWQgPyBtaW4gOiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksXG4gICAgICAgIG1heDogbWF4RGVmaW5lZCA/IG1heCA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxuICAgIH07XG59XG5mdW5jdGlvbiBnZXRPckNyZWF0ZVN0YWNrKHN0YWNrcywgc3RhY2tLZXksIGluZGV4VmFsdWUpIHtcbiAgICBjb25zdCBzdWJTdGFjayA9IHN0YWNrc1tzdGFja0tleV0gfHwgKHN0YWNrc1tzdGFja0tleV0gPSB7fSk7XG4gICAgcmV0dXJuIHN1YlN0YWNrW2luZGV4VmFsdWVdIHx8IChzdWJTdGFja1tpbmRleFZhbHVlXSA9IHt9KTtcbn1cbmZ1bmN0aW9uIGdldExhc3RJbmRleEluU3RhY2soc3RhY2ssIHZTY2FsZSwgcG9zaXRpdmUsIHR5cGUpIHtcbiAgICBmb3IgKGNvbnN0IG1ldGEgb2YgdlNjYWxlLmdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKHR5cGUpLnJldmVyc2UoKSl7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gc3RhY2tbbWV0YS5pbmRleF07XG4gICAgICAgIGlmIChwb3NpdGl2ZSAmJiB2YWx1ZSA+IDAgfHwgIXBvc2l0aXZlICYmIHZhbHVlIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIG1ldGEuaW5kZXg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiB1cGRhdGVTdGFja3MoY29udHJvbGxlciwgcGFyc2VkKSB7XG4gICAgY29uc3QgeyBjaGFydCAsIF9jYWNoZWRNZXRhOiBtZXRhICB9ID0gY29udHJvbGxlcjtcbiAgICBjb25zdCBzdGFja3MgPSBjaGFydC5fc3RhY2tzIHx8IChjaGFydC5fc3RhY2tzID0ge30pO1xuICAgIGNvbnN0IHsgaVNjYWxlICwgdlNjYWxlICwgaW5kZXg6IGRhdGFzZXRJbmRleCAgfSA9IG1ldGE7XG4gICAgY29uc3QgaUF4aXMgPSBpU2NhbGUuYXhpcztcbiAgICBjb25zdCB2QXhpcyA9IHZTY2FsZS5heGlzO1xuICAgIGNvbnN0IGtleSA9IGdldFN0YWNrS2V5KGlTY2FsZSwgdlNjYWxlLCBtZXRhKTtcbiAgICBjb25zdCBpbGVuID0gcGFyc2VkLmxlbmd0aDtcbiAgICBsZXQgc3RhY2s7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBwYXJzZWRbaV07XG4gICAgICAgIGNvbnN0IHsgW2lBeGlzXTogaW5kZXggLCBbdkF4aXNdOiB2YWx1ZSAgfSA9IGl0ZW07XG4gICAgICAgIGNvbnN0IGl0ZW1TdGFja3MgPSBpdGVtLl9zdGFja3MgfHwgKGl0ZW0uX3N0YWNrcyA9IHt9KTtcbiAgICAgICAgc3RhY2sgPSBpdGVtU3RhY2tzW3ZBeGlzXSA9IGdldE9yQ3JlYXRlU3RhY2soc3RhY2tzLCBrZXksIGluZGV4KTtcbiAgICAgICAgc3RhY2tbZGF0YXNldEluZGV4XSA9IHZhbHVlO1xuICAgICAgICBzdGFjay5fdG9wID0gZ2V0TGFzdEluZGV4SW5TdGFjayhzdGFjaywgdlNjYWxlLCB0cnVlLCBtZXRhLnR5cGUpO1xuICAgICAgICBzdGFjay5fYm90dG9tID0gZ2V0TGFzdEluZGV4SW5TdGFjayhzdGFjaywgdlNjYWxlLCBmYWxzZSwgbWV0YS50eXBlKTtcbiAgICAgICAgY29uc3QgdmlzdWFsVmFsdWVzID0gc3RhY2suX3Zpc3VhbFZhbHVlcyB8fCAoc3RhY2suX3Zpc3VhbFZhbHVlcyA9IHt9KTtcbiAgICAgICAgdmlzdWFsVmFsdWVzW2RhdGFzZXRJbmRleF0gPSB2YWx1ZTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRGaXJzdFNjYWxlSWQoY2hhcnQsIGF4aXMpIHtcbiAgICBjb25zdCBzY2FsZXMgPSBjaGFydC5zY2FsZXM7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNjYWxlcykuZmlsdGVyKChrZXkpPT5zY2FsZXNba2V5XS5heGlzID09PSBheGlzKS5zaGlmdCgpO1xufVxuZnVuY3Rpb24gY3JlYXRlRGF0YXNldENvbnRleHQocGFyZW50LCBpbmRleCkge1xuICAgIHJldHVybiBjcmVhdGVDb250ZXh0KHBhcmVudCwge1xuICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICBkYXRhc2V0OiB1bmRlZmluZWQsXG4gICAgICAgIGRhdGFzZXRJbmRleDogaW5kZXgsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBtb2RlOiAnZGVmYXVsdCcsXG4gICAgICAgIHR5cGU6ICdkYXRhc2V0J1xuICAgIH0pO1xufVxuZnVuY3Rpb24gY3JlYXRlRGF0YUNvbnRleHQocGFyZW50LCBpbmRleCwgZWxlbWVudCkge1xuICAgIHJldHVybiBjcmVhdGVDb250ZXh0KHBhcmVudCwge1xuICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICBkYXRhSW5kZXg6IGluZGV4LFxuICAgICAgICBwYXJzZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgcmF3OiB1bmRlZmluZWQsXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBtb2RlOiAnZGVmYXVsdCcsXG4gICAgICAgIHR5cGU6ICdkYXRhJ1xuICAgIH0pO1xufVxuZnVuY3Rpb24gY2xlYXJTdGFja3MobWV0YSwgaXRlbXMpIHtcbiAgICBjb25zdCBkYXRhc2V0SW5kZXggPSBtZXRhLmNvbnRyb2xsZXIuaW5kZXg7XG4gICAgY29uc3QgYXhpcyA9IG1ldGEudlNjYWxlICYmIG1ldGEudlNjYWxlLmF4aXM7XG4gICAgaWYgKCFheGlzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXRlbXMgPSBpdGVtcyB8fCBtZXRhLl9wYXJzZWQ7XG4gICAgZm9yIChjb25zdCBwYXJzZWQgb2YgaXRlbXMpe1xuICAgICAgICBjb25zdCBzdGFja3MgPSBwYXJzZWQuX3N0YWNrcztcbiAgICAgICAgaWYgKCFzdGFja3MgfHwgc3RhY2tzW2F4aXNdID09PSB1bmRlZmluZWQgfHwgc3RhY2tzW2F4aXNdW2RhdGFzZXRJbmRleF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBzdGFja3NbYXhpc11bZGF0YXNldEluZGV4XTtcbiAgICAgICAgaWYgKHN0YWNrc1theGlzXS5fdmlzdWFsVmFsdWVzICE9PSB1bmRlZmluZWQgJiYgc3RhY2tzW2F4aXNdLl92aXN1YWxWYWx1ZXNbZGF0YXNldEluZGV4XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkZWxldGUgc3RhY2tzW2F4aXNdLl92aXN1YWxWYWx1ZXNbZGF0YXNldEluZGV4XTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmNvbnN0IGlzRGlyZWN0VXBkYXRlTW9kZSA9IChtb2RlKT0+bW9kZSA9PT0gJ3Jlc2V0JyB8fCBtb2RlID09PSAnbm9uZSc7XG5jb25zdCBjbG9uZUlmTm90U2hhcmVkID0gKGNhY2hlZCwgc2hhcmVkKT0+c2hhcmVkID8gY2FjaGVkIDogT2JqZWN0LmFzc2lnbih7fSwgY2FjaGVkKTtcbmNvbnN0IGNyZWF0ZVN0YWNrID0gKGNhblN0YWNrLCBtZXRhLCBjaGFydCk9PmNhblN0YWNrICYmICFtZXRhLmhpZGRlbiAmJiBtZXRhLl9zdGFja2VkICYmIHtcbiAgICAgICAga2V5czogZ2V0U29ydGVkRGF0YXNldEluZGljZXMoY2hhcnQsIHRydWUpLFxuICAgICAgICB2YWx1ZXM6IG51bGxcbiAgICB9O1xuY2xhc3MgRGF0YXNldENvbnRyb2xsZXIge1xuIHN0YXRpYyBkZWZhdWx0cyA9IHt9O1xuIHN0YXRpYyBkYXRhc2V0RWxlbWVudFR5cGUgPSBudWxsO1xuIHN0YXRpYyBkYXRhRWxlbWVudFR5cGUgPSBudWxsO1xuIGNvbnN0cnVjdG9yKGNoYXJ0LCBkYXRhc2V0SW5kZXgpe1xuICAgICAgICB0aGlzLmNoYXJ0ID0gY2hhcnQ7XG4gICAgICAgIHRoaXMuX2N0eCA9IGNoYXJ0LmN0eDtcbiAgICAgICAgdGhpcy5pbmRleCA9IGRhdGFzZXRJbmRleDtcbiAgICAgICAgdGhpcy5fY2FjaGVkRGF0YU9wdHMgPSB7fTtcbiAgICAgICAgdGhpcy5fY2FjaGVkTWV0YSA9IHRoaXMuZ2V0TWV0YSgpO1xuICAgICAgICB0aGlzLl90eXBlID0gdGhpcy5fY2FjaGVkTWV0YS50eXBlO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLl9wYXJzaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2RhdGEgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX29iamVjdERhdGEgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3NoYXJlZE9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2RyYXdTdGFydCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fZHJhd0NvdW50ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmVuYWJsZU9wdGlvblNoYXJpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdXBwb3J0c0RlY2ltYXRpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy4kY29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fc3luY0xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5kYXRhc2V0RWxlbWVudFR5cGUgPSBuZXcudGFyZ2V0LmRhdGFzZXRFbGVtZW50VHlwZTtcbiAgICAgICAgdGhpcy5kYXRhRWxlbWVudFR5cGUgPSBuZXcudGFyZ2V0LmRhdGFFbGVtZW50VHlwZTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgfVxuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyZSgpO1xuICAgICAgICB0aGlzLmxpbmtTY2FsZXMoKTtcbiAgICAgICAgbWV0YS5fc3RhY2tlZCA9IGlzU3RhY2tlZChtZXRhLnZTY2FsZSwgbWV0YSk7XG4gICAgICAgIHRoaXMuYWRkRWxlbWVudHMoKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5maWxsICYmICF0aGlzLmNoYXJ0LmlzUGx1Z2luRW5hYmxlZCgnZmlsbGVyJykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlRyaWVkIHRvIHVzZSB0aGUgJ2ZpbGwnIG9wdGlvbiB3aXRob3V0IHRoZSAnRmlsbGVyJyBwbHVnaW4gZW5hYmxlZC4gUGxlYXNlIGltcG9ydCBhbmQgcmVnaXN0ZXIgdGhlICdGaWxsZXInIHBsdWdpbiBhbmQgbWFrZSBzdXJlIGl0IGlzIG5vdCBkaXNhYmxlZCBpbiB0aGUgb3B0aW9uc1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVJbmRleChkYXRhc2V0SW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXggIT09IGRhdGFzZXRJbmRleCkge1xuICAgICAgICAgICAgY2xlYXJTdGFja3ModGhpcy5fY2FjaGVkTWV0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmRleCA9IGRhdGFzZXRJbmRleDtcbiAgICB9XG4gICAgbGlua1NjYWxlcygpIHtcbiAgICAgICAgY29uc3QgY2hhcnQgPSB0aGlzLmNoYXJ0O1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgZGF0YXNldCA9IHRoaXMuZ2V0RGF0YXNldCgpO1xuICAgICAgICBjb25zdCBjaG9vc2VJZCA9IChheGlzLCB4LCB5LCByKT0+YXhpcyA9PT0gJ3gnID8geCA6IGF4aXMgPT09ICdyJyA/IHIgOiB5O1xuICAgICAgICBjb25zdCB4aWQgPSBtZXRhLnhBeGlzSUQgPSB2YWx1ZU9yRGVmYXVsdChkYXRhc2V0LnhBeGlzSUQsIGdldEZpcnN0U2NhbGVJZChjaGFydCwgJ3gnKSk7XG4gICAgICAgIGNvbnN0IHlpZCA9IG1ldGEueUF4aXNJRCA9IHZhbHVlT3JEZWZhdWx0KGRhdGFzZXQueUF4aXNJRCwgZ2V0Rmlyc3RTY2FsZUlkKGNoYXJ0LCAneScpKTtcbiAgICAgICAgY29uc3QgcmlkID0gbWV0YS5yQXhpc0lEID0gdmFsdWVPckRlZmF1bHQoZGF0YXNldC5yQXhpc0lELCBnZXRGaXJzdFNjYWxlSWQoY2hhcnQsICdyJykpO1xuICAgICAgICBjb25zdCBpbmRleEF4aXMgPSBtZXRhLmluZGV4QXhpcztcbiAgICAgICAgY29uc3QgaWlkID0gbWV0YS5pQXhpc0lEID0gY2hvb3NlSWQoaW5kZXhBeGlzLCB4aWQsIHlpZCwgcmlkKTtcbiAgICAgICAgY29uc3QgdmlkID0gbWV0YS52QXhpc0lEID0gY2hvb3NlSWQoaW5kZXhBeGlzLCB5aWQsIHhpZCwgcmlkKTtcbiAgICAgICAgbWV0YS54U2NhbGUgPSB0aGlzLmdldFNjYWxlRm9ySWQoeGlkKTtcbiAgICAgICAgbWV0YS55U2NhbGUgPSB0aGlzLmdldFNjYWxlRm9ySWQoeWlkKTtcbiAgICAgICAgbWV0YS5yU2NhbGUgPSB0aGlzLmdldFNjYWxlRm9ySWQocmlkKTtcbiAgICAgICAgbWV0YS5pU2NhbGUgPSB0aGlzLmdldFNjYWxlRm9ySWQoaWlkKTtcbiAgICAgICAgbWV0YS52U2NhbGUgPSB0aGlzLmdldFNjYWxlRm9ySWQodmlkKTtcbiAgICB9XG4gICAgZ2V0RGF0YXNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1t0aGlzLmluZGV4XTtcbiAgICB9XG4gICAgZ2V0TWV0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhcnQuZ2V0RGF0YXNldE1ldGEodGhpcy5pbmRleCk7XG4gICAgfVxuIGdldFNjYWxlRm9ySWQoc2NhbGVJRCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFydC5zY2FsZXNbc2NhbGVJRF07XG4gICAgfVxuIF9nZXRPdGhlclNjYWxlKHNjYWxlKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICByZXR1cm4gc2NhbGUgPT09IG1ldGEuaVNjYWxlID8gbWV0YS52U2NhbGUgOiBtZXRhLmlTY2FsZTtcbiAgICB9XG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgncmVzZXQnKTtcbiAgICB9XG4gX2Rlc3Ryb3koKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBpZiAodGhpcy5fZGF0YSkge1xuICAgICAgICAgICAgdW5saXN0ZW5BcnJheUV2ZW50cyh0aGlzLl9kYXRhLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YS5fc3RhY2tlZCkge1xuICAgICAgICAgICAgY2xlYXJTdGFja3MobWV0YSk7XG4gICAgICAgIH1cbiAgICB9XG4gX2RhdGFDaGVjaygpIHtcbiAgICAgICAgY29uc3QgZGF0YXNldCA9IHRoaXMuZ2V0RGF0YXNldCgpO1xuICAgICAgICBjb25zdCBkYXRhID0gZGF0YXNldC5kYXRhIHx8IChkYXRhc2V0LmRhdGEgPSBbXSk7XG4gICAgICAgIGNvbnN0IF9kYXRhID0gdGhpcy5fZGF0YTtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBjb252ZXJ0T2JqZWN0RGF0YVRvQXJyYXkoZGF0YSwgbWV0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoX2RhdGEgIT09IGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgICAgIHVubGlzdGVuQXJyYXlFdmVudHMoX2RhdGEsIHRoaXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICAgICAgICAgIGNsZWFyU3RhY2tzKG1ldGEpO1xuICAgICAgICAgICAgICAgIG1ldGEuX3BhcnNlZCA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEgJiYgT2JqZWN0LmlzRXh0ZW5zaWJsZShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGxpc3RlbkFycmF5RXZlbnRzKGRhdGEsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fc3luY0xpc3QgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZEVsZW1lbnRzKCkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgdGhpcy5fZGF0YUNoZWNrKCk7XG4gICAgICAgIGlmICh0aGlzLmRhdGFzZXRFbGVtZW50VHlwZSkge1xuICAgICAgICAgICAgbWV0YS5kYXRhc2V0ID0gbmV3IHRoaXMuZGF0YXNldEVsZW1lbnRUeXBlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYnVpbGRPclVwZGF0ZUVsZW1lbnRzKHJlc2V0TmV3RWxlbWVudHMpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIGNvbnN0IGRhdGFzZXQgPSB0aGlzLmdldERhdGFzZXQoKTtcbiAgICAgICAgbGV0IHN0YWNrQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9kYXRhQ2hlY2soKTtcbiAgICAgICAgY29uc3Qgb2xkU3RhY2tlZCA9IG1ldGEuX3N0YWNrZWQ7XG4gICAgICAgIG1ldGEuX3N0YWNrZWQgPSBpc1N0YWNrZWQobWV0YS52U2NhbGUsIG1ldGEpO1xuICAgICAgICBpZiAobWV0YS5zdGFjayAhPT0gZGF0YXNldC5zdGFjaykge1xuICAgICAgICAgICAgc3RhY2tDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNsZWFyU3RhY2tzKG1ldGEpO1xuICAgICAgICAgICAgbWV0YS5zdGFjayA9IGRhdGFzZXQuc3RhY2s7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVzeW5jRWxlbWVudHMocmVzZXROZXdFbGVtZW50cyk7XG4gICAgICAgIGlmIChzdGFja0NoYW5nZWQgfHwgb2xkU3RhY2tlZCAhPT0gbWV0YS5fc3RhY2tlZCkge1xuICAgICAgICAgICAgdXBkYXRlU3RhY2tzKHRoaXMsIG1ldGEuX3BhcnNlZCk7XG4gICAgICAgICAgICBtZXRhLl9zdGFja2VkID0gaXNTdGFja2VkKG1ldGEudlNjYWxlLCBtZXRhKTtcbiAgICAgICAgfVxuICAgIH1cbiBjb25maWd1cmUoKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY2hhcnQuY29uZmlnO1xuICAgICAgICBjb25zdCBzY29wZUtleXMgPSBjb25maWcuZGF0YXNldFNjb3BlS2V5cyh0aGlzLl90eXBlKTtcbiAgICAgICAgY29uc3Qgc2NvcGVzID0gY29uZmlnLmdldE9wdGlvblNjb3Blcyh0aGlzLmdldERhdGFzZXQoKSwgc2NvcGVLZXlzLCB0cnVlKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gY29uZmlnLmNyZWF0ZVJlc29sdmVyKHNjb3BlcywgdGhpcy5nZXRDb250ZXh0KCkpO1xuICAgICAgICB0aGlzLl9wYXJzaW5nID0gdGhpcy5vcHRpb25zLnBhcnNpbmc7XG4gICAgICAgIHRoaXMuX2NhY2hlZERhdGFPcHRzID0ge307XG4gICAgfVxuIHBhcnNlKHN0YXJ0LCBjb3VudCkge1xuICAgICAgICBjb25zdCB7IF9jYWNoZWRNZXRhOiBtZXRhICwgX2RhdGE6IGRhdGEgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IGlTY2FsZSAsIF9zdGFja2VkICB9ID0gbWV0YTtcbiAgICAgICAgY29uc3QgaUF4aXMgPSBpU2NhbGUuYXhpcztcbiAgICAgICAgbGV0IHNvcnRlZCA9IHN0YXJ0ID09PSAwICYmIGNvdW50ID09PSBkYXRhLmxlbmd0aCA/IHRydWUgOiBtZXRhLl9zb3J0ZWQ7XG4gICAgICAgIGxldCBwcmV2ID0gc3RhcnQgPiAwICYmIG1ldGEuX3BhcnNlZFtzdGFydCAtIDFdO1xuICAgICAgICBsZXQgaSwgY3VyLCBwYXJzZWQ7XG4gICAgICAgIGlmICh0aGlzLl9wYXJzaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgbWV0YS5fcGFyc2VkID0gZGF0YTtcbiAgICAgICAgICAgIG1ldGEuX3NvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICBwYXJzZWQgPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzQXJyYXkoZGF0YVtzdGFydF0pKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkID0gdGhpcy5wYXJzZUFycmF5RGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkYXRhW3N0YXJ0XSkpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWQgPSB0aGlzLnBhcnNlT2JqZWN0RGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJzZWQgPSB0aGlzLnBhcnNlUHJpbWl0aXZlRGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaXNOb3RJbk9yZGVyQ29tcGFyZWRUb1ByZXYgPSAoKT0+Y3VyW2lBeGlzXSA9PT0gbnVsbCB8fCBwcmV2ICYmIGN1cltpQXhpc10gPCBwcmV2W2lBeGlzXTtcbiAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IGNvdW50OyArK2kpe1xuICAgICAgICAgICAgICAgIG1ldGEuX3BhcnNlZFtpICsgc3RhcnRdID0gY3VyID0gcGFyc2VkW2ldO1xuICAgICAgICAgICAgICAgIGlmIChzb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm90SW5PcmRlckNvbXBhcmVkVG9QcmV2KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHByZXYgPSBjdXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWV0YS5fc29ydGVkID0gc29ydGVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfc3RhY2tlZCkge1xuICAgICAgICAgICAgdXBkYXRlU3RhY2tzKHRoaXMsIHBhcnNlZCk7XG4gICAgICAgIH1cbiAgICB9XG4gcGFyc2VQcmltaXRpdmVEYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgICAgICBjb25zdCB7IGlTY2FsZSAsIHZTY2FsZSAgfSA9IG1ldGE7XG4gICAgICAgIGNvbnN0IGlBeGlzID0gaVNjYWxlLmF4aXM7XG4gICAgICAgIGNvbnN0IHZBeGlzID0gdlNjYWxlLmF4aXM7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IGlTY2FsZS5nZXRMYWJlbHMoKTtcbiAgICAgICAgY29uc3Qgc2luZ2xlU2NhbGUgPSBpU2NhbGUgPT09IHZTY2FsZTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gbmV3IEFycmF5KGNvdW50KTtcbiAgICAgICAgbGV0IGksIGlsZW4sIGluZGV4O1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSBjb3VudDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBpbmRleCA9IGkgKyBzdGFydDtcbiAgICAgICAgICAgIHBhcnNlZFtpXSA9IHtcbiAgICAgICAgICAgICAgICBbaUF4aXNdOiBzaW5nbGVTY2FsZSB8fCBpU2NhbGUucGFyc2UobGFiZWxzW2luZGV4XSwgaW5kZXgpLFxuICAgICAgICAgICAgICAgIFt2QXhpc106IHZTY2FsZS5wYXJzZShkYXRhW2luZGV4XSwgaW5kZXgpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfVxuIHBhcnNlQXJyYXlEYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgICAgICBjb25zdCB7IHhTY2FsZSAsIHlTY2FsZSAgfSA9IG1ldGE7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgICAgIGxldCBpLCBpbGVuLCBpbmRleCwgaXRlbTtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gY291bnQ7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgaW5kZXggPSBpICsgc3RhcnQ7XG4gICAgICAgICAgICBpdGVtID0gZGF0YVtpbmRleF07XG4gICAgICAgICAgICBwYXJzZWRbaV0gPSB7XG4gICAgICAgICAgICAgICAgeDogeFNjYWxlLnBhcnNlKGl0ZW1bMF0sIGluZGV4KSxcbiAgICAgICAgICAgICAgICB5OiB5U2NhbGUucGFyc2UoaXRlbVsxXSwgaW5kZXgpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfVxuIHBhcnNlT2JqZWN0RGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpIHtcbiAgICAgICAgY29uc3QgeyB4U2NhbGUgLCB5U2NhbGUgIH0gPSBtZXRhO1xuICAgICAgICBjb25zdCB7IHhBeGlzS2V5ID0neCcgLCB5QXhpc0tleSA9J3knICB9ID0gdGhpcy5fcGFyc2luZztcbiAgICAgICAgY29uc3QgcGFyc2VkID0gbmV3IEFycmF5KGNvdW50KTtcbiAgICAgICAgbGV0IGksIGlsZW4sIGluZGV4LCBpdGVtO1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSBjb3VudDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBpbmRleCA9IGkgKyBzdGFydDtcbiAgICAgICAgICAgIGl0ZW0gPSBkYXRhW2luZGV4XTtcbiAgICAgICAgICAgIHBhcnNlZFtpXSA9IHtcbiAgICAgICAgICAgICAgICB4OiB4U2NhbGUucGFyc2UocmVzb2x2ZU9iamVjdEtleShpdGVtLCB4QXhpc0tleSksIGluZGV4KSxcbiAgICAgICAgICAgICAgICB5OiB5U2NhbGUucGFyc2UocmVzb2x2ZU9iamVjdEtleShpdGVtLCB5QXhpc0tleSksIGluZGV4KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH1cbiBnZXRQYXJzZWQoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZE1ldGEuX3BhcnNlZFtpbmRleF07XG4gICAgfVxuIGdldERhdGFFbGVtZW50KGluZGV4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRNZXRhLmRhdGFbaW5kZXhdO1xuICAgIH1cbiBhcHBseVN0YWNrKHNjYWxlLCBwYXJzZWQsIG1vZGUpIHtcbiAgICAgICAgY29uc3QgY2hhcnQgPSB0aGlzLmNoYXJ0O1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZWRbc2NhbGUuYXhpc107XG4gICAgICAgIGNvbnN0IHN0YWNrID0ge1xuICAgICAgICAgICAga2V5czogZ2V0U29ydGVkRGF0YXNldEluZGljZXMoY2hhcnQsIHRydWUpLFxuICAgICAgICAgICAgdmFsdWVzOiBwYXJzZWQuX3N0YWNrc1tzY2FsZS5heGlzXS5fdmlzdWFsVmFsdWVzXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhcHBseVN0YWNrKHN0YWNrLCB2YWx1ZSwgbWV0YS5pbmRleCwge1xuICAgICAgICAgICAgbW9kZVxuICAgICAgICB9KTtcbiAgICB9XG4gdXBkYXRlUmFuZ2VGcm9tUGFyc2VkKHJhbmdlLCBzY2FsZSwgcGFyc2VkLCBzdGFjaykge1xuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHBhcnNlZFtzY2FsZS5heGlzXTtcbiAgICAgICAgbGV0IHZhbHVlID0gcGFyc2VkVmFsdWUgPT09IG51bGwgPyBOYU4gOiBwYXJzZWRWYWx1ZTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gc3RhY2sgJiYgcGFyc2VkLl9zdGFja3Nbc2NhbGUuYXhpc107XG4gICAgICAgIGlmIChzdGFjayAmJiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIHN0YWNrLnZhbHVlcyA9IHZhbHVlcztcbiAgICAgICAgICAgIHZhbHVlID0gYXBwbHlTdGFjayhzdGFjaywgcGFyc2VkVmFsdWUsIHRoaXMuX2NhY2hlZE1ldGEuaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJhbmdlLm1pbiA9IE1hdGgubWluKHJhbmdlLm1pbiwgdmFsdWUpO1xuICAgICAgICByYW5nZS5tYXggPSBNYXRoLm1heChyYW5nZS5tYXgsIHZhbHVlKTtcbiAgICB9XG4gZ2V0TWluTWF4KHNjYWxlLCBjYW5TdGFjaykge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgX3BhcnNlZCA9IG1ldGEuX3BhcnNlZDtcbiAgICAgICAgY29uc3Qgc29ydGVkID0gbWV0YS5fc29ydGVkICYmIHNjYWxlID09PSBtZXRhLmlTY2FsZTtcbiAgICAgICAgY29uc3QgaWxlbiA9IF9wYXJzZWQubGVuZ3RoO1xuICAgICAgICBjb25zdCBvdGhlclNjYWxlID0gdGhpcy5fZ2V0T3RoZXJTY2FsZShzY2FsZSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY3JlYXRlU3RhY2soY2FuU3RhY2ssIG1ldGEsIHRoaXMuY2hhcnQpO1xuICAgICAgICBjb25zdCByYW5nZSA9IHtcbiAgICAgICAgICAgIG1pbjogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgICAgICAgbWF4OiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyBtaW46IG90aGVyTWluICwgbWF4OiBvdGhlck1heCAgfSA9IGdldFVzZXJCb3VuZHMob3RoZXJTY2FsZSk7XG4gICAgICAgIGxldCBpLCBwYXJzZWQ7XG4gICAgICAgIGZ1bmN0aW9uIF9za2lwKCkge1xuICAgICAgICAgICAgcGFyc2VkID0gX3BhcnNlZFtpXTtcbiAgICAgICAgICAgIGNvbnN0IG90aGVyVmFsdWUgPSBwYXJzZWRbb3RoZXJTY2FsZS5heGlzXTtcbiAgICAgICAgICAgIHJldHVybiAhaXNOdW1iZXJGaW5pdGUocGFyc2VkW3NjYWxlLmF4aXNdKSB8fCBvdGhlck1pbiA+IG90aGVyVmFsdWUgfHwgb3RoZXJNYXggPCBvdGhlclZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGZvcihpID0gMDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBpZiAoX3NraXAoKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVSYW5nZUZyb21QYXJzZWQocmFuZ2UsIHNjYWxlLCBwYXJzZWQsIHN0YWNrKTtcbiAgICAgICAgICAgIGlmIChzb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc29ydGVkKSB7XG4gICAgICAgICAgICBmb3IoaSA9IGlsZW4gLSAxOyBpID49IDA7IC0taSl7XG4gICAgICAgICAgICAgICAgaWYgKF9za2lwKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUmFuZ2VGcm9tUGFyc2VkKHJhbmdlLCBzY2FsZSwgcGFyc2VkLCBzdGFjayk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH1cbiAgICBnZXRBbGxQYXJzZWRWYWx1ZXMoc2NhbGUpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5fY2FjaGVkTWV0YS5fcGFyc2VkO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgbGV0IGksIGlsZW4sIHZhbHVlO1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSBwYXJzZWQubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VkW2ldW3NjYWxlLmF4aXNdO1xuICAgICAgICAgICAgaWYgKGlzTnVtYmVyRmluaXRlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cbiBnZXRNYXhPdmVyZmxvdygpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiBnZXRMYWJlbEFuZFZhbHVlKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBpU2NhbGUgPSBtZXRhLmlTY2FsZTtcbiAgICAgICAgY29uc3QgdlNjYWxlID0gbWV0YS52U2NhbGU7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuZ2V0UGFyc2VkKGluZGV4KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhYmVsOiBpU2NhbGUgPyAnJyArIGlTY2FsZS5nZXRMYWJlbEZvclZhbHVlKHBhcnNlZFtpU2NhbGUuYXhpc10pIDogJycsXG4gICAgICAgICAgICB2YWx1ZTogdlNjYWxlID8gJycgKyB2U2NhbGUuZ2V0TGFiZWxGb3JWYWx1ZShwYXJzZWRbdlNjYWxlLmF4aXNdKSA6ICcnXG4gICAgICAgIH07XG4gICAgfVxuIF91cGRhdGUobW9kZSkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgdGhpcy51cGRhdGUobW9kZSB8fCAnZGVmYXVsdCcpO1xuICAgICAgICBtZXRhLl9jbGlwID0gdG9DbGlwKHZhbHVlT3JEZWZhdWx0KHRoaXMub3B0aW9ucy5jbGlwLCBkZWZhdWx0Q2xpcChtZXRhLnhTY2FsZSwgbWV0YS55U2NhbGUsIHRoaXMuZ2V0TWF4T3ZlcmZsb3coKSkpKTtcbiAgICB9XG4gdXBkYXRlKG1vZGUpIHt9XG4gICAgZHJhdygpIHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fY3R4O1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IG1ldGEuZGF0YSB8fCBbXTtcbiAgICAgICAgY29uc3QgYXJlYSA9IGNoYXJ0LmNoYXJ0QXJlYTtcbiAgICAgICAgY29uc3QgYWN0aXZlID0gW107XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5fZHJhd1N0YXJ0IHx8IDA7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy5fZHJhd0NvdW50IHx8IGVsZW1lbnRzLmxlbmd0aCAtIHN0YXJ0O1xuICAgICAgICBjb25zdCBkcmF3QWN0aXZlRWxlbWVudHNPblRvcCA9IHRoaXMub3B0aW9ucy5kcmF3QWN0aXZlRWxlbWVudHNPblRvcDtcbiAgICAgICAgbGV0IGk7XG4gICAgICAgIGlmIChtZXRhLmRhdGFzZXQpIHtcbiAgICAgICAgICAgIG1ldGEuZGF0YXNldC5kcmF3KGN0eCwgYXJlYSwgc3RhcnQsIGNvdW50KTtcbiAgICAgICAgfVxuICAgICAgICBmb3IoaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3VudDsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tpXTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmhpZGRlbikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuYWN0aXZlICYmIGRyYXdBY3RpdmVFbGVtZW50c09uVG9wKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuZHJhdyhjdHgsIGFyZWEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvcihpID0gMDsgaSA8IGFjdGl2ZS5sZW5ndGg7ICsraSl7XG4gICAgICAgICAgICBhY3RpdmVbaV0uZHJhdyhjdHgsIGFyZWEpO1xuICAgICAgICB9XG4gICAgfVxuIGdldFN0eWxlKGluZGV4LCBhY3RpdmUpIHtcbiAgICAgICAgY29uc3QgbW9kZSA9IGFjdGl2ZSA/ICdhY3RpdmUnIDogJ2RlZmF1bHQnO1xuICAgICAgICByZXR1cm4gaW5kZXggPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9jYWNoZWRNZXRhLmRhdGFzZXQgPyB0aGlzLnJlc29sdmVEYXRhc2V0RWxlbWVudE9wdGlvbnMobW9kZSkgOiB0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaW5kZXggfHwgMCwgbW9kZSk7XG4gICAgfVxuIGdldENvbnRleHQoaW5kZXgsIGFjdGl2ZSwgbW9kZSkge1xuICAgICAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5nZXREYXRhc2V0KCk7XG4gICAgICAgIGxldCBjb250ZXh0O1xuICAgICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMuX2NhY2hlZE1ldGEuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9jYWNoZWRNZXRhLmRhdGFbaW5kZXhdO1xuICAgICAgICAgICAgY29udGV4dCA9IGVsZW1lbnQuJGNvbnRleHQgfHwgKGVsZW1lbnQuJGNvbnRleHQgPSBjcmVhdGVEYXRhQ29udGV4dCh0aGlzLmdldENvbnRleHQoKSwgaW5kZXgsIGVsZW1lbnQpKTtcbiAgICAgICAgICAgIGNvbnRleHQucGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaW5kZXgpO1xuICAgICAgICAgICAgY29udGV4dC5yYXcgPSBkYXRhc2V0LmRhdGFbaW5kZXhdO1xuICAgICAgICAgICAgY29udGV4dC5pbmRleCA9IGNvbnRleHQuZGF0YUluZGV4ID0gaW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gdGhpcy4kY29udGV4dCB8fCAodGhpcy4kY29udGV4dCA9IGNyZWF0ZURhdGFzZXRDb250ZXh0KHRoaXMuY2hhcnQuZ2V0Q29udGV4dCgpLCB0aGlzLmluZGV4KSk7XG4gICAgICAgICAgICBjb250ZXh0LmRhdGFzZXQgPSBkYXRhc2V0O1xuICAgICAgICAgICAgY29udGV4dC5pbmRleCA9IGNvbnRleHQuZGF0YXNldEluZGV4ID0gdGhpcy5pbmRleDtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LmFjdGl2ZSA9ICEhYWN0aXZlO1xuICAgICAgICBjb250ZXh0Lm1vZGUgPSBtb2RlO1xuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG4gcmVzb2x2ZURhdGFzZXRFbGVtZW50T3B0aW9ucyhtb2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlRWxlbWVudE9wdGlvbnModGhpcy5kYXRhc2V0RWxlbWVudFR5cGUuaWQsIG1vZGUpO1xuICAgIH1cbiByZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGluZGV4LCBtb2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlRWxlbWVudE9wdGlvbnModGhpcy5kYXRhRWxlbWVudFR5cGUuaWQsIG1vZGUsIGluZGV4KTtcbiAgICB9XG4gX3Jlc29sdmVFbGVtZW50T3B0aW9ucyhlbGVtZW50VHlwZSwgbW9kZSA9ICdkZWZhdWx0JywgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlID0gbW9kZSA9PT0gJ2FjdGl2ZSc7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy5fY2FjaGVkRGF0YU9wdHM7XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gZWxlbWVudFR5cGUgKyAnLScgKyBtb2RlO1xuICAgICAgICBjb25zdCBjYWNoZWQgPSBjYWNoZVtjYWNoZUtleV07XG4gICAgICAgIGNvbnN0IHNoYXJpbmcgPSB0aGlzLmVuYWJsZU9wdGlvblNoYXJpbmcgJiYgZGVmaW5lZChpbmRleCk7XG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9uZUlmTm90U2hhcmVkKGNhY2hlZCwgc2hhcmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jaGFydC5jb25maWc7XG4gICAgICAgIGNvbnN0IHNjb3BlS2V5cyA9IGNvbmZpZy5kYXRhc2V0RWxlbWVudFNjb3BlS2V5cyh0aGlzLl90eXBlLCBlbGVtZW50VHlwZSk7XG4gICAgICAgIGNvbnN0IHByZWZpeGVzID0gYWN0aXZlID8gW1xuICAgICAgICAgICAgYCR7ZWxlbWVudFR5cGV9SG92ZXJgLFxuICAgICAgICAgICAgJ2hvdmVyJyxcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlLFxuICAgICAgICAgICAgJydcbiAgICAgICAgXSA6IFtcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlLFxuICAgICAgICAgICAgJydcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3Qgc2NvcGVzID0gY29uZmlnLmdldE9wdGlvblNjb3Blcyh0aGlzLmdldERhdGFzZXQoKSwgc2NvcGVLZXlzKTtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0cy5lbGVtZW50c1tlbGVtZW50VHlwZV0pO1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gKCk9PnRoaXMuZ2V0Q29udGV4dChpbmRleCwgYWN0aXZlLCBtb2RlKTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gY29uZmlnLnJlc29sdmVOYW1lZE9wdGlvbnMoc2NvcGVzLCBuYW1lcywgY29udGV4dCwgcHJlZml4ZXMpO1xuICAgICAgICBpZiAodmFsdWVzLiRzaGFyZWQpIHtcbiAgICAgICAgICAgIHZhbHVlcy4kc2hhcmVkID0gc2hhcmluZztcbiAgICAgICAgICAgIGNhY2hlW2NhY2hlS2V5XSA9IE9iamVjdC5mcmVlemUoY2xvbmVJZk5vdFNoYXJlZCh2YWx1ZXMsIHNoYXJpbmcpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cbiBfcmVzb2x2ZUFuaW1hdGlvbnMoaW5kZXgsIHRyYW5zaXRpb24sIGFjdGl2ZSkge1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy5fY2FjaGVkRGF0YU9wdHM7XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gYGFuaW1hdGlvbi0ke3RyYW5zaXRpb259YDtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gY2FjaGVbY2FjaGVLZXldO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvcHRpb25zO1xuICAgICAgICBpZiAoY2hhcnQub3B0aW9ucy5hbmltYXRpb24gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNoYXJ0LmNvbmZpZztcbiAgICAgICAgICAgIGNvbnN0IHNjb3BlS2V5cyA9IGNvbmZpZy5kYXRhc2V0QW5pbWF0aW9uU2NvcGVLZXlzKHRoaXMuX3R5cGUsIHRyYW5zaXRpb24pO1xuICAgICAgICAgICAgY29uc3Qgc2NvcGVzID0gY29uZmlnLmdldE9wdGlvblNjb3Blcyh0aGlzLmdldERhdGFzZXQoKSwgc2NvcGVLZXlzKTtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBjb25maWcuY3JlYXRlUmVzb2x2ZXIoc2NvcGVzLCB0aGlzLmdldENvbnRleHQoaW5kZXgsIGFjdGl2ZSwgdHJhbnNpdGlvbikpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbnMgPSBuZXcgQW5pbWF0aW9ucyhjaGFydCwgb3B0aW9ucyAmJiBvcHRpb25zLmFuaW1hdGlvbnMpO1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLl9jYWNoZWFibGUpIHtcbiAgICAgICAgICAgIGNhY2hlW2NhY2hlS2V5XSA9IE9iamVjdC5mcmVlemUoYW5pbWF0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFuaW1hdGlvbnM7XG4gICAgfVxuIGdldFNoYXJlZE9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICBpZiAoIW9wdGlvbnMuJHNoYXJlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zaGFyZWRPcHRpb25zIHx8ICh0aGlzLl9zaGFyZWRPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucykpO1xuICAgIH1cbiBpbmNsdWRlT3B0aW9ucyhtb2RlLCBzaGFyZWRPcHRpb25zKSB7XG4gICAgICAgIHJldHVybiAhc2hhcmVkT3B0aW9ucyB8fCBpc0RpcmVjdFVwZGF0ZU1vZGUobW9kZSkgfHwgdGhpcy5jaGFydC5fYW5pbWF0aW9uc0Rpc2FibGVkO1xuICAgIH1cbiBfZ2V0U2hhcmVkT3B0aW9ucyhzdGFydCwgbW9kZSkge1xuICAgICAgICBjb25zdCBmaXJzdE9wdHMgPSB0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoc3RhcnQsIG1vZGUpO1xuICAgICAgICBjb25zdCBwcmV2aW91c2x5U2hhcmVkT3B0aW9ucyA9IHRoaXMuX3NoYXJlZE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHNoYXJlZE9wdGlvbnMgPSB0aGlzLmdldFNoYXJlZE9wdGlvbnMoZmlyc3RPcHRzKTtcbiAgICAgICAgY29uc3QgaW5jbHVkZU9wdGlvbnMgPSB0aGlzLmluY2x1ZGVPcHRpb25zKG1vZGUsIHNoYXJlZE9wdGlvbnMpIHx8IHNoYXJlZE9wdGlvbnMgIT09IHByZXZpb3VzbHlTaGFyZWRPcHRpb25zO1xuICAgICAgICB0aGlzLnVwZGF0ZVNoYXJlZE9wdGlvbnMoc2hhcmVkT3B0aW9ucywgbW9kZSwgZmlyc3RPcHRzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNoYXJlZE9wdGlvbnMsXG4gICAgICAgICAgICBpbmNsdWRlT3B0aW9uc1xuICAgICAgICB9O1xuICAgIH1cbiB1cGRhdGVFbGVtZW50KGVsZW1lbnQsIGluZGV4LCBwcm9wZXJ0aWVzLCBtb2RlKSB7XG4gICAgICAgIGlmIChpc0RpcmVjdFVwZGF0ZU1vZGUobW9kZSkpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudCwgcHJvcGVydGllcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlQW5pbWF0aW9ucyhpbmRleCwgbW9kZSkudXBkYXRlKGVsZW1lbnQsIHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgfVxuIHVwZGF0ZVNoYXJlZE9wdGlvbnMoc2hhcmVkT3B0aW9ucywgbW9kZSwgbmV3T3B0aW9ucykge1xuICAgICAgICBpZiAoc2hhcmVkT3B0aW9ucyAmJiAhaXNEaXJlY3RVcGRhdGVNb2RlKG1vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlQW5pbWF0aW9ucyh1bmRlZmluZWQsIG1vZGUpLnVwZGF0ZShzaGFyZWRPcHRpb25zLCBuZXdPcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiBfc2V0U3R5bGUoZWxlbWVudCwgaW5kZXgsIG1vZGUsIGFjdGl2ZSkge1xuICAgICAgICBlbGVtZW50LmFjdGl2ZSA9IGFjdGl2ZTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0U3R5bGUoaW5kZXgsIGFjdGl2ZSk7XG4gICAgICAgIHRoaXMuX3Jlc29sdmVBbmltYXRpb25zKGluZGV4LCBtb2RlLCBhY3RpdmUpLnVwZGF0ZShlbGVtZW50LCB7XG4gICAgICAgICAgICBvcHRpb25zOiAhYWN0aXZlICYmIHRoaXMuZ2V0U2hhcmVkT3B0aW9ucyhvcHRpb25zKSB8fCBvcHRpb25zXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZW1vdmVIb3ZlclN0eWxlKGVsZW1lbnQsIGRhdGFzZXRJbmRleCwgaW5kZXgpIHtcbiAgICAgICAgdGhpcy5fc2V0U3R5bGUoZWxlbWVudCwgaW5kZXgsICdhY3RpdmUnLCBmYWxzZSk7XG4gICAgfVxuICAgIHNldEhvdmVyU3R5bGUoZWxlbWVudCwgZGF0YXNldEluZGV4LCBpbmRleCkge1xuICAgICAgICB0aGlzLl9zZXRTdHlsZShlbGVtZW50LCBpbmRleCwgJ2FjdGl2ZScsIHRydWUpO1xuICAgIH1cbiBfcmVtb3ZlRGF0YXNldEhvdmVyU3R5bGUoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9jYWNoZWRNZXRhLmRhdGFzZXQ7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRTdHlsZShlbGVtZW50LCB1bmRlZmluZWQsICdhY3RpdmUnLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gX3NldERhdGFzZXRIb3ZlclN0eWxlKCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fY2FjaGVkTWV0YS5kYXRhc2V0O1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5fc2V0U3R5bGUoZWxlbWVudCwgdW5kZWZpbmVkLCAnYWN0aXZlJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gX3Jlc3luY0VsZW1lbnRzKHJlc2V0TmV3RWxlbWVudHMpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5fY2FjaGVkTWV0YS5kYXRhO1xuICAgICAgICBmb3IgKGNvbnN0IFttZXRob2QsIGFyZzEsIGFyZzJdIG9mIHRoaXMuX3N5bmNMaXN0KXtcbiAgICAgICAgICAgIHRoaXNbbWV0aG9kXShhcmcxLCBhcmcyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zeW5jTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBudW1NZXRhID0gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICBjb25zdCBudW1EYXRhID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gTWF0aC5taW4obnVtRGF0YSwgbnVtTWV0YSk7XG4gICAgICAgIGlmIChjb3VudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJzZSgwLCBjb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG51bURhdGEgPiBudW1NZXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnNlcnRFbGVtZW50cyhudW1NZXRhLCBudW1EYXRhIC0gbnVtTWV0YSwgcmVzZXROZXdFbGVtZW50cyk7XG4gICAgICAgIH0gZWxzZSBpZiAobnVtRGF0YSA8IG51bU1ldGEpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUVsZW1lbnRzKG51bURhdGEsIG51bU1ldGEgLSBudW1EYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbiBfaW5zZXJ0RWxlbWVudHMoc3RhcnQsIGNvdW50LCByZXNldE5ld0VsZW1lbnRzID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgZGF0YSA9IG1ldGEuZGF0YTtcbiAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBjb3VudDtcbiAgICAgICAgbGV0IGk7XG4gICAgICAgIGNvbnN0IG1vdmUgPSAoYXJyKT0+e1xuICAgICAgICAgICAgYXJyLmxlbmd0aCArPSBjb3VudDtcbiAgICAgICAgICAgIGZvcihpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gZW5kOyBpLS0pe1xuICAgICAgICAgICAgICAgIGFycltpXSA9IGFycltpIC0gY291bnRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtb3ZlKGRhdGEpO1xuICAgICAgICBmb3IoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpe1xuICAgICAgICAgICAgZGF0YVtpXSA9IG5ldyB0aGlzLmRhdGFFbGVtZW50VHlwZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9wYXJzaW5nKSB7XG4gICAgICAgICAgICBtb3ZlKG1ldGEuX3BhcnNlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYXJzZShzdGFydCwgY291bnQpO1xuICAgICAgICBpZiAocmVzZXROZXdFbGVtZW50cykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50cyhkYXRhLCBzdGFydCwgY291bnQsICdyZXNldCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZUVsZW1lbnRzKGVsZW1lbnQsIHN0YXJ0LCBjb3VudCwgbW9kZSkge31cbiBfcmVtb3ZlRWxlbWVudHMoc3RhcnQsIGNvdW50KSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBpZiAodGhpcy5fcGFyc2luZykge1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZCA9IG1ldGEuX3BhcnNlZC5zcGxpY2Uoc3RhcnQsIGNvdW50KTtcbiAgICAgICAgICAgIGlmIChtZXRhLl9zdGFja2VkKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJTdGFja3MobWV0YSwgcmVtb3ZlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbWV0YS5kYXRhLnNwbGljZShzdGFydCwgY291bnQpO1xuICAgIH1cbiBfc3luYyhhcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLl9wYXJzaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9zeW5jTGlzdC5wdXNoKGFyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgW21ldGhvZCwgYXJnMSwgYXJnMl0gPSBhcmdzO1xuICAgICAgICAgICAgdGhpc1ttZXRob2RdKGFyZzEsIGFyZzIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhcnQuX2RhdGFDaGFuZ2VzLnB1c2goW1xuICAgICAgICAgICAgdGhpcy5pbmRleCxcbiAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIF9vbkRhdGFQdXNoKCkge1xuICAgICAgICBjb25zdCBjb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHRoaXMuX3N5bmMoW1xuICAgICAgICAgICAgJ19pbnNlcnRFbGVtZW50cycsXG4gICAgICAgICAgICB0aGlzLmdldERhdGFzZXQoKS5kYXRhLmxlbmd0aCAtIGNvdW50LFxuICAgICAgICAgICAgY291bnRcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIF9vbkRhdGFQb3AoKSB7XG4gICAgICAgIHRoaXMuX3N5bmMoW1xuICAgICAgICAgICAgJ19yZW1vdmVFbGVtZW50cycsXG4gICAgICAgICAgICB0aGlzLl9jYWNoZWRNZXRhLmRhdGEubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIF9vbkRhdGFTaGlmdCgpIHtcbiAgICAgICAgdGhpcy5fc3luYyhbXG4gICAgICAgICAgICAnX3JlbW92ZUVsZW1lbnRzJyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAxXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBfb25EYXRhU3BsaWNlKHN0YXJ0LCBjb3VudCkge1xuICAgICAgICBpZiAoY291bnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N5bmMoW1xuICAgICAgICAgICAgICAgICdfcmVtb3ZlRWxlbWVudHMnLFxuICAgICAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgICAgIGNvdW50XG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuICAgICAgICBpZiAobmV3Q291bnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N5bmMoW1xuICAgICAgICAgICAgICAgICdfaW5zZXJ0RWxlbWVudHMnLFxuICAgICAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgICAgIG5ld0NvdW50XG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfb25EYXRhVW5zaGlmdCgpIHtcbiAgICAgICAgdGhpcy5fc3luYyhbXG4gICAgICAgICAgICAnX2luc2VydEVsZW1lbnRzJyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoXG4gICAgICAgIF0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0QWxsU2NhbGVWYWx1ZXMoc2NhbGUsIHR5cGUpIHtcbiAgICBpZiAoIXNjYWxlLl9jYWNoZS4kYmFyKSB7XG4gICAgICAgIGNvbnN0IHZpc2libGVNZXRhcyA9IHNjYWxlLmdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKHR5cGUpO1xuICAgICAgICBsZXQgdmFsdWVzID0gW107XG4gICAgICAgIGZvcihsZXQgaSA9IDAsIGlsZW4gPSB2aXNpYmxlTWV0YXMubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKXtcbiAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQodmlzaWJsZU1ldGFzW2ldLmNvbnRyb2xsZXIuZ2V0QWxsUGFyc2VkVmFsdWVzKHNjYWxlKSk7XG4gICAgICAgIH1cbiAgICAgICAgc2NhbGUuX2NhY2hlLiRiYXIgPSBfYXJyYXlVbmlxdWUodmFsdWVzLnNvcnQoKGEsIGIpPT5hIC0gYikpO1xuICAgIH1cbiAgICByZXR1cm4gc2NhbGUuX2NhY2hlLiRiYXI7XG59XG4gZnVuY3Rpb24gY29tcHV0ZU1pblNhbXBsZVNpemUobWV0YSkge1xuICAgIGNvbnN0IHNjYWxlID0gbWV0YS5pU2NhbGU7XG4gICAgY29uc3QgdmFsdWVzID0gZ2V0QWxsU2NhbGVWYWx1ZXMoc2NhbGUsIG1ldGEudHlwZSk7XG4gICAgbGV0IG1pbiA9IHNjYWxlLl9sZW5ndGg7XG4gICAgbGV0IGksIGlsZW4sIGN1cnIsIHByZXY7XG4gICAgY29uc3QgdXBkYXRlTWluQW5kUHJldiA9ICgpPT57XG4gICAgICAgIGlmIChjdXJyID09PSAzMjc2NyB8fCBjdXJyID09PSAtMzI3NjgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmaW5lZChwcmV2KSkge1xuICAgICAgICAgICAgbWluID0gTWF0aC5taW4obWluLCBNYXRoLmFicyhjdXJyIC0gcHJldikgfHwgbWluKTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2ID0gY3VycjtcbiAgICB9O1xuICAgIGZvcihpID0gMCwgaWxlbiA9IHZhbHVlcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICBjdXJyID0gc2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZXNbaV0pO1xuICAgICAgICB1cGRhdGVNaW5BbmRQcmV2KCk7XG4gICAgfVxuICAgIHByZXYgPSB1bmRlZmluZWQ7XG4gICAgZm9yKGkgPSAwLCBpbGVuID0gc2NhbGUudGlja3MubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgY3VyciA9IHNjYWxlLmdldFBpeGVsRm9yVGljayhpKTtcbiAgICAgICAgdXBkYXRlTWluQW5kUHJldigpO1xuICAgIH1cbiAgICByZXR1cm4gbWluO1xufVxuIGZ1bmN0aW9uIGNvbXB1dGVGaXRDYXRlZ29yeVRyYWl0cyhpbmRleCwgcnVsZXIsIG9wdGlvbnMsIHN0YWNrQ291bnQpIHtcbiAgICBjb25zdCB0aGlja25lc3MgPSBvcHRpb25zLmJhclRoaWNrbmVzcztcbiAgICBsZXQgc2l6ZSwgcmF0aW87XG4gICAgaWYgKGlzTnVsbE9yVW5kZWYodGhpY2tuZXNzKSkge1xuICAgICAgICBzaXplID0gcnVsZXIubWluICogb3B0aW9ucy5jYXRlZ29yeVBlcmNlbnRhZ2U7XG4gICAgICAgIHJhdGlvID0gb3B0aW9ucy5iYXJQZXJjZW50YWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNpemUgPSB0aGlja25lc3MgKiBzdGFja0NvdW50O1xuICAgICAgICByYXRpbyA9IDE7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGNodW5rOiBzaXplIC8gc3RhY2tDb3VudCxcbiAgICAgICAgcmF0aW8sXG4gICAgICAgIHN0YXJ0OiBydWxlci5waXhlbHNbaW5kZXhdIC0gc2l6ZSAvIDJcbiAgICB9O1xufVxuIGZ1bmN0aW9uIGNvbXB1dGVGbGV4Q2F0ZWdvcnlUcmFpdHMoaW5kZXgsIHJ1bGVyLCBvcHRpb25zLCBzdGFja0NvdW50KSB7XG4gICAgY29uc3QgcGl4ZWxzID0gcnVsZXIucGl4ZWxzO1xuICAgIGNvbnN0IGN1cnIgPSBwaXhlbHNbaW5kZXhdO1xuICAgIGxldCBwcmV2ID0gaW5kZXggPiAwID8gcGl4ZWxzW2luZGV4IC0gMV0gOiBudWxsO1xuICAgIGxldCBuZXh0ID0gaW5kZXggPCBwaXhlbHMubGVuZ3RoIC0gMSA/IHBpeGVsc1tpbmRleCArIDFdIDogbnVsbDtcbiAgICBjb25zdCBwZXJjZW50ID0gb3B0aW9ucy5jYXRlZ29yeVBlcmNlbnRhZ2U7XG4gICAgaWYgKHByZXYgPT09IG51bGwpIHtcbiAgICAgICAgcHJldiA9IGN1cnIgLSAobmV4dCA9PT0gbnVsbCA/IHJ1bGVyLmVuZCAtIHJ1bGVyLnN0YXJ0IDogbmV4dCAtIGN1cnIpO1xuICAgIH1cbiAgICBpZiAobmV4dCA9PT0gbnVsbCkge1xuICAgICAgICBuZXh0ID0gY3VyciArIGN1cnIgLSBwcmV2O1xuICAgIH1cbiAgICBjb25zdCBzdGFydCA9IGN1cnIgLSAoY3VyciAtIE1hdGgubWluKHByZXYsIG5leHQpKSAvIDIgKiBwZXJjZW50O1xuICAgIGNvbnN0IHNpemUgPSBNYXRoLmFicyhuZXh0IC0gcHJldikgLyAyICogcGVyY2VudDtcbiAgICByZXR1cm4ge1xuICAgICAgICBjaHVuazogc2l6ZSAvIHN0YWNrQ291bnQsXG4gICAgICAgIHJhdGlvOiBvcHRpb25zLmJhclBlcmNlbnRhZ2UsXG4gICAgICAgIHN0YXJ0XG4gICAgfTtcbn1cbmZ1bmN0aW9uIHBhcnNlRmxvYXRCYXIoZW50cnksIGl0ZW0sIHZTY2FsZSwgaSkge1xuICAgIGNvbnN0IHN0YXJ0VmFsdWUgPSB2U2NhbGUucGFyc2UoZW50cnlbMF0sIGkpO1xuICAgIGNvbnN0IGVuZFZhbHVlID0gdlNjYWxlLnBhcnNlKGVudHJ5WzFdLCBpKTtcbiAgICBjb25zdCBtaW4gPSBNYXRoLm1pbihzdGFydFZhbHVlLCBlbmRWYWx1ZSk7XG4gICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoc3RhcnRWYWx1ZSwgZW5kVmFsdWUpO1xuICAgIGxldCBiYXJTdGFydCA9IG1pbjtcbiAgICBsZXQgYmFyRW5kID0gbWF4O1xuICAgIGlmIChNYXRoLmFicyhtaW4pID4gTWF0aC5hYnMobWF4KSkge1xuICAgICAgICBiYXJTdGFydCA9IG1heDtcbiAgICAgICAgYmFyRW5kID0gbWluO1xuICAgIH1cbiAgICBpdGVtW3ZTY2FsZS5heGlzXSA9IGJhckVuZDtcbiAgICBpdGVtLl9jdXN0b20gPSB7XG4gICAgICAgIGJhclN0YXJ0LFxuICAgICAgICBiYXJFbmQsXG4gICAgICAgIHN0YXJ0OiBzdGFydFZhbHVlLFxuICAgICAgICBlbmQ6IGVuZFZhbHVlLFxuICAgICAgICBtaW4sXG4gICAgICAgIG1heFxuICAgIH07XG59XG5mdW5jdGlvbiBwYXJzZVZhbHVlKGVudHJ5LCBpdGVtLCB2U2NhbGUsIGkpIHtcbiAgICBpZiAoaXNBcnJheShlbnRyeSkpIHtcbiAgICAgICAgcGFyc2VGbG9hdEJhcihlbnRyeSwgaXRlbSwgdlNjYWxlLCBpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtW3ZTY2FsZS5heGlzXSA9IHZTY2FsZS5wYXJzZShlbnRyeSwgaSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtO1xufVxuZnVuY3Rpb24gcGFyc2VBcnJheU9yUHJpbWl0aXZlKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgIGNvbnN0IGlTY2FsZSA9IG1ldGEuaVNjYWxlO1xuICAgIGNvbnN0IHZTY2FsZSA9IG1ldGEudlNjYWxlO1xuICAgIGNvbnN0IGxhYmVscyA9IGlTY2FsZS5nZXRMYWJlbHMoKTtcbiAgICBjb25zdCBzaW5nbGVTY2FsZSA9IGlTY2FsZSA9PT0gdlNjYWxlO1xuICAgIGNvbnN0IHBhcnNlZCA9IFtdO1xuICAgIGxldCBpLCBpbGVuLCBpdGVtLCBlbnRyeTtcbiAgICBmb3IoaSA9IHN0YXJ0LCBpbGVuID0gc3RhcnQgKyBjb3VudDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIGVudHJ5ID0gZGF0YVtpXTtcbiAgICAgICAgaXRlbSA9IHt9O1xuICAgICAgICBpdGVtW2lTY2FsZS5heGlzXSA9IHNpbmdsZVNjYWxlIHx8IGlTY2FsZS5wYXJzZShsYWJlbHNbaV0sIGkpO1xuICAgICAgICBwYXJzZWQucHVzaChwYXJzZVZhbHVlKGVudHJ5LCBpdGVtLCB2U2NhbGUsIGkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbn1cbmZ1bmN0aW9uIGlzRmxvYXRCYXIoY3VzdG9tKSB7XG4gICAgcmV0dXJuIGN1c3RvbSAmJiBjdXN0b20uYmFyU3RhcnQgIT09IHVuZGVmaW5lZCAmJiBjdXN0b20uYmFyRW5kICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBiYXJTaWduKHNpemUsIHZTY2FsZSwgYWN0dWFsQmFzZSkge1xuICAgIGlmIChzaXplICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBzaWduKHNpemUpO1xuICAgIH1cbiAgICByZXR1cm4gKHZTY2FsZS5pc0hvcml6b250YWwoKSA/IDEgOiAtMSkgKiAodlNjYWxlLm1pbiA+PSBhY3R1YWxCYXNlID8gMSA6IC0xKTtcbn1cbmZ1bmN0aW9uIGJvcmRlclByb3BzKHByb3BlcnRpZXMpIHtcbiAgICBsZXQgcmV2ZXJzZSwgc3RhcnQsIGVuZCwgdG9wLCBib3R0b207XG4gICAgaWYgKHByb3BlcnRpZXMuaG9yaXpvbnRhbCkge1xuICAgICAgICByZXZlcnNlID0gcHJvcGVydGllcy5iYXNlID4gcHJvcGVydGllcy54O1xuICAgICAgICBzdGFydCA9ICdsZWZ0JztcbiAgICAgICAgZW5kID0gJ3JpZ2h0JztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXZlcnNlID0gcHJvcGVydGllcy5iYXNlIDwgcHJvcGVydGllcy55O1xuICAgICAgICBzdGFydCA9ICdib3R0b20nO1xuICAgICAgICBlbmQgPSAndG9wJztcbiAgICB9XG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgICAgdG9wID0gJ2VuZCc7XG4gICAgICAgIGJvdHRvbSA9ICdzdGFydCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdG9wID0gJ3N0YXJ0JztcbiAgICAgICAgYm90dG9tID0gJ2VuZCc7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBlbmQsXG4gICAgICAgIHJldmVyc2UsXG4gICAgICAgIHRvcCxcbiAgICAgICAgYm90dG9tXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHNldEJvcmRlclNraXBwZWQocHJvcGVydGllcywgb3B0aW9ucywgc3RhY2ssIGluZGV4KSB7XG4gICAgbGV0IGVkZ2UgPSBvcHRpb25zLmJvcmRlclNraXBwZWQ7XG4gICAgY29uc3QgcmVzID0ge307XG4gICAgaWYgKCFlZGdlKSB7XG4gICAgICAgIHByb3BlcnRpZXMuYm9yZGVyU2tpcHBlZCA9IHJlcztcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZWRnZSA9PT0gdHJ1ZSkge1xuICAgICAgICBwcm9wZXJ0aWVzLmJvcmRlclNraXBwZWQgPSB7XG4gICAgICAgICAgICB0b3A6IHRydWUsXG4gICAgICAgICAgICByaWdodDogdHJ1ZSxcbiAgICAgICAgICAgIGJvdHRvbTogdHJ1ZSxcbiAgICAgICAgICAgIGxlZnQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IHN0YXJ0ICwgZW5kICwgcmV2ZXJzZSAsIHRvcCAsIGJvdHRvbSAgfSA9IGJvcmRlclByb3BzKHByb3BlcnRpZXMpO1xuICAgIGlmIChlZGdlID09PSAnbWlkZGxlJyAmJiBzdGFjaykge1xuICAgICAgICBwcm9wZXJ0aWVzLmVuYWJsZUJvcmRlclJhZGl1cyA9IHRydWU7XG4gICAgICAgIGlmICgoc3RhY2suX3RvcCB8fCAwKSA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgIGVkZ2UgPSB0b3A7XG4gICAgICAgIH0gZWxzZSBpZiAoKHN0YWNrLl9ib3R0b20gfHwgMCkgPT09IGluZGV4KSB7XG4gICAgICAgICAgICBlZGdlID0gYm90dG9tO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzW3BhcnNlRWRnZShib3R0b20sIHN0YXJ0LCBlbmQsIHJldmVyc2UpXSA9IHRydWU7XG4gICAgICAgICAgICBlZGdlID0gdG9wO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlc1twYXJzZUVkZ2UoZWRnZSwgc3RhcnQsIGVuZCwgcmV2ZXJzZSldID0gdHJ1ZTtcbiAgICBwcm9wZXJ0aWVzLmJvcmRlclNraXBwZWQgPSByZXM7XG59XG5mdW5jdGlvbiBwYXJzZUVkZ2UoZWRnZSwgYSwgYiwgcmV2ZXJzZSkge1xuICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICAgIGVkZ2UgPSBzd2FwKGVkZ2UsIGEsIGIpO1xuICAgICAgICBlZGdlID0gc3RhcnRFbmQoZWRnZSwgYiwgYSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZWRnZSA9IHN0YXJ0RW5kKGVkZ2UsIGEsIGIpO1xuICAgIH1cbiAgICByZXR1cm4gZWRnZTtcbn1cbmZ1bmN0aW9uIHN3YXAob3JpZywgdjEsIHYyKSB7XG4gICAgcmV0dXJuIG9yaWcgPT09IHYxID8gdjIgOiBvcmlnID09PSB2MiA/IHYxIDogb3JpZztcbn1cbmZ1bmN0aW9uIHN0YXJ0RW5kKHYsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gdiA9PT0gJ3N0YXJ0JyA/IHN0YXJ0IDogdiA9PT0gJ2VuZCcgPyBlbmQgOiB2O1xufVxuZnVuY3Rpb24gc2V0SW5mbGF0ZUFtb3VudChwcm9wZXJ0aWVzLCB7IGluZmxhdGVBbW91bnQgIH0sIHJhdGlvKSB7XG4gICAgcHJvcGVydGllcy5pbmZsYXRlQW1vdW50ID0gaW5mbGF0ZUFtb3VudCA9PT0gJ2F1dG8nID8gcmF0aW8gPT09IDEgPyAwLjMzIDogMCA6IGluZmxhdGVBbW91bnQ7XG59XG5jbGFzcyBCYXJDb250cm9sbGVyIGV4dGVuZHMgRGF0YXNldENvbnRyb2xsZXIge1xuICAgIHN0YXRpYyBpZCA9ICdiYXInO1xuIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICAgICAgZGF0YXNldEVsZW1lbnRUeXBlOiBmYWxzZSxcbiAgICAgICAgZGF0YUVsZW1lbnRUeXBlOiAnYmFyJyxcbiAgICAgICAgY2F0ZWdvcnlQZXJjZW50YWdlOiAwLjgsXG4gICAgICAgIGJhclBlcmNlbnRhZ2U6IDAuOSxcbiAgICAgICAgZ3JvdXBlZDogdHJ1ZSxcbiAgICAgICAgYW5pbWF0aW9uczoge1xuICAgICAgICAgICAgbnVtYmVyczoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgJ3gnLFxuICAgICAgICAgICAgICAgICAgICAneScsXG4gICAgICAgICAgICAgICAgICAgICdiYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICAgICAgICAgJ2hlaWdodCdcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuIHN0YXRpYyBvdmVycmlkZXMgPSB7XG4gICAgICAgIHNjYWxlczoge1xuICAgICAgICAgICAgX2luZGV4Xzoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdjYXRlZ29yeScsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGdyaWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF92YWx1ZV86IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZWFyJyxcbiAgICAgICAgICAgICAgICBiZWdpbkF0WmVybzogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiBwYXJzZVByaW1pdGl2ZURhdGEobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KSB7XG4gICAgICAgIHJldHVybiBwYXJzZUFycmF5T3JQcmltaXRpdmUobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KTtcbiAgICB9XG4gcGFyc2VBcnJheURhdGEobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KSB7XG4gICAgICAgIHJldHVybiBwYXJzZUFycmF5T3JQcmltaXRpdmUobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KTtcbiAgICB9XG4gcGFyc2VPYmplY3REYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgICAgICBjb25zdCB7IGlTY2FsZSAsIHZTY2FsZSAgfSA9IG1ldGE7XG4gICAgICAgIGNvbnN0IHsgeEF4aXNLZXkgPSd4JyAsIHlBeGlzS2V5ID0neScgIH0gPSB0aGlzLl9wYXJzaW5nO1xuICAgICAgICBjb25zdCBpQXhpc0tleSA9IGlTY2FsZS5heGlzID09PSAneCcgPyB4QXhpc0tleSA6IHlBeGlzS2V5O1xuICAgICAgICBjb25zdCB2QXhpc0tleSA9IHZTY2FsZS5heGlzID09PSAneCcgPyB4QXhpc0tleSA6IHlBeGlzS2V5O1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBbXTtcbiAgICAgICAgbGV0IGksIGlsZW4sIGl0ZW0sIG9iajtcbiAgICAgICAgZm9yKGkgPSBzdGFydCwgaWxlbiA9IHN0YXJ0ICsgY291bnQ7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgb2JqID0gZGF0YVtpXTtcbiAgICAgICAgICAgIGl0ZW0gPSB7fTtcbiAgICAgICAgICAgIGl0ZW1baVNjYWxlLmF4aXNdID0gaVNjYWxlLnBhcnNlKHJlc29sdmVPYmplY3RLZXkob2JqLCBpQXhpc0tleSksIGkpO1xuICAgICAgICAgICAgcGFyc2VkLnB1c2gocGFyc2VWYWx1ZShyZXNvbHZlT2JqZWN0S2V5KG9iaiwgdkF4aXNLZXkpLCBpdGVtLCB2U2NhbGUsIGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH1cbiB1cGRhdGVSYW5nZUZyb21QYXJzZWQocmFuZ2UsIHNjYWxlLCBwYXJzZWQsIHN0YWNrKSB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZVJhbmdlRnJvbVBhcnNlZChyYW5nZSwgc2NhbGUsIHBhcnNlZCwgc3RhY2spO1xuICAgICAgICBjb25zdCBjdXN0b20gPSBwYXJzZWQuX2N1c3RvbTtcbiAgICAgICAgaWYgKGN1c3RvbSAmJiBzY2FsZSA9PT0gdGhpcy5fY2FjaGVkTWV0YS52U2NhbGUpIHtcbiAgICAgICAgICAgIHJhbmdlLm1pbiA9IE1hdGgubWluKHJhbmdlLm1pbiwgY3VzdG9tLm1pbik7XG4gICAgICAgICAgICByYW5nZS5tYXggPSBNYXRoLm1heChyYW5nZS5tYXgsIGN1c3RvbS5tYXgpO1xuICAgICAgICB9XG4gICAgfVxuIGdldE1heE92ZXJmbG93KCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gZ2V0TGFiZWxBbmRWYWx1ZShpbmRleCkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgeyBpU2NhbGUgLCB2U2NhbGUgIH0gPSBtZXRhO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLmdldFBhcnNlZChpbmRleCk7XG4gICAgICAgIGNvbnN0IGN1c3RvbSA9IHBhcnNlZC5fY3VzdG9tO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzRmxvYXRCYXIoY3VzdG9tKSA/ICdbJyArIGN1c3RvbS5zdGFydCArICcsICcgKyBjdXN0b20uZW5kICsgJ10nIDogJycgKyB2U2NhbGUuZ2V0TGFiZWxGb3JWYWx1ZShwYXJzZWRbdlNjYWxlLmF4aXNdKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhYmVsOiAnJyArIGlTY2FsZS5nZXRMYWJlbEZvclZhbHVlKHBhcnNlZFtpU2NhbGUuYXhpc10pLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgdGhpcy5lbmFibGVPcHRpb25TaGFyaW5nID0gdHJ1ZTtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgbWV0YS5zdGFjayA9IHRoaXMuZ2V0RGF0YXNldCgpLnN0YWNrO1xuICAgIH1cbiAgICB1cGRhdGUobW9kZSkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50cyhtZXRhLmRhdGEsIDAsIG1ldGEuZGF0YS5sZW5ndGgsIG1vZGUpO1xuICAgIH1cbiAgICB1cGRhdGVFbGVtZW50cyhiYXJzLCBzdGFydCwgY291bnQsIG1vZGUpIHtcbiAgICAgICAgY29uc3QgcmVzZXQgPSBtb2RlID09PSAncmVzZXQnO1xuICAgICAgICBjb25zdCB7IGluZGV4ICwgX2NhY2hlZE1ldGE6IHsgdlNjYWxlICB9ICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgYmFzZSA9IHZTY2FsZS5nZXRCYXNlUGl4ZWwoKTtcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbCA9IHZTY2FsZS5pc0hvcml6b250YWwoKTtcbiAgICAgICAgY29uc3QgcnVsZXIgPSB0aGlzLl9nZXRSdWxlcigpO1xuICAgICAgICBjb25zdCB7IHNoYXJlZE9wdGlvbnMgLCBpbmNsdWRlT3B0aW9ucyAgfSA9IHRoaXMuX2dldFNoYXJlZE9wdGlvbnMoc3RhcnQsIG1vZGUpO1xuICAgICAgICBmb3IobGV0IGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgY291bnQ7IGkrKyl7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLmdldFBhcnNlZChpKTtcbiAgICAgICAgICAgIGNvbnN0IHZwaXhlbHMgPSByZXNldCB8fCBpc051bGxPclVuZGVmKHBhcnNlZFt2U2NhbGUuYXhpc10pID8ge1xuICAgICAgICAgICAgICAgIGJhc2UsXG4gICAgICAgICAgICAgICAgaGVhZDogYmFzZVxuICAgICAgICAgICAgfSA6IHRoaXMuX2NhbGN1bGF0ZUJhclZhbHVlUGl4ZWxzKGkpO1xuICAgICAgICAgICAgY29uc3QgaXBpeGVscyA9IHRoaXMuX2NhbGN1bGF0ZUJhckluZGV4UGl4ZWxzKGksIHJ1bGVyKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YWNrID0gKHBhcnNlZC5fc3RhY2tzIHx8IHt9KVt2U2NhbGUuYXhpc107XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICAgIGhvcml6b250YWwsXG4gICAgICAgICAgICAgICAgYmFzZTogdnBpeGVscy5iYXNlLFxuICAgICAgICAgICAgICAgIGVuYWJsZUJvcmRlclJhZGl1czogIXN0YWNrIHx8IGlzRmxvYXRCYXIocGFyc2VkLl9jdXN0b20pIHx8IGluZGV4ID09PSBzdGFjay5fdG9wIHx8IGluZGV4ID09PSBzdGFjay5fYm90dG9tLFxuICAgICAgICAgICAgICAgIHg6IGhvcml6b250YWwgPyB2cGl4ZWxzLmhlYWQgOiBpcGl4ZWxzLmNlbnRlcixcbiAgICAgICAgICAgICAgICB5OiBob3Jpem9udGFsID8gaXBpeGVscy5jZW50ZXIgOiB2cGl4ZWxzLmhlYWQsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBob3Jpem9udGFsID8gaXBpeGVscy5zaXplIDogTWF0aC5hYnModnBpeGVscy5zaXplKSxcbiAgICAgICAgICAgICAgICB3aWR0aDogaG9yaXpvbnRhbCA/IE1hdGguYWJzKHZwaXhlbHMuc2l6ZSkgOiBpcGl4ZWxzLnNpemVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaW5jbHVkZU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLm9wdGlvbnMgPSBzaGFyZWRPcHRpb25zIHx8IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpLCBiYXJzW2ldLmFjdGl2ZSA/ICdhY3RpdmUnIDogbW9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gcHJvcGVydGllcy5vcHRpb25zIHx8IGJhcnNbaV0ub3B0aW9ucztcbiAgICAgICAgICAgIHNldEJvcmRlclNraXBwZWQocHJvcGVydGllcywgb3B0aW9ucywgc3RhY2ssIGluZGV4KTtcbiAgICAgICAgICAgIHNldEluZmxhdGVBbW91bnQocHJvcGVydGllcywgb3B0aW9ucywgcnVsZXIucmF0aW8pO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50KGJhcnNbaV0sIGksIHByb3BlcnRpZXMsIG1vZGUpO1xuICAgICAgICB9XG4gICAgfVxuIF9nZXRTdGFja3MobGFzdCwgZGF0YUluZGV4KSB7XG4gICAgICAgIGNvbnN0IHsgaVNjYWxlICB9ID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgbWV0YXNldHMgPSBpU2NhbGUuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXModGhpcy5fdHlwZSkuZmlsdGVyKChtZXRhKT0+bWV0YS5jb250cm9sbGVyLm9wdGlvbnMuZ3JvdXBlZCk7XG4gICAgICAgIGNvbnN0IHN0YWNrZWQgPSBpU2NhbGUub3B0aW9ucy5zdGFja2VkO1xuICAgICAgICBjb25zdCBzdGFja3MgPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudFBhcnNlZCA9IHRoaXMuX2NhY2hlZE1ldGEuY29udHJvbGxlci5nZXRQYXJzZWQoZGF0YUluZGV4KTtcbiAgICAgICAgY29uc3QgaVNjYWxlVmFsdWUgPSBjdXJyZW50UGFyc2VkICYmIGN1cnJlbnRQYXJzZWRbaVNjYWxlLmF4aXNdO1xuICAgICAgICBjb25zdCBza2lwTnVsbCA9IChtZXRhKT0+e1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gbWV0YS5fcGFyc2VkLmZpbmQoKGl0ZW0pPT5pdGVtW2lTY2FsZS5heGlzXSA9PT0gaVNjYWxlVmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgdmFsID0gcGFyc2VkICYmIHBhcnNlZFttZXRhLnZTY2FsZS5heGlzXTtcbiAgICAgICAgICAgIGlmIChpc051bGxPclVuZGVmKHZhbCkgfHwgaXNOYU4odmFsKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IG1ldGEgb2YgbWV0YXNldHMpe1xuICAgICAgICAgICAgaWYgKGRhdGFJbmRleCAhPT0gdW5kZWZpbmVkICYmIHNraXBOdWxsKG1ldGEpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhY2tlZCA9PT0gZmFsc2UgfHwgc3RhY2tzLmluZGV4T2YobWV0YS5zdGFjaykgPT09IC0xIHx8IHN0YWNrZWQgPT09IHVuZGVmaW5lZCAmJiBtZXRhLnN0YWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzdGFja3MucHVzaChtZXRhLnN0YWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXRhLmluZGV4ID09PSBsYXN0KSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGFja3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBzdGFja3MucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGFja3M7XG4gICAgfVxuIF9nZXRTdGFja0NvdW50KGluZGV4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRTdGFja3ModW5kZWZpbmVkLCBpbmRleCkubGVuZ3RoO1xuICAgIH1cbiBfZ2V0U3RhY2tJbmRleChkYXRhc2V0SW5kZXgsIG5hbWUsIGRhdGFJbmRleCkge1xuICAgICAgICBjb25zdCBzdGFja3MgPSB0aGlzLl9nZXRTdGFja3MoZGF0YXNldEluZGV4LCBkYXRhSW5kZXgpO1xuICAgICAgICBjb25zdCBpbmRleCA9IG5hbWUgIT09IHVuZGVmaW5lZCA/IHN0YWNrcy5pbmRleE9mKG5hbWUpIDogLTE7XG4gICAgICAgIHJldHVybiBpbmRleCA9PT0gLTEgPyBzdGFja3MubGVuZ3RoIC0gMSA6IGluZGV4O1xuICAgIH1cbiBfZ2V0UnVsZXIoKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBpU2NhbGUgPSBtZXRhLmlTY2FsZTtcbiAgICAgICAgY29uc3QgcGl4ZWxzID0gW107XG4gICAgICAgIGxldCBpLCBpbGVuO1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSBtZXRhLmRhdGEubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIHBpeGVscy5wdXNoKGlTY2FsZS5nZXRQaXhlbEZvclZhbHVlKHRoaXMuZ2V0UGFyc2VkKGkpW2lTY2FsZS5heGlzXSwgaSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJhclRoaWNrbmVzcyA9IG9wdHMuYmFyVGhpY2tuZXNzO1xuICAgICAgICBjb25zdCBtaW4gPSBiYXJUaGlja25lc3MgfHwgY29tcHV0ZU1pblNhbXBsZVNpemUobWV0YSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICBwaXhlbHMsXG4gICAgICAgICAgICBzdGFydDogaVNjYWxlLl9zdGFydFBpeGVsLFxuICAgICAgICAgICAgZW5kOiBpU2NhbGUuX2VuZFBpeGVsLFxuICAgICAgICAgICAgc3RhY2tDb3VudDogdGhpcy5fZ2V0U3RhY2tDb3VudCgpLFxuICAgICAgICAgICAgc2NhbGU6IGlTY2FsZSxcbiAgICAgICAgICAgIGdyb3VwZWQ6IG9wdHMuZ3JvdXBlZCxcbiAgICAgICAgICAgIHJhdGlvOiBiYXJUaGlja25lc3MgPyAxIDogb3B0cy5jYXRlZ29yeVBlcmNlbnRhZ2UgKiBvcHRzLmJhclBlcmNlbnRhZ2VcbiAgICAgICAgfTtcbiAgICB9XG4gX2NhbGN1bGF0ZUJhclZhbHVlUGl4ZWxzKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IHsgX2NhY2hlZE1ldGE6IHsgdlNjYWxlICwgX3N0YWNrZWQgLCBpbmRleDogZGF0YXNldEluZGV4ICB9ICwgb3B0aW9uczogeyBiYXNlOiBiYXNlVmFsdWUgLCBtaW5CYXJMZW5ndGggIH0gIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBhY3R1YWxCYXNlID0gYmFzZVZhbHVlIHx8IDA7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuZ2V0UGFyc2VkKGluZGV4KTtcbiAgICAgICAgY29uc3QgY3VzdG9tID0gcGFyc2VkLl9jdXN0b207XG4gICAgICAgIGNvbnN0IGZsb2F0aW5nID0gaXNGbG9hdEJhcihjdXN0b20pO1xuICAgICAgICBsZXQgdmFsdWUgPSBwYXJzZWRbdlNjYWxlLmF4aXNdO1xuICAgICAgICBsZXQgc3RhcnQgPSAwO1xuICAgICAgICBsZXQgbGVuZ3RoID0gX3N0YWNrZWQgPyB0aGlzLmFwcGx5U3RhY2sodlNjYWxlLCBwYXJzZWQsIF9zdGFja2VkKSA6IHZhbHVlO1xuICAgICAgICBsZXQgaGVhZCwgc2l6ZTtcbiAgICAgICAgaWYgKGxlbmd0aCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gbGVuZ3RoIC0gdmFsdWU7XG4gICAgICAgICAgICBsZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmxvYXRpbmcpIHtcbiAgICAgICAgICAgIHZhbHVlID0gY3VzdG9tLmJhclN0YXJ0O1xuICAgICAgICAgICAgbGVuZ3RoID0gY3VzdG9tLmJhckVuZCAtIGN1c3RvbS5iYXJTdGFydDtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gMCAmJiBzaWduKHZhbHVlKSAhPT0gc2lnbihjdXN0b20uYmFyRW5kKSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJ0ICs9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0VmFsdWUgPSAhaXNOdWxsT3JVbmRlZihiYXNlVmFsdWUpICYmICFmbG9hdGluZyA/IGJhc2VWYWx1ZSA6IHN0YXJ0O1xuICAgICAgICBsZXQgYmFzZSA9IHZTY2FsZS5nZXRQaXhlbEZvclZhbHVlKHN0YXJ0VmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5jaGFydC5nZXREYXRhVmlzaWJpbGl0eShpbmRleCkpIHtcbiAgICAgICAgICAgIGhlYWQgPSB2U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShzdGFydCArIGxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoZWFkID0gYmFzZTtcbiAgICAgICAgfVxuICAgICAgICBzaXplID0gaGVhZCAtIGJhc2U7XG4gICAgICAgIGlmIChNYXRoLmFicyhzaXplKSA8IG1pbkJhckxlbmd0aCkge1xuICAgICAgICAgICAgc2l6ZSA9IGJhclNpZ24oc2l6ZSwgdlNjYWxlLCBhY3R1YWxCYXNlKSAqIG1pbkJhckxlbmd0aDtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gYWN0dWFsQmFzZSkge1xuICAgICAgICAgICAgICAgIGJhc2UgLT0gc2l6ZSAvIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdGFydFBpeGVsID0gdlNjYWxlLmdldFBpeGVsRm9yRGVjaW1hbCgwKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZFBpeGVsID0gdlNjYWxlLmdldFBpeGVsRm9yRGVjaW1hbCgxKTtcbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKHN0YXJ0UGl4ZWwsIGVuZFBpeGVsKTtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KHN0YXJ0UGl4ZWwsIGVuZFBpeGVsKTtcbiAgICAgICAgICAgIGJhc2UgPSBNYXRoLm1heChNYXRoLm1pbihiYXNlLCBtYXgpLCBtaW4pO1xuICAgICAgICAgICAgaGVhZCA9IGJhc2UgKyBzaXplO1xuICAgICAgICAgICAgaWYgKF9zdGFja2VkICYmICFmbG9hdGluZykge1xuICAgICAgICAgICAgICAgIHBhcnNlZC5fc3RhY2tzW3ZTY2FsZS5heGlzXS5fdmlzdWFsVmFsdWVzW2RhdGFzZXRJbmRleF0gPSB2U2NhbGUuZ2V0VmFsdWVGb3JQaXhlbChoZWFkKSAtIHZTY2FsZS5nZXRWYWx1ZUZvclBpeGVsKGJhc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChiYXNlID09PSB2U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShhY3R1YWxCYXNlKSkge1xuICAgICAgICAgICAgY29uc3QgaGFsZkdyaWQgPSBzaWduKHNpemUpICogdlNjYWxlLmdldExpbmVXaWR0aEZvclZhbHVlKGFjdHVhbEJhc2UpIC8gMjtcbiAgICAgICAgICAgIGJhc2UgKz0gaGFsZkdyaWQ7XG4gICAgICAgICAgICBzaXplIC09IGhhbGZHcmlkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaXplLFxuICAgICAgICAgICAgYmFzZSxcbiAgICAgICAgICAgIGhlYWQsXG4gICAgICAgICAgICBjZW50ZXI6IGhlYWQgKyBzaXplIC8gMlxuICAgICAgICB9O1xuICAgIH1cbiBfY2FsY3VsYXRlQmFySW5kZXhQaXhlbHMoaW5kZXgsIHJ1bGVyKSB7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gcnVsZXIuc2NhbGU7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHNraXBOdWxsID0gb3B0aW9ucy5za2lwTnVsbDtcbiAgICAgICAgY29uc3QgbWF4QmFyVGhpY2tuZXNzID0gdmFsdWVPckRlZmF1bHQob3B0aW9ucy5tYXhCYXJUaGlja25lc3MsIEluZmluaXR5KTtcbiAgICAgICAgbGV0IGNlbnRlciwgc2l6ZTtcbiAgICAgICAgaWYgKHJ1bGVyLmdyb3VwZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YWNrQ291bnQgPSBza2lwTnVsbCA/IHRoaXMuX2dldFN0YWNrQ291bnQoaW5kZXgpIDogcnVsZXIuc3RhY2tDb3VudDtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gb3B0aW9ucy5iYXJUaGlja25lc3MgPT09ICdmbGV4JyA/IGNvbXB1dGVGbGV4Q2F0ZWdvcnlUcmFpdHMoaW5kZXgsIHJ1bGVyLCBvcHRpb25zLCBzdGFja0NvdW50KSA6IGNvbXB1dGVGaXRDYXRlZ29yeVRyYWl0cyhpbmRleCwgcnVsZXIsIG9wdGlvbnMsIHN0YWNrQ291bnQpO1xuICAgICAgICAgICAgY29uc3Qgc3RhY2tJbmRleCA9IHRoaXMuX2dldFN0YWNrSW5kZXgodGhpcy5pbmRleCwgdGhpcy5fY2FjaGVkTWV0YS5zdGFjaywgc2tpcE51bGwgPyBpbmRleCA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBjZW50ZXIgPSByYW5nZS5zdGFydCArIHJhbmdlLmNodW5rICogc3RhY2tJbmRleCArIHJhbmdlLmNodW5rIC8gMjtcbiAgICAgICAgICAgIHNpemUgPSBNYXRoLm1pbihtYXhCYXJUaGlja25lc3MsIHJhbmdlLmNodW5rICogcmFuZ2UucmF0aW8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2VudGVyID0gc2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZSh0aGlzLmdldFBhcnNlZChpbmRleClbc2NhbGUuYXhpc10sIGluZGV4KTtcbiAgICAgICAgICAgIHNpemUgPSBNYXRoLm1pbihtYXhCYXJUaGlja25lc3MsIHJ1bGVyLm1pbiAqIHJ1bGVyLnJhdGlvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYmFzZTogY2VudGVyIC0gc2l6ZSAvIDIsXG4gICAgICAgICAgICBoZWFkOiBjZW50ZXIgKyBzaXplIC8gMixcbiAgICAgICAgICAgIGNlbnRlcixcbiAgICAgICAgICAgIHNpemVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZHJhdygpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIGNvbnN0IHZTY2FsZSA9IG1ldGEudlNjYWxlO1xuICAgICAgICBjb25zdCByZWN0cyA9IG1ldGEuZGF0YTtcbiAgICAgICAgY29uc3QgaWxlbiA9IHJlY3RzLmxlbmd0aDtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmb3IoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldFBhcnNlZChpKVt2U2NhbGUuYXhpc10gIT09IG51bGwgJiYgIXJlY3RzW2ldLmhpZGRlbikge1xuICAgICAgICAgICAgICAgIHJlY3RzW2ldLmRyYXcodGhpcy5fY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQnViYmxlQ29udHJvbGxlciBleHRlbmRzIERhdGFzZXRDb250cm9sbGVyIHtcbiAgICBzdGF0aWMgaWQgPSAnYnViYmxlJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGRhdGFzZXRFbGVtZW50VHlwZTogZmFsc2UsXG4gICAgICAgIGRhdGFFbGVtZW50VHlwZTogJ3BvaW50JyxcbiAgICAgICAgYW5pbWF0aW9uczoge1xuICAgICAgICAgICAgbnVtYmVyczoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgJ3gnLFxuICAgICAgICAgICAgICAgICAgICAneScsXG4gICAgICAgICAgICAgICAgICAgICdib3JkZXJXaWR0aCcsXG4gICAgICAgICAgICAgICAgICAgICdyYWRpdXMnXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiBzdGF0aWMgb3ZlcnJpZGVzID0ge1xuICAgICAgICBzY2FsZXM6IHtcbiAgICAgICAgICAgIHg6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZWFyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHk6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZWFyJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICB0aGlzLmVuYWJsZU9wdGlvblNoYXJpbmcgPSB0cnVlO1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgfVxuIHBhcnNlUHJpbWl0aXZlRGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gc3VwZXIucGFyc2VQcmltaXRpdmVEYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCk7XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBwYXJzZWQubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgcGFyc2VkW2ldLl9jdXN0b20gPSB0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaSArIHN0YXJ0KS5yYWRpdXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gcGFyc2VBcnJheURhdGEobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHN1cGVyLnBhcnNlQXJyYXlEYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCk7XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBwYXJzZWQubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGRhdGFbc3RhcnQgKyBpXTtcbiAgICAgICAgICAgIHBhcnNlZFtpXS5fY3VzdG9tID0gdmFsdWVPckRlZmF1bHQoaXRlbVsyXSwgdGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGkgKyBzdGFydCkucmFkaXVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH1cbiBwYXJzZU9iamVjdERhdGEobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHN1cGVyLnBhcnNlT2JqZWN0RGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpO1xuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgcGFyc2VkLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhW3N0YXJ0ICsgaV07XG4gICAgICAgICAgICBwYXJzZWRbaV0uX2N1c3RvbSA9IHZhbHVlT3JEZWZhdWx0KGl0ZW0gJiYgaXRlbS5yICYmICtpdGVtLnIsIHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpICsgc3RhcnQpLnJhZGl1cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gZ2V0TWF4T3ZlcmZsb3coKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9jYWNoZWRNZXRhLmRhdGE7XG4gICAgICAgIGxldCBtYXggPSAwO1xuICAgICAgICBmb3IobGV0IGkgPSBkYXRhLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKXtcbiAgICAgICAgICAgIG1heCA9IE1hdGgubWF4KG1heCwgZGF0YVtpXS5zaXplKHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpKSkgLyAyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4ID4gMCAmJiBtYXg7XG4gICAgfVxuIGdldExhYmVsQW5kVmFsdWUoaW5kZXgpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuY2hhcnQuZGF0YS5sYWJlbHMgfHwgW107XG4gICAgICAgIGNvbnN0IHsgeFNjYWxlICwgeVNjYWxlICB9ID0gbWV0YTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaW5kZXgpO1xuICAgICAgICBjb25zdCB4ID0geFNjYWxlLmdldExhYmVsRm9yVmFsdWUocGFyc2VkLngpO1xuICAgICAgICBjb25zdCB5ID0geVNjYWxlLmdldExhYmVsRm9yVmFsdWUocGFyc2VkLnkpO1xuICAgICAgICBjb25zdCByID0gcGFyc2VkLl9jdXN0b207XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYWJlbDogbGFiZWxzW2luZGV4XSB8fCAnJyxcbiAgICAgICAgICAgIHZhbHVlOiAnKCcgKyB4ICsgJywgJyArIHkgKyAociA/ICcsICcgKyByIDogJycpICsgJyknXG4gICAgICAgIH07XG4gICAgfVxuICAgIHVwZGF0ZShtb2RlKSB7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IHRoaXMuX2NhY2hlZE1ldGEuZGF0YTtcbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50cyhwb2ludHMsIDAsIHBvaW50cy5sZW5ndGgsIG1vZGUpO1xuICAgIH1cbiAgICB1cGRhdGVFbGVtZW50cyhwb2ludHMsIHN0YXJ0LCBjb3VudCwgbW9kZSkge1xuICAgICAgICBjb25zdCByZXNldCA9IG1vZGUgPT09ICdyZXNldCc7XG4gICAgICAgIGNvbnN0IHsgaVNjYWxlICwgdlNjYWxlICB9ID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgeyBzaGFyZWRPcHRpb25zICwgaW5jbHVkZU9wdGlvbnMgIH0gPSB0aGlzLl9nZXRTaGFyZWRPcHRpb25zKHN0YXJ0LCBtb2RlKTtcbiAgICAgICAgY29uc3QgaUF4aXMgPSBpU2NhbGUuYXhpcztcbiAgICAgICAgY29uc3QgdkF4aXMgPSB2U2NhbGUuYXhpcztcbiAgICAgICAgZm9yKGxldCBpID0gc3RhcnQ7IGkgPCBzdGFydCArIGNvdW50OyBpKyspe1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSAhcmVzZXQgJiYgdGhpcy5nZXRQYXJzZWQoaSk7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICBjb25zdCBpUGl4ZWwgPSBwcm9wZXJ0aWVzW2lBeGlzXSA9IHJlc2V0ID8gaVNjYWxlLmdldFBpeGVsRm9yRGVjaW1hbCgwLjUpIDogaVNjYWxlLmdldFBpeGVsRm9yVmFsdWUocGFyc2VkW2lBeGlzXSk7XG4gICAgICAgICAgICBjb25zdCB2UGl4ZWwgPSBwcm9wZXJ0aWVzW3ZBeGlzXSA9IHJlc2V0ID8gdlNjYWxlLmdldEJhc2VQaXhlbCgpIDogdlNjYWxlLmdldFBpeGVsRm9yVmFsdWUocGFyc2VkW3ZBeGlzXSk7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLnNraXAgPSBpc05hTihpUGl4ZWwpIHx8IGlzTmFOKHZQaXhlbCk7XG4gICAgICAgICAgICBpZiAoaW5jbHVkZU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLm9wdGlvbnMgPSBzaGFyZWRPcHRpb25zIHx8IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpLCBwb2ludC5hY3RpdmUgPyAnYWN0aXZlJyA6IG1vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChyZXNldCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLm9wdGlvbnMucmFkaXVzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQocG9pbnQsIGksIHByb3BlcnRpZXMsIG1vZGUpO1xuICAgICAgICB9XG4gICAgfVxuIHJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaW5kZXgsIG1vZGUpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaW5kZXgpO1xuICAgICAgICBsZXQgdmFsdWVzID0gc3VwZXIucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpbmRleCwgbW9kZSk7XG4gICAgICAgIGlmICh2YWx1ZXMuJHNoYXJlZCkge1xuICAgICAgICAgICAgdmFsdWVzID0gT2JqZWN0LmFzc2lnbih7fSwgdmFsdWVzLCB7XG4gICAgICAgICAgICAgICAgJHNoYXJlZDogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhZGl1cyA9IHZhbHVlcy5yYWRpdXM7XG4gICAgICAgIGlmIChtb2RlICE9PSAnYWN0aXZlJykge1xuICAgICAgICAgICAgdmFsdWVzLnJhZGl1cyA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWVzLnJhZGl1cyArPSB2YWx1ZU9yRGVmYXVsdChwYXJzZWQgJiYgcGFyc2VkLl9jdXN0b20sIHJhZGl1cyk7XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRSYXRpb0FuZE9mZnNldChyb3RhdGlvbiwgY2lyY3VtZmVyZW5jZSwgY3V0b3V0KSB7XG4gICAgbGV0IHJhdGlvWCA9IDE7XG4gICAgbGV0IHJhdGlvWSA9IDE7XG4gICAgbGV0IG9mZnNldFggPSAwO1xuICAgIGxldCBvZmZzZXRZID0gMDtcbiAgICBpZiAoY2lyY3VtZmVyZW5jZSA8IFRBVSkge1xuICAgICAgICBjb25zdCBzdGFydEFuZ2xlID0gcm90YXRpb247XG4gICAgICAgIGNvbnN0IGVuZEFuZ2xlID0gc3RhcnRBbmdsZSArIGNpcmN1bWZlcmVuY2U7XG4gICAgICAgIGNvbnN0IHN0YXJ0WCA9IE1hdGguY29zKHN0YXJ0QW5nbGUpO1xuICAgICAgICBjb25zdCBzdGFydFkgPSBNYXRoLnNpbihzdGFydEFuZ2xlKTtcbiAgICAgICAgY29uc3QgZW5kWCA9IE1hdGguY29zKGVuZEFuZ2xlKTtcbiAgICAgICAgY29uc3QgZW5kWSA9IE1hdGguc2luKGVuZEFuZ2xlKTtcbiAgICAgICAgY29uc3QgY2FsY01heCA9IChhbmdsZSwgYSwgYik9Pl9hbmdsZUJldHdlZW4oYW5nbGUsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCB0cnVlKSA/IDEgOiBNYXRoLm1heChhLCBhICogY3V0b3V0LCBiLCBiICogY3V0b3V0KTtcbiAgICAgICAgY29uc3QgY2FsY01pbiA9IChhbmdsZSwgYSwgYik9Pl9hbmdsZUJldHdlZW4oYW5nbGUsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCB0cnVlKSA/IC0xIDogTWF0aC5taW4oYSwgYSAqIGN1dG91dCwgYiwgYiAqIGN1dG91dCk7XG4gICAgICAgIGNvbnN0IG1heFggPSBjYWxjTWF4KDAsIHN0YXJ0WCwgZW5kWCk7XG4gICAgICAgIGNvbnN0IG1heFkgPSBjYWxjTWF4KEhBTEZfUEksIHN0YXJ0WSwgZW5kWSk7XG4gICAgICAgIGNvbnN0IG1pblggPSBjYWxjTWluKFBJLCBzdGFydFgsIGVuZFgpO1xuICAgICAgICBjb25zdCBtaW5ZID0gY2FsY01pbihQSSArIEhBTEZfUEksIHN0YXJ0WSwgZW5kWSk7XG4gICAgICAgIHJhdGlvWCA9IChtYXhYIC0gbWluWCkgLyAyO1xuICAgICAgICByYXRpb1kgPSAobWF4WSAtIG1pblkpIC8gMjtcbiAgICAgICAgb2Zmc2V0WCA9IC0obWF4WCArIG1pblgpIC8gMjtcbiAgICAgICAgb2Zmc2V0WSA9IC0obWF4WSArIG1pblkpIC8gMjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmF0aW9YLFxuICAgICAgICByYXRpb1ksXG4gICAgICAgIG9mZnNldFgsXG4gICAgICAgIG9mZnNldFlcbiAgICB9O1xufVxuY2xhc3MgRG91Z2hudXRDb250cm9sbGVyIGV4dGVuZHMgRGF0YXNldENvbnRyb2xsZXIge1xuICAgIHN0YXRpYyBpZCA9ICdkb3VnaG51dCc7XG4gc3RhdGljIGRlZmF1bHRzID0ge1xuICAgICAgICBkYXRhc2V0RWxlbWVudFR5cGU6IGZhbHNlLFxuICAgICAgICBkYXRhRWxlbWVudFR5cGU6ICdhcmMnLFxuICAgICAgICBhbmltYXRpb246IHtcbiAgICAgICAgICAgIGFuaW1hdGVSb3RhdGU6IHRydWUsXG4gICAgICAgICAgICBhbmltYXRlU2NhbGU6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIGFuaW1hdGlvbnM6IHtcbiAgICAgICAgICAgIG51bWJlcnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICdjaXJjdW1mZXJlbmNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VuZEFuZ2xlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2lubmVyUmFkaXVzJyxcbiAgICAgICAgICAgICAgICAgICAgJ291dGVyUmFkaXVzJyxcbiAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0QW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICAneCcsXG4gICAgICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAgICAgJ29mZnNldCcsXG4gICAgICAgICAgICAgICAgICAgICdib3JkZXJXaWR0aCcsXG4gICAgICAgICAgICAgICAgICAgICdzcGFjaW5nJ1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3V0b3V0OiAnNTAlJyxcbiAgICAgICAgcm90YXRpb246IDAsXG4gICAgICAgIGNpcmN1bWZlcmVuY2U6IDM2MCxcbiAgICAgICAgcmFkaXVzOiAnMTAwJScsXG4gICAgICAgIHNwYWNpbmc6IDAsXG4gICAgICAgIGluZGV4QXhpczogJ3InXG4gICAgfTtcbiAgICBzdGF0aWMgZGVzY3JpcHRvcnMgPSB7XG4gICAgICAgIF9zY3JpcHRhYmxlOiAobmFtZSk9Pm5hbWUgIT09ICdzcGFjaW5nJyxcbiAgICAgICAgX2luZGV4YWJsZTogKG5hbWUpPT5uYW1lICE9PSAnc3BhY2luZycgJiYgIW5hbWUuc3RhcnRzV2l0aCgnYm9yZGVyRGFzaCcpICYmICFuYW1lLnN0YXJ0c1dpdGgoJ2hvdmVyQm9yZGVyRGFzaCcpXG4gICAgfTtcbiBzdGF0aWMgb3ZlcnJpZGVzID0ge1xuICAgICAgICBhc3BlY3RSYXRpbzogMSxcbiAgICAgICAgcGx1Z2luczoge1xuICAgICAgICAgICAgbGVnZW5kOiB7XG4gICAgICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlTGFiZWxzIChjaGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGNoYXJ0LmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5sYWJlbHMubGVuZ3RoICYmIGRhdGEuZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBsYWJlbHM6IHsgcG9pbnRTdHlsZSAsIGNvbG9yICB9ICB9ID0gY2hhcnQubGVnZW5kLm9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEubGFiZWxzLm1hcCgobGFiZWwsIGkpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YSgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBtZXRhLmNvbnRyb2xsZXIuZ2V0U3R5bGUoaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBsYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogc3R5bGUuYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlU3R5bGU6IHN0eWxlLmJvcmRlckNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udENvbG9yOiBjb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVXaWR0aDogc3R5bGUuYm9yZGVyV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludFN0eWxlOiBwb2ludFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiAhY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkoaSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbkNsaWNrIChlLCBsZWdlbmRJdGVtLCBsZWdlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmNoYXJ0LnRvZ2dsZURhdGFWaXNpYmlsaXR5KGxlZ2VuZEl0ZW0uaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBsZWdlbmQuY2hhcnQudXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdHJ1Y3RvcihjaGFydCwgZGF0YXNldEluZGV4KXtcbiAgICAgICAgc3VwZXIoY2hhcnQsIGRhdGFzZXRJbmRleCk7XG4gICAgICAgIHRoaXMuZW5hYmxlT3B0aW9uU2hhcmluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuaW5uZXJSYWRpdXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMub3V0ZXJSYWRpdXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMub2Zmc2V0WCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5vZmZzZXRZID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsaW5rU2NhbGVzKCkge31cbiBwYXJzZShzdGFydCwgY291bnQpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0RGF0YXNldCgpLmRhdGE7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBpZiAodGhpcy5fcGFyc2luZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG1ldGEuX3BhcnNlZCA9IGRhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZ2V0dGVyID0gKGkpPT4rZGF0YVtpXTtcbiAgICAgICAgICAgIGlmIChpc09iamVjdChkYXRhW3N0YXJ0XSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGtleSA9J3ZhbHVlJyAgfSA9IHRoaXMuX3BhcnNpbmc7XG4gICAgICAgICAgICAgICAgZ2V0dGVyID0gKGkpPT4rcmVzb2x2ZU9iamVjdEtleShkYXRhW2ldLCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGksIGlsZW47XG4gICAgICAgICAgICBmb3IoaSA9IHN0YXJ0LCBpbGVuID0gc3RhcnQgKyBjb3VudDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICAgICAgbWV0YS5fcGFyc2VkW2ldID0gZ2V0dGVyKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuIF9nZXRSb3RhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRvUmFkaWFucyh0aGlzLm9wdGlvbnMucm90YXRpb24gLSA5MCk7XG4gICAgfVxuIF9nZXRDaXJjdW1mZXJlbmNlKCkge1xuICAgICAgICByZXR1cm4gdG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jaXJjdW1mZXJlbmNlKTtcbiAgICB9XG4gX2dldFJvdGF0aW9uRXh0ZW50cygpIHtcbiAgICAgICAgbGV0IG1pbiA9IFRBVTtcbiAgICAgICAgbGV0IG1heCA9IC1UQVU7XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMubGVuZ3RoOyArK2kpe1xuICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnQuaXNEYXRhc2V0VmlzaWJsZShpKSAmJiB0aGlzLmNoYXJ0LmdldERhdGFzZXRNZXRhKGkpLnR5cGUgPT09IHRoaXMuX3R5cGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gdGhpcy5jaGFydC5nZXREYXRhc2V0TWV0YShpKS5jb250cm9sbGVyO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdGF0aW9uID0gY29udHJvbGxlci5fZ2V0Um90YXRpb24oKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaXJjdW1mZXJlbmNlID0gY29udHJvbGxlci5fZ2V0Q2lyY3VtZmVyZW5jZSgpO1xuICAgICAgICAgICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgcm90YXRpb24pO1xuICAgICAgICAgICAgICAgIG1heCA9IE1hdGgubWF4KG1heCwgcm90YXRpb24gKyBjaXJjdW1mZXJlbmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcm90YXRpb246IG1pbixcbiAgICAgICAgICAgIGNpcmN1bWZlcmVuY2U6IG1heCAtIG1pblxuICAgICAgICB9O1xuICAgIH1cbiB1cGRhdGUobW9kZSkge1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IHsgY2hhcnRBcmVhICB9ID0gY2hhcnQ7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBhcmNzID0gbWV0YS5kYXRhO1xuICAgICAgICBjb25zdCBzcGFjaW5nID0gdGhpcy5nZXRNYXhCb3JkZXJXaWR0aCgpICsgdGhpcy5nZXRNYXhPZmZzZXQoYXJjcykgKyB0aGlzLm9wdGlvbnMuc3BhY2luZztcbiAgICAgICAgY29uc3QgbWF4U2l6ZSA9IE1hdGgubWF4KChNYXRoLm1pbihjaGFydEFyZWEud2lkdGgsIGNoYXJ0QXJlYS5oZWlnaHQpIC0gc3BhY2luZykgLyAyLCAwKTtcbiAgICAgICAgY29uc3QgY3V0b3V0ID0gTWF0aC5taW4odG9QZXJjZW50YWdlKHRoaXMub3B0aW9ucy5jdXRvdXQsIG1heFNpemUpLCAxKTtcbiAgICAgICAgY29uc3QgY2hhcnRXZWlnaHQgPSB0aGlzLl9nZXRSaW5nV2VpZ2h0KHRoaXMuaW5kZXgpO1xuICAgICAgICBjb25zdCB7IGNpcmN1bWZlcmVuY2UgLCByb3RhdGlvbiAgfSA9IHRoaXMuX2dldFJvdGF0aW9uRXh0ZW50cygpO1xuICAgICAgICBjb25zdCB7IHJhdGlvWCAsIHJhdGlvWSAsIG9mZnNldFggLCBvZmZzZXRZICB9ID0gZ2V0UmF0aW9BbmRPZmZzZXQocm90YXRpb24sIGNpcmN1bWZlcmVuY2UsIGN1dG91dCk7XG4gICAgICAgIGNvbnN0IG1heFdpZHRoID0gKGNoYXJ0QXJlYS53aWR0aCAtIHNwYWNpbmcpIC8gcmF0aW9YO1xuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSAoY2hhcnRBcmVhLmhlaWdodCAtIHNwYWNpbmcpIC8gcmF0aW9ZO1xuICAgICAgICBjb25zdCBtYXhSYWRpdXMgPSBNYXRoLm1heChNYXRoLm1pbihtYXhXaWR0aCwgbWF4SGVpZ2h0KSAvIDIsIDApO1xuICAgICAgICBjb25zdCBvdXRlclJhZGl1cyA9IHRvRGltZW5zaW9uKHRoaXMub3B0aW9ucy5yYWRpdXMsIG1heFJhZGl1cyk7XG4gICAgICAgIGNvbnN0IGlubmVyUmFkaXVzID0gTWF0aC5tYXgob3V0ZXJSYWRpdXMgKiBjdXRvdXQsIDApO1xuICAgICAgICBjb25zdCByYWRpdXNMZW5ndGggPSAob3V0ZXJSYWRpdXMgLSBpbm5lclJhZGl1cykgLyB0aGlzLl9nZXRWaXNpYmxlRGF0YXNldFdlaWdodFRvdGFsKCk7XG4gICAgICAgIHRoaXMub2Zmc2V0WCA9IG9mZnNldFggKiBvdXRlclJhZGl1cztcbiAgICAgICAgdGhpcy5vZmZzZXRZID0gb2Zmc2V0WSAqIG91dGVyUmFkaXVzO1xuICAgICAgICBtZXRhLnRvdGFsID0gdGhpcy5jYWxjdWxhdGVUb3RhbCgpO1xuICAgICAgICB0aGlzLm91dGVyUmFkaXVzID0gb3V0ZXJSYWRpdXMgLSByYWRpdXNMZW5ndGggKiB0aGlzLl9nZXRSaW5nV2VpZ2h0T2Zmc2V0KHRoaXMuaW5kZXgpO1xuICAgICAgICB0aGlzLmlubmVyUmFkaXVzID0gTWF0aC5tYXgodGhpcy5vdXRlclJhZGl1cyAtIHJhZGl1c0xlbmd0aCAqIGNoYXJ0V2VpZ2h0LCAwKTtcbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50cyhhcmNzLCAwLCBhcmNzLmxlbmd0aCwgbW9kZSk7XG4gICAgfVxuIF9jaXJjdW1mZXJlbmNlKGksIHJlc2V0KSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBjaXJjdW1mZXJlbmNlID0gdGhpcy5fZ2V0Q2lyY3VtZmVyZW5jZSgpO1xuICAgICAgICBpZiAocmVzZXQgJiYgb3B0cy5hbmltYXRpb24uYW5pbWF0ZVJvdGF0ZSB8fCAhdGhpcy5jaGFydC5nZXREYXRhVmlzaWJpbGl0eShpKSB8fCBtZXRhLl9wYXJzZWRbaV0gPT09IG51bGwgfHwgbWV0YS5kYXRhW2ldLmhpZGRlbikge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlQ2lyY3VtZmVyZW5jZShtZXRhLl9wYXJzZWRbaV0gKiBjaXJjdW1mZXJlbmNlIC8gVEFVKTtcbiAgICB9XG4gICAgdXBkYXRlRWxlbWVudHMoYXJjcywgc3RhcnQsIGNvdW50LCBtb2RlKSB7XG4gICAgICAgIGNvbnN0IHJlc2V0ID0gbW9kZSA9PT0gJ3Jlc2V0JztcbiAgICAgICAgY29uc3QgY2hhcnQgPSB0aGlzLmNoYXJ0O1xuICAgICAgICBjb25zdCBjaGFydEFyZWEgPSBjaGFydC5jaGFydEFyZWE7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBjaGFydC5vcHRpb25zO1xuICAgICAgICBjb25zdCBhbmltYXRpb25PcHRzID0gb3B0cy5hbmltYXRpb247XG4gICAgICAgIGNvbnN0IGNlbnRlclggPSAoY2hhcnRBcmVhLmxlZnQgKyBjaGFydEFyZWEucmlnaHQpIC8gMjtcbiAgICAgICAgY29uc3QgY2VudGVyWSA9IChjaGFydEFyZWEudG9wICsgY2hhcnRBcmVhLmJvdHRvbSkgLyAyO1xuICAgICAgICBjb25zdCBhbmltYXRlU2NhbGUgPSByZXNldCAmJiBhbmltYXRpb25PcHRzLmFuaW1hdGVTY2FsZTtcbiAgICAgICAgY29uc3QgaW5uZXJSYWRpdXMgPSBhbmltYXRlU2NhbGUgPyAwIDogdGhpcy5pbm5lclJhZGl1cztcbiAgICAgICAgY29uc3Qgb3V0ZXJSYWRpdXMgPSBhbmltYXRlU2NhbGUgPyAwIDogdGhpcy5vdXRlclJhZGl1cztcbiAgICAgICAgY29uc3QgeyBzaGFyZWRPcHRpb25zICwgaW5jbHVkZU9wdGlvbnMgIH0gPSB0aGlzLl9nZXRTaGFyZWRPcHRpb25zKHN0YXJ0LCBtb2RlKTtcbiAgICAgICAgbGV0IHN0YXJ0QW5nbGUgPSB0aGlzLl9nZXRSb3RhdGlvbigpO1xuICAgICAgICBsZXQgaTtcbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgc3RhcnQ7ICsraSl7XG4gICAgICAgICAgICBzdGFydEFuZ2xlICs9IHRoaXMuX2NpcmN1bWZlcmVuY2UoaSwgcmVzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGZvcihpID0gc3RhcnQ7IGkgPCBzdGFydCArIGNvdW50OyArK2kpe1xuICAgICAgICAgICAgY29uc3QgY2lyY3VtZmVyZW5jZSA9IHRoaXMuX2NpcmN1bWZlcmVuY2UoaSwgcmVzZXQpO1xuICAgICAgICAgICAgY29uc3QgYXJjID0gYXJjc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgeDogY2VudGVyWCArIHRoaXMub2Zmc2V0WCxcbiAgICAgICAgICAgICAgICB5OiBjZW50ZXJZICsgdGhpcy5vZmZzZXRZLFxuICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsXG4gICAgICAgICAgICAgICAgZW5kQW5nbGU6IHN0YXJ0QW5nbGUgKyBjaXJjdW1mZXJlbmNlLFxuICAgICAgICAgICAgICAgIGNpcmN1bWZlcmVuY2UsXG4gICAgICAgICAgICAgICAgb3V0ZXJSYWRpdXMsXG4gICAgICAgICAgICAgICAgaW5uZXJSYWRpdXNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaW5jbHVkZU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLm9wdGlvbnMgPSBzaGFyZWRPcHRpb25zIHx8IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpLCBhcmMuYWN0aXZlID8gJ2FjdGl2ZScgOiBtb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJ0QW5nbGUgKz0gY2lyY3VtZmVyZW5jZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRWxlbWVudChhcmMsIGksIHByb3BlcnRpZXMsIG1vZGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhbGN1bGF0ZVRvdGFsKCkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgbWV0YURhdGEgPSBtZXRhLmRhdGE7XG4gICAgICAgIGxldCB0b3RhbCA9IDA7XG4gICAgICAgIGxldCBpO1xuICAgICAgICBmb3IoaSA9IDA7IGkgPCBtZXRhRGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1ldGEuX3BhcnNlZFtpXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiAhaXNOYU4odmFsdWUpICYmIHRoaXMuY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkoaSkgJiYgIW1ldGFEYXRhW2ldLmhpZGRlbikge1xuICAgICAgICAgICAgICAgIHRvdGFsICs9IE1hdGguYWJzKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG90YWw7XG4gICAgfVxuICAgIGNhbGN1bGF0ZUNpcmN1bWZlcmVuY2UodmFsdWUpIHtcbiAgICAgICAgY29uc3QgdG90YWwgPSB0aGlzLl9jYWNoZWRNZXRhLnRvdGFsO1xuICAgICAgICBpZiAodG90YWwgPiAwICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBUQVUgKiAoTWF0aC5hYnModmFsdWUpIC8gdG90YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBnZXRMYWJlbEFuZFZhbHVlKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IGNoYXJ0LmRhdGEubGFiZWxzIHx8IFtdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGZvcm1hdE51bWJlcihtZXRhLl9wYXJzZWRbaW5kZXhdLCBjaGFydC5vcHRpb25zLmxvY2FsZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYWJlbDogbGFiZWxzW2luZGV4XSB8fCAnJyxcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldE1heEJvcmRlcldpZHRoKGFyY3MpIHtcbiAgICAgICAgbGV0IG1heCA9IDA7XG4gICAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgICAgbGV0IGksIGlsZW4sIG1ldGEsIGNvbnRyb2xsZXIsIG9wdGlvbnM7XG4gICAgICAgIGlmICghYXJjcykge1xuICAgICAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gY2hhcnQuZGF0YS5kYXRhc2V0cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgICAgIGlmIChjaGFydC5pc0RhdGFzZXRWaXNpYmxlKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpKTtcbiAgICAgICAgICAgICAgICAgICAgYXJjcyA9IG1ldGEuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlciA9IG1ldGEuY29udHJvbGxlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghYXJjcykge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gYXJjcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgb3B0aW9ucyA9IGNvbnRyb2xsZXIucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJvcmRlckFsaWduICE9PSAnaW5uZXInKSB7XG4gICAgICAgICAgICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCBvcHRpb25zLmJvcmRlcldpZHRoIHx8IDAsIG9wdGlvbnMuaG92ZXJCb3JkZXJXaWR0aCB8fCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4O1xuICAgIH1cbiAgICBnZXRNYXhPZmZzZXQoYXJjcykge1xuICAgICAgICBsZXQgbWF4ID0gMDtcbiAgICAgICAgZm9yKGxldCBpID0gMCwgaWxlbiA9IGFyY3MubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaSk7XG4gICAgICAgICAgICBtYXggPSBNYXRoLm1heChtYXgsIG9wdGlvbnMub2Zmc2V0IHx8IDAsIG9wdGlvbnMuaG92ZXJPZmZzZXQgfHwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICB9XG4gX2dldFJpbmdXZWlnaHRPZmZzZXQoZGF0YXNldEluZGV4KSB7XG4gICAgICAgIGxldCByaW5nV2VpZ2h0T2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGRhdGFzZXRJbmRleDsgKytpKXtcbiAgICAgICAgICAgIGlmICh0aGlzLmNoYXJ0LmlzRGF0YXNldFZpc2libGUoaSkpIHtcbiAgICAgICAgICAgICAgICByaW5nV2VpZ2h0T2Zmc2V0ICs9IHRoaXMuX2dldFJpbmdXZWlnaHQoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJpbmdXZWlnaHRPZmZzZXQ7XG4gICAgfVxuIF9nZXRSaW5nV2VpZ2h0KGRhdGFzZXRJbmRleCkge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgodmFsdWVPckRlZmF1bHQodGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0ud2VpZ2h0LCAxKSwgMCk7XG4gICAgfVxuIF9nZXRWaXNpYmxlRGF0YXNldFdlaWdodFRvdGFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0UmluZ1dlaWdodE9mZnNldCh0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMubGVuZ3RoKSB8fCAxO1xuICAgIH1cbn1cblxuY2xhc3MgTGluZUNvbnRyb2xsZXIgZXh0ZW5kcyBEYXRhc2V0Q29udHJvbGxlciB7XG4gICAgc3RhdGljIGlkID0gJ2xpbmUnO1xuIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICAgICAgZGF0YXNldEVsZW1lbnRUeXBlOiAnbGluZScsXG4gICAgICAgIGRhdGFFbGVtZW50VHlwZTogJ3BvaW50JyxcbiAgICAgICAgc2hvd0xpbmU6IHRydWUsXG4gICAgICAgIHNwYW5HYXBzOiBmYWxzZVxuICAgIH07XG4gc3RhdGljIG92ZXJyaWRlcyA9IHtcbiAgICAgICAgc2NhbGVzOiB7XG4gICAgICAgICAgICBfaW5kZXhfOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2NhdGVnb3J5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF92YWx1ZV86IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZWFyJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICB0aGlzLmVuYWJsZU9wdGlvblNoYXJpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnN1cHBvcnRzRGVjaW1hdGlvbiA9IHRydWU7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICB9XG4gICAgdXBkYXRlKG1vZGUpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIGNvbnN0IHsgZGF0YXNldDogbGluZSAsIGRhdGE6IHBvaW50cyA9IFtdICwgX2RhdGFzZXQgIH0gPSBtZXRhO1xuICAgICAgICBjb25zdCBhbmltYXRpb25zRGlzYWJsZWQgPSB0aGlzLmNoYXJ0Ll9hbmltYXRpb25zRGlzYWJsZWQ7XG4gICAgICAgIGxldCB7IHN0YXJ0ICwgY291bnQgIH0gPSBfZ2V0U3RhcnRBbmRDb3VudE9mVmlzaWJsZVBvaW50cyhtZXRhLCBwb2ludHMsIGFuaW1hdGlvbnNEaXNhYmxlZCk7XG4gICAgICAgIHRoaXMuX2RyYXdTdGFydCA9IHN0YXJ0O1xuICAgICAgICB0aGlzLl9kcmF3Q291bnQgPSBjb3VudDtcbiAgICAgICAgaWYgKF9zY2FsZVJhbmdlc0NoYW5nZWQobWV0YSkpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgICAgIGNvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBsaW5lLl9jaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGxpbmUuX2RhdGFzZXRJbmRleCA9IHRoaXMuaW5kZXg7XG4gICAgICAgIGxpbmUuX2RlY2ltYXRlZCA9ICEhX2RhdGFzZXQuX2RlY2ltYXRlZDtcbiAgICAgICAgbGluZS5wb2ludHMgPSBwb2ludHM7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnJlc29sdmVEYXRhc2V0RWxlbWVudE9wdGlvbnMobW9kZSk7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLnNob3dMaW5lKSB7XG4gICAgICAgICAgICBvcHRpb25zLmJvcmRlcldpZHRoID0gMDtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnNlZ21lbnQgPSB0aGlzLm9wdGlvbnMuc2VnbWVudDtcbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50KGxpbmUsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgYW5pbWF0ZWQ6ICFhbmltYXRpb25zRGlzYWJsZWQsXG4gICAgICAgICAgICBvcHRpb25zXG4gICAgICAgIH0sIG1vZGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRzKHBvaW50cywgc3RhcnQsIGNvdW50LCBtb2RlKTtcbiAgICB9XG4gICAgdXBkYXRlRWxlbWVudHMocG9pbnRzLCBzdGFydCwgY291bnQsIG1vZGUpIHtcbiAgICAgICAgY29uc3QgcmVzZXQgPSBtb2RlID09PSAncmVzZXQnO1xuICAgICAgICBjb25zdCB7IGlTY2FsZSAsIHZTY2FsZSAsIF9zdGFja2VkICwgX2RhdGFzZXQgIH0gPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCB7IHNoYXJlZE9wdGlvbnMgLCBpbmNsdWRlT3B0aW9ucyAgfSA9IHRoaXMuX2dldFNoYXJlZE9wdGlvbnMoc3RhcnQsIG1vZGUpO1xuICAgICAgICBjb25zdCBpQXhpcyA9IGlTY2FsZS5heGlzO1xuICAgICAgICBjb25zdCB2QXhpcyA9IHZTY2FsZS5heGlzO1xuICAgICAgICBjb25zdCB7IHNwYW5HYXBzICwgc2VnbWVudCAgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgbWF4R2FwTGVuZ3RoID0gaXNOdW1iZXIoc3BhbkdhcHMpID8gc3BhbkdhcHMgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIGNvbnN0IGRpcmVjdFVwZGF0ZSA9IHRoaXMuY2hhcnQuX2FuaW1hdGlvbnNEaXNhYmxlZCB8fCByZXNldCB8fCBtb2RlID09PSAnbm9uZSc7XG4gICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgY291bnQ7XG4gICAgICAgIGNvbnN0IHBvaW50c0NvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICAgICAgbGV0IHByZXZQYXJzZWQgPSBzdGFydCA+IDAgJiYgdGhpcy5nZXRQYXJzZWQoc3RhcnQgLSAxKTtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHBvaW50c0NvdW50OyArK2kpe1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gZGlyZWN0VXBkYXRlID8gcG9pbnQgOiB7fTtcbiAgICAgICAgICAgIGlmIChpIDwgc3RhcnQgfHwgaSA+PSBlbmQpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnNraXAgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaSk7XG4gICAgICAgICAgICBjb25zdCBudWxsRGF0YSA9IGlzTnVsbE9yVW5kZWYocGFyc2VkW3ZBeGlzXSk7XG4gICAgICAgICAgICBjb25zdCBpUGl4ZWwgPSBwcm9wZXJ0aWVzW2lBeGlzXSA9IGlTY2FsZS5nZXRQaXhlbEZvclZhbHVlKHBhcnNlZFtpQXhpc10sIGkpO1xuICAgICAgICAgICAgY29uc3QgdlBpeGVsID0gcHJvcGVydGllc1t2QXhpc10gPSByZXNldCB8fCBudWxsRGF0YSA/IHZTY2FsZS5nZXRCYXNlUGl4ZWwoKSA6IHZTY2FsZS5nZXRQaXhlbEZvclZhbHVlKF9zdGFja2VkID8gdGhpcy5hcHBseVN0YWNrKHZTY2FsZSwgcGFyc2VkLCBfc3RhY2tlZCkgOiBwYXJzZWRbdkF4aXNdLCBpKTtcbiAgICAgICAgICAgIHByb3BlcnRpZXMuc2tpcCA9IGlzTmFOKGlQaXhlbCkgfHwgaXNOYU4odlBpeGVsKSB8fCBudWxsRGF0YTtcbiAgICAgICAgICAgIHByb3BlcnRpZXMuc3RvcCA9IGkgPiAwICYmIE1hdGguYWJzKHBhcnNlZFtpQXhpc10gLSBwcmV2UGFyc2VkW2lBeGlzXSkgPiBtYXhHYXBMZW5ndGg7XG4gICAgICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucGFyc2VkID0gcGFyc2VkO1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucmF3ID0gX2RhdGFzZXQuZGF0YVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbmNsdWRlT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMub3B0aW9ucyA9IHNoYXJlZE9wdGlvbnMgfHwgdGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGksIHBvaW50LmFjdGl2ZSA/ICdhY3RpdmUnIDogbW9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWRpcmVjdFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRWxlbWVudChwb2ludCwgaSwgcHJvcGVydGllcywgbW9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2UGFyc2VkID0gcGFyc2VkO1xuICAgICAgICB9XG4gICAgfVxuIGdldE1heE92ZXJmbG93KCkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgZGF0YXNldCA9IG1ldGEuZGF0YXNldDtcbiAgICAgICAgY29uc3QgYm9yZGVyID0gZGF0YXNldC5vcHRpb25zICYmIGRhdGFzZXQub3B0aW9ucy5ib3JkZXJXaWR0aCB8fCAwO1xuICAgICAgICBjb25zdCBkYXRhID0gbWV0YS5kYXRhIHx8IFtdO1xuICAgICAgICBpZiAoIWRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gYm9yZGVyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpcnN0UG9pbnQgPSBkYXRhWzBdLnNpemUodGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKDApKTtcbiAgICAgICAgY29uc3QgbGFzdFBvaW50ID0gZGF0YVtkYXRhLmxlbmd0aCAtIDFdLnNpemUodGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGRhdGEubGVuZ3RoIC0gMSkpO1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoYm9yZGVyLCBmaXJzdFBvaW50LCBsYXN0UG9pbnQpIC8gMjtcbiAgICB9XG4gICAgZHJhdygpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIG1ldGEuZGF0YXNldC51cGRhdGVDb250cm9sUG9pbnRzKHRoaXMuY2hhcnQuY2hhcnRBcmVhLCBtZXRhLmlTY2FsZS5heGlzKTtcbiAgICAgICAgc3VwZXIuZHJhdygpO1xuICAgIH1cbn1cblxuY2xhc3MgUG9sYXJBcmVhQ29udHJvbGxlciBleHRlbmRzIERhdGFzZXRDb250cm9sbGVyIHtcbiAgICBzdGF0aWMgaWQgPSAncG9sYXJBcmVhJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGRhdGFFbGVtZW50VHlwZTogJ2FyYycsXG4gICAgICAgIGFuaW1hdGlvbjoge1xuICAgICAgICAgICAgYW5pbWF0ZVJvdGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGFuaW1hdGVTY2FsZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBhbmltYXRpb25zOiB7XG4gICAgICAgICAgICBudW1iZXJzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAneCcsXG4gICAgICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0QW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICAnZW5kQW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICAnaW5uZXJSYWRpdXMnLFxuICAgICAgICAgICAgICAgICAgICAnb3V0ZXJSYWRpdXMnXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBpbmRleEF4aXM6ICdyJyxcbiAgICAgICAgc3RhcnRBbmdsZTogMFxuICAgIH07XG4gc3RhdGljIG92ZXJyaWRlcyA9IHtcbiAgICAgICAgYXNwZWN0UmF0aW86IDEsXG4gICAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgICAgIGxlZ2VuZDoge1xuICAgICAgICAgICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUxhYmVscyAoY2hhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBjaGFydC5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEubGFiZWxzLmxlbmd0aCAmJiBkYXRhLmRhdGFzZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGFiZWxzOiB7IHBvaW50U3R5bGUgLCBjb2xvciAgfSAgfSA9IGNoYXJ0LmxlZ2VuZC5vcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmxhYmVscy5tYXAoKGxhYmVsLCBpKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gbWV0YS5jb250cm9sbGVyLmdldFN0eWxlKGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogbGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IHN0eWxlLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVN0eWxlOiBzdHlsZS5ib3JkZXJDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRDb2xvcjogY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lV2lkdGg6IHN0eWxlLmJvcmRlcldpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRTdHlsZTogcG9pbnRTdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbjogIWNoYXJ0LmdldERhdGFWaXNpYmlsaXR5KGkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25DbGljayAoZSwgbGVnZW5kSXRlbSwgbGVnZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5jaGFydC50b2dnbGVEYXRhVmlzaWJpbGl0eShsZWdlbmRJdGVtLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmNoYXJ0LnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2NhbGVzOiB7XG4gICAgICAgICAgICByOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3JhZGlhbExpbmVhcicsXG4gICAgICAgICAgICAgICAgYW5nbGVMaW5lczoge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmVnaW5BdFplcm86IHRydWUsXG4gICAgICAgICAgICAgICAgZ3JpZDoge1xuICAgICAgICAgICAgICAgICAgICBjaXJjdWxhcjogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcG9pbnRMYWJlbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGU6IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3RydWN0b3IoY2hhcnQsIGRhdGFzZXRJbmRleCl7XG4gICAgICAgIHN1cGVyKGNoYXJ0LCBkYXRhc2V0SW5kZXgpO1xuICAgICAgICB0aGlzLmlubmVyUmFkaXVzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm91dGVyUmFkaXVzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXRMYWJlbEFuZFZhbHVlKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IGNoYXJ0LmRhdGEubGFiZWxzIHx8IFtdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGZvcm1hdE51bWJlcihtZXRhLl9wYXJzZWRbaW5kZXhdLnIsIGNoYXJ0Lm9wdGlvbnMubG9jYWxlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhYmVsOiBsYWJlbHNbaW5kZXhdIHx8ICcnLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcGFyc2VPYmplY3REYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgICAgICByZXR1cm4gX3BhcnNlT2JqZWN0RGF0YVJhZGlhbFNjYWxlLmJpbmQodGhpcykobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KTtcbiAgICB9XG4gICAgdXBkYXRlKG1vZGUpIHtcbiAgICAgICAgY29uc3QgYXJjcyA9IHRoaXMuX2NhY2hlZE1ldGEuZGF0YTtcbiAgICAgICAgdGhpcy5fdXBkYXRlUmFkaXVzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudHMoYXJjcywgMCwgYXJjcy5sZW5ndGgsIG1vZGUpO1xuICAgIH1cbiBnZXRNaW5NYXgoKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCByYW5nZSA9IHtcbiAgICAgICAgICAgIG1pbjogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgICAgICAgbWF4OiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICAgICAgfTtcbiAgICAgICAgbWV0YS5kYXRhLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KT0+e1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaW5kZXgpLnI7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHBhcnNlZCkgJiYgdGhpcy5jaGFydC5nZXREYXRhVmlzaWJpbGl0eShpbmRleCkpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkIDwgcmFuZ2UubWluKSB7XG4gICAgICAgICAgICAgICAgICAgIHJhbmdlLm1pbiA9IHBhcnNlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZCA+IHJhbmdlLm1heCkge1xuICAgICAgICAgICAgICAgICAgICByYW5nZS5tYXggPSBwYXJzZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH1cbiBfdXBkYXRlUmFkaXVzKCkge1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IGNoYXJ0QXJlYSA9IGNoYXJ0LmNoYXJ0QXJlYTtcbiAgICAgICAgY29uc3Qgb3B0cyA9IGNoYXJ0Lm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IG1pblNpemUgPSBNYXRoLm1pbihjaGFydEFyZWEucmlnaHQgLSBjaGFydEFyZWEubGVmdCwgY2hhcnRBcmVhLmJvdHRvbSAtIGNoYXJ0QXJlYS50b3ApO1xuICAgICAgICBjb25zdCBvdXRlclJhZGl1cyA9IE1hdGgubWF4KG1pblNpemUgLyAyLCAwKTtcbiAgICAgICAgY29uc3QgaW5uZXJSYWRpdXMgPSBNYXRoLm1heChvcHRzLmN1dG91dFBlcmNlbnRhZ2UgPyBvdXRlclJhZGl1cyAvIDEwMCAqIG9wdHMuY3V0b3V0UGVyY2VudGFnZSA6IDEsIDApO1xuICAgICAgICBjb25zdCByYWRpdXNMZW5ndGggPSAob3V0ZXJSYWRpdXMgLSBpbm5lclJhZGl1cykgLyBjaGFydC5nZXRWaXNpYmxlRGF0YXNldENvdW50KCk7XG4gICAgICAgIHRoaXMub3V0ZXJSYWRpdXMgPSBvdXRlclJhZGl1cyAtIHJhZGl1c0xlbmd0aCAqIHRoaXMuaW5kZXg7XG4gICAgICAgIHRoaXMuaW5uZXJSYWRpdXMgPSB0aGlzLm91dGVyUmFkaXVzIC0gcmFkaXVzTGVuZ3RoO1xuICAgIH1cbiAgICB1cGRhdGVFbGVtZW50cyhhcmNzLCBzdGFydCwgY291bnQsIG1vZGUpIHtcbiAgICAgICAgY29uc3QgcmVzZXQgPSBtb2RlID09PSAncmVzZXQnO1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBjaGFydC5vcHRpb25zO1xuICAgICAgICBjb25zdCBhbmltYXRpb25PcHRzID0gb3B0cy5hbmltYXRpb247XG4gICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5fY2FjaGVkTWV0YS5yU2NhbGU7XG4gICAgICAgIGNvbnN0IGNlbnRlclggPSBzY2FsZS54Q2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXJZID0gc2NhbGUueUNlbnRlcjtcbiAgICAgICAgY29uc3QgZGF0YXNldFN0YXJ0QW5nbGUgPSBzY2FsZS5nZXRJbmRleEFuZ2xlKDApIC0gMC41ICogUEk7XG4gICAgICAgIGxldCBhbmdsZSA9IGRhdGFzZXRTdGFydEFuZ2xlO1xuICAgICAgICBsZXQgaTtcbiAgICAgICAgY29uc3QgZGVmYXVsdEFuZ2xlID0gMzYwIC8gdGhpcy5jb3VudFZpc2libGVFbGVtZW50cygpO1xuICAgICAgICBmb3IoaSA9IDA7IGkgPCBzdGFydDsgKytpKXtcbiAgICAgICAgICAgIGFuZ2xlICs9IHRoaXMuX2NvbXB1dGVBbmdsZShpLCBtb2RlLCBkZWZhdWx0QW5nbGUpO1xuICAgICAgICB9XG4gICAgICAgIGZvcihpID0gc3RhcnQ7IGkgPCBzdGFydCArIGNvdW50OyBpKyspe1xuICAgICAgICAgICAgY29uc3QgYXJjID0gYXJjc1tpXTtcbiAgICAgICAgICAgIGxldCBzdGFydEFuZ2xlID0gYW5nbGU7XG4gICAgICAgICAgICBsZXQgZW5kQW5nbGUgPSBhbmdsZSArIHRoaXMuX2NvbXB1dGVBbmdsZShpLCBtb2RlLCBkZWZhdWx0QW5nbGUpO1xuICAgICAgICAgICAgbGV0IG91dGVyUmFkaXVzID0gY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkoaSkgPyBzY2FsZS5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSh0aGlzLmdldFBhcnNlZChpKS5yKSA6IDA7XG4gICAgICAgICAgICBhbmdsZSA9IGVuZEFuZ2xlO1xuICAgICAgICAgICAgaWYgKHJlc2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFuaW1hdGlvbk9wdHMuYW5pbWF0ZVNjYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dGVyUmFkaXVzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFuaW1hdGlvbk9wdHMuYW5pbWF0ZVJvdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydEFuZ2xlID0gZW5kQW5nbGUgPSBkYXRhc2V0U3RhcnRBbmdsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICAgIHg6IGNlbnRlclgsXG4gICAgICAgICAgICAgICAgeTogY2VudGVyWSxcbiAgICAgICAgICAgICAgICBpbm5lclJhZGl1czogMCxcbiAgICAgICAgICAgICAgICBvdXRlclJhZGl1cyxcbiAgICAgICAgICAgICAgICBzdGFydEFuZ2xlLFxuICAgICAgICAgICAgICAgIGVuZEFuZ2xlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpLCBhcmMuYWN0aXZlID8gJ2FjdGl2ZScgOiBtb2RlKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRWxlbWVudChhcmMsIGksIHByb3BlcnRpZXMsIG1vZGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvdW50VmlzaWJsZUVsZW1lbnRzKCkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgbWV0YS5kYXRhLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KT0+e1xuICAgICAgICAgICAgaWYgKCFpc05hTih0aGlzLmdldFBhcnNlZChpbmRleCkucikgJiYgdGhpcy5jaGFydC5nZXREYXRhVmlzaWJpbGl0eShpbmRleCkpIHtcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH1cbiBfY29tcHV0ZUFuZ2xlKGluZGV4LCBtb2RlLCBkZWZhdWx0QW5nbGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkoaW5kZXgpID8gdG9SYWRpYW5zKHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpbmRleCwgbW9kZSkuYW5nbGUgfHwgZGVmYXVsdEFuZ2xlKSA6IDA7XG4gICAgfVxufVxuXG5jbGFzcyBQaWVDb250cm9sbGVyIGV4dGVuZHMgRG91Z2hudXRDb250cm9sbGVyIHtcbiAgICBzdGF0aWMgaWQgPSAncGllJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGN1dG91dDogMCxcbiAgICAgICAgcm90YXRpb246IDAsXG4gICAgICAgIGNpcmN1bWZlcmVuY2U6IDM2MCxcbiAgICAgICAgcmFkaXVzOiAnMTAwJSdcbiAgICB9O1xufVxuXG5jbGFzcyBSYWRhckNvbnRyb2xsZXIgZXh0ZW5kcyBEYXRhc2V0Q29udHJvbGxlciB7XG4gICAgc3RhdGljIGlkID0gJ3JhZGFyJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGRhdGFzZXRFbGVtZW50VHlwZTogJ2xpbmUnLFxuICAgICAgICBkYXRhRWxlbWVudFR5cGU6ICdwb2ludCcsXG4gICAgICAgIGluZGV4QXhpczogJ3InLFxuICAgICAgICBzaG93TGluZTogdHJ1ZSxcbiAgICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgICAgIGxpbmU6IHtcbiAgICAgICAgICAgICAgICBmaWxsOiAnc3RhcnQnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuIHN0YXRpYyBvdmVycmlkZXMgPSB7XG4gICAgICAgIGFzcGVjdFJhdGlvOiAxLFxuICAgICAgICBzY2FsZXM6IHtcbiAgICAgICAgICAgIHI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAncmFkaWFsTGluZWFyJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiBnZXRMYWJlbEFuZFZhbHVlKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IHZTY2FsZSA9IHRoaXMuX2NhY2hlZE1ldGEudlNjYWxlO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLmdldFBhcnNlZChpbmRleCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYWJlbDogdlNjYWxlLmdldExhYmVscygpW2luZGV4XSxcbiAgICAgICAgICAgIHZhbHVlOiAnJyArIHZTY2FsZS5nZXRMYWJlbEZvclZhbHVlKHBhcnNlZFt2U2NhbGUuYXhpc10pXG4gICAgICAgIH07XG4gICAgfVxuICAgIHBhcnNlT2JqZWN0RGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9wYXJzZU9iamVjdERhdGFSYWRpYWxTY2FsZS5iaW5kKHRoaXMpKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCk7XG4gICAgfVxuICAgIHVwZGF0ZShtb2RlKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBsaW5lID0gbWV0YS5kYXRhc2V0O1xuICAgICAgICBjb25zdCBwb2ludHMgPSBtZXRhLmRhdGEgfHwgW107XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IG1ldGEuaVNjYWxlLmdldExhYmVscygpO1xuICAgICAgICBsaW5lLnBvaW50cyA9IHBvaW50cztcbiAgICAgICAgaWYgKG1vZGUgIT09ICdyZXNpemUnKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5yZXNvbHZlRGF0YXNldEVsZW1lbnRPcHRpb25zKG1vZGUpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc2hvd0xpbmUpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmJvcmRlcldpZHRoID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgX2xvb3A6IHRydWUsXG4gICAgICAgICAgICAgICAgX2Z1bGxMb29wOiBsYWJlbHMubGVuZ3RoID09PSBwb2ludHMubGVuZ3RoLFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQobGluZSwgdW5kZWZpbmVkLCBwcm9wZXJ0aWVzLCBtb2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRzKHBvaW50cywgMCwgcG9pbnRzLmxlbmd0aCwgbW9kZSk7XG4gICAgfVxuICAgIHVwZGF0ZUVsZW1lbnRzKHBvaW50cywgc3RhcnQsIGNvdW50LCBtb2RlKSB7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5fY2FjaGVkTWV0YS5yU2NhbGU7XG4gICAgICAgIGNvbnN0IHJlc2V0ID0gbW9kZSA9PT0gJ3Jlc2V0JztcbiAgICAgICAgZm9yKGxldCBpID0gc3RhcnQ7IGkgPCBzdGFydCArIGNvdW50OyBpKyspe1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGksIHBvaW50LmFjdGl2ZSA/ICdhY3RpdmUnIDogbW9kZSk7XG4gICAgICAgICAgICBjb25zdCBwb2ludFBvc2l0aW9uID0gc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKGksIHRoaXMuZ2V0UGFyc2VkKGkpLnIpO1xuICAgICAgICAgICAgY29uc3QgeCA9IHJlc2V0ID8gc2NhbGUueENlbnRlciA6IHBvaW50UG9zaXRpb24ueDtcbiAgICAgICAgICAgIGNvbnN0IHkgPSByZXNldCA/IHNjYWxlLnlDZW50ZXIgOiBwb2ludFBvc2l0aW9uLnk7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgeSxcbiAgICAgICAgICAgICAgICBhbmdsZTogcG9pbnRQb3NpdGlvbi5hbmdsZSxcbiAgICAgICAgICAgICAgICBza2lwOiBpc05hTih4KSB8fCBpc05hTih5KSxcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50KHBvaW50LCBpLCBwcm9wZXJ0aWVzLCBtb2RlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU2NhdHRlckNvbnRyb2xsZXIgZXh0ZW5kcyBEYXRhc2V0Q29udHJvbGxlciB7XG4gICAgc3RhdGljIGlkID0gJ3NjYXR0ZXInO1xuIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICAgICAgZGF0YXNldEVsZW1lbnRUeXBlOiBmYWxzZSxcbiAgICAgICAgZGF0YUVsZW1lbnRUeXBlOiAncG9pbnQnLFxuICAgICAgICBzaG93TGluZTogZmFsc2UsXG4gICAgICAgIGZpbGw6IGZhbHNlXG4gICAgfTtcbiBzdGF0aWMgb3ZlcnJpZGVzID0ge1xuICAgICAgICBpbnRlcmFjdGlvbjoge1xuICAgICAgICAgICAgbW9kZTogJ3BvaW50J1xuICAgICAgICB9LFxuICAgICAgICBzY2FsZXM6IHtcbiAgICAgICAgICAgIHg6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZWFyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHk6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZWFyJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiBnZXRMYWJlbEFuZFZhbHVlKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmNoYXJ0LmRhdGEubGFiZWxzIHx8IFtdO1xuICAgICAgICBjb25zdCB7IHhTY2FsZSAsIHlTY2FsZSAgfSA9IG1ldGE7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuZ2V0UGFyc2VkKGluZGV4KTtcbiAgICAgICAgY29uc3QgeCA9IHhTY2FsZS5nZXRMYWJlbEZvclZhbHVlKHBhcnNlZC54KTtcbiAgICAgICAgY29uc3QgeSA9IHlTY2FsZS5nZXRMYWJlbEZvclZhbHVlKHBhcnNlZC55KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhYmVsOiBsYWJlbHNbaW5kZXhdIHx8ICcnLFxuICAgICAgICAgICAgdmFsdWU6ICcoJyArIHggKyAnLCAnICsgeSArICcpJ1xuICAgICAgICB9O1xuICAgIH1cbiAgICB1cGRhdGUobW9kZSkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgeyBkYXRhOiBwb2ludHMgPSBbXSAgfSA9IG1ldGE7XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbnNEaXNhYmxlZCA9IHRoaXMuY2hhcnQuX2FuaW1hdGlvbnNEaXNhYmxlZDtcbiAgICAgICAgbGV0IHsgc3RhcnQgLCBjb3VudCAgfSA9IF9nZXRTdGFydEFuZENvdW50T2ZWaXNpYmxlUG9pbnRzKG1ldGEsIHBvaW50cywgYW5pbWF0aW9uc0Rpc2FibGVkKTtcbiAgICAgICAgdGhpcy5fZHJhd1N0YXJ0ID0gc3RhcnQ7XG4gICAgICAgIHRoaXMuX2RyYXdDb3VudCA9IGNvdW50O1xuICAgICAgICBpZiAoX3NjYWxlUmFuZ2VzQ2hhbmdlZChtZXRhKSkge1xuICAgICAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgICAgICAgY291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0xpbmUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhc2V0RWxlbWVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEVsZW1lbnRzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IGRhdGFzZXQ6IGxpbmUgLCBfZGF0YXNldCAgfSA9IG1ldGE7XG4gICAgICAgICAgICBsaW5lLl9jaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgICAgICBsaW5lLl9kYXRhc2V0SW5kZXggPSB0aGlzLmluZGV4O1xuICAgICAgICAgICAgbGluZS5fZGVjaW1hdGVkID0gISFfZGF0YXNldC5fZGVjaW1hdGVkO1xuICAgICAgICAgICAgbGluZS5wb2ludHMgPSBwb2ludHM7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5yZXNvbHZlRGF0YXNldEVsZW1lbnRPcHRpb25zKG1vZGUpO1xuICAgICAgICAgICAgb3B0aW9ucy5zZWdtZW50ID0gdGhpcy5vcHRpb25zLnNlZ21lbnQ7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQobGluZSwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICAgICAgYW5pbWF0ZWQ6ICFhbmltYXRpb25zRGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgfSwgbW9kZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhc2V0RWxlbWVudFR5cGUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBtZXRhLmRhdGFzZXQ7XG4gICAgICAgICAgICB0aGlzLmRhdGFzZXRFbGVtZW50VHlwZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudHMocG9pbnRzLCBzdGFydCwgY291bnQsIG1vZGUpO1xuICAgIH1cbiAgICBhZGRFbGVtZW50cygpIHtcbiAgICAgICAgY29uc3QgeyBzaG93TGluZSAgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgaWYgKCF0aGlzLmRhdGFzZXRFbGVtZW50VHlwZSAmJiBzaG93TGluZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhc2V0RWxlbWVudFR5cGUgPSB0aGlzLmNoYXJ0LnJlZ2lzdHJ5LmdldEVsZW1lbnQoJ2xpbmUnKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5hZGRFbGVtZW50cygpO1xuICAgIH1cbiAgICB1cGRhdGVFbGVtZW50cyhwb2ludHMsIHN0YXJ0LCBjb3VudCwgbW9kZSkge1xuICAgICAgICBjb25zdCByZXNldCA9IG1vZGUgPT09ICdyZXNldCc7XG4gICAgICAgIGNvbnN0IHsgaVNjYWxlICwgdlNjYWxlICwgX3N0YWNrZWQgLCBfZGF0YXNldCAgfSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIGNvbnN0IGZpcnN0T3B0cyA9IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhzdGFydCwgbW9kZSk7XG4gICAgICAgIGNvbnN0IHNoYXJlZE9wdGlvbnMgPSB0aGlzLmdldFNoYXJlZE9wdGlvbnMoZmlyc3RPcHRzKTtcbiAgICAgICAgY29uc3QgaW5jbHVkZU9wdGlvbnMgPSB0aGlzLmluY2x1ZGVPcHRpb25zKG1vZGUsIHNoYXJlZE9wdGlvbnMpO1xuICAgICAgICBjb25zdCBpQXhpcyA9IGlTY2FsZS5heGlzO1xuICAgICAgICBjb25zdCB2QXhpcyA9IHZTY2FsZS5heGlzO1xuICAgICAgICBjb25zdCB7IHNwYW5HYXBzICwgc2VnbWVudCAgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgbWF4R2FwTGVuZ3RoID0gaXNOdW1iZXIoc3BhbkdhcHMpID8gc3BhbkdhcHMgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIGNvbnN0IGRpcmVjdFVwZGF0ZSA9IHRoaXMuY2hhcnQuX2FuaW1hdGlvbnNEaXNhYmxlZCB8fCByZXNldCB8fCBtb2RlID09PSAnbm9uZSc7XG4gICAgICAgIGxldCBwcmV2UGFyc2VkID0gc3RhcnQgPiAwICYmIHRoaXMuZ2V0UGFyc2VkKHN0YXJ0IC0gMSk7XG4gICAgICAgIGZvcihsZXQgaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3VudDsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaSk7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gZGlyZWN0VXBkYXRlID8gcG9pbnQgOiB7fTtcbiAgICAgICAgICAgIGNvbnN0IG51bGxEYXRhID0gaXNOdWxsT3JVbmRlZihwYXJzZWRbdkF4aXNdKTtcbiAgICAgICAgICAgIGNvbnN0IGlQaXhlbCA9IHByb3BlcnRpZXNbaUF4aXNdID0gaVNjYWxlLmdldFBpeGVsRm9yVmFsdWUocGFyc2VkW2lBeGlzXSwgaSk7XG4gICAgICAgICAgICBjb25zdCB2UGl4ZWwgPSBwcm9wZXJ0aWVzW3ZBeGlzXSA9IHJlc2V0IHx8IG51bGxEYXRhID8gdlNjYWxlLmdldEJhc2VQaXhlbCgpIDogdlNjYWxlLmdldFBpeGVsRm9yVmFsdWUoX3N0YWNrZWQgPyB0aGlzLmFwcGx5U3RhY2sodlNjYWxlLCBwYXJzZWQsIF9zdGFja2VkKSA6IHBhcnNlZFt2QXhpc10sIGkpO1xuICAgICAgICAgICAgcHJvcGVydGllcy5za2lwID0gaXNOYU4oaVBpeGVsKSB8fCBpc05hTih2UGl4ZWwpIHx8IG51bGxEYXRhO1xuICAgICAgICAgICAgcHJvcGVydGllcy5zdG9wID0gaSA+IDAgJiYgTWF0aC5hYnMocGFyc2VkW2lBeGlzXSAtIHByZXZQYXJzZWRbaUF4aXNdKSA+IG1heEdhcExlbmd0aDtcbiAgICAgICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydGllcy5wYXJzZWQgPSBwYXJzZWQ7XG4gICAgICAgICAgICAgICAgcHJvcGVydGllcy5yYXcgPSBfZGF0YXNldC5kYXRhW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluY2x1ZGVPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydGllcy5vcHRpb25zID0gc2hhcmVkT3B0aW9ucyB8fCB0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaSwgcG9pbnQuYWN0aXZlID8gJ2FjdGl2ZScgOiBtb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZGlyZWN0VXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50KHBvaW50LCBpLCBwcm9wZXJ0aWVzLCBtb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZXZQYXJzZWQgPSBwYXJzZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVTaGFyZWRPcHRpb25zKHNoYXJlZE9wdGlvbnMsIG1vZGUsIGZpcnN0T3B0cyk7XG4gICAgfVxuIGdldE1heE92ZXJmbG93KCkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgZGF0YSA9IG1ldGEuZGF0YSB8fCBbXTtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc2hvd0xpbmUpIHtcbiAgICAgICAgICAgIGxldCBtYXggPSAwO1xuICAgICAgICAgICAgZm9yKGxldCBpID0gZGF0YS5sZW5ndGggLSAxOyBpID49IDA7IC0taSl7XG4gICAgICAgICAgICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCBkYXRhW2ldLnNpemUodGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGkpKSAvIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1heCA+IDAgJiYgbWF4O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGFzZXQgPSBtZXRhLmRhdGFzZXQ7XG4gICAgICAgIGNvbnN0IGJvcmRlciA9IGRhdGFzZXQub3B0aW9ucyAmJiBkYXRhc2V0Lm9wdGlvbnMuYm9yZGVyV2lkdGggfHwgMDtcbiAgICAgICAgaWYgKCFkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGJvcmRlcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdFBvaW50ID0gZGF0YVswXS5zaXplKHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucygwKSk7XG4gICAgICAgIGNvbnN0IGxhc3RQb2ludCA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXS5zaXplKHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhkYXRhLmxlbmd0aCAtIDEpKTtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KGJvcmRlciwgZmlyc3RQb2ludCwgbGFzdFBvaW50KSAvIDI7XG4gICAgfVxufVxuXG52YXIgY29udHJvbGxlcnMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG5fX3Byb3RvX186IG51bGwsXG5CYXJDb250cm9sbGVyOiBCYXJDb250cm9sbGVyLFxuQnViYmxlQ29udHJvbGxlcjogQnViYmxlQ29udHJvbGxlcixcbkRvdWdobnV0Q29udHJvbGxlcjogRG91Z2hudXRDb250cm9sbGVyLFxuTGluZUNvbnRyb2xsZXI6IExpbmVDb250cm9sbGVyLFxuUGllQ29udHJvbGxlcjogUGllQ29udHJvbGxlcixcblBvbGFyQXJlYUNvbnRyb2xsZXI6IFBvbGFyQXJlYUNvbnRyb2xsZXIsXG5SYWRhckNvbnRyb2xsZXI6IFJhZGFyQ29udHJvbGxlcixcblNjYXR0ZXJDb250cm9sbGVyOiBTY2F0dGVyQ29udHJvbGxlclxufSk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBDaGFydC5fYWRhcHRlcnNcbiAqIEBzaW5jZSAyLjguMFxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBhYnN0cmFjdCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZDogQ2hlY2sgdGhhdCBhIGNvbXBsZXRlIGRhdGUgYWRhcHRlciBpcyBwcm92aWRlZC4nKTtcbn1cbi8qKlxuICogRGF0ZSBhZGFwdGVyIChjdXJyZW50IHVzZWQgYnkgdGhlIHRpbWUgc2NhbGUpXG4gKiBAbmFtZXNwYWNlIENoYXJ0Ll9hZGFwdGVycy5fZGF0ZVxuICogQG1lbWJlcm9mIENoYXJ0Ll9hZGFwdGVyc1xuICogQHByaXZhdGVcbiAqLyBjbGFzcyBEYXRlQWRhcHRlckJhc2Uge1xuICAgIC8qKlxuICAgKiBPdmVycmlkZSBkZWZhdWx0IGRhdGUgYWRhcHRlciBtZXRob2RzLlxuICAgKiBBY2NlcHRzIHR5cGUgcGFyYW1ldGVyIHRvIGRlZmluZSBvcHRpb25zIHR5cGUuXG4gICAqIEBleGFtcGxlXG4gICAqIENoYXJ0Ll9hZGFwdGVycy5fZGF0ZS5vdmVycmlkZTx7bXlBZGFwdGVyT3B0aW9uOiBzdHJpbmd9Pih7XG4gICAqICAgaW5pdCgpIHtcbiAgICogICAgIGNvbnNvbGUubG9nKHRoaXMub3B0aW9ucy5teUFkYXB0ZXJPcHRpb24pO1xuICAgKiAgIH1cbiAgICogfSlcbiAgICovIHN0YXRpYyBvdmVycmlkZShtZW1iZXJzKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oRGF0ZUFkYXB0ZXJCYXNlLnByb3RvdHlwZSwgbWVtYmVycyk7XG4gICAgfVxuICAgIG9wdGlvbnM7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyl7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICBpbml0KCkge31cbiAgICBmb3JtYXRzKCkge1xuICAgICAgICByZXR1cm4gYWJzdHJhY3QoKTtcbiAgICB9XG4gICAgcGFyc2UoKSB7XG4gICAgICAgIHJldHVybiBhYnN0cmFjdCgpO1xuICAgIH1cbiAgICBmb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiBhYnN0cmFjdCgpO1xuICAgIH1cbiAgICBhZGQoKSB7XG4gICAgICAgIHJldHVybiBhYnN0cmFjdCgpO1xuICAgIH1cbiAgICBkaWZmKCkge1xuICAgICAgICByZXR1cm4gYWJzdHJhY3QoKTtcbiAgICB9XG4gICAgc3RhcnRPZigpIHtcbiAgICAgICAgcmV0dXJuIGFic3RyYWN0KCk7XG4gICAgfVxuICAgIGVuZE9mKCkge1xuICAgICAgICByZXR1cm4gYWJzdHJhY3QoKTtcbiAgICB9XG59XG52YXIgYWRhcHRlcnMgPSB7XG4gICAgX2RhdGU6IERhdGVBZGFwdGVyQmFzZVxufTtcblxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoKG1ldGFzZXQsIGF4aXMsIHZhbHVlLCBpbnRlcnNlY3QpIHtcbiAgICBjb25zdCB7IGNvbnRyb2xsZXIgLCBkYXRhICwgX3NvcnRlZCAgfSA9IG1ldGFzZXQ7XG4gICAgY29uc3QgaVNjYWxlID0gY29udHJvbGxlci5fY2FjaGVkTWV0YS5pU2NhbGU7XG4gICAgaWYgKGlTY2FsZSAmJiBheGlzID09PSBpU2NhbGUuYXhpcyAmJiBheGlzICE9PSAncicgJiYgX3NvcnRlZCAmJiBkYXRhLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBsb29rdXBNZXRob2QgPSBpU2NhbGUuX3JldmVyc2VQaXhlbHMgPyBfcmxvb2t1cEJ5S2V5IDogX2xvb2t1cEJ5S2V5O1xuICAgICAgICBpZiAoIWludGVyc2VjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvb2t1cE1ldGhvZChkYXRhLCBheGlzLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udHJvbGxlci5fc2hhcmVkT3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZWwgPSBkYXRhWzBdO1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0eXBlb2YgZWwuZ2V0UmFuZ2UgPT09ICdmdW5jdGlvbicgJiYgZWwuZ2V0UmFuZ2UoYXhpcyk7XG4gICAgICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IGxvb2t1cE1ldGhvZChkYXRhLCBheGlzLCB2YWx1ZSAtIHJhbmdlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBsb29rdXBNZXRob2QoZGF0YSwgYXhpcywgdmFsdWUgKyByYW5nZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbG86IHN0YXJ0LmxvLFxuICAgICAgICAgICAgICAgICAgICBoaTogZW5kLmhpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBsbzogMCxcbiAgICAgICAgaGk6IGRhdGEubGVuZ3RoIC0gMVxuICAgIH07XG59XG4gZnVuY3Rpb24gZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zKGNoYXJ0LCBheGlzLCBwb3NpdGlvbiwgaGFuZGxlciwgaW50ZXJzZWN0KSB7XG4gICAgY29uc3QgbWV0YXNldHMgPSBjaGFydC5nZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzKCk7XG4gICAgY29uc3QgdmFsdWUgPSBwb3NpdGlvbltheGlzXTtcbiAgICBmb3IobGV0IGkgPSAwLCBpbGVuID0gbWV0YXNldHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgY29uc3QgeyBpbmRleCAsIGRhdGEgIH0gPSBtZXRhc2V0c1tpXTtcbiAgICAgICAgY29uc3QgeyBsbyAsIGhpICB9ID0gYmluYXJ5U2VhcmNoKG1ldGFzZXRzW2ldLCBheGlzLCB2YWx1ZSwgaW50ZXJzZWN0KTtcbiAgICAgICAgZm9yKGxldCBqID0gbG87IGogPD0gaGk7ICsrail7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZGF0YVtqXTtcbiAgICAgICAgICAgIGlmICghZWxlbWVudC5za2lwKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlcihlbGVtZW50LCBpbmRleCwgaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4gZnVuY3Rpb24gZ2V0RGlzdGFuY2VNZXRyaWNGb3JBeGlzKGF4aXMpIHtcbiAgICBjb25zdCB1c2VYID0gYXhpcy5pbmRleE9mKCd4JykgIT09IC0xO1xuICAgIGNvbnN0IHVzZVkgPSBheGlzLmluZGV4T2YoJ3knKSAhPT0gLTE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHB0MSwgcHQyKSB7XG4gICAgICAgIGNvbnN0IGRlbHRhWCA9IHVzZVggPyBNYXRoLmFicyhwdDEueCAtIHB0Mi54KSA6IDA7XG4gICAgICAgIGNvbnN0IGRlbHRhWSA9IHVzZVkgPyBNYXRoLmFicyhwdDEueSAtIHB0Mi55KSA6IDA7XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coZGVsdGFYLCAyKSArIE1hdGgucG93KGRlbHRhWSwgMikpO1xuICAgIH07XG59XG4gZnVuY3Rpb24gZ2V0SW50ZXJzZWN0SXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKSB7XG4gICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICBpZiAoIWluY2x1ZGVJbnZpc2libGUgJiYgIWNoYXJ0LmlzUG9pbnRJbkFyZWEocG9zaXRpb24pKSB7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG4gICAgY29uc3QgZXZhbHVhdGlvbkZ1bmMgPSBmdW5jdGlvbihlbGVtZW50LCBkYXRhc2V0SW5kZXgsIGluZGV4KSB7XG4gICAgICAgIGlmICghaW5jbHVkZUludmlzaWJsZSAmJiAhX2lzUG9pbnRJbkFyZWEoZWxlbWVudCwgY2hhcnQuY2hhcnRBcmVhLCAwKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LmluUmFuZ2UocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdXNlRmluYWxQb3NpdGlvbikpIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgZGF0YXNldEluZGV4LFxuICAgICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zKGNoYXJ0LCBheGlzLCBwb3NpdGlvbiwgZXZhbHVhdGlvbkZ1bmMsIHRydWUpO1xuICAgIHJldHVybiBpdGVtcztcbn1cbiBmdW5jdGlvbiBnZXROZWFyZXN0UmFkaWFsSXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgbGV0IGl0ZW1zID0gW107XG4gICAgZnVuY3Rpb24gZXZhbHVhdGlvbkZ1bmMoZWxlbWVudCwgZGF0YXNldEluZGV4LCBpbmRleCkge1xuICAgICAgICBjb25zdCB7IHN0YXJ0QW5nbGUgLCBlbmRBbmdsZSAgfSA9IGVsZW1lbnQuZ2V0UHJvcHMoW1xuICAgICAgICAgICAgJ3N0YXJ0QW5nbGUnLFxuICAgICAgICAgICAgJ2VuZEFuZ2xlJ1xuICAgICAgICBdLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgeyBhbmdsZSAgfSA9IGdldEFuZ2xlRnJvbVBvaW50KGVsZW1lbnQsIHtcbiAgICAgICAgICAgIHg6IHBvc2l0aW9uLngsXG4gICAgICAgICAgICB5OiBwb3NpdGlvbi55XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoX2FuZ2xlQmV0d2VlbihhbmdsZSwgc3RhcnRBbmdsZSwgZW5kQW5nbGUpKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgIGRhdGFzZXRJbmRleCxcbiAgICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zKGNoYXJ0LCBheGlzLCBwb3NpdGlvbiwgZXZhbHVhdGlvbkZ1bmMpO1xuICAgIHJldHVybiBpdGVtcztcbn1cbiBmdW5jdGlvbiBnZXROZWFyZXN0Q2FydGVzaWFuSXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCBpbnRlcnNlY3QsIHVzZUZpbmFsUG9zaXRpb24sIGluY2x1ZGVJbnZpc2libGUpIHtcbiAgICBsZXQgaXRlbXMgPSBbXTtcbiAgICBjb25zdCBkaXN0YW5jZU1ldHJpYyA9IGdldERpc3RhbmNlTWV0cmljRm9yQXhpcyhheGlzKTtcbiAgICBsZXQgbWluRGlzdGFuY2UgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgZnVuY3Rpb24gZXZhbHVhdGlvbkZ1bmMoZWxlbWVudCwgZGF0YXNldEluZGV4LCBpbmRleCkge1xuICAgICAgICBjb25zdCBpblJhbmdlID0gZWxlbWVudC5pblJhbmdlKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgICAgICBpZiAoaW50ZXJzZWN0ICYmICFpblJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2VudGVyID0gZWxlbWVudC5nZXRDZW50ZXJQb2ludCh1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgcG9pbnRJbkFyZWEgPSAhIWluY2x1ZGVJbnZpc2libGUgfHwgY2hhcnQuaXNQb2ludEluQXJlYShjZW50ZXIpO1xuICAgICAgICBpZiAoIXBvaW50SW5BcmVhICYmICFpblJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZU1ldHJpYyhwb3NpdGlvbiwgY2VudGVyKTtcbiAgICAgICAgaWYgKGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHtcbiAgICAgICAgICAgIGl0ZW1zID0gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICB9IGVsc2UgaWYgKGRpc3RhbmNlID09PSBtaW5EaXN0YW5jZSkge1xuICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICBkYXRhc2V0SW5kZXgsXG4gICAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV2YWx1YXRlSW50ZXJhY3Rpb25JdGVtcyhjaGFydCwgYXhpcywgcG9zaXRpb24sIGV2YWx1YXRpb25GdW5jKTtcbiAgICByZXR1cm4gaXRlbXM7XG59XG4gZnVuY3Rpb24gZ2V0TmVhcmVzdEl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgYXhpcywgaW50ZXJzZWN0LCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKSB7XG4gICAgaWYgKCFpbmNsdWRlSW52aXNpYmxlICYmICFjaGFydC5pc1BvaW50SW5BcmVhKHBvc2l0aW9uKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiBheGlzID09PSAncicgJiYgIWludGVyc2VjdCA/IGdldE5lYXJlc3RSYWRpYWxJdGVtcyhjaGFydCwgcG9zaXRpb24sIGF4aXMsIHVzZUZpbmFsUG9zaXRpb24pIDogZ2V0TmVhcmVzdENhcnRlc2lhbkl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgYXhpcywgaW50ZXJzZWN0LCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKTtcbn1cbiBmdW5jdGlvbiBnZXRBeGlzSXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCBpbnRlcnNlY3QsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgIGNvbnN0IHJhbmdlTWV0aG9kID0gYXhpcyA9PT0gJ3gnID8gJ2luWFJhbmdlJyA6ICdpbllSYW5nZSc7XG4gICAgbGV0IGludGVyc2VjdHNJdGVtID0gZmFsc2U7XG4gICAgZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zKGNoYXJ0LCBheGlzLCBwb3NpdGlvbiwgKGVsZW1lbnQsIGRhdGFzZXRJbmRleCwgaW5kZXgpPT57XG4gICAgICAgIGlmIChlbGVtZW50W3JhbmdlTWV0aG9kXSAmJiBlbGVtZW50W3JhbmdlTWV0aG9kXShwb3NpdGlvbltheGlzXSwgdXNlRmluYWxQb3NpdGlvbikpIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgZGF0YXNldEluZGV4LFxuICAgICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGludGVyc2VjdHNJdGVtID0gaW50ZXJzZWN0c0l0ZW0gfHwgZWxlbWVudC5pblJhbmdlKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGludGVyc2VjdCAmJiAhaW50ZXJzZWN0c0l0ZW0pIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG59XG4gdmFyIEludGVyYWN0aW9uID0ge1xuICAgIGV2YWx1YXRlSW50ZXJhY3Rpb25JdGVtcyxcbiAgICBtb2Rlczoge1xuIGluZGV4IChjaGFydCwgZSwgb3B0aW9ucywgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRSZWxhdGl2ZVBvc2l0aW9uKGUsIGNoYXJ0KTtcbiAgICAgICAgICAgIGNvbnN0IGF4aXMgPSBvcHRpb25zLmF4aXMgfHwgJ3gnO1xuICAgICAgICAgICAgY29uc3QgaW5jbHVkZUludmlzaWJsZSA9IG9wdGlvbnMuaW5jbHVkZUludmlzaWJsZSB8fCBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gb3B0aW9ucy5pbnRlcnNlY3QgPyBnZXRJbnRlcnNlY3RJdGVtcyhjaGFydCwgcG9zaXRpb24sIGF4aXMsIHVzZUZpbmFsUG9zaXRpb24sIGluY2x1ZGVJbnZpc2libGUpIDogZ2V0TmVhcmVzdEl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgYXhpcywgZmFsc2UsIHVzZUZpbmFsUG9zaXRpb24sIGluY2x1ZGVJbnZpc2libGUpO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBbXTtcbiAgICAgICAgICAgIGlmICghaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hhcnQuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpLmZvckVhY2goKG1ldGEpPT57XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtc1swXS5pbmRleDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gbWV0YS5kYXRhW2luZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCAmJiAhZWxlbWVudC5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXRJbmRleDogbWV0YS5pbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgICAgICB9LFxuIGRhdGFzZXQgKGNoYXJ0LCBlLCBvcHRpb25zLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGdldFJlbGF0aXZlUG9zaXRpb24oZSwgY2hhcnQpO1xuICAgICAgICAgICAgY29uc3QgYXhpcyA9IG9wdGlvbnMuYXhpcyB8fCAneHknO1xuICAgICAgICAgICAgY29uc3QgaW5jbHVkZUludmlzaWJsZSA9IG9wdGlvbnMuaW5jbHVkZUludmlzaWJsZSB8fCBmYWxzZTtcbiAgICAgICAgICAgIGxldCBpdGVtcyA9IG9wdGlvbnMuaW50ZXJzZWN0ID8gZ2V0SW50ZXJzZWN0SXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKSA6IGdldE5lYXJlc3RJdGVtcyhjaGFydCwgcG9zaXRpb24sIGF4aXMsIGZhbHNlLCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKTtcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YXNldEluZGV4ID0gaXRlbXNbMF0uZGF0YXNldEluZGV4O1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpLmRhdGE7XG4gICAgICAgICAgICAgICAgaXRlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSl7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZGF0YVtpXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfSxcbiBwb2ludCAoY2hhcnQsIGUsIG9wdGlvbnMsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihlLCBjaGFydCk7XG4gICAgICAgICAgICBjb25zdCBheGlzID0gb3B0aW9ucy5heGlzIHx8ICd4eSc7XG4gICAgICAgICAgICBjb25zdCBpbmNsdWRlSW52aXNpYmxlID0gb3B0aW9ucy5pbmNsdWRlSW52aXNpYmxlIHx8IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGdldEludGVyc2VjdEl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgYXhpcywgdXNlRmluYWxQb3NpdGlvbiwgaW5jbHVkZUludmlzaWJsZSk7XG4gICAgICAgIH0sXG4gbmVhcmVzdCAoY2hhcnQsIGUsIG9wdGlvbnMsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihlLCBjaGFydCk7XG4gICAgICAgICAgICBjb25zdCBheGlzID0gb3B0aW9ucy5heGlzIHx8ICd4eSc7XG4gICAgICAgICAgICBjb25zdCBpbmNsdWRlSW52aXNpYmxlID0gb3B0aW9ucy5pbmNsdWRlSW52aXNpYmxlIHx8IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGdldE5lYXJlc3RJdGVtcyhjaGFydCwgcG9zaXRpb24sIGF4aXMsIG9wdGlvbnMuaW50ZXJzZWN0LCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKTtcbiAgICAgICAgfSxcbiB4IChjaGFydCwgZSwgb3B0aW9ucywgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRSZWxhdGl2ZVBvc2l0aW9uKGUsIGNoYXJ0KTtcbiAgICAgICAgICAgIHJldHVybiBnZXRBeGlzSXRlbXMoY2hhcnQsIHBvc2l0aW9uLCAneCcsIG9wdGlvbnMuaW50ZXJzZWN0LCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgfSxcbiB5IChjaGFydCwgZSwgb3B0aW9ucywgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRSZWxhdGl2ZVBvc2l0aW9uKGUsIGNoYXJ0KTtcbiAgICAgICAgICAgIHJldHVybiBnZXRBeGlzSXRlbXMoY2hhcnQsIHBvc2l0aW9uLCAneScsIG9wdGlvbnMuaW50ZXJzZWN0LCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmNvbnN0IFNUQVRJQ19QT1NJVElPTlMgPSBbXG4gICAgJ2xlZnQnLFxuICAgICd0b3AnLFxuICAgICdyaWdodCcsXG4gICAgJ2JvdHRvbSdcbl07XG5mdW5jdGlvbiBmaWx0ZXJCeVBvc2l0aW9uKGFycmF5LCBwb3NpdGlvbikge1xuICAgIHJldHVybiBhcnJheS5maWx0ZXIoKHYpPT52LnBvcyA9PT0gcG9zaXRpb24pO1xufVxuZnVuY3Rpb24gZmlsdGVyRHluYW1pY1Bvc2l0aW9uQnlBeGlzKGFycmF5LCBheGlzKSB7XG4gICAgcmV0dXJuIGFycmF5LmZpbHRlcigodik9PlNUQVRJQ19QT1NJVElPTlMuaW5kZXhPZih2LnBvcykgPT09IC0xICYmIHYuYm94LmF4aXMgPT09IGF4aXMpO1xufVxuZnVuY3Rpb24gc29ydEJ5V2VpZ2h0KGFycmF5LCByZXZlcnNlKSB7XG4gICAgcmV0dXJuIGFycmF5LnNvcnQoKGEsIGIpPT57XG4gICAgICAgIGNvbnN0IHYwID0gcmV2ZXJzZSA/IGIgOiBhO1xuICAgICAgICBjb25zdCB2MSA9IHJldmVyc2UgPyBhIDogYjtcbiAgICAgICAgcmV0dXJuIHYwLndlaWdodCA9PT0gdjEud2VpZ2h0ID8gdjAuaW5kZXggLSB2MS5pbmRleCA6IHYwLndlaWdodCAtIHYxLndlaWdodDtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHdyYXBCb3hlcyhib3hlcykge1xuICAgIGNvbnN0IGxheW91dEJveGVzID0gW107XG4gICAgbGV0IGksIGlsZW4sIGJveCwgcG9zLCBzdGFjaywgc3RhY2tXZWlnaHQ7XG4gICAgZm9yKGkgPSAwLCBpbGVuID0gKGJveGVzIHx8IFtdKS5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICBib3ggPSBib3hlc1tpXTtcbiAgICAgICAgKHsgcG9zaXRpb246IHBvcyAsIG9wdGlvbnM6IHsgc3RhY2sgLCBzdGFja1dlaWdodCA9MSAgfSAgfSA9IGJveCk7XG4gICAgICAgIGxheW91dEJveGVzLnB1c2goe1xuICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICBib3gsXG4gICAgICAgICAgICBwb3MsXG4gICAgICAgICAgICBob3Jpem9udGFsOiBib3guaXNIb3Jpem9udGFsKCksXG4gICAgICAgICAgICB3ZWlnaHQ6IGJveC53ZWlnaHQsXG4gICAgICAgICAgICBzdGFjazogc3RhY2sgJiYgcG9zICsgc3RhY2ssXG4gICAgICAgICAgICBzdGFja1dlaWdodFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxheW91dEJveGVzO1xufVxuZnVuY3Rpb24gYnVpbGRTdGFja3MobGF5b3V0cykge1xuICAgIGNvbnN0IHN0YWNrcyA9IHt9O1xuICAgIGZvciAoY29uc3Qgd3JhcCBvZiBsYXlvdXRzKXtcbiAgICAgICAgY29uc3QgeyBzdGFjayAsIHBvcyAsIHN0YWNrV2VpZ2h0ICB9ID0gd3JhcDtcbiAgICAgICAgaWYgKCFzdGFjayB8fCAhU1RBVElDX1BPU0lUSU9OUy5pbmNsdWRlcyhwb3MpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBfc3RhY2sgPSBzdGFja3Nbc3RhY2tdIHx8IChzdGFja3Nbc3RhY2tdID0ge1xuICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgICBwbGFjZWQ6IDAsXG4gICAgICAgICAgICB3ZWlnaHQ6IDAsXG4gICAgICAgICAgICBzaXplOiAwXG4gICAgICAgIH0pO1xuICAgICAgICBfc3RhY2suY291bnQrKztcbiAgICAgICAgX3N0YWNrLndlaWdodCArPSBzdGFja1dlaWdodDtcbiAgICB9XG4gICAgcmV0dXJuIHN0YWNrcztcbn1cbiBmdW5jdGlvbiBzZXRMYXlvdXREaW1zKGxheW91dHMsIHBhcmFtcykge1xuICAgIGNvbnN0IHN0YWNrcyA9IGJ1aWxkU3RhY2tzKGxheW91dHMpO1xuICAgIGNvbnN0IHsgdkJveE1heFdpZHRoICwgaEJveE1heEhlaWdodCAgfSA9IHBhcmFtcztcbiAgICBsZXQgaSwgaWxlbiwgbGF5b3V0O1xuICAgIGZvcihpID0gMCwgaWxlbiA9IGxheW91dHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgbGF5b3V0ID0gbGF5b3V0c1tpXTtcbiAgICAgICAgY29uc3QgeyBmdWxsU2l6ZSAgfSA9IGxheW91dC5ib3g7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gc3RhY2tzW2xheW91dC5zdGFja107XG4gICAgICAgIGNvbnN0IGZhY3RvciA9IHN0YWNrICYmIGxheW91dC5zdGFja1dlaWdodCAvIHN0YWNrLndlaWdodDtcbiAgICAgICAgaWYgKGxheW91dC5ob3Jpem9udGFsKSB7XG4gICAgICAgICAgICBsYXlvdXQud2lkdGggPSBmYWN0b3IgPyBmYWN0b3IgKiB2Qm94TWF4V2lkdGggOiBmdWxsU2l6ZSAmJiBwYXJhbXMuYXZhaWxhYmxlV2lkdGg7XG4gICAgICAgICAgICBsYXlvdXQuaGVpZ2h0ID0gaEJveE1heEhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxheW91dC53aWR0aCA9IHZCb3hNYXhXaWR0aDtcbiAgICAgICAgICAgIGxheW91dC5oZWlnaHQgPSBmYWN0b3IgPyBmYWN0b3IgKiBoQm94TWF4SGVpZ2h0IDogZnVsbFNpemUgJiYgcGFyYW1zLmF2YWlsYWJsZUhlaWdodDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RhY2tzO1xufVxuZnVuY3Rpb24gYnVpbGRMYXlvdXRCb3hlcyhib3hlcykge1xuICAgIGNvbnN0IGxheW91dEJveGVzID0gd3JhcEJveGVzKGJveGVzKTtcbiAgICBjb25zdCBmdWxsU2l6ZSA9IHNvcnRCeVdlaWdodChsYXlvdXRCb3hlcy5maWx0ZXIoKHdyYXApPT53cmFwLmJveC5mdWxsU2l6ZSksIHRydWUpO1xuICAgIGNvbnN0IGxlZnQgPSBzb3J0QnlXZWlnaHQoZmlsdGVyQnlQb3NpdGlvbihsYXlvdXRCb3hlcywgJ2xlZnQnKSwgdHJ1ZSk7XG4gICAgY29uc3QgcmlnaHQgPSBzb3J0QnlXZWlnaHQoZmlsdGVyQnlQb3NpdGlvbihsYXlvdXRCb3hlcywgJ3JpZ2h0JykpO1xuICAgIGNvbnN0IHRvcCA9IHNvcnRCeVdlaWdodChmaWx0ZXJCeVBvc2l0aW9uKGxheW91dEJveGVzLCAndG9wJyksIHRydWUpO1xuICAgIGNvbnN0IGJvdHRvbSA9IHNvcnRCeVdlaWdodChmaWx0ZXJCeVBvc2l0aW9uKGxheW91dEJveGVzLCAnYm90dG9tJykpO1xuICAgIGNvbnN0IGNlbnRlckhvcml6b250YWwgPSBmaWx0ZXJEeW5hbWljUG9zaXRpb25CeUF4aXMobGF5b3V0Qm94ZXMsICd4Jyk7XG4gICAgY29uc3QgY2VudGVyVmVydGljYWwgPSBmaWx0ZXJEeW5hbWljUG9zaXRpb25CeUF4aXMobGF5b3V0Qm94ZXMsICd5Jyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZnVsbFNpemUsXG4gICAgICAgIGxlZnRBbmRUb3A6IGxlZnQuY29uY2F0KHRvcCksXG4gICAgICAgIHJpZ2h0QW5kQm90dG9tOiByaWdodC5jb25jYXQoY2VudGVyVmVydGljYWwpLmNvbmNhdChib3R0b20pLmNvbmNhdChjZW50ZXJIb3Jpem9udGFsKSxcbiAgICAgICAgY2hhcnRBcmVhOiBmaWx0ZXJCeVBvc2l0aW9uKGxheW91dEJveGVzLCAnY2hhcnRBcmVhJyksXG4gICAgICAgIHZlcnRpY2FsOiBsZWZ0LmNvbmNhdChyaWdodCkuY29uY2F0KGNlbnRlclZlcnRpY2FsKSxcbiAgICAgICAgaG9yaXpvbnRhbDogdG9wLmNvbmNhdChib3R0b20pLmNvbmNhdChjZW50ZXJIb3Jpem9udGFsKVxuICAgIH07XG59XG5mdW5jdGlvbiBnZXRDb21iaW5lZE1heChtYXhQYWRkaW5nLCBjaGFydEFyZWEsIGEsIGIpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgobWF4UGFkZGluZ1thXSwgY2hhcnRBcmVhW2FdKSArIE1hdGgubWF4KG1heFBhZGRpbmdbYl0sIGNoYXJ0QXJlYVtiXSk7XG59XG5mdW5jdGlvbiB1cGRhdGVNYXhQYWRkaW5nKG1heFBhZGRpbmcsIGJveFBhZGRpbmcpIHtcbiAgICBtYXhQYWRkaW5nLnRvcCA9IE1hdGgubWF4KG1heFBhZGRpbmcudG9wLCBib3hQYWRkaW5nLnRvcCk7XG4gICAgbWF4UGFkZGluZy5sZWZ0ID0gTWF0aC5tYXgobWF4UGFkZGluZy5sZWZ0LCBib3hQYWRkaW5nLmxlZnQpO1xuICAgIG1heFBhZGRpbmcuYm90dG9tID0gTWF0aC5tYXgobWF4UGFkZGluZy5ib3R0b20sIGJveFBhZGRpbmcuYm90dG9tKTtcbiAgICBtYXhQYWRkaW5nLnJpZ2h0ID0gTWF0aC5tYXgobWF4UGFkZGluZy5yaWdodCwgYm94UGFkZGluZy5yaWdodCk7XG59XG5mdW5jdGlvbiB1cGRhdGVEaW1zKGNoYXJ0QXJlYSwgcGFyYW1zLCBsYXlvdXQsIHN0YWNrcykge1xuICAgIGNvbnN0IHsgcG9zICwgYm94ICB9ID0gbGF5b3V0O1xuICAgIGNvbnN0IG1heFBhZGRpbmcgPSBjaGFydEFyZWEubWF4UGFkZGluZztcbiAgICBpZiAoIWlzT2JqZWN0KHBvcykpIHtcbiAgICAgICAgaWYgKGxheW91dC5zaXplKSB7XG4gICAgICAgICAgICBjaGFydEFyZWFbcG9zXSAtPSBsYXlvdXQuc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFjayA9IHN0YWNrc1tsYXlvdXQuc3RhY2tdIHx8IHtcbiAgICAgICAgICAgIHNpemU6IDAsXG4gICAgICAgICAgICBjb3VudDogMVxuICAgICAgICB9O1xuICAgICAgICBzdGFjay5zaXplID0gTWF0aC5tYXgoc3RhY2suc2l6ZSwgbGF5b3V0Lmhvcml6b250YWwgPyBib3guaGVpZ2h0IDogYm94LndpZHRoKTtcbiAgICAgICAgbGF5b3V0LnNpemUgPSBzdGFjay5zaXplIC8gc3RhY2suY291bnQ7XG4gICAgICAgIGNoYXJ0QXJlYVtwb3NdICs9IGxheW91dC5zaXplO1xuICAgIH1cbiAgICBpZiAoYm94LmdldFBhZGRpbmcpIHtcbiAgICAgICAgdXBkYXRlTWF4UGFkZGluZyhtYXhQYWRkaW5nLCBib3guZ2V0UGFkZGluZygpKTtcbiAgICB9XG4gICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLm1heCgwLCBwYXJhbXMub3V0ZXJXaWR0aCAtIGdldENvbWJpbmVkTWF4KG1heFBhZGRpbmcsIGNoYXJ0QXJlYSwgJ2xlZnQnLCAncmlnaHQnKSk7XG4gICAgY29uc3QgbmV3SGVpZ2h0ID0gTWF0aC5tYXgoMCwgcGFyYW1zLm91dGVySGVpZ2h0IC0gZ2V0Q29tYmluZWRNYXgobWF4UGFkZGluZywgY2hhcnRBcmVhLCAndG9wJywgJ2JvdHRvbScpKTtcbiAgICBjb25zdCB3aWR0aENoYW5nZWQgPSBuZXdXaWR0aCAhPT0gY2hhcnRBcmVhLnc7XG4gICAgY29uc3QgaGVpZ2h0Q2hhbmdlZCA9IG5ld0hlaWdodCAhPT0gY2hhcnRBcmVhLmg7XG4gICAgY2hhcnRBcmVhLncgPSBuZXdXaWR0aDtcbiAgICBjaGFydEFyZWEuaCA9IG5ld0hlaWdodDtcbiAgICByZXR1cm4gbGF5b3V0Lmhvcml6b250YWwgPyB7XG4gICAgICAgIHNhbWU6IHdpZHRoQ2hhbmdlZCxcbiAgICAgICAgb3RoZXI6IGhlaWdodENoYW5nZWRcbiAgICB9IDoge1xuICAgICAgICBzYW1lOiBoZWlnaHRDaGFuZ2VkLFxuICAgICAgICBvdGhlcjogd2lkdGhDaGFuZ2VkXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGhhbmRsZU1heFBhZGRpbmcoY2hhcnRBcmVhKSB7XG4gICAgY29uc3QgbWF4UGFkZGluZyA9IGNoYXJ0QXJlYS5tYXhQYWRkaW5nO1xuICAgIGZ1bmN0aW9uIHVwZGF0ZVBvcyhwb3MpIHtcbiAgICAgICAgY29uc3QgY2hhbmdlID0gTWF0aC5tYXgobWF4UGFkZGluZ1twb3NdIC0gY2hhcnRBcmVhW3Bvc10sIDApO1xuICAgICAgICBjaGFydEFyZWFbcG9zXSArPSBjaGFuZ2U7XG4gICAgICAgIHJldHVybiBjaGFuZ2U7XG4gICAgfVxuICAgIGNoYXJ0QXJlYS55ICs9IHVwZGF0ZVBvcygndG9wJyk7XG4gICAgY2hhcnRBcmVhLnggKz0gdXBkYXRlUG9zKCdsZWZ0Jyk7XG4gICAgdXBkYXRlUG9zKCdyaWdodCcpO1xuICAgIHVwZGF0ZVBvcygnYm90dG9tJyk7XG59XG5mdW5jdGlvbiBnZXRNYXJnaW5zKGhvcml6b250YWwsIGNoYXJ0QXJlYSkge1xuICAgIGNvbnN0IG1heFBhZGRpbmcgPSBjaGFydEFyZWEubWF4UGFkZGluZztcbiAgICBmdW5jdGlvbiBtYXJnaW5Gb3JQb3NpdGlvbnMocG9zaXRpb25zKSB7XG4gICAgICAgIGNvbnN0IG1hcmdpbiA9IHtcbiAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgIGJvdHRvbTogMFxuICAgICAgICB9O1xuICAgICAgICBwb3NpdGlvbnMuZm9yRWFjaCgocG9zKT0+e1xuICAgICAgICAgICAgbWFyZ2luW3Bvc10gPSBNYXRoLm1heChjaGFydEFyZWFbcG9zXSwgbWF4UGFkZGluZ1twb3NdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtYXJnaW47XG4gICAgfVxuICAgIHJldHVybiBob3Jpem9udGFsID8gbWFyZ2luRm9yUG9zaXRpb25zKFtcbiAgICAgICAgJ2xlZnQnLFxuICAgICAgICAncmlnaHQnXG4gICAgXSkgOiBtYXJnaW5Gb3JQb3NpdGlvbnMoW1xuICAgICAgICAndG9wJyxcbiAgICAgICAgJ2JvdHRvbSdcbiAgICBdKTtcbn1cbmZ1bmN0aW9uIGZpdEJveGVzKGJveGVzLCBjaGFydEFyZWEsIHBhcmFtcywgc3RhY2tzKSB7XG4gICAgY29uc3QgcmVmaXRCb3hlcyA9IFtdO1xuICAgIGxldCBpLCBpbGVuLCBsYXlvdXQsIGJveCwgcmVmaXQsIGNoYW5nZWQ7XG4gICAgZm9yKGkgPSAwLCBpbGVuID0gYm94ZXMubGVuZ3RoLCByZWZpdCA9IDA7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICBsYXlvdXQgPSBib3hlc1tpXTtcbiAgICAgICAgYm94ID0gbGF5b3V0LmJveDtcbiAgICAgICAgYm94LnVwZGF0ZShsYXlvdXQud2lkdGggfHwgY2hhcnRBcmVhLncsIGxheW91dC5oZWlnaHQgfHwgY2hhcnRBcmVhLmgsIGdldE1hcmdpbnMobGF5b3V0Lmhvcml6b250YWwsIGNoYXJ0QXJlYSkpO1xuICAgICAgICBjb25zdCB7IHNhbWUgLCBvdGhlciAgfSA9IHVwZGF0ZURpbXMoY2hhcnRBcmVhLCBwYXJhbXMsIGxheW91dCwgc3RhY2tzKTtcbiAgICAgICAgcmVmaXQgfD0gc2FtZSAmJiByZWZpdEJveGVzLmxlbmd0aDtcbiAgICAgICAgY2hhbmdlZCA9IGNoYW5nZWQgfHwgb3RoZXI7XG4gICAgICAgIGlmICghYm94LmZ1bGxTaXplKSB7XG4gICAgICAgICAgICByZWZpdEJveGVzLnB1c2gobGF5b3V0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVmaXQgJiYgZml0Qm94ZXMocmVmaXRCb3hlcywgY2hhcnRBcmVhLCBwYXJhbXMsIHN0YWNrcykgfHwgY2hhbmdlZDtcbn1cbmZ1bmN0aW9uIHNldEJveERpbXMoYm94LCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBib3gudG9wID0gdG9wO1xuICAgIGJveC5sZWZ0ID0gbGVmdDtcbiAgICBib3gucmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gICAgYm94LmJvdHRvbSA9IHRvcCArIGhlaWdodDtcbiAgICBib3gud2lkdGggPSB3aWR0aDtcbiAgICBib3guaGVpZ2h0ID0gaGVpZ2h0O1xufVxuZnVuY3Rpb24gcGxhY2VCb3hlcyhib3hlcywgY2hhcnRBcmVhLCBwYXJhbXMsIHN0YWNrcykge1xuICAgIGNvbnN0IHVzZXJQYWRkaW5nID0gcGFyYW1zLnBhZGRpbmc7XG4gICAgbGV0IHsgeCAsIHkgIH0gPSBjaGFydEFyZWE7XG4gICAgZm9yIChjb25zdCBsYXlvdXQgb2YgYm94ZXMpe1xuICAgICAgICBjb25zdCBib3ggPSBsYXlvdXQuYm94O1xuICAgICAgICBjb25zdCBzdGFjayA9IHN0YWNrc1tsYXlvdXQuc3RhY2tdIHx8IHtcbiAgICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgICAgcGxhY2VkOiAwLFxuICAgICAgICAgICAgd2VpZ2h0OiAxXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHdlaWdodCA9IGxheW91dC5zdGFja1dlaWdodCAvIHN0YWNrLndlaWdodCB8fCAxO1xuICAgICAgICBpZiAobGF5b3V0Lmhvcml6b250YWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gY2hhcnRBcmVhLncgKiB3ZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBzdGFjay5zaXplIHx8IGJveC5oZWlnaHQ7XG4gICAgICAgICAgICBpZiAoZGVmaW5lZChzdGFjay5zdGFydCkpIHtcbiAgICAgICAgICAgICAgICB5ID0gc3RhY2suc3RhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYm94LmZ1bGxTaXplKSB7XG4gICAgICAgICAgICAgICAgc2V0Qm94RGltcyhib3gsIHVzZXJQYWRkaW5nLmxlZnQsIHksIHBhcmFtcy5vdXRlcldpZHRoIC0gdXNlclBhZGRpbmcucmlnaHQgLSB1c2VyUGFkZGluZy5sZWZ0LCBoZWlnaHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRCb3hEaW1zKGJveCwgY2hhcnRBcmVhLmxlZnQgKyBzdGFjay5wbGFjZWQsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2suc3RhcnQgPSB5O1xuICAgICAgICAgICAgc3RhY2sucGxhY2VkICs9IHdpZHRoO1xuICAgICAgICAgICAgeSA9IGJveC5ib3R0b207XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBjaGFydEFyZWEuaCAqIHdlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gc3RhY2suc2l6ZSB8fCBib3gud2lkdGg7XG4gICAgICAgICAgICBpZiAoZGVmaW5lZChzdGFjay5zdGFydCkpIHtcbiAgICAgICAgICAgICAgICB4ID0gc3RhY2suc3RhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYm94LmZ1bGxTaXplKSB7XG4gICAgICAgICAgICAgICAgc2V0Qm94RGltcyhib3gsIHgsIHVzZXJQYWRkaW5nLnRvcCwgd2lkdGgsIHBhcmFtcy5vdXRlckhlaWdodCAtIHVzZXJQYWRkaW5nLmJvdHRvbSAtIHVzZXJQYWRkaW5nLnRvcCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldEJveERpbXMoYm94LCB4LCBjaGFydEFyZWEudG9wICsgc3RhY2sucGxhY2VkLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnN0YXJ0ID0geDtcbiAgICAgICAgICAgIHN0YWNrLnBsYWNlZCArPSBoZWlnaHQ7XG4gICAgICAgICAgICB4ID0gYm94LnJpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoYXJ0QXJlYS54ID0geDtcbiAgICBjaGFydEFyZWEueSA9IHk7XG59XG52YXIgbGF5b3V0cyA9IHtcbiBhZGRCb3ggKGNoYXJ0LCBpdGVtKSB7XG4gICAgICAgIGlmICghY2hhcnQuYm94ZXMpIHtcbiAgICAgICAgICAgIGNoYXJ0LmJveGVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaXRlbS5mdWxsU2l6ZSA9IGl0ZW0uZnVsbFNpemUgfHwgZmFsc2U7XG4gICAgICAgIGl0ZW0ucG9zaXRpb24gPSBpdGVtLnBvc2l0aW9uIHx8ICd0b3AnO1xuICAgICAgICBpdGVtLndlaWdodCA9IGl0ZW0ud2VpZ2h0IHx8IDA7XG4gICAgICAgIGl0ZW0uX2xheWVycyA9IGl0ZW0uX2xheWVycyB8fCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB6OiAwLFxuICAgICAgICAgICAgICAgICAgICBkcmF3IChjaGFydEFyZWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZHJhdyhjaGFydEFyZWEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfTtcbiAgICAgICAgY2hhcnQuYm94ZXMucHVzaChpdGVtKTtcbiAgICB9LFxuIHJlbW92ZUJveCAoY2hhcnQsIGxheW91dEl0ZW0pIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBjaGFydC5ib3hlcyA/IGNoYXJ0LmJveGVzLmluZGV4T2YobGF5b3V0SXRlbSkgOiAtMTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgY2hhcnQuYm94ZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH0sXG4gY29uZmlndXJlIChjaGFydCwgaXRlbSwgb3B0aW9ucykge1xuICAgICAgICBpdGVtLmZ1bGxTaXplID0gb3B0aW9ucy5mdWxsU2l6ZTtcbiAgICAgICAgaXRlbS5wb3NpdGlvbiA9IG9wdGlvbnMucG9zaXRpb247XG4gICAgICAgIGl0ZW0ud2VpZ2h0ID0gb3B0aW9ucy53ZWlnaHQ7XG4gICAgfSxcbiB1cGRhdGUgKGNoYXJ0LCB3aWR0aCwgaGVpZ2h0LCBtaW5QYWRkaW5nKSB7XG4gICAgICAgIGlmICghY2hhcnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWRkaW5nID0gdG9QYWRkaW5nKGNoYXJ0Lm9wdGlvbnMubGF5b3V0LnBhZGRpbmcpO1xuICAgICAgICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IE1hdGgubWF4KHdpZHRoIC0gcGFkZGluZy53aWR0aCwgMCk7XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZUhlaWdodCA9IE1hdGgubWF4KGhlaWdodCAtIHBhZGRpbmcuaGVpZ2h0LCAwKTtcbiAgICAgICAgY29uc3QgYm94ZXMgPSBidWlsZExheW91dEJveGVzKGNoYXJ0LmJveGVzKTtcbiAgICAgICAgY29uc3QgdmVydGljYWxCb3hlcyA9IGJveGVzLnZlcnRpY2FsO1xuICAgICAgICBjb25zdCBob3Jpem9udGFsQm94ZXMgPSBib3hlcy5ob3Jpem9udGFsO1xuICAgICAgICBlYWNoKGNoYXJ0LmJveGVzLCAoYm94KT0+e1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBib3guYmVmb3JlTGF5b3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYm94LmJlZm9yZUxheW91dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdmlzaWJsZVZlcnRpY2FsQm94Q291bnQgPSB2ZXJ0aWNhbEJveGVzLnJlZHVjZSgodG90YWwsIHdyYXApPT53cmFwLmJveC5vcHRpb25zICYmIHdyYXAuYm94Lm9wdGlvbnMuZGlzcGxheSA9PT0gZmFsc2UgPyB0b3RhbCA6IHRvdGFsICsgMSwgMCkgfHwgMTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgICAgICBvdXRlcldpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgIG91dGVySGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgICBwYWRkaW5nLFxuICAgICAgICAgICAgYXZhaWxhYmxlV2lkdGgsXG4gICAgICAgICAgICBhdmFpbGFibGVIZWlnaHQsXG4gICAgICAgICAgICB2Qm94TWF4V2lkdGg6IGF2YWlsYWJsZVdpZHRoIC8gMiAvIHZpc2libGVWZXJ0aWNhbEJveENvdW50LFxuICAgICAgICAgICAgaEJveE1heEhlaWdodDogYXZhaWxhYmxlSGVpZ2h0IC8gMlxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbWF4UGFkZGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHBhZGRpbmcpO1xuICAgICAgICB1cGRhdGVNYXhQYWRkaW5nKG1heFBhZGRpbmcsIHRvUGFkZGluZyhtaW5QYWRkaW5nKSk7XG4gICAgICAgIGNvbnN0IGNoYXJ0QXJlYSA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgbWF4UGFkZGluZyxcbiAgICAgICAgICAgIHc6IGF2YWlsYWJsZVdpZHRoLFxuICAgICAgICAgICAgaDogYXZhaWxhYmxlSGVpZ2h0LFxuICAgICAgICAgICAgeDogcGFkZGluZy5sZWZ0LFxuICAgICAgICAgICAgeTogcGFkZGluZy50b3BcbiAgICAgICAgfSwgcGFkZGluZyk7XG4gICAgICAgIGNvbnN0IHN0YWNrcyA9IHNldExheW91dERpbXModmVydGljYWxCb3hlcy5jb25jYXQoaG9yaXpvbnRhbEJveGVzKSwgcGFyYW1zKTtcbiAgICAgICAgZml0Qm94ZXMoYm94ZXMuZnVsbFNpemUsIGNoYXJ0QXJlYSwgcGFyYW1zLCBzdGFja3MpO1xuICAgICAgICBmaXRCb3hlcyh2ZXJ0aWNhbEJveGVzLCBjaGFydEFyZWEsIHBhcmFtcywgc3RhY2tzKTtcbiAgICAgICAgaWYgKGZpdEJveGVzKGhvcml6b250YWxCb3hlcywgY2hhcnRBcmVhLCBwYXJhbXMsIHN0YWNrcykpIHtcbiAgICAgICAgICAgIGZpdEJveGVzKHZlcnRpY2FsQm94ZXMsIGNoYXJ0QXJlYSwgcGFyYW1zLCBzdGFja3MpO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZU1heFBhZGRpbmcoY2hhcnRBcmVhKTtcbiAgICAgICAgcGxhY2VCb3hlcyhib3hlcy5sZWZ0QW5kVG9wLCBjaGFydEFyZWEsIHBhcmFtcywgc3RhY2tzKTtcbiAgICAgICAgY2hhcnRBcmVhLnggKz0gY2hhcnRBcmVhLnc7XG4gICAgICAgIGNoYXJ0QXJlYS55ICs9IGNoYXJ0QXJlYS5oO1xuICAgICAgICBwbGFjZUJveGVzKGJveGVzLnJpZ2h0QW5kQm90dG9tLCBjaGFydEFyZWEsIHBhcmFtcywgc3RhY2tzKTtcbiAgICAgICAgY2hhcnQuY2hhcnRBcmVhID0ge1xuICAgICAgICAgICAgbGVmdDogY2hhcnRBcmVhLmxlZnQsXG4gICAgICAgICAgICB0b3A6IGNoYXJ0QXJlYS50b3AsXG4gICAgICAgICAgICByaWdodDogY2hhcnRBcmVhLmxlZnQgKyBjaGFydEFyZWEudyxcbiAgICAgICAgICAgIGJvdHRvbTogY2hhcnRBcmVhLnRvcCArIGNoYXJ0QXJlYS5oLFxuICAgICAgICAgICAgaGVpZ2h0OiBjaGFydEFyZWEuaCxcbiAgICAgICAgICAgIHdpZHRoOiBjaGFydEFyZWEud1xuICAgICAgICB9O1xuICAgICAgICBlYWNoKGJveGVzLmNoYXJ0QXJlYSwgKGxheW91dCk9PntcbiAgICAgICAgICAgIGNvbnN0IGJveCA9IGxheW91dC5ib3g7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGJveCwgY2hhcnQuY2hhcnRBcmVhKTtcbiAgICAgICAgICAgIGJveC51cGRhdGUoY2hhcnRBcmVhLncsIGNoYXJ0QXJlYS5oLCB7XG4gICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgYm90dG9tOiAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuY2xhc3MgQmFzZVBsYXRmb3JtIHtcbiBhY3F1aXJlQ29udGV4dChjYW52YXMsIGFzcGVjdFJhdGlvKSB7fVxuIHJlbGVhc2VDb250ZXh0KGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiBhZGRFdmVudExpc3RlbmVyKGNoYXJ0LCB0eXBlLCBsaXN0ZW5lcikge31cbiByZW1vdmVFdmVudExpc3RlbmVyKGNoYXJ0LCB0eXBlLCBsaXN0ZW5lcikge31cbiBnZXREZXZpY2VQaXhlbFJhdGlvKCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gZ2V0TWF4aW11bVNpemUoZWxlbWVudCwgd2lkdGgsIGhlaWdodCwgYXNwZWN0UmF0aW8pIHtcbiAgICAgICAgd2lkdGggPSBNYXRoLm1heCgwLCB3aWR0aCB8fCBlbGVtZW50LndpZHRoKTtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IGVsZW1lbnQuaGVpZ2h0O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIGFzcGVjdFJhdGlvID8gTWF0aC5mbG9vcih3aWR0aCAvIGFzcGVjdFJhdGlvKSA6IGhlaWdodClcbiAgICAgICAgfTtcbiAgICB9XG4gaXNBdHRhY2hlZChjYW52YXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuIHVwZGF0ZUNvbmZpZyhjb25maWcpIHtcbiAgICB9XG59XG5cbmNsYXNzIEJhc2ljUGxhdGZvcm0gZXh0ZW5kcyBCYXNlUGxhdGZvcm0ge1xuICAgIGFjcXVpcmVDb250ZXh0KGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gJiYgaXRlbS5nZXRDb250ZXh0ICYmIGl0ZW0uZ2V0Q29udGV4dCgnMmQnKSB8fCBudWxsO1xuICAgIH1cbiAgICB1cGRhdGVDb25maWcoY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5vcHRpb25zLmFuaW1hdGlvbiA9IGZhbHNlO1xuICAgIH1cbn1cblxuY29uc3QgRVhQQU5ET19LRVkgPSAnJGNoYXJ0anMnO1xuIGNvbnN0IEVWRU5UX1RZUEVTID0ge1xuICAgIHRvdWNoc3RhcnQ6ICdtb3VzZWRvd24nLFxuICAgIHRvdWNobW92ZTogJ21vdXNlbW92ZScsXG4gICAgdG91Y2hlbmQ6ICdtb3VzZXVwJyxcbiAgICBwb2ludGVyZW50ZXI6ICdtb3VzZWVudGVyJyxcbiAgICBwb2ludGVyZG93bjogJ21vdXNlZG93bicsXG4gICAgcG9pbnRlcm1vdmU6ICdtb3VzZW1vdmUnLFxuICAgIHBvaW50ZXJ1cDogJ21vdXNldXAnLFxuICAgIHBvaW50ZXJsZWF2ZTogJ21vdXNlb3V0JyxcbiAgICBwb2ludGVyb3V0OiAnbW91c2VvdXQnXG59O1xuY29uc3QgaXNOdWxsT3JFbXB0eSA9ICh2YWx1ZSk9PnZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJztcbiBmdW5jdGlvbiBpbml0Q2FudmFzKGNhbnZhcywgYXNwZWN0UmF0aW8pIHtcbiAgICBjb25zdCBzdHlsZSA9IGNhbnZhcy5zdHlsZTtcbiAgICBjb25zdCByZW5kZXJIZWlnaHQgPSBjYW52YXMuZ2V0QXR0cmlidXRlKCdoZWlnaHQnKTtcbiAgICBjb25zdCByZW5kZXJXaWR0aCA9IGNhbnZhcy5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyk7XG4gICAgY2FudmFzW0VYUEFORE9fS0VZXSA9IHtcbiAgICAgICAgaW5pdGlhbDoge1xuICAgICAgICAgICAgaGVpZ2h0OiByZW5kZXJIZWlnaHQsXG4gICAgICAgICAgICB3aWR0aDogcmVuZGVyV2lkdGgsXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IHN0eWxlLmRpc3BsYXksXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBzdHlsZS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHN0eWxlLndpZHRoXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHN0eWxlLmRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5IHx8ICdibG9jayc7XG4gICAgc3R5bGUuYm94U2l6aW5nID0gc3R5bGUuYm94U2l6aW5nIHx8ICdib3JkZXItYm94JztcbiAgICBpZiAoaXNOdWxsT3JFbXB0eShyZW5kZXJXaWR0aCkpIHtcbiAgICAgICAgY29uc3QgZGlzcGxheVdpZHRoID0gcmVhZFVzZWRTaXplKGNhbnZhcywgJ3dpZHRoJyk7XG4gICAgICAgIGlmIChkaXNwbGF5V2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gZGlzcGxheVdpZHRoO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc051bGxPckVtcHR5KHJlbmRlckhlaWdodCkpIHtcbiAgICAgICAgaWYgKGNhbnZhcy5zdHlsZS5oZWlnaHQgPT09ICcnKSB7XG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gY2FudmFzLndpZHRoIC8gKGFzcGVjdFJhdGlvIHx8IDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGlzcGxheUhlaWdodCA9IHJlYWRVc2VkU2l6ZShjYW52YXMsICdoZWlnaHQnKTtcbiAgICAgICAgICAgIGlmIChkaXNwbGF5SGVpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gZGlzcGxheUhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2FudmFzO1xufVxuY29uc3QgZXZlbnRMaXN0ZW5lck9wdGlvbnMgPSBzdXBwb3J0c0V2ZW50TGlzdGVuZXJPcHRpb25zID8ge1xuICAgIHBhc3NpdmU6IHRydWVcbn0gOiBmYWxzZTtcbmZ1bmN0aW9uIGFkZExpc3RlbmVyKG5vZGUsIHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBldmVudExpc3RlbmVyT3B0aW9ucyk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoY2hhcnQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgaWYgKGNoYXJ0ICYmIGNoYXJ0LmNhbnZhcykge1xuICAgICAgICBjaGFydC5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgZXZlbnRMaXN0ZW5lck9wdGlvbnMpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGZyb21OYXRpdmVFdmVudChldmVudCwgY2hhcnQpIHtcbiAgICBjb25zdCB0eXBlID0gRVZFTlRfVFlQRVNbZXZlbnQudHlwZV0gfHwgZXZlbnQudHlwZTtcbiAgICBjb25zdCB7IHggLCB5ICB9ID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihldmVudCwgY2hhcnQpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIGNoYXJ0LFxuICAgICAgICBuYXRpdmU6IGV2ZW50LFxuICAgICAgICB4OiB4ICE9PSB1bmRlZmluZWQgPyB4IDogbnVsbCxcbiAgICAgICAgeTogeSAhPT0gdW5kZWZpbmVkID8geSA6IG51bGxcbiAgICB9O1xufVxuZnVuY3Rpb24gbm9kZUxpc3RDb250YWlucyhub2RlTGlzdCwgY2FudmFzKSB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVMaXN0KXtcbiAgICAgICAgaWYgKG5vZGUgPT09IGNhbnZhcyB8fCBub2RlLmNvbnRhaW5zKGNhbnZhcykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlQXR0YWNoT2JzZXJ2ZXIoY2hhcnQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgY29uc3QgY2FudmFzID0gY2hhcnQuY2FudmFzO1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpPT57XG4gICAgICAgIGxldCB0cmlnZ2VyID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcyl7XG4gICAgICAgICAgICB0cmlnZ2VyID0gdHJpZ2dlciB8fCBub2RlTGlzdENvbnRhaW5zKGVudHJ5LmFkZGVkTm9kZXMsIGNhbnZhcyk7XG4gICAgICAgICAgICB0cmlnZ2VyID0gdHJpZ2dlciAmJiAhbm9kZUxpc3RDb250YWlucyhlbnRyeS5yZW1vdmVkTm9kZXMsIGNhbnZhcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyaWdnZXIpIHtcbiAgICAgICAgICAgIGxpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7XG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBvYnNlcnZlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZURldGFjaE9ic2VydmVyKGNoYXJ0LCB0eXBlLCBsaXN0ZW5lcikge1xuICAgIGNvbnN0IGNhbnZhcyA9IGNoYXJ0LmNhbnZhcztcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChlbnRyaWVzKT0+e1xuICAgICAgICBsZXQgdHJpZ2dlciA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpe1xuICAgICAgICAgICAgdHJpZ2dlciA9IHRyaWdnZXIgfHwgbm9kZUxpc3RDb250YWlucyhlbnRyeS5yZW1vdmVkTm9kZXMsIGNhbnZhcyk7XG4gICAgICAgICAgICB0cmlnZ2VyID0gdHJpZ2dlciAmJiAhbm9kZUxpc3RDb250YWlucyhlbnRyeS5hZGRlZE5vZGVzLCBjYW52YXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcigpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwge1xuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gb2JzZXJ2ZXI7XG59XG5jb25zdCBkcnBMaXN0ZW5pbmdDaGFydHMgPSBuZXcgTWFwKCk7XG5sZXQgb2xkRGV2aWNlUGl4ZWxSYXRpbyA9IDA7XG5mdW5jdGlvbiBvbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICBjb25zdCBkcHIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICBpZiAoZHByID09PSBvbGREZXZpY2VQaXhlbFJhdGlvKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgb2xkRGV2aWNlUGl4ZWxSYXRpbyA9IGRwcjtcbiAgICBkcnBMaXN0ZW5pbmdDaGFydHMuZm9yRWFjaCgocmVzaXplLCBjaGFydCk9PntcbiAgICAgICAgaWYgKGNoYXJ0LmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvICE9PSBkcHIpIHtcbiAgICAgICAgICAgIHJlc2l6ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBsaXN0ZW5EZXZpY2VQaXhlbFJhdGlvQ2hhbmdlcyhjaGFydCwgcmVzaXplKSB7XG4gICAgaWYgKCFkcnBMaXN0ZW5pbmdDaGFydHMuc2l6ZSkge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25XaW5kb3dSZXNpemUpO1xuICAgIH1cbiAgICBkcnBMaXN0ZW5pbmdDaGFydHMuc2V0KGNoYXJ0LCByZXNpemUpO1xufVxuZnVuY3Rpb24gdW5saXN0ZW5EZXZpY2VQaXhlbFJhdGlvQ2hhbmdlcyhjaGFydCkge1xuICAgIGRycExpc3RlbmluZ0NoYXJ0cy5kZWxldGUoY2hhcnQpO1xuICAgIGlmICghZHJwTGlzdGVuaW5nQ2hhcnRzLnNpemUpIHtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uV2luZG93UmVzaXplKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVSZXNpemVPYnNlcnZlcihjaGFydCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgICBjb25zdCBjYW52YXMgPSBjaGFydC5jYW52YXM7XG4gICAgY29uc3QgY29udGFpbmVyID0gY2FudmFzICYmIF9nZXRQYXJlbnROb2RlKGNhbnZhcyk7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXNpemUgPSB0aHJvdHRsZWQoKHdpZHRoLCBoZWlnaHQpPT57XG4gICAgICAgIGNvbnN0IHcgPSBjb250YWluZXIuY2xpZW50V2lkdGg7XG4gICAgICAgIGxpc3RlbmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBpZiAodyA8IGNvbnRhaW5lci5jbGllbnRXaWR0aCkge1xuICAgICAgICAgICAgbGlzdGVuZXIoKTtcbiAgICAgICAgfVxuICAgIH0sIHdpbmRvdyk7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpPT57XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1swXTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBlbnRyeS5jb250ZW50UmVjdC53aWR0aDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gZW50cnkuY29udGVudFJlY3QuaGVpZ2h0O1xuICAgICAgICBpZiAod2lkdGggPT09IDAgJiYgaGVpZ2h0ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoY29udGFpbmVyKTtcbiAgICBsaXN0ZW5EZXZpY2VQaXhlbFJhdGlvQ2hhbmdlcyhjaGFydCwgcmVzaXplKTtcbiAgICByZXR1cm4gb2JzZXJ2ZXI7XG59XG5mdW5jdGlvbiByZWxlYXNlT2JzZXJ2ZXIoY2hhcnQsIHR5cGUsIG9ic2VydmVyKSB7XG4gICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdyZXNpemUnKSB7XG4gICAgICAgIHVubGlzdGVuRGV2aWNlUGl4ZWxSYXRpb0NoYW5nZXMoY2hhcnQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVByb3h5QW5kTGlzdGVuKGNoYXJ0LCB0eXBlLCBsaXN0ZW5lcikge1xuICAgIGNvbnN0IGNhbnZhcyA9IGNoYXJ0LmNhbnZhcztcbiAgICBjb25zdCBwcm94eSA9IHRocm90dGxlZCgoZXZlbnQpPT57XG4gICAgICAgIGlmIChjaGFydC5jdHggIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxpc3RlbmVyKGZyb21OYXRpdmVFdmVudChldmVudCwgY2hhcnQpKTtcbiAgICAgICAgfVxuICAgIH0sIGNoYXJ0KTtcbiAgICBhZGRMaXN0ZW5lcihjYW52YXMsIHR5cGUsIHByb3h5KTtcbiAgICByZXR1cm4gcHJveHk7XG59XG4gY2xhc3MgRG9tUGxhdGZvcm0gZXh0ZW5kcyBCYXNlUGxhdGZvcm0ge1xuIGFjcXVpcmVDb250ZXh0KGNhbnZhcywgYXNwZWN0UmF0aW8pIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcyAmJiBjYW52YXMuZ2V0Q29udGV4dCAmJiBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5jYW52YXMgPT09IGNhbnZhcykge1xuICAgICAgICAgICAgaW5pdENhbnZhcyhjYW52YXMsIGFzcGVjdFJhdGlvKTtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiByZWxlYXNlQ29udGV4dChjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IGNvbnRleHQuY2FudmFzO1xuICAgICAgICBpZiAoIWNhbnZhc1tFWFBBTkRPX0tFWV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbml0aWFsID0gY2FudmFzW0VYUEFORE9fS0VZXS5pbml0aWFsO1xuICAgICAgICBbXG4gICAgICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgICAgICd3aWR0aCdcbiAgICAgICAgXS5mb3JFYWNoKChwcm9wKT0+e1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbml0aWFsW3Byb3BdO1xuICAgICAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWYodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY2FudmFzLnJlbW92ZUF0dHJpYnV0ZShwcm9wKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FudmFzLnNldEF0dHJpYnV0ZShwcm9wLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzdHlsZSA9IGluaXRpYWwuc3R5bGUgfHwge307XG4gICAgICAgIE9iamVjdC5rZXlzKHN0eWxlKS5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgICAgICBjYW52YXMuc3R5bGVba2V5XSA9IHN0eWxlW2tleV07XG4gICAgICAgIH0pO1xuICAgICAgICBjYW52YXMud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgICAgIGRlbGV0ZSBjYW52YXNbRVhQQU5ET19LRVldO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gYWRkRXZlbnRMaXN0ZW5lcihjaGFydCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGNoYXJ0LCB0eXBlKTtcbiAgICAgICAgY29uc3QgcHJveGllcyA9IGNoYXJ0LiRwcm94aWVzIHx8IChjaGFydC4kcHJveGllcyA9IHt9KTtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSB7XG4gICAgICAgICAgICBhdHRhY2g6IGNyZWF0ZUF0dGFjaE9ic2VydmVyLFxuICAgICAgICAgICAgZGV0YWNoOiBjcmVhdGVEZXRhY2hPYnNlcnZlcixcbiAgICAgICAgICAgIHJlc2l6ZTogY3JlYXRlUmVzaXplT2JzZXJ2ZXJcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IGhhbmRsZXJzW3R5cGVdIHx8IGNyZWF0ZVByb3h5QW5kTGlzdGVuO1xuICAgICAgICBwcm94aWVzW3R5cGVdID0gaGFuZGxlcihjaGFydCwgdHlwZSwgbGlzdGVuZXIpO1xuICAgIH1cbiByZW1vdmVFdmVudExpc3RlbmVyKGNoYXJ0LCB0eXBlKSB7XG4gICAgICAgIGNvbnN0IHByb3hpZXMgPSBjaGFydC4kcHJveGllcyB8fCAoY2hhcnQuJHByb3hpZXMgPSB7fSk7XG4gICAgICAgIGNvbnN0IHByb3h5ID0gcHJveGllc1t0eXBlXTtcbiAgICAgICAgaWYgKCFwcm94eSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0ge1xuICAgICAgICAgICAgYXR0YWNoOiByZWxlYXNlT2JzZXJ2ZXIsXG4gICAgICAgICAgICBkZXRhY2g6IHJlbGVhc2VPYnNlcnZlcixcbiAgICAgICAgICAgIHJlc2l6ZTogcmVsZWFzZU9ic2VydmVyXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBoYW5kbGVyc1t0eXBlXSB8fCByZW1vdmVMaXN0ZW5lcjtcbiAgICAgICAgaGFuZGxlcihjaGFydCwgdHlwZSwgcHJveHkpO1xuICAgICAgICBwcm94aWVzW3R5cGVdID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXREZXZpY2VQaXhlbFJhdGlvKCkge1xuICAgICAgICByZXR1cm4gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gICAgfVxuIGdldE1heGltdW1TaXplKGNhbnZhcywgd2lkdGgsIGhlaWdodCwgYXNwZWN0UmF0aW8pIHtcbiAgICAgICAgcmV0dXJuIGdldE1heGltdW1TaXplKGNhbnZhcywgd2lkdGgsIGhlaWdodCwgYXNwZWN0UmF0aW8pO1xuICAgIH1cbiBpc0F0dGFjaGVkKGNhbnZhcykge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBjYW52YXMgJiYgX2dldFBhcmVudE5vZGUoY2FudmFzKTtcbiAgICAgICAgcmV0dXJuICEhKGNvbnRhaW5lciAmJiBjb250YWluZXIuaXNDb25uZWN0ZWQpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gX2RldGVjdFBsYXRmb3JtKGNhbnZhcykge1xuICAgIGlmICghX2lzRG9tU3VwcG9ydGVkKCkgfHwgdHlwZW9mIE9mZnNjcmVlbkNhbnZhcyAhPT0gJ3VuZGVmaW5lZCcgJiYgY2FudmFzIGluc3RhbmNlb2YgT2Zmc2NyZWVuQ2FudmFzKSB7XG4gICAgICAgIHJldHVybiBCYXNpY1BsYXRmb3JtO1xuICAgIH1cbiAgICByZXR1cm4gRG9tUGxhdGZvcm07XG59XG5cbmNsYXNzIEVsZW1lbnQge1xuICAgIHN0YXRpYyBkZWZhdWx0cyA9IHt9O1xuICAgIHN0YXRpYyBkZWZhdWx0Um91dGVzID0gdW5kZWZpbmVkO1xuICAgIHg7XG4gICAgeTtcbiAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICBvcHRpb25zO1xuICAgICRhbmltYXRpb25zO1xuICAgIHRvb2x0aXBQb3NpdGlvbih1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgIH0gPSB0aGlzLmdldFByb3BzKFtcbiAgICAgICAgICAgICd4JyxcbiAgICAgICAgICAgICd5J1xuICAgICAgICBdLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5XG4gICAgICAgIH07XG4gICAgfVxuICAgIGhhc1ZhbHVlKCkge1xuICAgICAgICByZXR1cm4gaXNOdW1iZXIodGhpcy54KSAmJiBpc051bWJlcih0aGlzLnkpO1xuICAgIH1cbiAgICBnZXRQcm9wcyhwcm9wcywgZmluYWwpIHtcbiAgICAgICAgY29uc3QgYW5pbXMgPSB0aGlzLiRhbmltYXRpb25zO1xuICAgICAgICBpZiAoIWZpbmFsIHx8ICFhbmltcykge1xuICAgICAgICAgICAgLy8gbGV0J3Mgbm90IGNyZWF0ZSBhbiBvYmplY3QsIGlmIG5vdCBuZWVkZWRcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldCA9IHt9O1xuICAgICAgICBwcm9wcy5mb3JFYWNoKChwcm9wKT0+e1xuICAgICAgICAgICAgcmV0W3Byb3BdID0gYW5pbXNbcHJvcF0gJiYgYW5pbXNbcHJvcF0uYWN0aXZlKCkgPyBhbmltc1twcm9wXS5fdG8gOiB0aGlzW3Byb3BdO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGF1dG9Ta2lwKHNjYWxlLCB0aWNrcykge1xuICAgIGNvbnN0IHRpY2tPcHRzID0gc2NhbGUub3B0aW9ucy50aWNrcztcbiAgICBjb25zdCBkZXRlcm1pbmVkTWF4VGlja3MgPSBkZXRlcm1pbmVNYXhUaWNrcyhzY2FsZSk7XG4gICAgY29uc3QgdGlja3NMaW1pdCA9IE1hdGgubWluKHRpY2tPcHRzLm1heFRpY2tzTGltaXQgfHwgZGV0ZXJtaW5lZE1heFRpY2tzLCBkZXRlcm1pbmVkTWF4VGlja3MpO1xuICAgIGNvbnN0IG1ham9ySW5kaWNlcyA9IHRpY2tPcHRzLm1ham9yLmVuYWJsZWQgPyBnZXRNYWpvckluZGljZXModGlja3MpIDogW107XG4gICAgY29uc3QgbnVtTWFqb3JJbmRpY2VzID0gbWFqb3JJbmRpY2VzLmxlbmd0aDtcbiAgICBjb25zdCBmaXJzdCA9IG1ham9ySW5kaWNlc1swXTtcbiAgICBjb25zdCBsYXN0ID0gbWFqb3JJbmRpY2VzW251bU1ham9ySW5kaWNlcyAtIDFdO1xuICAgIGNvbnN0IG5ld1RpY2tzID0gW107XG4gICAgaWYgKG51bU1ham9ySW5kaWNlcyA+IHRpY2tzTGltaXQpIHtcbiAgICAgICAgc2tpcE1ham9ycyh0aWNrcywgbmV3VGlja3MsIG1ham9ySW5kaWNlcywgbnVtTWFqb3JJbmRpY2VzIC8gdGlja3NMaW1pdCk7XG4gICAgICAgIHJldHVybiBuZXdUaWNrcztcbiAgICB9XG4gICAgY29uc3Qgc3BhY2luZyA9IGNhbGN1bGF0ZVNwYWNpbmcobWFqb3JJbmRpY2VzLCB0aWNrcywgdGlja3NMaW1pdCk7XG4gICAgaWYgKG51bU1ham9ySW5kaWNlcyA+IDApIHtcbiAgICAgICAgbGV0IGksIGlsZW47XG4gICAgICAgIGNvbnN0IGF2Z01ham9yU3BhY2luZyA9IG51bU1ham9ySW5kaWNlcyA+IDEgPyBNYXRoLnJvdW5kKChsYXN0IC0gZmlyc3QpIC8gKG51bU1ham9ySW5kaWNlcyAtIDEpKSA6IG51bGw7XG4gICAgICAgIHNraXAodGlja3MsIG5ld1RpY2tzLCBzcGFjaW5nLCBpc051bGxPclVuZGVmKGF2Z01ham9yU3BhY2luZykgPyAwIDogZmlyc3QgLSBhdmdNYWpvclNwYWNpbmcsIGZpcnN0KTtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gbnVtTWFqb3JJbmRpY2VzIC0gMTsgaSA8IGlsZW47IGkrKyl7XG4gICAgICAgICAgICBza2lwKHRpY2tzLCBuZXdUaWNrcywgc3BhY2luZywgbWFqb3JJbmRpY2VzW2ldLCBtYWpvckluZGljZXNbaSArIDFdKTtcbiAgICAgICAgfVxuICAgICAgICBza2lwKHRpY2tzLCBuZXdUaWNrcywgc3BhY2luZywgbGFzdCwgaXNOdWxsT3JVbmRlZihhdmdNYWpvclNwYWNpbmcpID8gdGlja3MubGVuZ3RoIDogbGFzdCArIGF2Z01ham9yU3BhY2luZyk7XG4gICAgICAgIHJldHVybiBuZXdUaWNrcztcbiAgICB9XG4gICAgc2tpcCh0aWNrcywgbmV3VGlja3MsIHNwYWNpbmcpO1xuICAgIHJldHVybiBuZXdUaWNrcztcbn1cbmZ1bmN0aW9uIGRldGVybWluZU1heFRpY2tzKHNjYWxlKSB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gc2NhbGUub3B0aW9ucy5vZmZzZXQ7XG4gICAgY29uc3QgdGlja0xlbmd0aCA9IHNjYWxlLl90aWNrU2l6ZSgpO1xuICAgIGNvbnN0IG1heFNjYWxlID0gc2NhbGUuX2xlbmd0aCAvIHRpY2tMZW5ndGggKyAob2Zmc2V0ID8gMCA6IDEpO1xuICAgIGNvbnN0IG1heENoYXJ0ID0gc2NhbGUuX21heExlbmd0aCAvIHRpY2tMZW5ndGg7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5taW4obWF4U2NhbGUsIG1heENoYXJ0KSk7XG59XG4gZnVuY3Rpb24gY2FsY3VsYXRlU3BhY2luZyhtYWpvckluZGljZXMsIHRpY2tzLCB0aWNrc0xpbWl0KSB7XG4gICAgY29uc3QgZXZlbk1ham9yU3BhY2luZyA9IGdldEV2ZW5TcGFjaW5nKG1ham9ySW5kaWNlcyk7XG4gICAgY29uc3Qgc3BhY2luZyA9IHRpY2tzLmxlbmd0aCAvIHRpY2tzTGltaXQ7XG4gICAgaWYgKCFldmVuTWFqb3JTcGFjaW5nKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChzcGFjaW5nLCAxKTtcbiAgICB9XG4gICAgY29uc3QgZmFjdG9ycyA9IF9mYWN0b3JpemUoZXZlbk1ham9yU3BhY2luZyk7XG4gICAgZm9yKGxldCBpID0gMCwgaWxlbiA9IGZhY3RvcnMubGVuZ3RoIC0gMTsgaSA8IGlsZW47IGkrKyl7XG4gICAgICAgIGNvbnN0IGZhY3RvciA9IGZhY3RvcnNbaV07XG4gICAgICAgIGlmIChmYWN0b3IgPiBzcGFjaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFjdG9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBNYXRoLm1heChzcGFjaW5nLCAxKTtcbn1cbiBmdW5jdGlvbiBnZXRNYWpvckluZGljZXModGlja3MpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBsZXQgaSwgaWxlbjtcbiAgICBmb3IoaSA9IDAsIGlsZW4gPSB0aWNrcy5sZW5ndGg7IGkgPCBpbGVuOyBpKyspe1xuICAgICAgICBpZiAodGlja3NbaV0ubWFqb3IpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4gZnVuY3Rpb24gc2tpcE1ham9ycyh0aWNrcywgbmV3VGlja3MsIG1ham9ySW5kaWNlcywgc3BhY2luZykge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgbGV0IG5leHQgPSBtYWpvckluZGljZXNbMF07XG4gICAgbGV0IGk7XG4gICAgc3BhY2luZyA9IE1hdGguY2VpbChzcGFjaW5nKTtcbiAgICBmb3IoaSA9IDA7IGkgPCB0aWNrcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIGlmIChpID09PSBuZXh0KSB7XG4gICAgICAgICAgICBuZXdUaWNrcy5wdXNoKHRpY2tzW2ldKTtcbiAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICBuZXh0ID0gbWFqb3JJbmRpY2VzW2NvdW50ICogc3BhY2luZ107XG4gICAgICAgIH1cbiAgICB9XG59XG4gZnVuY3Rpb24gc2tpcCh0aWNrcywgbmV3VGlja3MsIHNwYWNpbmcsIG1ham9yU3RhcnQsIG1ham9yRW5kKSB7XG4gICAgY29uc3Qgc3RhcnQgPSB2YWx1ZU9yRGVmYXVsdChtYWpvclN0YXJ0LCAwKTtcbiAgICBjb25zdCBlbmQgPSBNYXRoLm1pbih2YWx1ZU9yRGVmYXVsdChtYWpvckVuZCwgdGlja3MubGVuZ3RoKSwgdGlja3MubGVuZ3RoKTtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGxldCBsZW5ndGgsIGksIG5leHQ7XG4gICAgc3BhY2luZyA9IE1hdGguY2VpbChzcGFjaW5nKTtcbiAgICBpZiAobWFqb3JFbmQpIHtcbiAgICAgICAgbGVuZ3RoID0gbWFqb3JFbmQgLSBtYWpvclN0YXJ0O1xuICAgICAgICBzcGFjaW5nID0gbGVuZ3RoIC8gTWF0aC5mbG9vcihsZW5ndGggLyBzcGFjaW5nKTtcbiAgICB9XG4gICAgbmV4dCA9IHN0YXJ0O1xuICAgIHdoaWxlKG5leHQgPCAwKXtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgbmV4dCA9IE1hdGgucm91bmQoc3RhcnQgKyBjb3VudCAqIHNwYWNpbmcpO1xuICAgIH1cbiAgICBmb3IoaSA9IE1hdGgubWF4KHN0YXJ0LCAwKTsgaSA8IGVuZDsgaSsrKXtcbiAgICAgICAgaWYgKGkgPT09IG5leHQpIHtcbiAgICAgICAgICAgIG5ld1RpY2tzLnB1c2godGlja3NbaV0pO1xuICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgIG5leHQgPSBNYXRoLnJvdW5kKHN0YXJ0ICsgY291bnQgKiBzcGFjaW5nKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiBmdW5jdGlvbiBnZXRFdmVuU3BhY2luZyhhcnIpIHtcbiAgICBjb25zdCBsZW4gPSBhcnIubGVuZ3RoO1xuICAgIGxldCBpLCBkaWZmO1xuICAgIGlmIChsZW4gPCAyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yKGRpZmYgPSBhcnJbMF0sIGkgPSAxOyBpIDwgbGVuOyArK2kpe1xuICAgICAgICBpZiAoYXJyW2ldIC0gYXJyW2kgLSAxXSAhPT0gZGlmZikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkaWZmO1xufVxuXG5jb25zdCByZXZlcnNlQWxpZ24gPSAoYWxpZ24pPT5hbGlnbiA9PT0gJ2xlZnQnID8gJ3JpZ2h0JyA6IGFsaWduID09PSAncmlnaHQnID8gJ2xlZnQnIDogYWxpZ247XG5jb25zdCBvZmZzZXRGcm9tRWRnZSA9IChzY2FsZSwgZWRnZSwgb2Zmc2V0KT0+ZWRnZSA9PT0gJ3RvcCcgfHwgZWRnZSA9PT0gJ2xlZnQnID8gc2NhbGVbZWRnZV0gKyBvZmZzZXQgOiBzY2FsZVtlZGdlXSAtIG9mZnNldDtcbmNvbnN0IGdldFRpY2tzTGltaXQgPSAodGlja3NMZW5ndGgsIG1heFRpY2tzTGltaXQpPT5NYXRoLm1pbihtYXhUaWNrc0xpbWl0IHx8IHRpY2tzTGVuZ3RoLCB0aWNrc0xlbmd0aCk7XG4gZnVuY3Rpb24gc2FtcGxlKGFyciwgbnVtSXRlbXMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCBpbmNyZW1lbnQgPSBhcnIubGVuZ3RoIC8gbnVtSXRlbXM7XG4gICAgY29uc3QgbGVuID0gYXJyLmxlbmd0aDtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yKDsgaSA8IGxlbjsgaSArPSBpbmNyZW1lbnQpe1xuICAgICAgICByZXN1bHQucHVzaChhcnJbTWF0aC5mbG9vcihpKV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIGZ1bmN0aW9uIGdldFBpeGVsRm9yR3JpZExpbmUoc2NhbGUsIGluZGV4LCBvZmZzZXRHcmlkTGluZXMpIHtcbiAgICBjb25zdCBsZW5ndGggPSBzY2FsZS50aWNrcy5sZW5ndGg7XG4gICAgY29uc3QgdmFsaWRJbmRleCA9IE1hdGgubWluKGluZGV4LCBsZW5ndGggLSAxKTtcbiAgICBjb25zdCBzdGFydCA9IHNjYWxlLl9zdGFydFBpeGVsO1xuICAgIGNvbnN0IGVuZCA9IHNjYWxlLl9lbmRQaXhlbDtcbiAgICBjb25zdCBlcHNpbG9uID0gMWUtNjtcbiAgICBsZXQgbGluZVZhbHVlID0gc2NhbGUuZ2V0UGl4ZWxGb3JUaWNrKHZhbGlkSW5kZXgpO1xuICAgIGxldCBvZmZzZXQ7XG4gICAgaWYgKG9mZnNldEdyaWRMaW5lcykge1xuICAgICAgICBpZiAobGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBNYXRoLm1heChsaW5lVmFsdWUgLSBzdGFydCwgZW5kIC0gbGluZVZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gKHNjYWxlLmdldFBpeGVsRm9yVGljaygxKSAtIGxpbmVWYWx1ZSkgLyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2Zmc2V0ID0gKGxpbmVWYWx1ZSAtIHNjYWxlLmdldFBpeGVsRm9yVGljayh2YWxpZEluZGV4IC0gMSkpIC8gMjtcbiAgICAgICAgfVxuICAgICAgICBsaW5lVmFsdWUgKz0gdmFsaWRJbmRleCA8IGluZGV4ID8gb2Zmc2V0IDogLW9mZnNldDtcbiAgICAgICAgaWYgKGxpbmVWYWx1ZSA8IHN0YXJ0IC0gZXBzaWxvbiB8fCBsaW5lVmFsdWUgPiBlbmQgKyBlcHNpbG9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxpbmVWYWx1ZTtcbn1cbiBmdW5jdGlvbiBnYXJiYWdlQ29sbGVjdChjYWNoZXMsIGxlbmd0aCkge1xuICAgIGVhY2goY2FjaGVzLCAoY2FjaGUpPT57XG4gICAgICAgIGNvbnN0IGdjID0gY2FjaGUuZ2M7XG4gICAgICAgIGNvbnN0IGdjTGVuID0gZ2MubGVuZ3RoIC8gMjtcbiAgICAgICAgbGV0IGk7XG4gICAgICAgIGlmIChnY0xlbiA+IGxlbmd0aCkge1xuICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgZ2NMZW47ICsraSl7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hlLmRhdGFbZ2NbaV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2Muc3BsaWNlKDAsIGdjTGVuKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIGZ1bmN0aW9uIGdldFRpY2tNYXJrTGVuZ3RoKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5kcmF3VGlja3MgPyBvcHRpb25zLnRpY2tMZW5ndGggOiAwO1xufVxuIGZ1bmN0aW9uIGdldFRpdGxlSGVpZ2h0KG9wdGlvbnMsIGZhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRpb25zLmRpc3BsYXkpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0IGZvbnQgPSB0b0ZvbnQob3B0aW9ucy5mb250LCBmYWxsYmFjayk7XG4gICAgY29uc3QgcGFkZGluZyA9IHRvUGFkZGluZyhvcHRpb25zLnBhZGRpbmcpO1xuICAgIGNvbnN0IGxpbmVzID0gaXNBcnJheShvcHRpb25zLnRleHQpID8gb3B0aW9ucy50ZXh0Lmxlbmd0aCA6IDE7XG4gICAgcmV0dXJuIGxpbmVzICogZm9udC5saW5lSGVpZ2h0ICsgcGFkZGluZy5oZWlnaHQ7XG59XG5mdW5jdGlvbiBjcmVhdGVTY2FsZUNvbnRleHQocGFyZW50LCBzY2FsZSkge1xuICAgIHJldHVybiBjcmVhdGVDb250ZXh0KHBhcmVudCwge1xuICAgICAgICBzY2FsZSxcbiAgICAgICAgdHlwZTogJ3NjYWxlJ1xuICAgIH0pO1xufVxuZnVuY3Rpb24gY3JlYXRlVGlja0NvbnRleHQocGFyZW50LCBpbmRleCwgdGljaykge1xuICAgIHJldHVybiBjcmVhdGVDb250ZXh0KHBhcmVudCwge1xuICAgICAgICB0aWNrLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgdHlwZTogJ3RpY2snXG4gICAgfSk7XG59XG5mdW5jdGlvbiB0aXRsZUFsaWduKGFsaWduLCBwb3NpdGlvbiwgcmV2ZXJzZSkge1xuICAgICBsZXQgcmV0ID0gX3RvTGVmdFJpZ2h0Q2VudGVyKGFsaWduKTtcbiAgICBpZiAocmV2ZXJzZSAmJiBwb3NpdGlvbiAhPT0gJ3JpZ2h0JyB8fCAhcmV2ZXJzZSAmJiBwb3NpdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICByZXQgPSByZXZlcnNlQWxpZ24ocmV0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cbmZ1bmN0aW9uIHRpdGxlQXJncyhzY2FsZSwgb2Zmc2V0LCBwb3NpdGlvbiwgYWxpZ24pIHtcbiAgICBjb25zdCB7IHRvcCAsIGxlZnQgLCBib3R0b20gLCByaWdodCAsIGNoYXJ0ICB9ID0gc2NhbGU7XG4gICAgY29uc3QgeyBjaGFydEFyZWEgLCBzY2FsZXMgIH0gPSBjaGFydDtcbiAgICBsZXQgcm90YXRpb24gPSAwO1xuICAgIGxldCBtYXhXaWR0aCwgdGl0bGVYLCB0aXRsZVk7XG4gICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgIGlmIChzY2FsZS5pc0hvcml6b250YWwoKSkge1xuICAgICAgICB0aXRsZVggPSBfYWxpZ25TdGFydEVuZChhbGlnbiwgbGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoaXNPYmplY3QocG9zaXRpb24pKSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbkF4aXNJRCA9IE9iamVjdC5rZXlzKHBvc2l0aW9uKVswXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcG9zaXRpb25bcG9zaXRpb25BeGlzSURdO1xuICAgICAgICAgICAgdGl0bGVZID0gc2NhbGVzW3Bvc2l0aW9uQXhpc0lEXS5nZXRQaXhlbEZvclZhbHVlKHZhbHVlKSArIGhlaWdodCAtIG9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgIHRpdGxlWSA9IChjaGFydEFyZWEuYm90dG9tICsgY2hhcnRBcmVhLnRvcCkgLyAyICsgaGVpZ2h0IC0gb2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGl0bGVZID0gb2Zmc2V0RnJvbUVkZ2Uoc2NhbGUsIHBvc2l0aW9uLCBvZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIG1heFdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc09iamVjdChwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uQXhpc0lEID0gT2JqZWN0LmtleXMocG9zaXRpb24pWzBdO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwb3NpdGlvbltwb3NpdGlvbkF4aXNJRF07XG4gICAgICAgICAgICB0aXRsZVggPSBzY2FsZXNbcG9zaXRpb25BeGlzSURdLmdldFBpeGVsRm9yVmFsdWUodmFsdWUpIC0gd2lkdGggKyBvZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICB0aXRsZVggPSAoY2hhcnRBcmVhLmxlZnQgKyBjaGFydEFyZWEucmlnaHQpIC8gMiAtIHdpZHRoICsgb2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGl0bGVYID0gb2Zmc2V0RnJvbUVkZ2Uoc2NhbGUsIHBvc2l0aW9uLCBvZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIHRpdGxlWSA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCBib3R0b20sIHRvcCk7XG4gICAgICAgIHJvdGF0aW9uID0gcG9zaXRpb24gPT09ICdsZWZ0JyA/IC1IQUxGX1BJIDogSEFMRl9QSTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdGl0bGVYLFxuICAgICAgICB0aXRsZVksXG4gICAgICAgIG1heFdpZHRoLFxuICAgICAgICByb3RhdGlvblxuICAgIH07XG59XG5jbGFzcyBTY2FsZSBleHRlbmRzIEVsZW1lbnQge1xuICAgIGNvbnN0cnVjdG9yKGNmZyl7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgICB0aGlzLmlkID0gY2ZnLmlkO1xuICAgICAgICAgdGhpcy50eXBlID0gY2ZnLnR5cGU7XG4gICAgICAgICB0aGlzLm9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLmN0eCA9IGNmZy5jdHg7XG4gICAgICAgICB0aGlzLmNoYXJ0ID0gY2ZnLmNoYXJ0O1xuICAgICAgICAgdGhpcy50b3AgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLmJvdHRvbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMubGVmdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMucmlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLndpZHRoID0gdW5kZWZpbmVkO1xuICAgICAgICAgdGhpcy5oZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX21hcmdpbnMgPSB7XG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICBib3R0b206IDBcbiAgICAgICAgfTtcbiAgICAgICAgIHRoaXMubWF4V2lkdGggPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLm1heEhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMucGFkZGluZ1RvcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMucGFkZGluZ0JvdHRvbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMucGFkZGluZ0xlZnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLnBhZGRpbmdSaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMuYXhpcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMubGFiZWxSb3RhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5taW4gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubWF4ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9yYW5nZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMudGlja3MgPSBbXTtcbiAgICAgICAgIHRoaXMuX2dyaWRMaW5lSXRlbXMgPSBudWxsO1xuICAgICAgICAgdGhpcy5fbGFiZWxJdGVtcyA9IG51bGw7XG4gICAgICAgICB0aGlzLl9sYWJlbFNpemVzID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5fbWF4TGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5fbG9uZ2VzdFRleHRDYWNoZSA9IHt9O1xuICAgICAgICAgdGhpcy5fc3RhcnRQaXhlbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMuX2VuZFBpeGVsID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9yZXZlcnNlUGl4ZWxzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3VzZXJNYXggPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3VzZXJNaW4gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3N1Z2dlc3RlZE1heCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fc3VnZ2VzdGVkTWluID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl90aWNrc0xlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuX2JvcmRlclZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5fY2FjaGUgPSB7fTtcbiAgICAgICAgdGhpcy5fZGF0YUxpbWl0c0NhY2hlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLiRjb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiBpbml0KG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucy5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgICAgICAgdGhpcy5heGlzID0gb3B0aW9ucy5heGlzO1xuICAgICAgICB0aGlzLl91c2VyTWluID0gdGhpcy5wYXJzZShvcHRpb25zLm1pbik7XG4gICAgICAgIHRoaXMuX3VzZXJNYXggPSB0aGlzLnBhcnNlKG9wdGlvbnMubWF4KTtcbiAgICAgICAgdGhpcy5fc3VnZ2VzdGVkTWluID0gdGhpcy5wYXJzZShvcHRpb25zLnN1Z2dlc3RlZE1pbik7XG4gICAgICAgIHRoaXMuX3N1Z2dlc3RlZE1heCA9IHRoaXMucGFyc2Uob3B0aW9ucy5zdWdnZXN0ZWRNYXgpO1xuICAgIH1cbiBwYXJzZShyYXcsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiByYXc7XG4gICAgfVxuIGdldFVzZXJCb3VuZHMoKSB7XG4gICAgICAgIGxldCB7IF91c2VyTWluICwgX3VzZXJNYXggLCBfc3VnZ2VzdGVkTWluICwgX3N1Z2dlc3RlZE1heCAgfSA9IHRoaXM7XG4gICAgICAgIF91c2VyTWluID0gZmluaXRlT3JEZWZhdWx0KF91c2VyTWluLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBfdXNlck1heCA9IGZpbml0ZU9yRGVmYXVsdChfdXNlck1heCwgTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKTtcbiAgICAgICAgX3N1Z2dlc3RlZE1pbiA9IGZpbml0ZU9yRGVmYXVsdChfc3VnZ2VzdGVkTWluLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBfc3VnZ2VzdGVkTWF4ID0gZmluaXRlT3JEZWZhdWx0KF9zdWdnZXN0ZWRNYXgsIE51bWJlci5ORUdBVElWRV9JTkZJTklUWSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtaW46IGZpbml0ZU9yRGVmYXVsdChfdXNlck1pbiwgX3N1Z2dlc3RlZE1pbiksXG4gICAgICAgICAgICBtYXg6IGZpbml0ZU9yRGVmYXVsdChfdXNlck1heCwgX3N1Z2dlc3RlZE1heCksXG4gICAgICAgICAgICBtaW5EZWZpbmVkOiBpc051bWJlckZpbml0ZShfdXNlck1pbiksXG4gICAgICAgICAgICBtYXhEZWZpbmVkOiBpc051bWJlckZpbml0ZShfdXNlck1heClcbiAgICAgICAgfTtcbiAgICB9XG4gZ2V0TWluTWF4KGNhblN0YWNrKSB7XG4gICAgICAgIGxldCB7IG1pbiAsIG1heCAsIG1pbkRlZmluZWQgLCBtYXhEZWZpbmVkICB9ID0gdGhpcy5nZXRVc2VyQm91bmRzKCk7XG4gICAgICAgIGxldCByYW5nZTtcbiAgICAgICAgaWYgKG1pbkRlZmluZWQgJiYgbWF4RGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICAgICAgbWF4XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldGFzID0gdGhpcy5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcygpO1xuICAgICAgICBmb3IobGV0IGkgPSAwLCBpbGVuID0gbWV0YXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIHJhbmdlID0gbWV0YXNbaV0uY29udHJvbGxlci5nZXRNaW5NYXgodGhpcywgY2FuU3RhY2spO1xuICAgICAgICAgICAgaWYgKCFtaW5EZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbWluID0gTWF0aC5taW4obWluLCByYW5nZS5taW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFtYXhEZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCByYW5nZS5tYXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG1pbiA9IG1heERlZmluZWQgJiYgbWluID4gbWF4ID8gbWF4IDogbWluO1xuICAgICAgICBtYXggPSBtaW5EZWZpbmVkICYmIG1pbiA+IG1heCA/IG1pbiA6IG1heDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1pbjogZmluaXRlT3JEZWZhdWx0KG1pbiwgZmluaXRlT3JEZWZhdWx0KG1heCwgbWluKSksXG4gICAgICAgICAgICBtYXg6IGZpbml0ZU9yRGVmYXVsdChtYXgsIGZpbml0ZU9yRGVmYXVsdChtaW4sIG1heCkpXG4gICAgICAgIH07XG4gICAgfVxuIGdldFBhZGRpbmcoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsZWZ0OiB0aGlzLnBhZGRpbmdMZWZ0IHx8IDAsXG4gICAgICAgICAgICB0b3A6IHRoaXMucGFkZGluZ1RvcCB8fCAwLFxuICAgICAgICAgICAgcmlnaHQ6IHRoaXMucGFkZGluZ1JpZ2h0IHx8IDAsXG4gICAgICAgICAgICBib3R0b206IHRoaXMucGFkZGluZ0JvdHRvbSB8fCAwXG4gICAgICAgIH07XG4gICAgfVxuIGdldFRpY2tzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aWNrcztcbiAgICB9XG4gZ2V0TGFiZWxzKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5jaGFydC5kYXRhO1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVscyB8fCAodGhpcy5pc0hvcml6b250YWwoKSA/IGRhdGEueExhYmVscyA6IGRhdGEueUxhYmVscykgfHwgZGF0YS5sYWJlbHMgfHwgW107XG4gICAgfVxuIGdldExhYmVsSXRlbXMoY2hhcnRBcmVhID0gdGhpcy5jaGFydC5jaGFydEFyZWEpIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLl9sYWJlbEl0ZW1zIHx8ICh0aGlzLl9sYWJlbEl0ZW1zID0gdGhpcy5fY29tcHV0ZUxhYmVsSXRlbXMoY2hhcnRBcmVhKSk7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG4gICAgYmVmb3JlTGF5b3V0KCkge1xuICAgICAgICB0aGlzLl9jYWNoZSA9IHt9O1xuICAgICAgICB0aGlzLl9kYXRhTGltaXRzQ2FjaGVkID0gZmFsc2U7XG4gICAgfVxuICAgIGJlZm9yZVVwZGF0ZSgpIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZVVwZGF0ZSwgW1xuICAgICAgICAgICAgdGhpc1xuICAgICAgICBdKTtcbiAgICB9XG4gdXBkYXRlKG1heFdpZHRoLCBtYXhIZWlnaHQsIG1hcmdpbnMpIHtcbiAgICAgICAgY29uc3QgeyBiZWdpbkF0WmVybyAsIGdyYWNlICwgdGlja3M6IHRpY2tPcHRzICB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBzYW1wbGVTaXplID0gdGlja09wdHMuc2FtcGxlU2l6ZTtcbiAgICAgICAgdGhpcy5iZWZvcmVVcGRhdGUoKTtcbiAgICAgICAgdGhpcy5tYXhXaWR0aCA9IG1heFdpZHRoO1xuICAgICAgICB0aGlzLm1heEhlaWdodCA9IG1heEhlaWdodDtcbiAgICAgICAgdGhpcy5fbWFyZ2lucyA9IG1hcmdpbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgIGJvdHRvbTogMFxuICAgICAgICB9LCBtYXJnaW5zKTtcbiAgICAgICAgdGhpcy50aWNrcyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2xhYmVsU2l6ZXMgPSBudWxsO1xuICAgICAgICB0aGlzLl9ncmlkTGluZUl0ZW1zID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbGFiZWxJdGVtcyA9IG51bGw7XG4gICAgICAgIHRoaXMuYmVmb3JlU2V0RGltZW5zaW9ucygpO1xuICAgICAgICB0aGlzLnNldERpbWVuc2lvbnMoKTtcbiAgICAgICAgdGhpcy5hZnRlclNldERpbWVuc2lvbnMoKTtcbiAgICAgICAgdGhpcy5fbWF4TGVuZ3RoID0gdGhpcy5pc0hvcml6b250YWwoKSA/IHRoaXMud2lkdGggKyBtYXJnaW5zLmxlZnQgKyBtYXJnaW5zLnJpZ2h0IDogdGhpcy5oZWlnaHQgKyBtYXJnaW5zLnRvcCArIG1hcmdpbnMuYm90dG9tO1xuICAgICAgICBpZiAoIXRoaXMuX2RhdGFMaW1pdHNDYWNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYmVmb3JlRGF0YUxpbWl0cygpO1xuICAgICAgICAgICAgdGhpcy5kZXRlcm1pbmVEYXRhTGltaXRzKCk7XG4gICAgICAgICAgICB0aGlzLmFmdGVyRGF0YUxpbWl0cygpO1xuICAgICAgICAgICAgdGhpcy5fcmFuZ2UgPSBfYWRkR3JhY2UodGhpcywgZ3JhY2UsIGJlZ2luQXRaZXJvKTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFMaW1pdHNDYWNoZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmVmb3JlQnVpbGRUaWNrcygpO1xuICAgICAgICB0aGlzLnRpY2tzID0gdGhpcy5idWlsZFRpY2tzKCkgfHwgW107XG4gICAgICAgIHRoaXMuYWZ0ZXJCdWlsZFRpY2tzKCk7XG4gICAgICAgIGNvbnN0IHNhbXBsaW5nRW5hYmxlZCA9IHNhbXBsZVNpemUgPCB0aGlzLnRpY2tzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5fY29udmVydFRpY2tzVG9MYWJlbHMoc2FtcGxpbmdFbmFibGVkID8gc2FtcGxlKHRoaXMudGlja3MsIHNhbXBsZVNpemUpIDogdGhpcy50aWNrcyk7XG4gICAgICAgIHRoaXMuY29uZmlndXJlKCk7XG4gICAgICAgIHRoaXMuYmVmb3JlQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKTtcbiAgICAgICAgdGhpcy5hZnRlckNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKTtcbiAgICAgICAgaWYgKHRpY2tPcHRzLmRpc3BsYXkgJiYgKHRpY2tPcHRzLmF1dG9Ta2lwIHx8IHRpY2tPcHRzLnNvdXJjZSA9PT0gJ2F1dG8nKSkge1xuICAgICAgICAgICAgdGhpcy50aWNrcyA9IGF1dG9Ta2lwKHRoaXMsIHRoaXMudGlja3MpO1xuICAgICAgICAgICAgdGhpcy5fbGFiZWxTaXplcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmFmdGVyQXV0b1NraXAoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2FtcGxpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9jb252ZXJ0VGlja3NUb0xhYmVscyh0aGlzLnRpY2tzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJlZm9yZUZpdCgpO1xuICAgICAgICB0aGlzLmZpdCgpO1xuICAgICAgICB0aGlzLmFmdGVyRml0KCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJVcGRhdGUoKTtcbiAgICB9XG4gY29uZmlndXJlKCkge1xuICAgICAgICBsZXQgcmV2ZXJzZVBpeGVscyA9IHRoaXMub3B0aW9ucy5yZXZlcnNlO1xuICAgICAgICBsZXQgc3RhcnRQaXhlbCwgZW5kUGl4ZWw7XG4gICAgICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgICBzdGFydFBpeGVsID0gdGhpcy5sZWZ0O1xuICAgICAgICAgICAgZW5kUGl4ZWwgPSB0aGlzLnJpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhcnRQaXhlbCA9IHRoaXMudG9wO1xuICAgICAgICAgICAgZW5kUGl4ZWwgPSB0aGlzLmJvdHRvbTtcbiAgICAgICAgICAgIHJldmVyc2VQaXhlbHMgPSAhcmV2ZXJzZVBpeGVscztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zdGFydFBpeGVsID0gc3RhcnRQaXhlbDtcbiAgICAgICAgdGhpcy5fZW5kUGl4ZWwgPSBlbmRQaXhlbDtcbiAgICAgICAgdGhpcy5fcmV2ZXJzZVBpeGVscyA9IHJldmVyc2VQaXhlbHM7XG4gICAgICAgIHRoaXMuX2xlbmd0aCA9IGVuZFBpeGVsIC0gc3RhcnRQaXhlbDtcbiAgICAgICAgdGhpcy5fYWxpZ25Ub1BpeGVscyA9IHRoaXMub3B0aW9ucy5hbGlnblRvUGl4ZWxzO1xuICAgIH1cbiAgICBhZnRlclVwZGF0ZSgpIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5vcHRpb25zLmFmdGVyVXBkYXRlLCBbXG4gICAgICAgICAgICB0aGlzXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBiZWZvcmVTZXREaW1lbnNpb25zKCkge1xuICAgICAgICBjYWxsYmFjayh0aGlzLm9wdGlvbnMuYmVmb3JlU2V0RGltZW5zaW9ucywgW1xuICAgICAgICAgICAgdGhpc1xuICAgICAgICBdKTtcbiAgICB9XG4gICAgc2V0RGltZW5zaW9ucygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLm1heFdpZHRoO1xuICAgICAgICAgICAgdGhpcy5sZWZ0ID0gMDtcbiAgICAgICAgICAgIHRoaXMucmlnaHQgPSB0aGlzLndpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLm1heEhlaWdodDtcbiAgICAgICAgICAgIHRoaXMudG9wID0gMDtcbiAgICAgICAgICAgIHRoaXMuYm90dG9tID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYWRkaW5nTGVmdCA9IDA7XG4gICAgICAgIHRoaXMucGFkZGluZ1RvcCA9IDA7XG4gICAgICAgIHRoaXMucGFkZGluZ1JpZ2h0ID0gMDtcbiAgICAgICAgdGhpcy5wYWRkaW5nQm90dG9tID0gMDtcbiAgICB9XG4gICAgYWZ0ZXJTZXREaW1lbnNpb25zKCkge1xuICAgICAgICBjYWxsYmFjayh0aGlzLm9wdGlvbnMuYWZ0ZXJTZXREaW1lbnNpb25zLCBbXG4gICAgICAgICAgICB0aGlzXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBfY2FsbEhvb2tzKG5hbWUpIHtcbiAgICAgICAgdGhpcy5jaGFydC5ub3RpZnlQbHVnaW5zKG5hbWUsIHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5vcHRpb25zW25hbWVdLCBbXG4gICAgICAgICAgICB0aGlzXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBiZWZvcmVEYXRhTGltaXRzKCkge1xuICAgICAgICB0aGlzLl9jYWxsSG9va3MoJ2JlZm9yZURhdGFMaW1pdHMnKTtcbiAgICB9XG4gICAgZGV0ZXJtaW5lRGF0YUxpbWl0cygpIHt9XG4gICAgYWZ0ZXJEYXRhTGltaXRzKCkge1xuICAgICAgICB0aGlzLl9jYWxsSG9va3MoJ2FmdGVyRGF0YUxpbWl0cycpO1xuICAgIH1cbiAgICBiZWZvcmVCdWlsZFRpY2tzKCkge1xuICAgICAgICB0aGlzLl9jYWxsSG9va3MoJ2JlZm9yZUJ1aWxkVGlja3MnKTtcbiAgICB9XG4gYnVpbGRUaWNrcygpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBhZnRlckJ1aWxkVGlja3MoKSB7XG4gICAgICAgIHRoaXMuX2NhbGxIb29rcygnYWZ0ZXJCdWlsZFRpY2tzJyk7XG4gICAgfVxuICAgIGJlZm9yZVRpY2tUb0xhYmVsQ29udmVyc2lvbigpIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZVRpY2tUb0xhYmVsQ29udmVyc2lvbiwgW1xuICAgICAgICAgICAgdGhpc1xuICAgICAgICBdKTtcbiAgICB9XG4gZ2VuZXJhdGVUaWNrTGFiZWxzKHRpY2tzKSB7XG4gICAgICAgIGNvbnN0IHRpY2tPcHRzID0gdGhpcy5vcHRpb25zLnRpY2tzO1xuICAgICAgICBsZXQgaSwgaWxlbiwgdGljaztcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gdGlja3MubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKXtcbiAgICAgICAgICAgIHRpY2sgPSB0aWNrc1tpXTtcbiAgICAgICAgICAgIHRpY2subGFiZWwgPSBjYWxsYmFjayh0aWNrT3B0cy5jYWxsYmFjaywgW1xuICAgICAgICAgICAgICAgIHRpY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICB0aWNrc1xuICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb24oKSB7XG4gICAgICAgIGNhbGxiYWNrKHRoaXMub3B0aW9ucy5hZnRlclRpY2tUb0xhYmVsQ29udmVyc2lvbiwgW1xuICAgICAgICAgICAgdGhpc1xuICAgICAgICBdKTtcbiAgICB9XG4gICAgYmVmb3JlQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZUNhbGN1bGF0ZUxhYmVsUm90YXRpb24sIFtcbiAgICAgICAgICAgIHRoaXNcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHRpY2tPcHRzID0gb3B0aW9ucy50aWNrcztcbiAgICAgICAgY29uc3QgbnVtVGlja3MgPSBnZXRUaWNrc0xpbWl0KHRoaXMudGlja3MubGVuZ3RoLCBvcHRpb25zLnRpY2tzLm1heFRpY2tzTGltaXQpO1xuICAgICAgICBjb25zdCBtaW5Sb3RhdGlvbiA9IHRpY2tPcHRzLm1pblJvdGF0aW9uIHx8IDA7XG4gICAgICAgIGNvbnN0IG1heFJvdGF0aW9uID0gdGlja09wdHMubWF4Um90YXRpb247XG4gICAgICAgIGxldCBsYWJlbFJvdGF0aW9uID0gbWluUm90YXRpb247XG4gICAgICAgIGxldCB0aWNrV2lkdGgsIG1heEhlaWdodCwgbWF4TGFiZWxEaWFnb25hbDtcbiAgICAgICAgaWYgKCF0aGlzLl9pc1Zpc2libGUoKSB8fCAhdGlja09wdHMuZGlzcGxheSB8fCBtaW5Sb3RhdGlvbiA+PSBtYXhSb3RhdGlvbiB8fCBudW1UaWNrcyA8PSAxIHx8ICF0aGlzLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgICB0aGlzLmxhYmVsUm90YXRpb24gPSBtaW5Sb3RhdGlvbjtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYWJlbFNpemVzID0gdGhpcy5fZ2V0TGFiZWxTaXplcygpO1xuICAgICAgICBjb25zdCBtYXhMYWJlbFdpZHRoID0gbGFiZWxTaXplcy53aWRlc3Qud2lkdGg7XG4gICAgICAgIGNvbnN0IG1heExhYmVsSGVpZ2h0ID0gbGFiZWxTaXplcy5oaWdoZXN0LmhlaWdodDtcbiAgICAgICAgY29uc3QgbWF4V2lkdGggPSBfbGltaXRWYWx1ZSh0aGlzLmNoYXJ0LndpZHRoIC0gbWF4TGFiZWxXaWR0aCwgMCwgdGhpcy5tYXhXaWR0aCk7XG4gICAgICAgIHRpY2tXaWR0aCA9IG9wdGlvbnMub2Zmc2V0ID8gdGhpcy5tYXhXaWR0aCAvIG51bVRpY2tzIDogbWF4V2lkdGggLyAobnVtVGlja3MgLSAxKTtcbiAgICAgICAgaWYgKG1heExhYmVsV2lkdGggKyA2ID4gdGlja1dpZHRoKSB7XG4gICAgICAgICAgICB0aWNrV2lkdGggPSBtYXhXaWR0aCAvIChudW1UaWNrcyAtIChvcHRpb25zLm9mZnNldCA/IDAuNSA6IDEpKTtcbiAgICAgICAgICAgIG1heEhlaWdodCA9IHRoaXMubWF4SGVpZ2h0IC0gZ2V0VGlja01hcmtMZW5ndGgob3B0aW9ucy5ncmlkKSAtIHRpY2tPcHRzLnBhZGRpbmcgLSBnZXRUaXRsZUhlaWdodChvcHRpb25zLnRpdGxlLCB0aGlzLmNoYXJ0Lm9wdGlvbnMuZm9udCk7XG4gICAgICAgICAgICBtYXhMYWJlbERpYWdvbmFsID0gTWF0aC5zcXJ0KG1heExhYmVsV2lkdGggKiBtYXhMYWJlbFdpZHRoICsgbWF4TGFiZWxIZWlnaHQgKiBtYXhMYWJlbEhlaWdodCk7XG4gICAgICAgICAgICBsYWJlbFJvdGF0aW9uID0gdG9EZWdyZWVzKE1hdGgubWluKE1hdGguYXNpbihfbGltaXRWYWx1ZSgobGFiZWxTaXplcy5oaWdoZXN0LmhlaWdodCArIDYpIC8gdGlja1dpZHRoLCAtMSwgMSkpLCBNYXRoLmFzaW4oX2xpbWl0VmFsdWUobWF4SGVpZ2h0IC8gbWF4TGFiZWxEaWFnb25hbCwgLTEsIDEpKSAtIE1hdGguYXNpbihfbGltaXRWYWx1ZShtYXhMYWJlbEhlaWdodCAvIG1heExhYmVsRGlhZ29uYWwsIC0xLCAxKSkpKTtcbiAgICAgICAgICAgIGxhYmVsUm90YXRpb24gPSBNYXRoLm1heChtaW5Sb3RhdGlvbiwgTWF0aC5taW4obWF4Um90YXRpb24sIGxhYmVsUm90YXRpb24pKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxhYmVsUm90YXRpb24gPSBsYWJlbFJvdGF0aW9uO1xuICAgIH1cbiAgICBhZnRlckNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKSB7XG4gICAgICAgIGNhbGxiYWNrKHRoaXMub3B0aW9ucy5hZnRlckNhbGN1bGF0ZUxhYmVsUm90YXRpb24sIFtcbiAgICAgICAgICAgIHRoaXNcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGFmdGVyQXV0b1NraXAoKSB7fVxuICAgIGJlZm9yZUZpdCgpIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZUZpdCwgW1xuICAgICAgICAgICAgdGhpc1xuICAgICAgICBdKTtcbiAgICB9XG4gICAgZml0KCkge1xuICAgICAgICBjb25zdCBtaW5TaXplID0ge1xuICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICBoZWlnaHQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyBjaGFydCAsIG9wdGlvbnM6IHsgdGlja3M6IHRpY2tPcHRzICwgdGl0bGU6IHRpdGxlT3B0cyAsIGdyaWQ6IGdyaWRPcHRzICB9ICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgZGlzcGxheSA9IHRoaXMuX2lzVmlzaWJsZSgpO1xuICAgICAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLmlzSG9yaXpvbnRhbCgpO1xuICAgICAgICBpZiAoZGlzcGxheSkge1xuICAgICAgICAgICAgY29uc3QgdGl0bGVIZWlnaHQgPSBnZXRUaXRsZUhlaWdodCh0aXRsZU9wdHMsIGNoYXJ0Lm9wdGlvbnMuZm9udCk7XG4gICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgbWluU2l6ZS53aWR0aCA9IHRoaXMubWF4V2lkdGg7XG4gICAgICAgICAgICAgICAgbWluU2l6ZS5oZWlnaHQgPSBnZXRUaWNrTWFya0xlbmd0aChncmlkT3B0cykgKyB0aXRsZUhlaWdodDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWluU2l6ZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodDtcbiAgICAgICAgICAgICAgICBtaW5TaXplLndpZHRoID0gZ2V0VGlja01hcmtMZW5ndGgoZ3JpZE9wdHMpICsgdGl0bGVIZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGlja09wdHMuZGlzcGxheSAmJiB0aGlzLnRpY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZmlyc3QgLCBsYXN0ICwgd2lkZXN0ICwgaGlnaGVzdCAgfSA9IHRoaXMuX2dldExhYmVsU2l6ZXMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWNrUGFkZGluZyA9IHRpY2tPcHRzLnBhZGRpbmcgKiAyO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFuZ2xlUmFkaWFucyA9IHRvUmFkaWFucyh0aGlzLmxhYmVsUm90YXRpb24pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvcyA9IE1hdGguY29zKGFuZ2xlUmFkaWFucyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2luID0gTWF0aC5zaW4oYW5nbGVSYWRpYW5zKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsSGVpZ2h0ID0gdGlja09wdHMubWlycm9yID8gMCA6IHNpbiAqIHdpZGVzdC53aWR0aCArIGNvcyAqIGhpZ2hlc3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBtaW5TaXplLmhlaWdodCA9IE1hdGgubWluKHRoaXMubWF4SGVpZ2h0LCBtaW5TaXplLmhlaWdodCArIGxhYmVsSGVpZ2h0ICsgdGlja1BhZGRpbmcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsV2lkdGggPSB0aWNrT3B0cy5taXJyb3IgPyAwIDogY29zICogd2lkZXN0LndpZHRoICsgc2luICogaGlnaGVzdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIG1pblNpemUud2lkdGggPSBNYXRoLm1pbih0aGlzLm1heFdpZHRoLCBtaW5TaXplLndpZHRoICsgbGFiZWxXaWR0aCArIHRpY2tQYWRkaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlUGFkZGluZyhmaXJzdCwgbGFzdCwgc2luLCBjb3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2hhbmRsZU1hcmdpbnMoKTtcbiAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuX2xlbmd0aCA9IGNoYXJ0LndpZHRoIC0gdGhpcy5fbWFyZ2lucy5sZWZ0IC0gdGhpcy5fbWFyZ2lucy5yaWdodDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gbWluU2l6ZS5oZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndpZHRoID0gbWluU2l6ZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5fbGVuZ3RoID0gY2hhcnQuaGVpZ2h0IC0gdGhpcy5fbWFyZ2lucy50b3AgLSB0aGlzLl9tYXJnaW5zLmJvdHRvbTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfY2FsY3VsYXRlUGFkZGluZyhmaXJzdCwgbGFzdCwgc2luLCBjb3MpIHtcbiAgICAgICAgY29uc3QgeyB0aWNrczogeyBhbGlnbiAsIHBhZGRpbmcgIH0gLCBwb3NpdGlvbiAgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgaXNSb3RhdGVkID0gdGhpcy5sYWJlbFJvdGF0aW9uICE9PSAwO1xuICAgICAgICBjb25zdCBsYWJlbHNCZWxvd1RpY2tzID0gcG9zaXRpb24gIT09ICd0b3AnICYmIHRoaXMuYXhpcyA9PT0gJ3gnO1xuICAgICAgICBpZiAodGhpcy5pc0hvcml6b250YWwoKSkge1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0TGVmdCA9IHRoaXMuZ2V0UGl4ZWxGb3JUaWNrKDApIC0gdGhpcy5sZWZ0O1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0UmlnaHQgPSB0aGlzLnJpZ2h0IC0gdGhpcy5nZXRQaXhlbEZvclRpY2sodGhpcy50aWNrcy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIGxldCBwYWRkaW5nTGVmdCA9IDA7XG4gICAgICAgICAgICBsZXQgcGFkZGluZ1JpZ2h0ID0gMDtcbiAgICAgICAgICAgIGlmIChpc1JvdGF0ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAobGFiZWxzQmVsb3dUaWNrcykge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdCA9IGNvcyAqIGZpcnN0LndpZHRoO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQgPSBzaW4gKiBsYXN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdCA9IHNpbiAqIGZpcnN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZ1JpZ2h0ID0gY29zICogbGFzdC53aWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFsaWduID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ1JpZ2h0ID0gbGFzdC53aWR0aDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxpZ24gPT09ICdlbmQnKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQgPSBmaXJzdC53aWR0aDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxpZ24gIT09ICdpbm5lcicpIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdCA9IGZpcnN0LndpZHRoIC8gMjtcbiAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQgPSBsYXN0LndpZHRoIC8gMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFkZGluZ0xlZnQgPSBNYXRoLm1heCgocGFkZGluZ0xlZnQgLSBvZmZzZXRMZWZ0ICsgcGFkZGluZykgKiB0aGlzLndpZHRoIC8gKHRoaXMud2lkdGggLSBvZmZzZXRMZWZ0KSwgMCk7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmdSaWdodCA9IE1hdGgubWF4KChwYWRkaW5nUmlnaHQgLSBvZmZzZXRSaWdodCArIHBhZGRpbmcpICogdGhpcy53aWR0aCAvICh0aGlzLndpZHRoIC0gb2Zmc2V0UmlnaHQpLCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBwYWRkaW5nVG9wID0gbGFzdC5oZWlnaHQgLyAyO1xuICAgICAgICAgICAgbGV0IHBhZGRpbmdCb3R0b20gPSBmaXJzdC5oZWlnaHQgLyAyO1xuICAgICAgICAgICAgaWYgKGFsaWduID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ1RvcCA9IDA7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0JvdHRvbSA9IGZpcnN0LmhlaWdodDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxpZ24gPT09ICdlbmQnKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ1RvcCA9IGxhc3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHBhZGRpbmdCb3R0b20gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYWRkaW5nVG9wID0gcGFkZGluZ1RvcCArIHBhZGRpbmc7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmdCb3R0b20gPSBwYWRkaW5nQm90dG9tICsgcGFkZGluZztcbiAgICAgICAgfVxuICAgIH1cbiBfaGFuZGxlTWFyZ2lucygpIHtcbiAgICAgICAgaWYgKHRoaXMuX21hcmdpbnMpIHtcbiAgICAgICAgICAgIHRoaXMuX21hcmdpbnMubGVmdCA9IE1hdGgubWF4KHRoaXMucGFkZGluZ0xlZnQsIHRoaXMuX21hcmdpbnMubGVmdCk7XG4gICAgICAgICAgICB0aGlzLl9tYXJnaW5zLnRvcCA9IE1hdGgubWF4KHRoaXMucGFkZGluZ1RvcCwgdGhpcy5fbWFyZ2lucy50b3ApO1xuICAgICAgICAgICAgdGhpcy5fbWFyZ2lucy5yaWdodCA9IE1hdGgubWF4KHRoaXMucGFkZGluZ1JpZ2h0LCB0aGlzLl9tYXJnaW5zLnJpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuX21hcmdpbnMuYm90dG9tID0gTWF0aC5tYXgodGhpcy5wYWRkaW5nQm90dG9tLCB0aGlzLl9tYXJnaW5zLmJvdHRvbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWZ0ZXJGaXQoKSB7XG4gICAgICAgIGNhbGxiYWNrKHRoaXMub3B0aW9ucy5hZnRlckZpdCwgW1xuICAgICAgICAgICAgdGhpc1xuICAgICAgICBdKTtcbiAgICB9XG4gaXNIb3Jpem9udGFsKCkge1xuICAgICAgICBjb25zdCB7IGF4aXMgLCBwb3NpdGlvbiAgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbScgfHwgYXhpcyA9PT0gJ3gnO1xuICAgIH1cbiBpc0Z1bGxTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZ1bGxTaXplO1xuICAgIH1cbiBfY29udmVydFRpY2tzVG9MYWJlbHModGlja3MpIHtcbiAgICAgICAgdGhpcy5iZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24oKTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVRpY2tMYWJlbHModGlja3MpO1xuICAgICAgICBsZXQgaSwgaWxlbjtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gdGlja3MubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKXtcbiAgICAgICAgICAgIGlmIChpc051bGxPclVuZGVmKHRpY2tzW2ldLmxhYmVsKSkge1xuICAgICAgICAgICAgICAgIHRpY2tzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICBpbGVuLS07XG4gICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb24oKTtcbiAgICB9XG4gX2dldExhYmVsU2l6ZXMoKSB7XG4gICAgICAgIGxldCBsYWJlbFNpemVzID0gdGhpcy5fbGFiZWxTaXplcztcbiAgICAgICAgaWYgKCFsYWJlbFNpemVzKSB7XG4gICAgICAgICAgICBjb25zdCBzYW1wbGVTaXplID0gdGhpcy5vcHRpb25zLnRpY2tzLnNhbXBsZVNpemU7XG4gICAgICAgICAgICBsZXQgdGlja3MgPSB0aGlzLnRpY2tzO1xuICAgICAgICAgICAgaWYgKHNhbXBsZVNpemUgPCB0aWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aWNrcyA9IHNhbXBsZSh0aWNrcywgc2FtcGxlU2l6ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9sYWJlbFNpemVzID0gbGFiZWxTaXplcyA9IHRoaXMuX2NvbXB1dGVMYWJlbFNpemVzKHRpY2tzLCB0aWNrcy5sZW5ndGgsIHRoaXMub3B0aW9ucy50aWNrcy5tYXhUaWNrc0xpbWl0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFiZWxTaXplcztcbiAgICB9XG4gX2NvbXB1dGVMYWJlbFNpemVzKHRpY2tzLCBsZW5ndGgsIG1heFRpY2tzTGltaXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggLCBfbG9uZ2VzdFRleHRDYWNoZTogY2FjaGVzICB9ID0gdGhpcztcbiAgICAgICAgY29uc3Qgd2lkdGhzID0gW107XG4gICAgICAgIGNvbnN0IGhlaWdodHMgPSBbXTtcbiAgICAgICAgY29uc3QgaW5jcmVtZW50ID0gTWF0aC5mbG9vcihsZW5ndGggLyBnZXRUaWNrc0xpbWl0KGxlbmd0aCwgbWF4VGlja3NMaW1pdCkpO1xuICAgICAgICBsZXQgd2lkZXN0TGFiZWxTaXplID0gMDtcbiAgICAgICAgbGV0IGhpZ2hlc3RMYWJlbFNpemUgPSAwO1xuICAgICAgICBsZXQgaSwgaiwgamxlbiwgbGFiZWwsIHRpY2tGb250LCBmb250U3RyaW5nLCBjYWNoZSwgbGluZUhlaWdodCwgd2lkdGgsIGhlaWdodCwgbmVzdGVkTGFiZWw7XG4gICAgICAgIGZvcihpID0gMDsgaSA8IGxlbmd0aDsgaSArPSBpbmNyZW1lbnQpe1xuICAgICAgICAgICAgbGFiZWwgPSB0aWNrc1tpXS5sYWJlbDtcbiAgICAgICAgICAgIHRpY2tGb250ID0gdGhpcy5fcmVzb2x2ZVRpY2tGb250T3B0aW9ucyhpKTtcbiAgICAgICAgICAgIGN0eC5mb250ID0gZm9udFN0cmluZyA9IHRpY2tGb250LnN0cmluZztcbiAgICAgICAgICAgIGNhY2hlID0gY2FjaGVzW2ZvbnRTdHJpbmddID0gY2FjaGVzW2ZvbnRTdHJpbmddIHx8IHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICAgICAgICBnYzogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gdGlja0ZvbnQubGluZUhlaWdodDtcbiAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIGlmICghaXNOdWxsT3JVbmRlZihsYWJlbCkgJiYgIWlzQXJyYXkobGFiZWwpKSB7XG4gICAgICAgICAgICAgICAgd2lkdGggPSBfbWVhc3VyZVRleHQoY3R4LCBjYWNoZS5kYXRhLCBjYWNoZS5nYywgd2lkdGgsIGxhYmVsKTtcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBsaW5lSGVpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGxhYmVsKSkge1xuICAgICAgICAgICAgICAgIGZvcihqID0gMCwgamxlbiA9IGxhYmVsLmxlbmd0aDsgaiA8IGpsZW47ICsrail7XG4gICAgICAgICAgICAgICAgICAgIG5lc3RlZExhYmVsID0gIGxhYmVsW2pdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYobmVzdGVkTGFiZWwpICYmICFpc0FycmF5KG5lc3RlZExhYmVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBfbWVhc3VyZVRleHQoY3R4LCBjYWNoZS5kYXRhLCBjYWNoZS5nYywgd2lkdGgsIG5lc3RlZExhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCArPSBsaW5lSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2lkdGhzLnB1c2god2lkdGgpO1xuICAgICAgICAgICAgaGVpZ2h0cy5wdXNoKGhlaWdodCk7XG4gICAgICAgICAgICB3aWRlc3RMYWJlbFNpemUgPSBNYXRoLm1heCh3aWR0aCwgd2lkZXN0TGFiZWxTaXplKTtcbiAgICAgICAgICAgIGhpZ2hlc3RMYWJlbFNpemUgPSBNYXRoLm1heChoZWlnaHQsIGhpZ2hlc3RMYWJlbFNpemUpO1xuICAgICAgICB9XG4gICAgICAgIGdhcmJhZ2VDb2xsZWN0KGNhY2hlcywgbGVuZ3RoKTtcbiAgICAgICAgY29uc3Qgd2lkZXN0ID0gd2lkdGhzLmluZGV4T2Yod2lkZXN0TGFiZWxTaXplKTtcbiAgICAgICAgY29uc3QgaGlnaGVzdCA9IGhlaWdodHMuaW5kZXhPZihoaWdoZXN0TGFiZWxTaXplKTtcbiAgICAgICAgY29uc3QgdmFsdWVBdCA9IChpZHgpPT4oe1xuICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aHNbaWR4XSB8fCAwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0c1tpZHhdIHx8IDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmlyc3Q6IHZhbHVlQXQoMCksXG4gICAgICAgICAgICBsYXN0OiB2YWx1ZUF0KGxlbmd0aCAtIDEpLFxuICAgICAgICAgICAgd2lkZXN0OiB2YWx1ZUF0KHdpZGVzdCksXG4gICAgICAgICAgICBoaWdoZXN0OiB2YWx1ZUF0KGhpZ2hlc3QpLFxuICAgICAgICAgICAgd2lkdGhzLFxuICAgICAgICAgICAgaGVpZ2h0c1xuICAgICAgICB9O1xuICAgIH1cbiBnZXRMYWJlbEZvclZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gZ2V0VmFsdWVGb3JQaXhlbChwaXhlbCkge31cbiBnZXRQaXhlbEZvclRpY2soaW5kZXgpIHtcbiAgICAgICAgY29uc3QgdGlja3MgPSB0aGlzLnRpY2tzO1xuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gdGlja3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0aWNrc1tpbmRleF0udmFsdWUpO1xuICAgIH1cbiBnZXRQaXhlbEZvckRlY2ltYWwoZGVjaW1hbCkge1xuICAgICAgICBpZiAodGhpcy5fcmV2ZXJzZVBpeGVscykge1xuICAgICAgICAgICAgZGVjaW1hbCA9IDEgLSBkZWNpbWFsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBpeGVsID0gdGhpcy5fc3RhcnRQaXhlbCArIGRlY2ltYWwgKiB0aGlzLl9sZW5ndGg7XG4gICAgICAgIHJldHVybiBfaW50MTZSYW5nZSh0aGlzLl9hbGlnblRvUGl4ZWxzID8gX2FsaWduUGl4ZWwodGhpcy5jaGFydCwgcGl4ZWwsIDApIDogcGl4ZWwpO1xuICAgIH1cbiBnZXREZWNpbWFsRm9yUGl4ZWwocGl4ZWwpIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbCA9IChwaXhlbCAtIHRoaXMuX3N0YXJ0UGl4ZWwpIC8gdGhpcy5fbGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmV2ZXJzZVBpeGVscyA/IDEgLSBkZWNpbWFsIDogZGVjaW1hbDtcbiAgICB9XG4gZ2V0QmFzZVBpeGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQaXhlbEZvclZhbHVlKHRoaXMuZ2V0QmFzZVZhbHVlKCkpO1xuICAgIH1cbiBnZXRCYXNlVmFsdWUoKSB7XG4gICAgICAgIGNvbnN0IHsgbWluICwgbWF4ICB9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG1pbiA8IDAgJiYgbWF4IDwgMCA/IG1heCA6IG1pbiA+IDAgJiYgbWF4ID4gMCA/IG1pbiA6IDA7XG4gICAgfVxuIGdldENvbnRleHQoaW5kZXgpIHtcbiAgICAgICAgY29uc3QgdGlja3MgPSB0aGlzLnRpY2tzIHx8IFtdO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRpY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgdGljayA9IHRpY2tzW2luZGV4XTtcbiAgICAgICAgICAgIHJldHVybiB0aWNrLiRjb250ZXh0IHx8ICh0aWNrLiRjb250ZXh0ID0gY3JlYXRlVGlja0NvbnRleHQodGhpcy5nZXRDb250ZXh0KCksIGluZGV4LCB0aWNrKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuJGNvbnRleHQgfHwgKHRoaXMuJGNvbnRleHQgPSBjcmVhdGVTY2FsZUNvbnRleHQodGhpcy5jaGFydC5nZXRDb250ZXh0KCksIHRoaXMpKTtcbiAgICB9XG4gX3RpY2tTaXplKCkge1xuICAgICAgICBjb25zdCBvcHRpb25UaWNrcyA9IHRoaXMub3B0aW9ucy50aWNrcztcbiAgICAgICAgY29uc3Qgcm90ID0gdG9SYWRpYW5zKHRoaXMubGFiZWxSb3RhdGlvbik7XG4gICAgICAgIGNvbnN0IGNvcyA9IE1hdGguYWJzKE1hdGguY29zKHJvdCkpO1xuICAgICAgICBjb25zdCBzaW4gPSBNYXRoLmFicyhNYXRoLnNpbihyb3QpKTtcbiAgICAgICAgY29uc3QgbGFiZWxTaXplcyA9IHRoaXMuX2dldExhYmVsU2l6ZXMoKTtcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IG9wdGlvblRpY2tzLmF1dG9Ta2lwUGFkZGluZyB8fCAwO1xuICAgICAgICBjb25zdCB3ID0gbGFiZWxTaXplcyA/IGxhYmVsU2l6ZXMud2lkZXN0LndpZHRoICsgcGFkZGluZyA6IDA7XG4gICAgICAgIGNvbnN0IGggPSBsYWJlbFNpemVzID8gbGFiZWxTaXplcy5oaWdoZXN0LmhlaWdodCArIHBhZGRpbmcgOiAwO1xuICAgICAgICByZXR1cm4gdGhpcy5pc0hvcml6b250YWwoKSA/IGggKiBjb3MgPiB3ICogc2luID8gdyAvIGNvcyA6IGggLyBzaW4gOiBoICogc2luIDwgdyAqIGNvcyA/IGggLyBjb3MgOiB3IC8gc2luO1xuICAgIH1cbiBfaXNWaXNpYmxlKCkge1xuICAgICAgICBjb25zdCBkaXNwbGF5ID0gdGhpcy5vcHRpb25zLmRpc3BsYXk7XG4gICAgICAgIGlmIChkaXNwbGF5ICE9PSAnYXV0bycpIHtcbiAgICAgICAgICAgIHJldHVybiAhIWRpc3BsYXk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMoKS5sZW5ndGggPiAwO1xuICAgIH1cbiBfY29tcHV0ZUdyaWRMaW5lSXRlbXMoY2hhcnRBcmVhKSB7XG4gICAgICAgIGNvbnN0IGF4aXMgPSB0aGlzLmF4aXM7XG4gICAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgeyBncmlkICwgcG9zaXRpb24gLCBib3JkZXIgIH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBncmlkLm9mZnNldDtcbiAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gdGhpcy5pc0hvcml6b250YWwoKTtcbiAgICAgICAgY29uc3QgdGlja3MgPSB0aGlzLnRpY2tzO1xuICAgICAgICBjb25zdCB0aWNrc0xlbmd0aCA9IHRpY2tzLmxlbmd0aCArIChvZmZzZXQgPyAxIDogMCk7XG4gICAgICAgIGNvbnN0IHRsID0gZ2V0VGlja01hcmtMZW5ndGgoZ3JpZCk7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGNvbnN0IGJvcmRlck9wdHMgPSBib3JkZXIuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoKSk7XG4gICAgICAgIGNvbnN0IGF4aXNXaWR0aCA9IGJvcmRlck9wdHMuZGlzcGxheSA/IGJvcmRlck9wdHMud2lkdGggOiAwO1xuICAgICAgICBjb25zdCBheGlzSGFsZldpZHRoID0gYXhpc1dpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgYWxpZ25Cb3JkZXJWYWx1ZSA9IGZ1bmN0aW9uKHBpeGVsKSB7XG4gICAgICAgICAgICByZXR1cm4gX2FsaWduUGl4ZWwoY2hhcnQsIHBpeGVsLCBheGlzV2lkdGgpO1xuICAgICAgICB9O1xuICAgICAgICBsZXQgYm9yZGVyVmFsdWUsIGksIGxpbmVWYWx1ZSwgYWxpZ25lZExpbmVWYWx1ZTtcbiAgICAgICAgbGV0IHR4MSwgdHkxLCB0eDIsIHR5MiwgeDEsIHkxLCB4MiwgeTI7XG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgIGJvcmRlclZhbHVlID0gYWxpZ25Cb3JkZXJWYWx1ZSh0aGlzLmJvdHRvbSk7XG4gICAgICAgICAgICB0eTEgPSB0aGlzLmJvdHRvbSAtIHRsO1xuICAgICAgICAgICAgdHkyID0gYm9yZGVyVmFsdWUgLSBheGlzSGFsZldpZHRoO1xuICAgICAgICAgICAgeTEgPSBhbGlnbkJvcmRlclZhbHVlKGNoYXJ0QXJlYS50b3ApICsgYXhpc0hhbGZXaWR0aDtcbiAgICAgICAgICAgIHkyID0gY2hhcnRBcmVhLmJvdHRvbTtcbiAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgIGJvcmRlclZhbHVlID0gYWxpZ25Cb3JkZXJWYWx1ZSh0aGlzLnRvcCk7XG4gICAgICAgICAgICB5MSA9IGNoYXJ0QXJlYS50b3A7XG4gICAgICAgICAgICB5MiA9IGFsaWduQm9yZGVyVmFsdWUoY2hhcnRBcmVhLmJvdHRvbSkgLSBheGlzSGFsZldpZHRoO1xuICAgICAgICAgICAgdHkxID0gYm9yZGVyVmFsdWUgKyBheGlzSGFsZldpZHRoO1xuICAgICAgICAgICAgdHkyID0gdGhpcy50b3AgKyB0bDtcbiAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICBib3JkZXJWYWx1ZSA9IGFsaWduQm9yZGVyVmFsdWUodGhpcy5yaWdodCk7XG4gICAgICAgICAgICB0eDEgPSB0aGlzLnJpZ2h0IC0gdGw7XG4gICAgICAgICAgICB0eDIgPSBib3JkZXJWYWx1ZSAtIGF4aXNIYWxmV2lkdGg7XG4gICAgICAgICAgICB4MSA9IGFsaWduQm9yZGVyVmFsdWUoY2hhcnRBcmVhLmxlZnQpICsgYXhpc0hhbGZXaWR0aDtcbiAgICAgICAgICAgIHgyID0gY2hhcnRBcmVhLnJpZ2h0O1xuICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICBib3JkZXJWYWx1ZSA9IGFsaWduQm9yZGVyVmFsdWUodGhpcy5sZWZ0KTtcbiAgICAgICAgICAgIHgxID0gY2hhcnRBcmVhLmxlZnQ7XG4gICAgICAgICAgICB4MiA9IGFsaWduQm9yZGVyVmFsdWUoY2hhcnRBcmVhLnJpZ2h0KSAtIGF4aXNIYWxmV2lkdGg7XG4gICAgICAgICAgICB0eDEgPSBib3JkZXJWYWx1ZSArIGF4aXNIYWxmV2lkdGg7XG4gICAgICAgICAgICB0eDIgPSB0aGlzLmxlZnQgKyB0bDtcbiAgICAgICAgfSBlbHNlIGlmIChheGlzID09PSAneCcpIHtcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICBib3JkZXJWYWx1ZSA9IGFsaWduQm9yZGVyVmFsdWUoKGNoYXJ0QXJlYS50b3AgKyBjaGFydEFyZWEuYm90dG9tKSAvIDIgKyAwLjUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChwb3NpdGlvbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbkF4aXNJRCA9IE9iamVjdC5rZXlzKHBvc2l0aW9uKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBvc2l0aW9uW3Bvc2l0aW9uQXhpc0lEXTtcbiAgICAgICAgICAgICAgICBib3JkZXJWYWx1ZSA9IGFsaWduQm9yZGVyVmFsdWUodGhpcy5jaGFydC5zY2FsZXNbcG9zaXRpb25BeGlzSURdLmdldFBpeGVsRm9yVmFsdWUodmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHkxID0gY2hhcnRBcmVhLnRvcDtcbiAgICAgICAgICAgIHkyID0gY2hhcnRBcmVhLmJvdHRvbTtcbiAgICAgICAgICAgIHR5MSA9IGJvcmRlclZhbHVlICsgYXhpc0hhbGZXaWR0aDtcbiAgICAgICAgICAgIHR5MiA9IHR5MSArIHRsO1xuICAgICAgICB9IGVsc2UgaWYgKGF4aXMgPT09ICd5Jykge1xuICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgICAgIGJvcmRlclZhbHVlID0gYWxpZ25Cb3JkZXJWYWx1ZSgoY2hhcnRBcmVhLmxlZnQgKyBjaGFydEFyZWEucmlnaHQpIC8gMik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uQXhpc0lEID0gT2JqZWN0LmtleXMocG9zaXRpb24pWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcG9zaXRpb25bcG9zaXRpb25BeGlzSURdO1xuICAgICAgICAgICAgICAgIGJvcmRlclZhbHVlID0gYWxpZ25Cb3JkZXJWYWx1ZSh0aGlzLmNoYXJ0LnNjYWxlc1twb3NpdGlvbkF4aXNJRF0uZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHgxID0gYm9yZGVyVmFsdWUgLSBheGlzSGFsZldpZHRoO1xuICAgICAgICAgICAgdHgyID0gdHgxIC0gdGw7XG4gICAgICAgICAgICB4MSA9IGNoYXJ0QXJlYS5sZWZ0O1xuICAgICAgICAgICAgeDIgPSBjaGFydEFyZWEucmlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGltaXQgPSB2YWx1ZU9yRGVmYXVsdChvcHRpb25zLnRpY2tzLm1heFRpY2tzTGltaXQsIHRpY2tzTGVuZ3RoKTtcbiAgICAgICAgY29uc3Qgc3RlcCA9IE1hdGgubWF4KDEsIE1hdGguY2VpbCh0aWNrc0xlbmd0aCAvIGxpbWl0KSk7XG4gICAgICAgIGZvcihpID0gMDsgaSA8IHRpY2tzTGVuZ3RoOyBpICs9IHN0ZXApe1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dChpKTtcbiAgICAgICAgICAgIGNvbnN0IG9wdHNBdEluZGV4ID0gZ3JpZC5zZXRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgICAgICAgY29uc3Qgb3B0c0F0SW5kZXhCb3JkZXIgPSBib3JkZXIuc2V0Q29udGV4dChjb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVXaWR0aCA9IG9wdHNBdEluZGV4LmxpbmVXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVDb2xvciA9IG9wdHNBdEluZGV4LmNvbG9yO1xuICAgICAgICAgICAgY29uc3QgYm9yZGVyRGFzaCA9IG9wdHNBdEluZGV4Qm9yZGVyLmRhc2ggfHwgW107XG4gICAgICAgICAgICBjb25zdCBib3JkZXJEYXNoT2Zmc2V0ID0gb3B0c0F0SW5kZXhCb3JkZXIuZGFzaE9mZnNldDtcbiAgICAgICAgICAgIGNvbnN0IHRpY2tXaWR0aCA9IG9wdHNBdEluZGV4LnRpY2tXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHRpY2tDb2xvciA9IG9wdHNBdEluZGV4LnRpY2tDb2xvcjtcbiAgICAgICAgICAgIGNvbnN0IHRpY2tCb3JkZXJEYXNoID0gb3B0c0F0SW5kZXgudGlja0JvcmRlckRhc2ggfHwgW107XG4gICAgICAgICAgICBjb25zdCB0aWNrQm9yZGVyRGFzaE9mZnNldCA9IG9wdHNBdEluZGV4LnRpY2tCb3JkZXJEYXNoT2Zmc2V0O1xuICAgICAgICAgICAgbGluZVZhbHVlID0gZ2V0UGl4ZWxGb3JHcmlkTGluZSh0aGlzLCBpLCBvZmZzZXQpO1xuICAgICAgICAgICAgaWYgKGxpbmVWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbGlnbmVkTGluZVZhbHVlID0gX2FsaWduUGl4ZWwoY2hhcnQsIGxpbmVWYWx1ZSwgbGluZVdpZHRoKTtcbiAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAgICAgICB0eDEgPSB0eDIgPSB4MSA9IHgyID0gYWxpZ25lZExpbmVWYWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHkxID0gdHkyID0geTEgPSB5MiA9IGFsaWduZWRMaW5lVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eDEsXG4gICAgICAgICAgICAgICAgdHkxLFxuICAgICAgICAgICAgICAgIHR4MixcbiAgICAgICAgICAgICAgICB0eTIsXG4gICAgICAgICAgICAgICAgeDEsXG4gICAgICAgICAgICAgICAgeTEsXG4gICAgICAgICAgICAgICAgeDIsXG4gICAgICAgICAgICAgICAgeTIsXG4gICAgICAgICAgICAgICAgd2lkdGg6IGxpbmVXaWR0aCxcbiAgICAgICAgICAgICAgICBjb2xvcjogbGluZUNvbG9yLFxuICAgICAgICAgICAgICAgIGJvcmRlckRhc2gsXG4gICAgICAgICAgICAgICAgYm9yZGVyRGFzaE9mZnNldCxcbiAgICAgICAgICAgICAgICB0aWNrV2lkdGgsXG4gICAgICAgICAgICAgICAgdGlja0NvbG9yLFxuICAgICAgICAgICAgICAgIHRpY2tCb3JkZXJEYXNoLFxuICAgICAgICAgICAgICAgIHRpY2tCb3JkZXJEYXNoT2Zmc2V0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90aWNrc0xlbmd0aCA9IHRpY2tzTGVuZ3RoO1xuICAgICAgICB0aGlzLl9ib3JkZXJWYWx1ZSA9IGJvcmRlclZhbHVlO1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuIF9jb21wdXRlTGFiZWxJdGVtcyhjaGFydEFyZWEpIHtcbiAgICAgICAgY29uc3QgYXhpcyA9IHRoaXMuYXhpcztcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgeyBwb3NpdGlvbiAsIHRpY2tzOiBvcHRpb25UaWNrcyAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IHRoaXMuaXNIb3Jpem9udGFsKCk7XG4gICAgICAgIGNvbnN0IHRpY2tzID0gdGhpcy50aWNrcztcbiAgICAgICAgY29uc3QgeyBhbGlnbiAsIGNyb3NzQWxpZ24gLCBwYWRkaW5nICwgbWlycm9yICB9ID0gb3B0aW9uVGlja3M7XG4gICAgICAgIGNvbnN0IHRsID0gZ2V0VGlja01hcmtMZW5ndGgob3B0aW9ucy5ncmlkKTtcbiAgICAgICAgY29uc3QgdGlja0FuZFBhZGRpbmcgPSB0bCArIHBhZGRpbmc7XG4gICAgICAgIGNvbnN0IGhUaWNrQW5kUGFkZGluZyA9IG1pcnJvciA/IC1wYWRkaW5nIDogdGlja0FuZFBhZGRpbmc7XG4gICAgICAgIGNvbnN0IHJvdGF0aW9uID0gLXRvUmFkaWFucyh0aGlzLmxhYmVsUm90YXRpb24pO1xuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICBsZXQgaSwgaWxlbiwgdGljaywgbGFiZWwsIHgsIHksIHRleHRBbGlnbiwgcGl4ZWwsIGZvbnQsIGxpbmVIZWlnaHQsIGxpbmVDb3VudCwgdGV4dE9mZnNldDtcbiAgICAgICAgbGV0IHRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuICAgICAgICBpZiAocG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgICAgICB5ID0gdGhpcy5ib3R0b20gLSBoVGlja0FuZFBhZGRpbmc7XG4gICAgICAgICAgICB0ZXh0QWxpZ24gPSB0aGlzLl9nZXRYQXhpc0xhYmVsQWxpZ25tZW50KCk7XG4gICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgICB5ID0gdGhpcy50b3AgKyBoVGlja0FuZFBhZGRpbmc7XG4gICAgICAgICAgICB0ZXh0QWxpZ24gPSB0aGlzLl9nZXRYQXhpc0xhYmVsQWxpZ25tZW50KCk7XG4gICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gdGhpcy5fZ2V0WUF4aXNMYWJlbEFsaWdubWVudCh0bCk7XG4gICAgICAgICAgICB0ZXh0QWxpZ24gPSByZXQudGV4dEFsaWduO1xuICAgICAgICAgICAgeCA9IHJldC54O1xuICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICBjb25zdCByZXQgPSB0aGlzLl9nZXRZQXhpc0xhYmVsQWxpZ25tZW50KHRsKTtcbiAgICAgICAgICAgIHRleHRBbGlnbiA9IHJldC50ZXh0QWxpZ247XG4gICAgICAgICAgICB4ID0gcmV0Lng7XG4gICAgICAgIH0gZWxzZSBpZiAoYXhpcyA9PT0gJ3gnKSB7XG4gICAgICAgICAgICBpZiAocG9zaXRpb24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICAgICAgeSA9IChjaGFydEFyZWEudG9wICsgY2hhcnRBcmVhLmJvdHRvbSkgLyAyICsgdGlja0FuZFBhZGRpbmc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uQXhpc0lEID0gT2JqZWN0LmtleXMocG9zaXRpb24pWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcG9zaXRpb25bcG9zaXRpb25BeGlzSURdO1xuICAgICAgICAgICAgICAgIHkgPSB0aGlzLmNoYXJ0LnNjYWxlc1twb3NpdGlvbkF4aXNJRF0uZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZSkgKyB0aWNrQW5kUGFkZGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRleHRBbGlnbiA9IHRoaXMuX2dldFhBeGlzTGFiZWxBbGlnbm1lbnQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChheGlzID09PSAneScpIHtcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICB4ID0gKGNoYXJ0QXJlYS5sZWZ0ICsgY2hhcnRBcmVhLnJpZ2h0KSAvIDIgLSB0aWNrQW5kUGFkZGluZztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QocG9zaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb25BeGlzSUQgPSBPYmplY3Qua2V5cyhwb3NpdGlvbilbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwb3NpdGlvbltwb3NpdGlvbkF4aXNJRF07XG4gICAgICAgICAgICAgICAgeCA9IHRoaXMuY2hhcnQuc2NhbGVzW3Bvc2l0aW9uQXhpc0lEXS5nZXRQaXhlbEZvclZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRleHRBbGlnbiA9IHRoaXMuX2dldFlBeGlzTGFiZWxBbGlnbm1lbnQodGwpLnRleHRBbGlnbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXhpcyA9PT0gJ3knKSB7XG4gICAgICAgICAgICBpZiAoYWxpZ24gPT09ICdzdGFydCcpIHtcbiAgICAgICAgICAgICAgICB0ZXh0QmFzZWxpbmUgPSAndG9wJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxpZ24gPT09ICdlbmQnKSB7XG4gICAgICAgICAgICAgICAgdGV4dEJhc2VsaW5lID0gJ2JvdHRvbSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFiZWxTaXplcyA9IHRoaXMuX2dldExhYmVsU2l6ZXMoKTtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gdGlja3MubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIHRpY2sgPSB0aWNrc1tpXTtcbiAgICAgICAgICAgIGxhYmVsID0gdGljay5sYWJlbDtcbiAgICAgICAgICAgIGNvbnN0IG9wdHNBdEluZGV4ID0gb3B0aW9uVGlja3Muc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoaSkpO1xuICAgICAgICAgICAgcGl4ZWwgPSB0aGlzLmdldFBpeGVsRm9yVGljayhpKSArIG9wdGlvblRpY2tzLmxhYmVsT2Zmc2V0O1xuICAgICAgICAgICAgZm9udCA9IHRoaXMuX3Jlc29sdmVUaWNrRm9udE9wdGlvbnMoaSk7XG4gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gZm9udC5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgbGluZUNvdW50ID0gaXNBcnJheShsYWJlbCkgPyBsYWJlbC5sZW5ndGggOiAxO1xuICAgICAgICAgICAgY29uc3QgaGFsZkNvdW50ID0gbGluZUNvdW50IC8gMjtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gb3B0c0F0SW5kZXguY29sb3I7XG4gICAgICAgICAgICBjb25zdCBzdHJva2VDb2xvciA9IG9wdHNBdEluZGV4LnRleHRTdHJva2VDb2xvcjtcbiAgICAgICAgICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gb3B0c0F0SW5kZXgudGV4dFN0cm9rZVdpZHRoO1xuICAgICAgICAgICAgbGV0IHRpY2tUZXh0QWxpZ24gPSB0ZXh0QWxpZ247XG4gICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgeCA9IHBpeGVsO1xuICAgICAgICAgICAgICAgIGlmICh0ZXh0QWxpZ24gPT09ICdpbm5lcicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IGlsZW4gLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aWNrVGV4dEFsaWduID0gIXRoaXMub3B0aW9ucy5yZXZlcnNlID8gJ3JpZ2h0JyA6ICdsZWZ0JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aWNrVGV4dEFsaWduID0gIXRoaXMub3B0aW9ucy5yZXZlcnNlID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tUZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjcm9zc0FsaWduID09PSAnbmVhcicgfHwgcm90YXRpb24gIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQgPSAtbGluZUNvdW50ICogbGluZUhlaWdodCArIGxpbmVIZWlnaHQgLyAyO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNyb3NzQWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0ID0gLWxhYmVsU2l6ZXMuaGlnaGVzdC5oZWlnaHQgLyAyIC0gaGFsZkNvdW50ICogbGluZUhlaWdodCArIGxpbmVIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0ID0gLWxhYmVsU2l6ZXMuaGlnaGVzdC5oZWlnaHQgKyBsaW5lSGVpZ2h0IC8gMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjcm9zc0FsaWduID09PSAnbmVhcicgfHwgcm90YXRpb24gIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQgPSBsaW5lSGVpZ2h0IC8gMjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjcm9zc0FsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE9mZnNldCA9IGxhYmVsU2l6ZXMuaGlnaGVzdC5oZWlnaHQgLyAyIC0gaGFsZkNvdW50ICogbGluZUhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQgPSBsYWJlbFNpemVzLmhpZ2hlc3QuaGVpZ2h0IC0gbGluZUNvdW50ICogbGluZUhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobWlycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQgKj0gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyb3RhdGlvbiAhPT0gMCAmJiAhb3B0c0F0SW5kZXguc2hvd0xhYmVsQmFja2Ryb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgeCArPSBsaW5lSGVpZ2h0IC8gMiAqIE1hdGguc2luKHJvdGF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHkgPSBwaXhlbDtcbiAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0ID0gKDEgLSBsaW5lQ291bnQpICogbGluZUhlaWdodCAvIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgYmFja2Ryb3A7XG4gICAgICAgICAgICBpZiAob3B0c0F0SW5kZXguc2hvd0xhYmVsQmFja2Ryb3ApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbFBhZGRpbmcgPSB0b1BhZGRpbmcob3B0c0F0SW5kZXguYmFja2Ryb3BQYWRkaW5nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBsYWJlbFNpemVzLmhlaWdodHNbaV07XG4gICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBsYWJlbFNpemVzLndpZHRoc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgdG9wID0gdGV4dE9mZnNldCAtIGxhYmVsUGFkZGluZy50b3A7XG4gICAgICAgICAgICAgICAgbGV0IGxlZnQgPSAwIC0gbGFiZWxQYWRkaW5nLmxlZnQ7XG4gICAgICAgICAgICAgICAgc3dpdGNoKHRleHRCYXNlbGluZSl7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3AgLT0gaGVpZ2h0IC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wIC09IGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzd2l0Y2godGV4dEFsaWduKXtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgLT0gd2lkdGggLyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgLT0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5uZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IGlsZW4gLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCAtPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0IC09IHdpZHRoIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBiYWNrZHJvcCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGggKyBsYWJlbFBhZGRpbmcud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0ICsgbGFiZWxQYWRkaW5nLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IG9wdHNBdEluZGV4LmJhY2tkcm9wQ29sb3JcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgZm9udCxcbiAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0LFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgcm90YXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogdGlja1RleHRBbGlnbixcbiAgICAgICAgICAgICAgICAgICAgdGV4dEJhc2VsaW5lLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgYmFja2Ryb3BcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIF9nZXRYQXhpc0xhYmVsQWxpZ25tZW50KCkge1xuICAgICAgICBjb25zdCB7IHBvc2l0aW9uICwgdGlja3MgIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHJvdGF0aW9uID0gLXRvUmFkaWFucyh0aGlzLmxhYmVsUm90YXRpb24pO1xuICAgICAgICBpZiAocm90YXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiA9PT0gJ3RvcCcgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgICBpZiAodGlja3MuYWxpZ24gPT09ICdzdGFydCcpIHtcbiAgICAgICAgICAgIGFsaWduID0gJ2xlZnQnO1xuICAgICAgICB9IGVsc2UgaWYgKHRpY2tzLmFsaWduID09PSAnZW5kJykge1xuICAgICAgICAgICAgYWxpZ24gPSAncmlnaHQnO1xuICAgICAgICB9IGVsc2UgaWYgKHRpY2tzLmFsaWduID09PSAnaW5uZXInKSB7XG4gICAgICAgICAgICBhbGlnbiA9ICdpbm5lcic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFsaWduO1xuICAgIH1cbiAgICBfZ2V0WUF4aXNMYWJlbEFsaWdubWVudCh0bCkge1xuICAgICAgICBjb25zdCB7IHBvc2l0aW9uICwgdGlja3M6IHsgY3Jvc3NBbGlnbiAsIG1pcnJvciAsIHBhZGRpbmcgIH0gIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGxhYmVsU2l6ZXMgPSB0aGlzLl9nZXRMYWJlbFNpemVzKCk7XG4gICAgICAgIGNvbnN0IHRpY2tBbmRQYWRkaW5nID0gdGwgKyBwYWRkaW5nO1xuICAgICAgICBjb25zdCB3aWRlc3QgPSBsYWJlbFNpemVzLndpZGVzdC53aWR0aDtcbiAgICAgICAgbGV0IHRleHRBbGlnbjtcbiAgICAgICAgbGV0IHg7XG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICBpZiAobWlycm9yKSB7XG4gICAgICAgICAgICAgICAgeCA9IHRoaXMucmlnaHQgKyBwYWRkaW5nO1xuICAgICAgICAgICAgICAgIGlmIChjcm9zc0FsaWduID09PSAnbmVhcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduID0gJ2xlZnQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgICAgICAgICAgICAgIHggKz0gd2lkZXN0IC8gMjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24gPSAncmlnaHQnO1xuICAgICAgICAgICAgICAgICAgICB4ICs9IHdpZGVzdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHggPSB0aGlzLnJpZ2h0IC0gdGlja0FuZFBhZGRpbmc7XG4gICAgICAgICAgICAgICAgaWYgKGNyb3NzQWxpZ24gPT09ICduZWFyJykge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24gPSAncmlnaHQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgICAgICAgICAgICAgIHggLT0gd2lkZXN0IC8gMjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24gPSAnbGVmdCc7XG4gICAgICAgICAgICAgICAgICAgIHggPSB0aGlzLmxlZnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICBpZiAobWlycm9yKSB7XG4gICAgICAgICAgICAgICAgeCA9IHRoaXMubGVmdCArIHBhZGRpbmc7XG4gICAgICAgICAgICAgICAgaWYgKGNyb3NzQWxpZ24gPT09ICduZWFyJykge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24gPSAncmlnaHQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgICAgICAgICAgICAgIHggLT0gd2lkZXN0IC8gMjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24gPSAnbGVmdCc7XG4gICAgICAgICAgICAgICAgICAgIHggLT0gd2lkZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgeCA9IHRoaXMubGVmdCArIHRpY2tBbmRQYWRkaW5nO1xuICAgICAgICAgICAgICAgIGlmIChjcm9zc0FsaWduID09PSAnbmVhcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduID0gJ2xlZnQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgICAgICAgICAgICAgIHggKz0gd2lkZXN0IC8gMjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24gPSAncmlnaHQnO1xuICAgICAgICAgICAgICAgICAgICB4ID0gdGhpcy5yaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZXh0QWxpZ24gPSAncmlnaHQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0QWxpZ24sXG4gICAgICAgICAgICB4XG4gICAgICAgIH07XG4gICAgfVxuIF9jb21wdXRlTGFiZWxBcmVhKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRpY2tzLm1pcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLm9wdGlvbnMucG9zaXRpb247XG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ2xlZnQnIHx8IHBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLmxlZnQsXG4gICAgICAgICAgICAgICAgYm90dG9tOiBjaGFydC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgcmlnaHQ6IHRoaXMucmlnaHRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdG9wOiB0aGlzLnRvcCxcbiAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgIGJvdHRvbTogdGhpcy5ib3R0b20sXG4gICAgICAgICAgICAgICAgcmlnaHQ6IGNoYXJ0LndpZHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuIGRyYXdCYWNrZ3JvdW5kKCkge1xuICAgICAgICBjb25zdCB7IGN0eCAsIG9wdGlvbnM6IHsgYmFja2dyb3VuZENvbG9yICB9ICwgbGVmdCAsIHRvcCAsIHdpZHRoICwgaGVpZ2h0ICB9ID0gdGhpcztcbiAgICAgICAgaWYgKGJhY2tncm91bmRDb2xvcikge1xuICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgICAgICBjdHguZmlsbFJlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0TGluZVdpZHRoRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMub3B0aW9ucy5ncmlkO1xuICAgICAgICBpZiAoIXRoaXMuX2lzVmlzaWJsZSgpIHx8ICFncmlkLmRpc3BsYXkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRpY2tzID0gdGhpcy50aWNrcztcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aWNrcy5maW5kSW5kZXgoKHQpPT50LnZhbHVlID09PSB2YWx1ZSk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRzID0gZ3JpZC5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dChpbmRleCkpO1xuICAgICAgICAgICAgcmV0dXJuIG9wdHMubGluZVdpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiBkcmF3R3JpZChjaGFydEFyZWEpIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMub3B0aW9ucy5ncmlkO1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLl9ncmlkTGluZUl0ZW1zIHx8ICh0aGlzLl9ncmlkTGluZUl0ZW1zID0gdGhpcy5fY29tcHV0ZUdyaWRMaW5lSXRlbXMoY2hhcnRBcmVhKSk7XG4gICAgICAgIGxldCBpLCBpbGVuO1xuICAgICAgICBjb25zdCBkcmF3TGluZSA9IChwMSwgcDIsIHN0eWxlKT0+e1xuICAgICAgICAgICAgaWYgKCFzdHlsZS53aWR0aCB8fCAhc3R5bGUuY29sb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IHN0eWxlLndpZHRoO1xuICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3R5bGUuY29sb3I7XG4gICAgICAgICAgICBjdHguc2V0TGluZURhc2goc3R5bGUuYm9yZGVyRGFzaCB8fCBbXSk7XG4gICAgICAgICAgICBjdHgubGluZURhc2hPZmZzZXQgPSBzdHlsZS5ib3JkZXJEYXNoT2Zmc2V0O1xuICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY3R4Lm1vdmVUbyhwMS54LCBwMS55KTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8ocDIueCwgcDIueSk7XG4gICAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoZ3JpZC5kaXNwbGF5KSB7XG4gICAgICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JpZC5kcmF3T25DaGFydEFyZWEpIHtcbiAgICAgICAgICAgICAgICAgICAgZHJhd0xpbmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogaXRlbS54MSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGl0ZW0ueTFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogaXRlbS54MixcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGl0ZW0ueTJcbiAgICAgICAgICAgICAgICAgICAgfSwgaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChncmlkLmRyYXdUaWNrcykge1xuICAgICAgICAgICAgICAgICAgICBkcmF3TGluZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBpdGVtLnR4MSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGl0ZW0udHkxXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGl0ZW0udHgyLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogaXRlbS50eTJcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGl0ZW0udGlja0NvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGl0ZW0udGlja1dpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyRGFzaDogaXRlbS50aWNrQm9yZGVyRGFzaCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckRhc2hPZmZzZXQ6IGl0ZW0udGlja0JvcmRlckRhc2hPZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuIGRyYXdCb3JkZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgY2hhcnQgLCBjdHggLCBvcHRpb25zOiB7IGJvcmRlciAsIGdyaWQgIH0gIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBib3JkZXJPcHRzID0gYm9yZGVyLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpO1xuICAgICAgICBjb25zdCBheGlzV2lkdGggPSBib3JkZXIuZGlzcGxheSA/IGJvcmRlck9wdHMud2lkdGggOiAwO1xuICAgICAgICBpZiAoIWF4aXNXaWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3RMaW5lV2lkdGggPSBncmlkLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KDApKS5saW5lV2lkdGg7XG4gICAgICAgIGNvbnN0IGJvcmRlclZhbHVlID0gdGhpcy5fYm9yZGVyVmFsdWU7XG4gICAgICAgIGxldCB4MSwgeDIsIHkxLCB5MjtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICAgIHgxID0gX2FsaWduUGl4ZWwoY2hhcnQsIHRoaXMubGVmdCwgYXhpc1dpZHRoKSAtIGF4aXNXaWR0aCAvIDI7XG4gICAgICAgICAgICB4MiA9IF9hbGlnblBpeGVsKGNoYXJ0LCB0aGlzLnJpZ2h0LCBsYXN0TGluZVdpZHRoKSArIGxhc3RMaW5lV2lkdGggLyAyO1xuICAgICAgICAgICAgeTEgPSB5MiA9IGJvcmRlclZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeTEgPSBfYWxpZ25QaXhlbChjaGFydCwgdGhpcy50b3AsIGF4aXNXaWR0aCkgLSBheGlzV2lkdGggLyAyO1xuICAgICAgICAgICAgeTIgPSBfYWxpZ25QaXhlbChjaGFydCwgdGhpcy5ib3R0b20sIGxhc3RMaW5lV2lkdGgpICsgbGFzdExpbmVXaWR0aCAvIDI7XG4gICAgICAgICAgICB4MSA9IHgyID0gYm9yZGVyVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGJvcmRlck9wdHMud2lkdGg7XG4gICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGJvcmRlck9wdHMuY29sb3I7XG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgY3R4Lm1vdmVUbyh4MSwgeTEpO1xuICAgICAgICBjdHgubGluZVRvKHgyLCB5Mik7XG4gICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICB9XG4gZHJhd0xhYmVscyhjaGFydEFyZWEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uVGlja3MgPSB0aGlzLm9wdGlvbnMudGlja3M7XG4gICAgICAgIGlmICghb3B0aW9uVGlja3MuZGlzcGxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICBjb25zdCBhcmVhID0gdGhpcy5fY29tcHV0ZUxhYmVsQXJlYSgpO1xuICAgICAgICBpZiAoYXJlYSkge1xuICAgICAgICAgICAgY2xpcEFyZWEoY3R4LCBhcmVhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0TGFiZWxJdGVtcyhjaGFydEFyZWEpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpe1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyVGV4dE9wdGlvbnMgPSBpdGVtLm9wdGlvbnM7XG4gICAgICAgICAgICBjb25zdCB0aWNrRm9udCA9IGl0ZW0uZm9udDtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbS5sYWJlbDtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBpdGVtLnRleHRPZmZzZXQ7XG4gICAgICAgICAgICByZW5kZXJUZXh0KGN0eCwgbGFiZWwsIDAsIHksIHRpY2tGb250LCByZW5kZXJUZXh0T3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZWEpIHtcbiAgICAgICAgICAgIHVuY2xpcEFyZWEoY3R4KTtcbiAgICAgICAgfVxuICAgIH1cbiBkcmF3VGl0bGUoKSB7XG4gICAgICAgIGNvbnN0IHsgY3R4ICwgb3B0aW9uczogeyBwb3NpdGlvbiAsIHRpdGxlICwgcmV2ZXJzZSAgfSAgfSA9IHRoaXM7XG4gICAgICAgIGlmICghdGl0bGUuZGlzcGxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvbnQgPSB0b0ZvbnQodGl0bGUuZm9udCk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSB0b1BhZGRpbmcodGl0bGUucGFkZGluZyk7XG4gICAgICAgIGNvbnN0IGFsaWduID0gdGl0bGUuYWxpZ247XG4gICAgICAgIGxldCBvZmZzZXQgPSBmb250LmxpbmVIZWlnaHQgLyAyO1xuICAgICAgICBpZiAocG9zaXRpb24gPT09ICdib3R0b20nIHx8IHBvc2l0aW9uID09PSAnY2VudGVyJyB8fCBpc09iamVjdChwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIG9mZnNldCArPSBwYWRkaW5nLmJvdHRvbTtcbiAgICAgICAgICAgIGlmIChpc0FycmF5KHRpdGxlLnRleHQpKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGZvbnQubGluZUhlaWdodCAqICh0aXRsZS50ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2Zmc2V0ICs9IHBhZGRpbmcudG9wO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgdGl0bGVYICwgdGl0bGVZICwgbWF4V2lkdGggLCByb3RhdGlvbiAgfSA9IHRpdGxlQXJncyh0aGlzLCBvZmZzZXQsIHBvc2l0aW9uLCBhbGlnbik7XG4gICAgICAgIHJlbmRlclRleHQoY3R4LCB0aXRsZS50ZXh0LCAwLCAwLCBmb250LCB7XG4gICAgICAgICAgICBjb2xvcjogdGl0bGUuY29sb3IsXG4gICAgICAgICAgICBtYXhXaWR0aCxcbiAgICAgICAgICAgIHJvdGF0aW9uLFxuICAgICAgICAgICAgdGV4dEFsaWduOiB0aXRsZUFsaWduKGFsaWduLCBwb3NpdGlvbiwgcmV2ZXJzZSksXG4gICAgICAgICAgICB0ZXh0QmFzZWxpbmU6ICdtaWRkbGUnLFxuICAgICAgICAgICAgdHJhbnNsYXRpb246IFtcbiAgICAgICAgICAgICAgICB0aXRsZVgsXG4gICAgICAgICAgICAgICAgdGl0bGVZXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkcmF3KGNoYXJ0QXJlYSkge1xuICAgICAgICBpZiAoIXRoaXMuX2lzVmlzaWJsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kcmF3QmFja2dyb3VuZCgpO1xuICAgICAgICB0aGlzLmRyYXdHcmlkKGNoYXJ0QXJlYSk7XG4gICAgICAgIHRoaXMuZHJhd0JvcmRlcigpO1xuICAgICAgICB0aGlzLmRyYXdUaXRsZSgpO1xuICAgICAgICB0aGlzLmRyYXdMYWJlbHMoY2hhcnRBcmVhKTtcbiAgICB9XG4gX2xheWVycygpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgdHogPSBvcHRzLnRpY2tzICYmIG9wdHMudGlja3MueiB8fCAwO1xuICAgICAgICBjb25zdCBneiA9IHZhbHVlT3JEZWZhdWx0KG9wdHMuZ3JpZCAmJiBvcHRzLmdyaWQueiwgLTEpO1xuICAgICAgICBjb25zdCBieiA9IHZhbHVlT3JEZWZhdWx0KG9wdHMuYm9yZGVyICYmIG9wdHMuYm9yZGVyLnosIDApO1xuICAgICAgICBpZiAoIXRoaXMuX2lzVmlzaWJsZSgpIHx8IHRoaXMuZHJhdyAhPT0gU2NhbGUucHJvdG90eXBlLmRyYXcpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB6OiB0eixcbiAgICAgICAgICAgICAgICAgICAgZHJhdzogKGNoYXJ0QXJlYSk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhdyhjaGFydEFyZWEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHo6IGd6LFxuICAgICAgICAgICAgICAgIGRyYXc6IChjaGFydEFyZWEpPT57XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd0JhY2tncm91bmQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3R3JpZChjaGFydEFyZWEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdUaXRsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgejogYnosXG4gICAgICAgICAgICAgICAgZHJhdzogKCk9PntcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3Qm9yZGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB6OiB0eixcbiAgICAgICAgICAgICAgICBkcmF3OiAoY2hhcnRBcmVhKT0+e1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdMYWJlbHMoY2hhcnRBcmVhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgfVxuIGdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKHR5cGUpIHtcbiAgICAgICAgY29uc3QgbWV0YXMgPSB0aGlzLmNoYXJ0LmdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMoKTtcbiAgICAgICAgY29uc3QgYXhpc0lEID0gdGhpcy5heGlzICsgJ0F4aXNJRCc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBsZXQgaSwgaWxlbjtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gbWV0YXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IG1ldGEgPSBtZXRhc1tpXTtcbiAgICAgICAgICAgIGlmIChtZXRhW2F4aXNJRF0gPT09IHRoaXMuaWQgJiYgKCF0eXBlIHx8IG1ldGEudHlwZSA9PT0gdHlwZSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChtZXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiBfcmVzb2x2ZVRpY2tGb250T3B0aW9ucyhpbmRleCkge1xuICAgICAgICBjb25zdCBvcHRzID0gdGhpcy5vcHRpb25zLnRpY2tzLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KGluZGV4KSk7XG4gICAgICAgIHJldHVybiB0b0ZvbnQob3B0cy5mb250KTtcbiAgICB9XG4gX21heERpZ2l0cygpIHtcbiAgICAgICAgY29uc3QgZm9udFNpemUgPSB0aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKDApLmxpbmVIZWlnaHQ7XG4gICAgICAgIHJldHVybiAodGhpcy5pc0hvcml6b250YWwoKSA/IHRoaXMud2lkdGggOiB0aGlzLmhlaWdodCkgLyBmb250U2l6ZTtcbiAgICB9XG59XG5cbmNsYXNzIFR5cGVkUmVnaXN0cnkge1xuICAgIGNvbnN0cnVjdG9yKHR5cGUsIHNjb3BlLCBvdmVycmlkZSl7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICAgICAgdGhpcy5vdmVycmlkZSA9IG92ZXJyaWRlO1xuICAgICAgICB0aGlzLml0ZW1zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG4gICAgaXNGb3JUeXBlKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZi5jYWxsKHRoaXMudHlwZS5wcm90b3R5cGUsIHR5cGUucHJvdG90eXBlKTtcbiAgICB9XG4gcmVnaXN0ZXIoaXRlbSkge1xuICAgICAgICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihpdGVtKTtcbiAgICAgICAgbGV0IHBhcmVudFNjb3BlO1xuICAgICAgICBpZiAoaXNJQ2hhcnRDb21wb25lbnQocHJvdG8pKSB7XG4gICAgICAgICAgICBwYXJlbnRTY29wZSA9IHRoaXMucmVnaXN0ZXIocHJvdG8pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICAgICAgY29uc3QgaWQgPSBpdGVtLmlkO1xuICAgICAgICBjb25zdCBzY29wZSA9IHRoaXMuc2NvcGUgKyAnLicgKyBpZDtcbiAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjbGFzcyBkb2VzIG5vdCBoYXZlIGlkOiAnICsgaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkIGluIGl0ZW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NvcGU7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbXNbaWRdID0gaXRlbTtcbiAgICAgICAgcmVnaXN0ZXJEZWZhdWx0cyhpdGVtLCBzY29wZSwgcGFyZW50U2NvcGUpO1xuICAgICAgICBpZiAodGhpcy5vdmVycmlkZSkge1xuICAgICAgICAgICAgZGVmYXVsdHMub3ZlcnJpZGUoaXRlbS5pZCwgaXRlbS5vdmVycmlkZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY29wZTtcbiAgICB9XG4gZ2V0KGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zW2lkXTtcbiAgICB9XG4gdW5yZWdpc3RlcihpdGVtKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICAgICAgY29uc3QgaWQgPSBpdGVtLmlkO1xuICAgICAgICBjb25zdCBzY29wZSA9IHRoaXMuc2NvcGU7XG4gICAgICAgIGlmIChpZCBpbiBpdGVtcykge1xuICAgICAgICAgICAgZGVsZXRlIGl0ZW1zW2lkXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NvcGUgJiYgaWQgaW4gZGVmYXVsdHNbc2NvcGVdKSB7XG4gICAgICAgICAgICBkZWxldGUgZGVmYXVsdHNbc2NvcGVdW2lkXTtcbiAgICAgICAgICAgIGlmICh0aGlzLm92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG92ZXJyaWRlc1tpZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiByZWdpc3RlckRlZmF1bHRzKGl0ZW0sIHNjb3BlLCBwYXJlbnRTY29wZSkge1xuICAgIGNvbnN0IGl0ZW1EZWZhdWx0cyA9IG1lcmdlKE9iamVjdC5jcmVhdGUobnVsbCksIFtcbiAgICAgICAgcGFyZW50U2NvcGUgPyBkZWZhdWx0cy5nZXQocGFyZW50U2NvcGUpIDoge30sXG4gICAgICAgIGRlZmF1bHRzLmdldChzY29wZSksXG4gICAgICAgIGl0ZW0uZGVmYXVsdHNcbiAgICBdKTtcbiAgICBkZWZhdWx0cy5zZXQoc2NvcGUsIGl0ZW1EZWZhdWx0cyk7XG4gICAgaWYgKGl0ZW0uZGVmYXVsdFJvdXRlcykge1xuICAgICAgICByb3V0ZURlZmF1bHRzKHNjb3BlLCBpdGVtLmRlZmF1bHRSb3V0ZXMpO1xuICAgIH1cbiAgICBpZiAoaXRlbS5kZXNjcmlwdG9ycykge1xuICAgICAgICBkZWZhdWx0cy5kZXNjcmliZShzY29wZSwgaXRlbS5kZXNjcmlwdG9ycyk7XG4gICAgfVxufVxuZnVuY3Rpb24gcm91dGVEZWZhdWx0cyhzY29wZSwgcm91dGVzKSB7XG4gICAgT2JqZWN0LmtleXMocm91dGVzKS5mb3JFYWNoKChwcm9wZXJ0eSk9PntcbiAgICAgICAgY29uc3QgcHJvcGVydHlQYXJ0cyA9IHByb3BlcnR5LnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IHNvdXJjZU5hbWUgPSBwcm9wZXJ0eVBhcnRzLnBvcCgpO1xuICAgICAgICBjb25zdCBzb3VyY2VTY29wZSA9IFtcbiAgICAgICAgICAgIHNjb3BlXG4gICAgICAgIF0uY29uY2F0KHByb3BlcnR5UGFydHMpLmpvaW4oJy4nKTtcbiAgICAgICAgY29uc3QgcGFydHMgPSByb3V0ZXNbcHJvcGVydHldLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWUgPSBwYXJ0cy5wb3AoKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0U2NvcGUgPSBwYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgIGRlZmF1bHRzLnJvdXRlKHNvdXJjZVNjb3BlLCBzb3VyY2VOYW1lLCB0YXJnZXRTY29wZSwgdGFyZ2V0TmFtZSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBpc0lDaGFydENvbXBvbmVudChwcm90bykge1xuICAgIHJldHVybiAnaWQnIGluIHByb3RvICYmICdkZWZhdWx0cycgaW4gcHJvdG87XG59XG5cbmNsYXNzIFJlZ2lzdHJ5IHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzID0gbmV3IFR5cGVkUmVnaXN0cnkoRGF0YXNldENvbnRyb2xsZXIsICdkYXRhc2V0cycsIHRydWUpO1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0gbmV3IFR5cGVkUmVnaXN0cnkoRWxlbWVudCwgJ2VsZW1lbnRzJyk7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG5ldyBUeXBlZFJlZ2lzdHJ5KE9iamVjdCwgJ3BsdWdpbnMnKTtcbiAgICAgICAgdGhpcy5zY2FsZXMgPSBuZXcgVHlwZWRSZWdpc3RyeShTY2FsZSwgJ3NjYWxlcycpO1xuICAgICAgICB0aGlzLl90eXBlZFJlZ2lzdHJpZXMgPSBbXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzLFxuICAgICAgICAgICAgdGhpcy5zY2FsZXMsXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzXG4gICAgICAgIF07XG4gICAgfVxuIGFkZCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VhY2goJ3JlZ2lzdGVyJywgYXJncyk7XG4gICAgfVxuICAgIHJlbW92ZSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VhY2goJ3VucmVnaXN0ZXInLCBhcmdzKTtcbiAgICB9XG4gYWRkQ29udHJvbGxlcnMoLi4uYXJncykge1xuICAgICAgICB0aGlzLl9lYWNoKCdyZWdpc3RlcicsIGFyZ3MsIHRoaXMuY29udHJvbGxlcnMpO1xuICAgIH1cbiBhZGRFbGVtZW50cyguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VhY2goJ3JlZ2lzdGVyJywgYXJncywgdGhpcy5lbGVtZW50cyk7XG4gICAgfVxuIGFkZFBsdWdpbnMoLi4uYXJncykge1xuICAgICAgICB0aGlzLl9lYWNoKCdyZWdpc3RlcicsIGFyZ3MsIHRoaXMucGx1Z2lucyk7XG4gICAgfVxuIGFkZFNjYWxlcyguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VhY2goJ3JlZ2lzdGVyJywgYXJncywgdGhpcy5zY2FsZXMpO1xuICAgIH1cbiBnZXRDb250cm9sbGVyKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXQoaWQsIHRoaXMuY29udHJvbGxlcnMsICdjb250cm9sbGVyJyk7XG4gICAgfVxuIGdldEVsZW1lbnQoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldChpZCwgdGhpcy5lbGVtZW50cywgJ2VsZW1lbnQnKTtcbiAgICB9XG4gZ2V0UGx1Z2luKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXQoaWQsIHRoaXMucGx1Z2lucywgJ3BsdWdpbicpO1xuICAgIH1cbiBnZXRTY2FsZShpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0KGlkLCB0aGlzLnNjYWxlcywgJ3NjYWxlJyk7XG4gICAgfVxuIHJlbW92ZUNvbnRyb2xsZXJzKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5fZWFjaCgndW5yZWdpc3RlcicsIGFyZ3MsIHRoaXMuY29udHJvbGxlcnMpO1xuICAgIH1cbiByZW1vdmVFbGVtZW50cyguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VhY2goJ3VucmVnaXN0ZXInLCBhcmdzLCB0aGlzLmVsZW1lbnRzKTtcbiAgICB9XG4gcmVtb3ZlUGx1Z2lucyguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VhY2goJ3VucmVnaXN0ZXInLCBhcmdzLCB0aGlzLnBsdWdpbnMpO1xuICAgIH1cbiByZW1vdmVTY2FsZXMoLi4uYXJncykge1xuICAgICAgICB0aGlzLl9lYWNoKCd1bnJlZ2lzdGVyJywgYXJncywgdGhpcy5zY2FsZXMpO1xuICAgIH1cbiBfZWFjaChtZXRob2QsIGFyZ3MsIHR5cGVkUmVnaXN0cnkpIHtcbiAgICAgICAgW1xuICAgICAgICAgICAgLi4uYXJnc1xuICAgICAgICBdLmZvckVhY2goKGFyZyk9PntcbiAgICAgICAgICAgIGNvbnN0IHJlZyA9IHR5cGVkUmVnaXN0cnkgfHwgdGhpcy5fZ2V0UmVnaXN0cnlGb3JUeXBlKGFyZyk7XG4gICAgICAgICAgICBpZiAodHlwZWRSZWdpc3RyeSB8fCByZWcuaXNGb3JUeXBlKGFyZykgfHwgcmVnID09PSB0aGlzLnBsdWdpbnMgJiYgYXJnLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXhlYyhtZXRob2QsIHJlZywgYXJnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWFjaChhcmcsIChpdGVtKT0+e1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtUmVnID0gdHlwZWRSZWdpc3RyeSB8fCB0aGlzLl9nZXRSZWdpc3RyeUZvclR5cGUoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2V4ZWMobWV0aG9kLCBpdGVtUmVnLCBpdGVtKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuIF9leGVjKG1ldGhvZCwgcmVnaXN0cnksIGNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBjYW1lbE1ldGhvZCA9IF9jYXBpdGFsaXplKG1ldGhvZCk7XG4gICAgICAgIGNhbGxiYWNrKGNvbXBvbmVudFsnYmVmb3JlJyArIGNhbWVsTWV0aG9kXSwgW10sIGNvbXBvbmVudCk7XG4gICAgICAgIHJlZ2lzdHJ5W21ldGhvZF0oY29tcG9uZW50KTtcbiAgICAgICAgY2FsbGJhY2soY29tcG9uZW50WydhZnRlcicgKyBjYW1lbE1ldGhvZF0sIFtdLCBjb21wb25lbnQpO1xuICAgIH1cbiBfZ2V0UmVnaXN0cnlGb3JUeXBlKHR5cGUpIHtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRoaXMuX3R5cGVkUmVnaXN0cmllcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBjb25zdCByZWcgPSB0aGlzLl90eXBlZFJlZ2lzdHJpZXNbaV07XG4gICAgICAgICAgICBpZiAocmVnLmlzRm9yVHlwZSh0eXBlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGx1Z2lucztcbiAgICB9XG4gX2dldChpZCwgdHlwZWRSZWdpc3RyeSwgdHlwZSkge1xuICAgICAgICBjb25zdCBpdGVtID0gdHlwZWRSZWdpc3RyeS5nZXQoaWQpO1xuICAgICAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGlkICsgJ1wiIGlzIG5vdCBhIHJlZ2lzdGVyZWQgJyArIHR5cGUgKyAnLicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbn1cbnZhciByZWdpc3RyeSA9IC8qICNfX1BVUkVfXyAqLyBuZXcgUmVnaXN0cnkoKTtcblxuY2xhc3MgUGx1Z2luU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5faW5pdCA9IFtdO1xuICAgIH1cbiBub3RpZnkoY2hhcnQsIGhvb2ssIGFyZ3MsIGZpbHRlcikge1xuICAgICAgICBpZiAoaG9vayA9PT0gJ2JlZm9yZUluaXQnKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0ID0gdGhpcy5fY3JlYXRlRGVzY3JpcHRvcnMoY2hhcnQsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5fbm90aWZ5KHRoaXMuX2luaXQsIGNoYXJ0LCAnaW5zdGFsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3JzID0gZmlsdGVyID8gdGhpcy5fZGVzY3JpcHRvcnMoY2hhcnQpLmZpbHRlcihmaWx0ZXIpIDogdGhpcy5fZGVzY3JpcHRvcnMoY2hhcnQpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9ub3RpZnkoZGVzY3JpcHRvcnMsIGNoYXJ0LCBob29rLCBhcmdzKTtcbiAgICAgICAgaWYgKGhvb2sgPT09ICdhZnRlckRlc3Ryb3knKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkoZGVzY3JpcHRvcnMsIGNoYXJ0LCAnc3RvcCcpO1xuICAgICAgICAgICAgdGhpcy5fbm90aWZ5KHRoaXMuX2luaXQsIGNoYXJ0LCAndW5pbnN0YWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gX25vdGlmeShkZXNjcmlwdG9ycywgY2hhcnQsIGhvb2ssIGFyZ3MpIHtcbiAgICAgICAgYXJncyA9IGFyZ3MgfHwge307XG4gICAgICAgIGZvciAoY29uc3QgZGVzY3JpcHRvciBvZiBkZXNjcmlwdG9ycyl7XG4gICAgICAgICAgICBjb25zdCBwbHVnaW4gPSBkZXNjcmlwdG9yLnBsdWdpbjtcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IHBsdWdpbltob29rXTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IFtcbiAgICAgICAgICAgICAgICBjaGFydCxcbiAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iub3B0aW9uc1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayhtZXRob2QsIHBhcmFtcywgcGx1Z2luKSA9PT0gZmFsc2UgJiYgYXJncy5jYW5jZWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpbnZhbGlkYXRlKCkge1xuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYodGhpcy5fY2FjaGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9vbGRDYWNoZSA9IHRoaXMuX2NhY2hlO1xuICAgICAgICAgICAgdGhpcy5fY2FjaGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gX2Rlc2NyaXB0b3JzKGNoYXJ0KSB7XG4gICAgICAgIGlmICh0aGlzLl9jYWNoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3JzID0gdGhpcy5fY2FjaGUgPSB0aGlzLl9jcmVhdGVEZXNjcmlwdG9ycyhjaGFydCk7XG4gICAgICAgIHRoaXMuX25vdGlmeVN0YXRlQ2hhbmdlcyhjaGFydCk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9ycztcbiAgICB9XG4gICAgX2NyZWF0ZURlc2NyaXB0b3JzKGNoYXJ0LCBhbGwpIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gY2hhcnQgJiYgY2hhcnQuY29uZmlnO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdmFsdWVPckRlZmF1bHQoY29uZmlnLm9wdGlvbnMgJiYgY29uZmlnLm9wdGlvbnMucGx1Z2lucywge30pO1xuICAgICAgICBjb25zdCBwbHVnaW5zID0gYWxsUGx1Z2lucyhjb25maWcpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucyA9PT0gZmFsc2UgJiYgIWFsbCA/IFtdIDogY3JlYXRlRGVzY3JpcHRvcnMoY2hhcnQsIHBsdWdpbnMsIG9wdGlvbnMsIGFsbCk7XG4gICAgfVxuIF9ub3RpZnlTdGF0ZUNoYW5nZXMoY2hhcnQpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNEZXNjcmlwdG9ycyA9IHRoaXMuX29sZENhY2hlIHx8IFtdO1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9ycyA9IHRoaXMuX2NhY2hlO1xuICAgICAgICBjb25zdCBkaWZmID0gKGEsIGIpPT5hLmZpbHRlcigoeCk9PiFiLnNvbWUoKHkpPT54LnBsdWdpbi5pZCA9PT0geS5wbHVnaW4uaWQpKTtcbiAgICAgICAgdGhpcy5fbm90aWZ5KGRpZmYocHJldmlvdXNEZXNjcmlwdG9ycywgZGVzY3JpcHRvcnMpLCBjaGFydCwgJ3N0b3AnKTtcbiAgICAgICAgdGhpcy5fbm90aWZ5KGRpZmYoZGVzY3JpcHRvcnMsIHByZXZpb3VzRGVzY3JpcHRvcnMpLCBjaGFydCwgJ3N0YXJ0Jyk7XG4gICAgfVxufVxuIGZ1bmN0aW9uIGFsbFBsdWdpbnMoY29uZmlnKSB7XG4gICAgY29uc3QgbG9jYWxJZHMgPSB7fTtcbiAgICBjb25zdCBwbHVnaW5zID0gW107XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJlZ2lzdHJ5LnBsdWdpbnMuaXRlbXMpO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgcGx1Z2lucy5wdXNoKHJlZ2lzdHJ5LmdldFBsdWdpbihrZXlzW2ldKSk7XG4gICAgfVxuICAgIGNvbnN0IGxvY2FsID0gY29uZmlnLnBsdWdpbnMgfHwgW107XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGxvY2FsLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gbG9jYWxbaV07XG4gICAgICAgIGlmIChwbHVnaW5zLmluZGV4T2YocGx1Z2luKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHBsdWdpbnMucHVzaChwbHVnaW4pO1xuICAgICAgICAgICAgbG9jYWxJZHNbcGx1Z2luLmlkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcGx1Z2lucyxcbiAgICAgICAgbG9jYWxJZHNcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0T3B0cyhvcHRpb25zLCBhbGwpIHtcbiAgICBpZiAoIWFsbCAmJiBvcHRpb25zID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbn1cbmZ1bmN0aW9uIGNyZWF0ZURlc2NyaXB0b3JzKGNoYXJ0LCB7IHBsdWdpbnMgLCBsb2NhbElkcyAgfSwgb3B0aW9ucywgYWxsKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgY29uc3QgY29udGV4dCA9IGNoYXJ0LmdldENvbnRleHQoKTtcbiAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBwbHVnaW5zKXtcbiAgICAgICAgY29uc3QgaWQgPSBwbHVnaW4uaWQ7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBnZXRPcHRzKG9wdGlvbnNbaWRdLCBhbGwpO1xuICAgICAgICBpZiAob3B0cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgcGx1Z2luLFxuICAgICAgICAgICAgb3B0aW9uczogcGx1Z2luT3B0cyhjaGFydC5jb25maWcsIHtcbiAgICAgICAgICAgICAgICBwbHVnaW4sXG4gICAgICAgICAgICAgICAgbG9jYWw6IGxvY2FsSWRzW2lkXVxuICAgICAgICAgICAgfSwgb3B0cywgY29udGV4dClcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBwbHVnaW5PcHRzKGNvbmZpZywgeyBwbHVnaW4gLCBsb2NhbCAgfSwgb3B0cywgY29udGV4dCkge1xuICAgIGNvbnN0IGtleXMgPSBjb25maWcucGx1Z2luU2NvcGVLZXlzKHBsdWdpbik7XG4gICAgY29uc3Qgc2NvcGVzID0gY29uZmlnLmdldE9wdGlvblNjb3BlcyhvcHRzLCBrZXlzKTtcbiAgICBpZiAobG9jYWwgJiYgcGx1Z2luLmRlZmF1bHRzKSB7XG4gICAgICAgIHNjb3Blcy5wdXNoKHBsdWdpbi5kZWZhdWx0cyk7XG4gICAgfVxuICAgIHJldHVybiBjb25maWcuY3JlYXRlUmVzb2x2ZXIoc2NvcGVzLCBjb250ZXh0LCBbXG4gICAgICAgICcnXG4gICAgXSwge1xuICAgICAgICBzY3JpcHRhYmxlOiBmYWxzZSxcbiAgICAgICAgaW5kZXhhYmxlOiBmYWxzZSxcbiAgICAgICAgYWxsS2V5czogdHJ1ZVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRJbmRleEF4aXModHlwZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRhdGFzZXREZWZhdWx0cyA9IGRlZmF1bHRzLmRhdGFzZXRzW3R5cGVdIHx8IHt9O1xuICAgIGNvbnN0IGRhdGFzZXRPcHRpb25zID0gKG9wdGlvbnMuZGF0YXNldHMgfHwge30pW3R5cGVdIHx8IHt9O1xuICAgIHJldHVybiBkYXRhc2V0T3B0aW9ucy5pbmRleEF4aXMgfHwgb3B0aW9ucy5pbmRleEF4aXMgfHwgZGF0YXNldERlZmF1bHRzLmluZGV4QXhpcyB8fCAneCc7XG59XG5mdW5jdGlvbiBnZXRBeGlzRnJvbURlZmF1bHRTY2FsZUlEKGlkLCBpbmRleEF4aXMpIHtcbiAgICBsZXQgYXhpcyA9IGlkO1xuICAgIGlmIChpZCA9PT0gJ19pbmRleF8nKSB7XG4gICAgICAgIGF4aXMgPSBpbmRleEF4aXM7XG4gICAgfSBlbHNlIGlmIChpZCA9PT0gJ192YWx1ZV8nKSB7XG4gICAgICAgIGF4aXMgPSBpbmRleEF4aXMgPT09ICd4JyA/ICd5JyA6ICd4JztcbiAgICB9XG4gICAgcmV0dXJuIGF4aXM7XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0U2NhbGVJREZyb21BeGlzKGF4aXMsIGluZGV4QXhpcykge1xuICAgIHJldHVybiBheGlzID09PSBpbmRleEF4aXMgPyAnX2luZGV4XycgOiAnX3ZhbHVlXyc7XG59XG5mdW5jdGlvbiBpZE1hdGNoZXNBeGlzKGlkKSB7XG4gICAgaWYgKGlkID09PSAneCcgfHwgaWQgPT09ICd5JyB8fCBpZCA9PT0gJ3InKSB7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG59XG5mdW5jdGlvbiBheGlzRnJvbVBvc2l0aW9uKHBvc2l0aW9uKSB7XG4gICAgaWYgKHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgcmV0dXJuICd4JztcbiAgICB9XG4gICAgaWYgKHBvc2l0aW9uID09PSAnbGVmdCcgfHwgcG9zaXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgcmV0dXJuICd5JztcbiAgICB9XG59XG5mdW5jdGlvbiBkZXRlcm1pbmVBeGlzKGlkLCAuLi5zY2FsZU9wdGlvbnMpIHtcbiAgICBpZiAoaWRNYXRjaGVzQXhpcyhpZCkpIHtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IG9wdHMgb2Ygc2NhbGVPcHRpb25zKXtcbiAgICAgICAgY29uc3QgYXhpcyA9IG9wdHMuYXhpcyB8fCBheGlzRnJvbVBvc2l0aW9uKG9wdHMucG9zaXRpb24pIHx8IGlkLmxlbmd0aCA+IDEgJiYgaWRNYXRjaGVzQXhpcyhpZFswXS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKGF4aXMpIHtcbiAgICAgICAgICAgIHJldHVybiBheGlzO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGRldGVybWluZSB0eXBlIG9mICcke2lkfScgYXhpcy4gUGxlYXNlIHByb3ZpZGUgJ2F4aXMnIG9yICdwb3NpdGlvbicgb3B0aW9uLmApO1xufVxuZnVuY3Rpb24gZ2V0QXhpc0Zyb21EYXRhc2V0KGlkLCBheGlzLCBkYXRhc2V0KSB7XG4gICAgaWYgKGRhdGFzZXRbYXhpcyArICdBeGlzSUQnXSA9PT0gaWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF4aXNcbiAgICAgICAgfTtcbiAgICB9XG59XG5mdW5jdGlvbiByZXRyaWV2ZUF4aXNGcm9tRGF0YXNldHMoaWQsIGNvbmZpZykge1xuICAgIGlmIChjb25maWcuZGF0YSAmJiBjb25maWcuZGF0YS5kYXRhc2V0cykge1xuICAgICAgICBjb25zdCBib3VuZERzID0gY29uZmlnLmRhdGEuZGF0YXNldHMuZmlsdGVyKChkKT0+ZC54QXhpc0lEID09PSBpZCB8fCBkLnlBeGlzSUQgPT09IGlkKTtcbiAgICAgICAgaWYgKGJvdW5kRHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QXhpc0Zyb21EYXRhc2V0KGlkLCAneCcsIGJvdW5kRHNbMF0pIHx8IGdldEF4aXNGcm9tRGF0YXNldChpZCwgJ3knLCBib3VuZERzWzBdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge307XG59XG5mdW5jdGlvbiBtZXJnZVNjYWxlQ29uZmlnKGNvbmZpZywgb3B0aW9ucykge1xuICAgIGNvbnN0IGNoYXJ0RGVmYXVsdHMgPSBvdmVycmlkZXNbY29uZmlnLnR5cGVdIHx8IHtcbiAgICAgICAgc2NhbGVzOiB7fVxuICAgIH07XG4gICAgY29uc3QgY29uZmlnU2NhbGVzID0gb3B0aW9ucy5zY2FsZXMgfHwge307XG4gICAgY29uc3QgY2hhcnRJbmRleEF4aXMgPSBnZXRJbmRleEF4aXMoY29uZmlnLnR5cGUsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHNjYWxlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgT2JqZWN0LmtleXMoY29uZmlnU2NhbGVzKS5mb3JFYWNoKChpZCk9PntcbiAgICAgICAgY29uc3Qgc2NhbGVDb25mID0gY29uZmlnU2NhbGVzW2lkXTtcbiAgICAgICAgaWYgKCFpc09iamVjdChzY2FsZUNvbmYpKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uc29sZS5lcnJvcihgSW52YWxpZCBzY2FsZSBjb25maWd1cmF0aW9uIGZvciBzY2FsZTogJHtpZH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NhbGVDb25mLl9wcm94eSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUud2FybihgSWdub3JpbmcgcmVzb2x2ZXIgcGFzc2VkIGFzIG9wdGlvbnMgZm9yIHNjYWxlOiAke2lkfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF4aXMgPSBkZXRlcm1pbmVBeGlzKGlkLCBzY2FsZUNvbmYsIHJldHJpZXZlQXhpc0Zyb21EYXRhc2V0cyhpZCwgY29uZmlnKSwgZGVmYXVsdHMuc2NhbGVzW3NjYWxlQ29uZi50eXBlXSk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRJZCA9IGdldERlZmF1bHRTY2FsZUlERnJvbUF4aXMoYXhpcywgY2hhcnRJbmRleEF4aXMpO1xuICAgICAgICBjb25zdCBkZWZhdWx0U2NhbGVPcHRpb25zID0gY2hhcnREZWZhdWx0cy5zY2FsZXMgfHwge307XG4gICAgICAgIHNjYWxlc1tpZF0gPSBtZXJnZUlmKE9iamVjdC5jcmVhdGUobnVsbCksIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBheGlzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2NhbGVDb25mLFxuICAgICAgICAgICAgZGVmYXVsdFNjYWxlT3B0aW9uc1theGlzXSxcbiAgICAgICAgICAgIGRlZmF1bHRTY2FsZU9wdGlvbnNbZGVmYXVsdElkXVxuICAgICAgICBdKTtcbiAgICB9KTtcbiAgICBjb25maWcuZGF0YS5kYXRhc2V0cy5mb3JFYWNoKChkYXRhc2V0KT0+e1xuICAgICAgICBjb25zdCB0eXBlID0gZGF0YXNldC50eXBlIHx8IGNvbmZpZy50eXBlO1xuICAgICAgICBjb25zdCBpbmRleEF4aXMgPSBkYXRhc2V0LmluZGV4QXhpcyB8fCBnZXRJbmRleEF4aXModHlwZSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRhdGFzZXREZWZhdWx0cyA9IG92ZXJyaWRlc1t0eXBlXSB8fCB7fTtcbiAgICAgICAgY29uc3QgZGVmYXVsdFNjYWxlT3B0aW9ucyA9IGRhdGFzZXREZWZhdWx0cy5zY2FsZXMgfHwge307XG4gICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRTY2FsZU9wdGlvbnMpLmZvckVhY2goKGRlZmF1bHRJRCk9PntcbiAgICAgICAgICAgIGNvbnN0IGF4aXMgPSBnZXRBeGlzRnJvbURlZmF1bHRTY2FsZUlEKGRlZmF1bHRJRCwgaW5kZXhBeGlzKTtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gZGF0YXNldFtheGlzICsgJ0F4aXNJRCddIHx8IGF4aXM7XG4gICAgICAgICAgICBzY2FsZXNbaWRdID0gc2NhbGVzW2lkXSB8fCBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgbWVyZ2VJZihzY2FsZXNbaWRdLCBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBheGlzXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb25maWdTY2FsZXNbaWRdLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRTY2FsZU9wdGlvbnNbZGVmYXVsdElEXVxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIE9iamVjdC5rZXlzKHNjYWxlcykuZm9yRWFjaCgoa2V5KT0+e1xuICAgICAgICBjb25zdCBzY2FsZSA9IHNjYWxlc1trZXldO1xuICAgICAgICBtZXJnZUlmKHNjYWxlLCBbXG4gICAgICAgICAgICBkZWZhdWx0cy5zY2FsZXNbc2NhbGUudHlwZV0sXG4gICAgICAgICAgICBkZWZhdWx0cy5zY2FsZVxuICAgICAgICBdKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2NhbGVzO1xufVxuZnVuY3Rpb24gaW5pdE9wdGlvbnMoY29uZmlnKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbmZpZy5vcHRpb25zIHx8IChjb25maWcub3B0aW9ucyA9IHt9KTtcbiAgICBvcHRpb25zLnBsdWdpbnMgPSB2YWx1ZU9yRGVmYXVsdChvcHRpb25zLnBsdWdpbnMsIHt9KTtcbiAgICBvcHRpb25zLnNjYWxlcyA9IG1lcmdlU2NhbGVDb25maWcoY29uZmlnLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIGluaXREYXRhKGRhdGEpIHtcbiAgICBkYXRhID0gZGF0YSB8fCB7fTtcbiAgICBkYXRhLmRhdGFzZXRzID0gZGF0YS5kYXRhc2V0cyB8fCBbXTtcbiAgICBkYXRhLmxhYmVscyA9IGRhdGEubGFiZWxzIHx8IFtdO1xuICAgIHJldHVybiBkYXRhO1xufVxuZnVuY3Rpb24gaW5pdENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgY29uZmlnLmRhdGEgPSBpbml0RGF0YShjb25maWcuZGF0YSk7XG4gICAgaW5pdE9wdGlvbnMoY29uZmlnKTtcbiAgICByZXR1cm4gY29uZmlnO1xufVxuY29uc3Qga2V5Q2FjaGUgPSBuZXcgTWFwKCk7XG5jb25zdCBrZXlzQ2FjaGVkID0gbmV3IFNldCgpO1xuZnVuY3Rpb24gY2FjaGVkS2V5cyhjYWNoZUtleSwgZ2VuZXJhdGUpIHtcbiAgICBsZXQga2V5cyA9IGtleUNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgaWYgKCFrZXlzKSB7XG4gICAgICAgIGtleXMgPSBnZW5lcmF0ZSgpO1xuICAgICAgICBrZXlDYWNoZS5zZXQoY2FjaGVLZXksIGtleXMpO1xuICAgICAgICBrZXlzQ2FjaGVkLmFkZChrZXlzKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG59XG5jb25zdCBhZGRJZkZvdW5kID0gKHNldCwgb2JqLCBrZXkpPT57XG4gICAgY29uc3Qgb3B0cyA9IHJlc29sdmVPYmplY3RLZXkob2JqLCBrZXkpO1xuICAgIGlmIChvcHRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2V0LmFkZChvcHRzKTtcbiAgICB9XG59O1xuY2xhc3MgQ29uZmlnIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcpe1xuICAgICAgICB0aGlzLl9jb25maWcgPSBpbml0Q29uZmlnKGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX3Njb3BlQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuX3Jlc29sdmVyQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGdldCBwbGF0Zm9ybSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5wbGF0Zm9ybTtcbiAgICB9XG4gICAgZ2V0IHR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcudHlwZTtcbiAgICB9XG4gICAgc2V0IHR5cGUodHlwZSkge1xuICAgICAgICB0aGlzLl9jb25maWcudHlwZSA9IHR5cGU7XG4gICAgfVxuICAgIGdldCBkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmRhdGE7XG4gICAgfVxuICAgIHNldCBkYXRhKGRhdGEpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnLmRhdGEgPSBpbml0RGF0YShkYXRhKTtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcub3B0aW9ucztcbiAgICB9XG4gICAgc2V0IG9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICB0aGlzLl9jb25maWcub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIGdldCBwbHVnaW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLnBsdWdpbnM7XG4gICAgfVxuICAgIHVwZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5fY29uZmlnO1xuICAgICAgICB0aGlzLmNsZWFyQ2FjaGUoKTtcbiAgICAgICAgaW5pdE9wdGlvbnMoY29uZmlnKTtcbiAgICB9XG4gICAgY2xlYXJDYWNoZSgpIHtcbiAgICAgICAgdGhpcy5fc2NvcGVDYWNoZS5jbGVhcigpO1xuICAgICAgICB0aGlzLl9yZXNvbHZlckNhY2hlLmNsZWFyKCk7XG4gICAgfVxuIGRhdGFzZXRTY29wZUtleXMoZGF0YXNldFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZEtleXMoZGF0YXNldFR5cGUsICgpPT5bXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBgZGF0YXNldHMuJHtkYXRhc2V0VHlwZX1gLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIF0pO1xuICAgIH1cbiBkYXRhc2V0QW5pbWF0aW9uU2NvcGVLZXlzKGRhdGFzZXRUeXBlLCB0cmFuc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWRLZXlzKGAke2RhdGFzZXRUeXBlfS50cmFuc2l0aW9uLiR7dHJhbnNpdGlvbn1gLCAoKT0+W1xuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgYGRhdGFzZXRzLiR7ZGF0YXNldFR5cGV9LnRyYW5zaXRpb25zLiR7dHJhbnNpdGlvbn1gLFxuICAgICAgICAgICAgICAgICAgICBgdHJhbnNpdGlvbnMuJHt0cmFuc2l0aW9ufWBcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgYGRhdGFzZXRzLiR7ZGF0YXNldFR5cGV9YCxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICBdKTtcbiAgICB9XG4gZGF0YXNldEVsZW1lbnRTY29wZUtleXMoZGF0YXNldFR5cGUsIGVsZW1lbnRUeXBlKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWRLZXlzKGAke2RhdGFzZXRUeXBlfS0ke2VsZW1lbnRUeXBlfWAsICgpPT5bXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBgZGF0YXNldHMuJHtkYXRhc2V0VHlwZX0uZWxlbWVudHMuJHtlbGVtZW50VHlwZX1gLFxuICAgICAgICAgICAgICAgICAgICBgZGF0YXNldHMuJHtkYXRhc2V0VHlwZX1gLFxuICAgICAgICAgICAgICAgICAgICBgZWxlbWVudHMuJHtlbGVtZW50VHlwZX1gLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIF0pO1xuICAgIH1cbiBwbHVnaW5TY29wZUtleXMocGx1Z2luKSB7XG4gICAgICAgIGNvbnN0IGlkID0gcGx1Z2luLmlkO1xuICAgICAgICBjb25zdCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICByZXR1cm4gY2FjaGVkS2V5cyhgJHt0eXBlfS1wbHVnaW4tJHtpZH1gLCAoKT0+W1xuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgYHBsdWdpbnMuJHtpZH1gLFxuICAgICAgICAgICAgICAgICAgICAuLi5wbHVnaW4uYWRkaXRpb25hbE9wdGlvblNjb3BlcyB8fCBbXVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIF0pO1xuICAgIH1cbiBfY2FjaGVkU2NvcGVzKG1haW5TY29wZSwgcmVzZXRDYWNoZSkge1xuICAgICAgICBjb25zdCBfc2NvcGVDYWNoZSA9IHRoaXMuX3Njb3BlQ2FjaGU7XG4gICAgICAgIGxldCBjYWNoZSA9IF9zY29wZUNhY2hlLmdldChtYWluU2NvcGUpO1xuICAgICAgICBpZiAoIWNhY2hlIHx8IHJlc2V0Q2FjaGUpIHtcbiAgICAgICAgICAgIGNhY2hlID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgX3Njb3BlQ2FjaGUuc2V0KG1haW5TY29wZSwgY2FjaGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWNoZTtcbiAgICB9XG4gZ2V0T3B0aW9uU2NvcGVzKG1haW5TY29wZSwga2V5TGlzdHMsIHJlc2V0Q2FjaGUpIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25zICwgdHlwZSAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy5fY2FjaGVkU2NvcGVzKG1haW5TY29wZSwgcmVzZXRDYWNoZSk7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChrZXlMaXN0cyk7XG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NvcGVzID0gbmV3IFNldCgpO1xuICAgICAgICBrZXlMaXN0cy5mb3JFYWNoKChrZXlzKT0+e1xuICAgICAgICAgICAgaWYgKG1haW5TY29wZSkge1xuICAgICAgICAgICAgICAgIHNjb3Blcy5hZGQobWFpblNjb3BlKTtcbiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goKGtleSk9PmFkZElmRm91bmQoc2NvcGVzLCBtYWluU2NvcGUsIGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpPT5hZGRJZkZvdW5kKHNjb3Blcywgb3B0aW9ucywga2V5KSk7XG4gICAgICAgICAgICBrZXlzLmZvckVhY2goKGtleSk9PmFkZElmRm91bmQoc2NvcGVzLCBvdmVycmlkZXNbdHlwZV0gfHwge30sIGtleSkpO1xuICAgICAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpPT5hZGRJZkZvdW5kKHNjb3BlcywgZGVmYXVsdHMsIGtleSkpO1xuICAgICAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpPT5hZGRJZkZvdW5kKHNjb3BlcywgZGVzY3JpcHRvcnMsIGtleSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYXJyYXkgPSBBcnJheS5mcm9tKHNjb3Blcyk7XG4gICAgICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGFycmF5LnB1c2goT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleXNDYWNoZWQuaGFzKGtleUxpc3RzKSkge1xuICAgICAgICAgICAgY2FjaGUuc2V0KGtleUxpc3RzLCBhcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cbiBjaGFydE9wdGlvblNjb3BlcygpIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25zICwgdHlwZSAgfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgb3ZlcnJpZGVzW3R5cGVdIHx8IHt9LFxuICAgICAgICAgICAgZGVmYXVsdHMuZGF0YXNldHNbdHlwZV0gfHwge30sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlZmF1bHRzLFxuICAgICAgICAgICAgZGVzY3JpcHRvcnNcbiAgICAgICAgXTtcbiAgICB9XG4gcmVzb2x2ZU5hbWVkT3B0aW9ucyhzY29wZXMsIG5hbWVzLCBjb250ZXh0LCBwcmVmaXhlcyA9IFtcbiAgICAgICAgJydcbiAgICBdKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICRzaGFyZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXNvbHZlciAsIHN1YlByZWZpeGVzICB9ID0gZ2V0UmVzb2x2ZXIodGhpcy5fcmVzb2x2ZXJDYWNoZSwgc2NvcGVzLCBwcmVmaXhlcyk7XG4gICAgICAgIGxldCBvcHRpb25zID0gcmVzb2x2ZXI7XG4gICAgICAgIGlmIChuZWVkQ29udGV4dChyZXNvbHZlciwgbmFtZXMpKSB7XG4gICAgICAgICAgICByZXN1bHQuJHNoYXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29udGV4dCA9IGlzRnVuY3Rpb24oY29udGV4dCkgPyBjb250ZXh0KCkgOiBjb250ZXh0O1xuICAgICAgICAgICAgY29uc3Qgc3ViUmVzb2x2ZXIgPSB0aGlzLmNyZWF0ZVJlc29sdmVyKHNjb3BlcywgY29udGV4dCwgc3ViUHJlZml4ZXMpO1xuICAgICAgICAgICAgb3B0aW9ucyA9IF9hdHRhY2hDb250ZXh0KHJlc29sdmVyLCBjb250ZXh0LCBzdWJSZXNvbHZlcik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIG5hbWVzKXtcbiAgICAgICAgICAgIHJlc3VsdFtwcm9wXSA9IG9wdGlvbnNbcHJvcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gY3JlYXRlUmVzb2x2ZXIoc2NvcGVzLCBjb250ZXh0LCBwcmVmaXhlcyA9IFtcbiAgICAgICAgJydcbiAgICBdLCBkZXNjcmlwdG9yRGVmYXVsdHMpIHtcbiAgICAgICAgY29uc3QgeyByZXNvbHZlciAgfSA9IGdldFJlc29sdmVyKHRoaXMuX3Jlc29sdmVyQ2FjaGUsIHNjb3BlcywgcHJlZml4ZXMpO1xuICAgICAgICByZXR1cm4gaXNPYmplY3QoY29udGV4dCkgPyBfYXR0YWNoQ29udGV4dChyZXNvbHZlciwgY29udGV4dCwgdW5kZWZpbmVkLCBkZXNjcmlwdG9yRGVmYXVsdHMpIDogcmVzb2x2ZXI7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UmVzb2x2ZXIocmVzb2x2ZXJDYWNoZSwgc2NvcGVzLCBwcmVmaXhlcykge1xuICAgIGxldCBjYWNoZSA9IHJlc29sdmVyQ2FjaGUuZ2V0KHNjb3Blcyk7XG4gICAgaWYgKCFjYWNoZSkge1xuICAgICAgICBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgcmVzb2x2ZXJDYWNoZS5zZXQoc2NvcGVzLCBjYWNoZSk7XG4gICAgfVxuICAgIGNvbnN0IGNhY2hlS2V5ID0gcHJlZml4ZXMuam9pbigpO1xuICAgIGxldCBjYWNoZWQgPSBjYWNoZS5nZXQoY2FjaGVLZXkpO1xuICAgIGlmICghY2FjaGVkKSB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVyID0gX2NyZWF0ZVJlc29sdmVyKHNjb3BlcywgcHJlZml4ZXMpO1xuICAgICAgICBjYWNoZWQgPSB7XG4gICAgICAgICAgICByZXNvbHZlcixcbiAgICAgICAgICAgIHN1YlByZWZpeGVzOiBwcmVmaXhlcy5maWx0ZXIoKHApPT4hcC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdob3ZlcicpKVxuICAgICAgICB9O1xuICAgICAgICBjYWNoZS5zZXQoY2FjaGVLZXksIGNhY2hlZCk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZWQ7XG59XG5jb25zdCBoYXNGdW5jdGlvbiA9ICh2YWx1ZSk9PmlzT2JqZWN0KHZhbHVlKSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZSkuc29tZSgoa2V5KT0+aXNGdW5jdGlvbih2YWx1ZVtrZXldKSk7XG5mdW5jdGlvbiBuZWVkQ29udGV4dChwcm94eSwgbmFtZXMpIHtcbiAgICBjb25zdCB7IGlzU2NyaXB0YWJsZSAsIGlzSW5kZXhhYmxlICB9ID0gX2Rlc2NyaXB0b3JzKHByb3h5KTtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgbmFtZXMpe1xuICAgICAgICBjb25zdCBzY3JpcHRhYmxlID0gaXNTY3JpcHRhYmxlKHByb3ApO1xuICAgICAgICBjb25zdCBpbmRleGFibGUgPSBpc0luZGV4YWJsZShwcm9wKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAoaW5kZXhhYmxlIHx8IHNjcmlwdGFibGUpICYmIHByb3h5W3Byb3BdO1xuICAgICAgICBpZiAoc2NyaXB0YWJsZSAmJiAoaXNGdW5jdGlvbih2YWx1ZSkgfHwgaGFzRnVuY3Rpb24odmFsdWUpKSB8fCBpbmRleGFibGUgJiYgaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxudmFyIHZlcnNpb24gPSBcIjQuNC42XCI7XG5cbmNvbnN0IEtOT1dOX1BPU0lUSU9OUyA9IFtcbiAgICAndG9wJyxcbiAgICAnYm90dG9tJyxcbiAgICAnbGVmdCcsXG4gICAgJ3JpZ2h0JyxcbiAgICAnY2hhcnRBcmVhJ1xuXTtcbmZ1bmN0aW9uIHBvc2l0aW9uSXNIb3Jpem9udGFsKHBvc2l0aW9uLCBheGlzKSB7XG4gICAgcmV0dXJuIHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbScgfHwgS05PV05fUE9TSVRJT05TLmluZGV4T2YocG9zaXRpb24pID09PSAtMSAmJiBheGlzID09PSAneCc7XG59XG5mdW5jdGlvbiBjb21wYXJlMkxldmVsKGwxLCBsMikge1xuICAgIHJldHVybiBmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgIHJldHVybiBhW2wxXSA9PT0gYltsMV0gPyBhW2wyXSAtIGJbbDJdIDogYVtsMV0gLSBiW2wxXTtcbiAgICB9O1xufVxuZnVuY3Rpb24gb25BbmltYXRpb25zQ29tcGxldGUoY29udGV4dCkge1xuICAgIGNvbnN0IGNoYXJ0ID0gY29udGV4dC5jaGFydDtcbiAgICBjb25zdCBhbmltYXRpb25PcHRpb25zID0gY2hhcnQub3B0aW9ucy5hbmltYXRpb247XG4gICAgY2hhcnQubm90aWZ5UGx1Z2lucygnYWZ0ZXJSZW5kZXInKTtcbiAgICBjYWxsYmFjayhhbmltYXRpb25PcHRpb25zICYmIGFuaW1hdGlvbk9wdGlvbnMub25Db21wbGV0ZSwgW1xuICAgICAgICBjb250ZXh0XG4gICAgXSwgY2hhcnQpO1xufVxuZnVuY3Rpb24gb25BbmltYXRpb25Qcm9ncmVzcyhjb250ZXh0KSB7XG4gICAgY29uc3QgY2hhcnQgPSBjb250ZXh0LmNoYXJ0O1xuICAgIGNvbnN0IGFuaW1hdGlvbk9wdGlvbnMgPSBjaGFydC5vcHRpb25zLmFuaW1hdGlvbjtcbiAgICBjYWxsYmFjayhhbmltYXRpb25PcHRpb25zICYmIGFuaW1hdGlvbk9wdGlvbnMub25Qcm9ncmVzcywgW1xuICAgICAgICBjb250ZXh0XG4gICAgXSwgY2hhcnQpO1xufVxuIGZ1bmN0aW9uIGdldENhbnZhcyhpdGVtKSB7XG4gICAgaWYgKF9pc0RvbVN1cHBvcnRlZCgpICYmIHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICBpdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaXRlbSk7XG4gICAgfSBlbHNlIGlmIChpdGVtICYmIGl0ZW0ubGVuZ3RoKSB7XG4gICAgICAgIGl0ZW0gPSBpdGVtWzBdO1xuICAgIH1cbiAgICBpZiAoaXRlbSAmJiBpdGVtLmNhbnZhcykge1xuICAgICAgICBpdGVtID0gaXRlbS5jYW52YXM7XG4gICAgfVxuICAgIHJldHVybiBpdGVtO1xufVxuY29uc3QgaW5zdGFuY2VzID0ge307XG5jb25zdCBnZXRDaGFydCA9IChrZXkpPT57XG4gICAgY29uc3QgY2FudmFzID0gZ2V0Q2FudmFzKGtleSk7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoaW5zdGFuY2VzKS5maWx0ZXIoKGMpPT5jLmNhbnZhcyA9PT0gY2FudmFzKS5wb3AoKTtcbn07XG5mdW5jdGlvbiBtb3ZlTnVtZXJpY0tleXMob2JqLCBzdGFydCwgbW92ZSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpe1xuICAgICAgICBjb25zdCBpbnRLZXkgPSAra2V5O1xuICAgICAgICBpZiAoaW50S2V5ID49IHN0YXJ0KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgICAgICAgICAgaWYgKG1vdmUgPiAwIHx8IGludEtleSA+IHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgb2JqW2ludEtleSArIG1vdmVdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4gZnVuY3Rpb24gZGV0ZXJtaW5lTGFzdEV2ZW50KGUsIGxhc3RFdmVudCwgaW5DaGFydEFyZWEsIGlzQ2xpY2spIHtcbiAgICBpZiAoIWluQ2hhcnRBcmVhIHx8IGUudHlwZSA9PT0gJ21vdXNlb3V0Jykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGlzQ2xpY2spIHtcbiAgICAgICAgcmV0dXJuIGxhc3RFdmVudDtcbiAgICB9XG4gICAgcmV0dXJuIGU7XG59XG5mdW5jdGlvbiBnZXRTaXplRm9yQXJlYShzY2FsZSwgY2hhcnRBcmVhLCBmaWVsZCkge1xuICAgIHJldHVybiBzY2FsZS5vcHRpb25zLmNsaXAgPyBzY2FsZVtmaWVsZF0gOiBjaGFydEFyZWFbZmllbGRdO1xufVxuZnVuY3Rpb24gZ2V0RGF0YXNldEFyZWEobWV0YSwgY2hhcnRBcmVhKSB7XG4gICAgY29uc3QgeyB4U2NhbGUgLCB5U2NhbGUgIH0gPSBtZXRhO1xuICAgIGlmICh4U2NhbGUgJiYgeVNjYWxlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsZWZ0OiBnZXRTaXplRm9yQXJlYSh4U2NhbGUsIGNoYXJ0QXJlYSwgJ2xlZnQnKSxcbiAgICAgICAgICAgIHJpZ2h0OiBnZXRTaXplRm9yQXJlYSh4U2NhbGUsIGNoYXJ0QXJlYSwgJ3JpZ2h0JyksXG4gICAgICAgICAgICB0b3A6IGdldFNpemVGb3JBcmVhKHlTY2FsZSwgY2hhcnRBcmVhLCAndG9wJyksXG4gICAgICAgICAgICBib3R0b206IGdldFNpemVGb3JBcmVhKHlTY2FsZSwgY2hhcnRBcmVhLCAnYm90dG9tJylcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGNoYXJ0QXJlYTtcbn1cbmNsYXNzIENoYXJ0IHtcbiAgICBzdGF0aWMgZGVmYXVsdHMgPSBkZWZhdWx0cztcbiAgICBzdGF0aWMgaW5zdGFuY2VzID0gaW5zdGFuY2VzO1xuICAgIHN0YXRpYyBvdmVycmlkZXMgPSBvdmVycmlkZXM7XG4gICAgc3RhdGljIHJlZ2lzdHJ5ID0gcmVnaXN0cnk7XG4gICAgc3RhdGljIHZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIHN0YXRpYyBnZXRDaGFydCA9IGdldENoYXJ0O1xuICAgIHN0YXRpYyByZWdpc3RlciguLi5pdGVtcykge1xuICAgICAgICByZWdpc3RyeS5hZGQoLi4uaXRlbXMpO1xuICAgICAgICBpbnZhbGlkYXRlUGx1Z2lucygpO1xuICAgIH1cbiAgICBzdGF0aWMgdW5yZWdpc3RlciguLi5pdGVtcykge1xuICAgICAgICByZWdpc3RyeS5yZW1vdmUoLi4uaXRlbXMpO1xuICAgICAgICBpbnZhbGlkYXRlUGx1Z2lucygpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpdGVtLCB1c2VyQ29uZmlnKXtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcgPSBuZXcgQ29uZmlnKHVzZXJDb25maWcpO1xuICAgICAgICBjb25zdCBpbml0aWFsQ2FudmFzID0gZ2V0Q2FudmFzKGl0ZW0pO1xuICAgICAgICBjb25zdCBleGlzdGluZ0NoYXJ0ID0gZ2V0Q2hhcnQoaW5pdGlhbENhbnZhcyk7XG4gICAgICAgIGlmIChleGlzdGluZ0NoYXJ0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbnZhcyBpcyBhbHJlYWR5IGluIHVzZS4gQ2hhcnQgd2l0aCBJRCBcXCcnICsgZXhpc3RpbmdDaGFydC5pZCArICdcXCcnICsgJyBtdXN0IGJlIGRlc3Ryb3llZCBiZWZvcmUgdGhlIGNhbnZhcyB3aXRoIElEIFxcJycgKyBleGlzdGluZ0NoYXJ0LmNhbnZhcy5pZCArICdcXCcgY2FuIGJlIHJldXNlZC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0gY29uZmlnLmNyZWF0ZVJlc29sdmVyKGNvbmZpZy5jaGFydE9wdGlvblNjb3BlcygpLCB0aGlzLmdldENvbnRleHQoKSk7XG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBuZXcgKGNvbmZpZy5wbGF0Zm9ybSB8fCBfZGV0ZWN0UGxhdGZvcm0oaW5pdGlhbENhbnZhcykpKCk7XG4gICAgICAgIHRoaXMucGxhdGZvcm0udXBkYXRlQ29uZmlnKGNvbmZpZyk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnBsYXRmb3JtLmFjcXVpcmVDb250ZXh0KGluaXRpYWxDYW52YXMsIG9wdGlvbnMuYXNwZWN0UmF0aW8pO1xuICAgICAgICBjb25zdCBjYW52YXMgPSBjb250ZXh0ICYmIGNvbnRleHQuY2FudmFzO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBjYW52YXMgJiYgY2FudmFzLmhlaWdodDtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBjYW52YXMgJiYgY2FudmFzLndpZHRoO1xuICAgICAgICB0aGlzLmlkID0gdWlkKCk7XG4gICAgICAgIHRoaXMuY3R4ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy5jYW52YXMgPSBjYW52YXM7XG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLl9hc3BlY3RSYXRpbyA9IHRoaXMuYXNwZWN0UmF0aW87XG4gICAgICAgIHRoaXMuX2xheWVycyA9IFtdO1xuICAgICAgICB0aGlzLl9tZXRhc2V0cyA9IFtdO1xuICAgICAgICB0aGlzLl9zdGFja3MgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYm94ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jaGFydEFyZWEgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IFtdO1xuICAgICAgICB0aGlzLl9sYXN0RXZlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xuICAgICAgICAgdGhpcy5fcmVzcG9uc2l2ZUxpc3RlbmVycyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fc29ydGVkTWV0YXNldHMgPSBbXTtcbiAgICAgICAgdGhpcy5zY2FsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fcGx1Z2lucyA9IG5ldyBQbHVnaW5TZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMuJHByb3hpZXMgPSB7fTtcbiAgICAgICAgdGhpcy5faGlkZGVuSW5kaWNlcyA9IHt9O1xuICAgICAgICB0aGlzLmF0dGFjaGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy4kY29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fZG9SZXNpemUgPSBkZWJvdW5jZSgobW9kZSk9PnRoaXMudXBkYXRlKG1vZGUpLCBvcHRpb25zLnJlc2l6ZURlbGF5IHx8IDApO1xuICAgICAgICB0aGlzLl9kYXRhQ2hhbmdlcyA9IFtdO1xuICAgICAgICBpbnN0YW5jZXNbdGhpcy5pZF0gPSB0aGlzO1xuICAgICAgICBpZiAoIWNvbnRleHQgfHwgIWNhbnZhcykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgY2hhcnQ6IGNhbid0IGFjcXVpcmUgY29udGV4dCBmcm9tIHRoZSBnaXZlbiBpdGVtXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGFuaW1hdG9yLmxpc3Rlbih0aGlzLCAnY29tcGxldGUnLCBvbkFuaW1hdGlvbnNDb21wbGV0ZSk7XG4gICAgICAgIGFuaW1hdG9yLmxpc3Rlbih0aGlzLCAncHJvZ3Jlc3MnLCBvbkFuaW1hdGlvblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZSgpO1xuICAgICAgICBpZiAodGhpcy5hdHRhY2hlZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgYXNwZWN0UmF0aW8oKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uczogeyBhc3BlY3RSYXRpbyAsIG1haW50YWluQXNwZWN0UmF0aW8gIH0gLCB3aWR0aCAsIGhlaWdodCAsIF9hc3BlY3RSYXRpbyAgfSA9IHRoaXM7XG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZihhc3BlY3RSYXRpbykpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3BlY3RSYXRpbztcbiAgICAgICAgfVxuICAgICAgICBpZiAobWFpbnRhaW5Bc3BlY3RSYXRpbyAmJiBfYXNwZWN0UmF0aW8pIHtcbiAgICAgICAgICAgIHJldHVybiBfYXNwZWN0UmF0aW87XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhlaWdodCA/IHdpZHRoIC8gaGVpZ2h0IDogbnVsbDtcbiAgICB9XG4gICAgZ2V0IGRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhO1xuICAgIH1cbiAgICBzZXQgZGF0YShkYXRhKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmRhdGEgPSBkYXRhO1xuICAgIH1cbiAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gICAgfVxuICAgIHNldCBvcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIGdldCByZWdpc3RyeSgpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5O1xuICAgIH1cbiBfaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdiZWZvcmVJbml0Jyk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNpemUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldGluYVNjYWxlKHRoaXMsIHRoaXMub3B0aW9ucy5kZXZpY2VQaXhlbFJhdGlvKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJpbmRFdmVudHMoKTtcbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckluaXQnKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNsZWFyKCkge1xuICAgICAgICBjbGVhckNhbnZhcyh0aGlzLmNhbnZhcywgdGhpcy5jdHgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgYW5pbWF0b3Iuc3RvcCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuIHJlc2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIGlmICghYW5pbWF0b3IucnVubmluZyh0aGlzKSkge1xuICAgICAgICAgICAgdGhpcy5fcmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVzaXplQmVmb3JlRHJhdyA9IHtcbiAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3Jlc2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuY2FudmFzO1xuICAgICAgICBjb25zdCBhc3BlY3RSYXRpbyA9IG9wdGlvbnMubWFpbnRhaW5Bc3BlY3RSYXRpbyAmJiB0aGlzLmFzcGVjdFJhdGlvO1xuICAgICAgICBjb25zdCBuZXdTaXplID0gdGhpcy5wbGF0Zm9ybS5nZXRNYXhpbXVtU2l6ZShjYW52YXMsIHdpZHRoLCBoZWlnaHQsIGFzcGVjdFJhdGlvKTtcbiAgICAgICAgY29uc3QgbmV3UmF0aW8gPSBvcHRpb25zLmRldmljZVBpeGVsUmF0aW8gfHwgdGhpcy5wbGF0Zm9ybS5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XG4gICAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLndpZHRoID8gJ3Jlc2l6ZScgOiAnYXR0YWNoJztcbiAgICAgICAgdGhpcy53aWR0aCA9IG5ld1NpemUud2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gbmV3U2l6ZS5oZWlnaHQ7XG4gICAgICAgIHRoaXMuX2FzcGVjdFJhdGlvID0gdGhpcy5hc3BlY3RSYXRpbztcbiAgICAgICAgaWYgKCFyZXRpbmFTY2FsZSh0aGlzLCBuZXdSYXRpbywgdHJ1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vdGlmeVBsdWdpbnMoJ3Jlc2l6ZScsIHtcbiAgICAgICAgICAgIHNpemU6IG5ld1NpemVcbiAgICAgICAgfSk7XG4gICAgICAgIGNhbGxiYWNrKG9wdGlvbnMub25SZXNpemUsIFtcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBuZXdTaXplXG4gICAgICAgIF0sIHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5hdHRhY2hlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RvUmVzaXplKG1vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbnN1cmVTY2FsZXNIYXZlSURzKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBzY2FsZXNPcHRpb25zID0gb3B0aW9ucy5zY2FsZXMgfHwge307XG4gICAgICAgIGVhY2goc2NhbGVzT3B0aW9ucywgKGF4aXNPcHRpb25zLCBheGlzSUQpPT57XG4gICAgICAgICAgICBheGlzT3B0aW9ucy5pZCA9IGF4aXNJRDtcbiAgICAgICAgfSk7XG4gICAgfVxuIGJ1aWxkT3JVcGRhdGVTY2FsZXMoKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHNjYWxlT3B0cyA9IG9wdGlvbnMuc2NhbGVzO1xuICAgICAgICBjb25zdCBzY2FsZXMgPSB0aGlzLnNjYWxlcztcbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IE9iamVjdC5rZXlzKHNjYWxlcykucmVkdWNlKChvYmosIGlkKT0+e1xuICAgICAgICAgICAgb2JqW2lkXSA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfSwge30pO1xuICAgICAgICBsZXQgaXRlbXMgPSBbXTtcbiAgICAgICAgaWYgKHNjYWxlT3B0cykge1xuICAgICAgICAgICAgaXRlbXMgPSBpdGVtcy5jb25jYXQoT2JqZWN0LmtleXMoc2NhbGVPcHRzKS5tYXAoKGlkKT0+e1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlT3B0aW9ucyA9IHNjYWxlT3B0c1tpZF07XG4gICAgICAgICAgICAgICAgY29uc3QgYXhpcyA9IGRldGVybWluZUF4aXMoaWQsIHNjYWxlT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNSYWRpYWwgPSBheGlzID09PSAncic7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gYXhpcyA9PT0gJ3gnO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHNjYWxlT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgZHBvc2l0aW9uOiBpc1JhZGlhbCA/ICdjaGFydEFyZWEnIDogaXNIb3Jpem9udGFsID8gJ2JvdHRvbScgOiAnbGVmdCcsXG4gICAgICAgICAgICAgICAgICAgIGR0eXBlOiBpc1JhZGlhbCA/ICdyYWRpYWxMaW5lYXInIDogaXNIb3Jpem9udGFsID8gJ2NhdGVnb3J5JyA6ICdsaW5lYXInXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBlYWNoKGl0ZW1zLCAoaXRlbSk9PntcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlT3B0aW9ucyA9IGl0ZW0ub3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGlkID0gc2NhbGVPcHRpb25zLmlkO1xuICAgICAgICAgICAgY29uc3QgYXhpcyA9IGRldGVybWluZUF4aXMoaWQsIHNjYWxlT3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBzY2FsZVR5cGUgPSB2YWx1ZU9yRGVmYXVsdChzY2FsZU9wdGlvbnMudHlwZSwgaXRlbS5kdHlwZSk7XG4gICAgICAgICAgICBpZiAoc2NhbGVPcHRpb25zLnBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb25Jc0hvcml6b250YWwoc2NhbGVPcHRpb25zLnBvc2l0aW9uLCBheGlzKSAhPT0gcG9zaXRpb25Jc0hvcml6b250YWwoaXRlbS5kcG9zaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgc2NhbGVPcHRpb25zLnBvc2l0aW9uID0gaXRlbS5kcG9zaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVkW2lkXSA9IHRydWU7XG4gICAgICAgICAgICBsZXQgc2NhbGUgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGlkIGluIHNjYWxlcyAmJiBzY2FsZXNbaWRdLnR5cGUgPT09IHNjYWxlVHlwZSkge1xuICAgICAgICAgICAgICAgIHNjYWxlID0gc2NhbGVzW2lkXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NhbGVDbGFzcyA9IHJlZ2lzdHJ5LmdldFNjYWxlKHNjYWxlVHlwZSk7XG4gICAgICAgICAgICAgICAgc2NhbGUgPSBuZXcgc2NhbGVDbGFzcyh7XG4gICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBzY2FsZVR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGN0eDogdGhpcy5jdHgsXG4gICAgICAgICAgICAgICAgICAgIGNoYXJ0OiB0aGlzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc2NhbGVzW3NjYWxlLmlkXSA9IHNjYWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2NhbGUuaW5pdChzY2FsZU9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaCh1cGRhdGVkLCAoaGFzVXBkYXRlZCwgaWQpPT57XG4gICAgICAgICAgICBpZiAoIWhhc1VwZGF0ZWQpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgc2NhbGVzW2lkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2goc2NhbGVzLCAoc2NhbGUpPT57XG4gICAgICAgICAgICBsYXlvdXRzLmNvbmZpZ3VyZSh0aGlzLCBzY2FsZSwgc2NhbGUub3B0aW9ucyk7XG4gICAgICAgICAgICBsYXlvdXRzLmFkZEJveCh0aGlzLCBzY2FsZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiBfdXBkYXRlTWV0YXNldHMoKSB7XG4gICAgICAgIGNvbnN0IG1ldGFzZXRzID0gdGhpcy5fbWV0YXNldHM7XG4gICAgICAgIGNvbnN0IG51bURhdGEgPSB0aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoO1xuICAgICAgICBjb25zdCBudW1NZXRhID0gbWV0YXNldHMubGVuZ3RoO1xuICAgICAgICBtZXRhc2V0cy5zb3J0KChhLCBiKT0+YS5pbmRleCAtIGIuaW5kZXgpO1xuICAgICAgICBpZiAobnVtTWV0YSA+IG51bURhdGEpIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IG51bURhdGE7IGkgPCBudW1NZXRhOyArK2kpe1xuICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lEYXRhc2V0TWV0YShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1ldGFzZXRzLnNwbGljZShudW1EYXRhLCBudW1NZXRhIC0gbnVtRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc29ydGVkTWV0YXNldHMgPSBtZXRhc2V0cy5zbGljZSgwKS5zb3J0KGNvbXBhcmUyTGV2ZWwoJ29yZGVyJywgJ2luZGV4JykpO1xuICAgIH1cbiBfcmVtb3ZlVW5yZWZlcmVuY2VkTWV0YXNldHMoKSB7XG4gICAgICAgIGNvbnN0IHsgX21ldGFzZXRzOiBtZXRhc2V0cyAsIGRhdGE6IHsgZGF0YXNldHMgIH0gIH0gPSB0aGlzO1xuICAgICAgICBpZiAobWV0YXNldHMubGVuZ3RoID4gZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fc3RhY2tzO1xuICAgICAgICB9XG4gICAgICAgIG1ldGFzZXRzLmZvckVhY2goKG1ldGEsIGluZGV4KT0+e1xuICAgICAgICAgICAgaWYgKGRhdGFzZXRzLmZpbHRlcigoeCk9PnggPT09IG1ldGEuX2RhdGFzZXQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lEYXRhc2V0TWV0YShpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBidWlsZE9yVXBkYXRlQ29udHJvbGxlcnMoKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbnRyb2xsZXJzID0gW107XG4gICAgICAgIGNvbnN0IGRhdGFzZXRzID0gdGhpcy5kYXRhLmRhdGFzZXRzO1xuICAgICAgICBsZXQgaSwgaWxlbjtcbiAgICAgICAgdGhpcy5fcmVtb3ZlVW5yZWZlcmVuY2VkTWV0YXNldHMoKTtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gZGF0YXNldHMubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKXtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tpXTtcbiAgICAgICAgICAgIGxldCBtZXRhID0gdGhpcy5nZXREYXRhc2V0TWV0YShpKTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBkYXRhc2V0LnR5cGUgfHwgdGhpcy5jb25maWcudHlwZTtcbiAgICAgICAgICAgIGlmIChtZXRhLnR5cGUgJiYgbWV0YS50eXBlICE9PSB0eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVzdHJveURhdGFzZXRNZXRhKGkpO1xuICAgICAgICAgICAgICAgIG1ldGEgPSB0aGlzLmdldERhdGFzZXRNZXRhKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWV0YS50eXBlID0gdHlwZTtcbiAgICAgICAgICAgIG1ldGEuaW5kZXhBeGlzID0gZGF0YXNldC5pbmRleEF4aXMgfHwgZ2V0SW5kZXhBeGlzKHR5cGUsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgICBtZXRhLm9yZGVyID0gZGF0YXNldC5vcmRlciB8fCAwO1xuICAgICAgICAgICAgbWV0YS5pbmRleCA9IGk7XG4gICAgICAgICAgICBtZXRhLmxhYmVsID0gJycgKyBkYXRhc2V0LmxhYmVsO1xuICAgICAgICAgICAgbWV0YS52aXNpYmxlID0gdGhpcy5pc0RhdGFzZXRWaXNpYmxlKGkpO1xuICAgICAgICAgICAgaWYgKG1ldGEuY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIG1ldGEuY29udHJvbGxlci51cGRhdGVJbmRleChpKTtcbiAgICAgICAgICAgICAgICBtZXRhLmNvbnRyb2xsZXIubGlua1NjYWxlcygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBDb250cm9sbGVyQ2xhc3MgPSByZWdpc3RyeS5nZXRDb250cm9sbGVyKHR5cGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YXNldEVsZW1lbnRUeXBlICwgZGF0YUVsZW1lbnRUeXBlICB9ID0gZGVmYXVsdHMuZGF0YXNldHNbdHlwZV07XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihDb250cm9sbGVyQ2xhc3MsIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUVsZW1lbnRUeXBlOiByZWdpc3RyeS5nZXRFbGVtZW50KGRhdGFFbGVtZW50VHlwZSksXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXRFbGVtZW50VHlwZTogZGF0YXNldEVsZW1lbnRUeXBlICYmIHJlZ2lzdHJ5LmdldEVsZW1lbnQoZGF0YXNldEVsZW1lbnRUeXBlKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG1ldGEuY29udHJvbGxlciA9IG5ldyBDb250cm9sbGVyQ2xhc3ModGhpcywgaSk7XG4gICAgICAgICAgICAgICAgbmV3Q29udHJvbGxlcnMucHVzaChtZXRhLmNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3VwZGF0ZU1ldGFzZXRzKCk7XG4gICAgICAgIHJldHVybiBuZXdDb250cm9sbGVycztcbiAgICB9XG4gX3Jlc2V0RWxlbWVudHMoKSB7XG4gICAgICAgIGVhY2godGhpcy5kYXRhLmRhdGFzZXRzLCAoZGF0YXNldCwgZGF0YXNldEluZGV4KT0+e1xuICAgICAgICAgICAgdGhpcy5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpLmNvbnRyb2xsZXIucmVzZXQoKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfVxuIHJlc2V0KCkge1xuICAgICAgICB0aGlzLl9yZXNldEVsZW1lbnRzKCk7XG4gICAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygncmVzZXQnKTtcbiAgICB9XG4gICAgdXBkYXRlKG1vZGUpIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgICAgIGNvbmZpZy51cGRhdGUoKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX29wdGlvbnMgPSBjb25maWcuY3JlYXRlUmVzb2x2ZXIoY29uZmlnLmNoYXJ0T3B0aW9uU2NvcGVzKCksIHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgICAgICAgY29uc3QgYW5pbXNEaXNhYmxlZCA9IHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCA9ICFvcHRpb25zLmFuaW1hdGlvbjtcbiAgICAgICAgdGhpcy5fdXBkYXRlU2NhbGVzKCk7XG4gICAgICAgIHRoaXMuX2NoZWNrRXZlbnRCaW5kaW5ncygpO1xuICAgICAgICB0aGlzLl91cGRhdGVIaWRkZW5JbmRpY2VzKCk7XG4gICAgICAgIHRoaXMuX3BsdWdpbnMuaW52YWxpZGF0ZSgpO1xuICAgICAgICBpZiAodGhpcy5ub3RpZnlQbHVnaW5zKCdiZWZvcmVVcGRhdGUnLCB7XG4gICAgICAgICAgICBtb2RlLFxuICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgICB9KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdDb250cm9sbGVycyA9IHRoaXMuYnVpbGRPclVwZGF0ZUNvbnRyb2xsZXJzKCk7XG4gICAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRWxlbWVudHNVcGRhdGUnKTtcbiAgICAgICAgbGV0IG1pblBhZGRpbmcgPSAwO1xuICAgICAgICBmb3IobGV0IGkgPSAwLCBpbGVuID0gdGhpcy5kYXRhLmRhdGFzZXRzLmxlbmd0aDsgaSA8IGlsZW47IGkrKyl7XG4gICAgICAgICAgICBjb25zdCB7IGNvbnRyb2xsZXIgIH0gPSB0aGlzLmdldERhdGFzZXRNZXRhKGkpO1xuICAgICAgICAgICAgY29uc3QgcmVzZXQgPSAhYW5pbXNEaXNhYmxlZCAmJiBuZXdDb250cm9sbGVycy5pbmRleE9mKGNvbnRyb2xsZXIpID09PSAtMTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuYnVpbGRPclVwZGF0ZUVsZW1lbnRzKHJlc2V0KTtcbiAgICAgICAgICAgIG1pblBhZGRpbmcgPSBNYXRoLm1heCgrY29udHJvbGxlci5nZXRNYXhPdmVyZmxvdygpLCBtaW5QYWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBtaW5QYWRkaW5nID0gdGhpcy5fbWluUGFkZGluZyA9IG9wdGlvbnMubGF5b3V0LmF1dG9QYWRkaW5nID8gbWluUGFkZGluZyA6IDA7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxheW91dChtaW5QYWRkaW5nKTtcbiAgICAgICAgaWYgKCFhbmltc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICBlYWNoKG5ld0NvbnRyb2xsZXJzLCAoY29udHJvbGxlcik9PntcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnJlc2V0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cGRhdGVEYXRhc2V0cyhtb2RlKTtcbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlclVwZGF0ZScsIHtcbiAgICAgICAgICAgIG1vZGVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2xheWVycy5zb3J0KGNvbXBhcmUyTGV2ZWwoJ3onLCAnX2lkeCcpKTtcbiAgICAgICAgY29uc3QgeyBfYWN0aXZlICwgX2xhc3RFdmVudCAgfSA9IHRoaXM7XG4gICAgICAgIGlmIChfbGFzdEV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9ldmVudEhhbmRsZXIoX2xhc3RFdmVudCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoX2FjdGl2ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhvdmVyU3R5bGVzKF9hY3RpdmUsIF9hY3RpdmUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuIF91cGRhdGVTY2FsZXMoKSB7XG4gICAgICAgIGVhY2godGhpcy5zY2FsZXMsIChzY2FsZSk9PntcbiAgICAgICAgICAgIGxheW91dHMucmVtb3ZlQm94KHRoaXMsIHNjYWxlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZW5zdXJlU2NhbGVzSGF2ZUlEcygpO1xuICAgICAgICB0aGlzLmJ1aWxkT3JVcGRhdGVTY2FsZXMoKTtcbiAgICB9XG4gX2NoZWNrRXZlbnRCaW5kaW5ncygpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgZXhpc3RpbmdFdmVudHMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKHRoaXMuX2xpc3RlbmVycykpO1xuICAgICAgICBjb25zdCBuZXdFdmVudHMgPSBuZXcgU2V0KG9wdGlvbnMuZXZlbnRzKTtcbiAgICAgICAgaWYgKCFzZXRzRXF1YWwoZXhpc3RpbmdFdmVudHMsIG5ld0V2ZW50cykgfHwgISF0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzICE9PSBvcHRpb25zLnJlc3BvbnNpdmUpIHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRXZlbnRzKCk7XG4gICAgICAgICAgICB0aGlzLmJpbmRFdmVudHMoKTtcbiAgICAgICAgfVxuICAgIH1cbiBfdXBkYXRlSGlkZGVuSW5kaWNlcygpIHtcbiAgICAgICAgY29uc3QgeyBfaGlkZGVuSW5kaWNlcyAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLl9nZXRVbmlmb3JtRGF0YUNoYW5nZXMoKSB8fCBbXTtcbiAgICAgICAgZm9yIChjb25zdCB7IG1ldGhvZCAsIHN0YXJ0ICwgY291bnQgIH0gb2YgY2hhbmdlcyl7XG4gICAgICAgICAgICBjb25zdCBtb3ZlID0gbWV0aG9kID09PSAnX3JlbW92ZUVsZW1lbnRzJyA/IC1jb3VudCA6IGNvdW50O1xuICAgICAgICAgICAgbW92ZU51bWVyaWNLZXlzKF9oaWRkZW5JbmRpY2VzLCBzdGFydCwgbW92ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gX2dldFVuaWZvcm1EYXRhQ2hhbmdlcygpIHtcbiAgICAgICAgY29uc3QgX2RhdGFDaGFuZ2VzID0gdGhpcy5fZGF0YUNoYW5nZXM7XG4gICAgICAgIGlmICghX2RhdGFDaGFuZ2VzIHx8ICFfZGF0YUNoYW5nZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGF0YUNoYW5nZXMgPSBbXTtcbiAgICAgICAgY29uc3QgZGF0YXNldENvdW50ID0gdGhpcy5kYXRhLmRhdGFzZXRzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbWFrZVNldCA9IChpZHgpPT5uZXcgU2V0KF9kYXRhQ2hhbmdlcy5maWx0ZXIoKGMpPT5jWzBdID09PSBpZHgpLm1hcCgoYywgaSk9PmkgKyAnLCcgKyBjLnNwbGljZSgxKS5qb2luKCcsJykpKTtcbiAgICAgICAgY29uc3QgY2hhbmdlU2V0ID0gbWFrZVNldCgwKTtcbiAgICAgICAgZm9yKGxldCBpID0gMTsgaSA8IGRhdGFzZXRDb3VudDsgaSsrKXtcbiAgICAgICAgICAgIGlmICghc2V0c0VxdWFsKGNoYW5nZVNldCwgbWFrZVNldChpKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oY2hhbmdlU2V0KS5tYXAoKGMpPT5jLnNwbGl0KCcsJykpLm1hcCgoYSk9Pih7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBhWzFdLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiArYVsyXSxcbiAgICAgICAgICAgICAgICBjb3VudDogK2FbM11cbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG4gX3VwZGF0ZUxheW91dChtaW5QYWRkaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLm5vdGlmeVBsdWdpbnMoJ2JlZm9yZUxheW91dCcsIHtcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgICAgfSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGF5b3V0cy51cGRhdGUodGhpcywgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG1pblBhZGRpbmcpO1xuICAgICAgICBjb25zdCBhcmVhID0gdGhpcy5jaGFydEFyZWE7XG4gICAgICAgIGNvbnN0IG5vQXJlYSA9IGFyZWEud2lkdGggPD0gMCB8fCBhcmVhLmhlaWdodCA8PSAwO1xuICAgICAgICB0aGlzLl9sYXllcnMgPSBbXTtcbiAgICAgICAgZWFjaCh0aGlzLmJveGVzLCAoYm94KT0+e1xuICAgICAgICAgICAgaWYgKG5vQXJlYSAmJiBib3gucG9zaXRpb24gPT09ICdjaGFydEFyZWEnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJveC5jb25maWd1cmUpIHtcbiAgICAgICAgICAgICAgICBib3guY29uZmlndXJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9sYXllcnMucHVzaCguLi5ib3guX2xheWVycygpKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIHRoaXMuX2xheWVycy5mb3JFYWNoKChpdGVtLCBpbmRleCk9PntcbiAgICAgICAgICAgIGl0ZW0uX2lkeCA9IGluZGV4O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckxheW91dCcpO1xuICAgIH1cbiBfdXBkYXRlRGF0YXNldHMobW9kZSkge1xuICAgICAgICBpZiAodGhpcy5ub3RpZnlQbHVnaW5zKCdiZWZvcmVEYXRhc2V0c1VwZGF0ZScsIHtcbiAgICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgICAgIH0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvcihsZXQgaSA9IDAsIGlsZW4gPSB0aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YXNldE1ldGEoaSkuY29udHJvbGxlci5jb25maWd1cmUoKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IobGV0IGkgPSAwLCBpbGVuID0gdGhpcy5kYXRhLmRhdGFzZXRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVEYXRhc2V0KGksIGlzRnVuY3Rpb24obW9kZSkgPyBtb2RlKHtcbiAgICAgICAgICAgICAgICBkYXRhc2V0SW5kZXg6IGlcbiAgICAgICAgICAgIH0pIDogbW9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckRhdGFzZXRzVXBkYXRlJywge1xuICAgICAgICAgICAgbW9kZVxuICAgICAgICB9KTtcbiAgICB9XG4gX3VwZGF0ZURhdGFzZXQoaW5kZXgsIG1vZGUpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuZ2V0RGF0YXNldE1ldGEoaW5kZXgpO1xuICAgICAgICBjb25zdCBhcmdzID0ge1xuICAgICAgICAgICAgbWV0YSxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgbW9kZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRGF0YXNldFVwZGF0ZScsIGFyZ3MpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG1ldGEuY29udHJvbGxlci5fdXBkYXRlKG1vZGUpO1xuICAgICAgICBhcmdzLmNhbmNlbGFibGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckRhdGFzZXRVcGRhdGUnLCBhcmdzKTtcbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBpZiAodGhpcy5ub3RpZnlQbHVnaW5zKCdiZWZvcmVSZW5kZXInLCB7XG4gICAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgICAgIH0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbmltYXRvci5oYXModGhpcykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaGVkICYmICFhbmltYXRvci5ydW5uaW5nKHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgYW5pbWF0b3Iuc3RhcnQodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgICAgIG9uQW5pbWF0aW9uc0NvbXBsZXRlKHtcbiAgICAgICAgICAgICAgICBjaGFydDogdGhpc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZHJhdygpIHtcbiAgICAgICAgbGV0IGk7XG4gICAgICAgIGlmICh0aGlzLl9yZXNpemVCZWZvcmVEcmF3KSB7XG4gICAgICAgICAgICBjb25zdCB7IHdpZHRoICwgaGVpZ2h0ICB9ID0gdGhpcy5fcmVzaXplQmVmb3JlRHJhdztcbiAgICAgICAgICAgIHRoaXMuX3Jlc2l6ZUJlZm9yZURyYXcgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fcmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRHJhdycsIHtcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgICAgfSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGF5ZXJzID0gdGhpcy5fbGF5ZXJzO1xuICAgICAgICBmb3IoaSA9IDA7IGkgPCBsYXllcnMubGVuZ3RoICYmIGxheWVyc1tpXS56IDw9IDA7ICsraSl7XG4gICAgICAgICAgICBsYXllcnNbaV0uZHJhdyh0aGlzLmNoYXJ0QXJlYSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZHJhd0RhdGFzZXRzKCk7XG4gICAgICAgIGZvcig7IGkgPCBsYXllcnMubGVuZ3RoOyArK2kpe1xuICAgICAgICAgICAgbGF5ZXJzW2ldLmRyYXcodGhpcy5jaGFydEFyZWEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYWZ0ZXJEcmF3Jyk7XG4gICAgfVxuIF9nZXRTb3J0ZWREYXRhc2V0TWV0YXMoZmlsdGVyVmlzaWJsZSkge1xuICAgICAgICBjb25zdCBtZXRhc2V0cyA9IHRoaXMuX3NvcnRlZE1ldGFzZXRzO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IGksIGlsZW47XG4gICAgICAgIGZvcihpID0gMCwgaWxlbiA9IG1ldGFzZXRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBjb25zdCBtZXRhID0gbWV0YXNldHNbaV07XG4gICAgICAgICAgICBpZiAoIWZpbHRlclZpc2libGUgfHwgbWV0YS52aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobWV0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFNvcnRlZERhdGFzZXRNZXRhcyh0cnVlKTtcbiAgICB9XG4gX2RyYXdEYXRhc2V0cygpIHtcbiAgICAgICAgaWYgKHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRGF0YXNldHNEcmF3Jywge1xuICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgICB9KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXRhc2V0cyA9IHRoaXMuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpO1xuICAgICAgICBmb3IobGV0IGkgPSBtZXRhc2V0cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSl7XG4gICAgICAgICAgICB0aGlzLl9kcmF3RGF0YXNldChtZXRhc2V0c1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckRhdGFzZXRzRHJhdycpO1xuICAgIH1cbiBfZHJhd0RhdGFzZXQobWV0YSkge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgY29uc3QgY2xpcCA9IG1ldGEuX2NsaXA7XG4gICAgICAgIGNvbnN0IHVzZUNsaXAgPSAhY2xpcC5kaXNhYmxlZDtcbiAgICAgICAgY29uc3QgYXJlYSA9IGdldERhdGFzZXRBcmVhKG1ldGEsIHRoaXMuY2hhcnRBcmVhKTtcbiAgICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgICAgIG1ldGEsXG4gICAgICAgICAgICBpbmRleDogbWV0YS5pbmRleCxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRGF0YXNldERyYXcnLCBhcmdzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXNlQ2xpcCkge1xuICAgICAgICAgICAgY2xpcEFyZWEoY3R4LCB7XG4gICAgICAgICAgICAgICAgbGVmdDogY2xpcC5sZWZ0ID09PSBmYWxzZSA/IDAgOiBhcmVhLmxlZnQgLSBjbGlwLmxlZnQsXG4gICAgICAgICAgICAgICAgcmlnaHQ6IGNsaXAucmlnaHQgPT09IGZhbHNlID8gdGhpcy53aWR0aCA6IGFyZWEucmlnaHQgKyBjbGlwLnJpZ2h0LFxuICAgICAgICAgICAgICAgIHRvcDogY2xpcC50b3AgPT09IGZhbHNlID8gMCA6IGFyZWEudG9wIC0gY2xpcC50b3AsXG4gICAgICAgICAgICAgICAgYm90dG9tOiBjbGlwLmJvdHRvbSA9PT0gZmFsc2UgPyB0aGlzLmhlaWdodCA6IGFyZWEuYm90dG9tICsgY2xpcC5ib3R0b21cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG1ldGEuY29udHJvbGxlci5kcmF3KCk7XG4gICAgICAgIGlmICh1c2VDbGlwKSB7XG4gICAgICAgICAgICB1bmNsaXBBcmVhKGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgYXJncy5jYW5jZWxhYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYWZ0ZXJEYXRhc2V0RHJhdycsIGFyZ3MpO1xuICAgIH1cbiBpc1BvaW50SW5BcmVhKHBvaW50KSB7XG4gICAgICAgIHJldHVybiBfaXNQb2ludEluQXJlYShwb2ludCwgdGhpcy5jaGFydEFyZWEsIHRoaXMuX21pblBhZGRpbmcpO1xuICAgIH1cbiAgICBnZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlKGUsIG1vZGUsIG9wdGlvbnMsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgbWV0aG9kID0gSW50ZXJhY3Rpb24ubW9kZXNbbW9kZV07XG4gICAgICAgIGlmICh0eXBlb2YgbWV0aG9kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gbWV0aG9kKHRoaXMsIGUsIG9wdGlvbnMsIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KSB7XG4gICAgICAgIGNvbnN0IGRhdGFzZXQgPSB0aGlzLmRhdGEuZGF0YXNldHNbZGF0YXNldEluZGV4XTtcbiAgICAgICAgY29uc3QgbWV0YXNldHMgPSB0aGlzLl9tZXRhc2V0cztcbiAgICAgICAgbGV0IG1ldGEgPSBtZXRhc2V0cy5maWx0ZXIoKHgpPT54ICYmIHguX2RhdGFzZXQgPT09IGRhdGFzZXQpLnBvcCgpO1xuICAgICAgICBpZiAoIW1ldGEpIHtcbiAgICAgICAgICAgIG1ldGEgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgICAgICAgICBkYXRhOiBbXSxcbiAgICAgICAgICAgICAgICBkYXRhc2V0OiBudWxsLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiBudWxsLFxuICAgICAgICAgICAgICAgIHhBeGlzSUQ6IG51bGwsXG4gICAgICAgICAgICAgICAgeUF4aXNJRDogbnVsbCxcbiAgICAgICAgICAgICAgICBvcmRlcjogZGF0YXNldCAmJiBkYXRhc2V0Lm9yZGVyIHx8IDAsXG4gICAgICAgICAgICAgICAgaW5kZXg6IGRhdGFzZXRJbmRleCxcbiAgICAgICAgICAgICAgICBfZGF0YXNldDogZGF0YXNldCxcbiAgICAgICAgICAgICAgICBfcGFyc2VkOiBbXSxcbiAgICAgICAgICAgICAgICBfc29ydGVkOiBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1ldGFzZXRzLnB1c2gobWV0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ldGE7XG4gICAgfVxuICAgIGdldENvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRjb250ZXh0IHx8ICh0aGlzLiRjb250ZXh0ID0gY3JlYXRlQ29udGV4dChudWxsLCB7XG4gICAgICAgICAgICBjaGFydDogdGhpcyxcbiAgICAgICAgICAgIHR5cGU6ICdjaGFydCdcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBnZXRWaXNpYmxlRGF0YXNldENvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzKCkubGVuZ3RoO1xuICAgIH1cbiAgICBpc0RhdGFzZXRWaXNpYmxlKGRhdGFzZXRJbmRleCkge1xuICAgICAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF07XG4gICAgICAgIGlmICghZGF0YXNldCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCk7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbWV0YS5oaWRkZW4gPT09ICdib29sZWFuJyA/ICFtZXRhLmhpZGRlbiA6ICFkYXRhc2V0LmhpZGRlbjtcbiAgICB9XG4gICAgc2V0RGF0YXNldFZpc2liaWxpdHkoZGF0YXNldEluZGV4LCB2aXNpYmxlKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCk7XG4gICAgICAgIG1ldGEuaGlkZGVuID0gIXZpc2libGU7XG4gICAgfVxuICAgIHRvZ2dsZURhdGFWaXNpYmlsaXR5KGluZGV4KSB7XG4gICAgICAgIHRoaXMuX2hpZGRlbkluZGljZXNbaW5kZXhdID0gIXRoaXMuX2hpZGRlbkluZGljZXNbaW5kZXhdO1xuICAgIH1cbiAgICBnZXREYXRhVmlzaWJpbGl0eShpbmRleCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuX2hpZGRlbkluZGljZXNbaW5kZXhdO1xuICAgIH1cbiBfdXBkYXRlVmlzaWJpbGl0eShkYXRhc2V0SW5kZXgsIGRhdGFJbmRleCwgdmlzaWJsZSkge1xuICAgICAgICBjb25zdCBtb2RlID0gdmlzaWJsZSA/ICdzaG93JyA6ICdoaWRlJztcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KTtcbiAgICAgICAgY29uc3QgYW5pbXMgPSBtZXRhLmNvbnRyb2xsZXIuX3Jlc29sdmVBbmltYXRpb25zKHVuZGVmaW5lZCwgbW9kZSk7XG4gICAgICAgIGlmIChkZWZpbmVkKGRhdGFJbmRleCkpIHtcbiAgICAgICAgICAgIG1ldGEuZGF0YVtkYXRhSW5kZXhdLmhpZGRlbiA9ICF2aXNpYmxlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YXNldFZpc2liaWxpdHkoZGF0YXNldEluZGV4LCB2aXNpYmxlKTtcbiAgICAgICAgICAgIGFuaW1zLnVwZGF0ZShtZXRhLCB7XG4gICAgICAgICAgICAgICAgdmlzaWJsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgoY3R4KT0+Y3R4LmRhdGFzZXRJbmRleCA9PT0gZGF0YXNldEluZGV4ID8gbW9kZSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGlkZShkYXRhc2V0SW5kZXgsIGRhdGFJbmRleCkge1xuICAgICAgICB0aGlzLl91cGRhdGVWaXNpYmlsaXR5KGRhdGFzZXRJbmRleCwgZGF0YUluZGV4LCBmYWxzZSk7XG4gICAgfVxuICAgIHNob3coZGF0YXNldEluZGV4LCBkYXRhSW5kZXgpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlzaWJpbGl0eShkYXRhc2V0SW5kZXgsIGRhdGFJbmRleCwgdHJ1ZSk7XG4gICAgfVxuIF9kZXN0cm95RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9tZXRhc2V0c1tkYXRhc2V0SW5kZXhdO1xuICAgICAgICBpZiAobWV0YSAmJiBtZXRhLmNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIG1ldGEuY29udHJvbGxlci5fZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9tZXRhc2V0c1tkYXRhc2V0SW5kZXhdO1xuICAgIH1cbiAgICBfc3RvcCgpIHtcbiAgICAgICAgbGV0IGksIGlsZW47XG4gICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICBhbmltYXRvci5yZW1vdmUodGhpcyk7XG4gICAgICAgIGZvcihpID0gMCwgaWxlbiA9IHRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgdGhpcy5fZGVzdHJveURhdGFzZXRNZXRhKGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRGVzdHJveScpO1xuICAgICAgICBjb25zdCB7IGNhbnZhcyAsIGN0eCAgfSA9IHRoaXM7XG4gICAgICAgIHRoaXMuX3N0b3AoKTtcbiAgICAgICAgdGhpcy5jb25maWcuY2xlYXJDYWNoZSgpO1xuICAgICAgICBpZiAoY2FudmFzKSB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEV2ZW50cygpO1xuICAgICAgICAgICAgY2xlYXJDYW52YXMoY2FudmFzLCBjdHgpO1xuICAgICAgICAgICAgdGhpcy5wbGF0Zm9ybS5yZWxlYXNlQ29udGV4dChjdHgpO1xuICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5jdHggPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBpbnN0YW5jZXNbdGhpcy5pZF07XG4gICAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYWZ0ZXJEZXN0cm95Jyk7XG4gICAgfVxuICAgIHRvQmFzZTY0SW1hZ2UoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMudG9EYXRhVVJMKC4uLmFyZ3MpO1xuICAgIH1cbiBiaW5kRXZlbnRzKCkge1xuICAgICAgICB0aGlzLmJpbmRVc2VyRXZlbnRzKCk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZSkge1xuICAgICAgICAgICAgdGhpcy5iaW5kUmVzcG9uc2l2ZUV2ZW50cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hdHRhY2hlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gYmluZFVzZXJFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycztcbiAgICAgICAgY29uc3QgcGxhdGZvcm0gPSB0aGlzLnBsYXRmb3JtO1xuICAgICAgICBjb25zdCBfYWRkID0gKHR5cGUsIGxpc3RlbmVyKT0+e1xuICAgICAgICAgICAgcGxhdGZvcm0uYWRkRXZlbnRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICBsaXN0ZW5lcnNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAoZSwgeCwgeSk9PntcbiAgICAgICAgICAgIGUub2Zmc2V0WCA9IHg7XG4gICAgICAgICAgICBlLm9mZnNldFkgPSB5O1xuICAgICAgICAgICAgdGhpcy5fZXZlbnRIYW5kbGVyKGUpO1xuICAgICAgICB9O1xuICAgICAgICBlYWNoKHRoaXMub3B0aW9ucy5ldmVudHMsICh0eXBlKT0+X2FkZCh0eXBlLCBsaXN0ZW5lcikpO1xuICAgIH1cbiBiaW5kUmVzcG9uc2l2ZUV2ZW50cygpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5fcmVzcG9uc2l2ZUxpc3RlbmVycztcbiAgICAgICAgY29uc3QgcGxhdGZvcm0gPSB0aGlzLnBsYXRmb3JtO1xuICAgICAgICBjb25zdCBfYWRkID0gKHR5cGUsIGxpc3RlbmVyKT0+e1xuICAgICAgICAgICAgcGxhdGZvcm0uYWRkRXZlbnRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICBsaXN0ZW5lcnNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgX3JlbW92ZSA9ICh0eXBlLCBsaXN0ZW5lcik9PntcbiAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbdHlwZV0pIHtcbiAgICAgICAgICAgICAgICBwbGF0Zm9ybS5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbGlzdGVuZXJzW3R5cGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsaXN0ZW5lciA9ICh3aWR0aCwgaGVpZ2h0KT0+e1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FudmFzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGxldCBkZXRhY2hlZDtcbiAgICAgICAgY29uc3QgYXR0YWNoZWQgPSAoKT0+e1xuICAgICAgICAgICAgX3JlbW92ZSgnYXR0YWNoJywgYXR0YWNoZWQpO1xuICAgICAgICAgICAgdGhpcy5hdHRhY2hlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZSgpO1xuICAgICAgICAgICAgX2FkZCgncmVzaXplJywgbGlzdGVuZXIpO1xuICAgICAgICAgICAgX2FkZCgnZGV0YWNoJywgZGV0YWNoZWQpO1xuICAgICAgICB9O1xuICAgICAgICBkZXRhY2hlZCA9ICgpPT57XG4gICAgICAgICAgICB0aGlzLmF0dGFjaGVkID0gZmFsc2U7XG4gICAgICAgICAgICBfcmVtb3ZlKCdyZXNpemUnLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICB0aGlzLl9zdG9wKCk7XG4gICAgICAgICAgICB0aGlzLl9yZXNpemUoMCwgMCk7XG4gICAgICAgICAgICBfYWRkKCdhdHRhY2gnLCBhdHRhY2hlZCk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChwbGF0Zm9ybS5pc0F0dGFjaGVkKHRoaXMuY2FudmFzKSkge1xuICAgICAgICAgICAgYXR0YWNoZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRldGFjaGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG4gdW5iaW5kRXZlbnRzKCkge1xuICAgICAgICBlYWNoKHRoaXMuX2xpc3RlbmVycywgKGxpc3RlbmVyLCB0eXBlKT0+e1xuICAgICAgICAgICAgdGhpcy5wbGF0Zm9ybS5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xuICAgICAgICBlYWNoKHRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnMsIChsaXN0ZW5lciwgdHlwZSk9PntcbiAgICAgICAgICAgIHRoaXMucGxhdGZvcm0ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lcik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB1cGRhdGVIb3ZlclN0eWxlKGl0ZW1zLCBtb2RlLCBlbmFibGVkKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGVuYWJsZWQgPyAnc2V0JyA6ICdyZW1vdmUnO1xuICAgICAgICBsZXQgbWV0YSwgaXRlbSwgaSwgaWxlbjtcbiAgICAgICAgaWYgKG1vZGUgPT09ICdkYXRhc2V0Jykge1xuICAgICAgICAgICAgbWV0YSA9IHRoaXMuZ2V0RGF0YXNldE1ldGEoaXRlbXNbMF0uZGF0YXNldEluZGV4KTtcbiAgICAgICAgICAgIG1ldGEuY29udHJvbGxlclsnXycgKyBwcmVmaXggKyAnRGF0YXNldEhvdmVyU3R5bGUnXSgpO1xuICAgICAgICB9XG4gICAgICAgIGZvcihpID0gMCwgaWxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gaXRlbSAmJiB0aGlzLmdldERhdGFzZXRNZXRhKGl0ZW0uZGF0YXNldEluZGV4KS5jb250cm9sbGVyO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyW3ByZWZpeCArICdIb3ZlclN0eWxlJ10oaXRlbS5lbGVtZW50LCBpdGVtLmRhdGFzZXRJbmRleCwgaXRlbS5pbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gZ2V0QWN0aXZlRWxlbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmUgfHwgW107XG4gICAgfVxuIHNldEFjdGl2ZUVsZW1lbnRzKGFjdGl2ZUVsZW1lbnRzKSB7XG4gICAgICAgIGNvbnN0IGxhc3RBY3RpdmUgPSB0aGlzLl9hY3RpdmUgfHwgW107XG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9IGFjdGl2ZUVsZW1lbnRzLm1hcCgoeyBkYXRhc2V0SW5kZXggLCBpbmRleCAgfSk9PntcbiAgICAgICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCk7XG4gICAgICAgICAgICBpZiAoIW1ldGEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGRhdGFzZXQgZm91bmQgYXQgaW5kZXggJyArIGRhdGFzZXRJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGFzZXRJbmRleCxcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBtZXRhLmRhdGFbaW5kZXhdLFxuICAgICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9ICFfZWxlbWVudHNFcXVhbChhY3RpdmUsIGxhc3RBY3RpdmUpO1xuICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlID0gYWN0aXZlO1xuICAgICAgICAgICAgdGhpcy5fbGFzdEV2ZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhvdmVyU3R5bGVzKGFjdGl2ZSwgbGFzdEFjdGl2ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gbm90aWZ5UGx1Z2lucyhob29rLCBhcmdzLCBmaWx0ZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsdWdpbnMubm90aWZ5KHRoaXMsIGhvb2ssIGFyZ3MsIGZpbHRlcik7XG4gICAgfVxuIGlzUGx1Z2luRW5hYmxlZChwbHVnaW5JZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGx1Z2lucy5fY2FjaGUuZmlsdGVyKChwKT0+cC5wbHVnaW4uaWQgPT09IHBsdWdpbklkKS5sZW5ndGggPT09IDE7XG4gICAgfVxuIF91cGRhdGVIb3ZlclN0eWxlcyhhY3RpdmUsIGxhc3RBY3RpdmUsIHJlcGxheSkge1xuICAgICAgICBjb25zdCBob3Zlck9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuaG92ZXI7XG4gICAgICAgIGNvbnN0IGRpZmYgPSAoYSwgYik9PmEuZmlsdGVyKCh4KT0+IWIuc29tZSgoeSk9PnguZGF0YXNldEluZGV4ID09PSB5LmRhdGFzZXRJbmRleCAmJiB4LmluZGV4ID09PSB5LmluZGV4KSk7XG4gICAgICAgIGNvbnN0IGRlYWN0aXZhdGVkID0gZGlmZihsYXN0QWN0aXZlLCBhY3RpdmUpO1xuICAgICAgICBjb25zdCBhY3RpdmF0ZWQgPSByZXBsYXkgPyBhY3RpdmUgOiBkaWZmKGFjdGl2ZSwgbGFzdEFjdGl2ZSk7XG4gICAgICAgIGlmIChkZWFjdGl2YXRlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSG92ZXJTdHlsZShkZWFjdGl2YXRlZCwgaG92ZXJPcHRpb25zLm1vZGUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aXZhdGVkLmxlbmd0aCAmJiBob3Zlck9wdGlvbnMubW9kZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVIb3ZlclN0eWxlKGFjdGl2YXRlZCwgaG92ZXJPcHRpb25zLm1vZGUsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuIF9ldmVudEhhbmRsZXIoZSwgcmVwbGF5KSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICAgICAgICBldmVudDogZSxcbiAgICAgICAgICAgIHJlcGxheSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgICAgICBpbkNoYXJ0QXJlYTogdGhpcy5pc1BvaW50SW5BcmVhKGUpXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGV2ZW50RmlsdGVyID0gKHBsdWdpbik9PihwbHVnaW4ub3B0aW9ucy5ldmVudHMgfHwgdGhpcy5vcHRpb25zLmV2ZW50cykuaW5jbHVkZXMoZS5uYXRpdmUudHlwZSk7XG4gICAgICAgIGlmICh0aGlzLm5vdGlmeVBsdWdpbnMoJ2JlZm9yZUV2ZW50JywgYXJncywgZXZlbnRGaWx0ZXIpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLl9oYW5kbGVFdmVudChlLCByZXBsYXksIGFyZ3MuaW5DaGFydEFyZWEpO1xuICAgICAgICBhcmdzLmNhbmNlbGFibGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckV2ZW50JywgYXJncywgZXZlbnRGaWx0ZXIpO1xuICAgICAgICBpZiAoY2hhbmdlZCB8fCBhcmdzLmNoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuIF9oYW5kbGVFdmVudChlLCByZXBsYXksIGluQ2hhcnRBcmVhKSB7XG4gICAgICAgIGNvbnN0IHsgX2FjdGl2ZTogbGFzdEFjdGl2ZSA9IFtdICwgb3B0aW9ucyAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHVzZUZpbmFsUG9zaXRpb24gPSByZXBsYXk7XG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuX2dldEFjdGl2ZUVsZW1lbnRzKGUsIGxhc3RBY3RpdmUsIGluQ2hhcnRBcmVhLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgaXNDbGljayA9IF9pc0NsaWNrRXZlbnQoZSk7XG4gICAgICAgIGNvbnN0IGxhc3RFdmVudCA9IGRldGVybWluZUxhc3RFdmVudChlLCB0aGlzLl9sYXN0RXZlbnQsIGluQ2hhcnRBcmVhLCBpc0NsaWNrKTtcbiAgICAgICAgaWYgKGluQ2hhcnRBcmVhKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXN0RXZlbnQgPSBudWxsO1xuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucy5vbkhvdmVyLCBbXG4gICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICBhY3RpdmUsXG4gICAgICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgICAgICBpZiAoaXNDbGljaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMub25DbGljaywgW1xuICAgICAgICAgICAgICAgICAgICBlLFxuICAgICAgICAgICAgICAgICAgICBhY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICAgICBdLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGFuZ2VkID0gIV9lbGVtZW50c0VxdWFsKGFjdGl2ZSwgbGFzdEFjdGl2ZSk7XG4gICAgICAgIGlmIChjaGFuZ2VkIHx8IHJlcGxheSkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlID0gYWN0aXZlO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlSG92ZXJTdHlsZXMoYWN0aXZlLCBsYXN0QWN0aXZlLCByZXBsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xhc3RFdmVudCA9IGxhc3RFdmVudDtcbiAgICAgICAgcmV0dXJuIGNoYW5nZWQ7XG4gICAgfVxuIF9nZXRBY3RpdmVFbGVtZW50cyhlLCBsYXN0QWN0aXZlLCBpbkNoYXJ0QXJlYSwgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICBpZiAoZS50eXBlID09PSAnbW91c2VvdXQnKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbkNoYXJ0QXJlYSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RBY3RpdmU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaG92ZXJPcHRpb25zID0gdGhpcy5vcHRpb25zLmhvdmVyO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlKGUsIGhvdmVyT3B0aW9ucy5tb2RlLCBob3Zlck9wdGlvbnMsIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGludmFsaWRhdGVQbHVnaW5zKCkge1xuICAgIHJldHVybiBlYWNoKENoYXJ0Lmluc3RhbmNlcywgKGNoYXJ0KT0+Y2hhcnQuX3BsdWdpbnMuaW52YWxpZGF0ZSgpKTtcbn1cblxuZnVuY3Rpb24gY2xpcEFyYyhjdHgsIGVsZW1lbnQsIGVuZEFuZ2xlKSB7XG4gICAgY29uc3QgeyBzdGFydEFuZ2xlICwgcGl4ZWxNYXJnaW4gLCB4ICwgeSAsIG91dGVyUmFkaXVzICwgaW5uZXJSYWRpdXMgIH0gPSBlbGVtZW50O1xuICAgIGxldCBhbmdsZU1hcmdpbiA9IHBpeGVsTWFyZ2luIC8gb3V0ZXJSYWRpdXM7XG4gICAgLy8gRHJhdyBhbiBpbm5lciBib3JkZXIgYnkgY2xpcHBpbmcgdGhlIGFyYyBhbmQgZHJhd2luZyBhIGRvdWJsZS13aWR0aCBib3JkZXJcbiAgICAvLyBFbmxhcmdlIHRoZSBjbGlwcGluZyBhcmMgYnkgMC4zMyBwaXhlbHMgdG8gZWxpbWluYXRlIGdsaXRjaGVzIGJldHdlZW4gYm9yZGVyc1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHguYXJjKHgsIHksIG91dGVyUmFkaXVzLCBzdGFydEFuZ2xlIC0gYW5nbGVNYXJnaW4sIGVuZEFuZ2xlICsgYW5nbGVNYXJnaW4pO1xuICAgIGlmIChpbm5lclJhZGl1cyA+IHBpeGVsTWFyZ2luKSB7XG4gICAgICAgIGFuZ2xlTWFyZ2luID0gcGl4ZWxNYXJnaW4gLyBpbm5lclJhZGl1cztcbiAgICAgICAgY3R4LmFyYyh4LCB5LCBpbm5lclJhZGl1cywgZW5kQW5nbGUgKyBhbmdsZU1hcmdpbiwgc3RhcnRBbmdsZSAtIGFuZ2xlTWFyZ2luLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjdHguYXJjKHgsIHksIHBpeGVsTWFyZ2luLCBlbmRBbmdsZSArIEhBTEZfUEksIHN0YXJ0QW5nbGUgLSBIQUxGX1BJKTtcbiAgICB9XG4gICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgIGN0eC5jbGlwKCk7XG59XG5mdW5jdGlvbiB0b1JhZGl1c0Nvcm5lcnModmFsdWUpIHtcbiAgICByZXR1cm4gX3JlYWRWYWx1ZVRvUHJvcHModmFsdWUsIFtcbiAgICAgICAgJ291dGVyU3RhcnQnLFxuICAgICAgICAnb3V0ZXJFbmQnLFxuICAgICAgICAnaW5uZXJTdGFydCcsXG4gICAgICAgICdpbm5lckVuZCdcbiAgICBdKTtcbn1cbi8qKlxuICogUGFyc2UgYm9yZGVyIHJhZGl1cyBmcm9tIHRoZSBwcm92aWRlZCBvcHRpb25zXG4gKi8gZnVuY3Rpb24gcGFyc2VCb3JkZXJSYWRpdXMkMShhcmMsIGlubmVyUmFkaXVzLCBvdXRlclJhZGl1cywgYW5nbGVEZWx0YSkge1xuICAgIGNvbnN0IG8gPSB0b1JhZGl1c0Nvcm5lcnMoYXJjLm9wdGlvbnMuYm9yZGVyUmFkaXVzKTtcbiAgICBjb25zdCBoYWxmVGhpY2tuZXNzID0gKG91dGVyUmFkaXVzIC0gaW5uZXJSYWRpdXMpIC8gMjtcbiAgICBjb25zdCBpbm5lckxpbWl0ID0gTWF0aC5taW4oaGFsZlRoaWNrbmVzcywgYW5nbGVEZWx0YSAqIGlubmVyUmFkaXVzIC8gMik7XG4gICAgLy8gT3V0ZXIgbGltaXRzIGFyZSBjb21wbGljYXRlZC4gV2Ugd2FudCB0byBjb21wdXRlIHRoZSBhdmFpbGFibGUgYW5ndWxhciBkaXN0YW5jZSBhdFxuICAgIC8vIGEgcmFkaXVzIG9mIG91dGVyUmFkaXVzIC0gYm9yZGVyUmFkaXVzIGJlY2F1c2UgZm9yIHNtYWxsIGFuZ3VsYXIgZGlzdGFuY2VzLCB0aGlzIHRlcm0gbGltaXRzLlxuICAgIC8vIFdlIGNvbXB1dGUgYXQgciA9IG91dGVyUmFkaXVzIC0gYm9yZGVyUmFkaXVzIGJlY2F1c2UgdGhpcyBjaXJjbGUgZGVmaW5lcyB0aGUgY2VudGVyIG9mIHRoZSBib3JkZXIgY29ybmVycy5cbiAgICAvL1xuICAgIC8vIElmIHRoZSBib3JkZXJSYWRpdXMgaXMgbGFyZ2UsIHRoYXQgdmFsdWUgY2FuIGJlY29tZSBuZWdhdGl2ZS5cbiAgICAvLyBUaGlzIGNhdXNlcyB0aGUgb3V0ZXIgYm9yZGVycyB0byBsb3NlIHRoZWlyIHJhZGl1cyBlbnRpcmVseSwgd2hpY2ggaXMgcmF0aGVyIHVuZXhwZWN0ZWQuIFRvIHNvbHZlIHRoYXQsIGlmIGJvcmRlclJhZGl1cyA+IG91dGVyUmFkaXVzXG4gICAgLy8gd2Uga25vdyB0aGF0IHRoZSB0aGlja25lc3MgdGVybSB3aWxsIGRvbWluYXRlIGFuZCBjb21wdXRlIHRoZSBsaW1pdHMgYXQgdGhhdCBwb2ludFxuICAgIGNvbnN0IGNvbXB1dGVPdXRlckxpbWl0ID0gKHZhbCk9PntcbiAgICAgICAgY29uc3Qgb3V0ZXJBcmNMaW1pdCA9IChvdXRlclJhZGl1cyAtIE1hdGgubWluKGhhbGZUaGlja25lc3MsIHZhbCkpICogYW5nbGVEZWx0YSAvIDI7XG4gICAgICAgIHJldHVybiBfbGltaXRWYWx1ZSh2YWwsIDAsIE1hdGgubWluKGhhbGZUaGlja25lc3MsIG91dGVyQXJjTGltaXQpKTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIG91dGVyU3RhcnQ6IGNvbXB1dGVPdXRlckxpbWl0KG8ub3V0ZXJTdGFydCksXG4gICAgICAgIG91dGVyRW5kOiBjb21wdXRlT3V0ZXJMaW1pdChvLm91dGVyRW5kKSxcbiAgICAgICAgaW5uZXJTdGFydDogX2xpbWl0VmFsdWUoby5pbm5lclN0YXJ0LCAwLCBpbm5lckxpbWl0KSxcbiAgICAgICAgaW5uZXJFbmQ6IF9saW1pdFZhbHVlKG8uaW5uZXJFbmQsIDAsIGlubmVyTGltaXQpXG4gICAgfTtcbn1cbi8qKlxuICogQ29udmVydCAociwg8J2cgykgdG8gKHgsIHkpXG4gKi8gZnVuY3Rpb24gclRoZXRhVG9YWShyLCB0aGV0YSwgeCwgeSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHggKyByICogTWF0aC5jb3ModGhldGEpLFxuICAgICAgICB5OiB5ICsgciAqIE1hdGguc2luKHRoZXRhKVxuICAgIH07XG59XG4vKipcbiAqIFBhdGggdGhlIGFyYywgcmVzcGVjdGluZyBib3JkZXIgcmFkaXVzIGJ5IHNlcGFyYXRpbmcgaW50byBsZWZ0IGFuZCByaWdodCBoYWx2ZXMuXG4gKlxuICogICBTdGFydCAgICAgIEVuZFxuICpcbiAqICAgIDEtLS0+YS0tLT4yICAgIE91dGVyXG4gKiAgIC8gICAgICAgICAgIFxcXG4gKiAgIDggICAgICAgICAgIDNcbiAqICAgfCAgICAgICAgICAgfFxuICogICB8ICAgICAgICAgICB8XG4gKiAgIDcgICAgICAgICAgIDRcbiAqICAgXFwgICAgICAgICAgIC9cbiAqICAgIDY8LS0tYjwtLS01ICAgIElubmVyXG4gKi8gZnVuY3Rpb24gcGF0aEFyYyhjdHgsIGVsZW1lbnQsIG9mZnNldCwgc3BhY2luZywgZW5kLCBjaXJjdWxhcikge1xuICAgIGNvbnN0IHsgeCAsIHkgLCBzdGFydEFuZ2xlOiBzdGFydCAsIHBpeGVsTWFyZ2luICwgaW5uZXJSYWRpdXM6IGlubmVyUiAgfSA9IGVsZW1lbnQ7XG4gICAgY29uc3Qgb3V0ZXJSYWRpdXMgPSBNYXRoLm1heChlbGVtZW50Lm91dGVyUmFkaXVzICsgc3BhY2luZyArIG9mZnNldCAtIHBpeGVsTWFyZ2luLCAwKTtcbiAgICBjb25zdCBpbm5lclJhZGl1cyA9IGlubmVyUiA+IDAgPyBpbm5lclIgKyBzcGFjaW5nICsgb2Zmc2V0ICsgcGl4ZWxNYXJnaW4gOiAwO1xuICAgIGxldCBzcGFjaW5nT2Zmc2V0ID0gMDtcbiAgICBjb25zdCBhbHBoYSA9IGVuZCAtIHN0YXJ0O1xuICAgIGlmIChzcGFjaW5nKSB7XG4gICAgICAgIC8vIFdoZW4gc3BhY2luZyBpcyBwcmVzZW50LCBpdCBpcyB0aGUgc2FtZSBmb3IgYWxsIGl0ZW1zXG4gICAgICAgIC8vIFNvIHdlIGFkanVzdCB0aGUgc3RhcnQgYW5kIGVuZCBhbmdsZSBvZiB0aGUgYXJjIHN1Y2ggdGhhdFxuICAgICAgICAvLyB0aGUgZGlzdGFuY2UgaXMgdGhlIHNhbWUgYXMgaXQgd291bGQgYmUgd2l0aG91dCB0aGUgc3BhY2luZ1xuICAgICAgICBjb25zdCBub1NwYWNpbmdJbm5lclJhZGl1cyA9IGlubmVyUiA+IDAgPyBpbm5lclIgLSBzcGFjaW5nIDogMDtcbiAgICAgICAgY29uc3Qgbm9TcGFjaW5nT3V0ZXJSYWRpdXMgPSBvdXRlclJhZGl1cyA+IDAgPyBvdXRlclJhZGl1cyAtIHNwYWNpbmcgOiAwO1xuICAgICAgICBjb25zdCBhdk5vZ1NwYWNpbmdSYWRpdXMgPSAobm9TcGFjaW5nSW5uZXJSYWRpdXMgKyBub1NwYWNpbmdPdXRlclJhZGl1cykgLyAyO1xuICAgICAgICBjb25zdCBhZGp1c3RlZEFuZ2xlID0gYXZOb2dTcGFjaW5nUmFkaXVzICE9PSAwID8gYWxwaGEgKiBhdk5vZ1NwYWNpbmdSYWRpdXMgLyAoYXZOb2dTcGFjaW5nUmFkaXVzICsgc3BhY2luZykgOiBhbHBoYTtcbiAgICAgICAgc3BhY2luZ09mZnNldCA9IChhbHBoYSAtIGFkanVzdGVkQW5nbGUpIC8gMjtcbiAgICB9XG4gICAgY29uc3QgYmV0YSA9IE1hdGgubWF4KDAuMDAxLCBhbHBoYSAqIG91dGVyUmFkaXVzIC0gb2Zmc2V0IC8gUEkpIC8gb3V0ZXJSYWRpdXM7XG4gICAgY29uc3QgYW5nbGVPZmZzZXQgPSAoYWxwaGEgLSBiZXRhKSAvIDI7XG4gICAgY29uc3Qgc3RhcnRBbmdsZSA9IHN0YXJ0ICsgYW5nbGVPZmZzZXQgKyBzcGFjaW5nT2Zmc2V0O1xuICAgIGNvbnN0IGVuZEFuZ2xlID0gZW5kIC0gYW5nbGVPZmZzZXQgLSBzcGFjaW5nT2Zmc2V0O1xuICAgIGNvbnN0IHsgb3V0ZXJTdGFydCAsIG91dGVyRW5kICwgaW5uZXJTdGFydCAsIGlubmVyRW5kICB9ID0gcGFyc2VCb3JkZXJSYWRpdXMkMShlbGVtZW50LCBpbm5lclJhZGl1cywgb3V0ZXJSYWRpdXMsIGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gICAgY29uc3Qgb3V0ZXJTdGFydEFkanVzdGVkUmFkaXVzID0gb3V0ZXJSYWRpdXMgLSBvdXRlclN0YXJ0O1xuICAgIGNvbnN0IG91dGVyRW5kQWRqdXN0ZWRSYWRpdXMgPSBvdXRlclJhZGl1cyAtIG91dGVyRW5kO1xuICAgIGNvbnN0IG91dGVyU3RhcnRBZGp1c3RlZEFuZ2xlID0gc3RhcnRBbmdsZSArIG91dGVyU3RhcnQgLyBvdXRlclN0YXJ0QWRqdXN0ZWRSYWRpdXM7XG4gICAgY29uc3Qgb3V0ZXJFbmRBZGp1c3RlZEFuZ2xlID0gZW5kQW5nbGUgLSBvdXRlckVuZCAvIG91dGVyRW5kQWRqdXN0ZWRSYWRpdXM7XG4gICAgY29uc3QgaW5uZXJTdGFydEFkanVzdGVkUmFkaXVzID0gaW5uZXJSYWRpdXMgKyBpbm5lclN0YXJ0O1xuICAgIGNvbnN0IGlubmVyRW5kQWRqdXN0ZWRSYWRpdXMgPSBpbm5lclJhZGl1cyArIGlubmVyRW5kO1xuICAgIGNvbnN0IGlubmVyU3RhcnRBZGp1c3RlZEFuZ2xlID0gc3RhcnRBbmdsZSArIGlubmVyU3RhcnQgLyBpbm5lclN0YXJ0QWRqdXN0ZWRSYWRpdXM7XG4gICAgY29uc3QgaW5uZXJFbmRBZGp1c3RlZEFuZ2xlID0gZW5kQW5nbGUgLSBpbm5lckVuZCAvIGlubmVyRW5kQWRqdXN0ZWRSYWRpdXM7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGlmIChjaXJjdWxhcikge1xuICAgICAgICAvLyBUaGUgZmlyc3QgYXJjIHNlZ21lbnRzIGZyb20gcG9pbnQgMSB0byBwb2ludCBhIHRvIHBvaW50IDJcbiAgICAgICAgY29uc3Qgb3V0ZXJNaWRBZGp1c3RlZEFuZ2xlID0gKG91dGVyU3RhcnRBZGp1c3RlZEFuZ2xlICsgb3V0ZXJFbmRBZGp1c3RlZEFuZ2xlKSAvIDI7XG4gICAgICAgIGN0eC5hcmMoeCwgeSwgb3V0ZXJSYWRpdXMsIG91dGVyU3RhcnRBZGp1c3RlZEFuZ2xlLCBvdXRlck1pZEFkanVzdGVkQW5nbGUpO1xuICAgICAgICBjdHguYXJjKHgsIHksIG91dGVyUmFkaXVzLCBvdXRlck1pZEFkanVzdGVkQW5nbGUsIG91dGVyRW5kQWRqdXN0ZWRBbmdsZSk7XG4gICAgICAgIC8vIFRoZSBjb3JuZXIgc2VnbWVudCBmcm9tIHBvaW50IDIgdG8gcG9pbnQgM1xuICAgICAgICBpZiAob3V0ZXJFbmQgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBwQ2VudGVyID0gclRoZXRhVG9YWShvdXRlckVuZEFkanVzdGVkUmFkaXVzLCBvdXRlckVuZEFkanVzdGVkQW5nbGUsIHgsIHkpO1xuICAgICAgICAgICAgY3R4LmFyYyhwQ2VudGVyLngsIHBDZW50ZXIueSwgb3V0ZXJFbmQsIG91dGVyRW5kQWRqdXN0ZWRBbmdsZSwgZW5kQW5nbGUgKyBIQUxGX1BJKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgbGluZSBmcm9tIHBvaW50IDMgdG8gcG9pbnQgNFxuICAgICAgICBjb25zdCBwNCA9IHJUaGV0YVRvWFkoaW5uZXJFbmRBZGp1c3RlZFJhZGl1cywgZW5kQW5nbGUsIHgsIHkpO1xuICAgICAgICBjdHgubGluZVRvKHA0LngsIHA0LnkpO1xuICAgICAgICAvLyBUaGUgY29ybmVyIHNlZ21lbnQgZnJvbSBwb2ludCA0IHRvIHBvaW50IDVcbiAgICAgICAgaWYgKGlubmVyRW5kID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcENlbnRlciA9IHJUaGV0YVRvWFkoaW5uZXJFbmRBZGp1c3RlZFJhZGl1cywgaW5uZXJFbmRBZGp1c3RlZEFuZ2xlLCB4LCB5KTtcbiAgICAgICAgICAgIGN0eC5hcmMocENlbnRlci54LCBwQ2VudGVyLnksIGlubmVyRW5kLCBlbmRBbmdsZSArIEhBTEZfUEksIGlubmVyRW5kQWRqdXN0ZWRBbmdsZSArIE1hdGguUEkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBpbm5lciBhcmMgZnJvbSBwb2ludCA1IHRvIHBvaW50IGIgdG8gcG9pbnQgNlxuICAgICAgICBjb25zdCBpbm5lck1pZEFkanVzdGVkQW5nbGUgPSAoZW5kQW5nbGUgLSBpbm5lckVuZCAvIGlubmVyUmFkaXVzICsgKHN0YXJ0QW5nbGUgKyBpbm5lclN0YXJ0IC8gaW5uZXJSYWRpdXMpKSAvIDI7XG4gICAgICAgIGN0eC5hcmMoeCwgeSwgaW5uZXJSYWRpdXMsIGVuZEFuZ2xlIC0gaW5uZXJFbmQgLyBpbm5lclJhZGl1cywgaW5uZXJNaWRBZGp1c3RlZEFuZ2xlLCB0cnVlKTtcbiAgICAgICAgY3R4LmFyYyh4LCB5LCBpbm5lclJhZGl1cywgaW5uZXJNaWRBZGp1c3RlZEFuZ2xlLCBzdGFydEFuZ2xlICsgaW5uZXJTdGFydCAvIGlubmVyUmFkaXVzLCB0cnVlKTtcbiAgICAgICAgLy8gVGhlIGNvcm5lciBzZWdtZW50IGZyb20gcG9pbnQgNiB0byBwb2ludCA3XG4gICAgICAgIGlmIChpbm5lclN0YXJ0ID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcENlbnRlciA9IHJUaGV0YVRvWFkoaW5uZXJTdGFydEFkanVzdGVkUmFkaXVzLCBpbm5lclN0YXJ0QWRqdXN0ZWRBbmdsZSwgeCwgeSk7XG4gICAgICAgICAgICBjdHguYXJjKHBDZW50ZXIueCwgcENlbnRlci55LCBpbm5lclN0YXJ0LCBpbm5lclN0YXJ0QWRqdXN0ZWRBbmdsZSArIE1hdGguUEksIHN0YXJ0QW5nbGUgLSBIQUxGX1BJKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgbGluZSBmcm9tIHBvaW50IDcgdG8gcG9pbnQgOFxuICAgICAgICBjb25zdCBwOCA9IHJUaGV0YVRvWFkob3V0ZXJTdGFydEFkanVzdGVkUmFkaXVzLCBzdGFydEFuZ2xlLCB4LCB5KTtcbiAgICAgICAgY3R4LmxpbmVUbyhwOC54LCBwOC55KTtcbiAgICAgICAgLy8gVGhlIGNvcm5lciBzZWdtZW50IGZyb20gcG9pbnQgOCB0byBwb2ludCAxXG4gICAgICAgIGlmIChvdXRlclN0YXJ0ID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcENlbnRlciA9IHJUaGV0YVRvWFkob3V0ZXJTdGFydEFkanVzdGVkUmFkaXVzLCBvdXRlclN0YXJ0QWRqdXN0ZWRBbmdsZSwgeCwgeSk7XG4gICAgICAgICAgICBjdHguYXJjKHBDZW50ZXIueCwgcENlbnRlci55LCBvdXRlclN0YXJ0LCBzdGFydEFuZ2xlIC0gSEFMRl9QSSwgb3V0ZXJTdGFydEFkanVzdGVkQW5nbGUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgY29uc3Qgb3V0ZXJTdGFydFggPSBNYXRoLmNvcyhvdXRlclN0YXJ0QWRqdXN0ZWRBbmdsZSkgKiBvdXRlclJhZGl1cyArIHg7XG4gICAgICAgIGNvbnN0IG91dGVyU3RhcnRZID0gTWF0aC5zaW4ob3V0ZXJTdGFydEFkanVzdGVkQW5nbGUpICogb3V0ZXJSYWRpdXMgKyB5O1xuICAgICAgICBjdHgubGluZVRvKG91dGVyU3RhcnRYLCBvdXRlclN0YXJ0WSk7XG4gICAgICAgIGNvbnN0IG91dGVyRW5kWCA9IE1hdGguY29zKG91dGVyRW5kQWRqdXN0ZWRBbmdsZSkgKiBvdXRlclJhZGl1cyArIHg7XG4gICAgICAgIGNvbnN0IG91dGVyRW5kWSA9IE1hdGguc2luKG91dGVyRW5kQWRqdXN0ZWRBbmdsZSkgKiBvdXRlclJhZGl1cyArIHk7XG4gICAgICAgIGN0eC5saW5lVG8ob3V0ZXJFbmRYLCBvdXRlckVuZFkpO1xuICAgIH1cbiAgICBjdHguY2xvc2VQYXRoKCk7XG59XG5mdW5jdGlvbiBkcmF3QXJjKGN0eCwgZWxlbWVudCwgb2Zmc2V0LCBzcGFjaW5nLCBjaXJjdWxhcikge1xuICAgIGNvbnN0IHsgZnVsbENpcmNsZXMgLCBzdGFydEFuZ2xlICwgY2lyY3VtZmVyZW5jZSAgfSA9IGVsZW1lbnQ7XG4gICAgbGV0IGVuZEFuZ2xlID0gZWxlbWVudC5lbmRBbmdsZTtcbiAgICBpZiAoZnVsbENpcmNsZXMpIHtcbiAgICAgICAgcGF0aEFyYyhjdHgsIGVsZW1lbnQsIG9mZnNldCwgc3BhY2luZywgZW5kQW5nbGUsIGNpcmN1bGFyKTtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGZ1bGxDaXJjbGVzOyArK2kpe1xuICAgICAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzTmFOKGNpcmN1bWZlcmVuY2UpKSB7XG4gICAgICAgICAgICBlbmRBbmdsZSA9IHN0YXJ0QW5nbGUgKyAoY2lyY3VtZmVyZW5jZSAlIFRBVSB8fCBUQVUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBhdGhBcmMoY3R4LCBlbGVtZW50LCBvZmZzZXQsIHNwYWNpbmcsIGVuZEFuZ2xlLCBjaXJjdWxhcik7XG4gICAgY3R4LmZpbGwoKTtcbiAgICByZXR1cm4gZW5kQW5nbGU7XG59XG5mdW5jdGlvbiBkcmF3Qm9yZGVyKGN0eCwgZWxlbWVudCwgb2Zmc2V0LCBzcGFjaW5nLCBjaXJjdWxhcikge1xuICAgIGNvbnN0IHsgZnVsbENpcmNsZXMgLCBzdGFydEFuZ2xlICwgY2lyY3VtZmVyZW5jZSAsIG9wdGlvbnMgIH0gPSBlbGVtZW50O1xuICAgIGNvbnN0IHsgYm9yZGVyV2lkdGggLCBib3JkZXJKb2luU3R5bGUgLCBib3JkZXJEYXNoICwgYm9yZGVyRGFzaE9mZnNldCAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgaW5uZXIgPSBvcHRpb25zLmJvcmRlckFsaWduID09PSAnaW5uZXInO1xuICAgIGlmICghYm9yZGVyV2lkdGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdHguc2V0TGluZURhc2goYm9yZGVyRGFzaCB8fCBbXSk7XG4gICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gYm9yZGVyRGFzaE9mZnNldDtcbiAgICBpZiAoaW5uZXIpIHtcbiAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGJvcmRlcldpZHRoICogMjtcbiAgICAgICAgY3R4LmxpbmVKb2luID0gYm9yZGVySm9pblN0eWxlIHx8ICdyb3VuZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGJvcmRlcldpZHRoO1xuICAgICAgICBjdHgubGluZUpvaW4gPSBib3JkZXJKb2luU3R5bGUgfHwgJ2JldmVsJztcbiAgICB9XG4gICAgbGV0IGVuZEFuZ2xlID0gZWxlbWVudC5lbmRBbmdsZTtcbiAgICBpZiAoZnVsbENpcmNsZXMpIHtcbiAgICAgICAgcGF0aEFyYyhjdHgsIGVsZW1lbnQsIG9mZnNldCwgc3BhY2luZywgZW5kQW5nbGUsIGNpcmN1bGFyKTtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGZ1bGxDaXJjbGVzOyArK2kpe1xuICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNOYU4oY2lyY3VtZmVyZW5jZSkpIHtcbiAgICAgICAgICAgIGVuZEFuZ2xlID0gc3RhcnRBbmdsZSArIChjaXJjdW1mZXJlbmNlICUgVEFVIHx8IFRBVSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlubmVyKSB7XG4gICAgICAgIGNsaXBBcmMoY3R4LCBlbGVtZW50LCBlbmRBbmdsZSk7XG4gICAgfVxuICAgIGlmICghZnVsbENpcmNsZXMpIHtcbiAgICAgICAgcGF0aEFyYyhjdHgsIGVsZW1lbnQsIG9mZnNldCwgc3BhY2luZywgZW5kQW5nbGUsIGNpcmN1bGFyKTtcbiAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgIH1cbn1cbmNsYXNzIEFyY0VsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBzdGF0aWMgaWQgPSAnYXJjJztcbiAgICBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGJvcmRlckFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmJyxcbiAgICAgICAgYm9yZGVyRGFzaDogW10sXG4gICAgICAgIGJvcmRlckRhc2hPZmZzZXQ6IDAsXG4gICAgICAgIGJvcmRlckpvaW5TdHlsZTogdW5kZWZpbmVkLFxuICAgICAgICBib3JkZXJSYWRpdXM6IDAsXG4gICAgICAgIGJvcmRlcldpZHRoOiAyLFxuICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgIHNwYWNpbmc6IDAsXG4gICAgICAgIGFuZ2xlOiB1bmRlZmluZWQsXG4gICAgICAgIGNpcmN1bGFyOiB0cnVlXG4gICAgfTtcbiAgICBzdGF0aWMgZGVmYXVsdFJvdXRlcyA9IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnYmFja2dyb3VuZENvbG9yJ1xuICAgIH07XG4gICAgc3RhdGljIGRlc2NyaXB0b3JzID0ge1xuICAgICAgICBfc2NyaXB0YWJsZTogdHJ1ZSxcbiAgICAgICAgX2luZGV4YWJsZTogKG5hbWUpPT5uYW1lICE9PSAnYm9yZGVyRGFzaCdcbiAgICB9O1xuICAgIGNpcmN1bWZlcmVuY2U7XG4gICAgZW5kQW5nbGU7XG4gICAgZnVsbENpcmNsZXM7XG4gICAgaW5uZXJSYWRpdXM7XG4gICAgb3V0ZXJSYWRpdXM7XG4gICAgcGl4ZWxNYXJnaW47XG4gICAgc3RhcnRBbmdsZTtcbiAgICBjb25zdHJ1Y3RvcihjZmcpe1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY2lyY3VtZmVyZW5jZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5zdGFydEFuZ2xlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmVuZEFuZ2xlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmlubmVyUmFkaXVzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm91dGVyUmFkaXVzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnBpeGVsTWFyZ2luID0gMDtcbiAgICAgICAgdGhpcy5mdWxsQ2lyY2xlcyA9IDA7XG4gICAgICAgIGlmIChjZmcpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgY2ZnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpblJhbmdlKGNoYXJ0WCwgY2hhcnRZLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gdGhpcy5nZXRQcm9wcyhbXG4gICAgICAgICAgICAneCcsXG4gICAgICAgICAgICAneSdcbiAgICAgICAgXSwgdXNlRmluYWxQb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IHsgYW5nbGUgLCBkaXN0YW5jZSAgfSA9IGdldEFuZ2xlRnJvbVBvaW50KHBvaW50LCB7XG4gICAgICAgICAgICB4OiBjaGFydFgsXG4gICAgICAgICAgICB5OiBjaGFydFlcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRBbmdsZSAsIGVuZEFuZ2xlICwgaW5uZXJSYWRpdXMgLCBvdXRlclJhZGl1cyAsIGNpcmN1bWZlcmVuY2UgIH0gPSB0aGlzLmdldFByb3BzKFtcbiAgICAgICAgICAgICdzdGFydEFuZ2xlJyxcbiAgICAgICAgICAgICdlbmRBbmdsZScsXG4gICAgICAgICAgICAnaW5uZXJSYWRpdXMnLFxuICAgICAgICAgICAgJ291dGVyUmFkaXVzJyxcbiAgICAgICAgICAgICdjaXJjdW1mZXJlbmNlJ1xuICAgICAgICBdLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgckFkanVzdCA9ICh0aGlzLm9wdGlvbnMuc3BhY2luZyArIHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aCkgLyAyO1xuICAgICAgICBjb25zdCBfY2lyY3VtZmVyZW5jZSA9IHZhbHVlT3JEZWZhdWx0KGNpcmN1bWZlcmVuY2UsIGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gICAgICAgIGNvbnN0IG5vblplcm9CZXR3ZWVuID0gX2FuZ2xlQmV0d2VlbihhbmdsZSwgc3RhcnRBbmdsZSwgZW5kQW5nbGUpICYmIHN0YXJ0QW5nbGUgIT09IGVuZEFuZ2xlO1xuICAgICAgICBjb25zdCBiZXR3ZWVuQW5nbGVzID0gX2NpcmN1bWZlcmVuY2UgPj0gVEFVIHx8IG5vblplcm9CZXR3ZWVuO1xuICAgICAgICBjb25zdCB3aXRoaW5SYWRpdXMgPSBfaXNCZXR3ZWVuKGRpc3RhbmNlLCBpbm5lclJhZGl1cyArIHJBZGp1c3QsIG91dGVyUmFkaXVzICsgckFkanVzdCk7XG4gICAgICAgIHJldHVybiBiZXR3ZWVuQW5nbGVzICYmIHdpdGhpblJhZGl1cztcbiAgICB9XG4gICAgZ2V0Q2VudGVyUG9pbnQodXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICBjb25zdCB7IHggLCB5ICwgc3RhcnRBbmdsZSAsIGVuZEFuZ2xlICwgaW5uZXJSYWRpdXMgLCBvdXRlclJhZGl1cyAgfSA9IHRoaXMuZ2V0UHJvcHMoW1xuICAgICAgICAgICAgJ3gnLFxuICAgICAgICAgICAgJ3knLFxuICAgICAgICAgICAgJ3N0YXJ0QW5nbGUnLFxuICAgICAgICAgICAgJ2VuZEFuZ2xlJyxcbiAgICAgICAgICAgICdpbm5lclJhZGl1cycsXG4gICAgICAgICAgICAnb3V0ZXJSYWRpdXMnXG4gICAgICAgIF0sIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgICAgICBjb25zdCB7IG9mZnNldCAsIHNwYWNpbmcgIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGhhbGZBbmdsZSA9IChzdGFydEFuZ2xlICsgZW5kQW5nbGUpIC8gMjtcbiAgICAgICAgY29uc3QgaGFsZlJhZGl1cyA9IChpbm5lclJhZGl1cyArIG91dGVyUmFkaXVzICsgc3BhY2luZyArIG9mZnNldCkgLyAyO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogeCArIE1hdGguY29zKGhhbGZBbmdsZSkgKiBoYWxmUmFkaXVzLFxuICAgICAgICAgICAgeTogeSArIE1hdGguc2luKGhhbGZBbmdsZSkgKiBoYWxmUmFkaXVzXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRvb2x0aXBQb3NpdGlvbih1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENlbnRlclBvaW50KHVzZUZpbmFsUG9zaXRpb24pO1xuICAgIH1cbiAgICBkcmF3KGN0eCkge1xuICAgICAgICBjb25zdCB7IG9wdGlvbnMgLCBjaXJjdW1mZXJlbmNlICB9ID0gdGhpcztcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gKG9wdGlvbnMub2Zmc2V0IHx8IDApIC8gNDtcbiAgICAgICAgY29uc3Qgc3BhY2luZyA9IChvcHRpb25zLnNwYWNpbmcgfHwgMCkgLyAyO1xuICAgICAgICBjb25zdCBjaXJjdWxhciA9IG9wdGlvbnMuY2lyY3VsYXI7XG4gICAgICAgIHRoaXMucGl4ZWxNYXJnaW4gPSBvcHRpb25zLmJvcmRlckFsaWduID09PSAnaW5uZXInID8gMC4zMyA6IDA7XG4gICAgICAgIHRoaXMuZnVsbENpcmNsZXMgPSBjaXJjdW1mZXJlbmNlID4gVEFVID8gTWF0aC5mbG9vcihjaXJjdW1mZXJlbmNlIC8gVEFVKSA6IDA7XG4gICAgICAgIGlmIChjaXJjdW1mZXJlbmNlID09PSAwIHx8IHRoaXMuaW5uZXJSYWRpdXMgPCAwIHx8IHRoaXMub3V0ZXJSYWRpdXMgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgY29uc3QgaGFsZkFuZ2xlID0gKHRoaXMuc3RhcnRBbmdsZSArIHRoaXMuZW5kQW5nbGUpIC8gMjtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZShNYXRoLmNvcyhoYWxmQW5nbGUpICogb2Zmc2V0LCBNYXRoLnNpbihoYWxmQW5nbGUpICogb2Zmc2V0KTtcbiAgICAgICAgY29uc3QgZml4ID0gMSAtIE1hdGguc2luKE1hdGgubWluKFBJLCBjaXJjdW1mZXJlbmNlIHx8IDApKTtcbiAgICAgICAgY29uc3QgcmFkaXVzT2Zmc2V0ID0gb2Zmc2V0ICogZml4O1xuICAgICAgICBjdHguZmlsbFN0eWxlID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IG9wdGlvbnMuYm9yZGVyQ29sb3I7XG4gICAgICAgIGRyYXdBcmMoY3R4LCB0aGlzLCByYWRpdXNPZmZzZXQsIHNwYWNpbmcsIGNpcmN1bGFyKTtcbiAgICAgICAgZHJhd0JvcmRlcihjdHgsIHRoaXMsIHJhZGl1c09mZnNldCwgc3BhY2luZywgY2lyY3VsYXIpO1xuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2V0U3R5bGUoY3R4LCBvcHRpb25zLCBzdHlsZSA9IG9wdGlvbnMpIHtcbiAgICBjdHgubGluZUNhcCA9IHZhbHVlT3JEZWZhdWx0KHN0eWxlLmJvcmRlckNhcFN0eWxlLCBvcHRpb25zLmJvcmRlckNhcFN0eWxlKTtcbiAgICBjdHguc2V0TGluZURhc2godmFsdWVPckRlZmF1bHQoc3R5bGUuYm9yZGVyRGFzaCwgb3B0aW9ucy5ib3JkZXJEYXNoKSk7XG4gICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gdmFsdWVPckRlZmF1bHQoc3R5bGUuYm9yZGVyRGFzaE9mZnNldCwgb3B0aW9ucy5ib3JkZXJEYXNoT2Zmc2V0KTtcbiAgICBjdHgubGluZUpvaW4gPSB2YWx1ZU9yRGVmYXVsdChzdHlsZS5ib3JkZXJKb2luU3R5bGUsIG9wdGlvbnMuYm9yZGVySm9pblN0eWxlKTtcbiAgICBjdHgubGluZVdpZHRoID0gdmFsdWVPckRlZmF1bHQoc3R5bGUuYm9yZGVyV2lkdGgsIG9wdGlvbnMuYm9yZGVyV2lkdGgpO1xuICAgIGN0eC5zdHJva2VTdHlsZSA9IHZhbHVlT3JEZWZhdWx0KHN0eWxlLmJvcmRlckNvbG9yLCBvcHRpb25zLmJvcmRlckNvbG9yKTtcbn1cbmZ1bmN0aW9uIGxpbmVUbyhjdHgsIHByZXZpb3VzLCB0YXJnZXQpIHtcbiAgICBjdHgubGluZVRvKHRhcmdldC54LCB0YXJnZXQueSk7XG59XG4gZnVuY3Rpb24gZ2V0TGluZU1ldGhvZChvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuc3RlcHBlZCkge1xuICAgICAgICByZXR1cm4gX3N0ZXBwZWRMaW5lVG87XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRlbnNpb24gfHwgb3B0aW9ucy5jdWJpY0ludGVycG9sYXRpb25Nb2RlID09PSAnbW9ub3RvbmUnKSB7XG4gICAgICAgIHJldHVybiBfYmV6aWVyQ3VydmVUbztcbiAgICB9XG4gICAgcmV0dXJuIGxpbmVUbztcbn1cbmZ1bmN0aW9uIHBhdGhWYXJzKHBvaW50cywgc2VnbWVudCwgcGFyYW1zID0ge30pIHtcbiAgICBjb25zdCBjb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gICAgY29uc3QgeyBzdGFydDogcGFyYW1zU3RhcnQgPSAwICwgZW5kOiBwYXJhbXNFbmQgPSBjb3VudCAtIDEgIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgeyBzdGFydDogc2VnbWVudFN0YXJ0ICwgZW5kOiBzZWdtZW50RW5kICB9ID0gc2VnbWVudDtcbiAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KHBhcmFtc1N0YXJ0LCBzZWdtZW50U3RhcnQpO1xuICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKHBhcmFtc0VuZCwgc2VnbWVudEVuZCk7XG4gICAgY29uc3Qgb3V0c2lkZSA9IHBhcmFtc1N0YXJ0IDwgc2VnbWVudFN0YXJ0ICYmIHBhcmFtc0VuZCA8IHNlZ21lbnRTdGFydCB8fCBwYXJhbXNTdGFydCA+IHNlZ21lbnRFbmQgJiYgcGFyYW1zRW5kID4gc2VnbWVudEVuZDtcbiAgICByZXR1cm4ge1xuICAgICAgICBjb3VudCxcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGxvb3A6IHNlZ21lbnQubG9vcCxcbiAgICAgICAgaWxlbjogZW5kIDwgc3RhcnQgJiYgIW91dHNpZGUgPyBjb3VudCArIGVuZCAtIHN0YXJ0IDogZW5kIC0gc3RhcnRcbiAgICB9O1xufVxuIGZ1bmN0aW9uIHBhdGhTZWdtZW50KGN0eCwgbGluZSwgc2VnbWVudCwgcGFyYW1zKSB7XG4gICAgY29uc3QgeyBwb2ludHMgLCBvcHRpb25zICB9ID0gbGluZTtcbiAgICBjb25zdCB7IGNvdW50ICwgc3RhcnQgLCBsb29wICwgaWxlbiAgfSA9IHBhdGhWYXJzKHBvaW50cywgc2VnbWVudCwgcGFyYW1zKTtcbiAgICBjb25zdCBsaW5lTWV0aG9kID0gZ2V0TGluZU1ldGhvZChvcHRpb25zKTtcbiAgICBsZXQgeyBtb3ZlID10cnVlICwgcmV2ZXJzZSAgfSA9IHBhcmFtcyB8fCB7fTtcbiAgICBsZXQgaSwgcG9pbnQsIHByZXY7XG4gICAgZm9yKGkgPSAwOyBpIDw9IGlsZW47ICsraSl7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzWyhzdGFydCArIChyZXZlcnNlID8gaWxlbiAtIGkgOiBpKSkgJSBjb3VudF07XG4gICAgICAgIGlmIChwb2ludC5za2lwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmIChtb3ZlKSB7XG4gICAgICAgICAgICBjdHgubW92ZVRvKHBvaW50LngsIHBvaW50LnkpO1xuICAgICAgICAgICAgbW92ZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGluZU1ldGhvZChjdHgsIHByZXYsIHBvaW50LCByZXZlcnNlLCBvcHRpb25zLnN0ZXBwZWQpO1xuICAgICAgICB9XG4gICAgICAgIHByZXYgPSBwb2ludDtcbiAgICB9XG4gICAgaWYgKGxvb3ApIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbKHN0YXJ0ICsgKHJldmVyc2UgPyBpbGVuIDogMCkpICUgY291bnRdO1xuICAgICAgICBsaW5lTWV0aG9kKGN0eCwgcHJldiwgcG9pbnQsIHJldmVyc2UsIG9wdGlvbnMuc3RlcHBlZCk7XG4gICAgfVxuICAgIHJldHVybiAhIWxvb3A7XG59XG4gZnVuY3Rpb24gZmFzdFBhdGhTZWdtZW50KGN0eCwgbGluZSwgc2VnbWVudCwgcGFyYW1zKSB7XG4gICAgY29uc3QgcG9pbnRzID0gbGluZS5wb2ludHM7XG4gICAgY29uc3QgeyBjb3VudCAsIHN0YXJ0ICwgaWxlbiAgfSA9IHBhdGhWYXJzKHBvaW50cywgc2VnbWVudCwgcGFyYW1zKTtcbiAgICBjb25zdCB7IG1vdmUgPXRydWUgLCByZXZlcnNlICB9ID0gcGFyYW1zIHx8IHt9O1xuICAgIGxldCBhdmdYID0gMDtcbiAgICBsZXQgY291bnRYID0gMDtcbiAgICBsZXQgaSwgcG9pbnQsIHByZXZYLCBtaW5ZLCBtYXhZLCBsYXN0WTtcbiAgICBjb25zdCBwb2ludEluZGV4ID0gKGluZGV4KT0+KHN0YXJ0ICsgKHJldmVyc2UgPyBpbGVuIC0gaW5kZXggOiBpbmRleCkpICUgY291bnQ7XG4gICAgY29uc3QgZHJhd1ggPSAoKT0+e1xuICAgICAgICBpZiAobWluWSAhPT0gbWF4WSkge1xuICAgICAgICAgICAgY3R4LmxpbmVUbyhhdmdYLCBtYXhZKTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oYXZnWCwgbWluWSk7XG4gICAgICAgICAgICBjdHgubGluZVRvKGF2Z1gsIGxhc3RZKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgaWYgKG1vdmUpIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbcG9pbnRJbmRleCgwKV07XG4gICAgICAgIGN0eC5tb3ZlVG8ocG9pbnQueCwgcG9pbnQueSk7XG4gICAgfVxuICAgIGZvcihpID0gMDsgaSA8PSBpbGVuOyArK2kpe1xuICAgICAgICBwb2ludCA9IHBvaW50c1twb2ludEluZGV4KGkpXTtcbiAgICAgICAgaWYgKHBvaW50LnNraXApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHggPSBwb2ludC54O1xuICAgICAgICBjb25zdCB5ID0gcG9pbnQueTtcbiAgICAgICAgY29uc3QgdHJ1bmNYID0geCB8IDA7XG4gICAgICAgIGlmICh0cnVuY1ggPT09IHByZXZYKSB7XG4gICAgICAgICAgICBpZiAoeSA8IG1pblkpIHtcbiAgICAgICAgICAgICAgICBtaW5ZID0geTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeSA+IG1heFkpIHtcbiAgICAgICAgICAgICAgICBtYXhZID0geTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF2Z1ggPSAoY291bnRYICogYXZnWCArIHgpIC8gKytjb3VudFg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkcmF3WCgpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4LCB5KTtcbiAgICAgICAgICAgIHByZXZYID0gdHJ1bmNYO1xuICAgICAgICAgICAgY291bnRYID0gMDtcbiAgICAgICAgICAgIG1pblkgPSBtYXhZID0geTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0WSA9IHk7XG4gICAgfVxuICAgIGRyYXdYKCk7XG59XG4gZnVuY3Rpb24gX2dldFNlZ21lbnRNZXRob2QobGluZSkge1xuICAgIGNvbnN0IG9wdHMgPSBsaW5lLm9wdGlvbnM7XG4gICAgY29uc3QgYm9yZGVyRGFzaCA9IG9wdHMuYm9yZGVyRGFzaCAmJiBvcHRzLmJvcmRlckRhc2gubGVuZ3RoO1xuICAgIGNvbnN0IHVzZUZhc3RQYXRoID0gIWxpbmUuX2RlY2ltYXRlZCAmJiAhbGluZS5fbG9vcCAmJiAhb3B0cy50ZW5zaW9uICYmIG9wdHMuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZSAhPT0gJ21vbm90b25lJyAmJiAhb3B0cy5zdGVwcGVkICYmICFib3JkZXJEYXNoO1xuICAgIHJldHVybiB1c2VGYXN0UGF0aCA/IGZhc3RQYXRoU2VnbWVudCA6IHBhdGhTZWdtZW50O1xufVxuIGZ1bmN0aW9uIF9nZXRJbnRlcnBvbGF0aW9uTWV0aG9kKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5zdGVwcGVkKSB7XG4gICAgICAgIHJldHVybiBfc3RlcHBlZEludGVycG9sYXRpb247XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRlbnNpb24gfHwgb3B0aW9ucy5jdWJpY0ludGVycG9sYXRpb25Nb2RlID09PSAnbW9ub3RvbmUnKSB7XG4gICAgICAgIHJldHVybiBfYmV6aWVySW50ZXJwb2xhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIF9wb2ludEluTGluZTtcbn1cbmZ1bmN0aW9uIHN0cm9rZVBhdGhXaXRoQ2FjaGUoY3R4LCBsaW5lLCBzdGFydCwgY291bnQpIHtcbiAgICBsZXQgcGF0aCA9IGxpbmUuX3BhdGg7XG4gICAgaWYgKCFwYXRoKSB7XG4gICAgICAgIHBhdGggPSBsaW5lLl9wYXRoID0gbmV3IFBhdGgyRCgpO1xuICAgICAgICBpZiAobGluZS5wYXRoKHBhdGgsIHN0YXJ0LCBjb3VudCkpIHtcbiAgICAgICAgICAgIHBhdGguY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0U3R5bGUoY3R4LCBsaW5lLm9wdGlvbnMpO1xuICAgIGN0eC5zdHJva2UocGF0aCk7XG59XG5mdW5jdGlvbiBzdHJva2VQYXRoRGlyZWN0KGN0eCwgbGluZSwgc3RhcnQsIGNvdW50KSB7XG4gICAgY29uc3QgeyBzZWdtZW50cyAsIG9wdGlvbnMgIH0gPSBsaW5lO1xuICAgIGNvbnN0IHNlZ21lbnRNZXRob2QgPSBfZ2V0U2VnbWVudE1ldGhvZChsaW5lKTtcbiAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygc2VnbWVudHMpe1xuICAgICAgICBzZXRTdHlsZShjdHgsIG9wdGlvbnMsIHNlZ21lbnQuc3R5bGUpO1xuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGlmIChzZWdtZW50TWV0aG9kKGN0eCwgbGluZSwgc2VnbWVudCwge1xuICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IHN0YXJ0ICsgY291bnQgLSAxXG4gICAgICAgIH0pKSB7XG4gICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgIH1cbn1cbmNvbnN0IHVzZVBhdGgyRCA9IHR5cGVvZiBQYXRoMkQgPT09ICdmdW5jdGlvbic7XG5mdW5jdGlvbiBkcmF3KGN0eCwgbGluZSwgc3RhcnQsIGNvdW50KSB7XG4gICAgaWYgKHVzZVBhdGgyRCAmJiAhbGluZS5vcHRpb25zLnNlZ21lbnQpIHtcbiAgICAgICAgc3Ryb2tlUGF0aFdpdGhDYWNoZShjdHgsIGxpbmUsIHN0YXJ0LCBjb3VudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3Ryb2tlUGF0aERpcmVjdChjdHgsIGxpbmUsIHN0YXJ0LCBjb3VudCk7XG4gICAgfVxufVxuY2xhc3MgTGluZUVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBzdGF0aWMgaWQgPSAnbGluZSc7XG4gc3RhdGljIGRlZmF1bHRzID0ge1xuICAgICAgICBib3JkZXJDYXBTdHlsZTogJ2J1dHQnLFxuICAgICAgICBib3JkZXJEYXNoOiBbXSxcbiAgICAgICAgYm9yZGVyRGFzaE9mZnNldDogMCxcbiAgICAgICAgYm9yZGVySm9pblN0eWxlOiAnbWl0ZXInLFxuICAgICAgICBib3JkZXJXaWR0aDogMyxcbiAgICAgICAgY2FwQmV6aWVyUG9pbnRzOiB0cnVlLFxuICAgICAgICBjdWJpY0ludGVycG9sYXRpb25Nb2RlOiAnZGVmYXVsdCcsXG4gICAgICAgIGZpbGw6IGZhbHNlLFxuICAgICAgICBzcGFuR2FwczogZmFsc2UsXG4gICAgICAgIHN0ZXBwZWQ6IGZhbHNlLFxuICAgICAgICB0ZW5zaW9uOiAwXG4gICAgfTtcbiBzdGF0aWMgZGVmYXVsdFJvdXRlcyA9IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnYmFja2dyb3VuZENvbG9yJyxcbiAgICAgICAgYm9yZGVyQ29sb3I6ICdib3JkZXJDb2xvcidcbiAgICB9O1xuICAgIHN0YXRpYyBkZXNjcmlwdG9ycyA9IHtcbiAgICAgICAgX3NjcmlwdGFibGU6IHRydWUsXG4gICAgICAgIF9pbmRleGFibGU6IChuYW1lKT0+bmFtZSAhPT0gJ2JvcmRlckRhc2gnICYmIG5hbWUgIT09ICdmaWxsJ1xuICAgIH07XG4gICAgY29uc3RydWN0b3IoY2ZnKXtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hbmltYXRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fY2hhcnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2xvb3AgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2Z1bGxMb29wID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9wYXRoID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9wb2ludHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3NlZ21lbnRzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9kZWNpbWF0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcG9pbnRzVXBkYXRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9kYXRhc2V0SW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChjZmcpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgY2ZnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVDb250cm9sUG9pbnRzKGNoYXJ0QXJlYSwgaW5kZXhBeGlzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmICgob3B0aW9ucy50ZW5zaW9uIHx8IG9wdGlvbnMuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZSA9PT0gJ21vbm90b25lJykgJiYgIW9wdGlvbnMuc3RlcHBlZCAmJiAhdGhpcy5fcG9pbnRzVXBkYXRlZCkge1xuICAgICAgICAgICAgY29uc3QgbG9vcCA9IG9wdGlvbnMuc3BhbkdhcHMgPyB0aGlzLl9sb29wIDogdGhpcy5fZnVsbExvb3A7XG4gICAgICAgICAgICBfdXBkYXRlQmV6aWVyQ29udHJvbFBvaW50cyh0aGlzLl9wb2ludHMsIG9wdGlvbnMsIGNoYXJ0QXJlYSwgbG9vcCwgaW5kZXhBeGlzKTtcbiAgICAgICAgICAgIHRoaXMuX3BvaW50c1VwZGF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldCBwb2ludHMocG9pbnRzKSB7XG4gICAgICAgIHRoaXMuX3BvaW50cyA9IHBvaW50cztcbiAgICAgICAgZGVsZXRlIHRoaXMuX3NlZ21lbnRzO1xuICAgICAgICBkZWxldGUgdGhpcy5fcGF0aDtcbiAgICAgICAgdGhpcy5fcG9pbnRzVXBkYXRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBnZXQgcG9pbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9pbnRzO1xuICAgIH1cbiAgICBnZXQgc2VnbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWdtZW50cyB8fCAodGhpcy5fc2VnbWVudHMgPSBfY29tcHV0ZVNlZ21lbnRzKHRoaXMsIHRoaXMub3B0aW9ucy5zZWdtZW50KSk7XG4gICAgfVxuIGZpcnN0KCkge1xuICAgICAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuc2VnbWVudHM7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IHRoaXMucG9pbnRzO1xuICAgICAgICByZXR1cm4gc2VnbWVudHMubGVuZ3RoICYmIHBvaW50c1tzZWdtZW50c1swXS5zdGFydF07XG4gICAgfVxuIGxhc3QoKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gdGhpcy5zZWdtZW50cztcbiAgICAgICAgY29uc3QgcG9pbnRzID0gdGhpcy5wb2ludHM7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gc2VnbWVudHMubGVuZ3RoO1xuICAgICAgICByZXR1cm4gY291bnQgJiYgcG9pbnRzW3NlZ21lbnRzW2NvdW50IC0gMV0uZW5kXTtcbiAgICB9XG4gaW50ZXJwb2xhdGUocG9pbnQsIHByb3BlcnR5KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcG9pbnRbcHJvcGVydHldO1xuICAgICAgICBjb25zdCBwb2ludHMgPSB0aGlzLnBvaW50cztcbiAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBfYm91bmRTZWdtZW50cyh0aGlzLCB7XG4gICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgIHN0YXJ0OiB2YWx1ZSxcbiAgICAgICAgICAgIGVuZDogdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghc2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGNvbnN0IF9pbnRlcnBvbGF0ZSA9IF9nZXRJbnRlcnBvbGF0aW9uTWV0aG9kKG9wdGlvbnMpO1xuICAgICAgICBsZXQgaSwgaWxlbjtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gc2VnbWVudHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnQgLCBlbmQgIH0gPSBzZWdtZW50c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHAxID0gcG9pbnRzW3N0YXJ0XTtcbiAgICAgICAgICAgIGNvbnN0IHAyID0gcG9pbnRzW2VuZF07XG4gICAgICAgICAgICBpZiAocDEgPT09IHAyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocDEpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdCA9IE1hdGguYWJzKCh2YWx1ZSAtIHAxW3Byb3BlcnR5XSkgLyAocDJbcHJvcGVydHldIC0gcDFbcHJvcGVydHldKSk7XG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0ZWQgPSBfaW50ZXJwb2xhdGUocDEsIHAyLCB0LCBvcHRpb25zLnN0ZXBwZWQpO1xuICAgICAgICAgICAgaW50ZXJwb2xhdGVkW3Byb3BlcnR5XSA9IHBvaW50W3Byb3BlcnR5XTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGludGVycG9sYXRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDEgPyByZXN1bHRbMF0gOiByZXN1bHQ7XG4gICAgfVxuIHBhdGhTZWdtZW50KGN0eCwgc2VnbWVudCwgcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRNZXRob2QgPSBfZ2V0U2VnbWVudE1ldGhvZCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHNlZ21lbnRNZXRob2QoY3R4LCB0aGlzLCBzZWdtZW50LCBwYXJhbXMpO1xuICAgIH1cbiBwYXRoKGN0eCwgc3RhcnQsIGNvdW50KSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gdGhpcy5zZWdtZW50cztcbiAgICAgICAgY29uc3Qgc2VnbWVudE1ldGhvZCA9IF9nZXRTZWdtZW50TWV0aG9kKHRoaXMpO1xuICAgICAgICBsZXQgbG9vcCA9IHRoaXMuX2xvb3A7XG4gICAgICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDtcbiAgICAgICAgY291bnQgPSBjb3VudCB8fCB0aGlzLnBvaW50cy5sZW5ndGggLSBzdGFydDtcbiAgICAgICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKXtcbiAgICAgICAgICAgIGxvb3AgJj0gc2VnbWVudE1ldGhvZChjdHgsIHRoaXMsIHNlZ21lbnQsIHtcbiAgICAgICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgICAgICBlbmQ6IHN0YXJ0ICsgY291bnQgLSAxXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISFsb29wO1xuICAgIH1cbiBkcmF3KGN0eCwgY2hhcnRBcmVhLCBzdGFydCwgY291bnQpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gdGhpcy5wb2ludHMgfHwgW107XG4gICAgICAgIGlmIChwb2ludHMubGVuZ3RoICYmIG9wdGlvbnMuYm9yZGVyV2lkdGgpIHtcbiAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICBkcmF3KGN0eCwgdGhpcywgc3RhcnQsIGNvdW50KTtcbiAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3BvaW50c1VwZGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3BhdGggPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGluUmFuZ2UkMShlbCwgcG9zLCBheGlzLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGVsLm9wdGlvbnM7XG4gICAgY29uc3QgeyBbYXhpc106IHZhbHVlICB9ID0gZWwuZ2V0UHJvcHMoW1xuICAgICAgICBheGlzXG4gICAgXSwgdXNlRmluYWxQb3NpdGlvbik7XG4gICAgcmV0dXJuIE1hdGguYWJzKHBvcyAtIHZhbHVlKSA8IG9wdGlvbnMucmFkaXVzICsgb3B0aW9ucy5oaXRSYWRpdXM7XG59XG5jbGFzcyBQb2ludEVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBzdGF0aWMgaWQgPSAncG9pbnQnO1xuICAgIHBhcnNlZDtcbiAgICBza2lwO1xuICAgIHN0b3A7XG4gICAgLyoqXG4gICAqIEB0eXBlIHthbnl9XG4gICAqLyBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgICBoaXRSYWRpdXM6IDEsXG4gICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6IDEsXG4gICAgICAgIGhvdmVyUmFkaXVzOiA0LFxuICAgICAgICBwb2ludFN0eWxlOiAnY2lyY2xlJyxcbiAgICAgICAgcmFkaXVzOiAzLFxuICAgICAgICByb3RhdGlvbjogMFxuICAgIH07XG4gICAgLyoqXG4gICAqIEB0eXBlIHthbnl9XG4gICAqLyBzdGF0aWMgZGVmYXVsdFJvdXRlcyA9IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnYmFja2dyb3VuZENvbG9yJyxcbiAgICAgICAgYm9yZGVyQ29sb3I6ICdib3JkZXJDb2xvcidcbiAgICB9O1xuICAgIGNvbnN0cnVjdG9yKGNmZyl7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wYXJzZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuc2tpcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5zdG9wID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoY2ZnKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGNmZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5SYW5nZShtb3VzZVgsIG1vdXNlWSwgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gdGhpcy5nZXRQcm9wcyhbXG4gICAgICAgICAgICAneCcsXG4gICAgICAgICAgICAneSdcbiAgICAgICAgXSwgdXNlRmluYWxQb3NpdGlvbik7XG4gICAgICAgIHJldHVybiBNYXRoLnBvdyhtb3VzZVggLSB4LCAyKSArIE1hdGgucG93KG1vdXNlWSAtIHksIDIpIDwgTWF0aC5wb3cob3B0aW9ucy5oaXRSYWRpdXMgKyBvcHRpb25zLnJhZGl1cywgMik7XG4gICAgfVxuICAgIGluWFJhbmdlKG1vdXNlWCwgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICByZXR1cm4gaW5SYW5nZSQxKHRoaXMsIG1vdXNlWCwgJ3gnLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICB9XG4gICAgaW5ZUmFuZ2UobW91c2VZLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBpblJhbmdlJDEodGhpcywgbW91c2VZLCAneScsIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgIH1cbiAgICBnZXRDZW50ZXJQb2ludCh1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgIH0gPSB0aGlzLmdldFByb3BzKFtcbiAgICAgICAgICAgICd4JyxcbiAgICAgICAgICAgICd5J1xuICAgICAgICBdLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5XG4gICAgICAgIH07XG4gICAgfVxuICAgIHNpemUob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB0aGlzLm9wdGlvbnMgfHwge307XG4gICAgICAgIGxldCByYWRpdXMgPSBvcHRpb25zLnJhZGl1cyB8fCAwO1xuICAgICAgICByYWRpdXMgPSBNYXRoLm1heChyYWRpdXMsIHJhZGl1cyAmJiBvcHRpb25zLmhvdmVyUmFkaXVzIHx8IDApO1xuICAgICAgICBjb25zdCBib3JkZXJXaWR0aCA9IHJhZGl1cyAmJiBvcHRpb25zLmJvcmRlcldpZHRoIHx8IDA7XG4gICAgICAgIHJldHVybiAocmFkaXVzICsgYm9yZGVyV2lkdGgpICogMjtcbiAgICB9XG4gICAgZHJhdyhjdHgsIGFyZWEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgaWYgKHRoaXMuc2tpcCB8fCBvcHRpb25zLnJhZGl1cyA8IDAuMSB8fCAhX2lzUG9pbnRJbkFyZWEodGhpcywgYXJlYSwgdGhpcy5zaXplKG9wdGlvbnMpIC8gMikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBvcHRpb25zLmJvcmRlckNvbG9yO1xuICAgICAgICBjdHgubGluZVdpZHRoID0gb3B0aW9ucy5ib3JkZXJXaWR0aDtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdGlvbnMuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICBkcmF3UG9pbnQoY3R4LCBvcHRpb25zLCB0aGlzLngsIHRoaXMueSk7XG4gICAgfVxuICAgIGdldFJhbmdlKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zIHx8IHt9O1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEZhbGxiYWNrcyBzaG91bGQgbmV2ZXIgYmUgaGl0IGluIHByYWN0aWNlXG4gICAgICAgIHJldHVybiBvcHRpb25zLnJhZGl1cyArIG9wdGlvbnMuaGl0UmFkaXVzO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0QmFyQm91bmRzKGJhciwgdXNlRmluYWxQb3NpdGlvbikge1xuICAgIGNvbnN0IHsgeCAsIHkgLCBiYXNlICwgd2lkdGggLCBoZWlnaHQgIH0gPSAgYmFyLmdldFByb3BzKFtcbiAgICAgICAgJ3gnLFxuICAgICAgICAneScsXG4gICAgICAgICdiYXNlJyxcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgJ2hlaWdodCdcbiAgICBdLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICBsZXQgbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBoYWxmO1xuICAgIGlmIChiYXIuaG9yaXpvbnRhbCkge1xuICAgICAgICBoYWxmID0gaGVpZ2h0IC8gMjtcbiAgICAgICAgbGVmdCA9IE1hdGgubWluKHgsIGJhc2UpO1xuICAgICAgICByaWdodCA9IE1hdGgubWF4KHgsIGJhc2UpO1xuICAgICAgICB0b3AgPSB5IC0gaGFsZjtcbiAgICAgICAgYm90dG9tID0geSArIGhhbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaGFsZiA9IHdpZHRoIC8gMjtcbiAgICAgICAgbGVmdCA9IHggLSBoYWxmO1xuICAgICAgICByaWdodCA9IHggKyBoYWxmO1xuICAgICAgICB0b3AgPSBNYXRoLm1pbih5LCBiYXNlKTtcbiAgICAgICAgYm90dG9tID0gTWF0aC5tYXgoeSwgYmFzZSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQsXG4gICAgICAgIHRvcCxcbiAgICAgICAgcmlnaHQsXG4gICAgICAgIGJvdHRvbVxuICAgIH07XG59XG5mdW5jdGlvbiBza2lwT3JMaW1pdChza2lwLCB2YWx1ZSwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gc2tpcCA/IDAgOiBfbGltaXRWYWx1ZSh2YWx1ZSwgbWluLCBtYXgpO1xufVxuZnVuY3Rpb24gcGFyc2VCb3JkZXJXaWR0aChiYXIsIG1heFcsIG1heEgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGJhci5vcHRpb25zLmJvcmRlcldpZHRoO1xuICAgIGNvbnN0IHNraXAgPSBiYXIuYm9yZGVyU2tpcHBlZDtcbiAgICBjb25zdCBvID0gdG9UUkJMKHZhbHVlKTtcbiAgICByZXR1cm4ge1xuICAgICAgICB0OiBza2lwT3JMaW1pdChza2lwLnRvcCwgby50b3AsIDAsIG1heEgpLFxuICAgICAgICByOiBza2lwT3JMaW1pdChza2lwLnJpZ2h0LCBvLnJpZ2h0LCAwLCBtYXhXKSxcbiAgICAgICAgYjogc2tpcE9yTGltaXQoc2tpcC5ib3R0b20sIG8uYm90dG9tLCAwLCBtYXhIKSxcbiAgICAgICAgbDogc2tpcE9yTGltaXQoc2tpcC5sZWZ0LCBvLmxlZnQsIDAsIG1heFcpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHBhcnNlQm9yZGVyUmFkaXVzKGJhciwgbWF4VywgbWF4SCkge1xuICAgIGNvbnN0IHsgZW5hYmxlQm9yZGVyUmFkaXVzICB9ID0gYmFyLmdldFByb3BzKFtcbiAgICAgICAgJ2VuYWJsZUJvcmRlclJhZGl1cydcbiAgICBdKTtcbiAgICBjb25zdCB2YWx1ZSA9IGJhci5vcHRpb25zLmJvcmRlclJhZGl1cztcbiAgICBjb25zdCBvID0gdG9UUkJMQ29ybmVycyh2YWx1ZSk7XG4gICAgY29uc3QgbWF4UiA9IE1hdGgubWluKG1heFcsIG1heEgpO1xuICAgIGNvbnN0IHNraXAgPSBiYXIuYm9yZGVyU2tpcHBlZDtcbiAgICBjb25zdCBlbmFibGVCb3JkZXIgPSBlbmFibGVCb3JkZXJSYWRpdXMgfHwgaXNPYmplY3QodmFsdWUpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHRvcExlZnQ6IHNraXBPckxpbWl0KCFlbmFibGVCb3JkZXIgfHwgc2tpcC50b3AgfHwgc2tpcC5sZWZ0LCBvLnRvcExlZnQsIDAsIG1heFIpLFxuICAgICAgICB0b3BSaWdodDogc2tpcE9yTGltaXQoIWVuYWJsZUJvcmRlciB8fCBza2lwLnRvcCB8fCBza2lwLnJpZ2h0LCBvLnRvcFJpZ2h0LCAwLCBtYXhSKSxcbiAgICAgICAgYm90dG9tTGVmdDogc2tpcE9yTGltaXQoIWVuYWJsZUJvcmRlciB8fCBza2lwLmJvdHRvbSB8fCBza2lwLmxlZnQsIG8uYm90dG9tTGVmdCwgMCwgbWF4UiksXG4gICAgICAgIGJvdHRvbVJpZ2h0OiBza2lwT3JMaW1pdCghZW5hYmxlQm9yZGVyIHx8IHNraXAuYm90dG9tIHx8IHNraXAucmlnaHQsIG8uYm90dG9tUmlnaHQsIDAsIG1heFIpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJvdW5kaW5nUmVjdHMoYmFyKSB7XG4gICAgY29uc3QgYm91bmRzID0gZ2V0QmFyQm91bmRzKGJhcik7XG4gICAgY29uc3Qgd2lkdGggPSBib3VuZHMucmlnaHQgLSBib3VuZHMubGVmdDtcbiAgICBjb25zdCBoZWlnaHQgPSBib3VuZHMuYm90dG9tIC0gYm91bmRzLnRvcDtcbiAgICBjb25zdCBib3JkZXIgPSBwYXJzZUJvcmRlcldpZHRoKGJhciwgd2lkdGggLyAyLCBoZWlnaHQgLyAyKTtcbiAgICBjb25zdCByYWRpdXMgPSBwYXJzZUJvcmRlclJhZGl1cyhiYXIsIHdpZHRoIC8gMiwgaGVpZ2h0IC8gMik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb3V0ZXI6IHtcbiAgICAgICAgICAgIHg6IGJvdW5kcy5sZWZ0LFxuICAgICAgICAgICAgeTogYm91bmRzLnRvcCxcbiAgICAgICAgICAgIHc6IHdpZHRoLFxuICAgICAgICAgICAgaDogaGVpZ2h0LFxuICAgICAgICAgICAgcmFkaXVzXG4gICAgICAgIH0sXG4gICAgICAgIGlubmVyOiB7XG4gICAgICAgICAgICB4OiBib3VuZHMubGVmdCArIGJvcmRlci5sLFxuICAgICAgICAgICAgeTogYm91bmRzLnRvcCArIGJvcmRlci50LFxuICAgICAgICAgICAgdzogd2lkdGggLSBib3JkZXIubCAtIGJvcmRlci5yLFxuICAgICAgICAgICAgaDogaGVpZ2h0IC0gYm9yZGVyLnQgLSBib3JkZXIuYixcbiAgICAgICAgICAgIHJhZGl1czoge1xuICAgICAgICAgICAgICAgIHRvcExlZnQ6IE1hdGgubWF4KDAsIHJhZGl1cy50b3BMZWZ0IC0gTWF0aC5tYXgoYm9yZGVyLnQsIGJvcmRlci5sKSksXG4gICAgICAgICAgICAgICAgdG9wUmlnaHQ6IE1hdGgubWF4KDAsIHJhZGl1cy50b3BSaWdodCAtIE1hdGgubWF4KGJvcmRlci50LCBib3JkZXIucikpLFxuICAgICAgICAgICAgICAgIGJvdHRvbUxlZnQ6IE1hdGgubWF4KDAsIHJhZGl1cy5ib3R0b21MZWZ0IC0gTWF0aC5tYXgoYm9yZGVyLmIsIGJvcmRlci5sKSksXG4gICAgICAgICAgICAgICAgYm90dG9tUmlnaHQ6IE1hdGgubWF4KDAsIHJhZGl1cy5ib3R0b21SaWdodCAtIE1hdGgubWF4KGJvcmRlci5iLCBib3JkZXIucikpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gaW5SYW5nZShiYXIsIHgsIHksIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICBjb25zdCBza2lwWCA9IHggPT09IG51bGw7XG4gICAgY29uc3Qgc2tpcFkgPSB5ID09PSBudWxsO1xuICAgIGNvbnN0IHNraXBCb3RoID0gc2tpcFggJiYgc2tpcFk7XG4gICAgY29uc3QgYm91bmRzID0gYmFyICYmICFza2lwQm90aCAmJiBnZXRCYXJCb3VuZHMoYmFyLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICByZXR1cm4gYm91bmRzICYmIChza2lwWCB8fCBfaXNCZXR3ZWVuKHgsIGJvdW5kcy5sZWZ0LCBib3VuZHMucmlnaHQpKSAmJiAoc2tpcFkgfHwgX2lzQmV0d2Vlbih5LCBib3VuZHMudG9wLCBib3VuZHMuYm90dG9tKSk7XG59XG5mdW5jdGlvbiBoYXNSYWRpdXMocmFkaXVzKSB7XG4gICAgcmV0dXJuIHJhZGl1cy50b3BMZWZ0IHx8IHJhZGl1cy50b3BSaWdodCB8fCByYWRpdXMuYm90dG9tTGVmdCB8fCByYWRpdXMuYm90dG9tUmlnaHQ7XG59XG4gZnVuY3Rpb24gYWRkTm9ybWFsUmVjdFBhdGgoY3R4LCByZWN0KSB7XG4gICAgY3R4LnJlY3QocmVjdC54LCByZWN0LnksIHJlY3QudywgcmVjdC5oKTtcbn1cbmZ1bmN0aW9uIGluZmxhdGVSZWN0KHJlY3QsIGFtb3VudCwgcmVmUmVjdCA9IHt9KSB7XG4gICAgY29uc3QgeCA9IHJlY3QueCAhPT0gcmVmUmVjdC54ID8gLWFtb3VudCA6IDA7XG4gICAgY29uc3QgeSA9IHJlY3QueSAhPT0gcmVmUmVjdC55ID8gLWFtb3VudCA6IDA7XG4gICAgY29uc3QgdyA9IChyZWN0LnggKyByZWN0LncgIT09IHJlZlJlY3QueCArIHJlZlJlY3QudyA/IGFtb3VudCA6IDApIC0geDtcbiAgICBjb25zdCBoID0gKHJlY3QueSArIHJlY3QuaCAhPT0gcmVmUmVjdC55ICsgcmVmUmVjdC5oID8gYW1vdW50IDogMCkgLSB5O1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJlY3QueCArIHgsXG4gICAgICAgIHk6IHJlY3QueSArIHksXG4gICAgICAgIHc6IHJlY3QudyArIHcsXG4gICAgICAgIGg6IHJlY3QuaCArIGgsXG4gICAgICAgIHJhZGl1czogcmVjdC5yYWRpdXNcbiAgICB9O1xufVxuY2xhc3MgQmFyRWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICAgIHN0YXRpYyBpZCA9ICdiYXInO1xuIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICAgICAgYm9yZGVyU2tpcHBlZDogJ3N0YXJ0JyxcbiAgICAgICAgYm9yZGVyV2lkdGg6IDAsXG4gICAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgICAgaW5mbGF0ZUFtb3VudDogJ2F1dG8nLFxuICAgICAgICBwb2ludFN0eWxlOiB1bmRlZmluZWRcbiAgICB9O1xuIHN0YXRpYyBkZWZhdWx0Um91dGVzID0ge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICAgICAgICBib3JkZXJDb2xvcjogJ2JvcmRlckNvbG9yJ1xuICAgIH07XG4gICAgY29uc3RydWN0b3IoY2ZnKXtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmhvcml6b250YWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYmFzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy53aWR0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuaW5mbGF0ZUFtb3VudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGNmZykge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBjZmcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRyYXcoY3R4KSB7XG4gICAgICAgIGNvbnN0IHsgaW5mbGF0ZUFtb3VudCAsIG9wdGlvbnM6IHsgYm9yZGVyQ29sb3IgLCBiYWNrZ3JvdW5kQ29sb3IgIH0gIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IGlubmVyICwgb3V0ZXIgIH0gPSBib3VuZGluZ1JlY3RzKHRoaXMpO1xuICAgICAgICBjb25zdCBhZGRSZWN0UGF0aCA9IGhhc1JhZGl1cyhvdXRlci5yYWRpdXMpID8gYWRkUm91bmRlZFJlY3RQYXRoIDogYWRkTm9ybWFsUmVjdFBhdGg7XG4gICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgIGlmIChvdXRlci53ICE9PSBpbm5lci53IHx8IG91dGVyLmggIT09IGlubmVyLmgpIHtcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGFkZFJlY3RQYXRoKGN0eCwgaW5mbGF0ZVJlY3Qob3V0ZXIsIGluZmxhdGVBbW91bnQsIGlubmVyKSk7XG4gICAgICAgICAgICBjdHguY2xpcCgpO1xuICAgICAgICAgICAgYWRkUmVjdFBhdGgoY3R4LCBpbmZsYXRlUmVjdChpbm5lciwgLWluZmxhdGVBbW91bnQsIG91dGVyKSk7XG4gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gYm9yZGVyQ29sb3I7XG4gICAgICAgICAgICBjdHguZmlsbCgnZXZlbm9kZCcpO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgYWRkUmVjdFBhdGgoY3R4LCBpbmZsYXRlUmVjdChpbm5lciwgaW5mbGF0ZUFtb3VudCkpO1xuICAgICAgICBjdHguZmlsbFN0eWxlID0gYmFja2dyb3VuZENvbG9yO1xuICAgICAgICBjdHguZmlsbCgpO1xuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgIH1cbiAgICBpblJhbmdlKG1vdXNlWCwgbW91c2VZLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBpblJhbmdlKHRoaXMsIG1vdXNlWCwgbW91c2VZLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICB9XG4gICAgaW5YUmFuZ2UobW91c2VYLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBpblJhbmdlKHRoaXMsIG1vdXNlWCwgbnVsbCwgdXNlRmluYWxQb3NpdGlvbik7XG4gICAgfVxuICAgIGluWVJhbmdlKG1vdXNlWSwgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICByZXR1cm4gaW5SYW5nZSh0aGlzLCBudWxsLCBtb3VzZVksIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgIH1cbiAgICBnZXRDZW50ZXJQb2ludCh1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgLCBiYXNlICwgaG9yaXpvbnRhbCAgfSA9ICB0aGlzLmdldFByb3BzKFtcbiAgICAgICAgICAgICd4JyxcbiAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICdiYXNlJyxcbiAgICAgICAgICAgICdob3Jpem9udGFsJ1xuICAgICAgICBdLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IGhvcml6b250YWwgPyAoeCArIGJhc2UpIC8gMiA6IHgsXG4gICAgICAgICAgICB5OiBob3Jpem9udGFsID8geSA6ICh5ICsgYmFzZSkgLyAyXG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldFJhbmdlKGF4aXMpIHtcbiAgICAgICAgcmV0dXJuIGF4aXMgPT09ICd4JyA/IHRoaXMud2lkdGggLyAyIDogdGhpcy5oZWlnaHQgLyAyO1xuICAgIH1cbn1cblxudmFyIGVsZW1lbnRzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuX19wcm90b19fOiBudWxsLFxuQXJjRWxlbWVudDogQXJjRWxlbWVudCxcbkJhckVsZW1lbnQ6IEJhckVsZW1lbnQsXG5MaW5lRWxlbWVudDogTGluZUVsZW1lbnQsXG5Qb2ludEVsZW1lbnQ6IFBvaW50RWxlbWVudFxufSk7XG5cbmNvbnN0IEJPUkRFUl9DT0xPUlMgPSBbXG4gICAgJ3JnYig1NCwgMTYyLCAyMzUpJyxcbiAgICAncmdiKDI1NSwgOTksIDEzMiknLFxuICAgICdyZ2IoMjU1LCAxNTksIDY0KScsXG4gICAgJ3JnYigyNTUsIDIwNSwgODYpJyxcbiAgICAncmdiKDc1LCAxOTIsIDE5MiknLFxuICAgICdyZ2IoMTUzLCAxMDIsIDI1NSknLFxuICAgICdyZ2IoMjAxLCAyMDMsIDIwNyknIC8vIGdyZXlcbl07XG4vLyBCb3JkZXIgY29sb3JzIHdpdGggNTAlIHRyYW5zcGFyZW5jeVxuY29uc3QgQkFDS0dST1VORF9DT0xPUlMgPSAvKiAjX19QVVJFX18gKi8gQk9SREVSX0NPTE9SUy5tYXAoKGNvbG9yKT0+Y29sb3IucmVwbGFjZSgncmdiKCcsICdyZ2JhKCcpLnJlcGxhY2UoJyknLCAnLCAwLjUpJykpO1xuZnVuY3Rpb24gZ2V0Qm9yZGVyQ29sb3IoaSkge1xuICAgIHJldHVybiBCT1JERVJfQ09MT1JTW2kgJSBCT1JERVJfQ09MT1JTLmxlbmd0aF07XG59XG5mdW5jdGlvbiBnZXRCYWNrZ3JvdW5kQ29sb3IoaSkge1xuICAgIHJldHVybiBCQUNLR1JPVU5EX0NPTE9SU1tpICUgQkFDS0dST1VORF9DT0xPUlMubGVuZ3RoXTtcbn1cbmZ1bmN0aW9uIGNvbG9yaXplRGVmYXVsdERhdGFzZXQoZGF0YXNldCwgaSkge1xuICAgIGRhdGFzZXQuYm9yZGVyQ29sb3IgPSBnZXRCb3JkZXJDb2xvcihpKTtcbiAgICBkYXRhc2V0LmJhY2tncm91bmRDb2xvciA9IGdldEJhY2tncm91bmRDb2xvcihpKTtcbiAgICByZXR1cm4gKytpO1xufVxuZnVuY3Rpb24gY29sb3JpemVEb3VnaG51dERhdGFzZXQoZGF0YXNldCwgaSkge1xuICAgIGRhdGFzZXQuYmFja2dyb3VuZENvbG9yID0gZGF0YXNldC5kYXRhLm1hcCgoKT0+Z2V0Qm9yZGVyQ29sb3IoaSsrKSk7XG4gICAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBjb2xvcml6ZVBvbGFyQXJlYURhdGFzZXQoZGF0YXNldCwgaSkge1xuICAgIGRhdGFzZXQuYmFja2dyb3VuZENvbG9yID0gZGF0YXNldC5kYXRhLm1hcCgoKT0+Z2V0QmFja2dyb3VuZENvbG9yKGkrKykpO1xuICAgIHJldHVybiBpO1xufVxuZnVuY3Rpb24gZ2V0Q29sb3JpemVyKGNoYXJ0KSB7XG4gICAgbGV0IGkgPSAwO1xuICAgIHJldHVybiAoZGF0YXNldCwgZGF0YXNldEluZGV4KT0+e1xuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KS5jb250cm9sbGVyO1xuICAgICAgICBpZiAoY29udHJvbGxlciBpbnN0YW5jZW9mIERvdWdobnV0Q29udHJvbGxlcikge1xuICAgICAgICAgICAgaSA9IGNvbG9yaXplRG91Z2hudXREYXRhc2V0KGRhdGFzZXQsIGkpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2xsZXIgaW5zdGFuY2VvZiBQb2xhckFyZWFDb250cm9sbGVyKSB7XG4gICAgICAgICAgICBpID0gY29sb3JpemVQb2xhckFyZWFEYXRhc2V0KGRhdGFzZXQsIGkpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGkgPSBjb2xvcml6ZURlZmF1bHREYXRhc2V0KGRhdGFzZXQsIGkpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNvbnRhaW5zQ29sb3JzRGVmaW5pdGlvbnMoZGVzY3JpcHRvcnMpIHtcbiAgICBsZXQgaztcbiAgICBmb3IoayBpbiBkZXNjcmlwdG9ycyl7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yc1trXS5ib3JkZXJDb2xvciB8fCBkZXNjcmlwdG9yc1trXS5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNvbnRhaW5zQ29sb3JzRGVmaW5pdGlvbihkZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIGRlc2NyaXB0b3IgJiYgKGRlc2NyaXB0b3IuYm9yZGVyQ29sb3IgfHwgZGVzY3JpcHRvci5iYWNrZ3JvdW5kQ29sb3IpO1xufVxuZnVuY3Rpb24gY29udGFpbnNEZWZhdWx0Q29sb3JzRGVmZW5pdGlvbnMoKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRzLmJvcmRlckNvbG9yICE9PSAncmdiYSgwLDAsMCwwLjEpJyB8fCBkZWZhdWx0cy5iYWNrZ3JvdW5kQ29sb3IgIT09ICdyZ2JhKDAsMCwwLDAuMSknO1xufVxudmFyIHBsdWdpbl9jb2xvcnMgPSB7XG4gICAgaWQ6ICdjb2xvcnMnLFxuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGZvcmNlT3ZlcnJpZGU6IGZhbHNlXG4gICAgfSxcbiAgICBiZWZvcmVMYXlvdXQgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBpZiAoIW9wdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZGF0YTogeyBkYXRhc2V0cyAgfSAsIG9wdGlvbnM6IGNoYXJ0T3B0aW9ucyAgfSA9IGNoYXJ0LmNvbmZpZztcbiAgICAgICAgY29uc3QgeyBlbGVtZW50cyAgfSA9IGNoYXJ0T3B0aW9ucztcbiAgICAgICAgY29uc3QgY29udGFpbnNDb2xvckRlZmVuaXRpb24gPSBjb250YWluc0NvbG9yc0RlZmluaXRpb25zKGRhdGFzZXRzKSB8fCBjb250YWluc0NvbG9yc0RlZmluaXRpb24oY2hhcnRPcHRpb25zKSB8fCBlbGVtZW50cyAmJiBjb250YWluc0NvbG9yc0RlZmluaXRpb25zKGVsZW1lbnRzKSB8fCBjb250YWluc0RlZmF1bHRDb2xvcnNEZWZlbml0aW9ucygpO1xuICAgICAgICBpZiAoIW9wdGlvbnMuZm9yY2VPdmVycmlkZSAmJiBjb250YWluc0NvbG9yRGVmZW5pdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbG9yaXplciA9IGdldENvbG9yaXplcihjaGFydCk7XG4gICAgICAgIGRhdGFzZXRzLmZvckVhY2goY29sb3JpemVyKTtcbiAgICB9XG59O1xuXG5mdW5jdGlvbiBsdHRiRGVjaW1hdGlvbihkYXRhLCBzdGFydCwgY291bnQsIGF2YWlsYWJsZVdpZHRoLCBvcHRpb25zKSB7XG4gY29uc3Qgc2FtcGxlcyA9IG9wdGlvbnMuc2FtcGxlcyB8fCBhdmFpbGFibGVXaWR0aDtcbiAgICBpZiAoc2FtcGxlcyA+PSBjb3VudCkge1xuICAgICAgICByZXR1cm4gZGF0YS5zbGljZShzdGFydCwgc3RhcnQgKyBjb3VudCk7XG4gICAgfVxuICAgIGNvbnN0IGRlY2ltYXRlZCA9IFtdO1xuICAgIGNvbnN0IGJ1Y2tldFdpZHRoID0gKGNvdW50IC0gMikgLyAoc2FtcGxlcyAtIDIpO1xuICAgIGxldCBzYW1wbGVkSW5kZXggPSAwO1xuICAgIGNvbnN0IGVuZEluZGV4ID0gc3RhcnQgKyBjb3VudCAtIDE7XG4gICAgbGV0IGEgPSBzdGFydDtcbiAgICBsZXQgaSwgbWF4QXJlYVBvaW50LCBtYXhBcmVhLCBhcmVhLCBuZXh0QTtcbiAgICBkZWNpbWF0ZWRbc2FtcGxlZEluZGV4KytdID0gZGF0YVthXTtcbiAgICBmb3IoaSA9IDA7IGkgPCBzYW1wbGVzIC0gMjsgaSsrKXtcbiAgICAgICAgbGV0IGF2Z1ggPSAwO1xuICAgICAgICBsZXQgYXZnWSA9IDA7XG4gICAgICAgIGxldCBqO1xuICAgICAgICBjb25zdCBhdmdSYW5nZVN0YXJ0ID0gTWF0aC5mbG9vcigoaSArIDEpICogYnVja2V0V2lkdGgpICsgMSArIHN0YXJ0O1xuICAgICAgICBjb25zdCBhdmdSYW5nZUVuZCA9IE1hdGgubWluKE1hdGguZmxvb3IoKGkgKyAyKSAqIGJ1Y2tldFdpZHRoKSArIDEsIGNvdW50KSArIHN0YXJ0O1xuICAgICAgICBjb25zdCBhdmdSYW5nZUxlbmd0aCA9IGF2Z1JhbmdlRW5kIC0gYXZnUmFuZ2VTdGFydDtcbiAgICAgICAgZm9yKGogPSBhdmdSYW5nZVN0YXJ0OyBqIDwgYXZnUmFuZ2VFbmQ7IGorKyl7XG4gICAgICAgICAgICBhdmdYICs9IGRhdGFbal0ueDtcbiAgICAgICAgICAgIGF2Z1kgKz0gZGF0YVtqXS55O1xuICAgICAgICB9XG4gICAgICAgIGF2Z1ggLz0gYXZnUmFuZ2VMZW5ndGg7XG4gICAgICAgIGF2Z1kgLz0gYXZnUmFuZ2VMZW5ndGg7XG4gICAgICAgIGNvbnN0IHJhbmdlT2ZmcyA9IE1hdGguZmxvb3IoaSAqIGJ1Y2tldFdpZHRoKSArIDEgKyBzdGFydDtcbiAgICAgICAgY29uc3QgcmFuZ2VUbyA9IE1hdGgubWluKE1hdGguZmxvb3IoKGkgKyAxKSAqIGJ1Y2tldFdpZHRoKSArIDEsIGNvdW50KSArIHN0YXJ0O1xuICAgICAgICBjb25zdCB7IHg6IHBvaW50QXggLCB5OiBwb2ludEF5ICB9ID0gZGF0YVthXTtcbiAgICAgICAgbWF4QXJlYSA9IGFyZWEgPSAtMTtcbiAgICAgICAgZm9yKGogPSByYW5nZU9mZnM7IGogPCByYW5nZVRvOyBqKyspe1xuICAgICAgICAgICAgYXJlYSA9IDAuNSAqIE1hdGguYWJzKChwb2ludEF4IC0gYXZnWCkgKiAoZGF0YVtqXS55IC0gcG9pbnRBeSkgLSAocG9pbnRBeCAtIGRhdGFbal0ueCkgKiAoYXZnWSAtIHBvaW50QXkpKTtcbiAgICAgICAgICAgIGlmIChhcmVhID4gbWF4QXJlYSkge1xuICAgICAgICAgICAgICAgIG1heEFyZWEgPSBhcmVhO1xuICAgICAgICAgICAgICAgIG1heEFyZWFQb2ludCA9IGRhdGFbal07XG4gICAgICAgICAgICAgICAgbmV4dEEgPSBqO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlY2ltYXRlZFtzYW1wbGVkSW5kZXgrK10gPSBtYXhBcmVhUG9pbnQ7XG4gICAgICAgIGEgPSBuZXh0QTtcbiAgICB9XG4gICAgZGVjaW1hdGVkW3NhbXBsZWRJbmRleCsrXSA9IGRhdGFbZW5kSW5kZXhdO1xuICAgIHJldHVybiBkZWNpbWF0ZWQ7XG59XG5mdW5jdGlvbiBtaW5NYXhEZWNpbWF0aW9uKGRhdGEsIHN0YXJ0LCBjb3VudCwgYXZhaWxhYmxlV2lkdGgpIHtcbiAgICBsZXQgYXZnWCA9IDA7XG4gICAgbGV0IGNvdW50WCA9IDA7XG4gICAgbGV0IGksIHBvaW50LCB4LCB5LCBwcmV2WCwgbWluSW5kZXgsIG1heEluZGV4LCBzdGFydEluZGV4LCBtaW5ZLCBtYXhZO1xuICAgIGNvbnN0IGRlY2ltYXRlZCA9IFtdO1xuICAgIGNvbnN0IGVuZEluZGV4ID0gc3RhcnQgKyBjb3VudCAtIDE7XG4gICAgY29uc3QgeE1pbiA9IGRhdGFbc3RhcnRdLng7XG4gICAgY29uc3QgeE1heCA9IGRhdGFbZW5kSW5kZXhdLng7XG4gICAgY29uc3QgZHggPSB4TWF4IC0geE1pbjtcbiAgICBmb3IoaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3VudDsgKytpKXtcbiAgICAgICAgcG9pbnQgPSBkYXRhW2ldO1xuICAgICAgICB4ID0gKHBvaW50LnggLSB4TWluKSAvIGR4ICogYXZhaWxhYmxlV2lkdGg7XG4gICAgICAgIHkgPSBwb2ludC55O1xuICAgICAgICBjb25zdCB0cnVuY1ggPSB4IHwgMDtcbiAgICAgICAgaWYgKHRydW5jWCA9PT0gcHJldlgpIHtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkge1xuICAgICAgICAgICAgICAgIG1pblkgPSB5O1xuICAgICAgICAgICAgICAgIG1pbkluZGV4ID0gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeSA+IG1heFkpIHtcbiAgICAgICAgICAgICAgICBtYXhZID0geTtcbiAgICAgICAgICAgICAgICBtYXhJbmRleCA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhdmdYID0gKGNvdW50WCAqIGF2Z1ggKyBwb2ludC54KSAvICsrY291bnRYO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gaSAtIDE7XG4gICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYobWluSW5kZXgpICYmICFpc051bGxPclVuZGVmKG1heEluZGV4KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVybWVkaWF0ZUluZGV4MSA9IE1hdGgubWluKG1pbkluZGV4LCBtYXhJbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRlSW5kZXgyID0gTWF0aC5tYXgobWluSW5kZXgsIG1heEluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJtZWRpYXRlSW5kZXgxICE9PSBzdGFydEluZGV4ICYmIGludGVybWVkaWF0ZUluZGV4MSAhPT0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYXRlZC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRhdGFbaW50ZXJtZWRpYXRlSW5kZXgxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGF2Z1hcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbnRlcm1lZGlhdGVJbmRleDIgIT09IHN0YXJ0SW5kZXggJiYgaW50ZXJtZWRpYXRlSW5kZXgyICE9PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hdGVkLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZGF0YVtpbnRlcm1lZGlhdGVJbmRleDJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDogYXZnWFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaSA+IDAgJiYgbGFzdEluZGV4ICE9PSBzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgZGVjaW1hdGVkLnB1c2goZGF0YVtsYXN0SW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlY2ltYXRlZC5wdXNoKHBvaW50KTtcbiAgICAgICAgICAgIHByZXZYID0gdHJ1bmNYO1xuICAgICAgICAgICAgY291bnRYID0gMDtcbiAgICAgICAgICAgIG1pblkgPSBtYXhZID0geTtcbiAgICAgICAgICAgIG1pbkluZGV4ID0gbWF4SW5kZXggPSBzdGFydEluZGV4ID0gaTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVjaW1hdGVkO1xufVxuZnVuY3Rpb24gY2xlYW5EZWNpbWF0ZWREYXRhc2V0KGRhdGFzZXQpIHtcbiAgICBpZiAoZGF0YXNldC5fZGVjaW1hdGVkKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBkYXRhc2V0Ll9kYXRhO1xuICAgICAgICBkZWxldGUgZGF0YXNldC5fZGVjaW1hdGVkO1xuICAgICAgICBkZWxldGUgZGF0YXNldC5fZGF0YTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRhdGFzZXQsICdkYXRhJywge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IGRhdGFcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gY2xlYW5EZWNpbWF0ZWREYXRhKGNoYXJ0KSB7XG4gICAgY2hhcnQuZGF0YS5kYXRhc2V0cy5mb3JFYWNoKChkYXRhc2V0KT0+e1xuICAgICAgICBjbGVhbkRlY2ltYXRlZERhdGFzZXQoZGF0YXNldCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBnZXRTdGFydEFuZENvdW50T2ZWaXNpYmxlUG9pbnRzU2ltcGxpZmllZChtZXRhLCBwb2ludHMpIHtcbiAgICBjb25zdCBwb2ludENvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICBsZXQgc3RhcnQgPSAwO1xuICAgIGxldCBjb3VudDtcbiAgICBjb25zdCB7IGlTY2FsZSAgfSA9IG1ldGE7XG4gICAgY29uc3QgeyBtaW4gLCBtYXggLCBtaW5EZWZpbmVkICwgbWF4RGVmaW5lZCAgfSA9IGlTY2FsZS5nZXRVc2VyQm91bmRzKCk7XG4gICAgaWYgKG1pbkRlZmluZWQpIHtcbiAgICAgICAgc3RhcnQgPSBfbGltaXRWYWx1ZShfbG9va3VwQnlLZXkocG9pbnRzLCBpU2NhbGUuYXhpcywgbWluKS5sbywgMCwgcG9pbnRDb3VudCAtIDEpO1xuICAgIH1cbiAgICBpZiAobWF4RGVmaW5lZCkge1xuICAgICAgICBjb3VudCA9IF9saW1pdFZhbHVlKF9sb29rdXBCeUtleShwb2ludHMsIGlTY2FsZS5heGlzLCBtYXgpLmhpICsgMSwgc3RhcnQsIHBvaW50Q291bnQpIC0gc3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY291bnQgPSBwb2ludENvdW50IC0gc3RhcnQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBjb3VudFxuICAgIH07XG59XG52YXIgcGx1Z2luX2RlY2ltYXRpb24gPSB7XG4gICAgaWQ6ICdkZWNpbWF0aW9uJyxcbiAgICBkZWZhdWx0czoge1xuICAgICAgICBhbGdvcml0aG06ICdtaW4tbWF4JyxcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICB9LFxuICAgIGJlZm9yZUVsZW1lbnRzVXBkYXRlOiAoY2hhcnQsIGFyZ3MsIG9wdGlvbnMpPT57XG4gICAgICAgIGlmICghb3B0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICBjbGVhbkRlY2ltYXRlZERhdGEoY2hhcnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gY2hhcnQud2lkdGg7XG4gICAgICAgIGNoYXJ0LmRhdGEuZGF0YXNldHMuZm9yRWFjaCgoZGF0YXNldCwgZGF0YXNldEluZGV4KT0+e1xuICAgICAgICAgICAgY29uc3QgeyBfZGF0YSAsIGluZGV4QXhpcyAgfSA9IGRhdGFzZXQ7XG4gICAgICAgICAgICBjb25zdCBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBfZGF0YSB8fCBkYXRhc2V0LmRhdGE7XG4gICAgICAgICAgICBpZiAocmVzb2x2ZShbXG4gICAgICAgICAgICAgICAgaW5kZXhBeGlzLFxuICAgICAgICAgICAgICAgIGNoYXJ0Lm9wdGlvbnMuaW5kZXhBeGlzXG4gICAgICAgICAgICBdKSA9PT0gJ3knKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFtZXRhLmNvbnRyb2xsZXIuc3VwcG9ydHNEZWNpbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeEF4aXMgPSBjaGFydC5zY2FsZXNbbWV0YS54QXhpc0lEXTtcbiAgICAgICAgICAgIGlmICh4QXhpcy50eXBlICE9PSAnbGluZWFyJyAmJiB4QXhpcy50eXBlICE9PSAndGltZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhcnQub3B0aW9ucy5wYXJzaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHsgc3RhcnQgLCBjb3VudCAgfSA9IGdldFN0YXJ0QW5kQ291bnRPZlZpc2libGVQb2ludHNTaW1wbGlmaWVkKG1ldGEsIGRhdGEpO1xuICAgICAgICAgICAgY29uc3QgdGhyZXNob2xkID0gb3B0aW9ucy50aHJlc2hvbGQgfHwgNCAqIGF2YWlsYWJsZVdpZHRoO1xuICAgICAgICAgICAgaWYgKGNvdW50IDw9IHRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgIGNsZWFuRGVjaW1hdGVkRGF0YXNldChkYXRhc2V0KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZihfZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhc2V0Ll9kYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YXNldC5kYXRhO1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkYXRhc2V0LCAnZGF0YScsIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlY2ltYXRlZDtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhID0gZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGRlY2ltYXRlZDtcbiAgICAgICAgICAgIHN3aXRjaChvcHRpb25zLmFsZ29yaXRobSl7XG4gICAgICAgICAgICAgICAgY2FzZSAnbHR0Yic6XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYXRlZCA9IGx0dGJEZWNpbWF0aW9uKGRhdGEsIHN0YXJ0LCBjb3VudCwgYXZhaWxhYmxlV2lkdGgsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtaW4tbWF4JzpcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hdGVkID0gbWluTWF4RGVjaW1hdGlvbihkYXRhLCBzdGFydCwgY291bnQsIGF2YWlsYWJsZVdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBkZWNpbWF0aW9uIGFsZ29yaXRobSAnJHtvcHRpb25zLmFsZ29yaXRobX0nYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhc2V0Ll9kZWNpbWF0ZWQgPSBkZWNpbWF0ZWQ7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZGVzdHJveSAoY2hhcnQpIHtcbiAgICAgICAgY2xlYW5EZWNpbWF0ZWREYXRhKGNoYXJ0KTtcbiAgICB9XG59O1xuXG5mdW5jdGlvbiBfc2VnbWVudHMobGluZSwgdGFyZ2V0LCBwcm9wZXJ0eSkge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gbGluZS5zZWdtZW50cztcbiAgICBjb25zdCBwb2ludHMgPSBsaW5lLnBvaW50cztcbiAgICBjb25zdCB0cG9pbnRzID0gdGFyZ2V0LnBvaW50cztcbiAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cyl7XG4gICAgICAgIGxldCB7IHN0YXJ0ICwgZW5kICB9ID0gc2VnbWVudDtcbiAgICAgICAgZW5kID0gX2ZpbmRTZWdtZW50RW5kKHN0YXJ0LCBlbmQsIHBvaW50cyk7XG4gICAgICAgIGNvbnN0IGJvdW5kcyA9IF9nZXRCb3VuZHMocHJvcGVydHksIHBvaW50c1tzdGFydF0sIHBvaW50c1tlbmRdLCBzZWdtZW50Lmxvb3ApO1xuICAgICAgICBpZiAoIXRhcmdldC5zZWdtZW50cykge1xuICAgICAgICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgICAgICAgICAgc291cmNlOiBzZWdtZW50LFxuICAgICAgICAgICAgICAgIHRhcmdldDogYm91bmRzLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiBwb2ludHNbc3RhcnRdLFxuICAgICAgICAgICAgICAgIGVuZDogcG9pbnRzW2VuZF1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0U2VnbWVudHMgPSBfYm91bmRTZWdtZW50cyh0YXJnZXQsIGJvdW5kcyk7XG4gICAgICAgIGZvciAoY29uc3QgdGd0IG9mIHRhcmdldFNlZ21lbnRzKXtcbiAgICAgICAgICAgIGNvbnN0IHN1YkJvdW5kcyA9IF9nZXRCb3VuZHMocHJvcGVydHksIHRwb2ludHNbdGd0LnN0YXJ0XSwgdHBvaW50c1t0Z3QuZW5kXSwgdGd0Lmxvb3ApO1xuICAgICAgICAgICAgY29uc3QgZmlsbFNvdXJjZXMgPSBfYm91bmRTZWdtZW50KHNlZ21lbnQsIHBvaW50cywgc3ViQm91bmRzKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmlsbFNvdXJjZSBvZiBmaWxsU291cmNlcyl7XG4gICAgICAgICAgICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogZmlsbFNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0Z3QsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbcHJvcGVydHldOiBfZ2V0RWRnZShib3VuZHMsIHN1YkJvdW5kcywgJ3N0YXJ0JywgTWF0aC5tYXgpXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BlcnR5XTogX2dldEVkZ2UoYm91bmRzLCBzdWJCb3VuZHMsICdlbmQnLCBNYXRoLm1pbilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXJ0cztcbn1cbmZ1bmN0aW9uIF9nZXRCb3VuZHMocHJvcGVydHksIGZpcnN0LCBsYXN0LCBsb29wKSB7XG4gICAgaWYgKGxvb3ApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgc3RhcnQgPSBmaXJzdFtwcm9wZXJ0eV07XG4gICAgbGV0IGVuZCA9IGxhc3RbcHJvcGVydHldO1xuICAgIGlmIChwcm9wZXJ0eSA9PT0gJ2FuZ2xlJykge1xuICAgICAgICBzdGFydCA9IF9ub3JtYWxpemVBbmdsZShzdGFydCk7XG4gICAgICAgIGVuZCA9IF9ub3JtYWxpemVBbmdsZShlbmQpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGVuZFxuICAgIH07XG59XG5mdW5jdGlvbiBfcG9pbnRzRnJvbVNlZ21lbnRzKGJvdW5kYXJ5LCBsaW5lKSB7XG4gICAgY29uc3QgeyB4ID1udWxsICwgeSA9bnVsbCAgfSA9IGJvdW5kYXJ5IHx8IHt9O1xuICAgIGNvbnN0IGxpbmVQb2ludHMgPSBsaW5lLnBvaW50cztcbiAgICBjb25zdCBwb2ludHMgPSBbXTtcbiAgICBsaW5lLnNlZ21lbnRzLmZvckVhY2goKHsgc3RhcnQgLCBlbmQgIH0pPT57XG4gICAgICAgIGVuZCA9IF9maW5kU2VnbWVudEVuZChzdGFydCwgZW5kLCBsaW5lUG9pbnRzKTtcbiAgICAgICAgY29uc3QgZmlyc3QgPSBsaW5lUG9pbnRzW3N0YXJ0XTtcbiAgICAgICAgY29uc3QgbGFzdCA9IGxpbmVQb2ludHNbZW5kXTtcbiAgICAgICAgaWYgKHkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICB4OiBmaXJzdC54LFxuICAgICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgIHg6IGxhc3QueCxcbiAgICAgICAgICAgICAgICB5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICB5OiBmaXJzdC55XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgIHk6IGxhc3QueVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcG9pbnRzO1xufVxuZnVuY3Rpb24gX2ZpbmRTZWdtZW50RW5kKHN0YXJ0LCBlbmQsIHBvaW50cykge1xuICAgIGZvcig7IGVuZCA+IHN0YXJ0OyBlbmQtLSl7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gcG9pbnRzW2VuZF07XG4gICAgICAgIGlmICghaXNOYU4ocG9pbnQueCkgJiYgIWlzTmFOKHBvaW50LnkpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZW5kO1xufVxuZnVuY3Rpb24gX2dldEVkZ2UoYSwgYiwgcHJvcCwgZm4pIHtcbiAgICBpZiAoYSAmJiBiKSB7XG4gICAgICAgIHJldHVybiBmbihhW3Byb3BdLCBiW3Byb3BdKTtcbiAgICB9XG4gICAgcmV0dXJuIGEgPyBhW3Byb3BdIDogYiA/IGJbcHJvcF0gOiAwO1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlQm91bmRhcnlMaW5lKGJvdW5kYXJ5LCBsaW5lKSB7XG4gICAgbGV0IHBvaW50cyA9IFtdO1xuICAgIGxldCBfbG9vcCA9IGZhbHNlO1xuICAgIGlmIChpc0FycmF5KGJvdW5kYXJ5KSkge1xuICAgICAgICBfbG9vcCA9IHRydWU7XG4gICAgICAgIHBvaW50cyA9IGJvdW5kYXJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHBvaW50cyA9IF9wb2ludHNGcm9tU2VnbWVudHMoYm91bmRhcnksIGxpbmUpO1xuICAgIH1cbiAgICByZXR1cm4gcG9pbnRzLmxlbmd0aCA/IG5ldyBMaW5lRWxlbWVudCh7XG4gICAgICAgIHBvaW50cyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgdGVuc2lvbjogMFxuICAgICAgICB9LFxuICAgICAgICBfbG9vcCxcbiAgICAgICAgX2Z1bGxMb29wOiBfbG9vcFxuICAgIH0pIDogbnVsbDtcbn1cbmZ1bmN0aW9uIF9zaG91bGRBcHBseUZpbGwoc291cmNlKSB7XG4gICAgcmV0dXJuIHNvdXJjZSAmJiBzb3VyY2UuZmlsbCAhPT0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIF9yZXNvbHZlVGFyZ2V0KHNvdXJjZXMsIGluZGV4LCBwcm9wYWdhdGUpIHtcbiAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICBsZXQgZmlsbCA9IHNvdXJjZS5maWxsO1xuICAgIGNvbnN0IHZpc2l0ZWQgPSBbXG4gICAgICAgIGluZGV4XG4gICAgXTtcbiAgICBsZXQgdGFyZ2V0O1xuICAgIGlmICghcHJvcGFnYXRlKSB7XG4gICAgICAgIHJldHVybiBmaWxsO1xuICAgIH1cbiAgICB3aGlsZShmaWxsICE9PSBmYWxzZSAmJiB2aXNpdGVkLmluZGV4T2YoZmlsbCkgPT09IC0xKXtcbiAgICAgICAgaWYgKCFpc051bWJlckZpbml0ZShmaWxsKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbGw7XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0ID0gc291cmNlc1tmaWxsXTtcbiAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0LnZpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWxsO1xuICAgICAgICB9XG4gICAgICAgIHZpc2l0ZWQucHVzaChmaWxsKTtcbiAgICAgICAgZmlsbCA9IHRhcmdldC5maWxsO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG4gZnVuY3Rpb24gX2RlY29kZUZpbGwobGluZSwgaW5kZXgsIGNvdW50KSB7XG4gICAgIGNvbnN0IGZpbGwgPSBwYXJzZUZpbGxPcHRpb24obGluZSk7XG4gICAgaWYgKGlzT2JqZWN0KGZpbGwpKSB7XG4gICAgICAgIHJldHVybiBpc05hTihmaWxsLnZhbHVlKSA/IGZhbHNlIDogZmlsbDtcbiAgICB9XG4gICAgbGV0IHRhcmdldCA9IHBhcnNlRmxvYXQoZmlsbCk7XG4gICAgaWYgKGlzTnVtYmVyRmluaXRlKHRhcmdldCkgJiYgTWF0aC5mbG9vcih0YXJnZXQpID09PSB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZVRhcmdldEluZGV4KGZpbGxbMF0sIGluZGV4LCB0YXJnZXQsIGNvdW50KTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgICAgJ29yaWdpbicsXG4gICAgICAgICdzdGFydCcsXG4gICAgICAgICdlbmQnLFxuICAgICAgICAnc3RhY2snLFxuICAgICAgICAnc2hhcGUnXG4gICAgXS5pbmRleE9mKGZpbGwpID49IDAgJiYgZmlsbDtcbn1cbmZ1bmN0aW9uIGRlY29kZVRhcmdldEluZGV4KGZpcnN0Q2gsIGluZGV4LCB0YXJnZXQsIGNvdW50KSB7XG4gICAgaWYgKGZpcnN0Q2ggPT09ICctJyB8fCBmaXJzdENoID09PSAnKycpIHtcbiAgICAgICAgdGFyZ2V0ID0gaW5kZXggKyB0YXJnZXQ7XG4gICAgfVxuICAgIGlmICh0YXJnZXQgPT09IGluZGV4IHx8IHRhcmdldCA8IDAgfHwgdGFyZ2V0ID49IGNvdW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbiBmdW5jdGlvbiBfZ2V0VGFyZ2V0UGl4ZWwoZmlsbCwgc2NhbGUpIHtcbiAgICBsZXQgcGl4ZWwgPSBudWxsO1xuICAgIGlmIChmaWxsID09PSAnc3RhcnQnKSB7XG4gICAgICAgIHBpeGVsID0gc2NhbGUuYm90dG9tO1xuICAgIH0gZWxzZSBpZiAoZmlsbCA9PT0gJ2VuZCcpIHtcbiAgICAgICAgcGl4ZWwgPSBzY2FsZS50b3A7XG4gICAgfSBlbHNlIGlmIChpc09iamVjdChmaWxsKSkge1xuICAgICAgICBwaXhlbCA9IHNjYWxlLmdldFBpeGVsRm9yVmFsdWUoZmlsbC52YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChzY2FsZS5nZXRCYXNlUGl4ZWwpIHtcbiAgICAgICAgcGl4ZWwgPSBzY2FsZS5nZXRCYXNlUGl4ZWwoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBpeGVsO1xufVxuIGZ1bmN0aW9uIF9nZXRUYXJnZXRWYWx1ZShmaWxsLCBzY2FsZSwgc3RhcnRWYWx1ZSkge1xuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAoZmlsbCA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICB2YWx1ZSA9IHN0YXJ0VmFsdWU7XG4gICAgfSBlbHNlIGlmIChmaWxsID09PSAnZW5kJykge1xuICAgICAgICB2YWx1ZSA9IHNjYWxlLm9wdGlvbnMucmV2ZXJzZSA/IHNjYWxlLm1pbiA6IHNjYWxlLm1heDtcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGZpbGwpKSB7XG4gICAgICAgIHZhbHVlID0gZmlsbC52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IHNjYWxlLmdldEJhc2VWYWx1ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG4gZnVuY3Rpb24gcGFyc2VGaWxsT3B0aW9uKGxpbmUpIHtcbiAgICBjb25zdCBvcHRpb25zID0gbGluZS5vcHRpb25zO1xuICAgIGNvbnN0IGZpbGxPcHRpb24gPSBvcHRpb25zLmZpbGw7XG4gICAgbGV0IGZpbGwgPSB2YWx1ZU9yRGVmYXVsdChmaWxsT3B0aW9uICYmIGZpbGxPcHRpb24udGFyZ2V0LCBmaWxsT3B0aW9uKTtcbiAgICBpZiAoZmlsbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZpbGwgPSAhIW9wdGlvbnMuYmFja2dyb3VuZENvbG9yO1xuICAgIH1cbiAgICBpZiAoZmlsbCA9PT0gZmFsc2UgfHwgZmlsbCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChmaWxsID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiAnb3JpZ2luJztcbiAgICB9XG4gICAgcmV0dXJuIGZpbGw7XG59XG5cbmZ1bmN0aW9uIF9idWlsZFN0YWNrTGluZShzb3VyY2UpIHtcbiAgICBjb25zdCB7IHNjYWxlICwgaW5kZXggLCBsaW5lICB9ID0gc291cmNlO1xuICAgIGNvbnN0IHBvaW50cyA9IFtdO1xuICAgIGNvbnN0IHNlZ21lbnRzID0gbGluZS5zZWdtZW50cztcbiAgICBjb25zdCBzb3VyY2VQb2ludHMgPSBsaW5lLnBvaW50cztcbiAgICBjb25zdCBsaW5lc0JlbG93ID0gZ2V0TGluZXNCZWxvdyhzY2FsZSwgaW5kZXgpO1xuICAgIGxpbmVzQmVsb3cucHVzaChfY3JlYXRlQm91bmRhcnlMaW5lKHtcbiAgICAgICAgeDogbnVsbCxcbiAgICAgICAgeTogc2NhbGUuYm90dG9tXG4gICAgfSwgbGluZSkpO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50c1tpXTtcbiAgICAgICAgZm9yKGxldCBqID0gc2VnbWVudC5zdGFydDsgaiA8PSBzZWdtZW50LmVuZDsgaisrKXtcbiAgICAgICAgICAgIGFkZFBvaW50c0JlbG93KHBvaW50cywgc291cmNlUG9pbnRzW2pdLCBsaW5lc0JlbG93KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IExpbmVFbGVtZW50KHtcbiAgICAgICAgcG9pbnRzLFxuICAgICAgICBvcHRpb25zOiB7fVxuICAgIH0pO1xufVxuIGZ1bmN0aW9uIGdldExpbmVzQmVsb3coc2NhbGUsIGluZGV4KSB7XG4gICAgY29uc3QgYmVsb3cgPSBbXTtcbiAgICBjb25zdCBtZXRhcyA9IHNjYWxlLmdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKCdsaW5lJyk7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IG1ldGFzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgY29uc3QgbWV0YSA9IG1ldGFzW2ldO1xuICAgICAgICBpZiAobWV0YS5pbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWV0YS5oaWRkZW4pIHtcbiAgICAgICAgICAgIGJlbG93LnVuc2hpZnQobWV0YS5kYXRhc2V0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmVsb3c7XG59XG4gZnVuY3Rpb24gYWRkUG9pbnRzQmVsb3cocG9pbnRzLCBzb3VyY2VQb2ludCwgbGluZXNCZWxvdykge1xuICAgIGNvbnN0IHBvc3Rwb25lZCA9IFtdO1xuICAgIGZvcihsZXQgaiA9IDA7IGogPCBsaW5lc0JlbG93Lmxlbmd0aDsgaisrKXtcbiAgICAgICAgY29uc3QgbGluZSA9IGxpbmVzQmVsb3dbal07XG4gICAgICAgIGNvbnN0IHsgZmlyc3QgLCBsYXN0ICwgcG9pbnQgIH0gPSBmaW5kUG9pbnQobGluZSwgc291cmNlUG9pbnQsICd4Jyk7XG4gICAgICAgIGlmICghcG9pbnQgfHwgZmlyc3QgJiYgbGFzdCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgICBwb3N0cG9uZWQudW5zaGlmdChwb2ludCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb2ludHMucHVzaChwb2ludCk7XG4gICAgICAgICAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBwb2ludHMucHVzaCguLi5wb3N0cG9uZWQpO1xufVxuIGZ1bmN0aW9uIGZpbmRQb2ludChsaW5lLCBzb3VyY2VQb2ludCwgcHJvcGVydHkpIHtcbiAgICBjb25zdCBwb2ludCA9IGxpbmUuaW50ZXJwb2xhdGUoc291cmNlUG9pbnQsIHByb3BlcnR5KTtcbiAgICBpZiAoIXBvaW50KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcG9pbnRWYWx1ZSA9IHBvaW50W3Byb3BlcnR5XTtcbiAgICBjb25zdCBzZWdtZW50cyA9IGxpbmUuc2VnbWVudHM7XG4gICAgY29uc3QgbGluZVBvaW50cyA9IGxpbmUucG9pbnRzO1xuICAgIGxldCBmaXJzdCA9IGZhbHNlO1xuICAgIGxldCBsYXN0ID0gZmFsc2U7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IHNlZ21lbnRzW2ldO1xuICAgICAgICBjb25zdCBmaXJzdFZhbHVlID0gbGluZVBvaW50c1tzZWdtZW50LnN0YXJ0XVtwcm9wZXJ0eV07XG4gICAgICAgIGNvbnN0IGxhc3RWYWx1ZSA9IGxpbmVQb2ludHNbc2VnbWVudC5lbmRdW3Byb3BlcnR5XTtcbiAgICAgICAgaWYgKF9pc0JldHdlZW4ocG9pbnRWYWx1ZSwgZmlyc3RWYWx1ZSwgbGFzdFZhbHVlKSkge1xuICAgICAgICAgICAgZmlyc3QgPSBwb2ludFZhbHVlID09PSBmaXJzdFZhbHVlO1xuICAgICAgICAgICAgbGFzdCA9IHBvaW50VmFsdWUgPT09IGxhc3RWYWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGZpcnN0LFxuICAgICAgICBsYXN0LFxuICAgICAgICBwb2ludFxuICAgIH07XG59XG5cbmNsYXNzIHNpbXBsZUFyYyB7XG4gICAgY29uc3RydWN0b3Iob3B0cyl7XG4gICAgICAgIHRoaXMueCA9IG9wdHMueDtcbiAgICAgICAgdGhpcy55ID0gb3B0cy55O1xuICAgICAgICB0aGlzLnJhZGl1cyA9IG9wdHMucmFkaXVzO1xuICAgIH1cbiAgICBwYXRoU2VnbWVudChjdHgsIGJvdW5kcywgb3B0cykge1xuICAgICAgICBjb25zdCB7IHggLCB5ICwgcmFkaXVzICB9ID0gdGhpcztcbiAgICAgICAgYm91bmRzID0gYm91bmRzIHx8IHtcbiAgICAgICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICAgICAgZW5kOiBUQVVcbiAgICAgICAgfTtcbiAgICAgICAgY3R4LmFyYyh4LCB5LCByYWRpdXMsIGJvdW5kcy5lbmQsIGJvdW5kcy5zdGFydCwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiAhb3B0cy5ib3VuZHM7XG4gICAgfVxuICAgIGludGVycG9sYXRlKHBvaW50KSB7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgLCByYWRpdXMgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBhbmdsZSA9IHBvaW50LmFuZ2xlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogeCArIE1hdGguY29zKGFuZ2xlKSAqIHJhZGl1cyxcbiAgICAgICAgICAgIHk6IHkgKyBNYXRoLnNpbihhbmdsZSkgKiByYWRpdXMsXG4gICAgICAgICAgICBhbmdsZVxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gX2dldFRhcmdldChzb3VyY2UpIHtcbiAgICBjb25zdCB7IGNoYXJ0ICwgZmlsbCAsIGxpbmUgIH0gPSBzb3VyY2U7XG4gICAgaWYgKGlzTnVtYmVyRmluaXRlKGZpbGwpKSB7XG4gICAgICAgIHJldHVybiBnZXRMaW5lQnlJbmRleChjaGFydCwgZmlsbCk7XG4gICAgfVxuICAgIGlmIChmaWxsID09PSAnc3RhY2snKSB7XG4gICAgICAgIHJldHVybiBfYnVpbGRTdGFja0xpbmUoc291cmNlKTtcbiAgICB9XG4gICAgaWYgKGZpbGwgPT09ICdzaGFwZScpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGJvdW5kYXJ5ID0gY29tcHV0ZUJvdW5kYXJ5KHNvdXJjZSk7XG4gICAgaWYgKGJvdW5kYXJ5IGluc3RhbmNlb2Ygc2ltcGxlQXJjKSB7XG4gICAgICAgIHJldHVybiBib3VuZGFyeTtcbiAgICB9XG4gICAgcmV0dXJuIF9jcmVhdGVCb3VuZGFyeUxpbmUoYm91bmRhcnksIGxpbmUpO1xufVxuIGZ1bmN0aW9uIGdldExpbmVCeUluZGV4KGNoYXJ0LCBpbmRleCkge1xuICAgIGNvbnN0IG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpbmRleCk7XG4gICAgY29uc3QgdmlzaWJsZSA9IG1ldGEgJiYgY2hhcnQuaXNEYXRhc2V0VmlzaWJsZShpbmRleCk7XG4gICAgcmV0dXJuIHZpc2libGUgPyBtZXRhLmRhdGFzZXQgOiBudWxsO1xufVxuZnVuY3Rpb24gY29tcHV0ZUJvdW5kYXJ5KHNvdXJjZSkge1xuICAgIGNvbnN0IHNjYWxlID0gc291cmNlLnNjYWxlIHx8IHt9O1xuICAgIGlmIChzY2FsZS5nZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbXB1dGVDaXJjdWxhckJvdW5kYXJ5KHNvdXJjZSk7XG4gICAgfVxuICAgIHJldHVybiBjb21wdXRlTGluZWFyQm91bmRhcnkoc291cmNlKTtcbn1cbmZ1bmN0aW9uIGNvbXB1dGVMaW5lYXJCb3VuZGFyeShzb3VyY2UpIHtcbiAgICBjb25zdCB7IHNjYWxlID17fSAsIGZpbGwgIH0gPSBzb3VyY2U7XG4gICAgY29uc3QgcGl4ZWwgPSBfZ2V0VGFyZ2V0UGl4ZWwoZmlsbCwgc2NhbGUpO1xuICAgIGlmIChpc051bWJlckZpbml0ZShwaXhlbCkpIHtcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbCA9IHNjYWxlLmlzSG9yaXpvbnRhbCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogaG9yaXpvbnRhbCA/IHBpeGVsIDogbnVsbCxcbiAgICAgICAgICAgIHk6IGhvcml6b250YWwgPyBudWxsIDogcGl4ZWxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBjb21wdXRlQ2lyY3VsYXJCb3VuZGFyeShzb3VyY2UpIHtcbiAgICBjb25zdCB7IHNjYWxlICwgZmlsbCAgfSA9IHNvdXJjZTtcbiAgICBjb25zdCBvcHRpb25zID0gc2NhbGUub3B0aW9ucztcbiAgICBjb25zdCBsZW5ndGggPSBzY2FsZS5nZXRMYWJlbHMoKS5sZW5ndGg7XG4gICAgY29uc3Qgc3RhcnQgPSBvcHRpb25zLnJldmVyc2UgPyBzY2FsZS5tYXggOiBzY2FsZS5taW47XG4gICAgY29uc3QgdmFsdWUgPSBfZ2V0VGFyZ2V0VmFsdWUoZmlsbCwgc2NhbGUsIHN0YXJ0KTtcbiAgICBjb25zdCB0YXJnZXQgPSBbXTtcbiAgICBpZiAob3B0aW9ucy5ncmlkLmNpcmN1bGFyKSB7XG4gICAgICAgIGNvbnN0IGNlbnRlciA9IHNjYWxlLmdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZSgwLCBzdGFydCk7XG4gICAgICAgIHJldHVybiBuZXcgc2ltcGxlQXJjKHtcbiAgICAgICAgICAgIHg6IGNlbnRlci54LFxuICAgICAgICAgICAgeTogY2VudGVyLnksXG4gICAgICAgICAgICByYWRpdXM6IHNjYWxlLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHZhbHVlKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKXtcbiAgICAgICAgdGFyZ2V0LnB1c2goc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKGksIHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9kcmF3ZmlsbChjdHgsIHNvdXJjZSwgYXJlYSkge1xuICAgIGNvbnN0IHRhcmdldCA9IF9nZXRUYXJnZXQoc291cmNlKTtcbiAgICBjb25zdCB7IGxpbmUgLCBzY2FsZSAsIGF4aXMgIH0gPSBzb3VyY2U7XG4gICAgY29uc3QgbGluZU9wdHMgPSBsaW5lLm9wdGlvbnM7XG4gICAgY29uc3QgZmlsbE9wdGlvbiA9IGxpbmVPcHRzLmZpbGw7XG4gICAgY29uc3QgY29sb3IgPSBsaW5lT3B0cy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgY29uc3QgeyBhYm92ZSA9Y29sb3IgLCBiZWxvdyA9Y29sb3IgIH0gPSBmaWxsT3B0aW9uIHx8IHt9O1xuICAgIGlmICh0YXJnZXQgJiYgbGluZS5wb2ludHMubGVuZ3RoKSB7XG4gICAgICAgIGNsaXBBcmVhKGN0eCwgYXJlYSk7XG4gICAgICAgIGRvRmlsbChjdHgsIHtcbiAgICAgICAgICAgIGxpbmUsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBhYm92ZSxcbiAgICAgICAgICAgIGJlbG93LFxuICAgICAgICAgICAgYXJlYSxcbiAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgYXhpc1xuICAgICAgICB9KTtcbiAgICAgICAgdW5jbGlwQXJlYShjdHgpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRvRmlsbChjdHgsIGNmZykge1xuICAgIGNvbnN0IHsgbGluZSAsIHRhcmdldCAsIGFib3ZlICwgYmVsb3cgLCBhcmVhICwgc2NhbGUgIH0gPSBjZmc7XG4gICAgY29uc3QgcHJvcGVydHkgPSBsaW5lLl9sb29wID8gJ2FuZ2xlJyA6IGNmZy5heGlzO1xuICAgIGN0eC5zYXZlKCk7XG4gICAgaWYgKHByb3BlcnR5ID09PSAneCcgJiYgYmVsb3cgIT09IGFib3ZlKSB7XG4gICAgICAgIGNsaXBWZXJ0aWNhbChjdHgsIHRhcmdldCwgYXJlYS50b3ApO1xuICAgICAgICBmaWxsKGN0eCwge1xuICAgICAgICAgICAgbGluZSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIGNvbG9yOiBhYm92ZSxcbiAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgcHJvcGVydHlcbiAgICAgICAgfSk7XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgIGNsaXBWZXJ0aWNhbChjdHgsIHRhcmdldCwgYXJlYS5ib3R0b20pO1xuICAgIH1cbiAgICBmaWxsKGN0eCwge1xuICAgICAgICBsaW5lLFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIGNvbG9yOiBiZWxvdyxcbiAgICAgICAgc2NhbGUsXG4gICAgICAgIHByb3BlcnR5XG4gICAgfSk7XG4gICAgY3R4LnJlc3RvcmUoKTtcbn1cbmZ1bmN0aW9uIGNsaXBWZXJ0aWNhbChjdHgsIHRhcmdldCwgY2xpcFkpIHtcbiAgICBjb25zdCB7IHNlZ21lbnRzICwgcG9pbnRzICB9ID0gdGFyZ2V0O1xuICAgIGxldCBmaXJzdCA9IHRydWU7XG4gICAgbGV0IGxpbmVMb29wID0gZmFsc2U7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cyl7XG4gICAgICAgIGNvbnN0IHsgc3RhcnQgLCBlbmQgIH0gPSBzZWdtZW50O1xuICAgICAgICBjb25zdCBmaXJzdFBvaW50ID0gcG9pbnRzW3N0YXJ0XTtcbiAgICAgICAgY29uc3QgbGFzdFBvaW50ID0gcG9pbnRzW19maW5kU2VnbWVudEVuZChzdGFydCwgZW5kLCBwb2ludHMpXTtcbiAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgICBjdHgubW92ZVRvKGZpcnN0UG9pbnQueCwgZmlyc3RQb2ludC55KTtcbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdHgubGluZVRvKGZpcnN0UG9pbnQueCwgY2xpcFkpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyhmaXJzdFBvaW50LngsIGZpcnN0UG9pbnQueSk7XG4gICAgICAgIH1cbiAgICAgICAgbGluZUxvb3AgPSAhIXRhcmdldC5wYXRoU2VnbWVudChjdHgsIHNlZ21lbnQsIHtcbiAgICAgICAgICAgIG1vdmU6IGxpbmVMb29wXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobGluZUxvb3ApIHtcbiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN0eC5saW5lVG8obGFzdFBvaW50LngsIGNsaXBZKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjdHgubGluZVRvKHRhcmdldC5maXJzdCgpLngsIGNsaXBZKTtcbiAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgY3R4LmNsaXAoKTtcbn1cbmZ1bmN0aW9uIGZpbGwoY3R4LCBjZmcpIHtcbiAgICBjb25zdCB7IGxpbmUgLCB0YXJnZXQgLCBwcm9wZXJ0eSAsIGNvbG9yICwgc2NhbGUgIH0gPSBjZmc7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBfc2VnbWVudHMobGluZSwgdGFyZ2V0LCBwcm9wZXJ0eSk7XG4gICAgZm9yIChjb25zdCB7IHNvdXJjZTogc3JjICwgdGFyZ2V0OiB0Z3QgLCBzdGFydCAsIGVuZCAgfSBvZiBzZWdtZW50cyl7XG4gICAgICAgIGNvbnN0IHsgc3R5bGU6IHsgYmFja2dyb3VuZENvbG9yID1jb2xvciAgfSA9IHt9ICB9ID0gc3JjO1xuICAgICAgICBjb25zdCBub3RTaGFwZSA9IHRhcmdldCAhPT0gdHJ1ZTtcbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgY2xpcEJvdW5kcyhjdHgsIHNjYWxlLCBub3RTaGFwZSAmJiBfZ2V0Qm91bmRzKHByb3BlcnR5LCBzdGFydCwgZW5kKSk7XG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgY29uc3QgbGluZUxvb3AgPSAhIWxpbmUucGF0aFNlZ21lbnQoY3R4LCBzcmMpO1xuICAgICAgICBsZXQgbG9vcDtcbiAgICAgICAgaWYgKG5vdFNoYXBlKSB7XG4gICAgICAgICAgICBpZiAobGluZUxvb3ApIHtcbiAgICAgICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGludGVycG9sYXRlZExpbmVUbyhjdHgsIHRhcmdldCwgZW5kLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRMb29wID0gISF0YXJnZXQucGF0aFNlZ21lbnQoY3R4LCB0Z3QsIHtcbiAgICAgICAgICAgICAgICBtb3ZlOiBsaW5lTG9vcCxcbiAgICAgICAgICAgICAgICByZXZlcnNlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvb3AgPSBsaW5lTG9vcCAmJiB0YXJnZXRMb29wO1xuICAgICAgICAgICAgaWYgKCFsb29wKSB7XG4gICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVkTGluZVRvKGN0eCwgdGFyZ2V0LCBzdGFydCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgY3R4LmZpbGwobG9vcCA/ICdldmVub2RkJyA6ICdub256ZXJvJyk7XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gY2xpcEJvdW5kcyhjdHgsIHNjYWxlLCBib3VuZHMpIHtcbiAgICBjb25zdCB7IHRvcCAsIGJvdHRvbSAgfSA9IHNjYWxlLmNoYXJ0LmNoYXJ0QXJlYTtcbiAgICBjb25zdCB7IHByb3BlcnR5ICwgc3RhcnQgLCBlbmQgIH0gPSBib3VuZHMgfHwge307XG4gICAgaWYgKHByb3BlcnR5ID09PSAneCcpIHtcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBjdHgucmVjdChzdGFydCwgdG9wLCBlbmQgLSBzdGFydCwgYm90dG9tIC0gdG9wKTtcbiAgICAgICAgY3R4LmNsaXAoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbnRlcnBvbGF0ZWRMaW5lVG8oY3R4LCB0YXJnZXQsIHBvaW50LCBwcm9wZXJ0eSkge1xuICAgIGNvbnN0IGludGVycG9sYXRlZFBvaW50ID0gdGFyZ2V0LmludGVycG9sYXRlKHBvaW50LCBwcm9wZXJ0eSk7XG4gICAgaWYgKGludGVycG9sYXRlZFBvaW50KSB7XG4gICAgICAgIGN0eC5saW5lVG8oaW50ZXJwb2xhdGVkUG9pbnQueCwgaW50ZXJwb2xhdGVkUG9pbnQueSk7XG4gICAgfVxufVxuXG52YXIgaW5kZXggPSB7XG4gICAgaWQ6ICdmaWxsZXInLFxuICAgIGFmdGVyRGF0YXNldHNVcGRhdGUgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBjb3VudCA9IChjaGFydC5kYXRhLmRhdGFzZXRzIHx8IFtdKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHNvdXJjZXMgPSBbXTtcbiAgICAgICAgbGV0IG1ldGEsIGksIGxpbmUsIHNvdXJjZTtcbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgY291bnQ7ICsraSl7XG4gICAgICAgICAgICBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoaSk7XG4gICAgICAgICAgICBsaW5lID0gbWV0YS5kYXRhc2V0O1xuICAgICAgICAgICAgc291cmNlID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChsaW5lICYmIGxpbmUub3B0aW9ucyAmJiBsaW5lIGluc3RhbmNlb2YgTGluZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBzb3VyY2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGNoYXJ0LmlzRGF0YXNldFZpc2libGUoaSksXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBfZGVjb2RlRmlsbChsaW5lLCBpLCBjb3VudCksXG4gICAgICAgICAgICAgICAgICAgIGNoYXJ0LFxuICAgICAgICAgICAgICAgICAgICBheGlzOiBtZXRhLmNvbnRyb2xsZXIub3B0aW9ucy5pbmRleEF4aXMsXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlOiBtZXRhLnZTY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgbGluZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtZXRhLiRmaWxsZXIgPSBzb3VyY2U7XG4gICAgICAgICAgICBzb3VyY2VzLnB1c2goc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IoaSA9IDA7IGkgPCBjb3VudDsgKytpKXtcbiAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZXNbaV07XG4gICAgICAgICAgICBpZiAoIXNvdXJjZSB8fCBzb3VyY2UuZmlsbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNvdXJjZS5maWxsID0gX3Jlc29sdmVUYXJnZXQoc291cmNlcywgaSwgb3B0aW9ucy5wcm9wYWdhdGUpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBiZWZvcmVEcmF3IChjaGFydCwgX2FyZ3MsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZHJhdyA9IG9wdGlvbnMuZHJhd1RpbWUgPT09ICdiZWZvcmVEcmF3JztcbiAgICAgICAgY29uc3QgbWV0YXNldHMgPSBjaGFydC5nZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzKCk7XG4gICAgICAgIGNvbnN0IGFyZWEgPSBjaGFydC5jaGFydEFyZWE7XG4gICAgICAgIGZvcihsZXQgaSA9IG1ldGFzZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKXtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IG1ldGFzZXRzW2ldLiRmaWxsZXI7XG4gICAgICAgICAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc291cmNlLmxpbmUudXBkYXRlQ29udHJvbFBvaW50cyhhcmVhLCBzb3VyY2UuYXhpcyk7XG4gICAgICAgICAgICBpZiAoZHJhdyAmJiBzb3VyY2UuZmlsbCkge1xuICAgICAgICAgICAgICAgIF9kcmF3ZmlsbChjaGFydC5jdHgsIHNvdXJjZSwgYXJlYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGJlZm9yZURhdGFzZXRzRHJhdyAoY2hhcnQsIF9hcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmRyYXdUaW1lICE9PSAnYmVmb3JlRGF0YXNldHNEcmF3Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldGFzZXRzID0gY2hhcnQuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpO1xuICAgICAgICBmb3IobGV0IGkgPSBtZXRhc2V0cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSl7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBtZXRhc2V0c1tpXS4kZmlsbGVyO1xuICAgICAgICAgICAgaWYgKF9zaG91bGRBcHBseUZpbGwoc291cmNlKSkge1xuICAgICAgICAgICAgICAgIF9kcmF3ZmlsbChjaGFydC5jdHgsIHNvdXJjZSwgY2hhcnQuY2hhcnRBcmVhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgYmVmb3JlRGF0YXNldERyYXcgKGNoYXJ0LCBhcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGFyZ3MubWV0YS4kZmlsbGVyO1xuICAgICAgICBpZiAoIV9zaG91bGRBcHBseUZpbGwoc291cmNlKSB8fCBvcHRpb25zLmRyYXdUaW1lICE9PSAnYmVmb3JlRGF0YXNldERyYXcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgX2RyYXdmaWxsKGNoYXJ0LmN0eCwgc291cmNlLCBjaGFydC5jaGFydEFyZWEpO1xuICAgIH0sXG4gICAgZGVmYXVsdHM6IHtcbiAgICAgICAgcHJvcGFnYXRlOiB0cnVlLFxuICAgICAgICBkcmF3VGltZTogJ2JlZm9yZURhdGFzZXREcmF3J1xuICAgIH1cbn07XG5cbmNvbnN0IGdldEJveFNpemUgPSAobGFiZWxPcHRzLCBmb250U2l6ZSk9PntcbiAgICBsZXQgeyBib3hIZWlnaHQgPWZvbnRTaXplICwgYm94V2lkdGggPWZvbnRTaXplICB9ID0gbGFiZWxPcHRzO1xuICAgIGlmIChsYWJlbE9wdHMudXNlUG9pbnRTdHlsZSkge1xuICAgICAgICBib3hIZWlnaHQgPSBNYXRoLm1pbihib3hIZWlnaHQsIGZvbnRTaXplKTtcbiAgICAgICAgYm94V2lkdGggPSBsYWJlbE9wdHMucG9pbnRTdHlsZVdpZHRoIHx8IE1hdGgubWluKGJveFdpZHRoLCBmb250U2l6ZSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGJveFdpZHRoLFxuICAgICAgICBib3hIZWlnaHQsXG4gICAgICAgIGl0ZW1IZWlnaHQ6IE1hdGgubWF4KGZvbnRTaXplLCBib3hIZWlnaHQpXG4gICAgfTtcbn07XG5jb25zdCBpdGVtc0VxdWFsID0gKGEsIGIpPT5hICE9PSBudWxsICYmIGIgIT09IG51bGwgJiYgYS5kYXRhc2V0SW5kZXggPT09IGIuZGF0YXNldEluZGV4ICYmIGEuaW5kZXggPT09IGIuaW5kZXg7XG5jbGFzcyBMZWdlbmQgZXh0ZW5kcyBFbGVtZW50IHtcbiBjb25zdHJ1Y3Rvcihjb25maWcpe1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9hZGRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxlZ2VuZEhpdEJveGVzID0gW107XG4gdGhpcy5faG92ZXJlZEl0ZW0gPSBudWxsO1xuICAgICAgICB0aGlzLmRvdWdobnV0TW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNoYXJ0ID0gY29uZmlnLmNoYXJ0O1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBjb25maWcub3B0aW9ucztcbiAgICAgICAgdGhpcy5jdHggPSBjb25maWcuY3R4O1xuICAgICAgICB0aGlzLmxlZ2VuZEl0ZW1zID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmNvbHVtblNpemVzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmxpbmVXaWR0aHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm1heFdpZHRoID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnRvcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5ib3R0b20gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubGVmdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5yaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMud2lkdGggPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX21hcmdpbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucG9zaXRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMud2VpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmZ1bGxTaXplID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB1cGRhdGUobWF4V2lkdGgsIG1heEhlaWdodCwgbWFyZ2lucykge1xuICAgICAgICB0aGlzLm1heFdpZHRoID0gbWF4V2lkdGg7XG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gbWF4SGVpZ2h0O1xuICAgICAgICB0aGlzLl9tYXJnaW5zID0gbWFyZ2lucztcbiAgICAgICAgdGhpcy5zZXREaW1lbnNpb25zKCk7XG4gICAgICAgIHRoaXMuYnVpbGRMYWJlbHMoKTtcbiAgICAgICAgdGhpcy5maXQoKTtcbiAgICB9XG4gICAgc2V0RGltZW5zaW9ucygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLm1heFdpZHRoO1xuICAgICAgICAgICAgdGhpcy5sZWZ0ID0gdGhpcy5fbWFyZ2lucy5sZWZ0O1xuICAgICAgICAgICAgdGhpcy5yaWdodCA9IHRoaXMud2lkdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy50b3AgPSB0aGlzLl9tYXJnaW5zLnRvcDtcbiAgICAgICAgICAgIHRoaXMuYm90dG9tID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYnVpbGRMYWJlbHMoKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsT3B0cyA9IHRoaXMub3B0aW9ucy5sYWJlbHMgfHwge307XG4gICAgICAgIGxldCBsZWdlbmRJdGVtcyA9IGNhbGxiYWNrKGxhYmVsT3B0cy5nZW5lcmF0ZUxhYmVscywgW1xuICAgICAgICAgICAgdGhpcy5jaGFydFxuICAgICAgICBdLCB0aGlzKSB8fCBbXTtcbiAgICAgICAgaWYgKGxhYmVsT3B0cy5maWx0ZXIpIHtcbiAgICAgICAgICAgIGxlZ2VuZEl0ZW1zID0gbGVnZW5kSXRlbXMuZmlsdGVyKChpdGVtKT0+bGFiZWxPcHRzLmZpbHRlcihpdGVtLCB0aGlzLmNoYXJ0LmRhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGFiZWxPcHRzLnNvcnQpIHtcbiAgICAgICAgICAgIGxlZ2VuZEl0ZW1zID0gbGVnZW5kSXRlbXMuc29ydCgoYSwgYik9PmxhYmVsT3B0cy5zb3J0KGEsIGIsIHRoaXMuY2hhcnQuZGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmV2ZXJzZSkge1xuICAgICAgICAgICAgbGVnZW5kSXRlbXMucmV2ZXJzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGVnZW5kSXRlbXMgPSBsZWdlbmRJdGVtcztcbiAgICB9XG4gICAgZml0KCkge1xuICAgICAgICBjb25zdCB7IG9wdGlvbnMgLCBjdHggIH0gPSB0aGlzO1xuICAgICAgICBpZiAoIW9wdGlvbnMuZGlzcGxheSkge1xuICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuaGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYWJlbE9wdHMgPSBvcHRpb25zLmxhYmVscztcbiAgICAgICAgY29uc3QgbGFiZWxGb250ID0gdG9Gb250KGxhYmVsT3B0cy5mb250KTtcbiAgICAgICAgY29uc3QgZm9udFNpemUgPSBsYWJlbEZvbnQuc2l6ZTtcbiAgICAgICAgY29uc3QgdGl0bGVIZWlnaHQgPSB0aGlzLl9jb21wdXRlVGl0bGVIZWlnaHQoKTtcbiAgICAgICAgY29uc3QgeyBib3hXaWR0aCAsIGl0ZW1IZWlnaHQgIH0gPSBnZXRCb3hTaXplKGxhYmVsT3B0cywgZm9udFNpemUpO1xuICAgICAgICBsZXQgd2lkdGgsIGhlaWdodDtcbiAgICAgICAgY3R4LmZvbnQgPSBsYWJlbEZvbnQuc3RyaW5nO1xuICAgICAgICBpZiAodGhpcy5pc0hvcml6b250YWwoKSkge1xuICAgICAgICAgICAgd2lkdGggPSB0aGlzLm1heFdpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5fZml0Um93cyh0aXRsZUhlaWdodCwgZm9udFNpemUsIGJveFdpZHRoLCBpdGVtSGVpZ2h0KSArIDEwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQ7XG4gICAgICAgICAgICB3aWR0aCA9IHRoaXMuX2ZpdENvbHModGl0bGVIZWlnaHQsIGxhYmVsRm9udCwgYm94V2lkdGgsIGl0ZW1IZWlnaHQpICsgMTA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aWR0aCA9IE1hdGgubWluKHdpZHRoLCBvcHRpb25zLm1heFdpZHRoIHx8IHRoaXMubWF4V2lkdGgpO1xuICAgICAgICB0aGlzLmhlaWdodCA9IE1hdGgubWluKGhlaWdodCwgb3B0aW9ucy5tYXhIZWlnaHQgfHwgdGhpcy5tYXhIZWlnaHQpO1xuICAgIH1cbiBfZml0Um93cyh0aXRsZUhlaWdodCwgZm9udFNpemUsIGJveFdpZHRoLCBpdGVtSGVpZ2h0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4ICwgbWF4V2lkdGggLCBvcHRpb25zOiB7IGxhYmVsczogeyBwYWRkaW5nICB9ICB9ICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgaGl0Ym94ZXMgPSB0aGlzLmxlZ2VuZEhpdEJveGVzID0gW107XG4gICAgICAgIGNvbnN0IGxpbmVXaWR0aHMgPSB0aGlzLmxpbmVXaWR0aHMgPSBbXG4gICAgICAgICAgICAwXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBpdGVtSGVpZ2h0ICsgcGFkZGluZztcbiAgICAgICAgbGV0IHRvdGFsSGVpZ2h0ID0gdGl0bGVIZWlnaHQ7XG4gICAgICAgIGN0eC50ZXh0QWxpZ24gPSAnbGVmdCc7XG4gICAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcbiAgICAgICAgbGV0IHJvdyA9IC0xO1xuICAgICAgICBsZXQgdG9wID0gLWxpbmVIZWlnaHQ7XG4gICAgICAgIHRoaXMubGVnZW5kSXRlbXMuZm9yRWFjaCgobGVnZW5kSXRlbSwgaSk9PntcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IGJveFdpZHRoICsgZm9udFNpemUgLyAyICsgY3R4Lm1lYXN1cmVUZXh0KGxlZ2VuZEl0ZW0udGV4dCkud2lkdGg7XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCB8fCBsaW5lV2lkdGhzW2xpbmVXaWR0aHMubGVuZ3RoIC0gMV0gKyBpdGVtV2lkdGggKyAyICogcGFkZGluZyA+IG1heFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgdG90YWxIZWlnaHQgKz0gbGluZUhlaWdodDtcbiAgICAgICAgICAgICAgICBsaW5lV2lkdGhzW2xpbmVXaWR0aHMubGVuZ3RoIC0gKGkgPiAwID8gMCA6IDEpXSA9IDA7XG4gICAgICAgICAgICAgICAgdG9wICs9IGxpbmVIZWlnaHQ7XG4gICAgICAgICAgICAgICAgcm93Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoaXRib3hlc1tpXSA9IHtcbiAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgd2lkdGg6IGl0ZW1XaWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGl0ZW1IZWlnaHRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBsaW5lV2lkdGhzW2xpbmVXaWR0aHMubGVuZ3RoIC0gMV0gKz0gaXRlbVdpZHRoICsgcGFkZGluZztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0b3RhbEhlaWdodDtcbiAgICB9XG4gICAgX2ZpdENvbHModGl0bGVIZWlnaHQsIGxhYmVsRm9udCwgYm94V2lkdGgsIF9pdGVtSGVpZ2h0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4ICwgbWF4SGVpZ2h0ICwgb3B0aW9uczogeyBsYWJlbHM6IHsgcGFkZGluZyAgfSAgfSAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGhpdGJveGVzID0gdGhpcy5sZWdlbmRIaXRCb3hlcyA9IFtdO1xuICAgICAgICBjb25zdCBjb2x1bW5TaXplcyA9IHRoaXMuY29sdW1uU2l6ZXMgPSBbXTtcbiAgICAgICAgY29uc3QgaGVpZ2h0TGltaXQgPSBtYXhIZWlnaHQgLSB0aXRsZUhlaWdodDtcbiAgICAgICAgbGV0IHRvdGFsV2lkdGggPSBwYWRkaW5nO1xuICAgICAgICBsZXQgY3VycmVudENvbFdpZHRoID0gMDtcbiAgICAgICAgbGV0IGN1cnJlbnRDb2xIZWlnaHQgPSAwO1xuICAgICAgICBsZXQgbGVmdCA9IDA7XG4gICAgICAgIGxldCBjb2wgPSAwO1xuICAgICAgICB0aGlzLmxlZ2VuZEl0ZW1zLmZvckVhY2goKGxlZ2VuZEl0ZW0sIGkpPT57XG4gICAgICAgICAgICBjb25zdCB7IGl0ZW1XaWR0aCAsIGl0ZW1IZWlnaHQgIH0gPSBjYWxjdWxhdGVJdGVtU2l6ZShib3hXaWR0aCwgbGFiZWxGb250LCBjdHgsIGxlZ2VuZEl0ZW0sIF9pdGVtSGVpZ2h0KTtcbiAgICAgICAgICAgIGlmIChpID4gMCAmJiBjdXJyZW50Q29sSGVpZ2h0ICsgaXRlbUhlaWdodCArIDIgKiBwYWRkaW5nID4gaGVpZ2h0TGltaXQpIHtcbiAgICAgICAgICAgICAgICB0b3RhbFdpZHRoICs9IGN1cnJlbnRDb2xXaWR0aCArIHBhZGRpbmc7XG4gICAgICAgICAgICAgICAgY29sdW1uU2l6ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjdXJyZW50Q29sV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogY3VycmVudENvbEhlaWdodFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGxlZnQgKz0gY3VycmVudENvbFdpZHRoICsgcGFkZGluZztcbiAgICAgICAgICAgICAgICBjb2wrKztcbiAgICAgICAgICAgICAgICBjdXJyZW50Q29sV2lkdGggPSBjdXJyZW50Q29sSGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhpdGJveGVzW2ldID0ge1xuICAgICAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICAgICAgdG9wOiBjdXJyZW50Q29sSGVpZ2h0LFxuICAgICAgICAgICAgICAgIGNvbCxcbiAgICAgICAgICAgICAgICB3aWR0aDogaXRlbVdpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogaXRlbUhlaWdodFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGN1cnJlbnRDb2xXaWR0aCA9IE1hdGgubWF4KGN1cnJlbnRDb2xXaWR0aCwgaXRlbVdpZHRoKTtcbiAgICAgICAgICAgIGN1cnJlbnRDb2xIZWlnaHQgKz0gaXRlbUhlaWdodCArIHBhZGRpbmc7XG4gICAgICAgIH0pO1xuICAgICAgICB0b3RhbFdpZHRoICs9IGN1cnJlbnRDb2xXaWR0aDtcbiAgICAgICAgY29sdW1uU2l6ZXMucHVzaCh7XG4gICAgICAgICAgICB3aWR0aDogY3VycmVudENvbFdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBjdXJyZW50Q29sSGVpZ2h0XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdG90YWxXaWR0aDtcbiAgICB9XG4gICAgYWRqdXN0SGl0Qm94ZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLmRpc3BsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0aXRsZUhlaWdodCA9IHRoaXMuX2NvbXB1dGVUaXRsZUhlaWdodCgpO1xuICAgICAgICBjb25zdCB7IGxlZ2VuZEhpdEJveGVzOiBoaXRib3hlcyAsIG9wdGlvbnM6IHsgYWxpZ24gLCBsYWJlbHM6IHsgcGFkZGluZyAgfSAsIHJ0bCAgfSAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHJ0bEhlbHBlciA9IGdldFJ0bEFkYXB0ZXIocnRsLCB0aGlzLmxlZnQsIHRoaXMud2lkdGgpO1xuICAgICAgICBpZiAodGhpcy5pc0hvcml6b250YWwoKSkge1xuICAgICAgICAgICAgbGV0IHJvdyA9IDA7XG4gICAgICAgICAgICBsZXQgbGVmdCA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCB0aGlzLmxlZnQgKyBwYWRkaW5nLCB0aGlzLnJpZ2h0IC0gdGhpcy5saW5lV2lkdGhzW3Jvd10pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBoaXRib3ggb2YgaGl0Ym94ZXMpe1xuICAgICAgICAgICAgICAgIGlmIChyb3cgIT09IGhpdGJveC5yb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93ID0gaGl0Ym94LnJvdztcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCB0aGlzLmxlZnQgKyBwYWRkaW5nLCB0aGlzLnJpZ2h0IC0gdGhpcy5saW5lV2lkdGhzW3Jvd10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoaXRib3gudG9wICs9IHRoaXMudG9wICsgdGl0bGVIZWlnaHQgKyBwYWRkaW5nO1xuICAgICAgICAgICAgICAgIGhpdGJveC5sZWZ0ID0gcnRsSGVscGVyLmxlZnRGb3JMdHIocnRsSGVscGVyLngobGVmdCksIGhpdGJveC53aWR0aCk7XG4gICAgICAgICAgICAgICAgbGVmdCArPSBoaXRib3gud2lkdGggKyBwYWRkaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGNvbCA9IDA7XG4gICAgICAgICAgICBsZXQgdG9wID0gX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMudG9wICsgdGl0bGVIZWlnaHQgKyBwYWRkaW5nLCB0aGlzLmJvdHRvbSAtIHRoaXMuY29sdW1uU2l6ZXNbY29sXS5oZWlnaHQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBoaXRib3ggb2YgaGl0Ym94ZXMpe1xuICAgICAgICAgICAgICAgIGlmIChoaXRib3guY29sICE9PSBjb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sID0gaGl0Ym94LmNvbDtcbiAgICAgICAgICAgICAgICAgICAgdG9wID0gX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMudG9wICsgdGl0bGVIZWlnaHQgKyBwYWRkaW5nLCB0aGlzLmJvdHRvbSAtIHRoaXMuY29sdW1uU2l6ZXNbY29sXS5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoaXRib3gudG9wID0gdG9wO1xuICAgICAgICAgICAgICAgIGhpdGJveC5sZWZ0ICs9IHRoaXMubGVmdCArIHBhZGRpbmc7XG4gICAgICAgICAgICAgICAgaGl0Ym94LmxlZnQgPSBydGxIZWxwZXIubGVmdEZvckx0cihydGxIZWxwZXIueChoaXRib3gubGVmdCksIGhpdGJveC53aWR0aCk7XG4gICAgICAgICAgICAgICAgdG9wICs9IGhpdGJveC5oZWlnaHQgKyBwYWRkaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlzSG9yaXpvbnRhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wb3NpdGlvbiA9PT0gJ3RvcCcgfHwgdGhpcy5vcHRpb25zLnBvc2l0aW9uID09PSAnYm90dG9tJztcbiAgICB9XG4gICAgZHJhdygpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kaXNwbGF5KSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgICAgIGNsaXBBcmVhKGN0eCwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLl9kcmF3KCk7XG4gICAgICAgICAgICB1bmNsaXBBcmVhKGN0eCk7XG4gICAgICAgIH1cbiAgICB9XG4gX2RyYXcoKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uczogb3B0cyAsIGNvbHVtblNpemVzICwgbGluZVdpZHRocyAsIGN0eCAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgYWxpZ24gLCBsYWJlbHM6IGxhYmVsT3B0cyAgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb2xvciA9IGRlZmF1bHRzLmNvbG9yO1xuICAgICAgICBjb25zdCBydGxIZWxwZXIgPSBnZXRSdGxBZGFwdGVyKG9wdHMucnRsLCB0aGlzLmxlZnQsIHRoaXMud2lkdGgpO1xuICAgICAgICBjb25zdCBsYWJlbEZvbnQgPSB0b0ZvbnQobGFiZWxPcHRzLmZvbnQpO1xuICAgICAgICBjb25zdCB7IHBhZGRpbmcgIH0gPSBsYWJlbE9wdHM7XG4gICAgICAgIGNvbnN0IGZvbnRTaXplID0gbGFiZWxGb250LnNpemU7XG4gICAgICAgIGNvbnN0IGhhbGZGb250U2l6ZSA9IGZvbnRTaXplIC8gMjtcbiAgICAgICAgbGV0IGN1cnNvcjtcbiAgICAgICAgdGhpcy5kcmF3VGl0bGUoKTtcbiAgICAgICAgY3R4LnRleHRBbGlnbiA9IHJ0bEhlbHBlci50ZXh0QWxpZ24oJ2xlZnQnKTtcbiAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuICAgICAgICBjdHgubGluZVdpZHRoID0gMC41O1xuICAgICAgICBjdHguZm9udCA9IGxhYmVsRm9udC5zdHJpbmc7XG4gICAgICAgIGNvbnN0IHsgYm94V2lkdGggLCBib3hIZWlnaHQgLCBpdGVtSGVpZ2h0ICB9ID0gZ2V0Qm94U2l6ZShsYWJlbE9wdHMsIGZvbnRTaXplKTtcbiAgICAgICAgY29uc3QgZHJhd0xlZ2VuZEJveCA9IGZ1bmN0aW9uKHgsIHksIGxlZ2VuZEl0ZW0pIHtcbiAgICAgICAgICAgIGlmIChpc05hTihib3hXaWR0aCkgfHwgYm94V2lkdGggPD0gMCB8fCBpc05hTihib3hIZWlnaHQpIHx8IGJveEhlaWdodCA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgY29uc3QgbGluZVdpZHRoID0gdmFsdWVPckRlZmF1bHQobGVnZW5kSXRlbS5saW5lV2lkdGgsIDEpO1xuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHZhbHVlT3JEZWZhdWx0KGxlZ2VuZEl0ZW0uZmlsbFN0eWxlLCBkZWZhdWx0Q29sb3IpO1xuICAgICAgICAgICAgY3R4LmxpbmVDYXAgPSB2YWx1ZU9yRGVmYXVsdChsZWdlbmRJdGVtLmxpbmVDYXAsICdidXR0Jyk7XG4gICAgICAgICAgICBjdHgubGluZURhc2hPZmZzZXQgPSB2YWx1ZU9yRGVmYXVsdChsZWdlbmRJdGVtLmxpbmVEYXNoT2Zmc2V0LCAwKTtcbiAgICAgICAgICAgIGN0eC5saW5lSm9pbiA9IHZhbHVlT3JEZWZhdWx0KGxlZ2VuZEl0ZW0ubGluZUpvaW4sICdtaXRlcicpO1xuICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcbiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHZhbHVlT3JEZWZhdWx0KGxlZ2VuZEl0ZW0uc3Ryb2tlU3R5bGUsIGRlZmF1bHRDb2xvcik7XG4gICAgICAgICAgICBjdHguc2V0TGluZURhc2godmFsdWVPckRlZmF1bHQobGVnZW5kSXRlbS5saW5lRGFzaCwgW10pKTtcbiAgICAgICAgICAgIGlmIChsYWJlbE9wdHMudXNlUG9pbnRTdHlsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyYXdPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICByYWRpdXM6IGJveEhlaWdodCAqIE1hdGguU1FSVDIgLyAyLFxuICAgICAgICAgICAgICAgICAgICBwb2ludFN0eWxlOiBsZWdlbmRJdGVtLnBvaW50U3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uOiBsZWdlbmRJdGVtLnJvdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogbGluZVdpZHRoXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBjZW50ZXJYID0gcnRsSGVscGVyLnhQbHVzKHgsIGJveFdpZHRoIC8gMik7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VudGVyWSA9IHkgKyBoYWxmRm9udFNpemU7XG4gICAgICAgICAgICAgICAgZHJhd1BvaW50TGVnZW5kKGN0eCwgZHJhd09wdGlvbnMsIGNlbnRlclgsIGNlbnRlclksIGxhYmVsT3B0cy5wb2ludFN0eWxlV2lkdGggJiYgYm94V2lkdGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCB5Qm94VG9wID0geSArIE1hdGgubWF4KChmb250U2l6ZSAtIGJveEhlaWdodCkgLyAyLCAwKTtcbiAgICAgICAgICAgICAgICBjb25zdCB4Qm94TGVmdCA9IHJ0bEhlbHBlci5sZWZ0Rm9yTHRyKHgsIGJveFdpZHRoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBib3JkZXJSYWRpdXMgPSB0b1RSQkxDb3JuZXJzKGxlZ2VuZEl0ZW0uYm9yZGVyUmFkaXVzKTtcbiAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC52YWx1ZXMoYm9yZGVyUmFkaXVzKS5zb21lKCh2KT0+diAhPT0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkUm91bmRlZFJlY3RQYXRoKGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeEJveExlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5Qm94VG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgdzogYm94V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBoOiBib3hIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IGJvcmRlclJhZGl1c1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdHgucmVjdCh4Qm94TGVmdCwgeUJveFRvcCwgYm94V2lkdGgsIGJveEhlaWdodCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmVXaWR0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmlsbFRleHQgPSBmdW5jdGlvbih4LCB5LCBsZWdlbmRJdGVtKSB7XG4gICAgICAgICAgICByZW5kZXJUZXh0KGN0eCwgbGVnZW5kSXRlbS50ZXh0LCB4LCB5ICsgaXRlbUhlaWdodCAvIDIsIGxhYmVsRm9udCwge1xuICAgICAgICAgICAgICAgIHN0cmlrZXRocm91Z2g6IGxlZ2VuZEl0ZW0uaGlkZGVuLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogcnRsSGVscGVyLnRleHRBbGlnbihsZWdlbmRJdGVtLnRleHRBbGlnbilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLmlzSG9yaXpvbnRhbCgpO1xuICAgICAgICBjb25zdCB0aXRsZUhlaWdodCA9IHRoaXMuX2NvbXB1dGVUaXRsZUhlaWdodCgpO1xuICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgICAgeDogX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMubGVmdCArIHBhZGRpbmcsIHRoaXMucmlnaHQgLSBsaW5lV2lkdGhzWzBdKSxcbiAgICAgICAgICAgICAgICB5OiB0aGlzLnRvcCArIHBhZGRpbmcgKyB0aXRsZUhlaWdodCxcbiAgICAgICAgICAgICAgICBsaW5lOiAwXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICAgIHg6IHRoaXMubGVmdCArIHBhZGRpbmcsXG4gICAgICAgICAgICAgICAgeTogX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMudG9wICsgdGl0bGVIZWlnaHQgKyBwYWRkaW5nLCB0aGlzLmJvdHRvbSAtIGNvbHVtblNpemVzWzBdLmhlaWdodCksXG4gICAgICAgICAgICAgICAgbGluZTogMFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBvdmVycmlkZVRleHREaXJlY3Rpb24odGhpcy5jdHgsIG9wdHMudGV4dERpcmVjdGlvbik7XG4gICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBpdGVtSGVpZ2h0ICsgcGFkZGluZztcbiAgICAgICAgdGhpcy5sZWdlbmRJdGVtcy5mb3JFYWNoKChsZWdlbmRJdGVtLCBpKT0+e1xuICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gbGVnZW5kSXRlbS5mb250Q29sb3I7XG4gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gbGVnZW5kSXRlbS5mb250Q29sb3I7XG4gICAgICAgICAgICBjb25zdCB0ZXh0V2lkdGggPSBjdHgubWVhc3VyZVRleHQobGVnZW5kSXRlbS50ZXh0KS53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHRleHRBbGlnbiA9IHJ0bEhlbHBlci50ZXh0QWxpZ24obGVnZW5kSXRlbS50ZXh0QWxpZ24gfHwgKGxlZ2VuZEl0ZW0udGV4dEFsaWduID0gbGFiZWxPcHRzLnRleHRBbGlnbikpO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBib3hXaWR0aCArIGhhbGZGb250U2l6ZSArIHRleHRXaWR0aDtcbiAgICAgICAgICAgIGxldCB4ID0gY3Vyc29yLng7XG4gICAgICAgICAgICBsZXQgeSA9IGN1cnNvci55O1xuICAgICAgICAgICAgcnRsSGVscGVyLnNldFdpZHRoKHRoaXMud2lkdGgpO1xuICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiB4ICsgd2lkdGggKyBwYWRkaW5nID4gdGhpcy5yaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB5ID0gY3Vyc29yLnkgKz0gbGluZUhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yLmxpbmUrKztcbiAgICAgICAgICAgICAgICAgICAgeCA9IGN1cnNvci54ID0gX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMubGVmdCArIHBhZGRpbmcsIHRoaXMucmlnaHQgLSBsaW5lV2lkdGhzW2N1cnNvci5saW5lXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpID4gMCAmJiB5ICsgbGluZUhlaWdodCA+IHRoaXMuYm90dG9tKSB7XG4gICAgICAgICAgICAgICAgeCA9IGN1cnNvci54ID0geCArIGNvbHVtblNpemVzW2N1cnNvci5saW5lXS53aWR0aCArIHBhZGRpbmc7XG4gICAgICAgICAgICAgICAgY3Vyc29yLmxpbmUrKztcbiAgICAgICAgICAgICAgICB5ID0gY3Vyc29yLnkgPSBfYWxpZ25TdGFydEVuZChhbGlnbiwgdGhpcy50b3AgKyB0aXRsZUhlaWdodCArIHBhZGRpbmcsIHRoaXMuYm90dG9tIC0gY29sdW1uU2l6ZXNbY3Vyc29yLmxpbmVdLmhlaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZWFsWCA9IHJ0bEhlbHBlci54KHgpO1xuICAgICAgICAgICAgZHJhd0xlZ2VuZEJveChyZWFsWCwgeSwgbGVnZW5kSXRlbSk7XG4gICAgICAgICAgICB4ID0gX3RleHRYKHRleHRBbGlnbiwgeCArIGJveFdpZHRoICsgaGFsZkZvbnRTaXplLCBpc0hvcml6b250YWwgPyB4ICsgd2lkdGggOiB0aGlzLnJpZ2h0LCBvcHRzLnJ0bCk7XG4gICAgICAgICAgICBmaWxsVGV4dChydGxIZWxwZXIueCh4KSwgeSwgbGVnZW5kSXRlbSk7XG4gICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgY3Vyc29yLnggKz0gd2lkdGggKyBwYWRkaW5nO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGVnZW5kSXRlbS50ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbnRMaW5lSGVpZ2h0ID0gbGFiZWxGb250LmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICAgICAgY3Vyc29yLnkgKz0gY2FsY3VsYXRlTGVnZW5kSXRlbUhlaWdodChsZWdlbmRJdGVtLCBmb250TGluZUhlaWdodCkgKyBwYWRkaW5nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJzb3IueSArPSBsaW5lSGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdG9yZVRleHREaXJlY3Rpb24odGhpcy5jdHgsIG9wdHMudGV4dERpcmVjdGlvbik7XG4gICAgfVxuIGRyYXdUaXRsZSgpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgdGl0bGVPcHRzID0gb3B0cy50aXRsZTtcbiAgICAgICAgY29uc3QgdGl0bGVGb250ID0gdG9Gb250KHRpdGxlT3B0cy5mb250KTtcbiAgICAgICAgY29uc3QgdGl0bGVQYWRkaW5nID0gdG9QYWRkaW5nKHRpdGxlT3B0cy5wYWRkaW5nKTtcbiAgICAgICAgaWYgKCF0aXRsZU9wdHMuZGlzcGxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJ0bEhlbHBlciA9IGdldFJ0bEFkYXB0ZXIob3B0cy5ydGwsIHRoaXMubGVmdCwgdGhpcy53aWR0aCk7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRpdGxlT3B0cy5wb3NpdGlvbjtcbiAgICAgICAgY29uc3QgaGFsZkZvbnRTaXplID0gdGl0bGVGb250LnNpemUgLyAyO1xuICAgICAgICBjb25zdCB0b3BQYWRkaW5nUGx1c0hhbGZGb250U2l6ZSA9IHRpdGxlUGFkZGluZy50b3AgKyBoYWxmRm9udFNpemU7XG4gICAgICAgIGxldCB5O1xuICAgICAgICBsZXQgbGVmdCA9IHRoaXMubGVmdDtcbiAgICAgICAgbGV0IG1heFdpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICAgIG1heFdpZHRoID0gTWF0aC5tYXgoLi4udGhpcy5saW5lV2lkdGhzKTtcbiAgICAgICAgICAgIHkgPSB0aGlzLnRvcCArIHRvcFBhZGRpbmdQbHVzSGFsZkZvbnRTaXplO1xuICAgICAgICAgICAgbGVmdCA9IF9hbGlnblN0YXJ0RW5kKG9wdHMuYWxpZ24sIGxlZnQsIHRoaXMucmlnaHQgLSBtYXhXaWR0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLmNvbHVtblNpemVzLnJlZHVjZSgoYWNjLCBzaXplKT0+TWF0aC5tYXgoYWNjLCBzaXplLmhlaWdodCksIDApO1xuICAgICAgICAgICAgeSA9IHRvcFBhZGRpbmdQbHVzSGFsZkZvbnRTaXplICsgX2FsaWduU3RhcnRFbmQob3B0cy5hbGlnbiwgdGhpcy50b3AsIHRoaXMuYm90dG9tIC0gbWF4SGVpZ2h0IC0gb3B0cy5sYWJlbHMucGFkZGluZyAtIHRoaXMuX2NvbXB1dGVUaXRsZUhlaWdodCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4ID0gX2FsaWduU3RhcnRFbmQocG9zaXRpb24sIGxlZnQsIGxlZnQgKyBtYXhXaWR0aCk7XG4gICAgICAgIGN0eC50ZXh0QWxpZ24gPSBydGxIZWxwZXIudGV4dEFsaWduKF90b0xlZnRSaWdodENlbnRlcihwb3NpdGlvbikpO1xuICAgICAgICBjdHgudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7XG4gICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHRpdGxlT3B0cy5jb2xvcjtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRpdGxlT3B0cy5jb2xvcjtcbiAgICAgICAgY3R4LmZvbnQgPSB0aXRsZUZvbnQuc3RyaW5nO1xuICAgICAgICByZW5kZXJUZXh0KGN0eCwgdGl0bGVPcHRzLnRleHQsIHgsIHksIHRpdGxlRm9udCk7XG4gICAgfVxuIF9jb21wdXRlVGl0bGVIZWlnaHQoKSB7XG4gICAgICAgIGNvbnN0IHRpdGxlT3B0cyA9IHRoaXMub3B0aW9ucy50aXRsZTtcbiAgICAgICAgY29uc3QgdGl0bGVGb250ID0gdG9Gb250KHRpdGxlT3B0cy5mb250KTtcbiAgICAgICAgY29uc3QgdGl0bGVQYWRkaW5nID0gdG9QYWRkaW5nKHRpdGxlT3B0cy5wYWRkaW5nKTtcbiAgICAgICAgcmV0dXJuIHRpdGxlT3B0cy5kaXNwbGF5ID8gdGl0bGVGb250LmxpbmVIZWlnaHQgKyB0aXRsZVBhZGRpbmcuaGVpZ2h0IDogMDtcbiAgICB9XG4gX2dldExlZ2VuZEl0ZW1BdCh4LCB5KSB7XG4gICAgICAgIGxldCBpLCBoaXRCb3gsIGxoO1xuICAgICAgICBpZiAoX2lzQmV0d2Vlbih4LCB0aGlzLmxlZnQsIHRoaXMucmlnaHQpICYmIF9pc0JldHdlZW4oeSwgdGhpcy50b3AsIHRoaXMuYm90dG9tKSkge1xuICAgICAgICAgICAgbGggPSB0aGlzLmxlZ2VuZEhpdEJveGVzO1xuICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgbGgubGVuZ3RoOyArK2kpe1xuICAgICAgICAgICAgICAgIGhpdEJveCA9IGxoW2ldO1xuICAgICAgICAgICAgICAgIGlmIChfaXNCZXR3ZWVuKHgsIGhpdEJveC5sZWZ0LCBoaXRCb3gubGVmdCArIGhpdEJveC53aWR0aCkgJiYgX2lzQmV0d2Vlbih5LCBoaXRCb3gudG9wLCBoaXRCb3gudG9wICsgaGl0Qm94LmhlaWdodCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVnZW5kSXRlbXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiBoYW5kbGVFdmVudChlKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmICghaXNMaXN0ZW5lZChlLnR5cGUsIG9wdHMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaG92ZXJlZEl0ZW0gPSB0aGlzLl9nZXRMZWdlbmRJdGVtQXQoZS54LCBlLnkpO1xuICAgICAgICBpZiAoZS50eXBlID09PSAnbW91c2Vtb3ZlJyB8fCBlLnR5cGUgPT09ICdtb3VzZW91dCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5faG92ZXJlZEl0ZW07XG4gICAgICAgICAgICBjb25zdCBzYW1lSXRlbSA9IGl0ZW1zRXF1YWwocHJldmlvdXMsIGhvdmVyZWRJdGVtKTtcbiAgICAgICAgICAgIGlmIChwcmV2aW91cyAmJiAhc2FtZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhvcHRzLm9uTGVhdmUsIFtcbiAgICAgICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMsXG4gICAgICAgICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICAgICBdLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2hvdmVyZWRJdGVtID0gaG92ZXJlZEl0ZW07XG4gICAgICAgICAgICBpZiAoaG92ZXJlZEl0ZW0gJiYgIXNhbWVJdGVtKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sob3B0cy5vbkhvdmVyLCBbXG4gICAgICAgICAgICAgICAgICAgIGUsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyZWRJdGVtLFxuICAgICAgICAgICAgICAgICAgICB0aGlzXG4gICAgICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaG92ZXJlZEl0ZW0pIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdHMub25DbGljaywgW1xuICAgICAgICAgICAgICAgIGUsXG4gICAgICAgICAgICAgICAgaG92ZXJlZEl0ZW0sXG4gICAgICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVJdGVtU2l6ZShib3hXaWR0aCwgbGFiZWxGb250LCBjdHgsIGxlZ2VuZEl0ZW0sIF9pdGVtSGVpZ2h0KSB7XG4gICAgY29uc3QgaXRlbVdpZHRoID0gY2FsY3VsYXRlSXRlbVdpZHRoKGxlZ2VuZEl0ZW0sIGJveFdpZHRoLCBsYWJlbEZvbnQsIGN0eCk7XG4gICAgY29uc3QgaXRlbUhlaWdodCA9IGNhbGN1bGF0ZUl0ZW1IZWlnaHQoX2l0ZW1IZWlnaHQsIGxlZ2VuZEl0ZW0sIGxhYmVsRm9udC5saW5lSGVpZ2h0KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBpdGVtV2lkdGgsXG4gICAgICAgIGl0ZW1IZWlnaHRcbiAgICB9O1xufVxuZnVuY3Rpb24gY2FsY3VsYXRlSXRlbVdpZHRoKGxlZ2VuZEl0ZW0sIGJveFdpZHRoLCBsYWJlbEZvbnQsIGN0eCkge1xuICAgIGxldCBsZWdlbmRJdGVtVGV4dCA9IGxlZ2VuZEl0ZW0udGV4dDtcbiAgICBpZiAobGVnZW5kSXRlbVRleHQgJiYgdHlwZW9mIGxlZ2VuZEl0ZW1UZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICBsZWdlbmRJdGVtVGV4dCA9IGxlZ2VuZEl0ZW1UZXh0LnJlZHVjZSgoYSwgYik9PmEubGVuZ3RoID4gYi5sZW5ndGggPyBhIDogYik7XG4gICAgfVxuICAgIHJldHVybiBib3hXaWR0aCArIGxhYmVsRm9udC5zaXplIC8gMiArIGN0eC5tZWFzdXJlVGV4dChsZWdlbmRJdGVtVGV4dCkud2lkdGg7XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVJdGVtSGVpZ2h0KF9pdGVtSGVpZ2h0LCBsZWdlbmRJdGVtLCBmb250TGluZUhlaWdodCkge1xuICAgIGxldCBpdGVtSGVpZ2h0ID0gX2l0ZW1IZWlnaHQ7XG4gICAgaWYgKHR5cGVvZiBsZWdlbmRJdGVtLnRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGl0ZW1IZWlnaHQgPSBjYWxjdWxhdGVMZWdlbmRJdGVtSGVpZ2h0KGxlZ2VuZEl0ZW0sIGZvbnRMaW5lSGVpZ2h0KTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1IZWlnaHQ7XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVMZWdlbmRJdGVtSGVpZ2h0KGxlZ2VuZEl0ZW0sIGZvbnRMaW5lSGVpZ2h0KSB7XG4gICAgY29uc3QgbGFiZWxIZWlnaHQgPSBsZWdlbmRJdGVtLnRleHQgPyBsZWdlbmRJdGVtLnRleHQubGVuZ3RoIDogMDtcbiAgICByZXR1cm4gZm9udExpbmVIZWlnaHQgKiBsYWJlbEhlaWdodDtcbn1cbmZ1bmN0aW9uIGlzTGlzdGVuZWQodHlwZSwgb3B0cykge1xuICAgIGlmICgodHlwZSA9PT0gJ21vdXNlbW92ZScgfHwgdHlwZSA9PT0gJ21vdXNlb3V0JykgJiYgKG9wdHMub25Ib3ZlciB8fCBvcHRzLm9uTGVhdmUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAob3B0cy5vbkNsaWNrICYmICh0eXBlID09PSAnY2xpY2snIHx8IHR5cGUgPT09ICdtb3VzZXVwJykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbnZhciBwbHVnaW5fbGVnZW5kID0ge1xuICAgIGlkOiAnbGVnZW5kJyxcbiBfZWxlbWVudDogTGVnZW5kLFxuICAgIHN0YXJ0IChjaGFydCwgX2FyZ3MsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgbGVnZW5kID0gY2hhcnQubGVnZW5kID0gbmV3IExlZ2VuZCh7XG4gICAgICAgICAgICBjdHg6IGNoYXJ0LmN0eCxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBjaGFydFxuICAgICAgICB9KTtcbiAgICAgICAgbGF5b3V0cy5jb25maWd1cmUoY2hhcnQsIGxlZ2VuZCwgb3B0aW9ucyk7XG4gICAgICAgIGxheW91dHMuYWRkQm94KGNoYXJ0LCBsZWdlbmQpO1xuICAgIH0sXG4gICAgc3RvcCAoY2hhcnQpIHtcbiAgICAgICAgbGF5b3V0cy5yZW1vdmVCb3goY2hhcnQsIGNoYXJ0LmxlZ2VuZCk7XG4gICAgICAgIGRlbGV0ZSBjaGFydC5sZWdlbmQ7XG4gICAgfSxcbiAgICBiZWZvcmVVcGRhdGUgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBsZWdlbmQgPSBjaGFydC5sZWdlbmQ7XG4gICAgICAgIGxheW91dHMuY29uZmlndXJlKGNoYXJ0LCBsZWdlbmQsIG9wdGlvbnMpO1xuICAgICAgICBsZWdlbmQub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSxcbiAgICBhZnRlclVwZGF0ZSAoY2hhcnQpIHtcbiAgICAgICAgY29uc3QgbGVnZW5kID0gY2hhcnQubGVnZW5kO1xuICAgICAgICBsZWdlbmQuYnVpbGRMYWJlbHMoKTtcbiAgICAgICAgbGVnZW5kLmFkanVzdEhpdEJveGVzKCk7XG4gICAgfSxcbiAgICBhZnRlckV2ZW50IChjaGFydCwgYXJncykge1xuICAgICAgICBpZiAoIWFyZ3MucmVwbGF5KSB7XG4gICAgICAgICAgICBjaGFydC5sZWdlbmQuaGFuZGxlRXZlbnQoYXJncy5ldmVudCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgIHBvc2l0aW9uOiAndG9wJyxcbiAgICAgICAgYWxpZ246ICdjZW50ZXInLFxuICAgICAgICBmdWxsU2l6ZTogdHJ1ZSxcbiAgICAgICAgcmV2ZXJzZTogZmFsc2UsXG4gICAgICAgIHdlaWdodDogMTAwMCxcbiAgICAgICAgb25DbGljayAoZSwgbGVnZW5kSXRlbSwgbGVnZW5kKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGxlZ2VuZEl0ZW0uZGF0YXNldEluZGV4O1xuICAgICAgICAgICAgY29uc3QgY2kgPSBsZWdlbmQuY2hhcnQ7XG4gICAgICAgICAgICBpZiAoY2kuaXNEYXRhc2V0VmlzaWJsZShpbmRleCkpIHtcbiAgICAgICAgICAgICAgICBjaS5oaWRlKGluZGV4KTtcbiAgICAgICAgICAgICAgICBsZWdlbmRJdGVtLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNpLnNob3coaW5kZXgpO1xuICAgICAgICAgICAgICAgIGxlZ2VuZEl0ZW0uaGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uSG92ZXI6IG51bGwsXG4gICAgICAgIG9uTGVhdmU6IG51bGwsXG4gICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICAgY29sb3I6IChjdHgpPT5jdHguY2hhcnQub3B0aW9ucy5jb2xvcixcbiAgICAgICAgICAgIGJveFdpZHRoOiA0MCxcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwLFxuICAgICAgICAgICAgZ2VuZXJhdGVMYWJlbHMgKGNoYXJ0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YXNldHMgPSBjaGFydC5kYXRhLmRhdGFzZXRzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgbGFiZWxzOiB7IHVzZVBvaW50U3R5bGUgLCBwb2ludFN0eWxlICwgdGV4dEFsaWduICwgY29sb3IgLCB1c2VCb3JkZXJSYWRpdXMgLCBib3JkZXJSYWRpdXMgIH0gIH0gPSBjaGFydC5sZWdlbmQub3B0aW9ucztcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hhcnQuX2dldFNvcnRlZERhdGFzZXRNZXRhcygpLm1hcCgobWV0YSk9PntcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBtZXRhLmNvbnRyb2xsZXIuZ2V0U3R5bGUodXNlUG9pbnRTdHlsZSA/IDAgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBib3JkZXJXaWR0aCA9IHRvUGFkZGluZyhzdHlsZS5ib3JkZXJXaWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBkYXRhc2V0c1ttZXRhLmluZGV4XS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogc3R5bGUuYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udENvbG9yOiBjb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbjogIW1ldGEudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVDYXA6IHN0eWxlLmJvcmRlckNhcFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZURhc2g6IHN0eWxlLmJvcmRlckRhc2gsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lRGFzaE9mZnNldDogc3R5bGUuYm9yZGVyRGFzaE9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVKb2luOiBzdHlsZS5ib3JkZXJKb2luU3R5bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lV2lkdGg6IChib3JkZXJXaWR0aC53aWR0aCArIGJvcmRlcldpZHRoLmhlaWdodCkgLyA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlU3R5bGU6IHN0eWxlLmJvcmRlckNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRTdHlsZTogcG9pbnRTdHlsZSB8fCBzdHlsZS5wb2ludFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb246IHN0eWxlLnJvdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiB0ZXh0QWxpZ24gfHwgc3R5bGUudGV4dEFsaWduLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiB1c2VCb3JkZXJSYWRpdXMgJiYgKGJvcmRlclJhZGl1cyB8fCBzdHlsZS5ib3JkZXJSYWRpdXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldEluZGV4OiBtZXRhLmluZGV4XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICBjb2xvcjogKGN0eCk9PmN0eC5jaGFydC5vcHRpb25zLmNvbG9yLFxuICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICAgICAgICB0ZXh0OiAnJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkZXNjcmlwdG9yczoge1xuICAgICAgICBfc2NyaXB0YWJsZTogKG5hbWUpPT4hbmFtZS5zdGFydHNXaXRoKCdvbicpLFxuICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICAgIF9zY3JpcHRhYmxlOiAobmFtZSk9PiFbXG4gICAgICAgICAgICAgICAgICAgICdnZW5lcmF0ZUxhYmVscycsXG4gICAgICAgICAgICAgICAgICAgICdmaWx0ZXInLFxuICAgICAgICAgICAgICAgICAgICAnc29ydCdcbiAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKG5hbWUpXG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5jbGFzcyBUaXRsZSBleHRlbmRzIEVsZW1lbnQge1xuIGNvbnN0cnVjdG9yKGNvbmZpZyl7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY2hhcnQgPSBjb25maWcuY2hhcnQ7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IGNvbmZpZy5vcHRpb25zO1xuICAgICAgICB0aGlzLmN0eCA9IGNvbmZpZy5jdHg7XG4gICAgICAgIHRoaXMuX3BhZGRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMudG9wID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmJvdHRvbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5sZWZ0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnJpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLndpZHRoID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy53ZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZnVsbFNpemUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHVwZGF0ZShtYXhXaWR0aCwgbWF4SGVpZ2h0KSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIHRoaXMubGVmdCA9IDA7XG4gICAgICAgIHRoaXMudG9wID0gMDtcbiAgICAgICAgaWYgKCFvcHRzLmRpc3BsYXkpIHtcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLmhlaWdodCA9IHRoaXMucmlnaHQgPSB0aGlzLmJvdHRvbSA9IDA7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMucmlnaHQgPSBtYXhXaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmJvdHRvbSA9IG1heEhlaWdodDtcbiAgICAgICAgY29uc3QgbGluZUNvdW50ID0gaXNBcnJheShvcHRzLnRleHQpID8gb3B0cy50ZXh0Lmxlbmd0aCA6IDE7XG4gICAgICAgIHRoaXMuX3BhZGRpbmcgPSB0b1BhZGRpbmcob3B0cy5wYWRkaW5nKTtcbiAgICAgICAgY29uc3QgdGV4dFNpemUgPSBsaW5lQ291bnQgKiB0b0ZvbnQob3B0cy5mb250KS5saW5lSGVpZ2h0ICsgdGhpcy5fcGFkZGluZy5oZWlnaHQ7XG4gICAgICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRleHRTaXplO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRleHRTaXplO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzSG9yaXpvbnRhbCgpIHtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uO1xuICAgICAgICByZXR1cm4gcG9zID09PSAndG9wJyB8fCBwb3MgPT09ICdib3R0b20nO1xuICAgIH1cbiAgICBfZHJhd0FyZ3Mob2Zmc2V0KSB7XG4gICAgICAgIGNvbnN0IHsgdG9wICwgbGVmdCAsIGJvdHRvbSAsIHJpZ2h0ICwgb3B0aW9ucyAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGFsaWduID0gb3B0aW9ucy5hbGlnbjtcbiAgICAgICAgbGV0IHJvdGF0aW9uID0gMDtcbiAgICAgICAgbGV0IG1heFdpZHRoLCB0aXRsZVgsIHRpdGxlWTtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICAgIHRpdGxlWCA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCBsZWZ0LCByaWdodCk7XG4gICAgICAgICAgICB0aXRsZVkgPSB0b3AgKyBvZmZzZXQ7XG4gICAgICAgICAgICBtYXhXaWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnBvc2l0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgICAgICB0aXRsZVggPSBsZWZ0ICsgb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHRpdGxlWSA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCBib3R0b20sIHRvcCk7XG4gICAgICAgICAgICAgICAgcm90YXRpb24gPSBQSSAqIC0wLjU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRpdGxlWCA9IHJpZ2h0IC0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHRpdGxlWSA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCB0b3AsIGJvdHRvbSk7XG4gICAgICAgICAgICAgICAgcm90YXRpb24gPSBQSSAqIDAuNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1heFdpZHRoID0gYm90dG9tIC0gdG9wO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0aXRsZVgsXG4gICAgICAgICAgICB0aXRsZVksXG4gICAgICAgICAgICBtYXhXaWR0aCxcbiAgICAgICAgICAgIHJvdGF0aW9uXG4gICAgICAgIH07XG4gICAgfVxuICAgIGRyYXcoKSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICBjb25zdCBvcHRzID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBpZiAoIW9wdHMuZGlzcGxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvbnRPcHRzID0gdG9Gb250KG9wdHMuZm9udCk7XG4gICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBmb250T3B0cy5saW5lSGVpZ2h0O1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBsaW5lSGVpZ2h0IC8gMiArIHRoaXMuX3BhZGRpbmcudG9wO1xuICAgICAgICBjb25zdCB7IHRpdGxlWCAsIHRpdGxlWSAsIG1heFdpZHRoICwgcm90YXRpb24gIH0gPSB0aGlzLl9kcmF3QXJncyhvZmZzZXQpO1xuICAgICAgICByZW5kZXJUZXh0KGN0eCwgb3B0cy50ZXh0LCAwLCAwLCBmb250T3B0cywge1xuICAgICAgICAgICAgY29sb3I6IG9wdHMuY29sb3IsXG4gICAgICAgICAgICBtYXhXaWR0aCxcbiAgICAgICAgICAgIHJvdGF0aW9uLFxuICAgICAgICAgICAgdGV4dEFsaWduOiBfdG9MZWZ0UmlnaHRDZW50ZXIob3B0cy5hbGlnbiksXG4gICAgICAgICAgICB0ZXh0QmFzZWxpbmU6ICdtaWRkbGUnLFxuICAgICAgICAgICAgdHJhbnNsYXRpb246IFtcbiAgICAgICAgICAgICAgICB0aXRsZVgsXG4gICAgICAgICAgICAgICAgdGl0bGVZXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVRpdGxlKGNoYXJ0LCB0aXRsZU9wdHMpIHtcbiAgICBjb25zdCB0aXRsZSA9IG5ldyBUaXRsZSh7XG4gICAgICAgIGN0eDogY2hhcnQuY3R4LFxuICAgICAgICBvcHRpb25zOiB0aXRsZU9wdHMsXG4gICAgICAgIGNoYXJ0XG4gICAgfSk7XG4gICAgbGF5b3V0cy5jb25maWd1cmUoY2hhcnQsIHRpdGxlLCB0aXRsZU9wdHMpO1xuICAgIGxheW91dHMuYWRkQm94KGNoYXJ0LCB0aXRsZSk7XG4gICAgY2hhcnQudGl0bGVCbG9jayA9IHRpdGxlO1xufVxudmFyIHBsdWdpbl90aXRsZSA9IHtcbiAgICBpZDogJ3RpdGxlJyxcbiBfZWxlbWVudDogVGl0bGUsXG4gICAgc3RhcnQgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBjcmVhdGVUaXRsZShjaGFydCwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICBzdG9wIChjaGFydCkge1xuICAgICAgICBjb25zdCB0aXRsZUJsb2NrID0gY2hhcnQudGl0bGVCbG9jaztcbiAgICAgICAgbGF5b3V0cy5yZW1vdmVCb3goY2hhcnQsIHRpdGxlQmxvY2spO1xuICAgICAgICBkZWxldGUgY2hhcnQudGl0bGVCbG9jaztcbiAgICB9LFxuICAgIGJlZm9yZVVwZGF0ZSAoY2hhcnQsIF9hcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gY2hhcnQudGl0bGVCbG9jaztcbiAgICAgICAgbGF5b3V0cy5jb25maWd1cmUoY2hhcnQsIHRpdGxlLCBvcHRpb25zKTtcbiAgICAgICAgdGl0bGUub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSxcbiAgICBkZWZhdWx0czoge1xuICAgICAgICBhbGlnbjogJ2NlbnRlcicsXG4gICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICBmb250OiB7XG4gICAgICAgICAgICB3ZWlnaHQ6ICdib2xkJ1xuICAgICAgICB9LFxuICAgICAgICBmdWxsU2l6ZTogdHJ1ZSxcbiAgICAgICAgcGFkZGluZzogMTAsXG4gICAgICAgIHBvc2l0aW9uOiAndG9wJyxcbiAgICAgICAgdGV4dDogJycsXG4gICAgICAgIHdlaWdodDogMjAwMFxuICAgIH0sXG4gICAgZGVmYXVsdFJvdXRlczoge1xuICAgICAgICBjb2xvcjogJ2NvbG9yJ1xuICAgIH0sXG4gICAgZGVzY3JpcHRvcnM6IHtcbiAgICAgICAgX3NjcmlwdGFibGU6IHRydWUsXG4gICAgICAgIF9pbmRleGFibGU6IGZhbHNlXG4gICAgfVxufTtcblxuY29uc3QgbWFwID0gbmV3IFdlYWtNYXAoKTtcbnZhciBwbHVnaW5fc3VidGl0bGUgPSB7XG4gICAgaWQ6ICdzdWJ0aXRsZScsXG4gICAgc3RhcnQgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB0aXRsZSA9IG5ldyBUaXRsZSh7XG4gICAgICAgICAgICBjdHg6IGNoYXJ0LmN0eCxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBjaGFydFxuICAgICAgICB9KTtcbiAgICAgICAgbGF5b3V0cy5jb25maWd1cmUoY2hhcnQsIHRpdGxlLCBvcHRpb25zKTtcbiAgICAgICAgbGF5b3V0cy5hZGRCb3goY2hhcnQsIHRpdGxlKTtcbiAgICAgICAgbWFwLnNldChjaGFydCwgdGl0bGUpO1xuICAgIH0sXG4gICAgc3RvcCAoY2hhcnQpIHtcbiAgICAgICAgbGF5b3V0cy5yZW1vdmVCb3goY2hhcnQsIG1hcC5nZXQoY2hhcnQpKTtcbiAgICAgICAgbWFwLmRlbGV0ZShjaGFydCk7XG4gICAgfSxcbiAgICBiZWZvcmVVcGRhdGUgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB0aXRsZSA9IG1hcC5nZXQoY2hhcnQpO1xuICAgICAgICBsYXlvdXRzLmNvbmZpZ3VyZShjaGFydCwgdGl0bGUsIG9wdGlvbnMpO1xuICAgICAgICB0aXRsZS5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9LFxuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgIGZvbnQ6IHtcbiAgICAgICAgICAgIHdlaWdodDogJ25vcm1hbCdcbiAgICAgICAgfSxcbiAgICAgICAgZnVsbFNpemU6IHRydWUsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgIHBvc2l0aW9uOiAndG9wJyxcbiAgICAgICAgdGV4dDogJycsXG4gICAgICAgIHdlaWdodDogMTUwMFxuICAgIH0sXG4gICAgZGVmYXVsdFJvdXRlczoge1xuICAgICAgICBjb2xvcjogJ2NvbG9yJ1xuICAgIH0sXG4gICAgZGVzY3JpcHRvcnM6IHtcbiAgICAgICAgX3NjcmlwdGFibGU6IHRydWUsXG4gICAgICAgIF9pbmRleGFibGU6IGZhbHNlXG4gICAgfVxufTtcblxuY29uc3QgcG9zaXRpb25lcnMgPSB7XG4gYXZlcmFnZSAoaXRlbXMpIHtcbiAgICAgICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaSwgbGVuO1xuICAgICAgICBsZXQgeFNldCA9IG5ldyBTZXQoKTtcbiAgICAgICAgbGV0IHkgPSAwO1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBmb3IoaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IGVsID0gaXRlbXNbaV0uZWxlbWVudDtcbiAgICAgICAgICAgIGlmIChlbCAmJiBlbC5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zID0gZWwudG9vbHRpcFBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgeFNldC5hZGQocG9zLngpO1xuICAgICAgICAgICAgICAgIHkgKz0gcG9zLnk7XG4gICAgICAgICAgICAgICAgKytjb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY291bnQgPT09IDAgfHwgeFNldC5zaXplID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeEF2ZXJhZ2UgPSBbXG4gICAgICAgICAgICAuLi54U2V0XG4gICAgICAgIF0ucmVkdWNlKChhLCBiKT0+YSArIGIpIC8geFNldC5zaXplO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogeEF2ZXJhZ2UsXG4gICAgICAgICAgICB5OiB5IC8gY291bnRcbiAgICAgICAgfTtcbiAgICB9LFxuIG5lYXJlc3QgKGl0ZW1zLCBldmVudFBvc2l0aW9uKSB7XG4gICAgICAgIGlmICghaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHggPSBldmVudFBvc2l0aW9uLng7XG4gICAgICAgIGxldCB5ID0gZXZlbnRQb3NpdGlvbi55O1xuICAgICAgICBsZXQgbWluRGlzdGFuY2UgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIGxldCBpLCBsZW4sIG5lYXJlc3RFbGVtZW50O1xuICAgICAgICBmb3IoaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IGVsID0gaXRlbXNbaV0uZWxlbWVudDtcbiAgICAgICAgICAgIGlmIChlbCAmJiBlbC5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VudGVyID0gZWwuZ2V0Q2VudGVyUG9pbnQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRzKGV2ZW50UG9zaXRpb24sIGNlbnRlcik7XG4gICAgICAgICAgICAgICAgaWYgKGQgPCBtaW5EaXN0YW5jZSkge1xuICAgICAgICAgICAgICAgICAgICBtaW5EaXN0YW5jZSA9IGQ7XG4gICAgICAgICAgICAgICAgICAgIG5lYXJlc3RFbGVtZW50ID0gZWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChuZWFyZXN0RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgdHAgPSBuZWFyZXN0RWxlbWVudC50b29sdGlwUG9zaXRpb24oKTtcbiAgICAgICAgICAgIHggPSB0cC54O1xuICAgICAgICAgICAgeSA9IHRwLnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5XG4gICAgICAgIH07XG4gICAgfVxufTtcbmZ1bmN0aW9uIHB1c2hPckNvbmNhdChiYXNlLCB0b1B1c2gpIHtcbiAgICBpZiAodG9QdXNoKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHRvUHVzaCkpIHtcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGJhc2UsIHRvUHVzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiYXNlLnB1c2godG9QdXNoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbn1cbiBmdW5jdGlvbiBzcGxpdE5ld2xpbmVzKHN0cikge1xuICAgIGlmICgodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgfHwgc3RyIGluc3RhbmNlb2YgU3RyaW5nKSAmJiBzdHIuaW5kZXhPZignXFxuJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gc3RyLnNwbGl0KCdcXG4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn1cbiBmdW5jdGlvbiBjcmVhdGVUb29sdGlwSXRlbShjaGFydCwgaXRlbSkge1xuICAgIGNvbnN0IHsgZWxlbWVudCAsIGRhdGFzZXRJbmRleCAsIGluZGV4ICB9ID0gaXRlbTtcbiAgICBjb25zdCBjb250cm9sbGVyID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KS5jb250cm9sbGVyO1xuICAgIGNvbnN0IHsgbGFiZWwgLCB2YWx1ZSAgfSA9IGNvbnRyb2xsZXIuZ2V0TGFiZWxBbmRWYWx1ZShpbmRleCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2hhcnQsXG4gICAgICAgIGxhYmVsLFxuICAgICAgICBwYXJzZWQ6IGNvbnRyb2xsZXIuZ2V0UGFyc2VkKGluZGV4KSxcbiAgICAgICAgcmF3OiBjaGFydC5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0uZGF0YVtpbmRleF0sXG4gICAgICAgIGZvcm1hdHRlZFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZGF0YXNldDogY29udHJvbGxlci5nZXREYXRhc2V0KCksXG4gICAgICAgIGRhdGFJbmRleDogaW5kZXgsXG4gICAgICAgIGRhdGFzZXRJbmRleCxcbiAgICAgICAgZWxlbWVudFxuICAgIH07XG59XG4gZnVuY3Rpb24gZ2V0VG9vbHRpcFNpemUodG9vbHRpcCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGN0eCA9IHRvb2x0aXAuY2hhcnQuY3R4O1xuICAgIGNvbnN0IHsgYm9keSAsIGZvb3RlciAsIHRpdGxlICB9ID0gdG9vbHRpcDtcbiAgICBjb25zdCB7IGJveFdpZHRoICwgYm94SGVpZ2h0ICB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBib2R5Rm9udCA9IHRvRm9udChvcHRpb25zLmJvZHlGb250KTtcbiAgICBjb25zdCB0aXRsZUZvbnQgPSB0b0ZvbnQob3B0aW9ucy50aXRsZUZvbnQpO1xuICAgIGNvbnN0IGZvb3RlckZvbnQgPSB0b0ZvbnQob3B0aW9ucy5mb290ZXJGb250KTtcbiAgICBjb25zdCB0aXRsZUxpbmVDb3VudCA9IHRpdGxlLmxlbmd0aDtcbiAgICBjb25zdCBmb290ZXJMaW5lQ291bnQgPSBmb290ZXIubGVuZ3RoO1xuICAgIGNvbnN0IGJvZHlMaW5lSXRlbUNvdW50ID0gYm9keS5sZW5ndGg7XG4gICAgY29uc3QgcGFkZGluZyA9IHRvUGFkZGluZyhvcHRpb25zLnBhZGRpbmcpO1xuICAgIGxldCBoZWlnaHQgPSBwYWRkaW5nLmhlaWdodDtcbiAgICBsZXQgd2lkdGggPSAwO1xuICAgIGxldCBjb21iaW5lZEJvZHlMZW5ndGggPSBib2R5LnJlZHVjZSgoY291bnQsIGJvZHlJdGVtKT0+Y291bnQgKyBib2R5SXRlbS5iZWZvcmUubGVuZ3RoICsgYm9keUl0ZW0ubGluZXMubGVuZ3RoICsgYm9keUl0ZW0uYWZ0ZXIubGVuZ3RoLCAwKTtcbiAgICBjb21iaW5lZEJvZHlMZW5ndGggKz0gdG9vbHRpcC5iZWZvcmVCb2R5Lmxlbmd0aCArIHRvb2x0aXAuYWZ0ZXJCb2R5Lmxlbmd0aDtcbiAgICBpZiAodGl0bGVMaW5lQ291bnQpIHtcbiAgICAgICAgaGVpZ2h0ICs9IHRpdGxlTGluZUNvdW50ICogdGl0bGVGb250LmxpbmVIZWlnaHQgKyAodGl0bGVMaW5lQ291bnQgLSAxKSAqIG9wdGlvbnMudGl0bGVTcGFjaW5nICsgb3B0aW9ucy50aXRsZU1hcmdpbkJvdHRvbTtcbiAgICB9XG4gICAgaWYgKGNvbWJpbmVkQm9keUxlbmd0aCkge1xuICAgICAgICBjb25zdCBib2R5TGluZUhlaWdodCA9IG9wdGlvbnMuZGlzcGxheUNvbG9ycyA/IE1hdGgubWF4KGJveEhlaWdodCwgYm9keUZvbnQubGluZUhlaWdodCkgOiBib2R5Rm9udC5saW5lSGVpZ2h0O1xuICAgICAgICBoZWlnaHQgKz0gYm9keUxpbmVJdGVtQ291bnQgKiBib2R5TGluZUhlaWdodCArIChjb21iaW5lZEJvZHlMZW5ndGggLSBib2R5TGluZUl0ZW1Db3VudCkgKiBib2R5Rm9udC5saW5lSGVpZ2h0ICsgKGNvbWJpbmVkQm9keUxlbmd0aCAtIDEpICogb3B0aW9ucy5ib2R5U3BhY2luZztcbiAgICB9XG4gICAgaWYgKGZvb3RlckxpbmVDb3VudCkge1xuICAgICAgICBoZWlnaHQgKz0gb3B0aW9ucy5mb290ZXJNYXJnaW5Ub3AgKyBmb290ZXJMaW5lQ291bnQgKiBmb290ZXJGb250LmxpbmVIZWlnaHQgKyAoZm9vdGVyTGluZUNvdW50IC0gMSkgKiBvcHRpb25zLmZvb3RlclNwYWNpbmc7XG4gICAgfVxuICAgIGxldCB3aWR0aFBhZGRpbmcgPSAwO1xuICAgIGNvbnN0IG1heExpbmVXaWR0aCA9IGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgY3R4Lm1lYXN1cmVUZXh0KGxpbmUpLndpZHRoICsgd2lkdGhQYWRkaW5nKTtcbiAgICB9O1xuICAgIGN0eC5zYXZlKCk7XG4gICAgY3R4LmZvbnQgPSB0aXRsZUZvbnQuc3RyaW5nO1xuICAgIGVhY2godG9vbHRpcC50aXRsZSwgbWF4TGluZVdpZHRoKTtcbiAgICBjdHguZm9udCA9IGJvZHlGb250LnN0cmluZztcbiAgICBlYWNoKHRvb2x0aXAuYmVmb3JlQm9keS5jb25jYXQodG9vbHRpcC5hZnRlckJvZHkpLCBtYXhMaW5lV2lkdGgpO1xuICAgIHdpZHRoUGFkZGluZyA9IG9wdGlvbnMuZGlzcGxheUNvbG9ycyA/IGJveFdpZHRoICsgMiArIG9wdGlvbnMuYm94UGFkZGluZyA6IDA7XG4gICAgZWFjaChib2R5LCAoYm9keUl0ZW0pPT57XG4gICAgICAgIGVhY2goYm9keUl0ZW0uYmVmb3JlLCBtYXhMaW5lV2lkdGgpO1xuICAgICAgICBlYWNoKGJvZHlJdGVtLmxpbmVzLCBtYXhMaW5lV2lkdGgpO1xuICAgICAgICBlYWNoKGJvZHlJdGVtLmFmdGVyLCBtYXhMaW5lV2lkdGgpO1xuICAgIH0pO1xuICAgIHdpZHRoUGFkZGluZyA9IDA7XG4gICAgY3R4LmZvbnQgPSBmb290ZXJGb250LnN0cmluZztcbiAgICBlYWNoKHRvb2x0aXAuZm9vdGVyLCBtYXhMaW5lV2lkdGgpO1xuICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgd2lkdGggKz0gcGFkZGluZy53aWR0aDtcbiAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGRldGVybWluZVlBbGlnbihjaGFydCwgc2l6ZSkge1xuICAgIGNvbnN0IHsgeSAsIGhlaWdodCAgfSA9IHNpemU7XG4gICAgaWYgKHkgPCBoZWlnaHQgLyAyKSB7XG4gICAgICAgIHJldHVybiAndG9wJztcbiAgICB9IGVsc2UgaWYgKHkgPiBjaGFydC5oZWlnaHQgLSBoZWlnaHQgLyAyKSB7XG4gICAgICAgIHJldHVybiAnYm90dG9tJztcbiAgICB9XG4gICAgcmV0dXJuICdjZW50ZXInO1xufVxuZnVuY3Rpb24gZG9lc05vdEZpdFdpdGhBbGlnbih4QWxpZ24sIGNoYXJ0LCBvcHRpb25zLCBzaXplKSB7XG4gICAgY29uc3QgeyB4ICwgd2lkdGggIH0gPSBzaXplO1xuICAgIGNvbnN0IGNhcmV0ID0gb3B0aW9ucy5jYXJldFNpemUgKyBvcHRpb25zLmNhcmV0UGFkZGluZztcbiAgICBpZiAoeEFsaWduID09PSAnbGVmdCcgJiYgeCArIHdpZHRoICsgY2FyZXQgPiBjaGFydC53aWR0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHhBbGlnbiA9PT0gJ3JpZ2h0JyAmJiB4IC0gd2lkdGggLSBjYXJldCA8IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuZnVuY3Rpb24gZGV0ZXJtaW5lWEFsaWduKGNoYXJ0LCBvcHRpb25zLCBzaXplLCB5QWxpZ24pIHtcbiAgICBjb25zdCB7IHggLCB3aWR0aCAgfSA9IHNpemU7XG4gICAgY29uc3QgeyB3aWR0aDogY2hhcnRXaWR0aCAsIGNoYXJ0QXJlYTogeyBsZWZ0ICwgcmlnaHQgIH0gIH0gPSBjaGFydDtcbiAgICBsZXQgeEFsaWduID0gJ2NlbnRlcic7XG4gICAgaWYgKHlBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgeEFsaWduID0geCA8PSAobGVmdCArIHJpZ2h0KSAvIDIgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgIH0gZWxzZSBpZiAoeCA8PSB3aWR0aCAvIDIpIHtcbiAgICAgICAgeEFsaWduID0gJ2xlZnQnO1xuICAgIH0gZWxzZSBpZiAoeCA+PSBjaGFydFdpZHRoIC0gd2lkdGggLyAyKSB7XG4gICAgICAgIHhBbGlnbiA9ICdyaWdodCc7XG4gICAgfVxuICAgIGlmIChkb2VzTm90Rml0V2l0aEFsaWduKHhBbGlnbiwgY2hhcnQsIG9wdGlvbnMsIHNpemUpKSB7XG4gICAgICAgIHhBbGlnbiA9ICdjZW50ZXInO1xuICAgIH1cbiAgICByZXR1cm4geEFsaWduO1xufVxuIGZ1bmN0aW9uIGRldGVybWluZUFsaWdubWVudChjaGFydCwgb3B0aW9ucywgc2l6ZSkge1xuICAgIGNvbnN0IHlBbGlnbiA9IHNpemUueUFsaWduIHx8IG9wdGlvbnMueUFsaWduIHx8IGRldGVybWluZVlBbGlnbihjaGFydCwgc2l6ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeEFsaWduOiBzaXplLnhBbGlnbiB8fCBvcHRpb25zLnhBbGlnbiB8fCBkZXRlcm1pbmVYQWxpZ24oY2hhcnQsIG9wdGlvbnMsIHNpemUsIHlBbGlnbiksXG4gICAgICAgIHlBbGlnblxuICAgIH07XG59XG5mdW5jdGlvbiBhbGlnblgoc2l6ZSwgeEFsaWduKSB7XG4gICAgbGV0IHsgeCAsIHdpZHRoICB9ID0gc2l6ZTtcbiAgICBpZiAoeEFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICAgIHggLT0gd2lkdGg7XG4gICAgfSBlbHNlIGlmICh4QWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgIHggLT0gd2lkdGggLyAyO1xuICAgIH1cbiAgICByZXR1cm4geDtcbn1cbmZ1bmN0aW9uIGFsaWduWShzaXplLCB5QWxpZ24sIHBhZGRpbmdBbmRTaXplKSB7XG4gICAgbGV0IHsgeSAsIGhlaWdodCAgfSA9IHNpemU7XG4gICAgaWYgKHlBbGlnbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgeSArPSBwYWRkaW5nQW5kU2l6ZTtcbiAgICB9IGVsc2UgaWYgKHlBbGlnbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgeSAtPSBoZWlnaHQgKyBwYWRkaW5nQW5kU2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB5IC09IGhlaWdodCAvIDI7XG4gICAgfVxuICAgIHJldHVybiB5O1xufVxuIGZ1bmN0aW9uIGdldEJhY2tncm91bmRQb2ludChvcHRpb25zLCBzaXplLCBhbGlnbm1lbnQsIGNoYXJ0KSB7XG4gICAgY29uc3QgeyBjYXJldFNpemUgLCBjYXJldFBhZGRpbmcgLCBjb3JuZXJSYWRpdXMgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHsgeEFsaWduICwgeUFsaWduICB9ID0gYWxpZ25tZW50O1xuICAgIGNvbnN0IHBhZGRpbmdBbmRTaXplID0gY2FyZXRTaXplICsgY2FyZXRQYWRkaW5nO1xuICAgIGNvbnN0IHsgdG9wTGVmdCAsIHRvcFJpZ2h0ICwgYm90dG9tTGVmdCAsIGJvdHRvbVJpZ2h0ICB9ID0gdG9UUkJMQ29ybmVycyhjb3JuZXJSYWRpdXMpO1xuICAgIGxldCB4ID0gYWxpZ25YKHNpemUsIHhBbGlnbik7XG4gICAgY29uc3QgeSA9IGFsaWduWShzaXplLCB5QWxpZ24sIHBhZGRpbmdBbmRTaXplKTtcbiAgICBpZiAoeUFsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICBpZiAoeEFsaWduID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHggKz0gcGFkZGluZ0FuZFNpemU7XG4gICAgICAgIH0gZWxzZSBpZiAoeEFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICB4IC09IHBhZGRpbmdBbmRTaXplO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh4QWxpZ24gPT09ICdsZWZ0Jykge1xuICAgICAgICB4IC09IE1hdGgubWF4KHRvcExlZnQsIGJvdHRvbUxlZnQpICsgY2FyZXRTaXplO1xuICAgIH0gZWxzZSBpZiAoeEFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICAgIHggKz0gTWF0aC5tYXgodG9wUmlnaHQsIGJvdHRvbVJpZ2h0KSArIGNhcmV0U2l6ZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogX2xpbWl0VmFsdWUoeCwgMCwgY2hhcnQud2lkdGggLSBzaXplLndpZHRoKSxcbiAgICAgICAgeTogX2xpbWl0VmFsdWUoeSwgMCwgY2hhcnQuaGVpZ2h0IC0gc2l6ZS5oZWlnaHQpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldEFsaWduZWRYKHRvb2x0aXAsIGFsaWduLCBvcHRpb25zKSB7XG4gICAgY29uc3QgcGFkZGluZyA9IHRvUGFkZGluZyhvcHRpb25zLnBhZGRpbmcpO1xuICAgIHJldHVybiBhbGlnbiA9PT0gJ2NlbnRlcicgPyB0b29sdGlwLnggKyB0b29sdGlwLndpZHRoIC8gMiA6IGFsaWduID09PSAncmlnaHQnID8gdG9vbHRpcC54ICsgdG9vbHRpcC53aWR0aCAtIHBhZGRpbmcucmlnaHQgOiB0b29sdGlwLnggKyBwYWRkaW5nLmxlZnQ7XG59XG4gZnVuY3Rpb24gZ2V0QmVmb3JlQWZ0ZXJCb2R5TGluZXMoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gcHVzaE9yQ29uY2F0KFtdLCBzcGxpdE5ld2xpbmVzKGNhbGxiYWNrKSk7XG59XG5mdW5jdGlvbiBjcmVhdGVUb29sdGlwQ29udGV4dChwYXJlbnQsIHRvb2x0aXAsIHRvb2x0aXBJdGVtcykge1xuICAgIHJldHVybiBjcmVhdGVDb250ZXh0KHBhcmVudCwge1xuICAgICAgICB0b29sdGlwLFxuICAgICAgICB0b29sdGlwSXRlbXMsXG4gICAgICAgIHR5cGU6ICd0b29sdGlwJ1xuICAgIH0pO1xufVxuZnVuY3Rpb24gb3ZlcnJpZGVDYWxsYmFja3MoY2FsbGJhY2tzLCBjb250ZXh0KSB7XG4gICAgY29uc3Qgb3ZlcnJpZGUgPSBjb250ZXh0ICYmIGNvbnRleHQuZGF0YXNldCAmJiBjb250ZXh0LmRhdGFzZXQudG9vbHRpcCAmJiBjb250ZXh0LmRhdGFzZXQudG9vbHRpcC5jYWxsYmFja3M7XG4gICAgcmV0dXJuIG92ZXJyaWRlID8gY2FsbGJhY2tzLm92ZXJyaWRlKG92ZXJyaWRlKSA6IGNhbGxiYWNrcztcbn1cbmNvbnN0IGRlZmF1bHRDYWxsYmFja3MgPSB7XG4gICAgYmVmb3JlVGl0bGU6IG5vb3AsXG4gICAgdGl0bGUgKHRvb2x0aXBJdGVtcykge1xuICAgICAgICBpZiAodG9vbHRpcEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0b29sdGlwSXRlbXNbMF07XG4gICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBpdGVtLmNoYXJ0LmRhdGEubGFiZWxzO1xuICAgICAgICAgICAgY29uc3QgbGFiZWxDb3VudCA9IGxhYmVscyA/IGxhYmVscy5sZW5ndGggOiAwO1xuICAgICAgICAgICAgaWYgKHRoaXMgJiYgdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5tb2RlID09PSAnZGF0YXNldCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5kYXRhc2V0LmxhYmVsIHx8ICcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubGFiZWw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhYmVsQ291bnQgPiAwICYmIGl0ZW0uZGF0YUluZGV4IDwgbGFiZWxDb3VudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbHNbaXRlbS5kYXRhSW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9LFxuICAgIGFmdGVyVGl0bGU6IG5vb3AsXG4gICAgYmVmb3JlQm9keTogbm9vcCxcbiAgICBiZWZvcmVMYWJlbDogbm9vcCxcbiAgICBsYWJlbCAodG9vbHRpcEl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMgJiYgdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5tb2RlID09PSAnZGF0YXNldCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0b29sdGlwSXRlbS5sYWJlbCArICc6ICcgKyB0b29sdGlwSXRlbS5mb3JtYXR0ZWRWYWx1ZSB8fCB0b29sdGlwSXRlbS5mb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGFiZWwgPSB0b29sdGlwSXRlbS5kYXRhc2V0LmxhYmVsIHx8ICcnO1xuICAgICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgICAgIGxhYmVsICs9ICc6ICc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWUgPSB0b29sdGlwSXRlbS5mb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmKHZhbHVlKSkge1xuICAgICAgICAgICAgbGFiZWwgKz0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhYmVsO1xuICAgIH0sXG4gICAgbGFiZWxDb2xvciAodG9vbHRpcEl0ZW0pIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRvb2x0aXBJdGVtLmNoYXJ0LmdldERhdGFzZXRNZXRhKHRvb2x0aXBJdGVtLmRhdGFzZXRJbmRleCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBtZXRhLmNvbnRyb2xsZXIuZ2V0U3R5bGUodG9vbHRpcEl0ZW0uZGF0YUluZGV4KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiBvcHRpb25zLmJvcmRlckNvbG9yLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBvcHRpb25zLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgIGJvcmRlcldpZHRoOiBvcHRpb25zLmJvcmRlcldpZHRoLFxuICAgICAgICAgICAgYm9yZGVyRGFzaDogb3B0aW9ucy5ib3JkZXJEYXNoLFxuICAgICAgICAgICAgYm9yZGVyRGFzaE9mZnNldDogb3B0aW9ucy5ib3JkZXJEYXNoT2Zmc2V0LFxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAwXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBsYWJlbFRleHRDb2xvciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYm9keUNvbG9yO1xuICAgIH0sXG4gICAgbGFiZWxQb2ludFN0eWxlICh0b29sdGlwSXRlbSkge1xuICAgICAgICBjb25zdCBtZXRhID0gdG9vbHRpcEl0ZW0uY2hhcnQuZ2V0RGF0YXNldE1ldGEodG9vbHRpcEl0ZW0uZGF0YXNldEluZGV4KTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG1ldGEuY29udHJvbGxlci5nZXRTdHlsZSh0b29sdGlwSXRlbS5kYXRhSW5kZXgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9pbnRTdHlsZTogb3B0aW9ucy5wb2ludFN0eWxlLFxuICAgICAgICAgICAgcm90YXRpb246IG9wdGlvbnMucm90YXRpb25cbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGFmdGVyTGFiZWw6IG5vb3AsXG4gICAgYWZ0ZXJCb2R5OiBub29wLFxuICAgIGJlZm9yZUZvb3Rlcjogbm9vcCxcbiAgICBmb290ZXI6IG5vb3AsXG4gICAgYWZ0ZXJGb290ZXI6IG5vb3Bcbn07XG4gZnVuY3Rpb24gaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2soY2FsbGJhY2tzLCBuYW1lLCBjdHgsIGFyZykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGxiYWNrc1tuYW1lXS5jYWxsKGN0eCwgYXJnKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRDYWxsYmFja3NbbmFtZV0uY2FsbChjdHgsIGFyZyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5jbGFzcyBUb29sdGlwIGV4dGVuZHMgRWxlbWVudCB7XG4gc3RhdGljIHBvc2l0aW9uZXJzID0gcG9zaXRpb25lcnM7XG4gICAgY29uc3RydWN0b3IoY29uZmlnKXtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcGFjaXR5ID0gMDtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gW107XG4gICAgICAgIHRoaXMuX2V2ZW50UG9zaXRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3NpemUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2NhY2hlZEFuaW1hdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3Rvb2x0aXBJdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLiRhbmltYXRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLiRjb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmNoYXJ0ID0gY29uZmlnLmNoYXJ0O1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBjb25maWcub3B0aW9ucztcbiAgICAgICAgdGhpcy5kYXRhUG9pbnRzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnRpdGxlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmJlZm9yZUJvZHkgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYm9keSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5hZnRlckJvZHkgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZm9vdGVyID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnhBbGlnbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy55QWxpZ24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMueCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy55ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy53aWR0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jYXJldFggPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY2FyZXRZID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmxhYmVsQ29sb3JzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmxhYmVsUG9pbnRTdHlsZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubGFiZWxUZXh0Q29sb3JzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpbml0aWFsaXplKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5fY2FjaGVkQW5pbWF0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy4kY29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gX3Jlc29sdmVBbmltYXRpb25zKCkge1xuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLl9jYWNoZWRBbmltYXRpb25zO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG9wdGlvbnMuZW5hYmxlZCAmJiBjaGFydC5vcHRpb25zLmFuaW1hdGlvbiAmJiBvcHRpb25zLmFuaW1hdGlvbnM7XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbnMgPSBuZXcgQW5pbWF0aW9ucyh0aGlzLmNoYXJ0LCBvcHRzKTtcbiAgICAgICAgaWYgKG9wdHMuX2NhY2hlYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5fY2FjaGVkQW5pbWF0aW9ucyA9IE9iamVjdC5mcmVlemUoYW5pbWF0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFuaW1hdGlvbnM7XG4gICAgfVxuIGdldENvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRjb250ZXh0IHx8ICh0aGlzLiRjb250ZXh0ID0gY3JlYXRlVG9vbHRpcENvbnRleHQodGhpcy5jaGFydC5nZXRDb250ZXh0KCksIHRoaXMsIHRoaXMuX3Rvb2x0aXBJdGVtcykpO1xuICAgIH1cbiAgICBnZXRUaXRsZShjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzICB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgYmVmb3JlVGl0bGUgPSBpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayhjYWxsYmFja3MsICdiZWZvcmVUaXRsZScsIHRoaXMsIGNvbnRleHQpO1xuICAgICAgICBjb25zdCB0aXRsZSA9IGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKGNhbGxiYWNrcywgJ3RpdGxlJywgdGhpcywgY29udGV4dCk7XG4gICAgICAgIGNvbnN0IGFmdGVyVGl0bGUgPSBpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayhjYWxsYmFja3MsICdhZnRlclRpdGxlJywgdGhpcywgY29udGV4dCk7XG4gICAgICAgIGxldCBsaW5lcyA9IFtdO1xuICAgICAgICBsaW5lcyA9IHB1c2hPckNvbmNhdChsaW5lcywgc3BsaXROZXdsaW5lcyhiZWZvcmVUaXRsZSkpO1xuICAgICAgICBsaW5lcyA9IHB1c2hPckNvbmNhdChsaW5lcywgc3BsaXROZXdsaW5lcyh0aXRsZSkpO1xuICAgICAgICBsaW5lcyA9IHB1c2hPckNvbmNhdChsaW5lcywgc3BsaXROZXdsaW5lcyhhZnRlclRpdGxlKSk7XG4gICAgICAgIHJldHVybiBsaW5lcztcbiAgICB9XG4gICAgZ2V0QmVmb3JlQm9keSh0b29sdGlwSXRlbXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGdldEJlZm9yZUFmdGVyQm9keUxpbmVzKGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKG9wdGlvbnMuY2FsbGJhY2tzLCAnYmVmb3JlQm9keScsIHRoaXMsIHRvb2x0aXBJdGVtcykpO1xuICAgIH1cbiAgICBnZXRCb2R5KHRvb2x0aXBJdGVtcywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGJvZHlJdGVtcyA9IFtdO1xuICAgICAgICBlYWNoKHRvb2x0aXBJdGVtcywgKGNvbnRleHQpPT57XG4gICAgICAgICAgICBjb25zdCBib2R5SXRlbSA9IHtcbiAgICAgICAgICAgICAgICBiZWZvcmU6IFtdLFxuICAgICAgICAgICAgICAgIGxpbmVzOiBbXSxcbiAgICAgICAgICAgICAgICBhZnRlcjogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBzY29wZWQgPSBvdmVycmlkZUNhbGxiYWNrcyhjYWxsYmFja3MsIGNvbnRleHQpO1xuICAgICAgICAgICAgcHVzaE9yQ29uY2F0KGJvZHlJdGVtLmJlZm9yZSwgc3BsaXROZXdsaW5lcyhpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayhzY29wZWQsICdiZWZvcmVMYWJlbCcsIHRoaXMsIGNvbnRleHQpKSk7XG4gICAgICAgICAgICBwdXNoT3JDb25jYXQoYm9keUl0ZW0ubGluZXMsIGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKHNjb3BlZCwgJ2xhYmVsJywgdGhpcywgY29udGV4dCkpO1xuICAgICAgICAgICAgcHVzaE9yQ29uY2F0KGJvZHlJdGVtLmFmdGVyLCBzcGxpdE5ld2xpbmVzKGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKHNjb3BlZCwgJ2FmdGVyTGFiZWwnLCB0aGlzLCBjb250ZXh0KSkpO1xuICAgICAgICAgICAgYm9keUl0ZW1zLnB1c2goYm9keUl0ZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGJvZHlJdGVtcztcbiAgICB9XG4gICAgZ2V0QWZ0ZXJCb2R5KHRvb2x0aXBJdGVtcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gZ2V0QmVmb3JlQWZ0ZXJCb2R5TGluZXMoaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2sob3B0aW9ucy5jYWxsYmFja3MsICdhZnRlckJvZHknLCB0aGlzLCB0b29sdGlwSXRlbXMpKTtcbiAgICB9XG4gICAgZ2V0Rm9vdGVyKHRvb2x0aXBJdGVtcywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGJlZm9yZUZvb3RlciA9IGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKGNhbGxiYWNrcywgJ2JlZm9yZUZvb3RlcicsIHRoaXMsIHRvb2x0aXBJdGVtcyk7XG4gICAgICAgIGNvbnN0IGZvb3RlciA9IGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKGNhbGxiYWNrcywgJ2Zvb3RlcicsIHRoaXMsIHRvb2x0aXBJdGVtcyk7XG4gICAgICAgIGNvbnN0IGFmdGVyRm9vdGVyID0gaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2soY2FsbGJhY2tzLCAnYWZ0ZXJGb290ZXInLCB0aGlzLCB0b29sdGlwSXRlbXMpO1xuICAgICAgICBsZXQgbGluZXMgPSBbXTtcbiAgICAgICAgbGluZXMgPSBwdXNoT3JDb25jYXQobGluZXMsIHNwbGl0TmV3bGluZXMoYmVmb3JlRm9vdGVyKSk7XG4gICAgICAgIGxpbmVzID0gcHVzaE9yQ29uY2F0KGxpbmVzLCBzcGxpdE5ld2xpbmVzKGZvb3RlcikpO1xuICAgICAgICBsaW5lcyA9IHB1c2hPckNvbmNhdChsaW5lcywgc3BsaXROZXdsaW5lcyhhZnRlckZvb3RlcikpO1xuICAgICAgICByZXR1cm4gbGluZXM7XG4gICAgfVxuIF9jcmVhdGVJdGVtcyhvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuX2FjdGl2ZTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuY2hhcnQuZGF0YTtcbiAgICAgICAgY29uc3QgbGFiZWxDb2xvcnMgPSBbXTtcbiAgICAgICAgY29uc3QgbGFiZWxQb2ludFN0eWxlcyA9IFtdO1xuICAgICAgICBjb25zdCBsYWJlbFRleHRDb2xvcnMgPSBbXTtcbiAgICAgICAgbGV0IHRvb2x0aXBJdGVtcyA9IFtdO1xuICAgICAgICBsZXQgaSwgbGVuO1xuICAgICAgICBmb3IoaSA9IDAsIGxlbiA9IGFjdGl2ZS5sZW5ndGg7IGkgPCBsZW47ICsraSl7XG4gICAgICAgICAgICB0b29sdGlwSXRlbXMucHVzaChjcmVhdGVUb29sdGlwSXRlbSh0aGlzLmNoYXJ0LCBhY3RpdmVbaV0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRvb2x0aXBJdGVtcyA9IHRvb2x0aXBJdGVtcy5maWx0ZXIoKGVsZW1lbnQsIGluZGV4LCBhcnJheSk9Pm9wdGlvbnMuZmlsdGVyKGVsZW1lbnQsIGluZGV4LCBhcnJheSwgZGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLml0ZW1Tb3J0KSB7XG4gICAgICAgICAgICB0b29sdGlwSXRlbXMgPSB0b29sdGlwSXRlbXMuc29ydCgoYSwgYik9Pm9wdGlvbnMuaXRlbVNvcnQoYSwgYiwgZGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGVhY2godG9vbHRpcEl0ZW1zLCAoY29udGV4dCk9PntcbiAgICAgICAgICAgIGNvbnN0IHNjb3BlZCA9IG92ZXJyaWRlQ2FsbGJhY2tzKG9wdGlvbnMuY2FsbGJhY2tzLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGxhYmVsQ29sb3JzLnB1c2goaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2soc2NvcGVkLCAnbGFiZWxDb2xvcicsIHRoaXMsIGNvbnRleHQpKTtcbiAgICAgICAgICAgIGxhYmVsUG9pbnRTdHlsZXMucHVzaChpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayhzY29wZWQsICdsYWJlbFBvaW50U3R5bGUnLCB0aGlzLCBjb250ZXh0KSk7XG4gICAgICAgICAgICBsYWJlbFRleHRDb2xvcnMucHVzaChpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayhzY29wZWQsICdsYWJlbFRleHRDb2xvcicsIHRoaXMsIGNvbnRleHQpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubGFiZWxDb2xvcnMgPSBsYWJlbENvbG9ycztcbiAgICAgICAgdGhpcy5sYWJlbFBvaW50U3R5bGVzID0gbGFiZWxQb2ludFN0eWxlcztcbiAgICAgICAgdGhpcy5sYWJlbFRleHRDb2xvcnMgPSBsYWJlbFRleHRDb2xvcnM7XG4gICAgICAgIHRoaXMuZGF0YVBvaW50cyA9IHRvb2x0aXBJdGVtcztcbiAgICAgICAgcmV0dXJuIHRvb2x0aXBJdGVtcztcbiAgICB9XG4gICAgdXBkYXRlKGNoYW5nZWQsIHJlcGxheSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpO1xuICAgICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLl9hY3RpdmU7XG4gICAgICAgIGxldCBwcm9wZXJ0aWVzO1xuICAgICAgICBsZXQgdG9vbHRpcEl0ZW1zID0gW107XG4gICAgICAgIGlmICghYWN0aXZlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMub3BhY2l0eSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbmVyc1tvcHRpb25zLnBvc2l0aW9uXS5jYWxsKHRoaXMsIGFjdGl2ZSwgdGhpcy5fZXZlbnRQb3NpdGlvbik7XG4gICAgICAgICAgICB0b29sdGlwSXRlbXMgPSB0aGlzLl9jcmVhdGVJdGVtcyhvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMudGl0bGUgPSB0aGlzLmdldFRpdGxlKHRvb2x0aXBJdGVtcywgb3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLmJlZm9yZUJvZHkgPSB0aGlzLmdldEJlZm9yZUJvZHkodG9vbHRpcEl0ZW1zLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IHRoaXMuZ2V0Qm9keSh0b29sdGlwSXRlbXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5hZnRlckJvZHkgPSB0aGlzLmdldEFmdGVyQm9keSh0b29sdGlwSXRlbXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5mb290ZXIgPSB0aGlzLmdldEZvb3Rlcih0b29sdGlwSXRlbXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuX3NpemUgPSBnZXRUb29sdGlwU2l6ZSh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uQW5kU2l6ZSA9IE9iamVjdC5hc3NpZ24oe30sIHBvc2l0aW9uLCBzaXplKTtcbiAgICAgICAgICAgIGNvbnN0IGFsaWdubWVudCA9IGRldGVybWluZUFsaWdubWVudCh0aGlzLmNoYXJ0LCBvcHRpb25zLCBwb3NpdGlvbkFuZFNpemUpO1xuICAgICAgICAgICAgY29uc3QgYmFja2dyb3VuZFBvaW50ID0gZ2V0QmFja2dyb3VuZFBvaW50KG9wdGlvbnMsIHBvc2l0aW9uQW5kU2l6ZSwgYWxpZ25tZW50LCB0aGlzLmNoYXJ0KTtcbiAgICAgICAgICAgIHRoaXMueEFsaWduID0gYWxpZ25tZW50LnhBbGlnbjtcbiAgICAgICAgICAgIHRoaXMueUFsaWduID0gYWxpZ25tZW50LnlBbGlnbjtcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgICAgICB4OiBiYWNrZ3JvdW5kUG9pbnQueCxcbiAgICAgICAgICAgICAgICB5OiBiYWNrZ3JvdW5kUG9pbnQueSxcbiAgICAgICAgICAgICAgICB3aWR0aDogc2l6ZS53aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHNpemUuaGVpZ2h0LFxuICAgICAgICAgICAgICAgIGNhcmV0WDogcG9zaXRpb24ueCxcbiAgICAgICAgICAgICAgICBjYXJldFk6IHBvc2l0aW9uLnlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdG9vbHRpcEl0ZW1zID0gdG9vbHRpcEl0ZW1zO1xuICAgICAgICB0aGlzLiRjb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZUFuaW1hdGlvbnMoKS51cGRhdGUodGhpcywgcHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZWQgJiYgb3B0aW9ucy5leHRlcm5hbCkge1xuICAgICAgICAgICAgb3B0aW9ucy5leHRlcm5hbC5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgICAgICBjaGFydDogdGhpcy5jaGFydCxcbiAgICAgICAgICAgICAgICB0b29sdGlwOiB0aGlzLFxuICAgICAgICAgICAgICAgIHJlcGxheVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZHJhd0NhcmV0KHRvb2x0aXBQb2ludCwgY3R4LCBzaXplLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGNhcmV0UG9zaXRpb24gPSB0aGlzLmdldENhcmV0UG9zaXRpb24odG9vbHRpcFBvaW50LCBzaXplLCBvcHRpb25zKTtcbiAgICAgICAgY3R4LmxpbmVUbyhjYXJldFBvc2l0aW9uLngxLCBjYXJldFBvc2l0aW9uLnkxKTtcbiAgICAgICAgY3R4LmxpbmVUbyhjYXJldFBvc2l0aW9uLngyLCBjYXJldFBvc2l0aW9uLnkyKTtcbiAgICAgICAgY3R4LmxpbmVUbyhjYXJldFBvc2l0aW9uLngzLCBjYXJldFBvc2l0aW9uLnkzKTtcbiAgICB9XG4gICAgZ2V0Q2FyZXRQb3NpdGlvbih0b29sdGlwUG9pbnQsIHNpemUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyB4QWxpZ24gLCB5QWxpZ24gIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IGNhcmV0U2l6ZSAsIGNvcm5lclJhZGl1cyAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHsgdG9wTGVmdCAsIHRvcFJpZ2h0ICwgYm90dG9tTGVmdCAsIGJvdHRvbVJpZ2h0ICB9ID0gdG9UUkJMQ29ybmVycyhjb3JuZXJSYWRpdXMpO1xuICAgICAgICBjb25zdCB7IHg6IHB0WCAsIHk6IHB0WSAgfSA9IHRvb2x0aXBQb2ludDtcbiAgICAgICAgY29uc3QgeyB3aWR0aCAsIGhlaWdodCAgfSA9IHNpemU7XG4gICAgICAgIGxldCB4MSwgeDIsIHgzLCB5MSwgeTIsIHkzO1xuICAgICAgICBpZiAoeUFsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgeTIgPSBwdFkgKyBoZWlnaHQgLyAyO1xuICAgICAgICAgICAgaWYgKHhBbGlnbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICAgICAgeDEgPSBwdFg7XG4gICAgICAgICAgICAgICAgeDIgPSB4MSAtIGNhcmV0U2l6ZTtcbiAgICAgICAgICAgICAgICB5MSA9IHkyICsgY2FyZXRTaXplO1xuICAgICAgICAgICAgICAgIHkzID0geTIgLSBjYXJldFNpemU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHgxID0gcHRYICsgd2lkdGg7XG4gICAgICAgICAgICAgICAgeDIgPSB4MSArIGNhcmV0U2l6ZTtcbiAgICAgICAgICAgICAgICB5MSA9IHkyIC0gY2FyZXRTaXplO1xuICAgICAgICAgICAgICAgIHkzID0geTIgKyBjYXJldFNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4MyA9IHgxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHhBbGlnbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICAgICAgeDIgPSBwdFggKyBNYXRoLm1heCh0b3BMZWZ0LCBib3R0b21MZWZ0KSArIGNhcmV0U2l6ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeEFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICAgICAgeDIgPSBwdFggKyB3aWR0aCAtIE1hdGgubWF4KHRvcFJpZ2h0LCBib3R0b21SaWdodCkgLSBjYXJldFNpemU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHgyID0gdGhpcy5jYXJldFg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeUFsaWduID09PSAndG9wJykge1xuICAgICAgICAgICAgICAgIHkxID0gcHRZO1xuICAgICAgICAgICAgICAgIHkyID0geTEgLSBjYXJldFNpemU7XG4gICAgICAgICAgICAgICAgeDEgPSB4MiAtIGNhcmV0U2l6ZTtcbiAgICAgICAgICAgICAgICB4MyA9IHgyICsgY2FyZXRTaXplO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB5MSA9IHB0WSArIGhlaWdodDtcbiAgICAgICAgICAgICAgICB5MiA9IHkxICsgY2FyZXRTaXplO1xuICAgICAgICAgICAgICAgIHgxID0geDIgKyBjYXJldFNpemU7XG4gICAgICAgICAgICAgICAgeDMgPSB4MiAtIGNhcmV0U2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHkzID0geTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHgxLFxuICAgICAgICAgICAgeDIsXG4gICAgICAgICAgICB4MyxcbiAgICAgICAgICAgIHkxLFxuICAgICAgICAgICAgeTIsXG4gICAgICAgICAgICB5M1xuICAgICAgICB9O1xuICAgIH1cbiAgICBkcmF3VGl0bGUocHQsIGN0eCwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMudGl0bGU7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRpdGxlLmxlbmd0aDtcbiAgICAgICAgbGV0IHRpdGxlRm9udCwgdGl0bGVTcGFjaW5nLCBpO1xuICAgICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBydGxIZWxwZXIgPSBnZXRSdGxBZGFwdGVyKG9wdGlvbnMucnRsLCB0aGlzLngsIHRoaXMud2lkdGgpO1xuICAgICAgICAgICAgcHQueCA9IGdldEFsaWduZWRYKHRoaXMsIG9wdGlvbnMudGl0bGVBbGlnbiwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjdHgudGV4dEFsaWduID0gcnRsSGVscGVyLnRleHRBbGlnbihvcHRpb25zLnRpdGxlQWxpZ24pO1xuICAgICAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuICAgICAgICAgICAgdGl0bGVGb250ID0gdG9Gb250KG9wdGlvbnMudGl0bGVGb250KTtcbiAgICAgICAgICAgIHRpdGxlU3BhY2luZyA9IG9wdGlvbnMudGl0bGVTcGFjaW5nO1xuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdGlvbnMudGl0bGVDb2xvcjtcbiAgICAgICAgICAgIGN0eC5mb250ID0gdGl0bGVGb250LnN0cmluZztcbiAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IGxlbmd0aDsgKytpKXtcbiAgICAgICAgICAgICAgICBjdHguZmlsbFRleHQodGl0bGVbaV0sIHJ0bEhlbHBlci54KHB0LngpLCBwdC55ICsgdGl0bGVGb250LmxpbmVIZWlnaHQgLyAyKTtcbiAgICAgICAgICAgICAgICBwdC55ICs9IHRpdGxlRm9udC5saW5lSGVpZ2h0ICsgdGl0bGVTcGFjaW5nO1xuICAgICAgICAgICAgICAgIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHB0LnkgKz0gb3B0aW9ucy50aXRsZU1hcmdpbkJvdHRvbSAtIHRpdGxlU3BhY2luZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gX2RyYXdDb2xvckJveChjdHgsIHB0LCBpLCBydGxIZWxwZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgbGFiZWxDb2xvciA9IHRoaXMubGFiZWxDb2xvcnNbaV07XG4gICAgICAgIGNvbnN0IGxhYmVsUG9pbnRTdHlsZSA9IHRoaXMubGFiZWxQb2ludFN0eWxlc1tpXTtcbiAgICAgICAgY29uc3QgeyBib3hIZWlnaHQgLCBib3hXaWR0aCAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGJvZHlGb250ID0gdG9Gb250KG9wdGlvbnMuYm9keUZvbnQpO1xuICAgICAgICBjb25zdCBjb2xvclggPSBnZXRBbGlnbmVkWCh0aGlzLCAnbGVmdCcsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBydGxDb2xvclggPSBydGxIZWxwZXIueChjb2xvclgpO1xuICAgICAgICBjb25zdCB5T2ZmU2V0ID0gYm94SGVpZ2h0IDwgYm9keUZvbnQubGluZUhlaWdodCA/IChib2R5Rm9udC5saW5lSGVpZ2h0IC0gYm94SGVpZ2h0KSAvIDIgOiAwO1xuICAgICAgICBjb25zdCBjb2xvclkgPSBwdC55ICsgeU9mZlNldDtcbiAgICAgICAgaWYgKG9wdGlvbnMudXNlUG9pbnRTdHlsZSkge1xuICAgICAgICAgICAgY29uc3QgZHJhd09wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgcmFkaXVzOiBNYXRoLm1pbihib3hXaWR0aCwgYm94SGVpZ2h0KSAvIDIsXG4gICAgICAgICAgICAgICAgcG9pbnRTdHlsZTogbGFiZWxQb2ludFN0eWxlLnBvaW50U3R5bGUsXG4gICAgICAgICAgICAgICAgcm90YXRpb246IGxhYmVsUG9pbnRTdHlsZS5yb3RhdGlvbixcbiAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlclggPSBydGxIZWxwZXIubGVmdEZvckx0cihydGxDb2xvclgsIGJveFdpZHRoKSArIGJveFdpZHRoIC8gMjtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlclkgPSBjb2xvclkgKyBib3hIZWlnaHQgLyAyO1xuICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gb3B0aW9ucy5tdWx0aUtleUJhY2tncm91bmQ7XG4gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gb3B0aW9ucy5tdWx0aUtleUJhY2tncm91bmQ7XG4gICAgICAgICAgICBkcmF3UG9pbnQoY3R4LCBkcmF3T3B0aW9ucywgY2VudGVyWCwgY2VudGVyWSk7XG4gICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBsYWJlbENvbG9yLmJvcmRlckNvbG9yO1xuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGxhYmVsQ29sb3IuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICAgICAgZHJhd1BvaW50KGN0eCwgZHJhd09wdGlvbnMsIGNlbnRlclgsIGNlbnRlclkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGlzT2JqZWN0KGxhYmVsQ29sb3IuYm9yZGVyV2lkdGgpID8gTWF0aC5tYXgoLi4uT2JqZWN0LnZhbHVlcyhsYWJlbENvbG9yLmJvcmRlcldpZHRoKSkgOiBsYWJlbENvbG9yLmJvcmRlcldpZHRoIHx8IDE7XG4gICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBsYWJlbENvbG9yLmJvcmRlckNvbG9yO1xuICAgICAgICAgICAgY3R4LnNldExpbmVEYXNoKGxhYmVsQ29sb3IuYm9yZGVyRGFzaCB8fCBbXSk7XG4gICAgICAgICAgICBjdHgubGluZURhc2hPZmZzZXQgPSBsYWJlbENvbG9yLmJvcmRlckRhc2hPZmZzZXQgfHwgMDtcbiAgICAgICAgICAgIGNvbnN0IG91dGVyWCA9IHJ0bEhlbHBlci5sZWZ0Rm9yTHRyKHJ0bENvbG9yWCwgYm94V2lkdGgpO1xuICAgICAgICAgICAgY29uc3QgaW5uZXJYID0gcnRsSGVscGVyLmxlZnRGb3JMdHIocnRsSGVscGVyLnhQbHVzKHJ0bENvbG9yWCwgMSksIGJveFdpZHRoIC0gMik7XG4gICAgICAgICAgICBjb25zdCBib3JkZXJSYWRpdXMgPSB0b1RSQkxDb3JuZXJzKGxhYmVsQ29sb3IuYm9yZGVyUmFkaXVzKTtcbiAgICAgICAgICAgIGlmIChPYmplY3QudmFsdWVzKGJvcmRlclJhZGl1cykuc29tZSgodik9PnYgIT09IDApKSB7XG4gICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBvcHRpb25zLm11bHRpS2V5QmFja2dyb3VuZDtcbiAgICAgICAgICAgICAgICBhZGRSb3VuZGVkUmVjdFBhdGgoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIHg6IG91dGVyWCxcbiAgICAgICAgICAgICAgICAgICAgeTogY29sb3JZLFxuICAgICAgICAgICAgICAgICAgICB3OiBib3hXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaDogYm94SGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICByYWRpdXM6IGJvcmRlclJhZGl1c1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7XG4gICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBsYWJlbENvbG9yLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICAgICAgYWRkUm91bmRlZFJlY3RQYXRoKGN0eCwge1xuICAgICAgICAgICAgICAgICAgICB4OiBpbm5lclgsXG4gICAgICAgICAgICAgICAgICAgIHk6IGNvbG9yWSArIDEsXG4gICAgICAgICAgICAgICAgICAgIHc6IGJveFdpZHRoIC0gMixcbiAgICAgICAgICAgICAgICAgICAgaDogYm94SGVpZ2h0IC0gMixcbiAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBib3JkZXJSYWRpdXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjdHguZmlsbCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gb3B0aW9ucy5tdWx0aUtleUJhY2tncm91bmQ7XG4gICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KG91dGVyWCwgY29sb3JZLCBib3hXaWR0aCwgYm94SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlUmVjdChvdXRlclgsIGNvbG9yWSwgYm94V2lkdGgsIGJveEhlaWdodCk7XG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGxhYmVsQ29sb3IuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdChpbm5lclgsIGNvbG9yWSArIDEsIGJveFdpZHRoIC0gMiwgYm94SGVpZ2h0IC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMubGFiZWxUZXh0Q29sb3JzW2ldO1xuICAgIH1cbiAgICBkcmF3Qm9keShwdCwgY3R4LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgYm9keSAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgYm9keVNwYWNpbmcgLCBib2R5QWxpZ24gLCBkaXNwbGF5Q29sb3JzICwgYm94SGVpZ2h0ICwgYm94V2lkdGggLCBib3hQYWRkaW5nICB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgYm9keUZvbnQgPSB0b0ZvbnQob3B0aW9ucy5ib2R5Rm9udCk7XG4gICAgICAgIGxldCBib2R5TGluZUhlaWdodCA9IGJvZHlGb250LmxpbmVIZWlnaHQ7XG4gICAgICAgIGxldCB4TGluZVBhZGRpbmcgPSAwO1xuICAgICAgICBjb25zdCBydGxIZWxwZXIgPSBnZXRSdGxBZGFwdGVyKG9wdGlvbnMucnRsLCB0aGlzLngsIHRoaXMud2lkdGgpO1xuICAgICAgICBjb25zdCBmaWxsTGluZU9mVGV4dCA9IGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIGN0eC5maWxsVGV4dChsaW5lLCBydGxIZWxwZXIueChwdC54ICsgeExpbmVQYWRkaW5nKSwgcHQueSArIGJvZHlMaW5lSGVpZ2h0IC8gMik7XG4gICAgICAgICAgICBwdC55ICs9IGJvZHlMaW5lSGVpZ2h0ICsgYm9keVNwYWNpbmc7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGJvZHlBbGlnbkZvckNhbGN1bGF0aW9uID0gcnRsSGVscGVyLnRleHRBbGlnbihib2R5QWxpZ24pO1xuICAgICAgICBsZXQgYm9keUl0ZW0sIHRleHRDb2xvciwgbGluZXMsIGksIGosIGlsZW4sIGpsZW47XG4gICAgICAgIGN0eC50ZXh0QWxpZ24gPSBib2R5QWxpZ247XG4gICAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcbiAgICAgICAgY3R4LmZvbnQgPSBib2R5Rm9udC5zdHJpbmc7XG4gICAgICAgIHB0LnggPSBnZXRBbGlnbmVkWCh0aGlzLCBib2R5QWxpZ25Gb3JDYWxjdWxhdGlvbiwgb3B0aW9ucyk7XG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBvcHRpb25zLmJvZHlDb2xvcjtcbiAgICAgICAgZWFjaCh0aGlzLmJlZm9yZUJvZHksIGZpbGxMaW5lT2ZUZXh0KTtcbiAgICAgICAgeExpbmVQYWRkaW5nID0gZGlzcGxheUNvbG9ycyAmJiBib2R5QWxpZ25Gb3JDYWxjdWxhdGlvbiAhPT0gJ3JpZ2h0JyA/IGJvZHlBbGlnbiA9PT0gJ2NlbnRlcicgPyBib3hXaWR0aCAvIDIgKyBib3hQYWRkaW5nIDogYm94V2lkdGggKyAyICsgYm94UGFkZGluZyA6IDA7XG4gICAgICAgIGZvcihpID0gMCwgaWxlbiA9IGJvZHkubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIGJvZHlJdGVtID0gYm9keVtpXTtcbiAgICAgICAgICAgIHRleHRDb2xvciA9IHRoaXMubGFiZWxUZXh0Q29sb3JzW2ldO1xuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRleHRDb2xvcjtcbiAgICAgICAgICAgIGVhY2goYm9keUl0ZW0uYmVmb3JlLCBmaWxsTGluZU9mVGV4dCk7XG4gICAgICAgICAgICBsaW5lcyA9IGJvZHlJdGVtLmxpbmVzO1xuICAgICAgICAgICAgaWYgKGRpc3BsYXlDb2xvcnMgJiYgbGluZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHJhd0NvbG9yQm94KGN0eCwgcHQsIGksIHJ0bEhlbHBlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgYm9keUxpbmVIZWlnaHQgPSBNYXRoLm1heChib2R5Rm9udC5saW5lSGVpZ2h0LCBib3hIZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yKGogPSAwLCBqbGVuID0gbGluZXMubGVuZ3RoOyBqIDwgamxlbjsgKytqKXtcbiAgICAgICAgICAgICAgICBmaWxsTGluZU9mVGV4dChsaW5lc1tqXSk7XG4gICAgICAgICAgICAgICAgYm9keUxpbmVIZWlnaHQgPSBib2R5Rm9udC5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWFjaChib2R5SXRlbS5hZnRlciwgZmlsbExpbmVPZlRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHhMaW5lUGFkZGluZyA9IDA7XG4gICAgICAgIGJvZHlMaW5lSGVpZ2h0ID0gYm9keUZvbnQubGluZUhlaWdodDtcbiAgICAgICAgZWFjaCh0aGlzLmFmdGVyQm9keSwgZmlsbExpbmVPZlRleHQpO1xuICAgICAgICBwdC55IC09IGJvZHlTcGFjaW5nO1xuICAgIH1cbiAgICBkcmF3Rm9vdGVyKHB0LCBjdHgsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZm9vdGVyID0gdGhpcy5mb290ZXI7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGZvb3Rlci5sZW5ndGg7XG4gICAgICAgIGxldCBmb290ZXJGb250LCBpO1xuICAgICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBydGxIZWxwZXIgPSBnZXRSdGxBZGFwdGVyKG9wdGlvbnMucnRsLCB0aGlzLngsIHRoaXMud2lkdGgpO1xuICAgICAgICAgICAgcHQueCA9IGdldEFsaWduZWRYKHRoaXMsIG9wdGlvbnMuZm9vdGVyQWxpZ24sIG9wdGlvbnMpO1xuICAgICAgICAgICAgcHQueSArPSBvcHRpb25zLmZvb3Rlck1hcmdpblRvcDtcbiAgICAgICAgICAgIGN0eC50ZXh0QWxpZ24gPSBydGxIZWxwZXIudGV4dEFsaWduKG9wdGlvbnMuZm9vdGVyQWxpZ24pO1xuICAgICAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuICAgICAgICAgICAgZm9vdGVyRm9udCA9IHRvRm9udChvcHRpb25zLmZvb3RlckZvbnQpO1xuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdGlvbnMuZm9vdGVyQ29sb3I7XG4gICAgICAgICAgICBjdHguZm9udCA9IGZvb3RlckZvbnQuc3RyaW5nO1xuICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpe1xuICAgICAgICAgICAgICAgIGN0eC5maWxsVGV4dChmb290ZXJbaV0sIHJ0bEhlbHBlci54KHB0LngpLCBwdC55ICsgZm9vdGVyRm9udC5saW5lSGVpZ2h0IC8gMik7XG4gICAgICAgICAgICAgICAgcHQueSArPSBmb290ZXJGb250LmxpbmVIZWlnaHQgKyBvcHRpb25zLmZvb3RlclNwYWNpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZHJhd0JhY2tncm91bmQocHQsIGN0eCwgdG9vbHRpcFNpemUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyB4QWxpZ24gLCB5QWxpZ24gIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gcHQ7XG4gICAgICAgIGNvbnN0IHsgd2lkdGggLCBoZWlnaHQgIH0gPSB0b29sdGlwU2l6ZTtcbiAgICAgICAgY29uc3QgeyB0b3BMZWZ0ICwgdG9wUmlnaHQgLCBib3R0b21MZWZ0ICwgYm90dG9tUmlnaHQgIH0gPSB0b1RSQkxDb3JuZXJzKG9wdGlvbnMuY29ybmVyUmFkaXVzKTtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdGlvbnMuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBvcHRpb25zLmJvcmRlckNvbG9yO1xuICAgICAgICBjdHgubGluZVdpZHRoID0gb3B0aW9ucy5ib3JkZXJXaWR0aDtcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBjdHgubW92ZVRvKHggKyB0b3BMZWZ0LCB5KTtcbiAgICAgICAgaWYgKHlBbGlnbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0NhcmV0KHB0LCBjdHgsIHRvb2x0aXBTaXplLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBjdHgubGluZVRvKHggKyB3aWR0aCAtIHRvcFJpZ2h0LCB5KTtcbiAgICAgICAgY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCArIHdpZHRoLCB5LCB4ICsgd2lkdGgsIHkgKyB0b3BSaWdodCk7XG4gICAgICAgIGlmICh5QWxpZ24gPT09ICdjZW50ZXInICYmIHhBbGlnbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgdGhpcy5kcmF3Q2FyZXQocHQsIGN0eCwgdG9vbHRpcFNpemUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5saW5lVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gYm90dG9tUmlnaHQpO1xuICAgICAgICBjdHgucXVhZHJhdGljQ3VydmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCAtIGJvdHRvbVJpZ2h0LCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgaWYgKHlBbGlnbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0NhcmV0KHB0LCBjdHgsIHRvb2x0aXBTaXplLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBjdHgubGluZVRvKHggKyBib3R0b21MZWZ0LCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCwgeSArIGhlaWdodCwgeCwgeSArIGhlaWdodCAtIGJvdHRvbUxlZnQpO1xuICAgICAgICBpZiAoeUFsaWduID09PSAnY2VudGVyJyAmJiB4QWxpZ24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgdGhpcy5kcmF3Q2FyZXQocHQsIGN0eCwgdG9vbHRpcFNpemUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5saW5lVG8oeCwgeSArIHRvcExlZnQpO1xuICAgICAgICBjdHgucXVhZHJhdGljQ3VydmVUbyh4LCB5LCB4ICsgdG9wTGVmdCwgeSk7XG4gICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuYm9yZGVyV2lkdGggPiAwKSB7XG4gICAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gX3VwZGF0ZUFuaW1hdGlvblRhcmdldChvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgICAgY29uc3QgYW5pbXMgPSB0aGlzLiRhbmltYXRpb25zO1xuICAgICAgICBjb25zdCBhbmltWCA9IGFuaW1zICYmIGFuaW1zLng7XG4gICAgICAgIGNvbnN0IGFuaW1ZID0gYW5pbXMgJiYgYW5pbXMueTtcbiAgICAgICAgaWYgKGFuaW1YIHx8IGFuaW1ZKSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uZXJzW29wdGlvbnMucG9zaXRpb25dLmNhbGwodGhpcywgdGhpcy5fYWN0aXZlLCB0aGlzLl9ldmVudFBvc2l0aW9uKTtcbiAgICAgICAgICAgIGlmICghcG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzaXplID0gdGhpcy5fc2l6ZSA9IGdldFRvb2x0aXBTaXplKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb25BbmRTaXplID0gT2JqZWN0LmFzc2lnbih7fSwgcG9zaXRpb24sIHRoaXMuX3NpemUpO1xuICAgICAgICAgICAgY29uc3QgYWxpZ25tZW50ID0gZGV0ZXJtaW5lQWxpZ25tZW50KGNoYXJ0LCBvcHRpb25zLCBwb3NpdGlvbkFuZFNpemUpO1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBnZXRCYWNrZ3JvdW5kUG9pbnQob3B0aW9ucywgcG9zaXRpb25BbmRTaXplLCBhbGlnbm1lbnQsIGNoYXJ0KTtcbiAgICAgICAgICAgIGlmIChhbmltWC5fdG8gIT09IHBvaW50LnggfHwgYW5pbVkuX3RvICE9PSBwb2ludC55KSB7XG4gICAgICAgICAgICAgICAgdGhpcy54QWxpZ24gPSBhbGlnbm1lbnQueEFsaWduO1xuICAgICAgICAgICAgICAgIHRoaXMueUFsaWduID0gYWxpZ25tZW50LnlBbGlnbjtcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gc2l6ZS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuY2FyZXRYID0gcG9zaXRpb24ueDtcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmV0WSA9IHBvc2l0aW9uLnk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZUFuaW1hdGlvbnMoKS51cGRhdGUodGhpcywgcG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuIF93aWxsUmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLm9wYWNpdHk7XG4gICAgfVxuICAgIGRyYXcoY3R4KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoKSk7XG4gICAgICAgIGxldCBvcGFjaXR5ID0gdGhpcy5vcGFjaXR5O1xuICAgICAgICBpZiAoIW9wYWNpdHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cGRhdGVBbmltYXRpb25UYXJnZXQob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHRvb2x0aXBTaXplID0ge1xuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHB0ID0ge1xuICAgICAgICAgICAgeDogdGhpcy54LFxuICAgICAgICAgICAgeTogdGhpcy55XG4gICAgICAgIH07XG4gICAgICAgIG9wYWNpdHkgPSBNYXRoLmFicyhvcGFjaXR5KSA8IDFlLTMgPyAwIDogb3BhY2l0eTtcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IHRvUGFkZGluZyhvcHRpb25zLnBhZGRpbmcpO1xuICAgICAgICBjb25zdCBoYXNUb29sdGlwQ29udGVudCA9IHRoaXMudGl0bGUubGVuZ3RoIHx8IHRoaXMuYmVmb3JlQm9keS5sZW5ndGggfHwgdGhpcy5ib2R5Lmxlbmd0aCB8fCB0aGlzLmFmdGVyQm9keS5sZW5ndGggfHwgdGhpcy5mb290ZXIubGVuZ3RoO1xuICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVkICYmIGhhc1Rvb2x0aXBDb250ZW50KSB7XG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gb3BhY2l0eTtcbiAgICAgICAgICAgIHRoaXMuZHJhd0JhY2tncm91bmQocHQsIGN0eCwgdG9vbHRpcFNpemUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgb3ZlcnJpZGVUZXh0RGlyZWN0aW9uKGN0eCwgb3B0aW9ucy50ZXh0RGlyZWN0aW9uKTtcbiAgICAgICAgICAgIHB0LnkgKz0gcGFkZGluZy50b3A7XG4gICAgICAgICAgICB0aGlzLmRyYXdUaXRsZShwdCwgY3R4LCBvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuZHJhd0JvZHkocHQsIGN0eCwgb3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLmRyYXdGb290ZXIocHQsIGN0eCwgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXN0b3JlVGV4dERpcmVjdGlvbihjdHgsIG9wdGlvbnMudGV4dERpcmVjdGlvbik7XG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgfVxuIGdldEFjdGl2ZUVsZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlIHx8IFtdO1xuICAgIH1cbiBzZXRBY3RpdmVFbGVtZW50cyhhY3RpdmVFbGVtZW50cywgZXZlbnRQb3NpdGlvbikge1xuICAgICAgICBjb25zdCBsYXN0QWN0aXZlID0gdGhpcy5fYWN0aXZlO1xuICAgICAgICBjb25zdCBhY3RpdmUgPSBhY3RpdmVFbGVtZW50cy5tYXAoKHsgZGF0YXNldEluZGV4ICwgaW5kZXggIH0pPT57XG4gICAgICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5jaGFydC5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpO1xuICAgICAgICAgICAgaWYgKCFtZXRhKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmluZCBhIGRhdGFzZXQgYXQgaW5kZXggJyArIGRhdGFzZXRJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGFzZXRJbmRleCxcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBtZXRhLmRhdGFbaW5kZXhdLFxuICAgICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9ICFfZWxlbWVudHNFcXVhbChsYXN0QWN0aXZlLCBhY3RpdmUpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbkNoYW5nZWQgPSB0aGlzLl9wb3NpdGlvbkNoYW5nZWQoYWN0aXZlLCBldmVudFBvc2l0aW9uKTtcbiAgICAgICAgaWYgKGNoYW5nZWQgfHwgcG9zaXRpb25DaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmUgPSBhY3RpdmU7XG4gICAgICAgICAgICB0aGlzLl9ldmVudFBvc2l0aW9uID0gZXZlbnRQb3NpdGlvbjtcbiAgICAgICAgICAgIHRoaXMuX2lnbm9yZVJlcGxheUV2ZW50cyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cbiBoYW5kbGVFdmVudChlLCByZXBsYXksIGluQ2hhcnRBcmVhID0gdHJ1ZSkge1xuICAgICAgICBpZiAocmVwbGF5ICYmIHRoaXMuX2lnbm9yZVJlcGxheUV2ZW50cykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lnbm9yZVJlcGxheUV2ZW50cyA9IGZhbHNlO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBsYXN0QWN0aXZlID0gdGhpcy5fYWN0aXZlIHx8IFtdO1xuICAgICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLl9nZXRBY3RpdmVFbGVtZW50cyhlLCBsYXN0QWN0aXZlLCByZXBsYXksIGluQ2hhcnRBcmVhKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25DaGFuZ2VkID0gdGhpcy5fcG9zaXRpb25DaGFuZ2VkKGFjdGl2ZSwgZSk7XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSByZXBsYXkgfHwgIV9lbGVtZW50c0VxdWFsKGFjdGl2ZSwgbGFzdEFjdGl2ZSkgfHwgcG9zaXRpb25DaGFuZ2VkO1xuICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlID0gYWN0aXZlO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCB8fCBvcHRpb25zLmV4dGVybmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRQb3NpdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgeDogZS54LFxuICAgICAgICAgICAgICAgICAgICB5OiBlLnlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKHRydWUsIHJlcGxheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoYW5nZWQ7XG4gICAgfVxuIF9nZXRBY3RpdmVFbGVtZW50cyhlLCBsYXN0QWN0aXZlLCByZXBsYXksIGluQ2hhcnRBcmVhKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZW91dCcpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWluQ2hhcnRBcmVhKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdEFjdGl2ZS5maWx0ZXIoKGkpPT50aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbaS5kYXRhc2V0SW5kZXhdICYmIHRoaXMuY2hhcnQuZ2V0RGF0YXNldE1ldGEoaS5kYXRhc2V0SW5kZXgpLmNvbnRyb2xsZXIuZ2V0UGFyc2VkKGkuaW5kZXgpICE9PSB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuY2hhcnQuZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZShlLCBvcHRpb25zLm1vZGUsIG9wdGlvbnMsIHJlcGxheSk7XG4gICAgICAgIGlmIChvcHRpb25zLnJldmVyc2UpIHtcbiAgICAgICAgICAgIGFjdGl2ZS5yZXZlcnNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjdGl2ZTtcbiAgICB9XG4gX3Bvc2l0aW9uQ2hhbmdlZChhY3RpdmUsIGUpIHtcbiAgICAgICAgY29uc3QgeyBjYXJldFggLCBjYXJldFkgLCBvcHRpb25zICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbmVyc1tvcHRpb25zLnBvc2l0aW9uXS5jYWxsKHRoaXMsIGFjdGl2ZSwgZSk7XG4gICAgICAgIHJldHVybiBwb3NpdGlvbiAhPT0gZmFsc2UgJiYgKGNhcmV0WCAhPT0gcG9zaXRpb24ueCB8fCBjYXJldFkgIT09IHBvc2l0aW9uLnkpO1xuICAgIH1cbn1cbnZhciBwbHVnaW5fdG9vbHRpcCA9IHtcbiAgICBpZDogJ3Rvb2x0aXAnLFxuICAgIF9lbGVtZW50OiBUb29sdGlwLFxuICAgIHBvc2l0aW9uZXJzLFxuICAgIGFmdGVySW5pdCAoY2hhcnQsIF9hcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBjaGFydC50b29sdGlwID0gbmV3IFRvb2x0aXAoe1xuICAgICAgICAgICAgICAgIGNoYXJ0LFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBiZWZvcmVVcGRhdGUgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBpZiAoY2hhcnQudG9vbHRpcCkge1xuICAgICAgICAgICAgY2hhcnQudG9vbHRpcC5pbml0aWFsaXplKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICByZXNldCAoY2hhcnQsIF9hcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChjaGFydC50b29sdGlwKSB7XG4gICAgICAgICAgICBjaGFydC50b29sdGlwLmluaXRpYWxpemUob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFmdGVyRHJhdyAoY2hhcnQpIHtcbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IGNoYXJ0LnRvb2x0aXA7XG4gICAgICAgIGlmICh0b29sdGlwICYmIHRvb2x0aXAuX3dpbGxSZW5kZXIoKSkge1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgICAgICAgICB0b29sdGlwXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGNoYXJ0Lm5vdGlmeVBsdWdpbnMoJ2JlZm9yZVRvb2x0aXBEcmF3Jywge1xuICAgICAgICAgICAgICAgIC4uLmFyZ3MsXG4gICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9vbHRpcC5kcmF3KGNoYXJ0LmN0eCk7XG4gICAgICAgICAgICBjaGFydC5ub3RpZnlQbHVnaW5zKCdhZnRlclRvb2x0aXBEcmF3JywgYXJncyk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFmdGVyRXZlbnQgKGNoYXJ0LCBhcmdzKSB7XG4gICAgICAgIGlmIChjaGFydC50b29sdGlwKSB7XG4gICAgICAgICAgICBjb25zdCB1c2VGaW5hbFBvc2l0aW9uID0gYXJncy5yZXBsYXk7XG4gICAgICAgICAgICBpZiAoY2hhcnQudG9vbHRpcC5oYW5kbGVFdmVudChhcmdzLmV2ZW50LCB1c2VGaW5hbFBvc2l0aW9uLCBhcmdzLmluQ2hhcnRBcmVhKSkge1xuICAgICAgICAgICAgICAgIGFyZ3MuY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGV4dGVybmFsOiBudWxsLFxuICAgICAgICBwb3NpdGlvbjogJ2F2ZXJhZ2UnLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuOCknLFxuICAgICAgICB0aXRsZUNvbG9yOiAnI2ZmZicsXG4gICAgICAgIHRpdGxlRm9udDoge1xuICAgICAgICAgICAgd2VpZ2h0OiAnYm9sZCdcbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGVTcGFjaW5nOiAyLFxuICAgICAgICB0aXRsZU1hcmdpbkJvdHRvbTogNixcbiAgICAgICAgdGl0bGVBbGlnbjogJ2xlZnQnLFxuICAgICAgICBib2R5Q29sb3I6ICcjZmZmJyxcbiAgICAgICAgYm9keVNwYWNpbmc6IDIsXG4gICAgICAgIGJvZHlGb250OiB7fSxcbiAgICAgICAgYm9keUFsaWduOiAnbGVmdCcsXG4gICAgICAgIGZvb3RlckNvbG9yOiAnI2ZmZicsXG4gICAgICAgIGZvb3RlclNwYWNpbmc6IDIsXG4gICAgICAgIGZvb3Rlck1hcmdpblRvcDogNixcbiAgICAgICAgZm9vdGVyRm9udDoge1xuICAgICAgICAgICAgd2VpZ2h0OiAnYm9sZCdcbiAgICAgICAgfSxcbiAgICAgICAgZm9vdGVyQWxpZ246ICdsZWZ0JyxcbiAgICAgICAgcGFkZGluZzogNixcbiAgICAgICAgY2FyZXRQYWRkaW5nOiAyLFxuICAgICAgICBjYXJldFNpemU6IDUsXG4gICAgICAgIGNvcm5lclJhZGl1czogNixcbiAgICAgICAgYm94SGVpZ2h0OiAoY3R4LCBvcHRzKT0+b3B0cy5ib2R5Rm9udC5zaXplLFxuICAgICAgICBib3hXaWR0aDogKGN0eCwgb3B0cyk9Pm9wdHMuYm9keUZvbnQuc2l6ZSxcbiAgICAgICAgbXVsdGlLZXlCYWNrZ3JvdW5kOiAnI2ZmZicsXG4gICAgICAgIGRpc3BsYXlDb2xvcnM6IHRydWUsXG4gICAgICAgIGJveFBhZGRpbmc6IDAsXG4gICAgICAgIGJvcmRlckNvbG9yOiAncmdiYSgwLDAsMCwwKScsXG4gICAgICAgIGJvcmRlcldpZHRoOiAwLFxuICAgICAgICBhbmltYXRpb246IHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiA0MDAsXG4gICAgICAgICAgICBlYXNpbmc6ICdlYXNlT3V0UXVhcnQnXG4gICAgICAgIH0sXG4gICAgICAgIGFuaW1hdGlvbnM6IHtcbiAgICAgICAgICAgIG51bWJlcnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICd4JyxcbiAgICAgICAgICAgICAgICAgICAgJ3knLFxuICAgICAgICAgICAgICAgICAgICAnd2lkdGgnLFxuICAgICAgICAgICAgICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgJ2NhcmV0WCcsXG4gICAgICAgICAgICAgICAgICAgICdjYXJldFknXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9wYWNpdHk6IHtcbiAgICAgICAgICAgICAgICBlYXNpbmc6ICdsaW5lYXInLFxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAyMDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsbGJhY2tzOiBkZWZhdWx0Q2FsbGJhY2tzXG4gICAgfSxcbiAgICBkZWZhdWx0Um91dGVzOiB7XG4gICAgICAgIGJvZHlGb250OiAnZm9udCcsXG4gICAgICAgIGZvb3RlckZvbnQ6ICdmb250JyxcbiAgICAgICAgdGl0bGVGb250OiAnZm9udCdcbiAgICB9LFxuICAgIGRlc2NyaXB0b3JzOiB7XG4gICAgICAgIF9zY3JpcHRhYmxlOiAobmFtZSk9Pm5hbWUgIT09ICdmaWx0ZXInICYmIG5hbWUgIT09ICdpdGVtU29ydCcgJiYgbmFtZSAhPT0gJ2V4dGVybmFsJyxcbiAgICAgICAgX2luZGV4YWJsZTogZmFsc2UsXG4gICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgICAgX3NjcmlwdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgX2luZGV4YWJsZTogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgYW5pbWF0aW9uOiB7XG4gICAgICAgICAgICBfZmFsbGJhY2s6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIGFuaW1hdGlvbnM6IHtcbiAgICAgICAgICAgIF9mYWxsYmFjazogJ2FuaW1hdGlvbidcbiAgICAgICAgfVxuICAgIH0sXG4gICAgYWRkaXRpb25hbE9wdGlvblNjb3BlczogW1xuICAgICAgICAnaW50ZXJhY3Rpb24nXG4gICAgXVxufTtcblxudmFyIHBsdWdpbnMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG5fX3Byb3RvX186IG51bGwsXG5Db2xvcnM6IHBsdWdpbl9jb2xvcnMsXG5EZWNpbWF0aW9uOiBwbHVnaW5fZGVjaW1hdGlvbixcbkZpbGxlcjogaW5kZXgsXG5MZWdlbmQ6IHBsdWdpbl9sZWdlbmQsXG5TdWJUaXRsZTogcGx1Z2luX3N1YnRpdGxlLFxuVGl0bGU6IHBsdWdpbl90aXRsZSxcblRvb2x0aXA6IHBsdWdpbl90b29sdGlwXG59KTtcblxuY29uc3QgYWRkSWZTdHJpbmcgPSAobGFiZWxzLCByYXcsIGluZGV4LCBhZGRlZExhYmVscyk9PntcbiAgICBpZiAodHlwZW9mIHJhdyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaW5kZXggPSBsYWJlbHMucHVzaChyYXcpIC0gMTtcbiAgICAgICAgYWRkZWRMYWJlbHMudW5zaGlmdCh7XG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGxhYmVsOiByYXdcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChpc05hTihyYXcpKSB7XG4gICAgICAgIGluZGV4ID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xufTtcbmZ1bmN0aW9uIGZpbmRPckFkZExhYmVsKGxhYmVscywgcmF3LCBpbmRleCwgYWRkZWRMYWJlbHMpIHtcbiAgICBjb25zdCBmaXJzdCA9IGxhYmVscy5pbmRleE9mKHJhdyk7XG4gICAgaWYgKGZpcnN0ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gYWRkSWZTdHJpbmcobGFiZWxzLCByYXcsIGluZGV4LCBhZGRlZExhYmVscyk7XG4gICAgfVxuICAgIGNvbnN0IGxhc3QgPSBsYWJlbHMubGFzdEluZGV4T2YocmF3KTtcbiAgICByZXR1cm4gZmlyc3QgIT09IGxhc3QgPyBpbmRleCA6IGZpcnN0O1xufVxuY29uc3QgdmFsaWRJbmRleCA9IChpbmRleCwgbWF4KT0+aW5kZXggPT09IG51bGwgPyBudWxsIDogX2xpbWl0VmFsdWUoTWF0aC5yb3VuZChpbmRleCksIDAsIG1heCk7XG5mdW5jdGlvbiBfZ2V0TGFiZWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuZ2V0TGFiZWxzKCk7XG4gICAgaWYgKHZhbHVlID49IDAgJiYgdmFsdWUgPCBsYWJlbHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBsYWJlbHNbdmFsdWVdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5jbGFzcyBDYXRlZ29yeVNjYWxlIGV4dGVuZHMgU2NhbGUge1xuICAgIHN0YXRpYyBpZCA9ICdjYXRlZ29yeSc7XG4gc3RhdGljIGRlZmF1bHRzID0ge1xuICAgICAgICB0aWNrczoge1xuICAgICAgICAgICAgY2FsbGJhY2s6IF9nZXRMYWJlbEZvclZhbHVlXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0cnVjdG9yKGNmZyl7XG4gICAgICAgIHN1cGVyKGNmZyk7XG4gICAgICAgICB0aGlzLl9zdGFydFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl92YWx1ZVJhbmdlID0gMDtcbiAgICAgICAgdGhpcy5fYWRkZWRMYWJlbHMgPSBbXTtcbiAgICB9XG4gICAgaW5pdChzY2FsZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgYWRkZWQgPSB0aGlzLl9hZGRlZExhYmVscztcbiAgICAgICAgaWYgKGFkZGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBpbmRleCAsIGxhYmVsICB9IG9mIGFkZGVkKXtcbiAgICAgICAgICAgICAgICBpZiAobGFiZWxzW2luZGV4XSA9PT0gbGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fYWRkZWRMYWJlbHMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5pbml0KHNjYWxlT3B0aW9ucyk7XG4gICAgfVxuICAgIHBhcnNlKHJhdywgaW5kZXgpIHtcbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWYocmF3KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKTtcbiAgICAgICAgaW5kZXggPSBpc0Zpbml0ZShpbmRleCkgJiYgbGFiZWxzW2luZGV4XSA9PT0gcmF3ID8gaW5kZXggOiBmaW5kT3JBZGRMYWJlbChsYWJlbHMsIHJhdywgdmFsdWVPckRlZmF1bHQoaW5kZXgsIHJhdyksIHRoaXMuX2FkZGVkTGFiZWxzKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkSW5kZXgoaW5kZXgsIGxhYmVscy5sZW5ndGggLSAxKTtcbiAgICB9XG4gICAgZGV0ZXJtaW5lRGF0YUxpbWl0cygpIHtcbiAgICAgICAgY29uc3QgeyBtaW5EZWZpbmVkICwgbWF4RGVmaW5lZCAgfSA9IHRoaXMuZ2V0VXNlckJvdW5kcygpO1xuICAgICAgICBsZXQgeyBtaW4gLCBtYXggIH0gPSB0aGlzLmdldE1pbk1heCh0cnVlKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ib3VuZHMgPT09ICd0aWNrcycpIHtcbiAgICAgICAgICAgIGlmICghbWluRGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG1pbiA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW1heERlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBtYXggPSB0aGlzLmdldExhYmVscygpLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5taW4gPSBtaW47XG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xuICAgIH1cbiAgICBidWlsZFRpY2tzKCkge1xuICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbjtcbiAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXg7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMub3B0aW9ucy5vZmZzZXQ7XG4gICAgICAgIGNvbnN0IHRpY2tzID0gW107XG4gICAgICAgIGxldCBsYWJlbHMgPSB0aGlzLmdldExhYmVscygpO1xuICAgICAgICBsYWJlbHMgPSBtaW4gPT09IDAgJiYgbWF4ID09PSBsYWJlbHMubGVuZ3RoIC0gMSA/IGxhYmVscyA6IGxhYmVscy5zbGljZShtaW4sIG1heCArIDEpO1xuICAgICAgICB0aGlzLl92YWx1ZVJhbmdlID0gTWF0aC5tYXgobGFiZWxzLmxlbmd0aCAtIChvZmZzZXQgPyAwIDogMSksIDEpO1xuICAgICAgICB0aGlzLl9zdGFydFZhbHVlID0gdGhpcy5taW4gLSAob2Zmc2V0ID8gMC41IDogMCk7XG4gICAgICAgIGZvcihsZXQgdmFsdWUgPSBtaW47IHZhbHVlIDw9IG1heDsgdmFsdWUrKyl7XG4gICAgICAgICAgICB0aWNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRpY2tzO1xuICAgIH1cbiAgICBnZXRMYWJlbEZvclZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBfZ2V0TGFiZWxGb3JWYWx1ZS5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICB9XG4gY29uZmlndXJlKCkge1xuICAgICAgICBzdXBlci5jb25maWd1cmUoKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXZlcnNlUGl4ZWxzID0gIXRoaXMuX3JldmVyc2VQaXhlbHM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBOYU4gOiB0aGlzLmdldFBpeGVsRm9yRGVjaW1hbCgodmFsdWUgLSB0aGlzLl9zdGFydFZhbHVlKSAvIHRoaXMuX3ZhbHVlUmFuZ2UpO1xuICAgIH1cbiAgICBnZXRQaXhlbEZvclRpY2soaW5kZXgpIHtcbiAgICAgICAgY29uc3QgdGlja3MgPSB0aGlzLnRpY2tzO1xuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gdGlja3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0aWNrc1tpbmRleF0udmFsdWUpO1xuICAgIH1cbiAgICBnZXRWYWx1ZUZvclBpeGVsKHBpeGVsKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuX3N0YXJ0VmFsdWUgKyB0aGlzLmdldERlY2ltYWxGb3JQaXhlbChwaXhlbCkgKiB0aGlzLl92YWx1ZVJhbmdlKTtcbiAgICB9XG4gICAgZ2V0QmFzZVBpeGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib3R0b207XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVRpY2tzJDEoZ2VuZXJhdGlvbk9wdGlvbnMsIGRhdGFSYW5nZSkge1xuICAgIGNvbnN0IHRpY2tzID0gW107XG4gICAgY29uc3QgTUlOX1NQQUNJTkcgPSAxZS0xNDtcbiAgICBjb25zdCB7IGJvdW5kcyAsIHN0ZXAgLCBtaW4gLCBtYXggLCBwcmVjaXNpb24gLCBjb3VudCAsIG1heFRpY2tzICwgbWF4RGlnaXRzICwgaW5jbHVkZUJvdW5kcyAgfSA9IGdlbmVyYXRpb25PcHRpb25zO1xuICAgIGNvbnN0IHVuaXQgPSBzdGVwIHx8IDE7XG4gICAgY29uc3QgbWF4U3BhY2VzID0gbWF4VGlja3MgLSAxO1xuICAgIGNvbnN0IHsgbWluOiBybWluICwgbWF4OiBybWF4ICB9ID0gZGF0YVJhbmdlO1xuICAgIGNvbnN0IG1pbkRlZmluZWQgPSAhaXNOdWxsT3JVbmRlZihtaW4pO1xuICAgIGNvbnN0IG1heERlZmluZWQgPSAhaXNOdWxsT3JVbmRlZihtYXgpO1xuICAgIGNvbnN0IGNvdW50RGVmaW5lZCA9ICFpc051bGxPclVuZGVmKGNvdW50KTtcbiAgICBjb25zdCBtaW5TcGFjaW5nID0gKHJtYXggLSBybWluKSAvIChtYXhEaWdpdHMgKyAxKTtcbiAgICBsZXQgc3BhY2luZyA9IG5pY2VOdW0oKHJtYXggLSBybWluKSAvIG1heFNwYWNlcyAvIHVuaXQpICogdW5pdDtcbiAgICBsZXQgZmFjdG9yLCBuaWNlTWluLCBuaWNlTWF4LCBudW1TcGFjZXM7XG4gICAgaWYgKHNwYWNpbmcgPCBNSU5fU1BBQ0lORyAmJiAhbWluRGVmaW5lZCAmJiAhbWF4RGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBybWluXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBybWF4XG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgfVxuICAgIG51bVNwYWNlcyA9IE1hdGguY2VpbChybWF4IC8gc3BhY2luZykgLSBNYXRoLmZsb29yKHJtaW4gLyBzcGFjaW5nKTtcbiAgICBpZiAobnVtU3BhY2VzID4gbWF4U3BhY2VzKSB7XG4gICAgICAgIHNwYWNpbmcgPSBuaWNlTnVtKG51bVNwYWNlcyAqIHNwYWNpbmcgLyBtYXhTcGFjZXMgLyB1bml0KSAqIHVuaXQ7XG4gICAgfVxuICAgIGlmICghaXNOdWxsT3JVbmRlZihwcmVjaXNpb24pKSB7XG4gICAgICAgIGZhY3RvciA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24pO1xuICAgICAgICBzcGFjaW5nID0gTWF0aC5jZWlsKHNwYWNpbmcgKiBmYWN0b3IpIC8gZmFjdG9yO1xuICAgIH1cbiAgICBpZiAoYm91bmRzID09PSAndGlja3MnKSB7XG4gICAgICAgIG5pY2VNaW4gPSBNYXRoLmZsb29yKHJtaW4gLyBzcGFjaW5nKSAqIHNwYWNpbmc7XG4gICAgICAgIG5pY2VNYXggPSBNYXRoLmNlaWwocm1heCAvIHNwYWNpbmcpICogc3BhY2luZztcbiAgICB9IGVsc2Uge1xuICAgICAgICBuaWNlTWluID0gcm1pbjtcbiAgICAgICAgbmljZU1heCA9IHJtYXg7XG4gICAgfVxuICAgIGlmIChtaW5EZWZpbmVkICYmIG1heERlZmluZWQgJiYgc3RlcCAmJiBhbG1vc3RXaG9sZSgobWF4IC0gbWluKSAvIHN0ZXAsIHNwYWNpbmcgLyAxMDAwKSkge1xuICAgICAgICBudW1TcGFjZXMgPSBNYXRoLnJvdW5kKE1hdGgubWluKChtYXggLSBtaW4pIC8gc3BhY2luZywgbWF4VGlja3MpKTtcbiAgICAgICAgc3BhY2luZyA9IChtYXggLSBtaW4pIC8gbnVtU3BhY2VzO1xuICAgICAgICBuaWNlTWluID0gbWluO1xuICAgICAgICBuaWNlTWF4ID0gbWF4O1xuICAgIH0gZWxzZSBpZiAoY291bnREZWZpbmVkKSB7XG4gICAgICAgIG5pY2VNaW4gPSBtaW5EZWZpbmVkID8gbWluIDogbmljZU1pbjtcbiAgICAgICAgbmljZU1heCA9IG1heERlZmluZWQgPyBtYXggOiBuaWNlTWF4O1xuICAgICAgICBudW1TcGFjZXMgPSBjb3VudCAtIDE7XG4gICAgICAgIHNwYWNpbmcgPSAobmljZU1heCAtIG5pY2VNaW4pIC8gbnVtU3BhY2VzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG51bVNwYWNlcyA9IChuaWNlTWF4IC0gbmljZU1pbikgLyBzcGFjaW5nO1xuICAgICAgICBpZiAoYWxtb3N0RXF1YWxzKG51bVNwYWNlcywgTWF0aC5yb3VuZChudW1TcGFjZXMpLCBzcGFjaW5nIC8gMTAwMCkpIHtcbiAgICAgICAgICAgIG51bVNwYWNlcyA9IE1hdGgucm91bmQobnVtU3BhY2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG51bVNwYWNlcyA9IE1hdGguY2VpbChudW1TcGFjZXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGRlY2ltYWxQbGFjZXMgPSBNYXRoLm1heChfZGVjaW1hbFBsYWNlcyhzcGFjaW5nKSwgX2RlY2ltYWxQbGFjZXMobmljZU1pbikpO1xuICAgIGZhY3RvciA9IE1hdGgucG93KDEwLCBpc051bGxPclVuZGVmKHByZWNpc2lvbikgPyBkZWNpbWFsUGxhY2VzIDogcHJlY2lzaW9uKTtcbiAgICBuaWNlTWluID0gTWF0aC5yb3VuZChuaWNlTWluICogZmFjdG9yKSAvIGZhY3RvcjtcbiAgICBuaWNlTWF4ID0gTWF0aC5yb3VuZChuaWNlTWF4ICogZmFjdG9yKSAvIGZhY3RvcjtcbiAgICBsZXQgaiA9IDA7XG4gICAgaWYgKG1pbkRlZmluZWQpIHtcbiAgICAgICAgaWYgKGluY2x1ZGVCb3VuZHMgJiYgbmljZU1pbiAhPT0gbWluKSB7XG4gICAgICAgICAgICB0aWNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogbWluXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChuaWNlTWluIDwgbWluKSB7XG4gICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbW9zdEVxdWFscyhNYXRoLnJvdW5kKChuaWNlTWluICsgaiAqIHNwYWNpbmcpICogZmFjdG9yKSAvIGZhY3RvciwgbWluLCByZWxhdGl2ZUxhYmVsU2l6ZShtaW4sIG1pblNwYWNpbmcsIGdlbmVyYXRpb25PcHRpb25zKSkpIHtcbiAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmljZU1pbiA8IG1pbikge1xuICAgICAgICAgICAgaisrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvcig7IGogPCBudW1TcGFjZXM7ICsrail7XG4gICAgICAgIGNvbnN0IHRpY2tWYWx1ZSA9IE1hdGgucm91bmQoKG5pY2VNaW4gKyBqICogc3BhY2luZykgKiBmYWN0b3IpIC8gZmFjdG9yO1xuICAgICAgICBpZiAobWF4RGVmaW5lZCAmJiB0aWNrVmFsdWUgPiBtYXgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRpY2tzLnB1c2goe1xuICAgICAgICAgICAgdmFsdWU6IHRpY2tWYWx1ZVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKG1heERlZmluZWQgJiYgaW5jbHVkZUJvdW5kcyAmJiBuaWNlTWF4ICE9PSBtYXgpIHtcbiAgICAgICAgaWYgKHRpY2tzLmxlbmd0aCAmJiBhbG1vc3RFcXVhbHModGlja3NbdGlja3MubGVuZ3RoIC0gMV0udmFsdWUsIG1heCwgcmVsYXRpdmVMYWJlbFNpemUobWF4LCBtaW5TcGFjaW5nLCBnZW5lcmF0aW9uT3B0aW9ucykpKSB7XG4gICAgICAgICAgICB0aWNrc1t0aWNrcy5sZW5ndGggLSAxXS52YWx1ZSA9IG1heDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpY2tzLnB1c2goe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBtYXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICghbWF4RGVmaW5lZCB8fCBuaWNlTWF4ID09PSBtYXgpIHtcbiAgICAgICAgdGlja3MucHVzaCh7XG4gICAgICAgICAgICB2YWx1ZTogbmljZU1heFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRpY2tzO1xufVxuZnVuY3Rpb24gcmVsYXRpdmVMYWJlbFNpemUodmFsdWUsIG1pblNwYWNpbmcsIHsgaG9yaXpvbnRhbCAsIG1pblJvdGF0aW9uICB9KSB7XG4gICAgY29uc3QgcmFkID0gdG9SYWRpYW5zKG1pblJvdGF0aW9uKTtcbiAgICBjb25zdCByYXRpbyA9IChob3Jpem9udGFsID8gTWF0aC5zaW4ocmFkKSA6IE1hdGguY29zKHJhZCkpIHx8IDAuMDAxO1xuICAgIGNvbnN0IGxlbmd0aCA9IDAuNzUgKiBtaW5TcGFjaW5nICogKCcnICsgdmFsdWUpLmxlbmd0aDtcbiAgICByZXR1cm4gTWF0aC5taW4obWluU3BhY2luZyAvIHJhdGlvLCBsZW5ndGgpO1xufVxuY2xhc3MgTGluZWFyU2NhbGVCYXNlIGV4dGVuZHMgU2NhbGUge1xuICAgIGNvbnN0cnVjdG9yKGNmZyl7XG4gICAgICAgIHN1cGVyKGNmZyk7XG4gICAgICAgICB0aGlzLnN0YXJ0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgdGhpcy5lbmQgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLl9zdGFydFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgdGhpcy5fZW5kVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3ZhbHVlUmFuZ2UgPSAwO1xuICAgIH1cbiAgICBwYXJzZShyYXcsIGluZGV4KSB7XG4gICAgICAgIGlmIChpc051bGxPclVuZGVmKHJhdykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICgodHlwZW9mIHJhdyA9PT0gJ251bWJlcicgfHwgcmF3IGluc3RhbmNlb2YgTnVtYmVyKSAmJiAhaXNGaW5pdGUoK3JhdykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiArcmF3O1xuICAgIH1cbiAgICBoYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCkge1xuICAgICAgICBjb25zdCB7IGJlZ2luQXRaZXJvICB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCB7IG1pbkRlZmluZWQgLCBtYXhEZWZpbmVkICB9ID0gdGhpcy5nZXRVc2VyQm91bmRzKCk7XG4gICAgICAgIGxldCB7IG1pbiAsIG1heCAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHNldE1pbiA9ICh2KT0+bWluID0gbWluRGVmaW5lZCA/IG1pbiA6IHY7XG4gICAgICAgIGNvbnN0IHNldE1heCA9ICh2KT0+bWF4ID0gbWF4RGVmaW5lZCA/IG1heCA6IHY7XG4gICAgICAgIGlmIChiZWdpbkF0WmVybykge1xuICAgICAgICAgICAgY29uc3QgbWluU2lnbiA9IHNpZ24obWluKTtcbiAgICAgICAgICAgIGNvbnN0IG1heFNpZ24gPSBzaWduKG1heCk7XG4gICAgICAgICAgICBpZiAobWluU2lnbiA8IDAgJiYgbWF4U2lnbiA8IDApIHtcbiAgICAgICAgICAgICAgICBzZXRNYXgoMCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1pblNpZ24gPiAwICYmIG1heFNpZ24gPiAwKSB7XG4gICAgICAgICAgICAgICAgc2V0TWluKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtaW4gPT09IG1heCkge1xuICAgICAgICAgICAgbGV0IG9mZnNldCA9IG1heCA9PT0gMCA/IDEgOiBNYXRoLmFicyhtYXggKiAwLjA1KTtcbiAgICAgICAgICAgIHNldE1heChtYXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgaWYgKCFiZWdpbkF0WmVybykge1xuICAgICAgICAgICAgICAgIHNldE1pbihtaW4gLSBvZmZzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgICB0aGlzLm1heCA9IG1heDtcbiAgICB9XG4gICAgZ2V0VGlja0xpbWl0KCkge1xuICAgICAgICBjb25zdCB0aWNrT3B0cyA9IHRoaXMub3B0aW9ucy50aWNrcztcbiAgICAgICAgbGV0IHsgbWF4VGlja3NMaW1pdCAsIHN0ZXBTaXplICB9ID0gdGlja09wdHM7XG4gICAgICAgIGxldCBtYXhUaWNrcztcbiAgICAgICAgaWYgKHN0ZXBTaXplKSB7XG4gICAgICAgICAgICBtYXhUaWNrcyA9IE1hdGguY2VpbCh0aGlzLm1heCAvIHN0ZXBTaXplKSAtIE1hdGguZmxvb3IodGhpcy5taW4gLyBzdGVwU2l6ZSkgKyAxO1xuICAgICAgICAgICAgaWYgKG1heFRpY2tzID4gMTAwMCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybihgc2NhbGVzLiR7dGhpcy5pZH0udGlja3Muc3RlcFNpemU6ICR7c3RlcFNpemV9IHdvdWxkIHJlc3VsdCBnZW5lcmF0aW5nIHVwIHRvICR7bWF4VGlja3N9IHRpY2tzLiBMaW1pdGluZyB0byAxMDAwLmApO1xuICAgICAgICAgICAgICAgIG1heFRpY2tzID0gMTAwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1heFRpY2tzID0gdGhpcy5jb21wdXRlVGlja0xpbWl0KCk7XG4gICAgICAgICAgICBtYXhUaWNrc0xpbWl0ID0gbWF4VGlja3NMaW1pdCB8fCAxMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4VGlja3NMaW1pdCkge1xuICAgICAgICAgICAgbWF4VGlja3MgPSBNYXRoLm1pbihtYXhUaWNrc0xpbWl0LCBtYXhUaWNrcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heFRpY2tzO1xuICAgIH1cbiBjb21wdXRlVGlja0xpbWl0KCkge1xuICAgICAgICByZXR1cm4gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIH1cbiAgICBidWlsZFRpY2tzKCkge1xuICAgICAgICBjb25zdCBvcHRzID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCB0aWNrT3B0cyA9IG9wdHMudGlja3M7XG4gICAgICAgIGxldCBtYXhUaWNrcyA9IHRoaXMuZ2V0VGlja0xpbWl0KCk7XG4gICAgICAgIG1heFRpY2tzID0gTWF0aC5tYXgoMiwgbWF4VGlja3MpO1xuICAgICAgICBjb25zdCBudW1lcmljR2VuZXJhdG9yT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG1heFRpY2tzLFxuICAgICAgICAgICAgYm91bmRzOiBvcHRzLmJvdW5kcyxcbiAgICAgICAgICAgIG1pbjogb3B0cy5taW4sXG4gICAgICAgICAgICBtYXg6IG9wdHMubWF4LFxuICAgICAgICAgICAgcHJlY2lzaW9uOiB0aWNrT3B0cy5wcmVjaXNpb24sXG4gICAgICAgICAgICBzdGVwOiB0aWNrT3B0cy5zdGVwU2l6ZSxcbiAgICAgICAgICAgIGNvdW50OiB0aWNrT3B0cy5jb3VudCxcbiAgICAgICAgICAgIG1heERpZ2l0czogdGhpcy5fbWF4RGlnaXRzKCksXG4gICAgICAgICAgICBob3Jpem9udGFsOiB0aGlzLmlzSG9yaXpvbnRhbCgpLFxuICAgICAgICAgICAgbWluUm90YXRpb246IHRpY2tPcHRzLm1pblJvdGF0aW9uIHx8IDAsXG4gICAgICAgICAgICBpbmNsdWRlQm91bmRzOiB0aWNrT3B0cy5pbmNsdWRlQm91bmRzICE9PSBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBkYXRhUmFuZ2UgPSB0aGlzLl9yYW5nZSB8fCB0aGlzO1xuICAgICAgICBjb25zdCB0aWNrcyA9IGdlbmVyYXRlVGlja3MkMShudW1lcmljR2VuZXJhdG9yT3B0aW9ucywgZGF0YVJhbmdlKTtcbiAgICAgICAgaWYgKG9wdHMuYm91bmRzID09PSAndGlja3MnKSB7XG4gICAgICAgICAgICBfc2V0TWluQW5kTWF4QnlLZXkodGlja3MsIHRoaXMsICd2YWx1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLnJldmVyc2UpIHtcbiAgICAgICAgICAgIHRpY2tzLnJldmVyc2UoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLm1heDtcbiAgICAgICAgICAgIHRoaXMuZW5kID0gdGhpcy5taW47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ID0gdGhpcy5taW47XG4gICAgICAgICAgICB0aGlzLmVuZCA9IHRoaXMubWF4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aWNrcztcbiAgICB9XG4gY29uZmlndXJlKCkge1xuICAgICAgICBjb25zdCB0aWNrcyA9IHRoaXMudGlja3M7XG4gICAgICAgIGxldCBzdGFydCA9IHRoaXMubWluO1xuICAgICAgICBsZXQgZW5kID0gdGhpcy5tYXg7XG4gICAgICAgIHN1cGVyLmNvbmZpZ3VyZSgpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9mZnNldCAmJiB0aWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IChlbmQgLSBzdGFydCkgLyBNYXRoLm1heCh0aWNrcy5sZW5ndGggLSAxLCAxKSAvIDI7XG4gICAgICAgICAgICBzdGFydCAtPSBvZmZzZXQ7XG4gICAgICAgICAgICBlbmQgKz0gb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N0YXJ0VmFsdWUgPSBzdGFydDtcbiAgICAgICAgdGhpcy5fZW5kVmFsdWUgPSBlbmQ7XG4gICAgICAgIHRoaXMuX3ZhbHVlUmFuZ2UgPSBlbmQgLSBzdGFydDtcbiAgICB9XG4gICAgZ2V0TGFiZWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbHVlLCB0aGlzLmNoYXJ0Lm9wdGlvbnMubG9jYWxlLCB0aGlzLm9wdGlvbnMudGlja3MuZm9ybWF0KTtcbiAgICB9XG59XG5cbmNsYXNzIExpbmVhclNjYWxlIGV4dGVuZHMgTGluZWFyU2NhbGVCYXNlIHtcbiAgICBzdGF0aWMgaWQgPSAnbGluZWFyJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgICBjYWxsYmFjazogVGlja3MuZm9ybWF0dGVycy5udW1lcmljXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGRldGVybWluZURhdGFMaW1pdHMoKSB7XG4gICAgICAgIGNvbnN0IHsgbWluICwgbWF4ICB9ID0gdGhpcy5nZXRNaW5NYXgodHJ1ZSk7XG4gICAgICAgIHRoaXMubWluID0gaXNOdW1iZXJGaW5pdGUobWluKSA/IG1pbiA6IDA7XG4gICAgICAgIHRoaXMubWF4ID0gaXNOdW1iZXJGaW5pdGUobWF4KSA/IG1heCA6IDE7XG4gICAgICAgIHRoaXMuaGFuZGxlVGlja1JhbmdlT3B0aW9ucygpO1xuICAgIH1cbiBjb21wdXRlVGlja0xpbWl0KCkge1xuICAgICAgICBjb25zdCBob3Jpem9udGFsID0gdGhpcy5pc0hvcml6b250YWwoKTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gaG9yaXpvbnRhbCA/IHRoaXMud2lkdGggOiB0aGlzLmhlaWdodDtcbiAgICAgICAgY29uc3QgbWluUm90YXRpb24gPSB0b1JhZGlhbnModGhpcy5vcHRpb25zLnRpY2tzLm1pblJvdGF0aW9uKTtcbiAgICAgICAgY29uc3QgcmF0aW8gPSAoaG9yaXpvbnRhbCA/IE1hdGguc2luKG1pblJvdGF0aW9uKSA6IE1hdGguY29zKG1pblJvdGF0aW9uKSkgfHwgMC4wMDE7XG4gICAgICAgIGNvbnN0IHRpY2tGb250ID0gdGhpcy5fcmVzb2x2ZVRpY2tGb250T3B0aW9ucygwKTtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbChsZW5ndGggLyBNYXRoLm1pbig0MCwgdGlja0ZvbnQubGluZUhlaWdodCAvIHJhdGlvKSk7XG4gICAgfVxuICAgIGdldFBpeGVsRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gTmFOIDogdGhpcy5nZXRQaXhlbEZvckRlY2ltYWwoKHZhbHVlIC0gdGhpcy5fc3RhcnRWYWx1ZSkgLyB0aGlzLl92YWx1ZVJhbmdlKTtcbiAgICB9XG4gICAgZ2V0VmFsdWVGb3JQaXhlbChwaXhlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRWYWx1ZSArIHRoaXMuZ2V0RGVjaW1hbEZvclBpeGVsKHBpeGVsKSAqIHRoaXMuX3ZhbHVlUmFuZ2U7XG4gICAgfVxufVxuXG5jb25zdCBsb2cxMEZsb29yID0gKHYpPT5NYXRoLmZsb29yKGxvZzEwKHYpKTtcbmNvbnN0IGNoYW5nZUV4cG9uZW50ID0gKHYsIG0pPT5NYXRoLnBvdygxMCwgbG9nMTBGbG9vcih2KSArIG0pO1xuZnVuY3Rpb24gaXNNYWpvcih0aWNrVmFsKSB7XG4gICAgY29uc3QgcmVtYWluID0gdGlja1ZhbCAvIE1hdGgucG93KDEwLCBsb2cxMEZsb29yKHRpY2tWYWwpKTtcbiAgICByZXR1cm4gcmVtYWluID09PSAxO1xufVxuZnVuY3Rpb24gc3RlcHMobWluLCBtYXgsIHJhbmdlRXhwKSB7XG4gICAgY29uc3QgcmFuZ2VTdGVwID0gTWF0aC5wb3coMTAsIHJhbmdlRXhwKTtcbiAgICBjb25zdCBzdGFydCA9IE1hdGguZmxvb3IobWluIC8gcmFuZ2VTdGVwKTtcbiAgICBjb25zdCBlbmQgPSBNYXRoLmNlaWwobWF4IC8gcmFuZ2VTdGVwKTtcbiAgICByZXR1cm4gZW5kIC0gc3RhcnQ7XG59XG5mdW5jdGlvbiBzdGFydEV4cChtaW4sIG1heCkge1xuICAgIGNvbnN0IHJhbmdlID0gbWF4IC0gbWluO1xuICAgIGxldCByYW5nZUV4cCA9IGxvZzEwRmxvb3IocmFuZ2UpO1xuICAgIHdoaWxlKHN0ZXBzKG1pbiwgbWF4LCByYW5nZUV4cCkgPiAxMCl7XG4gICAgICAgIHJhbmdlRXhwKys7XG4gICAgfVxuICAgIHdoaWxlKHN0ZXBzKG1pbiwgbWF4LCByYW5nZUV4cCkgPCAxMCl7XG4gICAgICAgIHJhbmdlRXhwLS07XG4gICAgfVxuICAgIHJldHVybiBNYXRoLm1pbihyYW5nZUV4cCwgbG9nMTBGbG9vcihtaW4pKTtcbn1cbiBmdW5jdGlvbiBnZW5lcmF0ZVRpY2tzKGdlbmVyYXRpb25PcHRpb25zLCB7IG1pbiAsIG1heCAgfSkge1xuICAgIG1pbiA9IGZpbml0ZU9yRGVmYXVsdChnZW5lcmF0aW9uT3B0aW9ucy5taW4sIG1pbik7XG4gICAgY29uc3QgdGlja3MgPSBbXTtcbiAgICBjb25zdCBtaW5FeHAgPSBsb2cxMEZsb29yKG1pbik7XG4gICAgbGV0IGV4cCA9IHN0YXJ0RXhwKG1pbiwgbWF4KTtcbiAgICBsZXQgcHJlY2lzaW9uID0gZXhwIDwgMCA/IE1hdGgucG93KDEwLCBNYXRoLmFicyhleHApKSA6IDE7XG4gICAgY29uc3Qgc3RlcFNpemUgPSBNYXRoLnBvdygxMCwgZXhwKTtcbiAgICBjb25zdCBiYXNlID0gbWluRXhwID4gZXhwID8gTWF0aC5wb3coMTAsIG1pbkV4cCkgOiAwO1xuICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5yb3VuZCgobWluIC0gYmFzZSkgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uO1xuICAgIGNvbnN0IG9mZnNldCA9IE1hdGguZmxvb3IoKG1pbiAtIGJhc2UpIC8gc3RlcFNpemUgLyAxMCkgKiBzdGVwU2l6ZSAqIDEwO1xuICAgIGxldCBzaWduaWZpY2FuZCA9IE1hdGguZmxvb3IoKHN0YXJ0IC0gb2Zmc2V0KSAvIE1hdGgucG93KDEwLCBleHApKTtcbiAgICBsZXQgdmFsdWUgPSBmaW5pdGVPckRlZmF1bHQoZ2VuZXJhdGlvbk9wdGlvbnMubWluLCBNYXRoLnJvdW5kKChiYXNlICsgb2Zmc2V0ICsgc2lnbmlmaWNhbmQgKiBNYXRoLnBvdygxMCwgZXhwKSkgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uKTtcbiAgICB3aGlsZSh2YWx1ZSA8IG1heCl7XG4gICAgICAgIHRpY2tzLnB1c2goe1xuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBtYWpvcjogaXNNYWpvcih2YWx1ZSksXG4gICAgICAgICAgICBzaWduaWZpY2FuZFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHNpZ25pZmljYW5kID49IDEwKSB7XG4gICAgICAgICAgICBzaWduaWZpY2FuZCA9IHNpZ25pZmljYW5kIDwgMTUgPyAxNSA6IDIwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2lnbmlmaWNhbmQrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2lnbmlmaWNhbmQgPj0gMjApIHtcbiAgICAgICAgICAgIGV4cCsrO1xuICAgICAgICAgICAgc2lnbmlmaWNhbmQgPSAyO1xuICAgICAgICAgICAgcHJlY2lzaW9uID0gZXhwID49IDAgPyAxIDogcHJlY2lzaW9uO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCgoYmFzZSArIG9mZnNldCArIHNpZ25pZmljYW5kICogTWF0aC5wb3coMTAsIGV4cCkpICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbjtcbiAgICB9XG4gICAgY29uc3QgbGFzdFRpY2sgPSBmaW5pdGVPckRlZmF1bHQoZ2VuZXJhdGlvbk9wdGlvbnMubWF4LCB2YWx1ZSk7XG4gICAgdGlja3MucHVzaCh7XG4gICAgICAgIHZhbHVlOiBsYXN0VGljayxcbiAgICAgICAgbWFqb3I6IGlzTWFqb3IobGFzdFRpY2spLFxuICAgICAgICBzaWduaWZpY2FuZFxuICAgIH0pO1xuICAgIHJldHVybiB0aWNrcztcbn1cbmNsYXNzIExvZ2FyaXRobWljU2NhbGUgZXh0ZW5kcyBTY2FsZSB7XG4gICAgc3RhdGljIGlkID0gJ2xvZ2FyaXRobWljJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgICBjYWxsYmFjazogVGlja3MuZm9ybWF0dGVycy5sb2dhcml0aG1pYyxcbiAgICAgICAgICAgIG1ham9yOiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdHJ1Y3RvcihjZmcpe1xuICAgICAgICBzdXBlcihjZmcpO1xuICAgICAgICAgdGhpcy5zdGFydCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMuZW5kID0gdW5kZWZpbmVkO1xuICAgICAgICAgdGhpcy5fc3RhcnRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fdmFsdWVSYW5nZSA9IDA7XG4gICAgfVxuICAgIHBhcnNlKHJhdywgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBMaW5lYXJTY2FsZUJhc2UucHJvdG90eXBlLnBhcnNlLmFwcGx5KHRoaXMsIFtcbiAgICAgICAgICAgIHJhdyxcbiAgICAgICAgICAgIGluZGV4XG4gICAgICAgIF0pO1xuICAgICAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3plcm8gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOdW1iZXJGaW5pdGUodmFsdWUpICYmIHZhbHVlID4gMCA/IHZhbHVlIDogbnVsbDtcbiAgICB9XG4gICAgZGV0ZXJtaW5lRGF0YUxpbWl0cygpIHtcbiAgICAgICAgY29uc3QgeyBtaW4gLCBtYXggIH0gPSB0aGlzLmdldE1pbk1heCh0cnVlKTtcbiAgICAgICAgdGhpcy5taW4gPSBpc051bWJlckZpbml0ZShtaW4pID8gTWF0aC5tYXgoMCwgbWluKSA6IG51bGw7XG4gICAgICAgIHRoaXMubWF4ID0gaXNOdW1iZXJGaW5pdGUobWF4KSA/IE1hdGgubWF4KDAsIG1heCkgOiBudWxsO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJlZ2luQXRaZXJvKSB7XG4gICAgICAgICAgICB0aGlzLl96ZXJvID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5femVybyAmJiB0aGlzLm1pbiAhPT0gdGhpcy5fc3VnZ2VzdGVkTWluICYmICFpc051bWJlckZpbml0ZSh0aGlzLl91c2VyTWluKSkge1xuICAgICAgICAgICAgdGhpcy5taW4gPSBtaW4gPT09IGNoYW5nZUV4cG9uZW50KHRoaXMubWluLCAwKSA/IGNoYW5nZUV4cG9uZW50KHRoaXMubWluLCAtMSkgOiBjaGFuZ2VFeHBvbmVudCh0aGlzLm1pbiwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCk7XG4gICAgfVxuICAgIGhhbmRsZVRpY2tSYW5nZU9wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IHsgbWluRGVmaW5lZCAsIG1heERlZmluZWQgIH0gPSB0aGlzLmdldFVzZXJCb3VuZHMoKTtcbiAgICAgICAgbGV0IG1pbiA9IHRoaXMubWluO1xuICAgICAgICBsZXQgbWF4ID0gdGhpcy5tYXg7XG4gICAgICAgIGNvbnN0IHNldE1pbiA9ICh2KT0+bWluID0gbWluRGVmaW5lZCA/IG1pbiA6IHY7XG4gICAgICAgIGNvbnN0IHNldE1heCA9ICh2KT0+bWF4ID0gbWF4RGVmaW5lZCA/IG1heCA6IHY7XG4gICAgICAgIGlmIChtaW4gPT09IG1heCkge1xuICAgICAgICAgICAgaWYgKG1pbiA8PSAwKSB7XG4gICAgICAgICAgICAgICAgc2V0TWluKDEpO1xuICAgICAgICAgICAgICAgIHNldE1heCgxMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldE1pbihjaGFuZ2VFeHBvbmVudChtaW4sIC0xKSk7XG4gICAgICAgICAgICAgICAgc2V0TWF4KGNoYW5nZUV4cG9uZW50KG1heCwgKzEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWluIDw9IDApIHtcbiAgICAgICAgICAgIHNldE1pbihjaGFuZ2VFeHBvbmVudChtYXgsIC0xKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCA8PSAwKSB7XG4gICAgICAgICAgICBzZXRNYXgoY2hhbmdlRXhwb25lbnQobWluLCArMSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgICB0aGlzLm1heCA9IG1heDtcbiAgICB9XG4gICAgYnVpbGRUaWNrcygpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgZ2VuZXJhdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgICAgICBtaW46IHRoaXMuX3VzZXJNaW4sXG4gICAgICAgICAgICBtYXg6IHRoaXMuX3VzZXJNYXhcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdGlja3MgPSBnZW5lcmF0ZVRpY2tzKGdlbmVyYXRpb25PcHRpb25zLCB0aGlzKTtcbiAgICAgICAgaWYgKG9wdHMuYm91bmRzID09PSAndGlja3MnKSB7XG4gICAgICAgICAgICBfc2V0TWluQW5kTWF4QnlLZXkodGlja3MsIHRoaXMsICd2YWx1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLnJldmVyc2UpIHtcbiAgICAgICAgICAgIHRpY2tzLnJldmVyc2UoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLm1heDtcbiAgICAgICAgICAgIHRoaXMuZW5kID0gdGhpcy5taW47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ID0gdGhpcy5taW47XG4gICAgICAgICAgICB0aGlzLmVuZCA9IHRoaXMubWF4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aWNrcztcbiAgICB9XG4gZ2V0TGFiZWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/ICcwJyA6IGZvcm1hdE51bWJlcih2YWx1ZSwgdGhpcy5jaGFydC5vcHRpb25zLmxvY2FsZSwgdGhpcy5vcHRpb25zLnRpY2tzLmZvcm1hdCk7XG4gICAgfVxuIGNvbmZpZ3VyZSgpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLm1pbjtcbiAgICAgICAgc3VwZXIuY29uZmlndXJlKCk7XG4gICAgICAgIHRoaXMuX3N0YXJ0VmFsdWUgPSBsb2cxMChzdGFydCk7XG4gICAgICAgIHRoaXMuX3ZhbHVlUmFuZ2UgPSBsb2cxMCh0aGlzLm1heCkgLSBsb2cxMChzdGFydCk7XG4gICAgfVxuICAgIGdldFBpeGVsRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5taW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRQaXhlbEZvckRlY2ltYWwodmFsdWUgPT09IHRoaXMubWluID8gMCA6IChsb2cxMCh2YWx1ZSkgLSB0aGlzLl9zdGFydFZhbHVlKSAvIHRoaXMuX3ZhbHVlUmFuZ2UpO1xuICAgIH1cbiAgICBnZXRWYWx1ZUZvclBpeGVsKHBpeGVsKSB7XG4gICAgICAgIGNvbnN0IGRlY2ltYWwgPSB0aGlzLmdldERlY2ltYWxGb3JQaXhlbChwaXhlbCk7XG4gICAgICAgIHJldHVybiBNYXRoLnBvdygxMCwgdGhpcy5fc3RhcnRWYWx1ZSArIGRlY2ltYWwgKiB0aGlzLl92YWx1ZVJhbmdlKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldFRpY2tCYWNrZHJvcEhlaWdodChvcHRzKSB7XG4gICAgY29uc3QgdGlja09wdHMgPSBvcHRzLnRpY2tzO1xuICAgIGlmICh0aWNrT3B0cy5kaXNwbGF5ICYmIG9wdHMuZGlzcGxheSkge1xuICAgICAgICBjb25zdCBwYWRkaW5nID0gdG9QYWRkaW5nKHRpY2tPcHRzLmJhY2tkcm9wUGFkZGluZyk7XG4gICAgICAgIHJldHVybiB2YWx1ZU9yRGVmYXVsdCh0aWNrT3B0cy5mb250ICYmIHRpY2tPcHRzLmZvbnQuc2l6ZSwgZGVmYXVsdHMuZm9udC5zaXplKSArIHBhZGRpbmcuaGVpZ2h0O1xuICAgIH1cbiAgICByZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIG1lYXN1cmVMYWJlbFNpemUoY3R4LCBmb250LCBsYWJlbCkge1xuICAgIGxhYmVsID0gaXNBcnJheShsYWJlbCkgPyBsYWJlbCA6IFtcbiAgICAgICAgbGFiZWxcbiAgICBdO1xuICAgIHJldHVybiB7XG4gICAgICAgIHc6IF9sb25nZXN0VGV4dChjdHgsIGZvbnQuc3RyaW5nLCBsYWJlbCksXG4gICAgICAgIGg6IGxhYmVsLmxlbmd0aCAqIGZvbnQubGluZUhlaWdodFxuICAgIH07XG59XG5mdW5jdGlvbiBkZXRlcm1pbmVMaW1pdHMoYW5nbGUsIHBvcywgc2l6ZSwgbWluLCBtYXgpIHtcbiAgICBpZiAoYW5nbGUgPT09IG1pbiB8fCBhbmdsZSA9PT0gbWF4KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydDogcG9zIC0gc2l6ZSAvIDIsXG4gICAgICAgICAgICBlbmQ6IHBvcyArIHNpemUgLyAyXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmIChhbmdsZSA8IG1pbiB8fCBhbmdsZSA+IG1heCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhcnQ6IHBvcyAtIHNpemUsXG4gICAgICAgICAgICBlbmQ6IHBvc1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBzdGFydDogcG9zLFxuICAgICAgICBlbmQ6IHBvcyArIHNpemVcbiAgICB9O1xufVxuIGZ1bmN0aW9uIGZpdFdpdGhQb2ludExhYmVscyhzY2FsZSkge1xuICAgIGNvbnN0IG9yaWcgPSB7XG4gICAgICAgIGw6IHNjYWxlLmxlZnQgKyBzY2FsZS5fcGFkZGluZy5sZWZ0LFxuICAgICAgICByOiBzY2FsZS5yaWdodCAtIHNjYWxlLl9wYWRkaW5nLnJpZ2h0LFxuICAgICAgICB0OiBzY2FsZS50b3AgKyBzY2FsZS5fcGFkZGluZy50b3AsXG4gICAgICAgIGI6IHNjYWxlLmJvdHRvbSAtIHNjYWxlLl9wYWRkaW5nLmJvdHRvbVxuICAgIH07XG4gICAgY29uc3QgbGltaXRzID0gT2JqZWN0LmFzc2lnbih7fSwgb3JpZyk7XG4gICAgY29uc3QgbGFiZWxTaXplcyA9IFtdO1xuICAgIGNvbnN0IHBhZGRpbmcgPSBbXTtcbiAgICBjb25zdCB2YWx1ZUNvdW50ID0gc2NhbGUuX3BvaW50TGFiZWxzLmxlbmd0aDtcbiAgICBjb25zdCBwb2ludExhYmVsT3B0cyA9IHNjYWxlLm9wdGlvbnMucG9pbnRMYWJlbHM7XG4gICAgY29uc3QgYWRkaXRpb25hbEFuZ2xlID0gcG9pbnRMYWJlbE9wdHMuY2VudGVyUG9pbnRMYWJlbHMgPyBQSSAvIHZhbHVlQ291bnQgOiAwO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCB2YWx1ZUNvdW50OyBpKyspe1xuICAgICAgICBjb25zdCBvcHRzID0gcG9pbnRMYWJlbE9wdHMuc2V0Q29udGV4dChzY2FsZS5nZXRQb2ludExhYmVsQ29udGV4dChpKSk7XG4gICAgICAgIHBhZGRpbmdbaV0gPSBvcHRzLnBhZGRpbmc7XG4gICAgICAgIGNvbnN0IHBvaW50UG9zaXRpb24gPSBzY2FsZS5nZXRQb2ludFBvc2l0aW9uKGksIHNjYWxlLmRyYXdpbmdBcmVhICsgcGFkZGluZ1tpXSwgYWRkaXRpb25hbEFuZ2xlKTtcbiAgICAgICAgY29uc3QgcGxGb250ID0gdG9Gb250KG9wdHMuZm9udCk7XG4gICAgICAgIGNvbnN0IHRleHRTaXplID0gbWVhc3VyZUxhYmVsU2l6ZShzY2FsZS5jdHgsIHBsRm9udCwgc2NhbGUuX3BvaW50TGFiZWxzW2ldKTtcbiAgICAgICAgbGFiZWxTaXplc1tpXSA9IHRleHRTaXplO1xuICAgICAgICBjb25zdCBhbmdsZVJhZGlhbnMgPSBfbm9ybWFsaXplQW5nbGUoc2NhbGUuZ2V0SW5kZXhBbmdsZShpKSArIGFkZGl0aW9uYWxBbmdsZSk7XG4gICAgICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5yb3VuZCh0b0RlZ3JlZXMoYW5nbGVSYWRpYW5zKSk7XG4gICAgICAgIGNvbnN0IGhMaW1pdHMgPSBkZXRlcm1pbmVMaW1pdHMoYW5nbGUsIHBvaW50UG9zaXRpb24ueCwgdGV4dFNpemUudywgMCwgMTgwKTtcbiAgICAgICAgY29uc3QgdkxpbWl0cyA9IGRldGVybWluZUxpbWl0cyhhbmdsZSwgcG9pbnRQb3NpdGlvbi55LCB0ZXh0U2l6ZS5oLCA5MCwgMjcwKTtcbiAgICAgICAgdXBkYXRlTGltaXRzKGxpbWl0cywgb3JpZywgYW5nbGVSYWRpYW5zLCBoTGltaXRzLCB2TGltaXRzKTtcbiAgICB9XG4gICAgc2NhbGUuc2V0Q2VudGVyUG9pbnQob3JpZy5sIC0gbGltaXRzLmwsIGxpbWl0cy5yIC0gb3JpZy5yLCBvcmlnLnQgLSBsaW1pdHMudCwgbGltaXRzLmIgLSBvcmlnLmIpO1xuICAgIHNjYWxlLl9wb2ludExhYmVsSXRlbXMgPSBidWlsZFBvaW50TGFiZWxJdGVtcyhzY2FsZSwgbGFiZWxTaXplcywgcGFkZGluZyk7XG59XG5mdW5jdGlvbiB1cGRhdGVMaW1pdHMobGltaXRzLCBvcmlnLCBhbmdsZSwgaExpbWl0cywgdkxpbWl0cykge1xuICAgIGNvbnN0IHNpbiA9IE1hdGguYWJzKE1hdGguc2luKGFuZ2xlKSk7XG4gICAgY29uc3QgY29zID0gTWF0aC5hYnMoTWF0aC5jb3MoYW5nbGUpKTtcbiAgICBsZXQgeCA9IDA7XG4gICAgbGV0IHkgPSAwO1xuICAgIGlmIChoTGltaXRzLnN0YXJ0IDwgb3JpZy5sKSB7XG4gICAgICAgIHggPSAob3JpZy5sIC0gaExpbWl0cy5zdGFydCkgLyBzaW47XG4gICAgICAgIGxpbWl0cy5sID0gTWF0aC5taW4obGltaXRzLmwsIG9yaWcubCAtIHgpO1xuICAgIH0gZWxzZSBpZiAoaExpbWl0cy5lbmQgPiBvcmlnLnIpIHtcbiAgICAgICAgeCA9IChoTGltaXRzLmVuZCAtIG9yaWcucikgLyBzaW47XG4gICAgICAgIGxpbWl0cy5yID0gTWF0aC5tYXgobGltaXRzLnIsIG9yaWcuciArIHgpO1xuICAgIH1cbiAgICBpZiAodkxpbWl0cy5zdGFydCA8IG9yaWcudCkge1xuICAgICAgICB5ID0gKG9yaWcudCAtIHZMaW1pdHMuc3RhcnQpIC8gY29zO1xuICAgICAgICBsaW1pdHMudCA9IE1hdGgubWluKGxpbWl0cy50LCBvcmlnLnQgLSB5KTtcbiAgICB9IGVsc2UgaWYgKHZMaW1pdHMuZW5kID4gb3JpZy5iKSB7XG4gICAgICAgIHkgPSAodkxpbWl0cy5lbmQgLSBvcmlnLmIpIC8gY29zO1xuICAgICAgICBsaW1pdHMuYiA9IE1hdGgubWF4KGxpbWl0cy5iLCBvcmlnLmIgKyB5KTtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVQb2ludExhYmVsSXRlbShzY2FsZSwgaW5kZXgsIGl0ZW1PcHRzKSB7XG4gICAgY29uc3Qgb3V0ZXJEaXN0YW5jZSA9IHNjYWxlLmRyYXdpbmdBcmVhO1xuICAgIGNvbnN0IHsgZXh0cmEgLCBhZGRpdGlvbmFsQW5nbGUgLCBwYWRkaW5nICwgc2l6ZSAgfSA9IGl0ZW1PcHRzO1xuICAgIGNvbnN0IHBvaW50TGFiZWxQb3NpdGlvbiA9IHNjYWxlLmdldFBvaW50UG9zaXRpb24oaW5kZXgsIG91dGVyRGlzdGFuY2UgKyBleHRyYSArIHBhZGRpbmcsIGFkZGl0aW9uYWxBbmdsZSk7XG4gICAgY29uc3QgYW5nbGUgPSBNYXRoLnJvdW5kKHRvRGVncmVlcyhfbm9ybWFsaXplQW5nbGUocG9pbnRMYWJlbFBvc2l0aW9uLmFuZ2xlICsgSEFMRl9QSSkpKTtcbiAgICBjb25zdCB5ID0geUZvckFuZ2xlKHBvaW50TGFiZWxQb3NpdGlvbi55LCBzaXplLmgsIGFuZ2xlKTtcbiAgICBjb25zdCB0ZXh0QWxpZ24gPSBnZXRUZXh0QWxpZ25Gb3JBbmdsZShhbmdsZSk7XG4gICAgY29uc3QgbGVmdCA9IGxlZnRGb3JUZXh0QWxpZ24ocG9pbnRMYWJlbFBvc2l0aW9uLngsIHNpemUudywgdGV4dEFsaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICB4OiBwb2ludExhYmVsUG9zaXRpb24ueCxcbiAgICAgICAgeSxcbiAgICAgICAgdGV4dEFsaWduLFxuICAgICAgICBsZWZ0LFxuICAgICAgICB0b3A6IHksXG4gICAgICAgIHJpZ2h0OiBsZWZ0ICsgc2l6ZS53LFxuICAgICAgICBib3R0b206IHkgKyBzaXplLmhcbiAgICB9O1xufVxuZnVuY3Rpb24gaXNOb3RPdmVybGFwcGVkKGl0ZW0sIGFyZWEpIHtcbiAgICBpZiAoIWFyZWEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHsgbGVmdCAsIHRvcCAsIHJpZ2h0ICwgYm90dG9tICB9ID0gaXRlbTtcbiAgICBjb25zdCBhcGV4ZXNJbkFyZWEgPSBfaXNQb2ludEluQXJlYSh7XG4gICAgICAgIHg6IGxlZnQsXG4gICAgICAgIHk6IHRvcFxuICAgIH0sIGFyZWEpIHx8IF9pc1BvaW50SW5BcmVhKHtcbiAgICAgICAgeDogbGVmdCxcbiAgICAgICAgeTogYm90dG9tXG4gICAgfSwgYXJlYSkgfHwgX2lzUG9pbnRJbkFyZWEoe1xuICAgICAgICB4OiByaWdodCxcbiAgICAgICAgeTogdG9wXG4gICAgfSwgYXJlYSkgfHwgX2lzUG9pbnRJbkFyZWEoe1xuICAgICAgICB4OiByaWdodCxcbiAgICAgICAgeTogYm90dG9tXG4gICAgfSwgYXJlYSk7XG4gICAgcmV0dXJuICFhcGV4ZXNJbkFyZWE7XG59XG5mdW5jdGlvbiBidWlsZFBvaW50TGFiZWxJdGVtcyhzY2FsZSwgbGFiZWxTaXplcywgcGFkZGluZykge1xuICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgY29uc3QgdmFsdWVDb3VudCA9IHNjYWxlLl9wb2ludExhYmVscy5sZW5ndGg7XG4gICAgY29uc3Qgb3B0cyA9IHNjYWxlLm9wdGlvbnM7XG4gICAgY29uc3QgeyBjZW50ZXJQb2ludExhYmVscyAsIGRpc3BsYXkgIH0gPSBvcHRzLnBvaW50TGFiZWxzO1xuICAgIGNvbnN0IGl0ZW1PcHRzID0ge1xuICAgICAgICBleHRyYTogZ2V0VGlja0JhY2tkcm9wSGVpZ2h0KG9wdHMpIC8gMixcbiAgICAgICAgYWRkaXRpb25hbEFuZ2xlOiBjZW50ZXJQb2ludExhYmVscyA/IFBJIC8gdmFsdWVDb3VudCA6IDBcbiAgICB9O1xuICAgIGxldCBhcmVhO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCB2YWx1ZUNvdW50OyBpKyspe1xuICAgICAgICBpdGVtT3B0cy5wYWRkaW5nID0gcGFkZGluZ1tpXTtcbiAgICAgICAgaXRlbU9wdHMuc2l6ZSA9IGxhYmVsU2l6ZXNbaV07XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBjcmVhdGVQb2ludExhYmVsSXRlbShzY2FsZSwgaSwgaXRlbU9wdHMpO1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICBpZiAoZGlzcGxheSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICBpdGVtLnZpc2libGUgPSBpc05vdE92ZXJsYXBwZWQoaXRlbSwgYXJlYSk7XG4gICAgICAgICAgICBpZiAoaXRlbS52aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgYXJlYSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xufVxuZnVuY3Rpb24gZ2V0VGV4dEFsaWduRm9yQW5nbGUoYW5nbGUpIHtcbiAgICBpZiAoYW5nbGUgPT09IDAgfHwgYW5nbGUgPT09IDE4MCkge1xuICAgICAgICByZXR1cm4gJ2NlbnRlcic7XG4gICAgfSBlbHNlIGlmIChhbmdsZSA8IDE4MCkge1xuICAgICAgICByZXR1cm4gJ2xlZnQnO1xuICAgIH1cbiAgICByZXR1cm4gJ3JpZ2h0Jztcbn1cbmZ1bmN0aW9uIGxlZnRGb3JUZXh0QWxpZ24oeCwgdywgYWxpZ24pIHtcbiAgICBpZiAoYWxpZ24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgeCAtPSB3O1xuICAgIH0gZWxzZSBpZiAoYWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgIHggLT0gdyAvIDI7XG4gICAgfVxuICAgIHJldHVybiB4O1xufVxuZnVuY3Rpb24geUZvckFuZ2xlKHksIGgsIGFuZ2xlKSB7XG4gICAgaWYgKGFuZ2xlID09PSA5MCB8fCBhbmdsZSA9PT0gMjcwKSB7XG4gICAgICAgIHkgLT0gaCAvIDI7XG4gICAgfSBlbHNlIGlmIChhbmdsZSA+IDI3MCB8fCBhbmdsZSA8IDkwKSB7XG4gICAgICAgIHkgLT0gaDtcbiAgICB9XG4gICAgcmV0dXJuIHk7XG59XG5mdW5jdGlvbiBkcmF3UG9pbnRMYWJlbEJveChjdHgsIG9wdHMsIGl0ZW0pIHtcbiAgICBjb25zdCB7IGxlZnQgLCB0b3AgLCByaWdodCAsIGJvdHRvbSAgfSA9IGl0ZW07XG4gICAgY29uc3QgeyBiYWNrZHJvcENvbG9yICB9ID0gb3B0cztcbiAgICBpZiAoIWlzTnVsbE9yVW5kZWYoYmFja2Ryb3BDb2xvcikpIHtcbiAgICAgICAgY29uc3QgYm9yZGVyUmFkaXVzID0gdG9UUkJMQ29ybmVycyhvcHRzLmJvcmRlclJhZGl1cyk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSB0b1BhZGRpbmcob3B0cy5iYWNrZHJvcFBhZGRpbmcpO1xuICAgICAgICBjdHguZmlsbFN0eWxlID0gYmFja2Ryb3BDb2xvcjtcbiAgICAgICAgY29uc3QgYmFja2Ryb3BMZWZ0ID0gbGVmdCAtIHBhZGRpbmcubGVmdDtcbiAgICAgICAgY29uc3QgYmFja2Ryb3BUb3AgPSB0b3AgLSBwYWRkaW5nLnRvcDtcbiAgICAgICAgY29uc3QgYmFja2Ryb3BXaWR0aCA9IHJpZ2h0IC0gbGVmdCArIHBhZGRpbmcud2lkdGg7XG4gICAgICAgIGNvbnN0IGJhY2tkcm9wSGVpZ2h0ID0gYm90dG9tIC0gdG9wICsgcGFkZGluZy5oZWlnaHQ7XG4gICAgICAgIGlmIChPYmplY3QudmFsdWVzKGJvcmRlclJhZGl1cykuc29tZSgodik9PnYgIT09IDApKSB7XG4gICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBhZGRSb3VuZGVkUmVjdFBhdGgoY3R4LCB7XG4gICAgICAgICAgICAgICAgeDogYmFja2Ryb3BMZWZ0LFxuICAgICAgICAgICAgICAgIHk6IGJhY2tkcm9wVG9wLFxuICAgICAgICAgICAgICAgIHc6IGJhY2tkcm9wV2lkdGgsXG4gICAgICAgICAgICAgICAgaDogYmFja2Ryb3BIZWlnaHQsXG4gICAgICAgICAgICAgICAgcmFkaXVzOiBib3JkZXJSYWRpdXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN0eC5maWxsUmVjdChiYWNrZHJvcExlZnQsIGJhY2tkcm9wVG9wLCBiYWNrZHJvcFdpZHRoLCBiYWNrZHJvcEhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBkcmF3UG9pbnRMYWJlbHMoc2NhbGUsIGxhYmVsQ291bnQpIHtcbiAgICBjb25zdCB7IGN0eCAsIG9wdGlvbnM6IHsgcG9pbnRMYWJlbHMgIH0gIH0gPSBzY2FsZTtcbiAgICBmb3IobGV0IGkgPSBsYWJlbENvdW50IC0gMTsgaSA+PSAwOyBpLS0pe1xuICAgICAgICBjb25zdCBpdGVtID0gc2NhbGUuX3BvaW50TGFiZWxJdGVtc1tpXTtcbiAgICAgICAgaWYgKCFpdGVtLnZpc2libGUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdHNBdEluZGV4ID0gcG9pbnRMYWJlbHMuc2V0Q29udGV4dChzY2FsZS5nZXRQb2ludExhYmVsQ29udGV4dChpKSk7XG4gICAgICAgIGRyYXdQb2ludExhYmVsQm94KGN0eCwgb3B0c0F0SW5kZXgsIGl0ZW0pO1xuICAgICAgICBjb25zdCBwbEZvbnQgPSB0b0ZvbnQob3B0c0F0SW5kZXguZm9udCk7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgLCB0ZXh0QWxpZ24gIH0gPSBpdGVtO1xuICAgICAgICByZW5kZXJUZXh0KGN0eCwgc2NhbGUuX3BvaW50TGFiZWxzW2ldLCB4LCB5ICsgcGxGb250LmxpbmVIZWlnaHQgLyAyLCBwbEZvbnQsIHtcbiAgICAgICAgICAgIGNvbG9yOiBvcHRzQXRJbmRleC5jb2xvcixcbiAgICAgICAgICAgIHRleHRBbGlnbjogdGV4dEFsaWduLFxuICAgICAgICAgICAgdGV4dEJhc2VsaW5lOiAnbWlkZGxlJ1xuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBwYXRoUmFkaXVzTGluZShzY2FsZSwgcmFkaXVzLCBjaXJjdWxhciwgbGFiZWxDb3VudCkge1xuICAgIGNvbnN0IHsgY3R4ICB9ID0gc2NhbGU7XG4gICAgaWYgKGNpcmN1bGFyKSB7XG4gICAgICAgIGN0eC5hcmMoc2NhbGUueENlbnRlciwgc2NhbGUueUNlbnRlciwgcmFkaXVzLCAwLCBUQVUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwb2ludFBvc2l0aW9uID0gc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbigwLCByYWRpdXMpO1xuICAgICAgICBjdHgubW92ZVRvKHBvaW50UG9zaXRpb24ueCwgcG9pbnRQb3NpdGlvbi55KTtcbiAgICAgICAgZm9yKGxldCBpID0gMTsgaSA8IGxhYmVsQ291bnQ7IGkrKyl7XG4gICAgICAgICAgICBwb2ludFBvc2l0aW9uID0gc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbihpLCByYWRpdXMpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyhwb2ludFBvc2l0aW9uLngsIHBvaW50UG9zaXRpb24ueSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBkcmF3UmFkaXVzTGluZShzY2FsZSwgZ3JpZExpbmVPcHRzLCByYWRpdXMsIGxhYmVsQ291bnQsIGJvcmRlck9wdHMpIHtcbiAgICBjb25zdCBjdHggPSBzY2FsZS5jdHg7XG4gICAgY29uc3QgY2lyY3VsYXIgPSBncmlkTGluZU9wdHMuY2lyY3VsYXI7XG4gICAgY29uc3QgeyBjb2xvciAsIGxpbmVXaWR0aCAgfSA9IGdyaWRMaW5lT3B0cztcbiAgICBpZiAoIWNpcmN1bGFyICYmICFsYWJlbENvdW50IHx8ICFjb2xvciB8fCAhbGluZVdpZHRoIHx8IHJhZGl1cyA8IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuICAgIGN0eC5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG4gICAgY3R4LnNldExpbmVEYXNoKGJvcmRlck9wdHMuZGFzaCB8fCBbXSk7XG4gICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gYm9yZGVyT3B0cy5kYXNoT2Zmc2V0O1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBwYXRoUmFkaXVzTGluZShzY2FsZSwgcmFkaXVzLCBjaXJjdWxhciwgbGFiZWxDb3VudCk7XG4gICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgIGN0eC5zdHJva2UoKTtcbiAgICBjdHgucmVzdG9yZSgpO1xufVxuZnVuY3Rpb24gY3JlYXRlUG9pbnRMYWJlbENvbnRleHQocGFyZW50LCBpbmRleCwgbGFiZWwpIHtcbiAgICByZXR1cm4gY3JlYXRlQ29udGV4dChwYXJlbnQsIHtcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIGluZGV4LFxuICAgICAgICB0eXBlOiAncG9pbnRMYWJlbCdcbiAgICB9KTtcbn1cbmNsYXNzIFJhZGlhbExpbmVhclNjYWxlIGV4dGVuZHMgTGluZWFyU2NhbGVCYXNlIHtcbiAgICBzdGF0aWMgaWQgPSAncmFkaWFsTGluZWFyJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgIGFuaW1hdGU6IHRydWUsXG4gICAgICAgIHBvc2l0aW9uOiAnY2hhcnRBcmVhJyxcbiAgICAgICAgYW5nbGVMaW5lczoge1xuICAgICAgICAgICAgZGlzcGxheTogdHJ1ZSxcbiAgICAgICAgICAgIGxpbmVXaWR0aDogMSxcbiAgICAgICAgICAgIGJvcmRlckRhc2g6IFtdLFxuICAgICAgICAgICAgYm9yZGVyRGFzaE9mZnNldDogMC4wXG4gICAgICAgIH0sXG4gICAgICAgIGdyaWQ6IHtcbiAgICAgICAgICAgIGNpcmN1bGFyOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBzdGFydEFuZ2xlOiAwLFxuICAgICAgICB0aWNrczoge1xuICAgICAgICAgICAgc2hvd0xhYmVsQmFja2Ryb3A6IHRydWUsXG4gICAgICAgICAgICBjYWxsYmFjazogVGlja3MuZm9ybWF0dGVycy5udW1lcmljXG4gICAgICAgIH0sXG4gICAgICAgIHBvaW50TGFiZWxzOiB7XG4gICAgICAgICAgICBiYWNrZHJvcENvbG9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBiYWNrZHJvcFBhZGRpbmc6IDIsXG4gICAgICAgICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgICAgICAgZm9udDoge1xuICAgICAgICAgICAgICAgIHNpemU6IDEwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2sgKGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhYmVsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhZGRpbmc6IDUsXG4gICAgICAgICAgICBjZW50ZXJQb2ludExhYmVsczogZmFsc2VcbiAgICAgICAgfVxuICAgIH07XG4gICAgc3RhdGljIGRlZmF1bHRSb3V0ZXMgPSB7XG4gICAgICAgICdhbmdsZUxpbmVzLmNvbG9yJzogJ2JvcmRlckNvbG9yJyxcbiAgICAgICAgJ3BvaW50TGFiZWxzLmNvbG9yJzogJ2NvbG9yJyxcbiAgICAgICAgJ3RpY2tzLmNvbG9yJzogJ2NvbG9yJ1xuICAgIH07XG4gICAgc3RhdGljIGRlc2NyaXB0b3JzID0ge1xuICAgICAgICBhbmdsZUxpbmVzOiB7XG4gICAgICAgICAgICBfZmFsbGJhY2s6ICdncmlkJ1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdHJ1Y3RvcihjZmcpe1xuICAgICAgICBzdXBlcihjZmcpO1xuICAgICAgICAgdGhpcy54Q2VudGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgdGhpcy55Q2VudGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgdGhpcy5kcmF3aW5nQXJlYSA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMuX3BvaW50TGFiZWxzID0gW107XG4gICAgICAgIHRoaXMuX3BvaW50TGFiZWxJdGVtcyA9IFtdO1xuICAgIH1cbiAgICBzZXREaW1lbnNpb25zKCkge1xuICAgICAgICBjb25zdCBwYWRkaW5nID0gdGhpcy5fcGFkZGluZyA9IHRvUGFkZGluZyhnZXRUaWNrQmFja2Ryb3BIZWlnaHQodGhpcy5vcHRpb25zKSAvIDIpO1xuICAgICAgICBjb25zdCB3ID0gdGhpcy53aWR0aCA9IHRoaXMubWF4V2lkdGggLSBwYWRkaW5nLndpZHRoO1xuICAgICAgICBjb25zdCBoID0gdGhpcy5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCAtIHBhZGRpbmcuaGVpZ2h0O1xuICAgICAgICB0aGlzLnhDZW50ZXIgPSBNYXRoLmZsb29yKHRoaXMubGVmdCArIHcgLyAyICsgcGFkZGluZy5sZWZ0KTtcbiAgICAgICAgdGhpcy55Q2VudGVyID0gTWF0aC5mbG9vcih0aGlzLnRvcCArIGggLyAyICsgcGFkZGluZy50b3ApO1xuICAgICAgICB0aGlzLmRyYXdpbmdBcmVhID0gTWF0aC5mbG9vcihNYXRoLm1pbih3LCBoKSAvIDIpO1xuICAgIH1cbiAgICBkZXRlcm1pbmVEYXRhTGltaXRzKCkge1xuICAgICAgICBjb25zdCB7IG1pbiAsIG1heCAgfSA9IHRoaXMuZ2V0TWluTWF4KGZhbHNlKTtcbiAgICAgICAgdGhpcy5taW4gPSBpc051bWJlckZpbml0ZShtaW4pICYmICFpc05hTihtaW4pID8gbWluIDogMDtcbiAgICAgICAgdGhpcy5tYXggPSBpc051bWJlckZpbml0ZShtYXgpICYmICFpc05hTihtYXgpID8gbWF4IDogMDtcbiAgICAgICAgdGhpcy5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCk7XG4gICAgfVxuIGNvbXB1dGVUaWNrTGltaXQoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5kcmF3aW5nQXJlYSAvIGdldFRpY2tCYWNrZHJvcEhlaWdodCh0aGlzLm9wdGlvbnMpKTtcbiAgICB9XG4gICAgZ2VuZXJhdGVUaWNrTGFiZWxzKHRpY2tzKSB7XG4gICAgICAgIExpbmVhclNjYWxlQmFzZS5wcm90b3R5cGUuZ2VuZXJhdGVUaWNrTGFiZWxzLmNhbGwodGhpcywgdGlja3MpO1xuICAgICAgICB0aGlzLl9wb2ludExhYmVscyA9IHRoaXMuZ2V0TGFiZWxzKCkubWFwKCh2YWx1ZSwgaW5kZXgpPT57XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IGNhbGxiYWNrKHRoaXMub3B0aW9ucy5wb2ludExhYmVscy5jYWxsYmFjaywgW1xuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICBdLCB0aGlzKTtcbiAgICAgICAgICAgIHJldHVybiBsYWJlbCB8fCBsYWJlbCA9PT0gMCA/IGxhYmVsIDogJyc7XG4gICAgICAgIH0pLmZpbHRlcigodiwgaSk9PnRoaXMuY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkoaSkpO1xuICAgIH1cbiAgICBmaXQoKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmIChvcHRzLmRpc3BsYXkgJiYgb3B0cy5wb2ludExhYmVscy5kaXNwbGF5KSB7XG4gICAgICAgICAgICBmaXRXaXRoUG9pbnRMYWJlbHModGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldENlbnRlclBvaW50KDAsIDAsIDAsIDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldENlbnRlclBvaW50KGxlZnRNb3ZlbWVudCwgcmlnaHRNb3ZlbWVudCwgdG9wTW92ZW1lbnQsIGJvdHRvbU1vdmVtZW50KSB7XG4gICAgICAgIHRoaXMueENlbnRlciArPSBNYXRoLmZsb29yKChsZWZ0TW92ZW1lbnQgLSByaWdodE1vdmVtZW50KSAvIDIpO1xuICAgICAgICB0aGlzLnlDZW50ZXIgKz0gTWF0aC5mbG9vcigodG9wTW92ZW1lbnQgLSBib3R0b21Nb3ZlbWVudCkgLyAyKTtcbiAgICAgICAgdGhpcy5kcmF3aW5nQXJlYSAtPSBNYXRoLm1pbih0aGlzLmRyYXdpbmdBcmVhIC8gMiwgTWF0aC5tYXgobGVmdE1vdmVtZW50LCByaWdodE1vdmVtZW50LCB0b3BNb3ZlbWVudCwgYm90dG9tTW92ZW1lbnQpKTtcbiAgICB9XG4gICAgZ2V0SW5kZXhBbmdsZShpbmRleCkge1xuICAgICAgICBjb25zdCBhbmdsZU11bHRpcGxpZXIgPSBUQVUgLyAodGhpcy5fcG9pbnRMYWJlbHMubGVuZ3RoIHx8IDEpO1xuICAgICAgICBjb25zdCBzdGFydEFuZ2xlID0gdGhpcy5vcHRpb25zLnN0YXJ0QW5nbGUgfHwgMDtcbiAgICAgICAgcmV0dXJuIF9ub3JtYWxpemVBbmdsZShpbmRleCAqIGFuZ2xlTXVsdGlwbGllciArIHRvUmFkaWFucyhzdGFydEFuZ2xlKSk7XG4gICAgfVxuICAgIGdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGlmIChpc051bGxPclVuZGVmKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY2FsaW5nRmFjdG9yID0gdGhpcy5kcmF3aW5nQXJlYSAvICh0aGlzLm1heCAtIHRoaXMubWluKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZXZlcnNlKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMubWF4IC0gdmFsdWUpICogc2NhbGluZ0ZhY3RvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHZhbHVlIC0gdGhpcy5taW4pICogc2NhbGluZ0ZhY3RvcjtcbiAgICB9XG4gICAgZ2V0VmFsdWVGb3JEaXN0YW5jZUZyb21DZW50ZXIoZGlzdGFuY2UpIHtcbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWYoZGlzdGFuY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjYWxlZERpc3RhbmNlID0gZGlzdGFuY2UgLyAodGhpcy5kcmF3aW5nQXJlYSAvICh0aGlzLm1heCAtIHRoaXMubWluKSk7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmV2ZXJzZSA/IHRoaXMubWF4IC0gc2NhbGVkRGlzdGFuY2UgOiB0aGlzLm1pbiArIHNjYWxlZERpc3RhbmNlO1xuICAgIH1cbiAgICBnZXRQb2ludExhYmVsQ29udGV4dChpbmRleCkge1xuICAgICAgICBjb25zdCBwb2ludExhYmVscyA9IHRoaXMuX3BvaW50TGFiZWxzIHx8IFtdO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHBvaW50TGFiZWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcG9pbnRMYWJlbCA9IHBvaW50TGFiZWxzW2luZGV4XTtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVQb2ludExhYmVsQ29udGV4dCh0aGlzLmdldENvbnRleHQoKSwgaW5kZXgsIHBvaW50TGFiZWwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldFBvaW50UG9zaXRpb24oaW5kZXgsIGRpc3RhbmNlRnJvbUNlbnRlciwgYWRkaXRpb25hbEFuZ2xlID0gMCkge1xuICAgICAgICBjb25zdCBhbmdsZSA9IHRoaXMuZ2V0SW5kZXhBbmdsZShpbmRleCkgLSBIQUxGX1BJICsgYWRkaXRpb25hbEFuZ2xlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogTWF0aC5jb3MoYW5nbGUpICogZGlzdGFuY2VGcm9tQ2VudGVyICsgdGhpcy54Q2VudGVyLFxuICAgICAgICAgICAgeTogTWF0aC5zaW4oYW5nbGUpICogZGlzdGFuY2VGcm9tQ2VudGVyICsgdGhpcy55Q2VudGVyLFxuICAgICAgICAgICAgYW5nbGVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKGluZGV4LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQb2ludFBvc2l0aW9uKGluZGV4LCB0aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHZhbHVlKSk7XG4gICAgfVxuICAgIGdldEJhc2VQb3NpdGlvbihpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUoaW5kZXggfHwgMCwgdGhpcy5nZXRCYXNlVmFsdWUoKSk7XG4gICAgfVxuICAgIGdldFBvaW50TGFiZWxQb3NpdGlvbihpbmRleCkge1xuICAgICAgICBjb25zdCB7IGxlZnQgLCB0b3AgLCByaWdodCAsIGJvdHRvbSAgfSA9IHRoaXMuX3BvaW50TGFiZWxJdGVtc1tpbmRleF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICBib3R0b21cbiAgICAgICAgfTtcbiAgICB9XG4gZHJhd0JhY2tncm91bmQoKSB7XG4gICAgICAgIGNvbnN0IHsgYmFja2dyb3VuZENvbG9yICwgZ3JpZDogeyBjaXJjdWxhciAgfSAgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgaWYgKGJhY2tncm91bmRDb2xvcikge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgcGF0aFJhZGl1c0xpbmUodGhpcywgdGhpcy5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSh0aGlzLl9lbmRWYWx1ZSksIGNpcmN1bGFyLCB0aGlzLl9wb2ludExhYmVscy5sZW5ndGgpO1xuICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgICAgIGN0eC5maWxsKCk7XG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgfVxuIGRyYXdHcmlkKCkge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgeyBhbmdsZUxpbmVzICwgZ3JpZCAsIGJvcmRlciAgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IGxhYmVsQ291bnQgPSB0aGlzLl9wb2ludExhYmVscy5sZW5ndGg7XG4gICAgICAgIGxldCBpLCBvZmZzZXQsIHBvc2l0aW9uO1xuICAgICAgICBpZiAob3B0cy5wb2ludExhYmVscy5kaXNwbGF5KSB7XG4gICAgICAgICAgICBkcmF3UG9pbnRMYWJlbHModGhpcywgbGFiZWxDb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdyaWQuZGlzcGxheSkge1xuICAgICAgICAgICAgdGhpcy50aWNrcy5mb3JFYWNoKCh0aWNrLCBpbmRleCk9PntcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IDAgfHwgaW5kZXggPT09IDAgJiYgdGhpcy5taW4gPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHRoaXMuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUodGljay52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRzQXRJbmRleCA9IGdyaWQuc2V0Q29udGV4dChjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0c0F0SW5kZXhCb3JkZXIgPSBib3JkZXIuc2V0Q29udGV4dChjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgZHJhd1JhZGl1c0xpbmUodGhpcywgb3B0c0F0SW5kZXgsIG9mZnNldCwgbGFiZWxDb3VudCwgb3B0c0F0SW5kZXhCb3JkZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbmdsZUxpbmVzLmRpc3BsYXkpIHtcbiAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICBmb3IoaSA9IGxhYmVsQ291bnQgLSAxOyBpID49IDA7IGktLSl7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0c0F0SW5kZXggPSBhbmdsZUxpbmVzLnNldENvbnRleHQodGhpcy5nZXRQb2ludExhYmVsQ29udGV4dChpKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb2xvciAsIGxpbmVXaWR0aCAgfSA9IG9wdHNBdEluZGV4O1xuICAgICAgICAgICAgICAgIGlmICghbGluZVdpZHRoIHx8ICFjb2xvcikge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcbiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjtcbiAgICAgICAgICAgICAgICBjdHguc2V0TGluZURhc2gob3B0c0F0SW5kZXguYm9yZGVyRGFzaCk7XG4gICAgICAgICAgICAgICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gb3B0c0F0SW5kZXguYm9yZGVyRGFzaE9mZnNldDtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKG9wdHMucmV2ZXJzZSA/IHRoaXMubWluIDogdGhpcy5tYXgpO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5nZXRQb2ludFBvc2l0aW9uKGksIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8odGhpcy54Q2VudGVyLCB0aGlzLnlDZW50ZXIpO1xuICAgICAgICAgICAgICAgIGN0eC5saW5lVG8ocG9zaXRpb24ueCwgcG9zaXRpb24ueSk7XG4gICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiBkcmF3Qm9yZGVyKCkge31cbiBkcmF3TGFiZWxzKCkge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgdGlja09wdHMgPSBvcHRzLnRpY2tzO1xuICAgICAgICBpZiAoIXRpY2tPcHRzLmRpc3BsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydEFuZ2xlID0gdGhpcy5nZXRJbmRleEFuZ2xlKDApO1xuICAgICAgICBsZXQgb2Zmc2V0LCB3aWR0aDtcbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSh0aGlzLnhDZW50ZXIsIHRoaXMueUNlbnRlcik7XG4gICAgICAgIGN0eC5yb3RhdGUoc3RhcnRBbmdsZSk7XG4gICAgICAgIGN0eC50ZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuICAgICAgICB0aGlzLnRpY2tzLmZvckVhY2goKHRpY2ssIGluZGV4KT0+e1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwICYmIHRoaXMubWluID49IDAgJiYgIW9wdHMucmV2ZXJzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9wdHNBdEluZGV4ID0gdGlja09wdHMuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoaW5kZXgpKTtcbiAgICAgICAgICAgIGNvbnN0IHRpY2tGb250ID0gdG9Gb250KG9wdHNBdEluZGV4LmZvbnQpO1xuICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSh0aGlzLnRpY2tzW2luZGV4XS52YWx1ZSk7XG4gICAgICAgICAgICBpZiAob3B0c0F0SW5kZXguc2hvd0xhYmVsQmFja2Ryb3ApIHtcbiAgICAgICAgICAgICAgICBjdHguZm9udCA9IHRpY2tGb250LnN0cmluZztcbiAgICAgICAgICAgICAgICB3aWR0aCA9IGN0eC5tZWFzdXJlVGV4dCh0aWNrLmxhYmVsKS53aWR0aDtcbiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gb3B0c0F0SW5kZXguYmFja2Ryb3BDb2xvcjtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWRkaW5nID0gdG9QYWRkaW5nKG9wdHNBdEluZGV4LmJhY2tkcm9wUGFkZGluZyk7XG4gICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KC13aWR0aCAvIDIgLSBwYWRkaW5nLmxlZnQsIC1vZmZzZXQgLSB0aWNrRm9udC5zaXplIC8gMiAtIHBhZGRpbmcudG9wLCB3aWR0aCArIHBhZGRpbmcud2lkdGgsIHRpY2tGb250LnNpemUgKyBwYWRkaW5nLmhlaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW5kZXJUZXh0KGN0eCwgdGljay5sYWJlbCwgMCwgLW9mZnNldCwgdGlja0ZvbnQsIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogb3B0c0F0SW5kZXguY29sb3IsXG4gICAgICAgICAgICAgICAgc3Ryb2tlQ29sb3I6IG9wdHNBdEluZGV4LnRleHRTdHJva2VDb2xvcixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogb3B0c0F0SW5kZXgudGV4dFN0cm9rZVdpZHRoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfVxuIGRyYXdUaXRsZSgpIHt9XG59XG5cbmNvbnN0IElOVEVSVkFMUyA9IHtcbiAgICBtaWxsaXNlY29uZDoge1xuICAgICAgICBjb21tb246IHRydWUsXG4gICAgICAgIHNpemU6IDEsXG4gICAgICAgIHN0ZXBzOiAxMDAwXG4gICAgfSxcbiAgICBzZWNvbmQ6IHtcbiAgICAgICAgY29tbW9uOiB0cnVlLFxuICAgICAgICBzaXplOiAxMDAwLFxuICAgICAgICBzdGVwczogNjBcbiAgICB9LFxuICAgIG1pbnV0ZToge1xuICAgICAgICBjb21tb246IHRydWUsXG4gICAgICAgIHNpemU6IDYwMDAwLFxuICAgICAgICBzdGVwczogNjBcbiAgICB9LFxuICAgIGhvdXI6IHtcbiAgICAgICAgY29tbW9uOiB0cnVlLFxuICAgICAgICBzaXplOiAzNjAwMDAwLFxuICAgICAgICBzdGVwczogMjRcbiAgICB9LFxuICAgIGRheToge1xuICAgICAgICBjb21tb246IHRydWUsXG4gICAgICAgIHNpemU6IDg2NDAwMDAwLFxuICAgICAgICBzdGVwczogMzBcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgY29tbW9uOiBmYWxzZSxcbiAgICAgICAgc2l6ZTogNjA0ODAwMDAwLFxuICAgICAgICBzdGVwczogNFxuICAgIH0sXG4gICAgbW9udGg6IHtcbiAgICAgICAgY29tbW9uOiB0cnVlLFxuICAgICAgICBzaXplOiAyLjYyOGU5LFxuICAgICAgICBzdGVwczogMTJcbiAgICB9LFxuICAgIHF1YXJ0ZXI6IHtcbiAgICAgICAgY29tbW9uOiBmYWxzZSxcbiAgICAgICAgc2l6ZTogNy44ODRlOSxcbiAgICAgICAgc3RlcHM6IDRcbiAgICB9LFxuICAgIHllYXI6IHtcbiAgICAgICAgY29tbW9uOiB0cnVlLFxuICAgICAgICBzaXplOiAzLjE1NGUxMFxuICAgIH1cbn07XG4gY29uc3QgVU5JVFMgPSAgLyogI19fUFVSRV9fICovIE9iamVjdC5rZXlzKElOVEVSVkFMUyk7XG4gZnVuY3Rpb24gc29ydGVyKGEsIGIpIHtcbiAgICByZXR1cm4gYSAtIGI7XG59XG4gZnVuY3Rpb24gcGFyc2Uoc2NhbGUsIGlucHV0KSB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWYoaW5wdXQpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBhZGFwdGVyID0gc2NhbGUuX2FkYXB0ZXI7XG4gICAgY29uc3QgeyBwYXJzZXIgLCByb3VuZCAsIGlzb1dlZWtkYXkgIH0gPSBzY2FsZS5fcGFyc2VPcHRzO1xuICAgIGxldCB2YWx1ZSA9IGlucHV0O1xuICAgIGlmICh0eXBlb2YgcGFyc2VyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VyKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKCFpc051bWJlckZpbml0ZSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB0eXBlb2YgcGFyc2VyID09PSAnc3RyaW5nJyA/IGFkYXB0ZXIucGFyc2UodmFsdWUsICBwYXJzZXIpIDogYWRhcHRlci5wYXJzZSh2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHJvdW5kKSB7XG4gICAgICAgIHZhbHVlID0gcm91bmQgPT09ICd3ZWVrJyAmJiAoaXNOdW1iZXIoaXNvV2Vla2RheSkgfHwgaXNvV2Vla2RheSA9PT0gdHJ1ZSkgPyBhZGFwdGVyLnN0YXJ0T2YodmFsdWUsICdpc29XZWVrJywgaXNvV2Vla2RheSkgOiBhZGFwdGVyLnN0YXJ0T2YodmFsdWUsIHJvdW5kKTtcbiAgICB9XG4gICAgcmV0dXJuICt2YWx1ZTtcbn1cbiBmdW5jdGlvbiBkZXRlcm1pbmVVbml0Rm9yQXV0b1RpY2tzKG1pblVuaXQsIG1pbiwgbWF4LCBjYXBhY2l0eSkge1xuICAgIGNvbnN0IGlsZW4gPSBVTklUUy5sZW5ndGg7XG4gICAgZm9yKGxldCBpID0gVU5JVFMuaW5kZXhPZihtaW5Vbml0KTsgaSA8IGlsZW4gLSAxOyArK2kpe1xuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IElOVEVSVkFMU1tVTklUU1tpXV07XG4gICAgICAgIGNvbnN0IGZhY3RvciA9IGludGVydmFsLnN0ZXBzID8gaW50ZXJ2YWwuc3RlcHMgOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICAgICAgaWYgKGludGVydmFsLmNvbW1vbiAmJiBNYXRoLmNlaWwoKG1heCAtIG1pbikgLyAoZmFjdG9yICogaW50ZXJ2YWwuc2l6ZSkpIDw9IGNhcGFjaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gVU5JVFNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFVOSVRTW2lsZW4gLSAxXTtcbn1cbiBmdW5jdGlvbiBkZXRlcm1pbmVVbml0Rm9yRm9ybWF0dGluZyhzY2FsZSwgbnVtVGlja3MsIG1pblVuaXQsIG1pbiwgbWF4KSB7XG4gICAgZm9yKGxldCBpID0gVU5JVFMubGVuZ3RoIC0gMTsgaSA+PSBVTklUUy5pbmRleE9mKG1pblVuaXQpOyBpLS0pe1xuICAgICAgICBjb25zdCB1bml0ID0gVU5JVFNbaV07XG4gICAgICAgIGlmIChJTlRFUlZBTFNbdW5pdF0uY29tbW9uICYmIHNjYWxlLl9hZGFwdGVyLmRpZmYobWF4LCBtaW4sIHVuaXQpID49IG51bVRpY2tzIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuaXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFVOSVRTW21pblVuaXQgPyBVTklUUy5pbmRleE9mKG1pblVuaXQpIDogMF07XG59XG4gZnVuY3Rpb24gZGV0ZXJtaW5lTWFqb3JVbml0KHVuaXQpIHtcbiAgICBmb3IobGV0IGkgPSBVTklUUy5pbmRleE9mKHVuaXQpICsgMSwgaWxlbiA9IFVOSVRTLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIGlmIChJTlRFUlZBTFNbVU5JVFNbaV1dLmNvbW1vbikge1xuICAgICAgICAgICAgcmV0dXJuIFVOSVRTW2ldO1xuICAgICAgICB9XG4gICAgfVxufVxuIGZ1bmN0aW9uIGFkZFRpY2sodGlja3MsIHRpbWUsIHRpbWVzdGFtcHMpIHtcbiAgICBpZiAoIXRpbWVzdGFtcHMpIHtcbiAgICAgICAgdGlja3NbdGltZV0gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGltZXN0YW1wcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgeyBsbyAsIGhpICB9ID0gX2xvb2t1cCh0aW1lc3RhbXBzLCB0aW1lKTtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gdGltZXN0YW1wc1tsb10gPj0gdGltZSA/IHRpbWVzdGFtcHNbbG9dIDogdGltZXN0YW1wc1toaV07XG4gICAgICAgIHRpY2tzW3RpbWVzdGFtcF0gPSB0cnVlO1xuICAgIH1cbn1cbiBmdW5jdGlvbiBzZXRNYWpvclRpY2tzKHNjYWxlLCB0aWNrcywgbWFwLCBtYWpvclVuaXQpIHtcbiAgICBjb25zdCBhZGFwdGVyID0gc2NhbGUuX2FkYXB0ZXI7XG4gICAgY29uc3QgZmlyc3QgPSArYWRhcHRlci5zdGFydE9mKHRpY2tzWzBdLnZhbHVlLCBtYWpvclVuaXQpO1xuICAgIGNvbnN0IGxhc3QgPSB0aWNrc1t0aWNrcy5sZW5ndGggLSAxXS52YWx1ZTtcbiAgICBsZXQgbWFqb3IsIGluZGV4O1xuICAgIGZvcihtYWpvciA9IGZpcnN0OyBtYWpvciA8PSBsYXN0OyBtYWpvciA9ICthZGFwdGVyLmFkZChtYWpvciwgMSwgbWFqb3JVbml0KSl7XG4gICAgICAgIGluZGV4ID0gbWFwW21ham9yXTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRpY2tzW2luZGV4XS5tYWpvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRpY2tzO1xufVxuIGZ1bmN0aW9uIHRpY2tzRnJvbVRpbWVzdGFtcHMoc2NhbGUsIHZhbHVlcywgbWFqb3JVbml0KSB7XG4gICAgY29uc3QgdGlja3MgPSBbXTtcbiAgICAgY29uc3QgbWFwID0ge307XG4gICAgY29uc3QgaWxlbiA9IHZhbHVlcy5sZW5ndGg7XG4gICAgbGV0IGksIHZhbHVlO1xuICAgIGZvcihpID0gMDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIHZhbHVlID0gdmFsdWVzW2ldO1xuICAgICAgICBtYXBbdmFsdWVdID0gaTtcbiAgICAgICAgdGlja3MucHVzaCh7XG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIG1ham9yOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGlsZW4gPT09IDAgfHwgIW1ham9yVW5pdCA/IHRpY2tzIDogc2V0TWFqb3JUaWNrcyhzY2FsZSwgdGlja3MsIG1hcCwgbWFqb3JVbml0KTtcbn1cbmNsYXNzIFRpbWVTY2FsZSBleHRlbmRzIFNjYWxlIHtcbiAgICBzdGF0aWMgaWQgPSAndGltZSc7XG4gc3RhdGljIGRlZmF1bHRzID0ge1xuIGJvdW5kczogJ2RhdGEnLFxuICAgICAgICBhZGFwdGVyczoge30sXG4gICAgICAgIHRpbWU6IHtcbiAgICAgICAgICAgIHBhcnNlcjogZmFsc2UsXG4gICAgICAgICAgICB1bml0OiBmYWxzZSxcbiAgICAgICAgICAgIHJvdW5kOiBmYWxzZSxcbiAgICAgICAgICAgIGlzb1dlZWtkYXk6IGZhbHNlLFxuICAgICAgICAgICAgbWluVW5pdDogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgICAgIGRpc3BsYXlGb3JtYXRzOiB7fVxuICAgICAgICB9LFxuICAgICAgICB0aWNrczoge1xuIHNvdXJjZTogJ2F1dG8nLFxuICAgICAgICAgICAgY2FsbGJhY2s6IGZhbHNlLFxuICAgICAgICAgICAgbWFqb3I6IHtcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiBjb25zdHJ1Y3Rvcihwcm9wcyl7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgIHRoaXMuX2NhY2hlID0ge1xuICAgICAgICAgICAgZGF0YTogW10sXG4gICAgICAgICAgICBsYWJlbHM6IFtdLFxuICAgICAgICAgICAgYWxsOiBbXVxuICAgICAgICB9O1xuICAgICAgICAgdGhpcy5fdW5pdCA9ICdkYXknO1xuICAgICAgICAgdGhpcy5fbWFqb3JVbml0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9vZmZzZXRzID0ge307XG4gICAgICAgIHRoaXMuX25vcm1hbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFyc2VPcHRzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpbml0KHNjYWxlT3B0cywgb3B0cyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBzY2FsZU9wdHMudGltZSB8fCAoc2NhbGVPcHRzLnRpbWUgPSB7fSk7XG4gICAgICAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5fYWRhcHRlciA9IG5ldyBhZGFwdGVycy5fZGF0ZShzY2FsZU9wdHMuYWRhcHRlcnMuZGF0ZSk7XG4gICAgICAgIGFkYXB0ZXIuaW5pdChvcHRzKTtcbiAgICAgICAgbWVyZ2VJZih0aW1lLmRpc3BsYXlGb3JtYXRzLCBhZGFwdGVyLmZvcm1hdHMoKSk7XG4gICAgICAgIHRoaXMuX3BhcnNlT3B0cyA9IHtcbiAgICAgICAgICAgIHBhcnNlcjogdGltZS5wYXJzZXIsXG4gICAgICAgICAgICByb3VuZDogdGltZS5yb3VuZCxcbiAgICAgICAgICAgIGlzb1dlZWtkYXk6IHRpbWUuaXNvV2Vla2RheVxuICAgICAgICB9O1xuICAgICAgICBzdXBlci5pbml0KHNjYWxlT3B0cyk7XG4gICAgICAgIHRoaXMuX25vcm1hbGl6ZWQgPSBvcHRzLm5vcm1hbGl6ZWQ7XG4gICAgfVxuIHBhcnNlKHJhdywgaW5kZXgpIHtcbiAgICAgICAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2UodGhpcywgcmF3KTtcbiAgICB9XG4gICAgYmVmb3JlTGF5b3V0KCkge1xuICAgICAgICBzdXBlci5iZWZvcmVMYXlvdXQoKTtcbiAgICAgICAgdGhpcy5fY2FjaGUgPSB7XG4gICAgICAgICAgICBkYXRhOiBbXSxcbiAgICAgICAgICAgIGxhYmVsczogW10sXG4gICAgICAgICAgICBhbGw6IFtdXG4gICAgICAgIH07XG4gICAgfVxuICAgIGRldGVybWluZURhdGFMaW1pdHMoKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGFkYXB0ZXIgPSB0aGlzLl9hZGFwdGVyO1xuICAgICAgICBjb25zdCB1bml0ID0gb3B0aW9ucy50aW1lLnVuaXQgfHwgJ2RheSc7XG4gICAgICAgIGxldCB7IG1pbiAsIG1heCAsIG1pbkRlZmluZWQgLCBtYXhEZWZpbmVkICB9ID0gdGhpcy5nZXRVc2VyQm91bmRzKCk7XG4gZnVuY3Rpb24gX2FwcGx5Qm91bmRzKGJvdW5kcykge1xuICAgICAgICAgICAgaWYgKCFtaW5EZWZpbmVkICYmICFpc05hTihib3VuZHMubWluKSkge1xuICAgICAgICAgICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgYm91bmRzLm1pbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW1heERlZmluZWQgJiYgIWlzTmFOKGJvdW5kcy5tYXgpKSB7XG4gICAgICAgICAgICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCBib3VuZHMubWF4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1pbkRlZmluZWQgfHwgIW1heERlZmluZWQpIHtcbiAgICAgICAgICAgIF9hcHBseUJvdW5kcyh0aGlzLl9nZXRMYWJlbEJvdW5kcygpKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJvdW5kcyAhPT0gJ3RpY2tzJyB8fCBvcHRpb25zLnRpY2tzLnNvdXJjZSAhPT0gJ2xhYmVscycpIHtcbiAgICAgICAgICAgICAgICBfYXBwbHlCb3VuZHModGhpcy5nZXRNaW5NYXgoZmFsc2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBtaW4gPSBpc051bWJlckZpbml0ZShtaW4pICYmICFpc05hTihtaW4pID8gbWluIDogK2FkYXB0ZXIuc3RhcnRPZihEYXRlLm5vdygpLCB1bml0KTtcbiAgICAgICAgbWF4ID0gaXNOdW1iZXJGaW5pdGUobWF4KSAmJiAhaXNOYU4obWF4KSA/IG1heCA6ICthZGFwdGVyLmVuZE9mKERhdGUubm93KCksIHVuaXQpICsgMTtcbiAgICAgICAgdGhpcy5taW4gPSBNYXRoLm1pbihtaW4sIG1heCAtIDEpO1xuICAgICAgICB0aGlzLm1heCA9IE1hdGgubWF4KG1pbiArIDEsIG1heCk7XG4gICAgfVxuIF9nZXRMYWJlbEJvdW5kcygpIHtcbiAgICAgICAgY29uc3QgYXJyID0gdGhpcy5nZXRMYWJlbFRpbWVzdGFtcHMoKTtcbiAgICAgICAgbGV0IG1pbiA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgICAgbGV0IG1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICAgICAgaWYgKGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIG1pbiA9IGFyclswXTtcbiAgICAgICAgICAgIG1heCA9IGFyclthcnIubGVuZ3RoIC0gMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgIG1heFxuICAgICAgICB9O1xuICAgIH1cbiBidWlsZFRpY2tzKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCB0aW1lT3B0cyA9IG9wdGlvbnMudGltZTtcbiAgICAgICAgY29uc3QgdGlja09wdHMgPSBvcHRpb25zLnRpY2tzO1xuICAgICAgICBjb25zdCB0aW1lc3RhbXBzID0gdGlja09wdHMuc291cmNlID09PSAnbGFiZWxzJyA/IHRoaXMuZ2V0TGFiZWxUaW1lc3RhbXBzKCkgOiB0aGlzLl9nZW5lcmF0ZSgpO1xuICAgICAgICBpZiAob3B0aW9ucy5ib3VuZHMgPT09ICd0aWNrcycgJiYgdGltZXN0YW1wcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubWluID0gdGhpcy5fdXNlck1pbiB8fCB0aW1lc3RhbXBzWzBdO1xuICAgICAgICAgICAgdGhpcy5tYXggPSB0aGlzLl91c2VyTWF4IHx8IHRpbWVzdGFtcHNbdGltZXN0YW1wcy5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbjtcbiAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXg7XG4gICAgICAgIGNvbnN0IHRpY2tzID0gX2ZpbHRlckJldHdlZW4odGltZXN0YW1wcywgbWluLCBtYXgpO1xuICAgICAgICB0aGlzLl91bml0ID0gdGltZU9wdHMudW5pdCB8fCAodGlja09wdHMuYXV0b1NraXAgPyBkZXRlcm1pbmVVbml0Rm9yQXV0b1RpY2tzKHRpbWVPcHRzLm1pblVuaXQsIHRoaXMubWluLCB0aGlzLm1heCwgdGhpcy5fZ2V0TGFiZWxDYXBhY2l0eShtaW4pKSA6IGRldGVybWluZVVuaXRGb3JGb3JtYXR0aW5nKHRoaXMsIHRpY2tzLmxlbmd0aCwgdGltZU9wdHMubWluVW5pdCwgdGhpcy5taW4sIHRoaXMubWF4KSk7XG4gICAgICAgIHRoaXMuX21ham9yVW5pdCA9ICF0aWNrT3B0cy5tYWpvci5lbmFibGVkIHx8IHRoaXMuX3VuaXQgPT09ICd5ZWFyJyA/IHVuZGVmaW5lZCA6IGRldGVybWluZU1ham9yVW5pdCh0aGlzLl91bml0KTtcbiAgICAgICAgdGhpcy5pbml0T2Zmc2V0cyh0aW1lc3RhbXBzKTtcbiAgICAgICAgaWYgKG9wdGlvbnMucmV2ZXJzZSkge1xuICAgICAgICAgICAgdGlja3MucmV2ZXJzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aWNrc0Zyb21UaW1lc3RhbXBzKHRoaXMsIHRpY2tzLCB0aGlzLl9tYWpvclVuaXQpO1xuICAgIH1cbiAgICBhZnRlckF1dG9Ta2lwKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9mZnNldEFmdGVyQXV0b3NraXApIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdE9mZnNldHModGhpcy50aWNrcy5tYXAoKHRpY2spPT4rdGljay52YWx1ZSkpO1xuICAgICAgICB9XG4gICAgfVxuIGluaXRPZmZzZXRzKHRpbWVzdGFtcHMgPSBbXSkge1xuICAgICAgICBsZXQgc3RhcnQgPSAwO1xuICAgICAgICBsZXQgZW5kID0gMDtcbiAgICAgICAgbGV0IGZpcnN0LCBsYXN0O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9mZnNldCAmJiB0aW1lc3RhbXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgZmlyc3QgPSB0aGlzLmdldERlY2ltYWxGb3JWYWx1ZSh0aW1lc3RhbXBzWzBdKTtcbiAgICAgICAgICAgIGlmICh0aW1lc3RhbXBzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0ID0gMSAtIGZpcnN0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGFydCA9ICh0aGlzLmdldERlY2ltYWxGb3JWYWx1ZSh0aW1lc3RhbXBzWzFdKSAtIGZpcnN0KSAvIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0ID0gdGhpcy5nZXREZWNpbWFsRm9yVmFsdWUodGltZXN0YW1wc1t0aW1lc3RhbXBzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgIGlmICh0aW1lc3RhbXBzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVuZCA9IGxhc3Q7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVuZCA9IChsYXN0IC0gdGhpcy5nZXREZWNpbWFsRm9yVmFsdWUodGltZXN0YW1wc1t0aW1lc3RhbXBzLmxlbmd0aCAtIDJdKSkgLyAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gdGltZXN0YW1wcy5sZW5ndGggPCAzID8gMC41IDogMC4yNTtcbiAgICAgICAgc3RhcnQgPSBfbGltaXRWYWx1ZShzdGFydCwgMCwgbGltaXQpO1xuICAgICAgICBlbmQgPSBfbGltaXRWYWx1ZShlbmQsIDAsIGxpbWl0KTtcbiAgICAgICAgdGhpcy5fb2Zmc2V0cyA9IHtcbiAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgZW5kLFxuICAgICAgICAgICAgZmFjdG9yOiAxIC8gKHN0YXJ0ICsgMSArIGVuZClcbiAgICAgICAgfTtcbiAgICB9XG4gX2dlbmVyYXRlKCkge1xuICAgICAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5fYWRhcHRlcjtcbiAgICAgICAgY29uc3QgbWluID0gdGhpcy5taW47XG4gICAgICAgIGNvbnN0IG1heCA9IHRoaXMubWF4O1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCB0aW1lT3B0cyA9IG9wdGlvbnMudGltZTtcbiAgICAgICAgY29uc3QgbWlub3IgPSB0aW1lT3B0cy51bml0IHx8IGRldGVybWluZVVuaXRGb3JBdXRvVGlja3ModGltZU9wdHMubWluVW5pdCwgbWluLCBtYXgsIHRoaXMuX2dldExhYmVsQ2FwYWNpdHkobWluKSk7XG4gICAgICAgIGNvbnN0IHN0ZXBTaXplID0gdmFsdWVPckRlZmF1bHQob3B0aW9ucy50aWNrcy5zdGVwU2l6ZSwgMSk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBtaW5vciA9PT0gJ3dlZWsnID8gdGltZU9wdHMuaXNvV2Vla2RheSA6IGZhbHNlO1xuICAgICAgICBjb25zdCBoYXNXZWVrZGF5ID0gaXNOdW1iZXIod2Vla2RheSkgfHwgd2Vla2RheSA9PT0gdHJ1ZTtcbiAgICAgICAgY29uc3QgdGlja3MgPSB7fTtcbiAgICAgICAgbGV0IGZpcnN0ID0gbWluO1xuICAgICAgICBsZXQgdGltZSwgY291bnQ7XG4gICAgICAgIGlmIChoYXNXZWVrZGF5KSB7XG4gICAgICAgICAgICBmaXJzdCA9ICthZGFwdGVyLnN0YXJ0T2YoZmlyc3QsICdpc29XZWVrJywgd2Vla2RheSk7XG4gICAgICAgIH1cbiAgICAgICAgZmlyc3QgPSArYWRhcHRlci5zdGFydE9mKGZpcnN0LCBoYXNXZWVrZGF5ID8gJ2RheScgOiBtaW5vcik7XG4gICAgICAgIGlmIChhZGFwdGVyLmRpZmYobWF4LCBtaW4sIG1pbm9yKSA+IDEwMDAwMCAqIHN0ZXBTaXplKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWluICsgJyBhbmQgJyArIG1heCArICcgYXJlIHRvbyBmYXIgYXBhcnQgd2l0aCBzdGVwU2l6ZSBvZiAnICsgc3RlcFNpemUgKyAnICcgKyBtaW5vcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGltZXN0YW1wcyA9IG9wdGlvbnMudGlja3Muc291cmNlID09PSAnZGF0YScgJiYgdGhpcy5nZXREYXRhVGltZXN0YW1wcygpO1xuICAgICAgICBmb3IodGltZSA9IGZpcnN0LCBjb3VudCA9IDA7IHRpbWUgPCBtYXg7IHRpbWUgPSArYWRhcHRlci5hZGQodGltZSwgc3RlcFNpemUsIG1pbm9yKSwgY291bnQrKyl7XG4gICAgICAgICAgICBhZGRUaWNrKHRpY2tzLCB0aW1lLCB0aW1lc3RhbXBzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGltZSA9PT0gbWF4IHx8IG9wdGlvbnMuYm91bmRzID09PSAndGlja3MnIHx8IGNvdW50ID09PSAxKSB7XG4gICAgICAgICAgICBhZGRUaWNrKHRpY2tzLCB0aW1lLCB0aW1lc3RhbXBzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGlja3MpLnNvcnQoc29ydGVyKS5tYXAoKHgpPT4reCk7XG4gICAgfVxuIGdldExhYmVsRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgYWRhcHRlciA9IHRoaXMuX2FkYXB0ZXI7XG4gICAgICAgIGNvbnN0IHRpbWVPcHRzID0gdGhpcy5vcHRpb25zLnRpbWU7XG4gICAgICAgIGlmICh0aW1lT3B0cy50b29sdGlwRm9ybWF0KSB7XG4gICAgICAgICAgICByZXR1cm4gYWRhcHRlci5mb3JtYXQodmFsdWUsIHRpbWVPcHRzLnRvb2x0aXBGb3JtYXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhZGFwdGVyLmZvcm1hdCh2YWx1ZSwgdGltZU9wdHMuZGlzcGxheUZvcm1hdHMuZGF0ZXRpbWUpO1xuICAgIH1cbiBmb3JtYXQodmFsdWUsIGZvcm1hdCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBmb3JtYXRzID0gb3B0aW9ucy50aW1lLmRpc3BsYXlGb3JtYXRzO1xuICAgICAgICBjb25zdCB1bml0ID0gdGhpcy5fdW5pdDtcbiAgICAgICAgY29uc3QgZm10ID0gZm9ybWF0IHx8IGZvcm1hdHNbdW5pdF07XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGFwdGVyLmZvcm1hdCh2YWx1ZSwgZm10KTtcbiAgICB9XG4gX3RpY2tGb3JtYXRGdW5jdGlvbih0aW1lLCBpbmRleCwgdGlja3MsIGZvcm1hdCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBvcHRpb25zLnRpY2tzLmNhbGxiYWNrO1xuICAgICAgICBpZiAoZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZm9ybWF0dGVyLCBbXG4gICAgICAgICAgICAgICAgdGltZSxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICB0aWNrc1xuICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybWF0cyA9IG9wdGlvbnMudGltZS5kaXNwbGF5Rm9ybWF0cztcbiAgICAgICAgY29uc3QgdW5pdCA9IHRoaXMuX3VuaXQ7XG4gICAgICAgIGNvbnN0IG1ham9yVW5pdCA9IHRoaXMuX21ham9yVW5pdDtcbiAgICAgICAgY29uc3QgbWlub3JGb3JtYXQgPSB1bml0ICYmIGZvcm1hdHNbdW5pdF07XG4gICAgICAgIGNvbnN0IG1ham9yRm9ybWF0ID0gbWFqb3JVbml0ICYmIGZvcm1hdHNbbWFqb3JVbml0XTtcbiAgICAgICAgY29uc3QgdGljayA9IHRpY2tzW2luZGV4XTtcbiAgICAgICAgY29uc3QgbWFqb3IgPSBtYWpvclVuaXQgJiYgbWFqb3JGb3JtYXQgJiYgdGljayAmJiB0aWNrLm1ham9yO1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRhcHRlci5mb3JtYXQodGltZSwgZm9ybWF0IHx8IChtYWpvciA/IG1ham9yRm9ybWF0IDogbWlub3JGb3JtYXQpKTtcbiAgICB9XG4gZ2VuZXJhdGVUaWNrTGFiZWxzKHRpY2tzKSB7XG4gICAgICAgIGxldCBpLCBpbGVuLCB0aWNrO1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSB0aWNrcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgdGljayA9IHRpY2tzW2ldO1xuICAgICAgICAgICAgdGljay5sYWJlbCA9IHRoaXMuX3RpY2tGb3JtYXRGdW5jdGlvbih0aWNrLnZhbHVlLCBpLCB0aWNrcyk7XG4gICAgICAgIH1cbiAgICB9XG4gZ2V0RGVjaW1hbEZvclZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IE5hTiA6ICh2YWx1ZSAtIHRoaXMubWluKSAvICh0aGlzLm1heCAtIHRoaXMubWluKTtcbiAgICB9XG4gZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBvZmZzZXRzID0gdGhpcy5fb2Zmc2V0cztcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXREZWNpbWFsRm9yVmFsdWUodmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQaXhlbEZvckRlY2ltYWwoKG9mZnNldHMuc3RhcnQgKyBwb3MpICogb2Zmc2V0cy5mYWN0b3IpO1xuICAgIH1cbiBnZXRWYWx1ZUZvclBpeGVsKHBpeGVsKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldHMgPSB0aGlzLl9vZmZzZXRzO1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldERlY2ltYWxGb3JQaXhlbChwaXhlbCkgLyBvZmZzZXRzLmZhY3RvciAtIG9mZnNldHMuZW5kO1xuICAgICAgICByZXR1cm4gdGhpcy5taW4gKyBwb3MgKiAodGhpcy5tYXggLSB0aGlzLm1pbik7XG4gICAgfVxuIF9nZXRMYWJlbFNpemUobGFiZWwpIHtcbiAgICAgICAgY29uc3QgdGlja3NPcHRzID0gdGhpcy5vcHRpb25zLnRpY2tzO1xuICAgICAgICBjb25zdCB0aWNrTGFiZWxXaWR0aCA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KGxhYmVsKS53aWR0aDtcbiAgICAgICAgY29uc3QgYW5nbGUgPSB0b1JhZGlhbnModGhpcy5pc0hvcml6b250YWwoKSA/IHRpY2tzT3B0cy5tYXhSb3RhdGlvbiA6IHRpY2tzT3B0cy5taW5Sb3RhdGlvbik7XG4gICAgICAgIGNvbnN0IGNvc1JvdGF0aW9uID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICBjb25zdCBzaW5Sb3RhdGlvbiA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICAgICAgY29uc3QgdGlja0ZvbnRTaXplID0gdGhpcy5fcmVzb2x2ZVRpY2tGb250T3B0aW9ucygwKS5zaXplO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdzogdGlja0xhYmVsV2lkdGggKiBjb3NSb3RhdGlvbiArIHRpY2tGb250U2l6ZSAqIHNpblJvdGF0aW9uLFxuICAgICAgICAgICAgaDogdGlja0xhYmVsV2lkdGggKiBzaW5Sb3RhdGlvbiArIHRpY2tGb250U2l6ZSAqIGNvc1JvdGF0aW9uXG4gICAgICAgIH07XG4gICAgfVxuIF9nZXRMYWJlbENhcGFjaXR5KGV4YW1wbGVUaW1lKSB7XG4gICAgICAgIGNvbnN0IHRpbWVPcHRzID0gdGhpcy5vcHRpb25zLnRpbWU7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXRzID0gdGltZU9wdHMuZGlzcGxheUZvcm1hdHM7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IGRpc3BsYXlGb3JtYXRzW3RpbWVPcHRzLnVuaXRdIHx8IGRpc3BsYXlGb3JtYXRzLm1pbGxpc2Vjb25kO1xuICAgICAgICBjb25zdCBleGFtcGxlTGFiZWwgPSB0aGlzLl90aWNrRm9ybWF0RnVuY3Rpb24oZXhhbXBsZVRpbWUsIDAsIHRpY2tzRnJvbVRpbWVzdGFtcHModGhpcywgW1xuICAgICAgICAgICAgZXhhbXBsZVRpbWVcbiAgICAgICAgXSwgdGhpcy5fbWFqb3JVbml0KSwgZm9ybWF0KTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuX2dldExhYmVsU2l6ZShleGFtcGxlTGFiZWwpO1xuICAgICAgICBjb25zdCBjYXBhY2l0eSA9IE1hdGguZmxvb3IodGhpcy5pc0hvcml6b250YWwoKSA/IHRoaXMud2lkdGggLyBzaXplLncgOiB0aGlzLmhlaWdodCAvIHNpemUuaCkgLSAxO1xuICAgICAgICByZXR1cm4gY2FwYWNpdHkgPiAwID8gY2FwYWNpdHkgOiAxO1xuICAgIH1cbiBnZXREYXRhVGltZXN0YW1wcygpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcHMgPSB0aGlzLl9jYWNoZS5kYXRhIHx8IFtdO1xuICAgICAgICBsZXQgaSwgaWxlbjtcbiAgICAgICAgaWYgKHRpbWVzdGFtcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGltZXN0YW1wcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXRhcyA9IHRoaXMuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMoKTtcbiAgICAgICAgaWYgKHRoaXMuX25vcm1hbGl6ZWQgJiYgbWV0YXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGUuZGF0YSA9IG1ldGFzWzBdLmNvbnRyb2xsZXIuZ2V0QWxsUGFyc2VkVmFsdWVzKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGZvcihpID0gMCwgaWxlbiA9IG1ldGFzLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICB0aW1lc3RhbXBzID0gdGltZXN0YW1wcy5jb25jYXQobWV0YXNbaV0uY29udHJvbGxlci5nZXRBbGxQYXJzZWRWYWx1ZXModGhpcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZS5kYXRhID0gdGhpcy5ub3JtYWxpemUodGltZXN0YW1wcyk7XG4gICAgfVxuIGdldExhYmVsVGltZXN0YW1wcygpIHtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wcyA9IHRoaXMuX2NhY2hlLmxhYmVscyB8fCBbXTtcbiAgICAgICAgbGV0IGksIGlsZW47XG4gICAgICAgIGlmICh0aW1lc3RhbXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRpbWVzdGFtcHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKTtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gbGFiZWxzLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICB0aW1lc3RhbXBzLnB1c2gocGFyc2UodGhpcywgbGFiZWxzW2ldKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlLmxhYmVscyA9IHRoaXMuX25vcm1hbGl6ZWQgPyB0aW1lc3RhbXBzIDogdGhpcy5ub3JtYWxpemUodGltZXN0YW1wcyk7XG4gICAgfVxuIG5vcm1hbGl6ZSh2YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIF9hcnJheVVuaXF1ZSh2YWx1ZXMuc29ydChzb3J0ZXIpKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlKHRhYmxlLCB2YWwsIHJldmVyc2UpIHtcbiAgICBsZXQgbG8gPSAwO1xuICAgIGxldCBoaSA9IHRhYmxlLmxlbmd0aCAtIDE7XG4gICAgbGV0IHByZXZTb3VyY2UsIG5leHRTb3VyY2UsIHByZXZUYXJnZXQsIG5leHRUYXJnZXQ7XG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgICAgaWYgKHZhbCA+PSB0YWJsZVtsb10ucG9zICYmIHZhbCA8PSB0YWJsZVtoaV0ucG9zKSB7XG4gICAgICAgICAgICAoeyBsbyAsIGhpICB9ID0gX2xvb2t1cEJ5S2V5KHRhYmxlLCAncG9zJywgdmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgKHsgcG9zOiBwcmV2U291cmNlICwgdGltZTogcHJldlRhcmdldCAgfSA9IHRhYmxlW2xvXSk7XG4gICAgICAgICh7IHBvczogbmV4dFNvdXJjZSAsIHRpbWU6IG5leHRUYXJnZXQgIH0gPSB0YWJsZVtoaV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2YWwgPj0gdGFibGVbbG9dLnRpbWUgJiYgdmFsIDw9IHRhYmxlW2hpXS50aW1lKSB7XG4gICAgICAgICAgICAoeyBsbyAsIGhpICB9ID0gX2xvb2t1cEJ5S2V5KHRhYmxlLCAndGltZScsIHZhbCkpO1xuICAgICAgICB9XG4gICAgICAgICh7IHRpbWU6IHByZXZTb3VyY2UgLCBwb3M6IHByZXZUYXJnZXQgIH0gPSB0YWJsZVtsb10pO1xuICAgICAgICAoeyB0aW1lOiBuZXh0U291cmNlICwgcG9zOiBuZXh0VGFyZ2V0ICB9ID0gdGFibGVbaGldKTtcbiAgICB9XG4gICAgY29uc3Qgc3BhbiA9IG5leHRTb3VyY2UgLSBwcmV2U291cmNlO1xuICAgIHJldHVybiBzcGFuID8gcHJldlRhcmdldCArIChuZXh0VGFyZ2V0IC0gcHJldlRhcmdldCkgKiAodmFsIC0gcHJldlNvdXJjZSkgLyBzcGFuIDogcHJldlRhcmdldDtcbn1cbmNsYXNzIFRpbWVTZXJpZXNTY2FsZSBleHRlbmRzIFRpbWVTY2FsZSB7XG4gICAgc3RhdGljIGlkID0gJ3RpbWVzZXJpZXMnO1xuIHN0YXRpYyBkZWZhdWx0cyA9IFRpbWVTY2FsZS5kZWZhdWx0cztcbiBjb25zdHJ1Y3Rvcihwcm9wcyl7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgIHRoaXMuX3RhYmxlID0gW107XG4gICAgICAgICB0aGlzLl9taW5Qb3MgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLl90YWJsZVJhbmdlID0gdW5kZWZpbmVkO1xuICAgIH1cbiBpbml0T2Zmc2V0cygpIHtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wcyA9IHRoaXMuX2dldFRpbWVzdGFtcHNGb3JUYWJsZSgpO1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuX3RhYmxlID0gdGhpcy5idWlsZExvb2t1cFRhYmxlKHRpbWVzdGFtcHMpO1xuICAgICAgICB0aGlzLl9taW5Qb3MgPSBpbnRlcnBvbGF0ZSh0YWJsZSwgdGhpcy5taW4pO1xuICAgICAgICB0aGlzLl90YWJsZVJhbmdlID0gaW50ZXJwb2xhdGUodGFibGUsIHRoaXMubWF4KSAtIHRoaXMuX21pblBvcztcbiAgICAgICAgc3VwZXIuaW5pdE9mZnNldHModGltZXN0YW1wcyk7XG4gICAgfVxuIGJ1aWxkTG9va3VwVGFibGUodGltZXN0YW1wcykge1xuICAgICAgICBjb25zdCB7IG1pbiAsIG1heCAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGNvbnN0IHRhYmxlID0gW107XG4gICAgICAgIGxldCBpLCBpbGVuLCBwcmV2LCBjdXJyLCBuZXh0O1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSB0aW1lc3RhbXBzLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBjdXJyID0gdGltZXN0YW1wc1tpXTtcbiAgICAgICAgICAgIGlmIChjdXJyID49IG1pbiAmJiBjdXJyIDw9IG1heCkge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goY3Vycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aW1lOiBtaW4sXG4gICAgICAgICAgICAgICAgICAgIHBvczogMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aW1lOiBtYXgsXG4gICAgICAgICAgICAgICAgICAgIHBvczogMVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIG5leHQgPSBpdGVtc1tpICsgMV07XG4gICAgICAgICAgICBwcmV2ID0gaXRlbXNbaSAtIDFdO1xuICAgICAgICAgICAgY3VyciA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgaWYgKE1hdGgucm91bmQoKG5leHQgKyBwcmV2KSAvIDIpICE9PSBjdXJyKSB7XG4gICAgICAgICAgICAgICAgdGFibGUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHRpbWU6IGN1cnIsXG4gICAgICAgICAgICAgICAgICAgIHBvczogaSAvIChpbGVuIC0gMSlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFibGU7XG4gICAgfVxuIF9nZW5lcmF0ZSgpIHtcbiAgICAgICAgY29uc3QgbWluID0gdGhpcy5taW47XG4gICAgICAgIGNvbnN0IG1heCA9IHRoaXMubWF4O1xuICAgICAgICBsZXQgdGltZXN0YW1wcyA9IHN1cGVyLmdldERhdGFUaW1lc3RhbXBzKCk7XG4gICAgICAgIGlmICghdGltZXN0YW1wcy5pbmNsdWRlcyhtaW4pIHx8ICF0aW1lc3RhbXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGltZXN0YW1wcy5zcGxpY2UoMCwgMCwgbWluKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRpbWVzdGFtcHMuaW5jbHVkZXMobWF4KSB8fCB0aW1lc3RhbXBzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdGltZXN0YW1wcy5wdXNoKG1heCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRpbWVzdGFtcHMuc29ydCgoYSwgYik9PmEgLSBiKTtcbiAgICB9XG4gX2dldFRpbWVzdGFtcHNGb3JUYWJsZSgpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcHMgPSB0aGlzLl9jYWNoZS5hbGwgfHwgW107XG4gICAgICAgIGlmICh0aW1lc3RhbXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRpbWVzdGFtcHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0RGF0YVRpbWVzdGFtcHMoKTtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmdldExhYmVsVGltZXN0YW1wcygpO1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggJiYgbGFiZWwubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aW1lc3RhbXBzID0gdGhpcy5ub3JtYWxpemUoZGF0YS5jb25jYXQobGFiZWwpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpbWVzdGFtcHMgPSBkYXRhLmxlbmd0aCA/IGRhdGEgOiBsYWJlbDtcbiAgICAgICAgfVxuICAgICAgICB0aW1lc3RhbXBzID0gdGhpcy5fY2FjaGUuYWxsID0gdGltZXN0YW1wcztcbiAgICAgICAgcmV0dXJuIHRpbWVzdGFtcHM7XG4gICAgfVxuIGdldERlY2ltYWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gKGludGVycG9sYXRlKHRoaXMuX3RhYmxlLCB2YWx1ZSkgLSB0aGlzLl9taW5Qb3MpIC8gdGhpcy5fdGFibGVSYW5nZTtcbiAgICB9XG4gZ2V0VmFsdWVGb3JQaXhlbChwaXhlbCkge1xuICAgICAgICBjb25zdCBvZmZzZXRzID0gdGhpcy5fb2Zmc2V0cztcbiAgICAgICAgY29uc3QgZGVjaW1hbCA9IHRoaXMuZ2V0RGVjaW1hbEZvclBpeGVsKHBpeGVsKSAvIG9mZnNldHMuZmFjdG9yIC0gb2Zmc2V0cy5lbmQ7XG4gICAgICAgIHJldHVybiBpbnRlcnBvbGF0ZSh0aGlzLl90YWJsZSwgZGVjaW1hbCAqIHRoaXMuX3RhYmxlUmFuZ2UgKyB0aGlzLl9taW5Qb3MsIHRydWUpO1xuICAgIH1cbn1cblxudmFyIHNjYWxlcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbl9fcHJvdG9fXzogbnVsbCxcbkNhdGVnb3J5U2NhbGU6IENhdGVnb3J5U2NhbGUsXG5MaW5lYXJTY2FsZTogTGluZWFyU2NhbGUsXG5Mb2dhcml0aG1pY1NjYWxlOiBMb2dhcml0aG1pY1NjYWxlLFxuUmFkaWFsTGluZWFyU2NhbGU6IFJhZGlhbExpbmVhclNjYWxlLFxuVGltZVNjYWxlOiBUaW1lU2NhbGUsXG5UaW1lU2VyaWVzU2NhbGU6IFRpbWVTZXJpZXNTY2FsZVxufSk7XG5cbmNvbnN0IHJlZ2lzdGVyYWJsZXMgPSBbXG4gICAgY29udHJvbGxlcnMsXG4gICAgZWxlbWVudHMsXG4gICAgcGx1Z2lucyxcbiAgICBzY2FsZXNcbl07XG5cbmV4cG9ydCB7IEFuaW1hdGlvbiwgQW5pbWF0aW9ucywgQXJjRWxlbWVudCwgQmFyQ29udHJvbGxlciwgQmFyRWxlbWVudCwgQmFzZVBsYXRmb3JtLCBCYXNpY1BsYXRmb3JtLCBCdWJibGVDb250cm9sbGVyLCBDYXRlZ29yeVNjYWxlLCBDaGFydCwgcGx1Z2luX2NvbG9ycyBhcyBDb2xvcnMsIERhdGFzZXRDb250cm9sbGVyLCBwbHVnaW5fZGVjaW1hdGlvbiBhcyBEZWNpbWF0aW9uLCBEb21QbGF0Zm9ybSwgRG91Z2hudXRDb250cm9sbGVyLCBFbGVtZW50LCBpbmRleCBhcyBGaWxsZXIsIEludGVyYWN0aW9uLCBwbHVnaW5fbGVnZW5kIGFzIExlZ2VuZCwgTGluZUNvbnRyb2xsZXIsIExpbmVFbGVtZW50LCBMaW5lYXJTY2FsZSwgTG9nYXJpdGhtaWNTY2FsZSwgUGllQ29udHJvbGxlciwgUG9pbnRFbGVtZW50LCBQb2xhckFyZWFDb250cm9sbGVyLCBSYWRhckNvbnRyb2xsZXIsIFJhZGlhbExpbmVhclNjYWxlLCBTY2FsZSwgU2NhdHRlckNvbnRyb2xsZXIsIHBsdWdpbl9zdWJ0aXRsZSBhcyBTdWJUaXRsZSwgVGlja3MsIFRpbWVTY2FsZSwgVGltZVNlcmllc1NjYWxlLCBwbHVnaW5fdGl0bGUgYXMgVGl0bGUsIHBsdWdpbl90b29sdGlwIGFzIFRvb2x0aXAsIGFkYXB0ZXJzIGFzIF9hZGFwdGVycywgX2RldGVjdFBsYXRmb3JtLCBhbmltYXRvciwgY29udHJvbGxlcnMsIGRlZmF1bHRzLCBlbGVtZW50cywgbGF5b3V0cywgcGx1Z2lucywgcmVnaXN0ZXJhYmxlcywgcmVnaXN0cnksIHNjYWxlcyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2hhcnQuanMubWFwXG4iLCIvKiFcbiAqIENoYXJ0LmpzIHY0LjQuNlxuICogaHR0cHM6Ly93d3cuY2hhcnRqcy5vcmdcbiAqIChjKSAyMDI0IENoYXJ0LmpzIENvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlXG4gKi9cbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnQGt1cmtsZS9jb2xvcic7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBDaGFydC5oZWxwZXJzXG4gKi8gLyoqXG4gKiBBbiBlbXB0eSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgZm9yIG9wdGlvbmFsIGNhbGxiYWNrLlxuICovIGZ1bmN0aW9uIG5vb3AoKSB7XG4vKiBub29wICovIH1cbi8qKlxuICogUmV0dXJucyBhIHVuaXF1ZSBpZCwgc2VxdWVudGlhbGx5IGdlbmVyYXRlZCBmcm9tIGEgZ2xvYmFsIHZhcmlhYmxlLlxuICovIGNvbnN0IHVpZCA9ICgoKT0+e1xuICAgIGxldCBpZCA9IDA7XG4gICAgcmV0dXJuICgpPT5pZCsrO1xufSkoKTtcbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgbmVpdGhlciBudWxsIG5vciB1bmRlZmluZWQsIGVsc2UgcmV0dXJucyBmYWxzZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB0ZXN0LlxuICogQHNpbmNlIDIuNy4wXG4gKi8gZnVuY3Rpb24gaXNOdWxsT3JVbmRlZih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSAoaW5jbHVkaW5nIHR5cGVkIGFycmF5cyksIGVsc2UgcmV0dXJucyBmYWxzZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB0ZXN0LlxuICogQGZ1bmN0aW9uXG4gKi8gZnVuY3Rpb24gaXNBcnJheSh2YWx1ZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5ICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICBpZiAodHlwZS5zbGljZSgwLCA3KSA9PT0gJ1tvYmplY3QnICYmIHR5cGUuc2xpY2UoLTYpID09PSAnQXJyYXldJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QgKGV4Y2x1ZGluZyBudWxsKSwgZWxzZSByZXR1cm5zIGZhbHNlLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHRlc3QuXG4gKiBAc2luY2UgMi43LjBcbiAqLyBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgYSBmaW5pdGUgbnVtYmVyLCBlbHNlIHJldHVybnMgZmFsc2VcbiAqIEBwYXJhbSB2YWx1ZSAgLSBUaGUgdmFsdWUgdG8gdGVzdC5cbiAqLyBmdW5jdGlvbiBpc051bWJlckZpbml0ZSh2YWx1ZSkge1xuICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIE51bWJlcikgJiYgaXNGaW5pdGUoK3ZhbHVlKTtcbn1cbi8qKlxuICogUmV0dXJucyBgdmFsdWVgIGlmIGZpbml0ZSwgZWxzZSByZXR1cm5zIGBkZWZhdWx0VmFsdWVgLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHJldHVybiBpZiBkZWZpbmVkLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIFRoZSB2YWx1ZSB0byByZXR1cm4gaWYgYHZhbHVlYCBpcyBub3QgZmluaXRlLlxuICovIGZ1bmN0aW9uIGZpbml0ZU9yRGVmYXVsdCh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIGlzTnVtYmVyRmluaXRlKHZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufVxuLyoqXG4gKiBSZXR1cm5zIGB2YWx1ZWAgaWYgZGVmaW5lZCwgZWxzZSByZXR1cm5zIGBkZWZhdWx0VmFsdWVgLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHJldHVybiBpZiBkZWZpbmVkLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIFRoZSB2YWx1ZSB0byByZXR1cm4gaWYgYHZhbHVlYCBpcyB1bmRlZmluZWQuXG4gKi8gZnVuY3Rpb24gdmFsdWVPckRlZmF1bHQodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7XG59XG5jb25zdCB0b1BlcmNlbnRhZ2UgPSAodmFsdWUsIGRpbWVuc2lvbik9PnR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZW5kc1dpdGgoJyUnKSA/IHBhcnNlRmxvYXQodmFsdWUpIC8gMTAwIDogK3ZhbHVlIC8gZGltZW5zaW9uO1xuY29uc3QgdG9EaW1lbnNpb24gPSAodmFsdWUsIGRpbWVuc2lvbik9PnR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZW5kc1dpdGgoJyUnKSA/IHBhcnNlRmxvYXQodmFsdWUpIC8gMTAwICogZGltZW5zaW9uIDogK3ZhbHVlO1xuLyoqXG4gKiBDYWxscyBgZm5gIHdpdGggdGhlIGdpdmVuIGBhcmdzYCBpbiB0aGUgc2NvcGUgZGVmaW5lZCBieSBgdGhpc0FyZ2AgYW5kIHJldHVybnMgdGhlXG4gKiB2YWx1ZSByZXR1cm5lZCBieSBgZm5gLiBJZiBgZm5gIGlzIG5vdCBhIGZ1bmN0aW9uLCB0aGlzIG1ldGhvZCByZXR1cm5zIHVuZGVmaW5lZC5cbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsLlxuICogQHBhcmFtIGFyZ3MgLSBUaGUgYXJndW1lbnRzIHdpdGggd2hpY2ggYGZuYCBzaG91bGQgYmUgY2FsbGVkLlxuICogQHBhcmFtIFt0aGlzQXJnXSAtIFRoZSB2YWx1ZSBvZiBgdGhpc2AgcHJvdmlkZWQgZm9yIHRoZSBjYWxsIHRvIGBmbmAuXG4gKi8gZnVuY3Rpb24gY2FsbGJhY2soZm4sIGFyZ3MsIHRoaXNBcmcpIHtcbiAgICBpZiAoZm4gJiYgdHlwZW9mIGZuLmNhbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVhY2gobG9vcGFibGUsIGZuLCB0aGlzQXJnLCByZXZlcnNlKSB7XG4gICAgbGV0IGksIGxlbiwga2V5cztcbiAgICBpZiAoaXNBcnJheShsb29wYWJsZSkpIHtcbiAgICAgICAgbGVuID0gbG9vcGFibGUubGVuZ3RoO1xuICAgICAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgICAgICAgZm9yKGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSl7XG4gICAgICAgICAgICAgICAgZm4uY2FsbCh0aGlzQXJnLCBsb29wYWJsZVtpXSwgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBsZW47IGkrKyl7XG4gICAgICAgICAgICAgICAgZm4uY2FsbCh0aGlzQXJnLCBsb29wYWJsZVtpXSwgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGxvb3BhYmxlKSkge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMobG9vcGFibGUpO1xuICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgbGVuOyBpKyspe1xuICAgICAgICAgICAgZm4uY2FsbCh0aGlzQXJnLCBsb29wYWJsZVtrZXlzW2ldXSwga2V5c1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYGEwYCBhbmQgYGExYCBhcnJheXMgaGF2ZSB0aGUgc2FtZSBjb250ZW50LCBlbHNlIHJldHVybnMgZmFsc2UuXG4gKiBAcGFyYW0gYTAgLSBUaGUgYXJyYXkgdG8gY29tcGFyZVxuICogQHBhcmFtIGExIC0gVGhlIGFycmF5IHRvIGNvbXBhcmVcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2VsZW1lbnRzRXF1YWwoYTAsIGExKSB7XG4gICAgbGV0IGksIGlsZW4sIHYwLCB2MTtcbiAgICBpZiAoIWEwIHx8ICFhMSB8fCBhMC5sZW5ndGggIT09IGExLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvcihpID0gMCwgaWxlbiA9IGEwLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIHYwID0gYTBbaV07XG4gICAgICAgIHYxID0gYTFbaV07XG4gICAgICAgIGlmICh2MC5kYXRhc2V0SW5kZXggIT09IHYxLmRhdGFzZXRJbmRleCB8fCB2MC5pbmRleCAhPT0gdjEuaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogUmV0dXJucyBhIGRlZXAgY29weSBvZiBgc291cmNlYCB3aXRob3V0IGtlZXBpbmcgcmVmZXJlbmNlcyBvbiBvYmplY3RzIGFuZCBhcnJheXMuXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIHZhbHVlIHRvIGNsb25lLlxuICovIGZ1bmN0aW9uIGNsb25lKHNvdXJjZSkge1xuICAgIGlmIChpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5tYXAoY2xvbmUpO1xuICAgIH1cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgICAgICAgY29uc3Qga2xlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICBsZXQgayA9IDA7XG4gICAgICAgIGZvcig7IGsgPCBrbGVuOyArK2spe1xuICAgICAgICAgICAgdGFyZ2V0W2tleXNba11dID0gY2xvbmUoc291cmNlW2tleXNba11dKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xufVxuZnVuY3Rpb24gaXNWYWxpZEtleShrZXkpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnX19wcm90b19fJyxcbiAgICAgICAgJ3Byb3RvdHlwZScsXG4gICAgICAgICdjb25zdHJ1Y3RvcidcbiAgICBdLmluZGV4T2Yoa2V5KSA9PT0gLTE7XG59XG4vKipcbiAqIFRoZSBkZWZhdWx0IG1lcmdlciB3aGVuIENoYXJ0LmhlbHBlcnMubWVyZ2UgaXMgY2FsbGVkIHdpdGhvdXQgbWVyZ2VyIG9wdGlvbi5cbiAqIE5vdGUoU0IpOiBhbHNvIHVzZWQgYnkgbWVyZ2VDb25maWcgYW5kIG1lcmdlU2NhbGVDb25maWcgYXMgZmFsbGJhY2suXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9tZXJnZXIoa2V5LCB0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuICAgIGlmICghaXNWYWxpZEtleShrZXkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdHZhbCA9IHRhcmdldFtrZXldO1xuICAgIGNvbnN0IHN2YWwgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAoaXNPYmplY3QodHZhbCkgJiYgaXNPYmplY3Qoc3ZhbCkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICBtZXJnZSh0dmFsLCBzdmFsLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRba2V5XSA9IGNsb25lKHN2YWwpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgc291cmNlcyA9IGlzQXJyYXkoc291cmNlKSA/IHNvdXJjZSA6IFtcbiAgICAgICAgc291cmNlXG4gICAgXTtcbiAgICBjb25zdCBpbGVuID0gc291cmNlcy5sZW5ndGg7XG4gICAgaWYgKCFpc09iamVjdCh0YXJnZXQpKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IG1lcmdlciA9IG9wdGlvbnMubWVyZ2VyIHx8IF9tZXJnZXI7XG4gICAgbGV0IGN1cnJlbnQ7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIGN1cnJlbnQgPSBzb3VyY2VzW2ldO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGN1cnJlbnQpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY3VycmVudCk7XG4gICAgICAgIGZvcihsZXQgayA9IDAsIGtsZW4gPSBrZXlzLmxlbmd0aDsgayA8IGtsZW47ICsrayl7XG4gICAgICAgICAgICBtZXJnZXIoa2V5c1trXSwgdGFyZ2V0LCBjdXJyZW50LCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuZnVuY3Rpb24gbWVyZ2VJZih0YXJnZXQsIHNvdXJjZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICByZXR1cm4gbWVyZ2UodGFyZ2V0LCBzb3VyY2UsIHtcbiAgICAgICAgbWVyZ2VyOiBfbWVyZ2VySWZcbiAgICB9KTtcbn1cbi8qKlxuICogTWVyZ2VzIHNvdXJjZVtrZXldIGluIHRhcmdldFtrZXldIG9ubHkgaWYgdGFyZ2V0W2tleV0gaXMgdW5kZWZpbmVkLlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfbWVyZ2VySWYoa2V5LCB0YXJnZXQsIHNvdXJjZSkge1xuICAgIGlmICghaXNWYWxpZEtleShrZXkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdHZhbCA9IHRhcmdldFtrZXldO1xuICAgIGNvbnN0IHN2YWwgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAoaXNPYmplY3QodHZhbCkgJiYgaXNPYmplY3Qoc3ZhbCkpIHtcbiAgICAgICAgbWVyZ2VJZih0dmFsLCBzdmFsKTtcbiAgICB9IGVsc2UgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBrZXkpKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gY2xvbmUoc3ZhbCk7XG4gICAgfVxufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9kZXByZWNhdGVkKHNjb3BlLCB2YWx1ZSwgcHJldmlvdXMsIGN1cnJlbnQpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLndhcm4oc2NvcGUgKyAnOiBcIicgKyBwcmV2aW91cyArICdcIiBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIFwiJyArIGN1cnJlbnQgKyAnXCIgaW5zdGVhZCcpO1xuICAgIH1cbn1cbi8vIHJlc29sdmVPYmplY3RLZXkgcmVzb2x2ZXIgY2FjaGVcbmNvbnN0IGtleVJlc29sdmVycyA9IHtcbiAgICAvLyBDaGFydC5oZWxwZXJzLmNvcmUgcmVzb2x2ZU9iamVjdEtleSBzaG91bGQgcmVzb2x2ZSBlbXB0eSBrZXkgdG8gcm9vdCBvYmplY3RcbiAgICAnJzogKHYpPT52LFxuICAgIC8vIGRlZmF1bHQgcmVzb2x2ZXJzXG4gICAgeDogKG8pPT5vLngsXG4gICAgeTogKG8pPT5vLnlcbn07XG4vKipcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX3NwbGl0S2V5KGtleSkge1xuICAgIGNvbnN0IHBhcnRzID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgY29uc3Qga2V5cyA9IFtdO1xuICAgIGxldCB0bXAgPSAnJztcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpe1xuICAgICAgICB0bXAgKz0gcGFydDtcbiAgICAgICAgaWYgKHRtcC5lbmRzV2l0aCgnXFxcXCcpKSB7XG4gICAgICAgICAgICB0bXAgPSB0bXAuc2xpY2UoMCwgLTEpICsgJy4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAga2V5cy5wdXNoKHRtcCk7XG4gICAgICAgICAgICB0bXAgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ga2V5cztcbn1cbmZ1bmN0aW9uIF9nZXRLZXlSZXNvbHZlcihrZXkpIHtcbiAgICBjb25zdCBrZXlzID0gX3NwbGl0S2V5KGtleSk7XG4gICAgcmV0dXJuIChvYmopPT57XG4gICAgICAgIGZvciAoY29uc3QgayBvZiBrZXlzKXtcbiAgICAgICAgICAgIGlmIChrID09PSAnJykge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2JqID0gb2JqICYmIG9ialtrXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH07XG59XG5mdW5jdGlvbiByZXNvbHZlT2JqZWN0S2V5KG9iaiwga2V5KSB7XG4gICAgY29uc3QgcmVzb2x2ZXIgPSBrZXlSZXNvbHZlcnNba2V5XSB8fCAoa2V5UmVzb2x2ZXJzW2tleV0gPSBfZ2V0S2V5UmVzb2x2ZXIoa2V5KSk7XG4gICAgcmV0dXJuIHJlc29sdmVyKG9iaik7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2NhcGl0YWxpemUoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcbn1cbmNvbnN0IGRlZmluZWQgPSAodmFsdWUpPT50eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnO1xuY29uc3QgaXNGdW5jdGlvbiA9ICh2YWx1ZSk9PnR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbi8vIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zMTEyODg1NS9jb21wYXJpbmctZWNtYTYtc2V0cy1mb3ItZXF1YWxpdHkjMzExMjkzODRcbmNvbnN0IHNldHNFcXVhbCA9IChhLCBiKT0+e1xuICAgIGlmIChhLnNpemUgIT09IGIuc2l6ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBhKXtcbiAgICAgICAgaWYgKCFiLmhhcyhpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcbi8qKlxuICogQHBhcmFtIGUgLSBUaGUgZXZlbnRcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2lzQ2xpY2tFdmVudChlKSB7XG4gICAgcmV0dXJuIGUudHlwZSA9PT0gJ21vdXNldXAnIHx8IGUudHlwZSA9PT0gJ2NsaWNrJyB8fCBlLnR5cGUgPT09ICdjb250ZXh0bWVudSc7XG59XG5cbi8qKlxuICogQGFsaWFzIENoYXJ0LmhlbHBlcnMubWF0aFxuICogQG5hbWVzcGFjZVxuICovIGNvbnN0IFBJID0gTWF0aC5QSTtcbmNvbnN0IFRBVSA9IDIgKiBQSTtcbmNvbnN0IFBJVEFVID0gVEFVICsgUEk7XG5jb25zdCBJTkZJTklUWSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbmNvbnN0IFJBRF9QRVJfREVHID0gUEkgLyAxODA7XG5jb25zdCBIQUxGX1BJID0gUEkgLyAyO1xuY29uc3QgUVVBUlRFUl9QSSA9IFBJIC8gNDtcbmNvbnN0IFRXT19USElSRFNfUEkgPSBQSSAqIDIgLyAzO1xuY29uc3QgbG9nMTAgPSBNYXRoLmxvZzEwO1xuY29uc3Qgc2lnbiA9IE1hdGguc2lnbjtcbmZ1bmN0aW9uIGFsbW9zdEVxdWFscyh4LCB5LCBlcHNpbG9uKSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHggLSB5KSA8IGVwc2lsb247XG59XG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBuaWNlIG51bWJlciBhbGdvcml0aG0gdXNlZCBpbiBkZXRlcm1pbmluZyB3aGVyZSBheGlzIGxhYmVscyB3aWxsIGdvXG4gKi8gZnVuY3Rpb24gbmljZU51bShyYW5nZSkge1xuICAgIGNvbnN0IHJvdW5kZWRSYW5nZSA9IE1hdGgucm91bmQocmFuZ2UpO1xuICAgIHJhbmdlID0gYWxtb3N0RXF1YWxzKHJhbmdlLCByb3VuZGVkUmFuZ2UsIHJhbmdlIC8gMTAwMCkgPyByb3VuZGVkUmFuZ2UgOiByYW5nZTtcbiAgICBjb25zdCBuaWNlUmFuZ2UgPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihsb2cxMChyYW5nZSkpKTtcbiAgICBjb25zdCBmcmFjdGlvbiA9IHJhbmdlIC8gbmljZVJhbmdlO1xuICAgIGNvbnN0IG5pY2VGcmFjdGlvbiA9IGZyYWN0aW9uIDw9IDEgPyAxIDogZnJhY3Rpb24gPD0gMiA/IDIgOiBmcmFjdGlvbiA8PSA1ID8gNSA6IDEwO1xuICAgIHJldHVybiBuaWNlRnJhY3Rpb24gKiBuaWNlUmFuZ2U7XG59XG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgZmFjdG9ycyBzb3J0ZWQgZnJvbSAxIHRvIHNxcnQodmFsdWUpXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9mYWN0b3JpemUodmFsdWUpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCBzcXJ0ID0gTWF0aC5zcXJ0KHZhbHVlKTtcbiAgICBsZXQgaTtcbiAgICBmb3IoaSA9IDE7IGkgPCBzcXJ0OyBpKyspe1xuICAgICAgICBpZiAodmFsdWUgJSBpID09PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChpKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlIC8gaSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNxcnQgPT09IChzcXJ0IHwgMCkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goc3FydCk7XG4gICAgfVxuICAgIHJlc3VsdC5zb3J0KChhLCBiKT0+YSAtIGIpLnBvcCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBpc051bWJlcihuKSB7XG4gICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbn1cbmZ1bmN0aW9uIGFsbW9zdFdob2xlKHgsIGVwc2lsb24pIHtcbiAgICBjb25zdCByb3VuZGVkID0gTWF0aC5yb3VuZCh4KTtcbiAgICByZXR1cm4gcm91bmRlZCAtIGVwc2lsb24gPD0geCAmJiByb3VuZGVkICsgZXBzaWxvbiA+PSB4O1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9zZXRNaW5BbmRNYXhCeUtleShhcnJheSwgdGFyZ2V0LCBwcm9wZXJ0eSkge1xuICAgIGxldCBpLCBpbGVuLCB2YWx1ZTtcbiAgICBmb3IoaSA9IDAsIGlsZW4gPSBhcnJheS5sZW5ndGg7IGkgPCBpbGVuOyBpKyspe1xuICAgICAgICB2YWx1ZSA9IGFycmF5W2ldW3Byb3BlcnR5XTtcbiAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRhcmdldC5taW4gPSBNYXRoLm1pbih0YXJnZXQubWluLCB2YWx1ZSk7XG4gICAgICAgICAgICB0YXJnZXQubWF4ID0gTWF0aC5tYXgodGFyZ2V0Lm1heCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdG9SYWRpYW5zKGRlZ3JlZXMpIHtcbiAgICByZXR1cm4gZGVncmVlcyAqIChQSSAvIDE4MCk7XG59XG5mdW5jdGlvbiB0b0RlZ3JlZXMocmFkaWFucykge1xuICAgIHJldHVybiByYWRpYW5zICogKDE4MCAvIFBJKTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzXG4gKiBpLmUuIHRoZSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LCBvZiB0aGUgdmFsdWUgb2YgdGhpcyBOdW1iZXIuXG4gKiBAcGFyYW0geCAtIEEgbnVtYmVyLlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcy5cbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2RlY2ltYWxQbGFjZXMoeCkge1xuICAgIGlmICghaXNOdW1iZXJGaW5pdGUoeCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZSA9IDE7XG4gICAgbGV0IHAgPSAwO1xuICAgIHdoaWxlKE1hdGgucm91bmQoeCAqIGUpIC8gZSAhPT0geCl7XG4gICAgICAgIGUgKj0gMTA7XG4gICAgICAgIHArKztcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG4vLyBHZXRzIHRoZSBhbmdsZSBmcm9tIHZlcnRpY2FsIHVwcmlnaHQgdG8gdGhlIHBvaW50IGFib3V0IGEgY2VudHJlLlxuZnVuY3Rpb24gZ2V0QW5nbGVGcm9tUG9pbnQoY2VudHJlUG9pbnQsIGFuZ2xlUG9pbnQpIHtcbiAgICBjb25zdCBkaXN0YW5jZUZyb21YQ2VudGVyID0gYW5nbGVQb2ludC54IC0gY2VudHJlUG9pbnQueDtcbiAgICBjb25zdCBkaXN0YW5jZUZyb21ZQ2VudGVyID0gYW5nbGVQb2ludC55IC0gY2VudHJlUG9pbnQueTtcbiAgICBjb25zdCByYWRpYWxEaXN0YW5jZUZyb21DZW50ZXIgPSBNYXRoLnNxcnQoZGlzdGFuY2VGcm9tWENlbnRlciAqIGRpc3RhbmNlRnJvbVhDZW50ZXIgKyBkaXN0YW5jZUZyb21ZQ2VudGVyICogZGlzdGFuY2VGcm9tWUNlbnRlcik7XG4gICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMihkaXN0YW5jZUZyb21ZQ2VudGVyLCBkaXN0YW5jZUZyb21YQ2VudGVyKTtcbiAgICBpZiAoYW5nbGUgPCAtMC41ICogUEkpIHtcbiAgICAgICAgYW5nbGUgKz0gVEFVOyAvLyBtYWtlIHN1cmUgdGhlIHJldHVybmVkIGFuZ2xlIGlzIGluIHRoZSByYW5nZSBvZiAoLVBJLzIsIDNQSS8yXVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBhbmdsZSxcbiAgICAgICAgZGlzdGFuY2U6IHJhZGlhbERpc3RhbmNlRnJvbUNlbnRlclxuICAgIH07XG59XG5mdW5jdGlvbiBkaXN0YW5jZUJldHdlZW5Qb2ludHMocHQxLCBwdDIpIHtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHB0Mi54IC0gcHQxLngsIDIpICsgTWF0aC5wb3cocHQyLnkgLSBwdDEueSwgMikpO1xufVxuLyoqXG4gKiBTaG9ydGVzdCBkaXN0YW5jZSBiZXR3ZWVuIGFuZ2xlcywgaW4gZWl0aGVyIGRpcmVjdGlvbi5cbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2FuZ2xlRGlmZihhLCBiKSB7XG4gICAgcmV0dXJuIChhIC0gYiArIFBJVEFVKSAlIFRBVSAtIFBJO1xufVxuLyoqXG4gKiBOb3JtYWxpemUgYW5nbGUgdG8gYmUgYmV0d2VlbiAwIGFuZCAyKlBJXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9ub3JtYWxpemVBbmdsZShhKSB7XG4gICAgcmV0dXJuIChhICUgVEFVICsgVEFVKSAlIFRBVTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfYW5nbGVCZXR3ZWVuKGFuZ2xlLCBzdGFydCwgZW5kLCBzYW1lQW5nbGVJc0Z1bGxDaXJjbGUpIHtcbiAgICBjb25zdCBhID0gX25vcm1hbGl6ZUFuZ2xlKGFuZ2xlKTtcbiAgICBjb25zdCBzID0gX25vcm1hbGl6ZUFuZ2xlKHN0YXJ0KTtcbiAgICBjb25zdCBlID0gX25vcm1hbGl6ZUFuZ2xlKGVuZCk7XG4gICAgY29uc3QgYW5nbGVUb1N0YXJ0ID0gX25vcm1hbGl6ZUFuZ2xlKHMgLSBhKTtcbiAgICBjb25zdCBhbmdsZVRvRW5kID0gX25vcm1hbGl6ZUFuZ2xlKGUgLSBhKTtcbiAgICBjb25zdCBzdGFydFRvQW5nbGUgPSBfbm9ybWFsaXplQW5nbGUoYSAtIHMpO1xuICAgIGNvbnN0IGVuZFRvQW5nbGUgPSBfbm9ybWFsaXplQW5nbGUoYSAtIGUpO1xuICAgIHJldHVybiBhID09PSBzIHx8IGEgPT09IGUgfHwgc2FtZUFuZ2xlSXNGdWxsQ2lyY2xlICYmIHMgPT09IGUgfHwgYW5nbGVUb1N0YXJ0ID4gYW5nbGVUb0VuZCAmJiBzdGFydFRvQW5nbGUgPCBlbmRUb0FuZ2xlO1xufVxuLyoqXG4gKiBMaW1pdCBgdmFsdWVgIGJldHdlZW4gYG1pbmAgYW5kIGBtYXhgXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSBtaW5cbiAqIEBwYXJhbSBtYXhcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2xpbWl0VmFsdWUodmFsdWUsIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCB2YWx1ZSkpO1xufVxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2ludDE2UmFuZ2UodmFsdWUpIHtcbiAgICByZXR1cm4gX2xpbWl0VmFsdWUodmFsdWUsIC0zMjc2OCwgMzI3NjcpO1xufVxuLyoqXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSBzdGFydFxuICogQHBhcmFtIGVuZFxuICogQHBhcmFtIFtlcHNpbG9uXVxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfaXNCZXR3ZWVuKHZhbHVlLCBzdGFydCwgZW5kLCBlcHNpbG9uID0gMWUtNikge1xuICAgIHJldHVybiB2YWx1ZSA+PSBNYXRoLm1pbihzdGFydCwgZW5kKSAtIGVwc2lsb24gJiYgdmFsdWUgPD0gTWF0aC5tYXgoc3RhcnQsIGVuZCkgKyBlcHNpbG9uO1xufVxuXG5mdW5jdGlvbiBfbG9va3VwKHRhYmxlLCB2YWx1ZSwgY21wKSB7XG4gICAgY21wID0gY21wIHx8ICgoaW5kZXgpPT50YWJsZVtpbmRleF0gPCB2YWx1ZSk7XG4gICAgbGV0IGhpID0gdGFibGUubGVuZ3RoIC0gMTtcbiAgICBsZXQgbG8gPSAwO1xuICAgIGxldCBtaWQ7XG4gICAgd2hpbGUoaGkgLSBsbyA+IDEpe1xuICAgICAgICBtaWQgPSBsbyArIGhpID4+IDE7XG4gICAgICAgIGlmIChjbXAobWlkKSkge1xuICAgICAgICAgICAgbG8gPSBtaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoaSA9IG1pZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBsbyxcbiAgICAgICAgaGlcbiAgICB9O1xufVxuLyoqXG4gKiBCaW5hcnkgc2VhcmNoXG4gKiBAcGFyYW0gdGFibGUgLSB0aGUgdGFibGUgc2VhcmNoLiBtdXN0IGJlIHNvcnRlZCFcbiAqIEBwYXJhbSBrZXkgLSBwcm9wZXJ0eSBuYW1lIGZvciB0aGUgdmFsdWUgaW4gZWFjaCBlbnRyeVxuICogQHBhcmFtIHZhbHVlIC0gdmFsdWUgdG8gZmluZFxuICogQHBhcmFtIGxhc3QgLSBsb29rdXAgbGFzdCBpbmRleFxuICogQHByaXZhdGVcbiAqLyBjb25zdCBfbG9va3VwQnlLZXkgPSAodGFibGUsIGtleSwgdmFsdWUsIGxhc3QpPT5fbG9va3VwKHRhYmxlLCB2YWx1ZSwgbGFzdCA/IChpbmRleCk9PntcbiAgICAgICAgY29uc3QgdGkgPSB0YWJsZVtpbmRleF1ba2V5XTtcbiAgICAgICAgcmV0dXJuIHRpIDwgdmFsdWUgfHwgdGkgPT09IHZhbHVlICYmIHRhYmxlW2luZGV4ICsgMV1ba2V5XSA9PT0gdmFsdWU7XG4gICAgfSA6IChpbmRleCk9PnRhYmxlW2luZGV4XVtrZXldIDwgdmFsdWUpO1xuLyoqXG4gKiBSZXZlcnNlIGJpbmFyeSBzZWFyY2hcbiAqIEBwYXJhbSB0YWJsZSAtIHRoZSB0YWJsZSBzZWFyY2guIG11c3QgYmUgc29ydGVkIVxuICogQHBhcmFtIGtleSAtIHByb3BlcnR5IG5hbWUgZm9yIHRoZSB2YWx1ZSBpbiBlYWNoIGVudHJ5XG4gKiBAcGFyYW0gdmFsdWUgLSB2YWx1ZSB0byBmaW5kXG4gKiBAcHJpdmF0ZVxuICovIGNvbnN0IF9ybG9va3VwQnlLZXkgPSAodGFibGUsIGtleSwgdmFsdWUpPT5fbG9va3VwKHRhYmxlLCB2YWx1ZSwgKGluZGV4KT0+dGFibGVbaW5kZXhdW2tleV0gPj0gdmFsdWUpO1xuLyoqXG4gKiBSZXR1cm4gc3Vic2V0IG9mIGB2YWx1ZXNgIGJldHdlZW4gYG1pbmAgYW5kIGBtYXhgIGluY2x1c2l2ZS5cbiAqIFZhbHVlcyBhcmUgYXNzdW1lZCB0byBiZSBpbiBzb3J0ZWQgb3JkZXIuXG4gKiBAcGFyYW0gdmFsdWVzIC0gc29ydGVkIGFycmF5IG9mIHZhbHVlc1xuICogQHBhcmFtIG1pbiAtIG1pbiB2YWx1ZVxuICogQHBhcmFtIG1heCAtIG1heCB2YWx1ZVxuICovIGZ1bmN0aW9uIF9maWx0ZXJCZXR3ZWVuKHZhbHVlcywgbWluLCBtYXgpIHtcbiAgICBsZXQgc3RhcnQgPSAwO1xuICAgIGxldCBlbmQgPSB2YWx1ZXMubGVuZ3RoO1xuICAgIHdoaWxlKHN0YXJ0IDwgZW5kICYmIHZhbHVlc1tzdGFydF0gPCBtaW4pe1xuICAgICAgICBzdGFydCsrO1xuICAgIH1cbiAgICB3aGlsZShlbmQgPiBzdGFydCAmJiB2YWx1ZXNbZW5kIC0gMV0gPiBtYXgpe1xuICAgICAgICBlbmQtLTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXJ0ID4gMCB8fCBlbmQgPCB2YWx1ZXMubGVuZ3RoID8gdmFsdWVzLnNsaWNlKHN0YXJ0LCBlbmQpIDogdmFsdWVzO1xufVxuY29uc3QgYXJyYXlFdmVudHMgPSBbXG4gICAgJ3B1c2gnLFxuICAgICdwb3AnLFxuICAgICdzaGlmdCcsXG4gICAgJ3NwbGljZScsXG4gICAgJ3Vuc2hpZnQnXG5dO1xuZnVuY3Rpb24gbGlzdGVuQXJyYXlFdmVudHMoYXJyYXksIGxpc3RlbmVyKSB7XG4gICAgaWYgKGFycmF5Ll9jaGFydGpzKSB7XG4gICAgICAgIGFycmF5Ll9jaGFydGpzLmxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJyYXksICdfY2hhcnRqcycsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIGxpc3RlbmVyczogW1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyXG4gICAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBhcnJheUV2ZW50cy5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9ICdfb25EYXRhJyArIF9jYXBpdGFsaXplKGtleSk7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBhcnJheVtrZXldO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJyYXksIGtleSwge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZSAoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGJhc2UuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgYXJyYXkuX2NoYXJ0anMubGlzdGVuZXJzLmZvckVhY2goKG9iamVjdCk9PntcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3RbbWV0aG9kXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0W21ldGhvZF0oLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHVubGlzdGVuQXJyYXlFdmVudHMoYXJyYXksIGxpc3RlbmVyKSB7XG4gICAgY29uc3Qgc3R1YiA9IGFycmF5Ll9jaGFydGpzO1xuICAgIGlmICghc3R1Yikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxpc3RlbmVycyA9IHN0dWIubGlzdGVuZXJzO1xuICAgIGNvbnN0IGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFycmF5RXZlbnRzLmZvckVhY2goKGtleSk9PntcbiAgICAgICAgZGVsZXRlIGFycmF5W2tleV07XG4gICAgfSk7XG4gICAgZGVsZXRlIGFycmF5Ll9jaGFydGpzO1xufVxuLyoqXG4gKiBAcGFyYW0gaXRlbXNcbiAqLyBmdW5jdGlvbiBfYXJyYXlVbmlxdWUoaXRlbXMpIHtcbiAgICBjb25zdCBzZXQgPSBuZXcgU2V0KGl0ZW1zKTtcbiAgICBpZiAoc2V0LnNpemUgPT09IGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKHNldCk7XG59XG5cbmZ1bmN0aW9uIGZvbnRTdHJpbmcocGl4ZWxTaXplLCBmb250U3R5bGUsIGZvbnRGYW1pbHkpIHtcbiAgICByZXR1cm4gZm9udFN0eWxlICsgJyAnICsgcGl4ZWxTaXplICsgJ3B4ICcgKyBmb250RmFtaWx5O1xufVxuLyoqXG4qIFJlcXVlc3QgYW5pbWF0aW9uIHBvbHlmaWxsXG4qLyBjb25zdCByZXF1ZXN0QW5pbUZyYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xufSgpO1xuLyoqXG4gKiBUaHJvdHRsZXMgY2FsbGluZyBgZm5gIG9uY2UgcGVyIGFuaW1hdGlvbiBmcmFtZVxuICogTGF0ZXN0IGFyZ3VtZW50cyBhcmUgdXNlZCBvbiB0aGUgYWN0dWFsIGNhbGxcbiAqLyBmdW5jdGlvbiB0aHJvdHRsZWQoZm4sIHRoaXNBcmcpIHtcbiAgICBsZXQgYXJnc1RvVXNlID0gW107XG4gICAgbGV0IHRpY2tpbmcgPSBmYWxzZTtcbiAgICByZXR1cm4gZnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgICAvLyBTYXZlIHRoZSBhcmdzIGZvciB1c2UgbGF0ZXJcbiAgICAgICAgYXJnc1RvVXNlID0gYXJncztcbiAgICAgICAgaWYgKCF0aWNraW5nKSB7XG4gICAgICAgICAgICB0aWNraW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltRnJhbWUuY2FsbCh3aW5kb3csICgpPT57XG4gICAgICAgICAgICAgICAgdGlja2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3NUb1VzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59XG4vKipcbiAqIERlYm91bmNlcyBjYWxsaW5nIGBmbmAgZm9yIGBkZWxheWAgbXNcbiAqLyBmdW5jdGlvbiBkZWJvdW5jZShmbiwgZGVsYXkpIHtcbiAgICBsZXQgdGltZW91dDtcbiAgICByZXR1cm4gZnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgICBpZiAoZGVsYXkpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGZuLCBkZWxheSwgYXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVsYXk7XG4gICAgfTtcbn1cbi8qKlxuICogQ29udmVydHMgJ3N0YXJ0JyB0byAnbGVmdCcsICdlbmQnIHRvICdyaWdodCcgYW5kIG90aGVycyB0byAnY2VudGVyJ1xuICogQHByaXZhdGVcbiAqLyBjb25zdCBfdG9MZWZ0UmlnaHRDZW50ZXIgPSAoYWxpZ24pPT5hbGlnbiA9PT0gJ3N0YXJ0JyA/ICdsZWZ0JyA6IGFsaWduID09PSAnZW5kJyA/ICdyaWdodCcgOiAnY2VudGVyJztcbi8qKlxuICogUmV0dXJucyBgc3RhcnRgLCBgZW5kYCBvciBgKHN0YXJ0ICsgZW5kKSAvIDJgIGRlcGVuZGluZyBvbiBgYWxpZ25gLiBEZWZhdWx0cyB0byBgY2VudGVyYFxuICogQHByaXZhdGVcbiAqLyBjb25zdCBfYWxpZ25TdGFydEVuZCA9IChhbGlnbiwgc3RhcnQsIGVuZCk9PmFsaWduID09PSAnc3RhcnQnID8gc3RhcnQgOiBhbGlnbiA9PT0gJ2VuZCcgPyBlbmQgOiAoc3RhcnQgKyBlbmQpIC8gMjtcbi8qKlxuICogUmV0dXJucyBgbGVmdGAsIGByaWdodGAgb3IgYChsZWZ0ICsgcmlnaHQpIC8gMmAgZGVwZW5kaW5nIG9uIGBhbGlnbmAuIERlZmF1bHRzIHRvIGBsZWZ0YFxuICogQHByaXZhdGVcbiAqLyBjb25zdCBfdGV4dFggPSAoYWxpZ24sIGxlZnQsIHJpZ2h0LCBydGwpPT57XG4gICAgY29uc3QgY2hlY2sgPSBydGwgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgIHJldHVybiBhbGlnbiA9PT0gY2hlY2sgPyByaWdodCA6IGFsaWduID09PSAnY2VudGVyJyA/IChsZWZ0ICsgcmlnaHQpIC8gMiA6IGxlZnQ7XG59O1xuLyoqXG4gKiBSZXR1cm4gc3RhcnQgYW5kIGNvdW50IG9mIHZpc2libGUgcG9pbnRzLlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfZ2V0U3RhcnRBbmRDb3VudE9mVmlzaWJsZVBvaW50cyhtZXRhLCBwb2ludHMsIGFuaW1hdGlvbnNEaXNhYmxlZCkge1xuICAgIGNvbnN0IHBvaW50Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIGxldCBzdGFydCA9IDA7XG4gICAgbGV0IGNvdW50ID0gcG9pbnRDb3VudDtcbiAgICBpZiAobWV0YS5fc29ydGVkKSB7XG4gICAgICAgIGNvbnN0IHsgaVNjYWxlICwgX3BhcnNlZCAgfSA9IG1ldGE7XG4gICAgICAgIGNvbnN0IGF4aXMgPSBpU2NhbGUuYXhpcztcbiAgICAgICAgY29uc3QgeyBtaW4gLCBtYXggLCBtaW5EZWZpbmVkICwgbWF4RGVmaW5lZCAgfSA9IGlTY2FsZS5nZXRVc2VyQm91bmRzKCk7XG4gICAgICAgIGlmIChtaW5EZWZpbmVkKSB7XG4gICAgICAgICAgICBzdGFydCA9IF9saW1pdFZhbHVlKE1hdGgubWluKC8vIEB0cy1leHBlY3QtZXJyb3IgTmVlZCB0byB0eXBlIF9wYXJzZWRcbiAgICAgICAgICAgIF9sb29rdXBCeUtleShfcGFyc2VkLCBheGlzLCBtaW4pLmxvLCAvLyBAdHMtZXhwZWN0LWVycm9yIE5lZWQgdG8gZml4IHR5cGVzIG9uIF9sb29rdXBCeUtleVxuICAgICAgICAgICAgYW5pbWF0aW9uc0Rpc2FibGVkID8gcG9pbnRDb3VudCA6IF9sb29rdXBCeUtleShwb2ludHMsIGF4aXMsIGlTY2FsZS5nZXRQaXhlbEZvclZhbHVlKG1pbikpLmxvKSwgMCwgcG9pbnRDb3VudCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhEZWZpbmVkKSB7XG4gICAgICAgICAgICBjb3VudCA9IF9saW1pdFZhbHVlKE1hdGgubWF4KC8vIEB0cy1leHBlY3QtZXJyb3IgTmVlZCB0byB0eXBlIF9wYXJzZWRcbiAgICAgICAgICAgIF9sb29rdXBCeUtleShfcGFyc2VkLCBpU2NhbGUuYXhpcywgbWF4LCB0cnVlKS5oaSArIDEsIC8vIEB0cy1leHBlY3QtZXJyb3IgTmVlZCB0byBmaXggdHlwZXMgb24gX2xvb2t1cEJ5S2V5XG4gICAgICAgICAgICBhbmltYXRpb25zRGlzYWJsZWQgPyAwIDogX2xvb2t1cEJ5S2V5KHBvaW50cywgYXhpcywgaVNjYWxlLmdldFBpeGVsRm9yVmFsdWUobWF4KSwgdHJ1ZSkuaGkgKyAxKSwgc3RhcnQsIHBvaW50Q291bnQpIC0gc3RhcnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb3VudCA9IHBvaW50Q291bnQgLSBzdGFydDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBzdGFydCxcbiAgICAgICAgY291bnRcbiAgICB9O1xufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHNjYWxlIHJhbmdlcyBoYXZlIGNoYW5nZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gbWV0YSAtIGRhdGFzZXQgbWV0YS5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfc2NhbGVSYW5nZXNDaGFuZ2VkKG1ldGEpIHtcbiAgICBjb25zdCB7IHhTY2FsZSAsIHlTY2FsZSAsIF9zY2FsZVJhbmdlcyAgfSA9IG1ldGE7XG4gICAgY29uc3QgbmV3UmFuZ2VzID0ge1xuICAgICAgICB4bWluOiB4U2NhbGUubWluLFxuICAgICAgICB4bWF4OiB4U2NhbGUubWF4LFxuICAgICAgICB5bWluOiB5U2NhbGUubWluLFxuICAgICAgICB5bWF4OiB5U2NhbGUubWF4XG4gICAgfTtcbiAgICBpZiAoIV9zY2FsZVJhbmdlcykge1xuICAgICAgICBtZXRhLl9zY2FsZVJhbmdlcyA9IG5ld1JhbmdlcztcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGNoYW5nZWQgPSBfc2NhbGVSYW5nZXMueG1pbiAhPT0geFNjYWxlLm1pbiB8fCBfc2NhbGVSYW5nZXMueG1heCAhPT0geFNjYWxlLm1heCB8fCBfc2NhbGVSYW5nZXMueW1pbiAhPT0geVNjYWxlLm1pbiB8fCBfc2NhbGVSYW5nZXMueW1heCAhPT0geVNjYWxlLm1heDtcbiAgICBPYmplY3QuYXNzaWduKF9zY2FsZVJhbmdlcywgbmV3UmFuZ2VzKTtcbiAgICByZXR1cm4gY2hhbmdlZDtcbn1cblxuY29uc3QgYXRFZGdlID0gKHQpPT50ID09PSAwIHx8IHQgPT09IDE7XG5jb25zdCBlbGFzdGljSW4gPSAodCwgcywgcCk9Pi0oTWF0aC5wb3coMiwgMTAgKiAodCAtPSAxKSkgKiBNYXRoLnNpbigodCAtIHMpICogVEFVIC8gcCkpO1xuY29uc3QgZWxhc3RpY091dCA9ICh0LCBzLCBwKT0+TWF0aC5wb3coMiwgLTEwICogdCkgKiBNYXRoLnNpbigodCAtIHMpICogVEFVIC8gcCkgKyAxO1xuLyoqXG4gKiBFYXNpbmcgZnVuY3Rpb25zIGFkYXB0ZWQgZnJvbSBSb2JlcnQgUGVubmVyJ3MgZWFzaW5nIGVxdWF0aW9ucy5cbiAqIEBuYW1lc3BhY2UgQ2hhcnQuaGVscGVycy5lYXNpbmcuZWZmZWN0c1xuICogQHNlZSBodHRwOi8vd3d3LnJvYmVydHBlbm5lci5jb20vZWFzaW5nL1xuICovIGNvbnN0IGVmZmVjdHMgPSB7XG4gICAgbGluZWFyOiAodCk9PnQsXG4gICAgZWFzZUluUXVhZDogKHQpPT50ICogdCxcbiAgICBlYXNlT3V0UXVhZDogKHQpPT4tdCAqICh0IC0gMiksXG4gICAgZWFzZUluT3V0UXVhZDogKHQpPT4odCAvPSAwLjUpIDwgMSA/IDAuNSAqIHQgKiB0IDogLTAuNSAqICgtLXQgKiAodCAtIDIpIC0gMSksXG4gICAgZWFzZUluQ3ViaWM6ICh0KT0+dCAqIHQgKiB0LFxuICAgIGVhc2VPdXRDdWJpYzogKHQpPT4odCAtPSAxKSAqIHQgKiB0ICsgMSxcbiAgICBlYXNlSW5PdXRDdWJpYzogKHQpPT4odCAvPSAwLjUpIDwgMSA/IDAuNSAqIHQgKiB0ICogdCA6IDAuNSAqICgodCAtPSAyKSAqIHQgKiB0ICsgMiksXG4gICAgZWFzZUluUXVhcnQ6ICh0KT0+dCAqIHQgKiB0ICogdCxcbiAgICBlYXNlT3V0UXVhcnQ6ICh0KT0+LSgodCAtPSAxKSAqIHQgKiB0ICogdCAtIDEpLFxuICAgIGVhc2VJbk91dFF1YXJ0OiAodCk9Pih0IC89IDAuNSkgPCAxID8gMC41ICogdCAqIHQgKiB0ICogdCA6IC0wLjUgKiAoKHQgLT0gMikgKiB0ICogdCAqIHQgLSAyKSxcbiAgICBlYXNlSW5RdWludDogKHQpPT50ICogdCAqIHQgKiB0ICogdCxcbiAgICBlYXNlT3V0UXVpbnQ6ICh0KT0+KHQgLT0gMSkgKiB0ICogdCAqIHQgKiB0ICsgMSxcbiAgICBlYXNlSW5PdXRRdWludDogKHQpPT4odCAvPSAwLjUpIDwgMSA/IDAuNSAqIHQgKiB0ICogdCAqIHQgKiB0IDogMC41ICogKCh0IC09IDIpICogdCAqIHQgKiB0ICogdCArIDIpLFxuICAgIGVhc2VJblNpbmU6ICh0KT0+LU1hdGguY29zKHQgKiBIQUxGX1BJKSArIDEsXG4gICAgZWFzZU91dFNpbmU6ICh0KT0+TWF0aC5zaW4odCAqIEhBTEZfUEkpLFxuICAgIGVhc2VJbk91dFNpbmU6ICh0KT0+LTAuNSAqIChNYXRoLmNvcyhQSSAqIHQpIC0gMSksXG4gICAgZWFzZUluRXhwbzogKHQpPT50ID09PSAwID8gMCA6IE1hdGgucG93KDIsIDEwICogKHQgLSAxKSksXG4gICAgZWFzZU91dEV4cG86ICh0KT0+dCA9PT0gMSA/IDEgOiAtTWF0aC5wb3coMiwgLTEwICogdCkgKyAxLFxuICAgIGVhc2VJbk91dEV4cG86ICh0KT0+YXRFZGdlKHQpID8gdCA6IHQgPCAwLjUgPyAwLjUgKiBNYXRoLnBvdygyLCAxMCAqICh0ICogMiAtIDEpKSA6IDAuNSAqICgtTWF0aC5wb3coMiwgLTEwICogKHQgKiAyIC0gMSkpICsgMiksXG4gICAgZWFzZUluQ2lyYzogKHQpPT50ID49IDEgPyB0IDogLShNYXRoLnNxcnQoMSAtIHQgKiB0KSAtIDEpLFxuICAgIGVhc2VPdXRDaXJjOiAodCk9Pk1hdGguc3FydCgxIC0gKHQgLT0gMSkgKiB0KSxcbiAgICBlYXNlSW5PdXRDaXJjOiAodCk9Pih0IC89IDAuNSkgPCAxID8gLTAuNSAqIChNYXRoLnNxcnQoMSAtIHQgKiB0KSAtIDEpIDogMC41ICogKE1hdGguc3FydCgxIC0gKHQgLT0gMikgKiB0KSArIDEpLFxuICAgIGVhc2VJbkVsYXN0aWM6ICh0KT0+YXRFZGdlKHQpID8gdCA6IGVsYXN0aWNJbih0LCAwLjA3NSwgMC4zKSxcbiAgICBlYXNlT3V0RWxhc3RpYzogKHQpPT5hdEVkZ2UodCkgPyB0IDogZWxhc3RpY091dCh0LCAwLjA3NSwgMC4zKSxcbiAgICBlYXNlSW5PdXRFbGFzdGljICh0KSB7XG4gICAgICAgIGNvbnN0IHMgPSAwLjExMjU7XG4gICAgICAgIGNvbnN0IHAgPSAwLjQ1O1xuICAgICAgICByZXR1cm4gYXRFZGdlKHQpID8gdCA6IHQgPCAwLjUgPyAwLjUgKiBlbGFzdGljSW4odCAqIDIsIHMsIHApIDogMC41ICsgMC41ICogZWxhc3RpY091dCh0ICogMiAtIDEsIHMsIHApO1xuICAgIH0sXG4gICAgZWFzZUluQmFjayAodCkge1xuICAgICAgICBjb25zdCBzID0gMS43MDE1ODtcbiAgICAgICAgcmV0dXJuIHQgKiB0ICogKChzICsgMSkgKiB0IC0gcyk7XG4gICAgfSxcbiAgICBlYXNlT3V0QmFjayAodCkge1xuICAgICAgICBjb25zdCBzID0gMS43MDE1ODtcbiAgICAgICAgcmV0dXJuICh0IC09IDEpICogdCAqICgocyArIDEpICogdCArIHMpICsgMTtcbiAgICB9LFxuICAgIGVhc2VJbk91dEJhY2sgKHQpIHtcbiAgICAgICAgbGV0IHMgPSAxLjcwMTU4O1xuICAgICAgICBpZiAoKHQgLz0gMC41KSA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiAodCAqIHQgKiAoKChzICo9IDEuNTI1KSArIDEpICogdCAtIHMpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMC41ICogKCh0IC09IDIpICogdCAqICgoKHMgKj0gMS41MjUpICsgMSkgKiB0ICsgcykgKyAyKTtcbiAgICB9LFxuICAgIGVhc2VJbkJvdW5jZTogKHQpPT4xIC0gZWZmZWN0cy5lYXNlT3V0Qm91bmNlKDEgLSB0KSxcbiAgICBlYXNlT3V0Qm91bmNlICh0KSB7XG4gICAgICAgIGNvbnN0IG0gPSA3LjU2MjU7XG4gICAgICAgIGNvbnN0IGQgPSAyLjc1O1xuICAgICAgICBpZiAodCA8IDEgLyBkKSB7XG4gICAgICAgICAgICByZXR1cm4gbSAqIHQgKiB0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0IDwgMiAvIGQpIHtcbiAgICAgICAgICAgIHJldHVybiBtICogKHQgLT0gMS41IC8gZCkgKiB0ICsgMC43NTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodCA8IDIuNSAvIGQpIHtcbiAgICAgICAgICAgIHJldHVybiBtICogKHQgLT0gMi4yNSAvIGQpICogdCArIDAuOTM3NTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbSAqICh0IC09IDIuNjI1IC8gZCkgKiB0ICsgMC45ODQzNzU7XG4gICAgfSxcbiAgICBlYXNlSW5PdXRCb3VuY2U6ICh0KT0+dCA8IDAuNSA/IGVmZmVjdHMuZWFzZUluQm91bmNlKHQgKiAyKSAqIDAuNSA6IGVmZmVjdHMuZWFzZU91dEJvdW5jZSh0ICogMiAtIDEpICogMC41ICsgMC41XG59O1xuXG5mdW5jdGlvbiBpc1BhdHRlcm5PckdyYWRpZW50KHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnW29iamVjdCBDYW52YXNQYXR0ZXJuXScgfHwgdHlwZSA9PT0gJ1tvYmplY3QgQ2FudmFzR3JhZGllbnRdJztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gY29sb3IodmFsdWUpIHtcbiAgICByZXR1cm4gaXNQYXR0ZXJuT3JHcmFkaWVudCh2YWx1ZSkgPyB2YWx1ZSA6IG5ldyBDb2xvcih2YWx1ZSk7XG59XG5mdW5jdGlvbiBnZXRIb3ZlckNvbG9yKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzUGF0dGVybk9yR3JhZGllbnQodmFsdWUpID8gdmFsdWUgOiBuZXcgQ29sb3IodmFsdWUpLnNhdHVyYXRlKDAuNSkuZGFya2VuKDAuMSkuaGV4U3RyaW5nKCk7XG59XG5cbmNvbnN0IG51bWJlcnMgPSBbXG4gICAgJ3gnLFxuICAgICd5JyxcbiAgICAnYm9yZGVyV2lkdGgnLFxuICAgICdyYWRpdXMnLFxuICAgICd0ZW5zaW9uJ1xuXTtcbmNvbnN0IGNvbG9ycyA9IFtcbiAgICAnY29sb3InLFxuICAgICdib3JkZXJDb2xvcicsXG4gICAgJ2JhY2tncm91bmRDb2xvcidcbl07XG5mdW5jdGlvbiBhcHBseUFuaW1hdGlvbnNEZWZhdWx0cyhkZWZhdWx0cykge1xuICAgIGRlZmF1bHRzLnNldCgnYW5pbWF0aW9uJywge1xuICAgICAgICBkZWxheTogdW5kZWZpbmVkLFxuICAgICAgICBkdXJhdGlvbjogMTAwMCxcbiAgICAgICAgZWFzaW5nOiAnZWFzZU91dFF1YXJ0JyxcbiAgICAgICAgZm46IHVuZGVmaW5lZCxcbiAgICAgICAgZnJvbTogdW5kZWZpbmVkLFxuICAgICAgICBsb29wOiB1bmRlZmluZWQsXG4gICAgICAgIHRvOiB1bmRlZmluZWQsXG4gICAgICAgIHR5cGU6IHVuZGVmaW5lZFxuICAgIH0pO1xuICAgIGRlZmF1bHRzLmRlc2NyaWJlKCdhbmltYXRpb24nLCB7XG4gICAgICAgIF9mYWxsYmFjazogZmFsc2UsXG4gICAgICAgIF9pbmRleGFibGU6IGZhbHNlLFxuICAgICAgICBfc2NyaXB0YWJsZTogKG5hbWUpPT5uYW1lICE9PSAnb25Qcm9ncmVzcycgJiYgbmFtZSAhPT0gJ29uQ29tcGxldGUnICYmIG5hbWUgIT09ICdmbidcbiAgICB9KTtcbiAgICBkZWZhdWx0cy5zZXQoJ2FuaW1hdGlvbnMnLCB7XG4gICAgICAgIGNvbG9yczoge1xuICAgICAgICAgICAgdHlwZTogJ2NvbG9yJyxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IGNvbG9yc1xuICAgICAgICB9LFxuICAgICAgICBudW1iZXJzOiB7XG4gICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IG51bWJlcnNcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGRlZmF1bHRzLmRlc2NyaWJlKCdhbmltYXRpb25zJywge1xuICAgICAgICBfZmFsbGJhY2s6ICdhbmltYXRpb24nXG4gICAgfSk7XG4gICAgZGVmYXVsdHMuc2V0KCd0cmFuc2l0aW9ucycsIHtcbiAgICAgICAgYWN0aXZlOiB7XG4gICAgICAgICAgICBhbmltYXRpb246IHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogNDAwXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlc2l6ZToge1xuICAgICAgICAgICAgYW5pbWF0aW9uOiB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2hvdzoge1xuICAgICAgICAgICAgYW5pbWF0aW9uczoge1xuICAgICAgICAgICAgICAgIGNvbG9yczoge1xuICAgICAgICAgICAgICAgICAgICBmcm9tOiAndHJhbnNwYXJlbnQnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGhpZGU6IHtcbiAgICAgICAgICAgIGFuaW1hdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBjb2xvcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgdG86ICd0cmFuc3BhcmVudCdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHZpc2libGU6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgICAgICAgICBlYXNpbmc6ICdsaW5lYXInLFxuICAgICAgICAgICAgICAgICAgICBmbjogKHYpPT52IHwgMFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBhcHBseUxheW91dHNEZWZhdWx0cyhkZWZhdWx0cykge1xuICAgIGRlZmF1bHRzLnNldCgnbGF5b3V0Jywge1xuICAgICAgICBhdXRvUGFkZGluZzogdHJ1ZSxcbiAgICAgICAgcGFkZGluZzoge1xuICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgICBsZWZ0OiAwXG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuY29uc3QgaW50bENhY2hlID0gbmV3IE1hcCgpO1xuZnVuY3Rpb24gZ2V0TnVtYmVyRm9ybWF0KGxvY2FsZSwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gbG9jYWxlICsgSlNPTi5zdHJpbmdpZnkob3B0aW9ucyk7XG4gICAgbGV0IGZvcm1hdHRlciA9IGludGxDYWNoZS5nZXQoY2FjaGVLZXkpO1xuICAgIGlmICghZm9ybWF0dGVyKSB7XG4gICAgICAgIGZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NhbGUsIG9wdGlvbnMpO1xuICAgICAgICBpbnRsQ2FjaGUuc2V0KGNhY2hlS2V5LCBmb3JtYXR0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0dGVyO1xufVxuZnVuY3Rpb24gZm9ybWF0TnVtYmVyKG51bSwgbG9jYWxlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGdldE51bWJlckZvcm1hdChsb2NhbGUsIG9wdGlvbnMpLmZvcm1hdChudW0pO1xufVxuXG5jb25zdCBmb3JtYXR0ZXJzID0ge1xuIHZhbHVlcyAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpID8gIHZhbHVlIDogJycgKyB2YWx1ZTtcbiAgICB9LFxuIG51bWVyaWMgKHRpY2tWYWx1ZSwgaW5kZXgsIHRpY2tzKSB7XG4gICAgICAgIGlmICh0aWNrVmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5jaGFydC5vcHRpb25zLmxvY2FsZTtcbiAgICAgICAgbGV0IG5vdGF0aW9uO1xuICAgICAgICBsZXQgZGVsdGEgPSB0aWNrVmFsdWU7XG4gICAgICAgIGlmICh0aWNrcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBjb25zdCBtYXhUaWNrID0gTWF0aC5tYXgoTWF0aC5hYnModGlja3NbMF0udmFsdWUpLCBNYXRoLmFicyh0aWNrc1t0aWNrcy5sZW5ndGggLSAxXS52YWx1ZSkpO1xuICAgICAgICAgICAgaWYgKG1heFRpY2sgPCAxZS00IHx8IG1heFRpY2sgPiAxZSsxNSkge1xuICAgICAgICAgICAgICAgIG5vdGF0aW9uID0gJ3NjaWVudGlmaWMnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsdGEgPSBjYWxjdWxhdGVEZWx0YSh0aWNrVmFsdWUsIHRpY2tzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsb2dEZWx0YSA9IGxvZzEwKE1hdGguYWJzKGRlbHRhKSk7XG4gICAgICAgIGNvbnN0IG51bURlY2ltYWwgPSBpc05hTihsb2dEZWx0YSkgPyAxIDogTWF0aC5tYXgoTWF0aC5taW4oLTEgKiBNYXRoLmZsb29yKGxvZ0RlbHRhKSwgMjApLCAwKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG5vdGF0aW9uLFxuICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBudW1EZWNpbWFsLFxuICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBudW1EZWNpbWFsXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5hc3NpZ24ob3B0aW9ucywgdGhpcy5vcHRpb25zLnRpY2tzLmZvcm1hdCk7XG4gICAgICAgIHJldHVybiBmb3JtYXROdW1iZXIodGlja1ZhbHVlLCBsb2NhbGUsIG9wdGlvbnMpO1xuICAgIH0sXG4gbG9nYXJpdGhtaWMgKHRpY2tWYWx1ZSwgaW5kZXgsIHRpY2tzKSB7XG4gICAgICAgIGlmICh0aWNrVmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVtYWluID0gdGlja3NbaW5kZXhdLnNpZ25pZmljYW5kIHx8IHRpY2tWYWx1ZSAvIE1hdGgucG93KDEwLCBNYXRoLmZsb29yKGxvZzEwKHRpY2tWYWx1ZSkpKTtcbiAgICAgICAgaWYgKFtcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAyLFxuICAgICAgICAgICAgMyxcbiAgICAgICAgICAgIDUsXG4gICAgICAgICAgICAxMCxcbiAgICAgICAgICAgIDE1XG4gICAgICAgIF0uaW5jbHVkZXMocmVtYWluKSB8fCBpbmRleCA+IDAuOCAqIHRpY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlcnMubnVtZXJpYy5jYWxsKHRoaXMsIHRpY2tWYWx1ZSwgaW5kZXgsIHRpY2tzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxufTtcbmZ1bmN0aW9uIGNhbGN1bGF0ZURlbHRhKHRpY2tWYWx1ZSwgdGlja3MpIHtcbiAgICBsZXQgZGVsdGEgPSB0aWNrcy5sZW5ndGggPiAzID8gdGlja3NbMl0udmFsdWUgLSB0aWNrc1sxXS52YWx1ZSA6IHRpY2tzWzFdLnZhbHVlIC0gdGlja3NbMF0udmFsdWU7XG4gICAgaWYgKE1hdGguYWJzKGRlbHRhKSA+PSAxICYmIHRpY2tWYWx1ZSAhPT0gTWF0aC5mbG9vcih0aWNrVmFsdWUpKSB7XG4gICAgICAgIGRlbHRhID0gdGlja1ZhbHVlIC0gTWF0aC5mbG9vcih0aWNrVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gZGVsdGE7XG59XG4gdmFyIFRpY2tzID0ge1xuICAgIGZvcm1hdHRlcnNcbn07XG5cbmZ1bmN0aW9uIGFwcGx5U2NhbGVEZWZhdWx0cyhkZWZhdWx0cykge1xuICAgIGRlZmF1bHRzLnNldCgnc2NhbGUnLCB7XG4gICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgIG9mZnNldDogZmFsc2UsXG4gICAgICAgIHJldmVyc2U6IGZhbHNlLFxuICAgICAgICBiZWdpbkF0WmVybzogZmFsc2UsXG4gYm91bmRzOiAndGlja3MnLFxuICAgICAgICBjbGlwOiB0cnVlLFxuIGdyYWNlOiAwLFxuICAgICAgICBncmlkOiB7XG4gICAgICAgICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgICAgICAgbGluZVdpZHRoOiAxLFxuICAgICAgICAgICAgZHJhd09uQ2hhcnRBcmVhOiB0cnVlLFxuICAgICAgICAgICAgZHJhd1RpY2tzOiB0cnVlLFxuICAgICAgICAgICAgdGlja0xlbmd0aDogOCxcbiAgICAgICAgICAgIHRpY2tXaWR0aDogKF9jdHgsIG9wdGlvbnMpPT5vcHRpb25zLmxpbmVXaWR0aCxcbiAgICAgICAgICAgIHRpY2tDb2xvcjogKF9jdHgsIG9wdGlvbnMpPT5vcHRpb25zLmNvbG9yLFxuICAgICAgICAgICAgb2Zmc2V0OiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBib3JkZXI6IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgICAgICBkYXNoOiBbXSxcbiAgICAgICAgICAgIGRhc2hPZmZzZXQ6IDAuMCxcbiAgICAgICAgICAgIHdpZHRoOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgICAgIHRleHQ6ICcnLFxuICAgICAgICAgICAgcGFkZGluZzoge1xuICAgICAgICAgICAgICAgIHRvcDogNCxcbiAgICAgICAgICAgICAgICBib3R0b206IDRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGlja3M6IHtcbiAgICAgICAgICAgIG1pblJvdGF0aW9uOiAwLFxuICAgICAgICAgICAgbWF4Um90YXRpb246IDUwLFxuICAgICAgICAgICAgbWlycm9yOiBmYWxzZSxcbiAgICAgICAgICAgIHRleHRTdHJva2VXaWR0aDogMCxcbiAgICAgICAgICAgIHRleHRTdHJva2VDb2xvcjogJycsXG4gICAgICAgICAgICBwYWRkaW5nOiAzLFxuICAgICAgICAgICAgZGlzcGxheTogdHJ1ZSxcbiAgICAgICAgICAgIGF1dG9Ta2lwOiB0cnVlLFxuICAgICAgICAgICAgYXV0b1NraXBQYWRkaW5nOiAzLFxuICAgICAgICAgICAgbGFiZWxPZmZzZXQ6IDAsXG4gICAgICAgICAgICBjYWxsYmFjazogVGlja3MuZm9ybWF0dGVycy52YWx1ZXMsXG4gICAgICAgICAgICBtaW5vcjoge30sXG4gICAgICAgICAgICBtYWpvcjoge30sXG4gICAgICAgICAgICBhbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICBjcm9zc0FsaWduOiAnbmVhcicsXG4gICAgICAgICAgICBzaG93TGFiZWxCYWNrZHJvcDogZmFsc2UsXG4gICAgICAgICAgICBiYWNrZHJvcENvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KScsXG4gICAgICAgICAgICBiYWNrZHJvcFBhZGRpbmc6IDJcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGRlZmF1bHRzLnJvdXRlKCdzY2FsZS50aWNrcycsICdjb2xvcicsICcnLCAnY29sb3InKTtcbiAgICBkZWZhdWx0cy5yb3V0ZSgnc2NhbGUuZ3JpZCcsICdjb2xvcicsICcnLCAnYm9yZGVyQ29sb3InKTtcbiAgICBkZWZhdWx0cy5yb3V0ZSgnc2NhbGUuYm9yZGVyJywgJ2NvbG9yJywgJycsICdib3JkZXJDb2xvcicpO1xuICAgIGRlZmF1bHRzLnJvdXRlKCdzY2FsZS50aXRsZScsICdjb2xvcicsICcnLCAnY29sb3InKTtcbiAgICBkZWZhdWx0cy5kZXNjcmliZSgnc2NhbGUnLCB7XG4gICAgICAgIF9mYWxsYmFjazogZmFsc2UsXG4gICAgICAgIF9zY3JpcHRhYmxlOiAobmFtZSk9PiFuYW1lLnN0YXJ0c1dpdGgoJ2JlZm9yZScpICYmICFuYW1lLnN0YXJ0c1dpdGgoJ2FmdGVyJykgJiYgbmFtZSAhPT0gJ2NhbGxiYWNrJyAmJiBuYW1lICE9PSAncGFyc2VyJyxcbiAgICAgICAgX2luZGV4YWJsZTogKG5hbWUpPT5uYW1lICE9PSAnYm9yZGVyRGFzaCcgJiYgbmFtZSAhPT0gJ3RpY2tCb3JkZXJEYXNoJyAmJiBuYW1lICE9PSAnZGFzaCdcbiAgICB9KTtcbiAgICBkZWZhdWx0cy5kZXNjcmliZSgnc2NhbGVzJywge1xuICAgICAgICBfZmFsbGJhY2s6ICdzY2FsZSdcbiAgICB9KTtcbiAgICBkZWZhdWx0cy5kZXNjcmliZSgnc2NhbGUudGlja3MnLCB7XG4gICAgICAgIF9zY3JpcHRhYmxlOiAobmFtZSk9Pm5hbWUgIT09ICdiYWNrZHJvcFBhZGRpbmcnICYmIG5hbWUgIT09ICdjYWxsYmFjaycsXG4gICAgICAgIF9pbmRleGFibGU6IChuYW1lKT0+bmFtZSAhPT0gJ2JhY2tkcm9wUGFkZGluZydcbiAgICB9KTtcbn1cblxuY29uc3Qgb3ZlcnJpZGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBmdW5jdGlvbiBnZXRTY29wZSQxKG5vZGUsIGtleSkge1xuICAgIGlmICgha2V5KSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBjb25zdCBrZXlzID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgZm9yKGxldCBpID0gMCwgbiA9IGtleXMubGVuZ3RoOyBpIDwgbjsgKytpKXtcbiAgICAgICAgY29uc3QgayA9IGtleXNbaV07XG4gICAgICAgIG5vZGUgPSBub2RlW2tdIHx8IChub2RlW2tdID0gT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xufVxuZnVuY3Rpb24gc2V0KHJvb3QsIHNjb3BlLCB2YWx1ZXMpIHtcbiAgICBpZiAodHlwZW9mIHNjb3BlID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gbWVyZ2UoZ2V0U2NvcGUkMShyb290LCBzY29wZSksIHZhbHVlcyk7XG4gICAgfVxuICAgIHJldHVybiBtZXJnZShnZXRTY29wZSQxKHJvb3QsICcnKSwgc2NvcGUpO1xufVxuIGNsYXNzIERlZmF1bHRzIHtcbiAgICBjb25zdHJ1Y3RvcihfZGVzY3JpcHRvcnMsIF9hcHBsaWVycyl7XG4gICAgICAgIHRoaXMuYW5pbWF0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9ICdyZ2JhKDAsMCwwLDAuMSknO1xuICAgICAgICB0aGlzLmJvcmRlckNvbG9yID0gJ3JnYmEoMCwwLDAsMC4xKSc7XG4gICAgICAgIHRoaXMuY29sb3IgPSAnIzY2Nic7XG4gICAgICAgIHRoaXMuZGF0YXNldHMgPSB7fTtcbiAgICAgICAgdGhpcy5kZXZpY2VQaXhlbFJhdGlvID0gKGNvbnRleHQpPT5jb250ZXh0LmNoYXJ0LnBsYXRmb3JtLmdldERldmljZVBpeGVsUmF0aW8oKTtcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IHt9O1xuICAgICAgICB0aGlzLmV2ZW50cyA9IFtcbiAgICAgICAgICAgICdtb3VzZW1vdmUnLFxuICAgICAgICAgICAgJ21vdXNlb3V0JyxcbiAgICAgICAgICAgICdjbGljaycsXG4gICAgICAgICAgICAndG91Y2hzdGFydCcsXG4gICAgICAgICAgICAndG91Y2htb3ZlJ1xuICAgICAgICBdO1xuICAgICAgICB0aGlzLmZvbnQgPSB7XG4gICAgICAgICAgICBmYW1pbHk6IFwiJ0hlbHZldGljYSBOZXVlJywgJ0hlbHZldGljYScsICdBcmlhbCcsIHNhbnMtc2VyaWZcIixcbiAgICAgICAgICAgIHNpemU6IDEyLFxuICAgICAgICAgICAgc3R5bGU6ICdub3JtYWwnLFxuICAgICAgICAgICAgbGluZUhlaWdodDogMS4yLFxuICAgICAgICAgICAgd2VpZ2h0OiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaG92ZXIgPSB7fTtcbiAgICAgICAgdGhpcy5ob3ZlckJhY2tncm91bmRDb2xvciA9IChjdHgsIG9wdGlvbnMpPT5nZXRIb3ZlckNvbG9yKG9wdGlvbnMuYmFja2dyb3VuZENvbG9yKTtcbiAgICAgICAgdGhpcy5ob3ZlckJvcmRlckNvbG9yID0gKGN0eCwgb3B0aW9ucyk9PmdldEhvdmVyQ29sb3Iob3B0aW9ucy5ib3JkZXJDb2xvcik7XG4gICAgICAgIHRoaXMuaG92ZXJDb2xvciA9IChjdHgsIG9wdGlvbnMpPT5nZXRIb3ZlckNvbG9yKG9wdGlvbnMuY29sb3IpO1xuICAgICAgICB0aGlzLmluZGV4QXhpcyA9ICd4JztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbiA9IHtcbiAgICAgICAgICAgIG1vZGU6ICduZWFyZXN0JyxcbiAgICAgICAgICAgIGludGVyc2VjdDogdHJ1ZSxcbiAgICAgICAgICAgIGluY2x1ZGVJbnZpc2libGU6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubWFpbnRhaW5Bc3BlY3RSYXRpbyA9IHRydWU7XG4gICAgICAgIHRoaXMub25Ib3ZlciA9IG51bGw7XG4gICAgICAgIHRoaXMub25DbGljayA9IG51bGw7XG4gICAgICAgIHRoaXMucGFyc2luZyA9IHRydWU7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IHt9O1xuICAgICAgICB0aGlzLnJlc3BvbnNpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLnNjYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnNjYWxlcyA9IHt9O1xuICAgICAgICB0aGlzLnNob3dMaW5lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kcmF3QWN0aXZlRWxlbWVudHNPblRvcCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVzY3JpYmUoX2Rlc2NyaXB0b3JzKTtcbiAgICAgICAgdGhpcy5hcHBseShfYXBwbGllcnMpO1xuICAgIH1cbiBzZXQoc2NvcGUsIHZhbHVlcykge1xuICAgICAgICByZXR1cm4gc2V0KHRoaXMsIHNjb3BlLCB2YWx1ZXMpO1xuICAgIH1cbiBnZXQoc2NvcGUpIHtcbiAgICAgICAgcmV0dXJuIGdldFNjb3BlJDEodGhpcywgc2NvcGUpO1xuICAgIH1cbiBkZXNjcmliZShzY29wZSwgdmFsdWVzKSB7XG4gICAgICAgIHJldHVybiBzZXQoZGVzY3JpcHRvcnMsIHNjb3BlLCB2YWx1ZXMpO1xuICAgIH1cbiAgICBvdmVycmlkZShzY29wZSwgdmFsdWVzKSB7XG4gICAgICAgIHJldHVybiBzZXQob3ZlcnJpZGVzLCBzY29wZSwgdmFsdWVzKTtcbiAgICB9XG4gcm91dGUoc2NvcGUsIG5hbWUsIHRhcmdldFNjb3BlLCB0YXJnZXROYW1lKSB7XG4gICAgICAgIGNvbnN0IHNjb3BlT2JqZWN0ID0gZ2V0U2NvcGUkMSh0aGlzLCBzY29wZSk7XG4gICAgICAgIGNvbnN0IHRhcmdldFNjb3BlT2JqZWN0ID0gZ2V0U2NvcGUkMSh0aGlzLCB0YXJnZXRTY29wZSk7XG4gICAgICAgIGNvbnN0IHByaXZhdGVOYW1lID0gJ18nICsgbmFtZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc2NvcGVPYmplY3QsIHtcbiAgICAgICAgICAgIFtwcml2YXRlTmFtZV06IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogc2NvcGVPYmplY3RbbmFtZV0sXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbbmFtZV06IHtcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGdldCAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsID0gdGhpc1twcml2YXRlTmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHRhcmdldFNjb3BlT2JqZWN0W3RhcmdldE5hbWVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QobG9jYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGFyZ2V0LCBsb2NhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlT3JEZWZhdWx0KGxvY2FsLCB0YXJnZXQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0ICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW3ByaXZhdGVOYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFwcGx5KGFwcGxpZXJzKSB7XG4gICAgICAgIGFwcGxpZXJzLmZvckVhY2goKGFwcGx5KT0+YXBwbHkodGhpcykpO1xuICAgIH1cbn1cbnZhciBkZWZhdWx0cyA9IC8qICNfX1BVUkVfXyAqLyBuZXcgRGVmYXVsdHMoe1xuICAgIF9zY3JpcHRhYmxlOiAobmFtZSk9PiFuYW1lLnN0YXJ0c1dpdGgoJ29uJyksXG4gICAgX2luZGV4YWJsZTogKG5hbWUpPT5uYW1lICE9PSAnZXZlbnRzJyxcbiAgICBob3Zlcjoge1xuICAgICAgICBfZmFsbGJhY2s6ICdpbnRlcmFjdGlvbidcbiAgICB9LFxuICAgIGludGVyYWN0aW9uOiB7XG4gICAgICAgIF9zY3JpcHRhYmxlOiBmYWxzZSxcbiAgICAgICAgX2luZGV4YWJsZTogZmFsc2VcbiAgICB9XG59LCBbXG4gICAgYXBwbHlBbmltYXRpb25zRGVmYXVsdHMsXG4gICAgYXBwbHlMYXlvdXRzRGVmYXVsdHMsXG4gICAgYXBwbHlTY2FsZURlZmF1bHRzXG5dKTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gZm9udCBvYmplY3QgaW50byBhIENTUyBmb250IHN0cmluZy5cbiAqIEBwYXJhbSBmb250IC0gQSBmb250IG9iamVjdC5cbiAqIEByZXR1cm4gVGhlIENTUyBmb250IHN0cmluZy4gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mb250XG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIHRvRm9udFN0cmluZyhmb250KSB7XG4gICAgaWYgKCFmb250IHx8IGlzTnVsbE9yVW5kZWYoZm9udC5zaXplKSB8fCBpc051bGxPclVuZGVmKGZvbnQuZmFtaWx5KSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChmb250LnN0eWxlID8gZm9udC5zdHlsZSArICcgJyA6ICcnKSArIChmb250LndlaWdodCA/IGZvbnQud2VpZ2h0ICsgJyAnIDogJycpICsgZm9udC5zaXplICsgJ3B4ICcgKyBmb250LmZhbWlseTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfbWVhc3VyZVRleHQoY3R4LCBkYXRhLCBnYywgbG9uZ2VzdCwgc3RyaW5nKSB7XG4gICAgbGV0IHRleHRXaWR0aCA9IGRhdGFbc3RyaW5nXTtcbiAgICBpZiAoIXRleHRXaWR0aCkge1xuICAgICAgICB0ZXh0V2lkdGggPSBkYXRhW3N0cmluZ10gPSBjdHgubWVhc3VyZVRleHQoc3RyaW5nKS53aWR0aDtcbiAgICAgICAgZ2MucHVzaChzdHJpbmcpO1xuICAgIH1cbiAgICBpZiAodGV4dFdpZHRoID4gbG9uZ2VzdCkge1xuICAgICAgICBsb25nZXN0ID0gdGV4dFdpZHRoO1xuICAgIH1cbiAgICByZXR1cm4gbG9uZ2VzdDtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqLyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gX2xvbmdlc3RUZXh0KGN0eCwgZm9udCwgYXJyYXlPZlRoaW5ncywgY2FjaGUpIHtcbiAgICBjYWNoZSA9IGNhY2hlIHx8IHt9O1xuICAgIGxldCBkYXRhID0gY2FjaGUuZGF0YSA9IGNhY2hlLmRhdGEgfHwge307XG4gICAgbGV0IGdjID0gY2FjaGUuZ2FyYmFnZUNvbGxlY3QgPSBjYWNoZS5nYXJiYWdlQ29sbGVjdCB8fCBbXTtcbiAgICBpZiAoY2FjaGUuZm9udCAhPT0gZm9udCkge1xuICAgICAgICBkYXRhID0gY2FjaGUuZGF0YSA9IHt9O1xuICAgICAgICBnYyA9IGNhY2hlLmdhcmJhZ2VDb2xsZWN0ID0gW107XG4gICAgICAgIGNhY2hlLmZvbnQgPSBmb250O1xuICAgIH1cbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC5mb250ID0gZm9udDtcbiAgICBsZXQgbG9uZ2VzdCA9IDA7XG4gICAgY29uc3QgaWxlbiA9IGFycmF5T2ZUaGluZ3MubGVuZ3RoO1xuICAgIGxldCBpLCBqLCBqbGVuLCB0aGluZywgbmVzdGVkVGhpbmc7XG4gICAgZm9yKGkgPSAwOyBpIDwgaWxlbjsgaSsrKXtcbiAgICAgICAgdGhpbmcgPSBhcnJheU9mVGhpbmdzW2ldO1xuICAgICAgICAvLyBVbmRlZmluZWQgc3RyaW5ncyBhbmQgYXJyYXlzIHNob3VsZCBub3QgYmUgbWVhc3VyZWRcbiAgICAgICAgaWYgKHRoaW5nICE9PSB1bmRlZmluZWQgJiYgdGhpbmcgIT09IG51bGwgJiYgIWlzQXJyYXkodGhpbmcpKSB7XG4gICAgICAgICAgICBsb25nZXN0ID0gX21lYXN1cmVUZXh0KGN0eCwgZGF0YSwgZ2MsIGxvbmdlc3QsIHRoaW5nKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KHRoaW5nKSkge1xuICAgICAgICAgICAgLy8gaWYgaXQgaXMgYW4gYXJyYXkgbGV0cyBtZWFzdXJlIGVhY2ggZWxlbWVudFxuICAgICAgICAgICAgLy8gdG8gZG8gbWF5YmUgc2ltcGxpZnkgdGhpcyBmdW5jdGlvbiBhIGJpdCBzbyB3ZSBjYW4gZG8gdGhpcyBtb3JlIHJlY3Vyc2l2ZWx5P1xuICAgICAgICAgICAgZm9yKGogPSAwLCBqbGVuID0gdGhpbmcubGVuZ3RoOyBqIDwgamxlbjsgaisrKXtcbiAgICAgICAgICAgICAgICBuZXN0ZWRUaGluZyA9IHRoaW5nW2pdO1xuICAgICAgICAgICAgICAgIC8vIFVuZGVmaW5lZCBzdHJpbmdzIGFuZCBhcnJheXMgc2hvdWxkIG5vdCBiZSBtZWFzdXJlZFxuICAgICAgICAgICAgICAgIGlmIChuZXN0ZWRUaGluZyAhPT0gdW5kZWZpbmVkICYmIG5lc3RlZFRoaW5nICE9PSBudWxsICYmICFpc0FycmF5KG5lc3RlZFRoaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICBsb25nZXN0ID0gX21lYXN1cmVUZXh0KGN0eCwgZGF0YSwgZ2MsIGxvbmdlc3QsIG5lc3RlZFRoaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3R4LnJlc3RvcmUoKTtcbiAgICBjb25zdCBnY0xlbiA9IGdjLmxlbmd0aCAvIDI7XG4gICAgaWYgKGdjTGVuID4gYXJyYXlPZlRoaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgZ2NMZW47IGkrKyl7XG4gICAgICAgICAgICBkZWxldGUgZGF0YVtnY1tpXV07XG4gICAgICAgIH1cbiAgICAgICAgZ2Muc3BsaWNlKDAsIGdjTGVuKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvbmdlc3Q7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGFsaWduZWQgcGl4ZWwgdmFsdWUgdG8gYXZvaWQgYW50aS1hbGlhc2luZyBibHVyXG4gKiBAcGFyYW0gY2hhcnQgLSBUaGUgY2hhcnQgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGl4ZWwgLSBBIHBpeGVsIHZhbHVlLlxuICogQHBhcmFtIHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBlbGVtZW50LlxuICogQHJldHVybnMgVGhlIGFsaWduZWQgcGl4ZWwgdmFsdWUuXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9hbGlnblBpeGVsKGNoYXJ0LCBwaXhlbCwgd2lkdGgpIHtcbiAgICBjb25zdCBkZXZpY2VQaXhlbFJhdGlvID0gY2hhcnQuY3VycmVudERldmljZVBpeGVsUmF0aW87XG4gICAgY29uc3QgaGFsZldpZHRoID0gd2lkdGggIT09IDAgPyBNYXRoLm1heCh3aWR0aCAvIDIsIDAuNSkgOiAwO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKChwaXhlbCAtIGhhbGZXaWR0aCkgKiBkZXZpY2VQaXhlbFJhdGlvKSAvIGRldmljZVBpeGVsUmF0aW8gKyBoYWxmV2lkdGg7XG59XG4vKipcbiAqIENsZWFycyB0aGUgZW50aXJlIGNhbnZhcy5cbiAqLyBmdW5jdGlvbiBjbGVhckNhbnZhcyhjYW52YXMsIGN0eCkge1xuICAgIGlmICghY3R4ICYmICFjYW52YXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdHggPSBjdHggfHwgY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgY3R4LnNhdmUoKTtcbiAgICAvLyBjYW52YXMud2lkdGggYW5kIGNhbnZhcy5oZWlnaHQgZG8gbm90IGNvbnNpZGVyIHRoZSBjYW52YXMgdHJhbnNmb3JtLFxuICAgIC8vIHdoaWxlIGNsZWFyUmVjdCBkb2VzXG4gICAgY3R4LnJlc2V0VHJhbnNmb3JtKCk7XG4gICAgY3R4LmNsZWFyUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgIGN0eC5yZXN0b3JlKCk7XG59XG5mdW5jdGlvbiBkcmF3UG9pbnQoY3R4LCBvcHRpb25zLCB4LCB5KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgIGRyYXdQb2ludExlZ2VuZChjdHgsIG9wdGlvbnMsIHgsIHksIG51bGwpO1xufVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIGRyYXdQb2ludExlZ2VuZChjdHgsIG9wdGlvbnMsIHgsIHksIHcpIHtcbiAgICBsZXQgdHlwZSwgeE9mZnNldCwgeU9mZnNldCwgc2l6ZSwgY29ybmVyUmFkaXVzLCB3aWR0aCwgeE9mZnNldFcsIHlPZmZzZXRXO1xuICAgIGNvbnN0IHN0eWxlID0gb3B0aW9ucy5wb2ludFN0eWxlO1xuICAgIGNvbnN0IHJvdGF0aW9uID0gb3B0aW9ucy5yb3RhdGlvbjtcbiAgICBjb25zdCByYWRpdXMgPSBvcHRpb25zLnJhZGl1cztcbiAgICBsZXQgcmFkID0gKHJvdGF0aW9uIHx8IDApICogUkFEX1BFUl9ERUc7XG4gICAgaWYgKHN0eWxlICYmIHR5cGVvZiBzdHlsZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdHlwZSA9IHN0eWxlLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmICh0eXBlID09PSAnW29iamVjdCBIVE1MSW1hZ2VFbGVtZW50XScgfHwgdHlwZSA9PT0gJ1tvYmplY3QgSFRNTENhbnZhc0VsZW1lbnRdJykge1xuICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgIGN0eC50cmFuc2xhdGUoeCwgeSk7XG4gICAgICAgICAgICBjdHgucm90YXRlKHJhZCk7XG4gICAgICAgICAgICBjdHguZHJhd0ltYWdlKHN0eWxlLCAtc3R5bGUud2lkdGggLyAyLCAtc3R5bGUuaGVpZ2h0IC8gMiwgc3R5bGUud2lkdGgsIHN0eWxlLmhlaWdodCk7XG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc05hTihyYWRpdXMpIHx8IHJhZGl1cyA8PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIHN3aXRjaChzdHlsZSl7XG4gICAgICAgIC8vIERlZmF1bHQgaW5jbHVkZXMgY2lyY2xlXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodykge1xuICAgICAgICAgICAgICAgIGN0eC5lbGxpcHNlKHgsIHksIHcgLyAyLCByYWRpdXMsIDAsIDAsIFRBVSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN0eC5hcmMoeCwgeSwgcmFkaXVzLCAwLCBUQVUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RyaWFuZ2xlJzpcbiAgICAgICAgICAgIHdpZHRoID0gdyA/IHcgLyAyIDogcmFkaXVzO1xuICAgICAgICAgICAgY3R4Lm1vdmVUbyh4ICsgTWF0aC5zaW4ocmFkKSAqIHdpZHRoLCB5IC0gTWF0aC5jb3MocmFkKSAqIHJhZGl1cyk7XG4gICAgICAgICAgICByYWQgKz0gVFdPX1RISVJEU19QSTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIE1hdGguc2luKHJhZCkgKiB3aWR0aCwgeSAtIE1hdGguY29zKHJhZCkgKiByYWRpdXMpO1xuICAgICAgICAgICAgcmFkICs9IFRXT19USElSRFNfUEk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHggKyBNYXRoLnNpbihyYWQpICogd2lkdGgsIHkgLSBNYXRoLmNvcyhyYWQpICogcmFkaXVzKTtcbiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyZWN0Um91bmRlZCc6XG4gICAgICAgICAgICAvLyBOT1RFOiB0aGUgcm91bmRlZCByZWN0IGltcGxlbWVudGF0aW9uIGNoYW5nZWQgdG8gdXNlIGBhcmNgIGluc3RlYWQgb2ZcbiAgICAgICAgICAgIC8vIGBxdWFkcmF0aWNDdXJ2ZVRvYCBzaW5jZSBpdCBnZW5lcmF0ZXMgYmV0dGVyIHJlc3VsdHMgd2hlbiByZWN0IGlzXG4gICAgICAgICAgICAvLyBhbG1vc3QgYSBjaXJjbGUuIDAuNTE2IChpbnN0ZWFkIG9mIDAuNSkgcHJvZHVjZXMgcmVzdWx0cyB3aXRoIHZpc3VhbGx5XG4gICAgICAgICAgICAvLyBjbG9zZXIgcHJvcG9ydGlvbiB0byB0aGUgcHJldmlvdXMgaW1wbCBhbmQgaXQgaXMgaW5zY3JpYmVkIGluIHRoZVxuICAgICAgICAgICAgLy8gY2lyY2xlIHdpdGggYHJhZGl1c2AuIEZvciBtb3JlIGRldGFpbHMsIHNlZSB0aGUgZm9sbG93aW5nIFBSczpcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFydGpzL0NoYXJ0LmpzL2lzc3Vlcy81NTk3XG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvNTg1OFxuICAgICAgICAgICAgY29ybmVyUmFkaXVzID0gcmFkaXVzICogMC41MTY7XG4gICAgICAgICAgICBzaXplID0gcmFkaXVzIC0gY29ybmVyUmFkaXVzO1xuICAgICAgICAgICAgeE9mZnNldCA9IE1hdGguY29zKHJhZCArIFFVQVJURVJfUEkpICogc2l6ZTtcbiAgICAgICAgICAgIHhPZmZzZXRXID0gTWF0aC5jb3MocmFkICsgUVVBUlRFUl9QSSkgKiAodyA/IHcgLyAyIC0gY29ybmVyUmFkaXVzIDogc2l6ZSk7XG4gICAgICAgICAgICB5T2Zmc2V0ID0gTWF0aC5zaW4ocmFkICsgUVVBUlRFUl9QSSkgKiBzaXplO1xuICAgICAgICAgICAgeU9mZnNldFcgPSBNYXRoLnNpbihyYWQgKyBRVUFSVEVSX1BJKSAqICh3ID8gdyAvIDIgLSBjb3JuZXJSYWRpdXMgOiBzaXplKTtcbiAgICAgICAgICAgIGN0eC5hcmMoeCAtIHhPZmZzZXRXLCB5IC0geU9mZnNldCwgY29ybmVyUmFkaXVzLCByYWQgLSBQSSwgcmFkIC0gSEFMRl9QSSk7XG4gICAgICAgICAgICBjdHguYXJjKHggKyB5T2Zmc2V0VywgeSAtIHhPZmZzZXQsIGNvcm5lclJhZGl1cywgcmFkIC0gSEFMRl9QSSwgcmFkKTtcbiAgICAgICAgICAgIGN0eC5hcmMoeCArIHhPZmZzZXRXLCB5ICsgeU9mZnNldCwgY29ybmVyUmFkaXVzLCByYWQsIHJhZCArIEhBTEZfUEkpO1xuICAgICAgICAgICAgY3R4LmFyYyh4IC0geU9mZnNldFcsIHkgKyB4T2Zmc2V0LCBjb3JuZXJSYWRpdXMsIHJhZCArIEhBTEZfUEksIHJhZCArIFBJKTtcbiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyZWN0JzpcbiAgICAgICAgICAgIGlmICghcm90YXRpb24pIHtcbiAgICAgICAgICAgICAgICBzaXplID0gTWF0aC5TUVJUMV8yICogcmFkaXVzO1xuICAgICAgICAgICAgICAgIHdpZHRoID0gdyA/IHcgLyAyIDogc2l6ZTtcbiAgICAgICAgICAgICAgICBjdHgucmVjdCh4IC0gd2lkdGgsIHkgLSBzaXplLCAyICogd2lkdGgsIDIgKiBzaXplKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJhZCArPSBRVUFSVEVSX1BJO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovIGNhc2UgJ3JlY3RSb3QnOlxuICAgICAgICAgICAgeE9mZnNldFcgPSBNYXRoLmNvcyhyYWQpICogKHcgPyB3IC8gMiA6IHJhZGl1cyk7XG4gICAgICAgICAgICB4T2Zmc2V0ID0gTWF0aC5jb3MocmFkKSAqIHJhZGl1cztcbiAgICAgICAgICAgIHlPZmZzZXQgPSBNYXRoLnNpbihyYWQpICogcmFkaXVzO1xuICAgICAgICAgICAgeU9mZnNldFcgPSBNYXRoLnNpbihyYWQpICogKHcgPyB3IC8gMiA6IHJhZGl1cyk7XG4gICAgICAgICAgICBjdHgubW92ZVRvKHggLSB4T2Zmc2V0VywgeSAtIHlPZmZzZXQpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4ICsgeU9mZnNldFcsIHkgLSB4T2Zmc2V0KTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIHhPZmZzZXRXLCB5ICsgeU9mZnNldCk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHggLSB5T2Zmc2V0VywgeSArIHhPZmZzZXQpO1xuICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Nyb3NzUm90JzpcbiAgICAgICAgICAgIHJhZCArPSBRVUFSVEVSX1BJO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovIGNhc2UgJ2Nyb3NzJzpcbiAgICAgICAgICAgIHhPZmZzZXRXID0gTWF0aC5jb3MocmFkKSAqICh3ID8gdyAvIDIgOiByYWRpdXMpO1xuICAgICAgICAgICAgeE9mZnNldCA9IE1hdGguY29zKHJhZCkgKiByYWRpdXM7XG4gICAgICAgICAgICB5T2Zmc2V0ID0gTWF0aC5zaW4ocmFkKSAqIHJhZGl1cztcbiAgICAgICAgICAgIHlPZmZzZXRXID0gTWF0aC5zaW4ocmFkKSAqICh3ID8gdyAvIDIgOiByYWRpdXMpO1xuICAgICAgICAgICAgY3R4Lm1vdmVUbyh4IC0geE9mZnNldFcsIHkgLSB5T2Zmc2V0KTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIHhPZmZzZXRXLCB5ICsgeU9mZnNldCk7XG4gICAgICAgICAgICBjdHgubW92ZVRvKHggKyB5T2Zmc2V0VywgeSAtIHhPZmZzZXQpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4IC0geU9mZnNldFcsIHkgKyB4T2Zmc2V0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzdGFyJzpcbiAgICAgICAgICAgIHhPZmZzZXRXID0gTWF0aC5jb3MocmFkKSAqICh3ID8gdyAvIDIgOiByYWRpdXMpO1xuICAgICAgICAgICAgeE9mZnNldCA9IE1hdGguY29zKHJhZCkgKiByYWRpdXM7XG4gICAgICAgICAgICB5T2Zmc2V0ID0gTWF0aC5zaW4ocmFkKSAqIHJhZGl1cztcbiAgICAgICAgICAgIHlPZmZzZXRXID0gTWF0aC5zaW4ocmFkKSAqICh3ID8gdyAvIDIgOiByYWRpdXMpO1xuICAgICAgICAgICAgY3R4Lm1vdmVUbyh4IC0geE9mZnNldFcsIHkgLSB5T2Zmc2V0KTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIHhPZmZzZXRXLCB5ICsgeU9mZnNldCk7XG4gICAgICAgICAgICBjdHgubW92ZVRvKHggKyB5T2Zmc2V0VywgeSAtIHhPZmZzZXQpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4IC0geU9mZnNldFcsIHkgKyB4T2Zmc2V0KTtcbiAgICAgICAgICAgIHJhZCArPSBRVUFSVEVSX1BJO1xuICAgICAgICAgICAgeE9mZnNldFcgPSBNYXRoLmNvcyhyYWQpICogKHcgPyB3IC8gMiA6IHJhZGl1cyk7XG4gICAgICAgICAgICB4T2Zmc2V0ID0gTWF0aC5jb3MocmFkKSAqIHJhZGl1cztcbiAgICAgICAgICAgIHlPZmZzZXQgPSBNYXRoLnNpbihyYWQpICogcmFkaXVzO1xuICAgICAgICAgICAgeU9mZnNldFcgPSBNYXRoLnNpbihyYWQpICogKHcgPyB3IC8gMiA6IHJhZGl1cyk7XG4gICAgICAgICAgICBjdHgubW92ZVRvKHggLSB4T2Zmc2V0VywgeSAtIHlPZmZzZXQpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4ICsgeE9mZnNldFcsIHkgKyB5T2Zmc2V0KTtcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oeCArIHlPZmZzZXRXLCB5IC0geE9mZnNldCk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHggLSB5T2Zmc2V0VywgeSArIHhPZmZzZXQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2xpbmUnOlxuICAgICAgICAgICAgeE9mZnNldCA9IHcgPyB3IC8gMiA6IE1hdGguY29zKHJhZCkgKiByYWRpdXM7XG4gICAgICAgICAgICB5T2Zmc2V0ID0gTWF0aC5zaW4ocmFkKSAqIHJhZGl1cztcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oeCAtIHhPZmZzZXQsIHkgLSB5T2Zmc2V0KTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIHhPZmZzZXQsIHkgKyB5T2Zmc2V0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkYXNoJzpcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oeCwgeSk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHggKyBNYXRoLmNvcyhyYWQpICogKHcgPyB3IC8gMiA6IHJhZGl1cyksIHkgKyBNYXRoLnNpbihyYWQpICogcmFkaXVzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIGZhbHNlOlxuICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGN0eC5maWxsKCk7XG4gICAgaWYgKG9wdGlvbnMuYm9yZGVyV2lkdGggPiAwKSB7XG4gICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICB9XG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9pbnQgaXMgaW5zaWRlIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBwb2ludCAtIFRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0gYXJlYSAtIFRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBtYXJnaW4gLSBhbGxvd2VkIG1hcmdpblxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfaXNQb2ludEluQXJlYShwb2ludCwgYXJlYSwgbWFyZ2luKSB7XG4gICAgbWFyZ2luID0gbWFyZ2luIHx8IDAuNTsgLy8gbWFyZ2luIC0gZGVmYXVsdCBpcyB0byBtYXRjaCByb3VuZGVkIGRlY2ltYWxzXG4gICAgcmV0dXJuICFhcmVhIHx8IHBvaW50ICYmIHBvaW50LnggPiBhcmVhLmxlZnQgLSBtYXJnaW4gJiYgcG9pbnQueCA8IGFyZWEucmlnaHQgKyBtYXJnaW4gJiYgcG9pbnQueSA+IGFyZWEudG9wIC0gbWFyZ2luICYmIHBvaW50LnkgPCBhcmVhLmJvdHRvbSArIG1hcmdpbjtcbn1cbmZ1bmN0aW9uIGNsaXBBcmVhKGN0eCwgYXJlYSkge1xuICAgIGN0eC5zYXZlKCk7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGN0eC5yZWN0KGFyZWEubGVmdCwgYXJlYS50b3AsIGFyZWEucmlnaHQgLSBhcmVhLmxlZnQsIGFyZWEuYm90dG9tIC0gYXJlYS50b3ApO1xuICAgIGN0eC5jbGlwKCk7XG59XG5mdW5jdGlvbiB1bmNsaXBBcmVhKGN0eCkge1xuICAgIGN0eC5yZXN0b3JlKCk7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX3N0ZXBwZWRMaW5lVG8oY3R4LCBwcmV2aW91cywgdGFyZ2V0LCBmbGlwLCBtb2RlKSB7XG4gICAgaWYgKCFwcmV2aW91cykge1xuICAgICAgICByZXR1cm4gY3R4LmxpbmVUbyh0YXJnZXQueCwgdGFyZ2V0LnkpO1xuICAgIH1cbiAgICBpZiAobW9kZSA9PT0gJ21pZGRsZScpIHtcbiAgICAgICAgY29uc3QgbWlkcG9pbnQgPSAocHJldmlvdXMueCArIHRhcmdldC54KSAvIDIuMDtcbiAgICAgICAgY3R4LmxpbmVUbyhtaWRwb2ludCwgcHJldmlvdXMueSk7XG4gICAgICAgIGN0eC5saW5lVG8obWlkcG9pbnQsIHRhcmdldC55KTtcbiAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdhZnRlcicgIT09ICEhZmxpcCkge1xuICAgICAgICBjdHgubGluZVRvKHByZXZpb3VzLngsIHRhcmdldC55KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjdHgubGluZVRvKHRhcmdldC54LCBwcmV2aW91cy55KTtcbiAgICB9XG4gICAgY3R4LmxpbmVUbyh0YXJnZXQueCwgdGFyZ2V0LnkpO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9iZXppZXJDdXJ2ZVRvKGN0eCwgcHJldmlvdXMsIHRhcmdldCwgZmxpcCkge1xuICAgIGlmICghcHJldmlvdXMpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5saW5lVG8odGFyZ2V0LngsIHRhcmdldC55KTtcbiAgICB9XG4gICAgY3R4LmJlemllckN1cnZlVG8oZmxpcCA/IHByZXZpb3VzLmNwMXggOiBwcmV2aW91cy5jcDJ4LCBmbGlwID8gcHJldmlvdXMuY3AxeSA6IHByZXZpb3VzLmNwMnksIGZsaXAgPyB0YXJnZXQuY3AyeCA6IHRhcmdldC5jcDF4LCBmbGlwID8gdGFyZ2V0LmNwMnkgOiB0YXJnZXQuY3AxeSwgdGFyZ2V0LngsIHRhcmdldC55KTtcbn1cbmZ1bmN0aW9uIHNldFJlbmRlck9wdHMoY3R4LCBvcHRzKSB7XG4gICAgaWYgKG9wdHMudHJhbnNsYXRpb24pIHtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZShvcHRzLnRyYW5zbGF0aW9uWzBdLCBvcHRzLnRyYW5zbGF0aW9uWzFdKTtcbiAgICB9XG4gICAgaWYgKCFpc051bGxPclVuZGVmKG9wdHMucm90YXRpb24pKSB7XG4gICAgICAgIGN0eC5yb3RhdGUob3B0cy5yb3RhdGlvbik7XG4gICAgfVxuICAgIGlmIChvcHRzLmNvbG9yKSB7XG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBvcHRzLmNvbG9yO1xuICAgIH1cbiAgICBpZiAob3B0cy50ZXh0QWxpZ24pIHtcbiAgICAgICAgY3R4LnRleHRBbGlnbiA9IG9wdHMudGV4dEFsaWduO1xuICAgIH1cbiAgICBpZiAob3B0cy50ZXh0QmFzZWxpbmUpIHtcbiAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9IG9wdHMudGV4dEJhc2VsaW5lO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlY29yYXRlVGV4dChjdHgsIHgsIHksIGxpbmUsIG9wdHMpIHtcbiAgICBpZiAob3B0cy5zdHJpa2V0aHJvdWdoIHx8IG9wdHMudW5kZXJsaW5lKSB7XG4gICAgICAgIC8qKlxuICAgICAqIE5vdyB0aGF0IElFMTEgc3VwcG9ydCBoYXMgYmVlbiBkcm9wcGVkLCB3ZSBjYW4gdXNlIG1vcmVcbiAgICAgKiBvZiB0aGUgVGV4dE1ldHJpY3Mgb2JqZWN0LiBUaGUgYWN0dWFsIGJvdW5kaW5nIGJveGVzXG4gICAgICogYXJlIHVuZmxhZ2dlZCBpbiBDaHJvbWUsIEZpcmVmb3gsIEVkZ2UsIGFuZCBTYWZhcmkgc28gdGhleVxuICAgICAqIGNhbiBiZSBzYWZlbHkgdXNlZC5cbiAgICAgKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1RleHRNZXRyaWNzI0Jyb3dzZXJfY29tcGF0aWJpbGl0eVxuICAgICAqLyBjb25zdCBtZXRyaWNzID0gY3R4Lm1lYXN1cmVUZXh0KGxpbmUpO1xuICAgICAgICBjb25zdCBsZWZ0ID0geCAtIG1ldHJpY3MuYWN0dWFsQm91bmRpbmdCb3hMZWZ0O1xuICAgICAgICBjb25zdCByaWdodCA9IHggKyBtZXRyaWNzLmFjdHVhbEJvdW5kaW5nQm94UmlnaHQ7XG4gICAgICAgIGNvbnN0IHRvcCA9IHkgLSBtZXRyaWNzLmFjdHVhbEJvdW5kaW5nQm94QXNjZW50O1xuICAgICAgICBjb25zdCBib3R0b20gPSB5ICsgbWV0cmljcy5hY3R1YWxCb3VuZGluZ0JveERlc2NlbnQ7XG4gICAgICAgIGNvbnN0IHlEZWNvcmF0aW9uID0gb3B0cy5zdHJpa2V0aHJvdWdoID8gKHRvcCArIGJvdHRvbSkgLyAyIDogYm90dG9tO1xuICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBjdHguZmlsbFN0eWxlO1xuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGN0eC5saW5lV2lkdGggPSBvcHRzLmRlY29yYXRpb25XaWR0aCB8fCAyO1xuICAgICAgICBjdHgubW92ZVRvKGxlZnQsIHlEZWNvcmF0aW9uKTtcbiAgICAgICAgY3R4LmxpbmVUbyhyaWdodCwgeURlY29yYXRpb24pO1xuICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZHJhd0JhY2tkcm9wKGN0eCwgb3B0cykge1xuICAgIGNvbnN0IG9sZENvbG9yID0gY3R4LmZpbGxTdHlsZTtcbiAgICBjdHguZmlsbFN0eWxlID0gb3B0cy5jb2xvcjtcbiAgICBjdHguZmlsbFJlY3Qob3B0cy5sZWZ0LCBvcHRzLnRvcCwgb3B0cy53aWR0aCwgb3B0cy5oZWlnaHQpO1xuICAgIGN0eC5maWxsU3R5bGUgPSBvbGRDb2xvcjtcbn1cbi8qKlxuICogUmVuZGVyIHRleHQgb250byB0aGUgY2FudmFzXG4gKi8gZnVuY3Rpb24gcmVuZGVyVGV4dChjdHgsIHRleHQsIHgsIHksIGZvbnQsIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IGxpbmVzID0gaXNBcnJheSh0ZXh0KSA/IHRleHQgOiBbXG4gICAgICAgIHRleHRcbiAgICBdO1xuICAgIGNvbnN0IHN0cm9rZSA9IG9wdHMuc3Ryb2tlV2lkdGggPiAwICYmIG9wdHMuc3Ryb2tlQ29sb3IgIT09ICcnO1xuICAgIGxldCBpLCBsaW5lO1xuICAgIGN0eC5zYXZlKCk7XG4gICAgY3R4LmZvbnQgPSBmb250LnN0cmluZztcbiAgICBzZXRSZW5kZXJPcHRzKGN0eCwgb3B0cyk7XG4gICAgZm9yKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpe1xuICAgICAgICBsaW5lID0gbGluZXNbaV07XG4gICAgICAgIGlmIChvcHRzLmJhY2tkcm9wKSB7XG4gICAgICAgICAgICBkcmF3QmFja2Ryb3AoY3R4LCBvcHRzLmJhY2tkcm9wKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3Ryb2tlKSB7XG4gICAgICAgICAgICBpZiAob3B0cy5zdHJva2VDb2xvcikge1xuICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IG9wdHMuc3Ryb2tlQ29sb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYob3B0cy5zdHJva2VXaWR0aCkpIHtcbiAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gb3B0cy5zdHJva2VXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN0eC5zdHJva2VUZXh0KGxpbmUsIHgsIHksIG9wdHMubWF4V2lkdGgpO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5maWxsVGV4dChsaW5lLCB4LCB5LCBvcHRzLm1heFdpZHRoKTtcbiAgICAgICAgZGVjb3JhdGVUZXh0KGN0eCwgeCwgeSwgbGluZSwgb3B0cyk7XG4gICAgICAgIHkgKz0gTnVtYmVyKGZvbnQubGluZUhlaWdodCk7XG4gICAgfVxuICAgIGN0eC5yZXN0b3JlKCk7XG59XG4vKipcbiAqIEFkZCBhIHBhdGggb2YgYSByZWN0YW5nbGUgd2l0aCByb3VuZGVkIGNvcm5lcnMgdG8gdGhlIGN1cnJlbnQgc3ViLXBhdGhcbiAqIEBwYXJhbSBjdHggLSBDb250ZXh0XG4gKiBAcGFyYW0gcmVjdCAtIEJvdW5kaW5nIHJlY3RcbiAqLyBmdW5jdGlvbiBhZGRSb3VuZGVkUmVjdFBhdGgoY3R4LCByZWN0KSB7XG4gICAgY29uc3QgeyB4ICwgeSAsIHcgLCBoICwgcmFkaXVzICB9ID0gcmVjdDtcbiAgICAvLyB0b3AgbGVmdCBhcmNcbiAgICBjdHguYXJjKHggKyByYWRpdXMudG9wTGVmdCwgeSArIHJhZGl1cy50b3BMZWZ0LCByYWRpdXMudG9wTGVmdCwgMS41ICogUEksIFBJLCB0cnVlKTtcbiAgICAvLyBsaW5lIGZyb20gdG9wIGxlZnQgdG8gYm90dG9tIGxlZnRcbiAgICBjdHgubGluZVRvKHgsIHkgKyBoIC0gcmFkaXVzLmJvdHRvbUxlZnQpO1xuICAgIC8vIGJvdHRvbSBsZWZ0IGFyY1xuICAgIGN0eC5hcmMoeCArIHJhZGl1cy5ib3R0b21MZWZ0LCB5ICsgaCAtIHJhZGl1cy5ib3R0b21MZWZ0LCByYWRpdXMuYm90dG9tTGVmdCwgUEksIEhBTEZfUEksIHRydWUpO1xuICAgIC8vIGxpbmUgZnJvbSBib3R0b20gbGVmdCB0byBib3R0b20gcmlnaHRcbiAgICBjdHgubGluZVRvKHggKyB3IC0gcmFkaXVzLmJvdHRvbVJpZ2h0LCB5ICsgaCk7XG4gICAgLy8gYm90dG9tIHJpZ2h0IGFyY1xuICAgIGN0eC5hcmMoeCArIHcgLSByYWRpdXMuYm90dG9tUmlnaHQsIHkgKyBoIC0gcmFkaXVzLmJvdHRvbVJpZ2h0LCByYWRpdXMuYm90dG9tUmlnaHQsIEhBTEZfUEksIDAsIHRydWUpO1xuICAgIC8vIGxpbmUgZnJvbSBib3R0b20gcmlnaHQgdG8gdG9wIHJpZ2h0XG4gICAgY3R4LmxpbmVUbyh4ICsgdywgeSArIHJhZGl1cy50b3BSaWdodCk7XG4gICAgLy8gdG9wIHJpZ2h0IGFyY1xuICAgIGN0eC5hcmMoeCArIHcgLSByYWRpdXMudG9wUmlnaHQsIHkgKyByYWRpdXMudG9wUmlnaHQsIHJhZGl1cy50b3BSaWdodCwgMCwgLUhBTEZfUEksIHRydWUpO1xuICAgIC8vIGxpbmUgZnJvbSB0b3AgcmlnaHQgdG8gdG9wIGxlZnRcbiAgICBjdHgubGluZVRvKHggKyByYWRpdXMudG9wTGVmdCwgeSk7XG59XG5cbmNvbnN0IExJTkVfSEVJR0hUID0gL14obm9ybWFsfChcXGQrKD86XFwuXFxkKyk/KShweHxlbXwlKT8pJC87XG5jb25zdCBGT05UX1NUWUxFID0gL14obm9ybWFsfGl0YWxpY3xpbml0aWFsfGluaGVyaXR8dW5zZXR8KG9ibGlxdWUoIC0/WzAtOV0/WzAtOV1kZWcpPykpJC87XG4vKipcbiAqIEBhbGlhcyBDaGFydC5oZWxwZXJzLm9wdGlvbnNcbiAqIEBuYW1lc3BhY2VcbiAqLyAvKipcbiAqIENvbnZlcnRzIHRoZSBnaXZlbiBsaW5lIGhlaWdodCBgdmFsdWVgIGluIHBpeGVscyBmb3IgYSBzcGVjaWZpYyBmb250IGBzaXplYC5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBsaW5lSGVpZ2h0IHRvIHBhcnNlIChlZy4gMS42LCAnMTRweCcsICc3NSUnLCAnMS42ZW0nKS5cbiAqIEBwYXJhbSBzaXplIC0gVGhlIGZvbnQgc2l6ZSAoaW4gcGl4ZWxzKSB1c2VkIHRvIHJlc29sdmUgcmVsYXRpdmUgYHZhbHVlYC5cbiAqIEByZXR1cm5zIFRoZSBlZmZlY3RpdmUgbGluZSBoZWlnaHQgaW4gcGl4ZWxzIChzaXplICogMS4yIGlmIHZhbHVlIGlzIGludmFsaWQpLlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbGluZS1oZWlnaHRcbiAqIEBzaW5jZSAyLjcuMFxuICovIGZ1bmN0aW9uIHRvTGluZUhlaWdodCh2YWx1ZSwgc2l6ZSkge1xuICAgIGNvbnN0IG1hdGNoZXMgPSAoJycgKyB2YWx1ZSkubWF0Y2goTElORV9IRUlHSFQpO1xuICAgIGlmICghbWF0Y2hlcyB8fCBtYXRjaGVzWzFdID09PSAnbm9ybWFsJykge1xuICAgICAgICByZXR1cm4gc2l6ZSAqIDEuMjtcbiAgICB9XG4gICAgdmFsdWUgPSArbWF0Y2hlc1syXTtcbiAgICBzd2l0Y2gobWF0Y2hlc1szXSl7XG4gICAgICAgIGNhc2UgJ3B4JzpcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgY2FzZSAnJSc6XG4gICAgICAgICAgICB2YWx1ZSAvPSAxMDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHNpemUgKiB2YWx1ZTtcbn1cbmNvbnN0IG51bWJlck9yWmVybyA9ICh2KT0+K3YgfHwgMDtcbmZ1bmN0aW9uIF9yZWFkVmFsdWVUb1Byb3BzKHZhbHVlLCBwcm9wcykge1xuICAgIGNvbnN0IHJldCA9IHt9O1xuICAgIGNvbnN0IG9ialByb3BzID0gaXNPYmplY3QocHJvcHMpO1xuICAgIGNvbnN0IGtleXMgPSBvYmpQcm9wcyA/IE9iamVjdC5rZXlzKHByb3BzKSA6IHByb3BzO1xuICAgIGNvbnN0IHJlYWQgPSBpc09iamVjdCh2YWx1ZSkgPyBvYmpQcm9wcyA/IChwcm9wKT0+dmFsdWVPckRlZmF1bHQodmFsdWVbcHJvcF0sIHZhbHVlW3Byb3BzW3Byb3BdXSkgOiAocHJvcCk9PnZhbHVlW3Byb3BdIDogKCk9PnZhbHVlO1xuICAgIGZvciAoY29uc3QgcHJvcCBvZiBrZXlzKXtcbiAgICAgICAgcmV0W3Byb3BdID0gbnVtYmVyT3JaZXJvKHJlYWQocHJvcCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gdmFsdWUgaW50byBhIFRSQkwgb2JqZWN0LlxuICogQHBhcmFtIHZhbHVlIC0gSWYgYSBudW1iZXIsIHNldCB0aGUgdmFsdWUgdG8gYWxsIFRSQkwgY29tcG9uZW50LFxuICogIGVsc2UsIGlmIGFuIG9iamVjdCwgdXNlIGRlZmluZWQgcHJvcGVydGllcyBhbmQgc2V0cyB1bmRlZmluZWQgb25lcyB0byAwLlxuICogIHggLyB5IGFyZSBzaG9ydGhhbmRzIGZvciBzYW1lIHZhbHVlIGZvciBsZWZ0L3JpZ2h0IGFuZCB0b3AvYm90dG9tLlxuICogQHJldHVybnMgVGhlIHBhZGRpbmcgdmFsdWVzICh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpXG4gKiBAc2luY2UgMy4wLjBcbiAqLyBmdW5jdGlvbiB0b1RSQkwodmFsdWUpIHtcbiAgICByZXR1cm4gX3JlYWRWYWx1ZVRvUHJvcHModmFsdWUsIHtcbiAgICAgICAgdG9wOiAneScsXG4gICAgICAgIHJpZ2h0OiAneCcsXG4gICAgICAgIGJvdHRvbTogJ3knLFxuICAgICAgICBsZWZ0OiAneCdcbiAgICB9KTtcbn1cbi8qKlxuICogQ29udmVydHMgdGhlIGdpdmVuIHZhbHVlIGludG8gYSBUUkJMIGNvcm5lcnMgb2JqZWN0IChzaW1pbGFyIHdpdGggY3NzIGJvcmRlci1yYWRpdXMpLlxuICogQHBhcmFtIHZhbHVlIC0gSWYgYSBudW1iZXIsIHNldCB0aGUgdmFsdWUgdG8gYWxsIFRSQkwgY29ybmVyIGNvbXBvbmVudHMsXG4gKiAgZWxzZSwgaWYgYW4gb2JqZWN0LCB1c2UgZGVmaW5lZCBwcm9wZXJ0aWVzIGFuZCBzZXRzIHVuZGVmaW5lZCBvbmVzIHRvIDAuXG4gKiBAcmV0dXJucyBUaGUgVFJCTCBjb3JuZXIgdmFsdWVzICh0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpXG4gKiBAc2luY2UgMy4wLjBcbiAqLyBmdW5jdGlvbiB0b1RSQkxDb3JuZXJzKHZhbHVlKSB7XG4gICAgcmV0dXJuIF9yZWFkVmFsdWVUb1Byb3BzKHZhbHVlLCBbXG4gICAgICAgICd0b3BMZWZ0JyxcbiAgICAgICAgJ3RvcFJpZ2h0JyxcbiAgICAgICAgJ2JvdHRvbUxlZnQnLFxuICAgICAgICAnYm90dG9tUmlnaHQnXG4gICAgXSk7XG59XG4vKipcbiAqIENvbnZlcnRzIHRoZSBnaXZlbiB2YWx1ZSBpbnRvIGEgcGFkZGluZyBvYmplY3Qgd2l0aCBwcmUtY29tcHV0ZWQgd2lkdGgvaGVpZ2h0LlxuICogQHBhcmFtIHZhbHVlIC0gSWYgYSBudW1iZXIsIHNldCB0aGUgdmFsdWUgdG8gYWxsIFRSQkwgY29tcG9uZW50LFxuICogIGVsc2UsIGlmIGFuIG9iamVjdCwgdXNlIGRlZmluZWQgcHJvcGVydGllcyBhbmQgc2V0cyB1bmRlZmluZWQgb25lcyB0byAwLlxuICogIHggLyB5IGFyZSBzaG9ydGhhbmRzIGZvciBzYW1lIHZhbHVlIGZvciBsZWZ0L3JpZ2h0IGFuZCB0b3AvYm90dG9tLlxuICogQHJldHVybnMgVGhlIHBhZGRpbmcgdmFsdWVzICh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHdpZHRoLCBoZWlnaHQpXG4gKiBAc2luY2UgMi43LjBcbiAqLyBmdW5jdGlvbiB0b1BhZGRpbmcodmFsdWUpIHtcbiAgICBjb25zdCBvYmogPSB0b1RSQkwodmFsdWUpO1xuICAgIG9iai53aWR0aCA9IG9iai5sZWZ0ICsgb2JqLnJpZ2h0O1xuICAgIG9iai5oZWlnaHQgPSBvYmoudG9wICsgb2JqLmJvdHRvbTtcbiAgICByZXR1cm4gb2JqO1xufVxuLyoqXG4gKiBQYXJzZXMgZm9udCBvcHRpb25zIGFuZCByZXR1cm5zIHRoZSBmb250IG9iamVjdC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQSBvYmplY3QgdGhhdCBjb250YWlucyBmb250IG9wdGlvbnMgdG8gYmUgcGFyc2VkLlxuICogQHBhcmFtIGZhbGxiYWNrIC0gQSBvYmplY3QgdGhhdCBjb250YWlucyBmYWxsYmFjayBmb250IG9wdGlvbnMuXG4gKiBAcmV0dXJuIFRoZSBmb250IG9iamVjdC5cbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gdG9Gb250KG9wdGlvbnMsIGZhbGxiYWNrKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgZmFsbGJhY2sgPSBmYWxsYmFjayB8fCBkZWZhdWx0cy5mb250O1xuICAgIGxldCBzaXplID0gdmFsdWVPckRlZmF1bHQob3B0aW9ucy5zaXplLCBmYWxsYmFjay5zaXplKTtcbiAgICBpZiAodHlwZW9mIHNpemUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHNpemUgPSBwYXJzZUludChzaXplLCAxMCk7XG4gICAgfVxuICAgIGxldCBzdHlsZSA9IHZhbHVlT3JEZWZhdWx0KG9wdGlvbnMuc3R5bGUsIGZhbGxiYWNrLnN0eWxlKTtcbiAgICBpZiAoc3R5bGUgJiYgISgnJyArIHN0eWxlKS5tYXRjaChGT05UX1NUWUxFKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgZm9udCBzdHlsZSBzcGVjaWZpZWQ6IFwiJyArIHN0eWxlICsgJ1wiJyk7XG4gICAgICAgIHN0eWxlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBmb250ID0ge1xuICAgICAgICBmYW1pbHk6IHZhbHVlT3JEZWZhdWx0KG9wdGlvbnMuZmFtaWx5LCBmYWxsYmFjay5mYW1pbHkpLFxuICAgICAgICBsaW5lSGVpZ2h0OiB0b0xpbmVIZWlnaHQodmFsdWVPckRlZmF1bHQob3B0aW9ucy5saW5lSGVpZ2h0LCBmYWxsYmFjay5saW5lSGVpZ2h0KSwgc2l6ZSksXG4gICAgICAgIHNpemUsXG4gICAgICAgIHN0eWxlLFxuICAgICAgICB3ZWlnaHQ6IHZhbHVlT3JEZWZhdWx0KG9wdGlvbnMud2VpZ2h0LCBmYWxsYmFjay53ZWlnaHQpLFxuICAgICAgICBzdHJpbmc6ICcnXG4gICAgfTtcbiAgICBmb250LnN0cmluZyA9IHRvRm9udFN0cmluZyhmb250KTtcbiAgICByZXR1cm4gZm9udDtcbn1cbi8qKlxuICogRXZhbHVhdGVzIHRoZSBnaXZlbiBgaW5wdXRzYCBzZXF1ZW50aWFsbHkgYW5kIHJldHVybnMgdGhlIGZpcnN0IGRlZmluZWQgdmFsdWUuXG4gKiBAcGFyYW0gaW5wdXRzIC0gQW4gYXJyYXkgb2YgdmFsdWVzLCBmYWxsaW5nIGJhY2sgdG8gdGhlIGxhc3QgdmFsdWUuXG4gKiBAcGFyYW0gY29udGV4dCAtIElmIGRlZmluZWQgYW5kIHRoZSBjdXJyZW50IHZhbHVlIGlzIGEgZnVuY3Rpb24sIHRoZSB2YWx1ZVxuICogaXMgY2FsbGVkIHdpdGggYGNvbnRleHRgIGFzIGZpcnN0IGFyZ3VtZW50IGFuZCB0aGUgcmVzdWx0IGJlY29tZXMgdGhlIG5ldyBpbnB1dC5cbiAqIEBwYXJhbSBpbmRleCAtIElmIGRlZmluZWQgYW5kIHRoZSBjdXJyZW50IHZhbHVlIGlzIGFuIGFycmF5LCB0aGUgdmFsdWVcbiAqIGF0IGBpbmRleGAgYmVjb21lIHRoZSBuZXcgaW5wdXQuXG4gKiBAcGFyYW0gaW5mbyAtIG9iamVjdCB0byByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgcmVzb2x1dGlvbiBpblxuICogQHBhcmFtIGluZm8uY2FjaGVhYmxlIC0gV2lsbCBiZSBzZXQgdG8gYGZhbHNlYCBpZiBvcHRpb24gaXMgbm90IGNhY2hlYWJsZS5cbiAqIEBzaW5jZSAyLjcuMFxuICovIGZ1bmN0aW9uIHJlc29sdmUoaW5wdXRzLCBjb250ZXh0LCBpbmRleCwgaW5mbykge1xuICAgIGxldCBjYWNoZWFibGUgPSB0cnVlO1xuICAgIGxldCBpLCBpbGVuLCB2YWx1ZTtcbiAgICBmb3IoaSA9IDAsIGlsZW4gPSBpbnB1dHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgdmFsdWUgPSBpbnB1dHNbaV07XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGV4dCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZShjb250ZXh0KTtcbiAgICAgICAgICAgIGNhY2hlYWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlW2luZGV4ICUgdmFsdWUubGVuZ3RoXTtcbiAgICAgICAgICAgIGNhY2hlYWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoaW5mbyAmJiAhY2FjaGVhYmxlKSB7XG4gICAgICAgICAgICAgICAgaW5mby5jYWNoZWFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogQHBhcmFtIG1pbm1heFxuICogQHBhcmFtIGdyYWNlXG4gKiBAcGFyYW0gYmVnaW5BdFplcm9cbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2FkZEdyYWNlKG1pbm1heCwgZ3JhY2UsIGJlZ2luQXRaZXJvKSB7XG4gICAgY29uc3QgeyBtaW4gLCBtYXggIH0gPSBtaW5tYXg7XG4gICAgY29uc3QgY2hhbmdlID0gdG9EaW1lbnNpb24oZ3JhY2UsIChtYXggLSBtaW4pIC8gMik7XG4gICAgY29uc3Qga2VlcFplcm8gPSAodmFsdWUsIGFkZCk9PmJlZ2luQXRaZXJvICYmIHZhbHVlID09PSAwID8gMCA6IHZhbHVlICsgYWRkO1xuICAgIHJldHVybiB7XG4gICAgICAgIG1pbjoga2VlcFplcm8obWluLCAtTWF0aC5hYnMoY2hhbmdlKSksXG4gICAgICAgIG1heDoga2VlcFplcm8obWF4LCBjaGFuZ2UpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQocGFyZW50Q29udGV4dCwgY29udGV4dCkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUocGFyZW50Q29udGV4dCksIGNvbnRleHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBQcm94eSBmb3IgcmVzb2x2aW5nIHJhdyB2YWx1ZXMgZm9yIG9wdGlvbnMuXG4gKiBAcGFyYW0gc2NvcGVzIC0gVGhlIG9wdGlvbiBzY29wZXMgdG8gbG9vayBmb3IgdmFsdWVzLCBpbiByZXNvbHV0aW9uIG9yZGVyXG4gKiBAcGFyYW0gcHJlZml4ZXMgLSBUaGUgcHJlZml4ZXMgZm9yIHZhbHVlcywgaW4gcmVzb2x1dGlvbiBvcmRlci5cbiAqIEBwYXJhbSByb290U2NvcGVzIC0gVGhlIHJvb3Qgb3B0aW9uIHNjb3Blc1xuICogQHBhcmFtIGZhbGxiYWNrIC0gUGFyZW50IHNjb3BlcyBmYWxsYmFja1xuICogQHBhcmFtIGdldFRhcmdldCAtIGNhbGxiYWNrIGZvciBnZXR0aW5nIHRoZSB0YXJnZXQgZm9yIGNoYW5nZWQgdmFsdWVzXG4gKiBAcmV0dXJucyBQcm94eVxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfY3JlYXRlUmVzb2x2ZXIoc2NvcGVzLCBwcmVmaXhlcyA9IFtcbiAgICAnJ1xuXSwgcm9vdFNjb3BlcywgZmFsbGJhY2ssIGdldFRhcmdldCA9ICgpPT5zY29wZXNbMF0pIHtcbiAgICBjb25zdCBmaW5hbFJvb3RTY29wZXMgPSByb290U2NvcGVzIHx8IHNjb3BlcztcbiAgICBpZiAodHlwZW9mIGZhbGxiYWNrID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBmYWxsYmFjayA9IF9yZXNvbHZlKCdfZmFsbGJhY2snLCBzY29wZXMpO1xuICAgIH1cbiAgICBjb25zdCBjYWNoZSA9IHtcbiAgICAgICAgW1N5bWJvbC50b1N0cmluZ1RhZ106ICdPYmplY3QnLFxuICAgICAgICBfY2FjaGVhYmxlOiB0cnVlLFxuICAgICAgICBfc2NvcGVzOiBzY29wZXMsXG4gICAgICAgIF9yb290U2NvcGVzOiBmaW5hbFJvb3RTY29wZXMsXG4gICAgICAgIF9mYWxsYmFjazogZmFsbGJhY2ssXG4gICAgICAgIF9nZXRUYXJnZXQ6IGdldFRhcmdldCxcbiAgICAgICAgb3ZlcnJpZGU6IChzY29wZSk9Pl9jcmVhdGVSZXNvbHZlcihbXG4gICAgICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICAgICAgLi4uc2NvcGVzXG4gICAgICAgICAgICBdLCBwcmVmaXhlcywgZmluYWxSb290U2NvcGVzLCBmYWxsYmFjaylcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJveHkoY2FjaGUsIHtcbiAgICAgICAgLyoqXG4gICAgICogQSB0cmFwIGZvciB0aGUgZGVsZXRlIG9wZXJhdG9yLlxuICAgICAqLyBkZWxldGVQcm9wZXJ0eSAodGFyZ2V0LCBwcm9wKSB7XG4gICAgICAgICAgICBkZWxldGUgdGFyZ2V0W3Byb3BdOyAvLyByZW1vdmUgZnJvbSBjYWNoZVxuICAgICAgICAgICAgZGVsZXRlIHRhcmdldC5fa2V5czsgLy8gcmVtb3ZlIGNhY2hlZCBrZXlzXG4gICAgICAgICAgICBkZWxldGUgc2NvcGVzWzBdW3Byb3BdOyAvLyByZW1vdmUgZnJvbSB0b3AgbGV2ZWwgc2NvcGVcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgKiBBIHRyYXAgZm9yIGdldHRpbmcgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqLyBnZXQgKHRhcmdldCwgcHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIF9jYWNoZWQodGFyZ2V0LCBwcm9wLCAoKT0+X3Jlc29sdmVXaXRoUHJlZml4ZXMocHJvcCwgcHJlZml4ZXMsIHNjb3BlcywgdGFyZ2V0KSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAqIEEgdHJhcCBmb3IgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvci5cbiAgICAgKiBBbHNvIHVzZWQgYnkgT2JqZWN0Lmhhc093blByb3BlcnR5LlxuICAgICAqLyBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgKHRhcmdldCwgcHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldC5fc2NvcGVzWzBdLCBwcm9wKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICogQSB0cmFwIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YuXG4gICAgICovIGdldFByb3RvdHlwZU9mICgpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHNjb3Blc1swXSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAqIEEgdHJhcCBmb3IgdGhlIGluIG9wZXJhdG9yLlxuICAgICAqLyBoYXMgKHRhcmdldCwgcHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEtleXNGcm9tQWxsU2NvcGVzKHRhcmdldCkuaW5jbHVkZXMocHJvcCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAqIEEgdHJhcCBmb3IgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgYW5kIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMuXG4gICAgICovIG93bktleXMgKHRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEtleXNGcm9tQWxsU2NvcGVzKHRhcmdldCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAqIEEgdHJhcCBmb3Igc2V0dGluZyBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICovIHNldCAodGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qgc3RvcmFnZSA9IHRhcmdldC5fc3RvcmFnZSB8fCAodGFyZ2V0Ll9zdG9yYWdlID0gZ2V0VGFyZ2V0KCkpO1xuICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc3RvcmFnZVtwcm9wXSA9IHZhbHVlOyAvLyBzZXQgdG8gdG9wIGxldmVsIHNjb3BlICsgY2FjaGVcbiAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXQuX2tleXM7IC8vIHJlbW92ZSBjYWNoZWQga2V5c1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogUmV0dXJucyBhbiBQcm94eSBmb3IgcmVzb2x2aW5nIG9wdGlvbiB2YWx1ZXMgd2l0aCBjb250ZXh0LlxuICogQHBhcmFtIHByb3h5IC0gVGhlIFByb3h5IHJldHVybmVkIGJ5IGBfY3JlYXRlUmVzb2x2ZXJgXG4gKiBAcGFyYW0gY29udGV4dCAtIENvbnRleHQgb2JqZWN0IGZvciBzY3JpcHRhYmxlL2luZGV4YWJsZSBvcHRpb25zXG4gKiBAcGFyYW0gc3ViUHJveHkgLSBUaGUgcHJveHkgcHJvdmlkZWQgZm9yIHNjcmlwdGFibGUgb3B0aW9uc1xuICogQHBhcmFtIGRlc2NyaXB0b3JEZWZhdWx0cyAtIERlZmF1bHRzIGZvciBkZXNjcmlwdG9yc1xuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfYXR0YWNoQ29udGV4dChwcm94eSwgY29udGV4dCwgc3ViUHJveHksIGRlc2NyaXB0b3JEZWZhdWx0cykge1xuICAgIGNvbnN0IGNhY2hlID0ge1xuICAgICAgICBfY2FjaGVhYmxlOiBmYWxzZSxcbiAgICAgICAgX3Byb3h5OiBwcm94eSxcbiAgICAgICAgX2NvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgIF9zdWJQcm94eTogc3ViUHJveHksXG4gICAgICAgIF9zdGFjazogbmV3IFNldCgpLFxuICAgICAgICBfZGVzY3JpcHRvcnM6IF9kZXNjcmlwdG9ycyhwcm94eSwgZGVzY3JpcHRvckRlZmF1bHRzKSxcbiAgICAgICAgc2V0Q29udGV4dDogKGN0eCk9Pl9hdHRhY2hDb250ZXh0KHByb3h5LCBjdHgsIHN1YlByb3h5LCBkZXNjcmlwdG9yRGVmYXVsdHMpLFxuICAgICAgICBvdmVycmlkZTogKHNjb3BlKT0+X2F0dGFjaENvbnRleHQocHJveHkub3ZlcnJpZGUoc2NvcGUpLCBjb250ZXh0LCBzdWJQcm94eSwgZGVzY3JpcHRvckRlZmF1bHRzKVxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcm94eShjYWNoZSwge1xuICAgICAgICAvKipcbiAgICAgKiBBIHRyYXAgZm9yIHRoZSBkZWxldGUgb3BlcmF0b3IuXG4gICAgICovIGRlbGV0ZVByb3BlcnR5ICh0YXJnZXQsIHByb3ApIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXRbcHJvcF07IC8vIHJlbW92ZSBmcm9tIGNhY2hlXG4gICAgICAgICAgICBkZWxldGUgcHJveHlbcHJvcF07IC8vIHJlbW92ZSBmcm9tIHByb3h5XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICogQSB0cmFwIGZvciBnZXR0aW5nIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKi8gZ2V0ICh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gX2NhY2hlZCh0YXJnZXQsIHByb3AsICgpPT5fcmVzb2x2ZVdpdGhDb250ZXh0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICogQSB0cmFwIGZvciBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLlxuICAgICAqIEFsc28gdXNlZCBieSBPYmplY3QuaGFzT3duUHJvcGVydHkuXG4gICAgICovIGdldE93blByb3BlcnR5RGVzY3JpcHRvciAodGFyZ2V0LCBwcm9wKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0Ll9kZXNjcmlwdG9ycy5hbGxLZXlzID8gUmVmbGVjdC5oYXMocHJveHksIHByb3ApID8ge1xuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgICAgICB9IDogdW5kZWZpbmVkIDogUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJveHksIHByb3ApO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgKiBBIHRyYXAgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZi5cbiAgICAgKi8gZ2V0UHJvdG90eXBlT2YgKCkge1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YocHJveHkpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgKiBBIHRyYXAgZm9yIHRoZSBpbiBvcGVyYXRvci5cbiAgICAgKi8gaGFzICh0YXJnZXQsIHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0Lmhhcyhwcm94eSwgcHJvcCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAqIEEgdHJhcCBmb3IgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgYW5kIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMuXG4gICAgICovIG93bktleXMgKCkge1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3Qub3duS2V5cyhwcm94eSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAqIEEgdHJhcCBmb3Igc2V0dGluZyBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICovIHNldCAodGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgICAgICAgcHJveHlbcHJvcF0gPSB2YWx1ZTsgLy8gc2V0IHRvIHByb3h5XG4gICAgICAgICAgICBkZWxldGUgdGFyZ2V0W3Byb3BdOyAvLyByZW1vdmUgZnJvbSBjYWNoZVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfZGVzY3JpcHRvcnMocHJveHksIGRlZmF1bHRzID0ge1xuICAgIHNjcmlwdGFibGU6IHRydWUsXG4gICAgaW5kZXhhYmxlOiB0cnVlXG59KSB7XG4gICAgY29uc3QgeyBfc2NyaXB0YWJsZSA9ZGVmYXVsdHMuc2NyaXB0YWJsZSAsIF9pbmRleGFibGUgPWRlZmF1bHRzLmluZGV4YWJsZSAsIF9hbGxLZXlzID1kZWZhdWx0cy5hbGxLZXlzICB9ID0gcHJveHk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWxsS2V5czogX2FsbEtleXMsXG4gICAgICAgIHNjcmlwdGFibGU6IF9zY3JpcHRhYmxlLFxuICAgICAgICBpbmRleGFibGU6IF9pbmRleGFibGUsXG4gICAgICAgIGlzU2NyaXB0YWJsZTogaXNGdW5jdGlvbihfc2NyaXB0YWJsZSkgPyBfc2NyaXB0YWJsZSA6ICgpPT5fc2NyaXB0YWJsZSxcbiAgICAgICAgaXNJbmRleGFibGU6IGlzRnVuY3Rpb24oX2luZGV4YWJsZSkgPyBfaW5kZXhhYmxlIDogKCk9Pl9pbmRleGFibGVcbiAgICB9O1xufVxuY29uc3QgcmVhZEtleSA9IChwcmVmaXgsIG5hbWUpPT5wcmVmaXggPyBwcmVmaXggKyBfY2FwaXRhbGl6ZShuYW1lKSA6IG5hbWU7XG5jb25zdCBuZWVkc1N1YlJlc29sdmVyID0gKHByb3AsIHZhbHVlKT0+aXNPYmplY3QodmFsdWUpICYmIHByb3AgIT09ICdhZGFwdGVycycgJiYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgPT09IG51bGwgfHwgdmFsdWUuY29uc3RydWN0b3IgPT09IE9iamVjdCk7XG5mdW5jdGlvbiBfY2FjaGVkKHRhcmdldCwgcHJvcCwgcmVzb2x2ZSkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBwcm9wKSB8fCBwcm9wID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXRbcHJvcF07XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gcmVzb2x2ZSgpO1xuICAgIC8vIGNhY2hlIHRoZSByZXNvbHZlZCB2YWx1ZVxuICAgIHRhcmdldFtwcm9wXSA9IHZhbHVlO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIF9yZXNvbHZlV2l0aENvbnRleHQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuICAgIGNvbnN0IHsgX3Byb3h5ICwgX2NvbnRleHQgLCBfc3ViUHJveHkgLCBfZGVzY3JpcHRvcnM6IGRlc2NyaXB0b3JzICB9ID0gdGFyZ2V0O1xuICAgIGxldCB2YWx1ZSA9IF9wcm94eVtwcm9wXTsgLy8gcmVzb2x2ZSBmcm9tIHByb3h5XG4gICAgLy8gcmVzb2x2ZSB3aXRoIGNvbnRleHRcbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkgJiYgZGVzY3JpcHRvcnMuaXNTY3JpcHRhYmxlKHByb3ApKSB7XG4gICAgICAgIHZhbHVlID0gX3Jlc29sdmVTY3JpcHRhYmxlKHByb3AsIHZhbHVlLCB0YXJnZXQsIHJlY2VpdmVyKTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSA9IF9yZXNvbHZlQXJyYXkocHJvcCwgdmFsdWUsIHRhcmdldCwgZGVzY3JpcHRvcnMuaXNJbmRleGFibGUpO1xuICAgIH1cbiAgICBpZiAobmVlZHNTdWJSZXNvbHZlcihwcm9wLCB2YWx1ZSkpIHtcbiAgICAgICAgLy8gaWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzIGFuIG9iamVjdCwgY3JlYXRlIGEgc3ViIHJlc29sdmVyIGZvciBpdFxuICAgICAgICB2YWx1ZSA9IF9hdHRhY2hDb250ZXh0KHZhbHVlLCBfY29udGV4dCwgX3N1YlByb3h5ICYmIF9zdWJQcm94eVtwcm9wXSwgZGVzY3JpcHRvcnMpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBfcmVzb2x2ZVNjcmlwdGFibGUocHJvcCwgZ2V0VmFsdWUsIHRhcmdldCwgcmVjZWl2ZXIpIHtcbiAgICBjb25zdCB7IF9wcm94eSAsIF9jb250ZXh0ICwgX3N1YlByb3h5ICwgX3N0YWNrICB9ID0gdGFyZ2V0O1xuICAgIGlmIChfc3RhY2suaGFzKHByb3ApKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVjdXJzaW9uIGRldGVjdGVkOiAnICsgQXJyYXkuZnJvbShfc3RhY2spLmpvaW4oJy0+JykgKyAnLT4nICsgcHJvcCk7XG4gICAgfVxuICAgIF9zdGFjay5hZGQocHJvcCk7XG4gICAgbGV0IHZhbHVlID0gZ2V0VmFsdWUoX2NvbnRleHQsIF9zdWJQcm94eSB8fCByZWNlaXZlcik7XG4gICAgX3N0YWNrLmRlbGV0ZShwcm9wKTtcbiAgICBpZiAobmVlZHNTdWJSZXNvbHZlcihwcm9wLCB2YWx1ZSkpIHtcbiAgICAgICAgLy8gV2hlbiBzY3JpcHRhYmxlIG9wdGlvbiByZXR1cm5zIGFuIG9iamVjdCwgY3JlYXRlIGEgcmVzb2x2ZXIgb24gdGhhdC5cbiAgICAgICAgdmFsdWUgPSBjcmVhdGVTdWJSZXNvbHZlcihfcHJveHkuX3Njb3BlcywgX3Byb3h5LCBwcm9wLCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIF9yZXNvbHZlQXJyYXkocHJvcCwgdmFsdWUsIHRhcmdldCwgaXNJbmRleGFibGUpIHtcbiAgICBjb25zdCB7IF9wcm94eSAsIF9jb250ZXh0ICwgX3N1YlByb3h5ICwgX2Rlc2NyaXB0b3JzOiBkZXNjcmlwdG9ycyAgfSA9IHRhcmdldDtcbiAgICBpZiAodHlwZW9mIF9jb250ZXh0LmluZGV4ICE9PSAndW5kZWZpbmVkJyAmJiBpc0luZGV4YWJsZShwcm9wKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVbX2NvbnRleHQuaW5kZXggJSB2YWx1ZS5sZW5ndGhdO1xuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWVbMF0pKSB7XG4gICAgICAgIC8vIEFycmF5IG9mIG9iamVjdHMsIHJldHVybiBhcnJheSBvciByZXNvbHZlcnNcbiAgICAgICAgY29uc3QgYXJyID0gdmFsdWU7XG4gICAgICAgIGNvbnN0IHNjb3BlcyA9IF9wcm94eS5fc2NvcGVzLmZpbHRlcigocyk9PnMgIT09IGFycik7XG4gICAgICAgIHZhbHVlID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnIpe1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZXIgPSBjcmVhdGVTdWJSZXNvbHZlcihzY29wZXMsIF9wcm94eSwgcHJvcCwgaXRlbSk7XG4gICAgICAgICAgICB2YWx1ZS5wdXNoKF9hdHRhY2hDb250ZXh0KHJlc29sdmVyLCBfY29udGV4dCwgX3N1YlByb3h5ICYmIF9zdWJQcm94eVtwcm9wXSwgZGVzY3JpcHRvcnMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiByZXNvbHZlRmFsbGJhY2soZmFsbGJhY2ssIHByb3AsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oZmFsbGJhY2spID8gZmFsbGJhY2socHJvcCwgdmFsdWUpIDogZmFsbGJhY2s7XG59XG5jb25zdCBnZXRTY29wZSA9IChrZXksIHBhcmVudCk9PmtleSA9PT0gdHJ1ZSA/IHBhcmVudCA6IHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnID8gcmVzb2x2ZU9iamVjdEtleShwYXJlbnQsIGtleSkgOiB1bmRlZmluZWQ7XG5mdW5jdGlvbiBhZGRTY29wZXMoc2V0LCBwYXJlbnRTY29wZXMsIGtleSwgcGFyZW50RmFsbGJhY2ssIHZhbHVlKSB7XG4gICAgZm9yIChjb25zdCBwYXJlbnQgb2YgcGFyZW50U2NvcGVzKXtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZShrZXksIHBhcmVudCk7XG4gICAgICAgIGlmIChzY29wZSkge1xuICAgICAgICAgICAgc2V0LmFkZChzY29wZSk7XG4gICAgICAgICAgICBjb25zdCBmYWxsYmFjayA9IHJlc29sdmVGYWxsYmFjayhzY29wZS5fZmFsbGJhY2ssIGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmYWxsYmFjayAhPT0gJ3VuZGVmaW5lZCcgJiYgZmFsbGJhY2sgIT09IGtleSAmJiBmYWxsYmFjayAhPT0gcGFyZW50RmFsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAvLyBXaGVuIHdlIHJlYWNoIHRoZSBkZXNjcmlwdG9yIHRoYXQgZGVmaW5lcyBhIG5ldyBfZmFsbGJhY2ssIHJldHVybiB0aGF0LlxuICAgICAgICAgICAgICAgIC8vIFRoZSBmYWxsYmFjayB3aWxsIHJlc3VtZSB0byB0aGF0IG5ldyBzY29wZS5cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2NvcGUgPT09IGZhbHNlICYmIHR5cGVvZiBwYXJlbnRGYWxsYmFjayAhPT0gJ3VuZGVmaW5lZCcgJiYga2V5ICE9PSBwYXJlbnRGYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gYGZhbHNlYCByZXN1bHRzIHRvIGBmYWxzZWAsIHdoZW4gZmFsbGluZyBiYWNrIHRvIGRpZmZlcmVudCBrZXkuXG4gICAgICAgICAgICAvLyBGb3IgZXhhbXBsZSBgaW50ZXJhY3Rpb25gIGZyb20gYGhvdmVyYCBvciBgcGx1Z2lucy50b29sdGlwYCBhbmQgYGFuaW1hdGlvbmAgZnJvbSBgYW5pbWF0aW9uc2BcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVN1YlJlc29sdmVyKHBhcmVudFNjb3BlcywgcmVzb2x2ZXIsIHByb3AsIHZhbHVlKSB7XG4gICAgY29uc3Qgcm9vdFNjb3BlcyA9IHJlc29sdmVyLl9yb290U2NvcGVzO1xuICAgIGNvbnN0IGZhbGxiYWNrID0gcmVzb2x2ZUZhbGxiYWNrKHJlc29sdmVyLl9mYWxsYmFjaywgcHJvcCwgdmFsdWUpO1xuICAgIGNvbnN0IGFsbFNjb3BlcyA9IFtcbiAgICAgICAgLi4ucGFyZW50U2NvcGVzLFxuICAgICAgICAuLi5yb290U2NvcGVzXG4gICAgXTtcbiAgICBjb25zdCBzZXQgPSBuZXcgU2V0KCk7XG4gICAgc2V0LmFkZCh2YWx1ZSk7XG4gICAgbGV0IGtleSA9IGFkZFNjb3Blc0Zyb21LZXkoc2V0LCBhbGxTY29wZXMsIHByb3AsIGZhbGxiYWNrIHx8IHByb3AsIHZhbHVlKTtcbiAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBmYWxsYmFjayAhPT0gJ3VuZGVmaW5lZCcgJiYgZmFsbGJhY2sgIT09IHByb3ApIHtcbiAgICAgICAga2V5ID0gYWRkU2NvcGVzRnJvbUtleShzZXQsIGFsbFNjb3BlcywgZmFsbGJhY2ssIGtleSwgdmFsdWUpO1xuICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9jcmVhdGVSZXNvbHZlcihBcnJheS5mcm9tKHNldCksIFtcbiAgICAgICAgJydcbiAgICBdLCByb290U2NvcGVzLCBmYWxsYmFjaywgKCk9PnN1YkdldFRhcmdldChyZXNvbHZlciwgcHJvcCwgdmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGFkZFNjb3Blc0Zyb21LZXkoc2V0LCBhbGxTY29wZXMsIGtleSwgZmFsbGJhY2ssIGl0ZW0pIHtcbiAgICB3aGlsZShrZXkpe1xuICAgICAgICBrZXkgPSBhZGRTY29wZXMoc2V0LCBhbGxTY29wZXMsIGtleSwgZmFsbGJhY2ssIGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xufVxuZnVuY3Rpb24gc3ViR2V0VGFyZ2V0KHJlc29sdmVyLCBwcm9wLCB2YWx1ZSkge1xuICAgIGNvbnN0IHBhcmVudCA9IHJlc29sdmVyLl9nZXRUYXJnZXQoKTtcbiAgICBpZiAoIShwcm9wIGluIHBhcmVudCkpIHtcbiAgICAgICAgcGFyZW50W3Byb3BdID0ge307XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldCA9IHBhcmVudFtwcm9wXTtcbiAgICBpZiAoaXNBcnJheSh0YXJnZXQpICYmIGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAvLyBGb3IgYXJyYXkgb2Ygb2JqZWN0cywgdGhlIG9iamVjdCBpcyB1c2VkIHRvIHN0b3JlIHVwZGF0ZWQgdmFsdWVzXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldCB8fCB7fTtcbn1cbmZ1bmN0aW9uIF9yZXNvbHZlV2l0aFByZWZpeGVzKHByb3AsIHByZWZpeGVzLCBzY29wZXMsIHByb3h5KSB7XG4gICAgbGV0IHZhbHVlO1xuICAgIGZvciAoY29uc3QgcHJlZml4IG9mIHByZWZpeGVzKXtcbiAgICAgICAgdmFsdWUgPSBfcmVzb2x2ZShyZWFkS2V5KHByZWZpeCwgcHJvcCksIHNjb3Blcyk7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmVlZHNTdWJSZXNvbHZlcihwcm9wLCB2YWx1ZSkgPyBjcmVhdGVTdWJSZXNvbHZlcihzY29wZXMsIHByb3h5LCBwcm9wLCB2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIF9yZXNvbHZlKGtleSwgc2NvcGVzKSB7XG4gICAgZm9yIChjb25zdCBzY29wZSBvZiBzY29wZXMpe1xuICAgICAgICBpZiAoIXNjb3BlKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZSA9IHNjb3BlW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBnZXRLZXlzRnJvbUFsbFNjb3Blcyh0YXJnZXQpIHtcbiAgICBsZXQga2V5cyA9IHRhcmdldC5fa2V5cztcbiAgICBpZiAoIWtleXMpIHtcbiAgICAgICAga2V5cyA9IHRhcmdldC5fa2V5cyA9IHJlc29sdmVLZXlzRnJvbUFsbFNjb3Blcyh0YXJnZXQuX3Njb3Blcyk7XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUtleXNGcm9tQWxsU2NvcGVzKHNjb3Blcykge1xuICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoKTtcbiAgICBmb3IgKGNvbnN0IHNjb3BlIG9mIHNjb3Blcyl7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNjb3BlKS5maWx0ZXIoKGspPT4hay5zdGFydHNXaXRoKCdfJykpKXtcbiAgICAgICAgICAgIHNldC5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbShzZXQpO1xufVxuZnVuY3Rpb24gX3BhcnNlT2JqZWN0RGF0YVJhZGlhbFNjYWxlKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgIGNvbnN0IHsgaVNjYWxlICB9ID0gbWV0YTtcbiAgICBjb25zdCB7IGtleSA9J3InICB9ID0gdGhpcy5fcGFyc2luZztcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgIGxldCBpLCBpbGVuLCBpbmRleCwgaXRlbTtcbiAgICBmb3IoaSA9IDAsIGlsZW4gPSBjb3VudDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIGluZGV4ID0gaSArIHN0YXJ0O1xuICAgICAgICBpdGVtID0gZGF0YVtpbmRleF07XG4gICAgICAgIHBhcnNlZFtpXSA9IHtcbiAgICAgICAgICAgIHI6IGlTY2FsZS5wYXJzZShyZXNvbHZlT2JqZWN0S2V5KGl0ZW0sIGtleSksIGluZGV4KVxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xufVxuXG5jb25zdCBFUFNJTE9OID0gTnVtYmVyLkVQU0lMT04gfHwgMWUtMTQ7XG5jb25zdCBnZXRQb2ludCA9IChwb2ludHMsIGkpPT5pIDwgcG9pbnRzLmxlbmd0aCAmJiAhcG9pbnRzW2ldLnNraXAgJiYgcG9pbnRzW2ldO1xuY29uc3QgZ2V0VmFsdWVBeGlzID0gKGluZGV4QXhpcyk9PmluZGV4QXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xuZnVuY3Rpb24gc3BsaW5lQ3VydmUoZmlyc3RQb2ludCwgbWlkZGxlUG9pbnQsIGFmdGVyUG9pbnQsIHQpIHtcbiAgICAvLyBQcm9wcyB0byBSb2IgU3BlbmNlciBhdCBzY2FsZWQgaW5ub3ZhdGlvbiBmb3IgaGlzIHBvc3Qgb24gc3BsaW5pbmcgYmV0d2VlbiBwb2ludHNcbiAgICAvLyBodHRwOi8vc2NhbGVkaW5ub3ZhdGlvbi5jb20vYW5hbHl0aWNzL3NwbGluZXMvYWJvdXRTcGxpbmVzLmh0bWxcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYWxzbyByZXNwZWN0IFwic2tpcHBlZFwiIHBvaW50c1xuICAgIGNvbnN0IHByZXZpb3VzID0gZmlyc3RQb2ludC5za2lwID8gbWlkZGxlUG9pbnQgOiBmaXJzdFBvaW50O1xuICAgIGNvbnN0IGN1cnJlbnQgPSBtaWRkbGVQb2ludDtcbiAgICBjb25zdCBuZXh0ID0gYWZ0ZXJQb2ludC5za2lwID8gbWlkZGxlUG9pbnQgOiBhZnRlclBvaW50O1xuICAgIGNvbnN0IGQwMSA9IGRpc3RhbmNlQmV0d2VlblBvaW50cyhjdXJyZW50LCBwcmV2aW91cyk7XG4gICAgY29uc3QgZDEyID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRzKG5leHQsIGN1cnJlbnQpO1xuICAgIGxldCBzMDEgPSBkMDEgLyAoZDAxICsgZDEyKTtcbiAgICBsZXQgczEyID0gZDEyIC8gKGQwMSArIGQxMik7XG4gICAgLy8gSWYgYWxsIHBvaW50cyBhcmUgdGhlIHNhbWUsIHMwMSAmIHMwMiB3aWxsIGJlIGluZlxuICAgIHMwMSA9IGlzTmFOKHMwMSkgPyAwIDogczAxO1xuICAgIHMxMiA9IGlzTmFOKHMxMikgPyAwIDogczEyO1xuICAgIGNvbnN0IGZhID0gdCAqIHMwMTsgLy8gc2NhbGluZyBmYWN0b3IgZm9yIHRyaWFuZ2xlIFRhXG4gICAgY29uc3QgZmIgPSB0ICogczEyO1xuICAgIHJldHVybiB7XG4gICAgICAgIHByZXZpb3VzOiB7XG4gICAgICAgICAgICB4OiBjdXJyZW50LnggLSBmYSAqIChuZXh0LnggLSBwcmV2aW91cy54KSxcbiAgICAgICAgICAgIHk6IGN1cnJlbnQueSAtIGZhICogKG5leHQueSAtIHByZXZpb3VzLnkpXG4gICAgICAgIH0sXG4gICAgICAgIG5leHQ6IHtcbiAgICAgICAgICAgIHg6IGN1cnJlbnQueCArIGZiICogKG5leHQueCAtIHByZXZpb3VzLngpLFxuICAgICAgICAgICAgeTogY3VycmVudC55ICsgZmIgKiAobmV4dC55IC0gcHJldmlvdXMueSlcbiAgICAgICAgfVxuICAgIH07XG59XG4vKipcbiAqIEFkanVzdCB0YW5nZW50cyB0byBlbnN1cmUgbW9ub3RvbmljIHByb3BlcnRpZXNcbiAqLyBmdW5jdGlvbiBtb25vdG9uZUFkanVzdChwb2ludHMsIGRlbHRhSywgbUspIHtcbiAgICBjb25zdCBwb2ludHNMZW4gPSBwb2ludHMubGVuZ3RoO1xuICAgIGxldCBhbHBoYUssIGJldGFLLCB0YXVLLCBzcXVhcmVkTWFnbml0dWRlLCBwb2ludEN1cnJlbnQ7XG4gICAgbGV0IHBvaW50QWZ0ZXIgPSBnZXRQb2ludChwb2ludHMsIDApO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBwb2ludHNMZW4gLSAxOyArK2kpe1xuICAgICAgICBwb2ludEN1cnJlbnQgPSBwb2ludEFmdGVyO1xuICAgICAgICBwb2ludEFmdGVyID0gZ2V0UG9pbnQocG9pbnRzLCBpICsgMSk7XG4gICAgICAgIGlmICghcG9pbnRDdXJyZW50IHx8ICFwb2ludEFmdGVyKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxtb3N0RXF1YWxzKGRlbHRhS1tpXSwgMCwgRVBTSUxPTikpIHtcbiAgICAgICAgICAgIG1LW2ldID0gbUtbaSArIDFdID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGFscGhhSyA9IG1LW2ldIC8gZGVsdGFLW2ldO1xuICAgICAgICBiZXRhSyA9IG1LW2kgKyAxXSAvIGRlbHRhS1tpXTtcbiAgICAgICAgc3F1YXJlZE1hZ25pdHVkZSA9IE1hdGgucG93KGFscGhhSywgMikgKyBNYXRoLnBvdyhiZXRhSywgMik7XG4gICAgICAgIGlmIChzcXVhcmVkTWFnbml0dWRlIDw9IDkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRhdUsgPSAzIC8gTWF0aC5zcXJ0KHNxdWFyZWRNYWduaXR1ZGUpO1xuICAgICAgICBtS1tpXSA9IGFscGhhSyAqIHRhdUsgKiBkZWx0YUtbaV07XG4gICAgICAgIG1LW2kgKyAxXSA9IGJldGFLICogdGF1SyAqIGRlbHRhS1tpXTtcbiAgICB9XG59XG5mdW5jdGlvbiBtb25vdG9uZUNvbXB1dGUocG9pbnRzLCBtSywgaW5kZXhBeGlzID0gJ3gnKSB7XG4gICAgY29uc3QgdmFsdWVBeGlzID0gZ2V0VmFsdWVBeGlzKGluZGV4QXhpcyk7XG4gICAgY29uc3QgcG9pbnRzTGVuID0gcG9pbnRzLmxlbmd0aDtcbiAgICBsZXQgZGVsdGEsIHBvaW50QmVmb3JlLCBwb2ludEN1cnJlbnQ7XG4gICAgbGV0IHBvaW50QWZ0ZXIgPSBnZXRQb2ludChwb2ludHMsIDApO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBwb2ludHNMZW47ICsraSl7XG4gICAgICAgIHBvaW50QmVmb3JlID0gcG9pbnRDdXJyZW50O1xuICAgICAgICBwb2ludEN1cnJlbnQgPSBwb2ludEFmdGVyO1xuICAgICAgICBwb2ludEFmdGVyID0gZ2V0UG9pbnQocG9pbnRzLCBpICsgMSk7XG4gICAgICAgIGlmICghcG9pbnRDdXJyZW50KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpUGl4ZWwgPSBwb2ludEN1cnJlbnRbaW5kZXhBeGlzXTtcbiAgICAgICAgY29uc3QgdlBpeGVsID0gcG9pbnRDdXJyZW50W3ZhbHVlQXhpc107XG4gICAgICAgIGlmIChwb2ludEJlZm9yZSkge1xuICAgICAgICAgICAgZGVsdGEgPSAoaVBpeGVsIC0gcG9pbnRCZWZvcmVbaW5kZXhBeGlzXSkgLyAzO1xuICAgICAgICAgICAgcG9pbnRDdXJyZW50W2BjcDEke2luZGV4QXhpc31gXSA9IGlQaXhlbCAtIGRlbHRhO1xuICAgICAgICAgICAgcG9pbnRDdXJyZW50W2BjcDEke3ZhbHVlQXhpc31gXSA9IHZQaXhlbCAtIGRlbHRhICogbUtbaV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvaW50QWZ0ZXIpIHtcbiAgICAgICAgICAgIGRlbHRhID0gKHBvaW50QWZ0ZXJbaW5kZXhBeGlzXSAtIGlQaXhlbCkgLyAzO1xuICAgICAgICAgICAgcG9pbnRDdXJyZW50W2BjcDIke2luZGV4QXhpc31gXSA9IGlQaXhlbCArIGRlbHRhO1xuICAgICAgICAgICAgcG9pbnRDdXJyZW50W2BjcDIke3ZhbHVlQXhpc31gXSA9IHZQaXhlbCArIGRlbHRhICogbUtbaV07XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyBCw6l6aWVyIGNvbnRyb2wgcG9pbnRzIGluIGEgc2ltaWxhciB3YXkgdGhhbiB8c3BsaW5lQ3VydmV8LFxuICogYnV0IHByZXNlcnZlcyBtb25vdG9uaWNpdHkgb2YgdGhlIHByb3ZpZGVkIGRhdGEgYW5kIGVuc3VyZXMgbm8gbG9jYWwgZXh0cmVtdW1zIGFyZSBhZGRlZFxuICogYmV0d2VlbiB0aGUgZGF0YXNldCBkaXNjcmV0ZSBwb2ludHMgZHVlIHRvIHRoZSBpbnRlcnBvbGF0aW9uLlxuICogU2VlIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTW9ub3RvbmVfY3ViaWNfaW50ZXJwb2xhdGlvblxuICovIGZ1bmN0aW9uIHNwbGluZUN1cnZlTW9ub3RvbmUocG9pbnRzLCBpbmRleEF4aXMgPSAneCcpIHtcbiAgICBjb25zdCB2YWx1ZUF4aXMgPSBnZXRWYWx1ZUF4aXMoaW5kZXhBeGlzKTtcbiAgICBjb25zdCBwb2ludHNMZW4gPSBwb2ludHMubGVuZ3RoO1xuICAgIGNvbnN0IGRlbHRhSyA9IEFycmF5KHBvaW50c0xlbikuZmlsbCgwKTtcbiAgICBjb25zdCBtSyA9IEFycmF5KHBvaW50c0xlbik7XG4gICAgLy8gQ2FsY3VsYXRlIHNsb3BlcyAoZGVsdGFLKSBhbmQgaW5pdGlhbGl6ZSB0YW5nZW50cyAobUspXG4gICAgbGV0IGksIHBvaW50QmVmb3JlLCBwb2ludEN1cnJlbnQ7XG4gICAgbGV0IHBvaW50QWZ0ZXIgPSBnZXRQb2ludChwb2ludHMsIDApO1xuICAgIGZvcihpID0gMDsgaSA8IHBvaW50c0xlbjsgKytpKXtcbiAgICAgICAgcG9pbnRCZWZvcmUgPSBwb2ludEN1cnJlbnQ7XG4gICAgICAgIHBvaW50Q3VycmVudCA9IHBvaW50QWZ0ZXI7XG4gICAgICAgIHBvaW50QWZ0ZXIgPSBnZXRQb2ludChwb2ludHMsIGkgKyAxKTtcbiAgICAgICAgaWYgKCFwb2ludEN1cnJlbnQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb2ludEFmdGVyKSB7XG4gICAgICAgICAgICBjb25zdCBzbG9wZURlbHRhID0gcG9pbnRBZnRlcltpbmRleEF4aXNdIC0gcG9pbnRDdXJyZW50W2luZGV4QXhpc107XG4gICAgICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiB0d28gcG9pbnRzIHRoYXQgYXBwZWFyIGF0IHRoZSBzYW1lIHggcGl4ZWwsIHNsb3BlRGVsdGFYIGlzIDBcbiAgICAgICAgICAgIGRlbHRhS1tpXSA9IHNsb3BlRGVsdGEgIT09IDAgPyAocG9pbnRBZnRlclt2YWx1ZUF4aXNdIC0gcG9pbnRDdXJyZW50W3ZhbHVlQXhpc10pIC8gc2xvcGVEZWx0YSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgbUtbaV0gPSAhcG9pbnRCZWZvcmUgPyBkZWx0YUtbaV0gOiAhcG9pbnRBZnRlciA/IGRlbHRhS1tpIC0gMV0gOiBzaWduKGRlbHRhS1tpIC0gMV0pICE9PSBzaWduKGRlbHRhS1tpXSkgPyAwIDogKGRlbHRhS1tpIC0gMV0gKyBkZWx0YUtbaV0pIC8gMjtcbiAgICB9XG4gICAgbW9ub3RvbmVBZGp1c3QocG9pbnRzLCBkZWx0YUssIG1LKTtcbiAgICBtb25vdG9uZUNvbXB1dGUocG9pbnRzLCBtSywgaW5kZXhBeGlzKTtcbn1cbmZ1bmN0aW9uIGNhcENvbnRyb2xQb2ludChwdCwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4ocHQsIG1heCksIG1pbik7XG59XG5mdW5jdGlvbiBjYXBCZXppZXJQb2ludHMocG9pbnRzLCBhcmVhKSB7XG4gICAgbGV0IGksIGlsZW4sIHBvaW50LCBpbkFyZWEsIGluQXJlYVByZXY7XG4gICAgbGV0IGluQXJlYU5leHQgPSBfaXNQb2ludEluQXJlYShwb2ludHNbMF0sIGFyZWEpO1xuICAgIGZvcihpID0gMCwgaWxlbiA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICBpbkFyZWFQcmV2ID0gaW5BcmVhO1xuICAgICAgICBpbkFyZWEgPSBpbkFyZWFOZXh0O1xuICAgICAgICBpbkFyZWFOZXh0ID0gaSA8IGlsZW4gLSAxICYmIF9pc1BvaW50SW5BcmVhKHBvaW50c1tpICsgMV0sIGFyZWEpO1xuICAgICAgICBpZiAoIWluQXJlYSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGlmIChpbkFyZWFQcmV2KSB7XG4gICAgICAgICAgICBwb2ludC5jcDF4ID0gY2FwQ29udHJvbFBvaW50KHBvaW50LmNwMXgsIGFyZWEubGVmdCwgYXJlYS5yaWdodCk7XG4gICAgICAgICAgICBwb2ludC5jcDF5ID0gY2FwQ29udHJvbFBvaW50KHBvaW50LmNwMXksIGFyZWEudG9wLCBhcmVhLmJvdHRvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluQXJlYU5leHQpIHtcbiAgICAgICAgICAgIHBvaW50LmNwMnggPSBjYXBDb250cm9sUG9pbnQocG9pbnQuY3AyeCwgYXJlYS5sZWZ0LCBhcmVhLnJpZ2h0KTtcbiAgICAgICAgICAgIHBvaW50LmNwMnkgPSBjYXBDb250cm9sUG9pbnQocG9pbnQuY3AyeSwgYXJlYS50b3AsIGFyZWEuYm90dG9tKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfdXBkYXRlQmV6aWVyQ29udHJvbFBvaW50cyhwb2ludHMsIG9wdGlvbnMsIGFyZWEsIGxvb3AsIGluZGV4QXhpcykge1xuICAgIGxldCBpLCBpbGVuLCBwb2ludCwgY29udHJvbFBvaW50cztcbiAgICAvLyBPbmx5IGNvbnNpZGVyIHBvaW50cyB0aGF0IGFyZSBkcmF3biBpbiBjYXNlIHRoZSBzcGFuR2FwcyBvcHRpb24gaXMgdXNlZFxuICAgIGlmIChvcHRpb25zLnNwYW5HYXBzKSB7XG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5maWx0ZXIoKHB0KT0+IXB0LnNraXApO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5jdWJpY0ludGVycG9sYXRpb25Nb2RlID09PSAnbW9ub3RvbmUnKSB7XG4gICAgICAgIHNwbGluZUN1cnZlTW9ub3RvbmUocG9pbnRzLCBpbmRleEF4aXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwcmV2ID0gbG9vcCA/IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0gOiBwb2ludHNbMF07XG4gICAgICAgIGZvcihpID0gMCwgaWxlbiA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBjb250cm9sUG9pbnRzID0gc3BsaW5lQ3VydmUocHJldiwgcG9pbnQsIHBvaW50c1tNYXRoLm1pbihpICsgMSwgaWxlbiAtIChsb29wID8gMCA6IDEpKSAlIGlsZW5dLCBvcHRpb25zLnRlbnNpb24pO1xuICAgICAgICAgICAgcG9pbnQuY3AxeCA9IGNvbnRyb2xQb2ludHMucHJldmlvdXMueDtcbiAgICAgICAgICAgIHBvaW50LmNwMXkgPSBjb250cm9sUG9pbnRzLnByZXZpb3VzLnk7XG4gICAgICAgICAgICBwb2ludC5jcDJ4ID0gY29udHJvbFBvaW50cy5uZXh0Lng7XG4gICAgICAgICAgICBwb2ludC5jcDJ5ID0gY29udHJvbFBvaW50cy5uZXh0Lnk7XG4gICAgICAgICAgICBwcmV2ID0gcG9pbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY2FwQmV6aWVyUG9pbnRzKSB7XG4gICAgICAgIGNhcEJlemllclBvaW50cyhwb2ludHMsIGFyZWEpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBOb3RlOiB0eXBlZGVmcyBhcmUgYXV0by1leHBvcnRlZCwgc28gdXNlIGEgbWFkZS11cCBgZG9tYCBuYW1lc3BhY2Ugd2hlcmVcbiAqIG5lY2Vzc2FyeSB0byBhdm9pZCBkdXBsaWNhdGVzIHdpdGggYGV4cG9ydCAqIGZyb20gJy4vaGVscGVyc2A7IHNlZVxuICogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy80NjAxMVxuICogQHR5cGVkZWYgeyBpbXBvcnQoJy4uL2NvcmUvY29yZS5jb250cm9sbGVyLmpzJykuZGVmYXVsdCB9IGRvbS5DaGFydFxuICogQHR5cGVkZWYgeyBpbXBvcnQoJy4uLy4uL3R5cGVzJykuQ2hhcnRFdmVudCB9IENoYXJ0RXZlbnRcbiAqLyAvKipcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2lzRG9tU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9nZXRQYXJlbnROb2RlKGRvbU5vZGUpIHtcbiAgICBsZXQgcGFyZW50ID0gZG9tTm9kZS5wYXJlbnROb2RlO1xuICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IFNoYWRvd1Jvb3RdJykge1xuICAgICAgICBwYXJlbnQgPSBwYXJlbnQuaG9zdDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudDtcbn1cbi8qKlxuICogY29udmVydCBtYXgtd2lkdGgvbWF4LWhlaWdodCB2YWx1ZXMgdGhhdCBtYXkgYmUgcGVyY2VudGFnZXMgaW50byBhIG51bWJlclxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBwYXJzZU1heFN0eWxlKHN0eWxlVmFsdWUsIG5vZGUsIHBhcmVudFByb3BlcnR5KSB7XG4gICAgbGV0IHZhbHVlSW5QaXhlbHM7XG4gICAgaWYgKHR5cGVvZiBzdHlsZVZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZUluUGl4ZWxzID0gcGFyc2VJbnQoc3R5bGVWYWx1ZSwgMTApO1xuICAgICAgICBpZiAoc3R5bGVWYWx1ZS5pbmRleE9mKCclJykgIT09IC0xKSB7XG4gICAgICAgICAgICAvLyBwZXJjZW50YWdlICogc2l6ZSBpbiBkaW1lbnNpb25cbiAgICAgICAgICAgIHZhbHVlSW5QaXhlbHMgPSB2YWx1ZUluUGl4ZWxzIC8gMTAwICogbm9kZS5wYXJlbnROb2RlW3BhcmVudFByb3BlcnR5XTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlSW5QaXhlbHMgPSBzdHlsZVZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVJblBpeGVscztcbn1cbmNvbnN0IGdldENvbXB1dGVkU3R5bGUgPSAoZWxlbWVudCk9PmVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpO1xuZnVuY3Rpb24gZ2V0U3R5bGUoZWwsIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZWwpLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpO1xufVxuY29uc3QgcG9zaXRpb25zID0gW1xuICAgICd0b3AnLFxuICAgICdyaWdodCcsXG4gICAgJ2JvdHRvbScsXG4gICAgJ2xlZnQnXG5dO1xuZnVuY3Rpb24gZ2V0UG9zaXRpb25lZFN0eWxlKHN0eWxlcywgc3R5bGUsIHN1ZmZpeCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIHN1ZmZpeCA9IHN1ZmZpeCA/ICctJyArIHN1ZmZpeCA6ICcnO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCA0OyBpKyspe1xuICAgICAgICBjb25zdCBwb3MgPSBwb3NpdGlvbnNbaV07XG4gICAgICAgIHJlc3VsdFtwb3NdID0gcGFyc2VGbG9hdChzdHlsZXNbc3R5bGUgKyAnLScgKyBwb3MgKyBzdWZmaXhdKSB8fCAwO1xuICAgIH1cbiAgICByZXN1bHQud2lkdGggPSByZXN1bHQubGVmdCArIHJlc3VsdC5yaWdodDtcbiAgICByZXN1bHQuaGVpZ2h0ID0gcmVzdWx0LnRvcCArIHJlc3VsdC5ib3R0b207XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmNvbnN0IHVzZU9mZnNldFBvcyA9ICh4LCB5LCB0YXJnZXQpPT4oeCA+IDAgfHwgeSA+IDApICYmICghdGFyZ2V0IHx8ICF0YXJnZXQuc2hhZG93Um9vdCk7XG4vKipcbiAqIEBwYXJhbSBlXG4gKiBAcGFyYW0gY2FudmFzXG4gKiBAcmV0dXJucyBDYW52YXMgcG9zaXRpb25cbiAqLyBmdW5jdGlvbiBnZXRDYW52YXNQb3NpdGlvbihlLCBjYW52YXMpIHtcbiAgICBjb25zdCB0b3VjaGVzID0gZS50b3VjaGVzO1xuICAgIGNvbnN0IHNvdXJjZSA9IHRvdWNoZXMgJiYgdG91Y2hlcy5sZW5ndGggPyB0b3VjaGVzWzBdIDogZTtcbiAgICBjb25zdCB7IG9mZnNldFggLCBvZmZzZXRZICB9ID0gc291cmNlO1xuICAgIGxldCBib3ggPSBmYWxzZTtcbiAgICBsZXQgeCwgeTtcbiAgICBpZiAodXNlT2Zmc2V0UG9zKG9mZnNldFgsIG9mZnNldFksIGUudGFyZ2V0KSkge1xuICAgICAgICB4ID0gb2Zmc2V0WDtcbiAgICAgICAgeSA9IG9mZnNldFk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVjdCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgeCA9IHNvdXJjZS5jbGllbnRYIC0gcmVjdC5sZWZ0O1xuICAgICAgICB5ID0gc291cmNlLmNsaWVudFkgLSByZWN0LnRvcDtcbiAgICAgICAgYm94ID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgYm94XG4gICAgfTtcbn1cbi8qKlxuICogR2V0cyBhbiBldmVudCdzIHgsIHkgY29vcmRpbmF0ZXMsIHJlbGF0aXZlIHRvIHRoZSBjaGFydCBhcmVhXG4gKiBAcGFyYW0gZXZlbnRcbiAqIEBwYXJhbSBjaGFydFxuICogQHJldHVybnMgeCBhbmQgeSBjb29yZGluYXRlcyBvZiB0aGUgZXZlbnRcbiAqLyBmdW5jdGlvbiBnZXRSZWxhdGl2ZVBvc2l0aW9uKGV2ZW50LCBjaGFydCkge1xuICAgIGlmICgnbmF0aXZlJyBpbiBldmVudCkge1xuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfVxuICAgIGNvbnN0IHsgY2FudmFzICwgY3VycmVudERldmljZVBpeGVsUmF0aW8gIH0gPSBjaGFydDtcbiAgICBjb25zdCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoY2FudmFzKTtcbiAgICBjb25zdCBib3JkZXJCb3ggPSBzdHlsZS5ib3hTaXppbmcgPT09ICdib3JkZXItYm94JztcbiAgICBjb25zdCBwYWRkaW5ncyA9IGdldFBvc2l0aW9uZWRTdHlsZShzdHlsZSwgJ3BhZGRpbmcnKTtcbiAgICBjb25zdCBib3JkZXJzID0gZ2V0UG9zaXRpb25lZFN0eWxlKHN0eWxlLCAnYm9yZGVyJywgJ3dpZHRoJyk7XG4gICAgY29uc3QgeyB4ICwgeSAsIGJveCAgfSA9IGdldENhbnZhc1Bvc2l0aW9uKGV2ZW50LCBjYW52YXMpO1xuICAgIGNvbnN0IHhPZmZzZXQgPSBwYWRkaW5ncy5sZWZ0ICsgKGJveCAmJiBib3JkZXJzLmxlZnQpO1xuICAgIGNvbnN0IHlPZmZzZXQgPSBwYWRkaW5ncy50b3AgKyAoYm94ICYmIGJvcmRlcnMudG9wKTtcbiAgICBsZXQgeyB3aWR0aCAsIGhlaWdodCAgfSA9IGNoYXJ0O1xuICAgIGlmIChib3JkZXJCb3gpIHtcbiAgICAgICAgd2lkdGggLT0gcGFkZGluZ3Mud2lkdGggKyBib3JkZXJzLndpZHRoO1xuICAgICAgICBoZWlnaHQgLT0gcGFkZGluZ3MuaGVpZ2h0ICsgYm9yZGVycy5oZWlnaHQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHg6IE1hdGgucm91bmQoKHggLSB4T2Zmc2V0KSAvIHdpZHRoICogY2FudmFzLndpZHRoIC8gY3VycmVudERldmljZVBpeGVsUmF0aW8pLFxuICAgICAgICB5OiBNYXRoLnJvdW5kKCh5IC0geU9mZnNldCkgLyBoZWlnaHQgKiBjYW52YXMuaGVpZ2h0IC8gY3VycmVudERldmljZVBpeGVsUmF0aW8pXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5lclNpemUoY2FudmFzLCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgbGV0IG1heFdpZHRoLCBtYXhIZWlnaHQ7XG4gICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQgfHwgaGVpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gY2FudmFzICYmIF9nZXRQYXJlbnROb2RlKGNhbnZhcyk7XG4gICAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgICAgICB3aWR0aCA9IGNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IGNhbnZhcy5jbGllbnRIZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyAvLyB0aGlzIGlzIHRoZSBib3JkZXIgYm94IG9mIHRoZSBjb250YWluZXJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lclN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXIpO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyQm9yZGVyID0gZ2V0UG9zaXRpb25lZFN0eWxlKGNvbnRhaW5lclN0eWxlLCAnYm9yZGVyJywgJ3dpZHRoJyk7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJQYWRkaW5nID0gZ2V0UG9zaXRpb25lZFN0eWxlKGNvbnRhaW5lclN0eWxlLCAncGFkZGluZycpO1xuICAgICAgICAgICAgd2lkdGggPSByZWN0LndpZHRoIC0gY29udGFpbmVyUGFkZGluZy53aWR0aCAtIGNvbnRhaW5lckJvcmRlci53aWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IHJlY3QuaGVpZ2h0IC0gY29udGFpbmVyUGFkZGluZy5oZWlnaHQgLSBjb250YWluZXJCb3JkZXIuaGVpZ2h0O1xuICAgICAgICAgICAgbWF4V2lkdGggPSBwYXJzZU1heFN0eWxlKGNvbnRhaW5lclN0eWxlLm1heFdpZHRoLCBjb250YWluZXIsICdjbGllbnRXaWR0aCcpO1xuICAgICAgICAgICAgbWF4SGVpZ2h0ID0gcGFyc2VNYXhTdHlsZShjb250YWluZXJTdHlsZS5tYXhIZWlnaHQsIGNvbnRhaW5lciwgJ2NsaWVudEhlaWdodCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIG1heFdpZHRoOiBtYXhXaWR0aCB8fCBJTkZJTklUWSxcbiAgICAgICAgbWF4SGVpZ2h0OiBtYXhIZWlnaHQgfHwgSU5GSU5JVFlcbiAgICB9O1xufVxuY29uc3Qgcm91bmQxID0gKHYpPT5NYXRoLnJvdW5kKHYgKiAxMCkgLyAxMDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiBnZXRNYXhpbXVtU2l6ZShjYW52YXMsIGJiV2lkdGgsIGJiSGVpZ2h0LCBhc3BlY3RSYXRpbykge1xuICAgIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjYW52YXMpO1xuICAgIGNvbnN0IG1hcmdpbnMgPSBnZXRQb3NpdGlvbmVkU3R5bGUoc3R5bGUsICdtYXJnaW4nKTtcbiAgICBjb25zdCBtYXhXaWR0aCA9IHBhcnNlTWF4U3R5bGUoc3R5bGUubWF4V2lkdGgsIGNhbnZhcywgJ2NsaWVudFdpZHRoJykgfHwgSU5GSU5JVFk7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gcGFyc2VNYXhTdHlsZShzdHlsZS5tYXhIZWlnaHQsIGNhbnZhcywgJ2NsaWVudEhlaWdodCcpIHx8IElORklOSVRZO1xuICAgIGNvbnN0IGNvbnRhaW5lclNpemUgPSBnZXRDb250YWluZXJTaXplKGNhbnZhcywgYmJXaWR0aCwgYmJIZWlnaHQpO1xuICAgIGxldCB7IHdpZHRoICwgaGVpZ2h0ICB9ID0gY29udGFpbmVyU2l6ZTtcbiAgICBpZiAoc3R5bGUuYm94U2l6aW5nID09PSAnY29udGVudC1ib3gnKSB7XG4gICAgICAgIGNvbnN0IGJvcmRlcnMgPSBnZXRQb3NpdGlvbmVkU3R5bGUoc3R5bGUsICdib3JkZXInLCAnd2lkdGgnKTtcbiAgICAgICAgY29uc3QgcGFkZGluZ3MgPSBnZXRQb3NpdGlvbmVkU3R5bGUoc3R5bGUsICdwYWRkaW5nJyk7XG4gICAgICAgIHdpZHRoIC09IHBhZGRpbmdzLndpZHRoICsgYm9yZGVycy53aWR0aDtcbiAgICAgICAgaGVpZ2h0IC09IHBhZGRpbmdzLmhlaWdodCArIGJvcmRlcnMuaGVpZ2h0O1xuICAgIH1cbiAgICB3aWR0aCA9IE1hdGgubWF4KDAsIHdpZHRoIC0gbWFyZ2lucy53aWR0aCk7XG4gICAgaGVpZ2h0ID0gTWF0aC5tYXgoMCwgYXNwZWN0UmF0aW8gPyB3aWR0aCAvIGFzcGVjdFJhdGlvIDogaGVpZ2h0IC0gbWFyZ2lucy5oZWlnaHQpO1xuICAgIHdpZHRoID0gcm91bmQxKE1hdGgubWluKHdpZHRoLCBtYXhXaWR0aCwgY29udGFpbmVyU2l6ZS5tYXhXaWR0aCkpO1xuICAgIGhlaWdodCA9IHJvdW5kMShNYXRoLm1pbihoZWlnaHQsIG1heEhlaWdodCwgY29udGFpbmVyU2l6ZS5tYXhIZWlnaHQpKTtcbiAgICBpZiAod2lkdGggJiYgIWhlaWdodCkge1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvNDY1OVxuICAgICAgICAvLyBJZiB0aGUgY2FudmFzIGhhcyB3aWR0aCwgYnV0IG5vIGhlaWdodCwgZGVmYXVsdCB0byBhc3BlY3RSYXRpbyBvZiAyIChjYW52YXMgZGVmYXVsdClcbiAgICAgICAgaGVpZ2h0ID0gcm91bmQxKHdpZHRoIC8gMik7XG4gICAgfVxuICAgIGNvbnN0IG1haW50YWluSGVpZ2h0ID0gYmJXaWR0aCAhPT0gdW5kZWZpbmVkIHx8IGJiSGVpZ2h0ICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG1haW50YWluSGVpZ2h0ICYmIGFzcGVjdFJhdGlvICYmIGNvbnRhaW5lclNpemUuaGVpZ2h0ICYmIGhlaWdodCA+IGNvbnRhaW5lclNpemUuaGVpZ2h0KSB7XG4gICAgICAgIGhlaWdodCA9IGNvbnRhaW5lclNpemUuaGVpZ2h0O1xuICAgICAgICB3aWR0aCA9IHJvdW5kMShNYXRoLmZsb29yKGhlaWdodCAqIGFzcGVjdFJhdGlvKSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICB9O1xufVxuLyoqXG4gKiBAcGFyYW0gY2hhcnRcbiAqIEBwYXJhbSBmb3JjZVJhdGlvXG4gKiBAcGFyYW0gZm9yY2VTdHlsZVxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY2FudmFzIGNvbnRleHQgc2l6ZSBvciB0cmFuc2Zvcm1hdGlvbiBoYXMgY2hhbmdlZC5cbiAqLyBmdW5jdGlvbiByZXRpbmFTY2FsZShjaGFydCwgZm9yY2VSYXRpbywgZm9yY2VTdHlsZSkge1xuICAgIGNvbnN0IHBpeGVsUmF0aW8gPSBmb3JjZVJhdGlvIHx8IDE7XG4gICAgY29uc3QgZGV2aWNlSGVpZ2h0ID0gTWF0aC5mbG9vcihjaGFydC5oZWlnaHQgKiBwaXhlbFJhdGlvKTtcbiAgICBjb25zdCBkZXZpY2VXaWR0aCA9IE1hdGguZmxvb3IoY2hhcnQud2lkdGggKiBwaXhlbFJhdGlvKTtcbiAgICBjaGFydC5oZWlnaHQgPSBNYXRoLmZsb29yKGNoYXJ0LmhlaWdodCk7XG4gICAgY2hhcnQud2lkdGggPSBNYXRoLmZsb29yKGNoYXJ0LndpZHRoKTtcbiAgICBjb25zdCBjYW52YXMgPSBjaGFydC5jYW52YXM7XG4gICAgLy8gSWYgbm8gc3R5bGUgaGFzIGJlZW4gc2V0IG9uIHRoZSBjYW52YXMsIHRoZSByZW5kZXIgc2l6ZSBpcyB1c2VkIGFzIGRpc3BsYXkgc2l6ZSxcbiAgICAvLyBtYWtpbmcgdGhlIGNoYXJ0IHZpc3VhbGx5IGJpZ2dlciwgc28gbGV0J3MgZW5mb3JjZSBpdCB0byB0aGUgXCJjb3JyZWN0XCIgdmFsdWVzLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvMzU3NVxuICAgIGlmIChjYW52YXMuc3R5bGUgJiYgKGZvcmNlU3R5bGUgfHwgIWNhbnZhcy5zdHlsZS5oZWlnaHQgJiYgIWNhbnZhcy5zdHlsZS53aWR0aCkpIHtcbiAgICAgICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGAke2NoYXJ0LmhlaWdodH1weGA7XG4gICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IGAke2NoYXJ0LndpZHRofXB4YDtcbiAgICB9XG4gICAgaWYgKGNoYXJ0LmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvICE9PSBwaXhlbFJhdGlvIHx8IGNhbnZhcy5oZWlnaHQgIT09IGRldmljZUhlaWdodCB8fCBjYW52YXMud2lkdGggIT09IGRldmljZVdpZHRoKSB7XG4gICAgICAgIGNoYXJ0LmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvID0gcGl4ZWxSYXRpbztcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGRldmljZUhlaWdodDtcbiAgICAgICAgY2FudmFzLndpZHRoID0gZGV2aWNlV2lkdGg7XG4gICAgICAgIGNoYXJ0LmN0eC5zZXRUcmFuc2Zvcm0ocGl4ZWxSYXRpbywgMCwgMCwgcGl4ZWxSYXRpbywgMCwgMCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG4vKipcbiAqIERldGVjdHMgc3VwcG9ydCBmb3Igb3B0aW9ucyBvYmplY3QgYXJndW1lbnQgaW4gYWRkRXZlbnRMaXN0ZW5lci5cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudFRhcmdldC9hZGRFdmVudExpc3RlbmVyI1NhZmVseV9kZXRlY3Rpbmdfb3B0aW9uX3N1cHBvcnRcbiAqIEBwcml2YXRlXG4gKi8gY29uc3Qgc3VwcG9ydHNFdmVudExpc3RlbmVyT3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICAgIGxldCBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGdldCBwYXNzaXZlICgpIHtcbiAgICAgICAgICAgICAgICBwYXNzaXZlU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChfaXNEb21TdXBwb3J0ZWQoKSkge1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBudWxsLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0JywgbnVsbCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgLy8gY29udGludWUgcmVnYXJkbGVzcyBvZiBlcnJvclxuICAgIH1cbiAgICByZXR1cm4gcGFzc2l2ZVN1cHBvcnRlZDtcbn0oKTtcbi8qKlxuICogVGhlIFwidXNlZFwiIHNpemUgaXMgdGhlIGZpbmFsIHZhbHVlIG9mIGEgZGltZW5zaW9uIHByb3BlcnR5IGFmdGVyIGFsbCBjYWxjdWxhdGlvbnMgaGF2ZVxuICogYmVlbiBwZXJmb3JtZWQuIFRoaXMgbWV0aG9kIHVzZXMgdGhlIGNvbXB1dGVkIHN0eWxlIG9mIGBlbGVtZW50YCBidXQgcmV0dXJucyB1bmRlZmluZWRcbiAqIGlmIHRoZSBjb21wdXRlZCBzdHlsZSBpcyBub3QgZXhwcmVzc2VkIGluIHBpeGVscy4gVGhhdCBjYW4gaGFwcGVuIGluIHNvbWUgY2FzZXMgd2hlcmVcbiAqIGBlbGVtZW50YCBoYXMgYSBzaXplIHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgYW5kIHRoaXMgbGFzdCBvbmUgaXMgbm90IHlldCBkaXNwbGF5ZWQsXG4gKiBmb3IgZXhhbXBsZSBiZWNhdXNlIG9mIGBkaXNwbGF5OiBub25lYCBvbiBhIHBhcmVudCBub2RlLlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdXNlZF92YWx1ZVxuICogQHJldHVybnMgU2l6ZSBpbiBwaXhlbHMgb3IgdW5kZWZpbmVkIGlmIHVua25vd24uXG4gKi8gZnVuY3Rpb24gcmVhZFVzZWRTaXplKGVsZW1lbnQsIHByb3BlcnR5KSB7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRTdHlsZShlbGVtZW50LCBwcm9wZXJ0eSk7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHZhbHVlICYmIHZhbHVlLm1hdGNoKC9eKFxcZCspKFxcLlxcZCspP3B4JC8pO1xuICAgIHJldHVybiBtYXRjaGVzID8gK21hdGNoZXNbMV0gOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfcG9pbnRJbkxpbmUocDEsIHAyLCB0LCBtb2RlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogcDEueCArIHQgKiAocDIueCAtIHAxLngpLFxuICAgICAgICB5OiBwMS55ICsgdCAqIChwMi55IC0gcDEueSlcbiAgICB9O1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9zdGVwcGVkSW50ZXJwb2xhdGlvbihwMSwgcDIsIHQsIG1vZGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiBwMS54ICsgdCAqIChwMi54IC0gcDEueCksXG4gICAgICAgIHk6IG1vZGUgPT09ICdtaWRkbGUnID8gdCA8IDAuNSA/IHAxLnkgOiBwMi55IDogbW9kZSA9PT0gJ2FmdGVyJyA/IHQgPCAxID8gcDEueSA6IHAyLnkgOiB0ID4gMCA/IHAyLnkgOiBwMS55XG4gICAgfTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfYmV6aWVySW50ZXJwb2xhdGlvbihwMSwgcDIsIHQsIG1vZGUpIHtcbiAgICBjb25zdCBjcDEgPSB7XG4gICAgICAgIHg6IHAxLmNwMngsXG4gICAgICAgIHk6IHAxLmNwMnlcbiAgICB9O1xuICAgIGNvbnN0IGNwMiA9IHtcbiAgICAgICAgeDogcDIuY3AxeCxcbiAgICAgICAgeTogcDIuY3AxeVxuICAgIH07XG4gICAgY29uc3QgYSA9IF9wb2ludEluTGluZShwMSwgY3AxLCB0KTtcbiAgICBjb25zdCBiID0gX3BvaW50SW5MaW5lKGNwMSwgY3AyLCB0KTtcbiAgICBjb25zdCBjID0gX3BvaW50SW5MaW5lKGNwMiwgcDIsIHQpO1xuICAgIGNvbnN0IGQgPSBfcG9pbnRJbkxpbmUoYSwgYiwgdCk7XG4gICAgY29uc3QgZSA9IF9wb2ludEluTGluZShiLCBjLCB0KTtcbiAgICByZXR1cm4gX3BvaW50SW5MaW5lKGQsIGUsIHQpO1xufVxuXG5jb25zdCBnZXRSaWdodFRvTGVmdEFkYXB0ZXIgPSBmdW5jdGlvbihyZWN0WCwgd2lkdGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB4ICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVjdFggKyByZWN0WCArIHdpZHRoIC0geDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0V2lkdGggKHcpIHtcbiAgICAgICAgICAgIHdpZHRoID0gdztcbiAgICAgICAgfSxcbiAgICAgICAgdGV4dEFsaWduIChhbGlnbikge1xuICAgICAgICAgICAgaWYgKGFsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbGlnbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhbGlnbiA9PT0gJ3JpZ2h0JyA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gICAgICAgIH0sXG4gICAgICAgIHhQbHVzICh4LCB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHggLSB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgbGVmdEZvckx0ciAoeCwgaXRlbVdpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm4geCAtIGl0ZW1XaWR0aDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuY29uc3QgZ2V0TGVmdFRvUmlnaHRBZGFwdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldFdpZHRoICh3KSB7fSxcbiAgICAgICAgdGV4dEFsaWduIChhbGlnbikge1xuICAgICAgICAgICAgcmV0dXJuIGFsaWduO1xuICAgICAgICB9LFxuICAgICAgICB4UGx1cyAoeCwgdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB4ICsgdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGxlZnRGb3JMdHIgKHgsIF9pdGVtV2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG4gICAgfTtcbn07XG5mdW5jdGlvbiBnZXRSdGxBZGFwdGVyKHJ0bCwgcmVjdFgsIHdpZHRoKSB7XG4gICAgcmV0dXJuIHJ0bCA/IGdldFJpZ2h0VG9MZWZ0QWRhcHRlcihyZWN0WCwgd2lkdGgpIDogZ2V0TGVmdFRvUmlnaHRBZGFwdGVyKCk7XG59XG5mdW5jdGlvbiBvdmVycmlkZVRleHREaXJlY3Rpb24oY3R4LCBkaXJlY3Rpb24pIHtcbiAgICBsZXQgc3R5bGUsIG9yaWdpbmFsO1xuICAgIGlmIChkaXJlY3Rpb24gPT09ICdsdHInIHx8IGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgc3R5bGUgPSBjdHguY2FudmFzLnN0eWxlO1xuICAgICAgICBvcmlnaW5hbCA9IFtcbiAgICAgICAgICAgIHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2RpcmVjdGlvbicpLFxuICAgICAgICAgICAgc3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eSgnZGlyZWN0aW9uJylcbiAgICAgICAgXTtcbiAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkoJ2RpcmVjdGlvbicsIGRpcmVjdGlvbiwgJ2ltcG9ydGFudCcpO1xuICAgICAgICBjdHgucHJldlRleHREaXJlY3Rpb24gPSBvcmlnaW5hbDtcbiAgICB9XG59XG5mdW5jdGlvbiByZXN0b3JlVGV4dERpcmVjdGlvbihjdHgsIG9yaWdpbmFsKSB7XG4gICAgaWYgKG9yaWdpbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlIGN0eC5wcmV2VGV4dERpcmVjdGlvbjtcbiAgICAgICAgY3R4LmNhbnZhcy5zdHlsZS5zZXRQcm9wZXJ0eSgnZGlyZWN0aW9uJywgb3JpZ2luYWxbMF0sIG9yaWdpbmFsWzFdKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5Rm4ocHJvcGVydHkpIHtcbiAgICBpZiAocHJvcGVydHkgPT09ICdhbmdsZScpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJldHdlZW46IF9hbmdsZUJldHdlZW4sXG4gICAgICAgICAgICBjb21wYXJlOiBfYW5nbGVEaWZmLFxuICAgICAgICAgICAgbm9ybWFsaXplOiBfbm9ybWFsaXplQW5nbGVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmV0d2VlbjogX2lzQmV0d2VlbixcbiAgICAgICAgY29tcGFyZTogKGEsIGIpPT5hIC0gYixcbiAgICAgICAgbm9ybWFsaXplOiAoeCk9PnhcbiAgICB9O1xufVxuZnVuY3Rpb24gbm9ybWFsaXplU2VnbWVudCh7IHN0YXJ0ICwgZW5kICwgY291bnQgLCBsb29wICwgc3R5bGUgIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdGFydDogc3RhcnQgJSBjb3VudCxcbiAgICAgICAgZW5kOiBlbmQgJSBjb3VudCxcbiAgICAgICAgbG9vcDogbG9vcCAmJiAoZW5kIC0gc3RhcnQgKyAxKSAlIGNvdW50ID09PSAwLFxuICAgICAgICBzdHlsZVxuICAgIH07XG59XG5mdW5jdGlvbiBnZXRTZWdtZW50KHNlZ21lbnQsIHBvaW50cywgYm91bmRzKSB7XG4gICAgY29uc3QgeyBwcm9wZXJ0eSAsIHN0YXJ0OiBzdGFydEJvdW5kICwgZW5kOiBlbmRCb3VuZCAgfSA9IGJvdW5kcztcbiAgICBjb25zdCB7IGJldHdlZW4gLCBub3JtYWxpemUgIH0gPSBwcm9wZXJ0eUZuKHByb3BlcnR5KTtcbiAgICBjb25zdCBjb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gICAgbGV0IHsgc3RhcnQgLCBlbmQgLCBsb29wICB9ID0gc2VnbWVudDtcbiAgICBsZXQgaSwgaWxlbjtcbiAgICBpZiAobG9vcCkge1xuICAgICAgICBzdGFydCArPSBjb3VudDtcbiAgICAgICAgZW5kICs9IGNvdW50O1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSBjb3VudDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBpZiAoIWJldHdlZW4obm9ybWFsaXplKHBvaW50c1tzdGFydCAlIGNvdW50XVtwcm9wZXJ0eV0pLCBzdGFydEJvdW5kLCBlbmRCb3VuZCkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJ0LS07XG4gICAgICAgICAgICBlbmQtLTtcbiAgICAgICAgfVxuICAgICAgICBzdGFydCAlPSBjb3VudDtcbiAgICAgICAgZW5kICU9IGNvdW50O1xuICAgIH1cbiAgICBpZiAoZW5kIDwgc3RhcnQpIHtcbiAgICAgICAgZW5kICs9IGNvdW50O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBzdGFydCxcbiAgICAgICAgZW5kLFxuICAgICAgICBsb29wLFxuICAgICAgICBzdHlsZTogc2VnbWVudC5zdHlsZVxuICAgIH07XG59XG4gZnVuY3Rpb24gX2JvdW5kU2VnbWVudChzZWdtZW50LCBwb2ludHMsIGJvdW5kcykge1xuICAgIGlmICghYm91bmRzKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBzZWdtZW50XG4gICAgICAgIF07XG4gICAgfVxuICAgIGNvbnN0IHsgcHJvcGVydHkgLCBzdGFydDogc3RhcnRCb3VuZCAsIGVuZDogZW5kQm91bmQgIH0gPSBib3VuZHM7XG4gICAgY29uc3QgY291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIGNvbnN0IHsgY29tcGFyZSAsIGJldHdlZW4gLCBub3JtYWxpemUgIH0gPSBwcm9wZXJ0eUZuKHByb3BlcnR5KTtcbiAgICBjb25zdCB7IHN0YXJ0ICwgZW5kICwgbG9vcCAsIHN0eWxlICB9ID0gZ2V0U2VnbWVudChzZWdtZW50LCBwb2ludHMsIGJvdW5kcyk7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgbGV0IGluc2lkZSA9IGZhbHNlO1xuICAgIGxldCBzdWJTdGFydCA9IG51bGw7XG4gICAgbGV0IHZhbHVlLCBwb2ludCwgcHJldlZhbHVlO1xuICAgIGNvbnN0IHN0YXJ0SXNCZWZvcmUgPSAoKT0+YmV0d2VlbihzdGFydEJvdW5kLCBwcmV2VmFsdWUsIHZhbHVlKSAmJiBjb21wYXJlKHN0YXJ0Qm91bmQsIHByZXZWYWx1ZSkgIT09IDA7XG4gICAgY29uc3QgZW5kSXNCZWZvcmUgPSAoKT0+Y29tcGFyZShlbmRCb3VuZCwgdmFsdWUpID09PSAwIHx8IGJldHdlZW4oZW5kQm91bmQsIHByZXZWYWx1ZSwgdmFsdWUpO1xuICAgIGNvbnN0IHNob3VsZFN0YXJ0ID0gKCk9Pmluc2lkZSB8fCBzdGFydElzQmVmb3JlKCk7XG4gICAgY29uc3Qgc2hvdWxkU3RvcCA9ICgpPT4haW5zaWRlIHx8IGVuZElzQmVmb3JlKCk7XG4gICAgZm9yKGxldCBpID0gc3RhcnQsIHByZXYgPSBzdGFydDsgaSA8PSBlbmQ7ICsraSl7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2kgJSBjb3VudF07XG4gICAgICAgIGlmIChwb2ludC5za2lwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IG5vcm1hbGl6ZShwb2ludFtwcm9wZXJ0eV0pO1xuICAgICAgICBpZiAodmFsdWUgPT09IHByZXZWYWx1ZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaW5zaWRlID0gYmV0d2Vlbih2YWx1ZSwgc3RhcnRCb3VuZCwgZW5kQm91bmQpO1xuICAgICAgICBpZiAoc3ViU3RhcnQgPT09IG51bGwgJiYgc2hvdWxkU3RhcnQoKSkge1xuICAgICAgICAgICAgc3ViU3RhcnQgPSBjb21wYXJlKHZhbHVlLCBzdGFydEJvdW5kKSA9PT0gMCA/IGkgOiBwcmV2O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdWJTdGFydCAhPT0gbnVsbCAmJiBzaG91bGRTdG9wKCkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5vcm1hbGl6ZVNlZ21lbnQoe1xuICAgICAgICAgICAgICAgIHN0YXJ0OiBzdWJTdGFydCxcbiAgICAgICAgICAgICAgICBlbmQ6IGksXG4gICAgICAgICAgICAgICAgbG9vcCxcbiAgICAgICAgICAgICAgICBjb3VudCxcbiAgICAgICAgICAgICAgICBzdHlsZVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3ViU3RhcnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHByZXYgPSBpO1xuICAgICAgICBwcmV2VmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKHN1YlN0YXJ0ICE9PSBudWxsKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKG5vcm1hbGl6ZVNlZ21lbnQoe1xuICAgICAgICAgICAgc3RhcnQ6IHN1YlN0YXJ0LFxuICAgICAgICAgICAgZW5kLFxuICAgICAgICAgICAgbG9vcCxcbiAgICAgICAgICAgIGNvdW50LFxuICAgICAgICAgICAgc3R5bGVcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIGZ1bmN0aW9uIF9ib3VuZFNlZ21lbnRzKGxpbmUsIGJvdW5kcykge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGNvbnN0IHNlZ21lbnRzID0gbGluZS5zZWdtZW50cztcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspe1xuICAgICAgICBjb25zdCBzdWIgPSBfYm91bmRTZWdtZW50KHNlZ21lbnRzW2ldLCBsaW5lLnBvaW50cywgYm91bmRzKTtcbiAgICAgICAgaWYgKHN1Yi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnN1Yik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiBmdW5jdGlvbiBmaW5kU3RhcnRBbmRFbmQocG9pbnRzLCBjb3VudCwgbG9vcCwgc3BhbkdhcHMpIHtcbiAgICBsZXQgc3RhcnQgPSAwO1xuICAgIGxldCBlbmQgPSBjb3VudCAtIDE7XG4gICAgaWYgKGxvb3AgJiYgIXNwYW5HYXBzKSB7XG4gICAgICAgIHdoaWxlKHN0YXJ0IDwgY291bnQgJiYgIXBvaW50c1tzdGFydF0uc2tpcCl7XG4gICAgICAgICAgICBzdGFydCsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHdoaWxlKHN0YXJ0IDwgY291bnQgJiYgcG9pbnRzW3N0YXJ0XS5za2lwKXtcbiAgICAgICAgc3RhcnQrKztcbiAgICB9XG4gICAgc3RhcnQgJT0gY291bnQ7XG4gICAgaWYgKGxvb3ApIHtcbiAgICAgICAgZW5kICs9IHN0YXJ0O1xuICAgIH1cbiAgICB3aGlsZShlbmQgPiBzdGFydCAmJiBwb2ludHNbZW5kICUgY291bnRdLnNraXApe1xuICAgICAgICBlbmQtLTtcbiAgICB9XG4gICAgZW5kICU9IGNvdW50O1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBlbmRcbiAgICB9O1xufVxuIGZ1bmN0aW9uIHNvbGlkU2VnbWVudHMocG9pbnRzLCBzdGFydCwgbWF4LCBsb29wKSB7XG4gICAgY29uc3QgY291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGxldCBsYXN0ID0gc3RhcnQ7XG4gICAgbGV0IHByZXYgPSBwb2ludHNbc3RhcnRdO1xuICAgIGxldCBlbmQ7XG4gICAgZm9yKGVuZCA9IHN0YXJ0ICsgMTsgZW5kIDw9IG1heDsgKytlbmQpe1xuICAgICAgICBjb25zdCBjdXIgPSBwb2ludHNbZW5kICUgY291bnRdO1xuICAgICAgICBpZiAoY3VyLnNraXAgfHwgY3VyLnN0b3ApIHtcbiAgICAgICAgICAgIGlmICghcHJldi5za2lwKSB7XG4gICAgICAgICAgICAgICAgbG9vcCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0ICUgY291bnQsXG4gICAgICAgICAgICAgICAgICAgIGVuZDogKGVuZCAtIDEpICUgY291bnQsXG4gICAgICAgICAgICAgICAgICAgIGxvb3BcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGFydCA9IGxhc3QgPSBjdXIuc3RvcCA/IGVuZCA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYXN0ID0gZW5kO1xuICAgICAgICAgICAgaWYgKHByZXYuc2tpcCkge1xuICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByZXYgPSBjdXI7XG4gICAgfVxuICAgIGlmIChsYXN0ICE9PSBudWxsKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCAlIGNvdW50LFxuICAgICAgICAgICAgZW5kOiBsYXN0ICUgY291bnQsXG4gICAgICAgICAgICBsb29wXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIGZ1bmN0aW9uIF9jb21wdXRlU2VnbWVudHMobGluZSwgc2VnbWVudE9wdGlvbnMpIHtcbiAgICBjb25zdCBwb2ludHMgPSBsaW5lLnBvaW50cztcbiAgICBjb25zdCBzcGFuR2FwcyA9IGxpbmUub3B0aW9ucy5zcGFuR2FwcztcbiAgICBjb25zdCBjb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gICAgaWYgKCFjb3VudCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGxvb3AgPSAhIWxpbmUuX2xvb3A7XG4gICAgY29uc3QgeyBzdGFydCAsIGVuZCAgfSA9IGZpbmRTdGFydEFuZEVuZChwb2ludHMsIGNvdW50LCBsb29wLCBzcGFuR2Fwcyk7XG4gICAgaWYgKHNwYW5HYXBzID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBzcGxpdEJ5U3R5bGVzKGxpbmUsIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgICAgICBlbmQsXG4gICAgICAgICAgICAgICAgbG9vcFxuICAgICAgICAgICAgfVxuICAgICAgICBdLCBwb2ludHMsIHNlZ21lbnRPcHRpb25zKTtcbiAgICB9XG4gICAgY29uc3QgbWF4ID0gZW5kIDwgc3RhcnQgPyBlbmQgKyBjb3VudCA6IGVuZDtcbiAgICBjb25zdCBjb21wbGV0ZUxvb3AgPSAhIWxpbmUuX2Z1bGxMb29wICYmIHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gY291bnQgLSAxO1xuICAgIHJldHVybiBzcGxpdEJ5U3R5bGVzKGxpbmUsIHNvbGlkU2VnbWVudHMocG9pbnRzLCBzdGFydCwgbWF4LCBjb21wbGV0ZUxvb3ApLCBwb2ludHMsIHNlZ21lbnRPcHRpb25zKTtcbn1cbiBmdW5jdGlvbiBzcGxpdEJ5U3R5bGVzKGxpbmUsIHNlZ21lbnRzLCBwb2ludHMsIHNlZ21lbnRPcHRpb25zKSB7XG4gICAgaWYgKCFzZWdtZW50T3B0aW9ucyB8fCAhc2VnbWVudE9wdGlvbnMuc2V0Q29udGV4dCB8fCAhcG9pbnRzKSB7XG4gICAgICAgIHJldHVybiBzZWdtZW50cztcbiAgICB9XG4gICAgcmV0dXJuIGRvU3BsaXRCeVN0eWxlcyhsaW5lLCBzZWdtZW50cywgcG9pbnRzLCBzZWdtZW50T3B0aW9ucyk7XG59XG4gZnVuY3Rpb24gZG9TcGxpdEJ5U3R5bGVzKGxpbmUsIHNlZ21lbnRzLCBwb2ludHMsIHNlZ21lbnRPcHRpb25zKSB7XG4gICAgY29uc3QgY2hhcnRDb250ZXh0ID0gbGluZS5fY2hhcnQuZ2V0Q29udGV4dCgpO1xuICAgIGNvbnN0IGJhc2VTdHlsZSA9IHJlYWRTdHlsZShsaW5lLm9wdGlvbnMpO1xuICAgIGNvbnN0IHsgX2RhdGFzZXRJbmRleDogZGF0YXNldEluZGV4ICwgb3B0aW9uczogeyBzcGFuR2FwcyAgfSAgfSA9IGxpbmU7XG4gICAgY29uc3QgY291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGxldCBwcmV2U3R5bGUgPSBiYXNlU3R5bGU7XG4gICAgbGV0IHN0YXJ0ID0gc2VnbWVudHNbMF0uc3RhcnQ7XG4gICAgbGV0IGkgPSBzdGFydDtcbiAgICBmdW5jdGlvbiBhZGRTdHlsZShzLCBlLCBsLCBzdCkge1xuICAgICAgICBjb25zdCBkaXIgPSBzcGFuR2FwcyA/IC0xIDogMTtcbiAgICAgICAgaWYgKHMgPT09IGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzICs9IGNvdW50O1xuICAgICAgICB3aGlsZShwb2ludHNbcyAlIGNvdW50XS5za2lwKXtcbiAgICAgICAgICAgIHMgLT0gZGlyO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlKHBvaW50c1tlICUgY291bnRdLnNraXApe1xuICAgICAgICAgICAgZSArPSBkaXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMgJSBjb3VudCAhPT0gZSAlIGNvdW50KSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IHMgJSBjb3VudCxcbiAgICAgICAgICAgICAgICBlbmQ6IGUgJSBjb3VudCxcbiAgICAgICAgICAgICAgICBsb29wOiBsLFxuICAgICAgICAgICAgICAgIHN0eWxlOiBzdFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcmV2U3R5bGUgPSBzdDtcbiAgICAgICAgICAgIHN0YXJ0ID0gZSAlIGNvdW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cyl7XG4gICAgICAgIHN0YXJ0ID0gc3BhbkdhcHMgPyBzdGFydCA6IHNlZ21lbnQuc3RhcnQ7XG4gICAgICAgIGxldCBwcmV2ID0gcG9pbnRzW3N0YXJ0ICUgY291bnRdO1xuICAgICAgICBsZXQgc3R5bGU7XG4gICAgICAgIGZvcihpID0gc3RhcnQgKyAxOyBpIDw9IHNlZ21lbnQuZW5kOyBpKyspe1xuICAgICAgICAgICAgY29uc3QgcHQgPSBwb2ludHNbaSAlIGNvdW50XTtcbiAgICAgICAgICAgIHN0eWxlID0gcmVhZFN0eWxlKHNlZ21lbnRPcHRpb25zLnNldENvbnRleHQoY3JlYXRlQ29udGV4dChjaGFydENvbnRleHQsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc2VnbWVudCcsXG4gICAgICAgICAgICAgICAgcDA6IHByZXYsXG4gICAgICAgICAgICAgICAgcDE6IHB0LFxuICAgICAgICAgICAgICAgIHAwRGF0YUluZGV4OiAoaSAtIDEpICUgY291bnQsXG4gICAgICAgICAgICAgICAgcDFEYXRhSW5kZXg6IGkgJSBjb3VudCxcbiAgICAgICAgICAgICAgICBkYXRhc2V0SW5kZXhcbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgICAgICBpZiAoc3R5bGVDaGFuZ2VkKHN0eWxlLCBwcmV2U3R5bGUpKSB7XG4gICAgICAgICAgICAgICAgYWRkU3R5bGUoc3RhcnQsIGkgLSAxLCBzZWdtZW50Lmxvb3AsIHByZXZTdHlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2ID0gcHQ7XG4gICAgICAgICAgICBwcmV2U3R5bGUgPSBzdHlsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnQgPCBpIC0gMSkge1xuICAgICAgICAgICAgYWRkU3R5bGUoc3RhcnQsIGkgLSAxLCBzZWdtZW50Lmxvb3AsIHByZXZTdHlsZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHJlYWRTdHlsZShvcHRpb25zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBvcHRpb25zLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgYm9yZGVyQ2FwU3R5bGU6IG9wdGlvbnMuYm9yZGVyQ2FwU3R5bGUsXG4gICAgICAgIGJvcmRlckRhc2g6IG9wdGlvbnMuYm9yZGVyRGFzaCxcbiAgICAgICAgYm9yZGVyRGFzaE9mZnNldDogb3B0aW9ucy5ib3JkZXJEYXNoT2Zmc2V0LFxuICAgICAgICBib3JkZXJKb2luU3R5bGU6IG9wdGlvbnMuYm9yZGVySm9pblN0eWxlLFxuICAgICAgICBib3JkZXJXaWR0aDogb3B0aW9ucy5ib3JkZXJXaWR0aCxcbiAgICAgICAgYm9yZGVyQ29sb3I6IG9wdGlvbnMuYm9yZGVyQ29sb3JcbiAgICB9O1xufVxuZnVuY3Rpb24gc3R5bGVDaGFuZ2VkKHN0eWxlLCBwcmV2U3R5bGUpIHtcbiAgICBpZiAoIXByZXZTdHlsZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGNhY2hlID0gW107XG4gICAgY29uc3QgcmVwbGFjZXIgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmICghaXNQYXR0ZXJuT3JHcmFkaWVudCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNhY2hlLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhY2hlLmluZGV4T2YodmFsdWUpO1xuICAgIH07XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHN0eWxlLCByZXBsYWNlcikgIT09IEpTT04uc3RyaW5naWZ5KHByZXZTdHlsZSwgcmVwbGFjZXIpO1xufVxuXG5leHBvcnQgeyB1bmNsaXBBcmVhIGFzICQsIF9ybG9va3VwQnlLZXkgYXMgQSwgX2xvb2t1cEJ5S2V5IGFzIEIsIF9pc1BvaW50SW5BcmVhIGFzIEMsIGdldEFuZ2xlRnJvbVBvaW50IGFzIEQsIHRvUGFkZGluZyBhcyBFLCBlYWNoIGFzIEYsIGdldE1heGltdW1TaXplIGFzIEcsIEhBTEZfUEkgYXMgSCwgX2dldFBhcmVudE5vZGUgYXMgSSwgcmVhZFVzZWRTaXplIGFzIEosIHN1cHBvcnRzRXZlbnRMaXN0ZW5lck9wdGlvbnMgYXMgSywgdGhyb3R0bGVkIGFzIEwsIF9pc0RvbVN1cHBvcnRlZCBhcyBNLCBfZmFjdG9yaXplIGFzIE4sIGZpbml0ZU9yRGVmYXVsdCBhcyBPLCBQSSBhcyBQLCBjYWxsYmFjayBhcyBRLCBfYWRkR3JhY2UgYXMgUiwgX2xpbWl0VmFsdWUgYXMgUywgVEFVIGFzIFQsIHRvRGVncmVlcyBhcyBVLCBfbWVhc3VyZVRleHQgYXMgViwgX2ludDE2UmFuZ2UgYXMgVywgX2FsaWduUGl4ZWwgYXMgWCwgY2xpcEFyZWEgYXMgWSwgcmVuZGVyVGV4dCBhcyBaLCBfYXJyYXlVbmlxdWUgYXMgXywgcmVzb2x2ZSBhcyBhLCBmb250U3RyaW5nIGFzIGEkLCB0b0ZvbnQgYXMgYTAsIF90b0xlZnRSaWdodENlbnRlciBhcyBhMSwgX2FsaWduU3RhcnRFbmQgYXMgYTIsIG92ZXJyaWRlcyBhcyBhMywgbWVyZ2UgYXMgYTQsIF9jYXBpdGFsaXplIGFzIGE1LCBkZXNjcmlwdG9ycyBhcyBhNiwgaXNGdW5jdGlvbiBhcyBhNywgX2F0dGFjaENvbnRleHQgYXMgYTgsIF9jcmVhdGVSZXNvbHZlciBhcyBhOSwgb3ZlcnJpZGVUZXh0RGlyZWN0aW9uIGFzIGFBLCBfdGV4dFggYXMgYUIsIHJlc3RvcmVUZXh0RGlyZWN0aW9uIGFzIGFDLCBkcmF3UG9pbnRMZWdlbmQgYXMgYUQsIGRpc3RhbmNlQmV0d2VlblBvaW50cyBhcyBhRSwgbm9vcCBhcyBhRiwgX3NldE1pbkFuZE1heEJ5S2V5IGFzIGFHLCBuaWNlTnVtIGFzIGFILCBhbG1vc3RXaG9sZSBhcyBhSSwgYWxtb3N0RXF1YWxzIGFzIGFKLCBfZGVjaW1hbFBsYWNlcyBhcyBhSywgVGlja3MgYXMgYUwsIGxvZzEwIGFzIGFNLCBfbG9uZ2VzdFRleHQgYXMgYU4sIF9maWx0ZXJCZXR3ZWVuIGFzIGFPLCBfbG9va3VwIGFzIGFQLCBpc1BhdHRlcm5PckdyYWRpZW50IGFzIGFRLCBnZXRIb3ZlckNvbG9yIGFzIGFSLCBjbG9uZSBhcyBhUywgX21lcmdlciBhcyBhVCwgX21lcmdlcklmIGFzIGFVLCBfZGVwcmVjYXRlZCBhcyBhViwgX3NwbGl0S2V5IGFzIGFXLCB0b0ZvbnRTdHJpbmcgYXMgYVgsIHNwbGluZUN1cnZlIGFzIGFZLCBzcGxpbmVDdXJ2ZU1vbm90b25lIGFzIGFaLCBnZXRTdHlsZSBhcyBhXywgX2Rlc2NyaXB0b3JzIGFzIGFhLCBtZXJnZUlmIGFzIGFiLCB1aWQgYXMgYWMsIGRlYm91bmNlIGFzIGFkLCByZXRpbmFTY2FsZSBhcyBhZSwgY2xlYXJDYW52YXMgYXMgYWYsIHNldHNFcXVhbCBhcyBhZywgX2VsZW1lbnRzRXF1YWwgYXMgYWgsIF9pc0NsaWNrRXZlbnQgYXMgYWksIF9pc0JldHdlZW4gYXMgYWosIF9yZWFkVmFsdWVUb1Byb3BzIGFzIGFrLCBfdXBkYXRlQmV6aWVyQ29udHJvbFBvaW50cyBhcyBhbCwgX2NvbXB1dGVTZWdtZW50cyBhcyBhbSwgX2JvdW5kU2VnbWVudHMgYXMgYW4sIF9zdGVwcGVkSW50ZXJwb2xhdGlvbiBhcyBhbywgX2JlemllckludGVycG9sYXRpb24gYXMgYXAsIF9wb2ludEluTGluZSBhcyBhcSwgX3N0ZXBwZWRMaW5lVG8gYXMgYXIsIF9iZXppZXJDdXJ2ZVRvIGFzIGFzLCBkcmF3UG9pbnQgYXMgYXQsIGFkZFJvdW5kZWRSZWN0UGF0aCBhcyBhdSwgdG9UUkJMIGFzIGF2LCB0b1RSQkxDb3JuZXJzIGFzIGF3LCBfYm91bmRTZWdtZW50IGFzIGF4LCBfbm9ybWFsaXplQW5nbGUgYXMgYXksIGdldFJ0bEFkYXB0ZXIgYXMgYXosIGlzQXJyYXkgYXMgYiwgdG9MaW5lSGVpZ2h0IGFzIGIwLCBQSVRBVSBhcyBiMSwgSU5GSU5JVFkgYXMgYjIsIFJBRF9QRVJfREVHIGFzIGIzLCBRVUFSVEVSX1BJIGFzIGI0LCBUV09fVEhJUkRTX1BJIGFzIGI1LCBfYW5nbGVEaWZmIGFzIGI2LCBjb2xvciBhcyBjLCBkZWZhdWx0cyBhcyBkLCBlZmZlY3RzIGFzIGUsIHJlc29sdmVPYmplY3RLZXkgYXMgZiwgaXNOdW1iZXJGaW5pdGUgYXMgZywgZGVmaW5lZCBhcyBoLCBpc09iamVjdCBhcyBpLCBjcmVhdGVDb250ZXh0IGFzIGosIGlzTnVsbE9yVW5kZWYgYXMgaywgbGlzdGVuQXJyYXlFdmVudHMgYXMgbCwgdG9QZXJjZW50YWdlIGFzIG0sIHRvRGltZW5zaW9uIGFzIG4sIGZvcm1hdE51bWJlciBhcyBvLCBfYW5nbGVCZXR3ZWVuIGFzIHAsIF9nZXRTdGFydEFuZENvdW50T2ZWaXNpYmxlUG9pbnRzIGFzIHEsIHJlcXVlc3RBbmltRnJhbWUgYXMgciwgc2lnbiBhcyBzLCB0b1JhZGlhbnMgYXMgdCwgdW5saXN0ZW5BcnJheUV2ZW50cyBhcyB1LCB2YWx1ZU9yRGVmYXVsdCBhcyB2LCBfc2NhbGVSYW5nZXNDaGFuZ2VkIGFzIHcsIGlzTnVtYmVyIGFzIHgsIF9wYXJzZU9iamVjdERhdGFSYWRpYWxTY2FsZSBhcyB5LCBnZXRSZWxhdGl2ZVBvc2l0aW9uIGFzIHogfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhlbHBlcnMuc2VnbWVudC5qcy5tYXBcbiIsImltcG9ydCBEdXJhdGlvbiBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IEludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MuanNcIjtcbmltcG9ydCBJbmZvIGZyb20gXCIuL2luZm8uanNcIjtcbmltcG9ydCBGb3JtYXR0ZXIgZnJvbSBcIi4vaW1wbC9mb3JtYXR0ZXIuanNcIjtcbmltcG9ydCBGaXhlZE9mZnNldFpvbmUgZnJvbSBcIi4vem9uZXMvZml4ZWRPZmZzZXRab25lLmpzXCI7XG5pbXBvcnQgTG9jYWxlIGZyb20gXCIuL2ltcGwvbG9jYWxlLmpzXCI7XG5pbXBvcnQge1xuICBpc1VuZGVmaW5lZCxcbiAgbWF5YmVBcnJheSxcbiAgaXNEYXRlLFxuICBpc051bWJlcixcbiAgYmVzdEJ5LFxuICBkYXlzSW5Nb250aCxcbiAgZGF5c0luWWVhcixcbiAgaXNMZWFwWWVhcixcbiAgd2Vla3NJbldlZWtZZWFyLFxuICBub3JtYWxpemVPYmplY3QsXG4gIHJvdW5kVG8sXG4gIG9ialRvTG9jYWxUUyxcbiAgcGFkU3RhcnQsXG59IGZyb20gXCIuL2ltcGwvdXRpbC5qc1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplWm9uZSB9IGZyb20gXCIuL2ltcGwvem9uZVV0aWwuanNcIjtcbmltcG9ydCBkaWZmIGZyb20gXCIuL2ltcGwvZGlmZi5qc1wiO1xuaW1wb3J0IHsgcGFyc2VSRkMyODIyRGF0ZSwgcGFyc2VJU09EYXRlLCBwYXJzZUhUVFBEYXRlLCBwYXJzZVNRTCB9IGZyb20gXCIuL2ltcGwvcmVnZXhQYXJzZXIuanNcIjtcbmltcG9ydCB7XG4gIHBhcnNlRnJvbVRva2VucyxcbiAgZXhwbGFpbkZyb21Ub2tlbnMsXG4gIGZvcm1hdE9wdHNUb1Rva2VucyxcbiAgZXhwYW5kTWFjcm9Ub2tlbnMsXG4gIFRva2VuUGFyc2VyLFxufSBmcm9tIFwiLi9pbXBsL3Rva2VuUGFyc2VyLmpzXCI7XG5pbXBvcnQge1xuICBncmVnb3JpYW5Ub1dlZWssXG4gIHdlZWtUb0dyZWdvcmlhbixcbiAgZ3JlZ29yaWFuVG9PcmRpbmFsLFxuICBvcmRpbmFsVG9HcmVnb3JpYW4sXG4gIGhhc0ludmFsaWRHcmVnb3JpYW5EYXRhLFxuICBoYXNJbnZhbGlkV2Vla0RhdGEsXG4gIGhhc0ludmFsaWRPcmRpbmFsRGF0YSxcbiAgaGFzSW52YWxpZFRpbWVEYXRhLFxuICB1c2VzTG9jYWxXZWVrVmFsdWVzLFxuICBpc29XZWVrZGF5VG9Mb2NhbCxcbn0gZnJvbSBcIi4vaW1wbC9jb252ZXJzaW9ucy5qc1wiO1xuaW1wb3J0ICogYXMgRm9ybWF0cyBmcm9tIFwiLi9pbXBsL2Zvcm1hdHMuanNcIjtcbmltcG9ydCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcixcbiAgSW52YWxpZFVuaXRFcnJvcixcbiAgSW52YWxpZERhdGVUaW1lRXJyb3IsXG59IGZyb20gXCIuL2Vycm9ycy5qc1wiO1xuaW1wb3J0IEludmFsaWQgZnJvbSBcIi4vaW1wbC9pbnZhbGlkLmpzXCI7XG5cbmNvbnN0IElOVkFMSUQgPSBcIkludmFsaWQgRGF0ZVRpbWVcIjtcbmNvbnN0IE1BWF9EQVRFID0gOC42NGUxNTtcblxuZnVuY3Rpb24gdW5zdXBwb3J0ZWRab25lKHpvbmUpIHtcbiAgcmV0dXJuIG5ldyBJbnZhbGlkKFwidW5zdXBwb3J0ZWQgem9uZVwiLCBgdGhlIHpvbmUgXCIke3pvbmUubmFtZX1cIiBpcyBub3Qgc3VwcG9ydGVkYCk7XG59XG5cbi8vIHdlIGNhY2hlIHdlZWsgZGF0YSBvbiB0aGUgRFQgb2JqZWN0IGFuZCB0aGlzIGludGVybWVkaWF0ZXMgdGhlIGNhY2hlXG4vKipcbiAqIEBwYXJhbSB7RGF0ZVRpbWV9IGR0XG4gKi9cbmZ1bmN0aW9uIHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEoZHQpIHtcbiAgaWYgKGR0LndlZWtEYXRhID09PSBudWxsKSB7XG4gICAgZHQud2Vla0RhdGEgPSBncmVnb3JpYW5Ub1dlZWsoZHQuYyk7XG4gIH1cbiAgcmV0dXJuIGR0LndlZWtEYXRhO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RGF0ZVRpbWV9IGR0XG4gKi9cbmZ1bmN0aW9uIHBvc3NpYmx5Q2FjaGVkTG9jYWxXZWVrRGF0YShkdCkge1xuICBpZiAoZHQubG9jYWxXZWVrRGF0YSA9PT0gbnVsbCkge1xuICAgIGR0LmxvY2FsV2Vla0RhdGEgPSBncmVnb3JpYW5Ub1dlZWsoXG4gICAgICBkdC5jLFxuICAgICAgZHQubG9jLmdldE1pbkRheXNJbkZpcnN0V2VlaygpLFxuICAgICAgZHQubG9jLmdldFN0YXJ0T2ZXZWVrKClcbiAgICApO1xuICB9XG4gIHJldHVybiBkdC5sb2NhbFdlZWtEYXRhO1xufVxuXG4vLyBjbG9uZSByZWFsbHkgbWVhbnMsIFwibWFrZSBhIG5ldyBvYmplY3Qgd2l0aCB0aGVzZSBtb2RpZmljYXRpb25zXCIuIGFsbCBcInNldHRlcnNcIiByZWFsbHkgdXNlIHRoaXNcbi8vIHRvIGNyZWF0ZSBhIG5ldyBvYmplY3Qgd2hpbGUgb25seSBjaGFuZ2luZyBzb21lIG9mIHRoZSBwcm9wZXJ0aWVzXG5mdW5jdGlvbiBjbG9uZShpbnN0LCBhbHRzKSB7XG4gIGNvbnN0IGN1cnJlbnQgPSB7XG4gICAgdHM6IGluc3QudHMsXG4gICAgem9uZTogaW5zdC56b25lLFxuICAgIGM6IGluc3QuYyxcbiAgICBvOiBpbnN0Lm8sXG4gICAgbG9jOiBpbnN0LmxvYyxcbiAgICBpbnZhbGlkOiBpbnN0LmludmFsaWQsXG4gIH07XG4gIHJldHVybiBuZXcgRGF0ZVRpbWUoeyAuLi5jdXJyZW50LCAuLi5hbHRzLCBvbGQ6IGN1cnJlbnQgfSk7XG59XG5cbi8vIGZpbmQgdGhlIHJpZ2h0IG9mZnNldCBhIGdpdmVuIGxvY2FsIHRpbWUuIFRoZSBvIGlucHV0IGlzIG91ciBndWVzcywgd2hpY2ggZGV0ZXJtaW5lcyB3aGljaFxuLy8gb2Zmc2V0IHdlJ2xsIHBpY2sgaW4gYW1iaWd1b3VzIGNhc2VzIChlLmcuIHRoZXJlIGFyZSB0d28gMyBBTXMgYi9jIEZhbGxiYWNrIERTVClcbmZ1bmN0aW9uIGZpeE9mZnNldChsb2NhbFRTLCBvLCB0eikge1xuICAvLyBPdXIgVVRDIHRpbWUgaXMganVzdCBhIGd1ZXNzIGJlY2F1c2Ugb3VyIG9mZnNldCBpcyBqdXN0IGEgZ3Vlc3NcbiAgbGV0IHV0Y0d1ZXNzID0gbG9jYWxUUyAtIG8gKiA2MCAqIDEwMDA7XG5cbiAgLy8gVGVzdCB3aGV0aGVyIHRoZSB6b25lIG1hdGNoZXMgdGhlIG9mZnNldCBmb3IgdGhpcyB0c1xuICBjb25zdCBvMiA9IHR6Lm9mZnNldCh1dGNHdWVzcyk7XG5cbiAgLy8gSWYgc28sIG9mZnNldCBkaWRuJ3QgY2hhbmdlIGFuZCB3ZSdyZSBkb25lXG4gIGlmIChvID09PSBvMikge1xuICAgIHJldHVybiBbdXRjR3Vlc3MsIG9dO1xuICB9XG5cbiAgLy8gSWYgbm90LCBjaGFuZ2UgdGhlIHRzIGJ5IHRoZSBkaWZmZXJlbmNlIGluIHRoZSBvZmZzZXRcbiAgdXRjR3Vlc3MgLT0gKG8yIC0gbykgKiA2MCAqIDEwMDA7XG5cbiAgLy8gSWYgdGhhdCBnaXZlcyB1cyB0aGUgbG9jYWwgdGltZSB3ZSB3YW50LCB3ZSdyZSBkb25lXG4gIGNvbnN0IG8zID0gdHoub2Zmc2V0KHV0Y0d1ZXNzKTtcbiAgaWYgKG8yID09PSBvMykge1xuICAgIHJldHVybiBbdXRjR3Vlc3MsIG8yXTtcbiAgfVxuXG4gIC8vIElmIGl0J3MgZGlmZmVyZW50LCB3ZSdyZSBpbiBhIGhvbGUgdGltZS4gVGhlIG9mZnNldCBoYXMgY2hhbmdlZCwgYnV0IHRoZSB3ZSBkb24ndCBhZGp1c3QgdGhlIHRpbWVcbiAgcmV0dXJuIFtsb2NhbFRTIC0gTWF0aC5taW4obzIsIG8zKSAqIDYwICogMTAwMCwgTWF0aC5tYXgobzIsIG8zKV07XG59XG5cbi8vIGNvbnZlcnQgYW4gZXBvY2ggdGltZXN0YW1wIGludG8gYSBjYWxlbmRhciBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gb2Zmc2V0XG5mdW5jdGlvbiB0c1RvT2JqKHRzLCBvZmZzZXQpIHtcbiAgdHMgKz0gb2Zmc2V0ICogNjAgKiAxMDAwO1xuXG4gIGNvbnN0IGQgPSBuZXcgRGF0ZSh0cyk7XG5cbiAgcmV0dXJuIHtcbiAgICB5ZWFyOiBkLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgbW9udGg6IGQuZ2V0VVRDTW9udGgoKSArIDEsXG4gICAgZGF5OiBkLmdldFVUQ0RhdGUoKSxcbiAgICBob3VyOiBkLmdldFVUQ0hvdXJzKCksXG4gICAgbWludXRlOiBkLmdldFVUQ01pbnV0ZXMoKSxcbiAgICBzZWNvbmQ6IGQuZ2V0VVRDU2Vjb25kcygpLFxuICAgIG1pbGxpc2Vjb25kOiBkLmdldFVUQ01pbGxpc2Vjb25kcygpLFxuICB9O1xufVxuXG4vLyBjb252ZXJ0IGEgY2FsZW5kYXIgb2JqZWN0IHRvIGEgZXBvY2ggdGltZXN0YW1wXG5mdW5jdGlvbiBvYmpUb1RTKG9iaiwgb2Zmc2V0LCB6b25lKSB7XG4gIHJldHVybiBmaXhPZmZzZXQob2JqVG9Mb2NhbFRTKG9iaiksIG9mZnNldCwgem9uZSk7XG59XG5cbi8vIGNyZWF0ZSBhIG5ldyBEVCBpbnN0YW5jZSBieSBhZGRpbmcgYSBkdXJhdGlvbiwgYWRqdXN0aW5nIGZvciBEU1RzXG5mdW5jdGlvbiBhZGp1c3RUaW1lKGluc3QsIGR1cikge1xuICBjb25zdCBvUHJlID0gaW5zdC5vLFxuICAgIHllYXIgPSBpbnN0LmMueWVhciArIE1hdGgudHJ1bmMoZHVyLnllYXJzKSxcbiAgICBtb250aCA9IGluc3QuYy5tb250aCArIE1hdGgudHJ1bmMoZHVyLm1vbnRocykgKyBNYXRoLnRydW5jKGR1ci5xdWFydGVycykgKiAzLFxuICAgIGMgPSB7XG4gICAgICAuLi5pbnN0LmMsXG4gICAgICB5ZWFyLFxuICAgICAgbW9udGgsXG4gICAgICBkYXk6XG4gICAgICAgIE1hdGgubWluKGluc3QuYy5kYXksIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSkgK1xuICAgICAgICBNYXRoLnRydW5jKGR1ci5kYXlzKSArXG4gICAgICAgIE1hdGgudHJ1bmMoZHVyLndlZWtzKSAqIDcsXG4gICAgfSxcbiAgICBtaWxsaXNUb0FkZCA9IER1cmF0aW9uLmZyb21PYmplY3Qoe1xuICAgICAgeWVhcnM6IGR1ci55ZWFycyAtIE1hdGgudHJ1bmMoZHVyLnllYXJzKSxcbiAgICAgIHF1YXJ0ZXJzOiBkdXIucXVhcnRlcnMgLSBNYXRoLnRydW5jKGR1ci5xdWFydGVycyksXG4gICAgICBtb250aHM6IGR1ci5tb250aHMgLSBNYXRoLnRydW5jKGR1ci5tb250aHMpLFxuICAgICAgd2Vla3M6IGR1ci53ZWVrcyAtIE1hdGgudHJ1bmMoZHVyLndlZWtzKSxcbiAgICAgIGRheXM6IGR1ci5kYXlzIC0gTWF0aC50cnVuYyhkdXIuZGF5cyksXG4gICAgICBob3VyczogZHVyLmhvdXJzLFxuICAgICAgbWludXRlczogZHVyLm1pbnV0ZXMsXG4gICAgICBzZWNvbmRzOiBkdXIuc2Vjb25kcyxcbiAgICAgIG1pbGxpc2Vjb25kczogZHVyLm1pbGxpc2Vjb25kcyxcbiAgICB9KS5hcyhcIm1pbGxpc2Vjb25kc1wiKSxcbiAgICBsb2NhbFRTID0gb2JqVG9Mb2NhbFRTKGMpO1xuXG4gIGxldCBbdHMsIG9dID0gZml4T2Zmc2V0KGxvY2FsVFMsIG9QcmUsIGluc3Quem9uZSk7XG5cbiAgaWYgKG1pbGxpc1RvQWRkICE9PSAwKSB7XG4gICAgdHMgKz0gbWlsbGlzVG9BZGQ7XG4gICAgLy8gdGhhdCBjb3VsZCBoYXZlIGNoYW5nZWQgdGhlIG9mZnNldCBieSBnb2luZyBvdmVyIGEgRFNULCBidXQgd2Ugd2FudCB0byBrZWVwIHRoZSB0cyB0aGUgc2FtZVxuICAgIG8gPSBpbnN0LnpvbmUub2Zmc2V0KHRzKTtcbiAgfVxuXG4gIHJldHVybiB7IHRzLCBvIH07XG59XG5cbi8vIGhlbHBlciB1c2VmdWwgaW4gdHVybmluZyB0aGUgcmVzdWx0cyBvZiBwYXJzaW5nIGludG8gcmVhbCBkYXRlc1xuLy8gYnkgaGFuZGxpbmcgdGhlIHpvbmUgb3B0aW9uc1xuZnVuY3Rpb24gcGFyc2VEYXRhVG9EYXRlVGltZShwYXJzZWQsIHBhcnNlZFpvbmUsIG9wdHMsIGZvcm1hdCwgdGV4dCwgc3BlY2lmaWNPZmZzZXQpIHtcbiAgY29uc3QgeyBzZXRab25lLCB6b25lIH0gPSBvcHRzO1xuICBpZiAoKHBhcnNlZCAmJiBPYmplY3Qua2V5cyhwYXJzZWQpLmxlbmd0aCAhPT0gMCkgfHwgcGFyc2VkWm9uZSkge1xuICAgIGNvbnN0IGludGVycHJldGF0aW9uWm9uZSA9IHBhcnNlZFpvbmUgfHwgem9uZSxcbiAgICAgIGluc3QgPSBEYXRlVGltZS5mcm9tT2JqZWN0KHBhcnNlZCwge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICB6b25lOiBpbnRlcnByZXRhdGlvblpvbmUsXG4gICAgICAgIHNwZWNpZmljT2Zmc2V0LFxuICAgICAgfSk7XG4gICAgcmV0dXJuIHNldFpvbmUgPyBpbnN0IDogaW5zdC5zZXRab25lKHpvbmUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKFxuICAgICAgbmV3IEludmFsaWQoXCJ1bnBhcnNhYmxlXCIsIGB0aGUgaW5wdXQgXCIke3RleHR9XCIgY2FuJ3QgYmUgcGFyc2VkIGFzICR7Zm9ybWF0fWApXG4gICAgKTtcbiAgfVxufVxuXG4vLyBpZiB5b3Ugd2FudCB0byBvdXRwdXQgYSB0ZWNobmljYWwgZm9ybWF0IChlLmcuIFJGQyAyODIyKSwgdGhpcyBoZWxwZXJcbi8vIGhlbHBzIGhhbmRsZSB0aGUgZGV0YWlsc1xuZnVuY3Rpb24gdG9UZWNoRm9ybWF0KGR0LCBmb3JtYXQsIGFsbG93WiA9IHRydWUpIHtcbiAgcmV0dXJuIGR0LmlzVmFsaWRcbiAgICA/IEZvcm1hdHRlci5jcmVhdGUoTG9jYWxlLmNyZWF0ZShcImVuLVVTXCIpLCB7XG4gICAgICAgIGFsbG93WixcbiAgICAgICAgZm9yY2VTaW1wbGU6IHRydWUsXG4gICAgICB9KS5mb3JtYXREYXRlVGltZUZyb21TdHJpbmcoZHQsIGZvcm1hdClcbiAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHRvSVNPRGF0ZShvLCBleHRlbmRlZCkge1xuICBjb25zdCBsb25nRm9ybWF0ID0gby5jLnllYXIgPiA5OTk5IHx8IG8uYy55ZWFyIDwgMDtcbiAgbGV0IGMgPSBcIlwiO1xuICBpZiAobG9uZ0Zvcm1hdCAmJiBvLmMueWVhciA+PSAwKSBjICs9IFwiK1wiO1xuICBjICs9IHBhZFN0YXJ0KG8uYy55ZWFyLCBsb25nRm9ybWF0ID8gNiA6IDQpO1xuXG4gIGlmIChleHRlbmRlZCkge1xuICAgIGMgKz0gXCItXCI7XG4gICAgYyArPSBwYWRTdGFydChvLmMubW9udGgpO1xuICAgIGMgKz0gXCItXCI7XG4gICAgYyArPSBwYWRTdGFydChvLmMuZGF5KTtcbiAgfSBlbHNlIHtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5tb250aCk7XG4gICAgYyArPSBwYWRTdGFydChvLmMuZGF5KTtcbiAgfVxuICByZXR1cm4gYztcbn1cblxuZnVuY3Rpb24gdG9JU09UaW1lKFxuICBvLFxuICBleHRlbmRlZCxcbiAgc3VwcHJlc3NTZWNvbmRzLFxuICBzdXBwcmVzc01pbGxpc2Vjb25kcyxcbiAgaW5jbHVkZU9mZnNldCxcbiAgZXh0ZW5kZWRab25lXG4pIHtcbiAgbGV0IGMgPSBwYWRTdGFydChvLmMuaG91cik7XG4gIGlmIChleHRlbmRlZCkge1xuICAgIGMgKz0gXCI6XCI7XG4gICAgYyArPSBwYWRTdGFydChvLmMubWludXRlKTtcbiAgICBpZiAoby5jLm1pbGxpc2Vjb25kICE9PSAwIHx8IG8uYy5zZWNvbmQgIT09IDAgfHwgIXN1cHByZXNzU2Vjb25kcykge1xuICAgICAgYyArPSBcIjpcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYyArPSBwYWRTdGFydChvLmMubWludXRlKTtcbiAgfVxuXG4gIGlmIChvLmMubWlsbGlzZWNvbmQgIT09IDAgfHwgby5jLnNlY29uZCAhPT0gMCB8fCAhc3VwcHJlc3NTZWNvbmRzKSB7XG4gICAgYyArPSBwYWRTdGFydChvLmMuc2Vjb25kKTtcblxuICAgIGlmIChvLmMubWlsbGlzZWNvbmQgIT09IDAgfHwgIXN1cHByZXNzTWlsbGlzZWNvbmRzKSB7XG4gICAgICBjICs9IFwiLlwiO1xuICAgICAgYyArPSBwYWRTdGFydChvLmMubWlsbGlzZWNvbmQsIDMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbmNsdWRlT2Zmc2V0KSB7XG4gICAgaWYgKG8uaXNPZmZzZXRGaXhlZCAmJiBvLm9mZnNldCA9PT0gMCAmJiAhZXh0ZW5kZWRab25lKSB7XG4gICAgICBjICs9IFwiWlwiO1xuICAgIH0gZWxzZSBpZiAoby5vIDwgMCkge1xuICAgICAgYyArPSBcIi1cIjtcbiAgICAgIGMgKz0gcGFkU3RhcnQoTWF0aC50cnVuYygtby5vIC8gNjApKTtcbiAgICAgIGMgKz0gXCI6XCI7XG4gICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoLW8ubyAlIDYwKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGMgKz0gXCIrXCI7XG4gICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoby5vIC8gNjApKTtcbiAgICAgIGMgKz0gXCI6XCI7XG4gICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoby5vICUgNjApKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXh0ZW5kZWRab25lKSB7XG4gICAgYyArPSBcIltcIiArIG8uem9uZS5pYW5hTmFtZSArIFwiXVwiO1xuICB9XG4gIHJldHVybiBjO1xufVxuXG4vLyBkZWZhdWx0cyBmb3IgdW5zcGVjaWZpZWQgdW5pdHMgaW4gdGhlIHN1cHBvcnRlZCBjYWxlbmRhcnNcbmNvbnN0IGRlZmF1bHRVbml0VmFsdWVzID0ge1xuICAgIG1vbnRoOiAxLFxuICAgIGRheTogMSxcbiAgICBob3VyOiAwLFxuICAgIG1pbnV0ZTogMCxcbiAgICBzZWNvbmQ6IDAsXG4gICAgbWlsbGlzZWNvbmQ6IDAsXG4gIH0sXG4gIGRlZmF1bHRXZWVrVW5pdFZhbHVlcyA9IHtcbiAgICB3ZWVrTnVtYmVyOiAxLFxuICAgIHdlZWtkYXk6IDEsXG4gICAgaG91cjogMCxcbiAgICBtaW51dGU6IDAsXG4gICAgc2Vjb25kOiAwLFxuICAgIG1pbGxpc2Vjb25kOiAwLFxuICB9LFxuICBkZWZhdWx0T3JkaW5hbFVuaXRWYWx1ZXMgPSB7XG4gICAgb3JkaW5hbDogMSxcbiAgICBob3VyOiAwLFxuICAgIG1pbnV0ZTogMCxcbiAgICBzZWNvbmQ6IDAsXG4gICAgbWlsbGlzZWNvbmQ6IDAsXG4gIH07XG5cbi8vIFVuaXRzIGluIHRoZSBzdXBwb3J0ZWQgY2FsZW5kYXJzLCBzb3J0ZWQgYnkgYmlnbmVzc1xuY29uc3Qgb3JkZXJlZFVuaXRzID0gW1wieWVhclwiLCBcIm1vbnRoXCIsIFwiZGF5XCIsIFwiaG91clwiLCBcIm1pbnV0ZVwiLCBcInNlY29uZFwiLCBcIm1pbGxpc2Vjb25kXCJdLFxuICBvcmRlcmVkV2Vla1VuaXRzID0gW1xuICAgIFwid2Vla1llYXJcIixcbiAgICBcIndlZWtOdW1iZXJcIixcbiAgICBcIndlZWtkYXlcIixcbiAgICBcImhvdXJcIixcbiAgICBcIm1pbnV0ZVwiLFxuICAgIFwic2Vjb25kXCIsXG4gICAgXCJtaWxsaXNlY29uZFwiLFxuICBdLFxuICBvcmRlcmVkT3JkaW5hbFVuaXRzID0gW1wieWVhclwiLCBcIm9yZGluYWxcIiwgXCJob3VyXCIsIFwibWludXRlXCIsIFwic2Vjb25kXCIsIFwibWlsbGlzZWNvbmRcIl07XG5cbi8vIHN0YW5kYXJkaXplIGNhc2UgYW5kIHBsdXJhbGl0eSBpbiB1bml0c1xuZnVuY3Rpb24gbm9ybWFsaXplVW5pdCh1bml0KSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7XG4gICAgeWVhcjogXCJ5ZWFyXCIsXG4gICAgeWVhcnM6IFwieWVhclwiLFxuICAgIG1vbnRoOiBcIm1vbnRoXCIsXG4gICAgbW9udGhzOiBcIm1vbnRoXCIsXG4gICAgZGF5OiBcImRheVwiLFxuICAgIGRheXM6IFwiZGF5XCIsXG4gICAgaG91cjogXCJob3VyXCIsXG4gICAgaG91cnM6IFwiaG91clwiLFxuICAgIG1pbnV0ZTogXCJtaW51dGVcIixcbiAgICBtaW51dGVzOiBcIm1pbnV0ZVwiLFxuICAgIHF1YXJ0ZXI6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0ZXJzOiBcInF1YXJ0ZXJcIixcbiAgICBzZWNvbmQ6IFwic2Vjb25kXCIsXG4gICAgc2Vjb25kczogXCJzZWNvbmRcIixcbiAgICBtaWxsaXNlY29uZDogXCJtaWxsaXNlY29uZFwiLFxuICAgIG1pbGxpc2Vjb25kczogXCJtaWxsaXNlY29uZFwiLFxuICAgIHdlZWtkYXk6IFwid2Vla2RheVwiLFxuICAgIHdlZWtkYXlzOiBcIndlZWtkYXlcIixcbiAgICB3ZWVrbnVtYmVyOiBcIndlZWtOdW1iZXJcIixcbiAgICB3ZWVrc251bWJlcjogXCJ3ZWVrTnVtYmVyXCIsXG4gICAgd2Vla251bWJlcnM6IFwid2Vla051bWJlclwiLFxuICAgIHdlZWt5ZWFyOiBcIndlZWtZZWFyXCIsXG4gICAgd2Vla3llYXJzOiBcIndlZWtZZWFyXCIsXG4gICAgb3JkaW5hbDogXCJvcmRpbmFsXCIsXG4gIH1bdW5pdC50b0xvd2VyQ2FzZSgpXTtcblxuICBpZiAoIW5vcm1hbGl6ZWQpIHRocm93IG5ldyBJbnZhbGlkVW5pdEVycm9yKHVuaXQpO1xuXG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVVbml0V2l0aExvY2FsV2Vla3ModW5pdCkge1xuICBzd2l0Y2ggKHVuaXQudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgXCJsb2NhbHdlZWtkYXlcIjpcbiAgICBjYXNlIFwibG9jYWx3ZWVrZGF5c1wiOlxuICAgICAgcmV0dXJuIFwibG9jYWxXZWVrZGF5XCI7XG4gICAgY2FzZSBcImxvY2Fsd2Vla251bWJlclwiOlxuICAgIGNhc2UgXCJsb2NhbHdlZWtudW1iZXJzXCI6XG4gICAgICByZXR1cm4gXCJsb2NhbFdlZWtOdW1iZXJcIjtcbiAgICBjYXNlIFwibG9jYWx3ZWVreWVhclwiOlxuICAgIGNhc2UgXCJsb2NhbHdlZWt5ZWFyc1wiOlxuICAgICAgcmV0dXJuIFwibG9jYWxXZWVrWWVhclwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbm9ybWFsaXplVW5pdCh1bml0KTtcbiAgfVxufVxuXG4vLyBjYWNoZSBvZmZzZXRzIGZvciB6b25lcyBiYXNlZCBvbiB0aGUgY3VycmVudCB0aW1lc3RhbXAgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzXG4vLyBmaXJzdCBjYWxsZWQuIFdoZW4gd2UgYXJlIGhhbmRsaW5nIGEgZGF0ZXRpbWUgZnJvbSBjb21wb25lbnRzIGxpa2UgKHllYXIsXG4vLyBtb250aCwgZGF5LCBob3VyKSBpbiBhIHRpbWUgem9uZSwgd2UgbmVlZCBhIGd1ZXNzIGFib3V0IHdoYXQgdGhlIHRpbWV6b25lXG4vLyBvZmZzZXQgaXMgc28gdGhhdCB3ZSBjYW4gY29udmVydCBpbnRvIGEgVVRDIHRpbWVzdGFtcC4gT25lIHdheSBpcyB0byBmaW5kIHRoZVxuLy8gb2Zmc2V0IG9mIG5vdyBpbiB0aGUgem9uZS4gVGhlIGFjdHVhbCBkYXRlIG1heSBoYXZlIGEgZGlmZmVyZW50IG9mZnNldCAoZm9yXG4vLyBleGFtcGxlLCBpZiB3ZSBoYW5kbGUgYSBkYXRlIGluIEp1bmUgd2hpbGUgd2UncmUgaW4gRGVjZW1iZXIgaW4gYSB6b25lIHRoYXRcbi8vIG9ic2VydmVzIERTVCksIGJ1dCB3ZSBjYW4gY2hlY2sgYW5kIGFkanVzdCB0aGF0LlxuLy9cbi8vIFdoZW4gaGFuZGxpbmcgbWFueSBkYXRlcywgY2FsY3VsYXRpbmcgdGhlIG9mZnNldCBmb3Igbm93IGV2ZXJ5IHRpbWUgaXNcbi8vIGV4cGVuc2l2ZS4gSXQncyBqdXN0IGEgZ3Vlc3MsIHNvIHdlIGNhbiBjYWNoZSB0aGUgb2Zmc2V0IHRvIHVzZSBldmVuIGlmIHdlXG4vLyBhcmUgcmlnaHQgb24gYSB0aW1lIGNoYW5nZSBib3VuZGFyeSAod2UnbGwganVzdCBjb3JyZWN0IGluIHRoZSBvdGhlclxuLy8gZGlyZWN0aW9uKS4gVXNpbmcgYSB0aW1lc3RhbXAgZnJvbSBmaXJzdCByZWFkIGlzIGEgc2xpZ2h0IG9wdGltaXphdGlvbiBmb3Jcbi8vIGhhbmRsaW5nIGRhdGVzIGNsb3NlIHRvIHRoZSBjdXJyZW50IGRhdGUsIHNpbmNlIHRob3NlIGRhdGVzIHdpbGwgdXN1YWxseSBiZVxuLy8gaW4gdGhlIHNhbWUgb2Zmc2V0ICh3ZSBjb3VsZCBzZXQgdGhlIHRpbWVzdGFtcCBzdGF0aWNhbGx5LCBpbnN0ZWFkKS4gV2UgdXNlIGFcbi8vIHNpbmdsZSB0aW1lc3RhbXAgZm9yIGFsbCB6b25lcyB0byBtYWtlIHRoaW5ncyBhIGJpdCBtb3JlIHByZWRpY3RhYmxlLlxuLy9cbi8vIFRoaXMgaXMgc2FmZSBmb3IgcXVpY2tEVCAodXNlZCBieSBsb2NhbCgpIGFuZCB1dGMoKSkgYmVjYXVzZSB3ZSBkb24ndCBmaWxsIGluXG4vLyBoaWdoZXItb3JkZXIgdW5pdHMgZnJvbSB0c05vdyAoYXMgd2UgZG8gaW4gZnJvbU9iamVjdCwgdGhpcyByZXF1aXJlcyB0aGF0XG4vLyBvZmZzZXQgaXMgY2FsY3VsYXRlZCBmcm9tIHRzTm93KS5cbmZ1bmN0aW9uIGd1ZXNzT2Zmc2V0Rm9yWm9uZSh6b25lKSB7XG4gIGlmICghem9uZU9mZnNldEd1ZXNzQ2FjaGVbem9uZV0pIHtcbiAgICBpZiAoem9uZU9mZnNldFRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHpvbmVPZmZzZXRUcyA9IFNldHRpbmdzLm5vdygpO1xuICAgIH1cblxuICAgIHpvbmVPZmZzZXRHdWVzc0NhY2hlW3pvbmVdID0gem9uZS5vZmZzZXQoem9uZU9mZnNldFRzKTtcbiAgfVxuICByZXR1cm4gem9uZU9mZnNldEd1ZXNzQ2FjaGVbem9uZV07XG59XG5cbi8vIHRoaXMgaXMgYSBkdW1iZWQgZG93biB2ZXJzaW9uIG9mIGZyb21PYmplY3QoKSB0aGF0IHJ1bnMgYWJvdXQgNjAlIGZhc3RlclxuLy8gYnV0IGRvZXNuJ3QgZG8gYW55IHZhbGlkYXRpb24sIG1ha2VzIGEgYnVuY2ggb2YgYXNzdW1wdGlvbnMgYWJvdXQgd2hhdCB1bml0c1xuLy8gYXJlIHByZXNlbnQsIGFuZCBzbyBvbi5cbmZ1bmN0aW9uIHF1aWNrRFQob2JqLCBvcHRzKSB7XG4gIGNvbnN0IHpvbmUgPSBub3JtYWxpemVab25lKG9wdHMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpO1xuICBpZiAoIXpvbmUuaXNWYWxpZCkge1xuICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKHVuc3VwcG9ydGVkWm9uZSh6b25lKSk7XG4gIH1cblxuICBjb25zdCBsb2MgPSBMb2NhbGUuZnJvbU9iamVjdChvcHRzKTtcblxuICBsZXQgdHMsIG87XG5cbiAgLy8gYXNzdW1lIHdlIGhhdmUgdGhlIGhpZ2hlci1vcmRlciB1bml0c1xuICBpZiAoIWlzVW5kZWZpbmVkKG9iai55ZWFyKSkge1xuICAgIGZvciAoY29uc3QgdSBvZiBvcmRlcmVkVW5pdHMpIHtcbiAgICAgIGlmIChpc1VuZGVmaW5lZChvYmpbdV0pKSB7XG4gICAgICAgIG9ialt1XSA9IGRlZmF1bHRVbml0VmFsdWVzW3VdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWQgPSBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YShvYmopIHx8IGhhc0ludmFsaWRUaW1lRGF0YShvYmopO1xuICAgIGlmIChpbnZhbGlkKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChpbnZhbGlkKTtcbiAgICB9XG5cbiAgICBjb25zdCBvZmZzZXRQcm92aXMgPSBndWVzc09mZnNldEZvclpvbmUoem9uZSk7XG4gICAgW3RzLCBvXSA9IG9ialRvVFMob2JqLCBvZmZzZXRQcm92aXMsIHpvbmUpO1xuICB9IGVsc2Uge1xuICAgIHRzID0gU2V0dGluZ3Mubm93KCk7XG4gIH1cblxuICByZXR1cm4gbmV3IERhdGVUaW1lKHsgdHMsIHpvbmUsIGxvYywgbyB9KTtcbn1cblxuZnVuY3Rpb24gZGlmZlJlbGF0aXZlKHN0YXJ0LCBlbmQsIG9wdHMpIHtcbiAgY29uc3Qgcm91bmQgPSBpc1VuZGVmaW5lZChvcHRzLnJvdW5kKSA/IHRydWUgOiBvcHRzLnJvdW5kLFxuICAgIGZvcm1hdCA9IChjLCB1bml0KSA9PiB7XG4gICAgICBjID0gcm91bmRUbyhjLCByb3VuZCB8fCBvcHRzLmNhbGVuZGFyeSA/IDAgOiAyLCB0cnVlKTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGVuZC5sb2MuY2xvbmUob3B0cykucmVsRm9ybWF0dGVyKG9wdHMpO1xuICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQoYywgdW5pdCk7XG4gICAgfSxcbiAgICBkaWZmZXIgPSAodW5pdCkgPT4ge1xuICAgICAgaWYgKG9wdHMuY2FsZW5kYXJ5KSB7XG4gICAgICAgIGlmICghZW5kLmhhc1NhbWUoc3RhcnQsIHVuaXQpKSB7XG4gICAgICAgICAgcmV0dXJuIGVuZC5zdGFydE9mKHVuaXQpLmRpZmYoc3RhcnQuc3RhcnRPZih1bml0KSwgdW5pdCkuZ2V0KHVuaXQpO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZW5kLmRpZmYoc3RhcnQsIHVuaXQpLmdldCh1bml0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gIGlmIChvcHRzLnVuaXQpIHtcbiAgICByZXR1cm4gZm9ybWF0KGRpZmZlcihvcHRzLnVuaXQpLCBvcHRzLnVuaXQpO1xuICB9XG5cbiAgZm9yIChjb25zdCB1bml0IG9mIG9wdHMudW5pdHMpIHtcbiAgICBjb25zdCBjb3VudCA9IGRpZmZlcih1bml0KTtcbiAgICBpZiAoTWF0aC5hYnMoY291bnQpID49IDEpIHtcbiAgICAgIHJldHVybiBmb3JtYXQoY291bnQsIHVuaXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0KHN0YXJ0ID4gZW5kID8gLTAgOiAwLCBvcHRzLnVuaXRzW29wdHMudW5pdHMubGVuZ3RoIC0gMV0pO1xufVxuXG5mdW5jdGlvbiBsYXN0T3B0cyhhcmdMaXN0KSB7XG4gIGxldCBvcHRzID0ge30sXG4gICAgYXJncztcbiAgaWYgKGFyZ0xpc3QubGVuZ3RoID4gMCAmJiB0eXBlb2YgYXJnTGlzdFthcmdMaXN0Lmxlbmd0aCAtIDFdID09PSBcIm9iamVjdFwiKSB7XG4gICAgb3B0cyA9IGFyZ0xpc3RbYXJnTGlzdC5sZW5ndGggLSAxXTtcbiAgICBhcmdzID0gQXJyYXkuZnJvbShhcmdMaXN0KS5zbGljZSgwLCBhcmdMaXN0Lmxlbmd0aCAtIDEpO1xuICB9IGVsc2Uge1xuICAgIGFyZ3MgPSBBcnJheS5mcm9tKGFyZ0xpc3QpO1xuICB9XG4gIHJldHVybiBbb3B0cywgYXJnc107XG59XG5cbi8qKlxuICogVGltZXN0YW1wIHRvIHVzZSBmb3IgY2FjaGVkIHpvbmUgb2Zmc2V0IGd1ZXNzZXMgKGV4cG9zZWQgZm9yIHRlc3QpXG4gKi9cbmxldCB6b25lT2Zmc2V0VHM7XG4vKipcbiAqIENhY2hlIGZvciB6b25lIG9mZnNldCBndWVzc2VzIChleHBvc2VkIGZvciB0ZXN0KS5cbiAqXG4gKiBUaGlzIG9wdGltaXplcyBxdWlja0RUIHZpYSBndWVzc09mZnNldEZvclpvbmUgdG8gYXZvaWQgcmVwZWF0ZWQgY2FsbHMgb2ZcbiAqIHpvbmUub2Zmc2V0KCkuXG4gKi9cbmxldCB6b25lT2Zmc2V0R3Vlc3NDYWNoZSA9IHt9O1xuXG4vKipcbiAqIEEgRGF0ZVRpbWUgaXMgYW4gaW1tdXRhYmxlIGRhdGEgc3RydWN0dXJlIHJlcHJlc2VudGluZyBhIHNwZWNpZmljIGRhdGUgYW5kIHRpbWUgYW5kIGFjY29tcGFueWluZyBtZXRob2RzLiBJdCBjb250YWlucyBjbGFzcyBhbmQgaW5zdGFuY2UgbWV0aG9kcyBmb3IgY3JlYXRpbmcsIHBhcnNpbmcsIGludGVycm9nYXRpbmcsIHRyYW5zZm9ybWluZywgYW5kIGZvcm1hdHRpbmcgdGhlbS5cbiAqXG4gKiBBIERhdGVUaW1lIGNvbXByaXNlcyBvZjpcbiAqICogQSB0aW1lc3RhbXAuIEVhY2ggRGF0ZVRpbWUgaW5zdGFuY2UgcmVmZXJzIHRvIGEgc3BlY2lmaWMgbWlsbGlzZWNvbmQgb2YgdGhlIFVuaXggZXBvY2guXG4gKiAqIEEgdGltZSB6b25lLiBFYWNoIGluc3RhbmNlIGlzIGNvbnNpZGVyZWQgaW4gdGhlIGNvbnRleHQgb2YgYSBzcGVjaWZpYyB6b25lIChieSBkZWZhdWx0IHRoZSBsb2NhbCBzeXN0ZW0ncyB6b25lKS5cbiAqICogQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIHRoYXQgZWZmZWN0IGhvdyBvdXRwdXQgc3RyaW5ncyBhcmUgZm9ybWF0dGVkLCBzdWNoIGFzIGBsb2NhbGVgLCBgbnVtYmVyaW5nU3lzdGVtYCwgYW5kIGBvdXRwdXRDYWxlbmRhcmAuXG4gKlxuICogSGVyZSBpcyBhIGJyaWVmIG92ZXJ2aWV3IG9mIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgZnVuY3Rpb25hbGl0eSBpdCBwcm92aWRlczpcbiAqXG4gKiAqICoqQ3JlYXRpb24qKjogVG8gY3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBpdHMgY29tcG9uZW50cywgdXNlIG9uZSBvZiBpdHMgZmFjdG9yeSBjbGFzcyBtZXRob2RzOiB7QGxpbmsgRGF0ZVRpbWUubG9jYWx9LCB7QGxpbmsgRGF0ZVRpbWUudXRjfSwgYW5kIChtb3N0IGZsZXhpYmx5KSB7QGxpbmsgRGF0ZVRpbWUuZnJvbU9iamVjdH0uIFRvIGNyZWF0ZSBvbmUgZnJvbSBhIHN0YW5kYXJkIHN0cmluZyBmb3JtYXQsIHVzZSB7QGxpbmsgRGF0ZVRpbWUuZnJvbUlTT30sIHtAbGluayBEYXRlVGltZS5mcm9tSFRUUH0sIGFuZCB7QGxpbmsgRGF0ZVRpbWUuZnJvbVJGQzI4MjJ9LiBUbyBjcmVhdGUgb25lIGZyb20gYSBjdXN0b20gc3RyaW5nIGZvcm1hdCwgdXNlIHtAbGluayBEYXRlVGltZS5mcm9tRm9ybWF0fS4gVG8gY3JlYXRlIG9uZSBmcm9tIGEgbmF0aXZlIEpTIGRhdGUsIHVzZSB7QGxpbmsgRGF0ZVRpbWUuZnJvbUpTRGF0ZX0uXG4gKiAqICoqR3JlZ29yaWFuIGNhbGVuZGFyIGFuZCB0aW1lKio6IFRvIGV4YW1pbmUgdGhlIEdyZWdvcmlhbiBwcm9wZXJ0aWVzIG9mIGEgRGF0ZVRpbWUgaW5kaXZpZHVhbGx5IChpLmUgYXMgb3Bwb3NlZCB0byBjb2xsZWN0aXZlbHkgdGhyb3VnaCB7QGxpbmsgRGF0ZVRpbWUjdG9PYmplY3R9KSwgdXNlIHRoZSB7QGxpbmsgRGF0ZVRpbWUjeWVhcn0sIHtAbGluayBEYXRlVGltZSNtb250aH0sXG4gKiB7QGxpbmsgRGF0ZVRpbWUjZGF5fSwge0BsaW5rIERhdGVUaW1lI2hvdXJ9LCB7QGxpbmsgRGF0ZVRpbWUjbWludXRlfSwge0BsaW5rIERhdGVUaW1lI3NlY29uZH0sIHtAbGluayBEYXRlVGltZSNtaWxsaXNlY29uZH0gYWNjZXNzb3JzLlxuICogKiAqKldlZWsgY2FsZW5kYXIqKjogRm9yIElTTyB3ZWVrIGNhbGVuZGFyIGF0dHJpYnV0ZXMsIHNlZSB0aGUge0BsaW5rIERhdGVUaW1lI3dlZWtZZWFyfSwge0BsaW5rIERhdGVUaW1lI3dlZWtOdW1iZXJ9LCBhbmQge0BsaW5rIERhdGVUaW1lI3dlZWtkYXl9IGFjY2Vzc29ycy5cbiAqICogKipDb25maWd1cmF0aW9uKiogU2VlIHRoZSB7QGxpbmsgRGF0ZVRpbWUjbG9jYWxlfSBhbmQge0BsaW5rIERhdGVUaW1lI251bWJlcmluZ1N5c3RlbX0gYWNjZXNzb3JzLlxuICogKiAqKlRyYW5zZm9ybWF0aW9uKio6IFRvIHRyYW5zZm9ybSB0aGUgRGF0ZVRpbWUgaW50byBvdGhlciBEYXRlVGltZXMsIHVzZSB7QGxpbmsgRGF0ZVRpbWUjc2V0fSwge0BsaW5rIERhdGVUaW1lI3JlY29uZmlndXJlfSwge0BsaW5rIERhdGVUaW1lI3NldFpvbmV9LCB7QGxpbmsgRGF0ZVRpbWUjc2V0TG9jYWxlfSwge0BsaW5rIERhdGVUaW1lLnBsdXN9LCB7QGxpbmsgRGF0ZVRpbWUjbWludXN9LCB7QGxpbmsgRGF0ZVRpbWUjZW5kT2Z9LCB7QGxpbmsgRGF0ZVRpbWUjc3RhcnRPZn0sIHtAbGluayBEYXRlVGltZSN0b1VUQ30sIGFuZCB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbH0uXG4gKiAqICoqT3V0cHV0Kio6IFRvIGNvbnZlcnQgdGhlIERhdGVUaW1lIHRvIG90aGVyIHJlcHJlc2VudGF0aW9ucywgdXNlIHRoZSB7QGxpbmsgRGF0ZVRpbWUjdG9SZWxhdGl2ZX0sIHtAbGluayBEYXRlVGltZSN0b1JlbGF0aXZlQ2FsZW5kYXJ9LCB7QGxpbmsgRGF0ZVRpbWUjdG9KU09OfSwge0BsaW5rIERhdGVUaW1lI3RvSVNPfSwge0BsaW5rIERhdGVUaW1lI3RvSFRUUH0sIHtAbGluayBEYXRlVGltZSN0b09iamVjdH0sIHtAbGluayBEYXRlVGltZSN0b1JGQzI4MjJ9LCB7QGxpbmsgRGF0ZVRpbWUjdG9TdHJpbmd9LCB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9LCB7QGxpbmsgRGF0ZVRpbWUjdG9Gb3JtYXR9LCB7QGxpbmsgRGF0ZVRpbWUjdG9NaWxsaXN9IGFuZCB7QGxpbmsgRGF0ZVRpbWUjdG9KU0RhdGV9LlxuICpcbiAqIFRoZXJlJ3MgcGxlbnR5IG90aGVycyBkb2N1bWVudGVkIGJlbG93LiBJbiBhZGRpdGlvbiwgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3VidGxlciB0b3BpY3MgbGlrZSBpbnRlcm5hdGlvbmFsaXphdGlvbiwgdGltZSB6b25lcywgYWx0ZXJuYXRpdmUgY2FsZW5kYXJzLCB2YWxpZGl0eSwgYW5kIHNvIG9uLCBzZWUgdGhlIGV4dGVybmFsIGRvY3VtZW50YXRpb24uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGVUaW1lIHtcbiAgLyoqXG4gICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgY29uc3Qgem9uZSA9IGNvbmZpZy56b25lIHx8IFNldHRpbmdzLmRlZmF1bHRab25lO1xuXG4gICAgbGV0IGludmFsaWQgPVxuICAgICAgY29uZmlnLmludmFsaWQgfHxcbiAgICAgIChOdW1iZXIuaXNOYU4oY29uZmlnLnRzKSA/IG5ldyBJbnZhbGlkKFwiaW52YWxpZCBpbnB1dFwiKSA6IG51bGwpIHx8XG4gICAgICAoIXpvbmUuaXNWYWxpZCA/IHVuc3VwcG9ydGVkWm9uZSh6b25lKSA6IG51bGwpO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudHMgPSBpc1VuZGVmaW5lZChjb25maWcudHMpID8gU2V0dGluZ3Mubm93KCkgOiBjb25maWcudHM7XG5cbiAgICBsZXQgYyA9IG51bGwsXG4gICAgICBvID0gbnVsbDtcbiAgICBpZiAoIWludmFsaWQpIHtcbiAgICAgIGNvbnN0IHVuY2hhbmdlZCA9IGNvbmZpZy5vbGQgJiYgY29uZmlnLm9sZC50cyA9PT0gdGhpcy50cyAmJiBjb25maWcub2xkLnpvbmUuZXF1YWxzKHpvbmUpO1xuXG4gICAgICBpZiAodW5jaGFuZ2VkKSB7XG4gICAgICAgIFtjLCBvXSA9IFtjb25maWcub2xkLmMsIGNvbmZpZy5vbGQub107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBhbiBvZmZzZXQgaGFzIGJlZW4gcGFzc2VkIGFuZCB3ZSBoYXZlIG5vdCBiZWVuIGNhbGxlZCBmcm9tXG4gICAgICAgIC8vIGNsb25lKCksIHdlIGNhbiB0cnVzdCBpdCBhbmQgYXZvaWQgdGhlIG9mZnNldCBjYWxjdWxhdGlvbi5cbiAgICAgICAgY29uc3Qgb3QgPSBpc051bWJlcihjb25maWcubykgJiYgIWNvbmZpZy5vbGQgPyBjb25maWcubyA6IHpvbmUub2Zmc2V0KHRoaXMudHMpO1xuICAgICAgICBjID0gdHNUb09iaih0aGlzLnRzLCBvdCk7XG4gICAgICAgIGludmFsaWQgPSBOdW1iZXIuaXNOYU4oYy55ZWFyKSA/IG5ldyBJbnZhbGlkKFwiaW52YWxpZCBpbnB1dFwiKSA6IG51bGw7XG4gICAgICAgIGMgPSBpbnZhbGlkID8gbnVsbCA6IGM7XG4gICAgICAgIG8gPSBpbnZhbGlkID8gbnVsbCA6IG90O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3pvbmUgPSB6b25lO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMubG9jID0gY29uZmlnLmxvYyB8fCBMb2NhbGUuY3JlYXRlKCk7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pbnZhbGlkID0gaW52YWxpZDtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLndlZWtEYXRhID0gbnVsbDtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmxvY2FsV2Vla0RhdGEgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYyA9IGM7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5vID0gbztcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzTHV4b25EYXRlVGltZSA9IHRydWU7XG4gIH1cblxuICAvLyBDT05TVFJVQ1RcblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZm9yIHRoZSBjdXJyZW50IGluc3RhbnQsIGluIHRoZSBzeXN0ZW0ncyB0aW1lIHpvbmUuXG4gICAqXG4gICAqIFVzZSBTZXR0aW5ncyB0byBvdmVycmlkZSB0aGVzZSBkZWZhdWx0IHZhbHVlcyBpZiBuZWVkZWQuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKCkgLy9+PiBub3cgaW4gdGhlIElTTyBmb3JtYXRcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgbm93KCkge1xuICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGxvY2FsIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbeWVhcl0gLSBUaGUgY2FsZW5kYXIgeWVhci4gSWYgb21pdHRlZCAoYXMgaW4sIGNhbGwgYGxvY2FsKClgIHdpdGggbm8gYXJndW1lbnRzKSwgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttb250aD0xXSAtIFRoZSBtb250aCwgMS1pbmRleGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGF5PTFdIC0gVGhlIGRheSBvZiB0aGUgbW9udGgsIDEtaW5kZXhlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW2hvdXI9MF0gLSBUaGUgaG91ciBvZiB0aGUgZGF5LCBpbiAyNC1ob3VyIHRpbWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW51dGU9MF0gLSBUaGUgbWludXRlIG9mIHRoZSBob3VyLCBtZWFuaW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgNTlcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmQ9MF0gLSBUaGUgc2Vjb25kIG9mIHRoZSBtaW51dGUsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA1OVxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbGxpc2Vjb25kPTBdIC0gVGhlIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA5OTlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IG5vd1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCh7IHpvbmU6IFwiQW1lcmljYS9OZXdfWW9ya1wiIH0pICAgICAgLy9+PiBub3csIGluIFVTIGVhc3QgY29hc3QgdGltZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMS0wMVQwMDowMDowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0wMVQwMDowMDowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgeyBsb2NhbGU6IFwiZnJcIiB9KSAgICAgLy9+PiAyMDE3LTAzLTEyVDAwOjAwOjAwLCB3aXRoIGEgRnJlbmNoIGxvY2FsZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSkgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTowMDowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgeyB6b25lOiBcInV0Y1wiIH0pICAgLy9+PiAyMDE3LTAzLTEyVDA1OjAwOjAwLCBpbiBVVENcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1KSAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MDBcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCkgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTBcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCwgNzY1KSAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTAuNzY1XG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIGxvY2FsKCkge1xuICAgIGNvbnN0IFtvcHRzLCBhcmdzXSA9IGxhc3RPcHRzKGFyZ3VtZW50cyksXG4gICAgICBbeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kXSA9IGFyZ3M7XG4gICAgcmV0dXJuIHF1aWNrRFQoeyB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQgfSwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgaW4gVVRDXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbeWVhcl0gLSBUaGUgY2FsZW5kYXIgeWVhci4gSWYgb21pdHRlZCAoYXMgaW4sIGNhbGwgYHV0YygpYCB3aXRoIG5vIGFyZ3VtZW50cyksIHRoZSBjdXJyZW50IHRpbWUgd2lsbCBiZSB1c2VkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbW9udGg9MV0gLSBUaGUgbW9udGgsIDEtaW5kZXhlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RheT0xXSAtIFRoZSBkYXkgb2YgdGhlIG1vbnRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaG91cj0wXSAtIFRoZSBob3VyIG9mIHRoZSBkYXksIGluIDI0LWhvdXIgdGltZVxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbnV0ZT0wXSAtIFRoZSBtaW51dGUgb2YgdGhlIGhvdXIsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA1OVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZD0wXSAtIFRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWlsbGlzZWNvbmQ9MF0gLSBUaGUgbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDk5OVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sb2NhbGVdIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm91dHB1dENhbGVuZGFyXSAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm51bWJlcmluZ1N5c3RlbV0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMud2Vla1NldHRpbmdzXSAtIHRoZSB3ZWVrIHNldHRpbmdzIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gbm93XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMS0wMVQwMDowMDowMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTAxVDAwOjAwOjAwWlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDA6MDA6MDBaXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzLCAxMiwgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTowMDowMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjAwWlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIsIDUsIDQ1LCB7IGxvY2FsZTogXCJmclwiIH0pICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NTowMFogd2l0aCBhIEZyZW5jaCBsb2NhbGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSwgMTApICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjEwWlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCwgNzY1LCB7IGxvY2FsZTogXCJmclwiIH0pIC8vfj4gMjAxNy0wMy0xMlQwNTo0NToxMC43NjVaIHdpdGggYSBGcmVuY2ggbG9jYWxlXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIHV0YygpIHtcbiAgICBjb25zdCBbb3B0cywgYXJnc10gPSBsYXN0T3B0cyhhcmd1bWVudHMpLFxuICAgICAgW3llYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF0gPSBhcmdzO1xuXG4gICAgb3B0cy56b25lID0gRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlO1xuICAgIHJldHVybiBxdWlja0RUKHsgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kIH0sIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBKYXZhU2NyaXB0IERhdGUgb2JqZWN0LiBVc2VzIHRoZSBkZWZhdWx0IHpvbmUuXG4gICAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSAtIGEgSmF2YVNjcmlwdCBEYXRlIG9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRpb25zLnpvbmU9J2xvY2FsJ10gLSB0aGUgem9uZSB0byBwbGFjZSB0aGUgRGF0ZVRpbWUgaW50b1xuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tSlNEYXRlKGRhdGUsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHRzID0gaXNEYXRlKGRhdGUpID8gZGF0ZS52YWx1ZU9mKCkgOiBOYU47XG4gICAgaWYgKE51bWJlci5pc05hTih0cykpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKFwiaW52YWxpZCBpbnB1dFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB6b25lVG9Vc2UgPSBub3JtYWxpemVab25lKG9wdGlvbnMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpO1xuICAgIGlmICghem9uZVRvVXNlLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKHVuc3VwcG9ydGVkWm9uZSh6b25lVG9Vc2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGVUaW1lKHtcbiAgICAgIHRzOiB0cyxcbiAgICAgIHpvbmU6IHpvbmVUb1VzZSxcbiAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0aW9ucyksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGVwb2NoIChtZWFuaW5nIHNpbmNlIDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuIFVzZXMgdGhlIGRlZmF1bHQgem9uZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pbGxpc2Vjb25kcyAtIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSAxOTcwIFVUQ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRpb25zLnpvbmU9J2xvY2FsJ10gLSB0aGUgem9uZSB0byBwbGFjZSB0aGUgRGF0ZVRpbWUgaW50b1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubG9jYWxlXSAtIGEgbG9jYWxlIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy53ZWVrU2V0dGluZ3MgLSB0aGUgd2VlayBzZXR0aW5ncyB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tTWlsbGlzKG1pbGxpc2Vjb25kcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFpc051bWJlcihtaWxsaXNlY29uZHMpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGBmcm9tTWlsbGlzIHJlcXVpcmVzIGEgbnVtZXJpY2FsIGlucHV0LCBidXQgcmVjZWl2ZWQgYSAke3R5cGVvZiBtaWxsaXNlY29uZHN9IHdpdGggdmFsdWUgJHttaWxsaXNlY29uZHN9YFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG1pbGxpc2Vjb25kcyA8IC1NQVhfREFURSB8fCBtaWxsaXNlY29uZHMgPiBNQVhfREFURSkge1xuICAgICAgLy8gdGhpcyBpc24ndCBwZXJmZWN0IGJlY2F1c2Ugd2UgY2FuIHN0aWxsIGVuZCB1cCBvdXQgb2YgcmFuZ2UgYmVjYXVzZSBvZiBhZGRpdGlvbmFsIHNoaWZ0aW5nLCBidXQgaXQncyBhIHN0YXJ0XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChcIlRpbWVzdGFtcCBvdXQgb2YgcmFuZ2VcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe1xuICAgICAgICB0czogbWlsbGlzZWNvbmRzLFxuICAgICAgICB6b25lOiBub3JtYWxpemVab25lKG9wdGlvbnMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpLFxuICAgICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdGlvbnMpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2ggKG1lYW5pbmcgc2luY2UgMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS4gVXNlcyB0aGUgZGVmYXVsdCB6b25lLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc2Vjb25kcyAtIGEgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgMTk3MCBVVENcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG9cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsZV0gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMud2Vla1NldHRpbmdzIC0gdGhlIHdlZWsgc2V0dGluZ3MgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbVNlY29uZHMoc2Vjb25kcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFpc051bWJlcihzZWNvbmRzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwiZnJvbVNlY29uZHMgcmVxdWlyZXMgYSBudW1lcmljYWwgaW5wdXRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe1xuICAgICAgICB0czogc2Vjb25kcyAqIDEwMDAsXG4gICAgICAgIHpvbmU6IG5vcm1hbGl6ZVpvbmUob3B0aW9ucy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSksXG4gICAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0aW9ucyksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGgga2V5cyBsaWtlICd5ZWFyJyBhbmQgJ2hvdXInIHdpdGggcmVhc29uYWJsZSBkZWZhdWx0cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIHRoZSBvYmplY3QgdG8gY3JlYXRlIHRoZSBEYXRlVGltZSBmcm9tXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoueWVhciAtIGEgeWVhciwgc3VjaCBhcyAxOTg3XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubW9udGggLSBhIG1vbnRoLCAxLTEyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouZGF5IC0gYSBkYXkgb2YgdGhlIG1vbnRoLCAxLTMxLCBkZXBlbmRpbmcgb24gdGhlIG1vbnRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoub3JkaW5hbCAtIGRheSBvZiB0aGUgeWVhciwgMS0zNjUgb3IgMzY2XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla1llYXIgLSBhbiBJU08gd2VlayB5ZWFyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla051bWJlciAtIGFuIElTTyB3ZWVrIG51bWJlciwgYmV0d2VlbiAxIGFuZCA1MiBvciA1MywgZGVwZW5kaW5nIG9uIHRoZSB5ZWFyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla2RheSAtIGFuIElTTyB3ZWVrZGF5LCAxLTcsIHdoZXJlIDEgaXMgTW9uZGF5IGFuZCA3IGlzIFN1bmRheVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLmxvY2FsV2Vla1llYXIgLSBhIHdlZWsgeWVhciwgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5sb2NhbFdlZWtOdW1iZXIgLSBhIHdlZWsgbnVtYmVyLCBiZXR3ZWVuIDEgYW5kIDUyIG9yIDUzLCBkZXBlbmRpbmcgb24gdGhlIHllYXIsIGFjY29yZGluZyB0byB0aGUgbG9jYWxlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubG9jYWxXZWVrZGF5IC0gYSB3ZWVrZGF5LCAxLTcsIHdoZXJlIDEgaXMgdGhlIGZpcnN0IGFuZCA3IGlzIHRoZSBsYXN0IGRheSBvZiB0aGUgd2VlaywgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5ob3VyIC0gaG91ciBvZiB0aGUgZGF5LCAwLTIzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubWludXRlIC0gbWludXRlIG9mIHRoZSBob3VyLCAwLTU5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouc2Vjb25kIC0gc2Vjb25kIG9mIHRoZSBtaW51dGUsIDAtNTlcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5taWxsaXNlY29uZCAtIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQsIDAtOTk5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhpcyBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gaW50ZXJwcmV0IHRoZSBudW1iZXJzIGluIHRoZSBjb250ZXh0IG9mIGEgcGFydGljdWxhciB6b25lLiBDYW4gdGFrZSBhbnkgdmFsdWUgdGFrZW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHNldFpvbmUoKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdzeXN0ZW1cXCdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLndlZWtTZXR0aW5ncyAtIHRoZSB3ZWVrIHNldHRpbmdzIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyOiAxOTgyLCBtb250aDogNSwgZGF5OiAyNX0pLnRvSVNPRGF0ZSgpIC8vPT4gJzE5ODItMDUtMjUnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyOiAxOTgyIH0pLnRvSVNPRGF0ZSgpIC8vPT4gJzE5ODItMDEtMDEnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0pIC8vfj4gdG9kYXkgYXQgMTA6MjY6MDZcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSwgeyB6b25lOiAndXRjJyB9KSxcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSwgeyB6b25lOiAnbG9jYWwnIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0sIHsgem9uZTogJ0FtZXJpY2EvTmV3X1lvcmsnIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB3ZWVrWWVhcjogMjAxNiwgd2Vla051bWJlcjogMiwgd2Vla2RheTogMyB9KS50b0lTT0RhdGUoKSAvLz0+ICcyMDE2LTAxLTEzJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgbG9jYWxXZWVrWWVhcjogMjAyMiwgbG9jYWxXZWVrTnVtYmVyOiAxLCBsb2NhbFdlZWtkYXk6IDEgfSwgeyBsb2NhbGU6IFwiZW4tVVNcIiB9KS50b0lTT0RhdGUoKSAvLz0+ICcyMDIxLTEyLTI2J1xuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tT2JqZWN0KG9iaiwgb3B0cyA9IHt9KSB7XG4gICAgb2JqID0gb2JqIHx8IHt9O1xuICAgIGNvbnN0IHpvbmVUb1VzZSA9IG5vcm1hbGl6ZVpvbmUob3B0cy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSk7XG4gICAgaWYgKCF6b25lVG9Vc2UuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQodW5zdXBwb3J0ZWRab25lKHpvbmVUb1VzZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IGxvYyA9IExvY2FsZS5mcm9tT2JqZWN0KG9wdHMpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVPYmplY3Qob2JqLCBub3JtYWxpemVVbml0V2l0aExvY2FsV2Vla3MpO1xuICAgIGNvbnN0IHsgbWluRGF5c0luRmlyc3RXZWVrLCBzdGFydE9mV2VlayB9ID0gdXNlc0xvY2FsV2Vla1ZhbHVlcyhub3JtYWxpemVkLCBsb2MpO1xuXG4gICAgY29uc3QgdHNOb3cgPSBTZXR0aW5ncy5ub3coKSxcbiAgICAgIG9mZnNldFByb3ZpcyA9ICFpc1VuZGVmaW5lZChvcHRzLnNwZWNpZmljT2Zmc2V0KVxuICAgICAgICA/IG9wdHMuc3BlY2lmaWNPZmZzZXRcbiAgICAgICAgOiB6b25lVG9Vc2Uub2Zmc2V0KHRzTm93KSxcbiAgICAgIGNvbnRhaW5zT3JkaW5hbCA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLm9yZGluYWwpLFxuICAgICAgY29udGFpbnNHcmVnb3JZZWFyID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQueWVhciksXG4gICAgICBjb250YWluc0dyZWdvck1EID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQubW9udGgpIHx8ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLmRheSksXG4gICAgICBjb250YWluc0dyZWdvciA9IGNvbnRhaW5zR3JlZ29yWWVhciB8fCBjb250YWluc0dyZWdvck1ELFxuICAgICAgZGVmaW5pdGVXZWVrRGVmID0gbm9ybWFsaXplZC53ZWVrWWVhciB8fCBub3JtYWxpemVkLndlZWtOdW1iZXI7XG5cbiAgICAvLyBjYXNlczpcbiAgICAvLyBqdXN0IGEgd2Vla2RheSAtPiB0aGlzIHdlZWsncyBpbnN0YW5jZSBvZiB0aGF0IHdlZWtkYXksIG5vIHdvcnJpZXNcbiAgICAvLyAoZ3JlZ29yaWFuIGRhdGEgb3Igb3JkaW5hbCkgKyAod2Vla1llYXIgb3Igd2Vla051bWJlcikgLT4gZXJyb3JcbiAgICAvLyAoZ3JlZ29yaWFuIG1vbnRoIG9yIGRheSkgKyBvcmRpbmFsIC0+IGVycm9yXG4gICAgLy8gb3RoZXJ3aXNlIGp1c3QgdXNlIHdlZWtzIG9yIG9yZGluYWxzIG9yIGdyZWdvcmlhbiwgZGVwZW5kaW5nIG9uIHdoYXQncyBzcGVjaWZpZWRcblxuICAgIGlmICgoY29udGFpbnNHcmVnb3IgfHwgY29udGFpbnNPcmRpbmFsKSAmJiBkZWZpbml0ZVdlZWtEZWYpIHtcbiAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcihcbiAgICAgICAgXCJDYW4ndCBtaXggd2Vla1llYXIvd2Vla051bWJlciB1bml0cyB3aXRoIHllYXIvbW9udGgvZGF5IG9yIG9yZGluYWxzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5zR3JlZ29yTUQgJiYgY29udGFpbnNPcmRpbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoXCJDYW4ndCBtaXggb3JkaW5hbCBkYXRlcyB3aXRoIG1vbnRoL2RheVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VXZWVrRGF0YSA9IGRlZmluaXRlV2Vla0RlZiB8fCAobm9ybWFsaXplZC53ZWVrZGF5ICYmICFjb250YWluc0dyZWdvcik7XG5cbiAgICAvLyBjb25maWd1cmUgb3Vyc2VsdmVzIHRvIGRlYWwgd2l0aCBncmVnb3JpYW4gZGF0ZXMgb3Igd2VlayBzdHVmZlxuICAgIGxldCB1bml0cyxcbiAgICAgIGRlZmF1bHRWYWx1ZXMsXG4gICAgICBvYmpOb3cgPSB0c1RvT2JqKHRzTm93LCBvZmZzZXRQcm92aXMpO1xuICAgIGlmICh1c2VXZWVrRGF0YSkge1xuICAgICAgdW5pdHMgPSBvcmRlcmVkV2Vla1VuaXRzO1xuICAgICAgZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRXZWVrVW5pdFZhbHVlcztcbiAgICAgIG9iak5vdyA9IGdyZWdvcmlhblRvV2VlayhvYmpOb3csIG1pbkRheXNJbkZpcnN0V2Vlaywgc3RhcnRPZldlZWspO1xuICAgIH0gZWxzZSBpZiAoY29udGFpbnNPcmRpbmFsKSB7XG4gICAgICB1bml0cyA9IG9yZGVyZWRPcmRpbmFsVW5pdHM7XG4gICAgICBkZWZhdWx0VmFsdWVzID0gZGVmYXVsdE9yZGluYWxVbml0VmFsdWVzO1xuICAgICAgb2JqTm93ID0gZ3JlZ29yaWFuVG9PcmRpbmFsKG9iak5vdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuaXRzID0gb3JkZXJlZFVuaXRzO1xuICAgICAgZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRVbml0VmFsdWVzO1xuICAgIH1cblxuICAgIC8vIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbWlzc2luZyBzdHVmZlxuICAgIGxldCBmb3VuZEZpcnN0ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCB1IG9mIHVuaXRzKSB7XG4gICAgICBjb25zdCB2ID0gbm9ybWFsaXplZFt1XTtcbiAgICAgIGlmICghaXNVbmRlZmluZWQodikpIHtcbiAgICAgICAgZm91bmRGaXJzdCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGZvdW5kRmlyc3QpIHtcbiAgICAgICAgbm9ybWFsaXplZFt1XSA9IGRlZmF1bHRWYWx1ZXNbdV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3JtYWxpemVkW3VdID0gb2JqTm93W3VdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgdmFsdWVzIHdlIGhhdmUgYXJlIGluIHJhbmdlXG4gICAgY29uc3QgaGlnaGVyT3JkZXJJbnZhbGlkID0gdXNlV2Vla0RhdGFcbiAgICAgICAgPyBoYXNJbnZhbGlkV2Vla0RhdGEobm9ybWFsaXplZCwgbWluRGF5c0luRmlyc3RXZWVrLCBzdGFydE9mV2VlaylcbiAgICAgICAgOiBjb250YWluc09yZGluYWxcbiAgICAgICAgPyBoYXNJbnZhbGlkT3JkaW5hbERhdGEobm9ybWFsaXplZClcbiAgICAgICAgOiBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YShub3JtYWxpemVkKSxcbiAgICAgIGludmFsaWQgPSBoaWdoZXJPcmRlckludmFsaWQgfHwgaGFzSW52YWxpZFRpbWVEYXRhKG5vcm1hbGl6ZWQpO1xuXG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKGludmFsaWQpO1xuICAgIH1cblxuICAgIC8vIGNvbXB1dGUgdGhlIGFjdHVhbCB0aW1lXG4gICAgY29uc3QgZ3JlZ29yaWFuID0gdXNlV2Vla0RhdGFcbiAgICAgICAgPyB3ZWVrVG9HcmVnb3JpYW4obm9ybWFsaXplZCwgbWluRGF5c0luRmlyc3RXZWVrLCBzdGFydE9mV2VlaylcbiAgICAgICAgOiBjb250YWluc09yZGluYWxcbiAgICAgICAgPyBvcmRpbmFsVG9HcmVnb3JpYW4obm9ybWFsaXplZClcbiAgICAgICAgOiBub3JtYWxpemVkLFxuICAgICAgW3RzRmluYWwsIG9mZnNldEZpbmFsXSA9IG9ialRvVFMoZ3JlZ29yaWFuLCBvZmZzZXRQcm92aXMsIHpvbmVUb1VzZSksXG4gICAgICBpbnN0ID0gbmV3IERhdGVUaW1lKHtcbiAgICAgICAgdHM6IHRzRmluYWwsXG4gICAgICAgIHpvbmU6IHpvbmVUb1VzZSxcbiAgICAgICAgbzogb2Zmc2V0RmluYWwsXG4gICAgICAgIGxvYyxcbiAgICAgIH0pO1xuXG4gICAgLy8gZ3JlZ29yaWFuIGRhdGEgKyB3ZWVrZGF5IHNlcnZlcyBvbmx5IHRvIHZhbGlkYXRlXG4gICAgaWYgKG5vcm1hbGl6ZWQud2Vla2RheSAmJiBjb250YWluc0dyZWdvciAmJiBvYmoud2Vla2RheSAhPT0gaW5zdC53ZWVrZGF5KSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChcbiAgICAgICAgXCJtaXNtYXRjaGVkIHdlZWtkYXlcIixcbiAgICAgICAgYHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGggYSB3ZWVrZGF5IG9mICR7bm9ybWFsaXplZC53ZWVrZGF5fSBhbmQgYSBkYXRlIG9mICR7aW5zdC50b0lTTygpfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFpbnN0LmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKGluc3QuaW52YWxpZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3Q7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBJU08gODYwMSBzdHJpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgSVNPIHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgdGltZSB0byB0aGlzIHpvbmVcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSBmaXhlZC1vZmZzZXQgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXJdIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy53ZWVrU2V0dGluZ3NdIC0gdGhlIHdlZWsgc2V0dGluZ3MgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUlTTygnMjAxNi0wNS0yNVQwOTowODozNC4xMjMnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMyswNjowMCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtMDUtMjVUMDk6MDg6MzQuMTIzKzA2OjAwJywge3NldFpvbmU6IHRydWV9KVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMycsIHt6b25lOiAndXRjJ30pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtVzA1LTQnKVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tSVNPKHRleHQsIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IFt2YWxzLCBwYXJzZWRab25lXSA9IHBhcnNlSVNPRGF0ZSh0ZXh0KTtcbiAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBcIklTTyA4NjAxXCIsIHRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYW4gUkZDIDI4MjIgc3RyaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIFJGQyAyODIyIHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gY29udmVydCB0aGUgdGltZSB0byB0aGlzIHpvbmUuIFNpbmNlIHRoZSBvZmZzZXQgaXMgYWx3YXlzIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGl0c2VsZiwgdGhpcyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBzdHJpbmcsIG1lcmVseSB0aGUgem9uZSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGlzIGV4cHJlc3NlZCBpbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSBmaXhlZC1vZmZzZXQgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMud2Vla1NldHRpbmdzIC0gdGhlIHdlZWsgc2V0dGluZ3MgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVJGQzI4MjIoJzI1IE5vdiAyMDE2IDEzOjIzOjEyIEdNVCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21SRkMyODIyKCdGcmksIDI1IE5vdiAyMDE2IDEzOjIzOjEyICswNjAwJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVJGQzI4MjIoJzI1IE5vdiAyMDE2IDEzOjIzIFonKVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tUkZDMjgyMih0ZXh0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZVJGQzI4MjJEYXRlKHRleHQpO1xuICAgIHJldHVybiBwYXJzZURhdGFUb0RhdGVUaW1lKHZhbHMsIHBhcnNlZFpvbmUsIG9wdHMsIFwiUkZDIDI4MjJcIiwgdGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBIVFRQIGhlYWRlciBkYXRlXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMy5odG1sI3NlYzMuMy4xXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIEhUVFAgaGVhZGVyIGRhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIGNvbnZlcnQgdGhlIHRpbWUgdG8gdGhpcyB6b25lLiBTaW5jZSBIVFRQIGRhdGVzIGFyZSBhbHdheXMgaW4gVVRDLCB0aGlzIGhhcyBubyBlZmZlY3Qgb24gdGhlIGludGVycHJldGF0aW9uIG9mIHN0cmluZywgbWVyZWx5IHRoZSB6b25lIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaXMgZXhwcmVzc2VkIGluLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnNldFpvbmU9ZmFsc2VdIC0gb3ZlcnJpZGUgdGhlIHpvbmUgd2l0aCB0aGUgZml4ZWQtb2Zmc2V0IHpvbmUgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcuIEZvciBIVFRQIGRhdGVzLCB0aGlzIGlzIGFsd2F5cyBVVEMsIHNvIHRoaXMgb3B0aW9uIGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyB0aGUgYHpvbmVgIG9wdGlvbiB0byAndXRjJywgYnV0IHRoaXMgb3B0aW9uIGlzIGluY2x1ZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHNpbWlsYXIgbWV0aG9kcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMud2Vla1NldHRpbmdzIC0gdGhlIHdlZWsgc2V0dGluZ3MgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUhUVFAoJ1N1biwgMDYgTm92IDE5OTQgMDg6NDk6MzcgR01UJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUhUVFAoJ1N1bmRheSwgMDYtTm92LTk0IDA4OjQ5OjM3IEdNVCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21IVFRQKCdTdW4gTm92ICA2IDA4OjQ5OjM3IDE5OTQnKVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tSFRUUCh0ZXh0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZUhUVFBEYXRlKHRleHQpO1xuICAgIHJldHVybiBwYXJzZURhdGFUb0RhdGVUaW1lKHZhbHMsIHBhcnNlZFpvbmUsIG9wdHMsIFwiSFRUUFwiLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIGlucHV0IHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZy5cbiAgICogRGVmYXVsdHMgdG8gZW4tVVMgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJ3MgbG9jYWxlLiBGb3IgYSB0YWJsZSBvZiB0b2tlbnMgYW5kIHRoZWlyIGludGVycHJldGF0aW9ucywgc2VlIFtoZXJlXShodHRwczovL21vbWVudC5naXRodWIuaW8vbHV4b24vIy9wYXJzaW5nP2lkPXRhYmxlLW9mLXRva2VucykuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCB0aGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGJlIGluIChzZWUgdGhlIGxpbmsgYmVsb3cgZm9yIHRoZSBmb3JtYXRzKVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgRGF0ZVRpbWUgdG8gdGhpcyB6b25lXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc2V0Wm9uZT1mYWxzZV0gLSBvdmVycmlkZSB0aGUgem9uZSB3aXRoIGEgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIGEgbG9jYWxlIHN0cmluZyB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSBEYXRlVGltZSB0byB0aGlzIGxvY2FsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgdG8gdGhpcyBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLndlZWtTZXR0aW5ncyAtIHRoZSB3ZWVrIHNldHRpbmdzIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tRm9ybWF0KHRleHQsIGZtdCwgb3B0cyA9IHt9KSB7XG4gICAgaWYgKGlzVW5kZWZpbmVkKHRleHQpIHx8IGlzVW5kZWZpbmVkKGZtdCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcImZyb21Gb3JtYXQgcmVxdWlyZXMgYW4gaW5wdXQgc3RyaW5nIGFuZCBhIGZvcm1hdFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwgfSA9IG9wdHMsXG4gICAgICBsb2NhbGVUb1VzZSA9IExvY2FsZS5mcm9tT3B0cyh7XG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgbnVtYmVyaW5nU3lzdGVtLFxuICAgICAgICBkZWZhdWx0VG9FTjogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICAgW3ZhbHMsIHBhcnNlZFpvbmUsIHNwZWNpZmljT2Zmc2V0LCBpbnZhbGlkXSA9IHBhcnNlRnJvbVRva2Vucyhsb2NhbGVUb1VzZSwgdGV4dCwgZm10KTtcbiAgICBpZiAoaW52YWxpZCkge1xuICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQoaW52YWxpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwYXJzZURhdGFUb0RhdGVUaW1lKHZhbHMsIHBhcnNlZFpvbmUsIG9wdHMsIGBmb3JtYXQgJHtmbXR9YCwgdGV4dCwgc3BlY2lmaWNPZmZzZXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgZnJvbUZvcm1hdCBpbnN0ZWFkXG4gICAqL1xuICBzdGF0aWMgZnJvbVN0cmluZyh0ZXh0LCBmbXQsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiBEYXRlVGltZS5mcm9tRm9ybWF0KHRleHQsIGZtdCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIFNRTCBkYXRlLCB0aW1lLCBvciBkYXRldGltZVxuICAgKiBEZWZhdWx0cyB0byBlbi1VUyBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkLCByZWdhcmRsZXNzIG9mIHRoZSBzeXN0ZW0ncyBsb2NhbGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgc3RyaW5nIHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0byBhZmZlY3QgdGhlIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSB1c2UgdGhpcyB6b25lIGlmIG5vIG9mZnNldCBpcyBzcGVjaWZpZWQgaW4gdGhlIGlucHV0IHN0cmluZyBpdHNlbGYuIFdpbGwgYWxzbyBjb252ZXJ0IHRoZSBEYXRlVGltZSB0byB0aGlzIHpvbmVcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSB6b25lIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGl0c2VsZiwgaWYgaXQgc3BlY2lmaWVzIG9uZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gYSBsb2NhbGUgc3RyaW5nIHRvIHVzZSB3aGVuIHBhcnNpbmcuIFdpbGwgYWxzbyBzZXQgdGhlIERhdGVUaW1lIHRvIHRoaXMgbG9jYWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZSB3aGVuIHBhcnNpbmcuIFdpbGwgYWxzbyBzZXQgdGhlIHJlc3VsdGluZyBEYXRlVGltZSB0byB0aGlzIG51bWJlcmluZyBzeXN0ZW1cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMud2Vla1NldHRpbmdzIC0gdGhlIHdlZWsgc2V0dGluZ3MgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0JylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDInKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiswNjowMCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQuMzQyIEFtZXJpY2EvTG9zX0FuZ2VsZXMnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiBBbWVyaWNhL0xvc19BbmdlbGVzJywgeyBzZXRab25lOiB0cnVlIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQuMzQyJywgeyB6b25lOiAnQW1lcmljYS9Mb3NfQW5nZWxlcycgfSlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMDk6MTI6MzQuMzQyJylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbVNRTCh0ZXh0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZVNRTCh0ZXh0KTtcbiAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBcIlNRTFwiLCB0ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW52YWxpZCBEYXRlVGltZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiAtIHNpbXBsZSBzdHJpbmcgb2Ygd2h5IHRoaXMgRGF0ZVRpbWUgaXMgaW52YWxpZC4gU2hvdWxkIG5vdCBjb250YWluIHBhcmFtZXRlcnMgb3IgYW55dGhpbmcgZWxzZSBkYXRhLWRlcGVuZGVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHBsYW5hdGlvbj1udWxsXSAtIGxvbmdlciBleHBsYW5hdGlvbiwgbWF5IGluY2x1ZGUgcGFyYW1ldGVycyBhbmQgb3RoZXIgdXNlZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvblxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBpbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24gPSBudWxsKSB7XG4gICAgaWYgKCFyZWFzb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgRGF0ZVRpbWUgaXMgaW52YWxpZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnZhbGlkID0gcmVhc29uIGluc3RhbmNlb2YgSW52YWxpZCA/IHJlYXNvbiA6IG5ldyBJbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pO1xuXG4gICAgaWYgKFNldHRpbmdzLnRocm93T25JbnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZERhdGVUaW1lRXJyb3IoaW52YWxpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoeyBpbnZhbGlkIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZVRpbWUuIFdvcmtzIGFjcm9zcyBjb250ZXh0IGJvdW5kYXJpZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IG9cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc0RhdGVUaW1lKG8pIHtcbiAgICByZXR1cm4gKG8gJiYgby5pc0x1eG9uRGF0ZVRpbWUpIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2R1Y2UgdGhlIGZvcm1hdCBzdHJpbmcgZm9yIGEgc2V0IG9mIG9wdGlvbnNcbiAgICogQHBhcmFtIGZvcm1hdE9wdHNcbiAgICogQHBhcmFtIGxvY2FsZU9wdHNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBwYXJzZUZvcm1hdEZvck9wdHMoZm9ybWF0T3B0cywgbG9jYWxlT3B0cyA9IHt9KSB7XG4gICAgY29uc3QgdG9rZW5MaXN0ID0gZm9ybWF0T3B0c1RvVG9rZW5zKGZvcm1hdE9wdHMsIExvY2FsZS5mcm9tT2JqZWN0KGxvY2FsZU9wdHMpKTtcbiAgICByZXR1cm4gIXRva2VuTGlzdCA/IG51bGwgOiB0b2tlbkxpc3QubWFwKCh0KSA9PiAodCA/IHQudmFsIDogbnVsbCkpLmpvaW4oXCJcIik7XG4gIH1cblxuICAvKipcbiAgICogUHJvZHVjZSB0aGUgdGhlIGZ1bGx5IGV4cGFuZGVkIGZvcm1hdCB0b2tlbiBmb3IgdGhlIGxvY2FsZVxuICAgKiBEb2VzIE5PVCBxdW90ZSBjaGFyYWN0ZXJzLCBzbyBxdW90ZWQgdG9rZW5zIHdpbGwgbm90IHJvdW5kIHRyaXAgY29ycmVjdGx5XG4gICAqIEBwYXJhbSBmbXRcbiAgICogQHBhcmFtIGxvY2FsZU9wdHNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBleHBhbmRGb3JtYXQoZm10LCBsb2NhbGVPcHRzID0ge30pIHtcbiAgICBjb25zdCBleHBhbmRlZCA9IGV4cGFuZE1hY3JvVG9rZW5zKEZvcm1hdHRlci5wYXJzZUZvcm1hdChmbXQpLCBMb2NhbGUuZnJvbU9iamVjdChsb2NhbGVPcHRzKSk7XG4gICAgcmV0dXJuIGV4cGFuZGVkLm1hcCgodCkgPT4gdC52YWwpLmpvaW4oXCJcIik7XG4gIH1cblxuICBzdGF0aWMgcmVzZXRDYWNoZSgpIHtcbiAgICB6b25lT2Zmc2V0VHMgPSB1bmRlZmluZWQ7XG4gICAgem9uZU9mZnNldEd1ZXNzQ2FjaGUgPSB7fTtcbiAgfVxuXG4gIC8vIElORk9cblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBvZiB1bml0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIGEgdW5pdCBzdWNoIGFzICdtaW51dGUnIG9yICdkYXknXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDcsIDQpLmdldCgnbW9udGgnKTsgLy89PiA3XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDcsIDQpLmdldCgnZGF5Jyk7IC8vPT4gNFxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXQodW5pdCkge1xuICAgIHJldHVybiB0aGlzW3VuaXRdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgRGF0ZVRpbWUgaXMgdmFsaWQuIEludmFsaWQgRGF0ZVRpbWVzIG9jY3VyIHdoZW46XG4gICAqICogVGhlIERhdGVUaW1lIHdhcyBjcmVhdGVkIGZyb20gaW52YWxpZCBjYWxlbmRhciBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgMTN0aCBtb250aCBvciBGZWJydWFyeSAzMFxuICAgKiAqIFRoZSBEYXRlVGltZSB3YXMgY3JlYXRlZCBieSBhbiBvcGVyYXRpb24gb24gYW5vdGhlciBpbnZhbGlkIGRhdGVcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID09PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXJyb3IgY29kZSBpZiB0aGlzIERhdGVUaW1lIGlzIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIERhdGVUaW1lIGlzIHZhbGlkXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaW52YWxpZFJlYXNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLnJlYXNvbiA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBleHBsYW5hdGlvbiBvZiB3aHkgdGhpcyBEYXRlVGltZSBiZWNhbWUgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgRGF0ZVRpbWUgaXMgdmFsaWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBpbnZhbGlkRXhwbGFuYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5leHBsYW5hdGlvbiA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsb2NhbGUgb2YgYSBEYXRlVGltZSwgc3VjaCAnZW4tR0InLiBUaGUgbG9jYWxlIGlzIHVzZWQgd2hlbiBmb3JtYXR0aW5nIHRoZSBEYXRlVGltZVxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGxvY2FsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5sb2MubG9jYWxlIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG51bWJlcmluZyBzeXN0ZW0gb2YgYSBEYXRlVGltZSwgc3VjaCAnYmVuZycuIFRoZSBudW1iZXJpbmcgc3lzdGVtIGlzIHVzZWQgd2hlbiBmb3JtYXR0aW5nIHRoZSBEYXRlVGltZVxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG51bWJlcmluZ1N5c3RlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5sb2MubnVtYmVyaW5nU3lzdGVtIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG91dHB1dCBjYWxlbmRhciBvZiBhIERhdGVUaW1lLCBzdWNoICdpc2xhbWljJy4gVGhlIG91dHB1dCBjYWxlbmRhciBpcyB1c2VkIHdoZW4gZm9ybWF0dGluZyB0aGUgRGF0ZVRpbWVcbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBvdXRwdXRDYWxlbmRhcigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5sb2Mub3V0cHV0Q2FsZW5kYXIgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdGltZSB6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIERhdGVUaW1lLlxuICAgKiBAdHlwZSB7Wm9uZX1cbiAgICovXG4gIGdldCB6b25lKCkge1xuICAgIHJldHVybiB0aGlzLl96b25lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbmFtZSBvZiB0aGUgdGltZSB6b25lLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IHpvbmVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnpvbmUubmFtZSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB5ZWFyXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS55ZWFyIC8vPT4gMjAxN1xuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHllYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy55ZWFyIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcXVhcnRlclxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkucXVhcnRlciAvLz0+IDJcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBxdWFydGVyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBNYXRoLmNlaWwodGhpcy5jLm1vbnRoIC8gMykgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtb250aCAoMS0xMikuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5tb250aCAvLz0+IDVcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBtb250aCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLm1vbnRoIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGF5IG9mIHRoZSBtb250aCAoMS0zMGlzaCkuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5kYXkgLy89PiAyNVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGRheSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLmRheSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGhvdXIgb2YgdGhlIGRheSAoMC0yMykuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1LCA5KS5ob3VyIC8vPT4gOVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGhvdXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5ob3VyIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWludXRlIG9mIHRoZSBob3VyICgwLTU5KS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUsIDksIDMwKS5taW51dGUgLy89PiAzMFxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG1pbnV0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLm1pbnV0ZSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNlY29uZCBvZiB0aGUgbWludXRlICgwLTU5KS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUsIDksIDMwLCA1Mikuc2Vjb25kIC8vPT4gNTJcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBzZWNvbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5zZWNvbmQgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtaWxsaXNlY29uZCBvZiB0aGUgc2Vjb25kICgwLTk5OSkuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1LCA5LCAzMCwgNTIsIDY1NCkubWlsbGlzZWNvbmQgLy89PiA2NTRcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBtaWxsaXNlY29uZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLm1pbGxpc2Vjb25kIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgd2VlayB5ZWFyXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAxMiwgMzEpLndlZWtZZWFyIC8vPT4gMjAxNVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHdlZWtZZWFyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBwb3NzaWJseUNhY2hlZFdlZWtEYXRhKHRoaXMpLndlZWtZZWFyIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgd2VlayBudW1iZXIgb2YgdGhlIHdlZWsgeWVhciAoMS01MmlzaCkuXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkud2Vla051bWJlciAvLz0+IDIxXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgd2Vla051bWJlcigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gcG9zc2libHlDYWNoZWRXZWVrRGF0YSh0aGlzKS53ZWVrTnVtYmVyIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGF5IG9mIHRoZSB3ZWVrLlxuICAgKiAxIGlzIE1vbmRheSBhbmQgNyBpcyBTdW5kYXlcbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDExLCAzMSkud2Vla2RheSAvLz0+IDRcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB3ZWVrZGF5KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBwb3NzaWJseUNhY2hlZFdlZWtEYXRhKHRoaXMpLndlZWtkYXkgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgZGF0ZSBpcyBvbiBhIHdlZWtlbmQgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbGUsIGZhbHNlIG90aGVyd2lzZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1dlZWtlbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCAmJiB0aGlzLmxvYy5nZXRXZWVrZW5kRGF5cygpLmluY2x1ZGVzKHRoaXMud2Vla2RheSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkYXkgb2YgdGhlIHdlZWsgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbGUuXG4gICAqIDEgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayBhbmQgNyBpcyB0aGUgbGFzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAqIElmIHRoZSBsb2NhbGUgYXNzaWducyBTdW5kYXkgYXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlaywgdGhlbiBhIGRhdGUgd2hpY2ggaXMgYSBTdW5kYXkgd2lsbCByZXR1cm4gMSxcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldCBsb2NhbFdlZWtkYXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHBvc3NpYmx5Q2FjaGVkTG9jYWxXZWVrRGF0YSh0aGlzKS53ZWVrZGF5IDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgd2VlayBudW1iZXIgb2YgdGhlIHdlZWsgeWVhciBhY2NvcmRpbmcgdG8gdGhlIGxvY2FsZS4gRGlmZmVyZW50IGxvY2FsZXMgYXNzaWduIHdlZWsgbnVtYmVycyBkaWZmZXJlbnRseSxcbiAgICogYmVjYXVzZSB0aGUgd2VlayBjYW4gc3RhcnQgb24gZGlmZmVyZW50IGRheXMgb2YgdGhlIHdlZWsgKHNlZSBsb2NhbFdlZWtkYXkpIGFuZCBiZWNhdXNlIGEgZGlmZmVyZW50IG51bWJlciBvZiBkYXlzXG4gICAqIGlzIHJlcXVpcmVkIGZvciBhIHdlZWsgdG8gY291bnQgYXMgdGhlIGZpcnN0IHdlZWsgb2YgYSB5ZWFyLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGxvY2FsV2Vla051bWJlcigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gcG9zc2libHlDYWNoZWRMb2NhbFdlZWtEYXRhKHRoaXMpLndlZWtOdW1iZXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB3ZWVrIHllYXIgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbGUuIERpZmZlcmVudCBsb2NhbGVzIGFzc2lnbiB3ZWVrIG51bWJlcnMgKGFuZCB0aGVyZWZvciB3ZWVrIHllYXJzKVxuICAgKiBkaWZmZXJlbnRseSwgc2VlIGxvY2FsV2Vla051bWJlci5cbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldCBsb2NhbFdlZWtZZWFyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBwb3NzaWJseUNhY2hlZExvY2FsV2Vla0RhdGEodGhpcykud2Vla1llYXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBvcmRpbmFsIChtZWFuaW5nIHRoZSBkYXkgb2YgdGhlIHllYXIpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5vcmRpbmFsIC8vPT4gMTQ1XG4gICAqIEB0eXBlIHtudW1iZXJ8RGF0ZVRpbWV9XG4gICAqL1xuICBnZXQgb3JkaW5hbCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gZ3JlZ29yaWFuVG9PcmRpbmFsKHRoaXMuYykub3JkaW5hbCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIHNob3J0IG1vbnRoIG5hbWUsIHN1Y2ggYXMgJ09jdCcuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAxMCwgMzApLm1vbnRoU2hvcnQgLy89PiBPY3RcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBtb250aFNob3J0KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbmZvLm1vbnRocyhcInNob3J0XCIsIHsgbG9jT2JqOiB0aGlzLmxvYyB9KVt0aGlzLm1vbnRoIC0gMV0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaHVtYW4gcmVhZGFibGUgbG9uZyBtb250aCBuYW1lLCBzdWNoIGFzICdPY3RvYmVyJy5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDEwLCAzMCkubW9udGhMb25nIC8vPT4gT2N0b2JlclxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG1vbnRoTG9uZygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW5mby5tb250aHMoXCJsb25nXCIsIHsgbG9jT2JqOiB0aGlzLmxvYyB9KVt0aGlzLm1vbnRoIC0gMV0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaHVtYW4gcmVhZGFibGUgc2hvcnQgd2Vla2RheSwgc3VjaCBhcyAnTW9uJy5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDEwLCAzMCkud2Vla2RheVNob3J0IC8vPT4gTW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgd2Vla2RheVNob3J0KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbmZvLndlZWtkYXlzKFwic2hvcnRcIiwgeyBsb2NPYmo6IHRoaXMubG9jIH0pW3RoaXMud2Vla2RheSAtIDFdIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIGxvbmcgd2Vla2RheSwgc3VjaCBhcyAnTW9uZGF5Jy5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDEwLCAzMCkud2Vla2RheUxvbmcgLy89PiBNb25kYXlcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCB3ZWVrZGF5TG9uZygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW5mby53ZWVrZGF5cyhcImxvbmdcIiwgeyBsb2NPYmo6IHRoaXMubG9jIH0pW3RoaXMud2Vla2RheSAtIDFdIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIFVUQyBvZmZzZXQgb2YgdGhpcyBEYXRlVGltZSBpbiBtaW51dGVzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLm9mZnNldCAvLz0+IC0yNDBcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKCkub2Zmc2V0IC8vPT4gMFxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG9mZnNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gK3RoaXMubyA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNob3J0IGh1bWFuIG5hbWUgZm9yIHRoZSB6b25lJ3MgY3VycmVudCBvZmZzZXQsIGZvciBleGFtcGxlIFwiRVNUXCIgb3IgXCJFRFRcIi5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgb2Zmc2V0TmFtZVNob3J0KCkge1xuICAgIGlmICh0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnpvbmUub2Zmc2V0TmFtZSh0aGlzLnRzLCB7XG4gICAgICAgIGZvcm1hdDogXCJzaG9ydFwiLFxuICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvbmcgaHVtYW4gbmFtZSBmb3IgdGhlIHpvbmUncyBjdXJyZW50IG9mZnNldCwgZm9yIGV4YW1wbGUgXCJFYXN0ZXJuIFN0YW5kYXJkIFRpbWVcIiBvciBcIkVhc3Rlcm4gRGF5bGlnaHQgVGltZVwiLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBvZmZzZXROYW1lTG9uZygpIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gdGhpcy56b25lLm9mZnNldE5hbWUodGhpcy50cywge1xuICAgICAgICBmb3JtYXQ6IFwibG9uZ1wiLFxuICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgd2hldGhlciB0aGlzIHpvbmUncyBvZmZzZXQgZXZlciBjaGFuZ2VzLCBhcyBpbiBhIERTVC5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNPZmZzZXRGaXhlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy56b25lLmlzVW5pdmVyc2FsIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgd2hldGhlciB0aGUgRGF0ZVRpbWUgaXMgaW4gYSBEU1QuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzSW5EU1QoKSB7XG4gICAgaWYgKHRoaXMuaXNPZmZzZXRGaXhlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLm9mZnNldCA+IHRoaXMuc2V0KHsgbW9udGg6IDEsIGRheTogMSB9KS5vZmZzZXQgfHxcbiAgICAgICAgdGhpcy5vZmZzZXQgPiB0aGlzLnNldCh7IG1vbnRoOiA1IH0pLm9mZnNldFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRob3NlIERhdGVUaW1lcyB3aGljaCBoYXZlIHRoZSBzYW1lIGxvY2FsIHRpbWUgYXMgdGhpcyBEYXRlVGltZSwgYnV0IGEgZGlmZmVyZW50IG9mZnNldCBmcm9tIFVUQ1xuICAgKiBpbiB0aGlzIERhdGVUaW1lJ3Mgem9uZS4gRHVyaW5nIERTVCBjaGFuZ2VzIGxvY2FsIHRpbWUgY2FuIGJlIGFtYmlndW91cywgZm9yIGV4YW1wbGVcbiAgICogYDIwMjMtMTAtMjlUMDI6MzA6MDBgIGluIGBFdXJvcGUvQmVybGluYCBjYW4gaGF2ZSBvZmZzZXQgYCswMTowMGAgb3IgYCswMjowMGAuXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGJvdGggcG9zc2libGUgRGF0ZVRpbWVzIGlmIHRoaXMgRGF0ZVRpbWUncyBsb2NhbCB0aW1lIGlzIGFtYmlndW91cy5cbiAgICogQHJldHVybnMge0RhdGVUaW1lW119XG4gICAqL1xuICBnZXRQb3NzaWJsZU9mZnNldHMoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQgfHwgdGhpcy5pc09mZnNldEZpeGVkKSB7XG4gICAgICByZXR1cm4gW3RoaXNdO1xuICAgIH1cbiAgICBjb25zdCBkYXlNcyA9IDg2NDAwMDAwO1xuICAgIGNvbnN0IG1pbnV0ZU1zID0gNjAwMDA7XG4gICAgY29uc3QgbG9jYWxUUyA9IG9ialRvTG9jYWxUUyh0aGlzLmMpO1xuICAgIGNvbnN0IG9FYXJsaWVyID0gdGhpcy56b25lLm9mZnNldChsb2NhbFRTIC0gZGF5TXMpO1xuICAgIGNvbnN0IG9MYXRlciA9IHRoaXMuem9uZS5vZmZzZXQobG9jYWxUUyArIGRheU1zKTtcblxuICAgIGNvbnN0IG8xID0gdGhpcy56b25lLm9mZnNldChsb2NhbFRTIC0gb0VhcmxpZXIgKiBtaW51dGVNcyk7XG4gICAgY29uc3QgbzIgPSB0aGlzLnpvbmUub2Zmc2V0KGxvY2FsVFMgLSBvTGF0ZXIgKiBtaW51dGVNcyk7XG4gICAgaWYgKG8xID09PSBvMikge1xuICAgICAgcmV0dXJuIFt0aGlzXTtcbiAgICB9XG4gICAgY29uc3QgdHMxID0gbG9jYWxUUyAtIG8xICogbWludXRlTXM7XG4gICAgY29uc3QgdHMyID0gbG9jYWxUUyAtIG8yICogbWludXRlTXM7XG4gICAgY29uc3QgYzEgPSB0c1RvT2JqKHRzMSwgbzEpO1xuICAgIGNvbnN0IGMyID0gdHNUb09iaih0czIsIG8yKTtcbiAgICBpZiAoXG4gICAgICBjMS5ob3VyID09PSBjMi5ob3VyICYmXG4gICAgICBjMS5taW51dGUgPT09IGMyLm1pbnV0ZSAmJlxuICAgICAgYzEuc2Vjb25kID09PSBjMi5zZWNvbmQgJiZcbiAgICAgIGMxLm1pbGxpc2Vjb25kID09PSBjMi5taWxsaXNlY29uZFxuICAgICkge1xuICAgICAgcmV0dXJuIFtjbG9uZSh0aGlzLCB7IHRzOiB0czEgfSksIGNsb25lKHRoaXMsIHsgdHM6IHRzMiB9KV07XG4gICAgfVxuICAgIHJldHVybiBbdGhpc107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgRGF0ZVRpbWUgaXMgaW4gYSBsZWFwIHllYXIsIGZhbHNlIG90aGVyd2lzZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE2KS5pc0luTGVhcFllYXIgLy89PiB0cnVlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTMpLmlzSW5MZWFwWWVhciAvLz0+IGZhbHNlXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzSW5MZWFwWWVhcigpIHtcbiAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLnllYXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIGluIHRoaXMgRGF0ZVRpbWUncyBtb250aFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE2LCAyKS5kYXlzSW5Nb250aCAvLz0+IDI5XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYsIDMpLmRheXNJbk1vbnRoIC8vPT4gMzFcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBkYXlzSW5Nb250aCgpIHtcbiAgICByZXR1cm4gZGF5c0luTW9udGgodGhpcy55ZWFyLCB0aGlzLm1vbnRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGlzIERhdGVUaW1lJ3MgeWVhclxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE2KS5kYXlzSW5ZZWFyIC8vPT4gMzY2XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTMpLmRheXNJblllYXIgLy89PiAzNjVcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBkYXlzSW5ZZWFyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBkYXlzSW5ZZWFyKHRoaXMueWVhcikgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHdlZWtzIGluIHRoaXMgRGF0ZVRpbWUncyB5ZWFyXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDA0KS53ZWVrc0luV2Vla1llYXIgLy89PiA1M1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDEzKS53ZWVrc0luV2Vla1llYXIgLy89PiA1MlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHdlZWtzSW5XZWVrWWVhcigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gd2Vla3NJbldlZWtZZWFyKHRoaXMud2Vla1llYXIpIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB3ZWVrcyBpbiB0aGlzIERhdGVUaW1lJ3MgbG9jYWwgd2VlayB5ZWFyXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMjAsIDYsIHtsb2NhbGU6ICdlbi1VUyd9KS53ZWVrc0luTG9jYWxXZWVrWWVhciAvLz0+IDUyXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMjAsIDYsIHtsb2NhbGU6ICdkZS1ERSd9KS53ZWVrc0luTG9jYWxXZWVrWWVhciAvLz0+IDUzXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgd2Vla3NJbkxvY2FsV2Vla1llYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFxuICAgICAgPyB3ZWVrc0luV2Vla1llYXIoXG4gICAgICAgICAgdGhpcy5sb2NhbFdlZWtZZWFyLFxuICAgICAgICAgIHRoaXMubG9jLmdldE1pbkRheXNJbkZpcnN0V2VlaygpLFxuICAgICAgICAgIHRoaXMubG9jLmdldFN0YXJ0T2ZXZWVrKClcbiAgICAgICAgKVxuICAgICAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVzb2x2ZWQgSW50bCBvcHRpb25zIGZvciB0aGlzIERhdGVUaW1lLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBiZWhhdmlvciBvZiBmb3JtYXR0aW5nIG1ldGhvZHNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSB0aGUgc2FtZSBvcHRpb25zIGFzIHRvTG9jYWxlU3RyaW5nXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIHJlc29sdmVkTG9jYWxlT3B0aW9ucyhvcHRzID0ge30pIHtcbiAgICBjb25zdCB7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBjYWxlbmRhciB9ID0gRm9ybWF0dGVyLmNyZWF0ZShcbiAgICAgIHRoaXMubG9jLmNsb25lKG9wdHMpLFxuICAgICAgb3B0c1xuICAgICkucmVzb2x2ZWRPcHRpb25zKHRoaXMpO1xuICAgIHJldHVybiB7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhcjogY2FsZW5kYXIgfTtcbiAgfVxuXG4gIC8vIFRSQU5TRk9STVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gVVRDLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqXG4gICAqIEVxdWl2YWxlbnQgdG8ge0BsaW5rIERhdGVUaW1lI3NldFpvbmV9KCd1dGMnKVxuICAgKiBAcGFyYW0ge251bWJlcn0gW29mZnNldD0wXSAtIG9wdGlvbmFsbHksIGFuIG9mZnNldCBmcm9tIFVUQyBpbiBtaW51dGVzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cz17fV0gLSBvcHRpb25zIHRvIHBhc3MgdG8gYHNldFpvbmUoKWBcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICB0b1VUQyhvZmZzZXQgPSAwLCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5zZXRab25lKEZpeGVkT2Zmc2V0Wm9uZS5pbnN0YW5jZShvZmZzZXQpLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gdGhlIGhvc3QncyBsb2NhbCB6b25lLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqXG4gICAqIEVxdWl2YWxlbnQgdG8gYHNldFpvbmUoJ2xvY2FsJylgXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgdG9Mb2NhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZXRab25lKFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gc3BlY2lmaWVkIHpvbmUuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhlIHNldHRlciBrZWVwcyB0aGUgdW5kZXJseWluZyB0aW1lIHRoZSBzYW1lIChhcyBpbiwgdGhlIHNhbWUgdGltZXN0YW1wKSwgYnV0IHRoZSBuZXcgaW5zdGFuY2Ugd2lsbCByZXBvcnQgZGlmZmVyZW50IGxvY2FsIHRpbWVzIGFuZCBjb25zaWRlciBEU1RzIHdoZW4gbWFraW5nIGNvbXB1dGF0aW9ucywgYXMgd2l0aCB7QGxpbmsgRGF0ZVRpbWUjcGx1c30uIFlvdSBtYXkgd2lzaCB0byB1c2Uge0BsaW5rIERhdGVUaW1lI3RvTG9jYWx9IGFuZCB7QGxpbmsgRGF0ZVRpbWUjdG9VVEN9IHdoaWNoIHByb3ZpZGUgc2ltcGxlIGNvbnZlbmllbmNlIHdyYXBwZXJzIGZvciBjb21tb25seSB1c2VkIHpvbmVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbem9uZT0nbG9jYWwnXSAtIGEgem9uZSBpZGVudGlmaWVyLiBBcyBhIHN0cmluZywgdGhhdCBjYW4gYmUgYW55IElBTkEgem9uZSBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgZW52aXJvbm1lbnQsIG9yIGEgZml4ZWQtb2Zmc2V0IG5hbWUgb2YgdGhlIGZvcm0gJ1VUQyszJywgb3IgdGhlIHN0cmluZ3MgJ2xvY2FsJyBvciAndXRjJy4gWW91IG1heSBhbHNvIHN1cHBseSBhbiBpbnN0YW5jZSBvZiBhIHtAbGluayBEYXRlVGltZSNab25lfSBjbGFzcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMua2VlcExvY2FsVGltZT1mYWxzZV0gLSBJZiB0cnVlLCBhZGp1c3QgdGhlIHVuZGVybHlpbmcgdGltZSBzbyB0aGF0IHRoZSBsb2NhbCB0aW1lIHN0YXlzIHRoZSBzYW1lLCBidXQgaW4gdGhlIHRhcmdldCB6b25lLiBZb3Ugc2hvdWxkIHJhcmVseSBuZWVkIHRoaXMuXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc2V0Wm9uZSh6b25lLCB7IGtlZXBMb2NhbFRpbWUgPSBmYWxzZSwga2VlcENhbGVuZGFyVGltZSA9IGZhbHNlIH0gPSB7fSkge1xuICAgIHpvbmUgPSBub3JtYWxpemVab25lKHpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgICBpZiAoem9uZS5lcXVhbHModGhpcy56b25lKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIGlmICghem9uZS5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCh1bnN1cHBvcnRlZFpvbmUoem9uZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbmV3VFMgPSB0aGlzLnRzO1xuICAgICAgaWYgKGtlZXBMb2NhbFRpbWUgfHwga2VlcENhbGVuZGFyVGltZSkge1xuICAgICAgICBjb25zdCBvZmZzZXRHdWVzcyA9IHpvbmUub2Zmc2V0KHRoaXMudHMpO1xuICAgICAgICBjb25zdCBhc09iaiA9IHRoaXMudG9PYmplY3QoKTtcbiAgICAgICAgW25ld1RTXSA9IG9ialRvVFMoYXNPYmosIG9mZnNldEd1ZXNzLCB6b25lKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHRzOiBuZXdUUywgem9uZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG9yIG91dHB1dENhbGVuZGFyLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIC0gdGhlIHByb3BlcnRpZXMgdG8gc2V0XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5yZWNvbmZpZ3VyZSh7IGxvY2FsZTogJ2VuLUdCJyB9KVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHJlY29uZmlndXJlKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyIH0gPSB7fSkge1xuICAgIGNvbnN0IGxvYyA9IHRoaXMubG9jLmNsb25lKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyIH0pO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IGxvYyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBsb2NhbGUuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS5cbiAgICogSnVzdCBhIGNvbnZlbmllbnQgYWxpYXMgZm9yIHJlY29uZmlndXJlKHsgbG9jYWxlIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5zZXRMb2NhbGUoJ2VuLUdCJylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzZXRMb2NhbGUobG9jYWxlKSB7XG4gICAgcmV0dXJuIHRoaXMucmVjb25maWd1cmUoeyBsb2NhbGUgfSk7XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgdmFsdWVzIG9mIHNwZWNpZmllZCB1bml0cy4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLlxuICAgKiBZb3UgY2FuIG9ubHkgc2V0IHVuaXRzIHdpdGggdGhpcyBtZXRob2Q7IGZvciBcInNldHRpbmdcIiBtZXRhZGF0YSwgc2VlIHtAbGluayBEYXRlVGltZSNyZWNvbmZpZ3VyZX0gYW5kIHtAbGluayBEYXRlVGltZSNzZXRab25lfS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgYWxzbyBzdXBwb3J0cyBzZXR0aW5nIGxvY2FsZS1iYXNlZCB3ZWVrIHVuaXRzLCBpLmUuIGBsb2NhbFdlZWtkYXlgLCBgbG9jYWxXZWVrTnVtYmVyYCBhbmQgYGxvY2FsV2Vla1llYXJgLlxuICAgKiBUaGV5IGNhbm5vdCBiZSBtaXhlZCB3aXRoIElTTy13ZWVrIHVuaXRzIGxpa2UgYHdlZWtkYXlgLlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIC0gYSBtYXBwaW5nIG9mIHVuaXRzIHRvIG51bWJlcnNcbiAgICogQGV4YW1wbGUgZHQuc2V0KHsgeWVhcjogMjAxNyB9KVxuICAgKiBAZXhhbXBsZSBkdC5zZXQoeyBob3VyOiA4LCBtaW51dGU6IDMwIH0pXG4gICAqIEBleGFtcGxlIGR0LnNldCh7IHdlZWtkYXk6IDUgfSlcbiAgICogQGV4YW1wbGUgZHQuc2V0KHsgeWVhcjogMjAwNSwgb3JkaW5hbDogMjM0IH0pXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc2V0KHZhbHVlcykge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVPYmplY3QodmFsdWVzLCBub3JtYWxpemVVbml0V2l0aExvY2FsV2Vla3MpO1xuICAgIGNvbnN0IHsgbWluRGF5c0luRmlyc3RXZWVrLCBzdGFydE9mV2VlayB9ID0gdXNlc0xvY2FsV2Vla1ZhbHVlcyhub3JtYWxpemVkLCB0aGlzLmxvYyk7XG5cbiAgICBjb25zdCBzZXR0aW5nV2Vla1N0dWZmID1cbiAgICAgICAgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQud2Vla1llYXIpIHx8XG4gICAgICAgICFpc1VuZGVmaW5lZChub3JtYWxpemVkLndlZWtOdW1iZXIpIHx8XG4gICAgICAgICFpc1VuZGVmaW5lZChub3JtYWxpemVkLndlZWtkYXkpLFxuICAgICAgY29udGFpbnNPcmRpbmFsID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQub3JkaW5hbCksXG4gICAgICBjb250YWluc0dyZWdvclllYXIgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC55ZWFyKSxcbiAgICAgIGNvbnRhaW5zR3JlZ29yTUQgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5tb250aCkgfHwgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQuZGF5KSxcbiAgICAgIGNvbnRhaW5zR3JlZ29yID0gY29udGFpbnNHcmVnb3JZZWFyIHx8IGNvbnRhaW5zR3JlZ29yTUQsXG4gICAgICBkZWZpbml0ZVdlZWtEZWYgPSBub3JtYWxpemVkLndlZWtZZWFyIHx8IG5vcm1hbGl6ZWQud2Vla051bWJlcjtcblxuICAgIGlmICgoY29udGFpbnNHcmVnb3IgfHwgY29udGFpbnNPcmRpbmFsKSAmJiBkZWZpbml0ZVdlZWtEZWYpIHtcbiAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcihcbiAgICAgICAgXCJDYW4ndCBtaXggd2Vla1llYXIvd2Vla051bWJlciB1bml0cyB3aXRoIHllYXIvbW9udGgvZGF5IG9yIG9yZGluYWxzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5zR3JlZ29yTUQgJiYgY29udGFpbnNPcmRpbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoXCJDYW4ndCBtaXggb3JkaW5hbCBkYXRlcyB3aXRoIG1vbnRoL2RheVwiKTtcbiAgICB9XG5cbiAgICBsZXQgbWl4ZWQ7XG4gICAgaWYgKHNldHRpbmdXZWVrU3R1ZmYpIHtcbiAgICAgIG1peGVkID0gd2Vla1RvR3JlZ29yaWFuKFxuICAgICAgICB7IC4uLmdyZWdvcmlhblRvV2Vlayh0aGlzLmMsIG1pbkRheXNJbkZpcnN0V2Vlaywgc3RhcnRPZldlZWspLCAuLi5ub3JtYWxpemVkIH0sXG4gICAgICAgIG1pbkRheXNJbkZpcnN0V2VlayxcbiAgICAgICAgc3RhcnRPZldlZWtcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghaXNVbmRlZmluZWQobm9ybWFsaXplZC5vcmRpbmFsKSkge1xuICAgICAgbWl4ZWQgPSBvcmRpbmFsVG9HcmVnb3JpYW4oeyAuLi5ncmVnb3JpYW5Ub09yZGluYWwodGhpcy5jKSwgLi4ubm9ybWFsaXplZCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWl4ZWQgPSB7IC4uLnRoaXMudG9PYmplY3QoKSwgLi4ubm9ybWFsaXplZCB9O1xuXG4gICAgICAvLyBpZiB3ZSBkaWRuJ3Qgc2V0IHRoZSBkYXkgYnV0IHdlIGVuZGVkIHVwIG9uIGFuIG92ZXJmbG93IGRhdGUsXG4gICAgICAvLyB1c2UgdGhlIGxhc3QgZGF5IG9mIHRoZSByaWdodCBtb250aFxuICAgICAgaWYgKGlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQuZGF5KSkge1xuICAgICAgICBtaXhlZC5kYXkgPSBNYXRoLm1pbihkYXlzSW5Nb250aChtaXhlZC55ZWFyLCBtaXhlZC5tb250aCksIG1peGVkLmRheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgW3RzLCBvXSA9IG9ialRvVFMobWl4ZWQsIHRoaXMubywgdGhpcy56b25lKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywgeyB0cywgbyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBwZXJpb2Qgb2YgdGltZSB0byB0aGlzIERhdGVUaW1lIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBEYXRlVGltZVxuICAgKlxuICAgKiBBZGRpbmcgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG9yIG1pbGxpc2Vjb25kcyBpbmNyZWFzZXMgdGhlIHRpbWVzdGFtcCBieSB0aGUgcmlnaHQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gQWRkaW5nIGRheXMsIG1vbnRocywgb3IgeWVhcnMgc2hpZnRzIHRoZSBjYWxlbmRhciwgYWNjb3VudGluZyBmb3IgRFNUcyBhbmQgbGVhcCB5ZWFycyBhbG9uZyB0aGUgd2F5LiBUaHVzLCBgZHQucGx1cyh7IGhvdXJzOiAyNCB9KWAgbWF5IHJlc3VsdCBpbiBhIGRpZmZlcmVudCB0aW1lIHRoYW4gYGR0LnBsdXMoeyBkYXlzOiAxIH0pYCBpZiB0aGVyZSdzIGEgRFNUIHNoaWZ0IGluIGJldHdlZW4uXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIGFkZC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KClcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cygxMjMpIC8vfj4gaW4gMTIzIG1pbGxpc2Vjb25kc1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgbWludXRlczogMTUgfSkgLy9+PiBpbiAxNSBtaW51dGVzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pIC8vfj4gdGhpcyB0aW1lIHRvbW9ycm93XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAtMSB9KSAvL34+IHRoaXMgdGltZSB5ZXN0ZXJkYXlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGhvdXJzOiAzLCBtaW51dGVzOiAxMyB9KSAvL34+IGluIDMgaHIsIDEzIG1pblxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMywgbWludXRlczogMTMgfSkpIC8vfj4gaW4gMyBociwgMTMgbWluXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgcGx1cyhkdXJhdGlvbikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywgYWRqdXN0VGltZSh0aGlzLCBkdXIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJ0cmFjdCBhIHBlcmlvZCBvZiB0aW1lIHRvIHRoaXMgRGF0ZVRpbWUgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lXG4gICAqIFNlZSB7QGxpbmsgRGF0ZVRpbWUjcGx1c31cbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBhbW91bnQgdG8gc3VidHJhY3QuIEVpdGhlciBhIEx1eG9uIER1cmF0aW9uLCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIHRoZSBvYmplY3QgYXJndW1lbnQgdG8gRHVyYXRpb24uZnJvbU9iamVjdCgpXG4gICBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIG1pbnVzKGR1cmF0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLm5lZ2F0ZSgpO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCBhZGp1c3RUaW1lKHRoaXMsIGR1cikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhpcyBEYXRlVGltZSB0byB0aGUgYmVnaW5uaW5nIG9mIGEgdW5pdCBvZiB0aW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIFRoZSB1bml0IHRvIGdvIHRvIHRoZSBiZWdpbm5pbmcgb2YuIENhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsIG9yICdtaWxsaXNlY29uZCcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnVzZUxvY2FsZVdlZWtzPWZhbHNlXSAtIElmIHRydWUsIHVzZSB3ZWVrcyBiYXNlZCBvbiB0aGUgbG9jYWxlLCBpLmUuIHVzZSB0aGUgbG9jYWxlLWRlcGVuZGVudCBzdGFydCBvZiB0aGUgd2Vla1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5zdGFydE9mKCdtb250aCcpLnRvSVNPRGF0ZSgpOyAvLz0+ICcyMDE0LTAzLTAxJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5zdGFydE9mKCd5ZWFyJykudG9JU09EYXRlKCk7IC8vPT4gJzIwMTQtMDEtMDEnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLnN0YXJ0T2YoJ3dlZWsnKS50b0lTT0RhdGUoKTsgLy89PiAnMjAxNC0wMy0wMycsIHdlZWtzIGFsd2F5cyBzdGFydCBvbiBNb25kYXlzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5zdGFydE9mKCdkYXknKS50b0lTT1RpbWUoKTsgLy89PiAnMDA6MDAuMDAwLTA1OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzLCA1LCAzMCkuc3RhcnRPZignaG91cicpLnRvSVNPVGltZSgpOyAvLz0+ICcwNTowMDowMC4wMDAtMDU6MDAnXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhcnRPZih1bml0LCB7IHVzZUxvY2FsZVdlZWtzID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuXG4gICAgY29uc3QgbyA9IHt9LFxuICAgICAgbm9ybWFsaXplZFVuaXQgPSBEdXJhdGlvbi5ub3JtYWxpemVVbml0KHVuaXQpO1xuICAgIHN3aXRjaCAobm9ybWFsaXplZFVuaXQpIHtcbiAgICAgIGNhc2UgXCJ5ZWFyc1wiOlxuICAgICAgICBvLm1vbnRoID0gMTtcbiAgICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGNhc2UgXCJxdWFydGVyc1wiOlxuICAgICAgY2FzZSBcIm1vbnRoc1wiOlxuICAgICAgICBvLmRheSA9IDE7XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlIFwid2Vla3NcIjpcbiAgICAgIGNhc2UgXCJkYXlzXCI6XG4gICAgICAgIG8uaG91ciA9IDA7XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlIFwiaG91cnNcIjpcbiAgICAgICAgby5taW51dGUgPSAwO1xuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgY2FzZSBcIm1pbnV0ZXNcIjpcbiAgICAgICAgby5zZWNvbmQgPSAwO1xuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgY2FzZSBcInNlY29uZHNcIjpcbiAgICAgICAgby5taWxsaXNlY29uZCA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm1pbGxpc2Vjb25kc1wiOlxuICAgICAgICBicmVhaztcbiAgICAgIC8vIG5vIGRlZmF1bHQsIGludmFsaWQgdW5pdHMgdGhyb3cgaW4gbm9ybWFsaXplVW5pdCgpXG4gICAgfVxuXG4gICAgaWYgKG5vcm1hbGl6ZWRVbml0ID09PSBcIndlZWtzXCIpIHtcbiAgICAgIGlmICh1c2VMb2NhbGVXZWVrcykge1xuICAgICAgICBjb25zdCBzdGFydE9mV2VlayA9IHRoaXMubG9jLmdldFN0YXJ0T2ZXZWVrKCk7XG4gICAgICAgIGNvbnN0IHsgd2Vla2RheSB9ID0gdGhpcztcbiAgICAgICAgaWYgKHdlZWtkYXkgPCBzdGFydE9mV2Vlaykge1xuICAgICAgICAgIG8ud2Vla051bWJlciA9IHRoaXMud2Vla051bWJlciAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgby53ZWVrZGF5ID0gc3RhcnRPZldlZWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvLndlZWtkYXkgPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub3JtYWxpemVkVW5pdCA9PT0gXCJxdWFydGVyc1wiKSB7XG4gICAgICBjb25zdCBxID0gTWF0aC5jZWlsKHRoaXMubW9udGggLyAzKTtcbiAgICAgIG8ubW9udGggPSAocSAtIDEpICogMyArIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2V0KG8pO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhpcyBEYXRlVGltZSB0byB0aGUgZW5kIChtZWFuaW5nIHRoZSBsYXN0IG1pbGxpc2Vjb25kKSBvZiBhIHVuaXQgb2YgdGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIFRoZSB1bml0IHRvIGdvIHRvIHRoZSBlbmQgb2YuIENhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsIG9yICdtaWxsaXNlY29uZCcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnVzZUxvY2FsZVdlZWtzPWZhbHNlXSAtIElmIHRydWUsIHVzZSB3ZWVrcyBiYXNlZCBvbiB0aGUgbG9jYWxlLCBpLmUuIHVzZSB0aGUgbG9jYWxlLWRlcGVuZGVudCBzdGFydCBvZiB0aGUgd2Vla1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5lbmRPZignbW9udGgnKS50b0lTTygpOyAvLz0+ICcyMDE0LTAzLTMxVDIzOjU5OjU5Ljk5OS0wNTowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuZW5kT2YoJ3llYXInKS50b0lTTygpOyAvLz0+ICcyMDE0LTEyLTMxVDIzOjU5OjU5Ljk5OS0wNTowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuZW5kT2YoJ3dlZWsnKS50b0lTTygpOyAvLyA9PiAnMjAxNC0wMy0wOVQyMzo1OTo1OS45OTktMDU6MDAnLCB3ZWVrcyBzdGFydCBvbiBNb25kYXlzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5lbmRPZignZGF5JykudG9JU08oKTsgLy89PiAnMjAxNC0wMy0wM1QyMzo1OTo1OS45OTktMDU6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5lbmRPZignaG91cicpLnRvSVNPKCk7IC8vPT4gJzIwMTQtMDMtMDNUMDU6NTk6NTkuOTk5LTA1OjAwJ1xuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIGVuZE9mKHVuaXQsIG9wdHMpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkXG4gICAgICA/IHRoaXMucGx1cyh7IFt1bml0XTogMSB9KVxuICAgICAgICAgIC5zdGFydE9mKHVuaXQsIG9wdHMpXG4gICAgICAgICAgLm1pbnVzKDEpXG4gICAgICA6IHRoaXM7XG4gIH1cblxuICAvLyBPVVRQVVRcblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb3JtYXQgc3RyaW5nLlxuICAgKiAqKllvdSBtYXkgbm90IHdhbnQgdGhpcy4qKiBTZWUge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3IgYSBtb3JlIGZsZXhpYmxlIGZvcm1hdHRpbmcgdG9vbC4gRm9yIGEgdGFibGUgb2YgdG9rZW5zIGFuZCB0aGVpciBpbnRlcnByZXRhdGlvbnMsIHNlZSBbaGVyZV0oaHR0cHM6Ly9tb21lbnQuZ2l0aHViLmlvL2x1eG9uLyMvZm9ybWF0dGluZz9pZD10YWJsZS1vZi10b2tlbnMpLlxuICAgKiBEZWZhdWx0cyB0byBlbi1VUyBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkLCByZWdhcmRsZXNzIG9mIHRoZSBzeXN0ZW0ncyBsb2NhbGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbXQgLSB0aGUgZm9ybWF0IHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdHMgdG8gb3ZlcnJpZGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbiB0aGlzIERhdGVUaW1lXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvRm9ybWF0KCd5eXl5IExMTCBkZCcpIC8vPT4gJzIwMTcgQXByIDIyJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoJ2ZyJykudG9Gb3JtYXQoJ3l5eXkgTExMIGRkJykgLy89PiAnMjAxNyBhdnIuIDIyJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0Zvcm1hdCgneXl5eSBMTEwgZGQnLCB7IGxvY2FsZTogXCJmclwiIH0pIC8vPT4gJzIwMTcgYXZyLiAyMidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Gb3JtYXQoXCJISCAnaG91cnMgYW5kJyBtbSAnbWludXRlcydcIikgLy89PiAnMjAgaG91cnMgYW5kIDU1IG1pbnV0ZXMnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvRm9ybWF0KGZtdCwgb3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFxuICAgICAgPyBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLnJlZGVmYXVsdFRvRU4ob3B0cykpLmZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyh0aGlzLCBmbXQpXG4gICAgICA6IElOVkFMSUQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxvY2FsaXplZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoaXMgZGF0ZS4gQWNjZXB0cyB0aGUgc2FtZSBvcHRpb25zIGFzIHRoZSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yIGFuZCBhbnkgcHJlc2V0cyBkZWZpbmVkIGJ5IEx1eG9uLCBzdWNoIGFzIGBEYXRlVGltZS5EQVRFX0ZVTExgIG9yIGBEYXRlVGltZS5USU1FX1NJTVBMRWAuXG4gICAqIFRoZSBleGFjdCBiZWhhdmlvciBvZiB0aGlzIG1ldGhvZCBpcyBicm93c2VyLXNwZWNpZmljLCBidXQgaW4gZ2VuZXJhbCBpdCB3aWxsIHJldHVybiBhbiBhcHByb3ByaWF0ZSByZXByZXNlbnRhdGlvblxuICAgKiBvZiB0aGUgRGF0ZVRpbWUgaW4gdGhlIGFzc2lnbmVkIGxvY2FsZS5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXRcbiAgICogQHBhcmFtIGZvcm1hdE9wdHMge09iamVjdH0gLSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yIG9wdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdHMgdG8gb3ZlcnJpZGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbiB0aGlzIERhdGVUaW1lXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKCk7IC8vPT4gNC8yMC8yMDE3XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnNldExvY2FsZSgnZW4tZ2InKS50b0xvY2FsZVN0cmluZygpOyAvLz0+ICcyMC8wNC8yMDE3J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5EQVRFX0ZVTEwpOyAvLz0+ICdBcHJpbCAyMCwgMjAxNydcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURV9GVUxMLCB7IGxvY2FsZTogJ2ZyJyB9KTsgLy89PiAnMjggYW/Du3QgMjAyMidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuVElNRV9TSU1QTEUpOyAvLz0+ICcxMTozMiBBTSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURVRJTUVfU0hPUlQpOyAvLz0+ICc0LzIwLzIwMTcsIDExOjMyIEFNJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyh7IHdlZWtkYXk6ICdsb25nJywgbW9udGg6ICdsb25nJywgZGF5OiAnMi1kaWdpdCcgfSk7IC8vPT4gJ1RodXJzZGF5LCBBcHJpbCAyMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoeyB3ZWVrZGF5OiAnc2hvcnQnLCBtb250aDogJ3Nob3J0JywgZGF5OiAnMi1kaWdpdCcsIGhvdXI6ICcyLWRpZ2l0JywgbWludXRlOiAnMi1kaWdpdCcgfSk7IC8vPT4gJ1RodSwgQXByIDIwLCAxMToyNyBBTSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoeyBob3VyOiAnMi1kaWdpdCcsIG1pbnV0ZTogJzItZGlnaXQnLCBob3VyQ3ljbGU6ICdoMjMnIH0pOyAvLz0+ICcxMTozMidcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9Mb2NhbGVTdHJpbmcoZm9ybWF0T3B0cyA9IEZvcm1hdHMuREFURV9TSE9SVCwgb3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFxuICAgICAgPyBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLmNsb25lKG9wdHMpLCBmb3JtYXRPcHRzKS5mb3JtYXREYXRlVGltZSh0aGlzKVxuICAgICAgOiBJTlZBTElEO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZm9ybWF0IFwicGFydHNcIiwgbWVhbmluZyBpbmRpdmlkdWFsIHRva2VucyBhbG9uZyB3aXRoIG1ldGFkYXRhLiBUaGlzIGlzIGFsbG93cyBjYWxsZXJzIHRvIHBvc3QtcHJvY2VzcyBpbmRpdmlkdWFsIHNlY3Rpb25zIG9mIHRoZSBmb3JtYXR0ZWQgb3V0cHV0LlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlVGltZUZvcm1hdC9mb3JtYXRUb1BhcnRzXG4gICAqIEBwYXJhbSBvcHRzIHtPYmplY3R9IC0gSW50bC5EYXRlVGltZUZvcm1hdCBjb25zdHJ1Y3RvciBvcHRpb25zLCBzYW1lIGFzIGB0b0xvY2FsZVN0cmluZ2AuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlUGFydHMoKTsgLy89PiBbXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAnZGF5JywgdmFsdWU6ICcyNScgfSxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICdsaXRlcmFsJywgdmFsdWU6ICcvJyB9LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ21vbnRoJywgdmFsdWU6ICcwNScgfSxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICdsaXRlcmFsJywgdmFsdWU6ICcvJyB9LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ3llYXInLCB2YWx1ZTogJzE5ODInIH1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gXVxuICAgKi9cbiAgdG9Mb2NhbGVQYXJ0cyhvcHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkXG4gICAgICA/IEZvcm1hdHRlci5jcmVhdGUodGhpcy5sb2MuY2xvbmUob3B0cyksIG9wdHMpLmZvcm1hdERhdGVUaW1lUGFydHModGhpcylcbiAgICAgIDogW107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NNaWxsaXNlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZm9ybWF0IGlmIHRoZXkncmUgMFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN1cHByZXNzU2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIHNlY29uZHMgZnJvbSB0aGUgZm9ybWF0IGlmIHRoZXkncmUgMFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVPZmZzZXQ9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBvZmZzZXQsIHN1Y2ggYXMgJ1onIG9yICctMDQ6MDAnXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZXh0ZW5kZWRab25lPWZhbHNlXSAtIGFkZCB0aGUgdGltZSB6b25lIGZvcm1hdCBleHRlbnNpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmZvcm1hdD0nZXh0ZW5kZWQnXSAtIGNob29zZSBiZXR3ZWVuIHRoZSBiYXNpYyBhbmQgZXh0ZW5kZWQgZm9ybWF0XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgzLCA1LCAyNSkudG9JU08oKSAvLz0+ICcxOTgyLTA1LTI1VDAwOjAwOjAwLjAwMFonXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKCkgLy89PiAnMjAxNy0wNC0yMlQyMDo0NzowNS4zMzUtMDQ6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgLy89PiAnMjAxNy0wNC0yMlQyMDo0NzowNS4zMzUnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzIwMTcwNDIyVDIwNDcwNS4zMzUtMDQwMCdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU08oe1xuICAgIGZvcm1hdCA9IFwiZXh0ZW5kZWRcIixcbiAgICBzdXBwcmVzc1NlY29uZHMgPSBmYWxzZSxcbiAgICBzdXBwcmVzc01pbGxpc2Vjb25kcyA9IGZhbHNlLFxuICAgIGluY2x1ZGVPZmZzZXQgPSB0cnVlLFxuICAgIGV4dGVuZGVkWm9uZSA9IGZhbHNlLFxuICB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZXh0ID0gZm9ybWF0ID09PSBcImV4dGVuZGVkXCI7XG5cbiAgICBsZXQgYyA9IHRvSVNPRGF0ZSh0aGlzLCBleHQpO1xuICAgIGMgKz0gXCJUXCI7XG4gICAgYyArPSB0b0lTT1RpbWUodGhpcywgZXh0LCBzdXBwcmVzc1NlY29uZHMsIHN1cHByZXNzTWlsbGlzZWNvbmRzLCBpbmNsdWRlT2Zmc2V0LCBleHRlbmRlZFpvbmUpO1xuICAgIHJldHVybiBjO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lJ3MgZGF0ZSBjb21wb25lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MiwgNSwgMjUpLnRvSVNPRGF0ZSgpIC8vPT4gJzE5ODItMDUtMjUnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgyLCA1LCAyNSkudG9JU09EYXRlKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzE5ODIwNTI1J1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0lTT0RhdGUoeyBmb3JtYXQgPSBcImV4dGVuZGVkXCIgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0b0lTT0RhdGUodGhpcywgZm9ybWF0ID09PSBcImV4dGVuZGVkXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lJ3Mgd2VlayBkYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgyLCA1LCAyNSkudG9JU09XZWVrRGF0ZSgpIC8vPT4gJzE5ODItVzIxLTInXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPV2Vla0RhdGUoKSB7XG4gICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLCBcImtra2stJ1cnV1ctY1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSdzIHRpbWUgY29tcG9uZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN1cHByZXNzTWlsbGlzZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDBcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc1NlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDBcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0PXRydWVdIC0gaW5jbHVkZSB0aGUgb2Zmc2V0LCBzdWNoIGFzICdaJyBvciAnLTA0OjAwJ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmV4dGVuZGVkWm9uZT10cnVlXSAtIGFkZCB0aGUgdGltZSB6b25lIGZvcm1hdCBleHRlbnNpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlUHJlZml4PWZhbHNlXSAtIGluY2x1ZGUgdGhlIGBUYCBwcmVmaXhcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmZvcm1hdD0nZXh0ZW5kZWQnXSAtIGNob29zZSBiZXR3ZWVuIHRoZSBiYXNpYyBhbmQgZXh0ZW5kZWQgZm9ybWF0XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnNldCh7IGhvdXI6IDcsIG1pbnV0ZTogMzQgfSkudG9JU09UaW1lKCkgLy89PiAnMDc6MzQ6MTkuMzYxWidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKCkuc2V0KHsgaG91cjogNywgbWludXRlOiAzNCwgc2Vjb25kczogMCwgbWlsbGlzZWNvbmRzOiAwIH0pLnRvSVNPVGltZSh7IHN1cHByZXNzU2Vjb25kczogdHJ1ZSB9KSAvLz0+ICcwNzozNFonXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnNldCh7IGhvdXI6IDcsIG1pbnV0ZTogMzQgfSkudG9JU09UaW1lKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzA3MzQxOS4zNjFaJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5zZXQoeyBob3VyOiA3LCBtaW51dGU6IDM0IH0pLnRvSVNPVGltZSh7IGluY2x1ZGVQcmVmaXg6IHRydWUgfSkgLy89PiAnVDA3OjM0OjE5LjM2MVonXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPVGltZSh7XG4gICAgc3VwcHJlc3NNaWxsaXNlY29uZHMgPSBmYWxzZSxcbiAgICBzdXBwcmVzc1NlY29uZHMgPSBmYWxzZSxcbiAgICBpbmNsdWRlT2Zmc2V0ID0gdHJ1ZSxcbiAgICBpbmNsdWRlUHJlZml4ID0gZmFsc2UsXG4gICAgZXh0ZW5kZWRab25lID0gZmFsc2UsXG4gICAgZm9ybWF0ID0gXCJleHRlbmRlZFwiLFxuICB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IGMgPSBpbmNsdWRlUHJlZml4ID8gXCJUXCIgOiBcIlwiO1xuICAgIHJldHVybiAoXG4gICAgICBjICtcbiAgICAgIHRvSVNPVGltZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgZm9ybWF0ID09PSBcImV4dGVuZGVkXCIsXG4gICAgICAgIHN1cHByZXNzU2Vjb25kcyxcbiAgICAgICAgc3VwcHJlc3NNaWxsaXNlY29uZHMsXG4gICAgICAgIGluY2x1ZGVPZmZzZXQsXG4gICAgICAgIGV4dGVuZGVkWm9uZVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBSRkMgMjgyMi1jb21wYXRpYmxlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE0LCA3LCAxMykudG9SRkMyODIyKCkgLy89PiAnU3VuLCAxMyBKdWwgMjAxNCAwMDowMDowMCArMDAwMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvUkZDMjgyMigpIC8vPT4gJ1N1biwgMTMgSnVsIDIwMTQgMDA6MDA6MDAgLTA0MDAnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvUkZDMjgyMigpIHtcbiAgICByZXR1cm4gdG9UZWNoRm9ybWF0KHRoaXMsIFwiRUVFLCBkZCBMTEwgeXl5eSBISDptbTpzcyBaWlpcIiwgZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIEhUVFAgaGVhZGVycy4gVGhlIG91dHB1dCBpcyBhbHdheXMgZXhwcmVzc2VkIGluIEdNVC5cbiAgICogU3BlY2lmaWNhbGx5LCB0aGUgc3RyaW5nIGNvbmZvcm1zIHRvIFJGQyAxMTIzLlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzMuaHRtbCNzZWMzLjMuMVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMpLnRvSFRUUCgpIC8vPT4gJ1N1biwgMTMgSnVsIDIwMTQgMDA6MDA6MDAgR01UJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMsIDE5KS50b0hUVFAoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDE5OjAwOjAwIEdNVCdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9IVFRQKCkge1xuICAgIHJldHVybiB0b1RlY2hGb3JtYXQodGhpcy50b1VUQygpLCBcIkVFRSwgZGQgTExMIHl5eXkgSEg6bW06c3MgJ0dNVCdcIik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gU1FMIERhdGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b1NRTERhdGUoKSAvLz0+ICcyMDE0LTA3LTEzJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b1NRTERhdGUoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdG9JU09EYXRlKHRoaXMsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIFNRTCBUaW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVab25lPWZhbHNlXSAtIGluY2x1ZGUgdGhlIHpvbmUsIHN1Y2ggYXMgJ0FtZXJpY2EvTmV3X1lvcmsnLiBPdmVycmlkZXMgaW5jbHVkZU9mZnNldC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0PXRydWVdIC0gaW5jbHVkZSB0aGUgb2Zmc2V0LCBzdWNoIGFzICdaJyBvciAnLTA0OjAwJ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVPZmZzZXRTcGFjZT10cnVlXSAtIGluY2x1ZGUgdGhlIHNwYWNlIGJldHdlZW4gdGhlIHRpbWUgYW5kIHRoZSBvZmZzZXQsIHN1Y2ggYXMgJzA1OjE1OjE2LjM0NSAtMDQ6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnRvU1FMKCkgLy89PiAnMDU6MTU6MTYuMzQ1J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b1NRTCgpIC8vPT4gJzA1OjE1OjE2LjM0NSAtMDQ6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvU1FMKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgLy89PiAnMDU6MTU6MTYuMzQ1J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b1NRTCh7IGluY2x1ZGVab25lOiBmYWxzZSB9KSAvLz0+ICcwNToxNToxNi4zNDUgQW1lcmljYS9OZXdfWW9yaydcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TUUxUaW1lKHsgaW5jbHVkZU9mZnNldCA9IHRydWUsIGluY2x1ZGVab25lID0gZmFsc2UsIGluY2x1ZGVPZmZzZXRTcGFjZSA9IHRydWUgfSA9IHt9KSB7XG4gICAgbGV0IGZtdCA9IFwiSEg6bW06c3MuU1NTXCI7XG5cbiAgICBpZiAoaW5jbHVkZVpvbmUgfHwgaW5jbHVkZU9mZnNldCkge1xuICAgICAgaWYgKGluY2x1ZGVPZmZzZXRTcGFjZSkge1xuICAgICAgICBmbXQgKz0gXCIgXCI7XG4gICAgICB9XG4gICAgICBpZiAoaW5jbHVkZVpvbmUpIHtcbiAgICAgICAgZm10ICs9IFwielwiO1xuICAgICAgfSBlbHNlIGlmIChpbmNsdWRlT2Zmc2V0KSB7XG4gICAgICAgIGZtdCArPSBcIlpaXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLCBmbXQsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIFNRTCBEYXRlVGltZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlWm9uZT1mYWxzZV0gLSBpbmNsdWRlIHRoZSB6b25lLCBzdWNoIGFzICdBbWVyaWNhL05ld19Zb3JrJy4gT3ZlcnJpZGVzIGluY2x1ZGVPZmZzZXQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCdcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0U3BhY2U9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSB0aW1lIGFuZCB0aGUgb2Zmc2V0LCBzdWNoIGFzICcwNToxNToxNi4zNDUgLTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMpLnRvU1FMKCkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAgWidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvU1FMKCkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAgLTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCA3LCAxMykudG9TUUwoeyBpbmNsdWRlT2Zmc2V0OiBmYWxzZSB9KSAvLz0+ICcyMDE0LTA3LTEzIDAwOjAwOjAwLjAwMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvU1FMKHsgaW5jbHVkZVpvbmU6IHRydWUgfSkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAgQW1lcmljYS9OZXdfWW9yaydcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TUUwob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBgJHt0aGlzLnRvU1FMRGF0ZSgpfSAke3RoaXMudG9TUUxUaW1lKG9wdHMpfWA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciBkZWJ1Z2dpbmdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudG9JU08oKSA6IElOVkFMSUQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciB0aGUgUkVQTC5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgW1N5bWJvbC5mb3IoXCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbVwiKV0oKSB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIGBEYXRlVGltZSB7IHRzOiAke3RoaXMudG9JU08oKX0sIHpvbmU6ICR7dGhpcy56b25lLm5hbWV9LCBsb2NhbGU6ICR7dGhpcy5sb2NhbGV9IH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYERhdGVUaW1lIHsgSW52YWxpZCwgcmVhc29uOiAke3RoaXMuaW52YWxpZFJlYXNvbn0gfWA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVwb2NoIG1pbGxpc2Vjb25kcyBvZiB0aGlzIERhdGVUaW1lLiBBbGlhcyBvZiB7QGxpbmsgRGF0ZVRpbWUjdG9NaWxsaXN9XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHZhbHVlT2YoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9NaWxsaXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBlcG9jaCBtaWxsaXNlY29uZHMgb2YgdGhpcyBEYXRlVGltZS5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdG9NaWxsaXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXBvY2ggc2Vjb25kcyBvZiB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB0b1NlY29uZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgLyAxMDAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVwb2NoIHNlY29uZHMgKGFzIGEgd2hvbGUgbnVtYmVyKSBvZiB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB0b1VuaXhJbnRlZ2VyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBNYXRoLmZsb29yKHRoaXMudHMgLyAxMDAwKSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBKU09OLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9JU08oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgQlNPTiBzZXJpYWxpemFibGUgZXF1aXZhbGVudCB0byB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtEYXRlfVxuICAgKi9cbiAgdG9CU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvSlNEYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGggdGhpcyBEYXRlVGltZSdzIHllYXIsIG1vbnRoLCBkYXksIGFuZCBzbyBvbi5cbiAgICogQHBhcmFtIG9wdHMgLSBvcHRpb25zIGZvciBnZW5lcmF0aW5nIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlQ29uZmlnPWZhbHNlXSAtIGluY2x1ZGUgY29uZmlndXJhdGlvbiBhdHRyaWJ1dGVzIGluIHRoZSBvdXRwdXRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9PYmplY3QoKSAvLz0+IHsgeWVhcjogMjAxNywgbW9udGg6IDQsIGRheTogMjIsIGhvdXI6IDIwLCBtaW51dGU6IDQ5LCBzZWNvbmQ6IDQyLCBtaWxsaXNlY29uZDogMjY4IH1cbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgdG9PYmplY3Qob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB7fTtcblxuICAgIGNvbnN0IGJhc2UgPSB7IC4uLnRoaXMuYyB9O1xuXG4gICAgaWYgKG9wdHMuaW5jbHVkZUNvbmZpZykge1xuICAgICAgYmFzZS5vdXRwdXRDYWxlbmRhciA9IHRoaXMub3V0cHV0Q2FsZW5kYXI7XG4gICAgICBiYXNlLm51bWJlcmluZ1N5c3RlbSA9IHRoaXMubG9jLm51bWJlcmluZ1N5c3RlbTtcbiAgICAgIGJhc2UubG9jYWxlID0gdGhpcy5sb2MubG9jYWxlO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgSmF2YVNjcmlwdCBEYXRlIGVxdWl2YWxlbnQgdG8gdGhpcyBEYXRlVGltZS5cbiAgICogQHJldHVybiB7RGF0ZX1cbiAgICovXG4gIHRvSlNEYXRlKCkge1xuICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLmlzVmFsaWQgPyB0aGlzLnRzIDogTmFOKTtcbiAgfVxuXG4gIC8vIENPTVBBUkVcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIERhdGVUaW1lcyBhcyBhIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBvdGhlckRhdGVUaW1lIC0gdGhlIERhdGVUaW1lIHRvIGNvbXBhcmUgdGhpcyBvbmUgdG9cbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1bml0PVsnbWlsbGlzZWNvbmRzJ11dIC0gdGhlIHVuaXQgb3IgYXJyYXkgb2YgdW5pdHMgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIGluY2x1ZGUgaW4gdGhlIGR1cmF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIHRoZSBEdXJhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQGV4YW1wbGVcbiAgICogdmFyIGkxID0gRGF0ZVRpbWUuZnJvbUlTTygnMTk4Mi0wNS0yNVQwOTo0NScpLFxuICAgKiAgICAgaTIgPSBEYXRlVGltZS5mcm9tSVNPKCcxOTgzLTEwLTE0VDEwOjMwJyk7XG4gICAqIGkyLmRpZmYoaTEpLnRvT2JqZWN0KCkgLy89PiB7IG1pbGxpc2Vjb25kczogNDM4MDc1MDAwMDAgfVxuICAgKiBpMi5kaWZmKGkxLCAnaG91cnMnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTIxNjguNzUgfVxuICAgKiBpMi5kaWZmKGkxLCBbJ21vbnRocycsICdkYXlzJ10pLnRvT2JqZWN0KCkgLy89PiB7IG1vbnRoczogMTYsIGRheXM6IDE5LjAzMTI1IH1cbiAgICogaTIuZGlmZihpMSwgWydtb250aHMnLCAnZGF5cycsICdob3VycyddKS50b09iamVjdCgpIC8vPT4geyBtb250aHM6IDE2LCBkYXlzOiAxOSwgaG91cnM6IDAuNzUgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIGRpZmYob3RoZXJEYXRlVGltZSwgdW5pdCA9IFwibWlsbGlzZWNvbmRzXCIsIG9wdHMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFvdGhlckRhdGVUaW1lLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKFwiY3JlYXRlZCBieSBkaWZmaW5nIGFuIGludmFsaWQgRGF0ZVRpbWVcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyT3B0cyA9IHsgbG9jYWxlOiB0aGlzLmxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtOiB0aGlzLm51bWJlcmluZ1N5c3RlbSwgLi4ub3B0cyB9O1xuXG4gICAgY29uc3QgdW5pdHMgPSBtYXliZUFycmF5KHVuaXQpLm1hcChEdXJhdGlvbi5ub3JtYWxpemVVbml0KSxcbiAgICAgIG90aGVySXNMYXRlciA9IG90aGVyRGF0ZVRpbWUudmFsdWVPZigpID4gdGhpcy52YWx1ZU9mKCksXG4gICAgICBlYXJsaWVyID0gb3RoZXJJc0xhdGVyID8gdGhpcyA6IG90aGVyRGF0ZVRpbWUsXG4gICAgICBsYXRlciA9IG90aGVySXNMYXRlciA/IG90aGVyRGF0ZVRpbWUgOiB0aGlzLFxuICAgICAgZGlmZmVkID0gZGlmZihlYXJsaWVyLCBsYXRlciwgdW5pdHMsIGR1ck9wdHMpO1xuXG4gICAgcmV0dXJuIG90aGVySXNMYXRlciA/IGRpZmZlZC5uZWdhdGUoKSA6IGRpZmZlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIERhdGVUaW1lIGFuZCByaWdodCBub3cuXG4gICAqIFNlZSB7QGxpbmsgRGF0ZVRpbWUjZGlmZn1cbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1bml0PVsnbWlsbGlzZWNvbmRzJ11dIC0gdGhlIHVuaXQgb3IgdW5pdHMgdW5pdHMgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIGluY2x1ZGUgaW4gdGhlIGR1cmF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgdGhlIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIGRpZmZOb3codW5pdCA9IFwibWlsbGlzZWNvbmRzXCIsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmRpZmYoRGF0ZVRpbWUubm93KCksIHVuaXQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBJbnRlcnZhbCBzcGFubmluZyBiZXR3ZWVuIHRoaXMgRGF0ZVRpbWUgYW5kIGFub3RoZXIgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtEYXRlVGltZX0gb3RoZXJEYXRlVGltZSAtIHRoZSBvdGhlciBlbmQgcG9pbnQgb2YgdGhlIEludGVydmFsXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgdW50aWwob3RoZXJEYXRlVGltZSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHRoaXMsIG90aGVyRGF0ZVRpbWUpIDogdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIERhdGVUaW1lIGlzIGluIHRoZSBzYW1lIHVuaXQgb2YgdGltZSBhcyBhbm90aGVyIERhdGVUaW1lLlxuICAgKiBIaWdoZXItb3JkZXIgdW5pdHMgbXVzdCBhbHNvIGJlIGlkZW50aWNhbCBmb3IgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gYHRydWVgLlxuICAgKiBOb3RlIHRoYXQgdGltZSB6b25lcyBhcmUgKippZ25vcmVkKiogaW4gdGhpcyBjb21wYXJpc29uLCB3aGljaCBjb21wYXJlcyB0aGUgKipsb2NhbCoqIGNhbGVuZGFyIHRpbWUuIFVzZSB7QGxpbmsgRGF0ZVRpbWUjc2V0Wm9uZX0gdG8gY29udmVydCBvbmUgb2YgdGhlIGRhdGVzIGlmIG5lZWRlZC5cbiAgICogQHBhcmFtIHtEYXRlVGltZX0gb3RoZXJEYXRlVGltZSAtIHRoZSBvdGhlciBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY2hlY2sgc2FtZW5lc3Mgb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMudXNlTG9jYWxlV2Vla3M9ZmFsc2VdIC0gSWYgdHJ1ZSwgdXNlIHdlZWtzIGJhc2VkIG9uIHRoZSBsb2NhbGUsIGkuZS4gdXNlIHRoZSBsb2NhbGUtZGVwZW5kZW50IHN0YXJ0IG9mIHRoZSB3ZWVrOyBvbmx5IHRoZSBsb2NhbGUgb2YgdGhpcyBEYXRlVGltZSBpcyB1c2VkXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLmhhc1NhbWUob3RoZXJEVCwgJ2RheScpOyAvL34+IHRydWUgaWYgb3RoZXJEVCBpcyBpbiB0aGUgc2FtZSBjdXJyZW50IGNhbGVuZGFyIGRheVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgaGFzU2FtZShvdGhlckRhdGVUaW1lLCB1bml0LCBvcHRzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IGlucHV0TXMgPSBvdGhlckRhdGVUaW1lLnZhbHVlT2YoKTtcbiAgICBjb25zdCBhZGp1c3RlZFRvWm9uZSA9IHRoaXMuc2V0Wm9uZShvdGhlckRhdGVUaW1lLnpvbmUsIHsga2VlcExvY2FsVGltZTogdHJ1ZSB9KTtcbiAgICByZXR1cm4gKFxuICAgICAgYWRqdXN0ZWRUb1pvbmUuc3RhcnRPZih1bml0LCBvcHRzKSA8PSBpbnB1dE1zICYmIGlucHV0TXMgPD0gYWRqdXN0ZWRUb1pvbmUuZW5kT2YodW5pdCwgb3B0cylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEVxdWFsaXR5IGNoZWNrXG4gICAqIFR3byBEYXRlVGltZXMgYXJlIGVxdWFsIGlmIGFuZCBvbmx5IGlmIHRoZXkgcmVwcmVzZW50IHRoZSBzYW1lIG1pbGxpc2Vjb25kLCBoYXZlIHRoZSBzYW1lIHpvbmUgYW5kIGxvY2F0aW9uLCBhbmQgYXJlIGJvdGggdmFsaWQuXG4gICAqIFRvIGNvbXBhcmUganVzdCB0aGUgbWlsbGlzZWNvbmQgdmFsdWVzLCB1c2UgYCtkdDEgPT09ICtkdDJgLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBvdGhlciAtIHRoZSBvdGhlciBEYXRlVGltZVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZXF1YWxzKG90aGVyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNWYWxpZCAmJlxuICAgICAgb3RoZXIuaXNWYWxpZCAmJlxuICAgICAgdGhpcy52YWx1ZU9mKCkgPT09IG90aGVyLnZhbHVlT2YoKSAmJlxuICAgICAgdGhpcy56b25lLmVxdWFscyhvdGhlci56b25lKSAmJlxuICAgICAgdGhpcy5sb2MuZXF1YWxzKG90aGVyLmxvYylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB0aGlzIHRpbWUgcmVsYXRpdmUgdG8gbm93LCBzdWNoIGFzIFwiaW4gdHdvIGRheXNcIi4gQ2FuIG9ubHkgaW50ZXJuYXRpb25hbGl6ZSBpZiB5b3VyXG4gICAqIHBsYXRmb3JtIHN1cHBvcnRzIEludGwuUmVsYXRpdmVUaW1lRm9ybWF0LiBSb3VuZHMgZG93biBieSBkZWZhdWx0LlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIG91dHB1dFxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBbb3B0aW9ucy5iYXNlPURhdGVUaW1lLm5vdygpXSAtIHRoZSBEYXRlVGltZSB0byB1c2UgYXMgdGhlIGJhc2lzIHRvIHdoaWNoIHRoaXMgdGltZSBpcyBjb21wYXJlZC4gRGVmYXVsdHMgdG8gbm93LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc3R5bGU9XCJsb25nXCJdIC0gdGhlIHN0eWxlIG9mIHVuaXRzLCBtdXN0IGJlIFwibG9uZ1wiLCBcInNob3J0XCIsIG9yIFwibmFycm93XCJcbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IG9wdGlvbnMudW5pdCAtIHVzZSBhIHNwZWNpZmljIHVuaXQgb3IgYXJyYXkgb2YgdW5pdHM7IGlmIG9taXR0ZWQsIG9yIGFuIGFycmF5LCB0aGUgbWV0aG9kIHdpbGwgcGljayB0aGUgYmVzdCB1bml0LiBVc2UgYW4gYXJyYXkgb3Igb25lIG9mIFwieWVhcnNcIiwgXCJxdWFydGVyc1wiLCBcIm1vbnRoc1wiLCBcIndlZWtzXCIsIFwiZGF5c1wiLCBcImhvdXJzXCIsIFwibWludXRlc1wiLCBvciBcInNlY29uZHNcIlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnJvdW5kPXRydWVdIC0gd2hldGhlciB0byByb3VuZCB0aGUgbnVtYmVycyBpbiB0aGUgb3V0cHV0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucGFkZGluZz0wXSAtIHBhZGRpbmcgaW4gbWlsbGlzZWNvbmRzLiBUaGlzIGFsbG93cyB5b3UgdG8gcm91bmQgdXAgdGhlIHJlc3VsdCBpZiBpdCBmaXRzIGluc2lkZSB0aGUgdGhyZXNob2xkLiBEb24ndCB1c2UgaW4gY29tYmluYXRpb24gd2l0aCB7cm91bmQ6IGZhbHNlfSBiZWNhdXNlIHRoZSBkZWNpbWFsIG91dHB1dCB3aWxsIGluY2x1ZGUgdGhlIHBhZGRpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmxvY2FsZSAtIG92ZXJyaWRlIHRoZSBsb2NhbGUgb2YgdGhpcyBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW0gLSBvdmVycmlkZSB0aGUgbnVtYmVyaW5nU3lzdGVtIG9mIHRoaXMgRGF0ZVRpbWUuIFRoZSBJbnRsIHN5c3RlbSBtYXkgY2hvb3NlIG5vdCB0byBob25vciB0aGlzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmUoKSAvLz0+IFwiaW4gMSBkYXlcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoXCJlc1wiKS50b1JlbGF0aXZlKHsgZGF5czogMSB9KSAvLz0+IFwiZGVudHJvIGRlIDEgZMOtYVwiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmUoeyBsb2NhbGU6IFwiZnJcIiB9KSAvLz0+IFwiZGFucyAyMyBoZXVyZXNcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGRheXM6IDIgfSkudG9SZWxhdGl2ZSgpIC8vPT4gXCIyIGRheXMgYWdvXCJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkubWludXMoeyBkYXlzOiAyIH0pLnRvUmVsYXRpdmUoeyB1bml0OiBcImhvdXJzXCIgfSkgLy89PiBcIjQ4IGhvdXJzIGFnb1wiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLm1pbnVzKHsgaG91cnM6IDM2IH0pLnRvUmVsYXRpdmUoeyByb3VuZDogZmFsc2UgfSkgLy89PiBcIjEuNSBkYXlzIGFnb1wiXG4gICAqL1xuICB0b1JlbGF0aXZlKG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBiYXNlID0gb3B0aW9ucy5iYXNlIHx8IERhdGVUaW1lLmZyb21PYmplY3Qoe30sIHsgem9uZTogdGhpcy56b25lIH0pLFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyA/ICh0aGlzIDwgYmFzZSA/IC1vcHRpb25zLnBhZGRpbmcgOiBvcHRpb25zLnBhZGRpbmcpIDogMDtcbiAgICBsZXQgdW5pdHMgPSBbXCJ5ZWFyc1wiLCBcIm1vbnRoc1wiLCBcImRheXNcIiwgXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCJdO1xuICAgIGxldCB1bml0ID0gb3B0aW9ucy51bml0O1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMudW5pdCkpIHtcbiAgICAgIHVuaXRzID0gb3B0aW9ucy51bml0O1xuICAgICAgdW5pdCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGRpZmZSZWxhdGl2ZShiYXNlLCB0aGlzLnBsdXMocGFkZGluZyksIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBudW1lcmljOiBcImFsd2F5c1wiLFxuICAgICAgdW5pdHMsXG4gICAgICB1bml0LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBkYXRlIHJlbGF0aXZlIHRvIHRvZGF5LCBzdWNoIGFzIFwieWVzdGVyZGF5XCIgb3IgXCJuZXh0IG1vbnRoXCIuXG4gICAqIE9ubHkgaW50ZXJuYXRpb25hbGl6ZXMgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydHMgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgb3V0cHV0XG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IFtvcHRpb25zLmJhc2U9RGF0ZVRpbWUubm93KCldIC0gdGhlIERhdGVUaW1lIHRvIHVzZSBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggdGhpcyB0aW1lIGlzIGNvbXBhcmVkLiBEZWZhdWx0cyB0byBub3cuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmxvY2FsZSAtIG92ZXJyaWRlIHRoZSBsb2NhbGUgb2YgdGhpcyBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy51bml0IC0gdXNlIGEgc3BlY2lmaWMgdW5pdDsgaWYgb21pdHRlZCwgdGhlIG1ldGhvZCB3aWxsIHBpY2sgdGhlIHVuaXQuIFVzZSBvbmUgb2YgXCJ5ZWFyc1wiLCBcInF1YXJ0ZXJzXCIsIFwibW9udGhzXCIsIFwid2Vla3NcIiwgb3IgXCJkYXlzXCJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gb3ZlcnJpZGUgdGhlIG51bWJlcmluZ1N5c3RlbSBvZiB0aGlzIERhdGVUaW1lLiBUaGUgSW50bCBzeXN0ZW0gbWF5IGNob29zZSBub3QgdG8gaG9ub3IgdGhpc1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlQ2FsZW5kYXIoKSAvLz0+IFwidG9tb3Jyb3dcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoXCJlc1wiKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlKCkgLy89PiBcIlwibWHDsWFuYVwiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmVDYWxlbmRhcih7IGxvY2FsZTogXCJmclwiIH0pIC8vPT4gXCJkZW1haW5cIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGRheXM6IDIgfSkudG9SZWxhdGl2ZUNhbGVuZGFyKCkgLy89PiBcIjIgZGF5cyBhZ29cIlxuICAgKi9cbiAgdG9SZWxhdGl2ZUNhbGVuZGFyKG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiBkaWZmUmVsYXRpdmUob3B0aW9ucy5iYXNlIHx8IERhdGVUaW1lLmZyb21PYmplY3Qoe30sIHsgem9uZTogdGhpcy56b25lIH0pLCB0aGlzLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbnVtZXJpYzogXCJhdXRvXCIsXG4gICAgICB1bml0czogW1wieWVhcnNcIiwgXCJtb250aHNcIiwgXCJkYXlzXCJdLFxuICAgICAgY2FsZW5kYXJ5OiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbWluIG9mIHNldmVyYWwgZGF0ZSB0aW1lc1xuICAgKiBAcGFyYW0gey4uLkRhdGVUaW1lfSBkYXRlVGltZXMgLSB0aGUgRGF0ZVRpbWVzIGZyb20gd2hpY2ggdG8gY2hvb3NlIHRoZSBtaW5pbXVtXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfSB0aGUgbWluIERhdGVUaW1lLCBvciB1bmRlZmluZWQgaWYgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRcbiAgICovXG4gIHN0YXRpYyBtaW4oLi4uZGF0ZVRpbWVzKSB7XG4gICAgaWYgKCFkYXRlVGltZXMuZXZlcnkoRGF0ZVRpbWUuaXNEYXRlVGltZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIm1pbiByZXF1aXJlcyBhbGwgYXJndW1lbnRzIGJlIERhdGVUaW1lc1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGJlc3RCeShkYXRlVGltZXMsIChpKSA9PiBpLnZhbHVlT2YoKSwgTWF0aC5taW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbWF4IG9mIHNldmVyYWwgZGF0ZSB0aW1lc1xuICAgKiBAcGFyYW0gey4uLkRhdGVUaW1lfSBkYXRlVGltZXMgLSB0aGUgRGF0ZVRpbWVzIGZyb20gd2hpY2ggdG8gY2hvb3NlIHRoZSBtYXhpbXVtXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfSB0aGUgbWF4IERhdGVUaW1lLCBvciB1bmRlZmluZWQgaWYgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRcbiAgICovXG4gIHN0YXRpYyBtYXgoLi4uZGF0ZVRpbWVzKSB7XG4gICAgaWYgKCFkYXRlVGltZXMuZXZlcnkoRGF0ZVRpbWUuaXNEYXRlVGltZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIm1heCByZXF1aXJlcyBhbGwgYXJndW1lbnRzIGJlIERhdGVUaW1lc1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGJlc3RCeShkYXRlVGltZXMsIChpKSA9PiBpLnZhbHVlT2YoKSwgTWF0aC5tYXgpO1xuICB9XG5cbiAgLy8gTUlTQ1xuXG4gIC8qKlxuICAgKiBFeHBsYWluIGhvdyBhIHN0cmluZyB3b3VsZCBiZSBwYXJzZWQgYnkgZnJvbUZvcm1hdCgpXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCB0aGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGJlIGluIChzZWUgZGVzY3JpcHRpb24pXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB0YWtlbiBieSBmcm9tRm9ybWF0KClcbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGZyb21Gb3JtYXRFeHBsYWluKHRleHQsIGZtdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsIH0gPSBvcHRpb25zLFxuICAgICAgbG9jYWxlVG9Vc2UgPSBMb2NhbGUuZnJvbU9wdHMoe1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIG51bWJlcmluZ1N5c3RlbSxcbiAgICAgICAgZGVmYXVsdFRvRU46IHRydWUsXG4gICAgICB9KTtcbiAgICByZXR1cm4gZXhwbGFpbkZyb21Ub2tlbnMobG9jYWxlVG9Vc2UsIHRleHQsIGZtdCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGZyb21Gb3JtYXRFeHBsYWluIGluc3RlYWRcbiAgICovXG4gIHN0YXRpYyBmcm9tU3RyaW5nRXhwbGFpbih0ZXh0LCBmbXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBEYXRlVGltZS5mcm9tRm9ybWF0RXhwbGFpbih0ZXh0LCBmbXQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgcGFyc2VyIGZvciBgZm10YCB1c2luZyB0aGUgZ2l2ZW4gbG9jYWxlLiBUaGlzIHBhcnNlciBjYW4gYmUgcGFzc2VkXG4gICAqIHRvIHtAbGluayBEYXRlVGltZS5mcm9tRm9ybWF0UGFyc2VyfSB0byBhIHBhcnNlIGEgZGF0ZSBpbiB0aGlzIGZvcm1hdC4gVGhpc1xuICAgKiBjYW4gYmUgdXNlZCB0byBvcHRpbWl6ZSBjYXNlcyB3aGVyZSBtYW55IGRhdGVzIG5lZWQgdG8gYmUgcGFyc2VkIGluIGFcbiAgICogc3BlY2lmaWMgZm9ybWF0LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCB0aGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGJlIGluIChzZWVcbiAgICogZGVzY3JpcHRpb24pXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB1c2VkIHRvIHNldCBsb2NhbGUgYW5kIG51bWJlcmluZ1N5c3RlbVxuICAgKiBmb3IgcGFyc2VyXG4gICAqIEByZXR1cm5zIHtUb2tlblBhcnNlcn0gLSBvcGFxdWUgb2JqZWN0IHRvIGJlIHVzZWRcbiAgICovXG4gIHN0YXRpYyBidWlsZEZvcm1hdFBhcnNlcihmbXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHsgbG9jYWxlID0gbnVsbCwgbnVtYmVyaW5nU3lzdGVtID0gbnVsbCB9ID0gb3B0aW9ucyxcbiAgICAgIGxvY2FsZVRvVXNlID0gTG9jYWxlLmZyb21PcHRzKHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBudW1iZXJpbmdTeXN0ZW0sXG4gICAgICAgIGRlZmF1bHRUb0VOOiB0cnVlLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIG5ldyBUb2tlblBhcnNlcihsb2NhbGVUb1VzZSwgZm10KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIGlucHV0IHN0cmluZyBhbmQgZm9ybWF0IHBhcnNlci5cbiAgICpcbiAgICogVGhlIGZvcm1hdCBwYXJzZXIgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCB3aXRoIHRoZSBzYW1lIGxvY2FsZSBhcyB0aGlzIGNhbGwuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IC0gdGhlIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0ge1Rva2VuUGFyc2VyfSBmb3JtYXRQYXJzZXIgLSBwYXJzZXIgZnJvbSB7QGxpbmsgRGF0ZVRpbWUuYnVpbGRGb3JtYXRQYXJzZXJ9XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0YWtlbiBieSBmcm9tRm9ybWF0KClcbiAgICogQHJldHVybnMge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIGZyb21Gb3JtYXRQYXJzZXIodGV4dCwgZm9ybWF0UGFyc2VyLCBvcHRzID0ge30pIHtcbiAgICBpZiAoaXNVbmRlZmluZWQodGV4dCkgfHwgaXNVbmRlZmluZWQoZm9ybWF0UGFyc2VyKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBcImZyb21Gb3JtYXRQYXJzZXIgcmVxdWlyZXMgYW4gaW5wdXQgc3RyaW5nIGFuZCBhIGZvcm1hdCBwYXJzZXJcIlxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsIH0gPSBvcHRzLFxuICAgICAgbG9jYWxlVG9Vc2UgPSBMb2NhbGUuZnJvbU9wdHMoe1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIG51bWJlcmluZ1N5c3RlbSxcbiAgICAgICAgZGVmYXVsdFRvRU46IHRydWUsXG4gICAgICB9KTtcblxuICAgIGlmICghbG9jYWxlVG9Vc2UuZXF1YWxzKGZvcm1hdFBhcnNlci5sb2NhbGUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGBmcm9tRm9ybWF0UGFyc2VyIGNhbGxlZCB3aXRoIGEgbG9jYWxlIG9mICR7bG9jYWxlVG9Vc2V9LCBgICtcbiAgICAgICAgICBgYnV0IHRoZSBmb3JtYXQgcGFyc2VyIHdhcyBjcmVhdGVkIGZvciAke2Zvcm1hdFBhcnNlci5sb2NhbGV9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHJlc3VsdCwgem9uZSwgc3BlY2lmaWNPZmZzZXQsIGludmFsaWRSZWFzb24gfSA9IGZvcm1hdFBhcnNlci5leHBsYWluRnJvbVRva2Vucyh0ZXh0KTtcblxuICAgIGlmIChpbnZhbGlkUmVhc29uKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChpbnZhbGlkUmVhc29uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUoXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgem9uZSxcbiAgICAgICAgb3B0cyxcbiAgICAgICAgYGZvcm1hdCAke2Zvcm1hdFBhcnNlci5mb3JtYXR9YCxcbiAgICAgICAgdGV4dCxcbiAgICAgICAgc3BlY2lmaWNPZmZzZXRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gRk9STUFUIFBSRVNFVFNcblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAxMC8xNC8xOTgzXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVfU0hPUlQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURV9TSE9SVDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3QgMTQsIDE5ODMnXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVfTUVEKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVfTUVEO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ0ZyaSwgT2N0IDE0LCAxOTgzJ1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFX01FRF9XSVRIX1dFRUtEQVkoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURV9NRURfV0lUSF9XRUVLREFZO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdG9iZXIgMTQsIDE5ODMnXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVfRlVMTCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFX0ZVTEw7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnVHVlc2RheSwgT2N0b2JlciAxNCwgMTk4MydcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURV9IVUdFKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVfSFVHRTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FX1NJTVBMRSgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FX1NJTVBMRTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FX1dJVEhfU0VDT05EUygpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FX1dJVEhfU0VDT05EUztcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBBTSBFRFQnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV9XSVRIX1NIT1JUX09GRlNFVCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FX1dJVEhfU0hPUlRfT0ZGU0VUO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEFNIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FX1dJVEhfTE9OR19PRkZTRVQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV9XSVRIX0xPTkdfT0ZGU0VUO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwJywgYWx3YXlzIDI0LWhvdXIuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IFRJTUVfMjRfU0lNUExFKCkge1xuICAgIHJldHVybiBGb3JtYXRzLlRJTUVfMjRfU0lNUExFO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzJywgYWx3YXlzIDI0LWhvdXIuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IFRJTUVfMjRfV0lUSF9TRUNPTkRTKCkge1xuICAgIHJldHVybiBGb3JtYXRzLlRJTUVfMjRfV0lUSF9TRUNPTkRTO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEVEVCcsIGFsd2F5cyAyNC1ob3VyLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUKCkge1xuICAgIHJldHVybiBGb3JtYXRzLlRJTUVfMjRfV0lUSF9TSE9SVF9PRkZTRVQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgRWFzdGVybiBEYXlsaWdodCBUaW1lJywgYWx3YXlzIDI0LWhvdXIuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IFRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FXzI0X1dJVEhfTE9OR19PRkZTRVQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMTAvMTQvMTk4MywgOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9TSE9SVCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9TSE9SVDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcxMC8xNC8xOTgzLCA5OjMwOjMzIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUygpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9TSE9SVF9XSVRIX1NFQ09ORFM7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0IDE0LCAxOTgzLCA5OjMwIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX01FRCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9NRUQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0IDE0LCAxOTgzLCA5OjMwOjMzIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUztcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdGcmksIDE0IE9jdCAxOTgzLCA5OjMwIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVkoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfV0VFS0RBWTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3RvYmVyIDE0LCAxOTgzLCA5OjMwIEFNIEVEVCcuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9GVUxMKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX0ZVTEw7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0b2JlciAxNCwgMTk4MywgOTozMDozMyBBTSBFRFQnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFM7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnRnJpZGF5LCBPY3RvYmVyIDE0LCAxOTgzLCA5OjMwIEFNIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9IVUdFKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX0hVR0U7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnRnJpZGF5LCBPY3RvYmVyIDE0LCAxOTgzLCA5OjMwOjMzIEFNIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9IVUdFX1dJVEhfU0VDT05EUygpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9IVUdFX1dJVEhfU0VDT05EUztcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcmllbmRseURhdGVUaW1lKGRhdGVUaW1laXNoKSB7XG4gIGlmIChEYXRlVGltZS5pc0RhdGVUaW1lKGRhdGVUaW1laXNoKSkge1xuICAgIHJldHVybiBkYXRlVGltZWlzaDtcbiAgfSBlbHNlIGlmIChkYXRlVGltZWlzaCAmJiBkYXRlVGltZWlzaC52YWx1ZU9mICYmIGlzTnVtYmVyKGRhdGVUaW1laXNoLnZhbHVlT2YoKSkpIHtcbiAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUpTRGF0ZShkYXRlVGltZWlzaCk7XG4gIH0gZWxzZSBpZiAoZGF0ZVRpbWVpc2ggJiYgdHlwZW9mIGRhdGVUaW1laXNoID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIERhdGVUaW1lLmZyb21PYmplY3QoZGF0ZVRpbWVpc2gpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgIGBVbmtub3duIGRhdGV0aW1lIGFyZ3VtZW50OiAke2RhdGVUaW1laXNofSwgb2YgdHlwZSAke3R5cGVvZiBkYXRlVGltZWlzaH1gXG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIEludmFsaWREdXJhdGlvbkVycm9yLCBJbnZhbGlkVW5pdEVycm9yIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5pbXBvcnQgRm9ybWF0dGVyIGZyb20gXCIuL2ltcGwvZm9ybWF0dGVyLmpzXCI7XG5pbXBvcnQgSW52YWxpZCBmcm9tIFwiLi9pbXBsL2ludmFsaWQuanNcIjtcbmltcG9ydCBMb2NhbGUgZnJvbSBcIi4vaW1wbC9sb2NhbGUuanNcIjtcbmltcG9ydCB7IHBhcnNlSVNPRHVyYXRpb24sIHBhcnNlSVNPVGltZU9ubHkgfSBmcm9tIFwiLi9pbXBsL3JlZ2V4UGFyc2VyLmpzXCI7XG5pbXBvcnQge1xuICBhc051bWJlcixcbiAgaGFzT3duUHJvcGVydHksXG4gIGlzTnVtYmVyLFxuICBpc1VuZGVmaW5lZCxcbiAgbm9ybWFsaXplT2JqZWN0LFxuICByb3VuZFRvLFxufSBmcm9tIFwiLi9pbXBsL3V0aWwuanNcIjtcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5ncy5qc1wiO1xuaW1wb3J0IERhdGVUaW1lIGZyb20gXCIuL2RhdGV0aW1lLmpzXCI7XG5cbmNvbnN0IElOVkFMSUQgPSBcIkludmFsaWQgRHVyYXRpb25cIjtcblxuLy8gdW5pdCBjb252ZXJzaW9uIGNvbnN0YW50c1xuZXhwb3J0IGNvbnN0IGxvd09yZGVyTWF0cml4ID0ge1xuICAgIHdlZWtzOiB7XG4gICAgICBkYXlzOiA3LFxuICAgICAgaG91cnM6IDcgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IDcgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogNyAqIDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogNyAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcbiAgICBkYXlzOiB7XG4gICAgICBob3VyczogMjQsXG4gICAgICBtaW51dGVzOiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogMjQgKiA2MCAqIDYwLFxuICAgICAgbWlsbGlzZWNvbmRzOiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICAgIH0sXG4gICAgaG91cnM6IHsgbWludXRlczogNjAsIHNlY29uZHM6IDYwICogNjAsIG1pbGxpc2Vjb25kczogNjAgKiA2MCAqIDEwMDAgfSxcbiAgICBtaW51dGVzOiB7IHNlY29uZHM6IDYwLCBtaWxsaXNlY29uZHM6IDYwICogMTAwMCB9LFxuICAgIHNlY29uZHM6IHsgbWlsbGlzZWNvbmRzOiAxMDAwIH0sXG4gIH0sXG4gIGNhc3VhbE1hdHJpeCA9IHtcbiAgICB5ZWFyczoge1xuICAgICAgcXVhcnRlcnM6IDQsXG4gICAgICBtb250aHM6IDEyLFxuICAgICAgd2Vla3M6IDUyLFxuICAgICAgZGF5czogMzY1LFxuICAgICAgaG91cnM6IDM2NSAqIDI0LFxuICAgICAgbWludXRlczogMzY1ICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDM2NSAqIDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogMzY1ICogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuICAgIHF1YXJ0ZXJzOiB7XG4gICAgICBtb250aHM6IDMsXG4gICAgICB3ZWVrczogMTMsXG4gICAgICBkYXlzOiA5MSxcbiAgICAgIGhvdXJzOiA5MSAqIDI0LFxuICAgICAgbWludXRlczogOTEgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogOTEgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IDkxICogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuICAgIG1vbnRoczoge1xuICAgICAgd2Vla3M6IDQsXG4gICAgICBkYXlzOiAzMCxcbiAgICAgIGhvdXJzOiAzMCAqIDI0LFxuICAgICAgbWludXRlczogMzAgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogMzAgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IDMwICogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuXG4gICAgLi4ubG93T3JkZXJNYXRyaXgsXG4gIH0sXG4gIGRheXNJblllYXJBY2N1cmF0ZSA9IDE0NjA5Ny4wIC8gNDAwLFxuICBkYXlzSW5Nb250aEFjY3VyYXRlID0gMTQ2MDk3LjAgLyA0ODAwLFxuICBhY2N1cmF0ZU1hdHJpeCA9IHtcbiAgICB5ZWFyczoge1xuICAgICAgcXVhcnRlcnM6IDQsXG4gICAgICBtb250aHM6IDEyLFxuICAgICAgd2Vla3M6IGRheXNJblllYXJBY2N1cmF0ZSAvIDcsXG4gICAgICBkYXlzOiBkYXlzSW5ZZWFyQWNjdXJhdGUsXG4gICAgICBob3VyczogZGF5c0luWWVhckFjY3VyYXRlICogMjQsXG4gICAgICBtaW51dGVzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAqIDYwLFxuICAgICAgbWlsbGlzZWNvbmRzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICAgIH0sXG4gICAgcXVhcnRlcnM6IHtcbiAgICAgIG1vbnRoczogMyxcbiAgICAgIHdlZWtzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgLyAyOCxcbiAgICAgIGRheXM6IGRheXNJblllYXJBY2N1cmF0ZSAvIDQsXG4gICAgICBob3VyczogKGRheXNJblllYXJBY2N1cmF0ZSAqIDI0KSAvIDQsXG4gICAgICBtaW51dGVzOiAoZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCkgLyA0LFxuICAgICAgc2Vjb25kczogKGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCkgLyA0LFxuICAgICAgbWlsbGlzZWNvbmRzOiAoZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAqIDYwICogMTAwMCkgLyA0LFxuICAgIH0sXG4gICAgbW9udGhzOiB7XG4gICAgICB3ZWVrczogZGF5c0luTW9udGhBY2N1cmF0ZSAvIDcsXG4gICAgICBkYXlzOiBkYXlzSW5Nb250aEFjY3VyYXRlLFxuICAgICAgaG91cnM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogZGF5c0luTW9udGhBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogZGF5c0luTW9udGhBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcbiAgICAuLi5sb3dPcmRlck1hdHJpeCxcbiAgfTtcblxuLy8gdW5pdHMgb3JkZXJlZCBieSBzaXplXG5jb25zdCBvcmRlcmVkVW5pdHMgPSBbXG4gIFwieWVhcnNcIixcbiAgXCJxdWFydGVyc1wiLFxuICBcIm1vbnRoc1wiLFxuICBcIndlZWtzXCIsXG4gIFwiZGF5c1wiLFxuICBcImhvdXJzXCIsXG4gIFwibWludXRlc1wiLFxuICBcInNlY29uZHNcIixcbiAgXCJtaWxsaXNlY29uZHNcIixcbl07XG5cbmNvbnN0IHJldmVyc2VVbml0cyA9IG9yZGVyZWRVbml0cy5zbGljZSgwKS5yZXZlcnNlKCk7XG5cbi8vIGNsb25lIHJlYWxseSBtZWFucyBcImNyZWF0ZSBhbm90aGVyIGluc3RhbmNlIGp1c3QgbGlrZSB0aGlzIG9uZSwgYnV0IHdpdGggdGhlc2UgY2hhbmdlc1wiXG5mdW5jdGlvbiBjbG9uZShkdXIsIGFsdHMsIGNsZWFyID0gZmFsc2UpIHtcbiAgLy8gZGVlcCBtZXJnZSBmb3IgdmFsc1xuICBjb25zdCBjb25mID0ge1xuICAgIHZhbHVlczogY2xlYXIgPyBhbHRzLnZhbHVlcyA6IHsgLi4uZHVyLnZhbHVlcywgLi4uKGFsdHMudmFsdWVzIHx8IHt9KSB9LFxuICAgIGxvYzogZHVyLmxvYy5jbG9uZShhbHRzLmxvYyksXG4gICAgY29udmVyc2lvbkFjY3VyYWN5OiBhbHRzLmNvbnZlcnNpb25BY2N1cmFjeSB8fCBkdXIuY29udmVyc2lvbkFjY3VyYWN5LFxuICAgIG1hdHJpeDogYWx0cy5tYXRyaXggfHwgZHVyLm1hdHJpeCxcbiAgfTtcbiAgcmV0dXJuIG5ldyBEdXJhdGlvbihjb25mKTtcbn1cblxuZnVuY3Rpb24gZHVyYXRpb25Ub01pbGxpcyhtYXRyaXgsIHZhbHMpIHtcbiAgbGV0IHN1bSA9IHZhbHMubWlsbGlzZWNvbmRzID8/IDA7XG4gIGZvciAoY29uc3QgdW5pdCBvZiByZXZlcnNlVW5pdHMuc2xpY2UoMSkpIHtcbiAgICBpZiAodmFsc1t1bml0XSkge1xuICAgICAgc3VtICs9IHZhbHNbdW5pdF0gKiBtYXRyaXhbdW5pdF1bXCJtaWxsaXNlY29uZHNcIl07XG4gICAgfVxuICB9XG4gIHJldHVybiBzdW07XG59XG5cbi8vIE5COiBtdXRhdGVzIHBhcmFtZXRlcnNcbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlcyhtYXRyaXgsIHZhbHMpIHtcbiAgLy8gdGhlIGxvZ2ljIGJlbG93IGFzc3VtZXMgdGhlIG92ZXJhbGwgdmFsdWUgb2YgdGhlIGR1cmF0aW9uIGlzIHBvc2l0aXZlXG4gIC8vIGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBmYWN0b3IgaXMgdXNlZCB0byBtYWtlIGl0IHNvXG4gIGNvbnN0IGZhY3RvciA9IGR1cmF0aW9uVG9NaWxsaXMobWF0cml4LCB2YWxzKSA8IDAgPyAtMSA6IDE7XG5cbiAgb3JkZXJlZFVuaXRzLnJlZHVjZVJpZ2h0KChwcmV2aW91cywgY3VycmVudCkgPT4ge1xuICAgIGlmICghaXNVbmRlZmluZWQodmFsc1tjdXJyZW50XSkpIHtcbiAgICAgIGlmIChwcmV2aW91cykge1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbCA9IHZhbHNbcHJldmlvdXNdICogZmFjdG9yO1xuICAgICAgICBjb25zdCBjb252ID0gbWF0cml4W2N1cnJlbnRdW3ByZXZpb3VzXTtcblxuICAgICAgICAvLyBpZiAocHJldmlvdXNWYWwgPCAwKTpcbiAgICAgICAgLy8gbG93ZXIgb3JkZXIgdW5pdCBpcyBuZWdhdGl2ZSAoZS5nLiB7IHllYXJzOiAyLCBkYXlzOiAtMiB9KVxuICAgICAgICAvLyBub3JtYWxpemUgdGhpcyBieSByZWR1Y2luZyB0aGUgaGlnaGVyIG9yZGVyIHVuaXQgYnkgdGhlIGFwcHJvcHJpYXRlIGFtb3VudFxuICAgICAgICAvLyBhbmQgaW5jcmVhc2luZyB0aGUgbG93ZXIgb3JkZXIgdW5pdFxuICAgICAgICAvLyB0aGlzIGNhbiBuZXZlciBtYWtlIHRoZSBoaWdoZXIgb3JkZXIgdW5pdCBuZWdhdGl2ZSwgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIG9ubHkgb3BlcmF0ZXNcbiAgICAgICAgLy8gb24gcG9zaXRpdmUgZHVyYXRpb25zLCBzbyB0aGUgYW1vdW50IG9mIHRpbWUgcmVwcmVzZW50ZWQgYnkgdGhlIGxvd2VyIG9yZGVyIHVuaXQgY2Fubm90XG4gICAgICAgIC8vIGJlIGxhcmdlciB0aGFuIHRoZSBoaWdoZXIgb3JkZXIgdW5pdFxuICAgICAgICAvLyBlbHNlOlxuICAgICAgICAvLyBsb3dlciBvcmRlciB1bml0IGlzIHBvc2l0aXZlIChlLmcuIHsgeWVhcnM6IDIsIGRheXM6IDQ1MCB9IG9yIHsgeWVhcnM6IC0yLCBkYXlzOiA0NTAgfSlcbiAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlIGF0dGVtcHQgdG8gY29udmVydCBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gdGhlIGxvd2VyIG9yZGVyIHVuaXQgaW50b1xuICAgICAgICAvLyB0aGUgaGlnaGVyIG9yZGVyIG9uZVxuICAgICAgICAvL1xuICAgICAgICAvLyBNYXRoLmZsb29yIHRha2VzIGNhcmUgb2YgYm90aCBvZiB0aGVzZSBjYXNlcywgcm91bmRpbmcgYXdheSBmcm9tIDBcbiAgICAgICAgLy8gaWYgcHJldmlvdXNWYWwgPCAwIGl0IG1ha2VzIHRoZSBhYnNvbHV0ZSB2YWx1ZSBsYXJnZXJcbiAgICAgICAgLy8gaWYgcHJldmlvdXNWYWwgPj0gaXQgbWFrZXMgdGhlIGFic29sdXRlIHZhbHVlIHNtYWxsZXJcbiAgICAgICAgY29uc3Qgcm9sbFVwID0gTWF0aC5mbG9vcihwcmV2aW91c1ZhbCAvIGNvbnYpO1xuICAgICAgICB2YWxzW2N1cnJlbnRdICs9IHJvbGxVcCAqIGZhY3RvcjtcbiAgICAgICAgdmFsc1twcmV2aW91c10gLT0gcm9sbFVwICogY29udiAqIGZhY3RvcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcHJldmlvdXM7XG4gICAgfVxuICB9LCBudWxsKTtcblxuICAvLyB0cnkgdG8gY29udmVydCBhbnkgZGVjaW1hbHMgaW50byBzbWFsbGVyIHVuaXRzIGlmIHBvc3NpYmxlXG4gIC8vIGZvciBleGFtcGxlIGZvciB7IHllYXJzOiAyLjUsIGRheXM6IDAsIHNlY29uZHM6IDAgfSB3ZSB3YW50IHRvIGdldCB7IHllYXJzOiAyLCBkYXlzOiAxODIsIGhvdXJzOiAxMiB9XG4gIG9yZGVyZWRVbml0cy5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XG4gICAgaWYgKCFpc1VuZGVmaW5lZCh2YWxzW2N1cnJlbnRdKSkge1xuICAgICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICAgIGNvbnN0IGZyYWN0aW9uID0gdmFsc1twcmV2aW91c10gJSAxO1xuICAgICAgICB2YWxzW3ByZXZpb3VzXSAtPSBmcmFjdGlvbjtcbiAgICAgICAgdmFsc1tjdXJyZW50XSArPSBmcmFjdGlvbiAqIG1hdHJpeFtwcmV2aW91c11bY3VycmVudF07XG4gICAgICB9XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgIH1cbiAgfSwgbnVsbCk7XG59XG5cbi8vIFJlbW92ZSBhbGwgcHJvcGVydGllcyB3aXRoIGEgdmFsdWUgb2YgMCBmcm9tIGFuIG9iamVjdFxuZnVuY3Rpb24gcmVtb3ZlWmVyb2VzKHZhbHMpIHtcbiAgY29uc3QgbmV3VmFscyA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWxzKSkge1xuICAgIGlmICh2YWx1ZSAhPT0gMCkge1xuICAgICAgbmV3VmFsc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdWYWxzO1xufVxuXG4vKipcbiAqIEEgRHVyYXRpb24gb2JqZWN0IHJlcHJlc2VudHMgYSBwZXJpb2Qgb2YgdGltZSwgbGlrZSBcIjIgbW9udGhzXCIgb3IgXCIxIGRheSwgMSBob3VyXCIuIENvbmNlcHR1YWxseSwgaXQncyBqdXN0IGEgbWFwIG9mIHVuaXRzIHRvIHRoZWlyIHF1YW50aXRpZXMsIGFjY29tcGFuaWVkIGJ5IHNvbWUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGFuZCBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgdHJhbnNmb3JtaW5nLCBhbmQgZm9ybWF0dGluZyB0aGVtLiBUaGV5IGNhbiBiZSB1c2VkIG9uIHRoZWlyIG93biBvciBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIEx1eG9uIHR5cGVzOyBmb3IgZXhhbXBsZSwgeW91IGNhbiB1c2Uge0BsaW5rIERhdGVUaW1lI3BsdXN9IHRvIGFkZCBhIER1cmF0aW9uIG9iamVjdCB0byBhIERhdGVUaW1lLCBwcm9kdWNpbmcgYW5vdGhlciBEYXRlVGltZS5cbiAqXG4gKiBIZXJlIGlzIGEgYnJpZWYgb3ZlcnZpZXcgb2YgY29tbW9ubHkgdXNlZCBtZXRob2RzIGFuZCBnZXR0ZXJzIGluIER1cmF0aW9uOlxuICpcbiAqICogKipDcmVhdGlvbioqIFRvIGNyZWF0ZSBhIER1cmF0aW9uLCB1c2Uge0BsaW5rIER1cmF0aW9uLmZyb21NaWxsaXN9LCB7QGxpbmsgRHVyYXRpb24uZnJvbU9iamVjdH0sIG9yIHtAbGluayBEdXJhdGlvbi5mcm9tSVNPfS5cbiAqICogKipVbml0IHZhbHVlcyoqIFNlZSB0aGUge0BsaW5rIER1cmF0aW9uI3llYXJzfSwge0BsaW5rIER1cmF0aW9uI21vbnRoc30sIHtAbGluayBEdXJhdGlvbiN3ZWVrc30sIHtAbGluayBEdXJhdGlvbiNkYXlzfSwge0BsaW5rIER1cmF0aW9uI2hvdXJzfSwge0BsaW5rIER1cmF0aW9uI21pbnV0ZXN9LCB7QGxpbmsgRHVyYXRpb24jc2Vjb25kc30sIHtAbGluayBEdXJhdGlvbiNtaWxsaXNlY29uZHN9IGFjY2Vzc29ycy5cbiAqICogKipDb25maWd1cmF0aW9uKiogU2VlICB7QGxpbmsgRHVyYXRpb24jbG9jYWxlfSBhbmQge0BsaW5rIER1cmF0aW9uI251bWJlcmluZ1N5c3RlbX0gYWNjZXNzb3JzLlxuICogKiAqKlRyYW5zZm9ybWF0aW9uKiogVG8gY3JlYXRlIG5ldyBEdXJhdGlvbnMgb3V0IG9mIG9sZCBvbmVzIHVzZSB7QGxpbmsgRHVyYXRpb24jcGx1c30sIHtAbGluayBEdXJhdGlvbiNtaW51c30sIHtAbGluayBEdXJhdGlvbiNub3JtYWxpemV9LCB7QGxpbmsgRHVyYXRpb24jc2V0fSwge0BsaW5rIER1cmF0aW9uI3JlY29uZmlndXJlfSwge0BsaW5rIER1cmF0aW9uI3NoaWZ0VG99LCBhbmQge0BsaW5rIER1cmF0aW9uI25lZ2F0ZX0uXG4gKiAqICoqT3V0cHV0KiogVG8gY29udmVydCB0aGUgRHVyYXRpb24gaW50byBvdGhlciByZXByZXNlbnRhdGlvbnMsIHNlZSB7QGxpbmsgRHVyYXRpb24jYXN9LCB7QGxpbmsgRHVyYXRpb24jdG9JU099LCB7QGxpbmsgRHVyYXRpb24jdG9Gb3JtYXR9LCBhbmQge0BsaW5rIER1cmF0aW9uI3RvSlNPTn1cbiAqXG4gKiBUaGVyZSdzIGFyZSBtb3JlIG1ldGhvZHMgZG9jdW1lbnRlZCBiZWxvdy4gSW4gYWRkaXRpb24sIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHN1YnRsZXIgdG9waWNzIGxpa2UgaW50ZXJuYXRpb25hbGl6YXRpb24gYW5kIHZhbGlkaXR5LCBzZWUgdGhlIGV4dGVybmFsIGRvY3VtZW50YXRpb24uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBjb25zdCBhY2N1cmF0ZSA9IGNvbmZpZy5jb252ZXJzaW9uQWNjdXJhY3kgPT09IFwibG9uZ3Rlcm1cIiB8fCBmYWxzZTtcbiAgICBsZXQgbWF0cml4ID0gYWNjdXJhdGUgPyBhY2N1cmF0ZU1hdHJpeCA6IGNhc3VhbE1hdHJpeDtcblxuICAgIGlmIChjb25maWcubWF0cml4KSB7XG4gICAgICBtYXRyaXggPSBjb25maWcubWF0cml4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmFsdWVzID0gY29uZmlnLnZhbHVlcztcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmxvYyA9IGNvbmZpZy5sb2MgfHwgTG9jYWxlLmNyZWF0ZSgpO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY29udmVyc2lvbkFjY3VyYWN5ID0gYWNjdXJhdGUgPyBcImxvbmd0ZXJtXCIgOiBcImNhc3VhbFwiO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW52YWxpZCA9IGNvbmZpZy5pbnZhbGlkIHx8IG51bGw7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5tYXRyaXggPSBtYXRyaXg7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pc0x1eG9uRHVyYXRpb24gPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBEdXJhdGlvbiBmcm9tIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvdW50IG9mIG1pbGxpc2Vjb25kc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgZm9yIHBhcnNpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIHRoZSBsb2NhbGUgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbU1pbGxpcyhjb3VudCwgb3B0cykge1xuICAgIHJldHVybiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbWlsbGlzZWNvbmRzOiBjb3VudCB9LCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEdXJhdGlvbiBmcm9tIGEgSmF2YVNjcmlwdCBvYmplY3Qgd2l0aCBrZXlzIGxpa2UgJ3llYXJzJyBhbmQgJ2hvdXJzJy5cbiAgICogSWYgdGhpcyBvYmplY3QgaXMgZW1wdHkgdGhlbiBhIHplcm8gbWlsbGlzZWNvbmRzIGR1cmF0aW9uIGlzIHJldHVybmVkLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gdGhlIG9iamVjdCB0byBjcmVhdGUgdGhlIERhdGVUaW1lIGZyb21cbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai55ZWFyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLnF1YXJ0ZXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubW9udGhzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla3NcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5kYXlzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouaG91cnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5taW51dGVzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouc2Vjb25kc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1pbGxpc2Vjb25kc1xuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHM9W11dIC0gb3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhpcyBEdXJhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gdGhlIGxvY2FsZSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIHByZXNldCBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm1hdHJpeD1PYmplY3RdIC0gdGhlIGN1c3RvbSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbU9iamVjdChvYmosIG9wdHMgPSB7fSkge1xuICAgIGlmIChvYmogPT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGBEdXJhdGlvbi5mcm9tT2JqZWN0OiBhcmd1bWVudCBleHBlY3RlZCB0byBiZSBhbiBvYmplY3QsIGdvdCAke1xuICAgICAgICAgIG9iaiA9PT0gbnVsbCA/IFwibnVsbFwiIDogdHlwZW9mIG9ialxuICAgICAgICB9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKHtcbiAgICAgIHZhbHVlczogbm9ybWFsaXplT2JqZWN0KG9iaiwgRHVyYXRpb24ubm9ybWFsaXplVW5pdCksXG4gICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdHMpLFxuICAgICAgY29udmVyc2lvbkFjY3VyYWN5OiBvcHRzLmNvbnZlcnNpb25BY2N1cmFjeSxcbiAgICAgIG1hdHJpeDogb3B0cy5tYXRyaXgsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBEdXJhdGlvbkxpa2UuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRHVyYXRpb259IGR1cmF0aW9uTGlrZVxuICAgKiBPbmUgb2Y6XG4gICAqIC0gb2JqZWN0IHdpdGgga2V5cyBsaWtlICd5ZWFycycgYW5kICdob3VycycuXG4gICAqIC0gbnVtYmVyIHJlcHJlc2VudGluZyBtaWxsaXNlY29uZHNcbiAgICogLSBEdXJhdGlvbiBpbnN0YW5jZVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uTGlrZSkge1xuICAgIGlmIChpc051bWJlcihkdXJhdGlvbkxpa2UpKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU1pbGxpcyhkdXJhdGlvbkxpa2UpO1xuICAgIH0gZWxzZSBpZiAoRHVyYXRpb24uaXNEdXJhdGlvbihkdXJhdGlvbkxpa2UpKSB7XG4gICAgICByZXR1cm4gZHVyYXRpb25MaWtlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGR1cmF0aW9uTGlrZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3QoZHVyYXRpb25MaWtlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgVW5rbm93biBkdXJhdGlvbiBhcmd1bWVudCAke2R1cmF0aW9uTGlrZX0gb2YgdHlwZSAke3R5cGVvZiBkdXJhdGlvbkxpa2V9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBhbiBJU08gODYwMSBkdXJhdGlvbiBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGV4dCB0byBwYXJzZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgZm9yIHBhcnNpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIHRoZSBsb2NhbGUgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBwcmVzZXQgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5tYXRyaXg9T2JqZWN0XSAtIHRoZSBwcmVzZXQgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjRHVyYXRpb25zXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU08oJ1AzWTZNMVc0RFQxMkgzME01UycpLnRvT2JqZWN0KCkgLy89PiB7IHllYXJzOiAzLCBtb250aHM6IDYsIHdlZWtzOiAxLCBkYXlzOiA0LCBob3VyczogMTIsIG1pbnV0ZXM6IDMwLCBzZWNvbmRzOiA1IH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTTygnUFQyM0gnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMjMgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPKCdQNVkzTScpLnRvT2JqZWN0KCkgLy89PiB7IHllYXJzOiA1LCBtb250aHM6IDMgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tSVNPKHRleHQsIG9wdHMpIHtcbiAgICBjb25zdCBbcGFyc2VkXSA9IHBhcnNlSVNPRHVyYXRpb24odGV4dCk7XG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3QocGFyc2VkLCBvcHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmludmFsaWQoXCJ1bnBhcnNhYmxlXCIsIGB0aGUgaW5wdXQgXCIke3RleHR9XCIgY2FuJ3QgYmUgcGFyc2VkIGFzIElTTyA4NjAxYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIER1cmF0aW9uIGZyb20gYW4gSVNPIDg2MDEgdGltZSBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGV4dCB0byBwYXJzZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgZm9yIHBhcnNpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIHRoZSBsb2NhbGUgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBwcmVzZXQgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5tYXRyaXg9T2JqZWN0XSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lc1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnMTE6MjI6MzMuNDQ0JykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDExLCBtaW51dGVzOiAyMiwgc2Vjb25kczogMzMsIG1pbGxpc2Vjb25kczogNDQ0IH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJzExOjAwJykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDExLCBtaW51dGVzOiAwLCBzZWNvbmRzOiAwIH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJ1QxMTowMCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMCwgc2Vjb25kczogMCB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCcxMTAwJykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDExLCBtaW51dGVzOiAwLCBzZWNvbmRzOiAwIH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJ1QxMTAwJykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDExLCBtaW51dGVzOiAwLCBzZWNvbmRzOiAwIH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbUlTT1RpbWUodGV4dCwgb3B0cykge1xuICAgIGNvbnN0IFtwYXJzZWRdID0gcGFyc2VJU09UaW1lT25seSh0ZXh0KTtcbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU9iamVjdChwYXJzZWQsIG9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uaW52YWxpZChcInVucGFyc2FibGVcIiwgYHRoZSBpbnB1dCBcIiR7dGV4dH1cIiBjYW4ndCBiZSBwYXJzZWQgYXMgSVNPIDg2MDFgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGludmFsaWQgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gLSBzaW1wbGUgc3RyaW5nIG9mIHdoeSB0aGlzIGRhdGV0aW1lIGlzIGludmFsaWQuIFNob3VsZCBub3QgY29udGFpbiBwYXJhbWV0ZXJzIG9yIGFueXRoaW5nIGVsc2UgZGF0YS1kZXBlbmRlbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHBsYW5hdGlvbj1udWxsXSAtIGxvbmdlciBleHBsYW5hdGlvbiwgbWF5IGluY2x1ZGUgcGFyYW1ldGVycyBhbmQgb3RoZXIgdXNlZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvblxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHN0YXRpYyBpbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24gPSBudWxsKSB7XG4gICAgaWYgKCFyZWFzb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgRHVyYXRpb24gaXMgaW52YWxpZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnZhbGlkID0gcmVhc29uIGluc3RhbmNlb2YgSW52YWxpZCA/IHJlYXNvbiA6IG5ldyBJbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pO1xuXG4gICAgaWYgKFNldHRpbmdzLnRocm93T25JbnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZER1cmF0aW9uRXJyb3IoaW52YWxpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRHVyYXRpb24oeyBpbnZhbGlkIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3RhdGljIG5vcm1hbGl6ZVVuaXQodW5pdCkge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB7XG4gICAgICB5ZWFyOiBcInllYXJzXCIsXG4gICAgICB5ZWFyczogXCJ5ZWFyc1wiLFxuICAgICAgcXVhcnRlcjogXCJxdWFydGVyc1wiLFxuICAgICAgcXVhcnRlcnM6IFwicXVhcnRlcnNcIixcbiAgICAgIG1vbnRoOiBcIm1vbnRoc1wiLFxuICAgICAgbW9udGhzOiBcIm1vbnRoc1wiLFxuICAgICAgd2VlazogXCJ3ZWVrc1wiLFxuICAgICAgd2Vla3M6IFwid2Vla3NcIixcbiAgICAgIGRheTogXCJkYXlzXCIsXG4gICAgICBkYXlzOiBcImRheXNcIixcbiAgICAgIGhvdXI6IFwiaG91cnNcIixcbiAgICAgIGhvdXJzOiBcImhvdXJzXCIsXG4gICAgICBtaW51dGU6IFwibWludXRlc1wiLFxuICAgICAgbWludXRlczogXCJtaW51dGVzXCIsXG4gICAgICBzZWNvbmQ6IFwic2Vjb25kc1wiLFxuICAgICAgc2Vjb25kczogXCJzZWNvbmRzXCIsXG4gICAgICBtaWxsaXNlY29uZDogXCJtaWxsaXNlY29uZHNcIixcbiAgICAgIG1pbGxpc2Vjb25kczogXCJtaWxsaXNlY29uZHNcIixcbiAgICB9W3VuaXQgPyB1bml0LnRvTG93ZXJDYXNlKCkgOiB1bml0XTtcblxuICAgIGlmICghbm9ybWFsaXplZCkgdGhyb3cgbmV3IEludmFsaWRVbml0RXJyb3IodW5pdCk7XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBvYmplY3QgaXMgYSBEdXJhdGlvbi4gV29ya3MgYWNyb3NzIGNvbnRleHQgYm91bmRhcmllc1xuICAgKiBAcGFyYW0ge29iamVjdH0gb1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzRHVyYXRpb24obykge1xuICAgIHJldHVybiAobyAmJiBvLmlzTHV4b25EdXJhdGlvbikgfHwgZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0ICB0aGUgbG9jYWxlIG9mIGEgRHVyYXRpb24sIHN1Y2ggJ2VuLUdCJ1xuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGxvY2FsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5sb2MubG9jYWxlIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG51bWJlcmluZyBzeXN0ZW0gb2YgYSBEdXJhdGlvbiwgc3VjaCAnYmVuZycuIFRoZSBudW1iZXJpbmcgc3lzdGVtIGlzIHVzZWQgd2hlbiBmb3JtYXR0aW5nIHRoZSBEdXJhdGlvblxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG51bWJlcmluZ1N5c3RlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5sb2MubnVtYmVyaW5nU3lzdGVtIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24gZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGZvcm1hdCBzdHJpbmcuIFlvdSBtYXkgdXNlIHRoZXNlIHRva2VuczpcbiAgICogKiBgU2AgZm9yIG1pbGxpc2Vjb25kc1xuICAgKiAqIGBzYCBmb3Igc2Vjb25kc1xuICAgKiAqIGBtYCBmb3IgbWludXRlc1xuICAgKiAqIGBoYCBmb3IgaG91cnNcbiAgICogKiBgZGAgZm9yIGRheXNcbiAgICogKiBgd2AgZm9yIHdlZWtzXG4gICAqICogYE1gIGZvciBtb250aHNcbiAgICogKiBgeWAgZm9yIHllYXJzXG4gICAqIE5vdGVzOlxuICAgKiAqIEFkZCBwYWRkaW5nIGJ5IHJlcGVhdGluZyB0aGUgdG9rZW4sIGUuZy4gXCJ5eVwiIHBhZHMgdGhlIHllYXJzIHRvIHR3byBkaWdpdHMsIFwiaGhoaFwiIHBhZHMgdGhlIGhvdXJzIG91dCB0byBmb3VyIGRpZ2l0c1xuICAgKiAqIFRva2VucyBjYW4gYmUgZXNjYXBlZCBieSB3cmFwcGluZyB3aXRoIHNpbmdsZSBxdW90ZXMuXG4gICAqICogVGhlIGR1cmF0aW9uIHdpbGwgYmUgY29udmVydGVkIHRvIHRoZSBzZXQgb2YgdW5pdHMgaW4gdGhlIGZvcm1hdCBzdHJpbmcgdXNpbmcge0BsaW5rIER1cmF0aW9uI3NoaWZ0VG99IGFuZCB0aGUgRHVyYXRpb25zJ3MgY29udmVyc2lvbiBhY2N1cmFjeSBzZXR0aW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCBzdHJpbmdcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZmxvb3I9dHJ1ZV0gLSBmbG9vciBudW1lcmljYWwgdmFsdWVzXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9KS50b0Zvcm1hdChcInkgZCBzXCIpIC8vPT4gXCIxIDYgMlwiXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9KS50b0Zvcm1hdChcInl5IGRkIHNzc1wiKSAvLz0+IFwiMDEgMDYgMDAyXCJcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvRm9ybWF0KFwiTSBTXCIpIC8vPT4gXCIxMiA1MTg0MDIwMDBcIlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0Zvcm1hdChmbXQsIG9wdHMgPSB7fSkge1xuICAgIC8vIHJldmVyc2UtY29tcGF0IHNpbmNlIDEuMjsgd2UgYWx3YXlzIHJvdW5kIGRvd24gbm93LCBuZXZlciB1cCwgYW5kIHdlIGRvIGl0IGJ5IGRlZmF1bHRcbiAgICBjb25zdCBmbXRPcHRzID0ge1xuICAgICAgLi4ub3B0cyxcbiAgICAgIGZsb29yOiBvcHRzLnJvdW5kICE9PSBmYWxzZSAmJiBvcHRzLmZsb29yICE9PSBmYWxzZSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRcbiAgICAgID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYywgZm10T3B0cykuZm9ybWF0RHVyYXRpb25Gcm9tU3RyaW5nKHRoaXMsIGZtdClcbiAgICAgIDogSU5WQUxJRDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgRHVyYXRpb24gd2l0aCBhbGwgdW5pdHMgaW5jbHVkZWQuXG4gICAqIFRvIG1vZGlmeSBpdHMgYmVoYXZpb3IsIHVzZSBgbGlzdFN0eWxlYCBhbmQgYW55IEludGwuTnVtYmVyRm9ybWF0IG9wdGlvbiwgdGhvdWdoIGB1bml0RGlzcGxheWAgaXMgZXNwZWNpYWxseSByZWxldmFudC5cbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsL051bWJlckZvcm1hdC9OdW1iZXJGb3JtYXQjb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIEZvcm1hdHRpbmcgb3B0aW9ucy4gQWNjZXB0cyB0aGUgc2FtZSBrZXlzIGFzIHRoZSBvcHRpb25zIHBhcmFtZXRlciBvZiB0aGUgbmF0aXZlIGBJbnRsLk51bWJlckZvcm1hdGAgY29uc3RydWN0b3IsIGFzIHdlbGwgYXMgYGxpc3RTdHlsZWAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5saXN0U3R5bGU9J25hcnJvdyddIC0gSG93IHRvIGZvcm1hdCB0aGUgbWVyZ2VkIGxpc3QuIENvcnJlc3BvbmRzIHRvIHRoZSBgc3R5bGVgIHByb3BlcnR5IG9mIHRoZSBvcHRpb25zIHBhcmFtZXRlciBvZiB0aGUgbmF0aXZlIGBJbnRsLkxpc3RGb3JtYXRgIGNvbnN0cnVjdG9yLlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiB2YXIgZHVyID0gRHVyYXRpb24uZnJvbU9iamVjdCh7IGRheXM6IDEsIGhvdXJzOiA1LCBtaW51dGVzOiA2IH0pXG4gICAqIGR1ci50b0h1bWFuKCkgLy89PiAnMSBkYXksIDUgaG91cnMsIDYgbWludXRlcydcbiAgICogZHVyLnRvSHVtYW4oeyBsaXN0U3R5bGU6IFwibG9uZ1wiIH0pIC8vPT4gJzEgZGF5LCA1IGhvdXJzLCBhbmQgNiBtaW51dGVzJ1xuICAgKiBkdXIudG9IdW1hbih7IHVuaXREaXNwbGF5OiBcInNob3J0XCIgfSkgLy89PiAnMSBkYXksIDUgaHIsIDYgbWluJ1xuICAgKiBgYGBcbiAgICovXG4gIHRvSHVtYW4ob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEO1xuXG4gICAgY29uc3QgbCA9IG9yZGVyZWRVbml0c1xuICAgICAgLm1hcCgodW5pdCkgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSB0aGlzLnZhbHVlc1t1bml0XTtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbCkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2NcbiAgICAgICAgICAubnVtYmVyRm9ybWF0dGVyKHsgc3R5bGU6IFwidW5pdFwiLCB1bml0RGlzcGxheTogXCJsb25nXCIsIC4uLm9wdHMsIHVuaXQ6IHVuaXQuc2xpY2UoMCwgLTEpIH0pXG4gICAgICAgICAgLmZvcm1hdCh2YWwpO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKG4pID0+IG4pO1xuXG4gICAgcmV0dXJuIHRoaXMubG9jXG4gICAgICAubGlzdEZvcm1hdHRlcih7IHR5cGU6IFwiY29uanVuY3Rpb25cIiwgc3R5bGU6IG9wdHMubGlzdFN0eWxlIHx8IFwibmFycm93XCIsIC4uLm9wdHMgfSlcbiAgICAgIC5mb3JtYXQobCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGggdGhpcyBEdXJhdGlvbidzIHZhbHVlcy5cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvT2JqZWN0KCkgLy89PiB7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH1cbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgdG9PYmplY3QoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB7fTtcbiAgICByZXR1cm4geyAuLi50aGlzLnZhbHVlcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI0R1cmF0aW9uc1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDMsIHNlY29uZHM6IDQ1IH0pLnRvSVNPKCkgLy89PiAnUDNZVDQ1UydcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogNCwgc2Vjb25kczogNDUgfSkudG9JU08oKSAvLz0+ICdQNE1UNDVTJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbW9udGhzOiA1IH0pLnRvSVNPKCkgLy89PiAnUDVNJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbWludXRlczogNSB9KS50b0lTTygpIC8vPT4gJ1BUNU0nXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtaWxsaXNlY29uZHM6IDYgfSkudG9JU08oKSAvLz0+ICdQVDAuMDA2UydcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU08oKSB7XG4gICAgLy8gd2UgY291bGQgdXNlIHRoZSBmb3JtYXR0ZXIsIGJ1dCB0aGlzIGlzIGFuIGVhc2llciB3YXkgdG8gZ2V0IHRoZSBtaW5pbXVtIHN0cmluZ1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcblxuICAgIGxldCBzID0gXCJQXCI7XG4gICAgaWYgKHRoaXMueWVhcnMgIT09IDApIHMgKz0gdGhpcy55ZWFycyArIFwiWVwiO1xuICAgIGlmICh0aGlzLm1vbnRocyAhPT0gMCB8fCB0aGlzLnF1YXJ0ZXJzICE9PSAwKSBzICs9IHRoaXMubW9udGhzICsgdGhpcy5xdWFydGVycyAqIDMgKyBcIk1cIjtcbiAgICBpZiAodGhpcy53ZWVrcyAhPT0gMCkgcyArPSB0aGlzLndlZWtzICsgXCJXXCI7XG4gICAgaWYgKHRoaXMuZGF5cyAhPT0gMCkgcyArPSB0aGlzLmRheXMgKyBcIkRcIjtcbiAgICBpZiAodGhpcy5ob3VycyAhPT0gMCB8fCB0aGlzLm1pbnV0ZXMgIT09IDAgfHwgdGhpcy5zZWNvbmRzICE9PSAwIHx8IHRoaXMubWlsbGlzZWNvbmRzICE9PSAwKVxuICAgICAgcyArPSBcIlRcIjtcbiAgICBpZiAodGhpcy5ob3VycyAhPT0gMCkgcyArPSB0aGlzLmhvdXJzICsgXCJIXCI7XG4gICAgaWYgKHRoaXMubWludXRlcyAhPT0gMCkgcyArPSB0aGlzLm1pbnV0ZXMgKyBcIk1cIjtcbiAgICBpZiAodGhpcy5zZWNvbmRzICE9PSAwIHx8IHRoaXMubWlsbGlzZWNvbmRzICE9PSAwKVxuICAgICAgLy8gdGhpcyB3aWxsIGhhbmRsZSBcImZsb2F0aW5nIHBvaW50IG1hZG5lc3NcIiBieSByZW1vdmluZyBleHRyYSBkZWNpbWFsIHBsYWNlc1xuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTg4MDA0L2lzLWZsb2F0aW5nLXBvaW50LW1hdGgtYnJva2VuXG4gICAgICBzICs9IHJvdW5kVG8odGhpcy5zZWNvbmRzICsgdGhpcy5taWxsaXNlY29uZHMgLyAxMDAwLCAzKSArIFwiU1wiO1xuICAgIGlmIChzID09PSBcIlBcIikgcyArPSBcIlQwU1wiO1xuICAgIHJldHVybiBzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uLCBmb3JtYXR0ZWQgYXMgYSB0aW1lIG9mIGRheS5cbiAgICogTm90ZSB0aGF0IHRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGUgZHVyYXRpb24gaXMgaW52YWxpZCwgbmVnYXRpdmUsIG9yIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiAyNCBob3Vycy5cbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NTZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVByZWZpeD1mYWxzZV0gLSBpbmNsdWRlIHRoZSBgVGAgcHJlZml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdFxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSgpIC8vPT4gJzExOjAwOjAwLjAwMCdcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBzdXBwcmVzc01pbGxpc2Vjb25kczogdHJ1ZSB9KSAvLz0+ICcxMTowMDowMCdcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBzdXBwcmVzc1NlY29uZHM6IHRydWUgfSkgLy89PiAnMTE6MDAnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKHsgaW5jbHVkZVByZWZpeDogdHJ1ZSB9KSAvLz0+ICdUMTE6MDA6MDAuMDAwJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcxMTAwMDAuMDAwJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0lTT1RpbWUob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbWlsbGlzID0gdGhpcy50b01pbGxpcygpO1xuICAgIGlmIChtaWxsaXMgPCAwIHx8IG1pbGxpcyA+PSA4NjQwMDAwMCkgcmV0dXJuIG51bGw7XG5cbiAgICBvcHRzID0ge1xuICAgICAgc3VwcHJlc3NNaWxsaXNlY29uZHM6IGZhbHNlLFxuICAgICAgc3VwcHJlc3NTZWNvbmRzOiBmYWxzZSxcbiAgICAgIGluY2x1ZGVQcmVmaXg6IGZhbHNlLFxuICAgICAgZm9ybWF0OiBcImV4dGVuZGVkXCIsXG4gICAgICAuLi5vcHRzLFxuICAgICAgaW5jbHVkZU9mZnNldDogZmFsc2UsXG4gICAgfTtcblxuICAgIGNvbnN0IGRhdGVUaW1lID0gRGF0ZVRpbWUuZnJvbU1pbGxpcyhtaWxsaXMsIHsgem9uZTogXCJVVENcIiB9KTtcbiAgICByZXR1cm4gZGF0ZVRpbWUudG9JU09UaW1lKG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIEpTT04uXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b0lTTygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIGRlYnVnZ2luZy5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9JU08oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24gYXBwcm9wcmlhdGUgZm9yIHRoZSBSRVBMLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBbU3ltYm9sLmZvcihcIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tXCIpXSgpIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gYER1cmF0aW9uIHsgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KHRoaXMudmFsdWVzKX0gfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgRHVyYXRpb24geyBJbnZhbGlkLCByZWFzb246ICR7dGhpcy5pbnZhbGlkUmVhc29ufSB9YDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBtaWxsaXNlY29uZHMgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbi5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdG9NaWxsaXMoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBOYU47XG5cbiAgICByZXR1cm4gZHVyYXRpb25Ub01pbGxpcyh0aGlzLm1hdHJpeCwgdGhpcy52YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gbWlsbGlzZWNvbmRzIHZhbHVlIG9mIHRoaXMgRHVyYXRpb24uIEFsaWFzIG9mIHtAbGluayB0b01pbGxpc31cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdmFsdWVPZigpIHtcbiAgICByZXR1cm4gdGhpcy50b01pbGxpcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgdGhpcyBEdXJhdGlvbiBsb25nZXIgYnkgdGhlIHNwZWNpZmllZCBhbW91bnQuIFJldHVybiBhIG5ld2x5LWNvbnN0cnVjdGVkIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGFtb3VudCB0byBhZGQuIEVpdGhlciBhIEx1eG9uIER1cmF0aW9uLCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIHRoZSBvYmplY3QgYXJndW1lbnQgdG8gRHVyYXRpb24uZnJvbU9iamVjdCgpXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgcGx1cyhkdXJhdGlvbikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcblxuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLFxuICAgICAgcmVzdWx0ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGsgb2Ygb3JkZXJlZFVuaXRzKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkoZHVyLnZhbHVlcywgaykgfHwgaGFzT3duUHJvcGVydHkodGhpcy52YWx1ZXMsIGspKSB7XG4gICAgICAgIHJlc3VsdFtrXSA9IGR1ci5nZXQoaykgKyB0aGlzLmdldChrKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmUodGhpcywgeyB2YWx1ZXM6IHJlc3VsdCB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHRoaXMgRHVyYXRpb24gc2hvcnRlciBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gUmV0dXJuIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIHN1YnRyYWN0LiBFaXRoZXIgYSBMdXhvbiBEdXJhdGlvbiwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCB0aGUgb2JqZWN0IGFyZ3VtZW50IHRvIER1cmF0aW9uLmZyb21PYmplY3QoKVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIG1pbnVzKGR1cmF0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuXG4gICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbik7XG4gICAgcmV0dXJuIHRoaXMucGx1cyhkdXIubmVnYXRlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjYWxlIHRoaXMgRHVyYXRpb24gYnkgdGhlIHNwZWNpZmllZCBhbW91bnQuIFJldHVybiBhIG5ld2x5LWNvbnN0cnVjdGVkIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIHVuaXQuIEFyaXR5IGlzIDEgb3IgMjogdGhlIHZhbHVlIG9mIHRoZSB1bml0IGFuZCwgb3B0aW9uYWxseSwgdGhlIHVuaXQgbmFtZS4gTXVzdCByZXR1cm4gYSBudW1iZXIuXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSwgbWludXRlczogMzAgfSkubWFwVW5pdHMoeCA9PiB4ICogMikgLy89PiB7IGhvdXJzOiAyLCBtaW51dGVzOiA2MCB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSwgbWludXRlczogMzAgfSkubWFwVW5pdHMoKHgsIHUpID0+IHUgPT09IFwiaG91cnNcIiA/IHggKiAyIDogeCkgLy89PiB7IGhvdXJzOiAyLCBtaW51dGVzOiAzMCB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgbWFwVW5pdHMoZm4pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKSkge1xuICAgICAgcmVzdWx0W2tdID0gYXNOdW1iZXIoZm4odGhpcy52YWx1ZXNba10sIGspKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdmFsdWVzOiByZXN1bHQgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBvZiB1bml0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIGEgdW5pdCBzdWNoIGFzICdtaW51dGUnIG9yICdkYXknXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe3llYXJzOiAyLCBkYXlzOiAzfSkuZ2V0KCd5ZWFycycpIC8vPT4gMlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgnbW9udGhzJykgLy89PiAwXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe3llYXJzOiAyLCBkYXlzOiAzfSkuZ2V0KCdkYXlzJykgLy89PiAzXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldCh1bml0KSB7XG4gICAgcmV0dXJuIHRoaXNbRHVyYXRpb24ubm9ybWFsaXplVW5pdCh1bml0KV07XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgdmFsdWVzIG9mIHNwZWNpZmllZCB1bml0cy4gUmV0dXJuIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXMgLSBhIG1hcHBpbmcgb2YgdW5pdHMgdG8gbnVtYmVyc1xuICAgKiBAZXhhbXBsZSBkdXIuc2V0KHsgeWVhcnM6IDIwMTcgfSlcbiAgICogQGV4YW1wbGUgZHVyLnNldCh7IGhvdXJzOiA4LCBtaW51dGVzOiAzMCB9KVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHNldCh2YWx1ZXMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG5cbiAgICBjb25zdCBtaXhlZCA9IHsgLi4udGhpcy52YWx1ZXMsIC4uLm5vcm1hbGl6ZU9iamVjdCh2YWx1ZXMsIER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQpIH07XG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdmFsdWVzOiBtaXhlZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBsb2NhbGUgYW5kL29yIG51bWJlcmluZ1N5c3RlbS4gIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi5cbiAgICogQGV4YW1wbGUgZHVyLnJlY29uZmlndXJlKHsgbG9jYWxlOiAnZW4tR0InIH0pXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgcmVjb25maWd1cmUoeyBsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgY29udmVyc2lvbkFjY3VyYWN5LCBtYXRyaXggfSA9IHt9KSB7XG4gICAgY29uc3QgbG9jID0gdGhpcy5sb2MuY2xvbmUoeyBsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSB9KTtcbiAgICBjb25zdCBvcHRzID0geyBsb2MsIG1hdHJpeCwgY29udmVyc2lvbkFjY3VyYWN5IH07XG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBkdXJhdGlvbiBpbiB0aGUgc3BlY2lmaWVkIHVuaXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gYSB1bml0IHN1Y2ggYXMgJ21pbnV0ZXMnIG9yICdkYXlzJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMX0pLmFzKCdkYXlzJykgLy89PiAzNjVcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7eWVhcnM6IDF9KS5hcygnbW9udGhzJykgLy89PiAxMlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHtob3VyczogNjB9KS5hcygnZGF5cycpIC8vPT4gMi41XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGFzKHVuaXQpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5zaGlmdFRvKHVuaXQpLmdldCh1bml0KSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWR1Y2UgdGhpcyBEdXJhdGlvbiB0byBpdHMgY2Fub25pY2FsIHJlcHJlc2VudGF0aW9uIGluIGl0cyBjdXJyZW50IHVuaXRzLlxuICAgKiBBc3N1bWluZyB0aGUgb3ZlcmFsbCB2YWx1ZSBvZiB0aGUgRHVyYXRpb24gaXMgcG9zaXRpdmUsIHRoaXMgbWVhbnM6XG4gICAqIC0gZXhjZXNzaXZlIHZhbHVlcyBmb3IgbG93ZXItb3JkZXIgdW5pdHMgYXJlIGNvbnZlcnRlZCB0byBoaWdoZXItb3JkZXIgdW5pdHMgKGlmIHBvc3NpYmxlLCBzZWUgZmlyc3QgYW5kIHNlY29uZCBleGFtcGxlKVxuICAgKiAtIG5lZ2F0aXZlIGxvd2VyLW9yZGVyIHVuaXRzIGFyZSBjb252ZXJ0ZWQgdG8gaGlnaGVyIG9yZGVyIHVuaXRzICh0aGVyZSBtdXN0IGJlIHN1Y2ggYSBoaWdoZXIgb3JkZXIgdW5pdCwgb3RoZXJ3aXNlXG4gICAqICAgdGhlIG92ZXJhbGwgdmFsdWUgd291bGQgYmUgbmVnYXRpdmUsIHNlZSB0aGlyZCBleGFtcGxlKVxuICAgKiAtIGZyYWN0aW9uYWwgdmFsdWVzIGZvciBoaWdoZXItb3JkZXIgdW5pdHMgYXJlIGNvbnZlcnRlZCB0byBsb3dlci1vcmRlciB1bml0cyAoaWYgcG9zc2libGUsIHNlZSBmb3VydGggZXhhbXBsZSlcbiAgICpcbiAgICogSWYgdGhlIG92ZXJhbGwgdmFsdWUgaXMgbmVnYXRpdmUsIHRoZSByZXN1bHQgb2YgdGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBgdGhpcy5uZWdhdGUoKS5ub3JtYWxpemUoKS5uZWdhdGUoKWAuXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMiwgZGF5czogNTAwMCB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMTUsIGRheXM6IDI1NSB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiA1MDAwIH0pLm5vcm1hbGl6ZSgpLnRvT2JqZWN0KCkgLy89PiB7IGRheXM6IDUwMDAgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEyLCBtaW51dGVzOiAtNDUgfSkubm9ybWFsaXplKCkudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDExLCBtaW51dGVzOiAxNSB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMi41LCBkYXlzOiAwLCBob3VyczogMCB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMiwgZGF5czogMTgyLCBob3VyczogMTIgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIG5vcm1hbGl6ZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgdmFscyA9IHRoaXMudG9PYmplY3QoKTtcbiAgICBub3JtYWxpemVWYWx1ZXModGhpcy5tYXRyaXgsIHZhbHMpO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogdmFscyB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNjYWxlIHVuaXRzIHRvIGl0cyBsYXJnZXN0IHJlcHJlc2VudGF0aW9uXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtaWxsaXNlY29uZHM6IDkwMDAwIH0pLnJlc2NhbGUoKS50b09iamVjdCgpIC8vPT4geyBtaW51dGVzOiAxLCBzZWNvbmRzOiAzMCB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgcmVzY2FsZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgdmFscyA9IHJlbW92ZVplcm9lcyh0aGlzLm5vcm1hbGl6ZSgpLnNoaWZ0VG9BbGwoKS50b09iamVjdCgpKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywgeyB2YWx1ZXM6IHZhbHMgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGlzIER1cmF0aW9uIGludG8gaXRzIHJlcHJlc2VudGF0aW9uIGluIGEgZGlmZmVyZW50IHNldCBvZiB1bml0cy5cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBzZWNvbmRzOiAzMCB9KS5zaGlmdFRvKCdtaW51dGVzJywgJ21pbGxpc2Vjb25kcycpLnRvT2JqZWN0KCkgLy89PiB7IG1pbnV0ZXM6IDYwLCBtaWxsaXNlY29uZHM6IDMwMDAwIH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzaGlmdFRvKC4uLnVuaXRzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKHVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdW5pdHMgPSB1bml0cy5tYXAoKHUpID0+IER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQodSkpO1xuXG4gICAgY29uc3QgYnVpbHQgPSB7fSxcbiAgICAgIGFjY3VtdWxhdGVkID0ge30sXG4gICAgICB2YWxzID0gdGhpcy50b09iamVjdCgpO1xuICAgIGxldCBsYXN0VW5pdDtcblxuICAgIGZvciAoY29uc3QgayBvZiBvcmRlcmVkVW5pdHMpIHtcbiAgICAgIGlmICh1bml0cy5pbmRleE9mKGspID49IDApIHtcbiAgICAgICAgbGFzdFVuaXQgPSBrO1xuXG4gICAgICAgIGxldCBvd24gPSAwO1xuXG4gICAgICAgIC8vIGFueXRoaW5nIHdlIGhhdmVuJ3QgYm9pbGVkIGRvd24geWV0IHNob3VsZCBnZXQgYm9pbGVkIHRvIHRoaXMgdW5pdFxuICAgICAgICBmb3IgKGNvbnN0IGFrIGluIGFjY3VtdWxhdGVkKSB7XG4gICAgICAgICAgb3duICs9IHRoaXMubWF0cml4W2FrXVtrXSAqIGFjY3VtdWxhdGVkW2FrXTtcbiAgICAgICAgICBhY2N1bXVsYXRlZFtha10gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGx1cyBhbnl0aGluZyB0aGF0J3MgYWxyZWFkeSBpbiB0aGlzIHVuaXRcbiAgICAgICAgaWYgKGlzTnVtYmVyKHZhbHNba10pKSB7XG4gICAgICAgICAgb3duICs9IHZhbHNba107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGtlZXAgdGhlIGludGVnZXIgcGFydCBmb3Igbm93IGluIHRoZSBob3BlcyBvZiBwdXR0aW5nIGFueSBkZWNpbWFsIHBhcnRcbiAgICAgICAgLy8gaW50byBhIHNtYWxsZXIgdW5pdCBsYXRlclxuICAgICAgICBjb25zdCBpID0gTWF0aC50cnVuYyhvd24pO1xuICAgICAgICBidWlsdFtrXSA9IGk7XG4gICAgICAgIGFjY3VtdWxhdGVkW2tdID0gKG93biAqIDEwMDAgLSBpICogMTAwMCkgLyAxMDAwO1xuXG4gICAgICAgIC8vIG90aGVyd2lzZSwga2VlcCBpdCBpbiB0aGUgd2luZ3MgdG8gYm9pbCBpdCBsYXRlclxuICAgICAgfSBlbHNlIGlmIChpc051bWJlcih2YWxzW2tdKSkge1xuICAgICAgICBhY2N1bXVsYXRlZFtrXSA9IHZhbHNba107XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYW55dGhpbmcgbGVmdG92ZXIgYmVjb21lcyB0aGUgZGVjaW1hbCBmb3IgdGhlIGxhc3QgdW5pdFxuICAgIC8vIGxhc3RVbml0IG11c3QgYmUgZGVmaW5lZCBzaW5jZSB1bml0cyBpcyBub3QgZW1wdHlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhY2N1bXVsYXRlZCkge1xuICAgICAgaWYgKGFjY3VtdWxhdGVkW2tleV0gIT09IDApIHtcbiAgICAgICAgYnVpbHRbbGFzdFVuaXRdICs9XG4gICAgICAgICAga2V5ID09PSBsYXN0VW5pdCA/IGFjY3VtdWxhdGVkW2tleV0gOiBhY2N1bXVsYXRlZFtrZXldIC8gdGhpcy5tYXRyaXhbbGFzdFVuaXRdW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9ybWFsaXplVmFsdWVzKHRoaXMubWF0cml4LCBidWlsdCk7XG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdmFsdWVzOiBidWlsdCB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaGlmdCB0aGlzIER1cmF0aW9uIHRvIGFsbCBhdmFpbGFibGUgdW5pdHMuXG4gICAqIFNhbWUgYXMgc2hpZnRUbyhcInllYXJzXCIsIFwibW9udGhzXCIsIFwid2Vla3NcIiwgXCJkYXlzXCIsIFwiaG91cnNcIiwgXCJtaW51dGVzXCIsIFwic2Vjb25kc1wiLCBcIm1pbGxpc2Vjb25kc1wiKVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHNoaWZ0VG9BbGwoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIHJldHVybiB0aGlzLnNoaWZ0VG8oXG4gICAgICBcInllYXJzXCIsXG4gICAgICBcIm1vbnRoc1wiLFxuICAgICAgXCJ3ZWVrc1wiLFxuICAgICAgXCJkYXlzXCIsXG4gICAgICBcImhvdXJzXCIsXG4gICAgICBcIm1pbnV0ZXNcIixcbiAgICAgIFwic2Vjb25kc1wiLFxuICAgICAgXCJtaWxsaXNlY29uZHNcIlxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBuZWdhdGl2ZSBvZiB0aGlzIER1cmF0aW9uLlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEsIHNlY29uZHM6IDMwIH0pLm5lZ2F0ZSgpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAtMSwgc2Vjb25kczogLTMwIH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBuZWdhdGUoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IG5lZ2F0ZWQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModGhpcy52YWx1ZXMpKSB7XG4gICAgICBuZWdhdGVkW2tdID0gdGhpcy52YWx1ZXNba10gPT09IDAgPyAwIDogLXRoaXMudmFsdWVzW2tdO1xuICAgIH1cbiAgICByZXR1cm4gY2xvbmUodGhpcywgeyB2YWx1ZXM6IG5lZ2F0ZWQgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB5ZWFycy5cbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB5ZWFycygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMueWVhcnMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHF1YXJ0ZXJzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHF1YXJ0ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5xdWFydGVycyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbW9udGhzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG1vbnRocygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMubW9udGhzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB3ZWVrc1xuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHdlZWtzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy53ZWVrcyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGF5cy5cbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBkYXlzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5kYXlzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBob3Vycy5cbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBob3VycygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMuaG91cnMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1pbnV0ZXMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbWludXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMubWludXRlcyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2Vjb25kcy5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHNlY29uZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLnNlY29uZHMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1pbGxpc2Vjb25kcy5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG1pbGxpc2Vjb25kcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMubWlsbGlzZWNvbmRzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBEdXJhdGlvbiBpcyBpbnZhbGlkLiBJbnZhbGlkIGR1cmF0aW9ucyBhcmUgcmV0dXJuZWQgYnkgZGlmZiBvcGVyYXRpb25zXG4gICAqIG9uIGludmFsaWQgRGF0ZVRpbWVzIG9yIEludGVydmFscy5cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBlcnJvciBjb2RlIGlmIHRoaXMgRHVyYXRpb24gYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIER1cmF0aW9uIGlzIHZhbGlkXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGdldCBpbnZhbGlkUmVhc29uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQucmVhc29uIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSB0aGlzIER1cmF0aW9uIGJlY2FtZSBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBEdXJhdGlvbiBpcyB2YWxpZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGludmFsaWRFeHBsYW5hdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLmV4cGxhbmF0aW9uIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFcXVhbGl0eSBjaGVja1xuICAgKiBUd28gRHVyYXRpb25zIGFyZSBlcXVhbCBpZmYgdGhleSBoYXZlIHRoZSBzYW1lIHVuaXRzIGFuZCB0aGUgc2FtZSB2YWx1ZXMgZm9yIGVhY2ggdW5pdC5cbiAgICogQHBhcmFtIHtEdXJhdGlvbn0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGVxdWFscyhvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFvdGhlci5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmxvYy5lcXVhbHMob3RoZXIubG9jKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVxKHYxLCB2Mikge1xuICAgICAgLy8gQ29uc2lkZXIgMCBhbmQgdW5kZWZpbmVkIGFzIGVxdWFsXG4gICAgICBpZiAodjEgPT09IHVuZGVmaW5lZCB8fCB2MSA9PT0gMCkgcmV0dXJuIHYyID09PSB1bmRlZmluZWQgfHwgdjIgPT09IDA7XG4gICAgICByZXR1cm4gdjEgPT09IHYyO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdSBvZiBvcmRlcmVkVW5pdHMpIHtcbiAgICAgIGlmICghZXEodGhpcy52YWx1ZXNbdV0sIG90aGVyLnZhbHVlc1t1XSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwiLy8gdGhlc2UgYXJlbid0IHJlYWxseSBwcml2YXRlLCBidXQgbm9yIGFyZSB0aGV5IHJlYWxseSB1c2VmdWwgdG8gZG9jdW1lbnRcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBMdXhvbkVycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZERhdGVUaW1lRXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocmVhc29uKSB7XG4gICAgc3VwZXIoYEludmFsaWQgRGF0ZVRpbWU6ICR7cmVhc29uLnRvTWVzc2FnZSgpfWApO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRJbnRlcnZhbEVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlYXNvbikge1xuICAgIHN1cGVyKGBJbnZhbGlkIEludGVydmFsOiAke3JlYXNvbi50b01lc3NhZ2UoKX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkRHVyYXRpb25FcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZWFzb24pIHtcbiAgICBzdXBlcihgSW52YWxpZCBEdXJhdGlvbjogJHtyZWFzb24udG9NZXNzYWdlKCl9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHt9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRVbml0RXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHtcbiAgY29uc3RydWN0b3IodW5pdCkge1xuICAgIHN1cGVyKGBJbnZhbGlkIHVuaXQgJHt1bml0fWApO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBab25lSXNBYnN0cmFjdEVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiWm9uZSBpcyBhbiBhYnN0cmFjdCBjbGFzc1wiKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaW50ZWdlckJldHdlZW4sXG4gIGlzTGVhcFllYXIsXG4gIHRpbWVPYmplY3QsXG4gIGRheXNJblllYXIsXG4gIGRheXNJbk1vbnRoLFxuICB3ZWVrc0luV2Vla1llYXIsXG4gIGlzSW50ZWdlcixcbiAgaXNVbmRlZmluZWQsXG59IGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCBJbnZhbGlkIGZyb20gXCIuL2ludmFsaWQuanNcIjtcbmltcG9ydCB7IENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy5qc1wiO1xuXG5jb25zdCBub25MZWFwTGFkZGVyID0gWzAsIDMxLCA1OSwgOTAsIDEyMCwgMTUxLCAxODEsIDIxMiwgMjQzLCAyNzMsIDMwNCwgMzM0XSxcbiAgbGVhcExhZGRlciA9IFswLCAzMSwgNjAsIDkxLCAxMjEsIDE1MiwgMTgyLCAyMTMsIDI0NCwgMjc0LCAzMDUsIDMzNV07XG5cbmZ1bmN0aW9uIHVuaXRPdXRPZlJhbmdlKHVuaXQsIHZhbHVlKSB7XG4gIHJldHVybiBuZXcgSW52YWxpZChcbiAgICBcInVuaXQgb3V0IG9mIHJhbmdlXCIsXG4gICAgYHlvdSBzcGVjaWZpZWQgJHt2YWx1ZX0gKG9mIHR5cGUgJHt0eXBlb2YgdmFsdWV9KSBhcyBhICR7dW5pdH0sIHdoaWNoIGlzIGludmFsaWRgXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXlPZldlZWsoeWVhciwgbW9udGgsIGRheSkge1xuICBjb25zdCBkID0gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGggLSAxLCBkYXkpKTtcblxuICBpZiAoeWVhciA8IDEwMCAmJiB5ZWFyID49IDApIHtcbiAgICBkLnNldFVUQ0Z1bGxZZWFyKGQuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDApO1xuICB9XG5cbiAgY29uc3QganMgPSBkLmdldFVUQ0RheSgpO1xuXG4gIHJldHVybiBqcyA9PT0gMCA/IDcgOiBqcztcbn1cblxuZnVuY3Rpb24gY29tcHV0ZU9yZGluYWwoeWVhciwgbW9udGgsIGRheSkge1xuICByZXR1cm4gZGF5ICsgKGlzTGVhcFllYXIoeWVhcikgPyBsZWFwTGFkZGVyIDogbm9uTGVhcExhZGRlcilbbW9udGggLSAxXTtcbn1cblxuZnVuY3Rpb24gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKSB7XG4gIGNvbnN0IHRhYmxlID0gaXNMZWFwWWVhcih5ZWFyKSA/IGxlYXBMYWRkZXIgOiBub25MZWFwTGFkZGVyLFxuICAgIG1vbnRoMCA9IHRhYmxlLmZpbmRJbmRleCgoaSkgPT4gaSA8IG9yZGluYWwpLFxuICAgIGRheSA9IG9yZGluYWwgLSB0YWJsZVttb250aDBdO1xuICByZXR1cm4geyBtb250aDogbW9udGgwICsgMSwgZGF5IH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc29XZWVrZGF5VG9Mb2NhbChpc29XZWVrZGF5LCBzdGFydE9mV2Vlaykge1xuICByZXR1cm4gKChpc29XZWVrZGF5IC0gc3RhcnRPZldlZWsgKyA3KSAlIDcpICsgMTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBncmVnb3JpYW5Ub1dlZWsoZ3JlZ09iaiwgbWluRGF5c0luRmlyc3RXZWVrID0gNCwgc3RhcnRPZldlZWsgPSAxKSB7XG4gIGNvbnN0IHsgeWVhciwgbW9udGgsIGRheSB9ID0gZ3JlZ09iaixcbiAgICBvcmRpbmFsID0gY29tcHV0ZU9yZGluYWwoeWVhciwgbW9udGgsIGRheSksXG4gICAgd2Vla2RheSA9IGlzb1dlZWtkYXlUb0xvY2FsKGRheU9mV2Vlayh5ZWFyLCBtb250aCwgZGF5KSwgc3RhcnRPZldlZWspO1xuXG4gIGxldCB3ZWVrTnVtYmVyID0gTWF0aC5mbG9vcigob3JkaW5hbCAtIHdlZWtkYXkgKyAxNCAtIG1pbkRheXNJbkZpcnN0V2VlaykgLyA3KSxcbiAgICB3ZWVrWWVhcjtcblxuICBpZiAod2Vla051bWJlciA8IDEpIHtcbiAgICB3ZWVrWWVhciA9IHllYXIgLSAxO1xuICAgIHdlZWtOdW1iZXIgPSB3ZWVrc0luV2Vla1llYXIod2Vla1llYXIsIG1pbkRheXNJbkZpcnN0V2Vlaywgc3RhcnRPZldlZWspO1xuICB9IGVsc2UgaWYgKHdlZWtOdW1iZXIgPiB3ZWVrc0luV2Vla1llYXIoeWVhciwgbWluRGF5c0luRmlyc3RXZWVrLCBzdGFydE9mV2VlaykpIHtcbiAgICB3ZWVrWWVhciA9IHllYXIgKyAxO1xuICAgIHdlZWtOdW1iZXIgPSAxO1xuICB9IGVsc2Uge1xuICAgIHdlZWtZZWFyID0geWVhcjtcbiAgfVxuXG4gIHJldHVybiB7IHdlZWtZZWFyLCB3ZWVrTnVtYmVyLCB3ZWVrZGF5LCAuLi50aW1lT2JqZWN0KGdyZWdPYmopIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3ZWVrVG9HcmVnb3JpYW4od2Vla0RhdGEsIG1pbkRheXNJbkZpcnN0V2VlayA9IDQsIHN0YXJ0T2ZXZWVrID0gMSkge1xuICBjb25zdCB7IHdlZWtZZWFyLCB3ZWVrTnVtYmVyLCB3ZWVrZGF5IH0gPSB3ZWVrRGF0YSxcbiAgICB3ZWVrZGF5T2ZKYW40ID0gaXNvV2Vla2RheVRvTG9jYWwoZGF5T2ZXZWVrKHdlZWtZZWFyLCAxLCBtaW5EYXlzSW5GaXJzdFdlZWspLCBzdGFydE9mV2VlayksXG4gICAgeWVhckluRGF5cyA9IGRheXNJblllYXIod2Vla1llYXIpO1xuXG4gIGxldCBvcmRpbmFsID0gd2Vla051bWJlciAqIDcgKyB3ZWVrZGF5IC0gd2Vla2RheU9mSmFuNCAtIDcgKyBtaW5EYXlzSW5GaXJzdFdlZWssXG4gICAgeWVhcjtcblxuICBpZiAob3JkaW5hbCA8IDEpIHtcbiAgICB5ZWFyID0gd2Vla1llYXIgLSAxO1xuICAgIG9yZGluYWwgKz0gZGF5c0luWWVhcih5ZWFyKTtcbiAgfSBlbHNlIGlmIChvcmRpbmFsID4geWVhckluRGF5cykge1xuICAgIHllYXIgPSB3ZWVrWWVhciArIDE7XG4gICAgb3JkaW5hbCAtPSBkYXlzSW5ZZWFyKHdlZWtZZWFyKTtcbiAgfSBlbHNlIHtcbiAgICB5ZWFyID0gd2Vla1llYXI7XG4gIH1cblxuICBjb25zdCB7IG1vbnRoLCBkYXkgfSA9IHVuY29tcHV0ZU9yZGluYWwoeWVhciwgb3JkaW5hbCk7XG4gIHJldHVybiB7IHllYXIsIG1vbnRoLCBkYXksIC4uLnRpbWVPYmplY3Qod2Vla0RhdGEpIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncmVnb3JpYW5Ub09yZGluYWwoZ3JlZ0RhdGEpIHtcbiAgY29uc3QgeyB5ZWFyLCBtb250aCwgZGF5IH0gPSBncmVnRGF0YTtcbiAgY29uc3Qgb3JkaW5hbCA9IGNvbXB1dGVPcmRpbmFsKHllYXIsIG1vbnRoLCBkYXkpO1xuICByZXR1cm4geyB5ZWFyLCBvcmRpbmFsLCAuLi50aW1lT2JqZWN0KGdyZWdEYXRhKSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3JkaW5hbFRvR3JlZ29yaWFuKG9yZGluYWxEYXRhKSB7XG4gIGNvbnN0IHsgeWVhciwgb3JkaW5hbCB9ID0gb3JkaW5hbERhdGE7XG4gIGNvbnN0IHsgbW9udGgsIGRheSB9ID0gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKTtcbiAgcmV0dXJuIHsgeWVhciwgbW9udGgsIGRheSwgLi4udGltZU9iamVjdChvcmRpbmFsRGF0YSkgfTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBsb2NhbCB3ZWVrIHVuaXRzIGxpa2UgbG9jYWxXZWVrZGF5IGFyZSB1c2VkIGluIG9iai5cbiAqIElmIHNvLCB2YWxpZGF0ZXMgdGhhdCB0aGV5IGFyZSBub3QgbWl4ZWQgd2l0aCBJU08gd2VlayB1bml0cyBhbmQgdGhlbiBjb3BpZXMgdGhlbSB0byB0aGUgbm9ybWFsIHdlZWsgdW5pdCBwcm9wZXJ0aWVzLlxuICogTW9kaWZpZXMgb2JqIGluLXBsYWNlIVxuICogQHBhcmFtIG9iaiB0aGUgb2JqZWN0IHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlc0xvY2FsV2Vla1ZhbHVlcyhvYmosIGxvYykge1xuICBjb25zdCBoYXNMb2NhbGVXZWVrRGF0YSA9XG4gICAgIWlzVW5kZWZpbmVkKG9iai5sb2NhbFdlZWtkYXkpIHx8XG4gICAgIWlzVW5kZWZpbmVkKG9iai5sb2NhbFdlZWtOdW1iZXIpIHx8XG4gICAgIWlzVW5kZWZpbmVkKG9iai5sb2NhbFdlZWtZZWFyKTtcbiAgaWYgKGhhc0xvY2FsZVdlZWtEYXRhKSB7XG4gICAgY29uc3QgaGFzSXNvV2Vla0RhdGEgPVxuICAgICAgIWlzVW5kZWZpbmVkKG9iai53ZWVrZGF5KSB8fCAhaXNVbmRlZmluZWQob2JqLndlZWtOdW1iZXIpIHx8ICFpc1VuZGVmaW5lZChvYmoud2Vla1llYXIpO1xuXG4gICAgaWYgKGhhc0lzb1dlZWtEYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IG1peCBsb2NhbGUtYmFzZWQgd2VlayBmaWVsZHMgd2l0aCBJU08tYmFzZWQgd2VlayBmaWVsZHNcIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFpc1VuZGVmaW5lZChvYmoubG9jYWxXZWVrZGF5KSkgb2JqLndlZWtkYXkgPSBvYmoubG9jYWxXZWVrZGF5O1xuICAgIGlmICghaXNVbmRlZmluZWQob2JqLmxvY2FsV2Vla051bWJlcikpIG9iai53ZWVrTnVtYmVyID0gb2JqLmxvY2FsV2Vla051bWJlcjtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKG9iai5sb2NhbFdlZWtZZWFyKSkgb2JqLndlZWtZZWFyID0gb2JqLmxvY2FsV2Vla1llYXI7XG4gICAgZGVsZXRlIG9iai5sb2NhbFdlZWtkYXk7XG4gICAgZGVsZXRlIG9iai5sb2NhbFdlZWtOdW1iZXI7XG4gICAgZGVsZXRlIG9iai5sb2NhbFdlZWtZZWFyO1xuICAgIHJldHVybiB7XG4gICAgICBtaW5EYXlzSW5GaXJzdFdlZWs6IGxvYy5nZXRNaW5EYXlzSW5GaXJzdFdlZWsoKSxcbiAgICAgIHN0YXJ0T2ZXZWVrOiBsb2MuZ2V0U3RhcnRPZldlZWsoKSxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IG1pbkRheXNJbkZpcnN0V2VlazogNCwgc3RhcnRPZldlZWs6IDEgfTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzSW52YWxpZFdlZWtEYXRhKG9iaiwgbWluRGF5c0luRmlyc3RXZWVrID0gNCwgc3RhcnRPZldlZWsgPSAxKSB7XG4gIGNvbnN0IHZhbGlkWWVhciA9IGlzSW50ZWdlcihvYmoud2Vla1llYXIpLFxuICAgIHZhbGlkV2VlayA9IGludGVnZXJCZXR3ZWVuKFxuICAgICAgb2JqLndlZWtOdW1iZXIsXG4gICAgICAxLFxuICAgICAgd2Vla3NJbldlZWtZZWFyKG9iai53ZWVrWWVhciwgbWluRGF5c0luRmlyc3RXZWVrLCBzdGFydE9mV2VlaylcbiAgICApLFxuICAgIHZhbGlkV2Vla2RheSA9IGludGVnZXJCZXR3ZWVuKG9iai53ZWVrZGF5LCAxLCA3KTtcblxuICBpZiAoIXZhbGlkWWVhcikge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIndlZWtZZWFyXCIsIG9iai53ZWVrWWVhcik7XG4gIH0gZWxzZSBpZiAoIXZhbGlkV2Vlaykge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIndlZWtcIiwgb2JqLndlZWtOdW1iZXIpO1xuICB9IGVsc2UgaWYgKCF2YWxpZFdlZWtkYXkpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJ3ZWVrZGF5XCIsIG9iai53ZWVrZGF5KTtcbiAgfSBlbHNlIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0ludmFsaWRPcmRpbmFsRGF0YShvYmopIHtcbiAgY29uc3QgdmFsaWRZZWFyID0gaXNJbnRlZ2VyKG9iai55ZWFyKSxcbiAgICB2YWxpZE9yZGluYWwgPSBpbnRlZ2VyQmV0d2VlbihvYmoub3JkaW5hbCwgMSwgZGF5c0luWWVhcihvYmoueWVhcikpO1xuXG4gIGlmICghdmFsaWRZZWFyKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwieWVhclwiLCBvYmoueWVhcik7XG4gIH0gZWxzZSBpZiAoIXZhbGlkT3JkaW5hbCkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIm9yZGluYWxcIiwgb2JqLm9yZGluYWwpO1xuICB9IGVsc2UgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzSW52YWxpZEdyZWdvcmlhbkRhdGEob2JqKSB7XG4gIGNvbnN0IHZhbGlkWWVhciA9IGlzSW50ZWdlcihvYmoueWVhciksXG4gICAgdmFsaWRNb250aCA9IGludGVnZXJCZXR3ZWVuKG9iai5tb250aCwgMSwgMTIpLFxuICAgIHZhbGlkRGF5ID0gaW50ZWdlckJldHdlZW4ob2JqLmRheSwgMSwgZGF5c0luTW9udGgob2JqLnllYXIsIG9iai5tb250aCkpO1xuXG4gIGlmICghdmFsaWRZZWFyKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwieWVhclwiLCBvYmoueWVhcik7XG4gIH0gZWxzZSBpZiAoIXZhbGlkTW9udGgpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJtb250aFwiLCBvYmoubW9udGgpO1xuICB9IGVsc2UgaWYgKCF2YWxpZERheSkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcImRheVwiLCBvYmouZGF5KTtcbiAgfSBlbHNlIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0ludmFsaWRUaW1lRGF0YShvYmopIHtcbiAgY29uc3QgeyBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQgfSA9IG9iajtcbiAgY29uc3QgdmFsaWRIb3VyID1cbiAgICAgIGludGVnZXJCZXR3ZWVuKGhvdXIsIDAsIDIzKSB8fFxuICAgICAgKGhvdXIgPT09IDI0ICYmIG1pbnV0ZSA9PT0gMCAmJiBzZWNvbmQgPT09IDAgJiYgbWlsbGlzZWNvbmQgPT09IDApLFxuICAgIHZhbGlkTWludXRlID0gaW50ZWdlckJldHdlZW4obWludXRlLCAwLCA1OSksXG4gICAgdmFsaWRTZWNvbmQgPSBpbnRlZ2VyQmV0d2VlbihzZWNvbmQsIDAsIDU5KSxcbiAgICB2YWxpZE1pbGxpc2Vjb25kID0gaW50ZWdlckJldHdlZW4obWlsbGlzZWNvbmQsIDAsIDk5OSk7XG5cbiAgaWYgKCF2YWxpZEhvdXIpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJob3VyXCIsIGhvdXIpO1xuICB9IGVsc2UgaWYgKCF2YWxpZE1pbnV0ZSkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICB9IGVsc2UgaWYgKCF2YWxpZFNlY29uZCkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcInNlY29uZFwiLCBzZWNvbmQpO1xuICB9IGVsc2UgaWYgKCF2YWxpZE1pbGxpc2Vjb25kKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwibWlsbGlzZWNvbmRcIiwgbWlsbGlzZWNvbmQpO1xuICB9IGVsc2UgcmV0dXJuIGZhbHNlO1xufVxuIiwiaW1wb3J0IER1cmF0aW9uIGZyb20gXCIuLi9kdXJhdGlvbi5qc1wiO1xuXG5mdW5jdGlvbiBkYXlEaWZmKGVhcmxpZXIsIGxhdGVyKSB7XG4gIGNvbnN0IHV0Y0RheVN0YXJ0ID0gKGR0KSA9PiBkdC50b1VUQygwLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSkuc3RhcnRPZihcImRheVwiKS52YWx1ZU9mKCksXG4gICAgbXMgPSB1dGNEYXlTdGFydChsYXRlcikgLSB1dGNEYXlTdGFydChlYXJsaWVyKTtcbiAgcmV0dXJuIE1hdGguZmxvb3IoRHVyYXRpb24uZnJvbU1pbGxpcyhtcykuYXMoXCJkYXlzXCIpKTtcbn1cblxuZnVuY3Rpb24gaGlnaE9yZGVyRGlmZnMoY3Vyc29yLCBsYXRlciwgdW5pdHMpIHtcbiAgY29uc3QgZGlmZmVycyA9IFtcbiAgICBbXCJ5ZWFyc1wiLCAoYSwgYikgPT4gYi55ZWFyIC0gYS55ZWFyXSxcbiAgICBbXCJxdWFydGVyc1wiLCAoYSwgYikgPT4gYi5xdWFydGVyIC0gYS5xdWFydGVyICsgKGIueWVhciAtIGEueWVhcikgKiA0XSxcbiAgICBbXCJtb250aHNcIiwgKGEsIGIpID0+IGIubW9udGggLSBhLm1vbnRoICsgKGIueWVhciAtIGEueWVhcikgKiAxMl0sXG4gICAgW1xuICAgICAgXCJ3ZWVrc1wiLFxuICAgICAgKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgZGF5cyA9IGRheURpZmYoYSwgYik7XG4gICAgICAgIHJldHVybiAoZGF5cyAtIChkYXlzICUgNykpIC8gNztcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbXCJkYXlzXCIsIGRheURpZmZdLFxuICBdO1xuXG4gIGNvbnN0IHJlc3VsdHMgPSB7fTtcbiAgY29uc3QgZWFybGllciA9IGN1cnNvcjtcbiAgbGV0IGxvd2VzdE9yZGVyLCBoaWdoV2F0ZXI7XG5cbiAgLyogVGhpcyBsb29wIHRyaWVzIHRvIGRpZmYgdXNpbmcgbGFyZ2VyIHVuaXRzIGZpcnN0LlxuICAgICBJZiB3ZSBvdmVyc2hvb3QsIHdlIGJhY2t0cmFjayBhbmQgdHJ5IHRoZSBuZXh0IHNtYWxsZXIgdW5pdC5cbiAgICAgXCJjdXJzb3JcIiBzdGFydHMgb3V0IGF0IHRoZSBlYXJsaWVyIHRpbWVzdGFtcCBhbmQgbW92ZXMgY2xvc2VyIGFuZCBjbG9zZXIgdG8gXCJsYXRlclwiXG4gICAgIGFzIHdlIHVzZSBzbWFsbGVyIGFuZCBzbWFsbGVyIHVuaXRzLlxuICAgICBoaWdoV2F0ZXIga2VlcHMgdHJhY2sgb2Ygd2hlcmUgd2Ugd291bGQgYmUgaWYgd2UgYWRkZWQgb25lIG1vcmUgb2YgdGhlIHNtYWxsZXN0IHVuaXQsXG4gICAgIHRoaXMgaXMgdXNlZCBsYXRlciB0byBwb3RlbnRpYWxseSBjb252ZXJ0IGFueSBkaWZmZXJlbmNlIHNtYWxsZXIgdGhhbiB0aGUgc21hbGxlc3QgaGlnaGVyIG9yZGVyIHVuaXRcbiAgICAgaW50byBhIGZyYWN0aW9uIG9mIHRoYXQgc21hbGxlc3QgaGlnaGVyIG9yZGVyIHVuaXRcbiAgKi9cbiAgZm9yIChjb25zdCBbdW5pdCwgZGlmZmVyXSBvZiBkaWZmZXJzKSB7XG4gICAgaWYgKHVuaXRzLmluZGV4T2YodW5pdCkgPj0gMCkge1xuICAgICAgbG93ZXN0T3JkZXIgPSB1bml0O1xuXG4gICAgICByZXN1bHRzW3VuaXRdID0gZGlmZmVyKGN1cnNvciwgbGF0ZXIpO1xuICAgICAgaGlnaFdhdGVyID0gZWFybGllci5wbHVzKHJlc3VsdHMpO1xuXG4gICAgICBpZiAoaGlnaFdhdGVyID4gbGF0ZXIpIHtcbiAgICAgICAgLy8gd2Ugb3ZlcnNob3QgdGhlIGVuZCBwb2ludCwgYmFja3RyYWNrIGN1cnNvciBieSAxXG4gICAgICAgIHJlc3VsdHNbdW5pdF0tLTtcbiAgICAgICAgY3Vyc29yID0gZWFybGllci5wbHVzKHJlc3VsdHMpO1xuXG4gICAgICAgIC8vIGlmIHdlIGFyZSBzdGlsbCBvdmVyc2hvb3Rpbmcgbm93LCB3ZSBuZWVkIHRvIGJhY2t0cmFjayBhZ2FpblxuICAgICAgICAvLyB0aGlzIGhhcHBlbnMgaW4gY2VydGFpbiBzaXR1YXRpb25zIHdoZW4gZGlmZmluZyB0aW1lcyBpbiBkaWZmZXJlbnQgem9uZXMsXG4gICAgICAgIC8vIGJlY2F1c2UgdGhpcyBjYWxjdWxhdGlvbiBpZ25vcmVzIHRpbWUgem9uZXNcbiAgICAgICAgaWYgKGN1cnNvciA+IGxhdGVyKSB7XG4gICAgICAgICAgLy8ga2VlcCB0aGUgXCJvdmVyc2hvdCBieSAxXCIgYXJvdW5kIGFzIGhpZ2hXYXRlclxuICAgICAgICAgIGhpZ2hXYXRlciA9IGN1cnNvcjtcbiAgICAgICAgICAvLyBiYWNrdHJhY2sgY3Vyc29yIGJ5IDFcbiAgICAgICAgICByZXN1bHRzW3VuaXRdLS07XG4gICAgICAgICAgY3Vyc29yID0gZWFybGllci5wbHVzKHJlc3VsdHMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJzb3IgPSBoaWdoV2F0ZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtjdXJzb3IsIHJlc3VsdHMsIGhpZ2hXYXRlciwgbG93ZXN0T3JkZXJdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoZWFybGllciwgbGF0ZXIsIHVuaXRzLCBvcHRzKSB7XG4gIGxldCBbY3Vyc29yLCByZXN1bHRzLCBoaWdoV2F0ZXIsIGxvd2VzdE9yZGVyXSA9IGhpZ2hPcmRlckRpZmZzKGVhcmxpZXIsIGxhdGVyLCB1bml0cyk7XG5cbiAgY29uc3QgcmVtYWluaW5nTWlsbGlzID0gbGF0ZXIgLSBjdXJzb3I7XG5cbiAgY29uc3QgbG93ZXJPcmRlclVuaXRzID0gdW5pdHMuZmlsdGVyKFxuICAgICh1KSA9PiBbXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCIsIFwibWlsbGlzZWNvbmRzXCJdLmluZGV4T2YodSkgPj0gMFxuICApO1xuXG4gIGlmIChsb3dlck9yZGVyVW5pdHMubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGhpZ2hXYXRlciA8IGxhdGVyKSB7XG4gICAgICBoaWdoV2F0ZXIgPSBjdXJzb3IucGx1cyh7IFtsb3dlc3RPcmRlcl06IDEgfSk7XG4gICAgfVxuXG4gICAgaWYgKGhpZ2hXYXRlciAhPT0gY3Vyc29yKSB7XG4gICAgICByZXN1bHRzW2xvd2VzdE9yZGVyXSA9IChyZXN1bHRzW2xvd2VzdE9yZGVyXSB8fCAwKSArIHJlbWFpbmluZ01pbGxpcyAvIChoaWdoV2F0ZXIgLSBjdXJzb3IpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGR1cmF0aW9uID0gRHVyYXRpb24uZnJvbU9iamVjdChyZXN1bHRzLCBvcHRzKTtcblxuICBpZiAobG93ZXJPcmRlclVuaXRzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gRHVyYXRpb24uZnJvbU1pbGxpcyhyZW1haW5pbmdNaWxsaXMsIG9wdHMpXG4gICAgICAuc2hpZnRUbyguLi5sb3dlck9yZGVyVW5pdHMpXG4gICAgICAucGx1cyhkdXJhdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGR1cmF0aW9uO1xuICB9XG59XG4iLCJjb25zdCBudW1iZXJpbmdTeXN0ZW1zID0ge1xuICBhcmFiOiBcIltcXHUwNjYwLVxcdTA2NjldXCIsXG4gIGFyYWJleHQ6IFwiW1xcdTA2RjAtXFx1MDZGOV1cIixcbiAgYmFsaTogXCJbXFx1MUI1MC1cXHUxQjU5XVwiLFxuICBiZW5nOiBcIltcXHUwOUU2LVxcdTA5RUZdXCIsXG4gIGRldmE6IFwiW1xcdTA5NjYtXFx1MDk2Rl1cIixcbiAgZnVsbHdpZGU6IFwiW1xcdUZGMTAtXFx1RkYxOV1cIixcbiAgZ3VqcjogXCJbXFx1MEFFNi1cXHUwQUVGXVwiLFxuICBoYW5pZGVjOiBcIlvjgId85LiAfOS6jHzkuIl85ZubfOS6lHzlha185LiDfOWFq3zkuZ1dXCIsXG4gIGtobXI6IFwiW1xcdTE3RTAtXFx1MTdFOV1cIixcbiAga25kYTogXCJbXFx1MENFNi1cXHUwQ0VGXVwiLFxuICBsYW9vOiBcIltcXHUwRUQwLVxcdTBFRDldXCIsXG4gIGxpbWI6IFwiW1xcdTE5NDYtXFx1MTk0Rl1cIixcbiAgbWx5bTogXCJbXFx1MEQ2Ni1cXHUwRDZGXVwiLFxuICBtb25nOiBcIltcXHUxODEwLVxcdTE4MTldXCIsXG4gIG15bXI6IFwiW1xcdTEwNDAtXFx1MTA0OV1cIixcbiAgb3J5YTogXCJbXFx1MEI2Ni1cXHUwQjZGXVwiLFxuICB0YW1sZGVjOiBcIltcXHUwQkU2LVxcdTBCRUZdXCIsXG4gIHRlbHU6IFwiW1xcdTBDNjYtXFx1MEM2Rl1cIixcbiAgdGhhaTogXCJbXFx1MEU1MC1cXHUwRTU5XVwiLFxuICB0aWJ0OiBcIltcXHUwRjIwLVxcdTBGMjldXCIsXG4gIGxhdG46IFwiXFxcXGRcIixcbn07XG5cbmNvbnN0IG51bWJlcmluZ1N5c3RlbXNVVEYxNiA9IHtcbiAgYXJhYjogWzE2MzIsIDE2NDFdLFxuICBhcmFiZXh0OiBbMTc3NiwgMTc4NV0sXG4gIGJhbGk6IFs2OTkyLCA3MDAxXSxcbiAgYmVuZzogWzI1MzQsIDI1NDNdLFxuICBkZXZhOiBbMjQwNiwgMjQxNV0sXG4gIGZ1bGx3aWRlOiBbNjUyOTYsIDY1MzAzXSxcbiAgZ3VqcjogWzI3OTAsIDI3OTldLFxuICBraG1yOiBbNjExMiwgNjEyMV0sXG4gIGtuZGE6IFszMzAyLCAzMzExXSxcbiAgbGFvbzogWzM3OTIsIDM4MDFdLFxuICBsaW1iOiBbNjQ3MCwgNjQ3OV0sXG4gIG1seW06IFszNDMwLCAzNDM5XSxcbiAgbW9uZzogWzYxNjAsIDYxNjldLFxuICBteW1yOiBbNDE2MCwgNDE2OV0sXG4gIG9yeWE6IFsyOTE4LCAyOTI3XSxcbiAgdGFtbGRlYzogWzMwNDYsIDMwNTVdLFxuICB0ZWx1OiBbMzE3NCwgMzE4M10sXG4gIHRoYWk6IFszNjY0LCAzNjczXSxcbiAgdGlidDogWzM4NzIsIDM4ODFdLFxufTtcblxuY29uc3QgaGFuaWRlY0NoYXJzID0gbnVtYmVyaW5nU3lzdGVtcy5oYW5pZGVjLnJlcGxhY2UoL1tcXFt8XFxdXS9nLCBcIlwiKS5zcGxpdChcIlwiKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGlnaXRzKHN0cikge1xuICBsZXQgdmFsdWUgPSBwYXJzZUludChzdHIsIDEwKTtcbiAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgIHZhbHVlID0gXCJcIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuXG4gICAgICBpZiAoc3RyW2ldLnNlYXJjaChudW1iZXJpbmdTeXN0ZW1zLmhhbmlkZWMpICE9PSAtMSkge1xuICAgICAgICB2YWx1ZSArPSBoYW5pZGVjQ2hhcnMuaW5kZXhPZihzdHJbaV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbnVtYmVyaW5nU3lzdGVtc1VURjE2KSB7XG4gICAgICAgICAgY29uc3QgW21pbiwgbWF4XSA9IG51bWJlcmluZ1N5c3RlbXNVVEYxNltrZXldO1xuICAgICAgICAgIGlmIChjb2RlID49IG1pbiAmJiBjb2RlIDw9IG1heCkge1xuICAgICAgICAgICAgdmFsdWUgKz0gY29kZSAtIG1pbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbi8vIGNhY2hlIG9mIHtudW1iZXJpbmdTeXN0ZW06IHthcHBlbmQ6IHJlZ2V4fX1cbmxldCBkaWdpdFJlZ2V4Q2FjaGUgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiByZXNldERpZ2l0UmVnZXhDYWNoZSgpIHtcbiAgZGlnaXRSZWdleENhY2hlID0ge307XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWdpdFJlZ2V4KHsgbnVtYmVyaW5nU3lzdGVtIH0sIGFwcGVuZCA9IFwiXCIpIHtcbiAgY29uc3QgbnMgPSBudW1iZXJpbmdTeXN0ZW0gfHwgXCJsYXRuXCI7XG5cbiAgaWYgKCFkaWdpdFJlZ2V4Q2FjaGVbbnNdKSB7XG4gICAgZGlnaXRSZWdleENhY2hlW25zXSA9IHt9O1xuICB9XG4gIGlmICghZGlnaXRSZWdleENhY2hlW25zXVthcHBlbmRdKSB7XG4gICAgZGlnaXRSZWdleENhY2hlW25zXVthcHBlbmRdID0gbmV3IFJlZ0V4cChgJHtudW1iZXJpbmdTeXN0ZW1zW25zXX0ke2FwcGVuZH1gKTtcbiAgfVxuXG4gIHJldHVybiBkaWdpdFJlZ2V4Q2FjaGVbbnNdW2FwcGVuZF07XG59XG4iLCJpbXBvcnQgKiBhcyBGb3JtYXRzIGZyb20gXCIuL2Zvcm1hdHMuanNcIjtcbmltcG9ydCB7IHBpY2sgfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShvYmopIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgT2JqZWN0LmtleXMob2JqKS5zb3J0KCkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGNvbnN0IG1vbnRoc0xvbmcgPSBbXG4gIFwiSmFudWFyeVwiLFxuICBcIkZlYnJ1YXJ5XCIsXG4gIFwiTWFyY2hcIixcbiAgXCJBcHJpbFwiLFxuICBcIk1heVwiLFxuICBcIkp1bmVcIixcbiAgXCJKdWx5XCIsXG4gIFwiQXVndXN0XCIsXG4gIFwiU2VwdGVtYmVyXCIsXG4gIFwiT2N0b2JlclwiLFxuICBcIk5vdmVtYmVyXCIsXG4gIFwiRGVjZW1iZXJcIixcbl07XG5cbmV4cG9ydCBjb25zdCBtb250aHNTaG9ydCA9IFtcbiAgXCJKYW5cIixcbiAgXCJGZWJcIixcbiAgXCJNYXJcIixcbiAgXCJBcHJcIixcbiAgXCJNYXlcIixcbiAgXCJKdW5cIixcbiAgXCJKdWxcIixcbiAgXCJBdWdcIixcbiAgXCJTZXBcIixcbiAgXCJPY3RcIixcbiAgXCJOb3ZcIixcbiAgXCJEZWNcIixcbl07XG5cbmV4cG9ydCBjb25zdCBtb250aHNOYXJyb3cgPSBbXCJKXCIsIFwiRlwiLCBcIk1cIiwgXCJBXCIsIFwiTVwiLCBcIkpcIiwgXCJKXCIsIFwiQVwiLCBcIlNcIiwgXCJPXCIsIFwiTlwiLCBcIkRcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb250aHMobGVuZ3RoKSB7XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIFsuLi5tb250aHNOYXJyb3ddO1xuICAgIGNhc2UgXCJzaG9ydFwiOlxuICAgICAgcmV0dXJuIFsuLi5tb250aHNTaG9ydF07XG4gICAgY2FzZSBcImxvbmdcIjpcbiAgICAgIHJldHVybiBbLi4ubW9udGhzTG9uZ107XG4gICAgY2FzZSBcIm51bWVyaWNcIjpcbiAgICAgIHJldHVybiBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCIsIFwiOFwiLCBcIjlcIiwgXCIxMFwiLCBcIjExXCIsIFwiMTJcIl07XG4gICAgY2FzZSBcIjItZGlnaXRcIjpcbiAgICAgIHJldHVybiBbXCIwMVwiLCBcIjAyXCIsIFwiMDNcIiwgXCIwNFwiLCBcIjA1XCIsIFwiMDZcIiwgXCIwN1wiLCBcIjA4XCIsIFwiMDlcIiwgXCIxMFwiLCBcIjExXCIsIFwiMTJcIl07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB3ZWVrZGF5c0xvbmcgPSBbXG4gIFwiTW9uZGF5XCIsXG4gIFwiVHVlc2RheVwiLFxuICBcIldlZG5lc2RheVwiLFxuICBcIlRodXJzZGF5XCIsXG4gIFwiRnJpZGF5XCIsXG4gIFwiU2F0dXJkYXlcIixcbiAgXCJTdW5kYXlcIixcbl07XG5cbmV4cG9ydCBjb25zdCB3ZWVrZGF5c1Nob3J0ID0gW1wiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCIsIFwiU3VuXCJdO1xuXG5leHBvcnQgY29uc3Qgd2Vla2RheXNOYXJyb3cgPSBbXCJNXCIsIFwiVFwiLCBcIldcIiwgXCJUXCIsIFwiRlwiLCBcIlNcIiwgXCJTXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gd2Vla2RheXMobGVuZ3RoKSB7XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIFsuLi53ZWVrZGF5c05hcnJvd107XG4gICAgY2FzZSBcInNob3J0XCI6XG4gICAgICByZXR1cm4gWy4uLndlZWtkYXlzU2hvcnRdO1xuICAgIGNhc2UgXCJsb25nXCI6XG4gICAgICByZXR1cm4gWy4uLndlZWtkYXlzTG9uZ107XG4gICAgY2FzZSBcIm51bWVyaWNcIjpcbiAgICAgIHJldHVybiBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCJdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbWVyaWRpZW1zID0gW1wiQU1cIiwgXCJQTVwiXTtcblxuZXhwb3J0IGNvbnN0IGVyYXNMb25nID0gW1wiQmVmb3JlIENocmlzdFwiLCBcIkFubm8gRG9taW5pXCJdO1xuXG5leHBvcnQgY29uc3QgZXJhc1Nob3J0ID0gW1wiQkNcIiwgXCJBRFwiXTtcblxuZXhwb3J0IGNvbnN0IGVyYXNOYXJyb3cgPSBbXCJCXCIsIFwiQVwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVyYXMobGVuZ3RoKSB7XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIFsuLi5lcmFzTmFycm93XTtcbiAgICBjYXNlIFwic2hvcnRcIjpcbiAgICAgIHJldHVybiBbLi4uZXJhc1Nob3J0XTtcbiAgICBjYXNlIFwibG9uZ1wiOlxuICAgICAgcmV0dXJuIFsuLi5lcmFzTG9uZ107XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJpZGllbUZvckRhdGVUaW1lKGR0KSB7XG4gIHJldHVybiBtZXJpZGllbXNbZHQuaG91ciA8IDEyID8gMCA6IDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2Vla2RheUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIHdlZWtkYXlzKGxlbmd0aClbZHQud2Vla2RheSAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9udGhGb3JEYXRlVGltZShkdCwgbGVuZ3RoKSB7XG4gIHJldHVybiBtb250aHMobGVuZ3RoKVtkdC5tb250aCAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJhRm9yRGF0ZVRpbWUoZHQsIGxlbmd0aCkge1xuICByZXR1cm4gZXJhcyhsZW5ndGgpW2R0LnllYXIgPCAwID8gMCA6IDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmVUaW1lKHVuaXQsIGNvdW50LCBudW1lcmljID0gXCJhbHdheXNcIiwgbmFycm93ID0gZmFsc2UpIHtcbiAgY29uc3QgdW5pdHMgPSB7XG4gICAgeWVhcnM6IFtcInllYXJcIiwgXCJ5ci5cIl0sXG4gICAgcXVhcnRlcnM6IFtcInF1YXJ0ZXJcIiwgXCJxdHIuXCJdLFxuICAgIG1vbnRoczogW1wibW9udGhcIiwgXCJtby5cIl0sXG4gICAgd2Vla3M6IFtcIndlZWtcIiwgXCJ3ay5cIl0sXG4gICAgZGF5czogW1wiZGF5XCIsIFwiZGF5XCIsIFwiZGF5c1wiXSxcbiAgICBob3VyczogW1wiaG91clwiLCBcImhyLlwiXSxcbiAgICBtaW51dGVzOiBbXCJtaW51dGVcIiwgXCJtaW4uXCJdLFxuICAgIHNlY29uZHM6IFtcInNlY29uZFwiLCBcInNlYy5cIl0sXG4gIH07XG5cbiAgY29uc3QgbGFzdGFibGUgPSBbXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCJdLmluZGV4T2YodW5pdCkgPT09IC0xO1xuXG4gIGlmIChudW1lcmljID09PSBcImF1dG9cIiAmJiBsYXN0YWJsZSkge1xuICAgIGNvbnN0IGlzRGF5ID0gdW5pdCA9PT0gXCJkYXlzXCI7XG4gICAgc3dpdGNoIChjb3VudCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gaXNEYXkgPyBcInRvbW9ycm93XCIgOiBgbmV4dCAke3VuaXRzW3VuaXRdWzBdfWA7XG4gICAgICBjYXNlIC0xOlxuICAgICAgICByZXR1cm4gaXNEYXkgPyBcInllc3RlcmRheVwiIDogYGxhc3QgJHt1bml0c1t1bml0XVswXX1gO1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gaXNEYXkgPyBcInRvZGF5XCIgOiBgdGhpcyAke3VuaXRzW3VuaXRdWzBdfWA7XG4gICAgICBkZWZhdWx0OiAvLyBmYWxsIHRocm91Z2hcbiAgICB9XG4gIH1cblxuICBjb25zdCBpc0luUGFzdCA9IE9iamVjdC5pcyhjb3VudCwgLTApIHx8IGNvdW50IDwgMCxcbiAgICBmbXRWYWx1ZSA9IE1hdGguYWJzKGNvdW50KSxcbiAgICBzaW5ndWxhciA9IGZtdFZhbHVlID09PSAxLFxuICAgIGxpbFVuaXRzID0gdW5pdHNbdW5pdF0sXG4gICAgZm10VW5pdCA9IG5hcnJvd1xuICAgICAgPyBzaW5ndWxhclxuICAgICAgICA/IGxpbFVuaXRzWzFdXG4gICAgICAgIDogbGlsVW5pdHNbMl0gfHwgbGlsVW5pdHNbMV1cbiAgICAgIDogc2luZ3VsYXJcbiAgICAgID8gdW5pdHNbdW5pdF1bMF1cbiAgICAgIDogdW5pdDtcbiAgcmV0dXJuIGlzSW5QYXN0ID8gYCR7Zm10VmFsdWV9ICR7Zm10VW5pdH0gYWdvYCA6IGBpbiAke2ZtdFZhbHVlfSAke2ZtdFVuaXR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFN0cmluZyhrbm93bkZvcm1hdCkge1xuICAvLyB0aGVzZSBhbGwgaGF2ZSB0aGUgb2Zmc2V0cyByZW1vdmVkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlbVxuICAvLyB3aXRob3V0IGFsbCB0aGUgaW50bCBzdHVmZiB0aGlzIGlzIGJhY2tmaWxsaW5nXG4gIGNvbnN0IGZpbHRlcmVkID0gcGljayhrbm93bkZvcm1hdCwgW1xuICAgICAgXCJ3ZWVrZGF5XCIsXG4gICAgICBcImVyYVwiLFxuICAgICAgXCJ5ZWFyXCIsXG4gICAgICBcIm1vbnRoXCIsXG4gICAgICBcImRheVwiLFxuICAgICAgXCJob3VyXCIsXG4gICAgICBcIm1pbnV0ZVwiLFxuICAgICAgXCJzZWNvbmRcIixcbiAgICAgIFwidGltZVpvbmVOYW1lXCIsXG4gICAgICBcImhvdXJDeWNsZVwiLFxuICAgIF0pLFxuICAgIGtleSA9IHN0cmluZ2lmeShmaWx0ZXJlZCksXG4gICAgZGF0ZVRpbWVIdWdlID0gXCJFRUVFLCBMTExMIGQsIHl5eXksIGg6bW0gYVwiO1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURV9TSE9SVCk6XG4gICAgICByZXR1cm4gXCJNL2QveXl5eVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURV9NRUQpOlxuICAgICAgcmV0dXJuIFwiTExMIGQsIHl5eXlcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVfTUVEX1dJVEhfV0VFS0RBWSk6XG4gICAgICByZXR1cm4gXCJFRUUsIExMTCBkLCB5eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFX0ZVTEwpOlxuICAgICAgcmV0dXJuIFwiTExMTCBkLCB5eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFX0hVR0UpOlxuICAgICAgcmV0dXJuIFwiRUVFRSwgTExMTCBkLCB5eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5USU1FX1NJTVBMRSk6XG4gICAgICByZXR1cm4gXCJoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcImg6bW06c3MgYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV9XSVRIX1NIT1JUX09GRlNFVCk6XG4gICAgICByZXR1cm4gXCJoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfV0lUSF9MT05HX09GRlNFVCk6XG4gICAgICByZXR1cm4gXCJoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfMjRfU0lNUExFKTpcbiAgICAgIHJldHVybiBcIkhIOm1tXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5USU1FXzI0X1dJVEhfU0VDT05EUyk6XG4gICAgICByZXR1cm4gXCJISDptbTpzc1wiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCk6XG4gICAgICByZXR1cm4gXCJISDptbVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VUKTpcbiAgICAgIHJldHVybiBcIkhIOm1tXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9TSE9SVCk6XG4gICAgICByZXR1cm4gXCJNL2QveXl5eSwgaDptbSBhXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9NRUQpOlxuICAgICAgcmV0dXJuIFwiTExMIGQsIHl5eXksIGg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfRlVMTCk6XG4gICAgICByZXR1cm4gXCJMTExMIGQsIHl5eXksIGg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfSFVHRSk6XG4gICAgICByZXR1cm4gZGF0ZVRpbWVIdWdlO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcIk0vZC95eXl5LCBoOm1tOnNzIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFMpOlxuICAgICAgcmV0dXJuIFwiTExMIGQsIHl5eXksIGg6bW06c3MgYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfV0VFS0RBWSk6XG4gICAgICByZXR1cm4gXCJFRUUsIGQgTExMIHl5eXksIGg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMpOlxuICAgICAgcmV0dXJuIFwiTExMTCBkLCB5eXl5LCBoOm1tOnNzIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcIkVFRUUsIExMTEwgZCwgeXl5eSwgaDptbTpzcyBhXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBkYXRlVGltZUh1Z2U7XG4gIH1cbn1cbiIsIi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5jb25zdCBuID0gXCJudW1lcmljXCIsXG4gIHMgPSBcInNob3J0XCIsXG4gIGwgPSBcImxvbmdcIjtcblxuZXhwb3J0IGNvbnN0IERBVEVfU0hPUlQgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBuLFxuICBkYXk6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURV9NRUQgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBzLFxuICBkYXk6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURV9NRURfV0lUSF9XRUVLREFZID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogcyxcbiAgZGF5OiBuLFxuICB3ZWVrZGF5OiBzLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVfRlVMTCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFX0hVR0UgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBsLFxuICBkYXk6IG4sXG4gIHdlZWtkYXk6IGwsXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV9TSU1QTEUgPSB7XG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FX1dJVEhfU0VDT05EUyA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV9XSVRIX1NIT1JUX09GRlNFVCA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIHRpbWVab25lTmFtZTogcyxcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FX1dJVEhfTE9OR19PRkZTRVQgPSB7XG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICB0aW1lWm9uZU5hbWU6IGwsXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV8yNF9TSU1QTEUgPSB7XG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgaG91ckN5Y2xlOiBcImgyM1wiLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfMjRfV0lUSF9TRUNPTkRTID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbiAgaG91ckN5Y2xlOiBcImgyM1wiLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfMjRfV0lUSF9TSE9SVF9PRkZTRVQgPSB7XG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICBob3VyQ3ljbGU6IFwiaDIzXCIsXG4gIHRpbWVab25lTmFtZTogcyxcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FXzI0X1dJVEhfTE9OR19PRkZTRVQgPSB7XG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICBob3VyQ3ljbGU6IFwiaDIzXCIsXG4gIHRpbWVab25lTmFtZTogbCxcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9TSE9SVCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IG4sXG4gIGRheTogbixcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUyA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IG4sXG4gIGRheTogbixcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfTUVEID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogcyxcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUyA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IHMsXG4gIGRheTogbixcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfTUVEX1dJVEhfV0VFS0RBWSA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IHMsXG4gIGRheTogbixcbiAgd2Vla2RheTogcyxcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX0ZVTEwgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBsLFxuICBkYXk6IG4sXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgdGltZVpvbmVOYW1lOiBzLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbCxcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbiAgdGltZVpvbmVOYW1lOiBzLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX0hVR0UgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBsLFxuICBkYXk6IG4sXG4gIHdlZWtkYXk6IGwsXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgdGltZVpvbmVOYW1lOiBsLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbCxcbiAgZGF5OiBuLFxuICB3ZWVrZGF5OiBsLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbiAgdGltZVpvbmVOYW1lOiBsLFxufTtcbiIsImltcG9ydCAqIGFzIEVuZ2xpc2ggZnJvbSBcIi4vZW5nbGlzaC5qc1wiO1xuaW1wb3J0ICogYXMgRm9ybWF0cyBmcm9tIFwiLi9mb3JtYXRzLmpzXCI7XG5pbXBvcnQgeyBwYWRTdGFydCB9IGZyb20gXCIuL3V0aWwuanNcIjtcblxuZnVuY3Rpb24gc3RyaW5naWZ5VG9rZW5zKHNwbGl0cywgdG9rZW5Ub1N0cmluZykge1xuICBsZXQgcyA9IFwiXCI7XG4gIGZvciAoY29uc3QgdG9rZW4gb2Ygc3BsaXRzKSB7XG4gICAgaWYgKHRva2VuLmxpdGVyYWwpIHtcbiAgICAgIHMgKz0gdG9rZW4udmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBzICs9IHRva2VuVG9TdHJpbmcodG9rZW4udmFsKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHM7XG59XG5cbmNvbnN0IG1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHMgPSB7XG4gIEQ6IEZvcm1hdHMuREFURV9TSE9SVCxcbiAgREQ6IEZvcm1hdHMuREFURV9NRUQsXG4gIERERDogRm9ybWF0cy5EQVRFX0ZVTEwsXG4gIEREREQ6IEZvcm1hdHMuREFURV9IVUdFLFxuICB0OiBGb3JtYXRzLlRJTUVfU0lNUExFLFxuICB0dDogRm9ybWF0cy5USU1FX1dJVEhfU0VDT05EUyxcbiAgdHR0OiBGb3JtYXRzLlRJTUVfV0lUSF9TSE9SVF9PRkZTRVQsXG4gIHR0dHQ6IEZvcm1hdHMuVElNRV9XSVRIX0xPTkdfT0ZGU0VULFxuICBUOiBGb3JtYXRzLlRJTUVfMjRfU0lNUExFLFxuICBUVDogRm9ybWF0cy5USU1FXzI0X1dJVEhfU0VDT05EUyxcbiAgVFRUOiBGb3JtYXRzLlRJTUVfMjRfV0lUSF9TSE9SVF9PRkZTRVQsXG4gIFRUVFQ6IEZvcm1hdHMuVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VULFxuICBmOiBGb3JtYXRzLkRBVEVUSU1FX1NIT1JULFxuICBmZjogRm9ybWF0cy5EQVRFVElNRV9NRUQsXG4gIGZmZjogRm9ybWF0cy5EQVRFVElNRV9GVUxMLFxuICBmZmZmOiBGb3JtYXRzLkRBVEVUSU1FX0hVR0UsXG4gIEY6IEZvcm1hdHMuREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTLFxuICBGRjogRm9ybWF0cy5EQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTLFxuICBGRkY6IEZvcm1hdHMuREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMsXG4gIEZGRkY6IEZvcm1hdHMuREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMsXG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRm9ybWF0dGVyIHtcbiAgc3RhdGljIGNyZWF0ZShsb2NhbGUsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgRm9ybWF0dGVyKGxvY2FsZSwgb3B0cyk7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VGb3JtYXQoZm10KSB7XG4gICAgLy8gd2hpdGUtc3BhY2UgaXMgYWx3YXlzIGNvbnNpZGVyZWQgYSBsaXRlcmFsIGluIHVzZXItcHJvdmlkZWQgZm9ybWF0c1xuICAgIC8vIHRoZSBcIiBcIiB0b2tlbiBoYXMgYSBzcGVjaWFsIG1lYW5pbmcgKHNlZSB1bml0Rm9yVG9rZW4pXG5cbiAgICBsZXQgY3VycmVudCA9IG51bGwsXG4gICAgICBjdXJyZW50RnVsbCA9IFwiXCIsXG4gICAgICBicmFja2V0ZWQgPSBmYWxzZTtcbiAgICBjb25zdCBzcGxpdHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZtdC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYyA9IGZtdC5jaGFyQXQoaSk7XG4gICAgICBpZiAoYyA9PT0gXCInXCIpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRGdWxsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzcGxpdHMucHVzaCh7IGxpdGVyYWw6IGJyYWNrZXRlZCB8fCAvXlxccyskLy50ZXN0KGN1cnJlbnRGdWxsKSwgdmFsOiBjdXJyZW50RnVsbCB9KTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gbnVsbDtcbiAgICAgICAgY3VycmVudEZ1bGwgPSBcIlwiO1xuICAgICAgICBicmFja2V0ZWQgPSAhYnJhY2tldGVkO1xuICAgICAgfSBlbHNlIGlmIChicmFja2V0ZWQpIHtcbiAgICAgICAgY3VycmVudEZ1bGwgKz0gYztcbiAgICAgIH0gZWxzZSBpZiAoYyA9PT0gY3VycmVudCkge1xuICAgICAgICBjdXJyZW50RnVsbCArPSBjO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGN1cnJlbnRGdWxsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzcGxpdHMucHVzaCh7IGxpdGVyYWw6IC9eXFxzKyQvLnRlc3QoY3VycmVudEZ1bGwpLCB2YWw6IGN1cnJlbnRGdWxsIH0pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRGdWxsID0gYztcbiAgICAgICAgY3VycmVudCA9IGM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRGdWxsLmxlbmd0aCA+IDApIHtcbiAgICAgIHNwbGl0cy5wdXNoKHsgbGl0ZXJhbDogYnJhY2tldGVkIHx8IC9eXFxzKyQvLnRlc3QoY3VycmVudEZ1bGwpLCB2YWw6IGN1cnJlbnRGdWxsIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBzcGxpdHM7XG4gIH1cblxuICBzdGF0aWMgbWFjcm9Ub2tlblRvRm9ybWF0T3B0cyh0b2tlbikge1xuICAgIHJldHVybiBtYWNyb1Rva2VuVG9Gb3JtYXRPcHRzW3Rva2VuXTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGxvY2FsZSwgZm9ybWF0T3B0cykge1xuICAgIHRoaXMub3B0cyA9IGZvcm1hdE9wdHM7XG4gICAgdGhpcy5sb2MgPSBsb2NhbGU7XG4gICAgdGhpcy5zeXN0ZW1Mb2MgPSBudWxsO1xuICB9XG5cbiAgZm9ybWF0V2l0aFN5c3RlbURlZmF1bHQoZHQsIG9wdHMpIHtcbiAgICBpZiAodGhpcy5zeXN0ZW1Mb2MgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuc3lzdGVtTG9jID0gdGhpcy5sb2MucmVkZWZhdWx0VG9TeXN0ZW0oKTtcbiAgICB9XG4gICAgY29uc3QgZGYgPSB0aGlzLnN5c3RlbUxvYy5kdEZvcm1hdHRlcihkdCwgeyAuLi50aGlzLm9wdHMsIC4uLm9wdHMgfSk7XG4gICAgcmV0dXJuIGRmLmZvcm1hdCgpO1xuICB9XG5cbiAgZHRGb3JtYXR0ZXIoZHQsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmxvYy5kdEZvcm1hdHRlcihkdCwgeyAuLi50aGlzLm9wdHMsIC4uLm9wdHMgfSk7XG4gIH1cblxuICBmb3JtYXREYXRlVGltZShkdCwgb3B0cykge1xuICAgIHJldHVybiB0aGlzLmR0Rm9ybWF0dGVyKGR0LCBvcHRzKS5mb3JtYXQoKTtcbiAgfVxuXG4gIGZvcm1hdERhdGVUaW1lUGFydHMoZHQsIG9wdHMpIHtcbiAgICByZXR1cm4gdGhpcy5kdEZvcm1hdHRlcihkdCwgb3B0cykuZm9ybWF0VG9QYXJ0cygpO1xuICB9XG5cbiAgZm9ybWF0SW50ZXJ2YWwoaW50ZXJ2YWwsIG9wdHMpIHtcbiAgICBjb25zdCBkZiA9IHRoaXMuZHRGb3JtYXR0ZXIoaW50ZXJ2YWwuc3RhcnQsIG9wdHMpO1xuICAgIHJldHVybiBkZi5kdGYuZm9ybWF0UmFuZ2UoaW50ZXJ2YWwuc3RhcnQudG9KU0RhdGUoKSwgaW50ZXJ2YWwuZW5kLnRvSlNEYXRlKCkpO1xuICB9XG5cbiAgcmVzb2x2ZWRPcHRpb25zKGR0LCBvcHRzKSB7XG4gICAgcmV0dXJuIHRoaXMuZHRGb3JtYXR0ZXIoZHQsIG9wdHMpLnJlc29sdmVkT3B0aW9ucygpO1xuICB9XG5cbiAgbnVtKG4sIHAgPSAwKSB7XG4gICAgLy8gd2UgZ2V0IHNvbWUgcGVyZiBvdXQgb2YgZG9pbmcgdGhpcyBoZXJlLCBhbm5veWluZ2x5XG4gICAgaWYgKHRoaXMub3B0cy5mb3JjZVNpbXBsZSkge1xuICAgICAgcmV0dXJuIHBhZFN0YXJ0KG4sIHApO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdHMgPSB7IC4uLnRoaXMub3B0cyB9O1xuXG4gICAgaWYgKHAgPiAwKSB7XG4gICAgICBvcHRzLnBhZFRvID0gcDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sb2MubnVtYmVyRm9ybWF0dGVyKG9wdHMpLmZvcm1hdChuKTtcbiAgfVxuXG4gIGZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyhkdCwgZm10KSB7XG4gICAgY29uc3Qga25vd25FbmdsaXNoID0gdGhpcy5sb2MubGlzdGluZ01vZGUoKSA9PT0gXCJlblwiLFxuICAgICAgdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPSB0aGlzLmxvYy5vdXRwdXRDYWxlbmRhciAmJiB0aGlzLmxvYy5vdXRwdXRDYWxlbmRhciAhPT0gXCJncmVnb3J5XCIsXG4gICAgICBzdHJpbmcgPSAob3B0cywgZXh0cmFjdCkgPT4gdGhpcy5sb2MuZXh0cmFjdChkdCwgb3B0cywgZXh0cmFjdCksXG4gICAgICBmb3JtYXRPZmZzZXQgPSAob3B0cykgPT4ge1xuICAgICAgICBpZiAoZHQuaXNPZmZzZXRGaXhlZCAmJiBkdC5vZmZzZXQgPT09IDAgJiYgb3B0cy5hbGxvd1opIHtcbiAgICAgICAgICByZXR1cm4gXCJaXCI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZHQuaXNWYWxpZCA/IGR0LnpvbmUuZm9ybWF0T2Zmc2V0KGR0LnRzLCBvcHRzLmZvcm1hdCkgOiBcIlwiO1xuICAgICAgfSxcbiAgICAgIG1lcmlkaWVtID0gKCkgPT5cbiAgICAgICAga25vd25FbmdsaXNoXG4gICAgICAgICAgPyBFbmdsaXNoLm1lcmlkaWVtRm9yRGF0ZVRpbWUoZHQpXG4gICAgICAgICAgOiBzdHJpbmcoeyBob3VyOiBcIm51bWVyaWNcIiwgaG91ckN5Y2xlOiBcImgxMlwiIH0sIFwiZGF5cGVyaW9kXCIpLFxuICAgICAgbW9udGggPSAobGVuZ3RoLCBzdGFuZGFsb25lKSA9PlxuICAgICAgICBrbm93bkVuZ2xpc2hcbiAgICAgICAgICA/IEVuZ2xpc2gubW9udGhGb3JEYXRlVGltZShkdCwgbGVuZ3RoKVxuICAgICAgICAgIDogc3RyaW5nKHN0YW5kYWxvbmUgPyB7IG1vbnRoOiBsZW5ndGggfSA6IHsgbW9udGg6IGxlbmd0aCwgZGF5OiBcIm51bWVyaWNcIiB9LCBcIm1vbnRoXCIpLFxuICAgICAgd2Vla2RheSA9IChsZW5ndGgsIHN0YW5kYWxvbmUpID0+XG4gICAgICAgIGtub3duRW5nbGlzaFxuICAgICAgICAgID8gRW5nbGlzaC53ZWVrZGF5Rm9yRGF0ZVRpbWUoZHQsIGxlbmd0aClcbiAgICAgICAgICA6IHN0cmluZyhcbiAgICAgICAgICAgICAgc3RhbmRhbG9uZSA/IHsgd2Vla2RheTogbGVuZ3RoIH0gOiB7IHdlZWtkYXk6IGxlbmd0aCwgbW9udGg6IFwibG9uZ1wiLCBkYXk6IFwibnVtZXJpY1wiIH0sXG4gICAgICAgICAgICAgIFwid2Vla2RheVwiXG4gICAgICAgICAgICApLFxuICAgICAgbWF5YmVNYWNybyA9ICh0b2tlbikgPT4ge1xuICAgICAgICBjb25zdCBmb3JtYXRPcHRzID0gRm9ybWF0dGVyLm1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHModG9rZW4pO1xuICAgICAgICBpZiAoZm9ybWF0T3B0cykge1xuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFdpdGhTeXN0ZW1EZWZhdWx0KGR0LCBmb3JtYXRPcHRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcmEgPSAobGVuZ3RoKSA9PlxuICAgICAgICBrbm93bkVuZ2xpc2ggPyBFbmdsaXNoLmVyYUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIDogc3RyaW5nKHsgZXJhOiBsZW5ndGggfSwgXCJlcmFcIiksXG4gICAgICB0b2tlblRvU3RyaW5nID0gKHRva2VuKSA9PiB7XG4gICAgICAgIC8vIFdoZXJlIHBvc3NpYmxlOiBodHRwczovL2NsZHIudW5pY29kZS5vcmcvdHJhbnNsYXRpb24vZGF0ZS10aW1lL2RhdGUtdGltZS1zeW1ib2xzXG4gICAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgICAvLyBtc1xuICAgICAgICAgIGNhc2UgXCJTXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQubWlsbGlzZWNvbmQpO1xuICAgICAgICAgIGNhc2UgXCJ1XCI6XG4gICAgICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgICAgIGNhc2UgXCJTU1NcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5taWxsaXNlY29uZCwgMyk7XG4gICAgICAgICAgLy8gc2Vjb25kc1xuICAgICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQuc2Vjb25kKTtcbiAgICAgICAgICBjYXNlIFwic3NcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5zZWNvbmQsIDIpO1xuICAgICAgICAgIC8vIGZyYWN0aW9uYWwgc2Vjb25kc1xuICAgICAgICAgIGNhc2UgXCJ1dVwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKE1hdGguZmxvb3IoZHQubWlsbGlzZWNvbmQgLyAxMCksIDIpO1xuICAgICAgICAgIGNhc2UgXCJ1dXVcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShNYXRoLmZsb29yKGR0Lm1pbGxpc2Vjb25kIC8gMTAwKSk7XG4gICAgICAgICAgLy8gbWludXRlc1xuICAgICAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQubWludXRlKTtcbiAgICAgICAgICBjYXNlIFwibW1cIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5taW51dGUsIDIpO1xuICAgICAgICAgIC8vIGhvdXJzXG4gICAgICAgICAgY2FzZSBcImhcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5ob3VyICUgMTIgPT09IDAgPyAxMiA6IGR0LmhvdXIgJSAxMik7XG4gICAgICAgICAgY2FzZSBcImhoXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQuaG91ciAlIDEyID09PSAwID8gMTIgOiBkdC5ob3VyICUgMTIsIDIpO1xuICAgICAgICAgIGNhc2UgXCJIXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQuaG91cik7XG4gICAgICAgICAgY2FzZSBcIkhIXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQuaG91ciwgMik7XG4gICAgICAgICAgLy8gb2Zmc2V0XG4gICAgICAgICAgY2FzZSBcIlpcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgKzZcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRPZmZzZXQoeyBmb3JtYXQ6IFwibmFycm93XCIsIGFsbG93WjogdGhpcy5vcHRzLmFsbG93WiB9KTtcbiAgICAgICAgICBjYXNlIFwiWlpcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgKzA2OjAwXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHsgZm9ybWF0OiBcInNob3J0XCIsIGFsbG93WjogdGhpcy5vcHRzLmFsbG93WiB9KTtcbiAgICAgICAgICBjYXNlIFwiWlpaXCI6XG4gICAgICAgICAgICAvLyBsaWtlICswNjAwXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHsgZm9ybWF0OiBcInRlY2hpZVwiLCBhbGxvd1o6IHRoaXMub3B0cy5hbGxvd1ogfSk7XG4gICAgICAgICAgY2FzZSBcIlpaWlpcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgRVNUXG4gICAgICAgICAgICByZXR1cm4gZHQuem9uZS5vZmZzZXROYW1lKGR0LnRzLCB7IGZvcm1hdDogXCJzaG9ydFwiLCBsb2NhbGU6IHRoaXMubG9jLmxvY2FsZSB9KTtcbiAgICAgICAgICBjYXNlIFwiWlpaWlpcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgRWFzdGVybiBTdGFuZGFyZCBUaW1lXG4gICAgICAgICAgICByZXR1cm4gZHQuem9uZS5vZmZzZXROYW1lKGR0LnRzLCB7IGZvcm1hdDogXCJsb25nXCIsIGxvY2FsZTogdGhpcy5sb2MubG9jYWxlIH0pO1xuICAgICAgICAgIC8vIHpvbmVcbiAgICAgICAgICBjYXNlIFwielwiOlxuICAgICAgICAgICAgLy8gbGlrZSBBbWVyaWNhL05ld19Zb3JrXG4gICAgICAgICAgICByZXR1cm4gZHQuem9uZU5hbWU7XG4gICAgICAgICAgLy8gbWVyaWRpZW1zXG4gICAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgICAgIHJldHVybiBtZXJpZGllbSgpO1xuICAgICAgICAgIC8vIGRhdGVzXG4gICAgICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7IGRheTogXCJudW1lcmljXCIgfSwgXCJkYXlcIikgOiB0aGlzLm51bShkdC5kYXkpO1xuICAgICAgICAgIGNhc2UgXCJkZFwiOlxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsgZGF5OiBcIjItZGlnaXRcIiB9LCBcImRheVwiKSA6IHRoaXMubnVtKGR0LmRheSwgMik7XG4gICAgICAgICAgLy8gd2Vla2RheXMgLSBzdGFuZGFsb25lXG4gICAgICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LndlZWtkYXkpO1xuICAgICAgICAgIGNhc2UgXCJjY2NcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgJ1R1ZXMnXG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheShcInNob3J0XCIsIHRydWUpO1xuICAgICAgICAgIGNhc2UgXCJjY2NjXCI6XG4gICAgICAgICAgICAvLyBsaWtlICdUdWVzZGF5J1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoXCJsb25nXCIsIHRydWUpO1xuICAgICAgICAgIGNhc2UgXCJjY2NjY1wiOlxuICAgICAgICAgICAgLy8gbGlrZSAnVCdcbiAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5KFwibmFycm93XCIsIHRydWUpO1xuICAgICAgICAgIC8vIHdlZWtkYXlzIC0gZm9ybWF0XG4gICAgICAgICAgY2FzZSBcIkVcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LndlZWtkYXkpO1xuICAgICAgICAgIGNhc2UgXCJFRUVcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgJ1R1ZXMnXG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheShcInNob3J0XCIsIGZhbHNlKTtcbiAgICAgICAgICBjYXNlIFwiRUVFRVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAnVHVlc2RheSdcbiAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5KFwibG9uZ1wiLCBmYWxzZSk7XG4gICAgICAgICAgY2FzZSBcIkVFRUVFXCI6XG4gICAgICAgICAgICAvLyBsaWtlICdUJ1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoXCJuYXJyb3dcIiwgZmFsc2UpO1xuICAgICAgICAgIC8vIG1vbnRocyAtIHN0YW5kYWxvbmVcbiAgICAgICAgICBjYXNlIFwiTFwiOlxuICAgICAgICAgICAgLy8gbGlrZSAxXG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyBtb250aDogXCJudW1lcmljXCIsIGRheTogXCJudW1lcmljXCIgfSwgXCJtb250aFwiKVxuICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0Lm1vbnRoKTtcbiAgICAgICAgICBjYXNlIFwiTExcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMDEsIGRvZXNuJ3Qgc2VlbSB0byB3b3JrXG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyBtb250aDogXCIyLWRpZ2l0XCIsIGRheTogXCJudW1lcmljXCIgfSwgXCJtb250aFwiKVxuICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0Lm1vbnRoLCAyKTtcbiAgICAgICAgICBjYXNlIFwiTExMXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEphblxuICAgICAgICAgICAgcmV0dXJuIG1vbnRoKFwic2hvcnRcIiwgdHJ1ZSk7XG4gICAgICAgICAgY2FzZSBcIkxMTExcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgSmFudWFyeVxuICAgICAgICAgICAgcmV0dXJuIG1vbnRoKFwibG9uZ1wiLCB0cnVlKTtcbiAgICAgICAgICBjYXNlIFwiTExMTExcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgSlxuICAgICAgICAgICAgcmV0dXJuIG1vbnRoKFwibmFycm93XCIsIHRydWUpO1xuICAgICAgICAgIC8vIG1vbnRocyAtIGZvcm1hdFxuICAgICAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgICAgICAvLyBsaWtlIDFcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlclxuICAgICAgICAgICAgICA/IHN0cmluZyh7IG1vbnRoOiBcIm51bWVyaWNcIiB9LCBcIm1vbnRoXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQubW9udGgpO1xuICAgICAgICAgIGNhc2UgXCJNTVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAwMVxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyXG4gICAgICAgICAgICAgID8gc3RyaW5nKHsgbW9udGg6IFwiMi1kaWdpdFwiIH0sIFwibW9udGhcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC5tb250aCwgMik7XG4gICAgICAgICAgY2FzZSBcIk1NTVwiOlxuICAgICAgICAgICAgLy8gbGlrZSBKYW5cbiAgICAgICAgICAgIHJldHVybiBtb250aChcInNob3J0XCIsIGZhbHNlKTtcbiAgICAgICAgICBjYXNlIFwiTU1NTVwiOlxuICAgICAgICAgICAgLy8gbGlrZSBKYW51YXJ5XG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJsb25nXCIsIGZhbHNlKTtcbiAgICAgICAgICBjYXNlIFwiTU1NTU1cIjpcbiAgICAgICAgICAgIC8vIGxpa2UgSlxuICAgICAgICAgICAgcmV0dXJuIG1vbnRoKFwibmFycm93XCIsIGZhbHNlKTtcbiAgICAgICAgICAvLyB5ZWFyc1xuICAgICAgICAgIGNhc2UgXCJ5XCI6XG4gICAgICAgICAgICAvLyBsaWtlIDIwMTRcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7IHllYXI6IFwibnVtZXJpY1wiIH0sIFwieWVhclwiKSA6IHRoaXMubnVtKGR0LnllYXIpO1xuICAgICAgICAgIGNhc2UgXCJ5eVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAxNFxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyXG4gICAgICAgICAgICAgID8gc3RyaW5nKHsgeWVhcjogXCIyLWRpZ2l0XCIgfSwgXCJ5ZWFyXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQueWVhci50b1N0cmluZygpLnNsaWNlKC0yKSwgMik7XG4gICAgICAgICAgY2FzZSBcInl5eXlcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMDAxMlxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyXG4gICAgICAgICAgICAgID8gc3RyaW5nKHsgeWVhcjogXCJudW1lcmljXCIgfSwgXCJ5ZWFyXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQueWVhciwgNCk7XG4gICAgICAgICAgY2FzZSBcInl5eXl5eVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAwMDAwMTJcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlclxuICAgICAgICAgICAgICA/IHN0cmluZyh7IHllYXI6IFwibnVtZXJpY1wiIH0sIFwieWVhclwiKVxuICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0LnllYXIsIDYpO1xuICAgICAgICAgIC8vIGVyYXNcbiAgICAgICAgICBjYXNlIFwiR1wiOlxuICAgICAgICAgICAgLy8gbGlrZSBBRFxuICAgICAgICAgICAgcmV0dXJuIGVyYShcInNob3J0XCIpO1xuICAgICAgICAgIGNhc2UgXCJHR1wiOlxuICAgICAgICAgICAgLy8gbGlrZSBBbm5vIERvbWluaVxuICAgICAgICAgICAgcmV0dXJuIGVyYShcImxvbmdcIik7XG4gICAgICAgICAgY2FzZSBcIkdHR0dHXCI6XG4gICAgICAgICAgICByZXR1cm4gZXJhKFwibmFycm93XCIpO1xuICAgICAgICAgIGNhc2UgXCJra1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LndlZWtZZWFyLnRvU3RyaW5nKCkuc2xpY2UoLTIpLCAyKTtcbiAgICAgICAgICBjYXNlIFwia2tra1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LndlZWtZZWFyLCA0KTtcbiAgICAgICAgICBjYXNlIFwiV1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LndlZWtOdW1iZXIpO1xuICAgICAgICAgIGNhc2UgXCJXV1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LndlZWtOdW1iZXIsIDIpO1xuICAgICAgICAgIGNhc2UgXCJuXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQubG9jYWxXZWVrTnVtYmVyKTtcbiAgICAgICAgICBjYXNlIFwibm5cIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5sb2NhbFdlZWtOdW1iZXIsIDIpO1xuICAgICAgICAgIGNhc2UgXCJpaVwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LmxvY2FsV2Vla1llYXIudG9TdHJpbmcoKS5zbGljZSgtMiksIDIpO1xuICAgICAgICAgIGNhc2UgXCJpaWlpXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQubG9jYWxXZWVrWWVhciwgNCk7XG4gICAgICAgICAgY2FzZSBcIm9cIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5vcmRpbmFsKTtcbiAgICAgICAgICBjYXNlIFwib29vXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQub3JkaW5hbCwgMyk7XG4gICAgICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnF1YXJ0ZXIpO1xuICAgICAgICAgIGNhc2UgXCJxcVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAwMVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnF1YXJ0ZXIsIDIpO1xuICAgICAgICAgIGNhc2UgXCJYXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oTWF0aC5mbG9vcihkdC50cyAvIDEwMDApKTtcbiAgICAgICAgICBjYXNlIFwieFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnRzKTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG1heWJlTWFjcm8odG9rZW4pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgcmV0dXJuIHN0cmluZ2lmeVRva2VucyhGb3JtYXR0ZXIucGFyc2VGb3JtYXQoZm10KSwgdG9rZW5Ub1N0cmluZyk7XG4gIH1cblxuICBmb3JtYXREdXJhdGlvbkZyb21TdHJpbmcoZHVyLCBmbXQpIHtcbiAgICBjb25zdCB0b2tlblRvRmllbGQgPSAodG9rZW4pID0+IHtcbiAgICAgICAgc3dpdGNoICh0b2tlblswXSkge1xuICAgICAgICAgIGNhc2UgXCJTXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJtaWxsaXNlY29uZFwiO1xuICAgICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJzZWNvbmRcIjtcbiAgICAgICAgICBjYXNlIFwibVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwibWludXRlXCI7XG4gICAgICAgICAgY2FzZSBcImhcIjpcbiAgICAgICAgICAgIHJldHVybiBcImhvdXJcIjtcbiAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiZGF5XCI7XG4gICAgICAgICAgY2FzZSBcIndcIjpcbiAgICAgICAgICAgIHJldHVybiBcIndlZWtcIjtcbiAgICAgICAgICBjYXNlIFwiTVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwibW9udGhcIjtcbiAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwieWVhclwiO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRva2VuVG9TdHJpbmcgPSAobGlsZHVyKSA9PiAodG9rZW4pID0+IHtcbiAgICAgICAgY29uc3QgbWFwcGVkID0gdG9rZW5Ub0ZpZWxkKHRva2VuKTtcbiAgICAgICAgaWYgKG1hcHBlZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm51bShsaWxkdXIuZ2V0KG1hcHBlZCksIHRva2VuLmxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdG9rZW5zID0gRm9ybWF0dGVyLnBhcnNlRm9ybWF0KGZtdCksXG4gICAgICByZWFsVG9rZW5zID0gdG9rZW5zLnJlZHVjZShcbiAgICAgICAgKGZvdW5kLCB7IGxpdGVyYWwsIHZhbCB9KSA9PiAobGl0ZXJhbCA/IGZvdW5kIDogZm91bmQuY29uY2F0KHZhbCkpLFxuICAgICAgICBbXVxuICAgICAgKSxcbiAgICAgIGNvbGxhcHNlZCA9IGR1ci5zaGlmdFRvKC4uLnJlYWxUb2tlbnMubWFwKHRva2VuVG9GaWVsZCkuZmlsdGVyKCh0KSA9PiB0KSk7XG4gICAgcmV0dXJuIHN0cmluZ2lmeVRva2Vucyh0b2tlbnMsIHRva2VuVG9TdHJpbmcoY29sbGFwc2VkKSk7XG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEludmFsaWQge1xuICBjb25zdHJ1Y3RvcihyZWFzb24sIGV4cGxhbmF0aW9uKSB7XG4gICAgdGhpcy5yZWFzb24gPSByZWFzb247XG4gICAgdGhpcy5leHBsYW5hdGlvbiA9IGV4cGxhbmF0aW9uO1xuICB9XG5cbiAgdG9NZXNzYWdlKCkge1xuICAgIGlmICh0aGlzLmV4cGxhbmF0aW9uKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5yZWFzb259OiAke3RoaXMuZXhwbGFuYXRpb259YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgaGFzTG9jYWxlV2Vla0luZm8sIGhhc1JlbGF0aXZlLCBwYWRTdGFydCwgcm91bmRUbywgdmFsaWRhdGVXZWVrU2V0dGluZ3MgfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5pbXBvcnQgKiBhcyBFbmdsaXNoIGZyb20gXCIuL2VuZ2xpc2guanNcIjtcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi4vc2V0dGluZ3MuanNcIjtcbmltcG9ydCBEYXRlVGltZSBmcm9tIFwiLi4vZGF0ZXRpbWUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi4vem9uZXMvSUFOQVpvbmUuanNcIjtcblxuLy8gdG9kbyAtIHJlbWFwIGNhY2hpbmdcblxubGV0IGludGxMRkNhY2hlID0ge307XG5mdW5jdGlvbiBnZXRDYWNoZWRMRihsb2NTdHJpbmcsIG9wdHMgPSB7fSkge1xuICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShbbG9jU3RyaW5nLCBvcHRzXSk7XG4gIGxldCBkdGYgPSBpbnRsTEZDYWNoZVtrZXldO1xuICBpZiAoIWR0Zikge1xuICAgIGR0ZiA9IG5ldyBJbnRsLkxpc3RGb3JtYXQobG9jU3RyaW5nLCBvcHRzKTtcbiAgICBpbnRsTEZDYWNoZVtrZXldID0gZHRmO1xuICB9XG4gIHJldHVybiBkdGY7XG59XG5cbmxldCBpbnRsRFRDYWNoZSA9IHt9O1xuZnVuY3Rpb24gZ2V0Q2FjaGVkRFRGKGxvY1N0cmluZywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIG9wdHNdKTtcbiAgbGV0IGR0ZiA9IGludGxEVENhY2hlW2tleV07XG4gIGlmICghZHRmKSB7XG4gICAgZHRmID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jU3RyaW5nLCBvcHRzKTtcbiAgICBpbnRsRFRDYWNoZVtrZXldID0gZHRmO1xuICB9XG4gIHJldHVybiBkdGY7XG59XG5cbmxldCBpbnRsTnVtQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGdldENhY2hlZElORihsb2NTdHJpbmcsIG9wdHMgPSB7fSkge1xuICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShbbG9jU3RyaW5nLCBvcHRzXSk7XG4gIGxldCBpbmYgPSBpbnRsTnVtQ2FjaGVba2V5XTtcbiAgaWYgKCFpbmYpIHtcbiAgICBpbmYgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jU3RyaW5nLCBvcHRzKTtcbiAgICBpbnRsTnVtQ2FjaGVba2V5XSA9IGluZjtcbiAgfVxuICByZXR1cm4gaW5mO1xufVxuXG5sZXQgaW50bFJlbENhY2hlID0ge307XG5mdW5jdGlvbiBnZXRDYWNoZWRSVEYobG9jU3RyaW5nLCBvcHRzID0ge30pIHtcbiAgY29uc3QgeyBiYXNlLCAuLi5jYWNoZUtleU9wdHMgfSA9IG9wdHM7IC8vIGV4Y2x1ZGUgYGJhc2VgIGZyb20gdGhlIG9wdGlvbnNcbiAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoW2xvY1N0cmluZywgY2FjaGVLZXlPcHRzXSk7XG4gIGxldCBpbmYgPSBpbnRsUmVsQ2FjaGVba2V5XTtcbiAgaWYgKCFpbmYpIHtcbiAgICBpbmYgPSBuZXcgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQobG9jU3RyaW5nLCBvcHRzKTtcbiAgICBpbnRsUmVsQ2FjaGVba2V5XSA9IGluZjtcbiAgfVxuICByZXR1cm4gaW5mO1xufVxuXG5sZXQgc3lzTG9jYWxlQ2FjaGUgPSBudWxsO1xuZnVuY3Rpb24gc3lzdGVtTG9jYWxlKCkge1xuICBpZiAoc3lzTG9jYWxlQ2FjaGUpIHtcbiAgICByZXR1cm4gc3lzTG9jYWxlQ2FjaGU7XG4gIH0gZWxzZSB7XG4gICAgc3lzTG9jYWxlQ2FjaGUgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZTtcbiAgICByZXR1cm4gc3lzTG9jYWxlQ2FjaGU7XG4gIH1cbn1cblxubGV0IHdlZWtJbmZvQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGdldENhY2hlZFdlZWtJbmZvKGxvY1N0cmluZykge1xuICBsZXQgZGF0YSA9IHdlZWtJbmZvQ2FjaGVbbG9jU3RyaW5nXTtcbiAgaWYgKCFkYXRhKSB7XG4gICAgY29uc3QgbG9jYWxlID0gbmV3IEludGwuTG9jYWxlKGxvY1N0cmluZyk7XG4gICAgLy8gYnJvd3NlcnMgY3VycmVudGx5IGltcGxlbWVudCB0aGlzIGFzIGEgcHJvcGVydHksIGJ1dCBzcGVjIHNheXMgaXQgc2hvdWxkIGJlIGEgZ2V0dGVyIGZ1bmN0aW9uXG4gICAgZGF0YSA9IFwiZ2V0V2Vla0luZm9cIiBpbiBsb2NhbGUgPyBsb2NhbGUuZ2V0V2Vla0luZm8oKSA6IGxvY2FsZS53ZWVrSW5mbztcbiAgICB3ZWVrSW5mb0NhY2hlW2xvY1N0cmluZ10gPSBkYXRhO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxvY2FsZVN0cmluZyhsb2NhbGVTdHIpIHtcbiAgLy8gSSByZWFsbHkgd2FudCB0byBhdm9pZCB3cml0aW5nIGEgQkNQIDQ3IHBhcnNlclxuICAvLyBzZWUsIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL3dvb29ybS9iY3AtNDdcbiAgLy8gSW5zdGVhZCwgd2UnbGwgZG8gdGhpczpcblxuICAvLyBhKSBpZiB0aGUgc3RyaW5nIGhhcyBubyAtdSBleHRlbnNpb25zLCBqdXN0IGxlYXZlIGl0IGFsb25lXG4gIC8vIGIpIGlmIGl0IGRvZXMsIHVzZSBJbnRsIHRvIHJlc29sdmUgZXZlcnl0aGluZ1xuICAvLyBjKSBpZiBJbnRsIGZhaWxzLCB0cnkgYWdhaW4gd2l0aG91dCB0aGUgLXVcblxuICAvLyBwcml2YXRlIHN1YnRhZ3MgYW5kIHVuaWNvZGUgc3VidGFncyBoYXZlIG9yZGVyaW5nIHJlcXVpcmVtZW50cyxcbiAgLy8gYW5kIHdlJ3JlIG5vdCBwcm9wZXJseSBwYXJzaW5nIHRoaXMsIHNvIGp1c3Qgc3RyaXAgb3V0IHRoZVxuICAvLyBwcml2YXRlIG9uZXMgaWYgdGhleSBleGlzdC5cbiAgY29uc3QgeEluZGV4ID0gbG9jYWxlU3RyLmluZGV4T2YoXCIteC1cIik7XG4gIGlmICh4SW5kZXggIT09IC0xKSB7XG4gICAgbG9jYWxlU3RyID0gbG9jYWxlU3RyLnN1YnN0cmluZygwLCB4SW5kZXgpO1xuICB9XG5cbiAgY29uc3QgdUluZGV4ID0gbG9jYWxlU3RyLmluZGV4T2YoXCItdS1cIik7XG4gIGlmICh1SW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIFtsb2NhbGVTdHJdO1xuICB9IGVsc2Uge1xuICAgIGxldCBvcHRpb25zO1xuICAgIGxldCBzZWxlY3RlZFN0cjtcbiAgICB0cnkge1xuICAgICAgb3B0aW9ucyA9IGdldENhY2hlZERURihsb2NhbGVTdHIpLnJlc29sdmVkT3B0aW9ucygpO1xuICAgICAgc2VsZWN0ZWRTdHIgPSBsb2NhbGVTdHI7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3Qgc21hbGxlciA9IGxvY2FsZVN0ci5zdWJzdHJpbmcoMCwgdUluZGV4KTtcbiAgICAgIG9wdGlvbnMgPSBnZXRDYWNoZWREVEYoc21hbGxlcikucmVzb2x2ZWRPcHRpb25zKCk7XG4gICAgICBzZWxlY3RlZFN0ciA9IHNtYWxsZXI7XG4gICAgfVxuXG4gICAgY29uc3QgeyBudW1iZXJpbmdTeXN0ZW0sIGNhbGVuZGFyIH0gPSBvcHRpb25zO1xuICAgIHJldHVybiBbc2VsZWN0ZWRTdHIsIG51bWJlcmluZ1N5c3RlbSwgY2FsZW5kYXJdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludGxDb25maWdTdHJpbmcobG9jYWxlU3RyLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKSB7XG4gIGlmIChvdXRwdXRDYWxlbmRhciB8fCBudW1iZXJpbmdTeXN0ZW0pIHtcbiAgICBpZiAoIWxvY2FsZVN0ci5pbmNsdWRlcyhcIi11LVwiKSkge1xuICAgICAgbG9jYWxlU3RyICs9IFwiLXVcIjtcbiAgICB9XG5cbiAgICBpZiAob3V0cHV0Q2FsZW5kYXIpIHtcbiAgICAgIGxvY2FsZVN0ciArPSBgLWNhLSR7b3V0cHV0Q2FsZW5kYXJ9YDtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyaW5nU3lzdGVtKSB7XG4gICAgICBsb2NhbGVTdHIgKz0gYC1udS0ke251bWJlcmluZ1N5c3RlbX1gO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxlU3RyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsb2NhbGVTdHI7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwTW9udGhzKGYpIHtcbiAgY29uc3QgbXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgIGNvbnN0IGR0ID0gRGF0ZVRpbWUudXRjKDIwMDksIGksIDEpO1xuICAgIG1zLnB1c2goZihkdCkpO1xuICB9XG4gIHJldHVybiBtcztcbn1cblxuZnVuY3Rpb24gbWFwV2Vla2RheXMoZikge1xuICBjb25zdCBtcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMTsgaSA8PSA3OyBpKyspIHtcbiAgICBjb25zdCBkdCA9IERhdGVUaW1lLnV0YygyMDE2LCAxMSwgMTMgKyBpKTtcbiAgICBtcy5wdXNoKGYoZHQpKTtcbiAgfVxuICByZXR1cm4gbXM7XG59XG5cbmZ1bmN0aW9uIGxpc3RTdHVmZihsb2MsIGxlbmd0aCwgZW5nbGlzaEZuLCBpbnRsRm4pIHtcbiAgY29uc3QgbW9kZSA9IGxvYy5saXN0aW5nTW9kZSgpO1xuXG4gIGlmIChtb2RlID09PSBcImVycm9yXCIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmIChtb2RlID09PSBcImVuXCIpIHtcbiAgICByZXR1cm4gZW5nbGlzaEZuKGxlbmd0aCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGludGxGbihsZW5ndGgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzRmFzdE51bWJlcnMobG9jKSB7XG4gIGlmIChsb2MubnVtYmVyaW5nU3lzdGVtICYmIGxvYy5udW1iZXJpbmdTeXN0ZW0gIT09IFwibGF0blwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoXG4gICAgICBsb2MubnVtYmVyaW5nU3lzdGVtID09PSBcImxhdG5cIiB8fFxuICAgICAgIWxvYy5sb2NhbGUgfHxcbiAgICAgIGxvYy5sb2NhbGUuc3RhcnRzV2l0aChcImVuXCIpIHx8XG4gICAgICBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2MuaW50bCkucmVzb2x2ZWRPcHRpb25zKCkubnVtYmVyaW5nU3lzdGVtID09PSBcImxhdG5cIlxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmNsYXNzIFBvbHlOdW1iZXJGb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3RvcihpbnRsLCBmb3JjZVNpbXBsZSwgb3B0cykge1xuICAgIHRoaXMucGFkVG8gPSBvcHRzLnBhZFRvIHx8IDA7XG4gICAgdGhpcy5mbG9vciA9IG9wdHMuZmxvb3IgfHwgZmFsc2U7XG5cbiAgICBjb25zdCB7IHBhZFRvLCBmbG9vciwgLi4ub3RoZXJPcHRzIH0gPSBvcHRzO1xuXG4gICAgaWYgKCFmb3JjZVNpbXBsZSB8fCBPYmplY3Qua2V5cyhvdGhlck9wdHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGludGxPcHRzID0geyB1c2VHcm91cGluZzogZmFsc2UsIC4uLm9wdHMgfTtcbiAgICAgIGlmIChvcHRzLnBhZFRvID4gMCkgaW50bE9wdHMubWluaW11bUludGVnZXJEaWdpdHMgPSBvcHRzLnBhZFRvO1xuICAgICAgdGhpcy5pbmYgPSBnZXRDYWNoZWRJTkYoaW50bCwgaW50bE9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdChpKSB7XG4gICAgaWYgKHRoaXMuaW5mKSB7XG4gICAgICBjb25zdCBmaXhlZCA9IHRoaXMuZmxvb3IgPyBNYXRoLmZsb29yKGkpIDogaTtcbiAgICAgIHJldHVybiB0aGlzLmluZi5mb3JtYXQoZml4ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0byBtYXRjaCB0aGUgYnJvd3NlcidzIG51bWJlcmZvcm1hdHRlciBkZWZhdWx0c1xuICAgICAgY29uc3QgZml4ZWQgPSB0aGlzLmZsb29yID8gTWF0aC5mbG9vcihpKSA6IHJvdW5kVG8oaSwgMyk7XG4gICAgICByZXR1cm4gcGFkU3RhcnQoZml4ZWQsIHRoaXMucGFkVG8pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuY2xhc3MgUG9seURhdGVGb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3RvcihkdCwgaW50bCwgb3B0cykge1xuICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgdGhpcy5vcmlnaW5hbFpvbmUgPSB1bmRlZmluZWQ7XG5cbiAgICBsZXQgeiA9IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5vcHRzLnRpbWVab25lKSB7XG4gICAgICAvLyBEb24ndCBhcHBseSBhbnkgd29ya2Fyb3VuZHMgaWYgYSB0aW1lWm9uZSBpcyBleHBsaWNpdGx5IHByb3ZpZGVkIGluIG9wdHNcbiAgICAgIHRoaXMuZHQgPSBkdDtcbiAgICB9IGVsc2UgaWYgKGR0LnpvbmUudHlwZSA9PT0gXCJmaXhlZFwiKSB7XG4gICAgICAvLyBVVEMtOCBvciBFdGMvVVRDLTggYXJlIG5vdCBwYXJ0IG9mIHR6ZGF0YSwgb25seSBFdGMvR01UKzggYW5kIHRoZSBsaWtlLlxuICAgICAgLy8gVGhhdCBpcyB3aHkgZml4ZWQtb2Zmc2V0IFRaIGlzIHNldCB0byB0aGF0IHVubGVzcyBpdCBpczpcbiAgICAgIC8vIDEuIFJlcHJlc2VudGluZyBvZmZzZXQgMCB3aGVuIFVUQyBpcyB1c2VkIHRvIG1haW50YWluIHByZXZpb3VzIGJlaGF2aW9yIGFuZCBkb2VzIG5vdCBiZWNvbWUgR01ULlxuICAgICAgLy8gMi4gVW5zdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXI6XG4gICAgICAvLyAgICAtIHNvbWUgZG8gbm90IHN1cHBvcnQgRXRjL1xuICAgICAgLy8gICAgLSA8IEV0Yy9HTVQtMTQsID4gRXRjL0dNVCsxMiwgYW5kIDMwLW1pbnV0ZSBvciA0NS1taW51dGUgb2Zmc2V0cyBhcmUgbm90IHBhcnQgb2YgdHpkYXRhXG4gICAgICBjb25zdCBnbXRPZmZzZXQgPSAtMSAqIChkdC5vZmZzZXQgLyA2MCk7XG4gICAgICBjb25zdCBvZmZzZXRaID0gZ210T2Zmc2V0ID49IDAgPyBgRXRjL0dNVCske2dtdE9mZnNldH1gIDogYEV0Yy9HTVQke2dtdE9mZnNldH1gO1xuICAgICAgaWYgKGR0Lm9mZnNldCAhPT0gMCAmJiBJQU5BWm9uZS5jcmVhdGUob2Zmc2V0WikudmFsaWQpIHtcbiAgICAgICAgeiA9IG9mZnNldFo7XG4gICAgICAgIHRoaXMuZHQgPSBkdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vdCBhbGwgZml4ZWQtb2Zmc2V0IHpvbmVzIGxpa2UgRXRjLys0OjMwIGFyZSBwcmVzZW50IGluIHR6ZGF0YSBzb1xuICAgICAgICAvLyB3ZSBtYW51YWxseSBhcHBseSB0aGUgb2Zmc2V0IGFuZCBzdWJzdGl0dXRlIHRoZSB6b25lIGFzIG5lZWRlZC5cbiAgICAgICAgeiA9IFwiVVRDXCI7XG4gICAgICAgIHRoaXMuZHQgPSBkdC5vZmZzZXQgPT09IDAgPyBkdCA6IGR0LnNldFpvbmUoXCJVVENcIikucGx1cyh7IG1pbnV0ZXM6IGR0Lm9mZnNldCB9KTtcbiAgICAgICAgdGhpcy5vcmlnaW5hbFpvbmUgPSBkdC56b25lO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZHQuem9uZS50eXBlID09PSBcInN5c3RlbVwiKSB7XG4gICAgICB0aGlzLmR0ID0gZHQ7XG4gICAgfSBlbHNlIGlmIChkdC56b25lLnR5cGUgPT09IFwiaWFuYVwiKSB7XG4gICAgICB0aGlzLmR0ID0gZHQ7XG4gICAgICB6ID0gZHQuem9uZS5uYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDdXN0b20gem9uZXMgY2FuIGhhdmUgYW55IG9mZnNldCAvIG9mZnNldE5hbWUgc28gd2UganVzdCBtYW51YWxseVxuICAgICAgLy8gYXBwbHkgdGhlIG9mZnNldCBhbmQgc3Vic3RpdHV0ZSB0aGUgem9uZSBhcyBuZWVkZWQuXG4gICAgICB6ID0gXCJVVENcIjtcbiAgICAgIHRoaXMuZHQgPSBkdC5zZXRab25lKFwiVVRDXCIpLnBsdXMoeyBtaW51dGVzOiBkdC5vZmZzZXQgfSk7XG4gICAgICB0aGlzLm9yaWdpbmFsWm9uZSA9IGR0LnpvbmU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50bE9wdHMgPSB7IC4uLnRoaXMub3B0cyB9O1xuICAgIGludGxPcHRzLnRpbWVab25lID0gaW50bE9wdHMudGltZVpvbmUgfHwgejtcbiAgICB0aGlzLmR0ZiA9IGdldENhY2hlZERURihpbnRsLCBpbnRsT3B0cyk7XG4gIH1cblxuICBmb3JtYXQoKSB7XG4gICAgaWYgKHRoaXMub3JpZ2luYWxab25lKSB7XG4gICAgICAvLyBJZiB3ZSBoYXZlIHRvIHN1YnN0aXR1dGUgaW4gdGhlIGFjdHVhbCB6b25lIG5hbWUsIHdlIGhhdmUgdG8gdXNlXG4gICAgICAvLyBmb3JtYXRUb1BhcnRzIHNvIHRoYXQgdGhlIHRpbWV6b25lIGNhbiBiZSByZXBsYWNlZC5cbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdFRvUGFydHMoKVxuICAgICAgICAubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKVxuICAgICAgICAuam9pbihcIlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZHRmLmZvcm1hdCh0aGlzLmR0LnRvSlNEYXRlKCkpO1xuICB9XG5cbiAgZm9ybWF0VG9QYXJ0cygpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHRoaXMuZHRmLmZvcm1hdFRvUGFydHModGhpcy5kdC50b0pTRGF0ZSgpKTtcbiAgICBpZiAodGhpcy5vcmlnaW5hbFpvbmUpIHtcbiAgICAgIHJldHVybiBwYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgaWYgKHBhcnQudHlwZSA9PT0gXCJ0aW1lWm9uZU5hbWVcIikge1xuICAgICAgICAgIGNvbnN0IG9mZnNldE5hbWUgPSB0aGlzLm9yaWdpbmFsWm9uZS5vZmZzZXROYW1lKHRoaXMuZHQudHMsIHtcbiAgICAgICAgICAgIGxvY2FsZTogdGhpcy5kdC5sb2NhbGUsXG4gICAgICAgICAgICBmb3JtYXQ6IHRoaXMub3B0cy50aW1lWm9uZU5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnBhcnQsXG4gICAgICAgICAgICB2YWx1ZTogb2Zmc2V0TmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBwYXJ0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnRzO1xuICB9XG5cbiAgcmVzb2x2ZWRPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmR0Zi5yZXNvbHZlZE9wdGlvbnMoKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFBvbHlSZWxGb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3RvcihpbnRsLCBpc0VuZ2xpc2gsIG9wdHMpIHtcbiAgICB0aGlzLm9wdHMgPSB7IHN0eWxlOiBcImxvbmdcIiwgLi4ub3B0cyB9O1xuICAgIGlmICghaXNFbmdsaXNoICYmIGhhc1JlbGF0aXZlKCkpIHtcbiAgICAgIHRoaXMucnRmID0gZ2V0Q2FjaGVkUlRGKGludGwsIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdChjb3VudCwgdW5pdCkge1xuICAgIGlmICh0aGlzLnJ0Zikge1xuICAgICAgcmV0dXJuIHRoaXMucnRmLmZvcm1hdChjb3VudCwgdW5pdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBFbmdsaXNoLmZvcm1hdFJlbGF0aXZlVGltZSh1bml0LCBjb3VudCwgdGhpcy5vcHRzLm51bWVyaWMsIHRoaXMub3B0cy5zdHlsZSAhPT0gXCJsb25nXCIpO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdFRvUGFydHMoY291bnQsIHVuaXQpIHtcbiAgICBpZiAodGhpcy5ydGYpIHtcbiAgICAgIHJldHVybiB0aGlzLnJ0Zi5mb3JtYXRUb1BhcnRzKGNvdW50LCB1bml0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBmYWxsYmFja1dlZWtTZXR0aW5ncyA9IHtcbiAgZmlyc3REYXk6IDEsXG4gIG1pbmltYWxEYXlzOiA0LFxuICB3ZWVrZW5kOiBbNiwgN10sXG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9jYWxlIHtcbiAgc3RhdGljIGZyb21PcHRzKG9wdHMpIHtcbiAgICByZXR1cm4gTG9jYWxlLmNyZWF0ZShcbiAgICAgIG9wdHMubG9jYWxlLFxuICAgICAgb3B0cy5udW1iZXJpbmdTeXN0ZW0sXG4gICAgICBvcHRzLm91dHB1dENhbGVuZGFyLFxuICAgICAgb3B0cy53ZWVrU2V0dGluZ3MsXG4gICAgICBvcHRzLmRlZmF1bHRUb0VOXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyLCB3ZWVrU2V0dGluZ3MsIGRlZmF1bHRUb0VOID0gZmFsc2UpIHtcbiAgICBjb25zdCBzcGVjaWZpZWRMb2NhbGUgPSBsb2NhbGUgfHwgU2V0dGluZ3MuZGVmYXVsdExvY2FsZTtcbiAgICAvLyB0aGUgc3lzdGVtIGxvY2FsZSBpcyB1c2VmdWwgZm9yIGh1bWFuLXJlYWRhYmxlIHN0cmluZ3MgYnV0IGFubm95aW5nIGZvciBwYXJzaW5nL2Zvcm1hdHRpbmcga25vd24gZm9ybWF0c1xuICAgIGNvbnN0IGxvY2FsZVIgPSBzcGVjaWZpZWRMb2NhbGUgfHwgKGRlZmF1bHRUb0VOID8gXCJlbi1VU1wiIDogc3lzdGVtTG9jYWxlKCkpO1xuICAgIGNvbnN0IG51bWJlcmluZ1N5c3RlbVIgPSBudW1iZXJpbmdTeXN0ZW0gfHwgU2V0dGluZ3MuZGVmYXVsdE51bWJlcmluZ1N5c3RlbTtcbiAgICBjb25zdCBvdXRwdXRDYWxlbmRhclIgPSBvdXRwdXRDYWxlbmRhciB8fCBTZXR0aW5ncy5kZWZhdWx0T3V0cHV0Q2FsZW5kYXI7XG4gICAgY29uc3Qgd2Vla1NldHRpbmdzUiA9IHZhbGlkYXRlV2Vla1NldHRpbmdzKHdlZWtTZXR0aW5ncykgfHwgU2V0dGluZ3MuZGVmYXVsdFdlZWtTZXR0aW5ncztcbiAgICByZXR1cm4gbmV3IExvY2FsZShsb2NhbGVSLCBudW1iZXJpbmdTeXN0ZW1SLCBvdXRwdXRDYWxlbmRhclIsIHdlZWtTZXR0aW5nc1IsIHNwZWNpZmllZExvY2FsZSk7XG4gIH1cblxuICBzdGF0aWMgcmVzZXRDYWNoZSgpIHtcbiAgICBzeXNMb2NhbGVDYWNoZSA9IG51bGw7XG4gICAgaW50bERUQ2FjaGUgPSB7fTtcbiAgICBpbnRsTnVtQ2FjaGUgPSB7fTtcbiAgICBpbnRsUmVsQ2FjaGUgPSB7fTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tT2JqZWN0KHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyLCB3ZWVrU2V0dGluZ3MgfSA9IHt9KSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyLCB3ZWVrU2V0dGluZ3MpO1xuICB9XG5cbiAgY29uc3RydWN0b3IobG9jYWxlLCBudW1iZXJpbmcsIG91dHB1dENhbGVuZGFyLCB3ZWVrU2V0dGluZ3MsIHNwZWNpZmllZExvY2FsZSkge1xuICAgIGNvbnN0IFtwYXJzZWRMb2NhbGUsIHBhcnNlZE51bWJlcmluZ1N5c3RlbSwgcGFyc2VkT3V0cHV0Q2FsZW5kYXJdID0gcGFyc2VMb2NhbGVTdHJpbmcobG9jYWxlKTtcblxuICAgIHRoaXMubG9jYWxlID0gcGFyc2VkTG9jYWxlO1xuICAgIHRoaXMubnVtYmVyaW5nU3lzdGVtID0gbnVtYmVyaW5nIHx8IHBhcnNlZE51bWJlcmluZ1N5c3RlbSB8fCBudWxsO1xuICAgIHRoaXMub3V0cHV0Q2FsZW5kYXIgPSBvdXRwdXRDYWxlbmRhciB8fCBwYXJzZWRPdXRwdXRDYWxlbmRhciB8fCBudWxsO1xuICAgIHRoaXMud2Vla1NldHRpbmdzID0gd2Vla1NldHRpbmdzO1xuICAgIHRoaXMuaW50bCA9IGludGxDb25maWdTdHJpbmcodGhpcy5sb2NhbGUsIHRoaXMubnVtYmVyaW5nU3lzdGVtLCB0aGlzLm91dHB1dENhbGVuZGFyKTtcblxuICAgIHRoaXMud2Vla2RheXNDYWNoZSA9IHsgZm9ybWF0OiB7fSwgc3RhbmRhbG9uZToge30gfTtcbiAgICB0aGlzLm1vbnRoc0NhY2hlID0geyBmb3JtYXQ6IHt9LCBzdGFuZGFsb25lOiB7fSB9O1xuICAgIHRoaXMubWVyaWRpZW1DYWNoZSA9IG51bGw7XG4gICAgdGhpcy5lcmFDYWNoZSA9IHt9O1xuXG4gICAgdGhpcy5zcGVjaWZpZWRMb2NhbGUgPSBzcGVjaWZpZWRMb2NhbGU7XG4gICAgdGhpcy5mYXN0TnVtYmVyc0NhY2hlZCA9IG51bGw7XG4gIH1cblxuICBnZXQgZmFzdE51bWJlcnMoKSB7XG4gICAgaWYgKHRoaXMuZmFzdE51bWJlcnNDYWNoZWQgPT0gbnVsbCkge1xuICAgICAgdGhpcy5mYXN0TnVtYmVyc0NhY2hlZCA9IHN1cHBvcnRzRmFzdE51bWJlcnModGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZmFzdE51bWJlcnNDYWNoZWQ7XG4gIH1cblxuICBsaXN0aW5nTW9kZSgpIHtcbiAgICBjb25zdCBpc0FjdHVhbGx5RW4gPSB0aGlzLmlzRW5nbGlzaCgpO1xuICAgIGNvbnN0IGhhc05vV2VpcmRuZXNzID1cbiAgICAgICh0aGlzLm51bWJlcmluZ1N5c3RlbSA9PT0gbnVsbCB8fCB0aGlzLm51bWJlcmluZ1N5c3RlbSA9PT0gXCJsYXRuXCIpICYmXG4gICAgICAodGhpcy5vdXRwdXRDYWxlbmRhciA9PT0gbnVsbCB8fCB0aGlzLm91dHB1dENhbGVuZGFyID09PSBcImdyZWdvcnlcIik7XG4gICAgcmV0dXJuIGlzQWN0dWFsbHlFbiAmJiBoYXNOb1dlaXJkbmVzcyA/IFwiZW5cIiA6IFwiaW50bFwiO1xuICB9XG5cbiAgY2xvbmUoYWx0cykge1xuICAgIGlmICghYWx0cyB8fCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhbHRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gTG9jYWxlLmNyZWF0ZShcbiAgICAgICAgYWx0cy5sb2NhbGUgfHwgdGhpcy5zcGVjaWZpZWRMb2NhbGUsXG4gICAgICAgIGFsdHMubnVtYmVyaW5nU3lzdGVtIHx8IHRoaXMubnVtYmVyaW5nU3lzdGVtLFxuICAgICAgICBhbHRzLm91dHB1dENhbGVuZGFyIHx8IHRoaXMub3V0cHV0Q2FsZW5kYXIsXG4gICAgICAgIHZhbGlkYXRlV2Vla1NldHRpbmdzKGFsdHMud2Vla1NldHRpbmdzKSB8fCB0aGlzLndlZWtTZXR0aW5ncyxcbiAgICAgICAgYWx0cy5kZWZhdWx0VG9FTiB8fCBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZWRlZmF1bHRUb0VOKGFsdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKHsgLi4uYWx0cywgZGVmYXVsdFRvRU46IHRydWUgfSk7XG4gIH1cblxuICByZWRlZmF1bHRUb1N5c3RlbShhbHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSh7IC4uLmFsdHMsIGRlZmF1bHRUb0VOOiBmYWxzZSB9KTtcbiAgfVxuXG4gIG1vbnRocyhsZW5ndGgsIGZvcm1hdCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIGxpc3RTdHVmZih0aGlzLCBsZW5ndGgsIEVuZ2xpc2gubW9udGhzLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnRsID0gZm9ybWF0ID8geyBtb250aDogbGVuZ3RoLCBkYXk6IFwibnVtZXJpY1wiIH0gOiB7IG1vbnRoOiBsZW5ndGggfSxcbiAgICAgICAgZm9ybWF0U3RyID0gZm9ybWF0ID8gXCJmb3JtYXRcIiA6IFwic3RhbmRhbG9uZVwiO1xuICAgICAgaWYgKCF0aGlzLm1vbnRoc0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSkge1xuICAgICAgICB0aGlzLm1vbnRoc0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSA9IG1hcE1vbnRocygoZHQpID0+IHRoaXMuZXh0cmFjdChkdCwgaW50bCwgXCJtb250aFwiKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5tb250aHNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF07XG4gICAgfSk7XG4gIH1cblxuICB3ZWVrZGF5cyhsZW5ndGgsIGZvcm1hdCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIGxpc3RTdHVmZih0aGlzLCBsZW5ndGgsIEVuZ2xpc2gud2Vla2RheXMsICgpID0+IHtcbiAgICAgIGNvbnN0IGludGwgPSBmb3JtYXRcbiAgICAgICAgICA/IHsgd2Vla2RheTogbGVuZ3RoLCB5ZWFyOiBcIm51bWVyaWNcIiwgbW9udGg6IFwibG9uZ1wiLCBkYXk6IFwibnVtZXJpY1wiIH1cbiAgICAgICAgICA6IHsgd2Vla2RheTogbGVuZ3RoIH0sXG4gICAgICAgIGZvcm1hdFN0ciA9IGZvcm1hdCA/IFwiZm9ybWF0XCIgOiBcInN0YW5kYWxvbmVcIjtcbiAgICAgIGlmICghdGhpcy53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSkge1xuICAgICAgICB0aGlzLndlZWtkYXlzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdID0gbWFwV2Vla2RheXMoKGR0KSA9PlxuICAgICAgICAgIHRoaXMuZXh0cmFjdChkdCwgaW50bCwgXCJ3ZWVrZGF5XCIpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXTtcbiAgICB9KTtcbiAgfVxuXG4gIG1lcmlkaWVtcygpIHtcbiAgICByZXR1cm4gbGlzdFN0dWZmKFxuICAgICAgdGhpcyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgICgpID0+IEVuZ2xpc2gubWVyaWRpZW1zLFxuICAgICAgKCkgPT4ge1xuICAgICAgICAvLyBJbiB0aGVvcnkgdGhlcmUgY291bGQgYmUgYXJpYml0cmFyeSBkYXkgcGVyaW9kcy4gV2UncmUgZ29ubmEgYXNzdW1lIHRoZXJlIGFyZSBleGFjdGx5IHR3b1xuICAgICAgICAvLyBmb3IgQU0gYW5kIFBNLiBUaGlzIGlzIHByb2JhYmx5IHdyb25nLCBidXQgaXQncyBtYWtlcyBwYXJzaW5nIHdheSBlYXNpZXIuXG4gICAgICAgIGlmICghdGhpcy5tZXJpZGllbUNhY2hlKSB7XG4gICAgICAgICAgY29uc3QgaW50bCA9IHsgaG91cjogXCJudW1lcmljXCIsIGhvdXJDeWNsZTogXCJoMTJcIiB9O1xuICAgICAgICAgIHRoaXMubWVyaWRpZW1DYWNoZSA9IFtEYXRlVGltZS51dGMoMjAxNiwgMTEsIDEzLCA5KSwgRGF0ZVRpbWUudXRjKDIwMTYsIDExLCAxMywgMTkpXS5tYXAoXG4gICAgICAgICAgICAoZHQpID0+IHRoaXMuZXh0cmFjdChkdCwgaW50bCwgXCJkYXlwZXJpb2RcIilcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWVyaWRpZW1DYWNoZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgZXJhcyhsZW5ndGgpIHtcbiAgICByZXR1cm4gbGlzdFN0dWZmKHRoaXMsIGxlbmd0aCwgRW5nbGlzaC5lcmFzLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnRsID0geyBlcmE6IGxlbmd0aCB9O1xuXG4gICAgICAvLyBUaGlzIGlzIHByb2JsZW1hdGljLiBEaWZmZXJlbnQgY2FsZW5kYXJzIGFyZSBnb2luZyB0byBkZWZpbmUgZXJhcyB0b3RhbGx5IGRpZmZlcmVudGx5LiBXaGF0IEkgbmVlZCBpcyB0aGUgbWluaW11bSBzZXQgb2YgZGF0ZXNcbiAgICAgIC8vIHRvIGRlZmluaXRlbHkgZW51bWVyYXRlIHRoZW0uXG4gICAgICBpZiAoIXRoaXMuZXJhQ2FjaGVbbGVuZ3RoXSkge1xuICAgICAgICB0aGlzLmVyYUNhY2hlW2xlbmd0aF0gPSBbRGF0ZVRpbWUudXRjKC00MCwgMSwgMSksIERhdGVUaW1lLnV0YygyMDE3LCAxLCAxKV0ubWFwKChkdCkgPT5cbiAgICAgICAgICB0aGlzLmV4dHJhY3QoZHQsIGludGwsIFwiZXJhXCIpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmVyYUNhY2hlW2xlbmd0aF07XG4gICAgfSk7XG4gIH1cblxuICBleHRyYWN0KGR0LCBpbnRsT3B0cywgZmllbGQpIHtcbiAgICBjb25zdCBkZiA9IHRoaXMuZHRGb3JtYXR0ZXIoZHQsIGludGxPcHRzKSxcbiAgICAgIHJlc3VsdHMgPSBkZi5mb3JtYXRUb1BhcnRzKCksXG4gICAgICBtYXRjaGluZyA9IHJlc3VsdHMuZmluZCgobSkgPT4gbS50eXBlLnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkKTtcbiAgICByZXR1cm4gbWF0Y2hpbmcgPyBtYXRjaGluZy52YWx1ZSA6IG51bGw7XG4gIH1cblxuICBudW1iZXJGb3JtYXR0ZXIob3B0cyA9IHt9KSB7XG4gICAgLy8gdGhpcyBmb3JjZXNpbXBsZSBvcHRpb24gaXMgbmV2ZXIgdXNlZCAodGhlIG9ubHkgY2FsbGVyIHNob3J0LWNpcmN1aXRzIG9uIGl0LCBidXQgaXQgc2VlbXMgc2FmZXIgdG8gbGVhdmUpXG4gICAgLy8gKGluIGNvbnRyYXN0LCB0aGUgcmVzdCBvZiB0aGUgY29uZGl0aW9uIGlzIHVzZWQgaGVhdmlseSlcbiAgICByZXR1cm4gbmV3IFBvbHlOdW1iZXJGb3JtYXR0ZXIodGhpcy5pbnRsLCBvcHRzLmZvcmNlU2ltcGxlIHx8IHRoaXMuZmFzdE51bWJlcnMsIG9wdHMpO1xuICB9XG5cbiAgZHRGb3JtYXR0ZXIoZHQsIGludGxPcHRzID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFBvbHlEYXRlRm9ybWF0dGVyKGR0LCB0aGlzLmludGwsIGludGxPcHRzKTtcbiAgfVxuXG4gIHJlbEZvcm1hdHRlcihvcHRzID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFBvbHlSZWxGb3JtYXR0ZXIodGhpcy5pbnRsLCB0aGlzLmlzRW5nbGlzaCgpLCBvcHRzKTtcbiAgfVxuXG4gIGxpc3RGb3JtYXR0ZXIob3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIGdldENhY2hlZExGKHRoaXMuaW50bCwgb3B0cyk7XG4gIH1cblxuICBpc0VuZ2xpc2goKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubG9jYWxlID09PSBcImVuXCIgfHxcbiAgICAgIHRoaXMubG9jYWxlLnRvTG93ZXJDYXNlKCkgPT09IFwiZW4tdXNcIiB8fFxuICAgICAgbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5pbnRsKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGUuc3RhcnRzV2l0aChcImVuLXVzXCIpXG4gICAgKTtcbiAgfVxuXG4gIGdldFdlZWtTZXR0aW5ncygpIHtcbiAgICBpZiAodGhpcy53ZWVrU2V0dGluZ3MpIHtcbiAgICAgIHJldHVybiB0aGlzLndlZWtTZXR0aW5ncztcbiAgICB9IGVsc2UgaWYgKCFoYXNMb2NhbGVXZWVrSW5mbygpKSB7XG4gICAgICByZXR1cm4gZmFsbGJhY2tXZWVrU2V0dGluZ3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRDYWNoZWRXZWVrSW5mbyh0aGlzLmxvY2FsZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhcnRPZldlZWsoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0V2Vla1NldHRpbmdzKCkuZmlyc3REYXk7XG4gIH1cblxuICBnZXRNaW5EYXlzSW5GaXJzdFdlZWsoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0V2Vla1NldHRpbmdzKCkubWluaW1hbERheXM7XG4gIH1cblxuICBnZXRXZWVrZW5kRGF5cygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRXZWVrU2V0dGluZ3MoKS53ZWVrZW5kO1xuICB9XG5cbiAgZXF1YWxzKG90aGVyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubG9jYWxlID09PSBvdGhlci5sb2NhbGUgJiZcbiAgICAgIHRoaXMubnVtYmVyaW5nU3lzdGVtID09PSBvdGhlci5udW1iZXJpbmdTeXN0ZW0gJiZcbiAgICAgIHRoaXMub3V0cHV0Q2FsZW5kYXIgPT09IG90aGVyLm91dHB1dENhbGVuZGFyXG4gICAgKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBgTG9jYWxlKCR7dGhpcy5sb2NhbGV9LCAke3RoaXMubnVtYmVyaW5nU3lzdGVtfSwgJHt0aGlzLm91dHB1dENhbGVuZGFyfSlgO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICB1bnRydW5jYXRlWWVhcixcbiAgc2lnbmVkT2Zmc2V0LFxuICBwYXJzZUludGVnZXIsXG4gIHBhcnNlTWlsbGlzLFxuICBpc1VuZGVmaW5lZCxcbiAgcGFyc2VGbG9hdGluZyxcbn0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuaW1wb3J0ICogYXMgRW5nbGlzaCBmcm9tIFwiLi9lbmdsaXNoLmpzXCI7XG5pbXBvcnQgRml4ZWRPZmZzZXRab25lIGZyb20gXCIuLi96b25lcy9maXhlZE9mZnNldFpvbmUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi4vem9uZXMvSUFOQVpvbmUuanNcIjtcblxuLypcbiAqIFRoaXMgZmlsZSBoYW5kbGVzIHBhcnNpbmcgZm9yIHdlbGwtc3BlY2lmaWVkIGZvcm1hdHMuIEhlcmUncyBob3cgaXQgd29ya3M6XG4gKiBUd28gdGhpbmdzIGdvIGludG8gcGFyc2luZzogYSByZWdleCB0byBtYXRjaCB3aXRoIGFuZCBhbiBleHRyYWN0b3IgdG8gdGFrZSBhcGFydCB0aGUgZ3JvdXBzIGluIHRoZSBtYXRjaC5cbiAqIEFuIGV4dHJhY3RvciBpcyBqdXN0IGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHJlZ2V4IG1hdGNoIGFycmF5IGFuZCByZXR1cm5zIGEgeyB5ZWFyOiAuLi4sIG1vbnRoOiAuLi4gfSBvYmplY3RcbiAqIHBhcnNlKCkgZG9lcyB0aGUgd29yayBvZiBleGVjdXRpbmcgdGhlIHJlZ2V4IGFuZCBhcHBseWluZyB0aGUgZXh0cmFjdG9yLiBJdCB0YWtlcyBtdWx0aXBsZSByZWdleC9leHRyYWN0b3IgcGFpcnMgdG8gdHJ5IGluIHNlcXVlbmNlLlxuICogRXh0cmFjdG9ycyBjYW4gdGFrZSBhIFwiY3Vyc29yXCIgcmVwcmVzZW50aW5nIHRoZSBvZmZzZXQgaW4gdGhlIG1hdGNoIHRvIGxvb2sgYXQuIFRoaXMgbWFrZXMgaXQgZWFzeSB0byBjb21iaW5lIGV4dHJhY3RvcnMuXG4gKiBjb21iaW5lRXh0cmFjdG9ycygpIGRvZXMgdGhlIHdvcmsgb2YgY29tYmluaW5nIHRoZW0sIGtlZXBpbmcgdHJhY2sgb2YgdGhlIGN1cnNvciB0aHJvdWdoIG11bHRpcGxlIGV4dHJhY3Rpb25zLlxuICogU29tZSBleHRyYWN0aW9ucyBhcmUgc3VwZXIgZHVtYiBhbmQgc2ltcGxlUGFyc2UgYW5kIGZyb21TdHJpbmdzIGhlbHAgRFJZIHRoZW0uXG4gKi9cblxuY29uc3QgaWFuYVJlZ2V4ID0gL1tBLVphLXpfKy1dezEsMjU2fSg/Ojo/XFwvW0EtWmEtejAtOV8rLV17MSwyNTZ9KD86XFwvW0EtWmEtejAtOV8rLV17MSwyNTZ9KT8pPy87XG5cbmZ1bmN0aW9uIGNvbWJpbmVSZWdleGVzKC4uLnJlZ2V4ZXMpIHtcbiAgY29uc3QgZnVsbCA9IHJlZ2V4ZXMucmVkdWNlKChmLCByKSA9PiBmICsgci5zb3VyY2UsIFwiXCIpO1xuICByZXR1cm4gUmVnRXhwKGBeJHtmdWxsfSRgKTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUV4dHJhY3RvcnMoLi4uZXh0cmFjdG9ycykge1xuICByZXR1cm4gKG0pID0+XG4gICAgZXh0cmFjdG9yc1xuICAgICAgLnJlZHVjZShcbiAgICAgICAgKFttZXJnZWRWYWxzLCBtZXJnZWRab25lLCBjdXJzb3JdLCBleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IFt2YWwsIHpvbmUsIG5leHRdID0gZXgobSwgY3Vyc29yKTtcbiAgICAgICAgICByZXR1cm4gW3sgLi4ubWVyZ2VkVmFscywgLi4udmFsIH0sIHpvbmUgfHwgbWVyZ2VkWm9uZSwgbmV4dF07XG4gICAgICAgIH0sXG4gICAgICAgIFt7fSwgbnVsbCwgMV1cbiAgICAgIClcbiAgICAgIC5zbGljZSgwLCAyKTtcbn1cblxuZnVuY3Rpb24gcGFyc2UocywgLi4ucGF0dGVybnMpIHtcbiAgaWYgKHMgPT0gbnVsbCkge1xuICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gIH1cblxuICBmb3IgKGNvbnN0IFtyZWdleCwgZXh0cmFjdG9yXSBvZiBwYXR0ZXJucykge1xuICAgIGNvbnN0IG0gPSByZWdleC5leGVjKHMpO1xuICAgIGlmIChtKSB7XG4gICAgICByZXR1cm4gZXh0cmFjdG9yKG0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW251bGwsIG51bGxdO1xufVxuXG5mdW5jdGlvbiBzaW1wbGVQYXJzZSguLi5rZXlzKSB7XG4gIHJldHVybiAobWF0Y2gsIGN1cnNvcikgPT4ge1xuICAgIGNvbnN0IHJldCA9IHt9O1xuICAgIGxldCBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJldFtrZXlzW2ldXSA9IHBhcnNlSW50ZWdlcihtYXRjaFtjdXJzb3IgKyBpXSk7XG4gICAgfVxuICAgIHJldHVybiBbcmV0LCBudWxsLCBjdXJzb3IgKyBpXTtcbiAgfTtcbn1cblxuLy8gSVNPIGFuZCBTUUwgcGFyc2luZ1xuY29uc3Qgb2Zmc2V0UmVnZXggPSAvKD86KFopfChbKy1dXFxkXFxkKSg/Ojo/KFxcZFxcZCkpPykvO1xuY29uc3QgaXNvRXh0ZW5kZWRab25lID0gYCg/OiR7b2Zmc2V0UmVnZXguc291cmNlfT8oPzpcXFxcWygke2lhbmFSZWdleC5zb3VyY2V9KVxcXFxdKT8pP2A7XG5jb25zdCBpc29UaW1lQmFzZVJlZ2V4ID0gLyhcXGRcXGQpKD86Oj8oXFxkXFxkKSg/Ojo/KFxcZFxcZCkoPzpbLixdKFxcZHsxLDMwfSkpPyk/KT8vO1xuY29uc3QgaXNvVGltZVJlZ2V4ID0gUmVnRXhwKGAke2lzb1RpbWVCYXNlUmVnZXguc291cmNlfSR7aXNvRXh0ZW5kZWRab25lfWApO1xuY29uc3QgaXNvVGltZUV4dGVuc2lvblJlZ2V4ID0gUmVnRXhwKGAoPzpUJHtpc29UaW1lUmVnZXguc291cmNlfSk/YCk7XG5jb25zdCBpc29ZbWRSZWdleCA9IC8oWystXVxcZHs2fXxcXGR7NH0pKD86LT8oXFxkXFxkKSg/Oi0/KFxcZFxcZCkpPyk/LztcbmNvbnN0IGlzb1dlZWtSZWdleCA9IC8oXFxkezR9KS0/VyhcXGRcXGQpKD86LT8oXFxkKSk/LztcbmNvbnN0IGlzb09yZGluYWxSZWdleCA9IC8oXFxkezR9KS0/KFxcZHszfSkvO1xuY29uc3QgZXh0cmFjdElTT1dlZWtEYXRhID0gc2ltcGxlUGFyc2UoXCJ3ZWVrWWVhclwiLCBcIndlZWtOdW1iZXJcIiwgXCJ3ZWVrRGF5XCIpO1xuY29uc3QgZXh0cmFjdElTT09yZGluYWxEYXRhID0gc2ltcGxlUGFyc2UoXCJ5ZWFyXCIsIFwib3JkaW5hbFwiKTtcbmNvbnN0IHNxbFltZFJlZ2V4ID0gLyhcXGR7NH0pLShcXGRcXGQpLShcXGRcXGQpLzsgLy8gZHVtYmVkLWRvd24gdmVyc2lvbiBvZiB0aGUgSVNPIG9uZVxuY29uc3Qgc3FsVGltZVJlZ2V4ID0gUmVnRXhwKFxuICBgJHtpc29UaW1lQmFzZVJlZ2V4LnNvdXJjZX0gPyg/OiR7b2Zmc2V0UmVnZXguc291cmNlfXwoJHtpYW5hUmVnZXguc291cmNlfSkpP2Bcbik7XG5jb25zdCBzcWxUaW1lRXh0ZW5zaW9uUmVnZXggPSBSZWdFeHAoYCg/OiAke3NxbFRpbWVSZWdleC5zb3VyY2V9KT9gKTtcblxuZnVuY3Rpb24gaW50KG1hdGNoLCBwb3MsIGZhbGxiYWNrKSB7XG4gIGNvbnN0IG0gPSBtYXRjaFtwb3NdO1xuICByZXR1cm4gaXNVbmRlZmluZWQobSkgPyBmYWxsYmFjayA6IHBhcnNlSW50ZWdlcihtKTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElTT1ltZChtYXRjaCwgY3Vyc29yKSB7XG4gIGNvbnN0IGl0ZW0gPSB7XG4gICAgeWVhcjogaW50KG1hdGNoLCBjdXJzb3IpLFxuICAgIG1vbnRoOiBpbnQobWF0Y2gsIGN1cnNvciArIDEsIDEpLFxuICAgIGRheTogaW50KG1hdGNoLCBjdXJzb3IgKyAyLCAxKSxcbiAgfTtcblxuICByZXR1cm4gW2l0ZW0sIG51bGwsIGN1cnNvciArIDNdO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0SVNPVGltZShtYXRjaCwgY3Vyc29yKSB7XG4gIGNvbnN0IGl0ZW0gPSB7XG4gICAgaG91cnM6IGludChtYXRjaCwgY3Vyc29yLCAwKSxcbiAgICBtaW51dGVzOiBpbnQobWF0Y2gsIGN1cnNvciArIDEsIDApLFxuICAgIHNlY29uZHM6IGludChtYXRjaCwgY3Vyc29yICsgMiwgMCksXG4gICAgbWlsbGlzZWNvbmRzOiBwYXJzZU1pbGxpcyhtYXRjaFtjdXJzb3IgKyAzXSksXG4gIH07XG5cbiAgcmV0dXJuIFtpdGVtLCBudWxsLCBjdXJzb3IgKyA0XTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElTT09mZnNldChtYXRjaCwgY3Vyc29yKSB7XG4gIGNvbnN0IGxvY2FsID0gIW1hdGNoW2N1cnNvcl0gJiYgIW1hdGNoW2N1cnNvciArIDFdLFxuICAgIGZ1bGxPZmZzZXQgPSBzaWduZWRPZmZzZXQobWF0Y2hbY3Vyc29yICsgMV0sIG1hdGNoW2N1cnNvciArIDJdKSxcbiAgICB6b25lID0gbG9jYWwgPyBudWxsIDogRml4ZWRPZmZzZXRab25lLmluc3RhbmNlKGZ1bGxPZmZzZXQpO1xuICByZXR1cm4gW3t9LCB6b25lLCBjdXJzb3IgKyAzXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElBTkFab25lKG1hdGNoLCBjdXJzb3IpIHtcbiAgY29uc3Qgem9uZSA9IG1hdGNoW2N1cnNvcl0gPyBJQU5BWm9uZS5jcmVhdGUobWF0Y2hbY3Vyc29yXSkgOiBudWxsO1xuICByZXR1cm4gW3t9LCB6b25lLCBjdXJzb3IgKyAxXTtcbn1cblxuLy8gSVNPIHRpbWUgcGFyc2luZ1xuXG5jb25zdCBpc29UaW1lT25seSA9IFJlZ0V4cChgXlQ/JHtpc29UaW1lQmFzZVJlZ2V4LnNvdXJjZX0kYCk7XG5cbi8vIElTTyBkdXJhdGlvbiBwYXJzaW5nXG5cbmNvbnN0IGlzb0R1cmF0aW9uID1cbiAgL14tP1AoPzooPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylZKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylNKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylXKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylEKT8oPzpUKD86KC0/XFxkezEsMjB9KD86XFwuXFxkezEsMjB9KT8pSCk/KD86KC0/XFxkezEsMjB9KD86XFwuXFxkezEsMjB9KT8pTSk/KD86KC0/XFxkezEsMjB9KSg/OlsuLF0oLT9cXGR7MSwyMH0pKT9TKT8pPykkLztcblxuZnVuY3Rpb24gZXh0cmFjdElTT0R1cmF0aW9uKG1hdGNoKSB7XG4gIGNvbnN0IFtzLCB5ZWFyU3RyLCBtb250aFN0ciwgd2Vla1N0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0ciwgbWlsbGlzZWNvbmRzU3RyXSA9XG4gICAgbWF0Y2g7XG5cbiAgY29uc3QgaGFzTmVnYXRpdmVQcmVmaXggPSBzWzBdID09PSBcIi1cIjtcbiAgY29uc3QgbmVnYXRpdmVTZWNvbmRzID0gc2Vjb25kU3RyICYmIHNlY29uZFN0clswXSA9PT0gXCItXCI7XG5cbiAgY29uc3QgbWF5YmVOZWdhdGUgPSAobnVtLCBmb3JjZSA9IGZhbHNlKSA9PlxuICAgIG51bSAhPT0gdW5kZWZpbmVkICYmIChmb3JjZSB8fCAobnVtICYmIGhhc05lZ2F0aXZlUHJlZml4KSkgPyAtbnVtIDogbnVtO1xuXG4gIHJldHVybiBbXG4gICAge1xuICAgICAgeWVhcnM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoeWVhclN0cikpLFxuICAgICAgbW9udGhzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKG1vbnRoU3RyKSksXG4gICAgICB3ZWVrczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyh3ZWVrU3RyKSksXG4gICAgICBkYXlzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKGRheVN0cikpLFxuICAgICAgaG91cnM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoaG91clN0cikpLFxuICAgICAgbWludXRlczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyhtaW51dGVTdHIpKSxcbiAgICAgIHNlY29uZHM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoc2Vjb25kU3RyKSwgc2Vjb25kU3RyID09PSBcIi0wXCIpLFxuICAgICAgbWlsbGlzZWNvbmRzOiBtYXliZU5lZ2F0ZShwYXJzZU1pbGxpcyhtaWxsaXNlY29uZHNTdHIpLCBuZWdhdGl2ZVNlY29uZHMpLFxuICAgIH0sXG4gIF07XG59XG5cbi8vIFRoZXNlIGFyZSBhIGxpdHRsZSBicmFpbmRlYWQuIEVEVCAqc2hvdWxkKiB0ZWxsIHVzIHRoYXQgd2UncmUgaW4sIHNheSwgQW1lcmljYS9OZXdfWW9ya1xuLy8gYW5kIG5vdCBqdXN0IHRoYXQgd2UncmUgaW4gLTI0MCAqcmlnaHQgbm93Ki4gQnV0IHNpbmNlIEkgZG9uJ3QgdGhpbmsgdGhlc2UgYXJlIHVzZWQgdGhhdCBvZnRlblxuLy8gSSdtIGp1c3QgZ29pbmcgdG8gaWdub3JlIHRoYXRcbmNvbnN0IG9ic09mZnNldHMgPSB7XG4gIEdNVDogMCxcbiAgRURUOiAtNCAqIDYwLFxuICBFU1Q6IC01ICogNjAsXG4gIENEVDogLTUgKiA2MCxcbiAgQ1NUOiAtNiAqIDYwLFxuICBNRFQ6IC02ICogNjAsXG4gIE1TVDogLTcgKiA2MCxcbiAgUERUOiAtNyAqIDYwLFxuICBQU1Q6IC04ICogNjAsXG59O1xuXG5mdW5jdGlvbiBmcm9tU3RyaW5ncyh3ZWVrZGF5U3RyLCB5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cikge1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgeWVhcjogeWVhclN0ci5sZW5ndGggPT09IDIgPyB1bnRydW5jYXRlWWVhcihwYXJzZUludGVnZXIoeWVhclN0cikpIDogcGFyc2VJbnRlZ2VyKHllYXJTdHIpLFxuICAgIG1vbnRoOiBFbmdsaXNoLm1vbnRoc1Nob3J0LmluZGV4T2YobW9udGhTdHIpICsgMSxcbiAgICBkYXk6IHBhcnNlSW50ZWdlcihkYXlTdHIpLFxuICAgIGhvdXI6IHBhcnNlSW50ZWdlcihob3VyU3RyKSxcbiAgICBtaW51dGU6IHBhcnNlSW50ZWdlcihtaW51dGVTdHIpLFxuICB9O1xuXG4gIGlmIChzZWNvbmRTdHIpIHJlc3VsdC5zZWNvbmQgPSBwYXJzZUludGVnZXIoc2Vjb25kU3RyKTtcbiAgaWYgKHdlZWtkYXlTdHIpIHtcbiAgICByZXN1bHQud2Vla2RheSA9XG4gICAgICB3ZWVrZGF5U3RyLmxlbmd0aCA+IDNcbiAgICAgICAgPyBFbmdsaXNoLndlZWtkYXlzTG9uZy5pbmRleE9mKHdlZWtkYXlTdHIpICsgMVxuICAgICAgICA6IEVuZ2xpc2gud2Vla2RheXNTaG9ydC5pbmRleE9mKHdlZWtkYXlTdHIpICsgMTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIFJGQyAyODIyLzUzMjJcbmNvbnN0IHJmYzI4MjIgPVxuICAvXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLFxccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoPzooWystXVxcZFxcZCkoXFxkXFxkKSkpJC87XG5cbmZ1bmN0aW9uIGV4dHJhY3RSRkMyODIyKG1hdGNoKSB7XG4gIGNvbnN0IFtcbiAgICAgICxcbiAgICAgIHdlZWtkYXlTdHIsXG4gICAgICBkYXlTdHIsXG4gICAgICBtb250aFN0cixcbiAgICAgIHllYXJTdHIsXG4gICAgICBob3VyU3RyLFxuICAgICAgbWludXRlU3RyLFxuICAgICAgc2Vjb25kU3RyLFxuICAgICAgb2JzT2Zmc2V0LFxuICAgICAgbWlsT2Zmc2V0LFxuICAgICAgb2ZmSG91clN0cixcbiAgICAgIG9mZk1pbnV0ZVN0cixcbiAgICBdID0gbWF0Y2gsXG4gICAgcmVzdWx0ID0gZnJvbVN0cmluZ3Mod2Vla2RheVN0ciwgeWVhclN0ciwgbW9udGhTdHIsIGRheVN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHIpO1xuXG4gIGxldCBvZmZzZXQ7XG4gIGlmIChvYnNPZmZzZXQpIHtcbiAgICBvZmZzZXQgPSBvYnNPZmZzZXRzW29ic09mZnNldF07XG4gIH0gZWxzZSBpZiAobWlsT2Zmc2V0KSB7XG4gICAgb2Zmc2V0ID0gMDtcbiAgfSBlbHNlIHtcbiAgICBvZmZzZXQgPSBzaWduZWRPZmZzZXQob2ZmSG91clN0ciwgb2ZmTWludXRlU3RyKTtcbiAgfVxuXG4gIHJldHVybiBbcmVzdWx0LCBuZXcgRml4ZWRPZmZzZXRab25lKG9mZnNldCldO1xufVxuXG5mdW5jdGlvbiBwcmVwcm9jZXNzUkZDMjgyMihzKSB7XG4gIC8vIFJlbW92ZSBjb21tZW50cyBhbmQgZm9sZGluZyB3aGl0ZXNwYWNlIGFuZCByZXBsYWNlIG11bHRpcGxlLXNwYWNlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG4gIHJldHVybiBzXG4gICAgLnJlcGxhY2UoL1xcKFteKCldKlxcKXxbXFxuXFx0XS9nLCBcIiBcIilcbiAgICAucmVwbGFjZSgvKFxcc1xccyspL2csIFwiIFwiKVxuICAgIC50cmltKCk7XG59XG5cbi8vIGh0dHAgZGF0ZVxuXG5jb25zdCByZmMxMTIzID1cbiAgICAvXihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLCAoXFxkXFxkKSAoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpIChcXGR7NH0pIChcXGRcXGQpOihcXGRcXGQpOihcXGRcXGQpIEdNVCQvLFxuICByZmM4NTAgPVxuICAgIC9eKE1vbmRheXxUdWVzZGF5fFdlZG5lc2RheXxUaHVyc2RheXxGcmlkYXl8U2F0dXJkYXl8U3VuZGF5KSwgKFxcZFxcZCktKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKS0oXFxkXFxkKSAoXFxkXFxkKTooXFxkXFxkKTooXFxkXFxkKSBHTVQkLyxcbiAgYXNjaWkgPVxuICAgIC9eKE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1bikgKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKSAoIFxcZHxcXGRcXGQpIChcXGRcXGQpOihcXGRcXGQpOihcXGRcXGQpIChcXGR7NH0pJC87XG5cbmZ1bmN0aW9uIGV4dHJhY3RSRkMxMTIzT3I4NTAobWF0Y2gpIHtcbiAgY29uc3QgWywgd2Vla2RheVN0ciwgZGF5U3RyLCBtb250aFN0ciwgeWVhclN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHJdID0gbWF0Y2gsXG4gICAgcmVzdWx0ID0gZnJvbVN0cmluZ3Mod2Vla2RheVN0ciwgeWVhclN0ciwgbW9udGhTdHIsIGRheVN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHIpO1xuICByZXR1cm4gW3Jlc3VsdCwgRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFTQ0lJKG1hdGNoKSB7XG4gIGNvbnN0IFssIHdlZWtkYXlTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyLCB5ZWFyU3RyXSA9IG1hdGNoLFxuICAgIHJlc3VsdCA9IGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKTtcbiAgcmV0dXJuIFtyZXN1bHQsIEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZV07XG59XG5cbmNvbnN0IGlzb1ltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29ZbWRSZWdleCwgaXNvVGltZUV4dGVuc2lvblJlZ2V4KTtcbmNvbnN0IGlzb1dlZWtXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoaXNvV2Vla1JlZ2V4LCBpc29UaW1lRXh0ZW5zaW9uUmVnZXgpO1xuY29uc3QgaXNvT3JkaW5hbFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29PcmRpbmFsUmVnZXgsIGlzb1RpbWVFeHRlbnNpb25SZWdleCk7XG5jb25zdCBpc29UaW1lQ29tYmluZWRSZWdleCA9IGNvbWJpbmVSZWdleGVzKGlzb1RpbWVSZWdleCk7XG5cbmNvbnN0IGV4dHJhY3RJU09ZbWRUaW1lQW5kT2Zmc2V0ID0gY29tYmluZUV4dHJhY3RvcnMoXG4gIGV4dHJhY3RJU09ZbWQsXG4gIGV4dHJhY3RJU09UaW1lLFxuICBleHRyYWN0SVNPT2Zmc2V0LFxuICBleHRyYWN0SUFOQVpvbmVcbik7XG5jb25zdCBleHRyYWN0SVNPV2Vla1RpbWVBbmRPZmZzZXQgPSBjb21iaW5lRXh0cmFjdG9ycyhcbiAgZXh0cmFjdElTT1dlZWtEYXRhLFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuY29uc3QgZXh0cmFjdElTT09yZGluYWxEYXRlQW5kVGltZSA9IGNvbWJpbmVFeHRyYWN0b3JzKFxuICBleHRyYWN0SVNPT3JkaW5hbERhdGEsXG4gIGV4dHJhY3RJU09UaW1lLFxuICBleHRyYWN0SVNPT2Zmc2V0LFxuICBleHRyYWN0SUFOQVpvbmVcbik7XG5jb25zdCBleHRyYWN0SVNPVGltZUFuZE9mZnNldCA9IGNvbWJpbmVFeHRyYWN0b3JzKFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuXG4vKlxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJU09EYXRlKHMpIHtcbiAgcmV0dXJuIHBhcnNlKFxuICAgIHMsXG4gICAgW2lzb1ltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXgsIGV4dHJhY3RJU09ZbWRUaW1lQW5kT2Zmc2V0XSxcbiAgICBbaXNvV2Vla1dpdGhUaW1lRXh0ZW5zaW9uUmVnZXgsIGV4dHJhY3RJU09XZWVrVGltZUFuZE9mZnNldF0sXG4gICAgW2lzb09yZGluYWxXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPT3JkaW5hbERhdGVBbmRUaW1lXSxcbiAgICBbaXNvVGltZUNvbWJpbmVkUmVnZXgsIGV4dHJhY3RJU09UaW1lQW5kT2Zmc2V0XVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSRkMyODIyRGF0ZShzKSB7XG4gIHJldHVybiBwYXJzZShwcmVwcm9jZXNzUkZDMjgyMihzKSwgW3JmYzI4MjIsIGV4dHJhY3RSRkMyODIyXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUhUVFBEYXRlKHMpIHtcbiAgcmV0dXJuIHBhcnNlKFxuICAgIHMsXG4gICAgW3JmYzExMjMsIGV4dHJhY3RSRkMxMTIzT3I4NTBdLFxuICAgIFtyZmM4NTAsIGV4dHJhY3RSRkMxMTIzT3I4NTBdLFxuICAgIFthc2NpaSwgZXh0cmFjdEFTQ0lJXVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJU09EdXJhdGlvbihzKSB7XG4gIHJldHVybiBwYXJzZShzLCBbaXNvRHVyYXRpb24sIGV4dHJhY3RJU09EdXJhdGlvbl0pO1xufVxuXG5jb25zdCBleHRyYWN0SVNPVGltZU9ubHkgPSBjb21iaW5lRXh0cmFjdG9ycyhleHRyYWN0SVNPVGltZSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUlTT1RpbWVPbmx5KHMpIHtcbiAgcmV0dXJuIHBhcnNlKHMsIFtpc29UaW1lT25seSwgZXh0cmFjdElTT1RpbWVPbmx5XSk7XG59XG5cbmNvbnN0IHNxbFltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhzcWxZbWRSZWdleCwgc3FsVGltZUV4dGVuc2lvblJlZ2V4KTtcbmNvbnN0IHNxbFRpbWVDb21iaW5lZFJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoc3FsVGltZVJlZ2V4KTtcblxuY29uc3QgZXh0cmFjdElTT1RpbWVPZmZzZXRBbmRJQU5BWm9uZSA9IGNvbWJpbmVFeHRyYWN0b3JzKFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTUUwocykge1xuICByZXR1cm4gcGFyc2UoXG4gICAgcyxcbiAgICBbc3FsWW1kV2l0aFRpbWVFeHRlbnNpb25SZWdleCwgZXh0cmFjdElTT1ltZFRpbWVBbmRPZmZzZXRdLFxuICAgIFtzcWxUaW1lQ29tYmluZWRSZWdleCwgZXh0cmFjdElTT1RpbWVPZmZzZXRBbmRJQU5BWm9uZV1cbiAgKTtcbn1cbiIsImltcG9ydCB7IHBhcnNlTWlsbGlzLCBpc1VuZGVmaW5lZCwgdW50cnVuY2F0ZVllYXIsIHNpZ25lZE9mZnNldCwgaGFzT3duUHJvcGVydHkgfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5pbXBvcnQgRm9ybWF0dGVyIGZyb20gXCIuL2Zvcm1hdHRlci5qc1wiO1xuaW1wb3J0IEZpeGVkT2Zmc2V0Wm9uZSBmcm9tIFwiLi4vem9uZXMvZml4ZWRPZmZzZXRab25lLmpzXCI7XG5pbXBvcnQgSUFOQVpvbmUgZnJvbSBcIi4uL3pvbmVzL0lBTkFab25lLmpzXCI7XG5pbXBvcnQgRGF0ZVRpbWUgZnJvbSBcIi4uL2RhdGV0aW1lLmpzXCI7XG5pbXBvcnQgeyBkaWdpdFJlZ2V4LCBwYXJzZURpZ2l0cyB9IGZyb20gXCIuL2RpZ2l0cy5qc1wiO1xuaW1wb3J0IHsgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzLmpzXCI7XG5cbmNvbnN0IE1JU1NJTkdfRlRQID0gXCJtaXNzaW5nIEludGwuRGF0ZVRpbWVGb3JtYXQuZm9ybWF0VG9QYXJ0cyBzdXBwb3J0XCI7XG5cbmZ1bmN0aW9uIGludFVuaXQocmVnZXgsIHBvc3QgPSAoaSkgPT4gaSkge1xuICByZXR1cm4geyByZWdleCwgZGVzZXI6IChbc10pID0+IHBvc3QocGFyc2VEaWdpdHMocykpIH07XG59XG5cbmNvbnN0IE5CU1AgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDE2MCk7XG5jb25zdCBzcGFjZU9yTkJTUCA9IGBbICR7TkJTUH1dYDtcbmNvbnN0IHNwYWNlT3JOQlNQUmVnRXhwID0gbmV3IFJlZ0V4cChzcGFjZU9yTkJTUCwgXCJnXCIpO1xuXG5mdW5jdGlvbiBmaXhMaXN0UmVnZXgocykge1xuICAvLyBtYWtlIGRvdHMgb3B0aW9uYWwgYW5kIGFsc28gbWFrZSB0aGVtIGxpdGVyYWxcbiAgLy8gbWFrZSBzcGFjZSBhbmQgbm9uIGJyZWFrYWJsZSBzcGFjZSBjaGFyYWN0ZXJzIGludGVyY2hhbmdlYWJsZVxuICByZXR1cm4gcy5yZXBsYWNlKC9cXC4vZywgXCJcXFxcLj9cIikucmVwbGFjZShzcGFjZU9yTkJTUFJlZ0V4cCwgc3BhY2VPck5CU1ApO1xufVxuXG5mdW5jdGlvbiBzdHJpcEluc2Vuc2l0aXZpdGllcyhzKSB7XG4gIHJldHVybiBzXG4gICAgLnJlcGxhY2UoL1xcLi9nLCBcIlwiKSAvLyBpZ25vcmUgZG90cyB0aGF0IHdlcmUgbWFkZSBvcHRpb25hbFxuICAgIC5yZXBsYWNlKHNwYWNlT3JOQlNQUmVnRXhwLCBcIiBcIikgLy8gaW50ZXJjaGFuZ2Ugc3BhY2UgYW5kIG5ic3BcbiAgICAudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gb25lT2Yoc3RyaW5ncywgc3RhcnRJbmRleCkge1xuICBpZiAoc3RyaW5ncyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICByZWdleDogUmVnRXhwKHN0cmluZ3MubWFwKGZpeExpc3RSZWdleCkuam9pbihcInxcIikpLFxuICAgICAgZGVzZXI6IChbc10pID0+XG4gICAgICAgIHN0cmluZ3MuZmluZEluZGV4KChpKSA9PiBzdHJpcEluc2Vuc2l0aXZpdGllcyhzKSA9PT0gc3RyaXBJbnNlbnNpdGl2aXRpZXMoaSkpICsgc3RhcnRJbmRleCxcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIG9mZnNldChyZWdleCwgZ3JvdXBzKSB7XG4gIHJldHVybiB7IHJlZ2V4LCBkZXNlcjogKFssIGgsIG1dKSA9PiBzaWduZWRPZmZzZXQoaCwgbSksIGdyb3VwcyB9O1xufVxuXG5mdW5jdGlvbiBzaW1wbGUocmVnZXgpIHtcbiAgcmV0dXJuIHsgcmVnZXgsIGRlc2VyOiAoW3NdKSA9PiBzIH07XG59XG5cbmZ1bmN0aW9uIGVzY2FwZVRva2VuKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bXFwtXFxbXFxde30oKSorPy4sXFxcXFxcXiR8I1xcc10vZywgXCJcXFxcJCZcIik7XG59XG5cbi8qKlxuICogQHBhcmFtIHRva2VuXG4gKiBAcGFyYW0ge0xvY2FsZX0gbG9jXG4gKi9cbmZ1bmN0aW9uIHVuaXRGb3JUb2tlbih0b2tlbiwgbG9jKSB7XG4gIGNvbnN0IG9uZSA9IGRpZ2l0UmVnZXgobG9jKSxcbiAgICB0d28gPSBkaWdpdFJlZ2V4KGxvYywgXCJ7Mn1cIiksXG4gICAgdGhyZWUgPSBkaWdpdFJlZ2V4KGxvYywgXCJ7M31cIiksXG4gICAgZm91ciA9IGRpZ2l0UmVnZXgobG9jLCBcIns0fVwiKSxcbiAgICBzaXggPSBkaWdpdFJlZ2V4KGxvYywgXCJ7Nn1cIiksXG4gICAgb25lT3JUd28gPSBkaWdpdFJlZ2V4KGxvYywgXCJ7MSwyfVwiKSxcbiAgICBvbmVUb1RocmVlID0gZGlnaXRSZWdleChsb2MsIFwiezEsM31cIiksXG4gICAgb25lVG9TaXggPSBkaWdpdFJlZ2V4KGxvYywgXCJ7MSw2fVwiKSxcbiAgICBvbmVUb05pbmUgPSBkaWdpdFJlZ2V4KGxvYywgXCJ7MSw5fVwiKSxcbiAgICB0d29Ub0ZvdXIgPSBkaWdpdFJlZ2V4KGxvYywgXCJ7Miw0fVwiKSxcbiAgICBmb3VyVG9TaXggPSBkaWdpdFJlZ2V4KGxvYywgXCJ7NCw2fVwiKSxcbiAgICBsaXRlcmFsID0gKHQpID0+ICh7IHJlZ2V4OiBSZWdFeHAoZXNjYXBlVG9rZW4odC52YWwpKSwgZGVzZXI6IChbc10pID0+IHMsIGxpdGVyYWw6IHRydWUgfSksXG4gICAgdW5pdGF0ZSA9ICh0KSA9PiB7XG4gICAgICBpZiAodG9rZW4ubGl0ZXJhbCkge1xuICAgICAgICByZXR1cm4gbGl0ZXJhbCh0KTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAodC52YWwpIHtcbiAgICAgICAgLy8gZXJhXG4gICAgICAgIGNhc2UgXCJHXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5lcmFzKFwic2hvcnRcIiksIDApO1xuICAgICAgICBjYXNlIFwiR0dcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLmVyYXMoXCJsb25nXCIpLCAwKTtcbiAgICAgICAgLy8geWVhcnNcbiAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVUb1NpeCk7XG4gICAgICAgIGNhc2UgXCJ5eVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3b1RvRm91ciwgdW50cnVuY2F0ZVllYXIpO1xuICAgICAgICBjYXNlIFwieXl5eVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KGZvdXIpO1xuICAgICAgICBjYXNlIFwieXl5eXlcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChmb3VyVG9TaXgpO1xuICAgICAgICBjYXNlIFwieXl5eXl5XCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQoc2l4KTtcbiAgICAgICAgLy8gbW9udGhzXG4gICAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwiTU1cIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICBjYXNlIFwiTU1NXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5tb250aHMoXCJzaG9ydFwiLCB0cnVlKSwgMSk7XG4gICAgICAgIGNhc2UgXCJNTU1NXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5tb250aHMoXCJsb25nXCIsIHRydWUpLCAxKTtcbiAgICAgICAgY2FzZSBcIkxcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJMTFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJMTExcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLm1vbnRocyhcInNob3J0XCIsIGZhbHNlKSwgMSk7XG4gICAgICAgIGNhc2UgXCJMTExMXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5tb250aHMoXCJsb25nXCIsIGZhbHNlKSwgMSk7XG4gICAgICAgIC8vIGRhdGVzXG4gICAgICAgIGNhc2UgXCJkXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwiZGRcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICAvLyBvcmRpbmFsc1xuICAgICAgICBjYXNlIFwib1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZVRvVGhyZWUpO1xuICAgICAgICBjYXNlIFwib29vXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodGhyZWUpO1xuICAgICAgICAvLyB0aW1lXG4gICAgICAgIGNhc2UgXCJISFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJIXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwiaGhcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICBjYXNlIFwiaFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcIm1tXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJxXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwicXFcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICBjYXNlIFwic1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcInNzXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVUb1RocmVlKTtcbiAgICAgICAgY2FzZSBcIlNTU1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHRocmVlKTtcbiAgICAgICAgY2FzZSBcInVcIjpcbiAgICAgICAgICByZXR1cm4gc2ltcGxlKG9uZVRvTmluZSk7XG4gICAgICAgIGNhc2UgXCJ1dVwiOlxuICAgICAgICAgIHJldHVybiBzaW1wbGUob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwidXV1XCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lKTtcbiAgICAgICAgLy8gbWVyaWRpZW1cbiAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLm1lcmlkaWVtcygpLCAwKTtcbiAgICAgICAgLy8gd2Vla1llYXIgKGspXG4gICAgICAgIGNhc2UgXCJra2trXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQoZm91cik7XG4gICAgICAgIGNhc2UgXCJra1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3b1RvRm91ciwgdW50cnVuY2F0ZVllYXIpO1xuICAgICAgICAvLyB3ZWVrTnVtYmVyIChXKVxuICAgICAgICBjYXNlIFwiV1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcIldXXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgLy8gd2Vla2RheXNcbiAgICAgICAgY2FzZSBcIkVcIjpcbiAgICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmUpO1xuICAgICAgICBjYXNlIFwiRUVFXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy53ZWVrZGF5cyhcInNob3J0XCIsIGZhbHNlKSwgMSk7XG4gICAgICAgIGNhc2UgXCJFRUVFXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy53ZWVrZGF5cyhcImxvbmdcIiwgZmFsc2UpLCAxKTtcbiAgICAgICAgY2FzZSBcImNjY1wiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2Mud2Vla2RheXMoXCJzaG9ydFwiLCB0cnVlKSwgMSk7XG4gICAgICAgIGNhc2UgXCJjY2NjXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy53ZWVrZGF5cyhcImxvbmdcIiwgdHJ1ZSksIDEpO1xuICAgICAgICAvLyBvZmZzZXQvem9uZVxuICAgICAgICBjYXNlIFwiWlwiOlxuICAgICAgICBjYXNlIFwiWlpcIjpcbiAgICAgICAgICByZXR1cm4gb2Zmc2V0KG5ldyBSZWdFeHAoYChbKy1dJHtvbmVPclR3by5zb3VyY2V9KSg/OjooJHt0d28uc291cmNlfSkpP2ApLCAyKTtcbiAgICAgICAgY2FzZSBcIlpaWlwiOlxuICAgICAgICAgIHJldHVybiBvZmZzZXQobmV3IFJlZ0V4cChgKFsrLV0ke29uZU9yVHdvLnNvdXJjZX0pKCR7dHdvLnNvdXJjZX0pP2ApLCAyKTtcbiAgICAgICAgLy8gd2UgZG9uJ3Qgc3VwcG9ydCBaWlpaIChQU1QpIG9yIFpaWlpaIChQYWNpZmljIFN0YW5kYXJkIFRpbWUpIGluIHBhcnNpbmdcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFueSB3YXkgdG8gZmlndXJlIG91dCB3aGF0IHRoZXkgYXJlXG4gICAgICAgIGNhc2UgXCJ6XCI6XG4gICAgICAgICAgcmV0dXJuIHNpbXBsZSgvW2Etel8rLS9dezEsMjU2fT8vaSk7XG4gICAgICAgIC8vIHRoaXMgc3BlY2lhbC1jYXNlIFwidG9rZW5cIiByZXByZXNlbnRzIGEgcGxhY2Ugd2hlcmUgYSBtYWNyby10b2tlbiBleHBhbmRlZCBpbnRvIGEgd2hpdGUtc3BhY2UgbGl0ZXJhbFxuICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UgYWNjZXB0IGFueSBub24tbmV3bGluZSB3aGl0ZS1zcGFjZVxuICAgICAgICBjYXNlIFwiIFwiOlxuICAgICAgICAgIHJldHVybiBzaW1wbGUoL1teXFxTXFxuXFxyXS8pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBsaXRlcmFsKHQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgY29uc3QgdW5pdCA9IHVuaXRhdGUodG9rZW4pIHx8IHtcbiAgICBpbnZhbGlkUmVhc29uOiBNSVNTSU5HX0ZUUCxcbiAgfTtcblxuICB1bml0LnRva2VuID0gdG9rZW47XG5cbiAgcmV0dXJuIHVuaXQ7XG59XG5cbmNvbnN0IHBhcnRUeXBlU3R5bGVUb1Rva2VuVmFsID0ge1xuICB5ZWFyOiB7XG4gICAgXCIyLWRpZ2l0XCI6IFwieXlcIixcbiAgICBudW1lcmljOiBcInl5eXl5XCIsXG4gIH0sXG4gIG1vbnRoOiB7XG4gICAgbnVtZXJpYzogXCJNXCIsXG4gICAgXCIyLWRpZ2l0XCI6IFwiTU1cIixcbiAgICBzaG9ydDogXCJNTU1cIixcbiAgICBsb25nOiBcIk1NTU1cIixcbiAgfSxcbiAgZGF5OiB7XG4gICAgbnVtZXJpYzogXCJkXCIsXG4gICAgXCIyLWRpZ2l0XCI6IFwiZGRcIixcbiAgfSxcbiAgd2Vla2RheToge1xuICAgIHNob3J0OiBcIkVFRVwiLFxuICAgIGxvbmc6IFwiRUVFRVwiLFxuICB9LFxuICBkYXlwZXJpb2Q6IFwiYVwiLFxuICBkYXlQZXJpb2Q6IFwiYVwiLFxuICBob3VyMTI6IHtcbiAgICBudW1lcmljOiBcImhcIixcbiAgICBcIjItZGlnaXRcIjogXCJoaFwiLFxuICB9LFxuICBob3VyMjQ6IHtcbiAgICBudW1lcmljOiBcIkhcIixcbiAgICBcIjItZGlnaXRcIjogXCJISFwiLFxuICB9LFxuICBtaW51dGU6IHtcbiAgICBudW1lcmljOiBcIm1cIixcbiAgICBcIjItZGlnaXRcIjogXCJtbVwiLFxuICB9LFxuICBzZWNvbmQ6IHtcbiAgICBudW1lcmljOiBcInNcIixcbiAgICBcIjItZGlnaXRcIjogXCJzc1wiLFxuICB9LFxuICB0aW1lWm9uZU5hbWU6IHtcbiAgICBsb25nOiBcIlpaWlpaXCIsXG4gICAgc2hvcnQ6IFwiWlpaXCIsXG4gIH0sXG59O1xuXG5mdW5jdGlvbiB0b2tlbkZvclBhcnQocGFydCwgZm9ybWF0T3B0cywgcmVzb2x2ZWRPcHRzKSB7XG4gIGNvbnN0IHsgdHlwZSwgdmFsdWUgfSA9IHBhcnQ7XG5cbiAgaWYgKHR5cGUgPT09IFwibGl0ZXJhbFwiKSB7XG4gICAgY29uc3QgaXNTcGFjZSA9IC9eXFxzKyQvLnRlc3QodmFsdWUpO1xuICAgIHJldHVybiB7XG4gICAgICBsaXRlcmFsOiAhaXNTcGFjZSxcbiAgICAgIHZhbDogaXNTcGFjZSA/IFwiIFwiIDogdmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHN0eWxlID0gZm9ybWF0T3B0c1t0eXBlXTtcblxuICAvLyBUaGUgdXNlciBtaWdodCBoYXZlIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGhvdXIxMiBvciBob3VyQ3ljbGVcbiAgLy8gaWYgc28sIHJlc3BlY3QgdGhlaXIgZGVjaXNpb25cbiAgLy8gaWYgbm90LCByZWZlciBiYWNrIHRvIHRoZSByZXNvbHZlZE9wdHMsIHdoaWNoIGFyZSBiYXNlZCBvbiB0aGUgbG9jYWxlXG4gIGxldCBhY3R1YWxUeXBlID0gdHlwZTtcbiAgaWYgKHR5cGUgPT09IFwiaG91clwiKSB7XG4gICAgaWYgKGZvcm1hdE9wdHMuaG91cjEyICE9IG51bGwpIHtcbiAgICAgIGFjdHVhbFR5cGUgPSBmb3JtYXRPcHRzLmhvdXIxMiA/IFwiaG91cjEyXCIgOiBcImhvdXIyNFwiO1xuICAgIH0gZWxzZSBpZiAoZm9ybWF0T3B0cy5ob3VyQ3ljbGUgIT0gbnVsbCkge1xuICAgICAgaWYgKGZvcm1hdE9wdHMuaG91ckN5Y2xlID09PSBcImgxMVwiIHx8IGZvcm1hdE9wdHMuaG91ckN5Y2xlID09PSBcImgxMlwiKSB7XG4gICAgICAgIGFjdHVhbFR5cGUgPSBcImhvdXIxMlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsVHlwZSA9IFwiaG91cjI0XCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRva2VucyBvbmx5IGRpZmZlcmVudGlhdGUgYmV0d2VlbiAyNCBob3VycyBvciBub3QsXG4gICAgICAvLyBzbyB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBob3VyQ3ljbGUgaGVyZSwgd2hpY2ggaXMgbGVzcyBzdXBwb3J0ZWQgYW55d2F5c1xuICAgICAgYWN0dWFsVHlwZSA9IHJlc29sdmVkT3B0cy5ob3VyMTIgPyBcImhvdXIxMlwiIDogXCJob3VyMjRcIjtcbiAgICB9XG4gIH1cbiAgbGV0IHZhbCA9IHBhcnRUeXBlU3R5bGVUb1Rva2VuVmFsW2FjdHVhbFR5cGVdO1xuICBpZiAodHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIikge1xuICAgIHZhbCA9IHZhbFtzdHlsZV07XG4gIH1cblxuICBpZiAodmFsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpdGVyYWw6IGZhbHNlLFxuICAgICAgdmFsLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBidWlsZFJlZ2V4KHVuaXRzKSB7XG4gIGNvbnN0IHJlID0gdW5pdHMubWFwKCh1KSA9PiB1LnJlZ2V4KS5yZWR1Y2UoKGYsIHIpID0+IGAke2Z9KCR7ci5zb3VyY2V9KWAsIFwiXCIpO1xuICByZXR1cm4gW2BeJHtyZX0kYCwgdW5pdHNdO1xufVxuXG5mdW5jdGlvbiBtYXRjaChpbnB1dCwgcmVnZXgsIGhhbmRsZXJzKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBpbnB1dC5tYXRjaChyZWdleCk7XG5cbiAgaWYgKG1hdGNoZXMpIHtcbiAgICBjb25zdCBhbGwgPSB7fTtcbiAgICBsZXQgbWF0Y2hJbmRleCA9IDE7XG4gICAgZm9yIChjb25zdCBpIGluIGhhbmRsZXJzKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkoaGFuZGxlcnMsIGkpKSB7XG4gICAgICAgIGNvbnN0IGggPSBoYW5kbGVyc1tpXSxcbiAgICAgICAgICBncm91cHMgPSBoLmdyb3VwcyA/IGguZ3JvdXBzICsgMSA6IDE7XG4gICAgICAgIGlmICghaC5saXRlcmFsICYmIGgudG9rZW4pIHtcbiAgICAgICAgICBhbGxbaC50b2tlbi52YWxbMF1dID0gaC5kZXNlcihtYXRjaGVzLnNsaWNlKG1hdGNoSW5kZXgsIG1hdGNoSW5kZXggKyBncm91cHMpKTtcbiAgICAgICAgfVxuICAgICAgICBtYXRjaEluZGV4ICs9IGdyb3VwcztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFttYXRjaGVzLCBhbGxdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbbWF0Y2hlcywge31dO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRhdGVUaW1lRnJvbU1hdGNoZXMobWF0Y2hlcykge1xuICBjb25zdCB0b0ZpZWxkID0gKHRva2VuKSA9PiB7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgcmV0dXJuIFwibWlsbGlzZWNvbmRcIjtcbiAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgIHJldHVybiBcInNlY29uZFwiO1xuICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgcmV0dXJuIFwibWludXRlXCI7XG4gICAgICBjYXNlIFwiaFwiOlxuICAgICAgY2FzZSBcIkhcIjpcbiAgICAgICAgcmV0dXJuIFwiaG91clwiO1xuICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgcmV0dXJuIFwiZGF5XCI7XG4gICAgICBjYXNlIFwib1wiOlxuICAgICAgICByZXR1cm4gXCJvcmRpbmFsXCI7XG4gICAgICBjYXNlIFwiTFwiOlxuICAgICAgY2FzZSBcIk1cIjpcbiAgICAgICAgcmV0dXJuIFwibW9udGhcIjtcbiAgICAgIGNhc2UgXCJ5XCI6XG4gICAgICAgIHJldHVybiBcInllYXJcIjtcbiAgICAgIGNhc2UgXCJFXCI6XG4gICAgICBjYXNlIFwiY1wiOlxuICAgICAgICByZXR1cm4gXCJ3ZWVrZGF5XCI7XG4gICAgICBjYXNlIFwiV1wiOlxuICAgICAgICByZXR1cm4gXCJ3ZWVrTnVtYmVyXCI7XG4gICAgICBjYXNlIFwia1wiOlxuICAgICAgICByZXR1cm4gXCJ3ZWVrWWVhclwiO1xuICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgcmV0dXJuIFwicXVhcnRlclwiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIGxldCB6b25lID0gbnVsbDtcbiAgbGV0IHNwZWNpZmljT2Zmc2V0O1xuICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMueikpIHtcbiAgICB6b25lID0gSUFOQVpvbmUuY3JlYXRlKG1hdGNoZXMueik7XG4gIH1cblxuICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMuWikpIHtcbiAgICBpZiAoIXpvbmUpIHtcbiAgICAgIHpvbmUgPSBuZXcgRml4ZWRPZmZzZXRab25lKG1hdGNoZXMuWik7XG4gICAgfVxuICAgIHNwZWNpZmljT2Zmc2V0ID0gbWF0Y2hlcy5aO1xuICB9XG5cbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLnEpKSB7XG4gICAgbWF0Y2hlcy5NID0gKG1hdGNoZXMucSAtIDEpICogMyArIDE7XG4gIH1cblxuICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMuaCkpIHtcbiAgICBpZiAobWF0Y2hlcy5oIDwgMTIgJiYgbWF0Y2hlcy5hID09PSAxKSB7XG4gICAgICBtYXRjaGVzLmggKz0gMTI7XG4gICAgfSBlbHNlIGlmIChtYXRjaGVzLmggPT09IDEyICYmIG1hdGNoZXMuYSA9PT0gMCkge1xuICAgICAgbWF0Y2hlcy5oID0gMDtcbiAgICB9XG4gIH1cblxuICBpZiAobWF0Y2hlcy5HID09PSAwICYmIG1hdGNoZXMueSkge1xuICAgIG1hdGNoZXMueSA9IC1tYXRjaGVzLnk7XG4gIH1cblxuICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMudSkpIHtcbiAgICBtYXRjaGVzLlMgPSBwYXJzZU1pbGxpcyhtYXRjaGVzLnUpO1xuICB9XG5cbiAgY29uc3QgdmFscyA9IE9iamVjdC5rZXlzKG1hdGNoZXMpLnJlZHVjZSgociwgaykgPT4ge1xuICAgIGNvbnN0IGYgPSB0b0ZpZWxkKGspO1xuICAgIGlmIChmKSB7XG4gICAgICByW2ZdID0gbWF0Y2hlc1trXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcjtcbiAgfSwge30pO1xuXG4gIHJldHVybiBbdmFscywgem9uZSwgc3BlY2lmaWNPZmZzZXRdO1xufVxuXG5sZXQgZHVtbXlEYXRlVGltZUNhY2hlID0gbnVsbDtcblxuZnVuY3Rpb24gZ2V0RHVtbXlEYXRlVGltZSgpIHtcbiAgaWYgKCFkdW1teURhdGVUaW1lQ2FjaGUpIHtcbiAgICBkdW1teURhdGVUaW1lQ2FjaGUgPSBEYXRlVGltZS5mcm9tTWlsbGlzKDE1NTU1NTU1NTU1NTUpO1xuICB9XG5cbiAgcmV0dXJuIGR1bW15RGF0ZVRpbWVDYWNoZTtcbn1cblxuZnVuY3Rpb24gbWF5YmVFeHBhbmRNYWNyb1Rva2VuKHRva2VuLCBsb2NhbGUpIHtcbiAgaWYgKHRva2VuLmxpdGVyYWwpIHtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBjb25zdCBmb3JtYXRPcHRzID0gRm9ybWF0dGVyLm1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHModG9rZW4udmFsKTtcbiAgY29uc3QgdG9rZW5zID0gZm9ybWF0T3B0c1RvVG9rZW5zKGZvcm1hdE9wdHMsIGxvY2FsZSk7XG5cbiAgaWYgKHRva2VucyA9PSBudWxsIHx8IHRva2Vucy5pbmNsdWRlcyh1bmRlZmluZWQpKSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZE1hY3JvVG9rZW5zKHRva2VucywgbG9jYWxlKSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0KC4uLnRva2Vucy5tYXAoKHQpID0+IG1heWJlRXhwYW5kTWFjcm9Ub2tlbih0LCBsb2NhbGUpKSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnQgY2xhc3MgVG9rZW5QYXJzZXIge1xuICBjb25zdHJ1Y3Rvcihsb2NhbGUsIGZvcm1hdCkge1xuICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xuICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuICAgIHRoaXMudG9rZW5zID0gZXhwYW5kTWFjcm9Ub2tlbnMoRm9ybWF0dGVyLnBhcnNlRm9ybWF0KGZvcm1hdCksIGxvY2FsZSk7XG4gICAgdGhpcy51bml0cyA9IHRoaXMudG9rZW5zLm1hcCgodCkgPT4gdW5pdEZvclRva2VuKHQsIGxvY2FsZSkpO1xuICAgIHRoaXMuZGlzcXVhbGlmeWluZ1VuaXQgPSB0aGlzLnVuaXRzLmZpbmQoKHQpID0+IHQuaW52YWxpZFJlYXNvbik7XG5cbiAgICBpZiAoIXRoaXMuZGlzcXVhbGlmeWluZ1VuaXQpIHtcbiAgICAgIGNvbnN0IFtyZWdleFN0cmluZywgaGFuZGxlcnNdID0gYnVpbGRSZWdleCh0aGlzLnVuaXRzKTtcbiAgICAgIHRoaXMucmVnZXggPSBSZWdFeHAocmVnZXhTdHJpbmcsIFwiaVwiKTtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBoYW5kbGVycztcbiAgICB9XG4gIH1cblxuICBleHBsYWluRnJvbVRva2VucyhpbnB1dCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4geyBpbnB1dCwgdG9rZW5zOiB0aGlzLnRva2VucywgaW52YWxpZFJlYXNvbjogdGhpcy5pbnZhbGlkUmVhc29uIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IFtyYXdNYXRjaGVzLCBtYXRjaGVzXSA9IG1hdGNoKGlucHV0LCB0aGlzLnJlZ2V4LCB0aGlzLmhhbmRsZXJzKSxcbiAgICAgICAgW3Jlc3VsdCwgem9uZSwgc3BlY2lmaWNPZmZzZXRdID0gbWF0Y2hlc1xuICAgICAgICAgID8gZGF0ZVRpbWVGcm9tTWF0Y2hlcyhtYXRjaGVzKVxuICAgICAgICAgIDogW251bGwsIG51bGwsIHVuZGVmaW5lZF07XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkobWF0Y2hlcywgXCJhXCIpICYmIGhhc093blByb3BlcnR5KG1hdGNoZXMsIFwiSFwiKSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoXG4gICAgICAgICAgXCJDYW4ndCBpbmNsdWRlIG1lcmlkaWVtIHdoZW4gc3BlY2lmeWluZyAyNC1ob3VyIGZvcm1hdFwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnB1dCxcbiAgICAgICAgdG9rZW5zOiB0aGlzLnRva2VucyxcbiAgICAgICAgcmVnZXg6IHRoaXMucmVnZXgsXG4gICAgICAgIHJhd01hdGNoZXMsXG4gICAgICAgIG1hdGNoZXMsXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgem9uZSxcbiAgICAgICAgc3BlY2lmaWNPZmZzZXQsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiAhdGhpcy5kaXNxdWFsaWZ5aW5nVW5pdDtcbiAgfVxuXG4gIGdldCBpbnZhbGlkUmVhc29uKCkge1xuICAgIHJldHVybiB0aGlzLmRpc3F1YWxpZnlpbmdVbml0ID8gdGhpcy5kaXNxdWFsaWZ5aW5nVW5pdC5pbnZhbGlkUmVhc29uIDogbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwbGFpbkZyb21Ub2tlbnMobG9jYWxlLCBpbnB1dCwgZm9ybWF0KSB7XG4gIGNvbnN0IHBhcnNlciA9IG5ldyBUb2tlblBhcnNlcihsb2NhbGUsIGZvcm1hdCk7XG4gIHJldHVybiBwYXJzZXIuZXhwbGFpbkZyb21Ub2tlbnMoaW5wdXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcm9tVG9rZW5zKGxvY2FsZSwgaW5wdXQsIGZvcm1hdCkge1xuICBjb25zdCB7IHJlc3VsdCwgem9uZSwgc3BlY2lmaWNPZmZzZXQsIGludmFsaWRSZWFzb24gfSA9IGV4cGxhaW5Gcm9tVG9rZW5zKGxvY2FsZSwgaW5wdXQsIGZvcm1hdCk7XG4gIHJldHVybiBbcmVzdWx0LCB6b25lLCBzcGVjaWZpY09mZnNldCwgaW52YWxpZFJlYXNvbl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRPcHRzVG9Ub2tlbnMoZm9ybWF0T3B0cywgbG9jYWxlKSB7XG4gIGlmICghZm9ybWF0T3B0cykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0dGVyID0gRm9ybWF0dGVyLmNyZWF0ZShsb2NhbGUsIGZvcm1hdE9wdHMpO1xuICBjb25zdCBkZiA9IGZvcm1hdHRlci5kdEZvcm1hdHRlcihnZXREdW1teURhdGVUaW1lKCkpO1xuICBjb25zdCBwYXJ0cyA9IGRmLmZvcm1hdFRvUGFydHMoKTtcbiAgY29uc3QgcmVzb2x2ZWRPcHRzID0gZGYucmVzb2x2ZWRPcHRpb25zKCk7XG4gIHJldHVybiBwYXJ0cy5tYXAoKHApID0+IHRva2VuRm9yUGFydChwLCBmb3JtYXRPcHRzLCByZXNvbHZlZE9wdHMpKTtcbn1cbiIsIi8qXG4gIFRoaXMgaXMganVzdCBhIGp1bmsgZHJhd2VyLCBjb250YWluaW5nIGFueXRoaW5nIHVzZWQgYWNyb3NzIG11bHRpcGxlIGNsYXNzZXMuXG4gIEJlY2F1c2UgTHV4b24gaXMgc21hbGwoaXNoKSwgdGhpcyBzaG91bGQgc3RheSBzbWFsbCBhbmQgd2Ugd29uJ3Qgd29ycnkgYWJvdXQgc3BsaXR0aW5nXG4gIGl0IHVwIGludG8sIHNheSwgcGFyc2luZ1V0aWwuanMgYW5kIGJhc2ljVXRpbC5qcyBhbmQgc28gb24uIEJ1dCB0aGV5IGFyZSBkaXZpZGVkIHVwIGJ5IGZlYXR1cmUgYXJlYS5cbiovXG5cbmltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy5qc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuLi9zZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgZGF5T2ZXZWVrLCBpc29XZWVrZGF5VG9Mb2NhbCB9IGZyb20gXCIuL2NvbnZlcnNpb25zLmpzXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG4vLyBUWVBFU1xuXG5leHBvcnQgZnVuY3Rpb24gaXNVbmRlZmluZWQobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09IFwidW5kZWZpbmVkXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlcihvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gXCJudW1iZXJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZWdlcihvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gXCJudW1iZXJcIiAmJiBvICUgMSA9PT0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSBcInN0cmluZ1wiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gXCJbb2JqZWN0IERhdGVdXCI7XG59XG5cbi8vIENBUEFCSUxJVElFU1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVsYXRpdmUoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBJbnRsICE9PSBcInVuZGVmaW5lZFwiICYmICEhSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQ7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0xvY2FsZVdlZWtJbmZvKCkge1xuICB0cnkge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgSW50bCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgISFJbnRsLkxvY2FsZSAmJlxuICAgICAgKFwid2Vla0luZm9cIiBpbiBJbnRsLkxvY2FsZS5wcm90b3R5cGUgfHwgXCJnZXRXZWVrSW5mb1wiIGluIEludGwuTG9jYWxlLnByb3RvdHlwZSlcbiAgICApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIE9CSkVDVFMgQU5EIEFSUkFZU1xuXG5leHBvcnQgZnVuY3Rpb24gbWF5YmVBcnJheSh0aGluZykge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGluZykgPyB0aGluZyA6IFt0aGluZ107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiZXN0QnkoYXJyLCBieSwgY29tcGFyZSkge1xuICBpZiAoYXJyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGJlc3QsIG5leHQpID0+IHtcbiAgICBjb25zdCBwYWlyID0gW2J5KG5leHQpLCBuZXh0XTtcbiAgICBpZiAoIWJlc3QpIHtcbiAgICAgIHJldHVybiBwYWlyO1xuICAgIH0gZWxzZSBpZiAoY29tcGFyZShiZXN0WzBdLCBwYWlyWzBdKSA9PT0gYmVzdFswXSkge1xuICAgICAgcmV0dXJuIGJlc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwYWlyO1xuICAgIH1cbiAgfSwgbnVsbClbMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwaWNrKG9iaiwga2V5cykge1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoKGEsIGspID0+IHtcbiAgICBhW2tdID0gb2JqW2tdO1xuICAgIHJldHVybiBhO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVXZWVrU2V0dGluZ3Moc2V0dGluZ3MpIHtcbiAgaWYgKHNldHRpbmdzID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc2V0dGluZ3MgIT09IFwib2JqZWN0XCIpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJXZWVrIHNldHRpbmdzIG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuICB9IGVsc2Uge1xuICAgIGlmIChcbiAgICAgICFpbnRlZ2VyQmV0d2VlbihzZXR0aW5ncy5maXJzdERheSwgMSwgNykgfHxcbiAgICAgICFpbnRlZ2VyQmV0d2VlbihzZXR0aW5ncy5taW5pbWFsRGF5cywgMSwgNykgfHxcbiAgICAgICFBcnJheS5pc0FycmF5KHNldHRpbmdzLndlZWtlbmQpIHx8XG4gICAgICBzZXR0aW5ncy53ZWVrZW5kLnNvbWUoKHYpID0+ICFpbnRlZ2VyQmV0d2Vlbih2LCAxLCA3KSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIkludmFsaWQgd2VlayBzZXR0aW5nc1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpcnN0RGF5OiBzZXR0aW5ncy5maXJzdERheSxcbiAgICAgIG1pbmltYWxEYXlzOiBzZXR0aW5ncy5taW5pbWFsRGF5cyxcbiAgICAgIHdlZWtlbmQ6IEFycmF5LmZyb20oc2V0dGluZ3Mud2Vla2VuZCksXG4gICAgfTtcbiAgfVxufVxuXG4vLyBOVU1CRVJTIEFORCBTVFJJTkdTXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlZ2VyQmV0d2Vlbih0aGluZywgYm90dG9tLCB0b3ApIHtcbiAgcmV0dXJuIGlzSW50ZWdlcih0aGluZykgJiYgdGhpbmcgPj0gYm90dG9tICYmIHRoaW5nIDw9IHRvcDtcbn1cblxuLy8geCAlIG4gYnV0IHRha2VzIHRoZSBzaWduIG9mIG4gaW5zdGVhZCBvZiB4XG5leHBvcnQgZnVuY3Rpb24gZmxvb3JNb2QoeCwgbikge1xuICByZXR1cm4geCAtIG4gKiBNYXRoLmZsb29yKHggLyBuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhZFN0YXJ0KGlucHV0LCBuID0gMikge1xuICBjb25zdCBpc05lZyA9IGlucHV0IDwgMDtcbiAgbGV0IHBhZGRlZDtcbiAgaWYgKGlzTmVnKSB7XG4gICAgcGFkZGVkID0gXCItXCIgKyAoXCJcIiArIC1pbnB1dCkucGFkU3RhcnQobiwgXCIwXCIpO1xuICB9IGVsc2Uge1xuICAgIHBhZGRlZCA9IChcIlwiICsgaW5wdXQpLnBhZFN0YXJ0KG4sIFwiMFwiKTtcbiAgfVxuICByZXR1cm4gcGFkZGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJbnRlZ2VyKHN0cmluZykge1xuICBpZiAoaXNVbmRlZmluZWQoc3RyaW5nKSB8fCBzdHJpbmcgPT09IG51bGwgfHwgc3RyaW5nID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nLCAxMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRmxvYXRpbmcoc3RyaW5nKSB7XG4gIGlmIChpc1VuZGVmaW5lZChzdHJpbmcpIHx8IHN0cmluZyA9PT0gbnVsbCB8fCBzdHJpbmcgPT09IFwiXCIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHN0cmluZyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWlsbGlzKGZyYWN0aW9uKSB7XG4gIC8vIFJldHVybiB1bmRlZmluZWQgKGluc3RlYWQgb2YgMCkgaW4gdGhlc2UgY2FzZXMsIHdoZXJlIGZyYWN0aW9uIGlzIG5vdCBzZXRcbiAgaWYgKGlzVW5kZWZpbmVkKGZyYWN0aW9uKSB8fCBmcmFjdGlvbiA9PT0gbnVsbCB8fCBmcmFjdGlvbiA9PT0gXCJcIikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZiA9IHBhcnNlRmxvYXQoXCIwLlwiICsgZnJhY3Rpb24pICogMTAwMDtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihmKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcm91bmRUbyhudW1iZXIsIGRpZ2l0cywgdG93YXJkWmVybyA9IGZhbHNlKSB7XG4gIGNvbnN0IGZhY3RvciA9IDEwICoqIGRpZ2l0cyxcbiAgICByb3VuZGVyID0gdG93YXJkWmVybyA/IE1hdGgudHJ1bmMgOiBNYXRoLnJvdW5kO1xuICByZXR1cm4gcm91bmRlcihudW1iZXIgKiBmYWN0b3IpIC8gZmFjdG9yO1xufVxuXG4vLyBEQVRFIEJBU0lDU1xuXG5leHBvcnQgZnVuY3Rpb24gaXNMZWFwWWVhcih5ZWFyKSB7XG4gIHJldHVybiB5ZWFyICUgNCA9PT0gMCAmJiAoeWVhciAlIDEwMCAhPT0gMCB8fCB5ZWFyICUgNDAwID09PSAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gIGNvbnN0IG1vZE1vbnRoID0gZmxvb3JNb2QobW9udGggLSAxLCAxMikgKyAxLFxuICAgIG1vZFllYXIgPSB5ZWFyICsgKG1vbnRoIC0gbW9kTW9udGgpIC8gMTI7XG5cbiAgaWYgKG1vZE1vbnRoID09PSAyKSB7XG4gICAgcmV0dXJuIGlzTGVhcFllYXIobW9kWWVhcikgPyAyOSA6IDI4O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbMzEsIG51bGwsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVttb2RNb250aCAtIDFdO1xuICB9XG59XG5cbi8vIGNvbnZlcnQgYSBjYWxlbmRhciBvYmplY3QgdG8gYSBsb2NhbCB0aW1lc3RhbXAgKGVwb2NoLCBidXQgd2l0aCB0aGUgb2Zmc2V0IGJha2VkIGluKVxuZXhwb3J0IGZ1bmN0aW9uIG9ialRvTG9jYWxUUyhvYmopIHtcbiAgbGV0IGQgPSBEYXRlLlVUQyhcbiAgICBvYmoueWVhcixcbiAgICBvYmoubW9udGggLSAxLFxuICAgIG9iai5kYXksXG4gICAgb2JqLmhvdXIsXG4gICAgb2JqLm1pbnV0ZSxcbiAgICBvYmouc2Vjb25kLFxuICAgIG9iai5taWxsaXNlY29uZFxuICApO1xuXG4gIC8vIGZvciBsZWdhY3kgcmVhc29ucywgeWVhcnMgYmV0d2VlbiAwIGFuZCA5OSBhcmUgaW50ZXJwcmV0ZWQgYXMgMTlYWDsgcmV2ZXJ0IHRoYXRcbiAgaWYgKG9iai55ZWFyIDwgMTAwICYmIG9iai55ZWFyID49IDApIHtcbiAgICBkID0gbmV3IERhdGUoZCk7XG4gICAgLy8gc2V0IHRoZSBtb250aCBhbmQgZGF5IGFnYWluLCB0aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHllYXIgMjAwMCBpcyBhIGxlYXAgeWVhciwgYnV0IHllYXIgMTAwIGlzIG5vdFxuICAgIC8vIHNvIGlmIG9iai55ZWFyIGlzIGluIDk5LCBidXQgb2JqLmRheSBtYWtlcyBpdCByb2xsIG92ZXIgaW50byB5ZWFyIDEwMCxcbiAgICAvLyB0aGUgY2FsY3VsYXRpb25zIGRvbmUgYnkgRGF0ZS5VVEMgYXJlIHVzaW5nIHllYXIgMjAwMCAtIHdoaWNoIGlzIGluY29ycmVjdFxuICAgIGQuc2V0VVRDRnVsbFllYXIob2JqLnllYXIsIG9iai5tb250aCAtIDEsIG9iai5kYXkpO1xuICB9XG4gIHJldHVybiArZDtcbn1cblxuLy8gYWRhcHRlZCBmcm9tIG1vbWVudC5qczogaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvYmxvYi8wMDBhYzE4MDBlNjIwZjc3MGY0ZWIzMWI1YWU5MDhmNjE2N2IwYWIyL3NyYy9saWIvdW5pdHMvd2Vlay1jYWxlbmRhci11dGlscy5qc1xuZnVuY3Rpb24gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIG1pbkRheXNJbkZpcnN0V2Vlaywgc3RhcnRPZldlZWspIHtcbiAgY29uc3QgZndkbHcgPSBpc29XZWVrZGF5VG9Mb2NhbChkYXlPZldlZWsoeWVhciwgMSwgbWluRGF5c0luRmlyc3RXZWVrKSwgc3RhcnRPZldlZWspO1xuICByZXR1cm4gLWZ3ZGx3ICsgbWluRGF5c0luRmlyc3RXZWVrIC0gMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdlZWtzSW5XZWVrWWVhcih3ZWVrWWVhciwgbWluRGF5c0luRmlyc3RXZWVrID0gNCwgc3RhcnRPZldlZWsgPSAxKSB7XG4gIGNvbnN0IHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQod2Vla1llYXIsIG1pbkRheXNJbkZpcnN0V2Vlaywgc3RhcnRPZldlZWspO1xuICBjb25zdCB3ZWVrT2Zmc2V0TmV4dCA9IGZpcnN0V2Vla09mZnNldCh3ZWVrWWVhciArIDEsIG1pbkRheXNJbkZpcnN0V2Vlaywgc3RhcnRPZldlZWspO1xuICByZXR1cm4gKGRheXNJblllYXIod2Vla1llYXIpIC0gd2Vla09mZnNldCArIHdlZWtPZmZzZXROZXh0KSAvIDc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyKSB7XG4gIGlmICh5ZWFyID4gOTkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHJldHVybiB5ZWFyID4gU2V0dGluZ3MudHdvRGlnaXRDdXRvZmZZZWFyID8gMTkwMCArIHllYXIgOiAyMDAwICsgeWVhcjtcbn1cblxuLy8gUEFSU0lOR1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2Vab25lSW5mbyh0cywgb2Zmc2V0Rm9ybWF0LCBsb2NhbGUsIHRpbWVab25lID0gbnVsbCkge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUodHMpLFxuICAgIGludGxPcHRzID0ge1xuICAgICAgaG91ckN5Y2xlOiBcImgyM1wiLFxuICAgICAgeWVhcjogXCJudW1lcmljXCIsXG4gICAgICBtb250aDogXCIyLWRpZ2l0XCIsXG4gICAgICBkYXk6IFwiMi1kaWdpdFwiLFxuICAgICAgaG91cjogXCIyLWRpZ2l0XCIsXG4gICAgICBtaW51dGU6IFwiMi1kaWdpdFwiLFxuICAgIH07XG5cbiAgaWYgKHRpbWVab25lKSB7XG4gICAgaW50bE9wdHMudGltZVpvbmUgPSB0aW1lWm9uZTtcbiAgfVxuXG4gIGNvbnN0IG1vZGlmaWVkID0geyB0aW1lWm9uZU5hbWU6IG9mZnNldEZvcm1hdCwgLi4uaW50bE9wdHMgfTtcblxuICBjb25zdCBwYXJzZWQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIG1vZGlmaWVkKVxuICAgIC5mb3JtYXRUb1BhcnRzKGRhdGUpXG4gICAgLmZpbmQoKG0pID0+IG0udHlwZS50b0xvd2VyQ2FzZSgpID09PSBcInRpbWV6b25lbmFtZVwiKTtcbiAgcmV0dXJuIHBhcnNlZCA/IHBhcnNlZC52YWx1ZSA6IG51bGw7XG59XG5cbi8vIHNpZ25lZE9mZnNldCgnLTUnLCAnMzAnKSAtPiAtMzMwXG5leHBvcnQgZnVuY3Rpb24gc2lnbmVkT2Zmc2V0KG9mZkhvdXJTdHIsIG9mZk1pbnV0ZVN0cikge1xuICBsZXQgb2ZmSG91ciA9IHBhcnNlSW50KG9mZkhvdXJTdHIsIDEwKTtcblxuICAvLyBkb24ndCB8fCB0aGlzIGJlY2F1c2Ugd2Ugd2FudCB0byBwcmVzZXJ2ZSAtMFxuICBpZiAoTnVtYmVyLmlzTmFOKG9mZkhvdXIpKSB7XG4gICAgb2ZmSG91ciA9IDA7XG4gIH1cblxuICBjb25zdCBvZmZNaW4gPSBwYXJzZUludChvZmZNaW51dGVTdHIsIDEwKSB8fCAwLFxuICAgIG9mZk1pblNpZ25lZCA9IG9mZkhvdXIgPCAwIHx8IE9iamVjdC5pcyhvZmZIb3VyLCAtMCkgPyAtb2ZmTWluIDogb2ZmTWluO1xuICByZXR1cm4gb2ZmSG91ciAqIDYwICsgb2ZmTWluU2lnbmVkO1xufVxuXG4vLyBDT0VSQ0lPTlxuXG5leHBvcnQgZnVuY3Rpb24gYXNOdW1iZXIodmFsdWUpIHtcbiAgY29uc3QgbnVtZXJpY1ZhbHVlID0gTnVtYmVyKHZhbHVlKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIgfHwgdmFsdWUgPT09IFwiXCIgfHwgTnVtYmVyLmlzTmFOKG51bWVyaWNWYWx1ZSkpXG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBJbnZhbGlkIHVuaXQgdmFsdWUgJHt2YWx1ZX1gKTtcbiAgcmV0dXJuIG51bWVyaWNWYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdChvYmosIG5vcm1hbGl6ZXIpIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHt9O1xuICBmb3IgKGNvbnN0IHUgaW4gb2JqKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KG9iaiwgdSkpIHtcbiAgICAgIGNvbnN0IHYgPSBvYmpbdV07XG4gICAgICBpZiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVyKHUpXSA9IGFzTnVtYmVyKHYpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvZmZzZXQncyB2YWx1ZSBhcyBhIHN0cmluZ1xuICogQHBhcmFtIHtudW1iZXJ9IHRzIC0gRXBvY2ggbWlsbGlzZWNvbmRzIGZvciB3aGljaCB0byBnZXQgdGhlIG9mZnNldFxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCAtIFdoYXQgc3R5bGUgb2Ygb2Zmc2V0IHRvIHJldHVybi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRzICduYXJyb3cnLCAnc2hvcnQnLCBvciAndGVjaGllJy4gUmV0dXJuaW5nICcrNicsICcrMDY6MDAnLCBvciAnKzA2MDAnIHJlc3BlY3RpdmVseVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0T2Zmc2V0KG9mZnNldCwgZm9ybWF0KSB7XG4gIGNvbnN0IGhvdXJzID0gTWF0aC50cnVuYyhNYXRoLmFicyhvZmZzZXQgLyA2MCkpLFxuICAgIG1pbnV0ZXMgPSBNYXRoLnRydW5jKE1hdGguYWJzKG9mZnNldCAlIDYwKSksXG4gICAgc2lnbiA9IG9mZnNldCA+PSAwID8gXCIrXCIgOiBcIi1cIjtcblxuICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgIGNhc2UgXCJzaG9ydFwiOlxuICAgICAgcmV0dXJuIGAke3NpZ259JHtwYWRTdGFydChob3VycywgMil9OiR7cGFkU3RhcnQobWludXRlcywgMil9YDtcbiAgICBjYXNlIFwibmFycm93XCI6XG4gICAgICByZXR1cm4gYCR7c2lnbn0ke2hvdXJzfSR7bWludXRlcyA+IDAgPyBgOiR7bWludXRlc31gIDogXCJcIn1gO1xuICAgIGNhc2UgXCJ0ZWNoaWVcIjpcbiAgICAgIHJldHVybiBgJHtzaWdufSR7cGFkU3RhcnQoaG91cnMsIDIpfSR7cGFkU3RhcnQobWludXRlcywgMil9YDtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFZhbHVlIGZvcm1hdCAke2Zvcm1hdH0gaXMgb3V0IG9mIHJhbmdlIGZvciBwcm9wZXJ0eSBmb3JtYXRgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGltZU9iamVjdChvYmopIHtcbiAgcmV0dXJuIHBpY2sob2JqLCBbXCJob3VyXCIsIFwibWludXRlXCIsIFwic2Vjb25kXCIsIFwibWlsbGlzZWNvbmRcIl0pO1xufVxuIiwiLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmltcG9ydCBab25lIGZyb20gXCIuLi96b25lLmpzXCI7XG5pbXBvcnQgSUFOQVpvbmUgZnJvbSBcIi4uL3pvbmVzL0lBTkFab25lLmpzXCI7XG5pbXBvcnQgRml4ZWRPZmZzZXRab25lIGZyb20gXCIuLi96b25lcy9maXhlZE9mZnNldFpvbmUuanNcIjtcbmltcG9ydCBJbnZhbGlkWm9uZSBmcm9tIFwiLi4vem9uZXMvaW52YWxpZFpvbmUuanNcIjtcblxuaW1wb3J0IHsgaXNVbmRlZmluZWQsIGlzU3RyaW5nLCBpc051bWJlciB9IGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCBTeXN0ZW1ab25lIGZyb20gXCIuLi96b25lcy9zeXN0ZW1ab25lLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVab25lKGlucHV0LCBkZWZhdWx0Wm9uZSkge1xuICBsZXQgb2Zmc2V0O1xuICBpZiAoaXNVbmRlZmluZWQoaW5wdXQpIHx8IGlucHV0ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRab25lO1xuICB9IGVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgWm9uZSkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfSBlbHNlIGlmIChpc1N0cmluZyhpbnB1dCkpIHtcbiAgICBjb25zdCBsb3dlcmVkID0gaW5wdXQudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG93ZXJlZCA9PT0gXCJkZWZhdWx0XCIpIHJldHVybiBkZWZhdWx0Wm9uZTtcbiAgICBlbHNlIGlmIChsb3dlcmVkID09PSBcImxvY2FsXCIgfHwgbG93ZXJlZCA9PT0gXCJzeXN0ZW1cIikgcmV0dXJuIFN5c3RlbVpvbmUuaW5zdGFuY2U7XG4gICAgZWxzZSBpZiAobG93ZXJlZCA9PT0gXCJ1dGNcIiB8fCBsb3dlcmVkID09PSBcImdtdFwiKSByZXR1cm4gRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlO1xuICAgIGVsc2UgcmV0dXJuIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcihsb3dlcmVkKSB8fCBJQU5BWm9uZS5jcmVhdGUoaW5wdXQpO1xuICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSkge1xuICAgIHJldHVybiBGaXhlZE9mZnNldFpvbmUuaW5zdGFuY2UoaW5wdXQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIiAmJiBcIm9mZnNldFwiIGluIGlucHV0ICYmIHR5cGVvZiBpbnB1dC5vZmZzZXQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIC8vIFRoaXMgaXMgZHVtYiwgYnV0IHRoZSBpbnN0YW5jZW9mIGNoZWNrIGFib3ZlIGRvZXNuJ3Qgc2VlbSB0byByZWFsbHkgd29ya1xuICAgIC8vIHNvIHdlJ3JlIGR1Y2sgY2hlY2tpbmcgaXRcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBJbnZhbGlkWm9uZShpbnB1dCk7XG4gIH1cbn1cbiIsImltcG9ydCBEYXRlVGltZSBmcm9tIFwiLi9kYXRldGltZS5qc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzLmpzXCI7XG5pbXBvcnQgTG9jYWxlIGZyb20gXCIuL2ltcGwvbG9jYWxlLmpzXCI7XG5pbXBvcnQgSUFOQVpvbmUgZnJvbSBcIi4vem9uZXMvSUFOQVpvbmUuanNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZVpvbmUgfSBmcm9tIFwiLi9pbXBsL3pvbmVVdGlsLmpzXCI7XG5cbmltcG9ydCB7IGhhc0xvY2FsZVdlZWtJbmZvLCBoYXNSZWxhdGl2ZSB9IGZyb20gXCIuL2ltcGwvdXRpbC5qc1wiO1xuXG4vKipcbiAqIFRoZSBJbmZvIGNsYXNzIGNvbnRhaW5zIHN0YXRpYyBtZXRob2RzIGZvciByZXRyaWV2aW5nIGdlbmVyYWwgdGltZSBhbmQgZGF0ZSByZWxhdGVkIGRhdGEuIEZvciBleGFtcGxlLCBpdCBoYXMgbWV0aG9kcyBmb3IgZmluZGluZyBvdXQgaWYgYSB0aW1lIHpvbmUgaGFzIGEgRFNULCBmb3IgbGlzdGluZyB0aGUgbW9udGhzIGluIGFueSBzdXBwb3J0ZWQgbG9jYWxlLCBhbmQgZm9yIGRpc2NvdmVyaW5nIHdoaWNoIG9mIEx1eG9uIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluZm8ge1xuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB6b25lIGNvbnRhaW5zIGEgRFNULlxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbem9uZT0nbG9jYWwnXSAtIFpvbmUgdG8gY2hlY2suIERlZmF1bHRzIHRvIHRoZSBlbnZpcm9ubWVudCdzIGxvY2FsIHpvbmUuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaGFzRFNUKHpvbmUgPSBTZXR0aW5ncy5kZWZhdWx0Wm9uZSkge1xuICAgIGNvbnN0IHByb3RvID0gRGF0ZVRpbWUubm93KCkuc2V0Wm9uZSh6b25lKS5zZXQoeyBtb250aDogMTIgfSk7XG5cbiAgICByZXR1cm4gIXpvbmUuaXNVbml2ZXJzYWwgJiYgcHJvdG8ub2Zmc2V0ICE9PSBwcm90by5zZXQoeyBtb250aDogNiB9KS5vZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB6b25lIGlzIGEgdmFsaWQgSUFOQSBzcGVjaWZpZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB6b25lIC0gWm9uZSB0byBjaGVja1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzVmFsaWRJQU5BWm9uZSh6b25lKSB7XG4gICAgcmV0dXJuIElBTkFab25lLmlzVmFsaWRab25lKHpvbmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBpbnB1dCBpbnRvIGEge0BsaW5rIFpvbmV9IGluc3RhbmNlLlxuICAgKlxuICAgKiAqIElmIGBpbnB1dGAgaXMgYWxyZWFkeSBhIFpvbmUgaW5zdGFuY2UsIGl0IGlzIHJldHVybmVkIHVuY2hhbmdlZC5cbiAgICogKiBJZiBgaW5wdXRgIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSB2YWxpZCB0aW1lIHpvbmUgbmFtZSwgYSBab25lIGluc3RhbmNlXG4gICAqICAgd2l0aCB0aGF0IG5hbWUgaXMgcmV0dXJuZWQuXG4gICAqICogSWYgYGlucHV0YCBpcyBhIHN0cmluZyB0aGF0IGRvZXNuJ3QgcmVmZXIgdG8gYSBrbm93biB0aW1lIHpvbmUsIGEgWm9uZVxuICAgKiAgIGluc3RhbmNlIHdpdGgge0BsaW5rIFpvbmUjaXNWYWxpZH0gPT0gZmFsc2UgaXMgcmV0dXJuZWQuXG4gICAqICogSWYgYGlucHV0IGlzIGEgbnVtYmVyLCBhIFpvbmUgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGZpeGVkIG9mZnNldFxuICAgKiAgIGluIG1pbnV0ZXMgaXMgcmV0dXJuZWQuXG4gICAqICogSWYgYGlucHV0YCBpcyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAsIHRoZSBkZWZhdWx0IHpvbmUgaXMgcmV0dXJuZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV8bnVtYmVyfSBbaW5wdXRdIC0gdGhlIHZhbHVlIHRvIGJlIGNvbnZlcnRlZFxuICAgKiBAcmV0dXJuIHtab25lfVxuICAgKi9cbiAgc3RhdGljIG5vcm1hbGl6ZVpvbmUoaW5wdXQpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplWm9uZShpbnB1dCwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgd2Vla2RheSBvbiB3aGljaCB0aGUgd2VlayBzdGFydHMgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBsb2NhbGUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2VcbiAgICogQHJldHVybnMge251bWJlcn0gdGhlIHN0YXJ0IG9mIHRoZSB3ZWVrLCAxIGZvciBNb25kYXkgdGhyb3VnaCA3IGZvciBTdW5kYXlcbiAgICovXG4gIHN0YXRpYyBnZXRTdGFydE9mV2Vlayh7IGxvY2FsZSA9IG51bGwsIGxvY09iaiA9IG51bGwgfSA9IHt9KSB7XG4gICAgcmV0dXJuIChsb2NPYmogfHwgTG9jYWxlLmNyZWF0ZShsb2NhbGUpKS5nZXRTdGFydE9mV2VlaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWluaW11bSBudW1iZXIgb2YgZGF5cyBuZWNlc3NhcnkgaW4gYSB3ZWVrIGJlZm9yZSBpdCBpcyBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIG5leHQgeWVhciBhY2NvcmRpbmdcbiAgICogdG8gdGhlIGdpdmVuIGxvY2FsZS5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgc3RhdGljIGdldE1pbmltdW1EYXlzSW5GaXJzdFdlZWsoeyBsb2NhbGUgPSBudWxsLCBsb2NPYmogPSBudWxsIH0gPSB7fSkge1xuICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlKSkuZ2V0TWluRGF5c0luRmlyc3RXZWVrKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB3ZWVrZGF5cywgd2hpY2ggYXJlIGNvbnNpZGVyZWQgdGhlIHdlZWtlbmQgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBsb2NhbGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119IGFuIGFycmF5IG9mIHdlZWtkYXlzLCAxIGZvciBNb25kYXkgdGhyb3VnaCA3IGZvciBTdW5kYXlcbiAgICovXG4gIHN0YXRpYyBnZXRXZWVrZW5kV2Vla2RheXMoeyBsb2NhbGUgPSBudWxsLCBsb2NPYmogPSBudWxsIH0gPSB7fSkge1xuICAgIC8vIGNvcHkgdGhlIGFycmF5LCBiZWNhdXNlIHdlIGNhY2hlIGl0IGludGVybmFsbHlcbiAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSkpLmdldFdlZWtlbmREYXlzKCkuc2xpY2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2Ygc3RhbmRhbG9uZSBtb250aCBuYW1lcy5cbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlVGltZUZvcm1hdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgbW9udGggcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJudW1lcmljXCIsIFwiMi1kaWdpdFwiLCBcIm5hcnJvd1wiLCBcInNob3J0XCIsIFwibG9uZ1wiXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtPW51bGxdIC0gdGhlIG51bWJlcmluZyBzeXN0ZW1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY09iaj1udWxsXSAtIGFuIGV4aXN0aW5nIGxvY2FsZSBvYmplY3QgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5vdXRwdXRDYWxlbmRhcj0nZ3JlZ29yeSddIC0gdGhlIGNhbGVuZGFyXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKClbMF0gLy89PiAnSmFudWFyeSdcbiAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ3Nob3J0JylbMF0gLy89PiAnSmFuJ1xuICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnbnVtZXJpYycpWzBdIC8vPT4gJzEnXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdzaG9ydCcsIHsgbG9jYWxlOiAnZnItQ0EnIH0gKVswXSAvLz0+ICdqYW52LidcbiAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ251bWVyaWMnLCB7IGxvY2FsZTogJ2FyJyB9KVswXSAvLz0+ICfZoSdcbiAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ2xvbmcnLCB7IG91dHB1dENhbGVuZGFyOiAnaXNsYW1pYycgfSlbMF0gLy89PiAnUmFiacq7IEknXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIG1vbnRocyhcbiAgICBsZW5ndGggPSBcImxvbmdcIixcbiAgICB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwsIGxvY09iaiA9IG51bGwsIG91dHB1dENhbGVuZGFyID0gXCJncmVnb3J5XCIgfSA9IHt9XG4gICkge1xuICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKSkubW9udGhzKGxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIGZvcm1hdCBtb250aCBuYW1lcy5cbiAgICogRm9ybWF0IG1vbnRocyBkaWZmZXIgZnJvbSBzdGFuZGFsb25lIG1vbnRocyBpbiB0aGF0IHRoZXkncmUgbWVhbnQgdG8gYXBwZWFyIG5leHQgdG8gdGhlIGRheSBvZiB0aGUgbW9udGguIEluIHNvbWUgbGFuZ3VhZ2VzLCB0aGF0XG4gICAqIGNoYW5nZXMgdGhlIHN0cmluZy5cbiAgICogU2VlIHtAbGluayBJbmZvI21vbnRoc31cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwibnVtZXJpY1wiLCBcIjItZGlnaXRcIiwgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXI9J2dyZWdvcnknXSAtIHRoZSBjYWxlbmRhclxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyBtb250aHNGb3JtYXQoXG4gICAgbGVuZ3RoID0gXCJsb25nXCIsXG4gICAgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsLCBsb2NPYmogPSBudWxsLCBvdXRwdXRDYWxlbmRhciA9IFwiZ3JlZ29yeVwiIH0gPSB7fVxuICApIHtcbiAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhcikpLm1vbnRocyhsZW5ndGgsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBvZiBzdGFuZGFsb25lIHdlZWsgbmFtZXMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIHdlZWtkYXkgcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5udW1iZXJpbmdTeXN0ZW09bnVsbF0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2VcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygpWzBdIC8vPT4gJ01vbmRheSdcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygnc2hvcnQnKVswXSAvLz0+ICdNb24nXG4gICAqIEBleGFtcGxlIEluZm8ud2Vla2RheXMoJ3Nob3J0JywgeyBsb2NhbGU6ICdmci1DQScgfSlbMF0gLy89PiAnbHVuLidcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygnc2hvcnQnLCB7IGxvY2FsZTogJ2FyJyB9KVswXSAvLz0+ICfYp9mE2KfYq9mG2YrZhidcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzdGF0aWMgd2Vla2RheXMobGVuZ3RoID0gXCJsb25nXCIsIHsgbG9jYWxlID0gbnVsbCwgbnVtYmVyaW5nU3lzdGVtID0gbnVsbCwgbG9jT2JqID0gbnVsbCB9ID0ge30pIHtcbiAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBudWxsKSkud2Vla2RheXMobGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgZm9ybWF0IHdlZWsgbmFtZXMuXG4gICAqIEZvcm1hdCB3ZWVrZGF5cyBkaWZmZXIgZnJvbSBzdGFuZGFsb25lIHdlZWtkYXlzIGluIHRoYXQgdGhleSdyZSBtZWFudCB0byBhcHBlYXIgbmV4dCB0byBtb3JlIGRhdGUgaW5mb3JtYXRpb24uIEluIHNvbWUgbGFuZ3VhZ2VzLCB0aGF0XG4gICAqIGNoYW5nZXMgdGhlIHN0cmluZy5cbiAgICogU2VlIHtAbGluayBJbmZvI3dlZWtkYXlzfVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgbW9udGggcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9bnVsbF0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyB3ZWVrZGF5c0Zvcm1hdChcbiAgICBsZW5ndGggPSBcImxvbmdcIixcbiAgICB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwsIGxvY09iaiA9IG51bGwgfSA9IHt9XG4gICkge1xuICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG51bGwpKS53ZWVrZGF5cyhsZW5ndGgsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBvZiBtZXJpZGllbXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZVxuICAgKiBAZXhhbXBsZSBJbmZvLm1lcmlkaWVtcygpIC8vPT4gWyAnQU0nLCAnUE0nIF1cbiAgICogQGV4YW1wbGUgSW5mby5tZXJpZGllbXMoeyBsb2NhbGU6ICdteScgfSkgLy89PiBbICfhgJThgLbhgJThgIDhgLonLCAn4YCK4YCU4YCxJyBdXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIG1lcmlkaWVtcyh7IGxvY2FsZSA9IG51bGwgfSA9IHt9KSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlKS5tZXJpZGllbXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgZXJhcywgc3VjaCBhcyBbJ0JDJywgJ0FEJ10uIFRoZSBsb2NhbGUgY2FuIGJlIHNwZWNpZmllZCwgYnV0IHRoZSBjYWxlbmRhciBzeXN0ZW0gaXMgYWx3YXlzIEdyZWdvcmlhbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J3Nob3J0J10gLSB0aGUgbGVuZ3RoIG9mIHRoZSBlcmEgcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJzaG9ydFwiIG9yIFwibG9uZ1wiLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQGV4YW1wbGUgSW5mby5lcmFzKCkgLy89PiBbICdCQycsICdBRCcgXVxuICAgKiBAZXhhbXBsZSBJbmZvLmVyYXMoJ2xvbmcnKSAvLz0+IFsgJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknIF1cbiAgICogQGV4YW1wbGUgSW5mby5lcmFzKCdsb25nJywgeyBsb2NhbGU6ICdmcicgfSkgLy89PiBbICdhdmFudCBKw6lzdXMtQ2hyaXN0JywgJ2FwcsOocyBKw6lzdXMtQ2hyaXN0JyBdXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIGVyYXMobGVuZ3RoID0gXCJzaG9ydFwiLCB7IGxvY2FsZSA9IG51bGwgfSA9IHt9KSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlLCBudWxsLCBcImdyZWdvcnlcIikuZXJhcyhsZW5ndGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc2V0IG9mIGF2YWlsYWJsZSBmZWF0dXJlcyBpbiB0aGlzIGVudmlyb25tZW50LlxuICAgKiBTb21lIGZlYXR1cmVzIG9mIEx1eG9uIGFyZSBub3QgYXZhaWxhYmxlIGluIGFsbCBlbnZpcm9ubWVudHMuIEZvciBleGFtcGxlLCBvbiBvbGRlciBicm93c2VycywgcmVsYXRpdmUgdGltZSBmb3JtYXR0aW5nIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZS4gVXNlIHRoaXMgZnVuY3Rpb24gdG8gZmlndXJlIG91dCBpZiB0aGF0J3MgdGhlIGNhc2UuXG4gICAqIEtleXM6XG4gICAqICogYHJlbGF0aXZlYDogd2hldGhlciB0aGlzIGVudmlyb25tZW50IHN1cHBvcnRzIHJlbGF0aXZlIHRpbWUgZm9ybWF0dGluZ1xuICAgKiAqIGBsb2NhbGVXZWVrYDogd2hldGhlciB0aGlzIGVudmlyb25tZW50IHN1cHBvcnRzIGRpZmZlcmVudCB3ZWVrZGF5cyBmb3IgdGhlIHN0YXJ0IG9mIHRoZSB3ZWVrIGJhc2VkIG9uIHRoZSBsb2NhbGVcbiAgICogQGV4YW1wbGUgSW5mby5mZWF0dXJlcygpIC8vPT4geyByZWxhdGl2ZTogZmFsc2UsIGxvY2FsZVdlZWs6IHRydWUgfVxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZmVhdHVyZXMoKSB7XG4gICAgcmV0dXJuIHsgcmVsYXRpdmU6IGhhc1JlbGF0aXZlKCksIGxvY2FsZVdlZWs6IGhhc0xvY2FsZVdlZWtJbmZvKCkgfTtcbiAgfVxufVxuIiwiaW1wb3J0IERhdGVUaW1lLCB7IGZyaWVuZGx5RGF0ZVRpbWUgfSBmcm9tIFwiLi9kYXRldGltZS5qc1wiO1xuaW1wb3J0IER1cmF0aW9uIGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBJbnZhbGlkSW50ZXJ2YWxFcnJvciB9IGZyb20gXCIuL2Vycm9ycy5qc1wiO1xuaW1wb3J0IEludmFsaWQgZnJvbSBcIi4vaW1wbC9pbnZhbGlkLmpzXCI7XG5pbXBvcnQgRm9ybWF0dGVyIGZyb20gXCIuL2ltcGwvZm9ybWF0dGVyLmpzXCI7XG5pbXBvcnQgKiBhcyBGb3JtYXRzIGZyb20gXCIuL2ltcGwvZm9ybWF0cy5qc1wiO1xuXG5jb25zdCBJTlZBTElEID0gXCJJbnZhbGlkIEludGVydmFsXCI7XG5cbi8vIGNoZWNrcyBpZiB0aGUgc3RhcnQgaXMgZXF1YWwgdG8gb3IgYmVmb3JlIHRoZSBlbmRcbmZ1bmN0aW9uIHZhbGlkYXRlU3RhcnRFbmQoc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0IHx8ICFzdGFydC5pc1ZhbGlkKSB7XG4gICAgcmV0dXJuIEludGVydmFsLmludmFsaWQoXCJtaXNzaW5nIG9yIGludmFsaWQgc3RhcnRcIik7XG4gIH0gZWxzZSBpZiAoIWVuZCB8fCAhZW5kLmlzVmFsaWQpIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwuaW52YWxpZChcIm1pc3Npbmcgb3IgaW52YWxpZCBlbmRcIik7XG4gIH0gZWxzZSBpZiAoZW5kIDwgc3RhcnQpIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwuaW52YWxpZChcbiAgICAgIFwiZW5kIGJlZm9yZSBzdGFydFwiLFxuICAgICAgYFRoZSBlbmQgb2YgYW4gaW50ZXJ2YWwgbXVzdCBiZSBhZnRlciBpdHMgc3RhcnQsIGJ1dCB5b3UgaGFkIHN0YXJ0PSR7c3RhcnQudG9JU08oKX0gYW5kIGVuZD0ke2VuZC50b0lTTygpfWBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQW4gSW50ZXJ2YWwgb2JqZWN0IHJlcHJlc2VudHMgYSBoYWxmLW9wZW4gaW50ZXJ2YWwgb2YgdGltZSwgd2hlcmUgZWFjaCBlbmRwb2ludCBpcyBhIHtAbGluayBEYXRlVGltZX0uIENvbmNlcHR1YWxseSwgaXQncyBhIGNvbnRhaW5lciBmb3IgdGhvc2UgdHdvIGVuZHBvaW50cywgYWNjb21wYW5pZWQgYnkgbWV0aG9kcyBmb3IgY3JlYXRpbmcsIHBhcnNpbmcsIGludGVycm9nYXRpbmcsIGNvbXBhcmluZywgdHJhbnNmb3JtaW5nLCBhbmQgZm9ybWF0dGluZyB0aGVtLlxuICpcbiAqIEhlcmUgaXMgYSBicmllZiBvdmVydmlldyBvZiB0aGUgbW9zdCBjb21tb25seSB1c2VkIG1ldGhvZHMgYW5kIGdldHRlcnMgaW4gSW50ZXJ2YWw6XG4gKlxuICogKiAqKkNyZWF0aW9uKiogVG8gY3JlYXRlIGFuIEludGVydmFsLCB1c2Uge0BsaW5rIEludGVydmFsLmZyb21EYXRlVGltZXN9LCB7QGxpbmsgSW50ZXJ2YWwuYWZ0ZXJ9LCB7QGxpbmsgSW50ZXJ2YWwuYmVmb3JlfSwgb3Ige0BsaW5rIEludGVydmFsLmZyb21JU099LlxuICogKiAqKkFjY2Vzc29ycyoqIFVzZSB7QGxpbmsgSW50ZXJ2YWwjc3RhcnR9IGFuZCB7QGxpbmsgSW50ZXJ2YWwjZW5kfSB0byBnZXQgdGhlIHN0YXJ0IGFuZCBlbmQuXG4gKiAqICoqSW50ZXJyb2dhdGlvbioqIFRvIGFuYWx5emUgdGhlIEludGVydmFsLCB1c2Uge0BsaW5rIEludGVydmFsI2NvdW50fSwge0BsaW5rIEludGVydmFsI2xlbmd0aH0sIHtAbGluayBJbnRlcnZhbCNoYXNTYW1lfSwge0BsaW5rIEludGVydmFsI2NvbnRhaW5zfSwge0BsaW5rIEludGVydmFsI2lzQWZ0ZXJ9LCBvciB7QGxpbmsgSW50ZXJ2YWwjaXNCZWZvcmV9LlxuICogKiAqKlRyYW5zZm9ybWF0aW9uKiogVG8gY3JlYXRlIG90aGVyIEludGVydmFscyBvdXQgb2YgdGhpcyBvbmUsIHVzZSB7QGxpbmsgSW50ZXJ2YWwjc2V0fSwge0BsaW5rIEludGVydmFsI3NwbGl0QXR9LCB7QGxpbmsgSW50ZXJ2YWwjc3BsaXRCeX0sIHtAbGluayBJbnRlcnZhbCNkaXZpZGVFcXVhbGx5fSwge0BsaW5rIEludGVydmFsLm1lcmdlfSwge0BsaW5rIEludGVydmFsLnhvcn0sIHtAbGluayBJbnRlcnZhbCN1bmlvbn0sIHtAbGluayBJbnRlcnZhbCNpbnRlcnNlY3Rpb259LCBvciB7QGxpbmsgSW50ZXJ2YWwjZGlmZmVyZW5jZX0uXG4gKiAqICoqQ29tcGFyaXNvbioqIFRvIGNvbXBhcmUgdGhpcyBJbnRlcnZhbCB0byBhbm90aGVyIG9uZSwgdXNlIHtAbGluayBJbnRlcnZhbCNlcXVhbHN9LCB7QGxpbmsgSW50ZXJ2YWwjb3ZlcmxhcHN9LCB7QGxpbmsgSW50ZXJ2YWwjYWJ1dHNTdGFydH0sIHtAbGluayBJbnRlcnZhbCNhYnV0c0VuZH0sIHtAbGluayBJbnRlcnZhbCNlbmd1bGZzfVxuICogKiAqKk91dHB1dCoqIFRvIGNvbnZlcnQgdGhlIEludGVydmFsIGludG8gb3RoZXIgcmVwcmVzZW50YXRpb25zLCBzZWUge0BsaW5rIEludGVydmFsI3RvU3RyaW5nfSwge0BsaW5rIEludGVydmFsI3RvTG9jYWxlU3RyaW5nfSwge0BsaW5rIEludGVydmFsI3RvSVNPfSwge0BsaW5rIEludGVydmFsI3RvSVNPRGF0ZX0sIHtAbGluayBJbnRlcnZhbCN0b0lTT1RpbWV9LCB7QGxpbmsgSW50ZXJ2YWwjdG9Gb3JtYXR9LCBhbmQge0BsaW5rIEludGVydmFsI3RvRHVyYXRpb259LlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnRlcnZhbCB7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5zID0gY29uZmlnLnN0YXJ0O1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZSA9IGNvbmZpZy5lbmQ7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pbnZhbGlkID0gY29uZmlnLmludmFsaWQgfHwgbnVsbDtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzTHV4b25JbnRlcnZhbCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGludmFsaWQgSW50ZXJ2YWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gLSBzaW1wbGUgc3RyaW5nIG9mIHdoeSB0aGlzIEludGVydmFsIGlzIGludmFsaWQuIFNob3VsZCBub3QgY29udGFpbiBwYXJhbWV0ZXJzIG9yIGFueXRoaW5nIGVsc2UgZGF0YS1kZXBlbmRlbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHBsYW5hdGlvbj1udWxsXSAtIGxvbmdlciBleHBsYW5hdGlvbiwgbWF5IGluY2x1ZGUgcGFyYW1ldGVycyBhbmQgb3RoZXIgdXNlZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvblxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIHN0YXRpYyBpbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24gPSBudWxsKSB7XG4gICAgaWYgKCFyZWFzb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgSW50ZXJ2YWwgaXMgaW52YWxpZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnZhbGlkID0gcmVhc29uIGluc3RhbmNlb2YgSW52YWxpZCA/IHJlYXNvbiA6IG5ldyBJbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pO1xuXG4gICAgaWYgKFNldHRpbmdzLnRocm93T25JbnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEludGVydmFsRXJyb3IoaW52YWxpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgSW50ZXJ2YWwoeyBpbnZhbGlkIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gSW50ZXJ2YWwgZnJvbSBhIHN0YXJ0IERhdGVUaW1lIGFuZCBhbiBlbmQgRGF0ZVRpbWUuIEluY2x1c2l2ZSBvZiB0aGUgc3RhcnQgYnV0IG5vdCB0aGUgZW5kLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfERhdGV8T2JqZWN0fSBzdGFydFxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfERhdGV8T2JqZWN0fSBlbmRcbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICBzdGF0aWMgZnJvbURhdGVUaW1lcyhzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgYnVpbHRTdGFydCA9IGZyaWVuZGx5RGF0ZVRpbWUoc3RhcnQpLFxuICAgICAgYnVpbHRFbmQgPSBmcmllbmRseURhdGVUaW1lKGVuZCk7XG5cbiAgICBjb25zdCB2YWxpZGF0ZUVycm9yID0gdmFsaWRhdGVTdGFydEVuZChidWlsdFN0YXJ0LCBidWlsdEVuZCk7XG5cbiAgICBpZiAodmFsaWRhdGVFcnJvciA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbmV3IEludGVydmFsKHtcbiAgICAgICAgc3RhcnQ6IGJ1aWx0U3RhcnQsXG4gICAgICAgIGVuZDogYnVpbHRFbmQsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHZhbGlkYXRlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGEgc3RhcnQgRGF0ZVRpbWUgYW5kIGEgRHVyYXRpb24gdG8gZXh0ZW5kIHRvLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfERhdGV8T2JqZWN0fSBzdGFydFxuICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gdGhlIGxlbmd0aCBvZiB0aGUgSW50ZXJ2YWwuXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgc3RhdGljIGFmdGVyKHN0YXJ0LCBkdXJhdGlvbikge1xuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLFxuICAgICAgZHQgPSBmcmllbmRseURhdGVUaW1lKHN0YXJ0KTtcbiAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdCwgZHQucGx1cyhkdXIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gSW50ZXJ2YWwgZnJvbSBhbiBlbmQgRGF0ZVRpbWUgYW5kIGEgRHVyYXRpb24gdG8gZXh0ZW5kIGJhY2t3YXJkcyB0by5cbiAgICogQHBhcmFtIHtEYXRlVGltZXxEYXRlfE9iamVjdH0gZW5kXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSB0aGUgbGVuZ3RoIG9mIHRoZSBJbnRlcnZhbC5cbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICBzdGF0aWMgYmVmb3JlKGVuZCwgZHVyYXRpb24pIHtcbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKSxcbiAgICAgIGR0ID0gZnJpZW5kbHlEYXRlVGltZShlbmQpO1xuICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0Lm1pbnVzKGR1ciksIGR0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gSW50ZXJ2YWwgZnJvbSBhbiBJU08gODYwMSBzdHJpbmcuXG4gICAqIEFjY2VwdHMgYDxzdGFydD4vPGVuZD5gLCBgPHN0YXJ0Pi88ZHVyYXRpb24+YCwgYW5kIGA8ZHVyYXRpb24+LzxlbmQ+YCBmb3JtYXRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBJU08gc3RyaW5nIHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBvcHRpb25zIHRvIHBhc3Mge0BsaW5rIERhdGVUaW1lI2Zyb21JU099IGFuZCBvcHRpb25hbGx5IHtAbGluayBEdXJhdGlvbiNmcm9tSVNPfVxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgc3RhdGljIGZyb21JU08odGV4dCwgb3B0cykge1xuICAgIGNvbnN0IFtzLCBlXSA9ICh0ZXh0IHx8IFwiXCIpLnNwbGl0KFwiL1wiLCAyKTtcbiAgICBpZiAocyAmJiBlKSB7XG4gICAgICBsZXQgc3RhcnQsIHN0YXJ0SXNWYWxpZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0YXJ0ID0gRGF0ZVRpbWUuZnJvbUlTTyhzLCBvcHRzKTtcbiAgICAgICAgc3RhcnRJc1ZhbGlkID0gc3RhcnQuaXNWYWxpZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc3RhcnRJc1ZhbGlkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGxldCBlbmQsIGVuZElzVmFsaWQ7XG4gICAgICB0cnkge1xuICAgICAgICBlbmQgPSBEYXRlVGltZS5mcm9tSVNPKGUsIG9wdHMpO1xuICAgICAgICBlbmRJc1ZhbGlkID0gZW5kLmlzVmFsaWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGVuZElzVmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXJ0SXNWYWxpZCAmJiBlbmRJc1ZhbGlkKSB7XG4gICAgICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHN0YXJ0LCBlbmQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhcnRJc1ZhbGlkKSB7XG4gICAgICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21JU08oZSwgb3B0cyk7XG4gICAgICAgIGlmIChkdXIuaXNWYWxpZCkge1xuICAgICAgICAgIHJldHVybiBJbnRlcnZhbC5hZnRlcihzdGFydCwgZHVyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChlbmRJc1ZhbGlkKSB7XG4gICAgICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21JU08ocywgb3B0cyk7XG4gICAgICAgIGlmIChkdXIuaXNWYWxpZCkge1xuICAgICAgICAgIHJldHVybiBJbnRlcnZhbC5iZWZvcmUoZW5kLCBkdXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJbnRlcnZhbC5pbnZhbGlkKFwidW5wYXJzYWJsZVwiLCBgdGhlIGlucHV0IFwiJHt0ZXh0fVwiIGNhbid0IGJlIHBhcnNlZCBhcyBJU08gODYwMWApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIG9iamVjdCBpcyBhbiBJbnRlcnZhbC4gV29ya3MgYWNyb3NzIGNvbnRleHQgYm91bmRhcmllc1xuICAgKiBAcGFyYW0ge29iamVjdH0gb1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzSW50ZXJ2YWwobykge1xuICAgIHJldHVybiAobyAmJiBvLmlzTHV4b25JbnRlcnZhbCkgfHwgZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc3RhcnQgb2YgdGhlIEludGVydmFsXG4gICAqIEB0eXBlIHtEYXRlVGltZX1cbiAgICovXG4gIGdldCBzdGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5zIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBlbmQgb2YgdGhlIEludGVydmFsXG4gICAqIEB0eXBlIHtEYXRlVGltZX1cbiAgICovXG4gIGdldCBlbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuZSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBlbmQgaXMgYXQgbGVhc3QgaXRzIHN0YXJ0LCBtZWFuaW5nIHRoYXQgdGhlIEludGVydmFsIGlzbid0ICdiYWNrd2FyZHMnLlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWRSZWFzb24gPT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBlcnJvciBjb2RlIGlmIHRoaXMgSW50ZXJ2YWwgaXMgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgSW50ZXJ2YWwgaXMgdmFsaWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBpbnZhbGlkUmVhc29uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQucmVhc29uIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSB0aGlzIEludGVydmFsIGJlY2FtZSBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBJbnRlcnZhbCBpcyB2YWxpZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGludmFsaWRFeHBsYW5hdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLmV4cGxhbmF0aW9uIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIEludGVydmFsIGluIHRoZSBzcGVjaWZpZWQgdW5pdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSB0aGUgdW5pdCAoc3VjaCBhcyAnaG91cnMnIG9yICdkYXlzJykgdG8gcmV0dXJuIHRoZSBsZW5ndGggaW4uXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGxlbmd0aCh1bml0ID0gXCJtaWxsaXNlY29uZHNcIikge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnRvRHVyYXRpb24oLi4uW3VuaXRdKS5nZXQodW5pdCkgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY291bnQgb2YgbWludXRlcywgaG91cnMsIGRheXMsIG1vbnRocywgb3IgeWVhcnMgaW5jbHVkZWQgaW4gdGhlIEludGVydmFsLCBldmVuIGluIHBhcnQuXG4gICAqIFVubGlrZSB7QGxpbmsgSW50ZXJ2YWwjbGVuZ3RofSB0aGlzIGNvdW50cyBzZWN0aW9ucyBvZiB0aGUgY2FsZW5kYXIsIG5vdCBwZXJpb2RzIG9mIHRpbWUsIGUuZy4gc3BlY2lmeWluZyAnZGF5J1xuICAgKiBhc2tzICd3aGF0IGRhdGVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzIGludGVydmFsPycsIG5vdCAnaG93IG1hbnkgZGF5cyBsb25nIGlzIHRoaXMgaW50ZXJ2YWw/J1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW3VuaXQ9J21pbGxpc2Vjb25kcyddIC0gdGhlIHVuaXQgb2YgdGltZSB0byBjb3VudC5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMudXNlTG9jYWxlV2Vla3M9ZmFsc2VdIC0gSWYgdHJ1ZSwgdXNlIHdlZWtzIGJhc2VkIG9uIHRoZSBsb2NhbGUsIGkuZS4gdXNlIHRoZSBsb2NhbGUtZGVwZW5kZW50IHN0YXJ0IG9mIHRoZSB3ZWVrOyB0aGlzIG9wZXJhdGlvbiB3aWxsIGFsd2F5cyB1c2UgdGhlIGxvY2FsZSBvZiB0aGUgc3RhcnQgRGF0ZVRpbWVcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgY291bnQodW5pdCA9IFwibWlsbGlzZWNvbmRzXCIsIG9wdHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIE5hTjtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMuc3RhcnQuc3RhcnRPZih1bml0LCBvcHRzKTtcbiAgICBsZXQgZW5kO1xuICAgIGlmIChvcHRzPy51c2VMb2NhbGVXZWVrcykge1xuICAgICAgZW5kID0gdGhpcy5lbmQucmVjb25maWd1cmUoeyBsb2NhbGU6IHN0YXJ0LmxvY2FsZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kID0gdGhpcy5lbmQ7XG4gICAgfVxuICAgIGVuZCA9IGVuZC5zdGFydE9mKHVuaXQsIG9wdHMpO1xuICAgIHJldHVybiBNYXRoLmZsb29yKGVuZC5kaWZmKHN0YXJ0LCB1bml0KS5nZXQodW5pdCkpICsgKGVuZC52YWx1ZU9mKCkgIT09IHRoaXMuZW5kLnZhbHVlT2YoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBzdGFydCBhbmQgZW5kIGFyZSBib3RoIGluIHRoZSBzYW1lIHVuaXQgb2YgdGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY2hlY2sgc2FtZW5lc3Mgb25cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc1NhbWUodW5pdCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmlzRW1wdHkoKSB8fCB0aGlzLmUubWludXMoMSkuaGFzU2FtZSh0aGlzLnMsIHVuaXQpIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBoYXMgdGhlIHNhbWUgc3RhcnQgYW5kIGVuZCBEYXRlVGltZXMuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnMudmFsdWVPZigpID09PSB0aGlzLmUudmFsdWVPZigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBzdGFydCBpcyBhZnRlciB0aGUgc3BlY2lmaWVkIERhdGVUaW1lLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBkYXRlVGltZVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgaXNBZnRlcihkYXRlVGltZSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucyA+IGRhdGVUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBlbmQgaXMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IGRhdGVUaW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBpc0JlZm9yZShkYXRlVGltZSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuZSA8PSBkYXRlVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IGRhdGVUaW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBjb250YWlucyhkYXRlVGltZSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucyA8PSBkYXRlVGltZSAmJiB0aGlzLmUgPiBkYXRlVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldHNcIiB0aGUgc3RhcnQgYW5kL29yIGVuZCBkYXRlcy4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIEludGVydmFsLlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIC0gdGhlIHZhbHVlcyB0byBzZXRcbiAgICogQHBhcmFtIHtEYXRlVGltZX0gdmFsdWVzLnN0YXJ0IC0gdGhlIHN0YXJ0aW5nIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IHZhbHVlcy5lbmQgLSB0aGUgZW5kaW5nIERhdGVUaW1lXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgc2V0KHsgc3RhcnQsIGVuZCB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnQgfHwgdGhpcy5zLCBlbmQgfHwgdGhpcy5lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCB0aGlzIEludGVydmFsIGF0IGVhY2ggb2YgdGhlIHNwZWNpZmllZCBEYXRlVGltZXNcbiAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIHVuaXQgb2YgdGltZSB0byBjb3VudC5cbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzcGxpdEF0KC4uLmRhdGVUaW1lcykge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gW107XG4gICAgY29uc3Qgc29ydGVkID0gZGF0ZVRpbWVzXG4gICAgICAgIC5tYXAoZnJpZW5kbHlEYXRlVGltZSlcbiAgICAgICAgLmZpbHRlcigoZCkgPT4gdGhpcy5jb250YWlucyhkKSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEudG9NaWxsaXMoKSAtIGIudG9NaWxsaXMoKSksXG4gICAgICByZXN1bHRzID0gW107XG4gICAgbGV0IHsgcyB9ID0gdGhpcyxcbiAgICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKHMgPCB0aGlzLmUpIHtcbiAgICAgIGNvbnN0IGFkZGVkID0gc29ydGVkW2ldIHx8IHRoaXMuZSxcbiAgICAgICAgbmV4dCA9ICthZGRlZCA+ICt0aGlzLmUgPyB0aGlzLmUgOiBhZGRlZDtcbiAgICAgIHJlc3VsdHMucHVzaChJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHMsIG5leHQpKTtcbiAgICAgIHMgPSBuZXh0O1xuICAgICAgaSArPSAxO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0IHRoaXMgSW50ZXJ2YWwgaW50byBzbWFsbGVyIEludGVydmFscywgZWFjaCBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aC5cbiAgICogTGVmdCBvdmVyIHRpbWUgaXMgZ3JvdXBlZCBpbnRvIGEgc21hbGxlciBpbnRlcnZhbFxuICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGxlbmd0aCBvZiBlYWNoIHJlc3VsdGluZyBpbnRlcnZhbC5cbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzcGxpdEJ5KGR1cmF0aW9uKSB7XG4gICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbik7XG5cbiAgICBpZiAoIXRoaXMuaXNWYWxpZCB8fCAhZHVyLmlzVmFsaWQgfHwgZHVyLmFzKFwibWlsbGlzZWNvbmRzXCIpID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgbGV0IHsgcyB9ID0gdGhpcyxcbiAgICAgIGlkeCA9IDEsXG4gICAgICBuZXh0O1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgIHdoaWxlIChzIDwgdGhpcy5lKSB7XG4gICAgICBjb25zdCBhZGRlZCA9IHRoaXMuc3RhcnQucGx1cyhkdXIubWFwVW5pdHMoKHgpID0+IHggKiBpZHgpKTtcbiAgICAgIG5leHQgPSArYWRkZWQgPiArdGhpcy5lID8gdGhpcy5lIDogYWRkZWQ7XG4gICAgICByZXN1bHRzLnB1c2goSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzLCBuZXh0KSk7XG4gICAgICBzID0gbmV4dDtcbiAgICAgIGlkeCArPSAxO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0IHRoaXMgSW50ZXJ2YWwgaW50byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBzbWFsbGVyIGludGVydmFscy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlck9mUGFydHMgLSBUaGUgbnVtYmVyIG9mIEludGVydmFscyB0byBkaXZpZGUgdGhlIEludGVydmFsIGludG8uXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgZGl2aWRlRXF1YWxseShudW1iZXJPZlBhcnRzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBbXTtcbiAgICByZXR1cm4gdGhpcy5zcGxpdEJ5KHRoaXMubGVuZ3RoKCkgLyBudW1iZXJPZlBhcnRzKS5zbGljZSgwLCBudW1iZXJPZlBhcnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIG92ZXJsYXBzIHdpdGggdGhlIHNwZWNpZmllZCBJbnRlcnZhbFxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgb3ZlcmxhcHMob3RoZXIpIHtcbiAgICByZXR1cm4gdGhpcy5lID4gb3RoZXIucyAmJiB0aGlzLnMgPCBvdGhlci5lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBlbmQgaXMgYWRqYWNlbnQgdG8gdGhlIHNwZWNpZmllZCBJbnRlcnZhbCdzIHN0YXJ0LlxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgYWJ1dHNTdGFydChvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICt0aGlzLmUgPT09ICtvdGhlci5zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBzdGFydCBpcyBhZGphY2VudCB0byB0aGUgc3BlY2lmaWVkIEludGVydmFsJ3MgZW5kLlxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgYWJ1dHNFbmQob3RoZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiArb3RoZXIuZSA9PT0gK3RoaXMucztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBJbnRlcnZhbCBmdWxseSBjb250YWlucyB0aGUgc3BlY2lmaWVkIEludGVydmFsLCBzcGVjaWZpY2FsbHkgaWYgdGhlIGludGVyc2VjdCAob2YgdGhpcyBJbnRlcnZhbCBhbmQgdGhlIG90aGVyIEludGVydmFsKSBpcyBlcXVhbCB0byB0aGUgb3RoZXIgSW50ZXJ2YWw7IGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGVuZ3VsZnMob3RoZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLnMgPD0gb3RoZXIucyAmJiB0aGlzLmUgPj0gb3RoZXIuZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIGhhcyB0aGUgc2FtZSBzdGFydCBhbmQgZW5kIGFzIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBlcXVhbHMob3RoZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCB8fCAhb3RoZXIuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnMuZXF1YWxzKG90aGVyLnMpICYmIHRoaXMuZS5lcXVhbHMob3RoZXIuZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIEludGVydmFsIHJlcHJlc2VudGluZyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoaXMgSW50ZXJ2YWwgYW5kIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwuXG4gICAqIFNwZWNpZmljYWxseSwgdGhlIHJlc3VsdGluZyBJbnRlcnZhbCBoYXMgdGhlIG1heGltdW0gc3RhcnQgdGltZSBhbmQgdGhlIG1pbmltdW0gZW5kIHRpbWUgb2YgdGhlIHR3byBJbnRlcnZhbHMuXG4gICAqIFJldHVybnMgbnVsbCBpZiB0aGUgaW50ZXJzZWN0aW9uIGlzIGVtcHR5LCBtZWFuaW5nLCB0aGUgaW50ZXJ2YWxzIGRvbid0IGludGVyc2VjdC5cbiAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXJcbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICBpbnRlcnNlY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgcyA9IHRoaXMucyA+IG90aGVyLnMgPyB0aGlzLnMgOiBvdGhlci5zLFxuICAgICAgZSA9IHRoaXMuZSA8IG90aGVyLmUgPyB0aGlzLmUgOiBvdGhlci5lO1xuXG4gICAgaWYgKHMgPj0gZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHMsIGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gSW50ZXJ2YWwgcmVwcmVzZW50aW5nIHRoZSB1bmlvbiBvZiB0aGlzIEludGVydmFsIGFuZCB0aGUgc3BlY2lmaWVkIEludGVydmFsLlxuICAgKiBTcGVjaWZpY2FsbHksIHRoZSByZXN1bHRpbmcgSW50ZXJ2YWwgaGFzIHRoZSBtaW5pbXVtIHN0YXJ0IHRpbWUgYW5kIHRoZSBtYXhpbXVtIGVuZCB0aW1lIG9mIHRoZSB0d28gSW50ZXJ2YWxzLlxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIHVuaW9uKG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IHMgPSB0aGlzLnMgPCBvdGhlci5zID8gdGhpcy5zIDogb3RoZXIucyxcbiAgICAgIGUgPSB0aGlzLmUgPiBvdGhlci5lID8gdGhpcy5lIDogb3RoZXIuZTtcbiAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzLCBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZSBhbiBhcnJheSBvZiBJbnRlcnZhbHMgaW50byBhIGVxdWl2YWxlbnQgbWluaW1hbCBzZXQgb2YgSW50ZXJ2YWxzLlxuICAgKiBDb21iaW5lcyBvdmVybGFwcGluZyBhbmQgYWRqYWNlbnQgSW50ZXJ2YWxzLlxuICAgKiBAcGFyYW0ge0FycmF5fSBpbnRlcnZhbHNcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzdGF0aWMgbWVyZ2UoaW50ZXJ2YWxzKSB7XG4gICAgY29uc3QgW2ZvdW5kLCBmaW5hbF0gPSBpbnRlcnZhbHNcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnMgLSBiLnMpXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoW3NvZmFyLCBjdXJyZW50XSwgaXRlbSkgPT4ge1xuICAgICAgICAgIGlmICghY3VycmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFtzb2ZhciwgaXRlbV07XG4gICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Lm92ZXJsYXBzKGl0ZW0pIHx8IGN1cnJlbnQuYWJ1dHNTdGFydChpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtzb2ZhciwgY3VycmVudC51bmlvbihpdGVtKV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbc29mYXIuY29uY2F0KFtjdXJyZW50XSksIGl0ZW1dO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1tdLCBudWxsXVxuICAgICAgKTtcbiAgICBpZiAoZmluYWwpIHtcbiAgICAgIGZvdW5kLnB1c2goZmluYWwpO1xuICAgIH1cbiAgICByZXR1cm4gZm91bmQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIEludGVydmFscyByZXByZXNlbnRpbmcgdGhlIHNwYW5zIG9mIHRpbWUgdGhhdCBvbmx5IGFwcGVhciBpbiBvbmUgb2YgdGhlIHNwZWNpZmllZCBJbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGludGVydmFsc1xuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyB4b3IoaW50ZXJ2YWxzKSB7XG4gICAgbGV0IHN0YXJ0ID0gbnVsbCxcbiAgICAgIGN1cnJlbnRDb3VudCA9IDA7XG4gICAgY29uc3QgcmVzdWx0cyA9IFtdLFxuICAgICAgZW5kcyA9IGludGVydmFscy5tYXAoKGkpID0+IFtcbiAgICAgICAgeyB0aW1lOiBpLnMsIHR5cGU6IFwic1wiIH0sXG4gICAgICAgIHsgdGltZTogaS5lLCB0eXBlOiBcImVcIiB9LFxuICAgICAgXSksXG4gICAgICBmbGF0dGVuZWQgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0KC4uLmVuZHMpLFxuICAgICAgYXJyID0gZmxhdHRlbmVkLnNvcnQoKGEsIGIpID0+IGEudGltZSAtIGIudGltZSk7XG5cbiAgICBmb3IgKGNvbnN0IGkgb2YgYXJyKSB7XG4gICAgICBjdXJyZW50Q291bnQgKz0gaS50eXBlID09PSBcInNcIiA/IDEgOiAtMTtcblxuICAgICAgaWYgKGN1cnJlbnRDb3VudCA9PT0gMSkge1xuICAgICAgICBzdGFydCA9IGkudGltZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzdGFydCAmJiArc3RhcnQgIT09ICtpLnRpbWUpIHtcbiAgICAgICAgICByZXN1bHRzLnB1c2goSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzdGFydCwgaS50aW1lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEludGVydmFsLm1lcmdlKHJlc3VsdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBJbnRlcnZhbCByZXByZXNlbnRpbmcgdGhlIHNwYW4gb2YgdGltZSBpbiB0aGlzIEludGVydmFsIHRoYXQgZG9lc24ndCBvdmVybGFwIHdpdGggYW55IG9mIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWxzLlxuICAgKiBAcGFyYW0gey4uLkludGVydmFsfSBpbnRlcnZhbHNcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBkaWZmZXJlbmNlKC4uLmludGVydmFscykge1xuICAgIHJldHVybiBJbnRlcnZhbC54b3IoW3RoaXNdLmNvbmNhdChpbnRlcnZhbHMpKVxuICAgICAgLm1hcCgoaSkgPT4gdGhpcy5pbnRlcnNlY3Rpb24oaSkpXG4gICAgICAuZmlsdGVyKChpKSA9PiBpICYmICFpLmlzRW1wdHkoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEludGVydmFsIGFwcHJvcHJpYXRlIGZvciBkZWJ1Z2dpbmcuXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvU3RyaW5nKCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRDtcbiAgICByZXR1cm4gYFske3RoaXMucy50b0lTTygpfSDigJMgJHt0aGlzLmUudG9JU08oKX0pYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSW50ZXJ2YWwgYXBwcm9wcmlhdGUgZm9yIHRoZSBSRVBMLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBbU3ltYm9sLmZvcihcIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tXCIpXSgpIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gYEludGVydmFsIHsgc3RhcnQ6ICR7dGhpcy5zLnRvSVNPKCl9LCBlbmQ6ICR7dGhpcy5lLnRvSVNPKCl9IH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYEludGVydmFsIHsgSW52YWxpZCwgcmVhc29uOiAke3RoaXMuaW52YWxpZFJlYXNvbn0gfWA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsb2NhbGl6ZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGlzIEludGVydmFsLiBBY2NlcHRzIHRoZSBzYW1lIG9wdGlvbnMgYXMgdGhlXG4gICAqIEludGwuRGF0ZVRpbWVGb3JtYXQgY29uc3RydWN0b3IgYW5kIGFueSBwcmVzZXRzIGRlZmluZWQgYnkgTHV4b24sIHN1Y2ggYXNcbiAgICoge0BsaW5rIERhdGVUaW1lLkRBVEVfRlVMTH0gb3Ige0BsaW5rIERhdGVUaW1lLlRJTUVfU0lNUExFfS4gVGhlIGV4YWN0IGJlaGF2aW9yIG9mIHRoaXMgbWV0aG9kXG4gICAqIGlzIGJyb3dzZXItc3BlY2lmaWMsIGJ1dCBpbiBnZW5lcmFsIGl0IHdpbGwgcmV0dXJuIGFuIGFwcHJvcHJpYXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZVxuICAgKiBJbnRlcnZhbCBpbiB0aGUgYXNzaWduZWQgbG9jYWxlLiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlblxuICAgKiBzcGVjaWZpZWQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtmb3JtYXRPcHRzPURhdGVUaW1lLkRBVEVfU0hPUlRdIC0gRWl0aGVyIGEgRGF0ZVRpbWUgcHJlc2V0IG9yXG4gICAqIEludGwuRGF0ZVRpbWVGb3JtYXQgY29uc3RydWN0b3Igb3B0aW9ucy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBPcHRpb25zIHRvIG92ZXJyaWRlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBzdGFydCBEYXRlVGltZS5cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbUlTTygnMjAyMi0xMS0wN1QwOTowMFovMjAyMi0xMS0wOFQwOTowMFonKS50b0xvY2FsZVN0cmluZygpOyAvLz0+IDExLzcvMjAyMiDigJMgMTEvOC8yMDIyXG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21JU08oJzIwMjItMTEtMDdUMDk6MDBaLzIwMjItMTEtMDhUMDk6MDBaJykudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURV9GVUxMKTsgLy89PiBOb3ZlbWJlciA3IOKAkyA4LCAyMDIyXG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21JU08oJzIwMjItMTEtMDdUMDk6MDBaLzIwMjItMTEtMDhUMDk6MDBaJykudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURV9GVUxMLCB7IGxvY2FsZTogJ2ZyLUZSJyB9KTsgLy89PiA34oCTOCBub3ZlbWJyZSAyMDIyXG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21JU08oJzIwMjItMTEtMDdUMTc6MDBaLzIwMjItMTEtMDdUMTk6MDBaJykudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuVElNRV9TSU1QTEUpOyAvLz0+IDY6MDAg4oCTIDg6MDAgUE1cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbUlTTygnMjAyMi0xMS0wN1QxNzowMFovMjAyMi0xMS0wN1QxOTowMFonKS50b0xvY2FsZVN0cmluZyh7IHdlZWtkYXk6ICdzaG9ydCcsIG1vbnRoOiAnc2hvcnQnLCBkYXk6ICcyLWRpZ2l0JywgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTsgLy89PiBNb24sIE5vdiAwNywgNjowMCDigJMgODowMCBwXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvTG9jYWxlU3RyaW5nKGZvcm1hdE9wdHMgPSBGb3JtYXRzLkRBVEVfU0hPUlQsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRcbiAgICAgID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLnMubG9jLmNsb25lKG9wdHMpLCBmb3JtYXRPcHRzKS5mb3JtYXRJbnRlcnZhbCh0aGlzKVxuICAgICAgOiBJTlZBTElEO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEludGVydmFsLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVGhlIHNhbWUgb3B0aW9ucyBhcyB7QGxpbmsgRGF0ZVRpbWUjdG9JU099XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPKG9wdHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQ7XG4gICAgcmV0dXJuIGAke3RoaXMucy50b0lTTyhvcHRzKX0vJHt0aGlzLmUudG9JU08ob3B0cyl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgZGF0ZSBvZiB0aGlzIEludGVydmFsLlxuICAgKiBUaGUgdGltZSBjb21wb25lbnRzIGFyZSBpZ25vcmVkLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPRGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQ7XG4gICAgcmV0dXJuIGAke3RoaXMucy50b0lTT0RhdGUoKX0vJHt0aGlzLmUudG9JU09EYXRlKCl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGltZSBvZiB0aGlzIEludGVydmFsLlxuICAgKiBUaGUgZGF0ZSBjb21wb25lbnRzIGFyZSBpZ25vcmVkLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVGhlIHNhbWUgb3B0aW9ucyBhcyB7QGxpbmsgRGF0ZVRpbWUjdG9JU099XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPVGltZShvcHRzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEO1xuICAgIHJldHVybiBgJHt0aGlzLnMudG9JU09UaW1lKG9wdHMpfS8ke3RoaXMuZS50b0lTT1RpbWUob3B0cyl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSW50ZXJ2YWwgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGZvcm1hdFxuICAgKiBzdHJpbmcuICoqWW91IG1heSBub3Qgd2FudCB0aGlzLioqIFNlZSB7QGxpbmsgSW50ZXJ2YWwjdG9Mb2NhbGVTdHJpbmd9IGZvciBhIG1vcmUgZmxleGlibGVcbiAgICogZm9ybWF0dGluZyB0b29sLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0ZUZvcm1hdCAtIFRoZSBmb3JtYXQgc3RyaW5nLiBUaGlzIHN0cmluZyBmb3JtYXRzIHRoZSBzdGFydCBhbmQgZW5kIHRpbWUuXG4gICAqIFNlZSB7QGxpbmsgRGF0ZVRpbWUjdG9Gb3JtYXR9IGZvciBkZXRhaWxzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5zZXBhcmF0b3IgPSAgJyDigJMgJ10gLSBBIHNlcGFyYXRvciB0byBwbGFjZSBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kXG4gICAqIHJlcHJlc2VudGF0aW9ucy5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9Gb3JtYXQoZGF0ZUZvcm1hdCwgeyBzZXBhcmF0b3IgPSBcIiDigJMgXCIgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEO1xuICAgIHJldHVybiBgJHt0aGlzLnMudG9Gb3JtYXQoZGF0ZUZvcm1hdCl9JHtzZXBhcmF0b3J9JHt0aGlzLmUudG9Gb3JtYXQoZGF0ZUZvcm1hdCl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHRpbWUgc3Bhbm5lZCBieSB0aGlzIGludGVydmFsLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3VuaXQ9WydtaWxsaXNlY29uZHMnXV0gLSB0aGUgdW5pdCBvciB1bml0cyAoc3VjaCBhcyAnaG91cnMnIG9yICdkYXlzJykgdG8gaW5jbHVkZSBpbiB0aGUgZHVyYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgdGhlIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKCkudG9PYmplY3QoKSAvLz0+IHsgbWlsbGlzZWNvbmRzOiA4ODQ4OTI1NyB9XG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oJ2RheXMnKS50b09iamVjdCgpIC8vPT4geyBkYXlzOiAxLjAyNDE4MTIxNTI3Nzc3NzggfVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKFsnaG91cnMnLCAnbWludXRlcyddKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMjQsIG1pbnV0ZXM6IDM0LjgyMDk1IH1cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikudG9EdXJhdGlvbihbJ2hvdXJzJywgJ21pbnV0ZXMnLCAnc2Vjb25kcyddKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMjQsIG1pbnV0ZXM6IDM0LCBzZWNvbmRzOiA0OS4yNTcgfVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKCdzZWNvbmRzJykudG9PYmplY3QoKSAvLz0+IHsgc2Vjb25kczogODg0ODkuMjU3IH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICB0b0R1cmF0aW9uKHVuaXQsIG9wdHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmludmFsaWQodGhpcy5pbnZhbGlkUmVhc29uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZS5kaWZmKHRoaXMucywgdW5pdCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogUnVuIG1hcEZuIG9uIHRoZSBpbnRlcnZhbCBzdGFydCBhbmQgZW5kLCByZXR1cm5pbmcgYSBuZXcgSW50ZXJ2YWwgZnJvbSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtYXBGblxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikubWFwRW5kcG9pbnRzKGVuZHBvaW50ID0+IGVuZHBvaW50LnRvVVRDKCkpXG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLm1hcEVuZHBvaW50cyhlbmRwb2ludCA9PiBlbmRwb2ludC5wbHVzKHsgaG91cnM6IDIgfSkpXG4gICAqL1xuICBtYXBFbmRwb2ludHMobWFwRm4pIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhtYXBGbih0aGlzLnMpLCBtYXBGbih0aGlzLmUpKTtcbiAgfVxufVxuIiwiaW1wb3J0IERhdGVUaW1lIGZyb20gXCIuL2RhdGV0aW1lLmpzXCI7XG5pbXBvcnQgRHVyYXRpb24gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcbmltcG9ydCBJbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IEluZm8gZnJvbSBcIi4vaW5mby5qc1wiO1xuaW1wb3J0IFpvbmUgZnJvbSBcIi4vem9uZS5qc1wiO1xuaW1wb3J0IEZpeGVkT2Zmc2V0Wm9uZSBmcm9tIFwiLi96b25lcy9maXhlZE9mZnNldFpvbmUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuaW1wb3J0IEludmFsaWRab25lIGZyb20gXCIuL3pvbmVzL2ludmFsaWRab25lLmpzXCI7XG5pbXBvcnQgU3lzdGVtWm9uZSBmcm9tIFwiLi96b25lcy9zeXN0ZW1ab25lLmpzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MuanNcIjtcblxuY29uc3QgVkVSU0lPTiA9IFwiMy41LjBcIjtcblxuZXhwb3J0IHtcbiAgVkVSU0lPTixcbiAgRGF0ZVRpbWUsXG4gIER1cmF0aW9uLFxuICBJbnRlcnZhbCxcbiAgSW5mbyxcbiAgWm9uZSxcbiAgRml4ZWRPZmZzZXRab25lLFxuICBJQU5BWm9uZSxcbiAgSW52YWxpZFpvbmUsXG4gIFN5c3RlbVpvbmUsXG4gIFNldHRpbmdzLFxufTtcbiIsImltcG9ydCBTeXN0ZW1ab25lIGZyb20gXCIuL3pvbmVzL3N5c3RlbVpvbmUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuaW1wb3J0IExvY2FsZSBmcm9tIFwiLi9pbXBsL2xvY2FsZS5qc1wiO1xuaW1wb3J0IERhdGVUaW1lIGZyb20gXCIuL2RhdGV0aW1lLmpzXCI7XG5cbmltcG9ydCB7IG5vcm1hbGl6ZVpvbmUgfSBmcm9tIFwiLi9pbXBsL3pvbmVVdGlsLmpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVdlZWtTZXR0aW5ncyB9IGZyb20gXCIuL2ltcGwvdXRpbC5qc1wiO1xuaW1wb3J0IHsgcmVzZXREaWdpdFJlZ2V4Q2FjaGUgfSBmcm9tIFwiLi9pbXBsL2RpZ2l0cy5qc1wiO1xuXG5sZXQgbm93ID0gKCkgPT4gRGF0ZS5ub3coKSxcbiAgZGVmYXVsdFpvbmUgPSBcInN5c3RlbVwiLFxuICBkZWZhdWx0TG9jYWxlID0gbnVsbCxcbiAgZGVmYXVsdE51bWJlcmluZ1N5c3RlbSA9IG51bGwsXG4gIGRlZmF1bHRPdXRwdXRDYWxlbmRhciA9IG51bGwsXG4gIHR3b0RpZ2l0Q3V0b2ZmWWVhciA9IDYwLFxuICB0aHJvd09uSW52YWxpZCxcbiAgZGVmYXVsdFdlZWtTZXR0aW5ncyA9IG51bGw7XG5cbi8qKlxuICogU2V0dGluZ3MgY29udGFpbnMgc3RhdGljIGdldHRlcnMgYW5kIHNldHRlcnMgdGhhdCBjb250cm9sIEx1eG9uJ3Mgb3ZlcmFsbCBiZWhhdmlvci4gTHV4b24gaXMgYSBzaW1wbGUgbGlicmFyeSB3aXRoIGZldyBvcHRpb25zLCBidXQgdGhlIG9uZXMgaXQgZG9lcyBoYXZlIGxpdmUgaGVyZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2V0dGluZ3Mge1xuICAvKipcbiAgICogR2V0IHRoZSBjYWxsYmFjayBmb3IgcmV0dXJuaW5nIHRoZSBjdXJyZW50IHRpbWVzdGFtcC5cbiAgICogQHR5cGUge2Z1bmN0aW9ufVxuICAgKi9cbiAgc3RhdGljIGdldCBub3coKSB7XG4gICAgcmV0dXJuIG5vdztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNhbGxiYWNrIGZvciByZXR1cm5pbmcgdGhlIGN1cnJlbnQgdGltZXN0YW1wLlxuICAgKiBUaGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhIG51bWJlciwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBFcG9jaCBtaWxsaXNlY29uZCBjb3VudFxuICAgKiBAdHlwZSB7ZnVuY3Rpb259XG4gICAqIEBleGFtcGxlIFNldHRpbmdzLm5vdyA9ICgpID0+IERhdGUubm93KCkgKyAzMDAwIC8vIHByZXRlbmQgaXQgaXMgMyBzZWNvbmRzIGluIHRoZSBmdXR1cmVcbiAgICogQGV4YW1wbGUgU2V0dGluZ3Mubm93ID0gKCkgPT4gMCAvLyBhbHdheXMgcHJldGVuZCBpdCdzIEphbiAxLCAxOTcwIGF0IG1pZG5pZ2h0IGluIFVUQyB0aW1lXG4gICAqL1xuICBzdGF0aWMgc2V0IG5vdyhuKSB7XG4gICAgbm93ID0gbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgdGltZSB6b25lIHRvIGNyZWF0ZSBEYXRlVGltZXMgaW4uIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIFVzZSB0aGUgdmFsdWUgXCJzeXN0ZW1cIiB0byByZXNldCB0aGlzIHZhbHVlIHRvIHRoZSBzeXN0ZW0ncyB0aW1lIHpvbmUuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgc2V0IGRlZmF1bHRab25lKHpvbmUpIHtcbiAgICBkZWZhdWx0Wm9uZSA9IHpvbmU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZWZhdWx0IHRpbWUgem9uZSBvYmplY3QgY3VycmVudGx5IHVzZWQgdG8gY3JlYXRlIERhdGVUaW1lcy4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIHN5c3RlbSdzIHRpbWUgem9uZSAodGhlIG9uZSBzZXQgb24gdGhlIG1hY2hpbmUgdGhhdCBydW5zIHRoaXMgY29kZSkuXG4gICAqIEB0eXBlIHtab25lfVxuICAgKi9cbiAgc3RhdGljIGdldCBkZWZhdWx0Wm9uZSgpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplWm9uZShkZWZhdWx0Wm9uZSwgU3lzdGVtWm9uZS5pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZWZhdWx0IGxvY2FsZSB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRMb2NhbGUoKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRMb2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IGxvY2FsZSB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgc2V0IGRlZmF1bHRMb2NhbGUobG9jYWxlKSB7XG4gICAgZGVmYXVsdExvY2FsZSA9IGxvY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgbnVtYmVyaW5nIHN5c3RlbSB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgZ2V0IGRlZmF1bHROdW1iZXJpbmdTeXN0ZW0oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHROdW1iZXJpbmdTeXN0ZW07XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IG51bWJlcmluZyBzeXN0ZW0gdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgc3RhdGljIHNldCBkZWZhdWx0TnVtYmVyaW5nU3lzdGVtKG51bWJlcmluZ1N5c3RlbSkge1xuICAgIGRlZmF1bHROdW1iZXJpbmdTeXN0ZW0gPSBudW1iZXJpbmdTeXN0ZW07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZWZhdWx0IG91dHB1dCBjYWxlbmRhciB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRPdXRwdXRDYWxlbmRhcigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE91dHB1dENhbGVuZGFyO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCBvdXRwdXQgY2FsZW5kYXIgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgc3RhdGljIHNldCBkZWZhdWx0T3V0cHV0Q2FsZW5kYXIob3V0cHV0Q2FsZW5kYXIpIHtcbiAgICBkZWZhdWx0T3V0cHV0Q2FsZW5kYXIgPSBvdXRwdXRDYWxlbmRhcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBXZWVrU2V0dGluZ3NcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IGZpcnN0RGF5XG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtaW5pbWFsRGF5c1xuICAgKiBAcHJvcGVydHkge251bWJlcltdfSB3ZWVrZW5kXG4gICAqL1xuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtXZWVrU2V0dGluZ3N8bnVsbH1cbiAgICovXG4gIHN0YXRpYyBnZXQgZGVmYXVsdFdlZWtTZXR0aW5ncygpIHtcbiAgICByZXR1cm4gZGVmYXVsdFdlZWtTZXR0aW5ncztcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3Mgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBsb2NhbGUgd2VlayBzZXR0aW5ncywgaS5lLiB0aGUgc3RhcnQgb2YgdGhlIHdlZWssIHRoZSB3ZWVrZW5kIGFuZFxuICAgKiBob3cgbWFueSBkYXlzIGFyZSByZXF1aXJlZCBpbiB0aGUgZmlyc3Qgd2VlayBvZiBhIHllYXIuXG4gICAqIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7V2Vla1NldHRpbmdzfG51bGx9IHdlZWtTZXR0aW5nc1xuICAgKi9cbiAgc3RhdGljIHNldCBkZWZhdWx0V2Vla1NldHRpbmdzKHdlZWtTZXR0aW5ncykge1xuICAgIGRlZmF1bHRXZWVrU2V0dGluZ3MgPSB2YWxpZGF0ZVdlZWtTZXR0aW5ncyh3ZWVrU2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3V0b2ZmIHllYXIgZm9yIHdoZXRoZXIgYSAyLWRpZ2l0IHllYXIgc3RyaW5nIGlzIGludGVycHJldGVkIGluIHRoZSBjdXJyZW50IG9yIHByZXZpb3VzIGNlbnR1cnkuIE51bWJlcnMgaGlnaGVyIHRoYW4gdGhlIGN1dG9mZiB3aWxsIGJlIGNvbnNpZGVyZWQgdG8gbWVhbiAxOXh4IGFuZCBudW1iZXJzIGxvd2VyIG9yIGVxdWFsIHRvIHRoZSBjdXRvZmYgd2lsbCBiZSBjb25zaWRlcmVkIDIweHguXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBzdGF0aWMgZ2V0IHR3b0RpZ2l0Q3V0b2ZmWWVhcigpIHtcbiAgICByZXR1cm4gdHdvRGlnaXRDdXRvZmZZZWFyO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3V0b2ZmIHllYXIgZm9yIHdoZXRoZXIgYSAyLWRpZ2l0IHllYXIgc3RyaW5nIGlzIGludGVycHJldGVkIGluIHRoZSBjdXJyZW50IG9yIHByZXZpb3VzIGNlbnR1cnkuIE51bWJlcnMgaGlnaGVyIHRoYW4gdGhlIGN1dG9mZiB3aWxsIGJlIGNvbnNpZGVyZWQgdG8gbWVhbiAxOXh4IGFuZCBudW1iZXJzIGxvd2VyIG9yIGVxdWFsIHRvIHRoZSBjdXRvZmYgd2lsbCBiZSBjb25zaWRlcmVkIDIweHguXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBleGFtcGxlIFNldHRpbmdzLnR3b0RpZ2l0Q3V0b2ZmWWVhciA9IDAgLy8gYWxsICd5eScgYXJlIGludGVycHJldGVkIGFzIDIwdGggY2VudHVyeVxuICAgKiBAZXhhbXBsZSBTZXR0aW5ncy50d29EaWdpdEN1dG9mZlllYXIgPSA5OSAvLyBhbGwgJ3l5JyBhcmUgaW50ZXJwcmV0ZWQgYXMgMjFzdCBjZW50dXJ5XG4gICAqIEBleGFtcGxlIFNldHRpbmdzLnR3b0RpZ2l0Q3V0b2ZmWWVhciA9IDUwIC8vICc0OScgLT4gMjA0OTsgJzUwJyAtPiAxOTUwXG4gICAqIEBleGFtcGxlIFNldHRpbmdzLnR3b0RpZ2l0Q3V0b2ZmWWVhciA9IDE5NTAgLy8gaW50ZXJwcmV0ZWQgYXMgNTBcbiAgICogQGV4YW1wbGUgU2V0dGluZ3MudHdvRGlnaXRDdXRvZmZZZWFyID0gMjA1MCAvLyBBTFNPIGludGVycHJldGVkIGFzIDUwXG4gICAqL1xuICBzdGF0aWMgc2V0IHR3b0RpZ2l0Q3V0b2ZmWWVhcihjdXRvZmZZZWFyKSB7XG4gICAgdHdvRGlnaXRDdXRvZmZZZWFyID0gY3V0b2ZmWWVhciAlIDEwMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgd2hldGhlciBMdXhvbiB3aWxsIHRocm93IHdoZW4gaXQgZW5jb3VudGVycyBpbnZhbGlkIERhdGVUaW1lcywgRHVyYXRpb25zLCBvciBJbnRlcnZhbHNcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgZ2V0IHRocm93T25JbnZhbGlkKCkge1xuICAgIHJldHVybiB0aHJvd09uSW52YWxpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgd2hldGhlciBMdXhvbiB3aWxsIHRocm93IHdoZW4gaXQgZW5jb3VudGVycyBpbnZhbGlkIERhdGVUaW1lcywgRHVyYXRpb25zLCBvciBJbnRlcnZhbHNcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgc2V0IHRocm93T25JbnZhbGlkKHQpIHtcbiAgICB0aHJvd09uSW52YWxpZCA9IHQ7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgTHV4b24ncyBnbG9iYWwgY2FjaGVzLiBTaG91bGQgb25seSBiZSBuZWNlc3NhcnkgaW4gdGVzdGluZyBzY2VuYXJpb3MuXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgcmVzZXRDYWNoZXMoKSB7XG4gICAgTG9jYWxlLnJlc2V0Q2FjaGUoKTtcbiAgICBJQU5BWm9uZS5yZXNldENhY2hlKCk7XG4gICAgRGF0ZVRpbWUucmVzZXRDYWNoZSgpO1xuICAgIHJlc2V0RGlnaXRSZWdleENhY2hlKCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IFpvbmVJc0Fic3RyYWN0RXJyb3IgfSBmcm9tIFwiLi9lcnJvcnMuanNcIjtcblxuLyoqXG4gKiBAaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpvbmUge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygem9uZVxuICAgKiBAYWJzdHJhY3RcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCB0eXBlKCkge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyB6b25lLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBuYW1lKCkge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIElBTkEgbmFtZSBvZiB0aGlzIHpvbmUuXG4gICAqIERlZmF1bHRzIHRvIGBuYW1lYCBpZiBub3Qgb3ZlcndyaXR0ZW4gYnkgYSBzdWJjbGFzcy5cbiAgICogQGFic3RyYWN0XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaWFuYU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG9mZnNldCBpcyBrbm93biB0byBiZSBmaXhlZCBmb3IgdGhlIHdob2xlIHllYXIuXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1VuaXZlcnNhbCgpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9mZnNldCdzIGNvbW1vbiBuYW1lIChzdWNoIGFzIEVTVCkgYXQgdGhlIHNwZWNpZmllZCB0aW1lc3RhbXBcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0cyAtIEVwb2NoIG1pbGxpc2Vjb25kcyBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBuYW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyB0byBhZmZlY3QgdGhlIGZvcm1hdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5mb3JtYXQgLSBXaGF0IHN0eWxlIG9mIG9mZnNldCB0byByZXR1cm4uIEFjY2VwdHMgJ2xvbmcnIG9yICdzaG9ydCcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLmxvY2FsZSAtIFdoYXQgbG9jYWxlIHRvIHJldHVybiB0aGUgb2Zmc2V0IG5hbWUgaW4uXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIG9mZnNldE5hbWUodHMsIG9wdHMpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9mZnNldCdzIHZhbHVlIGFzIGEgc3RyaW5nXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge251bWJlcn0gdHMgLSBFcG9jaCBtaWxsaXNlY29uZHMgZm9yIHdoaWNoIHRvIGdldCB0aGUgb2Zmc2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgLSBXaGF0IHN0eWxlIG9mIG9mZnNldCB0byByZXR1cm4uXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRzICduYXJyb3cnLCAnc2hvcnQnLCBvciAndGVjaGllJy4gUmV0dXJuaW5nICcrNicsICcrMDY6MDAnLCBvciAnKzA2MDAnIHJlc3BlY3RpdmVseVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBvZmZzZXQgaW4gbWludXRlcyBmb3IgdGhpcyB6b25lIGF0IHRoZSBzcGVjaWZpZWQgdGltZXN0YW1wLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRzIC0gRXBvY2ggbWlsbGlzZWNvbmRzIGZvciB3aGljaCB0byBjb21wdXRlIHRoZSBvZmZzZXRcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgb2Zmc2V0KHRzKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIFpvbmUgaXMgZXF1YWwgdG8gYW5vdGhlciB6b25lXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge1pvbmV9IG90aGVyWm9uZSAtIHRoZSB6b25lIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGVxdWFscyhvdGhlclpvbmUpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgWm9uZSBpcyB2YWxpZC5cbiAgICogQGFic3RyYWN0XG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgZm9ybWF0T2Zmc2V0LCBwYXJzZVpvbmVJbmZvLCBpc1VuZGVmaW5lZCwgb2JqVG9Mb2NhbFRTIH0gZnJvbSBcIi4uL2ltcGwvdXRpbC5qc1wiO1xuaW1wb3J0IFpvbmUgZnJvbSBcIi4uL3pvbmUuanNcIjtcblxubGV0IGR0ZkNhY2hlID0ge307XG5mdW5jdGlvbiBtYWtlRFRGKHpvbmUpIHtcbiAgaWYgKCFkdGZDYWNoZVt6b25lXSkge1xuICAgIGR0ZkNhY2hlW3pvbmVdID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJlbi1VU1wiLCB7XG4gICAgICBob3VyMTI6IGZhbHNlLFxuICAgICAgdGltZVpvbmU6IHpvbmUsXG4gICAgICB5ZWFyOiBcIm51bWVyaWNcIixcbiAgICAgIG1vbnRoOiBcIjItZGlnaXRcIixcbiAgICAgIGRheTogXCIyLWRpZ2l0XCIsXG4gICAgICBob3VyOiBcIjItZGlnaXRcIixcbiAgICAgIG1pbnV0ZTogXCIyLWRpZ2l0XCIsXG4gICAgICBzZWNvbmQ6IFwiMi1kaWdpdFwiLFxuICAgICAgZXJhOiBcInNob3J0XCIsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGR0ZkNhY2hlW3pvbmVdO1xufVxuXG5jb25zdCB0eXBlVG9Qb3MgPSB7XG4gIHllYXI6IDAsXG4gIG1vbnRoOiAxLFxuICBkYXk6IDIsXG4gIGVyYTogMyxcbiAgaG91cjogNCxcbiAgbWludXRlOiA1LFxuICBzZWNvbmQ6IDYsXG59O1xuXG5mdW5jdGlvbiBoYWNreU9mZnNldChkdGYsIGRhdGUpIHtcbiAgY29uc3QgZm9ybWF0dGVkID0gZHRmLmZvcm1hdChkYXRlKS5yZXBsYWNlKC9cXHUyMDBFL2csIFwiXCIpLFxuICAgIHBhcnNlZCA9IC8oXFxkKylcXC8oXFxkKylcXC8oXFxkKykgKEFEfEJDKSw/IChcXGQrKTooXFxkKyk6KFxcZCspLy5leGVjKGZvcm1hdHRlZCksXG4gICAgWywgZk1vbnRoLCBmRGF5LCBmWWVhciwgZmFkT3JCYywgZkhvdXIsIGZNaW51dGUsIGZTZWNvbmRdID0gcGFyc2VkO1xuICByZXR1cm4gW2ZZZWFyLCBmTW9udGgsIGZEYXksIGZhZE9yQmMsIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXTtcbn1cblxuZnVuY3Rpb24gcGFydHNPZmZzZXQoZHRmLCBkYXRlKSB7XG4gIGNvbnN0IGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXRUb1BhcnRzKGRhdGUpO1xuICBjb25zdCBmaWxsZWQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtYXR0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB7IHR5cGUsIHZhbHVlIH0gPSBmb3JtYXR0ZWRbaV07XG4gICAgY29uc3QgcG9zID0gdHlwZVRvUG9zW3R5cGVdO1xuXG4gICAgaWYgKHR5cGUgPT09IFwiZXJhXCIpIHtcbiAgICAgIGZpbGxlZFtwb3NdID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmICghaXNVbmRlZmluZWQocG9zKSkge1xuICAgICAgZmlsbGVkW3Bvc10gPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsbGVkO1xufVxuXG5sZXQgaWFuYVpvbmVDYWNoZSA9IHt9O1xuLyoqXG4gKiBBIHpvbmUgaWRlbnRpZmllZCBieSBhbiBJQU5BIGlkZW50aWZpZXIsIGxpa2UgQW1lcmljYS9OZXdfWW9ya1xuICogQGltcGxlbWVudHMge1pvbmV9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElBTkFab25lIGV4dGVuZHMgWm9uZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFpvbmUgbmFtZVxuICAgKiBAcmV0dXJuIHtJQU5BWm9uZX1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGUobmFtZSkge1xuICAgIGlmICghaWFuYVpvbmVDYWNoZVtuYW1lXSkge1xuICAgICAgaWFuYVpvbmVDYWNoZVtuYW1lXSA9IG5ldyBJQU5BWm9uZShuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIGlhbmFab25lQ2FjaGVbbmFtZV07XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgbG9jYWwgY2FjaGVzLiBTaG91bGQgb25seSBiZSBuZWNlc3NhcnkgaW4gdGVzdGluZyBzY2VuYXJpb3MuXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgcmVzZXRDYWNoZSgpIHtcbiAgICBpYW5hWm9uZUNhY2hlID0ge307XG4gICAgZHRmQ2FjaGUgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHN0cmluZyBpcyBhIHZhbGlkIHNwZWNpZmllci4gVGhpcyBvbmx5IGNoZWNrcyB0aGUgc3RyaW5nJ3MgZm9ybWF0LCBub3QgdGhhdCB0aGUgc3BlY2lmaWVyIGlkZW50aWZpZXMgYSBrbm93biB6b25lOyBzZWUgaXNWYWxpZFpvbmUgZm9yIHRoYXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzIC0gVGhlIHN0cmluZyB0byBjaGVjayB2YWxpZGl0eSBvblxuICAgKiBAZXhhbXBsZSBJQU5BWm9uZS5pc1ZhbGlkU3BlY2lmaWVyKFwiQW1lcmljYS9OZXdfWW9ya1wiKSAvLz0+IHRydWVcbiAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFNwZWNpZmllcihcIlNwb3J0fn5ibG9ycFwiKSAvLz0+IGZhbHNlXG4gICAqIEBkZXByZWNhdGVkIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGlzIGZvcndhcmRzIHRvIGlzVmFsaWRab25lLCBiZXR0ZXIgdXNlIGBpc1ZhbGlkWm9uZSgpYCBkaXJlY3RseSBpbnN0ZWFkLlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzVmFsaWRTcGVjaWZpZXIocykge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRab25lKHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZWQgc3RyaW5nIGlkZW50aWZpZXMgYSByZWFsIHpvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHpvbmUgLSBUaGUgc3RyaW5nIHRvIGNoZWNrXG4gICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRab25lKFwiQW1lcmljYS9OZXdfWW9ya1wiKSAvLz0+IHRydWVcbiAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFpvbmUoXCJGYW50YXNpYS9DYXN0bGVcIikgLy89PiBmYWxzZVxuICAgKiBAZXhhbXBsZSBJQU5BWm9uZS5pc1ZhbGlkWm9uZShcIlNwb3J0fn5ibG9ycFwiKSAvLz0+IGZhbHNlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNWYWxpZFpvbmUoem9uZSkge1xuICAgIGlmICghem9uZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJlbi1VU1wiLCB7IHRpbWVab25lOiB6b25lIH0pLmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG5hbWUpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qKiBAcHJpdmF0ZSAqKi9cbiAgICB0aGlzLnpvbmVOYW1lID0gbmFtZTtcbiAgICAvKiogQHByaXZhdGUgKiovXG4gICAgdGhpcy52YWxpZCA9IElBTkFab25lLmlzVmFsaWRab25lKG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHpvbmUuIGBpYW5hYCBmb3IgYWxsIGluc3RhbmNlcyBvZiBgSUFOQVpvbmVgLlxuICAgKiBAb3ZlcnJpZGVcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBcImlhbmFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGlzIHpvbmUgKGkuZS4gdGhlIElBTkEgem9uZSBuYW1lKS5cbiAgICogQG92ZXJyaWRlXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy56b25lTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG9mZnNldCBpcyBrbm93biB0byBiZSBmaXhlZCBmb3IgdGhlIHdob2xlIHllYXI6XG4gICAqIEFsd2F5cyByZXR1cm5zIGZhbHNlIGZvciBhbGwgSUFOQSB6b25lcy5cbiAgICogQG92ZXJyaWRlXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzVW5pdmVyc2FsKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvZmZzZXQncyBjb21tb24gbmFtZSAoc3VjaCBhcyBFU1QpIGF0IHRoZSBzcGVjaWZpZWQgdGltZXN0YW1wXG4gICAqIEBvdmVycmlkZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdHMgLSBFcG9jaCBtaWxsaXNlY29uZHMgZm9yIHdoaWNoIHRvIGdldCB0aGUgbmFtZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnMgdG8gYWZmZWN0IHRoZSBmb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuZm9ybWF0IC0gV2hhdCBzdHlsZSBvZiBvZmZzZXQgdG8gcmV0dXJuLiBBY2NlcHRzICdsb25nJyBvciAnc2hvcnQnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5sb2NhbGUgLSBXaGF0IGxvY2FsZSB0byByZXR1cm4gdGhlIG9mZnNldCBuYW1lIGluLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBvZmZzZXROYW1lKHRzLCB7IGZvcm1hdCwgbG9jYWxlIH0pIHtcbiAgICByZXR1cm4gcGFyc2Vab25lSW5mbyh0cywgZm9ybWF0LCBsb2NhbGUsIHRoaXMubmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgb2Zmc2V0J3MgdmFsdWUgYXMgYSBzdHJpbmdcbiAgICogQG92ZXJyaWRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0cyAtIEVwb2NoIG1pbGxpc2Vjb25kcyBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBvZmZzZXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCAtIFdoYXQgc3R5bGUgb2Ygb2Zmc2V0IHRvIHJldHVybi5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VwdHMgJ25hcnJvdycsICdzaG9ydCcsIG9yICd0ZWNoaWUnLiBSZXR1cm5pbmcgJys2JywgJyswNjowMCcsIG9yICcrMDYwMCcgcmVzcGVjdGl2ZWx5XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGZvcm1hdE9mZnNldCh0cywgZm9ybWF0KSB7XG4gICAgcmV0dXJuIGZvcm1hdE9mZnNldCh0aGlzLm9mZnNldCh0cyksIGZvcm1hdCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBvZmZzZXQgaW4gbWludXRlcyBmb3IgdGhpcyB6b25lIGF0IHRoZSBzcGVjaWZpZWQgdGltZXN0YW1wLlxuICAgKiBAb3ZlcnJpZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRzIC0gRXBvY2ggbWlsbGlzZWNvbmRzIGZvciB3aGljaCB0byBjb21wdXRlIHRoZSBvZmZzZXRcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgb2Zmc2V0KHRzKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRzKTtcblxuICAgIGlmIChpc05hTihkYXRlKSkgcmV0dXJuIE5hTjtcblxuICAgIGNvbnN0IGR0ZiA9IG1ha2VEVEYodGhpcy5uYW1lKTtcbiAgICBsZXQgW3llYXIsIG1vbnRoLCBkYXksIGFkT3JCYywgaG91ciwgbWludXRlLCBzZWNvbmRdID0gZHRmLmZvcm1hdFRvUGFydHNcbiAgICAgID8gcGFydHNPZmZzZXQoZHRmLCBkYXRlKVxuICAgICAgOiBoYWNreU9mZnNldChkdGYsIGRhdGUpO1xuXG4gICAgaWYgKGFkT3JCYyA9PT0gXCJCQ1wiKSB7XG4gICAgICB5ZWFyID0gLU1hdGguYWJzKHllYXIpICsgMTtcbiAgICB9XG5cbiAgICAvLyBiZWNhdXNlIHdlJ3JlIHVzaW5nIGhvdXIxMiBhbmQgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTAyNTU2NCZjYW49MiZxPSUyMjI0JTNBMDAlMjIlMjBkYXRldGltZWZvcm1hdFxuICAgIGNvbnN0IGFkanVzdGVkSG91ciA9IGhvdXIgPT09IDI0ID8gMCA6IGhvdXI7XG5cbiAgICBjb25zdCBhc1VUQyA9IG9ialRvTG9jYWxUUyh7XG4gICAgICB5ZWFyLFxuICAgICAgbW9udGgsXG4gICAgICBkYXksXG4gICAgICBob3VyOiBhZGp1c3RlZEhvdXIsXG4gICAgICBtaW51dGUsXG4gICAgICBzZWNvbmQsXG4gICAgICBtaWxsaXNlY29uZDogMCxcbiAgICB9KTtcblxuICAgIGxldCBhc1RTID0gK2RhdGU7XG4gICAgY29uc3Qgb3ZlciA9IGFzVFMgJSAxMDAwO1xuICAgIGFzVFMgLT0gb3ZlciA+PSAwID8gb3ZlciA6IDEwMDAgKyBvdmVyO1xuICAgIHJldHVybiAoYXNVVEMgLSBhc1RTKSAvICg2MCAqIDEwMDApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgWm9uZSBpcyBlcXVhbCB0byBhbm90aGVyIHpvbmVcbiAgICogQG92ZXJyaWRlXG4gICAqIEBwYXJhbSB7Wm9uZX0gb3RoZXJab25lIC0gdGhlIHpvbmUgdG8gY29tcGFyZVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZXF1YWxzKG90aGVyWm9uZSkge1xuICAgIHJldHVybiBvdGhlclpvbmUudHlwZSA9PT0gXCJpYW5hXCIgJiYgb3RoZXJab25lLm5hbWUgPT09IHRoaXMubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIFpvbmUgaXMgdmFsaWQuXG4gICAqIEBvdmVycmlkZVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLnZhbGlkO1xuICB9XG59XG4iLCJpbXBvcnQgeyBmb3JtYXRPZmZzZXQsIHNpZ25lZE9mZnNldCB9IGZyb20gXCIuLi9pbXBsL3V0aWwuanNcIjtcbmltcG9ydCBab25lIGZyb20gXCIuLi96b25lLmpzXCI7XG5cbmxldCBzaW5nbGV0b24gPSBudWxsO1xuXG4vKipcbiAqIEEgem9uZSB3aXRoIGEgZml4ZWQgb2Zmc2V0IChtZWFuaW5nIG5vIERTVClcbiAqIEBpbXBsZW1lbnRzIHtab25lfVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaXhlZE9mZnNldFpvbmUgZXh0ZW5kcyBab25lIHtcbiAgLyoqXG4gICAqIEdldCBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiBVVENcbiAgICogQHJldHVybiB7Rml4ZWRPZmZzZXRab25lfVxuICAgKi9cbiAgc3RhdGljIGdldCB1dGNJbnN0YW5jZSgpIHtcbiAgICBpZiAoc2luZ2xldG9uID09PSBudWxsKSB7XG4gICAgICBzaW5nbGV0b24gPSBuZXcgRml4ZWRPZmZzZXRab25lKDApO1xuICAgIH1cbiAgICByZXR1cm4gc2luZ2xldG9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBpbnN0YW5jZSB3aXRoIGEgc3BlY2lmaWVkIG9mZnNldFxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IC0gVGhlIG9mZnNldCBpbiBtaW51dGVzXG4gICAqIEByZXR1cm4ge0ZpeGVkT2Zmc2V0Wm9uZX1cbiAgICovXG4gIHN0YXRpYyBpbnN0YW5jZShvZmZzZXQpIHtcbiAgICByZXR1cm4gb2Zmc2V0ID09PSAwID8gRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlIDogbmV3IEZpeGVkT2Zmc2V0Wm9uZShvZmZzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBpbnN0YW5jZSBvZiBGaXhlZE9mZnNldFpvbmUgZnJvbSBhIFVUQyBvZmZzZXQgc3RyaW5nLCBsaWtlIFwiVVRDKzZcIlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcyAtIFRoZSBvZmZzZXQgc3RyaW5nIHRvIHBhcnNlXG4gICAqIEBleGFtcGxlIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcihcIlVUQys2XCIpXG4gICAqIEBleGFtcGxlIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcihcIlVUQyswNlwiKVxuICAgKiBAZXhhbXBsZSBGaXhlZE9mZnNldFpvbmUucGFyc2VTcGVjaWZpZXIoXCJVVEMtNjowMFwiKVxuICAgKiBAcmV0dXJuIHtGaXhlZE9mZnNldFpvbmV9XG4gICAqL1xuICBzdGF0aWMgcGFyc2VTcGVjaWZpZXIocykge1xuICAgIGlmIChzKSB7XG4gICAgICBjb25zdCByID0gcy5tYXRjaCgvXnV0Yyg/OihbKy1dXFxkezEsMn0pKD86OihcXGR7Mn0pKT8pPyQvaSk7XG4gICAgICBpZiAocikge1xuICAgICAgICByZXR1cm4gbmV3IEZpeGVkT2Zmc2V0Wm9uZShzaWduZWRPZmZzZXQoclsxXSwgclsyXSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG9mZnNldCkge1xuICAgIHN1cGVyKCk7XG4gICAgLyoqIEBwcml2YXRlICoqL1xuICAgIHRoaXMuZml4ZWQgPSBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygem9uZS4gYGZpeGVkYCBmb3IgYWxsIGluc3RhbmNlcyBvZiBgRml4ZWRPZmZzZXRab25lYC5cbiAgICogQG92ZXJyaWRlXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gXCJmaXhlZFwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoaXMgem9uZS5cbiAgICogQWxsIGZpeGVkIHpvbmVzJyBuYW1lcyBhbHdheXMgc3RhcnQgd2l0aCBcIlVUQ1wiIChwbHVzIG9wdGlvbmFsIG9mZnNldClcbiAgICogQG92ZXJyaWRlXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maXhlZCA9PT0gMCA/IFwiVVRDXCIgOiBgVVRDJHtmb3JtYXRPZmZzZXQodGhpcy5maXhlZCwgXCJuYXJyb3dcIil9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgSUFOQSBuYW1lIG9mIHRoaXMgem9uZSwgaS5lLiBgRXRjL1VUQ2Agb3IgYEV0Yy9HTVQrLy1ubmBcbiAgICpcbiAgICogQG92ZXJyaWRlXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaWFuYU5hbWUoKSB7XG4gICAgaWYgKHRoaXMuZml4ZWQgPT09IDApIHtcbiAgICAgIHJldHVybiBcIkV0Yy9VVENcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBFdGMvR01UJHtmb3JtYXRPZmZzZXQoLXRoaXMuZml4ZWQsIFwibmFycm93XCIpfWA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9mZnNldCdzIGNvbW1vbiBuYW1lIGF0IHRoZSBzcGVjaWZpZWQgdGltZXN0YW1wLlxuICAgKlxuICAgKiBGb3IgZml4ZWQgb2Zmc2V0IHpvbmVzIHRoaXMgZXF1YWxzIHRvIHRoZSB6b25lIG5hbWUuXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgb2Zmc2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9mZnNldCdzIHZhbHVlIGFzIGEgc3RyaW5nXG4gICAqIEBvdmVycmlkZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdHMgLSBFcG9jaCBtaWxsaXNlY29uZHMgZm9yIHdoaWNoIHRvIGdldCB0aGUgb2Zmc2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgLSBXaGF0IHN0eWxlIG9mIG9mZnNldCB0byByZXR1cm4uXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRzICduYXJyb3cnLCAnc2hvcnQnLCBvciAndGVjaGllJy4gUmV0dXJuaW5nICcrNicsICcrMDY6MDAnLCBvciAnKzA2MDAnIHJlc3BlY3RpdmVseVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkge1xuICAgIHJldHVybiBmb3JtYXRPZmZzZXQodGhpcy5maXhlZCwgZm9ybWF0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG9mZnNldCBpcyBrbm93biB0byBiZSBmaXhlZCBmb3IgdGhlIHdob2xlIHllYXI6XG4gICAqIEFsd2F5cyByZXR1cm5zIHRydWUgZm9yIGFsbCBmaXhlZCBvZmZzZXQgem9uZXMuXG4gICAqIEBvdmVycmlkZVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1VuaXZlcnNhbCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG9mZnNldCBpbiBtaW51dGVzIGZvciB0aGlzIHpvbmUgYXQgdGhlIHNwZWNpZmllZCB0aW1lc3RhbXAuXG4gICAqXG4gICAqIEZvciBmaXhlZCBvZmZzZXQgem9uZXMsIHRoaXMgaXMgY29uc3RhbnQgYW5kIGRvZXMgbm90IGRlcGVuZCBvbiBhIHRpbWVzdGFtcC5cbiAgICogQG92ZXJyaWRlXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIG9mZnNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5maXhlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIFpvbmUgaXMgZXF1YWwgdG8gYW5vdGhlciB6b25lIChpLmUuIGFsc28gZml4ZWQgYW5kIHNhbWUgb2Zmc2V0KVxuICAgKiBAb3ZlcnJpZGVcbiAgICogQHBhcmFtIHtab25lfSBvdGhlclpvbmUgLSB0aGUgem9uZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBlcXVhbHMob3RoZXJab25lKSB7XG4gICAgcmV0dXJuIG90aGVyWm9uZS50eXBlID09PSBcImZpeGVkXCIgJiYgb3RoZXJab25lLmZpeGVkID09PSB0aGlzLmZpeGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgWm9uZSBpcyB2YWxpZDpcbiAgICogQWxsIGZpeGVkIG9mZnNldCB6b25lcyBhcmUgdmFsaWQuXG4gICAqIEBvdmVycmlkZVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iLCJpbXBvcnQgWm9uZSBmcm9tIFwiLi4vem9uZS5qc1wiO1xuXG4vKipcbiAqIEEgem9uZSB0aGF0IGZhaWxlZCB0byBwYXJzZS4gWW91IHNob3VsZCBuZXZlciBuZWVkIHRvIGluc3RhbnRpYXRlIHRoaXMuXG4gKiBAaW1wbGVtZW50cyB7Wm9uZX1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW52YWxpZFpvbmUgZXh0ZW5kcyBab25lIHtcbiAgY29uc3RydWN0b3Ioem9uZU5hbWUpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qKiAgQHByaXZhdGUgKi9cbiAgICB0aGlzLnpvbmVOYW1lID0gem9uZU5hbWU7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gXCJpbnZhbGlkXCI7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy56b25lTmFtZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBpc1VuaXZlcnNhbCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBvZmZzZXROYW1lKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZm9ybWF0T2Zmc2V0KCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0KCkge1xuICAgIHJldHVybiBOYU47XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBlcXVhbHMoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCJpbXBvcnQgeyBmb3JtYXRPZmZzZXQsIHBhcnNlWm9uZUluZm8gfSBmcm9tIFwiLi4vaW1wbC91dGlsLmpzXCI7XG5pbXBvcnQgWm9uZSBmcm9tIFwiLi4vem9uZS5qc1wiO1xuXG5sZXQgc2luZ2xldG9uID0gbnVsbDtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBsb2NhbCB6b25lIGZvciB0aGlzIEphdmFTY3JpcHQgZW52aXJvbm1lbnQuXG4gKiBAaW1wbGVtZW50cyB7Wm9uZX1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3lzdGVtWm9uZSBleHRlbmRzIFpvbmUge1xuICAvKipcbiAgICogR2V0IGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBsb2NhbCB6b25lXG4gICAqIEByZXR1cm4ge1N5c3RlbVpvbmV9XG4gICAqL1xuICBzdGF0aWMgZ2V0IGluc3RhbmNlKCkge1xuICAgIGlmIChzaW5nbGV0b24gPT09IG51bGwpIHtcbiAgICAgIHNpbmdsZXRvbiA9IG5ldyBTeXN0ZW1ab25lKCk7XG4gICAgfVxuICAgIHJldHVybiBzaW5nbGV0b247XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gXCJzeXN0ZW1cIjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IGlzVW5pdmVyc2FsKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldE5hbWUodHMsIHsgZm9ybWF0LCBsb2NhbGUgfSkge1xuICAgIHJldHVybiBwYXJzZVpvbmVJbmZvKHRzLCBmb3JtYXQsIGxvY2FsZSk7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkge1xuICAgIHJldHVybiBmb3JtYXRPZmZzZXQodGhpcy5vZmZzZXQodHMpLCBmb3JtYXQpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0KHRzKSB7XG4gICAgcmV0dXJuIC1uZXcgRGF0ZSh0cykuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGVxdWFscyhvdGhlclpvbmUpIHtcbiAgICByZXR1cm4gb3RoZXJab25lLnR5cGUgPT09IFwic3lzdGVtXCI7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0bG9hZGVkOiBmYWxzZSxcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG5cdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm5tZCA9IChtb2R1bGUpID0+IHtcblx0bW9kdWxlLnBhdGhzID0gW107XG5cdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0cmV0dXJuIG1vZHVsZTtcbn07IiwiaW1wb3J0IHsgSG9tZSB9IGZyb20gXCJAb3BlbmZpbi93b3Jrc3BhY2VcIjtcbmltcG9ydCB7IGluaXQgfSBmcm9tIFwiQG9wZW5maW4vd29ya3NwYWNlLXBsYXRmb3JtXCI7XG5pbXBvcnQgeyByZWdpc3RlciB9IGZyb20gXCIuL2hvbWVcIjtcblxuY29uc3QgUExBVEZPUk1fSUQgPSBcImN1c3RvbWl6ZS1ob21lLXRlbXBsYXRlc1wiO1xuY29uc3QgUExBVEZPUk1fVElUTEUgPSBcIkN1c3RvbWl6ZSBIb21lIFRlbXBsYXRlc1wiO1xuY29uc3QgUExBVEZPUk1fSUNPTiA9IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2Zhdmljb24uaWNvXCI7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBhc3luYyAoKSA9PiB7XG5cdC8vIFdoZW4gdGhlIHBsYXRmb3JtIGFwaSBpcyByZWFkeSB3ZSBib290c3RyYXAgdGhlIHBsYXRmb3JtLlxuXHRjb25zdCBwbGF0Zm9ybSA9IGZpbi5QbGF0Zm9ybS5nZXRDdXJyZW50U3luYygpO1xuXHRhd2FpdCBwbGF0Zm9ybS5vbmNlKFwicGxhdGZvcm0tYXBpLXJlYWR5XCIsIGFzeW5jICgpID0+IGluaXRpYWxpemVXb3Jrc3BhY2VDb21wb25lbnRzKCkpO1xuXG5cdC8vIFRoZSBET00gaXMgcmVhZHkgc28gaW5pdGlhbGl6ZSB0aGUgcGxhdGZvcm1cblx0Ly8gUHJvdmlkZSBkZWZhdWx0IGljb25zIGFuZCBkZWZhdWx0IHRoZW1lIGZvciB0aGUgYnJvd3NlciB3aW5kb3dzXG5cdGF3YWl0IGluaXRpYWxpemVXb3Jrc3BhY2VQbGF0Zm9ybSgpO1xufSk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSB0aGUgd29ya3NwYWNlIHBsYXRmb3JtLlxuICovXG5hc3luYyBmdW5jdGlvbiBpbml0aWFsaXplV29ya3NwYWNlUGxhdGZvcm0oKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnNvbGUubG9nKFwiSW5pdGlhbGl6aW5nIHdvcmtzcGFjZSBwbGF0Zm9ybVwiKTtcblx0YXdhaXQgaW5pdCh7XG5cdFx0YnJvd3Nlcjoge1xuXHRcdFx0ZGVmYXVsdFdpbmRvd09wdGlvbnM6IHtcblx0XHRcdFx0aWNvbjogUExBVEZPUk1fSUNPTixcblx0XHRcdFx0d29ya3NwYWNlUGxhdGZvcm06IHtcblx0XHRcdFx0XHRwYWdlczogW10sXG5cdFx0XHRcdFx0ZmF2aWNvbjogUExBVEZPUk1fSUNPTlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR0aGVtZTogW1xuXHRcdFx0e1xuXHRcdFx0XHRsYWJlbDogXCJEZWZhdWx0XCIsXG5cdFx0XHRcdGRlZmF1bHQ6IFwiZGFya1wiLFxuXHRcdFx0XHRwYWxldHRlOiB7XG5cdFx0XHRcdFx0YnJhbmRQcmltYXJ5OiBcIiMwQTc2RDNcIixcblx0XHRcdFx0XHRicmFuZFNlY29uZGFyeTogXCIjMzgzQTQwXCIsXG5cdFx0XHRcdFx0YmFja2dyb3VuZFByaW1hcnk6IFwiIzFFMUYyM1wiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH0pO1xufVxuXG4vKipcbiAqIEJyaW5nIHRoZSBwbGF0Zm9ybSB0byBsaWZlLlxuICovXG5hc3luYyBmdW5jdGlvbiBpbml0aWFsaXplV29ya3NwYWNlQ29tcG9uZW50cygpOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc29sZS5sb2coXCJJbml0aWFsaXppbmcgdGhlIHdvcmtzcGFjZSBjb21wb25lbnRzXCIpO1xuXG5cdC8vIFJlZ2lzdGVyIHdpdGggaG9tZSBhbmQgc2hvdyBpdFxuXHRhd2FpdCByZWdpc3RlcihQTEFURk9STV9JRCwgUExBVEZPUk1fVElUTEUsIFBMQVRGT1JNX0lDT04pO1xuXHRhd2FpdCBIb21lLnNob3coKTtcblxuXHQvLyBXaGVuIHRoZSBwbGF0Zm9ybSByZXF1ZXN0cyB0byBiZSBjbG9zZWQgd2UgZGVyZWdpc3RlciBmcm9tIGhvbWUgYW5kIHF1aXRcblx0Y29uc3QgcHJvdmlkZXJXaW5kb3cgPSBmaW4uV2luZG93LmdldEN1cnJlbnRTeW5jKCk7XG5cdGF3YWl0IHByb3ZpZGVyV2luZG93Lm9uY2UoXCJjbG9zZS1yZXF1ZXN0ZWRcIiwgYXN5bmMgKCkgPT4ge1xuXHRcdGF3YWl0IEhvbWUuZGVyZWdpc3RlcihQTEFURk9STV9JRCk7XG5cdFx0YXdhaXQgZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkucXVpdCgpO1xuXHR9KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file